helm-migemo.el(レビュー) は、 helmMigemo(レビュー) を使うことで
ローマ字で日本語文字列の候補選択を行う日本人必携のパッケージです。

しかし、 match-part 属性という表示文字列の一部にマッチさせる機能に
helm-migemo.elとhelm.elが対応していないので
Emacs24.4標準のnadvice.el で修正しました。

なお、この修正が必要なのは以下のように
migemo 属性と match-part 属性を併用している
情報源を定義している場合のみです。

(defvar helm-source-foo
  '((name . "foo")
    (match-part . helm-foo-match-part)
    (migemo)
    ...))

helmパッケージに入っている情報源ではこのケースはないので、
自分で情報源を作っている人で困ったら以下のファイルをrequireしてください。

(require 'mylisp-helm-migemo-match-part-fix)

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

(require 'helm)
(require 'helm-migemo)

(defvar helm-match-part-use-migemo nil)
(defun helm-search-from-candidate-buffer--migemo-p (_ _ _ _ _ _ source)
  (setq helm-match-part-use-migemo (assq 'migemo source)))
(advice-add 'helm-search-from-candidate-buffer :before
            'helm-search-from-candidate-buffer--migemo-p)

;;; REDEFINED
(defun helm-search-match-part--use-migemo (candidate pattern match-part-fn)
  "Match PATTERN only on part of CANDIDATE returned by MATCH-PART-FN.
Because `helm-search-match-part' maybe called even if unspecified
in source (negation), MATCH-PART-FN default to `identity' to match whole candidate.
When using fuzzy matching and negation (i.e \"!\"), this function is always called."
  (let ((part (funcall match-part-fn candidate))
        (match-fn (if helm-match-part-use-migemo
                      (lambda (re str) (helm-string-match-with-migemo str re))
                    'string-match))
        (fuzzy-regexp (cadr (gethash 'helm-pattern helm--fuzzy-regexp-cache))))
    (if (string-match " " pattern)
        (cl-loop for i in (split-string pattern) always
                 (if (string-match "\\`!" i)
                     (not (funcall match-fn (substring i 1) part))
                     (funcall match-fn i part)))
        (if (string-match "\\`!" pattern)
            (not (funcall match-fn (if helm--in-fuzzy
                                   ;; Fuzzy regexp have already been
                                   ;; computed with substring 1.
                                   fuzzy-regexp
                                   (substring 1 pattern))
                               part))
            (funcall match-fn (if helm--in-fuzzy fuzzy-regexp pattern)
                          part)))))
(advice-add 'helm-search-match-part :override 'helm-search-match-part--use-migemo)
(provide 'mylisp-helm-migemo-match-part-fix)

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