Tmux для Windows на Win32 API: как я портировал легендарный мультиплексор

Многие разработчики, переходящие с Linux на Windows, сталкиваются с одной и той же болью: отсутствием адекватного нативного мультиплексора терминалов. Да, есть WSL, есть вкладки в Windows Terminal, но это не заменяет классический опыт. Настоящий tmux — это когда ты можешь отцепиться (detach) от сессии, закрыть терминал, а потом вернуться и продолжить работу ровно с того же места.
Я решил, что хватит это терпеть, и реализовал tmux-win — нативный порт tmux для Windows, написанный на C с использованием Win32 API без тяжелых слоев совместимости вроде Cygwin или MSYS2.
Почему не WSL или готовые порты?
WSL — это полноценная виртуальная машина. У неё своя файловая система, свой сетевой стек и заметный оверхед. Существующие порты часто либо заброшены, либо тянут за собой окружение POSIX. Мне же хотелось инструмент, который:
Запускается мгновенно и весит копейки.
Работает напрямую с
powershell.exeиcmd.exe.Не требует ничего, кроме самой Windows.
Технический стек и архитектура
Проект построен на трех «китах»:
ConPTY (Windows Pseudo Console): Технология от Microsoft (появилась в Win10 1809), которая наконец-то позволила Windows работать с консольными приложениями через псевдотерминалы, аналогично UNIX PTY.
Клиент-серверная модель: Как и в оригинале, сервер управляет состоянием окон и панелей, а клиент отвечает за ввод-вывод и отрисовку.
Named Pipes (Именованные каналы): Используются для IPC (межпроцессного взаимодействия) между клиентом и сервером. Это нативно, быстро и безопасно.
Роль ИИ: Разработка на C без знания C
Интересный нюанс: этот проект стал для меня экспериментом по работе с современными ИИ-инструментами. Я буду честен — я практически не знаю языка C, и у меня нет времени на его глубокое изучение. Но мне был очень нужен нативный tmux для Windows, и я решил проверить, сможет ли связка из разработчика и нейросети выдать качественный системный продукт.
Значительная часть низкоуровневой работы была выполнена при поддержке Claude Code:
Маппинг структур Win32 API: Рутинная работа, которую ИИ делает превосходно.
Написание бойлерплейта: Именованные каналы (Named Pipes), обработка системных вызовов и управление памятью.
Трансляция логики: Я объяснял высокоуровневую логику работы сессий, а Claude переводил это на язык указателей и структур.
Использование ИИ позволило мне сосредоточиться на архитектуре и логике управления панелями, делегировав «сишную» рутину нейросети. Однако финальная отладка взаимодействия с ConPTY всё равно требовала ручного контроля и сотен итераций — у псевдоконсолей Windows есть свои специфичные «капризы», о которых модели пока знают мало.
В итоге получился проект, который я бы никогда не написал в одиночку из-за языкового барьера, но который теперь реально работает.
Что уже работает
На текущий момент реализован базовый функционал для комфортной работы:
Панели (Panes): Разделение экрана вертикально (
Ctrl-b %) и горизонтально (Ctrl-b ").Окна (Windows): Создание новых вкладок (
Ctrl-b c) и переключение между ними (0-9,n,p).Persistent Sessions: Стандартный Detach (
Ctrl-b d) и Attach. Сессия живет, пока запущен сервер.Управление: Переключение между панелями и их закрытие (
Ctrl-b x).
Архитектура модулей
Для тех, кто захочет покопаться в коде, структура выглядит так:
win32_conpty.c— вся магия работы с псевдоконсолью.win32_pipe.c— реализация обмена данными через пайпы.win32_proc.c— управление процессами и жизненным циклом сессий.
Как попробовать?
Проект открытый (Open Source), и я буду рад фидбеку, баг-репортам и звездам на GitHub.
Репозиторий: https://github.com/D-Shey/tmux_for_win
Сборка: Вам понадобятся Visual Studio 2022 и CMake:
Bash
git clone https://github.com/D-Shey/tmux\_for\_win.git
cd tmux_for_win
cmake -B build
cmake --build build --config ReleaseЧто дальше?
В планах — поддержка .tmux.conf для кастомизации, расширение списка горячих клавиш и улучшение обработки спецсимволов.
Если вам не хватало нативного tmux в Windows так же, как и мне — залетайте в репозиторий, пробуйте и делитесь впечатлениями!