如何强制更新emacs的框架标题?

5

我定制了变量frame-title-format以更改框架标题。但是,当Emacs想要时,它只会更新框架标题。我能否强制Emacs在评估某些自定义函数后更新(即刷新)标题?以下是frame-title-format的格式:

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

我希望在缩小缓冲区之后,%n(如果缩小)能立即生效。


哪个操作系统?在Mac OS X上似乎工作正常。 - Lindydancer
+1 对于“...当他/她想要的时候。” :) - itsjeyd
3个回答

3

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。但我意识到这不是一个好主意,因为它会影响所有函数的使用,并引起不必要的副作用。


非常感谢!(sit-for 0) 命令有效。我以前不知道这个命令。我正在使用Linux。 - Yi Wang

1

我认为 Emacs 无法更新的原因可能是以下内容。(C-h v frame-title-format)

它仅用于未设置显式名称的框架

第一次设置它时,它可以工作。然后我使用 modify-frame-parameters 设置另一个名称。它不起作用了。我使用 modify-frame-parameters 标记框架,它可以正常工作。

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

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

但是我还没有想出如何根据参数设置名称,比如frame-title-format


非常感谢您的答复!我也不确定 modify-frame-parameters 的参数。 - Yi Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接