MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Здесь обсуждается всё, что касается макросов.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Post by citRiks »

ВВИДУ ОТСУТСТВИЯ ОБЩЕСТВЕННОГО ИНТЕРЕСА (нет лайков)
ОБНОВЛЯТСЯ В ДАЛьНЕЙШЕМ НЕ БУДЕТ
(текущая/экспериментальная/обновленная версия находится у меня,
но дальнейшей синхронизации скорее всего не будет
если все-же. кому чего нужно, то пишите сюда,
скорее всего отвечу, и скорее всего быстро)

MULTIPLE KEY SEQUENCES (COMBINATIONS) CONSISTING OF UNLIMITED MULTIPLE KEY STROKES

The original idea and script:
viewtopic.php?f=15&t=8764

MacroEx — запуск макросов нетрадиционными способами eXtended @Xer0X Edition
https://github.com/dr-dba/far-lua-key-efficiency
The latest version which is still similar to the @JD original,
next modifications will differ significantly:
https://github.com/dr-dba/far-lua-key-e ... 4cc83fd023

The differences from the original MacroEx:
  • Shorter sequences/extension takes precedence and thus priority other longer ones.
    for example: CtrlF1-AltF2 will be executed, rather than CtrlF1-AltF2-ShiftF3
    That seems to be the most natural and obvious behavior, but opposite to the original idea, though.
    Same way and logic, all the "normal" keys takes precedence/priority other sequenced/extended ones.
    As for example: CtrlF1 will be executed, rather than CtrlF1-AltF2
  • (R|L)(Alt|Ctrl) differentiated, handled correctly traditional (for single key presses) in the FAR way
  • Key sequence can be of an unlimited length, the original has only two keypresses possible
  • Key sequences can be of any letters, for example X-Y-Z is a completely legit sequence.
  • :(Hold|Double) can be at any place in the sequence any times (the original the first position only)
  • You can cancel the current incomplete sequence by pressing Escape
  • Conditioned and pre-conditioning for macro execution by function + file mask + flags, if those defined
  • Now such as these key combinations are handled correctly:
  • CtrlAlt-CtrlAlt works as following:
    Ctrl[DOWN]==>>Alt[DOWN]==>>Alt[UP]==>>Ctrl[UP] ... Ctrl[DOWN]==>>Alt[DOWN]==>>Alt[UP]==>>Ctrl[UP]
  • CtrlAlt-Alt works as following:
    Ctrl[DOWN]==>>Alt[DOWN]==>>Alt[UP]==>>Ctrl[UP] ... Alt[DOWN]==>>Alt[UP]
  • CtrlAlt:Double works as following:
    Ctrl[DOWN]==>>Alt[DOWN]==>>Alt[UP]==>>Alt[DOWN]==>>Alt[UP]
  • CtrlAlt:Hold works as following:
    Ctrl[DOWN]==>>Alt[DOWN]==>>Alt[UP] ... {STILL HOLDING CTRL FOR THE CERTAIN TIME} ... Ctrl[UP]
предполагаются следующие варианты применения
1.) Назначение на любой макро-скрипт по желанию
2.) Использовать для вставки templates при некоторых многобуквенных сочетаниях,
например forip произведет for ii, vv in pairs(tbl1) do .. end
3.) например транслит где есть такое как "shch" для "щ"
4.) ВИМовские кнопкосочетания типа :q! (exit without saving)
5.) еще? ну итд итп. Свобода полета вобщем

Некоторые детали реализации:
  • Для обуславливания за основу взята функция GetMacro из %FarHome%\Plugins\LuaMacro\utils.lua
  • Функция для капитализации (key prettify) кнопочек сидит в модуле %APPDATA%\Far Manager\Profile\Macros\modules\Lib-Common-@Xer0X.lua
  • handler-ы, каждый хандлер это макрос который работает для многих расширенных нажатий.
    перед тем как возбудиться, в своем condition он проверяет есть ли у него согласные исполнятся макросы.
    Если таких нет, то ничего не происходит.
    если есть, то составляется таблица согласных исполнятся макросов,
    дальнейшее происходит в зависимости от то что именно понажимал юзер.
