Skip to content

Linux front - #885

Closed
VedaChen wants to merge 60 commits into
1lck:mainfrom
VedaChen:linux_front
Closed

VedaChen wants to merge 60 commits into
1lck:mainfrom
VedaChen:linux_front

Conversation

@VedaChen

Copy link
Copy Markdown

Linux前端——gpui

chenjunjie 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
chenjunjie 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 口径)
- 终端网格行视觉换行,不再裁掉超宽行
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 通过。
@ghfind-review ghfind-review Bot added the review: low ghfind author score; see https://ghfind.com label Sep 25, 2026
@VedaChen VedaChen closed this Sep 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: low ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant