Como voltar para um prompt minibuffer ativo no emacs sem o mouse

36

No emacs, às vezes eu estarei no meio de encontrar um arquivo ou alternar buffers ou fazer algo no minibuffer, e clicarei em outro lugar por algum motivo. Quando eu volto, a única maneira de ativar o prompt do minibuffer novamente é clicar dentro do minibuffer, o que é irritante porque é uma área fina. Existe alguma maneira de voltar ao prompt do minibuffer ativo sem usar o mouse?

Ryan C. Thompson
fonte

Respostas:

25

Isso fará o que você quiser. Vincule à chave de sua escolha:

(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)
Trey Jackson
fonte
2
Se você tiver vários quadros, precisará adicionar (select-frame-set-input-focus (window-frame (active-minibuffer-window)))antes do select-window.
dshepherd
@dshepherd Posso confirmar que, depois de inserir sua linha Elisp, a função enriquecida está funcionando bem com apenas um quadro também. Obrigado.
Dimitarvp
@dshepherd Obrigado, atualizei o código adequadamente.
Trey Jackson
23
C-x o 

Repita conforme necessário.

Cx o executa o comando other-window, que é uma função interna interativa no `código-fonte C '.

Se você não deseja percorrer o Windows, você pode adicionar uma função no seu arquivo init e vinculá-la a uma chave. Algo assim pode funcionar:

(defun select-minibuffer ()
 "Make the active minibuffer the selected window."
 (interactive)
 (when (active-minibuffer-window)
   (select-window (active-minibuffer-window))))
Richard Hoskins
fonte
11
Por que você gostaria de incluir RETassim? Ele aceitaria automaticamente o que estava no minibuffer (assumindo que um único C-x ocomutasse para o minibuffer). Geralmente, pode ser necessário usar C-x ovárias vezes se houver (na linguagem do Emacs) várias janelas abertas no quadro (em termos normais da GUI: vários painéis na janela).
precisa
Você está certo. Minha culpa.
Richard Hoskins
Existe alguma maneira de chegar diretamente ao minibufer sem potencialmente percorrer todas as janelas? Devo apenas escrever um loop que faz other-windowaté que a janela atual seja minibuffer?
Ryan C. Thompson
6

Outra opção é usar switch-window

Acho que é um pacote realmente útil: permite que você se mova rapidamente para qualquer janela do Emacs, visualmente (e eu uso muitas janelas abertas no Emacs).

Mas acabei de descobrir que também permite que você mude para o minibuffer, se estiver ativo:

insira a descrição da imagem aqui

Espero que ajude.

rsenna
fonte
11
Um pacote relacionado é o swap-buffersque usa o mesmo método para trocar o buffer atual por outro em outra janela.
Pyrocrasty 16/05
0
;; faster switching between windows in the same frame
(windmove-default-keybindings)

A adição de duas linhas de código acima ao .emacs.el permitirá a movimentação simples e eficiente, não apenas para minibuffer, mas também para navegar em todas as outras janelas no quadro do Emacs usando Shift-Arrow .

Cảnh Toàn Nguyễn
fonte