changelog shortlog graph tags branches files raw help

Mercurial > core / changeset: opt fixes and test updates

changeset 643: f901de70a80e
parent 642: f58f3b88c49e
child 644: f59072409c7a
author: Richard Westhaver <ellis@rwest.io>
date: Tue, 10 Sep 2024 21:26:30 -0400
files: emacs/default.el lisp/lib/cli/clap/cli.lisp lisp/lib/cli/clap/cmd.lisp lisp/lib/cli/clap/macs.lisp lisp/lib/cli/clap/opt.lisp lisp/lib/cli/clap/pkg.lisp lisp/lib/cli/clap/util.lisp lisp/lib/cli/tests.lisp readme.org
description: opt fixes and test updates
     1.1--- a/emacs/default.el	Sun Sep 08 21:14:30 2024 -0400
     1.2+++ b/emacs/default.el	Tue Sep 10 21:26:30 2024 -0400
     1.3@@ -223,6 +223,21 @@
     1.4 (use-package company :ensure t)
     1.5 (use-package slime-repl-ansi-color :ensure t)
     1.6 
     1.7+(defvar slime-toggle nil)
     1.8+(defun slime-toggle ()
     1.9+  "toggle between lisp file and slime-repl"
    1.10+  (interactive)
    1.11+  (cond
    1.12+   ((eq major-mode 'slime-repl-mode)
    1.13+    (setq slime-toggle (pop-to-buffer (or slime-toggle (read-buffer "lisp buffer: ")))))
    1.14+   ((not (eq major-mode 'slime-repl-mode))
    1.15+    (if (slime-connected-p)
    1.16+        (progn
    1.17+          (setq slime-toggle (current-buffer))
    1.18+          (slime-switch-to-output-buffer))
    1.19+      (setq slime-toggle (current-buffer))
    1.20+      (slime)))))
    1.21+
    1.22 (use-package slime
    1.23   :ensure t
    1.24   :after (slime-cape slime-repl-ansi-color)
    1.25@@ -235,6 +250,7 @@
    1.26                          ;; slime-enclosing-context
    1.27                          ;; slime-media
    1.28                          ;; slime-mrepl
    1.29+                         slime-company
    1.30                          slime-sbcl-exts
    1.31                          slime-cape ;; ext
    1.32                          slime-repl-ansi-color
    1.33@@ -249,22 +265,8 @@
    1.34                          slime-asdf))
    1.35   (put 'make-instance 'common-lisp-indent-function 1)
    1.36   (put 'reinitialize-instance 'common-lisp-indent-function 1)
    1.37+  (slime-company-init)
    1.38   (slime-setup)
    1.39-  (defvar slime-toggle nil)
    1.40-  (defun slime-toggle ()
    1.41-    "toggle between lisp file and slime-repl"
    1.42-    (interactive)
    1.43-    (cond
    1.44-     ((eq major-mode 'slime-repl-mode)
    1.45-      (setq slime-toggle (pop-to-buffer (or slime-toggle (read-buffer "lisp buffer: ")))))
    1.46-     ((not (eq major-mode 'slime-repl-mode))
    1.47-      (if (slime-connected-p)
    1.48-          (progn
    1.49-            (setq slime-toggle (current-buffer))
    1.50-            (slime-switch-to-output-buffer))
    1.51-        (setq slime-toggle (current-buffer))
    1.52-        (slime)))))
    1.53-
    1.54   ;; X11-only (mcclim requires clx)
    1.55   (defun clouseau-inspect (string)
    1.56     "Inspect a lisp value with Clouseau. make sure to load clouseau
     2.1--- a/lisp/lib/cli/clap/cli.lisp	Sun Sep 08 21:14:30 2024 -0400
     2.2+++ b/lisp/lib/cli/clap/cli.lisp	Tue Sep 10 21:26:30 2024 -0400
     2.3@@ -53,11 +53,12 @@
     2.4            (t (make-cli :opt :name (format nil "~(~A~)" x) :global t))))
     2.5        opts))
     2.6 
     2.7-(defun make-cmds (cmds)
     2.8+(defun make-cmds (&rest cmds)
     2.9   "Make a vector of CLI-CMDs based on CMDS."
    2.10   (map 'vector
    2.11         (lambda (x)
    2.12           (etypecase x
    2.13+            (cli-cmd x)
    2.14             (string (make-cli :cmd :name x))
    2.15             (list (apply #'make-cli :cmd x))
    2.16             (t (make-cli :cmd :name (format nil "~(~A~)" x)))))
    2.17@@ -78,7 +79,7 @@
    2.18 (defmethod print-version ((self cli) &optional stream)
    2.19   (println (cli-version self) stream))
    2.20 
    2.21-(defmethod print-help ((self cli) &optional stream) 
    2.22+(defmethod print-help ((self cli) &optional (stream t)) 
    2.23   (println (format nil "~A v~A --- ~A~%" (cli-name self) (cli-version self) (cli-description self)) stream)
    2.24   (print-usage self stream)
    2.25   ;; (terpri stream)
    2.26@@ -86,12 +87,12 @@
    2.27   (with-slots (opts cmds) self
    2.28     (unless (null opts)
    2.29       (loop for o across opts
    2.30-            do (iprintln (print-usage o) 2 stream)))
    2.31+            do (iprintln (print-usage o nil) 2 stream)))
    2.32     (terpri stream)
    2.33     (println "commands:" stream)
    2.34     (unless (null cmds)
    2.35       (loop for c across cmds
    2.36-            do (iprintln (print-usage c) 2 stream)))))
    2.37+            do (iprintln (print-usage c nil) 2 stream)))))
    2.38 
    2.39 (defmethod cli-equal :before ((a cli) (b cli))
    2.40   "Return T if A is the same cli object as B.
     3.1--- a/lisp/lib/cli/clap/cmd.lisp	Sun Sep 08 21:14:30 2024 -0400
     3.2+++ b/lisp/lib/cli/clap/cmd.lisp	Tue Sep 10 21:26:30 2024 -0400
     3.3@@ -144,29 +144,48 @@
     3.4        for i below (length args)
     3.5        for (a . args) on args
     3.6        if (member i holes)
     3.7-       do (continue) ;; skip args which have been consumed already
     3.8-       else if (= (length a) 1)
     3.9-       collect (make-cli-node 'arg a) ; always treat single-char as arg
    3.10-       else if (short-opt-p a) ;; SHORT OPT
    3.11-       collect (if-let ((o (find-short-opts self (aref a 1) :recurse t)))
    3.12-                 (%compose-short-opt (car o) a)
    3.13-                 (make-cli-node 'arg a))
    3.14-       else if (long-opt-p a) ;; LONG OPT
    3.15-       collect (if-let ((o (find-opts self (string-left-trim "-" a) :recurse t)))
    3.16-                 (prog1 (%compose-long-opt (car o) args)
    3.17-                   (push (1+ i) holes))
    3.18-                 (make-cli-node 'arg a))
    3.19-       ;; OPT GROUP
    3.20-       else if (opt-group-p a)
    3.21-       collect nil
    3.22+         do (continue) ;; skip args which have been consumed already
    3.23+       else
    3.24+         if (= (length a) 1)
    3.25+           collect (make-cli-node 'arg a) ; always treat single-char as arg
    3.26+       else
    3.27+         if (short-opt-p a) ;; SHORT OPT
    3.28+           collect
    3.29+           (if-let ((o (find-short-opts self (aref a 1) :recurse t)))
    3.30+             (%compose-short-opt (car o) a)
    3.31+             (make-cli-node 'arg a))
    3.32+       else
    3.33+         if (long-opt-p a) ;; LONG OPT
    3.34+           collect
    3.35+           (let ((o (find-opts self (string-left-trim "-" a) :recurse t))
    3.36+                 (has-eq (long-opt-has-eq-p a)))
    3.37+             (cond
    3.38+               ((and has-eq o)
    3.39+                (setf (cli-opt-val o) (cdr has-eq))
    3.40+                (make-cli-node 'opt o))
    3.41+               ((and (not has-eq) o)
    3.42+                (prog1 (%compose-long-opt (car o) args)
    3.43+                  (push (1+ i) holes)))
    3.44+               ((and has-eq (not o))
    3.45+                (warn 'warning "opt not recognized" a)
    3.46+                (let ((val (cdr has-eq)))
    3.47+                  (make-cli-node 'opt (make-cli-opt :name (car has-eq) :kind (type-of val) :val val))))
    3.48+               (t ;; (not o) (not has-eq)
    3.49+                (warn 'warning "opt not recognized" a)
    3.50+                (make-cli-node 'arg a))))
    3.51+           ;; OPT GROUP
    3.52+       else 
    3.53+         if (opt-group-p a) 
    3.54+           collect nil
    3.55        ;; CMD
    3.56-       else
    3.57-       collect (let ((cmd (find-cmd self a)))
    3.58-                 (if cmd
    3.59-                     ;; TBD
    3.60-                     (make-cli-node 'cmd (find-cmd self a))
    3.61-                     ;; ARG
    3.62-                     (make-cli-node 'arg a)))))))
    3.63+       else 
    3.64+         collect
    3.65+         (let ((cmd (find-cmd self a)))
    3.66+           (if cmd
    3.67+               ;; TBD
    3.68+               (make-cli-node 'cmd (find-cmd self a))
    3.69+               ;; ARG
    3.70+               (make-cli-node 'arg a)))))))
    3.71 
    3.72 (defmethod install-ast ((self cli-cmd) (ast cli-ast))
    3.73   "Install the given AST, recursively filling in value slots."
     4.1--- a/lisp/lib/cli/clap/macs.lisp	Sun Sep 08 21:14:30 2024 -0400
     4.2+++ b/lisp/lib/cli/clap/macs.lisp	Tue Sep 10 21:26:30 2024 -0400
     4.3@@ -78,5 +78,7 @@
     4.4       `(defun ,fn-name (&optional arg)
     4.5          "Parse the cli-opt-val *ARG*."
     4.6          (declare (ignorable arg))
     4.7-         ,@(when fn1 `((setf *arg* (funcall #',fn1 arg))))
     4.8+         ,@(if fn1
     4.9+               `((setf *arg* (print (funcall #',fn1 arg))))
    4.10+               `((setf *arg* arg)))
    4.11          ,@body)))))
     5.1--- a/lisp/lib/cli/clap/opt.lisp	Sun Sep 08 21:14:30 2024 -0400
     5.2+++ b/lisp/lib/cli/clap/opt.lisp	Tue Sep 10 21:26:30 2024 -0400
     5.3@@ -35,7 +35,7 @@
     5.4 (defstruct cli-opt
     5.5   ;; note that cli-opts can have a nil or unbound name slot
     5.6   (name "" :type string)
     5.7-  (kind 'boolean :type symbol)
     5.8+  (kind 'boolean :type (or symbol list))
     5.9   (thunk nil :type (or null function symbol))
    5.10   (val nil)
    5.11   (global nil :type boolean)
     6.1--- a/lisp/lib/cli/clap/pkg.lisp	Sun Sep 08 21:14:30 2024 -0400
     6.2+++ b/lisp/lib/cli/clap/pkg.lisp	Tue Sep 10 21:26:30 2024 -0400
     6.3@@ -13,7 +13,8 @@
     6.4   (:use :cl :std :log :sb-ext :cli/clap/vars)
     6.5   (:export :args :arg0 :long-opt-p
     6.6    :short-opt-p :opt-group-p :opt-string-prefix-eq :cli-opt-kind-p
     6.7-   :default-thunk))
     6.8+   :default-thunk
     6.9+   :long-opt-has-eq-p))
    6.10 
    6.11 (defpackage :cli/clap/macs
    6.12   (:use :cl :std :log :sb-ext :cli/clap/util :cli/clap/vars)
     7.1--- a/lisp/lib/cli/clap/util.lisp	Sun Sep 08 21:14:30 2024 -0400
     7.2+++ b/lisp/lib/cli/clap/util.lisp	Tue Sep 10 21:26:30 2024 -0400
     7.3@@ -8,11 +8,22 @@
     7.4 (defun arg0 () (car sb-ext:*posix-argv*))
     7.5 (defun args () (cdr sb-ext:*posix-argv*))
     7.6 
     7.7+(declaim (inline long-opt-p long-opt-has-eq-p
     7.8+                 short-opt-p opt-group-p
     7.9+                 opt-string-prefix-eq))
    7.10+
    7.11 (defun long-opt-p (str)
    7.12   (declare (simple-string str))
    7.13   (and (char= (aref str 0) (aref str 1) #\-)
    7.14        (> (length str) 2)))
    7.15 
    7.16+(defun long-opt-has-eq-p (str)
    7.17+  "Return non-nil if STR is a long-opt which has an '=' somewhere,
    7.18+indicating a key/val pair without whitespace."
    7.19+  (declare (simple-string str))
    7.20+  (when-let ((pos (position #\= str :test 'char=)))
    7.21+    (cons (subseq str 2 pos) (subseq str (1+ pos)))))
    7.22+  
    7.23 (defun short-opt-p (str)
    7.24   (declare (simple-string str))
    7.25   (and (char= (aref str 0) #\-)
     8.1--- a/lisp/lib/cli/tests.lisp	Sun Sep 08 21:14:30 2024 -0400
     8.2+++ b/lisp/lib/cli/tests.lisp	Tue Sep 10 21:26:30 2024 -0400
     8.3@@ -4,7 +4,7 @@
     8.4 
     8.5 ;;; Code:
     8.6 (defpackage :cli/tests
     8.7-  (:use :cl :std :rt :cli :cli/shell :cli/progress :cli/spark :cli/repl :cli/ansi :cli/prompt :cli/clap :cli/tools/sbcl))
     8.8+  (:use :cl :std :rt :cli :cli/shell :cli/progress :cli/spark :cli/repl :cli/ansi :cli/prompt :cli/clap :cli/tools/sbcl :dat/sxp))
     8.9 
    8.10 (in-package :cli/tests)
    8.11 (declaim (optimize (debug 3) (safety 3)))
    8.12@@ -60,7 +60,7 @@
    8.13            (princ "X"))
    8.14   (.sgr 0)
    8.15   (force-output)
    8.16-  (sleep 3)
    8.17+  ;; (sleep 3)
    8.18   (.ris)
    8.19   (force-output))
    8.20 
    8.21@@ -68,34 +68,36 @@
    8.22   "Hide and show the cursor."
    8.23   (princ "Cursor visible:")
    8.24   (force-output)
    8.25-  (sleep 2)
    8.26+  ;; (sleep 2)
    8.27   (terpri)
    8.28   (princ "Cursor invisible:")
    8.29   (hide-cursor)
    8.30   (force-output)
    8.31-  (sleep 2)
    8.32+  ;; (sleep 2)
    8.33   (terpri)
    8.34   (princ "Cursor visible:")
    8.35   (show-cursor)
    8.36   (force-output)
    8.37-  (sleep 2))
    8.38+  ;; (sleep 2)
    8.39+  )
    8.40 
    8.41 (defun ansi-t05 ()
    8.42   "Switch to and back from the alternate screen buffer."
    8.43   (princ "Normal screen buffer. ")
    8.44   (force-output)
    8.45-  (sleep 2)
    8.46+  ;; (sleep 2)
    8.47   (save-cursor-position)
    8.48   (use-alternate-screen-buffer)
    8.49   (clear)
    8.50   (princ "Alternate screen buffer.")
    8.51   (force-output)
    8.52-  (sleep 2)
    8.53+  ;; (sleep 2)
    8.54   (use-normal-screen-buffer)
    8.55   (restore-cursor-position)
    8.56   (princ "Back to Normal screen buffer.")
    8.57   (force-output)
    8.58-  (sleep 1))
    8.59+  ;; (sleep 1)
    8.60+  )
    8.61 
    8.62 (defun ansi-t06 ()
    8.63   "Set individual termios flags to enable raw and disable echo mode.
    8.64@@ -205,7 +207,7 @@
    8.65 ;; fixture API
    8.66 (defprompt tpfoo :prompt "testing:")
    8.67 
    8.68-(deftest cli-prompt ()
    8.69+(deftest cli-prompt (:skip t)
    8.70   "Test CLI prompts"
    8.71   (defvar tcoll nil)
    8.72   (defvar thist nil)
    8.73@@ -220,8 +222,8 @@
    8.74 		       (:name "bar" :description "foo")))
    8.75 
    8.76 (defparameter *cmd1* (make-cli :cmd :name "holla" :opts *opts* :description "cmd1 description"))
    8.77-(defparameter *cmd2* (make-cli :cmd :name "ayo" :cmds #(*cmd1*) :opts *opts* :description "cmd1 description"))
    8.78-(defparameter *cmds* (make-cmds '(:name "baz" :description "baz" :opts *opts*)))
    8.79+(defparameter *cmd2* (make-cli :cmd :name "ayo" :cmds (vector *cmd1*) :opts *opts* :description "cmd1 description"))
    8.80+(defparameter *cmds* (make-cmds `(:name "baz" :description "baz" :opts ,*opts*) *cmd1* *cmd2*))
    8.81 
    8.82 (defparameter *cli* (make-cli :cli :opts *opts* :cmds *cmds* :description "test cli"))
    8.83 
    8.84@@ -230,7 +232,7 @@
    8.85   "test basic CLAP functionality."
    8.86   (let ((cli *cli*))
    8.87     (is (eq (make-shorty "test") #\t))
    8.88-    (is (equalp (proc-args cli '("-f" "baz" "--bar" "fax")) ;; not eql
    8.89+    (is (equalp (proc-args cli '("-f" "baz" "--bar=fax")) ;; not eql
    8.90 		(make-cli-ast 
    8.91 		 (list (make-cli-node 'opt (find-short-opts cli #\f))
    8.92 		       (make-cli-node 'cmd (find-cmd cli "baz"))
    8.93@@ -242,7 +244,7 @@
    8.94 	   (print-version cli s)
    8.95 	   (print-usage cli s)
    8.96 	   (print-help cli s))))
    8.97-    (is (string= "foobar" (cli/clap::parse-string-opt "foobar")))))
    8.98+    (is (string= "foobar" (cli/clap:parse-string-opt "foobar")))))
    8.99 
   8.100 (make-opt-parser thing *arg*)
   8.101 
   8.102@@ -676,10 +678,14 @@
   8.103 
   8.104 (deftest cli-ast ()
   8.105   "Validate the CLI/CLAP/AST parser."
   8.106-  (with-cli () *cli*))
   8.107+  (with-cli () *cli*
   8.108+    (is (string= (cli-opt-name (cli-node-form (car (ast (proc-args *cli* '("--foo" "1"))))))
   8.109+                 "foo"))
   8.110+    (is (string=
   8.111+         (cli-opt-name (cli-node-form (car (ast (proc-args *cli* '("--foo=11"))))))
   8.112+         "foo"))))
   8.113 
   8.114 (defmain (:exit nil :export nil)
   8.115-  (proc-args *cli* '("--foo 1"))
   8.116   (with-cli () *cli*
   8.117     (log:trace! "defmain is OK")
   8.118     t))
     9.1--- a/readme.org	Sun Sep 08 21:14:30 2024 -0400
     9.2+++ b/readme.org	Tue Sep 10 21:26:30 2024 -0400
     9.3@@ -6,9 +6,20 @@
     9.4 #+property: header-args :eval no-export
     9.5 - [[https://compiler.company/docs/core][Documentation]]
     9.6 
     9.7-* Overview
     9.8 This repository contains the monolothic core of [[comp:][The Compiler Company]].
     9.9 
    9.10+* Overview
    9.11+The CC core is categorized into language-specific modules. Our
    9.12+languages at time of writing are Common Lisp, Rust, and Emacs Lisp.
    9.13+
    9.14+The top-level modules are contained in the directories =lisp=, =rust=,
    9.15+and =emacs= respectively. At the root directory you will also find a
    9.16+=skelfile= and a =sk= file for each module. These files contain
    9.17+project definitions which are used by our =skel= program to perform a
    9.18+variety of actions on the core such as running tests and building
    9.19+binaries.
    9.20+
    9.21+* Bootstrap
    9.22 To bootstrap the core you will need recent versions of [[https://www.rust-lang.org/][Rust]], [[http://www.sbcl.org/][SBCL]], and
    9.23 a C compiler (clang or gcc). Only Unix systems are explicitly
    9.24 supported.
    9.25@@ -176,243 +187,3 @@
    9.26 The core contains a collection of Emacs Lisp libraries under =emacs=
    9.27 which may be installed for the current user using the corresponding
    9.28 Makefile.
    9.29-
    9.30-** TODO Bootstrap from packy                                   :experimental:
    9.31-The following can (maybe someday) be used to bootstrap the core without a full
    9.32-lisp compiler.
    9.33-#+begin_src shell :results output
    9.34-  curl --proto '=https' \
    9.35-       --tlsv1.3 \
    9.36-       -sSf \
    9.37-       https://packy.compiler.company/dist/x86_64-unknown-linux-gnu/bin/sk \
    9.38-       --output /tmp/sk
    9.39-  chmod +x /tmp/sk
    9.40-  /tmp/sk make skel
    9.41-#+end_src
    9.42-
    9.43-#+RESULTS:
    9.44-#+begin_example
    9.45-This is SBCL 2.4.5, an implementation of ANSI Common Lisp.
    9.46-More information about SBCL is available at <http://www.sbcl.org/>.
    9.47-
    9.48-SBCL is free software, provided as is, with absolutely no warranty.
    9.49-It is mostly in the public domain; some portions are provided under
    9.50-BSD-style licenses.  See the CREDITS and COPYING files in the
    9.51-distribution for more information.
    9.52-To load "rt":
    9.53-  Load 1 ASDF system:
    9.54-    rt
    9.55-; Loading "rt"
    9.56-
    9.57-saving skel to: /home/ellis/comp/core/.stash/skel
    9.58-To load "bin/skel":
    9.59-  Load 1 ASDF system:
    9.60-    bin/skel
    9.61-; Loading "bin/skel"
    9.62-.........
    9.63-[undoing binding stack and other enclosing state... done]
    9.64-[performing final GC... done]
    9.65-[saving current Lisp image into /home/ellis/comp/core/.stash/skel:
    9.66-writing 15984 bytes from the static space at 0x50100000
    9.67-writing 339476480 bytes from the dynamic space at 0x1000000000
    9.68-writing 12498752 bytes from the read-only space at 0x74232dc00000
    9.69-writing 0 bytes from the text space at (nil)
    9.70-done]
    9.71-#+end_example
    9.72-
    9.73-* Programs
    9.74-This section lists all program binaries provided by the core.
    9.75-** skel                                                                :lisp:
    9.76-#+begin_src shell :results output :exports both
    9.77-  skel --help
    9.78-#+end_src
    9.79-
    9.80-#+RESULTS:
    9.81-#+begin_example
    9.82-skel v0.1.1:ce91ffc6cc7a+ --- A hacker's project compiler.
    9.83-
    9.84-  usage: skel [global] <command> [<arg>]
    9.85-
    9.86-options:
    9.87-  -h/--help* :  print this message
    9.88-  -v/--version* :  print version
    9.89-  -l/--level* :  set log level (warn,info,debug,trace)
    9.90-  -c/--config* :  set a custom skel user config
    9.91-  -i/--input* :  input source
    9.92-  -o/--output* :  output target
    9.93-
    9.94-commands:
    9.95-  init : initialize a skelfile in the current directory
    9.96-    -n/--name :  project name
    9.97-  new : make a new skel project
    9.98-    -n/--name :  project name
    9.99-  describe : describe a skelfile
   9.100-  show : show project slots
   9.101-    -f/--file :  path to skelfile
   9.102-    -u/--user :  print user configuration
   9.103-    -s/--system :  print system configuration
   9.104-  vc : version control
   9.105-    -r/--root :  repository path
   9.106-  id : print the project id
   9.107-  inspect : inspect the project skelfile
   9.108-    -f/--file :  path to skelfile
   9.109-  make : build project targets
   9.110-    -t/--target :  target to build
   9.111-  run : run a script or command
   9.112-  compile : compile source code
   9.113-  build : build programs and libraries
   9.114-  dist : distribute build artifacts
   9.115-  install : install stuff
   9.116-  pack : pack stuff
   9.117-  unpack : unpack stuff
   9.118-  bundle : bundle source code
   9.119-  unbundle : unbundle source code
   9.120-  clean : clean up the project
   9.121-  test : run tests
   9.122-  bench : run benchmark
   9.123-  status : print the vc status
   9.124-  push : push the current project upstream
   9.125-  pull : pull the current project from remote
   9.126-  clone : clone a remote project
   9.127-  commit : commit changes to the project vc
   9.128-  edit : edit a project file in emacs.
   9.129-  shell : open the sk-shell interpreter
   9.130-
   9.131-#+end_example
   9.132-** organ                                                               :lisp:
   9.133-#+begin_src shell :results output :exports both
   9.134-organ --help
   9.135-#+end_src
   9.136-
   9.137-#+RESULTS:
   9.138-#+begin_example
   9.139-organ v0.0.1 --- org-mode toolbox
   9.140-
   9.141-  usage: organ [global] <command> [<arg>]
   9.142-
   9.143-options:
   9.144-  -l/--level* :  set the log level
   9.145-  -h/--help* :  print help
   9.146-  -v/--version* :  print version
   9.147-
   9.148-commands:
   9.149-  inspect : inspect an org file
   9.150-  show : display local org info
   9.151-  describe : describe local org info
   9.152-  parse 
   9.153-#+end_example
   9.154-
   9.155-** packy                                                               :lisp:
   9.156-#+begin_src shell :results output :exports both
   9.157-packy --help
   9.158-#+end_src
   9.159-
   9.160-#+RESULTS:
   9.161-#+begin_example
   9.162-packy v0.1.0 --- Universal Package Manager
   9.163-
   9.164-  usage: packy [global] <command> [<arg>]
   9.165-
   9.166-options:
   9.167-  -l/--level* :  set the log level
   9.168-  -h/--help* :  print help
   9.169-  -v/--version* :  print version
   9.170-
   9.171-commands:
   9.172-  show 
   9.173-    -n/--name* 
   9.174-    -t/--target 
   9.175-    -t/--thunk* 
   9.176-    -p/--pk-target* 
   9.177-#+end_example
   9.178-
   9.179-** rdb                                                                 :lisp:
   9.180-#+begin_src shell :results output :exports both
   9.181-rdb --help
   9.182-#+end_src
   9.183-
   9.184-#+RESULTS:
   9.185-
   9.186-** homer                                                               :lisp:
   9.187-#+begin_src shell :results output :exports both
   9.188-homer --help
   9.189-#+end_src
   9.190-
   9.191-#+RESULTS:
   9.192-#+begin_example
   9.193-homer v0.1.0 --- user home manager
   9.194-
   9.195-  usage: homer [global] <command> [<arg>]
   9.196-
   9.197-options:
   9.198-  -l/--level* :  set the log level
   9.199-  -h/--help* :  print help
   9.200-  -v/--version* :  print version
   9.201-  -f/--force* :  use force
   9.202-
   9.203-commands:
   9.204-  show 
   9.205-  check 
   9.206-  push 
   9.207-  pull 
   9.208-  install 
   9.209-#+end_example
   9.210-
   9.211-** COMMENT alik                                                        :rust:
   9.212-#+begin_src shell :results output :exports both
   9.213-alik --help
   9.214-#+end_src
   9.215-
   9.216-#+RESULTS:
   9.217-
   9.218-** COMMENT krypt                                                       :lisp:
   9.219-#+begin_src shell :results output :exports both
   9.220-krypt --help
   9.221-#+end_src
   9.222-
   9.223-#+RESULTS:
   9.224-#+begin_example
   9.225-Krypt CLI
   9.226-
   9.227-Usage: krypt [OPTIONS] [COMMAND]
   9.228-
   9.229-Commands:
   9.230-  check   check service providers and config
   9.231-  show    Show Krypt info
   9.232-  search  Query the Krypt
   9.233-  help    Print this message or the help of the given subcommand(s)
   9.234-
   9.235-Options:
   9.236-  -c, --cfg <CFG>    Set the default config file [env: KRYPT_CONFIG_FILE=]
   9.237-  -u, --user <USER>  Set a user for this command [env: USER=ellis]
   9.238-  -l, --level...     Set log level
   9.239-  -h, --help         Print help
   9.240-  -V, --version      Print version
   9.241-#+end_example
   9.242-
   9.243-** mailman                                                             :rust:
   9.244-#+begin_src shell :results output :exports both
   9.245-mailman --help
   9.246-#+end_src
   9.247-
   9.248-#+RESULTS:
   9.249-#+begin_example
   9.250-Mail client util
   9.251-
   9.252-Usage: mailman [OPTIONS] [COMMAND]
   9.253-
   9.254-Commands:
   9.255-  ping    Ping the server
   9.256-  search  Search for items
   9.257-  import  Import an account
   9.258-  export  Export an account
   9.259-  help    Print this message or the help of the given subcommand(s)
   9.260-
   9.261-Options:
   9.262-  -c, --cfg <CFG>    Set the default config file [env: MAILMAN_CONFIG_FILE=]
   9.263-  -u, --user <USER>  Set a user for this command [env: USER=ellis]
   9.264-  -l, --level...     Set log level
   9.265-  -h, --help         Print help
   9.266-  -V, --version      Print version
   9.267-#+end_example
   9.268-