- "A `company-mode' completion back-end for etags."
- (case command
- ('prefix (and (memq major-mode company-etags-modes)
- (not (company-in-string-or-comment))
- (require 'etags nil t)
- (company-etags-buffer-table)
- (or (company-grab company-etags-symbol-regexp) "")))
- ('candidates (let ((tags-table-list (company-etags-buffer-table))
- (completion-ignore-case nil))
- (and (fboundp 'tags-completion-table)
- (all-completions arg (tags-completion-table)))))
- ('location (let ((tags-table-list (company-etags-buffer-table)))
- (when (fboundp 'find-tag-noselect)
- (let ((buffer (find-tag-noselect arg)))
- (cons buffer (with-current-buffer buffer (point)))))))
- ('sorted t)))
-
-(add-to-list 'company-backends 'company-etags)
+ "`company-mode' completion backend for etags."
+ (interactive (list 'interactive))
+ (cl-case command
+ (interactive (company-begin-backend 'company-etags))
+ (prefix (and (apply 'derived-mode-p company-etags-modes)
+ (not (company-in-string-or-comment))
+ (company-etags-buffer-table)
+ (or (company-grab-symbol) 'stop)))
+ (candidates (company-etags--candidates arg))
+ (location (let ((tags-table-list (company-etags-buffer-table)))
+ (when (fboundp 'find-tag-noselect)
+ (save-excursion
+ (let ((buffer (find-tag-noselect arg)))
+ (cons buffer (with-current-buffer buffer (point))))))))
+ (ignore-case company-etags-ignore-case)))