Então, buffer-string
obtém o conteúdo do buffer atual. Mas não permite especificar outros buffers.
Como posso contornar isso? Preciso de algo save-window-excursion
para fazê-lo funcionar?
process-send-string
e fiquei preso.
Então, buffer-string
obtém o conteúdo do buffer atual. Mas não permite especificar outros buffers.
Como posso contornar isso? Preciso de algo save-window-excursion
para fazê-lo funcionar?
process-send-string
e fiquei preso.
Respostas:
Muitas coisas no Emacs operam no buffer atual. Você precisa alterar o buffer atual e restaurá-lo quando terminar. Use with-current-buffer
para casos simples em que você só precisa fazer algo em outro buffer e save-current-buffer
para casos mais complexos em que você precisa navegar entre vários buffers.
(defun buffer-string* (buffer)
(with-current-buffer buffer
(buffer-string)))
Se você deseja que o conteúdo do texto do buffer sem propriedades, chame buffer-substring-no-properties
.
buffer-string
retorna apenas a parte reduzida do buffer. Se você precisar de todo o conteúdo, amplie-o após salvar o estreitamento.
(defun buffer-whole-string (buffer)
(with-current-buffer buffer
(save-restriction
(widen)
(buffer-substring-no-properties (point-min) (point-max)))))
Se você também precisar salvar o ponto, ligue save-excursion
também. Observe que save-excursion
restaura o ponto apenas no buffer atual; portanto, se você precisar alternar para outro buffer e se mover por aí, ligue para save-excursion
dentro save-current-buffer
ou with-current-buffer
.