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