如何在焦点位于缓冲区列表中的其他窗口中实时显示缓冲区内容

问题描述:

我有2个窗口,一个是缓冲区列表,当我使用n时,如何在其他窗口的缓冲区列表中显示缓冲区,以及p导航到缓冲区列表中? 非常感谢。如何在焦点位于缓冲区列表中的其他窗口中实时显示缓冲区内容

+0

我不知道一个简单的解决方案,因为目标框架需要被识别为可能有两个以上的框架。我想可能有一个条件,如果只有两个帧存在,然后使用其他帧。这是一个控制显示帧缓冲区的复杂方法的链接 - 我在过去一年左右成功地使用了这种方法:http://*.com/a/18371427/2112489 – lawlist 2014-10-16 18:16:43

+0

上述评论假定原始海报在经验丰富的Emacs用户所使用的相同环境中使用术语“frame”。如果原始海报的含义是使用术语“窗口”作为经验丰富的Emacs用户理解术语的含义,那么需要澄清问题。演示差异的例子包括但不限于以下功能:'find-file-other-window'; '找到文件 - 其他 - frame'; '交换机到缓冲另一window'; '交换机到缓冲另一frame'。 – lawlist 2014-10-16 18:25:46

+0

注意:'buffer-menu-mode'具有工具栏条目,其中包括各种功能以处理缓冲区列表中显示的文件 - 例如'o' - *在其他窗口中选择*。对于喜欢禁用/不可见工具栏的用户,以下键盘和鼠标快捷键组合会显示类似于工具栏的弹出菜单:'C-down-mouse-3' – lawlist 2014-10-16 18:43:37

如果我理解了正确的问题,答案只是在缓冲区菜单中使用C-o。显示您在另一个窗口中所在行的缓冲区,但不会选择该缓冲区。也就是说,它不会将输入焦点移动到该缓冲区的窗口。缓冲区列表保留了输入焦点,因此您可以在不同的行上继续使用C-o,以显示不同的缓冲区。

如果您的意思是一个Emacs窗口,当您说“frame”时,请参阅上文。即使缓冲区位于不同的框架上也是如此,有以下警告:某些窗口管理器(包括MS Windows)会将输入焦点更改为创建的新框架。因此,例如,如果您有非nilpop-up-frames(以便使用单独的框架显示缓冲区),并且您选择显示的缓冲区(使用C-o)尚未显示在其他某个框架中,则显示它不仅为它创造了一个新的框架,而且将焦点转移到了新的框架上。如果缓冲区在另一个帧中已经可见,那么C-o只会提高该帧。

缓冲区列表显示中当前没有键限制,以便(a)将光标向下或向上移动到下一个或上一个缓冲区行,并(b)调用显示在目标缓冲线。但是你可以很容易地定义这样的命令,并将其绑定到一个键:

(defun show-next (arg) 
    "Show next line's buffer in another window." 
    (interactive "p") 
    (next-line arg) 
    (Buffer-menu-switch-other-window)) 

(defun show-previous (arg) 
    "Show previous line's buffer in another window." 
    (interactive "p") 
    (previous-line arg) 
    (Buffer-menu-switch-other-window)) 

(define-key Buffer-menu-mode-map "\M-n" 'show-next) 
(define-key Buffer-menu-mode-map "\M-p" 'show-previous) 

这里是我的原型在dired缓冲区此功能。它在访问后杀死一个缓冲区。

这是我喜欢ranger文件管理器的一个功能,它在探索目录时非常方便。

(setq show-next-current-buffer nil) 

(defun show-next() 
    (interactive) 
    (next-line 1) 
    (dired-find-file-other-window) 
    (if show-next-current-buffer (kill-buffer show-next-current-buffer)) 
    (setq show-next-current-buffer (current-buffer)) 
    (other-window 1) 
    ) 

(defun show-previous() 
    (interactive) 
    (previous-line 1) 
    (dired-find-file-other-window) 
    (if show-next-current-buffer (kill-buffer show-next-current-buffer)) 
    (setq show-next-current-buffer (current-buffer)) 
    (other-window 1) 
    ) 

(define-key dired-mode-map "n" 'show-next) 
(define-key dired-mode-map "p" 'show-previous) 

编辑:我写了一个小的方式来启用/禁用轻松此功能。请参阅https://gitlab.com/emacs-stuff/my-elisp/blob/master/dired-show.el,并将其融入您的需求。

+0

这在dired模式下非常有用。 – godblessfq 2014-10-17 18:10:30