Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Здесь обсуждается всё, что касается макросов.
User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Sun 20 Oct, 2019 20:33

Оказывается что в FAR'е "by design" (и описано во встроенной помощи) очень специальное и нестандартное обращение с NumPad клавишами.
Не вдаваясь в подробности, к ним привязаны разные shortcuts и atcions.
И так получилось, что сочетания RCtrl+Num0-9 оказались заняты системой.
Проблема в том что той же системой сочетания RCtrl+0-9 используются также для Folder Shortcuts.
И как раз прыгать с помощью RCtrl+NumPad более эргономично чем по основной клавиатуре.
Т.е. Folder Shortcuts конфликтуют с этими другими actions.
В то же время, эти actions не бесполезные, и наверное можно их сохранить без ущерба для Folder Shortcuts.
Стоит две задачи:
1.) Использовать RCtrl+NumPad для Folder Shortcuts
2.) Перевести уже определенные для RCtrl+NumPad actions на другое сочетание нажатий клавиш
3.) Сделать это надежно, логично, эффективно

Я думаю наиболее прозрачно переассигновать существующие RCtrl+NumPad actions на RCtrl+RAlt+NumPad
Передумал. Сделал поведение цифрового Ctrl(Shift)NumPad[0-9] таким же как Ctrl(Shift)[0-9].
Цифровой NumPad - это, если что, при при горящей лампочке NumLock.
При выключенмой лампочке NumLock:
1.) это Up/Down/LEft/Right/PageUp/PageDown(..)
2.) На "Ктрл+5" ФАРом повешено и продолжает работать центрированние панелей

Я провел тщательное иследование, и не обнаружил ничего такого что позволило бы это сделать через конвенциональное меню или даже far:config.
Ни так как хочется удобства прыганья по папкам, то пришлось вникнуть что можно все-таки с этим сделать.
Оказалось что в FARе есть развитая подсистема скриптинга.
Развитя, но при этом глючная, но об этом позже.
В конечном итоге написан относительно короткий, но максимально короткий насколько это возможно, макрос.
  1. -- XeroX (CopyLeft) 2019
  2. -- fixed Folder Shortcuts NumPad 0-9 numeric keys behavior
  3. -- fix-numpad-numeric-mode-XeroX.lua
  4.  
  5. local RCtrlShift = false
  6. local RCtrlNumFired = false
  7.  
  8. Macro { description="somehow specific handling for Ctrl5, because it refuses to follow other numpad keys behavior";
  9.     area="Shell";
  10.     key="RCtrlNum5 RCtrlClear";
  11.     priority=99;
  12.     condition=function(key) return mf.flock(0, -1) == 1 --[[ and key == "RCtrlClear" ]] end;
  13.     action=function()
  14.         key_new = "RCtrl" .. (RCtrlShift and "Shift" or "") .. "5";
  15.         Keys(key_new);
  16.         if RCtrlShift then
  17.             RCtrlShift = false;
  18.             RCtrlNumFired = true;
  19.         end
  20.     end
  21. }
  22.  
  23. Macro { description="Fix for NumPad numeric keys to be used as numbers (Ctrl[Shift]+Num# pressed)";
  24.     area="Shell";
  25.     key="/RCtrlShift|RCtrlNum[0-9]/";
  26.     priority=98;
  27.     condition = function(key)
  28.         if RCtrlNumFired then
  29.             RCtrlNumFired = false;
  30.             RCtrlShift = false;
  31.             return false;
  32.         end;
  33.         RCtrlShift = RCtrlShift or key == "RCtrlShift";
  34.         return mf.flock(0, -1) == 1 and key ~= "RCtrlShift";
  35.     end;
  36.     action=function()
  37.         key_rec = akey(1);
  38.         key_new = mf.replace(key_rec, "Num", (RCtrlShift and "Shift" or ""));
  39.         Keys(key_new);
  40.         if RCtrlShift then
  41.             RCtrlShift = false;
  42.             RCtrlNumFired = true;
  43.         end
  44.     end;
  45. }
  46.  
  47. Macro { description="Show full list (as in \\\\F9\\Commnds\\Folder shortcuts)";
  48.     area="Shell";
  49.     flags="";
  50.     key="CtrlAlt0 CtrlAltNum0";
  51.     code="Keys(\"F9 c d\")";
  52. }
Last edited by Xerox on Fri 22 Nov, 2019 13:26, edited 4 times in total.

User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Sun 20 Oct, 2019 20:41

Чей-то пытливый взгляд может заметить и спросить, "а почему обработчик RCtrlNum5 идет отдельным скриптом?"

Code: Select all

Macro { description="somehow specific handling for Ctrl5, because it refuses to follow other numpad keys rules";
	area="Shell";
	key="RCtrlNum5 RCtrlClear";
	priority=100;
	action=function()
		Keys("RCtrl5")
	end;
}
Ответ такой - я не знаю, это попортило мне немало крови, но другого выхода не нашлось.
Все клавиши ведут себя одинаково, кроме этого несчастного RCtrlNum5.
Опытным путем после сотни запусков наиболее отсечен неработающий и/или ненужный код, в сухом остатке имеем вот этот состоящий из трех обработчиков скрипт
Last edited by Xerox on Thu 21 Nov, 2019 23:00, edited 1 time in total.

