Identifique se o terminal está aberto em guake

2

Eu preciso verificar no meu .vimrc se o terminal no qual o vim está aberto está em execução no Guake. Como posso ver isso? A variável $TERM não parece estar certa ...

    
por lindhe 28.11.2014 / 12:23

1 resposta

2

Não há maneira infalível. TERM usa o mesmo valor para emuladores compatíveis na maioria; emuladores de terminal mais modernos, além da tela e do relatório tmux xterm .

Você pode explorar a lista de processos para encontrar o pai dos pais do Vim. Isso dirá a você em qual emulador de terminal (se houver) o Vim está sendo executado no caso comum em que o Vim foi iniciado a partir de um shell que foi iniciado diretamente no emulador de terminal. Você pode até ser um pouco mais inteligente e percorrer a lista de processos, indo do Vim para o pai, depois para o pai dos pais, e assim por diante, parando quando você encontra um processo que não está rodando no mesmo terminal que o filho: processo é provavelmente um emulador de terminal.

Essa heurística pode ser enganada de várias maneiras - em particular porque é possível (embora incomum) iniciar um programa de qualquer lugar e fazê-lo interagir em outro terminal redirecionando sua entrada e saída.

Aqui está um script pouco testado que mostra a linha de comando do emulador de terminal em que o processo atual está sendo executado, assumindo que o processo é iniciado como um descendente desse emulador de terminal sem travessuras de redirecionamento.

#! /bin/sh
set -f
pid=$PPID
my_tty=$(ps -p $$ -o tty=)
while
  [ "$pid" -ne 1 ] &&
  set -- $(ps -p "$pid" -o ppid= -o tty= -o args=) &&
  [ "$2" = "$my_tty" ]
do
  pid=$1
done
shift; shift
printf '%s\n' "$*"

Chame esse script which-terminal-emulator . No seu .vimrc , você pode adicionar

let terminal_emulator=system('which-terminal-emulator')
if terminal_emulator =~ '.*guake.*$'
  …
endif
    
por 29.11.2014 / 23:43