annotate contrib/hg-test-mode.el @ 22081:ed426b011612

contrib: add emacs mode for *.t files
author Matt Mackall <mpm@selenic.com>
date Fri, 08 Aug 2014 17:45:36 -0500
parents
children 6e5ff8e26af6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22081
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1 ;; hg-test-mode.el - Major mode for editing Mercurial tests
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
2 ;;
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
3 ;; Copyright 2014 Matt Mackall <mpm@selenic.com>
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
4 ;; "I have no idea what I'm doing"
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
5 ;;
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
6 ;; This software may be used and distributed according to the terms of the
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
7 ;; GNU General Public License version 2 or any later version.
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
8 ;;
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
9 ;; To enable, add something like the following to your .emacs:
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
10 ;;
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
11 ;; (if (file-exists-p "~/hg/contrib/hg-test-mode.el")
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
12 ;; (load "~/hg/contrib/hg-test-mode.el"))
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
13
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
14 (defvar hg-test-mode-hook nil)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
15
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
16 (defvar hg-test-mode-map
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
17 (let ((map (make-keymap)))
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
18 (define-key map "\C-j" 'newline-and-indent)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
19 map)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
20 "Keymap for hg test major mode")
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
21
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
22 (add-to-list 'auto-mode-alist '("\\.t\\'" . hg-test-mode))
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
23
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
24 (defconst hg-test-font-lock-keywords-1
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
25 (list
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
26 '("^ \\(\\$\\|>>>\\) " 1 font-lock-builtin-face)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
27 '("^ \\(>\\|\\.\\.\\.\\) " 1 font-lock-constant-face)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
28 '("^ \\([[][0-9]+[]]\\)$" 1 font-lock-warning-face)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
29 '("^ \\(.*?\\)\\(\\( [(][-a-z]+[)]\\)+\\)$" 2 font-lock-type-face)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
30 '("^ \\(.*?\\)\\(\\( [(][-a-z]+[)]\\)*\\)$" 1 font-lock-string-face)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
31 '("^#.*" . font-lock-preprocessor-face)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
32 '("^\\([^ ].*\\)$" 1 font-lock-comment-face)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
33 )
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
34 "Minimal highlighting expressions for hg-test mode")
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
35
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
36 (defvar hg-test-font-lock-keywords hg-test-font-lock-keywords-1
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
37 "Default highlighting expressions for hg-test mode")
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
38
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
39 (defvar hg-test-mode-syntax-table
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
40 (let ((st (make-syntax-table)))
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
41 (modify-syntax-entry ?\" "w" st) ;; disable standard quoting
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
42 st)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
43 "Syntax table for hg-test mode")
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
44
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
45 (defun hg-test-mode ()
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
46 (interactive)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
47 (kill-all-local-variables)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
48 (use-local-map hg-test-mode-map)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
49 (set-syntax-table hg-test-mode-syntax-table)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
50 (set (make-local-variable 'font-lock-defaults) '(hg-test-font-lock-keywords))
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
51 (setq major-mode 'hg-test-mode)
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
52 (setq mode-name "hg-test")
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
53 (run-hooks 'hg-test-mode-hook))
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
54
ed426b011612 contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
55 (provide 'hg-test-mode)