User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Thu 21 Nov, 2019 22:59

Макрос переработан и пофиксен

User avatar
John Doe
Бюрократ
Posts: 12527
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 234 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by John Doe » Fri 22 Nov, 2019 08:36

Xerox wrote:
Sun 20 Oct, 2019 20:41
"а почему обработчик RCtrlNum5 идет отдельным скриптом?"
RCtrlNum5 такой клавиши не бывает, можно убрать.
Ну и да, можно и нужно объединить в один.

User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Fri 22 Nov, 2019 10:47

John Doe, Эээ.. я вчера пару часа жизни убил на борьбу и эксперименты с этим особенным КтрлНум5, и не нашел никакого другого спососба обойти, кроме приведенного.

Поэтому пожалуйста, скопируй себе этот макрос и попробуй поработать с/без хэндлинга КтрлНум5.. ?
Last edited by Xerox on Fri 22 Nov, 2019 10:58, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 12527
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 234 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by John Doe » Fri 22 Nov, 2019 11:03

Макрос RCtrlNum5 никогда не сработает, потому что это сочетание приходит как RCtrlClear.

В остальном я не пытаюсь комментировать, поскольку из описания толком не понял что должны делать эти макросы.
Но очень подозреваю что всё должно быть проще.

buniak_a_h
Posts: 1234
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 88 times
Been thanked: 74 times
Contact:

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by buniak_a_h » Fri 22 Nov, 2019 11:13

Xerox, чтоб больше не попадаться на такое:
John Doe wrote:
Fri 22 Nov, 2019 11:03
Макрос RCtrlNum5 никогда не сработает, потому что это сочетание приходит как RCtrlClear.
Рекомендую использовать маленький макрос типа
  1. Macro{
  2.   id="060F70F2-C60A-409D-887C-D82CD0448474";
  3.   area="Editor"; -- Menu Tree Dialog Disks Shell Editor Grabber FindFolder Desktop UserMenu DialogAutoCompletion Search ShellAutoCompletion MainMenu Info Other Help QView Viewer
  4.   key="AltF2";
  5.   description="Вставка кода клавиши";
  6.   filemask="*.lua";
  7.   flags=""; -- DisableOutput RunAfterFARStart EmptyCommandLine NotEmptyCommandLine NoFilePanels NoFilePPanels NoPluginPanels NoPluginPPanels NoFolders NoPFolders NoFiles NoPFiles Selection PSelection NoSelection NoPSelection EVSelection NoEVSelection NoSendKeysToPlugins
  8. --  priority=50;
  9.   sortpriority=48;
  10. --  condition=function(key) return true end;
  11.   action=function() print(mf.waitkey()) end;
  12. }
хоткей поменяйте "под себя". Лично у меня на него висит много макросов, зависящих от расширения файла; в результате получается "контекстно-зависимое" меню

User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Fri 22 Nov, 2019 11:23

John Doe,
Ааа, я понял, ты имеешь ввиду что можно его просто убрать (а не весь обработчик), т.е. вместо

Code: Select all

key="RCtrlNum5 RCtrlClear";
..оставить:

Code: Select all

key="RCtrlClear"
?
Да, действительно приходит RCtrlClear вместо того что ожидалось - RCtrlNum5.
Но я думаю что даже если ФАР "крадет" КтрлНум5, то лучше его оставить фдля наглядности, и может быть на каком-то этапе его перестанут "красть".
John Doe wrote:
Fri 22 Nov, 2019 11:03
из описания толком не понял что должны делать эти макросы.
Для работы с Folder Shortcuts, сейчас они на цифры НумПада не срабатывают, что подбешивает, так как с НумПада удобнее.
Проблема с КтрлНум5 видимо потому что в нем как то слишком уж жестко на него прошито центрирование панелей.
Мой скрипт оставляет возможность центрирования когда нет НумЛока (режим стрелок на НумПаде),
а когда есть НумЛок (режим цифер на НумПАде) - можно пользоваться для Фолдер ШортКатс.
А без этого скрипта нельзя, в этом и фикс
Last edited by Xerox on Fri 22 Nov, 2019 11:33, edited 2 times in total.

User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Fri 22 Nov, 2019 11:28

buniak_a_h, круто, все такие диагностически трики принимаю с благодарностью
Поделюсь тоже (надеюсь не офтопик?), пришел к таком скрипту чтобы понимать что происходит с нажатиями:
Last edited by Xerox on Fri 22 Nov, 2019 11:32, edited 2 times in total.

User avatar
John Doe
Бюрократ
Posts: 12527
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 234 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by John Doe » Fri 22 Nov, 2019 11:42

