如何在不使用鼠标的情况下回到emacs中的活动迷你缓冲区提示


36

在emacs中,有时我会在寻找文件,切换缓冲区或在minibuffer中做某事的过程中,由于某种原因,我会单击其他位置。当我返回时,使微型缓冲区提示再次激活的唯一方法是在微型缓冲区内单击,这很烦人,因为它是一个很小的区域。有什么方法可以在不使用鼠标的情况下切换回活动的微型缓冲区提示?

Answers:


25

这将做您想要的。绑定到您选择的键:

(defun switch-to-minibuffer-window ()
  "switch to minibuffer window (if active)"
  (interactive)
  (when (active-minibuffer-window)
    (select-frame-set-input-focus (window-frame (active-minibuffer-window)))
    (select-window (active-minibuffer-window))))
(global-set-key (kbd "<f7>") 'switch-to-minibuffer-window)

2
如果您有多个框架,则需要在(select-frame-set-input-focus (window-frame (active-minibuffer-window)))之前添加select-window
dshepherd

@dshepherd我可以确认,插入您的Elisp行之后,仅使用一帧功能也可以正常工作。谢谢。
dimitarvp 2015年

@dshepherd谢谢,已经适当地更新了代码。
Trey Jackson

23
C-x o 

根据需要重复。

Cx o运行命令other-window,这是“ C源代码”中的交互式内置函数。

如果不想在Windows中循环,可以在init文件中添加一个函数并将其绑定到键。这样的事情可能会起作用:

(defun select-minibuffer ()
 "Make the active minibuffer the selected window."
 (interactive)
 (when (active-minibuffer-window)
   (select-window (active-minibuffer-window))))

1
您为什么要这样包含RET?它会自动接受微型缓冲区中的任何内容(假设有一个C-x o切换到微型缓冲区)。通常,C-x o如果框架中有多个窗口打开(按Emacs的说法),则可能需要多次使用(按常规GUI术语:该窗口中有多个窗格)。
克里斯·约翰森

你是对的。我的错。
理查德·霍斯金斯

有什么方法可以直接进入迷你缓冲区,而不必在所有窗口中循环?我应该只编写一个循环,other-window直到当前窗口成为minibuffer吗?
瑞安·汤普森

6

另一种选择是使用 switch-window

我发现它是一个非常有用的软件包:它可以让您直观地快速移至任何Emacs窗口(并且我确实在Emacs中使用了许多打开的窗口)。

但是我发现它还允许您移动到迷你缓冲区(如果处于活动状态):

在此处输入图片说明

希望能帮助到你。


1
一个相关的程序包swap-buffers使用相同的方法将当前缓冲区与另一个窗口中的缓冲区交换。
–pyrocrasty

0
;; faster switching between windows in the same frame
(windmove-default-keybindings)

将以上两行代码添加到.emacs.el将实现简单有效的移动,不仅是移动到迷你缓冲区,而且还可以使用Shift-Arrow导航Emacs框架上的所有其他窗口。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.