header

2013年2月7日木曜日

helm-migemoが表示しない場合の対処法


私の環境だけかもしれませんがhelm-c-aproposの候補が
グローバルな変数のhelm-use-migemoをtにした時、
表示されませんでした。
helm-c-sourcesを色々調べていたのですが、
どうやら、helm-c-sourcesの中に(candiates-in-buffer)が
あるとうまく表示してくれないようです。

検証

以下に検証用のコードを用意しました。
scratchバッファなどに貼って評価すればためせます。

(setq helm-c-hoge
'((name . "I am Hoge")
(candidates . ("hoge" "fuga" "びよーん"))
;; (candidates-in-buffer)
(candidate-number-limit . 1000)
(action . (lambda (line) (insert line)))))

(defun helm-hoge ()
(interactive)
(let ((helm-use-migemo t))
(helm :sources helm-c-hoge
:buffer "*helm hoge*")))

(global-set-key (kbd "C-c C-u") 'helm-hoge)


コメントアウトしている`(candidates-in-buffer)'を
コメントアウトを外して評価すると私の環境では
うまく探してくれませんでした。

helm-c-aproposをどうするか

なのでhelm-c-aproposをどうしようか考えたのですが、
そもそも日本語入れねーし!って思ったので、
以下のようにアドバイスしてhelm-c-aproposでは利用しないようにしました。

(defadvice helm-c-apropos
(around ad-helm-apropos activate)
(let ((helm-use-migemo nil))
ad-do-it))


他にもhelm-use-migemoでうまく出ない候補はあるかもしれませんが
上の方法でエスケープはできます。
aproposの候補では、`(candidates-in-buffer)'を4つのソースから
使っていたので、テスト用にひとつそのソースを持ってきて
(candidates-in-buffer)をなくした状態で試したのですが、
なぜか候補がでませんでした。。。
他にもなにかあるかもしれませんが、最初の検証用の
コードで確認はできたのでhelm-migemoと相性が悪いのは
確かかと思います。

helm-in-buffer…

helm.elの説明をみると


Note that `(candidates-in-buffer)' is shortcut
of three attributes:
(candidates . helm-candidates-in-buffer)
(volatile)
(match identity)

のように書いてあるので
;; candidates-in-buffer
(candidates . helm-candidates-in-buffer)
(volatile)
(match identity)
を変わりに設定するのか?っと思い、
一個ずつ候補削って試したら、`(match identity)'
の部分が原因みたいです。


がんばりたい人は
helm-ff-match-fnを参考に
helm-string-match-with-migemoを入れるのがよいのでは
ないでしょうか?
私はダメ人間なので、アドバイスで逃げようと思います。。。

参考 migemoの設定

私のcmigemo用の設定です。
migemo-dictionaryはfindコマンドで探しました。

(require 'migemo nil t)
;; for C/Migemo
(setq migemo-command "cmigemo"
migemo-options '("-q" "--emacs" "-i" "\g")
migemo-dictionary "/usr/share/cmigemo/utf-8/migemo-dict"
migemo-user-dictionary nil
migemo-regex-dictionary nil
migemo-coding-system 'utf-8)

0 件のコメント:

コメントを投稿

Popular Posts

Blogger templates

Blogger news