add proper support for \b and \r. ignore \15

closes #2971
This commit is contained in:
payonel 2018-10-29 21:59:58 -07:00
parent ad8218a2ea
commit e7eddad588

View File

@ -103,7 +103,7 @@ function tty.stream:write(value)
local x, y = tty.getCursor() local x, y = tty.getCursor()
local _, ei, delim = unicode.sub(window.output_buffer, 1, window.width):find("([\27\t\r\n\a])") local _, ei, delim = unicode.sub(window.output_buffer, 1, window.width):find("([\27\t\r\n\a\b\15])")
local segment = ansi_print .. (ei and window.output_buffer:sub(1, ei - 1) or window.output_buffer) local segment = ansi_print .. (ei and window.output_buffer:sub(1, ei - 1) or window.output_buffer)
if segment ~= "" then if segment ~= "" then
@ -132,9 +132,13 @@ function tty.stream:write(value)
if delim == "\t" then if delim == "\t" then
x = ((x-1) - ((x-1) % 8)) + 9 x = ((x-1) - ((x-1) % 8)) + 9
elseif delim == "\r" or (delim == "\n" and not window.cr_last) then elseif delim == "\r" then
x = 1
elseif delim == "\n" then
x = 1 x = 1
y = y + 1 y = y + 1
elseif delim == "\b" then
x = x - 1
elseif delim == "\a" and not beeped then elseif delim == "\a" and not beeped then
computer.beep() computer.beep()
beeped = true beeped = true
@ -143,7 +147,6 @@ function tty.stream:write(value)
end end
tty.setCursor(x, y) tty.setCursor(x, y)
window.cr_last = delim == "\r"
end end
return cursor.sy return cursor.sy
end end