View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003838 | Plugins | LuaMacro / Macro Browser | public | 2021-01-15 13:02 | 2021-01-16 16:25 |
Reporter | dm.jurko | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | new | Resolution | open | ||
Product Version | 3.0 | ||||
Summary | 0003838: Путаница с табуляциями в номере позиции в строке для выделения Editor.Sel между Pos и RealPos | ||||
Description | Editor.Sel(0, 1) -- выдаёт CurPos этого положения. Editor.Sel(2, 1, p) -- предполагает RealPos, то есть с учётом табуляций левее. Editor.Pos(1, 2, p) -- предполагает RealPos. Видимо, Editor.Sel(0, 1) должен возвращать RealPos начала выделения. | ||||
Tags | api, editor, LuaFAR | ||||
|
> Editor.Sel(2, 1, p) -- предполагает RealPos, то есть с учётом табуляций левее. Это что-то новое. Сигнатура функции не предполагает третьего аргумента V=Editor.Sel(Action[,Opt]) |
|
И сформулируйте ваши предложения по этому поводу. Менять существующее поведение не разумно. 1) Но можно его хотя бы документировать 2) И если какая-то функциональность осталась непокрыта, можно обсудить её добавление (отдельными командами/параметрами) |
|
Пожалуйста, впредь без сарказма. Мы ведь незнакомы? Я никогда не стану отвечать вам в вашем тоне. В описках нет ничего нового. Вы наверняка описываетесь. Мне сложнее чем вам, я новичок. Спасибо. Да, я очевидно описался. Что показывает как существующие примитивы для макро провоцируют описки: безлики, усложняют чтение кода. Можно не менять .Sel, а ввести непротиворечивый и очевидный набор функций для работы с выделением. Как-то: .Sel1(line, realpos), .Sel2(line, realpos), сейчас приходится переходить в эти точки c RealPos и устанавливать первую и вторую точки выделения. Например, восстановить выделение по сохранённым координатам трудно. Именно первую и вторую, а не начало и конец, потому что потом они будут в отсортированном порядке — первая выше, вторая ниже. Вторая точка та, что завершает выделение. Заодно .Sel1 и .Sel2 могли бы возвращать пару координат с RealPos, в том числе, с пустым списком параметров. Можно костыль: преобразование Pos в RealPos по номеру строки. Разумеется, в документации следует точно различать Pos и RealPos, если есть желание сделать работоспособную систему и продукт. А лучше — всё это вместе. |
|
Вы сейчас говорите о макроапи - наследии старого макроязыка, существовавшего до луа. Текущий его статус: заморожено. Баги или документацию надо конечно править. |
|
Спасибо за ответ. Мне жаль, что я сделал вам замечание. Это из-за бессилия. Можно поправить немногое, что действует в 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) -- то же, но для второй координаты выделения. Если вам виден смысл, могу обсудить на форуме. Вдруг люди откликнутся, предложат лучшее или более простое. Если смысла не видите, пожалуйста, тоже напишите. |
|
> Если вам виден смысл, могу обсудить на форуме. Суть проблемы понятна (хотя в ваши предложения пока не вникал). В любом случае, решить проблему реально наличными средствами, а именно написать недостающие вам функции на луа. На форуме поделиться тоже полезно. Проблема определённо недооценена, в большинстве случаев никто не задумывается что будет если в тексте попадутся табуляции. |
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 |