Skip to content

Repository files navigation

TerminalV

Терминал для Windows с вертикальными вкладками. Каждая вкладка — отдельная сессия PowerShell через ConPTY, экран рисует xterm.js.

Установка

В PowerShell:

irm https://raw.githubusercontent.com/XYphrodite/TerminalV/main/install.ps1 | iex

Скрипт скачивает последний релиз, проверяет SHA-256 из файла .sha256, устанавливает в %LOCALAPPDATA%\Programs\TerminalV, добавляет каталог в пользовательский PATH и создаёт ярлык в меню Пуск. Права администратора не нужны.

При установленном .NET 10 Desktop Runtime автоматически выбирается облегчённая framework-dependent сборка. Параметр -Variant light или -Variant full задаёт вариант явно; последующее самообновление сохраняет этот выбор.

Перед переустановкой закройте окно TerminalV. Фоновый host и его сессии могут продолжать работать: установщик их не завершает. Прежние файлы пакета перемещаются в .terminalv-backup-* внутри каталога установки; при ошибке проверки новой копии выполняется откат. База сессий и данные WebView2 сохраняются.

Другой каталог или конкретная версия:

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/XYphrodite/TerminalV/main/install.ps1))) -InstallDir 'D:\TerminalV' -Version v0.1.0

Ярлык в меню «Пуск» создаётся по умолчанию. Рабочий стол — только по желанию, с параметром -DesktopShortcut:

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/XYphrodite/TerminalV/main/install.ps1))) -DesktopShortcut

Параметры: -InstallDir, -Version (по умолчанию latest), -NoPath, -DesktopShortcut, -NoShortcut (не создавать никаких ярлыков, даже с -DesktopShortcut; существующие не удаляются).

Ручная установка: zip TerminalV-win-x64.zip со страницы релизов. Сборка self-contained, отдельно ставить .NET не нужно. Нужен WebView2 Runtime — на Windows 11 он уже есть вместе с Edge.

После распаковки ZIP запустите TerminalV.exe → Настройки (шестерёнка или Ctrl+,) → Ярлыки приложения. Выберите «Меню „Пуск“» и/или «Рабочий стол», затем нажмите Создать ярлыки. Нужные папки определяются через Windows, включая перенесённый рабочий стол OneDrive. Ярлыки ведут к текущей копии приложения и используют иконку из её EXE; права администратора не нужны.

Повторное создание обновляет иконку без дубликатов и сохраняет пользовательские настройки существующего ярлыка. Если TerminalV.lnk указывает на другую копию или содержит аргументы, он не перезаписывается: интерфейс покажет причину. Перед переносом ZIP-папки уберите старые ярлыки или переименуйте их, затем создайте новые. При запуске/самообновлении приложения удалённые ярлыки не восстанавливаются автоматически; закрепление на панели задач остаётся за пользователем.

Запуск после установки:

TerminalV

Установленная копия сама проверяет GitHub Releases при старте. Если есть более новая версия, слева появляется кнопка Обновить. Из любой оболочки, в том числе из вкладки TerminalV:

TerminalV update --check
TerminalV update

Если окно уже открыто, команда ставит файлы и перезапускает окно; сессии остаются в фоновом процессе. Скачанный zip сверяется с SHA-256, новый exe отвечает на --help до замены и после. Сборка 0.1.0 обновление не умеет — её один раз ставят через irm.

Из исходников после dotnet build: src\TerminalV\bin\Debug\net10.0-windows\TerminalV.exe.

Документация

Сборка из исходников

Нужны .NET 10 SDK, Node.js и npm.

dotnet build
dotnet run --project src/TerminalV

Релизная папка (self-contained win-x64, TerminalV.exe, консольный TerminalV.com и wwwroot):

.\scripts\publish.ps1

Артефакты: artifacts/TerminalV-win-x64.zip и .sha256. Прежние файлы не удаляются и не перезаписываются. Если архив уже существует, укажите новый каталог:

.\scripts\publish.ps1 -OutputDirectory artifacts\candidate-01
.\scripts\verify-package.ps1 -Package artifacts\candidate-01\TerminalV-win-x64.zip

Упаковка использует отдельную свежую папку .publish-* и сохраняет её для диагностики. Проверка пакета оставляет логи и распакованные файлы в verification-* рядом с ZIP: контрольная сумма, состав, CLI, изолированное обновление/откат, ConPTY, SQLite и браузерные тесты интерфейса из архива. По умолчанию ожидается версия из проекта; для другого пакета есть -ExpectedVersion. Проверка не запускает рабочее окно, не использует пользовательскую базу и не публикует релиз. Для полной проверки PowerShell 7 задайте TERMINALV_TEST_PWSH, если он не установлен в стандартном каталоге.

Проверка ConPTY без окна:

.\src\TerminalV\bin\Debug\net10.0-windows\TerminalV.exe --smoke

Регрессионные проверки интерфейса (нужен установленный Edge или Chrome):

npm.cmd --prefix ui test

Изолированные проверки рабочей папки, запуска профилей PowerShell/cmd, настоящего ConPTY и протокола фонового процесса:

dotnet run --project tests/TerminalV.Pty.Tests -c Release

