emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/tempel 76a5ab120b 15/82: Add customization variables


From: ELPA Syncer
Subject: [elpa] externals/tempel 76a5ab120b 15/82: Add customization variables
Date: Sun, 9 Jan 2022 20:58:42 -0500 (EST)

branch: externals/tempel
commit 76a5ab120b49adc8aa43aba06cefc2a9d76b531e
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Add customization variables
---
 README.org | 46 +++++++++++++++++++++++++---------------------
 tempel.el  | 42 +++++++++++++++++++++++++++++++-----------
 2 files changed, 56 insertions(+), 32 deletions(-)

diff --git a/README.org b/README.org
index fef7f9642b..da2de94c5c 100644
--- a/README.org
+++ b/README.org
@@ -54,32 +54,36 @@ element of the list is the name of the template. After the 
name the Tempo
 elements follow.
 
 #+begin_src emacs-lisp
-;; -*- mode: lisp -*-
+  ;; -*- mode: lisp -*-
 
-latex-mode
+  latex-mode
 
-(begin "\\begin{" (s env) "}" > n> r> "\\end{" (s env) "}" > n)
-(enumerate "\\begin{enumerate}\n\\item " r> n> "\\end{enumerate}" > n)
-(itemize "\\begin{itemize}\n\\item " r> n> "\\end{itemize}" > n)
+  (begin "\\begin{" (s env) "}" > n> r> "\\end{" (s env) "}" > n)
+  (enumerate "\\begin{enumerate}\n\\item " r> n> "\\end{enumerate}" > n)
+  (itemize "\\begin{itemize}\n\\item " r> n> "\\end{itemize}" > n)
 
-emacs-lisp-mode
+  emacs-lisp-mode
 
-(lambda "(lambda (" p ")" n> r> ")")
-(var "(defvar " p "\n  \"" p "\")" n n)
-(const "(defconst " p "\n  \"" p "\")" n n)
-(custom "(defcustom " p "\n  \"" p "\"" n> ":type '" p ")" n n)
-(face "(defface " p " '((t :inherit font-lock-" p "-face))\n  \"" p "\")" n n)
-(group "(defgroup " p " nil\n  \"" p "\"" n> ":group '" p n> ":prefix \"" p 
"-\")" n n)
-(macro "(defmacro " p " (" p ")\n  \"" p "\"" n> r> ")" n n)
-(fun "(defun " p " (" p ")\n  \"" p "\"" n> r> ")" n n)
-(let "(let (" p ")" n> r> ")")
-(star "(let* (" p ")" n> r> ")")
-(rec "(letrec (" p ")" n> r> ")")
-(command "(defun " p " (" p ")\n  \"" p "\"" n> "(interactive)" n> r> ")" n n)
+  (lambda "(lambda (" p ")" n> r> ")")
+  (var "(defvar " p "\n  \"" p "\")" n n)
+  (const "(defconst " p "\n  \"" p "\")" n n)
+  (custom "(defcustom " p "\n  \"" p "\"" n> ":type '" p ")" n n)
+  (face "(defface " p " '((t :inherit font-lock-" p "-face))\n  \"" p "\")" n 
n)
+  (group "(defgroup " p " nil\n  \"" p "\"" n> ":group '" p n> ":prefix \"" p 
"-\")" n n)
+  (macro "(defmacro " p " (" p ")\n  \"" p "\"" n> r> ")" n n)
+  (fun "(defun " p " (" p ")\n  \"" p "\"" n> r> ")" n n)
+  (let "(let (" p ")" n> r> ")")
+  (star "(let* (" p ")" n> r> ")")
+  (rec "(letrec (" p ")" n> r> ")")
+  (command "(defun " p " (" p ")\n  \"" p "\"" n> "(interactive)" n> r> ")" n 
n)
 
-org-mode
+  rst-mode
 
-(title "#+title: " p n "#+author: Daniel Mendler" n "#+language: en" n n)
+  (title (make-string (length title) ?=) n (s title) n (make-string (length 
title) ?=) n)
+
+  org-mode
+
+  (title "#+title: " p n "#+author: Daniel Mendler" n "#+language: en" n n)
 #+end_src
 
 * Template syntax
