X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-identity.el;h=42690baf298bb65bfb5efca37fc22765fae01a11;hb=b834bf2df318ea6fb5ae02406cca8262ae22c0db;hp=1f58e024ae77e9e49a43ad345ed4a97df19b1bce;hpb=88d78939e002191f54bf8843107a24a81a7e9055;p=elisp%2Friece.git diff --git a/lisp/riece-identity.el b/lisp/riece-identity.el index 1f58e02..42690ba 100644 --- a/lisp/riece-identity.el +++ b/lisp/riece-identity.el @@ -83,8 +83,7 @@ RFC2812, 2.2 \"Character codes\" says: "Return non-nil if an identity ELT is an element of LIST." (catch 'found (while list - (if (and (vectorp (car list)) - (riece-identity-equal (car list) elt)) + (if (riece-identity-equal (car list) elt) (throw 'found list) (setq list (cdr list)))))) @@ -94,8 +93,7 @@ The only difference with `riece-identity-member', this function doesn't take server names into account." (catch 'found (while list - (if (and (vectorp (car list)) - (riece-identity-equal-no-server (car list) elt)) + (if (riece-identity-equal-no-server (car list) elt) (throw 'found list) (setq list (cdr list)))))) @@ -141,7 +139,7 @@ take server names into account." (let ((prefix (riece-decode-coding-string (riece-identity-prefix identity))) (server (riece-identity-server identity))) - (if (equal server "") + (if (or prefix-only (equal server "")) prefix (concat prefix " " server))))) @@ -155,15 +153,23 @@ take server names into account." (riece-with-server-buffer server (riece-make-identity (riece-encode-coding-string prefix) server)))) -(defun riece-completing-read-identity (prompt table +(defun riece-completing-read-identity (prompt channels &optional predicate must-match) - (riece-encode-identity - (completing-read - prompt - (mapcar (lambda (channel) - (list (riece-decode-identity channel))) - table) - predicate must-match))) + (let* ((decoded + (completing-read + prompt + (delq nil (mapcar (lambda (channel) + (list (riece-decode-identity channel))) + (or channels riece-current-channels))) + predicate must-match)) + (encoded + (riece-encode-identity decoded))) + (if (and (not (string-match "[ ,]" decoded)) + (string-match "[ ,]" (riece-identity-prefix encoded)) + (not (y-or-n-p (format "The encoded channel name contains illegal character \"%s\". continue? " + (match-string 0 (riece-identity-prefix encoded)))))) + (error "Invalid channel name!")) + encoded)) (provide 'riece-identity)