하위 프로세스가 실행되는 동안 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 또는 닫기 버튼을 통해 닫을 수 없습니다. exitCommand/Ctrl-D는 여전히 작동합니다.

관련 정보