Как заставить 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 ('а')
Другие вопросы по тегам