178 lines
4.6 KiB
Python
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',
|
|
}
|
|
)
|