макрос для вызова плага 7-zip, для обхода баги в фаре

Здесь обсуждается всё, что касается макросов.
AVB
Posts: 49
Joined: Fri 25 May, 2018 22:40

проблема с вложенным запуском плага через ассоциации

Post by AVB »

Проблема вот в чём. У меня стоят оба архиваторных плага - и мультиарк, и 7zip, причём второй запускается через ассоциации:

+----------------------- 7-Zip configuration
¦ [ ] Плагин используется по умолчанию

+----------------- Редактирование ассоциаций файлов
¦ Одна или несколько масок файлов:
¦ *
¦ Описание ассоциации:
¦ плагин 7-zip
¦——————————————————————————————————————————————————
¦ Команда, выполняемая по Enter:
¦
¦ Команда, выполняемая по Ctrl-PgDn:
¦ 7-zip:"!.!"

Если кому неясно, зачем это сделано, объясняю: плаг 7zip хорош, но не универсален (к примеру, не умеет паковать в чужие форматы - например, .rar). К тому же у каждого из этих плагов есть свои закидоны и баги, так что приходиться между ними периодически переключаться.

Проблема в том, что если есть архив в архиве, что при входе через ассоциации в архив, вложенный в другой архив (например, .tar.gz), последующий выход возвращает не в родительский архив, а в исходный каталог (и курсор
позиционируется в начало панели), а в %temp% остаётся временный каталог с вложенным архивом. Причём вызов плага напрямую (F11/7-Zip) на имени вложенного архива не срабатывает.

Как я понимаю, проблема в том, что при повторном запуске плага через префикс создаётся его вторая копия, а первая
копия как бы убивается. Я не уверен, что это проблема именно плага, а не самого фара, поэтому отписываюсь здесь (ранее я полагал, что виноват именно плаг, пока не проверил работу напрямую, не через ассоциации).

Отсюда вопрос: что делать? Предложение включить плаг 7zip по умолчанию отвергается, потому что при этом по Shift-F1 перестаёт работать создание не-7z архивов, а по Shift-F3 становятся недоступны дополнительные команды. Вопрос "кто виноват" тоже интересен, хотя и вторичен, но у меня есть подозрение, что это недоработка (а то и бага) в самом фаре. Странно, что эту проблему не рапортовали фартиму раньше, ведь идея с плагом на ассоциацих я получил вроде от членов фартима (кажется даже, от Skirda).

PS: Ось точно не причём. :Rose: Под вистой таже самая проблема.
User avatar
[e]Bu$ter
Posts: 792
Joined: Mon 30 May, 2005 23:05
Location: Беларусь, Минск
Contact:

Re: проблема с вложенным запуском плага через ассоциации

Post by [e]Bu$ter »

Вы не правы — эта особенность давно всем известна. Я думаю, просто, кроме вас, все понимают, что для того чтоб вытащить член из штанов, нужно сначала вытащить его из трусов, вот и не жалуется никто :D
AVB
Posts: 49
Joined: Fri 25 May, 2018 22:40

Re: проблема с вложенным запуском плага через ассоциации

Post by AVB »

Я что-то не понял, к чему этот пассаж? К тому, что чтобы просмотреть вложенный архив, его сначала надо вручную распаковать куда-то? Чушь, ручная (повторяю ручная) распаковка вложенного архива не нужна, что доказывается прекрасной работой вложенного просмотра в случае, когда этот просмотр инициируется не через ассоциации (точнее, не через ком.строку с префиксом).

То есть, если войти во вложенный архив по Enter (в случае, если на Enter не посажено ассоциации), то всё прекрасно работает - так, дефолтный мультиарк нормально отрабатывает при выхове и из мультиарка, и из 7zip, так же и дефолтный 7zip нормально работает и из мультиарка, и из 7zip. А вот недефолтный мультиарк вызвать (через префикс) для вложенного архива уже не получится (точнее, префикс пытается найти архив в текущем каталоге, и в случае успеха заменяет им уже открытый архив - из-за этого и происходит выход из "вложенного" архива мимо родительского), зато недефолтный 7zip вызвать через префикс можно, но замена уже открытого архива всё равно происходит (и, видимо, поскольку вложенный архив оказывается открыт, то удаление временного каталога с ним оказывается неудачным).
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: проблема с вложенным запуском плага через ассоциации

Post by DrKnS »

