(require 'riece-identity)
(require 'riece-message)
+(autoload 'derived-mode-class "derived")
+
;;; Channel movement:
(defun riece-command-switch-to-channel (channel)
(interactive (list (riece-completing-read-identity
"Channel/User: " riece-current-channels nil t)))
(unless (equal channel riece-current-channel)
- (riece-switch-to-channel channel)
- (riece-redisplay-buffers)))
+ (riece-switch-to-channel channel)))
(defun riece-command-switch-to-channel-by-number (number)
(interactive
?-
?+)
(make-string (length group) ?o)
- (mapconcat #'identity group " ")))
+ (mapconcat #'identity (nreverse group) " ")))
(setq group nil)))))
(defun riece-command-set-speakers (users &optional arg)
?-
?+)
(make-string (length group) ?v)
- (mapconcat #'identity group " ")))
+ (mapconcat #'identity (nreverse group) " ")))
(setq group nil)))))
(defun riece-command-send-message (message notice)
(if pointer
(riece-command-switch-to-channel (car pointer))
(riece-join-channel target)
- (riece-switch-to-channel target)
- (riece-redisplay-buffers))))
+ (riece-switch-to-channel target))))
(defun riece-command-join (target &optional key)
(interactive
(if (riece-identity-member target riece-current-channels)
(if (riece-channel-p (riece-identity-prefix target))
(riece-command-part-channel target message)
- (riece-part-channel target)
- (riece-redisplay-buffers))
+ (riece-part-channel target))
(error "You are not talking with %s" target)))
(defun riece-command-change-nickname (nickname)
"Prevent automatic scrolling of the dialogue window.
If prefix argument ARG is non-nil, toggle frozen status."
(interactive "P")
- (with-current-buffer (if (and riece-channel-buffer-mode
- riece-channel-buffer)
- riece-channel-buffer
- riece-dialogue-buffer)
+ (with-current-buffer (if (eq (derived-mode-class major-mode)
+ 'riece-dialogue-mode)
+ (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))
+ (not riece-freeze)))
+ (riece-emit-signal 'buffer-freeze-changed
+ (current-buffer) riece-freeze)))
(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")
- (with-current-buffer (if (and riece-channel-buffer-mode
- riece-channel-buffer)
- riece-channel-buffer
- riece-dialogue-buffer)
+ (with-current-buffer (if (eq (derived-mode-class major-mode)
+ 'riece-dialogue-mode)
+ (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))
+ (setq riece-freeze nil))
+ (riece-emit-signal 'buffer-freeze-changed
+ (current-buffer) riece-freeze)))
(eval-when-compile
(autoload 'riece-exit "riece"))
(interactive "r")
(kill-new (buffer-substring-no-properties start end)))
+(defun riece-command-complete-user ()
+ "Complete a user name in the current buffer."
+ (interactive)
+ (let* ((completion-ignore-case t)
+ (table (mapcar (lambda (user)
+ (list (riece-format-identity user t)))
+ (riece-get-users-on-server
+ (riece-current-server-name))))
+ (current (current-word))
+ (completion (try-completion current table))
+ (all (all-completions current table)))
+ (if (eq completion t)
+ nil
+ (if (null completion)
+ (message "Can't find completion for \"%s\"" current)
+ (if (equal current completion)
+ (with-output-to-temp-buffer "*Help*"
+ (display-completion-list all))
+ (delete-region (point) (- (point) (length current)))
+ (insert completion))))))
+
(defun riece-command-open-server (server-name)
(interactive
(list (completing-read "Server: " riece-server-alist)))