Als vorbeugende Maßnahme für die Unannehmlichkeit, CTRL- drücken zu müssen z, könnten Sie ein Wrapper-Skript für Ihren Editor erstellen, auf das Ihr Editor im Hintergrund ausgeführt wird. Auf diese Weise müssen Sie sich nicht mehr daran erinnern, es explizit im Hintergrund zu starten:
#!/bin/sh
EDITOR="emacs" # or whatever
if [ -z "${DISPLAY}" ]; then
${EDITOR} "$@"
else
${EDITOR} "$@" &
fi
Oben versuchen wir zunächst festzustellen, ob ein X-Server verfügbar ist, und führen dann den Editor im Hintergrund aus (andernfalls verwenden viele Unix-Editoren stattdessen Ihr Terminal und möchten den Editor in diesem Fall nicht als Hintergrundprozess ausführen). . Alle Argumente werden wörtlich ( "$@"
) an den Editor Ihrer Wahl übergeben, so wie Sie es für das Wrapper-Skript angegeben haben.
Was den Befehl anbelangt, den Sie vermissen ... Nach meinen grundlegenden Experimenten kann es für GUI-Programme, die kein Terminal beinhalten, so einfach sein, zuerst einen Prozess zu senden SIGSTOP
und ihn dann SIGCONT
in den Vordergrund zu stellen (mithilfe des kill
Befehls, wenn Sie ein Shell-Skript verwenden, um dies zu implementieren). . Sie müssten es natürlich in einem anderen Terminalfenster / -register ausführen, und die Schwierigkeit wäre, die PID, an die Sie Ihr Signal senden möchten, bequem und allgemein zu finden. Sie können die beiden Signale standardmäßig an alle Prozesse mit dem angegebenen Namen senden (standardmäßig an Ihren bevorzugten Editor und die Verwendung von PIDs als Argumente zulassen):
#!/bin/sh
EDITOR=emacs # whatever
stop_cont_prog()
{
case "$1" in
# begin with number is considered PID - this is not good
# enough to be taken seriously...
[1-9]*) kill -SIGSTOP "$1"; kill -SIGCONT "$2";;
*) killall -SIGSTOP "$1"; killall -SIGCONT "$2";;
esac
}
if [ -n "$1" ]; then
for prog in "$@"; do stop_cont_prog "$1"; done
else
stop_cont_prog "${EDITOR}"
fi
Diese Methode gab mir meine Terminal-Tabs korrekt, nachdem ich (mehrere) emacs
Befehle im Hintergrund ausgeführt hatte. Der im Terminal ausgeführte Emacs-Prozess wurde jedoch aufgrund von Problemen mit der Shell-Jobsteuerung oder den Terminaleinstellungen nicht ordnungsgemäß wiederhergestellt. Diese Methode würde also von einer gewissen Sophistifizierung profitieren.
Das SIGSTOP
ist genau das, was in den Vordergrund Prozess senden wird , wenn Sie die Taste (durch gemeinsamen Standardwert) CTRL- z. Siehe stty -a
Ausgabe
$ stty -a
speed 38400 baud; rows 50; columns 200; line = 0;
intr = ^C; [...] start = ^Q; stop = ^S; susp = ^Z; [...]
[...]
(Ausgabe abgekürzt) und stty
Handbuchseite:
susp CHAR
CHAR will send a terminal stop signal
Prozesse, die mit dem SIGSTOP
Signal gestoppt wurden, können durch Senden neu gestartet werden SIGCONT
. Normalerweise ist es die Shell-Job-Steuerungslogik, die SIGCONT
die anderen notwendigen Manipulationen fg
und bg
Befehle sendet und sich darum kümmert, die wir ignorieren.
tmux
bietet aber vielleicht die gleiche Funktionalität wie in Ihrer Frage gewünscht.