Как вернуться к активной подсказке минибуфера в emacs без мыши

5958
Ryan Thompson

В emacs иногда я нахожусь в процессе поиска файла, переключения буферов или выполнения каких-либо действий в минибуфере, и я по какой-то причине щелкну где-нибудь еще. Когда я возвращаюсь, единственный способ снова активировать подсказку минибуфера - это щелкнуть внутри минибуфера, что раздражает, потому что это тонкая область. Есть ли способ вернуться к активному приглашению минибуфера без использования мыши?

37

4 ответа на вопрос

25
Trey Jackson

Это будет делать то, что вы хотите. Привязать к ключу на ваш выбор:

(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) 
Если у вас есть несколько кадров, вам нужно добавить `(select-frame-set-input-focus (window-frame (active-минибуфер-окно)))` `перед` select-window`. dshepherd 8 лет назад 2
@dshepherd Я могу подтвердить, что после вставки строки Elisp, обогащенная функция работает хорошо только с одним кадром. Благодарю. dimitarvp 8 лет назад 0
@dshepherd Спасибо, соответственно обновил код. Trey Jackson 8 лет назад 0
22
Richard Hoskins
C-x o 

Повторите по мере необходимости.

Cx o запускает команду other-window, которая является интерактивной встроенной функцией в `C исходном коде '.

Если вы не хотите переключаться между окнами, вы можете добавить функцию в файл инициализации и связать ее с клавишей. Нечто подобное может работать:

(defun select-minibuffer () "Make the active minibuffer the selected window." (interactive) (when (active-minibuffer-window) (select-window (active-minibuffer-window)))) 
Почему вы хотите включить `RET`? Он будет автоматически принимать все, что было в минибуфере (при условии, что один Cx o переключен на минибуфер). Как правило, может потребоваться использовать Cx o несколько раз, если в кадре (на языке Emacs) открыто несколько окон (в обычных терминах GUI: несколько панелей в окне). Chris Johnsen 14 лет назад 1
You're right. My bad. Richard Hoskins 14 лет назад 0
Есть ли способ попасть прямо в минибуфер, не перебирая все окна? Должен ли я просто написать цикл, который выполняет `other-window`, пока текущее окно не станет минибуфером? Ryan Thompson 14 лет назад 0
6
rsenna

Another option is using switch-window

I find it to be a really useful package: it allows you to quickly move to any Emacs window, visually (and I do use a lot of open windows in Emacs).

But I just find out it also allows you to move to the minibuffer, if it is active:

enter image description here

Hope it helps.

Связанный пакет - это [`swap-buffers`] (https://github.com/ekazakov/swap-buffers/blob/master/swap-buffers.el), который использует тот же метод для замены текущего буфера на другой в другом окно. pyrocrasty 9 лет назад 1
0
Cảnh Toàn Nguyễn
;; faster switching between windows in the same frame (windmove-default-keybindings) 

Добавление двух приведенных выше строк кода в .emacs.el позволит легко и эффективно перемещать не только минибуфер, но и перемещаться по всем остальным окнам в кадре Emacs с помощью Shift-Arrow .

Похожие вопросы