Yad:通过按钮或输入字段选择文本

Yad:通过按钮或输入字段选择文本

我想创建一个 yad 命令,它显示 1 个按钮和 1 个输入字段。我希望当用户单击按钮时,预定义文本返回到标准输出。当用户在输入字段中写入内容并按 Enter/单击另一个按钮时,输入字段文本将返回到 stdout。

你会怎么做这样的事情?

答案1

所以你想要这样的东西:

OPS对话

其中Default打印默认值stdout并关闭对话框。

不确定是否可以不将其包装在脚本中。您可以使用退出状态来检测按下了哪个按钮并采取相应的操作。人们可以将其打印出来stdout,但据我所知,在不终止进程的情况下无法关闭对话框。如果您捕获输入,则每次按按钮都会产生一个附加字段。

最好的折衷方案可能是使用--entry-text具有默认值的选项,例如:

yad \
    --entry \
    --text "Enter value" \
    --entry-text="foo" \
    --button=gtk-ok

给你这样的东西:

yad 默认输入示例

可以选择添加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 进行编译。我的不是。

相关内容