Como executar um script quando um título é definido para uma guia de terminal?

5

Durante o meu dia-a-dia, mantenho muitos separadores de terminal. Então, para identificar esses, eu defino títulos

Guia Terminal > Definir título

por exemplo. IRC, API Codebase, logs de API, Server1, etc

O que eu quero fazer é fazer algo na guia com base no título da guia. por exemplo.

  1. Quando eu definir "API Codebase", ele deve ir para o meu codebase e ativar o ambiente virtual python adequado
  2. Quando eu defino "IRC", ele deve executar irssi
  3. Quando eu defino "Server1", ele deve executar o comando ssh para se conectar ao servidor

e assim por diante.

Como isso pode ser feito?

    
por Hussain Tamboli 25.02.2016 / 11:09

2 respostas

9

Eu faria isso de maneira um pouco diferente. Em vez de definir manualmente o título da guia, crie uma função que defina o título e execute o comando desejado. Adicione esta função (adaptada de aqui ) ao seu ~/.bashrc (supondo que você esteja usando o bash):

function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="\[\e]2;$@\a\]"

  ## Do different things depending on the string passed
  case "$@" in
        "API Codebase")
            echo cd ~/codebase
            echo python ...
            ;;
        "IRC")
            echo irssi
            ;;
        "Server1")
            echo ssh server1
            ;;
  esac
  PS1="${ORIG}${TITLE}"
}
    
por 25.02.2016 / 12:31
2

No meu conhecimento não é possível inspecionar o estado de um terminal de um processo no shell.

Mas mesmo se você pudesse, mudar o comportamento baseado no título do terminal seria muito propenso a erros. Não há uma maneira fácil de verificar erros ortográficos ou qualquer coisa assim. Também não é muito escalável - você teria um comando do_something_based_on_title que continuaria crescendo à medida que você adiciona recursos.

Em vez de um script set-title massivo, torne cada comando responsável por definir seu próprio título de terminal quando eles forem executados. Você pode fazer isso facilmente com aliases, assim (coloque isso no seu .bashrc ou similar).

set_title() {
  echo -e "\e]0;$*\a"
}

alias apic='set_title "API Codebase"; command_for_api_codebase'
alias irc='set_title "IRC"; irssi'
alias server1='set_title "Server1"; ssh server1'

Agora você tem a conclusão de tabulação para esses comandos, nenhum risco de o código de definição de título e de inicialização do programa ficar fora de controle, e não é mais necessário clicar com o botão direito do mouse na guia para definir seu título. Basta executar os comandos que você quer e o título também é definido.

    
por 25.02.2016 / 15:39