Hi there,
I would like to work on a patch to add support for ]p and [p to evil. I
have some working code (see below) to adjust the indent after a call to
evil-paste-after / evil-paste-before, but I would appreciate tips on how to
integrate this with existing evil code (especially so that ]p will be a
single undo step, that evil-paste-pop still works, …).

All the best,
Johann

(defun get-common-indent-in-region (start end)
  (setq end (copy-marker end))
  (unwind-protect
      (let (indentation)
        (save-excursion
          (goto-char start)
          (or (bolp) (forward-line 1))
          (while (< (point) end)
            (skip-chars-forward " \t")
            (setq indentation
                  (cons (current-column) indentation))
            (forward-line 1)))
        (apply #'min indentation))
    (move-marker end nil)))

(defun my-evil-adjust-indent-afer-paste ()
  (interactive)

  (unless (memq last-command
                '(evil-paste-after
                  evil-paste-before))
    (error "Previous command was not a line-wise evil-paste: %s"
last-command))

  (let* ((start (evil-get-marker ?\[))
         (end (evil-get-marker ?\]))
         (common (get-common-indent-in-region start end))
         (this
          (save-excursion
            (cond
             ((eq last-command 'evil-paste-before)
              (goto-char end)
              (forward-line 1))
             (t
              (goto-char start)
              (forward-line -1)))
            (skip-chars-forward " \t")
            (current-column))))
    (indent-rigidly start end (- this common))))
_______________________________________________
implementations-list mailing list
[email protected]
https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list

Reply via email to