Jak wrócić do aktywnego monitu w minibuforze w emacsie bez myszy

36

W emacs czasami znajduję się w trakcie znajdowania pliku, przełączania buforów lub robienia czegoś w minibuforze, i z jakiegoś powodu klikam gdzie indziej. Gdy wrócę, jedynym sposobem, aby ponownie włączyć monit minibufora, jest kliknięcie wewnątrz minibufora, co jest denerwujące, ponieważ jest to cienki obszar. Czy jest jakiś sposób na powrót do aktywnego monitu minibufora bez użycia myszy?

Ryan C. Thompson
źródło

Odpowiedzi:

25

To zrobi, co chcesz. Powiąż z wybranym kluczem:

(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
źródło
2
Jeśli masz wiele ramek, musisz dodać (select-frame-set-input-focus (window-frame (active-minibuffer-window)))przed select-window.
dshepherd
@dshepherd Mogę potwierdzić, że po wstawieniu linii Elisp, wzbogacona funkcja działa dobrze tylko z jedną ramką. Dzięki.
dimitarvp,
@dshepherd Dzięki, odpowiednio zaktualizowałem kod.
Trey Jackson,
23
C-x o 

Powtórz w razie potrzeby.

Cx o uruchamia polecenie other-window, które jest interaktywną wbudowaną funkcją w `C code source '.

Jeśli nie chcesz przełączać się między oknami, możesz dodać funkcję do pliku init i powiązać ją z kluczem. Coś takiego może działać:

(defun select-minibuffer ()
 "Make the active minibuffer the selected window."
 (interactive)
 (when (active-minibuffer-window)
   (select-window (active-minibuffer-window))))
Richard Hoskins
źródło
1
Dlaczego chcesz to uwzględnić RET? Automatycznie akceptowałby wszystko, co było w minibuforze (zakładając, że jeden C-x oprzeszedł na minibufor). Zasadniczo może być konieczne C-x owielokrotne użycie, jeśli w ramce (w języku Emacsa) jest otwartych wiele okien (w normalnych warunkach GUI: wiele okien w oknie).
Chris Johnsen,
Masz rację. Mój błąd.
Richard Hoskins,
Czy jest jakiś sposób, aby dostać się bezpośrednio do minibufora bez potencjalnego przechodzenia przez wszystkie okna? Czy powinienem po prostu napisać pętlę, która będzie działać, other-windowdopóki bieżące okno nie będzie zawierało minibufora?
Ryan C. Thompson,
6

Inną opcją jest użycie switch-window

Uważam, że jest to bardzo przydatny pakiet: pozwala szybko przejść do dowolnego okna Emacsa, wizualnie (i często używam wielu otwartych okien w Emacsie).

Ale właśnie się dowiedziałem, że pozwala również przejść do minibufora, jeśli jest aktywny:

wprowadź opis zdjęcia tutaj

Mam nadzieję, że to pomoże.

rsenna
źródło
1
Powiązany pakiet swap-buffersużywa tej samej metody do zamiany bieżącego bufora na ten w innym oknie.
pirokrastyka
0
;; faster switching between windows in the same frame
(windmove-default-keybindings)

Dodanie dwóch powyższych wierszy kodu do .emacs.el umożliwi proste i wydajne przenoszenie, nie tylko do minibufora, ale także nawigację po wszystkich innych oknach w ramce Emacsa za pomocą Shift-Arrow .

Cảnh Toàn Nguyễn
źródło