Сайт | Скачать | Видео | Wiki

Автор Тема: TextCorrection (PureBasic)  (Прочитано 433 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AZJIO

  • Модератор
  • Постоялец
  • ****
  • Сообщений: 109
  • Репутация: +4/-0
  • Автор темы
TextCorrection (PureBasic)
« : 11 Январь 2021, 11:29:35 »
TextCorrection

Скачать: yadi.sk upload.ee



Назначение
Исправление текста набранного в неправильной раскладке клавиатуры, случайно нажатым капслоком и др.


Использование
1. Выделить текст, строку, фразу
2. Вызвать горячую клавишу для преобразования
3. Вставить результат из буфера обмена

Пишу программу TextCorrection для Linux. Эту идею я уже давно осуществил на Windows, но в Linux мне крайне не достаёт функционала. Эксперимент начал в мае 2020г, продолжил попытку в январе 2021г, так как появились идеи использовать xdotool, xvkbd для эмуляции горячих клавиш. В данный момент нашёл xsel и дело сдвинулось с мёртвой точки, так как утилита просто захватывает выделенный текст в любом окне, без эмуляции Ctrl+C используя буфер обмена. Вставка пока толком не работает, Ctrl+V работает через раз, а также автоматическое выделение текста ctrl+shift+left используя xdotool работает как отдельная команда, но пока не срабатывает в исходнике.

Вставка методом
Код
RunProgram("xvkbd", "-xsendevent -text " + Chr(34) + New_Text$ + Chr(34), "")
вызвала проблему кодировки и посчитал это не надёжным способом, тем более при наличии метасимволов \C и других может вообще эмулировать горячую клавишу вместо вставки.

Текущий обновляемый исходник
Если есть желание тестить вот скомпилированный (+исходник), ложим файл в /usr/bin, в DE добавляем глобальные горячие клавиши "text-correction -r" (преобразование англ-рус туда-обратно) и  "text-correction -t" (транслитерация), а в дальнейшем добавить "Красная строка", "ВЕРХНИЙ РЕГИСТР", "нижний регистр".
« Последнее редактирование: 07 Март 2021, 11:02:31 от AZJIO »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 30598
  • Репутация: +206/-0
    • PuppyRus-A
Re: TextCorrection (PureBasic)
« Ответ #1 : 11 Январь 2021, 11:48:47 »
У меня запустился - см. скрин. так должно быть?

Оффлайн AZJIO

  • Модератор
  • Постоялец
  • ****
  • Сообщений: 109
  • Репутация: +4/-0
  • Автор темы
Re: TextCorrection (PureBasic)
« Ответ #2 : 11 Январь 2021, 13:06:42 »
Так, если без ключей. Прога работает только с ключами, чтобы разделить функционал, а без ключей выдаёт версию, чтобы проверить что прога на месте, версия соответствует, а то я когда тестировал мне казалось может я что-то не так делаю, а когда получаю сообщение, то понимаю, что всё так и проблема только в неправильных командах.


Допустим пишем любой текст в браузере/блокноте/вайбере, везде где есть текстовый курсор, например пишем ghbdtn, далее видим что текст написан неправильно, выделяем текст (слово, строку), жмём хоткей (у меня правый Ctrl+\), далее жмём Ctrl+V и вместо ghbdtn будет вставлено слово "привет".

Важно именно хоткей, потому что если набирать команду в терминале, то поменяется фокус окна, я даже не тестировал как в этом случае будет работать.

В будущем выделять текст не надо будет, так как хоткей сам сделает выделение слова слева от курсора, подразумевая что в активном окне последний текст был введён неправильно. Также не надо будет жать Ctrl+V, потому что это будет автоматически. Но пока этого нет, то всё делаем руками.

Блин, я тестовый исходник выложил, там сейчас вылетает сообщение с преобразованным текстом, у меня закрадывается где-то перенос строки и хочу это исправить.
« Последнее редактирование: 11 Январь 2021, 19:59:37 от AZJIO »

Оффлайн AZJIO

  • Модератор
  • Постоялец
  • ****
  • Сообщений: 109
  • Репутация: +4/-0
  • Автор темы
Re: TextCorrection (PureBasic)
« Ответ #3 : 11 Январь 2021, 19:56:57 »
sfs
вот видео идеи

перезалил архив, добавил описание, добавил проверку пакетов xsel, xdotool, убрал перенос строки в возвращаемом результате. Практически уже можно пользоваться, иногда даже вставляет автоматически.
« Последнее редактирование: 11 Январь 2021, 20:50:48 от AZJIO »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 30598
  • Репутация: +206/-0
    • PuppyRus-A
Re: TextCorrection (PureBasic)
« Ответ #4 : 13 Январь 2021, 13:14:10 »
Попробовал на арче (prar2008)
xdotool v 3.20160805.1 не понимает ключ --clearmodifier
С текстом в lxterminal у меня не сработало. Только изменился размер окна
Возможно из-за --clearmodifier ...

Оффлайн AZJIO

  • Модератор
  • Постоялец
  • ****
  • Сообщений: 109
  • Репутация: +4/-0
  • Автор темы
Re: TextCorrection (PureBasic)
« Ответ #5 : 13 Январь 2021, 15:25:24 »
текущий исходник (pastebin) (есть в архиве програрммы)

На счёт эмуляции хоткеев, отказываюсь, точнее ставлю флаг отказа в ini, меня не устраивает работа через раз, повезёт-не-повезёт, у кого работает включат флагами, у меня не работает, отключу совсем, мне не трудно выделить Ctrl+Shift+Left, а потом вставить, только хоткей на обработку нужно сделать так чтобы не отпуская Ctrl вставлять, например Ctrl+пробел (обработка) и Ctrl+V вставить, тогда не будет напряжно.

Попробовал на арче (prar2008)
xdotool v 3.20160805.1 не понимает ключ --clearmodifier
С текстом в lxterminal у меня не сработало. Только изменился размер окна
Возможно из-за --clearmodifier ...
Думаю --clearmodifier в цикле проверяет нажата ли клавиша (каждая из 4-х модификаторов) через интервал времени и если да, то высылает команду "keyup модификатор"

Добавил справку в архив, но не делал встраивание через /usr/share/help/ru так как надо изучать как определяется ru/es/en/de при вызове справки. Можно было бы получить язык локали, если точно знать, что это ru, а не ru_RU. Возможно если субязык имеет тоже что основной, то и приставка не требуется.
« Последнее редактирование: 20 Январь 2021, 03:36:27 от AZJIO »

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2017
  • Репутация: +25/-0
Re: TextCorrection (PureBasic)
« Ответ #6 : 20 Январь 2021, 08:01:04 »
очень бегло попробовал на Ледяном ( по ссылке в шапке на тот момент; на iso)
----------
/bin/text-correction - запускается.
по хоткею - запускается только "text-correction" ( с ключем '-r' - не удалось).
-----
вроде в архиве попалась помарка в пакете (text-correction-1.0-1-x86_64.pkg.tar.xz) -  /usr/usr/share/...
---------------
если правильно понял - надо добавлять в флаг ClipBoard - в /.config/text-correction/text-correction.ini ;
по дефолту параметра не было ( пробовал прописывать, но неудачно).
------
т.е. у меня пока "text-correction" запускался - без ключей, вызывал меню, далее при выборе '-r' - "нет выделенного текста".
------
может я чего делаю не так... , может вдруг где баг при "сборке" закрался ... )
« Последнее редактирование: 20 Январь 2021, 08:16:38 от knn »
Samsung RV510: intel pent.T4500; чипсет intel Gl40; ATI mob. Radeon HD 5145, RAM=3Gb; hd1 - Grub2; hd2 - Gr4D.
Sams-n110: N270 - 1,6 ГГц, Intel GMA 950, RAM=2 ГБ

