emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 3c1635e: Remove most of the XEmacs compat code from


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] master 3c1635e: Remove most of the XEmacs compat code from ediff*.el
Date: Sat, 5 Oct 2019 10:48:57 -0400 (EDT)

branch: master
commit 3c1635ebf2038d43c3400908e7e070d54192801a
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>

    Remove most of the XEmacs compat code from ediff*.el
    
    * lisp/vc/ediff-diff.el (ediff-word-1): Remove XEmacs compat code
    and declare compatibility functions for obsolete.  Adjust all callers.
    
    * lisp/vc/ediff-help.el (ediff-set-help-overlays):
    
    * lisp/vc/ediff-hook.el:
    (menu-bar-ediff-misc-menu, menu-bar-ediff-merge-menu)
    (menu-bar-ediff-menu, menu-bar-ediff-merge-menu)
    (menu-bar-epatch-menu, menu-bar-ediff-misc-menu):
    
    * lisp/vc/ediff-init.el (ediff-device-type)
    (ediff-window-display-p, ediff-has-face-support-p)
    (ediff-has-toolbar-support-p, ediff-has-gutter-support-p)
    (ediff-BAD-INFO, ediff-coding-system-for-write)
    (ediff-read-event, ediff-overlayp, ediff-make-overlay)
    (ediff-delete-overlay, ediff-color-display-p)
    (ediff-display-pixel-width, ediff-display-pixel-height)
    (ediff-region-help-echo, ediff-set-face-pixmap)
    (ediff-paint-background-regions-in-one-buffer)
    (ediff-clear-fine-diff-vector, ediff-mouse-event-p)
    (ediff-key-press-event-p, ediff-event-point, )
    (ediff-event-buffer, ediff-event-key, ediff-last-command-char)
    (ediff-frame-iconified-p, ediff-frame-char-width)
    (ediff-reset-mouse, ediff-frame-char-height)
    (ediff-overlay-start, ediff-overlay-end, ediff-overlay-buffer)
    (ediff-overlay-get, ediff-move-overlay, ediff-overlay-put)
    (ediff-abbreviate-file-name):
    
    * lisp/vc/ediff-mult.el (ediff-next-meta-item)
    (ediff-previous-meta-item)
    (ediff-replace-session-activity-marker-in-meta-buffer)
    (ediff-replace-session-status-in-meta-buffer)
    (ediff-redraw-directory-group-buffer)
    (ediff-update-markers-in-dir-meta-buffer)
    (ediff-update-session-marker-in-dir-meta-buffer)
    (ediff-redraw-registry-buffer, ediff-set-meta-overlay)
    (ediff-update-meta-buffer, ediff-get-meta-info)
    (ediff-get-meta-overlay-at-pos, )
    (ediff-get-session-number-at-pos, )
    (ediff-next-meta-overlay-start)
    (ediff-previous-meta-overlay-start, )
    (ediff-meta-mark-equal-files):
    
    * lisp/vc/ediff-util.el:
    (ediff-setup, ediff-setup-control-buffer, ediff-recenter)
    (ediff-recenter-one-window, ediff-toggle-read-only)
    (ediff-file-checked-out-p, ediff-file-checked-in-p)
    (ediff-toggle-wide-display, ediff-toggle-multiframe)
    (ediff-toggle-use-toolbar, ediff-kill-bottom-toolbar)
    (ediff-visible-region, ediff-scroll-vertically)
    (ediff-scroll-horizontally, ediff-jump-to-difference-at-point)
    (ediff-diff-to-diff, ediff-restore-diff)
    (ediff-toggle-regexp-match, ediff-really-quit)
    (ediff-cleanup-mess, ediff-highlight-diff-in-one-buffer)
    (ediff-unhighlight-diffs-totally-in-one-buffer)
    (ediff-save-buffer, ediff-make-cloned-buffer)
    (ediff-make-indirect-buffer, ediff-remove-flags-from-buffer)
    (ediff-place-flags-in-buffer1, ediff-get-diff-posn)
    (ediff-clear-diff-vector, ediff-make-bullet-proof-overlay)
    (ediff-submit-report, ediff-deactivate-mark)
    (ediff-activate-mark, ediff-profile, ediff-print-diff-vector):
    
    * lisp/vc/ediff-wind.el (ediff-control-frame-parameters)
    (ediff-get-window-by-clicking, ediff-select-lowest-window)
    (ediff-setup-windows-plain-merge)
    (ediff-setup-windows-plain-compare, ediff-setup-control-frame)
    (ediff-destroy-control-frame, ediff-make-frame-position)
    (ediff-make-wide-display, ediff-get-visible-buffer-window):
    
    * lisp/vc/ediff.el (ediff-version, ediff-documentation):
---
 lisp/vc/ediff-diff.el |   3 +-
 lisp/vc/ediff-help.el |   2 +-
 lisp/vc/ediff-hook.el | 351 +++++++++++++++++++-------------------------------
 lisp/vc/ediff-init.el | 212 +++++++++---------------------
 lisp/vc/ediff-mult.el | 157 +++++++++-------------
 lisp/vc/ediff-util.el | 197 +++++++---------------------
 lisp/vc/ediff-wind.el | 117 +++++------------
 lisp/vc/ediff.el      |   6 +-
 8 files changed, 346 insertions(+), 699 deletions(-)

diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el
index 0c8c896..dded160 100644
--- a/lisp/vc/ediff-diff.el
+++ b/lisp/vc/ediff-diff.el
@@ -1231,8 +1231,7 @@ Used for splitting difference regions into individual 
words.")
 These characters are ignored when differing regions are split into words.")
 (make-variable-buffer-local 'ediff-whitespace)
 
-(defvar ediff-word-1
-  (if (featurep 'xemacs) "a-zA-Z---_" "-[:word:]_")
+(defvar ediff-word-1 "-[:word:]_"
   "Characters that constitute words of type 1.
 More precisely, [ediff-word-1] is a regexp that matches type 1 words.
 See `ediff-forward-word' for more details.")
diff --git a/lisp/vc/ediff-help.el b/lisp/vc/ediff-help.el
index 0b12756..f291d40 100644
--- a/lisp/vc/ediff-help.el
+++ b/lisp/vc/ediff-help.el
@@ -166,7 +166,7 @@ the value of this variable and the variables 
`ediff-help-message-*' in
       (setq beg (match-beginning 1)
            end (match-end 0)
            cmd (buffer-substring (match-beginning 1) (match-end 1)))
-      (setq overl (ediff-make-overlay beg end))
+      (setq overl (make-overlay beg end))
       (ediff-overlay-put overl 'mouse-face 'highlight)
       (ediff-overlay-put overl 'ediff-help-info cmd))))
 
diff --git a/lisp/vc/ediff-hook.el b/lisp/vc/ediff-hook.el
index 7a04249..2aa03cc 100644
--- a/lisp/vc/ediff-hook.el
+++ b/lisp/vc/ediff-hook.el
@@ -44,222 +44,141 @@
 
 ;; allow menus to be set up without ediff-wind.el being loaded
 
-;; This autoload is useless in Emacs because ediff-hook.el is dumped with
-;; emacs, but it is needed in XEmacs
-;;;###autoload
-(if (featurep 'xemacs)
-    (progn
-      (defun ediff-xemacs-init-menus ()
-       (when (featurep 'menubar)
-         (add-submenu
-          '("Tools") ediff-menu "OO-Browser...")
-         (add-submenu
-          '("Tools") ediff-merge-menu "OO-Browser...")
-         (add-submenu
-          '("Tools") epatch-menu "OO-Browser...")
-         (add-submenu
-          '("Tools") ediff-misc-menu "OO-Browser...")
-         (add-menu-button
-          '("Tools") "-------" "OO-Browser...")
-         ))
-      (defvar ediff-menu
-       '("Compare"
-         ["Two Files..."  ediff-files t]
-         ["Two Buffers..." ediff-buffers t]
-         ["Three Files..."  ediff-files3 t]
-         ["Three Buffers..." ediff-buffers3 t]
-         "---"
-         ["Two Directories..." ediff-directories t]
-         ["Three Directories..." ediff-directories3 t]
-         "---"
-         ["File with Revision..."  ediff-revision t]
-         ["Directory Revisions..."  ediff-directory-revisions t]
-         "---"
-         ["Windows Word-by-word..." ediff-windows-wordwise t]
-         ["Windows Line-by-line..." ediff-windows-linewise t]
-         "---"
-         ["Regions Word-by-word..." ediff-regions-wordwise t]
-         ["Regions Line-by-line..." ediff-regions-linewise t]
-         ))
-      (defvar ediff-merge-menu
-       '("Merge"
-         ["Files..."  ediff-merge-files t]
-         ["Files with Ancestor..." ediff-merge-files-with-ancestor t]
-         ["Buffers..."  ediff-merge-buffers t]
-         ["Buffers with Ancestor..."
-          ediff-merge-buffers-with-ancestor t]
-         "---"
-         ["Directories..."  ediff-merge-directories t]
-         ["Directories with Ancestor..."
-          ediff-merge-directories-with-ancestor t]
-         "---"
-         ["Revisions..."  ediff-merge-revisions t]
-         ["Revisions with Ancestor..."
-          ediff-merge-revisions-with-ancestor t]
-         ["Directory Revisions..." ediff-merge-directory-revisions t]
-         ["Directory Revisions with Ancestor..."
-          ediff-merge-directory-revisions-with-ancestor t]
-         ))
-      (defvar epatch-menu
-       '("Apply Patch"
-         ["To a file..."  ediff-patch-file t]
-         ["To a buffer..." ediff-patch-buffer t]
-         ))
-      (defvar ediff-misc-menu
-       '("Ediff Miscellanea"
-         ["Ediff Manual" ediff-documentation t]
-         ["Customize Ediff" ediff-customize t]
-         ["List Ediff Sessions" ediff-show-registry t]
-         ["Use separate frame for Ediff control buffer"
-          ediff-toggle-multiframe
-          :style toggle
-          :selected (eq (bound-and-true-p ediff-window-setup-function)
-                        #'ediff-setup-windows-multiframe)]
-         ["Use a toolbar with Ediff control buffer"
-          ediff-toggle-use-toolbar
-          :style toggle
-          :selected (if (featurep 'ediff-tbar)
-                        (ediff-use-toolbar-p))]))
-
-      ;; put these menus before Object-Oriented-Browser in Tools menu
-      (if (and (featurep 'menubar) (not (featurep 'infodock))
-              (not (featurep 'ediff-hook)))
-         (ediff-xemacs-init-menus)))
-  ;; Emacs
-  ;; initialize menu bar keymaps
-  (defvar menu-bar-ediff-misc-menu
-    (make-sparse-keymap "Ediff Miscellanea"))
-  (fset 'menu-bar-ediff-misc-menu
-       menu-bar-ediff-misc-menu)
-  (defvar menu-bar-epatch-menu (make-sparse-keymap "Apply Patch"))
-  (fset 'menu-bar-epatch-menu menu-bar-epatch-menu)
-  (defvar menu-bar-ediff-merge-menu (make-sparse-keymap "Merge"))
-  (fset 'menu-bar-ediff-merge-menu
-       menu-bar-ediff-merge-menu)
-  (defvar menu-bar-ediff-menu (make-sparse-keymap "Compare"))
-  (fset 'menu-bar-ediff-menu menu-bar-ediff-menu)
-
-  ;; define ediff compare menu
-  (define-key menu-bar-ediff-menu [ediff-misc]
-    `(menu-item ,(purecopy "Ediff Miscellanea") menu-bar-ediff-misc-menu))
-  (define-key menu-bar-ediff-menu [separator-ediff-misc] menu-bar-separator)
-  (define-key menu-bar-ediff-menu [window]
-    `(menu-item ,(purecopy "This Window and Next Window") compare-windows
-               :help ,(purecopy "Compare the current window and the next 
window")))
-  (define-key menu-bar-ediff-menu [ediff-windows-linewise]
-    `(menu-item ,(purecopy "Windows Line-by-line...") ediff-windows-linewise
-               :help ,(purecopy "Compare windows line-wise")))
-  (define-key menu-bar-ediff-menu [ediff-windows-wordwise]
-    `(menu-item ,(purecopy "Windows Word-by-word...") ediff-windows-wordwise
-               :help ,(purecopy "Compare windows word-wise")))
-  (define-key menu-bar-ediff-menu [separator-ediff-windows] menu-bar-separator)
-  (define-key menu-bar-ediff-menu [ediff-regions-linewise]
-    `(menu-item ,(purecopy "Regions Line-by-line...") ediff-regions-linewise
-               :help ,(purecopy "Compare regions line-wise")))
-  (define-key menu-bar-ediff-menu [ediff-regions-wordwise]
-    `(menu-item ,(purecopy "Regions Word-by-word...") ediff-regions-wordwise
-               :help ,(purecopy "Compare regions word-wise")))
-  (define-key menu-bar-ediff-menu [separator-ediff-regions] menu-bar-separator)
-  (define-key menu-bar-ediff-menu [ediff-dir-revision]
-    `(menu-item ,(purecopy "Directory Revisions...") ediff-directory-revisions
-               :help ,(purecopy "Compare directory files with their older 
versions")))
-  (define-key menu-bar-ediff-menu [ediff-revision]
-    `(menu-item ,(purecopy "File with Revision...") ediff-revision
-               :help ,(purecopy "Compare file with its older versions")))
-  (define-key menu-bar-ediff-menu [separator-ediff-directories] 
menu-bar-separator)
-  (define-key menu-bar-ediff-menu [ediff-directories3]
-    `(menu-item ,(purecopy "Three Directories...") ediff-directories3
-               :help ,(purecopy "Compare files common to three directories 
simultaneously")))
-  (define-key menu-bar-ediff-menu [ediff-directories]
-    `(menu-item ,(purecopy "Two Directories...") ediff-directories
-               :help ,(purecopy "Compare files common to two directories 
simultaneously")))
-  (define-key menu-bar-ediff-menu [separator-ediff-files] menu-bar-separator)
-  (define-key menu-bar-ediff-menu [ediff-buffers3]
-    `(menu-item ,(purecopy "Three Buffers...") ediff-buffers3
-               :help ,(purecopy "Compare three buffers simultaneously")))
-  (define-key menu-bar-ediff-menu [ediff-files3]
-    `(menu-item ,(purecopy "Three Files...") ediff-files3
-               :help ,(purecopy "Compare three files simultaneously")))
-  (define-key menu-bar-ediff-menu [ediff-buffers]
-    `(menu-item ,(purecopy "Two Buffers...") ediff-buffers
-               :help ,(purecopy "Compare two buffers simultaneously")))
-  (define-key menu-bar-ediff-menu [ediff-files]
-    `(menu-item ,(purecopy "Two Files...") ediff-files
-               :help ,(purecopy "Compare two files simultaneously")))
-
-  ;; define ediff merge menu
-  (define-key
-    menu-bar-ediff-merge-menu [ediff-merge-dir-revisions-with-ancestor]
-    `(menu-item ,(purecopy "Directory Revisions with Ancestor...")
-      ediff-merge-directory-revisions-with-ancestor
-      :help ,(purecopy "Merge versions of the files in the same directory by 
comparing the files with common ancestors")))
-  (define-key
-    menu-bar-ediff-merge-menu [ediff-merge-dir-revisions]
-    `(menu-item ,(purecopy "Directory Revisions...") 
ediff-merge-directory-revisions
-      :help ,(purecopy "Merge versions of the files in the same directory 
(without using ancestor information)")))
-  (define-key
-    menu-bar-ediff-merge-menu [ediff-merge-revisions-with-ancestor]
-    `(menu-item ,(purecopy "Revisions with Ancestor...")
-      ediff-merge-revisions-with-ancestor
-      :help ,(purecopy "Merge versions of the same file by comparing them with 
a common ancestor")))
-  (define-key menu-bar-ediff-merge-menu [ediff-merge-revisions]
-    `(menu-item ,(purecopy "Revisions...") ediff-merge-revisions
-      :help ,(purecopy "Merge versions of the same file (without using 
ancestor information)")))
-  (define-key menu-bar-ediff-merge-menu [separator-ediff-merge] 
menu-bar-separator)
-  (define-key
-    menu-bar-ediff-merge-menu [ediff-merge-directories-with-ancestor]
-    `(menu-item ,(purecopy "Directories with Ancestor...")
-      ediff-merge-directories-with-ancestor
-      :help ,(purecopy "Merge files common to a pair of directories by 
comparing the files with common ancestors")))
-  (define-key menu-bar-ediff-merge-menu [ediff-merge-directories]
-    `(menu-item ,(purecopy "Directories...") ediff-merge-directories
-               :help ,(purecopy "Merge files common to a pair of 
directories")))
-  (define-key
-    menu-bar-ediff-merge-menu [separator-ediff-merge-dirs] menu-bar-separator)
-  (define-key
-    menu-bar-ediff-merge-menu [ediff-merge-buffers-with-ancestor]
-    `(menu-item ,(purecopy "Buffers with Ancestor...") 
ediff-merge-buffers-with-ancestor
-      :help ,(purecopy "Merge buffers by comparing their contents with a 
common ancestor")))
-  (define-key menu-bar-ediff-merge-menu [ediff-merge-buffers]
-    `(menu-item ,(purecopy "Buffers...") ediff-merge-buffers
-      :help ,(purecopy "Merge buffers (without using ancestor information)")))
-  (define-key menu-bar-ediff-merge-menu [ediff-merge-files-with-ancestor]
-    `(menu-item ,(purecopy "Files with Ancestor...") 
ediff-merge-files-with-ancestor
-      :help ,(purecopy "Merge files by comparing them with a common 
ancestor")))
-  (define-key menu-bar-ediff-merge-menu [ediff-merge-files]
-    `(menu-item ,(purecopy "Files...") ediff-merge-files
-      :help ,(purecopy "Merge files (without using ancestor information)")))
-
-  ;; define epatch menu
-  (define-key menu-bar-epatch-menu [ediff-patch-buffer]
-    `(menu-item ,(purecopy "To a Buffer...") ediff-patch-buffer
-      :help ,(purecopy "Apply a patch to the contents of a buffer")))
-  (define-key menu-bar-epatch-menu [ediff-patch-file]
-    `(menu-item ,(purecopy "To a File...") ediff-patch-file
-      :help ,(purecopy "Apply a patch to a file")))
-
-  ;; define ediff miscellanea
-  (define-key menu-bar-ediff-misc-menu [emultiframe]
-    `(menu-item ,(purecopy "Use separate control buffer frame")
-      ediff-toggle-multiframe
-      :help ,(purecopy "Switch between the single-frame presentation mode and 
the multi-frame mode")
-      :button (:toggle . (eq (bound-and-true-p ediff-window-setup-function)
-                            #'ediff-setup-windows-multiframe))))
-  ;; FIXME: Port XEmacs's toolbar support!
-  ;; ["Use a toolbar with Ediff control buffer"
-  ;;  ediff-toggle-use-toolbar
-  ;;  :style toggle
-  ;;  :selected (if (featurep 'ediff-tbar)
-  ;;            (ediff-use-toolbar-p))]
-  (define-key menu-bar-ediff-misc-menu [eregistry]
-    `(menu-item ,(purecopy "List Ediff Sessions") ediff-show-registry
-               :help ,(purecopy "List all active Ediff sessions; it is a 
convenient way to find and resume such a session")))
-  (define-key menu-bar-ediff-misc-menu [ediff-cust]
-    `(menu-item ,(purecopy "Customize Ediff") ediff-customize
-               :help ,(purecopy "Change some of the parameters that govern the 
behavior of Ediff")))
-  (define-key menu-bar-ediff-misc-menu [ediff-doc]
-    `(menu-item ,(purecopy "Ediff Manual") ediff-documentation
-               :help ,(purecopy "Bring up the Ediff manual"))))
+;; Emacs
+;; initialize menu bar keymaps
+(defvar menu-bar-ediff-misc-menu
+  (make-sparse-keymap "Ediff Miscellanea"))
+(fset 'menu-bar-ediff-misc-menu
+      menu-bar-ediff-misc-menu)
+(defvar menu-bar-epatch-menu (make-sparse-keymap "Apply Patch"))
+(fset 'menu-bar-epatch-menu menu-bar-epatch-menu)
+(defvar menu-bar-ediff-merge-menu (make-sparse-keymap "Merge"))
+(fset 'menu-bar-ediff-merge-menu
+      menu-bar-ediff-merge-menu)
+(defvar menu-bar-ediff-menu (make-sparse-keymap "Compare"))
+(fset 'menu-bar-ediff-menu menu-bar-ediff-menu)
+
+;; define ediff compare menu
+(define-key menu-bar-ediff-menu [ediff-misc]
+  `(menu-item ,(purecopy "Ediff Miscellanea") menu-bar-ediff-misc-menu))
+(define-key menu-bar-ediff-menu [separator-ediff-misc] menu-bar-separator)
+(define-key menu-bar-ediff-menu [window]
+  `(menu-item ,(purecopy "This Window and Next Window") compare-windows
+             :help ,(purecopy "Compare the current window and the next 
window")))
+(define-key menu-bar-ediff-menu [ediff-windows-linewise]
+  `(menu-item ,(purecopy "Windows Line-by-line...") ediff-windows-linewise
+             :help ,(purecopy "Compare windows line-wise")))
+(define-key menu-bar-ediff-menu [ediff-windows-wordwise]
+  `(menu-item ,(purecopy "Windows Word-by-word...") ediff-windows-wordwise
+             :help ,(purecopy "Compare windows word-wise")))
+(define-key menu-bar-ediff-menu [separator-ediff-windows] menu-bar-separator)
+(define-key menu-bar-ediff-menu [ediff-regions-linewise]
+  `(menu-item ,(purecopy "Regions Line-by-line...") ediff-regions-linewise
+             :help ,(purecopy "Compare regions line-wise")))
+(define-key menu-bar-ediff-menu [ediff-regions-wordwise]
+  `(menu-item ,(purecopy "Regions Word-by-word...") ediff-regions-wordwise
+             :help ,(purecopy "Compare regions word-wise")))
+(define-key menu-bar-ediff-menu [separator-ediff-regions] menu-bar-separator)
+(define-key menu-bar-ediff-menu [ediff-dir-revision]
+  `(menu-item ,(purecopy "Directory Revisions...") ediff-directory-revisions
+             :help ,(purecopy "Compare directory files with their older 
versions")))
+(define-key menu-bar-ediff-menu [ediff-revision]
+  `(menu-item ,(purecopy "File with Revision...") ediff-revision
+             :help ,(purecopy "Compare file with its older versions")))
+(define-key menu-bar-ediff-menu [separator-ediff-directories] 
menu-bar-separator)
+(define-key menu-bar-ediff-menu [ediff-directories3]
+  `(menu-item ,(purecopy "Three Directories...") ediff-directories3
+             :help ,(purecopy "Compare files common to three directories 
simultaneously")))
+(define-key menu-bar-ediff-menu [ediff-directories]
+  `(menu-item ,(purecopy "Two Directories...") ediff-directories
+             :help ,(purecopy "Compare files common to two directories 
simultaneously")))
+(define-key menu-bar-ediff-menu [separator-ediff-files] menu-bar-separator)
+(define-key menu-bar-ediff-menu [ediff-buffers3]
+  `(menu-item ,(purecopy "Three Buffers...") ediff-buffers3
+             :help ,(purecopy "Compare three buffers simultaneously")))
+(define-key menu-bar-ediff-menu [ediff-files3]
+  `(menu-item ,(purecopy "Three Files...") ediff-files3
+             :help ,(purecopy "Compare three files simultaneously")))
+(define-key menu-bar-ediff-menu [ediff-buffers]
+  `(menu-item ,(purecopy "Two Buffers...") ediff-buffers
+             :help ,(purecopy "Compare two buffers simultaneously")))
+(define-key menu-bar-ediff-menu [ediff-files]
+  `(menu-item ,(purecopy "Two Files...") ediff-files
+             :help ,(purecopy "Compare two files simultaneously")))
+
+;; define ediff merge menu
+(define-key
+  menu-bar-ediff-merge-menu [ediff-merge-dir-revisions-with-ancestor]
+  `(menu-item ,(purecopy "Directory Revisions with Ancestor...")
+              ediff-merge-directory-revisions-with-ancestor
+              :help ,(purecopy "Merge versions of the files in the same 
directory by comparing the files with common ancestors")))
+(define-key
+  menu-bar-ediff-merge-menu [ediff-merge-dir-revisions]
+  `(menu-item ,(purecopy "Directory Revisions...") 
ediff-merge-directory-revisions
+              :help ,(purecopy "Merge versions of the files in the same 
directory (without using ancestor information)")))
+(define-key
+  menu-bar-ediff-merge-menu [ediff-merge-revisions-with-ancestor]
+  `(menu-item ,(purecopy "Revisions with Ancestor...")
+              ediff-merge-revisions-with-ancestor
+              :help ,(purecopy "Merge versions of the same file by comparing 
them with a common ancestor")))
+(define-key menu-bar-ediff-merge-menu [ediff-merge-revisions]
+  `(menu-item ,(purecopy "Revisions...") ediff-merge-revisions
+              :help ,(purecopy "Merge versions of the same file (without using 
ancestor information)")))
+(define-key menu-bar-ediff-merge-menu [separator-ediff-merge] 
menu-bar-separator)
+(define-key
+  menu-bar-ediff-merge-menu [ediff-merge-directories-with-ancestor]
+  `(menu-item ,(purecopy "Directories with Ancestor...")
+              ediff-merge-directories-with-ancestor
+              :help ,(purecopy "Merge files common to a pair of directories by 
comparing the files with common ancestors")))
+(define-key menu-bar-ediff-merge-menu [ediff-merge-directories]
+  `(menu-item ,(purecopy "Directories...") ediff-merge-directories
+             :help ,(purecopy "Merge files common to a pair of directories")))
+(define-key
+  menu-bar-ediff-merge-menu [separator-ediff-merge-dirs] menu-bar-separator)
+(define-key
+  menu-bar-ediff-merge-menu [ediff-merge-buffers-with-ancestor]
+  `(menu-item ,(purecopy "Buffers with Ancestor...") 
ediff-merge-buffers-with-ancestor
+              :help ,(purecopy "Merge buffers by comparing their contents with 
a common ancestor")))
+(define-key menu-bar-ediff-merge-menu [ediff-merge-buffers]
+  `(menu-item ,(purecopy "Buffers...") ediff-merge-buffers
+              :help ,(purecopy "Merge buffers (without using ancestor 
information)")))
+(define-key menu-bar-ediff-merge-menu [ediff-merge-files-with-ancestor]
+  `(menu-item ,(purecopy "Files with Ancestor...") 
ediff-merge-files-with-ancestor
+              :help ,(purecopy "Merge files by comparing them with a common 
ancestor")))
+(define-key menu-bar-ediff-merge-menu [ediff-merge-files]
+  `(menu-item ,(purecopy "Files...") ediff-merge-files
+              :help ,(purecopy "Merge files (without using ancestor 
information)")))
+
+;; define epatch menu
+(define-key menu-bar-epatch-menu [ediff-patch-buffer]
+  `(menu-item ,(purecopy "To a Buffer...") ediff-patch-buffer
+              :help ,(purecopy "Apply a patch to the contents of a buffer")))
+(define-key menu-bar-epatch-menu [ediff-patch-file]
+  `(menu-item ,(purecopy "To a File...") ediff-patch-file
+              :help ,(purecopy "Apply a patch to a file")))
+
+;; define ediff miscellanea
+(define-key menu-bar-ediff-misc-menu [emultiframe]
+  `(menu-item ,(purecopy "Use separate control buffer frame")
+              ediff-toggle-multiframe
+              :help ,(purecopy "Switch between the single-frame presentation 
mode and the multi-frame mode")
+              :button (:toggle . (eq (bound-and-true-p 
ediff-window-setup-function)
+                                    #'ediff-setup-windows-multiframe))))
+;; FIXME: Port XEmacs's toolbar support!
+;; ["Use a toolbar with Ediff control buffer"
+;;  ediff-toggle-use-toolbar
+;;  :style toggle
+;;  :selected (if (featurep 'ediff-tbar)
+;;              (ediff-use-toolbar-p))]
+(define-key menu-bar-ediff-misc-menu [eregistry]
+  `(menu-item ,(purecopy "List Ediff Sessions") ediff-show-registry
+             :help ,(purecopy "List all active Ediff sessions; it is a 
convenient way to find and resume such a session")))
+(define-key menu-bar-ediff-misc-menu [ediff-cust]
+  `(menu-item ,(purecopy "Customize Ediff") ediff-customize
+             :help ,(purecopy "Change some of the parameters that govern the 
behavior of Ediff")))
+(define-key menu-bar-ediff-misc-menu [ediff-doc]
+  `(menu-item ,(purecopy "Ediff Manual") ediff-documentation
+             :help ,(purecopy "Bring up the Ediff manual")))
 
 (provide 'ediff-hook)
 ;;; ediff-hook.el ends here
diff --git a/lisp/vc/ediff-init.el b/lisp/vc/ediff-init.el
index c007d93..9e4d08d 100644
--- a/lisp/vc/ediff-init.el
+++ b/lisp/vc/ediff-init.el
@@ -45,30 +45,29 @@ that Ediff doesn't know about.")
 
 ;; Are we running as a window application or on a TTY?
 (defsubst ediff-device-type ()
-  (if (featurep 'xemacs)
-      (device-type (selected-device))
-    window-system))
+  (declare (obsolete nil "27.1"))
+  window-system)
 
 ;; in XEmacs: device-type is tty on tty and stream in batch.
 (defun ediff-window-display-p ()
-  (and (ediff-device-type) (not (memq (ediff-device-type) '(tty pc stream)))))
+  (and window-system
+       (not (memq window-system '(tty pc stream)))))
 
 ;; test if supports faces
 (defun ediff-has-face-support-p ()
   (cond ((ediff-window-display-p))
        (ediff-force-faces)
-       ((ediff-color-display-p))
-       (t (memq (ediff-device-type) '(pc)))))
+       ((display-color-p))
+       (t (memq window-system '(pc)))))
 
 ;; toolbar support for emacs hasn't been implemented in ediff
 (defun ediff-has-toolbar-support-p ()
-  (if (featurep 'xemacs)
-      (if (featurep 'toolbar) (console-on-window-system-p))))
+  nil)
 
 
 (defun ediff-has-gutter-support-p ()
-  (if (featurep 'xemacs)
-      (if (featurep 'gutter) (console-on-window-system-p))))
+  (declare (obsolete nil "27.1"))
+  nil)
 
 (defun ediff-use-toolbar-p ()
   (and (ediff-has-toolbar-support-p)   ;Can it do it ?
@@ -493,10 +492,9 @@ set local variables that determine how the display looks 
like."
   "%S: Bad diff region number, %d.  Valid numbers are 1 to %d")
 (defconst ediff-BAD-INFO (format "
 *** The Info file for Ediff, a part of the standard distribution
-*** of %sEmacs, does not seem to be properly installed.
+*** of Emacs, does not seem to be properly installed.
 ***
-*** Please contact your system administrator. "
-                                (if (featurep 'xemacs) "X" "")))
+*** Please contact your system administrator. "))
 
 ;; Selective browsing
 
@@ -553,24 +551,24 @@ See the documentation string of 
`ediff-focus-on-regexp-matches' for details.")
 
 
 ;; Highlighting
-(defcustom ediff-before-flag-bol (if (featurep 'xemacs) (make-glyph "->>") 
"->>")
+(defcustom ediff-before-flag-bol "->>"
   "Flag placed before a highlighted block of differences, if block starts at 
beginning of a line."
   :type 'string
   :tag  "Region before-flag at beginning of line"
   :group 'ediff)
 
-(defcustom ediff-after-flag-eol  (if (featurep 'xemacs) (make-glyph "<<-") 
"<<-")
+(defcustom ediff-after-flag-eol "<<-"
   "Flag placed after a highlighted block of differences, if block ends at end 
of a line."
   :type 'string
   :tag  "Region after-flag at end of line"
   :group 'ediff)
 
-(defcustom ediff-before-flag-mol (if (featurep 'xemacs) (make-glyph "->>") 
"->>")
+(defcustom ediff-before-flag-mol "->>"
   "Flag placed before a highlighted block of differences, if block starts in 
mid-line."
   :type 'string
   :tag  "Region before-flag in the middle of line"
   :group 'ediff)
-(defcustom ediff-after-flag-mol  (if (featurep 'xemacs) (make-glyph "<<-") 
"<<-")
+(defcustom ediff-after-flag-mol "<<-"
   "Flag placed after a highlighted block of differences, if block ends in 
mid-line."
   :type 'string
   :tag  "Region after-flag in the middle of line"
@@ -717,33 +715,22 @@ work."
   :type 'symbol
   :group 'ediff)
 
-(defcustom ediff-coding-system-for-write (if (featurep 'xemacs)
-                                            'escape-quoted
-                                          'emacs-internal)
+(defcustom ediff-coding-system-for-write 'emacs-internal
   "The coding system for write to use when writing out difference regions
 to temp files in buffer jobs and when Ediff needs to find fine differences."
   :type 'symbol
   :group 'ediff)
 
 
-(defalias 'ediff-read-event
-  (if (featurep 'xemacs) 'next-command-event 'read-event))
+(define-obsolete-function-alias 'ediff-read-event #'read-event "27.1")
 
-(defalias 'ediff-overlayp
-  (if (featurep 'xemacs) 'extentp 'overlayp))
+(define-obsolete-function-alias 'ediff-overlayp #'overlayp "27.1")
 
-(defalias 'ediff-make-overlay
-  (if (featurep 'xemacs) 'make-extent 'make-overlay))
+(define-obsolete-function-alias 'ediff-make-overlay #'make-overlay "27.1")
 
-(defalias 'ediff-delete-overlay
-  (if (featurep 'xemacs) 'delete-extent 'delete-overlay))
+(define-obsolete-function-alias 'ediff-delete-overlay #'delete-overlay "27.1")
 
-(defun ediff-color-display-p ()
-  (condition-case nil
-      (if (featurep 'xemacs)
-         (eq (device-class (selected-device)) 'color) ; xemacs form
-       (display-color-p)) ; emacs form
-    (error nil)))
+(define-obsolete-function-alias 'ediff-color-display-p #'display-color-p 
"27.1")
 
 
 ;; A var local to each control panel buffer.  Indicates highlighting style
@@ -754,12 +741,10 @@ to temp files in buffer jobs and when Ediff needs to find 
fine differences."
   "")
 
 
-(if (featurep 'xemacs)
-    (progn
-      (defalias 'ediff-display-pixel-width 'device-pixel-width)
-      (defalias 'ediff-display-pixel-height 'device-pixel-height))
-  (defalias 'ediff-display-pixel-width 'display-pixel-width)
-  (defalias 'ediff-display-pixel-height 'display-pixel-height))
+(define-obsolete-function-alias 'ediff-display-pixel-width
+  #'display-pixel-width "27.1")
+(define-obsolete-function-alias 'ediff-display-pixel-height
+  #'display-pixel-height "27.1")
 
 ;; A-list of current-diff-overlay symbols associated with buf types
 (defconst ediff-current-diff-overlay-alist
@@ -783,9 +768,9 @@ to temp files in buffer jobs and when Ediff needs to find 
fine differences."
 (defun ediff-region-help-echo (extent-or-window &optional overlay _point)
   (unless overlay
     (setq overlay extent-or-window))
-  (let ((is-current (ediff-overlay-get overlay 'ediff))
-       (face (ediff-overlay-get overlay 'face))
-       (diff-num (ediff-overlay-get overlay 'ediff-diff-num))
+  (let ((is-current (overlay-get overlay 'ediff))
+       (face (overlay-get overlay 'face))
+       (diff-num (overlay-get overlay 'ediff-diff-num))
        face-help)
 
     ;; This happens only for refinement overlays
@@ -804,7 +789,7 @@ to temp files in buffer jobs and when Ediff needs to find 
fine differences."
 
 (defun ediff-set-face-pixmap (face pixmap)
   "Set face pixmap on a monochrome display."
-  (if (and (ediff-window-display-p) (not (ediff-color-display-p)))
+  (if (and (ediff-window-display-p) (not (display-color-p)))
       (condition-case nil
          (set-face-background-pixmap face pixmap)
        (error
@@ -839,14 +824,6 @@ DO NOT CHANGE this variable.  Instead, use the 
customization
 widget to customize the actual face object `ediff-current-diff-A'
 this variable represents.")
 (ediff-hide-face ediff-current-diff-face-A)
-;; Until custom.el for XEmacs starts supporting :inverse-video we do this.
-;; This means that some user customization may be trashed.
-(and (featurep 'xemacs)
-     (ediff-has-face-support-p)
-     (not (ediff-color-display-p))
-     (copy-face 'modeline ediff-current-diff-face-A))
-
-
 
 (defface ediff-current-diff-B
   '((((class color) (min-colors 88) (background light))
@@ -869,13 +846,6 @@ this variable represents.")
 widget to customize the actual face `ediff-current-diff-B'
 this variable represents.")
 (ediff-hide-face ediff-current-diff-face-B)
-;; Until custom.el for XEmacs starts supporting :inverse-video we do this.
-;; This means that some user customization may be trashed.
-(and (featurep 'xemacs)
-     (ediff-has-face-support-p)
-     (not (ediff-color-display-p))
-     (copy-face 'modeline ediff-current-diff-face-B))
-
 
 (defface ediff-current-diff-C
   '((((class color) (min-colors 88) (background light))
@@ -897,13 +867,6 @@ DO NOT CHANGE this variable.  Instead, use the 
customization
 widget to customize the actual face object `ediff-current-diff-C'
 this variable represents.")
 (ediff-hide-face ediff-current-diff-face-C)
-;; Until custom.el for XEmacs starts supporting :inverse-video we do this.
-;; This means that some user customization may be trashed.
-(and (featurep 'xemacs)
-     (ediff-has-face-support-p)
-     (not (ediff-color-display-p))
-     (copy-face 'modeline ediff-current-diff-face-C))
-
 
 (defface ediff-current-diff-Ancestor
   '((((class color) (min-colors 88) (background light))
@@ -927,13 +890,6 @@ DO NOT CHANGE this variable.  Instead, use the 
customization
 widget to customize the actual face object `ediff-current-diff-Ancestor'
 this variable represents.")
 (ediff-hide-face ediff-current-diff-face-Ancestor)
-;; Until custom.el for XEmacs starts supporting :inverse-video we do this.
-;; This means that some user customization may be trashed.
-(and (featurep 'xemacs)
-     (ediff-has-face-support-p)
-     (not (ediff-color-display-p))
-     (copy-face 'modeline ediff-current-diff-face-Ancestor))
-
 
 (defface ediff-fine-diff-A
   '((((class color) (min-colors 88) (background light))
@@ -1383,8 +1339,8 @@ This default should work without changes."
        overl diff-num)
     (mapcar (lambda (rec)
              (setq overl (ediff-get-diff-overlay-from-diff-record rec)
-                   diff-num (ediff-overlay-get overl 'ediff-diff-num))
-             (if (ediff-overlay-buffer overl)
+                   diff-num (overlay-get overl 'ediff-diff-num))
+             (if (overlay-buffer overl)
                  ;; only if overlay is alive
                  (ediff-set-overlay-face
                   overl
@@ -1410,8 +1366,8 @@ This default should work without changes."
 ;; this record is itself a vector
 (defsubst ediff-clear-fine-diff-vector (diff-record)
   (if diff-record
-      (mapc #'ediff-delete-overlay
-           (ediff-get-fine-diff-vector-from-diff-record diff-record))))
+      (mapc #'delete-overlay
+            (ediff-get-fine-diff-vector-from-diff-record diff-record))))
 
 (defsubst ediff-clear-fine-differences-in-one-buffer (n buf-type)
   (ediff-clear-fine-diff-vector (ediff-get-difference n buf-type))
@@ -1425,49 +1381,37 @@ This default should work without changes."
 
 
 (defsubst ediff-mouse-event-p (event)
-  (if (featurep 'xemacs)
-      (button-event-p event)
-    (string-match "mouse" (format "%S" (event-basic-type event)))))
+  (string-match "mouse" (format "%S" (event-basic-type event))))
 
 
 (defsubst ediff-key-press-event-p (event)
-  (if (featurep 'xemacs)
-      (key-press-event-p event)
-    (or (char-or-string-p event) (symbolp event))))
+  (or (char-or-string-p event) (symbolp event)))
 
 (defun ediff-event-point (event)
   (cond ((ediff-mouse-event-p event)
-        (if (featurep 'xemacs)
-            (event-point event)
-          (posn-point (event-start event))))
+        (posn-point (event-start event)))
        ((ediff-key-press-event-p event)
         (point))
        (t (error "Error"))))
 
 (defun ediff-event-buffer (event)
   (cond ((ediff-mouse-event-p event)
-        (if (featurep 'xemacs)
-            (event-buffer event)
-          (window-buffer (posn-window (event-start event)))))
+        (window-buffer (posn-window (event-start event))))
        ((ediff-key-press-event-p event)
         (current-buffer))
        (t (error "Error"))))
 
-(defun ediff-event-key (event-or-key)
-  (if (featurep 'xemacs)
-      ;;(if (eventp event-or-key) (event-key event-or-key) event-or-key)
-      (if (eventp event-or-key) (event-to-character event-or-key t t) 
event-or-key)
-    event-or-key))
+(define-obsolete-function-alias 'ediff-event-key #'identity "27.1")
 
 (defun ediff-last-command-char ()
-  (ediff-event-key last-command-event))
+  (declare (obsolete nil "27.1"))
+  last-command-event)
 
 
 (defsubst ediff-frame-iconified-p (frame)
-  (and (ediff-window-display-p) (frame-live-p frame)
-       (if (featurep 'xemacs)
-          (frame-iconified-p frame)
-        (eq (frame-visible-p frame) 'icon))))
+  (and (ediff-window-display-p)
+       (frame-live-p frame)
+       (eq (frame-visible-p frame) 'icon)))
 
 (defsubst ediff-window-visible-p (wind)
   ;; under TTY, window-live-p also means window is visible
@@ -1476,17 +1420,13 @@ This default should work without changes."
           (frame-visible-p (window-frame wind)))))
 
 
-(defsubst ediff-frame-char-width (frame)
-  (if (featurep 'xemacs)
-      (/ (frame-pixel-width frame) (frame-width frame))
-    (frame-char-width frame)))
+(define-obsolete-function-alias 'ediff-frame-char-width
+  #'frame-char-width "27.1")
 
 (defun ediff-reset-mouse (&optional frame do-not-grab-mouse)
   (or frame (setq frame (selected-frame)))
   (if (ediff-window-display-p)
       (let ((frame-or-wind frame))
-       (if (featurep 'xemacs)
-           (setq frame-or-wind (frame-selected-window frame)))
        (or do-not-grab-mouse
            ;; don't set mouse if the user said to never do this
            (not ediff-grab-mouse)
@@ -1523,65 +1463,42 @@ This default should work without changes."
                          ediff-mouse-pixel-threshold))))
            (t nil))))
 
-(defsubst ediff-frame-char-height (frame)
-  (if (featurep 'xemacs)
-      (glyph-height ediff-H-glyph (frame-selected-window frame))
-    (frame-char-height frame)))
+(define-obsolete-function-alias 'ediff-frame-char-height
+  #'frame-char-height "27.1")
 
 ;; Some overlay functions
 
 (defsubst ediff-overlay-start (overl)
-  (if (ediff-overlayp overl)
-      (if (featurep 'xemacs)
-         (extent-start-position overl)
-       (overlay-start overl))))
+  (if (overlayp overl)
+      (overlay-start overl)))
 
 (defsubst ediff-overlay-end  (overl)
-  (if (ediff-overlayp overl)
-      (if (featurep 'xemacs)
-         (extent-end-position overl)
-       (overlay-end overl))))
+  (if (overlayp overl)
+      (overlay-end overl)))
 
 (defsubst ediff-empty-overlay-p (overl)
   (= (ediff-overlay-start overl) (ediff-overlay-end overl)))
 
-;; like overlay-buffer in Emacs.  In XEmacs, returns nil if the extent is
-;; dead.  Otherwise, works like extent-buffer
-(defun ediff-overlay-buffer (overl)
-  (if (featurep 'xemacs)
-      (and (extent-live-p overl) (extent-object overl))
-    (overlay-buffer overl)))
+(define-obsolete-function-alias 'ediff-overlay-buffer
+  #'overlay-buffer "27.1")
 
-;; like overlay-get in Emacs.  In XEmacs, returns nil if the extent is
-;; dead.  Otherwise, like extent-property
-(defun ediff-overlay-get (overl property)
-  (if (featurep 'xemacs)
-      (and (extent-live-p overl) (extent-property overl property))
-    (overlay-get overl property)))
+(define-obsolete-function-alias 'ediff-overlay-get #'overlay-get "27.1")
 
 
-;; These two functions are here because XEmacs refuses to
-;; handle overlays whose buffers were deleted.
 (defun ediff-move-overlay (overlay beg end &optional buffer)
-  "Calls `move-overlay' in Emacs and `set-extent-endpoints' in Lemacs.
-Checks if overlay's buffer exists before actually doing the move."
-  (let ((buf (and overlay (ediff-overlay-buffer overlay))))
+  "If OVERLAY's buffer exists, call `move-overlay'."
+  (let ((buf (and overlay (overlay-buffer overlay))))
     (if (ediff-buffer-live-p buf)
-       (if (featurep 'xemacs)
-           (set-extent-endpoints overlay beg end)
-         (move-overlay overlay beg end buffer))
+       (move-overlay overlay beg end buffer)
       ;; buffer's dead
       (if overlay
-         (ediff-delete-overlay overlay)))))
+         (delete-overlay overlay)))))
 
 (defun ediff-overlay-put (overlay prop value)
-  "Calls `overlay-put' or `set-extent-property' depending on Emacs version.
-Checks if overlay's buffer exists."
-  (if (ediff-buffer-live-p (ediff-overlay-buffer overlay))
-      (if (featurep 'xemacs)
-         (set-extent-property overlay prop value)
-       (overlay-put overlay prop value))
-    (ediff-delete-overlay overlay)))
+  "Calls `overlay-put', but checks if overlay's buffer exists."
+  (if (ediff-buffer-live-p (overlay-buffer overlay))
+      (overlay-put overlay prop value)
+    (delete-overlay overlay)))
 
 ;; temporarily uses DIR to abbreviate file name
 ;; if DIR is nil, use default-directory
@@ -1590,10 +1507,7 @@ Checks if overlay's buffer exists."
         (let ((directory-abbrev-alist (list (cons dir ""))))
           (abbreviate-file-name file)))
        (t
-        (if (featurep 'xemacs)
-            ;; XEmacs requires addl argument
-            (abbreviate-file-name file t)
-          (abbreviate-file-name file)))))
+        (abbreviate-file-name file))))
 
 ;; Takes a directory and returns the parent directory.
 ;; does nothing to `/'.  If the ARG is a regular file,
diff --git a/lisp/vc/ediff-mult.el b/lisp/vc/ediff-mult.el
index 3a869bf..4dc0485 100644
--- a/lisp/vc/ediff-mult.el
+++ b/lisp/vc/ediff-mult.el
@@ -471,7 +471,7 @@ Moves in circular fashion.  With numeric prefix arg, skip 
this many items."
       (ediff-next-meta-item1)
       (setq overl (ediff-get-meta-overlay-at-pos (point)))
       ;; skip invisible ones
-      (while (and overl (ediff-overlay-get overl 'invisible))
+      (while (and overl (overlay-get overl 'invisible))
        (ediff-next-meta-item1)
        (setq overl (ediff-get-meta-overlay-at-pos (point)))))))
 
@@ -499,7 +499,7 @@ Moves in circular fashion.  With numeric prefix arg, skip 
this many items."
       (ediff-previous-meta-item1)
       (setq overl (ediff-get-meta-overlay-at-pos (point)))
       ;; skip invisible ones
-      (while (and overl (ediff-overlay-get overl 'invisible))
+      (while (and overl (overlay-get overl 'invisible))
        (ediff-previous-meta-item1)
        (setq overl (ediff-get-meta-overlay-at-pos (point)))))))
 
@@ -929,7 +929,7 @@ behavior."
 ;; in the meta buffer.  If nil, use SPC
 (defun ediff-replace-session-activity-marker-in-meta-buffer (point new-marker)
   (let* ((overl (ediff-get-meta-overlay-at-pos point))
-        (session-info (ediff-overlay-get overl 'ediff-meta-info))
+        (session-info (overlay-get overl 'ediff-meta-info))
         (activity-marker (ediff-get-session-activity-marker session-info))
         buffer-read-only)
     (or new-marker activity-marker (setq new-marker ?\s))
@@ -944,7 +944,7 @@ behavior."
 ;; the meta buffer.  If nil, use SPC
 (defun ediff-replace-session-status-in-meta-buffer (point new-status)
   (let* ((overl (ediff-get-meta-overlay-at-pos point))
-        (session-info (ediff-overlay-get overl 'ediff-meta-info))
+        (session-info (overlay-get overl 'ediff-meta-info))
         (status (ediff-get-session-status session-info))
         buffer-read-only)
     (setq new-status (or new-status status ?\s))
@@ -988,9 +988,7 @@ behavior."
       (erase-buffer)
       ;; delete phony overlays that used to represent sessions before the buff
       ;; was redrawn
-      (if (featurep 'xemacs)
-         (map-extents 'delete-extent)
-       (mapc #'delete-overlay (overlays-in 1 1)))
+      (mapc #'delete-overlay (overlays-in 1 1))
 
       (setq regexp (ediff-get-group-regexp meta-list)
            merge-autostore-dir
@@ -1077,7 +1075,7 @@ behavior."
                     ;; Do hiding
                     (if overl (ediff-overlay-put overl 'invisible t)))
                    ((and (eq (ediff-get-session-status session-info) ?H)
-                         overl (ediff-overlay-get overl 'invisible))
+                         overl (overlay-get overl 'invisible))
                     ;; Do unhiding
                     (ediff-overlay-put overl 'invisible nil))
                    (t (ediff-replace-session-activity-marker-in-meta-buffer
@@ -1094,36 +1092,26 @@ behavior."
 
 (defun ediff-update-session-marker-in-dir-meta-buffer (session-num)
   (let (buffer-meta-overlays session-info overl buffer-read-only)
-    (setq overl
-         (if (featurep 'xemacs)
-             (map-extents
-              (lambda (ext _maparg)
-                (if (and
-                     (ediff-overlay-get ext 'ediff-meta-info)
-                     (eq (ediff-overlay-get ext 'ediff-meta-session-number)
-                         session-num))
-                    ext)))
-           ;; Emacs doesn't have map-extents, so try harder
-           ;; Splice overlay lists to get all buffer overlays
-           (setq buffer-meta-overlays (overlay-lists)
-                 buffer-meta-overlays (append (car buffer-meta-overlays)
-                                               (cdr buffer-meta-overlays)))
-           (car
-            (delq nil
-                  (mapcar
-                   (lambda (overl)
-                     (if (and
-                          (ediff-overlay-get overl 'ediff-meta-info)
-                          (eq (ediff-overlay-get
-                               overl 'ediff-meta-session-number)
-                              session-num))
-                         overl))
-                   buffer-meta-overlays)))))
+    ;; Splice overlay lists to get all buffer overlays
+    (setq buffer-meta-overlays (overlay-lists)
+         buffer-meta-overlays (append (car buffer-meta-overlays)
+                                      (cdr buffer-meta-overlays)))
+    (setq overl (car
+                (delq nil
+                      (mapcar
+                       (lambda (overl)
+                         (if (and
+                              (overlay-get overl 'ediff-meta-info)
+                              (eq (overlay-get
+                                    overl 'ediff-meta-session-number)
+                                  session-num))
+                             overl))
+                       buffer-meta-overlays))))
     (or overl
        (error
         "Bug in ediff-update-session-marker-in-dir-meta-buffer: no overlay 
with given number %S"
         session-num))
-    (setq session-info (ediff-overlay-get overl 'ediff-meta-info))
+    (setq session-info (overlay-get overl 'ediff-meta-info))
     (goto-char (ediff-overlay-start overl))
     (ediff-replace-session-activity-marker-in-meta-buffer
      (point)
@@ -1434,9 +1422,7 @@ Useful commands:
       (erase-buffer)
       ;; delete phony overlays that used to represent sessions before the buff
       ;; was redrawn
-      (if (featurep 'xemacs)
-         (map-extents 'delete-extent)
-       (mapc #'delete-overlay (overlays-in 1 1)))
+      (mapc #'delete-overlay (overlays-in 1 1))
 
       (insert (substitute-command-keys "\
 This is a registry of all active Ediff sessions.
@@ -1538,7 +1524,7 @@ Useful commands:
 ;;                 (SESSION-CTL-BUFFER STATUS OBJA OBJB OBJC)
 (defun ediff-set-meta-overlay (b e prop &optional session-number hidden)
   (let (overl)
-    (setq overl (ediff-make-overlay b e))
+    (setq overl (make-overlay b e))
     (ediff-overlay-put overl 'mouse-face 'highlight)
     (ediff-overlay-put overl 'ediff-meta-info prop)
     (ediff-overlay-put overl 'invisible hidden)
@@ -2167,7 +2153,7 @@ all marked sessions must be active."
                 (ediff-update-markers-in-dir-meta-buffer ediff-meta-list)))
          (setq overl (ediff-get-meta-overlay-at-pos (point)))
          ;; skip the invisible sessions
-         (while (and overl (ediff-overlay-get overl 'invisible))
+         (while (and overl (overlay-get overl 'invisible))
            (ediff-next-meta-item1)
            (setq overl (ediff-get-meta-overlay-at-pos (point))))
          ))))
@@ -2259,21 +2245,17 @@ If this is a session registry buffer then just bury it."
 ;; If optional NOERROR arg is given, don't report error and return nil if no
 ;; meta info is found on line.
 (defun ediff-get-meta-info (buf point &optional noerror)
-  (let (result olist tmp)
+  (let (result olist)
     (if (and point (ediff-buffer-live-p buf))
        (ediff-with-current-buffer buf
-         (if (featurep 'xemacs)
-             (setq result
-                   (if (setq tmp (extent-at point buf 'ediff-meta-info))
-                       (ediff-overlay-get tmp 'ediff-meta-info)))
-           (setq olist
-                 (mapcar (lambda (elt)
-                           (unless (overlay-get elt 'invisible)
-                             (overlay-get elt 'ediff-meta-info)))
-                         (overlays-at point)))
-           (while (and olist (null (car olist)))
-             (setq olist (cdr olist)))
-           (setq result (car olist)))))
+         (setq olist
+               (mapcar (lambda (elt)
+                         (unless (overlay-get elt 'invisible)
+                           (overlay-get elt 'ediff-meta-info)))
+                       (overlays-at point)))
+         (while (and olist (null (car olist)))
+           (setq olist (cdr olist)))
+         (setq result (car olist))))
     (or result
        (unless noerror
          (ediff-update-registry)
@@ -2281,21 +2263,19 @@ If this is a session registry buffer then just bury it."
 
 
 (defun ediff-get-meta-overlay-at-pos (point)
-  (if (featurep 'xemacs)
-      (extent-at point (current-buffer) 'ediff-meta-info)
-    (let* ((overl-list (overlays-at point))
-          (overl (car overl-list)))
-      (while (and overl (null (overlay-get overl 'ediff-meta-info)))
-       (setq overl-list (cdr overl-list)
-             overl (car overl-list)))
-      overl)))
+  (let* ((overl-list (overlays-at point))
+        (overl (car overl-list)))
+    (while (and overl (null (overlay-get overl 'ediff-meta-info)))
+      (setq overl-list (cdr overl-list)
+           overl (car overl-list)))
+    overl))
 
 (defun ediff-get-session-number-at-pos (point &optional meta-buffer)
   (setq meta-buffer (if (ediff-buffer-live-p meta-buffer)
                        meta-buffer
                      (current-buffer)))
   (ediff-with-current-buffer meta-buffer
-    (ediff-overlay-get
+    (overlay-get
      (ediff-get-meta-overlay-at-pos point) 'ediff-meta-session-number)))
 
 
@@ -2304,46 +2284,29 @@ If this is a session registry buffer then just bury it."
   (if (eobp)
       (goto-char (point-min))
     (let ((overl (ediff-get-meta-overlay-at-pos point)))
-      (if (featurep 'xemacs)
-         (progn ; xemacs
-           (if overl
-               (setq overl (next-extent overl))
-             (setq overl (next-extent (current-buffer))))
-           (if overl
-               (extent-start-position overl)
-             (point-max)))
-       ;; emacs
-       (if overl
-           ;; note: end of current overlay is the beginning of the next one
-           (overlay-end overl)
-         (next-overlay-change point))))))
+      (if overl
+         ;; note: end of current overlay is the beginning of the next one
+         (overlay-end overl)
+       (next-overlay-change point)))))
 
 
 (defun ediff-previous-meta-overlay-start (point)
   (if (bobp)
       (goto-char (point-max))
     (let ((overl (ediff-get-meta-overlay-at-pos point)))
-      (if (featurep 'xemacs)
-         (progn
-           (if overl
-               (setq overl (previous-extent overl))
-             (setq overl (previous-extent (current-buffer))))
-           (if overl
-               (extent-start-position overl)
-             (point-min)))
-       (if overl (setq point (overlay-start overl)))
-       ;; to get to the beginning of prev overlay
-       (if (not (bobp))
-           ;; trick to overcome an emacs bug--doesn't always find previous
-           ;; overlay change correctly
-           (setq point (1- point)))
-       (setq point (previous-overlay-change point))
-       ;; If we are not over an overlay after subtracting 1, it means we are
-       ;; in the description area preceding session records.  In this case,
-       ;; goto the top of the registry buffer.
-       (or (car (overlays-at point))
-           (setq point (point-min)))
-       point))))
+      (if overl (setq point (overlay-start overl)))
+      ;; to get to the beginning of prev overlay
+      (if (not (bobp))
+         ;; trick to overcome an emacs bug--doesn't always find previous
+         ;; overlay change correctly
+         (setq point (1- point)))
+      (setq point (previous-overlay-change point))
+      ;; If we are not over an overlay after subtracting 1, it means we are
+      ;; in the description area preceding session records.  In this case,
+      ;; goto the top of the registry buffer.
+      (or (car (overlays-at point))
+         (setq point (point-min)))
+      point)))
 
 (autoload 'ediff-patch-file-internal "ediff-ptch")
 
@@ -2403,10 +2366,10 @@ If this is a session registry buffer then just bury it."
 This is used only for sessions that involve 2 or 3 files at the same time.
 ACTION is an optional argument that can be ?h, ?m, ?=, to mark for hiding, mark
 for operation, or simply indicate which are equal files.  If it is nil, then
-`(ediff-last-command-char)' is used to decide which action to take."
+`last-command-event' is used to decide which action to take."
   (interactive)
   (if (null action)
-      (setq action (ediff-last-command-char)))
+      (setq action last-command-event))
   (let ((list (cdr ediff-meta-list))
        marked1 marked2 marked3
        fileinfo1 fileinfo2 fileinfo3 elt)
diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el
index 6b2f023..52a7654 100644
--- a/lisp/vc/ediff-util.el
+++ b/lisp/vc/ediff-util.el
@@ -48,9 +48,6 @@
 (require 'ediff-wind)
 (require 'ediff-diff)
 (require 'ediff-merg)
-;; for compatibility with current stable version of xemacs
-(if (featurep 'xemacs)
-    (require 'ediff-tbar))
 
 
 ;;; Functions
@@ -284,9 +281,6 @@ to invocation.")
       (make-local-variable 'window-min-height)
       (setq window-min-height 2)
 
-      (if (featurep 'xemacs)
-         (make-local-hook 'ediff-after-quit-hook-internal))
-
       ;; unwrap set up parameters passed as argument
       (while setup-parameters
        (set (car (car setup-parameters)) (cdr (car setup-parameters)))
@@ -308,9 +302,6 @@ to invocation.")
       (if (string-match "buffer" (symbol-name ediff-job-name))
          (setq ediff-keep-variants t))
 
-      (if (featurep 'xemacs)
-         (make-local-hook 'pre-command-hook))
-
       (if (ediff-window-display-p)
          (add-hook 'pre-command-hook 'ediff-spy-after-mouse nil 'local))
       (setq ediff-mouse-pixel-position (mouse-pixel-position))
@@ -417,7 +408,6 @@ to invocation.")
       ;; since these vars are local to control-buffer
       ;; These won't run if there are errors in diff
       (ediff-with-current-buffer ediff-buffer-A
-       (ediff-nuke-selective-display)
        (run-hooks 'ediff-prepare-buffer-hook)
        (if (ediff-with-current-buffer control-buffer ediff-merge-job)
            (setq buffer-read-only t))
@@ -431,7 +421,6 @@ to invocation.")
        )
 
       (ediff-with-current-buffer ediff-buffer-B
-       (ediff-nuke-selective-display)
        (run-hooks 'ediff-prepare-buffer-hook)
        (if (ediff-with-current-buffer control-buffer ediff-merge-job)
            (setq buffer-read-only t))
@@ -445,7 +434,6 @@ to invocation.")
 
       (if ediff-3way-job
          (ediff-with-current-buffer ediff-buffer-C
-           (ediff-nuke-selective-display)
            ;; the merge buffer should never be narrowed
            ;; (it can happen if it is on rmail-mode or similar)
            (if (ediff-with-current-buffer control-buffer ediff-merge-job)
@@ -463,7 +451,6 @@ to invocation.")
 
       (if (ediff-buffer-live-p ediff-ancestor-buffer)
          (ediff-with-current-buffer ediff-ancestor-buffer
-           (ediff-nuke-selective-display)
            (setq buffer-read-only t)
            (run-hooks 'ediff-prepare-buffer-hook)
            (or (memq control-buffer ediff-this-buffer-ediff-sessions)
@@ -560,9 +547,6 @@ to invocation.")
                  ediff-wide-display-p))
 
     (set-window-dedicated-p (selected-window) t)
-    ;; In multiframe, toolbar is set in ediff-setup-control-frame
-    (if (not (ediff-multiframe-setup-p))
-       (ediff-make-bottom-toolbar)) ; this checks if toolbar is requested
     (goto-char (point-min))
     (skip-chars-forward ediff-whitespace)))
 
@@ -773,9 +757,7 @@ Reestablish the default window display."
       (if (fboundp 'select-frame-set-input-focus)
          (select-frame-set-input-focus ediff-control-frame)
        (raise-frame ediff-control-frame)
-       (select-frame ediff-control-frame)
-       (and (featurep 'xemacs) (fboundp 'focus-frame)
-            (focus-frame ediff-control-frame))))
+       (select-frame ediff-control-frame)))
 
   ;; Redisplay whatever buffers are showing, if there is a selected difference
   (let ((control-frame ediff-control-frame)
@@ -831,7 +813,7 @@ Reestablish the default window display."
        (if window
            (progn
              (select-window window)
-             (ediff-deactivate-mark)
+             (deactivate-mark)
              (ediff-position-region
               (ediff-get-diff-posn buf-type 'beg nil control-buf)
               (ediff-get-diff-posn buf-type 'end nil control-buf)
@@ -1026,7 +1008,7 @@ of the current buffer."
   (interactive)
   (ediff-barf-if-not-control-buffer)
   (let ((ctl-buf (if (null buf) (current-buffer)))
-       (buf-type (ediff-char-to-buftype (ediff-last-command-char))))
+       (buf-type (ediff-char-to-buftype last-command-event)))
     (or buf (ediff-recenter))
     (or buf
        (setq buf (ediff-get-buffer buf-type)))
@@ -1134,10 +1116,7 @@ of the current buffer."
       (and (vc-backend file)
           (if (fboundp 'vc-state)
               (or (memq (vc-state file) '(edited needs-merge))
-                  (stringp (vc-state file)))
-            ;; XEmacs has no vc-state
-            (when (featurep 'xemacs) (vc-locking-user file)))
-          )))
+                  (stringp (vc-state file)))))))
 
 (defun ediff-file-checked-in-p (file)
   (and (featurep 'vc-hooks)
@@ -1146,10 +1125,7 @@ of the current buffer."
        (if (fboundp 'vc-state)
           (and
            (not (memq (vc-state file) '(edited needs-merge)))
-           (not (stringp (vc-state file))))
-        ;; XEmacs has no vc-state
-        (when (featurep 'xemacs) (not (vc-locking-user file))))
-       ))
+           (not (stringp (vc-state file)))))))
 
 (defun ediff-file-compressed-p (file)
   (require 'jka-compr)
@@ -1274,7 +1250,6 @@ This is especially useful when comparing buffers 
side-by-side."
        (ediff-with-current-buffer ctl-buf
          (modify-frame-parameters
           ediff-wide-display-frame ediff-wide-display-orig-parameters)
-         ;;(sit-for (if (featurep 'xemacs) 0.4 0))
          ;; restore control buf, since ctl window may have been deleted
          ;; during resizing
          (set-buffer ctl-buf)
@@ -1282,7 +1257,6 @@ This is especially useful when comparing buffers 
side-by-side."
                ediff-window-B nil) ; force update of window config
          (ediff-recenter 'no-rehighlight))
       (funcall ediff-make-wide-display-function)
-      ;;(sit-for (if (featurep 'xemacs) 0.4 0))
       (ediff-with-current-buffer ctl-buf
        (setq ediff-window-B nil) ; force update of window config
        (ediff-recenter 'no-rehighlight)))))
@@ -1302,8 +1276,6 @@ which see."
         (setq window-setup-func #'ediff-setup-windows-plain)
          (message "ediff is now in 'plain' mode"))
        ((eq ediff-window-setup-function #'ediff-setup-windows-plain)
-        (if (ediff-in-control-buffer-p)
-            (ediff-kill-bottom-toolbar))
         (if (and (ediff-buffer-live-p ediff-control-buffer)
                  (window-live-p ediff-control-window))
             (set-window-dedicated-p ediff-control-window nil))
@@ -1342,8 +1314,6 @@ To change the default, set the variable 
`ediff-use-toolbar-p', which see."
       (progn
        (or (ediff-window-display-p)
            (user-error "Emacs is not running as a window application"))
-       (if (ediff-use-toolbar-p)
-           (ediff-kill-bottom-toolbar))
        ;; do this only after killing the toolbar
        (setq ediff-use-toolbar-p (not ediff-use-toolbar-p))
 
@@ -1357,36 +1327,8 @@ To change the default, set the variable 
`ediff-use-toolbar-p', which see."
            (ediff-recenter 'no-rehighlight)))))
 
 
-;; if was using toolbar, kill it
-(defun ediff-kill-bottom-toolbar ()
-  ;; Using ctl-buffer or ediff-control-window for LOCALE does not
-  ;; work properly in XEmacs 19.14: we have to use
-  ;;(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 (featurep 'xemacs)
-      (when (ediff-use-toolbar-p)
-       (set-specifier bottom-toolbar (list (selected-frame) nil))
-       (set-specifier bottom-toolbar-visible-p (list (selected-frame) nil)))))
-
-;; If wants to use toolbar, make it.
-;; If not, zero the toolbar for XEmacs.
-;; Do nothing for Emacs.
-(defun ediff-make-bottom-toolbar (&optional frame)
-  (when (ediff-window-display-p)
-    (setq frame (or frame (selected-frame)))
-    (if (featurep 'xemacs)
-       (cond ((ediff-use-toolbar-p) ; this checks for XEmacs
-              (set-specifier
-               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)))
-             ((ediff-has-toolbar-support-p)
-              (set-specifier bottom-toolbar-height (list frame 0)))))))
+(define-obsolete-function-alias 'ediff-kill-bottom-toolbar #'ignore "27.1")
+(define-obsolete-function-alias 'ediff-make-bottom-toolbar #'ignore "27.1")
 
 ;; Merging
 
@@ -1449,15 +1391,15 @@ Used in ediff-windows/regions only."
                    'C  ediff-visible-bounds))
          )
       (ediff-with-current-buffer ediff-buffer-A
-       (if (ediff-overlay-buffer overl-A)
+       (if (overlay-buffer overl-A)
            (narrow-to-region
             (ediff-overlay-start overl-A) (ediff-overlay-end overl-A))))
       (ediff-with-current-buffer ediff-buffer-B
-       (if (ediff-overlay-buffer overl-B)
+       (if (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))
+      (if (and ediff-3way-job (overlay-buffer overl-C))
          (ediff-with-current-buffer ediff-buffer-C
            (narrow-to-region
             (ediff-overlay-start overl-C) (ediff-overlay-end overl-C))))
@@ -1540,7 +1482,7 @@ the one half of the height of window-A."
       (error ediff-KILLED-VITAL-BUFFER))
 
   (ediff-operate-on-windows
-   (if (memq (ediff-last-command-char) '(?v ?\C-v))
+   (if (memq last-command-event '(?v ?\C-v))
        #'scroll-up
      #'scroll-down)
    ;; calculate argument to scroll-up/down
@@ -1595,7 +1537,7 @@ the width of the A/B/C windows."
    ;; interactively so that they set the window's min_hscroll.
    ;; Otherwise, automatic hscrolling will undo the effect of
    ;; hscrolling.
-   (if (= (ediff-last-command-char) ?<)
+   (if (= last-command-event ?<)
        (lambda (arg)
         (let ((prefix-arg arg))
           (call-interactively #'scroll-left)))
@@ -1867,7 +1809,7 @@ With a prefix argument, synchronize all files around the 
current point position
 in the specified buffer."
   (interactive "P")
   (ediff-barf-if-not-control-buffer)
-  (let* ((buf-type (ediff-char-to-buftype (ediff-last-command-char)))
+  (let* ((buf-type (ediff-char-to-buftype last-command-event))
         (buffer (ediff-get-buffer buf-type))
         (pt (ediff-with-current-buffer buffer (point)))
         (diff-no (ediff-diff-at-point buf-type nil (if arg 'after)))
@@ -1975,10 +1917,8 @@ determine the source and the target buffers instead of 
the command keys."
   (if (eq arg '-) (setq arg -1)) ; translate neg arg to -1
   (if (numberp arg) (ediff-jump-to-difference arg))
 
-  (let* ((key1 (aref keys 0))
-        (key2 (aref keys 1))
-        (char1 (ediff-event-key key1))
-        (char2 (ediff-event-key key2))
+  (let* ((char1 (aref keys 0))
+        (char2 (aref keys 1))
         ediff-verbose-p)
     (ediff-copy-diff ediff-current-difference
                     (ediff-char-to-buftype char1)
@@ -2209,7 +2149,7 @@ determine the target buffer instead of 
`ediff-last-command-char'."
   (if (numberp arg)
       (ediff-jump-to-difference arg))
   (ediff-pop-diff ediff-current-difference
-                 (ediff-char-to-buftype (or key (ediff-last-command-char))))
+                 (ediff-char-to-buftype (or key last-command-event)))
   ;; recenter with rehighlighting, but no messages
   (let (ediff-verbose-p)
     (ediff-recenter)))
@@ -2233,13 +2173,13 @@ a regular expression typed in by the user."
     (cond
      ((or (and (eq ediff-skip-diff-region-function
                   ediff-focus-on-regexp-matches-function)
-              (eq (ediff-last-command-char) ?f))
+              (eq last-command-event ?f))
          (and (eq ediff-skip-diff-region-function
                   ediff-hide-regexp-matches-function)
-              (eq (ediff-last-command-char) ?h)))
+              (eq last-command-event ?h)))
       (message "Selective browsing by regexp turned off")
       (setq ediff-skip-diff-region-function #'ediff-show-all-diffs))
-     ((eq (ediff-last-command-char) ?h)
+     ((eq last-command-event ?h)
       (setq ediff-skip-diff-region-function ediff-hide-regexp-matches-function
            regexp-A
            (read-string
@@ -2277,7 +2217,7 @@ a regular expression typed in by the user."
       (or (string= regexp-B "") (setq ediff-regexp-hide-B regexp-B))
       (or (string= regexp-C "") (setq ediff-regexp-hide-C regexp-C)))
 
-     ((eq (ediff-last-command-char) ?f)
+     ((eq last-command-event ?f)
       (setq ediff-skip-diff-region-function
            ediff-focus-on-regexp-matches-function
            regexp-A
@@ -2467,12 +2407,12 @@ temporarily reverses the meaning of this variable."
   ;; Apply selective display to narrow or widen
   (ediff-visible-region)
   (mapc (lambda (overl)
-         (if (ediff-overlayp overl)
-             (ediff-delete-overlay overl)))
+         (if (overlayp overl)
+             (delete-overlay overl)))
        ediff-wide-bounds)
   (mapc (lambda (overl)
-         (if (ediff-overlayp overl)
-             (ediff-delete-overlay overl)))
+         (if (overlayp overl)
+             (delete-overlay overl)))
        ediff-narrow-bounds)
 
   ;; restore buffer mode line id's in buffer-A/B/C
@@ -2619,10 +2559,6 @@ temporarily reverses the meaning of this variable."
          ((window-live-p ctl-wind)
           (delete-window ctl-wind)))
 
-    ;; Hide bottom toolbar.  --marcpa
-    (if (not (ediff-multiframe-setup-p))
-       (ediff-kill-bottom-toolbar))
-
     (ediff-kill-buffer-carefully ctl-buf)
 
     (if (frame-live-p main-frame)
@@ -3060,9 +2996,7 @@ Hit \\[ediff-recenter] to reset the windows afterward."
               (ediff-get-symbol-from-alist
                buf-type ediff-current-diff-overlay-alist))))
 
-       (if (featurep 'xemacs)
-           (ediff-move-overlay current-diff-overlay begin end-hilit)
-         (ediff-move-overlay current-diff-overlay begin end-hilit buff))
+       (ediff-move-overlay current-diff-overlay begin end-hilit buff)
        (ediff-overlay-put current-diff-overlay 'ediff-diff-num n)
 
        ;; unhighlight the background overlay for diff n so it won't
@@ -3101,8 +3035,8 @@ Hit \\[ediff-recenter] to reset the windows afterward."
               buf-type ediff-current-diff-overlay-alist))
             (current-diff-overlay (symbol-value current-diff-overlay-var)))
        (ediff-paint-background-regions 'unhighlight)
-       (if (ediff-overlayp current-diff-overlay)
-           (ediff-delete-overlay current-diff-overlay))
+       (if (overlayp current-diff-overlay)
+           (delete-overlay current-diff-overlay))
        (set current-diff-overlay-var nil)
        )))
 
@@ -3351,10 +3285,10 @@ Without an argument, it saves customized diff argument, 
if available
   (ediff-barf-if-not-control-buffer)
   (ediff-compute-custom-diffs-maybe)
   (ediff-with-current-buffer
-      (cond ((memq (ediff-last-command-char) '(?a ?b ?c))
+      (cond ((memq last-command-event '(?a ?b ?c))
             (ediff-get-buffer
-             (ediff-char-to-buftype (ediff-last-command-char))))
-           ((eq (ediff-last-command-char) ?d)
+             (ediff-char-to-buftype last-command-event)))
+           ((eq last-command-event ?d)
             (message "Saving diff output ...")
             (sit-for 1) ; let the user see the message
             (cond ((and arg (ediff-buffer-live-p ediff-diff-buffer))
@@ -3440,15 +3374,14 @@ Without an argument, it saves customized diff argument, 
if available
 
 
 (defun ediff-make-cloned-buffer (buff region-name)
-  (ediff-make-indirect-buffer
+  (make-indirect-buffer
    buff (generate-new-buffer-name
-         (concat (if (stringp buff) buff (buffer-name buff)) region-name))))
-
+         (concat (if (stringp buff) buff (buffer-name buff)) region-name))
+   'clone))
 
 (defun ediff-make-indirect-buffer (base-buf indirect-buf-name)
-  (if (featurep 'xemacs)
-      (make-indirect-buffer base-buf indirect-buf-name)
-    (make-indirect-buffer base-buf indirect-buf-name 'clone)))
+  (declare (obsolete make-indirect-buffer "27.1"))
+  (make-indirect-buffer base-buf indirect-buf-name 'clone))
 
 
 ;; This function operates only from an ediff control buffer
@@ -3647,14 +3580,8 @@ Ediff Control Panel to restore highlighting."
 (defun ediff-remove-flags-from-buffer (buffer overlay)
   (ediff-with-current-buffer buffer
     (let ((inhibit-read-only t))
-      (if (featurep 'xemacs)
-         (ediff-overlay-put overlay 'begin-glyph nil)
-       (ediff-overlay-put overlay 'before-string nil))
-
-      (if (featurep 'xemacs)
-         (ediff-overlay-put overlay 'end-glyph nil)
-       (ediff-overlay-put overlay 'after-string nil))
-      )))
+      (ediff-overlay-put overlay 'before-string nil)
+      (ediff-overlay-put overlay 'after-string nil))))
 
 
 
@@ -3679,9 +3606,7 @@ Ediff Control Panel to restore highlighting."
                         ediff-before-flag-bol ediff-before-flag-mol))))
 
     ;; insert the flag itself
-    (if (featurep 'xemacs)
-       (ediff-overlay-put curr-overl 'begin-glyph flag)
-      (ediff-overlay-put curr-overl 'before-string 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
@@ -3695,10 +3620,7 @@ Ediff Control Panel to restore highlighting."
                         ediff-after-flag-eol ediff-after-flag-mol))))
 
     ;; insert the flag itself
-    (if (featurep 'xemacs)
-       (ediff-overlay-put curr-overl 'end-glyph flag)
-      (ediff-overlay-put curr-overl 'after-string flag))
-    ))
+    (ediff-overlay-put curr-overl 'after-string flag)))
 
 
 ;;; Some diff region tests
@@ -3758,7 +3680,7 @@ Ediff Control Panel to restore highlighting."
                     this-command (1+ n) ediff-number-of-differences)
            (error ediff-NO-DIFFERENCES)))
       (setq diff-overlay (ediff-get-diff-overlay n buf-type)))
-    (if (not (ediff-buffer-live-p (ediff-overlay-buffer diff-overlay)))
+    (if (not (ediff-buffer-live-p (overlay-buffer diff-overlay)))
        (error ediff-KILLED-VITAL-BUFFER))
     (if (eq pos 'beg)
        (ediff-overlay-start diff-overlay)
@@ -3784,8 +3706,7 @@ Ediff Control Panel to restore highlighting."
 (defun ediff-clear-diff-vector (vec-var &optional fine-diffs-also)
   (if (vectorp (symbol-value vec-var))
       (mapc (lambda (elt)
-             (ediff-delete-overlay
-              (ediff-get-diff-overlay-from-diff-record elt))
+             (delete-overlay (ediff-get-diff-overlay-from-diff-record elt))
              (if fine-diffs-also
                  (ediff-clear-fine-diff-vector elt))
              )
@@ -3813,19 +3734,11 @@ Ediff Control Panel to restore highlighting."
              (setq beg (eval beg)))
          (or (number-or-marker-p end)
              (setq end (eval end)))
-         (setq overl
-               (if (featurep 'xemacs)
-                   (make-extent beg end buff)
-                 ;; advance front and rear of the overlay
-                 (make-overlay beg end buff nil 'rear-advance)))
+         ;; advance front and rear of the overlay
+         (setq overl (make-overlay beg end buff nil 'rear-advance))
 
          ;; never detach
          (ediff-overlay-put overl 'evaporate nil)
-         ;; make overlay open-ended
-         ;; In emacs, it is made open ended at creation time
-         (when (featurep 'xemacs)
-           (ediff-overlay-put overl 'start-open nil)
-           (ediff-overlay-put overl 'end-open nil))
          (ediff-overlay-put overl 'ediff-diff-num 0)
          overl))))
 
@@ -3983,7 +3896,7 @@ Ediff Control Panel to restore highlighting."
   (defvar ediff-buffer-name)
   (let ((reporter-prompt-for-summary-p t)
        (ctl-buf ediff-control-buffer)
-       (ediff-device-type (ediff-device-type))
+       (ediff-device-type window-system)
        varlist salutation ediff-buffer-name)
     (setq varlist '(ediff-diff-program ediff-diff-options
                     ediff-diff3-program ediff-diff3-options
@@ -4091,22 +4004,13 @@ Mail anyway? (y or n) ")
   )
 
 
-(defun ediff-deactivate-mark ()
-  (if (featurep 'xemacs)
-      (zmacs-deactivate-region)
-    (deactivate-mark)))
+(define-obsolete-function-alias 'ediff-deactivate-mark #'deactivate-mark 
"27.1")
 
 (defun ediff-activate-mark ()
-  (if (featurep 'xemacs)
-      (zmacs-activate-region)
-    (make-local-variable 'transient-mark-mode)
-    (setq mark-active 'ediff-util transient-mark-mode t)))
-
-(defun ediff-nuke-selective-display ()
-  (if (featurep 'xemacs)
-      (nuke-selective-display)
-    ))
+  (make-local-variable 'transient-mark-mode)
+  (setq mark-active 'ediff-util transient-mark-mode t))
 
+(define-obsolete-function-alias 'ediff-nuke-selective-display #'ignore "27.1")
 
 ;; The next two are modified versions from emerge.el.
 ;; VARS must be a list of symbols
@@ -4189,9 +4093,6 @@ Mail anyway? (y or n) ")
   (interactive)
   (ediff-barf-if-not-control-buffer)
 
-  (if (featurep 'xemacs)
-      (make-local-hook 'post-command-hook))
-
   (let ((pre-hook 'pre-command-hook)
        (post-hook 'post-command-hook))
     (if (not (equal ediff-command-begin-time '(0 0 0)))
@@ -4214,7 +4115,7 @@ Mail anyway? (y or n) ")
 \t\tState-of-diff:\t   %S
 \t\tState-of-merge:\t   %S
 "
-             (1+ (ediff-overlay-get (aref overl-vec 0) 'ediff-diff-num))
+             (1+ (overlay-get (aref overl-vec 0) 'ediff-diff-num))
              (aref overl-vec 0)
              ;; fine-diff-vector
              (if (= (length (aref overl-vec 1)) 0)
diff --git a/lisp/vc/ediff-wind.el b/lisp/vc/ediff-wind.el
index 7ca3941..028995a 100644
--- a/lisp/vc/ediff-wind.el
+++ b/lisp/vc/ediff-wind.el
@@ -151,10 +151,6 @@ In this case, Ediff will use those frames to display these 
buffers."
          (const :tag "Split horizontally" split-window-horizontally)
          function))
 
-;; Definitions hidden from the compiler by compat wrappers.
-(declare-function ediff-display-pixel-width "ediff-init")
-(declare-function ediff-display-pixel-height "ediff-init")
-
 (defconst ediff-control-frame-parameters
   (list
    '(name . "Ediff")
@@ -179,11 +175,11 @@ In this case, Ediff will use those frames to display 
these buffers."
    ;; this blocks queries from  window manager as to where to put
    ;; ediff's control frame. we put the frame outside the display,
    ;; so the initial frame won't jump all over the screen
-   (cons 'top  (if (fboundp 'ediff-display-pixel-height)
-                  (1+ (ediff-display-pixel-height))
+   (cons 'top  (if (fboundp 'display-pixel-height)
+                  (1+ (display-pixel-height))
                 3000))
-   (cons 'left (if (fboundp 'ediff-display-pixel-width)
-                  (1+ (ediff-display-pixel-width))
+   (cons 'left (if (fboundp 'display-pixel-width)
+                  (1+ (display-pixel-width))
                 3000))
    )
   "Frame parameters for displaying Ediff Control Panel.
@@ -219,7 +215,7 @@ This is used by the default control frame positioning 
function,
 customization of the default control frame positioning."
   :type 'integer)
 
-(defcustom ediff-narrow-control-frame-leftward-shift (if (featurep 'xemacs) 7 
3)
+(defcustom ediff-narrow-control-frame-leftward-shift 3
   "The leftward shift of control frame from the right edge of buf A's frame.
 Measured in characters.
 This is used by the default control frame positioning function,
@@ -276,36 +272,32 @@ into icons, regardless of the window manager."
   (let (event)
     (message
      "Select windows by clicking.  Please click on Window %d " wind-number)
-    (while (not (ediff-mouse-event-p (setq event (ediff-read-event))))
+    (while (not (ediff-mouse-event-p (setq event (read-event))))
       (if (sit-for 1) ; if sequence of events, wait till the final word
          (beep 1))
       (message "Please click on Window %d " wind-number))
-    (ediff-read-event) ; discard event
-    (if (featurep 'xemacs)
-        (event-window event)
-      (posn-window (event-start event)))))
+    (read-event) ; discard event
+    (posn-window (event-start event))))
 
 
 ;; Select the lowest window on the frame.
 (defun ediff-select-lowest-window ()
-  (if (featurep 'xemacs)
-      (select-window (frame-lowest-window))
-    (let* ((lowest-window (selected-window))
-          (bottom-edge (car (cdr (cdr (cdr (window-edges))))))
-          (last-window (save-excursion
-                         (other-window -1) (selected-window)))
-          (window-search t))
-      (while window-search
-       (let* ((this-window (next-window))
-              (next-bottom-edge
-               (car (cdr (cdr (cdr (window-edges this-window)))))))
-         (if (< bottom-edge next-bottom-edge)
-             (setq bottom-edge next-bottom-edge
-                   lowest-window this-window))
-         (select-window this-window)
-         (when (eq last-window this-window)
-           (select-window lowest-window)
-           (setq window-search nil)))))))
+  (let* ((lowest-window (selected-window))
+        (bottom-edge (car (cdr (cdr (cdr (window-edges))))))
+        (last-window (save-excursion
+                       (other-window -1) (selected-window)))
+        (window-search t))
+    (while window-search
+      (let* ((this-window (next-window))
+            (next-bottom-edge
+             (car (cdr (cdr (cdr (window-edges this-window)))))))
+       (if (< bottom-edge next-bottom-edge)
+           (setq bottom-edge next-bottom-edge
+                 lowest-window this-window))
+       (select-window this-window)
+       (when (eq last-window this-window)
+         (select-window lowest-window)
+         (setq window-search nil))))))
 
 
 ;;; Common window setup routines
@@ -379,11 +371,6 @@ into icons, regardless of the window manager."
     (switch-to-buffer buf-A)
     (setq wind-A (selected-window))
 
-    ;; XEmacs used to have a lot of trouble with display
-    ;; It did't set things right unless we tell it to sit still
-    ;; 19.12 seems ok.
-    ;;(if (featurep 'xemacs) (sit-for 0))
-
     (split-window-vertically (max 2 (- (window-height) merge-window-lines)))
     (if (eq (selected-window) wind-A)
        (other-window 1))
@@ -456,11 +443,6 @@ into icons, regardless of the window manager."
                   (window-width wind-A))
                 3)))
 
-    ;; XEmacs used to have a lot of trouble with display
-    ;; It did't set things right unless we told it to sit still
-    ;; 19.12 seems ok.
-    ;;(if (featurep 'xemacs) (sit-for 0))
-
     (funcall split-window-function wind-width-or-height)
 
     (if (eq (selected-window) wind-A)
@@ -935,8 +917,6 @@ create a new splittable frame if none is found."
     (not (ediff-frame-has-dedicated-windows (window-frame wind)))
     )))
 
-(declare-function ediff-make-bottom-toolbar "ediff-util" (&optional frame))
-
 ;; Prepare or refresh control frame
 (defun ediff-setup-control-frame (ctl-buffer designated-minibuffer-frame)
   (let ((window-min-height 1)
@@ -946,8 +926,6 @@ create a new splittable frame if none is found."
        fheight fwidth adjusted-parameters)
 
     (with-current-buffer ctl-buffer
-      (if (and (featurep 'xemacs) (featurep 'menubar))
-         (set-buffer-menubar nil))
       ;;(setq user-grabbed-mouse (ediff-user-grabbed-mouse))
       (run-hooks 'ediff-before-setup-control-frame-hook))
 
@@ -1007,18 +985,6 @@ create a new splittable frame if none is found."
                  '(auto-raise . t))
                adjusted-parameters))
 
-    ;; In XEmacs, buffer menubar needs to be killed before frame parameters
-    ;; are changed.
-    (if (ediff-has-toolbar-support-p)
-       (when (featurep 'xemacs)
-         (if (ediff-has-gutter-support-p)
-             (set-specifier top-gutter (list ctl-frame nil)))
-         (sit-for 0)
-         (set-specifier top-toolbar-height (list ctl-frame 0))
-         ;;(set-specifier bottom-toolbar-height (list ctl-frame 0))
-         (set-specifier left-toolbar-width (list ctl-frame 0))
-         (set-specifier right-toolbar-width (list ctl-frame 0))))
-
     ;; As a precaution, we call modify frame parameters twice, in
     ;; order to make sure that at least once we do it for
     ;; a non-iconified frame.  (It appears that in the Windows port of
@@ -1026,9 +992,6 @@ create a new splittable frame if none is found."
     (if (eq system-type 'windows-nt)
        (modify-frame-parameters ctl-frame adjusted-parameters))
 
-    ;; make or zap toolbar (if not requested)
-    (ediff-make-bottom-toolbar ctl-frame)
-
     (goto-char (point-min))
 
     (modify-frame-parameters ctl-frame adjusted-parameters)
@@ -1070,12 +1033,6 @@ create a new splittable frame if none is found."
                           (or (eq this-command 'ediff-quit)
                               (not (eq ediff-grab-mouse t)))))
 
-    (when (featurep 'xemacs)
-      (with-current-buffer ctl-buffer
-       (make-local-hook 'select-frame-hook)
-       (add-hook 'select-frame-hook
-                 #'ediff-xemacs-select-frame-hook nil 'local)))
-
     (with-current-buffer ctl-buffer
       (run-hooks 'ediff-after-setup-control-frame-hook))))
 
@@ -1084,8 +1041,6 @@ create a new splittable frame if none is found."
   (ediff-with-current-buffer ctl-buffer
     (if (and (ediff-window-display-p) (frame-live-p ediff-control-frame))
        (let ((ctl-frame ediff-control-frame))
-         (if (and (featurep 'xemacs) (featurep 'menubar))
-             (set-buffer-menubar default-menubar))
          (setq ediff-control-frame nil)
          (delete-frame ctl-frame))))
   (if ediff-multiframe
@@ -1117,23 +1072,23 @@ create a new splittable frame if none is found."
            ctl-frame-left
            (+ frame-A-left
               (if ediff-use-long-help-message
-                  (* (ediff-frame-char-width ctl-frame)
+                  (* (frame-char-width ctl-frame)
                      (+ ediff-wide-control-frame-rightward-shift
                         horizontal-adjustment))
-                (- (* frame-A-width (ediff-frame-char-width frame-A))
-                   (* (ediff-frame-char-width ctl-frame)
+                (- (* frame-A-width (frame-char-width frame-A))
+                   (* (frame-char-width ctl-frame)
                       (+ ctl-frame-width
                          ediff-narrow-control-frame-leftward-shift
                          horizontal-adjustment))))))
       (setq ctl-frame-top
            (min ctl-frame-top
-                (- (ediff-display-pixel-height)
+                (- (display-pixel-height)
                    (* 2 ctl-frame-height
-                      (ediff-frame-char-height ctl-frame))))
+                      (frame-char-height ctl-frame))))
            ctl-frame-left
            (min ctl-frame-left
-                (- (ediff-display-pixel-width)
-                   (* ctl-frame-width (ediff-frame-char-width ctl-frame)))))
+                (- (display-pixel-width)
+                   (* ctl-frame-width (frame-char-width ctl-frame)))))
       ;; keep ctl frame within the visible bounds
       (setq ctl-frame-top (max ctl-frame-top 1)
            ctl-frame-left (max ctl-frame-left 1))
@@ -1153,12 +1108,12 @@ Saves the old frame parameters in 
`ediff-wide-display-orig-parameters'.
 The frame to be resized is kept in `ediff-wide-display-frame'.
 This function modifies only the left margin and the width of the display.
 It assumes that it is called from within the control buffer."
-  (if (not (fboundp 'ediff-display-pixel-width))
+  (if (not (fboundp 'display-pixel-width))
       (user-error "Can't determine display width"))
   (let* ((frame-A (window-frame ediff-window-A))
         (frame-A-params (frame-parameters frame-A))
-        (cw (ediff-frame-char-width frame-A))
-        (wd (- (/ (ediff-display-pixel-width) cw) 5)))
+        (cw (frame-char-width frame-A))
+        (wd (- (/ (display-pixel-width) cw) 5)))
     (setq ediff-wide-display-orig-parameters
          (list (cons 'left (max 0 (eval (cdr (assoc 'left frame-A-params)))))
                (cons 'width (cdr (assoc 'width frame-A-params))))
@@ -1300,9 +1255,7 @@ It assumes that it is called from within the control 
buffer."
 ;; If buff is not live, return nil
 (defun ediff-get-visible-buffer-window (buff)
   (if (ediff-buffer-live-p buff)
-      (if (featurep 'xemacs)
-         (get-buffer-window buff t)
-       (get-buffer-window buff 'visible))))
+      (get-buffer-window buff 'visible)))
 
 
 ;;; Functions to decide when to redraw windows
diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el
index 20e2700..fae694d 100644
--- a/lisp/vc/ediff.el
+++ b/lisp/vc/ediff.el
@@ -1541,9 +1541,7 @@ arguments after setting up the Ediff buffers."
   "Return string describing the version of Ediff.
 When called interactively, displays the version."
   (interactive)
-  (if (if (featurep 'xemacs)
-          (interactive-p)
-        (called-interactively-p 'interactive))
+  (if (called-interactively-p 'interactive)
       (message "%s" (ediff-version))
     (format "Ediff %s" ediff-version)))
 
@@ -1562,7 +1560,7 @@ With optional NODE, goes to that node."
     (condition-case nil
        (progn
          (pop-to-buffer (get-buffer-create "*info*"))
-         (info (if (featurep 'xemacs) "ediff.info" "ediff"))
+         (info "ediff")
          (if node
              (Info-goto-node node)
            (message "Type `i' to search for a specific topic"))



reply via email to

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