Plegar URL


7

Estoy editando un documento con muchas URL, y me gustaría doblarlas automáticamente hasta la última parte de la URL para que ocupen menos espacio en la línea, de forma similar a como se hideshowpliegan bloques de código. Por ejemplo:

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

A:

<baz.html>

Agradecería cualquier sugerencia sobre cómo hacer esto, preferiblemente de manera compatible goto-address. También me pregunto si es posible incluir un +/-símbolo junto a la URL como en hideshowvis.

Respuestas:


6

El análisis de URL probablemente podría incluirse, así que tome esto solo como un ejemplo, pero la idea general es la siguiente:

(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 en las URL para alternar el estado expandido / minificado.


2
Esto parece ser una actualización útil para el incorporado goto-address-mode. Por favor considere contribuir.
abo-abo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.