branch: externals/tempel
commit b5cea7ac6783111f63d81c998eddd6c26a582349
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>
Add template markers
---
README.org | 5 +++--
tempel.el | 21 +++++++++++++++++++--
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/README.org b/README.org
index 4862790dbf..15a6a8b1ce 100644
--- a/README.org
+++ b/README.org
@@ -19,8 +19,9 @@ provides a modernized UI on top of Tempo, in the form of two
commands:
(Capf). You may want to use my [[https://github.com/minad/corfu][Corfu]]
completion at point UI.
+ ~tempel-insert~: Select a template by name and insert it into the current
buffer.
-After inserting a template you can move between the template markers with keys
-~M-up/down~ as defined in the ~tempel-map~ keymap.
+After inserting a template you can move between the visible template markers
+with keys ~M-left/right~ as defined in the ~tempel-map~ keymap. As soon as you
move
+before (behind) the first (last) marker, the markers will be removed.
Note that this package is not a competitor to the mature and widely used
YASnippet library. Try Tempel only if your snippet and templating requirements
diff --git a/tempel.el b/tempel.el
index c024d3a22b..92a7b520e2 100644
--- a/tempel.el
+++ b/tempel.el
@@ -43,6 +43,7 @@
(defvar tempel--modified nil)
(defvar tempel--current nil)
(defvar tempel--history nil)
+(defvar-local tempel--overlays nil)
(defvar tempel-map
(let ((map (make-sparse-keymap)))
@@ -91,8 +92,22 @@
(when-let* ((name (intern-soft name))
(template (cdr (assoc name templates))))
(setf (alist-get 'tempo-marks minor-mode-overriding-map-alist) tempel-map)
- (let ((tempel--current template))
- (tempo-insert-template 'tempel--current region))))
+ (let ((tempel--current template)
+ (old-point (point))
+ (split-overlays nil)
+ (old-marks (copy-sequence tempo-marks)))
+ (dolist (ov tempel--overlays)
+ (when (and (<= (overlay-start ov) old-point) (>= (overlay-end ov)
old-point))
+ (push ov split-overlays)))
+ (tempo-insert-template 'tempel--current region)
+ (dolist (ov split-overlays)
+ (setf (overlay-end ov) old-point))
+ (dolist (x tempo-marks)
+ (unless (member x old-marks)
+ (let ((ov (make-overlay x x nil nil t)))
+ (overlay-put ov 'face '(:underline t))
+ (overlay-put ov 'before-string #(" " 0 1 (face highlight display
(space :width (1)))))
+ (push ov tempel--overlays)))))))
(defun tempel--save ()
"Save Tempo file buffer."
@@ -127,7 +142,9 @@
"Template completion is done."
(interactive)
(dolist (mark tempo-marks) (set-marker mark nil))
+ (mapc #'delete-overlay tempel--overlays)
(setq tempo-marks nil
+ tempel--overlays nil
minor-mode-overriding-map-alist
(delq (assq-delete-all 'tempo-marks minor-mode-overriding-map-alist)
minor-mode-overriding-map-alist)))