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

时间:2014-06-11 00:19:54

标签: emacs elisp

我在OS X 10.9(Mavericks)上使用来自emacsformacosx.com的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 个答案:

答案 0 :(得分:4)

不幸的是,*Calculator*缓冲区在代码运行时不会显示在任何窗口中。

您的“验证”消息误导了您。 (buffer-name)肯定是你想要的缓冲区,但它不在任何窗口中,所以你实际上在所有情况下都为窗口传递nil参数。即您将当前窗口设置为专用,然后确认它是专用的(它应该是专用的)。

我认为在向calc提出建议之后,您需要这些。 e.g:

(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)

n.b。我不确定calc的参数究竟是如何影响窗口显示的,但我认为对于包含对set-window-dedicated-p的调用的窗口的测试,此代码在所有情况下都可能正常。