+ // TODO: allow matching of aliases?
+ function cmds(hive) hive._list.filter(function (cmd) cmd.name.indexOf(filter || "") == 0)
+
+ let hives = (hives || this.userHives).map(function (h) [h, cmds(h)]).filter(function ([h, c]) c.length);
+
+ let list = <table>
+ <tr highlight="Title">
+ <td/>
+ <td style="padding-right: 1em;"></td>
+ <td style="padding-right: 1ex;">{_("title.Name")}</td>
+ <td style="padding-right: 1ex;">{_("title.Args")}</td>
+ <td style="padding-right: 1ex;">{_("title.Range")}</td>
+ <td style="padding-right: 1ex;">{_("title.Complete")}</td>
+ <td style="padding-right: 1ex;">{_("title.Definition")}</td>
+ </tr>
+ <col style="min-width: 6em; padding-right: 1em;"/>
+ {
+ template.map(hives, function ([hive, cmds]) let (i = 0)
+ <tr style="height: .5ex;"/> +
+ template.map(cmds, function (cmd)
+ <tr>
+ <td highlight="Title">{!i++ ? hive.name : ""}</td>
+ <td>{cmd.bang ? "!" : " "}</td>
+ <td>{cmd.name}</td>
+ <td>{cmd.argCount}</td>
+ <td>{cmd.count ? "0c" : ""}</td>
+ <td>{completerToString(cmd.completer)}</td>
+ <td>{cmd.replacementText || "function () { ... }"}</td>
+ </tr>) +
+ <tr style="height: .5ex;"/>)
+ }
+ </table>;