макрос для вызова плага 7-zip, для обхода баги в фаре
проблема с вложенным запуском плага через ассоциации
Проблема вот в чём. У меня стоят оба архиваторных плага - и мультиарк, и 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: Ось точно не причём. Под вистой таже самая проблема.
+----------------------- 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: Ось точно не причём. Под вистой таже самая проблема.
Re: проблема с вложенным запуском плага через ассоциации
Вы не правы — эта особенность давно всем известна. Я думаю, просто, кроме вас, все понимают, что для того чтоб вытащить член из штанов, нужно сначала вытащить его из трусов, вот и не жалуется никто
Re: проблема с вложенным запуском плага через ассоциации
Я что-то не понял, к чему этот пассаж? К тому, что чтобы просмотреть вложенный архив, его сначала надо вручную распаковать куда-то? Чушь, ручная (повторяю ручная) распаковка вложенного архива не нужна, что доказывается прекрасной работой вложенного просмотра в случае, когда этот просмотр инициируется не через ассоциации (точнее, не через ком.строку с префиксом).
То есть, если войти во вложенный архив по Enter (в случае, если на Enter не посажено ассоциации), то всё прекрасно работает - так, дефолтный мультиарк нормально отрабатывает при выхове и из мультиарка, и из 7zip, так же и дефолтный 7zip нормально работает и из мультиарка, и из 7zip. А вот недефолтный мультиарк вызвать (через префикс) для вложенного архива уже не получится (точнее, префикс пытается найти архив в текущем каталоге, и в случае успеха заменяет им уже открытый архив - из-за этого и происходит выход из "вложенного" архива мимо родительского), зато недефолтный 7zip вызвать через префикс можно, но замена уже открытого архива всё равно происходит (и, видимо, поскольку вложенный архив оказывается открыт, то удаление временного каталога с ним оказывается неудачным).
То есть, если войти во вложенный архив по Enter (в случае, если на Enter не посажено ассоциации), то всё прекрасно работает - так, дефолтный мультиарк нормально отрабатывает при выхове и из мультиарка, и из 7zip, так же и дефолтный 7zip нормально работает и из мультиарка, и из 7zip. А вот недефолтный мультиарк вызвать (через префикс) для вложенного архива уже не получится (точнее, префикс пытается найти архив в текущем каталоге, и в случае успеха заменяет им уже открытый архив - из-за этого и происходит выход из "вложенного" архива мимо родительского), зато недефолтный 7zip вызвать через префикс можно, но замена уже открытого архива всё равно происходит (и, видимо, поскольку вложенный архив оказывается открыт, то удаление временного каталога с ним оказывается неудачным).
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: проблема с вложенным запуском плага через ассоциации
1) Пишется макрос, выполняющий следующие действия:AVB wrote:если войти во вложенный архив по Enter [...], то всё прекрасно работает
- - включение опции "Plugin is used by default" плагина 7-zip;
- вход в архив по Enter или CtrlPgDn;
- отключение опции "Plugin is used by default" плагина 7-zip;
macro:post [текст вышеозначенного макроса]
Re: проблема с вложенным запуском плага через ассоциации
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
Как временное решение, пока не пофиксили фар, идея кажется прекрасной ("супер, супер" (c) Бессон), а вот практически возникает та проблема, что происходит зацикливание из-за рекурсивного вызова ^PgDn. Вариант использования в макросе Enter-а или перенос макроса на ассоциацию по Enter не прокатывает, поскольку речь может идти, например, об экзешнике.DrKnS wrote: 2) Для архивов, которые требуется открывать посредством 7-zip, пишется ассоциация вида:
macro:post [текст вышеозначенного макроса]
Re: проблема с вложенным запуском плага через ассоциации
Ага, спасибо, вот что получилось: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 идёт как "F9 End Left Enter Down Down Down Down Enter 7" - как/можно ли это сделать более коротко/универсально? Есть ли возможность одним шагом вызвать диалог настройки плага, не через посылку клавиш движения по меню?
- сейчас макрос в конце сбрасывает настройку плага (Subtract) - но можно ли сохранить значение галки в начале макроса и востановить в конце?
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: проблема с вложенным запуском плага через ассоциации
В общем случае - пока никак.AVB wrote:как/можно ли это сделать более коротко/универсально?
Возможность есть - AltShiftF9 - но здесь она не поможет.AVB wrote:Есть ли возможность одним шагом вызвать диалог настройки плага, не через посылку клавиш движения по меню?
Dlg.GetValue, переменные.AVB wrote:можно ли сохранить значение галки в начале макроса и востановить в конце?
Re: проблема с вложенным запуском плага через ассоциации
Да, вижу.DrKnS wrote:Возможность есть - AltShiftF9 - но здесь она не поможет.AVB wrote:Есть ли возможность одним шагом вызвать диалог настройки плага, не через посылку клавиш движения по меню?
Спасибо, попробовал, вот что получилось:DrKnS wrote:Dlg.GetValue, переменные.AVB wrote:можно ли сохранить значение галки в начале макроса и востановить в конце?
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
Code: Select all
$if (Dlg.ItemType != 5) $Exit $end
Code: Select all
%s = Dlg.GetValue (Dlg.GetValue (0, 6), 0); Add Enter Esc
5. Восстанавливаем значением чекбокса и выходим:
Code: Select all
$if (!%s) Subtract $else Add $end Enter Esc
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: проблема с вложенным запуском плага через ассоциации
Если делать проверки не линейно, как здесь: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
И вообще, обсуждение уже ушло достаточно далеко от сабжа.
Дальше по макросам - в соответствующем форуме.
макрос для вызова плага 7-zip, для обхода баги в фаре
Эта тем - продолжение темы проблема с вложенным запуском плага через ассоциации.
(Второй вариант я не тестировал, так что не в курсе, можно ли Menu.Select использовать таким образом, без присваивания и без ";". Если нельзя - выигрыш будет ещё меньше). Так что пусть уже останется вариант с $exit, мне как параноику в этом плане спокойней, шанс неправильной работы минимизируется ещё больше.
В данном случае выигрыш будет копеечный, а сложность управления/восприятия макроса усложнится на порядок. Поэтому я и выбрал с самого начала вариант с exit, минимизируя размер условных конструкций.DrKnS wrote: Если делать проверки не линейно, как здесь:
а иерархично:
- писанины должно получиться меньше.
Там не только проверки ради проверок, там выбор по языку, поэтому много не выкинешь. Сравни: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
Ага, а вот это хорошая идея. Вот что получается (переменная просто уходит; молча уйти нельзя, нужно закрыть диалог и послать ^PgDn):DrKnS wrote: Если %s==1 - (т.е. и так было включено) - имеет смысл посылать CtrlPgDn и молча выходить, Add не посылать, вторую часть макроса не выполнять.
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:Являются ли булевы операторы && и || ленивыми
Re: проблема с вложенным запуском плага через ассоциации
Не так уж и далеко - обсуждается-то как раз макрос для маскировки исходной проблемы. Но продолжение я всё же перенёс сюда.DrKnS wrote: И вообще, обсуждение уже ушло достаточно далеко от сабжа.
Re: макрос для вызова плага 7-zip, для обхода баги в фаре
капец. чувак на форуме всего 4 дня, а нафлудил уже как будто месяц тут тусит. сорри...
FARFlipper, FARdroid, qPlayEx, Mr.Ripper
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: макрос для вызова плага 7-zip, для обхода баги в фаре
Можно. Ещё она возвращает номер позиции - это тоже можно использовать.AVB wrote:можно ли Menu.Select использовать таким образом
А нету. Видимо, никто ранее этим вопросом не интересовался.AVB wrote:Сам я в энциклопедии заявлений на тему ленивости выражений не встретил, но может просто проглядел?
CrOm
А ты far.support почитай :)
макрос для вызова плага 7-zip, для обхода баги в фаре
А вот не надо. Меня там полгода не было (у меня и другие заботы есть, не всё же мне один фар обсуждать), но и тогда я там был далеко не единственный. Сюда же я выполз исключительно по той причине, чтобы хоть немного повысить шанс достучаться до фартима. Разные люди, спасибо им, некоторые мои рапорты в мантис направляли, но список всё ещё далёк от исчерпания.DrKnS wrote: CrOm
А ты far.support почитай