emacs:控制选项卡缓冲循环,或堆栈缓冲循环,类似于windows之间的alt-tab

时间:2014-06-18 23:58:56

标签: emacs buffer

我已经咨询了这个资源:http://www.emacswiki.org/cgi-bin/wiki/ControlTABbufferCycling,并尝试了buffer-stack.el,这很有用,但我发现用户体验有点尴尬而无法在堆栈中进一步显示其他缓冲区。它也是过时的(2002年),所以我想知道是否有改进的版本。该页面上的大多数其他链接都已损坏或非常旧。

我正在寻找 ctrl + tab 基于堆栈的缓冲循环,类似于 alt + tab 适用于Windows。理想情况下,它会在缓冲区列表中包含我当前位置的指示符。我不认为我想要的功能太具体,因为许多IDE已经具备此功能。

我想象一个类似于Eclipse中缓冲区循环的工具。选择以下:

enter image description here

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

我知道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所示。这将是非常棒的 - 我想它会像弹出窗口或迷你缓冲区一样。

3 个答案:

答案 0 :(得分:1)

elscreen做了一点你所寻求的: http://wikemacs.org/index.php/Elscreen
您必须按需创建屏幕(标签),然后拨打M-x elscreen-select-and-goto从迷你缓冲区中的列表中选择一个屏幕。

幸运的是,它已与helmhelm-elscreen结合使用。这给出了一个好看且方便的选择列表:

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

然而,您仍然需要手动创建一个屏幕(但我喜欢它,因为我可以组织一些工作区域 - 可以隔离每个屏幕的缓冲区。每个缓冲区的选项卡太多+ emacs创建许多内部缓冲,这样他们就可以上路了。)

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

ps:helm-buffers-list靠近您想要切换缓冲区的接口,没有标签......

enter image description here

答案 1 :(得分:1)

试试这个片段:

(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,但无论如何它都能发挥作用。

答案 2 :(得分:0)

我一直在维护缓冲区堆栈的个人副本。它运作得非常好 - 直到最近我还没有想到这个问题,直到最近我必须修复导致错误的传统解决方法。

在时间允许的情况下,我会把我的叉子放在github上。我并不反对添加某种索引显示,尽管在我的用例中并不重要 - 从缓冲区列表中选择helm非常棒。