Implement smooth animated scrolling for scroll_line_up and scroll_line_down

Fixes #9784
This commit is contained in:
copilot-swe-agent[bot]
2026-03-31 11:23:28 +00:00
committed by Kovid Goyal
parent 50cc4f6630
commit 35ca3a178d
12 changed files with 167 additions and 23 deletions

View File

@@ -2901,32 +2901,32 @@ egr() # }}}
agr('shortcuts.scrolling', 'Scrolling')
map('Scroll line up',
'scroll_line_up kitty_mod+up scroll_line_up',
'scroll_line_up kitty_mod+up scroll_line_up smooth',
)
map('Scroll line up',
'scroll_line_up --allow-fallback=shifted,ascii kitty_mod+k scroll_line_up',
'scroll_line_up --allow-fallback=shifted,ascii kitty_mod+k scroll_line_up smooth',
)
map('Scroll line up',
'scroll_line_up opt+cmd+page_up scroll_line_up',
'scroll_line_up opt+cmd+page_up scroll_line_up smooth',
only='macos',
)
map('Scroll line up',
'scroll_line_up cmd+up scroll_line_up',
'scroll_line_up cmd+up scroll_line_up smooth',
only='macos',
)
map('Scroll line down',
'scroll_line_down kitty_mod+down scroll_line_down',
'scroll_line_down kitty_mod+down scroll_line_down smooth',
)
map('Scroll line down',
'scroll_line_down --allow-fallback=shifted,ascii kitty_mod+j scroll_line_down',
'scroll_line_down --allow-fallback=shifted,ascii kitty_mod+j scroll_line_down smooth',
)
map('Scroll line down',
'scroll_line_down opt+cmd+page_down scroll_line_down',
'scroll_line_down opt+cmd+page_down scroll_line_down smooth',
only='macos',
)
map('Scroll line down',
'scroll_line_down cmd+down scroll_line_down',
'scroll_line_down cmd+down scroll_line_down smooth',
only='macos',
)

16
kitty/options/types.py generated
View File

@@ -870,13 +870,13 @@ defaults.map = [
# pass_selection_to_program
KeyDefinition(trigger=SingleKey(mods=256, key=111), options=KeyMapOptions(when_focus_on='', new_mode='', mode='', on_unknown='beep', on_action='keep', timeout=None, allow_fallback=(KeyFallbackType.shifted, KeyFallbackType.alternate)), definition='pass_selection_to_program'),
# scroll_line_up
KeyDefinition(trigger=SingleKey(mods=256, key=57352), definition='scroll_line_up'),
KeyDefinition(trigger=SingleKey(mods=256, key=57352), definition='scroll_line_up smooth'),
# scroll_line_up
KeyDefinition(trigger=SingleKey(mods=256, key=107), options=KeyMapOptions(when_focus_on='', new_mode='', mode='', on_unknown='beep', on_action='keep', timeout=None, allow_fallback=(KeyFallbackType.shifted, KeyFallbackType.alternate)), definition='scroll_line_up'),
KeyDefinition(trigger=SingleKey(mods=256, key=107), options=KeyMapOptions(when_focus_on='', new_mode='', mode='', on_unknown='beep', on_action='keep', timeout=None, allow_fallback=(KeyFallbackType.shifted, KeyFallbackType.alternate)), definition='scroll_line_up smooth'),
# scroll_line_down
KeyDefinition(trigger=SingleKey(mods=256, key=57353), definition='scroll_line_down'),
KeyDefinition(trigger=SingleKey(mods=256, key=57353), definition='scroll_line_down smooth'),
# scroll_line_down
KeyDefinition(trigger=SingleKey(mods=256, key=106), options=KeyMapOptions(when_focus_on='', new_mode='', mode='', on_unknown='beep', on_action='keep', timeout=None, allow_fallback=(KeyFallbackType.shifted, KeyFallbackType.alternate)), definition='scroll_line_down'),
KeyDefinition(trigger=SingleKey(mods=256, key=106), options=KeyMapOptions(when_focus_on='', new_mode='', mode='', on_unknown='beep', on_action='keep', timeout=None, allow_fallback=(KeyFallbackType.shifted, KeyFallbackType.alternate)), definition='scroll_line_down smooth'),
# scroll_page_up
KeyDefinition(trigger=SingleKey(mods=256, key=57354), definition='scroll_page_up'),
# scroll_page_down
@@ -1022,10 +1022,10 @@ defaults.map = [
if is_macos:
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=8, key=99), options=KeyMapOptions(when_focus_on='', new_mode='', mode='', on_unknown='beep', on_action='keep', timeout=None, allow_fallback=(KeyFallbackType.shifted, KeyFallbackType.alternate)), definition='copy_or_noop'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=8, key=118), options=KeyMapOptions(when_focus_on='', new_mode='', mode='', on_unknown='beep', on_action='keep', timeout=None, allow_fallback=(KeyFallbackType.shifted, KeyFallbackType.alternate)), definition='paste_from_clipboard'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=10, key=57354), definition='scroll_line_up'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=8, key=57352), definition='scroll_line_up'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=10, key=57355), definition='scroll_line_down'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=8, key=57353), definition='scroll_line_down'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=10, key=57354), definition='scroll_line_up smooth'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=8, key=57352), definition='scroll_line_up smooth'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=10, key=57355), definition='scroll_line_down smooth'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=8, key=57353), definition='scroll_line_down smooth'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=8, key=57354), definition='scroll_page_up'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=8, key=57355), definition='scroll_page_down'))
defaults.map.append(KeyDefinition(trigger=SingleKey(mods=8, key=57356), definition='scroll_home'))

View File

@@ -88,6 +88,11 @@ def parse_send_text_bytes(text: str) -> bytes:
return defines.expand_ansi_c_escapes(text).encode('utf-8')
@func_with_args('scroll_line_up', 'scroll_line_down')
def scroll_line_updown(func: str, rest: str) -> FuncArgsType:
return func, [rest.strip().lower() == 'smooth']
@func_with_args('scroll_prompt_to_top')
def scroll_prompt_to_top(func: str, rest: str) -> FuncArgsType:
return func, [to_bool(rest) if rest else False]