emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r113060: Convert symbol prettification into minor mo


From: Juanma Barranquero
Subject: [Emacs-diffs] trunk r113060: Convert symbol prettification into minor mode and global minor mode.
Date: Tue, 18 Jun 2013 22:13:35 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113060
revision-id: address@hidden
parent: address@hidden
committer: Juanma Barranquero <address@hidden>
branch nick: trunk
timestamp: Wed 2013-06-19 00:13:25 +0200
message:
  Convert symbol prettification into minor mode and global minor mode.
  
  * etc/NEWS: Document new Prettify Symbols mode.
  
  * lisp/progmodes/prog-mode.el (prettify-symbols-alist): Rename from
    `prog-prettify-symbols', and make a local defvar instead of defcustom.
    (prettify-symbols--keywords): Rename from `prog-prettify-symbols-alist'
    and make a local defvar.
    (prettify-symbols--compose-symbol): Rename from
    `prog--prettify-font-lock-compose-symbol'.
    (prettify-symbols--make-keywords): Rename from
    `prog-prettify-font-lock-symbols-keywords' and simplify.
    (prog-prettify-install): Remove.
    (prettify-symbols-mode): New minor mode, based on `prog-prettify-install'.
    (turn-on-prettify-symbols-mode): New function.
    (global-prettify-symbols-mode): New globalized minor mode.
  
  * lisp/emacs-lisp/lisp-mode.el (lisp-mode-variables):
  * lisp/progmodes/cfengine.el (cfengine3-mode):
  * lisp/progmodes/perl-mode.el (perl-mode): Don't call `prog-prettify-install';
    set `prettify-symbols-alist' instead.
modified:
  etc/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1485
  etc/NEWS                       news-20100311060928-aoit31wvzf25yr1z-1
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/emacs-lisp/lisp-mode.el   lispmode.el-20091113204419-o5vbwnq5f7feedwu-205
  lisp/progmodes/cfengine.el     
cfengine.el-20091113204419-o5vbwnq5f7feedwu-2944
  lisp/progmodes/perl-mode.el    perlmode.el-20091113204419-o5vbwnq5f7feedwu-402
  lisp/progmodes/prog-mode.el    progmode.el-20091230193750-bspzfk1gt8nm2mal-14
=== modified file 'etc/ChangeLog'
--- a/etc/ChangeLog     2013-06-14 02:31:28 +0000
+++ b/etc/ChangeLog     2013-06-18 22:13:25 +0000
@@ -1,3 +1,7 @@
+2013-06-18  Juanma Barranquero  <address@hidden>
+
+       * NEWS: Document new Prettify Symbols mode.
+
 2013-06-14  Stefan Monnier  <address@hidden>
 
        * NEWS (utf-8 for el): Move to the incompatible section.

=== modified file 'etc/NEWS'
--- a/etc/NEWS  2013-06-17 15:28:22 +0000
+++ b/etc/NEWS  2013-06-18 22:13:25 +0000
@@ -2873,10 +2873,10 @@
 modes, e.g. (add-hook 'prog-mode-hook 'flyspell-prog-mode) to enable
 on-the-fly spell checking for comments and strings.
 
-**** New option, `prog-prettify-symbols' lets the user control symbol
-prettify (replacing a string like "lambda" with the Greek lambda
-character).  The mode derived from `prog-mode' must call
-`prog-prettify-install' with its own custom alist, which can be empty.
+**** New minor modes `prettify-symbols-mode' and
+`global-prettify-symbols-mode' let the user enable symbol
+prettification (replacing a string like "lambda" with the Greek lambda
+character).
 
 *** New hook `change-major-mode-after-body-hook', run by
 `run-mode-hooks' just before any other mode hooks.

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-06-18 20:38:43 +0000
+++ b/lisp/ChangeLog    2013-06-18 22:13:25 +0000
@@ -1,3 +1,26 @@
+2013-06-18  Juanma Barranquero  <address@hidden>
+
+       Convert symbol prettification into minor mode and global minor mode.
+
+       * progmodes/prog-mode.el (prettify-symbols-alist): Rename from
+       `prog-prettify-symbols', and make a local defvar instead of defcustom.
+       (prettify-symbols--keywords): Rename from
+       `prog-prettify-symbols-alist' and make a local defvar.
+       (prettify-symbols--compose-symbol): Rename from
+       `prog--prettify-font-lock-compose-symbol'.
+       (prettify-symbols--make-keywords): Rename from
+       `prog-prettify-font-lock-symbols-keywords' and simplify.
+       (prog-prettify-install): Remove.
+       (prettify-symbols-mode): New minor mode, based on
+       `prog-prettify-install'.
+       (turn-on-prettify-symbols-mode): New function.
+       (global-prettify-symbols-mode): New globalized minor mode.
+
+       * emacs-lisp/lisp-mode.el (lisp-mode-variables):
+       * progmodes/cfengine.el (cfengine3-mode):
+       * progmodes/perl-mode.el (perl-mode): Don't call
+       `prog-prettify-install'; set `prettify-symbols-alist' instead.
+
 2013-06-18  Juri Linkov  <address@hidden>
 
        * files-x.el (modify-file-local-variable-message): New function.

