Как сделать привязку на клавиатуре

Обновлено: 05.07.2024

Класс JComponent поддерживает привязки клавиш как способ реагирования на отдельные клавиши, введенные пользователем. Вот несколько примеров, когда привязки клавиш уместны:

  • Вы создаете пользовательский компонент и хотите обеспечить доступ к нему с помощью клавиатуры.
    Например, вы можете захотеть, чтобы компонент реагировал, когда он находится в фокусе и пользователь нажимает клавишу пробела.
  • Вы хотите переопределить поведение существующей привязки клавиш.
    Например, если ваше приложение обычно реагирует на нажатие клавиши F2 определенным образом, вы можете захотеть, чтобы оно выполняло другое действие или игнорировало нажатие клавиши.
  • Вы хотите предоставить новую привязку клавиш для существующего действия.
    Например, вы можете твердо утверждать, что сочетание клавиш Control-Shift-Insert должно выполнять операцию вставки.

Часто вам не нужно напрямую использовать привязки клавиш. Они используются за кулисами мнемоникой (поддерживается всеми кнопками и панелями с вкладками, а также JLabel) и ускорителями (поддерживается пунктами меню). Вы можете найти информацию о мнемониках и акселераторах в разделе «Включение работы с клавиатурой».

Альтернативой привязкам клавиш является прослушивание ключей. Ключевые прослушиватели имеют свое место в качестве низкоуровневого интерфейса для ввода с клавиатуры, но для реагирования на отдельные клавиши более подходят привязки клавиш и, как правило, приводят к более легкому сопровождению кода. Ключевые прослушиватели также сложны, если привязка клавиш должна быть активной, когда компонент не имеет фокуса. Некоторые из преимуществ привязок клавиш заключаются в том, что они в некоторой степени самодокументируются, учитывают иерархию сдерживания, поощряют многократное использование фрагментов кода (объекты Action) и позволяют легко удалять, настраивать или совместно использовать действия. Кроме того, они упрощают изменение клавиши, к которой привязано действие. Еще одним преимуществом действий является то, что они имеют включенное состояние, которое позволяет легко отключить действие, не отслеживая, к какому компоненту оно подключено.

В оставшейся части этого раздела приведены сведения, необходимые для использования привязок клавиш:

Как работают привязки клавиш

Поддержка привязки клавиш, предоставляемая JComponent, зависит от классов InputMap и ActionMap. Карта ввода связывает нажатия клавиш с именами действий, а карта действий указывает действие, соответствующее каждому имени действия. Технически вам не нужно использовать имена действий на картах; вы можете использовать любой объект в качестве «ключа» к картам. Однако по соглашению вы используете строку, которая называет действие.

У каждой InputMap/ActionMap есть родительский элемент, который обычно исходит из пользовательского интерфейса. Каждый раз, когда внешний вид изменяется, родитель сбрасывается. Таким образом, любые привязки, указанные разработчиком, никогда не теряются при изменении внешнего вида.

Каждый JComponent имеет одну карту действий и три карты ввода. Входные карты соответствуют следующим ситуациям фокусировки:

JComponent.WHEN_FOCUSED Компонент имеет фокус клавиатуры. Входная карта WHEN_FOCUSED обычно используется, когда у компонента нет дочерних элементов. Например, кнопки связывают клавишу пробела с помощью карты WHEN_FOCUSED.
Эти привязки эффективны только тогда, когда компонент имеет фокус. JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT Компонент содержит (или является) компонентом, который имеет фокус. Эта входная карта обычно используется для составного компонента — компонента, реализация которого зависит от дочерних компонентов. Например, JTable делают все свои привязки, используя WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, так что, если пользователь редактирует, клавиша со стрелкой вверх (например) по-прежнему изменяет выбранную ячейку. JComponent.WHEN_IN_FOCUSED_WINDOW Окно компонента либо имеет фокус, либо содержит компонент, который имеет фокус. Эта карта ввода обычно используется для мнемоники или ускорителей, которые должны быть активны независимо от того, где в окне находится фокус.

Когда пользователь вводит ключ, код обработки события ключа JComponent просматривает одну или несколько входных карт, чтобы найти допустимую привязку для ключа. Когда он находит привязку, он ищет соответствующее действие в карте действий. Если действие включено, привязка действительна и действие выполняется. Если он отключен, поиск действительной привязки продолжается.

