Yanno, isso soa muito parecido com o que o Byobu pode fazer
Eu estou querendo saber se existe alguma maneira de criar uma hierarquia / árvore de terminais em uma sessão de tela no Linux?
Eu não me importo de invadir isso, então se há um projeto lá fora que está trabalhando nisso, eu gostaria de me envolver com isso.
Explicação:
Eu gostaria de ter algo parecido com
1 bash
1.1 bash
1.2 bash 2 bash 3 bash
3.1 bash
3.1.1 bash
3.1.2 bash
Seria bom se os terminais pudessem ser rotulados em vez de terem que ser navegados para algum acordo que eu suspeito que não exista. Então, você poderia pular para um usando, por exemplo, ^A:goto happydays
ou ^A:goto dykstra.angry
.
Todo navegador oferece a capacidade de criar um conjunto simples de guias contendo documentos de natureza idêntica. O GNU- screen
implementa a mesma funcionalidade sem usar guias. Os gerenciadores de janelas Linux e OS / X fornecem a capacidade de organizar janelas em uma variedade de áreas de trabalho, o que equivale, novamente, ao mesmo negócio.
Gostaria de poder não apenas agrupar coisas em uma estrutura de árvore, mas também criar referências (também conhecidas como links simbólicos, ponteiros) de uma parte da estrutura para outra, bem como aplicar propriedades (por exemplo, padrão diretório, esquema de cores, ...) recursivamente para baixo a partir de um determinado nó.
Yanno, isso soa muito parecido com o que o Byobu pode fazer
acabou de encontrar esta pergunta.
Você pode fazer o que eu acredito que você está procurando dentro do gnu-screen. Em .screenrc, adicione:
screen -t 1.1 0 # just a shell
screen -t 1.2 1 screen -m -e
^ xx -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
Então o ~ / .screenrc-1.2 e ~ / .screenrc-1.3 podem ser configurações separadas para as subsessões; por exemplo, .screenrc-1.3 poderia definir mais subsessões. Uma vez dentro da sessão inteira, você pode alternar entre eles, e as sessões internas têm suas próprias seqüências de controle (ctrl-x), você pode navegar para o nome ou número: select 1.2
.
Aninhamento de sessões de tela (como sugerido por Archege) vai conseguir o que você está procurando fazer, mas gerenciar as múltiplas camadas de aninhamento (especialmente quando se trata de enviar comandos para a sessão de tela correta) pode ser uma dor. Versões mais recentes de tela (eu estou usando 4.1.0) suportam grupos de janelas, que podem fazer a maior parte do que você está procurando realizar. Os grupos de janelas não parecem ser capazes de fazer nada análogo ao hardlink, e o recurso tem apenas uma integração e documentação mínima (presumivelmente devido a ser relativamente novo e relativamente obscuro). No entanto, uma vantagem notável dos grupos de janelas é que eles funcionam em uma única sessão de tela; conseqüentemente, gerenciar o arranjo aninhado é menos problemático.
O bloco de código abaixo é uma cópia / colagem comentada das seções do meu .screenrc que são relevantes para grupos de janelas:
# 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...