- (let ((channels (nreverse (copy-sequence riece-current-channels))))
- (setcdr (last channels) channels) ;make a circular link
- (riece-command-switch-to-channel
- (nth 1 (string-list-member-ignore-case
- riece-current-channel channels))))))
+ (let ((pointer (riece-identity-member
+ riece-current-channel
+ riece-current-channels))
+ (start riece-current-channels)
+ channel)
+ (while (and start (not (eq start pointer)))
+ (if (car start)
+ (setq channel (car start)))
+ (setq start (cdr start)))
+ (when (null channel)
+ (setq start (copy-sequence riece-current-channels))
+ (setq start (delq nil start))
+ (and (> (length start) 1)
+ (setq channel (nth (1- (length start)) start))))
+ (if channel
+ (riece-command-switch-to-channel channel)
+ (error "No such channel!")))))