Ru-Board.club
← Вернуться в раздел «Программы»

» Far Manager

Автор: VictorVG2
Дата сообщения: 07.03.2016 12:47
Angel_Ka

Да там вроде всё просто, а главное рабочих примеров полно, и большая часть их подробно комментирована (я до сих пор комменты не ставлю, хотя и десятки лет сам после вспоминаю что написал), так что легко понять что и как работает.
Автор: Alexyz21
Дата сообщения: 07.03.2016 13:15
shmuz
При использовании custom сортировок с собственными диалогами и обработчиками, эти пункты меню не срабатывают по Enter и MsLClick - это так и должно быть и неизлечимо даже в перспективе? - Только собственными обработками?
Автор: Angel_Ka
Дата сообщения: 07.03.2016 13:53
Alexyz21
VictorVG2
И Encyclopedia for Developers, и Справку по системе макросов Far Manager открывал и искал и condition, и function(key), и function(), но ответа на свой вопрос: "в каких случаях в condition аргумент key нужно указывать обязательно?", однако, я там не нашёл. А если он всё же там есть, ткните меня в него, пожалуйста.

А пока полагаю, что краткий и ясный ответ, который дал shmuz:
Цитата:
Либо указывать всегда (хуже от этого не будет), либо только в тех случаях, когда он используется в функции.
Если он не используется, то можно указывать, можно не указывать - разницы нет.
следовало бы в документацию поместить.


Добавлено:
Alexyz21

Цитата:
Обновил Panel.CustomSort.lua

Вы так быстро и мощно делаете новые и более совершенные варианты Ваших замечательных макросов, что я не успеваю их с той же скоростью осваивать. И я очень рад, что Вы не теряете к ним интерес. И Я ОЧЕНЬ БЛАГОДАРЕН ВАМ ЗА ЭТО!
Автор: VictorVG2
Дата сообщения: 07.03.2016 14:14
Angel_Ka

А взять рабочие скрипты? У ребят всё расписано, про свои привычки я сказал. Чем не примеры?
Автор: shmuz
Дата сообщения: 07.03.2016 14:29
Angel_Ka
Ваши трудности (и не только ваши, это у многих) проистекают из того, что нарушается правильный порядок обучения. Это как бы школьника из 2-го класса перевести сразу в 8-й. Так не должно быть. После 2-го класса должен идти 3-й и так далее.

Многие вопросы, которые вы задаёте, ясно показывают, что ваше знание Lua на уровне 1-го - 2-го класса из 10-ти. Мой вам совет - не пытайтесь перепрыгивать классы, идите подряд. Для начала освойте Lua Manual, также есть в сети отличная книга "Programming in Lua". Если с английским туго, ищите материалы на русском.

А документ macroapi_manual.ru.chm предполагает, что читатель уже знает Lua.

Добавлено:
Alexyz21

Цитата:
При использовании custom сортировок с собственными диалогами и обработчиками, эти пункты меню не срабатывают по Enter и MsLClick - это так и должно быть и неизлечимо даже в перспективе? - Только собственными обработками?

Сформулируйте свой вопрос так, чтобы мне не ломать голову.
Автор: Alexyz21
Дата сообщения: 07.03.2016 16:26
shmuz

Цитата:
Сформулируйте свой вопрос так, чтобы мне не ломать голову.

Попробую. Скрипт:
Вариант 1.

Код: ----
Panel.LoadCustomSortMode (....)

Macro {
description = Desc; area="Shell"; key=Key;
action=function() Panel.SetCustomSortMode(....) end;
}
----
Автор: Angel_Ka
Дата сообщения: 07.03.2016 16:49
shmuz

Цитата:
Для начала освойте Lua Manual, также есть в сети отличная книга "Programming in Lua".
Кажется понял. Спасибо! Так и сделаю.
Автор: shmuz
Дата сообщения: 07.03.2016 17:09
Alexyz21

Цитата:
Вариант 1.
Из меню CtrlF12 по нажатию Enter и LMB запускается.

