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

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 变量的值就可以了.
20 个赞

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

当然啊, 用了十几年了.

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

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

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

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

Good night.

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

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

另外,

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

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

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

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

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

欢迎发送任何 PR.

` (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 可以生效

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

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

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

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

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

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

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

16 个赞

好的,完全理解

1 个赞

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

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