bedit: Added scrolling around the screen and basic event handling

This commit is contained in:
2026-06-06 18:16:47 +03:00
parent 16214c253d
commit b756bc516e
+31 -3
View File
@@ -2,6 +2,7 @@ local fs = require("filesystem")
local shell = require("shell") local shell = require("shell")
local gpu = require("component").gpu local gpu = require("component").gpu
local event = require("event") local event = require("event")
local computer = require("computer")
local resX, resY = gpu.getResolution() local resX, resY = gpu.getResolution()
local textBuffer = gpu.allocateBuffer(resX, resY - 1) local textBuffer = gpu.allocateBuffer(resX, resY - 1)
@@ -58,9 +59,15 @@ gpu.setForeground(0xFFFFFF)
gpu.setBackground(0x000000) gpu.setBackground(0x000000)
gpu.set(4, resY, "Exit") gpu.set(4, resY, "Exit")
gpu.set(13, resY, "Save") gpu.set(13, resY, "Save")
local textOffsetX = 0
local textOffsetY = 0
while true do while true do
local renderBufferFlag = false -- Flag to render the whole text buffer
-- Handle events -- Handle events
local eventArgs = {event.pull("key_down")} repeat
local eventArgs = {event.pull("key_down", 0.05)}
if eventArgs[1] == "key_down" then if eventArgs[1] == "key_down" then
-- Mouse events might be added later, that's why this if statement is here -- Mouse events might be added later, that's why this if statement is here
@@ -68,14 +75,35 @@ while true do
-- Special commands -- Special commands
print(eventArgs[4], keyboard.keys[eventArgs[4]]) print(eventArgs[4], keyboard.keys[eventArgs[4]])
if keyboard.keys[eventArgs[4]] == "x" then if keyboard.keys[eventArgs[4]] == "x" then
break goto exit
end end
end end
if keyboard.keys[eventArgs[4]] == "up" and textOffsetY > 0 then
textOffsetY = textOffsetY - 1
renderBufferFlag = true
end
if keyboard.keys[eventArgs[4]] == "down" then
textOffsetY = textOffsetY + 1
renderBufferFlag = true
end
if keyboard.keys[eventArgs[4]] == "left" and textOffsetX > 0 then
textOffsetX = textOffsetX - 1
renderBufferFlag = true
end
if keyboard.keys[eventArgs[4]] == "right" then
textOffsetX = textOffsetX + 1
renderBufferFlag = true
end
end
until not next(eventArgs)
if renderBufferFlag then
renderText(textOffsetX, textOffsetY)
end end
renderText(0, 0)
end end
-- Cleanup -- Cleanup
::exit::
gpu.freeBuffer(textBuffer) gpu.freeBuffer(textBuffer)
gpu.setActiveBuffer(0) gpu.setActiveBuffer(0)
terminal.clear() terminal.clear()