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

Столкнулись с проблемой в использовании Far? Здесь можно получить помощь.
User avatar
John Doe
Бюрократ
Posts: 12836
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post 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
Спасибо за исправление.

User avatar
HaRT
Moderator
Posts: 9482
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 225 times

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

Post by HaRT »

Dima777 wrote:
Tue 07 May, 2019 00:05
на папке с OneDrive падает
Исправляет ли свежий вариант макроса (из предыдущего сообщения) вашу ошибку?
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12836
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

Разумеется.
Хотя конкретно папки Onedrive у меня нет, чтобы удостовериться)

buniak_a_h
Posts: 1924
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post 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 ]            ║
  ╚══════════════════════════════════════════════════════════════════════════╝
  
Это я что-то неправильно сделал, или вызов функции плагина из другого плагина не предусмотрен? Или какая-то другая причина?

Shmuel
Posts: 6147
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 318 times

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

Post by Shmuel »

buniak_a_h wrote:
Wed 04 Sep, 2019 22:15
Это я что-то неправильно сделал, или вызов функции плагина из другого плагина не предусмотрен? Или какая-то другая причина?
Фар при выводе меседж-бокса вызывает GetContentData повторно и происходит переполнение стека.
Ваша ошибка в том, что не проверяете значение возврата плагина.
Я сделал заплатку в "generic plugin", и таким образом все вновь собираемые LuaFAR-плагины будут от этого защищены.
Last edited by Shmuel on Thu 05 Sep, 2019 02:08, edited 1 time in total.

buniak_a_h
Posts: 1924
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post 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-ом.

buniak_a_h
Posts: 1924
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post by buniak_a_h »

Shmuel, вдогонку.
Для проверки заменил на crc=type(_G.Plugin), crc=type(_G.mf) - все они возращают nil. Как будто какие-то проблемы с видимостью глобальных таблиц... А вот crc=type(_G.win) возвращает table... Логики не поймаю... :-(
Last edited by buniak_a_h on Thu 05 Sep, 2019 05:11, edited 2 times in total.

User avatar
John Doe
Бюрократ
Posts: 12836
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

Вам не нужен плагин. Установите скрипт в scripts.

Shmuel
Posts: 6147
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 318 times

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

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

buniak_a_h
Posts: 1924
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post by buniak_a_h »

Shmuel wrote:
Thu 05 Sep, 2019 07:41
от код, который проверяет:
1. Это не помогает.
2. Вылетит (вылетает), т.к. таблицы Plugin нету.

buniak_a_h
Posts: 1924
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

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

Post by buniak_a_h »

John Doe, спасибо. Я не понял, как это должно работать... Теперь работает

User avatar
John Doe
Бюрократ
Posts: 12836
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

А что тут понимать.
Таблицы, названия которых начинаются с заглавных букв, присутствуют только в LuaMacro.
Бесполезно искать их в любом другом luafar-плагине.

Shmuel
Posts: 6147
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 318 times

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

Post by Shmuel »

buniak_a_h wrote:
Thu 05 Sep, 2019 09:20
1. Это не помогает.
2. Вылетит (вылетает), т.к. таблицы Plugin нету.
О да, я этого не видел, так как проверял на LuaMacro, а не на плагине из этой темы.
Но и на LuaMacro вылетало, и причина была в отсутствии проверки значения, возвращаемого плагином.

Post Reply

Return to “Нужна помощь”