view test/buffer-edit/insert-line-to-buffer.el @ 54:9620bf594a88

(goto-line lineno) の返り値で、lineno と実際の移動先の行番号との 差がわかるので、curline の計算は不要になった
author gongo
date Tue, 26 Aug 2008 18:26:39 +0900
parents 769ebe87cd5a
children
line wrap: on
line source

;;
;; insert-line-to-buffer.el
;;   指定したバッファの指定した行に、指定した文字列を挿入。
;;   バッファの最後尾行が指定した行に足りない場合、その数だけ改行する
;;
;; buffer : 編集するバッファ(名)
;; lineno : 編集するbufの行番号
;; string : lineno行目に挿入する文字列
(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 (diff)
    (save-excursion
      (set-buffer (get-buffer-create buffer))

      ;; 指定行番号へ移動
      ;; diff には、lineno と 実際に移動した行番号の差が入る
      ;; バッファの末尾の行が指定した行に足りない場合に diff > 0になる
      (setq diff (goto-line lineno))

      (if (> diff 0)
	  ;; buffer の 最後の行番号が、指定した lineno に足りない場合、
	  ;; その行数だけ改行し、その行へ移動する。
	  ;; newline なので、下のようにテキストを削除する必要は無い
	  (progn (end-of-line)
		 (newline diff)
		 (goto-line lineno))
	
	;; 行頭から末尾までのテキストを削除
	(delete-region (progn (beginning-of-line) (point))
		       (progn (end-of-line) (point)))
      )

      ;; 新しい行を挿入
      (insert string))))

;; currentp の位置の行番号を返す
(defun real-count-lines (currentp)
  (+ (count-lines (point-min) currentp)
     (if (= (save-excursion (goto-char currentp) (current-column))
            0)
         1  0)))