Сохранение / восстановление файловых фильтров

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

Накарябал пару-тройку связанных макросов. Один запоминает текущий фильтр панели, другой восстанавливает, третий в текущий фильтр добавляет тип файла (таковой может отсутствовать на панели). Писал чисто для себя, но попросили опубликовать. Так что звиняйте, если чо…

Версия 1.1.8
  1. Доделано то, что в п.2 предыдущей версии
  2. Исправлена ошибка: при аддитивной загрузке фильтров, если в сохранённом фильтре был отмечен только элемент «0. Папки», то при аддитивном режиме восстановления фильтра вообще не происходило.
Версия 1.1.9
Исправлена ошибочка преобразования фильтра пассивной панели в таблицу. Изменения только в модуле FileFilterTools
SaveRestFilter.1_1_9.7z
(9.3 KiB) Downloaded 83 times



сорри, вложение куда-то делось…
Last edited by buniak_a_h on Sun 31 Jan, 2021 05:17, edited 14 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

Уважаемые знатоки!
В модуле FileFilterTools.lua, вложенном в шапку, имеется такая странная строка:
Keys"CtrlI Esc" -- Мистика! Без этого не работает
Идея функции такая: открывается меню файловых фильтров, помечаются нужные строки, затем меню закрывается. Так вот: без процитированной строки последующий Keys"CtrlI" не открывает меню фильтров. Я проверял (вставлял перед указанным Keys-ом нечто типа far.Show(Area.Current). Перед посылкой CtrlI была область Shell (что верно). После - всё равно Shell (странно!!!) Вставил посылку пустой (практически ничего не делающей) последовательности CtrI Esc - и всё заработало.
Сократить пример я не смогу: указанные действия делаются в функции, описанной в модуле, а эта функция вызывается из двух макросов. Так вот: при вызове из одного макроса (восстановления фильтра по таблице, сохранённой ранее по mf.msave) всё нормально, а из другого (добавление расширения, там всё то же самое за исключением того, что перед этим открывается (нормально) меню фильтров, читаются в таблицу текущие расширения, меню закрывается, в полученную таблицу добавляются расширения и далее вызывается та же функция (TableToFilters) вылезает бяка. Разница только в том, что во втором макросе меню фильтров открывается до вызова функции и в функции. Причём, в этом же скрипте есть макрос, открывающий всё то же меню, читающий пометки и сохраняющий в базу. И при последовательном вызове этого макроса и макроса сохранения всё нормально. А фактически разница только в том, что последовательность SaveFilter-RestFilter между открытиями меню таблица сохраняется в базу, а в макросе добавления расширения файла таблица модифицируется макросом.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Сохранение / восстановление файловых фильтров

Post by John Doe »

buniak_a_h wrote: Sun 24 Jan, 2021 16:49 Сократить пример я не смогу: указанные действия делаются в функции, описанной в модуле, а эта функция вызывается из двух макросов.
Хотя бы сделайте его линейным: поместите всё в один файл, и вырежьте всё не требуемое для воспроизведения.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

John Doe wrote: Sun 24 Jan, 2021 17:38 Хотя бы сделайте его линейным: поместите всё в один файл, и вырежьте всё не требуемое для воспроизведения.
Так как-то … Макрос повешен на CtrlShiftA.
────────────
Приведённый макрос работает; никаких require не требует. Для порчи закомментируйте строку № 139 (помечена !!!)
  1. ----[[*D*]]local le = require"le"
  2.  
  3. local Info = package.loaded.regscript or function(...) return ... end
  4.  
  5. local nfo = Info {_filename or ...,
  6.  
  7.   name        = "SaveRestFilter";
  8.  
  9.   description = "Сохранение / восстановление файловых фильтров";
  10.  
  11.   version     = "1.1.1"; --http://semver.org/lang/ru/
  12.  
  13.   author      = "BAX";
  14.  
  15.   url         = "";
  16.  
  17.   id          = "FC5D2F21-600A-418C-8035-157D71232250";
  18.  
  19.   history     = [[
  20.  
  21. 24.01.2021 v1.0.1 - стартовая версия
  22.  
  23.   ]];
  24.  
  25.   --parent_id   = "";
  26.  
  27.   --minfarversion = {3,0,0,4744,0};
  28.  
  29.   files       = [[%FARPROFILE%\macros\modules\BAX\FileFilterTools.lua]];
  30.  
  31.   --config      = function(nfo,name) end;
  32.  
  33.   help        = function(nfo,name)
  34.  
  35.    far.Message([[
  36.  
  37.      В скрипт входят три макроса: сохранение, восстановление фильтра
  38.  
  39. и добавление к фильтру расширения (возможно, отсутствующего на панели.
  40.  
  41.      Изначально макросы "повешены" на двойные кнопкосочетания: CtrlF-S,
  42.  
  43. CtrlF-R и CtrlF-A соответственно (требуется макрос MacroEx).]], '', nil, 'l')
  44.  
  45.   end;
  46.  
  47.   --execute     = function(nfo,name) end;
  48.  
  49.  
  50.  
  51.   --disabled    = false;
  52.  
  53.   --options     = {};
  54.  
  55. }
  56.  
  57. if not nfo then return end
  58.  
  59. --local O = nfo.options
  60.  
  61. ------------------------------------------------------------------------------------------
  62.  
  63. local F = far.Flags
  64.  
  65. local tin = table.insert
  66.  
  67. local TmpPanel_Id  = "B77C964B-E31E-4D4C-8FE5-D6B0C6853E7C"
  68.  
  69. --*D* {
  70.  
  71. --local TmpPanelUtils = require"BAX.TmpPanelUtils"
  72.  
  73. --*D* }
  74.  
  75. local function FilterToTable(A_P)
  76.  
  77.  local Filt = {Named={}; Ext={}}
  78.  
  79.  local function SaveFilters()
  80.  
  81.   local hDlg = far.AdvControl("ACTL_GETWINDOWINFO").Id
  82.  
  83.   local List = hDlg:send(F.DM_GETDLGITEM, 1)
  84.  
  85.   local bWasSep=false
  86.  
  87.   for i,v in ipairs(List[6]) do
  88.  
  89.    bWasSep = bWasSep or (band(v.Flags, F.LIF_SEPARATOR) == F.LIF_SEPARATOR)
  90.  
  91.    if band(v.Flags, F.LIF_SEPARATOR) == F.LIF_NONE then
  92.  
  93.     local Flags = v.Flags
  94.  
  95.     if band(Flags, F.LIF_CHECKED) == F.LIF_CHECKED then
  96.  
  97.      local nCh = tonumber(band(Flags, 0x000000FF))
  98.  
  99.      if (nCh or 0) > 0 then
  100.  
  101.       local Char = utf8.char(nCh)
  102.  
  103.       local text = v.Text
  104.  
  105.       local t1,_,t3=text:match"(.*)%s*%│%s*(.*)%s*%│%s*(.*)"
  106.  
  107.       local tt = bWasSep and t3 or t1:match"^%s*(.-)%s*$"
  108.  
  109.       if tt and tt:match"%S+" then
  110.  
  111.        if Char then
  112.  
  113.         local _Filt = Filt[bWasSep and 'Ext' or 'Named']
  114.  
  115.         _Filt[Char] = _Filt[Char] or {}
  116.  
  117.         tin(_Filt[Char], tt)
  118.  
  119.        end
  120.  
  121.       end
  122.  
  123.      end
  124.  
  125.     end
  126.  
  127.    end
  128.  
  129.   end
  130.  
  131.   hDlg:send(F.DM_CLOSE, -2)
  132.  
  133.  end -- SaveFilters
  134.  
  135.  Keys"CtrlI"
  136.  
  137.  if A_P == 'P' then panel.SetActivePanel(nil, 0) end
  138.  
  139.  pcall(SaveFilters)
  140.  
  141.  if A_P == 'P' then panel.SetActivePanel(nil, 0) end
  142.  
  143.  return Filt
  144.  
  145. end -- FilterToTable
  146.  
  147. ---------------------------------------------------
  148.  
  149. local function TableToFilters(Filt, A_P) local function _TableToFilters()
  150.  
  151.   local SavePan = { PanelDirectory = panel.GetPanelDirectory(nil, 1); -- Куда вернуться (папка)
  152.  
  153.                     PanelCurrent   = APanel.Current;                  -- Текущее имя
  154.  
  155.                     PanelInfo      = panel.GetPanelInfo(nil, 1);      -- Отсюда
  156.  
  157.                   }
  158.  
  159.   Keys('CtrlI ShiftBS Esc') -- Очищаю старый фильтр
  160.  
  161.   --------------------------
  162.  
  163.   if not next(Filt.Ext) and not next(Filt.Named) then return end
  164.  
  165.   --------------------------
  166.  
  167.   -- Составляю список расширений. Будет во временной панели
  168.  
  169.   local AddStr = {}
  170.  
  171.   for i,v in pairs(Filt.Ext) do
  172.  
  173.    for _,w in ipairs(v) do
  174.  
  175.     table.insert( AddStr, w )
  176.  
  177.    end
  178.  
  179.   end
  180.  
  181.   --------------------------
  182.  
  183.   if #AddStr > 0 then
  184.  
  185.    -- Открытие временной панели на активной панели и добавление в неё расширений
  186.  
  187.    Plugin.Menu(TmpPanel_Id)
  188.  
  189.    --TmpPanelUtils.Add(AddStr)
  190.  
  191.    do
  192.  
  193.     local fn = far.MkTemp('FiFi')
  194.  
  195.     local hf = io.open(fn, 'w')
  196.  
  197.     hf:write(table.concat(AddStr, '\n'))
  198.  
  199.     hf:close()
  200.  
  201.     Plugin.Command(TmpPanel_Id, '+any "' ..fn..'"')
  202.  
  203.     os.remove(fn)
  204.  
  205.    end
  206.  
  207.    --------------------------
  208.  
  209.    -- Отметка расширений
  210.  
  211.    --------------------------
  212.  
  213.    Keys"CtrlI"
  214.  
  215.    for i,v in pairs(Filt.Ext) do
  216.  
  217.     for ii,w in ipairs(v) do
  218.  
  219.      Menu.Select(w, 2, 0)
  220.  
  221.      Keys(i)
  222.  
  223.     end
  224.  
  225.    end -- for i,v in pairs(Filt.Ext)
  226.  
  227.   else -- Отмеченных расширений не было. Просто открываю диалог вильтров
  228.  
  229.    Keys"CtrlI"
  230.  
  231.   end
  232.  
  233.   --------------------------
  234.  
  235.   -- Тут уже открыт диалог фильтра
  236.  
  237.   -- Отметка именованных фильтров
  238.  
  239.   for i,v in pairs(Filt.Named) do
  240.  
  241.    for _,w in ipairs(v) do
  242.  
  243.     local j = Menu.Select(w, 1, 0)
  244.  
  245.     if j > 0 then
  246.  
  247.      Keys(i)
  248.  
  249.     end
  250.  
  251.    end
  252.  
  253.   end -- for i,v in pairs(Filt.Named)
  254.  
  255.   Keys"Enter"
  256.  
  257.   --------------------------
  258.  
  259.   -- Восстановление исходной папки и положения
  260.  
  261.   panel.SetPanelDirectory(nil, 1, SavePan.PanelDirectory)
  262.  
  263.   --------------------------
  264.  
  265.   if Panel.SetPos(0, SavePan.PanelCurrent) == 0 then
  266.  
  267.    panel.RedrawPanel( nil, 1,
  268.  
  269.                       { CurrentItem =SavePan.PanelInfo.CurrentItem;
  270.  
  271.                         TopPanelItem=SavePan.PanelInfo.TopPanelItem } )
  272.  
  273.   end
  274.  
  275.  end --_TableToFilters
  276.  
  277.  --[[*D*]]Keys"CtrlI Esc" -- Мистика! Без этого не работает !!!
  278.  
  279.  if A_P == 'P' then panel.SetActivePanel(nil, 0) end
  280.  
  281.  pcall(_TableToFilters)
  282.  
  283.  if A_P == 'P' then panel.SetActivePanel(nil, 0) end
  284.  
  285. end -- TableToFilters
  286.  
  287. ---------------------------------------------------
  288.  
  289.  
  290.  
  291. Macro{
  292.  
  293.   id="1F253444-B5F8-47E0-9102-A1DD36C9DB14";
  294.  
  295.   area="Shell";
  296.  
  297.   key="CtrlShiftA";
  298.  
  299.   description="Добавление фильтра по расширению (в т.ч. в случае, если расширения на панели нету)";
  300.  
  301.   flags=""; -- EnableOutput RunAfterFARStart EmptyCommandLine NotEmptyCommandLine NoFilePanels NoFilePPanels NoPluginPanels NoPluginPPanels NoFolders NoPFolders NoFiles NoPFiles Selection PSelection NoSelection NoPSelection EVSelection NoEVSelection NoSendKeysToPlugins
  302.  
  303.   action=function(data)
  304.  
  305.    local Filt = FilterToTable(akey(1)== 'CtrlShiftF' and 'P' or 'A')
  306.  
  307.    local function AADD(aArr, item)
  308.  
  309.     if type(item) ~= 'table' then item = {item} end
  310.  
  311.     aArr = aArr or {}
  312.  
  313.     for _,v in ipairs(item) do aArr[#aArr+1] = v end
  314.  
  315.     return aArr
  316.  
  317.    end
  318.  
  319.    local sAdd = far.InputBox(win.Uuid'377A8222-E887-4EE8-A1A7-AE65EAF8CE91','Добавление расширения в фильтр','Введите список [{+|-|I|X}=]маска,…')
  320.  
  321.    if sAdd then
  322.  
  323.     sAdd = sAdd .. ','
  324.  
  325.     local aAdd = {}
  326.  
  327.     local cSim = '+'
  328.  
  329.     for w in sAdd:gmatch"([^,]*)," do
  330.  
  331.      if w:match"%S" then
  332.  
  333.       local _cSim,_Ext = w:match"^([+-IiXx])=(.*)$"
  334.  
  335.       cSim = _cSim or cSim
  336.  
  337.       _Ext = _Ext or w
  338.  
  339.       aAdd[cSim] = AADD(aAdd[cSim], _Ext)
  340.  
  341.      end
  342.  
  343.     end
  344.  
  345.     for i,v in pairs(aAdd) do
  346.  
  347.      Filt.Ext[i] = AADD(Filt.Ext[i], v)
  348.  
  349.     end
  350.  
  351.     TableToFilters(Filt, akey(1)== 'CtrlShiftF' and 'P' or 'A')
  352.  
  353.    end
  354.  
  355.   end;
  356.  
  357. }
SaveRestFilter.lua.7z
Для удобства скачивания
(2.81 KiB) Downloaded 51 times
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

Что показало исследование:
если все действия делаются над пассивной панелью (всё действие функций обрамлено вызовом panel.SetActivePanel(nil, 0)),
то строка Keys"CtrlI Esc" не только не нужна, но даже мешает.
А если над активной панелью (вызов SetActivePanel не делается), то без этой строки не работает. Я не понимаю, что за гитики такие знает наука…
Last edited by buniak_a_h on Mon 25 Jan, 2021 00:43, edited 4 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

Вот ещё загадка:
перед строкой 80 и после поставил вывод в дебагер:

Code: Select all

win.OutputDebugString('BAX.83: Area='..Area.Current) -- тут Shell
Keys('CtrlI') -- переключаюсь на меню настройки фильтров
win.OutputDebugString('BAX.83: Area='..Area.Current) -- Почему-то тут тоже Shell !!!
Причину так и не нашёл, обошёл так:

Code: Select all

  --*D*Keys('CtrlI ShiftBS Esc') -- Очищаю старый фильтр -- строка заменена на несколько
  Keys('CtrlI') -- Переключаюсь на меню фильтров
  while not Area.Menu and mf.waitkey(1) ~= 'Esc' do --  так долблюсь, пока не получится
   Keys('CtrlI')
   --[[*D*]]win.OutputDebugString('BAX.83: Area='..Area.Current) - выводится один раз. Т.е. дважды посылается Ctrl+I !!!
  end
  Keys('ShiftBS Esc') -- Собственно очистка фильтров
Так работает, но кто бы мне объснил, куда деваются два Ctrl+I ??? !!!
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

Версия 1.0.2
  1. Исправлена (замаскирована) странность, что не всегда влючался диалог управленя фильтрами (изменения в модуле FileFilterTools).
  2. Там же: работа с временной панелью реализована непосредственно в FileFilterTools; в результате модуль TmpPanelUtils стал лишним.
  3. Сделан контроль версии модуля FileFilterTools.
«Странность» "замаскирована": причина не найдена.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Сохранение / восстановление файловых фильтров

Post by citRiks »

Такое осчучение, что с вашим усердием если бы вы на Сях писали, то быстрее бы переписали тот же функционал в самом ФАРе :)
скрипт ваш для фильтров я надеюсь что соберусь когда нибудь использовать для быстрого поиска по всем словам фильтра в любом порядке
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Сохранение / восстановление файловых фильтров

Post by Ann »

buniak_a_h wrote: Mon 25 Jan, 2021 05:44
После выполнения макроса "Добавление фильтра по расширению …" при предустановленной уже в фильтре отметке на 0-позиции не показывать папки:
– 0. Папки │ +D ... │
или, безразлично, показывать папки:
+ 0. Папки │ +D ... │
дополнительное расширение устанавливается, но отметка фильтра на папках сбрасывается:
0. Папки │ +D ... │

Тоже происходит и если запомнить макросом состояние фильтра (Save filter), включающего отметку на 0-позиции, а потом восстановить (RestFilter) ранее запомненный фильтр — отметка на 0-позиции сбрасывается.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

Ann, да-да, я про папки забыл. Сохраняю только именованные фильтры и по расширению. Спасибо.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

Ann wrote: Mon 25 Jan, 2021 10:22
buniak_a_h wrote: Mon 25 Jan, 2021 05:44
После выполнения макроса "Добавление фильтра по расширению …" при предустановленной уже в фильтре отметке на 0-позиции не показывать папки:
– 0. Папки │ +D ... │
… … … … … … … … … … … … … … … … … …
Версия 1.1.3
Реализовано запоминание отметки строки Folders. Изменения в модуле FileFilterTools; соответственно в контроле версий модуля изменена требуемая версия.
Ann wrote: Mon 25 Jan, 2021 10:22 Тоже происходит и если запомнить макросом состояние фильтра (Save filter), включающего отметку на 0-позиции, а потом восстановить (RestFilter) ранее запомненный фильтр — отметка на 0-позиции сбрасывается.
Вот тут я не понял, что значит "на 0-позиции"?
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Сохранение / восстановление файловых фильтров

Post by Ann »

buniak_a_h wrote: Mon 25 Jan, 2021 11:54Реализовано запоминание отметки строки Folders
Да, в этом плане вроде бы всё хорошо. Спасибо.
buniak_a_h wrote: Mon 25 Jan, 2021 11:54что значит "на 0-позиции"?
Автоматически задаваемые позиции в фильтре нумеруются, начиная с 0, и папки в нижней части фильтра всегда обозначаются в нулевой позиции, даже если их в фильтруемой пользователем папке и нет. Извините, если применённое мною обозначение воспринимается неуклюже.

И поясните, пожалуйста, что Вы подразумеваете под выражением "именованные фильтры"?

Дело в том, что я регулярно использую удобный макрос "Именованные папки" — namedfold.lua и мне бы очень хотелось, чтобы по аналогии с ним появился бы и макрос "Именованные фильтры". Группы которых сохранялись бы между сессиями Фара и из них можно было бы выборочно применять фильтры по мере надобности.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

Ann wrote: Mon 25 Jan, 2021 13:03 Автоматически задаваемые позиции в фильтре нумеруются, начиная с 0, и папки в нижней части фильтра всегда обозначаются в нулевой позиции, даже если их в фильтруемой пользователем папке и нет. Извините, если применённое мною обозначение воспринимается неуклюже.
У меня под номером "0" всегда папки. И они - не в нижней части, а как раз сверху, сразу за пулом именованных (пользовательских) фильтров. Если это - оно, то Вы четыре раза написали одно и то же. Если нет - сделайте графический скриншот и пометьте, что Вы имеете в виду.
Ann wrote: Mon 25 Jan, 2021 13:03 И поясните, пожалуйста, что Вы подразумеваете под выражением "именованные фильтры"?
Выше разделителя расположен пул фильтров пользователя. Им можно задать имена. Я их имел в виду.
Соответственно, проявилась ограниченность: пользовательские фильтры должны иметь уникальные имена. Впрочем, легко переделать - нужно только чтоб вся строка была уникальна.
Ann wrote: Mon 25 Jan, 2021 13:03 Дело в том, что я регулярно использую удобный макрос "Именованные папки" — namedfold.lua и мне бы очень хотелось, чтобы по аналогии с ним появился бы и макрос "Именованные фильтры". Группы которых сохранялись бы между сессиями Фара и из них можно было бы выборочно применять фильтры по мере надобности.
Я уже почти сделал сервис сохранения - восстановления контекста. Сейчас восстанавливаются расположения папок, сортировка, фильтрация, режим просмотра. Имеется в виду, что будут также открываться файлы, бывшие открытыми в редакторе/вьюере (если они, конечно, есть). Ну и либо настройка будет, либо при сохранении можно будет указать, что конкретно подлежит восстановлению. Вот как раз фильтр, сортировка, режим просмотра как раз будет, наверно, сохранять-восстанавливать удобно без путей. Или наоборот - закрепить сортировку и фильтры за папками.
Пока сохранение контекста сделано только из диалога выхода из FAR-а, а восстановление - из меню плагинов. Сопровождение (очистка ненужных контекстов) - из меню настройки плагинов. Ну, если кому-то (кроме меня) понравится, повесить на хоткеи никогда не поздно.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

Сохранение / восстановление файловых фильтров

Post by Ann »

buniak_a_h,
Было бы хорошо понимать терминологию, описывающую работу "Меню фильтров", однообразно и по форме, и, по сути. Тем более, что в её описание, ИМХО, уверен — непреднамеренно, вкралась возможность некоторой формальной путаницы. Предлагаю попробовать взаимно разобраться в этом.

В Справке сказано: "Меню состоит из двух частей. В верхней части расположены Фильтры пользователя, в нижней части меню находятся маски всех файлов, содержащихся в данный момент в текущей панели файлов …" Вот поэтому то я и написал, что позиция 0. Папки находится в нижней части меню. И да, Вы правы указывая на то, что данная позиция всегда наверху. Но наверху не всего меню, и лишь нижней его части. А то, что Вы именуете "пулом именованных (пользовательских) фильтров" (в Справке это "Фильтры пользователя") согласно Справке относятся к верхней части меню.

Но это не так существенно, как следующее. Поскольку прошу обратить Ваше внимание на то, что то, что я называю позицией в меню, в Справке называется фильтром. Т.е. по умолчанию подразумевается, что меню фильтров составляются из текущих наборов множества фильтров. И вот в этом то, по-моему, и заложена определённая запутанность. Так как, по сути дела, текущим фильтром панели является не отдельная позиция меню фильтров, а совокупность отмеченных в нём пользователем позиций. Из перечней автоматически задаваемых Фаром и произвольно дополняемых пользователем.

Поэтому Вы справедливо и указываете в шапке темы на то, что сабжевые макросы: "Один запоминает текущий фильтр панели, другой восстанавливает, третий в текущий фильтр добавляет тип файла". Поскольку макросы работают со всей совокупностью отмеченных в меню позиций (в терминологии Справки, на мой взгляд не вполне корректно, именуемых фильтрами).

Т.е., если я правильно понимаю, на текущий момент сабжевые макросы обеспечивают возможность запоминания и восстановления между сессиями Фара только одного текущего фильтра панели. А было бы весьма желательно, чтобы можно было бы запоминать и восстанавливать некоторый набор фактических текущих фильтров.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сохранение / восстановление файловых фильтров

Post by buniak_a_h »

Ann, вроде, сначала всё было понятно. А потом я совсем запутался.
Ann wrote: Mon 25 Jan, 2021 15:54 на текущий момент сабжевые макросы обеспечивают возможность запоминания и восстановления между сессиями Фара только одного текущего фильтра панели. А было бы весьма желательно, чтобы можно было бы запоминать и восстанавливать некоторый набор фактических текущих фильтров.
Вообще-то, у меня запоминаются и восстанавливаются именно пункты МЕНЮ фильтров, помеченные +,-,I и X. Причём именно все в совокупности. А то, что сабжевый макрос сохраняет "единственный фильтр" (т.е. отметку только одного пункта МЕНЮ) - для меня это неожиданность.
Сохранение настроек фильтрации (т.е. совокупности отметок МЕНЮ) под именами делается легко; весь вопрос в интерфейсе. На мой взгляд, макрос станет излишне "болтливым": при сохранении запрашивать имя, при восстановлении предлагать выбор. Тогда, по-моему, проще создать пользовательский фильтр с перечислением расширений. У меня, наоборот, задача состояла в уменьшении нажатий кнопочек. В этом плане я добавлю следующий функционал: одна кнопка запоминает настройку и очищает; вторая - восстанавливает то, что было запомнено. Т.е. выключить-включить фильтрацию. Очень часто приходится это делать, если в фильтр не вошёл редко, но - нужный файл.
С позицией "0" я так и не понял.
Post Reply

Return to “Обсуждение макросов”