LINUX.ORG.RU

Emacs, grep и окна

 


0

2

При переходе по ссылкам из буфера в grep-mode, как указать Emacs, в каком окне должны отображаться целевые буферы? Например, у меня 3 окна, и в зависимости непонятно от чего клик по ссылке открывает буфер то в одном окне, то в другом.

И можно ли отучить Emacs открывать новые окна (тоже при переходе по ссылкам от grep или результатам трансляции)?

★★★★★

Последнее исправление: tailgunner (всего исправлений: 1)

Ответ на: комментарий от x4DA

фреймы или окна?

Окна, да. Вечно их путаю.

http://stackoverflow.com/questions/12231783/in-emacs-when-i-do-a-grep-find-ho...

Мне нужно, чтобы окно с grep оставалось, а буфер открывался в другом окне. Но это «другое окно» должно быть всегда одно и то же.

tailgunner ★★★★★
() автор топика
Ответ на: комментарий от x4DA

Проблема в том, что буферы открываются в разных окнах (и иногда для этого создаются новые окна). С самим окном grep всё нормально.

tailgunner ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

То есть ты хочешь чтобы буфер всегда реюзал одно и то же окно, когда окон несколько и реюзал окно *grep* когда оно единственное?

x4DA ★★★★★
()
Последнее исправление: x4DA (всего исправлений: 1)
Ответ на: комментарий от x4DA

То есть ты хочешь чтобы буфер всегда реюзал одно и то же окно, когда окон несколько

Да.

реюзал окно *grep* когда оно единственное

Лучше пусть открывает новое окно, но неважно - окно с grep у меня никогда не бывает единственным.

tailgunner ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

вобщем там наверняка юзается функция display-buffer и тебе надо повесит хук на grep-mode и в котором засунуть нечто в display-buffer-alist или display-buffer-overriding-action

Bad_ptr ★★★★★
()
Ответ на: комментарий от tailgunner

Я вангую (лень щас лезть в сорцы), что оно переключает на буффер с ошибкой (если буфер уже не открыт в другом окне) при помощи функции other-window.

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

x4DA ★★★★★
()
Ответ на: комментарий от tailgunner

Просто, ты привык к другим юзкейсам. А elisp - очень приятный и эффективный язык.

x4DA ★★★★★
()
Ответ на: комментарий от Bad_ptr

нужно переопределить display-buffer-alist перед вызовом и убрать оттуда reusable-frames, кмк

x4DA ★★★★★
()
Ответ на: комментарий от x4DA

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

Если буфер в данный момент не показывается, я хочу, чтобы он открывался всегда в одном и том же окне. Если он уже открыт в другом - пусть показывается там.

Просто, ты привык к другим юзкейсам.

Скорее я не привык, чтобы редактор умничал.

А elisp - очень приятный и эффективный язык.

Дело не столько в Elisp, сколько в том, что я практически ничего не знаю о внутренностях Emacs, в которые нужно лезть.

tailgunner ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

как-то так.

(add-hook 'grep-mode-hook
          (lambda ()
            (setq display-buffer-alist
                  (list (cons ".*"
                              (cons
                               (lambda (bufer alist)
                                 (with-selected-window (previous-window) ;;тут выбираешь нужное тебе окно
                                  (switch-to-buffer bufer)
                                  (selected-window)))
                               nil))))))
Но не так всё гладко, когда нажимаешь на ссылку на файл, который ещё не открыт емаксом.

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)
Ответ на: комментарий от tailgunner

тогда странно, должно работать, у меня работает
x4DA, проверь

немного улучшеный вариант, разделяет окно, если сейчас только 1 окно, в котором показаны результаты грепа

(add-hook 'grep-mode-hook
        (lambda nil
         (setq display-buffer-alist
         (list
          (cons ".*"
                (cons
                 (lambda
                   (bufer alist)
                   (when (eq (selected-window) (previous-window))
                     (split-window-horizontally))
                   (with-selected-window
                       (previous-window)
                     (switch-to-buffer bufer)
                     (selected-window)))
                 nil))))))

Bad_ptr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.