emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/ediff-util.el


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/ediff-util.el
Date: Fri, 04 Apr 2003 01:21:54 -0500

Index: emacs/lisp/ediff-util.el
diff -c emacs/lisp/ediff-util.el:1.47 emacs/lisp/ediff-util.el:1.48
*** emacs/lisp/ediff-util.el:1.47       Sat Oct 12 03:13:59 2002
--- emacs/lisp/ediff-util.el    Tue Feb  4 06:14:07 2003
***************
*** 24,30 ****
  ;;; Commentary:
  
  ;;; Code:
!        
  (provide 'ediff-util)
  
  ;; Compiler pacifier
--- 24,30 ----
  ;;; Commentary:
  
  ;;; Code:
! 
  (provide 'ediff-util)
  
  ;; Compiler pacifier
***************
*** 118,124 ****
    (setq mode-name "Ediff")
    (run-hooks 'ediff-mode-hook))
  
!     
  
  ;;; Build keymaps
  
--- 118,124 ----
    (setq mode-name "Ediff")
    (run-hooks 'ediff-mode-hook))
  
! 
  
  ;;; Build keymaps
  
***************
*** 133,151 ****
    (if (null ediff-mode-map)
        (ediff-setup-keymap))
    (use-local-map ediff-mode-map))
!   
  ;; Reload Ediff keymap.  For debugging only.
  (defun ediff-reload-keymap ()
    (interactive)
    (setq ediff-mode-map nil)
    (ediff-set-keys))
!   
  
  (defun ediff-setup-keymap ()
    "Set up the keymap used in the control buffer of Ediff."
    (setq ediff-mode-map (make-sparse-keymap))
    (suppress-keymap ediff-mode-map)
!   
    (define-key ediff-mode-map
      (if ediff-emacs-p [mouse-2] [button2]) 'ediff-help-for-quick-help)
    (define-key ediff-mode-map "\C-m"  'ediff-help-for-quick-help)
--- 133,151 ----
    (if (null ediff-mode-map)
        (ediff-setup-keymap))
    (use-local-map ediff-mode-map))
! 
  ;; Reload Ediff keymap.  For debugging only.
  (defun ediff-reload-keymap ()
    (interactive)
    (setq ediff-mode-map nil)
    (ediff-set-keys))
! 
  
  (defun ediff-setup-keymap ()
    "Set up the keymap used in the control buffer of Ediff."
    (setq ediff-mode-map (make-sparse-keymap))
    (suppress-keymap ediff-mode-map)
! 
    (define-key ediff-mode-map
      (if ediff-emacs-p [mouse-2] [button2]) 'ediff-help-for-quick-help)
    (define-key ediff-mode-map "\C-m"  'ediff-help-for-quick-help)
***************
*** 246,252 ****
        ))
  
    (define-key ediff-mode-map "m" 'ediff-toggle-wide-display)
!       
    ;; Allow ediff-mode-map to be referenced indirectly
    (fset 'ediff-mode-map ediff-mode-map)
    (run-hooks 'ediff-keymap-setup-hook))
--- 246,252 ----
        ))
  
    (define-key ediff-mode-map "m" 'ediff-toggle-wide-display)
! 
    ;; Allow ediff-mode-map to be referenced indirectly
    (fset 'ediff-mode-map ediff-mode-map)
    (run-hooks 'ediff-keymap-setup-hook))
***************
*** 272,297 ****
            (ediff-convert-standard-filename (expand-file-name file-C))))
    (if (stringp merge-buffer-file)
        (progn
!       (setq merge-buffer-file 
              (ediff-convert-standard-filename
               (expand-file-name merge-buffer-file)))
        ;; check the directory exists
        (or (file-exists-p (file-name-directory merge-buffer-file))
            (error "Directory %s given as place to save the merge doesn't exist"
!                  (abbreviate-file-name 
                    (file-name-directory merge-buffer-file))))
        (if (and (file-exists-p merge-buffer-file)
                 (file-directory-p merge-buffer-file))
            (error "The merge buffer file %s must not be a directory"
                   (abbreviate-file-name merge-buffer-file)))
        ))
!   (let* ((control-buffer-name 
          (ediff-unique-buffer-name "*Ediff Control Panel" "*"))
         (control-buffer (ediff-with-current-buffer buffer-A
                           (get-buffer-create control-buffer-name))))
      (ediff-with-current-buffer control-buffer
!       (ediff-mode)                 
!       
        (make-local-variable 'ediff-use-long-help-message)
        (make-local-variable 'ediff-prefer-iconified-control-frame)
        (make-local-variable 'ediff-split-window-function)
--- 272,297 ----
            (ediff-convert-standard-filename (expand-file-name file-C))))
    (if (stringp merge-buffer-file)
        (progn
!       (setq merge-buffer-file
              (ediff-convert-standard-filename
               (expand-file-name merge-buffer-file)))
        ;; check the directory exists
        (or (file-exists-p (file-name-directory merge-buffer-file))
            (error "Directory %s given as place to save the merge doesn't exist"
!                  (abbreviate-file-name
                    (file-name-directory merge-buffer-file))))
        (if (and (file-exists-p merge-buffer-file)
                 (file-directory-p merge-buffer-file))
            (error "The merge buffer file %s must not be a directory"
                   (abbreviate-file-name merge-buffer-file)))
        ))
!   (let* ((control-buffer-name
          (ediff-unique-buffer-name "*Ediff Control Panel" "*"))
         (control-buffer (ediff-with-current-buffer buffer-A
                           (get-buffer-create control-buffer-name))))
      (ediff-with-current-buffer control-buffer
!       (ediff-mode)
! 
        (make-local-variable 'ediff-use-long-help-message)
        (make-local-variable 'ediff-prefer-iconified-control-frame)
        (make-local-variable 'ediff-split-window-function)
***************
*** 309,315 ****
        (while setup-parameters
        (set (car (car setup-parameters)) (cdr (car setup-parameters)))
        (setq setup-parameters (cdr setup-parameters)))
!       
        ;; set variables classifying the current ediff job
        ;; must come AFTER setup-parameters
        (setq ediff-3way-comparison-job (ediff-3way-comparison-job)
--- 309,315 ----
        (while setup-parameters
        (set (car (car setup-parameters)) (cdr (car setup-parameters)))
        (setq setup-parameters (cdr setup-parameters)))
! 
        ;; set variables classifying the current ediff job
        ;; must come AFTER setup-parameters
        (setq ediff-3way-comparison-job (ediff-3way-comparison-job)
***************
*** 334,340 ****
        (if (ediff-window-display-p)
          (add-hook 'pre-command-hook 'ediff-spy-after-mouse nil 'local))
        (setq ediff-mouse-pixel-position (mouse-pixel-position))
!       
        ;; adjust for merge jobs
        (if ediff-merge-job
          (let ((buf
--- 334,340 ----
        (if (ediff-window-display-p)
          (add-hook 'pre-command-hook 'ediff-spy-after-mouse nil 'local))
        (setq ediff-mouse-pixel-position (mouse-pixel-position))
! 
        ;; adjust for merge jobs
        (if ediff-merge-job
          (let ((buf
***************
*** 348,360 ****
                 (cond ((eq ediff-default-variant 'default-B)
                        buffer-B)
                       (t buffer-A))))
!                
            (setq ediff-split-window-function
!                 ediff-merge-split-window-function) 
!           
            ;; remember the ancestor buffer, if any
            (setq ediff-ancestor-buffer buffer-C)
!           
            (setq buffer-C
                  (get-buffer-create
                   (ediff-unique-buffer-name "*ediff-merge" "*")))
--- 348,360 ----
                 (cond ((eq ediff-default-variant 'default-B)
                        buffer-B)
                       (t buffer-A))))
! 
            (setq ediff-split-window-function
!                 ediff-merge-split-window-function)
! 
            ;; remember the ancestor buffer, if any
            (setq ediff-ancestor-buffer buffer-C)
! 
            (setq buffer-C
                  (get-buffer-create
                   (ediff-unique-buffer-name "*ediff-merge" "*")))
***************
*** 365,378 ****
              (widen) ; merge buffer is always widened
              (add-hook 'local-write-file-hooks 'ediff-set-merge-mode nil t)
              )))
!       (setq buffer-read-only nil    
            ediff-buffer-A buffer-A
            ediff-buffer-B buffer-B
            ediff-buffer-C buffer-C
            ediff-control-buffer control-buffer)
  
        (ediff-choose-syntax-table)
!          
        (setq ediff-control-buffer-suffix
            (if (string-match "<[0-9]*>" control-buffer-name)
                (substring control-buffer-name
--- 365,378 ----
              (widen) ; merge buffer is always widened
              (add-hook 'local-write-file-hooks 'ediff-set-merge-mode nil t)
              )))
!       (setq buffer-read-only nil
            ediff-buffer-A buffer-A
            ediff-buffer-B buffer-B
            ediff-buffer-C buffer-C
            ediff-control-buffer control-buffer)
  
        (ediff-choose-syntax-table)
! 
        (setq ediff-control-buffer-suffix
            (if (string-match "<[0-9]*>" control-buffer-name)
                (substring control-buffer-name
***************
*** 388,397 ****
                (or
                 (string-match "[0-9]+" ediff-control-buffer-suffix)
                 0))))))
!          
        (setq ediff-error-buffer
            (get-buffer-create (ediff-unique-buffer-name "*ediff-errors" "*")))
!       
        (ediff-with-current-buffer buffer-A (ediff-strip-mode-line-format))
        (ediff-with-current-buffer buffer-B (ediff-strip-mode-line-format))
        (if ediff-3way-job
--- 388,397 ----
                (or
                 (string-match "[0-9]+" ediff-control-buffer-suffix)
                 0))))))
! 
        (setq ediff-error-buffer
            (get-buffer-create (ediff-unique-buffer-name "*ediff-errors" "*")))
! 
        (ediff-with-current-buffer buffer-A (ediff-strip-mode-line-format))
        (ediff-with-current-buffer buffer-B (ediff-strip-mode-line-format))
        (if ediff-3way-job
***************
*** 399,414 ****
        (if (ediff-buffer-live-p ediff-ancestor-buffer)
          (ediff-with-current-buffer ediff-ancestor-buffer
            (ediff-strip-mode-line-format)))
!       
        (ediff-save-protected-variables) ; save variables to be restored on exit
!       
        ;; ediff-setup-diff-regions-function must be set after setup
        ;; parameters are processed.
        (setq ediff-setup-diff-regions-function
            (if ediff-diff3-job
                'ediff-setup-diff-regions3
              'ediff-setup-diff-regions))
!       
        (setq ediff-wide-bounds
            (list (ediff-make-bullet-proof-overlay
                   '(point-min) '(point-max) ediff-buffer-A)
--- 399,414 ----
        (if (ediff-buffer-live-p ediff-ancestor-buffer)
          (ediff-with-current-buffer ediff-ancestor-buffer
            (ediff-strip-mode-line-format)))
! 
        (ediff-save-protected-variables) ; save variables to be restored on exit
! 
        ;; ediff-setup-diff-regions-function must be set after setup
        ;; parameters are processed.
        (setq ediff-setup-diff-regions-function
            (if ediff-diff3-job
                'ediff-setup-diff-regions3
              'ediff-setup-diff-regions))
! 
        (setq ediff-wide-bounds
            (list (ediff-make-bullet-proof-overlay
                   '(point-min) '(point-max) ediff-buffer-A)
***************
*** 416,435 ****
                   '(point-min) '(point-max) ediff-buffer-B)
                  (ediff-make-bullet-proof-overlay
                   '(point-min) '(point-max) ediff-buffer-C)))
!       
        ;; This has effect only on ediff-windows/regions
        ;; In all other cases, ediff-visible-region sets visibility bounds to
        ;; ediff-wide-bounds, and ediff-narrow-bounds are ignored.
        (if ediff-start-narrowed
          (setq ediff-visible-bounds ediff-narrow-bounds)
        (setq ediff-visible-bounds ediff-wide-bounds))
!       
        (ediff-set-keys) ; comes after parameter setup
!       
        ;; set up ediff-narrow-bounds, if not set
        (or ediff-narrow-bounds
          (setq ediff-narrow-bounds ediff-wide-bounds))
!       
        ;; All these must be inside ediff-with-current-buffer control-buffer,
        ;; since these vars are local to control-buffer
        ;; These won't run if there are errors in diff
--- 416,435 ----
                   '(point-min) '(point-max) ediff-buffer-B)
                  (ediff-make-bullet-proof-overlay
                   '(point-min) '(point-max) ediff-buffer-C)))
! 
        ;; This has effect only on ediff-windows/regions
        ;; In all other cases, ediff-visible-region sets visibility bounds to
        ;; ediff-wide-bounds, and ediff-narrow-bounds are ignored.
        (if ediff-start-narrowed
          (setq ediff-visible-bounds ediff-narrow-bounds)
        (setq ediff-visible-bounds ediff-wide-bounds))
! 
        (ediff-set-keys) ; comes after parameter setup
! 
        ;; set up ediff-narrow-bounds, if not set
        (or ediff-narrow-bounds
          (setq ediff-narrow-bounds ediff-wide-bounds))
! 
        ;; All these must be inside ediff-with-current-buffer control-buffer,
        ;; since these vars are local to control-buffer
        ;; These won't run if there are errors in diff
***************
*** 472,478 ****
            (or (memq control-buffer ediff-this-buffer-ediff-sessions)
                (setq ediff-this-buffer-ediff-sessions
                      (cons control-buffer
!                           ediff-this-buffer-ediff-sessions))) 
            (if ediff-make-buffers-readonly-at-startup
                (setq buffer-read-only t)
              (setq buffer-read-only nil))
--- 472,478 ----
            (or (memq control-buffer ediff-this-buffer-ediff-sessions)
                (setq ediff-this-buffer-ediff-sessions
                      (cons control-buffer
!                           ediff-this-buffer-ediff-sessions)))
            (if ediff-make-buffers-readonly-at-startup
                (setq buffer-read-only t)
              (setq buffer-read-only nil))
***************
*** 488,509 ****
                      (cons control-buffer
                            ediff-this-buffer-ediff-sessions)))
            ))
!       
        ;; the following must be after setting up  ediff-narrow-bounds AND after
        ;; nuking selective display
        (funcall ediff-setup-diff-regions-function file-A file-B file-C)
        (setq ediff-number-of-differences (length ediff-difference-vector-A))
        (setq ediff-current-difference -1)
!       
        (ediff-make-current-diff-overlay 'A)
        (ediff-make-current-diff-overlay 'B)
        (if ediff-3way-job
          (ediff-make-current-diff-overlay 'C))
        (if ediff-merge-with-ancestor-job
          (ediff-make-current-diff-overlay 'Ancestor))
!         
        (ediff-setup-windows buffer-A buffer-B buffer-C control-buffer)
!       
        (let ((shift-A (ediff-overlay-start
                      (ediff-get-value-according-to-buffer-type
                       'A ediff-narrow-bounds)))
--- 488,509 ----
                      (cons control-buffer
                            ediff-this-buffer-ediff-sessions)))
            ))
! 
        ;; the following must be after setting up  ediff-narrow-bounds AND after
        ;; nuking selective display
        (funcall ediff-setup-diff-regions-function file-A file-B file-C)
        (setq ediff-number-of-differences (length ediff-difference-vector-A))
        (setq ediff-current-difference -1)
! 
        (ediff-make-current-diff-overlay 'A)
        (ediff-make-current-diff-overlay 'B)
        (if ediff-3way-job
          (ediff-make-current-diff-overlay 'C))
        (if ediff-merge-with-ancestor-job
          (ediff-make-current-diff-overlay 'Ancestor))
! 
        (ediff-setup-windows buffer-A buffer-B buffer-C control-buffer)
! 
        (let ((shift-A (ediff-overlay-start
                      (ediff-get-value-according-to-buffer-type
                       'A ediff-narrow-bounds)))
***************
*** 526,535 ****
              (select-window ediff-window-C)
              (goto-char shift-C)))
        )
!       
        (select-window ediff-control-window)
        (ediff-visible-region)
!       
        (run-hooks 'startup-hooks)
        (ediff-arrange-autosave-in-merge-jobs merge-buffer-file)
  
--- 526,535 ----
              (select-window ediff-window-C)
              (goto-char shift-C)))
        )
! 
        (select-window ediff-control-window)
        (ediff-visible-region)
! 
        (run-hooks 'startup-hooks)
        (ediff-arrange-autosave-in-merge-jobs merge-buffer-file)
  
***************
*** 544,553 ****
        (run-hooks 'ediff-startup-hook)
        ) ; eval in control-buffer
      control-buffer))
!       
!       
  ;; This function assumes that we are in the window where control buffer is
! ;; to reside. 
  (defun ediff-setup-control-buffer (ctl-buf)
    "Set up window for control buffer."
    (if (window-dedicated-p (selected-window))
--- 544,553 ----
        (run-hooks 'ediff-startup-hook)
        ) ; eval in control-buffer
      control-buffer))
! 
! 
  ;; This function assumes that we are in the window where control buffer is
! ;; to reside.
  (defun ediff-setup-control-buffer (ctl-buf)
    "Set up window for control buffer."
    (if (window-dedicated-p (selected-window))
***************
*** 580,586 ****
        (ediff-make-bottom-toolbar)) ; this checks if toolbar is requested
      (goto-char (point-min))
      (skip-chars-forward ediff-whitespace)))
!     
  ;; This executes in control buffer and sets auto-save, visited file name, etc,
  ;; in the merge buffer
  (defun ediff-arrange-autosave-in-merge-jobs (merge-buffer-file)
--- 580,586 ----
        (ediff-make-bottom-toolbar)) ; this checks if toolbar is requested
      (goto-char (point-min))
      (skip-chars-forward ediff-whitespace)))
! 
  ;; This executes in control buffer and sets auto-save, visited file name, etc,
  ;; in the merge buffer
  (defun ediff-arrange-autosave-in-merge-jobs (merge-buffer-file)
***************
*** 593,599 ****
        (progn
          ;; save before leaving ctl buffer
          (ediff-verify-file-merge-buffer ediff-merge-store-file)
!         (setq merge-buffer-file ediff-merge-store-file) 
          (ediff-with-current-buffer ediff-buffer-C
            (set-visited-file-name merge-buffer-file))))
      (ediff-with-current-buffer ediff-buffer-C
--- 593,599 ----
        (progn
          ;; save before leaving ctl buffer
          (ediff-verify-file-merge-buffer ediff-merge-store-file)
!         (setq merge-buffer-file ediff-merge-store-file)
          (ediff-with-current-buffer ediff-buffer-C
            (set-visited-file-name merge-buffer-file))))
      (ediff-with-current-buffer ediff-buffer-C
***************
*** 604,610 ****
  
  
  ;;; Commands for working with Ediff
!      
  (defun ediff-update-diffs ()
    "Recompute difference regions in buffers A, B, and C.
  Buffers are not synchronized with their respective files, so changes done
--- 604,610 ----
  
  
  ;;; Commands for working with Ediff
! 
  (defun ediff-update-diffs ()
    "Recompute difference regions in buffers A, B, and C.
  Buffers are not synchronized with their respective files, so changes done
***************
*** 617,623 ****
            (y-or-n-p
             "Ancestor buffer will not be used.  Recompute diffs anyway? ")))
        (error "Recomputation of differences canceled"))
!       
    (let ((point-A (ediff-with-current-buffer ediff-buffer-A (point)))
        ;;(point-B (ediff-with-current-buffer ediff-buffer-B (point)))
        (tmp-buffer (get-buffer-create ediff-tmp-buffer))
--- 617,623 ----
            (y-or-n-p
             "Ancestor buffer will not be used.  Recompute diffs anyway? ")))
        (error "Recomputation of differences canceled"))
! 
    (let ((point-A (ediff-with-current-buffer ediff-buffer-A (point)))
        ;;(point-B (ediff-with-current-buffer ediff-buffer-B (point)))
        (tmp-buffer (get-buffer-create ediff-tmp-buffer))
***************
*** 643,656 ****
        (setq buf-C-file-name (file-name-nondirectory buf-C-file-name)))
  
      (ediff-unselect-and-select-difference -1)
!     
      (setq beg-A (ediff-overlay-start overl-A)
          beg-B (ediff-overlay-start overl-B)
          beg-C (ediff-overlay-start overl-C)
          end-A (ediff-overlay-end overl-A)
          end-B (ediff-overlay-end overl-B)
          end-C (ediff-overlay-end overl-C))
!         
      (if ediff-word-mode
        (progn
          (ediff-wordify beg-A end-A ediff-buffer-A tmp-buffer)
--- 643,656 ----
        (setq buf-C-file-name (file-name-nondirectory buf-C-file-name)))
  
      (ediff-unselect-and-select-difference -1)
! 
      (setq beg-A (ediff-overlay-start overl-A)
          beg-B (ediff-overlay-start overl-B)
          beg-C (ediff-overlay-start overl-C)
          end-A (ediff-overlay-end overl-A)
          end-B (ediff-overlay-end overl-B)
          end-C (ediff-overlay-end overl-C))
! 
      (if ediff-word-mode
        (progn
          (ediff-wordify beg-A end-A ediff-buffer-A tmp-buffer)
***************
*** 668,674 ****
        (if ediff-3way-job
          (setq file-C (ediff-make-temp-file ediff-buffer-C buf-C-file-name)))
        )
!       
      (ediff-clear-diff-vector 'ediff-difference-vector-A 'fine-diffs-also)
      (ediff-clear-diff-vector 'ediff-difference-vector-B 'fine-diffs-also)
      (ediff-clear-diff-vector 'ediff-difference-vector-C 'fine-diffs-also)
--- 668,674 ----
        (if ediff-3way-job
          (setq file-C (ediff-make-temp-file ediff-buffer-C buf-C-file-name)))
        )
! 
      (ediff-clear-diff-vector 'ediff-difference-vector-A 'fine-diffs-also)
      (ediff-clear-diff-vector 'ediff-difference-vector-B 'fine-diffs-also)
      (ediff-clear-diff-vector 'ediff-difference-vector-C 'fine-diffs-also)
***************
*** 681,687 ****
          ediff-state-of-merge nil)
  
      (setq ediff-killed-diffs-alist nil) ; invalidate saved killed diff regions
!     
      ;; In case of merge job, fool it into thinking that it is just doing
      ;; comparison
      (let ((ediff-setup-diff-regions-function 
ediff-setup-diff-regions-function)
--- 681,687 ----
          ediff-state-of-merge nil)
  
      (setq ediff-killed-diffs-alist nil) ; invalidate saved killed diff regions
! 
      ;; In case of merge job, fool it into thinking that it is just doing
      ;; comparison
      (let ((ediff-setup-diff-regions-function 
ediff-setup-diff-regions-function)
***************
*** 696,715 ****
                ediff-merge-with-ancestor-job nil
                ediff-job-name 'ediff-files3))
        (funcall ediff-setup-diff-regions-function file-A file-B file-C))
!           
      (setq ediff-number-of-differences (length ediff-difference-vector-A))
      (delete-file file-A)
      (delete-file file-B)
      (if file-C
        (delete-file file-C))
!       
      (if ediff-3way-job
        (ediff-set-state-of-all-diffs-in-all-buffers ediff-control-buffer))
!       
      (ediff-jump-to-difference (ediff-diff-at-point 'A point-A))
      (message "")
      ))
!     
  ;; Not bound to any key---to dangerous.  A user can do it if necessary.
  (defun ediff-revert-buffers-then-recompute-diffs (noconfirm)
    "Revert buffers A, B and C.  Then rerun Ediff on file A and file B."
--- 696,715 ----
                ediff-merge-with-ancestor-job nil
                ediff-job-name 'ediff-files3))
        (funcall ediff-setup-diff-regions-function file-A file-B file-C))
! 
      (setq ediff-number-of-differences (length ediff-difference-vector-A))
      (delete-file file-A)
      (delete-file file-B)
      (if file-C
        (delete-file file-C))
! 
      (if ediff-3way-job
        (ediff-set-state-of-all-diffs-in-all-buffers ediff-control-buffer))
! 
      (ediff-jump-to-difference (ediff-diff-at-point 'A point-A))
      (message "")
      ))
! 
  ;; Not bound to any key---to dangerous.  A user can do it if necessary.
  (defun ediff-revert-buffers-then-recompute-diffs (noconfirm)
    "Revert buffers A, B and C.  Then rerun Ediff on file A and file B."
***************
*** 746,752 ****
        (ediff-update-diffs))))
  
  
! ;; optional NO-REHIGHLIGHT says to not rehighlight buffers 
  (defun ediff-recenter (&optional no-rehighlight)
    "Bring the highlighted region of all buffers being compared into view.
  Reestablish the default three-window display."
--- 746,752 ----
        (ediff-update-diffs))))
  
  
! ;; optional NO-REHIGHLIGHT says to not rehighlight buffers
  (defun ediff-recenter (&optional no-rehighlight)
    "Bring the highlighted region of all buffers being compared into view.
  Reestablish the default three-window display."
***************
*** 763,769 ****
          (message ediff-KILLED-VITAL-BUFFER
                   (beep 1)))
        ))
!   
    ;; set visibility range appropriate to this invocation of Ediff.
    (ediff-visible-region)
    ;; raise
--- 763,769 ----
          (message ediff-KILLED-VITAL-BUFFER
                   (beep 1)))
        ))
! 
    ;; set visibility range appropriate to this invocation of Ediff.
    (ediff-visible-region)
    ;; raise
***************
*** 797,803 ****
           (not ediff-use-long-help-message)
           (not (ediff-frame-iconified-p ediff-control-frame)))
        (raise-frame ediff-control-frame))
!   
    ;; Redisplay whatever buffers are showing, if there is a selected difference
    (let ((control-frame ediff-control-frame)
        (control-buf ediff-control-buffer))
--- 797,803 ----
           (not ediff-use-long-help-message)
           (not (ediff-frame-iconified-p ediff-control-frame)))
        (raise-frame ediff-control-frame))
! 
    ;; Redisplay whatever buffers are showing, if there is a selected difference
    (let ((control-frame ediff-control-frame)
        (control-buf ediff-control-buffer))
***************
*** 808,822 ****
        (progn
          (or no-rehighlight
              (ediff-select-difference ediff-current-difference))
!         
          (ediff-recenter-one-window 'A)
          (ediff-recenter-one-window 'B)
          (if ediff-3way-job
              (ediff-recenter-one-window 'C))
!         
          (ediff-with-current-buffer control-buf
            (ediff-recenter-ancestor) ; check if ancestor is alive
!           
            (if (and (ediff-multiframe-setup-p)
                     (not ediff-use-long-help-message)
                     (not (ediff-frame-iconified-p ediff-control-frame)))
--- 808,822 ----
        (progn
          (or no-rehighlight
              (ediff-select-difference ediff-current-difference))
! 
          (ediff-recenter-one-window 'A)
          (ediff-recenter-one-window 'B)
          (if ediff-3way-job
              (ediff-recenter-one-window 'C))
! 
          (ediff-with-current-buffer control-buf
            (ediff-recenter-ancestor) ; check if ancestor is alive
! 
            (if (and (ediff-multiframe-setup-p)
                     (not ediff-use-long-help-message)
                     (not (ediff-frame-iconified-p ediff-control-frame)))
***************
*** 829,835 ****
      (ediff-restore-highlighting)
      (ediff-with-current-buffer control-buf (ediff-refresh-mode-lines))
      ))
!   
  ;; this function returns to the window it was called from
  ;; (which was the control window)
  (defun ediff-recenter-one-window (buf-type)
--- 829,835 ----
      (ediff-restore-highlighting)
      (ediff-with-current-buffer control-buf (ediff-refresh-mode-lines))
      ))
! 
  ;; this function returns to the window it was called from
  ;; (which was the control window)
  (defun ediff-recenter-one-window (buf-type)
***************
*** 837,843 ****
        ;; context must be saved before switching to windows A/B/C
        (let* ((ctl-wind (selected-window))
             (shift (ediff-overlay-start
!                    (ediff-get-value-according-to-buffer-type 
                      buf-type ediff-narrow-bounds)))
             (job-name ediff-job-name)
             (control-buf ediff-control-buffer)
--- 837,843 ----
        ;; context must be saved before switching to windows A/B/C
        (let* ((ctl-wind (selected-window))
             (shift (ediff-overlay-start
!                    (ediff-get-value-according-to-buffer-type
                      buf-type ediff-narrow-bounds)))
             (job-name ediff-job-name)
             (control-buf ediff-control-buffer)
***************
*** 845,851 ****
                           buf-type ediff-window-alist))
             (window (if (window-live-p (symbol-value window-name))
                         (symbol-value window-name))))
!       
        (if (and window ediff-windows-job)
            (set-window-start window shift))
        (if window
--- 845,851 ----
                           buf-type ediff-window-alist))
             (window (if (window-live-p (symbol-value window-name))
                         (symbol-value window-name))))
! 
        (if (and window ediff-windows-job)
            (set-window-start window shift))
        (if window
***************
*** 883,892 ****
        (select-window ctl-wind)
        )))
  
!       
  ;; This will have to be refined for 3way jobs
  (defun ediff-toggle-split ()
!   "Toggle vertical/horizontal window split. 
  Does nothing if file-A and file-B are in different frames."
    (interactive)
    (ediff-barf-if-not-control-buffer)
--- 883,892 ----
        (select-window ctl-wind)
        )))
  
! 
  ;; This will have to be refined for 3way jobs
  (defun ediff-toggle-split ()
!   "Toggle vertical/horizontal window split.
  Does nothing if file-A and file-B are in different frames."
    (interactive)
    (ediff-barf-if-not-control-buffer)
***************
*** 908,917 ****
                'split-window-vertically))
        (message "Buffers being compared are in different frames"))
      (ediff-recenter 'no-rehighlight)))
!   
  (defun ediff-toggle-hilit ()
    "Switch between highlighting using ASCII flags and highlighting using faces.
! On a dumb terminal, switches between ASCII highlighting and no highlighting." 
    (interactive)
    (ediff-barf-if-not-control-buffer)
  
--- 908,917 ----
                'split-window-vertically))
        (message "Buffers being compared are in different frames"))
      (ediff-recenter 'no-rehighlight)))
! 
  (defun ediff-toggle-hilit ()
    "Switch between highlighting using ASCII flags and highlighting using faces.
! On a dumb terminal, switches between ASCII highlighting and no highlighting."
    (interactive)
    (ediff-barf-if-not-control-buffer)
  
***************
*** 941,955 ****
         (setq ediff-use-faces            t
               ediff-highlighting-style  'face
               ediff-highlight-all-diffs  t)))
!   
    (if (and ediff-use-faces ediff-highlight-all-diffs)
        (ediff-paint-background-regions)
      (ediff-paint-background-regions 'unhighlight))
!   
    (ediff-unselect-and-select-difference
     ediff-current-difference 'select-only))
  
!   
  (defun ediff-toggle-autorefine ()
    "Toggle auto-refine mode."
    (interactive)
--- 941,955 ----
         (setq ediff-use-faces            t
               ediff-highlighting-style  'face
               ediff-highlight-all-diffs  t)))
! 
    (if (and ediff-use-faces ediff-highlight-all-diffs)
        (ediff-paint-background-regions)
      (ediff-paint-background-regions 'unhighlight))
! 
    (ediff-unselect-and-select-difference
     ediff-current-difference 'select-only))
  
! 
  (defun ediff-toggle-autorefine ()
    "Toggle auto-refine mode."
    (interactive)
***************
*** 981,990 ****
      (cond ((setq wind (ediff-get-visible-buffer-window ediff-ancestor-buffer))
           (raise-frame (window-frame wind)))
          (t (set-window-buffer ediff-window-C ediff-ancestor-buffer)))))
!       
  (defun ediff-make-or-kill-fine-diffs (arg)
    "Compute fine diffs.  With negative prefix arg, kill fine diffs.
! In both cases, operates on the current difference region." 
    (interactive "P")
    (ediff-barf-if-not-control-buffer)
    (cond ((eq arg '-)
--- 981,990 ----
      (cond ((setq wind (ediff-get-visible-buffer-window ediff-ancestor-buffer))
           (raise-frame (window-frame wind)))
          (t (set-window-buffer ediff-window-C ediff-ancestor-buffer)))))
! 
  (defun ediff-make-or-kill-fine-diffs (arg)
    "Compute fine diffs.  With negative prefix arg, kill fine diffs.
! In both cases, operates on the current difference region."
    (interactive "P")
    (ediff-barf-if-not-control-buffer)
    (cond ((eq arg '-)
***************
*** 992,999 ****
        ((and (numberp arg) (< arg 0))
         (ediff-clear-fine-differences ediff-current-difference))
        (t (ediff-make-fine-diffs))))
!        
!   
  (defun ediff-toggle-help ()
    "Toggle short/long help message."
    (interactive)
--- 992,999 ----
        ((and (numberp arg) (< arg 0))
         (ediff-clear-fine-differences ediff-current-difference))
        (t (ediff-make-fine-diffs))))
! 
! 
  (defun ediff-toggle-help ()
    "Toggle short/long help message."
    (interactive)
***************
*** 1007,1017 ****
    (if (and ediff-use-long-help-message (ediff-multiframe-setup-p))
        (setq ediff-prefer-iconified-control-frame
            (ediff-frame-iconified-p ediff-control-frame)))
!           
    (setq ediff-window-config-saved "") ; force redisplay
    (ediff-recenter 'no-rehighlight))
!   
!   
  ;; If BUF, this is the buffer to toggle, not current buffer.
  (defun ediff-toggle-read-only (&optional buf)
    "Toggle read-only in current buffer.
--- 1007,1017 ----
    (if (and ediff-use-long-help-message (ediff-multiframe-setup-p))
        (setq ediff-prefer-iconified-control-frame
            (ediff-frame-iconified-p ediff-control-frame)))
! 
    (setq ediff-window-config-saved "") ; force redisplay
    (ediff-recenter 'no-rehighlight))
! 
! 
  ;; If BUF, this is the buffer to toggle, not current buffer.
  (defun ediff-toggle-read-only (&optional buf)
    "Toggle read-only in current buffer.
***************
*** 1025,1031 ****
      (or buf (ediff-recenter))
      (or buf
        (setq buf (ediff-get-buffer buf-type)))
!             
      (ediff-with-current-buffer buf     ; eval in buf A/B/C
        (let* ((file (buffer-file-name buf))
             (file-writable (and file
--- 1025,1031 ----
      (or buf (ediff-recenter))
      (or buf
        (setq buf (ediff-get-buffer buf-type)))
! 
      (ediff-with-current-buffer buf     ; eval in buf A/B/C
        (let* ((file (buffer-file-name buf))
             (file-writable (and file
***************
*** 1065,1078 ****
                   (message
                    "Boy, this is risky! Don't modify this file...")
                   (sit-for 3)))) ; let the user see the warning
!       (if (and toggle-ro-cmd 
                 (string-match "toggle-read-only" (symbol-name toggle-ro-cmd)))
            (save-excursion
              (save-window-excursion
                (select-window (ediff-get-visible-buffer-window buf))
                (command-execute toggle-ro-cmd)))
          (error "Don't know how to toggle read-only in buffer %S" buf))
!       
        ;; Check if we made the current buffer updatable, but its file is RO.
        ;; Signal a warning in this case.
        (if (and file (not buffer-read-only)
--- 1065,1078 ----
                   (message
                    "Boy, this is risky! Don't modify this file...")
                   (sit-for 3)))) ; let the user see the warning
!       (if (and toggle-ro-cmd
                 (string-match "toggle-read-only" (symbol-name toggle-ro-cmd)))
            (save-excursion
              (save-window-excursion
                (select-window (ediff-get-visible-buffer-window buf))
                (command-execute toggle-ro-cmd)))
          (error "Don't know how to toggle read-only in buffer %S" buf))
! 
        ;; Check if we made the current buffer updatable, but its file is RO.
        ;; Signal a warning in this case.
        (if (and file (not buffer-read-only)
***************
*** 1095,1101 ****
               (ediff-abbreviate-file-name file))))
        (ediff-with-current-buffer buf
          (command-execute checkout-function)))))
!          
  
  ;; This is a simple-minded check for whether a file is under version control.
  ;; If file,v exists but file doesn't, this file is considered to be not 
checked
--- 1095,1101 ----
               (ediff-abbreviate-file-name file))))
        (ediff-with-current-buffer buf
          (command-execute checkout-function)))))
! 
  
  ;; This is a simple-minded check for whether a file is under version control.
  ;; If file,v exists but file doesn't, this file is considered to be not 
checked
***************
*** 1131,1137 ****
             ;; XEmacs has no vc-state
             (vc-locking-user file))
           )))
!   
  (defsubst ediff-file-checked-in-p (file)
    (and (featurep 'vc-hooks)
         ;; CVS files are considered not checked in
--- 1131,1137 ----
             ;; XEmacs has no vc-state
             (vc-locking-user file))
           )))
! 
  (defsubst ediff-file-checked-in-p (file)
    (and (featurep 'vc-hooks)
         ;; CVS files are considered not checked in
***************
*** 1151,1157 ****
    (if (featurep 'jka-compr)
        (string-match (jka-compr-build-file-regexp) file)))
  
!       
  (defun ediff-swap-buffers ()
    "Rotate the display of buffers A, B, and C."
    (interactive)
--- 1151,1157 ----
    (if (featurep 'jka-compr)
        (string-match (jka-compr-build-file-regexp) file)))
  
! 
  (defun ediff-swap-buffers ()
    "Rotate the display of buffers A, B, and C."
    (interactive)
***************
*** 1180,1186 ****
                  ediff-buffer-B buf)
          (setq ediff-buffer-A ediff-buffer-B
                ediff-buffer-B buf))
!               
        ;; swap saved buffer characteristics
        (if ediff-3way-comparison-job
            (setq ediff-buffer-values-orig-A ediff-buffer-values-orig-C
--- 1180,1186 ----
                  ediff-buffer-B buf)
          (setq ediff-buffer-A ediff-buffer-B
                ediff-buffer-B buf))
! 
        ;; swap saved buffer characteristics
        (if ediff-3way-comparison-job
            (setq ediff-buffer-values-orig-A ediff-buffer-values-orig-C
***************
*** 1188,1194 ****
                  ediff-buffer-values-orig-B values)
          (setq ediff-buffer-values-orig-A ediff-buffer-values-orig-B
                ediff-buffer-values-orig-B values))
!       
        ;; swap diff vectors
        (if ediff-3way-comparison-job
            (setq ediff-difference-vector-A ediff-difference-vector-C
--- 1188,1194 ----
                  ediff-buffer-values-orig-B values)
          (setq ediff-buffer-values-orig-A ediff-buffer-values-orig-B
                ediff-buffer-values-orig-B values))
! 
        ;; swap diff vectors
        (if ediff-3way-comparison-job
            (setq ediff-difference-vector-A ediff-difference-vector-C
***************
*** 1196,1202 ****
                  ediff-difference-vector-B diff-vec)
          (setq ediff-difference-vector-A ediff-difference-vector-B
                ediff-difference-vector-B diff-vec))
!               
        ;; swap hide/focus regexp
        (if ediff-3way-comparison-job
            (setq ediff-regexp-hide-A ediff-regexp-hide-C
--- 1196,1202 ----
                  ediff-difference-vector-B diff-vec)
          (setq ediff-difference-vector-A ediff-difference-vector-B
                ediff-difference-vector-B diff-vec))
! 
        ;; swap hide/focus regexp
        (if ediff-3way-comparison-job
            (setq ediff-regexp-hide-A ediff-regexp-hide-C
***************
*** 1209,1215 ****
                ediff-regexp-hide-B hide-regexp
                ediff-regexp-focus-A ediff-regexp-focus-B
                ediff-regexp-focus-B focus-regexp))
!       
        ;; The following is needed for XEmacs, since there one can't move
        ;; overlay to another buffer.  In Emacs, this swap is redundant.
        (if (ediff-has-face-support-p)
--- 1209,1215 ----
                ediff-regexp-hide-B hide-regexp
                ediff-regexp-focus-A ediff-regexp-focus-B
                ediff-regexp-focus-B focus-regexp))
! 
        ;; The following is needed for XEmacs, since there one can't move
        ;; overlay to another buffer.  In Emacs, this swap is redundant.
        (if (ediff-has-face-support-p)
***************
*** 1219,1225 ****
                      ediff-current-diff-overlay-B overlay)
              (setq ediff-current-diff-overlay-A ediff-current-diff-overlay-B
                    ediff-current-diff-overlay-B overlay)))
!                   
        ;; swap wide bounds
        (setq ediff-wide-bounds
              (cond (ediff-3way-comparison-job
--- 1219,1225 ----
                      ediff-current-diff-overlay-B overlay)
              (setq ediff-current-diff-overlay-A ediff-current-diff-overlay-B
                    ediff-current-diff-overlay-B overlay)))
! 
        ;; swap wide bounds
        (setq ediff-wide-bounds
              (cond (ediff-3way-comparison-job
***************
*** 1230,1236 ****
                     (list (nth 1 ediff-wide-bounds)
                           (nth 0 ediff-wide-bounds)
                           (nth 2 ediff-wide-bounds)))
!                   (t 
                     (list (nth 1 ediff-wide-bounds)
                           (nth 0 ediff-wide-bounds)))))
        ;; swap narrow bounds
--- 1230,1236 ----
                     (list (nth 1 ediff-wide-bounds)
                           (nth 0 ediff-wide-bounds)
                           (nth 2 ediff-wide-bounds)))
!                   (t
                     (list (nth 1 ediff-wide-bounds)
                           (nth 0 ediff-wide-bounds)))))
        ;; swap narrow bounds
***************
*** 1243,1249 ****
                     (list (nth 1 ediff-narrow-bounds)
                           (nth 0 ediff-narrow-bounds)
                           (nth 2 ediff-narrow-bounds)))
!                   (t 
                     (list (nth 1 ediff-narrow-bounds)
                           (nth 0 ediff-narrow-bounds)))))
        (if wide-visibility-p
--- 1243,1249 ----
                     (list (nth 1 ediff-narrow-bounds)
                           (nth 0 ediff-narrow-bounds)
                           (nth 2 ediff-narrow-bounds)))
!                   (t
                     (list (nth 1 ediff-narrow-bounds)
                           (nth 0 ediff-narrow-bounds)))))
        (if wide-visibility-p
***************
*** 1254,1260 ****
        (ediff-set-state-of-all-diffs-in-all-buffers ediff-control-buffer))
    (ediff-recenter 'no-rehighlight)
    )
!   
  
  (defun ediff-toggle-wide-display ()
    "Toggle wide/regular display.
--- 1254,1260 ----
        (ediff-set-state-of-all-diffs-in-all-buffers ediff-control-buffer))
    (ediff-recenter 'no-rehighlight)
    )
! 
  
  (defun ediff-toggle-wide-display ()
    "Toggle wide/regular display.
***************
*** 1283,1289 ****
        (ediff-with-current-buffer ctl-buf
        (setq ediff-window-B nil) ; force update of window config
        (ediff-recenter 'no-rehighlight)))))
!       
  ;;;###autoload
  (defun ediff-toggle-multiframe ()
    "Switch from multiframe display to single-frame display and back.
--- 1283,1289 ----
        (ediff-with-current-buffer ctl-buf
        (setq ediff-window-B nil) ; force update of window config
        (ediff-recenter 'no-rehighlight)))))
! 
  ;;;###autoload
  (defun ediff-toggle-multiframe ()
    "Switch from multiframe display to single-frame display and back.
***************
*** 1328,1334 ****
            (ediff-kill-bottom-toolbar))
        ;; do this only after killing the toolbar
        (setq ediff-use-toolbar-p (not ediff-use-toolbar-p))
!       
        (mapcar (lambda(buf)
                  (ediff-with-current-buffer buf
                    ;; force redisplay
--- 1328,1334 ----
            (ediff-kill-bottom-toolbar))
        ;; do this only after killing the toolbar
        (setq ediff-use-toolbar-p (not ediff-use-toolbar-p))
! 
        (mapcar (lambda(buf)
                  (ediff-with-current-buffer buf
                    ;; force redisplay
***************
*** 1346,1352 ****
    ;;(selected-frame).
    ;; The problem with this is that any previous bottom-toolbar
    ;; will not re-appear after our cleanup here.  Is there a way
!   ;; to do "push" and "pop" toolbars ?  --marcpa  
    (if (ediff-use-toolbar-p)
        (ediff-cond-compile-for-xemacs-or-emacs
         (progn ; xemacs
--- 1346,1352 ----
    ;;(selected-frame).
    ;; The problem with this is that any previous bottom-toolbar
    ;; will not re-appear after our cleanup here.  Is there a way
!   ;; to do "push" and "pop" toolbars ?  --marcpa
    (if (ediff-use-toolbar-p)
        (ediff-cond-compile-for-xemacs-or-emacs
         (progn ; xemacs
***************
*** 1370,1376 ****
                   bottom-toolbar
                   (list frame (if (ediff-3way-comparison-job)
                                   ediff-toolbar-3way ediff-toolbar)))
!                 (set-specifier bottom-toolbar-visible-p (list frame t)) 
                  (set-specifier bottom-toolbar-height
                                 (list frame ediff-toolbar-height)))
                nil ; emacs
--- 1370,1376 ----
                   bottom-toolbar
                   (list frame (if (ediff-3way-comparison-job)
                                   ediff-toolbar-3way ediff-toolbar)))
!                 (set-specifier bottom-toolbar-visible-p (list frame t))
                  (set-specifier bottom-toolbar-height
                                 (list frame ediff-toolbar-height)))
                nil ; emacs
***************
*** 1384,1390 ****
               )
              ))
      ))
!              
  ;; Merging
  
  (defun ediff-toggle-show-clashes-only ()
--- 1384,1390 ----
               )
              ))
      ))
! 
  ;; Merging
  
  (defun ediff-toggle-show-clashes-only ()
***************
*** 1409,1415 ****
      (message "Showing regions that differ from default setting")))
  
  
!              
  ;; Widening/narrowing
  
  (defun ediff-toggle-narrow-region ()
--- 1409,1415 ----
      (message "Showing regions that differ from default setting")))
  
  
! 
  ;; Widening/narrowing
  
  (defun ediff-toggle-narrow-region ()
***************
*** 1422,1432 ****
        (setq ediff-visible-bounds ediff-narrow-bounds)
      (setq ediff-visible-bounds ediff-wide-bounds))
    (ediff-recenter 'no-rehighlight))
!   
  ;; Narrow bufs A/B/C to ediff-visible-bounds.  If this is currently set to
  ;; ediff-wide-bounds, then this actually widens.
  ;; This function does nothing if job-name is not
! ;; ediff-regions-wordwise/linewise or ediff-windows-wordwise/linewise. 
  ;; Does nothing if buffer-A  = buffer-B since we can't narrow
  ;; to two different regions in one buffer.
  (defun ediff-visible-region ()
--- 1422,1432 ----
        (setq ediff-visible-bounds ediff-narrow-bounds)
      (setq ediff-visible-bounds ediff-wide-bounds))
    (ediff-recenter 'no-rehighlight))
! 
  ;; Narrow bufs A/B/C to ediff-visible-bounds.  If this is currently set to
  ;; ediff-wide-bounds, then this actually widens.
  ;; This function does nothing if job-name is not
! ;; ediff-regions-wordwise/linewise or ediff-windows-wordwise/linewise.
  ;; Does nothing if buffer-A  = buffer-B since we can't narrow
  ;; to two different regions in one buffer.
  (defun ediff-visible-region ()
***************
*** 1453,1465 ****
        (if (ediff-overlay-buffer overl-B)
            (narrow-to-region
             (ediff-overlay-start overl-B) (ediff-overlay-end overl-B))))
!       
        (if (and ediff-3way-job (ediff-overlay-buffer overl-C))
          (ediff-with-current-buffer ediff-buffer-C
            (narrow-to-region
             (ediff-overlay-start overl-C) (ediff-overlay-end overl-C))))
        )))
!   
  
  ;; Window scrolling operations
  
--- 1453,1465 ----
        (if (ediff-overlay-buffer overl-B)
            (narrow-to-region
             (ediff-overlay-start overl-B) (ediff-overlay-end overl-B))))
! 
        (if (and ediff-3way-job (ediff-overlay-buffer overl-C))
          (ediff-with-current-buffer ediff-buffer-C
            (narrow-to-region
             (ediff-overlay-start overl-C) (ediff-overlay-end overl-C))))
        )))
! 
  
  ;; Window scrolling operations
  
***************
*** 1468,1474 ****
  ;; Usually, errors come from scrolling off the
  ;; beginning or end of the buffer, and this gives error messages.
  (defun ediff-operate-on-windows (operation arg)
!        
    ;; make sure windows aren't dead
    (if (not (and (window-live-p ediff-window-A) (window-live-p 
ediff-window-B)))
        (ediff-recenter 'no-rehighlight))
--- 1468,1474 ----
  ;; Usually, errors come from scrolling off the
  ;; beginning or end of the buffer, and this gives error messages.
  (defun ediff-operate-on-windows (operation arg)
! 
    ;; make sure windows aren't dead
    (if (not (and (window-live-p ediff-window-A) (window-live-p 
ediff-window-B)))
        (ediff-recenter 'no-rehighlight))
***************
*** 1477,1483 ****
                (or (not ediff-3way-job) ediff-buffer-C)
                ))
        (error ediff-KILLED-VITAL-BUFFER))
!       
    (let* ((wind (selected-window))
         (wind-A ediff-window-A)
         (wind-B ediff-window-B)
--- 1477,1483 ----
                (or (not ediff-3way-job) ediff-buffer-C)
                ))
        (error ediff-KILLED-VITAL-BUFFER))
! 
    (let* ((wind (selected-window))
         (wind-A ediff-window-A)
         (wind-B ediff-window-B)
***************
*** 1487,1493 ****
         (three-way ediff-3way-job)
         (coefC (if three-way
                    (ediff-get-region-size-coefficient 'C operation))))
!            
      (select-window wind-A)
      (condition-case nil
        (funcall operation (round (* coefA arg)))
--- 1487,1493 ----
         (three-way ediff-3way-job)
         (coefC (if three-way
                    (ediff-get-region-size-coefficient 'C operation))))
! 
      (select-window wind-A)
      (condition-case nil
        (funcall operation (round (* coefA arg)))
***************
*** 1510,1516 ****
  the one half of the height of window-A."
    (interactive "P")
    (ediff-barf-if-not-control-buffer)
!   
    ;; make sure windows aren't dead
    (if (not (and (window-live-p ediff-window-A) (window-live-p 
ediff-window-B)))
        (ediff-recenter 'no-rehighlight))
--- 1510,1516 ----
  the one half of the height of window-A."
    (interactive "P")
    (ediff-barf-if-not-control-buffer)
! 
    ;; make sure windows aren't dead
    (if (not (and (window-live-p ediff-window-A) (window-live-p 
ediff-window-B)))
        (ediff-recenter 'no-rehighlight))
***************
*** 1520,1529 ****
                    (ediff-buffer-live-p ediff-buffer-C))
                ))
        (error ediff-KILLED-VITAL-BUFFER))
!       
    (ediff-operate-on-windows
     (if (memq last-command-char '(?v ?\C-v))
!        'scroll-up 
       'scroll-down)
     ;; calculate argument to scroll-up/down
     ;; if there is an explicit argument
--- 1520,1529 ----
                    (ediff-buffer-live-p ediff-buffer-C))
                ))
        (error ediff-KILLED-VITAL-BUFFER))
! 
    (ediff-operate-on-windows
     (if (memq last-command-char '(?v ?\C-v))
!        'scroll-up
       'scroll-down)
     ;; calculate argument to scroll-up/down
     ;; if there is an explicit argument
***************
*** 1532,1538 ****
         (prefix-numeric-value arg)
       ;; if not, see if we can determine a default amount (the window height)
       (let (default-amount)
!        (setq default-amount 
             (- (/ (min (window-height ediff-window-A)
                        (window-height ediff-window-B)
                        (if ediff-3way-job
--- 1532,1538 ----
         (prefix-numeric-value arg)
       ;; if not, see if we can determine a default amount (the window height)
       (let (default-amount)
!        (setq default-amount
             (- (/ (min (window-height ediff-window-A)
                        (window-height ediff-window-B)
                        (if ediff-3way-job
***************
*** 1554,1560 ****
  the width of the A/B/C windows."
    (interactive "P")
    (ediff-barf-if-not-control-buffer)
!   
    ;; make sure windows aren't dead
    (if (not (and (window-live-p ediff-window-A) (window-live-p 
ediff-window-B)))
        (ediff-recenter 'no-rehighlight))
--- 1554,1560 ----
  the width of the A/B/C windows."
    (interactive "P")
    (ediff-barf-if-not-control-buffer)
! 
    ;; make sure windows aren't dead
    (if (not (and (window-live-p ediff-window-A) (window-live-p 
ediff-window-B)))
        (ediff-recenter 'no-rehighlight))
***************
*** 1564,1577 ****
                    (ediff-buffer-live-p ediff-buffer-C))
                ))
        (error ediff-KILLED-VITAL-BUFFER))
!     
    (ediff-operate-on-windows
     ;; Arrange for scroll-left and scroll-right being called
     ;; interactively so that they set the window's min_hscroll.
     ;; Otherwise, automatic hscrolling will undo the effect of
     ;; hscrolling.
     (if (= last-command-char ?<)
!        (lambda (arg) 
         (let ((prefix-arg arg))
           (call-interactively 'scroll-left)))
       (lambda (arg)
--- 1564,1577 ----
                    (ediff-buffer-live-p ediff-buffer-C))
                ))
        (error ediff-KILLED-VITAL-BUFFER))
! 
    (ediff-operate-on-windows
     ;; Arrange for scroll-left and scroll-right being called
     ;; interactively so that they set the window's min_hscroll.
     ;; Otherwise, automatic hscrolling will undo the effect of
     ;; hscrolling.
     (if (= last-command-char ?<)
!        (lambda (arg)
         (let ((prefix-arg arg))
           (call-interactively 'scroll-left)))
       (lambda (arg)
***************
*** 1606,1612 ****
  
  ;;BEG, END show the region to be positioned.
  ;;JOB-NAME holds ediff-job-name.  The ediff-windows job positions regions
! ;;differently. 
  (defun ediff-position-region (beg end pos job-name)
    (if (> end (point-max))
        (setq end (point-max)))
--- 1606,1612 ----
  
  ;;BEG, END show the region to be positioned.
  ;;JOB-NAME holds ediff-job-name.  The ediff-windows job positions regions
! ;;differently.
  (defun ediff-position-region (beg end pos job-name)
    (if (> end (point-max))
        (setq end (point-max)))
***************
*** 1706,1712 ****
  
  
  (defun ediff-next-difference (&optional arg)
!   "Advance to the next difference. 
  With a prefix argument, go forward that many differences."
    (interactive "p")
    (ediff-barf-if-not-control-buffer)
--- 1706,1712 ----
  
  
  (defun ediff-next-difference (&optional arg)
!   "Advance to the next difference.
  With a prefix argument, go forward that many differences."
    (interactive "p")
    (ediff-barf-if-not-control-buffer)
***************
*** 1714,1726 ****
        (let ((n (min ediff-number-of-differences
                    (+ ediff-current-difference (or arg 1))))
            non-clash-skip skip-changed regexp-skip)
!           
        (ediff-visible-region)
        (or (>= n ediff-number-of-differences)
            (setq regexp-skip (funcall ediff-skip-diff-region-function n))
            ;; this won't exec if regexp-skip is t
            (setq non-clash-skip (ediff-merge-region-is-non-clash n)
!                 skip-changed 
                  (ediff-skip-merge-region-if-changed-from-default-p n))
            (ediff-install-fine-diff-if-necessary n))
        ;; Skip loop
--- 1714,1726 ----
        (let ((n (min ediff-number-of-differences
                    (+ ediff-current-difference (or arg 1))))
            non-clash-skip skip-changed regexp-skip)
! 
        (ediff-visible-region)
        (or (>= n ediff-number-of-differences)
            (setq regexp-skip (funcall ediff-skip-diff-region-function n))
            ;; this won't exec if regexp-skip is t
            (setq non-clash-skip (ediff-merge-region-is-non-clash n)
!                 skip-changed
                  (ediff-skip-merge-region-if-changed-from-default-p n))
            (ediff-install-fine-diff-if-necessary n))
        ;; Skip loop
***************
*** 1756,1775 ****
      (error "At end of the difference list")))
  
  (defun ediff-previous-difference (&optional arg)
!   "Go to the previous difference. 
  With a prefix argument, go back that many differences."
    (interactive "p")
    (ediff-barf-if-not-control-buffer)
    (if (> ediff-current-difference -1)
        (let ((n (max -1 (- ediff-current-difference (or arg 1))))
            non-clash-skip skip-changed regexp-skip)
!           
        (ediff-visible-region)
        (or (< n 0)
            (setq regexp-skip (funcall ediff-skip-diff-region-function n))
            ;; this won't exec if regexp-skip is t
            (setq non-clash-skip (ediff-merge-region-is-non-clash n)
!                 skip-changed 
                  (ediff-skip-merge-region-if-changed-from-default-p n))
            (ediff-install-fine-diff-if-necessary n))
        (while (and (> n -1)
--- 1756,1775 ----
      (error "At end of the difference list")))
  
  (defun ediff-previous-difference (&optional arg)
!   "Go to the previous difference.
  With a prefix argument, go back that many differences."
    (interactive "p")
    (ediff-barf-if-not-control-buffer)
    (if (> ediff-current-difference -1)
        (let ((n (max -1 (- ediff-current-difference (or arg 1))))
            non-clash-skip skip-changed regexp-skip)
! 
        (ediff-visible-region)
        (or (< n 0)
            (setq regexp-skip (funcall ediff-skip-diff-region-function n))
            ;; this won't exec if regexp-skip is t
            (setq non-clash-skip (ediff-merge-region-is-non-clash n)
!                 skip-changed
                  (ediff-skip-merge-region-if-changed-from-default-p n))
            (ediff-install-fine-diff-if-necessary n))
        (while (and (> n -1)
***************
*** 1822,1828 ****
        (ediff-unselect-and-select-difference difference-number)
      (error ediff-BAD-DIFF-NUMBER
           this-command (1+ difference-number) ediff-number-of-differences)))
!       
  (defun ediff-jump-to-difference-at-point (arg)
    "Go to difference closest to the point in buffer A, B, or C.
  The buffer depends on last command character \(a, b, or c\) that invoked this
--- 1822,1828 ----
        (ediff-unselect-and-select-difference difference-number)
      (error ediff-BAD-DIFF-NUMBER
           this-command (1+ difference-number) ediff-number-of-differences)))
! 
  (defun ediff-jump-to-difference-at-point (arg)
    "Go to difference closest to the point in buffer A, B, or C.
  The buffer depends on last command character \(a, b, or c\) that invoked this
***************
*** 1877,1887 ****
          (select-window ctl-wind)
          ))
      ))
!       
!       
  ;; find region most related to the current point position (or POS, if given)
  ;; returns diff number as seen by the user (i.e., 1+ the internal
! ;; representation) 
  ;; The optional argument WHICH-DIFF can be `after' or `before'.  If `after',
  ;; find the diff after the point.  If `before', find the diff before the
  ;; point.  If the point is inside a diff, return that diff.
--- 1877,1887 ----
          (select-window ctl-wind)
          ))
      ))
! 
! 
  ;; find region most related to the current point position (or POS, if given)
  ;; returns diff number as seen by the user (i.e., 1+ the internal
! ;; representation)
  ;; The optional argument WHICH-DIFF can be `after' or `before'.  If `after',
  ;; find the diff after the point.  If `before', find the diff before the
  ;; point.  If the point is inside a diff, return that diff.
***************
*** 1894,1900 ****
        (prev-end 0)
        (beg 0)
        (end 0))
!       
      (ediff-with-current-buffer buffer
        (setq pos (or pos (point)))
        (while (and (or (< pos prev-beg) (> pos beg))
--- 1894,1900 ----
        (prev-end 0)
        (beg 0)
        (end 0))
! 
      (ediff-with-current-buffer buffer
        (setq pos (or pos (point)))
        (while (and (or (< pos prev-beg) (> pos beg))
***************
*** 1905,1911 ****
        (setq beg (ediff-get-diff-posn buf-type 'beg diff-no ctl-buffer)
              end (ediff-get-diff-posn buf-type 'end diff-no ctl-buffer))
        )
!       
        ;; boost diff-no by 1, if past the last diff region
        (if (and (memq which-diff '(after before))
               (> pos beg) (= diff-no max-dif-num))
--- 1905,1911 ----
        (setq beg (ediff-get-diff-posn buf-type 'beg diff-no ctl-buffer)
              end (ediff-get-diff-posn buf-type 'end diff-no ctl-buffer))
        )
! 
        ;; boost diff-no by 1, if past the last diff region
        (if (and (memq which-diff '(after before))
               (> pos beg) (= diff-no max-dif-num))
***************
*** 2003,2022 ****
         messg
         ediff-verbose-p
         reg-to-delete reg-to-delete-beg reg-to-delete-end)
!       
      (setq reg-to-delete-beg
          (ediff-get-diff-posn to-buf-type 'beg n ctrl-buf))
      (setq reg-to-delete-end
          (ediff-get-diff-posn to-buf-type 'end n ctrl-buf))
!         
      (if reg-to-copy
        (setq from-buf-type nil)
        (setq reg-to-copy (ediff-get-region-contents n from-buf-type ctrl-buf)))
!     
      (setq reg-to-delete (ediff-get-region-contents
                         n to-buf-type ctrl-buf
                         reg-to-delete-beg reg-to-delete-end))
!     
      (if (string= reg-to-delete reg-to-copy)
        (setq saved-p nil) ; don't copy identical buffers
        ;; seems ok to copy
--- 2003,2022 ----
         messg
         ediff-verbose-p
         reg-to-delete reg-to-delete-beg reg-to-delete-end)
! 
      (setq reg-to-delete-beg
          (ediff-get-diff-posn to-buf-type 'beg n ctrl-buf))
      (setq reg-to-delete-end
          (ediff-get-diff-posn to-buf-type 'end n ctrl-buf))
! 
      (if reg-to-copy
        (setq from-buf-type nil)
        (setq reg-to-copy (ediff-get-region-contents n from-buf-type ctrl-buf)))
! 
      (setq reg-to-delete (ediff-get-region-contents
                         n to-buf-type ctrl-buf
                         reg-to-delete-beg reg-to-delete-end))
! 
      (if (string= reg-to-delete reg-to-copy)
        (setq saved-p nil) ; don't copy identical buffers
        ;; seems ok to copy
***************
*** 2026,2040 ****
                (ediff-with-current-buffer to-buf
                  ;; to prevent flags from interfering if buffer is writable
                  (let ((inhibit-read-only (null buffer-read-only)))
!                   
                    (goto-char reg-to-delete-end)
                    (insert reg-to-copy)
!                   
                    (if (> reg-to-delete-end reg-to-delete-beg)
                        (kill-region reg-to-delete-beg reg-to-delete-end))
                    ))
                (or batch-invocation
!                   (setq 
                     messg
                     (ediff-save-diff-region n to-buf-type reg-to-delete))))
            (error (message "ediff-copy-diff: %s %s"
--- 2026,2040 ----
                (ediff-with-current-buffer to-buf
                  ;; to prevent flags from interfering if buffer is writable
                  (let ((inhibit-read-only (null buffer-read-only)))
! 
                    (goto-char reg-to-delete-end)
                    (insert reg-to-copy)
! 
                    (if (> reg-to-delete-end reg-to-delete-beg)
                        (kill-region reg-to-delete-beg reg-to-delete-end))
                    ))
                (or batch-invocation
!                   (setq
                     messg
                     (ediff-save-diff-region n to-buf-type reg-to-delete))))
            (error (message "ediff-copy-diff: %s %s"
***************
*** 2045,2051 ****
                   (setq saved-p nil)
                   )))
        )
!     
      ;; adjust state of difference in case 3-way and diff was copied ok
      (if (and saved-p three-way)
        (ediff-set-state-of-diff-in-all-buffers n ctrl-buf))
--- 2045,2051 ----
                   (setq saved-p nil)
                   )))
        )
! 
      ;; adjust state of difference in case 3-way and diff was copied ok
      (if (and saved-p three-way)
        (ediff-set-state-of-diff-in-all-buffers n ctrl-buf))
***************
*** 2056,2064 ****
        ;; before reinserting flags (and thus before ediff-recenter).
        (if (and saved-p three-way)
          (ediff-clear-fine-differences n))
!       
        (ediff-refresh-mode-lines)
!       
        ;; For diff2 jobs, don't recompute fine diffs, since we know there
        ;; aren't any.  So we clear diffs after ediff-recenter.
        (if (and saved-p (not three-way))
--- 2056,2064 ----
        ;; before reinserting flags (and thus before ediff-recenter).
        (if (and saved-p three-way)
          (ediff-clear-fine-differences n))
! 
        (ediff-refresh-mode-lines)
! 
        ;; For diff2 jobs, don't recompute fine diffs, since we know there
        ;; aren't any.  So we clear diffs after ediff-recenter.
        (if (and saved-p (not three-way))
***************
*** 2067,2073 ****
        ;; by the user
        (message messg))
      ))
!      
  ;; Save Nth diff of buffer BUF-TYPE \(A, B, or C\).
  ;; That is to say, the Nth diff on the `ediff-killed-diffs-alist'.  REG
  ;; is the region to save.  It is redundant here, but is passed anyway, for
--- 2067,2073 ----
        ;; by the user
        (message messg))
      ))
! 
  ;; Save Nth diff of buffer BUF-TYPE \(A, B, or C\).
  ;; That is to say, the Nth diff on the `ediff-killed-diffs-alist'.  REG
  ;; is the region to save.  It is redundant here, but is passed anyway, for
***************
*** 2076,2082 ****
    (let* ((n-th-diff-saved (assoc n ediff-killed-diffs-alist))
         (buf (ediff-get-buffer buf-type))
         (this-buf-n-th-diff-saved (assoc buf (cdr n-th-diff-saved))))
!        
      (if this-buf-n-th-diff-saved
        ;; either nothing saved for n-th diff and buffer or we OK'ed
        ;; overriding
--- 2076,2082 ----
    (let* ((n-th-diff-saved (assoc n ediff-killed-diffs-alist))
         (buf (ediff-get-buffer buf-type))
         (this-buf-n-th-diff-saved (assoc buf (cdr n-th-diff-saved))))
! 
      (if this-buf-n-th-diff-saved
        ;; either nothing saved for n-th diff and buffer or we OK'ed
        ;; overriding
***************
*** 2091,2112 ****
             (if ediff-merge-job
                 "" (downcase (symbol-name buf-type))))
      ))
!     
  ;; Test if saving Nth difference region of buffer BUF-TYPE is possible.
  (defun ediff-test-save-region (n buf-type)
    (let* ((n-th-diff-saved (assoc n ediff-killed-diffs-alist))
         (buf (ediff-get-buffer buf-type))
         (this-buf-n-th-diff-saved (assoc buf (cdr n-th-diff-saved))))
!        
      (if this-buf-n-th-diff-saved
        (if (yes-or-no-p
!            (format 
              "You've previously copied diff region %d to buffer %S.  Confirm "
              (1+ n) buf-type))
            t
          (error "Quit"))
        t)))
!         
  (defun ediff-pop-diff (n buf-type)
    "Pop last killed Nth diff region from buffer BUF-TYPE."
    (let* ((n-th-record (assoc n ediff-killed-diffs-alist))
--- 2091,2112 ----
             (if ediff-merge-job
                 "" (downcase (symbol-name buf-type))))
      ))
! 
  ;; Test if saving Nth difference region of buffer BUF-TYPE is possible.
  (defun ediff-test-save-region (n buf-type)
    (let* ((n-th-diff-saved (assoc n ediff-killed-diffs-alist))
         (buf (ediff-get-buffer buf-type))
         (this-buf-n-th-diff-saved (assoc buf (cdr n-th-diff-saved))))
! 
      (if this-buf-n-th-diff-saved
        (if (yes-or-no-p
!            (format
              "You've previously copied diff region %d to buffer %S.  Confirm "
              (1+ n) buf-type))
            t
          (error "Quit"))
        t)))
! 
  (defun ediff-pop-diff (n buf-type)
    "Pop last killed Nth diff region from buffer BUF-TYPE."
    (let* ((n-th-record (assoc n ediff-killed-diffs-alist))
***************
*** 2116,2148 ****
         (ctl-buf ediff-control-buffer)
         ediff-verbose-p
         saved-diff reg-beg reg-end recovered)
!       
      (if (cdr saved-rec)
        (setq saved-diff (cdr saved-rec))
        (if (> ediff-number-of-differences 0)
          (error "Nothing saved for diff %d in buffer %S" (1+ n) buf-type)
        (error ediff-NO-DIFFERENCES)))
!     
      (setq reg-beg (ediff-get-diff-posn buf-type 'beg n ediff-control-buffer))
      (setq reg-end (ediff-get-diff-posn buf-type 'end n ediff-control-buffer))
!     
      (condition-case conds
        (ediff-with-current-buffer buf
          (let ((inhibit-read-only (null buffer-read-only)))
!           
            (goto-char reg-end)
            (insert saved-diff)
!           
            (if (> reg-end reg-beg)
                (kill-region reg-beg reg-end))
!           
            (setq recovered t)
            ))
        (error (message "ediff-pop-diff: %s %s"
                      (car conds)
                      (mapconcat 'prin1-to-string (cdr conds) " "))
             (beep 1)))
!     
      ;; Clearing fine diffs is necessary for
      ;; ediff-unselect-and-select-difference to properly recompute them.  We
      ;; can't rely on ediff-copy-diff to clear this vector, as the user might
--- 2116,2148 ----
         (ctl-buf ediff-control-buffer)
         ediff-verbose-p
         saved-diff reg-beg reg-end recovered)
! 
      (if (cdr saved-rec)
        (setq saved-diff (cdr saved-rec))
        (if (> ediff-number-of-differences 0)
          (error "Nothing saved for diff %d in buffer %S" (1+ n) buf-type)
        (error ediff-NO-DIFFERENCES)))
! 
      (setq reg-beg (ediff-get-diff-posn buf-type 'beg n ediff-control-buffer))
      (setq reg-end (ediff-get-diff-posn buf-type 'end n ediff-control-buffer))
! 
      (condition-case conds
        (ediff-with-current-buffer buf
          (let ((inhibit-read-only (null buffer-read-only)))
! 
            (goto-char reg-end)
            (insert saved-diff)
! 
            (if (> reg-end reg-beg)
                (kill-region reg-beg reg-end))
! 
            (setq recovered t)
            ))
        (error (message "ediff-pop-diff: %s %s"
                      (car conds)
                      (mapconcat 'prin1-to-string (cdr conds) " "))
             (beep 1)))
! 
      ;; Clearing fine diffs is necessary for
      ;; ediff-unselect-and-select-difference to properly recompute them.  We
      ;; can't rely on ediff-copy-diff to clear this vector, as the user might
***************
*** 2150,2169 ****
      ;; fine diffs.
      (if recovered
        (ediff-clear-fine-differences n))
!         
      ;; adjust state of difference
      (if (and three-way recovered)
        (ediff-set-state-of-diff-in-all-buffers n ctl-buf))
!       
      (ediff-refresh-mode-lines)
!     
      (if recovered
        (progn
          (setq n-th-record (delq saved-rec n-th-record))
          (message "Diff region %d in buffer %S restored" (1+ n) buf-type)
          ))
      ))
!       
  (defun ediff-restore-diff  (arg &optional key)
    "Restore ARGth diff from `ediff-killed-diffs-alist'.
  ARG is a prefix argument.  If ARG is nil, restore the current-difference.
--- 2150,2169 ----
      ;; fine diffs.
      (if recovered
        (ediff-clear-fine-differences n))
! 
      ;; adjust state of difference
      (if (and three-way recovered)
        (ediff-set-state-of-diff-in-all-buffers n ctl-buf))
! 
      (ediff-refresh-mode-lines)
! 
      (if recovered
        (progn
          (setq n-th-record (delq saved-rec n-th-record))
          (message "Diff region %d in buffer %S restored" (1+ n) buf-type)
          ))
      ))
! 
  (defun ediff-restore-diff  (arg &optional key)
    "Restore ARGth diff from `ediff-killed-diffs-alist'.
  ARG is a prefix argument.  If ARG is nil, restore the current-difference.
***************
*** 2173,2179 ****
    (ediff-barf-if-not-control-buffer)
    (if (numberp arg)
        (ediff-jump-to-difference arg))
!   (ediff-pop-diff ediff-current-difference 
                  (ediff-char-to-buftype (or key last-command-char)))
    ;; recenter with rehighlighting, but no messages
    (let (ediff-verbose-p)
--- 2173,2179 ----
    (ediff-barf-if-not-control-buffer)
    (if (numberp arg)
        (ediff-jump-to-difference arg))
!   (ediff-pop-diff ediff-current-difference
                  (ediff-char-to-buftype (or key last-command-char)))
    ;; recenter with rehighlighting, but no messages
    (let (ediff-verbose-p)
***************
*** 2184,2191 ****
  ARG is a prefix argument.  If nil, restore the current diff."
    (interactive "P")
    (ediff-restore-diff arg ?c))
!   
!   
  (defun ediff-toggle-regexp-match ()
    "Toggle between focusing and hiding of difference regions that match
  a regular expression typed in by the user."
--- 2184,2191 ----
  ARG is a prefix argument.  If nil, restore the current diff."
    (interactive "P")
    (ediff-restore-diff arg ?c))
! 
! 
  (defun ediff-toggle-regexp-match ()
    "Toggle between focusing and hiding of difference regions that match
  a regular expression typed in by the user."
***************
*** 2206,2225 ****
        (setq ediff-skip-diff-region-function 'ediff-show-all-diffs))
       ((eq last-command-char ?h)
        (setq ediff-skip-diff-region-function ediff-hide-regexp-matches-function
!           regexp-A 
            (read-string
!            (format 
              "Ignore A-regions matching this regexp (default \"%s\"): "
              ediff-regexp-hide-A))
            regexp-B
            (read-string
!            (format 
              "Ignore B-regions matching this regexp (default \"%s\"): "
              ediff-regexp-hide-B)))
        (if ediff-3way-comparison-job
          (setq regexp-C
                (read-string
!                (format 
                  "Ignore C-regions matching this regexp (default \"%s\"): "
                  ediff-regexp-hide-C))))
        (if (eq ediff-hide-regexp-connective 'and)
--- 2206,2225 ----
        (setq ediff-skip-diff-region-function 'ediff-show-all-diffs))
       ((eq last-command-char ?h)
        (setq ediff-skip-diff-region-function ediff-hide-regexp-matches-function
!           regexp-A
            (read-string
!            (format
              "Ignore A-regions matching this regexp (default \"%s\"): "
              ediff-regexp-hide-A))
            regexp-B
            (read-string
!            (format
              "Ignore B-regions matching this regexp (default \"%s\"): "
              ediff-regexp-hide-B)))
        (if ediff-3way-comparison-job
          (setq regexp-C
                (read-string
!                (format
                  "Ignore C-regions matching this regexp (default \"%s\"): "
                  ediff-regexp-hide-C))))
        (if (eq ediff-hide-regexp-connective 'and)
***************
*** 2236,2242 ****
          (message "Will ignore regions that match %s regexps" msg-connective)
        (setq ediff-hide-regexp-connective alt-connective)
        (message "Will ignore regions that match %s regexps"
!                alt-msg-connective)) 
  
        (or (string= regexp-A "") (setq ediff-regexp-hide-A regexp-A))
        (or (string= regexp-B "") (setq ediff-regexp-hide-B regexp-B))
--- 2236,2242 ----
          (message "Will ignore regions that match %s regexps" msg-connective)
        (setq ediff-hide-regexp-connective alt-connective)
        (message "Will ignore regions that match %s regexps"
!                alt-msg-connective))
  
        (or (string= regexp-A "") (setq ediff-regexp-hide-A regexp-A))
        (or (string= regexp-B "") (setq ediff-regexp-hide-B regexp-B))
***************
*** 2245,2264 ****
       ((eq last-command-char ?f)
        (setq ediff-skip-diff-region-function
            ediff-focus-on-regexp-matches-function
!           regexp-A 
            (read-string
!            (format 
              "Focus on A-regions matching this regexp (default \"%s\"): "
              ediff-regexp-focus-A))
            regexp-B
            (read-string
!            (format 
              "Focus on B-regions matching this regexp (default \"%s\"): "
              ediff-regexp-focus-B)))
        (if ediff-3way-comparison-job
          (setq regexp-C
                (read-string
!                (format 
                  "Focus on C-regions matching this regexp (default \"%s\"): "
                  ediff-regexp-focus-C))))
        (if (eq ediff-focus-regexp-connective 'and)
--- 2245,2264 ----
       ((eq last-command-char ?f)
        (setq ediff-skip-diff-region-function
            ediff-focus-on-regexp-matches-function
!           regexp-A
            (read-string
!            (format
              "Focus on A-regions matching this regexp (default \"%s\"): "
              ediff-regexp-focus-A))
            regexp-B
            (read-string
!            (format
              "Focus on B-regions matching this regexp (default \"%s\"): "
              ediff-regexp-focus-B)))
        (if ediff-3way-comparison-job
          (setq regexp-C
                (read-string
!                (format
                  "Focus on C-regions matching this regexp (default \"%s\"): "
                  ediff-regexp-focus-C))))
        (if (eq ediff-focus-regexp-connective 'and)
***************
*** 2275,2287 ****
          (message "Will focus on regions that match %s regexps"
                   msg-connective)
        (setq ediff-focus-regexp-connective alt-connective)
!       (message "Will focus on regions that match %s regexps" 
                 alt-msg-connective))
  
        (or (string= regexp-A "") (setq ediff-regexp-focus-A regexp-A))
        (or (string= regexp-B "") (setq ediff-regexp-focus-B regexp-B))
        (or (string= regexp-C "") (setq ediff-regexp-focus-C regexp-C))))))
!       
  (defun ediff-toggle-skip-similar ()
    (interactive)
    (ediff-barf-if-not-control-buffer)
--- 2275,2287 ----
          (message "Will focus on regions that match %s regexps"
                   msg-connective)
        (setq ediff-focus-regexp-connective alt-connective)
!       (message "Will focus on regions that match %s regexps"
                 alt-msg-connective))
  
        (or (string= regexp-A "") (setq ediff-regexp-focus-A regexp-A))
        (or (string= regexp-B "") (setq ediff-regexp-focus-B regexp-B))
        (or (string= regexp-C "") (setq ediff-regexp-focus-C regexp-C))))))
! 
  (defun ediff-toggle-skip-similar ()
    (interactive)
    (ediff-barf-if-not-control-buffer)
***************
*** 2293,2302 ****
        (message
         "Skipping regions that differ only in white space & line breaks")
      (message "Skipping over white-space differences turned off")))
!   
  (defun ediff-focus-on-regexp-matches (n)
    "Focus on diffs that match regexp `ediff-regexp-focus-A/B'.
! Regions to be ignored according to this function are those where   
  buf A region doesn't match `ediff-regexp-focus-A' and buf B region
  doesn't match `ediff-regexp-focus-B'.
  This function returns nil if the region number N (specified as
--- 2293,2302 ----
        (message
         "Skipping regions that differ only in white space & line breaks")
      (message "Skipping over white-space differences turned off")))
! 
  (defun ediff-focus-on-regexp-matches (n)
    "Focus on diffs that match regexp `ediff-regexp-focus-A/B'.
! Regions to be ignored according to this function are those where
  buf A region doesn't match `ediff-regexp-focus-A' and buf B region
  doesn't match `ediff-regexp-focus-B'.
  This function returns nil if the region number N (specified as
***************
*** 2335,2342 ****
                     (list ediff-focus-regexp-connective
                           reg-A-match reg-B-match))))
        )))
!   
! (defun ediff-hide-regexp-matches (n)  
    "Hide diffs that match regexp `ediff-regexp-hide-A/B/C'.
  Regions to be ignored are those where buf A region matches
  `ediff-regexp-hide-A' and buf B region matches `ediff-regexp-hide-B'.
--- 2335,2342 ----
                     (list ediff-focus-regexp-connective
                           reg-A-match reg-B-match))))
        )))
! 
! (defun ediff-hide-regexp-matches (n)
    "Hide diffs that match regexp `ediff-regexp-hide-A/B/C'.
  Regions to be ignored are those where buf A region matches
  `ediff-regexp-hide-A' and buf B region matches `ediff-regexp-hide-B'.
***************
*** 2377,2383 ****
                        reg-A-match reg-B-match reg-C-match)
                (list ediff-hide-regexp-connective reg-A-match reg-B-match)))
        )))
!     
  
  
  ;;; Quitting, suspending, etc.
--- 2377,2383 ----
                        reg-A-match reg-B-match reg-C-match)
                (list ediff-hide-regexp-connective reg-A-match reg-B-match)))
        )))
! 
  
  
  ;;; Quitting, suspending, etc.
***************
*** 2389,2396 ****
  \(but not buffers A, B, C\).
  
  If `ediff-keep-variants' is nil, the user will be asked whether the buffers
! containing the variants should be removed \(if they haven't been modified\). 
! If it is t, they will be preserved unconditionally.  A prefix argument, 
  temporarily reverses the meaning of this variable."
    (interactive "P")
    (ediff-barf-if-not-control-buffer)
--- 2389,2396 ----
  \(but not buffers A, B, C\).
  
  If `ediff-keep-variants' is nil, the user will be asked whether the buffers
! containing the variants should be removed \(if they haven't been modified\).
! If it is t, they will be preserved unconditionally.  A prefix argument,
  temporarily reverses the meaning of this variable."
    (interactive "P")
    (ediff-barf-if-not-control-buffer)
***************
*** 2414,2420 ****
    (ediff-clear-diff-vector 'ediff-difference-vector-Ancestor 'fine-diffs-also)
  
    (ediff-delete-temp-files)
!                                 
    ;; Restore the visibility range.  This affects only ediff-*-regions/windows.
    ;; Since for other job names ediff-visible-region sets
    ;; ediff-visible-bounds to ediff-wide-bounds, the settings below are
--- 2414,2420 ----
    (ediff-clear-diff-vector 'ediff-difference-vector-Ancestor 'fine-diffs-also)
  
    (ediff-delete-temp-files)
! 
    ;; Restore the visibility range.  This affects only ediff-*-regions/windows.
    ;; Since for other job names ediff-visible-region sets
    ;; ediff-visible-bounds to ediff-wide-bounds, the settings below are
***************
*** 2422,2428 ****
    (if ediff-quit-widened
        (setq ediff-visible-bounds ediff-wide-bounds)
      (setq ediff-visible-bounds ediff-narrow-bounds))
!   
    ;; Apply selective display to narrow or widen
    (ediff-visible-region)
    (mapcar (lambda (overl)
--- 2422,2428 ----
    (if ediff-quit-widened
        (setq ediff-visible-bounds ediff-wide-bounds)
      (setq ediff-visible-bounds ediff-narrow-bounds))
! 
    ;; Apply selective display to narrow or widen
    (ediff-visible-region)
    (mapcar (lambda (overl)
***************
*** 2441,2472 ****
        (session-number ediff-meta-session-number)
        ;; suitable working frame
        (warp-frame (if (and (ediff-window-display-p) (eq ediff-grab-mouse t))
!                       (cond ((window-live-p ediff-window-A) 
                               (window-frame ediff-window-A))
!                             ((window-live-p ediff-window-B) 
                               (window-frame ediff-window-B))
                              (t (next-frame))))))
      (condition-case nil
        (ediff-with-current-buffer ediff-buffer-A
!         (setq ediff-this-buffer-ediff-sessions 
                (delq control-buffer ediff-this-buffer-ediff-sessions))
          (kill-local-variable 'mode-line-buffer-identification)
          (kill-local-variable 'mode-line-format)
          )
        (error))
!       
      (condition-case nil
        (ediff-with-current-buffer ediff-buffer-B
!         (setq ediff-this-buffer-ediff-sessions 
                (delq control-buffer ediff-this-buffer-ediff-sessions))
          (kill-local-variable 'mode-line-buffer-identification)
          (kill-local-variable 'mode-line-format)
          )
        (error))
!     
      (condition-case nil
        (ediff-with-current-buffer ediff-buffer-C
!         (setq ediff-this-buffer-ediff-sessions 
                (delq control-buffer ediff-this-buffer-ediff-sessions))
          (kill-local-variable 'mode-line-buffer-identification)
          (kill-local-variable 'mode-line-format)
--- 2441,2472 ----
        (session-number ediff-meta-session-number)
        ;; suitable working frame
        (warp-frame (if (and (ediff-window-display-p) (eq ediff-grab-mouse t))
!                       (cond ((window-live-p ediff-window-A)
                               (window-frame ediff-window-A))
!                             ((window-live-p ediff-window-B)
                               (window-frame ediff-window-B))
                              (t (next-frame))))))
      (condition-case nil
        (ediff-with-current-buffer ediff-buffer-A
!         (setq ediff-this-buffer-ediff-sessions
                (delq control-buffer ediff-this-buffer-ediff-sessions))
          (kill-local-variable 'mode-line-buffer-identification)
          (kill-local-variable 'mode-line-format)
          )
        (error))
! 
      (condition-case nil
        (ediff-with-current-buffer ediff-buffer-B
!         (setq ediff-this-buffer-ediff-sessions
                (delq control-buffer ediff-this-buffer-ediff-sessions))
          (kill-local-variable 'mode-line-buffer-identification)
          (kill-local-variable 'mode-line-format)
          )
        (error))
! 
      (condition-case nil
        (ediff-with-current-buffer ediff-buffer-C
!         (setq ediff-this-buffer-ediff-sessions
                (delq control-buffer ediff-this-buffer-ediff-sessions))
          (kill-local-variable 'mode-line-buffer-identification)
          (kill-local-variable 'mode-line-format)
***************
*** 2475,2481 ****
  
      (condition-case nil
        (ediff-with-current-buffer ediff-ancestor-buffer
!         (setq ediff-this-buffer-ediff-sessions 
                (delq control-buffer ediff-this-buffer-ediff-sessions))
          (kill-local-variable 'mode-line-buffer-identification)
          (kill-local-variable 'mode-line-format)
--- 2475,2481 ----
  
      (condition-case nil
        (ediff-with-current-buffer ediff-ancestor-buffer
!         (setq ediff-this-buffer-ediff-sessions
                (delq control-buffer ediff-this-buffer-ediff-sessions))
          (kill-local-variable 'mode-line-buffer-identification)
          (kill-local-variable 'mode-line-format)
***************
*** 2540,2547 ****
      (if (string-match "Minibuf" buf-name)
        nil
        frame)))
!   
!   
  (defun ediff-delete-temp-files ()
    (if (and (stringp ediff-temp-file-A) (file-exists-p ediff-temp-file-A))
        (delete-file ediff-temp-file-A))
--- 2540,2547 ----
      (if (string-match "Minibuf" buf-name)
        nil
        frame)))
! 
! 
  (defun ediff-delete-temp-files ()
    (if (and (stringp ediff-temp-file-A) (file-exists-p ediff-temp-file-A))
        (delete-file ediff-temp-file-A))
***************
*** 2549,2555 ****
        (delete-file ediff-temp-file-B))
    (if (and (stringp ediff-temp-file-C) (file-exists-p ediff-temp-file-C))
        (delete-file ediff-temp-file-C)))
!   
  
  ;; Kill control buffer, other auxiliary Ediff buffers.
  ;; Leave one of the frames split between buffers A/B/C
--- 2549,2555 ----
        (delete-file ediff-temp-file-B))
    (if (and (stringp ediff-temp-file-C) (file-exists-p ediff-temp-file-C))
        (delete-file ediff-temp-file-C)))
! 
  
  ;; Kill control buffer, other auxiliary Ediff buffers.
  ;; Leave one of the frames split between buffers A/B/C
***************
*** 2561,2571 ****
         (ctl-wind  (ediff-get-visible-buffer-window ctl-buf))
         (ctl-frame ediff-control-frame)
         (three-way-job ediff-3way-job)
!        (main-frame (cond ((window-live-p ediff-window-A) 
                            (window-frame ediff-window-A))
!                          ((window-live-p ediff-window-B) 
                            (window-frame ediff-window-B)))))
!     
      (ediff-kill-buffer-carefully ediff-diff-buffer)
      (ediff-kill-buffer-carefully ediff-custom-diff-buffer)
      (ediff-kill-buffer-carefully ediff-fine-diff-buffer)
--- 2561,2571 ----
         (ctl-wind  (ediff-get-visible-buffer-window ctl-buf))
         (ctl-frame ediff-control-frame)
         (three-way-job ediff-3way-job)
!        (main-frame (cond ((window-live-p ediff-window-A)
                            (window-frame ediff-window-A))
!                          ((window-live-p ediff-window-B)
                            (window-frame ediff-window-B)))))
! 
      (ediff-kill-buffer-carefully ediff-diff-buffer)
      (ediff-kill-buffer-carefully ediff-custom-diff-buffer)
      (ediff-kill-buffer-carefully ediff-fine-diff-buffer)
***************
*** 2587,2596 ****
        (ediff-kill-bottom-toolbar))
  
      (ediff-kill-buffer-carefully ctl-buf)
!       
      (if (frame-live-p main-frame)
        (select-frame main-frame))
!     
      ;; display only if not visible
      (condition-case nil
        (or (ediff-get-visible-buffer-window buff-B)
--- 2587,2596 ----
        (ediff-kill-bottom-toolbar))
  
      (ediff-kill-buffer-carefully ctl-buf)
! 
      (if (frame-live-p main-frame)
        (select-frame main-frame))
! 
      ;; display only if not visible
      (condition-case nil
        (or (ediff-get-visible-buffer-window buff-B)
***************
*** 2651,2657 ****
        ;; Kill indirect buffer even if it is modified, because the base buffer
        ;; is still there. Note that if the base buffer is dead then so will be
        ;; the indirect buffer
!       (ediff-with-current-buffer buff 
          (set-buffer-modified-p nil))
        (ediff-kill-buffer-carefully buff)
        (ediff-with-current-buffer base
--- 2651,2657 ----
        ;; Kill indirect buffer even if it is modified, because the base buffer
        ;; is still there. Note that if the base buffer is dead then so will be
        ;; the indirect buffer
!       (ediff-with-current-buffer buff
          (set-buffer-modified-p nil))
        (ediff-kill-buffer-carefully buff)
        (ediff-with-current-buffer base
***************
*** 2752,2762 ****
         (buf-diff ediff-diff-buffer)
         (buf-custom-diff ediff-custom-diff-buffer)
         (buf-fine-diff ediff-fine-diff-buffer))
!     
      ;; hide the control panel
      (if (and (ediff-window-display-p) (frame-live-p ediff-control-frame))
        (iconify-frame ediff-control-frame)
!       (bury-buffer)) 
      (if buf-err (bury-buffer buf-err))
      (if buf-diff (bury-buffer buf-diff))
      (if buf-custom-diff (bury-buffer buf-custom-diff))
--- 2752,2762 ----
         (buf-diff ediff-diff-buffer)
         (buf-custom-diff ediff-custom-diff-buffer)
         (buf-fine-diff ediff-fine-diff-buffer))
! 
      ;; hide the control panel
      (if (and (ediff-window-display-p) (frame-live-p ediff-control-frame))
        (iconify-frame ediff-control-frame)
!       (bury-buffer))
      (if buf-err (bury-buffer buf-err))
      (if buf-diff (bury-buffer buf-diff))
      (if buf-custom-diff (bury-buffer buf-custom-diff))
***************
*** 2792,2798 ****
            (bury-buffer))))
      ))
  
!      
  (defun ediff-suspend ()
    "Suspend Ediff.
  To resume, switch to the appropriate `Ediff Control Panel'
--- 2792,2798 ----
            (bury-buffer))))
      ))
  
! 
  (defun ediff-suspend ()
    "Suspend Ediff.
  To resume, switch to the appropriate `Ediff Control Panel'
***************
*** 2822,2841 ****
        (if buffer-file-name
          (princ
           (format "File A = %S\n" buffer-file-name))
!       (princ 
         (format "Buffer A = %S\n" (buffer-name)))))
      (ediff-with-current-buffer ediff-buffer-B
        (if buffer-file-name
          (princ
           (format "File B = %S\n" buffer-file-name))
!       (princ 
         (format "Buffer B = %S\n" (buffer-name)))))
      (if ediff-3way-job
        (ediff-with-current-buffer ediff-buffer-C
          (if buffer-file-name
              (princ
               (format "File C = %S\n" buffer-file-name))
!           (princ 
             (format "Buffer C = %S\n" (buffer-name))))))
      (princ (format "Customized diff output %s\n"
                   (if (ediff-buffer-live-p ediff-custom-diff-buffer)
--- 2822,2841 ----
        (if buffer-file-name
          (princ
           (format "File A = %S\n" buffer-file-name))
!       (princ
         (format "Buffer A = %S\n" (buffer-name)))))
      (ediff-with-current-buffer ediff-buffer-B
        (if buffer-file-name
          (princ
           (format "File B = %S\n" buffer-file-name))
!       (princ
         (format "Buffer B = %S\n" (buffer-name)))))
      (if ediff-3way-job
        (ediff-with-current-buffer ediff-buffer-C
          (if buffer-file-name
              (princ
               (format "File C = %S\n" buffer-file-name))
!           (princ
             (format "Buffer C = %S\n" (buffer-name))))))
      (princ (format "Customized diff output %s\n"
                   (if (ediff-buffer-live-p ediff-custom-diff-buffer)
***************
*** 2847,2853 ****
                       (concat "\tin buffer "
                               (buffer-name ediff-diff-buffer))
                     " is not available")))
!                             
      (let* ((A-line (ediff-with-current-buffer ediff-buffer-A
                     (1+ (count-lines (point-min) (point)))))
           (B-line (ediff-with-current-buffer ediff-buffer-B
--- 2847,2853 ----
                       (concat "\tin buffer "
                               (buffer-name ediff-diff-buffer))
                     " is not available")))
! 
      (let* ((A-line (ediff-with-current-buffer ediff-buffer-A
                     (1+ (count-lines (point-min) (point)))))
           (B-line (ediff-with-current-buffer ediff-buffer-B
***************
*** 2860,2866 ****
            (setq C-line (ediff-with-current-buffer ediff-buffer-C
                           (1+ (count-lines (point-min) (point)))))
            (princ (format "Buffer C's point is on line %d\n" C-line)))))
!       
      (princ (format "\nCurrent difference number = %S\n"
                   (cond ((< ediff-current-difference 0) 'start)
                         ((>= ediff-current-difference
--- 2860,2866 ----
            (setq C-line (ediff-with-current-buffer ediff-buffer-C
                           (1+ (count-lines (point-min) (point)))))
            (princ (format "Buffer C's point is on line %d\n" C-line)))))
! 
      (princ (format "\nCurrent difference number = %S\n"
                   (cond ((< ediff-current-difference 0) 'start)
                         ((>= ediff-current-difference
***************
*** 2877,2883 ****
      (if (and ediff-skip-merge-regions-that-differ-from-default 
ediff-merge-job)
        (princ
         "\nSkipping merge regions that differ from default setting"))
!     
      (cond ((eq ediff-skip-diff-region-function 'ediff-show-all-diffs)
           (princ "\nSelective browsing by regexp is off\n"))
          ((eq ediff-skip-diff-region-function
--- 2877,2883 ----
      (if (and ediff-skip-merge-regions-that-differ-from-default 
ediff-merge-job)
        (princ
         "\nSkipping merge regions that differ from default setting"))
! 
      (cond ((eq ediff-skip-diff-region-function 'ediff-show-all-diffs)
           (princ "\nSelective browsing by regexp is off\n"))
          ((eq ediff-skip-diff-region-function
***************
*** 2885,2891 ****
           (princ
            "\nIgnoring regions that match")
           (princ
!           (format 
             "\n\t regexp `%s' in buffer A  %S\n\t regexp `%s' in buffer B\n"
             ediff-regexp-hide-A ediff-hide-regexp-connective
             ediff-regexp-hide-B)))
--- 2885,2891 ----
           (princ
            "\nIgnoring regions that match")
           (princ
!           (format
             "\n\t regexp `%s' in buffer A  %S\n\t regexp `%s' in buffer B\n"
             ediff-regexp-hide-A ediff-hide-regexp-connective
             ediff-regexp-hide-B)))
***************
*** 2899,2905 ****
             ediff-regexp-focus-A ediff-focus-regexp-connective
             ediff-regexp-focus-B)))
          (t (princ "\nSelective browsing via a user-defined method.\n")))
!     
      (princ
       (format "\nBugs/suggestions: type `%s' while in Ediff Control Panel."
             (substitute-command-keys "\\[ediff-submit-report]")))
--- 2899,2905 ----
             ediff-regexp-focus-A ediff-focus-regexp-connective
             ediff-regexp-focus-B)))
          (t (princ "\nSelective browsing via a user-defined method.\n")))
! 
      (princ
       (format "\nBugs/suggestions: type `%s' while in Ediff Control Panel."
             (substitute-command-keys "\\[ediff-submit-report]")))
***************
*** 2908,2914 ****
        (ediff-reset-mouse ediff-control-frame))
    (if (window-live-p ediff-control-window)
        (select-window ediff-control-window)))
!     
  
  
  
--- 2908,2914 ----
        (ediff-reset-mouse ediff-control-frame))
    (if (window-live-p ediff-control-window)
        (select-window ediff-control-window)))
! 
  
  
  
***************
*** 2937,2953 ****
                 (ediff-place-flags-in-buffer
                  'Ancestor ediff-ancestor-buffer
                  ediff-control-buffer n))
!            )) 
!                                      
        (ediff-install-fine-diff-if-necessary n)
        (run-hooks 'ediff-select-hook))))
!       
  
  ;; Unselect a difference by removing the ASCII flags in the buffers.
  ;; This may have to be modified for buffer C, when it will be supported.
  (defun ediff-unselect-difference (n)
    (if (ediff-valid-difference-p n)
!       (progn 
        (cond ((and (ediff-has-face-support-p) ediff-use-faces)
               (ediff-unhighlight-diff))
              ((eq ediff-highlighting-style 'ascii)
--- 2937,2953 ----
                 (ediff-place-flags-in-buffer
                  'Ancestor ediff-ancestor-buffer
                  ediff-control-buffer n))
!            ))
! 
        (ediff-install-fine-diff-if-necessary n)
        (run-hooks 'ediff-select-hook))))
! 
  
  ;; Unselect a difference by removing the ASCII flags in the buffers.
  ;; This may have to be modified for buffer C, when it will be supported.
  (defun ediff-unselect-difference (n)
    (if (ediff-valid-difference-p n)
!       (progn
        (cond ((and (ediff-has-face-support-p) ediff-use-faces)
               (ediff-unhighlight-diff))
              ((eq ediff-highlighting-style 'ascii)
***************
*** 2966,2976 ****
                    ediff-ancestor-buffer
                    (ediff-get-diff-overlay n 'Ancestor)))
               ))
!       
        ;; unhighlight fine diffs
        (ediff-set-fine-diff-properties ediff-current-difference 'default)
        (run-hooks 'ediff-unselect-hook))))
!   
  
  ;; Unselects prev diff and selects a new one, if FLAG has value other than
  ;; 'select-only or 'unselect-only.  If FLAG is 'select-only, the
--- 2966,2976 ----
                    ediff-ancestor-buffer
                    (ediff-get-diff-overlay n 'Ancestor)))
               ))
! 
        ;; unhighlight fine diffs
        (ediff-set-fine-diff-properties ediff-current-difference 'default)
        (run-hooks 'ediff-unselect-hook))))
! 
  
  ;; Unselects prev diff and selects a new one, if FLAG has value other than
  ;; 'select-only or 'unselect-only.  If FLAG is 'select-only, the
***************
*** 2982,2999 ****
    (let ((ediff-current-difference n))
      (or no-recenter
        (ediff-recenter 'no-rehighlight)))
!         
    (let ((control-buf ediff-control-buffer))
!     (unwind-protect    
        (progn
          (or (eq flag 'select-only)
              (ediff-unselect-difference ediff-current-difference))
!         
          (or (eq flag 'unselect-only)
              (ediff-select-difference n))
          (setq ediff-current-difference n)
          ) ; end protected section
!       
        (ediff-with-current-buffer control-buf (ediff-refresh-mode-lines)))
      ))
  
--- 2982,2999 ----
    (let ((ediff-current-difference n))
      (or no-recenter
        (ediff-recenter 'no-rehighlight)))
! 
    (let ((control-buf ediff-control-buffer))
!     (unwind-protect
        (progn
          (or (eq flag 'select-only)
              (ediff-unselect-difference ediff-current-difference))
! 
          (or (eq flag 'unselect-only)
              (ediff-select-difference n))
          (setq ediff-current-difference n)
          ) ; end protected section
! 
        (ediff-with-current-buffer control-buf (ediff-refresh-mode-lines)))
      ))
  
***************
*** 3133,3140 ****
                 (file-name-nondirectory default-file) f)))
      (if (and no-dirs (file-directory-p f))
        (error "File %s is a directory" f))
!     f)) 
!   
  ;; If PREFIX is given, then it is used as a prefix for the temp file
  ;; name.  Otherwise, `ediff' is used.  If FILE is given, use this
  ;; file and don't create a new one.
--- 3133,3140 ----
                 (file-name-nondirectory default-file) f)))
      (if (and no-dirs (file-directory-p f))
        (error "File %s is a directory" f))
!     f))
! 
  ;; If PREFIX is given, then it is used as a prefix for the temp file
  ;; name.  Otherwise, `ediff' is used.  If FILE is given, use this
  ;; file and don't create a new one.
***************
*** 3151,3157 ****
             (not (msdos-long-file-names))
             (> (length p) 2))
        (setq short-p (substring p 0 2)))
!     
      (setq f (concat ediff-temp-file-prefix p)
          short-f (concat ediff-temp-file-prefix short-p)
          f (cond (given-file)
--- 3151,3157 ----
             (not (msdos-long-file-names))
             (> (length p) 2))
        (setq short-p (substring p 0 2)))
! 
      (setq f (concat ediff-temp-file-prefix p)
          short-f (concat ediff-temp-file-prefix short-p)
          f (cond (given-file)
***************
*** 3161,3167 ****
                   ;; This is needed so that patches produced by ediff will
                   ;; have more meaningful names
                   (ediff-make-empty-tmp-file short-f))
!                 (prefix 
                   ;; Prefix is most often the same as the file name for the
                   ;; variant.  Here we are trying to use the original file
                   ;; name but in the temp directory.
--- 3161,3167 ----
                   ;; This is needed so that patches produced by ediff will
                   ;; have more meaningful names
                   (ediff-make-empty-tmp-file short-f))
!                 (prefix
                   ;; Prefix is most often the same as the file name for the
                   ;; variant.  Here we are trying to use the original file
                   ;; name but in the temp directory.
***************
*** 3170,3183 ****
                   ;; If don't care about name, add some random stuff
                   ;; to proposed file name.
                   (ediff-make-empty-tmp-file short-f))))
!     
      ;; create the file
      (ediff-with-current-buffer buff
        (write-region (if start start (point-min))
                    (if end end (point-max))
                    f
                    nil          ; don't append---erase
!                   'no-message) 
        (set-file-modes f ediff-temp-file-mode)
        (expand-file-name f))))
  
--- 3170,3183 ----
                   ;; If don't care about name, add some random stuff
                   ;; to proposed file name.
                   (ediff-make-empty-tmp-file short-f))))
! 
      ;; create the file
      (ediff-with-current-buffer buff
        (write-region (if start start (point-min))
                    (if end end (point-max))
                    f
                    nil          ; don't append---erase
!                   'no-message)
        (set-file-modes f ediff-temp-file-mode)
        (expand-file-name f))))
  
***************
*** 3232,3238 ****
    (if (verify-visited-file-modtime (current-buffer))
        (if (buffer-modified-p)
          ;; If buffer is not obsolete and is modified, offer to save
!         (if (yes-or-no-p 
               (format "Buffer %s has been modified. Save it in file %s? "
                       (buffer-name)
                       buffer-file-name))
--- 3232,3238 ----
    (if (verify-visited-file-modtime (current-buffer))
        (if (buffer-modified-p)
          ;; If buffer is not obsolete and is modified, offer to save
!         (if (yes-or-no-p
               (format "Buffer %s has been modified. Save it in file %s? "
                       (buffer-name)
                       buffer-file-name))
***************
*** 3371,3377 ****
        (set-mark reg-end)
        (setq ediff-temp-indirect-buffer t))
      cloned-buff))
!   
  
  
  (defun ediff-make-cloned-buffer (buff region-name)
--- 3371,3377 ----
        (set-mark reg-end)
        (setq ediff-temp-indirect-buffer t))
      cloned-buff))
! 
  
  
  (defun ediff-make-cloned-buffer (buff region-name)
***************
*** 3399,3405 ****
        (setq buf-B-file-name (file-name-nondirectory buf-B-file-name)))
      (setq file-A (ediff-make-temp-file ediff-buffer-A buf-A-file-name)
          file-B (ediff-make-temp-file ediff-buffer-B buf-B-file-name))
!                        
      (or (ediff-buffer-live-p ediff-custom-diff-buffer)
        (setq ediff-custom-diff-buffer
              (get-buffer-create
--- 3399,3405 ----
        (setq buf-B-file-name (file-name-nondirectory buf-B-file-name)))
      (setq file-A (ediff-make-temp-file ediff-buffer-A buf-A-file-name)
          file-B (ediff-make-temp-file ediff-buffer-B buf-B-file-name))
! 
      (or (ediff-buffer-live-p ediff-custom-diff-buffer)
        (setq ediff-custom-diff-buffer
              (get-buffer-create
***************
*** 3498,3504 ****
                         nil)
                        ((equal answer ""))
                        (t (beep 1)
!                          (message 
                            "Valid values are %s"
                            (mapconcat 'char-to-string possibilities " or "))
                           (sit-for 2)
--- 3498,3504 ----
                         nil)
                        ((equal answer ""))
                        (t (beep 1)
!                          (message
                            "Valid values are %s"
                            (mapconcat 'char-to-string possibilities " or "))
                           (sit-for 2)
***************
*** 3517,3523 ****
                         nil)
                        ((equal answer ""))
                        (t (beep 1)
!                          (message 
                            "Valid values are %s"
                            (mapconcat 'char-to-string possibilities " or "))
                           (sit-for 2)
--- 3517,3523 ----
                         nil)
                        ((equal answer ""))
                        (t (beep 1)
!                          (message
                            "Valid values are %s"
                            (mapconcat 'char-to-string possibilities " or "))
                           (sit-for 2)
***************
*** 3577,3584 ****
       ;; setup param to pass to ediff-setup
       (list (cons 'ediff-split-window-function ediff-split-window-function)))
      ))
!       
!     
  
  (defun ediff-remove-flags-from-buffer (buffer overlay)
    (ediff-with-current-buffer buffer
--- 3577,3584 ----
       ;; setup param to pass to ediff-setup
       (list (cons 'ediff-split-window-function ediff-split-window-function)))
      ))
! 
! 
  
  (defun ediff-remove-flags-from-buffer (buffer overlay)
    (ediff-with-current-buffer buffer
***************
*** 3586,3592 ****
        (if ediff-xemacs-p
          (ediff-overlay-put overlay 'begin-glyph nil)
        (ediff-overlay-put overlay 'before-string nil))
!       
        (if ediff-xemacs-p
          (ediff-overlay-put overlay 'end-glyph nil)
        (ediff-overlay-put overlay 'after-string nil))
--- 3586,3592 ----
        (if ediff-xemacs-p
          (ediff-overlay-put overlay 'begin-glyph nil)
        (ediff-overlay-put overlay 'before-string nil))
! 
        (if ediff-xemacs-p
          (ediff-overlay-put overlay 'end-glyph nil)
        (ediff-overlay-put overlay 'after-string nil))
***************
*** 3604,3635 ****
                       (ediff-get-diff-overlay diff-no buf-type)))
         (before (ediff-get-diff-posn buf-type 'beg diff-no ctl-buffer))
         after beg-of-line flag)
!       
      ;; insert flag before the difference
      (goto-char before)
      (setq beg-of-line (bolp))
!     
      (setq flag (ediff-with-current-buffer ctl-buffer
                 (if (eq ediff-highlighting-style 'ascii)
                     (if beg-of-line
                         ediff-before-flag-bol ediff-before-flag-mol))))
!     
      ;; insert the flag itself
      (if ediff-xemacs-p
        (ediff-overlay-put curr-overl 'begin-glyph flag)
        (ediff-overlay-put curr-overl 'before-string flag))
!     
      ;; insert the flag after the difference
      ;; `after' must be set here, after the before-flag was inserted
      (setq after (ediff-get-diff-posn buf-type 'end diff-no ctl-buffer))
      (goto-char after)
      (setq beg-of-line (bolp))
!     
      (setq flag (ediff-with-current-buffer ctl-buffer
                 (if (eq ediff-highlighting-style 'ascii)
                     (if beg-of-line
                         ediff-after-flag-eol ediff-after-flag-mol))))
!     
      ;; insert the flag itself
      (if ediff-xemacs-p
        (ediff-overlay-put curr-overl 'end-glyph flag)
--- 3604,3635 ----
                       (ediff-get-diff-overlay diff-no buf-type)))
         (before (ediff-get-diff-posn buf-type 'beg diff-no ctl-buffer))
         after beg-of-line flag)
! 
      ;; insert flag before the difference
      (goto-char before)
      (setq beg-of-line (bolp))
! 
      (setq flag (ediff-with-current-buffer ctl-buffer
                 (if (eq ediff-highlighting-style 'ascii)
                     (if beg-of-line
                         ediff-before-flag-bol ediff-before-flag-mol))))
! 
      ;; insert the flag itself
      (if ediff-xemacs-p
        (ediff-overlay-put curr-overl 'begin-glyph flag)
        (ediff-overlay-put curr-overl 'before-string flag))
! 
      ;; insert the flag after the difference
      ;; `after' must be set here, after the before-flag was inserted
      (setq after (ediff-get-diff-posn buf-type 'end diff-no ctl-buffer))
      (goto-char after)
      (setq beg-of-line (bolp))
! 
      (setq flag (ediff-with-current-buffer ctl-buffer
                 (if (eq ediff-highlighting-style 'ascii)
                     (if beg-of-line
                         ediff-after-flag-eol ediff-after-flag-mol))))
! 
      ;; insert the flag itself
      (if ediff-xemacs-p
        (ediff-overlay-put curr-overl 'end-glyph flag)
***************
*** 3670,3681 ****
      (buffer-substring
       (or start (ediff-get-diff-posn buf-type 'beg n ctrl-buf))
       (or end (ediff-get-diff-posn buf-type 'end n ctrl-buf)))))
!   
  ;; Returns positions of difference sectors in the BUF-TYPE buffer.
! ;; BUF-TYPE should be a symbol -- `A', `B', or `C'. 
  ;; POS is either `beg' or `end'--it specifies whether you want the position at
  ;; the beginning of a difference or at the end.
! ;; 
  ;; The optional argument N says which difference (default:
  ;; `ediff-current-difference').  N is the internal difference number (1- what
  ;; the user sees).  The optional argument CONTROL-BUF says
--- 3670,3681 ----
      (buffer-substring
       (or start (ediff-get-diff-posn buf-type 'beg n ctrl-buf))
       (or end (ediff-get-diff-posn buf-type 'end n ctrl-buf)))))
! 
  ;; Returns positions of difference sectors in the BUF-TYPE buffer.
! ;; BUF-TYPE should be a symbol -- `A', `B', or `C'.
  ;; POS is either `beg' or `end'--it specifies whether you want the position at
  ;; the beginning of a difference or at the end.
! ;;
  ;; The optional argument N says which difference (default:
  ;; `ediff-current-difference').  N is the internal difference number (1- what
  ;; the user sees).  The optional argument CONTROL-BUF says
***************
*** 3706,3726 ****
  ;; ediff-highlighting-style, and ediff-highlight-all-diffs variables.
  (defun ediff-restore-highlighting (&optional ctl-buf)
    (ediff-with-current-buffer (or ctl-buf (current-buffer))
!     (if (and (ediff-has-face-support-p) 
             ediff-use-faces
             ediff-highlight-all-diffs)
        (ediff-paint-background-regions))
      (ediff-select-difference ediff-current-difference)))
  
  
!     
  ;; null out difference overlays so they won't slow down future
  ;; editing operations
  ;; VEC is either a difference vector or a fine-diff vector
  (defun ediff-clear-diff-vector (vec-var &optional fine-diffs-also)
    (if (vectorp (symbol-value vec-var))
        (mapcar (lambda (elt)
!               (ediff-delete-overlay 
                 (ediff-get-diff-overlay-from-diff-record elt))
                (if fine-diffs-also
                    (ediff-clear-fine-diff-vector elt))
--- 3706,3726 ----
  ;; ediff-highlighting-style, and ediff-highlight-all-diffs variables.
  (defun ediff-restore-highlighting (&optional ctl-buf)
    (ediff-with-current-buffer (or ctl-buf (current-buffer))
!     (if (and (ediff-has-face-support-p)
             ediff-use-faces
             ediff-highlight-all-diffs)
        (ediff-paint-background-regions))
      (ediff-select-difference ediff-current-difference)))
  
  
! 
  ;; null out difference overlays so they won't slow down future
  ;; editing operations
  ;; VEC is either a difference vector or a fine-diff vector
  (defun ediff-clear-diff-vector (vec-var &optional fine-diffs-also)
    (if (vectorp (symbol-value vec-var))
        (mapcar (lambda (elt)
!               (ediff-delete-overlay
                 (ediff-get-diff-overlay-from-diff-record elt))
                (if fine-diffs-also
                    (ediff-clear-fine-diff-vector elt))
***************
*** 3729,3735 ****
    ;; allow them to be garbage collected
    (set vec-var nil))
  
!        
  
  ;;; Misc
  
--- 3729,3735 ----
    ;; allow them to be garbage collected
    (set vec-var nil))
  
! 
  
  ;;; Misc
  
***************
*** 3749,3761 ****
              (setq beg (eval beg)))
          (or (number-or-marker-p end)
              (setq end (eval end)))
!         (setq overl 
                (ediff-cond-compile-for-xemacs-or-emacs
                 (make-extent beg end buff)                     ; xemacs
                 ;; advance front and rear of the overlay
                 (make-overlay beg end buff nil 'rear-advance)  ; emacs
                 ))
!         
          ;; never detach
          (ediff-overlay-put
           overl (if ediff-emacs-p 'evaporate 'detachable) nil)
--- 3749,3761 ----
              (setq beg (eval beg)))
          (or (number-or-marker-p end)
              (setq end (eval end)))
!         (setq overl
                (ediff-cond-compile-for-xemacs-or-emacs
                 (make-extent beg end buff)                     ; xemacs
                 ;; advance front and rear of the overlay
                 (make-overlay beg end buff nil 'rear-advance)  ; emacs
                 ))
! 
          ;; never detach
          (ediff-overlay-put
           overl (if ediff-emacs-p 'evaporate 'detachable) nil)
***************
*** 3763,3769 ****
          ;; In emacs, it is made open ended at creation time
          (if ediff-xemacs-p
              (progn
!               (ediff-overlay-put overl 'start-open nil) 
                (ediff-overlay-put overl 'end-open nil)))
          (ediff-overlay-put overl 'ediff-diff-num 0)
          overl))))
--- 3763,3769 ----
          ;; In emacs, it is made open ended at creation time
          (if ediff-xemacs-p
              (progn
!               (ediff-overlay-put overl 'start-open nil)
                (ediff-overlay-put overl 'end-open nil)))
          (ediff-overlay-put overl 'ediff-diff-num 0)
          overl))))
***************
*** 3783,3795 ****
        (ediff-set-overlay-face (symbol-value overlay) face)
        (ediff-overlay-put (symbol-value overlay) 'ediff ediff-control-buffer))
      ))
!         
!   
  ;; Like other-buffer, but prefers visible buffers and ignores temporary or
  ;; other insignificant buffers (those beginning with "^[ *]").
  ;; Gets one arg--buffer name or a list of buffer names (it won't return
  ;; these buffers).
! ;; EXCL-BUFF-LIST is an exclusion list. 
  (defun ediff-other-buffer (excl-buff-lst)
    (or (listp excl-buff-lst) (setq excl-buff-lst (list excl-buff-lst)))
    (let* ((all-buffers (nconc (ediff-get-selected-buffers) (buffer-list)))
--- 3783,3795 ----
        (ediff-set-overlay-face (symbol-value overlay) face)
        (ediff-overlay-put (symbol-value overlay) 'ediff ediff-control-buffer))
      ))
! 
! 
  ;; Like other-buffer, but prefers visible buffers and ignores temporary or
  ;; other insignificant buffers (those beginning with "^[ *]").
  ;; Gets one arg--buffer name or a list of buffer names (it won't return
  ;; these buffers).
! ;; EXCL-BUFF-LIST is an exclusion list.
  (defun ediff-other-buffer (excl-buff-lst)
    (or (listp excl-buff-lst) (setq excl-buff-lst (list excl-buff-lst)))
    (let* ((all-buffers (nconc (ediff-get-selected-buffers) (buffer-list)))
***************
*** 3799,3806 ****
         (selected-buffers (ediff-get-selected-buffers))
         (prefered-buffer (car all-buffers))
         visible-dired-buffers
!        (excl-buff-name-list 
!         (mapcar 
           (lambda (b) (cond ((stringp b) b)
                             ((bufferp b) (buffer-name b))))
           excl-buff-lst))
--- 3799,3806 ----
         (selected-buffers (ediff-get-selected-buffers))
         (prefered-buffer (car all-buffers))
         visible-dired-buffers
!        (excl-buff-name-list
!         (mapcar
           (lambda (b) (cond ((stringp b) b)
                             ((bufferp b) (buffer-name b))))
           excl-buff-lst))
***************
*** 3857,3866 ****
         (clean-significant-buffers (delq nil significant-buffers))
         less-significant-buffers)
  
!     (if (and (null clean-significant-buffers) 
             (> (length visible-dired-buffers) 0))
        (setq clean-significant-buffers visible-dired-buffers))
!        
      (cond (clean-significant-buffers (car clean-significant-buffers))
          ;; try also buffers that are not displayed in windows
          ((setq less-significant-buffers
--- 3857,3866 ----
         (clean-significant-buffers (delq nil significant-buffers))
         less-significant-buffers)
  
!     (if (and (null clean-significant-buffers)
             (> (length visible-dired-buffers) 0))
        (setq clean-significant-buffers visible-dired-buffers))
! 
      (cond (clean-significant-buffers (car clean-significant-buffers))
          ;; try also buffers that are not displayed in windows
          ((setq less-significant-buffers
***************
*** 3884,3890 ****
           (car less-significant-buffers))
          (t "*scratch*"))
      ))
!       
  
  ;; If current buffer is a Buffer-menu buffer, then take the selected buffers
  ;; and append the buffer at the cursor to the end.
--- 3884,3890 ----
           (car less-significant-buffers))
          (t "*scratch*"))
      ))
! 
  
  ;; If current buffer is a Buffer-menu buffer, then take the selected buffers
  ;; and append the buffer at the cursor to the end.
***************
*** 3902,3910 ****
            (setq lis (cons (Buffer-menu-buffer t) lis)))
          lis))
      ))
!       
  ;; Construct a unique buffer name.
! ;; The first one tried is prefixsuffix, then prefix<2>suffix, 
  ;; prefix<3>suffix, etc.
  (defun ediff-unique-buffer-name (prefix suffix)
    (if (null (get-buffer (concat prefix suffix)))
--- 3902,3910 ----
            (setq lis (cons (Buffer-menu-buffer t) lis)))
          lis))
      ))
! 
  ;; Construct a unique buffer name.
! ;; The first one tried is prefixsuffix, then prefix<2>suffix,
  ;; prefix<3>suffix, etc.
  (defun ediff-unique-buffer-name (prefix suffix)
    (if (null (get-buffer (concat prefix suffix)))
***************
*** 3913,3919 ****
        (while (get-buffer (format "%s<%d>%s" prefix n suffix))
        (setq n (1+ n)))
        (format "%s<%d>%s" prefix n suffix))))
!   
  
  (defun ediff-submit-report ()
    "Submit bug report on Ediff."
--- 3913,3919 ----
        (while (get-buffer (format "%s<%d>%s" prefix n suffix))
        (setq n (1+ n)))
        (format "%s<%d>%s" prefix n suffix))))
! 
  
  (defun ediff-submit-report ()
    "Submit bug report on Ediff."
***************
*** 3926,3932 ****
      (setq varlist '(ediff-diff-program ediff-diff-options
                    ediff-patch-program ediff-patch-options
                    ediff-shell
!                   ediff-use-faces 
                    ediff-auto-refine ediff-highlighting-style
                    ediff-buffer-A ediff-buffer-B ediff-control-buffer
                    ediff-forward-word-function
--- 3926,3932 ----
      (setq varlist '(ediff-diff-program ediff-diff-options
                    ediff-patch-program ediff-patch-options
                    ediff-shell
!                   ediff-use-faces
                    ediff-auto-refine ediff-highlighting-style
                    ediff-buffer-A ediff-buffer-B ediff-control-buffer
                    ediff-forward-word-function
***************
*** 3948,3957 ****
  and mail it to the address above.
  -----------------------------------------------------------
  ")
!     
      (ediff-skip-unsuitable-frames)
      (ediff-reset-mouse)
!     
      (switch-to-buffer ediff-msg-buffer)
      (erase-buffer)
      (delete-other-windows)
--- 3948,3957 ----
  and mail it to the address above.
  -----------------------------------------------------------
  ")
! 
      (ediff-skip-unsuitable-frames)
      (ediff-reset-mouse)
! 
      (switch-to-buffer ediff-msg-buffer)
      (erase-buffer)
      (delete-other-windows)
***************
*** 3978,3984 ****
         ** reference to free variable pm-color-alist
           ........................
         While compiling the end of the data:
!        ** The following functions are not known to be defined: 
           ediff-valid-color-p, ediff-set-face,
           ........................
  
--- 3978,3984 ----
         ** reference to free variable pm-color-alist
           ........................
         While compiling the end of the data:
!        ** The following functions are not known to be defined:
           ediff-valid-color-p, ediff-set-face,
           ........................
  
***************
*** 3988,3994 ****
  suggestions are always welcome.
  
  Mail anyway? (y or n) ")
!       
      (if (y-or-n-p "Mail anyway? ")
        (progn
          (if (ediff-buffer-live-p ctl-buf)
--- 3988,3994 ----
  suggestions are always welcome.
  
  Mail anyway? (y or n) ")
! 
      (if (y-or-n-p "Mail anyway? ")
        (progn
          (if (ediff-buffer-live-p ctl-buf)
***************
*** 3998,4004 ****
          (reporter-submit-bug-report "address@hidden"
                                      (ediff-version)
                                      varlist
!                                     nil 
                                      'delete-other-windows
                                      salutation))
        (bury-buffer)
--- 3998,4004 ----
          (reporter-submit-bug-report "address@hidden"
                                      (ediff-version)
                                      varlist
!                                     nil
                                      'delete-other-windows
                                      salutation))
        (bury-buffer)
***************
*** 4018,4033 ****
  (defun ediff-choose-syntax-table ()
    (setq ediff-syntax-table
        (ediff-with-current-buffer ediff-buffer-A
!         (if (not (memq major-mode 
                         '(fundamental-mode text-mode indented-text-mode)))
              (syntax-table))))
    (if (not ediff-syntax-table)
!       (setq ediff-syntax-table 
            (ediff-with-current-buffer ediff-buffer-B
              (syntax-table))))
    )
  
!        
  (defun ediff-deactivate-mark ()
    (ediff-cond-compile-for-xemacs-or-emacs
     (zmacs-deactivate-region) ; xemacs
--- 4018,4033 ----
  (defun ediff-choose-syntax-table ()
    (setq ediff-syntax-table
        (ediff-with-current-buffer ediff-buffer-A
!         (if (not (memq major-mode
                         '(fundamental-mode text-mode indented-text-mode)))
              (syntax-table))))
    (if (not ediff-syntax-table)
!       (setq ediff-syntax-table
            (ediff-with-current-buffer ediff-buffer-B
              (syntax-table))))
    )
  
! 
  (defun ediff-deactivate-mark ()
    (ediff-cond-compile-for-xemacs-or-emacs
     (zmacs-deactivate-region) ; xemacs
***************
*** 4062,4068 ****
               (setq selective-display nil)))))
         ))
  
!        
  ;; The next two are modified versions from emerge.el.
  ;; VARS must be a list of symbols
  ;; ediff-save-variables returns an association list: ((var . val) ...)
--- 4062,4068 ----
               (setq selective-display nil)))))
         ))
  
! 
  ;; The next two are modified versions from emerge.el.
  ;; VARS must be a list of symbols
  ;; ediff-save-variables returns an association list: ((var . val) ...)
***************
*** 4083,4090 ****
         (assoc-elt (assoc var assoc-list)))
    (if assoc-elt
        (setcdr assoc-elt value))))
!   
!   
  ;; must execute in control buf
  (defun ediff-save-protected-variables ()
    (setq ediff-buffer-values-orig-A
--- 4083,4090 ----
         (assoc-elt (assoc var assoc-list)))
    (if assoc-elt
        (setcdr assoc-elt value))))
! 
! 
  ;; must execute in control buf
  (defun ediff-save-protected-variables ()
    (setq ediff-buffer-values-orig-A
***************
*** 4144,4150 ****
  
  (defsubst ediff-save-time ()
    (setq ediff-command-begin-time (current-time)))
!     
  (defun ediff-profile ()
    "Toggle profiling Ediff commands."
    (interactive)
--- 4144,4150 ----
  
  (defsubst ediff-save-time ()
    (setq ediff-command-begin-time (current-time)))
! 
  (defun ediff-profile ()
    "Toggle profiling Ediff commands."
    (interactive)
***************
*** 4165,4171 ****
        (add-hook pre-hook 'ediff-save-time t 'local)
        (add-hook post-hook 'ediff-calc-command-time nil 'local)
        (message "Ediff profiling enabled"))))
!     
  (defun ediff-print-diff-vector (diff-vector-var)
    (princ (format "\n*** %S ***\n" diff-vector-var))
    (mapcar (lambda (overl-vec)
--- 4165,4171 ----
        (add-hook pre-hook 'ediff-save-time t 'local)
        (add-hook post-hook 'ediff-calc-command-time nil 'local)
        (message "Ediff profiling enabled"))))
! 
  (defun ediff-print-diff-vector (diff-vector-var)
    (princ (format "\n*** %S ***\n" diff-vector-var))
    (mapcar (lambda (overl-vec)
***************
*** 4176,4182 ****
  \t\tNo-fine-diff-flag: %S
  \t\tState-of-diff:\t   %S
  \t\tState-of-merge:\t   %S
! " 
              (1+ (ediff-overlay-get (aref overl-vec 0) 'ediff-diff-num))
              (aref overl-vec 0)
              ;; fine-diff-vector
--- 4176,4182 ----
  \t\tNo-fine-diff-flag: %S
  \t\tState-of-diff:\t   %S
  \t\tState-of-merge:\t   %S
! "
              (1+ (ediff-overlay-get (aref overl-vec 0) 'ediff-diff-num))
              (aref overl-vec 0)
              ;; fine-diff-vector
***************
*** 4190,4196 ****
              )))
          (eval diff-vector-var)))
  
!   
  
  (defun ediff-debug-info ()
    (interactive)
--- 4190,4196 ----
              )))
          (eval diff-vector-var)))
  
! 
  
  (defun ediff-debug-info ()
    (interactive)
***************
*** 4233,4239 ****
          (nconc result (list (car lis1))))
        (setq lis1 (cdr lis1)))
      (cdr result)))
!     
  
  ;; eliminates duplicates using comparison-func
  (defun ediff-union (lis1 lis2 comparison-func)
--- 4233,4239 ----
          (nconc result (list (car lis1))))
        (setq lis1 (cdr lis1)))
      (cdr result)))
! 
  
  ;; eliminates duplicates using comparison-func
  (defun ediff-union (lis1 lis2 comparison-func)
***************
*** 4278,4284 ****
  ;;(ediff-load-version-control 'silent)
  
  (run-hooks 'ediff-load-hook)
!     
  
  ;;; Local Variables:
  ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
--- 4278,4284 ----
  ;;(ediff-load-version-control 'silent)
  
  (run-hooks 'ediff-load-hook)
! 
  
  ;;; Local Variables:
  ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]