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:
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?
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?
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
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
Il existe un exemple simple de radiolist dans ce lien,
http://linux.byexamples.com/archives/265/a-complete-zenity-dialog-examples-2/
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=