標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

何回、多重に nyagos が起動しているかをプロンプトで表示させる

Lua のテストで nyagos を起動すると、 exit が要るかどうか、よく分からなくなるので。

次のようなコードを .nyagos へ追加した。

nyagos.env.NYAGOS_RECURSE = tostring( tonumber( nyagos.env.NYAGOS_RECURSE or "0") + 1 )

nyagos.env.prompt = '[' .. nyagos.env.NYAGOS_RECURSE .. '] ' ..
    '$L'.. (nyagos.env.COMPUTERNAME or "") .. ':$P$G$_$$$s'

今回は nyagos.prompt フックを横取りするようなことはせず、単純に環境変数 PROMPT の文字列を変更するだけに留めた。

nyagos のネスト回数は、環境変数 NYAGOS_RECURSE に記録するようにした。未定義ならゼロ扱いとする。

結果は次のとおり:

[1] <DESKTOP-NPOTG52:~>
$ nyagos
Nihongo Yet Another GOing Shell 4.4.14_0-75-g85cf058e-windows-amd64 by go1.20.14
(c) 2014-2024 NYAOS.ORG <https://github.com/nyaosorg/nyagos>
loadfile C:\Users\hymkor\share\bin\.nyagos
start ~\share\bin\.nyagos
loadfile C:\Users\hymkor\Share\etc\gmnlisp_.lua
loadfile C:\Users\hymkor\Share\etc\complete-jj.lua
done amd64/.nyagos
[2] <DESKTOP-NPOTG52:~>
$

余談 (1)

nyagos.env は環境変数の読み書きをするために設けられたが、「現在は」 Lua 標準関数の os.getenv を使っても問題ない。これは LuaインタプリタGopherLua にしたからだ。

昔のnyagos は LuaBinaries の lua54.dll を使っていたので、os.getenv を使うと得られる値がANSI(非UTF8)となってしまう。それを避けるため nyagos.env を作った。1

余談 (2)

Perl の経験があると、Lua を書くとき、よく脳が混線してしまう

  • 文字列連結演算子..
    • Perl では . だったりするので、書く度に .. で良かったか、一瞬躊躇する (だいたいギリギリセーフ)
  • 比較演算子~= (!= 相当)
    • Perl には、正規表現=~ という演算子があるので、癖で =~ と書いてしまう (だいたい手遅れ)

困ったもんだ。


  1. 書いてしばらくしてから気付いたが、Lua標準には setenv 的な環境変数を変更する関数もなかったので、どっちにしても nyagos.env は必要だったね (Lua標準setenv がないのは、ANSI-C にも環境変数を参照する関数はあっても、変更する関数がないため)