=== modified file 'lisp/emacs-lisp/lisp-mode.el'
--- a/lisp/emacs-lisp/lisp-mode.el      2013-06-15 09:16:49 +0000
+++ b/lisp/emacs-lisp/lisp-mode.el      2013-06-18 22:13:25 +0000
@@ -231,7 +231,7 @@
          (font-lock-mark-block-function . mark-defun)
          (font-lock-syntactic-face-function
           . lisp-font-lock-syntactic-face-function)))
-  (prog-prettify-install lisp--prettify-symbols-alist))
+  (setq-local prettify-symbols-alist lisp--prettify-symbols-alist))
 
 (defun lisp-outline-level ()
   "Lisp mode `outline-level' function."

=== modified file 'lisp/progmodes/cfengine.el'
--- a/lisp/progmodes/cfengine.el        2013-06-05 17:48:50 +0000
+++ b/lisp/progmodes/cfengine.el        2013-06-18 22:13:25 +0000
@@ -547,7 +547,7 @@
   (setq font-lock-defaults
         '(cfengine3-font-lock-keywords
           nil nil nil beginning-of-defun))
-  (prog-prettify-install cfengine3--prettify-symbols-alist)
+  (setq-local prettify-symbols-alist cfengine3--prettify-symbols-alist)
 
   ;; Use defuns as the essential syntax block.
   (set (make-local-variable 'beginning-of-defun-function)

=== modified file 'lisp/progmodes/perl-mode.el'
--- a/lisp/progmodes/perl-mode.el       2013-06-05 17:48:50 +0000
+++ b/lisp/progmodes/perl-mode.el       2013-06-18 22:13:25 +0000
@@ -658,7 +658,7 @@
                              nil nil ((?\_ . "w")) nil
                              (font-lock-syntactic-face-function
                               . perl-font-lock-syntactic-face-function)))
-  (prog-prettify-install perl--prettify-symbols-alist)
+  (setq-local prettify-symbols-alist perl--prettify-symbols-alist)
   (setq-local syntax-propertize-function #'perl-syntax-propertize-function)
   (add-hook 'syntax-propertize-extend-region-functions
             #'syntax-propertize-multiline 'append 'local)

=== modified file 'lisp/progmodes/prog-mode.el'
--- a/lisp/progmodes/prog-mode.el       2013-06-17 01:09:13 +0000
+++ b/lisp/progmodes/prog-mode.el       2013-06-18 22:13:25 +0000
@@ -54,21 +54,14 @@
          (end (progn (forward-sexp 1) (point))))
       (indent-region start end nil))))
 