AVB wrote:если войти во вложенный архив по Enter [...], то всё прекрасно работает
1) Пишется макрос, выполняющий следующие действия:
  • - включение опции "Plugin is used by default" плагина 7-zip;
    - вход в архив по Enter или CtrlPgDn;
    - отключение опции "Plugin is used by default" плагина 7-zip;
2) Для архивов, которые требуется открывать посредством 7-zip, пишется ассоциация вида:
macro:post [текст вышеозначенного макроса]
AVB
Posts: 49
Joined: Fri 25 May, 2018 22:40

Re: проблема с вложенным запуском плага через ассоциации

Post by AVB »

DrKnS wrote: 1) Пишется макрос, выполняющий следующие действия:
  • - включение опции "Plugin is used by default" плагина 7-zip;
    - вход в архив по Enter или CtrlPgDn;
    - отключение опции "Plugin is used by default" плагина 7-zip;

Code: Select all

F9 End Left Enter Down Down Down Down Enter 7 + Enter Esc
CtrlPgDn
F9 End Left Enter Down Down Down Down Enter 7 - Enter Esc
DrKnS wrote: 2) Для архивов, которые требуется открывать посредством 7-zip, пишется ассоциация вида:
macro:post [текст вышеозначенного макроса]
Как временное решение, пока не пофиксили фар, идея кажется прекрасной ("супер, супер" (c) Бессон), а вот практически возникает та проблема, что происходит зацикливание из-за рекурсивного вызова ^PgDn. Вариант использования в макросе Enter-а или перенос макроса на ассоциацию по Enter не прокатывает, поскольку речь может идти, например, об экзешнике.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: проблема с вложенным запуском плага через ассоциации

Post by DrKnS »

AVB wrote:происходит зацикливание
Тогда в морг ассоциацию, макрос - непосредственно на CtrlPgDn.
AVB
Posts: 49
Joined: Fri 25 May, 2018 22:40

Re: проблема с вложенным запуском плага через ассоциации

Post by AVB »

DrKnS wrote: Тогда в морг ассоциацию, макрос - непосредственно на CtrlPgDn.
Ага, спасибо, вот что получилось:

Code: Select all

REGEDIT4

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\CtrlPgDn]
"Sequence"="F9 End Left Enter Down Down Down Down Enter 7 Add Enter Esc CtrlPgDn F9 End Left Enter Down Down Down Down Enter 7 Subtract Enter Esc"
"DisableOutput"=dword:00000001
"NoFolders"=dword:00000001
"Description"="TMP: solution for wrong nested call of non-default 7-Zip plugin"

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\CtrlNum3]
"Sequence"="F9 End Left Enter Down Down Down Down Enter 7 Add Enter Esc CtrlPgDn F9 End Left Enter Down Down Down Down Enter 7 Subtract Enter Esc"
"DisableOutput"=dword:00000001
"NoFolders"=dword:00000001
"Description"="TMP: solution for wrong nested call of non-default 7-Zip plugin"
А пока суть да дело и вложенный запуск пока не починили, есть ли возможность сделать эти макросы более универсальными? Чтобы они не зависели от смены языка, смены порядка пунктов в меню или текущей настройки 7-zip? Сформулируем так:

- сейчас доступ в настройки 7-zip идёт как "F9 End Left Enter Down Down Down Down Enter 7" - как/можно ли это сделать более коротко/универсально? Есть ли возможность одним шагом вызвать диалог настройки плага, не через посылку клавиш движения по меню?
- сейчас макрос в конце сбрасывает настройку плага (Subtract) - но можно ли сохранить значение галки в начале макроса и востановить в конце?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: проблема с вложенным запуском плага через ассоциации

Post by DrKnS »

AVB wrote:как/можно ли это сделать более коротко/универсально?
В общем случае - пока никак.
AVB wrote:Есть ли возможность одним шагом вызвать диалог настройки плага, не через посылку клавиш движения по меню?
Возможность есть - AltShiftF9 - но здесь она не поможет.
AVB wrote:можно ли сохранить значение галки в начале макроса и востановить в конце?
Dlg.GetValue, переменные.
AVB
Posts: 49
Joined: Fri 25 May, 2018 22:40

Re: проблема с вложенным запуском плага через ассоциации

Post by AVB »

