mirror of
https://github.com/kepler155c/opus
synced 2025-02-09 21:40:01 +00:00
95 lines
2.3 KiB
Lua
95 lines
2.3 KiB
Lua
_G.requireInjector()
|
|
|
|
--[[
|
|
Adds the control-d hotkey to view the kernel log.
|
|
]]
|
|
|
|
local Terminal = require('terminal')
|
|
|
|
local kernel = _G.kernel
|
|
local keyboard = _G.device.keyboard
|
|
local multishell = _ENV.multishell
|
|
local os = _G.os
|
|
local term = _G.term
|
|
local window = _G.window
|
|
|
|
if multishell and multishell.setTitle then
|
|
multishell.setTitle(multishell.getCurrent(), 'System Log')
|
|
end
|
|
|
|
-- jump through a lot of hoops to get around window api limitations
|
|
-- mainly failing to provide access to window buffer or knowledge of parent
|
|
-- need: window.getParent()
|
|
-- window.copy(target)
|
|
|
|
local terminal = _G.kernel.terminal.parent
|
|
local w, h = kernel.window.getSize()
|
|
local win = window.create(kernel.window, 1, 1, w, h + 50, false)
|
|
|
|
-- copy windows contents from parent window to child
|
|
local oblit, oscp = terminal.blit, terminal.setCursorPos
|
|
kernel.window.setVisible(false)
|
|
terminal.blit = function(...)
|
|
win.blit(...)
|
|
end
|
|
terminal.setCursorPos = function(...)
|
|
win.setCursorPos(...)
|
|
end
|
|
kernel.window.setVisible(true)
|
|
|
|
-- position and resize window for multishell (but don't update screen)
|
|
terminal.blit = function() end
|
|
terminal.setCursorPos = function() end
|
|
kernel.window.reposition(1, 2, w, h - 1)
|
|
|
|
-- restore original terminal
|
|
terminal.blit = oblit
|
|
terminal.setCursorPos = oscp
|
|
|
|
-- add scrolling methods
|
|
Terminal.scrollable(win, kernel.window)
|
|
|
|
-- update kernel with new window, set this tab with the new kernal window
|
|
local routine = kernel.getCurrent()
|
|
for _,r in pairs(kernel.routines) do
|
|
if r.terminal == kernel.terminal then
|
|
r.terminal = win
|
|
r.window = win
|
|
end
|
|
end
|
|
kernel.terminal = win
|
|
kernel.window = win
|
|
routine.terminal = win
|
|
routine.window = win
|
|
term.redirect(routine.window)
|
|
|
|
local previousId
|
|
|
|
kernel.hook('mouse_scroll', function(_, eventData)
|
|
local dir, y = eventData[1], eventData[3]
|
|
|
|
if y > 1 then
|
|
local currentTab = kernel.routines[1]
|
|
if currentTab.terminal.scrollUp then
|
|
if dir == -1 then
|
|
currentTab.terminal.scrollUp()
|
|
else
|
|
currentTab.terminal.scrollDown()
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
keyboard.addHotkey('control-d', function()
|
|
local current = kernel.getFocused()
|
|
if current.uid ~= routine.uid then
|
|
previousId = current.uid
|
|
kernel.raise(routine.uid)
|
|
elseif previousId then
|
|
kernel.raise(previousId)
|
|
end
|
|
end)
|
|
|
|
os.pullEventRaw('terminate')
|
|
keyboard.removeHotkey('control-d')
|