Obtener contenido de un buffer

15

Entonces buffer-stringobtiene el contenido del búfer actual. Pero no permite especificar otros buffers.

¿Cómo puedo evitar eso? ¿Necesito algo como save-window-excursionhacer que funcione?

Maciej Goszczycki
fuente
Si no te importa que te pregunte, ¿qué estás tratando de hacer?
Luke Shimkus
@ King Estoy creando un proceso asincrónico y quiero enviar el contenido del búfer como entrada estándar. Pensé que podía usar process-send-stringy me quedé atascado.
Maciej Goszczycki

Respuestas:

25

Muchas cosas en Emacs operan en el búfer actual. Debe cambiar el búfer actual y restaurarlo cuando haya terminado. Úselo with-current-bufferpara casos simples donde solo necesita hacer algo en otro búfer, y save-current-bufferpara casos más complejos donde necesita navegar entre varios búferes.

(defun buffer-string* (buffer)
  (with-current-buffer buffer
    (buffer-string)))

Si desea el contenido de texto del búfer sin propiedades, llame buffer-substring-no-properties.

buffer-stringdevuelve solo la parte estrecha del búfer. Si necesita todo el contenido, amplíelo después de guardar el estrechamiento.

(defun buffer-whole-string (buffer)
  (with-current-buffer buffer
    (save-restriction
      (widen)
      (buffer-substring-no-properties (point-min) (point-max)))))

Si también necesita guardar el punto, llame save-excursiontambién. Tenga en cuenta que save-excursionrestaura el punto solo en el búfer actual, por lo que si necesita cambiar a otro búfer y moverse por allí, llame al save-excursioninterior save-current-buffero with-current-buffer.

Gilles 'SO- deja de ser malvado'
fuente