diff kitten: Add keybindings to scroll by a page

This commit is contained in:
Kovid Goyal 2018-05-24 15:17:03 +05:30
parent 219d3161d9
commit a33ebce3c9
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
5 changed files with 13 additions and 3 deletions

View File

@ -73,7 +73,7 @@ def parse_scroll_by(func, rest):
@func_with_args('scroll_to')
def parse_scroll_to(func, rest):
rest = rest.lower()
if rest not in {'start', 'end', 'next-change', 'prev-change'}:
if rest not in {'start', 'end', 'next-change', 'prev-change', 'next-page', 'prev-page'}:
rest = 'start'
return func, rest

View File

@ -47,6 +47,9 @@ map down scroll_by 1
map up scroll_by -1
map home scroll_to start
map end scroll_to end
map page_down scroll_to next-page
map page_up scroll_to prev-page
map space scroll_to next-page
map n scroll_to next-change
map p scroll_to prev-change
map a change_context all

View File

@ -76,7 +76,10 @@ class DiffHandler(Handler):
where = args[0]
if 'change' in where:
return self.scroll_to_next_change(backwards='prev' in where)
amt = len(self.diff_lines) * (1 if 'end' in where else -1)
if 'page' in where:
amt = self.num_lines * (1 if 'next' in where else -1)
else:
amt = len(self.diff_lines) * (1 if 'end' in where else -1)
return self.scroll_lines(amt)
if func == 'change_context':
new_ctx = self.current_context_count

View File

@ -204,13 +204,15 @@ def parse_kittens_shortcut(sc):
mods = resolved_mods
is_text = False
rkey = parts[-1]
if text_match(rkey) is None:
tkey = text_match(rkey)
if tkey is None:
rkey = rkey.upper()
rkey = config_key_map.get(rkey)
if rkey is None:
raise ValueError('Unknown shortcut key: {}'.format(sc))
else:
is_text = True
rkey = tkey
return mods, rkey, is_text

2
kitty/key_encoding.py generated
View File

@ -258,6 +258,8 @@ text_keys = string.ascii_uppercase + string.ascii_lowercase + string.digits + '`
def text_match(key):
if key.upper() == 'SPACE':
return ' '
if key not in text_keys:
return
return key