-(defvar prog-prettify-symbols-alist nil)
-
-(defcustom prog-prettify-symbols nil
-  "Whether symbols should be prettified.
-When set to an alist in the form `((STRING . CHARACTER)...)' it
-will augment the mode's native prettify alist."
-  :type '(choice
-          (const :tag "No thanks" nil)
-          (const :tag "Mode defaults" t)
-          (alist :tag "Mode defaults augmented with your own list"
-                 :key-type string :value-type character))
-  :version "24.4")
-
-(defun prog--prettify-font-lock-compose-symbol (alist)
-  "Compose a sequence of ascii chars into a symbol.
+(defvar-local prettify-symbols-alist nil
+  "Alist of symbol prettifications.
+Each element looks like (SYMBOL . CHARACTER), where the symbol
+matching SYMBOL (a string, not a regexp) will be shown as
+CHARACTER instead.")
+
+(defun prettify-symbols--compose-symbol (alist)
+  "Compose a sequence of characters into a symbol.
 Regexp match data 0 points to the chars."
   ;; Check that the chars should really be composed into a symbol.
   (let* ((start (match-beginning 0))
@@ -88,28 +81,60 @@
   ;; Return nil because we're not adding any face property.
   nil)
 
-(defun prog-prettify-font-lock-symbols-keywords ()
-  (when prog-prettify-symbols
-    (let ((alist (append prog-prettify-symbols-alist
-                         (if (listp prog-prettify-symbols)
-                             prog-prettify-symbols
-                           nil))))
-      `((,(regexp-opt (mapcar 'car alist) t)
-         (0 (prog--prettify-font-lock-compose-symbol ',alist)))))))
-
-(defun prog-prettify-install (alist)
-"Install prog-mode support to prettify symbols according to ALIST.
-
-ALIST is in the format `((STRING . CHARACTER)...)' like
-`prog-prettify-symbols'.
-
-Internally, `font-lock-add-keywords' is called."
-  (setq-local prog-prettify-symbols-alist alist)
-  (let ((keywords (prog-prettify-font-lock-symbols-keywords)))
-    (when keywords
-      (font-lock-add-keywords nil keywords)
-      (setq-local font-lock-extra-managed-props
-                  (cons 'composition font-lock-extra-managed-props)))))
+(defun prettify-symbols--make-keywords ()
+  (if prettify-symbols-alist
+      `((,(regexp-opt (mapcar 'car prettify-symbols-alist) t)
+         (0 (prettify-symbols--compose-symbol ',prettify-symbols-alist))))
+    nil))
+
+(defvar-local prettify-symbols--keywords nil)
+
+;;;###autoload
+(define-minor-mode prettify-symbols-mode
+  "Toggle Prettify Symbols mode.
+With a prefix argument ARG, enable Prettify Symbols mode if ARG is
+positive, and disable it otherwise.  If called from Lisp, enable
+the mode if ARG is omitted or nil.
+
+When Prettify Symbols mode and font-locking are enabled, symbols are
+prettified (displayed as composed characters) according to the rules
+in `prettify-symbols-alist' (which see), which are locally defined
+by major modes supporting prettifying.  To add further customizations
+for a given major mode, you can modify `prettify-symbols-alist' thus:
+
+  (add-hook 'emacs-lisp-mode-hook
+            (lambda ()
+              (push '(\"<=\" . ?≤) prettify-symbols-alist)))
+
+You can enable this mode locally in desired buffers, or use
+`global-prettify-symbols-mode' to enable it for all modes that
+support it."
+  :init-value nil
+  (if prettify-symbols-mode
+      ;; Turn on
+      (when (setq prettify-symbols--keywords (prettify-symbols--make-keywords))
+        (font-lock-add-keywords nil prettify-symbols--keywords)
+        (setq-local font-lock-extra-managed-props
+                    (cons 'composition font-lock-extra-managed-props))
+        (font-lock-fontify-buffer))
+    ;; Turn off
+    (when prettify-symbols--keywords
+      (font-lock-remove-keywords nil prettify-symbols--keywords)
+      (setq prettify-symbols--keywords nil))
+    (when (memq 'composition font-lock-extra-managed-props)
+      (setq font-lock-extra-managed-props (delq 'composition
+                                                font-lock-extra-managed-props))
+      (with-silent-modifications
+        (remove-text-properties (point-min) (point-max) '(composition nil))))))
+
+(defun turn-on-prettify-symbols-mode ()
+  (when (and (not prettify-symbols-mode)
+             (local-variable-p 'prettify-symbols-alist))
+    (prettify-symbols-mode 1)))
+
+;;;###autoload
+(define-globalized-minor-mode global-prettify-symbols-mode
+  prettify-symbols-mode turn-on-prettify-symbols-mode)
 
 ;;;###autoload
 (define-derived-mode prog-mode fundamental-mode "Prog"


reply via email to

[Prev in Thread] Current Thread [Next in Thread]