[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master de9f2e1 163/173: Add support for auto-complete like behavi
From: |
Dmitry Gutov |
Subject: |
[elpa] master de9f2e1 163/173: Add support for auto-complete like behavior (#524) |
Date: |
Thu, 23 Jun 2016 00:28:47 +0000 (UTC) |
branch: master
commit de9f2e1a7133430dcafdd73ba4a16bacca371311
Author: James Nguyen <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Add support for auto-complete like behavior (#524)
Adding a new frontend, a new command and a new tooltip visibility predicate.
---
company.el | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 55 insertions(+), 3 deletions(-)
diff --git a/company.el b/company.el
index 28ed56b..7ea4b08 100644
--- a/company.el
+++ b/company.el
@@ -186,9 +186,13 @@ buffer-local wherever it is set."
(defun company-frontends-set (variable value)
;; Uniquify.
(let ((value (delete-dups (copy-sequence value))))
- (and (memq 'company-pseudo-tooltip-unless-just-one-frontend value)
- (memq 'company-pseudo-tooltip-frontend value)
- (error "Pseudo tooltip frontend cannot be used twice"))
+ (and (or (and (memq 'company-pseudo-tooltip-unless-just-one-frontend value)
+ (memq 'company-pseudo-tooltip-frontend value))
+ (and (memq
'company-pseudo-tooltip-unless-just-one-frontend-with-delay value)
+ (memq 'company-pseudo-tooltip-frontend value))
+ (and (memq
'company-pseudo-tooltip-unless-just-one-frontend-with-delay value)
+ (memq 'company-pseudo-tooltip-unless-just-one-frontend
value)))
+ (error "Pseudo tooltip frontend cannot be used more than once"))
(and (memq 'company-preview-if-just-one-frontend value)
(memq 'company-preview-frontend value)
(error "Preview frontend cannot be used twice"))
@@ -233,6 +237,8 @@ The visualized data is stored in `company-prefix',
`company-candidates',
company-pseudo-tooltip-frontend)
(const :tag "pseudo tooltip, multiple only"
company-pseudo-tooltip-unless-just-one-frontend)
+ (const :tag "pseudo tooltip, multiple only, delayed"
+
company-pseudo-tooltip-unless-just-one-frontend-with-delay)
(const :tag "preview" company-preview-frontend)
(const :tag "preview, unique only"
company-preview-if-just-one-frontend)
@@ -559,6 +565,13 @@ happens. The value of nil means no idle completion."
(const :tag "immediate (0)" 0)
(number :tag "seconds")))
+(defcustom company-tooltip-idle-delay .5
+ "The idle delay in seconds until tooltip is shown when using
+`company-pseudo-tooltip-unless-just-one-frontend-with-delay'."
+ :type '(choice (const :tag "never (nil)" nil)
+ (const :tag "immediate (0)" 0)
+ (number :tag "seconds")))
+
(defcustom company-begin-commands '(self-insert-command
org-self-insert-command
orgtbl-self-insert-command
@@ -1019,6 +1032,7 @@ Controlled by `company-auto-complete'.")
(defvar-local company-point nil)
(defvar company-timer nil)
+(defvar company-tooltip-timer nil)
(defsubst company-strip-prefix (str)
(substring str (length company-prefix)))
@@ -2060,6 +2074,15 @@ With ARG, move by that many elements."
(eq old-tick (buffer-chars-modified-tick)))
(company-complete-common))))))
+(defun company-select-next-if-tooltip-visible-or-complete-selection ()
+ "Insert selection if appropriate, or select the next candidate.
+Insert selection if only preview is showing or only one candidate,
+otherwise select the next candidate."
+ (interactive)
+ (if (and (company-tooltip-visible-p) (> company-candidates-length 1))
+ (call-interactively 'company-select-next)
+ (call-interactively 'company-complete-selection)))
+
;;;###autoload
(defun company-complete ()
"Insert the common part of all candidates or the current selection.
@@ -2830,6 +2853,30 @@ Returns a negative number if the tooltip should be
displayed above point."
(company--show-inline-p))
(company-pseudo-tooltip-frontend command)))
+(defun company-pseudo-tooltip-unless-just-one-frontend-with-delay (command)
+ "`compandy-pseudo-tooltip-frontend', but shown after a delay.
+Delay is determined by `company-tooltip-idle-delay'."
+ (cl-case command
+ (pre-command
+ (company-pseudo-tooltip-unless-just-one-frontend command)
+ (when company-tooltip-timer
+ (cancel-timer company-tooltip-timer)
+ (setq company-tooltip-timer nil)))
+ (post-command
+ (if (or company-tooltip-timer
+ (overlayp company-pseudo-tooltip-overlay))
+ (if (not (memq 'company-preview-frontend company-frontends))
+ (company-pseudo-tooltip-unless-just-one-frontend command)
+ (company-preview-frontend 'pre-command)
+ (company-pseudo-tooltip-unless-just-one-frontend command)
+ (company-preview-frontend 'post-command))
+ (setq company-tooltip-timer
+ (run-with-timer company-tooltip-idle-delay nil
+
'company-pseudo-tooltip-unless-just-one-frontend-with-delay
+ 'post-command))))
+ (t
+ (company-pseudo-tooltip-unless-just-one-frontend command))))
+
;;; overlay
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defvar-local company-preview-overlay nil)
@@ -2904,6 +2951,11 @@ Returns a negative number if the tooltip should be
displayed above point."
(or (eq (company-call-backend 'ignore-case) 'keep-prefix)
(string-prefix-p company-prefix company-common))))
+(defun company-tooltip-visible-p ()
+ "Returns whether the tooltip is visible."
+ (when (overlayp company-pseudo-tooltip-overlay)
+ (not (overlay-get company-pseudo-tooltip-overlay 'invisible))))
+
;;; echo
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defvar-local company-echo-last-msg nil)
- [elpa] master c12216b 140/173: re-sort, (continued)
- [elpa] master c12216b 140/173: re-sort, Dmitry Gutov, 2016/06/22
- [elpa] master e525793 143/173: company-dabbrev--search-buffer: Speed up, Dmitry Gutov, 2016/06/22
- [elpa] master 7d2d49b 150/173: company--fetch-candidates: Bind non-essential, Dmitry Gutov, 2016/06/22
- [elpa] master 90ec4ce 153/173: Don't call company-abort right after startup, Dmitry Gutov, 2016/06/22
- [elpa] master d48eaee 155/173: Merge pull request #499 from fice-t/autoload, Dmitry Gutov, 2016/06/22
- [elpa] master e0d2bf0 157/173: company-bbdb: Use full names as prefix, Dmitry Gutov, 2016/06/22
- [elpa] master 6067bc6 169/173: Mention company-sort-prefer-same-case-prefix, Dmitry Gutov, 2016/06/22
- [elpa] master adfb2d9 167/173: Mention company-pseudo-tooltip-unless-just-one-frontend-with-delay in NEWS, Dmitry Gutov, 2016/06/22
- [elpa] master ce38a7d 166/173: Replace :sorted with :separate, and sort within each chunk, Dmitry Gutov, 2016/06/22
- [elpa] master 971eea5 170/173: Bump copyright, Dmitry Gutov, 2016/06/22
- [elpa] master de9f2e1 163/173: Add support for auto-complete like behavior (#524),
Dmitry Gutov <=
- [elpa] master 212c8fc 172/173: Make a new release, Dmitry Gutov, 2016/06/22
- [elpa] master 7a2deff 173/173: Merge commit '212c8fc3101781a2f1c55ca61772eb75a2046e87' from company, Dmitry Gutov, 2016/06/22
- [elpa] master c6d5330 165/173: company-eclim--project-dir: Try to handle non-project buffers, Dmitry Gutov, 2016/06/22