]> rtime.felk.cvut.cz Git - sojka/company-mode.git/commitdiff
Add new possible value to `company-dabbrev-code-other-buffers'
authorDmitry Gutov <dgutov@yandex.ru>
Wed, 4 Jun 2014 02:25:39 +0000 (05:25 +0300)
committerDmitry Gutov <dgutov@yandex.ru>
Wed, 4 Jun 2014 02:25:39 +0000 (05:25 +0300)
#125

NEWS.md
company-dabbrev-code.el
company-dabbrev.el

diff --git a/NEWS.md b/NEWS.md
index 6db3e2163f575cbe0847431cee9748bbfcc08b15..137319d96c63a594fc968760f05f50ed48e407d2 100644 (file)
--- a/NEWS.md
+++ b/NEWS.md
@@ -4,6 +4,7 @@
 
 * `company-clang` uses the standard header search paths by default.
 * New user option `company-tooltip-flip-when-above`.
+* User option `company-dabbrev-code-other-buffers` can have a new value: `code`.
 
 ## 2014-04-19 (0.8.0)
 
index 1039e4a66d192e511bc5e989f3067b564d4a0c6f..371d90843d61b77bf2ba82ce3455e3cfedcdcae5 100644 (file)
@@ -1,6 +1,6 @@
-;;; company-dabbrev-code.el --- dabbrev-like company-mode back-end for code
+;;; company-dabbrev-code.el --- dabbrev-like company-mode back-end for code  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2009, 2011  Free Software Foundation, Inc.
+;; Copyright (C) 2009, 2011, 2014  Free Software Foundation, Inc.
 
 ;; Author: Nikolaj Schumacher
 
   :group 'company)
 
 (defcustom company-dabbrev-code-modes
-  '(asm-mode batch-file-mode c++-mode c-mode cperl-mode csharp-mode css-mode
-    emacs-lisp-mode erlang-mode f90-mode fortran-mode haskell-mode java-mode
-    javascript-mode jde-mode js2-mode lisp-mode lua-mode objc-mode perl-mode
-    php-mode prog-mode python-mode ruby-mode scheme-mode shell-script-mode)
+  '(prog-mode
+    batch-file-mode csharp-mode css-mode erlang-mode haskell-mode jde-mode
+    lua-mode python-mode)
   "Modes that use `company-dabbrev-code'.
-In all these modes `company-dabbrev-code' will complete only symbols, not text
-in comments or strings.  In other modes `company-dabbrev-code' will pass control
-to other back-ends \(e.g. `company-dabbrev'\).
-Value t means complete in all modes."
+In all these modes (and their derivatives) `company-dabbrev-code' will
+complete only symbols, not text in comments or strings.  In other modes
+`company-dabbrev-code' will pass control to other back-ends
+\(e.g. `company-dabbrev'\).  Value t means complete in all modes."
   :type '(choice (repeat (symbol :tag "Major mode"))
                  (const tag "All modes" t)))
 
 (defcustom company-dabbrev-code-other-buffers t
   "Determines whether `company-dabbrev-code' should search other buffers.
 If `all', search all other buffers.  If t, search buffers with the same
-major mode.
+major mode.  If `code', search all buffers with major modes in
+`company-dabbrev-code-modes', or derived from one of them.
 See also `company-dabbrev-code-time-limit'."
   :type '(choice (const :tag "Off" nil)
                  (const :tag "Same major mode" t)
+                 (const :tag "Code major modes" code)
                  (const :tag "All" all)))
 
 (defcustom company-dabbrev-code-time-limit .1
@@ -83,7 +84,7 @@ comments or strings."
   (cl-case command
     (interactive (company-begin-backend 'company-dabbrev-code))
     (prefix (and (or (eq t company-dabbrev-code-modes)
-                     (apply 'derived-mode-p company-dabbrev-code-modes))
+                     (apply #'derived-mode-p company-dabbrev-code-modes))
                  (or company-dabbrev-code-everywhere
                      (not (company-in-string-or-comment)))
                  (or (company-grab-symbol) 'stop)))
@@ -91,7 +92,11 @@ comments or strings."
                   (company-dabbrev--search
                    (company-dabbrev-code--make-regexp arg)
                    company-dabbrev-code-time-limit
-                   company-dabbrev-code-other-buffers t)))
+                   (pcase company-dabbrev-code-other-buffers
+                     (`t (list major-mode))
+                     (`code company-dabbrev-code-modes)
+                     (`all `all))
+                   t)))
     (ignore-case company-dabbrev-code-ignore-case)
     (duplicates t)))
 
index 401fcc9181f5391ebcdae07f20b37aedfdc78b0d..7fd20b65647afe6a3e8803127f36f5accaaaf98b 100644 (file)
@@ -1,6 +1,6 @@
-;;; company-dabbrev.el --- dabbrev-like company-mode completion back-end
+;;; company-dabbrev.el --- dabbrev-like company-mode completion back-end  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2009, 2011  Free Software Foundation, Inc.
+;; Copyright (C) 2009, 2011, 2014  Free Software Foundation, Inc.
 
 ;; Author: Nikolaj Schumacher
 
@@ -108,19 +108,19 @@ If you set this value to nil, you may also want to set
             (push match symbols))))
       symbols)))
 
-(defun company-dabbrev--search (regexp &optional limit other-buffers
+(defun company-dabbrev--search (regexp &optional limit other-buffer-modes
                                 ignore-comments)
   (let* ((start (current-time))
          (symbols (company-dabbrev--search-buffer regexp (point) nil start limit
                                                   ignore-comments)))
-    (when other-buffers
+    (when other-buffer-modes
       (cl-dolist (buffer (delq (current-buffer) (buffer-list)))
-        (and (or (eq other-buffers 'all)
-                 (eq (buffer-local-value 'major-mode buffer) major-mode))
-             (with-current-buffer buffer
-               (setq symbols
-                     (company-dabbrev--search-buffer regexp nil symbols start
-                                                     limit ignore-comments))))
+        (with-current-buffer buffer
+          (when (or (eq other-buffer-modes 'all)
+                    (apply #'derived-mode-p other-buffer-modes))
+            (setq symbols
+                  (company-dabbrev--search-buffer regexp nil symbols start
+                                                  limit ignore-comments))))
         (and limit
              (> (float-time (time-since start)) limit)
              (cl-return))))
@@ -135,8 +135,10 @@ If you set this value to nil, you may also want to set
     (prefix (company-grab-word))
     (candidates
      (let ((words (company-dabbrev--search (company-dabbrev--make-regexp arg)
-                                         company-dabbrev-time-limit
-                                         company-dabbrev-other-buffers))
+                                           company-dabbrev-time-limit
+                                           (pcase company-dabbrev-other-buffers
+                                             (`t (list major-mode))
+                                             (`all `all))))
            (downcase-p (if (eq company-dabbrev-downcase 'case-replace)
                            case-replace
                          company-dabbrev-downcase)))