|
|
@@ -257,11 +257,20 @@ function buffer:read(...) |
|
|
|
end |
|
|
|
end |
|
|
|
else |
|
|
|
-- ????? |
|
|
|
io.write("\27[s\27[8m") |
|
|
|
local pos, buffer, hIndex = 1, "", 0 |
|
|
|
-- this whole thing is a house of cards. good luck. |
|
|
|
io.write("\27[s\27[8m\27[6n") |
|
|
|
if not (self.mx or self.my) then |
|
|
|
io.write("\27[9999;9999H\27[6n") |
|
|
|
end |
|
|
|
local pos, buffer, hIndex, sx, sy = 1, "", 0 |
|
|
|
self.history = self.history or {} |
|
|
|
local function redraw() |
|
|
|
-- scroll until the buffer will fit on the screen |
|
|
|
while sx and sy and self.mx and self.my and #buffer > (self.mx * ((self.my - sy) + 1)) - sx do |
|
|
|
sy = sy - 1 |
|
|
|
io.write("\27[9999;9999H ") |
|
|
|
io.write(string.format("\27[2K\27[%i;%iH\27[s", sx, sy)) |
|
|
|
end |
|
|
|
io.write(string.format("\27[u%s \27[u\27[%iC",buffer,(#buffer-pos)+1)) |
|
|
|
end |
|
|
|
while true do |
|
|
@@ -300,6 +309,9 @@ function buffer:read(...) |
|
|
|
end |
|
|
|
buffer = self.history[1+#self.history-hIndex] or buffer |
|
|
|
pos = 1 |
|
|
|
elseif char == "R" then -- cursor position report |
|
|
|
self.mx, self.my = sx and math.max(self.mx or 0, args[1]) or self.mx, sy and math.max(self.my or 0, args[2]) or self.my |
|
|
|
sx, sy = sx or args[1], sy or args[2] |
|
|
|
end |
|
|
|
hIndex = math.max(math.min(hIndex,#self.history),0) |
|
|
|
end |
|
|
@@ -321,7 +333,7 @@ function buffer:read(...) |
|
|
|
pos = (nc and #buffer-nc+2) or 1 |
|
|
|
elseif char == "\13" or char == "\10" or char == "\n" then -- return / newline |
|
|
|
io.write("\n") |
|
|
|
self.history[#self.history+1] = buffer |
|
|
|
self.history[#self.history+1] = buffer ~= "" and buffer ~= self.history[#self.history] and buffer or nil |
|
|
|
if #self.history > (self.maxhistory or 16) then table.remove(self.history,1) end |
|
|
|
if chop then buffer = buffer .. "\n" end |
|
|
|
return buffer |
|
|
|