Ich schreibe ein Debugger-Frontend , und dabei werden im Verlauf der Programmausführung eine Reihe von Markierungen im Quellcode hinzugefügt. In anderen Puffern wie einem Puffer, der den Ausführungsverlauf anzeigt, oder einem Puffer, der Backtrace oder Callstack enthält, möchte ich in diesen Puffern Textinformationen haben, die zum Quelltext durchklicken.
Unter http://www.gnu.org/software/emacs/manual/html_node/elisp/Clickable-Text.html erscheint das Hinzufügen von anklickbarem Text etwas umständlich.
Um beispielsweise einen Textbereich so einzustellen, dass er anklickbar ist, benötige ich Folgendes:
(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)
Und dann brauche ich noch eine Definition, um 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))))
All dies scheint ein bisschen boilerplate und es gibt viel davon. Ich könnte dafür meine eigenen Routinen schreiben, aber da dies ein ziemlich grundlegender Gedanke zu sein scheint: Verknüpfen Sie Text in einem Puffer mit einer Markierung an einer anderen Stelle. Ich denke, es muss bereits ein Paket geben, das das oben Genannte vereinfacht. Gibt es?
(defun name(event) (interactive "e") (let* ((pos (posn-point (event-end event))) (loc (get-text-property pos 'some-property))) (call-some-fn loc)))
ist auch so ziemlich Boilerplate.(info "(elisp) Button Types")
und vielleicht sollte ein Makro Sie dorthin bringen.Wenn Ihr klickbaren Text kann durch einen regulären Ausdruck definiert werden, die Tastensperre Bibliothek kombiniert Tasten mit font-Lock und kann klickbare Muster in einem Schritt definieren. Beispiel:
(button-lock-set-button "http://google.com" 'browse-url-at-mouse)
quelle
Die Bibliothek
linkd.el
bietet eine sehr einfache Möglichkeit, Ihren Dateien anklickbaren Text hinzuzufügen. Aus der Quelldatei Kommentar:quelle