Оффлайн AZJIO

  • Модератор
  • Постоялец
  • ****
  • Сообщений: 109
  • Репутация: +4/-0
  • Автор темы
Re: TextCorrection (PureBasic)
« Ответ #7 : 22 Январь 2021, 21:16:14 »
Обновил
Добавлена генерация файла replace.ini.
Добавил закрытие окна по Esc.
Мелкие оптимизации, не проверяется наличие xsel и xdotool, но при отсутствии их запуск возвращает 0 (вместо 1), и выдаётся сообщение об отсутствии пакетов. Также в пакеты добавил зависимости xsel и xdotool. Интересно, что дата в пакете builddate = 1611349753 является в том же формате, что и функции PureBasic
Код
CurrentDate = Date()
Debug CurrentDate
Debug FormatDate("%hh:%ii:%ss %mm/%dd/%yyyy", CurrentDate)
перезалил, нельзя версию писать как 1.4, только как 1.4-0 выдавал ошибка транзакции пакета, восстанавливал изменения, чтобы определить причину.
« Последнее редактирование: 22 Январь 2021, 23:03:23 от AZJIO »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 30598
  • Репутация: +206/-0
    • PuppyRus-A
Re: TextCorrection (PureBasic)
« Ответ #8 : 25 Январь 2021, 09:18:51 »
нельзя версию писать как 1.4, только как 1.4-0
Да. -цифра обязательно

