On Thu, Sep 15, 2016 at 9:45 AM, Kazunobu Kuriyama
<kazunobu.kuriy...@gmail.com> wrote:
> 2016-09-15 7:41 GMT+09:00 Tony Mechelynck <antoine.mechely...@gmail.com>:
>> exists() result is sometimes misleading for a command.
>> Example (with GTK3 gvim linked with GTK 3.16.7):
>>     :echo exists(':tearoff')
>>         2
>>     :tearoff &Help
>>         E319: Sorry, the command is not available in this version
>> So for example the following code in my vimrc would produce the exact
>> error which it is meant to avoid:
>>     au GUIEnter * if exists(':tearoff') == 2 | exe 'tearoff &Help' | endif
>> If the :tearoff command is disabled in GTK3 gvim, then IMHO
>> exists(':tearoff') ought to return 0, not 2.
> I looked into that a bit and found that it was not specific to GTK3.
> The same thing happens with the latest GTK2 GUI and that of 7.4.1401, the
> one just prior to the GTK3 patch inclusion.
> I tried to do a bisect search to find which patch introduced that
> regression, but failed due to a header file relocation on OS X as of 10.9,
> Mavericks.  I was unable to build vim older than 7.4.62.  Nonetheless, I
> confirm that the same regression was also seen with that version.
> Looks it has been there unnoticed for a long time.
> As for GTK3, if the GUI is linked against GTK+ 3.4 or later, tear-off menus
> are disabled, as written in 'h: tear-off-menus'.
> So, fixing the issue is quite easy for GTK >= 3.4; it can be fixed using a
> version check.  But I'm not sure what I can do for the rest for now.

A version check? And, in a script (a plugin maybe) written to run on
any version of Vim on any OS, how do I check the GTK version?
has('gui_gtk3') will say if I am on GTK3 or not, but GTK 3.2 or GTK
3.16? How can this script determine it in some simple manner? In
either case I might be on any Vim version supporting GTK3 so testing
v:version wouldn't help.

If exists() worked like I feel it ought to, I could simply check
exists(':tearoff'), then if zero the command is not available and if
== 2 it is, which is what I understand from ":help exists()" that it
ought to do. But in the case considered, exists(':tearoff') is 2, and
yet the :tearoff command is not present. I call that a bug. How can I
now trust _any_ test for :if exists(':excommandname') == 2 | etc. for
any :excommandname? If it returns false, OK, the command is not there;
but if it returns true, maybe the command is not there anyway!

Best regards,

> Best regards,
> Kazunobu
>> Best regards,
>> Tony.

You received this message from the "vim_dev" 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_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui