;ELC   
;;; Compiled by pot@pot.cnuce.cnr.it on Tue Mar 18 15:52:03 2003
;;; from file /home/pot/gnu/emacs-pretest.new/lisp/smerge-mode.el
;;; in Emacs version 21.3
;;; with bytecomp version 2.85.4.1
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`smerge-mode.el' was compiled for Emacs 19.29 or later"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(custom-declare-group 'smerge nil "Minor mode to resolve diff3 conflicts." :group 'tools :prefix "smerge-")
#@42 Buffer name to use for displaying diffs.
(custom-declare-variable 'smerge-diff-buffer-name '"*smerge-diff*" '(#$ . 732) :group 'smerge :type '(choice (const "*vc-diff*") (const "*cvs-diff*") (const "*smerge-diff*") string))
#@120 *A list of strings specifying switches to be be passed to diff.
Used in `smerge-diff-base-mine' and related functions.
(custom-declare-variable 'smerge-diff-switches '(append '("-d" "-b") (if (listp diff-switches) diff-switches (list diff-switches))) '(#$ . -963) :group 'smerge :type '(repeat string))
#@75 *Non-nil means to leave `smerge-mode' when the last conflict is resolved.
(custom-declare-variable 'smerge-auto-leave 't '(#$ . -1272) :group 'smerge :type 'boolean)
(byte-code "\305\301\306\307\310\311%\210\301B\312\301!\204 \301\305\302\313\314\310\311%\210\302B\312\302!\204( \302\305\303\315\316\310\311%\210\303B\312\303!\204< \303\305\304\317\320\310\311%\210\304B\312\304!\204P \304\305\207" [current-load-list smerge-mine-face smerge-other-face smerge-base-face smerge-markers-face custom-declare-face ((((background light)) (:foreground "blue")) (((background dark)) (:foreground "cyan"))) "Face for your code." :group smerge boundp ((((background light)) (:foreground "darkgreen")) (((background dark)) (:foreground "lightgreen"))) "Face for the other code." ((((background light)) (:foreground "red")) (((background dark)) (:foreground "orange"))) "Face for the base code." ((((background light)) (:background "grey85")) (((background dark)) (:background "grey30"))) "Face for the conflict markers."] 6)
#@36 The base keymap for `smerge-mode'.
(defconst smerge-basic-map (byte-code "\301\302\303\304\305\306\307\310\311\312\313\314!B\315BBBBBBBBB\316\317\300!\205  \316$\207" [smerge-basic-map easy-mmode-define-keymap ("n" . smerge-next) ("p" . smerge-prev) ("a" . smerge-keep-all) ("b" . smerge-keep-base) ("o" . smerge-keep-other) ("m" . smerge-keep-mine) ("E" . smerge-ediff) ("" . smerge-keep-current) "=" make-sparse-keymap "Diff" (("=<" "base-mine" . smerge-diff-base-mine) ("=>" "base-other" . smerge-diff-base-other) ("==" "mine-other" . smerge-diff-mine-other)) nil boundp] 12) (#$ . 2306))
#@36 Prefix for `smerge-mode' commands.
(custom-declare-variable 'smerge-command-prefix '"^" '(#$ . 2906) :group 'smerge :type '(choice (string "") (string "^") (string "") string))
#@27 Keymap for `smerge-mode'.
(defconst smerge-mode-map (byte-code "\303	BC\304\305\302!\205 \n\304$\207" [smerge-command-prefix smerge-basic-map smerge-mode-map easy-mmode-define-keymap nil boundp] 5) (#$ . 3092))
#@25 Menu for `smerge-mode'.
(defvar smerge-mode-menu nil (#$ . 3311))
(easy-menu-do-define 'smerge-mode-menu smerge-mode-map "Menu for `smerge-mode'." '("SMerge" ["Next" smerge-next :help "Go to next conflict"] ["Previous" smerge-prev :help "Go to previous conflict"] ["Keep All" smerge-keep-all :help "Keep all three versions"] ["Revert to Base" smerge-keep-base :help "Revert to base version"] ["Keep Other" smerge-keep-other :help "Keep `other' version"] ["Keep Yours" smerge-keep-mine :help "Keep your version"] ["Keep Current" smerge-keep-current :help "Use current (at point) version"] "--" ["Diff Base/Mine" smerge-diff-base-mine :help "Diff `base' and `mine' for current conflict"] ["Diff Base/Other" smerge-diff-base-other :help "Diff `base' and `other' for current conflict"] ["Diff Mine/Other" smerge-diff-mine-other :help "Diff `mine' and `other' for current conflict"] "--" ["Invoke Ediff" smerge-ediff :help "Use Ediff to resolve the conflicts"]))
#@39 Font lock patterns for `smerge-mode'.
(defconst smerge-font-lock-keywords '((smerge-find-conflict (1 smerge-mine-face prepend t) (2 smerge-base-face prepend t) (3 smerge-other-face prepend t) (0 smerge-markers-face keep) (4 nil t t) (5 nil t t))) (#$ . 4275))
(byte-code "\301B\305\302B\306\303B\307\304B\310\301\207" [current-load-list smerge-begin-re smerge-end-re smerge-base-re smerge-other-re "^<<<<<<< \\(.*\\)\n" "^>>>>>>> .*\n" "^||||||| .*\n" "^=======\n"] 2)
#@121 Keep track of which style of conflict is in use.
Can be nil if the style is undecided, or else:
- `diff3-E'
- `diff3-A'
(defvar smerge-conflict-style nil (#$ . 4763))
(byte-code "\301B\302B\303\304\305\"\207" [current-load-list font-lock-mode font-lock-keywords add-to-list debug-ignored-errors "^No \\(previous\\|next\\) conflict"] 3)
#@35 Go to the next COUNT'th conflict.
(defalias 'smerge-next #[(&optional count) "\204 \303\304W\203 \305[!\207\306	!\203 T\307	\310\311$\2040 \306	!\203, db\207\312\313!\207\304\224b\210p\314\315 !=\205[ t\205[ \212\307	\310\311\316$)\206M d\317\n\310\311#?\205Z \320\321!)\207" [count smerge-begin-re endpt 1 0 smerge-prev looking-at re-search-forward nil t error "No next conflict" window-buffer selected-window 2 pos-visible-in-window-p recenter (0)] 5 (#$ . 5109) nil])
#@38 Go to the previous COUNT'th conflict
(defalias 'smerge-prev #[(&optional count) "\204 \302\303W\203 \304[!\207\305	\306\307$?\205 \310\311!\207" [count smerge-begin-re 1 0 smerge-next re-search-backward nil t error "No previous conflict"] 5 (#$ . 5597) nil])
(byte-code "\301B\302\301\207" [current-load-list smerge-match-names ["conflict" "mine" "base" "other"]] 2)
(defalias 'smerge-ensure-match #[(n) "\225?\205 \302\303\304	H\"!\207" [n smerge-match-names error format "No `%s'"] 5])
(defalias 'smerge-auto-leave #[nil "\205 \212eb\210\302	\303\304#)?\205 \305\306!\207" [smerge-auto-leave smerge-begin-re re-search-forward nil t smerge-mode -1] 4])
#@98 Keep all three versions.
Convenient for the kind of conflicts that can arise in ChangeLog files.
(defalias 'smerge-keep-all #[nil "\300 \210\301\302\303!\206 \304\302\305!\206 \304\302\306!\206 \304Q\307\211#\210\310 \207" [smerge-match-conflict replace-match match-string 1 "" 2 3 t smerge-auto-leave] 5 (#$ . 6274) nil])
#@29 Revert to the base version.
(defalias 'smerge-keep-base #[nil "\300 \210\301\302!\210\303\304\302!\305\211#\210\306 \207" [smerge-match-conflict smerge-ensure-match 2 replace-match match-string t smerge-auto-leave] 4 (#$ . 6606) nil])
#@22 Use "other" version.
(defalias 'smerge-keep-other #[nil "\300 \210\301\302\303!\304\211#\210\305 \207" [smerge-match-conflict replace-match match-string 3 t smerge-auto-leave] 4 (#$ . 6847) nil])
#@20 Keep your version.
(defalias 'smerge-keep-mine #[nil "\300 \210\301\302\303!\304\211#\210\305 \207" [smerge-match-conflict replace-match match-string 1 t smerge-auto-leave] 4 (#$ . 7049) nil])
#@45 Use the current (under the cursor) version.
(defalias 'smerge-keep-current #[nil "\301 \210\302\302\225\203 `\224W\204 `\225Y\203 S\211\202 \303X\203+ \304\305!\2025 \306\307!\310\211#\210\311 )\207" [i smerge-match-conflict 3 0 error "Not inside a version" replace-match match-string t smerge-auto-leave] 5 (#$ . 7248) nil])
#@60 Diff 'base' and 'mine' version in current conflict region.
(defalias 'smerge-diff-base-mine #[nil "\300\301\302\"\207" [smerge-diff 2 1] 3 (#$ . 7591) nil])
#@61 Diff 'base' and 'other' version in current conflict region.
(defalias 'smerge-diff-base-other #[nil "\300\301\302\"\207" [smerge-diff 2 3] 3 (#$ . 7754) nil])
#@61 Diff 'mine' and 'other' version in current conflict region.
(defalias 'smerge-diff-mine-other #[nil "\300\301\302\"\207" [smerge-diff 1 3] 3 (#$ . 7919) nil])
#@213 Get info about the conflict.  Puts the info in the `match-data'.
The submatches contain:
 0:  the whole conflict.
 1:  your code.
 2:  the base code.
 3:  other code.
An error is raised if not inside a conflict.
(defalias 'smerge-match-conflict #[nil "\212\300\301\302\217)\207" [nil (byte-code "`\306y\307\n!\310\224\310\225\311\306!\312!\310\225W\204% \313\314\315C\"\210\316\310\224\310\225\307\"\310\224\310\225\316\316 \307!\317#\203a \320\321!\322L\210 \310\224\310\225\202\230 \323\"\206i \324!\230\203w \320\321!\325L\210\202\230 \204\230 \322=\204\212 \326\327\"\203\230 \f \330\f \205\257 SS\257\f!\210.\317\207" [orig-point _ smerge-begin-re start mine-start filename 1 re-search-backward 0 match-string re-search-forward signal cl-assertion-failed (< orig-point (match-end 0)) nil t make-local-variable smerge-conflict-style diff3-A file-name-nondirectory "" diff3-E string-match "^[.0-9]+\\'" store-match-data smerge-end-re other-end end smerge-other-re mine-end other-start base-start base-end smerge-base-re buffer-file-name] 13) ((search-failed (error "Point not in conflict region")))] 3 (#$ . 8085)])
#@240 Find and match a conflict region.  Intended as a font-lock MATCHER.
The submatches are the same as in `smerge-match-conflict'.
Returns non-nil if a match is found between the point and LIMIT.
The point is moved to the end of the conflict.
(defalias 'smerge-find-conflict #[(&optional limit) "\302	\303#\205\f \304\305\306\217\207" [smerge-begin-re limit re-search-forward t #1=#:G97269 (byte-code "\300 \210\301\225b\207" [smerge-match-conflict 0] 1) ((error))] 4 (#$ . 9288)])
(defalias 'smerge-diff #[(n1 n2) "\306 \210\307!\210\307	!\210\nH\n	H\224\225	\224	\225\310\311!\310\312!\313\f! !\"#\314! #\210\314#\210\315\216r\316$!q\210\317%\320 \210\321\322&\323\317\323\324'\325#\326Q\325\"\326Q\257\"&\210)eb\210\327 \210\330p\317\".\207" [n1 n2 smerge-match-names default-directory buffer-file-name buffer-file-coding-system smerge-match-conflict smerge-ensure-match make-temp-file "smerge1" "smerge2" file-relative-name write-region ((byte-code "\302!\210\302	!\207" [file1 file2 delete-file] 2)) get-buffer-create t erase-buffer apply call-process nil append "-L" "/" diff-mode display-buffer coding-system-for-read file dir file2 file1 end2 beg2 end1 beg1 name2 name1 smerge-diff-buffer-name inhibit-read-only diff-command smerge-diff-switches] 14])
#@40 Invoke ediff to resolve the conflicts.
(defalias 'smerge-ediff #[nil "p	\306 \307\f!\310\311\312Q!#\310\311\313Q!$\314%r#q\210\315 \210\316!\210eb\210\317 \203E \320\224\203: \321%\322\323\324!\321\211#\210\202- \325 \210\326\314!\210\n \210)r$q\210\315 \210\316!\210eb\210\317 \203o \322\323\327!\321\211#\210\202_ \325 \210\326\314!\210\n \210)%\203\265 \310\311\330Q!%r%q\210\315 \210\316!\210eb\210\317 \203\252 \322\323\320!\206\243 \331\321\211#\210\202\226 \325 \210\326\314!\210\n \210)%\203\305 \332#$%#\202\313 \333#$\"q\210\334\335!L\210\334\336!L\210\334\337!\340L\210\341\342!.\207" [buf major-mode mode config buffer-file-name filename current-window-configuration file-name-nondirectory generate-new-buffer "*" " MINE*" " OTHER*" nil buffer-disable-undo insert-buffer-substring smerge-find-conflict 2 t replace-match match-string 1 buffer-enable-undo set-buffer-modified-p 3 " BASE*" "" ediff-merge-buffers-with-ancestor ediff-merge-buffers make-local-variable smerge-ediff-windows smerge-ediff-buf ediff-quit-hook #[nil "	\n\f\306 \210rq\210\307 \210\310!\210\311!\210\311!\210\311!\210\312!\203= \311!\210\313!\210\314\315!.\207" [ediff-buffer-A ediff-buffer-B ediff-buffer-C ediff-ancestor-buffer smerge-ediff-buf smerge-ediff-windows ediff-cleanup-mess erase-buffer insert-buffer kill-buffer bufferp set-window-configuration message "Conflict resolution finished; you may save the buffer" windows buf buffer-Ancestor buffer-C buffer-B buffer-A] 6] message "Please resolve conflicts now; exit ediff when done" mine other base] 4 (#$ . 10606) nil])
#@91 Non-nil if SMerge mode is enabled.
Use the command `smerge-mode' to change this variable.
(defvar smerge-mode nil (#$ . 12238))
(make-variable-buffer-local 'smerge-mode)
#@82 Minor mode to simplify editing output from the diff3 program.
\{smerge-mode-map}
(defalias 'smerge-mode #[(&optional arg) "\203\f \304!\305V\202 	?\306\302!\203H \n\203H \307\310!\311L\210\212	\203- \312\313\314#\210\2022 \315\313\"\210eb\210\316 \203G \212\317\305\224\305\225\313#\210)\2025 )\320\321	\203R \322\202S \323\"\210t\203f \324\325	\203c \326\202d \327\"\210\330 \210	\207" [arg smerge-mode font-lock-mode smerge-font-lock-keywords prefix-numeric-value 0 boundp make-local-variable font-lock-multiline t font-lock-add-keywords nil append font-lock-remove-keywords smerge-find-conflict font-lock-fontify-region run-hooks smerge-mode-hook smerge-mode-on-hook smerge-mode-off-hook message "SMerge mode %sabled" "en" "dis" force-mode-line-update] 4 (#$ . 12414) nil])
#@48 Hook run at the end of function `smerge-mode'.
(custom-declare-variable 'smerge-mode-hook 'nil '(#$ . 13203) :group 'smerge :type 'hook)
(byte-code "\300\301\302\303\304!\205 \304J#\210\305\301!\207" [add-minor-mode smerge-mode #(" SMerge" 0 7 (local-map (keymap (header-line keymap (down-mouse-3 . mode-line-mode-menu-1)) (mode-line keymap (down-mouse-3 . mode-line-mode-menu-1))) help-echo "mouse-3: minor mode menu")) boundp smerge-mode-map provide] 5)
