標準愚痴出力

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

Lisp を nyagos のコマンドラインから直接実行する Lua アドオン

前回、nyagos のコマンドラインecho $(+ 1 2 (* 3 4)) といった形で、Lisp コードを埋め込めるようにしたわけだが、電卓用途に使う時 echo $ を打つのさえ面倒くさくなった。

コマンドライン( で始まっている場合は

  • 全ての行を gmnlisp で評価するようにした
  • 評価した値は画面に表示し、コマンドラインには別に埋め込まない (実行するだけ)

という形ににしてみた。

gmnlisp_.lua

if not nyagos then
    print("This is a script for nyagos not lua.exe")
    os.exit()
end

share.org_filter_for_gmnlisp = nyagos.filter
nyagos.filter = function(cmdline)
    if string.sub(cmdline,1,1) == '(' then
        cmdline = string.gsub(cmdline,'"','\\"')
        cmdline = string.format('gmnlisp -e "(format t \\\"~a\\\" %s)"', cmdline)
        nyagos.exec(cmdline)
        print()
        return ""
    end
    cmdline = string.gsub(cmdline,'$%b()', function(code)
        code = string.sub(code,2)
        code = string.gsub(code,'"','\\"')
        code = string.format('gmnlisp -e "(format t \\\"~a\\\" %s)"', code)
        return nyagos.eval(code)
    end)
    if share.org_filter_for_gmnlisp then
        local cmdline_ = share.org_filter_for_gmnlisp(cmdline)
        if cmdline_ then
            cmdline = cmdline_
        end
    end
    return cmdline
end

nyagos を再起動して読み込む (読み込み方は前回分参照)

$ (+ 1 2 (* 3 4))
15
$ (cons 1 2)
(1 . 2)
$

よしよし