From: Mark Wooding Date: Tue, 3 Jul 2007 12:04:45 +0000 (+0100) Subject: optparse: Expose function for printing options. X-Git-Url: https://git.distorted.org.uk/~mdw/lisp/commitdiff_plain/7f853a8ae70d1f8c922db2840194aa0afbbe4f79 optparse: Expose function for printing options. Also don't fail if no help is defined, and make the test program output a little more useful. --- diff --git a/optparse-test b/optparse-test index 83662c2..4441483 100755 --- a/optparse-test +++ b/optparse-test @@ -48,7 +48,7 @@ (:arg "OBJECT") (read opt-object) (:doc (concatenate 'string - "Read object (" + "Read object (time = " (princ-to-string (get-universal-time)) ")"))) (#\k "keyword" (:arg "KEYWORD") (keyword opt-keyword) diff --git a/optparse.lisp b/optparse.lisp index 8a8fc43..37d27de 100644 --- a/optparse.lisp +++ b/optparse.lisp @@ -849,15 +849,9 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" (format stream "~{~A ~:_~}" (listify u))) (pprint-newline :mandatory stream)))) -(defun show-help (prog ver usage opts &optional (stream *standard-output*)) - "Basic help-showing function. PROG is the program name, probably from - *command-line-strings*. VER is the program's version number. USAGE is a - list of the possible usages of the program, each of which may be a list of - items to be supplied. OPTS is the list of supported options, as provided - to the options parser. STREAM is the stream to write on." - (format stream "~A, version ~A~2%" prog ver) - (show-usage prog usage stream) - (terpri stream) +(defun show-options-help (opts &optional (stream *standard-output*)) + "Write help for OPTS to the STREAM. This is the core of the `show-help' + function." (let (newlinep) (dolist (o opts) (let ((doc (opt-documentation o))) @@ -885,6 +879,17 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" (print-text doc stream)) (terpri stream))))))) +(defun show-help (prog ver usage opts &optional (stream *standard-output*)) + "Basic help-showing function. PROG is the program name, probably from + *command-line-strings*. VER is the program's version number. USAGE is a + list of the possible usages of the program, each of which may be a list of + items to be supplied. OPTS is the list of supported options, as provided + to the options parser. STREAM is the stream to write on." + (format stream "~A, version ~A~2%" prog ver) + (show-usage prog usage stream) + (terpri stream) + (show-options-help opts stream)) + (defun sanity-check-option-list (opts) "Check the option list OPTS for basic sanity. Reused short and long option names are diagnosed. Maybe other problems will be reported later. @@ -926,6 +931,7 @@ Ambiguous long option `~A' -- could be any of:~{~% --~A~}" (show-help *program-name* *version* *usage* *options*) (typecase *help* (string (terpri) (write-string *help*)) + (null nil) ((or function symbol) (terpri) (funcall *help*))) (format t "~&") (exit 0))