【问题标题】:In emacs, unfocused frames steal the top buffer在 emacs 中,未聚焦的帧会窃取顶部缓冲区
【发布时间】:2016-03-27 05:25:04
【问题描述】:

当我在 emacs 中编辑一堆文件时,我喜欢使用 emacs --daemon,所以我最终会打开很多框架。问题是当我尝试通过C-x b 切换缓冲区时。我不确定它到底是怎么发生的,但有时下一个缓冲区已经在后台最小化的帧中。在这种情况下,它将我要离开的缓冲区放入该帧中,将缓冲区推到缓冲区列表的底部,然后让我像疯了一样的标签回到它。然后它发生在第二个缓冲区,让我不得不像疯了一样的标签才能回到它。

它将“C-x b [edit] C-x b [edit]”的高效工作循环变成“C-x b [tabtabtabatbatbatbat] [enter] [edit] C-x b [tabtabtabatbatbabatbtba] [sigh] [enter] [edit]” .我能找到的唯一解决方案是 Alt-Tab 直到我找到窃取这些缓冲区的帧,然后关闭它。直到它再次发生并再次发生,我想扼杀一些东西。

我想要的是......当我用“C-x b”切换缓冲区时,我离开的缓冲区永远不会被拖入另一个开放框架,而只是不再可见,停留在缓冲区列表的顶部下一个“C-x b”切换回它。我该怎么做?

【问题讨论】:

  • 您不能依赖常规的缓冲区列表,无论是全局的还是局部帧的——它们一直在变化并且通常超出您的控制范围。您应该考虑使用 Alp Aker 的 frame-bufs -- github.com/alpaker/Frame-Bufs -- 将缓冲区本地列表嵌入到帧参数中,以将选择缓冲区与某些帧相关联。要控制在某些帧中显示哪些缓冲区,请查看如何在文件打开之前截取文件并决定哪个帧stackoverflow.com/questions/18346785/…
  • 如果您喜欢选项卡的概念,以下链接将frame-bufstabbar 的概念结合在一起——具有额外的自定义扭曲以动态添加和删除帧上缓冲区的选定选项卡——本地基础:emacs.stackexchange.com/a/10112/2287,所有这些都可以与上面评论的第二个链接中的概念结合起来(在特定帧中显示缓冲区)。

标签: user-interface emacs


【解决方案1】:

两件事可能对您有所帮助:

  1. 它将“C-x b [edit] C-x b [edit]”的高效工作循环变成 "C-x b [tabtabtabbatbatbat] [回车] [编辑] C-x b [tabtabtabatbatbabatbtba] [叹气] [进入] [编辑]”。

    您可能可以使用C-r 向后循环缓冲区。所以你可以C-x b TAB 前进,C-x b C-r 后退。

  2. 您正在使用emacsclient file.txt 打开文件吗?如果是这样,它会导致 Emacs 以特殊方式处理 file.txt 缓冲区,而您不喜欢这样。你可以通过运行emacsclient -e '(find-file "file.txt")' 来欺骗 Emacs 使其像对待任何其他缓冲区一样对待它。这样,Emacs 就不会知道您从 emacsclient 命令打开了file.txt,并且不会将缓冲区放在缓冲区列表的底部。这有意义吗?

    emacsclient -e '(find-file "file.txt")' 有点难输入,你可以把它放在你的.bashrc 中缩短它:

    edit() {
        emacsclient -e '(find-file "'"$1"'")'
    }
    

    然后,使用edit file.txt 打开一个文件。

【讨论】:

    【解决方案2】:

    我想我找到了解决方案。问题是other-buffer 忽略了已经可见的缓冲区,因此当switch-to-buffer 尝试获取要切换到的默认缓冲区时,other-buffer 会优先返回隐藏缓冲区而不是可见缓冲区。而C-x b 调用switch-to-buffer

    幸运的是,other-buffer 有一个可选参数,可以禁用对可见缓冲区的这种恭敬处理。 switch-to-buffer 没有指定该参数,但覆盖其他人的代码正是 defadvice 的用途!

    (defadvice other-buffer (before switch-to-visible-darnyou
                                    activate preactivate compile)
      (ad-set-arg 1 t))
    

    并且噗,现在调用 (other-buffer something) 会导致 (other-buffer something t),并且缓冲区的可见性不会从 switch-to-buffer 提示符中窃取它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多