Тесты не загружают пользовательские профили и не подключаются к рабочему фоновому процессу TerminalV. Они запускают Windows PowerShell 5.1 и, если доступен, PowerShell 7 из Program Files\PowerShell\7. Для portable PowerShell 7 можно задать путь к pwsh.exe через TERMINALV_TEST_PWSH; при его отсутствии эта часть явно пропускается.

Проверки миграции базы, групп, скрытых сессий, отключения звука, профилей и расположения панелей на временных SQLite-файлах (рабочая база пользователя не используется):

dotnet run --project tests/TerminalV.Data.Tests -c Release

Что умеет v0.5.3

  • Вертикальный список вкладок слева
  • PowerShell 7 (pwsh), иначе Windows PowerShell
  • Несколько независимых сессий
  • Переименование вкладки (двойной клик)
  • Копирование и вставка, в том числе правой кнопкой
  • Предупреждение с предпросмотром перед многострочной вставкой
  • Самообновление: кнопка в сайдбаре и TerminalV update
  • Темы, шрифт, фон-фото, сворачиваемый список сессий, масштаб как в VS Code
  • Сессии сохраняются в SQLite

Новое в v0.5.0

  • Поиск по выводу, защита закрытия работающей сессии и наследование текущей папки.
  • Группы, цветовые метки, закрепление, фильтр и скрытые сессии.
  • Настраиваемые уведомления BEL с подсветкой и ограничением частоты.
  • Профили запуска: оболочка, папка, название, цвет и стартовая команда, без повторного выполнения при подключении к живой сессии.
  • Разделение экрана: панели справа/снизу, изменение размеров, переключение клавиатурой и восстановление расположения без перезапуска живых сессий.
  • Более безопасное обновление: проверка комплектности ZIP, замена консольного запускателя, откат и защита служебных путей.

После обновления старый фоновый процесс может продолжать обслуживать рабочие сессии. Для профилей и интеграции текущей папки при соответствующем предупреждении сохраните работу и перезагрузите Windows. Простое закрытие окна не обновляет фоновый процесс.

Порядок дальнейшей работы — план фич.

Новое в v0.5.1

Обновлённое оформление: единые SVG-иконки, более читаемые сессии, заголовок с текущей папкой, аккуратные панели и диалоги, превью десяти тем и компактный список без пустого отступа. Настройки удерживают фокус и изолируют сочетания клавиш от терминала. Сохранённые темы, шрифты и сессии совместимы. Подробности — заметки к релизу.

Новое в v0.5.2

Меню Профили и оболочки запускает сохранённый профиль сразу, без редактора и повторного сохранения. Редактирование и создание — отдельные действия. Windows-оболочки и установленные дистрибутивы WSL обнаруживаются автоматически; Ubuntu запускается прямо в новой вкладке из домашней папки Linux. Подробнее — быстрый запуск WSL.

Новые сессии получают актуальное окружение Windows: недавно установленные Codex и другие команды находятся по обновлённому PATH. Уже работающие сессии не меняются. При первом переходе со старого фонового процесса сохраните работу и перезагрузите Windows — закрытие одного окна хост не обновляет. Подробности — заметки к релизу.

Новое в v0.5.3

Под названием и версией в боковой панели появилась подпись Автор: XYphrodite со ссылкой на GitHub-профиль. Она открывается во внешнем браузере, не заменяя интерфейс терминала. Подпись и нижние кнопки остаются видны в маленьком окне; кнопка версии по-прежнему проверяет обновления. Подробности — заметки к релизу.

Новое в v0.5.6

Исправлена вставка большого текста в muse и другие чаты TUI — ранее вставка 50–100 КБ занимала секунды из-за одного огромного write через WebView2/NamedPipe/ConPTY. Теперь текст режется на чанки по 4000/8192 с сохранением кириллицы, эмодзи и bracketed paste. Подробности — заметки к релизу.

Новое в v0.5.7

Исправлена задержка даже для 100 символов в muse с диалогом многострочной вставки — TerminalBridge и ConPtySession больше не блокируют UI-поток на WriteFile в ConPTY, postWrite уходит через queueMicrotask. Подробности — заметки к релизу.

Новое в v0.5.8

Тот же фикс 100 символов с диалогом в muse — 0.5.7 уже выпущен, версия поднята до 0.5.8 для публикации без перезаписи v0.5.7 (синхронный ввод "a" остаётся синхронным, paste — асинхронно). Подробности — заметки к релизу.

Новое в v0.5.9

Исправлено сохранение видимых сессий — теперь Buffer/Cwd хранятся для всех вкладок, а не только для скрытых. Пустой чат после перезапуска устранён. Подробности — заметки к релизу.

Новое в v0.5.10

Ссылки в терминале теперь открываются во внешнем браузере (Ctrl+клик или клик). Ранее клик открывал встроенный popup WebView2. Теперь http/https URL отправляется хосту и открывается через UseShellExecute; остальные схемы игнорируются. Подробности — заметки к релизу.

Новое в v0.5.11

