Page 3 of 3

Показать файл/папку назначения Symlink и Junction на панелях

Posted: Thu 08 Aug, 2019 14:28
by John Doe

Latest post of the previous page:

Вероятно не все ещё заметили, но теперь возможности контент-плагинов доступны и в luamacro, т.е. плагин не нужен, достаточно макроса.

А вот такой вариант можно в обоих случая использовать:

Code: Select all

-- 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)


Получаю следующий вылет:

Code: Select all

  ╔═══════════════════════════ Exception occurred ═══════════════════════════╗
  ║ Exception:   0xC00000FD - EXCEPTION_STACK_OVERFLOW                       ║
  ║ Details:     Не удается создать новую страницу защиты для стека.         ║
  ║ errno:                                                                   ║
  ║ LastError:                                                               ║
  ║ NTSTATUS:                                                                ║
  ║ Address:     0x7FFBA0094697 - ntdll.dll!_chkstk                          ║
  ║ Source:                                                                  ║
  ║ Function:    GetContentDataW                                             ║
  ║ Module:      C:\Program Files\Far Manager\Plugins\c0link\c0link-x64.dll  ║
  ╟──────────────────────────────────────────────────────────────────────────╢
  ║           { Unload plugin } [ Stack ] [ Minidump ] [ Ignore ]            ║
  ╚══════════════════════════════════════════════════════════════════════════╝
  
Это я что-то неправильно сделал, или вызов функции плагина из другого плагина не предусмотрен? Или какая-то другая причина?

Показать файл/папку назначения 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(...) - не помогло.
--
Ну и главное. За приведённым выше мессадж-боксом я не увидел первичного. Вот он:

Code: Select all

╔═══════════════════════════════════════════════════════════════ 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 Ваша ошибка в том, что не проверяете значение возврата плагина.
Вот код, который проверяет:

Code: Select all

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 вылетало, и причина была в отсутствии проверки значения, возвращаемого плагином.