# Терминальный мультиплексор


## Введение

<!-- Какую проблему решает терминальный мультиплексор? -->
Недостаток текстового терминала в том, что экран одновременно принадлежит только одному консольному приложению.
В процессе работы пользователь взаимодействует с несколькими приложениями: редактирует файлы, запускает утилиты из командной строки, следит за состоянием удаленного сервера.
Чтобы не завершать текущее приложение, чтобы переключаться на другое, используют *терминальный мультиплексор*, например `tmux`.

<!-- Что еще умеет tmux? -->

<!--
Тайловый оконный менеджер.
Произносится как "ти-макс".
Окно tmux как рабочий стол.
Сессия (session) + окно (window) + панель (pane).
Клиент-серверная архитектура.
Prefix key
-->

Утилита позволяет разбить терминальное окно на вложенные окна, называемые панелями.
Каждая панель выглядит как самостоятельный терминал и имеет свою историю команд.

```{figure} images/tmux.png
```

С помощью `tmux` можно держать открытыми одновременно текстовый редактор и интерпретатор команд.
Вы можете редактировать текст программы, собирать и запускать программу, просматривать результаты работы.

Команды `tmux` принимает после комбинации клавиш `ctrl-b`.

## Управление панелями

Команды `%` и `"` разбивают текущую панель поплам по вертикали и горизонтали, соответственно.
Панель закрывается по команде `exit`, после чего остальные границы остальных панели расширяются, замещая пустую область.
Если закрывается последняя панель, то происходит выход из `tmux` в командную оболочку.
Переключение между панелями происходит по командам `→`, `←`, `↑`, `↓`.
Размер текущей панели настраивается клавишами перемещения (`→`, `←`, `↑`, `↓`) при набранном `ctrl-b`, но еще не отпущенном `ctrl`.
<!-- Ctrl-b Alt-стрелка -- изменяет границы панелей -->

````{note}
Команда `Ctrl-b t` показывает цифровые часы с текущим временем на активной панели.
```{figure} images/tmux-clock.png
```
````


## Управление окнами


## Управление сессиями

```
tmux new-session [-s session-name]
tmux detach
tmux attach-session [-d] [-t session-name]
tmux list-sessions
tmux kill-session [-t session-name]
```


## Заключение


## Использованные источники

1. [Getting Started · tmux/tmux Wiki · GitHub](https://github.com/tmux/tmux/wiki/Getting-Started)


## Вопросы для самоконтроля

1. Разделите окно tmux на панели способом, показанным ниже на рисунке.
   Запустите в панелях следующие команды:
   * интерактивные часы от `tmux`;
   * `htop`;
   * `vim main.c`;
   * `man 3 getline`.
1. Начните новую сессию `tmux`, подготовьте в ней рабочее пространство и подключитесь с другого терминала к этой сессии.
1. Откройте окно с эмулятором терминала и выполните команду `tty`.
   Она выведет имя файла, с которым связан ваш терминал.
   Присоединитесь к сессии `tmux`.
   Выведите список клиентов `tmux` и попробуйте определить, который из них вы.

```{figure} images/tmux-panels-examples.png
```
