获取缓冲区的内容


15

因此buffer-string获取当前缓冲区的内容。但是它不允许指定其他缓冲区。

我该如何解决?我需要save-window-excursion使它工作的东西吗?


如果您不介意我问,您打算做什么?
Luke Shimkus 2014年

@King我正在创建一个异步过程,我想发送缓冲区的内容作为其标准输入。我想我可以使用process-send-string,但我被卡住了。
Maciej Goszczycki 2014年

Answers:


25

Emacs中的许多东西都在当前缓冲区上运行。您需要更改当前缓冲区并在完成后将其还原。使用with-current-buffer了,你只需要做的事情在另一个缓冲区,以及简单的情况下,save-current-buffer对于更复杂的情况下,你需要几个缓冲区之间进行导航。

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

如果您希望缓冲区的文本内容没有属性,请调用buffer-substring-no-properties

buffer-string仅返回缓冲区的缩小部分。如果需要全部内容,请在保存缩小后将其扩大。

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

如果您还需要保存点,请致电save-excursion。请注意,save-excursion仅在当前缓冲区中还原该点,因此,如果需要切换到另一个缓冲区并在该处四处移动,请save-excursionsave-current-buffer或中调用with-current-buffer

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.