]> code.delx.au - gnu-emacs/commitdiff
Return appropriate value to comint-dynamic-complete
authorDan Davison <dandavison7@gmail.com>
Thu, 17 May 2012 03:03:27 +0000 (00:03 -0300)
committerFabián Ezequiel Gallina <fgallina@gnu.org>
Thu, 17 May 2012 03:03:27 +0000 (00:03 -0300)
This avoids a "No completions for ..." message being issued when a
completion has been made. Also, reduces redundancy between the
inferior-python-mode and python-mode completion code.

lisp/progmodes/python.el

index 1c05048512a2d332e794e832cc442f7966520ca9..4fe5bd87462a271e10feddbfaa7a5c533ef80104 100644 (file)
@@ -1609,38 +1609,38 @@ else:
       (when (> (length completions) 2)
         (split-string completions "^'\\|^\"\\|;\\|'$\\|\"$" t)))))
 
-(defun python-shell-completion--get-completion (input completions)
-  "Get completion for INPUT using COMPLETIONS."
-  (let ((completion (when completions
+(defun python-shell-completion--do-completion-at-point (process)
+  "Do completion for INPUT using COMPLETIONS."
+  (with-syntax-table python-dotty-syntax-table
+    (let* ((input (substring-no-properties
+                       (or (comint-word (current-word)) "") nil nil))
+        (completions (python-shell-completion--get-completions
+                             input process))
+        (completion (when completions
                       (try-completion input completions))))
-    (cond ((eq completion t)
-           input)
-          ((null completion)
-           (message "Can't find completion for \"%s\"" input)
-           (ding)
-           input)
+      (cond ((eq completion t)
+           t)
+           ((null completion)
+            (message "Can't find completion for \"%s\"" input)
+            (ding)
+           nil)
           ((not (string= input completion))
-           completion)
+           (progn (delete-char (- (length input)))
+                 (insert completion)
+                 t))
           (t
-           (message "Making completion list...")
            (with-output-to-temp-buffer "*Python Completions*"
              (display-completion-list
               (all-completions input completions)))
-           input))))
+           t)))))
 
 (defun python-shell-completion-complete-at-point ()
   "Perform completion at point in inferior Python process."
   (interactive)
-  (with-syntax-table python-dotty-syntax-table
-    (when (and comint-last-prompt-overlay
-               (> (point-marker) (overlay-end comint-last-prompt-overlay)))
-      (let* ((process (get-buffer-process (current-buffer)))
-             (input (substring-no-properties
-                     (or (comint-word (current-word)) "") nil nil)))
-        (delete-char (- (length input)))
-        (insert
-         (python-shell-completion--get-completion
-          input (python-shell-completion--get-completions input process)))))))
+  (and comint-last-prompt-overlay
+       (> (point-marker) (overlay-end comint-last-prompt-overlay))
+       (python-shell-completion--do-completion-at-point
+       (get-buffer-process (current-buffer)))))
 
 (defun python-shell-completion-complete-or-indent ()
   "Complete or indent depending on the context.
@@ -1749,15 +1749,7 @@ inferior python process is updated properly."
   (let ((process (python-shell-get-process)))
     (if (not process)
         (error "Completion needs an inferior Python process running")
-      (with-syntax-table python-dotty-syntax-table
-        (let* ((input (substring-no-properties
-                       (or (comint-word (current-word)) "") nil nil))
-               (completions (python-shell-completion--get-completions
-                             input process)))
-          (delete-char (- (length input)))
-          (insert
-           (python-shell-completion--get-completion
-            input completions)))))))
+      (python-shell-completion--do-completion-at-point process))))
 
 (add-to-list 'debug-ignored-errors "^Completion needs an inferior Python process running.")