summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorJuanma Barranquero <lekktu@gmail.com>2013-06-19 00:13:25 +0200
committerJuanma Barranquero <lekktu@gmail.com>2013-06-19 00:13:25 +0200
commit14dd22d2cedad0e1babcce0fea868a0c01294fa2 (patch)
tree49f91c1cf89ab6ea0dcc92234bb6988d62d404d5 /lisp
parentec9295aeaa0ca3616507b66bd6e2f81dce05e820 (diff)
downloademacs-14dd22d2cedad0e1babcce0fea868a0c01294fa2.tar.gz
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.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog23
-rw-r--r--lisp/emacs-lisp/lisp-mode.el2
-rw-r--r--lisp/progmodes/cfengine.el2
-rw-r--r--lisp/progmodes/perl-mode.el2
-rw-r--r--lisp/progmodes/prog-mode.el99
5 files changed, 88 insertions, 40 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index abd9e9da3ae..44d8a2a82bd 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,26 @@
+2013-06-18 Juanma Barranquero <lekktu@gmail.com>
+
+ 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 <juri@jurta.org>
* files-x.el (modify-file-local-variable-message): New function.
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index b8e12b63061..af30deca4cc 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -231,7 +231,7 @@ font-lock keywords will not be case sensitive."
(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."
diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el
index 01b5faef5b3..55d5b8b0be7 100644
--- a/lisp/progmodes/cfengine.el
+++ b/lisp/progmodes/cfengine.el
@@ -547,7 +547,7 @@ to the action header."
(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)
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index 1d5052bede4..8955c64aa9e 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -658,7 +658,7 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'."
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)
diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el
index 6498ba51e45..b3ed328bd72 100644
--- a/lisp/progmodes/prog-mode.el
+++ b/lisp/progmodes/prog-mode.el
@@ -54,21 +54,14 @@ instead."
(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 @@ Regexp match data 0 points to the chars."
;; 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"