surround.vim vimpulse extension
Štěpán Němec
stepnem at gmail.com
Sun Jul 25 10:44:07 CEST 2010
Tim Harper <timcharper at gmail.com> writes:
> On Sat, Jul 24, 2010 at 3:23 PM, Vegard Øye <vegard_oye at hotmail.com> wrote:
[...]
>> Fourth approach: stay with the delete-or-surround DWIM functions, but
>> bind them in a separate, toggleable keymap rather than overwriting the
>> basic bindings. Like this:
>>
>> (define-minor-mode surround-mode)
>>
>> (vimpulse-define-key 'surround-mode 'vi-state "d"
> vimpulse-delete-surround-or-delete)
>> (vimpulse-define-key 'surround-mode 'vi-state "c"
> vimpulse-change-surround-or-change)
>>
>> Then you can enable surround-mode in certain buffers as appropriate,
>> or turn it into a global minor mode.
>
> Approach 4 does seem pretty good (better than the current behavior of
> hijacking another keymap). What about option 5:
>
> advise vimpulse-range to set the *vimpulse-surrounding* variable to
> nil before calling it
> advise vimpulse-delete with an around filter, if
> *vimpulse-surrounding* is non-nil, then call vimpulse-surround-delete,
> otherwise invoke as normal with ad-do-it
Sounds good. It would also still be possible to define a minor mode and
enable/disable the advice cleanly (albeit not buffer-locally, but that's
not a problem I guess).
[...]
> Drawbacks:
>
> * We are depending on side-effect value from a previous function call.
> This adds complexity and can make things difficult to follow.
I'm not sure I understand -- how is that worse than your current
*vimpulse-surrounding* ugliness where you always initialise it to nil
and set it during the `vimpulse-range' call? Or are you speaking about
precisely that?
Štěpán
More information about the implementations-list
mailing list