我想创建一个 yad 命令,它显示 1 个按钮和 1 个输入字段。我希望当用户单击按钮时,预定义文本返回到标准输出。当用户在输入字段中写入内容并按 Enter/单击另一个按钮时,输入字段文本将返回到 stdout。
你会怎么做这样的事情?
答案1
所以你想要这样的东西:
其中Default
打印默认值stdout
并关闭对话框。
不确定是否可以不将其包装在脚本中。您可以使用退出状态来检测按下了哪个按钮并采取相应的操作。人们可以将其打印出来stdout
,但据我所知,在不终止进程的情况下无法关闭对话框。如果您捕获输入,则每次按按钮都会产生一个附加字段。
最好的折衷方案可能是使用--entry-text
具有默认值的选项,例如:
yad \
--entry \
--text "Enter value" \
--entry-text="foo" \
--button=gtk-ok
给你这样的东西:
可以选择添加Cancel
按钮,因为如果您使用数据,您可能需要检查退出键和关闭对话×
(即中止场景)。
这可能是最干净的方法,但谁知道呢。此外,用户可以轻松更改默认值,而无需编写整个文本。
使用退出代码yad
:
input=$(yad \
--entry \
--text "Enter text or press Default to use ‘foo’" \
--button=Default:1 \
--button=gtk-ok:0)
case $? in
1) input=foo ;;
252) echo 'Aborting'; exit 1;;
esac
printf 'INPUT: %s\n' "$input"
当通过或 Escape 键252
关闭对话时,会获得退出状态。×
您可能希望在按下时验证是否input
为空。OK
另一种方法是使用 shell 调用,但是据我所知,在文本回显后无法关闭对话,杀死进程是唯一的出路(注意引号)。 YadYAD_PID
运行时导出:
--button="Default":'sh -c "echo foo; kill YAD_PID;"'
# or
--form \
--input="Default":btn 'sh -c "echo foo; kill YAD_PID;"'
在这种情况下,还可以使用函数(如果 bash 脚本请注意使用 bash),例如:
foo() {
echo foo
kill $YAD_PID
}
export -f foo
yad \
--button="Default":'bash -c foo'
如果你可以使用,HTML
那当然是另一种选择,但要求 Yad 使用 webkit 进行编译。我的不是。