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

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

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

Post by Smitis »

Скрипт для замены плагина 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 403 times
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

Latest post of the previous page:

abelenki wrote:пользуйтесь современными операционными системами.
За M$ не угонишься. Ещё не все компы с XP/2003 сдохли :)
Разум когда-нибудь победит.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Smitis wrote: это новшество 10-ки
Да, вот тут упоминается: http://www.askvg.com/review-windows-10- ... t-console/
abelenki wrote: Scren Buffer Size = 9999
Не надо считать себя умнее других. Я указал Вам, что Вы некорректно (уж во всяком случае недостаточно ясно) используете термин Full screen, но Вы, очевидно, не поняли. При таком отношении Вам будет всё труднее дождаться содержательных ответов на свои вопросы.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

SendInput можно попробовать.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

В Windows 10 AltEnter заняли под эмуляцию фулскрина.
Выключается вместе со всеми остальными новшествами в свойствах консоли.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post 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.  
  3. local nfo = Info { _filename or ...,
  4.  
  5.   name        = "XKeys";
  6.  
  7.   description = "Enable windows special keys in FAR";
  8.  
  9.   version     = "1";
  10.  
  11.   author      = "jd";
  12.  
  13.   url         = "http://forum.farmanager.com/viewtopic.php?p=140361#p140361";
  14.  
  15.   id          = "63D3028A-FE04-42B5-9EC6-01564BFDD4E0";
  16.  
  17.   help        = function(nfo) far.Message(nfo.credits,"credits:",nil,"l") end;
  18.  
  19.   credits     = [[
  20.  
  21. modded version of smitis lua script: viewtopic.php?f=60&t=8481
  22.  
  23. originally plugin by DrKnS: https://idkfa.googlecode.com/svn/trunk/XKeys/XKeys.cpp
  24.  
  25. https://github.com/trexinc/evil-program ... /XKeys.cpp]];
  26.  
  27.  
  28.  
  29.   options     = {
  30.  
  31.     autostart = true,
  32.  
  33.     -- Клавиши, которые будут доступны в консоли
  34.  
  35.     keys = "AltSpace AltEnter AltEsc CtrlEsc PrntScrn",
  36.  
  37.   };
  38.  
  39. }
  40.  
  41. if not nfo then return end
  42.  
  43. local O = nfo.options
  44.  
  45.  
  46.  
  47. local ffi = require("ffi")
  48.  
  49. local C = ffi.C
  50.  
  51. local TRUE = 1
  52.  
  53. ffi.cdef "BOOL SetConsoleKeyShortcuts(BOOL Set, BYTE ReserveKeys, LPVOID AppKeys, DWORD NumAppKeys);"
  54.  
  55.  
  56.  
  57. local code = {AltTab=1,AltEsc=2,AltSpace=4,AltEnter=8,AltPrntScrn=16,PrntScrn=32,CtrlEsc=64}
  58.  
  59.  
  60.  
  61. function nfo:execute()
  62.  
  63.   local KEYS = 0
  64.  
  65.   O.keys:gsub("%w+",function(k) KEYS = KEYS + code[k] end)
  66.  
  67.   C.SetConsoleKeyShortcuts(TRUE,KEYS,nil,0)
  68.  
  69.   if self then far.Message(O.keys,nfo.name) end
  70.  
  71. end
  72.  
  73.  
  74.  
  75. if O.autostart and not _G.runonce_done then
  76.  
  77.   nfo.execute()
  78.  
  79. end
  80.  
  81.  
  82.  
  83. if Event then Event { group="ExitFAR"; description="XKeys reset on quit";
  84.  
  85.   action=function()
  86.  
  87.     C.SetConsoleKeyShortcuts(TRUE,0,nil,0)
  88.  
  89.   end;
  90.  
  91. }end
Last edited by John Doe on Sun 28 Aug, 2016 15:30, edited 1 time in total.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

13 строк (с коментариями) vs 46 строк (с удалёнными коментариями). Соотношение не радует. Понятно, что на больших скриптах соотношение будет меньше, но тем не менее...
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

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

Дополнительными 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: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post 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)
Как по мне, то оверхэд минимальный.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

Для того, чтобы в десятке клавиша Esc работала со всеми штатными модификаторами и их сочетаниями, надо помимо установки сабжевого срипта ещё и в настройках консоли выставить галочку в позиции "Использовать прежнюю версию консоли".
Last edited by sToLp on Thu 21 Sep, 2017 09:56, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Ну зачем же 0x42, когда предусмотрены константы ALT_ESC+CTRL_ESC.
Т.е. дополнений в скрипт никаких не требуется.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

Как я понимаю, в 10-ке нужен какой-то специальный режим консоли, в котором скрипт работает (десятка пока проходит мимо меня). Напишите, что там нужно делать, как это всё правильно называется. Информацию добавлю в шапку.
Разум когда-нибудь победит.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post 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 мне пока не удалось задействовать скрипт, даже после установления соответствующей настройки.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post 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"
Т.е. без консоли.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

И что это меняет, в контексте данной темы?
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Знает ли кто-то способ перехватить в Фаре под десяткой прокрутку колёсиком с Ctrl и с CtrlShift (не откатываясь на «прежнюю версию консоли»)?
Хочу задействовать их на более востребованные действия, чем изменение размера шрифта и прозрачности (!) соответственно.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

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