Tôi đang viết một giao diện trình gỡ lỗi và trong quá trình thực hiện chương trình, một số dấu được thêm vào bên trong mã nguồn. Trong các bộ đệm khác, chẳng hạn như bộ đệm hiển thị lịch sử thực hiện hoặc bộ đệm chứa backtrace hoặc callstack, tôi muốn có trong các bộ đệm đó thông tin văn bản nhấp qua văn bản nguồn.
Nhìn vào http://www.gnu.org/software/emacs/manual/html_node/elisp/Clickable-Text.html , quá trình thêm văn bản có thể nhấp có vẻ hơi phức tạp.
Ví dụ: chỉ để đặt một vùng văn bản có thể nhấp được, tôi cần một cái gì đó như:
(setq link-start (point))
(insert (format "%s" (realgud-loc-marker loc)))
(setq link-end (point))
(add-text-properties
link-start link-end
'(mouse-face highlight
help-echo "mouse-2: go to this location"))
(setq map (make-sparse-keymap))
(define-key map [mouse-2] 'realgud:follow-link)
(define-key map [mouse-1] 'realgud:follow-link)
(define-key map [follow-link] 'mouse-face)
(put-text-property link-start link-end 'keymap map)
(put-text-property link-start link-end 'loc loc)
Và sau đó tôi cũng cần một định nghĩa cho realgud: follow-link:
(defun realgud:follow-link(event)
(interactive "e")
(let* ((pos (posn-point (event-end event)))
(loc (get-text-property pos 'loc)))
(if (realgud-loc-p loc)
(realgud-loc-goto loc))))
Tất cả điều này có vẻ hơi sôi nổi và có rất nhiều. Tôi có thể viết các thói quen của riêng mình, vì điều này có vẻ như là một suy nghĩ khá cơ bản phải làm: liên kết một số văn bản trong bộ đệm với một dấu ở một nơi khác, tôi nghĩ rằng phải có một gói đơn giản hóa ở trên. Lanhung?
(defun name(event) (interactive "e") (let* ((pos (posn-point (event-end event))) (loc (get-text-property pos 'some-property))) (call-some-fn loc)))
cũng là khá nhiều nồi hơi.