« [Zaurus]Linux Zaurus上のEmacsで選択した単語を「英辞郎 on the Web」で引く | Main | [Mac OS X]iTunes-LAMEがiTunes7対応アップデート! しかし……。 »

2007.10.05

[Emacs]CarbonEmacsからSafariをコントロールする

昨日のエントリ「[Zaurus]Linux Zaurus上のEmacsで選択した単語を「英辞郎 on the Web」で引く」に関連して、CarbonEmacsから手を離すこと無く、裏にあるSafariをコントロールして英辞郎 on the Webをブラウズするための糞Elispを書いてみました。
Elisp -> AppleScript -> JavaScriptの三段重ねですね。

昨日のElispはSafariで一枚もWindowを開いていないときにエラーが出てたので、黙って修正してたりします。


(defun my-safari-do-javascript(command)
(do-applescript
(concat "
tell application \"Safari\"
if count of document is greater than 0 then
do JavaScript \"" command "\" in document 1
end if
end tell")))

(defun my-safari-scroll(direction)
(let ((amount 200))
(if (eq direction 1)
(setq amount (- amount)))
(my-safari-do-javascript
(concat "javascript:window.scrollBy(0,"
(int-to-string amount)
");"))))

;;Safariで上方向スクロール
(defun my-safari-scroll-up()
(interactive)
(my-safari-scroll 1))
;;Shift+上
(global-set-key '[S-up] 'my-safari-scroll-up)

;;Safariで下方向スクロール
(defun my-safari-scroll-down()
(interactive)
(my-safari-scroll 0))
;;Shift+下
(global-set-key '[S-down] 'my-safari-scroll-down)

;;Safariでヒストリを進む
(defun my-safari-history-forward()
(interactive)
(my-safari-do-javascript "history.forward();"))
;;Command+右
(global-set-key '[M-right] 'my-safari-history-forward)

;;Safariでヒストリを戻る
(defun my-safari-history-back()
(interactive)
(my-safari-do-javascript "history.back();"))
;;Command+左
(global-set-key '[M-left] 'my-safari-history-back)

;;Safariでリロード
(defun my-safari-reload()
(interactive)
(my-safari-do-javascript "location.reload(true);"))
;;Ctrl+C r
(global-set-key "\C-cr" 'my-safari-reload)

|

« [Zaurus]Linux Zaurus上のEmacsで選択した単語を「英辞郎 on the Web」で引く | Main | [Mac OS X]iTunes-LAMEがiTunes7対応アップデート! しかし……。 »