前回の バッファーにカキコ は文字列をバッファーに書き込むものでしたが、今回の バッファーにコピー はカレントバッファーの範囲(start end)を指定して別のバッファーにコピーします。
前回と同様、サンプルファイル rev-list-options.po を開いておきます。
プログラム
(defcustom po-ediff-previous-msgid-buffer-a-name "*pepm-previous-msgid*"
"po-ediff-previous-msgid BUFFER A name. pepm is PoEdiffPreviousMsgid"
:type 'string
:require 'po-mode
:group 'po)
(defcustom po-ediff-previous-msgid-buffer-b-name "*pepm-now-msgid*"
"po-ediff-previous-msgid BUFFER A name. pepm is PoEdiffPreviousMsgid"
:type 'string
:require 'po-mode
:group 'po)
(defun po-ediff-previous-msgid ()
"Ediff previous msgid (marked #| ) and msgid."
(po-find-span-of-entry)
(let (
(oldbuf (current-buffer))
(msgid (po-get-msgid))
(untranslated-regions (po-previous-untranslated-regions))
)
(save-current-buffer
(set-buffer (get-buffer-create
po-ediff-previous-msgid-buffer-a-name))
(erase-buffer)
(dolist (region untranslated-regions)
(insert-buffer-substring oldbuf (car region) (cdr region))
)
(restore-buffer-modified-p nil))
(save-current-buffer
(set-buffer (get-buffer-create
po-ediff-previous-msgid-buffer-b-name))
(erase-buffer)
(insert msgid)
(setq buffer-read-only t))))
前回の バッファにカキコ では po-get-msgid で取得した「文字列」をバッファに書き込みました。
今回は前回の バッファにカキコに加えて、 カレントバッファの範囲 region を指定して、カレントバッファの指定範囲をコピーします。
書き込んだ pepm-previous-msid バッファを見ると previous msgid (#| でマークされた部分)が書き込まれています。 msgid と違って unquote されていません。これは(今回は)そのままコピーしたためです。これは今後 unquote 等していきます。
dolist untranslated-regions というリストの内容を1つずつ取り出して処理します。今回は全てバッファにコピーしますが、たいてい要素1つだけのリストのようです、が、リストです。
insert-buffer-substring で、指定のバッファ oldbuf から「カレントバッファに oldbuf の指定範囲をコピーします。
実行結果画面(参考)
今回はここまで。