Skip to content

Instantly share code, notes, and snippets.

@artemsites
Last active March 22, 2024 21:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save artemsites/46777e8789c30071023443c7ce0b5166 to your computer and use it in GitHub Desktop.
Save artemsites/46777e8789c30071023443c7ce0b5166 to your computer and use it in GitHub Desktop.

https://github.com/ffcrus/garlic

pamac install xdotool xsel sed

Необходимо сделать горячие клавиши в Linux по нажатии на которые будет исполняться скрипт

#!/bin/sh
## Этот скрипт позволяет менять раскладку выделенного текста
## https://github.com/ffcrus/garlic
## v0.3.1 2022.12.06
## Сохраняем текущий буфер обмена
SAVED_CLIPBOARD=$(xsel -ob)
## Обрабарываем ситуацию, когда пользователь не успел отпустить клавишу Insert
xdotool keyup Insert
## Выделяем текст от курсора и до начала строки
xdotool key --clearmodifiers Shift+Home
## Принудительно отключаем модификаторы (Ctrl, Alt, Shift, etc) и копируем текст комбинацией клавиш
xdotool key --clearmodifiers Control_L+Insert
## Выбираем скопированное из буфера обмена и скармливаем текстовому редактору (скорее текстовому процессору) sed.
## При помощи функции тренслитерации (y/) происходит замена символов. После этого записываем результат в буфер обмена обратно.
xsel -bo | sed "y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.\/<>?@#\$^&\`~фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбюБЮ№ёЁ/фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбю.БЮ,\"№;:?ёЁabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.<>#\`~/" | xsel -bi
## Меняем активную раскладку клавиатуры
xdotool key Mode_switch
## Вставляем результат обратно, не забывая про модификаторы
xdotool key --clearmodifiers Shift+Insert
## Очищаем из буфера обмена исправленную фразу (не у всех работает эта функция)
xsel --clear
## Восстанавливаем буфер обмена
echo -n $SAVED_CLIPBOARD | xsel -bi
## Отпускаем залипшие модификаторы Ctrl и Shift
xdotool keyup Shift_L Shift_R Control_L Control_R Alt_L Alt_R
## Если хотим воспроизводить звук, раскомментируем следующие строки (SCRIPT_DIR - каталог с воспроизводимым звуком, notification.wav - имя файла со звуком):
#SCRIPT_DIR=$HOME/bin/
#paplay $SCRIPT_DIR/notification.wav
#!/bin/sh
## Этот скрипт позволяет менять раскладку выделенного текста
## https://github.com/ffcrus/garlic
## v0.5.1 2022.12.06
## Сохраняем текущий буфер обмена
SAVED_CLIPBOARD=$(xsel -ob)
## Если не работает смена раскладки, попробуйте увеличить значение в следующей строке до 0.3, 0.4 или 0.5
sleep 0.2s
## Берём выделенное и скармливаем текстовому процессору sed. При помощи функции тренслитерации (y/) происходит замена символов.
## После этого записываем результат в буфер обмена. Это самый быстрый и стабильный способ вернуть результат обратно пользователю.
## К сожалению, после этого в буфере останется исправленный текст.
xsel -op | sed "y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.\/<>?@#\$^&\`~фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбюБЮ№ёЁ/фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбю.БЮ,\"№;:?ёЁabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.<>#\`~/" | xsel -ib
## Меняем активную раскладку клавиатуры
xdotool key Mode_switch
## Принудительно отключаем Insert, модификаторы (Ctrl, Alt, Shift, etc) и вставляем результат обратно комбинацией клавиш Shift+Insert
xdotool keyup Insert
xdotool key --clearmodifiers Shift+Insert
## Очищаем из буфера обмена исправленную фразу (не у всех работает эта функция)
xsel --clear
## Восстанавливаем буфер обмена
echo -n $SAVED_CLIPBOARD | xsel -ib
## Отпускаем возможно залипшие модификаторы Ctrl, Alt, Shift и Insert
xdotool keyup Shift_L Shift_R Control_L Control_R Alt_L Alt_R Insert
## Если хотим воспроизводить звук, раскомментируем следующие строки (SCRIPT_DIR - каталог с воспроизводимым звуком, notification.wav - имя файла со звуком):
#SCRIPT_DIR=$HOME/bin/
#paplay $SCRIPT_DIR/notification.wav
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment