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.