XKeys — скрипт для замены одноимённого плагина
- Smitis
- Posts: 1732
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 25 times
- Been thanked: 58 times
XKeys — скрипт для замены одноимённого плагина
Скрипт для замены плагина XKeys
Позволяет использовать в ФАРе (в том числе и для макросов) клавиатурные сочетания AltTab, AltEsc, AltSpace, AltEnter, AltPrntScrn, CtrlEsc и кнопку PrntScrn (она же PrtScr, она же PrintScreen) обычно зарезервированные Windows под системные нужды.
Очень краткая инструкция к очень короткому скрипту:
Перехватываемые клавиши перечисляются в строке с "local KEYS". После внесения изменений следует перезагрузить макросы или перезапустить ФАР.
Установка: Поместить скрипт в папку %farprofile%\macros\scripts или в любую подпапку там же.
Позволяет использовать в ФАРе (в том числе и для макросов) клавиатурные сочетания 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 661 times
- Smitis
- Posts: 1732
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 25 times
- Been thanked: 58 times
XKeys — скрипт для замены одноимённого плагина
Latest post of the previous page:
За M$ не угонишься. Ещё не все компы с XP/2003 сдохлиabelenki wrote:пользуйтесь современными операционными системами.
Разум когда-нибудь победит.
- HaRT
- Moderator
- Posts: 11458
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 270 times
- Been thanked: 417 times
XKeys — скрипт для замены одноимённого плагина
Да, вот тут упоминается: http://www.askvg.com/review-windows-10- ... t-console/
Не надо считать себя умнее других. Я указал Вам, что Вы некорректно (уж во всяком случае недостаточно ясно) используете термин Full screen, но Вы, очевидно, не поняли. При таком отношении Вам будет всё труднее дождаться содержательных ответов на свои вопросы.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- John Doe
- Бюрократ
- Posts: 14582
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 92 times
- Been thanked: 514 times
- Contact:
XKeys — скрипт для замены одноимённого плагина
Модификация скрипта в основном с целью демонстрации возможностей ScriptsBrowser (информация F3, справка ShiftF1, выполнение Enter).
Опции можно редактировать (AltO), после этого для их немедленного применения выполнить по Enter.
Для сохранения изменённых опций можно использовать средства cfgscript.
Опции можно редактировать (AltO), после этого для их немедленного применения выполнить по Enter.
Для сохранения изменённых опций можно использовать средства cfgscript.
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 = "Enable windows special keys in FAR";
version = "1";
author = "jd";
url = "http://forum.farmanager.com/viewtopic.php?p=140361#p140361";
id = "63D3028A-FE04-42B5-9EC6-01564BFDD4E0";
help = function(nfo) far.Message(nfo.credits,"credits:",nil,"l") end;
credits = [[
modded version of smitis lua script: viewtopic.php?f=60&t=8481
originally plugin by DrKnS: https://idkfa.googlecode.com/svn/trunk/XKeys/XKeys.cpp
https://github.com/trexinc/evil-program ... /XKeys.cpp]];
options = {
autostart = true,
-- Клавиши, которые будут доступны в консоли
keys = "AltSpace AltEnter AltEsc CtrlEsc PrntScrn",
};
}
if not nfo then return end
local O = nfo.options
local ffi = require("ffi")
local C = ffi.C
local TRUE = 1
ffi.cdef "BOOL SetConsoleKeyShortcuts(BOOL Set, BYTE ReserveKeys, LPVOID AppKeys, DWORD NumAppKeys);"
local code = {AltTab=1,AltEsc=2,AltSpace=4,AltEnter=8,AltPrntScrn=16,PrntScrn=32,CtrlEsc=64}
function nfo:execute()
local KEYS = 0
O.keys:gsub("%w+",function(k) KEYS = KEYS + code[k] end)
C.SetConsoleKeyShortcuts(TRUE,KEYS,nil,0)
if self then far.Message(O.keys,nfo.name) end
end
if O.autostart and not _G.runonce_done then
nfo.execute()
end
if Event then Event { group="ExitFAR"; description="XKeys reset on quit";
action=function()
C.SetConsoleKeyShortcuts(TRUE,0,nil,0)
end;
}end
Last edited by John Doe on Sun 28 Aug, 2016 15:30, edited 1 time in total.
- Smitis
- Posts: 1732
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 25 times
- Been thanked: 58 times
XKeys — скрипт для замены одноимённого плагина
13 строк (с коментариями) vs 46 строк (с удалёнными коментариями). Соотношение не радует. Понятно, что на больших скриптах соотношение будет меньше, но тем не менее...
Разум когда-нибудь победит.
- John Doe
- Бюрократ
- Posts: 14582
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 92 times
- Been thanked: 514 times
- Contact:
XKeys — скрипт для замены одноимённого плагина
Целью было продемонстрировать функциональность.
Скрипт малюсенький, и разумнее не соотношение смотреть, а абсолютное значение.
Дополнительными 33 строками добавлено:
- метаинформация
- подобие справки
- пользовательские настройки
- контроль однократного выполнения
- подчистка при выходе
И управление всем из интерфейса scriptbrowser
В частности работу с настройками.
Скрипт малюсенький, и разумнее не соотношение смотреть, а абсолютное значение.
Дополнительными 33 строками добавлено:
- метаинформация
- подобие справки
- пользовательские настройки
- контроль однократного выполнения
- подчистка при выходе
И управление всем из интерфейса scriptbrowser
Оно и обратным может быть, поскольку вы сможете не реализовывать в скрипте собственные функции.
В частности работу с настройками.
Last edited by John Doe on Sun 28 Aug, 2016 23:25, edited 1 time in total.
- John Doe
- Бюрократ
- Posts: 14582
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 92 times
- Been thanked: 514 times
- Contact:
XKeys — скрипт для замены одноимённого плагина
А вот для сравнения ваш скрипт без добавления функциональности (хелп только)
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 — скрипт для замены одноимённого плагина
Для того, чтобы в десятке клавиша Esc работала со всеми штатными модификаторами и их сочетаниями, надо помимо установки сабжевого срипта ещё и в настройках консоли выставить галочку в позиции "Использовать прежнюю версию консоли".
Last edited by sToLp on Thu 21 Sep, 2017 09:56, edited 1 time in total.
- John Doe
- Бюрократ
- Posts: 14582
- Joined: Wed 27 Apr, 2005 20:42
- Location: github.com/FarManagerLegacy
- Has thanked: 92 times
- Been thanked: 514 times
- Contact:
XKeys — скрипт для замены одноимённого плагина
Ну зачем же 0x42, когда предусмотрены константы ALT_ESC+CTRL_ESC.
Т.е. дополнений в скрипт никаких не требуется.
Т.е. дополнений в скрипт никаких не требуется.
- Smitis
- Posts: 1732
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 25 times
- Been thanked: 58 times
XKeys — скрипт для замены одноимённого плагина
Как я понимаю, в 10-ке нужен какой-то специальный режим консоли, в котором скрипт работает (десятка пока проходит мимо меня). Напишите, что там нужно делать, как это всё правильно называется. Информацию добавлю в шапку.
Разум когда-нибудь победит.
XKeys — скрипт для замены одноимённого плагина
И ведь действительно! Дополнений в скрипт не требуется. Достаточно в настройках консоли выставить галочку в позиции "Использовать прежнюю версию консоли".John Doe wrote: Thu 21 Sep, 2017 09:24 Ну зачем же 0x42, когда предусмотрены константы ALT_ESC+CTRL_ESC.
Т.е. дополнений в скрипт никаких не требуется.
Выше сказано о том, что нужно сделать, чтобы в десятке скрипт работал в "голом" Far`е. В работающем же из-под ConEmu мне пока не удалось задействовать скрипт, даже после установления соответствующей настройки.Smitis wrote: Thu 21 Sep, 2017 09:39Как я понимаю, в 10-ке нужен какой-то специальный режим консоли, в котором скрипт работает (десятка пока проходит мимо меня). Напишите, что там нужно делать, как это всё правильно называется. Информацию добавлю в шапку.
XKeys — скрипт для замены одноимённого плагина
Я пользуюсь таким вызовом для краткости: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"
- HaRT
- Moderator
- Posts: 11458
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 270 times
- Been thanked: 417 times
XKeys — скрипт для замены одноимённого плагина
Знает ли кто-то способ перехватить в Фаре под десяткой прокрутку колёсиком с
Хочу задействовать их на более востребованные действия, чем изменение размера шрифта и прозрачности (!) соответственно.
Ctrl и с CtrlShift (не откатываясь на «прежнюю версию консоли»)?Хочу задействовать их на более востребованные действия, чем изменение размера шрифта и прозрачности (!) соответственно.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- Zeroes
- Мультикопипастер Броадкастер
- Posts: 659
- Joined: Wed 16 Mar, 2005 20:53
- Location: Gomel \ Belarus
- Has thanked: 4 times
- Been thanked: 15 times
XKeys — скрипт для замены одноимённого плагина
HaRT,
Шаблон1:
Шаблон2:
на CtrlShift+колесо применена защита против эффекта переключения языка [если в Windows это переключение на CtrlShift]
примеры выше для любого процесса запущенного под Conhost, но можно сделать чтобы срабатывало только для Far:
вместо "ahk_class ConsoleWindowClass" указываем "ahk_exe Far.exe"
если нужна помощь можно в личку обратится.
нужен Autohotkey v2.x [как вариант скачать последнюю портативную версию https://www.autohotkey.com/download/ahk-v2.zip в каталоге создать AutoHotkey64.ahk туда добавить скрипт, ярлык на AutoHotkey64.exe поместить в автозагрузку].HaRT wrote: Thu 20 Jul, 2023 00:44 Знает ли кто-то способ перехватить в Фаре под десяткой прокрутку колёсиком с Ctrl и с CtrlShift (не откатываясь на «прежнюю версию консоли»)?
Хочу задействовать их на более востребованные действия, чем изменение размера шрифта и прозрачности (!) соответственно.
Шаблон1:
Code: Select all
HotIfWinActive "ahk_class ConsoleWindowClass"
Hotkey "^WheelUp", Cmd1
Hotkey "^+WheelUp", Cmd2
Cmd1(HotkeyName)
{
MsgBox "1"
}
Cmd2(HotkeyName)
{
MsgBox "2"
}
Code: Select all
#HotIf MouseIsOverConsole("ahk_class ConsoleWindowClass")
^WheelUp::Send "{Volume_Up}"
^WheelDown::Send "{Volume_Down}"
^+WheelUp::Send "{Ctrl Down}{Shift Down}{Volume_Up}{Ctrl Up}{Shift Up}"
^+WheelDown::Send "{Ctrl Down}{Shift Down}{Volume_Down}{Ctrl Up}{Shift Up}"
MouseIsOverConsole(WinTitle)
{
MouseGetPos ,, &Win
return WinExist(WinTitle " ahk_id " Win)
}
#HotIf
примеры выше для любого процесса запущенного под Conhost, но можно сделать чтобы срабатывало только для Far:
вместо "ahk_class ConsoleWindowClass" указываем "ahk_exe Far.exe"
если нужна помощь можно в личку обратится.
Last edited by Zeroes on Fri 16 Aug, 2024 13:32, edited 5 times in total.
--- Zeroes & Ones ---