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};