При нахождении в незавершенной последовательности действуют такие правила:
  • AltEscape просто отменяет последовательность, ничего не запускается
  • ShiftSpace прекращает последовательность, кнопочки бегут по отдельности как обычные
При этом и ShiftSpace и AltEscape могут быть в начале последовательности,
так как как им там не доступна роль контолирующих кнопочек, например:
ShiftSpace-Space-1-2-3
AltEsc:Double-Space-A-B-C

пример общего вида при исполнении:
MacroEx.png
для того чтобы не устраивать людям балаган там где его не ждут,
вce примеры в MacroEx_test сейчасс filemask = "*.lua.dat", flags = "EVSelection"
лучше начать с того что открыть файл с расширением .lua.dat,
и экспериментировать с кнопочками и условиями выполнения там.
Естессно, можно убирать или менять условия выполнения стандартными в ФАРе способами:
condition(), filemask, flags

DEPENDS ON MODULES:

https://github.com/dr-dba/far-lua-internals
introspection-@Xer0X.lua

https://github.com/dr-dba/far-lua-general-utils
Lib-Common-@Xer0X.Lua

https://github.com/dr-dba/far-lua-diagnostics
StackTracePlusPlus-@Xer0X.Lua

https://github.com/dr-dba/lua-serialize
dmp-tbl-alt-@Xer0X.Lua

"мануал/ридми" старый и не отражает всего функционала
вопросы, пожелания - писать, опять же, см. начало текста
Last edited by citRiks on Fri 27 Aug, 2021 10:47, edited 24 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx — запуск макросов нетрадиционными способами eXtended @Xer0X Edition

Post by citRiks »

Latest post of the previous page:

Сделана дифференциация между (R|L)Ctl/Alt
чтобы соблюдался "принцип наименьшего изумления",
проверено, работает
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx — запуск макросов нетрадиционными способами eXtended @Xer0X Edition

Post by citRiks »

рефакторинг и косметика кода, проверено и работает как автомат на любых вычурных sequences
(см. примеры в MacroEx_test.@Xer0X.lua)
Сломалась подсказка.
привет всем кто скачивает и не сообщает о проблемах, ну и фиг с этой подсказкой значит :)
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx eXtended @Xer0X Edition — запуск макросов нетрадиционными способами

Post by citRiks »

боpьба с минусами, которые могут быть как и сами нажатия, так и соединители нажатий.
Last edited by citRiks on Fri 09 Jul, 2021 19:24, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx eXtended @Xer0X Edition — запуск макросов нетрадиционными способами

Post by citRiks »

рефакторинг, улучшения, немного нового функционала
от использования "в продакшн" лично меня останавливает то,
что sequences пока не знают заранее согласится ли condition привязанного макроса бежать.
потому что если не согласится, то sequence получается что только зря мешается

сделано по-красоте в 2.0 и выше
Last edited by citRiks on Sun 18 Jul, 2021 08:27, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Post by citRiks »

Основное допилил, вот сейчас можно в продакшн я считаю.
Основное на мой взгляд это:
Если condition отрицательный, то sequences/extensions и не возбуждаются
(в отличие от оригинала)
также учитывается обуславливание file mask.
Некоторые детали реализации:
  • Для обуславливания за основу взята функция GetMacro из %FarHome%\Plugins\LuaMacro\utils.lua
  • Функция для капитализации (key prettify) кнопочек сидит в модуле %APPDATA%\Far Manager\Profile\Macros\modules\Lib-Common-@Xer0X.lua
Last edited by citRiks on Sun 18 Jul, 2021 11:58, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Post by John Doe »

