Подтвердить что ты не робот

Слишком много разделенных экранов в Emacs!

С тех пор, как я установил emacs на новую машину, я увидел уродливое поведение. К сожалению, мои старые файлы .emacs довольно фрагментированы, и я не могу определить, имел ли у меня elisp, который позаботился об этом.

Проблема заключается в следующем: когда я выполнял команду, которая открывала новый буфер, такой как grep'ing, или щелкнув имя файла в результатах поиска, произошла одна из двух вещей:

  • Если отображается только один буфер, экран будет разбиваться один раз
  • Если отображается более одного буфера, окно буфера после текущего окна буфера откроет нужный файл

Я хочу вернуть это поведение. Теперь я получаю следующее:

Emacs будет продолжать разбивать окно, пока не откроются четыре окна буфера. Если я постоянно нажимаю несколько результатов grep, окно буфера, в котором они открываются, циклически проходит через три других (не-grep-results) окна буфера. Я бы хотел, чтобы они просто открывались в том же месте: "следующее" окно буфера рядом/под результатами - одно и то же окно буфера каждый раз.

Любые мысли о том, как добиться такого поведения?

4b9b3361

Ответ 1

Рассмотрим настройку split-height-threshold на большее значение, чем высота кадра; что предотвратит нежелательный вертикальный раскол.

(setq split-height-threshold 999)

Если вы предпочитаете вертикальное разделение по горизонтальному расколу, настройте split-width-threshold вместо этого.

Для более тонкого управления отображением нового буфера настройте display-buffer-function; что позволит полностью заменить стандартную функцию display-buffer, которая определяет политику отображения буфера.

Ответ 2

Это то, что я использовал некоторое время:

;;;---------------------------------------------------------------------
;;; display-buffer

;; The default behaviour of `display-buffer' is to always create a new
;; window. As I normally use a large display sporting a number of
;; side-by-side windows, this is a bit obnoxious.
;;
;; The code below will make Emacs reuse existing windows, with the
;; exception that if have a single window open in a large display, it
;; will be split horisontally.

(setq pop-up-windows nil)

(defun my-display-buffer-function (buf not-this-window)
  (if (and (not pop-up-frames)
           (one-window-p)
           (or not-this-window
               (not (eq (window-buffer (selected-window)) buf)))
           (> (frame-width) 162))
      (split-window-horizontally))
  ;; Note: Some modules sets `pop-up-windows' to t before calling
  ;; `display-buffer' -- Why, oh, why!
  (let ((display-buffer-function nil)
        (pop-up-windows nil))
    (display-buffer buf not-this-window)))

(setq display-buffer-function 'my-display-buffer-function)

Ответ 3

Я столкнулся с этим при переключении с emacs 22 на 23.

Я обнаружил, что настройка display-buffer-reuse-frames на non-nil (как предложено справкой для display-buffer) помогла, если у вас уже открыт файл в буфере.