branch: elpa/llama
commit 0b3af78c11881398302e09d999c0788bde0bb192
Author: Jonas Bernoulli <jo...@bernoul.li>
Commit: Jonas Bernoulli <jo...@bernoul.li>

    Optionally fontify ## and its special arguments
    
    Note that if `llama-fontify-mode' is disabled, then
    `font-lock-type-face' is used for optional arguments because the
    respective entry in `lisp-el-font-lock-keywords-2' (IMO) matches a bit
    too eagerly.  By default `llama-optional-arguments' inherits from that
    face and doesn't make any changes, so toggling `llama-fontify-mode',
    usually has no effect on the appearance of these arguments.
---
 llama.el | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/llama.el b/llama.el
index 6d2eb4653e..ef80faa054 100644
--- a/llama.el
+++ b/llama.el
@@ -217,6 +217,46 @@ It also looks a bit like #\\='function."
   (advice-add 'elisp-mode-syntax-propertize :override
               'llama--elisp-mode-syntax-propertize))
 
+;;; Fontification
+
+(defgroup llama ()
+  "Compact syntax for short lambda."
+  :group 'extensions
+  :group 'lisp)
+
+(defface llama-macro '((t :inherit font-lock-function-call-face))
+  "Face used for the name of the `##' macro.")
+
+(defface llama-mandatory-argument '((t :inherit font-lock-variable-use-face))
+  "Face used for mandatory arguments `%1' through `%9' and `%'.")
+
+(defface llama-optional-argument '((t :inherit font-lock-type-face))
+  "Face used for optional arguments `&1' through `&9', `&' and `&*'.")
+
+(defvar llama-font-lock-keywords
+  `(("(\\(##\\)" 1 'llama-macro)
+    ("\\_<\\(?:%[1-9]?\\)\\_>" 0 'llama-mandatory-argument)
+    ("\\_<\\(?:&[1-9*]\\)\\_>" 0 'llama-optional-argument)))
+
+(defvar llama-fontify-mode-lighter nil)
+
+;;;###autoload
+(define-minor-mode llama-fontify-mode
+  "Toggle fontification of the `##' macro and its positional arguments."
+  :lighter llama-fontify-mode-lighter
+  (if llama-fontify-mode
+      (font-lock-add-keywords  nil llama-font-lock-keywords)
+    (font-lock-remove-keywords nil llama-font-lock-keywords)))
+
+(defun llama--turn-on-fontify-mode ()
+  "Enable `llama-fontify-mode' if in an Emacs Lisp buffer."
+  (when (derived-mode-p #'emacs-lisp-mode)
+    (llama-fontify-mode)))
+
+;;;###autoload
+(define-globalized-minor-mode global-llama-fontify-mode
+  llama-fontify-mode llama--turn-on-fontify-mode)
+
 (provide 'llama)
 ;; Local Variables:
 ;; indent-tabs-mode: nil

Reply via email to