¿Cómo insertar texto después del punto?


7

Me gustaría insertar (mediante programación) algo de texto justo después del punto (sin moverlo). Se me ocurrió esto:

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

Parece funcionar. ¿Es una buena manera de hacer lo que quiero? Por ejemplo, ¿hay situaciones en las que esto podría romperse? (Aparte de los que insertse romperían de todos modos, como los buffers de solo lectura). ¿Es diferente de lo que harían los hackers de Elisp más experimentados?


55
Si. No hay mucho más que decir.
shosti

Gracias; Estaba un poco preocupado por, por ejemplo, algunas situaciones (¿extrañas?) En las que no funcionaría, etc.
mbork

3
Podrías reformular la pregunta en ese caso. Pero el 99% del tiempo, save-excursion+ insertes el camino a seguir.
shosti

Esta bien, lo haré. Por cierto: ¿cuál es el 1%?
mbork

1
Modos extraños con superposiciones de solo lectura y ese tipo de cosas. Nada de qué preocuparse realmente.
shosti

Respuestas:


6

Un ejemplo muy común de este comportamiento está electric-pair-modeen la biblioteca estándar de Emacs. Si nunca antes ha usado este modo, (citando el manual ):

Cada vez que inserta un delimitador de apertura, el delimitador de cierre correspondiente también se inserta automáticamente, dejando el punto entre los dos.

Puede consultar el código para electric-pair-post-self-insert-functionver cómo se realiza la inserción. Revelación:

(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í, esa es la forma más idiomática de insertar texto después de un punto que conozco. save-excursiones muy resistente a los cambios en el búfer, por lo que es la forma preferida de hacer una edición destructiva. El único lugar donde es probable que tenga problemas es donde tendría problemas consigo insertmismo, como los búferes donde algunos textos son de solo lectura.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.