Оффлайн AZJIO

  • Модератор
  • Постоялец
  • ****
  • Сообщений: 109
  • Репутация: +4/-0
  • Автор темы
Re: TextCorrection (PureBasic)
« Ответ #9 : 25 Январь 2021, 10:59:03 »
Обновил
Добавил возможность добавлять второй параметр -s чтобы выделить строку, а не слово. На данный момент не актуально, кроме связки с добавленным функционалом "инвертирование раскладки", то есть актуально использовать "-i -s", так как только в длинной строке у нас может быть использовано 2 языка и тут актуальней вместо того чтобы приводить к одному языку, надо инвертировать. Казалось бы почему и для "-r" этого не сделать? Дело в том что заменить один язык на другой проще, чем определить на каком языке данная буква, к примеру для символов ;:?,.<>" они не имеют языка и могут вводится и в русском и в английском, но эти же символы в другой раскладке могут оказаться буквами $^&бюБЮЭЖ, поэтому для инвертирования нужно добавлять правило, например после точки или запятой следует пробел, но если вместо этого следует англ. буква, то скорее всего надо заменять на русские "юб", после ;:? тоже следует пробел. а также можно проверить язык предыдущей буквы. Пока сделан упрощенный вариант распознавания.

Добавил нормальную работу выбора пунктов меню списка с помощью стрелок клавиатуры вверх/вниз с возможностью двигать по кругу, с последнего пункта на первый и наоборот.
Расставил пункты меню по релевантности, "красная строка" используется чаще чем "верхний регистр".

Также встретил мелкий баг, режим замены аббревиатур при замене "<" и ">" выдаёт "не определён язык", а тут вообще определение языка не нужно, будет исправлено чуть позже.
Также выделение строки Shift+Home иногда выделяет весь текст, потому что горячая клавиша Ctrl+Э которую я использую в реале задействует Ctrl+Shift+Home, так как Ctrl у меня нажата в рамка вызова хоткея и выделяет весь текст вверх. Если использовать Shift+Э то это для меня и не удобно и тоже какие то лаги, будем посмотреть. Попытка "keyup Ctrl" чтобы отпустить клавишу перед эмуляцией Shift+Home, пока не сработала.
« Последнее редактирование: 25 Январь 2021, 11:11:41 от AZJIO »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 30598
  • Репутация: +206/-0
    • PuppyRus-A
Re: TextCorrection (PureBasic)
« Ответ #10 : 25 Январь 2021, 15:16:35 »
Поэкспериментировал с похожей конструкцией
В теории все красиво. На практике xclip + xdotool ведут себя непредсказуемо

Оффлайн AZJIO

  • Модератор
  • Постоялец
  • ****
  • Сообщений: 109
  • Репутация: +4/-0
  • Автор темы
Re: TextCorrection (PureBasic)
« Ответ #11 : 26 Январь 2021, 09:44:23 »
Обновил
Устранил ошибку с проверкой языка в не предназначенных для этого режимах, теперь проверка только в "раскладка".
Улучшил коррекцию при инвертировании раскладки (только для русского) и добавил флаг rus чтобы включать/отключать коррекцию.