Скрипт 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=