Google Chromeで閲覧中のページをEmacsからスクロールする ※Mac限定

サイト見ながらコーディング(Emacsで透過利用)してる時に
・文字が被っていて見えない
ソースコードが長くて途中までしか見えていない
上記のような状況で、一々"command+tab"で切り替えてChrome操作するのが面倒でした。


「一々Google ChromeEmacs切り替えてスクロールするの面倒だよね…
 Emacs側から制御できないかな」といつも思っていたのですが、
http://d.hatena.ne.jp/LaclefYoshi/20101024/1287887644を見て、思いつきました。


■方法
AppleScriptを経由して、javascriptを実行させることでスクロール制御可能になります。
(つまり、AppleScriptが実行できなければならない…Mac限定)

1.下記AppleScriptソースコードを保存
2.AppleScriptemacsから呼び出す


AppleScriptソースコード
下記ソースコードを適当な場所に保存してください。
やってることは、Google Chromeのアクティブタブ(現在表示してるページ)に対して
javascriptを実行する命令を送っているだけです。
「スクロール量が足りねーよ!><」という方は、変数yに加算してる値(100)を変更すれば良いかと。


-- chrome.scpt: control Google Chrome
-- Author : ramusara<ramusara@gmail.com>
on run argv
tell application "Google Chrome"
tell active tab of window 1
if ("next" = item 1 of argv) then
execute javascript "var x = document.documentElement.scrollLeft || document.body.scrollLeft; var y = document.documentElement.scrollTop || document.body.scrollTop; y += 100; window.scroll(x, y);"
else if ("previous" = item 1 of argv) then
execute javascript "var x = document.documentElement.scrollLeft || document.body.scrollLeft; var y = document.documentElement.scrollTop || document.body.scrollTop; y -= 100; window.scroll(x, y);"
end if
end tell
end tell
end run

elispソースコード
emacs起動時に読み込まれる.elispにぺたっと。
編集箇所は2カ所「AppleScriptのパス」と書かれた場所について、保存したAppleScriptのパスを指定して下さい。
下記コードでは、"C-z C-v"で下方向にスクロール、"C-z M-v"で上方向にスクロールになってます。


(defun chrome-scroll-next ()
(interactive)
(shell-command "osascript AppleScriptのパス next"))

(defun chrome-scroll-previous ()
(interactive)
(shell-command "osascript AppleScriptのパス previous"))

(global-set-key (kbd "C-z C-v") 'chrome-scroll-next)
(global-set-key (kbd "C-z M-v") 'chrome-scroll-previous)


■なんというか
これ作ってて思ったのですが、
・別にAppleScriptじゃなくてもプログラムから制御できたりするんじゃ?
・大体AppleScript限定にしちゃうとMacユーザ以外どうすんの?
・駄目じゃん(´・ω・`)ショボーン
そんな感じ。情報が見つからなかったので記事書きましたが、
きっと、もっとcoolな方法があるはず…教えて頂きたいです!


emacsキーバインド"で"chromeを操作したいんじゃない、emacs"から"chromeを操作したいんだ!
と思っても、前者ばっかりHITして見つからんのです(´・ω・`)