Perl

防止 urxvt 視窗在子程序執行時關閉

  • October 15, 2017

有時在終端中工作時,例如在使用 Vim 時,我不小心關閉了視窗而沒有正確保存我的工作。

gnome-terminal將在關閉除 shell 之外執行子程序的終端視窗之前顯示一個對話框。我想有一個類似的功能urxvt;如果有子程序執行時視窗只是拒絕關閉就足夠了。

是否有解決此問題的設置(或者可能是 Perl 外掛)?

和你有同樣的願望,所以我自己建立了一個擴展。我在編寫 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;
}

改編user1986653的答案:

只需將要安裝的腳本放置在/usr/lib/urxvt/perl/系統範圍內的可用性或~/.urxvt/ext/使用者專用的可用性中。讓我們呼叫文件close-gracefully並修改您的~/.Xresources~/.Xdefaults

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

不要忘記xrdb ~/[filename]在每次文件修改後執行。有關 和 之間的區別的討論,~/.Xresources~/.Xdefaults參見這個問題

引用自:https://unix.stackexchange.com/questions/310355