Сохранение/восстановление именованных контекстов

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

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

Сохранение контекста вызывается по CtrlS в панелях и в диалоге выхода из ФАРа (там появилась подсказка).
Восстановление контекста вызывается из пункта МЕНЮ плагинов. Надпись появится только в случае наличия сохранённых контекстов. Хотя это, наверно, будет переделываться.

Версия 1.4.4 от 10.05.2022
  1. Исправлена неточность запуска ФАРа в нескольких панелях ConEMU. Теперь для этого используется команда плагина, таким образом ФАР запускается с теми ключами, что указаны в настройках ConEMU.
  2. Исправлена неточность восстановления фильтров при включённой настройке плагина Временная панель
    [x] Menu from file list
    Эта настройка не учитывалась, что приводило к неправильному восстановлению фильтров по расширению и появлению "мусора" в командной строке.
SaveContext.1_4_4.7z
(47.73 KiB) Downloaded 189 times
Last edited by buniak_a_h on Tue 10 May, 2022 02:29, edited 36 times 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 »

Latest post of the previous page:

Shmuel,
buniak_a_h wrote: Sat 20 Mar, 2021 01:36
Shmuel wrote: Fri 19 Mar, 2021 23:40 Раскладывать модули (но не макрофайлы) по папкам … хорошая идея
Может, обоснуете? Почему макрофайлы раскладывать - идея плохая?
Присоединяюсь к вопросу. Очень полезно было бы узнать и Вашу практику, и Вашу аргументацию по этому вопросу. И, если не затруднит, то и с примерами бы.

buniak_a_h,
buniak_a_h wrote: Sat 20 Mar, 2021 00:57
Ann wrote: Fri 19 Mar, 2021 23:19 на первом уровне — по макрообластям их действия
А если в одном файле несколько макросов, делающих одно и то же в разных областях?
В один из разделов (на практике чаще получается, что в Shell или в Common; но и Dialog, и Editor тоже весьма заполнены) кладу активный макрос, а во все другие его копию с добавлением "хвостика" к окончанию файла: .lua.txt. Файл получается не активный и при заходе в папку такие файлы сразу же видны. (Умозрительно это как-то сложно описать, а на практике получается очень удобно.) И, да, это дублирование, но практика показывает, что весьма оправданное. А места сейчас на современных дисках более чем достаточно.
На самом деле первый уровень, есессно, автор
А вот при таком подходе свалка и запутанность просто неизбежны. Вот, ведь, и сами это подтверждаете:
Внутри иногда "свалка" (как, например, SimSU или IgorZ)
Имхо, расклад по авторам подходит разве что для хранения первичных архивных файлов, для истории и последующей раскладки скриптов по макрообластям, всё же.
Мои разбиты
А как именно они разбиты? Мне это очень интересно.
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: Sat 20 Mar, 2021 06:19 во все другие его копию с добавлением "хвостика" к окончанию файла: .lua.txt
Это сразу выключает многие сервисы, работающие от расширения файла. У меня это: Colorer (обходится переназначением, но достаёт), проверка синтаксиса, открытие файла модуля из редактора макрофайла (из строки …request…), автоматическое назначение кодировки, подсказка-подстановка и т.п. .
Ann wrote: Sat 20 Mar, 2021 06:19это дублирование
Ну, против этого есть хардлинки. И место не расходует, и изменения дублировать не надо.
Ann wrote: Sat 20 Mar, 2021 06:19 А как именно они разбиты? Мне это очень интересно.
Языковые сервисы - в папке Languages, внутри - по языкам Lua, Delphi, Go, Harbour - так как-то.
Те, что состоят не только из макрофайла (*.lng,*.hlf,*.cfg) - каждый в отдельной папке.
Остальные - в свалке-помойке. Как говорил наш мастер (капитан): «генеральная помойка судна» ;-)
Кроме того, у меня есть папка BAX (с моими скриптами) и BAX.Test (тоже мои, но на ранней стадии разработки или вообще эксперименты).

В личку.
Last edited by buniak_a_h on Sat 20 Mar, 2021 07:23, edited 1 time in total.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Сохранение/восстановление именованных контекстов

Post by Shmuel »

buniak_a_h wrote: Sat 20 Mar, 2021 01:36
Shmuel wrote: Fri 19 Mar, 2021 23:40 Раскладывать модули (но не макрофайлы) по папкам … хорошая идея
Может, обоснуете? Почему макрофайлы раскладывать - идея плохая?
Я не имел в виду, что это плохая идея, а только то, что, в отличие от модулей (где подобная раскладка даёт очевидную выгоду), для макрофайлов это всего лишь один из возможных способов раскладки.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Сохранение/восстановление именованных контекстов

Post by Shmuel »

Ann wrote: Sat 20 Mar, 2021 06:19 Очень полезно было бы узнать и Вашу практику, и Вашу аргументацию по этому вопросу.
Моя практика не очень типична, и для Вас, скорее всего, неприменима. Среди моего набора макрофайлов, кажется, только 2 файла не мои, поэтому вопрос о разбивке по авторам неактуален.

Что касается модулей, тут ситуация иная - есть много не моих модулей, которыми я пользуюсь, но они, в основном, общего применения (не только для Фара) и лежат отдельно от профиля Фара.
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 15 Mar, 2021 10:42 Версия 1.3.2

2. Добавлено формирование сообщения об ошибке при неудаче перехода на папку в плагиновой панели. При этом код и текст ошибки формируются системой и от меня не зависят. Например, при переходе внутрь «битого» архива формируется сообщение об отсутствии файла
Сегодня при восстановлении в Фаре на внешнем носителе одного из импортированных контекстов получил следующее сообщение:

Code: Select all

Восстановление контекста

