Claude Media
Claude CodeをKonsoleで使うときのスクロール・コピー・再描画の不具合

Claude CodeをKonsoleで使うときのスクロール・コピー・再描画の不具合

KDE Konsoleで起きる3症状(Shift+PageUpが効かない・大きな選択のコピーが欠ける・折りたたみ後に再描画されない)の原因と回避策を切り分けます。

Claude CodeをKDE Konsoleで使うと、3つの別々の不具合が報告されています。Shift+PageUpでスクロールバックが動かない、大きな範囲を選んでコピーすると文字が欠ける、展開した出力を畳んでも画面が更新されない、の3つです。3つとも原因は別で、公式の修正版はまだ出ていません。

先に切り分けの早見表を置きます。

症状起きる条件回避策
Shift+PageUpがスクロールにならない起きる条件v2.1.269以降・通常(非フルスクリーン)表示回避策Konsoleのkitty keyboard protocolをオフにする
大きな選択のコピーで文字が欠ける起きる条件特定プロジェクトの既存会話(v2.1.220)回避策範囲を分けてコピーする / ファイルに書き出させる
折りたたみ後に画面が更新されない起きる条件展開した出力を畳んだとき(v2.1.251)回避策マウスを動かして再描画させる

Shift+PageUpでKonsoleのスクロールバックが動かない

いちばん影響が大きいのがこの症状です。Claude Codeを起動したままShift+PageUpを押しても、Konsoleの履歴は遡れません。代わりに入力欄のカーソルが行頭へ、続けて押すと1行上へ動きます。プレーンなPageUpと同じ動きです。

何が起きているのか

