xyzzyで連番を振れるようにする。具体的には以下。
・Enterを押したときに作動
・行頭が・ならば次の行頭にも・を付ける
・行頭が数値+ピリオド(1.や1.)ならば次の行頭に連番を振る
・連番の後ろに文字列がない行でEnterを押せば、その連番を解除
;; ■ 連番を振る ;; 行頭が「・」あるいは「1.」「1.」の場合、Enterで連番にする ;; 連番しかないのにEnterを押した場合は連番を消す ;; 全角数字あるいは半角数字に1プラスして返す関数 (defun plus-1-string (str) (cond ((string-match "[0-9]+" str) (setf int (parse-integer str)) (format nil "~d" (+ int 1))) ((string-match "[0-9]+" str) (setf str (map-to-half-width-string str :ascii t)) (setf int (parse-integer str)) (setf str (format nil "~d" (+ int 1))) (map-to-full-width-string str :ascii t)))) ;; 本体 (defun insert-serial-numbers () (interactive) (if (eolp) ;;行末のときのみ作動 (save-restriction (narrow-to-region (progn (beginning-of-line) (point)) (progn (end-of-line) (point))) (beginning-of-line) (cond ((scan-buffer "^・.+" :regexp t) (end-of-line)(insert "\n・")) ((scan-buffer "^・" :regexp t) (replace-match "")) ((scan-buffer "^\\([0-9]\\|[0-9]\\)\\(\\.\\|.\\).+" :regexp t) (end-of-line) (let ((f (match-string 1)) (b (match-string 2))) (insert "\n" (plus-1-string f) (format nil "~A" b)))) ((scan-buffer "^\\([0-9]\\|[0-9]\\)\\(\\.\\|.\\)" :regexp t) (replace-match "\n")) ( t (end-of-line) (insert "\n")))) (newline))) ;; 行末でなかったら普通の改行 ;;(define-key *howm-create2dir-mode-map* '#\RET 'insert-serial-numbers) (global-set-key '#\RET 'insert-serial-numbers)
僕の場合はhowm以外で使う予定はないので、自作のhowmモードでのみ作動するようにしている。
0 件のコメント:
コメントを投稿