Benutzerdefinierte Tastenkombination zum Bash-Skript funktioniert nicht

Benutzerdefinierte Tastenkombination zum Bash-Skript funktioniert nicht

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 emacsBefehls die Arbeit für mich erledigt. Der Befehl emacsstartet 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. Bildbeschreibung hier eingeben

Das Shell-Skript finden SieHier.

PS: Die Tastenkombination funktioniert einwandfrei, wenn /usr/bin/emacssie mit der Standard-ausführbaren Datei von Emacs verknüpft ist ( /etc/alternatives/emacsin 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 TERMist 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. :)

verwandte Informationen