diff --git a/modules/editor/evil/autoload/advice.el b/modules/editor/evil/autoload/advice.el index c2abbd821..bac8b79c6 100644 --- a/modules/editor/evil/autoload/advice.el +++ b/modules/editor/evil/autoload/advice.el @@ -179,28 +179,31 @@ more information on modifiers." (if file (evil-edit file))) ;;;###autoload (autoload '+evil-join-a "editor/evil/autoload/advice" nil nil) -(evil-define-operator +evil-join-a (beg end) +(defun +evil-join-a (orig-fn beg end) "Join the selected lines. This advice improves on `evil-join' by removing comment delimiters when joining commented lines, by using `fill-region-as-paragraph'. From https://github.com/emacs-evil/evil/issues/606" - :motion evil-line - (let* ((count (count-lines beg end)) - (count (if (> count 1) (1- count) count)) - (fixup-mark (make-marker))) - (unwind-protect - (dotimes (var count) - (if (and (bolp) (eolp)) - (join-line 1) - (let* ((end (line-beginning-position 3)) - (fill-column (1+ (- end beg)))) - (set-marker fixup-mark (line-end-position)) - (fill-region-as-paragraph beg end nil t) - (goto-char fixup-mark) - (fixup-whitespace)))) - (set-marker fixup-mark nil)))) + ;; But revert to the default we're not in a comment, where + ;; `fill-region-as-paragraph' is too greedy. + (if (not (doom-point-in-comment-p (min (max beg (1+ (point))) end))) + (funcall orig-fn beg end) + (let* ((count (count-lines beg end)) + (count (if (> count 1) (1- count) count)) + (fixup-mark (make-marker))) + (unwind-protect + (dotimes (var count) + (if (and (bolp) (eolp)) + (join-line 1) + (let* ((end (line-beginning-position 3)) + (fill-column (1+ (- end beg)))) + (set-marker fixup-mark (line-end-position)) + (fill-region-as-paragraph beg end nil t) + (goto-char fixup-mark) + (fixup-whitespace)))) + (set-marker fixup-mark nil))))) ;;;###autoload (defun +evil--fix-dabbrev-in-minibuffer-h () diff --git a/modules/editor/evil/config.el b/modules/editor/evil/config.el index 05992fe95..91febf87c 100644 --- a/modules/editor/evil/config.el +++ b/modules/editor/evil/config.el @@ -165,7 +165,7 @@ directives. By default, this only recognizes C directives.") (abort-recursive-edit))) ;; Make J (evil-join) remove comment delimiters when joining lines. - (advice-add #'evil-join :override #'+evil-join-a) + (advice-add #'evil-join :around #'+evil-join-a) ;; Prevent gw (`evil-fill') and gq (`evil-fill-and-move') from squeezing ;; spaces. It doesn't in vim, so it shouldn't in evil.