@@ -89,7 +93,7 @@ described in detail in ~tempo-define-template~ are supported. 
We document the
 important ones here:
 
  - ~"string"~ Inserts a string literal.
- - ~p~ Inserts an unnamed prompt field.
+ - ~p~ Inserts an unnamed placeholder field.
  - ~r~ Inserts the current region.
  - ~(s NAME)~ Inserts a named field.
  - ~n~ Inserts a newline.
diff --git a/tempel.el b/tempel.el
index 6613de41bf..002d779e06 100644
--- a/tempel.el
+++ b/tempel.el
@@ -38,7 +38,21 @@
 (require 'seq)
 (eval-when-compile (require 'subr-x))
 
-(defvar tempel-file (expand-file-name "templates" user-emacs-directory))
+(defgroup tempel nil
+  "Simple templates"
+  :group 'editing
+  :prefix "tempel-")
+
+(defcustom tempel-file (expand-file-name "templates" user-emacs-directory)
+  "Path to the template file"
+  :type 'string)
+
+(defface tempel-field '((t :inherit highlight))
+  "Face used for fields.")
+
+(defface tempel-form '((t :inherit region))
+  "Face used for evaluated forms.")
+
 (defvar tempel--templates nil)
 (defvar tempel--modified nil)
 (defvar tempel--history nil)
@@ -114,11 +128,12 @@ BEG and END are the boundaries of the modification."
           (dolist (other (cadr state))
             (tempel--replace-field other (eval (overlay-get other 
'tempel--form) (cddr state)))))))))
 
-(defun tempel--field ()
-  "Create template field."
+(defun tempel--field (&optional face)
+  "Create template field with FACE."
   (let ((ov (make-overlay (point) (point))))
-    (overlay-put ov 'face 'highlight)
-    (overlay-put ov 'before-string #(" " 0 1 (face highlight display (space 
:width (1)))))
+    (setq face (or face 'tempel-field))
+    (overlay-put ov 'face face)
+    (overlay-put ov 'before-string (propertize " " 'face face 'display '(space 
:width (1))))
     (overlay-put ov 'modification-hooks (list #'tempel--update-field))
     (overlay-put ov 'insert-behind-hooks (list #'tempel--update-field))
     (push ov tempel--overlays)
@@ -127,19 +142,22 @@ BEG and END are the boundaries of the modification."
 (defun tempel--named (name)
   "Create template field named NAME."
   (let ((ov (tempel--field)))
-    (push ov (alist-get name (car tempel--state)))
     (overlay-put ov 'tempel--name name)
     (overlay-put ov 'tempel--state tempel--state)
+    (push ov (alist-get name (car tempel--state)))
     (when-let (str (alist-get name (cddr tempel--state)))
       (insert str)
       (move-overlay ov (overlay-start ov) (point)))))
 
 (defun tempel--form (form)
   "Create template field evaluating FORM."
-  (let ((ov (tempel--field)))
-    (push ov (cadr tempel--state))
+  (let ((ov (tempel--field 'tempel-form)))
     (overlay-put ov 'tempel--form form)
-    (insert (eval form (cddr tempel--state)))
+    (push ov (cadr tempel--state))
+    ;; Ignore variable errors, since some variables may not be defined yet.
+    (condition-case nil
+        (insert (eval form (cddr tempel--state)))
+      (void-variable nil))
     (move-overlay ov (overlay-start ov) (point))))
 
 (defun tempel--query (prompt name)
@@ -230,13 +248,15 @@ BEG and END are the boundaries of the modification."
     (cond
      ((> arg 0)
       (dolist (ov tempel--overlays)
-        (when (> (overlay-start ov) (point))
+        (when (and (not (overlay-get ov 'tempel--form)) ;; Skip form
+                   (> (overlay-start ov) (point)))
           (if (> arg 1) (setq arg (1- arg))
             (goto-char (overlay-end ov))
             (throw 'tempel--break nil)))))
      ((< arg 0)
       (dolist (ov (reverse tempel--overlays))
-        (when (< (overlay-end ov) (point))
+        (when (and (not (overlay-get ov 'tempel--form)) ;; Skip form
+                   (< (overlay-end ov) (point)))
           (if (< arg -1) (setq arg (1+ arg))
             (goto-char (overlay-end ov))
             (throw 'tempel--break nil))))))



reply via email to

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