リージョンをEmacsの別の(一時的な)バッファーにコピーしたいのですが、(アクティブな)リージョンがない場合は、現在のバッファー全体をコピーしたいと思います。私がしたことは次のとおりです。
(defun do-something-with-region-or-buffer ()
(interactive)
(save-excursion
(let ((begin (point-min)) (end (point-max)))
(when (region-active-p)
(setq begin (region-beginning))
(setq end (region-end)))
(copy-region-as-kill begin end)
(with-temp-buffer
(switch-to-buffer (current-buffer))
(rename-buffer "*My Temp Buffer*")
(delete-other-windows)
(yank)
(do-something-with-current-buffer)))))
しかし、キルリングをいじっているので、これは最適ではないと強く感じています。影響を与えずにそれを行う方法は?(ボーナスの質問:アクティブな領域がない場合、領域またはバッファ全体で処理を行う方法は適切ですか?)