Вариант 2.
Из меню CtrlF12 по Enter и LMB макрос (action()) не выполняется, только по Key.

Интересно, в какой документации написано, что из меню CtrlF12 должны запускаться макросы? Если вы их специально повесите туда, они запустятся (как нам уже продемонстрировал Angel_Ka).

Цитата:
Второй момент - если BRS объявить локальной (вместо BRS, local BRS) и она используется в Compare(), объявленной вне тела макроса (выше него), то она невидна, хотя Compare() вызывается в макросе ниже - в Panel.LoadCustomSortMode(....) - это тоже правильно и не излечимо?

Здесь вы демонстрируете пробел в вашем знании Lua.

Я уже кажется вчера говорил, что при наличии времени возможно кое-что усовершенствую. Несмотря на то, что на данный момент всё достижимо уже имеющимися средствами, только не совсем элегантно.
Автор: Alexyz21
Дата сообщения: 07.03.2016 17:40
shmuz

Цитата:
Если вы их специально повесите туда, они запустятся (как нам уже продемонстрировал Angel_Ka)

В приведённом мною примере специально и показано их "вывешивание" - Panel.LoadCustomSortMode() до тела Macro{}. Для запуска по Enter и MsLClick приходится использовать
Код: condition = function(key) return Area.Shell and key==Key or Area.Menu and Menu.Id==MenuGuid and Menu.Value:match(Desc2) and (key=="Enter" or key=="MsLClick") end;
Автор: shmuz
Дата сообщения: 07.03.2016 18:36
Alexyz21

Цитата:
В приведённом мною примере специально и показано их "вывешивание" - Panel.LoadCustomSortMode() до тела Macro{}.

"До тела" или "после тела" никакого значения в вашем примере не имеет.

Цитата:
Вопрос же был в:
Цитата:
При использовании custom сортировок с собственными диалогами и обработчиками, эти пункты меню не срабатывают по Enter и MsLClick - это так и должно быть и неизлечимо даже в перспективе? - Только собственными обработками?
Под собствеными обработками имелся ввиду кондишн.

Эти пункты меню ведут себя полностью аналогично другим (не кастомным) пунктам меню и вообще любым пунктам меню. Ведут себя абсолютно штатно. Что там надо излечивать - ума не приложу.
Автор: Alexyz21
Дата сообщения: 07.03.2016 21:01
shmuz

Цитата:
"До тела" или "после тела" никакого значения в вашем примере не имеет.

совершенно верно - главное вне тела макроса, в теле самого скрипта, тогда Panel.LoadCustomSortMode() инициализируется при загрузке.


Цитата:
Эти пункты меню ведут себя полностью аналогично другим (не кастомным) пунктам меню и вообще любым пунктам меню.

Аналогично, это если не учитывать, что:
custom диалог по Enter и LMB не появится (т.е. action() не выполнится), если:
1. В Macro.area к области Shell не добавить Menu
2. В Macro.key к шоркату не добавить Enter и MsLClick
3. Не прописать соответствующий condition() со ссылкой на guid Menu
+ В теле action() нужно закрывать меню.
Автор: shmuz
Дата сообщения: 07.03.2016 21:15
Alexyz21
Может я туплю, но: чем этот список отличается, например, при навеске макросов на прочие (не кастомные) пункты меню?
Автор: Alexyz21
Дата сообщения: 07.03.2016 21:37
shmuz

Цитата:
чем этот список отличается, например, при навеске макросов на прочие (не кастомные) пункты меню?

Вот это меня и заинтересовало - реакция на Enter и LMB разная, вместе с тем, явно в коде макроса не указано, что обработка Enter и LMB должна быть иной, потому неявное изменение обработки не есть правильно.
Автор: shmuz
Дата сообщения: 07.03.2016 21:45
Alexyz21

Цитата:
реакция на Enter и LMB разная

