move
This commit is contained in:
parent
10c1a70dd0
commit
e79c895c7d
74
text.lua
74
text.lua
|
@ -896,6 +896,7 @@ end
|
||||||
|
|
||||||
-- Don't handle any keys here that would trigger love.textinput above.
|
-- Don't handle any keys here that would trigger love.textinput above.
|
||||||
function Text.keychord_pressed(chord)
|
function Text.keychord_pressed(chord)
|
||||||
|
--== shortcuts that mutate text
|
||||||
if chord == 'return' then
|
if chord == 'return' then
|
||||||
local byte_offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
|
local byte_offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
|
||||||
table.insert(Lines, Cursor1.line+1, {mode='text', data=string.sub(Lines[Cursor1.line].data, byte_offset)})
|
table.insert(Lines, Cursor1.line+1, {mode='text', data=string.sub(Lines[Cursor1.line].data, byte_offset)})
|
||||||
|
@ -911,42 +912,6 @@ function Text.keychord_pressed(chord)
|
||||||
elseif chord == 'tab' then
|
elseif chord == 'tab' then
|
||||||
Text.insert_at_cursor('\t')
|
Text.insert_at_cursor('\t')
|
||||||
save_to_disk(Lines, Filename)
|
save_to_disk(Lines, Filename)
|
||||||
elseif chord == 'left' then
|
|
||||||
Text.left()
|
|
||||||
elseif chord == 'right' then
|
|
||||||
Text.right()
|
|
||||||
-- left/right by one word
|
|
||||||
-- C- hotkeys reserved for drawings, so we'll use M-
|
|
||||||
elseif chord == 'M-left' then
|
|
||||||
while true do
|
|
||||||
Text.left()
|
|
||||||
if Cursor1.pos == 1 then break end
|
|
||||||
assert(Cursor1.pos > 1)
|
|
||||||
local offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
|
|
||||||
assert(offset > 1)
|
|
||||||
if Lines[Cursor1.line].data:sub(offset-1,offset-1) == ' ' then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif chord == 'M-right' then
|
|
||||||
while true do
|
|
||||||
Text.right()
|
|
||||||
if Cursor1.pos > utf8.len(Lines[Cursor1.line].data) then break end
|
|
||||||
local offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
|
|
||||||
if Lines[Cursor1.line].data:sub(offset,offset) == ' ' then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- paste
|
|
||||||
elseif chord == 'M-v' then
|
|
||||||
local s = love.system.getClipboardText()
|
|
||||||
for _,code in utf8.codes(s) do
|
|
||||||
Text.insert_at_cursor(utf8.char(code))
|
|
||||||
end
|
|
||||||
elseif chord == 'home' then
|
|
||||||
Cursor1.pos = 1
|
|
||||||
elseif chord == 'end' then
|
|
||||||
Cursor1.pos = utf8.len(Lines[Cursor1.line].data) + 1
|
|
||||||
elseif chord == 'backspace' then
|
elseif chord == 'backspace' then
|
||||||
if Cursor1.pos > 1 then
|
if Cursor1.pos > 1 then
|
||||||
local byte_start = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos-1)
|
local byte_start = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos-1)
|
||||||
|
@ -1003,6 +968,43 @@ function Text.keychord_pressed(chord)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
save_to_disk(Lines, Filename)
|
save_to_disk(Lines, Filename)
|
||||||
|
-- paste
|
||||||
|
elseif chord == 'M-v' then
|
||||||
|
local s = love.system.getClipboardText()
|
||||||
|
for _,code in utf8.codes(s) do
|
||||||
|
Text.insert_at_cursor(utf8.char(code))
|
||||||
|
end
|
||||||
|
--== shortcuts that move the cursor
|
||||||
|
elseif chord == 'left' then
|
||||||
|
Text.left()
|
||||||
|
elseif chord == 'right' then
|
||||||
|
Text.right()
|
||||||
|
-- left/right by one word
|
||||||
|
-- C- hotkeys reserved for drawings, so we'll use M-
|
||||||
|
elseif chord == 'M-left' then
|
||||||
|
while true do
|
||||||
|
Text.left()
|
||||||
|
if Cursor1.pos == 1 then break end
|
||||||
|
assert(Cursor1.pos > 1)
|
||||||
|
local offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
|
||||||
|
assert(offset > 1)
|
||||||
|
if Lines[Cursor1.line].data:sub(offset-1,offset-1) == ' ' then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif chord == 'M-right' then
|
||||||
|
while true do
|
||||||
|
Text.right()
|
||||||
|
if Cursor1.pos > utf8.len(Lines[Cursor1.line].data) then break end
|
||||||
|
local offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
|
||||||
|
if Lines[Cursor1.line].data:sub(offset,offset) == ' ' then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif chord == 'home' then
|
||||||
|
Cursor1.pos = 1
|
||||||
|
elseif chord == 'end' then
|
||||||
|
Cursor1.pos = utf8.len(Lines[Cursor1.line].data) + 1
|
||||||
elseif chord == 'up' then
|
elseif chord == 'up' then
|
||||||
assert(Lines[Cursor1.line].mode == 'text')
|
assert(Lines[Cursor1.line].mode == 'text')
|
||||||
--? print('up', Cursor1.pos, Screen_top1.pos)
|
--? print('up', Cursor1.pos, Screen_top1.pos)
|
||||||
|
|
Loading…
Reference in New Issue