Xerox wrote:
Fri 22 Nov, 2019 11:23
если ФАР "крадет" КтрлНум5
Фар ничего не крадёт.
Xerox wrote:
Fri 22 Nov, 2019 11:23
Проблема с КтрлНум5 видимо потому
О какой проблеме речь?
Xerox wrote:
Fri 22 Nov, 2019 11:23
А без этого скрипта нельзя, в этом и фикс
Давайте проще.
Перечень сочетаний обрабатываемых макросом -> и во что они трансформируются в результате.

User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Fri 22 Nov, 2019 12:29

John Doe,
(Пишу налету, дооформлю если чо, и/или если придумаю как еще доходчивее:)

RCtrlNum[0-9] => RCtrl[0-9]
RCtrlShiftNum[0-9] => RCtrlShift[0-9]

Workaround for Num5:
RCtrlNum5(=RCtrlClear) => RCtrl5
RCtrlShift+RCtrlNum5(=RCtrlClear) => RCtrlShift5

Нормально так?
(Вернулся)
Last edited by Xerox on Fri 22 Nov, 2019 13:18, edited 2 times in total.

User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Fri 22 Nov, 2019 12:33

John Doe wrote:
Fri 22 Nov, 2019 11:42
Xerox wrote: ↑
Fri 22 Nov, 2019 13:23
Проблема с КтрлНум5 видимо потому

О какой проблеме речь?
В режиме цифер на НамПаде, КтрлНум5 НЕ воспринимается как цифра (а должен), что мешает для ФолдерШорткатa(5), в результате ФолдерШорткат(5) не срабатывает

User avatar
John Doe
Бюрократ
Posts: 12527
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 234 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by John Doe » Fri 22 Nov, 2019 13:26

Xerox wrote:
Fri 22 Nov, 2019 12:29
RCtrlShift+RCtrlNum5
Как нажать эту комбинацию?
Xerox wrote:
Fri 22 Nov, 2019 12:33
В режиме цифер на НамПаде, КтрлНум5 НЕ воспринимается как цифра
А как что он воспринимается?
И что значит "воспринимается как цифра"?
КтрлНум4 разве воспринимается цифрой
Last edited by John Doe on Fri 22 Nov, 2019 13:28, edited 1 time in total.

User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Fri 22 Nov, 2019 13:39

John Doe wrote:
Fri 22 Nov, 2019 13:26
Xerox wrote: ↑
Fri 22 Nov, 2019 14:29
RCtrlShift+RCtrlNum5

Как нажать эту комбинацию?
Для юзера это выглядит-делается как:
* Горит лампочка НамЛока
* Нажимается сочетание RCtrl+Shift+Num[0-9]

Для ФАРа это получается как два последовательных события:
1.) Прилетел RCtrlShift
2.) Прилетел RCtrlNum[0-9]
3.) (опционально:) макросом переделываем прилетевшее в RCtrlShift[0-9] для FolderShortcuts

За следующим исключением с Num5:
1.) Прилетел RCtrlShift
2.) Прилетел RCtrlClear
3.) (опционально:) макросом переделываем прилетевшее в RCtrlShift5 для FolderShortcuts
Last edited by Xerox on Fri 22 Nov, 2019 15:05, edited 2 times in total.

User avatar
Xerox
Posts: 240
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by Xerox » Fri 22 Nov, 2019 13:43

John Doe wrote:
Fri 22 Nov, 2019 13:26
Xerox wrote: ↑
Fri 22 Nov, 2019 14:33
В режиме цифер на НамПаде, КтрлНум5 НЕ воспринимается как цифра

А как что он воспринимается?
Моя неточность.
Cледует читать:
"не воспринимается как цифра (=руководство к действию) для Folder Shortcuts"
И что значит "воспринимается как цифра"?
КтрлНум4 разве воспринимается цифрой
КтрлНум4 по крайней мере шлется как нажатие КтрлНум4, а не как CtrlClear в случае с CtrlNum5.
это и не только мною замечалось в этом обсуждении
Last edited by Xerox on Fri 22 Nov, 2019 13:48, edited 2 times in total.

User avatar
John Doe
Бюрократ
Posts: 12527
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 234 times

Folder shortcut + Numpad problem - Макрос переассигнования действий и реакций в FARе вызываемых c NumPad numeric keys

Post by John Doe » Fri 22 Nov, 2019 14:29

Xerox wrote:
Fri 22 Nov, 2019 13:39
Для ФАРа это получается как два последовательных события:
Неверно.
На нижнем уровне там гораздо больше событий + включая и все отпускания.
А на высоком, который и используется при назначении клавиш макросам, там событие одно.
Поэтому не очень понимаю, что вы там в макросе вычисляете.
Xerox wrote:
Fri 22 Nov, 2019 13:39
Прилетел RCtrlClear
Клавиша Num5 приходит как Clear, и это надо учитывать.
Однако какая же это проблема? Это известное (и ожидаемое) поведение.
Xerox wrote:
Fri 22 Nov, 2019 11:23
Проблема с КтрлНум5 видимо потому что в нем как то слишком уж жестко на него прошито центрирование панелей.
Процитированное мне по-прежнему неясно.

Post Reply

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