cmdr
Check-in [0ed8f3610b]
Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to [email protected]
or submit via the online form by Sep 9.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Moved dictsort utility into util for wider use. Sort parts of the help structures for easier testing. Fixed bugs in the help generation (1) Skip imported helper commands which are not formats. (2) Rendering of list inputs was off. -- Bumped version to 0.12, help (json, sql) to 0.2, fixed requirements -- Updated embedded documentation.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 0ed8f3610be51d12d02a4b57c92329b54ee30c74
User & Date: aku 2013-11-16 23:15:20
Context
2013-11-17
01:01
Added a behaviour flag "no-promote" to parameters, to allow rejection of promotion of unknown flag strings to input values on principle. Bumped version to 0.13, updated embedded documentation. check-in: b9126a7a27 user: aku tags: trunk
2013-11-16
23:15
Moved dictsort utility into util for wider use. Sort parts of the help structures for easier testing. Fixed bugs in the help generation (1) Skip imported helper commands which are not formats. (2) Rendering of list inputs was off. -- Bumped version to 0.12, help (json, sql) to 0.2, fixed requirements -- Updated embedded documentation. check-in: 0ed8f3610b user: aku tags: trunk
2013-11-15
23:10
Extended the shells to note their activity in a root common block named *in-shell*. Bumped version to 0.11. check-in: 5a480bf9d8 user: andreask tags: trunk
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Changes to actor.tcl.

   309    309   
   310    310       ##
   311    311       # # ## ### ##### ######## #############
   312    312   }
   313    313   
   314    314   # # ## ### ##### ######## ############# #####################
   315    315   ## Ready
   316         -package provide cmdr::actor 0.11
          316  +package provide cmdr::actor 0.12

Changes to cmdr.tcl.

    71     71   proc ::cmdr::interactive? {} {
    72     72       variable interactive
    73     73       return  $interactive
    74     74   }
    75     75   
    76     76   # # ## ### ##### ######## ############# #####################
    77     77   ## Ready
    78         -package provide cmdr 0.11
           78  +package provide cmdr 0.12

Changes to config.tcl.

   176    176   	    # in interactive mode we skip all the aliases.
   177    177   	    if {($mode eq "interact") &&
   178    178   		![$para primary $o]} continue
   179    179   	    dict set options $o [$para description $o]
   180    180   	    dict set optpara $o [$para name]
   181    181   	}
   182    182   
          183  +	# Order not required of the structure, improves testability
          184  +	set options [cmdr util dictsort $options]
          185  +	set optpara [cmdr util dictsort $optpara]
          186  +
   183    187   	set arguments $myargs
   184    188   	set sections  $mysections
   185    189   
   186    190   	# Full dump of the parameter definitions. Unusual formats
   187    191   	# (SQL, json) may wish to have acess to all of a parameter,
   188    192   	# not just bits and pieces.
   189    193   
   190    194   	set states     {}
   191    195   	set parameters {}
   192    196   
   193         -	foreach p $mynames {
          197  +	foreach p [lsort -dict $mynames] {
   194    198   	    set para [dict get $mymap $p]
   195    199   	    dict set parameters $p [$para help]
   196    200   
   197    201   	    if {![$para is state]} continue
   198    202   	    lappend states $p
   199    203   	}
   200    204   
................................................................................
  1352   1356       }
  1353   1357   
  1354   1358       # # ## ### ##### ######## #############
  1355   1359   }
  1356   1360   
  1357   1361   # # ## ### ##### ######## ############# #####################
  1358   1362   ## Ready
  1359         -package provide cmdr::config 0.11
         1363  +package provide cmdr::config 0.12

Changes to doc/cmdr_util.man.

     3      3   [manpage_begin [vset PROJECT]::util [vset MAN_SECTION] [vset VERSION]]
     4      4   [include parts/module.inc]
     5      5   [require cmdr::util]
     6      6   [titledesc [vset TITLE_UTIL]]
     7      7   [description]
     8      8   [include parts/welcome.inc]
     9      9   
    10         -This internal package provides a single utility command.
           10  +This internal package provides a few utility commands.
    11     11   
    12     12   [section API]
    13     13   [list_begin definitions]
    14     14   [comment {- - -- --- ----- -------- -------------}]
    15     15   [call [cmd ::cmdr::util] [method padr] [arg list]]
    16     16   
    17     17   When invoked this command pads all elements of the specified
................................................................................
    22     22   [para] The modified list is returned as the result of the command.
    23     23   
    24     24   [list_begin arguments]
    25     25   [arg_def list list]
    26     26   A list of strings to normalize in length by appending space characters
    27     27   as needed.
    28     28   [list_end]
           29  +
           30  +[comment {- - -- --- ----- -------- -------------}]
           31  +[call [cmd ::cmdr::util] [method dictsort] [arg dict]]
           32  +
           33  +When invoked this command sorts the provided dictionary by its keys.
           34  +
           35  +[para] The modified dictionary is returned as the result of the command.
           36  +
           37  +[list_begin arguments]
           38  +[arg_def dictionary dict] The dictionary to sort.
           39  +[list_end]
    29     40   
    30     41   [list_end]
    31     42   [include parts/feedback.inc]
    32     43   [manpage_end]

Changes to embedded/man/files/cmdr_util.n.

   244    244   .SH NAME
   245    245   cmdr::util \- Cmdr - General Utilities - Internal
   246    246   .SH SYNOPSIS
   247    247   package require \fBcmdr::util \fR
   248    248   .sp
   249    249   \fB::cmdr::util\fR \fBpadr\fR \fIlist\fR
   250    250   .sp
          251  +\fB::cmdr::util\fR \fBdictsort\fR \fIdict\fR
          252  +.sp
   251    253   .BE
   252    254   .SH DESCRIPTION
   253    255   .PP
   254    256   Welcome to the Cmdr project, written by Andreas Kupries\&.
   255    257   .PP
   256    258   For availability please read \fICmdr - How To Get The Sources\fR\&.
   257    259   .PP
   258         -This internal package provides a single utility command\&.
          260  +This internal package provides a few utility commands\&.
   259    261   .SH API
   260    262   .TP
   261    263   \fB::cmdr::util\fR \fBpadr\fR \fIlist\fR
   262    264   When invoked this command pads all elements of the specified
   263    265   \fIlist\fR at their end with space (ASCII 32 decimal) characters to
   264    266   make them all the same length, the length of the longest element in
   265    267   the list\&.
................................................................................
   267    269   The modified list is returned as the result of the command\&.
   268    270   .RS
   269    271   .TP
   270    272   list \fIlist\fR
   271    273   A list of strings to normalize in length by appending space characters
   272    274   as needed\&.
   273    275   .RE
          276  +.TP
          277  +\fB::cmdr::util\fR \fBdictsort\fR \fIdict\fR
          278  +When invoked this command sorts the provided dictionary by its keys\&.
          279  +.sp
          280  +The modified dictionary is returned as the result of the command\&.
          281  +.RS
          282  +.TP
          283  +dictionary \fIdict\fR
          284  +The dictionary to sort\&.
          285  +.RE
   274    286   .PP
   275    287   .SH "BUGS, IDEAS, FEEDBACK"
   276    288   Both the package(s) and this documentation will undoubtedly contain
   277    289   bugs and other problems\&.
   278    290   Please report such at
   279    291   \fICmdr Tickets\fR [https:/core\&.tcl\&.tk/akupries/cmdr]\&.
   280    292   .PP

Changes to embedded/www/doc/files/cmdr_util.html.

   123    123   <div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
   124    124   <div class="synopsis">
   125    125   <ul class="requirements">
   126    126   <li>package require <b class="pkgname">cmdr::util</b></li>
   127    127   </ul>
   128    128   <ul class="syntax">
   129    129   <li><a href="#1"><b class="cmd">::cmdr::util</b> <b class="method">padr</b> <i class="arg">list</i></a></li>
          130  +<li><a href="#2"><b class="cmd">::cmdr::util</b> <b class="method">dictsort</b> <i class="arg">dict</i></a></li>
   130    131   </ul>
   131    132   </div>
   132    133   </div>
   133    134   <div id="section1" class="section"><h2><a name="section1">Description</a></h2>
   134    135   <p>Welcome to the Cmdr project, written by Andreas Kupries.</p>
   135    136   <p>For availability please read <i class="term"><a href="cmdr_howto_get_sources.html">Cmdr - How To Get The Sources</a></i>.</p>
   136         -<p>This internal package provides a single utility command.</p>
          137  +<p>This internal package provides a few utility commands.</p>
   137    138   </div>
   138    139   <div id="section2" class="section"><h2><a name="section2">API</a></h2>
   139    140   <dl class="definitions">
   140    141   <dt><a name="1"><b class="cmd">::cmdr::util</b> <b class="method">padr</b> <i class="arg">list</i></a></dt>
   141    142   <dd><p>When invoked this command pads all elements of the specified
   142    143   <i class="arg">list</i> at their end with space (ASCII 32 decimal) characters to
   143    144   make them all the same length, the length of the longest element in
   144    145   the list.</p>
   145    146   <p>The modified list is returned as the result of the command.</p>
   146    147   <dl class="arguments">
   147    148   <dt>list <i class="arg">list</i></dt>
   148    149   <dd><p>A list of strings to normalize in length by appending space characters
   149    150   as needed.</p></dd>
          151  +</dl></dd>
          152  +<dt><a name="2"><b class="cmd">::cmdr::util</b> <b class="method">dictsort</b> <i class="arg">dict</i></a></dt>
          153  +<dd><p>When invoked this command sorts the provided dictionary by its keys.</p>
          154  +<p>The modified dictionary is returned as the result of the command.</p>
          155  +<dl class="arguments">
          156  +<dt>dictionary <i class="arg">dict</i></dt>
          157  +<dd><p>The dictionary to sort.</p></dd>
   150    158   </dl></dd>
   151    159   </dl>
   152    160   </div>
   153    161   <div id="section3" class="section"><h2><a name="section3">Bugs, Ideas, Feedback</a></h2>
   154    162   <p>Both the package(s) and this documentation will undoubtedly contain
   155    163   bugs and other problems.
   156    164   Please report such at

