como incluir o nome da sessão da tela no hardstatus?


17

Uso diferentes sessões de tela para diferentes projetos. Tela inicial como screen -S project1. Agora, eu gostaria de mencionar 'project1' na linha de status.

O nome da sessão pode ser obtido a partir variável STY ambiente: STY=13539.project1.
Mas como colocar isso na tela? Eu tentei o comando backtick e% `no hardstatus, mas não consigo acertar.

O que eu fiz:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY

sem sorte, vazio% `.

backtick 0 30 30 sessionname

ainda sem sorte, nome da sessão: não encontrado

Respostas:


18

Você pode incluir essa sequência (com informações adicionais, se desejado) em seu $PS1:

\[\e]0;$STY\007

dentro de aspas simples para atrasar a avaliação da variável. Em seguida, adicione isso ao seu ~/.screenrc:

hardstatus string '%H:%h'

Infelizmente, screennão define $STYno ambiente dos comandos que gera para o backtickrecurso.

Outra opção, em vez da acima:

hardstatus string '%H:%`'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

A vantagem deste é que segue as alterações feitas usando o sessionnamecomando A primeira opção não.

Editar:

A partir daqui :

Como $ STY ainda não está definido quando a tela origina .screenrc, você pode usar este truque no seu .screenrc:

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 

Ou seja, envie um comando de tela para a primeira janela.


1
Para a solução que começa com backtick: (1.) backtickum bash é incorporado? um comando gnu-screen? um executável binário? existe uma página de manual? (2.) Eu sei que funciona porque eu tentei, mas como você executa um comando de duas linhas quando parece que a .screenrcsintaxe do gnu-screen requer uma linha para o hardstatuscomando? (3.) como eu modificaria seu comando para permitir anexar algum texto após o nome da sessão?
Trevor Boyd Smith

@TrevorBoydSmith: backtické um screencomando. Procure-o na página de manual screen. Talvez seja melhor se você postar uma nova pergunta sobre o restante do que está fazendo. Eu não acho que a saída do hardstatus possa ocupar duas linhas na tela. Você pode usar sedou em awkvez de grepfazer o que grepestá fazendo no meu exemplo e também anexar algum texto extra.
Pausado até novo aviso.

Quando eu disse "duas linhas", deixe-me reafirmar o que eu quis dizer, não quero uma exibição de duas linhas para o estado físico. Fiquei confuso com o %` e o backtickser em linhas separadas ... eles não pareciam relacionados, mas agora que li a documentaçãobacktick , vejo que os dois são relacionados / necessários / válidos-sintaxe (embora sintaxe IMO estranha).
Trevor Boyd Smith

3

Para mim, isso funciona facilmente com a inserção %Sno estado rígido.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

No entanto, isso exibe o nome da sessão sem o ID (como ${STY#*.}); no seu exemplo: project1.

(A mesma resposta para outras perguntas aqui e aqui para mais detalhes).


2
Para sua informação, o "% S" funciona em versões mais recentes do gnu-screen (funciona na versão do Fedora 21 para mim), mas não em versões mais antigas (não funciona na versão do CentOS 6).
Trevor Boyd Smith
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.