C のソースコードなどを書いているとき、 yasnippet でフィールド編集 (TAB で次の位置にカーソルを移動できるアレ) をすると一部のキーで smartchr が効かなくなります。たとえば、
(local-set-key (kbd ">") (smartchr '(" > " " >> " " >= " "->" ">")))
と定義していて、ソースコードを普通に書いているときは ">" のキーを入力するたびに 5 つの文字列が切り替わりますが、 yasnippet のフィールド編集では ">" が挿入されるだけで文字列が切り替わりません。
この問題を修正するには以下のコードを .emacs に追加します。
(remove-hook 'c-mode-common-hook
'(lambda ()
(dolist (k '(":" ">" ";" "<" "{" "}"))
(define-key (symbol-value (make-local-variable 'yas-keymap))
k 'self-insert-command))))
yasnippet ではフィールド編集で c-electric-* のコマンドが動かないように、一部のキーをフックで上書きするようになっています。そのため、そのフックを取り除くと smartchr がうまく動作するようになります。
ただし、 yasnippet でそのような処理が記述されているということは、 electric mode などを設定しているとフィールド編集で不具合が発生する可能性が十分あるということなので注意してください。