ShiErFeng/shierfeng-fastapi-backend/cli/tui/keymaps.py
2026-07-24 09:43:10 +08:00

178 lines
4.6 KiB
Python

from dataclasses import dataclass, field
@dataclass(frozen=True)
class TuiKeymapRegistry:
"""
TUI 键位注册表。
该对象集中维护页面切换快捷键和派生提示文案,避免模块级
常量散落并在后续扩展时继续增长。
:param navigation_shortcuts: 页面导航快捷键映射
"""
navigation_shortcuts: dict[str, str] = field(default_factory=dict)
@staticmethod
def normalize_view_key(view_key: str) -> str:
"""
规范化页面标识。
:param view_key: 原始页面标识
:return: 规范化后的页面标识
"""
return str(view_key).strip().lower()
def get_navigation_shortcut(self, view_key: str) -> str:
"""
获取指定页面的导航快捷键。
:param view_key: 页面标识
:return: 快捷键文本
"""
normalized_view_key = self.normalize_view_key(view_key)
return self.navigation_shortcuts.get(normalized_view_key, '')
@property
def navigation_shortcut_hint(self) -> str:
"""
构建页面导航快捷键总提示。
:return: 快捷键提示
"""
ordered_keys = ['dashboard', 'app', 'ops', 'database', 'cache', 'jobs', 'gen', 'configs', 'crypto']
shortcuts = [
self.get_navigation_shortcut(view_key).upper()
for view_key in ordered_keys
if self.get_navigation_shortcut(view_key)
]
return f'[{" / ".join(shortcuts).replace(" / ", "/")}]'
@property
def sidebar_shortcut_hint(self) -> str:
"""
获取侧栏快捷键提示。
:return: 提示文本
"""
return '[S] 侧栏'
@property
def refresh_shortcut_hint(self) -> str:
"""
获取刷新快捷键提示。
:return: 提示文本
"""
return '[R] 刷新'
@property
def quit_shortcut_hint(self) -> str:
"""
获取退出快捷键提示。
:return: 提示文本
"""
return '[Q] 退出'
@property
def focus_shortcut_hint(self) -> str:
"""
获取焦点切换快捷键提示。
:return: 提示文本
"""
return '[←/→] 切换焦点'
@property
def region_switch_shortcut_hint(self) -> str:
"""
获取区域切换快捷键提示。
:return: 提示文本
"""
return '[←/→] 切换区域'
@property
def scroll_shortcut_hint(self) -> str:
"""
获取滚动快捷键提示。
:return: 提示文本
"""
return '[J/K] 滚动'
@property
def page_scroll_shortcut_hint(self) -> str:
"""
获取翻页快捷键提示。
:return: 提示文本
"""
return '[PgUp/PgDn] 翻页'
@property
def home_end_shortcut_hint(self) -> str:
"""
获取首尾跳转快捷键提示。
:return: 提示文本
"""
return '[Home/End] 首尾'
@property
def browser_interaction_hint(self) -> str:
"""
构建浏览页交互提示。
:return: 提示文本
"""
return (
f'浏览键:{self.focus_shortcut_hint} {self.scroll_shortcut_hint} '
f'{self.page_scroll_shortcut_hint} {self.home_end_shortcut_hint}'
)
@property
def global_shortcut_hint(self) -> str:
"""
构建全局快捷键提示。
:return: 提示文本
"""
return (
f'页面 {self.navigation_shortcut_hint} {self.sidebar_shortcut_hint} '
f'{self.focus_shortcut_hint} {self.scroll_shortcut_hint} '
f'{self.page_scroll_shortcut_hint} {self.home_end_shortcut_hint} '
f'{self.refresh_shortcut_hint} {self.quit_shortcut_hint}'
)
@property
def hero_shortcut_hint(self) -> str:
"""
构建首页英雄区快捷键提示。
:return: 提示文本
"""
return (
f'页面 {self.navigation_shortcut_hint} {self.sidebar_shortcut_hint} '
f'{self.region_switch_shortcut_hint} {self.scroll_shortcut_hint} '
f'{self.page_scroll_shortcut_hint} {self.home_end_shortcut_hint} '
f'{self.refresh_shortcut_hint} {self.quit_shortcut_hint}'
)
TUI_KEYMAP_REGISTRY = TuiKeymapRegistry(
navigation_shortcuts={
'dashboard': 'd',
'app': 'a',
'ops': 'o',
'database': 'b',
'cache': 'c',
'jobs': 't',
'gen': 'g',
'configs': 'p',
'crypto': 'e',
}
)