Events Unix对话实用程序在fish shell中对发出的事件作出反应时失败
我有这个功能(已知工作正常) 当我直接调用Events Unix对话实用程序在fish shell中对发出的事件作出反应时失败,events,dialog,fish,Events,Dialog,Fish,我有这个功能(已知工作正常) 当我直接调用problem\u open时,对话框显示良好。当我通过emit on\u problem\u open间接调用函数时,不会显示对话框 知道为什么会这样吗?这是事件的预期行为吗 我可以解决这个问题,但这将是一个棘手的问题。您的示例在这里没有问题,但有一个技巧是确保手动或在您的config.fish中定义函数,而不是依赖它自动加载 在与fish-dev团队成员Fabian Homborg(@faho)讨论后,所需的功能似乎无法运行(永远无法运行),原因类似
problem\u open
时,对话框显示良好。当我通过emit on\u problem\u open
间接调用函数时,不会显示对话框
知道为什么会这样吗?这是事件的预期行为吗
我可以解决这个问题,但这将是一个棘手的问题。您的示例在这里没有问题,但有一个技巧是确保手动或在您的
config.fish中定义函数,而不是依赖它自动加载 在与fish-dev团队成员Fabian Homborg(@faho)讨论后,所需的功能似乎无法运行(永远无法运行),原因类似于windows等中备受推崇的“在UI线程中争用屏幕更新”问题。不仅如此,开发团队打算在将来将事件调用转移到另一个线程中,因此不希望通过事件处理程序与终端交互
我最后做的是创建一个不同的API,当需要用户IO时,使用直接函数调用。有关实现,请参见函数
function problem_open -e on_problem_open -d "select from existing problems"
set matches (find $FD_PROB_HOME/ -maxdepth 1 -mindepth 1 -type d ! -name ".git")
if test 1 -eq (count $matches)
if test -d $matches
set -U FD_PROB_CURRENT $matches[1]
echo "chose option 1"
return
end
end
set -g dcmd "dialog --stdout --no-tags --menu 'select the file to edit' 20 60 20 "
set c 1
for option in $matches
set l (basename "$option")
set -g dcmd "$dcmd $c '$l'"
set c (math $c + 1)
end
set choice (eval "$dcmd")
#clear
if test $status -eq 0
echo "edit option $choice"
set -U FD_PROB_CURRENT $matches[$choice]
end
end