Общесистемные горячие клавиши
Posted: Fri Jun 30, 2006 3:56 pm
В ядро ревизии 92 добавлена поддержка горячих клавиш.
1. Пользователям.
Соответственно изменено приложение @panel. В частности, поток, отвечавший за постоянное сканирование клавиатуры, перестал расходовать зря процессорное время, после чего удалось его объединить с основным потоком. (Итого в системе стало на один поток меньше.) Новый код залит на svn, кроме того, бинарник временно (до очередного дистрибутива) можно скачать здесь:
http://diamondz.land.ru/@panel
http://diamondz.land.ru/kernel.mnt (бинарник ядра, как обычно).
Заодно переписал работу с файловой системой на 70-ю функцию.
Функция 18.12 в новом ядре просто возвращает 0. Можно рассматривать это как средство для обратной совместимости, можно считать зарезервированным на будущее. В результате старая @panel с новым ядром, равно как и новая @panel со старым ядром, работают, но не поддерживают горячих клавиш.
Панель реагирует на следующие комбинации: (я их не менял)
LShift+RShift - переключение то ли раскладки, то ли языка системы
Ctrl+Shift - наоборот (то ли языка, то ли раскладки, сейчас точно не помню)
Ctrl+Alt+F12 - для вызова приложения end
Alt+Win - для вызова menu
Alt+F4 - убивание активного окна; кстати, я разобрался, почему раньше это не срабатывало на некоторых приложениях - не срабатывало в точности на использовавших сканкоды - из-за того, что был неправильно указан сканкод клавиши F4 (ASCII-код был указан правильно, а это были две разные ветки кода - поэтому на части приложений работало, а на части нет)
Alt+Home/Alt+UpArrow - прокрутка панели вправо/влево. Эту комбинацию придумал не я, она существует начиная с Kolibri 0.5.3.0, но раньше она срабатывала только если приложение использует сканкоды (возьмите Kolibri 0.5.3.0. Запустите scancode. Понажимайте Alt+Home/Alt+Up, учитывая, что панелька ленивая и перерисовывается когда считает нужным. Закройте scancode (ещё раз убедившись, что Alt+F4 не работает). Откройте keyascii. Снова понажимайте. Теперь проделайте такие же операции с текущими ядром и панелью. Ну и как?)
Скорее всего, её создатель (видимо, Mario79, он добавил возможность прокрутки панели) имел в виду что-то другое, но что?
Кстати, по поводу Alt+стрелки. Когда-то давно это приводило к перемещению курсора мыши. Теперь код в keyboard.inc всё ещё есть, но почему-то не работает. Будем исправлять или просто забьём на эту возможность? А то Alt+стрелки могут применяться в разных программах. Скажем, в (Windows-) Far'е Alt+Home/End/LeftArrow/RightArrow служат для показа очень длинных имён файлов, и мне кажется разумным добавить их в kfar.
2. Программистам.
Горячие клавиши добавляются/удаляются подфункциями 3 и 4 функции 66. При нажатии зарегистрированной комбинации приложение получает событие 2 - такое же, как и при нажатии на обычную клавишу, я не стал плодить события... Прочитать такую комбинацию можно той же функцией 2, только в этом случае она возвращает al=2. Подробности можно прочитать в документации. По поводу обратной совместимости можно не волноваться - если программа не устанавливает горячих клавиш, то извещений о них она не получает.
Демонстрационный пример "подвешивает" на NumLock вызов calc.
http://diamondz.land.ru/@numcalc
http://diamondz.land.ru/@numcalc.asm
Желающие могут добавить его в autorun.dat, ресурсов он практически не кушает. (Памяти - одна страничка (меньше нельзя), процессорное время - только при инициализации и при нажатии NumLock). Пожалуй, это самая маленькая программа, которая может использоваться в практических целях - 110 байт, на втором месте vrr_m - 150 байт.
1. Пользователям.
Соответственно изменено приложение @panel. В частности, поток, отвечавший за постоянное сканирование клавиатуры, перестал расходовать зря процессорное время, после чего удалось его объединить с основным потоком. (Итого в системе стало на один поток меньше.) Новый код залит на svn, кроме того, бинарник временно (до очередного дистрибутива) можно скачать здесь:
http://diamondz.land.ru/@panel
http://diamondz.land.ru/kernel.mnt (бинарник ядра, как обычно).
Заодно переписал работу с файловой системой на 70-ю функцию.
Функция 18.12 в новом ядре просто возвращает 0. Можно рассматривать это как средство для обратной совместимости, можно считать зарезервированным на будущее. В результате старая @panel с новым ядром, равно как и новая @panel со старым ядром, работают, но не поддерживают горячих клавиш.
Панель реагирует на следующие комбинации: (я их не менял)
LShift+RShift - переключение то ли раскладки, то ли языка системы
Ctrl+Shift - наоборот (то ли языка, то ли раскладки, сейчас точно не помню)
Ctrl+Alt+F12 - для вызова приложения end
Alt+Win - для вызова menu
Alt+F4 - убивание активного окна; кстати, я разобрался, почему раньше это не срабатывало на некоторых приложениях - не срабатывало в точности на использовавших сканкоды - из-за того, что был неправильно указан сканкод клавиши F4 (ASCII-код был указан правильно, а это были две разные ветки кода - поэтому на части приложений работало, а на части нет)
Alt+Home/Alt+UpArrow - прокрутка панели вправо/влево. Эту комбинацию придумал не я, она существует начиная с Kolibri 0.5.3.0, но раньше она срабатывала только если приложение использует сканкоды (возьмите Kolibri 0.5.3.0. Запустите scancode. Понажимайте Alt+Home/Alt+Up, учитывая, что панелька ленивая и перерисовывается когда считает нужным. Закройте scancode (ещё раз убедившись, что Alt+F4 не работает). Откройте keyascii. Снова понажимайте. Теперь проделайте такие же операции с текущими ядром и панелью. Ну и как?)
Скорее всего, её создатель (видимо, Mario79, он добавил возможность прокрутки панели) имел в виду что-то другое, но что?
Кстати, по поводу Alt+стрелки. Когда-то давно это приводило к перемещению курсора мыши. Теперь код в keyboard.inc всё ещё есть, но почему-то не работает. Будем исправлять или просто забьём на эту возможность? А то Alt+стрелки могут применяться в разных программах. Скажем, в (Windows-) Far'е Alt+Home/End/LeftArrow/RightArrow служат для показа очень длинных имён файлов, и мне кажется разумным добавить их в kfar.
2. Программистам.
Горячие клавиши добавляются/удаляются подфункциями 3 и 4 функции 66. При нажатии зарегистрированной комбинации приложение получает событие 2 - такое же, как и при нажатии на обычную клавишу, я не стал плодить события... Прочитать такую комбинацию можно той же функцией 2, только в этом случае она возвращает al=2. Подробности можно прочитать в документации. По поводу обратной совместимости можно не волноваться - если программа не устанавливает горячих клавиш, то извещений о них она не получает.
Демонстрационный пример "подвешивает" на NumLock вызов calc.
http://diamondz.land.ru/@numcalc
http://diamondz.land.ru/@numcalc.asm
Желающие могут добавить его в autorun.dat, ресурсов он практически не кушает. (Памяти - одна страничка (меньше нельзя), процессорное время - только при инициализации и при нажатии NumLock). Пожалуй, это самая маленькая программа, которая может использоваться в практических целях - 110 байт, на втором месте vrr_m - 150 байт.