Obecnie uruchamiam mcabber jako mojego klienta Jabber (który używa ncurses) w sesji tmux na moim serwerze domowym. Lokalnie uruchamiam iTerm2 jako emulator terminala, który obsługuje wyzwalanie powiadomień warczących poprzez sekwencje specjalne znaków.
Uwaga: Wszystko echo
w tym pytaniu działa jak printf %b
, lub echo -e
w bash i GNU echo
.
np. echo "\e]9;foobar\007"
zmusza iTerm2 do wysłania wiadomości Growl z tekstem „foobar”.
Jednak podczas sesji tmux sekwencje ucieczki zostają pochłonięte. Dlatego przy użyciu zastrzeżonej sekwencji ucieczki znaków \Ptmux
można użyć w następujący sposób:
echo "\ePtmux;\e\e]9;foobar\007\e\\"
To uruchamia komunikat warczenia z sesji tmux.
Jednak gdy używam tego w skrypcie zdarzeń mcabber, który jest uruchamiany po otrzymaniu nowej wiadomości, żadne powiadomienie nie jest wyzwalane, tak jakby echo zostało wysłane do niewłaściwego terminala.
Przypuszczam, że ma to związek z tym mcabber, który uruchamia skrypt, jest aplikacją ncurses, więc dane wyjściowe z mojego normalnego skryptu bash giną, a iTerm 2 nigdy tego nie widzi.
Próbowałem też zadzwonić do smcup bez powodzenia, zanim powtórzyłem dostęp do niektórych odkrytych pomysłów
tput smcup
echo "\ePtmux;\e\e]9;$FROM: $MSG\007\e\\"
tput rmcup
Przypuszczam, że to nie działa, ponieważ problemem nie jest powrót do „prawdziwego okna terminala”, ale bardziej ukierunkowanie wyjścia w oknie ncurses.
Jakieś pomysły na ten temat?