XKeys — скрипт для замены одноимённого плагина

Здесь выкладываются готовые к использованию макросы и скрипты.
Smitis
Posts: 1455
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

XKeys — скрипт для замены одноимённого плагина

Post by Smitis » Fri 07 Feb, 2014 08:29

Скрипт для замены плагина XKeys
Позволяет использовать в ФАРе (в том числе и для макросов) клавиатурные сочетания AltTab, AltEsc, AltSpace, AltEnter, AltPrntScrn, CtrlEsc и кнопку PrntScrn (она же PrtScr, она же PrintScreen) обычно зарезервированные Windows под системные нужды.

Очень краткая инструкция к очень короткому скрипту:
Перехватываемые клавиши перечисляются в строке с "local KEYS". После внесения изменений следует перезагрузить макросы или перезапустить ФАР.
Установка: Поместить скрипт в папку %farprofile%\macros\scripts или в любую подпапку там же.
Attachments
XKeys.1.00.7z
XKeys 1.00
(509 Bytes) Downloaded 153 times

User avatar
zg
zero-gravity
Posts: 5252
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

XKeys — скрипт для замены одноимённого плагина

Post by zg » Tue 23 Feb, 2016 17:54

Latest post of the previous page:

SendInput можно попробовать.

User avatar
DrKnS
Posts: 4589
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 116 times
Contact:

XKeys — скрипт для замены одноимённого плагина

Post by DrKnS » Tue 23 Feb, 2016 18:17

В Windows 10 AltEnter заняли под эмуляцию фулскрина.
Выключается вместе со всеми остальными новшествами в свойствах консоли.

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

XKeys — скрипт для замены одноимённого плагина

Post by John Doe » Sun 28 Aug, 2016 15:15

Модификация скрипта в основном с целью демонстрации возможностей ScriptsBrowser (информация F3, справка ShiftF1, выполнение Enter).
Опции можно редактировать (AltO), после этого для их немедленного применения выполнить по Enter.
Для сохранения изменённых опций можно использовать средства scriptscfg.
  1. local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info
  2. local nfo = Info { _filename or ...,
  3.   name        = "XKeys";
  4.   description = "Enable windows special keys in FAR";
  5.   version     = "1";
  6.   author      = "jd";
  7.   url         = "http://forum.farmanager.com/viewtopic.php?p=140361#p140361";
  8.   id          = "63D3028A-FE04-42B5-9EC6-01564BFDD4E0";
  9.   help        = function(nfo) far.Message(nfo.credits,"credits:",nil,"l") end;
  10.   credits     = [[
  11. modded version of smitis lua script: viewtopic.php?f=60&t=8481
  12. originally plugin by DrKnS: https://idkfa.googlecode.com/svn/trunk/XKeys/XKeys.cpp
  13. https://github.com/trexinc/evil-program ... /XKeys.cpp]];
  14.  
  15.   options     = {
  16.     autostart = true,
  17.     -- Клавиши, которые будут доступны в консоли
  18.     keys = "AltSpace AltEnter AltEsc CtrlEsc PrntScrn",
  19.   };
  20. }
  21. if not nfo then return end
  22. local O = nfo.options
  23.  
  24. local ffi = require("ffi")
  25. local C = ffi.C
  26. local TRUE = 1
  27. ffi.cdef "BOOL SetConsoleKeyShortcuts(BOOL Set, BYTE ReserveKeys, LPVOID AppKeys, DWORD NumAppKeys);"
  28.  
  29. local code = {AltTab=1,AltEsc=2,AltSpace=4,AltEnter=8,AltPrntScrn=16,PrntScrn=32,CtrlEsc=64}
  30.  
  31. function nfo:execute()
  32.   local KEYS = 0
  33.   O.keys:gsub("%w+",function(k) KEYS = KEYS + code[k] end)
  34.   C.SetConsoleKeyShortcuts(TRUE,KEYS,nil,0)
  35.   if self then far.Message(O.keys,nfo.name) end
  36. end
  37.  
  38. if O.autostart and not _G.runonce_done then
  39.   nfo.execute()
  40. end
  41.  
  42. if Event then Event { group="ExitFAR"; description="XKeys reset on quit";
  43.   action=function()
  44.     C.SetConsoleKeyShortcuts(TRUE,0,nil,0)
  45.   end;
  46. }end
Last edited by John Doe on Sun 28 Aug, 2016 15:30, edited 1 time in total.

Smitis
Posts: 1455
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 13 times
Been thanked: 23 times
Contact:

XKeys — скрипт для замены одноимённого плагина

Post by Smitis » Sun 28 Aug, 2016 22:49

13 строк (с коментариями) vs 46 строк (с удалёнными коментариями). Соотношение не радует. Понятно, что на больших скриптах соотношение будет меньше, но тем не менее...
Разум когда-нибудь победит.

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

XKeys — скрипт для замены одноимённого плагина

Post by John Doe » Sun 28 Aug, 2016 23:22

Целью было продемонстрировать функциональность.
Скрипт малюсенький, и разумнее не соотношение смотреть, а абсолютное значение.

Дополнительными 33 строками добавлено:
- метаинформация
- подобие справки
- пользовательские настройки
- контроль однократного выполнения
- подчистка при выходе
И управление всем из интерфейса scriptbrowser
Smitis wrote: Понятно, что на больших скриптах соотношение будет меньше, но тем не менее...
Оно и обратным может быть, поскольку вы сможете не реализовывать в скрипте собственные функции.
В частности работу с настройками.
Last edited by John Doe on Sun 28 Aug, 2016 23:25, edited 1 time in total.

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

XKeys — скрипт для замены одноимённого плагина

Post by John Doe » Mon 29 Aug, 2016 08:42

Smitis wrote: Соотношение не радует.
А вот для сравнения ваш скрипт без добавления функциональности (хелп только)

Code: Select all

local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info
local nfo = Info { _filename or ...,
  name        = "XKeys";
  description = "Скрипт для замены плагина XKeys";
  version     = "1";
  author      = "Smitis"; -- © 2014
  url         = "http://forum.farmanager.com/viewtopic.php?f=60&t=8481&start=32";
  helptxt     = [[
Скрипт для замены плагина XKeys
Позволяет использовать в ФАРе (в том числе и для макросов) клавиатурные сочетания
AltTab, AltEsc, AltSpace, AltEnter, AltPrntScrn, CtrlEsc и кнопку PrntScrn (она же PrtScr, она же PrintScreen)
обычно зарезервированные Windows под системные нужды.

Перехватываемые клавиши перечисляются в строке с "local KEYS". После внесения изменений следует перезагрузить макросы или перезапустить ФАР.
Установка: Поместить скрипт в папку %farprofile%\macros\scripts или в любую подпапку там же.
]]
}
if not nfo then return end

-- Флаги, соответствующие клавишам
local ALT_TAB,ALT_ESC,ALT_SPACE,ALT_ENTER,ALT_PRTSC,PRTSC,CTRL_ESC = 1,2,4,8,16,32,64
 
-- Клавиши, которые будут доступны в консоли (в виде суммы флагов).
-- Например ALT_SPACE+ALT_ENTER+ALT_PRTSC
local KEYS = ALT_SPACE + ALT_ENTER
 
local ffi = require "ffi"
ffi.cdef "void SetConsoleKeyShortcuts(bool bSet, char bReserveKeys, DWORD, DWORD);"
ffi.C.SetConsoleKeyShortcuts(1,KEYS,0,0)
Как по мне, то оверхэд минимальный.

Post Reply

Return to “Полезные макросы и скрипты”