有没有办法自定义buffer-menu
的行为,使其模仿list-buffers
命令?
我真正想要的是在新的Emacs窗口中打开buffer-menu
,选择所需的缓冲区后,buffer-menu
窗口关闭,前一个窗口切换到选定的缓冲区。 / p>
我已经查看了各种解决方案,例如ibuffer
,我尝试编写Elisp来执行此操作,但是我无法从菜单缓冲区中选择用户。有没有办法获得这个价值?或者,有没有办法等到用户通过键盘或鼠标点击在menu-buffer
中进行选择?
答案 0 :(得分:1)
[此答案的文字最初由irrelephant编写]
我能够使用buffer-menu-other-window
拆分框架并使用以下绑定获得所需的行为:
(define-key Buffer-menu-mode-map (kbd "RET") 'Buffer-menu-1-window)
(define-key Buffer-menu-mode-map [mouse-2] 'Buffer-menu-1-window)
虽然如果您只使用一个窗口,上面的工作正常,但是当您尝试它并且您已经在使用拆分窗口时,它会中断。在这种情况下,需要进一步调整:
(defun my-buffer-menu (arg)
(interactive "P")
(split-window-below)
(other-window 1)
(buffer-menu))
(defun my-buffer-menu-1-window ()
(interactive)
(let ((target-buffer (Buffer-menu-buffer t)))
(delete-window)
(switch-to-buffer target-buffer)))
(define-key Buffer-menu-mode-map (kbd "RET") 'my-buffer-menu-1-window)
(define-key Buffer-menu-mode-map [mouse-2] 'my-buffer-menu-1-window)
答案 1 :(得分:0)
有没有办法自定义'buffer-menu'
可以使用所有Emacs扩展和自定义机制。例如,您可以在buffer-menu-other-frame
存在的基础上定义名为buffer-menu-other-window
的函数:
(defun buffer-menu-other-frame (&optional arg)
"Display the Buffer Menu in another frame.
See `buffer-menu' for a description of the Buffer Menu.
By default, all buffers are listed except those whose names start
with a space (which are for internal use). With prefix argument
ARG, show only buffers that are visiting files."
(interactive "P")
(switch-to-buffer-other-frame (list-buffers-noselect arg))
(message
"Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %%; q to quit; ? for help."))
然后,您可以在按 RET 时定义一个宏来执行您想要的操作。然后将此宏与buffer-menu-mode
中的 RET 相关联。