citRiks wrote: Sun 18 Jul, 2021 08:49 Если condition отрицательный, то sequences/keystrokes и не возбуждаются
(в отличие от оригинала)
В каком сценарии это может работать лучше чем штатный механизм?
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Post by citRiks »

John Doe wrote: Sun 18 Jul, 2021 10:25Если condition отрицательный, то sequences/keystrokes и не возбуждаются
следует читать sequences/extensions
John Doe wrote: Sun 18 Jul, 2021 10:25В каком сценарии это может работать лучше чем штатный механизм?
Ну взять ваше оригинальный скрипт, в оригинальном тесте есть обычный "тест" на КтрлФ9.
Добавим в тестовые ipairs еще КтрлФ9-Ф9.
Теперь нажмем КтрлФ9 и будем держать.
Выскочит подсказка что можно продолжить с Ф9, ок
Ок, продолжили нажав еще раз Ф9,
действительно получили правильную реакцию на "КтрлФ9-Ф9".
Но тут две проблемы, одна побольше а другая поменьше.
1.) на мой взгляд все короткие sequences должны быть приоритетнее тех что длиннее.
T.e. КтрлФ9 должен быть приоритетнее чем КтрлФ9-Ф9.
(кроме того, у меня КтрлФ9-Ф8 приоритетнее чем КтрлФ9-Ф8-Ф7)
2.) Если у "КтрлФ9-Ф9" есть condition+filemask, которые не сработали,
то мы получаем комплекс проблем:
2.1.) Не сработал обычный КтрлФ9
2.2.) Сработали посылки по отдельности КтрлФ9, КтрлФ9,
которые по отдельности могут значить все что угодно опасное или ненужное в данном контексте,
(перескочим на более "опасное" сочетание ШифтФ8-Ф9)
правда я сейчас не смог воспроизвести проблему с ШифтФ8, которое меняет кодировку,
при несработавшем из-за condition() "ShiftF8-F9", но то что он вообще не сработал - тоже проблема.
Т.е. изза перехвата ШифтФ8-Ф9 нарушается ожидаемое поведение.
То что ШифтФ8-Ф9 не сработал в итоге изза своего condition, это его право,
но нарушать работу "обычного" ШифтФ8 - это уже нехорошо.
ну и в сценариях со многими (больше двух) sequences потенциал для бардака становится еще больше,
эти сценарии для вас неактуальны конечно, а мне пришлось их обезопасить, на мой взгляд цель достигнута без ущерба для самой идеи multiple sequences
Last edited by citRiks on Sun 18 Jul, 2021 12:02, edited 3 times in total.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Post by John Doe »

citRiks wrote: Sun 18 Jul, 2021 11:52 T.e. КтрлФ9 должен быть приоритетнее чем КтрлФ9-Ф9.
В таком случае при наличии КтрлФ9 более длинная комбинация никогда не сработает?
citRiks wrote: Sun 18 Jul, 2021 11:52 2.1.) Не сработал обычный КтрлФ9
2.2.) Сработали посылки по отдельности КтрлФ9, КтрлФ9,
1 нет, 2 да.
citRiks wrote: Sun 18 Jul, 2021 11:52 Т.е. изза перехвата ШифтФ8-Ф9 нарушается ожидаемое поведение.
Не понял.
Если проблема с моим скриптом, то напишите в его тему, попробуем разобраться.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Post by citRiks »

John Doe wrote: Sun 18 Jul, 2021 17:151 нет, 2 да.
ну у меня как-то так, смотрите более разжеванный пример в вашей теме.
поэкспериментируйте с conditions еще, еще больше бардака будет.
Может у меня руки кривые, и скорее всего так и есть, но думаю что у многих это так,
и лучше бы чтобы использование кнопко-комбинаций не требовало особо прямых рук,
не будучи опасным и неконсистентным поведением.
там где может быть достаточно и кривых как у меня, если продумать дизайн получше,
т.е. чтобы не было бы пологой "кривой обучения/польза"

