0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Emacs Lisp 超初心者がコマンドを作ってみる 〜バッファーにコピー〜

Last updated at Posted at 2024-12-17

前回の バッファーにカキコ は文字列をバッファーに書き込むものでしたが、今回の バッファーにコピー はカレントバッファーの範囲(start end)を指定して別のバッファーにコピーします。

前回と同様、サンプルファイル rev-list-options.po を開いておきます。

プログラム

po-ediff-previous-msgid.el
(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 の指定範囲をコピーします。

実行結果画面(参考)

バッファにカキコ した画面(参考)
buffer-pepm-now-msgid.png

バッファにコピー した画面(参考)
buffer-pepm-previous-msgid.png

今回はここまで。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?