NYAOS 3000 は bat ファイルを実行するのに拡張子が省略できない。なので scala.bat とか git.cmd とか ant.bat とか rake.bat とか非常にめんどい。中には bzr みたいに Windows インストーラで入れると bzr.exe なのに Python base のインストーラで入れると bzr.bat になるようなのもあってものすごくめんどい。
なんとかならないかと思っていたけどふとコマンドラインフィルタでなんとかできそうだと思ったのでやってみた。
function nyaos.filter(cmdline) cmdline = cmdline:gsub('^[%w-_]+', function(cmd) if cmd:match('%.') then return false end local path='.;' .. os.getenv('PATH') local cmdl=cmd:lower() local variation={} for ext in os.getenv('PATHEXT'):gmatch('[^;]') do variation[ cmdl .. ext] = true end for key,val in nyaos.suffix() do variation[ cmdl .. '.' .. key:lower() ] = true end for path1 in path:gmatch('[^;]+') do for fname in nyaos.dir(path1) do if variation[ fname:lower() ] then return fname end end end end) return cmdline end
標準の設定ファイルに入ってる which コマンドをほぼ流用。流用したため suffix の省略も有効になってる。なので設定してあれば lua やら perl やら ruby やらも拡張子なしで実行できる。
コマンドラインフィルタ便利!
そして、世界は平和になった。
と言いたかったけど、alias にはフィルタが効かないっぽい。適用順が alias の方が後なのかな?なので例えば、
alias g git
ってやっても git なんてないと言われる。
alias g git.cmd
ってやればいい話なんだけど、bzrの件もあるので微妙。それにやっぱり気持ち悪い。
将来的には alias も フィルタで実現するかもみたいな話もあるので、それで適用順が割と自由にできるようになればなんとかなるかな。
追記:バグとか直しました。続・NYAOS 3000 で bat ファイルとかを拡張子なしで実行する - 永遠に未完成