summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--init.el25
1 files changed, 25 insertions, 0 deletions
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)