例如,假设我有一个处于活动状态的 Chrome 窗口,并且在其选项卡中的某处打开了 Gmail(但不一定是活动选项卡)。
问题:有没有办法激活Gmail 标签从命令行?
答案1
是的。我目前这样做:
1)你需要安装杰克为了搞乱选项卡数据,当调用 Chromium 中当前打开的选项卡的脚本时,您会得到反馈。你还需要安装chrome 远程接口完成从 Chromium 的后台 -> 前台激活选项卡的工作。
2)
chromium 需要在打开远程调试的情况下运行。关闭 chromium 的所有实例,并运行此命令而不是仅chromium
在终端中运行,否则此过程将不起作用:
/usr/bin/chromium --remote-debugging-port=9222 &
3)使用此基本脚本作为示例,并将其另存为act
, chmod +x
it 并将其放置在用户的 bin 目录中。例如,我使用 bash 脚本,如果您是 zsh 用户,则可以将其移植过来:
#!/usr/bin/env bash
TABS_JSON=$(chrome-remote-interface list | sed -e "s/^'//" -e "s/'$//" | jq -r 'map(select(.type == "page") | {id: .id, title: .title})')
if [[ -z $@ ]]; then
TAB_NAMES=$(echo "$TABS_JSON" | jq -r 'map(.title) | .[]')
echo "$TAB_NAMES"
else
TAB=$*
TAB_ID=$(echo "$TABS_JSON" | jq -r "map(select(.title | match(\"${TAB}\";\"i\")) | .id) | .[]")
chrome-remote-interface activate "$TAB_ID" >/dev/null
#you might need wmctrl if window does not activate.
#wmctrl -a chromium
fi
导航到 cnn.com 和其他几个选项卡,并将 cnn.com 保留在后台,切换到终端并尝试如下命令:
act cnn
它应该激活 chromium 窗口并切换到 cnn 选项卡。您可以自由地将其与工作流程中的 rofi 菜单或 fzf 变体进一步集成,甚至将打开的选项卡列表放入活动窗口的全局池中。
答案2
以下脚本对我有用,但它要求您只有一个 Chrome 窗口,并且该窗口处于活动状态。调整或改进它应该很容易。
WINID=$(xdotool search --name 'Google Chrome' | head -n 1)
WINID_HEX=$(printf "0x%x" $WINID)
while true
do
xwininfo -id $WINID_HEX | grep Gmail
if [ "$?" -ne 0 ]
then
xdotool key --window $WINID ctrl+Tab
else
break
fi
sleep 2
done
可能还有很多其他方法可以做到这一点:
- 使用Chromium并修改其源代码
- 为 Chrome 编写一个扩展,在满足特定条件时切换到正确的选项卡
- 使用xmacro等工具
- ETC。
答案3
我调整了杰弗里的回答一下,因为它对我不起作用。
wmctrl -lx
用于获取所有窗口及其标题。当前选项卡标题位于窗口选项卡名称内。wmctrl -ia
用于激活 chrome 窗口
这是结果,
function ctab() {
# Activate the chrome window
wmctrl -ia "$(wmctrl -lx | grep google-chrome | awk '{ print $1}')"
# Create a while loop that continues until it finds the correct tab.
# Note that this will go on forever if the tab is not found
while true; do
# Check the current windows title (which includes the tab title)
result="$(wmctrl -lx | grep google-chrome | grep "@gmail.com")"
# if the title contains @gmail then exit
[ -n "$result" ] && break
# If it is the incorrect title then change to the next tab
WINID=$(xdotool search --name 'Google Chrome' | head -n 1)
xdotool key --window $WINID ctrl+Tab
done
}
答案4
这个 Perl 代码对我有用:例如,findTab.pl Chrome Gmail
.它使屏幕翻转一堆,并且可以更改其他窗口中的选项卡(它会检查 12 次,理论上,如果没有找到任何内容,只要窗口中有 <5 个选项卡,这应该将您的窗口保留在原始选项卡上)窗户)。
windowactivate
如果你以前没有使用过,它在我的 Ubuntu 系统上不起作用key
;与非常古老的安全协议有关。
我认为没有任何保证什么它将查找是否有不止一件东西需要查找;根据其他 xdotool 的经验,我怀疑重复使用时可能会发现不同的东西。
对于这个脚本来说,perl 可能不是一个好的选择,但我不知道 bash。
#! /usr/bin/perl
## findTab.pl
## usage findTab appName tabName
use strict;
my $maxTabs=12;
my ($app, $tab) = @ARGV;
my @wins = split /\s+/, `xdotool search --desktop 0 --name $app`;
foreach my $win (@wins){
my $title;
for (my $i=0;$i<$maxTabs;$i++){
system ("xdotool windowactivate $win");
$title = `xwininfo -id $win | grep $tab`;
last if $title;
system("xdotool key --window $win ctrl+Page_Down");
}
last if $title;
}