From 4cf60c3fea16b60eb18c9a7d8403b75c89aeffef Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Fri, 21 Oct 2022 21:37:30 -0500 Subject: blhe --- lisp/+tempo.el | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 lisp/+tempo.el (limited to 'lisp/+tempo.el') diff --git a/lisp/+tempo.el b/lisp/+tempo.el new file mode 100644 index 0000000..2324665 --- /dev/null +++ b/lisp/+tempo.el @@ -0,0 +1,44 @@ +;;; +tempo.el --- easier tempo definition -*- lexical-binding: t -*- + +(require 'tempo) + +;; TODO: I need to figure out where this function goes. +(defun delete2 (list &rest elems) + "Delete each element of ELEMS, and the next item, from LIST." + (let ((r nil)) + (while (consp list) + (if (member (car list) elems) + (setf list (cdr list)) + (setf r (cons (car list) r))) + (setf list (cdr list))) + (reverse r))) + +(defmacro define-tempo (tag doc &rest elements) + "Define a template and add its tag to MODE's abbrev-table. +TAG, DOC, and ELEMENTS are passed to `tempo-define-template', which see. +ABBREV, if given, is the abbrev string to use for template expansion +under MODE's abbrev-table. If ABBREV isn't given, TAG will be used." + (declare (indent 1)) + (let* ((template (gensym)) + (tag (cond ((stringp tag) tag) + ((symbolp tag) (symbol-name tag)) + (t (user-error "TAG must be a string or symbol: %S" tag)))) + (mode (or (plist-get elements :mode) nil)) + (abbrev (or (plist-get elements :abbrev) tag)) + (taglist (or (plist-get elements :taglist) nil)) + (table (let ((tname (and mode (derived-mode-abbrev-table-name mode)))) + (while (and tname (not (memq tname abbrev-table-name-list))) + (setq tname (and (get mode 'derived-mode-parent) + (derived-mode-abbrev-table-name + (get mode 'derived-mode-parent))))) + (or tname 'global-abbrev-table))) + (elements (delete2 elements :mode :abbrev :taglist))) + `(let ((,template (tempo-define-template ,tag + ',elements + ,tag + ,doc + ,taglist))) + (define-abbrev ,table ,tag "" ,template :system t) + (put ,template 'no-self-insert t)))) + +(provide '+tempo) -- cgit 1.4.1-21-gabe81