Если для ключа существует более одной привязки, используется только первая найденная допустимая. Входные карты проверяются в следующем порядке:

  1. Входная карта WHEN_FOCUSED сфокусированного компонента.
  2. Карта ввода WHEN_ANCESTOR_OF_FOCUSED_COMPONENT выделенного компонента.
  3. Входные карты WHEN_ANCESTOR_OF_FOCUSED_COMPONENT сопоставляют родительский элемент сфокусированного компонента, затем родитель его родительского элемента и т. д., продолжая иерархию включения. Примечание. Карты ввода для отключенных компонентов пропускаются.
  4. Выполняется поиск входных карт WHEN_IN_FOCUSED_WINDOW всех включенных компонентов в выделенном окне. Поскольку порядок поиска компонентов непредсказуем, избегайте дублирования привязок WHEN_IN_FOCUSED_WINDOW!

Давайте рассмотрим, что происходит в двух типичных случаях привязки клавиш: кнопка, реагирующая на клавишу пробела, и фрейм с кнопкой по умолчанию, реагирующей на клавишу Enter.

В первом случае предположим, что пользователь нажимает клавишу пробела, когда JButton находится в фокусе клавиатуры. Во-первых, ключевые слушатели кнопки уведомляются о событии. Предполагая, что ни один из прослушивателей ключей не потребляет событие (вызывая метод потребления в KeyEvent ), используется карта ввода WHEN_FOCUSED кнопки. Привязка найдена, потому что JButton использует эту входную карту для привязки пробела к имени действия. Имя действия просматривается в карте действий кнопки, и вызывается метод действия actionPerformed. KeyEvent потребляется, и обработка останавливается.

Во втором случае предположим, что клавиша Enter нажата, когда фокус находится в любом месте внутри фрейма, имеющего кнопку по умолчанию (устанавливается с помощью метода setDefaultButton JRootPane). Каким бы ни был сфокусированный компонент, его ключевые слушатели сначала уведомляются. Предполагая, что ни один из них не использует ключевое событие, сверяется с входной картой WHEN_FOCUSED сфокусированного компонента. Если у него нет привязки к клавише или действие, привязанное к клавише, отключено, то используется входная карта WHEN_ANCESTOR_OF_FOCUSED_COMPONENT сфокусированного компонента, а затем (если привязка не найдена или действие, привязанное к клавише, отключено) входные карты WHEN_ANCESTOR_OF_FOCUSED_COMPONENT каждого предков компонента в иерархии включения. В конце концов, выполняется поиск входной карты WHEN_ANCESTOR_OF_FOCUSED_COMPONENT корневой панели. Поскольку эта входная карта имеет действительную привязку для Enter, действие выполняется, вызывая нажатие кнопки по умолчанию.

Как создавать и удалять привязки клавиш

Вот пример указания того, что компонент должен реагировать на клавишу F2:

Как видно из предыдущего кода, для получения карты действий компонента используется метод getActionMap (унаследованный от JComponent ). Чтобы получить входную карту, вы можете использовать метод getInputMap(int), где целое число является одной из констант JComponent.WHEN_*FOCUSED*, показанных в предыдущем списке. Или, в обычном случае, когда константа JComponent.WHEN_FOCUSED , вы можете просто использовать getInputMap без аргументов.

Чтобы добавить запись на одну из карт, используйте метод put. Вы указываете ключ с помощью объекта KeyStroke, который можно получить с помощью метода KeyStroke.getKeyStroke(String). Вы можете найти примеры создания действия (чтобы добавить карту действий) в разделе «Как использовать действия».

Вот немного более сложный пример, в котором указано, что компонент должен реагировать на клавишу пробела, как если бы пользователь щелкнул мышью.

Чтобы заставить компонент игнорировать клавишу, на которую он обычно реагирует, можно использовать специальное имя действия "none". Например, следующий код заставляет компонент игнорировать клавишу F2.

Предыдущий код не препятствует поиску соответствующих входных карт WHEN_ANCESTOR_OF_FOCUSED_COMPONENT и WHEN_IN_FOCUSED_WINDOW для привязки клавиши F2. Чтобы предотвратить этот поиск, вы должны использовать допустимое действие вместо «нет». Например:

API привязки ключей

В следующих таблицах перечислены часто используемые API для привязки клавиш. Также см. таблицу API «Создание и использование действия» в разделе «Как использовать действия».

