Mode line 也应该所有窗口共享。
Emacs 把 Tab bar 和 Mode line 作为编辑窗口的部件,不可避免造成空间浪费。这也是 Mode line 怎么设置都不会好看原因,项数少了全屏的时候过于空旷,项数多了分屏的时候信息显示不全。
Emacs 如果重新设计,应该整个 frame 只有一条 Mode line。然后窗口分内外两层,外层的窗口各自有一条 Tab bar + 多个编辑窗口。当一个编辑窗口移出后,就不再显示在当前 Tab bar 上:
- Frame
|- Outer window 1
| |- Tab bar
| |- Edit window 1
| |- Edit window 2
| |- ...
| \- Edit window n
|+ Outer window 2
|+ ...
|+ Outer window n
\- Mode line
EDIT:或许我可以试着来写一个全局的 Mode line,名字暂定 modern-line
。但我平时都放任 Mode line 不管,所以在样式和内容编排上没什么经验,只能写个大致的丑陋的框框出来。
3 个赞
针对 modeline 的情况, awesome-tray 已经是比较好的方法,我一直觉得各种插件像丢垃圾一样,乱往 modeline 上面放东西,难以管理,每个窗口一个 modeline 真的没有必要,主要就看 buffer, path, date, position 几个最常用的信息。
估计 blace-windows 会强制修改窗口的大小吧。
awesome-tray 很喜欢,只是可惜在teminal界面下modeline无法设置实现gui的效果,要么就是占据一行,要么就是 nil 彻底看不见,缩不成一条细线。分屏的时候左右还可以靠 vertical-border区分,上下分屏没有modeline完全区分不了,还是继续用doom-modeline了,好在分屏不太多。
说到底 window 没有独立的border face之类的,要不然直接设置 active window border,就不需要这些vertical-border和modeline了。
Weiss
25
恩 other-window
没问题了,不知道为啥我当时会切过去 。
我指的支持不同 frame 是指, group 在不同的 frame 可以不一样,比如 a frame 的标签是 x->y->z, b frame 的标签是 z->w->x->y 这样。
另外有什么好的办法识别这个标签的 window 吗,因为我现在切窗口的逻辑是
(if (one-window-p)
(call-interactively 'split-window-below)
(other-window 1))
但现在已经不是 (one-window-p)
了
(one-window-p t)
替换成
(equal (length (cl-remove-if #'window-dedicated-p (window-list))) 1)
frame 分开那个估计要先识别当前是啥 frame, 然后保存到 buffer local 变量中,平常用多 frame 的情况少,欢迎补丁。
Weiss
28
感谢大佬!
好的 ,我有空研究下大佬的代码搞个补丁吧,应该不难的,就是用 (selected-frame)
做 alist 的 key 就行。
rua
29
但是横向 split window 用什么区分 window
猫大, Sort-Tab可以放在emacs底部吗,相当于minibuffer的地方?看到有些主题是用header的,顺便问一下。
可以把nano-modeline设置为底部显示
(use-package nano-modeline
:custom
(nano-modeline-position 'bottom)
或者
(setq nano-modeline-position 'bottom)
就是想保留在header处,跟平时的文件一样,有个抬头 不过如果 Sort-Tab 能在header上方也不错。
第一个欢迎打补丁,我不用鼠标
第二个要看窗口跳转插件了,应该排除sort-tab这种专注窗口
自动载入时存在多余空白行,可稳定复现。
测试环境,archlinux,emacs29,仅配置sort-tab,无任何其他配置
init.el 文件如下
(add-to-list 'load-path "~/my-emacs/straight/repos/sort-tab")
(require 'sort-tab)
(sort-tab-mode 1)
开启后,稳定出现空白区域
倘若手动启用sort-tab则无此问题。
如果使用了其他modeline,则同时会在空白行的地方生成一个modeline
(emacs -Q和直接打开emacs手动load都相当于手动启用mode,不能出现该现象,这个现象仅出现在自动启用sorttab的情况下)
我晚上回去再详细测试一下,没办法就不默认开启了
有时候三个 tab 时,next 是正常的,但是 prev 会从第三个直接回到第一个。如果 edebug 的时候行为又是正常的,有些奇怪。是不是排的顺序有时和显示的不一致?
可能是刚好那个时候第三个标签的权重变成最高了,所以更新了。
但是如果你用 sort-tab-next-tab 或者 sort-tab-prev-tab 这两个命令切换标签,即使权重发生变化,标签排序也不会变化的,避免来回变不方便使用。