core-cli: add doom-cli constructor

This commit is contained in:
Henrik Lissner 2019-11-09 02:23:58 -05:00
parent 135e7ffc89
commit cc1bbe0b7e
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -22,14 +22,28 @@ commands like `doom-cli-packages-install', `doom-cli-packages-update' and
(defvar doom--cli-groups (make-hash-table :test 'equal)) (defvar doom--cli-groups (make-hash-table :test 'equal))
(defvar doom--cli-group nil) (defvar doom--cli-group nil)
;; TODO Constructors for optlist, arglist and fn (cl-defstruct
(cl-defstruct doom-cli (doom-cli
(name) (:constructor nil)
(:constructor
make-doom-cli
(name &key desc aliases optlist arglist plist fn
&aux
(optlist
(cl-loop for (symbol options desc) in optlist
for ((_ . options) (_ . params))
= (seq-group-by #'stringp options)
collect
(make-doom-cli-option :symbol symbol
:flags options
:args params
:desc desc))))))
(name nil :read-only t)
(desc "TODO") (desc "TODO")
(aliases ()) aliases
(optlist ()) optlist
(arglist ()) arglist
(plist ()) plist
(fn (lambda (_) (print! "But nobody came!")))) (fn (lambda (_) (print! "But nobody came!"))))
(cl-defstruct doom-cli-option (cl-defstruct doom-cli-option
@ -165,19 +179,11 @@ BODY will be run when this dispatcher is called."
(setq plist (plist-put plist :group doom--cli-group))) (setq plist (plist-put plist :group doom--cli-group)))
(puthash (puthash
name name
(make-doom-cli :name (symbol-name name) (make-doom-cli (symbol-name name)
:desc ,docstring :desc ,docstring
:aliases (mapcar #'symbol-name aliases) :aliases (mapcar #'symbol-name aliases)
:arglist ',arglist :arglist ',arglist
:optlist :optlist ',optlist
(cl-loop for (symbol options desc) in ',optlist
for ((_ . options) (_ . params))
= (seq-group-by #'stringp options)
collect
(make-doom-cli-option :symbol symbol
:flags options
:args params
:desc desc))
:plist plist :plist plist
:fn :fn
(lambda (--alist--) (lambda (--alist--)