Неудача восстановления бывшей активной панели
Режим сортировки 100700 не восстановлен
Неудача восстановления бывшей пассивной панели
Режим сортировки 100700 не восстановлен

0x00000000 - Операция успешно завершена.
И это было очень актуально и информативно. Однозначно полезная фича.
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 22 Mar, 2021 14:15
buniak_a_h wrote: Mon 15 Mar, 2021 10:42 Версия 1.3.2
2. Добавлено формирование сообщения об ошибке при неудаче перехода на папку в плагиновой панели. …
Сегодня при восстановлении в Фаре на внешнем носителе одного из импортированных контекстов получил следующее сообщение:

Code: Select all

Восстановление контекста
…
0x00000000 - Операция успешно завершена.
И это было очень актуально и информативно. Однозначно полезная фича.
Я постараюсь сделать так, чтобы системное сообщение об ошибке не выводилось, если ошибки нет. НО!!! Я уверен, что это должна делать функция far.Message: если GetLastError возвращает 0, то ключ 'e' учитываться не должен от слова совсем. Это я так думаю. Ведь нет возможности проверить код ошибки и потом вывести соответствующее сообщение (ну, не подключая модули ffi).
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. На самом деле я не понял: это было сообщение об ошибке, или наоборот - типо меня похвалили? ;-)
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, Разумеется, похвалил. Сообщение сразу же дало знать чего не хватает в целевом Фаре.
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 22 Mar, 2021 16:50 buniak_a_h, Разумеется, похвалил. Сообщение сразу же дало знать чего не хватает в целевом Фаре.
Понятно. Делалось как раз чтобы понять, что не так при тестировании на Ваших выгрузках. Надоело в отладке смотреть :-)
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: Mon 22 Mar, 2021 15:56 если GetLastError возвращает 0, то ключ 'e' учитываться не должен от слова совсем.
Что значит "не должен". Явно же выводится, и всегда выводился.
Если не считаете это правильным поведением - открывайте тикет на мантисе или гитхабе.
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: Mon 22 Mar, 2021 17:29 Что значит "не должен"
Из описания флага:
Если тип ошибки, возвращаемый функцией GetLastError, известен Far Manager'у или Windows, то описание ошибки будет выведено после строк, переданных плагином.
Я это понял так (неправильно): если тип ошибки известен, то он выводится. А если нет - ничего не выводится. Оказывается, всё равно выводится.
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,

После неаккуратного выхода из Быстрого просмотра в режиме широкой панели они (панели) остались несимметричных размеров:
shirokiy.png

И я в экспериментальных целях попробовал из этой позиции восстанавливать контексты. И, как я и ожидал, они восстанавливались в этой же позиции.

Разумеется, опытному пользователю Фара размеры панелей восстановить можно запросто простым шоткатом. А вот не слишком наделённые опытом могут ситуативно и в ступор впадать.

При этом усложнять код самого сабжевого макроса для решения такой банальной проблемки однозначно не целесообразно. Поэтому я бы попросил вернуться к обсуждению вопроса о возможности применения SaveContext.mnu для выполнения команд, последующих за восстановлением контекста. Тем более, что это уже второй вполне реальный случай (первый – это переключение показа форм пути в заголовке панели), когда такая фишка может понадобиться.
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: Wed 24 Mar, 2021 08:53 И, как я и ожидал, они восстанавливались в этой же позиции.
Сюрприз! Я, вроде, не делал такого… Хотя это правильно. Видимо, где-то само делается. :-)
Ann wrote: Wed 24 Mar, 2021 08:53 вернуться к обсуждению вопроса о возможности применения SaveContext.mnu
Я у себя попробовал… К сожалению, ФАР не предоставляет удобного интерфейса для написания mnu-файлов (если он называется не FarMenu.ini). Так что засомневался я в именно меню. А синтаксис там имеется.
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: Wed 24 Mar, 2021 09:50 К сожалению, ФАР не предоставляет удобного интерфейса для написания mnu-файлов (если он называется не FarMenu.ini)
А вот этого я не понял.

Ведь если дело всего лишь в названии файла, а структура mnu-файла соответствует структуре FarMenu.ini, то ведь командой mf.usermenu(2,"SaveContext.mnu") этот файл можно вызвать как обычный локальный (местный) FarMenu.ini.

При этом команда mf.usermenu(2,"file.name") вроде бы поддерживает только развёрнутые полные имена файлов и не воспринимает переменные типа %FarProfile%. Но ведь о том, чтобы она стала это делать, наверное, можно попросить фартим?

Или же сама структура mnu-файла противоречит структуре FarMenu.ini и дело сложнее?
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: Wed 24 Mar, 2021 12:55 структура mnu-файла
Не определена, но чтобы на него (на mnu-файл) можно было напустить mf.usermenu, у него должна быть такая же структура, как у farmenu.ini .
Ann wrote: Wed 24 Mar, 2021 12:55 А вот этого я не понял.
Ну, редактировать farmenu.ini можно прямо из самого меню. Типа "добавить пункт/подменю, удалить, изменить" и т.п. .Когда farmenu.ini уже есть, править его легко. Но изначально воспроизвести структуру меню-файла я не могу.
Впрочем, за идею спасибо. Набрать в комстроке lua:mf.usermenu(2,'SaveContext.mnu') - и можно использовать интерфейс.
Ок, сделаю.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

Сохранение/восстановление именованных контекстов

Post by aflexus »

buniak_a_h, если нажать "отметить все" (+), а после "снять отметку" (-) и нажать "Ок", все контесты удалятся. Это так задумано или баг?

И еще маленькая просьба: можно ли в хоткей для выделения, кроме обычно Insert, добавить и Numpad-Insert?

Спасибо за отличный скрипт! )))
Post Reply

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