On Wed, May 24, 2017 at 9:28 AM, Brett Stahlman <brettstahl...@gmail.com> wrote:
> On Wed, May 24, 2017 at 2:08 AM, Bram Moolenaar <b...@moolenaar.net> wrote:
>>
>> Brett Stahlman wrote:
>>
>>> On Tuesday, May 23, 2017 at 8:25:33 AM UTC-5, Brett Stahlman wrote:
>>> > On Tue, May 23, 2017 at 4:35 AM, Bram Moolenaar <b...@moolenaar.net> 
>>> > wrote:
>>> > >
>>> > > Brett Stahlman wrote:
>>> > >
>>> %--snip--%
>>> > >
>>> > > The best solution is probably to also add the raw rhs, with the terminal
>>> > > codes replaced.  This won't work when changing the terminal type, but
>>> > > that is very unlikely to happen.
>>> >
>>> > You mean adding a key such as "raw_rhs" to the dictionary returned by
>>> > maparg()? If so, then yes this would help, but there would still need to
>>> > be a way to determine lhs, which is currently even more ambiguous than
>>> > rhs. While it's true that I probably already have lhs if I'm calling
>>> > maparg(), I need a way to determine which lhs(s) is/are ambiguous with a
>>> > given lhs. Mapcheck() gives me only the rhs of the conflicting map. To
>>> > save and restore, I'd need to know the lhs in canonical form as well.
>>>
>>> Perhaps mapcheck() could take an optional arg requesting something more 
>>> than a simple boolean return. When called with this extra arg, mapcheck() 
>>> could return a conflicting/ambiguous lhs (or list thereof) in some 
>>> canonical format (possibly determined by the value of the extra arg 
>>> itself). As long as the format returned could be fed to maparg(), it would 
>>> be possible to find conflicting mappings, remove them temporarily, and 
>>> subsequently restore them...
>>
>> If you define a mapping you will want to know whether the mapping
>> already exists and needs to be restored.  For that you can use maparg(),
>> no need to use mapcheck().
>>
>> Not sure why you would want to remove "conflicting" mappings. Perhaps
>> when you map the ; key, and the user has ;x mapped?  Then you would need
>> a list.  Adding a maplist() function would be better than adding
>> arguments to mapcheck().
>
> Yes. Very much like that. I'm implementing a sort of transient mode, in
> which I'll "shadow" existing maps with very short (generally single
> character) mappings, which are expected to be ambiguous/conflicting with
> existing maps, and even builtin operators. Of course, when I exit the
> transient mode, I'd need to restore the mappings that were shadowed.
>
> The global and builtin maps are not a problem, since the transient maps use
> <buffer> and <nowait>; however, without parsing the output of one of the :map
> functions, I have no way of knowing which buf-local mappings will be ambiguous
> with the transient maps I'm defining. And parsing the :map output is
> problematic for the reasons already mentioned: e.g., no way to tell the
> difference between function key <F8> and the corresponding 4 characters. I'd
> actually considered taking some sort of iterative approach: e.g., trying all
> possible permutations of lhs as input to maparg() and testing the results, in
> an attempt to deduce the canonical form, but this would be extremely messy,
> and I don't even know whether it would be deterministic... The maplist()
> function you mentioned, if it returned all ambiguous left hand sides in
> canonical form, or even a list of the corresponding maparg()-style
> dictionaries, would be perfect. Of course, there would also need to be a way
> to get the rhs's canonical form: e.g., the extra "raw_rhs" key in the maparg()
> or maplist() dictionary.

One other possibility occurs to me... I haven't looked at the internal
map representation, but I'm guessing it might be possible to return
some sort of "map handle" for ambiguous maps, rather than lhs/rhs in
canonical form. These handles could be passed to functions like
disable_map() and enable_map(), and would preserve the opacity of the
implementation. Just a thought...

Thanks,
Brett S.

>
> Thanks,
> Brett S.
>
>>
>>
>> --
>> Kiss me twice.  I'm schizophrenic.
>>
>>  /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net   \\\
>> ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
>> \\\  an exciting new programming language -- http://www.Zimbu.org        ///
>>  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to