|
[cedet-semantic] problems using ctags on WindowsXP
From: Nate Schley <nate.schley@gm...> - 2009-07-28 16:59
|
Eric,
When I use the default value of c-mode semantic-ectag-lang-extra-flags, I
get the message "split-string: Wrong type argument: stringp, nil"
The output in the buffer " *Semantic ECTags*" shows the following:
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: regcomp ^[ ]*#[ ]*include[ ]*[<"]([\\:
Unmatched [ or [^
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: unknown regex flag: 'i'
ctags.exe: Warning: regcomp ^[ ]*#[ ]*include[ ]*[<"]([\\:
Unmatched [ or [^
The implication here is that the "\\/a-z" part of the regex strings is
getting to ctags as "\\/a-z", and so ctags interprets the '/' as a regexp
delimiter, not as a member of "[\\/a-zA-Z0-9_.-]" character set.
The following regex setting works w/o errors when I used ctags in WinXP's
cmd.exe:
--regex-c="/^[ \t]*#[ \t]*include[
\t]*[<\"]([\/a-zA-Z0-9_.-]+)[\"^>]/\1/i,include/"
using ctags' --verbose switch, this setting is redisplayed as:
Option: --regex-c=/^[ \t]*#[ \t]*include[
\t]*[<"]([\/a-zA-Z0-9_.-]+)["^>]/\1/i,include/
(since the C & C++ regex strings are the same, I'm only giving one)
(BTW, the --verbose switch doesn't give any additional info in cases of
malformed regex strings.)
There are 3 issues in the Win/cmd scenario:
- the regex strings need to be enclosed in '"' and so the these and the
other "embedded" '"'s need to be escaped
- the '>' needs to be escaped, or else CMD interprets it as a redirect
(CMD does not require escaping '<'. I don't know why...) BTW, it seems
like an obscure twist from MS that the '"', '^', '<' and '\' characters get
escaped using the '\' character, while '>' gets escaped with '^'
- the '\' characters before the "/a-z" and the "1/i..." need to get to
ctags as just a single '\'
I cannot, however, figure out how to set c-mode
semantic-ectag-lang-extra-flags such that the "successful" string gets to
ctags.
In my best effort, I configure semantic-ectag-lang-extra-flags as so:
"--regex-c=\"/^[ \t]*#[ \t]*include[
\t]*[<\\\"]([\\\/a-zA-Z0-9_.-]+)[\\\"^>]/\\1/i,include/\""
but I get the following results at the start of the *Semantic ECTags*
buffer:
ctags.exe: Warning: /^[ ]*#[ ]*include[
]*[<"]([\\/a-zA-Z0-9_.-]+)["^>]/\\1/i,include/: regexp missing name pattern
ctags.exe: Warning: /^[ ]*#[ ]*include[
]*[<"]([\\/a-zA-Z0-9_.-]+)["^>]/\\1/i,include/: regexp missing final
separator
ctags.exe: Warning: /^[ ]*#[ ]*include[
]*[<"]([\\/a-zA-Z0-9_.-]+)["^>]/\\1/i,include/: regexp missing name pattern
ctags.exe: Warning: /^[ ]*#[ ]*include[
]*[<"]([\\/a-zA-Z0-9_.-]+)["^>]/\\1/i,include/: regexp missing final
separator
the '"'s show up as desired at ctags, but the "[\\/a" and "\\1" are
unchanged.
This suggests that the '\' escaping before the '"' chars is handled
differently than the escaping before the '/' and the '1'.
If I change the regex string to try fixing the "\\/" and "\\1" problems
(trying additional or fewer escapes,) then I end up with either too many or
no '\'s in ctags. And there's also the case where I configure "...\\\1...",
but semantic-ectag-lang-extra-flags gets stored as "...\\^A..."
I haven't seen any other discussion on this, but I wouldn't think it should
be specific to me. Any thoughts?
I'm using
- CVS CEDET
- emacs 23.0.95
- ctags 5.7
--
Thanks,
Nate
|
| Thread | Author | Date |
|---|---|---|
| [cedet-semantic] problems using ctags on WindowsXP | Nate Schley <nate.schley@gm...> |