Eingabeaufforderung für urxvt schließen

434
fredefox

Kann ich vor dem Schließen eines Terminals von urxvt zur Bestätigung aufgefordert werden, wenn ein Prozess im Vordergrund ausgeführt wird?

Dies ist das Standardverhalten für z. B. gnome-terminal.

Ich verwende i3 , das das WM_DELETE-Protokoll verwendet, um dies zu behandeln, falls dies relevant ist.

4

2 Antworten auf die Frage

2
fredefox

Ein Perl-Skript hat es geschafft. Ich endete damit:

#!/usr/bin/perl  sub on_wm_delete_window { my ($self, $event) = @_; my $CP = `ps --ppid $self-> -o pid= | wc -l`; chomp $CP; if ( $CP != 0 ) { return system("zenity --question --title 'Close window' --text 'Subprocess is running. Really close?'") } else { return 0; } }  sub on_child_start { my($self, $pid) = @_; $self-> = $pid; } 

Was macht was ich will. ( Dies ist eine Änderung dieser Antwort. ) Wenn ein Unterprozess ausgeführt wird, wird der Benutzer aufgefordert, zu bestätigen, dass er das Fenster schließen möchte.

Erfordert zenitydie Aufforderung.

War es mein Link, der Sie auf diesen Beitrag verwies? harrymc vor 5 Jahren 0
Ja, ich habe die Lösung gefunden. fredefox vor 5 Jahren 0
0
harrymc

Dieses Problem scheint auf Unix Stack Exchange im
nachhinein behoben zu sein. Das Schließen des urxvt-Fensters wird verhindert, wenn ein untergeordneter Prozess ausgeführt wird .

Ich konsolidiere unten die beiden Antworten aus dem obigen Beitrag. Es sind zwei Fälle möglich.

Bei Verwendung der Tabbed-Erweiterung

Die Lösung finden Sie im Artikel urxvt wordpress. Wenn Sie
eine Zeile in der Tabbedex-Erweiterung auskommentieren, kann dies verhindern, dass Ihre URxvt-Fenster versehentlich geschlossen werden :

Suchen Sie den folgenden Code in Ihrer Tabbedex-Erweiterungsdatei. Die Datei befindet sich wahrscheinlich in der Nähe /usr/local/lib/urxvt/perl/tabbedexoder auf Ihrem System.

Nach diesem Perl-Codeausschnitt suchen:

sub on_wm_delete_window { my ($self) = @_; $_->destroy for @{ $self-> }; 1; } 

Sie müssen lediglich eine Zeile auskommentieren, wie unten gezeigt.

sub on_wm_delete_window { my ($self) = @_; # $_->destroy for @{ $self-> }; 1; } 

Wenn Sie nicht die Tabbed-Erweiterung verwenden

Verwenden Sie das folgende Skript, dessen Dateiname beispielsweise lautet close-prevent:

#!/usr/bin/perl  sub on_wm_delete_window { return 1; } 

Platzieren Sie das Skript /usr/lib/urxvt/perl/für die systemweite Verfügbarkeit oder ~/.urxvt/ext/für die Verfügbarkeit nur für Benutzer und ändern Sie Folgendes ~/.Xdefaults:

URxvt.perl-ext-common: ...,close-prevent 

Führen Sie xrdb ~/.Xdefaultsnach jeder Änderung.

Das uxrvt-Terminalfenster wird jetzt nicht geschlossen, wenn Sie Alt+ F4oder die Schließen-Schaltfläche verwenden.
Der exitBefehl oder Ctrl+ D funktioniert weiterhin.