DrKnS wrote:
AVB wrote:Есть ли возможность одним шагом вызвать диалог настройки плага, не через посылку клавиш движения по меню?
Возможность есть - AltShiftF9 - но здесь она не поможет.
Да, вижу. :(
DrKnS wrote:
AVB wrote:можно ли сохранить значение галки в начале макроса и востановить в конце?
Dlg.GetValue, переменные.
Спасибо, попробовал, вот что получилось:

Code: Select all

REGEDIT4
[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\CtrlPgDn]
"Sequence"="F9 $if (!Menu.Select (\"Options\", 0) && !Menu.Select (\"Параметры\", 0)) $Exit $end Enter $if (!Menu.Select (\"Параметры внешних модулей\", 0) && !Menu.Select (\"Plugins configuration\", 0)) $Exit $end Enter $if (!Menu.Select (\"7-Zip\", 0)) $Exit $end Enter $if (Dlg.ItemType != 5) $Exit $end %s = Dlg.GetValue (Dlg.GetValue (0, 6), 0); Add Enter Esc CtrlPgDn F9 $if (!Menu.Select (\"Options\", 0) && !Menu.Select (\"Параметры\", 0)) $Exit $end Enter $if (!Menu.Select (\"Параметры внешних модулей\", 0) && !Menu.Select (\"Plugins configuration\", 0)) $Exit $end Enter $if (!Menu.Select (\"7-Zip\", 0)) $Exit $end Enter $if (Dlg.ItemType != 5) $Exit $end $if (!%s) Subtract $else Add $end Enter Esc"
"DisableOutput"=dword:00000001
"NoFolders"=dword:00000001
"Description"="TMP: solution for wrong nested call of non-default 7-Zip plugin"
Комментарий к коду в развёрнутом виде:
1. Вызываем диалог конфигурации плага 7-zip, независимо от языка (точнее, допускается русский и английский варианты) и положения пунктов меню:

Code: Select all

F9
$if (!Menu.Select ("Options", 0) &&
     !Menu.Select ("Параметры", 0))
  $Exit $end Enter
$if (!Menu.Select ("Параметры внешних модулей", 0) &&
     !Menu.Select ("Plugins configuration", 0))
  $Exit $end Enter
$if (!Menu.Select ("7-Zip", 0)) $Exit $end Enter
2. Проверяем, что попали на чекбокс (мало ли, в новых версиях плага диалог может быть другой):

Code: Select all

$if (Dlg.ItemType != 5) $Exit $end
3. запоминаем чекбокс, устанавливаем его и выходим из диалога:

Code: Select all

%s = Dlg.GetValue (Dlg.GetValue (0, 6), 0); Add Enter Esc
4. Вызываем CtrlPgDn, потом опять открываем конфигурацию (повторяем шаги 1-2).
5. Восстанавливаем значением чекбокса и выходим:

Code: Select all

$if (!%s) Subtract $else Add $end Enter Esc
Я всё правильно сделал? Есть идеи по улучшению/сокращению (не считая предложений выкинуть проверки нафиг)? Если более простой способ восстановить чебокс, нежели через $if? Являются ли булевы операторы && и || ленивыми (то есть вычисляется ли второе подвыражение в случае, если достаточно значения первого подвыражения)?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: проблема с вложенным запуском плага через ассоциации

Post by DrKnS »

AVB wrote:Есть идеи по улучшению/сокращению
Если делать проверки не линейно, как здесь:

Code: Select all

$if(!a) $exit $end [что-то сделали] $if(!b) $exit $end [ещё что-то сделали]
а иерархично:

Code: Select all

$if(a) [что-то сделали] $if(b) [ещё что-то сделали] $end $end
- писанины должно получиться меньше.

Проверки во второй части макроса - излишни, за сеанс его работы меню фара и диалог плагина не изменятся.

Если %s==1 - (т.е. и так было включено) - имеет смысл посылать CtrlPgDn и молча выходить, Add не посылать, вторую часть макроса не выполнять.
AVB wrote:Если более простой способ восстановить чебокс, нежели через $if?
Нет.
AVB wrote:Являются ли булевы операторы && и || ленивыми
А что проще - самому проверить или на форуме спросить? :-)
хинт: macro:post $if(0 && msgbox("","",0)) F1 $end

И вообще, обсуждение уже ушло достаточно далеко от сабжа.
Дальше по макросам - в соответствующем форуме.
AVB
Posts: 49
Joined: Fri 25 May, 2018 22:40

