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

Здесь обсуждается всё, что касается макросов.
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 »

Latest post of the previous page:

Ann, вроде, сначала всё было понятно. А потом я совсем запутался.
Ann wrote: Mon 25 Jan, 2021 15:54 на текущий момент сабжевые макросы обеспечивают возможность запоминания и восстановления между сессиями Фара только одного текущего фильтра панели. А было бы весьма желательно, чтобы можно было бы запоминать и восстанавливать некоторый набор фактических текущих фильтров.
Вообще-то, у меня запоминаются и восстанавливаются именно пункты МЕНЮ фильтров, помеченные +,-,I и X. Причём именно все в совокупности. А то, что сабжевый макрос сохраняет "единственный фильтр" (т.е. отметку только одного пункта МЕНЮ) - для меня это неожиданность.
Сохранение настроек фильтрации (т.е. совокупности отметок МЕНЮ) под именами делается легко; весь вопрос в интерфейсе. На мой взгляд, макрос станет излишне "болтливым": при сохранении запрашивать имя, при восстановлении предлагать выбор. Тогда, по-моему, проще создать пользовательский фильтр с перечислением расширений. У меня, наоборот, задача состояла в уменьшении нажатий кнопочек. В этом плане я добавлю следующий функционал: одна кнопка запоминает настройку и очищает; вторая - восстанавливает то, что было запомнено. Т.е. выключить-включить фильтрацию. Очень часто приходится это делать, если в фильтр не вошёл редко, но - нужный файл.
С позицией "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 17:57С позицией "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 17:57 то, что сабжевый макрос сохраняет "единственный фильтр" (т.е. отметку только одного пункта МЕНЮ) - для меня это неожиданность
Нет, под фильтром лично я никак не имею ввиду пункт меню фильтров. Напротив, именно к тому, что пункт меню называть фильтром по сути всего дела ошибочно и что это неизбежно ведёт к путанице, я и пытаюсь привлечь внимание. Каждый пункт Меню фильтров являются лишь частью единого фильтра панели. И лишь совместно они являются фильтром панели.
Вообще-то, у меня запоминаются и восстанавливаются именно пункты МЕНЮ фильтров, помеченные +,-,I и X.
Да, именно так, и это вполне понятно.
Причём именно все в совокупности.
И вот именно только в совокупности они и составляют единый ФИЛЬТР или, как совершенно верно он назван у Вас в шапке темы, — "текущий фильтр панели". Один. Пока что всего один, и пока что не поименованный.
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 19:30 Хорошо, попытаюсь привести наглядный
Судя по картинкам, "0-я позиция" - это всё та же строка про папки, о которой Вы писали 3 раза в одном сообщени. Которую я исправил.
Остальное я опять не понял. Скрипт сохраняет-восстанавливает именно активный фильтр панели. Т.е. все отметки, проставленные в МЕНЮ настройки. Конечно, есть ограничения: юзер может между сохранением и восстановлением поменять пользовательский фильтр - мой скрипт этого, естественно. не увидит. Может совсем удалить пользовательский; при восстановлении он не появится. Скрипт всего лишь запоминает отметки +,-,I и I, проставленные в меню настройки фильтра. Включая отметки расширений файлов, отсутствующие в настоящий момент на панели (что вручную сделать очень гиморно).
По поводу сохранения с именем - я писал, почему делать не стал. Скрипт станет "болтливым". Доделать легко, но учитывая, что созранение-восстановление контекста именованное и, кроме восстановления окон, уже готово, смысла делать не вижу тем более.
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 13:50Я уже почти сделал сервис сохранения - восстановления контекста. Сейчас восстанавливаются расположения папок, сортировка, фильтрация, режим просмотра ...
Очень хорошо. Это куда больше, чем я ожидал. Не терпится опробовать.
buniak_a_h wrote: Mon 25 Jan, 2021 21:03По поводу сохранения с именем - я писал, почему делать не стал.
Под термином "именованный" я не имею ввиду непременно фильтр (сервис, контекст, окружение, состояние или по-другому назовёте) с присвоенным ему наименованием, а чтобы их (состояний панели) можно было бы сохранять несколько и различать как ни будь. Допустим, хранить типа в .ini, .xml или в другого типа файле, который можно копировать из одной папки в другую и, при необходимости, модифицировать.
Остальное я опять не понял.
Чтобы не замусоривать тему может быть напишете в личку, что именно непонятно? Или может пока оставим в обоюдных непонятках до поры, до времени?
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 21:03Скрипт всего лишь запоминает отметки +,-,I и I, проставленные в меню настройки фильтра.
То есть, если мы имеем фильтр такого вида:
nePoln.png
то скрипт запомнит 3 позиции.

