Волшебная кнопка для вставки кода на MacOS
Вы когда-нибудь ловили себя на том, что постоянно печатаете тройные кавычки ```, чтобы начать код-блок? И вот руки уже тянутся к клавише `… А потом вы пять раз исправляете раскладку, ловите неправильный символ, удаляете, снова вводите… Короче — боль.
Но сегодня боль закончится 💉✨
Мы заставим клавишу ` (backtick) вести себя примерно так: нажал быстро → печатает обычную кавычку ` ,а подержал секунду → магическим образом появляется блок кода.
1```
2
3```И всё это — без сторонних монстров вроде Alfred/TextExpander, только Karabiner-Elements и немного AppleScript-магии.
Поехали:
Что понадобится:
- macOS
- Karabiner-Elements (бесплатно, хороший, не кусается)
- Пара минут времени
---
Шаг 1. Включаем нужные разрешения
Karabiner должен иметь право имитировать нажатие клавиш.
Идём сюда:
System Settings → Privacy & Security → Accessibility
Добавляем галочки для:
- Karabiner-Elements
- Karabiner EventViewer (если есть)
- Karabiner Console (если есть)
Что такое Karabiner-Elements?
Karabiner-Elements — это мощная утилита для macOS, которая позволяет:
переназначать клавиши,
создавать горячие клавиши,
навешивать действия на удержание клавиши,
блокировать/включать клавиши,
создавать разные профили (например, “работа”, “игры”, “кодинг”).
Главное: Karabiner работает на очень низком уровне, практически “слушая” клавиатуру напрямую, поэтому:
он видит каждое нажатие,
умеет подменять события,
может выполнять shell-команды,
а значит — может запускать osascript.
Что такое osascript?
osascript — это способ выполнять AppleScript или JavaScript for Automation из терминала.
То есть ты можешь написать:
1osascript -e 'tell application "System Events" to keystroke "Hello!"'И macOS выполнит это так, как будто ты руками напечатал “Hello!”.
Через osascript можно:
эмулировать нажатия клавиш,
вводить текст,
управлять приложениями,
нажимать кнопки UI,
даже управлять окнами.
Шаг 2. Проверяем, что AppleScript работает
Открой Karabiner → Complex Modifications → Add rule → Add your own → вставь это правило:
1{
2 "description": "TEST: Hold ` prints HELLO",
3 "manipulators": [
4 {
5 "type": "basic",
6 "from": { "key_code": "grave_accent_and_tilde" },
7 "parameters": {
8 "basic.to_if_held_down_threshold_milliseconds": 700
9 },
10 "to_if_held_down": [
11 {
12 "shell_command": "osascript -e 'tell application \"System Events\" to keystroke \"HELLO\"'"
13 }
14 ],
15 "to_if_alone": [
16 { "key_code": "grave_accent_and_tilde" }
17 ]
18 }
19 ]
20}Теперь:
короткое нажатие → `
удержание → HELLO
Если HELLO появляется — мы красавчики. Скрипт отрабатывает.
Шаг 3. Вставляем блок кода с переносами строк
Теперь меняем тестовое правило на ОНО — финальную рабочую версию:
1{
2 "description": "Hold ` to insert markdown block",
3 "manipulators": [
4 {
5 "from": {
6 "key_code": "grave_accent_and_tilde",
7 "modifiers": { "optional": ["any"] }
8 },
9 "parameters": { "basic.to_if_held_down_threshold_milliseconds": 700 },
10 "to_if_alone": [{ "key_code": "grave_accent_and_tilde" }],
11 "to_if_held_down": [
12 { "shell_command": "osascript -e 'tell application \"System Events\" to keystroke \"```\"'" },
13 { "shell_command": "osascript -e 'key code 36'" },
14 { "shell_command": "osascript -e 'key code 36'" },
15 { "shell_command": "osascript -e 'tell application \"System Events\" to keystroke \"```\"'" }
16 ],
17 "type": "basic"
18 }
19 ]
20}Теперь магия работает так:
Быстро нажал `
→ печатается обычная backtick-кавычка
Подержал 0.7 секунды
→ вставляется:
1```
2
3```🎉 Готово!
Теперь у вас полноценная “клавиша для code blocks”, которая экономит сотни нажатий в день.