Chciałbym napisać polecenie elisp emacs, które wstawia stały ciąg znaków, który zawiera część zmienną w bieżącej pozycji kursora:
\label{$STRING} \index{\nameref{$STRING}}
gdzie polecenie powinno wyszukać $STRING
i wstawić cały tekst.
Oto prosta funkcja elisp:
(defun labelnameref (string)
"Insert \label{ARG} \index{\nameref{ARG}} at point"
(interactive "sString for \\label and \\nameref: ")
(insert "\\label{" string "} \\index{\\nameref{" string "}}"))
Ta funkcja odpytuje w minibuforze ciąg znaków, a następnie wstawia wszystko w punkcie. Aby go użyć, możesz umieścić go w .emacs, a następnie wywołać za pomocą M-x labelnameref
lub powiązać z kluczem.
Jeśli chcesz użyć wielu podobnych konstrukcji, łatwiejsze może być napisanie ich jako yasnippets. Dzięki YASnippet możesz łatwo utworzyć fragment o podobnym działaniu jak powyżej. Na przykład możesz użyć następujących poleceń (zastąpiłeś „skrót klawiszowy” odpowiednim skrótem klawiszowym, jeśli chcesz go przypisać):
# -*- mode: snippet -*-
# name: foo
# key: foo
# binding: "keybinding"
# --
\label{$1} \index{\nameref{$1}}
Dzięki temu piszesz foo i naciskasz Tabbezpośrednio po nim, aby go rozwinąć \label{$1} \index{\nameref{$1}}
i zapytać o $1
.