changeset 54:9620bf594a88

(goto-line lineno) の返り値で、lineno と実際の移動先の行番号との 差がわかるので、curline の計算は不要になった
author gongo
date Tue, 26 Aug 2008 18:26:39 +0900
parents 0b7ba6b2a0f9
children 563a0c8c5706
files test/buffer-edit/insert-line-to-buffer.el
diffstat 1 files changed, 10 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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))))