Emacs:控制选项卡缓冲循环,或堆栈缓冲循环,类似于在窗口之间使用alt-tab。

4
我已经查阅了这个资源:http://www.emacswiki.org/cgi-bin/wiki/ControlTABbufferCycling,并尝试使用 buffer-stack.el,虽然它很有用,但我发现用户体验稍微有些笨拙,因为无法可视化堆栈中更深层的其他缓冲区。而且它已经过时(2002年),所以我想知道是否有改进版。该页面上的大多数链接也都已失效或非常古老。

我正在寻找一个基于 ctrl+tab 的堆栈式缓冲区循环,类似于 Windows 上的 alt+tab。理想情况下,它应该包括当前位置在缓冲区列表中的指示器。我认为我的需求不太具体,因为许多 IDE 已经具备了此功能。

我可以想象一个类似于 Eclipse 中缓冲区循环工作方式的工具。如下图:

enter image description here

我已经探索了其他选项,但似乎没有任何东西能够模仿已经在其他 IDE 中实现的功能。

我知道 ido-mode,但它不适合我的快速堆栈式切换需求。

我也注意到其他非堆栈解决方案,如下所示:

(global-set-key [C-tab] 'next-buffer)
(global-set-key [C-S-iso-lefttab] 'previous-buffer);Linux
(global-set-key [C-S-tab] 'previous-buffer);Windows/Linux

但我更喜欢基于堆栈的交换机。

有什么建议吗?这个功能是否已经存在或正在开发中?特别是带有索引指示器,就像上面显示的Eclipse一样。那将是很棒的 - 我想象它将作为一个弹出窗口或迷你缓冲区。


tabbar.el 是你可能感兴趣的东西吗(如果你没有太多打开的缓冲区)?https://dev59.com/FW865IYBdhLWcg3wcOPG 我还通过框架来组织我的打开缓冲区,这是一种自定义解决方案——即 Tabbar 和 Frame-Bufs 的混合体。Tabbar 对于小型项目非常理想,但不适用于大量打开的缓冲区。 - lawlist
以下是一些额外的选项:M-x bs-show; C-Down-Mouse-1; M-x list-buffers; M-x speedbar。请参见:http://www.gnu.org/software/emacs/manual/html_node/emacs/Buffer-Menus.html 和 https://www.gnu.org/software/emacs/manual/html_node/emacs/Speedbar.html。将这些内置选项与Tabbar和/或Frame-Bufs(https://github.com/alpaker/Frame-Bufs)结合起来应该不难。 - lawlist
3个回答

1

elscreen 能够做到一些你所需的功能: http://wikemacs.org/index.php/Elscreen
你需要按需创建屏幕(标签),并且可以使用 M-x elscreen-select-and-goto 从 minibuffer 中的列表中选择一个屏幕。

幸运的是,它已经与 helm 绑定在一起: helm-elscreen。这提供了一个漂亮和方便的选择列表:

  • 模糊匹配
  • 可滚动列表
  • 选择操作(按下 TAB 并选择“更改屏幕/删除/仅显示”)。

但是,你仍然需要手动创建屏幕(但我喜欢它,因为我可以组织工作区域 - 可以将缓冲区隔离到每个屏幕中。每个缓冲区一个选项卡会太多 + emacs 创建许多内部缓冲区,因此它们可能会妨碍工作)。

helm: https://github.com/emacs-helm/helm/wiki

PS: helm-buffers-list接口与您想要的切换缓冲区界面相似,没有选项卡...

enter image description here


1

Try out this snippet:

(defun ctrltab ()
  "List buffers and give it focus"
  (interactive)
  (if (string= "*Buffer List*" (buffer-name))
      ;; Go to next line. Go to first line if end is reached.
      (progn
        (revert-buffer)
        (if (>= (line-number-at-pos)
                (count-lines (point-min) (point-max)))
            (goto-char (point-min))
          (forward-line)))
    (list-buffers)
    (switch-to-buffer "*Buffer List*")
    (delete-other-windows)
    (forward-line)))

(global-set-key [C-tab] 'ctrltab)

它通常比ido-switch-buffer差,但无论如何它都能胜任工作。


0

我一直在维护自己的缓冲栈备份。它运行得非常好 - 到现在为止,我已经多年没有考虑过它了,直到最近我不得不修复一个导致错误的遗留解决方案。

当时间允许时,我会将我的分支放到github上。虽然在我的用例中这并不重要,但我并不反对添加某种索引显示 - helm很棒,可以从缓冲区列表中选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接