使用maple-line统一mode-line

众所周知的,emacs每个buffer下都会有一个mode-line,mode-line主要用来显示当前buffer的相关信息,比如major-mode,buffer-size等
但是,当有多个buffer同时打开时,我(应该也包括大部分emacser)只关心当前选中buffer的信息,对其它打开的buffer相关信息并不关心,而mode-line多数有些花里胡哨,所以我写了一个
emacs-maple-line
用来统一mode-line, 当多个buffer打开时,只显示一个mode-line,并在这个mode-line里显示当前选中buffer的信息

话说有什么好的方式可以隐藏mode-line, 但是上下分隔窗口时可以显示一条边缘线,现在使用的是window-divider-mode,导致样式有些难看

1 个赞

不错,看起来很简洁。只是有一个缺点,如果只是想看看inactive window里的buffer name,这个必须切换过去才知道,窗口多了效率会下降。

最好可以让用户定制,主从buffer显示的内容。

建议在多窗口的情况下在当前窗口的下发显示一条特殊颜色的线以提醒用户,否则窗口多了真的不容易马上找到哪个是当前窗口。另外貌似这个插件和其他modeline theme插件兼容性不太好,我用doom-modeline,结果显示了两条modeline在底部

确实是这样,包括我常使用的window-numbering切换buffer也看不到窗口号了,可能需要搭配tabbar插件会更好一些

主从buffer是什么意思,是指当前选中buffer与未选中的buffer吗,现在未选中的buffer mode-line我是直接设置为nil的

现在的问题就是有什么更好的方式可以隐藏mode-line, 但是上下分隔窗口时可以显示一条边缘线,否则 window-divider-mode不太好定制,现在我是看光标位置确认当前窗口的 :joy:

如果你是在已打开的emacs下直接load-file,然后激活maple-line-mode,确实有可能出现两条mode-line,因为已打开buffer的mode-line-format变量不为nil,我暂未找到可以重置已打开buffer mode-line-format变量的方式(其实可以用window-configuration-hook

我使用的是我自己定制的modeline, 待会儿我测试一下doom-modeline

试试这样?

(setq mode-line-format "")
(set-face-attribute 'mode-line nil
                    :background "green" :height 0.1 :box nil)
(set-face-attribute 'mode-line-inactive nil
                    :height 0.1 :box nil :inherit 'default)

刚才试了一下,直接设置 mode-line-format为空字符串会导致较多兼容性问题,但是直接设置mode-line face应该也可以得到同样的隐藏modeline的效果。

设置高度为0.1我也试过,但我是直接(insert (format-mode-line mode-line-format))的,修改mode-line的face也会导致插入的内容也随之改变,可能需要先深拷贝一下face,再重新face-alias,这样比较麻烦,还没试过

Centaur中是这样的:

;; Display dividers between windows
(setq window-divider-default-places t
      window-divider-default-bottom-width 1
      window-divider-default-right-width 1)
(add-hook 'window-setup-hook #'window-divider-mode)

对,就是这个意思。我希望增加一些选项,比如文件名、行号、总行数等,可以设定哪些可以显示在非选中的buffer mode-line上。

重写了一下,不再使用window-divider-mode作为上下窗口区分的分隔线,目前可以自定义分隔线的颜色

(setq maple-line-hide-underline-color "red")

如果不想要上下分隔线,可以设置maple-line-hide-underlinenil
其中的 maple-line-hide 也可以单独拿出来使用

@manateelazycat 多谢,我研究了一下,需要记住各种face-attribute还是有些麻烦,查找资料后发现可以使用face-remap-add-relative临时修改face

@mayingjun 同样的,想要在非选中的buffer里显示mode-line,只要按正常一样设置这个buffer的mode-line-format变量,然后排除该buffer

(add-to-list 'maple-line-hide-ignore "buffer name")

@YanhaoMo 我尝试了一下doom-modeline, 确实是有些问题,具体我还得再看一下,不过在spacemacs中(使用spaceline)和我自己的配置中(使用maple-modeline)目前暂时没发现什么问题

上个图看看效果呗

这个包把modeline统一,headerline分开看起来不错

建议在当前窗口打开fringe mode,然后在fringe里面增加overlay显示当前状态。

tty不支持fringe,只能用margin了

改变margin的背景色以显示当前窗口怎么样?

录了一个gif

Peek%202019-06-15%2021-07