A razão pela qual um script de evento não envia uma mensagem "growler" é que mcabber
fecha a entrada padrão, saída e fluxos de erro quando executa uma comando de evento. Você pode ver isso em hooks.c
:
if ((pid=fork()) == -1) {
scr_LogPrint(LPRINT_LOGNORM, "Fork error, cannot launch external command.");
g_free(datafname);
return;
}
if (pid == 0) { // child
// Close standard file descriptors
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
if (execl(extcmd, extcmd, arg_type, arg_info, bjid, arg_data,
(char *)NULL) == -1) {
// scr_LogPrint(LPRINT_LOGNORM, "Cannot execute external command.");
exit(1);
}
}
g_free(datafname);
Isso faz com que o script de evento seja executado sem interferir nos fluxos usados por mcabber
.
Não há nenhum modo ncurses especial interceptando a mensagem (afinal, tmux
está já sendo executado como um aplicativo terminfo). Provavelmente, você pode contornar o problema redirecionando seu echo
(de preferência printf
) para /dev/tty
, por exemplo,
#!/bin/sh
printf '3Ptmux;33]9;foobar if ((pid=fork()) == -1) {
scr_LogPrint(LPRINT_LOGNORM, "Fork error, cannot launch external command.");
g_free(datafname);
return;
}
if (pid == 0) { // child
// Close standard file descriptors
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
if (execl(extcmd, extcmd, arg_type, arg_info, bjid, arg_data,
(char *)NULL) == -1) {
// scr_LogPrint(LPRINT_LOGNORM, "Cannot execute external command.");
exit(1);
}
}
g_free(datafname);
73\' >/dev/tty