NoSelEOL plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Совершенно верно, потому что каретка уже находится в конце строки, так как окончание выделения соответствует последнему символу в строке. А раз так, то нужно сменить позицию каретку на противоположную - из конца строки на последний непробельный символ.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

По алгоритму понятно) А вот с логикой.. текст выделен с конца (с пробелами), а каретка (курсор) ведь находится на тексте. Может если есть выделение, то перебрасывать курсор в конец строки? Это было бы логично - курсор просто подсознательно ожидается в конце строки, независимо от наличия выделения.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

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

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Тестирую ("тэщу", как у нас говорила одна девушка :lol: ) для altSmartEnd, т.к. только с ним пользуюсь.
Работает! Боков пока не наблюдаю 8)

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

v.1.9
- исправлено: иногда каретка исчезала при активной NoSelEOL::Main (например, после сохранения файла с помощью кнопки на Toolbar или через диалог сохранения)

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

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

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

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

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

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

А ещё до выделения мы не знаем, для чего будет производиться выделение? Т.е. нам неизвестен номер вызываемой команды до выделения?

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

VladSh wrote:А ещё до выделения мы не знаем, для чего будет производиться выделение?
В этом что-то есть.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

v.2.0
- исправлено: Ctrl+Y не удалял всю строку

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Проблемка обнаружилась...

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

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

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

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

DV
При нажатии на кнопку "Заменить все" AkelPad зачем-то устанавливает диапазон выделения текста от 0 до позиции за последним символом.
Наверное для того, чтобы заменить текст (чтобы заменить текст, его надо выделить) :)

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

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Instructor wrote:Я бы предложил не производить никаких действий, если выделен весь текст.
А как узнать, выделен ли весь текст? Насколько я помню, GetWindowTextLength() для RichEdit может вернуть неправильную длину всего текста.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post 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);
И возможно даже не только, когда весь текст, но тогда, когда конец выделения находится в конце файла.
Locked