我有疑问自动键:我无法通过它复制粘贴特殊的 Unicode 字符。以下是示例:
我是法国人,在法语中,分号前要加空格。但在正式的排版中,分号前不用常规空格,而是用“窄无间断空格”,即 Unicode 字符 U+202F。
因此,当我用法语写正式的东西时,我不想总是浪费时间输入CTRL+ Shift+ U+ 202F
+ ENTER+ ;+ space',而是想使用 Autokey 新短语。使用缩写Space+;;
(口头上意味着输入空格,然后输入两次分号)。这意味着当我输入(任何地方)时space+;;
,autokey 会将其转换为 ;
(这是一个狭窄的无间断空格,后跟一个分号)。
但问题是:当我在 Autokey 中使用 创建新短语时 ;
,当我使用缩写时,Autokey 只会将其替换为;
,从而删除狭窄的不间断空格。而且它似乎对任何其他过于特殊的 Unicode 字符都这样做...
有人知道如何解决这个问题吗?
太感谢了!
答案1
两个选项:(参见我的博客有关选项 1 的更多详细信息和屏幕截图)
第一个选项(更简单)
升级至autokey 的 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
然后确保你运行的是 python3 版本,它可能位于
~/.local/bin/autokey-gtk
使用此方法,您可以将 unicode 字符输入为短语
第二种选择(如果你无法让 autokey-py3 工作)
使用 Python 脚本(文件 -> 新建 -> 脚本)和系统剪贴板
将以下内容粘贴到脚本中
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('γ')
这可以通过更改默认的 Python 设置来正确使用 unicode 来实现。然后它将所选字符发送到剪贴板(确保您已xclip
安装)。这里我使用 γ 作为示例)。然后它发送 control+v 来粘贴字符。
第二种选择的附加功能
第二种方法可以通过将脚本除最后一行以外的所有内容放入一个文件中(我们称之为MyCopy.py
)。然后,在 Autokey 的首选项(脚本引擎)中,告诉 Autokey 此文件的位置。然后脚本变为
from MyCopy import paste_character
paste_character('γ')
有些应用程序不使用 control+v 进行粘贴(例如终端使用 control+shift+v)。但字符仍会保留在剪贴板上。
答案2
在运行 python 3.6.8 的 Linuxmint 19.3 中对我来说有效。
但在 Linuxmint 20.0 中,无论是 Python 3.6.8 还是 3.8.5,它都无法正常工作。反复出现此脚本错误:
脚本名称“amacron”
回溯(最近一次调用最后一次);
文件“/usr/lib/python3/dist-packages/autokey/service.py” 第 485 行,在执行 exec(script.code, scope) 文件“”,第 2 行,位于 NameError:名称“reload”未定义
===
amacron 脚本:
导入系统 重新加载(系统) 系统.setdefaultencoding('utf8') 从子进程导入 Popen,PIPE def paste_character(符号): c = Popen(['xclip','-selection','剪贴板'],stdin = PIPE) c.通信(符号.编码('utf-8')) 键盘.send_keys('+v') 粘贴字符('ā')