Pergunta

Eu estou escrevendo um aplicativo de console que faz uso da tecla F1 (para ajudar). Infelizmente, enquanto Konsole (do KDE) não usa essa chave, Gnome Terminal faz, assim que a chave F1 torna-se inacessível ao meu pedido. Eu não acho que há uma maneira de detectar se a tecla F1 já está mapeado no lado do GUI de coisas (Gnome Terminal), mas se houver, a resposta para isso vai obviar a esta pergunta. :)

Ergo, meu próximo melhor aposta é tentar detectar se estou executando dentro Gnome Terminal. Existe alguma maneira de fazer isso? Estou interessado principalmente em recolhendo isso de dentro Ruby, mas se isso pode ser feito via shell ou variáveis ??de ambiente, ou sistema de arquivos virtual (/ proc, / dev, etc), em seguida, que será suficiente.

Eu estou esperando por uma maneira confiável de fazer isso, mas eu posso contentar com "melhor palpite" se aproxima como grepping as variáveis ??de ambiente em busca de pistas que podem permitir-me razoavelmente assumir que Gnome Terminal é o terminal de embrulho.

Informações adicionais: outras chaves são também "roubada" por Gnome Terminal. Tenho a intenção de apresentar algum tipo de mensagem informativa sobre teclas de alternativas para os usuários do Gnome.

Foi útil?

Solução

Googleage revelou que eu poderia ser capaz de confiar em Gnome Terminal definindo a variável de ambiente COLORTERM para 'gnome-terminal'.

Outras dicas

Para zsh:

[[ "$COLORTERM" == "gnome-terminal" ]] || [[ ${$(ps -p $(ps -p $$ -o ppid=) -o cmd=):t} == gnome-terminal* ]]

gnome-terminal utilizado para definir $COLORTERM, mas isso foi descartado (em 3.12.0-67-g1d5c1b6).

Normalmente, você usa termcap informações aka terminfo. Isto diz-lhe que tipo de terminal que você está trabalhando com e também o que as teclas são.

É a escolha do usuário, e desde Gnome Terminal relata-se como provavelmente uma espécie de x-prazo, como Konsole provável acontecer, é provável que exista uma maneira para que o usuário crie uma pressão de tecla F1. Portanto, eu suspeito que as capacidades do terminal dos dois será relatado como equivalente.

Esta investigação de Função códigos de escape chave pode ser interessante para você sem realmente explicar como, se é mesmo possível, que o terminal gnome poderia ser feito para produzir uma prima F1. Pensando no I terminal de Mac OS X utilizado há muito tempo atrás, ele pegou PageUp e PageDown para a barra de rolagem, enquanto Command-PageUp e Command-PageDown passou por eles até o terminal.

Um método bastante grosseira, se você sentir vontade de delegar isso para o shell - caso contrário, em C ou C ++, você terá que percorrer o seu proc /, se você tiver um:

ps x | grep `ps o ppid,fname | grep bash | grep -v grep | head -1 | awk '{print $1}'` | grep 'gnome-terminal' | wc -l

Se a execução do seu próprio programa, através do sistema (), por exemplo, você pode, com a 'grep' o nome do seu programa, em vez de 'bash'

Eu sei, é definitivamente "hack como um pirata";)

fwiw, este é um cenário no gnome-terminal; os usuários podem ir para Edit -.> Atalhos de teclado nos menus e mudança gnome-terminal ou excluir o atalho de teclado F1

Eu simplesmente verificar o $ TERM para o emulador de terminal de minha escolha e, em seguida, adicionar um apelido para desova um novo terminal no diretório atual.

if [[ $TERM == 'xterm' ]] ; then
  alias nw='gnome-terminal --working-directory=$PWD'
fi
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top