モジュール名をsearch.cpan.org へのリンクにするEmacs-Lisp

なんかpermalink を書くのがだるかったので書いた.
lisp にちょっと慣れてきた気がする.

(defun my-hatena-convert-cpan ()
  "カーソル付近のモジュール名をcpan URLに変換する。"
  (interactive)
  (my-hatena-get-near-word 'my-hatena-convert-cpan-1))

(defun my-hatena-get-near-word (string-maker)
;  (let ((bounds (bounds-of-thing-at-point 'word)))
  (let ((bounds (bounds-of-thing-at-point 'filename))) ; :: のためにこっちに
    (if bounds
	(let* ((beg (car bounds))
	       (end (cdr bounds))
	       (new-str (funcall string-maker (buffer-substring beg end))))
	  (if new-str
	      (progn
		(delete-region beg end)
		(insert new-str)))))))

(defun my-hatena-convert-cpan-1 (name)
  "search.cpan へのリンクを作る"
  (let ((url '("[http://search.cpan.org/dist/")))
    (if (stringp name)
        (let ((new-name name))
          (while (string-match "::" new-name)
            (setq new-name (replace-match "-" t t new-name)))
          (setcdr url (list new-name "/:title=" name "]")))
      (error "Invalid argument %s" x))
    (mapconcat (lambda (n) n) url "")))

http://www.amazon.co.jp/dp/4756118054/search042-22/ref=nosim/Emacs Lispプログラミング入門