Page 16 of 16

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Mon 21 Aug, 2017 16:55
by Aidar

Latest post of the previous page:

John Doe wrote:
Mon 21 Aug, 2017 15:30
Ещё RH Scripts приводит к багу, обсуждаемому в теме файл открывается со сдвигом влево
1. Это, возможно, lfa_config.
2. У меня не воспроизвелось на Far30b5011.x86.20170821.
Если был сдвиг на одну позицию, ошибка может быть из-за изменений в отсчёте позиции от 0/1.
Такое происходило во время написания скриптов.

Пример: с DM_LISTSETCURPOS может быть проблема в моих пакетах, но я пока не проверял.

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 07:53
by John Doe
Нет, сдвиг не на 1 позицию, левая граница экрана перемещается в позицию курсора, где бы он ни находился.

Я переформулировал по-своему последовательность действий для воспроизведения ошибки, возможно и у вас повторится.
Если нет, то посоветуйте как изолировать источник ошибки (отключить lfa_config целиком, или отдельные скрипты).

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 15:50
by Aidar
John Doe wrote:
Tue 22 Aug, 2017 07:53
отключить lfa_config целиком
Перенести папку Profile\work\scripts\lfa_config в другое место.
John Doe wrote:
Tue 22 Aug, 2017 07:53
отдельные скрипты
В конце файла Profile\work\scripts\lfa_config\_usermenu.lua закомментировать строку с MakeResident.
Это отключит обработку событий.
Аналогично, можно отключить такие строки в конце файла Profile\work\scripts\Rh_Scripts\_usermenu.lua
Если установлен fl_scripts, тоже можно отключить в конце файла Profile\work\scripts\fl_scripts\_usermenu.lua

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 16:09
by Aidar
Ошибку воспроизвёл.
Место: Рисование правой границы в редакторе
(файл Profile\work\scripts\lfa_config\editor\vision.lua,
функция lfa_config.drawRightBorder) .
Источник ошибки:

Code: Select all

einfo = einfo or editor.GetInfo()
...
editor.SetPosition(nil, einfo)
Какая-то проблема с LeftPos.

Добавил
einfo.LeftPos = 1
перед
editor.SetPosition(nil, einfo)
Сдвига нет.
Попробовал
einfo.LeftPos = einfo.LeftPos
Сдвиг есть.
Возможно, при событии F.EE_REDRAW в поле GetInfo.LeftPos нет значения или оно некорректное.

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 17:26
by John Doe
А для чего вообще требуется позиционировать курсор при рисовании границы?

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 17:53
by Aidar
editor.GetString вызывает смещение позиции (а нужно пройтись по всем видимым строкам файла).

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 18:02
by Aidar
Подправленная версия lfa_config.

P.S. Перевыложил.

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 18:14
by John Doe
Aidar wrote:
Tue 22 Aug, 2017 17:53
editor.GetString вызывает смещение позиции
Вроде бы не должно, ведь используется режим 3

Code: Select all

3  = returns: StringText,StringEOL;  changes current position: no

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 19:31
by John Doe
Aidar wrote:
Tue 22 Aug, 2017 18:02
Подправленная версия lfa_config.
Исправление некорректно и привносит другую проблему.
Правильным будет проверять что EditorID==ei.EditorID, и если нет, то не выполнять никаких действий.

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 19:44
by Aidar
John Doe wrote:
Tue 22 Aug, 2017 19:31
Правильным будет
Перевыложил.

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 19:52
by John Doe
Aidar wrote:
Tue 22 Aug, 2017 19:44
Перевыложил.
Тот же самый архив.
И я вот закомментировал вызов editor.SetPosition, вроде бы ничего не изменилось, всё работает. Может он лишний?

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 19:55
by Aidar
John Doe wrote:
Tue 22 Aug, 2017 19:52
Тот же самый архив.
Странно. Ещё раз перевыложил, скачал и проверил: должен быть новый.
John Doe wrote:
Tue 22 Aug, 2017 19:52
Может он лишний?
Может быть: перевёл GetString на 3, а лишнее убрать забыл. Надо будет протестировать на разных файлах.

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Tue 22 Aug, 2017 21:28
by John Doe
John Doe wrote:
Tue 22 Aug, 2017 19:31
Правильным будет проверять что EditorID==ei.EditorID, и если нет, то не выполнять никаких действий.
А ещё правильнее будет в resident.lua вместо

Code: Select all

local ei = editor.GetInfo()
использовать

Code: Select all

local ei = editor.GetInfo(id)
После этого оба следующих условия можно убрать.

Update
А нет, этого недостаточно, надо ещё повсюду в функции редактора передавать этот id вместо nil

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Fri 18 May, 2018 02:36
by buniak_a_h
Попробовал Вашу утилиту _isEqual на двух таблицах, у который вложенная таблица, содержащая owner. Ожидаемо получил stack overflow

[lf4ed] Rh_Scripts — пакет скриптов для LuaFAR for Editor

Posted: Fri 18 May, 2018 17:18
by Aidar
Функция isEqual из Utils\Utils.lua предназначена только для сравнения простых таблиц, в данном случае - для таблиц RectMenu. Поэтому там и нет лишней логики.
Можете сравнить copy и clone в context\utils\useTables.lua.