Допустим, в папке панели имеются файлы 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-кода.