如何知道任何窗口终端的当前选项卡(编号或位置)是什么?

如何知道任何窗口终端的当前选项卡(编号或位置)是什么?

ctrl对于 Ubuntu 和 Fedora,如果通过+ alt+打开窗口终端,t则可以通过shift+ ctrl+打开新选项卡t。假设存在一个带有 5 个选项卡的窗口终端。如果可能的话,通过alt+转到其中任何一个#(其中#可以是 1-5)...

现在,如果 Window 终端有更多选项卡,例如 9,10 ...

问题

  • 如何知道当前选项卡是什么?它的数量或位置。

它可以处理以下几种情况:

  • 如何知道稍后返回到哪里(假设当前选项卡是8,我们转到3,稍后需要它返回到8)。所以需要知道/得到 8。
  • 当前选项卡的下一个/上一个选项卡是什么(假设当前选项卡是 7,需要转到下一个选项卡 8)。所以需要知道/得到 7。

我尝试了该tty命令,但如果当前选项卡是 5,它会显示/dev/pts/4.如你看到的N-1。直到这里可以应用一个简单的数学....有时会显示预期的直接值,例如/dev/pts/5我不知道为什么会有这种差异。所以返回的值并不总是准确的。

更重要的是,如果在其他工作空间中存在其他带有一些选项卡的Window Terminal,如果执行命令tty,会出现一个随机数,通常是前一个Window Terminal的最高选项卡+ 1的延续。因此,如果第一个窗口终端中的第一个选项卡有 5 个选项卡,第二个窗口终端中的第一个选项卡则tty显示/dev/pts/5(N-1) 或 直接/dev/pts/6。但符合预期/dev/pts/1,因此如果打开新选项卡,相关性应从 1 开始。

观察考虑是否有任何选项卡被移动(拖放)到其他位置,“命令”应反映新的位置/编号

笔记即使这tty不是正确的命令,什么命令可以实现这个目标?

答案1

我假设您正在使用gnome-terminal,因为这是您在 Gnome 中使用的默认设置,Gnome 是这些平台上的默认桌面环境。 (可能是因为你会说如果你使用不同的终端模拟器!)

据我所知,没有这样的命令。在选项卡中执行的程序(在您的例子中,主要是 shell)对该选项卡知之甚少。它不是应该到!另外,“选项卡”和“虚拟控制台”(gnome 终端服务器,技术上可以用于在一个、多个或根本没有选项卡中显示某些 ptty)之间有一层间接层,所以,嗯,假设你总是在一个特定的选项卡中,这通常是行不通的。不过,它可能适用于您关心的情况。

您可以做的是使用$GNOME_TERMINAL_SCREEN环境变量来获取有关正在运行的终端模拟器会话的信息。它包含一个 dbus 路径,但就“快速”内省告诉我们,我们可以获得打开的选项卡列表,可以在选项卡中执行命令,但仅此而已。

因此,除了不存在这样的命令之外,看来您想要的东西是不可能的。


解决您想要解决的问题达到:

假设当前选项卡是8,我们转到3,稍后需要它返回到8

您可以手动设置选项卡的当前标题(右键单击选项卡的标题,“设置标题...”),以便您知道哪个在哪里

但老实说,这一切听起来就像您是一个“高级用户”,使用大量虚拟终端,并且gnome-terminal可能不是为您管理所有这些的工具。tmux可以有多个所谓的窗格可以一次显示,也可以有多个视窗(不要与 X11/wayland 意义上的窗口混淆)包含窗格,您可以根据自己的意愿重命名、移动、重新排序、打开、关闭……。所有这一切都发生在单个 gnome-terminal 实例中。

tmux当一个人来自图形世界时,这有点令人困惑(我猜,每个 1987 年之后出生的人),但它入门指南实际上是可以的,当你从上到下阅读时,不要试图跳到中间。您可以做一些聪明的事情,例如“嘿,我记得我正在其中运行一个窗格nvim,您可以在所有窗口中搜索该窗格吗?”。

或许可以尝试一下。安装 tmux,然后tmux在 gnome 终端中运行。迎接您的是正常的 shell 和一条奇怪的小状态线。

运行top以获得持续运行的系统负载监视器。因为我们想记住这是带有系统监视器的窗口,所以我们点击ctrl+ b,然后点击,。注意状态线!现在它要求我们为该窗口起一个新名称。我认为“系统监控”有效。由你决定。好吧,很好,似乎有键盘快捷键。我不记得很多键盘快捷键。所以我更喜欢 tmux 命令界面:按ctrl+ b,然后按:。您现在可以输入命令。我输入split -h,然后点击Enter(还有tab自动完成功能)。扎克,现在你有两个了窗格在你的窗口中(h顺便说一下,水平分割)。我想监视磁盘上的可用空间,因此在该新窗格中运行watch df -h.好的。

现在我想要一个新的 tmux“窗口”。我记得组合键,ctrl+ bcccreate)。我在其中运行我最喜欢的编辑器(在我的情况下,这将是,但在你的情况下,它nvim可能是,,,,,emacs......我不判断。)。 因为我想记住我在这里做了什么,所以我重命名了我的窗口。但这一次,我没有使用键盘快捷键(+ ),而是简单地运行什么的)。vimvinanoed
ctrlbtmux rename-window "config edit"

现在,我可以玩这个游戏一段时间,并在我的会话中拥有数百个窗口。状态栏列出了这些,但这真的有帮助吗?当然,使用ctrl+bf我现在可以搜索窗口,在我的编辑器变得缓慢之前,我开始给我奶奶写信,我检查了系统监视器,然后开始编辑一些配置文件......你明白了。


^dbus-send --session --print-reply --type=method_call --dest=org.gnome.Terminal "$GNOME_TERMINAL_SCREEN" org.freedesktop.DBus.Introspectable.Introspect

²dbus-send --session --print-reply --type=method_call --dest=org.gnome.Terminal /org/gnome/Terminal/screen org.freedesktop.DBus.Introspectable.Introspect

答案2

Konsole使用环境变量。我不知道其他终端模拟器。

#↳ set | grep -i kon
KONSOLE_DBUS_SERVICE=:1.955
KONSOLE_DBUS_SESSION=/Sessions/2
KONSOLE_DBUS_WINDOW=/Windows/1
KONSOLE_VERSION=221203

看起来您需要使用SESSION/WINDOW元组来标识唯一的窗口,并且session= 选项卡。

考虑tmux使用更强大的工具来执行此操作。

相关内容