it-swarm.com.de

Zenity-Skript: Fenster mit Schließen-Taste (x) oder Esc schließen

Folgende diese Lösung Ich habe ein Zenity-Skript zu fragen Sie mich, was zu tun ist, wenn Sie auf ein ausführbares Skript klicken in Thunar oder eine Desktop-Datei in Pantheon-Dateien:

#!/bin/bash

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

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

Und es zeigt dies:

enter image description here

Aber es gibt eine kleine Panne: Sie können den Dialog an dieser Stelle nicht schließen: mit der Schaltfläche Fenster schließen, Esc oder Alt+F4 entspricht dem --cancel-label im Skript und öffnet die Datei im Texteditor.

Wie könnte ich das Drehbuch damit bearbeiten, wenn Esc Wird gedrückt, werden die Zenity-Fenster ohne weitere Aktion geschlossen?


Nach Kommentar bearbeiten:

Ich habe dies in einem Kommentar erhalten:

lassen Sie entweder den --question-Dialog --timeout, um einen dritten Rückgabewert zu erhalten (5)

Tatsächlich, --timeout=4 schließt den Dialog nach dieser Anzahl von Sekunden.

oder Sie können den Multiple-Choice-Dialog über --list --radiolist aufrufen

Was bedeutet das?

1
user47206

Ein vereinfachtes Skript, das yad verwendet, kann eine Problemumgehung sein, damit das Fenster wie beabsichtigt geschlossen wird. Beschriftungen sind 'OK' zum Ausführen und 'Abbrechen' zum Bearbeiten.

Sudo apt install yad

Und das Drehbuch lautet:

#!/bin/bash

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

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

enter image description here


Eine Version des ersten Skripts (basierend auf dem Kommentar etwas verbessert), die das Fenster auch ohne Aktion nach einigen Sekunden schließt:

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

Einfaches Beispiel eines Radiolisten

In diesem Link finden Sie ein einfaches Beispiel für eine Radioliste.

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

Beispiel mit --list

Ich denke, es ist einfacher, eine einfache Liste zu verwenden (mit der Option --list aber ohne --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