Перестал работать макрос

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
User avatar
Px
Posts: 826
Joined: Fri 08 Sep, 2006 15:52
Location: Вишнёвый (под Киевом)
Contact:

Перестал работать макрос

Post by Px »

На билдах 2287/2309 перестал работать следующий макрос (структурировал для удобного чтения)

Code: Select all

%html=APanel.Current;
$if (fattr(fsplit(%html,0x04)+"_files") == 0x00000010)
     panel.setpos(0,fsplit(%html,0x04)+"_files")
     Ins
$end
$if (fattr(fsplit(%html,0x04)+".files") == 0x00000010)
     panel.setpos(0,fsplit(%html,0x04)+".files")
     Ins
$end
panel.setpos(0,%html)
Ins
На 2275 ок
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Post by Skirda »

ожидаемый эффект?
User avatar
Px
Posts: 826
Joined: Fri 08 Sep, 2006 15:52
Location: Вишнёвый (под Киевом)
Contact:

Post by Px »

Skirda wrote:ожидаемый эффект?
Есть пара файл/папка (сохранённая веб-страница), при нажатии пометки на файле, должна пометится и папка, на новых билдах помечается только файл
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

при нажатии пометки на файле, должна пометится и папка
у меня на 2309 ровно это и происходит.
User avatar
Px
Posts: 826
Joined: Fri 08 Sep, 2006 15:52
Location: Вишнёвый (под Киевом)
Contact:

Post by Px »

Очень интересно...
Теперь вопрос от чайника - есть средства для отладки макроса?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Post by Skirda »

Px wrote:Очень интересно...
Судя по макросу - курсор должен стоять на файле...
У меня в этом случае тоже нет проблем
Px wrote:Теперь вопрос от чайника - есть средства для отладки макроса?
Пока нет.
User avatar
Px
Posts: 826
Joined: Fri 08 Sep, 2006 15:52
Location: Вишнёвый (под Киевом)
Contact:

Post by Px »

Skirda wrote:
Px wrote:Очень интересно...
Судя по макросу - курсор должен стоять на файле...
У меня в этом случае тоже нет проблем
Курсор должен вернуться на файл, после пометки папки, и пометить файл.
Предыдущие тесты проводились на работе, добрался до дома, тут сделал хитрее - х32-ую версию не обновлял, обновил х64-ую, проблема воспроизводится стабильно. Принялся искать причины проблемы, при старте Far-а, когда он читает макросы из реестра, на указанном макросе выскакивают 2 ошибки

Code: Select all

0.76452839	Far.exe:1188	QueryValue	HKCU\Software\Far\KeyMacros\Shell\CtrlIns\Sequence	BUFFER OVERFLOW		
0.76454306	Far.exe:1188	QueryValue	HKCU\Software\Far\KeyMacros\Shell\CtrlIns\Sequence	SUCCESS	"%html=APanel.Current; $if (fattr(fsplit(%html,0x04)+"_files") == 0x00000010) panel.setpos(0,fsplit(%html,0x04)+"_files") Ins $end $if (fattr(fsplit(%html,0x04)+".files") == 0x00000010) panel.setpos(0,fsplit(%html,0x04)+".files") Ins $end panel.setpos..."	
0.76455170	Far.exe:1188	QueryValue	HKCU\Software\Far\KeyMacros\Shell\CtrlIns\Sequence	BUFFER OVERFLOW		
0.76456529	Far.exe:1188	QueryValue	HKCU\Software\Far\KeyMacros\Shell\CtrlIns\Sequence	SUCCESS	"%html=APanel.Current; $if (fattr(fsplit(%html,0x04)+"_files") == 0x00000010) panel.setpos(0,fsplit(%html,0x04)+"_files") Ins $end $if (fattr(fsplit(%html,0x04)+".files") == 0x00000010) panel.setpos(0,fsplit(%html,0x04)+".files") Ins $end panel.setpos..."	
На других макросах ошибок нет
Тип переменной в реестре (REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ) на работу не влияет. Ошибка вылазит и на предыдущих билдах, но макрос работает. Ещё одно - по-умолчанию макрос висел просто на Ins, перевесил в тестовых целях на Ctrl+Ins, в новых билдах не помечается ни папка, ни файл, как будто бы макрос не загрузился на самом деле
Какие есть мысли в какую сторону копать?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

