¿Cómo consigo que emacs inserte texto en un archivo arbitrario?


5

Estoy tratando de crear una función que inserte texto en un archivo arbitrario sin cambiar al búfer de ese archivo.

Sé que esto podría hacerse con echo, pero ¿hay alguna manera de hacerlo usando solo elisp?


1
Para agregar archivos, verifique las funciones append-to-filey write-regionla referencia de elisp (información - Elisp - Escritura en archivos)
Juancho

Respuestas:


4

Prueba esta función:

(defun append-string-to-file (string filename)
  "Appends STRING to FILENAME."
  (interactive)
  (append-to-file string nil filename))

¿Cómo se espera que esto funcione de forma interactiva? (¿Y por qué no solo usar append-to-file, que lo hace?)
Radon Rosborough

2

Debe hacer que el búfer sea actual para hacer prácticamente cualquier cosa con su contenido. Hacer que un búfer sea actual está relacionado con el intérprete Lisp, no implica mostrar el búfer en una ventana. Las primitivas básicas son set-bufferconfigurar el búfer para operaciones posteriores y save-excursionejecutar un fragmento de código y restaurar el búfer actual después.

Hay una serie de macros llamadas with-SOMETHINGpara ejecutar código con diferentes configuraciones (como el búfer actual) y restaurar las configuraciones cuando el código sale (por cualquier motivo, ya sea salida normal o una excepción).

(with-current-buffer "name-of-file-that's-already-open"
  (goto-char 42)
  (insert "hello"))

Si desea abrir el archivo y cerrarlo cuando haya terminado, no hay with-macro en la biblioteca estándar. (Advertencia: escrito directamente en el navegador).

(save-excursion
  (let (buf)
    (unwind-protect
      (progn
        (setq buf (find-file-noselect "filename"))
        (when buf
          (goto-char 42)
          (insert "hello")))
      (if buf (kill-buffer buf))))
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.