Skip to content

feat(explorer): 希望切到檔案/diff 分頁時,檔案總管/git能跟著定位過去 #336

Description

@yw-chan

現況

「explorer root = 目前工作情境」在終端機這邊已經是雙向同步:

  • 切到某個終端機 pane 時,它會強制把 explorer root 同步成自己的 cwd(即使 cwd 沒變也會同步一次)。
  • 反過來 explorer root 一變(例如點 breadcrumb 換資料夾),追蹤中的終端機也會被 cd 過去。
  • 原始碼控制面板的 repo 也是從 root 解析的,root 切到哪它就顯示哪個 repo 的變更。

editor 分頁和 diff 分頁被切到時,什麼都不會驅動。檔案樹雖然會高亮「使用中 editor 分頁的檔案」,但只有該節點已經渲染出來(祖先資料夾展開過、而且檔案在目前 root 底下)才看得到,也不會自動展開或捲動。

問題(重現步驟)

  1. root 在資料夾 A,從檔案總管開了 A 裡的檔案分頁。
  2. 點到 cwd 在資料夾 B 的終端機分頁 → 終端機驅動 root,檔案總管整棵樹換成 B 並全部收合。
  3. 切回 A 的檔案分頁 → root 留在 B,檔案總管不會跟過去;檔案根本不在樹裡,連現有的高亮都沒機會出現。

提案

editor 分頁和 diff 分頁也加入「driver」行列,和終端機對稱:

  • editor 分頁:切到分頁時在檔案總管定位到該檔案——
    • 檔案在目前 root 內:不切 root,把祖先資料夾逐層展開(樹是懶載入,需要新增「展開到指定路徑」的機制,目前只有全部展開)並捲動到該檔案;高亮沿用現有機制。
    • 檔案在 root 外:先把 root 切到檔案所屬的資料夾,再做 reveal。終端機會跟著被 cd 過去——這和點 breadcrumb 換資料夾的既有語意一致,不是新副作用。
  • diff 分頁:同樣邏輯,但定位對象是原始碼控制面板——
    • root 外時先把 root 切到該 repo 根目錄(diff 分頁本身帶有 repo 路徑),git 面板就會跟到對的 repo。
    • 接著在變更清單中高亮並捲動到該檔案(對應 staged/unstaged 區塊)。

editor 分頁在 root 外時,root 切到哪?

希望優先帶到現有終端機的目錄:掃一遍已開啟的終端機 pane,若有某個 pane 的 cwd 是該檔案的上層目錄,就把 root 切到那個 cwd——等於回到當初開這個檔案時所在的「資料夾 A」,而且該終端機本來就在那裡,不會多送一次 cd

若沒有任何終端機符合,fallback 再討論(往上找最近的 git repo 根目錄,或檔案的上一層資料夾)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions