- ファイルペイン(拡大セルのフォルダトグル「Show files」、およびツールバーの Files)のツリー行は、
クリックして開く・展開する以外の操作がなく、そのファイル/ディレクトリのパスを隣のターミナルに
渡す手段がありません。エージェントに「このファイルを見て」と言うたびにパスを手で打っています。
- 提案: ツリー行を Cmd(Windows/Linux では Ctrl)を押しながらクリックすると、そのパスが拡大セルの
ターミナルのカーソル位置に挿入される。コピーしてからペーストする 2 手ではなく 1 手にしたいです。
- 挿入という操作自体はこのアプリに既にあります足りないのは、既に画面に開いているツリーからそれを起動する
入口です。
既存 issue は検索済みで、同じことを扱っているものはありませんでした。関連は上記のクローズ済み 4 件と、逆方向の
#778(ターミナル出力中のパスをクリックしてペインで開く)、#1610(CLI から GUI 側でファイルを開く)です。
現状の確認(4.10.1 のソースを読んだ範囲)
src/components/FilesPane.vue のツリー行は @click="openFile(node)" を持つだけの <button> で、
修飾キーの判定もコンテキストメニューもドラッグもありません。Cmd を押しながら押しても、ただ普通に
ファイルが開くだけです。
- 一番近い既存機能はヘッダーの既定ボタン
pick-file(クリップのアイコン、"Insert a file path"、
server/config/header-config.ts)で、選んだパスを実際にセッションへ打鍵します
(src/composables/useHeaderAction.ts → pickPaths → insertText)。ただし入口が
サーバー機の OS ファイルダイアログなので、目の前に開いているツリーからは選べず、ブラウザと
サーバーが別マシンだと使えません。
触ることになりそうなところ
src/components/FilesPane.vue — ツリー行のクリックハンドラで event.metaKey / ctrlKey を見て分岐。
Node.path は root からの相対パスなので、絶対パスは props.cwd と結合すれば作れます
(src/composables/canvasOpenFile.ts の absoluteUnder が既にあります)。
- 挿入するテキストの組み立てとクォートは
src/components/dropPaths.ts の toShellArg /
toInsertText がそのまま使えます(空白や特殊文字を単一引用符で包み、末尾に区切りの空白を足す)。
打鍵は insertText(slotKey, text)(src/composables/useTerminalConnections.ts)。
- 宛先のターミナルをどう受け取るかが唯一の設計上の穴です。 ペインは 2 箇所からマウントされます。
TerminalGrid.vue(拡大セルの隣)は宛先のセルが決まりますが、FilesOverlay.vue(全画面の Files)
には隣のターミナルがありません。ペイン自身は宛先を知らないので、
「挿入先があるときだけ渡される callback を prop で受け取り、無ければこの挙動を出さない」形に
なると思います(canvasTarget prop が既に同じ形で「隣にセルがあるときだけ Canvas ボタンを出す」
ことをやっているので、それに倣う想定です)。
決めていただきたい点
- 挿入するのは相対パスか絶対パスか。 ツリーの root は拡大セルのディレクトリなので、そのセルの
エージェントに渡すぶんには相対パスで足ります。ただし cd した後だと壊れるので、絶対パスのほうが
安全という判断もあると思います(pick-file と D&D はどちらも絶対パスを入れています)。
- 修飾キーで良いか。 VS Code に合わせると Cmd+クリックですが、発見しづらく、
keymap の既存
バインドとも衝突しえます。ホバー時の小さなアイコン、あるいはコンテキストメニューのほうが
この repo の流儀に合うなら、そちらでも目的は達せられます。
- ディレクトリでも同じ挙動にするか(末尾スラッシュを付けるかどうかを含めて)。
- 全画面の Files ビューでは、この操作は出さない(宛先が無いため)という割り切りで良いか。
クリックして開く・展開する以外の操作がなく、そのファイル/ディレクトリのパスを隣のターミナルに
渡す手段がありません。エージェントに「このファイルを見て」と言うたびにパスを手で打っています。
ターミナルのカーソル位置に挿入される。コピーしてからペーストする 2 手ではなく 1 手にしたいです。
入口です。
pick-filefeat: ヘッダーのアクションボタンを config 駆動・拡張可能にし、新セル/PR/隣接挿入アクションを追加 #319既存 issue は検索済みで、同じことを扱っているものはありませんでした。関連は上記のクローズ済み 4 件と、逆方向の
#778(ターミナル出力中のパスをクリックしてペインで開く)、#1610(CLI から GUI 側でファイルを開く)です。
現状の確認(4.10.1 のソースを読んだ範囲)
src/components/FilesPane.vueのツリー行は@click="openFile(node)"を持つだけの<button>で、修飾キーの判定もコンテキストメニューもドラッグもありません。Cmd を押しながら押しても、ただ普通に
ファイルが開くだけです。
pick-file(クリップのアイコン、"Insert a file path"、server/config/header-config.ts)で、選んだパスを実際にセッションへ打鍵します(
src/composables/useHeaderAction.ts→pickPaths→insertText)。ただし入口がサーバー機の OS ファイルダイアログなので、目の前に開いているツリーからは選べず、ブラウザと
サーバーが別マシンだと使えません。
触ることになりそうなところ
src/components/FilesPane.vue— ツリー行のクリックハンドラでevent.metaKey / ctrlKeyを見て分岐。Node.pathは root からの相対パスなので、絶対パスはprops.cwdと結合すれば作れます(
src/composables/canvasOpenFile.tsのabsoluteUnderが既にあります)。src/components/dropPaths.tsのtoShellArg/toInsertTextがそのまま使えます(空白や特殊文字を単一引用符で包み、末尾に区切りの空白を足す)。打鍵は
insertText(slotKey, text)(src/composables/useTerminalConnections.ts)。TerminalGrid.vue(拡大セルの隣)は宛先のセルが決まりますが、FilesOverlay.vue(全画面の Files)には隣のターミナルがありません。ペイン自身は宛先を知らないので、
「挿入先があるときだけ渡される callback を prop で受け取り、無ければこの挙動を出さない」形に
なると思います(
canvasTargetprop が既に同じ形で「隣にセルがあるときだけ Canvas ボタンを出す」ことをやっているので、それに倣う想定です)。
決めていただきたい点
エージェントに渡すぶんには相対パスで足ります。ただし cd した後だと壊れるので、絶対パスのほうが
安全という判断もあると思います(
pick-fileと D&D はどちらも絶対パスを入れています)。keymapの既存バインドとも衝突しえます。ホバー時の小さなアイコン、あるいはコンテキストメニューのほうが
この repo の流儀に合うなら、そちらでも目的は達せられます。