Page 3 of 3

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

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

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

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

Posted: Tue 23 Feb, 2016 17:54
by zg

Latest post of the previous page:

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

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

Posted: Tue 23 Feb, 2016 18:17
by DrKnS
В Windows 10 AltEnter заняли под эмуляцию фулскрина.
Выключается вместе со всеми остальными новшествами в свойствах консоли.

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

Posted: Sun 28 Aug, 2016 15:15
by John Doe
Модификация скрипта в основном с целью демонстрации возможностей 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

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

Posted: Sun 28 Aug, 2016 22:49
by Smitis
13 строк (с коментариями) vs 46 строк (с удалёнными коментариями). Соотношение не радует. Понятно, что на больших скриптах соотношение будет меньше, но тем не менее...

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

Posted: Sun 28 Aug, 2016 23:22
by John Doe
Целью было продемонстрировать функциональность.
Скрипт малюсенький, и разумнее не соотношение смотреть, а абсолютное значение.

Дополнительными 33 строками добавлено:
- метаинформация
- подобие справки
- пользовательские настройки
- контроль однократного выполнения
- подчистка при выходе
И управление всем из интерфейса scriptbrowser
Smitis wrote: Понятно, что на больших скриптах соотношение будет меньше, но тем не менее...
Оно и обратным может быть, поскольку вы сможете не реализовывать в скрипте собственные функции.
В частности работу с настройками.

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

Posted: Mon 29 Aug, 2016 08:42
by John Doe
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)
Как по мне, то оверхэд минимальный.

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

Posted: Thu 21 Sep, 2017 09:13
by sToLp
Для того, чтобы в десятке клавиша Esc работала со всеми штатными модификаторами и их сочетаниями, надо помимо установки сабжевого срипта ещё и в настройках консоли выставить галочку в позиции "Использовать прежнюю версию консоли".

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

Posted: Thu 21 Sep, 2017 09:24
by John Doe
Ну зачем же 0x42, когда предусмотрены константы ALT_ESC+CTRL_ESC.
Т.е. дополнений в скрипт никаких не требуется.

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

Posted: Thu 21 Sep, 2017 09:39
by Smitis
Как я понимаю, в 10-ке нужен какой-то специальный режим консоли, в котором скрипт работает (десятка пока проходит мимо меня). Напишите, что там нужно делать, как это всё правильно называется. Информацию добавлю в шапку.

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

Posted: Thu 21 Sep, 2017 09:54
by sToLp
John Doe wrote:
Thu 21 Sep, 2017 09:24
Ну зачем же 0x42, когда предусмотрены константы ALT_ESC+CTRL_ESC.
Т.е. дополнений в скрипт никаких не требуется.
И ведь действительно! Дополнений в скрипт не требуется. Достаточно в настройках консоли выставить галочку в позиции "Использовать прежнюю версию консоли".
Smitis wrote:
Thu 21 Sep, 2017 09:39
Как я понимаю, в 10-ке нужен какой-то специальный режим консоли, в котором скрипт работает (десятка пока проходит мимо меня). Напишите, что там нужно делать, как это всё правильно называется. Информацию добавлю в шапку.
Выше сказано о том, что нужно сделать, чтобы в десятке скрипт работал в "голом" Far`е. В работающем же из-под ConEmu мне пока не удалось задействовать скрипт, даже после установления соответствующей настройки.

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

Posted: Sat 16 Nov, 2019 05:19
by Xerox
John Doe wrote:
Fri 07 Feb, 2014 15:42
HaRT
Функция недокументирована, и судя по скудости выдачи гугла — пользуются ей единицы.
В ReactOS не реализована, в Wine тоже (не знаю насколько она вообще там применима).
Как уже замечено выше — вероятность того, что фар вызван откуда-то кроме консоли cmd — стремится к 0
Я пользуюсь таким вызовом для краткости:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\f.exe]
@="C:\\Program Files\\Far Manager\\Far.exe"
Т.е. без консоли.

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

Posted: Sat 16 Nov, 2019 08:16
by John Doe
И что это меняет, в контексте данной темы?