TLDR: I've got a large tags file that loads multiple times per session, making it unusable. Can't find the source of issue or how to disable it -- main goal is to jump to tags, but completion would be nice
I recently posted on the emacs subreddit and a user recommended that I join this group because it's also friendly towards newbies.
I've been using emacs as a C++ IDE, and I'm slowly correcting things that are annoying. I'm essentially using redguardtoo's emacs.d file.
I have a tag file that is 225MB (1.6M Tags). My intent for the tag is not necessarily completion (using company
), but more for jumping around source code. I'm working with an unfamiliar code base and often need to see macro or class definitions.
When I start typing, at random times, I'll see a message in the minibuffer
Making tag completion table for [tag file]...0-100%
Then, a popup listbox shows up with autocompletion options.
Because this tag file is so large, and it doesn't seem like the tag loading is asynchronous, it freezes emacs for around a minute. This also happens multiple times per a session (with the same file, and with other files in the same directory that use the same tag file)!
Questions
- Does anyone know what's initializing the loading of the tag table for completion and how to disable it? I did a grep on my emacs.d directory for "Making tag completion" and found nothing (note, IIRC the loading tags was present regardless of using
company
orauto-complete
- Completion would be nice, but I'd settle just for the ability to jump to the tag location. Is there a way to get this?
- What is the mindset to take when approaching problems like this? I'd like to be able to troubleshoot further on my own next time.
Additional info
Enabled minor modes (C-h m)
Enabled minor modes: Abbrev Auto-Composition Auto-Compression
Auto-Encryption Blink-Cursor Column-Number Company Desktop-Save
Display-Time Electric-Indent Electric-Pair Evil Evil-Local
Evil-Matchit Evil-Surround Fic File-Name-Shadow Flyspell-Lazy
Font-Lock Ggtags Global-Auto-Revert Global-Company Global-Eldoc
Global-Evil-Matchit Global-Evil-Surround Global-Font-Lock Global-Linum
Global-Page-Break-Lines Global-Pointback Global-Undo-Tree Helm
Helm-Match-Plugin Helm-Occur-Match-Plugin Line-Number Linum Menu-Bar
Mouse-Wheel Override-Global Pointback Recentf Savehist Shell-Dirtrack
Subword Tooltip Undo-Tree Which-Function Window-Numbering Winner Yas
Yas-Global
package-activated-list
is equal to
(ace-jump-mode ag s dash anaconda-mode f dash s dash json-rpc auto-compile packed bbdb bookmark+ browse-kill-ring buffer-move clean-aindent-mode cmake-mode coffee-mode color-theme company cpputils-cmake crontab-mode csharp-mode diminish dired+ dired-details dropdown-list dsvn elnode kv db kv fakir kv dash noflet creole kv noflet s noflet dash web s dash emmet-mode erlang evil-args evil goto-chg undo-tree evil-search-highlight-persist exec-path-from-shell expand-region f dash s fakir kv dash noflet fancy-narrow flymake-coffee flymake-easy flymake-css flymake-easy flymake-haml flymake-easy flymake-jslint flymake-easy flymake-lua flymake-python-pyflakes flymake-easy flymake-ruby flymake-easy flymake-sass flymake-easy flymake-shell flymake-easy flyspell-lazy fringe-helper ggtags git-gutter git-timemachine gitconfig-mode gitignore-mode goto-chg haskell-mode helm-descbinds helm async helm-gtags helm async hl-sexp htmlize ibuffer-vc idomenu iedit json-mode json-snatcher json-reformat json-reformat json-rpc json-snatcher kv legalese less-css-mode lua-mode magit git-rebase-mode git-commit-mode markdown-mode maxframe mic-paren move-text multi-term mwe-log-commands noflet org-fstree packed page-break-lines paredit pointback pomodoro pretty-mode project-local-variables quack rainbow-delimiters regex-tool rinari jump inflections findr ruby-compilation inf-ruby inf-ruby robe inf-ruby ruby-compilation inf-ruby rvm sass-mode haml-mode scratch scss-mode session sr-speedbar string-edit dash switch-window tagedit dash s textile-mode undo-tree unfill w3m web s dash wgrep ws-butler yaml-mode yasnippet
#include "..."
can live in various places that are not known until build time. So, ggtags wouldn't be able to generate tags for many of the files. Currently, our build tools allow us tomake etags
to generate emacs compatible tags, but there is nomake ggtags
equivalent. So, I'm stuck with etags for now. Any ideas?ggtags
cannot generate tags, but did you use plaingtags
on the command line at project root? You should try this and invoke ggtags again. There should not bemake ggtags
because the real command isgtags
;ggtags
is just a package name of Emacs that use it. Another option is that you can use ctags;ggtags
can also recognizectags
tags and it's also fast. You can generate ctags tags when invokingggtags-create-tags
and it asks for usingctags
client.gtags
could not know about such details, I don't think the built-inetags
(comes with Emacs), orctags
(I linked above) would be able to do it. I think you only useggtags
to create tags at current directory, not project root. Run the commandgtags
at project root, or whenggtags
asks for where to generate, navigate to project root and you will be fine.make etags
works because it calls etags once it evaluates where all the.h
files live.