Как это разная? Если нажатие Enter или LMB вызывают макрос, то реакция определяется макросом.
(Давайте покороче, ибо мне это уже порядком надоело).
Автор: Alexyz21
Дата сообщения: 07.03.2016 21:51
Enter и LMB: Вариант №1 вызывают. Вариант №2 - НЕ вызывают из списка, вызываемого по CtrlF12. Вызывают только с бубном:
1. В Macro.area к области Shell добавить Menu
2. В Macro.key к шоркату добавить Enter и MsLClick
3. прописать соответствующий condition() со ссылкой на guid Menu
+ В теле action() нужно закрывать меню.
Автор: shmuz
Дата сообщения: 07.03.2016 22:00
Alexyz21
Неохота мне с вашими конструкциями разбираться. Ругаю себя, что ввязался в это. Ничем эти пункты меню не отличаются от прочих и работают строго в соответствии с документацией.
Автор: Alexyz21
Дата сообщения: 07.03.2016 22:04

Цитата:
и работают строго в соответствии с документацией

я рад за вас
Автор: VictorVG2
Дата сообщения: 07.03.2016 22:12
shmuz

Вопрос по реализации win.DeleteRegKey() в LuaMacro b563 если я правильно понял, то в данный момент функция win.DeleteRegKey() не поддерживает рекурсивное удаление ключей, например:

создаём [HKCU\Test\1\1\2] и выполняем lua:win.DeleteRegKey("HKLM","Test") результатом будет "0", но коли выполнить например: lua:win.DeleteRegKey("HKLM","Test\\1\\1\\2") результатом будет "1".

С одной стороны вроде и разумно, а с другой при чистке мусора можно не добраться до самого нижнего уровня рекурсии, особенно коли это кто специально сделал. Уже видел пару раз подобные художества с эффектом стремящимся к локальной реализации DOS-атаки. Чистится правда просто, хотя и долго - удаляется вся вложенная ветка, но это ещё надо отыскать куда сию пакость вписали и всё одно с одной я пару часов провозился только удаляя подветки.

Я глянул по MSDN - есть вариант с вызовом RegEnumKeyEx() вроде разумный, но если встретится случай типа моих, то работы будет много...

По идее может добавить в функцию дополнительный ключ режима отвечающий за переключение режима удаления Recursive=On|Off или пока не стоит это делать?


Автор: shmuz
Дата сообщения: 07.03.2016 22:31
VictorVG2
Эта функция - простая обёртка над функцией Windows RegDeleteKeyExW. Та не делает рекурсии - значит и эта тоже. Но рекурсию можно устроить, написав обёртку уже на Lua (должно быть несложно).

Вообще эти функции в LuaFAR - сугубо вспомогательные, просто для удобства. Основная роль LuaFAR - это использование из Lua FAR API, а не Windows API. Для биндингов Windows API на Lua есть ряд сторонних библиотек в Интернете, которые можно поставить и пользоваться.
Автор: VictorVG2
Дата сообщения: 07.03.2016 22:38
shmuz

Понял. В принципе я так и думал, да и задача удаления поддерева ключей Реестра решается кучей инструментов, так что механизм её реализации выбирается по месту.

Добавлено:
Тут я больше для себя уточнял правильно ли я понимаю что данная функция выполняет одну операцию удаления нижнего ключа дерева за вызов.
Автор: Alexyz21
Дата сообщения: 07.03.2016 23:14
shmuz
Сделал простую скрипт-куклу в которой Enter и LMB из списка CtrlF12 не работают, работает только Key.

Код: local Desc = "Custom: Test"
local Key = "CtrlShiftF3"
local function Compare(p1,p2) return 0 end

Panel.LoadCustomSortMode(115,{Description = Desc; Indicator = "!?"; Compare = Compare})

Macro {
description = Desc; area = "Shell"; key = Key;
action=function() msgbox("","Yes!") end;
}
Автор: shmuz
Дата сообщения: 07.03.2016 23:38
Alexyz21
Простите, но вы демонстрируете удивительное непонимание системы.
Где, в какой доке сказано, что если вы вешаете макрос в области Shell на какой бы то ни было ключ, то при нажатии Enter в меню выбора сортировки должен запуститься этот макрос?

