Я долгое время был тяжелым пользователем Screen, но я использую версию, которую я модифицировал еще в 2002 году. В основном потому, что я хотел, чтобы порядок расположения окон “next/prev” навигации совпадал с порядком создания новых окон, подобно оконному менеджеру вроде i3 или Ion . Стандартное поведение Screen'а заключается в том, что ‘следующее’ и ‘prev’ будут идти по номеру окна, так что обычно ‘новое’ окно (схватив наименьший доступный номер) будет расположено где-то в другом месте, чем ‘следующее’ окно - путаница, если вы не помните номера. С тех пор мое предпочитаемое поведение было реализовано в Tmux в виде флага для команды new-window в 2010 , и опции renumber-windows в 2012 . Мой патч Screen, который я пытался сделать максимально приемлемым, включая дополнения к документации и т.д., не вызвал никаких обсуждений в списке Screen в июле 2002 года (тогда “screen@informatik.uni-erlangen.de”, не может найти архивы). На самом деле это даже не было признано, даже когда я отправил его снова через год.
С 2002 года я “переделал” патч пару раз, чтобы применить его к более новым версиям Screen. Однако, когда я добрался до версии 4.3 (2015), я заметил недокументированное изменение, которое сломало одно из моих применений экрана - а именно то, что ‘stuff’ теперь интерполирует переменные окружения . Мне не нужна была эта возможность, и я не мог понять, как легко избежать аргументации в ‘stuff’ (чтобы я мог посылать текст, содержащий знаки доллара), так что я просто продолжал использовать версию 4.0 (с 2004).
я использую ‘stuff’ (‘send-клавиши’ в Tmux) в функции Emacs, которая посылает содержимое текущего региона Emacs на определенный номер окна. Таким образом, когда я пишу код на скриптовом языке, я открываю интерпретатор, даю целому окну специальный номер, а затем я могу послать строки кода из окна редактора прямо в окно интерпретатора, используя эту привязку Emacs. Это сложно, но мне это нравится больше, чем чистое решение от Emacs , так как я также могу взаимодействовать с интерпретатором в его окне Screen, используя стандартные нажатия клавиш. Это немного похоже на GUI IDE, но мне не нужно использовать мышь или пялиться на мигающий курсор.
Еще одна возможность, которую я реализовал в своем патче - это возможность “пометить” окно, а затем перепозиционировать помеченное окно, чтобы оно было “следующим” после текущего. Для меня это гораздо более естественный способ переупорядочивания окон, чем перенумерация; это как парадигма копирования/вставки, или “перетаскивание”. (Я недавно понял, как это сделать в i3 тоже.)
В Tmux должно быть возможно делать то же самое, например с 2015 есть возможность “разметки” панели. Или, возможно, более элементарное решение можно было бы разработать с помощью скриптов оболочки с контролем состояния. Я реализовал короткий скрипт и привязки клавиш, чтобы попробовать метод “маркировки панели”, и это сработало несколько раз, но затем в Tmux произошёл сбой с “[потерянным сервером]”. Потом я обнаружил, что Tmux рухнул, даже не пытаясь сделать ничего сложного. Очевидно, что он падал для некоторых пользователей в течение по крайней мере, нескольких лет . Иногда происходит сбой сервера, иногда он начинает использовать 100% центрального процессора и становится невосприимчивым. Я никогда не видел, чтобы Screen делал что-то подобное.
Теоретически Tmux превосходит Screen по нескольким параметрам. Он имеет гораздо лучшую скриптографируемость, то есть вы можете делать такие вещи, как запрос списка окон в текущей сессии из командной строки, что невозможно при использовании Screen. Например, в 2015 Screen добавлена команда “сортировать окна по заголовку” . Я не уверен, когда такая специализированная команда будет полезна, но это и более практичные варианты (например, сортировка окон по использованию процессора) относительно легко могут быть сделаны из скрипта оболочки в Tmux. Мне кажется, что в Screen было бы сложно сделать что-то настолько креативное, по крайней мере, без модификации кода на C.
Как упоминалось в других плакатах, в Tmux есть модель с одним сервером, который я вижу основным недостатком, особенно когда сервер ломается. Об этом можно поработать, указав отдельный сокет для каждой “сессии”. Тем не менее, я предпочитаю односерверную модель Screen по умолчанию, что кажется немного более элегантным.
Работа с кодом Screen, еще в 2002 году, была для меня познавательной и приятной. Как ни странно, но при всех своих дополнительных возможностях Tmux имеет примерно на 25% меньше строк кода, чем Screen (30k против 40k). Я заметил, что в Tmux используется много деревьев и списков структур данных, которые мне было немного сложно понять. Экран, казалось, предпочитает массивы.
Как я понимаю, потому что интерфейс Unix-терминала настолько стабилен, что код Screen или Tmux практически не нуждается в адаптации к изменениям в базовой операционной системе. Эти программы на самом деле не имеют обновлений безопасности, таких как веб-браузеры, веб-серверы или даже оболочка. Я не заметил никаких проблем при запуске моей пользовательской версии Screen, последней обновленной в 2004 году (за исключением необходимости добавления некоторых конфигурационных файлов, чтобы предотвратить удаление Systemd сокета ; эти файлы, как правило, все равно являются частью дистрибутива). Возможно, я смогу обойти проблемы, с которыми столкнулся в Tmux, запустив версию Tmux до того, как она начала давать сбой. Конечно, если достаточное количество пользователей сделает это, то это будет не очень хорошо для новых пользователей, так как это означает, что меньше экспертов будут искать ошибки в последних официальных версиях этих программ. Однако, трудно мотивировать себя на переход на продукт, который для меня нестабилен (последний Tmux) или который не имеет определенных возможностей, которые я хочу (стандартный Screen).
Я знаю, что это не дает простого ответа на вопрос ОП, но я надеюсь, что моя точка зрения была полезной.