Восстановление файлового фильтра: добавить расширение

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
buniak_a_h
Posts: 2547
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 319 times
Contact:

Восстановление файлового фильтра: добавить расширение

Post by buniak_a_h »

Здравствуйте! Проблема следующая.
Допустим, в папке панели имеются файлы qqq.001, qqq.002, 111.003.
Настраиваем фильтр, чтоб были видны только файлы *.001
Затем переходим в другую папку с файлами qqq.aaa, qqq.bbb, qqq.ccc. Вызываем диалог установки фильтра; там в списке типов файлов, кроме *.aaa, *.bbb и *.ccc имеется отмеченное ранее, но отсутствующее в папке расширение *.001.
Теперь я делаю макрос, запоминающий активный фильтр и восстанавливающий его. При этом папка,в которой фильтр восстанавливается, может не совпадать с той, в которой фильтр сохранялся. Отметить имеющиеся расширения у меня получается, а вот добавить в список отсутствующее в нынешней папке расширение, чтобы отметить его - нет. Точнее, добавить легко, но при выходе из диалога настройки фильтров FAR падает с сообщением
╔══════════════════════════ Exception occurred ══════════════════════════╗ ║ Exception: 0xC0000005 - EXCEPTION_ACCESS_VIOLATION ║ ║ Details: Memory at 0000000000000018 could not be read ║ ║ errno: 0x00000000 - No error ║ ║ LastError: 0x00000000 - Операция успешно завершена. ║ ║ NTSTATUS: 0xC0000034 - Объект с указанным именем не найден. ║ ║ Address: 0x00103069 - Far.exe!<unknown> (get the pdb) ║ ║ Function: main ║ ║ Source: ║ ║ File: E:\Far.Test\Far.exe ║ ║ Plugin: ║ ║ Far: 3.0.5730.0 x64 (6c8f15a) ║ ║ OS: 10.0.19041.2.0.0.256.1 (version 2004, OS build 19041.746) ║ ║ Kernel: 10.0.19041.746 (WinBuild.160101.0800) ║
Я так понимаю, что я делаю некорректные действия: меняю данные прямо в диалоге.
Вопрос следующий: есть ли корректный способ решения указанной проблемы (кроме как через временную панель; до такого способа я додумался, но это как-то пер-анально…)? Додумался я также до добавления именованного фильтра, содержащего список масок. Но это - не менее проктологично, чем через временную панель
P/S. Если кого-то интересует данная задачка, могу опубликовать скрипты сохранения/восстановления файлового фильтра. Сейчас это ~120 строк LUA-кода.
Last edited by buniak_a_h on Fri 22 Jan, 2021 20:45, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13067
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 42 times
Been thanked: 319 times

Восстановление файлового фильтра: добавить расширение

Post by John Doe »

buniak_a_h wrote: Fri 22 Jan, 2021 20:42 Вопрос следующий: есть ли корректный способ решения указанной проблемы
Нет
https://t.me/FarManager — Telegram чат
citRiks
Posts: 1305
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 386 times
Been thanked: 80 times

Восстановление файлового фильтра: добавить расширение

Post by citRiks »

buniak_a_h wrote: Fri 22 Jan, 2021 20:42 Если кого-то интересует данная задачка, могу опубликовать скрипты сохранения/восстановления файлового фильтра. Сейчас это ~120 строк LUA-кода.
интересует :) и будет падать с этой ошибкой?
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1305
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 386 times
Been thanked: 80 times

Восстановление файлового фильтра: добавить расширение

Post by citRiks »

а есть ли какая-то логика в "падать при задании раширения, если этого раширения в текущей директории нет" ?
если же нету, то может быть починить в ФАРе ?
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2547
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 319 times
Contact:

Восстановление файлового фильтра: добавить расширение

Post by buniak_a_h »

