mozeval - コマンドライン&ウィンドウマネージャーでFirefoxを操作

俺みたいなCUI人間にはコマンドラインでいろいろできないと気がすまない。Firefoxの操作もそうだ。そこでコマンドラインFirefoxを操作するスクリプトを紹介する。

以前 d:id:rubikitch:20070909#fresno にてfresnoという同様のスクリプトを紹介したが、たまに固まってしまう場合があって実用には耐えなかった。そこでソケット通信を使った簡略かつ安定しているやつをこしらえてみた。

mozevalを使う場合も、あらかじめMozLab拡張を入れておいてね!!

#!/usr/bin/env ruby
require 'optparse'
@quiet = false
ARGV.options {|o|
  o.banner = "Usage: #$0 [-q] expr..."
  o.on("-q", "--quiet", "No output") {|x| @quiet = true }
  if ARGV.empty?
    print o
    exit 1
  end
  o.parse!
}

require 'socket'
s = TCPSocket.open("localhost", 4242)
5.times { line = s.gets }              # skip welcome message
c = s.read(1)
2.times { s.gets } if c == 'H'  # skip "Hmmm, seems like other repl's are running in this context."
for js in ARGV
  s.write "#{js}\r\n"
  puts s.gets.sub(/^r?epl.*?> /, '') unless @quiet
end
s.close

ソースは上記の通りだが http://www.rubyist.net/~rubikitch/archive/mozeval よりもってけ!

使い方は簡単で、コマンドライン引数を順番にevalしていくだけ。出力がいらないならば-qオプションをつける。

$ mozeval content content.location.href
[object Window]
http://www.rubyist.net/~rubikitch/
$ mozeval -q 'BrowserBack();'
$ w3m `mozeval content.location.href`
(w3mでFirefoxのURLを開く)

ウィンドウマネージャー経由で

Firefoxは、マウスカーソルがFlashへ差し掛かったらFlashにキーボードをのっとられるため、キーボードで前のページに戻ったりできない。とくにニコニコ動画を見てるとたまらなくイラつく!そこでウィンドウマネージャー経由でFirefoxを操作させてしまおう。

「戻る」が欲しいならば「mozeval -q "BrowserBack()"」を実行するようウィンドウマネージャーのキー割り当てる。こういうことができるのも、コマンドラインで操作できるからこそ!
たとえばratpoisonならばの以下の行を入れるとそういう場合でもキーボードで前のページに戻ることができる。。

bind M-b exec mozeval -q "BrowserBack()"

BrowserBack()ってどこにある関数なのかな?functions for keyconfig拡張に出てきて定義元がないから組み込みなのかな?