Comment insérer du texte après un point?


7

Je voudrais insérer (par programmation) du texte juste après le point (sans le déplacer). Je suis venu avec ceci:

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

Cela semble fonctionner. Est-ce un bon moyen de faire ce que je veux? Par exemple, y a-t-il des situations où cela pourrait se briser? (À part ceux où ils insertse briseraient de toute façon, comme les tampons en lecture seule.) Est-ce différent de ce que feraient les pirates Elisp plus expérimentés?


5
Oui. Pas grand chose de plus à dire.
shosti

Merci; J'étais un peu inquiet, par exemple, dans certaines situations (étranges?)

3
Vous pouvez reformuler la question dans ce cas. Mais 99% du temps, save-excursion+ insertest la voie à suivre.
shosti

OK je vais le faire. BTW: quel est le 1%?
mbork

1
Des modes étranges avec des superpositions en lecture seule et ce genre de chose. Rien à craindre vraiment.
shosti du

Réponses:


6

Un exemple très courant de ce comportement se trouve electric-pair-modedans la bibliothèque standard Emacs. Si vous n'avez jamais utilisé ce mode auparavant, (en citant le manuel ):

Chaque fois que vous insérez un délimiteur d'ouverture, le délimiteur de fermeture correspondant est automatiquement inséré également, laissant un point entre les deux.

Vous pouvez consulter le code pour electric-pair-post-self-insert-functionvoir comment il réalise l'insertion. Divulgacher:

(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

Oui, c'est la façon la plus idiomatique d'insérer du texte après un point que je connaisse. save-excursionest très résistant aux changements dans le tampon, c'est donc le moyen préféré pour effectuer des modifications destructives. Le seul endroit où vous risquez de rencontrer des problèmes est celui où vous auriez des problèmes avec insertlui-même, comme les tampons où du texte est en lecture seule.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.