From ad1f9d99b2d82cfb705baaeab166def5ddda5f72 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Tue, 21 Apr 2020 00:53:18 -0400 Subject: [PATCH] * init.el(b/duplicate-line-or-region): New convenience function. --- init.el | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/init.el b/init.el index 824aa93..5d4b8b5 100644 --- a/init.el +++ b/init.el @@ -255,6 +255,30 @@ For disabling the behaviour for certain buffers and/or modes." (interactive) (join-line 1)) +(defun b/duplicate-line-or-region (&optional n) + "Duplicate the current line, or region (if active). +Make N (default: 1) copies of the current line or region." + (interactive "*p") + (let ((u-r-p (use-region-p)) ; if region is active + (n1 (or n 1))) + (save-excursion + (let ((text + (if u-r-p + (buffer-substring (region-beginning) (region-end)) + (prog1 (thing-at-point 'line) + (end-of-line) + (if (eobp) + (newline) + (forward-line 1)))))) + (dotimes (_ (abs n1)) + (insert text)))) + (let* ((beg (if u-r-p + (region-beginning) + (line-beginning-position))) + (end (if u-r-p + (region-end) + (line-end-position))))))) + ;;; Defaults @@ -508,6 +532,7 @@ For disabling the behaviour for certain buffers and/or modes." (bind-keys ("C-a" . b/move-indentation-or-beginning-of-line) ("C-c a i" . ielm) + ("C-c d" . b/duplicate-line-or-region) ("C-c e b" . eval-buffer) ("C-c e e" . eval-last-sexp) -- 2.20.1