拡張できるかどうかをチェックする関数を見つけるのに少し時間がかかりましたが、最終的にはそれを見つけるのに十分「幸運」でした。
重要なのは、この関数が通常は拡張されるか、そうでなければフォールバック動作を実行することです。この関数のクローンを作成し、代わりにそれらの場所にカーソルの色を設定しました。
そして、驚くべきことに、それは実際にはまったく減速しません。
;; It will test whether it can expand, if yes, cursor color -> green.
(defun yasnippet-can-fire-p (&optional field)
(interactive)
(setq yas--condition-cache-timestamp (current-time))
(let (templates-and-pos)
(unless (and yas-expand-only-for-last-commands
(not (member last-command yas-expand-only-for-last-commands)))
(setq templates-and-pos (if field
(save-restriction
(narrow-to-region (yas--field-start field)
(yas--field-end field))
(yas--current-key))
(yas--current-key))))
(set-cursor-color (if (and templates-and-pos (first templates-and-pos))
"green" "red"))))
; As pointed out by Dmitri, this will make sure it will update color when needed.
(add-hook 'post-command-hook 'yasnippet-can-fire-p)
これを私のlispコレクションに追加しました(私は実際にこれも役立つだろうと思っていました)。
更新: yasnippetの最新バージョン[2014年8月から0.8.1
]では、yas--current-key
関数の名前がに変更されましたyas--templates-for-key-at-point
。cf問題