helm-migemo 20151009.2056(in MELPA)
Migemo plug-in for helm

概要

<2015-10-03 Sat> helm本体にhelm-migemo-modeとして組み込まれたので不要です。

<2015-09-07 Mon> 8/21の変更 の煽りを受け、設定を更新しました。「補足」追加。

helm-migemo.el は、かつて僕が作った anything-migemo.el
myuheさん がhelmに移植したものです。

これを使えばhelmのMigemo対応情報源にてMigemo検索できるようになります。

しかし、helmが lexical-binding 対応になったときから
そのままでは動作しなくなってしまいました。

本設定を使えば引き続きMigemoで絞り込めるようになります。

Migemo対応情報源ではMigemo使えるが反面、
正規表現が無効になってしまいます。

helm-swoop などではそれが顕著に出てくるので注意してください。
<2014-12-25 Thu> Emacs Advent Calendar 2014にてhelm-swoopについて書きました!

情報源をMigemoに対応するには(migemo)を加えます。
helm-bmの例を参考にしてください

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてhelm-migemoを使う方は
以下のコマンドを実行します。

M-x package-install helm-migemo

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name helm-migemo

設定 helm-migemo-fix.1.el(以下のコードと同一)

(require 'helm-migemo)
;;; この修正が必要
(with-eval-after-load "helm-migemo"
  (defun helm-compile-source--candidates-in-buffer (source)
    (helm-aif (assoc 'candidates-in-buffer source)
        (append source
                `((candidates
                   . ,(or (cdr it)
                          (lambda ()
                            ;; Do not use `source' because other plugins
                            ;; (such as helm-migemo) may change it
                            (helm-candidates-in-buffer (helm-get-current-source)))))
                  (volatile) (match identity)))
      source))
  ;; [2015-09-06 Sun]helm-match-plugin -> helm-multi-match変更の煽りを受けて
  (defalias 'helm-mp-3-get-patterns 'helm-mm-3-get-patterns)
  (defalias 'helm-mp-3-search-base 'helm-mm-3-search-base))

実行方法

動作させるには、migemoの設定をロードしてください。

$ wget http://rubikitch.com/f/helm-migemo-fix.1.el
$ emacs -Q -f package-initialize -l your-migemo-settings.el -l helm-migemo-fix.1.el

20141219095040.png
Fig1: Migemoで絞り込み

<2015-09-07 Mon>補足:なぜ関数再定義が必要か

Twitterで helm-compile-source--candidates-in-buffer の修正を外すと動作した
という声がありましたが、この修正は必要です。

確かに修正を施さなくても動く場合がありますが、
candidates-in-bufferは動作しません。

(helm '(((name . "candidates")
         (candidates "ほげ" "ふが" "hoge")
         (migemo))
        ((name . "candidates-in-buffer")
         (candidates-in-buffer)
         (init . (lambda ()
                   (with-current-buffer (helm-candidate-buffer 'global)
                     (insert "ほげ\nふが\nhoge\n"))))
         (migemo))))

上記のテストコードにおいて、hogeと入力したとき
双方のsourceともに「ほげ」「hoge」と表示されるのが正しいです。

修正を外した場合は後者の「ほげ」が表示されません。

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。