А если вот такого:
poln.png
то 8 позиций.

А ведь и у того, и у другого фильтра результат показа объектов на панели одинаковый.

В связи с этим у меня соответствующий вопрос: а нельзя ли научить сабжевый скрипт непомеченные в текущем фильтре строки помечать минусом? И при такой пометке не затрагивать уже помеченные до того строки.

Ведь тогда запомненный фильтр можно будет восстанавливать и после произвольных промежуточных изменений фильтра пользователем. Если я всё правильно понимаю.
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: Tue 26 Jan, 2021 06:59 а нельзя ли научить сабжевый скрипт непомеченные в текущем фильтре строки помечать минусом?
1. Это будет неправильно. Есть, например, такой фильтр:
╔══════════════════════════ Filters menu ══════════════════════════╗ ╟────────────────────────┼─────────────────┼───────────────────────╢ ║ 0. Folders │ +D ... │ ║ ║- 1. Panel file type │ -D ... │ *.lua ║ ║ 2. Panel file type │ -D ... │ *.lua-000 ║ ║ 3. Panel file type │ -D ... │ *.lua-001 ║ ║ 4. Panel file type │ -D ... │ *.lua-002 ║ ╚═══ + - Space I X BS Shift+BS Ins Del F4 F5 Ctrl+Up Ctrl+Down ════╝
(показать всё кроме *.lua)

И это совершенно не то же самое, что
╔══════════════════════════ Filters menu ══════════════════════════╗ ╟────────────────────────┼─────────────────┼───────────────────────╢ ║- 0. Folders │ +D ... │ ║ ║- 1. Panel file type │ -D ... │ *.lua ║ ║- 2. Panel file type │ -D ... │ *.lua-000 ║ ║- 3. Panel file type │ -D ... │ *.lua-001 ║ ║- 4. Panel file type │ -D ... │ *.lua-002 ║ ╚═══ + - Space I X BS Shift+BS Ins Del F4 F5 Ctrl+Up Ctrl+Down ════╝
(ничего не показывать)!

2. Реализовывать всю логику взаимоотношений пометок (особенно с учётом приоритетов + и I, - и X) я в скрипте, который и так работает, точно не буду. Могу просто сделать маленький скриптик, проверяющий, что есть только пометки + и I и помечающий остальные позиции минусами. Хотя и не понимаю, зачем.
Ann wrote: Tue 26 Jan, 2021 06:59 тогда запомненный фильтр можно будет восстанавливать и после произвольных промежуточных изменений фильтра пользователем
Это и сейчас можно. И я этим уже пользуюсь.
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 »

P/S. Именно для этого я сделал возможность в список расширений (автоматические фильтры нижней части МЕНЮ) включать отсутствующие в данный момент на панели расширения. Например, в папке есть только файлы *.cpp, а хочется видеть также *.hpp (которых пока нету, но будут!). Можно, конечно, написать пользовательский фильтр. Но уж очень далёкая к нему дорога. К тому же пользовательские фильтры сохраняются только вместе со всем контекстом ФАРа (при включённом автосохранении или по Shift+F9). Ну, при автосохранении вопросов нет. А вот то, что при ручном сохранении кроме пользовательского фильтра сохранятся папки (!!!) и всякие режимы просмотра и т.д. - т.е. всё, к фильтрам никакого отношения не имеющее, - это просто засада!
Last edited by buniak_a_h on Tue 26 Jan, 2021 07:42, edited 1 time in total.
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: Tue 26 Jan, 2021 07:33Это будет неправильно.
Просто в приведённом Вами конкретном примере, в котором в фильтре доминирует выставлено только отключение показа файлов с определённым расширением, непомеченные строки нужно не минусами пометить, а, наоборот, плюсами. Это зеркальные варианты.
Могу просто сделать маленький скриптик, проверяющий, что есть только пометки + и I и помечающий остальные позиции минусами.
Если не в лом, то сделайте, пожалуйста. А также и зеркальный ему скриптик, проверяющий, что есть только пометки – и X и помечающий остальные позиции плюсами.
Хотя и не понимаю, зачем.
Если кратко, то для существенного ускорения работы с Меню фильтров. Для более же развёрнутого пояснения причины надобности в этих скриптиках, мне нужно гораздо больше слов и поэтому пока что возьмите, пожалуйста, на веру. А потом, наверное, я смогу и на практических примерах показать зачем они мне.
buniak_a_h wrote: Tue 26 Jan, 2021 07:41 для этого я сделал возможность в список расширений ... включать отсутствующие в данный момент на панели расширения.
Безусловную практическую полезность данной опции я осознал, как только впервые ознакомился с Вашим скриптом. Даже и вне контекста всего комплекта сабжевых макросов в целом это сама по себе весьма впечатляющая фишка.
Last edited by Ann on Tue 26 Jan, 2021 12:23, edited 1 time 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 »

