changeset 698: | 96958d3eb5b0 |
parent: | 65102f74d1ae |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: | -rw-r--r-- |
description: | fixes |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
1 | ;;; cli/clap/macs.lisp --- Clap Macros |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
2 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
3 | ;; |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
4 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
5 | ;;; Code: |
426
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
6 | (in-package :cli/clap/macs) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
7 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
8 | (defmacro argp (arg &optional (args (args))) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
9 | "Test for presence of ARG in ARGS. Return the tail of |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
10 | ARGS starting from the position of ARG." |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
11 | `(member ,arg ,args :test 'equal)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
12 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
13 | (defmacro make-shorty (name) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
14 | "Return the first char of symbol or string NAME." |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
15 | `(character (aref (if (stringp ,name) ,name (symbol-name ,name)) 0))) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
16 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
17 | (defmacro with-cli-handlers (&body body) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
18 | "A wrapper which handles common cli errors that may occur during |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
19 | evaluation of BODY." |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
20 | `(progn |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
21 | (if *no-exit* |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
22 | (sb-ext:enable-debugger) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
23 | (sb-ext:disable-debugger)) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
24 | (unwind-protect |
573
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
25 | (restart-case |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
26 | (progn ,@body) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
27 | (sb-sys:interactive-interrupt () |
479 | 28 | (println ":SIGINT") |
573
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
29 | (sb-ext:exit :code 130)) |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
30 | (abort () |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
31 | :report (lambda (s) |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
32 | (write-string |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
33 | "Skip to toplevel READ/EVAL/PRINT loop." |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
34 | s) |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
35 | (log:debug! "CONTINUEing from pre-REPL RESTART-CASE") |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
36 | (values))) |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
37 | (exit () |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
38 | :report "Exit SBCL (calling #'EXIT, killing the process)." |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
39 | ;; :test (lambda (c) (declare (ignore c)) t) |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
40 | (log:debug! "falling through to EXIT from pre-REPL RESTART-CASE") |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
41 | (exit :code 1)))) |
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
42 | (sb-impl::flush-standard-output-streams) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
43 | ;; reset terminal state |
573
f8b76ced5e2d
sk print init, reconcile doc:file-header and skel file headers
Richard Westhaver <ellis@rwest.io>
parents:
567
diff
changeset
|
44 | #+nil (.ris))) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
45 | |
479 | 46 | ;; TODO fix these macros |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
47 | (defmacro defcmd (name &body body) |
655
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
643
diff
changeset
|
48 | `(defun ,name (args opts) |
563 | 49 | (declare (ignorable args opts) |
565 | 50 | (sequence args opts)) |
655
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
643
diff
changeset
|
51 | (let ((*argc* (length args)) |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
643
diff
changeset
|
52 | (*optc* (length opts)) |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
643
diff
changeset
|
53 | (*args* args) |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
643
diff
changeset
|
54 | (*opts* opts)) |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
643
diff
changeset
|
55 | ,@body))) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
56 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
57 | (defmacro defopt (name &body body) |
561 | 58 | `(defun ,name (&optional arg) |
655
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
643
diff
changeset
|
59 | (let ((*arg* arg)) |
65102f74d1ae
some optimizations, may have muddied the waters with cli-opt a bit though.. tbd
Richard Westhaver <ellis@rwest.io>
parents:
643
diff
changeset
|
60 | ,@body))) |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
61 | |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
62 | ;; TODO 2023-10-06: |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
63 | ;; (defmacro gen-cli-thunk (pvars &rest thunk) |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
64 | ;; "Generate and return a function based on THUNK suitable for the :thunk |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
65 | ;; slot of cli objects with pandoric bindings PVARS.") |
426
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
66 | (eval-always |
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
67 | (defmacro make-opt-parser (kind-spec &body body) |
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
68 | "Return a KIND-opt-parser function based on KIND-SPEC which is either a |
419
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
69 | symbol from *cli-opt-kinds* or a list, and optional BODY which |
0f0e5f9b5c55
add emacs/babel.org, finished clap refactor phase 1, test system fixes and more top-level packages
Richard Westhaver <ellis@rwest.io>
parents:
404
diff
changeset
|
70 | is a list of handlers for the opt-val." |
426
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
71 | (let* ((kind (if (consp kind-spec) (car kind-spec) kind-spec)) |
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
72 | (super (when (consp kind-spec) (cadr kind-spec))) |
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
73 | (fn-name (symbolicate 'parse- kind '-opt))) |
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
74 | ;; thread em |
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
75 | (let ((fn1 (unless (null super) (symbolicate "PARSE-" super "-OPT")))) |
560
b9c64be96888
make cli/clap more dynamic
Richard Westhaver <ellis@rwest.io>
parents:
479
diff
changeset
|
76 | `(defun ,fn-name (&optional arg) |
b9c64be96888
make cli/clap more dynamic
Richard Westhaver <ellis@rwest.io>
parents:
479
diff
changeset
|
77 | "Parse the cli-opt-val *ARG*." |
b9c64be96888
make cli/clap more dynamic
Richard Westhaver <ellis@rwest.io>
parents:
479
diff
changeset
|
78 | (declare (ignorable arg)) |
643
f901de70a80e
opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents:
573
diff
changeset
|
79 | ,@(if fn1 |
f901de70a80e
opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents:
573
diff
changeset
|
80 | `((setf *arg* (print (funcall #',fn1 arg)))) |
f901de70a80e
opt fixes and test updates
Richard Westhaver <ellis@rwest.io>
parents:
573
diff
changeset
|
81 | `((setf *arg* arg))) |
426
3e721a3349a0
completed phase2 of clap migration
Richard Westhaver <ellis@rwest.io>
parents:
419
diff
changeset
|
82 | ,@body))))) |