如题,我经常开着多个frame作为不同的emacs应用,现在想在几个frame中设置不同mode-line信息,找了一圈搜索引擎似乎没有答案,来论坛问问。
mode-lline 好像是和window绑定的,也许你可以写判断函数,给不同的frame显示不同的额外信息?
这个需求比较奇怪,因为 mode-line 是 buffer-local 的——mode-line 字面意义就是 mode 相关的信息。按 Emacs 原本的设想,frame 信息可以放到 frame title 里。
但是我们毕竟是 Emacs,你非要这么做也不是不能做到。
简述一下思路:
- 用 frame-parameter 把 mode-line 与 frame 关联起来。
- 把所有 buffer 的 mode-line 设为「读取本 frame 的 mode-line」。参见 mode-line-format 的 :eval 。
思路在这里了,想要进一步打磨就靠你自己了,比如如果 frame-parameter 里没有 mode-line 时取一个全局的默认值什么的。
贴一下代码:
;; 默认 mode-line
(add-to-list 'default-frame-alist
'(mode-line . 原来的mode-line-format))
;; 置当前 frame mode-line 为默认 mode-line
(set-frame-parameter nil 'mode-line (cdr (assoc 'mode-line default-frame-alist)))
;; 置所有 buffer 默认 buffer mode-line 为「取 frame mode-line」
(setq-default mode-line-format '((:eval (frame-parameter nil 'mode-line))))
不过你大概只是想在 mode-line 上加一些 frame-specific 的信息?其实完全可以不替换掉整个 mode-line,把信息加到 mode-line-format 里就行了。mode-line 本身也有 mode-line-frame-identification,可以从这里入手看起。
6 个赞
可以 这个方法不错