按选项卡标题识别 gnome-terminal window
Identify gnome-terminal window by tab title
假设如下:
- 我有多个 gnome-terminal windows 打开
- 每个 window 都打开了多个标签页
我知道我在 vim 某处打开了文件“.bashrc”。所以一个选项卡
标题“.bashrc(~) - VIM”在gnome-terminalwindows之一中。这个选项卡
window.
中可能是也可能不是活动选项卡
有什么方法可以识别 gnome-terminal window,它持有那个标签
并切换到它(最好激活选项卡)?
更一般:
有什么方法可以通过其中一个标签的标题来识别和激活 gnome-terminal window?
或:
有什么方法可以识别和激活 gnome-terminal window
当前在其选项卡中执行的程序?
重新审视这个问题,我找到了一个解决方案(或 hack)来获得我想要的。
Gnome 终端实现了 org.gnome.Shell.SearchProvider2
dbus 接口。此界面可用于搜索与给定术语匹配的终端选项卡。通过使用空字符串作为搜索词,匹配所有终端选项卡并返回 ID。使用此 ID 可以获取选项卡的名称(又名标题)。
我编写了以下脚本来收集信息并使用 fzf select 我正在寻找的选项卡。比这个标签被激活。
#!/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//}' \
-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: array:string:'' uint32:0 >/dev/null
}
result="$(get_term_titles | fzf --with-nth 2..)"
if [ -z "$result" ]; then
exit 1
fi
activate_term "${result%% *}"
假设如下:
- 我有多个 gnome-terminal windows 打开
- 每个 window 都打开了多个标签页
我知道我在 vim 某处打开了文件“.bashrc”。所以一个选项卡 标题“.bashrc(~) - VIM”在gnome-terminalwindows之一中。这个选项卡 window.
中可能是也可能不是活动选项卡有什么方法可以识别 gnome-terminal window,它持有那个标签 并切换到它(最好激活选项卡)?
更一般:
有什么方法可以通过其中一个标签的标题来识别和激活 gnome-terminal window?
或:
有什么方法可以识别和激活 gnome-terminal window 当前在其选项卡中执行的程序?
重新审视这个问题,我找到了一个解决方案(或 hack)来获得我想要的。
Gnome 终端实现了 org.gnome.Shell.SearchProvider2
dbus 接口。此界面可用于搜索与给定术语匹配的终端选项卡。通过使用空字符串作为搜索词,匹配所有终端选项卡并返回 ID。使用此 ID 可以获取选项卡的名称(又名标题)。
我编写了以下脚本来收集信息并使用 fzf select 我正在寻找的选项卡。比这个标签被激活。
#!/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//}' \
-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: array:string:'' uint32:0 >/dev/null
}
result="$(get_term_titles | fzf --with-nth 2..)"
if [ -z "$result" ]; then
exit 1
fi
activate_term "${result%% *}"