;;; ediff-diff.el --- diff-related utilities
-;; Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02 Free Software Foundation, Inc.
-;; Author: Michael Kifer <kifer@cs.sunysb.edu>
+;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
;; This file is part of GNU Emacs.
;; compiler pacifier
(defvar ediff-default-variant)
+(defvar null-device)
(eval-when-compile
(let ((load-path (cons (expand-file-name ".") load-path)))
;; The following functions needed for setting diff/diff3 options
;; test if diff supports the --binary option
(defsubst ediff-test-utility (diff-util option &optional files)
- (zerop (apply 'call-process
- (append (list diff-util nil nil nil option) files))))
+ (eq 0 (apply 'call-process
+ (append (list diff-util nil nil nil option) files))))
(defun ediff-diff-mandatory-option (diff-util)
(let ((file (if (boundp 'null-device) null-device "/dev/null")))
;; make sure that mandatory options are added even if the user changes
;; ediff-diff-options or ediff-diff3-options in the customization widget
(defun ediff-reset-diff-options (symb val)
- (let* ((diff-program
- (if (eq symb 'ediff-diff-options)
+ (let* ((diff-program
+ (if (eq symb 'ediff-diff-options)
ediff-diff-program
ediff-diff3-program))
(mandatory-option (ediff-diff-mandatory-option diff-program))
(spacer (if (string-equal mandatory-option "") "" " ")))
- (set symb
+ (set symb
(if (string-match mandatory-option val)
val
(concat mandatory-option spacer val)))
shell-file-name) ; no standard name on MS-DOS
((memq system-type '(vax-vms axp-vms)) "*dcl*") ; VMS
(t "sh")) ; UNIX
- "*The shell used to run diff and patch. If user's .profile or
-.cshrc files are set up correctly, any shell will do. However, some people
-set $prompt or other things incorrectly, which leads to undesirable output
-messages. These may cause Ediff to fail. In such a case, set ediff-shell
-to a shell that you are not using or, better, fix your shell's startup file."
+ "*The shell used to run diff and patch.
+If user's .profile or .cshrc files are set up correctly, any shell
+will do. However, some people set $prompt or other things
+incorrectly, which leads to undesirable output messages. These may
+cause Ediff to fail. In such a case, set `ediff-shell' to a shell that
+you are not using or, better, fix your shell's startup file."
:type 'string
:group 'ediff-diff)
:group 'ediff-diff)
(defcustom ediff-cmp-options nil
- "*Options to pass to `ediff-cmp-program'. If GNU diff is used as
-`ediff-cmp-program', then the most useful options are `-I' RE, to
-ignore changes whose lines all match RE."
+ "*Options to pass to `ediff-cmp-program'.
+If GNU diff is used as `ediff-cmp-program', then the most useful options
+are `-I REGEXP', to ignore changes whose lines match the REGEXP."
:type '(repeat string)
:group 'ediff-diff)
(defcustom ediff-diff-options ""
- "*Options to pass to `ediff-diff-program'.
-If diff\(1\) is used as `ediff-diff-program', then the most useful options are
+ "*Options to pass to `ediff-diff-program'.
+If Unix diff is used as `ediff-diff-program', then the most useful options are
`-w', to ignore space, and `-i', to ignore case of letters.
At present, the option `-c' is not allowed."
:set 'ediff-reset-diff-options
(defvar ediff-match-diff3-line "^====\\(.?\\)\C-m?$"
"Pattern to match lines produced by diff3 that describe differences.")
-(defcustom ediff-diff3-options ""
+(defcustom ediff-diff3-options ""
"*Options to pass to `ediff-diff3-program'."
:set 'ediff-reset-diff-options
:type 'string
;; the status can be =diff(A), =diff(B), or =diff(A+B)
(ediff-defvar-local ediff-diff-status "" "")
-
-;;; Fine differences
+
+;;; Fine differences
(ediff-defvar-local ediff-auto-refine (if (ediff-has-face-support-p) 'on 'nix)
"If `on', Ediff auto-highlights fine diffs for the current diff region.
(ediff-defvar-local ediff-auto-refine-limit 1400
"*Auto-refine only the regions of this size \(in bytes\) or less.")
-
+
;;; General
-(defvar ediff-diff-ok-lines-regexp
+(defvar ediff-diff-ok-lines-regexp
(concat
"^\\("
"[0-9,]+[acd][0-9,]+\C-m?$"
file-C. It may ignore file C for diff2 jobs. It should also take
one optional arguments, diff-number to refine.")
-
+
;;; Functions
;; Generate the difference vector and overlays for the two files
;; ediff-setup-diff-regions-function, which can also have the value
;; ediff-setup-diff-regions3, which takes 4 arguments.
(defun ediff-setup-diff-regions (file-A file-B file-C)
- (if (string-match "c" ediff-diff-options)
+ ;; looking either for '-c' or a 'c' in a set of clustered non-long options
+ (if (string-match "^-c\\| -c\\|-[^- ]+c" ediff-diff-options)
(error "Option `-c' is not allowed in `ediff-diff-options'"))
-
+
;; create, if it doesn't exist
(or (ediff-buffer-live-p ediff-diff-buffer)
(setq ediff-diff-buffer
(message "")
(ediff-with-current-buffer diff-buffer
(buffer-size))))))
-
-
+
+
;; If file-A/B/C is nil, do 2-way comparison with the non-nil buffers
;; This function works for diff3 and diff2 jobs
(defun ediff-setup-fine-diff-regions (file-A file-B file-C reg-num)
(setq ediff-fine-diff-buffer
(get-buffer-create
(ediff-unique-buffer-name "*ediff-fine-diff" "*"))))
-
+
(let (diff3-job diff-program diff-options ok-regexp diff-list)
(setq diff3-job ediff-3way-job
diff-program (if diff3-job ediff-diff3-program ediff-diff-program)
ok-regexp (if diff3-job
ediff-diff3-ok-lines-regexp
ediff-diff-ok-lines-regexp))
-
+
(ediff-message-if-verbose "Refining difference region %d ..." (1+ reg-num))
(ediff-exec-process diff-program ediff-fine-diff-buffer 'synchronize
diff-options
(if diff3-job
(if file-C file-C file-B))
) ; exec process
-
+
(ediff-prepare-error-list ok-regexp ediff-fine-diff-buffer)
(ediff-message-if-verbose
"")
;; "Refining difference region %d ... done" (1+ reg-num))
-
+
(setq diff-list
(if diff3-job
(ediff-extract-diffs3
(aset elt 5 nil))
(cdr diff-list)))
))
-
+
(ediff-convert-fine-diffs-to-overlays diff-list reg-num)
))
-
-
+
+
(defun ediff-prepare-error-list (ok-regexp diff-buff)
(or (ediff-buffer-live-p ediff-error-buffer)
(setq ediff-error-buffer
(ediff-skip-unsuitable-frames)
(switch-to-buffer error-buf)
(ediff-kill-buffer-carefully ctl-buf)
- (error "Errors in diff output. Diff output is in %S" diff-buff))))
+ (error "Errors in diff output. Diff output is in %S" diff-buff))))
;; BOUNDS specifies visibility bounds to use.
;; WORD-MODE tells whether we are in the word-mode or not.
(c-prev 1)
diff-list shift-A shift-B
)
-
+
;; diff list contains word numbers, unless changed later
(setq diff-list (cons (if word-mode 'words 'points)
diff-list))
(setq shift-A
(ediff-overlay-start
(ediff-get-value-according-to-buffer-type 'A bounds))
- shift-B
+ shift-B
(ediff-overlay-start
(ediff-get-value-according-to-buffer-type 'B bounds))))
-
+
;; reset point in buffers A/B/C
(ediff-with-current-buffer A-buffer
(goto-char (if shift-A shift-A (point-min))))
(if (ediff-buffer-live-p C-buffer)
(ediff-with-current-buffer C-buffer
(goto-char (point-min))))
-
+
(ediff-with-current-buffer diff-buffer
(goto-char (point-min))
(while (re-search-forward ediff-match-diff-line nil t)
;; (string-equal diff-type "c")
(setq a-end (1+ a-end)
b-end (1+ b-end))))
-
+
(if (eq ediff-default-variant 'default-B)
(setq c-begin b-begin
c-end b-end)
(setq c-begin a-begin
c-end a-end))
-
+
;; compute main diff vector
(if word-mode
;; make diff-list contain word numbers
- (setq diff-list
+ (setq diff-list
(nconc diff-list
(list
(if (ediff-buffer-live-p C-buffer)
(forward-line (- c-end c-begin))
(setq c-end-pt (point)
c-prev c-end)))
- (setq diff-list
+ (setq diff-list
(nconc
diff-list
(list
nil nil ; dummy ancestor
nil nil ; dummy state of diff & merge
nil ; dummy state of ancestor
- )))
+ )))
)))
-
+
))) ; end ediff-with-current-buffer
diff-list
))
-
+
(defun ediff-convert-diffs-to-overlays (diff-list)
(ediff-set-diff-overlays-in-one-buffer 'A diff-list)
)))
(message "Processing difference regions ... done"))
-
+
(defun ediff-set-diff-overlays-in-one-buffer (buf-type diff-list)
(let* ((current-diff -1)
(buff (ediff-get-buffer buf-type))
(ediff-get-value-according-to-buffer-type
buf-type ediff-narrow-bounds)))
(limit (ediff-overlay-end
- (ediff-get-value-according-to-buffer-type
+ (ediff-get-value-according-to-buffer-type
buf-type ediff-narrow-bounds)))
diff-overlay-list list-element total-diffs
begin end pt-saved overlay state-of-diff)
(setq diff-list (cdr diff-list)) ; discard diff list type
(setq total-diffs (length diff-list))
-
+
;; shift, if necessary
(ediff-with-current-buffer buff (setq pt-saved shift))
-
+
(while diff-list
(setq current-diff (1+ current-diff)
list-element (car diff-list)
(t 7))) ; Ancestor
state-of-diff (aref list-element 8)
)
-
+
(cond ((and (not (eq buf-type state-of-diff))
(not (eq buf-type 'Ancestor))
(memq state-of-diff '(A B C)))
(setq state-of-diff (format "=diff(%S)" state-of-diff))
)
(t (setq state-of-diff nil)))
-
+
;; Put overlays at appropriate places in buffer
;; convert word numbers to points, if necessary
(if (eq diff-list-type 'words)
(if (> begin end) (setq begin end))
(setq pt-saved (ediff-with-current-buffer buff (point)))))
(setq overlay (ediff-make-bullet-proof-overlay begin end buff))
-
+
(ediff-overlay-put overlay 'priority ediff-shadow-overlay-priority)
(ediff-overlay-put overlay 'ediff-diff-num current-diff)
(if (and (ediff-has-face-support-p)
diff-list
(cdr diff-list))
) ; while
-
+
(set (ediff-get-symbol-from-alist buf-type ediff-difference-vector-alist)
(vconcat diff-overlay-list))
))
;; if `flag' is 'noforce then make fine-diffs only if this region's fine
;; diffs have not been computed before.
;; if `flag' is 'skip then don't compute fine diffs for this region.
-(defun ediff-make-fine-diffs (&optional n flag)
+(defun ediff-make-fine-diffs (&optional n flag)
(or n (setq n ediff-current-difference))
-
+
(if (< ediff-number-of-differences 1)
(error ediff-NO-DIFFERENCES))
-
+
(if ediff-word-mode
(setq flag 'skip
ediff-auto-refine 'nix))
-
+
(or (< n 0)
(>= n ediff-number-of-differences)
;; n is within the range
(whitespace-B (ediff-whitespace-diff-region-p n 'B))
(whitespace-C (ediff-whitespace-diff-region-p n 'C))
cumulative-fine-diff-length)
-
+
(cond ;; If one of the regions is empty (or 2 in 3way comparison)
;; then don't refine.
;; If the region happens to be entirely whitespace or empty then
(if ediff-3way-comparison-job
(ediff-message-if-verbose
"Region %d is empty in all buffers but %S"
- (1+ n)
+ (1+ n)
(cond ((not empty-A) 'A)
((not empty-B) 'B)
((not empty-C) 'C)))
(ediff-message-if-verbose
"Region %d in buffer %S is empty"
- (1+ n)
+ (1+ n)
(cond (empty-A 'A)
(empty-B 'B)
(empty-C 'C)))
ediff-control-buffer)
(setq file-A
(ediff-make-temp-file tmp-buffer "fineDiffA" file-A))
-
+
(ediff-wordify
(ediff-get-diff-posn 'B 'beg n)
(ediff-get-diff-posn 'B 'end n)
ediff-control-buffer)
(setq file-B
(ediff-make-temp-file tmp-buffer "fineDiffB" file-B))
-
+
(if ediff-3way-job
(progn
(ediff-wordify
(setq file-C
(ediff-make-temp-file
tmp-buffer "fineDiffC" file-C))))
-
+
;; save temp file names.
(setq ediff-temp-file-A file-A
ediff-temp-file-B file-B
ediff-temp-file-C file-C)
-
+
;; set the new vector of fine diffs, if none exists
(cond ((and ediff-3way-job whitespace-A)
(ediff-setup-fine-diff-regions nil file-B file-C n))
(ediff-setup-fine-diff-regions file-A file-B nil n))
(t
(ediff-setup-fine-diff-regions file-A file-B file-C n)))
-
+
(setq cumulative-fine-diff-length
(+ (length (ediff-get-fine-diff-vector n 'A))
(length (ediff-get-fine-diff-vector n 'B))
(if (and file-C (not ediff-merge-job))
(length (ediff-get-fine-diff-vector n 'C))
0)))
-
+
(cond ((or
;; all regions are white space
(and whitespace-A whitespace-B whitespace-C)
"in buffers A & C")
(whitespace-C (ediff-mark-diff-as-space-only n 'C)
"in buffers A & B"))))
- (t
+ (t
(ediff-mark-diff-as-space-only n nil)))
)
) ; end cond
(ediff-set-fine-diff-properties n)
)))
-
+
;; Interface to ediff-make-fine-diffs. Checks for auto-refine limit, etc.
(defun ediff-install-fine-diff-if-necessary (n)
- (cond ((eq ediff-auto-refine 'on)
+ (cond ((and (eq ediff-auto-refine 'on)
+ ediff-use-faces
+ (not (eq ediff-highlighting-style 'off))
+ (not (eq ediff-highlighting-style 'ascii)))
(if (and
(> ediff-auto-refine-limit
(- (ediff-get-diff-posn 'A 'end n)
(ediff-get-diff-posn 'B 'beg n))))
(ediff-make-fine-diffs n 'noforce)
(ediff-make-fine-diffs n 'skip)))
-
+
;; highlight iff fine diffs already exist
((eq ediff-auto-refine 'off)
(ediff-make-fine-diffs n 'skip))))
-
-
+
+
;; if fine diff vector is not set for diff N, then do nothing
(defun ediff-set-fine-diff-properties (n &optional default)
(or (not (ediff-has-face-support-p))
(ediff-set-fine-diff-properties-in-one-buffer 'B n default)
(if ediff-3way-job
(ediff-set-fine-diff-properties-in-one-buffer 'C n default)))))
-
+
(defun ediff-set-fine-diff-properties-in-one-buffer (buf-type
n &optional default)
(let ((fine-diff-vector (ediff-get-fine-diff-vector n buf-type))
- (face (if default
+ (face (if default
'default
(face-name
(ediff-get-symbol-from-alist
(ediff-set-overlay-face overl face)
(ediff-overlay-put overl 'priority priority))
fine-diff-vector)))
-
+
;; Set overlays over the regions that denote delimiters
(defun ediff-set-fine-overlays-for-combined-merge (diff-list reg-num)
(let (overlay overlay-list)
(ediff-set-fine-diff-vector
reg-num 'C (apply 'vector overlay-list))
))
-
-
+
+
;; Convert diff list to overlays for a given DIFF-REGION
;; in buffer of type BUF-TYPE
(defun ediff-set-fine-overlays-in-one-buffer (buf-type diff-list region-num)
(ediff-clear-fine-differences-in-one-buffer region-num buf-type)
(setq diff-list (cdr diff-list)) ; discard list type (words or points)
(ediff-with-current-buffer buff (goto-char reg-start))
-
+
;; if it is a combined merge then set overlays in buff C specially
(if (and ediff-merge-job (eq buf-type 'C)
(setq combined-merge-diff-list
(setq overlay (ediff-make-bullet-proof-overlay begin end buff))
;; record all overlays for this difference region
(setq diff-overlay-list (nconc diff-overlay-list (list overlay))))
-
+
(setq diff-list (cdr diff-list))
) ; while
;; convert the list of difference information into a vector
;; for fast access
- (ediff-set-fine-diff-vector
+ (ediff-set-fine-diff-vector
region-num buf-type (vconcat diff-overlay-list))
)))
+(defsubst ediff-convert-fine-diffs-to-overlays (diff-list region-num)
+ (ediff-set-fine-overlays-in-one-buffer 'A diff-list region-num)
+ (ediff-set-fine-overlays-in-one-buffer 'B diff-list region-num)
+ (if ediff-3way-job
+ (ediff-set-fine-overlays-in-one-buffer 'C diff-list region-num)
+ ))
+
+
;; Stolen from emerge.el
(defun ediff-get-diff3-group (file)
;; This save-excursion allows ediff-get-diff3-group to be called for the
(anc-prev 1)
diff-list shift-A shift-B shift-C
)
-
+
;; diff list contains word numbers or points, depending on word-mode
(setq diff-list (cons (if word-mode 'words 'points)
diff-list))
(setq shift-A
(ediff-overlay-start
(ediff-get-value-according-to-buffer-type 'A bounds))
- shift-B
+ shift-B
(ediff-overlay-start
(ediff-get-value-according-to-buffer-type 'B bounds))
- shift-C
+ shift-C
(if three-way-comp
(ediff-overlay-start
(ediff-get-value-according-to-buffer-type 'C bounds)))))
-
+
;; reset point in buffers A, B, C
(ediff-with-current-buffer A-buffer
(goto-char (if shift-A shift-A (point-min))))
(if (ediff-buffer-live-p anc-buffer)
(ediff-with-current-buffer anc-buffer
(goto-char (point-min))))
-
+
(ediff-with-current-buffer diff-buffer
(goto-char (point-min))
(while (re-search-forward ediff-match-diff3-line nil t)
b-begin-pt b-end-pt
c-begin-pt c-end-pt
anc-begin-pt anc-end-pt)
-
+
(setq state-of-ancestor
(= c-or-anc-begin c-or-anc-end))
(t
(setq c-begin a-begin
c-end a-end)))
-
+
;; compute main diff vector
(if word-mode
;; make diff-list contain word numbers
- (setq diff-list
+ (setq diff-list
(nconc diff-list
(list (vector
(- a-begin a-prev) (- a-end a-begin)
(forward-line (- c-or-anc-end c-or-anc-begin))
(setq anc-end-pt (point)
anc-prev c-or-anc-end)))
- (setq diff-list
+ (setq diff-list
(nconc
diff-list
;; if comparing with ancestor, then there also is a
)))
)))
))
-
+
))) ; end ediff-with-current-buffer
diff-list
))
-
+
;; Generate the difference vector and overlays for three files
;; File-C is either the third file to compare (in case of 3-way comparison)
;; or it is the ancestor file.
(or (ediff-buffer-live-p ediff-diff-buffer)
(setq ediff-diff-buffer
(get-buffer-create (ediff-unique-buffer-name "*ediff-diff" "*"))))
-
+
(message "Computing differences ...")
(ediff-exec-process ediff-diff3-program ediff-diff-buffer 'synchronize
ediff-diff3-options file-A file-B file-C)
-
+
(ediff-prepare-error-list ediff-diff3-ok-lines-regexp ediff-diff-buffer)
;;(message "Computing differences ... done")
(ediff-convert-diffs-to-overlays
ediff-diff-buffer
ediff-word-mode ediff-3way-comparison-job ediff-narrow-bounds)
))
-
+
;; Execute PROGRAM asynchronously, unless OS/2, Windows-*, or DOS, or unless
;; SYNCH is non-nil. BUFFER must be a buffer object, and must be alive. The
(set-process-filter proc 'ediff-process-filter)
)))
(store-match-data data))))
-
+
;; This is shell-command-filter from simple.el in Emacs.
;; Copied here because XEmacs doesn't have it.
(defun ediff-process-filter (proc string)
(if opoint
(goto-char opoint))
(set-buffer obuf))))
-
+
;; like shell-command-sentinel but doesn't print an exit status message
;; we do this because diff always exits with status 1, if diffs are found
;; so shell-command-sentinel displays a confusing message to the user
(set-buffer (process-buffer process))
(setq mode-line-process nil))
(delete-process process))))
-
-;;; Word functions used to refine the current diff
+
+;;; Word functions used to refine the current diff
(defvar ediff-forward-word-function 'ediff-forward-word
"*Function to call to move to the next word.
Used for splitting difference regions into individual words.")
+(make-variable-buffer-local 'ediff-forward-word-function)
(defvar ediff-whitespace " \n\t\f"
"*Characters constituting white space.
These characters are ignored when differing regions are split into words.")
+(make-variable-buffer-local 'ediff-whitespace)
-(defvar ediff-word-1 "a-zA-Z---_"
+(defvar ediff-word-1
+ (ediff-cond-compile-for-xemacs-or-emacs "a-zA-Z---_" "-[:word:]_")
"*Characters that constitute words of type 1.
More precisely, [ediff-word-1] is a regexp that matches type 1 words.
-See `ediff-forward-word' for more details.")
+See `ediff-forward-word' for more details.")
+(make-variable-buffer-local 'ediff-word-1)
(defvar ediff-word-2 "0-9.,"
"*Characters that constitute words of type 2.
More precisely, [ediff-word-2] is a regexp that matches type 2 words.
See `ediff-forward-word' for more details.")
+(make-variable-buffer-local 'ediff-word-2)
(defvar ediff-word-3 "`'?!:;\"{}[]()"
"*Characters that constitute words of type 3.
More precisely, [ediff-word-3] is a regexp that matches type 3 words.
See `ediff-forward-word' for more details.")
+(make-variable-buffer-local 'ediff-word-3)
(defvar ediff-word-4
(concat "^" ediff-word-1 ediff-word-2 ediff-word-3 ediff-whitespace)
"*Characters that constitute words of type 4.
More precisely, [ediff-word-4] is a regexp that matches type 4 words.
-See `ediff-forward-word' for more details.")
+See `ediff-forward-word' for more details.")
+(make-variable-buffer-local 'ediff-word-4)
;; Split region along word boundaries. Each word will be on its own line.
;; Output to buffer out-buffer.
(defun ediff-wordify (beg end in-buffer out-buffer &optional control-buf)
- (let (inbuf-syntax-tbl sv-point diff-string)
+ (let ((forward-word-function
+ ;; eval in control buf to let user create local versions for
+ ;; different invocations
+ (if control-buf
+ (ediff-with-current-buffer control-buf
+ ediff-forward-word-function)
+ ediff-forward-word-function))
+ inbuf-syntax-tbl sv-point diff-string)
(save-excursion
(set-buffer in-buffer)
(setq inbuf-syntax-tbl
(setq diff-string (buffer-substring-no-properties beg end))
(set-buffer out-buffer)
- ;; Make sure that temp buff syntax table is the same a the original buf
+ ;; Make sure that temp buff syntax table is the same as the original buf
;; syntax tbl, because we use ediff-forward-word in both and
;; ediff-forward-word depends on the syntax classes of characters.
(set-syntax-table inbuf-syntax-tbl)
(goto-char (point-min))
(skip-chars-forward ediff-whitespace)
(delete-region (point-min) (point))
-
+
(while (not (eobp))
- ;; eval in control buf to let user create local versions for
- ;; different invocations
- (if control-buf
- (funcall
- (ediff-with-current-buffer control-buf
- ediff-forward-word-function))
- (funcall ediff-forward-word-function))
+ (funcall forward-word-function)
(setq sv-point (point))
(skip-chars-forward ediff-whitespace)
(delete-region sv-point (point))
(insert "\n")))))
-
-;; copy string from BEG END from IN-BUF to OUT-BUF
-(defun ediff-copy-to-buffer (beg end in-buffer out-buffer)
- (let (string)
- (save-excursion
- (set-buffer in-buffer)
- (setq string (buffer-substring beg end))
- (set-buffer out-buffer)
- (erase-buffer)
- (insert string)
- (goto-char (point-min)))))
+;; copy string specified as BEG END from IN-BUF to OUT-BUF
+(defun ediff-copy-to-buffer (beg end in-buffer out-buffer)
+ (with-current-buffer out-buffer
+ (erase-buffer)
+ (insert-buffer-substring in-buffer beg end)
+ (goto-char (point-min))))
;; goto word #n starting at current position in buffer `buf'
(syntax-tbl ediff-syntax-table))
(ediff-with-current-buffer buf
(skip-chars-forward ediff-whitespace)
- (while (> n 1)
- (ediff-with-syntax-table syntax-tbl
- (funcall fwd-word-fun))
- (skip-chars-forward ediff-whitespace)
- (setq n (1- n)))
+ (ediff-with-syntax-table syntax-tbl
+ (while (> n 1)
+ (funcall fwd-word-fun)
+ (skip-chars-forward ediff-whitespace)
+ (setq n (1- n))))
(if (and flag (> n 0))
(funcall fwd-word-fun))
(point))))
(defun ediff-same-file-contents (f1 f2)
- "T if F1 and F2 have identical contents."
- (let ((res
+ "Return t if F1 and F2 have identical contents."
+ (let ((res
(apply 'call-process ediff-cmp-program nil nil nil
(append ediff-cmp-options (list f1 f2)))))
(and (numberp res) (eq res 0))))
;;; End:
+;;; arch-tag: a86d448e-58d7-4572-a1d9-fdedfa22f648
;;; ediff-diff.el ends here