From f855e5a106b853e66e6bbf23acfd5370d3c946cb Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Wed, 4 Jun 2014 05:25:39 +0300 Subject: [PATCH] Add new possible value to `company-dabbrev-code-other-buffers' #125 --- NEWS.md | 1 + company-dabbrev-code.el | 31 ++++++++++++++++++------------- company-dabbrev.el | 26 ++++++++++++++------------ 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/NEWS.md b/NEWS.md index 6db3e21..137319d 100644 --- 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) diff --git a/company-dabbrev-code.el b/company-dabbrev-code.el index 1039e4a..371d908 100644 --- a/company-dabbrev-code.el +++ b/company-dabbrev-code.el @@ -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 @@ -34,25 +34,26 @@ :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))) diff --git a/company-dabbrev.el b/company-dabbrev.el index 401fcc9..7fd20b6 100644 --- a/company-dabbrev.el +++ b/company-dabbrev.el @@ -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))) -- 2.39.2