Page 1 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 или в любую подпапку там же.

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

Posted: Fri 07 Feb, 2014 09:59
by John Doe
Рекомендую в описании указать назначение макроса, чтобы избавить читателей от ненужных скачков по форуму.
То же касается и заголовка темы.

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

Posted: Fri 07 Feb, 2014 10:01
by Shmuel
Строго говоря, это не макрос, а скрипт.

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

Posted: Fri 07 Feb, 2014 10:26
by Smitis
По привычке писал "макрос". Исправил на "скрипт".
На счёт заголовка не уверен, как лучше, что бы было не очень длинно.
Может просто сократить до "XKeys"?

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

Posted: Fri 07 Feb, 2014 10:57
by HaRT
Smitis wrote:как лучше, что бы было не очень длинно.
Может просто сократить до "XKeys"?
Зачем что-то выдумывать?
Предлагаю “Задействовать разные хитрые кнопки (AltEnter, AltSpace, PrntScrn, …) в макросах и т.п.”.
А вот название, думаю, лучше сменить, чтобы не было путаницы между нативным плагином и луа-скриптом.

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

Posted: Fri 07 Feb, 2014 11:15
by John Doe
Мой вариант заголовка и предыстории:
XKeys — доступ к клавишам, зарезервированным консолью

Консоль Windows резервирует для собственных функций следующие клавиатурные сочетания:

Code: Select all

AltTab, AltEsc, AltSpace, AltEnter, AltPrntScrn, CtrlEsc, PrntScrn (PrtScr, PrintScreen)
Поэтому их невозможно использовать в фаре, нельзя назначить на них макросы и т.п.
Однако выход есть: с помощью недокументированной функции Windows API SetConsoleKeyShortcuts можно "разблокировать" нужные клавиши.

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

Posted: Fri 07 Feb, 2014 12:06
by John Doe
HaRT wrote:А вот название, думаю, лучше сменить, чтобы не было путаницы между нативным плагином и луа-скриптом.
Плагин для Far 2, а скрипт - для Far 3.
Мне кажется этот тот случай, когда общность названий к лучшему.

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

Posted: Fri 07 Feb, 2014 12:19
by John Doe

Code: Select all

Event { group="ExitFAR"; description="XKeys reset on quit";
  action=function() C.SetConsoleKeyShortcuts(1,0,0,0) end;
}

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

Posted: Fri 07 Feb, 2014 12:21
by HaRT
John Doe wrote:Консоль Windows резервирует для собственных функций следующие клавиатурные сочетания:

Code: Select all

AltTab, AltEsc, AltSpace, AltEnter, AltPrntScrn, CtrlEsc, PrntScrn (PrtScr, PrintScreen)
Поэтому их невозможно использовать в фаре, нельзя назначить на них макросы и т.п.
Я только сейчас осознал, что это не сделать через пользовательский интерфейс свойств консоли. Привык, что для PIF-файлов можно было галочками отметить, какие из этих сочетаний оставить системе. :oops:

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

Posted: Fri 07 Feb, 2014 12:24
by Smitis
HaRT wrote:А вот название, думаю, лучше сменить, чтобы не было путаницы между нативным плагином и луа-скриптом.
И как их можно перепутать? :)
Предлагаю “Задействовать разные хитрые кнопки (AltEnter, AltSpace, PrntScrn, …) в макросах и т.п.”.
Вот только если так обозвать имя файла со скриптом... как то не очень... :)

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

Posted: Fri 07 Feb, 2014 12:26
by Smitis
John Doe wrote:

Code: Select all

Event { group="ExitFAR"; description="XKeys reset on quit";
  action=function() C.SetConsoleKeyShortcuts(1,0,0,0) end;
}
А надо?

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

Posted: Fri 07 Feb, 2014 12:29
by John Doe
HaRT wrote:Привык, что для PIF-файлов можно было галочками отметить, какие из этих сочетаний оставить системе. :oops:
Через PIF можно и сейчас наверно сделать. Не получилось

Smitis
Не обязательно, но в плагине было.

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

Posted: Fri 07 Feb, 2014 12:58
by Smitis
John Doe wrote:но в плагине было.
Я видел. Оттуда и позаимствовал идею.
Вот если запускать ФАР из командного файла и если после закрытия ФАРа (не через [x]) из этого командного файла запускать ещё какую-нибудь консольную программу при работе которой эти кнопкосочетания обязательно нужно вернуть системе... Как-то слишком надумано, а других вариатов придумать не смог. Пока не буду переусложнять.

П.С.
Ах да, ещё вариант из какой-нибудь другой консольной программы запускать ФАР в качестве редактора/просмоторщика...

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

Posted: Fri 07 Feb, 2014 15:38
by HaRT
John Doe wrote:

Code: Select all

Event { group="ExitFAR"; description="XKeys reset on quit";
  action=function() C.SetConsoleKeyShortcuts(1,0,0,0) end;
}
Идеально было бы как-то восстанавливать запомненное прежде значение…
Да вот функции GetConsoleKeyShortcuts в kernel32.dll нету. Кто-нибудь проверял, SetConsoleKeyShortcuts часом не возвращает старое значение под видом BOOL? Или может при каком другом значении первого параметра (например, 0)?
PS
Кстати, меня обманывает память, или несколько лет назад исходники тогдашней Винды утекли в открытый доступ? Если так, то можно было бы там глянуть…

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

Posted: Fri 07 Feb, 2014 15:42
by John Doe
HaRT
Функция недокументирована, и судя по скудости выдачи гугла — пользуются ей единицы.
В ReactOS не реализована, в Wine тоже (не знаю насколько она вообще там применима).

Как уже замечено выше — вероятность того, что фар вызван откуда-то кроме консоли cmd — стремится к 0