Px wrote:на указанном макросе выскакивают 2 ошибки
Это не ошибка, так и задумано.

Фар этот макрос загружает? (т.е. если 2 раза нажать Ctrl. и потом Ins - предлагает удалить или молча вставляет Ins в поле ввода?)

Через FarCmds макрос запускается? (macro:post ...)?

Ну и вообще-то "официально" fattr с панелями не работает, попробуй заменить его на panel.fattr(0, ...
User avatar
Px
Posts: 826
Joined: Fri 08 Sep, 2006 15:52
Location: Вишнёвый (под Киевом)
Contact:

Post by Px »

DrKnS wrote:Фар этот макрос загружает? (т.е. если 2 раза нажать Ctrl. и потом Ins - предлагает удалить или молча вставляет Ins в поле ввода?)
Сейчас пока нахожусь в игровой системе, тут ситуация стала ещё веселее :?. Билд - 2275, после экспериментов с реестром макрос работает только на части файлов, причём совершенно произвольным образом (например, на файле с именем 2288.htm макрос работает, на Prey.htm - нет
По ctrl./ctrl, Ins предлагает заменить макрос (хотя в процессе тестов иногда и не предлагало :? )
DrKnS wrote: Через FarCmds макрос запускается? (macro:post ...)?
Нет, даже когда работает через Ins
DrKnS wrote: Ну и вообще-то "официально" fattr с панелями не работает, попробуй заменить его на panel.fattr(0, ...
С panel.fattr он вообще не работает....
User avatar
Px
Posts: 826
Joined: Fri 08 Sep, 2006 15:52
Location: Вишнёвый (под Киевом)
Contact:

Post by Px »

Так-с, часть проблем поборол, часть осталась, но уже решаемых :)
Я благополучно забыл упомянуть, что в тестах пользовался Ins-ом на цифровом блоке, и вот тут то крылась засада :), в билде 2275 он ещё Ins, а в 2287 и 3309 он уже Num0, о чём тут - http://forum.farmanager.com/viewtopic.php?p=28519#28519 ни слова :(
Бага с отфонарной пометкой пар (эта - нравится, а эта уже нет) вызвана какими-то настройками в самом Far-е, на рабочей машине всё ок, а значит нужно только экспортировать настройки из реестра и произвести сверку :)
User avatar
Px
Posts: 826
Joined: Fri 08 Sep, 2006 15:52
Location: Вишнёвый (под Киевом)
Contact:

Post by Px »

Так-с, источник второй части проблем обнаружен, тут сказано, что функции fattr/panel.fattr для каталога возвращают 0x00000010, но, если у каталога установлен, например, атрибут ARCHIVE, то функция возвращает уже 0x00000030 (у каталогов, с которыми не работало, стоял артибут NOT_CONTENT_INDEXED, соответственно функция возвращала 2010). Посмотрел самый первый вариант макроса - там использовалась fexist, причины замены уже не помню (но точно были, просто так не менял бы...). В общем, заменил на fattr на fexist, и пока всё работает :)
Есть небольшое предложение - дополнить функцию N=fattr(S) вариантом N=fattr(S,A), где A - конкретный атрибут, результат 1 если он установлен для файла/папки, 0 - если нет
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

Есть небольшое предложение - дополнить функцию N=fattr(S) вариантом N=fattr(S,A), где A - конкретный атрибут, результат 1 если он установлен для файла/папки, 0 - если нет
Пиши в макросе не $if(fattr() == 0x10), а $if(fattr() & 0x10 == 0x10).
User avatar
Px
Posts: 826
Joined: Fri 08 Sep, 2006 15:52
Location: Вишнёвый (под Киевом)
Contact:

Post by Px »

Попробовал, в результате на некоторых файлах помечает нужную папку, следующую за ней папку и файл, некоторые вообще не помечает :?
/*Дополнение*/
Расставил нужные скобки, стало работать на всех файлах, но помечает 2 папки, т.е. срабатывают оба условия...
/*/Дополнение*/
Поскольку отладочные макросы я уже удалил, то пока будет работать как описал выше, а когда вылезет следующая проблема - тогда и буду пробовать более подробно :)
Post Reply

Return to “Нужна помощь”