终端模拟器中的鼠标事件

时间:2018-08-18 14:17:01

标签: bash shell terminal command-line-interface mouseevent

问题

在终端模拟器中,是否有可能在发生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或文件中,以便随后可以使用更改后的输出来触发运行命令?如果不可能,是否还有其他方法可以捕获带有事件坐标的终端仿真器中的鼠标单击?

1 个答案:

答案 0 :(得分:1)

它不是输出,是输入。

有多种方法可以读取bash中的输入。这是一个读取所有内容直到停止的内容:

echo -e "\e[?1003h"    
echo "Press enter and then ctrl-d to stop reading"
cat > myfile

完成后,按Enter和Ctrl + D正确退出,您可以检查myfile以查看所有鼠标事件。

正确的鼠标应用程序将在从终端读取和解码转义序列之前禁用本地回显和终端缓冲。