Re: exists() result sometimes misleading for a command
Ah, I see. Under GTK3 I can't anymore tearoff the menus, even manually. Best regards, Tony. On Sun, Sep 18, 2016 at 2:13 AM, James McCoywrote: > On Sun, Sep 18, 2016 at 01:25:53AM +0200, Tony Mechelynck wrote: >> A few weeks ago, when I was still building with GTK2 (not GTK3) GUI, >> it had proper tearoff menus, or at least submenus. > > You can manually tear off the menus, but trying to use the command > ":tearoff", even with names of menus that are tab completed, results in > "E319: Sorry, the command is not available in this version". > > Cheers, > -- > James > GPG Key: 4096R/91BF BF4D 6956 BD5D F7B7 2D23 DFE6 91AE 331B A3DB > > -- > -- > 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. -- -- 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.
Re: exists() result sometimes misleading for a command
On Sun, Sep 18, 2016 at 01:25:53AM +0200, Tony Mechelynck wrote: > A few weeks ago, when I was still building with GTK2 (not GTK3) GUI, > it had proper tearoff menus, or at least submenus. You can manually tear off the menus, but trying to use the command ":tearoff", even with names of menus that are tab completed, results in "E319: Sorry, the command is not available in this version". Cheers, -- James GPG Key: 4096R/91BF BF4D 6956 BD5D F7B7 2D23 DFE6 91AE 331B A3DB -- -- 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.
Re: exists() result sometimes misleading for a command
On Fri, Sep 16, 2016 at 11:02 AM, Kazunobu Kuriyamawrote: > 2016-09-15 16:45 GMT+09:00 Kazunobu Kuriyama : >> >> 2016-09-15 7:41 GMT+09:00 Tony Mechelynck : >>> >>> exists() result is sometimes misleading for a command. >>> >>> Example (with GTK3 gvim linked with GTK 3.16.7): >>> :echo exists(':tearoff') >>> 2 >>> :tearoff >>> 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 ' | >>> 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. > > > For the purpose of fixing the issue, I began woking with git to know when > and how `:tearoff` was disabled for the GTK GUI. > > After having skimmed relevant part of the codebase, I did `git blame > ex_docmds.c` and got: > > 071d4279d (Bram Moolenaar 2004-06-13 20:20:40 + 225) #if > defined(FEAT_GUI_W32) && > defined(FEAT_MENU) && defined(FEAT_TEAROFF) > f28dbcea3 (Bram Moolenaar 2016-01-29 22:03:47 +0100 226) static void > ex_tearoff(exarg_T *eap); > 071d4279d (Bram Moolenaar 2004-06-13 20:20:40 + 227) #else > 071d4279d (Bram Moolenaar 2004-06-13 20:20:40 + 228) # define > ex_tearoff ex_ni > 071d4279d (Bram Moolenaar 2004-06-13 20:20:40 + 229) #endif > > Hmm, looks none of us has seen the command working correctly on a newly > built gvim for the last twelve years... > > WTF!! The same surely applies to the Motif GUI, too! (lol) > > I'm now feeling as if my all strength were gone, indeed (笑) > > Seriously, what should we do with the issue? Should we restore the command > for the first time in twelve years? Personally, abolishing it even for GTK > < 3.4 once for all appears to be now a reasonable, wise choice. > > Best, > Kazunobu A few weeks ago, when I was still building with GTK2 (not GTK3) GUI, it had proper tearoff menus, or at least submenus. 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.
Re: exists() result sometimes misleading for a command
2016-09-15 16:45 GMT+09:00 Kazunobu Kuriyama: > 2016-09-15 7:41 GMT+09:00 Tony Mechelynck : > >> exists() result is sometimes misleading for a command. >> >> Example (with GTK3 gvim linked with GTK 3.16.7): >> :echo exists(':tearoff') >> 2 >> :tearoff >> 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 ' | 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. > For the purpose of fixing the issue, I began woking with git to know when and how `:tearoff` was disabled for the GTK GUI. After having skimmed relevant part of the codebase, I did `git blame ex_docmds.c` and got: 071d4279d (Bram Moolenaar 2004-06-13 20:20:40 + 225) #if defined(FEAT_GUI_W32) && defined(FEAT_MENU) && defined(FEAT_TEAROFF) f28dbcea3 (Bram Moolenaar 2016-01-29 22:03:47 +0100 226) static void ex_tearoff(exarg_T *eap); 071d4279d (Bram Moolenaar 2004-06-13 20:20:40 + 227) #else 071d4279d (Bram Moolenaar 2004-06-13 20:20:40 + 228) # define ex_tearoff ex_ni 071d4279d (Bram Moolenaar 2004-06-13 20:20:40 + 229) #endif Hmm, looks none of us has seen the command working correctly on a newly built gvim for the last twelve years... WTF!! The same surely applies to the Motif GUI, too! (lol) I'm now feeling as if my all strength were gone, indeed (笑) Seriously, what should we do with the issue? Should we restore the command for the first time in twelve years? Personally, abolishing it even for GTK < 3.4 once for all appears to be now a reasonable, wise choice. Best, Kazunobu > > 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. >> > > -- -- 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.
Re: exists() result sometimes misleading for a command
Tony Mechelynck wrote: > exists() result is sometimes misleading for a command. > > Example (with GTK3 gvim linked with GTK 3.16.7): > :echo exists(':tearoff') > 2 > :tearoff > 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 ' | endif > > If the :tearoff command is disabled in GTK3 gvim, then IMHO > exists(':tearoff') ought to return 0, not 2. exists() only checks if the command name is correct. It does not check whether the command is supported. Can't change the return value now. We could add exists("::tearoff") or something like that. It's going to be some work to implement that. -- Error:015 - Unable to exit Windows. Try the door. /// 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_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.
Re: exists() result sometimes misleading for a command
On Thu, Sep 15, 2016 at 11:22 AM, Kazunobu Kuriyamawrote: > 2016-09-15 17:46 GMT+09:00 Tony Mechelynck : >> >> On Thu, Sep 15, 2016 at 9:45 AM, Kazunobu Kuriyama >> wrote: >> > 2016-09-15 7:41 GMT+09:00 Tony Mechelynck >> > : >> >> >> >> exists() result is sometimes misleading for a command. >> >> >> >> Example (with GTK3 gvim linked with GTK 3.16.7): >> >> :echo exists(':tearoff') >> >> 2 >> >> :tearoff >> >> 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 ' | >> >> 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. > > > I meant by 'a version check' a preprocessor directive which... probably...is > added to ex_cmds.h to disable ';:tearoff' in order to suppress the false > error message for GTK >= 3.4. I was talking about what I could do for > fixing the issue. Not that imposing anything on anyone. Ah, sorry. I thought you meant keep Vim (temporarily) as-is and do some check in my scripts. I suppose that checking the GTK version in configure is possible and that some #ifdef or similar could be contrived so that exists(':tearoff') should retun zero if and only if trying to use :tearoff would trigger an E319 exception. Maybe this might work as an interim measure (catch the error a posteriori instead of a priori): if has('autocmd') au GUIEnter * \ try \ | exe 'tearoff ' \ | catch /^Vim\%((\a\+)\)\=:E319/ \ | endtry endif > >> >> 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! > > > As I explained, the bug appears to be a long outstanding non-trivial one, > and the VCSs we've used seemingly don't help me much to identify which patch > introduced the regression. I spent not a few time for your report already, > and was thinking of how to find my spare time for investigating huge old > commit logs and mail archives. Mmm... > > Best regards, > Kazunobu > >> >> Best regards, >> Tony. >> >> > >> > Best regards, >> > Kazunobu >> > >> >> >> >> >> >> >> >> Best regards, >> >> Tony. >> >> 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.
Re: exists() result sometimes misleading for a command
2016-09-15 17:46 GMT+09:00 Tony Mechelynck: > On Thu, Sep 15, 2016 at 9:45 AM, Kazunobu Kuriyama > wrote: > > 2016-09-15 7:41 GMT+09:00 Tony Mechelynck > : > >> > >> exists() result is sometimes misleading for a command. > >> > >> Example (with GTK3 gvim linked with GTK 3.16.7): > >> :echo exists(':tearoff') > >> 2 > >> :tearoff > >> 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 ' | > 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. > I meant by 'a version check' a preprocessor directive which... probably...is added to ex_cmds.h to disable ';:tearoff' in order to suppress the false error message for GTK >= 3.4. I was talking about what I could do for fixing the issue. Not that imposing anything on anyone. > 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! > As I explained, the bug appears to be a long outstanding non-trivial one, and the VCSs we've used seemingly don't help me much to identify which patch introduced the regression. I spent not a few time for your report already, and was thinking of how to find my spare time for investigating huge old commit logs and mail archives. Best regards, Kazunobu > Best regards, > Tony. > > > > > 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. > -- -- 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.
Re: exists() result sometimes misleading for a command
On Thu, Sep 15, 2016 at 9:45 AM, Kazunobu Kuriyamawrote: > 2016-09-15 7:41 GMT+09:00 Tony Mechelynck : >> >> exists() result is sometimes misleading for a command. >> >> Example (with GTK3 gvim linked with GTK 3.16.7): >> :echo exists(':tearoff') >> 2 >> :tearoff >> 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 ' | 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, Tony. > > 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.
Re: exists() result sometimes misleading for a command
2016-09-15 7:41 GMT+09:00 Tony Mechelynck: > exists() result is sometimes misleading for a command. > > Example (with GTK3 gvim linked with GTK 3.16.7): > :echo exists(':tearoff') > 2 > :tearoff > 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 ' | 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. 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. > -- -- 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.