EmacsLisp書いてみた

30分プログラム、その603。EmacsLispでマイナーモードとか書けたらかっこいいなーと思ったので、EmacsLispを始めてみました。
とりあえず練習ということで、スペースを挿入して強調するstrongという関数を書いてみた。

hogehoge

という単語にキャレットを重ねてM-x strongとすると

h o g e h o g e

になる。

簡単にできると思いきや、結構大変だった。基本副作用バリバリなのはしょうがないんだろうね、たぶん。

使い方

下記のコードを評価するか、strong.elという名前で保存したあと

(require 'strong)

とする。

あとは、単語にキャレットを重ねてM-x strongを呼び出す。

ソースコード

;;; strong.el ---strong.el

(defun strong-insert (sep str)
  (mapconcat 'char-to-string
	     str
	     sep))

(defun strong ()
  (interactive)
  (save-excursion
    (let* ((from (re-search-backward "\\b"))
	   (to   (progn
		   (forward-char)
		   (re-search-forward "\\b"))))
      (save-restriction
	(narrow-to-region from to)
	(let* ((text (filter-buffer-substring (point-min)
					      (point-max)
					      t
					      t))
	       (stronged (strong-insert " " text)))
	  (insert stronged))))))

(provide 'strong)
;;; strong.el ends here