[Turn on line numbering]arg str, cmd, args; var command, m, matched, templates, info, cdef, def, cmds, c, p; templates = (matched = []); cmds = #[]; if (dict_contains(commands, cmd)) cmds = #[[this(), commands[cmd]]]; for def in (parents() + modules) { if ((c = def.command_cache()) && dict_contains(c, cmd)) cmds = dict_add(cmds, def, c[cmd]); } if (!cmds) return 0; for def in (cmds) { if (def[1] in parents()) p = this(); else p = def[1]; for command in (def[2]) { if (!(info = command[2].command_info('local, command[1]))) continue; for cdef in (info) { if ((m = match_template(args, cdef[2])) != 0) matched += [[listlen(m), [str, cmd, @m], p, @sublist(cdef, 3)]]; } templates = union(templates, info.slice(3)); refresh(); } } if (matched) { info = [matched[1]]; matched = delete(matched, 1); for m in (matched) { if (m[1] > info[1][1]) info = [m]; else if (m[1] == info[1][1]) info += [m]; } return ['command, info]; } if (!templates) return 0; return ['partial, templates];
// Created 18-Sep-1997 as a part of ColdCore, see: @help Credit