From 99f86498c0bbdf18fb1c3fa4f8ab4d9694473c5b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 14 Mar 2021 19:15:22 +0530 Subject: [PATCH] E-book viewer: Make the commonly used shift+arrow key shortcuts for modifying selections using the keyboard work Fixes #1919072 [[Enhancement - Viewer] Change which text is selected using Shift+arrow keys](https://bugs.launchpad.net/calibre/+bug/1919072) --- src/pyj/read_book/selection_bar.pyj | 12 +++++++++++- src/pyj/read_book/shortcuts.pyj | 12 ++++++++++++ src/pyj/read_book/view.pyj | 4 ++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/pyj/read_book/selection_bar.pyj b/src/pyj/read_book/selection_bar.pyj index b01b6ab5e3..d154bb1596 100644 --- a/src/pyj/read_book/selection_bar.pyj +++ b/src/pyj/read_book/selection_bar.pyj @@ -573,9 +573,19 @@ class SelectionBar: self.copy_to_clipboard() return sc_name = shortcut_for_key_event(ev, self.view.keyboard_shortcut_map) + if ev.key is 'ArrowRight' and ev.shiftKey: + sc_name = 'extend_selection_by_word' + elif ev.key is 'ArrowLeft' and ev.shiftKey: + sc_name = 'shrink_selection_by_word' + if not sc_name: return - forwarded = {'toggle_highlights': True, 'extend_selection_by_word': True, 'shrink_selection_by_word': True, 'edit_book': True} + forwarded = { + 'toggle_highlights': True, + 'edit_book': True, + 'extend_selection_by_word': True, 'shrink_selection_by_word': True, + 'extend_selection_by_line': True, 'shrink_selection_by_line': True, + } if sc_name is 'show_chrome': self.clear_selection() elif sc_name is 'copy_to_clipboard': diff --git a/src/pyj/read_book/shortcuts.pyj b/src/pyj/read_book/shortcuts.pyj index cb168fddd5..ee5e2186a5 100644 --- a/src/pyj/read_book/shortcuts.pyj +++ b/src/pyj/read_book/shortcuts.pyj @@ -326,6 +326,18 @@ def common_shortcuts(): # {{{ _('Alter the current selection backwards by a word'), ), + 'extend_selection_by_line': desc( + v"['Ctrl+Shift+ArrowDown', 'Shift+ArrowDown']", + 'ui', + _('Alter the current selection forward by a line'), + ), + + 'shrink_selection_by_line': desc( + v"['Ctrl+Shift+ArrowUp', 'Shift+ArrowUp']", + 'ui', + _('Alter the current selection backwards by a line'), + ), + 'show_chrome': desc( v"['Escape', 'ContextMenu']", 'ui', diff --git a/src/pyj/read_book/view.pyj b/src/pyj/read_book/view.pyj index 23fc617815..c444d87cba 100644 --- a/src/pyj/read_book/view.pyj +++ b/src/pyj/read_book/view.pyj @@ -563,6 +563,10 @@ class View: self.iframe_wrapper.send_message('modify_selection', direction='backward', granularity='word') elif data.name is 'extend_selection_by_word': self.iframe_wrapper.send_message('modify_selection', direction='forward', granularity='word') + elif data.name is 'shrink_selection_by_line': + self.iframe_wrapper.send_message('modify_selection', direction='backward', granularity='line') + elif data.name is 'extend_selection_by_line': + self.iframe_wrapper.send_message('modify_selection', direction='forward', granularity='line') elif data.name is 'scrollspeed_increase': self.update_scroll_speed(SCROLL_SPEED_STEP) elif data.name is 'scrollspeed_decrease':