mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-18 11:48:02 -04:00
term wrapping and sh tab completion fixes
term wrapping fixes Backspacing or deleting during vertical wrap would not update the current end of line correctly what the text was being pulled from the next line horizontal wrapping deletion was not using dx,dy and instead was removing text from absolute positions on the screen horizontal wrapping was pushing spaces beyond the windowed areas
This commit is contained in:
parent
9535cad412
commit
a9233e5bfc
@ -482,7 +482,7 @@ function --[[@delayloaded-start@]] sh.getMatchingPrograms(baseName)
|
|||||||
baseName = "^(" .. text.escapeMagic(baseName) .. ".*)%.lua$"
|
baseName = "^(" .. text.escapeMagic(baseName) .. ".*)%.lua$"
|
||||||
end
|
end
|
||||||
for basePath in string.gmatch(os.getenv("PATH"), "[^:]+") do
|
for basePath in string.gmatch(os.getenv("PATH"), "[^:]+") do
|
||||||
for file in fs.list(basePath) do
|
for file in fs.list(shell.resolve(basePath)) do
|
||||||
local match = file:match(baseName)
|
local match = file:match(baseName)
|
||||||
if match and not result_keys[match] then
|
if match and not result_keys[match] then
|
||||||
table.insert(result, match)
|
table.insert(result, match)
|
||||||
|
@ -149,6 +149,7 @@ function term.internal.build_vertical_reader(input)
|
|||||||
local win=_.w
|
local win=_.w
|
||||||
local oi,w,h,dx,dy,ox,oy = _.index,term.getViewport(win)
|
local oi,w,h,dx,dy,ox,oy = _.index,term.getViewport(win)
|
||||||
_:move(math.huge)
|
_:move(math.huge)
|
||||||
|
_:move(-1)
|
||||||
local ex,ey=win.x,win.y
|
local ex,ey=win.x,win.y
|
||||||
win.x,win.y,_.index=ox,oy,oi
|
win.x,win.y,_.index=ox,oy,oi
|
||||||
x=oy==ey and ox or 1
|
x=oy==ey and ox or 1
|
||||||
@ -161,7 +162,7 @@ function term.internal.build_vertical_reader(input)
|
|||||||
local ndata
|
local ndata
|
||||||
if arg < 0 then if _.index<=0 then return end
|
if arg < 0 then if _.index<=0 then return end
|
||||||
_:move(-1)
|
_:move(-1)
|
||||||
ndata=unicode.wtrunc(s1,unicode.wlen(s1))..s2
|
ndata=unicode.sub(s1,1,-2)..s2
|
||||||
else if _.index>=unicode.len(_.data) then return end
|
else if _.index>=unicode.len(_.data) then return end
|
||||||
s2=unicode.sub(s2,2)
|
s2=unicode.sub(s2,2)
|
||||||
ndata=s1..s2
|
ndata=s1..s2
|
||||||
@ -324,12 +325,11 @@ function term.drawText(value, wrap, window)
|
|||||||
local wlen_remaining = w - x + 1
|
local wlen_remaining = w - x + 1
|
||||||
local clean_end = ""
|
local clean_end = ""
|
||||||
if wlen_remaining < wlen_needed then
|
if wlen_remaining < wlen_needed then
|
||||||
if type(wrap)=="number" then
|
next = unicode.wtrunc(next, wlen_remaining + 1)
|
||||||
next,wlen_needed,slen = term.internal.horizontal_push(x,y,window,wrap,next)
|
wlen_needed = unicode.wlen(next)
|
||||||
else
|
clean_end = (" "):rep(wlen_remaining-wlen_needed)
|
||||||
next = unicode.wtrunc(next, wlen_remaining + 1)
|
if not wrap then
|
||||||
wlen_needed = unicode.wlen(next)
|
si = math.huge
|
||||||
clean_end = (" "):rep(wlen_remaining-wlen_needed)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
gpu.set(x+dx,y+dy,next..clean_end)
|
gpu.set(x+dx,y+dy,next..clean_end)
|
||||||
@ -395,17 +395,6 @@ function --[[@delayloaded-start@]] term.internal.ctrl_movement(input, dir)
|
|||||||
return last - index
|
return last - index
|
||||||
end --[[@delayloaded-end@]]
|
end --[[@delayloaded-end@]]
|
||||||
|
|
||||||
function --[[@delayloaded-start@]] term.internal.horizontal_push(x,y,win,wrap,next)
|
|
||||||
local gpu,w,h,dx,dy = win.gpu,term.getViewport(win)
|
|
||||||
local wlen_needed = unicode.wlen(next)
|
|
||||||
local next_width = math.min(wlen_needed, w - wrap)
|
|
||||||
next = unicode.sub(next, -next_width)
|
|
||||||
wlen_needed = unicode.wlen(next)
|
|
||||||
local xdiff = x - (w - wlen_needed)
|
|
||||||
gpu.copy(wrap+xdiff+dx,y+dy,x-(wrap+xdiff),1,-xdiff,0)
|
|
||||||
return next,wlen_needed,#next
|
|
||||||
end --[[@delayloaded-end@]]
|
|
||||||
|
|
||||||
function --[[@delayloaded-start@]] term.internal.onTouch(input,gx,gy)
|
function --[[@delayloaded-start@]] term.internal.onTouch(input,gx,gy)
|
||||||
input:move(math.huge)
|
input:move(math.huge)
|
||||||
local x2,y2,d = input.w.x,input.w.y,input.w.w
|
local x2,y2,d = input.w.x,input.w.y,input.w.w
|
||||||
@ -418,7 +407,7 @@ function --[[@delayloaded-start@]] term.internal.build_horizontal_reader(input)
|
|||||||
local w,h,dx,dy,x,y = term.getViewport(_.w)
|
local w,h,dx,dy,x,y = term.getViewport(_.w)
|
||||||
local s1,s2=term.internal.split(_)
|
local s1,s2=term.internal.split(_)
|
||||||
local wlen = math.min(unicode.wlen(s2),w-x+1)
|
local wlen = math.min(unicode.wlen(s2),w-x+1)
|
||||||
_.w.gpu.fill(x,y,wlen,1," ")
|
_.w.gpu.fill(x+dx,y+dy,wlen,1," ")
|
||||||
end
|
end
|
||||||
input.move = function(_,n)
|
input.move = function(_,n)
|
||||||
local win = _.w
|
local win = _.w
|
||||||
@ -431,7 +420,7 @@ function --[[@delayloaded-start@]] term.internal.build_horizontal_reader(input)
|
|||||||
_:scroll()
|
_:scroll()
|
||||||
end
|
end
|
||||||
input.draw = function(_,text)
|
input.draw = function(_,text)
|
||||||
term.drawText(text,_.promptx)
|
term.drawText(text,false)
|
||||||
end
|
end
|
||||||
input.scroll = function(_)
|
input.scroll = function(_)
|
||||||
local win = _.w
|
local win = _.w
|
||||||
@ -450,9 +439,8 @@ function --[[@delayloaded-start@]] term.internal.build_horizontal_reader(input)
|
|||||||
data = unicode.sub(data,1,i)
|
data = unicode.sub(data,1,i)
|
||||||
local rev = unicode.reverse(data)
|
local rev = unicode.reverse(data)
|
||||||
local ending = unicode.wtrunc(rev, available+1)
|
local ending = unicode.wtrunc(rev, available+1)
|
||||||
local cut_wlen = unicode.wlen(data) - unicode.wlen(ending)
|
|
||||||
data = unicode.reverse(ending)
|
data = unicode.reverse(ending)
|
||||||
gpu.set(sx,sy,data..blank:rep(cut_wlen))
|
gpu.set(sx,sy,data..blank)
|
||||||
win.x=math.min(w,_.promptx+unicode.wlen(data))
|
win.x=math.min(w,_.promptx+unicode.wlen(data))
|
||||||
elseif x < _.promptx then
|
elseif x < _.promptx then
|
||||||
data = unicode.sub(data,_.index+1)
|
data = unicode.sub(data,_.index+1)
|
||||||
@ -467,7 +455,7 @@ function --[[@delayloaded-start@]] term.internal.build_horizontal_reader(input)
|
|||||||
local gpu,data,px=win.gpu,_.data,_.promptx
|
local gpu,data,px=win.gpu,_.data,_.promptx
|
||||||
local w,h,dx,dy,x,y = term.getViewport(win)
|
local w,h,dx,dy,x,y = term.getViewport(win)
|
||||||
_.index,_.data,win.x=0,"",px
|
_.index,_.data,win.x=0,"",px
|
||||||
gpu.fill(px+dx,y+dy,w-px+1,1," ")
|
gpu.fill(px+dx,y+dy,w-px+1-dx,1," ")
|
||||||
end
|
end
|
||||||
end --[[@delayloaded-end@]]
|
end --[[@delayloaded-end@]]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user