Никогда не создавайте рамку в Ediff

14

В общем, я не люблю кадры. Щас пользуюсь

(setq ediff-window-setup-function #'ediff-setup-windows-plain)

Чтобы убедиться, что ediffне создает кадр при его запуске.

Тем не менее, некоторые команды, такие как ediff-show-registryвсе еще открывают новые кадры.

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

PythonNut
источник
Как об изменении ediff-skip-unsuitable-framesили отметив , что из полностью внутри ediff-show-registry- например, комментарий из: (ediff-skip-unsuitable-frames 'ok-unsplittable)?
юрист
5
Пока вы занимаетесь этим, рассмотрите возможность поиска в источнике семейства ediffбиблиотек, (make-frameи вы найдете несколько мест, которые необходимо исправить в соответствии с вашими предпочтениями. Ваш запрос, безусловно, является обоснованным и заслуживает (на мой взгляд) особого запроса к автору и / или команде Emacs - большинство людей подумают, что они ediff-setup-windows-plainдолжны применяться по всем направлениям без различных make-frameисключений.
законник

Ответы:

3

Существует внутренний предикат ediff-init.el, называемый ediff-window-display-p. Когда я переопределил это (после загрузки ediff, конечно) примерно так, все работает в одном кадре, включая функцию, которую вы упомянули как проблему:

(defun ediff-window-display-p () nil)

Я согласен с @lawlist, что это хорошая функция - исправить ediff-window-setup-function.

cyberbisson
источник
2
Это может быть лучше написано (advice-add 'ediff-window-display-p :override #'ignore), что может быть легче отменить с advice-remove(плюс это не требует загрузки ediff в первую очередь).
npostavs
@npostavs отлично! Спасибо за умный код!
cyberbisson
Я попробовал это, но это, к сожалению, привело к тому, что Ediff прекратил использовать мою функцию настройки окна.
tboyce12
@ tboyce12 Это сбивает с толку ... почему у вас есть пользовательская функция настройки окна, если вы не хотите, чтобы новые окна (т.е. фреймы) отображались? Что делает функция?
cyberbisson
Я хочу новые окна, но не новые рамки. По умолчанию ediff-setup-windows-plainзанимает весь кадр - я хочу, чтобы мои «контекстные» окна были открыты (например, заметки и другие файлы). Поэтому я написал пользовательскую функцию настройки окна (использует собственный буфер отображения, работающий от ace-window, чтобы выбрать, где можно разделить окна и отобразить новые буферы). Кажется, что, когда Ediff загружается, он проверяет это ediff-window-display-pи, если false, обходит пользовательскую функцию настройки окна и использует ediff-setup-windows-plain. Так что для моей пользовательской настройки я либо избегу ediff-show-registry, либо напишу пользовательскую команду.
tboyce12