我想知道是否有人知道一种方法,可以让一个窗口(例如浏览器)处于焦点状态,并将按键发送到非活动窗口(例如文本编辑器)。例如,在最小化文本编辑器的同时写一些东西(这不是我正在做的具体任务,这只是一个例子)。
答案1
mzke 一个打开文本框的脚本,然后 xdotool 激活编辑器并粘贴文本,然后重新激活当前窗口。设置 ubuntu 键盘快捷键来运行脚本。
这个如果用于是/否..修改为文本输入样式
dialogue --man
有一个适合您的应用程序的--inputbox。您需要自己做。
sudo apt install dialog
dialog --title "texttoeditor" \
--backtitle "Suspend Confirmation " \
--yesno "Are you sure you want to suspend
\"/tmp/foo.txt\"?" 7 60
# Get exit status
# 0 means user hit [yes] button.
# 1 means user hit [no] button.
# 255 means user hit [Esc] key.
response=$?
case $response in
0) systemctl suspend -i ;;
1) echo "suspend cancelled.";;
255) echo "[ESC] key pressed.";;
esac
text=<however we get the result as text for that input
dialogue for use below by xdotool
clear
exit
现在您已经输入了文本,将其复制到剪贴板或存储为脚本的变量 $text
sudo apt 安装 xdotool
我们可以获取活动窗口并存储它的 id,临时激活文本编辑器(这里使用 gedit),使用编辑器的按键(例如 ctrl-v)从剪贴板粘贴文本,然后重新激活活动窗口。啊,这不起作用,因为当前窗口是对话框,所以您需要在调用上面的对话框之前放置以下 id1 行。
存储当前窗口 id id1= $(xdotool getwindowfocus) # xdotool 需要来自编辑器名称的 id
name="gedit"
id2 = $(xdotool 搜索--桌面 0--class“$name”)
xdotool windowactivate --sync $id2 key --clearmodifiers --delay 100
xdotool keydown ctrl && xdotool key v
更好的选择是
xdotool type --window $id2 $text
更多关于 xdotool 的信息请点击此处 https://www.linux.org/threads/xdotool-keyboard.10528/ xdotool windowactivate --sync $id1 key --clearmodifiers --delay 100
有一些工作可以为你完成,但我还没有测试过所有这些。