You may already know this, but you're going to want to define new commands for [p and ]p using the macro evil-define-command. I haven't though it all the way through yet, but you'll probably call evil-paste-before or evil-paste-after at the beginning and then reindent what was pasted. This should ensure that the commands are a single undo step. I'm not sure about evil-paste-pop, but if you post code for the commands I described I can see if you need to do anything funky to get it working. :)
Thanks! ---Gordon Gustafson On 6/28/14, Gordon Gustafson <[email protected]> wrote: > 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 <[email protected]> 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)))) >> > _______________________________________________ implementations-list mailing list [email protected] https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
