Impede que a janela do urxvt feche quando um processo filho está em execução

2

Às vezes, quando se trabalha em um terminal, por exemplo Ao usar o Vim, eu acidentalmente fecho a janela sem salvar meu trabalho corretamente.

gnome-terminal mostrará uma caixa de diálogo antes de fechar uma janela de terminal que tenha um subprocesso em execução além do shell. Gostaria de ter um recurso semelhante com urxvt ; bastaria que a janela simplesmente se recusasse a fechar sempre que houvesse subprocessos em execução.

Existe uma configuração (ou talvez um plugin Perl) abordando isso?

    
por Fabian Knorr 16.09.2016 / 15:40

2 respostas

2

Tive o mesmo desejo que você, então eu mesmo construí uma extensão. Eu não sou muito experiente em escrever código Perl, mas é bastante simples. Verificamos se há processos filhos associados ao shell em execução no terminal. Se assim for o sino é tocado e o evento consumido. Esteja ciente de que o comportamento do urxvt de tocar a campainha depende de outras configurações.

#!/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;
}

Adaptando a resposta de user1986653:

Basta colocar os scripts que você deseja instalar em /usr/lib/urxvt/perl/ para disponibilidade em todo o sistema ou em ~/.urxvt/ext/ para disponibilidade somente do usuário. Vamos chamar o arquivo close-gracefully e modificar seu ~/.Xresources ou ~/.Xdefaults

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

Não se esqueça de executar xrdb ~/[filename] após cada modificação de arquivo. Para uma discussão sobre a diferença entre ~/.Xresources e ~/.Xdefaults , consulte esta pergunta .

    
por 12.10.2017 / 23:36
1

Estou usando a extensão com guias, portanto a solução é simples - comente a linha destruindo as guias na rotina on_wm_delete_window veja isso .

Se você não usar a extensão tabulada (não consigo imaginar ;-)), você pode usar o script da resposta do Floyd. A forma mais simples do script é

   
#!/usr/bin/perl  
sub on_wm_delete_window {
    return 1;
}

Basta colocar os scripts que você deseja instalar em /usr/lib/urxvt/perl/ para disponibilidade em todo o sistema ou em ~/.urxvt/ext/ para disponibilidade somente do usuário. Vamos chamar o arquivo close-prevent e modificar seu ~/.Xdefaults

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

Não se esqueça de executar xrdb ~/.Xdefaults após cada modificação de arquivo.

A janela do terminal uxrvt não é possível fechar por Alt-F4 ou pelo botão fechar. exit command / Ctrl-D ainda funciona.

    
por 13.10.2017 / 07:57

Tags