Mercurial > emacs
changeset 53914:0ceb9e9ae2b0
(diff-switches): New fun.
(diff, diff-backup): Use it.
(diff): Clean up the args construction. Use backquote.
Use listp instead of consp to avoid putting a nil arg.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 10 Feb 2004 21:34:54 +0000 |
parents | e83b3b3941cf |
children | 8f2eb0390cdc |
files | lisp/diff.el |
diffstat | 1 files changed, 44 insertions(+), 51 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/diff.el Tue Feb 10 17:27:26 2004 +0000 +++ b/lisp/diff.el Tue Feb 10 21:34:54 2004 +0000 @@ -1,6 +1,6 @@ ;;; diff.el --- run `diff' in compilation-mode -;; Copyright (C) 1992, 1994, 1996, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1992, 1994, 1996, 2001, 2004 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: unix, tools @@ -185,39 +185,39 @@ (t (cons msg code)))))) +;; prompt if prefix arg present +(defun diff-switches () + (if current-prefix-arg + (read-string "Diff switches: " + (if (stringp diff-switches) + diff-switches + (mapconcat 'identity diff-switches " "))))) + ;;;###autoload (defun diff (old new &optional switches no-async) "Find and display the differences between OLD and NEW files. Interactively the current buffer's file name is the default for NEW and a backup file for NEW is the default for OLD. -With prefix arg, prompt for diff switches. -If NO-ASYNC is non-nil, call diff synchronously." +If NO-ASYNC is non-nil, call diff synchronously. +With prefix arg, prompt for diff switches." (interactive - (nconc - (let (oldf newf) - (nreverse - (list - (setq newf (buffer-file-name) - newf (if (and newf (file-exists-p newf)) - (read-file-name - (concat "Diff new file: (default " - (file-name-nondirectory newf) ") ") - nil newf t) - (read-file-name "Diff new file: " nil nil t))) - (setq oldf (file-newest-backup newf) - oldf (if (and oldf (file-exists-p oldf)) - (read-file-name - (concat "Diff original file: (default " - (file-name-nondirectory oldf) ") ") - (file-name-directory oldf) oldf t) - (read-file-name "Diff original file: " - (file-name-directory newf) nil t)))))) - (if current-prefix-arg - (list (read-string "Diff switches: " - (if (stringp diff-switches) - diff-switches - (mapconcat 'identity diff-switches " ")))) - nil))) + (let (oldf newf) + (setq newf (buffer-file-name) + newf (if (and newf (file-exists-p newf)) + (read-file-name + (concat "Diff new file: (default " + (file-name-nondirectory newf) ") ") + nil newf t) + (read-file-name "Diff new file: " nil nil t))) + (setq oldf (file-newest-backup newf) + oldf (if (and oldf (file-exists-p oldf)) + (read-file-name + (concat "Diff original file: (default " + (file-name-nondirectory oldf) ") ") + (file-name-directory oldf) oldf t) + (read-file-name "Diff original file: " + (file-name-directory newf) nil t))) + (list oldf newf (diff-switches)))) (setq new (expand-file-name new) old (expand-file-name old)) (let ((old-alt (file-local-copy old)) @@ -227,21 +227,19 @@ (let ((compilation-process-setup-function 'diff-process-setup) (command (mapconcat 'identity - (append (list diff-command) - ;; Use explicitly specified switches - (if switches - (if (consp switches) - switches (list switches)) - ;; If not specified, use default. - (if (consp diff-switches) - diff-switches - (list diff-switches))) - (if (or old-alt new-alt) - (list "-L" old "-L" new)) - (list - (shell-quote-argument (or old-alt old))) - (list - (shell-quote-argument (or new-alt new)))) + `(,diff-command + ;; Use explicitly specified switches + ,@(if switches + (if (listp switches) + switches (list switches)) + ;; If not specified, use default. + (if (listp diff-switches) + diff-switches + (list diff-switches))) + ,@(if (or old-alt new-alt) + (list "-L" old "-L" new)) + ,(shell-quote-argument (or old-alt old)) + ,(shell-quote-argument (or new-alt new))) " "))) (setq buf (compile-internal command @@ -270,15 +268,10 @@ "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'." +The backup file is the first file given to `diff'. +With prefix arg, prompt for diff switches." (interactive (list (read-file-name "Diff (file with backup): ") - (if current-prefix-arg - (read-string "Diff switches: " - (if (stringp diff-switches) - diff-switches - (mapconcat 'identity - diff-switches " "))) - nil))) + (diff-switches))) (let (bak ori) (if (backup-file-name-p file) (setq bak file