Кнопки «Справа»/«Снизу» в шапке панелей теперь создают новую сессию рядом с родительской в списке слева, а не в самом конце, и дочерняя отмечается тонкой веткой/отступом в сайдбаре. Подробности — заметки к релизу.

Новое в v0.5.12

Кнопка управления сессией ⋯ теперь всегда видна в развёрнутом сайдбаре (раньше только на hover/active). Подробности — заметки к релизу.

Новое в v0.5.13

В свёрнутом сайдбаре кнопки ⋯/× теперь появляются при наведении/фокусе как оверлей, а не исчезают полностью. Подробности — заметки к релизу.

Новое в v0.6.0

Лёгкий MAUI-клиент TerminalV.Mobile (Android/iOS/Windows) — подключается к ПК по OpenSSH напрямую и через шлюз TerminalV, только shell (SFTP/туннели позже). WPF остаётся для локального терминала. Подробности — заметки к релизу.

Новое в v0.6.1

Исправлено зависание вкладки при вставке ~4K многострочного текста в muse со сплитом 4 панели — причина была в блокирующем lock очереди ConPtySession во время WriteFile в ConPTY. Теперь очередь и труба под разными локами, добавлен файл диагностики %LOCALAPPDATA%\TerminalV\diagnostics.log. Подробности — заметки к релизу.

Новое в v0.6.2

Ресайз окна и панелей теперь без задержки: вместо 80ms debounce используется requestAnimationFrame (~16ms) с коалесценцией. Подробности — заметки к релизу.

Новое в v0.6.3

После перезагрузки обычные оболочки теперь поднимаются сами (раньше оставались «не запущена»). Профили со стартовой командой и скрытые — по-прежнему вручную, чтобы не дублировать серверы. Подробности — заметки к релизу.

Новое в v0.6.5

Вставка в muse без «по строчке» — Diag пишет лог батчами асинхронно (фикс v0.6.4 без пример-теста). Подробности — заметки к релизу.

Новое в v0.6.6

Паузы между чанками вставки убраны — postWrite батчит все чанки в одну микрозадачу. Подробности — заметки к релизу.

Новое в v0.6.7

Рваный верх muse после ресайза — теперь WebGL текстура чистится hard refresh только для alternate buffer, история сверху не удаляется. Подробности — заметки к релизу.

Новое в v0.6.8

Медленная вставка большого текста — postWrite теперь один queueMicrotask/один Task.Run батч вместо N пауз между чанками. Подробности — заметки к релизу.

Новое в v0.6.9

Окно снова тянется со всех 4 сторон — WebView2 больше не блокирует WM_NCHITTEST. Подробности — заметки к релизу.

Новое в v0.6.10

В свёрнутых сессиях × убран полностью — больше нет случайных сносов. Подробности — заметки к релизу.

Новое в v0.6.11

Окно тянется за левый/правый/нижний край — WebView2 больше не перекрывает полосу ресайза (airspace-инсет 6px, в maximized схлопывается). Подробности — заметки к релизу.

Новое в v0.6.12

Диагностика ресайза ConPTY: отказы ResizePseudoConsole теперь видны в diagnostics.log (pty: Resize failed ... hr=...) — для расследования пропадания правой части в узком окне. Подробности — заметки к релизу.

Новое в v0.6.13

Окно больше не сужается ниже 800×480: хук WM_GETMINMAXINFO выставляет минимум из MinWidth/MinHeight с учётом DPI. Подробности — заметки к релизу.

Новое в v0.6.14

Минимальный размер окна опущен до 560×360 — сайдбар на этой ширине уже компактный (180px), терминалу хватает места. Подробности — заметки к релизу.

Новое в v0.6.15

Вставка длиннее 4000 символов идёт файлом: текст сохраняется в %TEMP%\TerminalV\pastes\, в терминал вставляется путь. Лечит медленную переварку больших вставок в TUI-клиентах. Подробности — заметки к релизу.

Новое в v0.6.16

Свёрнутый сайдбар больше не показывает кнопку управления сессией — ни на активной вкладке, ни при наведении. Подробности — заметки к релизу.

Новое в v0.6.17

Колесо мыши в mouse-TUI (свой скроллбар у приложения) доходит до приложения, а не глушится терминалом. Подробности — заметки к релизу.

Новое в v0.6.18

Высота элементов сессий настраивается: Стандарт / Минимальная. Подробности — заметки к релизу.

Новое в v0.7.1

Сплиты только плоские: дочерних сессий второй степени больше нет, все дети у одного родителя. Подробности — заметки к релизу.

Новое в v0.7.2

Выключатель аппаратного рендеринга (WebGL) в настройках — против чёрных полос на динамичных TUI. Подробности — заметки к релизу.

Новое в v0.7.3

Сплит дочерней сессии создаёт сиблинга у того же родителя. Подробности — заметки к релизу.

Новое в v0.7.4

Сплит-кнопка «Новая вкладка»: основная часть — вкладка по умолчанию, стрелка — выбор профиля. Подробности — заметки к релизу.

Новое в v0.7.5

Сохранение tail auth токена и тихий ресайз SSH без красного баннера. Подробности — заметки к релизу.

Лицензия

MIT

About

Windows terminal with vertical tabs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages