SpellCheck plugin
- Author
- Message
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
FeyFre
Если будете что-то допиливать/перепиливать, то очень прошу сделать, чтобы при нажатых клавишах, влияющих на промотку страницы (Left, Right, Up, Down, PgUp, PgDown) и удаление символов (Del, Backspase) определение и прорисовка неверных слов не срабатывала. Т.е. когда нажата любая из вышеупомянутых клавиш, то не определять/прорисовывать, а делать это при только отпускании.
Может быть опционально (какой-то параметр в ini), но пожалуйста, сделайте, а то уж очень плохо работать на старых компах!
Если будете что-то допиливать/перепиливать, то очень прошу сделать, чтобы при нажатых клавишах, влияющих на промотку страницы (Left, Right, Up, Down, PgUp, PgDown) и удаление символов (Del, Backspase) определение и прорисовка неверных слов не срабатывала. Т.е. когда нажата любая из вышеупомянутых клавиш, то не определять/прорисовывать, а делать это при только отпускании.
Может быть опционально (какой-то параметр в ini), но пожалуйста, сделайте, а то уж очень плохо работать на старых компах!
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
VladSh
А попробуйте эту версию.
А попробуйте эту версию.
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
FeyFre
Надо теперь найти слабый комп, чтобы скорость движения каретки сравнить с включенным плагином и без; это в следующий раз когда к заказчику поеду.
Вообще по работе:
1. Если в нескольких строках специально сделать ошибки, а затем установить курсор ниже, а потом просто нажать Up и держать, то проходя по отмеченным словам курсор как бы удаляет существующие отметки.
После отпускания клавиши происходит не НЕмедленная перепрорисовка неправильных слов, а с задержкой в 1-2 секунды, создаётся впечатление, что на этой операции оно подтормаживает. Если бегать курсором по одному и тому же куску текста, то при последующих "пробегах" задержка перед прорисовкой меньше.
Убирать прорисовку при нажатии клавиш Up/Down и прохождении по определённому слову не надо, это стоит делать только при клавишах Del/Backspase.
2. При нажатии Del/Backspase убираются все подчёркивания ниже этой строки, а потом, при отпускании, неправильные слова всего окна редактирования прорисовываются снова, что долго. Лучше бы это действовало на текущее подчёркнутое слово, при невозможности - на текущую строку.
3. При одиночном нажатии Up/Down вся прорисовка подёргивается (происходит сброс и прорисовка заново; это хорошо видно, когда в текущей строке рядом 2 подчёркнутых слова), что тоже не нужно. Нужна перепрорисовка только когда в результате Up/Down текст "проскролился" в окне редактирования. А лучше именно ДОпрорисовка только появляющегося текста, как, вроде бы, сделано в текущей версии.
4. Если нажимать одиночный Left, то при каждом нажатии прорисовка убирается и снова проставляется, что подтормаживает. В этом случае лучше оставить предыдущую работу, т.е. текст не должен "мигать". Должен только когда в результате Left/Right текст "проскролился" в окне редактирования. Этот пункт похож на предыдущий.
Спасибо за начинание!
Upd: сейчас поставил текущую официальную версию, так там при движении Up/Down прорисовка не подёргивается, при скроле текста в результате действия кнопок новый текст прорисовывается мгновенно(!), я не вижу никакого "подрагивания", такое ощущение, что реально прорисовывается не всё окно редактирования, а только добавляемый текст.
Вы оптимизировали прошлую версию в этом плане? А то я её не смог потестить на старых компах((
Ещё заметил: при долгом нажатии Del низлежащие "подчёркивания" становятся блёклыми, а при отпускании клавиши прорисовываются в полный цвет, - интересный эффект!
В общем, тестовая версия во многих случаях стала работать гораздо медленнее (это стало видно на моём i3 3.2), возможно из-за того, что делает ненужные действия, а возможно из-за того, что для перепрорисовки стало использоваться отключение/включение плага (почему-то возникло такое ощущение), что долго. Т.е. в текущей официальной версии на указанной конфигурации работать гораздо комфортней.
Сравнить скорость при долгом нажатии Del/Backspace не могу, т.к. пока нет доступа к слабым компам.
Надо теперь найти слабый комп, чтобы скорость движения каретки сравнить с включенным плагином и без; это в следующий раз когда к заказчику поеду.
Вообще по работе:
1. Если в нескольких строках специально сделать ошибки, а затем установить курсор ниже, а потом просто нажать Up и держать, то проходя по отмеченным словам курсор как бы удаляет существующие отметки.
После отпускания клавиши происходит не НЕмедленная перепрорисовка неправильных слов, а с задержкой в 1-2 секунды, создаётся впечатление, что на этой операции оно подтормаживает. Если бегать курсором по одному и тому же куску текста, то при последующих "пробегах" задержка перед прорисовкой меньше.
Убирать прорисовку при нажатии клавиш Up/Down и прохождении по определённому слову не надо, это стоит делать только при клавишах Del/Backspase.
2. При нажатии Del/Backspase убираются все подчёркивания ниже этой строки, а потом, при отпускании, неправильные слова всего окна редактирования прорисовываются снова, что долго. Лучше бы это действовало на текущее подчёркнутое слово, при невозможности - на текущую строку.
3. При одиночном нажатии Up/Down вся прорисовка подёргивается (происходит сброс и прорисовка заново; это хорошо видно, когда в текущей строке рядом 2 подчёркнутых слова), что тоже не нужно. Нужна перепрорисовка только когда в результате Up/Down текст "проскролился" в окне редактирования. А лучше именно ДОпрорисовка только появляющегося текста, как, вроде бы, сделано в текущей версии.
4. Если нажимать одиночный Left, то при каждом нажатии прорисовка убирается и снова проставляется, что подтормаживает. В этом случае лучше оставить предыдущую работу, т.е. текст не должен "мигать". Должен только когда в результате Left/Right текст "проскролился" в окне редактирования. Этот пункт похож на предыдущий.
Спасибо за начинание!
Upd: сейчас поставил текущую официальную версию, так там при движении Up/Down прорисовка не подёргивается, при скроле текста в результате действия кнопок новый текст прорисовывается мгновенно(!), я не вижу никакого "подрагивания", такое ощущение, что реально прорисовывается не всё окно редактирования, а только добавляемый текст.
Вы оптимизировали прошлую версию в этом плане? А то я её не смог потестить на старых компах((
Ещё заметил: при долгом нажатии Del низлежащие "подчёркивания" становятся блёклыми, а при отпускании клавиши прорисовываются в полный цвет, - интересный эффект!
В общем, тестовая версия во многих случаях стала работать гораздо медленнее (это стало видно на моём i3 3.2), возможно из-за того, что делает ненужные действия, а возможно из-за того, что для перепрорисовки стало использоваться отключение/включение плага (почему-то возникло такое ощущение), что долго. Т.е. в текущей официальной версии на указанной конфигурации работать гораздо комфортней.
Сравнить скорость при долгом нажатии Del/Backspace не могу, т.к. пока нет доступа к слабым компам.
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
VladSh,
> Вообще по работе:
Я вкурсе, грубо говоря, так специально делалось.
Давайте я объясню принцип, что изменилось, а Вы уже решите лучше или хуже:
Когда пришел пинок "перерисуй окно редактирования", тут появляюсь я и начинаю в заданой области искать слова и рисовать. Замечу, то практически после каждой операции с кнопками приходит такой пинок, ибо нужно перерисовать(либо редактирование, либо движение курсора).
Добавил:
Теперь я дополнительно ловлю все операции с кнопками. При каждой операции я взвожу некий флажок.
Рисовальщик ошибок в свою очередь смотрит "флажок поднят" значит ничего не делать, опущен - рисовать как обычно(вот Вам и ощущение отключения).
За флажком следит арбитр: он каждую секунду смотрит: опущен - ничего не делать, поднят - опустить, и перерисовать окно. Таким образом если за секунду пришло 10 нажатий, то я рисую(и проверяю) не 10 раз, а один. Но побочным эффектом является то, что те 10 раз просили перерисовывать маленькую область, фактически только ту что изменилась, а 1 раз - приходится перерисовывать всё, ибо невозможно выяснить куда за время предыдущих 9 занятий переместилась область которую нужно перерисовать(это ваш пункт 3).
> Вообще по работе:
Я вкурсе, грубо говоря, так специально делалось.
Давайте я объясню принцип, что изменилось, а Вы уже решите лучше или хуже:
Когда пришел пинок "перерисуй окно редактирования", тут появляюсь я и начинаю в заданой области искать слова и рисовать. Замечу, то практически после каждой операции с кнопками приходит такой пинок, ибо нужно перерисовать(либо редактирование, либо движение курсора).
Добавил:
Теперь я дополнительно ловлю все операции с кнопками. При каждой операции я взвожу некий флажок.
Рисовальщик ошибок в свою очередь смотрит "флажок поднят" значит ничего не делать, опущен - рисовать как обычно(вот Вам и ощущение отключения).
За флажком следит арбитр: он каждую секунду смотрит: опущен - ничего не делать, поднят - опустить, и перерисовать окно. Таким образом если за секунду пришло 10 нажатий, то я рисую(и проверяю) не 10 раз, а один. Но побочным эффектом является то, что те 10 раз просили перерисовывать маленькую область, фактически только ту что изменилась, а 1 раз - приходится перерисовывать всё, ибо невозможно выяснить куда за время предыдущих 9 занятий переместилась область которую нужно перерисовать(это ваш пункт 3).
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
VladSh, ну дык
Пришел WM_PAINT - нарисовать окно. Даю АР нарисовать фон и слова. Далее я смотрю какую область окна попросили перерисовать(эта область не всегда полное окно, чаще всего строчка и нескокльо последующих), определяю диапазон текста размещенного в этой области и начинаю в этом диапазоне искать слова и проверять и подчеркивать.
Стало:
Включение функции фоновой проверки: сделать флаг=0
Кнопочное событие: сделать флаг=1
WM_PAINT - нарисовать окно: если флаг=0 то проверить и нарисовать(тем же алгоритмом).
Событие секундного таймера: если флаг=1 сделать его 0 и заставить перерисовать окно(полностью). За интервал срабатывания таймера событий WM_PAINT может прийти десятки, каждое требующее перерисовать свою область. За интервал срабатывания таймера может пройти десяток кнопочных событий, которые могут менять текст, а значит и отображение, т.е порождать WM_PAINT.
Техически так:Когда пришел пинок "перерисуй окно редактирования", тут появляюсь я и начинаю в заданой области искать слова и рисовать.
Пришел WM_PAINT - нарисовать окно. Даю АР нарисовать фон и слова. Далее я смотрю какую область окна попросили перерисовать(эта область не всегда полное окно, чаще всего строчка и нескокльо последующих), определяю диапазон текста размещенного в этой области и начинаю в этом диапазоне искать слова и проверять и подчеркивать.
Стало:
Включение функции фоновой проверки: сделать флаг=0
Кнопочное событие: сделать флаг=1
WM_PAINT - нарисовать окно: если флаг=0 то проверить и нарисовать(тем же алгоритмом).
Событие секундного таймера: если флаг=1 сделать его 0 и заставить перерисовать окно(полностью). За интервал срабатывания таймера событий WM_PAINT может прийти десятки, каждое требующее перерисовать свою область. За интервал срабатывания таймера может пройти десяток кнопочных событий, которые могут менять текст, а значит и отображение, т.е порождать WM_PAINT.
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Спасибо, ясно.
Мы, "высокоуровневики" и пользователи привыкли, что оно там "как-то само всё делается")), невольно начинаешь уважать тех, кто это на низком уровне рубает.
Значит по таймеру - от него придётся отказаться. Таймеры хороши для каких-то фоновых операций, т.е. где юзер не ожидает немедленного исполнения, например то же отображение лога в реальном времени.
Тут же надо "немедленно".
Вот этот вариант идеален:
Вот, на примере нажатия PgUp: мы находимся на первой странице, жмём PgUp, перед самой отрисовкой определяем, что это PgUp (ну или то, 'какая была нажата клавиша' можно передать параметром, если там не линейный код), заходим в switch по 'кодам нажатых клавиш' и в case для PgUp делаем свою проверку "если текст в окне редактирования не проскролился (а он не проскролился, т.к. находимся на 1-й странице)", то ничего не определяем и не прорисовываем.
Т.о. то, что я предлагаю, это для некоторых клавиш поставить такие case и просто в некоторых случаях не прорисовывать - выходить, ничего не делая. А именно (добавить обработку по 2-м основным правилам):
1. Если жмутся клавиши, изменяющие содержимое окна редактирования, и клавиша нажата и не отпускается (нажали Del и держим или нажали любой символ и держим), то ничего не нужно определять и прорисовывать, пока клавиша не будет отжата.
2. Если жмутся клавиши "навигации" (не изменяющие содержимого): Left, Right, Up, Down, PgUp, PgDown), то для них нужно определять (дополнительно отлавливать событие?), проскролился ли текст в окне редактирования, и если да, то при отпускании клавиши производить определение и прорисовку.
Если же так вклиниться можно, тогда всё решаемо.
P.S. Знаю, что вариант с case плохой... Я у себя для скорости инициализирую собственные 'объекты поведения' для определённых случаев (здесь это специальные клавиши) и объект поведения для всех остальных случаев, и засовываю их в объект, аналогичный Dictionary. При нажатии любой клавиши можно получить соотв. объект поведения по коду нажатой клавиши и вызвать у него метод, выполняющий действия, который состоит из предварительного условия (условия может и не быть), определения просчитываемого текста и вызова общего метода прорисовки слов с ошибками.
Мы, "высокоуровневики" и пользователи привыкли, что оно там "как-то само всё делается")), невольно начинаешь уважать тех, кто это на низком уровне рубает.
Значит по таймеру - от него придётся отказаться. Таймеры хороши для каких-то фоновых операций, т.е. где юзер не ожидает немедленного исполнения, например то же отображение лога в реальном времени.
Тут же надо "немедленно".
Вот этот вариант идеален:
но хотелось бы вклиниться перед рисованием подчёркиваний.FeyFre wrote:Пришел WM_PAINT - нарисовать окно. Даю АР нарисовать фон и слова. Далее я смотрю какую область окна попросили перерисовать(эта область не всегда полное окно, чаще всего строчка и нескокльо последующих), определяю диапазон текста размещенного в этой области и начинаю в этом диапазоне искать слова и проверять и подчеркивать.
Вот, на примере нажатия PgUp: мы находимся на первой странице, жмём PgUp, перед самой отрисовкой определяем, что это PgUp (ну или то, 'какая была нажата клавиша' можно передать параметром, если там не линейный код), заходим в switch по 'кодам нажатых клавиш' и в case для PgUp делаем свою проверку "если текст в окне редактирования не проскролился (а он не проскролился, т.к. находимся на 1-й странице)", то ничего не определяем и не прорисовываем.
Т.о. то, что я предлагаю, это для некоторых клавиш поставить такие case и просто в некоторых случаях не прорисовывать - выходить, ничего не делая. А именно (добавить обработку по 2-м основным правилам):
1. Если жмутся клавиши, изменяющие содержимое окна редактирования, и клавиша нажата и не отпускается (нажали Del и держим или нажали любой символ и держим), то ничего не нужно определять и прорисовывать, пока клавиша не будет отжата.
2. Если жмутся клавиши "навигации" (не изменяющие содержимого): Left, Right, Up, Down, PgUp, PgDown), то для них нужно определять (дополнительно отлавливать событие?), проскролился ли текст в окне редактирования, и если да, то при отпускании клавиши производить определение и прорисовку.
Если же так вклиниться можно, тогда всё решаемо.
P.S. Знаю, что вариант с case плохой... Я у себя для скорости инициализирую собственные 'объекты поведения' для определённых случаев (здесь это специальные клавиши) и объект поведения для всех остальных случаев, и засовываю их в объект, аналогичный Dictionary. При нажатии любой клавиши можно получить соотв. объект поведения по коду нажатой клавиши и вызвать у него метод, выполняющий действия, который состоит из предварительного условия (условия может и не быть), определения просчитываемого текста и вызова общего метода прорисовки слов с ошибками.
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Идея: SpellCheck на Enchant.
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
>2 лет прошло с того момента - неужели до сих пор не нашлось адекватной замены? нельзя ли просто пересобрать х32 версию имеющегося плагина под х64?FeyFre wrote:Magister, spellcheck x64 не существует. И не просуществует ровно столько, сколько мне понадобится времени что-бы найти для него адекватную замену. Так что предложения принимаются.
p.s.: я новичок, только приобщился к AkelPad, тему не читал, то сообщение нашёл гуглом.
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
viewtopic.php?p=15960#p15960Drugmix wrote:нельзя ли просто пересобрать х32 версию имеющегося плагина под х64?
FeyFre wrote:Nizaury, плагин будеть работать на x64 как только найду ASpell x64, а пока нет. Я конечно могу выпустить x64-плагин-пустышку, который будет только подсвечивать все слова которые не находятся в белых списках, но вряд ли это будет назвать "работает".