From: Dmitry Gutov Date: Sat, 19 Dec 2015 15:26:45 +0000 (+0200) Subject: Use company-dabbrev-char-regexp more consistently (#433) X-Git-Url: https://code.delx.au/gnu-emacs-elpa/commitdiff_plain/4a6eea94edb138a3ea73e7a50553b69dedc5c3ad Use company-dabbrev-char-regexp more consistently (#433) * company-dabbrev--make-regexp: Wrap in parens. * company-dabbrev--prefix: New function, using it. --- diff --git a/company-dabbrev.el b/company-dabbrev.el index ab532516a..34acffe5d 100644 --- a/company-dabbrev.el +++ b/company-dabbrev.el @@ -93,9 +93,9 @@ This variable affects both `company-dabbrev' and `company-dabbrev-code'." (defun company-dabbrev--make-regexp (prefix) (concat "\\<" (if (equal prefix "") - company-dabbrev-char-regexp - (regexp-quote prefix)) - "\\(" company-dabbrev-char-regexp "\\)*\\>")) + (concat "\\(?:" company-dabbrev-char-regexp "\\)") + (regexp-quote prefix)) + "\\(?:" company-dabbrev-char-regexp "\\)*\\>")) (defun company-dabbrev--search-buffer (regexp pos symbols start limit ignore-comments) @@ -143,13 +143,21 @@ This variable affects both `company-dabbrev' and `company-dabbrev-code'." (cl-return)))) symbols)) +(defun company-dabbrev--prefix () + ;; Not in the middle of a word. + (unless (looking-at company-dabbrev-char-regexp) + ;; Emacs can't do greedy backward-search. + (company-grab-line (format "\\(?:^\\| \\)[^ ]*?\\(\\(?:%s\\)*\\)" + company-dabbrev-char-regexp) + 1))) + ;;;###autoload (defun company-dabbrev (command &optional arg &rest ignored) "dabbrev-like `company-mode' completion backend." (interactive (list 'interactive)) (cl-case command (interactive (company-begin-backend 'company-dabbrev)) - (prefix (company-grab-word)) + (prefix (company-dabbrev--prefix)) (candidates (let* ((case-fold-search company-dabbrev-ignore-case) (words (company-dabbrev--search (company-dabbrev--make-regexp arg)