web-dev-qa-db-fra.com

Script Zenity: ferme la fenêtre avec le bouton de fermeture (x) ou Echap

Suivant cette solution J'ai un script zenity pour me demander quoi faire en cliquant sur un script exécutable dans Thunar ou n fichier de burea dans Pantheon Fichiers:

#!/bin/bash

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

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

Et cela montre ceci:

enter image description here

Mais il y a un petit problème: vous ne pouvez pas fermer la boîte de dialogue à ce stade: en utilisant le bouton Fermer la fenêtre, Esc ou Alt+F4 équivaut à l'option --cancel-label dans le script et ouvre le fichier dans l'éditeur de texte.

Comment pourrais-je éditer le script pour que quand Esc est enfoncé, les fenêtres du zenity se fermeraient sans action supplémentaire?


Modifier après le commentaire:

J'ai ceci dans un commentaire:

soit laisser le dialogue --question --timeout pour obtenir une troisième valeur de retour (5)

En effet, --timeout=4 fermera la boîte de dialogue après ce nombre de secondes.

ou vous pouvez opter pour un dialogue à choix multiple par --list --radiolist

Qu'est-ce que ça veut dire?

1
user47206

Un script simplifié utilisant yad peut constituer une solution de contournement afin que la fenêtre soit fermée comme prévu; les étiquettes sont "OK" pour l'exécution et "Annuler" pour l'édition.

Sudo apt install yad

Et le script est:

#!/bin/bash

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

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

enter image description here


Une version du script initial (légèrement améliorée en fonction du commentaire), qui même en l'absence d'action fermera la fenêtre après un certain nombre de secondes:

#!/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

Exemple simple de radiolist

Il existe un exemple simple de radiolist dans ce lien,

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

Exemple avec --list

Je pense qu'il est plus facile d'utiliser une simple liste (avec l'option --list mais sans --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