Come inserire testo dopo punto?


7

Vorrei inserire (programmaticamente) del testo subito dopo il punto (senza spostarlo). Ho pensato a questo:

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

Sembra funzionare È un buon modo per fare quello che voglio? Ad esempio, ci sono situazioni in cui ciò potrebbe rompersi? (A parte quelli dove insertsi spezzerebbero comunque, come i buffer di sola lettura.) È diverso da quello che farebbero gli hacker Elisp più esperti?


5
Sì. Non c'è molto altro da dire.
shosti,

Grazie; Ero un po 'preoccupato ad esempio per alcune (strane?) Situazioni in cui non avrebbe funzionato ecc.
MBork

3
In questo caso potresti riformulare la domanda. Ma il 99% delle volte, save-excursion+ insertè la strada da percorrere.
shosti,

Ok lo farò. A proposito: che cos'è l'1%?
mbork,

1
Strane modalità con sovrapposizioni di sola lettura e quel genere di cose. Niente di cui preoccuparsi davvero.
shosti,

Risposte:


6

Un esempio molto comune di questo comportamento è electric-pair-modenella libreria standard di Emacs. Se non hai mai usato questa modalità prima di allora (citando il manuale ):

Ogni volta che si inserisce un delimitatore di apertura, viene inserito automaticamente anche il delimitatore di chiusura corrispondente, lasciando il punto tra i due.

Puoi controllare il codice per electric-pair-post-self-insert-functionvedere come compie l'inserimento. 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)))))))

6

Sì, questo è il modo più idiomatico di inserire testo dopo punto che conosco. save-excursionè molto resistente alle modifiche nel buffer, quindi è il modo preferito per eseguire modifiche distruttive. L'unico posto in cui potresti incorrere in problemi è dove potresti avere problemi con insertse stesso, come i buffer in cui del testo è di sola lettura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.