Yad:ボタンまたは入力フィールドでテキストを選択する

Yad:ボタンまたは入力フィールドでテキストを選択する

1つのボタンと1つの入力フィールドを表示するyadコマンドを作成したいと思います。ユーザーがボタンをクリックすると、事前定義されたテキストが標準出力に返されます。ユーザーが入力フィールドに何かを書き込んでEnterキーを押すか、別のボタンをクリックすると、入力フィールドのテキストがstdoutとして返されます。

このようなことをどうしますか?

答え1

だからあなたは次のようなものが欲しい:

OPS会話

Defaultデフォルト値を印刷してstdoutダイアログボックスを閉じます。

スクリプトでラップしなくても可能かどうかはわかりません。終了ステータスを使用して、どのボタンが押されたかを検出し、適切なアクションを実行できます。印刷できますが、stdout私が知っている限り、プロセスを終了せずにダイアログボックスを閉じる方法はありません。入力をキャプチャすると、ボタンを押すたびに追加のフィールドが生成されます。

最良のトレードオフは、--entry-text次のようにデフォルト値を持つオプションを使用することです。

yad \
    --entry \
    --text "Enter value" \
    --entry-text="foo" \
    --button=gtk-ok

次のようなものを提供します。

yad 基本入力例

Cancelデータを操作している場合は、終了キーを確認してダイアログボックスを閉じることができます×(たとえば、シーンの中断)、ボタンの追加はオプションです。

これが最もクリーンな方法かもしれませんが、誰が知っていますか?さらに、ユーザーはテキスト全体を書かなくても簡単にデフォルト値を変更できます。


終了コードの使用yad:

input=$(yad \
        --entry \
        --text "Enter text or press Default to use ‘foo’" \
        --button=Default:1 \
        --button=gtk-ok:0)

case $? in
1) input=foo ;;
252) echo 'Aborting'; exit 1;;
esac

printf 'INPUT: %s\n' "$input"

終了状態の分析

252終了ステータスは、またはEscキーを介してダイアログボックスを閉じたときに取得されます。×

を押すとinput空であることを確認できます。OK


別の方法はシェル呼び出しを使用することですが、私が知っている限り、テキストがエコーされた後に会話を閉じる方法はなく、プロセスを終了することが唯一の方法です(引用符を参照)。 YadYAD_PIDランタイムのエクスポート:

--button="Default":'sh -c "echo foo; kill YAD_PID;"'

# or

--form \
--input="Default":btn 'sh -c "echo foo; kill YAD_PID;"'

この場合、関数を使用することもできます(bashスクリプトがbashを使用している場合は注)。例:

foo() {
    echo foo
    kill $YAD_PID
}

export -f foo

yad \
    --button="Default":'bash -c foo'

可能であればHTML間違いなく別のオプションですが、YadをWebKitにコンパイルする必要があります。私はそうではありません。

関連情報