NYAOSでhgやgemなどのサブコマンドを補完するスクリプト、の修正版 - メモ:wantoraに修正版があります。
NYAOS-3000 2.98_0が公開された。今回の更新には個人的に嬉しい機能がある。
一つはバッチファイルの拡張子を省略出来るようになったこと、もう一つはnyaos.completeに第三引数が追加され、コマンドラインの文字列が取得できるようになったこと。
特にnyaos.completeの第三引数追加はnyaos.keyhookを併用する必要がなくなった。
NYAOS 3000でMercurialのサブコマンドを補完する - メモ:wantoraのサブコマンド補完はMercurialだけだが、今回のスクリプトは変数completesにテーブルを返す関数をコマンド名のキーに追加すれば、様々なコマンドに対応できる。
-- MIT License (http://d.hatena.ne.jp/wantora/20101212/1292141801) local completes_cache = {} local completes = { hg = function() local cmds = {} local function insert_cmd(str) for line in (str:match('\nlist of commands:\n\n(.-)\n\n') or ''):gmatch('[^\n]+') do local name = line:match('^ ([^%s:,]+)') if name then table.insert(cmds, name) end end end local HGPLAIN = os.getenv('HGPLAIN') or '' nyaos.exec('set HGPLAIN=1') h = nyaos.eval('hg help -v') insert_cmd(h) for line in (h:match('\nenabled extensions:\n\n(.-)\n\n') or ''):gmatch('[^\n]+') do insert_cmd(nyaos.eval('hg help '..line:match('^ ([^%s]*)')..' -v')) end nyaos.exec('set HGPLAIN='..HGPLAIN) return cmds end, gem = function() local cmds = {} for line in nyaos.eval('gem help commands'):gmatch('[^\n]+') do local name = line:match('^ ([^%s]*)') if #cmds > 0 and (not name) then break end if name and #name > 0 then table.insert(cmds, name) end end return cmds end, } function nyaos.complete(basestring, pos, misc) local cmd = misc.text:sub(1, pos):gsub('%s+$', ''):gsub('^(%S+)%.[^/\\.]+$', '%1') for name, comp in pairs(completes) do if cmd == name then if not completes_cache[name] then completes_cache[name] = comp() end return completes_cache[name] end end return nyaos.default_complete(basestring, pos) end