bonotakeの日記

元・ソフトウェア工学系研究者、今・AI系エンジニア

行番号つきでバッファをコピーする

3年ぶりのxyzzyタグとか。

バッファに行番号を付加するっての、確か昔どっかでそういうコードを拾った記憶があって、実際昔書いたドキュメントに使ってたりするんだけど、今日やろうと思ったら手元にもネットにも見当たらず。
なので、このへん参考に適当に作った。

でも、絶対どっかに落ちてると思うんだよなー。

(defun copy-buffer-as-kill-with-numbering ()
  (interactive)
  (let ((str ""))
    (save-excursion
      (progn
	(beginning-of-buffer)
	(dotimes (i (buffer-lines))
	  (setq str (concat str
			    (get-current-line-with-numbering (buffer-lines))
			    (format nil "~C" #\LFD)))
	  (next-line))))
    (ed::kill-new str)))

(defun get-current-line-with-numbering (wid)
 (format nil (concat "~"
                     (format nil "~D" (ceiling (log wid 10)))
                     "D: ~A")
         (current-line-number)
         (buffer-substring
          (point)
          (save-excursion (goto-eol) (point)))))

ためしに、これ↑を書いたバッファをコピーしてみる。

 1: (defun copy-buffer-as-kill-with-numbering ()
 2:   (interactive)
 3:   (let ((str ""))
 4:     (save-excursion
 5:       (progn
 6: 	(beginning-of-buffer)
 7: 	(dotimes (i (buffer-lines))
 8: 	  (setq str (concat str
 9: 			    (get-current-line-with-numbering (buffer-lines))
10: 			    (format nil "~C" #\LFD)))
11: 	  (next-line))))
12:     (ed::kill-new str)))
13: 
14: (defun get-current-line-with-numbering (wid)
15:  (format nil (concat "~"
16:                      (format nil "~D" (ceiling (log wid 10)))
17:                      "D: ~A")
18:          (current-line-number)
19:          (buffer-substring
20:           (point)
21:           (save-excursion (goto-eol) (point)))))
22: 
注:bonotakeは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。