Lua - 在交互式终端会话期间刷新输入缓冲区

时间:2015-06-05 15:04:57

标签: lua

所以我得到了这个用于处理终端中交互式用户输入的lua测试脚本。它按预期工作,除了我无法找到在io.read(1)调用之间清除输入缓冲区的方法。

在你说之前,不,curses不是一个选项,也不是任何第三方库。这个脚本(当它完成时)将在具有固定固件的嵌入式设备上使用,因此纯lua是唯一的选择。

代码:


    UP = 65
    DOWN = 66
    RIGHT = 67
    LEFT = 68

    local function sleep(seconds)
        os.execute("sleep " .. tonumber(seconds));
    end

    local function write(String)
        io.write(String);
        io.flush();
    end

    local key = {
        [27] = function()
            group = (io.read(1)):byte();
            if group == 91 then
                direction = (io.read(1)):byte();
                if direction == UP then return write("Up") end
                if direction == DOWN then return write("Down") end
                if direction == RIGHT then return write("Right") end
                if direction == LEFT then return write("Left") end
                return write("("..direction..")");
            end
            return write("("..direction..")");
        end,
        [113] = function() running = false end

    }

    running = true;
    os.execute("stty raw -echo");
    while running do
        local k = io.read(1);
        if k == 'w' then break end
        k = k:byte();
        if key[k] then key[k]();
            else write('('..k..')') end
        sleep(.25);
        -- while io.read(1) ~= nil do end  -- This blocks indefinitely
    end
    os.execute("stty sane")

0 个答案:

没有答案