連続操作を素敵にするsmartrep.el作った

この日記はEmacs Advent Calendar jp: 2011 : ATNDの19日目です。 昨日は、おきゃんさんのelispでカップリングするcoupling.elでした。

どのキーにバインドするか

Emacsを使っていると、多くの人が経験するであろう悩みの一つにキーバインドがあります。

当たり前ですがバインドできるキーは有限で、しかも楽して打てるキーともなるとそんなに多くはないように思います。VimのようなモードをもたないEmacsでは、これは宿命のようなものです。

なので、この問題を解消する多くの拡張があって、key-chord.elsmartchr.elは使われている方も多いんではないかと思います。

ただ、どちらも万能というわけではなくて、例えば、key-chord.elは通常の入力とバッティングすることが往々にしてあるので、バインドするキーの選択にはかなり用心する必要がありますし、smartchr.elも入力パターンがトグルするという特徴上、連続する入力とかには向いていません。

こんな感じで今のところこの枯渇問題を解消する決定打というのはなくて、いろいろと組み合わせて使うのが良いんではないかと思います。

prefixキーで大丈夫か

prefixキーと組み合わせたキーをバインドするというのも、枯渇問題対策として有効な方法の一つだと思います。僕もあまり使わないC-qをprefixにしてキーバインドを定義しています。

(defvar ctl-q-map (make-keymap))
(define-key global-map "\C-q" ctl-q-map)

また、標準のEmacsで使えるので、マークアップ言語のメジャーモードやOrg-modeなどキーバインドがたくさん定義されているモードでは、この方法でキーバインド枯渇問題を克服しています。

ただ、prefixキーによる方法も時と場合によってはかなりださいです。例えば先程挙げたOrg-mode。ヘッダー間の移動をするoutline-next-visible-headingとoutline-previous-visible-headingというのが定義されていてそれぞれC-c C-n, C-c C-pというC-cをprefixとするキーがバインドされています。

こういった移動系コマンドは複数回連続して入力することがとても多いと思いますが、このコマンドを使ってちょっと離れたヘッダーまで移動しようともなるとC-c C-nやC-c C-pという長たらしいキーを延々と入力させられることとなります。

https://cacoo.com/diagrams/D85Mnj5qnKif3HX0-4C93F.png

とてもやってられません。

smartrep.elとは

smartrep.elとは、連続して操作する際のprefixキー入力をキャンセルさせるためのelispです。 インストールには、auto-install.elをお使いの方はM-x auto-install-from-emacswiki してsmartrep.elと入力してください。Emacs24かpackage.elをお使いの方は、Marmaladeをリポジトリに登録してから、M-x list-packages としてsmartrep.elをインストールしてください。詳しいことは以前書いた日記を参考にしてください。

Marmaladeはお手軽感が素敵なEmacs Lispのリポジトリサイト

後は.emacsなどに(require ‘smartrep)と書いておけば、終わりです。

さて、言葉で説明してもなかなか伝わりにくそうなのでここからは使用例というか、自分が使っている設定を参考に説明しようと思います。

まずは、先程のOrg-modeのキーバインドで楽するために次のようなものを書きます。

(eval-after-load "org"
        '(progn
           (smartrep-define-key
            org-mode-map "C-c" '(("C-n" . (lambda ()
                                            (outline-next-visible-heading 1)))
                                 ("C-p" . (lambda ()
                                            (outline-previous-visible-heading 1)))))))

smartrep-define-keyの引数は順に適用するキーマップ、使うprefix、そして、prefixに続けるキーと関数の連想配列の三つとなっています。

この式を評価したならば、先程のまどろっこしいキー操作は必要ありません。2回目移行の操作はprefixキーを省略することができます。

https://cacoo.com/diagrams/D85Mnj5qnKif3HX0-9BD00.png

このキーバインドをキャンセルしたい時は、C-n, C-p以外のキーをなにか入力してください。通常のキー操作に戻ります。

二画面分割時の画面移動

画面を分割して、片方にレファレンスを開き片方でコーディングなどありがちなパターンではないでしょうか。

当然キャレットはコーディングしているウィンドウにあることがほとんどでリファレンスを開いているウィンドウにいくことはあまりありません。

と言っても、ページを送ったり見えない部分を見たい時は操作する必要があるわけで。標準でもscroll-other-windowがC-M-vにバインドされていますが移動幅大きいし、あまり使い勝手がよくありません。そこで、となりのウィンドウをキャレットを移動させることなく操作できるようにしてみます。

