检测脚本启动时已按下的键

检测脚本启动时已按下的键

我在 Linux 桌面环境 ( XFCE, Gnome) 中运行的脚本已注册为在全局热键事件 (例如Super+ D) 上运行。该脚本将主剪贴板 (我使用xclip+ xdotool) 中的某些内容粘贴到当前选定的窗口编辑框中。问题是粘贴失败,因为当时我的热键仍处于按下状态。我目前的解决方案非常糟糕,我让脚本休眠 0.5 秒 - 刚好足以释放热键 - 然后它执行粘贴命令。

我需要我的脚本等到键盘上没有按下任何键才能运行剪贴板逻辑的主要粘贴操作。

我检查了许多相关的命令行实用程序,例如xev、、等。虽然相关,但它们对我没用,因为它们仅在启动时才开始监视事件。我需要获取键盘按键的当前状态,以xinput确定showkey在我的脚本启动时是否已经按下了某些东西。

任何提示或指示都将非常感激。

答案1

xinput query-state可以显示按下的键。因此你的脚本可以像这样:

#!/bin/bash

while for did in $(xinput --list --id-only) ; do xinput query-state $did 2>/dev/null | grep down ; done | egrep -q . ; do sleep 0.1 ; done

xdotool type "$(xclip -o -selection primary)"

这将等到按下按键或按钮,因此鼠标按钮也算。但对我来说已经足够好了。

相关内容