citRiks wrote: Sat 23 Jan, 2021 22:40
buniak_a_h wrote: Fri 22 Jan, 2021 20:42 Если кого-то интересует данная задачка, могу опубликовать скрипты сохранения/восстановления файлового фильтра. Сейчас это ~120 строк LUA-кода.
интересует :) и будет падать с этой ошибкой?
Для падения сделал такой макрос:
  1. local F = far.Flags
  2. Macro{
  3.   id="BB0FDE00-BF26-4271-899C-33ABCBA5FC3C";
  4.   area="Menu";
  5.   key="Ctrl=";
  6.   description="добавить в меню";
  7.   flags="";
  8.   condition=function(key, data)
  9.    return Menu.Id == far.Guids.FiltersMenuId
  10.   end;
  11.   action=function(data)
  12.    local hDlg,CurPos = far.AdvControl("ACTL_GETWINDOWINFO").Id, 1
  13.    local LastStr = Menu.GetValue(Object.ItemCount)
  14.    local NewStr = LastStr:gsub("^%w%.(.*│%s*)(.-)$", '  %1*.pdf') -- *.pdf - только для удобства тестирования (в одних папках есть, в других - нету).
  15.    hDlg:send(F.DM_LISTADDSTR, CurPos, NewStr)
  16.   end;
  17. }
Строка добавляется, и всё нормально, если не попробовать отметить пункт (даже если отметить, а потом снять).
На самом деле всё естественно: видимо, перед показом МЕНЮ формируются внутренние структуры, их размер/количество определяются до показа МЕНЮ. При добавлении строки само меню растёт, а внутренние структуры не меняются. В результате при закрытии диалога происходит чтение в отсутствующий элемент.
citRiks wrote: Sat 23 Jan, 2021 22:43 а есть ли какая-то логика в "падать при задании расширения, если этого расширения в текущей директории нет" ?
если же нету, то может быть починить в ФАРе ?
Вопрос родственный тому, чтобы доделать интерфейс управления файловыми фильтрами на базе АПИ вместо keystrokes. Видимо, изначально при проектировании этой части ФАРа заложены были неправильные решения; иначе не объяснить, например, использования keystrokes в скрипте Автофильтр от John Doe и некоторые другие.
Last edited by buniak_a_h on Sun 24 Jan, 2021 04:16, edited 2 times in total.
buniak_a_h
Posts: 2547
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 319 times
Contact:

Восстановление файлового фильтра: добавить расширение

Post by buniak_a_h »

citRiks,
P/S.
1. Падение происходит не из-за добавления отсутствующего расширения, а просто при добавлении строки в меню.
2. Собственно сохранение-восстановление фильтров я сделал (через временную панель), но у меня это - часть более объёмной задачи сохранения/восстановления именованного контекста, включая папки, фильтры, режимы и сортировки, в также открытые в редакторе и во вьюере файлы. Этого мне очень не хватает. Если собственно сохранение-восстановление именно фильтров интересует, напишите - я дооформлю и выложу в форум обсуждения скриптов.
PP/S. Пришла в голову мысль, что на этой же основе можно сделать добавление произвольных расширений в фильтр
Last edited by buniak_a_h on Sun 24 Jan, 2021 04:20, edited 1 time in total.
citRiks
Posts: 1305
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 386 times
Been thanked: 80 times

Восстановление файлового фильтра: добавить расширение

Post by citRiks »

buniak_a_h wrote: Sun 24 Jan, 2021 04:13 Если собственно сохранение-восстановление именно фильтров интересует, напишите - я дооформлю и выложу в форум обсуждения скриптов.
Да, спасибо
buniak_a_h wrote: Sun 24 Jan, 2021 04:04 Вопрос родственный тому, чтобы доделать интерфейс управления файловыми фильтрами на базе АПИ вместо keystrokes
да, старая больная, и странная тема.
Так, все.
Перечислю 1000$ тому если кто сделает эту фунцкиональность в официальном ФАРе
А то хоть самому Сишником становись, а это вырванные из жизни годы.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2547
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 319 times
Contact:

Восстановление файлового фильтра: добавить расширение

Post by buniak_a_h »

citRiks wrote: Sun 24 Jan, 2021 09:45
buniak_a_h wrote: Sun 24 Jan, 2021 04:13 Если собственно сохранение-восстановление именно фильтров интересует, напишите - я дооформлю и выложу в форум обсуждения скриптов.
Да, спасибо
См. тут
Post Reply

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