Измените свой привязки клавиатуры мгновенно с помощью программного обеспечения». /><br /></p>
<p>Быстрые пальцы и молниеносные рефлексы помогут вам побеждать в виртуальных сражениях, играя против реальных или созданных компьютером противников в компьютерных играх. Один из способов увеличить скорость — играть с помощью клавиш, которые легко нажимать. Например, вам может быть удобнее нажать клавишу «J», а не тянуться вверх, чтобы нажать «F12». Сделайте это, загрузив программу, которая связывает одну клавишу на вашей клавиатуре с другой.</p>
<p>Установите KeyTweak, программу, которая работает со всеми текущими версиями Windows. Когда вы запускаете KeyTweak, он отображает на экране небольшую виртуальную клавиатуру. Чтобы переназначить клавишу, щелкните любую клавишу на этой клавиатуре, чтобы выбрать ее, а затем выберите другую клавишу из раскрывающегося списка. После выхода из системы и перезапуска Windows ключевые изменения вступят в силу. Вы также можете использовать KeyTweak для переназначения специальных клавиш, таких как клавиша громкости, которые могут отображаться на некоторых клавиатурах.</p>
<p>Используйте программу переназначения ключей SharpKeys. В SharpKeys нет виртуальной клавиатуры, но она может помочь вам привязать клавиши к другим. Нажмите кнопку «Добавить» программы, и в окне «Добавить новое сопоставление ключей» отобразится список ключей «От» слева и список ключей «Кому» справа. Вы можете щелкнуть один из ключей в списке «Кому», а затем щелкнуть ключ, который вы хотите сделать, в списке «Кому». Например, чтобы сопоставить клавишу «5» на цифровой клавиатуре с «F12», нажмите «Число 5» в столбце «От кого», а затем нажмите клавишу «F12», расположенную в столбце «Кому». Если вы используете эту программу для переназначения клавиатуры, вы должны выйти из Windows и снова войти в систему, чтобы изменения вступили в силу.</p>
<p>Посетите веб-сайт AutoHotKey и загрузите бесплатную программу AutoHotKey. AutoHotKey может помочь вам выполнять сложные игровые задачи, нажав одну кнопку. В отличие от многих других программ переназначения, AutoHotKey позволяет назначать сложные комбинации клавиш. В следующем примере «Ctrl» и «C» переназначаются на правую клавишу «Alt»:</p>
<p>Целевой ключ

bind — это консольная команда, доступная во всех играх Source. Он позволяет связать другие консольные команды с клавишей.

Ошибка: такие команды, как +forward, могут не работать в цепочках из нескольких команд внутри привязок. См. псевдоним для возможных решений.

Синтаксис

Если вы хотите, чтобы ваша клавиша v переключала noclip , введите в консоли bind "v" "noclip".

Примечание. Кавычки вокруг строк не всегда обязательны, но их следует использовать, чтобы исключить неправильное толкование специальных символов, таких как пробелы и точки с запятой.

Специальные клавиши

Имя привязки Ключ
вкладка Табулятор (выше Capslock)
Capslock Capslock
numlock Numlock
scrolllock Scrolllock
shift Shift (ниже Capslock)
backspace Backspace (над Enter)
enter Введите
точка с запятой Точка с запятой (этот символ: ";")
экранирование "ESC" (Вверху слева от клавиатуры)
пробел Пробел
alt Alt (слева от пробела)
lwin Клавиша Windows (слева от пробела)
rwin Клавиша Windows (справа от пробела)
приложения Меню
стрелка вверх стрелка вверх
стрелка вниз стрелка вниз
Стрелка влево Стрелка влево
r ightarrow Стрелка вправо
ins Вставка (над стрелками)
del Удалить (стрелки вверху)
pgdn Page Down (стрелки вверху)
pgup Page Up (над стрелками)
home Главная (над стрелками)
конец Конец (над стрелками)
пауза Пауза/Перерыв ( Над стрелками)
Имя привязки Ключ
kp_end Клавиатура 1
kp_downarrow Клавиатура 2
kp_pgdn Клавиатура 3
kp_leftarrow Клавиатура 4
kp_5 Клавиатура 5
kp_rightarrow Клавиатура 6
kp_home Клавиатура 7
kp_uparrow Клавиатура 8
kp_pgup Клавиатура 9
kp_enter Ввод с клавиатуры
kp_ins Клавиатура 0
kp_del Клавиатура .
kp_slash Клавиатура /
kp_multiply Клавиатура *
kp_minus Клавиатура -
kp_plus Клавиатура +
< tr >
Имя привязки Ключ
mwheeldown Мышь — прокрутка вниз
mwheelup Мышь — прокрутка вверх
mouse1 Мышь — щелчок левой кнопкой мыши
mouse2 Мышь — щелчок правой кнопкой мыши
mouse3 Мышь – Щелчок колесиком
mouse4 Мышь – Назад на страницу
mouse5 Мышь — перемотка страницы
радость1-32 Кнопки джойстика и геймпада.
aux1-32 Устаревшие. Сопоставляется непосредственно с радостью1-32.

