O atalho de teclado personalizado para o script bash não funciona

3

Eu sou um usuário do emacs e escrevi alguns arquivos de configuração do emacs.

Eu queria executar o cliente-servidor recurso do emacs usando um único script bash que cuidaria do servidor e cliente emacs. O script executa o servidor (se ainda não estiver em execução) e o segue executando o cliente no quadro desejado (terminal ou gráfico).

Eu vinculei o script executável ao /usr/bin/emacs (substituindo o padrão) para que executar o comando emacs faça o trabalho para mim. O comando emacs agora ativa o script do terminal, bem como via Alt+F2 . O problema é que ligar um atalho de teclado ao mesmo comando (ou ao script) não funciona.

Eu estou anexando a captura de tela do meu atalho aqui.

O script de shell pode ser encontrado aqui .

P.S .: O atalho de teclado é executado corretamente quando /usr/bin/emacs está vinculado ao executável padrão do emacs (em /etc/alternatives/emacs no meu caso).

    
por reza.safiyat 10.10.2015 / 00:54

1 resposta

2

Eu tentei recriar seu problema e acho que cheguei perto.

O problema que descobri é que você está enfrentando a condição if [[ -t 1 ]] .

De acordo com tldp

  

Esta opção de teste pode ser usada para verificar se o stdin [-t 0] ou   stdout [-t 1] em um determinado script é um terminal.

Assim, o script não poderá detectar o programa que o invocou por meio dessa condicional. Portanto, esta não é a solução precisa para o seu problema.

Agora, internamente, as combinações de teclas no Ubuntu são executadas através de um terminal falso. Na verdade, a variável TERM está definida como dumb , quando um comando por meio das atalhos de teclado é executado.

Então, para resolver seu problema, você pode usar o seguinte código.

if [ $TERM == "dumb" ]
then
        TERMINAL=false
        CREATE="-c"
else
        TERMINAL=true
        CREATE="-nw"
fi

Não posso garantir que funcionará em todos os casos, mas funciona para o uso que você descreveu.
Espero que ajude. :)

    
por Prince Tyagi 13.10.2015 / 11:56