我该如何配置Emacs以专用计算器窗口?

3
我正在使用来自emacsformacosx.com的OS X 10.9(Mavericks)上的emacs 24.3。在Debian Wheezy上,emacs 23.4.1的行为是相同的。
我想自动应用 set-window-dedicated-p,以便切换/打开缓冲区时不会使用某些窗口。例如,如果我在计算器中手动使用Meta-:并输入(set-window-dedicated-p (get-buffer-window) t),然后它可以很好地工作——我的计算器窗口不会被其他缓冲区劫持。我希望它可以自动地像那样工作。
我将这个放在我的.emacs文件中:
(add-hook 'calc-mode-hook
  (lambda ()
    (message "Dedicating %s" (buffer-name))
    (set-window-dedicated-p (get-buffer-window) t)
    (message "Dedication %s" (window-dedicated-p (get-buffer-window "*Calculator*")))))

然后我启动emacs,切换到*Messages*窗口,并使用Meta-x calc。 *Messages*缓冲区显示

Dedicating *Calculator*
Dedication t

我知道我的钩子被调用以及它操作的缓冲区。但是 *Calculator* 缓冲区不是专用的 - 它的行为不正确,Meta-: (window-dedicated-p) 返回 nil。相反,*Messages* 缓冲区是专用的。
为什么在钩子中 *Calculator* 窗口显示为专用窗口,但之后却不是?我在这里做错了什么?
1个回答

4

很不幸,在你的代码运行时,*计算器*缓冲区不会在任何窗口中显示。

你的“验证”信息给了你错误的指引。(buffer-name)确实是你想要的缓冲区,但它没有出现在任何窗口中,因此在所有情况下你实际上都会传递一个nil参数来表示窗口。也就是说,你将当前窗口设置为专用模式,然后确认它是专用模式(这确实应该这样做)。

我认为你需要的是向calc寻求建议,例如:

(defadvice calc (after my-dedicated-calc-window)
  "Make the *Calculator* window dedicated."
  (let ((win (get-buffer-window "*Calculator*")))
    (when win
      (set-window-dedicated-p win t))))
(ad-activate 'calc)

注意:我不确定calc的参数如何影响窗口显示,但我认为在测试窗口是否换行时调用set-window-dedicated-p函数,这段代码在所有情况下都应该是可行的。


这至少在emacs 22.1.1上很好用。谢谢! - rhashimoto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接