#emacs #window
#emacs #окно
Вопрос:
У меня есть несколько проблем с переходом фокуса после закрытия текущего окна в ситуации с несколькими окнами. Например, у меня в стеке открыто 3 окна (1, 2, 3). Я нахожусь в окне 2, я разделяю текущее окно по горизонтали (есть 1,2,3,4 окна, а текущее — 3), я выхожу из окна, и курсор переходит в окно 3. Это кажется довольно неинтуитивным. Как я могу сделать так, чтобы в этом сценарии фокус попал в окно 2?
Ответ №1:
Попробуйте следующую функцию:
(defun delete-window-select-sibling (amp;optional WINDOW)
(interactive)
(let ((sibling (or (window-prev-sibling WINDOW)
(window-next-sibling WINDOW))))
(delete-window WINDOW)
(when sibling
(select-window sibling))))
Вы можете привязать егоC-x 0, поместив его в свой инициализационный файл вместе со следующей строкой:
(global-set-key (kbd "C-x 0") 'delete-window-select-sibling)
На мой взгляд, небольшая вспомогательная функция, подобная приведенной выше, предпочтительнее рекомендаций delete-window
, поскольку некоторые режимы могут зависеть от того, как работает последнее.
Комментарии:
1. Это не работает для случая, когда у меня 4 окна, а текущее — 4-е. Когда я перехожу на 3-й и закрываю его, 2-й фокусируется вместо 3-го. Не могли бы вы помочь, пожалуйста, с этой ситуацией?
2. Не могли бы вы описать, как вы переходите к 4 окнам, начиная с одного окна (т. Е. Последовательность выполняемых вами разделений)?
3. Да, просто разделите 4 раза. IRL, это разделило бы работу на несколько окон, разделило и т.д. и просто в итоге получилось бы 4 окна и в 4-м, т. Е. Путь достижения ситуации может быть довольно непредсказуемым.
4. Для меня работает следующее: запустите Emacs; затем введите:
C-x 2
,C-x 2
,C-x 2
(теперь есть четыре окна)C-x o
,C-x o
,C-x o
(теперь точка находится в окне # 4),M-x delete-window-select-sibling
(окно # 4 исчезает, точка находится в окне # 3).5. После того, как вы укажете в окне # 4, вы переходите к окну # 3 (не закрывая окно # 4), затем вы закрываете окно # 3, и я ожидаю, что вы окажетесь в окне # 3 из 3 окон.