Page 4 of 5

Posted: Mon Sep 07, 2009 7:28 am
by DV
Совершенно верно, потому что каретка уже находится в конце строки, так как окончание выделения соответствует последнему символу в строке. А раз так, то нужно сменить позицию каретку на противоположную - из конца строки на последний непробельный символ.

Posted: Mon Sep 07, 2009 8:15 am
by VladSh
По алгоритму понятно) А вот с логикой.. текст выделен с конца (с пробелами), а каретка (курсор) ведь находится на тексте. Может если есть выделение, то перебрасывать курсор в конец строки? Это было бы логично - курсор просто подсознательно ожидается в конце строки, независимо от наличия выделения.

Posted: Mon Sep 07, 2009 10:24 am
by DV
Для altSmartEnd должно прыгать в конец строки, без него - на последний непробельный символ.
Пробуем:
http://www.megaupload.com/?d=B8EO45J0

Posted: Mon Sep 07, 2009 1:40 pm
by VladSh
Тестирую ("тэщу", как у нас говорила одна девушка :lol: ) для altSmartEnd, т.к. только с ним пользуюсь.
Работает! Боков пока не наблюдаю 8)

Posted: Wed Sep 16, 2009 7:52 am
by DV
v.1.9
- исправлено: иногда каретка исчезала при активной NoSelEOL::Main (например, после сохранения файла с помощью кнопки на Toolbar или через диалог сохранения)

Posted: Mon Nov 02, 2009 11:31 am
by VladSh
DV
Заметил небольшую багофичу: некорректно работает удаление текущей строки по горячим клавишам Ctrl+Y или F8 - удаляется содержимое строки, а не сама строка целиком.
Можно ли это как-то поправить?
Причём желательно было бы ставить обработчик не на указанные комбинации клавиш (они могут измениться), а на вызов команды удаления строки, т.е. чтобы в этом случае NoSelEOL::Main не отрабатывал.

Posted: Tue Nov 03, 2009 12:04 pm
by DV
VladSh wrote:Ctrl+Y или F8 - удаляется содержимое строки, а не сама строка целиком.
Внутренняя реализация Ctrl+Y (в самом AkelPad) работает в два этапа:
1. Выделяет строку, включая последний символ переноса строки
2. Удаляет выделение.

NoSelEOL работает так: при изменении выделения исключает последний символ переноса строки из выделенного текста. Это конфликтует с внутренней реализацией Ctrl+Y (с первым этапом).

Posted: Tue Nov 03, 2009 12:16 pm
by VladSh
А ещё до выделения мы не знаем, для чего будет производиться выделение? Т.е. нам неизвестен номер вызываемой команды до выделения?

Posted: Tue Nov 03, 2009 2:03 pm
by DV
VladSh wrote:А ещё до выделения мы не знаем, для чего будет производиться выделение?
В этом что-то есть.

Posted: Thu Nov 05, 2009 12:28 pm
by DV
v.2.0
- исправлено: Ctrl+Y не удалял всю строку

Posted: Wed Feb 24, 2010 3:49 pm
by VladSh
Проблемка обнаружилась...

Позже из почты:
Shengalts Aleksander wrote:
Vlad Sh wrote:
Shengalts Aleksander wrote:Нормально заменяется, закладки не смещаются. Попробуйте поотключать остальные плагины.
Поочерёдно отключал, но ничего не изменилось - закладки всё равно сносит..
Настройки у меня хранятся в ini.
Проблема в NoSelEOL::Main.

Posted: Wed Feb 24, 2010 4:51 pm
by DV
VladSh wrote:Проблемка обнаружилась...
Формально это не вина NoSelEOL.
При нажатии на кнопку "Заменить все" AkelPad зачем-то устанавливает диапазон выделения текста от 0 до позиции за последним символом. NoSelEOL это честно перехватывает и смещает правую границу выделения на последний символ.
Почему при этом закладка LineBoard съезжает вниз, мне непонятно.
Как непонятно и то, что и как фильтровать, чтобы этого не происходило.
Наверное, нужно игнорировать какие-то сообщения в определенный момент примерно так же, как это было сделано с IDM_NONMENU_DELLINE, но непонятно, какие и когда.

Posted: Thu Feb 25, 2010 5:54 am
by Instructor
DV
При нажатии на кнопку "Заменить все" AkelPad зачем-то устанавливает диапазон выделения текста от 0 до позиции за последним символом.
Наверное для того, чтобы заменить текст (чтобы заменить текст, его надо выделить) :)

Я бы предложил не производить никаких действий, если выделен весь текст.

Posted: Thu Feb 25, 2010 3:44 pm
by DV
Instructor wrote:Я бы предложил не производить никаких действий, если выделен весь текст.
А как узнать, выделен ли весь текст? Насколько я помню, GetWindowTextLength() для RichEdit может вернуть неправильную длину всего текста.

Posted: Fri Feb 26, 2010 9:35 am
by Instructor
DV

Code: Select all

int nTextLen=SendMessage(pd->hMainWnd, AKD_GETTEXTLENGTH, (WPARAM)pd->hWndEdit, 0);
Можно и так:

Code: Select all

  GETTEXTLENGTHEX gtl;
  int nTextLen;

  gtl.flags=GTL_DEFAULT|GTL_PRECISE;
  gtl.codepage=0;
  nTextLen=SendMessage(pd->hWndEdit, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
И возможно даже не только, когда весь текст, но тогда, когда конец выделения находится в конце файла.