# HG changeset patch # User Stefan Monnier # Date 1076448894 0 # Node ID 0ceb9e9ae2b0354792c8bd2fb8476440527d19fc # Parent e83b3b3941cf86d989f385d1f936f00f2b97f3a3 (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. diff -r e83b3b3941cf -r 0ceb9e9ae2b0 lisp/diff.el --- 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