- helm-migemo 20151009.2056(in MELPA)
- Migemo plug-in for helm
概要
8/21の変更 の煽りを受け、設定を更新しました。「補足」追加。
helm-migemo.el は、かつて僕が作った anything-migemo.el を
myuheさん がhelmに移植したものです。
これを使えばhelmのMigemo対応情報源にてMigemo検索できるようになります。
しかし、helmが lexical-binding 対応になったときから
そのままでは動作しなくなってしまいました。
本設定を使えば引き続きMigemoで絞り込めるようになります。
Migemo対応情報源ではMigemo使えるが反面、
正規表現が無効になってしまいます。
helm-swoop などではそれが顕著に出てくるので注意してください。
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
Fig1: Migemoで絞り込み
補足:なぜ関数再定義が必要か
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」と表示されるのが正しいです。
修正を外した場合は後者の「ほげ」が表示されません。
本サイト内の関連パッケージ
- helm - Helm is an Emacs incremental and narrowing framework
- migemo - Japanese incremental search through dynamic pattern expansion
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。