Skip to content

[Feature] 界面布局自由度:侧栏宽度可调、窗口尺寸/位置记忆、顶栏与置顶的位置 #73

Description

@Baekjojo

What problem does this solve?

环境:Windows 11 x64 / Percho 0.6.0。三个点都是「界面尺寸/位置该由用户决定、并且被记住」,
用了一天感受攒下来的,放一条里说。

1. 左侧栏宽度锁死 240px,不能拖

packages/desktop/src/renderer/src/styles/globals.css 里 .sidebar / .sidebar-inner 都是固定
240px,只有折叠态 width: 0;没有 resize handle。packages/desktop/src/main/ui-state.ts 里
也 grep 不到任何 width/height 字段(与侧栏相关的只有 sidebarCollapsed 这个布尔)。

结果是窗口本身能自由缩放,唯独侧栏永远是 240:会话名稍长就被省略号截断,屏幕宽的时候这块
空间又用不上。目前只能靠顶栏最左的开合按钮在 240 ↔ 0 之间切,粒度太粗。

2. 窗口尺寸和位置不会被记住

packages/desktop/src/main/window.ts:

const window = new BrowserWindow({
    width: 1100, height: 750, minWidth: 640, minHeight: 480, show: false,
    ...
});

全是写死的常量。该文件只注册了 ready-to-show 和 close 两个监听,没有
move / resize / getBounds / setBounds;ui-state.ts 里也没有任何 bounds 字段。
所以每次启动都回到 1100×750 默认尺寸,位置也回默认——手动拉好的尺寸和摆放位置全部丢失。

3. 顶栏与置顶的位置

现在顶栏是「置顶条」——docs/INDEX.md 里写得很明确:

v8:顶栏胶囊 = 置顶会话(不看 tab 开没开),严格只含置顶,顺序就是 pinnedSessions;
未置顶会话只在左栏。

同时启动是纯空(不再恢复上次打开的会话,tabs.json 链路退役)。

两个加一起,实际体验是:会话明明还开着、甚至 agent 还在跑,但顶栏看不到它,只能去左栏滚
或者用搜索框打名字找。在 Windows 上更明显,因为点 × 会直接退出应用,重开之后什么都没恢复,
得重新找一遍刚才那条会话。

而置顶我原本期望的是放在左栏「项目列表」那个位置——所有分组之上、独立成一个区。现在的
置顶是在所属分组内部排最前:packages/desktop/src/renderer/src/lib/sidebar-groups.ts
第 148 行「组内 = 置顶会话在前,其余按最后活动倒序」,返回结构是
{ daily, projects, defaultExpandedKeys },没有跨分组的置顶区。所以置顶的用处被「它属于哪个
项目」稀释了——想快速够到的几个会话散在不同项目组里,还是得滚着找。

Proposed solution

尺寸

  1. 侧栏加拖拽把手,宽度可调(例如 200–480px),拖动实时生效;
  2. 拖完的宽度写入 ui-state.json,重启保持;
  3. 窗口尺寸与位置一并持久化。建议存 getBounds(),并用 screen 做一次校验
    (外接显示器拔掉后不要把窗口留在可视区外,那种情况回退默认/主屏居中)。

顶栏与置顶

  1. 顶栏恢复显示「当前打开的会话」(置顶的可以排前、其余按最近活动排后);或者退一步,
    给个设置项让用户选「顶栏显示置顶 / 显示打开的会话」;
  2. 左栏顶部(搜索框以下、日常与各项目之上)新增「置顶」分区,聚合所有置顶会话,
    与原有「组内置顶在前」可以并存;
  3. (可选)启动时恢复上次的活跃会话,至少恢复 1 个。

Alternatives considered

  • 侧栏宽度:现在只能靠折叠(240 ↔ 0)腾空间;
  • 窗口尺寸:只能每次启动后手动再拉一次;
  • 找会话:现在可以靠左栏搜索框或逐个项目展开找,但每次都要重新输入名字,而「刚才在用的
    那条」本来应该一眼可见;
  • 置顶:现在可以用「顶栏只显示置顶」变相达到类似效果,但顶栏是横向窄条,会话一多就挤,
    也承载不了列表式的快速浏览。

我理解「侧栏恒 240」「顶栏 = 置顶条」「启动纯空」都是有意设计(#68 里「左栏 width 恒 240」
还是验收项,PR #66 里顶栏语义和启动策略也都写明了理由),所以这条是功能请求/希望提供开关,
不是报 bug。默认保持现状、只加能力也可以。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions