;;; smerge-mode.el --- Minor mode to resolve diff3 conflicts
-;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
;; Author: Stefan Monnier <monnier@cs.yale.edu>
;; Keywords: merge diff3 cvs conflict
-;; Revision: $Id: smerge-mode.el,v 1.8 2000/12/22 22:58:57 monnier Exp $
+;; Revision: $Id: smerge-mode.el,v 1.14 2001/07/31 08:28:43 gerd Exp $
;; This file is part of GNU Emacs.
(defconst smerge-font-lock-keywords
'((smerge-find-conflict
- (1 smerge-mine-face prepend)
+ (1 smerge-mine-face prepend t)
(2 smerge-base-face prepend t)
(3 smerge-other-face prepend t)
;; FIXME: `keep' doesn't work right with syntactic fontification.
- `diff3-A'")
;; Compiler pacifiers
-(defvar font-lock-mode nil)
-(defvar font-lock-keywords nil)
+(defvar font-lock-mode)
+(defvar font-lock-keywords)
(eval-when-compile
(unless (fboundp 'font-lock-fontify-region)
(autoload 'font-lock-fontify-region "font-lock")))
(when base-start (1- base-start)) base-start
(1- other-start) other-start))
t)
- (error "Point not in conflict region"))))
+ (search-failed (error "Point not in conflict region")))))
(defun smerge-find-conflict (&optional limit)
"Find and match a conflict region. Intended as a font-lock MATCHER.
(smerge-ensure-match n2)
(let ((name1 (aref smerge-match-names n1))
(name2 (aref smerge-match-names n2))
+ ;; Read them before the match-data gets clobbered.
+ (beg1 (match-beginning n1))
+ (end1 (match-end n1))
+ (beg2 (match-beginning n2))
+ (end2 (match-end n2))
(file1 (make-temp-file "smerge1"))
(file2 (make-temp-file "smerge2"))
(dir default-directory)
- (file (file-relative-name buffer-file-name)))
- (write-region (match-beginning n1) (match-end n1) file1)
- (write-region (match-beginning n2) (match-end n2) file2)
+ (file (file-relative-name buffer-file-name))
+ (coding-system-for-read buffer-file-coding-system))
+ (write-region beg1 end1 file1)
+ (write-region beg2 end2 file2)
(unwind-protect
(with-current-buffer (get-buffer-create smerge-diff-buffer-name)
(setq default-directory dir)
"Minor mode to simplify editing output from the diff3 program.
\\{smerge-mode-map}"
nil " SMerge" nil
- (when font-lock-mode
+ (when (and (boundp 'font-lock-mode) font-lock-mode)
+ (set (make-local-variable 'font-lock-multiline) t)
(save-excursion
(if smerge-mode
(font-lock-add-keywords nil smerge-font-lock-keywords 'append)
(provide 'smerge-mode)
-
-;;; Change Log:
-;; $Log: smerge-mode.el,v $
-;; Revision 1.8 2000/12/22 22:58:57 monnier
-;; (smerge-basic-map): Use `=' rather than `d'.
-;; Use minibuffer menu prompt for the `=' prefix.
-;; (smerge-command-prefix): Change default to C-^.
-;;
-;; Revision 1.7 2000/10/06 16:07:31 monnier
-;; (smerge-diff): Setup the buffer's default-directory
-;; and add filename to the names so that diff-mode can jump to source.
-;;
-;; Revision 1.6 2000/10/05 06:05:51 miles
-;; (smerge-mine-face, smerge-other-face, smerge-base-face, smerge-markers-face):
-;; Add dark-background variants.
-;;
-;; Revision 1.5 2000/08/16 19:51:55 monnier
-;; (smerge-mode-menu): Doc fix.
-;;
-;; Revision 1.4 2000/07/21 13:52:19 fx
-;; (smerge-mode-menu): Fill it out.
-;;
-;; Revision 1.3 2000/05/25 18:08:26 fx
-;; (smerge-diff-switches): Don't use list* in defcustom.
-;;
-;; Revision 1.2 2000/03/22 00:54:55 monnier
-;; (smerge-auto-leave): New function and variable.
-;; (smerge-basic-map): Rename from smerge-basic-keymap.
-;; Change the bindings for smerge-diff-*.
-;; (smerge-*-map): Use easy-mmode-defmap.
-;; (smerge-(next|prev)): Use easy-mmode-define-navigation.
-;; (smerge-keep-*): Use smerge-auto-leave.
-;;
-;; Revision 1.1 1999/12/09 13:00:21 monnier
-;; New file. Provides a simple minor-mode for files containing
-;; diff3-style conflict markers, such as generated by RCS
-;;
-
;;; smerge-mode.el ends here