关闭 urxvt 的提示

关闭 urxvt 的提示

当终端在前台运行时,我可以让 urxvt 在关闭终端之前提示我吗?

这是 gnome-terminal 等的默认行为。

我用的是i3使用 WM_DELETE 协议来处理此问题如果相关的话。

答案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 终端窗口现在不会关闭 。
命令exitCtrl+D 仍将有效。

相关内容