NYAGOS で Lua

no extension

前回ConEmu とともに NYAGOS を導入したけど,今回は NYAGOS のセッティングを中心に。

NYAGOS の特徴のひとつに, Lua のエンジンを内蔵し解釈できる点がある。 というか NYAGOS 自身が機能拡張を Lua で実装していて,ユーザも hackable に NYAGOS をカスタマイズできる。

また nyagos.exe-f オプションを付けて起動すると Lua のソースファイルをスクリプトとして実行できる。 たとえば以下のコード hello.lua を以下のように記述し

print "Hello World!"

nyagos.exe で実行すると

C:>nyagos.exe -f hello.lua
Hello World!

となる。

これだけだと大したことはないが, nyagos.exe でスクリプトを実行した場合は NYAGOSLua 拡張が使える。 例えばカレント・フォルダを取得する getwd.lua を以下のように記述し

nyagos.write(nyagos.getwd().."\n")

nyagos.exe で実行すると

C:\Users\username>nyagos.exe -f getwd.lua
C:\Users\username

となる。

Lua 拡張については NYAGOS のドキュメントを参照するとよいだろう。 特筆すべきは alias 機能で,単純なコマンドの置き換えだけでなく

nyagos.alias.cmdname = function(args) ... end

のような形式で新しい内部コマンドを作成することもできる。

ところで nyagos.exe を普通に起動して ls -oF コマンドでファイルの一覧を表示させてみると,拡張子 .lua のファイルは実行可能ファイルになっていることが分かる。 ただ,実際に起動しようとすると

~> hello.lua
'lua' is not recognized as an internal or external command,
operable program or batch file

と怒られた。 どうやら lua コマンドがねーよ,と言っているらしい(確かに Lua の実行モジュールは入れてないのだが)。

NYAGOS をインストールしたフォルダにある nyagos.d\suffix.lua ファイルの末尾あたりを見ると

suffix.pl="perl"
if nyagos.which("ipy") then
  suffix.py="ipy"
elseif nyagos.which("py") then
  suffix.py="py"
else
  suffix.py="python"
end
suffix.rb="ruby"
suffix.lua="lua"
suffix.awk={"awk","-f"}
suffix.js={"cscript","//nologo"}
suffix.vbs={"cscript","//nologo"}
suffix.ps1={"powershell","-file"}

となっていて,拡張子 .lua のファイルが lua コマンドに関連付けられているのが分かる。 ってことは,これを nyagos.exe に書き換えればいいわけだ。 とはいえ nyagos.d\suffix.lua ファイルを直接いじるわけにはいかないので(バージョンアップのたびに上書きされる), %HOME% または %HOMEPATH% フォルダにある .nyagos ファイルに以下の記述を追加する1

 suffix.lua={"nyagos.exe","-f"}

これで nyagos.exe を起動し直して hello.lua ファイルを実行してみる。

~> hello.lua
Hello World!

おおっ,うまくいった。 これで Lua スクリプトを NYAGOS 上でバッチファイルのように扱うことができる。

さぁて,これでいよいよもって Lua の勉強をしないといけなくなった。 Pascal 系の構文は目が滑るんだよなぁ。

ブックマーク

NYAGOS 作者による解説

Lua の解説

その他


  1. suffix ではなく aliaslua コマンドを定義する手もある。 [return]
  2. 最近の Git for Windows は bash 関連のコマンドを Git\usr\bin フォルダに集めている。 git コマンドだけが必要なら Git\cmd フォルダにのみパスを通せばよい。 bash を使う場合は Git\bin フォルダにある bash.exe を起動するのが一番安全なようだ。 [return]