changeset 580: |
571685ae64f1 |
parent: |
f68a5996a2b1
|
child: |
7efdeaebaf22 |
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Mon, 05 Aug 2024 21:57:13 -0400 |
permissions: |
-rw-r--r-- |
description: |
queries, cli fixes, dat/csv, emacs org-columns |
1 ;;; sk.el --- skel Emacs Mode -*- lexical-binding: t; -*- 3 ;; skel-mode, skel-minor-mode,skt-minor-mode, sk-classes 5 ;; Copyright (C) 2023 The Compiler Company 7 ;; Author: ellis <ellis@rwest.io> 8 ;; Keywords: languages, lisp 10 ;; This program is free software; you can redistribute it and/or modify 11 ;; it under the terms of the GNU General Public License as published by 12 ;; the Free Software Foundation, either version 3 of the License, or 13 ;; (at your option) any later version. 15 ;; This program is distributed in the hope that it will be useful, 16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of 17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 ;; GNU General Public License for more details. 20 ;; You should have received a copy of the GNU General Public License 21 ;; along with this program. If not, see <https://www.gnu.org/licenses/>. 28 (eval-and-compile (require 'eieio) 30 (require 'sxp (expand-file-name "sxp.el" (join-paths user-emacs-directory "lib/"))) 35 (defvar skel-debug nil) 36 (when skel-debug (require 'ede))) 38 (defvar skel-version "0.1.0") 41 "skel customization group." 44 (defcustom skel-minor-mode-map-prefix "C-c C-." 45 "Prefix for `skel-minor-mode' keymap." 49 (defcustom skel-triggers nil 50 "Association of symbols to a specific condition which can be used 51 to trigger `skel-actions' based on the `skel-behavior' value." 52 :type '(list function) 55 (defcustom skel-actions nil 56 "Array of actions which may be performed on skeletons." 60 (defcustom skel-id-prefix "sk" 61 "Default prefix for `make-id'." 65 (defvar-keymap skel-minor-mode-map 66 :doc "skel-minor-mode keymap." 68 :prefix 'skel-minor-mode-map) 70 (define-minor-mode skel-minor-mode 75 :keymap skel-minor-mode-map 76 :version skel-version) 79 (define-derived-mode skel-mode lisp-mode "SKEL" 83 (org-babel-make-language-alias "skel" "lisp") 85 (defun maybe-skel-minor-mode () 86 "Check the current environment and determine if `skel-minor-mode' should 87 be enabled. This function is added as a hook to 88 `lisp-data-mode-hook'.") 90 (defvar skel-hashtable (make-hash-table :test #'equal) 91 "Internal table of available skeletons.") 93 (defvar skel-stack nil "Internal stack of skeletons.") 95 (defcustom skel-state 'passive 96 "State toggle for the `skel' system. Base states are passive and 101 (defvar skel-active-map nil 102 "List of cons cells of the form (SYM . BODY...) where SYM is a member of 105 (defvar skel-passive-map nil 106 "list of cons cells of the form (SYM . BODY...) where SYM is a member of 109 (defmacro make-id (&optional pre) 110 `(let ((pre ,(if-let (pre) (concat skel-id-prefix "-" pre "-") (concat skel-id-prefix "-"))) 111 (current-time-list nil)) 112 (symb pre (prog1 gensym-counter (setq gensym-counter (1+ gensym-counter))) (format "%x" (car (current-time)))))) 114 (defmacro defcmd (name &rest body) `(defun ,name nil (interactive) ,@body)) 117 ((id :initarg :id :initform (make-id))) 118 :documentation "Base class for skeleton objects. Inherits from `sxp'." 121 (defcmd sk-classes (eieio-class-children 'sk)) 123 (defmacro def-sk-class (name doc &optional slots superclasses) 124 "Define a new class with superclass of `skel'+SUPERCLASSES, SLOTS, 127 `(defclass ,(symb "sk-" name) 128 ,(if superclasses `(sk ,@superclasses) '(sk)) 131 (:id :initarg :id :initform (make-id ,(symbol-name name)) :accessor id)) 132 `((:id :initarg :id :initform (make-id ,(symbol-name name)) :accessor id))) 133 :documentation ,doc)) 135 (def-sk-class target "Target skeleton class.") 136 (def-sk-class source "Source skeleton class.") 138 "Config skeleton class." 139 ((target :initarg :target :initform nil :type (or null sk-target)) 140 (rules :initarg :source :initform nil :type (or null sk-source)))) 142 (def-sk-class project 143 "Project skeleton class." 144 ((type :initarg :type :initform nil :accessor sk-project-type :type (or null symbol)) 145 (rules :initarg :rules :initform nil :accessor sk-project-rules :type list))) 148 "Initialize the skel library." 150 (add-to-list 'auto-mode-alist '("skelfile" . skel-mode)) 151 (add-to-list 'auto-mode-alist '("\\.sk\\'" . skel-mode)))