]> code.delx.au - gnu-emacs-elpa/commitdiff
company-gtags: add arguments insertion
authorDmitry Gutov <dgutov@yandex.ru>
Fri, 6 Jun 2014 03:40:36 +0000 (06:40 +0300)
committerDmitry Gutov <dgutov@yandex.ru>
Fri, 6 Jun 2014 03:40:36 +0000 (06:40 +0300)
Closes #131

NEWS.md
company-gtags.el

diff --git a/NEWS.md b/NEWS.md
index 769e7d59a6e9135d5a913fc9586ddea5f8777b46..ac0361f95681fd32096bc5a938d6eed7d07031b6 100644 (file)
--- a/NEWS.md
+++ b/NEWS.md
@@ -2,6 +2,7 @@
 
 ## Next
 
+* New user option `company-gtags-insert-arguments`, t by default.
 * `company-css` knows about CSS3.
 * `company-gtags` supports `meta` and `annotation`.
 * User option `company-dabbrev-code-other-buffers` can have a new value: `code`.
index d36ac1b3d63eda7ae8ce6e049fd1951f15dc65b5..d2f1e78ebb0a9ea80b21c8b97dbe78543067fecf 100644 (file)
   'company-gtags-gnu-global-program-name
   'company-gtags-executable "earlier")
 
+(defcustom company-gtags-insert-arguments t
+  "When non-nil, insert function arguments as a template after completion."
+  :type 'boolean
+  :package-version '(company . "0.8.1"))
+
 (defvar-local company-gtags--tags-available-p 'unknown)
 
 (defvar company-gtags-modes '(c-mode c++-mode jde-mode java-mode php-mode))
@@ -51,7 +56,7 @@
             (locate-dominating-file buffer-file-name "GTAGS"))
     company-gtags--tags-available-p))
 
-(defun company-gtags-fetch-tags (prefix)
+(defun company-gtags--fetch-tags (prefix)
   (with-temp-buffer
     (let (tags)
       (when (= 0 (call-process company-gtags-executable nil
                                              (string-to-number (match-string 2)))
                              ))))))
 
+(defun company-gtags--annotation (arg)
+  (let ((meta (get-text-property 0 'meta arg)))
+    (when (string-match (concat arg "\\((.*)\\).*") meta)
+      (match-string 1 meta))))
+
 ;;;###autoload
 (defun company-gtags (command &optional arg &rest ignored)
   "`company-mode' completion back-end for GNU Global."
                  (not (company-in-string-or-comment))
                  (company-gtags--tags-available-p)
                  (or (company-grab-symbol) 'stop)))
-    (candidates (company-gtags-fetch-tags arg))
+    (candidates (company-gtags--fetch-tags arg))
     (sorted t)
     (duplicates t)
-    (annotation (let ((meta (get-text-property 0 'meta arg)))
-                  (when (string-match (concat arg "\\((.*)\\).*") meta)
-                    (match-string 1 meta))))
+    (annotation (company-gtags--annotation arg))
     (meta (get-text-property 0 'meta arg))
-    (location (get-text-property 0 'location arg))))
+    (location (get-text-property 0 'location arg))
+    (post-completion (let ((anno (company-gtags--annotation arg)))
+                       (when (and company-gtags-insert-arguments anno)
+                         (insert anno)
+                         (company-template-c-like-templatify anno))))))
 
 (provide 'company-gtags)
 ;;; company-gtags.el ends here