11bce44c17e9
More
author | Steve Losh <steve@stevelosh.com> |
---|---|
date | Fri, 21 Dec 2018 15:24:34 -0500 |
parents | e3f5572c7738 |
children | f84403802761 |
branches/tags | (none) |
files | lisp/_skeleton.lisp lisp/example.lisp vim/custom-dictionary.utf-8.add |
Changes
--- a/lisp/_skeleton.lisp Thu Dec 20 23:55:17 2018 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -(ql:quickload '(:adopt)) - -;;;; Config ------------------------------------------------------------------- -(defparameter *default-name* "World") - - -;;;; Functionality ------------------------------------------------------------ -(defun run (name) - (format t "Hello, ~A~%" name)) - - -;;;; CLI ---------------------------------------------------------------------- -(adopt:define-interface *ui* "NAME" - "Say Hello." - ((help) "display help and exit" - :long "help" - :short #\h - :reduce (constantly t)) - ((name) (format nil "say hello to NAME (default ~A)" *default-name*) - :long "name" - :short #\n - :parameter "NAME" - :initial-value *default-name* - :reduce #'adopt:newest)) - -(defun toplevel () - (multiple-value-bind (arguments options) (adopt:parse-options *ui*) - (when (gethash 'help options) - (adopt:print-usage *ui*) - (adopt:exit 0)) - (unless (null arguments) - (cerror "Ignore them" "Unrecognized command-line arguments: ~S" arguments)) - (run (gethash 'name options))))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/example.lisp Fri Dec 21 15:24:34 2018 -0500 @@ -0,0 +1,41 @@ +(ql:quickload '(:adopt)) + +;;;; Config ------------------------------------------------------------------- +(defparameter *default-name* "World") + + +;;;; Functionality ------------------------------------------------------------ +(defun run (name) + (format t "Hello, ~A~%" name)) + + +;;;; CLI ---------------------------------------------------------------------- +(adopt:define-interface *ui* + (:name "example" + :usage "[-n NAME]" + :summary "Say Hello." + :documentation "An example program to show how to make well-behaved CLI tools in Common Lisp." + :examples '(("Say hello:" . "example") + ("Say hello to Alice:" . "example --name Alice"))) + (help + :documentation "display help and exit" + :long "help" + :short #\h + :reduce (constantly t)) + (name + :documentation (format nil "say hello to NAME (default ~A)" *default-name*) + :long "name" + :short #\n + :parameter "NAME" + :initial-value *default-name* + :reduce #'adopt:newest)) + +(defun toplevel () + (handler-case + (multiple-value-bind (arguments options) (adopt:parse-options *ui*) + (when (gethash 'help options) + (adopt:print-usage-and-exit *ui*)) + (unless (null arguments) + (error "Unrecognized command-line arguments: ~S" arguments)) + (run (gethash 'name options))) + (error (c) (adopt:print-error-and-exit c))))