目前我是这么自定义mode-line的:我有一个自定义的mode-line-format
,用setq
和setq-default
修改当前buffer和未来buffer的mode-line-format
。
问题是如果我修改之前打开了一个buffer,那个buffer的mode-line-format
不会变。
有没有什么方法能修改所有buffer的buffer local variable?
目前我是这么自定义mode-line的:我有一个自定义的mode-line-format
,用setq
和setq-default
修改当前buffer和未来buffer的mode-line-format
。
问题是如果我修改之前打开了一个buffer,那个buffer的mode-line-format
不会变。
有没有什么方法能修改所有buffer的buffer local variable?
你确实有这个需求,还是就想问这个问题?如果有可能,尽量用实际的例子,很多概念、术语,大家都不太清楚。
那些专门设置了 mode-line-format
的 Buffer 就是不想用默认值,如果想用默认值,就不要设置本地值。
你当然可以在那些 Buffer 中用 setq
一个一个修改,用 M-x kill-local-variable
也能取消本地值。
(save-excursion
(mapc (lambda (buffer)
(with-current-buffer buffer
;; (setq mode-line-format ...)
))
(buffer-list)))
确实有这个需求,我在emacs启动后修改mode-line,修改之前打开的buffer – 比如scratch,message – 的mode-line都不会变,还是原来的样子。
我就希望能把这些buffer的mode-line也改了。
另外,不是那些buffer用了自定义的mode-line-format
,而是
mode-line-format
自动变为buffer local:
Automatically becomes buffer-local when set. This variable may be risky if used as a file-local variable.
看了大家的回复,看来要到每个buffer里面改,没有全局的修改方法。
我没能明白你的问题:用 emacs -Q
启动,然后在 *scratch*
中执行
(setq-default mode-line-format "hello")
然后 *Messages*
的 mode line 也会变成 “hello”(需要把光标移到 *Messages*
让 Emacs 更新下 mode line)
然而 *scratch*
和 *Messages*
默认并没有设置单独的 mode-line-format
。
我试了试,的确,vanilla emacs没有这个问题。那可能是我配置的锅,我的配置里不会变……