- (when (string-match "\\([^ ]*\\) +" str)
- (setq mflag (match-string 1 str)
- marg (substring str (match-end 0))
- mflags (liece-string-to-list mflag))
- (while (string-match "^\\([^ ]*\\) +" marg)
- (setq margs (cons (match-string 1 marg) margs)
- marg (substring marg (match-end 0))))
- (or (string= marg "") (setq margs (cons marg margs)))
- (while (setq md (pop mflags))
- (cond ((eq ?- md) (setq val nil))
- ((eq ?+ md) (setq val t))
- ((eq ?o md) (liece-channel-set-operator chnl (pop margs) val))
- ((eq ?v md) (liece-channel-set-voice chnl (pop margs) val))
- ((eq ?b md) (liece-channel-set-ban chnl (pop margs) val))
- ((eq ?e md) (liece-channel-set-exception chnl (pop margs) val))
- ((eq ?I md) (liece-channel-set-invite chnl (pop margs) val))
- (chnlp (liece-channel-set-mode val md chnl))
- (t (liece-nick-set-mode val md chnl)))))
-
+ (when (string-match "\\([^ ]*\\) *" mode)
+ (setq mflgs (liece-string-to-list (match-string 1 mode))
+ margs (delete "" (split-string
+ (substring mode (match-end 0))
+ "[ ]+")))
+ (while mflgs
+ (cond ((eq ?- (car mflgs)) (setq val nil))
+ ((eq ?+ (car mflgs)) (setq val t))
+ ((eq ?o (car mflgs))
+ (liece-channel-set-operator chnl (car margs) val)
+ (setq margs (cdr margs)))
+ ((eq ?v (car mflgs))
+ (liece-channel-set-voice chnl (car margs) val)
+ (setq margs (cdr margs)))
+ ((eq ?b (car mflgs))
+ (liece-channel-set-ban chnl (car margs) val)
+ (setq margs (cdr margs)))
+ ((eq ?e (car mflgs))
+ (liece-channel-set-exception chnl (car margs) val)
+ (setq margs (cdr margs)))
+ ((eq ?I (car mflgs))
+ (liece-channel-set-invite chnl (car margs) val)
+ (setq margs (cdr margs)))
+ (chnlp (liece-channel-set-mode val (car mflgs) chnl))
+ (t (liece-nick-set-mode val (car mflgs) chnl)))
+ (setq mflgs (cdr mflgs))))