現況
「explorer root = 目前工作情境」在終端機這邊已經是雙向同步:
- 切到某個終端機 pane 時,它會強制把 explorer root 同步成自己的 cwd(即使 cwd 沒變也會同步一次)。
- 反過來 explorer root 一變(例如點 breadcrumb 換資料夾),追蹤中的終端機也會被
cd 過去。
- 原始碼控制面板的 repo 也是從 root 解析的,root 切到哪它就顯示哪個 repo 的變更。
但 editor 分頁和 diff 分頁被切到時,什麼都不會驅動。檔案樹雖然會高亮「使用中 editor 分頁的檔案」,但只有該節點已經渲染出來(祖先資料夾展開過、而且檔案在目前 root 底下)才看得到,也不會自動展開或捲動。
問題(重現步驟)
- root 在資料夾 A,從檔案總管開了 A 裡的檔案分頁。
- 點到 cwd 在資料夾 B 的終端機分頁 → 終端機驅動 root,檔案總管整棵樹換成 B 並全部收合。
- 切回 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 根目錄,或檔案的上一層資料夾)。
現況
「explorer root = 目前工作情境」在終端機這邊已經是雙向同步:
cd過去。但 editor 分頁和 diff 分頁被切到時,什麼都不會驅動。檔案樹雖然會高亮「使用中 editor 分頁的檔案」,但只有該節點已經渲染出來(祖先資料夾展開過、而且檔案在目前 root 底下)才看得到,也不會自動展開或捲動。
問題(重現步驟)
提案
讓 editor 分頁和 diff 分頁也加入「driver」行列,和終端機對稱:
cd過去——這和點 breadcrumb 換資料夾的既有語意一致,不是新副作用。editor 分頁在 root 外時,root 切到哪?
希望優先帶到現有終端機的目錄:掃一遍已開啟的終端機 pane,若有某個 pane 的 cwd 是該檔案的上層目錄,就把 root 切到那個 cwd——等於回到當初開這個檔案時所在的「資料夾 A」,而且該終端機本來就在那裡,不會多送一次
cd。若沒有任何終端機符合,fallback 再討論(往上找最近的 git repo 根目錄,或檔案的上一層資料夾)。