]> code.delx.au - gnu-emacs-elpa/commitdiff
Introduce company-dabbrev-ignore-invisible
authorDmitry Gutov <dgutov@yandex.ru>
Sat, 21 Mar 2015 13:01:28 +0000 (15:01 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Sat, 21 Mar 2015 13:01:28 +0000 (15:01 +0200)
NEWS.md
company-dabbrev.el

diff --git a/NEWS.md b/NEWS.md
index 409dca89f0f292ca0329151eda6de6748f64dafb..755e1fee55b60e5c2c3dd5c26b8835735cc1ac0f 100644 (file)
--- a/NEWS.md
+++ b/NEWS.md
@@ -2,6 +2,7 @@
 
 ## Next
 
+* New user option `company-dabbrev-ignore-invisible`.
 * `company-ropemacs` was removed. `ropemacs` supports completion via
   `completion-at-point-functions` starting with version 0.8.
 * `company-pysmell` was removed.
index 7519caffc1b8d4a9ad823e3cd5760618174cbb0f..7dd874be4c74b8cc96ba3d01821d43951ed248b6 100644 (file)
@@ -74,6 +74,11 @@ This variable affects both `company-dabbrev' and `company-dabbrev-code'."
   :type 'integer
   :package-version '(company . "0.8.3"))
 
+(defcustom company-dabbrev-ignore-invisible nil
+  "Non-nil to skip invisible text."
+  :type 'boolean
+  :package-version '(company . "0.9.0"))
+
 (defmacro company-dabrev--time-limit-while (test start limit &rest body)
   (declare (indent 3) (debug t))
   `(let ((company-time-limit-while-counter 0))
@@ -95,25 +100,27 @@ This variable affects both `company-dabbrev' and `company-dabbrev-code'."
 (defun company-dabbrev--search-buffer (regexp pos symbols start limit
                                        ignore-comments)
   (save-excursion
-    (let (match)
+    (cl-flet ((maybe-collect-match
+               ()
+               (let ((match (match-string-no-properties 0)))
+                 (when (and (>= (length match) company-dabbrev-minimum-length)
+                            (not (and company-dabbrev-ignore-invisible
+                                      (invisible-p (match-beginning 0)))))
+                   (push match symbols)))))
       (goto-char (if pos (1- pos) (point-min)))
       ;; search before pos
       (company-dabrev--time-limit-while (re-search-backward regexp nil t)
           start limit
-        (setq match (match-string-no-properties 0))
         (if (and ignore-comments (company-in-string-or-comment))
             (goto-char (nth 8 (syntax-ppss)))
-          (when (>= (length match) company-dabbrev-minimum-length)
-            (push match symbols))))
+          (maybe-collect-match)))
       (goto-char (or pos (point-min)))
       ;; search after pos
       (company-dabrev--time-limit-while (re-search-forward regexp nil t)
           start limit
-        (setq match (match-string-no-properties 0))
         (if (and ignore-comments (company-in-string-or-comment))
             (re-search-forward "\\s>\\|\\s!\\|\\s\"" nil t)
-          (when (>= (length match) company-dabbrev-minimum-length)
-            (push match symbols))))
+          (maybe-collect-match)))
       symbols)))
 
 (defun company-dabbrev--search (regexp &optional limit other-buffer-modes