Добавлено:
VictorVG2
Вот функция, делающая рекурсивное удаление. Поместите это в какой-либо макрофайл (можно отдельный), рядом с другими макрофайлами и перезагрузите макросы. Это пример того, как можно легко получить нужную функциональность прямо на Lua, без изменений в LuaFAR.


Код: ФУНКЦИЯ УДАЛЕНА
Автор: VictorVG2
Дата сообщения: 07.03.2016 23:56
Alexyz21

Вопросик на засыпку:

- есть две независимых плоскости событий А и Б;
- есть два события А1 и Б1 которые могут происходить независимо;
- есть находящийся вне этих плоскостей наблюдатель С который расположен так, что одновременно видит обе плоскости А, Б и происходящие там события А1, Б1;
- наблюдатель С видит что одновременно произошли события А1 и Б1.
- наблюдатель Д не видит и ничего не знает о А и Б, но может видеть следы А1 и Б1

Вопрос Д - Каким образом событие А1 вызвало событие Б1?


P.S.

Кстати похожий вопрос о взаимодействии независимых на момент совершения событиях и их реконструкции по наблюдаемым следам рассматривается в рамках квантовой физики и теории струн.

Добавлено:
shmuz

Огромное спасибо! Наверняка пригодится!
Автор: Alexyz21
Дата сообщения: 08.03.2016 00:15
shmuz
Ну раз не должен, значит не должен.
Автор: shmuz
Дата сообщения: 08.03.2016 00:21
VictorVG2
Я дико извиняюсь, удалите эту "рекурсивную" функцию, она ошибочна и опасна! Не запускайте её!
(Я уже выключил комп и пошёл спать, когда понял это. Пришлось включить снова).
Автор: VictorVG2
Дата сообщения: 08.03.2016 00:27
shmuz

Понял, уже и сам увидел что в логике что-то явное "не то".
Автор: Angel_Ka
Дата сообщения: 08.03.2016 02:56
shmuz

В трепетном ожидании предполагаемых новшеств и вместе с тем вдохновлённый замечанием о том, что "на данный момент всё достижимо уже имеющимися средствами", я продолжил практиковаться приспособливать великолепные макросы Alexyz21 под свои предпочтения, с минимальным вмешательством в код макросов и дополнением их сервисными "подмакросами".

На текущий момент пополненное макросами меню "Критерий сортировки" выглядит следующим образом:



Макросы из меню отлично вызываются шорткатами. Но вот у меня пока ну никак не получается нормально применить в позициях кастомной секции меню хоткеи, Enter и клик мышкой.
То есть когда я, выставляя амперсанд в description, указываю хоткей, то в меню он проявляется, и при его активации соответствующий макрос срабатывает. Но срабатывет не верно. А так как будто бы сразу же, одномоментно, и диалог макроса вызвали, и тут же нажали в нём ОК. Тоже и с Enter, и мышкой.
Автор: VictorVG2
Дата сообщения: 08.03.2016 03:10
Angel_Ka

Картинка сбежала.
Автор: Angel_Ka
Дата сообщения: 08.03.2016 03:14
VictorVG2

Цитата:
Картинка сбежала.

Это я её сам "сбежал". Очень уж большая получилась. Поправлю размер и поставлю её на место.

Добавлено:
Вернул беглянку. Всё равно большеватая получилась. Но меньше плохая получается.
Вы не против, если такая останется?
Автор: shmuz
Дата сообщения: 08.03.2016 09:04
Angel_Ka
1. Трепетно ожидать новшеств не надо, так как я ещё не знаю, когда займусь этим. Может через день, а может через месяц - короче не знаю.
2. У меня на кастомных пунктах меню макросы не навешены. Хоткеи, Enter и клик мышкой работают как положено. Разбираться сейчас, почему в вашем случае это не так, на данный момент нет времени.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: оффтоп


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.