4

Могу ли я получить urxvt для запроса перед закрытием терминала, когда на переднем плане запущен процесс?

Это поведение по умолчанию, например, для gnome-терминала.

Я использую i3, который использует протокол WM_DELETE для обработки этого, если это актуально.

2 ответа2

2

Скрипт Perl добился цели. Я закончил с этим:

#!/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 ) {
        return system("zenity --question --title 'Close window' --text 'Subprocess is running. Really close?'")
    } else {
        return 0;
    }
}

sub on_child_start {
    my($self, $pid) = @_;
    $self->{shell_pid} = $pid;
}

Который делает то, что я хочу. (Это модификация этого ответа) Если запущен подпроцесс, пользователю предлагается подтвердить, что он хочет закрыть окно.

Требуется zenity для быстрого.

0

Эта проблема, кажется, решена на Unix Stack Exchange в посте.
Запретить закрытие окна urxvt при запуске дочернего процесса.

Ниже я приведу два ответа из вышеприведенного поста. Возможны два случая.

При использовании расширения с вкладками

Решение найдено в статье WordPress urxvt
Закомментирование одной строки в расширении tabbedex может предотвратить случайное закрытие окон URxvt:

Найдите следующий код в вашем файле расширения tabbedex. Файл, вероятно, находится где-то рядом с /usr/local/lib/urxvt/perl/tabbedex или аналогичным в вашей системе.

Это фрагмент кода Perl для поиска:

sub on_wm_delete_window {
my ($self) = @_;
$_->destroy for @{ $self->{tabs} };
1;
}

Все, что вам нужно сделать, это закомментировать одну строку, как показано ниже.

sub on_wm_delete_window {
my ($self) = @_;
# $_->destroy for @{ $self->{tabs} };
1;
}

Когда не используется расширение с вкладками

Используйте следующий скрипт, чье имя файла, скажем, close-prevent:

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

Поместите скрипт в /usr/lib/urxvt/perl/ для общесистемной доступности или в ~/.urxvt/ext/ для доступности только для пользователя и измените ~/.Xdefaults:

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

Запустите xrdb ~/.Xdefaults после каждой модификации.

Окно терминала uxrvt теперь не будет закрываться при использовании Alt+F4 или кнопки закрытия.
Команда exit или Ctrl+D все равно будут работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .