Segarkan / muat ulang tab browser aktif dari baris perintah?

28

Saya mencoba menyiapkan rantai alat khusus tempat peramban (Firefox atau, lebih disukai, Chrome) sering / sering / terus-menerus dipaksa untuk menyegarkan dari baris perintah.

(Idenya adalah untuk secara instan melihat perubahan visual dalam html / webapp yang saya edit dalam bingkai Emacs yang berdekatan - tanpa harus terus-menerus tab ke browser untuk melakukan penyegaran manual.)

Yang paling dekat saya datang sejauh ini adalah lari google-chrome FILE_PATH. Namun ini membuka tab baru setiap kali.

Apakah ada pendekatan lain?

thomanil
sumber
1
Saya akan mencoba memulai dari sesuatu seperti Auto Reload .
manatwork
Ah terima kasih untuk ini. Saya pertama kali berpikir ini adalah no-go karena hanya Mac, tetapi sepertinya ada sesuatu yang lebih crossplatform di github.com/guard/guard-livereload
thomanil
Firefox tampaknya dapat dikendalikan dari jarak jauh , tetapi saya tidak dapat membuatnya berfungsi. Mungkin Anda memiliki keberuntungan yang lebih baik.
amenthes

Jawaban:

13

Sesuatu untuk dimainkan

Ini menggunakan xdotool , yang memungkinkan Anda skrip tindakan windows / desktop. Jika Anda memberikan nama browser sebagai argumen, itu akan menemukan dan memuat kembali halaman saat ini. Anda dapat mengatur browser default, sehingga Anda tidak perlu menyediakannya setiap kali, dan Anda dapat mengubah apakah Anda mengirim CTRL-R untuk memuat ulang, atau SHIFT-CTRL-R untuk memuat ulang tanpa cache.

Ini harus flip untuk browser Anda, reload halaman, lalu kembali flip ke jendela apa pun yang Anda menelepon ini dari. Saya sering menggunakan ini dengan meletakkan browser di latar belakang, dengan jendela editor diatur ke 'ON-TOP' sehingga selalu terlihat, hot-key skrip ini, atau memanggilnya dari editor Anda, dan itu akan mengembalikan fokus Anda ketika sudah selesai.

Saya pengguna vim, dan saya bisa melihat membuat autocommand untuk secara otomatis memicu skrip ini setiap kali file yang diberikan ditulis, sehingga browser akan menyegarkan saat yang tepat, saya tahu Anda dapat melakukan hal yang sama.

#!/bin/bash
#
# L Nix <[email protected]>
# 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}
#
lornix
sumber
+1 Barang keren! Perhatikan bahwa --nameparameter cocok dengan string yang ditampilkan di batang judul jendela sehingga mungkin tidak selalu berisi nama browser seperti dalam contoh di sini.
rebus
@rebus bagaimana dengan --class atau --classname?
Aquarius Power
6

@Lornix's jawaban tidak bekerja untuk saya (saya tidak yakin mengapa, mungkin manajer jendela saya tidak membiarkan xdotool beralih windows). Saya menulis versi modifikasi yang harus lebih kuat, yaitu:

  1. Tidak melakukan pergantian yang tidak perlu di antara windows
  2. Membatasi dirinya untuk jendela yang terlihat
  3. Segarkan kembali semua jendela yang terlihat

(Juga menggunakan F5 bukan Ctrl-R, tapi itu hanya karena saya memiliki Ctrl-R terikat ke sesuatu yang lain.)

#!/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
dshepherd
sumber
Saya harus menambahkan ini sepertinya tidak bekerja dengan kromium, dan saya sama sekali tidak tahu mengapa.
dshepherd
Saya suka melihat skrip bash yang ditulis dengan baik! Omong-omong, kromium berfungsi jika Anda menggunakan fokus jendela sebelum kunci . Tentu saja, Anda kemudian harus mengembalikan fokus sebelumnya.
hackerb9
6

Jika Anda menggunakan Firefox, Auto Reload adalah ekstensi yang memuatnya setiap kali ada perubahan. Anda dapat menambahkan file, direktori atau localhost dan mengedit filter berbasis regex sehingga Anda akan mencapai apa yang Anda inginkan. Saya tidak tahu ada pelengkap untuk ini di Chrome. tautan: https://addons.mozilla.org/en-US/firefox/addon/auto-reload/

RamaPrakasha
sumber
1
Sayangnya, tidak berfungsi lagi.
Gringo Suave
2

Untuk OS X Anda dapat menggunakan sedikit applescript ini:

activate application "Firefox"
tell application "System Events" to keystroke "r" using command down
Wolph
sumber