Как предотвратить Emacs Dired от разделения кадра на более чем два окна?

В буфере Emacs Dired, если я перемещаюсь по имени файла и нажимаю o для dired-find-file-other-window, dired успешно выдает желаемое поведение: открытие файла во вторичном окне.

Но если я затем наведу курсор на ВТОРОЕ имя файла и снова нажму o, dired снова разбивает фрейм и открывает файл в ТРЕТЬЕМ окне.

Как сделать так, чтобы я повторно использовал второе окно, чтобы у меня всегда было максимум два окна в кадре?

2 ответа

Решение

Поднять значение split-height-threshold до такой степени, что это не сделает еще один раскол.

Возможно, вам придется поднять split-width-threshold также - в случае, если Emacs считает, что лучше разделить таким образом, чем.

WRT вопросы в комментарии:

Значение для выбора IMO зависит от количества строк, отображаемых в окне. Давайте предположим, что отображаются 40 строк. Если окно разделено, осталось 20. Тогда порог "split-height-threshold" 15 должен предотвратить дальнейшее разделение. Предотвращение дальнейшего параллельного разделения должно работать соответствующим образом, просто рассмотрите отображаемые столбцы.

Кстати, можно ожидать, что способ адаптировать это динамически.

Пытался решить ту же проблему с помощью изменения значения split-width-threshold, но обнаружил, что он часто перестает работать при изменении конфигурации монитора. Закончил писать совет для window-splittable-p,

(setq split-width-threshold (- (window-width) 10))
(setq split-height-threshold nil)

(defun count-visible-buffers (&optional frame)
  "Count how many buffers are currently being shown. Defaults to selected frame."
  (length (mapcar #'window-buffer (window-list frame))))

(defun do-not-split-more-than-two-windows (window &optional horizontal)
  (if (and horizontal (> (count-visible-buffers) 1))
      nil
    t))

(advice-add 'window-splittable-p :before-while #'do-not-split-more-than-two-windows)
Другие вопросы по тегам