Связанные консольные команды

binds_per_command

Установите максимальное количество привязок на команду в консоли. Не относится к настольному компьютеру.

Переключение привязки

Удобная команда для включения или выключения Cvar нажатием клавиши. Функционально идентичен bind KEY " incrementvar CVAR 0 1 1" .

Если вы хотите, чтобы ключ p включал или выключал sv_cheats, введите BindToggle p sv_cheats .

bind_mac

Функции аналогичны функции привязки, за исключением того, что это касается только пользователей Mac OS.

отвязать

Противоположность bind . Устанавливает ключ, чтобы ничего не делать.

Чтобы левый щелчок ничего не делал, введите unbind MOUSE1 .

отвязать_mac

Функции аналогичны отвязке, за исключением того, что это касается только пользователей Mac OS.

отменить привязку

Печально известная команда, которая отменяет привязку всех ключей.

Совет: Если вы выполняете эту команду (или вы плохой болван, которого обманули), вы можете сбросить привязки по умолчанию в меню «Параметры». Клавиатура, использовать значения по умолчанию.

key_listboundkeys

Список всех ключей, которые к чему-то привязаны, и к чему они привязаны.

Пример ввода и вывода из Half-Life 2:

key_findbinding

Выполняет поиск по списку связанных ключей и возвращает те, у которых есть заданная подстрока в поле команды.

Пример ввода и вывода из Half-Life 2:

key_updatelayout

Обновляет раскладку игровой клавиатуры в соответствии с текущими настройками клавиатуры Windows. Работает только в Windows.

Это полезно только в том случае, если раскладка виртуальной клавиатуры меняется в Windows (т. е. меняется с QWERTY на AZERTY) во время работы игры.

Bind Command

Пользователям Linux нравится автоматизация, а ОС также предоставляет множество возможностей для простой автоматизации задач. Команда bind — это сочетание клавиш, которое можно создать для быстрого запуска определенных макросов или команд без необходимости их печатать. Давайте рассмотрим команду bind и разберемся, как ее использовать.

Оглавление

Что такое команда привязки?

Команда bind в Linux — это встроенная команда, которая поставляется с оболочкой Bash. Эта команда используется для назначения функций и макросов клавише или последовательности клавиш. Таким образом, эта команда позволяет нам создавать горячие клавиши вместо того, чтобы вводить полное имя команды/функции/макроса каждый раз, когда вам нужно их использовать. Все функции на базе Linux поставляются с различными предустановленными сочетаниями клавиш. Команда bind может использоваться для создания, изменения и удаления привязок клавиш через оболочку bash.

Основной синтаксис команды

Лучший способ понять любую команду — понять ее синтаксис. Вот как выглядит синтаксис команды bind в Linux.

Это может показаться ошеломляющим, но на самом деле это не так. Сама по себе команда очень проста в использовании, и вы можете создавать макросы всего одной строкой. Мы увидим это позже, а пока давайте посмотрим, что означают некоторые из упомянутых здесь параметров.

ОпцияЭффект
-lПеречисляет имена всех функций, доступных для привязки клавиш.
-s / -SПеречисляет все последовательности клавиш, назначенные для вызова макросов, вместе с их значениями . Использование -S дает этот вывод в формате, который затем можно использовать в качестве ввода для команды связывания.
-p / -PСписок имена всех функций, доступных для привязки, вместе с любой клавишей, к которой может быть привязана функция. Использование -P дает этот вывод в формате, который затем можно использовать в качестве ввода для команды связывания.
-v / -VСписок всех переменные вместе с их значениями, которые используются в качестве привязок клавиш. Использование -V дает эти выходные данные в формате, который затем можно использовать в качестве входных данных для команды связывания.

