Skip to content

fix(terminal): bridge Ctrl+V clipboard paste into the pty (Li+ Desktop) - #88

Merged
liplus-lin-lay merged 1 commit into
mainfrom
87-fixterminal-clipboard-paste-ctrl+v-never-reaches-the-pty
Jun 16, 2026
Merged

fix(terminal): bridge Ctrl+V clipboard paste into the pty (Li+ Desktop)#88
liplus-lin-lay merged 1 commit into
mainfrom
87-fixterminal-clipboard-paste-ctrl+v-never-reaches-the-pty

Conversation

@liplus-lin-lay

Copy link
Copy Markdown
Member

概要

埋め込みターミナル(xterm.js)で Ctrl+V による貼り付けが pty に届かない問題を修正。

原因

src/tabs.tscreateSessionTerminalterminal.onData → write_pty でキー入力のみ pty に流しており、paste を処理する配線が無かった。加えて Tauri の clipboard プラグインが未導入だった。

変更

  • tauri-plugin-clipboard-manager(JS/Rust)を追加し、lib.rs で登録、capabilities/default.jsonclipboard-manager:allow-read-text を許可。
  • createSessionTerminalattachCustomKeyEventHandler を追加:Ctrl+V / Ctrl+Shift+V を捕まえ、clipboard を読んで write_pty でアクティブセッションの pty に流す。
  • e.preventDefault() でネイティブ paste との二重入力を抑止。

検証

tauri dev で起動し、Ctrl+V で日本語テキストが pty(claude セッション)へ 1回でクリーンに 通ることを実機確認(初回は二重入力 → preventDefault で解消、再検証で単一を確認)。

Closes #87

埋め込みターミナル(xterm.js)に paste の配線が無く、Ctrl+V がクリップボードのテキストを pty に届けられなかった(人間操作・自動操作とも)。tauri-plugin-clipboard-manager を導入し、createSessionTerminal に Ctrl+V / Ctrl+Shift+V を捕まえるハンドラを追加して clipboard を読み write_pty に流す。e.preventDefault でネイティブ paste との二重入力を抑止した。

tauri dev で日本語テキストの貼り付けが1回でクリーンに pty(claude セッション)へ通ることを実機確認済み。

Refs #87

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@liplus-lin-lay liplus-lin-lay linked an issue Jun 16, 2026 that may be closed by this pull request

@liplus-lin-lay liplus-lin-lay left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI self-review (auto モード)

  • 変更は最小・対象限定。paste ハンドラは Ctrl/Cmd+V(keydown, Alt 除外)のみ捕捉し、Ctrl+C 等は素通し(SIGINT に影響なし)。
  • 権限は clipboard-manager:allow-read-text のみ(read 限定=最小権限。write は不要なので付与せず)。
  • 実機検証済み:tauri dev で日本語の Ctrl+V 貼り付けが pty(claude セッション)へ1回でクリーンに到達。初回の二重入力は e.preventDefault() で解消し、再検証で単一を確認。
  • 型チェック tsc --noEmit パス、Rust ビルド成功。CI 設定は無し(プロトタイプ)。
  • 規模=小・user/system observable な挙動修正 → patch 相当。

PASS。squash マージする。

@liplus-lin-lay
liplus-lin-lay merged commit 6ac2033 into main Jun 16, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(terminal): clipboard paste (Ctrl+V) never reaches the pty

1 participant