changeset 32:dc1c584707e6

Add some colorized diff stuff to emacs.
author Augie Fackler <durin42@gmail.com>
date Fri, 09 Jan 2009 11:28:24 -0600
parents a5691a22c92b
children b403402153b5
files .elisp/diff-mode-.el .emacs
diffstat 2 files changed, 193 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/.elisp/diff-mode-.el
@@ -0,0 +1,189 @@
+;;; diff-mode-.el --- Extensions to `diff-mode.el'.
+;;
+;; Filename: diff-mode-.el
+;; Description: Extensions to `diff-mode.el'.
+;; Author: Drew Adams
+;; Maintainer: Drew Adams
+;; Copyright (C) 2004-2009, Drew Adams, all rights reserved.
+;; Created: Mon Nov 08 16:36:09 2004
+;; Version: 21.0
+;; Last-Updated: Sat Dec 27 10:19:33 2008 (-0800)
+;;           By: dradams
+;;     Update #: 646
+;; URL: http://www.emacswiki.org/cgi-bin/wiki/diff-mode-.el
+;; Keywords: data, matching, tools, unix, local, font, face
+;; Compatibility: GNU Emacs 21.x, GNU Emacs 22.x
+;;
+;; Features that might be required by this library:
+;;
+;;   None
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Commentary:
+;;
+;;    Extensions to `diff-mode.el'.
+;;
+;;  "*Diff*" buffer is highlighted differently.
+;;
+;;  NOTE: The faces defined here look best on a medium-dark
+;;        background, because some are light and some are dark.
+;;        Try, for example, setting the background to "LightSteelBlue"
+;;        in your `~/.emacs' file: You can do this is via
+;;        `special-display-buffer-names':
+;;
+;;         (setq special-display-buffer-names
+;;               (cons '("*Diff*" (background-color . "LightSteelBlue"))
+;;                     special-display-buffer-names))
+;;
+;;        You can alternatively change the background value of
+;;        `special-display-frame-alist' and set
+;;        `special-display-regexps' to something matching "*info*":
+;;
+;;         (setq special-display-frame-alist
+;;               (cons '(background-color . "LightSteelBlue")
+;;                     special-display-frame-alist))
+;;         (setq special-display-regexps '("[ ]?[*][^*]+[*]"))
+;;
+;;
+;;  New faces defined here:
+;;
+;;    `diff-file1-hunk-header', `diff-file2-hunk-header'.
+;;
+;;  New user options defined here:
+;;
+;;    `diff-file1-hunk-header-face', `diff-file2-hunk-header-face'.
+;;
+;;
+;;  ***** NOTE: The following faces defined in `diff-mode.el' have
+;;              been REDEFINED HERE:
+;;
+;;    `diff-added', `diff-changed', `diff-context',
+;;    `diff-file-header', `diff-header', `diff-hunk-header',
+;;    `diff-index', `diff-indicator-added', `diff-indicator-changed',
+;;    `diff-indicator-removed', `diff-nonexistent', `diff-removed'.
+;;
+;;
+;;  ***** NOTE: The following variable defined in `diff-mode.el' has
+;;              been REDEFINED HERE:
+;;
+;;    `diff-font-lock-keywords'.
+;;
+;;
+;;  This library should be loaded *before* library `diff-mode.el'.
+;;  Put this in your initialization file, `~/.emacs':
+;;    (require 'diff-mode-)
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Change log:
+;;
+;; 2008/01/01 dadams
+;;     Added :group for deffaces.
+;; 2006/01/04 dadams
+;;     Updated to use new Emacs 22 face names for indicator faces.
+;;       Thanks to Juri Linkov for the letting me know about the new faces.
+;;     Updated diff-font-lock-keywords to be = Emacs 22, except for file name.
+;; 2006/01/01 dadams
+;;     Renamed faces, without "-face".
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; This program 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.
+
+;; This program 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 this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
+;; Floor, Boston, MA 02110-1301, USA.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Code:
+
+;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+;;; Define some additional faces.
+(defface diff-file1-hunk-header
+  '((t (:foreground "Blue" :background "DarkSeaGreen1")))
+  "Face used to highlight a diff hunk for the first `diff' argument."
+  :group 'diff-mode)
+(defvar diff-file1-hunk-header-face 'diff-file1-hunk-header)
+
+(defface diff-file2-hunk-header
+  '((t (:foreground "Red" :background "PaleGoldenrod")))
+  "Face used to highlight a diff hunk for the second `diff' argument."
+  :group 'diff-mode)
+(defvar diff-file2-hunk-header-face 'diff-file2-hunk-header)
+
+;;; These faces are standard in Emacs 22, but they are new for Emacs 21.
+(defface diff-indicator-changed
+  '((t (:foreground "PaleGoldenrod" :background "MediumBlue")))
+  "*Face used to highlight the line-start indicator of a modified line."
+  :group 'diff-mode)
+(defvar diff-indicator-changed-face 'diff-indicator-changed)
+
+(defface diff-indicator-added
+  '((t (:foreground "PaleGoldenrod" :background "DarkGreen")))
+  "*Face used to highlight the line-start indicator of an inserted line."
+  :group 'diff-mode)
+(defvar diff-indicator-added-face 'diff-indicator-added)
+
+(defface diff-indicator-removed
+  '((t (:foreground "PaleGoldenrod" :background "DarkMagenta")))
+  "*Face used to highlight the line-start indicator of a removed line."
+  :group 'diff-mode)
+(defvar diff-indicator-removed-face 'diff-indicator-removed)
+
+;;; Change existing `diff-mode' faces too.
+(custom-set-faces
+ '(diff-added ((t (:foreground "DarkGreen"))) 'now)
+ '(diff-changed ((t (:foreground "MediumBlue"))) 'now)
+ '(diff-context ((t (:foreground "LightSteelBlue"))) 'now)
+ '(diff-file-header ((t (:foreground "White"))) 'now)
+ '(diff-header ((t (:foreground "White"))) 'now)
+ '(diff-hunk-header ((t (:foreground "White"))) 'now)
+ '(diff-index ((t (:foreground "Green"))) 'now)
+ '(diff-nonexistent ((t (:foreground "DarkBlue"))) 'now)
+ '(diff-removed ((t (:foreground "Red"))) 'now)
+ )
+
+;;; The only real difference here now from the standard Emacs 22 version is the
+;;; use of diff-file1* and diff-file2*.
+(defvar diff-font-lock-keywords
+  `(
+    ("^\\(@@ -[0-9,]+ \\+[0-9,]+ @@\\)\\(.*\\)$" ;unified
+     (1 diff-hunk-header-face) (2 diff-function-face))
+    ("^\\(\\*\\{15\\}\\)\\(.*\\)$"      ;context
+     (1 diff-hunk-header-face) (2 diff-function-face))
+    ("^\\*\\*\\* .+ \\*\\*\\*\\*". diff-file1-hunk-header-face) ;context
+    ("^--- .+ ----$" . diff-file2-hunk-header-face) ;context
+    ("^[0-9,]+[acd][0-9,]+$" . diff-hunk-header-face) ; normal
+    ("^---$" . diff-hunk-header-face)   ;normal
+    ("^\\(---\\|\\+\\+\\+\\|\\*\\*\\*\\) \\(\\S-+\\)\\(.*[^*-]\\)?\n"
+     (0 diff-header-face) (2 diff-file-header-face prepend))
+    ("^\\([-<]\\)\\(.*\n\\)" (1 diff-indicator-removed-face) (2 diff-removed-face))
+    ("^\\([+>]\\)\\(.*\n\\)" (1 diff-indicator-added-face) (2 diff-added-face))
+    ("^\\(!\\)\\(.*\n\\)" (1 diff-indicator-changed-face) (2 diff-changed-face))
+    ("^Index: \\(.+\\).*\n" (0 diff-header-face) (1 diff-index-face prepend))
+    ("^Only in .*\n" . diff-nonexistent-face)
+    ("^\\(#\\)\\(.*\\)"
+     (1 (if (facep 'font-lock-comment-delimiter-face)
+            'font-lock-comment-face))
+     (2 font-lock-comment-face))
+    ("^[^-=+*!<>#].*\n" (0 diff-context-face))))
+
+;;;;;;;;;;;;;;;;;;;;;;;
+
+(provide 'diff-mode-)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; diff-mode-.el ends here
--- a/.emacs
+++ b/.emacs
@@ -17,6 +17,9 @@
 
 (require 'mercurial)
 
+; improved diff mode
+(require 'diff-mode-)
+
 ; Clojure
 (require 'clojure-auto)
 (setq auto-mode-alist (cons '("\\.clj$" . clojure-mode) auto-mode-alist))
@@ -116,4 +119,4 @@ point."
 (global-set-key "\C-h" 'backward-delete-char-untabify)
 ; M-t is what I want for the textmate file finding
 (global-set-key [(meta t)] 'textmate-goto-file)
-(global-set-key [(meta shift f)] 'textmate-find-in-project-type)
+(global-set-key [(meta z)] 'textmate-find-in-project-type)