【NYAGOS】Nyaos から Nyagos へ移行する
2018/12/01 追記
- シンタックスハイライトを適用しました。
前書き
以前Nyagosをインストールしたものの、Nyaosにあった便利機能が色々なかったので結局 Nyaos を使い続けていたんですが、Nyagos の方も大分アップデートが進んで色々便利になったようなので、そろそろ移行しようかなと。
移行しようと思ったものの、(多分、まだまだ破壊的変更が入るからでしょうか)今までの設定とかどーやって移行すればいいのかって言う説明が無いに等しいので、適当にメモしておきます。
インストールした Nyagos
4.0.9_10 の 64bit 版をインストールしました。
設定ファイルの場所
今までは_nya
に書いており、読み込む場所はこんな風な説明がありました。
# _nya は NYAOS の初期設定ファイルです. # (1) NYAOS.EXE のあるディレクトリ # (2) %HOME% の下(未定義であれば %USERPROFILE%) # (3) カレントディレクトリ
Nyagos の場合は.nyagos
を%HOME%
ないしは%USERPROFILE%
へ置く必要があります。nyagos.exe
のあるディレクトリの.nyagos
は読み込みません。
マニュアルの「起動処理」にはnyagos.exe
と同じディレクトリ内のnyagos.lua
も読み込むと書かれていますが、こちらのファイルには先頭にこんなことが書かれています。
-------------------------------------------------------------------------- -- DO NOT EDIT THIS. PLEASE EDIT ~\.nyagos OR ADD SCRIPT INTO nyagos.d\ -- --------------------------------------------------------------------------
と言うわけで、おとなしく.nyagos
を書いていきましょう。
環境変数の設定
Nyaos ではset
を使って環境変数を積んでいくことが可能でした。Nyagos でもset
を使って同様のことができますが、更に簡単に書けるようになっています。
デフォルトの.nyagos
に書かれている内容を見てみましょう。
set{ PROMPT='$L'.. nyagos.getenv('COMPUTERNAME') .. ':$P$G$_$$$s' }
この中にぼんぼん設定したい環境変数をぶちこめば OK です。(ここじゃなくて別のところに書いてもいいですけど。)
今後の設定でもそうですが、何らかのパスを記載するときはLua のヒアドキュメント記法である[[ ]]
でくくるとエスケープをしなくて済むので楽ちんです。
set{ PROMPT='$L'.. nyagos.getenv('COMPUTERNAME') .. ':$P$G$_$$$s', LESS='-gj3R --no-init --quit-if-one-screen', LESSCHARSET='japanese', EDITOR=[[C:\Program Files (x86)\vim\vim74\vim.exe]] }
プロンプトの文字列や色を変更する
若干ここがややこしくなっています。
Nyaos ではoption prompt
で指定していましたが、Nyagos ではset
のPROMPT
が表示する文字列、nyagos.prompt
で色付け、となっています。
デフォルト設定だとこんな感じになってますね。
-- Simple Prompt for CMD.EXE set{ PROMPT='$L'.. nyagos.getenv('COMPUTERNAME') .. ':$P$G$_$$$s' } -- Coloring Prompt for NYAGOS.exe local prompter=nyagos.prompt nyagos.prompt = function(this) return prompter('$e[36;40;1m'..this..'$e[37;1m') end
Nyaos(もとい、_nya
)と同じ設定にする場合は、$e~;1m
の部分をnyagos.prompt
に持ってきます。
nyagos.prompt = function(this) return prompter('$e[36;40;1m'..this..'$e[37;1m') end
あとはその他の部分をset
内のPROMPT
に設定してあげれば OK です。
set{ PROMPT='[$P]$_$$ ', }
alias の設定
基本的にはマニュアルに書いてあることをよく読んで.nyagos
に書けば OK です。
デフォルトのエイリアスがnyagos.d\aliases.lua
にあるので参考にしましょう。
alias{ ls='ls -oF $*', lua_e=function(args) assert(load(args[1]))() end, ["for"]='%COMSPEC% /c "@set PROMPT=$G & @for $*"', }
私はもともと_nya
にこんなエイリアスを作ってました。
set MSYS=C:\MinGW\msys\1.0\bin alias ls=$MSYS\ls.exe --color=auto --show-control-chars alias ll=$MSYS\ls.exe -agoFh --time-style=+"%Y/%m/%d %H:%M" --color=auto --show-control-chars alias find=$MSYS\find.exe alias sjis=nkf.exe -s alias git=git --no-pager
.nyagos
に書き換えるとこんな感じですね。
local MSYS=[[C:\MinGW\msys\1.0\bin]] alias{ ls=MSYS..[[\ls.exe --color=auto --show-control-chars]], ll=MSYS..[[\ls.exe -agoFh --time-style=+"%Y/%m/%d %H:%M" --color=auto --show-control-chars]], find=MSYS..[[\find.exe]], sjis="nkf.exe -s", git="git --no-pager", }
suffix の設定
マニュアルに設定方法が書いてあります。見出しはnyagos.argsfilter
ってなってますが…。
デフォルトのサフィックスは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"}
これを見るだけでも何となくわかると思うので説明は割愛。
History の移行
Nyaos ではoption savehist
を設定することで History を保存できましたが、Nyagos ではデフォルトで保存されるようになりました。
場所は~\AppData\Roaming\NYAOS_ORG\nyagos.history
です。
Nyaos の History は先頭にタイムスタンプが付与されていましたが、Nyagos ではそれがなくなりました。
適当な正規表現でタイムスタンプを削って保存すればそれだけで移行完了です。
Lua スクリプトのロード
nyagos.lua
を読む限りloadfile
なる関数にファイルパスを突っ込めばよさそうですが、普通にnyagos.d
に Lua ファイルを入れておくのが一番いいと思います。
おまけ:gpath の移行
Nyagos には gpath がまだ実装されていません。
割と頻繁に使う機能なので是非とも欲しいのですが、そもそも Nyaos の gpath は Lua で書かれているので自分で移行してしまいます。
とは言え、流石に単純に_nya.d
からコピペしただけで移行するのは不可能なので、ちょっとだけ直します。
nyagos.alias("gpath", function(args) local argv=args local shell=nyagos.ole.create_object_utf8("WScript.Shell") local sysEnv=shell:Environment("System") local path={} for p in string.gmatch(sysEnv:Item("PATH"),"[^;]+") do table.insert( path , p ) end if argv[1] == "del" then if argv[2] then if string.match(argv[2],"^%d+$") then table.remove( path , argv[2] ) else print("gpath del [POSITION]") return end else table.remove( path ) end elseif argv[1] == "add" then if argv[2] then if argv[3] then if string.match(argv[2],"^%d+$") then table.insert( path , argv[2] , argv[3] ) else print("gpath add [POSITION] DIRECTORY") return end else table.insert( path , argv[2] ) end else print("gpath add [POSITION] DIRECTORY") return end elseif argv[1] == "swap" then local tmp1 = path[tonumber(argv[2])] local tmp2 = path[tonumber(argv[3])] if tmp1 and tmp2 then path[ tonumber(argv[2]) ] = tmp2 path[ tonumber(argv[3]) ] = tmp1 else print("gpath swap POSITION-1 POSITION-2") return end else print("Usage:") print(" gpath add [POSITION] DIRECTORY") print(" gpath del [POSITION]") print(" gpath swap POSITION-1 POSITION-2") print("") for i=1,#path do print(i,path[i]) end return end path = table.concat(path,";") sysEnv:__put__("Item","PATH",path) if sysEnv:__get__("Item","PATH") ~= path then print("Fail to set PATH="..path) end end)
どれぐらい「ちょっと」なのか diff をとってみましょう。
< nyagos.alias("gpath", function(args) < local argv=args < local shell=nyagos.ole.create_object_utf8("WScript.Shell") --- > function nyaos.command.gpath(...) > local argv={...} > local shell=nyaos.create_object("WScript.Shell") 62c62 < end) \ No newline at end of file --- > end
ざっとこんなもんです。
まとめ
と言うわけで、おおよそ 1 時間もあれば移行できました。
もっと色々カスタマイズしている人はさらに大変でしょうが頑張ってください。