重新输入一个命名缓冲区,它不一定是Emacs Lisp中的当前缓冲区

时间:2010-03-21 05:20:08

标签: emacs elisp

我想重新输入一个名为*Lense*的缓冲区,我在其中插入了一些文本。我希望按(set-buffer "*Lense*"),然后(recenter 0))将其设为当前缓冲区。通过以下代码段:

(save-excursion (set-buffer "*Lense*")
                (recenter 0))

但是,上面的代码似乎只会重新定位当前缓冲区的缓冲区,(set-buffer "*Lense*")无法使当前缓冲区为*Lense*

请帮我弄清楚重新输入命名缓冲区*Lense*的正确方法。

2 个答案:

答案 0 :(得分:7)

如果要显示您要重新定位的缓冲区,则需要重新定位其窗口。

(with-selected-window (get-buffer-window "*Lense*")
  (recenter 0))

如果没有显示缓冲区,这将会爆炸,因此您可能需要条件案例或放宽保护。

如果要处理缓冲区不可见的情况,则需要移动该点。最终显示缓冲区的窗口将居中于该点附近,因此您必须将该点移动到可能发生这种情况的位置。看起来像你的插入操作会DTRT,所以你不必担心这种情况。

答案 1 :(得分:0)

我还没有找到(recenter)功能,但有(recenter-top-bottom)。您可以尝试使用它而不是(重新定位)。标准Cl热键正好调用此函数(recenter-top-bottom),它还有可选参数,即窗口行,可以通过Cu arg Cl传递。

PS:我错了,因为我不熟悉emacs-lisp,我只是使用emacs进行最少量的自定义。