Angenommen, ich habe beispielsweise ein aktives Chrome-Fenster, in dem Google Mail irgendwo zwischen seinen Registerkarten geöffnet ist (aber nicht unbedingt die aktive Registerkarte).
Frage: Gibt es eine Möglichkeit, den Google Mail-Tab zu aktivieren? von der Befehlszeile aus?
Akzeptierte Antwort:
Ja. Ich mache es derzeit so:
1) Sie müssen jq installieren, um mit Tab-Daten herumzuspielen, die Sie erhalten, wenn Sie das Skript der aktuell geöffneten Tabs in Chromium aufrufen.
Außerdem müssen Sie chrome-remote-interface installieren, um die Arbeit zu erledigen Aktivierung der Tabs von Hintergrund -> Vordergrund von Chromium.
2) Chromium muss mit aktiviertem Remote-Debugging ausgeführt werden. Schließen Sie alle Chromium-Instanzen und führen Sie diesen Befehl statt nur chromium
aus im Terminal sonst funktioniert dieser Prozess nicht:
/usr/bin/chromium --remote-debugging-port=9222 &
3) Verwenden Sie dieses Basisskript als Beispiel und speichern Sie es als act
, chmod +x
es und legen Sie es im bin-Verzeichnis Ihres Benutzers ab. Ich verwende zum Beispiel ein Bash-Skript, es kann portiert werden, wenn Sie ein zsh-Benutzer sind:
#!/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 [email protected] ]]; 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
Navigieren Sie zu cnn.com und ein paar anderen Registerkarten und lassen Sie cnn.com im Hintergrund, wechseln Sie zum Terminal und probieren Sie den Befehl so aus:
act cnn
Es sollte das Chromium-Fenster aktivieren und zur Registerkarte cnn wechseln. Es steht Ihnen frei, dies weiter mit Ihrem rofi-Menü oder Ihrer fzf-Variante in Ihren Workflow zu integrieren und sogar die Liste der offenen Tabs in den globalen Pool aktiver Fenster einzufügen.