Como inserir texto após o ponto?

7

Eu gostaria de inserir (programaticamente) algum texto logo após o ponto (sem movê-lo). Eu vim com isso:

(save-excursion (insert "my text"))

Parece funcionar. É uma boa maneira de fazer o que eu quero? Por exemplo, existem situações em que isso pode quebrar? (Além daqueles que insertquebrariam de qualquer maneira, como buffers somente leitura.) É diferente do que os hackers Elisp mais experientes fazem?

mbork
fonte
5
Sim. Não há muito mais a dizer.
Shosti
Obrigado; Eu estava um pouco preocupado sobre, por exemplo, algumas situações em que não iria funcionar etc. (estranho?)
mbork
3
Você pode reformular a pergunta nesse caso. Mas 99% do tempo, save-excursion+ inserté o caminho a percorrer.
Shosti
OK eu vou fazer isso. BTW: qual é o 1%?
mbork
1
Modos estranhos com sobreposições somente leitura e esse tipo de coisa. Nada para se preocupar realmente.
shosti 13/10/14

Respostas:

6

Um exemplo muito comum desse comportamento está electric-pair-modena biblioteca padrão do Emacs. Se você nunca usou esse modo antes, então (citando o manual ):

Sempre que você insere um delimitador de abertura, o delimitador de fechamento correspondente também é inserido automaticamente, deixando um ponto entre os dois.

Você pode verificar o código para electric-pair-post-self-insert-functionver como ele realiza a inserção. Spoiler:

(defun electric-pair-post-self-insert-function ()
  [lots of cond logic to decide if it's time to insert a matching closer]
      (save-excursion (insert closer)))))))
purple_arrows
fonte
6

Sim, essa é a maneira mais idiomática de inserir texto após um ponto que eu conheço. save-excursioné muito resistente a alterações no buffer, por isso é a maneira preferida de fazer edições destrutivas. O único lugar em que você provavelmente terá problemas é onde terá problemas consigo insert, como buffers em que algum texto é somente leitura.

shosti
fonte