行を入れ替えるマイナーモード的な

中間前日のはずなのに何でこんなものを書いてるんだろ.
xyzzyでCtrl+上下キーでカーソルのある行を上下に移動できるもの.行の入れ替えをしたいことが結構頻繁にあるので.

超適当なつくりなので一番下の行ではうまく動かないけど.マイナーモード初めて書いたのでそのメモ代わり.

line-shift.l

(provide 'line-shift)

(in-package "user")

(export '(*line-shift-mode*
	  line-shift-mode*
	  line-shift-up
	  line-shift-down))

(defvar-local *line-shift-mode* nil)
(defvar *line-shift-mode-map* nil)

(unless *line-shift-mode-map*
  (setq *line-shift-mode-map* (make-sparse-keymap))
  (define-key *line-shift-mode-map* #\C-Up   'line-upshift)
  (define-key *line-shift-mode-map* #\C-Down 'line-downshift))

(defun line-shift-mode (&optional (arg nil sv))
  (interactive "p")
  (ed::toggle-mode '*line-shift-mode* arg sv)
  (update-mode-line t)
  (if *line-shift-mode*
      (set-minor-mode-map *line-shift-mode-map*)
    (unset-minor-mode-map *line-shift-mode-map*))
  t)

(pushnew
 '(*line-shift-mode* . "LineShift") *minor-mode-alist* :key #'car)

(defun line-upshift ()
  (interactive)
  (transpose-lines)
  (previous-line)
  (previous-line))

(defun line-downshift ()
  (interactive)
  (next-line)
  (transpose-lines)
  (previous-line))

参考:
http://www.ssnsk.com/pc/xyzzyMinorMode_04.html
http://www.uranus.dti.ne.jp/~shiro-/soft/xyzzy/keybind.html
http://white.s151.xrea.com/wiki/index.php?memo/xyzzy/minor-mode