]> git.eshelyaron.com Git - emacs.git/commitdiff
Speed up duplicate-dwim and duplicate-line by another factor 10
authorMattias Engdegård <mattiase@acm.org>
Wed, 28 Jun 2023 12:36:39 +0000 (14:36 +0200)
committerMattias Engdegård <mattiase@acm.org>
Wed, 28 Jun 2023 13:11:49 +0000 (15:11 +0200)
* lisp/misc.el (duplicate--insert-copies): New.
(duplicate-line, duplicate-dwim): Call it.

lisp/misc.el

index de82b97fa6f64f88e6990e1cc09db49d4fbe7d15..ab083728a69d45b6c184f52acfa601c5dcfc5dd9 100644 (file)
@@ -63,6 +63,10 @@ Also see the `duplicate-line' command."
                                 (+ n (point)))))))
     (insert string)))
 
+(defun duplicate--insert-copies (n string)
+  "Insert N copies of STRING at point."
+  (insert (mapconcat #'identity (make-list n string))))
+
 ;;;###autoload
 (defun duplicate-line (&optional n)
   "Duplicate the current line N times.
@@ -78,8 +82,7 @@ Also see the `copy-from-above-command' command."
       (forward-line 1)
       (unless (bolp)
         (insert "\n"))
-      (dotimes (_ n)
-        (insert line)))))
+      (duplicate--insert-copies n line))))
 
 (declare-function rectangle--duplicate-right "rect" (n))
 
@@ -111,8 +114,7 @@ Interactively, N is the prefix numeric argument, and defaults to 1."
            (text (buffer-substring beg end)))
       (save-excursion
         (goto-char end)
-        (dotimes (_ n)
-          (insert text))))
+        (duplicate--insert-copies n text)))
     (setq deactivate-mark nil))
 
    ;; Duplicate line.