View Issue Details

IDProjectCategoryView StatusLast Update
0003838PluginsLuaMacro / Macro Browserpublic2021-01-16 16:25
Reporterdm.jurko Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Product Version3.0 
Summary0003838: Путаница с табуляциями в номере позиции в строке для выделения Editor.Sel между Pos и RealPos
DescriptionEditor.Sel(0, 1) -- выдаёт CurPos этого положения.
Editor.Sel(2, 1, p) -- предполагает RealPos, то есть с учётом табуляций левее.
Editor.Pos(1, 2, p) -- предполагает RealPos.
Видимо, Editor.Sel(0, 1) должен возвращать RealPos начала выделения.
Tagsapi, editor, LuaFAR

Activities

JohnDoe

2021-01-16 10:37

updater   bugnote:0016992

> Editor.Sel(2, 1, p) -- предполагает RealPos, то есть с учётом табуляций левее.

Это что-то новое. Сигнатура функции не предполагает третьего аргумента

V=Editor.Sel(Action[,Opt])

JohnDoe

2021-01-16 10:40

updater   bugnote:0016993

И сформулируйте ваши предложения по этому поводу.
Менять существующее поведение не разумно.
1) Но можно его хотя бы документировать
2) И если какая-то функциональность осталась непокрыта, можно обсудить её добавление (отдельными командами/параметрами)

dm.jurko

2021-01-16 12:30

reporter   bugnote:0016994

Пожалуйста, впредь без сарказма. Мы ведь незнакомы? Я никогда не стану отвечать вам в вашем тоне. В описках нет ничего нового. Вы наверняка описываетесь. Мне сложнее чем вам, я новичок. Спасибо.

Да, я очевидно описался. Что показывает как существующие примитивы для макро провоцируют описки: безлики, усложняют чтение кода. Можно не менять .Sel, а ввести непротиворечивый и очевидный набор функций для работы с выделением. Как-то: .Sel1(line, realpos), .Sel2(line, realpos), сейчас приходится переходить в эти точки c RealPos и устанавливать первую и вторую точки выделения. Например, восстановить выделение по сохранённым координатам трудно. Именно первую и вторую, а не начало и конец, потому что потом они будут в отсортированном порядке — первая выше, вторая ниже. Вторая точка та, что завершает выделение. Заодно .Sel1 и .Sel2 могли бы возвращать пару координат с RealPos, в том числе, с пустым списком параметров.

Можно костыль: преобразование Pos в RealPos по номеру строки. Разумеется, в документации следует точно различать Pos и RealPos, если есть желание сделать работоспособную систему и продукт. А лучше — всё это вместе.

JohnDoe

2021-01-16 13:10

updater   bugnote:0016996

Вы сейчас говорите о макроапи - наследии старого макроязыка, существовавшего до луа.
Текущий его статус: заморожено.
Баги или документацию надо конечно править.

dm.jurko

2021-01-16 15:50

reporter   bugnote:0016998

Last edited: 2021-01-16 16:04

View 2 revisions

Спасибо за ответ. Мне жаль, что я сделал вам замечание. Это из-за бессилия.

Можно поправить немногое, что действует в API. Сам могу взяться, если мне выделят кусок. Но не хочу мешаться коллегам, своевольничать.

Я пишу макро. Многое не работает, но, оказывается, работающего достаточно для значительного облегчения. Однако косяки сильно тормозят доводку. Представьте: кто-то отладил макро в тексте без табуляций или не испытал, что будет с Редактором в первой строке (самой важной часто).

Даже одна новая функция вроде realpos = Editor.LineIdx(line, pos) помогла бы. Но ещё лучше четыре или любая пара (наименьшее — вторая пара):

1. realpos = Editor.IdxPos(line, pos) -- nil (или 0, если не Lua), если координата неправильная, line = 0 для текущей. Если параметры nil или 0, или пусты, возвращает Editor.RealPos.
Правда, можно сразу сделать функциональнее: возвращать отрицательные позиции после конца файла или строки, обычно брать их по модулю. То есть возвращаемому значению при pos за концом строки (len) менять знак. То же для номера строки более Lines.
2. pos = Editor.PosIdx(line, realpos) -- то же, но pos и realpos меняются. Вообще, realpos странный термин, лучше Idx -- индекс в строке. в отличие от позиции в Редакторе.

3. (line, realpos) = Editor.Sel1(line, realpos) -- (nil, nil), если координата неправильная или (0, 0). В параметрах 0 для номера текущей строки или realpos. Если параметры nil или пусты, возвращает первую точку выделения.
4. (line, realpos) = Editor.Sel2(line, realpos) -- то же, но для второй координаты выделения.

Если вам виден смысл, могу обсудить на форуме. Вдруг люди откликнутся, предложат лучшее или более простое. Если смысла не видите, пожалуйста, тоже напишите.

JohnDoe

2021-01-16 16:25

updater   bugnote:0017000

> Если вам виден смысл, могу обсудить на форуме.

Суть проблемы понятна (хотя в ваши предложения пока не вникал).
В любом случае, решить проблему реально наличными средствами, а именно написать недостающие вам функции на луа.
На форуме поделиться тоже полезно. Проблема определённо недооценена, в большинстве случаев никто не задумывается что будет если в тексте попадутся табуляции.

Issue History

Date Modified Username Field Change
2021-01-15 13:02 dm.jurko New Issue
2021-01-15 13:02 dm.jurko Tag Attached: api
2021-01-15 13:02 dm.jurko Tag Attached: editor
2021-01-15 13:02 dm.jurko Tag Attached: LuaFAR
2021-01-16 10:37 JohnDoe Note Added: 0016992
2021-01-16 10:40 JohnDoe Note Added: 0016993
2021-01-16 12:30 dm.jurko Note Added: 0016994
2021-01-16 13:10 JohnDoe Note Added: 0016996
2021-01-16 15:50 dm.jurko Note Added: 0016998
2021-01-16 16:04 dm.jurko Note Edited: 0016998 View Revisions
2021-01-16 16:25 JohnDoe Note Added: 0017000