Dobrando URLs


7

Estou editando um documento com muitos URLs e gostaria de dobrá-los automaticamente para apenas a última parte do URL, para que ocupem menos espaço na linha, semelhante à maneira como hideshowdobra blocos de código. Por exemplo:

<http://www.foo.bar/baz.html>

Para:

<baz.html>

Eu gostaria de receber sugestões sobre como fazer isso, de preferência de uma forma compatível com goto-address. Também estou pensando se é possível incluir um +/-símbolo ao lado do URL, como em hideshowvis.

Respostas:


6

A análise de URL provavelmente pode ser incluída, portanto, tome isso apenas como exemplo, mas a ideia geral é a seguinte:

(defun my/minify-urls (beg end)
  (interactive
   (if (region-active-p)
       (list (region-beginning) (region-end))
     (list (point-min) (point-max))))
  (save-excursion
    (goto-char beg)
    (while (re-search-forward "<\\w+:\\/\\/\\(:?[^>\\/]+\\/\\)*\\([^>\\/]+\\)>" end t)
      (message "matched")
      (let* ((all (match-string 0))
             (match (match-string 1))
             (ibeg (- (point) (length all) -1))
             (iend (- (point) (length match) -3)))
        (make-text-button iend (1- (point))
                          'len (- iend ibeg)
                          'state nil
                          'action (lambda (button)
                                    (let ((state (button-get button 'state))
                                          (len (button-get button 'len))
                                          (pos (button-start button)))
                                      (add-text-properties
                                       (- pos len) pos
                                       (if state '(invisible t) '(invisible nil)))
                                      (button-put button 'state (not state)))))
        (add-text-properties ibeg iend '(invisible t))))))

RET nos URLs para alternar o estado expandido / minificado.


2
Essa parece ser uma atualização útil para o built-in goto-address-mode. Por favor, considere contribuir.
abo-abo 17/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.