Thread: Re: Filetype detection missed in cream-conf Cream_file_open()
Cream is a free, easy-to-use configuration of the Vim text editor
Brought to you by:
digitect
From: Steve H. <dig...@mi...> - 2006-05-10 15:08:51
|
From: Ben Armstrong, May 10, 2006 7:24 AM > > I'm pretty sure this was working before upgrading to beta2. (Still a snapshot, a pre-beta2 if you will.) > Using my cream-conf hack to Cream_file_open() an initial file passed > through an environment variable, my /etc/vim/scripts.vim (/etc/vim > is symlinked as /usr/share/vim/vimfiles on Debian) filetype > detection (based on the first couple of lines of the file) is no > longer triggered. Any idea why, or how, at least, to make the > problem visible? > > The filetype detection is triggered properly if I start Cream the > normal way and then use the Open... menu to open the file. I'm sure I broke this for you. Is the filetype detected as "txt" or (in statusline) not detected ("--")? If the latter, try putting this statement after the open: call Cream_filetype() -- Steve Hall [ digitect mindspring com ] :: Cream... something good to put in your Vim! :: http://cream.sourceforge.net |
From: Ben A. <BAr...@dy...> - 2006-05-10 15:16:21
|
Steve Hall wrote: > I'm sure I broke this for you. Is the filetype detected as "txt" or > (in statusline) not detected ("--")? > > If the latter, try putting this statement after the open: > > call Cream_filetype() > It's the former. Detected as "txt". What now? Ben |
From: Steve H. <dig...@mi...> - 2006-05-11 01:46:24
|
From: Ben Armstrong, May 10, 2006 11:16 AM > Steve Hall wrote: > > From: Ben Armstrong, May 10, 2006 7:24 AM > > > > > > Using my cream-conf hack to Cream_file_open() an initial file > > > passed through an environment variable, my /etc/vim/scripts.vim > > > (/etc/vim is symlinked as /usr/share/vim/vimfiles on Debian) > > > filetype detection (based on the first couple of lines of the > > > file) is no longer triggered. Any idea why, or how, at least, > > > to make the problem visible? > > > > > > The filetype detection is triggered properly if I start Cream > > > the normal way and then use the Open... menu to open the file. > > > > I'm sure I broke this for you. Is the filetype detected as "txt" > > or (in statusline) not detected ("--")? > > It's the former. Detected as "txt". What now? Do you have last file restore off? If not, this may be getting in the way. (It would be simple to disable this if Cream detects arguments, this should probably be the default anyway.) > I'm not so sure now it always worked. Maybe I just wasn't alert > before. I think the problem is that cream-conf.vim is too early. The > autocmd triggers on VimEnter, which occurs before all filetype > detection code is loaded. On the other hand, cream-user.vim is too > late. The VimEnter has already happened, so I can't use it as a > trigger. You're right on, we're trying to insert detection into a huge stack of auto commands. A file will only be detected as "txt" by the Cream_filetype() function, it is not a standard Vim filetype. And this can only happen if Vim's :filetype detect command returns an empty filetype. > So I've changed my workaround to open the file directly in > cream-user.vim instead of attaching it to an autocmd. I hope there > are no unforeseen problems with this arrangement. There don't seem > to be so far, anyway: > > if exists("$CREAM_FILE_OPEN") > call Cream_file_open($CREAM_FILE_OPEN) > endif With last file restore off, I would run this via VimEnter command from cream-user. That will make it the very last thing that happens. You can then run Cream_filetype() to find the filetype if it hasn't already been detected, or run :filetype detect just prior if it needs to be reset. -- Steve Hall [ digitect mindspring com ] :: Cream... something good to put in your Vim! :: http://cream.sourceforge.net |
From: Ben A. <BAr...@dy...> - 2006-05-11 11:19:54
|
Steve Hall wrote: > Do you have last file restore off? If not, this may be getting in the > way. Yes, last file restore is off. > (It would be simple to disable this if Cream detects arguments, > this should probably be the default anyway.) > ... where "detects arguments" includes my CREAM_FILE_OPEN hack. That would be great. > You're right on, we're trying to insert detection into a huge stack of > auto commands. > > A file will only be detected as "txt" by the Cream_filetype() > function, it is not a standard Vim filetype. And this can only happen > if Vim's :filetype detect command returns an empty filetype. > Ugh. So the detect must be triggering before my local filetype detection is loaded. > With last file restore off, I would run this via VimEnter command from > cream-user. That will make it the very last thing that happens. You > can then run Cream_filetype() to find the filetype if it hasn't > already been detected, or run :filetype detect just prior if it needs > to be reset. > So, something like: if exists("$CREAM_FILE_OPEN") autocmd VimEnter * call Cream_file_open($CREAM_FILE_OPEN) | Cream_filetype() endif But I tried this in cream-user.vim, and what happens is ... nothing. Absolutely nothing. I end up in an empty (untitled) buffer. How? Ben |
From: Steve H. <dig...@mi...> - 2006-05-11 11:44:18
|
On Thu, 2006-05-11 at 08:19 -0300, Ben Armstrong wrote: > Steve Hall wrote: > > > > (It would be simple to disable this if Cream detects arguments, > > this should probably be the default anyway.) > > ... where "detects arguments" includes my CREAM_FILE_OPEN hack. > That would be great. I wouldn't think it would need to test this, just generally when if argc() > 0. > Ugh. So the detect must be triggering before my local filetype > detection is loaded. Exactly. > So, something like: > > if exists("$CREAM_FILE_OPEN") > autocmd VimEnter * call Cream_file_open($CREAM_FILE_OPEN) | Cream_filetype() > endif I was thinking more like: function! My_special_open_stuff() call Cream_file_open($CREAM_FILE_OPEN) " brand new detection based on Vim's system filetype detect " Cream additions call Cream_filetype() endfunction if exists("$CREAM_FILE_OPEN") autocmd VimEnter * call My_special_open_stuff() endif > But I tried this in cream-user.vim, and what happens is ... nothing. > Absolutely nothing. I end up in an empty (untitled) buffer. How? Is it the tabpage stuff interfering? Let's make sure everything works without those first. -- Steve Hall [ digitect mindspring com ] :: Cream... something good to put in your Vim! :: http://cream.sourceforge.net |
From: Ben A. <BAr...@dy...> - 2006-05-11 11:59:30
|
Steve Hall wrote: > I wouldn't think it would need to test this, just generally when if > argc() > 0. > OK. You're the expert. :) I thought you just finished saying that my file open hack could be interfered with by this setting, that's all. > I was thinking more like: > > function! My_special_open_stuff() > call Cream_file_open($CREAM_FILE_OPEN) > " brand new detection based on Vim's system > filetype detect > " Cream additions > call Cream_filetype() > endfunction > if exists("$CREAM_FILE_OPEN") > autocmd VimEnter * call My_special_open_stuff() > endif > But if I'm not even having the file load in the simple case, certainly the more polished example above won't be any better. At the very worst, my example should throw a syntax error (it doesn't -- it appears to be correct) or load the file but not attempt filetype detection (it doesn't ... nothing is happening). So before I polish up the code, I want it to at least basically work ... > Is it the tabpage stuff interfering? Let's make sure everything works > without those first. > No, tabbed documents is off. Ben |
From: Steve H. <dig...@mi...> - 2006-05-11 16:32:22
|
From: Ben Armstrong, May 11, 2006 7:59 AM > > But if I'm not even having the file load in the simple case, > certainly the more polished example above won't be any better. Whoops, I missed this. I thought it was still loading, just that you ended up in an (Untitled) buffer. (I've was thinking about tab refresh problems.) You might have to drop in some debug code at select points to see what is happening: "*** DEBUG: let n = confirm( \ "DEBUG:\n" . \ " $CREAM_FILE_OPEN = \"" . $CREAM_FILE_OPEN . "\"\n" . \ "\n", "&Ok\n&Cancel", 1, "Info") if n != 1 return endif "*** Or could you be seeing a recursion error since file_open() calls the hook which then re-calls file_open()? -- Steve Hall [ digitect mindspring com ] :: Cream... something good to put in your Vim! :: http://cream.sourceforge.net |