ClipQueue - Windows-приложение для работы с буфером обмена, очередью вставки и макросами по глобальным хоткеям.
Программа подходит для прикладного использования, когда нужно:
- накапливать несколько элементов буфера обмена подряд;
- вставлять их по одному в нужном порядке;
- быстро возвращать в буфер ранее скопированный текст, файл или изображение;
- запускать текстовые и клавиатурные макросы одной клавишей.
- ведёт историю буфера обмена;
- хранит до 50 последних элементов истории;
- поддерживает текст, списки файлов и изображения;
- умеет собирать очередь вставки из новых копирований;
- вставляет следующий элемент очереди в режиме
LIFOилиFIFO; - после вставки восстанавливает предыдущее содержимое буфера обмена;
- позволяет копировать любой элемент из истории обратно в текущий буфер;
- поддерживает глобальные хоткеи;
- позволяет создавать макросы с собственными хоткеями;
- умеет записывать и воспроизводить последовательности клавиш;
- содержит экспериментальный раздел
Labдля разбора и сборки текстовых команд.
- Windows;
- доступ к глобальным хоткеям и буферу обмена;
- для встроенного окна интерфейса желателен WebView2 Runtime.
Если WebView2 недоступен, приложение пытается открыть интерфейс во внешнем браузере.
- Откройте страницу релизов репозитория и скачайте
clipqueue.exe. - Поместите файл в отдельную папку, где программа сможет хранить свои настройки.
- Запустите
clipqueue.exe.
При первом запуске рядом с .exe будет создан config.yml. Интерфейс автоматически откроется на экране настроек хоткеев.
Горячие клавиши по умолчанию:
- включение и выключение очереди:
Ctrl+Alt+C - вставка следующего элемента очереди:
Ctrl+Alt+V
По умолчанию:
- история буфера включена;
- очередь включаемая, но изначально выключена;
- порядок очереди
LIFO; - макросы включены;
- раздел
Labвыключен.
Экран Буфер показывает историю последних элементов.
- текст сохраняется с кратким предпросмотром;
- изображения показываются как элемент типа
Image; - списки файлов показываются как элемент типа
Files; - текущий активный буфер помечается отдельно.
Если нажать на элемент истории, он будет снова записан в буфер обмена. Это удобно, когда нужно быстро вернуть ранее скопированный фрагмент без повторного копирования из исходной программы.
Очередь нужна для поэтапной вставки нескольких элементов.
Как это работает:
- Включите очередь.
- Скопируйте подряд нужные тексты, файлы или изображения.
- Каждый новый элемент попадёт в историю и в очередь.
- Нажимайте хоткей вставки следующего элемента.
- ClipQueue временно подставит следующий элемент в буфер, отправит
Ctrl+V, затем восстановит предыдущий буфер.
Важно:
- в очередь попадают только элементы, скопированные после её включения;
- если очередь выключить, уже набранные элементы не очищаются;
- очередь можно очистить вручную;
- порядок можно переключать между
LIFOиFIFO.
В разделе Макросы можно создавать собственные действия по глобальному хоткею.
Поддерживаются режимы:
Type- посимвольный ввод текста;Paste- вставка текста через буфер обмена с последующим восстановлением исходного буфера;Hardware- ввод текста через низкоуровневую эмуляцию клавиатуры;Sequence- воспроизведение заранее записанной последовательности клавиш.
Для макроса можно задать:
- имя;
- хоткей;
- текст;
- режим работы;
- для
Sequence- запись последовательности, нормализацию задержек и фиксированную задержку между событиями.
Встроенный экран Конфигурация позволяет:
- назначать хоткеи для очереди, вставки, переключения порядка и открытия UI;
- менять порядок очереди по умолчанию;
- менять задержки наблюдения за буфером и восстановления буфера после вставки;
- включать и выключать функции
Queue,Clipboard,Macros,Lab.
Рекомендуется менять хоткеи именно через интерфейс приложения. В config.yml они хранятся не только как отображаемый текст, но и как внутренняя сигнатура.
config.yml создаётся рядом с исполняемым файлом.
Из прикладных параметров особенно полезны:
app.data_dir- каталог данных; относительный путь считается от папки с.exe;app.silent- скрывает консоль;app.logs- включает запись лога в файл;features.*- включает или выключает крупные блоки функциональности.
Если app.logs: true, лог пишется в:
<data_dir>\logs\app.log
- приложение работает только в Windows;
- история хранит только последние 50 элементов;
- поддерживаются только три типа содержимого: текст, файлы и изображения;
- раздел
Labв текущей версии занимается только разбором и сборкой строк команд, но не выполняет системные команды; - если включён
silent, иконка в системном трее не создаётся.
Если вы хотите собрать программу самостоятельно:
go build -o clipqueue.exe -ldflags="-s -w -H windowsgui" -trimpath .В репозитории настроена автоматическая публикация релизов через GitHub Actions.
Релиз создаётся только при push в main, если сообщение коммита начинается с v.
Пример:
v1.0.0-rev
В этом случае:
- тег релиза будет
1.0.0; - имя релиза будет
1.0.0; - в релиз прикрепляется
clipqueue.exe.
Основные части кода:
main.go- инициализация конфигурации, логгера, UI, Windows host и жизненного цикла приложения;internal/app/controller.go- история буфера, очередь, вставка следующего элемента, копирование из истории и выполнение макросов;platform/windows- интеграция с WinAPI: буфер обмена, глобальные хоткеи, low-level input, запись последовательностей, системный трей;internal/ui/server- встроенный HTTP-сервер с HTML/JS интерфейсом и native bridge;internal/uihost- выбор между встроенным окном WebView2 и fallback на внешний браузер;internal/config- структураconfig.yml, загрузка, сохранение и миграция старого формата макросов;internal/parser- парсер и обратная сборка строк для разделаLab;.github/workflows/release.yml- CD-процесс сборки и публикации релиза.
Практические нюансы:
config.ymlхранится рядом с.exe, а относительные пути считаются от каталога исполняемого файла;- очередь не очищается при выключении, только перестаёт принимать новые элементы;
- история ограничена 50 записями;
- параметр
clipboard.paste_delay_msесть в конфигурации и UI, но в текущем Go-коде не используется при вставке; - UI в обычном режиме работает через native bridge, а при fallback в браузер опирается на HTTP API и периодический опрос состояния.