awesome-tray 替代Emacs mode-line, 让编程更加专注

Emacs 默认用 mode-line 显示 buffer 的信息, 但是大部分的信息都是没用的, mode-line 还会在上下分屏的时候, 干扰代码的上下对比.

其实, 我们编程的时候就关心几个必要的信息: 时间、位置、当前模式, 最多再加一个 git 分支.

几年前写了 MinibufferTray, 但是这个插件的实现方式依赖 PyQt5, 而且只在 Linux 下可以正常工作.

今天按照 MinibufferTray 的设计, 重新写了一个新的插件 AwesomeTray, 不再需要 PyQt5, 所有平台都可以工作.

安装好以后, mode-line 默认隐藏, 只在右下角显示必要的信息, 当你在操作 minibuffer 的时候右下角的信息自动隐藏, 当你退出 minibuffer 时, 右下角信息又会自动显示.

安装方法

  1. 下载 AwesomeTray 里面的 awesome-tray.el 放到 ~/elisp 目录
  2. 把下面的配置加入到 ~/.emacs 中
(add-to-list 'load-path (expand-file-name "~/elisp"))
(require 'awesome-tray)
(awesome-tray-mode 1)
16 个赞

要是能自定义(一个plist之类的,而不是改代码),甚至能读取其它包对mode-line的设置就好了。

那不就跟mode-line一样了

如果显示的和 mode-line 那么长的信息, 那和 mode-line 有啥区别?

3 个赞

不像mode-line那样到处飘啊。。。主要是有的包在mode-line显示的东西还是有点用,自定义还是可以的吧。

这个在minibuffer有信息,且超过一行的时候,右下角是怎样的?

现在自定义还没做, 不过也非常简单, 就是字符串. 不想自定义的目的就是不想像 mode-line 那么复杂占地方.

minibuffer 超过一行的时候, 右下角就暂时不显示, 因为平常在 buffer 的时候, minibuffer 很少会超过一行

我觉得搞一个快速打开/关闭mode line的快捷键比这个要实用.

1 个赞

自己修改 mode-line 和 mode-line-inactive 的高度就行了.

mode-line 来回开关的意义是什么? 要不就是喜欢 mode-line , 要不就是不喜欢 mode-line, 我不觉得来回开关 mode-line 有啥意义.

1 个赞

能不能让多个window共用一个modeline啊,分屏的话,一个window带一个modeline确实影响。
Reddit这里有一些想法,但是都不太好用的样子

awesome-tray刚试了一下,可我经常用minibuffer显示eldoc,闪来闪去不太能接受的了,先试用几天吧。

你更新到最新版就不会闪烁了, 第一版确实会闪.

对了,好像有个bug,刚开emacs,在scratch界面,C-x 2然后C-x 3

Debugger entered–Lisp error: (wrong-type-argument wholenump -15) make-string(-15 32)
(format “%s %s” (make-string (- (window-width) (length tray-info) awesome-tray-info-padding-right) 32) tray-info) (insert (format “%s %s” (make-string (- (window-width) (length tray-info) awesome-tray-info-padding-right) 32) tray-info)) (save-current-buffer (set-buffer " Minibuf-0") (erase-buffer) (insert (format “%s %s” (make-string (- (window-width) (length tray-info) awesome-tray-info-padding-right) 32) tray-info))) (let* ((tray-info (awesome-tray-build-info))) (save-current-buffer (set-buffer " Minibuf-0") (erase-buffer) (insert (format “%s %s” (make-string (- (window-width) (length tray-info) awesome-tray-info-padding-right) 32) tray-info))))

你用一下最新版, 看看有没有问题, 我中午的时候最后一版这种问题都被我排除了.

(setq mode-line-format nil) 就能关掉。

有两个问题不知道是不是我个人的配置问题,

elisp运行 message函数就变成下面的样子了

还有一个就是分裂窗口的时候,右下角的信息总是显示在最左边的buffer下面

第二个问题, 我已经在最新版版本 (0.4) 中修复了. 第一个问题, 你先更新到 0.4 以后再测试测试, 看看是否还有问题?

第一个问题的重现方式详细写一下, 我没看懂你怎么弄出这种效果来的.

我在 spacemacs 中同时使用了 awesome-tab 和 awesome-tray,去掉了 frame-title 和 mode-line:

(set-frame-parameter (car (frame-list)) 'undecorated t)
(setq-default mode-line-format nil)

(除了 awesome-tray 的配置与主题,跟外观有关的改动就这两句。)

目前的问题是,tab 那一行最右边显示为一条红带,长度会随着 tab 的数量变化。切换了不同组的 tabs,目测 tab 与红色条带的距离是固定的长度。

1 个赞

你直接把 awesome-tab/awesome-tab.el at 8a0047c1b0976c13c37f7578b713db2a63b51503 · manateelazycat/awesome-tab · GitHub 这行代码暴力改成 black 试一试?

我没法重现你的问题, 我觉得是重构的时候引起的小问题.

抱歉没有表达清楚.

就是简单的在*scrach*buffer 里面运行emacs-lisp函数message向echo-area输出字符。(最新测试emacs26和27中都会出现)

我知道你的现象, 我的意思, 你能不能把每一个操作的命令都写一下? 我这样好重现你的问题.

你第一次说的时候, 我在 ielm 里面测试 message 没有问题.

我想知道你在 scratch buffer 里面执行的是什么命令? eval-buffer 还是别的?