(smartrep-define-key
 global-map "C-q" '(("n" . (lambda () (scroll-other-window 1)))
                    ("p" . (lambda () (scroll-other-window -1)))
                    ("N" . 'scroll-other-window)
                    ("P" . (lambda () (scroll-other-window '-)))
                    ("a" . (lambda () (beginning-of-buffer-other-window 0)))
                    ("e" . (lambda () (end-of-buffer-other-window 0)))))

n,pだと1行のスクロール、N,Pで1ページ分のスクロール、a,eでバッファの先頭と最後に移動します。

Firefoxをリモート操作

先程の例と同様、ブラウザで資料などを見ながらEmacsでコーディングとか、Webプログラマの方とでしたら書いたコードの実行結果をブラウザで確認など結構やるんではないでしょうか。

ページを送ったり、リロードするだけのためにフォーカスをブラウザに移すとかめんどすぎます。Emacsからリモートでブラウザを操作できるようにしたいところです。

これを実現するにはFirefoxのmozreplとmoz.elを使うと良いです。導入などについては、以下のサイトで詳しく説明されています。

Firefox と Emacs の会話 | Amrta

Mozreplとmoz.elを導入したならば、以下のようなコードを評価します。

(autoload 'moz-minor-mode "moz" "Mozilla Minor and Inferior Mozilla Modes" t)
(moz-minor-mode t)

(defun moz-send-message (moz-command)
  (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 moz-command
           moz-repl-name ".popenv('inputMode', 'printPrompt'); undefined;\n")))

(defun moz-scrolldown-1 ()
  (interactive)
   (moz-send-message "goDoCommand('cmd_scrollLineDown');\n")) 

(defun moz-scrolldown ()
  (interactive)
   (moz-send-message "goDoCommand('cmd_scrollPageDown');")) 

(defun moz-scrollup-1 ()
  (interactive)
   (moz-send-message "goDoCommand('cmd_scrollLineUp');\n")) 

(defun moz-scrollup ()
  (interactive)
   (moz-send-message "goDoCommand('cmd_scrollPageUp');")) 

(defun moz-top ()
  (interactive)
   (moz-send-message "goDoCommand('cmd_scrollTop');\n"))

(defun moz-bottom ()
  (interactive)
   (moz-send-message "goDoCommand('cmd_scrollBottom');\n"))

(require 'smartrep)
(smartrep-define-key
 global-map "M-g" '(("n" . 'moz-scrolldown-1)
                    ("N" . 'moz-scrolldown)
                    ("p" . 'moz-scrollup-1)
                    ("P" . 'moz-scrollup)
                    ("a" . 'moz-top)
                    ("e" . 'moz-bottom)))

先程の画面分割の操作と同じような感じでFirefoxを操作できるようになると思います。

他の利用方法

smartrep.elは非常にシンプルなelispですが、いろいろと応用できるケースがあるんではないかと思います。

例えば今回紹介した移動系のコマンド意外でも、フレームやウィンドウのサイズ変更も連続的な操作が必要になりそうですし、undo、redo関係のコマンドでも結構連打している気がします。

HTMLなどのメジャーモードでは移動系のコマンドが多いので、smartrep.elを使うことでスマートに移動できるようになりそうですね。

というわけで、smartrep.elのご紹介でした。Emacs Advent Calendarはまだまだ続きます。 明日は、ken_mさん、今からとても楽しみです。

Org-modeとMS Wordの連携

突然ですが、Microsoft Wordをご存知ですか。とってもお節介で、そのくせ肝心なところに気が回ってなくて、もう本当に素敵です。これだけ素敵なアプリケーションだから「書類はwordで作成してください。」とついお願いしてしまうようなファンがたくさんいるんですね。

こうなると、Org-modeで作った文章もWordにエクスポートしたくなるというのが人情というものです。

Org-modeは7.6からOpenDocumentText形式でのエクスポートをサポートしているので、ワープロソフトとの連携もスムーズに行えます。というわけで、今回はOrg-modeとODTの連携を試してみます。

準備

Org-modeは頻繁にバージョンアップするので、まずは、手元のOrg-modeのバージョンを確認しておきます。(org-version) を評価することで確認できます。バージョンが古ければ、アップデートする必要があります。こちらからダウンロードしてインストールしておきましょう。

Org-modeをインストールしてもODTのエクスポート機能はすぐに使えません。この機能はまだ開発半ばであるということで、contrib扱いとなっていますので、Org-modeのcontribディレクトリの中のlispディレクトリにロードパスを通してからorg-modulesにorg-odtを追加します。

(setq org-modules (append org-modules '(org-odt)))

これで、準備は完了です。

エクスポート

実際にODTでエクスポートしてみます。お題はこの日記にしましょう。この日記もorg2blogを使ってorg-modeで書いているので、そのままエクスポートすればよいです。

せっかくなのでいろいろ試してみましょう。んー例えば画像とか。

http://sheephead.homelinux.org/wp-content/uploads/2011/11/wpid-org-mode-unicorn.png

表とかはどうでしょう

Org-mode AAA BBB
Word CCC DDD
Writer EEE FFF

早速、エクスポート。Org-modeでは、どんな形式のエクスポートでも最初はC-c C-e となってます。そう押したらば、すかさず「o」。これでODT形式のファイルが出力されているはずです。

出力したファイルがこちらになります。
画像や表もうまく出力されてますね。srcブロックもうまく表現されています。これで、Wordのお世話になることもだいぶ減りそうです。

スタイルを変更したい時は、Org-mode/contrib/odt/styles の中にあるxmlに手を加えることになりますが、膨大な量です。少なくとも、事前にODTの仕様についてはある程度理解しておく必要がありそうです。

Org-modeはこの他にもASCII、Freemind、Docbook、iCal等々多くの形式へのエクスポートが可能です。詳しくは、M-x org-info で Exportingの章を参考にしてください。

また、現在有志の方々でOrg-modeのinfoの翻訳作業を進めています。まだ査読作業が残っていますが、英語がつらいという方は参考にされてください。

org-mode-doc-ja/org-ja – GitHub

ちなみに、Exportingの章の翻訳は私が担当しました。原文の方が読みやすい可能性もありますが悪しからず。

Emacs24を使うようになってからしたこといくつか

以前Emacsのxwidgetブランチをビルドしてから、メインでEmacs24を使うようになりました。

Emacs上でふつーの(WebKit)ブラウザを表示する

ちなみに現在のEmacs安定版は23.3。Emacs24は来年春のリリース(多分)に向けてpretest版がリリースされているだけなので、まだまだ動作検証がされていないものもたくさんあります。

Emacs pretest 24.0.90

とはいっても世の中には先端マニアや、私のように最新の機能を使いたいという方もいるかと思います。

というわけで、今回はEmacs24を使って困ったこととか講じた対策とかを書いておくことにしました。といってもかなりgdgdなので、あまり参考にならない可能性大です。

ツールバーやメニューバーが非表示にならない。

Emacs23までは、(menu-bar-mode nil)としておくとメニューバーなどが非表示となっていましたが、Emacs24ではできなくなっています。(menu-bar-mode 0)とすることで、非表示することができます。

Emacs 24 とツールバー – とりあえず暇だったし何となく始めたブログ

descbinds-anything.elの表示がおかしい

descbinds-anything.elで表示される候補の順番がEmacs24ではおかしくなっています。これはdescribe-bindingsで表示されるバッファのフォーマットが変更されているため発生しているようです。 次のパッチをあてることで改善されると思います。

--- descbinds-anything.el.orig  2011-11-06 15:57:19.405565905 +0900
+++ descbinds-anything.el   2011-09-30 19:04:22.838392514 +0900
@@ -140,7 +140,10 @@
            (point)
            (line-end-position)))
      (setq header-p nil)
-     (forward-line 3))
+      (if (= emacs-major-version 24)
+          (forward-line 2)
+        (forward-line 3))
+      )
     ((= (char-after) ?\f)
      (push (cons header (nreverse section)) sections)
      (setq section nil)

popwinのウィンドウ分割が正しく動作しない。

ウィンドウが変な風に分割されます。最新のpopwin.elではEmacs24に対応してますので、更新することでこの問題は解消されると思います。 m2ym/popwin-el – GitHub

mcomplete.el使ってM-xするとエラーが出る

M-xするとエラーが出てどうにもできません。これも同じくアップデートされていますので、更新すれば問題は解消されます。 bmonkey’s Emacs page

Wanderlustを使うと、ウィンドウの移動とかがおかしい

ウィンドウが移動できなかったり削除できなかったりします。めんどくさくなったので標準搭載されているGnusに乗りかえました。mewもあまり相性が良くないようですね。

Twitter / @kazu_yamamoto: Mew が Emacs 24 で動かない。せっかく …
Emacs 24.0.90 pretest

elscreenをインストールして、シェルからファイル名を引数にしてEmacsを開くと 「command-line-1: Symbol’s value as variable is void: file-count」とゆーエラーが出てファイルが開けない

ファイルがコマンドラインから開けません。Emacs立ちあげてから開くという鉄則を習慣づければよいのですが、やっぱり面倒です。
が、この問題がなかなか解決しません。全く解決になっていないですが、フックさせている関数をフックさせないようにして逃げてます。どなたか解決策ご存知の方いたら教えてください。

--- elscreen.el.orig
+++ elscreen.el
@@ -1705,9 +1705,10 @@
       (setq column 0)
       t)

-    (add-hook 'after-init-hook (lambda ()
-                                 (add-to-list 'command-line-functions
-                                              'elscreen-e21-command-line t))))
+    ;; (add-hook 'after-init-hook (lambda ()
+    ;;                              (add-to-list 'command-line-functions
+    ;;                                           'elscreen-e21-command-line t)))
+    )

   (static-when elscreen-on-xemacs
     (defadvice command-line-1 (around elscreen-xmas-command-line-1 activate)

hiwin.elを使うと落ちる

これが、今回一番厄介でした。どうやら原因は、hiwin.elが多少強引にoverlayをのせていることである気がします。これを解消するには大幅にコードを直さないといけないようで今のところ保留してます。 かなりお気に入りのelispなのでいずれ改造にチャレンジしたいところです。

Emacs側でバッファローカルに背景色が変えられればかなり楽なんですけどね。。。

Emacs24,ふつーに使えます。

手を加えないといけないところはありますが、ほとんどが解決策があるものやすでにEmacs24に対応しているものもあり、Emacs24への移行は以外とスムーズでした。ただ、window.elにはかなり手が加わっているようなので、ウィンドウ操作系のelispをお使いの方は気をつけた方が良いと思います。

感動したのが、多くのelispがすでにEmacs24へ対応していること。特にmcomplete.elは私がEmacsを使いはじめた時からずーっと使わせてもらっているelispなのですごく嬉しかったです。開発者の皆さん、本当にありがとうございます。

それでは素敵な先端ライフを!!

Emacsテクニックバイブル ~作業効率をカイゼンする200の技~

著者/訳者:るびきち

出版社:技術評論社( 2010-08-03 )

定価:¥ 2,919

Amazon価格:¥ 2,919

単行本(ソフトカバー) ( 384 ページ )

ISBN-10 : 4774143278

ISBN-13 : 9784774143279


やさしいEmacs‐Lisp講座

著者/訳者:広瀬 雄二

出版社:カットシステム( 2011-06 )

定価:¥ 2,940

Amazon価格:¥ 2,940

単行本 ( 281 ページ )

ISBN-10 : 4877832718

ISBN-13 : 9784877832711


日記をお引越しました

この日記は、これまで自宅のサーバで運用していました。

サーバいぢりへの興味が薄れてきたのと、これからの転勤先に必ずしも安定したネット環境があるわけではないとか、今時自宅サーバ使うメリットあんまりないとか、いろいろな理由からこの度自宅サーバを停止して、さくらのサーバを使わせてもらうことにしました。

といってもドメインなどの変更はないので、あまり代わり映えもしないのですが、動作はかなり機敏になった気がします。

107346083.v1320555482.jpg?size=450.jpg

サーバに使っていたPC。ステッカーあたりに歴史を感じます。非力でしたが、大きなマシントラブルもなく本当に良い子でした。これまでありがとう。そしてお疲れ様!!

auto-complete-modeで日本語を補完するac-ja.elを作った

Emacsでの日本語入力は専らDDSKKを使っています。

変換中の補完はDDSKKのskk-dcomp-multiple-activateがあるのですが、確定後の補完ができないのがいまいち不満でした。

誰か作ってるはずだと思い、いろいろ探してみましたが以外なことに目ぼしいものが見つからなかったので、いろいろな方のコードを拝借しながらauto-complete.elを使って日本語を補完するac-ja.elをいうのを書いてみました。

ac-ja.elとは

auto-complete-modeを使った日本語補完をサポートする、ふたつの情報源を提供します。
恐らく、いろいろなIMで使えるとは思いますが、DDSKKとの併用が便利ではないかと思います。

ダウンロード

ac-ja.elはMarmaladeというelispのリポジトリサイトに登録していますので、package.elをお使いの方はとても簡単にインストールできます。

package.elやMarmaladeからのダウンロードについて詳しくは以前書いたこちらを参考にしてください。

package.elをお使いでない方は、Githubから手動でダウンロードしてください。

myuhe/ac-ja.el – GitHub

以降では、各情報源ごとに必要な設定について書いていきます。

ac-source-dabbrev-jaとその設定

ac-source-dabbrev-jaは、その名のとおりdabbrevで日本語を収集して作られる情報源です。

requireしてac-sourcesに加えるだけで使えるようになるはずです。

(require 'ac-ja)
(setq ac-sources (append ac-sources '(ac-source-dabbrev-ja)))

これで、補完が開始される度にdabbrevがはしり、補完候補が集められます。DDSKKをお使いの方はjisyoバッファもdabbrevされるので、個人辞書に登録した単語も補完候補に出てくると思います。

ac-source-skkとその設定

ac-source-skkはSKKで使われる辞書ファイルから補完候補が作成される情報源です。DDSKKの利用が前提となります。

必要となる設定は次のような感じになります。

;;補完候補としたい辞書ファイルの場所を指定します。
(setq ac-skk-jisyo-file "~/SKK-JISYO.L")
;;補完候補生成に必要な中間ファイルを置く場所を指定します。
(setq ac-skk-alist-file "~/ac-skk-alist.el")
(require 'ac-ja)
(setq ac-sources (append ac-sources '(ac-source-skk)))

指定する辞書ファイルによって人名や地名などいろいろと補完できるようになるんではないかと思います。

また、この二つの情報源は併用して使うことも可能です。併用して使うとこんな感じになると思います。

http://img404.imageshack.us/img404/9422/006wq.png

文字列を確定したら自動的に補完を開始

DDSKKでは文字入力に独自の関数をあてていますので、ac-auto-startをtとしていても自動的に補完が開始されません。

そこで、自動的に補完を開始させるために以下のようなコードを.emacsにでも書いておきます。

(eval-after-load "skk"
  '(progn
     (defadvice skk-kakutei (after ad-skk-kakutei last)
       "skk-kakuteiの後にatuo-complete-modeによる補完を実行するadvice"
       (unless (minibufferp)
         (ac-start)))))

(add-hook 'skk-mode-hook
          (lambda ()
            "skk-kakuteiのadviceを活性化"
            (interactive)
            (ad-activate 'skk-kakutei)))

(defadvice skk-mode-exit (before ad-skk-mode-exit last)
       "skk-modeから抜ける時にskk-kakuteiのadviceを不活性化。"
       (ad-deactivate 'skk-kakutei))

これで自動的に補完ができるようになるはずです。

その他の雑多なこと

いろいろと制限がありまして、まずひらがなと漢字が混じると補完できません。ということなので、補完するのは主に漢字が並んだ名詞になると思います。

それとできてから気づいたのですが、auto-complete-modeってmigemoれないので、補完候補が膨大にあるとなかなか探すのが大変です。どなたかmigemoれるanythingインターフェイスで書き直してください。

それでは good補完ライフを

参考

ac-source-dabbrev-jaに関するコードは本家dabbrev.elのコードからいろいろと拝借しました。

ac-source-skkに関するコードはDDSKKのメンテナ、Kitamotoさんのskk-kakutei-extra.elからいろいろと拝借しました。

漢字で補完 – lisp_interactionの日記

素敵なコードありがとうございます!!

EmacsのMercurialフロントエンドはmonkyがおすすめ

Git、大人気ですね。bitbucketもとうとうGitをサポートするみたいです。

Bitbucket now rocks Git – Bitbucket blog

bitbucketは、デザインこそ残念な感じですが容量制限なしでクローズドリポジトリも使い放題ということで、内容としてはGithubよりもかなり素敵。
これを機にbitbucketユーザが広がるといいなーと思っています。

bitbucketといえば、Mercurial。僕も初めはGitを使っていたのですが、あのややこしい雰囲気と自分のネットワーク環境だと使うのがかなりしんどそうだったので、それ以降メインはMercurialになってます。そこらへんの経緯は以前書いた日記に詳しく書いてます。

gitやめてmercurialとtortoiseHGをインストール

Mercurial自体はわかりやすくてとても気にいってるのですが、残念なことにEmacsのフロントエンドについてはあまり選択肢がなく、 その少ない選択肢の使い勝手もあまり良いとはいえませんでした。
それと、TortoiseHgの完成度がとても高かったので、専らTortoiseHgから使っていたのですがコミットログ書きやMQの操作など、エディットに近いところにある操作はEmacsからしたい!!と常々思っていた折、ようやく素晴らしいelispを見つけましたので、ご紹介します。

monkyとは

monky.elはEmacsのMercurialフロントエンド。Anantha Kumaranさんが開発してます。

monky.el at master from ananthakumaran/monky – GitHub

monkyの良いところは、まずひととおりのHgコマンドがmonkyから使えるところです。EmacsではこれまでもahgやDVCなどがあったのですが、ひととおりの操作をしようと思うとどうしてもコマンドを使う場面がでてきてしまって、結局いつの間にから使わなくなっていました。monkyだとEmacsから出ないで、操作が完結します。

もうひとつの特徴がMagitと操作体系が似ている点です。名前からも何となくわかるようにmonkyはMagitをかなり参考にしています。なのでこれまでmagit.elを使っていたGitユーザは違和感なく操作できるんではないかと思います。

出自がそんな感じなので、関数にstageだのfetchだのcheckoutだのMercurialになじみのない単語がでてきますが、Mercurialを使っている人はだいたいGitも使えるので(ェ)、問題ないかと思います。

インストール

monkyは、Marmaladeというelispのリポジトリサイトに登録されています。Emacs24を使われているか、package.elをインストールしていてMarmaladeを登録しているならばM-x list-packages として表示される一覧からmonkyを選択することでお手軽にインストールできます。

package.elの使い方やMarmaladeの登録の仕方については、以前書いた日記を参考にされてみてください。

Marmaladeはお手軽感が素敵なEmacs Lispのリポジトリサイト

package.elのインストールがめんどいという方はREADMEを参考にインストールすると良いと思います。使い方ですがドキュメントがしっかり書かれてありますのでそちらを見るとだいたいわかると思います。

Monky User Manual

Magitを使ったいた方はMagitと同じように使えばだいたい使えます。

e2wmを使えばvcsの垣根がなくなる

何回も書いているとおり、monkyのウリはMagitとよく似ているという点。ならば、vcsの違いを意識させないようにリポジトリ操作ができるのではないかと思いまして、kiwanamiさんが作られたe2wm-vcsにmonkyのパースペクティブを追加してみました。

myuhe/emacs-window-manager – GitHub

起動した時の画面構成は次のような感じになります。

https://cacoo.com/api/v1/diagrams/D85Mnj5qnKif3HX0-B3C1D.png

e2wmやe2wm-vcsについては、作者のkiwanamiさんが詳しく書かれていますので、そちらを参考にされてください。

広くなった画面を有効利用できる、Emacs内Window管理ツール e2wm.el を作ってみた。(旧名称 ewm.el) – 技術日記@kiwanami
e2wm の magit パースペクティブ – 技術日記@kiwanami

monkyのパースペクティブに加えて、e2wm:dp-vcsという関数を追加しました。これは, 今のバッファがどのvcsの管理下にあるかを判読して空気を読んでそのvcsのパースペクティブを開く関数になります。

これによって、コード書く→コミットする のような流れがvcsの違いを気にせずできるようになるんではないかと思います。

同じDVCSであるGitとMercurialはかなり似ていますが、extensionの組み合わせなどによっていろいろなユースケースに対応できるMercurialもとても面白いプロダクトです。Gitサポートをきっかけにbitbucketに登録した方もこれを機にMercurialを使ってみてはいかがでしょうか。

結婚しました

去る9月24日、式を挙げ、しやくそに婚姻届を出しました。

ここしばらくは式の準備に、仕事もくそ忙しい時期と重なったりとしょんぼりすることが多かったのですが、とても楽しい一夜を過ごさせてもらいました。

うかれすぎていたのか二次会の途中から記憶が全くなく、後日談で記憶を補完していきますとかなりはずかしいことになっていたようです。関係者の皆様すみません。

奥様とはすでに同居していたこともあり、驚くほど変化がありません。変化がなさすぎるどころか奥様は式が終わった後、友人のところに遊びに行ったり旅行に行ったりされているので、 ぼっちに逆戻りです。

ただ、家族ができた、というのは素直に嬉しいです。
家庭の事情もあり、これまであまり家族との関わりをもたないように生きてきたため、本当に久し振りに家族というものを感じたのですが、何とも表現できないほんわかした気持になりました。

わざわざ来ていただいた皆さん、本当にありがとうございました。また飲みましょう!!

http://s1.proxy05.twitpic.com/photos/large/405975360.jpg

Emacs上でふつーの(WebKit)ブラウザを表示する

Emacsでふつーのブラウザが動いたら素敵だと思いませんか? え?変態?そうですか。 Emacs開発レポジトリには、いろいろと野心的なブランチがありまして、例えばkhikerさんが紹介されていたgtk-tabsもそのひとつです。

Emacs gtk-tabs ブランチでタブを表示 – とりあえず暇だったし何となく始めたブログ

そのブランチの中にxwidgetというブランチがありまして、これがとても素敵そうだったので、試してみることにしました。

xwidgetブランチEmacsのビルド

まずソースコードをとってきます。 bzrならば

bzr clone http://bzr.savannah.gnu.org/r/emacs/xwidget/

bzrは遅いので、ちょっと。。や宗教上の理由でbzrが使えないという方はgitのミラーリポジトリがあるのでそちらから落とすのも良いと思います。

emacs.git – Git mirror of Emacs bzr repo

次に、Emacsをビルドできるような環境が必要となります。以下はUbuntu11.04での例。 といってもすごく楽でaptitudeを使えば、

sudo aptitude build-dep emacs23

これで終わりです。

次にwebkitでのレンダリングに必要なものをインストールします。
実はここではまりまして, いろいろ試していたのですが恐らく次のものをインストールすると良いと思います。

libwebkitgtk-dev libwebkitgtk-1.0-0 libwebkitgtk-1.0-0-common libwebkitgtk-3.0-0 libwebkitgtk-3.0-common libwebkitgtk-3.0-dev

それではビルド。 ソースコードの解凍先に入って次のようなコマンドを入力します。詳しくは解凍した中身にあるREADME.xwidgetをどうぞ。

./configure   --with-x-toolkit=gtk3 --with-xwidgets
make -j4
sudo make install

これでビルドは終わりです。

使ってみる

そのままでも使えるのですが、使い勝手をあげるため、popwin.elを使わせていただきまして下からポップアップするようにしています。

(when (=  emacs-major-version 24)
  (setq browse-url-browser-function 'xwidget-webkit-browse-url))

;;popwin.elでポップアップさせる
(eval-after-load "popwin"
 '(push '("\*xwidget" :regexp t :height 20) popwin:special-display-config))

こんな感じになります。 http://img683.imageshack.us/img683/2267/xwidget.png

使い勝手

開発版ということもあり、ブラウザ開いたら落ちるというようなことも起きますが、総じて便利でメインのEmacsはこのxwidgetブランチEmacsになってしまいました。C-v、M-vによる移動や入力フォームにはミニバッファから入力することもできるので、ふつーにブラウザとして使えます。

あえて、苦言を言えば、Hit a Hint にあたる機能がないのがつらいです。これが改善されれば、Emacs引きこもり具合がまた上りそうです。

今のところ、Emacs24に取りこまれる予定はないとのこと。うーん残念だ。是非取りこんでもらいたいものです。

Emacsテクニックバイブル ~作業効率をカイゼンする200の技~

著者/訳者:るびきち

出版社:技術評論社( 2010-08-03 )

定価:¥ 2,919

Amazon価格:¥ 2,919

単行本(ソフトカバー) ( 384 ページ )

ISBN-10 : 4774143278

ISBN-13 : 9784774143279


Dropboxライクなストレージ、SpiderOakの無料プランが上限50GBになっていた

以前にも紹介したSpiderOak。とっても便利なのでその後も愛用させてもらってます。

Linux、Macでも使えるdropboxライクなオンラインストレージSpiderOakを試してみた

Sync、Share、Backupのそれぞれがディレクトリ単位に細かく指定できるのでとても使い勝手が良いです。普段使いでは、–headlessオプションで使っていて通知とかも出てこないので実は全く存在感ないのですが、またそこが良い。「アップロードしました!!」みたいなドヤ顔されても、困ります。

そんなSpiderOak、無料プランの上限はこれまで5GBだったのですが、なんといつの間にか50GBになってました。

What are friends for?

新しいユーザを一人紹介すると1GB増えるようですので、友達50人いたらあっという間に50GB。太っ腹!!

というわけで、またしても恥じらいもなくリンク設置。以下のリンクから登録すると僕もあなたも容量が1GB増えます。よろしくごひいきに!!

SpiderOak.com

サービスとしてもなかなか使いやすいクライアントにweb API、win、Mac、Linux、iOS、Androidに対応とかなり素敵なサービス。ほんと何故流行らないんだろう。。。

e2wmでブックマークを操作するプラグイン、e2wm-bookmark.el

Emacsのカオスなウィンドウ管理から開放してくれるelisp、e2wm.elはプラグインを組み合わせて自分好みのパースペクティブを定義できるのもその素敵なところの一つです。

僕もRでの作業用にプラグインとパースペクティブを作って、便利に使ってます。
EmacsでのR開発環境をRstudio、Eclipseライクにするe2wm-R.el

e2wm.elの作者であるkiwanamiさんも、magit専用パースペクティブを書かれていて、かなり便利そう。
e2wm の magit パースペクティブ – 技術日記@kiwanami

このように可能性は無限大なe2wm.elですが、今回はそのパースペクティブに組みこむプラグインを書いてみました。

e2wm-bookmark.elとは

Emacsに標準の機能であるBookmarkをe2wm上で管理するためのプラグインが入っています。Bookmark自体いろいろなケースで使われるものですので、オリジナルのパースペクティブを作る時なんかに使ってもらえるといいなと思っています。

インストール

e2wm-bookmark.elを使うには当たり前ですがe2wm.elとwindow-layout.elが必要となります。ロードパスの通ったディレクトリに配置しといてください。
e2wm.el
window-layout.el

e2wm自体の操作については、kiwanamiさんが詳しく説明してくれていますので、まずそちらを読まれると良いと思います。

広くなった画面を有効利用できる、Emacs内Window管理ツール e2wm.el を作ってみた。(旧名称 ewm.el) – 技術日記@kiwanami

次に、githubからe2wm-bookmark.elを落としてきて
myuhe/e2wm-bookmark.el – GitHub

.emacsあたりに(require ‘e2wm-bookmark)とすれば完了です。

パースペクティブの設定

e2wm-bookmark.elには、パースペクティブも定義されていて、e2wmが起動していれば、M-x e2wm:dp-code-ext でそのパースペクティブを表示することができます。

他にも例えば、次のようなコードを.emacsに書いておけば、e2wm.elで定義されているcodeパースペクティブの中に、Bookmarkプラグインが追加されます。

(setq e2wm:c-code-recipe
      '(| (:left-max-size 50)
          (- (:upper-size-ratio 0.4)
             files
             (- (:upper-size-ratio 0.5)
                bookmarks history))
          (- (:upper-size-ratio 0.7)
             (| (:right-max-size 50)
                main imenu)
             sub)))
(setq e2wm:c-code-winfo
      '((:name main)
        (:name bookmarks :plugin bookmarks-list)
        (:name files :plugin files)
        (:name history :plugin history-list)
        (:name sub :buffer "*info*" :default-hide t)
        (:name imenu :plugin imenu :default-hide nil))))

こんな感じで左側に三つのプラグインが並びます。

ただ含まれているパースペクティブはデモ的なものなので、是非自分の使い方にあったパースペクティブを定義することをお薦めしてみてください。

使いかた

キーバインドの一覧を載せておきます。 基本的にはBookmarkの操作と変わらないと思います。

j,n,C-n 次の行へ移動
k,p,C-p 前の行へ移動
r ブックマーク名を変更
d 削除するオブジェクトをマーク
D ブックマークを削除
M-d ブックマークを全て選択
u 削除するオブジェクトをアンマーク
U 削除するオブジェクトをアンマーク
x マークしたファイルを削除
g 再表示
w ブックマークのディレクトリ名をキルリングに送る
f 選択したディレクトリをfilesプラグインに表示
q mainに戻る

たいした特徴もないのですが、強いてあげればfilesプラグインと連携したアクショ ンがあります。ディレクトリを選択した状態で、リターンを押すとmainにdiredが表 示されますが、fキーだとfilesプラグインのwindowにディレクトリの一覧が表示されます。

それと、Bookmarkは、キャレットの位置も記憶しているので、大きなファイルとかを編集する際に編集している場所を示すマーカの代わりとしてもなかなか便利です。

Bookmarkプラグインなどいろいろなプラグインから、是非自分に合った使い方を見つけてみてください。