防止 urxvt 窗口在子进程运行时关闭

防止 urxvt 窗口在子进程运行时关闭

有时,当在终端中工作时,例如使用 Vim 时,我会不小心关闭窗口而没有正确保存我的工作。

gnome-terminal将在关闭终端窗口之前显示一个对话框,该窗口在 shell 之外还运行着一个子进程。我希望有一个类似的功能urxvt;只要有子进程运行,窗口就拒绝关闭就足够了。

是否有一个设置(或者可能是 Perl 插件)解决这个问题?

答案1

和你有同样的愿望,所以我自己构建了一个扩展。我在编写 Perl 代码方面不是很有经验,但它非常简单。我们检查是否有与终端中运行的 shell 关联的子进程。如果是这样,铃声就会响起,事件就会被消耗。请注意,urxvt 响铃的行为取决于进一步的配置。

#!/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 ) {
        $self->scr_bell;
        return 1;
    } else {
        return 0;
    }
}

sub on_child_start {
    my($self, $pid) = @_;
    $self->{shell_pid} = $pid;
}

改编用户1986653的答案:

只需放置您想要安装的脚本/usr/lib/urxvt/perl/以供系统范围内使用或~/.urxvt/ext/仅供用户使用。让我们调用该文件close-gracefully并修改您的~/.Xresources~/.Xdefaults

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

不要忘记xrdb ~/[filename]在每次文件修改后运行。有关~/.Xresources和之间差异的讨论,~/.Xdefaults请参阅此问题

答案2

我正在使用选项卡式扩展,因此解决方案很简单 - 注释掉 on_wm_delete_window 例程中破坏选项卡的行看到这个

如果您不使用选项卡式扩展(我无法想象;-)),您可以使用弗洛伊德答案中的脚本。该脚本最简单的形式是

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

只需放置您想要安装的脚本/usr/lib/urxvt/perl/以供系统范围内使用或~/.urxvt/ext/仅供用户使用。让我们调用该文件close-prevent并修改您的~/.Xdefaults

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

不要忘记xrdb ~/.Xdefaults在每次文件修改后运行。

uxrvt 终端窗口无法通过 Alt-F4 或关闭按钮关闭。exit命令 / Ctrl-D 仍然有效。

相关内容