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

36

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

Райан К. Томпсон
источник

Ответы:

25

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

(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
Если у вас есть несколько кадров, то вам нужно добавить (select-frame-set-input-focus (window-frame (active-minibuffer-window)))до select-window.
dshepherd
@dshepherd Я могу подтвердить, что после вставки строки Elisp, обогащенная функция работает хорошо только с одним кадром. Спасибо.
dimitarvp
@dshepherd Спасибо, обновили код соответствующим образом.
Трей Джексон
23
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))))
Ричард Хоскинс
источник
1
Почему вы хотите включить RETэто? Он будет автоматически принимать все, что было в минибуфере (при условии, что один из них C-x oпереключился на минибуфер). Как правило, может потребоваться использовать C-x oнесколько раз, если в кадре (на языке Emacs) открыто несколько окон (в обычных терминах GUI: несколько панелей в окне).
Крис Джонсен
Вы правы. Виноват.
Ричард Хоскинс
Есть ли способ попасть прямо в минибуфер, не перебирая все окна? Должен ли я просто написать цикл, который работает other-windowдо тех пор, пока текущее окно не станет минибуфером?
Райан К. Томпсон
6

Другой вариант использует switch-window

Я считаю, что это действительно полезный пакет: он позволяет вам быстро перейти к любому окну Emacs, визуально (и я использую много открытых окон в Emacs).

Но я просто выясняю, что он также позволяет вам перейти к минибуферу, если он активен:

введите описание изображения здесь

Надеюсь, это поможет.

rsenna
источник
1
Связанный пакет swap-buffersиспользует тот же метод для замены текущего буфера буфером в другом окне.
Пирокрастия
0
;; faster switching between windows in the same frame
(windmove-default-keybindings)

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

Cảnh Toàn Nguyễn
источник