Quindi buffer-string
ottiene il contenuto del buffer corrente. Ma non consente di specificare altri buffer.
Come posso aggirarlo? Ho bisogno di qualcosa di simile save-window-excursion
per farlo funzionare?
process-send-string
e mi sono bloccato.
Quindi buffer-string
ottiene il contenuto del buffer corrente. Ma non consente di specificare altri buffer.
Come posso aggirarlo? Ho bisogno di qualcosa di simile save-window-excursion
per farlo funzionare?
process-send-string
e mi sono bloccato.
Risposte:
Molte cose in Emacs operano sul buffer corrente. È necessario modificare il buffer corrente e ripristinarlo al termine. Utilizzare with-current-buffer
per casi semplici in cui è sufficiente eseguire operazioni in un altro buffer e save-current-buffer
per 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-string
restituisce 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-excursion
anche. Si noti che save-excursion
ripristina il punto solo nel buffer corrente, quindi se è necessario passare a un altro buffer e spostarsi lì, chiamare save-excursion
all'interno save-current-buffer
o with-current-buffer
.