changelog shortlog graph tags branches files raw help

Mercurial > core / changeset: work on sk.el

changeset 405: 1816f9c53453
parent 404: 66059a1117bd
child 406: 71baf0d4768d
author: Richard Westhaver <ellis@rwest.io>
date: Tue, 04 Jun 2024 18:53:40 -0400
files: emacs/lib/sk.el lisp/lib/cli/prompt.lisp lisp/lib/cli/repl/top-level.lisp lisp/lib/cli/tests.lisp lisp/lib/net/srv.lisp readme.org rust/bin/alik/graphql.rs
description: work on sk.el
     1.1--- a/emacs/lib/sk.el	Mon Jun 03 22:08:03 2024 -0400
     1.2+++ b/emacs/lib/sk.el	Tue Jun 04 18:53:40 2024 -0400
     1.3@@ -1,6 +1,6 @@
     1.4 ;;; sk.el --- skel Emacs Mode -*- lexical-binding: t; -*-
     1.5 
     1.6-;; skel-mode, skt-mode, sk-classes
     1.7+;; skel-mode, skel-minor-mode,skt-minor-mode, sk-classes
     1.8 
     1.9 ;; Copyright (C) 2023  The Compiler Company
    1.10 
    1.11@@ -29,6 +29,7 @@
    1.12 		  (require 'sxp (expand-file-name "sxp.el" (join-paths user-emacs-directory "lib/")))
    1.13                   (require 'skeleton)
    1.14                   (require 'tempo)
    1.15+                  (require 'autoinsert)
    1.16 		  (defvar skel-debug nil)
    1.17 		  (when skel-debug (require 'ede)))
    1.18 
    1.19@@ -38,8 +39,8 @@
    1.20   "skel customization group."
    1.21   :group 'local)
    1.22 
    1.23-(defcustom skel-keymap-prefix "C-c C-."
    1.24-  "Prefix for `skel-mode' keymap."
    1.25+(defcustom skel-minor-mode-map-prefix "C-c C-."
    1.26+  "Prefix for `skel-minor-mode' keymap."
    1.27   :type 'string
    1.28   :group 'skel)
    1.29 
    1.30@@ -59,16 +60,24 @@
    1.31   :type 'string
    1.32   :group 'skel)
    1.33 
    1.34+(defvar-keymap skel-minor-mode-map
    1.35+  :doc "skel-minor-mode keymap."
    1.36+  :repeat (:enter)
    1.37+  :prefix 'skel-minor-mode-map)
    1.38+
    1.39 (define-minor-mode skel-minor-mode
    1.40-  "skel-minor-mode."
    1.41+  "skel-minor-mode"
    1.42   :global t
    1.43-  :lighter " sk"
    1.44+  :lighter " Sk"
    1.45   :group 'skel
    1.46-  :version skel-version)
    1.47+  :keymap skel-minor-mode-map
    1.48+  :version skel-version
    1.49+  (keymap-local-set skel-minor-mode-map-prefix skt-minor-mode-map))
    1.50 
    1.51 ;; TODO 2023-09-06: 
    1.52 (define-derived-mode skel-mode lisp-mode "SKEL"
    1.53-  "skel-mode")
    1.54+  :group 'skel
    1.55+  (skel-minor-mode 1))
    1.56 
    1.57 (defun maybe-skel-minor-mode ()
    1.58   "Check the current environment and determine if `skel-minor-mode' should
    1.59@@ -190,7 +199,7 @@
    1.60           (when (markerp (cadr markers)) (set-marker (cadr markers) nil))
    1.61           (setcdr markers (cddr markers)))))))
    1.62 
    1.63-(defun skt--add-tag (tag template &optional tag-list)
    1.64+(defun skt-add-tag (tag template &optional tag-list)
    1.65   "Add a TEMPLATE TAG to TAG-LIST or to `tempo-tags'.
    1.66 It is an :override function for `tempo-add-tag'.  The original
    1.67 function does not update identical tags."
    1.68@@ -213,24 +222,29 @@
    1.69     (nreverse modes)))
    1.70 
    1.71 ;;; Commands
    1.72+(defvar-keymap skt-minor-mode-map
    1.73+  :doc "skt-minor-mode keymap."
    1.74+  :repeat (:enter)
    1.75+  :prefix 'skt-minor-mode-map
    1.76+  "a" #'edit-abbrevs)
    1.77 
    1.78-(defvar-keymap skt-mode-map
    1.79-  :doc "skt-mode keymap."
    1.80-  :repeat (:enter))
    1.81-
    1.82-(define-minor-mode skt-mode
    1.83+(define-minor-mode skt-minor-mode
    1.84   "Minor mode for skt-templates."
    1.85   :init-value nil
    1.86   :lighter " Skt"
    1.87-  :keymap skt-mode-map
    1.88+  :keymap skt-minor-mode-map
    1.89   (let* ((modes (skt--list-derived-modes major-mode))
    1.90          (tag-vars (mapcar #'skt--tags-variable modes))
    1.91          (bound-tag-vars (cl-delete-if-not #'boundp tag-vars)))
    1.92-    (if skt-mode
    1.93+    (if skt-minor-mode
    1.94         (mapc #'tempo-use-tag-list bound-tag-vars)
    1.95       (mapc #'skt--remove-tag-list bound-tag-vars))))
    1.96 
    1.97-(defun skt--define-tempo (function-symbol body &optional docstring)
    1.98+(defun skt-register-auto-insert (rx template)
    1.99+  "Associate a template with a file regexp and insert into `auto-insert-alist'."
   1.100+  (cl-pushnew (cons rx template) auto-insert-alist))
   1.101+
   1.102+(defun skt--define-template (function-symbol body &optional docstring)
   1.103   "Define a tempo template with BODY.
   1.104 This will generate a function with FUNCTION-SYMBOL and
   1.105 DOCSTRING.
   1.106@@ -303,7 +317,7 @@
   1.107         ((symbolp mode) (list mode))))
   1.108 
   1.109 ;;;###autoload
   1.110-(defun skt-define (define-function name modes tag abbrev docstring body)
   1.111+(defun skt--define (define-function name modes tag abbrev docstring body)
   1.112   "Define a skt template.
   1.113 
   1.114 DEFINE-FUNCTION is a function that takes a function symbol, BODY
   1.115@@ -331,7 +345,7 @@
   1.116 
   1.117     (when tag
   1.118       (let ((tag-symbol (gensym (symbol-name function-symbol))))
   1.119-        (if (eq #'skt--define-tempo define-function)
   1.120+        (if (eq #'skt--define-template define-function)
   1.121             (set tag-symbol body)
   1.122           (set tag-symbol `((ignore (,function-symbol)))))
   1.123         (dolist (mode modes)
   1.124@@ -342,9 +356,9 @@
   1.125         (dolist (buffer (buffer-list))
   1.126           (with-current-buffer buffer
   1.127             (when (and (or (equal '(nil) modes) (apply #'derived-mode-p modes))
   1.128-                       skt-mode)
   1.129-              (skt-mode -1)
   1.130-              (skt-mode 1))))))
   1.131+                       skt-minor-mode)
   1.132+              (skt-minor-mode -1)
   1.133+              (skt-minor-mode 1))))))
   1.134 
   1.135     (when abbrev
   1.136       (dolist (mode modes)
   1.137@@ -366,7 +380,7 @@
   1.138     function-symbol))
   1.139 
   1.140 ;;;###autoload
   1.141-(cl-defmacro skt-define-tempo (name (&key mode tag abbrev docstring) &rest body)
   1.142+(cl-defmacro skt-define-template (name (&key mode tag abbrev docstring) &body body)
   1.143   "Define a tempo template.
   1.144 This macro defines a new tempo template or updates the old one.
   1.145 NAME is a symbol.  ARGS is a list of the form ([KEY VALUE]...)
   1.146@@ -390,35 +404,35 @@
   1.147 list directly to `tempo-define-template's second argument.
   1.148 
   1.149 Example:
   1.150-\(skt-define-tempo defvar (:mode `emacs-lisp-mode' :tag t :abbrev t
   1.151+\(skt-define-template defvar (:mode emacs-lisp-mode :tag t :abbrev t
   1.152                              :docstring \"defvar template\")
   1.153   \"(defvar \" (string-trim-right (buffer-name) (rx \".el\" eos)) \"-\" p n>
   1.154   r> \")\")"
   1.155-  `(skt-define #'skt--define-tempo ,(symbol-name name)
   1.156-                  ',(skt--modes mode) ,tag ,abbrev ,docstring ',body))
   1.157+  `(skt--define 'skt--define-template ,(symbol-name name)
   1.158+               ',(skt--modes mode) ,tag ,abbrev ,docstring ',body))
   1.159 
   1.160 ;;;###autoload
   1.161 (cl-defmacro skt-define-skeleton (name (&key mode tag abbrev docstring) &rest body)
   1.162   "Define skeleton template.
   1.163-See `skt-define-tempo' for explanation of NAME, MODE, TAG,
   1.164+See `skt-define-template' for explanation of NAME, MODE, TAG,
   1.165 ABBREV and DOCSTRING.
   1.166 
   1.167 BODY is a sequence of skeleton elements that will be passed
   1.168 directly to `define-skeleton'.
   1.169 
   1.170 Example:
   1.171-\(skt-define-skeleton defun (:mode (emacs-lisp-mode `lisp-interaction-mode')
   1.172+\(skt-define-skeleton defun (:mode (emacs-lisp-mode lisp-interaction-mode)
   1.173                                :tag t :abbrev t
   1.174                                :docstring \"defun template\")
   1.175   \"(defun \" str \" (\" @ - \")\" \n
   1.176   @ _ \")\" \n)"
   1.177-  `(skt-define #'skt--define-skeleton ,(symbol-name name)
   1.178+  `(skt--define #'skt--define-skeleton ,(symbol-name name)
   1.179                   ',(skt--modes mode) ,tag ,abbrev ,docstring ',body))
   1.180 
   1.181 ;;;###autoload
   1.182 (cl-defmacro skt-define-function (name (&key mode tag abbrev docstring) function)
   1.183   "Define FUNCTION template.
   1.184-See `skt-define-tempo' for explanation of NAME, MODE, TAG,
   1.185+See `skt-define-template' for explanation of NAME, MODE, TAG,
   1.186 ABBREV and DOCSTRING.
   1.187 
   1.188 The main purpose of this macro, is to create tempo tags and
   1.189@@ -426,7 +440,7 @@
   1.190 
   1.191 Example:
   1.192 \(skt-define-function shcase (:tag t :abbrev t :mode `sh-mode') `sh-case')"
   1.193-  `(skt-define #'skt--define-function ,(symbol-name name)
   1.194+  `(skt--define #'skt--define-function ,(symbol-name name)
   1.195                   ',(skt--modes mode) ,tag ,abbrev ,docstring ',function))
   1.196 
   1.197 (defun skt--complete-template (string tag-list)
   1.198@@ -464,7 +478,7 @@
   1.199   "Override default `tempo-display-completions'.
   1.200 By default it uses a completion buffer to show completions.  This
   1.201 option overrides this function to use `completing-read' to select
   1.202-partial skempo tag or complete tag on region.
   1.203+partial skt tag or complete tag on region.
   1.204 
   1.205 If you wish to set this variable from ELisp code, you have to
   1.206 remove `skt--complete-template' advice from
   1.207@@ -478,7 +492,7 @@
   1.208          (set-default variable value))
   1.209   :group 'skel)
   1.210 
   1.211-(defcustom skempo-delete-duplicate-marks nil
   1.212+(defcustom skt-delete-duplicate-marks nil
   1.213   "Override default `tempo-insert-mark'.
   1.214 Marks are used to jump on points of interest in a template.  By
   1.215 default `tempo-insert-mark' does not remove duplicate marks.
   1.216@@ -500,7 +514,8 @@
   1.217   :group 'skel)
   1.218 
   1.219 (progn
   1.220-  (put 'skt-define-tempo 'lisp-indent-function 2)
   1.221+  (put 'tempo-define-template 'lisp-indent-function 1)
   1.222+  (put 'skt-define-template 'lisp-indent-function 2)
   1.223   (put 'skt-define-skeleton 'lisp-indent-function 2)
   1.224   (put 'skt-define-function 'lisp-indent-function 2))
   1.225 
     2.1--- a/lisp/lib/cli/prompt.lisp	Mon Jun 03 22:08:03 2024 -0400
     2.2+++ b/lisp/lib/cli/prompt.lisp	Tue Jun 04 18:53:40 2024 -0400
     2.3@@ -50,7 +50,7 @@
     2.4           (find res collection :test test)
     2.5           res))))
     2.6 
     2.7-(defmacro defprompt (var &key (prompt ">") collection default)
     2.8+(defmacro defprompt (var &key (prompt ">") collection default input output)
     2.9   "Generate a 'prompter' from list or variable VAR and optional
    2.10 PROMPT string.
    2.11 
    2.12@@ -69,4 +69,8 @@
    2.13           (format nil "~A [~A]: "
    2.14                   ,prompt
    2.15 		  (or ,default (car (symbol-value ,h))))
    2.16-	  ,collection :history ,h :default ,default)))))
    2.17+	  ,collection
    2.18+          :history ,h
    2.19+          :default ,default
    2.20+          ,@(when input (list :input input))
    2.21+          ,@(when output (list :output output)))))))
     3.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2+++ b/lisp/lib/cli/repl/top-level.lisp	Tue Jun 04 18:53:40 2024 -0400
     3.3@@ -0,0 +1,3 @@
     3.4+(in-package :cli/repl)
     3.5+
     3.6+
     4.1--- a/lisp/lib/cli/tests.lisp	Mon Jun 03 22:08:03 2024 -0400
     4.2+++ b/lisp/lib/cli/tests.lisp	Tue Jun 04 18:53:40 2024 -0400
     4.3@@ -1,7 +1,7 @@
     4.4 (defpackage :cli/tests
     4.5   (:use :cl :std :rt :cli :cli/shell :cli/progress :cli/spark :cli/repl :cli/ansi :cli/prompt))
     4.6-
     4.7 (in-package :cli/tests)
     4.8+(declaim (optimize (debug 3) (safety 3)))
     4.9 (defsuite :cli)
    4.10 (in-suite :cli)
    4.11 
    4.12@@ -197,7 +197,7 @@
    4.13 
    4.14 ;; TODO: needs to be compiled outside scope of test - contender for
    4.15 ;; fixture API
    4.16-(defprompt tpfoo "testing: ")
    4.17+(defprompt tpfoo :prompt "testing:")
    4.18 
    4.19 (deftest cli-prompt ()
    4.20   "Test CLI prompts"
     5.1--- a/lisp/lib/net/srv.lisp	Mon Jun 03 22:08:03 2024 -0400
     5.2+++ b/lisp/lib/net/srv.lisp	Tue Jun 04 18:53:40 2024 -0400
     5.3@@ -14,7 +14,7 @@
     5.4 #|
     5.5 (srv:start (srv:file-server)) ;; start a simple HTTP file server in current directory with all default values
     5.6 
     5.7-(srv:define-web-service my-homepage :port 8080 :auth (auth settings ...) :routes (routes ...) &more ...)
     5.8+(srv:define-service my-homepage :port 8080 :auth (auth settings ...) :routes (routes ...) &more ...)
     5.9 (with-ws (ws 'my-homepage)
    5.10   (srv:start ws))
    5.11 |#
    5.12@@ -26,3 +26,18 @@
    5.13 ;;; Code:
    5.14 (in-package :net/srv)
    5.15 
    5.16+(defmacro define-service (name &rest initargs)
    5.17+  "Define a subclass of NET/SRV:SERVICE."
    5.18+  `(defclass ,name ,@initargs))
    5.19+
    5.20+(defgeneric start-service (self)
    5.21+  (:documentation "Start a service."))
    5.22+
    5.23+(defgeneric stop-service (self)
    5.24+  (:documentation "Stop a service."))
    5.25+
    5.26+(defgeneric restart-service (self)
    5.27+  (:documentation "Restart a service.")
    5.28+  (:method ((self t))
    5.29+    (stop-service self)
    5.30+    (start-service self)))
     6.1--- a/readme.org	Mon Jun 03 22:08:03 2024 -0400
     6.2+++ b/readme.org	Tue Jun 04 18:53:40 2024 -0400
     6.3@@ -1,3 +1,4 @@
     6.4+
     6.5 #+title: core
     6.6 #+author: Richard Westhaver <ellis@rwest.io>
     6.7 #+description: The Compiler Company Core
     7.1--- a/rust/bin/alik/graphql.rs	Mon Jun 03 22:08:03 2024 -0400
     7.2+++ b/rust/bin/alik/graphql.rs	Tue Jun 04 18:53:40 2024 -0400
     7.3@@ -2,12 +2,13 @@
     7.4 
     7.5 //
     7.6 
     7.7+//! Code:
     7.8 use net::axum::{
     7.9   response::{self, IntoResponse},
    7.10   routing::get,
    7.11   Router,
    7.12 };
    7.13-/// Code:
    7.14+
    7.15 use net::http::graphql::http::GraphiQLSource;
    7.16 use tokio::net::TcpListener;
    7.17 // use net::http::graphql::http::{EmptyMutation, EmptySubscription, Schema};