Ann wrote: Tue 26 Jan, 2021 08:24 доминирует отключение
Я не знаю, что такое "доминирует" в обсуждаемом контексте. Там, вроде, логика довольно хитрая. Во всяком случае при наличии хоть одного плюса нет никакого смысла что-то помечать минусом - они и так видны не будут.
Ann wrote: Tue 26 Jan, 2021 08:24 Для более же развёрнутого пояснения причины надобности … мне нужно гораздо больше слов … потом я смогу и на практических примерах показать зачем они мне.
Жду-не-дождусь. Как я буду машинкой управлять??? Теперь только об этом и буду думать.
Ann wrote: Tue 26 Jan, 2021 08:24 то сделайте, пожалуйста. А также и зеркальный ему скриптик,
Сформулируйте требование точно, пожалуйста! При наличии только плюсов все непомеченные помечать минусами - это я понял. Хотя для элемента №0 (папки) указывать минус нужно явно: это - исключение.
Если есть только минусы - все остальные помечать плюсами. Это я понял. Но что делать, если имеются и те, и другие? Ну, в нижней части МЕНЮ всё же просто: там, хотя бы, не пересекающиеся множества файлов. А если помечен пользовательский фильтр? Например, в пользовательском указана маска qqq.*, а в системном имеется *.lua. И вот первый помечен +, а второй - -. Будет ли виден файл qqq.lua ? Экспериментировать не буду! То, что я описал(до слов Это я понял), сделать легко. Плюс бонусом - в диалоговом режиме (для текущего фильтра пометить все непомеченные указанным символом).
Last edited by buniak_a_h on Tue 26 Jan, 2021 08:54, edited 1 time in total.
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: Tue 26 Jan, 2021 08:54Я не знаю, что такое "доминирует" в обсуждаемом контексте.
Виноват, не верно выразился, поспешил. В том посте поправлю: "в фильтре доминирует выставлено только отключение показа файлов с определённым расширением".
Ann wrote: Tue 26 Jan, 2021 08:24 Для более же развёрнутого пояснения причины надобности … мне нужно гораздо больше слов … потом я смогу и на практических примерах показать зачем они мне.
Жду-не-дождусь. Как я буду машинкой управлять??? Теперь только об этом и буду думать.
И действительно ведь смешно. Резонно уели. Но, честное слово, я ничуть не намеревался спесивничать, не нарочно так вышло. Типа "никогда раньше такого не было, и вот опять". Не обращайте, пожалуйста, в дальнейшем на подобное внимания. Это всего лишь недостатки моего воспитания.
при наличии хоть одного плюса нет никакого смысла что-то помечать минусом - они и так видны не будут.
Похоже, что и тут я оплошал. Ваше акцентирование на том, что "Скрипт всего лишь запоминает отметки +,-,I и X, проставленные в меню настройки фильтра", я неверно трактовал как то, что скрипт запоминает только позиции с отметками, а не отмеченные позиции игнорирует. И поэтому делал неверный вывод, что если пользователь внесёт изменения, то при восстановлении запомненного фильтра скриптом, восстановлены будут только отмеченные позиции.

Хотя, как я теперь уже полагаю, наверное, могли бы быть и два варианта восстановления запомненного. А именно: полное восстановление всех позиций, включая невыделенные, и частичное — восстановление только отмеченных позиций. И мне сейчас представляется, что второй вариант (с запоминанием и восстановлением только выделенных позиций) при необходимости для пользователя внесения изменений в первоначальный фильтр в определённых случаях может быть и предпочтительнее.
Сформулируйте требование точно, пожалуйста!
Не требование, разумеется, а скорее персональную просьбу.

