我正在尝试创建一个脚本,该脚本可以处理从 GUI(任意数量的应用程序,如浏览器、文本编辑器等)中选择的文本,然后使用一个键盘命令自动用处理后的文本替换选定的文本。
我可以使用 xsel 替换剪贴板或主缓冲区,但如果可能的话,我不想使用其他键盘快捷键进行粘贴。
工作流程:
- 选择文本
- 击键命令
- Bash 脚本处理文本
- Bash 脚本将文本粘贴到 GUI 编辑器中,替换选择(<--这是我无法弄清楚的)
- 鳍
我读到 xsel 允许粘贴,但据我所知,它只允许将文本输出到 cli(而不是真正粘贴)或重定向到其他地方。这可能是我需要的,但我不明白如何做到这一点(即,我应该将输出重定向到哪里才能让它自动替换 GUI 中的选定文本?)
谢谢!
更多信息:
- 我正在使用 Xubuntu 19.10
- 我只想用简单的文本替换(例如将小写字母改为大写字母)
- 让我们简单一点——我如何(使用键盘命令)从 bash 脚本中获取文本并将其粘贴到光标当前所在的 GUI 文本编辑器/区域中,如果有的话,替换选定的文本?
答案1
虽然bash
肯定xdotool
会处理像这样的简单情况,但这正是自动键被设计用来做。
在 AutoKey 中,你可以使用 Python 定义一个简单脚本自动键 API执行此操作。可以将其分配给热键,并在按下该热键时运行。它看起来像这样(未经测试。)
field = clipboard.get_selection()
field = field.lower()
clipboard.fill_selection(field)
keyboard.send_keys("<ctrl>+v")
它将选定的文本放入变量中,将其转换为小写,将其放回剪贴板,然后将其粘贴回其最初的当前选择中。(如果您的应用程序窗口是终端,那么您必须使用++ Ctrl。)Shiftv
这样做有几个优点:可以说比修改键盘更容易。您可以在 AutoKey GUI 中轻松更改热键。您可以定义窗口过滤器,以便热键仅在您选择的窗口中起作用。您可以随意打开或关闭此功能。而且,由于您可以随意使用 Python 的全部功能,因此您可以做几乎任何您能想到的事情。
如果您只是想用一个短语替换另一个短语,AutoKey 短语就可以做到这一点,而无需编写一行代码,但由于您需要操作文本,因此需要使用脚本。
注意:Debian 及其衍生发行版(Ubuntu ...)目前提供的 AutoKey 版本非常老旧。此问题已在 Debian 测试中修复,并将在 Ubuntu 20.04 中修复。目前,您可以使用这些轻松安装该软件包指示。
如需帮助,请访问我们的支持论坛。
答案2
由于您使用 Xorg 并且ctrl+v几乎普遍是粘贴的快捷方式,因此最简单的解决方案是xdotool
(可从官方存储库获得):
xdotool key --clearmodifiers "ctrl+v"
该标志尝试在发出按键之前--clearmodifiers
清除所有修饰符(ctrl, ...),然后恢复它们。当您通过键盘快捷键调用脚本时,这很有用,因为否则应用程序也会看到您为快捷键按下的修饰符,例如++可能会导致不同的命令。altctrlaltv
有时,这可能会导致在恢复修改器之前释放修改器xdotool
,从而导致其卡住,从而出现竞争条件。在这种情况下,只需按下并释放卡住的修改器即可将其解除卡住。
xdotool
可以做更多。阅读man xdotool
以了解概述。它还经常与结合使用xbindkeys
,这让您可以比 gnome 等更灵活地配置键盘快捷键,还可以将操作绑定到鼠标按钮。
答案3
我同意 Joe 的观点,AutoKey 非常适合您想要做的事情。我想再添加一个示例脚本。这个脚本使用字符串格式将选定的文本更改为小写(您可以让它做任何您想做的事情,而不是更改大小写):
selection = clipboard.get_selection()
keyboard.send_keys("%s" % selection.lower())