Использование xdotool для подсчета количества вкладок в gnome-терминале
Я пытаюсь найти способ определить количество открытых вкладок в окне терминала gnome. В настоящее время лучшим вариантом кажется xdotool
, Я могу перейти к следующей вкладке, используя
xdotool key ctrl+Page_Down
единственная проблема - если открыта только одна вкладка. Затем вышеприведенная команда выводит мусор в окно терминала. Мусор эти три персонажа ;5~
(что, вероятно, является символьным представлением для Ctrl+Page_Down).
Как я могу избежать xdotool
или же gnome-terminal
из вывода этих трех символов?
(Не по теме: я также хотел бы знать, если кто-нибудь знает, есть ли другие способы определить количество открытых вкладок в окне терминала gnome)
2 ответа
Из оболочки в терминале вы можете рассчитывать вкладки на что-то вроде этого может работать
ps -h --ppid `ps -ho ppid $$` | grep pts | wc -l
Вкладки имеют общий родительский процесс и будут связаны с псевдо-терминалом (pts). Переменная $$ содержит идентификатор процесса вызывающей оболочки. Ключ -h указывает 'ps' подавить строку заголовка по умолчанию, а ключ -o указывает ему использовать пользовательский формат для возврата только идентификатора родительского процесса. Обратные пометки говорят, возвращают значение этой команды. Таким образом, вывод обратных ссылок будет числовым идентификатором процесса родителя текущей оболочки. Переданный в 'ps' с ключом --ppid возвращает все процессы с этим родителем. Фильтруйте с помощью grep для связи TTY и подсчета строк.
метод № 1
Oneliner будет выполняться в том же окне, в котором вы хотите считать:
expr $( echo $( xprop -root | awk '/_NET_ACTIVE_WINDOW/ && /0x/ {print $5}' | xargs xwininfo -all -id | awk '/child/ || /children/ {print $1}' ) ) / 2
Вот один вкладыш в действии и правильно сообщает 5 открытых вкладок
Объяснение:
Что я заметил в gnome-terminal, так это то, что когда вы запускаете xwininfo -all -id 0xXXXXXXX
(где 0xXXXXX - это числовой идентификатор этого окна), он сообщает о 3 дочерних элементах для одного окна, 5 дочерних для окна с 2 вкладками, 7 дочерних элементов для 3 вкладок и т. д. Видите образец? Если вы делите целочисленное деление (т. Е. Получите только целое число, когда вы делите детей на 2, вы получите количество вкладок).
Так вот что в основном делает эта линия expr $(stuff that gets number of children) / 2
Как мне узнать количество детей? Я ищу вывод xprop -root
для строки с числовым идентификатором активного окна присвойте этот числовой идентификатор xwindowinfo -all -id
в качестве аргумента, а затем найдите в выходных данных количество детей.
Преимущество этого метода? Дает точное количество вкладок в окне, которое вы запускаете. Недостаток? работает только в гном-терминале, не работает в сакуре
метод № 2 (грубый и не такой хороший)
Я нашел другой способ, но он работает только для одного окна. Если вы бежите who -a
вы увидите что-то вроде этого:
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)
Обратите внимание на знак +? Да, если вы находитесь в одном окне, то вы можете запустить эту команду в том же окне who -a | grep "+" | wc -l
, Теперь, Кеннет Стивенсон правильно упомянул, что они используют один и тот же pid и связаны с псевдотерминалом? Да, все окна делают это. Поэтому, если у вас открыто другое окно, этот метод даст вам неверный результат.