• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/emacs-93/emacs/lisp/

Lines Matching +refs:ediff +refs:get +refs:buffer

0 ;;; ediff-init.el --- Macros, variables, and defsubsts used by Ediff
30 (defvar ediff-metajob-name)
31 (defvar ediff-meta-buffer)
33 (defvar ediff-grab-mouse)
34 (defvar ediff-mouse-pixel-position)
35 (defvar ediff-mouse-pixel-threshold)
36 (defvar ediff-whitespace)
37 (defvar ediff-multiframe)
38 (defvar ediff-use-toolbar-p)
47 (defconst ediff-xemacs-p (featurep 'xemacs))
49 (defconst ediff-emacs-p (not ediff-xemacs-p))
56 (defmacro ediff-cond-compile-for-xemacs-or-emacs (xemacs-form emacs-form)
60 (defvar ediff-force-faces nil
66 (defsubst ediff-device-type ()
67 (ediff-cond-compile-for-xemacs-or-emacs
73 (defun ediff-window-display-p ()
74 (and (ediff-device-type) (not (memq (ediff-device-type) '(tty pc stream)))))
77 (defun ediff-has-face-support-p ()
78 (cond ((ediff-window-display-p))
79 (ediff-force-faces)
80 ((ediff-color-display-p))
81 (ediff-emacs-p (memq (ediff-device-type) '(pc)))
82 (ediff-xemacs-p (memq (ediff-device-type) '(tty pc)))
85 ;; toolbar support for emacs hasn't been implemented in ediff
86 (defun ediff-has-toolbar-support-p ()
87 (ediff-cond-compile-for-xemacs-or-emacs
93 (defun ediff-has-gutter-support-p ()
94 (ediff-cond-compile-for-xemacs-or-emacs
100 (defun ediff-use-toolbar-p ()
101 (and (ediff-has-toolbar-support-p) ;Can it do it ?
102 (boundp 'ediff-use-toolbar-p)
103 ediff-use-toolbar-p)) ;Does the user want it ?
106 ;; Performs a defvar, then executes `make-variable-buffer-local' on
112 (defmacro ediff-defvar-local (var value doc)
115 (make-variable-buffer-local ',var)
120 ;; Variables that control each Ediff session---local to the control buffer.
123 ;; The buffer in which the A variant is stored.
124 (ediff-defvar-local ediff-buffer-A nil "")
125 ;; The buffer in which the B variant is stored.
126 (ediff-defvar-local ediff-buffer-B nil "")
127 ;; The buffer in which the C variant is stored or where the merge buffer lives.
128 (ediff-defvar-local ediff-buffer-C nil "")
129 ;; Ancestor buffer
130 (ediff-defvar-local ediff-ancestor-buffer nil "")
131 ;; The Ediff control buffer
132 (ediff-defvar-local ediff-control-buffer nil "")
134 (ediff-defvar-local ediff-temp-indirect-buffer nil
135 "If t, the buffer is a temporary indirect buffer.
139 ;; Association between buff-type and ediff-buffer-*
140 (defconst ediff-buffer-alist
141 '((?A . ediff-buffer-A)
142 (?B . ediff-buffer-B)
143 (?C . ediff-buffer-C)))
146 (defmacro ediff-odd-p (arg)
149 (defmacro ediff-buffer-live-p (buf)
150 `(and ,buf (get-buffer ,buf) (buffer-name (get-buffer ,buf))))
152 (defmacro ediff-get-buffer (arg)
153 `(cond ((eq ,arg 'A) ediff-buffer-A)
154 ((eq ,arg 'B) ediff-buffer-B)
155 ((eq ,arg 'C) ediff-buffer-C)
156 ((eq ,arg 'Ancestor) ediff-ancestor-buffer)
159 (defmacro ediff-get-value-according-to-buffer-type (buf-type list)
165 (defmacro ediff-char-to-buftype (arg)
173 ;; where the first part of any association is a buffer type and the second is
174 ;; an appropriate symbol. Given buffer-type, this function returns the
176 (defsubst ediff-get-symbol-from-alist (buf-type alist)
179 (defconst ediff-difference-vector-alist
180 '((A . ediff-difference-vector-A)
181 (B . ediff-difference-vector-B)
182 (C . ediff-difference-vector-C)
183 (Ancestor . ediff-difference-vector-Ancestor)))
185 (defmacro ediff-get-difference (n buf-type)
188 (ediff-get-symbol-from-alist
189 ,buf-type ediff-difference-vector-alist))
211 ;; state-of-difference is A, B, C, or nil, indicating which buffer is
213 (defmacro ediff-no-fine-diffs-p (n)
214 `(aref (ediff-get-difference ,n 'A) 2))
216 (defmacro ediff-get-diff-overlay-from-diff-record (diff-rec)
219 (defmacro ediff-get-diff-overlay (n buf-type)
220 `(ediff-get-diff-overlay-from-diff-record
221 (ediff-get-difference ,n ,buf-type)))
223 (defmacro ediff-get-fine-diff-vector-from-diff-record (diff-rec)
226 (defmacro ediff-set-fine-diff-vector (n buf-type fine-vec)
227 `(aset (ediff-get-difference ,n ,buf-type) 1 ,fine-vec))
229 (defmacro ediff-get-state-of-diff (n buf-type)
230 `(if (ediff-buffer-live-p ediff-buffer-C)
231 (aref (ediff-get-difference ,n ,buf-type) 3)))
232 (defmacro ediff-set-state-of-diff (n buf-type val)
233 `(aset (ediff-get-difference ,n ,buf-type) 3 ,val))
235 (defmacro ediff-get-state-of-merge (n)
236 `(if ediff-state-of-merge
237 (aref (aref ediff-state-of-merge ,n) 0)))
238 (defmacro ediff-set-state-of-merge (n val)
239 `(if ediff-state-of-merge
240 (aset (aref ediff-state-of-merge ,n) 0 ,val)))
242 (defmacro ediff-get-state-of-ancestor (n)
243 `(if ediff-state-of-merge
244 (aref (aref ediff-state-of-merge ,n) 1)))
250 (defmacro ediff-mark-diff-as-space-only (n flag)
251 `(aset (ediff-get-difference ,n 'A) 2 ,flag))
253 (defmacro ediff-get-fine-diff-vector (n buf-type)
254 `(ediff-get-fine-diff-vector-from-diff-record
255 (ediff-get-difference ,n ,buf-type)))
257 ;; Macro to switch to BUFFER, evaluate BODY, returns to original buffer.
259 ;; This is `with-current-buffer' with the added test for live buffers."
260 (defmacro ediff-with-current-buffer (buffer &rest body)
261 `(if (ediff-buffer-live-p ,buffer)
262 (save-current-buffer
263 (set-buffer ,buffer)
265 (or (eq this-command 'ediff-quit)
266 (error ediff-KILLED-VITAL-BUFFER))
270 (defsubst ediff-multiframe-setup-p ()
271 (and (ediff-window-display-p) ediff-multiframe))
273 (defmacro ediff-narrow-control-frame-p ()
274 `(and (ediff-multiframe-setup-p)
275 (equal ediff-help-message ediff-brief-message-string)))
277 (defmacro ediff-3way-comparison-job ()
279 ediff-job-name
280 '(ediff-files3 ediff-buffers3)))
281 (ediff-defvar-local ediff-3way-comparison-job nil "")
283 (defmacro ediff-merge-job ()
285 ediff-job-name
286 '(ediff-merge-files
287 ediff-merge-buffers
288 ediff-merge-files-with-ancestor
289 ediff-merge-buffers-with-ancestor
290 ediff-merge-revisions
291 ediff-merge-revisions-with-ancestor)))
292 (ediff-defvar-local ediff-merge-job nil "")
294 (defmacro ediff-patch-job ()
295 `(eq ediff-job-name 'epatch))
297 (defmacro ediff-merge-with-ancestor-job ()
299 ediff-job-name
300 '(ediff-merge-files-with-ancestor
301 ediff-merge-buffers-with-ancestor
302 ediff-merge-revisions-with-ancestor)))
303 (ediff-defvar-local ediff-merge-with-ancestor-job nil "")
305 (defmacro ediff-3way-job ()
306 `(or ediff-3way-comparison-job ediff-merge-job))
307 (ediff-defvar-local ediff-3way-job nil "")
309 ;; A diff3 job is like a 3way job, but ediff-merge doesn't require the use
311 (defmacro ediff-diff3-job ()
312 `(or ediff-3way-comparison-job
313 ediff-merge-with-ancestor-job))
314 (ediff-defvar-local ediff-diff3-job nil "")
316 (defmacro ediff-windows-job ()
317 `(memq ediff-job-name '(ediff-windows-wordwise ediff-windows-linewise)))
318 (ediff-defvar-local ediff-windows-job nil "")
320 (defmacro ediff-word-mode-job ()
321 `(memq ediff-job-name '(ediff-windows-wordwise ediff-regions-wordwise)))
322 (ediff-defvar-local ediff-word-mode-job nil "")
324 (defmacro ediff-narrow-job ()
325 `(memq ediff-job-name '(ediff-windows-wordwise
326 ediff-regions-wordwise
327 ediff-windows-linewise
328 ediff-regions-linewise)))
329 (ediff-defvar-local ediff-narrow-job nil "")
331 ;; Note: ediff-merge-directory-revisions-with-ancestor is not treated as an
333 (defsubst ediff-ancestor-metajob (&optional metajob)
334 (memq (or metajob ediff-metajob-name)
335 '(ediff-merge-directories-with-ancestor
336 ediff-merge-filegroups-with-ancestor)))
337 (defsubst ediff-revision-metajob (&optional metajob)
338 (memq (or metajob ediff-metajob-name)
339 '(ediff-directory-revisions
340 ediff-merge-directory-revisions
341 ediff-merge-directory-revisions-with-ancestor)))
342 (defsubst ediff-patch-metajob (&optional metajob)
343 (memq (or metajob ediff-metajob-name)
344 '(ediff-multifile-patch)))
347 (defsubst ediff-one-filegroup-metajob (&optional metajob)
348 (or (ediff-revision-metajob metajob)
349 (ediff-patch-metajob metajob)
353 (defsubst ediff-collect-diffs-metajob (&optional metajob)
354 (memq (or metajob ediff-metajob-name)
355 '(ediff-directories
356 ediff-merge-directories
357 ediff-merge-directories-with-ancestor
358 ediff-directory-revisions
359 ediff-merge-directory-revisions
360 ediff-merge-directory-revisions-with-ancestor
363 (defsubst ediff-merge-metajob (&optional metajob)
364 (memq (or metajob ediff-metajob-name)
365 '(ediff-merge-directories
366 ediff-merge-directories-with-ancestor
367 ediff-merge-directory-revisions
368 ediff-merge-directory-revisions-with-ancestor
369 ediff-merge-filegroups-with-ancestor
373 (defsubst ediff-metajob3 (&optional metajob)
374 (memq (or metajob ediff-metajob-name)
375 '(ediff-merge-directories-with-ancestor
376 ediff-merge-filegroups-with-ancestor
377 ediff-directories3
378 ediff-filegroups3)))
379 (defsubst ediff-comparison-metajob3 (&optional metajob)
380 (memq (or metajob ediff-metajob-name)
381 '(ediff-directories3 ediff-filegroups3)))
383 ;; with no argument, checks if we are in ediff-control-buffer
384 ;; with argument, checks if we are in ediff-meta-buffer
385 (defun ediff-in-control-buffer-p (&optional meta-buf-p)
386 (and (boundp 'ediff-control-buffer)
387 (eq (if meta-buf-p ediff-meta-buffer ediff-control-buffer)
388 (current-buffer))))
390 (defsubst ediff-barf-if-not-control-buffer (&optional meta-buf-p)
391 (or (ediff-in-control-buffer-p meta-buf-p)
395 (defgroup ediff-highlighting nil
397 :prefix "ediff-"
398 :group 'ediff)
400 (defgroup ediff-merge nil
402 :prefix "ediff-"
403 :group 'ediff)
405 (defgroup ediff-hook nil
407 :prefix "ediff-"
408 :group 'ediff)
412 (defcustom ediff-before-setup-hook nil
415 on ediff-quit or ediff-suspend."
417 :group 'ediff-hook)
418 (defcustom ediff-before-setup-windows-hook nil
424 :group 'ediff-hook)
425 (defcustom ediff-after-setup-windows-hook nil
429 :group 'ediff-hook)
430 (defcustom ediff-before-setup-control-frame-hook nil
435 :group 'ediff-hook)
436 (defcustom ediff-after-setup-control-frame-hook nil
440 :group 'ediff-hook)
441 (defcustom ediff-startup-hook nil
442 "*Hooks to run in the control buffer after Ediff has been set up and is ready for the job."
444 :group 'ediff-hook)
445 (defcustom ediff-select-hook nil
448 :group 'ediff-hook)
449 (defcustom ediff-unselect-hook nil
452 :group 'ediff-hook)
453 (defcustom ediff-prepare-buffer-hook nil
455 For each buffer, the hooks are run with that buffer made current."
457 :group 'ediff-hook)
458 (defcustom ediff-load-hook nil
461 :group 'ediff-hook)
463 (defcustom ediff-mode-hook nil
464 "*Hook run just after ediff-mode is set up in the control buffer.
468 :group 'ediff-hook)
469 (defcustom ediff-keymap-setup-hook nil
472 :group 'ediff-hook)
474 (defcustom ediff-display-help-hook nil
477 :group 'ediff-hook)
479 (defcustom ediff-suspend-hook nil
480 "*Hooks to run in the Ediff control buffer when Ediff is suspended."
482 :group 'ediff-hook)
483 (defcustom ediff-quit-hook nil
484 "*Hooks to run in the Ediff control buffer after finishing Ediff."
486 :group 'ediff-hook)
487 (defcustom ediff-cleanup-hook nil
490 :group 'ediff-hook)
493 (defconst ediff-KILLED-VITAL-BUFFER
494 "You have killed a vital Ediff buffer---you must leave Ediff now!")
495 (defconst ediff-NO-DIFFERENCES
497 (defconst ediff-BAD-DIFF-NUMBER
500 (defconst ediff-BAD-INFO (format "
505 (if ediff-xemacs-p "X" "")))
509 (ediff-defvar-local ediff-skip-diff-region-function 'ediff-show-all-diffs
516 (ediff-defvar-local ediff-hide-regexp-matches-function
517 'ediff-hide-regexp-matches
519 See the documentation string of `ediff-hide-regexp-matches' for details.")
520 (ediff-defvar-local ediff-focus-on-regexp-matches-function
521 'ediff-focus-on-regexp-matches
523 See the documentation string of `ediff-focus-on-regexp-matches' for details.")
526 (ediff-defvar-local ediff-regexp-focus-A "" "")
528 (ediff-defvar-local ediff-regexp-focus-B "" "")
530 (ediff-defvar-local ediff-regexp-focus-C "" "")
533 (ediff-defvar-local ediff-focus-regexp-connective 'and "")
536 (ediff-defvar-local ediff-regexp-hide-A "" "")
538 (ediff-defvar-local ediff-regexp-hide-B "" "")
540 (ediff-defvar-local ediff-regexp-hide-C "" "")
543 (ediff-defvar-local ediff-hide-regexp-connective 'and "")
550 ;; from another buffer. This alist has the form:
552 ;; where some buffer-objects may be missing.
553 (ediff-defvar-local ediff-killed-diffs-alist nil "")
555 ;; Syntax table to use in ediff-forward-word-function
558 (ediff-defvar-local ediff-syntax-table nil "")
562 (defcustom ediff-before-flag-bol (if (featurep 'xemacs) (make-glyph "->>") "->>")
566 :group 'ediff)
568 (defcustom ediff-after-flag-eol (if (featurep 'xemacs) (make-glyph "<<-") "<<-")
572 :group 'ediff)
574 (defcustom ediff-before-flag-mol (if (featurep 'xemacs) (make-glyph "->>") "->>")
578 :group 'ediff)
579 (defcustom ediff-after-flag-mol (if (featurep 'xemacs) (make-glyph "<<-") "<<-")
583 :group 'ediff)
586 (ediff-defvar-local ediff-use-faces t "")
587 (defcustom ediff-use-faces t
589 If nil, differences are highlighted using ASCII flags, ediff-before-flag
590 and ediff-after-flag. On a non-window system, differences are always
593 :group 'ediff-highlighting)
596 ;; permanently nixed; used in ediff-windows-wordwise and ediff-regions-wordwise
597 (ediff-defvar-local ediff-word-mode nil "")
598 ;; Name of the job (ediff-files, ediff-windows, etc.)
599 (ediff-defvar-local ediff-job-name nil "")
601 ;; Narrowing and ediff-region/windows support
605 (ediff-defvar-local ediff-narrow-bounds nil "")
608 ;; entire corresponding buffer.
609 (ediff-defvar-local ediff-wide-bounds nil "")
613 ;; this list changes from ediff-wide-bounds to ediff-narrow-bounds.
615 (ediff-defvar-local ediff-visible-bounds nil "")
617 (ediff-defvar-local ediff-start-narrowed t
618 "Non-nil means start narrowed, if doing ediff-windows-* or ediff-regions-*")
619 (ediff-defvar-local ediff-quit-widened t
623 (defcustom ediff-keep-variants t
628 :group 'ediff)
630 (ediff-defvar-local ediff-highlight-all-diffs t "")
631 (defcustom ediff-highlight-all-diffs t
636 :group 'ediff-highlighting)
639 ;; The suffix of the control buffer name.
640 (ediff-defvar-local ediff-control-buffer-suffix nil "")
641 ;; Same as ediff-control-buffer-suffix, but without <,>.
643 (ediff-defvar-local ediff-control-buffer-number nil "")
646 ;; The original values of ediff-protected-variables for buffer A
647 (ediff-defvar-local ediff-buffer-values-orig-A nil "")
648 ;; The original values of ediff-protected-variables for buffer B
649 (ediff-defvar-local ediff-buffer-values-orig-B nil "")
650 ;; The original values of ediff-protected-variables for buffer C
651 (ediff-defvar-local ediff-buffer-values-orig-C nil "")
652 ;; The original values of ediff-protected-variables for buffer Ancestor
653 (ediff-defvar-local ediff-buffer-values-orig-Ancestor nil "")
655 ;; association between buff-type and ediff-buffer-values-orig-*
656 (defconst ediff-buffer-values-orig-alist
657 '((A . ediff-buffer-values-orig-A)
658 (B . ediff-buffer-values-orig-B)
659 (C . ediff-buffer-values-orig-C)
660 (Ancestor . ediff-buffer-values-orig-Ancestor)))
663 (defconst ediff-protected-variables '(
664 ;;buffer-read-only
670 ;; difference region in the A buffer and the second overlays the diff in
671 ;; the B buffer. If a difference section is empty, the corresponding
674 ;; The precise form of a Difference Vector for one buffer is:
680 ;; state-of-difference is A, B, C, or nil, indicating which buffer is
682 (ediff-defvar-local ediff-difference-vector-A nil "")
683 (ediff-defvar-local ediff-difference-vector-B nil "")
684 (ediff-defvar-local ediff-difference-vector-C nil "")
685 (ediff-defvar-local ediff-difference-vector-Ancestor nil "")
686 ;; A-list of diff vector types associated with buffer types
687 (defconst ediff-difference-vector-alist
688 '((A . ediff-difference-vector-A)
689 (B . ediff-difference-vector-B)
690 (C . ediff-difference-vector-C)
691 (Ancestor . ediff-difference-vector-Ancestor)))
696 ;; indicates the way a diff region was created in buffer C.
697 ;; state-of-ancestor says if the corresponding region in ancestor buffer is
699 (ediff-defvar-local ediff-state-of-merge nil "")
702 (ediff-defvar-local ediff-current-difference -1 "")
704 (ediff-defvar-local ediff-number-of-differences nil "")
708 (ediff-defvar-local ediff-diff-buffer nil "")
709 ;; Like ediff-diff-buffer, but contains context diff. It is not used by
711 (ediff-defvar-local ediff-custom-diff-buffer nil "")
713 (ediff-defvar-local ediff-fine-diff-buffer nil "")
714 ;; Temporary buffer used for computing fine differences.
715 (defconst ediff-tmp-buffer " *ediff-tmp*" "")
717 (defconst ediff-msg-buffer " *ediff-message*" "")
719 (ediff-defvar-local ediff-error-buffer nil "")
721 (ediff-defvar-local ediff-debug-buffer "*ediff-debug*" "")
723 ;; List of ediff control panels associated with each buffer A/B/C/Ancestor.
725 (ediff-defvar-local ediff-this-buffer-ediff-sessions nil "")
729 (defvar ediff-disturbed-overlays nil "")
732 (defvar ediff-shadow-overlay-priority 100 "")
734 (defcustom ediff-version-control-package 'vc
741 :group 'ediff)
743 (defcustom ediff-coding-system-for-read 'raw-text
751 :group 'ediff)
753 (defcustom ediff-coding-system-for-write 'no-conversion
757 :group 'ediff)
760 (ediff-cond-compile-for-xemacs-or-emacs
762 (defalias 'ediff-read-event 'next-command-event)
763 (defalias 'ediff-overlayp 'extentp)
764 (defalias 'ediff-make-overlay 'make-extent)
765 (defalias 'ediff-delete-overlay 'delete-extent))
767 (defalias 'ediff-read-event 'read-event)
768 (defalias 'ediff-overlayp 'overlayp)
769 (defalias 'ediff-make-overlay 'make-overlay)
770 (defalias 'ediff-delete-overlay 'delete-overlay))
782 (defun ediff-check-version (op major minor &optional type-of-emacs)
784 (and (cond ((eq type-of-emacs 'xemacs) ediff-xemacs-p)
785 ((eq type-of-emacs 'emacs) ediff-emacs-p)
796 (error "%S: Invalid op in ediff-check-version" op))))
801 (defun ediff-color-display-p ()
803 (ediff-cond-compile-for-xemacs-or-emacs
812 ;; A var local to each control panel buffer. Indicates highlighting style
813 ;; in effect for this buffer: `face', `ascii',
815 (ediff-defvar-local ediff-highlighting-style
816 (if (and (ediff-has-face-support-p) ediff-use-faces) 'face 'ascii)
820 (if (ediff-has-face-support-p)
821 (ediff-cond-compile-for-xemacs-or-emacs
823 (defalias 'ediff-valid-color-p 'valid-color-name-p)
824 (defalias 'ediff-get-face 'get-face))
826 (defalias 'ediff-valid-color-p (if (fboundp 'color-defined-p)
829 (defalias 'ediff-get-face 'internal-get-face))
832 (if (ediff-window-display-p)
833 (ediff-cond-compile-for-xemacs-or-emacs
835 (defalias 'ediff-display-pixel-width 'device-pixel-width)
836 (defalias 'ediff-display-pixel-height 'device-pixel-height))
838 (defalias 'ediff-display-pixel-width
842 (defalias 'ediff-display-pixel-height
849 (defconst ediff-current-diff-overlay-alist
850 '((A . ediff-current-diff-overlay-A)
851 (B . ediff-current-diff-overlay-B)
852 (C . ediff-current-diff-overlay-C)
853 (Ancestor . ediff-current-diff-overlay-Ancestor)))
856 (defconst ediff-current-diff-face-alist
857 '((A . ediff-current-diff-A)
858 (B . ediff-current-diff-B)
859 (C . ediff-current-diff-C)
860 (Ancestor . ediff-current-diff-Ancestor)))
863 (defun ediff-set-overlay-face (extent face)
864 (ediff-overlay-put extent 'face face)
865 (ediff-overlay-put extent 'help-echo 'ediff-region-help-echo))
867 (defun ediff-region-help-echo (extent-or-window &optional overlay point)
870 (let ((is-current (ediff-overlay-get overlay 'ediff))
871 (face (ediff-overlay-get overlay 'face))
872 (diff-num (ediff-overlay-get overlay 'ediff-diff-num))
878 (setq face-help (and face (get face 'ediff-help-echo)))
889 (defun ediff-set-face-pixmap (face pixmap)
891 (if (and (ediff-window-display-p) (not (ediff-color-display-p)))
898 (defun ediff-hide-face (face)
899 (if (and (ediff-has-face-support-p)
906 (defface ediff-current-diff-A
907 (if ediff-emacs-p
916 "Face for highlighting the selected difference in buffer A."
917 :group 'ediff-highlighting)
920 (defvar ediff-current-diff-face-A 'ediff-current-diff-A
921 "Face for highlighting the selected difference in buffer A.
923 widget to customize the actual face object `ediff-current-diff-A'
925 (ediff-hide-face ediff-current-diff-face-A)
928 (if (and ediff-xemacs-p
929 (ediff-has-face-support-p)
930 (not (ediff-color-display-p)))
931 (copy-face 'modeline ediff-current-diff-face-A))
935 (defface ediff-current-diff-B
936 (if ediff-emacs-p
947 "Face for highlighting the selected difference in buffer B."
948 :group 'ediff-highlighting)
951 (defvar ediff-current-diff-face-B 'ediff-current-diff-B
952 "Face for highlighting the selected difference in buffer B.
954 widget to customize the actual face `ediff-current-diff-B'
956 (ediff-hide-face ediff-current-diff-face-B)
959 (if (and ediff-xemacs-p
960 (ediff-has-face-support-p)
961 (not (ediff-color-display-p)))
962 (copy-face 'modeline ediff-current-diff-face-B))
965 (defface ediff-current-diff-C
966 (if ediff-emacs-p
975 "Face for highlighting the selected difference in buffer C."
976 :group 'ediff-highlighting)
979 (defvar ediff-current-diff-face-C 'ediff-current-diff-C
980 "Face for highlighting the selected difference in buffer C.
982 widget to customize the actual face object `ediff-current-diff-C'
984 (ediff-hide-face ediff-current-diff-face-C)
987 (if (and ediff-xemacs-p
988 (ediff-has-face-support-p)
989 (not (ediff-color-display-p)))
990 (copy-face 'modeline ediff-current-diff-face-C))
993 (defface ediff-current-diff-Ancestor
994 (if ediff-emacs-p
1003 "Face for highlighting the selected difference in buffer Ancestor."
1004 :group 'ediff-highlighting)
1007 (defvar ediff-current-diff-face-Ancestor 'ediff-current-diff-Ancestor
1008 "Face for highlighting the selected difference in buffer Ancestor.
1010 widget to customize the actual face object `ediff-current-diff-Ancestor'
1012 (ediff-hide-face ediff-current-diff-face-Ancestor)
1015 (if (and ediff-xemacs-p
1016 (ediff-has-face-support-p)
1017 (not (ediff-color-display-p)))
1018 (copy-face 'modeline ediff-current-diff-face-Ancestor))
1021 (defface ediff-fine-diff-A
1022 (if ediff-emacs-p
1031 "Face for highlighting the refinement of the selected diff in buffer A."
1032 :group 'ediff-highlighting)
1035 (defvar ediff-fine-diff-face-A 'ediff-fine-diff-A
1036 "Face for highlighting the fine differences in buffer A.
1038 widget to customize the actual face object `ediff-fine-diff-A'
1040 (ediff-hide-face ediff-fine-diff-face-A)
1042 (defface ediff-fine-diff-B
1043 (if ediff-emacs-p
1052 "Face for highlighting the refinement of the selected diff in buffer B."
1053 :group 'ediff-highlighting)
1056 (defvar ediff-fine-diff-face-B 'ediff-fine-diff-B
1057 "Face for highlighting the fine differences in buffer B.
1059 widget to customize the actual face object `ediff-fine-diff-B'
1061 (ediff-hide-face ediff-fine-diff-face-B)
1063 (defface ediff-fine-diff-C
1064 (if ediff-emacs-p
1078 "Face for highlighting the refinement of the selected diff in buffer C."
1079 :group 'ediff-highlighting)
1082 (defvar ediff-fine-diff-face-C 'ediff-fine-diff-C
1083 "Face for highlighting the fine differences in buffer C.
1085 widget to customize the actual face object `ediff-fine-diff-C'
1087 (ediff-hide-face ediff-fine-diff-face-C)
1089 (defface ediff-fine-diff-Ancestor
1090 (if ediff-emacs-p
1099 "Face for highlighting the refinement of the selected diff in the ancestor buffer.
1101 ancestor buffer."
1102 :group 'ediff-highlighting)
1105 (defvar ediff-fine-diff-face-Ancestor 'ediff-fine-diff-Ancestor
1106 "Face for highlighting the fine differences in buffer Ancestor.
1108 widget to customize the actual face object `ediff-fine-diff-Ancestor'
1110 (ediff-hide-face ediff-fine-diff-face-Ancestor)
1114 (cond ((not (ediff-has-face-support-p)) nil)
1121 (defface ediff-even-diff-A
1122 (if ediff-emacs-p
1136 "Face for highlighting even-numbered non-current differences in buffer A."
1137 :group 'ediff-highlighting)
1140 (defvar ediff-even-diff-face-A 'ediff-even-diff-A
1141 "Face for highlighting even-numbered non-current differences in buffer A.
1143 widget to customize the actual face object `ediff-even-diff-A'
1145 (ediff-hide-face ediff-even-diff-face-A)
1147 (defface ediff-even-diff-B
1148 (if ediff-emacs-p
1157 "Face for highlighting even-numbered non-current differences in buffer B."
1158 :group 'ediff-highlighting)
1161 (defvar ediff-even-diff-face-B 'ediff-even-diff-B
1162 "Face for highlighting even-numbered non-current differences in buffer B.
1164 widget to customize the actual face object `ediff-even-diff-B'
1166 (ediff-hide-face ediff-even-diff-face-B)
1168 (defface ediff-even-diff-C
1169 (if ediff-emacs-p
1183 "Face for highlighting even-numbered non-current differences in buffer C."
1184 :group 'ediff-highlighting)
1187 (defvar ediff-even-diff-face-C 'ediff-even-diff-C
1188 "Face for highlighting even-numbered non-current differences in buffer C.
1190 widget to customize the actual face object `ediff-even-diff-C'
1192 (ediff-hide-face ediff-even-diff-face-C)
1194 (defface ediff-even-diff-Ancestor
1195 (if ediff-emacs-p
1209 "Face for highlighting even-numbered non-current differences in the ancestor buffer."
1210 :group 'ediff-highlighting)
1213 (defvar ediff-even-diff-face-Ancestor 'ediff-even-diff-Ancestor
1214 "Face for highlighting even-numbered non-current differences in buffer Ancestor.
1216 widget to customize the actual face object `ediff-even-diff-Ancestor'
1218 (ediff-hide-face ediff-even-diff-face-Ancestor)
1220 ;; Association between buffer types and even-diff-face symbols
1221 (defconst ediff-even-diff-face-alist
1222 '((A . ediff-even-diff-A)
1223 (B . ediff-even-diff-B)
1224 (C . ediff-even-diff-C)
1225 (Ancestor . ediff-even-diff-Ancestor)))
1227 (defface ediff-odd-diff-A
1228 (if ediff-emacs-p
1240 "Face for highlighting odd-numbered non-current differences in buffer A."
1241 :group 'ediff-highlighting)
1244 (defvar ediff-odd-diff-face-A 'ediff-odd-diff-A
1245 "Face for highlighting odd-numbered non-current differences in buffer A.
1247 widget to customize the actual face object `ediff-odd-diff-A'
1249 (ediff-hide-face ediff-odd-diff-face-A)
1252 (defface ediff-odd-diff-B
1253 (if ediff-emacs-p
1265 "Face for highlighting odd-numbered non-current differences in buffer B."
1266 :group 'ediff-highlighting)
1269 (defvar ediff-odd-diff-face-B 'ediff-odd-diff-B
1270 "Face for highlighting odd-numbered non-current differences in buffer B.
1272 widget to customize the actual face object `ediff-odd-diff-B'
1274 (ediff-hide-face ediff-odd-diff-face-B)
1276 (defface ediff-odd-diff-C
1277 (if ediff-emacs-p
1289 "Face for highlighting odd-numbered non-current differences in buffer C."
1290 :group 'ediff-highlighting)
1293 (defvar ediff-odd-diff-face-C 'ediff-odd-diff-C
1294 "Face for highlighting odd-numbered non-current differences in buffer C.
1296 widget to customize the actual face object `ediff-odd-diff-C'
1298 (ediff-hide-face ediff-odd-diff-face-C)
1300 (defface ediff-odd-diff-Ancestor
1301 (if ediff-emacs-p
1310 "Face for highlighting odd-numbered non-current differences in the ancestor buffer."
1311 :group 'ediff-highlighting)
1314 (defvar ediff-odd-diff-face-Ancestor 'ediff-odd-diff-Ancestor
1315 "Face for highlighting odd-numbered non-current differences in buffer Ancestor.
1317 widget to customize the actual face object `ediff-odd-diff-Ancestor'
1319 (ediff-hide-face ediff-odd-diff-face-Ancestor)
1321 ;; Association between buffer types and odd-diff-face symbols
1322 (defconst ediff-odd-diff-face-alist
1323 '((A . ediff-odd-diff-A)
1324 (B . ediff-odd-diff-B)
1325 (C . ediff-odd-diff-C)
1326 (Ancestor . ediff-odd-diff-Ancestor)))
1328 ;; A-list of fine-diff face symbols associated with buffer types
1329 (defconst ediff-fine-diff-face-alist
1330 '((A . ediff-fine-diff-A)
1331 (B . ediff-fine-diff-B)
1332 (C . ediff-fine-diff-C)
1333 (Ancestor . ediff-fine-diff-Ancestor)))
1336 (put ediff-fine-diff-face-A 'ediff-help-echo
1338 (put ediff-fine-diff-face-B 'ediff-help-echo
1340 (put ediff-fine-diff-face-C 'ediff-help-echo
1342 (put ediff-fine-diff-face-Ancestor 'ediff-help-echo
1345 (add-hook 'ediff-quit-hook 'ediff-cleanup-mess)
1346 (add-hook 'ediff-suspend-hook 'ediff-default-suspend-function)
1351 (ediff-defvar-local ediff-current-diff-overlay-A nil
1352 "Overlay for the current difference region in buffer A.")
1353 (ediff-defvar-local ediff-current-diff-overlay-B nil
1354 "Overlay for the current difference region in buffer B.")
1355 (ediff-defvar-local ediff-current-diff-overlay-C nil
1356 "Overlay for the current difference region in buffer C.")
1357 (ediff-defvar-local ediff-current-diff-overlay-Ancestor nil
1358 "Overlay for the current difference region in the ancestor buffer.")
1360 ;; Compute priority of a current ediff overlay.
1361 (defun ediff-highest-priority (start end buffer)
1364 (ediff-cond-compile-for-xemacs-or-emacs
1365 (1+ ediff-shadow-overlay-priority) ; xemacs form
1367 (ediff-with-current-buffer buffer
1371 (+ 1 ediff-shadow-overlay-priority
1378 ;; exclude ediff overlays from priority
1381 (null (ediff-overlay-get ovr 'ediff))
1382 (null (ediff-overlay-get ovr 'ediff-diff-num)))
1384 (or (ediff-overlay-get ovr 'priority) 0)
1389 ) ; ediff-cond-compile-for-xemacs-or-emacs
1393 (defvar ediff-toggle-read-only-function nil
1399 (defcustom ediff-make-buffers-readonly-at-startup nil
1403 :group 'ediff)
1409 (defconst ediff-verbose-p t)
1411 (defcustom ediff-autostore-merges 'group-jobs-only
1415 job is part of a group of jobs, such as `ediff-merge-directory'
1416 or `ediff-merge-directory-revisions'."
1418 :group 'ediff-merge)
1419 (make-variable-buffer-local 'ediff-autostore-merges)
1422 (ediff-defvar-local ediff-merge-store-file nil "")
1424 (defcustom ediff-merge-filename-prefix "merge_"
1427 :group 'ediff-merge)
1429 (defcustom ediff-no-emacs-help-in-control-buffer nil
1430 "*Non-nil means C-h should not invoke Emacs help in control buffer.
1433 :group 'ediff)
1437 (defcustom ediff-temp-file-prefix
1452 :group 'ediff)
1454 (defcustom ediff-temp-file-mode 384 ; u=rw only
1457 :group 'ediff)
1461 (defcustom ediff-metachars "[ \t\n!\"#$&'()*;<=>?[\\^`{|~]"
1465 :group 'ediff)
1468 (defvar ediff-H-glyph (if (featurep 'xemacs) (make-glyph "H")))
1471 ;; Temporary file used for refining difference regions in buffer A.
1472 (ediff-defvar-local ediff-temp-file-A nil "")
1473 ;; Temporary file used for refining difference regions in buffer B.
1474 (ediff-defvar-local ediff-temp-file-B nil "")
1475 ;; Temporary file used for refining difference regions in buffer C.
1476 (ediff-defvar-local ediff-temp-file-C nil "")
1479 (defun ediff-file-remote-p (file-name)
1482 ;; File for which we can get attributes, such as size or date
1483 (defun ediff-listable-file (file-name)
1488 (defsubst ediff-frame-unsplittable-p (frame)
1491 (defsubst ediff-get-next-window (wind prev-wind)
1498 (defsubst ediff-kill-buffer-carefully (buf)
1499 "Kill buffer BUF if it exists."
1500 (if (ediff-buffer-live-p buf)
1501 (kill-buffer (get-buffer buf))))
1503 (defsubst ediff-background-face (buf-type dif-num)
1506 (ediff-get-symbol-from-alist
1507 buf-type (if (ediff-odd-p dif-num)
1508 ediff-even-diff-face-alist
1509 ediff-odd-diff-face-alist)
1513 ;; activate faces on diff regions in buffer
1514 (defun ediff-paint-background-regions-in-one-buffer (buf-type unhighlight)
1516 (eval (ediff-get-symbol-from-alist
1517 buf-type ediff-difference-vector-alist)))
1520 (setq overl (ediff-get-diff-overlay-from-diff-record rec)
1521 diff-num (ediff-overlay-get overl 'ediff-diff-num))
1522 (if (ediff-overlay-buffer overl)
1524 (ediff-set-overlay-face
1527 (ediff-background-face buf-type diff-num))))
1533 (defun ediff-paint-background-regions (&optional unhighlight)
1534 (ediff-paint-background-regions-in-one-buffer
1536 (ediff-paint-background-regions-in-one-buffer
1538 (ediff-paint-background-regions-in-one-buffer
1540 (ediff-paint-background-regions-in-one-buffer
1546 (defsubst ediff-clear-fine-diff-vector (diff-record)
1548 (mapcar 'ediff-delete-overlay
1549 (ediff-get-fine-diff-vector-from-diff-record diff-record))))
1551 (defsubst ediff-clear-fine-differences-in-one-buffer (n buf-type)
1552 (ediff-clear-fine-diff-vector (ediff-get-difference n buf-type))
1553 (ediff-set-fine-diff-vector n buf-type nil))
1555 (defsubst ediff-clear-fine-differences (n)
1556 (ediff-clear-fine-differences-in-one-buffer n 'A)
1557 (ediff-clear-fine-differences-in-one-buffer n 'B)
1558 (if ediff-3way-job
1559 (ediff-clear-fine-differences-in-one-buffer n 'C)))
1562 (defsubst ediff-mouse-event-p (event)
1563 (ediff-cond-compile-for-xemacs-or-emacs
1569 (defsubst ediff-key-press-event-p (event)
1570 (ediff-cond-compile-for-xemacs-or-emacs
1575 (defun ediff-event-point (event)
1576 (cond ((ediff-mouse-event-p event)
1577 (ediff-cond-compile-for-xemacs-or-emacs
1582 ((ediff-key-press-event-p event)
1586 (defun ediff-event-buffer (event)
1587 (cond ((ediff-mouse-event-p event)
1588 (ediff-cond-compile-for-xemacs-or-emacs
1589 (event-buffer event) ; xemacs form
1590 (window-buffer (posn-window (event-start event))) ; emacs form
1593 ((ediff-key-press-event-p event)
1594 (current-buffer))
1597 (defun ediff-event-key (event-or-key)
1598 (ediff-cond-compile-for-xemacs-or-emacs
1604 (defsubst ediff-frame-iconified-p (frame)
1605 (if (and (ediff-window-display-p) (frame-live-p frame))
1606 (ediff-cond-compile-for-xemacs-or-emacs
1612 (defsubst ediff-window-visible-p (wind)
1615 (or (not (ediff-window-display-p))
1619 (defsubst ediff-frame-char-width (frame)
1620 (ediff-cond-compile-for-xemacs-or-emacs
1625 (defun ediff-reset-mouse (&optional frame do-not-grab-mouse)
1627 (if (ediff-window-display-p)
1629 (if ediff-xemacs-p
1633 (not ediff-grab-mouse)
1635 ;; If ediff-grab-mouse = t, then mouse won't be grabbed for
1637 ;; ediff-recenter). The condition below affects only terminating
1639 ;; a meta buffer).
1640 (and (eq ediff-grab-mouse 'maybe)
1641 (memq this-command '(ediff-quit ediff-update-diffs)))
1645 (defsubst ediff-spy-after-mouse ()
1646 (setq ediff-mouse-pixel-position (mouse-pixel-position)))
1651 (defun ediff-user-grabbed-mouse ()
1652 (if ediff-mouse-pixel-position
1653 (cond ((not (eq (car ediff-mouse-pixel-position)
1655 ((and (car (cdr ediff-mouse-pixel-position))
1657 (cdr (cdr ediff-mouse-pixel-position))
1659 (not (and (< (abs (- (car (cdr ediff-mouse-pixel-position))
1661 ediff-mouse-pixel-threshold)
1662 (< (abs (- (cdr (cdr ediff-mouse-pixel-position))
1664 ediff-mouse-pixel-threshold))))
1667 (defsubst ediff-frame-char-height (frame)
1668 (ediff-cond-compile-for-xemacs-or-emacs
1669 (glyph-height ediff-H-glyph (frame-selected-window frame)) ; xemacs case
1676 (defsubst ediff-overlay-start (overl)
1677 (if (ediff-overlayp overl)
1678 (ediff-cond-compile-for-xemacs-or-emacs
1684 (defsubst ediff-overlay-end (overl)
1685 (if (ediff-overlayp overl)
1686 (ediff-cond-compile-for-xemacs-or-emacs
1692 (defsubst ediff-empty-overlay-p (overl)
1693 (= (ediff-overlay-start overl) (ediff-overlay-end overl)))
1695 ;; like overlay-buffer in Emacs. In XEmacs, returns nil if the extent is
1696 ;; dead. Otherwise, works like extent-buffer
1697 (defun ediff-overlay-buffer (overl)
1698 (ediff-cond-compile-for-xemacs-or-emacs
1700 (overlay-buffer overl) ; emacs form
1703 ;; like overlay-get in Emacs. In XEmacs, returns nil if the extent is
1705 (defun ediff-overlay-get (overl property)
1706 (ediff-cond-compile-for-xemacs-or-emacs
1708 (overlay-get overl property) ; emacs form
1714 (defun ediff-move-overlay (overlay beg end &optional buffer)
1716 Checks if overlay's buffer exists before actually doing the move."
1717 (let ((buf (and overlay (ediff-overlay-buffer overlay))))
1718 (if (ediff-buffer-live-p buf)
1719 (ediff-cond-compile-for-xemacs-or-emacs
1721 (move-overlay overlay beg end buffer) ; emacs form
1723 ;; buffer's dead
1725 (ediff-delete-overlay overlay)))))
1727 (defun ediff-overlay-put (overlay prop value)
1729 Checks if overlay's buffer exists."
1730 (if (ediff-buffer-live-p (ediff-overlay-buffer overlay))
1731 (ediff-cond-compile-for-xemacs-or-emacs
1735 (ediff-delete-overlay overlay)))
1739 (defun ediff-abbreviate-file-name (file &optional dir)
1744 (ediff-cond-compile-for-xemacs-or-emacs
1754 (defun ediff-strip-last-dir (dir)
1762 (ediff-abbreviate-file-name (file-name-directory dir))))
1764 (defun ediff-truncate-string-left (str newlen)
1774 (defsubst ediff-nonempty-string-p (string)
1789 (defun ediff-abbrev-jobname (jobname)
1790 (cond ((eq jobname 'ediff-directories)
1792 ((eq jobname 'ediff-files)
1794 ((eq jobname 'ediff-buffers)
1796 ((eq jobname 'ediff-directories3)
1798 ((eq jobname 'ediff-files3)
1800 ((eq jobname 'ediff-buffers3)
1802 ((eq jobname 'ediff-revision)
1804 ((eq jobname 'ediff-directory-revisions)
1806 ((eq jobname 'ediff-merge-directory-revisions)
1808 ((eq jobname 'ediff-merge-directory-revisions-with-ancestor)
1816 ;; If ediff modified mode line, strip the modification
1817 (defsubst ediff-strip-mode-line-format ()
1822 (defsubst ediff-valid-difference-p (&optional n)
1823 (or n (setq n ediff-current-difference))
1824 (and (>= n 0) (< n ediff-number-of-differences)))
1826 (defsubst ediff-show-all-diffs (n)
1833 (defsubst ediff-message-if-verbose (string &rest args)
1834 (if ediff-verbose-p
1837 (defun ediff-file-attributes (filename attr-number)
1838 (if (ediff-listable-file filename)
1843 (defsubst ediff-file-size (filename)
1844 (ediff-file-attributes filename 7))
1845 (defsubst ediff-file-modtime (filename)
1846 (ediff-file-attributes filename 5))
1849 (defun ediff-convert-standard-filename (fname)
1856 (defalias 'ediff-with-syntax-table 'with-syntax-table)
1858 (defmacro ediff-with-syntax-table (table &rest body)
1860 (old-buffer (make-symbol "buffer")))
1862 (,old-buffer (current-buffer)))
1867 (save-current-buffer
1868 (set-buffer ,old-buffer)
1872 (provide 'ediff-init)
1877 ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
1878 ;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
1879 ;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
1883 ;;; ediff-init.el ends here