Changes to help.tcl.

    88     88   # # ## ### ##### ######## ############# #####################
    89     89   
    90     90   proc ::cmdr::help::auto {actor} {
    91     91       debug.cmdr/help {}
    92     92       # Generate a standard help command for any actor, and add it dynamically.
    93     93   
    94     94       # Auto create options based on the help formats found installed
    95         -    foreach c [info commands {::cmdr::help::format::[a-z]*}] {
           95  +    foreach c [lsort -dict [info commands {::cmdr::help::format::[a-z]*}]] {
    96     96   	set format [namespace tail $c]
           97  +
           98  +	# Skip the imported helper commands which are NOT formats
           99  +	if {[string match query* $format]} continue
          100  +
    97    101   	lappend formats --$format
    98    102   	lappend options [string map [list @[email protected] $format] {
    99    103   	    option @[email protected] {
   100    104   		Activate @[email protected] form of the help.
   101    105   	    } {
   102    106   		presence
   103    107   		when-set [lambda {p x} { $p config @format set @[email protected] }]
................................................................................
   152    156   	if {[llength $words]} {
   153    157   	    set format full
   154    158   	} else {
   155    159   	    set format by-category
   156    160   	}
   157    161       }
   158    162   
   159         -    puts [format $format [$actor root] $width [DictSort [query $actor $words]]]
          163  +    puts [format $format [$actor root] $width [cmdr util dictsort [query $actor $words]]]
   160    164       return
   161    165   }
   162    166   
   163         -proc ::cmdr::help::DictSort {dict} {
   164         -    set r {}
   165         -    foreach k [lsort -dict [dict keys $dict]] {
   166         -	lappend r $k [dict get $dict $k]
   167         -    }
   168         -    return $r
   169         -}
   170         -
   171    167   # # ## ### ##### ######## ############# #####################
   172    168   
   173    169   namespace eval ::cmdr::help::format {
   174    170       namespace export full list short by-category
   175    171       namespace ensemble create
   176    172   
   177    173       namespace import ::cmdr::help::query
................................................................................
   221    217   			   {    }]
   222    218       }
   223    219   
   224    220       # plus per-option descriptions (sort by flag name)
   225    221       if {[dict size $options]} {
   226    222   	set onames {}
   227    223   	set odefs  {}
   228         -	foreach {oname ohelp} [::cmdr::help::DictSort $options] {
          224  +	foreach {oname ohelp} [::cmdr util dictsort $options] {
   229    225   	    lappend onames $oname
   230    226   	    lappend odefs  $ohelp
   231    227   	}
   232    228   	DefList $width $onames $odefs
   233    229       }
   234    230   
   235    231       # plus per-argument descriptions (keep in cmdline order)
................................................................................
   412    408       set result {}
   413    409       foreach a $arguments {
   414    410   	set v [dict get $parameters $a]
   415    411   	dict with v {} ; # -> code, desc, label
   416    412   	switch -exact -- $code {
   417    413   	    +  { set text "<$label>" }
   418    414   	    ?  { set text "\[<${label}>\]" }
   419         -	    +* { set text "<{label}>..." }
          415  +	    +* { set text "<${label}>..." }
   420    416   	    ?* { set text "\[<${label}>...\]" }
   421    417   	}
   422    418   	lappend result $text
   423    419       }
   424    420       return [join $result]
   425    421   }
   426    422   
................................................................................
   510    506   
   511    507       return $categories
   512    508   }
   513    509   
   514    510   
   515    511   # # ## ### ##### ######## ############# #####################
   516    512   ## Ready
   517         -package provide cmdr::help 0.11
          513  +package provide cmdr::help 0.12

Changes to help_json.tcl.

     1      1   ## -*- tcl -*-
     2      2   # # ## ### ##### ######## ############# #####################
     3      3   ## CMDR - Help - JSON format. Not available by default.
     4      4   ## Require this package before creation a commander, so that the
     5      5   ## mdr::help heuristics see and automatically integrate the format.
     6      6   
     7      7   # @@ Meta Begin
     8         -# Package cmdr::help::json 0.1
            8  +# Package cmdr::help::json 0.2
     9      9   # Meta author   {Andreas Kupries}
    10     10   # Meta location https://core.tcl.tk/akupries/cmdr
    11     11   # Meta platform tcl
    12     12   # Meta summary     Formatting help as JSON object.
    13     13   # Meta description Formatting help as JSON object.
    14     14   # Meta subject {command line}
    15     15   # Meta require {Tcl 8.5-}
    16     16   # Meta require debug
    17     17   # Meta require debug::caller
    18         -# Meta require cmdr::help
           18  +# Meta require {cmdr::help 0.12}
           19  +# Meta require {cmdr::util 0.12}
    19     20   # Meta require json::write
    20     21   # @@ Meta End
    21     22   
    22     23   # # ## ### ##### ######## ############# #####################
    23     24   ## Requisites
    24     25   
    25     26   package require Tcl 8.5
    26     27   package require debug
    27     28   package require debug::caller
    28         -package require cmdr::help
           29  +package require cmdr::help 0.12
           30  +package require cmdr::util 0.12
    29     31   package require json::write
    30     32   
    31     33   # # ## ### ##### ######## ############# #####################
    32     34   
    33     35   debug define cmdr/help/json
    34     36   debug level  cmdr/help/json
    35     37   debug prefix cmdr/help/json {[debug caller] | }
................................................................................
   119    121       lappend dict sections    [JSON::alist      $sections]
   120    122       
   121    123       return [json::write object {*}$dict]
   122    124   }
   123    125   
   124    126   proc ::cmdr::help::format::JSON::parameters {parameters} {
   125    127       set dict {}
   126         -    foreach {name def} [::cmdr::help::DictSort $parameters] {
          128  +    foreach {name def} [::cmdr util dictsort $parameters] {
   127    129   	set tmp {}
   128         -	foreach {xname xdef} [::cmdr::help::DictSort $def] {
          130  +	foreach {xname xdef} [::cmdr util dictsort $def] {
   129    131   	    switch -glob -- $xname {
   130    132   		cmdline -
   131    133   		defered -
   132    134   		documented -
   133    135   		interactive -
   134    136   		isbool -
   135    137   		list -
................................................................................
   182    184   	lappend tmp [json::write string $w]
   183    185       }
   184    186       return [json::write array {*}$tmp]
   185    187   }
   186    188   
   187    189   proc ::cmdr::help::format::JSON::adict {thedict} {
   188    190       set tmp {}
   189         -    foreach {k v} [::cmdr::help::DictSort $thedict] {
          191  +    foreach {k v} [::cmdr util dictsort $thedict] {
   190    192   	lappend tmp $k [json::write string $v]
   191    193       }
   192    194       return [json::write object {*}$tmp]
   193    195   }
   194    196   
   195    197   proc ::cmdr::help::format::JSON::astring {string} {
   196    198       regsub -all -- {[ \n\t]+} $string { } string
   197    199       return [json::write string [string trim $string]]
   198    200   }
   199    201   
   200    202   # # ## ### ##### ######## ############# #####################
   201    203   ## Ready
   202         -package provide cmdr::help::json 0.1
          204  +package provide cmdr::help::json 0.2

Changes to help_sql.tcl.

     1      1   ## -*- tcl -*-
     2      2   # # ## ### ##### ######## ############# #####################
     3      3   ## CMDR - Help - SQL format. Not available by default.
     4      4   ## Require this package before creation a commander, so that the
     5      5   ## mdr::help heuristics see and automatically integrate the format.
     6      6   
     7      7   # @@ Meta Begin
     8         -# Package cmdr::help::sql 0.1
            8  +# Package cmdr::help::sql 0.2
     9      9   # Meta author   {Andreas Kupries}
    10     10   # Meta location https://core.tcl.tk/akupries/cmdr
    11     11   # Meta platform tcl
    12     12   # Meta summary     Formatting help as series of SQL commands.
    13     13   # Meta description Formatting help as series of SQL commands.
    14     14   # Meta subject {command line}
    15     15   # Meta require {Tcl 8.5-}
    16     16   # Meta require debug
    17     17   # Meta require debug::caller
    18         -# Meta require cmdr::help
           18  +# Meta require {cmdr::help 0.12}
           19  +# Meta require {cmdr::util 0.12}
    19     20   # @@ Meta End
    20     21   
    21     22   # # ## ### ##### ######## ############# #####################
    22     23   ## Requisites
    23     24   
    24     25   package require Tcl 8.5
    25     26   package require debug
    26     27   package require debug::caller
    27         -package require cmdr::help
           28  +package require cmdr::help 0.12
           29  +package require cmdr::util 0.12
    28     30   
    29     31   # # ## ### ##### ######## ############# #####################
    30     32   
    31     33   debug define cmdr/help/sql
    32     34   debug level  cmdr/help/sql
    33     35   debug prefix cmdr/help/sql {[debug caller] | }
    34     36   
................................................................................
   150    152   
   151    153       return
   152    154   }
   153    155   
   154    156   proc ::cmdr::help::format::SQL::para {def} {
   155    157       set result {}
   156    158   
   157         -    foreach {xname xdef} [::cmdr::help::DictSort $def] {
          159  +    foreach {xname xdef} [::cmdr util dictsort $def] {
   158    160   	switch -glob -- $xname {
   159    161   	    cmdline -
   160    162   	    defered -
   161    163   	    documented -
   162    164   	    interactive -
   163    165   	    isbool -
   164    166   	    list -
................................................................................
   287    289   	       pid  INTEGER REFERENCES parameters
   288    290          );
   289    291   	CREATE INDEX fname on flags ( name );
   290    292       }
   291    293   }
   292    294   # # ## ### ##### ######## ############# #####################
   293    295   ## Ready
   294         -package provide cmdr::help::sql 0.1
          296  +package provide cmdr::help::sql 0.2

Changes to officer.tcl.

   614    614   	myreplexit myhandler
   615    615   
   616    616       # # ## ### ##### ######## #############
   617    617   }
   618    618   
   619    619   # # ## ### ##### ######## ############# #####################
   620    620   ## Ready
   621         -package provide cmdr::officer 0.10
          621  +package provide cmdr::officer 0.12

Changes to parameter.tcl.

  1185   1185   	myisundefined
  1186   1186   
  1187   1187       # # ## ### ##### ######## #############
  1188   1188   }
  1189   1189   
  1190   1190   # # ## ### ##### ######## ############# #####################
  1191   1191   ## Ready
  1192         -package provide cmdr::parameter 0.11
         1192  +package provide cmdr::parameter 0.12

Changes to private.tcl.

   165    165       variable myarguments mycmd myinit myconfig myhandler
   166    166   
   167    167       # # ## ### ##### ######## #############
   168    168   }
   169    169   
   170    170   # # ## ### ##### ######## ############# #####################
   171    171   ## Ready
   172         -package provide cmdr::private 0.11
          172  +package provide cmdr::private 0.12

Changes to tests/help.tests.

    39     39   	    private cloak {} ::dagger
    40     40   	}
    41     41       }
    42     42   
    43     43       regsub -all {::oo::Obj\d+::} [x help] {ZZZ::}
    44     44   } -cleanup {
    45     45       x destroy
    46         -} -result {{bar aloha} {desc hawaii options {--lulu loop --no-lulu {Complementary alias of --lulu.}} arguments {yoyo jump run} states {} parameters {lulu {cmdline 1 code ? default no defered 0 description loop documented yes flags {--lulu primary --no-lulu inverted} generator {} interactive no isbool 1 list no ordered 0 presence no prompt {Enter lulu: } required 0 threshold {} type option validator ::cmdr::validate::boolean} yoyo {cmdline 1 code + default {} defered 0 description height documented yes flags {} generator {} interactive no isbool 0 list no ordered 1 presence no prompt {Enter yoyo: } required 1 threshold {} type input validator ::cmdr::validate::identity} jump {cmdline 1 code ? default {} defered 0 description gate documented yes flags {} generator {} interactive no isbool 0 list no ordered 1 presence no prompt {Enter jump: } required no threshold 1 type input validator ::cmdr::validate::identity} run {cmdline 1 code +* default {} defered 0 description lane documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter run: } required 1 threshold {} type input validator ::cmdr::validate::identity}} action ::hula} {bar help} {desc {Retrieve help for a command or command set.
           46  +} -result {{bar aloha} {desc hawaii options {--lulu loop --no-lulu {Complementary alias of --lulu.}} opt2para {--lulu lulu --no-lulu lulu} arguments {yoyo jump run} states {} parameters {jump {cmdline 1 code ? default {} defered 0 description gate documented yes flags {} generator {} interactive no isbool 0 label jump list no ordered 1 presence no prompt {Enter jump: } required no threshold 1 type input validator ::cmdr::validate::identity} lulu {cmdline 1 code ? default no defered 0 description loop documented yes flags {--lulu primary --no-lulu inverted} generator {} interactive no isbool 1 label lulu list no ordered 0 presence no prompt {Enter lulu: } required 0 threshold {} type option validator ::cmdr::validate::boolean} run {cmdline 1 code +* default {} defered 0 description lane documented yes flags {} generator {} interactive no isbool 0 label run list yes ordered 1 presence no prompt {Enter run: } required 1 threshold {} type input validator ::cmdr::validate::identity} yoyo {cmdline 1 code + default {} defered 0 description height documented yes flags {} generator {} interactive no isbool 0 label yoyo list no ordered 1 presence no prompt {Enter yoyo: } required 1 threshold {} type input validator ::cmdr::validate::identity}} sections {} action ::hula} {bar help} {desc {Retrieve help for a command or command set.
           47  +	    Without arguments help for all commands is given.
           48  +	    The default format is --full.} options {--by-category {
           49  +		Activate by-category form of the help.
           50  +	    } --full {
           51  +		Activate full form of the help.
           52  +	    } --list {
           53  +		Activate list form of the help.
           54  +	    } --short {
           55  +		Activate short form of the help.
           56  +	    } --width {
           57  +	    The line width to format the help for.
           58  +	    Defaults to the terminal width, or 80 when
           59  +	    no terminal is available.
           60  +	} -w {Alias of --width.}} opt2para {--by-category by-category --full full --list list --short short --width width -w width} arguments cmdname states format parameters {by-category {cmdline 1 code ? default no defered 0 description {
           61  +		Activate by-category form of the help.
           62  +	    } documented yes flags {--by-category primary} generator {} interactive no isbool 1 label by-category list no ordered 0 presence yes prompt {Enter by-category: } required 0 threshold {} type option validator ::cmdr::validate::boolean} cmdname {cmdline 1 code ?* default {} defered 0 description {
           63  +	    The entire command line, the name of the
           64  +	    command to get help for. This can be several
           65  +	    words.
           66  +	} documented yes flags {} generator {} interactive no isbool 0 label cmdname list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity} format {cmdline 0 code {} default {} defered 1 description {
           67  +	    Format of the help to generate.
           68  +	    This field is fed by the options --by-category, --full, --list, and --short.
           69  +	} documented yes flags {} generator {} interactive no isbool 0 label format list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} full {cmdline 1 code ? default no defered 0 description {
           70  +		Activate full form of the help.
           71  +	    } documented yes flags {--full primary} generator {} interactive no isbool 1 label full list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
           72  +		Activate list form of the help.
           73  +	    } documented yes flags {--list primary} generator {} interactive no isbool 1 label list list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} short {cmdline 1 code ? default no defered 0 description {
           74  +		Activate short form of the help.
           75  +	    } documented yes flags {--short primary} generator {} interactive no isbool 1 label short list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} width {cmdline 1 code ? default {} defered 0 description {
           76  +	    The line width to format the help for.
           77  +	    Defaults to the terminal width, or 80 when
           78  +	    no terminal is available.
           79  +	} documented yes flags {-w alias --width primary} generator {::apply {p { linenoise columns }}} interactive no isbool 0 label width list no ordered 0 presence no prompt {Enter width: } required 0 threshold {} type option validator ::cmdr::validate::integer}} sections {} action {::cmdr::help::auto-help ZZZ::officer_bar}} {snafu aloha} {desc hawaii options {--lulu loop --no-lulu {Complementary alias of --lulu.}} opt2para {--lulu lulu --no-lulu lulu} arguments {yoyo jump run} states {} parameters {jump {cmdline 1 code ? default {} defered 0 description gate documented yes flags {} generator {} interactive no isbool 0 label jump list no ordered 1 presence no prompt {Enter jump: } required no threshold 1 type input validator ::cmdr::validate::identity} lulu {cmdline 1 code ? default no defered 0 description loop documented yes flags {--lulu primary --no-lulu inverted} generator {} interactive no isbool 1 label lulu list no ordered 0 presence no prompt {Enter lulu: } required 0 threshold {} type option validator ::cmdr::validate::boolean} run {cmdline 1 code +* default {} defered 0 description lane documented yes flags {} generator {} interactive no isbool 0 label run list yes ordered 1 presence no prompt {Enter run: } required 1 threshold {} type input validator ::cmdr::validate::identity} yoyo {cmdline 1 code + default {} defered 0 description height documented yes flags {} generator {} interactive no isbool 0 label yoyo list no ordered 1 presence no prompt {Enter yoyo: } required 1 threshold {} type input validator ::cmdr::validate::identity}} sections {} action ::hula} {snafu help} {desc {Retrieve help for a command or command set.
           80  +	    Without arguments help for all commands is given.
           81  +	    The default format is --full.} options {--by-category {
           82  +		Activate by-category form of the help.
           83  +	    } --full {
           84  +		Activate full form of the help.
           85  +	    } --list {
           86  +		Activate list form of the help.
           87  +	    } --short {
           88  +		Activate short form of the help.
           89  +	    } --width {
           90  +	    The line width to format the help for.
           91  +	    Defaults to the terminal width, or 80 when
           92  +	    no terminal is available.
           93  +	} -w {Alias of --width.}} opt2para {--by-category by-category --full full --list list --short short --width width -w width} arguments cmdname states format parameters {by-category {cmdline 1 code ? default no defered 0 description {
           94  +		Activate by-category form of the help.
           95  +	    } documented yes flags {--by-category primary} generator {} interactive no isbool 1 label by-category list no ordered 0 presence yes prompt {Enter by-category: } required 0 threshold {} type option validator ::cmdr::validate::boolean} cmdname {cmdline 1 code ?* default {} defered 0 description {
           96  +	    The entire command line, the name of the
           97  +	    command to get help for. This can be several
           98  +	    words.
           99  +	} documented yes flags {} generator {} interactive no isbool 0 label cmdname list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity} format {cmdline 0 code {} default {} defered 1 description {
          100  +	    Format of the help to generate.
          101  +	    This field is fed by the options --by-category, --full, --list, and --short.
          102  +	} documented yes flags {} generator {} interactive no isbool 0 label format list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} full {cmdline 1 code ? default no defered 0 description {
          103  +		Activate full form of the help.
          104  +	    } documented yes flags {--full primary} generator {} interactive no isbool 1 label full list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
          105  +		Activate list form of the help.
          106  +	    } documented yes flags {--list primary} generator {} interactive no isbool 1 label list list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} short {cmdline 1 code ? default no defered 0 description {
          107  +		Activate short form of the help.
          108  +	    } documented yes flags {--short primary} generator {} interactive no isbool 1 label short list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} width {cmdline 1 code ? default {} defered 0 description {
          109  +	    The line width to format the help for.
          110  +	    Defaults to the terminal width, or 80 when
          111  +	    no terminal is available.
          112  +	} documented yes flags {-w alias --width primary} generator {::apply {p { linenoise columns }}} interactive no isbool 0 label width list no ordered 0 presence no prompt {Enter width: } required 0 threshold {} type option validator ::cmdr::validate::integer}} sections {} action {::cmdr::help::auto-help ZZZ::officer_bar}} {tool pliers help} {desc {Retrieve help for a command or command set.
    47    113   	    Without arguments help for all commands is given.
    48         -	    The default format is --full.} options {--short {
          114  +	    The default format is --full.} options {--by-category {
          115  +		Activate by-category form of the help.
          116  +	    } --full {
          117  +		Activate full form of the help.
          118  +	    } --list {
          119  +		Activate list form of the help.
          120  +	    } --short {
          121  +		Activate short form of the help.
          122  +	    } --width {
          123  +	    The line width to format the help for.
          124  +	    Defaults to the terminal width, or 80 when
          125  +	    no terminal is available.
          126  +	} -w {Alias of --width.}} opt2para {--by-category by-category --full full --list list --short short --width width -w width} arguments cmdname states format parameters {by-category {cmdline 1 code ? default no defered 0 description {
          127  +		Activate by-category form of the help.
          128  +	    } documented yes flags {--by-category primary} generator {} interactive no isbool 1 label by-category list no ordered 0 presence yes prompt {Enter by-category: } required 0 threshold {} type option validator ::cmdr::validate::boolean} cmdname {cmdline 1 code ?* default {} defered 0 description {
          129  +	    The entire command line, the name of the
          130  +	    command to get help for. This can be several
          131  +	    words.
          132  +	} documented yes flags {} generator {} interactive no isbool 0 label cmdname list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity} format {cmdline 0 code {} default {} defered 1 description {
          133  +	    Format of the help to generate.
          134  +	    This field is fed by the options --by-category, --full, --list, and --short.
          135  +	} documented yes flags {} generator {} interactive no isbool 0 label format list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} full {cmdline 1 code ? default no defered 0 description {
          136  +		Activate full form of the help.
          137  +	    } documented yes flags {--full primary} generator {} interactive no isbool 1 label full list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
          138  +		Activate list form of the help.
          139  +	    } documented yes flags {--list primary} generator {} interactive no isbool 1 label list list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} short {cmdline 1 code ? default no defered 0 description {
    49    140   		Activate short form of the help.
          141  +	    } documented yes flags {--short primary} generator {} interactive no isbool 1 label short list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} width {cmdline 1 code ? default {} defered 0 description {
          142  +	    The line width to format the help for.
          143  +	    Defaults to the terminal width, or 80 when
          144  +	    no terminal is available.
          145  +	} documented yes flags {-w alias --width primary} generator {::apply {p { linenoise columns }}} interactive no isbool 0 label width list no ordered 0 presence no prompt {Enter width: } required 0 threshold {} type option validator ::cmdr::validate::integer}} sections {} action {::cmdr::help::auto-help ZZZ::officer_pliers}} {tool hammer nail} {desc workbench options {--driver force --force {Alias of --driver.}} opt2para {--driver driver --force driver} arguments supply states context parameters {context {cmdline 0 code {} default {} defered 1 description orientation documented yes flags {} generator {} interactive no isbool 0 label context list no ordered 0 presence no prompt {Enter context: } required 1 threshold {} type state validator ::cmdr::validate::identity} driver {cmdline 1 code ?* default 0 defered 0 description force documented yes flags {--force alias --driver primary} generator {} interactive no isbool 0 label driver list yes ordered 0 presence no prompt {Enter driver: } required 0 threshold {} type option validator adouble} supply {cmdline 1 code ?* default {} defered 0 description magazine documented yes flags {} generator {} interactive no isbool 0 label supply list yes ordered 1 presence no prompt {Enter supply: } required no threshold 0 type input validator ::cmdr::validate::identity}} sections {} action ::wall} {tool hammer help} {desc {Retrieve help for a command or command set.
          146  +	    Without arguments help for all commands is given.
          147  +	    The default format is --full.} options {--by-category {
          148  +		Activate by-category form of the help.
          149  +	    } --full {
          150  +		Activate full form of the help.
    50    151   	    } --list {
    51    152   		Activate list form of the help.
          153  +	    } --short {
          154  +		Activate short form of the help.
          155  +	    } --width {
          156  +	    The line width to format the help for.
          157  +	    Defaults to the terminal width, or 80 when
          158  +	    no terminal is available.
          159  +	} -w {Alias of --width.}} opt2para {--by-category by-category --full full --list list --short short --width width -w width} arguments cmdname states format parameters {by-category {cmdline 1 code ? default no defered 0 description {
          160  +		Activate by-category form of the help.
          161  +	    } documented yes flags {--by-category primary} generator {} interactive no isbool 1 label by-category list no ordered 0 presence yes prompt {Enter by-category: } required 0 threshold {} type option validator ::cmdr::validate::boolean} cmdname {cmdline 1 code ?* default {} defered 0 description {
          162  +	    The entire command line, the name of the
          163  +	    command to get help for. This can be several
          164  +	    words.
          165  +	} documented yes flags {} generator {} interactive no isbool 0 label cmdname list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity} format {cmdline 0 code {} default {} defered 1 description {
          166  +	    Format of the help to generate.
          167  +	    This field is fed by the options --by-category, --full, --list, and --short.
          168  +	} documented yes flags {} generator {} interactive no isbool 0 label format list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} full {cmdline 1 code ? default no defered 0 description {
          169  +		Activate full form of the help.
          170  +	    } documented yes flags {--full primary} generator {} interactive no isbool 1 label full list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
          171  +		Activate list form of the help.
          172  +	    } documented yes flags {--list primary} generator {} interactive no isbool 1 label list list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} short {cmdline 1 code ? default no defered 0 description {
          173  +		Activate short form of the help.
          174  +	    } documented yes flags {--short primary} generator {} interactive no isbool 1 label short list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} width {cmdline 1 code ? default {} defered 0 description {
          175  +	    The line width to format the help for.
          176  +	    Defaults to the terminal width, or 80 when
          177  +	    no terminal is available.
          178  +	} documented yes flags {-w alias --width primary} generator {::apply {p { linenoise columns }}} interactive no isbool 0 label width list no ordered 0 presence no prompt {Enter width: } required 0 threshold {} type option validator ::cmdr::validate::integer}} sections {} action {::cmdr::help::auto-help ZZZ::officer_hammer}} {tool help} {desc {Retrieve help for a command or command set.
          179  +	    Without arguments help for all commands is given.
          180  +	    The default format is --full.} options {--by-category {
          181  +		Activate by-category form of the help.
    52    182   	    } --full {
    53    183   		Activate full form of the help.
    54         -	    }} arguments cmdname states format parameters {short {cmdline 1 code ? default no defered 0 description {
    55         -		Activate short form of the help.
    56         -	    } documented yes flags {--short primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
          184  +	    } --list {
    57    185   		Activate list form of the help.
    58         -	    } documented yes flags {--list primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} full {cmdline 1 code ? default no defered 0 description {
    59         -		Activate full form of the help.
    60         -	    } documented yes flags {--full primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} format {cmdline 0 code {} default full defered 1 description {
    61         -	    Format of the help to generate.
    62         -	    This field is fed by the options --short, --list, and --full.
    63         -	} documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} cmdname {cmdline 1 code ?* default {} defered 0 description {
          186  +	    } --short {
          187  +		Activate short form of the help.
          188  +	    } --width {
          189  +	    The line width to format the help for.
          190  +	    Defaults to the terminal width, or 80 when
          191  +	    no terminal is available.
          192  +	} -w {Alias of --width.}} opt2para {--by-category by-category --full full --list list --short short --width width -w width} arguments cmdname states format parameters {by-category {cmdline 1 code ? default no defered 0 description {
          193  +		Activate by-category form of the help.
          194  +	    } documented yes flags {--by-category primary} generator {} interactive no isbool 1 label by-category list no ordered 0 presence yes prompt {Enter by-category: } required 0 threshold {} type option validator ::cmdr::validate::boolean} cmdname {cmdline 1 code ?* default {} defered 0 description {
    64    195   	    The entire command line, the name of the
    65    196   	    command to get help for. This can be several
    66    197   	    words.
    67         -	} documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity}} action {::cmdr::help::auto-help ZZZ::officer_bar}} {snafu aloha} {desc hawaii options {--lulu loop --no-lulu {Complementary alias of --lulu.}} arguments {yoyo jump run} states {} parameters {lulu {cmdline 1 code ? default no defered 0 description loop documented yes flags {--lulu primary --no-lulu inverted} generator {} interactive no isbool 1 list no ordered 0 presence no prompt {Enter lulu: } required 0 threshold {} type option validator ::cmdr::validate::boolean} yoyo {cmdline 1 code + default {} defered 0 description height documented yes flags {} generator {} interactive no isbool 0 list no ordered 1 presence no prompt {Enter yoyo: } required 1 threshold {} type input validator ::cmdr::validate::identity} jump {cmdline 1 code ? default {} defered 0 description gate documented yes flags {} generator {} interactive no isbool 0 list no ordered 1 presence no prompt {Enter jump: } required no threshold 1 type input validator ::cmdr::validate::identity} run {cmdline 1 code +* default {} defered 0 description lane documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter run: } required 1 threshold {} type input validator ::cmdr::validate::identity}} action ::hula} {snafu help} {desc {Retrieve help for a command or command set.
    68         -	    Without arguments help for all commands is given.
    69         -	    The default format is --full.} options {--short {
    70         -		Activate short form of the help.
    71         -	    } --list {
          198  +	} documented yes flags {} generator {} interactive no isbool 0 label cmdname list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity} format {cmdline 0 code {} default {} defered 1 description {
          199  +	    Format of the help to generate.
          200  +	    This field is fed by the options --by-category, --full, --list, and --short.
          201  +	} documented yes flags {} generator {} interactive no isbool 0 label format list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} full {cmdline 1 code ? default no defered 0 description {
          202  +		Activate full form of the help.
          203  +	    } documented yes flags {--full primary} generator {} interactive no isbool 1 label full list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
    72    204   		Activate list form of the help.
          205  +	    } documented yes flags {--list primary} generator {} interactive no isbool 1 label list list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} short {cmdline 1 code ? default no defered 0 description {
          206  +		Activate short form of the help.
          207  +	    } documented yes flags {--short primary} generator {} interactive no isbool 1 label short list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} width {cmdline 1 code ? default {} defered 0 description {
          208  +	    The line width to format the help for.
          209  +	    Defaults to the terminal width, or 80 when
          210  +	    no terminal is available.
          211  +	} documented yes flags {-w alias --width primary} generator {::apply {p { linenoise columns }}} interactive no isbool 0 label width list no ordered 0 presence no prompt {Enter width: } required 0 threshold {} type option validator ::cmdr::validate::integer}} sections {} action {::cmdr::help::auto-help ZZZ::officer_tool}} {hammer nail} {desc workbench options {--driver force --force {Alias of --driver.}} opt2para {--driver driver --force driver} arguments supply states context parameters {context {cmdline 0 code {} default {} defered 1 description orientation documented yes flags {} generator {} interactive no isbool 0 label context list no ordered 0 presence no prompt {Enter context: } required 1 threshold {} type state validator ::cmdr::validate::identity} driver {cmdline 1 code ?* default 0 defered 0 description force documented yes flags {--force alias --driver primary} generator {} interactive no isbool 0 label driver list yes ordered 0 presence no prompt {Enter driver: } required 0 threshold {} type option validator adouble} supply {cmdline 1 code ?* default {} defered 0 description magazine documented yes flags {} generator {} interactive no isbool 0 label supply list yes ordered 1 presence no prompt {Enter supply: } required no threshold 0 type input validator ::cmdr::validate::identity}} sections {} action ::wall} {hammer help} {desc {Retrieve help for a command or command set.
          212  +	    Without arguments help for all commands is given.
          213  +	    The default format is --full.} options {--by-category {
          214  +		Activate by-category form of the help.
    73    215   	    } --full {
    74    216   		Activate full form of the help.
    75         -	    }} arguments cmdname states format parameters {short {cmdline 1 code ? default no defered 0 description {
    76         -		Activate short form of the help.
    77         -	    } documented yes flags {--short primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
          217  +	    } --list {
    78    218   		Activate list form of the help.
    79         -	    } documented yes flags {--list primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} full {cmdline 1 code ? default no defered 0 description {
    80         -		Activate full form of the help.
    81         -	    } documented yes flags {--full primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} format {cmdline 0 code {} default full defered 1 description {
    82         -	    Format of the help to generate.
    83         -	    This field is fed by the options --short, --list, and --full.
    84         -	} documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} cmdname {cmdline 1 code ?* default {} defered 0 description {
          219  +	    } --short {
          220  +		Activate short form of the help.
          221  +	    } --width {
          222  +	    The line width to format the help for.
          223  +	    Defaults to the terminal width, or 80 when
          224  +	    no terminal is available.
          225  +	} -w {Alias of --width.}} opt2para {--by-category by-category --full full --list list --short short --width width -w width} arguments cmdname states format parameters {by-category {cmdline 1 code ? default no defered 0 description {
          226  +		Activate by-category form of the help.
          227  +	    } documented yes flags {--by-category primary} generator {} interactive no isbool 1 label by-category list no ordered 0 presence yes prompt {Enter by-category: } required 0 threshold {} type option validator ::cmdr::validate::boolean} cmdname {cmdline 1 code ?* default {} defered 0 description {
    85    228   	    The entire command line, the name of the
    86    229   	    command to get help for. This can be several
    87    230   	    words.
    88         -	} documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity}} action {::cmdr::help::auto-help ZZZ::officer_bar}} {tool pliers help} {desc {Retrieve help for a command or command set.
    89         -	    Without arguments help for all commands is given.
    90         -	    The default format is --full.} options {--short {
    91         -		Activate short form of the help.
    92         -	    } --list {
          231  +	} documented yes flags {} generator {} interactive no isbool 0 label cmdname list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity} format {cmdline 0 code {} default {} defered 1 description {
          232  +	    Format of the help to generate.
          233  +	    This field is fed by the options --by-category, --full, --list, and --short.
          234  +	} documented yes flags {} generator {} interactive no isbool 0 label format list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} full {cmdline 1 code ? default no defered 0 description {
          235  +		Activate full form of the help.
          236  +	    } documented yes flags {--full primary} generator {} interactive no isbool 1 label full list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
    93    237   		Activate list form of the help.
          238  +	    } documented yes flags {--list primary} generator {} interactive no isbool 1 label list list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} short {cmdline 1 code ? default no defered 0 description {
          239  +		Activate short form of the help.
          240  +	    } documented yes flags {--short primary} generator {} interactive no isbool 1 label short list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} width {cmdline 1 code ? default {} defered 0 description {
          241  +	    The line width to format the help for.
          242  +	    Defaults to the terminal width, or 80 when
          243  +	    no terminal is available.
          244  +	} documented yes flags {-w alias --width primary} generator {::apply {p { linenoise columns }}} interactive no isbool 0 label width list no ordered 0 presence no prompt {Enter width: } required 0 threshold {} type option validator ::cmdr::validate::integer}} sections {} action {::cmdr::help::auto-help ZZZ::officer_hammer}} help {desc {Retrieve help for a command or command set.
          245  +	    Without arguments help for all commands is given.
          246  +	    The default format is --full.} options {--by-category {
          247  +		Activate by-category form of the help.
    94    248   	    } --full {
    95    249   		Activate full form of the help.
    96         -	    }} arguments cmdname states format parameters {short {cmdline 1 code ? default no defered 0 description {
    97         -		Activate short form of the help.
    98         -	    } documented yes flags {--short primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
    99         -		Activate list form of the help.
   100         -	    } documented yes flags {--list primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} full {cmdline 1 code ? default no defered 0 description {
   101         -		Activate full form of the help.
   102         -	    } documented yes flags {--full primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} format {cmdline 0 code {} default full defered 1 description {
   103         -	    Format of the help to generate.
   104         -	    This field is fed by the options --short, --list, and --full.
   105         -	} documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} cmdname {cmdline 1 code ?* default {} defered 0 description {
   106         -	    The entire command line, the name of the
   107         -	    command to get help for. This can be several
   108         -	    words.
   109         -	} documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity}} action {::cmdr::help::auto-help ZZZ::officer_pliers}} {tool hammer nail} {desc workbench options {--driver force --force {Alias of --driver.}} arguments supply states context parameters {driver {cmdline 1 code ?* default 0 defered 0 description force documented yes flags {--force alias --driver primary} generator {} interactive no isbool 0 list yes ordered 0 presence no prompt {Enter driver: } required 0 threshold {} type option validator adouble} context {cmdline 0 code {} default {} defered 1 description orientation documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter context: } required 1 threshold {} type state validator ::cmdr::validate::identity} supply {cmdline 1 code ?* default {} defered 0 description magazine documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter supply: } required no threshold 0 type input validator ::cmdr::validate::identity}} action ::wall} {tool hammer help} {desc {Retrieve help for a command or command set.
   110         -	    Without arguments help for all commands is given.
   111         -	    The default format is --full.} options {--short {
   112         -		Activate short form of the help.
   113    250   	    } --list {
   114    251   		Activate list form of the help.
   115         -	    } --full {
   116         -		Activate full form of the help.
   117         -	    }} arguments cmdname states format parameters {short {cmdline 1 code ? default no defered 0 description {
          252  +	    } --short {
   118    253   		Activate short form of the help.
   119         -	    } documented yes flags {--short primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
   120         -		Activate list form of the help.
   121         -	    } documented yes flags {--list primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} full {cmdline 1 code ? default no defered 0 description {
   122         -		Activate full form of the help.
   123         -	    } documented yes flags {--full primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} format {cmdline 0 code {} default full defered 1 description {
   124         -	    Format of the help to generate.
   125         -	    This field is fed by the options --short, --list, and --full.
   126         -	} documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} cmdname {cmdline 1 code ?* default {} defered 0 description {
          254  +	    } --width {
          255  +	    The line width to format the help for.
          256  +	    Defaults to the terminal width, or 80 when
          257  +	    no terminal is available.
          258  +	} -w {Alias of --width.}} opt2para {--by-category by-category --full full --list list --short short --width width -w width} arguments cmdname states format parameters {by-category {cmdline 1 code ? default no defered 0 description {
          259  +		Activate by-category form of the help.
          260  +	    } documented yes flags {--by-category primary} generator {} interactive no isbool 1 label by-category list no ordered 0 presence yes prompt {Enter by-category: } required 0 threshold {} type option validator ::cmdr::validate::boolean} cmdname {cmdline 1 code ?* default {} defered 0 description {
   127    261   	    The entire command line, the name of the
   128    262   	    command to get help for. This can be several
   129    263   	    words.
   130         -	} documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity}} action {::cmdr::help::auto-help ZZZ::officer_hammer}} {tool help} {desc {Retrieve help for a command or command set.
   131         -	    Without arguments help for all commands is given.
   132         -	    The default format is --full.} options {--short {
   133         -		Activate short form of the help.
   134         -	    } --list {
          264  +	} documented yes flags {} generator {} interactive no isbool 0 label cmdname list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity} format {cmdline 0 code {} default {} defered 1 description {
          265  +	    Format of the help to generate.
          266  +	    This field is fed by the options --by-category, --full, --list, and --short.
          267  +	} documented yes flags {} generator {} interactive no isbool 0 label format list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} full {cmdline 1 code ? default no defered 0 description {
          268  +		Activate full form of the help.
          269  +	    } documented yes flags {--full primary} generator {} interactive no isbool 1 label full list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
   135    270   		Activate list form of the help.
   136         -	    } --full {
   137         -		Activate full form of the help.
   138         -	    }} arguments cmdname states format parameters {short {cmdline 1 code ? default no defered 0 description {
          271  +	    } documented yes flags {--list primary} generator {} interactive no isbool 1 label list list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} short {cmdline 1 code ? default no defered 0 description {
   139    272   		Activate short form of the help.
   140         -	    } documented yes flags {--short primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
   141         -		Activate list form of the help.
   142         -	    } documented yes flags {--list primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} full {cmdline 1 code ? default no defered 0 description {
   143         -		Activate full form of the help.
   144         -	    } documented yes flags {--full primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} format {cmdline 0 code {} default full defered 1 description {
   145         -	    Format of the help to generate.
   146         -	    This field is fed by the options --short, --list, and --full.
   147         -	} documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} cmdname {cmdline 1 code ?* default {} defered 0 description {
   148         -	    The entire command line, the name of the
   149         -	    command to get help for. This can be several
   150         -	    words.
   151         -	} documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity}} action {::cmdr::help::auto-help ZZZ::officer_tool}} {hammer nail} {desc workbench options {--driver force --force {Alias of --driver.}} arguments supply states context parameters {driver {cmdline 1 code ?* default 0 defered 0 description force documented yes flags {--force alias --driver primary} generator {} interactive no isbool 0 list yes ordered 0 presence no prompt {Enter driver: } required 0 threshold {} type option validator adouble} context {cmdline 0 code {} default {} defered 1 description orientation documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter context: } required 1 threshold {} type state validator ::cmdr::validate::identity} supply {cmdline 1 code ?* default {} defered 0 description magazine documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter supply: } required no threshold 0 type input validator ::cmdr::validate::identity}} action ::wall} {hammer help} {desc {Retrieve help for a command or command set.
   152         -	    Without arguments help for all commands is given.
   153         -	    The default format is --full.} options {--short {
   154         -		Activate short form of the help.
   155         -	    } --list {
   156         -		Activate list form of the help.
   157         -	    } --full {
   158         -		Activate full form of the help.
   159         -	    }} arguments cmdname states format parameters {short {cmdline 1 code ? default no defered 0 description {
   160         -		Activate short form of the help.
   161         -	    } documented yes flags {--short primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
   162         -		Activate list form of the help.
   163         -	    } documented yes flags {--list primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} full {cmdline 1 code ? default no defered 0 description {
   164         -		Activate full form of the help.
   165         -	    } documented yes flags {--full primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} format {cmdline 0 code {} default full defered 1 description {
   166         -	    Format of the help to generate.
   167         -	    This field is fed by the options --short, --list, and --full.
   168         -	} documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} cmdname {cmdline 1 code ?* default {} defered 0 description {
   169         -	    The entire command line, the name of the
   170         -	    command to get help for. This can be several
   171         -	    words.
   172         -	} documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity}} action {::cmdr::help::auto-help ZZZ::officer_hammer}} help {desc {Retrieve help for a command or command set.
   173         -	    Without arguments help for all commands is given.
   174         -	    The default format is --full.} options {--short {
   175         -		Activate short form of the help.
   176         -	    } --list {
   177         -		Activate list form of the help.
   178         -	    } --full {
   179         -		Activate full form of the help.
   180         -	    }} arguments cmdname states format parameters {short {cmdline 1 code ? default no defered 0 description {
   181         -		Activate short form of the help.
   182         -	    } documented yes flags {--short primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
   183         -		Activate list form of the help.
   184         -	    } documented yes flags {--list primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} full {cmdline 1 code ? default no defered 0 description {
   185         -		Activate full form of the help.
   186         -	    } documented yes flags {--full primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} format {cmdline 0 code {} default full defered 1 description {
   187         -	    Format of the help to generate.
   188         -	    This field is fed by the options --short, --list, and --full.
   189         -	} documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} cmdname {cmdline 1 code ?* default {} defered 0 description {
   190         -	    The entire command line, the name of the
   191         -	    command to get help for. This can be several
   192         -	    words.
   193         -	} documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity}} action {::cmdr::help::auto-help ::x}}}
          273  +	    } documented yes flags {--short primary} generator {} interactive no isbool 1 label short list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} width {cmdline 1 code ? default {} defered 0 description {
          274  +	    The line width to format the help for.
          275  +	    Defaults to the terminal width, or 80 when
          276  +	    no terminal is available.
          277  +	} documented yes flags {-w alias --width primary} generator {::apply {p { linenoise columns }}} interactive no isbool 0 label width list no ordered 0 presence no prompt {Enter width: } required 0 threshold {} type option validator ::cmdr::validate::integer}} sections {} action {::cmdr::help::auto-help ::x}}}
   194    278   
   195    279   test cmdr-help-1.1 {help structure, inverted boolean option} -body {
   196    280       cmdr create x foo {
   197    281   	description TEST
   198    282   	private nail {
   199    283   	    description workbench
   200    284   	    option no-driver force { list ; alias force }
   201    285   	} ::wall
   202    286       }
   203    287       x help
   204    288   } -cleanup {
   205    289       x destroy
   206         -} -result {nail {desc workbench options {--driver {Complementary alias of --no-driver.} --force {Alias of --no-driver.} --no-driver force} arguments {} states {} parameters {no-driver {cmdline 1 code ?* default {} defered 0 description force documented yes flags {--force alias --no-driver primary --driver inverted} generator {} interactive no isbool 1 list yes ordered 0 presence no prompt {Enter no-driver: } required 0 threshold {} type option validator ::cmdr::validate::boolean}} action ::wall} help {desc {Retrieve help for a command or command set.
          290  +} -result {nail {desc workbench options {--driver {Complementary alias of --no-driver.} --force {Alias of --no-driver.} --no-driver force} opt2para {--driver no-driver --force no-driver --no-driver no-driver} arguments {} states {} parameters {no-driver {cmdline 1 code ?* default {} defered 0 description force documented yes flags {--force alias --no-driver primary --driver inverted} generator {} interactive no isbool 1 label no-driver list yes ordered 0 presence no prompt {Enter no-driver: } required 0 threshold {} type option validator ::cmdr::validate::boolean}} sections {} action ::wall} help {desc {Retrieve help for a command or command set.
   207    291   	    Without arguments help for all commands is given.
   208         -	    The default format is --full.} options {--short {
   209         -		Activate short form of the help.
   210         -	    } --list {
   211         -		Activate list form of the help.
          292  +	    The default format is --full.} options {--by-category {
          293  +		Activate by-category form of the help.
   212    294   	    } --full {
   213    295   		Activate full form of the help.
   214         -	    }} arguments cmdname states format parameters {short {cmdline 1 code ? default no defered 0 description {
   215         -		Activate short form of the help.
   216         -	    } documented yes flags {--short primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
          296  +	    } --list {
   217    297   		Activate list form of the help.
   218         -	    } documented yes flags {--list primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} full {cmdline 1 code ? default no defered 0 description {
   219         -		Activate full form of the help.
   220         -	    } documented yes flags {--full primary} generator {} interactive no isbool 1 list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} format {cmdline 0 code {} default full defered 1 description {
   221         -	    Format of the help to generate.
   222         -	    This field is fed by the options --short, --list, and --full.
   223         -	} documented yes flags {} generator {} interactive no isbool 0 list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} cmdname {cmdline 1 code ?* default {} defered 0 description {
          298  +	    } --short {
          299  +		Activate short form of the help.
          300  +	    } --width {
          301  +	    The line width to format the help for.
          302  +	    Defaults to the terminal width, or 80 when
          303  +	    no terminal is available.
          304  +	} -w {Alias of --width.}} opt2para {--by-category by-category --full full --list list --short short --width width -w width} arguments cmdname states format parameters {by-category {cmdline 1 code ? default no defered 0 description {
          305  +		Activate by-category form of the help.
          306  +	    } documented yes flags {--by-category primary} generator {} interactive no isbool 1 label by-category list no ordered 0 presence yes prompt {Enter by-category: } required 0 threshold {} type option validator ::cmdr::validate::boolean} cmdname {cmdline 1 code ?* default {} defered 0 description {
   224    307   	    The entire command line, the name of the
   225    308   	    command to get help for. This can be several
   226    309   	    words.
   227         -	} documented yes flags {} generator {} interactive no isbool 0 list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity}} action {::cmdr::help::auto-help ::x}}}
          310  +	} documented yes flags {} generator {} interactive no isbool 0 label cmdname list yes ordered 1 presence no prompt {Enter cmdname: } required no threshold 0 type input validator ::cmdr::validate::identity} format {cmdline 0 code {} default {} defered 1 description {
          311  +	    Format of the help to generate.
          312  +	    This field is fed by the options --by-category, --full, --list, and --short.
          313  +	} documented yes flags {} generator {} interactive no isbool 0 label format list no ordered 0 presence no prompt {Enter format: } required 1 threshold {} type state validator ::cmdr::validate::identity} full {cmdline 1 code ? default no defered 0 description {
          314  +		Activate full form of the help.
          315  +	    } documented yes flags {--full primary} generator {} interactive no isbool 1 label full list no ordered 0 presence yes prompt {Enter full: } required 0 threshold {} type option validator ::cmdr::validate::boolean} list {cmdline 1 code ? default no defered 0 description {
          316  +		Activate list form of the help.
          317  +	    } documented yes flags {--list primary} generator {} interactive no isbool 1 label list list no ordered 0 presence yes prompt {Enter list: } required 0 threshold {} type option validator ::cmdr::validate::boolean} short {cmdline 1 code ? default no defered 0 description {
          318  +		Activate short form of the help.
          319  +	    } documented yes flags {--short primary} generator {} interactive no isbool 1 label short list no ordered 0 presence yes prompt {Enter short: } required 0 threshold {} type option validator ::cmdr::validate::boolean} width {cmdline 1 code ? default {} defered 0 description {
          320  +	    The line width to format the help for.
          321  +	    Defaults to the terminal width, or 80 when
          322  +	    no terminal is available.
          323  +	} documented yes flags {-w alias --width primary} generator {::apply {p { linenoise columns }}} interactive no isbool 0 label width list no ordered 0 presence no prompt {Enter width: } required 0 threshold {} type option validator ::cmdr::validate::integer}} sections {} action {::cmdr::help::auto-help ::x}}}
   228    324   
   229    325   # # ## ### ##### ######## ############# #####################
   230    326   
   231    327   test cmdr-help-2.0 {full - formatting help structure} -body {
   232    328       HelpLarge full
   233         -} -result {bar aloha [OPTIONS] yoyo ?jump? run...
          329  +} -result {bar aloha [OPTIONS] <yoyo> [<jump>] <run>...
   234    330       hawaii
   235    331   
   236    332       --lulu    loop
   237    333       --no-lulu Complementary alias of --lulu.
   238    334   
   239    335       yoyo height
   240    336       jump gate
   241    337       run  lane
   242    338   
   243         -bar help [OPTIONS] ?cmdname...?
          339  +bar help [OPTIONS] [<cmdname>...]
   244    340       Retrieve help for a command or command set.
   245    341       Without arguments help for all commands is
   246    342       given. The default format is --full.
   247    343   
   248         -    --short Activate short form of the help.
   249         -    --list  Activate list form of the help.
   250         -    --full  Activate full form of the help.
          344  +    --by-category Activate by-category form of the
          345  +                  help.
          346  +    --full        Activate full form of the help.
          347  +    --list        Activate list form of the help.
          348  +    --short       Activate short form of the help.
          349  +    --width       The line width to format the
          350  +                  help for. Defaults to the
          351  +                  terminal width, or 80 when no
          352  +                  terminal is available.
          353  +    -w            Alias of --width.
   251    354   
   252    355       cmdname The entire command line, the name of
   253    356               the command to get help for. This can
   254    357               be several words.
   255    358   
   256         -snafu aloha [OPTIONS] yoyo ?jump? run...
          359  +snafu aloha [OPTIONS] <yoyo> [<jump>] <run>...
   257    360       hawaii
   258    361   
   259    362       --lulu    loop
   260    363       --no-lulu Complementary alias of --lulu.
   261    364   
   262    365       yoyo height
   263    366       jump gate
   264    367       run  lane
   265    368   
   266         -snafu help [OPTIONS] ?cmdname...?
          369  +snafu help [OPTIONS] [<cmdname>...]
   267    370       Retrieve help for a command or command set.
   268    371       Without arguments help for all commands is
   269    372       given. The default format is --full.
   270    373   
   271         -    --short Activate short form of the help.
   272         -    --list  Activate list form of the help.
   273         -    --full  Activate full form of the help.
          374  +    --by-category Activate by-category form of the
          375  +                  help.
          376  +    --full        Activate full form of the help.
          377  +    --list        Activate list form of the help.
          378  +    --short       Activate short form of the help.
          379  +    --width       The line width to format the
          380  +                  help for. Defaults to the
          381  +                  terminal width, or 80 when no
          382  +                  terminal is available.
          383  +    -w            Alias of --width.
   274    384   
   275    385       cmdname The entire command line, the name of
   276    386               the command to get help for. This can
   277    387               be several words.
   278    388   
   279         -tool pliers help [OPTIONS] ?cmdname...?
          389  +tool pliers help [OPTIONS] [<cmdname>...]
   280    390       Retrieve help for a command or command set.
   281    391       Without arguments help for all commands is
   282    392       given. The default format is --full.
   283    393   
   284         -    --short Activate short form of the help.
   285         -    --list  Activate list form of the help.
   286         -    --full  Activate full form of the help.
          394  +    --by-category Activate by-category form of the
          395  +                  help.
          396  +    --full        Activate full form of the help.
          397  +    --list        Activate list form of the help.
          398  +    --short       Activate short form of the help.
          399  +    --width       The line width to format the
          400  +                  help for. Defaults to the
          401  +                  terminal width, or 80 when no
          402  +                  terminal is available.
          403  +    -w            Alias of --width.
   287    404   
   288    405       cmdname The entire command line, the name of
   289    406               the command to get help for. This can
   290    407               be several words.
   291    408   
   292         -tool hammer nail [OPTIONS] ?supply...?
          409  +tool hammer nail [OPTIONS] [<supply>...]
   293    410       workbench
   294    411   
   295    412       --driver force
   296    413       --force  Alias of --driver.
   297    414   
   298    415       supply magazine
   299    416   
   300         -tool hammer help [OPTIONS] ?cmdname...?
          417  +tool hammer help [OPTIONS] [<cmdname>...]
   301    418       Retrieve help for a command or command set.
   302    419       Without arguments help for all commands is
   303    420       given. The default format is --full.
   304    421   
   305         -    --short Activate short form of the help.
   306         -    --list  Activate list form of the help.
   307         -    --full  Activate full form of the help.
          422  +    --by-category Activate by-category form of the
          423  +                  help.
          424  +    --full        Activate full form of the help.
          425  +    --list        Activate list form of the help.
          426  +    --short       Activate short form of the help.
          427  +    --width       The line width to format the
          428  +                  help for. Defaults to the
          429  +                  terminal width, or 80 when no
          430  +                  terminal is available.
          431  +    -w            Alias of --width.
   308    432   
   309    433       cmdname The entire command line, the name of
   310    434               the command to get help for. This can
   311    435               be several words.
   312    436   
   313         -tool help [OPTIONS] ?cmdname...?
          437  +tool help [OPTIONS] [<cmdname>...]
   314    438       Retrieve help for a command or command set.
   315    439       Without arguments help for all commands is
   316    440       given. The default format is --full.
   317    441   
   318         -    --short Activate short form of the help.
   319         -    --list  Activate list form of the help.
   320         -    --full  Activate full form of the help.
          442  +    --by-category Activate by-category form of the
          443  +                  help.
          444  +    --full        Activate full form of the help.
          445  +    --list        Activate list form of the help.
          446  +    --short       Activate short form of the help.
          447  +    --width       The line width to format the
          448  +                  help for. Defaults to the
          449  +                  terminal width, or 80 when no
          450  +                  terminal is available.
          451  +    -w            Alias of --width.
   321    452   
   322    453       cmdname The entire command line, the name of
   323    454               the command to get help for. This can
   324    455               be several words.
   325    456   
   326         -hammer nail [OPTIONS] ?supply...?
          457  +hammer nail [OPTIONS] [<supply>...]
   327    458       workbench
   328    459   
   329    460       --driver force
   330    461       --force  Alias of --driver.
   331    462   
   332    463       supply magazine
   333    464   
   334         -hammer help [OPTIONS] ?cmdname...?
          465  +hammer help [OPTIONS] [<cmdname>...]
   335    466       Retrieve help for a command or command set.
   336    467       Without arguments help for all commands is
   337    468       given. The default format is --full.
   338    469   
   339         -    --short Activate short form of the help.
   340         -    --list  Activate list form of the help.
   341         -    --full  Activate full form of the help.
          470  +    --by-category Activate by-category form of the
          471  +                  help.
          472  +    --full        Activate full form of the help.
          473  +    --list        Activate list form of the help.
          474  +    --short       Activate short form of the help.
          475  +    --width       The line width to format the
          476  +                  help for. Defaults to the
          477  +                  terminal width, or 80 when no
          478  +                  terminal is available.
          479  +    -w            Alias of --width.
   342    480   
   343    481       cmdname The entire command line, the name of
   344    482               the command to get help for. This can
   345    483               be several words.
   346    484   
   347         -help [OPTIONS] ?cmdname...?
          485  +help [OPTIONS] [<cmdname>...]
   348    486       Retrieve help for a command or command set.
   349    487       Without arguments help for all commands is
   350    488       given. The default format is --full.
   351    489   
   352         -    --short Activate short form of the help.
   353         -    --list  Activate list form of the help.
   354         -    --full  Activate full form of the help.
          490  +    --by-category Activate by-category form of the
          491  +                  help.
          492  +    --full        Activate full form of the help.
          493  +    --list        Activate list form of the help.
          494  +    --short       Activate short form of the help.
          495  +    --width       The line width to format the
          496  +                  help for. Defaults to the
          497  +                  terminal width, or 80 when no
          498  +                  terminal is available.
          499  +    -w            Alias of --width.
   355    500   
   356    501       cmdname The entire command line, the name of
   357    502               the command to get help for. This can
   358    503               be several words.
   359    504   }
   360    505   
   361    506   test cmdr-help-2.1 {full formatting - help structure, inverted boolean option} -body {
................................................................................
   364    509       workbench
   365    510   
   366    511       --driver    Complementary alias of
   367    512                   --no-driver.
   368    513       --force     Alias of --no-driver.
   369    514       --no-driver force
   370    515   
   371         -help [OPTIONS] ?cmdname...?
          516  +help [OPTIONS] [<cmdname>...]
   372    517       Retrieve help for a command or command set.
   373    518       Without arguments help for all commands is
   374    519       given. The default format is --full.
   375    520   
   376         -    --short Activate short form of the help.
   377         -    --list  Activate list form of the help.
   378         -    --full  Activate full form of the help.
          521  +    --by-category Activate by-category form of the
          522  +                  help.
          523  +    --full        Activate full form of the help.
          524  +    --list        Activate list form of the help.
          525  +    --short       Activate short form of the help.
          526  +    --width       The line width to format the
          527  +                  help for. Defaults to the
          528  +                  terminal width, or 80 when no
          529  +                  terminal is available.
          530  +    -w            Alias of --width.
   379    531   
   380    532       cmdname The entire command line, the name of
   381    533               the command to get help for. This can
   382    534               be several words.
   383    535   }
   384    536   
   385    537   # # ## ### ##### ######## ############# #####################
   386    538   
   387    539   test cmdr-help-3.0 {short - formatting help structure} -body {
   388    540       HelpLarge short
   389         -} -result {bar aloha [OPTIONS] yoyo ?jump? run...
          541  +} -result {bar aloha [OPTIONS] <yoyo> [<jump>] <run>...
          542  +    hawaii
          543  +
          544  +bar help [OPTIONS] [<cmdname>...]
          545  +    Retrieve help for a command or command set.
          546  +    Without arguments help for all commands is
          547  +    given. The default format is --full.
          548  +
          549  +snafu aloha [OPTIONS] <yoyo> [<jump>] <run>...
   390    550       hawaii
   391    551   
   392         -bar help [OPTIONS] ?cmdname...?
          552  +snafu help [OPTIONS] [<cmdname>...]
          553  +    Retrieve help for a command or command set.
          554  +    Without arguments help for all commands is
          555  +    given. The default format is --full.
          556  +
          557  +tool pliers help [OPTIONS] [<cmdname>...]
          558  +    Retrieve help for a command or command set.
          559  +    Without arguments help for all commands is
          560  +    given. The default format is --full.
          561  +
          562  +tool hammer nail [OPTIONS] [<supply>...]
          563  +    workbench
          564  +
          565  +tool hammer help [OPTIONS] [<cmdname>...]
   393    566       Retrieve help for a command or command set.
   394    567       Without arguments help for all commands is
   395    568       given. The default format is --full.
   396    569   
   397         -snafu aloha [OPTIONS] yoyo ?jump? run...
   398         -    hawaii
   399         -
   400         -snafu help [OPTIONS] ?cmdname...?
          570  +tool help [OPTIONS] [<cmdname>...]
   401    571       Retrieve help for a command or command set.
   402    572       Without arguments help for all commands is
   403    573       given. The default format is --full.
   404    574   
   405         -tool pliers help [OPTIONS] ?cmdname...?
   406         -    Retrieve help for a command or command set.
   407         -    Without arguments help for all commands is
   408         -    given. The default format is --full.
   409         -
   410         -tool hammer nail [OPTIONS] ?supply...?
          575  +hammer nail [OPTIONS] [<supply>...]
   411    576       workbench
   412    577   
   413         -tool hammer help [OPTIONS] ?cmdname...?
          578  +hammer help [OPTIONS] [<cmdname>...]
   414    579       Retrieve help for a command or command set.
   415    580       Without arguments help for all commands is
   416    581       given. The default format is --full.
   417    582   
   418         -tool help [OPTIONS] ?cmdname...?
   419         -    Retrieve help for a command or command set.
   420         -    Without arguments help for all commands is
   421         -    given. The default format is --full.
   422         -
   423         -hammer nail [OPTIONS] ?supply...?
   424         -    workbench
   425         -
   426         -hammer help [OPTIONS] ?cmdname...?
   427         -    Retrieve help for a command or command set.
   428         -    Without arguments help for all commands is
   429         -    given. The default format is --full.
   430         -
   431         -help [OPTIONS] ?cmdname...?
          583  +help [OPTIONS] [<cmdname>...]
   432    584       Retrieve help for a command or command set.
   433    585       Without arguments help for all commands is
   434    586       given. The default format is --full.
   435    587   }
   436    588   
   437    589   test cmdr-help-3.1 {short formatting - help structure, inverted boolean option} -body {
   438    590       HelpSmall short
   439    591   } -result {nail [OPTIONS]
   440    592       workbench
   441    593   
   442         -help [OPTIONS] ?cmdname...?
          594  +help [OPTIONS] [<cmdname>...]
   443    595       Retrieve help for a command or command set.
   444    596       Without arguments help for all commands is
   445    597       given. The default format is --full.
   446    598   }
   447    599   
   448    600   # # ## ### ##### ######## ############# #####################
   449    601   
   450    602   test cmdr-help-4.0 {list - formatting help structure} -body {
   451    603       HelpLarge list
   452         -} -result {    bar aloha [OPTIONS] yoyo ?jump? run...
   453         -    bar help [OPTIONS] ?cmdname...?
   454         -    snafu aloha [OPTIONS] yoyo ?jump? run...
   455         -    snafu help [OPTIONS] ?cmdname...?
   456         -    tool pliers help [OPTIONS] ?cmdname...?
   457         -    tool hammer nail [OPTIONS] ?supply...?
   458         -    tool hammer help [OPTIONS] ?cmdname...?
   459         -    tool help [OPTIONS] ?cmdname...?
   460         -    hammer nail [OPTIONS] ?supply...?
   461         -    hammer help [OPTIONS] ?cmdname...?
   462         -    help [OPTIONS] ?cmdname...?}
          604  +} -result {    bar aloha [OPTIONS] <yoyo> [<jump>] <run>...
          605  +    bar help [OPTIONS] [<cmdname>...]
          606  +    snafu aloha [OPTIONS] <yoyo> [<jump>] <run>...
          607  +    snafu help [OPTIONS] [<cmdname>...]
          608  +    tool pliers help [OPTIONS] [<cmdname>...]
          609  +    tool hammer nail [OPTIONS] [<supply>...]
          610  +    tool hammer help [OPTIONS] [<cmdname>...]
          611  +    tool help [OPTIONS] [<cmdname>...]
          612  +    hammer nail [OPTIONS] [<supply>...]
          613  +    hammer help [OPTIONS] [<cmdname>...]
          614  +    help [OPTIONS] [<cmdname>...]}
   463    615   
   464    616   test cmdr-help-4.1 {list formatting - help structure, inverted boolean option} -body {
   465    617       HelpSmall list
   466    618   } -result {    nail [OPTIONS]
   467         -    help [OPTIONS] ?cmdname...?}
          619  +    help [OPTIONS] [<cmdname>...]}
   468    620   
   469    621   # # ## ### ##### ######## ############# #####################
   470    622   return

