Linux front - #885
Closed
VedaChen wants to merge 60 commits into
Closed
Linux front#885VedaChen wants to merge 60 commits into
VedaChen wants to merge 60 commits into
Conversation
added 30 commits
September 23, 2026 23:44
- 基于 gpui-kit (0.6) 建立独立 Linux 桌面工程 linux/ - 实现 CoreClient 调度层对接 rust/lithe-core - 构建工作台基础视图:顶部工具栏、侧边栏(文件/搜索/Git)、多标签代码区与 PTY 原生终端底栏 - 新增 Linux 构建脚本 scripts/build-linux.sh 与打包脚本 scripts/package-linux.sh - 新增 Linux CI 工作流 .github/workflows/ci-linux.yml - 更新 .gitignore 排除目标产物与临时文件
- 新增 ThemeColors 集中定义深色主题调色板,并在应用入口强制开启 ThemeMode::Dark - 重构标题栏 (ToolbarView):加入左上角完整桌面菜单栏 (File/Edit/View/Run/Terminal/Help)、项目与分支选择徽章、Search Everywhere 快捷入口 - 新增垂直活动栏 (ActivityRailView):支持在 Files、Git、Search 与 Terminal 间切换/展开侧边栏 - 重构多标签代码区 (EditorView):新增面包屑路径导航条与代码行号槽 - 重写底栏 (BottomPanelView) 与侧边栏 (SidebarView) Tab 控件,修复暗色下按钮低对比度不可见问题 - 新增全局底部状态栏 (StatusBarView):统一展示分支、光标位置、语言及编码状态
- 移除界面中所有 Emoji 字符,全面接入 gpui-kit Lucide 图标体系 - 顶部工具栏重构:实现 Lithe 品牌标识、项目与分支切换胶囊、Search Everywhere 搜索条与 Run/Debug 控制组 - 活动栏重构:对齐 macOS ActivityBar 布局,规范 32x32 图标按钮与激活态指示 - 侧边栏重构:精简工具窗口顶部标题栏,重写 Explorer/Git/Search 视图列表与状态指示徽章 - 多标签代码区重构:对齐 macOS 激活 Tab 2px 蓝条下划线、面包屑导航条、右对齐行号槽与居中空状态 - 底栏与状态栏重构:接入 Terminal/Output/Problems 标签与清理/折叠操作,完善状态栏展示
- editor: 正文改用 gpui-kit 上游 Editor/EditorState,恢复上下滚动、 文本选中与复制;标签内容与语言在切换时同步进编辑器,编辑变更回写 标签并置脏,保存读取编辑器实时文本。 - view: 接入 SearchEverywhere 与 SettingsDialog 事件;支持侧边栏宽度、 底部面板高度的拖拽调整(带边界 clamp)。 - sidebar: 扩展 SidebarEvent/SidebarTab 与文件树交互。 - bottom_panel: 高度可配置。 - 忽略 .codegraph/ 索引目录。
对齐 windows/tauri 的 UI 结构与交互,功能暂不接后端: - theme: 新增运行时调色板,移植 lithe-dark / lithe-light 全套 token, 保留旧 ThemeColors 访问器为别名,视图无需改动即可跟随主题。 - settings: 新增 XDG 设置持久化(~/.config/lithe/settings.json), 键名与 Tauri defaultSettings 对齐,含 coreFeatures / 顺序 / 布局尺寸; 提供 resolved_theme_id + apply_theme 支持明暗与跟随系统。 - toolbar: 顶栏复刻为紧凑菜单栏(File/Edit/View/Go/Terminal/Run/Tools/ Window/Help)+ 项目/分支胶囊 + 搜索条 + 运行控件 + 主题切换 + 窗口控件。 - activity_rail: 左侧活动栏 9 项(按 core_features 与设置顺序过滤/排序), 新增右侧插件活动栏(Extensions / Notifications 带角标 / Maven)。 - status_bar: 按 footerLeading/TrailingItemsOrder 渲染文件路径、分支、 光标、编码、缩进、只读、内存、Git 变更,变更 chip 可点击打开 Git。 - settings_dialog: 扩展为 12 分类(820x620),设置项读写 XDG 存储, 主题项即时应用并落盘,支持 Restore Defaults。 - command_palette / quick_open / welcome_screen: 新增三个浮层与欢迎页, 含分组列表、模式徽标、键盘导航与事件出口。 - main: 改用 AllAssets 以提供完整 Lucide 图标目录。
设置弹窗与全局搜索弹窗的卡片 on_mouse_down 是空处理器,未阻断事件冒泡, 点击卡片内的分类项/控件会冒泡到遮罩并触发 Close。补上 cx.stop_propagation(), 与命令面板、快速打开保持一致。
原实现是单个 Menu 按钮 + 九个子菜单的竖向下拉,与 Tauri `compactFloating` 的 Menubar 形态不一致。改为点击 Menu 图标后在标题栏下方浮出一个横向圆角 菜单条,九个菜单名并排、各自下拉;选择任意菜单项或点击菜单条外部即收起, 与 Tauri 的 onCompactClose 行为一致。图标由 Menu 换成 List 以对齐 ListIcon。
对照 windows/tauri 的 title-bar.tsx,非 macOS 顶栏只有四组元素: 菜单(紧凑按钮/平铺菜单)、项目菜单(logo+项目名+ChevronDown)、 分支胶囊、右侧搜索图标按钮、窗口控件。 删除 Linux 多出的元素: - ⚡ + "Lithe" 品牌标识 - 中间 280px 全局搜索条(含占位文案与 Ctrl+P 徽标) - "[Project] Default" 运行目标胶囊 - Run / Debug / Stop 按钮 - 主题切换按钮(Sun/Moon) - 设置按钮(Settings) 其余对齐: - 顶栏背景改用 surface(与 Tauri bg-surface 一致)。 - 项目菜单触发器改为 logo 徽标(品牌色圆角方块)+ 项目名 + ChevronDown, 下拉项顺序对齐 TitleProjectMenu:New Project / Open / Clone Repository / Open Projects / Open Recent。 - 右侧只保留搜索图标按钮(quickOpenAction)与窗口控件。
对照 Tauri 真源修复三处不一致: - 左侧活动栏去掉 maven:Tauri 左栏的 maven 项仅在 `hasMavenRun` 为真时出现(`main-sidebar.tsx` 有条件传入 `onMavenClick`), 默认无 Maven 运行故不显示;Maven 入口只保留在右侧插件栏 (`plugin-activity-rail.tsx` 的 `isMavenAvailable`)。 新增 `has_maven_run` 开关供后续 Maven 集成打开。 - 浅色模式终端仍深色:`terminal.rs` 硬编码深色底/文字/边框, 改为主题色(背景/前景/边框/柔和文字/成功色),对齐 Tauri xterm 取 `--background` / `--foreground` 的行为。 - 项目菜单触发器徽标:去掉蓝色闪电占位,改用与 Tauri `public/logo.png` 同一文件的真实应用图标(编译期嵌入, 20px 圆角展示)。
原空态是自创的 Zap 大图标 + "Lithe IDEA" + 英文介绍 + 快捷键提示, Tauri 不存在。改为复刻 `empty-editor-state.tsx`: 文件图标(40px)+ 右下角放大镜叠加(20px),标题「选择文件以查看」, 描述「外部工具产生的更改会自动显示。」(与 `locale.ts` 中文文案逐字一致)。
逐项核对 `settings-dialog.tsx` 各分类 `labelKey` 在 `locale.ts` / `ai-commit.ts` 中的中文翻译,修正 8 处自创标题: 常规(原通用)、项目 · JDK 与 Maven(原项目)、运行配置(原运行)、 LSP(原语言服务)、AI 聊天与编辑(原 AI 助手)、AI 与提交(原 AI 提交)、 Git(原版本控制)。编辑器/快捷键/终端/日志/更新原本已一致。
图标(对照 settings-dialog.tsx): general→Settings、run→Cog、terminal→SquareTerminal、 ai/ai-commit→WandSparkles、git→Code(与编辑器同图标,和 Tauri 一致)。 面板内容对照 macos-settings-panels.tsx 各 Panel 逐项重写: - 常规:外观(配色主题/外观模式下拉)、语言、项目打开方式、 自动保存、Git 保护策略、隐藏路径(目录/文件模式展示+应用)。 - 编辑器:显示(字号步进 10-22、用法与作者开关)、标签页 (缓冲区轮播)、缩进(制表符宽度下拉)。 - 快捷键:预设下拉(Lithe/VSCode/JetBrains/Xcode)+ 快捷键搜索框。 - 终端:Shell 分组默认 Shell 下拉(系统默认/PowerShell/命令提示符/WSL)。 - LSP:自动补全/参数提示/语义高亮 + 已检测服务器说明。 - AI/AI 提交:分组结构与说明(完整配置后续接入)。 - Git:Fetch 默认行为/集成/视图/默认差异视图/编辑器全量偏好项。 - 日志:位置/诊断/保留策略/诊断包分组结构。 - 更新:软件更新分组(版本+检查按钮+状态文案)。 - 项目:JDK/Maven 三字段结构;运行:描述+生成按钮。 Settings 新增 24 个持久化字段,键与默认值与 Tauri defaultSettings 一致;新增下拉框/多行文本展示控件。
- 新增 linux/src/i18n.rs:菜单文案国际化,键与 Tauri `menu.*` / `titleProject.*` 对齐,按 display_language 取中英文(缺键回空, 与 Tauri t() 回退行为一致)。 - toolbar 菜单表按 window-menu-bar.tsx 逐项重建:九个菜单的分组、 条目、分隔线、快捷键(含 View 末尾 Theme 子菜单、Tools 的 databases 禁用项、Linux 下 Window 无 toggleMenuBar 段)。 - 顶层菜单标题与项目胶囊下拉项全部走翻译;菜单行用 PopupMenuItem::element 实现左标签右快捷键结构。 - view.handle_action 接入新动作 ID:文件操作、视图切换、全局搜索、 诊断面板、Explorer/Git 切换、快捷键设置页直达、主题切换 (menu.theme.<id>),未实现命令落到空分支。
对照 file-explorer-tree.tsx 的 SidebarHeader: - 去掉新建文件/刷新按钮;标题跟随语言(项目/Project)。 - 新增搜索按钮(tooltip 搜索文件/Search files):点击展开内联 过滤行,输入即按文件名过滤(含祖先目录),Esc 清空收起, X 一键清除;键盘输入由侧边栏焦点+on_key_down 处理。 - 新增偏好设置下拉(tooltip 文件资源管理器偏好设置): 可见性(隐藏文件/被 Git 忽略的文件/Git 状态标记)、外观 (文件图标/缩进参考线/紧凑文件夹/隐藏根文件夹)、排序顺序 (文件夹优先/名称)、缩进(紧凑/默认/宽松/宽)子菜单, 以及自动显示活动文件/删除前确认开关,全部落盘。 - 文件树渲染应用偏好:排序、隐藏根目录、隐藏文件过滤、 缩进尺寸、文件图标开关。 - Settings 新增 11 个文件树偏好字段,与 Tauri defaultSettings 键与默认值一致;i18n 新增 22 个对应中英文案。
- 底部面板默认收起不占空间,对齐 Tauri isBottomPaneVisible=false; view.rs 仅可见时渲染分隔条与面板。 - 删除自创的 Output 页签与假日志存储(Tauri 无 Output 面板); Problems 更名 Diagnostics(图标/文案对齐 Tauri WarningIcon/diagnostics)。 - 左侧活动栏宽 40→38,去左侧竖条,激活态改 accent 背景, tooltip 走 i18n 跟随语言;新增 7 个 workbench.* 中英文案。
对照 Tauri features/maven(导航面板 + 生命周期阶段): - 新增 MavenView:扫描工作区 pom.xml(深度上限 5,跳过构建产物目录), 项目树展示模块与 Lifecycle 九阶段,点击阶段发射 RunGoal 事件。 - 右侧栏 Maven 按钮改为开关右侧 280px Maven 工具窗口(对齐 Tauri toggleMavenPane);无 pom.xml 时右侧入口自动隐藏,有项目打开时同步。 - RunGoal 接线:底部面板切到 Terminal 并发送 mvn -f "<pom>" <phase>, 同时打开左侧 maven 项(对齐 Tauri hasMavenRun 语义)。
对照 Tauri locale.ts 与各面板 t() 调用: - i18n 新增 ~80 键(含 maven/ui/diagnostics/quickOpen/commandPalette/welcome/ 设置全部分类与内容),中英文与上游逐字对齐;Linux-frame 新增键标注。 - workbench:底部 Diagnostics 文案本地化、清除/隐藏按钮本地化; 左侧活动栏/右侧插件栏/Maven 面板标题与tooltip本地化;状态栏无文件时 不渲染占位;终端 Clear 本地化;工具栏快速打开本地化、紧凑菜单去 硬编码英文;欢迎页搜索/暂无项目/移除提示本地化。 - 弹窗:Quick Open 去徽标、占位/空态本地化;Command Palette 分类头 本地化(条目标题与 Tauri 同保持英文);Search Everywhere 动作名/ 范围/占位/空态本地化,删除底部快捷键提示条。 - 设置:全 12 分类 title_key 接 i18n,头部/底部按钮本地化,开关去 On/Off 文字,全部面板分组标题/行标题/描述/下拉选项本地化; render_group/render_note 入参改 owned String,render_dropdown 接 owned options 解决生命周期;新增项目工具链/运行生成/AI 等缺键, 管控语言名 "简体中文" 仅作为选项展示值保留。 构建零错误零告警。
对照 new-project-content.tsx / new-project-model.ts / project-picker.tsx: - 新增 ProjectDialog(遮罩+560x480 卡片):New 模式来源列表 (空项目/Next.js/Vite+React,搜索过滤)→详情表单(名称/位置/ 包管理器循环切换/目标预览/中文错误)→创建中;Clone 模式 (URL/名称自动推导/位置)→后台 git clone。 - 名称校验、URL 推导名、starter 命令字符串逐字移植 model.ts; 35 个 newProject.*/welcome.* 中英文案照抄 locale.ts。 - Cargo 新增 rfd 0.16:打开与选择父文件夹走原生目录框。 - view.rs:open_project_path 统一换根(sidebar/maven/关欢迎页); 工具栏与欢迎页的 New/Open/Clone 由占位改为真实链路; 模板项目打开后 starter 命令发往底部终端。
对照 recent-folders.ts / project-name-menu.tsx / GitBranchManager: - 最近项目:Settings 新增 recent_projects(去重首位/过滤不存在/ 截断 12,上限常量对齐 MAX_RECENT_PROJECTS);open_project_path 与 启动时记录;欢迎页列表改读持久化(点击打开/删除同步落盘); 项目胶囊“最近项目”分组渲染条目,点击直达。 - 分支徽标改下拉:分支列表来自 core git.references 本地分支; 当前分支打勾禁用;点其他分支经底部终端 git checkout,2 秒后 刷新 git 状态;分支名为专名不翻译。 - 欢迎页标题/副标题/按钮补 welcome.* 本地化;启动记录抽 settings::record_recent_project 共用。 构建零错误零告警,Xvfb 实测分支检出与最近菜单。
- 九菜单 File/Edit/View/Go/Terminal/Run/Tools/Window/Help 条目与 Tauri 同序,文案走 i18n - File:新窗口/开文件夹/关文件夹/另存为/全部保存/还原/标签页批量关闭与恢复 - Edit:撤销重做剪贴板全选注释复制行删除行上下移行;无 LSP 后端项禁用 - Go:跳转到行弹窗、上下标签页;无导航历史/LSP 项禁用 - View:换行/行号/空白符开关、字体缩放 10-22 落盘、go_to_line/面板开关 - Terminal:新建会话 respawn、关闭收起;单会话 split 禁用 - Window:全屏 toggle_fullscreen;Help 外链经 xdg-open - 紧凑菜单条去掉 on_mouse_down_out(吞弹窗点击),菜单项可触发 - editor_window_action fallback windows()[0];按键路径 editor_direct 直传 window - 行操作快捷键:Ctrl+D/Ctrl+//Ctrl+Shift+K/Alt+Up-Down - Xvfb 验证:复制行/切换注释/删除行生效
- Settings 补 Tauri 字段:fontFamily/lineHeight/renderWhitespace/vim/formatOnSave/terminalFontSize/cursorBlink/uiFontSize/gitExecutable/gitUseCredentialHelper/aiProvider/aiModel/aiCompletion/aiCommit/customLogDirectory;fontSize 默认 14 - General:隐藏目录/文件改为 Textarea 可编辑,应用按钮解析落盘 - Editor:字体下拉/行高步进/空白符下拉/字号 8-32,新增行为分组(换行/Vim/保存格式化);编辑器每帧同步 wrap/行号/空白符 - Keyboard:预设补全 8 项,Vim 开关 - Terminal:Linux 真实 shell 探测下拉,字号/回滚量/光标闪烁;终端按设置 shell 建会话、字号渲染 - LSP:保存时格式化开关 - Project:工具链三行可编辑,which 探测回填,保存写 .lithe/run/local.json - Run:读 configurations.json 列表,生成默认 Java 配置 - AI:提供商下拉/模型输入应用/自动补全开关;AI 提交:启用/语言/格式/正文/标题长度/diff 上限 - Git:执行分组(可执行路径探测清空应用+凭据助手开关) - Logs:自定义目录选择应用、清理 *.log、导出 diagnostic-bundle.json - Updates:检查更新显示已是最新版本 - Xvfb 实测:生成/保存/步进/探测/选择/导出/检查/应用均落盘生效
- 右侧:RightToolView 三视图(通知/Maven/扩展),toggle 语义同视图再点关闭,不持久化 - 通知面板:搜索过滤、全部已读、诊断行点击跳转文件行、未读数同步铃铛角标 - 扩展面板:扫描 Plugins/ + 内置项,搜索/分类/启用开关落盘 extensions.json - 底部:新增 Run(运行历史+重跑,经 send_terminal_command 统一记录)与 GitLog(git log 只读列表)Tab - 左下:run/maven/gitLog 映射到独立 Tab;maven 图标仅运行历史非空出现;settings 开弹窗 - run.start 补进命令映射;构建零告警,Xvfb 全量实测通过
- 工具栏搜索按钮 tooltip 改用 workbench.search,对齐 title-bar.tsx quickOpenAction - QuickOpen 增加已打开/最近/其他三段分组与命中计数徽标,对齐 useFileSearch + FileCountBadge - 新增 quickOpen.filesCount/fileCountOne 文案
- 新增 linux/assets/file-icons(lithe-icons SVG + map.json) - 新增 linux/build.rs:编译期生成查找表与 SVG 内嵌字节 - 新增 workbench/file_icon:对齐 Tauri 文件名/多后缀扩展名/目录名查找与深浅主题 - 侧边栏、快速打开、编辑器标签页接入,缺失回退 Lucide 单色图标
- links 冲突:全图只允许一份 tree-sitter 原生库 - core 仅用 Parser/Node 基础 API,适配 Node::child 改取 u32
added 25 commits
September 25, 2026 00:32
- 工具栏 Run/Debug 走底部 Run 页受管进程,不再发终端假命令 - Stop 杀 Run/Maven 子进程;Maven 目标走新增底部 Maven 页 - 底部新增 Maven 页签(launchPlan 参数 + $ mvn 首行输出) - 左侧 maven 项改由 Maven 任务点亮,终端命令不再误触
- 固定标签:is_pinned 置顶组,批量关闭跳过,菜单固定项 - 窗格树 panes:任意嵌套左右/上下拆分、关闭合并、比例拖拽 - 锁定窗格:新文件路由自动跳过锁定窗格 - 菜单补齐拆分/锁定项
- 9 分类签带计数(搜索命中内计数),替代 5 项下拉 - 行点选代替行内开关;未启用行内加号一键启用 - 列表下加详情区:徽标/发布者/版本/启用停用/贡献项 - 文案键与 locale.ts 同键;删无用 has_run_history
- 点击行标已读+展开详情(含删除),诊断行保留跳文件 - 类型筛选签行;头部加全部清除;空构造对齐空态 - 打开通知页即全标已读;全部文案走 notifications.* 键
- 模块树(artifactId+packaging 副标题,嵌套 modules,引导线) - caret 与标签分离;phase 单击选中、双击运行 - 依赖嵌套树 + Tauri 同式副标题 + omitted 标记 + 重试/取消 - 工具栏:运行选中/目标文本/reload/跳过测试/全部折叠/设置 - Profiles 勾选与 skipTests 进 launchPlan;任务标题 phase·artifactId - 失败重试面板;全部文案走 maven.* 键
- 删共享标签条,切换只走左侧活动栏 - Run 头:运行/停止+重扫+清空+最小化;Maven 头:停止+重跑+清空+最小化 - 终端/诊断/GitLog 头:标题+最小化,保留清空/刷新 - 进程 framing 行与清空语义全部走 i18n 键
- 删自带控制栏(与窗格头重复),输出区占满 - 输出改 channel 主线程泵,实时出现;ANSI 剥离 + 回车覆盖 - 输入条换真实单行输入,回车/按钮发送整行 - 文案全部走 terminal.* 键
- 新增 vte 依赖做转义解析:颜色/加粗/擦除/光标移动 - 点击聚焦后键盘直输 PTY:历史补全方向键中断均可用 - 聚焦显示反色光标;输出实时流式;中文直输 - 删底部输入条与自带控制栏;文案走 terminal.* 键
- 行式自研解析换 Alacritty 网格状态机(颜色/光标/擦除/滚屏全真) - 渲染可见区网格,同样式合并;聚焦反色光标块 - 应用光标键模式;清屏走 2J;删 vte 直依赖
- Run 输出加滚动跟随开关(默认开,落盘),新增输出滚到底 - 输出行显式换行模式 + 行首缩进保留(pre-wrap 口径) - 终端网格行视觉换行,不再裁掉超宽行
This reverts commit 164aa2e.
Linux 端此前只有诊断面板 UI,没有任何数据生产者,面板恒为空。本次把编辑器 文档变化接到共享 Rust Core 的 LSP 引擎,让诊断面板拿到真实的语言服务器结果。 改动点: - 新增 `linux/src/lsp.rs`:语言/服务器选择(rust-analyzer、clangd、pyright、 typescript-language-server、gopls、jdtls)、PATH 可执行文件探测、工作区 路径与 `file://` URI 的双向编解码(含百分号转义)、`lsp.startServer` / `lsp.syncDocument` / `lsp.pollEvents` 的请求载荷,以及把 `diagnostics` 事件投影为面板条目的解析逻辑;并带 4 个单元测试。 - `linux/src/workbench/editor.rs`:`EditorTabEvent` 新增 `DocumentChanged`, 在打开文件、切换标签和编辑文本时广播当前活动文档。 - `linux/src/workbench/view.rs`:工作台持有 LSP 会话、待同步文档、轮询任务和 诊断缓存;订阅编辑器文档事件后按需启动会话(同 provider 只启一个)、 启动后 flush 暂存文档、以 400ms 有界间隔轮询事件,并把诊断聚合排序后交给 底部面板;会话终态或轮询失败后清理会话状态。 - `linux/src/workbench/bottom_panel.rs`:新增 `set_diagnostics` 供工作台写入, 清空按钮改为发出 `ClearDiagnostics` 事件,让宿主同步丢弃缓存,避免下一轮 诊断把已清空内容重新填回。 - `linux/src/lib.rs`、`linux/src/main.rs`:声明 `lsp` 模块。 验证: - `cargo build --manifest-path linux/Cargo.toml` 通过。 - `cargo test --manifest-path linux/Cargo.toml --bin lithe-linux` 23 项通过 (含 4 项新增 lsp 测试)。 - 用临时 smoke 程序直接调用 Core 的 `lsp.startServer`/`lsp.syncDocument`/ `lsp.pollEvents` 驱动 rust-analyzer,确认能收到带 `range.start.line`、 `utf16Column`、`severity`、`source` 的 diagnostics 事件,与投影逻辑一致。
- 新增 lsp.rs 模块:支持 rust-analyzer、clangd、pyright、typescript-language-server、gopls、jdtls 等语言服务器 - 新增 run/ 模块(config.rs + process.rs):重构 Run 配置管理,使用 Core runConfig.inspect/generate/resolve 替代本地文件读写 - bottom_panel.rs:引入 ProcessManager 统一管理子进程生命周期,支持 Run/Maven 多进程隔离 - editor.rs:新增 publish_active_document 事件,支持 LSP 文档同步 - settings_dialog.rs:Run 配置切换时自动重载,支持 workspace root 变更时重置配置状态 - view.rs:LSP 会话管理、诊断聚合、编辑器同步等能力接入 - 更新 Java 项目构建与启动边界笔记
Linux GPUI 工作台此前只有少量硬编码快捷键,且与菜单展示的快捷键不一致:
菜单写着 Ctrl+F / Ctrl+Shift+E / Ctrl+Shift+P 等,按下却无响应,原因是
`toolbar.rs` 的菜单表与 `view.rs` 的 `on_key_down` 各写了一份定义。
本次把「菜单表」确立为快捷键唯一真源:
- 新增 `linux/src/keybindings.rs`
- `KeyStrokeId`:归一化修饰键与主键名(`Ctrl+Shift+P` / `Alt+Up` / `F11`)。
- `KeymapIndex`:启动时从菜单表构建「按键 → 动作 id」索引,并保留无法
解析的写法供自检。
- `DoubleShiftRecognizer`:移植 Tauri `DoubleShiftGestureRecognizer`,
仅统计独立 Shift 的两次抬手,350ms 时间窗内触发;期间出现其它按键或
Ctrl/Alt/Super 会取消手势。
- `toolbar.rs` 新增 `menu_shortcut_entries()`:展平菜单快捷键表,跳过
`disabled` 条目并按菜单顺序去重,避免禁用项(如 `go.references` 的
Ctrl+B)抢走可用项按键。
- `view.rs` 按键监听改为查表分发:命中后编辑器动作经 `editor_direct`
直达(需要 `&mut Window`),其余统一交给既有 `handle_action`,与菜单项、
命令面板共用同一套动作分支;弹窗打开时不抢键,保证输入框正常打字。
- 新增 `.on_modifiers_changed` 监听:双击 Shift 打开全局搜索
(`view.global_search`),打开任意弹窗时重置手势状态,避免跨上下文拼接。
- 启动时自检快捷键表,出现不可解析写法或空表时输出到日志。
生效范围(42 条,全部与菜单展示一致):文件(新建/打开/保存/关闭/重开)、
编辑(撤销/重做/剪贴板/注释/复制行/删除行/上下移动行/查找/替换)、
视图(命令面板/活动栏/侧边栏/底部面板/全局搜索/诊断/资源管理器/Git/
自动换行/缩放)、跳转(快速打开/跳转行/上下标签)、窗口(最小化/最大化/
全屏)。双击 Shift 触发搜索与 Tauri/IntelliJ 行为对齐。
验证:`cargo check` 无警告;`cargo test --lib` 33 通过(含 10 条快捷键
与双击 Shift 单测,覆盖解析、冲突、禁用项过滤与时间窗边界)。
Linux 第二阶段补齐 Java Main / Spring Boot 的 Core 直启链路,与
macOS/Windows 走同一条 Java 项目准备边界,不再依赖 Maven goal 启动。
- `linux/src/lsp.rs`
- 解析 JDT LS 直启资源:优先 `LITHE_JDTLS_ROOT` / `LITHE_JDK_ROOT`,
默认工作区 `.artifacts/jdtls-linux` 与 `.artifacts/jdk-linux`;
equinox launcher / debug plugin 按版本排序,资源目录存在但不完整时
返回可操作错误,外部 `jdtls` wrapper 仅作兼容回退。
- 提供 workspace fingerprint、`javaLaunch` 请求形状与入口 / classpath /
build 结果的解析(不扫源码、不在 UI 拼 classpath)。
- 会话生命周期:Core `java` provider、`ServiceReady`、
`projectPreparation.blocksRun` 快照、过期 session/sequence 拒绝。
- `linux/src/workbench/bottom_panel.rs`
- Maven-backed `java.main` 与带 Java 入口的 Spring Boot 先等待 session
ready,再按 `javaEntrypoints` → `vscode.java.buildWorkspace` →
`vscode.java.resolveClasspath` 顺序准备,把 JDT 返回的
`{mainClass, projectName, classPaths, modulePaths}` 作为 `javaLaunch`
交给 `runConfig.createLaunchPlan`。
- 构建失败保留 Core build diagnostics 并阻止主进程,可通过再次 Run 重试;
无 JDT 元数据时 framework goal 与独立 Java `javac -> java` 仍走既有计划。
- `view.rs` 持有唯一 `java` session,处理 workspace 失效与诊断聚合。
- 更新 Agent 笔记,记录第二阶段的 Linux 边界与验证方式。
验证:`cargo check` 无警告;`cargo test --lib` 40 通过(覆盖 JDT 资源排序、
载荷形状、入口/classpath/build 解析、provider 门禁、过期 session/sequence
与进程组停止);测试不依赖本机 Maven/JDK/网络。
重写 linux/src/workbench/terminal.rs,去掉自绘的固定 120x30 终端,改为 只做「上游引擎 -> GPUI 元素」的投影,终端语义全部交给 alacritty_terminal。 功能点: - 随窗缩放:容器尺寸变化时 resize 网格并同步 PTY 行列数,全屏 TUI 能拿到 正确窗口大小;上游 reflow 由 Term::resize 完成。 - 回滚滚动:滚轮驱动 Term::scroll_display,可查看历史输出。 - 鼠标选择:左键单击/双击/三击分别是 simple/semantic/lines 选区,拖动更新; 选区命中换算叠加回滚偏移,上滚后仍命中同一行。 - 复制粘贴:Ctrl+Shift+C/V 走 Term::selection_to_string 与系统剪贴板。 - 终端内搜索:Ctrl+Shift+F 打开搜索栏,用 term::search::RegexSearch + Term::search_next 上/下一个命中,命中滚入视口并复用 selection 高亮。 - 等宽对齐:单元格宽用上游 em_layout_width 按字号实测,鼠标命中所用 CellMetrics、网格 cols/rows、PTY 尺寸三者共用同一来源。 - 光标:聚焦时反色块,含行尾之后与空行两处补块。 其余: - i18n 新增 terminal.searchPlaceholder 文案键。 - 新增 Agent Note 记录「GPUI 无可复用完整终端控件、只复用引擎层」的边界。 - 新增 12 个测试:坐标/内边距/回滚偏移换算、256 色与加粗解算,以及引擎 联通性(解析入网格、display_offset、selection 导出、resize 列数)。 验证:cargo build/test 通过(lib 52 项);verify-test-stability 通过; verify-agent-notes 通过(36 篇)。
设置 → 常规 → 外观 里同时有「配色主题」和「外观模式」两行,但 Linux 只有 lithe-dark / lithe-light 两个主题,前者与后者的浅色/深色选项完全重复, 且「外观模式」已额外覆盖「跟随系统」,因此删掉冗余的「配色主题」行。 - `settings_dialog.rs`:移除 `general-theme` 下拉行(含其 commit_theme 分支逻辑,该逻辑已由外观模式行覆盖)。 - `i18n.rs`:删除不再使用的 `settings.mac.colorTheme` 文案; `settings.mac.appearanceDescription` 改为只描述外观模式 (原文案「选择配色主题,并设置是否跟随系统外观」已不适用)。 验证:`cargo check` 无警告;`cargo test --lib` 52 通过。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Linux前端——gpui