tm2027 · борд

Айпад в деке

Простой путь: чужая дека - это приложение внутри твоей, а не часть её флота. Тот же узкий вид, что видит телефон - список панов и один экран, - только нарисованный внутри окна tm2027. Хозяин при этом не меняется ни на строку: сегодняшний шлюз уже отдаёт ровно эти кадры, и любая уже установленная дека становится хозяином как есть. Ниже - как это выглядит, в её же чернилах, и пять решений о том, где это живёт и как себя ведёт. Набор ниже - выбранный: 1A 2B 3C 4A 5B, и к нему добавлен жест, которого не было ни в одном варианте: Ctrl+колесо масштабирует чужой экран, Ctrl+перетаскивание его таскает, кнопки масштаба стоят в статус-баре, и масштаб запоминается.

Кадр рисуется родным слоем шлюз шлёт lines/runs с текстом и цветами - это ложится прямо в RenderFrame (src/terminal.rs:281), которым дека рисует свои панели. Ни ANSI, ни alacritty, ни бриджа на этом пути нет.
Сетка чужая экран приходит в 120×34 хозяина. Своего resize нет и не будет: секция 2 - о том, как честно уложить чужую сетку в своё окно.
Один пан за раз сегодняшний шлюз ведёт клиенту одну стекляшку. Список панов живой всегда, экран - у выбранного; тайлами сразу несколько - это уже правка хозяина.
Смотреть и печатать type и key уже в протоколе. Создавать, закрывать паны и поднимать worktree - нельзя: разрушение остаётся у хозяина.
вот так это выглядит

Выбранный набор: лист во всё стекло, чужой экран один к одному, паны за переключателем в шапке, чип связи там же, строка DECKS в рельсе. Слева - твой флот, справа - чужая дека, и это видно с первого взгляда: другой цвет точки, имя в tailnet, чип с задержкой. Внизу экрана - подпись жеста, в статус-баре - пульт масштаба.

колесо под ctrl

Масштаб меняется под курсором - место, на которое смотришь, остаётся на месте, ровно как в Mission Control. Число в баре живое, и 140% здесь не настройка деки, а состояние этого пана: свой шрифт остался прежним.

ctrl и потянуть

Курсор становится хватом, экран едет за рукой. Панорама - следствие того, что 120 колонок не влезают: это единственный способ дойти до правого края, не мельча буквы.

и так - в три других момента

Первый запуск, оборванная связь и пан, закрывшийся на той стороне: три состояния, которые в тонком клиенте случаются чаще, чем в своём флоте.

1 · где живёт чужая дека

Это окно внутри окна. Вопрос, каким местом деки оно притворяется.

1A

Лист во всё стекло

Как Mission Control: чужая дека занимает всё стекло, рельс остаётся своим. Больше всего места экрану, ровно та механика листов, что у деки уже есть. Плата: пока лист открыт, своих панов не видно.

цена: малая - ещё один лист по образцу существующих
1B

Вкладка среди панов

Чужой пан - просто ещё одна вкладка в полосе, с точкой другого цвета. Ctrl+Tab ходит по ней наравне со своими, переключение стоит одно нажатие. Плата: вкладка обещает, что это такой же пан - а он не такой же.

цена: средняя - полоса вкладок учится чужому роду
1C

Планшет поверх

Буквально планшет: панель со скруглённой рамкой поверх стекла, свой пан виден вокруг. Честнее всего называет вещи - это чужая машина, лежащая рядом. Плата: самое узкое место для экрана и новый род поверхности в деке.

цена: средняя - пятая призываемая поверхность
2 · как показан чужой экран

Хозяин рисует 120×34. Твоя панель другой ширины, и своего resize у тонкого клиента нет - значит выбор между «мельче», «обрезано» и «прокручивается».

2A

Вписать целиком

Шрифт уменьшается ровно настолько, чтобы все 120 колонок и все 34 строки влезли. Видно всё и сразу, ничего не прячется. Плата: на узкой панели буквы становятся мелкими - это чтение с расстояния вытянутой руки, не работа весь день.

цена: малая - один множитель на размер ячейки
2B

Один к одному

Чужие буквы того же размера, что свои, а что не влезло - за краем, с горизонтальной прокруткой. Читается как родной терминал. Плата: почти всегда видно не весь экран, и правый край - это скролл, а не конец строки.

цена: малая - смещение и полоса прокрутки
2C

По ширине

Шрифт подбирается так, чтобы ровно 120 колонок легли в ширину панели, а по высоте что не влезло - прокручивается. Строка всегда целая, и это главное, что нужно от чужого вывода. Плата: низ экрана - включая курсор - иногда за краем.

цена: малая - множитель по ширине и вертикальный скролл
3 · как выбрать пан

Список панов чужой деки приходит целиком и живой - с агентом, его состоянием и последней строкой. Вопрос, сколько места он занимает.

3A

Колонка слева

Маленький рельс внутри листа: серверы чужой деки заголовками, паны строками, состояние агента глифом. Видно сразу, что там работает и что просит рук. Плата: 170 пикселей, которых не будет у экрана.

цена: малая - список по образцу рельса
3B

Полоса чипов

Паны стоят чипами над экраном, как вкладки: занимают одну строку, переключаются кликом, состояние - точкой на чипе. Экран получает всю ширину. Плата: девять панов в строку не помещаются, и часть уезжает за край.

цена: малая - полоса чипов с прокруткой
3C

Переключатель в шапке

Одна кнопка с именем текущего пана; список раскрывается по клику. Экрану достаётся всё окно без остатка - максимум чужого вывода на квадратный сантиметр. Плата: чтобы увидеть, кто там просит рук, нужно открыть список.

