# HG changeset patch # User gongo # Date 1219742799 -32400 # Node ID 9620bf594a886c4db092dcbb83ea7e8c5bab7346 # Parent 0b7ba6b2a0f9bf3a301df040c7577c6984421767 (goto-line lineno) の返り値で、lineno と実際の移動先の行番号との 差がわかるので、curline の計算は不要になった diff -r 0b7ba6b2a0f9 -r 9620bf594a88 test/buffer-edit/insert-line-to-buffer.el --- a/test/buffer-edit/insert-line-to-buffer.el Tue Aug 26 17:26:13 2008 +0900 +++ b/test/buffer-edit/insert-line-to-buffer.el Tue Aug 26 18:26:39 2008 +0900 @@ -1,6 +1,6 @@ ;; ;; insert-line-to-buffer.el -;; 指定したバッファの、指定した行に、指定した文字列を挿入。 +;; 指定したバッファの指定した行に、指定した文字列を挿入。 ;; バッファの最後尾行が指定した行に足りない場合、その数だけ改行する ;; ;; buffer : 編集するバッファ(名) @@ -9,24 +9,27 @@ (defun insert-line-to-buffer (buffer lineno string) "Insert STRING at line LINENO of BUFFER. The line LINENO is deleted, and STRING is inserted." - (let (curlineno) + (let (diff) (save-excursion (set-buffer (get-buffer-create buffer)) - (goto-line lineno) ;; 指定行番号へ移動 - (setq curlineno (real-count-lines (point))) ;; 現在の行番号 - (if (> lineno curlineno) + ;; 指定行番号へ移動 + ;; diff には、lineno と 実際に移動した行番号の差が入る + ;; バッファの末尾の行が指定した行に足りない場合に diff > 0になる + (setq diff (goto-line lineno)) + + (if (> diff 0) ;; buffer の 最後の行番号が、指定した lineno に足りない場合、 ;; その行数だけ改行し、その行へ移動する。 ;; newline なので、下のようにテキストを削除する必要は無い (progn (end-of-line) - (newline (- lineno curlineno)) + (newline diff) (goto-line lineno)) ;; 行頭から末尾までのテキストを削除 (delete-region (progn (beginning-of-line) (point)) (progn (end-of-line) (point))) - ) + ) ;; 新しい行を挿入 (insert string))))