]> code.delx.au - gnu-emacs/blobdiff - lisp/emerge.el
* term/x-win.el (x-gtk-stock-map):
[gnu-emacs] / lisp / emerge.el
index 1f105163f468ec58aa484120afc002b1f3e1340a..ee19351a2e31f2e588f18a1dd30c49d480c8fbd7 100644 (file)
@@ -5,7 +5,6 @@
 ;; This file is part of GNU Emacs.
 
 ;; Author: Dale R. Worley <worley@world.std.com>
-;; Version: 5fsf
 ;; Keywords: unix, tools
 
 ;; This software was created by Dale R. Worley and is
 
 ;;; Code:
 
-;;;###autoload
-(defvar menu-bar-emerge-menu (make-sparse-keymap "Emerge"))
-;;;###autoload (fset 'menu-bar-emerge-menu (symbol-value 'menu-bar-emerge-menu))
-
-;;;###autoload (define-key menu-bar-emerge-menu [emerge-merge-directories]
-;;;###autoload   '("Merge Directories..." . emerge-merge-directories))
-;;;###autoload (define-key menu-bar-emerge-menu [emerge-revisions-with-ancestor]
-;;;###autoload   '("Revisions with Ancestor..." . emerge-revisions-with-ancestor))
-;;;###autoload (define-key menu-bar-emerge-menu [emerge-revisions]
-;;;###autoload   '("Revisions..." . emerge-revisions))
-;;;###autoload (define-key menu-bar-emerge-menu [emerge-files-with-ancestor]
-;;;###autoload   '("Files with Ancestor..." . emerge-files-with-ancestor))
-;;;###autoload (define-key menu-bar-emerge-menu [emerge-files]
-;;;###autoload   '("Files..." . emerge-files))
-;;;###autoload (define-key menu-bar-emerge-menu [emerge-buffers-with-ancestor]
-;;;###autoload   '("Buffers with Ancestor..." . emerge-buffers-with-ancestor))
-;;;###autoload (define-key menu-bar-emerge-menu [emerge-buffers]
-;;;###autoload   '("Buffers..." . emerge-buffers))
+;; There aren't really global variables, just dynamic bindings
+(defvar A-begin)
+(defvar A-end)
+(defvar B-begin)
+(defvar B-end)
+(defvar diff)
+(defvar diff-vector)
+(defvar merge-begin)
+(defvar merge-end)
+(defvar template)
+(defvar valid-diff)
 
 ;;; Macros
 
@@ -96,16 +88,17 @@ Commands:
 Commands must be prefixed by \\<emerge-fast-keymap>\\[emerge-basic-keymap] in `edit' mode,
 but can be invoked directly in `fast' mode.")
 
-(defvar emerge-version "5fsf"
-  "The version of Emerge.")
+(define-obsolete-variable-alias 'emerge-version 'emacs-version "23.2")
 
 (defun emerge-version ()
   "Return string describing the version of Emerge.
 When called interactively, displays the version."
   (interactive)
-  (if (interactive-p)
-      (message "Emerge version %s" (emerge-version))
-    emerge-version))
+  (if (called-interactively-p 'interactive)
+      (message "Emerge version %s" emacs-version)
+    emacs-version))
+
+(make-obsolete 'emerge-version 'emacs-version "23.2")
 
 ;;; Emerge configuration variables
 
