pretty-mode.el
author Luke Hoersten <Luke@Hoersten.org>
Fri, 25 Sep 2009 09:16:25 -0500
changeset 12 272dd4613dd9
child 13 7dc464c4e2d3
permissions -rw-r--r--
Added modified pretty-mode.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     1
;;; -*- coding: utf-8 -*-
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     2
;; Minor mode for redisplaying parts of the buffer as pretty symbols
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     3
;; originally modified from Trent Buck's version at http://paste.lisp.org/display/42335,2/raw
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     4
;; Also includes code from `sml-mode'
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     5
;; See also http://www.emacswiki.org/cgi-bin/wiki/PrettyLambda
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     6
;; written by Arthur Danskin <[email protected]>
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     7
;;
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     8
;; to install:
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     9
;; (require 'pretty-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    10
;; (global-pretty-mode 1)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    11
;; or
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    12
;; (add-hook 'my-pretty-language-hook 'turn-on-pretty-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    13
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    14
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    15
(require 'cl)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    16
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    17
;; modified from `sml-mode'
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    18
(defun pretty-font-lock-compose-symbol (alist)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    19
  "Compose a sequence of ascii chars into a symbol."
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    20
  (let* ((start (match-beginning 0))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    21
         (end (match-end 0))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    22
         (syntax (char-syntax (char-after start))))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    23
    (if (or (if (eq syntax ?w)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    24
                (or (eq (char-syntax (char-before start)) ?w)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    25
                    (eq (char-syntax (char-after end)) ?w))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    26
              (memq (char-syntax (char-before start)) '(?. ?\\)))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    27
            (memq (get-text-property start 'face)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    28
                  '(font-lock-doc-face font-lock-string-face
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    29
                                       font-lock-comment-face)))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    30
        (remove-text-properties start end '(composition))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    31
      (compose-region start end (cdr (assoc (match-string 0) alist)))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    32
      ))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    33
  nil)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    34
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    35
(defvar pretty-interaction-mode-alist
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    36
  '((inferior-scheme-mode . scheme-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    37
    (lisp-interaction-mode . emacs-lisp-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    38
    (inferior-lisp-mode . lisp-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    39
    (inferior-ess-mode . ess-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    40
    (inf-haskell-mode . haskell-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    41
    (inferior-erlang-mode . erlang-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    42
    (tuareg-interactive-mode . tuareg-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    43
    (inferior-python-mode . python-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    44
    (inferior-octave-mode . octave-mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    45
    (inferior-ruby-mode . ruby-mode))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    46
  "Alist mapping from inferior process interaction modes to their
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    47
  corresponding script editing modes.")
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    48
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    49
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    50
(defun pretty-font-lock-keywords (alist)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    51
  "Return a `font-lock-keywords' style entry for replacing
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    52
regular expressions with symbols. ALIST has the form ((STRING .
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    53
REPLACE-CHAR) ...)."
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    54
  (when alist
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    55
    `((,(regexp-opt (mapcar 'car alist))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    56
       (0 (pretty-font-lock-compose-symbol
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    57
           ',alist))))))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    58
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    59
(defun pretty-keywords (&optional mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    60
  "Return the font-lock keywords for MODE, or the current mode if
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    61
MODE is nil. Return nil if there are no keywords."
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    62
  (let* ((mode (or mode major-mode))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    63
         (kwds (cdr-safe
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    64
                (or (assoc mode pretty-patterns)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    65
                    (assoc (cdr-safe
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    66
                            (assoc mode pretty-interaction-mode-alist))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    67
                           pretty-patterns)))))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    68
    (pretty-font-lock-keywords kwds)))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    69
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    70
(defgroup pretty nil "Minor mode for replacing text with symbols "
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    71
  :group 'faces)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    72
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    73
(define-minor-mode pretty-mode
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    74
  "Toggle Pretty minor mode.
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    75
With arg, turn Pretty minor mode on if arg is positive, off otherwise.
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    76
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    77
Pretty mode builds on `font-lock-mode'. Instead of highlighting
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    78
keywords, it replaces them with symbols. For example, lambda is
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    79
displayed as λ in lisp modes."
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    80
  :group 'pretty
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    81
                                        ;  :lighter " λ"
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    82
  (if pretty-mode
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    83
      (progn
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    84
        (font-lock-add-keywords nil (pretty-keywords) t)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    85
        (font-lock-fontify-buffer))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    86
    (font-lock-remove-keywords nil (pretty-keywords))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    87
    (remove-text-properties (point-min) (point-max) '(composition nil))))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    88
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    89
(defun turn-on-pretty-if-desired ()
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    90
  "Turn on `pretty-mode' if the current major mode supports it."
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    91
  (if (pretty-keywords)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    92
      (pretty-mode 1)))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    93
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    94
(define-globalized-minor-mode global-pretty-mode
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    95
  pretty-mode turn-on-pretty-if-desired
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    96
  :init-value t)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    97
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    98
(defun turn-off-pretty-mode ()
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    99
  (interactive)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   100
  (pretty-mode -1))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   101
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   102
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   103
(defun turn-on-pretty-mode ()
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   104
  (interactive)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   105
  (pretty-mode +1))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   106
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   107
(defun pretty-compile-patterns (patterns)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   108
  "Set pretty patterns in a convenient way.
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   109
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   110
PATTERNS should be of the form ((GLYPH (REGEXP MODE ...) ...)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   111
...). GLYPH should be a character. MODE should be the name of a
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   112
major mode without the \"-mode\". Returns patterns in the form
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   113
expected by `pretty-patterns'"
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   114
  (let ((pretty-patterns))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   115
    (loop for (glyph . pairs) in patterns do
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   116
          (loop for (regexp . major-modes) in pairs do
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   117
                (loop for mode in major-modes do
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   118
                      (let* ((mode (intern (concat (symbol-name mode)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   119
                                                   "-mode")))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   120
                             (assoc-pair (assoc mode pretty-patterns))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   121
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   122
                             (entry (cons regexp glyph)))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   123
                        (if assoc-pair
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   124
                            (push entry (cdr assoc-pair))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   125
                          (push (cons mode (list entry))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   126
                                pretty-patterns))))))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   127
    pretty-patterns))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   128
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   129
;;; (setq-default pretty-patterns pretty-patterns-default)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   130
(defconst pretty-patterns-default
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   131
  (let* ((lispy '(scheme emacs-lisp lisp))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   132
         (mley '(tuareg haskell sml erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   133
         (c-like '(c c++ perl sh python java ess ruby))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   134
         (all (append lispy mley c-like (list 'octave))))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   135
    (pretty-compile-patterns
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   136
     `(
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   137
       (?≠ ("!=" ,@c-like scheme octave)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   138
           ("<>" tuareg octave)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   139
           ("~=" octave)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   140
           ("/=" haskell)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   141
           ("=/=" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   142
       (?≤ ("<=" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   143
       (?≤ ("=<" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   144
       ( ("fun" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   145
       (?≥ (">=" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   146
       (?← ("<-" ,@mley ess)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   147
           ("!" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   148
       (?→ ("->" ,@mley ess c c++ perl))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   149
       (?↑ ("\\^" tuareg))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   150
       (?⇒ ("=>" sml perl ruby))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   151
;;;        (?∅ ("nil" emacs-lisp ruby)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   152
;;;            ("null" scheme java)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   153
;;;            ("NULL" c c++)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   154
;;;            ("None" python)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   155
;;;            ("()" ,@mley))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   156
       (?≡ ("==" ,@c-like erlang haskell))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   157
       (?∀ ("BOOST_FOREACH" c++))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   158
       (?∷ ("::" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   159
       (?√ ("sqrt" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   160
       (?∑ ("sum" python))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   161
       ( ("alpha" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   162
       ( ("beta" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   163
       ( ("gamma" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   164
       ( ("delta" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   165
       ( ("epsilon" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   166
       ( ("zeta" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   167
       ( ("eta" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   168
       ( ("theta" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   169
       ( ("iota" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   170
       ( ("kappa" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   171
       ( ("lambda" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   172
       ( ("mu" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   173
       ( ("nu" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   174
       ( ("vega" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   175
       ( ("xi" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   176
       (?ο ("omicron" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   177
       ( ("pi" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   178
       ( ("rho" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   179
       ( ("sigma" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   180
       ( ("tau" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   181
       ( ("upsilon" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   182
       ( ("phi" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   183
       ( ("chi" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   184
       ( ("psi" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   185
       ( ("omega" ,@all))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   186
       ( ("**2" python tuareg octave))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   187
       ( ("**3" python tuareg octave))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   188
       (?ⁿ ("**n" python tuareg octave))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   189
       (?ₐ ("[a]" ,@c-like))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   190
       (?ₓ ("[x]" ,@c-like))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   191
       (?₀ ("[0]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   192
           ("/0" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   193
       (?₁ ("[1]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   194
           ("/1" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   195
       (?₂ ("[2]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   196
           ("/2" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   197
       (?₃ ("[3]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   198
           ("/3" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   199
       (?₄ ("[4]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   200
           ("/4" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   201
       (?₅ ("[5]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   202
           ("/5" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   203
       (?₆ ("[6]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   204
           ("/6" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   205
       (?₇ ("[7]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   206
           ("/7" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   207
       (?₈ ("[8]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   208
           ("/8" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   209
       (?₉ ("[9]" ,@c-like)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   210
           ("/9" erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   211
       (?∧ ("\\<And\\>"     emacs-lisp lisp python)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   212
           ("\\<andalso\\>" sml erlang)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   213
           ("&&"            c c++ perl haskell))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   214
       (?∨ ("\\<or\\>"      emacs-lisp lisp)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   215
           ("\\<orelse\\>"  sml erlang)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   216
           ("||"            c c++ perl haskell erlang))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   217
       ( ("!"       c c++))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   218
       )))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   219
  "default value for `pretty-patterns'")
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   220
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   221
;; TODO fix type
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   222
(defcustom pretty-patterns pretty-patterns-default
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   223
  "*List of pretty patterns.
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   224
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   225
Should be a list of the form ((MODE ((REGEXP . GLYPH) ...)) ...)"
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   226
  :group 'pretty
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   227
  :type '(alist :key-type variable :value-type (alist :key-type (string) :value-type (character))))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   228
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   229
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   230
(defun pretty-add-keywords (mode keywords)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   231
  "Add pretty character KEYWORDS to MODE
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   232
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   233
MODE should be a symbol, the major mode command name, such as
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   234
`c-mode' or nil. If nil, pretty keywords are added to the current
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   235
buffer. KEYWORDS should be a list where each element has the
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   236
form (REGEXP . CHAR). REGEXP will be replaced with CHAR in the
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   237
relevant buffer(s)."
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   238
  (font-lock-add-keywords
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   239
   mode (mapcar (lambda (kw) `((,(car kw)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   240
                                (0 (prog1 nil
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   241
                                     (compose-region (match-beginning 0)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   242
                                                     (match-end 0)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   243
                                                     ,(cdr kw)))))))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   244
                keywords)))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   245
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   246
(defun pretty-regexp (regexp glyph)
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   247
  "Replace REGEXP with GLYPH in buffer."
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   248
  (interactive "MRegexp to replace:
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   249
MCharacter to replace with: ")
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   250
  (pretty-add-keywords nil `((,regexp . ,(string-to-char glyph))))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   251
  (font-lock-fontify-buffer))
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   252
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   253
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   254
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   255
272dd4613dd9 Added modified pretty-mode.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   256
(provide 'pretty-mode)