下列的此解决方案我有一个 zenity 脚本询问我单击可执行脚本时要做什么在图纳尔或桌面文件在万神殿文件中:
#!/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 dialog --timeout 获得第三个返回值(5)
确实,--timeout=4
将在该秒数之后关闭对话框。
或者您可以通过--list --radiolist 选择多项选择对话框
这意味着什么?
答案1
广播列表的简单示例
此链接中有一个简单的广播列表示例,
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=
答案2
可以使用简化的脚本yad
作为解决方法,以便按预期关闭窗口;标签为“OK”表示运行,“Cancel”表示编辑。
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