在Emacs中使用split-window-below。如何获得底部窗口的缓冲区?

时间:2013-12-31 08:39:10

标签: emacs elisp

例如,在编辑Emacs lisp文件test.el时,我想在当前缓冲区中标记文本(例如函数的名称)(我使用单个窗口的单个框架)然后按键盘快捷键将当前窗口分成两部分,一部分在另一部分之上。顶部窗口应该按原样显示我的原始缓冲区,底部窗口应该在定义函数的位置显示缓冲区(如(defun test-fun ...)。

我试过这段代码:

(defun test-split ()
 (interactive)
 (split-window-below 28)
 (let (( w (next-window)))
   (let ((buf (window-buffer w)))
     (with-current-buffer buf
       (beginning-of-buffer)
       (re-search-forward "defun test-fun ")))))

但它不起作用..(它搜索顶部窗口,而不是底部窗口)

1 个答案:

答案 0 :(得分:3)

两个窗口显示相同的缓冲区,因此with-current-buffer对原始窗口有效,因此Emacs无需切换到另一个窗口。

您可以像这样修改代码:

(defun test-split ()
  (interactive)
  (split-window-below 28)
  (save-selected-window
    (select-window (next-window))
    (beginning-of-buffer)
    (re-search-forward "defun test-fun ")))