diff --git a/modules/feature/evil/config.el b/modules/feature/evil/config.el index 9ade07129..e07c5850d 100644 --- a/modules/feature/evil/config.el +++ b/modules/feature/evil/config.el @@ -139,59 +139,61 @@ line with a linewise comment.") ;; Make o/O continue comments (defun +evil*insert-newline-above-and-respect-comments (orig-fn count) - (cl-letf* ((old-insert-newline-above (symbol-function 'evil-insert-newline-above)) - ((symbol-function 'evil-insert-newline-above) - (lambda () - (if (or (not +evil-want-o/O-to-continue-comments) - (evil-insert-state-p)) - (funcall old-insert-newline-above) - (let ((pos (save-excursion (beginning-of-line-text) (point)))) - (evil-narrow-to-field - (if (save-excursion (nth 4 (syntax-ppss pos))) - (evil-save-goal-column - (setq evil-auto-indent nil) - (goto-char pos) - (let ((ws (abs (skip-chars-backward " \t")))) - ;; FIXME oh god why - (save-excursion - (if comment-line-break-function - (funcall comment-line-break-function) - (comment-indent-new-line)) - (when (and (derived-mode-p 'c-mode 'c++-mode 'objc-mode 'java-mode 'js2-mode) - (eq (char-after) ?/)) - (insert "*")) - (insert - (make-string (max 0 (+ ws (skip-chars-backward " \t"))) - 32))) - (insert (make-string (max 1 ws) 32)))) - (evil-move-beginning-of-line) - (insert (if use-hard-newlines hard-newline "\n")) - (forward-line -1) - (back-to-indentation)))))))) - (let ((evil-auto-indent evil-auto-indent)) - (funcall orig-fn count)))) + (if (or (not +evil-want-o/O-to-continue-comments) + (not (eq this-command 'evil-open-above)) + (evil-insert-state-p)) + (funcall orig-fn count) + (cl-letf (((symbol-function 'evil-insert-newline-above) + (lambda () + (let ((pos (save-excursion (beginning-of-line-text) (point)))) + (evil-narrow-to-field + (require 'smartparens) + (if (save-excursion (nth 4 (sp--syntax-ppss pos))) + (evil-save-goal-column + (setq evil-auto-indent nil) + (goto-char pos) + (let ((ws (abs (skip-chars-backward " \t")))) + ;; FIXME oh god why + (save-excursion + (if comment-line-break-function + (funcall comment-line-break-function) + (comment-indent-new-line)) + (when (and (derived-mode-p 'c-mode 'c++-mode 'objc-mode 'java-mode 'js2-mode) + (eq (char-after) ?/)) + (insert "*")) + (insert + (make-string (max 0 (+ ws (skip-chars-backward " \t"))) + 32))) + (insert (make-string (max 1 ws) 32)))) + (evil-move-beginning-of-line) + (insert (if use-hard-newlines hard-newline "\n")) + (forward-line -1) + (back-to-indentation))))))) + (let ((evil-auto-indent evil-auto-indent)) + (funcall orig-fn count))))) (advice-add #'evil-open-above :around #'+evil*insert-newline-above-and-respect-comments) (defun +evil*insert-newline-below-and-respect-comments (orig-fn count) - (cl-letf* ((old-insert-newline-below (symbol-function 'evil-insert-newline-below)) - ((symbol-function 'evil-insert-newline-below) - (lambda () - (if (or (not +evil-want-o/O-to-continue-comments) - (evil-insert-state-p)) - (funcall old-insert-newline-below) - (let ((pos (save-excursion (beginning-of-line-text) (point)))) - (evil-narrow-to-field - (evil-move-end-of-line) - (cond ((sp-point-in-comment pos) - (setq evil-auto-indent nil) - (if comment-line-break-function - (funcall comment-line-break-function) - (comment-indent-new-line))) - (t - (insert (if use-hard-newlines hard-newline "\n")) - (back-to-indentation))))))))) - (let ((evil-auto-indent evil-auto-indent)) - (funcall orig-fn count)))) + (if (or (not +evil-want-o/O-to-continue-comments) + (not (eq this-command 'evil-open-below)) + (evil-insert-state-p)) + (funcall orig-fn count) + (cl-letf (((symbol-function 'evil-insert-newline-below) + (lambda () + (let ((pos (save-excursion (beginning-of-line-text) (point)))) + (evil-narrow-to-field + (evil-move-end-of-line) + (require 'smartparens) + (cond ((sp-point-in-comment pos) + (setq evil-auto-indent nil) + (if comment-line-break-function + (funcall comment-line-break-function) + (comment-indent-new-line))) + (t + (insert (if use-hard-newlines hard-newline "\n")) + (back-to-indentation)))))))) + (let ((evil-auto-indent evil-auto-indent)) + (funcall orig-fn count))))) (advice-add #'evil-open-below :around #'+evil*insert-newline-below-and-respect-comments) ;; --- custom interactive codes -----------