On Thu, Dec 4, 2008 at 12:46 AM, yupeng82921 <email@example.com>
I have two questions about semantic smart completion.
1. When I call "semantic-ia-complete-symbol-menu", it will show a pop
up menu. But unless I select an option form it, the menu will not
disappear. In fact, I want to find a function, when I call it, it can
show a pop up menu, and I can select a symbol to comple, but if I do
not want to select anyone, I can still insert character to the current
buffer. If there is a function like this, I can bind it to every key on
my keyboard, so whenever I insert a character, I can always get a
completion menu. Is there a function let me do this?
If you do not wanna do anything after poping up the completion menu, just 'C-g' will help you to close it and continue your typing.
Speak of the completion menu, maybe you can try completion-ui or company-mode, both of which can be found on Emacs wiki.
2. It seems that semantic can only analyze the current file and its
head file. If I want to write a function that never be declared in the
current file, semantic can not comple it. But gnu global can do this.
So I want to add global's completion result to the semantic pop up
menu, could you tell me how could I do that? Additionally, maybe there
are some redundance between semantic and global, I also want to
re-arrange the completion result, could you tell me how to do that? Or
is there other simple method?
Actually, as what i think, semantic is much more intelligent than only analyzing current buffer and its head file. From my experience on semantic, at least, several files below can be analyzed.
1. system lib, such as standard library. In the latest version of CEDET(from CVS), the header files of standard library will be analyzed by default, you even need not write this in your configuration file:
(semantic-add-system-include "/usr/include/" 'c++-mode)
2. the head files in the same directory can be found automatically. For example, you write a main.cpp including a.h, where a.h includes b.h, where b.h .....
As long as they are stored in the same directory, all the header files can be found by semantic when you typing in main.cpp and try to get completions.
3. If you need another lib, let's say boost as an example. Since you can't put your codes in the same directory as boost, you can do this to teach semantic to analyze boost library and provide you completions whenever you want.
(semantic-add-system-include "WHERE_YOUR_BOOST_IS" 'c++-mode)
To be honest, there's also one thing for me that i'm confused, as long as i can see, i'm sure of the 3 things above. But sometimes i found i can get the completions from a header file, which was neither in system lib, nor in semantic-add-sytem-include directory, and i didn't put it in the same directory as my cpp, either. I don't know why semantic can do so, maybe what i thought and wrote before is totally wrong, and i'm really eager to know what the semantic-analyze-mechanism is.