
Ich bin ein Emacs-Benutzer und habe einige Emacs-Konfigurationsdateien geschrieben.
Ich wollte denKundenserverFunktion von Emacs mit einem einzigenBash-Skriptdas würde sich um den Emacs-Server und -Client kümmern. Das Skript führt den Server aus (falls er nicht bereits läuft) und führt anschließend den Client im gewünschten Rahmen (Terminal oder Grafik) aus.
Ich habe das ausführbare Skript per Softlink mit verknüpft /usr/bin/emacs
(und damit die Standardeinstellung überschrieben), sodass die Ausführung des emacs
Befehls die Arbeit für mich erledigt. Der Befehl emacs
startet das Skript jetzt sowohl vom Terminal als auch über Alt+F2
. Das Problem ist, dass das Verknüpfen einer Tastenkombination mit demselben Befehl (oder dem Skript) nicht funktioniert.
Ich füge hier den Screenshot meiner Verknüpfung an.
Das Shell-Skript finden SieHier.
PS: Die Tastenkombination funktioniert einwandfrei, wenn /usr/bin/emacs
sie mit der Standard-ausführbaren Datei von Emacs verknüpft ist ( /etc/alternatives/emacs
in meinem Fall at).
Antwort1
Ich habe versucht, Ihr Problem nachzubilden, und ich glaube, ich bin nah dran gekommen.
Das Problem, das Sie meiner Meinung nach haben, hängt mit dem if [[ -t 1 ]]
Zustand zusammen.
Entsprechendtlp
Mit dieser Testoption kann überprüft werden, ob es sich bei stdin [-t 0] oder stdout [-t 1] in einem bestimmten Skript um ein Terminal handelt.
Das Skript kann also das Programm, das es über diese Bedingung aufgerufen hat, nicht erkennen. Daher ist dies nicht die richtige Lösung für Ihr Problem.
Nun werden die Tastenkombinationen in Ubuntu intern über ein gefälschtes Terminal ausgeführt. Tatsächlich TERM
ist die Variable aufdumm, wenn ein Befehl über die Tastenkombinationen ausgeführt wird.
Um Ihr Problem zu lösen, können Sie den folgenden Code verwenden.
if [ $TERM == "dumb" ]
then
TERMINAL=false
CREATE="-c"
else
TERMINAL=true
CREATE="-nw"
fi
Ich kann nicht garantieren, dass es in allen Fällen funktioniert, aber für den von Ihnen beschriebenen Einsatzzweck funktioniert es.
Hoffe, es hilft. :)