フォアグラウンドでプロセスが実行されている場合、ターミナルを閉じる前にurxvtにプロンプトを表示させることはできますか?
これは、たとえばのデフォルトの動作です。 gnome-terminal。
私はi3 これを処理するためにWM_DELETEプロトコルを使用します それが関連している場合は使用します。
Perlスクリプトがそのトリックを行いました。私はこれで終わった:
#!/usr/bin/Perl
sub on_wm_delete_window {
my ($self, $event) = @_;
my $CP = `ps --ppid $self->{Shell_pid} -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->{Shell_pid} = $pid;
}
それは私が望むことをします。 (これは この回答 の変更です)サブプロセスが実行されている場合、ユーザーはウィンドウを閉じることを確認するように求められます。
プロンプトにはzenity
が必要です。
この問題は、投稿のUnix StackExchangeで回答されているようです
子プロセスの実行中にurxvtウィンドウが閉じないようにする 。
上記の投稿からの2つの回答を以下にまとめます。考えられるケースは2つあります。
タブ付き拡張機能を使用する場合
解決策はurxvt wordpress articleにあります
tabbedex拡張機能の1行をコメントアウトすると、URxvtウィンドウが誤って閉じないようにすることができます :
Tabbedex拡張ファイルで次のコードを見つけます。このファイルは、おそらく
/usr/local/lib/urxvt/Perl/tabbedex
の近く、またはシステム上の同等の場所にあります。これは、探すべきPerlコードスニペットです。
sub on_wm_delete_window { my ($self) = @_; $_->destroy for @{ $self->{tabs} }; 1; }
以下に示すように、1行コメントアウトするだけです。
sub on_wm_delete_window { my ($self) = @_; # $_->destroy for @{ $self->{tabs} }; 1; }
タブ付き拡張機能を使用しない場合
次のスクリプトを使用します。そのファイル名はclose-prevent
です。
#!/usr/bin/Perl
sub on_wm_delete_window {
return 1;
}
スクリプトをシステム全体の可用性の場合は/usr/lib/urxvt/Perl/
に配置し、ユーザーのみの可用性の場合は~/.urxvt/ext/
に配置し、~/.Xdefaults
を変更します。
URxvt.Perl-ext-common: ...,close-prevent
変更するたびにxrdb ~/.Xdefaults
を実行します。
使用時にuxrvtターミナルウィンドウが閉じないようになりました Alt+F4 または閉じるボタン。exit
コマンドまたは Ctrl+D 引き続き機能します。