switch copy/paste to ctrl- hotkeys
This commit is contained in:
parent
dcdcd07902
commit
8047ab9b89
48
main.lua
48
main.lua
|
@ -294,6 +294,54 @@ function App.keychord_pressed(chord)
|
|||
Selection1 = deepcopy(src.selection)
|
||||
patch(Lines, event.before, event.after)
|
||||
end
|
||||
-- clipboard
|
||||
elseif chord == 'C-c' then
|
||||
local s = Text.selection()
|
||||
if s then
|
||||
App.setClipboardText(s)
|
||||
end
|
||||
elseif chord == 'C-x' then
|
||||
local s = Text.cut_selection()
|
||||
if s then
|
||||
App.setClipboardText(s)
|
||||
end
|
||||
elseif chord == 'C-v' then
|
||||
-- We don't have a good sense of when to scroll, so we'll be conservative
|
||||
-- and sometimes scroll when we didn't quite need to.
|
||||
local before_line = Cursor1.line
|
||||
local before = snapshot(before_line)
|
||||
local clipboard_data = App.getClipboardText()
|
||||
local num_newlines = 0 -- hack 1
|
||||
for _,code in utf8.codes(clipboard_data) do
|
||||
local c = utf8.char(code)
|
||||
if c == '\n' then
|
||||
Text.insert_return()
|
||||
num_newlines = num_newlines+1
|
||||
else
|
||||
Text.insert_at_cursor(utf8.char(code))
|
||||
end
|
||||
end
|
||||
-- hack 1: if we have too many newlines we definitely need to scroll
|
||||
for i=before_line,Cursor1.line do
|
||||
Lines[i].screen_line_starting_pos = nil
|
||||
Text.populate_screen_line_starting_pos(i)
|
||||
end
|
||||
if Cursor1.line-Screen_top1.line+1 + num_newlines > App.screen.height/Line_height then
|
||||
Screen_top1.line = Cursor1.line
|
||||
Screen_top1.pos = 1
|
||||
Text.scroll_up_while_cursor_on_screen()
|
||||
end
|
||||
-- hack 2: if we have too much text wrapping we definitely need to scroll
|
||||
local clipboard_text = App.newText(love.graphics.getFont(), clipboard_data)
|
||||
local clipboard_width = App.width(clipboard_text)
|
||||
--? print(Cursor_y, Cursor_y*Line_width, Cursor_y*Line_width+Cursor_x, Cursor_y*Line_width+Cursor_x+clipboard_width, Line_width*App.screen.height/Line_height)
|
||||
if Cursor_y*Line_width+Cursor_x + clipboard_width > Line_width*App.screen.height/Line_height then
|
||||
Screen_top1.line = Cursor1.line
|
||||
Screen_top1.pos = 1
|
||||
Text.scroll_up_while_cursor_on_screen()
|
||||
end
|
||||
record_undo_event({before=before, after=snapshot(before_line, Cursor1.line)})
|
||||
-- dispatch to drawing or text
|
||||
elseif love.mouse.isDown('1') or chord:sub(1,2) == 'C-' then
|
||||
Drawing.keychord_pressed(chord)
|
||||
elseif chord == 'escape' and love.mouse.isDown('1') then
|
||||
|
|
49
text.lua
49
text.lua
|
@ -427,7 +427,7 @@ function test_insert_from_clipboard()
|
|||
App.screen.check(y, 'ghi', 'F - test_insert_from_clipboard/baseline/screen:3')
|
||||
-- after hitting the enter key the screen scrolls down
|
||||
App.clipboard = 'xy\nz'
|
||||
App.run_after_keychord('M-v')
|
||||
App.run_after_keychord('C-v')
|
||||
check_eq(Screen_top1.line, 1, 'F - test_insert_from_clipboard/screen_top')
|
||||
check_eq(Cursor1.line, 2, 'F - test_insert_from_clipboard/cursor:line')
|
||||
check_eq(Cursor1.pos, 2, 'F - test_insert_from_clipboard/cursor:pos')
|
||||
|
@ -1379,53 +1379,6 @@ function Text.keychord_pressed(chord)
|
|||
end
|
||||
save_to_disk(Lines, Filename)
|
||||
record_undo_event({before=before, after=snapshot(Cursor1.line)})
|
||||
-- paste
|
||||
elseif chord == 'M-c' then
|
||||
local s = Text.selection()
|
||||
if s then
|
||||
App.setClipboardText(s)
|
||||
end
|
||||
elseif chord == 'M-x' then
|
||||
local s = Text.cut_selection()
|
||||
if s then
|
||||
App.setClipboardText(s)
|
||||
end
|
||||
elseif chord == 'M-v' then
|
||||
-- We don't have a good sense of when to scroll, so we'll be conservative
|
||||
-- and sometimes scroll when we didn't quite need to.
|
||||
local before_line = Cursor1.line
|
||||
local before = snapshot(before_line)
|
||||
local clipboard_data = App.getClipboardText()
|
||||
local num_newlines = 0 -- hack 1
|
||||
for _,code in utf8.codes(clipboard_data) do
|
||||
local c = utf8.char(code)
|
||||
if c == '\n' then
|
||||
Text.insert_return()
|
||||
num_newlines = num_newlines+1
|
||||
else
|
||||
Text.insert_at_cursor(utf8.char(code))
|
||||
end
|
||||
end
|
||||
-- hack 1: if we have too many newlines we definitely need to scroll
|
||||
for i=before_line,Cursor1.line do
|
||||
Lines[i].screen_line_starting_pos = nil
|
||||
Text.populate_screen_line_starting_pos(i)
|
||||
end
|
||||
if Cursor1.line-Screen_top1.line+1 + num_newlines > App.screen.height/Line_height then
|
||||
Screen_top1.line = Cursor1.line
|
||||
Screen_top1.pos = 1
|
||||
Text.scroll_up_while_cursor_on_screen()
|
||||
end
|
||||
-- hack 2: if we have too much text wrapping we definitely need to scroll
|
||||
local clipboard_text = App.newText(love.graphics.getFont(), clipboard_data)
|
||||
local clipboard_width = App.width(clipboard_text)
|
||||
--? print(Cursor_y, Cursor_y*Line_width, Cursor_y*Line_width+Cursor_x, Cursor_y*Line_width+Cursor_x+clipboard_width, Line_width*App.screen.height/Line_height)
|
||||
if Cursor_y*Line_width+Cursor_x + clipboard_width > Line_width*App.screen.height/Line_height then
|
||||
Screen_top1.line = Cursor1.line
|
||||
Screen_top1.pos = 1
|
||||
Text.scroll_up_while_cursor_on_screen()
|
||||
end
|
||||
record_undo_event({before=before, after=snapshot(before_line, Cursor1.line)})
|
||||
--== shortcuts that move the cursor
|
||||
elseif chord == 'left' then
|
||||
if Selection1.line then
|
||||
|
|
Loading…
Reference in New Issue