NYAGOS 4.0 では、パイプライン等で実行される複数の goroutine から 同一の Lua インスタンスを呼び出すことがあり、Lua API 呼び出し時に panic を起こす問題がありました。
NYAGOS 4.1 では、それを回避するために、コマンド発行の度に別の Lua インスタンスを新規に作成して、Lua インスタンスの競合を回避し、 安定をはかりました。
ただし、別のインスタンスでは、変数・テーブル領域が完全に別になり、 このままでは nyagos.alias[] 等に代入された関数自身すら、新しい Lua インスタンス(goroutine)から見えないという問題があります。
そのため、グローバルテーブル nyagos[] 以下と share[] 以下に代入された 変数・関数については、Go言語側で保持し、新インスタンスの同テーブルより 参照できるようにしました。
とはいえ、これによって、従来稼動していた Lua スクリプトの互換性が 損われる結果となりました。NYAGOS 4.0 で動作していたスクリプトが 4.1 にて同様に動くには、下記の修正が必要です。
- 従来グローバル変数に代入していた変数を、share[] 下へ移動する
- share 直下の変数・関数は、全ての Lua インスタンス・ コマンドより参照可能
- 変更の検出は share[] の直下しかされない。つまり
share.foo = { '1','2','3' }
は OK だが、share.foo[1] = 'x'
という変更は階層が一つ深いため、 データ本体まで修正が届かない。正しく、反映するためには 下記のように、テーブル全体を出し入れする必要がある。
local t = share.foo
t[1] = 'x'
share.foo = t
nyagos.alias[]
,nyagos.on_command_not_found
には代入できるのは 関数だけで、クロージャーは代入できない- つまり、local 宣言された変数も参照できない
nyagos.prompt
も同様だが、改善を検討中
(4017.05.13)
- Fix #214: .nyagos でのバッチ実行時に
main/lua_cmd.go: cmdExec: not found interpreter object
と表示される
(2017.04.03)
- Fix #191:
-c
オプションがoption parse error
を表示していた。 - 昇格していたら true を返す Lua 関数
nyagos.elevated()
- デフォルトのタイトルバーは昇格時に
(admin)
と表示
(2017.03.28)
- Fix: 4.1.9_0 の一行入力でカーソルが時々見えなくなる問題を修正
- 新go-colorableの機能で、 でコマンドプロンプトのタイトルを変更するエスケープシーケンス
\033]0;タイトル\007
が使えるようになった。
(2017.03.27)
- Fix:
open http(s)://...
が機能しなかった不具合を修正 cd file:///...
をサポート- ALT-y: クリップボード文字列が空白を含んでいる時、二重引用符で囲んでペースト
- ファイル名補完の一覧表示で、フルパスのうちのディレクトリ部分を省くようにした
history
コマンドで「!」マークで使用する ID を表示していなかった- %NYAGOSPATH% にあるコマンドも補完されるようにした。
- 補完で環境変数を展開しないようにした。
- 補完で
~/
や~\
を二重引用符で囲まないようにした。 ;
や=
の前の文字列は補完では無視するようにした(setコマンド用)- ファイル名の大文字・小文字の補正をしないことによる、プロンプトのカレントディレクトリの取得速度の改善
- 二重引用符無しでも
cd C:\Program Files
が機能するようにした - cd /D を機能するようにした(#182 CMD.EXE との互換性のため /D オプションは無視される)
history
で時間順にソートするようにしたopen regedit
を機能させるため、open
でのファイル存在チェックを省くclone
,su
,sudo
: ネットワークフォルダーで失敗させないよう、シンボリックリンクの宛先パスで ShellExecute を行うようにした (#122)- set の動作を CMD.EXE 互換とした(
set FOO=A B
がset FOO="A B"
と同じ) - #184
_nyagos
内で逆クォートが効かなかった不具合を修正 _nyagos
:bindkey KEYNAME FUNCNAME
を実装- CMD.EXE と同様の
%環境変数名:被置換文字列=置換文字列%
をサポート - インクリメンタルサーチで ESCAPE キーを検索モード終了に割り当てた。
- カーソル選択型補完(選択用の内蔵コマンド box を新設)
- Ctrl-O : カーソルで選択したファイル名を挿入する (by box.lua)
- Ctrl-XR , Alt-R : カーソルで選択したヒストリを挿入する (by box.lua)
- Ctrl-XG , Alt-G : カーソルで選択したGit Revisionを挿入する(by box.lua)
- Ctrl-XH , Alt-H : カーソルで選択した過去に移動したディレクトリを挿入する(by box.lua)
lua_e "nyagos.key = function(this) end"
というキーアサインをサポート
(2017.02.15)
- COMMAND.COMバッチ風の新カスタマイズファイルとして
_nyagos
を用意 - Fix #173
ls
や内蔵コマンドを Ctrl-C で止められるようになった - ls -h のファイルサイズを 1K,2M 等ではなく、カンマ区切りの数値とした
- nyagos.lines(FILENAME,"n") を実装した(ただし、実数ではなく整数)
- nyagos.exe の中だけで機能する %PATH% 的な環境変数 %NYAGOSPATH% を追加
- vim のような SET VAR+=VALUE , VAR^=VALUE をサポート
- Fix #176
gawk "BEGIN{ print substr(""%01"",2) }"
がエラーになっていた - アイコンを付けるのに、windres.exe ではなく github.com/josephspurrier/goversioninfo を使うようにした
- command.com と同程度の
if
をサポート(==
,not
,errorlevel
,/I
) - alias に新マクロを追加
$~1
$~2
...$~*
(前後の二重引用符を削除する) - カレントディレクトリ,時刻,PID もヒストリに記録するようにした (#112)
- ls -l: タイムスタンプのフォーマットを 'Jan 2 15:04:05' or 'Jan 2 2006'へ変更
- lua53.dll が無い時、スタックトレースではなくエラーを表示するようにした
- '#' 以降をコメントとみなすようにした
- open,clone,su,sudo を Lua から Go に書き直した
(2016.11.29)
- nyagos.lua を廃止した。その役割は nyagos.exe 自身が担うようにした。
~/.nyagos
を%APPDATA%\NYAOS_ORG/dotnyagos.luac
にキャッシングnyagos.d/*
を nyagos.exe 自体にバンドルするようにした- Fix #167 相対パスにシンボリックリンクされた実行ファイルが動かなかった
- Fix
ls -l
でリンクされた実行ファイルに @ とリンク先が表示されていなかった - Fix su.lua: clone/su で文字化けしたパスが表示されていた
- Fix #168
ls 相対パスのシンボリックリンク
がエラーになっていた - Fix
ls -lh
の時のファイルサイズの表示幅がおかしくなっていた ls -oFh
をデフォルトの ls のエイリアスにしたhistory
で標準出力が端末ではない時、全行を出力するようにしたopen
で複数のファイルが指定された時にプロンプトを表示するようにしたuse "cho"
→ cho 向け拡張 * C-r: ヒストリ * C-o: ファイル名 * M-h: ディレクトリヒストリ * M-g: Git のリビジョン名- Fix: {a,b,c} といったブレース展開が、引用符の中でも機能していた不具合を修正
(2016.09.07)
- Fix: パッケージの ZIP ファイルに lua53.dll が含まれていなかった。
(2016.09.07)
- スペースとバックスペースで行っていた行末削除に "\x1B[0K" を使うようにした
- m回のバックスペースに "\x1B[mC" を使うようにした。
- Fix #159: 端末幅を変更した時にプロンプトから再表示していたのを廃止
- Fix #164:
cd --history
でカレントディレクトリがホームに移動していた - stat 取得の成否にかかわらず、
[\\/:]\.{0,2}$
にマッチする宛先パスをディレクトリとみなすようにした。
(2016.07.31)
- Fix #157++: 端末サイズ変更後、追記でズレる不具合を修正
- 4.0.x の不適切なデフォルト ~/.nyagos 向けに、prompter という名前の上位値がクロージャ(nyagos.prompt)で使われていたらエラーにするようにした (#155,#158)
(2016.07.31)
- カレントディレクトリのヒストリがゼロの時に peco がハングしないように、
cd --history
の先頭にカレントディレクトリを出力するようにした。 - Luaで
nyagos.option.glob = true
とすると、外部コマンドでもワイルドカード展開するようにした。(#150) - source の互換性改善を試みた
- nyagos.lines(FILENAME,X) の X='a','l','L',数値のサポート(#147)
- Fix #156: %U+0000% でパニックが発生する
- Fix #152: 「ls -ld Downloads\」の結果が「Downloads/」となる
- Fix #157: 端末サイズ変更時の、一行入力の表示幅を再設定するようにした
- 内蔵パッケージを別レポジトリヘ外出し
(2016.06.12)
&&
や||
が;
と等価になっていた不具合を修正(#151)- @DeaR さん提供の autocd.lua & autols.lua を nyagos.d/catalog に追加(#149)
(2016.05.29)
- 簡易OLEインターフェイスを実装した。NYOLE.DLL は不要になった。
- デフォルトのプロンプト表示関数を
nyagos.default_prompt
と定義し、第二引数で端末タイトルを変更できるようにした - Fix: nyagos.lines() が改行を削除していなかった
- Fix: Lua のデフォルトファイルハンドル(標準入出力)がバイナリモードでオープンされていた(#146)
- nyagos.d/catalog/peco.lua: C-r: 表示順を反転させて、速度を改善した。
(2016.05.08)
- Fix: ヒストリがファイルに保存されない #138
- Fix: nyagos.history を削除すると、exit で終了するまで警告が出続ける
- Fix: nyagos.d/catalog/peco.lua: nyagos.history が存在しないと、peco がハングする
(2016.05.05)
- Add:
nyagos.open(PATH,MODE)
UTF8版io.open
- Add:
nyagos.loadfile(PATH)
UTF8版loadfile
- Add:
nyagos.lines(PATH)
UTF8版io.lines
(注意:戻り値はバイト列、ファイル名だけがUTF8指定になった) - 内蔵
echo
の改行コードとして LF ではなく CRLF を使うようにした (#124) - Lua のデフォルト入出力を NYAGOS のリダイレクトに追随させるようにした
- touch コマンドに -r と -t オプションを実装した
- touch コマンドで簡易日時フォーマットチェックを入れた
make install
でログを残して、3秒後にインストール窓を閉じるようにした(#107)nyagos < TEXTFILE
が利用可能になった (#125)- {conio,dos}/const.go を再作成するのに lua.exe,findstr.exe は不要になった
- 標準エイリアス suffix が機能していなかった
- カレントドライブがネットワークドライブでも、
su
は新しい管理者モード nyagos を同じ UNC-Path でディレクトリで起動させられるようにした。 nyagos -c 'CMD'
で CMD はnyagos.lua
の後に実行するようにした。nyagos -[cfe] "..."や
nyagos < TEXTFILE` では著作権表示を出さないようにした- Fix:
make install DIR
が次回のmake install
向けに DIR をセーブしていなかった。 - Fix: nyagos.exe が日本語フォルダーに置いてある時、nyagos.lua をロードできていなかった。
- Fix: nyagos.d/catalog/subcomplete.lua が 4.1 以降で動かなくなっていた (#135)
- エスケープシーケンスエミュレータをgithub.com/mattn/go-colorable に変更 (#137)
- Fix:
ls -ltr *
で時系列でソートされていなかった (#136) - nyagos -f で拡張子が .lua で無い時、シェルコマンドが格納されたファイルと解釈するようにした
- ANSI文字列とUTF8文字列の混乱を避けるため、print でエスケープシーケンス入りの UTF8 文字列出力を廃止した。print は lua53.dll 内蔵のもののままとなった( #129 )
(2016.03.29)
- スクリプトのカタログシステムを作った
- スクリプト
catalog.d\*.lua
をnyagos.d\catalog\.
へ移動 - カタログのスクリプトを .nyagos より
use "NAME"
で利用できるようにしたuse "dollar"
→$PATH
形式で環境変数を展開use "peco"
→ peco 向け拡張- C-r: ヒストリ
- C-o: ファイル名
- M-h: ディレクトリヒストリ
- M-g: Git のリビジョン名
- スクリプト
- ls
- 壊れたシンボリックリンクがあっても ls は中断しないようにした。
ls -d
をサポート
- .nyagos を nyagos.exe と同じディレクトリに置けるようにした。
- cd のヒストリ全てを
cd --history
で出せるようにした - 組込みの簡易
touch
コマンドを実装 - ファイルが存在しない時に、>> が失敗する不具合を修正
- Lua関数の第一パラメータテーブルのメンバに rawargs を追加 (ユーザ入力文字列から引用符が削除されていない文字列を格納したテーブル)
- bindkeyのコールバック関数の引数テーブルに
replacefrom
メソッドを追加
(2016.02.17)
- Lua の loadfile 等を呼ぶ際に UTF8 を ANSI へコンバートしていなかった不具合を修正 (#110,Thx Mr.HABATA)
(2016.02.16)
- プロンプトが長すぎる時、強制的に改行するようにした (#104)
- ls でワイルドカードがマッチしない時のメッセージを修正 (#108)
- %ProgramFiles(x86)%のような環境変数が展開できてなかった点を修正(#109,Thx @hattya)
(2016.01.15)
- キー入力で UTF16 のサロゲートペアをサポート
- mkdirに必要に応じて親ディレクトリを作成する /p オプションを追加
(2016.01.03)
- 内蔵コマンド ln を追加
- Lua コマンド lns を追加 (UACを表示後、
ln -s
を実行する) ls -l
でシンボリックリンクの宛先を表示- あるファイルでcopy/move 時に失敗した時、以降のファイルを続けるか問合せるようにした。
- 新変数:
nyagos.histchar
: ヒストリ置換文字(デフォルト「!
」)- ヒストリ置換を完全に無効にする場合、
nyagos.histchar = nil
- ヒストリ置換を完全に無効にする場合、
- 新変数:
nyagos.antihistquot
: ヒストリ置換を抑制する引用符(デフォルト「'"
」)- 【注意】
"!!"
は「デフォルト」では置換されなくなりました - 4.0互換にするには
nyagos.antihistquot = [[']]
とする
- 【注意】
- 新変数:
nyagos.quotation
: 補完でのデリミタ文字(デフォルト「"'
」)。nyagos.quotation
の最初の文字がデフォルトの引用符となる。- 二番目以降の文字は、ユーザが補完前に使用していた場合に採用される
nyagos.quotation=[["']]
の場合C:\Prog[TAB]
→"C:\Program Files\
("
が挿入される)'C:\Prog[TAB]
→'C:\Program Files\
('
が維持される)"C:\Prog[TAB]
→"C:\Program Files\
("
が維持される)
(2015.12.13)
- クラッシュ回避のため、全てのLua のコールバック関数はそれぞれの Lua インスタンスを持つようにした。
- コールバック関数と .nyagos 間で値を共有するため、テーブル share[] を作った
*.wsf
を cscript に関連付けたnyagos[]
への不適切な代入を警告するようにした。