Aktive Browser-Registerkarte über die Befehlszeile aktualisieren / neu laden?


28

Ich versuche, eine benutzerdefinierte Toolchain einzurichten, bei der der Browser (Firefox oder vorzugsweise Chrome) oft / häufig / ständig gezwungen ist, über die Befehlszeile zu aktualisieren.

(Die Idee ist, die visuellen Änderungen in der HTML- / Web-App, die ich gerade bearbeite, sofort in einem benachbarten Emacs-Frame zu sehen - ohne dass Sie ständig zum Browser wechseln müssen, um eine manuelle Aktualisierung durchzuführen.)

Das nächste, was ich bisher gesehen habe, ist zu rennen google-chrome FILE_PATH. Dies öffnet jedoch jedes Mal eine neue Registerkarte.

Gibt es noch andere Ansätze?


1
Ich würde versuchen, etwas wie Auto Reload zu starten .
Handarbeit

Ah, danke dafür. Ich dachte zuerst, dies sei ein No-Go, da es sich nur um einen Mac handelt, aber es sieht so aus, als gäbe es eine weitere Plattform unter github.com/guard/guard-livereload
thomanil

Firefox kann anscheinend ferngesteuert werden , aber ich konnte es nicht zum Laufen bringen. Vielleicht hast du besseres Glück.
Amenthes

Antworten:


13

Etwas zum Spielen

Es verwendet xdotool , mit dem Sie Windows- / Desktop-Aktionen skripten können. Wenn Sie den Namen des Browsers als Argument angeben, wird die aktuelle Seite gefunden und erneut geladen. Sie können einen Standardbrowser festlegen, sodass Sie nicht jedes Mal einen angeben müssen, und Sie können ändern, ob Sie STRG-R zum erneuten Laden oder UMSCHALT-STRG-R zum erneuten Laden ohne Cache senden.

Es sollte zu Ihrem Browser wechseln, die Seite neu laden und dann zu dem Fenster zurückkehren, aus dem Sie dies aufgerufen haben. Ich benutze dies oft, indem ich den Browser in den Hintergrund stelle und das Editor-Fenster auf "ON-TOP" setze, damit es immer sichtbar ist. Wenn Sie dieses Skript drücken oder es von Ihrem Editor aufrufen, wird Ihr Fokus wiederhergestellt, wenn es fertig ist.

Ich bin ein VIM-Benutzer und konnte feststellen, dass bei jedem Schreiben einer bestimmten Datei ein Autobefehl zum automatischen Auslösen dieses Skripts erstellt wurde, sodass der Browser bei Bedarf aktualisiert wird. Ich weiß, dass Sie dasselbe tun können.

#!/bin/bash
#
# L Nix <lornix@lornix.com>
# reload browser window
#
# whether to use SHIFT+CTRL+R to force reload without cache
RELOAD_KEYS="CTRL+R"
#RELOAD_KEYS="SHIFT+CTRL+R"
#
# set to whatever's given as argument
BROWSER=$1
#
# if was empty, default set to name of browser, firefox/chrome/opera/etc..
if [ -z "${BROWSER}" ]; then
    BROWSER=firefox
fi
#
# get which window is active right now
MYWINDOW=$(xdotool getactivewindow)
#
# bring up the browser
xdotool search --name ${BROWSER} windowactivate --sync
# send the page-reload keys (C-R) or (S-C-R)
xdotool search --name ${BROWSER} key --clearmodifiers ${RELOAD_KEYS}
#
# sometimes the focus doesn't work, so follow up with activate
xdotool windowfocus --sync ${MYWINDOW}
xdotool windowactivate --sync ${MYWINDOW}
#

+1 Cooles Zeug! Beachten Sie, dass der --nameParameter mit der Zeichenfolge übereinstimmt, die in der Fenstertitelleiste angezeigt wird, sodass er möglicherweise nicht immer den Namen des Browsers enthält, wie in diesem Beispiel.
Rebus

@rebus was ist mit --class oder --classname?
Aquarius Power

6

Die Antwort von @ lornix hat bei mir nicht ganz funktioniert (ich weiß nicht warum, möglicherweise lässt mein Fenstermanager xdotool nicht zwischen Fenstern wechseln). Ich habe eine modifizierte Version geschrieben, die robuster sein sollte:

  1. Tut nicht den unnötigen Wechsel zwischen Fenstern
  2. Beschränkt sich auf sichtbare Fenster
  3. Aktualisiert alle sichtbaren Fenster

(Außerdem wird F5 anstelle von Strg-R verwendet, aber das liegt nur daran, dass ich Strg-R an etwas anderes gebunden habe.)

#!/bin/bash

set -o errexit
set -o nounset

keystroke="CTRL+F5"

# set to whatever's given as argument, defaults to firefox
BROWSER="${1:-firefox}"

# find all visible browser windows
browser_windows="$(xdotool search --sync --all --onlyvisible --name ${BROWSER})"

# Send keystroke
for bw in $browser_windows; do
    xdotool key --window "$bw" "$keystroke"
done

Ich sollte hinzufügen, dass dies nicht mit Chrom zu funktionieren scheint, und ich habe absolut keine Ahnung warum.
Dshepherd

Ich liebe es, ein gut geschriebenes Bash-Skript zu sehen! Übrigens funktioniert Chrom, wenn Sie den Fensterfokus vor der Taste verwenden . Natürlich müssen Sie dann den vorherigen Fokus wiederherstellen.
Hackerb9


2

Für OS X können Sie dieses AppleScript-Bit verwenden:

activate application "Firefox"
tell application "System Events" to keystroke "r" using command down
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.