Как мне создать иерархию терминалов или рабочих пространств?

1057
intuited

Мне интересно, есть ли какой-нибудь способ создать иерархию / дерево терминалов в сеансе экрана в 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
....Вот это да. когда начать? о да. Super User не является дискуссионным форумом. не поймите меня неправильно, эта напыщенная речь - это начало увлекательной дискуссии, но это не место для этого. quack quixote 14 лет назад 1
В самом деле. Я согласен с тем, что вы говорите, но это может быть связано с версией `tl; dr`, которая задает конкретный вопрос. Phoshi 14 лет назад 0
@ Quack Quixote: Согласен .. Я определенно был на разглагольствовании, и, возможно, некоторых других вещах, когда я написал это. Я добавил резюме в форме вопроса. intuited 14 лет назад 0
@intuited: хорошо, мне нравится резюме, открытие. но давай, ты можешь урезать эту напыщенную речь до двух абзацев, и (а) все равно понять смысл и (б) не нуждаться в гиганте`теги. или, что еще лучше, перенесите напыщенную болтовню куда-нибудь в пост блога, оставьте tl; dr, два второстепенных абзаца, которые не являются rant-y, и ссылку на пост блога для получения дополнительной информации. quack quixote 14 лет назад 1
Пффф, какой беспорядок ... Надеюсь, что это более читабельно! Тем не менее, @quack прав: это не дискуссионный форум, поэтому, если кто-то не может указать вам на то, что вам не повезло. Ivo Flipse 14 лет назад 0
@ivo: приятно редактировать. @intuited: я знаю, что редактирование вырезало много, что вы могли бы счесть важным; если вы добавляете материал обратно, стремитесь к краткости и краткости. quack quixote 14 лет назад 0
Эй, это выглядит хорошо. Спасибо, ребята. intuited 14 лет назад 0

3 ответа на вопрос

1
Journeyman Geek

Янно, это звучит очень похоже на то, что может сделать Бёбу

Really? can you elaborate? I read through the manpage and [a tutorial](http://lcorg.blogspot.com/2010/03/byobu.html). I learned that byobu can make it convenient to re-title a window, and can set up default windows for a session. But I'm really hoping for a way to set up a tree of windows, which can then be navigated with keymappings relevant to their perceived position within the tree structure. Did I miss that? intuited 14 лет назад 0
@intuited: вы можете получить «древовидный» эффект в Byobu (или любой другой экранной программе), используя несколько вложенных сессий. Вы можете открыть сеанс с некоторым набором окон, затем отсоединить и открыть другой сеанс с другим набором окон и т. д., затем открыть еще один сеанс, в окне 1 снова присоедините к , в окне 2, снова подключите в и т. д. добавьте терминал с вкладками, такой как gnome-терминал, и откройте один из этих «основных сеансов» на различных вкладках, и вы получите дерево сеансов. (весело провести время с escape-символами.) quack quixote 14 лет назад 1
@quack: Я баловался этим, и это иногда полезно. Одна вещь, которая важна, состоит в том, что есть некоторый способ переместить вещи в иерархии. Я думаю, что если бы я создал экран * сеанс * на каждом экране, а не просто открыл окно, я мог бы отсоединить его и переместить в другое место в дереве. intuited 14 лет назад 0
На самом деле, если можно сказать, что экран проходит через ^ Aa, когда у него открыто только одно окно, это может работать довольно хорошо ... то есть ^ Aa будет ретранслироваться до сеанса родительского экрана, если этот сеанс экрана уже не был разделен на две детские сессии. Я думаю, что есть некоторые хитрости, которые нужно решить, но это кажется, по крайней мере, неопределенно многообещающим. intuited 14 лет назад 0
Я где-то читал, что перемещение окон между сессиями уже находится в «списке пожеланий» разработки экрана. и что касается прохождения побегов, я уверен, что внешний сеанс получит его первым. я бы ожидал, что * будет * «родительским сеансом», но это может зависеть от того, как именно все привязано. (если я открою сеанс , и в фоновом режиме, я могу прикрепить к ним 3 окна , но я также могу прикрепить к окнам , { B: 7}, и . Теперь, кто из них «родитель»? :) @intuited quack quixote 14 лет назад 0
@quack: Да, проходить через escape не так уж и плохо, это работает так: если у вас есть экран внутри экрана, чтобы переключиться на предыдущее окно в этом внутреннем сеансе, вы делаете ^ aa- ^ aa. Это своего рода фактор удобства, но его не так сложно поймать / запомнить. О, дерьмо, вы правы, у меня возникло недомогание, когда я писал этот последний комментарий: вы просто сделали бы, чтобы переключиться на другой сеанс экрана. В любом случае, да, мне нравится, как экран превращает компьютер в полифильную коммуну. intuited 14 лет назад 0
@ Quack: Но было бы намного легче отслеживать, если бы была только одна коммуна вместо группы скрещивающихся .. другими словами, если бы вы могли перемещаться внутри взаимосвязанной иерархии вместо того, чтобы как-то помнить, что вам нужно нажмите ^ aa- ^ aa- ^ aa- ^ aa, потому что вы хотите переключиться с 1.2.1 на 1.2.2. или что-то типа того. например, если это работает как структура каталогов (с символическими ссылками), и вы можете сделать эквивалент `cd ..` или` cd SOMESESSION`. может быть, введя это через `^ a-:`? и режим "ex", чтобы было удобно переставлять вещи? intuited 14 лет назад 0
1
Arcege

только что нашел этот вопрос.

Вы можете делать то, что, я полагаю, вы ищете прямо в GNU-Screen. В .screenrc добавьте:

screen -t 1.1 0 # just a shell

screen -t 1.2 1 screen -m -e^ хх-c $/.screenrc-1.2 #new session inside accessed by Ctrl-x

screen -t 1.3 2 screen -m -e '^xx' -c $/.screenrc-1.3 #yet another new session

Тогда ~ / .screenrc-1.2 и ~ / .screenrc-1.3 могут быть отдельными установками для подсессий; например, .screenrc-1.3 может определять больше подсессий. Оказавшись внутри всего сеанса, вы можете переключаться между ними, а внутренние сессии имеют свои собственные последовательности управления (Ctrl-X), вы можете перейти к по имени или номеру: select 1.2.

На данный момент я довольно хорошо приспособлен к использованию ^ Aaa ... для доступа к экранам внутри экранов внутри ... Но полезно знать о параметрах -t и и команде `: select`. intuited 13 лет назад 0
Главное, чего здесь не хватает - это возможность перемещать окно из одного сеанса `screen` в другой. intuited 13 лет назад 0
0
redyoshi49q

Nesting screen sessions (as suggested by Archege) will achieve what you're looking to do, but managing the multiple layers of nesting (especially when it comes to sending commands to the correct screen session) can be a pain. More recent versions of screen (I'm using 4.1.0) support window groups, which can do most of what you're looking to accomplish. Window groups don't seem to be capable of anything analogous to hardlinking, and the feature has only minimal integration and documentation (presumably due to being comparatively new and relatively obscure). However, a notable advantage of window groups is that they work through a single screen session; consequently, managing the nested arrangement is less troublesome.

The code block below is a commented copy/paste of the sections of my .screenrc that are relevant to window groups:

# 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...