diff --git a/0023-on.keychord_press b/0023-on.keychord_press index 29e0fbb..9b697fe 100644 --- a/0023-on.keychord_press +++ b/0023-on.keychord_press @@ -17,9 +17,7 @@ on.keychord_press = function(chord, key) elseif chord == 'C-z' then dump_state() elseif Cursor_node and Cursor_node.editor.cursor_x then - print('cursor before', Cursor_node.editor.cursor1.line, Cursor_node.editor.cursor1.pos) edit.keychord_press(Cursor_node.editor, chord, key) - print('cursor after', Cursor_node.editor.cursor1.line, Cursor_node.editor.cursor1.pos) pan_viewport_to_contain_cursor(Cursor_node) A() else diff --git a/0035-pan_viewport_to_contain_cursor b/0035-pan_viewport_to_contain_cursor index c498f82..90747f6 100644 --- a/0035-pan_viewport_to_contain_cursor +++ b/0035-pan_viewport_to_contain_cursor @@ -1,61 +1,48 @@ function pan_viewport_to_contain_cursor(node) - print('viewport', Viewport.y) local safety_margin = 2*node.editor.line_height cursor1 = {39, 1} - print('safety margin', safety_margin, 'dvpx') - print('node', node.y) local cursor_sy = node.y + y_of_schema1(node.editor, node.editor.cursor1)/Viewport.zoom if Text.lt1({line=1, pos=1}, node.editor.screen_top1) then Viewport.y = node.y + y_of_schema1(node.editor, node.editor.screen_top1)/Viewport.zoom end if cursor_sy > Viewport.y + App.screen.height/Viewport.zoom - safety_margin then - print('cursor below viewport') local cursor_y = y_of_schema1(node.editor, node.editor.cursor1) if Viewport.y < node.y then -- node starts within Viewport - print('node starts within viewport') local max_cursor_y = App.screen.height - scale(node.y - Viewport.y) - safety_margin if cursor_y > max_cursor_y then -- set Viewport.y so cursor_y == max_cursor_y -- equation: cursor_y == App.screen.height - (node.y - Viewport.y)*Viewport.zoom - safety_margin -- solve for Viewport.y Viewport.y = node.y - (App.screen.height - cursor_y - safety_margin)/Viewport.zoom - print('adjusting Viewport to', Viewport.y) end else -- node extends above Viewport - print('node extends above viewport') local screen_top_y = y_of_schema1(node.editor, node.editor.screen_top1) local min_screen_top_y = cursor_y + safety_margin - App.screen.height if screen_top_y < min_screen_top_y then screen_top_y = min_screen_top_y Viewport.y = node.y + screen_top_y/Viewport.zoom - print('adjusting Viewport to', Viewport.y) end end elseif cursor_sy < Viewport.y + safety_margin then - print('cursor above viewport') local cursor_y = y_of_schema1(node.editor, node.editor.cursor1) if Viewport.y < node.y then -- node starts within Viewport - print('node starts within viewport') local max_cursor_y = App.screen.height - scale(node.y - Viewport.y) - safety_margin if cursor_y > max_cursor_y then -- set Viewport.y so cursor_y == max_cursor_y -- equation: cursor_y == App.screen.height - (node.y - Viewport.y)*Viewport.zoom - safety_margin -- solve for Viewport.y Viewport.y = node.y - (App.screen.height - cursor_y - safety_margin)/Viewport.zoom - print('adjusting Viewport to', Viewport.y) end else -- node extends above Viewport - print('node extends above viewport') local screen_top_y = y_of_schema1(node.editor, node.editor.screen_top1) local max_screen_top_y = cursor_y - safety_margin if screen_top_y > max_screen_top_y then screen_top_y = max_screen_top_y Viewport.y = node.y + screen_top_y/Viewport.zoom - print('adjusting Viewport to', Viewport.y) end end end