場合によっては、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 ボタンで閉じることはできません。exit
Command/Ctrl-D はまだ機能します。