使用 xdotool 计算 gnome-terminal 中的标签数量

使用 xdotool 计算 gnome-terminal 中的标签数量

我正在尝试找到一种方法来确定 gnome-terminal 窗口中打开的选项卡数量。目前,最好的选择似乎是xdotool。我可以使用

xdotool key ctrl+Page_Down

唯一的问题是如果只打开了一个选项卡。那么上面的命令会将垃圾输出到终端窗口中。垃圾是这三个字符;5~(这可能是 Ctrl+Page_Down 的字符表示)。

我怎样才能避免xdotoolgnome-terminal不输出这三个字符?(题外话:我还想知道是否有人知道是否还有其他方法可以确定 gnome-terminal 窗口中打开的选项卡的数量)

答案1

如果你想在终端的 shell 中计算标签的数量,可以这样做

ps -h --ppid `ps -ho ppid $$` | grep pts | wc -l

这些选项卡共享一个共同的父进程,并将与伪终端 (pts) 相关联。$$ 变量包含调用 shell 的进程 ID。-h 开关告诉“ps”隐藏默认标题行,-o 开关告诉它使用自定义格式仅返回父进程 ID。反引号表示返回此命令的值。因此,反引号的输出将是当前 shell 父进程的数字进程 ID。使用 --ppid 开关传递给“ps”将返回具有该父进程的所有进程。使用 grep 过滤 TTY 关联并计数行。

答案2

方法 #1

要在您想要计数的同一窗口中执行的一行代码:

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 是该窗口的数字 ID),它会报告单个窗口有 3 个子窗口,有 2 个选项卡的窗口有 5 个子窗口,有 3 个选项卡的窗口有 7 个子窗口,依此类推。看到模式了吗?如果您进行整数除法(即,只有当您将子窗口除以 2 时才会得到整数,您就会得到选项卡的数量)。

这就是这条线的作用expr $(stuff that gets number of children) / 2

我如何获得子项的数量?我在xprop -root输出中搜索具有活动窗口数字 ID 的字符串,将该数字 ID 作为xwindowinfo -all -id参数,然后在输出中搜索子项的数量。

此方法的优点?提供运行它的窗口中的确切选项卡数。缺点?仅适用于 gnome-terminal,不适用于 sakura

方法 #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。现在,Kenneth Stevenson 正确地提到它们共享相同的 pid 并与伪终端相关联?是的,所有窗口都这样做。因此,如果您打开了另一个窗口,此方法将给出错误的结果。

相关内容