「ダイアログ」にタブ文字を挿入するにはどうすればいいですか?

「ダイアログ」にタブ文字を挿入するにはどうすればいいですか?

Linux の「ダイアログ」ユーティリティを使用して、シンプルな UI を作成しています。ただし、情報ボックスにはテキストがあり、テキストを適切に配置するためにタブ文字を挿入したいと考えています。

しかし、ダイアログはタブ文字を受け入れないようです。また、--tab-correct オプションも役に立ちませんでした。\t と入力すると、情報ボックスの \t に表示されます。

dialog --title "Hello" --tab-correct --infobox "tab \t test" 20 100

コマンド文字列にタブを挿入すると、次のようになります。

dialog --title "Hello" --tab-correct --infobox "tab         test" 20 100

1 つのスペースとして表示されます。

インフォボックスのテキストにタブを挿入する方法はありますか?

答え1

--no-collapseの代わりに オプションを使用し、文字列にリテラルタブを挿入する必要があります--tab-correct。たとえば、

"star "$'\t'" end" 

またはCtrl-を使用しvてキーを押しますTab

答え2

ダイアログについてはよく分かりませんが、Linuxでは\tがTabとして解釈されないことがあります。

"`echo -e "\t"`"

これを試して:

declare -r TAB="`echo -e "\t"`"
echo -e "A${TAB}B"

答え3

1 つのスペースとして表示されるコマンド文字列は、ここではタブではなく 8 つのスペースとして表示されます (ただし、これは StackExchange によるものです)。

これをデバッグするのは少し難しいかもしれません。タブを「クック」するかどうかは、文字を挿入するときのターミナル、入力を処理するときのシェル、基礎となるターミナル モード (クック モードと raw モード)、そして最終的にはダイアログ自体など、いくつかの要因によって決まります。

さらに混乱を招くのは、タブを生成するために echo を使用したり、他の方法でタブを生成したりすると、ターミナル エミュレーターがそれを削除してしまう可能性があることです。

この種の制御文字をエスケープするためによく使用されるキーストロークは、C-v(つまり、Control+VCTRL+V)です。これを押してから Tab キーを押すと、実際のタブが挿入されることがあります。ここでは、GNU と を使用するとbashurxvtそれが機能します。

これを適切にデバッグするには、その通り何が問題なのか (つまり、タブを消費しているものは何なのか)。 \t を単にそこに配置しても、どちらかdialogまたはシェルにこれらのエスケープ シーケンスを変換する機能がない限り機能しません。 それらの機能が必要な場合は、@Eran Ben-Natan のアドバイスに従って、GNUechoの拡張モードを使用してください (他の実装は異なる場合があります。POSIX (IEEE 1003.1 2008、ページ 2615、行 84306) では特定の動作は指定されていません)。

関連情報