awesome-tab 1.0 发布, 开箱即用的Emacs标签插件


#1

Emacs 本身没有提供标签切换的功能, 大部分emacser都用 ibuffer 来切换标签.

我个人的使用习惯主要结合 helm 和 tab, 不喜欢 ibuffer, 脑壳负担太大, 通过 tab + helm 尽最大可能把时间用于思考上, 而不是一顿操作猛如虎去费劲想怎么切换 buffer.

tabbar.el 的功能是非常强大的, 但是默认主题却非常丑陋, 像DOS的程序风格. 同时大部分初学的Emacser没有能力能够快速定制 tabbar.el , 导致浪费太多时间在抄 tabber.el 配置和调试上.

所以, 今天把十几年的 tabbar.el 配置和扩展功能重新整理成 Awesome-Tab, 下载安装后就是现代化的风格和强大的内置功能.

安装

  1. 你需要先安装 projectile, awesome-tab 需要 projectile 对所有文件按照项目进行分组
  2. 然后下载 Awesome-Tab 里面的 awesome-tab.el 放到 ~/elisp 目录
  3. 把下面的配置加入到 ~/.emacs 中
(add-to-list 'load-path (expand-file-name "~/elisp"))
(require 'awesome-tab)
(awesome-tab-mode t)

内置命令.

命令 解释
awesome-tab-forward-tab 切换到左边的标签
awesome-tab-backward-tab 切换到右边的标签
awesome-tab-forward-group 切换到前一个分组
awesome-tab-backward-group 切换到后一个分组
awesome-tab-select-beg-tab 选择第一个标签
awesome-tab-select-end-tab 选择最后一个标签
awesome-tab-forward-tab-other-window 切换到其他窗口的下一个标签
awesome-tab-backward-tab-other-window 切换到其他窗口的上一个标签
awesome-tab-kill-all-buffers-in-current-group 删除当前分组的所有标签
awesome-tab-kill-match-buffers-in-current-group 删除当前分组的匹配的标签
awesome-tab-keep-match-buffers-in-current-group 保留当前分组的匹配的标签
awesome-tab-switch-group 基于模糊搜索算法切换不同的分组

如果你喜欢用 helm, 把下面配置加入 ~/.emacs 中

(awesome-tab-build-helm-source)

然后把 helm-source-awesome-tab-group 加入 helm-source-list

标签显示和分组规则

  1. 所有标签名以 * 或者 magit 开头的, 都不会显示在标签中, 但依然可以被 Emacs 其他插件切换查看, 比如 ibuffer :wink:
  2. eshell, dired, emacs-lisp, org, magit 这几个模式的标签会按照各自模式分组, 避免按项目分组以后反而不方便切换了
  3. 所有 * 开头的标签都被分为 Emacs 这个组
  4. 其他标签以文件所在的项目进行分组, 比如 Rails 中的 *.js *.erb *.rb Gemfile 等文件都会被分为一个项目组, 方便按照项目进行切换和开发
  5. 当标签 buffer name 冲突时, 会自动根据文件路径自动计算差异并显示到标签上

自定义

选项 解释
awesome-tab-background-color 背景颜色, 字符串形式
awesome-tab-selected 激活标签颜色, 字符串形式
awesome-tab-unselected 非激活标签颜色, 字符串形式
awesome-tab-buffer-groups-function 标签分组规则

自定义分组规则

  • 默认的规则定义在函数 awesome-tab-buffer-groups
  • 如果你觉得默认的分组规则有bug, 欢迎给我提交 PR
  • 如果你觉得默认的分组规则不方便, 而自己的分类规则比较偏门, 可以参考 awesome-tab-buffer-groups 的实现重写一个新的函数,然后重新定义 awesome-tab-buffer-groups-function 变量的值就可以了.

#2

赞,你一直在用吗?看你之前录的GIF好像都不用tabbar的?


#3

当然啊, 用了十几年了.


#4

和 treemacs 或者 neotree 一起用也行吗?


#5

awesome-tab 应该不会有兼容性问题, 就是简单的定制 headerline .

我没用过 treemacs neotree 等, 需要你自己测试.


#6

好的,明天用起来。不早了,晚安


#7

Good night.


#8

试用了一下,有两个问题:

  1. 没有选中的 tab 字体太大了
  2. 右侧的 magit buffer 上没有 tab

另外,

  • 和 treemacs 可以兼容
  • 和 stickyfunc 不能兼容(tabbar 应该都不能)
  • 有可能做到双击鼠标关闭 buffer (tab)吗?

#9

可以的,鼠标双击和三击在Emacs里都是可以识别的


#10

magit设置的不显示,不然很多,你在配置里搜magit去掉就会显示了


#11
  1. 未选中tab的字体问题已经修复
  2. magit 的 buffer 太多, 默认隐藏, 可以自定义选项 tabbar-hide-tab-rules
'(
  ("prefix" . "*")
  ("anyplace" . "^magit.*:\\s-")
 )

#12

treeemacs 和 stickyfunc 我都不用, 也不想测试. 我自己从来不在 emacs 里用鼠标

欢迎发送任何 PR.


#13
` (add-to-list 'load-path (expand-file-name "elisp" user-emacs-directory))
  (require 'awesome-tab)`

tabbar.elawesome-tab.el~/elisp 目录下 重新执行 init.el 后 只生效了 tabbar, 没有样式,单独 eval-buffer awesome-tab.el 可以生效


#14

有兴趣发布到 MELPA 上吗?这样可以让更多人知道,也就有更多人贡献


#15

不感兴趣, 我没有时间去维护 MELPA , 谢谢. :slight_smile:


#16

不需要额外的维护,我可以帮忙把它提交给 MELPA


#17

我这十几年写了几百个插件, 如果都放到 MELPA, 我会被烦死的.

我写的插件都是给自己用的, 如果别人喜欢, 我很高兴, 如果别人不喜欢, 每天提各种只满足他们自己的需求, 我是不会去修复的, 因为我赚钱养家以后, 我希望花更多时间陪家人, 而不是迷失在无穷无尽的需求中.

如果大家喜欢我的某些代码, 我会适当的在我的 github 新建一个项目, require 就可以直接用, 不折腾. 但是我真的不想放到 MELPA 上, 我不关心是否有这么多人知道我写的插件.

有一部分人真正喜欢就可以了, 希望你能够理解.


#18

好的,完全理解


#19

其实可以自己学习emacs和elisp,然后看作者的实现,自己进行定制,我就是tabbar的显示改成蓝色和doom的主题搭配,这样也可以学习到更多的技巧,不然抄了也用不好


#20

下载 awesome-tab 直接改颜色就可以了, 不用自己折腾.