nyagos で、行番号シェルつくった

多分理解されないと思うけど、あの「入力が数字から始まっていたら、即実行中ではなく記憶しておき、runとタイプされると数字順に実行する」という「古代 8bit BASIC」のシステム、 意外とコマンドラインシェルで便利かもね。nyagos の Lua で書いてみたけど、BASIC気分が味わえた。

こんなの:

f:id:zetamatta:20181103205347p:plain

if not share.basic then
    share.basic = {}
end

nyagos.filter = function(line)
    local m = string.match(line,"^%d+ ")
    if m then
        share.basic[tonumber(m)] = string.sub(line,string.len(m)+1)
        return ""
    end
    m = string.match(line,"^%d+$")
    if m then
        share.basic[tonumber(m)] = nil
        return ""
    end
end

nyagos.alias.list = function()
    local list={}
    for lnum,_ in pairs(share.basic) do
        list[ #list + 1 ] = lnum
    end
    table.sort(list)
    for i=1,#list do
        print(list[i],share.basic[list[i]])
    end
end

nyagos.alias.run = function()
    local list={}
    for lnum,_ in pairs(share.basic) do
        list[ #list + 1 ] = lnum
    end
    table.sort(list)
    for i=1,#list do
        nyagos.exec(share.basic[list[i]])
    end
end

nyagos.alias.new = function()
    share.basic = {}
end

shellbasic.lua で保存して、lua_f shellbasic.lua でロードすれば Ok