**Python Keyboard**

**От самодельной USB-клавиатуры до разработки клавиатуры на Python**

*Китайский | Английский*

В статье рассказывается о создании клавиатуры, работающей на Python.

## Самодельная клавиатура

Если вы хотите лучше понять, как устроена клавиатура, то лучший способ — сделать её самостоятельно. В этом вам может помочь инструкция из репозитория [hand-wiring-a-keyboard.md](hand-wiring-a-keyboard.md).

## От прототипа к продукту

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

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

Клавиатура на Python — это не только клавиатура, но и USB-накопитель. Код Python хранится на накопителе, и его можно редактировать с помощью любого текстового редактора без необходимости настройки среды разработки. Настройка раскладки клавиатуры (keymap), добавление макросов или реализация новых функций становятся очень простыми — достаточно изменить файл Python на накопителе и сохранить его. Изменения вступят в силу немедленно.

Для получения более подробной информации см. [M60 keyboard](https://python-keyboard.gitee.io/).

## Дальнейшее развитие — повышение производительности клавиатуры

Это 60% клавиатура, в которой отсутствуют клавиши F1–F12, клавиши направления и другие клавиши.

Однако, используя многоуровневые переключения и комбинированные клавиши из TMK (https://github.com/tmk/tmk_keyboard/blob/master/tmk_core/doc/keymap.md) и концепцию использования пальцев в основном на клавишах A, S, D, F и J, K, L и ;, мы можем сделать эту маленькую клавиатуру более эффективной.

Здесь представлена функция Tap-key, которая позволяет использовать короткие и длинные нажатия для различных целей. Короткое нажатие используется как обычная клавиша, а длительное удержание клавиши D без отпускания активирует функцию перемещения курсора. Клавиши H, J, K и L используются как клавиши направления, а U и N — как PgUp и PgDn.

### Клавиша D для навигации

Клавиша D используется в качестве Tap-key. При коротком нажатии выводится буква d, при длительном удержании клавиши D активируется функция перемещения курсора, а клавиши H, J, K и L становятся клавишами направления. Клавиши U и N используются как PgUp и PgDn соответственно.

+ d + h = ←
+ d + j = ↓
+ d + k = ↑
+ d + l = →
+ d + u = PgUp
+ d + n = PgDn

### Точка с запятой используется вместо Ctrl

Точка с запятой также используется в качестве Tap-key: при коротком нажатии выводится символ ;, при долгом удержании — Ctrl.

В VS Code при наборе текста двумя руками использование точки с запятой в сочетании с другими клавишами удобнее, чем использование левой рукой Ctrl. Стоит отметить, что в VS Code, когда текст не выделен, Ctrl + C копирует строку, на которой находится курсор, а Ctrl + V вставляет скопированную строку ниже текущей строки. Используя комбинацию клавиш D и H, J, K или L, можно легко перемещать курсор.

А в браузере можно использовать точку с запятой в комбинации с Tab для переключения между вкладками, точку с запятой и T для открытия новой вкладки, а также точку с запятой и W для закрытия вкладки.

### Парные клавиши (Pair-Keys)

Кроме того, клавиатура поддерживает одновременное (или в течение 10 мс) нажатие двух клавиш для активации специальных функций, которые называются парными клавишами (pair-keys).

## Задачи

- [x] Мышь
- [x] RGB-подсветка
- [ ] Тепловая карта
- [ ] Сделать USB-накопитель доступным только для чтения или скрыть его

## Благодарности

Автор благодарит MicroPython (https://github.com/micropython/micropython), CircuitPython (https://github.com/adafruit/circuitpython) и проекты TMK (https://github.com/tmk/tmk_keyboard) и Toward a more useful keyboard (https://github.com/jasonrudolph/keyboard).