Come tornare a un prompt del minibuffer attivo in emacs senza il mouse


36

In emacs, a volte sarò nel mezzo di trovare un file o cambiare buffer o fare qualcosa nel minibuffer, e cliccherò da qualche altra parte per qualche motivo. Quando torno, l'unico modo per riattivare il prompt del minibuffer è fare clic all'interno del minibuffer, il che è fastidioso perché si tratta di un'area sottile. C'è un modo per tornare a un prompt del minibuffer attivo senza usare il mouse?

Risposte:


25

Questo farà quello che vuoi. Associa alla chiave di tua scelta:

(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
Se si dispone di più frame, è necessario aggiungere (select-frame-set-input-focus (window-frame (active-minibuffer-window)))prima di select-window.
pastore,

@dshepherd Posso confermare che dopo aver inserito la tua linea Elisp, la funzione arricchita funziona bene anche con un solo frame. Grazie.
dimitarvp,

@dshepherd Grazie, hai aggiornato il codice in modo appropriato.
Trey Jackson,

23
C-x o 

Ripetere se necessario.

Cx o esegue il comando other-window, che è una funzione integrata interattiva in "codice sorgente C".

Se non si desidera scorrere le finestre, è possibile aggiungere una funzione nel file init e associarla a una chiave. Qualcosa del genere potrebbe funzionare:

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

1
Perché vorresti includere RETcosì? Accetterebbe automaticamente qualunque cosa fosse nel minibuffer (supponendo che un singolo C-x opassasse al minibuffer). Generalmente, potrebbe essere necessario utilizzare C-x opiù volte se ci sono (nel linguaggio di Emacs) più finestre aperte nel frame (in termini normali della GUI: più riquadri nella finestra).
Chris Johnsen,

Hai ragione. Colpa mia.
Richard Hoskins,

Esiste un modo per accedere direttamente al minibuffer senza potenzialmente scorrere tutte le finestre? Devo solo scrivere un ciclo che fa other-windowfino a quando la finestra corrente è minibuffer?
Ryan C. Thompson,

6

Un'altra opzione sta usando switch-window

Trovo che sia un pacchetto davvero utile: ti permette di spostarti rapidamente in qualsiasi finestra di Emacs, visivamente (e utilizzo molte finestre aperte in Emacs).

Ma ho appena scoperto che ti consente anche di passare al minibuffer, se è attivo:

inserisci qui la descrizione dell'immagine

Spero che sia d'aiuto.


1
Un pacchetto correlato swap-buffersutilizza lo stesso metodo per scambiare il buffer corrente con quello in un'altra finestra.
piroplastica,

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

L'aggiunta di due righe di codice sopra .emacs.el consentirà lo spostamento semplice ed efficiente, non solo per il minibuffer, ma anche per navigare in tutte le altre finestre del frame Emacs usando Shift-Arrow .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.