-;;; company-elisp.el --- A company-mode completion back-end for emacs-lisp-mode
+;;; company-elisp.el --- A company-mode completion back-end for emacs-lisp-mode -*- lexical-binding: t -*-
-;; Copyright (C) 2009, 2011-2012 Free Software Foundation, Inc.
+;; Copyright (C) 2009, 2011-2013 Free Software Foundation, Inc.
;; Author: Nikolaj Schumacher
:type '(choice (const :tag "Off" nil)
(const :tag "On" t)))
+(defcustom company-elisp-show-locals-first t
+ "If enabled, locally bound variables and functions are displayed
+first in the candidates list.")
+
(defun company-grab-lisp-symbol ()
(let ((prefix (company-grab-symbol)))
(if prefix
res))
(defun company-elisp-candidates (prefix)
- (let ((predicate (company-elisp-candidates-predicate prefix)))
- (append (company-elisp-locals prefix (eq predicate 'fboundp))
- (company-elisp-globals prefix predicate))))
+ (let* ((predicate (company-elisp-candidates-predicate prefix))
+ (locals (company-elisp-locals prefix (eq predicate 'fboundp)))
+ (globals (company-elisp-globals prefix predicate))
+ (locals (loop for local in locals
+ when (not (member local globals))
+ collect local)))
+ (if company-elisp-show-locals-first
+ (append (sort locals 'string<)
+ (sort globals 'string<))
+ (append locals globals))))
(defun company-elisp-globals (prefix predicate)
(all-completions prefix obarray predicate))
(save-excursion
(ignore-errors
(up-list -2)
- (forward-char 1)
- (looking-at " *(")))))
+ (and (save-excursion
+ (forward-char 1)
+ (looking-at "[ \t\n]*("))
+ (prog1 (search-backward "(")
+ (forward-char 1))
+ (looking-at company-elisp-var-binding-regexp))))))
'fboundp
'boundp)
'company-elisp-predicate)))
(prefix (and (eq (derived-mode-p 'emacs-lisp-mode) 'emacs-lisp-mode)
(company-grab-lisp-symbol)))
(candidates (company-elisp-candidates arg))
+ (sorted company-elisp-show-locals-first)
(meta (company-elisp-doc arg))
(doc-buffer (let ((symbol (intern arg)))
(save-window-excursion