web-dev-qa-db-ja.com

Zenityスクリプト:閉じる(x)ボタンまたはEscでウィンドウを閉じる

次の この解決策 私は 実行可能スクリプトをクリックしたときに何をするか尋ねてください Thunarで デスクトップファイル にあります:

#!/bin/bash

zenity --question --text="What to do?" \
       --ok-label=Run \
       --cancel-label=Edit

case $? in
    0)thunar "$1"
    ;;
    1)gedit $1
    ;;
esac

そしてそれはこれを示しています:

enter image description here

ただし、小さな不具合があります。この時点でダイアログを閉じることはできません。ウィンドウを閉じるボタンを使用して、 Esc または Alt+F4 スクリプトの--cancel-labelオプションに相当し、テキストエディターでファイルを開きます。

どのようにスクリプトを編集して、いつ Esc 押されると、Zenityウィンドウはそれ以上のアクションなしに閉じますか?


コメント後に編集:

私はコメントでこれを持っています:

--question dialog --timeoutを使用して、3番目の戻り値(5)を取得します。

実際、--timeout=4はその秒数後にダイアログを閉じます。

または、--list --radiolistで複数選択ダイアログに移動できます

どういう意味ですか?

1
user47206

yadを使用する単純化されたスクリプトは、ウィンドウを意図したとおりに閉じるための回避策です。ラベルは、実行の場合は「OK」、編集の場合は「キャンセル」です。

Sudo apt install yad

スクリプトは次のとおりです。

#!/bin/bash

yad --text="Execute the file? (press 'Cancel' to edit)" 

case $? in
    0)thunar "$1"
    ;;
    1)gedit $1
    ;;
esac

enter image description here


アクションがない場合でも、数秒後にウィンドウを閉じる初期スクリプトのバージョン(コメントに基づいて多少改善):

#!/bin/bash

zenity --question --text="Press RUN to execute -- Press EDIT, ESC or close (x) to open as text -- or WAIT 7 seconds to dismiss" \
       --ok-label=RUN \
       --cancel-label=EDIT \
       --timeout=7

case $? in
    0)thunar $1
    ;;
    1)gedit $1
    ;;
esac 

enter image description here

1
user47206

ラジオリストの簡単な例

このリンクにはラジオリストの簡単な例がありますが、

http://linux.byexamples.com/archives/265/a-complete-zenity-dialog-examples-2/

--listを使用した例

単純なリストを使用する方が簡単だと思います(オプション--listあり、--radiolistなし)

$ ans=$(zenity  --list  --title "What to do?"  --column "What to do?" Run Edit 2> /dev/null); echo "ans=$ans"
ans=Run
$ ans=$(zenity  --list  --title "What to do?"  --column "What to do?" Run Edit 2> /dev/null); echo "ans=$ans"
ans=Edit
$ ans=$(zenity  --list  --title "What to do?"  --column "What to do?" Run Edit 2> /dev/null); echo "ans=$ans"
ans=

enter image description here

1
sudodus