]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle the case when re-search-backward errs
authorLeo Liu <sdl.web@gmail.com>
Tue, 22 Mar 2011 11:30:05 +0000 (19:30 +0800)
committerLeo Liu <sdl.web@gmail.com>
Tue, 22 Mar 2011 11:30:05 +0000 (19:30 +0800)
because point is not located after rcirc-prompt-end-marker.

lisp/ChangeLog
lisp/net/rcirc.el

index 954c68c0d2fcb70b73c37192bf16673b8db96f40..9f9ffc7990cc7c5b505b5bfc898f22570328682f 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-22  Leo Liu  <sdl.web@gmail.com>
+
+       * net/rcirc.el (rcirc-completion-at-point): Return nil if point is
+       located before rcirc-prompt-end-marker.
+       (rcirc-complete): Error if point is not after rcirc prompt.
+       Handle the case when table is nil.
+
 2011-03-22  Chong Yidong  <cyd@stupidchicken.com>
 
        * custom.el (custom--inhibit-theme-enable): Make it affect only
index 71aa0dd22bc10c18bf8dd651c54cce559a9a0c42..999a6968012208d03d3c2c7b1572dc3532937ddf 100644 (file)
@@ -828,18 +828,21 @@ The list is updated automatically by `defun-rcirc-command'.")
 
 (defun rcirc-completion-at-point ()
   "Function used for `completion-at-point-functions' in `rcirc-mode'."
-  (let* ((beg (save-excursion
-               (if (re-search-backward " " rcirc-prompt-end-marker t)
-                   (1+ (point))
-                 rcirc-prompt-end-marker)))
-        (table (if (and (= beg rcirc-prompt-end-marker)
-                        (eq (char-after beg) ?/))
-                   (delete-dups
-                    (nconc
-                     (sort (copy-sequence rcirc-client-commands) 'string-lessp)
-                     (sort (copy-sequence rcirc-server-commands) 'string-lessp)))
-                 (rcirc-channel-nicks (rcirc-buffer-process) rcirc-target))))
-    (list beg (point) table)))
+  (and (rcirc-looking-at-input)
+       (let* ((beg (save-excursion
+                    (if (re-search-backward " " rcirc-prompt-end-marker t)
+                        (1+ (point))
+                      rcirc-prompt-end-marker)))
+             (table (if (and (= beg rcirc-prompt-end-marker)
+                             (eq (char-after beg) ?/))
+                        (delete-dups
+                         (nconc (sort (copy-sequence rcirc-client-commands)
+                                      'string-lessp)
+                                (sort (copy-sequence rcirc-server-commands)
+                                      'string-lessp)))
+                      (rcirc-channel-nicks (rcirc-buffer-process)
+                                           rcirc-target))))
+        (list beg (point) table))))
 
 (defvar rcirc-completions nil)
 (defvar rcirc-completion-start nil)
@@ -848,6 +851,8 @@ The list is updated automatically by `defun-rcirc-command'.")
   "Cycle through completions from list of nicks in channel or IRC commands.
 IRC command completion is performed only if '/' is the first input char."
   (interactive)
+  (unless (rcirc-looking-at-input)
+    (error "Point not located after rcirc prompt"))
   (if (eq last-command this-command)
       (setq rcirc-completions
            (append (cdr rcirc-completions) (list (car rcirc-completions))))
@@ -855,9 +860,10 @@ IRC command completion is performed only if '/' is the first input char."
          (table (rcirc-completion-at-point)))
       (setq rcirc-completion-start (car table))
       (setq rcirc-completions
-           (all-completions (buffer-substring rcirc-completion-start
-                                              (cadr table))
-                            (nth 2 table)))))
+           (and rcirc-completion-start
+                (all-completions (buffer-substring rcirc-completion-start
+                                                   (cadr table))
+                                 (nth 2 table))))))
   (let ((completion (car rcirc-completions)))
     (when completion
       (delete-region rcirc-completion-start (point))