From 0b4e93f177fc551b8ef523ab13da7842273abad2 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Tue, 22 Mar 2011 19:30:05 +0800 Subject: [PATCH] Handle the case when re-search-backward errs because point is not located after rcirc-prompt-end-marker. --- lisp/ChangeLog | 7 +++++++ lisp/net/rcirc.el | 36 +++++++++++++++++++++--------------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 954c68c0d2f..9f9ffc7990c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2011-03-22 Leo Liu + + * 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 * custom.el (custom--inhibit-theme-enable): Make it affect only diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el index 71aa0dd22bc..999a6968012 100644 --- a/lisp/net/rcirc.el +++ b/lisp/net/rcirc.el @@ -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)) -- 2.39.2