Thread: Re: [cream] Extra buffer created when file opened with cream --remote-send
Cream is a free, easy-to-use configuration of the Vim text editor
Brought to you by:
digitect
From: Steve H. <dig...@da...> - 2007-08-23 12:42:39
|
From: Ben Armstrong, Thu, August 23, 2007 7:21 am > Ben Armstrong wrote: > > > > > > I think this may be Vim working in the background. All sorts of > > > unamed buffers are created in practice, Cream can usually delete > > > them or avoid creating new ones via various autocmds. But when > > > you pass an argument in from an outside application, Vim acts > > > before Cream and we get a slightly dis-organized environment. > > > Window > Tabs > Refresh Tabs should usually fix this. > > > > That does nothing in my case. > > In fact, this morning when I was trying to debug Peter's report to > me that while he sees the first and second tabs, opening a third > file does not create a third tab, but merely replaces the one on > top, I tried "Refresh Tabs" after the third open to see what would > happen. Lo and behold, two empty "Untitled" tabs appeared! So I > guess these extra buffers are being created all the time. We just > don't normally see them. Yes, Vim creates a new buffer for practically every file action. Cream filters most, but occasionally one gets through our autocmd traps. > You may recall that in our cream-user.vim we have an 'after open' > hook set up to create a lockfile for selected files being edited. > When I comment out in the hook the call to "Cream_touch()" so that > the lockfile isn't created, both problems go away! So I need some > ideas about how we can still create the lock file without causing > these problems. Any clues? You could either fix Cream_touch() to not create the un-named, un-modified buffers, or just delete them after the fact with Cream_buffers_delete_untitled(). Then make the buffer you want active current and call Cream_tabpages_refresh(). -- Steve Hall [ digitect dancingpaper com ] :: Cream... usability for Vim :: http://cream.sourceforge.net |
From: Steve H. <dig...@da...> - 2007-08-23 14:27:46
|
From: Ben Armstrong, Thu, August 23, 2007 7:52 am>> Here is a simple, reproducible test case that I believe doesn't> require any of my hooks and that shows Cream_touch() is broken.>> 1. With an empty buffer, ^O:call Cream_touch("test.tmp"). Then> "refresh tabs". No extra tabs appear.> 2. Open a file. Do another ^O:call Cream_touch("test.tmp"). Then> "refresh tabs". An extra "Untitled" tab appears.>> I tried just changing the bwipeout to a "call Cream_bwipeout()" in> Cream_touch(), but that didn't help. I don't really know what I'm> doing here. :)Let's try a new approach that avoids all the buffer manipulation:function! Cream_touch(pathfile)" create an empty file {pathfile}, prompting if it exists" test that head existsif !Cream_pathexists(fnamemodify(a:pathfile, ":p:h"))call confirm(\ "Error: Invalid path passed to Cream_touch().\n" .\ "File not created.\n" .\ "\n", "&Ok", 1, "Warning")return -1endifif Cream_has("ms")let pathfile = fnamemodify(a:pathfile, ":p:8")elselet pathfile = fnamemodify(a:pathfile, ":p")endifexecute "silent! confirm 0write " . pathfileendfunctionThis is much simpler, although an undesirable side effect is that itputs the first line of the current file into the touch file. Not surehow to specify a default range of nothing.-- Steve Hall [ digitect dancingpaper com ]:: Cream... usability for Vim:: http://cream.sourceforge.net |
From: Steve H. <dig...@da...> - 2007-08-23 14:28:53
|
From: Ben Armstrong, Thu, August 23, 2007 7:52 am > > Here is a simple, reproducible test case that I believe doesn't > require any of my hooks and that shows Cream_touch() is broken. > > 1. With an empty buffer, ^O:call Cream_touch("test.tmp"). Then > "refresh tabs". No extra tabs appear. > 2. Open a file. Do another ^O:call Cream_touch("test.tmp"). Then > "refresh tabs". An extra "Untitled" tab appears. > > I tried just changing the bwipeout to a "call Cream_bwipeout()" in > Cream_touch(), but that didn't help. I don't really know what I'm > doing here. :) Let's try a new approach that avoids all the buffer manipulation: function! Cream_touch(pathfile) " create an empty file {pathfile}, prompting if it exists " test that head exists if !Cream_pathexists(fnamemodify(a:pathfile, ":p:h")) call confirm( \ "Error: Invalid path passed to Cream_touch().\n" . \ "File not created.\n" . \ "\n", "&Ok", 1, "Warning") return -1 endif if Cream_has("ms") let pathfile = fnamemodify(a:pathfile, ":p:8") else let pathfile = fnamemodify(a:pathfile, ":p") endif execute "silent! confirm 0write " . pathfile endfunction This is much simpler, although an undesirable side effect is that it puts the first line of the current file into the touch file. Not sure how to specify a default range of nothing. -- Steve Hall [ digitect dancingpaper com ] :: Cream... usability for Vim :: http://cream.sourceforge.net |