Как мне создать иерархию терминалов или рабочих пространств?
Мне интересно, есть ли какой-нибудь способ создать иерархию / дерево терминалов в сеансе экрана в Linux?
Я не против взломать это, так что если есть проект, который работает над этим, я бы хотел принять в нем участие.
Объяснение:
Я хотел бы иметь что-то вроде
1 bash
1.1 bash
1.2 bash 2 bash 3 bash
3.1 bash
3.1.1 bash
3.1.2 bash
Было бы хорошо, если бы терминалы могли быть помечены вместо того, чтобы перемещаться по некоторому соглашению, которое, как я подозреваю, не существует. Итак, вы можете перейти к одному с помощью, например, ^A:goto happydays
или же ^A:goto dykstra.angry
,
Каждый браузер предлагает возможность создавать плоский набор вкладок, содержащих документы идентичной природы. GNU-screen
реализует ту же функциональность без использования вкладок. Диспетчеры окон Linux и OS/X предоставляют возможность организовывать окна в массив рабочих пространств, что опять-таки означает то же самое.
Я хотел бы иметь возможность не только группировать вещи в древовидную структуру, но и создавать ссылки (так называемые символические ссылки, так же как указатели) из одной части структуры в другую, а также применять свойства (например, каталог по умолчанию, colorscheme),...) рекурсивно вниз от данного узла.
3 ответа
Только что нашел этот вопрос.
Вы можете делать то, что я считаю, вы ищете прямо в GNU-Screen. В.screenrc добавьте:
screen -t 1.1 0 # just a shell
screen -t 1.2 1 screen -m -e
^ хх-c ${HOME}/.screenrc-1.2 #new session inside accessed by Ctrl-x
screen -t 1.3 2 screen -m -e '^xx' -c ${HOME}/.screenrc-1.3 #yet another new session
Тогда ~/.screenrc-1.2 и ~/.screenrc-1.3 могут быть отдельными установками для подсессий; например, .screenrc-1.3 может определить больше подсекций. Оказавшись внутри всего сеанса, вы можете переключаться между ними, и внутренние сеансы имеют свои собственные последовательности управления (ctrl-x), вы можете перейти к имени или номеру: select 1.2
,
Сеансы вложенных экранов (как предлагает Archege) позволят добиться того, что вы хотите сделать, но управление несколькими уровнями вложенности (особенно когда речь идет об отправке команд на правильный сеанс экрана) может быть проблематичным. Более поздние версии экрана (я использую 4.1.0) поддерживают группы окон, которые могут выполнять большую часть того, что вы хотите достичь. Похоже, что группы окон не способны на что-либо аналогичное жесткой связи, а функция имеет лишь минимальную интеграцию и документацию (предположительно, из-за того, что она сравнительно новая и относительно неясная). Однако заметным преимуществом оконных групп является то, что они работают в течение одного сеанса экрана; следовательно, управление вложенным расположением менее проблематично.
Блок кода ниже является закомментированным копированием / вставкой разделов моего.screenrc, которые имеют отношение к группам окон:
# first, make a root group that all of the other groups will go into
# note that the "//group" is *NOT* a comment; without it, only a
# standard window will be spawned
screen -t root 0 //group
# select the root window to make sure that the next created group will
# end up there, and make another group nested inside of it
select 0
screen -t shells 1 //group
# rinse and repeat for more groups
select 0
screen -t editors 2 //group
select 0
screen -t SSH 3 //group
select 0
screen -t scratch 4 //group
select 0
screen -t scripts 5 //group
# to add windows into first group, select it and then create windows
# as normal
select 1
screen 6
screen 7
# rinse and repeat as desired for the other groups
select 2
screen 8
# and so on...