问题
在终端模拟器中,是否有可能在发生mosue事件时运行命令?
我尝试过的事情
我想我已经走了一半-使用echo -e "\e[?1003h"
(有关详细信息,请参见here)并在终端上四处挥舞鼠标产生了一种理想的效果,即打印一堆与发生的字符有关的字符鼠标事件。 (注意:echo -e "\e[?1003l"
将其关闭)
echo -e "\e[?1003h"
# move mouse over terminal window, in the character input line, NOT to stdout:
> CF*CC+C@,C;.C:/C8/C8/C8/C8/C9/C9/C9/C90C90C80C81C81C81C81C81C90C:/C;/C;.C<.C<.
# After deleting that, I enter:
> echo -e "\e[?1003l"
# mouse move, all is quiet
我也尝试将其连接以输出到文件。这是为了查看我是否可以监视该文件并根据该命令运行命令。结果如下:
> echo -e "\e[?1003h" >> file.txt
# elevator music whilst I move the mouse about
> echo -e "\e[?1003l"
# move mouse a bit, nothing
> cat file.txt
# nothing but blank lines, fair enough. But, mouse moves and in the terminal input is printed...
> CF*CC+C@,C;.C:/C8/C8/C8/C8/C9/C9/C9/C90C90C8 ...
# Delete that output, and then I type:
> echo -e "\e[?1003l"
# mouse moves, no output
我想要的
如何捕获该输出以将其输出到stdout
或文件中,以便随后可以使用更改后的输出来触发运行命令?如果不可能,是否还有其他方法可以捕获带有事件坐标的终端仿真器中的鼠标单击?
答案 0 :(得分:1)
它不是输出,是输入。
有多种方法可以读取bash中的输入。这是一个读取所有内容直到停止的内容:
echo -e "\e[?1003h"
echo "Press enter and then ctrl-d to stop reading"
cat > myfile
完成后,按Enter和Ctrl + D正确退出,您可以检查myfile
以查看所有鼠标事件。
正确的鼠标应用程序将在从终端读取和解码转义序列之前禁用本地回显和终端缓冲。