Thread: Re: [CEDET-devel] running CEDET from CVS
Brought to you by:
zappo
From: David P. <dav...@wa...> - 2005-06-06 09:12:21
|
Hello, [...] >>The reason I'm going to this trouble is simply that I've found a bug and >>I wanted to test with the latest code before reporting it. Well, now's >>my chance to report it: >> >> >>With cedet-1.0pre2 I encountered a bug when using Sticky Func mode in >>some Java files. >> >>1. Select "Sticky Func / In This Buffer". This works fine. >> >>2. Select "Sticky Func / Globally". This works fine >> >>3. Select "Sticky Func / Globally" again to toggle the mode off. >>Nothing happens, though. The header line is still there. >> >>In fact, after (3), it seems impossible to turn off sticky func mode via >>the menu or with M-x semantic-stickyfunc-mode. >> > > [ ... ] > > Hmmm, I see that using "Globally" turns it off ok, but once global is > on, turning it off locally does not. Seems to require some > investigation. Could you please try the following patch. It gives good result for me. If it solves the problem I will commit it. It is a shame that Emacs doesn't provide a standard way to safely share the header line. For now this kind of hack should work provided the header line is setup/restored in a LIFO way. Thanks. David 2005-06-06 David Ponce <da...@dp...> * cedet/semantic/semantic-util-modes.el (semantic-stickyfunc-old-hlf): Don't make it automatically buffer local. (semantic-stickyfunc-mode-setup): Fix save/restore of previous header line. Index: semantic-util-modes.el =================================================================== RCS file: /cvsroot/cedet/cedet/semantic/semantic-util-modes.el,v retrieving revision 1.54 diff -c -r1.54 semantic-util-modes.el *** semantic-util-modes.el 23 Apr 2005 12:50:47 -0000 1.54 --- semantic-util-modes.el 6 Jun 2005 09:00:41 -0000 *************** *** 859,865 **** (defvar semantic-stickyfunc-old-hlf nil "Value of the header line when entering sticky func mode.") - (make-variable-buffer-local 'semantic-stickyfunc-old-hlf) (defconst semantic-stickyfunc-header-line-format '(:eval (list semantic-stickyfunc-indent-string --- 859,864 ---- *************** *** 883,891 **** (error "Sticky Function mode requires Emacs 21")) ;; Enable the mode ;; Save previous buffer local value of header line format. - (kill-local-variable 'semantic-stickyfunc-old-hlf) (when (local-variable-p 'header-line-format (current-buffer)) ! (setq semantic-stickyfunc-old-hlf header-line-format)) (setq header-line-format semantic-stickyfunc-header-line-format) ) ;; Disable sticky func mode --- 882,890 ---- (error "Sticky Function mode requires Emacs 21")) ;; Enable the mode ;; Save previous buffer local value of header line format. (when (local-variable-p 'header-line-format (current-buffer)) ! (set (make-local-variable 'semantic-stickyfunc-old-hlf) ! header-line-format)) (setq header-line-format semantic-stickyfunc-header-line-format) ) ;; Disable sticky func mode *************** *** 894,900 **** (when (eq header-line-format semantic-stickyfunc-header-line-format) (kill-local-variable 'header-line-format) (when (local-variable-p 'semantic-stickyfunc-old-hlf (current-buffer)) ! (setq header-line-format semantic-stickyfunc-old-hlf)))) semantic-stickyfunc-mode) ;;;###autoload --- 893,900 ---- (when (eq header-line-format semantic-stickyfunc-header-line-format) (kill-local-variable 'header-line-format) (when (local-variable-p 'semantic-stickyfunc-old-hlf (current-buffer)) ! (setq header-line-format semantic-stickyfunc-old-hlf) ! (kill-local-variable 'semantic-stickyfunc-old-hlf)))) semantic-stickyfunc-mode) ;;;###autoload |
From: David P. <dav...@wa...> - 2005-06-13 06:01:00
|
Hi Nicholas, [...] > I've tested the patch, but I found it problematic: > > If you follow the sequence in my original posting, the problem is still > there. Here it is again: > > 1. Select local sticky func. This works fine. > 2. Select global sticky func. This works fine > 3. Try to toggle off global sticky func. Error: Nothing happens. The > sticky func header line is still there. Oops! > I think the problem is in semantic-sticky-func-mode-setup. > `header-line-format' is saved regardless of the state of the mode. This > means that if we try to enter the mode twice just like (1) and (2), > above) then semantic goes ahead and saves its own header line... > > The following patch might be helpful in constructing a fix. It patches > semantic-sticky-func-mode-setup to only save `header-line-format' if > we're not in sticky-func-mode. From my testing this completely fixes the > problem. Thanks for analyzing the problem, and for your patch that fixes the problem for me too. I committed it in CVS for the release (and, of course, give you credit for the fix ;-). Thank you for your support. David |
From: Nicholas S. <nj...@in...> - 2005-06-13 04:21:35
|
Hi, David PONCE wrote: > Hello, > [...] > > > Could you please try the following patch. It gives good result for > me. If it solves the problem I will commit it. It is a shame that > Emacs doesn't provide a standard way to safely share the header > line. For now this kind of hack should work provided the header line > is setup/restored in a LIFO way. I've tested the patch, but I found it problematic: If you follow the sequence in my original posting, the problem is still there. Here it is again: 1. Select local sticky func. This works fine. 2. Select global sticky func. This works fine 3. Try to toggle off global sticky func. Error: Nothing happens. The sticky func header line is still there. I think the problem is in semantic-sticky-func-mode-setup. `header-line-format' is saved regardless of the state of the mode. This means that if we try to enter the mode twice just like (1) and (2), above) then semantic goes ahead and saves its own header line... The following patch might be helpful in constructing a fix. It patches semantic-sticky-func-mode-setup to only save `header-line-format' if we're not in sticky-func-mode. From my testing this completely fixes the problem. Index: semantic-util-modes.el =================================================================== RCS file: /cvsroot/cedet/cedet/semantic/semantic-util-modes.el,v retrieving revision 1.55 diff -c -r1.55 semantic-util-modes.el *** semantic-util-modes.el 11 Jun 2005 08:01:31 -0000 1.55 --- semantic-util-modes.el 13 Jun 2005 03:03:38 -0000 *************** *** 882,888 **** (error "Sticky Function mode requires Emacs 21")) ;; Enable the mode ;; Save previous buffer local value of header line format. ! (when (local-variable-p 'header-line-format (current-buffer)) (set (make-local-variable 'semantic-stickyfunc-old-hlf) header-line-format)) (setq header-line-format semantic-stickyfunc-header-line-format) --- 882,890 ---- (error "Sticky Function mode requires Emacs 21")) ;; Enable the mode ;; Save previous buffer local value of header line format. ! (when (and (local-variable-p 'header-line-format (current-buffer)) ! (not (eq header-line-format ! semantic-stickyfunc-header-line-format))) (set (make-local-variable 'semantic-stickyfunc-old-hlf) header-line-format)) (setq header-line-format semantic-stickyfunc-header-line-format) Thanks, Nick. |