При вводе текста в адресную строку браузера неправильной раскладкой и при последующей ее конвертации при помощи Mahou, конвертируется введенные символы, но не заменяются какие нужно, а заменяется выделенная подсказка браузера. Сначала подумал, что это из-за включенной конвертации выделенного текста (у меня одна и та же клавиша это делает), но после того как я ее отключил проблема осталась.
Пример:

После нажатия конвертации:

Аналогично и с русского на английский:


Хм. Может это в новом chrome добавили "автоподставку первого"? Из-за этого при посылании удаления символов которые ты ввёл "сначала удаляется автоподставка", а потом уже не все символы что ты вводил, а только на 1 меньше. Например: пишем: ско chrome добавляет: рость интертнета, Mahou посылает Back в первый раз, удаляется "автоподставка chrome": рость интертнета, а потом уже только "ко", а "с" остаётся...
У меня на 74.0.3729.169 такого нет:

А нет, только когда "автоподставка chrome" подставиться тогда и срабатывает как у тебя.
Я программно определить когда chrome её добавляет - не могу, а как вариант - можно не делать конвертацию если видишь что chrome уже добавил "автоподставку"(синим).
Да, я так и подумал что вы напишите, что невозможно программно определить подсказку хрома. Но до этого я пользовался Punto Switcher, но да, он не опенсорсный, и он умел корректно конвертировать раскладку в адресной строке браузера при его подсказках. Другие аналоги опенсорсные не пробовал, по функционалу и нужной мне фиче, меня ваша программа максимально устраивает. Может можно порыться в их исходном коде и понять как они это делают, если делают.
Вероятно можно как-то узнать, какой выделенный текст был выделен пользователем, а какой нет и от этого исходить.
Я полагаю, реализация у вас такая: программа запоминает введенные символы, после нажатия конвертации, эти символы она стирает и заменяет на аналоги с другой раскладки? А она может как-то проводить поиск в уже введенном тексте? Если да, то можно сделать поиск, тех символов, которые программа, должна конвертировать, если они были не конвертированы корректно, как в насущной проблеме.
Хотя это костыли, потому что если она будет проводить этот самый поиск и окажется так, что она уже заменила все корректные символы далее найдены точно такие же, то заменит и их, которые не входили в нужную замену и были введены давно.
Снова хотя, можно завести булевую переменную, которая будет true, в случае, если программа заменила один раз нужные символы и в случае этого самого true, поиск, о котором я писал, уже не выполнять.
Короче сумбурно, я тоже не знаю, потому что надо разбираться в текущей реализации и от нее исходить как-то.
Upd. Еще хорошая идея появилась. Программа же последовательно затирает конвертируемые символы начиная с конца (справа)? Если да, то как только она стирает ВПЕРВЫЕ символ (ну то есть самый последний (правый) из последовательности), то можно проверить, стерла ли она реально нужный символ. Если нет, то она как раз таки и стерла эту самую подсказку хрома. Далее уже понятно что делать.
Я полагаю, реализация у вас такая: программа запоминает введенные символы, после нажатия конвертации, эти символы она стирает и заменяет на аналоги с другой раскладки?
Конвертация "ввода", а это "последнего введенного слова/линии" - работает таким образом:
то можно проверить, стерла ли она реально нужный символ.
Если бы такое было возможно было бы намного проще… Эти данные в самом Chrome, системой/WinAPI их не получить, а chrome получает только саму клавишу BackSpace, и Mahou не понятно что он удаляет.
Ну можно еще просто добавить "1 лишний" Back, т.е. чтобы затирало всегда на 1 больше, но тогда для слов посередине строки возможно будут удалятся пробелы между ними...
Но до этого я пользовался Punto Switcher, но да, он не опенсорсный, и он умел корректно конвертировать раскладку в адресной строке браузера при его подсказках.
@nikitasA1NT Клавишей Break, то бишь горячей клавишей "отмены конвертации раскладки"? Сомневаюсь, вероятно ты говоришь про его авто-замену, которая срабатывает по ходу "ввода". В Mahou есть авто-замена но тут она срабатывает только при Space, и только если включена.
Нет, я автозаменой не пользовался
Я придумай кое-что. Есть такая комбинация клавиши как Shift+СтрелкаВлево, которая выделяет текст посимвольно. Можно изменить действие программы, чтобы она посылала Back не столько раз, сколько символов было введено, а посылала Shift+СтрелкаВлево столько раз, и одну клавишу Back. Думаю это флекс идея, потому так подсказка от хрома тоже стерется, и при безо всяких подсказках других программ оно тоже работает😃👍
Если у вас нет лишнего времени, то я сам бы хотел за это взяться, если вы мне объясните, где в коде находится тот самый алгоритм, который вы описывали выше
безо всяких подсказках других программ оно тоже работает
в cmd не будет работать. И в других программах где Shift+стрелки не работает, например игры, эмуляторы Android и т.п.
Я придумал другой способ в e1e4ae7:
Получать выделенный текст(Cltr+Insert) до конвертации, если он не пустой тогда добавлять 1 Back, вот:

Фиксирую, теперь все ок👍
А никак нельзя чтобы из-за https://github.com/BladeMight/Mahou/commit/e1e4ae77185394f0ccc09d8806ca535a79bd2d24 не затирался предыдущий буфер обмена. А то сейчас при повседневке это очень раздражать начало. Скопирую что-то, а потом удивляюсь, где мое это самое скопированное "что-то" 😕
@nikitasA1NT По идее и не должно затирать буфер, в e1e4ae7 Line#2832 я делаю backup перед "получением буфера обмена в GetClipStr()(посылает Ctrl+Insert/C и получает буфер) e1e4ae7 Line#2833 и наконец после всего этого возвращаю буфер в RestoreClipboard() e1e4ae7 Line#2836.
Хм... Возможно таки конфликтует с такой же конструкцией (backup=>do_things=>restore) из "Конвертации выделения", если у тебя назначена одна горячая клавиша на обе действия...
Вот:

А, еще вот вспомнил: другие форматы кроме "текста" будут удалены… Mahou пока не поддерживает восстановление буфера обмена если в нём что-то кроме текста. И восстановить некоторые форматы будет крайне непросто....
@nikitasA1NT В 1d14c8c добавил полную поддержку восстановление буфера обмена ⭐🎉⭐ , демо с Paint'ом:
В https://github.com/BladeMight/Mahou/commit/7af3192cae5de04a0c8964737ffe11deaa71f010 исправил проблемы с форматом CF_HDROP(при копировании списка файлов в проводнике) и похожими, теперь работает как нельзя лучше:

Обновился, проблемы нет. Правда бывает на самом деле иногда если быстро нечаянно переключаю с помощью Mahou клавишу, а потом обратно с помощью него же переключаю, то вставляется внезапно текст, который был в буфере обмена.
Еще есть некоторые проблемы, которые лучше было бы показать с помощью гифок. Не подскажете каким софтом пользуетесь для записи gif?
Не подскажете каким софтом пользуетесь для записи gif?
ScreenToGif с настройкой на 30 fps.
Так, долго пришлось отсутствовать, забыл уже основную свою проблему. Щас смотрел, вроде терпимо, если не злоупотреблять переключением раскладки, то никаких багов не возникает со вставкой текста из буфера. Что-то если всплывет - отпишусь = )