「タブでインデントしてyank」をコマンド化

手元でちょっとメモる時のオレオレ記法として、コマンドの出力やログ片、コード片はタブでインデントしている。

これまでは

  • yank
  • 貼り付けた範囲を選択
  • string-rectangle(C-x r t)でタブを挿入

とやっていたが、いいかげん面倒に感じてきたので「タブでインデントしてyank」をコマンド化してみた。

(defun yank-with-tab-indent ()
  (interactive)
  (insert
   (with-temp-buffer
     (yank)
     (goto-char (point-min))
     (replace-regexp "^" "\t")
     (when (= (point) (point-max))
       (delete-backward-char 1))
     (goto-char (point-max))
     (when (not (= ?\n (char-before)))
       (insert "\n"))
     (buffer-string))))

(global-set-key (kbd "C-S-y") 'yank-with-tab-indent)