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

GAE Deploy 時に 500 Internal Server Error

デプロイ時に何やら 500 Internal Server Error が発生していた。

Unable to update:
java.io.IOException: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=sandbox&version=1.0&
500 Internal Server Error

Server Error (500)
A server error has occurred.

	at com.google.appengine.tools.admin.ServerConnection.send(ServerConnection.java:153)
	at com.google.appengine.tools.admin.ServerConnection.post(ServerConnection.java:86)
	at com.google.appengine.tools.admin.AppVersionUpload.send(AppVersionUpload.java:582)
	at com.google.appengine.tools.admin.AppVersionUpload.beginTransaction(AppVersionUpload.java:400)
	at com.google.appengine.tools.admin.AppVersionUpload.doUpload(AppVersionUpload.java:112)
	at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:56)
	at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy(AppEngineBridgeImpl.java:271)
	at com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace(DeployProjectJob.java:146)
	at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

結果的に原因はバージョン番号。
Maven などの慣習で無意識に 1.0 などと少数点を含みバージョンを指定していたのだけど、整数値にしたら無事にデプロイ成功。

あまり嵌る事はないと思うけど、エラーから原因は分かりにくいので念の為共有。

statusline-toolbar.js の背景色

※4/2 更新 最新の stautsline-toolbar.js だと効かなくなっていたので修正。


statusline-toolbar.js を早速入れてみた。
ただ、Mac だと -moz-appearance: toolbar な背景色になっていたので、statusline と同じ色になる様に vimpwhite.vimp に追記。

style -name toolbar-background chrome://* #liberator-customize-toolbar { padding-left: 5px !important; -moz-appearance: none !important; }

github: vimpwhite.vimp


before
f:id:tlync:20110326171413p:image


after
f:id:tlync:20110326171414p:image

anything-gist.el が便利

gist が emacs から直接編集できてとても便利なのですが、自分の環境ではどうにも動かなかったので少し修正。
変更点は大きく2点。

  • wget に --no-check-certificate オプションを追加
  • 既に gist が存在する場合 git pull する様に変更

https://gist.github.com/862360

@@ -156,7 +158,7 @@
           (delete-region (point-min) (point-max))
           (insert (shell-command-to-string
                 (concat
-                 "wget -q http://gist.github.com/"
+                 "wget --no-check-certificate http://gist.github.com/"
                  id
                  ".txt -O -")))
           (goto-char (point-min))
@@ -168,7 +170,7 @@
         (with-current-buffer gist-buffer
           (insert (shell-command-to-string
                 (concat
-                 "wget -q http://gist.github.com/"
+                 "wget --no-check-certificate -q http://gist.github.com/"
                  id
                  ".txt -O -")))
         (switch-to-buffer gist-buffer))))))
@@ -206,26 +208,26 @@
          ("view" . (lambda(obj-name)
                      (anything-gist-fetch
                        (nth 2 (split-string obj-name)))))
-         
+
          ("edit" . (lambda(obj-name)
+                     (setq gist-id (nth 2 (split-string obj-name)))
                      (setq gist-tmp-dir
-                           (concat temporary-file-directory
-                                   (nth 2 (split-string obj-name))))
+                           (concat temporary-file-directory gist-id))
                      (set-process-sentinel
                       (start-process
                        "anything-gist-clone"
                        "*anything-gist-clone*"
                        shell-file-name
-                       shell-command-switch 
-                       (concat "cd "
-                               temporary-file-directory
-                               " && git clone git@gist.github.com:"
-                               (nth 2 (split-string obj-name))
-                               ".git"))
+                       shell-command-switch
+                       (if (file-directory-p gist-tmp-dir)
+                           (concat "cd " gist-tmp-dir " && git pull")
+                           (concat "cd " temporary-file-directory
+                                   " && git clone git@gist.github.com:"
+                                   gist-id ".git")))
                       '(lambda
                          (process event)
                          (directory-walker  #'find-file-save-hook gist-tmp-dir)))

Reference

anything-gist.elをまたまたアップデート
http://sheephead.homelinux.org/2010/11/24/6396/

simple-hatena-mode から投稿テスト

投稿テスト

(require 'simple-hatena-mode)
(setq simple-hatena-default-id "tlync")
(setq simple-hatena-bin "~/Scripts/hw.pl")
(setq simple-hatena-root "~/.hatena")
(add-hook 'simple-hatena-mode-hook
          '(lambda ()
             (turn-on-screen-lines-mode)
             (require 'hatenahelper-mode)
             (hatenahelper-mode 1)))

(global-set-key (kbd "C-z h c") 'simple-hatena)
(define-key simple-hatena-mode-map (kbd "C-c <down>") 'simple-hatena-find-diary-for)
(define-key simple-hatena-mode-map (kbd "C-c <left>") 'simple-hatena-go-back)
(define-key simple-hatena-mode-map (kbd "C-c <right>") 'simple-hatena-go-forward)
(define-key simple-hatena-mode-map (kbd "C-c o") 'simple-hatena-open-current-url)
(define-key simple-hatena-mode-map (kbd "C-c p") 'simple-hatena-submit)
(define-key simple-hatena-mode-map (kbd "C-c t") 'simple-hatena-trivial-submit)

HootSuite を少しだけ見栄えよくするユーザースタイル

最近、HootSuite を使いはじめたのですが、日々使うものは自分好みにカスタマイズしたいという欲求に駆られるので、早速ユーザースタイルを作成。


http://userstyles.org/styles/44638?r=1298776784
# Steel Blue, Classic テーマ専用


変更内容は下記の通り。
#3/7に少し更新。

  • 表示量を増やす為、文字密度の調整
  • 文字をはっきりと表示する為にテキストシャドウを調整
  • フッターの非表示化
  • コンテンツと UI 要素の font family が一緒で間延びした印象があるのでフォントスタイルを若干調整。

ちょっとした変更ですが、いつもより少し気持ち良く HootSuite が使えます ;)

Before

f:id:tlync:20110307134405p:image

After

f:id:tlync:20110307134404p:image

Add-On Bar を非表示にする

vimperator 3.0pre の最近の latest をインストールすると、下記の様にステータスバーの上に Add-On Bar が表示される様になっています。


f:id:tlync:20110225110948p:image


自分の場合は特に使う事が無い上、見た目も悪いので非表示にしたい、という事でその方法をメモ。

set gui+=noaddons