ダイアログボックスの--checklistボックスに水平スクロールまたは\ n(改行)の説明を入力できますか?

ダイアログボックスの--checklistボックスに水平スクロールまたは\ n(改行)の説明を入力できますか?

私はダイアログのバージョンを使用しています:1.3-20210324

一方:

LIST_ITEMS=(
  "1." "A ... very ... very ... looooong ... Informationtext" "off"
  "2." "A ... very ... very ... looooong ... Informationtext" "off"
                            ...                                     )
dialog ... --checklist "checklistName" 0 0 0 "${LIST_ITEMS[@]}" 

結果:
クラシック会話リスト情報テキスト完全には見えません。

欠落しているターゲット:
水平にスクロールまたは改行する方法が必要です。情報テキスト

編集1
@Thomas Dickeyはデータ型を再指定すると言っていますが、どちらも水平スペースが足りないため、これはオプションではありません。私の記事で述べたように目標が足りない本当の質問は残ります。とにかく、トーマスの考えに感謝します!どんな助けでも歓迎します。よろしくお願いします!

編集2:考えられる解決策
@LL3は、トラブルシューティング方法の2つの短い例を提示しました。ありがとうございます!

要約:
この修正日に基づき、現在の同意は次のとおりです。

  • --check-list水平スクロールオプションなし
  • --check-list一行で計画

ベストアンサー1

AFAIKマニフェスト項目のテキストは一度に1行でなければならず、Thomas Dickey自身が他に提案しなかったことを考慮すると、このテキストに含まれるエスケープシーケンスやリテラル改行文字をdialog処理するように指示する方法がないと思います。 。dialog\n

2つの便利な選択肢の1つ(または時々両方)を使用して、あなたのような状況を簡単に処理する方法を教えてください。

もし非常に長い情報テキストはまだ1行のウィンドウに入ることができます。オプションを追加し--item-helpて各項目に追加のフィールドを指定すると、表示される1行のテキストが長くなります。この追加フィールドは、カーソルがそのフィールドの上にあるときにウィンドウの下部に表示されます。

したがって、次のようにします。

LIST_ITEMS=(
   "1." "briefer text 1" "off" "A first ... very ... very ... looooong ... Informationtext"
   "2." "briefer text 2" "off" "A second ... very ... very ... looooong ... Informationtext"
)
dialog --item-help --checklist "checklistName" 0 0 0 "${LIST_ITEMS[@]}"

これらの追加フィールドはまだ1行で、dialogアイテムのデフォルトのテキストと同様に、ウィンドウに収まらないと自動的に切り捨てられます。

非常に長いテキストまたは複数行のテキストの場合は、次の概念実証例のように、要求に応じてプログラムで処理する追加のダイアログボックスを簡単に設定できます。

#!/bin/bash --
# Note it is conventional practice to use lowercase names for variables,
# whereas uppercase names are left to standards and to shell's own use.
list_items=(
   "1." "A ... very ... very ... looooong ... Informationtext" "off"
   "2." "A ... very ... very ... looooong ... Informationtext" "off"
)
until choice=$(dialog --help-button --checklist "checklistName" 0 0 0 "${list_items[@]}" 2>&1 >/dev/tty); do
    case $? in
    (1) btn=Cancel && break;;
    (2) case $choice in
        ("HELP 1.") dialog --msgbox 'this is a long explanation\nfor option 1.\n' 0 0;;
        ("HELP 2.") dialog --msgbox 'option 2 takes\neven three\nseparate lines.' 0 0;;
        esac
    esac
done
printf -- %s\\n "Pressed ${btn:-OK}"

ファタイ

おすすめ記事