【问题标题】:How do I configure Emacs to dedicate the Calculator window?如何配置 Emacs 以专用于计算器窗口?
【发布时间】:2014-06-11 00:19:53
【问题描述】:

我在 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* 窗口在挂钩中显示为专用,但之后却没有?我在这里做错了什么?

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

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

    您的“验证”消息误导了您。 (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)
    

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

    【讨论】:

    • 至少在 emacs 22.1.1 上运行良好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2020-04-26
    • 2010-09-10
    • 1970-01-01
    相关资源
    最近更新 更多