答案1
一个 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
提示。
答案2
这个问题似乎在 Unix Stack Exchange 的帖子中得到了解答
防止子进程运行时关闭 urxvt 窗口。
我在下面整合了上述帖子中的两个答案。有两种可能的情况。
使用选项卡式扩展时
解决方案可以在 urxvt wordpress 文章中找到
注释掉 tabbedex 扩展中的一行可以防止 URxvt 窗口意外关闭:
在您的 tabbedex 扩展文件中找到以下代码。该文件可能位于 附近的某个位置
/usr/local/lib/urxvt/perl/tabbedex
,或您系统上的等效位置。这是要查找的 Perl 代码片段:
sub on_wm_delete_window { my ($self) = @_; $_->destroy for @{ $self->{tabs} }; 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
每次修改后运行。
Alt使用+F4或关闭按钮时,uxrvt 终端窗口现在不会关闭 。
命令exit
或Ctrl+D
仍将有效。