User interface 在emacs中,未聚焦的帧窃取顶部缓冲区

User interface 在emacs中,未聚焦的帧窃取顶部缓冲区,user-interface,emacs,User Interface,Emacs,当我在emacs中编辑一堆文件时,我喜欢使用emacs——守护进程,因此我最终打开了很多帧。问题是当我试图通过C-xb切换缓冲区时。我不确定它到底是如何发生的,但有时下一个缓冲区已经在背景中最小化的帧中。在这种情况下,它将我要离开的缓冲区放入该帧中,将缓冲区推到缓冲区列表的底部,并使我疯狂地点击以返回到它。然后它发生在第二个缓冲区,使我不得不疯狂地制表回到它 它将“C-x b[edit]C-x b[edit]”的高效工作周期转换为“C-x b[TabtabatBatbat][enter][edi

当我在emacs中编辑一堆文件时,我喜欢使用emacs——守护进程,因此我最终打开了很多帧。问题是当我试图通过
C-xb
切换缓冲区时。我不确定它到底是如何发生的,但有时下一个缓冲区已经在背景中最小化的帧中。在这种情况下,它将我要离开的缓冲区放入该帧中,将缓冲区推到缓冲区列表的底部,并使我疯狂地点击以返回到它。然后它发生在第二个缓冲区,使我不得不疯狂地制表回到它

它将“C-x b[edit]C-x b[edit]”的高效工作周期转换为“C-x b[TabtabatBatbat][enter][edit]C-x b[TabtabatBabatbtba][sigh][enter][edit]”。我能找到的唯一解决方案是按住Alt键,直到找到窃取这些缓冲区的帧,然后关闭它。直到它再次发生,我想掐死什么


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

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

  • 它将“C-x b[edit]C-x b[edit]”的高效工作循环转化为 “C-x b[tabatbat][enter][edit]C-x b [tabatbabatbtba][sigh][enter][edit]”

    您可能可以使用
    C-r
    向后循环缓冲区。因此,您可以
    C-xb选项卡
    前进,而
    C-xbc-r
    后退

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

    emacsclient-e'(查找文件“file.txt”)
    太难输入了,您可以通过将其放入
    .bashrc
    中来缩短它:

    edit() {
        emacsclient -e '(find-file "'"$1"'")'
    }
    
    然后,用
    edit file.txt
    打开一个文件


  • 有两件事可能会对你有所帮助:

  • 它将“C-x b[edit]C-x b[edit]”的高效工作循环转化为 “C-x b[tabatbat][enter][edit]C-x b [tabatbabatbtba][sigh][enter][edit]”

    您可能可以使用
    C-r
    向后循环缓冲区。因此,您可以
    C-xb选项卡
    前进,而
    C-xbc-r
    后退

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

    emacsclient-e'(查找文件“file.txt”)
    太难输入了,您可以通过将其放入
    .bashrc
    中来缩短它:

    edit() {
        emacsclient -e '(find-file "'"$1"'")'
    }
    
    然后,用
    edit file.txt
    打开一个文件


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

    幸运的是,
    other buffer
    有一个可选参数,该参数禁用了对可见缓冲区的这种尊重处理
    switch to buffer
    没有指定该参数,但覆盖其他人的代码正是
    defadvice
    的目的

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

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

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

    幸运的是,
    other buffer
    有一个可选参数,该参数禁用了对可见缓冲区的这种尊重处理
    switch to buffer
    没有指定该参数,但覆盖其他人的代码正是
    defadvice
    的目的

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

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

    您不能依赖常规的缓冲区列表,无论是全局的还是帧本地的——它们总是在变化,通常超出您的控制范围。您应该考虑使用ALP ACKER使用<代码>帧Bufs<代码>——它将缓冲区本地列表嵌入到帧参数中,以将选择缓冲区与某些帧相关联。要控制在某些帧中显示哪些缓冲区,请查看如何在文件打开前截取文件并确定是哪一帧:如果您喜欢选项卡的概念,下面的链接将
    frame bufs
    的概念与
    tabbar
    结合在一起,通过一个额外的自定义扭曲,可以在一个帧本地基础上动态添加和删除缓冲区的选择选项卡:所有这些都可以与上面注释的第二个链接中的概念结合在一起(在特定帧中显示缓冲区).您不能依赖于常规缓冲区列表,无论是全局缓冲区列表还是帧本地缓冲区列表--它们会一直更改,并且通常都是beyo