evil: work on support for ]p, [p (adjust indent on paste)

Johann Klähn kljohann at gmail.com
Fri Jun 27 14:26:57 CEST 2014


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))))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.ourproject.org/pipermail/implementations-list/attachments/20140627/c223ad67/attachment.htm 


More information about the implementations-list mailing list