VS風1行コピー、切り取り、貼りつけ

Visual Studioのようにリージョン選択中でない時にM-wやC-wした時に、それぞれ1行コピー、切り取りになるようにしたいなぁと思って探してた。

ここで見つけたので使いやすいようにちょっとだけ変更した。

http://www.emacswiki.org/emacs/?action=browse;oldid=SlickCopy;id=WholeLineOrRegion

(defadvice copy-region-as-kill (around slick-copy activate)
"When called interactively with no active region, copy a single line instead."
(if (or (use-region-p) (not (called-interactively-p)))
ad-do-it
(kill-new (buffer-substring (line-beginning-position)
(line-beginning-position 2))
nil '(yank-line))
(message "Copied line")))
(defadvice kill-region (around slick-copy activate)
"When called interactively with no active region, kill a single line instead."
(if (or (use-region-p) (not (called-interactively-p)))
ad-do-it
(kill-new (filter-buffer-substring (line-beginning-position)
(line-beginning-position 2) t)
nil '(yank-line))))
(defun yank-line (string)
"Insert STRING above the current line."
(save-excursion
(beginning-of-line)
(unless (= (elt string (1- (length string))) ?\n)
(save-excursion (insert "\n")))
(insert string)))

これで行の複製もM-w C-yでできるようになったので便利やわー。

アドバイスとかyank-handlerとか全然知らなかったのでEmacs Lispの勉強にもなった。