【问题标题】:How to force emacs update frame title?如何强制emacs更新框架标题?
【发布时间】:2012-12-02 08:35:30
【问题描述】:

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

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

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

【问题讨论】:

  • 女巫操作系统?似乎适用于 Mac OS X。
  • +1 表示“......当他/她想要时”。 :)

标签: emacs elisp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    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。
    【解决方案3】:

    我认为 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 之类的参数设置名称。

    【讨论】:

    • 非常感谢您的回答!我不确定 modify-frame-parameters 的参数。
    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多