
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 emacs
comando faça o trabalho para mim. O comando emacs
agora 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.
O script de shell pode ser encontradoaqui.
PS: O atalho de teclado funciona bem quando /usr/bin/emacs
está vinculado ao executável padrão do emacs (no /etc/alternatives/emacs
meu 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 TERM
variá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. :)