1つのボタンと1つの入力フィールドを表示するyadコマンドを作成したいと思います。ユーザーがボタンをクリックすると、事前定義されたテキストが標準出力に返されます。ユーザーが入力フィールドに何かを書き込んでEnterキーを押すか、別のボタンをクリックすると、入力フィールドのテキストがstdoutとして返されます。
このようなことをどうしますか?
答え1
だからあなたは次のようなものが欲しい:
Default
デフォルト値を印刷してstdout
ダイアログボックスを閉じます。
スクリプトでラップしなくても可能かどうかはわかりません。終了ステータスを使用して、どのボタンが押されたかを検出し、適切なアクションを実行できます。印刷できますが、stdout
私が知っている限り、プロセスを終了せずにダイアログボックスを閉じる方法はありません。入力をキャプチャすると、ボタンを押すたびに追加のフィールドが生成されます。
最良のトレードオフは、--entry-text
次のようにデフォルト値を持つオプションを使用することです。
yad \
--entry \
--text "Enter value" \
--entry-text="foo" \
--button=gtk-ok
次のようなものを提供します。
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にコンパイルする必要があります。私はそうではありません。