changeset 108001:3d52b4ac976f

(lisp-completion-at-point): Complete around point. I.e. include text after point in the completion region. Also, return nil when we're not after/in a symbol.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 20 Apr 2010 12:37:31 -0400
parents 14e8111ba66e
children c609e6e60b3d
files lisp/ChangeLog lisp/emacs-lisp/lisp.el
diffstat 2 files changed, 20 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Tue Apr 20 11:46:52 2010 -0400
+++ b/lisp/ChangeLog	Tue Apr 20 12:37:31 2010 -0400
@@ -1,5 +1,9 @@
 2010-04-20  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* emacs-lisp/lisp.el (lisp-completion-at-point): Complete around point.
+	I.e. include text after point in the completion region.
+	Also, return nil when we're not after/in a symbol.
+
 	* international/mule-cmds.el (view-hello-file): Don't fiddle with the
 	default enable-multibyte-characters.
 
--- a/lisp/emacs-lisp/lisp.el	Tue Apr 20 11:46:52 2010 -0400
+++ b/lisp/emacs-lisp/lisp.el	Tue Apr 20 12:37:31 2010 -0400
@@ -631,12 +631,11 @@
 
 (defun lisp-completion-at-point (&optional predicate)
   ;; FIXME: the `end' could be after point?
-  (let* ((end (point))
+  (let* ((pos (point))
          (beg (with-syntax-table emacs-lisp-mode-syntax-table
                 (save-excursion
                   (backward-sexp 1)
-                  (while (= (char-syntax (following-char)) ?\')
-                    (forward-char 1))
+                  (skip-syntax-forward "'")
                   (point))))
          (predicate
           (or predicate
@@ -656,12 +655,21 @@
                       ;; Maybe a `let' varlist or something.
                       nil
                     ;; Else, we assume that a function name is expected.
-                    'fboundp))))))
-    (list beg end obarray
-          :predicate predicate
-          :annotate-function
+                    'fboundp)))))
+         (end
+          (unless (or (eq beg (point-max))
+                      (member (char-syntax (char-after beg)) '(?\( ?\))))
+            (save-excursion
+              (goto-char beg)
+              (forward-sexp 1)
+              (when (>= (point) pos)
+                (point))))))
+    (when end
+      (list beg end obarray
+            :predicate predicate
+            :annotate-function
             (unless (eq predicate 'fboundp)
-              (lambda (str) (if (fboundp (intern-soft str)) " <f>"))))))
+              (lambda (str) (if (fboundp (intern-soft str)) " <f>")))))))
 
 ;; arch-tag: aa7fa8a4-2e6f-4e9b-9cd9-fef06340e67e
 ;;; lisp.el ends here