Changes to tests/runtime.tests.

   358    358   	option C -
   359    359   	option D -
   360    360   	option E -
   361    361   	option F -
   362    362   	option G - { validate identity }
   363    363       } -A -G X --no-B -G X -C 1 -D 0 --no-E 1 --no-F 0
   364    364   } -result {
   365         -    A = 'yes' v'yes'
          365  +    A = 'yes' v'1'
   366    366       B = '0'   v'0'
   367    367       C = '1'   v'1'
   368    368       D = '0'   v'0'
   369    369       E = '0'   v'0'
   370    370       F = '1'   v'1'
   371    371       G = 'X'   v'X'
   372    372   }
................................................................................
   617    617   
   618    618   test cmdr-runtime-7.2 {validation errors} -body {
   619    619       ParseFailParse {
   620    620   	input A - { validate integer }
   621    621   	input B - { validate integer }
   622    622       } 1 X
   623    623   } -returnCodes error \
   624         -    -result {Expected an integer for "B", got "X"}
          624  +    -result {Expected an integer for input "B", got "X"}
   625    625   
   626    626   # # ## ### ##### ######## ############# #####################
   627    627   
   628    628   return

Changes to tests/support.tcl.

    27     27   	default
    28     28   	alias snafu
    29     29   	officer tool {
    30     30   	    officer pliers {}
    31     31   	    officer hammer {
    32     32   		private nail {
    33     33   		    description workbench
    34         -		    option driver force { validate adouble ; default 0 ; list ; alias force }
           34  +		    option driver force {
           35  +			validate adouble ; default 0 ; list ; alias force
           36  +		    }
    35     37   		    state  context orientation
    36     38   		    input supply magazine { list ; optional }
    37     39   		} ::wall
    38     40   	    }
    39     41   	    default hammer
    40     42   	}
    41     43   	alias hammer = tool hammer
