So kehren Sie in Emacs ohne Maus zu einer aktiven Minibuffer-Eingabeaufforderung zurück

36

In Emacs bin ich manchmal gerade dabei, eine Datei zu finden, die Puffer zu wechseln oder etwas im Minipuffer zu tun, und aus irgendeinem Grund klicke ich an eine andere Stelle. Wenn ich zurückgehe, besteht die einzige Möglichkeit, die Eingabeaufforderung des Minipuffers wieder zu aktivieren, darin, in den Minipuffer zu klicken. Dies ist ärgerlich, da es sich um einen dünnen Bereich handelt. Gibt es eine Möglichkeit, zu einer aktiven Minibuffer-Eingabeaufforderung zurückzukehren, ohne die Maus zu verwenden?

Ryan Thompson
quelle

Antworten:

25

Dies wird tun, was Sie wollen. Binden Sie an den Schlüssel Ihrer Wahl:

(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
quelle
2
Wenn Sie mehrere Frames haben, müssen Sie diese (select-frame-set-input-focus (window-frame (active-minibuffer-window)))vor dem hinzufügen select-window.
Dshepherd
@dshepherd Ich kann bestätigen, dass nach dem Einfügen Ihrer Elisp-Zeile die erweiterte Funktion auch mit nur einem Frame gut funktioniert. Vielen Dank.
dimitarvp
@dshepherd Danke, habe den Code entsprechend aktualisiert.
Trey Jackson
23
C-x o 

Wiederholen Sie diesen Vorgang nach Bedarf.

Cx o führt den Befehl other-window aus, eine interaktive integrierte Funktion in `C-Quellcode '.

Wenn Sie nicht durch Windows blättern möchten, können Sie der Init-Datei eine Funktion hinzufügen und diese an eine Taste binden. So etwas könnte funktionieren:

(defun select-minibuffer ()
 "Make the active minibuffer the selected window."
 (interactive)
 (when (active-minibuffer-window)
   (select-window (active-minibuffer-window))))
Richard Hoskins
quelle
1
Warum sollten Sie so aufnehmen wollen RET? Es würde automatisch akzeptieren, was sich im Minibuffer befand (vorausgesetzt, es wurde auf den Minibuffer C-x oumgeschaltet). Im Allgemeinen muss man möglicherweise C-x omehrere Male verwenden, wenn (im Emacs-Sprachgebrauch) mehrere Fenster im Frame geöffnet sind (in normalen GUI-Begriffen: mehrere Fensterbereiche im Fenster).
Chris Johnsen
Du hast recht. Mein Fehler.
Richard Hoskins
Gibt es eine Möglichkeit, direkt zum Minipuffer zu gelangen, ohne möglicherweise durch alle Fenster zu fahren? Soll ich einfach eine Schleife schreiben, die funktioniert, other-windowbis das aktuelle Fenster ein Minipuffer ist?
Ryan Thompson
6

Eine andere Option ist die Verwendung von switch-window

Ich halte es für ein wirklich nützliches Paket: Sie können schnell und visuell zu jedem Emacs-Fenster wechseln (und ich verwende in Emacs viele offene Fenster).

Aber ich finde nur heraus, dass Sie damit auch in den Minipuffer wechseln können, wenn dieser aktiv ist:

Bildbeschreibung hier eingeben

Ich hoffe es hilft.

rsenna
quelle
1
Ein verwandtes Paket swap-buffersverwendet dieselbe Methode zum Austauschen des aktuellen Puffers mit dem in einem anderen Fenster.
Pyrocrasty
0
;; faster switching between windows in the same frame
(windmove-default-keybindings)

Das Hinzufügen von zwei obigen Codezeilen zu .emacs.el ermöglicht ein einfaches und effizientes Verschieben, nicht nur in den Minipuffer, sondern auch das Navigieren in allen anderen Fenstern im Emacs-Frame mit Shift-Arrow .

Cảnh Toàn Nguyễn
quelle