@@ -125,55 +118,55 @@ When called interactively, displays the version."
 ;; finicky details of their output, including the somewhat strange
 ;; way they number lines of a file.
 (defcustom emerge-diff-program "diff"
-  "*Name of the program which compares two files."
+  "Name of the program which compares two files."
   :type 'string
   :group 'emerge)
 (defcustom emerge-diff3-program "diff3"
-  "*Name of the program which compares three files.
+  "Name of the program which compares three files.
 Its arguments are the ancestor file and the two variant files."
   :type 'string
   :group 'emerge)
 (defcustom emerge-diff-options ""
-  "*Options to pass to `emerge-diff-program' and `emerge-diff3-program'."
+  "Options to pass to `emerge-diff-program' and `emerge-diff3-program'."
   :type 'string
   :group 'emerge)
 (defcustom emerge-match-diff-line
   (let ((x "\\([0-9]+\\)\\(\\|,\\([0-9]+\\)\\)"))
     (concat "^" x "\\([acd]\\)" x "$"))
-  "*Pattern to match lines produced by diff that describe differences.
+  "Pattern to match lines produced by diff that describe differences.
 This is as opposed to lines from the source files."
   :type 'regexp
   :group 'emerge)
 (defcustom emerge-diff-ok-lines-regexp
   "^\\([0-9,]+[acd][0-9,]+$\\|[<>] \\|---\\)"
-  "*Regexp that matches normal output lines from `emerge-diff-program'.
+  "Regexp that matches normal output lines from `emerge-diff-program'.
 Lines that do not match are assumed to be error messages."
   :type 'regexp
   :group 'emerge)
 (defcustom emerge-diff3-ok-lines-regexp
   "^\\([1-3]:\\|====\\|  \\)"
-  "*Regexp that matches normal output lines from `emerge-diff3-program'.
+  "Regexp that matches normal output lines from `emerge-diff3-program'.
 Lines that do not match are assumed to be error messages."
   :type 'regexp
   :group 'emerge)
 
 (defcustom emerge-rcs-ci-program "ci"
-  "*Name of the program that checks in RCS revisions."
+  "Name of the program that checks in RCS revisions."
   :type 'string
   :group 'emerge)
 (defcustom emerge-rcs-co-program "co"
-  "*Name of the program that checks out RCS revisions."
+  "Name of the program that checks out RCS revisions."
   :type 'string
   :group 'emerge)
 
 (defcustom emerge-process-local-variables nil
-  "*Non-nil if Emerge should process local-variables lists in merge buffers.
+  "Non-nil if Emerge should process local-variables lists in merge buffers.
 \(You can explicitly request processing the local-variables
 by executing `(hack-local-variables)'.)"
   :type 'boolean
   :group 'emerge)
 (defcustom emerge-execute-line-deletions nil
-  "*If non-nil: `emerge-execute-line' makes no output if an input was deleted.
+  "If non-nil: `emerge-execute-line' makes no output if an input was deleted.
 It concludes that an input version has been deleted when an ancestor entry
 is present, only one A or B entry is present, and an output entry is present.
 If nil: In such circumstances, the A or B file that is present will be
@@ -182,13 +175,13 @@ copied to the designated output file."
   :group 'emerge)
 
 (defcustom emerge-before-flag "vvvvvvvvvvvvvvvvvvvv\n"
-  "*Flag placed above the highlighted block of code.  Must end with newline.
+  "Flag placed above the highlighted block of code.  Must end with newline.
 Must be set before Emerge is loaded, or  emerge-new-flags  must be run
 after setting."
   :type 'string
   :group 'emerge)
 (defcustom emerge-after-flag "^^^^^^^^^^^^^^^^^^^^\n"
-  "*Flag placed below the highlighted block of code.  Must end with newline.
+  "Flag placed below the highlighted block of code.  Must end with newline.
 Must be set before Emerge is loaded, or  emerge-new-flags  must be run
 after setting."
   :type 'string
@@ -197,16 +190,16 @@ after setting."
 ;; Hook variables
 
 (defcustom emerge-startup-hook nil
-  "*Hook to run in the merge buffer after the merge has been set up."
+  "Hook to run in the merge buffer after the merge has been set up."
   :type 'hook
   :group 'emerge)
 (defcustom emerge-select-hook nil
-  "*Hook to run after a difference has been selected.
+  "Hook to run after a difference has been selected.
 The variable `n' holds the (internal) number of the difference."
   :type 'hook
   :group 'emerge)
 (defcustom emerge-unselect-hook nil
-  "*Hook to run after a difference has been unselected.
+  "Hook to run after a difference has been unselected.
 The variable `n' holds the (internal) number of the difference."
   :type 'hook
   :group 'emerge)
@@ -215,7 +208,7 @@ The variable `n' holds the (internal) number of the difference."
 ;; Emerge commands.
 
 (defcustom emerge-default-last-directories nil
-  "*If nil, default dir for filenames in emerge is `default-directory'.
+  "If nil, default dir for filenames in emerge is `default-directory'.
 If non-nil, filenames complete in the directory of the last argument of the
 same type to an `emerge-files...' command."
   :type 'boolean
@@ -280,26 +273,26 @@ depend on the flags."
 (emerge-new-flags)
 
 (defcustom emerge-min-visible-lines 3
-  "*Number of lines that we want to show above and below the flags when we are
+  "Number of lines that we want to show above and below the flags when we are
 displaying a difference."
   :type 'integer
   :group 'emerge)
 
 (defcustom emerge-temp-file-prefix
   (expand-file-name "emerge" temporary-file-directory)
-  "*Prefix to put on Emerge temporary file names.
+  "Prefix to put on Emerge temporary file names.
 Do not start with `~/' or `~USERNAME/'."
   :type 'string
   :group 'emerge)
 
 (defcustom emerge-temp-file-mode 384   ; u=rw only
-  "*Mode for Emerge temporary files."
+  "Mode for Emerge temporary files."
   :type 'integer
   :group 'emerge)
 
 (defcustom emerge-combine-versions-template
   "#ifdef NEW\n%b#else /* not NEW */\n%a#endif /* not NEW */\n"
-  "*Template for `emerge-combine-versions' to combine the two versions.
+  "Template for `emerge-combine-versions' to combine the two versions.
 The template is inserted as a string, with the following interpolations:
        %a      the A version of the difference
        %b      the B version of the difference
@@ -331,7 +324,7 @@ Makes Emerge commands directly available.")
   (make-sparse-keymap "Move"))
 
 (defcustom emerge-command-prefix "\C-c\C-c"
-  "*Command prefix for Emerge commands in `edit' mode.
+  "Command prefix for Emerge commands in `edit' mode.
 Must be set before Emerge is loaded."
   :type 'string
   :group 'emerge)
@@ -397,8 +390,8 @@ Must be set before Emerge is loaded."
 
   (define-key emerge-basic-keymap [menu-bar] (make-sparse-keymap))
 
-  (define-key emerge-fast-keymap [menu-bar options]
-    (cons "Options" emerge-options-menu))
+  (define-key emerge-fast-keymap [menu-bar emerge-options]
+    (cons "Merge-Options" emerge-options-menu))
   (define-key emerge-fast-keymap [menu-bar merge]
     (cons "Merge" emerge-merge-menu))
   (define-key emerge-fast-keymap [menu-bar move]
@@ -431,7 +424,7 @@ Must be set before Emerge is loaded."
   (define-key emerge-options-menu [emerge-one-line-window]
     '("One Line Window" . emerge-one-line-window))
   (define-key emerge-options-menu [emerge-set-merge-mode]
-    '("Set Merge Mode" . emerge-set-merge-mode))
+    '("Set Merge Mode..." . emerge-set-merge-mode))
   (define-key emerge-options-menu [emerge-set-combine-template]
     '("Set Combine Template..." . emerge-set-combine-template))
   (define-key emerge-options-menu [emerge-default-B]
@@ -439,13 +432,15 @@ Must be set before Emerge is loaded."
   (define-key emerge-options-menu [emerge-default-A]
     '("Default A" . emerge-default-A))
   (define-key emerge-options-menu [emerge-skip-prefers]
-    '("Skip Prefers" . emerge-skip-prefers))
+    '(menu-item "Skip Prefers" emerge-skip-prefers
+               :button (:toggle . emerge-skip-prefers)))
   (define-key emerge-options-menu [emerge-auto-advance]
-    '("Auto Advance" . emerge-auto-advance))
+    '(menu-item "Auto Advance" emerge-auto-advance
+               :button (:toggle . emerge-auto-advance)))
   (define-key emerge-options-menu [emerge-edit-mode]
-    '("Edit Mode" . emerge-edit-mode))
+    '(menu-item "Edit Mode" emerge-edit-mode :enable (not emerge-edit-mode)))
   (define-key emerge-options-menu [emerge-fast-mode]
-    '("Fast Mode" . emerge-fast-mode))
+    '(menu-item "Fast Mode" emerge-fast-mode :enable (not emerge-fast-mode)))
 
   (define-key emerge-merge-menu [emerge-abort] '("Abort" . emerge-abort))
   (define-key emerge-merge-menu [emerge-quit] '("Quit" . emerge-quit))
@@ -621,7 +616,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
           (if output-file
               (concat "Output to file: " output-file)
             (concat "Output to buffer: " (buffer-name merge-buffer))))
-     (insert-buffer emerge-A-buffer)
+     (save-excursion (insert-buffer-substring emerge-A-buffer))
      (emerge-set-keys)
      (setq emerge-difference-list (emerge-make-diff-list file-A file-B))
      (setq emerge-number-of-differences (length emerge-difference-list))
@@ -700,7 +695,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
   (emerge-eval-in-buffer
    emerge-diff-error-buffer
    (erase-buffer)
-   (insert-buffer emerge-diff-buffer)
+   (save-excursion (insert-buffer-substring emerge-diff-buffer))
    (delete-matching-lines ok-regexp)))
 
 ;;; Top-level and setup functions for three-file mode.
@@ -790,7 +785,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
           (if output-file
               (concat "Output to file: " output-file)
             (concat "Output to buffer: " (buffer-name merge-buffer))))
-     (insert-buffer emerge-A-buffer)
+     (save-excursion (insert-buffer-substring emerge-A-buffer))
      (emerge-set-keys)
      (setq emerge-difference-list
           (emerge-make-diff3-list file-A file-B file-ancestor))
@@ -1408,8 +1403,8 @@ Otherwise, the A or B file present is copied to the output file."
   (define-key emerge-edit-keymap [menu-bar] (make-sparse-keymap))
 
   ;; Create the additional menu bar items.
-  (define-key emerge-edit-keymap [menu-bar options]
-    (cons "Options" emerge-options-menu))
+  (define-key emerge-edit-keymap [menu-bar emerge-options]
+    (cons "Merge-Options" emerge-options-menu))
   (define-key emerge-edit-keymap [menu-bar merge]
     (cons "Merge" emerge-merge-menu))
   (define-key emerge-edit-keymap [menu-bar move]
@@ -1874,13 +1869,13 @@ buffer after this will cause serious problems."
   (emerge-restore-buffer-characteristics)
   ;; null out the difference markers so they don't slow down future editing
   ;; operations
-  (mapcar (function (lambda (d)
-                     (set-marker (aref d 0) nil)
-                     (set-marker (aref d 1) nil)
-                     (set-marker (aref d 2) nil)
-                     (set-marker (aref d 3) nil)
-                     (set-marker (aref d 4) nil)
-                     (set-marker (aref d 5) nil)))
+  (mapc (function (lambda (d)
+                   (set-marker (aref d 0) nil)
+                   (set-marker (aref d 1) nil)
+                   (set-marker (aref d 2) nil)
+                   (set-marker (aref d 3) nil)
+                   (set-marker (aref d 4) nil)
+                   (set-marker (aref d 5) nil)))
          emerge-difference-list)
   ;; allow them to be garbage collected
   (setq emerge-difference-list nil)
@@ -2383,6 +2378,12 @@ ancestor version does not share.)"
     (emerge-select-difference emerge-current-difference)
     (emerge-recenter)))
 
+;; FIXME the manual advertised this as working in the A or B buffers,
+;; but it does not, because all the buffer locals are nil there.
+;; It would work to call it from the merge buffer and specify that one
+;; wants to use the value of point in the A or B buffer.
+;; But with the prefix argument already in use, there is no easy way
+;; to have it ask for a buffer.
 (defun emerge-find-difference (arg)
   "Find the difference containing the current position of the point.
 If there is no containing difference and the prefix argument is positive,
@@ -3022,7 +3023,7 @@ If some prefix of KEY has a non-prefix definition, it is redefined."
 ;;    (save-excursion
 ;;      (set-buffer standard-output)
 ;;      (help-mode))
-;;    (print-help-return-message)))
+;;    (help-print-return-message)))
 
 ;; This goes with the redefinition of describe-mode.
 ;;;; Adjust things so that keyboard macro definitions are documented correctly.
@@ -3102,10 +3103,9 @@ SPC, it is ignored; if it is anything else, it is processed as a command."
          (progn
            (erase-buffer)
            (insert name)
-           (if (not (pos-visible-in-window-p))
-               (while (and (not (pos-visible-in-window-p))
-                           (> (1- (frame-height)) (window-height)))
-                 (enlarge-window 1)))
+           (while (and (not (pos-visible-in-window-p))
+                       (not (window-full-height-p)))
+             (enlarge-window 1))
            (let* ((echo-keystrokes 0)
                   (c (read-event)))
              (if (not (eq c 32))
@@ -3209,5 +3209,5 @@ More precisely, a [...] regexp to match any one such character."
 
 (provide 'emerge)
 
-;;; arch-tag: a575f092-6e44-400e-b8a2-4124e9377585
+;; arch-tag: a575f092-6e44-400e-b8a2-4124e9377585
 ;;; emerge.el ends here