Como posso escrever um comando emacs que insere um texto com uma sequência variável na posição atual do cursor?

12

Gostaria de escrever um comando elisp emacs que insira uma string fixa que contenha uma parte variável na posição atual do cursor:

\label{$STRING} \index{\nameref{$STRING}}

onde o comando deve consultar $STRINGe inserir o texto inteiro.

Fluxo
fonte

Respostas:

12

Elisp

Aqui está uma função elisp simples para isso:

(defun labelnameref (string)
  "Insert \label{ARG} \index{\nameref{ARG}} at point"
  (interactive "sString for \\label and \\nameref: ")
  (insert "\\label{" string "} \\index{\\nameref{" string "}}"))

Essa função consulta no minibuffer a string e depois insere tudo no ponto. Para usá-lo, você pode colocá-lo no seu .emacs e depois invocá-lo via M-x labelnamerefou vinculá-lo a uma chave.

YASnippet

Se você deseja usar muitas construções semelhantes, pode ser mais fácil escrevê-las como yasnippets. Com o YASnippet, você pode criar facilmente um snippet com comportamento semelhante ao descrito acima. Por exemplo, você pode usar o seguinte (você substituiu "keybinding" por uma keybinding adequada, se desejar uma keybinding para ela):

# -*- mode: snippet -*-
# name: foo
# key: foo
# binding: "keybinding"
# --
\label{$1} \index{\nameref{$1}}

Com isso, você escreve foo e pressiona Tabdiretamente depois para expandi-lo \label{$1} \index{\nameref{$1}}e procurar $1.

NN
fonte