Як повернутися до активного запиту мінібуфера в emacs без миші


36

У програмах emacs іноді я опиняюся в середині пошуку файлу чи перемикання буферів або роблю щось у minibuffer, і я чомусь натискаю десь ще. Коли я повертаюсь назад, єдиний спосіб зробити підказку minibuffer знову активним - це натиснути всередині minibuffer, що дратує, оскільки це тонка область. Чи є спосіб переключитися назад до активного запиту мінібуфера без використання миші?

Відповіді:


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 Я можу підтвердити, що після вставки рядка Elisp, збагачена функція добре працює лише з одним кадром. Спасибі.
dimitarvp

@dshepherd Дякуємо, оновили код належним чином.
Трей Джексон

23
C-x o 

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

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

Якщо ви не хочете переходити через вікна, ви можете додати функцію у свій файл init і прив’язати його до ключа. Щось подібне може спрацювати:

(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) кілька вікон (у звичайному графічному інтерфейсі: кілька вікон у вікні).
Кріс Джонсен

Ти правий. Моє ліжко.
Річард Хоскінс

Чи є спосіб дістатися безпосередньо до мінібуфера, не потенційно проїжджаючи через усі вікна? Чи потрібно просто написати цикл, який робить, other-windowпоки поточне вікно не стане мінібуфером?
Райан Ч. Томпсон

6

Інший варіант - використання switch-window

Я вважаю, що це дійсно корисний пакет: він дозволяє швидко переміщатися до будь-якого вікна Emacs, візуально (і я дуже багато відкритих вікон в Emacs).

Але я лише дізнаюся, що це також дозволяє вам перейти до мінібуфера, якщо він активний:

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

Сподіваюся, це допомагає.


1
Пов'язаний пакет, swap-buffersякий використовує той самий метод для заміни поточного буфера тим, який знаходиться в іншому вікні.
пірокрастія

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

Додавання двох вище рядків коду до .emacs.el дасть можливість простого та ефективного переміщення, не лише до minibuffer, але й навігації по всіх інших вікнах у кадрі Emacs за допомогою Shift-Arrow .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.