Esse script do Wiki do Arch
Essa invocação de emacs
que verifica (fboundp 'tool-bar-mode)
está testando se sua compilação do Emacs inclui suporte a GUI. É possível construir o Emacs sem ele para economizar um pouco de RAM e espaço em disco¹, mas é incomum. A menos que você se preocupe com a compatibilidade com as compilações do Emacs que não têm suporte a GUI, esqueça esse bit.
Você fica com
if [ -n "$DISPLAY" ]; then
emacsclient -a "" -n -c "$@"
else
emacsclient -a "" "$@"
fi
E até mesmo esse nível de complexidade é necessário apenas se você quiser que a chamada para emacsclient
retorne imediatamente se ela abrir uma nova janela da GUI. (Se ele estiver sendo executado no terminal, ele deverá continuar em execução até você terminar de usar esse terminal.) Cabe a você decidir se você gosta desse comportamento. Se você não, então você pode simplesmente executar
emacsclient -a "" "$@"
E se você iniciar o Emacs com sua sessão, por exemplo, como uma unidade systemd, você não precisa dizer emacsclient
para iniciá-lo. Então ficamos com
emacsclient "$@"
que eu não posso simplificar ainda mais.
Seu requisito adicional
- stay in the terminal (…) if called with a file (…) or when graphical environment isn't present (…)
- open a GUI window when called without a file (…) and return immediately
Para isso, você precisa testar se o script foi chamado com argumentos. Suponho que, se você passar qualquer opção emacsclient
(por exemplo, --eval
), isso conta como um argumento.
if [ $# -ne 0 ]; then
emacsclient -nw "$@"
elif [ -n "$DISPLAY" ]; then
emacsclient -c -n
else
emacsclient -c
fi
¹ Nenhum suporte a GUI significa que você não precisa ter as bibliotecas necessárias instaladas. O programa emacs
não pode ser iniciado se as bibliotecas não estiverem presentes, mesmo que não use os recursos da GUI naquela sessão específica.