По более зрелому размышлению прошу составить макрос, который бы, вне зависимости от имеющихся уже в меню каких либо пометок, делал бы именно так, как Вы и обозначили: "в диалоговом режиме для текущего фильтра пометить все непомеченные указанным символом".
А если помечен пользовательский фильтр? Например, в пользовательском указана маска qqq.*, а в системном имеется *.lua. И вот первый помечен +, а второй - -. Будет ли виден файл qqq.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: Tue 26 Jan, 2021 12:21 могли бы быть и два варианта восстановления запомненного. А именно: полное восстановление всех позиций, включая невыделенные, и частичное — восстановление только отмеченных позиций.
Вот это уже предметный разговор. Это примерно как заменительное и аддитивное восстановление. Заменительное - точная копия запомненного. Аддитивное - тоже есть два варианта: к имеющимся отметкам добавить те отметки, что были сохранены. А вот что делать с отметками, имеющимися и до восстановления, и в сохранённом варианте? Если они не совпадают? Либо оставить те, что у юзера были, либо заменить их на те, что был сохранены. Впрочем, вопрос легко решается.
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.4
  1. Реализовано три варианта восстановления фильтра: полная замена, аддитивное и аддитивно-заменительное.
    • При первом восстанавливаются в точности те отметки, что были сохранены. В т.ч. те пункты, что при сохранении не был отмечены, становятся неотмеченными независимо от состояния перед восстановлением.
    • При втором восстанавливаются сохранённые отметки, а те, что были отмечены при восстановлении, не заменяются независимо от состояния отметки в сохранённом фильтре.
    • При третьем варианте отметки, проставленные пользователем до восстановления, остаются нетронутыми (не очищаются), если они не были отмечены в сохранённом фильтре, а те, что были и в текущем фильтре, и в сохранённом, заменяются из сохранённого.
      Режим восстановления настраивается.
  2. Реализован макрос, отмечающий все не отмеченные пункты одним, указанным пользователем, символом. Макрос "повешен" на сочетание CtrlF-H
  3. Реализован макрос (флип-флоп): изначально текущее состояние фильтра запоминается, и фильтр сбрасывается. При следующем вызове фильтр восстанавливается из запомненного состояния. Горячая клавиша - CtrlF-C.
  4. Реализована выгрузка фильтров во внешний файл и загрузка обратная загрузка в окне настройки скрипта.
P/S. Окно настройки вызывается по пункту МЕНЮ настроек плагинов либо из макроса Scripts Browser
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: Tue 26 Jan, 2021 12:21 И действительно ведь смешно. Резонно уели. Но, честное слово, я ничуть не намеревался спесивничать, не нарочно так вышло. Типа "никогда раньше такого не было, и вот опять". Не обращайте, пожалуйста, в дальнейшем на подобное внимания. Это всего лишь недостатки моего воспитания.
Я, может, слишком вольно выразился. Вы меня действительно заинтриговали. Всё же опишите ситуацию, когда требуется пометить все позиции "обратным" символом.
Скрипт "пометить все непомеченные указанным символом" я сделал, но он игнорирует позицию 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 »

John Doe!
1. Линейный" пример я посылал, но в результате нашёл идиотский способ обхода: посылаю Ctrl+I до тех пор, пока не станет Area.Menu. Во время этой ситуации на активной панели открыта временная. Может, этот плагин или подтормаживает, или съедает keystrokes?
2. Нашёл интересную особенность: если с МЕНЮ работать с использованием АПИ диалога (например, пометить пункты через вызов DM_LISTUPDATE так:

Code: Select all

local Item = hDlg:send(F.DM_LISTGETITEM, 1, i)
hDlg:send(F.DM_LISTUPDATE, 1, {Index=i, Flags=bor(F.LIF_CHECKED, string.byte(Sim)), Text=Item.Text })
)
то внешне пункты прекрасно отмечаются нужными символами. Но для того, чтоб ФАР "увидел" изменения, надо на любом доступном пункте сымитировать гашение и обратно - восстановление пометки. Это удобный финт, но неужели нет никакой другой возможности сообщить МЕНЮ, что оно изменено и его надо перечитать?
Last edited by buniak_a_h on Wed 27 Jan, 2021 07:34, edited 1 time 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 »

Версия 1.1.5 (извините…)
  1. Добавлена настройка, надо ли в макросе дополнения учитывать элемент для папок
  2. Оптимизация, исправлены мелкие ошибки.
Post Reply

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