【发布时间】:2017-10-07 01:45:15
【问题描述】:
如果我当前的缓冲区是foo,并且我运行C-x C-b(又名list-buffers),我的Emacs 窗口将一分为二,foo 占据两个结果窗口之一,一个专用的*Buffer List*缓冲区占用另一个。在此操作结束时,foo 仍然是活动缓冲区,point 仍然是在执行 C-x C-b 之前的状态。
我想编写一个以类似方式显示多页输出的交互式函数:必要时拆分窗口,调出专用缓冲区,将活动缓冲区保留为函数运行前的状态。
我设法做的最好的事情是具有以下结构的函数:
(defun my-func ()
(interactive)
(let ((this-buffer (current-buffer))
(other-buffer (get-buffer-create "*my-func's Dedicated Buffer*")))
(switch-to-buffer-other-window other-buffer)
(erase-buffer)
(insert (compute-pages-and-pages-of-stuff))
(beginning-of-buffer)
(switch-to-buffer-other-window this-buffer)))
这或多或少是可行的,但我认为 Emacs 已经有内置语法来简化此类代码。
IOW,我认为在下面的 sn-p 中有一种类似于(虚构的)WITH-BUFFER-OTHER-WINDOW 的特殊形式:
(defun my-func ()
(interactive)
(let ((other-buffer (get-buffer-create "*my-func's Dedicated Buffer*")))
(WITH-BUFFER-OTHER-WINDOW other-buffer
(erase-buffer)
(insert (compute-pages-and-pages-of-stuff))
(beginning-of-buffer))))
甚至可能
(defun my-func ()
(interactive)
(let ((other-buffer (get-buffer-create "*my-func's Dedicated Buffer*")))
(WITH-BUFFER-OTHER-WINDOW other-buffer
(compute-pages-and-pages-of-stuff))))
我尝试过save-excursion 和save-current-buffer 之类的形式,但它们无法重现所需的行为。
是否有内置的方式来执行上述操作?
【问题讨论】:
标签: elisp