SwitchShuttle — это кроссплатформенное приложение для системного трея, которое позволяет пользователям запускать предопределенные команды в различных терминальных приложениях. Оно поддерживает macOS, Windows и Linux, предлагая простой и настраиваемый способ управления и выполнения ваших часто используемых команд.
SwitchShuttle — это переосмысление и расширение приложения Shuttle. В то время как Shuttle предоставляет простой и эффективный способ управления ярлыками команд в macOS, SwitchShuttle расширяет эту концепцию, предлагая поддержку нескольких операционных систем и терминальных эмуляторов, а также улучшенные возможности конфигурации и настройки пользователем.
- Поддержка нескольких терминальных приложений: iTerm, Terminal, Warp, Alacritty, Hyper.
- Запуск команд в различных режимах: текущее окно, новая вкладка, новое окно.
- Переключение запуска при входе в систему.
- Редактирование конфигурации прямо из меню трея.
- Открытие папки конфигурации из меню трея.
- Поддержка подменю для лучшей организации команд.
- Поддержка динамических входных данных для команд.
- Новое: Вызов контекстного меню с помощью горячей клавиши.
Конфигурация хранится в JSON-файлах, расположенных в каталоге конфигурации пользователя. Путь по умолчанию — ~/.config/switch-shuttle/
на Linux и macOS, и C:\Users\<Username>\AppData\Roaming\switch-shuttle\
на Windows. Вы можете хранить несколько файлов конфигурации в этом каталоге, каждый из которых представляет собой другой набор команд и настроек.
Пример конфигурационного файла:
{
"terminal": "iterm",
"launch_in": "current",
"theme": "Homebrew",
"title": "New tab",
"menu_hotkey": "Ctrl+Shift+M",
"commands": [
{
"name": "Command",
"inputs": null,
"command": null,
"commands": null,
"hotkey": null,
"submenu": [
{
"name": "Example Command",
"inputs": null,
"command": "echo Hello, world!",
"commands": null,
"submenu": null,
"hotkey": "Ctrl+Shift+E"
},
{
"name": "Example Multi-Command with input",
"inputs": {
"key1": "default1",
"key2": "default2"
},
"command": null,
"commands": [
"export MY_VAR=$(echo 'Step 1: [key1]')",
"RESULT=$(echo 'Step 2: [key2]' && echo $MY_VAR)",
"echo Step 3: Finalize && echo $RESULT"
],
"submenu": null,
"hotkey": "Ctrl+Shift+M"
},
{
"name": "Example Submenu",
"inputs": null,
"command": null,
"commands": null,
"submenu": [
{
"name": "Subcommand 1",
"inputs": null,
"command": "echo Subcommand 1",
"commands": null,
"submenu": null,
"hotkey": "Ctrl+Shift+S"
},
{
"name": "Subcommand 2",
"inputs": null,
"command": "echo Subcommand 2",
"commands": null,
"submenu": null,
"hotkey": null
}
],
"hotkey": null
}
]
}
]
}
Параметр | Тип | Описание | Допустимые значения |
---|---|---|---|
terminal | String | Терминальное приложение для использования | "iterm", "terminal", "warp" |
launch_in | String | Где запускать команду | "current", "new_tab", "new_window" |
theme | String | Тема для использования (если поддерживается) | Любое строковое значение, представляющее тему |
title | String | Заголовок для окна/вкладки терминала | Любое строковое значение |
menu_hotkey | String (Optional) | Глобальная горячая клавиша для вызова контекстного меню | Любая допустимая комбинация горячих клавиш, например, "Ctrl+Shift+M" |
commands | Array | Список конфигураций команд | См. ниже для параметров команд |
Параметр | Тип | Описание | Допустимые значения |
---|---|---|---|
name | String | Название команды или подменю | Любое строковое значение |
inputs | Object (Optional) | Пары ключ-значение для входных данных | {"key1": "default1", "key2": "default2"} |
command | String (Optional) | Команда для выполнения (если это команда) | Любое строковое значение, представляющее команду |
commands | Array (Optional) | Список команд для последовательного выполнения | Любой массив строк, каждая строка - команда |
submenu | Array (Optional) | Список подкоманд (если это подменю) | См. выше для параметров команд |
hotkey | String (Optional) | Глобальная горячая клавиша для вызова команды | Любая допустимая комбинация горячих клавиш, например, "Ctrl+Shift+E" |
SwitchShuttle поддерживает определение одной команды с использованием параметра command
, списка команд с использованием параметра commands
или обоих сразу. Если указаны и command
, и commands
, сначала выполняется одиночная команда, а затем команды из списка.
- Одиночная команда: Если указан только
command
, выполняется эта команда. - Несколько команд: Если указан только
commands
, каждая команда из списка выполняется последовательно. - Оба параметра: Если указаны и
command
, иcommands
, сначала выполняется одиночная команда, а затем каждая команда из спискаcommands
.
SwitchShuttle позволяет определить динамические входные данные для команд. Эти данные будут запрашиваться у пользователя перед выполнением команды. Вы можете определить входные данные с помощью параметра inputs
в конфигурации команды.
{
"name": "Example Multi-Command with input",
"inputs": {
"key1": "default1",
"key2": "default2"
},
"command": null,
"commands": [
"export MY_VAR=$(echo 'Step 1: [key1]')",
"RESULT=$(echo 'Step 2: [key2]' && echo $MY_VAR)",
"echo Step 3: Finalize && echo $RESULT"
],
"submenu": null,
"hotkey": "Ctrl+Shift+M"
}
Вы можете назначить глобальные горячие клавиши для команд, добавив параметр hotkey
в конфигурацию команды. Комбинация горячих клавиш должна следовать формату модификаторов (Ctrl, Shift, Alt, Win) в сочетании с клавишей (A-Z, 0-9 и т.д.). Например, чтобы установить "Ctrl+Shift+E" в качестве горячей клавиши для команды:
{
"name": "Example Command",
"command": "echo Hello, world!",
"submenu": null,
"hotkey": "Ctrl+Shift+E",
"commands": null
}
Параметр hotkey
является необязательным. Если он не указан, у команды не будет связанной с ней глобальной горячей клавиши.
- Назначение горячих клавиш: Отредактируйте файл конфигурации, чтобы включить параметр
hotkey
для команд, которые вы хотите вызывать с помощью глобальных горячих клавиш. - Использование горячих клавиш: После перезапуска приложения используйте назначенные горячие клавиши для вызова соответствующих команд, независимо от того, какое приложение в данный момент активно.
- Edit Config: Щелкните правой кнопкой мыши по значку в трее и выберите конфигурация, чтобы открыть файл конфигурации в вашем редакторе по умолчанию. Измените конфигурацию по мере необходимости.
- Show Config Folder: Щелкните правой кнопкой мыши по значку в трее и выберите "Show Config Folder", чтобы открыть каталог конфигурации в вашем файловом менеджере.
- Toggle Launch at Login: Щелкните правой кнопкой мыши по значку в трее и выберите "Toggle Launch at Login", чтобы включить или отключить автоматический запуск приложения при входе в систему.
- Execute Command: Щелкните левой кнопкой мыши по значку в трее и выберите команду, которую хотите выполнить из меню. Команда будет выполнена в указанном терминальном приложении.
Чтобы создать подменю, установите поле command
и commands
в null
и предоставьте список подкоманд в поле submenu
. Подкоманды также могут иметь свои собственные подменю, что позволяет создавать вложенные меню.
- Клонируйте репозиторий:
git clone https://github.com/s00d/switchshuttle.git
cd switchshuttle
npm i
- Соберите приложение:
cargo tauri build
- Запустите приложение:
cargo tauri dev
Последнюю версию SwitchShuttle можно скачать со страницы GitHub Releases.
Подпись приложения
Если вы используете macOS, возможно, вам потребуется подписать приложение перед его запуском. Вот шаги:
- Сделайте бинарный файл исполняемым:
chmod +x /Applications/switch-shuttle.app
- Очистите расширенные атрибуты и подпишите бинарный файл:
xattr -cr /Applications/switch-shuttle.app && codesign --force --deep --sign - /Applications/switch-shuttle.app
Приветствуются ваши вклады! Пожалуйста, не стесняйтесь отправлять запросы на внесение изменений или открывать новые вопросы на GitHub.
Этот проект лицензирован по лицензии MIT. См. файл LICENSE для подробностей.
Наслаждайтесь использованием SwitchShuttle для легкого управления вашими терминальными командами!