5

我自定义变量frame-title-format来更改框架标题。然而,Emacs 只在他/她想要的时候更新框架标题。我可以强制 Emacs 更新(即刷新)标题,比如说,在评估一些自定义函数之后?这是框架标题格式:

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

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

4

3 回答 3

3

根据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]

于 2016-03-20T13:15:56.907 回答
1

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

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

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

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

于 2012-12-02T08:57:55.017 回答
1

我认为 Emacs 不更新的原因可能是下面这个。(C-h v框架标题格式)

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.

于 2012-12-02T11:19:03.607 回答