Page 2 of 5
Posted: Mon Apr 21, 2008 2:13 pm
by DV
v.1.2 (April 2008)
+ new function: altSmartEnd
Posted: Wed Apr 23, 2008 11:35 am
by VladSh
Сила! Теперь даже нечего попросить

Posted: Fri Jul 04, 2008 12:32 pm
by DV
v.1.3
Changed: AkelPad 3.6.0 required.
Posted: Wed Aug 13, 2008 7:26 am
by DV
v.1.4
* compatibility with column selection in AkelPad 4.0.1+
Posted: Wed Aug 13, 2008 8:45 am
by VladSh
DV
Емеет ли смысл теперь NoSelEOL::Main, ведь выделение с новым контролом и так не захватывает символ перевода строки/конца файла?
Posted: Thu Aug 14, 2008 10:51 am
by DV
захватывает после дбл-кликов, выделяющих всю строку, а также по клику перед началом строки.
Неприятный баг
Posted: Mon Nov 17, 2008 9:26 am
by VladSh
Если предложение переходит на другую строку, то если установить курсор в строку, где находится начало предложения, при нажатии клавиши End курсор переходит не на последний символ этой же строки, а на первый символ следующей строки.

А изредка бывает так, что курсор переходит на просто на следующую строку, а на след. строку в самый конец предложения!
Posted: Thu Nov 20, 2008 8:33 am
by DV
Instructor wrote:VladSh
Такого не наблюдаю. Может дело в NoSelEOL::SmartEnd?
Да, в нём. Но я не вижу решения, поскольку:
1) так ведёт себя EM_EXSETSEL. Хотя это можно было бы обойти, оставив обработку по умолчанию для позиции в конце строки, если бы не
2) для позиции каретки в конце строки, чьё продолжение перенесено на другую строку, EM_EXLINEFROMCHAR возвращает индекс не той строки, на которой находится каретка, а индекс следующей строки. Из-за этого невозможно понять, находится ли каретка в конце первой части перенесенной строки, или же в начале второй части перенесенной строки.
Posted: Thu Nov 20, 2008 9:19 am
by VladSh
DV
Интересно, по какому алгоритму работает подсветка текущей строки... Она работает правильно, т.е. выход по идее есть. Но это только
Instructor может подсказать

Posted: Mon Aug 31, 2009 9:22 am
by VladSh
Видимо всё же в алгоритмах ошибки.
Если отключить
AltSmartEnd (
SmartEnd включён) и установить курсор в предложение, оканчивающееся
на этой же строке, то курсор бегает правильно!
Если при этих же условиях установить курсор в предложение, оканчивающееся
на следующей строке, то при первом нажатии End курсор устанавливается в конец этой же строки (
это правильно! т.е. сделать, чтобы работало правильно, возможно!), при втором нажатии от соскакивает в начало следующей строки!
Это ошибка, но можно было бы реализовать довольно-таки бомбезную штуку - при втором нажатии End устанавливать курсор в конец всего предложения

Даже если оно занимает несколько строк! Мечта о такой функции есть уже давно
Если же включить
AltSmartEnd, установить курсор в предложение, оканчивающееся
на следующей строке, то при нажатии End курсор сразу соскакивает в начало следующей строки!
Если подправите, буду очень признателен, т.к. мучаюсь с соскоком курсора, вот уже год, постоянно...

Posted: Tue Sep 01, 2009 7:43 am
by DV
Вышеописанное - это частные (локальные) проявления упомянутого поведения EM_EXLINEFROMCHAR:
для позиции каретки в конце строки, чьё продолжение перенесено на другую строку, EM_EXLINEFROMCHAR возвращает индекс не той строки, на которой находится каретка, а индекс следующей строки. Из-за этого невозможно понять, находится ли каретка в конце первой части перенесенной строки, или же в начале второй части перенесенной строки.
Установка позиции курсора при нажатии на клавишу End описывается функцией
OnEditEndKeyDown в файле "NoSelEOL.c". Можете попробовать поиграться с кодом выше строки
Code: Select all
SendMessage( hEdit, EM_EXSETSEL, 0, (LPARAM) &cr );
Для сборки dll можно использовать Dev-C++ или Visual C++ Express.
Posted: Tue Sep 01, 2009 8:52 am
by VladSh
Не, я не настолько крут)) таким никогда не занимался
А можно ли как-то анализировать, что если не конец предложения, а соскок курсора вниз (номера строк до нажатия End и после - не совпадают), то насильно возвращать курсор на одну позицию назад?
Posted: Tue Sep 01, 2009 4:14 pm
by DV
VladSh wrote:(номера строк до нажатия End и после - не совпадают), то насильно возвращать курсор на одну позицию назад?
Так должно получиться. Но каретка будет позиционирована не в конце строки, а за один пробел или таб перед концом строки. И придётся ещё колбасить дополнительное условие для такой позиции каретки: "если мы за один пробел или таб до конца текущей строки и если следующая позиция перенесет нас на следующую строку, то по нажатию Енд прыгнуть на последний непробельный символ, иначе прыгнуть в конец строки".
Posted: Tue Sep 01, 2009 5:41 pm
by VladSh
Пожалуйста! Я Вас умоляю!!!
Upd: Может это из-за наложения алгоритмов происходит? Может удалить вообще
SmartEnd (всё равно никто им не пользуется), а оставить только
AltSmartEnd?
Posted: Wed Sep 02, 2009 9:39 am
by DV
М-да, ну что я могу сказать... Как "костыли" ни приделывай - всё равно криво получается. Пусть у нас есть перенесённая (из-за WordWrap) строка вида
abc__
defghi
где символы подчёркивания означают пробелы.
Ситуации вида
a|bc__
defghi
или
abc_|_
defghi
обрабатываются корректно - каретка устанавливается в конец первой части строки:
abc__|
defghi
И вот в последней ситуации начинается маразм: если трактовать позицию кусора в конце первой части строки как относящуюся к первой части строки, то случай
abc__
|defghi
считается идентичным приведенному выше - то есть курсор в начале второй части строки по нажатию End прыгнет в конец предыдущей части строки. То есть сюда:
abc|__
defghi
Если же считать, что
abc__|
defghi
относится к началу второй части строки, тогда по нажатию End курсор прыгнет в конец второй части строки:
abc__
defghi|
Короче, в обеих ситуациях поведение неправильное - и я не могу сказать, какое лучше.