................................................................................
    60     62   	} ::wall
    61     63       } $format $n
    62     64   }
    63     65   
    64     66   proc Help {def format n} {
    65     67       try {
    66     68   	cmdr create x foo $def
    67         -	cmdr help format $format $n [x help]
           69  +	cmdr help format $format x $n [x help]
    68     70       } finally {
    69     71   	x destroy
    70     72       }
    71     73   }
    72     74   
    73     75   # # ## ### ##### ######## ############# #####################
    74     76   ## Supporting procedures for cmdr.test et. al.

Changes to util.tcl.

    28     28   
    29     29   namespace eval ::cmdr {
    30     30       namespace export util
    31     31       namespace ensemble create
    32     32   }
    33     33   
    34     34   namespace eval ::cmdr::util {
    35         -    namespace export padr
           35  +    namespace export padr dictsort
    36     36       namespace ensemble create
    37     37   }
    38     38   
    39     39   # # ## ### ##### ######## ############# #####################
    40     40   
    41     41   debug define cmdr/util
    42     42   debug level  cmdr/util
................................................................................
    55     55   	if {$l <= $maxl} continue
    56     56   	set maxl $l
    57     57       }
    58     58       set res {}
    59     59       foreach str $list { lappend res [format "%-*s" $maxl $str] }
    60     60       return $res
    61     61   }
           62  +
           63  +proc ::cmdr::util::dictsort {dict} {
           64  +    set r {}
           65  +    foreach k [lsort -dict [dict keys $dict]] {
           66  +	lappend r $k [dict get $dict $k]
           67  +    }
           68  +    return $r
           69  +}
    62     70   
    63     71   # # ## ### ##### ######## ############# #####################
    64     72   ## Ready
    65         -package provide cmdr::util 0.11
           73  +package provide cmdr::util 0.12

Changes to validate.tcl.

   317    317       if {![file readable    $path]} {return 0}
   318    318       if {![file writable    $path]} {return 0}
   319    319       return 1
   320    320   }
   321    321   
   322    322   # # ## ### ##### ######## ############# #####################
   323    323   ## Ready
   324         -package provide cmdr::validate 0.11
          324  +package provide cmdr::validate 0.12
   325    325   return

Changes to vcommon.tcl.

   105    105   
   106    106       debug.cmdr/validate/common {= [join $candidates "\n= "]} 10
   107    107       return $candidates
   108    108   }
   109    109   
   110    110   # # ## ### ##### ######## ############# #####################
   111    111   ## Ready
   112         -package provide cmdr::validate::common 0.11
          112  +package provide cmdr::validate::common 0.12
   113    113   return