Vimpulse and vim-mode
vegard_oye at hotmail.com
Mon Feb 28 16:33:59 CET 2011
On 2011-02-28 14:09 +0100, Frank Fischer wrote:
> The more I think about it I wonder if this is really the right idea
> using the full power of interactive. One could easily use custom
> interactive statements with lisp expressions like
> (interactive (list (region-beginning) (region-end)
> (vimu:current-motion-type) (vimu:current-motion-register)))
> (or similar) to provide all the required information. I think this would
> fit nicely into the usual Emacs commands and provides the additional
> information for vimu and they can be called non-interactively as any
> other function. Of course we can hide this rather complicate
> interactive statements behind some macros. I think this could solve all
> issues I mentioned in the last post and should be a good compromise.
Sounds good to me.
> The other question that comes into my mind is the following. In
> vim-mode, as I told, I prevent an operator to be executed until the
> following motion has been executed. This can be done as above if the
> interactive form uses some kind of recursive edit (right?).
I don't understand ... the motion is executed in the operator's
`interactive' specification, /before/ the operator's body. When you
press "dw", "d" calls `delete', `delete' reads "w", "w" is bound to
`forward-word', `forward-word' is executed to get buffer positions,
and the positions are passed to the operator's arguments. Then the
operator's body is executed. Are we talking about the same thing?
> And I have a further question. We must certainly specify some
> additional properties for commands, e.g., some commands are
> repeatable while others are not repeatable, some should preserve
> visual-mode (e.g., several window and scrolling commands which are
> not really motions - they cannot be used with an operator and
> sometimes don't even change point) while others disable visual-mode
> (most editing commands). How do we specify theses properties?
I prefer to use keyword arguments:
(vimpulse-define-operator vimpulse-indent (beg end)
(indent-region beg end nil))
These determine how the operator is defined.
More information about the implementations-list