[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/tempel 22f9348f1d 4/5: Support :when in tempel-abbrev-m
From: |
ELPA Syncer |
Subject: |
[elpa] externals/tempel 22f9348f1d 4/5: Support :when in tempel-abbrev-mode |
Date: |
Wed, 4 Dec 2024 18:59:00 -0500 (EST) |
branch: externals/tempel
commit 22f9348f1d8ebd6643929d427f4663b12fb5e239
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>
Support :when in tempel-abbrev-mode
---
CHANGELOG.org | 1 +
tempel.el | 23 +++++++++++++----------
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/CHANGELOG.org b/CHANGELOG.org
index f7120894ed..f752dc5286 100644
--- a/CHANGELOG.org
+++ b/CHANGELOG.org
@@ -6,6 +6,7 @@
- Require Emacs 28.1.
- Optional named field argument for custom user element hooks.
+- Support =:when= in =tempel-abbrev-mode= via the abbrev =:enable-function=.
* Version 1.2 (2024-07-24)
diff --git a/tempel.el b/tempel.el
index 00f7d9d782..286708a0e8 100644
--- a/tempel.el
+++ b/tempel.el
@@ -133,6 +133,9 @@ If a file is modified, added or removed, reload the
templates."
(defvar tempel--inhibit-hooks nil
"Inhibit tempel modification change hooks from running.")
+(defvar tempel--ignore-condition nil
+ "Ignore template condition.")
+
(defvar-local tempel--active nil
"List of active templates.
Each template state is a pair, where the car is a list of overlays and
@@ -504,7 +507,8 @@ This is meant to be a source in `tempel-template-sources'."
(derived-mode-p m)
(when-let ((remap (alist-get m (bound-and-true-p
major-mode-remap-alist))))
(derived-mode-p remap))))
- (or (not (plist-member plist :when))
+ (or tempel--ignore-condition
+ (not (plist-member plist :when))
(save-excursion
(save-restriction
(save-match-data
@@ -779,12 +783,6 @@ If called interactively, select a template with
`completing-read'."
(interactive)
(tempel-insert ',template-or-name)))))))
-(defun tempel--abbrev-hook (name template)
- "Abbreviation expansion hook for TEMPLATE with NAME."
- (tempel--delete-word name)
- (tempel--insert template nil)
- t)
-
;;;###autoload
(define-minor-mode tempel-abbrev-mode
"Install Tempel templates as abbrevs."
@@ -797,12 +795,17 @@ If called interactively, select a template with
`completing-read'."
(kill-local-variable 'abbrev-minor-mode-table-alist))
(when tempel-abbrev-mode
(let ((table (make-abbrev-table)))
- (dolist (template (tempel--templates))
+ (dolist (template (let ((tempel--ignore-condition t))
+ (tempel--templates)))
(let* ((name (symbol-name (car template)))
(hook (make-symbol name)))
- (fset hook (apply-partially #'tempel--abbrev-hook name (cdr
template)))
+ (fset hook (lambda ()
+ (tempel--delete-word name)
+ (tempel--insert (cdr template) nil)))
(put hook 'no-self-insert t)
- (define-abbrev table name 'Template hook :system t)))
+ (define-abbrev table name 'Template hook
+ :system t :enable-function
+ (lambda () (assq (car template) (tempel--templates))))))
(setq-local abbrev-minor-mode-table-alist
(cons `(tempel-abbrev-mode . ,table)
abbrev-minor-mode-table-alist)))))