* init.el(b/duplicate-line-or-region): New convenience function.
[~bandali/configs] / init.el
diff --git a/init.el b/init.el
index fde1428..5d4b8b5 100644 (file)
--- 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)))))))
+
 \f
 ;;; Defaults
 
@@ -277,7 +301,7 @@ For disabling the behaviour for certain buffers and/or modes."
  ;; scroll-margin 1
  ;; scroll-conservatively 10000
  scroll-step 1
- scroll-conservatively 10
+ scroll-conservatively 101
  scroll-preserve-screen-position 1
  ;; focus follows mouse
  mouse-autoselect-window t)
@@ -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)
@@ -819,11 +844,6 @@ For disabling the behaviour for certain buffers and/or modes."
     (setq indent-tabs-mode nil))
   (add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode))
 
-(use-package reveal
-  :hook (emacs-lisp-mode . reveal-mode))
-
-;; (use-package elisp-mode)
-
 (use-package alloy-mode
   :mode "\\.\\(als\\|dsh\\)\\'"
   :config
@@ -858,8 +878,6 @@ For disabling the behaviour for certain buffers and/or modes."
         lean-input-user-translations '(("/" "/")))
   (lean-input-setup))
 
-;; (use-package mhtml-mode)
-
 (use-package sgml-mode
   :config
   (setq sgml-basic-offset 0))
@@ -888,11 +906,6 @@ For disabling the behaviour for certain buffers and/or modes."
 (use-package guix
   :disabled)
 
-(use-package auctex
-  :disabled
-  :custom
-  (font-latex-fontify-sectioning 'color))
-
 (use-package go-mode
   :disabled)
 
@@ -901,6 +914,11 @@ For disabling the behaviour for certain buffers and/or modes."
   :hook
   (po-mode . (lambda () (run-with-timer 0.1 nil 'View-exit))))
 
+(use-package auctex
+  :disabled
+  :custom
+  (font-latex-fontify-sectioning 'color))
+
 (use-package tex-mode
   :config
   (cl-delete-if
@@ -1067,12 +1085,6 @@ For disabling the behaviour for certain buffers and/or modes."
          ("C-c j"   . crux-top-join-line)
          ("C-S-j"   . crux-top-join-line)))
 
-(use-package mwim
-  :bind (("C-a"    . mwim-beginning-of-code-or-line)
-         ("C-e"    . mwim-end-of-code-or-line)
-         ("<home>" . mwim-beginning-of-line-or-code)
-         ("<end>"  . mwim-end-of-line-or-code)))
-
 (use-package projectile
   :disabled
   :defer 0.5