一度使ったコマンドは楽に使いたい。

M-xで呼び出したコマンドは自動的にファイルに保存され、ファイルの内容をanythingで選択できるようにする。選択できるコマンド候補の追加には、M-xで呼び出すかファイルを直接修正すればいい。

(defun write-string-to-buffer (file str)
  (let ((buf (find-file-noselect file)))
    (set-buffer buf)
    (when (and buffer-file-name
	       (not buffer-read-only)
	       (file-writable-p file))
      (goto-char (point-max))
      (insert "\n")
      (insert str)
    ;(save-buffer) ;auto-save-buffers.elが入ってなければ
      )))

;;実行したコマンドの履歴を格納するファイル
(defvar extended-command-history-save-file 
  "~/.emacs.d/extended-command-history")

;;M-xで実行したコマンドの名前をファイルに保存するようにする。
(defadvice execute-extended-command (after eec-push-to-history-file activate)
  (let ((func (car extended-command-history)))
    (write-string-to-buffer extended-command-history-save-file func)))

(defvar anything-c-source-extended-command-history
      '((name . "extended commands")
	(init . (lambda ()
		  (call-process-shell-command
		   (format "sort %s  | uniq" extended-command-history-save-file)
		   nil
		   (anything-candidate-buffer 'global))))
	(candidates-in-buffer)
	(action . (("Call interactively" . (lambda (c)
					     (call-interactively (intern c))))))))

;(anything (list anything-c-source-extended-command-history))

毎回sortとuniqしているのが嫌になったら、ファイル内の重複を消す処理とかを行う関数などを作る。