método # 1
O Oneliner será executado na mesma janela que você deseja contar:
expr $( echo $( xprop -root | awk '/_NET_ACTIVE_WINDOW/ && /0x/ {print }' | xargs xwininfo -all -id | awk '/child/ || /children/ {print }' ) ) / 2
Aqui está o one-liner em ação e relata corretamente 5 abas abertas
Explicação:
O que eu notei sobre o gnome-terminal é que quando você executa xwininfo -all -id 0xXXXXXXX
(onde 0xXXXXX é o ID numérico dessa janela), ele relata 3 filhos para uma única janela, 5 filhos para uma janela com 2 guias, 7 crianças por 3 guias e assim por diante. Veja o padrão? Se você fizer a divisão inteira (isto é, obter apenas o número inteiro quando você divide as crianças por 2, você obtém o número de abas).
Então é isso que essa linha está basicamente fazendo expr $(stuff that gets number of children) / 2
Como obtenho o número de crianças? Eu procuro a saída de xprop -root
para a cadeia que tem id numérico da janela ativa, forneça esse ID numérico para xwindowinfo -all -id
como argumento e, em seguida, pesquise essa saída para o número de filhos.
Vantagem desse método? Dá o número exato de abas na janela que você executa. Desvantagem? só funciona no gnome-terminal, não funciona em sakura
método # 2 (bruto e não tão bom)
Existe outra maneira que encontrei, mas funciona apenas para uma janela. Se você executar who -a
, verá algo assim:
serg + pts/7 2015-04-11 08:47 00:02 17540 (:0)
serg + pts/2 2015-04-11 08:27 00:12 17540 (:0)
serg + pts/12 2015-04-11 08:50 00:08 17540 (:0)
serg + pts/13 2015-04-11 08:56 00:01 17540 (:0)
serg + pts/14 2015-04-11 08:58 . 17540 (:0)
Observe o sinal +? Sim, se você estiver em uma única janela, poderá executar esse comando na mesma janela who -a | grep "+" | wc -l
. Agora, Kenneth Stevenson mencionou corretamente que eles compartilham o mesmo pid e estão associados ao pseudo-terminal? Sim, todas as janelas fazem isso. Portanto, se você tiver outra janela aberta, esse método fornecerá um resultado incorreto.