From 2a5de6868afaf55a849de47a57c686fef23130b1 Mon Sep 17 00:00:00 2001 From: payonel Date: Sat, 30 Jul 2016 22:33:28 -0700 Subject: [PATCH] some fixes learned from btm for term, grep, and devfs using buffers for term stream string (used in devfs) simulate enter key and split clipboards on multiline paste delay proxy calls to eeprom until actually using /dev/eeprom all reads on /dev/null (returns nil) fix grep using ^ --- .../opencomputers/loot/openos/bin/grep.lua | 2 +- .../loot/openos/boot/10_devfs.lua | 18 +++++++++++++++--- .../opencomputers/loot/openos/lib/devfs.lua | 18 ++---------------- .../opencomputers/loot/openos/lib/term.lua | 15 ++++++++++++++- .../opencomputers/loot/openos/lib/text.lua | 4 ++-- .../openos/lib/tools/devfs/eeprom-data.lua | 4 ---- .../loot/openos/lib/tools/devfs/eeprom.lua | 4 ---- .../loot/openos/lib/tools/devfs/null.lua | 4 +--- 8 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/main/resources/assets/opencomputers/loot/openos/bin/grep.lua b/src/main/resources/assets/opencomputers/loot/openos/bin/grep.lua index 9015b4fc6..7ec81a96e 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/bin/grep.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/bin/grep.lua @@ -291,7 +291,7 @@ local function test(m,p) write("\n") empty_line = true needs_filename, needs_line_num = include_filename, print_line_num - elseif p:find("^^") then break end + elseif p:find("^^") and not plain then p="^$" end end if not empty_line then write("\n") end end diff --git a/src/main/resources/assets/opencomputers/loot/openos/boot/10_devfs.lua b/src/main/resources/assets/opencomputers/loot/openos/boot/10_devfs.lua index 3cb2c8604..17536849e 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/boot/10_devfs.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/boot/10_devfs.lua @@ -1,8 +1,20 @@ require("filesystem").mount( setmetatable({ - isReadOnly = function()return false end, - address = require("uuid").next() + address = "f5501a9b-9c23-1e7a-4afe-4b65eed9b88a" }, { - __index=function(tbl,key)return require("devfs")[key]end + __index=function(tbl,key) + local pass + local passthrough = function() return pass end + if key == "getLabel" then + pass = "devfs" + elseif key == "spaceTotal" or key == "spaceUsed" then + pass = 0 + elseif key == "isReadOnly" then + pass = false + else + return require("devfs")[key] + end + return passthrough + end }), "/dev") diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/devfs.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/devfs.lua index 8848173cf..96518d8be 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/devfs.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/devfs.lua @@ -191,22 +191,10 @@ local devfs = new_devfs_dir() local bfd = "bad file descriptor" -function devfs.getLabel() - return "devfs" -end - function devfs.setLabel(value) error("drive does not support labeling") end -function devfs.spaceTotal() - return 0 -end - -function devfs.spaceUsed() - return 0 -end - function devfs.makeDirectory(path) return false, "to create dirs in devfs use devfs.create" end @@ -284,9 +272,7 @@ end devfs.create("null", devfs_load("null")) devfs.create("random", devfs_load("random")) -if comp.isAvailable("eeprom") then - devfs.create("eeprom", devfs_load("eeprom")) - devfs.create("eeprom-data", devfs_load("eeprom-data")) -end +devfs.create("eeprom", devfs_load("eeprom")) +devfs.create("eeprom-data", devfs_load("eeprom-data")) return devfs diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/term.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/term.lua index 5f825c6e2..bbca7e583 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/term.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/term.lua @@ -261,7 +261,7 @@ function term.readKeyboard(ops) if name == "touch" or name == "drag" then term.internal.onTouch(input,char,code) elseif name == "clipboard" then - c = char + c = term.internal.clipboard(char) hints.cache = nil elseif name == "key_down" then hints.cache = nil @@ -632,6 +632,19 @@ end --[[@delayloaded-end@]] function --[[@delayloaded-start@]] term.getGlobalArea(window) local w,h,dx,dy = term.getViewport(window) return dx+1,dy+1,w,h +end --[[@delayloaded-end@]] + +function --[[@delayloaded-start@]] term.internal.clipboard(char) + local first_line, end_index = char:find("\13?\10") + if first_line then + local after = char:sub(end_index + 1) + if after ~= "" then + require("computer").pushSignal("key_down", term.keyboard(), 13, 28) + require("computer").pushSignal("clipboard", term.keyboard(), after) + end + char = char:sub(1, first_line - 1) + end + return char end --[[@delayloaded-end@]] return term, local_env diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/text.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/text.lua index 26cf6921f..5ab838d0c 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/text.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/text.lua @@ -334,7 +334,7 @@ function --[[@delayloaded-start@]] text.internal.reader(txt) end, } - return reader + return require("buffer").new("r", reader) end --[[@delayloaded-end@]] function --[[@delayloaded-start@]] text.internal.writer(ostream, append_txt) @@ -374,7 +374,7 @@ function --[[@delayloaded-start@]] text.internal.writer(ostream, append_txt) end, } - return writer + return require("buffer").new("w", writer) end --[[@delayloaded-end@]] return text, local_env diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/eeprom-data.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/eeprom-data.lua index 2aea1a0ef..c7da72c91 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/eeprom-data.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/eeprom-data.lua @@ -1,10 +1,6 @@ local comp = require("component") local text = require("text") -if not comp.isAvailable("eeprom") then - return nil -end - return { open = function(mode) diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/eeprom.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/eeprom.lua index dbc9ceafb..4197b9881 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/eeprom.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/eeprom.lua @@ -1,10 +1,6 @@ local comp = require("component") local text = require("text") -if not comp.isAvailable("eeprom") then - return nil -end - return { open = function(mode) diff --git a/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/null.lua b/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/null.lua index c3710917a..6d46610ef 100644 --- a/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/null.lua +++ b/src/main/resources/assets/opencomputers/loot/openos/lib/tools/devfs/null.lua @@ -1,11 +1,9 @@ return { open = function(mode) - if not mode or not mode:match("[wa]") then - return nil, "write only" - end return { + read = function() end, write = function() end } end