子プロセスの実行中にurxvtウィンドウが閉じないようにする

子プロセスの実行中にurxvtウィンドウが閉じないようにする

場合によっては、Vimを使用するなど、端末で作業しているときに作業内容を正しく保存せずに誤ってウィンドウを閉じることがあります。

gnome-terminalシェルの外部で実行されている子プロセスがある端末ウィンドウを閉じる前に、ダイアログボックスが表示されます。私は同様の機能を期待していましたurxvt。子プロセスが実行されている限り、ウィンドウを閉じることを拒否するだけで十分です。

この問題を解決する設定(またはPerlプラグイン)はありますか?

答え1

あなたと同じ欲求を持っていたので、私は直接拡張を構築しました。私はPerlコードを書く経験があまりありませんが、とても簡単です。端末で実行されているシェルに関連付けられているサブプロセスがあることを確認してください。その場合、ベルが鳴り、イベントが消滅します。 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を参照してください。質問

答え2

私はタブ拡張を使用しているので、解決策は簡単です。タブを分割する on_wm_delete_window ルーチンの行をコメントアウトします。これを見て

(想像できない;-))タブ拡張機能を使用していない場合は、Floydの回答にあるスクリプトを使用できます。最も単純な形式のスクリプトは次のとおりです。

#!/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 または Close ボタンで閉じることはできません。exitCommand/Ctrl-D はまだ機能します。

関連情報