【问题标题】:Identify gnome-terminal window by tab title通过选项卡标题识别 gnome-terminal 窗口
【发布时间】:2019-04-01 12:08:49
【问题描述】:

假设如下:

  • 我打开了多个 gnome 终端窗口
  • 每个窗口都有多个打开的选项卡

我知道我在 vim 的某个地方打开了文件“.bashrc”。所以一个标签 标题“.bashrc (~) - VIM”位于 gnome-terminal 窗口之一中。此选项卡 可能是也可能不是窗口中的活动选项卡。

有什么方法可以识别 gnome-terminal 窗口,它包含该选项卡 并切换到它(最好激活选项卡)?

更笼统的:

有没有办法通过其中一个标签的标题来识别和激活 gnome 终端窗口?

或:

有没有办法通过 当前在其选项卡中执行的程序?

【问题讨论】:

  • 您想从终端执行此操作吗?
  • @kvantour 终端或者一些 gnome3 扩展。我想我也许可以从 d-bus 获得这样的信息,然后推出我自己的解决方案。我用d-feet 调查但没有成功。

标签: gnome-terminal


【解决方案1】:

重新审视这个问题,我找到了一个解决方案(或破解)来获得我想要的东西。 Gnome 终端实现了org.gnome.Shell.SearchProvider2 dbus 接口。此界面可用于搜索与给定术语匹配的终端选项卡。通过使用空字符串作为搜索词,匹配所有终端选项卡并返回 id。有了这个 id,就可以获得标签的名称(也就是标题)。

我编写了以下脚本来收集信息并使用 fzf 来选择我正在寻找的选项卡。比此选项卡已激活。

#!/bin/bash

# get UUIDs of all gnome-terminal tabs
get_term_ids()
{
    # Call search with empty string ... will match all
    dbus-send --session --dest=org.gnome.Terminal --print-reply=literal \
        /org/gnome/Terminal/SearchProvider \
        org.gnome.Shell.SearchProvider2.GetInitialResultSet \
        array:string:"" \
        | tail -n 1 | sed 's/^  *//;s/ *]$//;s/  */,/g'
}

# get "uuid term-title" list
get_term_titles()
{
    ids="$(get_term_ids)"
    dbus-send --session --dest=org.gnome.Terminal  --print-reply=literal \
        /org/gnome/Terminal/SearchProvider \
        org.gnome.Shell.SearchProvider2.GetResultMetas \
        array:string:${ids%,} \
        | grep '^ *\(id\|name\) ' \
        | sed -e '/^  *id /{N;s/^ *id  *variant *\([^ ]*\) *)\n/\1/}' \
        -e 's/  *name  *variant  */ /;s/  *)$//'
}

# activate a term identified via uuid
activate_term()
{
    dbus-send --session  --dest=org.gnome.Terminal  --print-reply \
        /org/gnome/Terminal/SearchProvider \
        org.gnome.Shell.SearchProvider2.ActivateResult \
        string:$1 array:string:'' uint32:0 >/dev/null
}

result="$(get_term_titles | fzf --with-nth 2..)"
if [ -z "$result" ]; then
    exit 1
fi

activate_term "${result%% *}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2013-10-29
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多