(2017-06-14更新) helmのupgradeに伴って(?)不具合が発生したのでcodeを修正。actionの定義が問題を起こしていたので関連部分を削除
helm-recentf-directoriesは、recentf listの中からdirectoriesを抽出し表示するfunction。
http://d.hatena.ne.jp/syohex/20120911/1347378503で紹介されていたcodeを便利に使わせて貰っているのだが、helmの更新で上手く動かない状態になっていた。
helm-imenu.elをベースに、きちんとした方法でsourceを作製する方法へ修正してみた。
(defun helm-recentf-directories-candidates ()
"Make candidate list of recentf directories."
(loop for file in recentf-list
when (file-directory-p file)
collect file))
(defclass helm-recentf-directories-source (helm-source-sync)
((candidates :initform 'helm-recentf-directories-candidates)
(keymap :initform helm-find-files-map)
(migemo :initform t)
(defvar helm-source-recentf-directories
(helm-make-source "Recent Directories"
'helm-recentf-directories-source))
(defun helm-recentf-directories ()
"Alternative for helm-recentf that displays only directories."
(interactive)
(helm :sources 'helm-source-recentf-directories
:buffer "*helm recentf directories*"))
やっていることは:
* recentf-listからdirectoryな要素を取り出すfunctionを定義
* 以上のfunctionを候補とし、keymap
* helm-make-sourceに引き渡しsourceを作製
* sourceを使うfunctionを定義