假设如下:
我知道我在vim的某个地方打开了".bashrc“文件。因此,在gnome终端窗口中有一个标题为".bashrc (~) - VIM“的选项卡。此选项卡可能是窗口中的活动选项卡,也可能不是活动选项卡。
是否有任何方法来识别gnome终端窗口,该窗口持有该选项卡并切换到它(最好激活选项卡)?
更一般的:
有什么方法可以通过其中一个标签的标题来识别和激活gnome终端窗口吗?
或者:
是否有任何方法来识别和激活gnome终端窗口,通过当前在其选项卡上执行的程序?
发布于 2021-06-13 08:55:42
重新审视这个问题,我找到了一个解决方案(或黑客)来得到我想要的东西。Gnome终端实现了org.gnome.Shell.SearchProvider2总线接口。此接口可用于搜索与给定项匹配的终端选项卡。通过使用空字符串作为搜索项,将匹配所有终端选项卡并返回ids。有了这个it,就可以获得标签的名称(又名)。
我黑了下面的脚本来收集信息,并使用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%% *}"https://stackoverflow.com/questions/53030612
复制相似问题