Thread: [cedet-semantic] Semantic issue and questions
Brought to you by:
zappo
From: Michael R. <re...@gm...> - 2008-02-06 16:21:04
|
Hi After there have been a number of improvements recently I decided to Cedet another spin. And after playing around a bit it seems indeed to work a lot better than last time I tried. Graet work!! There is an issue however I came across. When calling semantic-ia-complete-symbol it nicely shows the list of completions in the other buffer. But when I select an entry, it adds the _full_ function header in the source buffer. So when it offers "void foo ( int bar )" it inserts exactly that, so when I'm at "xyz.f<semantic-ia-complete-symbol>" I get "xyz.fvoid foo ( int bar )" ... Using semantic-ia-complete-symbol-menu, it seems to work fine, it adds just "oo(". I'm using XEmacs 21.4.17. And I have two questions: Is it somehow possible to cycle through the list of completions, using TAB or whatever? Because the popup menu (semantic-ia-complete-symbol-menu) is not really usable in XEmacs as it doesn't get keyboard focus and the list in the buffer (semantic-ia-complete-symbol) is IMHO also a bit inefficent to use. Currently I use dabbrev-expand on TAB, which works not too bad actually. It would be even better if I could first go through symbols offered by semantic, and only fall back to general completion by dabbrev-expand if there are none. If I use semantic-ia-fast-jump, is there a command to let me jump back to where I came from? I tried pop-tag-mark, but obviously it uses a different mechanism. Greets Michael |
From: Eric M. L. <er...@si...> - 2008-02-06 17:56:29
|
>>> Michael Reiher <re...@gm...> seems to think that: >Hi > >After there have been a number of improvements recently I decided to Cedet >another spin. And after playing around a bit it seems indeed to work a lot >better than last time I tried. Graet work!! Thanks! The answer to your questions below is basically that: The functions in 'semantic-ia' are all lowest order interfaces to various semantic features. Each function is pretty short, and I maintain them as teaching aids for application development and testing. I should probably update the documentation about these items. More detailed answers below: >There is an issue however I came across. When calling >semantic-ia-complete-symbol it nicely shows the list of completions in the >other buffer. But when I select an entry, it adds the _full_ function header >in the source buffer. So when it offers "void foo ( int bar )" it inserts >exactly that, so when I'm at "xyz.f<semantic-ia-complete-symbol>" I get >"xyz.fvoid foo ( int bar )" ... Using semantic-ia-complete-symbol-menu, it >seems to work fine, it adds just "oo(". I'm using XEmacs 21.4.17. The basic problem here is that the completion buffer is filled with useful info abut the possible names (like return type, etc). If you click on a completion in that buffer, it inserts the entirety of that text. I'm not that familiar with that part of Emacs to know what to do about it. If anyone out there knows how to fix stuff from the completion buffer, let me know. >And I have two questions: >Is it somehow possible to cycle through the list of completions, using TAB or >whatever? Because the popup menu (semantic-ia-complete-symbol-menu) is not >really usable in XEmacs as it doesn't get keyboard focus and the list in the >buffer (semantic-ia-complete-symbol) is IMHO also a bit inefficent to use. >Currently I use dabbrev-expand on TAB, which works not too bad actually. It >would be even better if I could first go through symbols offered by semantic, >and only fall back to general completion by dabbrev-expand if there are none. You might want to use `semantic-complete-analyze-inline' for your completion needs. It is a big complicated fancy tooltip driven UI for this sort of thing. There is also speedbar's analyzer mode, ECB's analyzer completions panel, and I think out on Emacs Wiki is "company-mode" that comes with a pretty cool semantic smart completions thingy. (The web video/demo was pretty cool. I haven't gotten around to trying it myself though.) >If I use semantic-ia-fast-jump, is there a command to let me jump back to >where I came from? I tried pop-tag-mark, but obviously it uses a different >mechanism. [ ... ] That function calls `push-mark' which ought to enable the mark stack pop-global-mark (C-x C-SPC) which is different from the tag stack. Alternately, give `semantic-mru-bookmark-mode' a try. Hmmm. I need to get that into senator's menu. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Michael R. <re...@gm...> - 2008-02-07 10:35:07
|
On Wednesday 06 February 2008 18:56, Eric M. Ludlam wrote: > >>> Michael Reiher <re...@gm...> seems to think that: > > >And I have two questions: > >Is it somehow possible to cycle through the list of completions, using TAB > > or whatever? Because the popup menu (semantic-ia-complete-symbol-menu) is > > not really usable in XEmacs as it doesn't get keyboard focus and the list > > in the buffer (semantic-ia-complete-symbol) is IMHO also a bit inefficent > > to use. Currently I use dabbrev-expand on TAB, which works not too bad > > actually. It would be even better if I could first go through symbols > > offered by semantic, and only fall back to general completion by > > dabbrev-expand if there are none. > > You might want to use `semantic-complete-analyze-inline' for your > completion needs. It is a big complicated fancy tooltip driven UI for > this sort of thing. Hmm.... When I call it I only get "Wrong number of arguments: #<subr make-extent>, 5". Also if you say it uses tooltips, I fear it won't work in XEmacs anyway... Also company-mode (while looking pretty slick!) doesn't work in XEmacs. I was looking for something which does inline replacement of the possible completions in the source buffer when cycling through them via subsequent calls of some function (bound to TAB or whatever). Just like dabbrev-expand only with the symbols as data, instead of plain string matching. You don't feel like adding such a convenience function by any chance, do you? :) Debugger entered--Lisp error: (wrong-number-of-arguments #<subr make-extent> 5) semantic-make-overlay(87 87 #<buffer "main.cpp"> nil t) semantic-complete-inline-tag-engine([object semantic-collector-analyze-completions "inline" #<buffer "main.cpp"> nil ((... ... ... ... ... ...)) "" "" nil nil [object semantic-analyze-context "context" (87 . 87) (... "") (function variable) (...) [object semantic-scope-cache "Cache" ... ... nil nil nil nil ...] #<buffer "main.cpp">] (("aaa" function ... ... #<extent [287, 300) semantic 0x8e73420 in buffer foo.h>) ("bbb" function ... ... #<extent [303, 324) semantic 0x8e78070 in buffer foo.h>) ("blah" function ... ... #<extent [206, 225) semantic 0x8e7374c in buffer foo.h>) ("i" variable ... ... #<extent [196, 202) semantic 0x8e73998 in buffer foo.h>) ("p" variable ... ... #<extent [46, 52) semantic 0x8e5dd84 in buffer ParentClass.h>))] [object semantic-displayor-tooltip "inline displayor" nil unbound 5 1 0 nil] #<buffer "main.cpp"> 87 87) semantic-complete-inline-analyzer([object semantic-analyze-context "context" (87 . 87) (("blah" variable ... ... ...) "") (function variable) (("ClassWithExternals" type ... ... ...)) [object semantic-scope-cache "Cache" [object semanticdb-table "main.cpp" ... c++-mode ... nil ... ... "main.cpp" 90 nil] ("main" function ... nil #<extent [19, 89) semantic 0x8e673a8 in buffer main.cpp>) nil nil nil nil (... ... ...)] #<buffer "main.cpp">]) #<compiled-function nil "...(22)" [semantic-completion-inline-active-p semantic-complete-inline-analyzer semantic-analyze-current-context message "Inline completion not needed."] 3 ("/home/michael/Scripts/site-lisp/cedet-cvs/semantic/semantic-complete.elc" . 42386) nil>() call-interactively(semantic-complete-analyze-inline) command-execute(semantic-complete-analyze-inline t) execute-extended-command(nil) call-interactively(execute-extended-command) > >If I use semantic-ia-fast-jump, is there a command to let me jump back to > >where I came from? I tried pop-tag-mark, but obviously it uses a different > >mechanism. > > [ ... ] > > That function calls `push-mark' which ought to enable the mark stack > pop-global-mark (C-x C-SPC) which is different from the tag stack. > This works. Great! > Alternately, give `semantic-mru-bookmark-mode' a try. Hmmm. I need > to get that into senator's menu. > Ah, didn't know about that. Now that you say it, I even found it in the docs... Greets Michael |
From: Eric M. L. <er...@si...> - 2008-02-07 12:53:43
|
>>> Michael Reiher <re...@gm...> seems to think that: >On Wednesday 06 February 2008 18:56, Eric M. Ludlam wrote: >> >>> Michael Reiher <re...@gm...> seems to think that: >> >> >And I have two questions: >> >Is it somehow possible to cycle through the list of completions, using TAB >> > or whatever? Because the popup menu (semantic-ia-complete-symbol-menu) is >> > not really usable in XEmacs as it doesn't get keyboard focus and the list >> > in the buffer (semantic-ia-complete-symbol) is IMHO also a bit inefficent >> > to use. Currently I use dabbrev-expand on TAB, which works not too bad >> > actually. It would be even better if I could first go through symbols >> > offered by semantic, and only fall back to general completion by >> > dabbrev-expand if there are none. >> >> You might want to use `semantic-complete-analyze-inline' for your >> completion needs. It is a big complicated fancy tooltip driven UI for >> this sort of thing. >Hmm.... When I call it I only get "Wrong number of arguments: #<subr >make-extent>, 5". Also if you say it uses tooltips, I fear it won't work in Hmmm. An XEmacs difference. >XEmacs anyway... Also company-mode (while looking pretty slick!) doesn't work >in XEmacs. I was looking for something which does inline replacement of the >possible completions in the source buffer when cycling through them via >subsequent calls of some function (bound to TAB or whatever). Just like >dabbrev-expand only with the symbols as data, instead of plain string >matching. You don't feel like adding such a convenience function by any >chance, do you? :) You can probably do it with hippie-expand. Senator has some support already in `senator-try-expand-semantic'. It uses a simple 'in file' complete mechanism. Replacing it with the smart completer might not be too hard. That would be a handy small project for someone. I added a todo item for myself. Right now I'm focusing on profiling the analyzer which is still a bit too slow for me at work. Good Luck Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Michael R. <re...@gm...> - 2008-02-12 14:49:26
|
On Wednesday 06 February 2008 18:56, Eric M. Ludlam wrote: > >>> Michael Reiher <re...@gm...> seems to think that: > >If I use semantic-ia-fast-jump, is there a command to let me jump back to > >where I came from? I tried pop-tag-mark, but obviously it uses a different > >mechanism. > > [ ... ] > > That function calls `push-mark' which ought to enable the mark stack > pop-global-mark (C-x C-SPC) which is different from the tag stack. > > Alternately, give `semantic-mru-bookmark-mode' a try. Hmmm. I need > to get that into senator's menu. > Hi Eric So I played around a little, trying to find a nice way to do jumping to tags and back again. But it all seems a little tricky. Here is a list of problems I came across. I used the following code for testing: main.cpp: #include "foo.h" int main(int argc, char **argv) { int bbbb; const char* ccc = "sfas"; long asdf; Foo* bar; bar->bbb( ccc ); } foo.h: class Foo { public: Foo(); ~Foo(); aaa( int x ); bbb( const char* y ); private: int i; void blah( int i ); }; foo.cpp: #include "foo.h" Foo::bbb( const char* y ) { } Regarding jumping to symbols: First problem is that semantic-ia-fast-jump doesn't always jump where I want. I'm in main.cpp at bar->bbb(). It seems first to try to find the implementation of Foo::bbb() in the local buffer and jumps there, if present. Fine. But if it's not there it jumps to the declaration in the header file foo.h, while I would like it to jump to the implementation in the foo.cpp. Generally I think it would make sense to have two commands one jumping to implementations and one jumping to declarations, e.g. semantic-ia-fast-jump and semantic-ia-fast-jump-declaration, depending on what I want. If semantic-ia-fast-jump can't find a symbol it somehow jumps to a random place within the local buffer, while it probably should just do nothing. In the example: when the cursor is over bbb at "bar->bbb" and only main.cpp is opened. semantic-ia-fast-jump only takes already opened files into account. If the file where I want to jump to is not yet open, it would be nice if it'd get opened automatically, especially when browsing larger projects. Then I tried C-c , j / C-c , J. It shows both declaration and definition in the completion buffer, however I don't see how to select the one I want. In the example for instance it shows two entries called "bbb" in the completions buffer. If I have bbb and simply press Return it says "[Not unique]", well ... but how am I supposed to choose one or the other?? I can, using the mouse, of course. But still, there are two entries with the same name, and I ask myself: which one is wich? :) Regarding jumping back: Your suggestion regarding pop-global-mark seems to have a number of issues in principle. For one thing marks get pushed to global-mark-ring only if the last mark was in another buffer. So you can't jump back several steps within the same buffer. For another, global-mark-ring gets filled with all kinds a other marks, which interfere a little with jumping through symbols. So often the last mark is just some random position within a buffer. If I see it right, bookmark mode is what should be really used instead ...? Next I tried the suggested semantic-mru-bookmark-mode. However it doesn't work here :) When I call semantic-ia-fast-jump (or C-c , j/J) and then C-x B, it just says: "Semantic Bookmark ring is currently empty". Also editing doesn't seem to insert anything there, should it? After a short time things seem entirely broken, I get only signal errors... (see below). And sometimes things kind of lock up. No matter where I call semantic-ia-fast-jump i get "No context of type function to advance in". Even in the tree buffers of ECB I can't select an entries anymore, but get "Wrong type argument: arrayp, nil" instead.... weird. Greets Michael Signal error message says: idle error: "# <buffer \"main.cpp\"> - Wrong type argument: arrayp, nil" Debug 1: Debugger entered--Lisp error: (error "Object type has no properties" [object semantic-bookmark-ring "Ring" (0 1 . [[object semantic-bookmark "main" ("main" function (:arguments (("argc" variable (:type "int") (reparse-symbol arg-sub-list) [114 123]) ("argv" variable (:pointer 2 :type "char") (reparse-symbol arg-sub-list) [124 136])) :type "int") nil [105 227]) nil 120 "/home/michael/Temp/semantic_test2/main.cpp" 11 edit] nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) 0]) byte-code("..." [obj eieio-class-definition 0 defclass] 2) eieio-oref([object semantic-bookmark-ring "Ring" (0 1 . [... nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) 0] ring) semantic-mrub-cache-flush-fcn() run-hooks(semantic-mrub-cache-flush-fcn) semantic-clear-toplevel-cache() semantic-fetch-tags() byte-code("..." [semantic-fetch-tags nil] 1) semantic-idle-scheduler-refresh-tags() byte-code("..." [others buffers service semantic-current-input-throw-symbol b semantic-idle-scheduler-max-buffer-size nil delq mapcar #<compiled-function (b) "...(7)" [b buffer-file-name] 2> buffer-list 0 buffer-size semantic-idle-scheduler-refresh-tags input-pending-p throw parsing-mode-buffers idle-queue working-temp-message "IDLE: execture service %s..." "IDLE: execture service %s...done" parsing-other-buffers --dolist-temp--52012 --dolist-temp--52013 --dolist-temp--52014 mode semantic-idle-scheduler-mode semantic-debug-enabled semantic-lex-debug safe major-mode semantic-idle-scheduler-verbose-flag inhibit-quit semantic-idle-scheduler-queue] 8) semantic-idle-core-handler() byte-code("..." [match-data match-data ((store-match-data match-data)) semantic-idle-core-handler] 1) semantic-idle-scheduler-function() apply(semantic-idle-scheduler-function nil) byte-code("..." [this-command inhibit-quit quit-flag match-data itimer current-itimer match-data ((store-match-data match-data)) nil itimer-uses-arguments apply itimer-function itimer-function-arguments last-event-time next-wakeup itimers time-elapsed] 5) itimer-run-expired-timers(9.998977) itimer-timer-driver(nil) Debug 2: Debugger entered--Lisp error: (error "Containing expression ends prematurely") scan-sexps(226 -1) forward-sexp(-1) byte-code("..." [fieldsep cp symlist end -1 looking-at "\\w\\|\\s_" forward-sexp buffer-substring-no-properties 1 error nil "\\s("] 3) semantic-ctxt-current-symbol-default(nil) semantic-ctxt-current-symbol() semantic-ctxt-current-symbol-and-bounds-default(228) semantic-ctxt-current-symbol-and-bounds(228) semantic-analyze-current-context-default(228) ecb--semantic-analyze-current-context(228) byte-code("..." [fnargs completions cnt analysis ecb--semantic-analyze-current-context ecb--semantic-find-tag-by-overlay ecb--semantic-analyze-possible-completions ecb--semantic-get-local-arguments] 2) ecb-analyse-buffer-sync() run-hooks(ecb-analyse-buffer-sync) ecb-current-buffer-sync() ecb-window-sync-function() byte-code("..." [this-command inhibit-quit quit-flag match-data itimer current-itimer match-data ((store-match-data match-data)) nil itimer-uses-arguments apply itimer-function itimer-function-arguments last-event-time next-wakeup itimers time-elapsed] 5) itimer-run-expired-timers(44.998727) itimer-timer-driver(nil) Backtrace 1: # bind (standard-output stack-trace-on-signal debug-on-signal stack-trace-on-error debug-on-error class) eieiomt-next(nil) # bind (lambdas mclass class key method) eieiomt-method-list(semantic-mrub-preflush 0 nil) # bind (newargs mclass lambdas tlambdas keys eieio-generic-call-methodname eieio-generic-call-arglst firstarg primarymethodlist args method) eieio-generic-call(semantic-mrub-preflush (nil)) # bind (local-args) semantic-mrub-preflush(nil) # bind (--dolist-temp--52025 e elts buf) semantic-mrub-cache-flush-fcn() run-hooks(semantic-mrub-cache-flush-fcn) semantic-clear-toplevel-cache() # bind (semantic-unmatched-syntax-cache semantic-unmatched-syntax-cache-check semantic-parser-warnings res semantic-lex-block-streams gc-cons-threshold) semantic-fetch-tags() # (unwind-protect ...) # (unwind-protect ...) byte-code("..." [semantic-fetch-tags nil] 1) # (catch idle-scheduler ...) # bind (semantic-flex-unterminated-syntax-end-function semantic-lex-unterminated-syntax-end-function) # (unwind-protect ...) # bind (lexically-safe working-status-percentage-type working-status-dynamic-type working-use-echo-area-p inhibit-quit semantic-working-type) semantic-idle-scheduler-refresh-tags() # (unwind-protect ...) # bind (mode safe others buffers inhibit-quit) byte-code("..." [others buffers service semantic-current-input-throw-symbol b semantic-idle-scheduler-max-buffer-size nil delq mapcar #<compiled-function (b) "...(7)" [b buffer-file-name] 2> buffer-list 0 buffer-size semantic-idle-scheduler-refresh-tags input-pending-p throw parsing-mode-buffers idle-queue working-temp-message "IDLE: execture service %s..." "IDLE: execture service %s...done" parsing-other-buffers --dolist-temp--52012 --dolist-temp--52013 --dolist-temp--52014 mode semantic-idle-scheduler-mode semantic-debug-enabled semantic-lex-debug safe major-mode semantic-idle-scheduler-verbose-flag inhibit-quit semantic-idle-scheduler-queue] 8) # (catch idle-timer ...) # bind (semantic-current-input-throw-symbol) semantic-idle-core-handler() # (unwind-protect ...) # bind (match-data) byte-code("..." [match-data match-data ((store-match-data match-data)) semantic-idle-core-handler] 1) # (condition-case ... . ((error (byte-code "ÁÂÃÄpÅ !#\"Æ" ... 7)))) # (unwind-protect ...) semantic-idle-scheduler-function() apply(semantic-idle-scheduler-function nil) # bind (time-elapsed itimers itimer next-wakeup last-event-time this-command inhibit-quit quit-flag current-itimer) # (unwind-protect ...) # bind (match-data) byte-code("..." [this-command inhibit-quit quit-flag match-data itimer current-itimer match-data ((store-match-data match-data)) nil itimer-uses-arguments apply itimer-function itimer-function-arguments last-event-time next-wakeup itimers time-elapsed] 5) # (condition-case ... . ((error (byte-code "ÂÃÄ !Å !#" ... 5)) (quit (byte-code "ÁÂÃ !\"" ... 4)))) # (unwind-protect ...) # bind (itimers itimer next-wakeup idle-time last-event-time recorded-run-time inhibit-quit time-elapsed) itimer-run-expired-timers(0.024114) # bind (sleep elapsed now itimer-inside-driver inhibit-quit ignored) itimer-timer-driver(nil) # (condition-case ... . error) # (catch top-level ...) |
From: Eric M. L. <er...@si...> - 2008-02-12 20:10:32
|
>>> Michael Reiher <re...@gm...> seems to think that: >Hi Eric > >So I played around a little, trying to find a nice way to do jumping to tags >and back again. But it all seems a little tricky. Here is a list of problems >I came across. > >I used the following code for testing: > [ ... ] > >First problem is that semantic-ia-fast-jump doesn't always jump where I want. >I'm in main.cpp at bar->bbb(). It seems first to try to find the >implementation of Foo::bbb() in the local buffer and jumps there, if present. >Fine. But if it's not there it jumps to the declaration in the header file >foo.h, while I would like it to jump to the implementation in the foo.cpp. When I tried your example, I soon ran into the problem that some of the optimizations I've done recently completely lost the file information from whence the analyzed tags came. I suspect this is the cause of a majority of the issues you discussed. If you do: M-x semantic-adebug-analyze RET you can snoop through the structure, and you will see that bbb is in an unknown buffer. That is consistent with your later conclusions to current behavior. I'll look into getting that fixed. [ ... ] >Then I tried C-c , j / C-c , J. It shows both declaration and definition in >the completion buffer, however I don't see how to select the one I want. In >the example for instance it shows two entries called "bbb" in the completions >buffer. If I have bbb and simply press Return it says "[Not unique]", >well ... but how am I supposed to choose one or the other?? I can, using the >mouse, of course. But still, there are two entries with the same name, and I >ask myself: which one is wich? :) It has been a long time since I exercised these functions, and I did so almost entirely in functional programs. I tried it again today and found some bugs I introduced recently in the core search routines they use. When they do work, each time you press TAB after the first TAB you press, it will highlight different tags. Once it highlights the one you want, press RET to go there. >Regarding jumping back: > >Your suggestion regarding pop-global-mark seems to have a number of issues in >principle. For one thing marks get pushed to global-mark-ring only if the >last mark was in another buffer. So you can't jump back several steps within >the same buffer. For another, global-mark-ring gets filled with all kinds a >other marks, which interfere a little with jumping through symbols. So often >the last mark is just some random position within a buffer. If I see it right, >bookmark mode is what should be really used instead ...? I'm open to suggestions on which kinds of marks to push. The various jump routines are all pretty simple so you are welcome to try the tags one. The code I found in etags that uses the tag ring looks vaguely like this: (let ((marker (make-marker))) (set-marker marker (point)) (ring-insert tags-location-ring marker) ) which you could insert into some functions just before the actual jump. If you like it let me know and I'll make it the default. >Next I tried the suggested semantic-mru-bookmark-mode. However it doesn't >work here :) When I call semantic-ia-fast-jump (or C-c , j/J) and then C-x B, >it just says: "Semantic Bookmark ring is currently empty". Also editing >doesn't seem to insert anything there, should it? After a short time things >seem entirely broken, I get only signal errors... (see below). And sometimes >things kind of lock up. No matter where I call semantic-ia-fast-jump i get >"No context of type function to advance in". Even in the tree buffers of ECB >I can't select an entries anymore, but get "Wrong type argument: arrayp, nil" >instead.... weird. Hmmm. Something is indeed broken when jumping between files. I'll look into it. Thanks for the backtraces too. I think CEDET is suffering from too much optimization this week. :) Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Michael R. <re...@gm...> - 2008-02-13 17:13:26
|
On Tuesday 12 February 2008 21:10, Eric M. Ludlam wrote: > > >Regarding jumping back: > > > >Your suggestion regarding pop-global-mark seems to have a number of issues > > in principle. For one thing marks get pushed to global-mark-ring only if > > the last mark was in another buffer. So you can't jump back several steps > > within the same buffer. For another, global-mark-ring gets filled with > > all kinds a other marks, which interfere a little with jumping through > > symbols. So often the last mark is just some random position within a > > buffer. If I see it right, bookmark mode is what should be really used > > instead ...? > > I'm open to suggestions on which kinds of marks to push. The various > jump routines are all pretty simple so you are welcome to try the tags > one. > > The code I found in etags that uses the tag ring looks vaguely like this: > > (let ((marker (make-marker))) > (set-marker marker (point)) > (ring-insert tags-location-ring marker) > ) > > which you could insert into some functions just before the actual > jump. If you like it let me know and I'll make it the default. Hmm, I don't seem to have a tags-location-ring... either this is a GNU Emacs thing or my XEmacs/etags.el is just too old. However I do have push-tag-mark. Simply replacing push-mark by push-tag-mark in semantic-ia-fast-jump seems to work perfectly well! Etags has to be loaded for that though... > > >Next I tried the suggested semantic-mru-bookmark-mode. However it doesn't > >work here :) When I call semantic-ia-fast-jump (or C-c , j/J) and then C-x > > B, it just says: "Semantic Bookmark ring is currently empty". Also > > editing doesn't seem to insert anything there, should it? After a short > > time things seem entirely broken, I get only signal errors... (see > > below). And sometimes things kind of lock up. No matter where I call > > semantic-ia-fast-jump i get "No context of type function to advance in". > > Even in the tree buffers of ECB I can't select an entries anymore, but > > get "Wrong type argument: arrayp, nil" instead.... weird. > > Hmmm. Something is indeed broken when jumping between files. I'll > look into it. Should your fixes regarding jumping address these problems too? If yes, they didn't ... :) Greets Michael |
From: Eric M. L. <er...@si...> - 2008-02-13 04:11:05
|
>>> Michael Reiher <re...@gm...> seems to think that: >On Wednesday 06 February 2008 18:56, Eric M. Ludlam wrote: >> >>> Michael Reiher <re...@gm...> seems to think that: [ ... ] >Regarding jumping to symbols: > >First problem is that semantic-ia-fast-jump doesn't always jump where I want. >I'm in main.cpp at bar->bbb(). It seems first to try to find the >implementation of Foo::bbb() in the local buffer and jumps there, if present. >Fine. But if it's not there it jumps to the declaration in the header file >foo.h, while I would like it to jump to the implementation in the foo.cpp. > >Generally I think it would make sense to have two commands one jumping to >implementations and one jumping to declarations, e.g. semantic-ia-fast-jump >and semantic-ia-fast-jump-declaration, depending on what I want. > >If semantic-ia-fast-jump can't find a symbol it somehow jumps to a random >place within the local buffer, while it probably should just do nothing. In >the example: when the cursor is over bbb at "bar->bbb" and only main.cpp is >opened. > [ ... ] In CEDET/CVS, I had optimized the analyzer to make it much faster, but file location of tags got lost which caused it to jump into random locations. I've attempted to save file names with tags as the analyzer runs, and now the jump routine is a bit more robust. (Now in CVS.) For your specific question about going to an implementation instead of the in class declaration. The ia-jump command is an example that shows how to run the analyzer, and that you can jump to the tags that it finds. The analyzer only rummages around in your header files, so naturally that is what it will find. If you ran this in the past, the analyzer used to gather in externally defined methods, and would pick one of those instead of the in-class prototype. I had removed that feature to make the analyzer run faster, cutting analyzer execution time in about half. Restoring that behavior is possible, but should be outside the analyzer, and in the ia routine instead. It is certainly possible to get that list, and your thought about using senator's key binding for C-c , J is correct. That routine should do what you want. I had trouble getting this to work on some code I have at work, and the problem was with the brutish search path routine. I'm still not sure what's up with that, but it's on my todo list. When it is working, just press TAB alot and it will show how to distinguish between similarly named tags. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Michael R. <re...@gm...> - 2008-02-13 17:13:25
|
On Wednesday 13 February 2008 05:10, Eric M. Ludlam wrote: > > In CEDET/CVS, I had optimized the analyzer to make it much faster, but > file location of tags got lost which caused it to jump into random > locations. I've attempted to save file names with tags as the > analyzer runs, and now the jump routine is a bit more robust. (Now in > CVS.) I tested it, also with bigger source files, and ia-jumping seems to work pretty well now. Thanks a lot! It seems my observation that it jumps to a local implementation, if present, was also a bug...it _always_ jumps to the header file, right? > > For your specific question about going to an implementation instead of > the in class declaration. The ia-jump command is an example that > shows how to run the analyzer, and that you can jump to the tags that > it finds. The analyzer only rummages around in your header files, so > naturally that is what it will find. I see. > > If you ran this in the past, the analyzer used to gather in externally > defined methods, and would pick one of those instead of the in-class > prototype. I had removed that feature to make the analyzer run > faster, cutting analyzer execution time in about half. Restoring that > behavior is possible, but should be outside the analyzer, and in the > ia routine instead. Well, the use case is when you try to follow a code path through several functions. Then you are obviously only interested in the implementations. As there are also use cases for jumping to the declaration (e.g. in order to read the associated documentation), I think for the future it really makes sense to have two separate functions, to use depending on where you intend to go (at least until someone implements a jumping-follows-mind.el). As a workaround I think I can jump to the header file and then switch over to the corresponding .cpp file using an own function... yes, that'll do. > > It is certainly possible to get that list, and your thought about > using senator's key binding for C-c , J is correct. That routine > should do what you want. > > I had trouble getting this to work on some code I have at work, and > the problem was with the brutish search path routine. I'm still not > sure what's up with that, but it's on my todo list. When it is > working, just press TAB alot and it will show how to distinguish > between similarly named tags. Hmm, I mostly tried that because you suggested it in some other thread. However I think in most cases personally I'm faster with my workaround, mentioned above. So no need to hurry from my side :) Greets Michael |
From: Eric M. L. <er...@si...> - 2008-02-22 00:31:40
|
Hi, I finally had a chance to debug this. The problem I was able to reproduce resulted when the cursor was between tags, so there was no tag to push into the tag-ring. I checked in a fix for that part. Enjoy Eric >>> Michael Reiher <re...@gm...> seems to think that: [ ... ] >Next I tried the suggested semantic-mru-bookmark-mode. However it doesn't >work here :) When I call semantic-ia-fast-jump (or C-c , j/J) and then C-x B, >it just says: "Semantic Bookmark ring is currently empty". Also editing >doesn't seem to insert anything there, should it? After a short time things >seem entirely broken, I get only signal errors... (see below). And sometimes >things kind of lock up. No matter where I call semantic-ia-fast-jump i get >"No context of type function to advance in". Even in the tree buffers of ECB >I can't select an entries anymore, but get "Wrong type argument: arrayp, nil" >instead.... weird. > >Greets Michael > > >Signal error message says: >idle error: "# <buffer \"main.cpp\"> - Wrong type argument: arrayp, nil" > >Debug 1: > >Debugger entered--Lisp error: (error "Object type has no properties" [object >semantic-bookmark-ring "Ring" (0 1 . [[object semantic-bookmark >"main" ("main" function (:arguments (("argc" variable (:type "int") >(reparse-symbol arg-sub-list) [114 123]) ("argv" variable (:pointer 2 :type >"char") (reparse-symbol arg-sub-list) [124 136])) :type "int") nil [105 227]) >nil 120 "/home/michael/Temp/semantic_test2/main.cpp" 11 edit] nil nil nil nil >nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) 0]) > byte-code("..." [obj eieio-class-definition 0 defclass] 2) > eieio-oref([object semantic-bookmark-ring "Ring" (0 1 . [... nil nil nil nil >nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) 0] ring) > semantic-mrub-cache-flush-fcn() > run-hooks(semantic-mrub-cache-flush-fcn) > semantic-clear-toplevel-cache() > semantic-fetch-tags() > byte-code("..." [semantic-fetch-tags nil] 1) > semantic-idle-scheduler-refresh-tags() > byte-code("..." [others buffers service semantic-current-input-throw-symbol >b semantic-idle-scheduler-max-buffer-size nil delq mapcar #<compiled-function >(b) "...(7)" [b buffer-file-name] 2> buffer-list 0 buffer-size >semantic-idle-scheduler-refresh-tags input-pending-p throw >parsing-mode-buffers idle-queue working-temp-message "IDLE: execture service >%s..." "IDLE: execture service %s...done" parsing-other-buffers >--dolist-temp--52012 --dolist-temp--52013 --dolist-temp--52014 mode >semantic-idle-scheduler-mode semantic-debug-enabled semantic-lex-debug safe >major-mode semantic-idle-scheduler-verbose-flag inhibit-quit >semantic-idle-scheduler-queue] 8) > semantic-idle-core-handler() > byte-code("..." [match-data match-data ((store-match-data match-data)) >semantic-idle-core-handler] 1) > semantic-idle-scheduler-function() > apply(semantic-idle-scheduler-function nil) > byte-code("..." [this-command inhibit-quit quit-flag match-data itimer >current-itimer match-data ((store-match-data match-data)) nil >itimer-uses-arguments apply itimer-function itimer-function-arguments >last-event-time next-wakeup itimers time-elapsed] 5) > itimer-run-expired-timers(9.998977) > itimer-timer-driver(nil) > [ ... ] |
From: Michael R. <re...@gm...> - 2008-02-24 12:45:55
|
Hi Unfortunately this doesn't seem to fix anything for me. When jumping and then calling "C-x B" I still just get "Semantic Bookmark ring is currently empty". Also the idle error and "lockups" are still present. However I found how to reproduce it. I used the example below. I start XEmacs, load main.cpp, place the cursor at the and of the line "bar->bbb( ccc );". Now things either break right away, after removing the semicolon or after readding it. Saving the file might play a role, I'm not sure, but that's basically it. After it broke I get those idle errors and I can't open files anymore, for instance. ... ah, now I think I see what you meant in your reply by "between tags, so there was no tag to push" ... :) However your fix didn't help. Greets Michael foo.h: class Foo { public: Foo(); ~Foo(); aaa( int x ); bbb( const char* y ); private: int i; void blah( int i ); }; main.cpp: #include "foo.h" void foo2() { } void foo1() { foo2(); } int main(int argc, char **argv ) { int bbbb; const char* ccc = "sfas"; long asdf; Foo* bar; foo1(); bar->bbb( ccc ); } On Friday 22 February 2008 01:31, Eric M. Ludlam wrote: > Hi, > > I finally had a chance to debug this. The problem I was able to > reproduce resulted when the cursor was between tags, so there was no > tag to push into the tag-ring. I checked in a fix for that part. > > Enjoy > Eric > > >>> Michael Reiher <re...@gm...> seems to think that: > > [ ... ] > > >Next I tried the suggested semantic-mru-bookmark-mode. However it doesn't > >work here :) When I call semantic-ia-fast-jump (or C-c , j/J) and then C-x > > B, it just says: "Semantic Bookmark ring is currently empty". Also > > editing doesn't seem to insert anything there, should it? After a short > > time things seem entirely broken, I get only signal errors... (see > > below). And sometimes things kind of lock up. No matter where I call > > semantic-ia-fast-jump i get "No context of type function to advance in". > > Even in the tree buffers of ECB I can't select an entries anymore, but > > get "Wrong type argument: arrayp, nil" instead.... weird. > > > >Greets Michael > > > > > >Signal error message says: > >idle error: "# <buffer \"main.cpp\"> - Wrong type argument: arrayp, nil" > > > >Debug 1: > > > >Debugger entered--Lisp error: (error "Object type has no properties" > > [object semantic-bookmark-ring "Ring" (0 1 . [[object semantic-bookmark > >"main" ("main" function (:arguments (("argc" variable (:type "int") > >(reparse-symbol arg-sub-list) [114 123]) ("argv" variable (:pointer 2 > > :type "char") (reparse-symbol arg-sub-list) [124 136])) :type "int") nil > > [105 227]) nil 120 "/home/michael/Temp/semantic_test2/main.cpp" 11 edit] > > nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil > > nil]) 0]) byte-code("..." [obj eieio-class-definition 0 defclass] 2) > > eieio-oref([object semantic-bookmark-ring "Ring" (0 1 . [... nil nil nil > > nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) 0] > > ring) semantic-mrub-cache-flush-fcn() > > run-hooks(semantic-mrub-cache-flush-fcn) > > semantic-clear-toplevel-cache() > > semantic-fetch-tags() > > byte-code("..." [semantic-fetch-tags nil] 1) > > semantic-idle-scheduler-refresh-tags() > > byte-code("..." [others buffers service > > semantic-current-input-throw-symbol b > > semantic-idle-scheduler-max-buffer-size nil delq mapcar > > #<compiled-function (b) "...(7)" [b buffer-file-name] 2> buffer-list 0 > > buffer-size > >semantic-idle-scheduler-refresh-tags input-pending-p throw > >parsing-mode-buffers idle-queue working-temp-message "IDLE: execture > > service %s..." "IDLE: execture service %s...done" parsing-other-buffers > >--dolist-temp--52012 --dolist-temp--52013 --dolist-temp--52014 mode > >semantic-idle-scheduler-mode semantic-debug-enabled semantic-lex-debug > > safe major-mode semantic-idle-scheduler-verbose-flag inhibit-quit > >semantic-idle-scheduler-queue] 8) > > semantic-idle-core-handler() > > byte-code("..." [match-data match-data ((store-match-data match-data)) > >semantic-idle-core-handler] 1) > > semantic-idle-scheduler-function() > > apply(semantic-idle-scheduler-function nil) > > byte-code("..." [this-command inhibit-quit quit-flag match-data itimer > >current-itimer match-data ((store-match-data match-data)) nil > >itimer-uses-arguments apply itimer-function itimer-function-arguments > >last-event-time next-wakeup itimers time-elapsed] 5) > > itimer-run-expired-timers(9.998977) > > itimer-timer-driver(nil) > > [ ... ] > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > cedet-semantic mailing list > ced...@li... > https://lists.sourceforge.net/lists/listinfo/cedet-semantic |
From: Eric M. L. <er...@si...> - 2008-02-24 15:15:05
|
>>> Michael Reiher <re...@gm...> seems to think that: >Hi > >Unfortunately this doesn't seem to fix anything for me. When jumping and then >calling "C-x B" I still just get "Semantic Bookmark ring is currently empty". Hi, This is because the ring is empty. :) The ia-fast-jump command doesn't explicitly push a semantic bookmark. I changed the bookmark code to add advice to 'push-mark' instead of `set-mark-command'. So long as semantic-ia-fast-jump still has the `push-mark' in your version, this should solve that problem. >Also the idle error and "lockups" are still present. However I found how to >reproduce it. I used the example below. I start XEmacs, load main.cpp, place >the cursor at the and of the line "bar->bbb( ccc );". Now things either break >right away, after removing the semicolon or after readding it. Saving the >file might play a role, I'm not sure, but that's basically it. After it broke >I get those idle errors and I can't open files anymore, for instance. I had not realized you were using XEmacs. Not that I know how that might make things different either. While debugging some of your issues I've seen idle errors which I've fixed along the way, but I can no longer reproduce this one. Next time the message comes up, you might be able to get a stack trace by doing this: M-: (semantic-idle-summary-current-symbol-info) RET Good Luck Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Michael R. <re...@gm...> - 2008-02-25 19:09:09
|
On Sunday 24 February 2008 16:14, Eric M. Ludlam wrote: > >>> Michael Reiher <re...@gm...> seems to think that: > > > >Hi > > > >Unfortunately this doesn't seem to fix anything for me. When jumping and > > then calling "C-x B" I still just get "Semantic Bookmark ring is > > currently empty". > > Hi, > > This is because the ring is empty. :) The ia-fast-jump command > doesn't explicitly push a semantic bookmark. I changed the bookmark Ah, I somehow thought it was supposed to do that ... > code to add advice to 'push-mark' instead of `set-mark-command'. So > long as semantic-ia-fast-jump still has the `push-mark' in your > version, this should solve that problem. > Hmm, somehow the bookmark ring is still empty after calling push-mark... C-h f says that push-mark is adviced, but it doesn't seem to call semantic-mrub-push. ... I tracked it down to the line (when (and semantic-mru-bookmark-mode (interactive-p)) in the defadvice. Replacing "(interactive-p)" with "t" (or removing the line all together) makes it insert something into the bookmark ring. Not sure what I'm doing here though :) However then calling C-x B gives an error. But maybe this is simply related to the other issue. # bind (standard-output stack-trace-on-signal debug-on-signal stack-trace-on-error debug-on-error) signal(wrong-type-argument ((or object-p class-p) nil)) # bind (field obj) eieio-oref(nil :object-name) # bind (assoclist list field) object-assoc-list(:object-name ([object semantic-bookmark "main" ("main" function ... nil #<extent [64, 194) semantic 0x8e352e0 in buffer main.cpp>) nil 103 "/home/michael/Temp/semantic_test3/main.cpp" 1 mark] nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)) # bind (ans first elts prompt) semantic-mrub-completing-read("Switch to tag") (list (semantic-mrub-completing-read "Switch to tag")) call-interactively(semantic-mrub-switch-tags) # (condition-case ... . error) # (catch top-level ...) > >Also the idle error and "lockups" are still present. However I found how > > to reproduce it. I used the example below. I start XEmacs, load main.cpp, > > place the cursor at the and of the line "bar->bbb( ccc );". Now things > > either break right away, after removing the semicolon or after readding > > it. Saving the file might play a role, I'm not sure, but that's basically > > it. After it broke I get those idle errors and I can't open files > > anymore, for instance. > > I had not realized you were using XEmacs. Not that I know how that > might make things different either. While debugging some of your > issues I've seen idle errors which I've fixed along the way, but I can > no longer reproduce this one. > > Next time the message comes up, you might be able to get a stack trace > by doing this: > > M-: (semantic-idle-summary-current-symbol-info) RET When I'm over "foo1();" (in main()) I get: ("foo1" function (:type "void") (:filename "/home/michael/Temp/semantic_test3/main.cpp") #<extent [37, 62) semantic 0x8677c64 in buffer main.cpp>) Otherwise I get just "nil", e.g. over "bar" or "bbb" in the line "bar->bbb( ccc );". For the idle error, I get the following stack trace: [Trace 1] (see below). Now that I try it, it seems the idle error (or the state of brokenness for that matter) is easier to trigger when using ECB ([Trace 1]). But I was able to trigger it also without ECB being loaded ([Trace 3]). There are also other weird things going on, when bookmark mode is enabled... E.g. at some point I can't select text in non-source buffers anymore (Args out of range: #<buffer " *Message-Log*">, 0, 0) ... I can't open files anymore [Trace 4] ... Even when things seems normal and I turn on stack-trace-on-signal I get quite a few of them. Are these all errors, or is this normal, e.g. [Trace 2]? Another note: I just installed the GNU Emacs (21.4a), and all this happens the same here. So it's not XEmacs specific. Hope that helps a bit ... Greets Michael [Trace 1]: # bind (standard-output stack-trace-on-signal debug-on-signal stack-trace-on-error debug-on-error class) eieiomt-next(nil) # bind (lambdas mclass class key method) eieiomt-method-list(semantic-mrub-preflush 0 nil) # bind (newargs mclass lambdas tlambdas keys eieio-generic-call-methodname eieio-generic-call-arglst firstarg primarymethodlist args method) eieio-generic-call(semantic-mrub-preflush (nil)) # bind (local-args) semantic-mrub-preflush(nil) # bind (--dolist-temp--52026 e elts buf) semantic-mrub-cache-flush-fcn() run-hooks(semantic-mrub-cache-flush-fcn) semantic-clear-toplevel-cache() # bind (semantic-unmatched-syntax-cache semantic-unmatched-syntax-cache-check semantic-parser-warnings res semantic-lex-block-streams gc-cons-threshold) semantic-fetch-tags() # (unwind-protect ...) # (unwind-protect ...) byte-code("..." [semantic-fetch-tags nil] 1) # (catch idle-scheduler ...) # bind (semantic-flex-unterminated-syntax-end-function semantic-lex-unterminated-syntax-end-function) # (unwind-protect ...) # bind (lexically-safe working-status-percentage-type working-status-dynamic-type working-use-echo-area-p inhibit-quit semantic-working-type) semantic-idle-scheduler-refresh-tags() # (unwind-protect ...) # bind (mode safe others buffers inhibit-quit) byte-code("..." [others buffers service semantic-current-input-throw-symbol b semantic-idle-scheduler-max-buffer-size nil delq mapcar #<compiled-function (b) "...(7)" [b buffer-file-name] 2> buffer-list 0 buffer-size semantic-idle-scheduler-refresh-tags input-pending-p throw parsing-mode-buffers idle-queue working-temp-message "IDLE: execture service %s..." "IDLE: execture service %s...done" parsing-other-buffers --dolist-temp--52013 --dolist-temp--52014 --dolist-temp--52015 mode semantic-idle-scheduler-mode semantic-debug-enabled semantic-lex-debug safe major-mode semantic-idle-scheduler-verbose-flag inhibit-quit semantic-idle-scheduler-queue] 8) # (catch idle-timer ...) # bind (semantic-current-input-throw-symbol) semantic-idle-core-handler() # (unwind-protect ...) # bind (match-data) byte-code("..." [match-data match-data ((store-match-data match-data)) semantic-idle-core-handler] 1) # (condition-case ... . ((error (byte-code "ÁÂÃÄpÅ !#\"Æ" ... 7)))) # (unwind-protect ...) semantic-idle-scheduler-function() apply(semantic-idle-scheduler-function nil) # bind (time-elapsed itimers itimer next-wakeup last-event-time this-command inhibit-quit quit-flag current-itimer) # (unwind-protect ...) # bind (match-data) byte-code("..." [this-command inhibit-quit quit-flag match-data itimer current-itimer match-data ((store-match-data match-data)) nil itimer-uses-arguments apply itimer-function itimer-function-arguments last-event-time next-wakeup itimers time-elapsed] 5) # (condition-case ... . ((error (byte-code "ÂÃÄ !Å !#" ... 5)) (quit (byte-code "ÁÂà !\"" ... 4)))) # (unwind-protect ...) # bind (itimers itimer next-wakeup idle-time last-event-time recorded-run-time inhibit-quit time-elapsed) itimer-run-expired-timers(0.003969) # bind (sleep elapsed now itimer-inside-driver inhibit-quit ignored) itimer-timer-driver(nil) dispatch-event(#<timeout-event nil>) # bind (event) byte-code("..." [id event next-event eval-event-p event-function internal-make-dialog-box-exit event-object throw --cl-block-nil-- (nil) dispatch-event] 3) # (catch --cl-block-nil-- ...) # bind (id sym) byte-code("..." [thunk frames id sym eval gensym lambda (did) when eq quote (did) mapc (quote enable-frame) (enqueue-eval-event (quote internal-make-dialog-box-exit) did) remove-hook (quote delete-dialog-box-hook) framep add-hook delete-frame-hook delete-dialog-box-hook disable-frame --cl-block-nil-- (byte-code " à !«Ä !Åa«Æ ! a«ÇÈÉ\"ªÊ !)ª\\" [id event next-event eval-event-p event-function internal-make-dialog-box-exit event-object throw --cl-block-nil-- ... dispatch-event] 3)] 11) # (catch internal-dialog-box-finish ...) # bind (frames thunk) dialog-box-modal-loop((make-dialog-box-internal (quote question) (quote (:title "ECB - Tip of the day" :question "You can quickly toggle auto. expanding of the ECB-methods-buffer with `ecb-toggle-auto-expand-tag-tree'." :buttons ...)))) # bind (cl-modal) # (unwind-protect ...) # bind (--letf-save--60171 --letf-bound--60172 cl-keys type) make-dialog-box(question :title "ECB - Tip of the day" :modal t :question "You can quickly toggle auto. expanding of the ECB-methods-buffer with `ecb-toggle-auto-expand-tag-tree'." :buttons (["Close" (identity nil) t])) # bind (button title button-text title-text message-str) ecb-message-box("You can quickly toggle auto. expanding of the ECB-methods-buffer with `ecb-toggle-auto-expand-tag-tree'." "Tip of the day" "Close") # bind (tip cursor) ecb-show-tip-of-the-day() # (condition-case ... . ((error))) # bind (stack-trace-on-error) ecb-activate--impl() ecb-activate-internal() # bind (new-state arg) ecb-minor-mode(1) ecb-activate() ecb-auto-activate-hook() run-hooks(ecb-auto-activate-hook) # bind (error-data) normal-top-level() # (condition-case ... . error) # (catch top-level ...) [Trace 2]: # bind (standard-output stack-trace-on-signal debug-on-signal stack-trace-on-error debug-on-error) byte-code("..." [obj eieio-class-definition 0 defclass] 2) # (condition-case ... . ((error))) # bind (field obj) eieio-oref([object semantic-analyze-context "context" (166 . 170) (("foo1" function ... ... #<extent [37, 62) semantic 0x8677c64 in buffer main.cpp>)) (function variable) nil [object semantic-scope-cache "Cache" [object semanticdb-table "main.cpp" ... c++-mode ... t nil ... ... "main.cpp" 597 nil] ("main" function ... nil #<extent [64, 194) semantic 0x8677b4c in buffer main.cpp>) nil nil nil nil (... ... ... ... ... ...)] #<buffer "main.cpp">] :prefix) # bind (context) semantic-analyze-context([object semantic-analyze-context "context" (166 . 170) (("foo1" function ... ... #<extent [37, 62) semantic 0x8677c64 in buffer main.cpp>)) (function variable) nil [object semantic-scope-cache "Cache" [object semanticdb-table "main.cpp" ... c++-mode ... t nil ... ... "main.cpp" 597 nil] ("main" function ... nil #<extent [64, 194) semantic 0x8677b4c in buffer main.cpp>) nil nil nil nil (... ... ... ... ... ...)] #<buffer "main.cpp">]) apply(semantic-analyze-context [object semantic-analyze-context "context" (166 . 170) (("foo1" function ... ... #<extent [37, 62) semantic 0x8677c64 in buffer main.cpp>)) (function variable) nil [object semantic-scope-cache "Cache" [object semanticdb-table "main.cpp" ... c++-mode ... t nil ... ... "main.cpp" 597 nil] ("main" function ... nil #<extent [64, 194) semantic 0x8677b4c in buffer main.cpp>) nil nil nil nil (... ... ... ... ... ...)] #<buffer "main.cpp">]) # bind (eieio-generic-call-next-method-list has-return-val eieio-generic-call-key scoped-class rval lastval rvalever found newargs mclass lambdas tlambdas keys eieio-generic-call-methodname eieio-generic-call-arglst firstarg primarymethodlist args method) eieio-generic-call(semantic-analyze-interesting-tag ([object semantic-analyze-context "context" (166 . 170) (...) (function variable) nil [object semantic-scope-cache "Cache" ... ... nil nil nil nil ...] #<buffer "main.cpp">])) # bind (local-args) semantic-analyze-interesting-tag([object semantic-analyze-context "context" (166 . 170) (("foo1" function ... ... #<extent [37, 62) semantic 0x8677c64 in buffer main.cpp>)) (function variable) nil [object semantic-scope-cache "Cache" [object semanticdb-table "main.cpp" ... c++-mode ... t nil ... ... "main.cpp" 597 nil] ("main" function ... nil #<extent [64, 194) semantic 0x8677b4c in buffer main.cpp>) nil nil nil nil (... ... ... ... ... ...)] #<buffer "main.cpp">]) # bind (analysis) semantic-idle-summary-current-symbol-info-context() # (unwind-protect ...) # bind (semanticdb-find-default-throttle) semantic-idle-summary-current-symbol-info-default() # bind (override) semantic-idle-summary-current-symbol-info() semantic-idle-summary-idle-function() # bind (--dolist-temp--52014 service) # (unwind-protect ...) # bind (mode safe others buffers inhibit-quit) byte-code("..." [others buffers service semantic-current-input-throw-symbol b semantic-idle-scheduler-max-buffer-size nil delq mapcar #<compiled-function (b) "...(7)" [b buffer-file-name] 2> buffer-list 0 buffer-size semantic-idle-scheduler-refresh-tags input-pending-p throw parsing-mode-buffers idle-queue working-temp-message "IDLE: execture service %s..." "IDLE: execture service %s...done" parsing-other-buffers --dolist-temp--52013 --dolist-temp--52014 --dolist-temp--52015 mode semantic-idle-scheduler-mode semantic-debug-enabled semantic-lex-debug safe major-mode semantic-idle-scheduler-verbose-flag inhibit-quit semantic-idle-scheduler-queue] 8) # (catch idle-timer ...) # bind (semantic-current-input-throw-symbol) semantic-idle-core-handler() # (unwind-protect ...) # bind (match-data) byte-code("..." [match-data match-data ((store-match-data match-data)) semantic-idle-core-handler] 1) # (condition-case ... . ((error (byte-code "ÁÂÃÄp!#\"Æ" ... 7)))) # (unwind-protect ...) semantic-idle-scheduler-function() apply(semantic-idle-scheduler-function nil) # bind (time-elapsed itimers itimer next-wakeup last-event-time this-command inhibit-quit quit-flag current-itimer) # (unwind-protect ...) # bind (match-data) byte-code("..." [this-command inhibit-quit quit-flag match-data itimer current-itimer match-data ((store-match-data match-data)) nil itimer-uses-arguments apply itimer-function itimer-function-arguments last-event-time next-wakeup itimers time-elapsed] 5) # (condition-case ... . ((error (byte-code "ÂÃÄ !!#" ... 5)) (quit (byte-code "ÁÂ!\"" ... 4)))) # (unwind-protect ...) # bind (itimers itimer next-wakeup idle-time last-event-time recorded-run-time inhibit-quit time-elapsed) itimer-run-expired-timers(0.160639) # bind (sleep elapsed now itimer-inside-driver inhibit-quit ignored) itimer-timer-driver(nil) # (condition-case ... . error) # (catch top-level ...) [Trace 3]: # bind (standard-output stack-trace-on-signal debug-on-signal stack-trace-on-error debug-on-error class) eieiomt-next(nil) # bind (lambdas mclass class key method) eieiomt-method-list(semantic-mrub-preflush 0 nil) # bind (newargs mclass lambdas tlambdas keys eieio-generic-call-methodname eieio-generic-call-arglst firstarg primarymethodlist args method) eieio-generic-call(semantic-mrub-preflush (nil)) # bind (local-args) semantic-mrub-preflush(nil) # bind (--dolist-temp--52026 e elts buf) semantic-mrub-cache-flush-fcn() run-hooks(semantic-mrub-cache-flush-fcn) semantic-clear-toplevel-cache() # bind (semantic-unmatched-syntax-cache semantic-unmatched-syntax-cache-check semantic-parser-warnings res semantic-lex-block-streams gc-cons-threshold) semantic-fetch-tags() # (unwind-protect ...) # (unwind-protect ...) byte-code("..." [semantic-fetch-tags nil] 1) # (catch idle-scheduler ...) # bind (semantic-flex-unterminated-syntax-end-function semantic-lex-unterminated-syntax-end-function) # (unwind-protect ...) # bind (lexically-safe working-status-percentage-type working-status-dynamic-type working-use-echo-area-p inhibit-quit semantic-working-type) semantic-idle-scheduler-refresh-tags() # (unwind-protect ...) # bind (mode safe others buffers inhibit-quit) byte-code("..." [others buffers service semantic-current-input-throw-symbol b semantic-idle-scheduler-max-buffer-size nil delq mapcar #<compiled-function (b) "...(7)" [b buffer-file-name] 2> buffer-list 0 buffer-size semantic-idle-scheduler-refresh-tags input-pending-p throw parsing-mode-buffers idle-queue working-temp-message "IDLE: execture service %s..." "IDLE: execture service %s...done" parsing-other-buffers --dolist-temp--52013 --dolist-temp--52014 --dolist-temp--52015 mode semantic-idle-scheduler-mode semantic-debug-enabled semantic-lex-debug safe major-mode semantic-idle-scheduler-verbose-flag inhibit-quit semantic-idle-scheduler-queue] 8) # (catch idle-timer ...) # bind (semantic-current-input-throw-symbol) semantic-idle-core-handler() # (unwind-protect ...) # bind (match-data) byte-code("..." [match-data match-data ((store-match-data match-data)) semantic-idle-core-handler] 1) # (condition-case ... . ((error (byte-code "ÁÂÃÄp!#\"Æ" ... 7)))) # (unwind-protect ...) semantic-idle-scheduler-function() apply(semantic-idle-scheduler-function nil) # bind (time-elapsed itimers itimer next-wakeup last-event-time this-command inhibit-quit quit-flag current-itimer) # (unwind-protect ...) # bind (match-data) byte-code("..." [this-command inhibit-quit quit-flag match-data itimer current-itimer match-data ((store-match-data match-data)) nil itimer-uses-arguments apply itimer-function itimer-function-arguments last-event-time next-wakeup itimers time-elapsed] 5) # (condition-case ... . ((error (byte-code "ÂÃÄ !!#" ... 5)) (quit (byte-code "ÁÂ!\"" ... 4)))) # (unwind-protect ...) # bind (itimers itimer next-wakeup idle-time last-event-time recorded-run-time inhibit-quit time-elapsed) itimer-run-expired-timers(0.104025) # bind (sleep elapsed now itimer-inside-driver inhibit-quit ignored) itimer-timer-driver(nil) # (condition-case ... . error) # (catch top-level ...) [Trace 4]: # bind (standard-output stack-trace-on-signal debug-on-signal stack-trace-on-error debug-on-error) signal(wrong-type-argument (arrayp nil)) byte-code("..." [buf data kill-buffer signal] 3) # bind (data) # (unwind-protect ...) # bind (error number truename buf rawfile nowarn filename) find-file-noselect("~/Temp/semantic_test2/foo.cpp") # bind (codesys filename) find-file("~/Temp/semantic_test2/foo.cpp" nil) # bind (command-debug-status) call-interactively(find-file) # (condition-case ... . error) # (catch top-level ...) |
From: Eric M. L. <er...@si...> - 2008-02-25 21:27:26
|
>>> Michael Reiher <re...@gm...> seems to think that: [ ... ] >> code to add advice to 'push-mark' instead of `set-mark-command'. So >> long as semantic-ia-fast-jump still has the `push-mark' in your >> version, this should solve that problem. >> >Hmm, somehow the bookmark ring is still empty after calling push-mark... C-h f >says that push-mark is adviced, but it doesn't seem to call >semantic-mrub-push. ... I tracked it down to the line > > (when (and semantic-mru-bookmark-mode (interactive-p)) > >in the defadvice. Replacing "(interactive-p)" with "t" (or removing the line >all together) makes it insert something into the bookmark ring. Not sure what >I'm doing here though :) That's odd. While I agree with your assessment, I had breakpoints set that showed I was getting past that line. Ill take out the interactive check. I will make the bookmarking happen much more often. >However then calling C-x B gives an error. But maybe this is simply related to >the other issue. > > # bind (standard-output stack-trace-on-signal debug-on-signal >stack-trace-on-error debug-on-error) > signal(wrong-type-argument ((or object-p class-p) nil)) > # bind (field obj) > eieio-oref(nil :object-name) > # bind (assoclist list field) > object-assoc-list(:object-name ([object semantic-bookmark "main" ("main" This stack, along with others below, shows that a 'nil' somehow got into the bookmark ring. You can use: M-x semantic-adebug-mrub RET and expand the ring to verify that somehow a nil got into the ring. >> >Also the idle error and "lockups" are still present. However I found how >> > to reproduce it. I used the example below. I start XEmacs, load main.cpp, >> > place the cursor at the and of the line "bar->bbb( ccc );". Now things >> > either break right away, after removing the semicolon or after readding >> > it. Saving the file might play a role, I'm not sure, but that's basically >> > it. After it broke I get those idle errors and I can't open files >> > anymore, for instance. >> >> I had not realized you were using XEmacs. Not that I know how that >> might make things different either. While debugging some of your >> issues I've seen idle errors which I've fixed along the way, but I can >> no longer reproduce this one. >> >> Next time the message comes up, you might be able to get a stack trace >> by doing this: >> >> M-: (semantic-idle-summary-current-symbol-info) RET >When I'm over "foo1();" (in main()) I get: > >("foo1" function (:type "void") (:filename >"/home/michael/Temp/semantic_test3/main.cpp") #<extent [37, 62) semantic >0x8677c64 in buffer main.cpp>) > >Otherwise I get just "nil", e.g. over "bar" or "bbb" in the line >"bar->bbb( ccc );". Well, I guess that's good. >For the idle error, I get the following stack trace: [Trace 1] (see below). This is a nil in the bookmark ring again. >Now that I try it, it seems the idle error (or the state of brokenness for >that matter) is easier to trigger when using ECB ([Trace 1]). But I was able >to trigger it also without ECB being loaded ([Trace 3]). Also a nil in the bookmark ring. >There are also other weird things going on, when bookmark mode is enabled... >E.g. at some point I can't select text in non-source buffers anymore (Args >out of range: #<buffer " *Message-Log*">, 0, 0) ... I can't open files >anymore [Trace 4] ... Even when things seems normal and I turn on Trace 4 seems to be missing something. Must be a hook with an in-line lambda expression. The only one I would suspect is the imenu setup hook in semantic-load.el. If you don't use imenu, you could comment that out and see if that makes things more stable. >stack-trace-on-signal I get quite a few of them. Are these all errors, or is >this normal, e.g. [Trace 2]? I will endeavor to debug this some more to see what I can come up with. I'm particularly confused how nil got into the ring. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Michael R. <re...@gm...> - 2008-02-25 23:19:18
|
On Monday 25 February 2008 22:27, Eric M. Ludlam wrote: > >Hmm, somehow the bookmark ring is still empty after calling push-mark... > > C-h f says that push-mark is adviced, but it doesn't seem to call > >semantic-mrub-push. ... I tracked it down to the line > > > > (when (and semantic-mru-bookmark-mode (interactive-p)) > > > >in the defadvice. Replacing "(interactive-p)" with "t" (or removing the > > line all together) makes it insert something into the bookmark ring. Not > > sure what I'm doing here though :) > > That's odd. While I agree with your assessment, I had breakpoints set > that showed I was getting past that line. Ill take out the > interactive check. I will make the bookmarking happen much more often. > If I call push-mark manually like this: (define-key global-map [(alt m)] '(lambda () (interactive) (push-mark))) (interactive-p) in the defadvice seems indeed to evaluate to false. No idea though how things should play together here ... > > [...] > > This stack, along with others below, shows that a 'nil' somehow got > into the bookmark ring. You can use: > > M-x semantic-adebug-mrub RET > > and expand the ring to verify that somehow a nil got into the ring. > To narrow things down a bit I call semantic-mrub-push directly like this: (define-key global-map [(alt p)] '(lambda () (interactive) (semantic-mrub-push semantic-mru-bookmark-ring (point) 'mark))) So I open main.cpp, go to foo1 in line "foo1();", start bookmark mode. The ring looks like this: ] Name: Ring ] Class: #'semantic-bookmark-ring or [object semantic-bookmark-ring "Ring" (0 0 . [nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) 0] Then I call semantic-mrub-push and the bookmark ring looks like this: ] Name: Ring ] Class: #'semantic-bookmark-ring ] :ring #<RING: 20> } #<semantic-bookmark main> ] Name: main ] Class: #'semantic-bookmark ] :tag main : int | Name: main | Class: 'function | Position: 64 -> 194 in main.cpp <live tag> | Position Data: #<extent> # detachable : 't # end-open : 't # semantic : main : int | Attributes: # :arguments : #<TAG LIST: 2 entries> * argc : int * argv : char # :type : int | Properties: ] parent 'nil ] offset 104 ] filename /home/michael/Temp/semantic_test3/main.cpp ] frequency 1 ] reason #'mark } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil } 'nil ] current-index 0 or [object semantic-bookmark-ring "Ring" (0 1 . [[object semantic-bookmark "main" ("main" function (:arguments (("argc" variable (:type "int") (reparse-symbol arg-sub-list) #<extent [73, 82) semantic 0x8677c2c in buffer main.cpp>) ("argv" variable (:pointer 2 :type "char") (reparse-symbol arg-sub-list) #<extent [83, 96) semantic 0x8677c10 in buffer main.cpp>)) :type "int") nil #<extent [64, 194) semantic 0x8677c48 in buffer main.cpp>) nil 104 "/home/michael/Temp/semantic_test3/main.cpp" 1 mark] nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) 0] Seems something goes out of bounds, accessing elements it shouldn't ... > >> [...] > >> > >> Next time the message comes up, you might be able to get a stack trace > >> by doing this: > >> > >> M-: (semantic-idle-summary-current-symbol-info) RET > > > >When I'm over "foo1();" (in main()) I get: > > > >("foo1" function (:type "void") (:filename > >"/home/michael/Temp/semantic_test3/main.cpp") #<extent [37, 62) semantic > >0x8677c64 in buffer main.cpp>) > > > >Otherwise I get just "nil", e.g. over "bar" or "bbb" in the line > >"bar->bbb( ccc );". > > Well, I guess that's good. > Hmm, under normal conditions, i.e. without bookmark mode, over "bar" I get: ("bar" variable (:pointer 1 :type ("Foo" type (:type "class") nil nil)) (reparse-symbol bovine-inner-scope :filename "/home/michael/Temp/semantic_test3/main.cpp") [154 163]) > >stack-trace-on-signal I get quite a few of them. Are these all errors, or > > is this normal, e.g. [Trace 2]? > > I will endeavor to debug this some more to see what I can come up > with. I'm particularly confused how nil got into the ring. > Cool. One thing to note is that all errors, except the one on C-xB, happen also with an empty bookmark ring. Greets Michael |
From: Eric M. L. <er...@si...> - 2008-02-26 01:45:12
|
>>> Michael Reiher <re...@gm...> seems to think that: >On Monday 25 February 2008 22:27, Eric M. Ludlam wrote: >> >Hmm, somehow the bookmark ring is still empty after calling push-mark... >> > C-h f says that push-mark is adviced, but it doesn't seem to call >> >semantic-mrub-push. ... I tracked it down to the line >> > >> > (when (and semantic-mru-bookmark-mode (interactive-p)) >> > >> >in the defadvice. Replacing "(interactive-p)" with "t" (or removing the >> > line all together) makes it insert something into the bookmark ring. Not >> > sure what I'm doing here though :) >> >> That's odd. While I agree with your assessment, I had breakpoints set >> that showed I was getting past that line. Ill take out the >> interactive check. I will make the bookmarking happen much more often. >> >If I call push-mark manually like this: > >(define-key global-map [(alt m)] > '(lambda () > (interactive) (push-mark))) > >(interactive-p) in the defadvice seems indeed to evaluate to false. No idea >though how things should play together here ... > >> > [...] >> >> This stack, along with others below, shows that a 'nil' somehow got >> into the bookmark ring. You can use: >> >> M-x semantic-adebug-mrub RET >> >> and expand the ring to verify that somehow a nil got into the ring. >> >To narrow things down a bit I call semantic-mrub-push directly like this: > >(define-key global-map [(alt p)] > '(lambda () > (interactive) (semantic-mrub-push semantic-mru-bookmark-ring > (point) 'mark))) >So I open main.cpp, go to foo1 in line "foo1();", start bookmark mode. The >ring looks like this: > > ] Name: Ring > ] Class: #'semantic-bookmark-ring > >or > >[object semantic-bookmark-ring "Ring" (0 0 . [nil nil nil nil nil nil nil nil >nil nil nil nil nil nil nil nil nil nil nil nil]) 0] > [ ... ] Hi, I have an older XEmacs (21.4) and it doesn't have the `ring-elements' function. I went through and eliminated the use of this function from semantic-mru-bookmark. My suspicion is that if your XEmacs does have a ring-elements function, it is including the list of nil, otherwise the adebug fcn would not be listing them. I checked in both a new version of semantic-mru-bookmark, and semantic-adebug which should use the ring in a better way that works for both our Emacsen. Since an active bookmark system hooks into the parser to keep it's tag list safe, it is likely it was throwing errors at inopportune times and causes other issues. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Michael R. <re...@gm...> - 2008-02-26 13:58:29
|
On Tuesday 26 February 2008 02:45, Eric M. Ludlam wrote: > > Hi, > > I have an older XEmacs (21.4) and it doesn't have the > `ring-elements' function. I went through and eliminated the use of > this function from semantic-mru-bookmark. My suspicion is that if > your XEmacs does have a ring-elements function, it is including the > list of nil, otherwise the adebug fcn would not be listing them. > Yes I have such a function, the doc is not exactly verbose though... `ring-elements' is a compiled Lisp function -- loaded from "ring" (ring-elements RING) Documentation: Return a list of the lements of RING. > I checked in both a new version of semantic-mru-bookmark, and > semantic-adebug which should use the ring in a better way that works > for both our Emacsen. > Ahh brilliant! Things are a lot more stable now! > Since an active bookmark system hooks into the parser to keep it's > tag list safe, it is likely it was throwing errors at inopportune > times and causes other issues. > Yes sounds reasonable. I have another issue still (hell, I must be annoying:) I can't select text in other, non source, buffers like *scratch* (or simply do a push-mark): Args out of range: #<buffer "*scratch*">, 0, 0 Backtrace see below. The positions 5 to 7 are the characters I tried to select in the scratch buffer. When jumping to a tag using C-xB XEmacs complains about get-extent-property being void. So in common/pulse.el: (defalias 'pulse-overlay-get 'get-extent-property) should probably be: (defalias 'pulse-overlay-get 'extent-property) Seems just a typo, at least I couldn't find any reference to get-extent-property on the net... Greets Michael # bind (standard-output stack-trace-on-signal debug-on-signal stack-trace-on-error debug-on-error) map-extents(#<compiled-function (ex junk) "...(8)" [ex function *result* nil] 2> nil 0 0 nil nil nil nil) # bind (*result* value property flags to from buffer-or-string predicate function) mapcar-extents(identity nil nil 0 0 nil nil nil) # bind (value property flags to from buffer-or-string) extent-list(nil 0 0) # bind (pos) semantic-overlays-at(0) # bind (os ol) # (unwind-protect ...) # bind (buffer start) semantic-find-tag-by-overlay-prev(7) # bind (tag point) semantic-mrub-find-nearby-tag(7) # bind (ring reason point sbr) semantic-bookmark-ring([object semantic-bookmark-ring "Ring" (0 4 . [... ... ... ... nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) 0] 7 mark) apply(semantic-bookmark-ring ([object semantic-bookmark-ring "Ring" (0 4 . ...) 0] 7 mark)) # bind (eieio-generic-call-next-method-list has-return-val eieio-generic-call-key scoped-class rval lastval rvalever found newargs mclass lambdas tlambdas keys eieio-generic-call-methodname eieio-generic-call-arglst firstarg primarymethodlist args method) eieio-generic-call(semantic-mrub-push ([object semantic-bookmark-ring "Ring" (0 4 . ...) 0] 7 mark)) # bind (local-args) semantic-mrub-push([object semantic-bookmark-ring "Ring" (0 4 . [... ... ... ... nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]) 0] 7 mark) (progn (semantic-mrub-push semantic-mru-bookmark-ring (point) (quote mark)) (setq ad-return-value (ad-Orig-push-mark location nomsg activate-region buffer))) # bind (ad-return-value) (let (ad-return-value) (progn (semantic-mrub-push semantic-mru-bookmark-ring ... ...) (setq ad-return-value ...)) ad-return-value) # bind (buffer activate-region nomsg location) push-mark(5) # bind (start end type pair) default-mouse-track-maybe-own-selection((5 . 7) PRIMARY) # bind (result click-count event) default-mouse-track-drag-up-hook(#<buttonup-event button1up> 1) apply(default-mouse-track-drag-up-hook #<buttonup-event button1up> 1) # bind (retval value buffer overridden args event override hook) mouse-track-run-hook(mouse-track-drag-up-hook nil #<buttonup-event button1up> 1) # (unwind-protect ...) # bind (mouse-down xthresh ythresh orig-x orig-y buffer mouse-grabbed-buffer mouse-moved overriding-hooks event) mouse-track(#<buttonup-event button1up>) # bind (command-debug-status) call-interactively(mouse-track) # (condition-case ... . error) # (catch top-level ...) |
From: Eric M. L. <er...@si...> - 2008-02-28 15:40:48
|
>>> Michael Reiher <re...@gm...> seems to think that: >On Tuesday 26 February 2008 02:45, Eric M. Ludlam wrote: [ ... ] >> Since an active bookmark system hooks into the parser to keep it's >> tag list safe, it is likely it was throwing errors at inopportune >> times and causes other issues. >> >Yes sounds reasonable. I have another issue still (hell, I must be annoying:) >I can't select text in other, non source, buffers like *scratch* (or simply >do a push-mark): > >Args out of range: #<buffer "*scratch*">, 0, 0 > >Backtrace see below. The positions 5 to 7 are the characters I tried to select >in the scratch buffer. I'm not entirely sure why `extent-list' would throw an error for XEmacs. It seems a bit odd. I would guess the below patch would 'fix' the problem, but I am more interested in any XEmacs knowledgeable folks looking at the below function and letting me know if I'm using the API wrong. *** semantic-fw.el 03 Sep 2007 21:11:55 -0400 1.57 --- semantic-fw.el 28 Feb 2008 10:37:32 -0500 *************** *************** *** 50,56 **** (defalias 'semantic-overlay-move 'set-extent-endpoints) (defalias 'semantic-overlay-delete 'delete-extent) (defalias 'semantic-overlays-at ! (lambda (pos) (extent-list nil pos pos))) (defalias 'semantic-overlays-in (lambda (beg end) (extent-list nil beg end))) (defalias 'semantic-overlay-buffer 'extent-buffer) --- 50,60 ---- (defalias 'semantic-overlay-move 'set-extent-endpoints) (defalias 'semantic-overlay-delete 'delete-extent) (defalias 'semantic-overlays-at ! (lambda (pos) ! (condition-case nil ! (extent-list nil pos pos) ! (error nil)) ! )) (defalias 'semantic-overlays-in (lambda (beg end) (extent-list nil beg end))) (defalias 'semantic-overlay-buffer 'extent-buffer) >When jumping to a tag using C-xB XEmacs complains about get-extent-property >being void. So in common/pulse.el: > >(defalias 'pulse-overlay-get 'get-extent-property) > >should probably be: > >(defalias 'pulse-overlay-get 'extent-property) [ ... ] Thanks. I think you are right that this is a typo. I checked in a fix. Thanks Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Michael R. <re...@gm...> - 2008-03-04 15:10:24
|
On Thursday 28 February 2008 16:40, Eric M. Ludlam wrote: > >>> Michael Reiher <re...@gm...> seems to think that: > > > >On Tuesday 26 February 2008 02:45, Eric M. Ludlam wrote: > > [ ... ] > > >> Since an active bookmark system hooks into the parser to keep it's > >> tag list safe, it is likely it was throwing errors at inopportune > >> times and causes other issues. > > > >Yes sounds reasonable. I have another issue still (hell, I must be > > annoying:) I can't select text in other, non source, buffers like > > *scratch* (or simply do a push-mark): > > > >Args out of range: #<buffer "*scratch*">, 0, 0 > > > >Backtrace see below. The positions 5 to 7 are the characters I tried to > > select in the scratch buffer. > > I'm not entirely sure why `extent-list' would throw an error for > XEmacs. It seems a bit odd. > > I would guess the below patch would 'fix' the problem, but I am more > interested in any XEmacs knowledgeable folks looking at the below > function and letting me know if I'm using the API wrong. > Yes, this does the trick. Thanks a lot! Unfortunately I'm not of the knowledgeable folks as far as elisp is concerned... I'll be trying how the bookmark mode performs in actual usage now :) Greets Michael |