multishell hooks

This commit is contained in:
kepler155c@gmail.com
2017-10-15 02:36:54 -04:00
parent 8b187f2813
commit 9b8b5238b0
7 changed files with 279 additions and 254 deletions

View File

@@ -2,52 +2,44 @@ _G.requireInjector()
local Util = require('util')
local keys = _G.keys
local multishell = _ENV.multishell
local os = _G.os
local textutils = _G.textutils
local clipboard = { }
function clipboard.getData()
return clipboard.data
end
function clipboard.setData(data)
clipboard.data = data
if data then
clipboard.useInternal(true)
end
end
function clipboard.getText()
if clipboard.data then
if type(clipboard.data) == 'table' then
local s, m = pcall(textutils.serialize, clipboard.data)
clipboard.data = (s and m) or Util.tostring(clipboard.data)
end
return Util.tostring(clipboard.data)
end
end
function clipboard.isInternal()
return clipboard.internal
end
function clipboard.useInternal(mode)
if mode ~= clipboard.internal then
clipboard.internal = mode
local text = 'Clipboard (^m): ' .. ((mode and 'internal') or 'normal')
multishell.showMessage(text)
os.queueEvent('clipboard_mode', mode)
end
end
multishell.hook('clipboard_copy', function(_, args)
clipboard.setData(args[1])
clipboard.data = args[1]
if clipboard.data then
clipboard.useInternal(true)
end
end)
multishell.hook('paste', function(_, args)
if clipboard.isInternal() then
if clipboard.internal then
args[1] = clipboard.getText() or ''
end
end)
-- control-m - clipboard mode
multishell.addHotkey(50, function()
clipboard.useInternal(not clipboard.isInternal())
-- control-m - toggle clipboard mode
multishell.addHotkey(keys.m, function()
clipboard.useInternal(not clipboard.internal)
end)