qshdlg その4
qshdlg 4日目、今日はアイコン登録するのではなくターミナル上から、あるいはKeyHelper等から呼び出すタイプの実験をしてみました。と言っても殆ど同じですけど。
まずはメッセージの表示、sample4というスクリプトを作成
#!/bin/sh export QSHDLG_APP=qshdlg_smpl4 INPUT=/var/spool/qshdlg/input_$QSHDLG_APP OUTPUT=/var/spool/qshdlg/output_$QSHDLG_APP CONTROL=/var/spool/qshdlg/control_$QSHDLG_APP echo "Message Dialog Open" qshdlg message -n -h 50 -w 200 2> /dev/null & while [ ! -p $CONTROL ] do done echo "メッセージを表示します" > $OUTPUT while read RET < $INPUT do done echo "Message Dialog Close"
実行するとメッセージダイアログが表示して「メッセージを表示します」と出力されます。-h と-w はダイアログサイズの指定です。
while read RET < $INPUT do done
で入力待ちにすることで、「OK」か「Cancel」が押されるまでスクリプトの続きを実行するのを停止させています。while文がないとメッセージダイアログが表示していてもスクリプトは先を実行します。while文の有無でターミナルに“Message Dialog Close”が表示されるタイミングに注意。
メッセージダイアログを指定時間だけ表示させたい場合は、-q オプションで秒数を指定します。
次は値の入力、sample5というファイルを作成
#!/bin/sh export QSHDLG_APP=qshdlg_smpl5 INPUT=/var/spool/qshdlg/input_$QSHDLG_APP OUTPUT=/var/spool/qshdlg/output_$QSHDLG_APP CONTROL=/var/spool/qshdlg/control_$QSHDLG_APP echo "Input Dialog Open" qshdlg input -n -t "Please Input!" -h 20 -w 250 2> /dev/null & while [ ! -p $CONTROL ] do done read RET < $INPUT echo 'reject()' > $CONTROL echo "Input Dialog Close" echo "Input Value is "$RET
インプットダイアログを表示して入力された文字を$RETに代入しています、日本語も入力できました。インプットダイアログは上にメッセージビューがくっついてくるのでサイズ調整して見えないようにしています。入力された文字はメッセージビューにエコーバック表示されるみたいなのでこれが嫌な場合は -N オプション、パスワード入力のように入力欄の文字も隠したい場合は -P オプションをつけること。
なお、「Cancel」が押された場合は空文字が返されるみたいですね。「OK」や「Enter」で文字を入力した場合はダイアログが閉じないので
echo 'reject()' > $CONTROL
で閉じるようにしています。