私はArch Linuxでurxvtを実行しています。コピー/貼り付けのためにマウスで出力を選択できます。出力にタブ文字が含まれていると問題が発生します。すべてのタブ文字が選択され、空白にコピーされます。これにより、特定の出力をコピーするときにその出力の構造を維持することが困難になります。
この問題を解決する方法はありますか?
編集:これが問題に関連している場合はzshを使用しています。
答え1
私はこれを行うことができる端末を知りません。なぜどの端末でもこれを行うことができないと思うのか教えてください。
tab
複数の文字を出力したり、画面上でカーソルを移動するために表示された多くの文字の1つです。 CR(行の先頭に移動)、LF(下)、バックスペース(左)、カーソルを移動したり、文字のプロパティを変更したり、何も表示しないすべてのエスケープシーケンス...
urxvtは、アプリケーションの出力が何であるかを正確に知ることはできません。アプリケーションが擬似端末のスレーブ側にLF(\ n)を送信すると、ほとんどの場合、LFが通常のようにカーソルを下に移動するのではなく、カーソルを再びスレーブ側に移動することがわかります。行の始まり。これは、ptyドライバが「\ n」を「\ r \ n」に変換した後に「\ r \ n」に変換するためです。所有者urxvtの端末側(sttyを使用してこの動作を変更できます)
また、この選択は末尾のスペースをキャプチャしません。
それだけ
一部の端末では、疑似端末の基本側で受信するすべての文字キャプチャを許可しますが、そうでない場合は、「スクリプト」または「画面」を代わりに使用できます。ただし、アプリケーションの出力をX選択に入れるには、次のように簡単に実行できます。
the-command | xsel
答え2
このトピックは時々さまざまな端末エミュレータに表示されます。ディスカッションDebian #259828 xterm: タブの後の空白は、選択項目の空白文字で表示されます。(xtermの場合)urxvt開発者は次のように説明しました。
私はこれをrxvt-unicodeで実装することを考えました。タブはrxvt-unicodeのデータ構造で簡単に表現できます。しかし、意味論的な問題があります。
タブ文字は文字ではなくカーソル移動です。したがって、「カーソルの上」または「5,6に移動」が選択したテキストに表示されないように、タブとして表示するための良い方法はありません。
そして(実際に)urxvtがこの機能をサポートすると言い続けます。
興味のある方がいる場合は、rxvt-unicode-3.8がHT文字を実装する方法と効果の初期の経験を紹介します。
rxvt-unicode-3.8 は、HT を受け取ると、まずタブ移動(相対カーソル移動)を計算します。イブスキップされたすべての文字は、最初のスペースと同じ属性を持つスペースです。これらのスペースは(非常に)ワイドタブ文字に置き換えられます(これはrxvt-unicodeがワイド文字を処理するように簡単に実行できるため、コードの変更はscr_tabメソッドの場合は15行です)。カーソルは、空白以外の文字がある場合、または属性が変更された場合にのみ(色など)移動されます。
もちろん、urxvt 3.8はしばらくリリースされていません。しかし、考えてみてくださいアプリケーション障害物の問題:
- 端末自体が該当機能(ラベルをタグとして保存して選択可能)をサポートする限り、
- タブが右マージンに達すると、端末は正しい操作を実行する必要があります(このバグレポートはそうでない場合を指摘します)。
- 端末を使用するように構成する必要があります。ハードタグ(この設定を参照
stty
)、 - アプリケーション(およびncursesなどのライブラリ)は、ハードタブを使用するように構成する必要があります。
- screen / tmuxなどのアプリケーションは、画面を描画して再描画するときにタブをタブとして端末に送信するには、(再)タブをタブとして管理する必要があります。
アプリケーションがタブを画面に送信しても、それが端末に到達するという意味ではありません。複数のレベルの空間に変換することができ、中間レベルで画面がどうしても変わらないと判断すると、完全に最適化できます。
urxvt 9.15をすばやく確認すると、その機能がまだ機能していることがわかります(もちろん、最も簡単な設定では)。
$ /tmp/foo
hello . world
00000000 68 65 6c 6c 6f 09 2e 09 77 6f 72 6c 64 0a |hello...world.|
0000000e
$ cat /tmp/foo
printf 'hello\t.\tworld\n' |xclip
hd
問題が解決しない場合は、端末がソフトタブに設定されているか、上記の他の問題の1つが邪魔になる可能性があります。