mirror of
https://github.com/LDDestroier/CC/
synced 2025-02-01 11:49:10 +00:00
Update windont-shell.lua
This commit is contained in:
parent
ba251ebbf4
commit
079c4504cc
@ -13,6 +13,7 @@ end
|
|||||||
local windont = require "windont"
|
local windont = require "windont"
|
||||||
|
|
||||||
windont.default.alwaysRender = false
|
windont.default.alwaysRender = false
|
||||||
|
windont.useSetVisible = true
|
||||||
|
|
||||||
local scr_x, scr_y = term.getSize()
|
local scr_x, scr_y = term.getSize()
|
||||||
local keysDown = {}
|
local keysDown = {}
|
||||||
@ -62,7 +63,7 @@ local FocusEvents = {
|
|||||||
["char"] = true,
|
["char"] = true,
|
||||||
["monitor_touch"] = true,
|
["monitor_touch"] = true,
|
||||||
["paste"] = true,
|
["paste"] = true,
|
||||||
["terminate"] = true,
|
["terminate"] = true
|
||||||
-- mouse_scroll is intentionally excluded
|
-- mouse_scroll is intentionally excluded
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,8 +143,10 @@ local resumeInstance = function(i, _evt, isCoordinateEvent)
|
|||||||
end
|
end
|
||||||
oldTerm = term.redirect(instances[i].termWindow)
|
oldTerm = term.redirect(instances[i].termWindow)
|
||||||
success, result = coroutine.resume(instances[i].coroutine, table.unpack(evt))
|
success, result = coroutine.resume(instances[i].coroutine, table.unpack(evt))
|
||||||
|
instances[i].program = shell.getRunningProgram()
|
||||||
|
instances[i].setTitle()
|
||||||
term.redirect(oldTerm)
|
term.redirect(oldTerm)
|
||||||
if success then
|
if success and coroutine.status(instances[i].coroutine) ~= "dead" then
|
||||||
instances[i].cFilter = result
|
instances[i].cFilter = result
|
||||||
else
|
else
|
||||||
instances[i].alive = false
|
instances[i].alive = false
|
||||||
@ -162,6 +165,7 @@ local newInstance = function(x, y, width, height, program, pName, addBorder)
|
|||||||
output.termWindow = windont.newWindow(1, 2, width, height, {
|
output.termWindow = windont.newWindow(1, 2, width, height, {
|
||||||
baseTerm = output.mainWindow,
|
baseTerm = output.mainWindow,
|
||||||
alwaysRender = false,
|
alwaysRender = false,
|
||||||
|
blink = false
|
||||||
})
|
})
|
||||||
output.oldTermPos = {1, 2, width, height}
|
output.oldTermPos = {1, 2, width, height}
|
||||||
output.oldMainPos = {x, y, width, height + 1}
|
output.oldMainPos = {x, y, width, height + 1}
|
||||||
@ -207,7 +211,11 @@ local newInstance = function(x, y, width, height, program, pName, addBorder)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
output.refreshMainWindow()
|
output.refreshMainWindow()
|
||||||
|
output.program = program or "rom/programs/shell.lua"
|
||||||
|
output.setTitle = function()
|
||||||
|
output.title = pName or (type(output.program) == "string" and (knownNames[fs.combine("", output.program)] or fs.getName(output.program))) or tostring(output.program)
|
||||||
|
end
|
||||||
|
output.setTitle()
|
||||||
-- pausing will probably be implemented later
|
-- pausing will probably be implemented later
|
||||||
output.paused = false
|
output.paused = false
|
||||||
output.timeMod = 0
|
output.timeMod = 0
|
||||||
@ -217,7 +225,7 @@ local newInstance = function(x, y, width, height, program, pName, addBorder)
|
|||||||
output.alive = true
|
output.alive = true
|
||||||
output.focused = true
|
output.focused = true
|
||||||
output.manipMode = 0
|
output.manipMode = 0
|
||||||
output.title = pName or (type(program) == "string" and (knownNames[fs.combine("", program)] or fs.getName(program))) or tostring(program)
|
|
||||||
output.writeTitleBar = function()
|
output.writeTitleBar = function()
|
||||||
mw.setCursorPos(1, 1)
|
mw.setCursorPos(1, 1)
|
||||||
if output.focused then
|
if output.focused then
|
||||||
@ -233,8 +241,10 @@ local newInstance = function(x, y, width, height, program, pName, addBorder)
|
|||||||
else
|
else
|
||||||
mw.write(output.title:sub(1, mw.meta.width - 7) .. "...") -- draw abreviated title
|
mw.write(output.title:sub(1, mw.meta.width - 7) .. "...") -- draw abreviated title
|
||||||
end
|
end
|
||||||
mw.setCursorPos(mw.meta.width - 3, 1)
|
-- mw.setCursorPos(mw.meta.width - 3, 1)
|
||||||
mw.write(" \22\94\215") -- minimize / maximize / close
|
-- mw.write(" \22\94\215") -- minimize / maximize / close
|
||||||
|
mw.setCursorPos(mw.meta.width - 1, 1)
|
||||||
|
mw.write(" \215") -- close
|
||||||
end
|
end
|
||||||
|
|
||||||
if type(program) == "string" then
|
if type(program) == "string" then
|
||||||
@ -288,7 +298,7 @@ local moveInstance = function(i, x, y, newWidth, newHeight, relative)
|
|||||||
math.max(instances[i].oldTermPos[3], instances[i].mainWindow.meta.width - 2),
|
math.max(instances[i].oldTermPos[3], instances[i].mainWindow.meta.width - 2),
|
||||||
math.max(instances[i].oldTermPos[4], instances[i].mainWindow.meta.height - 2)
|
math.max(instances[i].oldTermPos[4], instances[i].mainWindow.meta.height - 2)
|
||||||
)
|
)
|
||||||
instances[i].termWindow.redraw(nil,nil,nil,{force = true})
|
instances[i].termWindow.redraw(nil, nil, nil, {force = true})
|
||||||
instances[i].refreshMainWindow()
|
instances[i].refreshMainWindow()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -302,10 +312,28 @@ local render = function()
|
|||||||
windont.render({}, overlay, desktop)
|
windont.render({}, overlay, desktop)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local makeNewWindow = function(program)
|
||||||
|
newInstance(2, 2, math.max(scr_x - 16, 8), math.max(scr_y - 6, 5), program or "rom/programs/shell.lua")
|
||||||
|
local good = false
|
||||||
|
while not good do
|
||||||
|
good = true
|
||||||
|
if #instances == 1 then
|
||||||
|
return
|
||||||
|
else
|
||||||
|
for i = 2, #instances do
|
||||||
|
if instances[1].mainWindow.meta.x == instances[i].mainWindow.meta.x and instances[1].mainWindow.meta.y == instances[i].mainWindow.meta.y then
|
||||||
|
instances[1].mainWindow.reposition(instances[1].mainWindow.meta.x + 2, instances[1].mainWindow.meta.y + 2)
|
||||||
|
good = false
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local main = function()
|
local main = function()
|
||||||
|
|
||||||
newInstance(3, 3, 30, 12, "rom/programs/shell.lua", nil)
|
makeNewWindow()
|
||||||
newInstance(8, 5, 30, 12, "rom/programs/shell.lua", nil)
|
|
||||||
|
|
||||||
local evt, success, result, oldTerm
|
local evt, success, result, oldTerm
|
||||||
local cx, cy
|
local cx, cy
|
||||||
@ -317,6 +345,7 @@ local main = function()
|
|||||||
|
|
||||||
while true do
|
while true do
|
||||||
evt = {coroutine.yield()}
|
evt = {coroutine.yield()}
|
||||||
|
cx, cy = term.getCursorBlink()
|
||||||
if evt[1] == "key" and not evt[3] then
|
if evt[1] == "key" and not evt[3] then
|
||||||
keysDown[evt[2]] = 0
|
keysDown[evt[2]] = 0
|
||||||
elseif evt[1] == "key_up" then
|
elseif evt[1] == "key_up" then
|
||||||
@ -324,13 +353,35 @@ local main = function()
|
|||||||
end
|
end
|
||||||
if evt[1] == "mouse_click" then
|
if evt[1] == "mouse_click" then
|
||||||
focusInstance(checkInstanceByPos(evt[3], evt[4]))
|
focusInstance(checkInstanceByPos(evt[3], evt[4]))
|
||||||
|
if not checkInstanceByPos(evt[3], evt[4]) then
|
||||||
|
if evt[2] == 2 then
|
||||||
|
makeNewWindow()
|
||||||
|
end
|
||||||
|
elseif evt[2] == 1 then
|
||||||
|
if evt[4] == instances[1].mainWindow.meta.y and evt[3] == (instances[1].mainWindow.meta.x + instances[1].mainWindow.meta.width - 1) then
|
||||||
|
instances[1].alive = false
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if evt[1] == "timer" and evt[2] == keyTimer then
|
if evt[1] == "timer" and evt[2] == keyTimer then
|
||||||
keyTimer = os.startTimer(0.05)
|
keyTimer = os.startTimer(0)
|
||||||
for k,v in pairs(keysDown) do
|
for k,v in pairs(keysDown) do
|
||||||
keysDown[k] = v + 0.05
|
keysDown[k] = v + 0.05
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if instances[1] then
|
||||||
|
term.setCursorPos(
|
||||||
|
instances[1].termWindow.meta.cursorX + instances[1].mainWindow.meta.x,
|
||||||
|
instances[1].termWindow.meta.cursorY + instances[1].mainWindow.meta.y
|
||||||
|
)
|
||||||
|
term.setCursorBlink(instances[1].termWindow.meta.blink)
|
||||||
|
overlay.clear()
|
||||||
|
else
|
||||||
|
local msg = "Right click to open shell."
|
||||||
|
term.setCursorBlink(false)
|
||||||
|
overlay.setCursorPos(scr_x / 2 - #msg / 2, scr_y / 2)
|
||||||
|
overlay.write("Right click to open shell.")
|
||||||
|
end
|
||||||
render()
|
render()
|
||||||
|
|
||||||
-- move windows with arrow keys (for now)
|
-- move windows with arrow keys (for now)
|
||||||
@ -419,7 +470,9 @@ local main = function()
|
|||||||
)
|
)
|
||||||
elseif instances[i].manipMode == 2 then
|
elseif instances[i].manipMode == 2 then
|
||||||
local newX, newY = instances[i].mainWindow.meta.x, instances[i].mainWindow.meta.y
|
local newX, newY = instances[i].mainWindow.meta.x, instances[i].mainWindow.meta.y
|
||||||
|
local oriX, oriY = instances[i].mainWindow.meta.x, instances[i].mainWindow.meta.y
|
||||||
local newWidth, newHeight = instances[i].mainWindow.meta.width, instances[i].mainWindow.meta.height
|
local newWidth, newHeight = instances[i].mainWindow.meta.width, instances[i].mainWindow.meta.height
|
||||||
|
local oriWidth, oriHeight = instances[i].mainWindow.meta.width, instances[i].mainWindow.meta.height
|
||||||
if instances[i].resizingRight then
|
if instances[i].resizingRight then
|
||||||
newWidth = instances[i].resizingRight + (evt[3] - instances[i].oldMainPos[1] + 1)
|
newWidth = instances[i].resizingRight + (evt[3] - instances[i].oldMainPos[1] + 1)
|
||||||
end
|
end
|
||||||
@ -441,6 +494,9 @@ local main = function()
|
|||||||
newWidth,
|
newWidth,
|
||||||
newHeight
|
newHeight
|
||||||
)
|
)
|
||||||
|
if newWidth ~= oriWidth or newHeight ~= oriHeight then
|
||||||
|
resumeInstance(i, {"term_resize"}, false)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user