;;; oni-ediff.el --- Ediff configuration -*- lexical-binding: t; -*- ;; Copyright (C) 2019 Tom Willemse ;; Author: Tom Willemse ;; Keywords: local ;; Version: 2019.1010.164050 ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Ediff configuration. ;;; Code: (require 'ediff) (defun oni-ediff--turn-on-fullscreen () "Turn on fullscreen for the current frame." (unless (memq (frame-parameter nil 'fullscreen) '(fullscreen fullboth)) (set-frame-parameter nil 'fullscreen 'fullboth))) (defun oni-ediff--turn-off-fullscreen () "Turn off fullscreen for the current frame." (when (memq (frame-parameter nil 'fullscreen) '(fullscreen fullboth)) (set-frame-parameter nil 'fullscreen nil))) ;;;###autoload (defun oni-ediff-from-command-line () "Call ‘ediff’ with arguments from the command line." (pcase command-line-args-left (`(,fileA ,fileB) (ediff-files fileA fileB)) (`(,fileA ,fileB ,fileC) (ediff-files3 fileA fileB fileC)) (_ (error "Invalid number of arguments, need either 2 or 3 files")))) ;;;###autoload (defun oni-ediff-server (fun files proc &optional nowait) (pcase files ((and `((,fileB) (,fileA) (,command)) (guard (string= (file-name-nondirectory command) "diff"))) (select-frame-set-input-focus (selected-frame)) (ediff-files (expand-file-name fileA) (expand-file-name fileB)) nil) (_ (message "Got args: \"%s\"" (list files proc nowait)) (funcall fun files proc nowait)))) ;;;###autoload (advice-add 'server-visit-files :around #'oni-ediff-server) (setq ediff-window-setup-function 'ediff-setup-windows-plain) (setq ediff-split-window-function 'split-window-horizontally) (setq ediff-diff-options "-w") (add-hook 'ediff-mode-hook #'oni-ediff--turn-on-fullscreen) (add-hook 'ediff-cleanup-hook #'oni-ediff--turn-off-fullscreen) ;;;###autoload(with-eval-after-load 'ediff (require 'oni-ediff)) (provide 'oni-ediff) ;;; oni-ediff.el ends here