Особенности ECTL_SELECT
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Особенности ECTL_SELECT
Случайно обнаружил, что в зависимости от типа блока нужно указывать разную величину BlockStartPos: для BTYPE_STREAM - строковую, а для BTYPE_COLUMN - экранную (то-есть, с учётом экранной длины табов). При этом, в случае BTYPE_COLUMN возможно программно задать выделение, которое невозможно сделать вручную (т.е., начинающееся внутри экранных позиций, занимаемых табом).
Очень желательно это задокументировать.
Очень желательно это задокументировать.
- zg
- zero-gravity
- Posts: 6036
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Особенности ECTL_SELECT
сделано вручную:Shmuel wrote:При этом, в случае BTYPE_COLUMN возможно программно задать выделение, которое невозможно сделать вручную (т.е., начинающееся внутри экранных позиций, занимаемых табом).
- zg
- zero-gravity
- Posts: 6036
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Особенности ECTL_SELECT
постоянные блоки. выделено по простому тексту, потом текст удалён и введены табы.Shmuel wrote:А поделиться рецептом?
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Особенности ECTL_SELECT
Это, конечно, любопытно, но не в этом суть. Считаю, что следует задокументировать разный смысл BlockStartPos и BlockWidth для разных типов блоков, так как это далеко не для всех очевидно.zg wrote:постоянные блоки. выделено по простому тексту, потом текст удалён и введены табы.Shmuel wrote:А поделиться рецептом?
- zg
- zero-gravity
- Posts: 6036
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Особенности ECTL_SELECT
он должен быть одинаковым.Shmuel wrote:Это, конечно, любопытно, но не в этом суть. Считаю, что следует задокументировать разный смысл BlockStartPos и BlockWidth для разных типов блоков, так как это далеко не для всех очевидно.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Особенности ECTL_SELECT
Надо иметь в виду, что это изменение ломает некоторые редакторные плагины, в том числе ANSI-плагины.zg wrote:2524.
Например, в S&R после замены в вертикальном блоке выделение устанавливается неправильно, если блоку предшествуют табы. Возможно, будут замечены и более серьёзные поломки.
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Особенности ECTL_SELECT
zgzg wrote:2524.
1. Может, лучше откатить? Прежнее поведение было ещё с 1-го Фара, и вроде никто не жаловался. И есть своя логика в том, что начало и ширина вертикального блока задаются в экранных координатах: вертикальный блок, в отличие от поточного, он как бы "сам по себе" (привязан скорее к экрану, чем к тексту).
2. Если не откатываем: данное изменение сломало ECTL_GETSTRING по части SelEnd. Пример: в редакторе 2 одинаковых строки "-\t". Выделяем их вертикальным блоком. Для 1-й SelEnd=2 (правильно), для 2-й строки почему-то SelEnd=1.
- zg
- zero-gravity
- Posts: 6036
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Особенности ECTL_SELECT
если не использовать табы, то ничего не изменилось. если использовать, то большой разницы как бы и нет. сейчас на мой взгляд логичней некоторые вещи. плюс баги некоторые ушли (при определённых условиях alt-up не работал например). вообще вертикальные блоки и табы порождают неоднозначность в любом случае. если вопрос навеян анси плагинами — врапер я поправлю, как будет время.Shmuel wrote:1. Может, лучше откатить? Прежнее поведение было ещё с 1-го Фара, и вроде никто не жаловался. И есть своя логика в том, что начало и ширина вертикального блока задаются в экранных координатах: вертикальный блок, в отличие от поточного, он как бы "сам по себе" (привязан скорее к экрану, чем к тексту).zg wrote:2524.
код:2. Если не откатываем: данное изменение сломало ECTL_GETSTRING по части SelEnd. Пример: в редакторе 2 одинаковых строки "-\t". Выделяем их вертикальным блоком. Для 1-й SelEnd=2 (правильно), для 2-й строки почему-то SelEnd=1.
Code: Select all
local line=editor.GetString(-1,-1)
far.Message("start: "..line.SelStart..", end: "..line.SelEnd, nil, "OK")
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Особенности ECTL_SELECT
Да, немного ошибся. Мой опыт был такой (после GetString следовал SetString):
И вот здесь - неверный результат (для второй строки SelEnd=1). Это же видно при замене в данном вертикальном блоке: как в S&R, так и в LF Search (заменять "." на "A" с регулярными выражениями).
Code: Select all
for i=0,1 do
local line=editor.GetString(-1,i)
far.Message("start: "..line.SelStart..", end: "..line.SelEnd, nil, "OK")
editor.SetString(-1,i,"abc")
end
- zg
- zero-gravity
- Posts: 6036
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Особенности ECTL_SELECT
он верный. поменяй только первую строку, посмотри что с блоком.Shmuel wrote:И вот здесь - неверный результат (для второй строки SelEnd=1).
-
- Posts: 6840
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Особенности ECTL_SELECT
А разве вертикальный блок (который может иметь высоту в сотни строк) должен менять свои параметры после замены в одной какой-то строке? Раньше, вроде, такого не было.
Да, и по существу возражения: визуально после первой замены ширина блока становится равной 2 экранным позициям.
Что же получается: в первой строке ширина вертикального блока осталась 2, а во второй стала 1?
Это сильно новые правила игры.
Да, и по существу возражения: визуально после первой замены ширина блока становится равной 2 экранным позициям.
Что же получается: в первой строке ширина вертикального блока осталась 2, а во второй стала 1?
Это сильно новые правила игры.
Re: Особенности ECTL_SELECT
вертикальные блоки в символах?
до первого апреля почти месяц...
может какие-то баги и ушли, а сколько появилось новых?
в тексте ниже, начинаем от начала строки: Right Alt-Right Alt-Right Alt-Down Alt-Left
кому-то нужно такое поведение?
до первого апреля почти месяц...
может какие-то баги и ушли, а сколько появилось новых?
в тексте ниже, начинаем от начала строки: Right Alt-Right Alt-Right Alt-Down Alt-Left
кому-то нужно такое поведение?
Code: Select all
1<tab><tab>
abcdefghijklmnopqrst
- zg
- zero-gravity
- Posts: 6036
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Особенности ECTL_SELECT
раньше была привязка к экранной позицией. сейчас к символам первой строки. ладно, я откачу. но всех «несогласных» буду посылать к тебе.Shmuel wrote:А разве вертикальный блок (который может иметь высоту в сотни строк) должен менять свои параметры после замены в одной какой-то строке? Раньше, вроде, такого не было.
1 символ, да. в чём проблема?Да, и по существу возражения: визуально после первой замены ширина блока становится равной 2 экранным позициям.
Что же получается: в первой строке ширина вертикального блока осталась 2, а во второй стала 1?
Это сильно новые правила игры.