X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-commands.el;h=911dee89857b049b768b2b3acd254125e92d3374;hp=890e2e8281a392c85ee1e11788792ead889af839;hb=fe7eeb17a3b1cc9b6a5316aebae340cba1ede06d;hpb=30c351e48914405c00250e446e06b50c8f1a6bd5 diff --git a/lisp/riece-commands.el b/lisp/riece-commands.el index 890e2e8..911dee8 100644 --- a/lisp/riece-commands.el +++ b/lisp/riece-commands.el @@ -33,20 +33,22 @@ (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))) + "Switch to 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 (let ((command-name (symbol-name this-command))) (if (string-match "[0-9]+$" command-name) (list (string-to-number (match-string 0 command-name))) - (list (string-to-number (read-string "Number: ")))))) + (list (string-to-number (read-string "Switch to number: ")))))) (let ((channel (nth (1- number) riece-current-channels))) (if channel (riece-command-switch-to-channel channel) @@ -115,7 +117,7 @@ (defun riece-command-change-layout (name) "Select a layout-name from all current available layouts and change the layout to the selected layout-name." - (interactive (list (completing-read "Layout: " riece-layout-alist))) + (interactive (list (completing-read "Change layout: " riece-layout-alist))) (setq riece-layout name riece-save-variables-are-dirty t) (riece-command-configure-windows)) @@ -145,8 +147,9 @@ the layout to the selected layout-name." (interactive (let* ((completion-ignore-case t) (user (riece-completing-read-identity - "User: " - (riece-get-users-on-server (riece-current-server-name))))) + "Finger user: " + (riece-get-users-on-server (riece-current-server-name)) + nil nil nil nil nil t))) (list user current-prefix-arg))) (if recurse (riece-send-string (format "WHOIS %s %s\r\n" @@ -159,14 +162,14 @@ the layout to the selected layout-name." (progn (riece-check-channel-commands-are-usable t) (list (read-from-minibuffer - "Topic: " (cons (or (riece-with-server-buffer - (riece-identity-server - riece-current-channel) - (riece-channel-get-topic - (riece-identity-prefix - riece-current-channel))) - "") - 0))))) + "Set topic: " (cons (or (riece-with-server-buffer + (riece-identity-server + riece-current-channel) + (riece-channel-get-topic + (riece-identity-prefix + riece-current-channel))) + "") + 0))))) (riece-send-string (format "TOPIC %s :%s\r\n" (riece-identity-prefix riece-current-channel) topic))) @@ -176,8 +179,9 @@ the layout to the selected layout-name." (let ((completion-ignore-case t)) (riece-check-channel-commands-are-usable t) (list (riece-completing-read-identity - "User: " - (riece-get-users-on-server (riece-current-server-name)))))) + "Invite user: " + (riece-get-users-on-server (riece-current-server-name)) + nil nil nil nil nil t)))) (riece-send-string (format "INVITE %s %s\r\n" (riece-identity-prefix user) (riece-identity-prefix riece-current-channel)))) @@ -187,7 +191,7 @@ the layout to the selected layout-name." (let ((completion-ignore-case t)) (riece-check-channel-commands-are-usable t) (list (completing-read - "User: " + "Kick user: " (riece-with-server-buffer (riece-identity-server riece-current-channel) (riece-channel-get-users (riece-identity-prefix @@ -207,7 +211,7 @@ the layout to the selected layout-name." (interactive (let ((completion-ignore-case t)) (list (read-from-minibuffer - "Pattern: " + "NAMES pattern: " (if (and riece-current-channel (riece-channel-p (riece-identity-prefix riece-current-channel))) @@ -221,7 +225,7 @@ the layout to the selected layout-name." (interactive (let ((completion-ignore-case t)) (list (read-from-minibuffer - "Pattern: " + "WHO pattern: " (if (and riece-current-channel (riece-channel-p (riece-identity-prefix riece-current-channel))) @@ -235,7 +239,7 @@ the layout to the selected layout-name." (interactive (let ((completion-ignore-case t)) (list (read-from-minibuffer - "Pattern: " + "LIST pattern: " (if (and riece-current-channel (riece-channel-p (riece-identity-prefix riece-current-channel))) @@ -251,8 +255,9 @@ the layout to the selected layout-name." (channel (if current-prefix-arg (riece-completing-read-identity - "Channel/User: " - (riece-get-identities-on-server (riece-current-server-name))) + "Change mode for channel/user: " + (riece-get-identities-on-server (riece-current-server-name)) + nil nil nil nil nil t) (riece-check-channel-commands-are-usable t) riece-current-channel)) (riece-overriding-server-name (riece-identity-server channel)) @@ -279,7 +284,9 @@ the layout to the selected layout-name." (riece-check-channel-commands-are-usable t) (let ((completion-ignore-case t)) (list (riece-completing-read-multiple - "Users" + (if current-prefix-arg + "Unset +o for users" + "Set +o for users") (riece-with-server-buffer (riece-identity-server riece-current-channel) (riece-channel-get-users (riece-identity-prefix @@ -303,7 +310,7 @@ the layout to the selected layout-name." ?- ?+) (make-string (length group) ?o) - (mapconcat #'identity group " "))) + (mapconcat #'identity (nreverse group) " "))) (setq group nil))))) (defun riece-command-set-speakers (users &optional arg) @@ -312,7 +319,9 @@ the layout to the selected layout-name." (riece-check-channel-commands-are-usable t) (let ((completion-ignore-case t)) (list (riece-completing-read-multiple - "Users" + (if current-prefix-arg + "Unset +v for users" + "Set +v for users") (riece-with-server-buffer (riece-identity-server riece-current-channel) (riece-channel-get-users (riece-identity-prefix @@ -336,7 +345,7 @@ the layout to the selected layout-name." ?- ?+) (make-string (length group) ?v) - (mapconcat #'identity group " "))) + (mapconcat #'identity (nreverse group) " "))) (setq group nil))))) (defun riece-command-send-message (message notice) @@ -386,8 +395,9 @@ the layout to the selected layout-name." (interactive (let ((completion-ignore-case t)) (list (riece-completing-read-identity - "User: " - (riece-get-users-on-server (riece-current-server-name)))))) + "Message to user: " + (riece-get-users-on-server (riece-current-server-name)) + nil nil nil nil nil t)))) (let ((text (buffer-substring (riece-line-beginning-position) (riece-line-end-position)))) @@ -416,8 +426,7 @@ the layout to the selected layout-name." (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 @@ -427,11 +436,11 @@ the layout to the selected layout-name." (let ((default (riece-format-identity riece-join-channel-candidate))) (riece-completing-read-identity - (format "Channel/User (default %s): " default) + (format "Join channel/user (default %s): " default) (riece-get-identities-on-server (riece-current-server-name)) nil nil nil nil default)) (riece-completing-read-identity - "Channel/User: " + "Join channel/user: " (riece-get-identities-on-server (riece-current-server-name))))) key) (if (and current-prefix-arg @@ -464,7 +473,7 @@ the layout to the selected layout-name." (let* ((completion-ignore-case t) (target (riece-completing-read-identity - (format "Channel/User (default %s): " + (format "Part from channel/user (default %s): " (riece-format-identity riece-current-channel)) riece-current-channels nil nil nil nil (riece-format-identity riece-current-channel))) @@ -476,8 +485,7 @@ the layout to the selected layout-name." (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) @@ -555,50 +563,57 @@ the layout to the selected layout-name." "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")) (defun riece-command-quit (&optional arg) "Quit IRC." (interactive "P") - (if (y-or-n-p "Really quit IRC? ") - (if riece-server-process-alist - (let ((message - (if arg - (read-string "Message: ") - riece-quit-message)) - (alist riece-server-process-alist)) - (while alist - (riece-quit-server-process (cdr (car alist)) message) - (setq alist (cdr alist)))) - ;; If no server process is available, exit immediately. - (riece-exit)))) + (if (null riece-server-process-alist) + (progn + (message "No server process") + (ding)) + (if (y-or-n-p "Really quit IRC? ") + (let ((message + (if arg + (read-string "Message: ") + riece-quit-message)) + (alist riece-server-process-alist)) + (while alist + (riece-quit-server-process (cdr (car alist)) message) + (setq alist (cdr alist))))))) (defun riece-command-raw (command) "Enter raw IRC command, which is sent to the server." @@ -625,9 +640,30 @@ If prefix argument ARG is non-nil, toggle frozen status." (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))) + (list (completing-read "Open server: " riece-server-alist))) (if (riece-server-process server-name) (error "%s is already opened" server-name)) (riece-open-server @@ -636,7 +672,7 @@ If prefix argument ARG is non-nil, toggle frozen status." (defun riece-command-close-server (server-name &optional message) (interactive - (list (completing-read "Server: " riece-server-process-alist) + (list (completing-read "Close server: " riece-server-process-alist) (if current-prefix-arg (read-string "Message: ") riece-quit-message)))