Mercurial > hg > xemacs-beta
view lisp/efs/dired-diff.el @ 142:1856695b1fa9 r20-2b5
Import from CVS: tag r20-2b5
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:33:18 +0200 |
parents | 9f59509498e1 |
children |
line wrap: on
line source
;; -*-Emacs-Lisp-*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; File: dired-diff.el ;; RCS: ;; Dired Version: #Revision: 7.9 $ ;; Description: Support for diff and related commands. ;; Author: Sandy Rutherford <sandy@ibm550.sissa.it> ;; Created: Fri Jun 24 08:50:20 1994 by sandy on ibm550 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; 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 1, 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. ;;; ;;; A copy of the GNU General Public License can be obtained from this ;;; program's author (send electronic mail to sandy@ibm550.sissa.it) or ;;; from the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, ;;; MA 02139, USA. (provide 'dired-diff) (require 'dired) (defvar emerge-last-dir-input) (defvar emerge-last-dir-output) (defvar emerge-last-dir-ancestor) (defvar diff-switches) (defun dired-diff-read-file-name (prompt) ;; Read and return a file name for diff. (let* ((mark-active t) (default (and (mark) (save-excursion (goto-char (mark)) (dired-get-filename nil t))))) (read-file-name (format "%s %s with: %s" prompt (dired-get-filename 'no-dir) (if default (concat "[" (dired-make-relative default (dired-current-directory) t) "] ") "")) (default-directory) default t))) (defun dired-diff-read-switches (switchprompt) ;; Read and return a list of switches (or (boundp 'diff-switches) (require 'diff)) ; Make sure that `diff-switches' is defined. (let* ((default (if (listp diff-switches) (mapconcat 'identity diff-switches " ") diff-switches)) (switches (read-string (format switchprompt default) default))) (let (result (start 0)) (while (string-match "\\(\\S-+\\)" switches start) (setq result (cons (substring switches (match-beginning 1) (match-end 1)) result) start (match-end 0))) (nreverse result)))) (defun dired-diff (file &optional switches) "Compare file at point with file FILE using `diff'. FILE defaults to the file at the mark. The prompted-for file is the first file given to `diff'. With a prefix allows the switches for the diff program to be edited." (interactive (list (dired-diff-read-file-name "Diff") (and current-prefix-arg (dired-diff-read-switches "Options for diff: ")))) (if switches (diff file (dired-get-filename) switches) (diff file (dired-get-filename)))) (defun dired-backup-diff (&optional switches) "Diff this file with its backup file or vice versa. Uses the latest backup, if there are several numerical backups. If this file is a backup, diff it with its original. The backup file is the first file given to `diff'." (interactive (list (and current-prefix-arg (dired-diff-read-switches "Diff with switches: ")))) (if switches (diff-backup (dired-get-filename) switches) (diff-backup (dired-get-filename)))) (defun dired-emerge (arg file out-file) "Merge file at point with FILE using `emerge'. FILE defaults to the file at the mark." (interactive (let ((file (dired-diff-read-file-name "Merge"))) (list current-prefix-arg file (and current-prefix-arg (emerge-read-file-name "Output file" emerge-last-dir-output (dired-abbreviate-file-name file) file))))) (emerge-files arg file (dired-get-filename) out-file)) (defun dired-emerge-with-ancestor (arg file ancestor file-out) "Merge file at point with FILE, using a common ANCESTOR file. FILE defaults to the file at the mark." (interactive (let ((file (dired-diff-read-file-name "Merge"))) (list current-prefix-arg file (emerge-read-file-name "Ancestor file" emerge-last-dir-ancestor nil file) (and current-prefix-arg (emerge-read-file-name "Output file" emerge-last-dir-output (dired-abbreviate-file-name file) file))))) (emerge-files-with-ancestor arg file (dired-get-filename) ancestor file-out)) (defun dired-ediff (file) "Ediff file at point with FILE. FILE defaults to the file at the mark." (interactive (list (dired-diff-read-file-name "Ediff"))) (ediff-files file (dired-get-filename))) (defun dired-epatch (file) "Patch file at point using `epatch'." (interactive (let ((file (dired-get-filename))) (list (and (or (memq 'patch dired-no-confirm) (y-or-n-p (format "Patch %s? " (file-name-nondirectory file)))) file)))) (if file (ediff-patch-file file) (message "No file patched."))) ;;; Autoloads ;;; Diff (diff) (autoload 'diff "diff" "Diff two files." t) (autoload 'diff-backup "diff" "Diff this file with its backup or vice versa." t) ;;; Emerge (autoload 'emerge-files "emerge" "Merge two files." t) (autoload 'emerge-files-with-ancestor "emerge" "Merge two files having a common ancestor." t) (autoload 'emerge-read-file-name "emerge") ;; Ediff (autoload 'ediff-files "ediff" "Ediff two files." t) (autoload 'ediff-patch-file "ediff" "Patch a file." t) ;;; end of dired-diff.el