Переход к предыдущему окну при закрытии текущего

#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 окон.