Gấp URL


7

Tôi đang chỉnh sửa một tài liệu có rất nhiều URL trong đó và tôi muốn tự động gấp chúng xuống chỉ là phần cuối của URL để chúng chiếm ít chỗ hơn trên dòng, tương tự như cách hideshowgấp các khối mã. Ví dụ:

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

Đến:

<baz.html>

Tôi sẽ đánh giá cao bất kỳ đề xuất nào về cách làm điều này, tốt nhất là theo cách tương thích goto-address. Tôi cũng tự hỏi liệu có thể bao gồm một +/-biểu tượng bên cạnh URL như trong không hideshowvis.

Câu trả lời:


6

Phân tích cú pháp URL có thể được bao gồm, vì vậy hãy lấy đây làm ví dụ, nhưng ý tưởng chung là như thế này:

(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 trên các URL để chuyển trạng thái mở rộng / thu nhỏ.


2
Đây có vẻ là một bản cập nhật hữu ích cho tích hợp goto-address-mode. Hãy xem xét đóng góp.
abo-abo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.