Thread: small bugfix around "set filetype=..."
Cream is a free, easy-to-use configuration of the Vim text editor
Brought to you by:
digitect
From: Thomas de G. de L. <deg...@ea...> - 2004-08-21 15:15:34
|
Hi Steve, According to http://www.vim.org/htmldoc/filetype.html, to overide vim filetype detection, one should create a "ftdetect" directory somewhere in the runtime path, and add there a "something.vim" file with something like this: au BufRead,BufNewFile *.foobar set filetype=foobar That works fine with Vim, but gives several "E218: autocommand nesting too deep" errors with Cream (when opening a "something.foobar" file). The issue seems to be that during the filetype detection, the "set filetype=foobar" triggers a call to Cream_filetype(), which forces another "filtetype detect", etc. (well, something like this, that loops somewhere...) A possible fix is attached to this email. It splits the Cream_filetype() function in two parts: * Cream_filetype() is now only for detecting and setting filetype. It is used as an autocmd only for VimEnter and BufEnter. * Cream_filetype_setup() is the additional cream-specific setup for a few filetypes. It is the new autocmd for the FileType event. The patch also fixes a typo that prevents loading of "cream-filetype-html.vim". -- TGL. |
From: Thomas de G. de L. <deg...@ea...> - 2004-08-21 15:26:01
Attachments:
cream-0.30--filetype_fix.patch
|
On Sat, 21 Aug 2004 17:13:09 +0200 Thomas de Grenier de Latour <deg...@ea...> wrote: > A possible fix is attached to this email. No, to _this_ email. -- TGL. |
From: Steve H. <dig...@mi...> - 2004-08-26 12:22:30
|
On Sat, 2004-08-21 at 11:13, Thomas de Grenier de Latour wrote: > Hi Steve, > > According to http://www.vim.org/htmldoc/filetype.html, to overide > vim filetype detection, one should create a "ftdetect" directory > somewhere in the runtime path, and add there a "something.vim" > file with something like this: > au BufRead,BufNewFile *.foobar set filetype=foobar > > That works fine with Vim, but gives several > "E218: autocommand nesting too deep" > errors with Cream (when opening a "something.foobar" file). > > The issue seems to be that during the filetype detection, the > "set filetype=foobar" triggers a call to Cream_filetype(), which > forces another "filtetype detect", etc. (well, something like > this, that loops somewhere...) Understood. > A possible fix is attached to this email. It splits the > Cream_filetype() function in two parts: > * Cream_filetype() is now only for detecting and setting > filetype. It is used as an autocmd only for VimEnter and BufEnter. > * Cream_filetype_setup() is the additional cream-specific setup > for a few filetypes. It is the new autocmd for the FileType event. > > The patch also fixes a typo that prevents loading of > "cream-filetype-html.vim". I'll have to look into this a bit more, the patch breaks Cream filetype detection for me. A quick test has our filetype syntax highlighting and commenting not being picked up. I've always thought there was something broken about our filetype stuff though, "filetype detect" seems heavy-handed just to add our customizations per filetype. I'm probably doing something wrong. -- Steve Hall [ dig...@mi... ] Cream... the Vim text editor in sheep's clothing! http://cream.sourceforge.net |
From: Steve H. <dig...@mi...> - 2004-09-01 02:05:00
|
On Sat, 2004-08-21 at 11:13, Thomas de Grenier de Latour wrote: > Hi Steve, > > According to http://www.vim.org/htmldoc/filetype.html, to overide > vim filetype detection, one should create a "ftdetect" directory > somewhere in the runtime path, and add there a "something.vim" file > with something like this: > au BufRead,BufNewFile *.foobar set filetype=foobar > > That works fine with Vim, but gives several > "E218: autocommand nesting too deep" > errors with Cream (when opening a "something.foobar" file). > > The issue seems to be that during the filetype detection, the "set > filetype=foobar" triggers a call to Cream_filetype(), which forces > another "filtetype detect", etc. (well, something like this, that > loops somewhere...) I've been doing quite a bit of reading/testing on this problem. I wonder if the solution could be as simple as changing line 3 in Cream_filetype() below: 1: if a:0 > 0 2: execute "set filetype=" . a:1 3: else 4: filetype detect 5: endif to: 3: elseif &filetype == "" This would prevent any re-detection (and looping) if the filetype was already known. I now understand that the "ftdetect" directory method you referenced is really intended to pick up custom filetypes not detected by Vim's default filetypes. This is accomplished at startup, and then each filetype must set it's own autocmd to establish the type itself and further establish particular characteristics. These must all be set at load. A better description of what Cream is trying to do is in :help ftplugin-overrule, except that none of those options will work for us. All our conditioning is done over standard Vim's, and we need to have them either work automagically from somewhere on &rtp, or we'll have to load them ourselves from $CREAM/. This latter way is the current method. Does the solution above prevent your looping problem? If so, I am going to to create a new subdirectory $CREAM/filetypes/ to locate all our filetype conditioners, add one for lisp, and finish up the Windows uninstaller on the (now very, very short) trip to 0.31beta! > The patch also fixes a typo that prevents loading of > "cream-filetype-html.vim". Good catch, can you tell I've done little HTML or PHP lately? :) -- Steve Hall [ dig...@mi... ] Cream... the Vim text editor in sheep's clothing! http://cream.sourceforge.net |
From: Thomas de G. de L. <deg...@ea...> - 2004-09-02 10:33:14
|
Hi Steve, Sorry for the late reply, I've been away for a few days. > I wonder if the solution could be as simple as changing line 3 > in Cream_filetype() below: > > 1: if a:0 > 0 > 2: execute "set filetype=" . a:1 > 3: else > 4: filetype detect > 5: endif > > to: > > 3: elseif &filetype == "" That works fine, no more error message. Thanks, -- TGL. |