From 28f6ca7dcdb7def55159ce27d3951c0ff9976eed Mon Sep 17 00:00:00 2001 From: Wojciech Kozlowski Date: Tue, 12 Apr 2022 22:40:25 +0200 Subject: [PATCH] Create repo for yank-indent --- repos/x-lib/yank-indent.el | 47 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 repos/x-lib/yank-indent.el diff --git a/repos/x-lib/yank-indent.el b/repos/x-lib/yank-indent.el new file mode 100644 index 0000000..134779d --- /dev/null +++ b/repos/x-lib/yank-indent.el @@ -0,0 +1,47 @@ +;;; yank-indent.el -*- lexical-binding: t -*- + +;; Automatically indent yanked text in programming modes. + +;; +;;; Variables: + +(defvar +x-yank-indent--additional-modes + '(LaTeX-mode TeX-mode) + "Additional modes in which to indent yanked(-popped) regions. +Only modes that don't derive from `prog-mode' should be listed.") + +(defvar +x-yank-indent--blacklisted-modes + '(python-mode slim-mode haml-mode yaml-mode) + "Modes for which auto-indenting is suppressed.") + +(defvar +x-yank-indent--threshold 10000 + "Threshold (# chars) for auto yank indentation.") + +;; +;;; Code: + +;; ----------------------------------------------------------------------------- +;; To configure, add `+x-yank-indent-a' as `:after' advice to all the yank-like +;; functions that you would like to auto-indent. For example: +;; +;; (advice-add 'yank :after #'+x-yank-indent-a) +;; (advice-add 'yank-pop :after #'+x-yank-indent-a) +;; (advice-add 'consult-yank-pop :after #'+x-yank-indent-a) +;; ----------------------------------------------------------------------------- + +;;;###autoload +(defun +x-yank-indent-a (&optional _) + "Indent yanked text. +Except when used with prefix arg or in one of the excluded modes." + (when (and (not current-prefix-arg) + (not (member major-mode +x-yank-indent--blacklisted-modes)) + (or (derived-mode-p 'prog-mode) + (member major-mode +x-yank-indent--additional-modes))) + (let ((transient-mark-mode nil) + (beg (region-beginning)) + (end (region-end))) + (unless (> (- end beg) +x-yank-indent--threshold) + (indent-region beg end nil))))) + +(provide 'yank-indent) +;;; yank-indent.el ends here