цена: малая - выпадающий список
4 · где видно связь

Чужая дека - за проводом, и провод иногда рвётся. Разница между «всё хорошо» и «показанное устарело на 40 секунд» должна быть где-то видна.

4A

Чип в шапке листа

В шапке чужого листа - чип: на проводе · 41ms, а при обрыве переподключаюсь · 3. Фактам место рядом с тем, о чём они. Плата: чип виден только пока лист открыт.

цена: малая - чип по образцу плашек деки
4B

Строка в статус-баре

Связь стоит там же, где fps и echo - в правом блоке статус-бара, тем же тихим шрифтом: ▤ STUDIO · сборка · 41ms · 10 к/с. Видно всегда, даже когда лист закрыт. Плата: ещё один жилец в баре, который мы недавно чистили.

цена: малая - блок инструментов в баре
4C

Молчит до обрыва

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

цена: малая - одна плашка на разрыв
5 · что в рельсе

Рельс - это дверь: если чужой деки в нём нет, к ней надо как-то попадать. Если есть - она обещает то, чего тонкий клиент не даёт.

5A

Ничего

Рельс остаётся строго своим - как обещано в «тише рельс». Чужая дека открывается чордом и строкой палитры, и никакого долга в рельсе не появляется. Плата: дверь есть, но её не видно; про неё надо знать.

цена: никакая - строка палитры и чорд
5B

Строка DECKS

Внизу рельса ярус DECKS, в нём по строке на знакомую деку с точкой связи и числом панов. Клик открывает лист. Дверь видна, а обещания она даёт ровно те, что выполняет: это дека, а не сервер.

цена: малая - ярус по образцу WATCH и SUBS
5C

Как обычный сервер

Чужая дека раскрывается в рельсе как свой сервер - её серверы, спейсы, паны. Самый привычный вид. Плата - обман: клик по пану ведёт не в панель деки, а в тонкий лист, где нет ни своего resize, ни истории, ни создания панов.

цена: средняя - и обещание, которого этот клиент не держит
6 · пульт масштаба в статус-баре

Кнопки стоят там же, где живут fps, render p50 и echo - в правом блоке бара, тем же тихим шрифтом. Размер своего шрифта деки при этом не трогается: у него свой пульт в настройках.

6A

Минус, число, плюс

Три знака и ничего лишнего - ровно то, что уже стоит в настройках у размера шрифта (− 14 px +). Число показывает, где ты сейчас; колесо делает то же самое быстрее. Плата: вернуться к «влезает целиком» можно только на глаз.

цена: малая - две кнопки по образцу настроек
6B

И ВПИСАТЬ

Четвёртая кнопка возвращает масштаб, при котором чужой экран влезает целиком - это ровно вариант 2A, доступный одним нажатием. Один жест закрывает вопрос «а что там справа?». Плата: ещё одно слово в баре, который мы чистили.

цена: малая - кнопка и расчёт масштаба по ширине
6C

Число открывает меню

Клик по числу раскрывает список: 75, 100, 125, 140, ВПИСАТЬ, 1:1 СБРОС. Точный масштаб выбирается пальцем, а бар остаётся в три знака шириной. Плата: ещё одна призываемая поверхность ради одного числа.

цена: средняя - выпадающее меню в баре
7 · что запоминается

Масштаб - не настройка деки, а свойство того, что смотришь. Вопрос, насколько мелко его резать: font_size и space_order уже лежат в настройках, так что место для этого есть.

7A

Один на деку

У STUDIO один масштаб на все её паны. Просто, предсказуемо, одна строка в файле. Плата: пан на 80 колонок и пан на 200 требуют разного, а получают одно - и каждое переключение начинается с колеса.

цена: никакая - одно число на запись деки
7B

На каждый пан

Масштаб помнится на пан: вернулся к сборке - она снова 100%, вернулся к агенту - он снова 125%. Пан, который видишь впервые, берёт последний масштаб этой деки, так что пустого места не бывает. Плата: карта в настройках, которую надо подрезать.

цена: малая - карта дека+пан → масштаб с пределом, как у recent_panes
7C

И место панорамы

Вместе с масштабом помнится и куда ты утащил экран: вернулся - смотришь на тот же правый край, где остановился. Плата: место в чужой сетке протухает быстрее масштаба - пан, переехавший в другую геометрию, вернёт тебя не туда.

цена: малая - две координаты рядом с масштабом, и проверка, что сетка та же
8 · чем сказано, что дальше есть

При масштабе один к одному видно 78 колонок из 120. Экран обязан сказать, что он не весь: молчащий обрез читается как конец строки.

8A

Полосы прокрутки

Тонкая полоса снизу и мягкая тень у правого края - язык, который знают все. Видно и что есть дальше, и сколько именно. Плата: полоса - это ещё и приглашение тащить мышью, а тащим мы Ctrl-ом.

цена: малая - полоса по образцу деки
8B

Миникарта

В углу - прямоугольник всей чужой сетки с рамкой того, что видно: 78 из 120. Сразу понятно, где ты в чужом экране и сколько осталось. Плата: ещё один живой элемент поверх вывода, и он всегда на виду.

цена: малая - две вложенные рамки
8C

Затенённые края

Никаких элементов: у краёв вывод просто гаснет в фон - там, где продолжение. Тише всего и не спорит с текстом. Плата: сколько именно за краем - не сказано, и на тёмном выводе градиент почти не читается.

цена: никакая - градиент поверх стекла
пульт

Пульт рисует окно дважды: живым и в момент обрыва. Выбирай в секциях выше или прямо тут - это одно и то же решение, показанное дважды.

выбрано 0 из 8
кликни по карточке - или по тумблеру на пульте