Page 2 of 7
Posted: Thu Sep 30, 2010 8:36 am
by DV
Можно попробовать блокировать работу NoSelEOL, если показан диалог Поиска или Замены. Но тогда NoSelEOL не будет работать и в том случае, когда мы работаем в окне редактирования, а неактивный диалог поиска/замены просто висит на экране.
(добавлено позднее) Появилась ещё идея использовать GetFocus() - если во время изменения выделения фокус ввода не на окне редактирования, значит, выделение меняется извне (например, из диалогов поиска/замены).
Posted: Thu Sep 30, 2010 9:47 am
by FeyFre
DV
Ну как минимум на время обработки Акелом сообщений AKD_TEXTFIND, AKD_TEXTREPLACE нужно приостановится - программные(со скриптов и с плагинов) поиск/замена хотя бы будут работать.
Насчет замены через GUI - не повезло. Akel выполняет замену внутренними функция напрямую(Edit.cpp ReplaceText) минуя эти сообщения. И других специфических, на которые можно было бы среагировать, не использует.
Сообщение AEM_TEXTFIND тоже активно пользуется в поиске(и в пошаговой замене), можно вокруг него поплясать.
Ещё один способ привязаться в голову пришел: WM_SETREDRAW FALSE используется только автоматическими алгоритмами, которые манипулируют текстом. Поиск/замена тоже сюда входят. Всё что делается пользователем вручную(мышь, клавиатура) WM_SETREDRAW не использует. Можно попытаться отключатся между парой WM_SETREDRAW FALSE - WM_SETREDRAW TRUE.
Posted: Sun Oct 03, 2010 3:59 pm
by DV
Обновление плагина: Очередная медитация на тему NoSelEOL. Добавлено множество сообщений, которые NoSelEOL игнорирует (например, AKD_TEXTFIND и др., EM_FINDTEXT и др.).
Ахтунг! Это может повлиять на работу макросов, "обходящих" NoSelEOL.
Posted: Mon Oct 04, 2010 10:13 am
by VladSh
DV
Возможно ли что-то сделать с
этой багофичей?
Posted: Wed Apr 06, 2011 11:43 am
by VladSh
Up!
Сделайте пожалуйста что-нибудь хотя бы с багом из первого пункта (см. ссылку в пред. сообщении)!
При отключенной функции NoSelEOL выделение текущей строки работает правильно.
Posted: Tue Jul 12, 2011 5:50 pm
by Instructor
DV
Сегодня пришло письмо, в котором человек указывал на то, что не работает Ctrl+Shift+Del - выделяется только строка.
Если назначение SmartSel::NoSelEOL только в том, чтобы не выделять строку при тройном клике, а также выделении строки нажатием на границу слева, то почему не использовать AEN_SELCHANGED и AESCT_MOUSETRIPLECLK, AESCT_MOUSELEFTMARGIN?
Posted: Tue Jul 12, 2011 6:18 pm
by DV
Instructor wrote:не работает Ctrl+Shift+Del - выделяется только строка.
А что он должен делать? Я вообще не вижу никакой реакции после нажатия...
Изначальное назначение NoSelEOL было в том, чтобы при выделении всей строки (Shift+End или клик левее начала строки) в RichEdit не выделялся завершающий символ переноса строки.
Однако в AkelEdit это уже не столь актуально, поскольку здесь Shift+End не выделяет символ переноса строки, в отличие от RichEdit. Более того, если в AkelEdit тянуть мышку с зажатой левой кнопкой (режим выделения) за конец строки, символ переноса строки при этом так же не выделяется - в отличие от RichEdit. А именно с подобным поведением RichEdit боролся NoSelEOL.
Собственно говоря, не знаю, чего народ ожидает от NoSelEOL сейчас, поскольку поведение AkelEdit меня вполне устраивает
Instructor wrote:почему не использовать AEN_SELCHANGED и AESCT_MOUSETRIPLECLK, AESCT_MOUSELEFTMARGIN?
Наверное, потому, что, когда разрабатывался NoSelEOL, таких вещей ещё не было

Posted: Tue Jul 12, 2011 6:35 pm
by Instructor
DV
Опечатался - имелось ввиду Ctrl+Shift+End.
Posted: Thu Jul 14, 2011 7:23 am
by VladSh
DV wrote:Собственно говоря, не знаю, чего народ ожидает от NoSelEOL сейчас, поскольку поведение AkelEdit меня вполне устраивает

Народ ожидает, чтобы при выделении строки тройным кликом по ней, а также с помощью нажатия на область слева от текста курсор бы не мигал на следующей строке

Если это было бы реализовано, то дальше надо посмотреть (как скрипты и плагины работают с выделением), возможно этот функционал сейчас и был бы избыточным.
Posted: Sat Jul 16, 2011 8:11 am
by DV
VladSh wrote:при выделении строки тройным кликом по ней, а также с помощью нажатия на область слева от текста курсор бы не мигал на следующей строке

Постараюсь глянуть. Исходя из предыдущего комментария от Instructor, наверное, проще будет сначала сделать новую ф-цию NoSelEOL2, перехватывающую лишь указанные выше сообщения и флаги, - с тем, чтобы впоследствии вообще убрать старую реализацию NoSelEOL.
Posted: Tue Jul 19, 2011 8:23 am
by VladSh
DV wrote:Исходя из предыдущего комментария от Instructor, наверное, проще будет сначала сделать новую ф-цию NoSelEOL2
Я думаю, раз сам AkelEdit поддерживает выделение с захватом и без захвата символа переноса строки (при выделении Shift+End и мышью), то по хорошему было бы чтобы и выделение предложения без захвата символа переноса строки поддерживалось контролом или прогой, а то получается, что часть делает контрол, а часть плагин...
Но если такое не будет реализовано в проге, то, естественно, обновлённый NoSelEOL очень нужен!
Добавлено: да, и при новом NoSelEOL надо будет вручную обрабатывать ситуации захвата переноса строки - всегда будет возможно 2 варианта, а при NoSelEOL всегда был 1 - без захвата. Поэтому надо будет переписывать скрипты, т.к. многие, в случае захвата перевода строки, могут начать работать некорректно. Всё-таки проще, когда обрабатываешь 1 вариант.
Posted: Tue Jul 19, 2011 8:44 am
by FeyFre
VladSh
Не только скрипты могут пострадать, плагины тоже. Помнится когда-то уже решали проблему захвата/незахвата переноса при поиске. Это я так, к слову.
Posted: Tue Jul 19, 2011 5:02 pm
by Instructor
В 4.6.4 добавлен недокументированный ручной параметр для "MouseOptions" со значением 16

Posted: Tue Jul 19, 2011 5:07 pm
by VladSh
Instructor wrote:В 4.6.4 добавлен
недокументированный ручной параметр для "MouseOptions" со значением 16

Здорово! Только как теперь скрипты писать, с учётом того, что это у всех будет включено?

Posted: Tue Jul 19, 2011 6:23 pm
by Instructor
Может как-нибудь задокументирую к релизу.
VladSh wrote:Только как теперь скрипты писать, с учётом того, что это у всех будет включено?

Для скриптов и плагинов наличие/отсутствие данного параметра никакой роли играть не будет.