如何强制emacs更新帧标题?

时间:2012-12-02 08:35:31

标签: emacs elisp

我自定义变量frame-title-format来更改框架标题。但是,Emacs仅在他/她想要时更新帧标题。在评估一些自定义函数后,我可以强制Emacs更新(即刷新)标题吗? 这是frame-title-format:

(setq frame-title-format "%b  %*  %n")

我希望%n(缩小时显示)在缩小缓冲区后立即生效。

3 个答案:

答案 0 :(得分:2)

根据https://www.gnu.org/software/emacs/manual/html_node/elisp/Mode-Line-Basics.html

(force-mode-line-update)

还强制菜单栏和框架标题更新。

我可以确认包含"%*"的帧标题当我第一次修改缓冲区并且(force-mode-line-update)有帮助时,它不会立即更新。 [fedora 23 linux上的emacs 24.5.1]

答案 1 :(得分:1)

强制重新显示的一种方法是使用(sit-for 0)。您可以定义自己的函数,如下所示:

(defun my-narrow-to-region (start end)
  (interactive "r")
  (narrow-to-region start end)
  (sit-for 0))

注意:我无法验证这是否可以解决您的问题,因为我使用的是Mac OS X,即使没有这个,也可以正确更新帧标题。

更新:在此答案的早期版本中,我建议使用defadvice。我意识到这不是一个好主意,因为它会影响函数的所有使用,因为它会产生不必要的副作用。

答案 2 :(得分:1)

我认为Emacs不更新的原因可能如下。 ( C-h v frame-title-format)

It is used only on frames for which no explicit name has been set

我第一次设置它,它的工作原理。然后我使用modify-frame-parameters设置另一个名称。这是行不通的。我使用modify-frame-parameters标记帧,效果很好。

您可以使用modify-frame-parameters来设置标题。

(modify-frame-parameters nil
           (list (cons 'name string-name)))

但我可能无法弄清楚如何根据frame-title-format等参数设置名称。