Как заставить Autokey печатать символы Unicode?
У меня проблема с Autokey: я не могу скопировать и вставить через него специальный символ Unicode. Вот пример:
Я француз, и во французской письменности вы используете пробел перед точкой с запятой. Но в формальной типографии вы не используете обычный пробел перед точкой с запятой, а "узкий пробел без пробелов", который является символом Unicode U+202F.
Поэтому, когда я пишу формальные вещи по-французски, вместо того, чтобы тратить время, всегда набираю CTRL+Shift+U+202F
+ENTER+;+пробел", я хотел бы использовать новую фразу Autokey. Использование аббревиатуры Space+;;
(что означает, устно, печатая пробел, затем дважды запятая). Что означает, когда я печатаю (где угодно) space+;;
, Autokey превращает его в ;
(это узкое пространство без перерывов, за которым следует точка с запятой).
НО проблема заключается в следующем: когда я создаю новую фразу в Autokey с ;
затем, когда я использую сокращение, Autokey заменяет его только на ;
стирая узкое пространство без перерывов. И, похоже, он делает это с любым другим слишком специальным символом Unicode...
У кого-нибудь есть идеи как обойти эту проблему?
Бесконечно благодарен!
1 ответ
Два варианта: (см. Мой блог для более подробной информации и скриншоты для варианта 1)
Первый вариант (намного проще)
Обновление до порта автоключа python 3 (поскольку python 3 работает с символами юникода лучше, чем python 2)
Для меня установка работала следующим образом:
# 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
С помощью этого метода вы можете вводить символы Юникода в виде фраз
Второй вариант (если вы не можете заставить работать autokey-py3)
Используйте скрипт Python (File -> New -> Script) вместе с буфером обмена системы
Вставьте следующее в скрипт
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 по умолчанию для правильной работы с Юникодом. Затем он отправляет выбранного персонажа в буфер обмена (убедитесь, что у вас есть xclip
установлены). Здесь я использовал γ в качестве примера). Затем он посылает control+v для вставки символа.
Дополнения для второго варианта
Второй метод можно улучшить, взяв все, кроме последней строки скрипта, и поместив его в файл (давайте назовем его MyCopy.py
). Затем в настройках Autokey (Script Engine) сообщите Autokey, где находится этот файл. Тогда сценарий становится
from MyCopy import paste_character
paste_character('γ')
Некоторые приложения не используют control+v для вставки (например, терминал использует control+shift+v). Но персонаж все равно будет в буфере обмена.
У меня работает в Linuxmint 19.3, на котором работает python 3.6.8.
НО не работает для меня в Linuxmint 20.0, как python 3.6.8 или 3.8.5. Неоднократно получайте эту ошибку скрипта:
Название скрипта amacron
Traceback (последний вызов последний);
Файл "/usr/lib/python3/dist-packages/autokey/service.py" строка 485, при выполнении exec (script.code, scope) Файл "", строка 2, в NameError: имя reload не определено
===
скрипт amacron:
import sys перезагрузить (sys) sys.setdefaultencoding('utf8') из подпроцесса импорта Popen, PIPE def paste_character (символ): c = Popen (['xclip', '-selection', 'clipboard'], stdin = PIPE) c.communicate(symbol.encode('utf-8')) keyboard.send_keys('+v') paste_character ('а')