Ottieni il contenuto di un buffer


15

Quindi buffer-stringottiene il contenuto del buffer corrente. Ma non consente di specificare altri buffer.

Come posso aggirarlo? Ho bisogno di qualcosa di simile save-window-excursionper farlo funzionare?


Se non ti dispiace che te lo chieda, cosa stai cercando di fare?
Luke Shimkus,

@King Sto creando un processo asincrono e desidero inviare il contenuto del buffer come input standard. Ho pensato di poter usare process-send-stringe mi sono bloccato.
Maciej Goszczycki,

Risposte:


25

Molte cose in Emacs operano sul buffer corrente. È necessario modificare il buffer corrente e ripristinarlo al termine. Utilizzare with-current-bufferper casi semplici in cui è sufficiente eseguire operazioni in un altro buffer e save-current-bufferper casi più complessi in cui è necessario spostarsi tra più buffer.

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

Se si desidera il contenuto testuale del buffer senza proprietà, chiamare buffer-substring-no-properties.

buffer-stringrestituisce solo la parte ristretta del buffer. Se hai bisogno di tutto il contenuto, allargalo dopo aver salvato il restringimento.

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

Se è necessario salvare anche il punto, chiamare save-excursionanche. Si noti che save-excursionripristina il punto solo nel buffer corrente, quindi se è necessario passare a un altro buffer e spostarsi lì, chiamare save-excursionall'interno save-current-buffero with-current-buffer.

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.