Files
dot-emacs/lisp/init-ediff.el
2026-08-19 23:30:56 +02:00

82 lines
2.7 KiB
EmacsLisp

;; *** Ediff Config
;; Force ediff to use 1 frame (the current) and not open a new frame
;; for control and help. Also changing the split orientation doesnt
;; open a new frame.
(eval-after-load "ediff"
'(progn
(setq ediff-diff-options "-w"
ediff-split-window-function 'split-window-horizontally
ediff-window-setup-function 'ediff-setup-windows-plain)
(add-hook 'ediff-startup-hook 'ediff-toggle-wide-display)
(add-hook 'ediff-cleanup-hook 'ediff-toggle-wide-display)
(add-hook 'ediff-suspend-hook 'ediff-toggle-wide-display)
(add-hook 'ediff-mode-hook
(lambda ()
(ediff-setup-keymap)
;; merge left to right
(define-key ediff-mode-map ">" 'ediff-copy-A-to-B)
;; merge right to left
(define-key ediff-mode-map "<" 'ediff-copy-B-to-A)))
;; restore window config on quit
(add-hook 'ediff-after-quit-hook-internal 'winner-undo)
))
;; from emacswiki:
;; Usage: emacs -diff file1 file2
(defun command-line-diff (switch)
(let ((file1 (pop command-line-args-left))
(file2 (pop command-line-args-left)))
(ediff file1 file2)))
(add-to-list 'command-switch-alist '("diff" . command-line-diff))
;; *** Smerge Config
;; smerge-mode is being issued during editing of conflicts from magit,
;; however, I hate its default prefix, but don't have any practical
;; prefixes left AND am using it far too rare to deserve its own
;; prefix. So just a hydra will do.
(when (fboundp 'defhydra)
(defhydra hydra-smerge (:timeout 30.0 :exit nil)
"
^Smerge Mode^
^^--------------------------------------------------------------
_n_: next conflict _u_: keep upper _s_: swap
_p_: revious conflict _l_: keep lower _h_: highlight
_e_: Ediff _b_: keep base _r_: resolve
_q_: quit _c_: keep hunk@point _R_: revert
^^--------------------------------------------------------------
Reach this hydra with <C-x m>
^^--------------------------------------------------------------
"
("n" smerge-next nil)
("p" smerge-prev nil)
("u" smerge-keep-upper nil)
("l" smerge-keep-lower nil)
("b" smerge-keep-base nil)
("c" smerge-keep-current nil)
("h" smerge-refine nil)
("s" smerge-swap nil)
("r" smerge-resolve nil)
("R" undo-tree-undo nil)
("?" smerge-popup-context-menu nil)
("e" smerge-ediff nil :color blue)
("q" nil nil :color blue))
(global-set-key (kbd "C-x m") 'hydra-smerge/body)
(defalias 'merge 'hydra-smerge/body))
(provide 'init-ediff)
;;; init-ediff.el ends here