Может ли объединение ediff одновременно отображать буферы предков, A, B и слияний?

Я - жесткий пользователь emacs, но до сих пор всегда использовал kdiff3 для трехсторонних слияний с предком, например при выполнении git merge или rebase. Мне очень нравится, что kdiff3 может не только одновременно отображать все четыре версии слияния текста:

  • общий предок (буфер A в kdiff3)
  • "ours" a.k.a. "local" (буфер B в kdiff3)
  • "theirs" a.k.a. "remote" (буфер C в kdiff3)
  • результат или цель слияния

но также делает различия между A, B и C прозрачными с помощью подсветки цветом. Тем не менее, kdiff3 неудивительно отстой в сравнении с emacs, когда дело доходит до текстового редактирования буфера слияния, поскольку kdiff3 не является полномасштабным текстовым редактором. Он также не интегрируется из коробки с отличным пакетом magit. Поэтому я пытаюсь переключиться на ediff при разрешении конфликтов в этом конкретном сценарии (я успешно использовал ediff для другого использования случаев в течение многих лет).

Однако, несмотря на чтение ediff manual и Страница EmacsWiki и спрашивая в #emacs IRC, я не могу найти способ одновременного отображения всех 4 буферов. По умолчанию он показывает:

  • "ours" a.k.a. "local" (помеченный буфер A)
  • "их" a.k.a. "remote" (помеченный буфер B)
  • результат или цель слияния (помеченный буфер C)

Нажатие / переключает окно, отображающее буфер результатов слияния (C), так что он отображает буфер предка, но вы не можете одновременно видеть результат предка и результат слияния. (Кроме того, diff в буфере предков подсвечивается одним цветом, который явно не показывает, какие биты отличаются от двух других видимых буферов (A и B), хотя согласно этот поток, кажется, что, к сожалению, предварительная интерпретация различий еще не реализована.)

Есть ли простой способ настроить ediff одновременное отображение всех 4 буферов?

Ответы

Ответ 1

Это добавляется к версии trunk. Теперь по умолчанию 3-сторонние слияния показывают четыре буфера, то есть "локальный" (буфер A), "remote" (буфер B), результат слияния (буфер C) и предок. Вы можете изменить это значение по умолчанию настраивая новый вариант "ediff-show-ancestor".

Ключ '/' теперь привязан к новой команде 'ediff-toggle-show-ancestor': it переключает, показывать ли 3 (локальный, удаленный и результат) или 4 (локальный, удаленный, результат, предок).

Эти изменения будут видны в выпуске Emacs 26.1.

Ответ 2

Нет, нет простого способа настроить его для этого. Существует опция ediff-window-setup-function, которую вы можете настроить для любой функции, которую вы хотите. Вы можете посмотреть настройки по умолчанию, ediff-setup-windows-plain и ediff-setup-windows-multi, чтобы понять, что вам нужно делать. Фактически, самый простой способ продолжить - скопировать один из них в вашу конфигурацию emacs и изменить его (смена имени, конечно); они не тривиальны.