aboutsummaryrefslogtreecommitdiff
path: root/build-app.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'build-app.lisp')
-rw-r--r--build-app.lisp62
1 files changed, 34 insertions, 28 deletions
diff --git a/build-app.lisp b/build-app.lisp
index 3511a8c..a3ef6fc 100644
--- a/build-app.lisp
+++ b/build-app.lisp
@@ -62,8 +62,6 @@ you run the oneliner, all positional variables appear first.
;;; CLON SYNOPSIS DEFINITION
(defsynopsis (:postfix "[ARGUMENTS ...]")
-
-
(group (:header "SEARCH OPTIONS")
(text :contents "By default, ARGUMENTS are interpeted as search terms for oneliners. For example:")
(text :contents "$ ol grep awk # search for oneliners involving both grep and awk")
@@ -82,15 +80,11 @@ you run the oneliner, all positional variables appear first.
(flag :long-name "newest"
:description "Return newest oneliners."))
(text :contents " ")
-
-
(group (:header "EXECUTION OPTIONS")
(text :contents "Several options override the default interpretation of ARGUMENTS.")
(text :contents "Execution options interpret the first argument as the identifier of a oneliner: ")
(text :contents "$ ol <EXECUTION OPTION> <NAME or ID> [MORE ARGUMENTS...]")
(text :contents " ")
-
-
(flag :long-name "run"
:description "Executes a oneliner by NAME or ID. See also help topic 'variables'.")
(flag :long-name "clip"
@@ -111,11 +105,9 @@ you run the oneliner, all positional variables appear first.
:description "View information about a contributor. The first argument is a contributor handle.")
(flag :long-name "help"
:description "Print help for a topic. Topics: wiki, account, invites, variables"))
-
(group (:header "Advanced Options" :hidden t)
(flag :long-name "clear-cache"
:description "Clears all cached search results from your system."))
-
(group (:header "Variables" :hidden t)
(text :contents +oneliners-variables-help-text+))
(group (:header "Wiki" :hidden t)
@@ -166,6 +158,14 @@ than the users."
;;; MAIN ENTRY POINT
+(defun prepare-oneliner-arguments (arguments)
+ "Takes a list of arguments, as gathered by (REMAINDER), and returns
+ a list that looks like (ID-OR-NAME . ARGS) where ID-OR-NAME is
+ either an integer or a string."
+ (a:if-let (id (parse-integer (first arguments) :junk-allowed t))
+ (cons id (rest arguments))
+ arguments))
+
(defun main ()
"Entry point for our standalone application."
(make-context)
@@ -176,18 +176,21 @@ than the users."
(let ((arguments (remainder)))
(cond
((getopt :long-name "whois")
- (assert (first arguments))
+ (assert (first arguments) () "--whois requires an argument, a user handle.")
(cli::show-contributor (first arguments)))
((getopt :long-name "redeem")
+ (assert (= 3 (length arguments)) () "--redeem requires exatly three arguments.")
(destructuring-bind (token name pass) arguments
(cli::redeem-invite token name pass)))
((getopt :long-name "login")
+ (assert (= 2 (length arguments)) () "--login requires exactly two arguments.")
(destructuring-bind (user pass) arguments
(cli::login user pass)))
((getopt :long-name "change-password")
+ (assert (= 3 (length arguments)) () "--change-password requires exactly three arguments." )
(destructuring-bind (current new repeated) arguments
(cli::change-pw current new repeated)))
@@ -204,40 +207,43 @@ than the users."
(cli::add-new-oneliner))
((getopt :long-name "all-flagged")
+ (format t "WARNING: --all-flagged is likely to soon change its behavior~%.")
(cli::all-flagged-oneliners (getopt :long-name "limit")))
((getopt :long-name "newest")
+ (format t "WARNING: --newest is likely to soon change its behavior~%")
(cli::newest-oneliners (getopt :long-name "limit")))
((getopt :long-name "clear-cache")
(cli::wipe-cache))
(arguments
- ;; when the first argument is a number, try run a oneliner
- (a:when-let (hist-number (parse-integer (first arguments) :junk-allowed t))
+ (destructuring-bind (id-or-name . args) (prepare-oneliner-arguments arguments)
(cond
((getopt :long-name "flag")
- (cli::flag-item hist-number (getopt :long-name "id")))
+ (cli::flag-item id-or-name ))
((getopt :long-name "unflag")
- (cli::unflag-item hist-number (getopt :long-name "id")))
+ (cli::unflag-item id-or-name))
((getopt :long-name "lock")
- (cli::lock-item hist-number (getopt :long-name "id")))
+ (cli::lock-item id-or-name ))
((getopt :long-name "unlock")
- (cli::unlock-item hist-number (getopt :long-name "id")))
+ (cli::unlock-item id-or-name ))
((getopt :long-name "edit")
- (cli::edit-item hist-number (getopt :long-name "id")))
- ((getopt :long-name "explain")
- (cli::print-item-explanation hist-number (getopt :long-name "id")))
- (t
- (cli::run-item hist-number (rest arguments)
- :by-id (getopt :long-name "id")
- :force-clip (getopt :long-name "clip")
- :timeout (getopt :long-name "timeout"))))
- (uiop:quit))
- ;; otherwise search for oneliners
- (cli::search-for-oneliners arguments
- (getopt :long-name "limit")
- (getopt :long-name "not-flagged")))
+ (cli::edit-item id-or-name ))
+ ((getopt :long-name "info")
+ (cli::print-item-explanation id-or-name))
+ ((getopt :long-name "clip")
+ (cli::run-item id-or-name (rest arguments)
+ :force-clip t
+ :timeout (getopt :long-name "timeout")))
+ ((getopt :long-name "run")
+ (cli::run-item id-or-name (rest arguments)
+ :timeout (getopt :long-name "timeout")))
+ (t
+ (cli::search-for-oneliners arguments
+ (getopt :long-name "limit")
+ (getopt :long-name "not-flagged")))))
+ (uiop:quit))
(t
(help)))
(uiop:quit))