EmacsからDashのドキュメントに素早くアクセスする

タイトルと直接は関係ないんだけど、最近、Alfredというツールを使い始めてみた。Alfredの説明は以下の記事に詳しく説明されているので見てみるといいかと。(Alfredのバージョンが2なのでAlfred2と言えばいいのか、そのままAlfredとだけ言えばいいのかよくわかんない)

Mac仕事効率化!Spotlightを完全に超えた神ランチャーアプリ「Alfred 2」の使い方とおすすめWorkflows10選。[Mac] | MacWin Ver.1.0

AlfredはSpotlightの代わりになるだけでなく、色々なアプリケーションと連携し、キーボード操作だけで色々なことが出来るようになる。(計算したり、ターミナルでコマンド実行したり、Stackoverflowの検索をしたり、ツイートしてみたり。イメージとしてはEmacsのAnythingやhelmみないな。)デフォルトで入っている連携機能だけだとあまりうれしくないので、Workflowという機能で色々なアプリケーションと連携していくことになるけど、この機能を使うにはライセンスを購入する必要がある。(記事を書いている時点だと1ライセンス17ユーロから)

連携するアプリケーションの一つにDashがあり、これを使うとどんなアプリケーションを使っていてもすぐにDashのドキュメントにアクセス出来るようなる。
流れとしては、Alfred2起動>検索クエリ入力>Enter>Dashの該当ページが開く、という感じ。
以下は、Rubyのstrftime関数のドキュメントを開くまでの様子をGifアニメにしてみたところ。

ちなみに、AlfredとDashを連携するには以下の場所からWorkflowをダウンロードしてインストールする必要がある。(その前に、Dashもインストールしておく必要があるけどね)

GitHub - zenorocha/alfred-workflows: A collection of Alfred 3 workflows that will rock your world

AlfredからGoのドキュメントも検索出来るようにする

ちなみに、上記のDashのWorkflow(v1.17)はGoに対応していないっぽいけど、簡単に追加することが出来る。

1. まず、Alfredの設定のWorkflowsをタブを開く。画面右上のプラスのボタンを押し、「Input」>「Scrept Fileter」と選択。

2. 次のような画面が開くので内容を入力。以下は、Go用に内容を入力したところ。他の言語の設定を開いてみて、同じようにするとよい。以下の例では色々変更しているように見えるけど、重要なのはKeywordのところを「go」にするところ。

3. すると、以下の様なアイコンが現れているので、でっぱってるところをマウスで引っ張り、、

4. ここにぐぐいと持っていく。

5. ここまでできたら、Alfredを起動し「go println」などと入力すると、他のドキュメントと同じように検索できるようになる。まぁ簡単。

EmacsからDashのドキュメントに素早くアクセス

さて、ここまででだいぶドキュメントへのアクセスが簡単になったわけだけど、EmacsからDashのドキュメントを開くdash-at-pointというElispもあるのを知ったので入れてみた。

これも例によって、以下流れで操作したところをGifアニメにしてみた。

  1. GoのPrintln関数のドキュメントを開く
  2. GoのListenAndServe関数のドキュメントを開く
  3. Elispのadd-to-list関数のドキュメントを開く


こんな感じでカーソルにある単語のドキュメントを一発で開くことが出来るようになる。

dash-at-pointのインストールはlist-packagesで行い、init.elに以下のようなキーバインドの設定を書いておくとよい。

;; dash-at-point
(global-set-key "\C-cd" 'dash-at-point)
(global-set-key "\C-ce" 'dash-at-point-with-docset)

例えば、go-modeで開いているバッファのどこかにカーソルをおいて、C-c dとするとDashのDocsetにgo:が指定された上で、カーソル上の文字が検索がされる。
なので、ドキュメントへのアクセスがAlfred>Dashのそれよりももう一声、早い。これは感動的。

ちなみに、C-c d(dash-at-pointを実行)したとき指定されるDocsetはメジャーモードと1対1で対応されているけど(go-modeのときは「go:」、ruby-modeのときは「ruby:」といった感じ)、Docksetの名前をカスタムした時や対応するメジャーモードとの対応が無いときなどは次のようにして変更(または追加)することができる。この例は、web-modeのときC-c dするとDashではDocset「html:」が指定された上で検索が実行されるようになる。

;; web-modeのときのDocsetはhtmlとする
(add-to-list 'dash-at-point-mode-alist '(web-mode . "html"))

さらに、web-modeのバッファからCSSのドキュメントを開きたいってこともあるともうので、そういう時は、C-c e(dash-at-point-with-docset)を実行すると、最初にDocsetを指定(この場合cssを指定)した上でドキュメントを開く、ということもできる。

Emacs+DashだけならAlfredは必要ないんだけど、AlfredがあったほうがEmacs使ってない時にもDashアクセスできるので一緒に入れておくといいかも。

この記事を書いた時にDashは2,000円で、Alfred2はFamily Licenseを買ったので27ユーロ(3,800円くらい)だった(2台以上のMacに入れるようならFamily Licenseがお得っぽい。1ライセンスは17ユーロ)それなりに投資は必要だけど、作業の効率はそれ以上に向上しそうな気がするので、なんで今まで使ってなかったのかなーと。反省。