auto-complete-gtags の global -ci について
何が何って,global -ci ってあるけど,-c と -i は,
同時には使えません的な。
auto-complete-gtags.el から 引用させてもらいまうー。
(defun ac-gtags-candidate () (if (memq major-mode ac-gtags-modes) (ignore-errors (with-temp-buffer (when (eq (call-process "global" nil t nil "-ci" ac-prefix) 0) (goto-char (point-min)) (let (candidates) (while (and (not (eobp)) (push (buffer-substring-no-properties (line-beginning-position) (line-end-position)) candidates) (eq (forward-line) 0))) (nreverse candidates)))))))
おじさん,ずーっとはまってました。
結局,global のソース見て,gdb で追ってみて,
そしたら,-c オプションしているしているときは,
「-i」 オプションの情報は,completion() には渡らないのら〜。
私の解釈が正しければ。何か裏技あるのかにゃ?
何がやりたかったかって言うとね,auto-complete.el 便利じゃん,
で,遅ればせながら,auto-complete-gtags.el 導入して,
補完で大文字小文字を無視して欲しいと思ったわけで,
で,auto-complete-gtags.el みたら,-ci を渡してたから,
いけるんだと思ったのが間違い。
もうね,ワタシの環境を疑って,regcomp(), regexec() を試したりもしたさー。
んで,ソースを目視で追えない貧弱なワタシは,gdb の力を借りて,
追ってみたわけで,一応,解らしきものがでたわけで。
void completion(const char *dbpath, const char *root, const char *prefix) { int flags = GTOP_KEY; // ここでゴリっとフラグの値を設定しているから, GTOP *gtop; // -i の気持ちは届かないのら〜。そもそも引数に(ry GTP *gtp; int db; flags |= GTOP_NOREGEX; if (prefix && *prefix == 0) /* In the case global -c '' */ prefix = NULL; if (prefix) flags |= GTOP_PREFIX; db = (sflag) ? GSYMS : GTAGS; gtop = gtags_open(dbpath, root, db, GTAGS_READ); for (gtp = gtags_first(gtop, prefix, flags); gtp; gtp = gtags_next(gtop)) { fputs(gtp->tag, stdout); fputc('\n', stdout); } gtags_close(gtop); }
gtags_first() 内では,REG_ICASE を設定する部分はあるけど,
それは別の場所から呼び出された時用かな。
あと,おもろかったのは,global のソースに対して,gtags やると,
GTAGS っちゅうファイルを作れなくて怒られるということ。
理由はたぶん,gtags というフォルダがあるからかな。
これは Windows 環境のみ?
だもんで,etags を使用しました。
なんか色々寄り道したはずだけど,忘れた。
行った設定については,覚えていたら後日書くことにしよう。
あ−,-ci の件,解決策しっていたら教えてくださいな。