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

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

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

Post by Shmuel » Mon 05 Mar, 2012 22:46

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

Очень желательно это задокументировать.

User avatar
zg
zero-gravity
Posts: 5242
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Tue 06 Mar, 2012 00:35

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

Shmuel
Posts: 5101
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Tue 06 Mar, 2012 00:44

А поделиться рецептом?

User avatar
zg
zero-gravity
Posts: 5242
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Tue 06 Mar, 2012 00:45

Shmuel wrote:А поделиться рецептом?
постоянные блоки. выделено по простому тексту, потом текст удалён и введены табы.

Shmuel
Posts: 5101
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Tue 06 Mar, 2012 00:51

zg wrote:
Shmuel wrote:А поделиться рецептом?
постоянные блоки. выделено по простому тексту, потом текст удалён и введены табы.
Это, конечно, любопытно, но не в этом суть. Считаю, что следует задокументировать разный смысл BlockStartPos и BlockWidth для разных типов блоков, так как это далеко не для всех очевидно.

User avatar
zg
zero-gravity
Posts: 5242
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Tue 06 Mar, 2012 00:59

Shmuel wrote:Это, конечно, любопытно, но не в этом суть. Считаю, что следует задокументировать разный смысл BlockStartPos и BlockWidth для разных типов блоков, так как это далеко не для всех очевидно.
он должен быть одинаковым.

User avatar
zg
zero-gravity
Posts: 5242
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Tue 06 Mar, 2012 03:50

2524.

Shmuel
Posts: 5101
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Tue 06 Mar, 2012 08:50

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

Например, в S&R после замены в вертикальном блоке выделение устанавливается неправильно, если блоку предшествуют табы. Возможно, будут замечены и более серьёзные поломки.

Shmuel
Posts: 5101
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Tue 06 Mar, 2012 13:55

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

2. Если не откатываем: данное изменение сломало ECTL_GETSTRING по части SelEnd. Пример: в редакторе 2 одинаковых строки "-\t". Выделяем их вертикальным блоком. Для 1-й SelEnd=2 (правильно), для 2-й строки почему-то SelEnd=1.

User avatar
zg
zero-gravity
Posts: 5242
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Tue 06 Mar, 2012 14:44

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: 5101
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Tue 06 Mar, 2012 15:00

Да, немного ошибся. Мой опыт был такой (после 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: 5242
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Tue 06 Mar, 2012 15:29

Shmuel wrote:И вот здесь - неверный результат (для второй строки SelEnd=1).
он верный. поменяй только первую строку, посмотри что с блоком.

Shmuel
Posts: 5101
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Tue 06 Mar, 2012 15:34

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

Да, и по существу возражения: визуально после первой замены ширина блока становится равной 2 экранным позициям.
Что же получается: в первой строке ширина вертикального блока осталась 2, а во второй стала 1?
Это сильно новые правила игры.

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Tue 06 Mar, 2012 16:16

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

Code: Select all

1<tab><tab>
abcdefghijklmnopqrst

User avatar
zg
zero-gravity
Posts: 5242
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Tue 06 Mar, 2012 16:27

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

Shmuel
Posts: 5101
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Tue 06 Mar, 2012 16:51

zg wrote:раньше была привязка к экранной позицией. сейчас к символам первой строки. ладно, я откачу. но всех «несогласных» буду посылать к тебе.
1. Я не знал, что привязка делалась именно по первой строке.

2. Насчёт отката. Когда открывал данную тему, мне тоже казалось, что привязка к экранным позициям - это, скорее, баг. Поразмыслив дополнительно, понял, что нет.
Мне трудно сделать сейчас вывод, какой вариант лучше. Прежний - привычный и обкатанный. Может быть, после месяца игры по новым правилам, я бы признал, что они лучше прежних, возможно. А насчёт "посылать несогласных ко мне", так откуда они, несогласные-то возьмутся, если годами все молчали.
Кстати, я только предложил откатить, новых правил я не боюсь, ко всему можно приспособиться.

Post Reply

Return to “Development”