Thread: [cedet-semantic] problems using ctags on WindowsXP
Brought to you by:
zappo
From: Nate S. <nat...@gm...> - 2009-07-28 16:59:21
|
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 |