我有Autokey的问题:我无法通过它复制粘贴一个特殊的 Unicode 字符。下面是一个例子:
我是法国人,在法语写作中,你在分号前使用一个空格。但是在正式的排版中,您不会在分号之前使用常规空格,而是使用“狭窄的不间断空格”,即 Unicode 字符 U+202F。
所以,当我写的东西正式在法国,而不是总是浪费时间打字CTRL+ Shift+ U+ 202F+ ENTER+ ;+ space”,我想用一个自动键的新名词。使用缩写Space+;;(这意味着,口头上,输入空格,然后分号两次)。这意味着当我输入 (anywhere) 时space+;;,autokey 会将其转换为?;(这是一个狭窄的不间断空格,后跟一个分号)。
但这里的问题是:当我在 Autokey 中创建一个新短语 with ?;,然后当我使用缩写时,Autokey 仅将其替换为;,擦除狭窄的不间断空格。它似乎可以用任何其他太特殊的 Unicode 字符来做到这一点......
有没有人知道如何解决这个问题?
太感谢了!
两个选项:(有关选项 1 的更多详细信息和屏幕截图,请参阅我的博客)
第一个选项(更简单)
升级到自动键的python 3端口(因为python 3比python 2更好地处理unicode字符)
对我来说,安装工作如下:
# Edit (April 2018). Autokey now uses python 3 by default. So try
pip3 install autokey
# Install the original autokey
sudo apt-get install autokey-gtk
# Update autokey to python 3 using pip3
pip3 install --user autokey-py3
Run Code Online (Sandbox Code Playgroud)
然后确保你运行的是 python3 版本,它可能在
~/.local/bin/autokey-gtk
Run Code Online (Sandbox Code Playgroud)
使用此方法,您可以输入您的 unicode 字符作为短语
第二个选项(如果你不能让 autokey-py3 工作)
将 python 脚本(文件 -> 新建 -> 脚本)与系统剪贴板一起使用
将以下内容粘贴到脚本中
~/.local/bin/autokey-gtk
Run Code Online (Sandbox Code Playgroud)
这是通过更改默认 python 设置以正确使用 unicode 来实现的。然后它将所选字符发送到剪贴板(确保您已xclip安装)。这里我用过?举个例子)。然后它发送 control+v 来粘贴字符。
第二个选项的额外内容
第二种方法可以通过获取除脚本的最后一行之外的所有内容并将其放入文件中来改进(我们称之为MyCopy.py)。然后,在 Autokey 的首选项(脚本引擎)中,告诉 Autokey 这个文件在哪里。然后脚本变成
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from subprocess import Popen, PIPE
def paste_character(symbol):
c = Popen(['xclip', '-selection', 'clipboard'], stdin=PIPE)
c.communicate(symbol.encode('utf-8'))
keyboard.send_keys('<ctrl>+v')
paste_character('?')
Run Code Online (Sandbox Code Playgroud)
某些应用程序不使用 control+v 进行粘贴(例如终端使用 control+shift+v)。但是角色仍然会在剪贴板上。