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

我是把awesome-tab-buffer-track-killed 改成 kill后选中前一个tab后发现有问题 , 加上上面的判断就好了

但后来我发现,我的需求完全可以去掉这个hook也能实现

 (remove-hook 'kill-buffer-hook 'awesome-tab-buffer-track-killed)


;; 默认选中前一个tab
(defun awesome-tab-buffer-track-killed ()
  "Hook run just before actually killing a buffer.
In Awesome-Tab mode, try to switch to a buffer in the current tab bar,
after the current buffer has been killed.  Try first the buffer in tab
after the current one, then the buffer in tab before.  On success, put
the sibling buffer in front of the buffer list, so it will be selected
first."
  (and (eq header-line-format awesome-tab-header-line-format)
       (eq awesome-tab-current-tabset-function 'awesome-tab-buffer-tabs)
       (eq (current-buffer) (window-buffer (selected-window)))
       (let ((bl (awesome-tab-tab-values (awesome-tab-current-tabset)))
             (b  (current-buffer))
             found sibling)
         (while (and bl (not found))
           (if (eq b (car bl))
               (setq found t)
             (setq sibling (car bl)))
           (setq bl (cdr bl)))
         (when (and (setq sibling (or sibling (car bl) ));;改了这行
                    (buffer-live-p sibling))
           ;; Move sibling buffer in front of the buffer list.
           (save-current-buffer
             (switch-to-buffer sibling))))))

我现在遇到一个问题,在最新版Centaur-emacs中加入awesome-tab后,lsp-ui弹出的提示窗口覆盖当前编辑行,很不方便。把awesome-tab注释掉后,就恢复正常了。我现在水平有限,还不清楚问题出在哪里?方便的话,能帮调查一下吗?

“我现在水平有限”

爱莫能助,除非backtrace能够证明是awesome tab的bug

我没有时间测试lsp-ui,我从交互设计体验看lsp-ui体验很差,我不用它

抱歉

好的,谢谢回复!我自己查查看。

另外,你也用lsp吧?如果不用lsp-ui的话,只在minibuffer里提示?

C-h v lsp-ui-doc-position 的值应该是 at-point 吧

C-h f lsp-ui-doc–mv-at-point 它并没有把header-line算进去 结果就会盖住当前的行

你可以提个issue 但之前要先看看是否已经有相似的issue了

其实我也不用lsp

你可以试试下面的代码


(defun chong-lisp-ui-header-line-height ()
  (or (car (or (window-line-height 'header-line)
               (and (redisplay t)
                    (window-line-height 'header-line)))) 0))

(defun lsp-ui-doc--mv-at-point (frame height start-x start-y)
  "Move the FRAME at point.
HEIGHT is the child frame height.
START-X is the position x of the current window.
START-Y is the position y of the current window."
  (-let* (((x . y) (--> (bounds-of-thing-at-point 'symbol)
                        (nth 2 (posn-at-point (car it)))))
          (mode-line-y (lsp-ui-doc--line-height 'mode-line))
          (char-height (frame-char-height))
          (y (or (and (> y (/ mode-line-y 2))
                      (<= (- mode-line-y y) (+ char-height height))
                      (> (- y height) 0)
                      (- y height))
                 (+ y char-height))))
    (set-frame-position frame (+ x start-x) (+ y start-y (chong-lisp-ui-header-line-height)))))

放scratch里 eval-buffer 就行了

好的,谢谢!

现在有种使用场景是这样的,例如在编辑 awesome-tab.el 时,总要在 README.md, awesome-tab.el 和 magit-status 三个 buffer 中快速切换。

而目前 awesome-tab 的默认 group 设置,这三个 buffer 分别归属 “Project:xxx", “ELisp”, “”(*magit-xxx 默认隐藏)。这样无法充分利用 tabbar 的直观和快速切换特性。

另外看 awesome-tab 的底层代码是支持多个 group 的,虽然实际的分级代码仅返回单个 group。 如果可以动态地将某个 buffer 加入到特定的 group,那么切换到共同的 group 也有可以解决上面的使用场景。

我觉得没必要细分太多的分组 , 比如说我把magit-status buffer 也给它分了一个组 而不是隐藏

(setq awesometab-hide-tabs-hooks   nil)

然后 Term相关的分一个组 , Completions Messages 这种几乎不会去刻意看的buffer分一个组(这个组里的buffer 几乎可以当它不存在) 还有一个就是Common , 所以基本上我只在Term与Common两个分组内工作

我利用awesome主要利用它的直观,可以方便切换到相临的buffer(我已经把awesome改造成相临的tab 就是最近访问过的buffer) ,唯一刻意分的组是Term相关的, 所以建议你 也不要分太多的组

https://github.com/jixiuf/vmacs/blob/master/conf/conf-awesome-tab.el#L16

化繁为简的思路很赞:+1:

最近大幅度去掉了鼠标的相关代码, 并且把 powerline 的代码吸收了, 现在只用单文件就可以安装 awesome-tab.el 了.

GitHub - manateelazycat/awesome-tab: Emacs package to provide out-of-the-box configuration to use tabs. 今天重构代码, 支持标签主题自定义了.

1 个赞

我发现了点问题,打开的tab越多,最左边的间隙越大,有其他人遇到这种情况吗, osx系统 ,spacemas配置

问个题外话。记得懒猫搞了个awesome-tray 就是想增大代码可视面积、减少干扰、专注编程,这个 tab 又反其道而行之,不知道是什么想法呢?

我个人使用的体验看,每次用 tabbar,过不了几天就关闭卸载了,还是用 buffer 切换来得顺畅。不知道大家是什么体验。

mode-line全局看一个就行了,不用每个窗口都看

标签栏却是每个窗口都不一样,大多数情况都比其他buffer切换方式直观

可是窗口信息也可以显示在mode-line 上啊,这样不就节省了tab 的空间?就像关掉 menu-bar、tool-bar一样。而且也减少了用鼠标点击的次数和几率。

我不喜欢搜索去找其他buffer,也不想切换其他模式去找buffer

我没有洁癖和强迫症,我就是什么好用用什么,空间最大化固然好,但是我不会把追求最大空间作为唯一标准。

我就觉得modeline应该显示在右下角,标签栏再占用空间也值得。

标签栏不用鼠标,我已经不用鼠标十几年了。

我也测试出来了, 原因未知, 我看一下.