xyzzyでソート(その2くらい):文字コードとかを気にしたくない偏

PlanetXyzzy見て見つけたここの話
nouse: メモ:ユニコードファイル二題。テキストソートと xyzzy の設定
http://yeblog.cocolog-nifty.com/nouse/2008/03/xyzzy_9a83.html

話は前に自分も見つけてコレは使えるんじゃないかと思ったりしてメモしてた奴だったんだけど、記事を読むとどうやら文字コードを変えるとまともにソート機能しないとか言う報告が書かれていて、そういえば、使えそうと思った割りには結局自分はアレから一度も使ってなかったりして気づいてなかったが、読む限り色々問題もありそう。Unicodeとか一々気にするのも面倒だし、xyzzy上でやればxyzzyの設定に合わせて勝手にやってくれるだろうとかいう適当な感じで意味もあるかなぁと思って書いてみた。

■これは何をするか
適当にリージョンの範囲を行単位で並べ替える。

う
2
あ
1
い

こういうのを

1
2
あ
い
う

こう言う風にする。あと、あんまり試してない。

(defun sort-line-region(from to &optional (test #'string-lessp))
  (interactive "*r")
  (if (< to from)
	  (rotatef from to))
  (let ((start nil) line result)
	(while (string-match "^.*\n" (buffer-substring from to) start)
		(setq start (match-end 0))
		(push (match-string 0) line))
	(setq line (stable-sort line test))
	(dolist (item line result)
	  (setq result (concat result item)))
	(delete-region from to)
	(insert result)))

引数にstring-not-lesspとかをこんな感じで渡せば

(sort-line-region from to #'string-not-lessp)

昇順とか降順みたいな感じのを変えれる。はず。試してないけど。from toにはリージョンの場所を渡す感じ。