view lisp/ediff-hook.el @ 31383:860d7ac182e3

(vc-rcs-show-log-entry): New function. (vc-rcs-checkin, vc-rcs-checkout): Don't set all properties. (vc-rcs-register): If there is no RCS subdir, ask the user whether to create one. (vc-rcs-state-heuristic): Use file-ownership-preserved-p. (vc-rcs-checkout): Remove the error-handling for missing-rcs. (vc-rcs-state-heuristic): Don't use file-writable-p. (vc-rcs-print-log): Insert in the current buffer. (vc-rcs-diff): Insert in the current buffer and remove unused arg CMP. (vc-rcs-workfile-unchanged-p): Use vc-do-command instead of vc-simple-command. (vc-rcs-fetch-master-state): Removed check for unlocked-changes to avoid doing a diff when opening a file. (vc-rcs-state): Added check for unlocked-changes. (vc-rcs-header): Escape Id. (vc-rcs-workfile-unchanged-p): Remove optional arg VERSION. (vc-rcs-state): Call vc-workfile-unchanged-p, not the RCS-specific version. (vc-rcs-state-heuristic): Use file-writable-p instead of comparing userids. (vc-rcs-fetch-master-state): Handle the case where rcs is missing. Simplify the logic by eliminating unreachable code. (vc-rcs-diff): Only pass `2' to vc-do-command if necessary and just do a recursive call if we need to retry. (vc-rcs-checkout): Handle the case where rcs is missing by making the buffer read-write if requested and re-signalling the error. (vc-rcs-find-most-recent-rev): New function. The code derives from the old vc-parse-buffer but uses the revision number rather than the date (much easier to compare robustly). (vc-rcs-fetch-master-state): Use `with-temp-buffer'. Adapt to the new vc-parse-buffer (and vc-rcs-find-most-recent-rev). Find the locking-user more directly. Check strict locking and set checkout-model appropriately. (vc-rcs-parse-locks): Remove. (vc-rcs-latest-on-branch-p): Use with-temp-buffer and adapt to the new vc-parse-buffer (and vc-rcs-find-most-recent-rev). (vc-rcs-system-release): Use with-current-buffer and vc-parse-buffer. (vc-rcs-register, vc-rcs-checkout): Use with-current-buffer. Merge in code from vc-rcs-hooks.el. Don't require 'vc anymore. (vc-rcs-responsible-p): Use expand-file-name instead of concat and file-directory-p instead of file-exists-p. (vc-rcs-exists): Remove. (vc-rcs-header): New var. Update Copyright. (vc-rcs-rename-file): New function. (vc-rcs-diff): Remove unused `backend' variable. (vc-rcs-clear-headers): New function; code moved here from vc-clear-headers in vc.el. (tail): Provide vc-rcs and remove vc-rcs-logentry-check. (vc-rcs-register): Parse command output to find master file name and workfile version. (vc-rcs-checkout): Removed call to vc-file-clear-masterprops. Require vc and vc-rcs-hooks. (vc-rcs-trunk-p, vc-rcs-branch-part): Move to vc-rcs-hooks. (vc-rcs-backend-release-p): Remove (use vc-rcs-release-p). (vc-release-greater-or-equal-p): Move from vc. (vc-rcs-trunk-p, vc-rcs-branch-p, vc-rcs-branch-part, vc-rcs-minor-part, vc-rcs-previous-version): Remove duplicates. (vc-rcs-checkout): Add a missing `new-version' argument in the call to vc-rcs-latest-on-branch-p. Hopefully that was the right one. (vc-rcs-steal-lock): Renamed from `vc-rcs-steal'. Updated everything to use `vc-checkout-model'. (vc-rcs-backend-release-p): function added. other stuff updated to reference this function instead of the old `vc-backend-release-p'. (vc-rcs-logentry-check): Function added. (vc-rcs-checkin, vc-rcs-previous-version) (vc-rcs-checkout): Name space cleaned up. No more revision number crunching function names that are not prefixed with vc-rcs. (vc-rcs-checkout-model): Function added. References to `vc-checkout-model' replaced. (vc-rcs-admin): Added the query-only option as required by the vc.el file. (vc-rcs-exists): Function added. (vc-*-checkout): Use with-temp-file instead of /bin/sh. Merged from mainline (vc-rcs-latest-on-branch-p): Moved to vc-rcs-hooks.el. (vc-rcs-latest-on-branch-p, vc-rcs-trunk-p) (vc-rcs-branch-p, vc-rcs-branch-part, vc-rcs-minor-part) (vc-rcs-previous-version): Functions added. (vc-rcs-diff): Function added. (vc-rcs-checkout) Bug (typo) found and fixed. (vc-rcs-register-switches) Variable `vc-rcs-register-switches' added. Require vc when compiling. (vc-rcs-print-log, vc-rcs-assign-name, vc-rcs-merge) (vc-rcs-check-headers, vc-rcs-steal, vc-rcs-uncheck, vc-rcs-revert) (vc-rcs-checkin): New functions (code from vc.el). (vc-rcs-previous-version, vc-rcs-system-release, vc-rcs-checkout): Doc fix. (vc-rcs-release): Deleted. (Duplicated vc-rcs-system-release). (vc-rcs-trunk-p, vc-rcs-branch-p, vc-rcs-branch-part) (vc-rcs-minor-part, vc-rcs-previous-version, vc-rcs-release) (vc-rcs-release-p, vc-rcs-admin, vc-rcs-checkout): New functions from vc.el. (vc-rcs-system-release): Renamed from vc-rcs-backend-release.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 04 Sep 2000 19:47:43 +0000
parents 4f315ca65976
children be20c22dc16d
line wrap: on
line source

