[implementations-list] Re: vimpulse

Alessandro Piras laynor at gmail.com
Wed Jul 1 13:31:57 CEST 2009


Hi Fabian,
I was looking at the viper source code to see how to add the '<,'>
functionality to ex commands. It turns out it's quite boring to add it.
Viper does not recognize the '< and '> marks, and the characters recognized
as mark identifiers are hard coded in the ex command parser. I could easily
change the parser to let it recognize '< '>, but that would be yet another
viper function redefinition. I also think I'd have to change it in other
places, like in the ' command, and god knows where else (as there are also
other functions that check if the character is a valid mark, and it seems
viper uses some sort of registers (the same code used for "a "b etc) to
store markers.
To avoid another redefinition, I can do 2 things:
- put the line numbers that identify the current visual selection
automatically after ":" - this would work almost the same, but then you
would have to remember the line numbers if you want to issue a second
command on the visual selection after it is turned off
- use two marks, for example y and z, instead of < and >, and automatically
put 'y,'z after the : when : is issued in visual mode.

By the way, I'm forwarding this mail to the mailing list, so to hear other
opinions too. I also invite you to subscribe to the mailing list, and direct
your feature/fix requests there :)
Cheers,
Alessandro

2009/6/30 Fabian Braennstroem <f.braennstroem at gmx.de>

> Hi Alessandro,
>
> Alessandro Piras wrote:
>
>> thanks for the suggestions! :)
>> ex support is still bad in vimpulse, the code is at least 2 years old, and
>> we didn't work much on it, but that will be on the schedule :)
>>
>
> Sounds nice! I am quite happy, that I saw the new start ... somehow, I was
> afraid, that it will stay at the current status (which was quite good) .
>
> Best Regards!
> Fabian
>
>  Ciao,
>> Alessandro
>>
>> 2009/6/29 Fabian Braennstroem <f.braennstroem at gmx.de <mailto:
>> f.braennstroem at gmx.de>>
>>
>>
>>    Hi Alessandro,
>>
>>    thanks a lot! That is really great!
>>    One or two more suggestions I got, is the adjustment of the search
>>    using:
>>     set ignorecase
>>     set smartcase
>>
>>    in vim and running commands on the visual region like:
>>
>>    :'<,'>s/test/TEST/
>>
>>    in vim :-)
>>
>>    Best Regards!
>>    Fabian
>>
>>    Alessandro Piras wrote:
>>
>>        Hi Fabian,
>>        unluckily, the emacs commands <do-something>-region don't work
>>        at all with the new visual selection, at least for the moment.
>>        I'll try to explain why. The region is the area between the mark
>>        and the point. there are quite a lot of functions that can be
>>        used to identify those two ends, I really don't know why. I
>>        tried at first to override region-beginning and region-end, and
>>        some command worked, and some didn't. I tried to override point
>>        and mark, and some other function worked, and some didn't.
>>        suffice is to say, there's no clean method to make those
>>        commands work automatically. There basically are 3 options:
>>        a) Move the mark and the point at the exit of visual mode, so to
>>        highlight the region. I really don't like this method at all
>>        b) Provide an explicit command to exit visual selection mode and
>>        activate the region, so you can use the region-related commands
>>        c) instead of using region-related commands, like comment-region
>>        and uncomment-region, you provide your own commands that operate
>>        on the visual selection (implemented using the region commands,
>>        possibly).
>>
>>        I'll give you a quick solution using the method 3, as it's the
>>        one that I would use in that case :)
>>
>>        (define-key viper-vi-global-user-map (kbd "\\\]")
>>        'my-vimpulse-comment-region)
>>        (define-key viper-vi-global-user-map (kbd "\\,")
>>        'my-vimpulse-uncomment-region)
>>
>>        (defun my-vimpulse-comment-region ()
>>         (interactive)
>>         (comment-region (vimpulse-get-vs-start) (vimpulse-get-vs-end))
>>         (vimpulse-visual-mode nil))
>>
>>        (defun my-vimpulse-uncomment-region ()
>>         (interactive)
>>         (uncomment-region (vimpulse-get-vs-start) (vimpulse-get-vs-end))
>>         (vimpulse-visual-mode nil))
>>
>>        You can go further than this. As most (maybe all?) emacs region
>>        related commands have the syntax (command region-begin
>>        region-end), it's possible to convert commands in a more
>>        abstract way:
>>        (defmacro vimpulse-region-command (function)
>>         `(lambda ()
>>            (interactive)
>>            (,function (vimpulse-get-vs-start) (vimpulse-get-vs-end))
>>            (vimpulse-visual-mode nil)))
>>        (define-key vimpulse-vi-global-user-map "\\\]"
>>        (vimpulse-region-command comment-region))
>>        (define-key vimpulse-vi-global-user-map "\\,"
>>        (vimpulse-region-command uncomment-region))
>>
>>        As this macro seems to be of general interest, I'll add it to
>>        vimpulse's helper functions :)
>>        Thanks for your feedback!
>>        Alessandro
>>
>>
>>
>>
>>        2009/6/28 Fabian Braennstroem <f.braennstroem at gmx.de
>>        <mailto:f.braennstroem at gmx.de> <mailto:f.braennstroem at gmx.de
>>        <mailto:f.braennstroem at gmx.de>>>
>>
>>
>>           Hi Alessandro,
>>
>>           I just saw the new vimpulse release and that you took the
>>           maintaining :-) This is really great! I had to test the new
>>        release
>>           right away and like the new visual behavior.
>>           Right now, I got a short comment about the visual mode. I use
>>        quite
>>           a lot the command 'comment-region' to place comment characters
>> in
>>           the first column of the whole visual region. This works with
>>        the new
>>           visual mode as well, but unfortunately it seems to behave in
>>        the old
>>           release style, which means that the last marked line does not
>> get
>>           commented out!?
>>
>>           (define-key viper-vi-global-user-map (kbd "\\\]")
>>        'comment-region)
>>           (define-key viper-vi-global-user-map (kbd "\\,")
>>        'uncomment-region)
>>
>>           Do you have a hint, how to fix this?
>>
>>           Thanks in advance!
>>           Fabian
>>
>>
>>
>>
>>
>


More information about the implementations-list mailing list