hakeの日記

Windows環境でプログラミングの勉強をしています。

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

で閉じるようにしています。