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-