Switcher.py
Перейти до навігації
Перейти до пошуку
Источник: Размышления о разном: Ещё одна переключалка введённого текста
По умолчанию переключает всю строку.
Есть возможность использовать с параметрами:
-lastword– для последнего слова перед курсором-selected– для выделенного фрагмента текста
Файлы здесь:
Предварительно доустановить:
sudo apt install python3-pip python3-tk python3-dev sudo pip3 install setuptools pyperclip pyautogui xlib
Подключать так:
#!/bin/bash
sleep 1
python3 /home/romych/.bin/switchr.py
#! /usr/bin/python3
"""
# Этот скрипт написан на Python 3.
# Это упрощённый аналог XNeur и PuntoSwitcher, который работает с запущенными в Wine приложениями
#
# Использование: Назначить в системе комбинацию клавиш (типа [Ctrl]+[R_Win]) на скрипт
# и применять её для ручного переключения введённого в неверной раскладке текста.
#
# Требования: необходим подключённый модуль работы с буфером обмена
# 'pyperclip',
# а также модули автоматизации работы
# 'pyautogui' и 'xlib'
#
# Михаил Винаков, 2019-06-14
# 2019-08-01: Добавлена возможность запуска с параметрами -lastword и -selected
"""
import pyautogui, time, sys
no_pyperclip = False
clpbrd_strg = ""
layout_01 = "`~@#$%^&" +\
"qwertyuiop[]QWERTYUIOP{}asdfghjkl;'\\ASDFGHJKL:\"|zxcvbnm,./ZXCVBNM<>?"
layout_02 = "ёЁ\"№;%:?" +\
"йцукенгшщзхъЙЦУКЕНГШЩЗХЪфывапролджэ\\ФЫВАПРОЛДЖЭ/ячсмитьбю.ЯЧСМИТЬБЮ,"
try: # Пробное импортирование необходимого модуля
import pyperclip # В случае неудачи выполнение скрипта бессмысленно
except ImportError:
no_pyperclip = True
def computing():
if no_pyperclip == True:
print("Требуется модуль работы с буфером обмена: pyperclip")
quit()
elif len(layout_01) != len(layout_02):
print("Наборы символов раскладок (layout_01 и layout_02) не совпадают по длине!")
quit()
else:
workaround()
def workaround():
pyperclip.copy("")
time.sleep(.1)
if len(sys.argv) < 2:
pyautogui.hotkey("shift", "home")
time.sleep(.3)
pyautogui.hotkey("ctrl", "x")
elif sys.argv[1] == "-selected":
pyautogui.hotkey("ctrl", "x")
elif sys.argv[1] == "-lastword":
pyautogui.hotkey("shift", "ctrl", "left")
time.sleep(.3)
pyautogui.hotkey("ctrl", "x")
else:
print("Неизвестный параметр запуска:", sys.argv[1])
quit()
fixed_text = magic(pyperclip.paste())
pyperclip.copy(fixed_text)
time.sleep(.1)
pyautogui.hotkey("ctrl", "v")
def magic(text):
if len(text) < 1:
quit()
elif len(text) < 3: # Сравним каких символов больше
first_x = 1 # Для сравнения желательны нечётные числа
else:
first_x = 3
chars_01, chars_02 = 0, 0
for i in range(first_x): # Какой раскладки первых символов больше: 01 или 02?
if text[i] in layout_01:
chars_01 += 1
elif text[i] in layout_02:
chars_02 += 1
if chars_01 > chars_02: # Разные последовательности, исходя из полученного
layout = layout_01 + layout_02 + layout_01
else:
layout = layout_02 + layout_01 + layout_02
new_text = ""
for c in range(len(text)): # Пропуск символов, которых "нет в раскладках"
if not text[c] in layout:
new_text = new_text + text[c]
else:
new_text = new_text + layout[layout.find(text[c])+len(layout_01)]
return new_text
clpbrd_strg = pyperclip.paste() # Сохранение текущего содержимого буфера обмена
computing()
pyperclip.copy(clpbrd_strg) # Восстановление содержимого буфера обмена
clpbrd_strg = ""
