sandbox

Scala, Android, Architecture, Management, Service Design あたりを主戦場としております

Firefox で閲覧中の画面を Emacs からスムーススクロールする elisp

こちらの記事に触発されて、Firefox + mozrepl 版を書いてみた。
mozrepl が動く環境であれば Windows でも Linux でも動くと思います。
まだまだ便利な機能は作れそう。

Google Chromeで閲覧中のページをEmacsからスクロールする ※Mac限定
http://d.hatena.ne.jp/ramusara/20110211

出来ること

  • Emacs から Firefox で閲覧中のページをスムーススクロール (半ページ毎の移動などにも設定可能)
  • Emacs から Firefox のタブを移動

前提環境

  • Firefox + Mozrepl
  • Emacs + moz.el (moz-minor-mode が有効になっている状態)

ソース

(defvar moz-scroll-ratio "60") ;; スクロール量の比率。100(%)で1ページ毎のスクロール。
(defvar moz-scroll-time "60") ;; アニメーション時間。高いほどゆっくりに。

(defun moz-send-line (str)
  (interactive)
  (comint-send-string (inferior-moz-process)
                      (concat moz-repl-name ".pushenv('printPrompt', 'inputMode'); "
                              moz-repl-name ".setenv('inputMode', 'line'); "
                              moz-repl-name ".setenv('printPrompt', false); undefined; "))
  (comint-send-string (inferior-moz-process) (concat str "; "))
  (comint-send-string (inferior-moz-process)
                      (concat moz-repl-name ".popenv('inputMode', 'printPrompt'); undefined;\n")))

(defun moz-scroll-down ()
  (interactive)
  (moz-send-line (concat "(function(){var t=" moz-scroll-time ",r=" moz-scroll-ratio " ;var i=0,w =document.documentElement,s=gBrowser.selectedBrowser.contentWindow.scrollY,e=s+w.clientHeight/(100/r),v=(e-s)/t,c=s;for(i;i<t;i++){setTimeout(function(){c+=v;content.scrollTo(0,c);},i+1)}})();")))

(defun moz-scroll-up ()
  (interactive)
  (moz-send-line (concat "(function(){var t=" moz-scroll-time ",r=" moz-scroll-ratio " ;var i=0,w =document.documentElement,s=gBrowser.selectedBrowser.contentWindow.scrollY,e=s+w.clientHeight/(100/r),v=(e-s)/t,c=s;for(i;i<t;i++){setTimeout(function(){c-=v;content.scrollTo(0,c);},i+1)}})();")))

(defun moz-prev-tab ()
  (interactive)
  (moz-send-line "gBrowser.mTabContainer.advanceSelectedTab(-1, true)"))

(defun moz-next-tab ()
  (interactive)
  (moz-send-line "gBrowser.mTabContainer.advanceSelectedTab(1, true)"))

;;(global-set-key (kbd "c-x ret <up>") 'moz-scroll-up) ;; C-x C-m C-p
;;(global-set-key (kbd "c-x ret <down>") 'moz-scroll-down) ;; C-x C-m C-n
;;(global-set-key (kbd "c-x ret del") 'moz-prev-tab) ;; C-x C-m C-h
;;(global-set-key (kbd "c-x ret c-l") 'moz-next-tab) ;; C-x C-m C-l