読者です 読者をやめる 読者になる 読者になる

blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

load-path に登録されているディレクトリ内の *.el のファイルを anything 用に列挙する

Emacs

gnupackEmacs 向けに以下のような設定を書いた。C-: C-: C-s で、 site-lisp 内の *.el のファイルを anything で列挙する。site-lisp 内の *.el ファイルを頻繁に編集する際にかなり役立つと思う。

(defvar anything-c-source-ls-site-lisp-filelist
  '((name . "ls site-lisp (filelist)")
    (anything-candidates-in-buffer)
    (candidates . (lambda ()
		    (split-string
		     (shell-command-to-string
		      "ls /app/emacs/site-lisp/*.el")
		     "\n")))
    (migemo)
    (type . file)))

(defun anything-ls-site-lisp-filelist ()
  "ls /app/emacs/site-lisp/*.el"
  (interactive)
  (anything-other-buffer
   '(anything-c-source-ls-site-lisp-filelist)
   "*anything-ls-site-lisp-filelist*"))

(define-key global-map ("C-: C-: C-s") 'anything-ls-site-lisp-filelist)

追記:その後、podhmoさんからのコメントを受けてつぎのように書き換えた。こちらの機能は、load-path に格納されているディレクトリにある *.el ファイルを列挙するというものである。

(eval-when-compile (require 'cl))

(defvar anything-c-source-load-path-elisp-filelist
  '((name . "ls site-lisp (filelist)")
    (anything-candidates-in-buffer)
    (candidates . (lambda ()
                    (loop for path in load-path
                          if (file-exists-p path)
                          nconc (loop for f in (directory-files path t nil nil)
                                      if (string-match-p "\\.el$" f)
                                      collect f))))
    (migemo)
    (type . file)))

(defun anything-ls-load-path-elisp-filelist ()
  "ls site-lisp (filelist) from load path"
  (interactive)
  (anything-other-buffer
   '(anything-c-source-load-path-elisp-filelist)
   "*anything-ls-load-path-elisp-filelist*"))

(define-key global-map ("C-: C-: C-s") 'anything-ls-load-path-elisp-filelist)

これにともない、タイトルを「/app/emacs/site-lisp 内の *.el のファイルを anything 用に列挙する」から「load-path に登録されているディレクトリ内の *.el のファイルを anything 用に列挙する」へと変更した。