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

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

[elpa] master ad6ff0e 01/40: Inhibit template field interaction while co


From: Dmitry Gutov
Subject: [elpa] master ad6ff0e 01/40: Inhibit template field interaction while completion is active
Date: Thu, 2 Jan 2020 18:56:59 -0500 (EST)

branch: master
commit ad6ff0eecca99dc5ac8b6a8a6174df7d2ad88ae7
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    Inhibit template field interaction while completion is active
    
    Assisted by https://github.com/joaotavora/yasnippet/issues/987.
    
    Helps #881, #731.
    
    Fixes #281, fixes #515.
---
 NEWS.md             |  8 ++++++++
 company-template.el | 18 +++++++++++++++---
 company.el          |  5 +++++
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/NEWS.md b/NEWS.md
index 8404398..aad2ec3 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,5 +1,13 @@
 # History of user-visible changes
 
+## Next
+
+* Snippet/template field interaction is inhibited while completion is active
+  (where by default `TAB` calls `company-complete-common`, clashing with 
snippet
+  map binding `TAB` to "jump to the next field"). Affects both
+  `company-template` and `yasnippet` (requires changes from 2019-04-21,
+  currently unreleased).
+
 ## 2019-04-15 (0.9.10)
 
 * `company-clang`: better compatibility with Clang 8
diff --git a/company-template.el b/company-template.el
index 930e638..7db50dd 100644
--- a/company-template.el
+++ b/company-template.el
@@ -29,16 +29,24 @@
   "Face used for editable text in template fields."
   :group 'company)
 
+(defvar company-template-forward-field-item
+  '(menu-item "" company-template-forward-field
+              :filter company-template--keymap-filter))
+
 (defvar company-template-nav-map
   (let ((keymap (make-sparse-keymap)))
-    (define-key keymap [tab] 'company-template-forward-field)
-    (define-key keymap (kbd "TAB") 'company-template-forward-field)
+    (define-key keymap [tab] company-template-forward-field-item)
+    (define-key keymap (kbd "TAB") company-template-forward-field-item)
     keymap))
 
+(defvar company-template-clear-field-item
+  '(menu-item "" company-template-clear-field
+              :filter company-template--keymap-filter))
+
 (defvar company-template-field-map
   (let ((keymap (make-sparse-keymap)))
     (set-keymap-parent keymap company-template-nav-map)
-    (define-key keymap (kbd "C-d") 'company-template-clear-field)
+    (define-key keymap (kbd "C-d") company-template-clear-field-item)
     keymap))
 
 (defvar-local company-template--buffer-templates nil)
@@ -78,6 +86,10 @@
         (when (functionp after-clear-fn)
           (funcall after-clear-fn))))))
 
+(defun company-template--keymap-filter (cmd)
+  (unless (run-hook-with-args-until-success 'yas-keymap-disable-hook)
+    cmd))
+
 (defun company-template--after-clear-c-like-field ()
   "Function that can be called after deleting a field of a c-like template.
 For c-like templates it is set as `after-post-fn' property on fields in
diff --git a/company.el b/company.el
index 4f085ee..2b92f85 100644
--- a/company.el
+++ b/company.el
@@ -774,9 +774,11 @@ keymap during active completions (`company-active-map'):
       (progn
         (add-hook 'pre-command-hook 'company-pre-command nil t)
         (add-hook 'post-command-hook 'company-post-command nil t)
+        (add-hook 'yas-keymap-disable-hook 'company--active-p nil t)
         (mapc 'company-init-backend company-backends))
     (remove-hook 'pre-command-hook 'company-pre-command t)
     (remove-hook 'post-command-hook 'company-post-command t)
+    (remove-hook 'yas-keymap-disable-hook 'company--active-p t)
     (company-cancel)
     (kill-local-variable 'company-point)))
 
@@ -1669,6 +1671,9 @@ prefix match (same case) will be prioritized."
 (defsubst company-keep (command)
   (and (symbolp command) (get command 'company-keep)))
 
+(defun company--active-p ()
+  company-candidates)
+
 (defun company-pre-command ()
   (company--electric-restore-window-configuration)
   (unless (company-keep this-command)



reply via email to

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