From 4c000312c47e47b9d04d1b92204fcffd652f69ac Mon Sep 17 00:00:00 2001 From: Ravi R Kiran Date: Mon, 26 Apr 2021 22:18:17 -0500 Subject: Make ediff a bit friendlier diff --git a/lisp/ravi-init-vc.el b/lisp/ravi-init-vc.el index c480f05..b72a34f 100644 --- a/lisp/ravi-init-vc.el +++ b/lisp/ravi-init-vc.el @@ -100,35 +100,49 @@ ;; Stolen almost entirely from Fuco (Matus Goljer) (use-package ediff + :hook (ediff-keymap-setup-hook . ravi/add-d-to-ediff-mode-map) + :commands ravi/add-d-to-ediff-mode-map :config - (progn - (defvar my-ediff-before-config nil "Window configuration before ediff.") - (defvar my-ediff-after-config nil "Window configuration after ediff.") + (defvar my-ediff-before-config nil "Window configuration before ediff.") + (defvar my-ediff-after-config nil "Window configuration after ediff.") + + (unless window-system + (setq ediff-split-window-function #'split-window-horizontally) + (setq ediff-window-setup-function #'ediff-setup-windows-plain)) - (defun my-ediff-before-setup () - "Function to be called before any buffers or window setup for + (defun my-ediff-before-setup () + "Function to be called before any buffers or window setup for ediff." - (setq my-ediff-before-config (current-window-configuration)) - (set-register ?b (list my-ediff-before-config (point-marker)))) - - (defun my-ediff-after-setup () - "Function to be called after buffers and window setup for ediff." - (setq my-ediff-after-config (current-window-configuration)) - (set-register ?e (list my-ediff-after-config (point-marker)))) - - (defun my-ediff-quit () - "Function to be called when ediff quits." - (when my-ediff-before-config - (set-window-configuration my-ediff-before-config)) - ;; clean up ediff bullshit - (->> (buffer-list) - (-map 'buffer-name) - (--select (string-match-p "\\*[Ee]diff" it)) - (-map 'kill-buffer))) - - (add-hook 'ediff-before-setup-hook 'my-ediff-before-setup) - (add-hook 'ediff-after-setup-windows-hook 'my-ediff-after-setup 'append) - (add-hook 'ediff-quit-hook 'my-ediff-quit))) + (setq my-ediff-before-config (current-window-configuration)) + (set-register ?b (list my-ediff-before-config (point-marker)))) + + (defun my-ediff-after-setup () + "Function to be called after buffers and window setup for ediff." + (setq my-ediff-after-config (current-window-configuration)) + (set-register ?e (list my-ediff-after-config (point-marker)))) + + (defun my-ediff-quit () + "Function to be called when ediff quits." + (when my-ediff-before-config + (set-window-configuration my-ediff-before-config)) + ;; clean up ediff bullshit + (->> (buffer-list) + (-map 'buffer-name) + (--select (string-match-p "\\*[Ee]diff" it)) + (-map 'kill-buffer))) + + ;; Copy both sides in a merge + (defun ravi/ediff-copy-both-to-C () + (interactive) + (ediff-copy-diff ediff-current-difference nil 'C nil + (concat + (ediff-get-region-contents ediff-current-difference 'A ediff-control-buffer) + (ediff-get-region-contents ediff-current-difference 'B ediff-control-buffer)))) + (defun ravi/add-d-to-ediff-mode-map () (define-key ediff-mode-map "d" #'ravi/ediff-copy-both-to-C)) + + (add-hook 'ediff-before-setup-hook 'my-ediff-before-setup) + (add-hook 'ediff-after-setup-windows-hook 'my-ediff-after-setup 'append) + (add-hook 'ediff-quit-hook 'my-ediff-quit)) (use-package smerge-mode :config -- cgit v0.10.1