Этот список охватывает основы команды bind, но если вы хотите узнать о ней больше, не стесняйтесь исследовать справочные страницы с помощью команды man или веб-справочной страницы. Переходим ко второму параметру. Мы используем -m раскладку клавиатуры, как следует из названия, чтобы определить схему сопоставления клавиш нашей клавиатуры. Вот два самых популярных из них.

  • emacs: это сопоставление клавиш в стиле emacs по умолчанию.
  • vi: это сопоставление клавиш на основе текстового редактора vi для Linux.

Существуют варианты этих двух схем сопоставления клавиш, которые, возможно, стоит вам проверить.

  • Наш следующий параметр, -f, используется для чтения конфигураций привязки клавиш из файла.
  • Если вы хотите проверить, привязана ли функция к клавише, мы используем тег -q, за которым следует имя функции.
  • Вы можете удалить все конфигурации привязки клавиш для функции, используя тег префикса -u.
  • Если вы хотите удалить функцию, связанную с последовательностью клавиш, используйте тег -r, за которым следует последовательность клавиш.
  • Аналогично, чтобы связать последовательность клавиш с командой bash, вы используете тег -x, за которым следует последовательность клавиш и команда. Они должны быть разделены одним двоеточием.

Использование команды bind в Linux

Теперь мы разобрались с командой bind в Linux и ее параметрами. Теперь пришло время использовать эти знания для практического применения команды bind. В этом руководстве мы рассмотрим несколько примеров, чтобы узнать, как использовать команду привязки.

1. Список всех сочетаний клавиш и доступных переменных

Теперь вы можете не помнить все комбинации клавиш, доступные в системе, поэтому команда привязки отслеживает их здесь. Вы можете просто запустить приведенную ниже команду, чтобы получить список всех сочетаний клавиш.

Связать список всех

Связать список всех

2. Создание новой привязки клавиш

Создание пользовательских привязок клавиш — важная функция команды bind в Linux. С их помощью мы можем вызывать любую функцию, не используя ее полное имя, или выполнять наши макросы с помощью одной клавиши. Давайте назначим клавишу Ctrl+u для вывода приветствия на экран.

Как видите, Ctrl представлен \C- в приведенной выше команде. Мы можем видеть, как это работает на снимке экрана ниже.

Создание привязки ключа

Привязать создание ключа

3. Список всех привязок пользовательских клавиш

Теперь, если вы не видите измененную или созданную пользователем комбинацию клавиш в списке выше, ничего страшного. Это фича, а не баг. Большинство ваших пользовательских сочетаний клавиш будут созданы с параметром по умолчанию -x, хотя мы действительно не используем никаких параметров, кроме последовательности клавиш и команды (как мы видели выше).

Поэтому для привязок клавиш, созданных с параметром -x, вам нужно запустить следующую команду, чтобы просмотреть привязку.

Bind X

Связать X

3. Удаление существующей привязки клавиш

Иногда вы замечаете привязку клавиш, которую не хотите использовать случайно. Или вы можете использовать определенную привязку клавиш для отдельной команды. Для этого вы можете использовать опцию -r команды bind, чтобы удалить более раннюю функцию для последовательности клавиш. Давайте продемонстрируем это, удалив только что созданную привязку клавиш. Это можно сделать с помощью следующей команды.

Bind Remove

Привязать Удалить

Теперь последовательность клавиш Ctrl+u не ограничена. Это можно использовать для какой-либо другой команды или оставить в покое.

5. Чтение привязок клавиш из файла

Если у вас есть несколько сочетаний клавиш, экспортированных из какой-либо другой системы, вот как их можно импортировать. Во-первых, формат файла должен точно соответствовать тому, как вы объявляете привязки, за исключением самой команды привязки.

Bind File

Привязать файл

Как видите, привязки, которые я использовал в файле, теперь доступны для использования в системе. Здесь я использовал команду cat для отображения содержимого файла.

Подведение итогов

Команда bind в Linux — это полезный инструмент для любого пользователя Linux, который хочет оптимизировать свою рабочую нагрузку. Это особенно полезно, если вы регулярно работаете с большим количеством функций и макросов.

Мы надеемся, что с помощью этого руководства вы смогли понять команду bind в Linux и научились ее использовать. Если у вас есть какие-либо предложения, отзывы или вопросы, оставьте их в разделе комментариев ниже.

Читайте также: