Por que o seguinte script osd_cat falha?

2

Estou escrevendo um utilitário osd_cat -based simples para exibir mensagens recebidas através do libpurple (via Finch ou Pidgin, por exemplo).

A partir de agora, é isso que consegui criar:

dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | awk '/string/ && (NR%2==1) {split($0, sender, "\"") }; /string/ && (NR%2==0) {print sender[2] ": " substr($0,11) }' | osd_cat --pos=top --align=right --indent=8 -O 4 -u white

Ou divida em várias linhas para aumentar o prazer da leitura:

dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg"
 | awk '/string/ && (NR%2==1) {split($0, sender, "\"") };
        /string/ && (NR%2==0) {print sender[2] ": " substr($0,11) }'
 | osd_cat --pos=top --align=right --indent=8 -O 4 -u white

Eu fiz algumas experiências e encontrei os seguintes para trabalhar:

yes | osd_cat
echo "text" | osd_cat
dbus-monitor | osd_cat
dbus-monitor | awk '{print $0}' | osd_cat
dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | osd_cat

Mas seguir não funciona:

dbus-monitor | awk '{print $1 $2}' | osd_cat
dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | awk '{print $0}' |osd_cat

Estou completamente perdido.

    
por Llamageddon 01.12.2011 / 20:44

1 resposta

1

Pergunta antiga, mas para googlers:

Eu estava tendo problemas semelhantes, mas em uma escala muito mais simples. Eu estava simplesmente tentando fazer

echo "Some string\nWith a bunch of chars" | osd_cat

O que eu descobri é que o osd_cat parece ter alguns problemas com a detecção atrasada da disponibilidade do mecanismo do OSD ou com problemas de buffer de entrada.

Se a string de entrada for muito longa (varia entre 7 e 11 caracteres imprimíveis no meu sistema), ela será interrompida pelo tempo de atraso e, em seguida, será encerrada sem mostrar nada.

Meus problemas desapareceram se eu usasse a opção --wait para osd_cat.
O efeito colateral, no entanto, é que pode levar mais de 5 segundos para a mensagem aparecer (no meu sistema). Quaisquer tempos de atraso que você especificar para osd_cat só serão iniciados quando a mensagem estiver visível pelo menos, mas isso pode significar que uma mensagem destinada a ser exibida pelos 5 segundos padrão demorará 5 segundos a aparecer e ficará visível por mais 5 antes de desaparecer.

Em uma nota relacionada, isso parece ser um problema com todas as ferramentas criadas sobre osd_cat, e nenhuma delas é responsável por isso. A lista dessas ferramentas do autor original está em sua página (conforme listado na página man do osd_cat) em: link
Isso inclui o mais comum osdsh , que é o que eu estava tentando encontrar uma alternativa, já que ele mostrava intermitentemente nada na invocação, quando eu encontrava osd_cat .

    
por 12.10.2017 / 02:17