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

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

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

eu queria correr oservidor clienterecurso do emacs usando um únicoscript bashisso cuidaria do servidor e do cliente emacs. O script executa o servidor (se ainda não estiver em execução) e, em seguida, executa o cliente no quadro desejado (terminal ou gráfico).

Eu vinculei o script executável para /usr/bin/emacs(substituindo o padrão) para que a execução do emacscomando faça o trabalho para mim. O comando emacsagora inicia o script a partir do terminal e também via Alt+F2. O problema é que vincular um atalho de teclado ao mesmo comando (ou script) não funciona.

Estou anexando a captura de tela do meu atalho aqui. insira a descrição da imagem aqui

O script de shell pode ser encontradoaqui.

PS: O atalho de teclado funciona bem quando /usr/bin/emacsestá vinculado ao executável padrão do emacs (no /etc/alternatives/emacsmeu caso).

Responder1

Tentei recriar seu problema e acho que cheguei perto.

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

De acordo comtldp

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

Assim, o script não será capaz de detectar o programa que o invocou através desta 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 TERMvariável está definida comoburro, quando um comando por meio de atalhos de teclado é executado.

Então, para resolver seu problema, você poderia usar o código a seguir.

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. :)

informação relacionada