;;; ediff-hook.el --- setup for Ediff's menus and autoloads

;; Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.

;; Author: Michael Kifer <kifer@cs.sunysb.edu>

;; This file is part of GNU Emacs.

;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Code:

;;;   These must be placed in menu-bar.el in Emacs
;;
;;      (define-key menu-bar-tools-menu [ediff-misc]
;;	'("Ediff Miscellanea" . menu-bar-ediff-misc-menu))
;;      (define-key menu-bar-tools-menu [epatch]
;;	'("Apply Patch" . menu-bar-epatch-menu))
;;      (define-key menu-bar-tools-menu [ediff-merge]
;;	'("Merge" . menu-bar-ediff-merge-menu))
;;      (define-key menu-bar-tools-menu [ediff]
;;	'("Compare" . menu-bar-ediff-menu))

;; Compiler pacifier
(defvar ediff-menu)
(defvar ediff-merge-menu)
(defvar epatch-menu)
(defvar ediff-misc-menu)
;; end pacifier

;; allow menus to be set up without ediff-wind.el being loaded
;;;###autoload
(defvar ediff-window-setup-function)
 
;; Note we wrap this in a progn so that we pick up the whole def
;; for auto-autoload. That way we do not load ediff-hook.el when defining
;; the menus.
;;;###autoload
(progn
  (defun ediff-xemacs-init-menus ()
    (if (featurep 'menubar)
	(progn
	  (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")
	   ["-------" nil nil] "OO-Browser...")
	  ))))


;; explicit string-match is needed: ediff-xemacs-p is not defined at build time
;;;###autoload
(cond ((string-match "XEmacs" emacs-version)
       (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 (if (and (featurep 'ediff-util)
			       (boundp 'ediff-window-setup-function))
			  (eq 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
;;;      (add-hook 'before-init-hook 'ediff-xemacs-init-menus)
;;;      (if (not purify-flag)
;;;	   (ediff-xemacs-init-menus))
;;;      )       
       (if (and (featurep 'menubar) (not (featurep 'infodock))
		(not (featurep 'ediff-hook)))
	   (ediff-xemacs-init-menus)))
      
      ;; Emacs--only if menu-bar is loaded
      ((featurep 'menu-bar)
       ;; initialize menu bar keymaps
       (defvar menu-bar-ediff-misc-menu
	 (make-sparse-keymap "Ediff Miscellanea"))
       (fset 'menu-bar-ediff-misc-menu
	     (symbol-value 'menu-bar-ediff-misc-menu))
       (defvar menu-bar-epatch-menu (make-sparse-keymap "Apply Patch"))
       (fset 'menu-bar-epatch-menu (symbol-value 'menu-bar-epatch-menu))
       (defvar menu-bar-ediff-merge-menu (make-sparse-keymap "Merge"))
       (fset 'menu-bar-ediff-merge-menu 
	     (symbol-value 'menu-bar-ediff-merge-menu))
       (defvar menu-bar-ediff-menu (make-sparse-keymap "Compare"))
       (fset 'menu-bar-ediff-menu (symbol-value 'menu-bar-ediff-menu))

       ;; define ediff-menu
       (define-key menu-bar-ediff-menu [window]
	 '("This Window and Next Window" . compare-windows))
       (define-key menu-bar-ediff-menu [ediff-windows-linewise]
	 '("Windows Line-by-line..." . ediff-windows-linewise))
       (define-key menu-bar-ediff-menu [ediff-windows-wordwise]
	 '("Windows Word-by-word..." . ediff-windows-wordwise))
       (define-key menu-bar-ediff-menu [separator-ediff-windows] '("--"))
       (define-key menu-bar-ediff-menu [ediff-regions-linewise]
	 '("Regions Line-by-line..." . ediff-regions-linewise))
       (define-key menu-bar-ediff-menu [ediff-regions-wordwise]
	 '("Regions Word-by-word..." . ediff-regions-wordwise))
       (define-key menu-bar-ediff-menu [separator-ediff-regions] '("--"))
       (define-key menu-bar-ediff-menu [ediff-dir-revision]
	 '("Directory Revisions..." . ediff-directory-revisions))
       (define-key menu-bar-ediff-menu [ediff-revision]
	 '("File with Revision..." . ediff-revision))
       (define-key menu-bar-ediff-menu [separator-ediff-directories] '("--"))
       (define-key menu-bar-ediff-menu [ediff-directories3]
	 '("Three Directories..." . ediff-directories3))
       (define-key menu-bar-ediff-menu [ediff-directories]
	 '("Two Directories..." . ediff-directories))
       (define-key menu-bar-ediff-menu [separator-ediff-files] '("--"))
       (define-key menu-bar-ediff-menu [ediff-buffers3]
	 '("Three Buffers..." . ediff-buffers3))
       (define-key menu-bar-ediff-menu [ediff-files3]
	 '("Three Files..." . ediff-files3))
       (define-key menu-bar-ediff-menu [ediff-buffers]
	 '("Two Buffers..." . ediff-buffers))
       (define-key menu-bar-ediff-menu [ediff-files]
	 '("Two Files..." . ediff-files))

       ;; define merge menu
       (define-key
	 menu-bar-ediff-merge-menu [ediff-merge-dir-revisions-with-ancestor]
	 '("Directory Revisions with Ancestor..."
	   . ediff-merge-directory-revisions-with-ancestor))
       (define-key
	 menu-bar-ediff-merge-menu [ediff-merge-dir-revisions]
	 '("Directory Revisions..." . ediff-merge-directory-revisions))
       (define-key
	 menu-bar-ediff-merge-menu [ediff-merge-revisions-with-ancestor]
	 '("Revisions with Ancestor..."
	   . ediff-merge-revisions-with-ancestor))
       (define-key menu-bar-ediff-merge-menu [ediff-merge-revisions]
	 '("Revisions..." . ediff-merge-revisions))
       (define-key menu-bar-ediff-merge-menu [separator-ediff-merge] '("--"))
       (define-key
	 menu-bar-ediff-merge-menu [ediff-merge-directories-with-ancestor]
	 '("Directories with Ancestor..."
	   . ediff-merge-directories-with-ancestor))
       (define-key menu-bar-ediff-merge-menu [ediff-merge-directories]
	 '("Directories..." . ediff-merge-directories))
       (define-key 
	 menu-bar-ediff-merge-menu [separator-ediff-merge-dirs] '("--"))
       (define-key
	 menu-bar-ediff-merge-menu [ediff-merge-buffers-with-ancestor]
	 '("Buffers with Ancestor..." . ediff-merge-buffers-with-ancestor))
       (define-key menu-bar-ediff-merge-menu [ediff-merge-buffers]
	 '("Buffers..." . ediff-merge-buffers))
       (define-key menu-bar-ediff-merge-menu [ediff-merge-files-with-ancestor]
	 '("Files with Ancestor..." . ediff-merge-files-with-ancestor))
       (define-key menu-bar-ediff-merge-menu [ediff-merge-files]
	 '("Files..." . ediff-merge-files))

       ;; define epatch menu
       (define-key menu-bar-epatch-menu [ediff-patch-buffer]
	 '("To a Buffer..." . ediff-patch-buffer))
       (define-key menu-bar-epatch-menu [ediff-patch-file]
	 '("To a File..." . ediff-patch-file))

       ;; define ediff miscellanea
       (define-key menu-bar-ediff-misc-menu [emultiframe]
	 '("Toggle use of separate control buffer frame..."
	   . ediff-toggle-multiframe))
       (define-key menu-bar-ediff-misc-menu [eregistry]
	 '("List Ediff Sessions..." . ediff-show-registry))
       (define-key menu-bar-ediff-misc-menu [ediff-cust]
	 '("Customize Ediff..." . ediff-customize))
       (define-key menu-bar-ediff-misc-menu [ediff-doc]
	 '("Ediff Manual..." . ediff-documentation))
       )
      
      ) ; cond

;; arrange for autoloads
(if purify-flag
    () ; if dumping, autoloads are set up in loaddefs.el
  ;; if the user decides to load this file, set up autoloads
  ;; compare files and buffers
  (autoload 'ediff "ediff" "Compare two files" t)
  (autoload 'ediff-files "ediff" "Compare two files" t)
  (autoload 'ediff-buffers "ediff" "Compare two bufers" t)
  (autoload 'ebuffers "ediff" "Compare two bufers" t)
  (autoload 'ediff3  "ediff"  "Compare three files" t)
  (autoload 'ediff-files3 "ediff" "Compare three files" t)
  (autoload 'ediff-buffers3 "ediff" "Compare three bufers" t)
  (autoload 'ebuffers3 "ediff" "Compare three bufers" t)

  (autoload 'erevision "ediff" "Compare versions of a file" t)
  (autoload 'ediff-revision "ediff" "Compare versions of a file" t)

  ;; compare regions and windows
  (autoload 'ediff-windows-wordwise 
    "ediff" "Compare two windows word-by-word." t)
  (autoload 'ediff-regions-wordwise 
    "ediff" "Compare two regions word-by-word." t)
  (autoload 'ediff-windows-linewise 
    "ediff" "Compare two windows line-by-line." t)
  (autoload 'ediff-regions-linewise 
    "ediff" "Compare two regions line-by-line." t)

  ;; patch
  (autoload 'ediff-patch-file "ediff" "Patch a file." t)
  (autoload 'epatch "ediff" "Patch a file." t)
  (autoload 'ediff-patch-buffer "ediff" "Patch a buffer.")
  (autoload 'epatch-buffer "ediff" "Patch a buffer." t)

  ;; merge
  (autoload 'ediff-merge "ediff" "Merge two files." t)
  (autoload 'ediff-merge-files "ediff" "Merge two files." t)
  (autoload 'ediff-merge-files-with-ancestor
    "ediff" "Merge two files using a third file as an ancestor." t)
  (autoload 'ediff-merge-buffers "ediff" "Merge two buffers." t)
  (autoload 'ediff-merge-buffers-with-ancestor
    "ediff" "Merge two buffers using a third buffer as an ancestor." t)

  (autoload 'ediff-merge-revisions "ediff" "Merge two versions of a file." t)
  (autoload 'ediff-merge-revisions-with-ancestor
    "ediff" "Merge two versions of a file." t)

  ;; compare directories
  (autoload 'edirs "ediff" "Compare files in two directories." t)
  (autoload 'ediff-directories "ediff" "Compare files in two directories." t)
  (autoload 'edirs3 "ediff" "Compare files in three directories." t)
  (autoload
    'ediff-directories3 "ediff" "Compare files in three directories." t)

  (autoload 'edir-revisions 
    "ediff" "Compare two versions of a file." t)
  (autoload 'ediff-directory-revisions 
    "ediff" "Compare two versions of a file." t)

  ;; merge directories
  (autoload 'edirs-merge "ediff" "Merge files in two directories." t)
  (autoload 'ediff-merge-directories
    "ediff" "Merge files in two directories." t)
  (autoload 'edirs-merge-with-ancestor
    "ediff"
    "Merge files in two directories using files in a third dir as ancestors."
    t)
  (autoload 'ediff-merge-directories-with-ancestor
    "ediff"
    "Merge files in two directories using files in a third dir as ancestors."
    t)

  (autoload 'edir-merge-revisions 
    "ediff" "Merge versions of files in a directory." t)
  (autoload 'ediff-merge-directory-revisions 
    "ediff" "Merge versions of files in a directory." t)
  (autoload 'ediff-merge-directory-revisions-with-ancestor
    "ediff"
    "Merge versions of files in a directory using other versions as ancestors."
    t)
  (autoload 'edir-merge-revisions-with-ancestor
    "ediff"
    "Merge versions of files in a directory using other versions as ancestors."
    t)

  ;; misc
  (autoload 'ediff-show-registry
    "ediff-mult"
    "Display the registry of active Ediff sessions."
    t)
  (autoload 'eregistry
    "ediff-mult"
    "Display the registry of active Ediff sessions."
    t)
  (autoload 'ediff-documentation
    "ediff"
    "Display Ediff's manual."
    t)
  (autoload 'ediff-version
    "ediff"
    "Show Ediff's version and last modification date."
    t)
  (autoload 'ediff-toggle-multiframe
    "ediff-util"
    "Toggle the use of separate frame for Ediff control buffer."
    t)
  (autoload 'ediff-toggle-use-toolbar
    "ediff-util"
    "Toggle the use of Ediff toolbar."
    t)
  
  ) ; if purify-flag


(provide 'ediff-hook)


;;; ediff-hook.el ends here