自动粘贴到 GUI 文本编辑器/框

自动粘贴到 GUI 文本编辑器/框

我正在尝试创建一个脚本,该脚本可以处理从 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())

相关内容