報告(issue #94151、v2.1.270で確認)によると、原因はv2.1.269の変更です。この版でkitty keyboard protocolのキー入力問い合わせに答える端末が、Shift+EnterやCtrl+Shiftのショートカットを使えるようになりました。Konsoleもこの問い合わせに答えます。

Konsoleは、プロトコルが有効になるとShift+PageUpを自分で処理するのをやめ、修飾キー付きのままアプリへ渡します。報告者がstraceで確認したところ、Claude Codeの標準入力にはESC[5;2~という6バイトがそのまま届いていました。セミコロンの後ろの2がShiftを表します。つまりKonsole側は仕様どおりに動いています。

問題はその先です。Claude Code側でShift+PageUpに割り当てがないとき、プレーンなPageUpの処理へ落ちます。Konsoleのスクロールバックショートカットは設定画面から変更できない固定の動作なので、端末側で取り戻す手段もありません。Claude Codeを終了すると、Shift+PageUpは普通に効きます。

nullで解除しても直らない

keybindingsの公式ページでは、アクションにnullを設定すると既定のショートカットを解除できます。報告者は次の設定を試しました。

{
  "context": "Global",
  "bindings": {
    "shift+pageup": null
  }
}

再起動しても、Shift+PageUpは行頭へのジャンプのままでした。nullを指定してもプレーンPageUpへの落下が止まらない、というのが報告の主張です。ここは公式の見解ではなく、報告者が手元で確かめた挙動です。

回避策1: Konsole側でkitty protocolを切る

いちばん確実なのは、原因の入口を塞ぐ方法です。同じissueのコメントで、別の利用者が次の手順を紹介しています。

  1. 設定から「現在のプロファイルを編集」を開き、詳細設定へ進む
  2. 「Kitty keyboard protocol」のチェックを外す(端末プログラムにkitty keyboard protocolの利用を許可する項目)
  3. 適用して、新しいタブを開き、claudeを起動し直す

既存のタブは古い設定を保持することがあるため、新しいタブで確認します。副作用として、kitty protocolを前提にしたキー(Shift+Enterなど)はKonsoleでは使えなくなります。改行にはCtrl+Jか、\に続けてEnterを使います。

回避策2: 具体的なアクションを割り当てる

もう1つの報告は、Shift+PageUpに具体的なアクションを割り当てる方法です。

{
  "context": "Global",
  "bindings": {
    "shift+pageup": "app:toggleTranscript"
  }
}

こうすると、Shift+PageUpでトランスクリプト画面が開き、プレーンPageUpの行移動は起きなくなります。設定は再起動なしで反映されたとのことです。

ただし、これでKonsoleのスクロールバックが戻るわけではありません。カーソルが勝手に動くのを止めるだけの副次的な効果です。報告者自身も「意図した無効化手段ではない」と書いています。スクロールバックを使いたいなら、回避策1が向きます。

フルスクリーン表示でスクロールする手もある

/tui fullscreenで切り替えるフルスクリーン表示は、会話を端末のスクロールバックでなくアプリ内で描画します。スクロールはPgUp・PgDn・マウスホイールで行うので、端末側のShift+PageUpを当てにしなくて済みます。半画面ずつ動き、Ctrl+Homeで会話の先頭へ、Ctrl+Endで最新へ飛べます。

これでこの症状が消えるかどうかは、issueには書かれていません。仕組みの上では別経路になる、という位置づけです。フルスクリーン表示の性質はClaude CodeのTUI(フルスクリーン)の解説にまとめています。通常表示のままスクロールバックが消える場合は、スクロールバックが消える問題の対処が別に効きます。

大きな範囲をコピーすると文字が欠ける

2つ目は、コピーした文章の途中がまだらに抜ける症状です(issue #83503、v2.1.220、CachyOS・Wayland上のKonsole)。末尾で切れるのではなく、複数の行の途中の断片が消え、残った断片が直接つながります。たとえば「Fensterfläche. Das sind bei 60 Hz rund」が「Fens rund」になる、という具合です。

再現の条件が特殊

報告者の観察を整理すると、次のようになります。

  • 特定の既存プロジェクトの会話でだけ再現し、新しく作ったプロジェクトでは出ない
  • 大きな範囲を一度に選ぶと欠け、同じ内容を2回に分けてコピーすると正しく取れる
  • Claude Codeの再起動、Konsoleの再起動、PCの再起動でも直らない
  • 同じ文面をMarkdownファイルに書き出させると欠けがなく、会話の中身自体は壊れていない

会話履歴の再構築、端末側のreflow、描画の問題、Konsoleの大きな選択の扱いなど、報告者は複数の可能性を挙げていますが、原因は特定されていません。他の環境での再現報告も、issueにはありません。

実用上の対処

原因が分からない以上、手元でできるのは欠けを避けることです。

  1. 範囲を小さく分けて、複数回に分けてコピーする
  2. 大事な文面は、Claude Codeにファイルへ書き出させ、そのファイルから取る
  3. 貼り付け先で、元の表示と見比べる

欠けた文章は前後が自然につながるため、見た目では気づきにくい点に注意が要ります。設計書や契約文面のように一字も欠けてはいけない文章では、3の見比べを省かないほうが安全です。コードブロックだけを取りたいときは/copyコマンドの使い方が使えます。日本語で文字化けする別症状は/copyの文字化けを参照してください。

折りたたんだあと画面が更新されない

3つ目は再描画の症状です(issue #90567、v2.1.251)。折りたたまれたツール出力をクリックで展開し、もう一度クリックして畳むと、画面が古いままになります。ほぼ空白で、最後の1〜2行だけが下に見える状態です。

マウスを端末の上で動かすと、その場で正しい表示に戻ります。キー入力は受け付けているので、プロセスが固まったのではなく、描画の更新が走らないだけに見えます。報告者によれば、プランモードでバックグラウンドエージェントが動いていて、出力が長いときに出やすいとのことです。

分かっていること・分からないこと

分かっているのは、v2.1.251のLinux環境で、マウスの移動が再描画のきっかけになる、という点までです。issueのタイトルはKonsoleを名指ししていますが、フォームの端末欄は「Other」で、環境はCachyOSのfishです。Konsole固有の問題なのか、他の端末でも起きるのかは切り分けられていません。退行かどうかも報告者は「分からない」と答えています。

回避策

公式の対処は出ていません。手元では次の順に試せます。

  1. マウスを端末の上で動かして再描画させる(報告者が確認した唯一の復帰手順)
  2. 展開・折りたたみの操作をやめ、Ctrl+Oのトランスクリプト画面で出力を読む
  3. クリックそのものを止めたいときは、CLAUDE_CODE_DISABLE_MOUSE_CLICKS=1を試す

3はフルスクリーン表示でのマウス捕捉に関する公式の環境変数で、ホイールのスクロールは残したままクリックとホバーの処理だけを止めます。要求バージョンはv2.1.195以降です。このissueの症状がクリック操作を起点にしているため候補として挙げますが、症状が消えるという報告はなく、効果は未確認です。

CLAUDE_CODE_DISABLE_MOUSE_CLICKS=1 claude

3症状の関係と、Konsole側で見ておく設定

3つは別々のissueで、共通の原因は示されていません。共通するのは、どれもLinuxのKonsoleで起き、いずれもopenのまま残っている点だけです。

一方で、Konsoleに関するv2.1.269の修正は別にあります。Konsoleの一部のバージョンが対応していない同期出力(synchronized output)を、端末名だけで有効と見なしていた問題と、外部エディタから戻ったあとに画面が二重に描画される問題が、同じ版で直っています。v2.1.121では、通常表示でCtrl+Lや再描画を行うとスクロールバックが重複する問題が、tmux、GNOME Terminal、Windows Terminal、Konsoleで修正されました。これらは今回の3症状とは別で、古い版を使っている場合はまず更新で片づく可能性があります。

症状が出たときの確認順

どの症状か分からないまま手当たり次第に試すと、原因が混ざります。次の順で切り分けると早く済みます。

  1. claude --versionで版を確認する。Shift+PageUpの症状はv2.1.269以降が対象
  2. 症状が入力キーなら、Konsoleのプロファイルでkitty keyboard protocolの設定を確認する
  3. 症状がコピーなら、範囲を半分に分けて再現するかを見る
  4. 症状が描画なら、マウスを動かして復帰するかを見る

Konsole以外の端末との違いも知っておくと判断しやすくなります。公式のターミナル設定ページでは、kitty keyboard protocolに対応するfootやAlacritty 0.16以降でShift+Enterが使えるのはv2.1.269以降とされていますが、Konsoleはその表にありません。Konsoleの扱いは公式ドキュメント上は明記がなく、ここまでの動作はissueの報告に基づく情報です。

キーの割り当てを変えたい場合の書き方は、ショートカット一覧とkeybindings.jsonにあります。別の端末での描画トラブルとしては、Emacsのeatでちらつく問題が近い症状です。

よくある質問

Shift+PageUpはClaude Code側で本来どう扱われるのですか

公式のkeybindingsの表に、Shift+PageUpの既定の割り当てはありません。表にあるのはPageUp(半画面ぶんの上スクロール)などです。issueは、割り当てのないShift+PageUpがプレーンPageUpの処理に落ちる点を不具合としています。

kitty protocolを切ると他に困ることはありますか

修飾キーを細かく区別する入力が使えなくなります。Shift+Enterでの改行が代表例で、Konsoleでは改行にCtrl+Jか\とEnterを使うことになります。

まとめ

KonsoleでのClaude Codeは、3つの症状がどれもopenのまま残っています。もっとも困りやすいShift+PageUpの件は、Konsoleのプロファイルでkitty keyboard protocolを切るのが現実的な回避策です。コピーの欠けは、範囲を分ける・ファイルに書き出させる、再描画の停止は、マウスを動かす、で当面をしのげます。どれもissueの状態が変われば前提が変わるため、症状が出たら、まずバージョンと再現条件を控えておくと、報告や再確認が楽になります。

この記事を共有:XはてブLinkedIn