Скрипт Zenity: закрыть окно кнопкой закрытия (x) или Esc

Следуя этому решению, у меня есть сценарий zenity, который спрашивает меня, что делать при щелчке исполняемого сценария в Thunar или файла рабочего стола в Pantheon Files:

#!/bin/bash

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

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

И это показывает это:

Но есть небольшая ошибка: вы не можете закрыть диалоговое окно на этом этапе: используя кнопку закрытия окна, Esc или Alt + F4 приравнивают к --cancel-label опция в скрипте и откроет файл в текстовом редакторе.

Как я могу отредактировать скрипт, чтобы при нажатии Esc окна zenity закрывались без дальнейших действий?


Изменить после комментария:

Я получил это в комментарии:

либо разрешите диалогу --question --timeout получить третье возвращаемое значение (5)

В самом деле, --timeout=4 закроет диалог после этого количества секунд.

или вы можете перейти к диалоговому окну с несколькими вариантами выбора --list --radiolist

Что это значит?

2 ответа

Упрощенный скрипт, который использует yad может быть обходным путем для того, чтобы окно было отклонено, как предполагалось; метки "ОК" для запуска и "Отмена" для редактирования.

sudo apt install yad

И скрипт такой:

#!/bin/bash

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

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


Версия исходного скрипта (несколько улучшена на основе комментария), которая даже при отсутствии действий закроет окно через несколько секунд:

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

Простой пример радиолиста

В этой ссылке есть простой пример радиолиста,

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=

Другие вопросы по тегам