;;; smerge-mode.el --- Minor mode to resolve diff3 conflicts
-;; Copyright (C) 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
;; Author: Stefan Monnier <monnier@cs.yale.edu>
;; Keywords: merge diff3 cvs conflict
-;; Revision: $Id: smerge-mode.el,v 1.2 2000/03/22 00:54:55 monnier Exp $
+;; Revision: $Id: smerge-mode.el,v 1.6 2000/10/05 06:05:51 miles Exp $
;; This file is part of GNU Emacs.
:type 'boolean)
(defface smerge-mine-face
- '((t (:foreground "blue")))
+ '((((background light))
+ (:foreground "blue"))
+ (((background dark))
+ (:foreground "cyan")))
"Face for your code."
:group 'smerge)
(defvar smerge-mine-face 'smerge-mine-face)
(defface smerge-other-face
- '((t (:foreground "darkgreen")))
+ '((((background light))
+ (:foreground "darkgreen"))
+ (((background dark))
+ (:foreground "lightgreen")))
"Face for the other code."
:group 'smerge)
(defvar smerge-other-face 'smerge-other-face)
(defface smerge-base-face
- '((t (:foreground "red")))
+ '((((background light))
+ (:foreground "red"))
+ (((background dark))
+ (:foreground "orange")))
"Face for the base code."
:group 'smerge)
(defvar smerge-base-face 'smerge-base-face)
(defface smerge-markers-face
- '((t (:background "grey85")))
+ '((((background light))
+ (:background "grey85"))
+ (((background dark))
+ (:background "grey30")))
"Face for the conflict markers."
:group 'smerge)
(defvar smerge-markers-face 'smerge-markers-face)
(easy-menu-define smerge-mode-menu smerge-mode-map
"Menu for `smerge-mode'."
'("SMerge"
- ["Invoke Ediff" smerge-ediff t]
+ ["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"]
))
(defconst smerge-font-lock-keywords
(let ((name1 (aref smerge-match-names n1))
(name2 (aref smerge-match-names n2))
(file1 (make-temp-file "smerge1"))
- (file2 (make-temp-file "smerge2")))
+ (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)
(unwind-protect
(with-current-buffer (get-buffer-create smerge-diff-buffer-name)
+ (setq default-directory dir)
(let ((inhibit-read-only t))
(erase-buffer)
(apply 'call-process diff-command nil t nil
(append smerge-diff-switches
- (list "-L" name1 "-L" name2 file1 file2))))
+ (list "-L" (concat name1 "/" file)
+ "-L" (concat name2 "/" file)
+ file1 file2))))
(goto-char (point-min))
(diff-mode)
(display-buffer (current-buffer) t))
;;; Change Log:
;; $Log: smerge-mode.el,v $
+;; 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.