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