X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-commands.el;h=ed5dcbdc0f5c75e29d82a031c62abc460fb83af8;hb=1c242483f51f806c9607012efeb8a8985c9b2e0a;hp=f5adb10d4ef0b01291b216dd1e8bfddbd092ff62;hpb=db1370bb829f1e2a34d64885d571645733f22026;p=elisp%2Friece.git diff --git a/lisp/riece-commands.el b/lisp/riece-commands.el index f5adb10..ed5dcbd 100644 --- a/lisp/riece-commands.el +++ b/lisp/riece-commands.el @@ -73,12 +73,17 @@ "Select the next channel." (interactive) (when (> (length riece-current-channels) 1) - (let ((pointer (cdr (string-list-member-ignore-case + (let ((pointer (cdr (scandinavian-member-ignore-case riece-current-channel riece-current-channels)))) (while (and pointer (null (car pointer))) (setq pointer (cdr pointer))) + (when (null pointer) + (setq pointer riece-current-channels) + (while (and pointer + (null (car pointer))) + (setq pointer (cdr pointer)))) (if (car pointer) (riece-command-switch-to-channel (car pointer)) (error "No such channel!"))))) @@ -87,15 +92,19 @@ "Select the previous channel." (interactive) (when (> (length riece-current-channels) 1) - (let ((pointer (string-list-member-ignore-case + (let ((pointer (scandinavian-member-ignore-case 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 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!"))))) @@ -375,7 +384,7 @@ (riece-identity-prefix target)))))) (defun riece-command-join-partner (target) - (let ((pointer (riece-identity-member target riece-current-channels))) + (let ((pointer (riece-identity-member-safe target riece-current-channels))) (if pointer (riece-command-switch-to-channel (car pointer)) (riece-join-channel target) @@ -394,7 +403,7 @@ (setq key (riece-read-passwd (format "Key for %s: " target)))) (list target key))) - (let ((pointer (riece-identity-member target riece-current-channels))) + (let ((pointer (riece-identity-member-safe target riece-current-channels))) (if pointer (riece-command-switch-to-channel (car pointer)) (if (riece-channel-p target) @@ -430,7 +439,7 @@ (riece-channel-p target)) (setq message (read-string "Message: "))) (list target message))) - (if (riece-identity-member target riece-current-channels) + (if (riece-identity-member-safe target riece-current-channels) (if (riece-channel-p target) (riece-command-part-channel target message) (riece-part-channel target) @@ -491,7 +500,9 @@ (defun riece-command-toggle-away (&optional message) "Mark yourself as being away." (interactive - (if current-prefix-arg + (if (and (not (riece-user-get-away (riece-current-nickname))) + (or (null riece-away-message) + current-prefix-arg)) (let ((message (read-string "Away message: "))) (list message)))) (if message @@ -502,20 +513,32 @@ "Prevent automatic scrolling of the dialogue window. If prefix argument ARG is non-nil, toggle frozen status." (interactive "P") - (riece-freeze (if riece-channel-buffer-mode - riece-channel-buffer - riece-dialogue-buffer) - (if arg (prefix-numeric-value arg)))) + (with-current-buffer (if (and riece-channel-buffer-mode + riece-channel-buffer) + riece-channel-buffer + riece-dialogue-buffer) + (setq riece-freeze (if arg + (< 0 (prefix-numeric-value arg)) + (not riece-freeze)))) + (riece-update-status-indicators) + (force-mode-line-update t)) (defun riece-command-toggle-own-freeze (&optional arg) "Prevent automatic scrolling of the dialogue window. The difference from `riece-command-freeze' is that your messages are hidden. If prefix argument ARG is non-nil, toggle frozen status." (interactive "P") - (riece-own-freeze (if riece-channel-buffer-mode - riece-channel-buffer - riece-dialogue-buffer) - (if arg (prefix-numeric-value arg)))) + (with-current-buffer (if (and riece-channel-buffer-mode + riece-channel-buffer) + riece-channel-buffer + riece-dialogue-buffer) + (if (if arg + (< 0 (prefix-numeric-value arg)) + (not (eq riece-freeze 'own))) + (setq riece-freeze 'own) + (setq riece-freeze nil))) + (riece-update-status-indicators) + (force-mode-line-update t)) (defun riece-command-quit (&optional arg) "Quit IRC." @@ -556,9 +579,11 @@ If prefix argument ARG is non-nil, toggle frozen status." (defun riece-command-open-server (server-name) (interactive (list (completing-read "Server: " riece-server-alist))) - (riece-open-server - (riece-server-name-to-server server-name) - server-name)) + (if (assoc server-name riece-server-process-alist) + (error "%s is already opened" server-name) + (riece-open-server + (riece-server-name-to-server server-name) + server-name))) (defun riece-command-close-server (server-name &optional message) (interactive