emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] 34/52: company-gtags: add arguments insertion


From: Dmitry Gutov
Subject: [elpa] 34/52: company-gtags: add arguments insertion
Date: Tue, 01 Jul 2014 11:53:24 +0000

dgutov pushed a commit to branch master
in repository elpa.

commit 5fbef7e5c8298af03ef9ee3c5160490c34bd84bd
Author: Dmitry Gutov <address@hidden>
Date:   Fri Jun 6 06:40:36 2014 +0300

    company-gtags: add arguments insertion
    
    Closes #131
---
 NEWS.md          |    1 +
 company-gtags.el |   24 ++++++++++++++++++------
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/NEWS.md b/NEWS.md
index 769e7d5..ac0361f 100644
--- 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`.
diff --git a/company-gtags.el b/company-gtags.el
index d36ac1b..d2f1e78 100644
--- a/company-gtags.el
+++ b/company-gtags.el
@@ -41,6 +41,11 @@
   '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
@@ -73,6 +78,11 @@
                                              (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."
@@ -84,14 +94,16 @@
                  (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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]