我在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 *窗口在钩子中显示为专用但后来没有显示?我在这里做错了什么?
答案 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
的调用的窗口的测试,此代码在所有情况下都可能正常。