дисклаймер
скрипт ваш - превосходная база
например, я бы сам заколебался изобретать использование ConsoleEvent для заглушки дребезжания кнопочки
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Post by citRiks »

John Doe wrote: Sun 18 Jul, 2021 17:15 Не понял. Если проблема с моим скриптом, то напишите в его тему, попробуем разобраться.
а я так старался разжевывать..
значит не получилось разжевать,
а других идей как разжавать получше или подругому идей нет, увы мне.
в вашей теме однако еще раз попытался обьяснить,
но этим темa вашего скрипта пожалуй исчерпана :)

Однако, если захотите попробoвать мой вариант, и к чему-нибудь "придраться",
то это всегда пожалуйста
Last edited by citRiks on Sun 18 Jul, 2021 18:23, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Post by citRiks »

На всякий случай сообщаю, что в скрипте предусмотрено, протестировано и оптимизировано все что можно и нельзя,
безопасно для существующего поведения, ни на что не влияет и ни что не ломает, ведет себя логично и гармонично.
т.е. со спокойной совестью назовем это "production ready"

PS
возможно что имеет смысл продублировать и вызов обычных макросов через обычные кнопочки через этот механизм.
т.е. отобрать эту функцию у нативного ЛуаМакро, вед\ технически ровно то же самое делает и этот агрегат для sequences/extensions
мне в существующем механизме больше всего недостает логирование вызовов скриптов и замеров вроде времени исполнения.
В свое можно добавлять логгирование и замеры сколь угодно, но и это утомительно, а в не свое - вопще кошмар.
Ну могу предложить в ЛуаМакро добавить логгирование вызовов, но я это уже предлагал и интереса не вызвало ...
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

MacroEx eXtended @Xer0X Ed. - запуск макросов нетрадиционными способами ! MULTIPLE UNLIMITED KEY STROKES ASSIGN TO MACRO

Post by citRiks »

добавлен новый вид макро-нажатия, :State, смысл которого в создании некоего State,
у которого есть функция начала (action), периодический action, и заключительный action.
Состояние создается нажатием и удерживанием определенной кнопочки/чек.
Состояние заканчивается при отжатии этой кнопочки/чек, т.е., кроме всего прочего может использоваться как :Release.
(примечание: таким образом :State включает в себя :Release, поэтому отдельного :Release нет)

Например, как в этом неполном примере:

Code: Select all

Macro { description = "wait key release (KeyUp) macro example",
	area = "Shell",
	key = "W:state",
	action = function(mcr_dat,
			p2, p3, p4, p5, --! reserved for the future far-system use
			obj_key_stt, dt_now
				)
		obj_status:set("FAST WORD JUMP MODE ACTIVATED", nil, 100000000)
		FAST_WORD_JUMP_MODE = true
	end, 
	eat_press_repeat = true,
	tick_state_repeat = 1000,
	act_state_repeat = function(obj_key_stt, dt_now)
		obj_status:set("FAST WORD JUMP MODE IS ACTIVE", nil, 100000000)
	end,
	act_state_final = function(obj_key_stt, dt_now)
		obj_status:set("FAST WORD JUMP MODE OFF", nil, 1000)
		FAST_WORD_JUMP_MODE = false
	end, 
	key_state_active_prevents_new = true,
	key_run_normal_if_state_was_not_used = true,
}
пример приведен частично и потому нерабочий
Если кого-то заинтересует, то эту тему раскрою получше и поширше

полный пример здесь:
https://github.com/dr-dba/far-lua-key-efficiency/
x-cursor.@Xer0X.lua
про предназначение "x-cursor" обсуждается тут:
viewtopic.php?p=168288#p168288
viewtopic.php?p=168288#p168288
Last edited by citRiks on Fri 27 Aug, 2021 16:36, edited 4 times in total.
Post Reply

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