有时,当在终端中工作时,例如使用 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 仍然有效。