Org-modeのディレクトリへのリンクをDiredで開きたい

Org-modeのハイパーリンク便利ですね。 ファイルだのメールだのURLだのなんだのリンクはりまくれるので、整理したい時など C-c L ( org-store-link )しまくって まとめて整理したりしてます。

AdventCalendar – Org-modeのリンク機能で情報集約 – Qiita

この機能、だいたい満足してたのですが唯一イラッとするのがディレクトリのリンクを C-c C-o ( org-open-at-point ) して リンク先に飛ぶ時です。

なんと、Windowsだとリンク先がエクスプローラで開くのです。なぜDiredでないのか理解に苦しみます。あのいきなりEmacsから追放された時の悲しみを知らないとでも言うのでしょうか。

もう、こんな悲しみを味わいたくないのでDiredで開きたいと思います。

元ネタは、Org-modeのMLに投下された以下の記事。 open file link in dired?

(org-add-link-type "file+emacs+dired" 'org-open-file-with-emacs-dired)
(add-hook 'org-store-link-functions 'org-dired-store-link)

(defun org-open-file-with-emacs-dired (path)
  "Open in dired."
  (let ((d (file-name-directory path))
    (f (file-name-nondirectory path)))
    (dired d)
    (goto-char (point-min))
    (search-forward f nil t)))

(defun org-dired-store-link ()
  "Store link to files/directories from dired."
  (require 'dired-x)
  (when (eq major-mode 'dired-mode)
    (let* ((f (dired-filename-at-point))
           (link (concat "file+emacs+dired" ":" f))
           (desc (concat f " (dired)")))
      (org-add-link-props :link link :description desc)
      link)))

これで、またEmacsに引きこもれますね!!

DiredやOrg-modeのテーブルをシマシマにするstripe-bufferの紹介

表形式の情報が単色の画面に羅列されていると、行方向の情報を追うのが結構大変です。

その点, MacのfinderやiTunesなどは行がシマシマになってて、とても見やすいです。

features_player_organize_screen.jpg

これ、Emacsにも欲しいなーと思ったら、 stripe-buffer というものがありましたので、紹介します。

stripe-bufferとは

diredや、org-modeのテーブルをシマシマにしてくれます。

sabof/stripe-buffer

diredだと

screenshot-08.png

org-modeでは、こんな感じになります。

screenshot-09.png

自動的にシマシマにするには それぞれのフックポイントにひっかけとけば良いみたいです。

(add-hook 'dired-mode-hook 'stripe-listify-buffer)
(add-hook 'org-mode-hook 'turn-on-stripe-table-mode)

Dired厨の方などは、とかく便利だと思います。

Emacs上のPDFでisearch,occur,imenuとかなんでもしてしまうpdf-toolsの紹介

Emacsでなんでもしてしまいたい、という需要は今でも少なからずあるようで、Emacs23からはEmacs上でPDFを表示するためのdoc-view-modeが標準でバンドルされるようになりました。

Emacs 23でPDFを表示させる–新機能「DocView」を試す – builder by ZDNet Japan
Emacs で PDF/PS/DVI を閲覧する – とりあえず暇だったし何となく始めたブログ

TeXでの執筆作業やOrg-modeの文書をPDFでエクスポートする場合などなど、PDFのお世話になるEmacserは多いですが、世のEmacserは少なからずこう思ったはずです。

「これじゃない。」

要はこのdoc-view-mode、(ほぼ)見るだけしかできないというかなりのクソモードだったわけです。

せっかくEmacsを使っているのだからPDFをちゃんとisearchしたいし、occurもしたい。あわよくば、imenuとかも出してもらいたい、と世のEmacserは思うわけで、かくいう私も結局acrobat readerとかで見てました。

あー PDFをoccurとかisearchとかしてーなー そんなのどっかに落ちてないかなーと思ってたら本当に落ちてたので、紹介したいと思います。

pdf-toolsについて

pdf-toolsは、popplerを介してPDFをゴニョゴニョするためのEmacs拡張アプリです。

politza/pdf-tools

popplerについては、以下の記事が詳しいです。

Poppler – Wikipedia
Popplerについてちょっとだけ – なるひこの Linux Printing お勉強日記

動作環境ですがCがコンパイルできてdoc-view-modeが正しく動作してpopplerが動作すれば使えるのではないかと思います。手元のArchLinuxで元気に動いていますが、頑張ればWindowsとかでも動くかもしれません。Macは使ったことがないのでよくわかりません。

インストールについてはCのコンパイルなどの手順があるので多少面倒です。AURにPKGBUILDを置きましたので、ArchLinuxユーザの方はだいぶお手軽にインストールできると思います。

AUR (ja) – emacs-pdf-tools-git

インストール時のトラブルとしては、設定ファイルで package-user-dir を変更しているとautoloadの設定がうまくいかないようです。その時は、次のようにことごとくrequireすれば良いかと思います。

(require 'pdf-tools)
(require 'pdf-annot) 
(require 'pdf-history) 
(require 'pdf-info) 
(require 'pdf-isearch) 
(require 'pdf-links) 
(require 'pdf-misc) 
(require 'pdf-occur) 
(require 'pdf-outline) 
(require 'pdf-render) 
(require 'pdf-sync) 
(require 'tablist-filter)
(require 'tablist)

使い方

pdf-toolsはdoc-view-mode上で動作するコマンドと複数のマイナーモードで構成されています。とにかくいろいろなマイナーモードが作られています。列挙すると以下のとおりとなります。

  • pdf-misc-multipage-minor-mode
  • pdf-misc-tool-bar-minor-mode
  • pdf-isearch-minor-mode
  • pdf-misc-minor-mode
  • pdf-sync-minor-mode
  • pdf-annot-minor-mode
  • pdf-links-minor-mode
  • pdf-history-minor-mode
  • pdf-outline-minor-mode
  • pdf-misc-auto-fit-minor-mode
  • pdf-misc-menu-bar-minor-mode
  • pdf-annot-update-minor-mode-map
  • pdf-info-auto-revert-minor-mode
  • pdf-annot-list-follow-minor-mode
  • pdf-misc-context-menu-minor-mode

この他にもいろいろとコマンドもあり、全てを紹介するのは骨が折れそうなので、以降ではDDSKKのマニュアルPDFを題材にして、その中をいくつか紹介したいと思います。

pdf-isearch-minor-mode

名前からも想像できますが、PDF内部の文章をisearchするモードです。doc-view-modeでもisearchはできるのですが、本文に色がつかなかったりとてもisearchといえる代物ではありませんが、pdf-isearch-minor-modeではちゃんと色をつけることができますし、C-s、C-rで移動もできてインクリメンタルな検索もできる、本来のisearchができます

pdf.png

pdf-occur

occurです。ふつーにoccurできます。

どうやらoccurバッファでもソートだの何だのいろいろできるみたいですが、あまりいろいろあって全て試せていません。 screenshot-04.png

pdf-misc-auto-fit-minor-mode

ウィンドウの大きさに合わせて、pdfのサイズを自動的に変えてくれるマイナーモードです。

pdf-misc-crop-margins

PDFの余白をカットします。

pdf-misc-multipage-minor-mode

一つのpdfで連続した複数のページを複数バッファに並べて表示するモードです。follow-modeのPDF版といえばわかりやすいかもしれません。

前述の pdf-misc-auto-fit-minor-mode pdf-misc-crop-margins との組合せがかなり強力で、PDFをじっくり見たいときは専らこのスタイルで見るようになりました。

screenshot-06.png

ワイドスクリーンが主流の昨今、縦長が圧倒的に多いPDFは@matuuさんが紹介されたように横にPDFを並べることで一覧性がかなり高まります。これだけでもインストールする価値があるのではないかと思います。

大きなディスプレイでPDFなどの文書を読むときは横スクロールが最強だと思うので実装してみた – Dマイナー志向

pdf-outline-minor-mode

imenu相当の機能ですが、バッファ内でサブツリーの表示をトグルできたり、imenuよりいろいろと便利です。outline-modeをベースに作られているようで、ツリー間のジャンプなど一部outline-modeの機能がそのまま使えます。

screenshot-05.png

pdf-sync-minor-mode

SyncTeXを使ってTexファイルとPDF間の場所の同期がとるためのマイナーモードのようです。GNOMEのサイトにあった以下の動画がとてもわかりやすかったです。

久しくTeXを使っていないので試していませんが、うまく動作するのであればかなり便利なのではないかと思います。

pdf-links-minor-mode

pdfのリンク機能のためのマイナーモードです。

pdf-annot-*の関数とかマイナーモード

PDFにアノテーションをつけたり、つけたアノテーションをリスト表示したり保存したりします。

日本語対応

デフォルトのpopplerでは日本語の検索等ができませんが、poppler-dataをインストールすれば、日本語も何の問題もなく使えます。以下のスクショでは「漢字」をoccurしているところです。ただしmigemoはうまく使えませんでした。もしかしたらmigemo.el側で対応すればどうにかなるかもしれません。

screenshot-07.png

やっとPDFビューワになれたEmacs

Emacsでこんなことまでできるのかーと久し振りにびっくりしました。今ではかなり快適にPDFを見ることができてます。

ほかにもいろいろ機能があるようで全然紹介しきれてません。今回紹介しなかった機能としてはhistoryをさかのぼる機能などもあります。 M-x pdf-tools-help して確認してみるのもいいかもしれません。

気になった点としては、大きなPDFを閲覧している時などでoccurしたりするとブロックしてしまう点です。deferredなどを使ってasynchronouslyにPDFを見れると、さらに素敵な生活が待っていそうです。

ウィンドウ管理がイマイチなのも気になりました。e2wmやpowin、direxなどで構造化してやると良さそうです。

いずれにしろまだ全然使いこなせてません。いろいろ触ってみてまた感想なぞ書くかもしれません。

calfwとorg-gcalの連携

昨日、紹介したorg-gcal.elですが、calfwと連携して使うことでさらに便利に使うことができます。

Emacs用カレンダー calfw v1.2 リリース – 技術日記@kiwanami

というわけで、今回はcalfwとの連携について紹介します。

新しいcalfw-sourceについて

もともとcalfwにはOrg-mode用のcalfw sourceがすでに定義されています。

calfw の org-agenda 対応 calfw-org.el – 技術日記@kiwanami

kiwanamiさんが書かれているように定義ずみのcalfw sourceはorg-agendaをベースにしています。org-agendaはorg-modeのタイムスタンプデータを管理するにとても便利なツールですが、タスク管理を指向しているきらいがあってスケジュールを管理するには何かと不都合です。

個人的な理由とすれば、せっかくorg-elementの勉強をしたので、org-elementベースのcalfw sourceを書いてみたかったというのもあります。

というわけで、まずはそちらからすでに紹介していこうと思います。

新しいOrg-modeのcalfw-sourceはすでにcalfw本体にマージしてもらっているのですでにMELPAなどでインストールされている方はアップデートすればよいかと思います。

もしまだcalfwを使われてないのであれば、el-getなりpackage.elなりでインストールしてください。Debian/Ubuntuユーザの方であれば、aptでもインストールできるようです。

Debian – sid の emacs-calfw パッケージに関する詳細

新しいcalfw-souceは、対話的に呼びだせる関数を準備していないので、自分でsourceを組み合わせて関数を作る必要があります。

設定例としては次のようになるかと思います。

;;cfw:org-capture-templateはcalfw-orgを
;;requireする前に評価しておいてください。
(setq cfw:org-capture-template
      '("c" "calfw2org" entry 
        (file "~/schedule.org")
        "*  %?\n %(cfw:org-capture-day)"))

(require 'calfw-org)

(defun cfw:open-calendar ()
  (interactive)
  (let ((cp
         (cfw:create-calendar-component-buffer
          :view 'month
          :contents-sources
          (list 
           (cfw:org-create-file-source
            "仕事" "~/schedule.org" "#268bd2")
           (cfw:org-create-file-source
            "遊び" "~/yaschedule.org" "#859900")))))
    (switch-to-buffer (cfw:cp-get-buffer cp))))

これらを評価して、 cfw:open-calendar を実行すると次のようなカレンダーが出てくるはずです。 予定をクリックするか、予定の上にキャレットを置いている状態でエンターキーを押すと該当のOrgファイルに飛びます。この動作は既存のcalfw sourceと同様の動作になります。

screenshot-03.png

サンプルのOrgファイルを二つgistに置きましたので、実際に試してみてください。

org-gcalとの連携

新しいcalfw-sourceでは、org-captureを介して簡便に予定を登録できるようにしました。 上の設定例では cfw:org-capture-template に代入した値で保存先のファイル名や割りあてるキーを決めています。

要は、org-capture-templateに新しいテンプレートを追加しているわけです。

上の設定がなされていれば、新しい予定を登録した日にちにフォーカスがあたっている状態で、c を押すと次のようなバッファがポップアップしてくると思います。

screenshot-06.png

後は、予定の内容を諸々書きこみ C-c C-c とすればOrgファイルに書きこまれます。この時にorg-gcalがすでにインストールされていれば、Googleカレンダーにも自動的に予定が登録されます。

まとめ

昨日から今日にわたり、Emacs、Org-mode、Googleカレンダーを使ったスケジュール管理法を紹介させてもらいました。

今回の日記をきっかけに素敵なOrgersが増えてくれれば幸いです。

Org-modeとGoogle calendar間で予定をやりとりするorg-gcal.elというのを作りました

久し振りにちゃんとしたelispを書いた気がするので、ちゃんと紹介しておこうと思います。リポジトリはこちらになります。

作ったきっかけ

予定を長いことGoogleカレンダーで管理しています。ブラウザ上の見た目もすっきりしていて、とても使いやすいのですがスケジュールの入力はマウスをカチカチさせることが多くストレスフルでした。

そこは手になじんだEmacsから入力した方が便利なはずです。@kiwanamiさんのkiwanami/emacs-calfw と連携して動くelispなどを書いたりして、どうにかこうにか入力してました。

calfwからGoogleカレンダーを編集するcalfw-gcal.elを書いてみた – sheephead

ところが、これもいろいろとボトルネックがありました。Googleカレンダーのデータをcalfwに取りこむのにcalfw-icalを使っていたのですが、取りこむ際にどうにもブロックしてしまいます。また、ローカルにキャッシュを持たない設計になっていたので、日々ブロックしておりました。

拙作calfw-gcal.elもいろいろ問題がありました。最初はgoogleclを使ってデータの送信をしていたのですが、Windows環境だと設定が結構面倒でした。なのでgdata-python-clientを直接触るように改変もしてみたのですが、Windows特有のPythonまわりのトラブルなどもあり、グダグダになっておりました。滅せよ Windows。

org-mode とスケジュールの連携も興味の対象でした。自分のところでは、タスクとスケジュールを分けて整理していて、しかもタスク管理はorg-modeでやっていました。そういったこともあって、スケジュールとタスクをorg-modeで統一して管理したいなあと思っておりました。

org-gcal.elでしたかったこと

もっとも重要視したのはサクサク動くことです。同じようなことを目的としているアプリにorg-caldavというのがありましたが、この条件を満たすものではありませんでした。

本質的な目的でないものとすれば、ここ数年で出てきた便利そうなライブラリを使ってみたいというのもありました。MELPAができたおかげでライブラリを導入するコストはかなり軽減されました。その影響か、MELPAでも便利そうなライブラリがかなり登録されています。

Org-modeは以前から開発は活発でしたが、最近の大きな変化とすれば昔から懸案だったOrgフォーマットへのアクセスAPIがかなり統一され、Orgアプリ開発者にとってとても良い環境になりつつあります。

と例のごとく前置きがだいぶ長くなってきたので、そろそろ使い方について書いておきます。

インストール

MELPAでお願いします。

設定

org-gcal.elではGoogleカレンダーとの通信にGoogleが提供してるAPIを使っていて、事前にプロジェクトの登録とOAuthによる認証をすませておく必要があります。 まずは、Google Developers Consoleでプロジェクトを作って、 client IDと client secretを取得してください。

Google+ APIの事例ですが以下の記事が参考になるかもしれません。

天使やカイザーと呼ばれて » OAuth2.0によるGoogle+ APIのアクセス方法

次に、Google カレンダーの設定ページでカレンダーIDを確認します。デフォルトではGmailのメールアドレスがカレンダーIDとなっています。後は設定ファイルに次のように書くとよいです。

(require 'org-gcal)
(setq 
 org-gcal-client-id "your-id-foo.apps.googleusercontent.com"
 org-gcal-client-secret "your-secret"
 ;;カレンダーIDをキー、スケジュールを取りこむOrgファイルをvalueとするalist
 ;;複数登録可
 org-gcal-file-alist '(("your-mail@gmail.com" .  "~/schedule.org")
                       ("another-mail@gmail.com" .  "~/task.org")))

使い方

準備しているコマンドは主に二つだけです。

org-gcal-fetch でGoogleカレンダーのスケジュールをOrgファイルに持ってきます。

org-gcal-post-at-point で現在のポイントにあるOrgエレメントをGoogleカレンダーに送信します。編集した既存のスケジュールを送信する場合も同様の操作となります。

トークンの更新は古くなったら自動的に更新されるようになっているのですが、たまに通信に失敗するなどしてトークンの更新がうまくいかなかったりします。 その際は org-gcal-refresh-token を実行してトークンを更新してみてください。

カスタマイズ

デフォルトでは当日から過去30日、未来60日の予定をfetchするようになっています。変更した場合は org-gcal-down-days org-gcal-up-days を適宜変えてください。

org-gcal-down-days を越えた過去のスケジュールは自動的にArchiveされるようになっています。 org-gcal-auto-archive をnilにしておくとArchiveされなくなります。

org-gcal.elによる通信成功の可否を通知する仕組みを実装しています。 デフォルトでは、ミニバッファに表示されるようになっていますが org-gcal-use-notifications をtにしておくとnotifications.elを介したデスクトップ通知、 org-gcal-use-gntp をtとすることでgntp.elによるデスクトップ通知に切り変わります。

gntp.elについては、いずれ詳しく紹介したいと思いますが、Growlが用いているデスクトップ通知用のプロトコルを使って通知するアプリです。自分のところでは、主にこれを使っています。

ただ、デスクトップ通知の機能については、alertを使った仕組みに切りかえることを検討しているところでいろいろと変わってくるかもしれません。

使ってみた印象

自分のところでは非常に軽快に動いています。要因としては、GoogleAPIを通じて最低限の情報しかやりとりしていないということと、deferred.elによるasyncがとても有効だったと感じました。

スケジュールの情報をローカルに保存することができるようになったのでcalfwとの連携も非常に快適になりました。この連携については、calfw-orgにちょこっとcontributeさせてもらったので、別の機会に紹介したいと思います。

ただ、アプリの登録やIDの取得がちょっと面倒に感じます。公開可能なclient IDと client secretがあれば、この手間はなくなるのでどなたかclient IDと client secretを提供していただけるとありがたいです。

作ってみた印象

久し振りに作ったので、時間はかかりましたが非常に快適に作ることができました。なんといっても@tkf さんのemacs-requestが非常に素晴らしかったです。deferredにも対応していてたいした苦労もせずasyncなアプリを作ることができました。

org-modeに標準で添付されるようになったOrg-elementもOrgファイルをパースするのにとても助かりました。

request.elについてはtkfさんがこれまた素晴しいドキュメントを作られているので、説明することもないですが、Org-elementについてはいずれ詳しく紹介する機会を作りたいと思います。

今後の予定など

まずは、いろいろな方に使っていただいてfeedbackを得たいと思っています。機能面ではスケジュールの削除、スケジュールの同期に相当する機能がありません。モチベーションが高いうちにどうにかしたいのですが、本業が年度末モードに入ってしまうと停滞してしまうかもしれませんがご容赦ください。

Rのデータビューワ ess-R-data-view.elというのを作りました

Rを使っているとオブジェクトの中に入っているデータを確認したり眺めたりしたいと思うことが頻繁にあります。

こういった欲求を満たすためにess-R-object-popup.elというものを以前作ったのですが、これはあくまでオブジェクトのサマリーをチラ見することが目的であって、中身を細かく確認するものではありませんでした。 統計量を見るだけでもデータの特徴をある程度把握することはできるのですが、やはり生のデータを目視するのにはかないません。

生データを目視したいという需要は少なからずあるようで、RStudioでもデータビューワがあります。一方のEmacsですが、ESSにはオブジェクトを俯瞰できるrdiredというものがあるものの生のデータを眺める機能はなくて、Rのインタラクティブシェルでズラズラ出力しては眺めるという程度くらいしかできませんでした。まあこれでも良いんですがテキストが整形されているだけですし、どんどん流れていってしまうので、操作性も良くありません。

というわけで、こういった不満を解消すべくデータビューワを作ってみました。ess-R-data-view.elといいます。

インストール

本体はGitHubに置いてます。

myuhe/ess-R-data-view.el · GitHub

いろいろと依存しているのでEmacs24以降であれば、package.elを使ってインストールするのをおすすめします。MELPAに登録してもらってますので、次のような感じでpackage-archivesにMELPAを登録しておけば、、、

(add-to-list 'package-archives
  '("melpa" . "http://melpa.milkbox.net/packages/") t)

(package-initialize)

M-x list-packages などとして ess-R-data-view を選べばサクッとインストールできると思います。

使い方

M-x R としてRのインタラクティブシェルを起動させます。この状態でデータ名の上にキャレットを置いた状態で M-x ess-R-dv-ctable を実行します。

例えば、バンドルされているデータセット、irisでこのような操作をすると、次のようなバッファがポップアップしてくるかと思います。このバッファの中ではおなじみのn,p,f,b またはj,k,h,lに移動のコマンドがバインドされています。また、ヘッダーも固定されているので、ヘッダーとデータの対応が非常にわかりやすくなります。

https://raw.github.com/myuhe/ess-R-data-view.el/master/image/ctable.png

ess-R-data-view では、データフレームとマトリックスでこのような表が表示されるようになっています。ベクトルなど対応していないデータの場合、次のようなエラーメッセージがポップアップします。

https://raw.github.com/myuhe/ess-R-data-view.el/master/image/popup.png

M-x ess-R-dv-ctable の代わりに M-x ess-R-dv-pprint を実行すると次ようなバッファがポップアップします。

https://raw.github.com/myuhe/ess-R-data-view.el/master/image/pprint.png

このバッファにはボーダーもありませんし、ヘッダも固定されていませんが、データが多いときに軽快に動作するので重宝するのではないかと思います。データの大きさ次第でこちらを選択すると良いかと思います。

この機能を使いはじめると頻繁に使うことになるかもしれません。そうなるといちいちミニバッファにコマンドを入力するのが面倒くさくなってきます。自分のところでは、次のような感じでキーバインドさせて使ってます。

(define-key ess-mode-map (kbd "C-c v") 'ess-R-dv-ctable)
(define-key ess-mode-map (kbd "C-c V") 'ess-R-dv-pprint)

これからの予定

データフレームとマトリックスにしか対応していないので、他のデータをどうしようかと少し考えていました。特にリストとか配列あたりはhelmインターフェイスで掘っていって最後はess-R-data-viewで表示させたりすると素敵そうです。 とは言うもの現状でかなり満足してしまったというのと、そもそもRをめっきり使わなくなってしまったので、恐らくこれ以上機能を追加することはないと思います。

ctableはすごいということを言いたかった

今回のess-R-data-view.elを作りはじめたのは、実はctable.elを使って何か作ってみたかったというのがとても大きい理由だったりします。 実際、使ってみてかなり素敵なライブラリでした。ctable.elについては、また別の機会にちゃんと書こうと思います。

Google Reader代替はEmacsなのではないでしょうか

Google Reader終了のお知らせは、いち愛用者として非常に衝撃的でした。

Google Reader終了 ― 結局のところ「RSS」は一般の人が必要とする情報収集手段ではなかった | TechCrunch Japan

なぜGoogle Readerだったのかと改めて振り返りますと、シンプルな作りもさることながら、やはり豊富なショートカットが重要なファクターだったような気がします。 フィードの移動や既読の管理など、Emacsさながらのキー操作でサクサク読み進むことができました。

ん?「Emacsさながら」?

それ、いっそのことEmacsでよくね?

という結論に達しそうなので、Emacs上でRSSを読む方法について調べてみました。

newsticker

newstickerはEmacsに同梱されているRSSリーダーです。既読の管理や記事間の移動、ブラウザで開くなどなどGoogleReaderでできていたこともひととおりはできそうです。また、非同期でRSSを読みこめるというのも、なかなか嬉しいポイント。Emacsで使うなら、まずこれから試してみると良いのかも。

賢者の漬け物石: Emacs 上で RSS フィードをチェックする (Newsticker)
Emacs 内で使える RSS reader をちょっと使ってみる – とりあえず暇だったし何となく始めたブログ
EmacsWiki: News Ticker

Gnus

Gnusといえば、Emacs同梱のニュースリーダーなわけですが、RSSリーダーとしても機能します。バックエンドとして用意されているnnrssを使ってopmlを読みこめば、簡単にフィードを登録することができます。使うには

(require 'nnrss)

として、M-x nnrss-opml-import を実行。読みこみたいOPMLを指定すれば、グループモードに読みこんだRSSの一覧が出てきます。Gnusについてはkhikerさんが詳しい記事を書かれているので、そちらを見ていただくのが良いかと思います。

GnusをRSSリーダとして使うメリットとしては、メールの読みかきとシームレスに使えるというのと、Gnusを常用しているならば、使いかたをいちから覚える必要がないということでしょうか。

Gnusを全く使ったことがないというのであれば、あえて選択する意味はないかもしれません。

org-feed

あのorg-modeもRSSリーダーとして機能します。わざわざOrg-modeを使わずとも良い気がしますが、Org-modeジャンキーはとにかくOrg-modeで構造化しないと気がすまないのです。 使いかたとしては、org-feed-alistにフィードを連想配列としてつっこんでいけば良いようです。

MobileOrgと合わせて使えば、iPhoneやAndroidと情報を共有できそうですね。うーん、これは以外と良いかも。

org-feed.el – add RSS feed items to Org files
Emacs org-modeを使ってみる: (22) RSSフィードを取り込む – 屯遁のパズルとプログラミングの日記

ニュースグループとして読んでみる

gweneというサービスを使うとRSSをニュースグループに変換することができます。

Read RSS Feeds Via NNTP

これを使えば、MewやWanderlustなどのMUAやemacs-w3mのshimbunでRSSを読むことができます。

フィードの登録がやや面倒ですが、各アプリに使いなれている方はこういった方法もありますよ、ということで。

Richard Hoskins – Google+ – I’m using Gnus now as a replacement for Reader.  asjo h…

Emacsでいい気がしてきた

めぼしいものをザクッと紹介してきました。Emacs上でRSSを読む最大のメリットは周辺との強力な連携にありそうな気がしています。

スクラップしたい記事があれば、org-captureでサクッとスクラップ、evernote-modeでevernote-modeに保存することもできます。

記事の中にeispがあれば、読みながらevalみたいな芸当もできますね。

Dropboxのようなサービスを利用すれば、複数端末での同期も問題なさそうです。

というわけで、EmacsはRSSリーダーでした。

Emacs温泉に行ってきました

150972647.v1345990421.jpg?size=450.jpg

昨日から今日までEmacs温泉に行ってきました。

とても楽しいイベントだったのでその時の模様を報告しておきます。全体の流れや出席者は以下。

Emacs / Lisp 温泉 : ATND

自己紹介, LT

出席者から何かネタなどを披露。まずkiwanamiさんからctableの話。Emacsに表を描画するためのフレームワークでソートや各行の色分け、列幅の切りつめなどにも対応してとにかく高機能。聴衆からは、「Excelのあの機能はないんですか?」的な質問が。皆さんExcel大好きです。

nom4476さんからは、Org-modeに合わせたmmm-modeのポーティングの話。org-modeとmmm-modeの相性があまり良くないというのは、org-babelと連携させたくて以前調べた時に理解していたのですが、今回は逆の発想で、メジャーモードの中でorg-modeを動かそうというアプローチ。

結果、至るところがorg-modeになったとのこと。素敵ですね。

3人目は、vimmerのaharisuさんからgaucheの補完プラグインの話。SchemeでGacheのコードをパースして補完候補を生成してVimに食わせてるんだとか。で、今度はEmacsにも対応させたいということで、それはS式であげれば良いだけなので、す極楽でしょうなどなど。

その次は僕から、Emacsは画像とかブラウザとかを埋めこみできて素敵ですね、という話をちょっとさせてもらいました。最近はあまり使ってなかったxwidgetブランチ(awesomeで使うと即落ちるので)をこのネタだけのためにコンパイルして望みました。

次はsyohexさんからwebsocket.elの話。ブログで拝見してはいましたが、実際に見てみるとタイムラグもなく実にスムーズに動いていました。その昔js2-modeで有名なyeggeさんが自身のブログでEmacsのこれからのライバルはブラウザだということを書かれていてなるほどなーと思っていましたが、xwidgetなり、websock.etでそれすら使役できるようになると、夢が広がるなーと思いました。

最新のwebsocket.elで日本語入力に難ありらしいのですがどうやらマルチバイト関係の問題だったとのこと。海外の方が作られてものでよくありますよね。僕も悩まされたことがあったので(こちらとか) 日本人が積極的にこういうところに関わってかないといけないですねーなどと考えてました。

最後はkozo2さんからevilというVimバインディングエミュレーションアプリとhelmの紹介。evilってネーミングがまた何とも。helm-M-xがとても便利ですねという話で、とても同感できました。右にキーバインドがチラリと見えるのが便利なんですよね。

aanything/helmは人によって、使い方が本当に変わるなーとも思いました。

モクモクしたり、激論変わしたり

いろいろあったんですが、わさお君の「CPU先輩パねえす」発言で、もうそんなことはどうでも良くなってですね。

発表会

プリキュア鑑賞を堪能した後、発表会をスタート。kiwanamiさんからは開発中のMVCフレームワークの紹介。チラリと見せてもらいましたが、誰もが使わないwidgetがとても極楽に利用できそうな雰囲気で完成がとても楽しみです。

次に僕からは、org-modeで書けるo-blogという静的サイトジェネレータをちょろっと使ってみました、という話と、半ばネタ的に作ったAZIKの入力矯正アプリを紹介させてもらいました。後日日記でも詳しく紹介する予定です。発表についてはなかなかウケてもらえて良かったです。

syohexさんからは、toraのメジャーモード作ったよ、という話。

プログラミング言語 Tora を公開した – tokuhirom’s blog.

行きがけの新幹線でほぼできていたそうですが、ちゃんとメジャーモードを書いたことがないのでいずれ何か書いてみたいです。

nom4476さんからは、octpressをorg-modeで書きましょうというお話。もう手捌きが尋常ではなくて、攻殻機動隊に出てくる指が30本くらいある博士を思いだしました。

それぞれの記事は早速kiwanamiさんのctableで管理できるようになっており、さすがの一言。

皆でEmacsの話したり、温泉入ってのんびりしたりと、とても楽しいひとときでした。企画してくれたkiwanamiさんありがとうございました。

次回開催も期待です。 今回参加できなかったという方も是非参加してみたり、企画してみると良いと思います。

150972630.v1345990405.jpg?size=450.jpg

玉名を旅してきた

4月から異動でお勤め先が玉名になったのですが、玉名のことを全然知らなかったので玉名を旅してみました。

まず、玉名地域の最高峰、小岱山山系筒々岳に登頂。登山口は林道小岱山線沿いの中央登山口。ルートはこんな感じ。


より大きな地図で 筒々岳登山 を表示

片道50分ほどの初心者向けコースです。

この時期の登山は植物にもいろいろと変化があって、なんだかウキウキします。

132628588.v1335783524.jpg?size=450

132628708.v1335783543.jpg?size=450.jpg

132628736.v1335783551.jpg?size=450.jpg

132628664.v1335783535.jpg?size=450

玉名といえば、やっぱりラーメン。ということで、下山後は駅前の「黒龍」というラーメン屋さんに行ってきました。

132629098.v1335783641.bin?size=450

玉名ラーメンは久留米ラーメンと熊本ラーメンの間の子な感じで熊本ラーメンとは、ちょっと趣が違います。「黒龍」のラーメンもどっちかといえば、久留米ラーメンに近い感じです。替え玉もあるし。あと値段が450円。安い。

132628783.v1335783560.jpg

食欲を満たした後は、玉名温泉でゆっくりと。良いところですね、玉名。今度は海のものを食べてみようと思います。

Emacs24で標準となるパッケージ管理システムとその周辺まとめ

Emacs24のリリースも近づきつつある(ソース俺)今日この頃、皆様いかがお過ごしでしょうか。

私はと言いますと、4月から異動で新しい職場となりEmacsの利用頻度がガクーッとさがってしまいました。というわけで、ここ最近Emacsをいぢる機会もあまりなかったのですが、次の記事が目につきまして

It’s just same as dust ahead of a wind: el-get を使って Emacs でパッケージ管理

いやはや、これはだいぶ誤解されているぞ、と。これはいかん(何が)と思い、Emacs24のパッケージ管理システムについて書いておくことにしました。

Emacs24で標準となるパッケージ管理システムとは

Emacs24では、標準でパッケージ管理システムが同梱されます。これはpackage.elにより提供されていて、Emacs23で利用したい時は以下のpackage.elを使うと良いです。

package.el

このパッケージ管理システム、実は結構前からあったにも関わらず、全くパッとしませんでした。

これは一重にパッケージのリポジトリサイトELPAに原因があります。ELPAではパッケージを登録するのに管理者にメールで依頼、というとってもレガシーな手法をとっていて、このため登録するパッケージが全く増えなかったためです。

その間、Emacsには決定打となるパッケージ管理システムがなく、auto-installやel-getなどパッケージ管理システムが乱立することとなってしまいました。

ところが、Emacs24でpackage.elが標準のパッケージ管理システムとなることが決まってからその周辺はかなり賑やかになってきました。ELPAを補完するようなリポジトリサイトができてきたのです。以降ではそのリポジトリサイトを紹介していきます。

Marmalade

MarmaladeはELPAと違い誰でも自由にパッケージの登録ができるリポジトリサイトです。

Marmalade: Spreadable Elisp

以前の日記でもMarmaladeについては詳しく書きました。

Marmaladeはお手軽感が素敵なEmacs Lispのリポジトリサイト
elispリポジトリサイト、Marmaladeの新着情報をRSS化した

Marmaladeの良いところは何といっても誰でも気軽に登録ができるというところですが、他もいろいろとメリットがあります。

例えば、ヘッダー部分に記述することによって、パッケージ間の依存関係も整理することができます。また、Marmalde自体のソースコードも公開されているため、作ろうと思えば、誰でもオレオレMarmaladeを作ることができます。

MELPA

Marmaladeは、確かにお手軽ではあったのですが問題点もありました。バージョン番号などパッケージに必要な情報はEmacsで慣習的に使われるコメントヘッダーからもってくるのですが、この部分が適切に書かれていないと登録することができませんでした。

また、パッケージをアップデートする時は、新しいバージョンをMarmaladeに登録し直す必要があり、開発者にはちょっとばかり面倒でした。

この点をel-getはスマートに解決しています。リポジトリはパッケージのソースコードリポジトリ自体となっており、そのVCSにコミットすることでパッケージもアップデートされることになります。そして、MELPAはel-getのこの特徴をうまく利用したリポジトリといえます。

MELPA

MELPAは、el-get同様パッケージのvcsが登録されていて、コミットされた日付がバージョン番号となります。そのため、MELPAに登録されればパッケージ更新のためにソースコードを改変する必要もありませんし、コミットすることでリポジトリのバージョンも自動的に更新されます。

また、MELPAに登録されているパッケージ自体もel-getライクなrecipeで管理されています。

melpa/recipes at 2253142c4c3c2d771607063b967284b91e7af079 · milkypostman/melpa

というわけで、登録してもらいたいパッケージがあればrecipeを作ってpull reqすると良いです。私も常用しているパッケージをいくつか追加してpull reqしたら、即マージしてもらえました。

Re: Emacs でパッケージ管理

アップデート用のコマンドがありません

最新のpackage.elではすでに実装されています。また、過去のバージョンを残すことでダウングレートすることもできます。

elispの側から一定の方法に則って登録してあげる必要がありますので

MElPAではelispを改変する必要はありません。el-get同様recipeを追加するだけです。

膨大な過去資産が含まれる emacswiki を直接利用できません。

同じくMElPAでは、Emacs wikiのパッケージを登録することができます。

package.elで良いんではないでしょうか

というわけで、今のpackage.elとel-getを比較するとだいたい同様のことはできてしまいます。強いてあげればel-getのafter相当の機能がpackage.elにはありませんが、その辺りはeval-after-loadなりhookシステムを使えば、柔軟に設定できるので、個人的にはあまり魅力的ではありません。

むしろ、package.elには 依存関係も記述できる、インストール用のUIがある、何より 標準(予定)であるというメリットがあります。

てことで、パッケージ管理システムはpackage.elで十分なんではないかなーと思っています。

2012-04-28 追記

el-getについてコメントいただいたので修正しました。