From 8ef010da59743fcc4927c790f585ba414ec7b129 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Mon, 11 Oct 2021 08:51:02 +0300 Subject: optimized caret scrolling: this is a costly operation and is now done only once per keypress * Esp. costly since Scintilla 5. * We now avoid any Scintilla message that automatically scrolls the caret (makes the caret visible) and instead call SCI_SCROLLCARET only once after every keypress in the interface implementation. * From nowon, use * SCI_SETEMPTYSELECTION instead of SCI_GOTOPOS * SCI_SETEMPTYSELECTION(SCI_POSITIONFROMLINE(...)) instead of SCI_GOTOLINE * SCI_SETSELECTIONSTART and SCI_SETSELECTIONEND instead of SCI_SETSEL * With these optimizations we are significantly faster than before the Scintilla upgrade (6e67f5a682ff46d69888fec61b94bf45cec46721). It is now even safe to execute the Gtk test suite during CI. --- src/spawn.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/spawn.c') diff --git a/src/spawn.c b/src/spawn.c index 085140b..46454ff 100644 --- a/src/spawn.c +++ b/src/spawn.c @@ -296,9 +296,9 @@ teco_state_execute_done(teco_machine_main_t *ctx, const teco_string_t *str, GErr if (!teco_spawn_ctx.register_argument) { if (teco_current_doc_must_undo()) - undo__teco_interface_ssm(SCI_GOTOPOS, + undo__teco_interface_ssm(SCI_SETEMPTYSELECTION, teco_interface_ssm(SCI_GETCURRENTPOS, 0, 0), 0); - teco_interface_ssm(SCI_GOTOPOS, teco_spawn_ctx.to, 0); + teco_interface_ssm(SCI_SETEMPTYSELECTION, teco_spawn_ctx.to, 0); } teco_interface_ssm(SCI_BEGINUNDOACTION, 0, 0); @@ -319,7 +319,6 @@ teco_state_execute_done(teco_machine_main_t *ctx, const teco_string_t *str, GErr /* undo action is only effective if it changed anything */ if (teco_current_doc_must_undo()) undo__teco_interface_ssm(SCI_UNDO, 0, 0); - teco_interface_ssm(SCI_SCROLLCARET, 0, 0); teco_ring_dirtify(); } -- cgit v1.2.3