ミニバッファの邪魔な履歴を削除する

ありそうなのに見つからなかったので書いてみました。
ミニバッファで何らかの消したい履歴が出ている時にShift-Deleteで消せます。
find-fileの履歴だけでなくdescribe-*の履歴とか、その他ミニバッファの履歴全てに使えるはずです。多分。

(define-key minibuffer-local-map (kbd "S-<delete>")
  #'(lambda ()
      (interactive)
      (set minibuffer-history-variable (delete (buffer-substring-no-properties (minibuffer-prompt-end) (point-max)) (symbol-value minibuffer-history-variable)))
      (goto-history-element minibuffer-history-position)
))

ついでにsession.elを使っていて、重複が鬱陶しいのでsession保存前に重複削除しています。

(defadvice session-save-session (before session-save-session-delete-dups activate)
  (set-buffer (find-file-noselect session-save-file))
  (goto-char (point-min))
  (while (re-search-forward "^(setq-default \\([^ ]+\\)" nil t)
    (delete-dups (symbol-value (intern-soft (match-string 1)))))
  (kill-buffer))