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

Gordon Gustafson gordon3.14 at gmail.com
Sun Jun 29 02:26:11 CEST 2014


I was just going to implement the same thing! I'll take a look at it
tomorrow and see if I can offer any assistance. (I sent this
preliminary email so you wouldn't think the mailing list was dead :)

On 6/27/14, Johann Klähn <kljohann at gmail.com> wrote:
> 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))))
>



More information about the implementations-list mailing list