[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/tempel 9291904a84 24/82: Simplify overlay updates
From: |
ELPA Syncer |
Subject: |
[elpa] externals/tempel 9291904a84 24/82: Simplify overlay updates |
Date: |
Sun, 9 Jan 2022 20:58:42 -0500 (EST) |
branch: externals/tempel
commit 9291904a84133068295aae74ddd826e83c3df9ce
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
Simplify overlay updates
---
tempel.el | 52 +++++++++++++++++++++-------------------------------
1 file changed, 21 insertions(+), 31 deletions(-)
diff --git a/tempel.el b/tempel.el
index 49384cd5b7..8c3ddb4801 100644
--- a/tempel.el
+++ b/tempel.el
@@ -113,15 +113,6 @@ WIDTH, SEP and ELLIPSIS configure the formatting."
'face 'completions-annotations))
width 0 ?\s ellipsis))))
-(defun tempel--replace-field (ov str)
- "Replace OV content with STR."
- (save-excursion
- (let ((beg (overlay-start ov)))
- (goto-char beg)
- (delete-char (- (overlay-end ov) beg))
- (insert str)
- (move-overlay ov beg (point)))))
-
(defun tempel--update-field (ov after beg end &optional _len)
"Update field overlay OV.
AFTER is non-nil after the modification.
@@ -135,21 +126,21 @@ BEG and END are the boundaries of the modification."
;; with an invalid undo state after tempel-done.
(with-silent-modifications
(move-overlay ov (overlay-start ov) (max end (overlay-end ov)))
- (let ((state (overlay-get ov 'tempel--state)))
- ;; Update other named fields
- (when-let (name (overlay-get ov 'tempel--name))
- (let ((str (buffer-substring-no-properties (overlay-start ov)
(overlay-end ov))))
- (setf (alist-get name (cddr state)) str)
- (dolist (other (alist-get name (car state)))
- (unless (eq other ov)
- (tempel--replace-field other str)))))
- ;; Update evaluated form fields
- (dolist (other (cadr state))
- (tempel--replace-field
- other
- (save-excursion
- (goto-char (overlay-start other))
- (eval (overlay-get other 'tempel--form) (cddr state))))))))))
+ (let ((state (overlay-get ov 'tempel--state))
+ (name (overlay-get ov 'tempel--name))
+ str)
+ (when name
+ (setq str (buffer-substring-no-properties (overlay-start ov)
(overlay-end ov)))
+ (setf (alist-get name (cdr state)) str))
+ (dolist (other (car state))
+ (unless (eq other ov)
+ (goto-char (overlay-start other))
+ (when-let (str (if-let (form (overlay-get other 'tempel--form))
+ (eval form (cdr state))
+ (and name (eq name (overlay-get other
'tempel--name)) str)))
+ (delete-char (- (overlay-end other) (point)))
+ (insert str)
+ (move-overlay other (overlay-start other) (point))))))))))
(defun tempel--field (&optional face)
"Create template field with FACE."
@@ -160,6 +151,7 @@ BEG and END are the boundaries of the modification."
(overlay-put ov 'modification-hooks (list #'tempel--update-field))
(overlay-put ov 'insert-behind-hooks (list #'tempel--update-field))
(overlay-put ov 'tempel--state tempel--state)
+ (push ov (car tempel--state))
(push ov tempel--overlays)
ov))
@@ -167,8 +159,7 @@ BEG and END are the boundaries of the modification."
"Create template field named NAME."
(let ((ov (tempel--field)))
(overlay-put ov 'tempel--name name)
- (push ov (alist-get name (car tempel--state)))
- (when-let (str (alist-get name (cddr tempel--state)))
+ (when-let (str (alist-get name (cdr tempel--state)))
(insert str)
(move-overlay ov (overlay-start ov) (point)))))
@@ -176,16 +167,15 @@ BEG and END are the boundaries of the modification."
"Create template field evaluating FORM."
(let ((ov (tempel--field 'tempel-form)))
(overlay-put ov 'tempel--form form)
- (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)))
+ (insert (eval form (cdr tempel--state)))
(void-variable nil))
(move-overlay ov (overlay-start ov) (point))))
(defun tempel--query (prompt name)
"Read input with PROMPT and assign to NAME."
- (setf (alist-get name (cddr tempel--state)) (read-string prompt)))
+ (setf (alist-get name (cdr tempel--state)) (read-string prompt)))
(defun tempel--element (element region)
"Insert template ELEMENT given the REGION."
@@ -235,11 +225,11 @@ BEG and END are the boundaries of the modification."
(setf (overlay-end ov) (point))))
;; Begin marker
(push (make-overlay (point) (point)) tempel--overlays)
- (let ((tempel--state (list nil nil))
+ (let ((tempel--state (cons nil nil))
(inhibit-modification-hooks t))
(dolist (x template) (tempel--element x region)))
;; End marker
- (push (make-overlay (point) (point)) tempel--overlays))
+ (push (make-overlay (point) (point) nil nil t) tempel--overlays))
;; Jump to first field
(tempel-next 1)))
- [elpa] externals/tempel e6aa1892af 14/82: README: Simplify template, (continued)
- [elpa] externals/tempel e6aa1892af 14/82: README: Simplify template, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 2ba940809a 42/82: Add temple-abort (Fix #2), ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 5521546f48 10/82: README: Add header, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel d2d5566282 65/82: Improve description of PROMPT/DEFAULT value, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel e529887d5d 70/82: tempel-expand: Fix exit function, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 349e9735ac 08/82: Remove global temple-region variable, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel bdf04d8c48 05/82: Improved field movement, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 76a5ab120b 15/82: Add customization variables, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel f7990f528b 11/82: README update, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 5807ca4d28 33/82: Use remappings, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 9291904a84 24/82: Simplify overlay updates,
ELPA Syncer <=
- [elpa] externals/tempel 5e1a864123 68/82: Add tempel-abbrev to define an abbrev, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 6c288c32a2 80/82: README: Document Capf setup (Fix #14), ELPA Syncer, 2022/01/09
- [elpa] externals/tempel b5cea7ac67 03/82: Add template markers, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 545b929a28 45/82: README: Fix formatting, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 1ef2d76dd1 35/82: Add screenshots, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel fcfb19e134 47/82: Improve undo, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 36a7977702 62/82: Use cyan color for default values, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel bcf135f993 66/82: Bind lexical environment for prompt eval, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 7a7813e531 26/82: Maintain list of active templates, ELPA Syncer, 2022/01/09
- [elpa] externals/tempel 934bf35f4b 37/82: Set deleted overlays to nil, ELPA Syncer, 2022/01/09