Comments 18
Ничегосе, Punto на Delphi... Только что Motorola Razr+ купил из-за ностальгии и это возьму:)
тортик
Пробовал все, ничего не устроило полностью, оставался на punto.
Собрал Вашу. Тестирую. Для меня сразу не хватает авто замены (много настроено на авто подстановку по сокращениям). Замена транслита, неправильный размер букв, надо по сочетанию клавиш + в настройках отключать. Клавиши не назначаются. Настройки не очевидны, местами не понятны.
Потенциал программы 5++ если доработать.
Все замечания скорее всего справедливы. Разрабатывал для себя - я то понимаю, то все означает...
Можно по конкретнее сформулировать в issue.
забил хотелки в codex вот что выдал
Переработать окно настроек.
Сделать боковое меню с разделами: общие настройки, переключение, горячие клавиши, автозамены, транслит, регистр, приложения, внешний вид и диагностика.
Выделять выбранный раздел и добавить понятные пояснения к настройкам.
Хранить форму в DFM, отделить логику настройки от элементов интерфейса.
Предусмотреть два режима исправления раскладки.
Переводить слово целиком после пробела, Enter или знака препинания.
Исправлять раскладку по мере набора при уверенном распознавании.
Дать пользователю явный выбор режима в разделе «Переключение».
Сделать распознавание незавершённых слов осторожнее.
Учитывать словарь, вероятную раскладку и начало слова.
Сохранять корректные английские слова и идентификаторы.
Не переводить одно слово повторно после автоматического исправления.
Исправить преобразование многострочного выделения.
Сохранять переносы строк, пустые строки и пунктуацию.
Поддерживать преобразование выделения и слова у курсора.
Сообщать пользователю о превышении допустимого размера выделения.
Добавить преобразование транслита.
Предусмотреть команды «В транслит» и «Из транслита».
Обрабатывать сочетания
zh,ch,sh,shch,yu,yaи другие.Сохранять регистр и структуру многострочного текста.
Разделить ручное преобразование и автоматическое исправление.
Расширить работу с регистром.
Добавить верхний, нижний и обратный регистр, а также заглавную первую букву.
Предусмотреть исправление случайного Caps Lock и двух заглавных букв в начале слова.
Сохранять короткие аббревиатуры.
Дать возможность отключать автоматическое исправление отдельно от ручных команд.
Добавить пользовательские автозамены.
Для каждого правила задавать исходный текст, замену, чувствительность к регистру и ограничения по приложениям.
Поддерживать многострочный текст замены.
Позволять выбирать срабатывание по пробелу, Enter и Tab.
Добавить включение, редактирование, удаление, импорт и экспорт правил.
Переработать назначение горячих клавиш.
Захватывать сочетание непосредственно при нажатии.
Различать левый и правый Shift, поддерживать двойное нажатие.
Проверять конфликты между командами и зарезервированные сочетания.
Предусмотреть отдельное отключение каждого назначения.
Предусмотреть горячие клавиши для основных действий.
Переключение раскладки текста.
Преобразование транслита и регистра.
Отмена последнего преобразования.
Включение автопереключения, пауза и смена раскладки клавиатуры.
Добавить контекстную обработку точки и буквы «ю».
Анализировать положение символа в конце предложения и внутри имени класса или метода.
Рассматривать исправление вида
TFormюCreate→TForm.Create.Сохранять настоящую букву «ю» в русских словах.
Сделать такую коррекцию отключаемой.
Предусмотреть профиль для редакторов кода.
Задать список IDE и редакторов.
Ограничить автоматическое исправление слов и идентификаторов.
Сохранить доступность ручных команд преобразования.
Отдельно учитывать пунктуацию в квалифицированных именах.
Расширить настройки отдельных приложений.
Поддерживать исключения и маски имён процессов.
Позволять задавать режим распознавания и автопереключения для приложения.
Ограничивать автозамены выбранными приложениями.
Защитить ввод при смене контекста.
Проверять активное окно и конкретное поле ввода перед заменой.
Сбрасывать контекст при перемещении курсора, клике мышью и навигации.
Отбрасывать устаревшие задания после смены контекста.
Сохранять порядок набранных символов и отложенных исправлений.
Улучшить получение текста у курсора.
Для стандартных Edit и Memo сначала использовать сообщения Windows с ограниченным временем ожидания.
Для других редакторов использовать UI Automation.
Предусмотреть обработку недоступного или медленно отвечающего редактора.
Обеспечить сохранность буфера обмена.
Сохранять поддерживаемые форматы перед копированием и вставкой.
Восстанавливать буфер только пока программа владеет его текущим содержимым.
Учитывать задержку обработки вставки целевым приложением.
При неподдерживаемом содержимом прекращать преобразование без потери данных.
Сделать отмену преобразования надёжной.
Запоминать исходный и преобразованный текст.
Поддерживать отмену многострочных замен.
Перед отменой проверять наличие ожидаемого текста у курсора.
Учитывать особенности клавиатуры и защищённых полей.
Применять Caps Lock к буквам, сохраняя правильную обработку пунктуации.
Корректно обрабатывать модификаторы и отпускание перехваченных клавиш.
Исключать преобразования в полях паролей.
Сделать редактирование настроек транзакционным.
Работать с черновиком до нажатия «Применить» или «ОК».
По «Отмена» сохранять прежние значения.
Проверять настройки перед сохранением и восстанавливать прежние значения при ошибке.
Предусмотреть сброс настроек выбранного раздела.
Обеспечить совместимость конфигурации.
Добавить новые параметры в версионируемую схему JSON.
Сохранять пользовательские настройки при переходе со старой версии.
Переносить прежние назначения клавиш с учётом их отключённого состояния.
Улучшить запуск и диагностику.
Предусмотреть запуск сразу с окном настроек через
--settings.Добавить понятные сообщения об отказе преобразования.
Обеспечить доступ к журналу диагностики из настроек.
Предусмотреть автоматические проверки.
Проверять раскладку, транслит, регистр, автозамены, горячие клавиши и миграцию настроек.
Проверять осторожное распознавание незавершённых слов и обработку пунктуации.
Проверять порядок исправлений и сохранение пользовательских настроек при отмене.
Добавить интеграционный тест многострочного преобразования, отмены и сохранения буфера обмена.
Проверять загрузку DFM и отображение разделов настроек.
Спасибо за подробный список, большая часть пунктов уже совпадает с реализацией.
Уже есть
Автоисправление на пробеле, Enter, Tab, знаках препинания,
+,-и:. Распознавание осторожное – n-граммы, словарь частых слов, три режима (осторожный, сбалансированный, агрессивный), контекст последних слов окна. Исправляется только неверная часть слова, а слова с цифрами, адреса, пути, смешение алфавитов и короткие аббревиатуры не трогаются.Конвертация выделения и слова у каретки двойным Left Shift. Текст одного алфавита переводится целиком, в смешанном меняются только слова неверной раскладки.
Обратный регистр – двойной Right Shift, повторный жест возвращает прежний.
Отмена конвертации и автоисправления (Ctrl+Z или повторный жест). Для конвертации она работает на однострочном тексте до 512 символов.
Исключения и правила для приложений – маски
*и?, автопереключение, звуки и режим эвристики отдельно для каждого приложения.Защита полей пароля, в том числе в браузерах и Electron.
Получение текста у каретки – для Edit и Memo сообщения Windows с ограниченным временем ожидания, для остальных UI Automation.
Конфигурация
config.jsonсSchemaVersion, атомарной записью и резервной копией.Журнал диагностики с уровнями и ротацией. Выбор уровня есть в настройках, быстрого открытия журнала нет.
Что полезно, но не часто используется на практике:
Регистр – верхний, нижний, заглавная первая буква, исправление двух заглавных в начале слова и случайного Caps Lock. Автоматическое исправление регистра можно будет отключить отдельно от ручных команд.
Защита данных при ручных операциях (но для этого программа не предусмотрена):
понятное сообщение, когда выделение больше 4096 символов (сейчас оно просто не конвертируется);
сохранение в буфере обмена не только текста, но и других форматов, и остановка преобразования, если содержимое буфера не поддерживается;
отмена многострочных замен.
Настраиваемые горячие клавиши – захват при нажатии, левый и правый Shift, двойное нажатие, проверка конфликтов, отключение каждого назначения. Из-за этого поднимется
SchemaVersionи будет миграция прежних настроек.Переработка окна настроек, если делать ее для других (не только для себя) – боковое меню по разделам, пояснения, черновик с «Применить» и «Отмена», сброс раздела, запуск с
--settings, открытие журнала диагностики. Сейчас форма строится кодом. Перенос в DFM сделаю, если не помешает сборке и тестам.Транслит – ручные команды «В транслит» и «Из транслита» с сохранением регистра и переносов строк.
Возможно, позже
Пользовательские автозамены (многострочная замена, срабатывание по пробелу, Enter и Tab, ограничения по приложениям, импорт и экспорт). Нужна отдельная проработка хранения и срабатывания.
Профиль для редакторов кода. Сейчас это частично покрывается исключениями и правилами приложений.
Режим исправления «по мере набора». Рискованный – может ломать идентификаторы и конфликтует с осторожностью и обучением. Если делать, то только отдельной явно включаемой настройкой.
Скорее всего, не буду делать
Автоматическое исправление транслита. Ложных срабатываний будет больше, чем пользы, поэтому если и реализовать, то транслит останется ручной командой.
Контекстную замену
юна точку (TFormюCreate->TForm.Create). Это слишком узкий случай с риском испортить настоящую «ю». Вернусь к нему, только если появится надёжный способ отличать код от текста.
Автоматические тесты есть и будут расширяться вместе с каждой новой функцией. Пока я не берусь за интеграционный тест с буфером обмена и реальным редактором – его придётся делать на уровне отдельных модулей.
Для автозамены по шаблонам проще держать специализированный инструмент вроде AutoHotkey или Espanso
Все неплохо, но вот Vcl.Forms это лишнее.
долго пользовался Punto Switcher. после перехода на линукс, не нашел замену. агент поставил чтото, но очень глючное. мне нужно только ручное переключение последнего слова. а эта штука сьедает первые 1-2 символа через какое то время после запуска, пока не перезапустишь.
автопереключение никогда не использовал. еще удобно было выделить текст и горячей клавишей сменить раскладку. вот этих двух функций только и не зватает под линуксом
Каждый программист однажды доходит до точки, когда чужой переключатель раскладки ломает ввод пароля, и садится писать свой велосипед на три года))
Зато теперь у автора есть собственный переключатель с блэкджеком и биграммами
Я из того поколения, которые хотят написать собственную операционную систему (с десяток попыток уже было, последняя см. https://github.com/Laex/HOS64), но времени не хватает...
Вспомнилась старая история, которая сейчас ходит как байка. А этого человека я знаю...
Звонит абонент в саппорт регионального провайдера – помогите настроить сеть. Саппорт по привычному скрипту:
– Откройте «Панель управления»…
– Нет у меня такого.
– Так, посмотрите в трей около часов.
– Нет у меня трея.
После попыток угадать дистрибутив или версию ОС выясняется проблема в сетевой карте, которую нет драйверов.
Саппорт выдаёт:
– Ну так найдите и скачайте в интернете.
– Отличный план, только у меня интернета нет.
На том и распрощались.
Через неделю этот же клиент снова попадает на того же сотрудника – тот говорит, что всё заработало, пакеты ходят, но есть пара вопросов по маршрутизации.
Саппорт:
– О, всё-таки нашли драйвер? Долго же искали.
Абонент:
– Почему искал? Сам написал.
Когда научился вслепую печатать, а это всего три недели в клавиатурном тренажёре по часу в день, такие ухищрения стали не нужны, сразу видишь в какой раскладке набираешь, и ошибки ввода тоже.

Свой переключатель раскладки на Delphi, от низкоуровневого хука до скоринга n‑грамм