Особенности ECTL_SELECT

Разработка Far.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Особенности ECTL_SELECT

Post by Shmuel »

Случайно обнаружил, что в зависимости от типа блока нужно указывать разную величину BlockStartPos: для BTYPE_STREAM - строковую, а для BTYPE_COLUMN - экранную (то-есть, с учётом экранной длины табов). При этом, в случае BTYPE_COLUMN возможно программно задать выделение, которое невозможно сделать вручную (т.е., начинающееся внутри экранных позиций, занимаемых табом).

Очень желательно это задокументировать.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Особенности ECTL_SELECT

Post by zg »

Shmuel wrote:При этом, в случае BTYPE_COLUMN возможно программно задать выделение, которое невозможно сделать вручную (т.е., начинающееся внутри экранных позиций, занимаемых табом).
сделано вручную:
Image
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Особенности ECTL_SELECT

Post by Shmuel »

А поделиться рецептом?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Особенности ECTL_SELECT

Post by zg »

Shmuel wrote:А поделиться рецептом?
постоянные блоки. выделено по простому тексту, потом текст удалён и введены табы.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Особенности ECTL_SELECT

Post by Shmuel »

zg wrote:
Shmuel wrote:А поделиться рецептом?
постоянные блоки. выделено по простому тексту, потом текст удалён и введены табы.
Это, конечно, любопытно, но не в этом суть. Считаю, что следует задокументировать разный смысл BlockStartPos и BlockWidth для разных типов блоков, так как это далеко не для всех очевидно.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Особенности ECTL_SELECT

Post by zg »

Shmuel wrote:Это, конечно, любопытно, но не в этом суть. Считаю, что следует задокументировать разный смысл BlockStartPos и BlockWidth для разных типов блоков, так как это далеко не для всех очевидно.
он должен быть одинаковым.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Особенности ECTL_SELECT

Post by zg »

2524.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Особенности ECTL_SELECT

Post by Shmuel »

zg wrote:2524.
Надо иметь в виду, что это изменение ломает некоторые редакторные плагины, в том числе ANSI-плагины.

Например, в S&R после замены в вертикальном блоке выделение устанавливается неправильно, если блоку предшествуют табы. Возможно, будут замечены и более серьёзные поломки.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Особенности ECTL_SELECT

Post by Shmuel »

zg wrote:2524.
zg
1. Может, лучше откатить? Прежнее поведение было ещё с 1-го Фара, и вроде никто не жаловался. И есть своя логика в том, что начало и ширина вертикального блока задаются в экранных координатах: вертикальный блок, в отличие от поточного, он как бы "сам по себе" (привязан скорее к экрану, чем к тексту).

2. Если не откатываем: данное изменение сломало ECTL_GETSTRING по части SelEnd. Пример: в редакторе 2 одинаковых строки "-\t". Выделяем их вертикальным блоком. Для 1-й SelEnd=2 (правильно), для 2-й строки почему-то SelEnd=1.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Особенности ECTL_SELECT

Post by zg »

Shmuel wrote:
zg wrote:2524.
1. Может, лучше откатить? Прежнее поведение было ещё с 1-го Фара, и вроде никто не жаловался. И есть своя логика в том, что начало и ширина вертикального блока задаются в экранных координатах: вертикальный блок, в отличие от поточного, он как бы "сам по себе" (привязан скорее к экрану, чем к тексту).
если не использовать табы, то ничего не изменилось. если использовать, то большой разницы как бы и нет. сейчас на мой взгляд логичней некоторые вещи. плюс баги некоторые ушли (при определённых условиях alt-up не работал например). вообще вертикальные блоки и табы порождают неоднозначность в любом случае. если вопрос навеян анси плагинами — врапер я поправлю, как будет время.
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")
для обеих строк показывает 0 2.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Особенности ECTL_SELECT

Post by Shmuel »

Да, немного ошибся. Мой опыт был такой (после GetString следовал SetString):

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
И вот здесь - неверный результат (для второй строки SelEnd=1). Это же видно при замене в данном вертикальном блоке: как в S&R, так и в LF Search (заменять "." на "A" с регулярными выражениями).
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Особенности ECTL_SELECT

Post by zg »

Shmuel wrote:И вот здесь - неверный результат (для второй строки SelEnd=1).
он верный. поменяй только первую строку, посмотри что с блоком.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Особенности ECTL_SELECT

Post by Shmuel »

А разве вертикальный блок (который может иметь высоту в сотни строк) должен менять свои параметры после замены в одной какой-то строке? Раньше, вроде, такого не было.

Да, и по существу возражения: визуально после первой замены ширина блока становится равной 2 экранным позициям.
Что же получается: в первой строке ширина вертикального блока осталась 2, а во второй стала 1?
Это сильно новые правила игры.
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

Re: Особенности ECTL_SELECT

Post by 2useven10 »

вертикальные блоки в символах?
до первого апреля почти месяц...
может какие-то баги и ушли, а сколько появилось новых?
в тексте ниже, начинаем от начала строки: Right Alt-Right Alt-Right Alt-Down Alt-Left
кому-то нужно такое поведение?

Code: Select all

1<tab><tab>
abcdefghijklmnopqrst
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Особенности ECTL_SELECT

Post by zg »

Shmuel wrote:А разве вертикальный блок (который может иметь высоту в сотни строк) должен менять свои параметры после замены в одной какой-то строке? Раньше, вроде, такого не было.
раньше была привязка к экранной позицией. сейчас к символам первой строки. ладно, я откачу. но всех «несогласных» буду посылать к тебе.
Да, и по существу возражения: визуально после первой замены ширина блока становится равной 2 экранным позициям.
Что же получается: в первой строке ширина вертикального блока осталась 2, а во второй стала 1?
Это сильно новые правила игры.
1 символ, да. в чём проблема?
Post Reply

Return to “Development”