-- https://forum.farmanager.com/viewtopic.php?p=132337#p132337
local c0 = {
GetContentFields = function(ColNames)
for i,v in ipairs(ColNames) do
if v:lower()=="link" then return true end
end
end;
GetContentData = function(FilePath,ColNames)
local data = {}
for i,v in ipairs(ColNames) do
if v:lower()=="link" then
local attr = win.GetFileAttr(FilePath)
if attr and attr:find"e" then
data[i] = "→"..(far.GetReparsePointInfo(FilePath) or "(data not available)")
end
end
end
return next(data) and data
end
}
if not Far then
for k,v in pairs(c0) do export[k] = v; end
elseif ContentColumns then
ContentColumns(c0)
end
@lvm
Спасибо за исправление.
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 08 Aug, 2019 14:36
by HaRT
Dima777 wrote: ↑Tue 07 May, 2019 00:05
на папке с OneDrive падает
Исправляет ли свежий вариант макроса (из предыдущего сообщения) вашу ошибку?
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 08 Aug, 2019 14:39
by John Doe
Разумеется.
Хотя конкретно папки Onedrive у меня нет, чтобы удостовериться)
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Wed 04 Sep, 2019 22:15
by buniak_a_h
John Doe wrote: ↑Thu 03 Sep, 2015 21:21
Приложенный микро-плагин решает задачу.
Попробовал "прикрутить" к этому микро-плагину вычисление CRC (через вызов функции плагина Integrity Checker)
function export.GetContentFields(ColNames)
for j,v in ipairs(ColNames) do
if v:lower()=="link" or v:lower()=="crc" then return true end
end
end
function export.GetContentData(FilePath,ColNames)
local data = {}
for j,v in ipairs(ColNames) do
if v:lower()=="link" then
local attr = win.GetFileAttr(FilePath)
if attr and attr:find"e" then
data[j] = "→"..far.GetReparsePointInfo(FilePath)
end
elseif v:lower()=="crc" then
local attr = win.GetFileAttr(FilePath)
if attr and not attr:find"d" then
local crc ='CRC32CRC'
--local crc=Plugin.SyncCall("E186306E-3B0D-48C1-9668-ED7CF64C0E65", "gethash", 'CRC32', FilePath):upper() -- так вылет
--data[j] = Plugin.SyncCall("E186306E-3B0D-48C1-9668-ED7CF64C0E65", "gethash", 'CRC32', FilePath):upper()
data[j] = crc
end
end
end
return next(data) and data
end
Это я что-то неправильно сделал, или вызов функции плагина из другого плагина не предусмотрен? Или какая-то другая причина?
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 05 Sep, 2019 01:59
by Shmuel
buniak_a_h wrote: ↑Wed 04 Sep, 2019 22:15
Это я что-то неправильно сделал, или вызов функции плагина из другого плагина не предусмотрен? Или какая-то другая причина?
Фар при выводе меседж-бокса вызывает GetContentData повторно и происходит переполнение стека.
Ваша ошибка в том, что не проверяете значение возврата плагина.
Я сделал заплатку в "generic plugin", и таким образом все вновь собираемые LuaFAR-плагины будут от этого защищены.
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 05 Sep, 2019 04:51
by buniak_a_h
Shmuel wrote: ↑Thu 05 Sep, 2019 01:59
вновь собираемые LuaFAR-плагины будут от этого защищены
Вот за это спасибо. Хотя я почти ничего не понял.
1. "Меседж-бокс" я, вроде, не вывожу. Если имеется в виду сообщение об ошибке - то ошиба-то уже случилась? Или что-то другое?
2. Какое значение возврата плагина я не проверяю? «Plugin.SyncCall(<...> 'CRC32', FilePath)»? Добавил проверку на type(...) - не помогло.
--
Ну и главное. За приведённым выше мессадж-боксом я не увидел первичного. Вот он:
╔═══════════════════════════════════════════════════════════════ Error ════════════════════════════════════════════════════════════════╗
║ C:\Program Files\Far Manager\Plugins\c0link\c0link-x64.dll: ║
║ C:\Program Files\Far Manager\Plugins\c0link\c0link.lua:20: attempt to index global 'Plugin' (a nil value) ║
║ stack traceback: ║
║ C:\Program Files\Far Manager\Plugins\c0link\c0link.lua:20: in function <C:\Program Files\Far Manager\Plugins\c0link\c0link.lua:7> ║
╟──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
И я не понял, как «global 'Plugin'» может быть nil-ом.
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 05 Sep, 2019 04:58
by buniak_a_h
Shmuel, вдогонку.
Для проверки заменил на crc=type(_G.Plugin), crc=type(_G.mf) - все они возращают nil. Как будто какие-то проблемы с видимостью глобальных таблиц... А вот crc=type(_G.win) возвращает table... Логики не поймаю...
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 05 Sep, 2019 06:11
by John Doe
Вам не нужен плагин. Установите скрипт в scripts.
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 05 Sep, 2019 07:41
by Shmuel
Shmuel wrote: ↑Thu 05 Sep, 2019 01:59
Ваша ошибка в том, что не проверяете значение возврата плагина.
local crc=Plugin.SyncCall("E186306E-3B0D-48C1-9668-ED7CF64C0E65", "gethash", 'CRC32', FilePath)
data[j] = crc and crc:upper()
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 05 Sep, 2019 09:20
by buniak_a_h
Shmuel wrote: ↑Thu 05 Sep, 2019 07:41
от код, который проверяет:
1. Это не помогает.
2. Вылетит (вылетает), т.к. таблицы Plugin нету.
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 05 Sep, 2019 09:22
by buniak_a_h
John Doe, спасибо. Я не понял, как это должно работать... Теперь работает
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 05 Sep, 2019 09:27
by John Doe
А что тут понимать.
Таблицы, названия которых начинаются с заглавных букв, присутствуют только в LuaMacro.
Бесполезно искать их в любом другом luafar-плагине.
Показать файл/папку назначения Symlink и Junction на панелях
Posted: Thu 05 Sep, 2019 10:38
by Shmuel
buniak_a_h wrote: ↑Thu 05 Sep, 2019 09:20
1. Это не помогает.
2. Вылетит (вылетает), т.к. таблицы Plugin нету.
О да, я этого не видел, так как проверял на LuaMacro, а не на плагине из этой темы.
Но и на LuaMacro вылетало, и причина была в отсутствии проверки значения, возвращаемого плагином.