макрос для вызова плага 7-zip, для обхода баги в фаре

Post by AVB »

Эта тем - продолжение темы проблема с вложенным запуском плага через ассоциации.
DrKnS wrote: Если делать проверки не линейно, как здесь:
а иерархично:
- писанины должно получиться меньше.
В данном случае выигрыш будет копеечный, а сложность управления/восприятия макроса усложнится на порядок. Поэтому я и выбрал с самого начала вариант с exit, минимизируя размер условных конструкций.
DrKnS wrote: Проверки во второй части макроса - излишни, за сеанс его работы меню фара и диалог плагина не изменятся.
Там не только проверки ради проверок, там выбор по языку, поэтому много не выкинешь. Сравни:

Code: Select all

$if (!Menu.Select ("Options", 0) && !Menu.Select ("Параметры", 0)) $Exit $end Enter
$if (!Menu.Select ("Options", 0)) Menu.Select ("Параметры", 0) $end Enter
(Второй вариант я не тестировал, так что не в курсе, можно ли Menu.Select использовать таким образом, без присваивания и без ";". Если нельзя - выигрыш будет ещё меньше). Так что пусть уже останется вариант с $exit, мне как параноику в этом плане спокойней, шанс неправильной работы минимизируется ещё больше.
DrKnS wrote: Если %s==1 - (т.е. и так было включено) - имеет смысл посылать CtrlPgDn и молча выходить, Add не посылать, вторую часть макроса не выполнять.
Ага, а вот это хорошая идея. Вот что получается (переменная просто уходит; молча уйти нельзя, нужно закрыть диалог и послать ^PgDn):

Code: Select all

<вызываем диалог конфигурации плага>
$if (Dlg.ItemType != 5 ||
     Dlg.GetValue (Dlg.GetValue (0, 6), 0))
      Esc Esc CtrlPgDn $Exit $end
Add Enter Esc CtrlPgDn
<вызываем диалог конфигурации плага>
Subtract Enter Esc
DrKnS wrote:
AVB wrote:Являются ли булевы операторы && и || ленивыми
А что проще - самому проверить или на форуме спросить? :-)
Спросить проще. :oops: Тем более, что у вопроса есть и вторая сторона: одно зависеть от поведения конкретной реализации/версии, не зная, как оно будет вести себя в дальнейшем, другое дело, если есть какой-то документ на эту тему. Сам я в энциклопедии заявлений на тему ленивости выражений не встретил, но может просто проглядел?
AVB
Posts: 49
Joined: Fri 25 May, 2018 22:40

Re: проблема с вложенным запуском плага через ассоциации

Post by AVB »

DrKnS wrote: И вообще, обсуждение уже ушло достаточно далеко от сабжа.
Не так уж и далеко - обсуждается-то как раз макрос для маскировки исходной проблемы. Но продолжение я всё же перенёс сюда.
User avatar
CrOm
Posts: 1428
Joined: Tue 02 Aug, 2005 21:02
Location: Омск
Been thanked: 1 time

Re: макрос для вызова плага 7-zip, для обхода баги в фаре

Post by CrOm »

капец. чувак на форуме всего 4 дня, а нафлудил уже как будто месяц тут тусит. сорри...
FARFlipper, FARdroid, qPlayEx, Mr.Ripper
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: макрос для вызова плага 7-zip, для обхода баги в фаре

Post by DrKnS »

AVB wrote:можно ли Menu.Select использовать таким образом
Можно. Ещё она возвращает номер позиции - это тоже можно использовать.
AVB wrote:Сам я в энциклопедии заявлений на тему ленивости выражений не встретил, но может просто проглядел?
А нету. Видимо, никто ранее этим вопросом не интересовался.


CrOm
А ты far.support почитай :)
AVB
Posts: 49
Joined: Fri 25 May, 2018 22:40

макрос для вызова плага 7-zip, для обхода баги в фаре

Post by AVB »

DrKnS wrote: CrOm
А ты far.support почитай :)
А вот не надо. Меня там полгода не было (у меня и другие заботы есть, не всё же мне один фар обсуждать), но и тогда я там был далеко не единственный. Сюда же я выполз исключительно по той причине, чтобы хоть немного повысить шанс достучаться до фартима. Разные люди, спасибо им, некоторые мои рапорты в мантис направляли, но список всё ещё далёк от исчерпания.
Post Reply

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