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

Johann Klähn kljohann at gmail.com
Wed Jul 2 21:12:51 CEST 2014


(Sorry to everyone, seems my subscription to this list did not go through
so I haven't been received your answers. I just stumbled across them via
the gmane archive. Thus the reply-to-self.)

Gordon, Frank, thanks for taking the time to answer.
I originally tried to define a command as Gordon mentioned (see below), but
this lead to two separate undo steps (pasting and indenting). Regarding
evil-paste-pop I think I like the :paste-command suggestion most, I may end
up implementing that. As I am short on time currently, I likely won't get
to it this month.

(evil-define-command evil-paste-before-adjusting-indent
  (count &optional register yank-handler)
  "Like `evil-paste-before' but adjusts the indent to the current line."
  :suppress-operator t
  (interactive "P<x>")
  (evil-paste-before count register yank-handler)
  (my-evil-adjust-indent-after-paste 'before))




On Fri, Jun 27, 2014 at 2:26 PM, 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))))
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.ourproject.org/pipermail/implementations-list/attachments/20140702/a1797141/attachment.htm 


More information about the implementations-list mailing list