X-Git-Url: http://git.chise.org/gitweb/?p=elisp%2Friece.git;a=blobdiff_plain;f=lisp%2Friece-commands.el;h=ddb353d9b708af1938ff5ea6324d2e7e0d32bbe0;hp=c6ed3d90487ecfd5780fbffd688856553a55ca90;hb=1427368d25257dfe250b57a26e157a35783a8207;hpb=56b722577563032371ad6b29e3c0c86c074d7ea4 diff --git a/lisp/riece-commands.el b/lisp/riece-commands.el index c6ed3d9..ddb353d 100644 --- a/lisp/riece-commands.el +++ b/lisp/riece-commands.el @@ -32,13 +32,12 @@ (require 'riece-misc) (require 'riece-identity) (require 'riece-message) - -(autoload 'derived-mode-class "derived") +(require 'riece-mcat) ;;; Channel movement: (defun riece-command-switch-to-channel (channel) (interactive (list (riece-completing-read-identity - "Switch to channel/user: " + (riece-mcat "Switch to channel/user: ") riece-current-channels nil t))) (unless (equal channel riece-current-channel) (riece-switch-to-channel channel))) @@ -48,7 +47,7 @@ (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 "Switch to number: ")))))) + (list (string-to-number (read-string (riece-mcat "Switch to number: "))))))) (let ((channel (nth (1- number) riece-current-channels))) (if channel (riece-command-switch-to-channel channel) @@ -132,7 +131,8 @@ (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 "Change layout: " riece-layout-alist))) + (interactive (list (completing-read (riece-mcat "Change layout: ") + riece-layout-alist))) (setq riece-layout name riece-save-variables-are-dirty t) (riece-command-configure-windows)) @@ -169,7 +169,7 @@ the layout to the selected layout-name." (interactive (let* ((completion-ignore-case t) (user (riece-completing-read-identity - "Finger user: " + (riece-mcat "Finger user: ") (riece-get-users-on-server (riece-current-server-name)) nil nil nil nil nil t))) (list user current-prefix-arg))) @@ -184,14 +184,15 @@ the layout to the selected layout-name." (progn (riece-check-channel-commands-are-usable t) (list (read-from-minibuffer - "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-mcat "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) @@ -202,10 +203,10 @@ the layout to the selected layout-name." (let ((completion-ignore-case t)) (riece-check-channel-commands-are-usable t) (list (riece-completing-read-identity - "Invite user: " + (riece-mcat "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-send-string (format "INVITE %s :%s\r\n" (riece-identity-prefix user) (riece-identity-prefix riece-current-channel)))) @@ -214,7 +215,7 @@ the layout to the selected layout-name." (let ((completion-ignore-case t)) (riece-check-channel-commands-are-usable t) (list (completing-read - "Kick user: " + (riece-mcat "Kick user: ") (riece-with-server-buffer (riece-identity-server riece-current-channel) (riece-channel-get-users (riece-identity-prefix @@ -231,46 +232,80 @@ the layout to the selected layout-name." user)) riece-current-channel)) +(defun riece-command-kick-with-ban (user pattern &optional message) + (interactive + (let ((completion-ignore-case t) + user) + (riece-check-channel-commands-are-usable t) + (riece-with-server-buffer (riece-identity-server riece-current-channel) + (setq user (completing-read + (riece-mcat "Kick user: ") + (riece-channel-get-users (riece-identity-prefix + riece-current-channel)))) + (list + user + (read-from-minibuffer + (riece-mcat "Ban pattern: ") + (concat user "!" (riece-user-get-user-at-host user))) + (if current-prefix-arg + (read-string "Message: ")))))) + (riece-send-string (format "MODE %s :+b %s\r\n" + (riece-identity-prefix riece-current-channel) + pattern) + riece-current-channel) + (riece-send-string + (if message + (format "KICK %s %s :%s\r\n" + (riece-identity-prefix riece-current-channel) + user message) + (format "KICK %s %s\r\n" + (riece-identity-prefix riece-current-channel) + user)) + riece-current-channel)) + (defun riece-command-names (pattern) (interactive (let ((completion-ignore-case t)) (list (read-from-minibuffer - "NAMES pattern: " + (riece-mcat "NAMES pattern: ") (if (and riece-current-channel (riece-channel-p (riece-identity-prefix riece-current-channel))) (cons (riece-identity-prefix riece-current-channel) 0)))))) (if (or (not (equal pattern "")) - (yes-or-no-p "Really want to query NAMES without argument? ")) + (yes-or-no-p (riece-mcat + "Really want to query NAMES without argument? "))) (riece-send-string (format "NAMES %s\r\n" pattern)))) (defun riece-command-who (pattern) (interactive (let ((completion-ignore-case t)) (list (read-from-minibuffer - "WHO pattern: " + (riece-mcat "WHO pattern: ") (if (and riece-current-channel (riece-channel-p (riece-identity-prefix riece-current-channel))) (cons (riece-identity-prefix riece-current-channel) 0)))))) (if (or (not (equal pattern "")) - (yes-or-no-p "Really want to query WHO without argument? ")) + (yes-or-no-p (riece-mcat + "Really want to query WHO without argument? "))) (riece-send-string (format "WHO %s\r\n" pattern)))) (defun riece-command-list (pattern) (interactive (let ((completion-ignore-case t)) (list (read-from-minibuffer - "LIST pattern: " + (riece-mcat "LIST pattern: ") (if (and riece-current-channel (riece-channel-p (riece-identity-prefix riece-current-channel))) (cons (riece-identity-prefix riece-current-channel) 0)))))) (if (or (not (equal pattern "")) - (yes-or-no-p "Really want to query LIST without argument? ")) + (yes-or-no-p (riece-mcat + "Really want to query LIST without argument? "))) (riece-send-string (format "LIST %s\r\n" pattern)))) (defun riece-command-change-mode (channel change) @@ -279,14 +314,14 @@ the layout to the selected layout-name." (channel (if current-prefix-arg (riece-completing-read-identity - "Change mode for channel/user: " + (riece-mcat "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)) (riece-temp-minibuffer-message - (concat "[Available modes: " + (concat (riece-mcat "[Available modes: ") (riece-with-server-buffer (riece-identity-server channel) (if (riece-channel-p (riece-identity-prefix channel)) (if riece-supported-channel-modes @@ -297,7 +332,7 @@ the layout to the selected layout-name." (list channel (read-from-minibuffer (concat (riece-concat-channel-modes - channel "Mode (? for help)") ": ") + channel (riece-mcat "Mode (? for help)")) ": ") nil riece-minibuffer-map)))) (if (equal change "") (riece-send-string (format "MODE %s\r\n" @@ -313,8 +348,8 @@ the layout to the selected layout-name." (let ((completion-ignore-case t)) (list (riece-completing-read-multiple (if current-prefix-arg - "Unset +o for users" - "Set +o for users") + (riece-mcat "Unset +o for users") + (riece-mcat "Set +o for users")) (riece-with-server-buffer (riece-identity-server riece-current-channel) (riece-channel-get-users (riece-identity-prefix @@ -348,8 +383,8 @@ the layout to the selected layout-name." (let ((completion-ignore-case t)) (list (riece-completing-read-multiple (if current-prefix-arg - "Unset +v for users" - "Set +v for users") + (riece-mcat "Unset +v for users") + (riece-mcat "Set +v for users")) (riece-with-server-buffer (riece-identity-server riece-current-channel) (riece-channel-get-users (riece-identity-prefix @@ -380,7 +415,7 @@ the layout to the selected layout-name." "Send MESSAGE to the current channel." (run-hooks 'riece-command-send-message-hook) (if (equal message "") - (error "No text to send")) + (error (riece-mcat "No text to send"))) (riece-check-channel-commands-are-usable) (if notice (progn @@ -408,8 +443,8 @@ the layout to the selected layout-name." (riece-line-beginning-position) (riece-line-end-position)) nil) - (let ((next-line-add-newlines t)) - (next-line 1))) + (if (> (forward-line) 0) + (insert "\n"))) (defun riece-command-enter-message-as-notice () "Send the current line to the current channel as NOTICE." @@ -418,8 +453,8 @@ the layout to the selected layout-name." (riece-line-beginning-position) (riece-line-end-position)) t) - (let ((next-line-add-newlines t)) - (next-line 1))) + (if (> (forward-line) 0) + (insert "\n"))) (defun riece-command-enter-message-to-user (user) "Send the current line to USER." @@ -428,7 +463,7 @@ the layout to the selected layout-name." (error "No text to send") (let ((completion-ignore-case t)) (list (riece-completing-read-identity - "Message to user: " + (riece-mcat "Message to user: ") (riece-get-users-on-server (riece-current-server-name)) nil nil nil nil nil t))))) (let ((text (buffer-substring @@ -439,21 +474,20 @@ the layout to the selected layout-name." user) (riece-display-message (riece-make-message (riece-current-nickname) user text nil t))) - (let ((next-line-add-newlines t)) - (next-line 1))) + (if (> (forward-line) 0) + (insert "\n"))) (defun riece-command-join-channel (target key) - (let ((process (riece-server-process (riece-identity-server target)))) - (unless process - (error "%s" (substitute-command-keys - "Type \\[riece-command-open-server] to open server."))) - (riece-send-string (if key - (format "JOIN %s :%s\r\n" - (riece-identity-prefix target) - key) - (format "JOIN %s\r\n" - (riece-identity-prefix target))) - target))) + (unless (riece-server-opened (riece-identity-server target)) + (error "%s" (substitute-command-keys + "Type \\[riece-command-open-server] to open server."))) + (riece-send-string (if key + (format "JOIN %s :%s\r\n" + (riece-identity-prefix target) + key) + (format "JOIN %s\r\n" + (riece-identity-prefix target))) + target)) (defun riece-command-join-partner (target) (let ((pointer (riece-identity-member target riece-current-channels))) @@ -470,11 +504,11 @@ the layout to the selected layout-name." (let ((default (riece-format-identity riece-join-channel-candidate))) (riece-completing-read-identity - (format "Join channel/user (default %s): " default) + (format (riece-mcat "Join channel/user (default %s): ") default) (riece-get-identities-on-server (riece-current-server-name)) nil nil nil nil default)) (riece-completing-read-identity - "Join channel/user: " + (riece-mcat "Join channel/user: ") (riece-get-identities-on-server (riece-current-server-name))))))) (let ((pointer (riece-identity-member target riece-current-channels))) (if pointer @@ -484,17 +518,16 @@ the layout to the selected layout-name." (riece-command-join-partner target))))) (defun riece-command-part-channel (target message) - (let ((process (riece-server-process (riece-identity-server target)))) - (unless process - (error "%s" (substitute-command-keys - "Type \\[riece-command-open-server] to open server."))) - (riece-send-string (if message - (format "PART %s :%s\r\n" - (riece-identity-prefix target) - message) - (format "PART %s\r\n" - (riece-identity-prefix target))) - target))) + (unless (riece-server-opened (riece-identity-server target)) + (error "%s" (substitute-command-keys + "Type \\[riece-command-open-server] to open server."))) + (riece-send-string (if message + (format "PART %s :%s\r\n" + (riece-identity-prefix target) + message) + (format "PART %s\r\n" + (riece-identity-prefix target))) + target)) (defun riece-command-part (target &optional message) (interactive @@ -503,13 +536,13 @@ the layout to the selected layout-name." (let* ((completion-ignore-case t) (target (riece-completing-read-identity - (format "Part from channel/user (default %s): " + (format (riece-mcat "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))) (message (if current-prefix-arg - (read-string "Message: ") + (read-string (riece-mcat "Message: ")) riece-part-message))) (list target message)))) (if (riece-identity-member target riece-current-channels) @@ -535,7 +568,7 @@ the layout to the selected layout-name." (let ((other-window-scroll-buffer buffer)) (scroll-other-window-down lines)) (beginning-of-buffer - (message "Beginning of buffer")))))) + (message (riece-mcat "Beginning of buffer"))))))) (defun riece-command-scroll-up (lines) "Scroll LINES up dialogue buffer from command buffer." @@ -549,7 +582,7 @@ the layout to the selected layout-name." (let ((other-window-scroll-buffer buffer)) (scroll-other-window lines)) (end-of-buffer - (message "End of buffer")))))) + (message (riece-mcat "End of buffer"))))))) (defun riece-command-user-list-scroll-down (lines) "Scroll LINES down user list buffer from command buffer." @@ -559,7 +592,7 @@ the layout to the selected layout-name." (let ((other-window-scroll-buffer riece-user-list-buffer)) (scroll-other-window-down lines)) (beginning-of-buffer - (message "Beginning of buffer"))))) + (message (riece-mcat "Beginning of buffer")))))) (defun riece-command-user-list-scroll-up (lines) "Scroll LINES up user list buffer from command buffer." @@ -569,7 +602,7 @@ the layout to the selected layout-name." (let ((other-window-scroll-buffer riece-user-list-buffer)) (scroll-other-window lines)) (end-of-buffer - (message "End of buffer"))))) + (message (riece-mcat "End of buffer")))))) (defun riece-command-toggle-away (&optional message) "Mark yourself as being away." @@ -580,7 +613,8 @@ the layout to the selected layout-name." (riece-current-nickname))))) current-prefix-arg) (list (read-from-minibuffer - "Away message: " (cons (or riece-away-message "") 0))))) + (riece-mcat "Away message: ") (cons (or riece-away-message "") + 0))))) (if (riece-with-server-buffer (riece-identity-server (riece-current-nickname)) (riece-user-get-away (riece-identity-prefix @@ -593,8 +627,7 @@ 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 (eq (derived-mode-class major-mode) - 'riece-dialogue-mode) + (with-current-buffer (if (riece-derived-mode-p 'riece-dialogue-mode) (current-buffer) (if (and riece-channel-buffer-mode riece-channel-buffer) @@ -611,8 +644,7 @@ If prefix argument ARG is non-nil, toggle frozen status." 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 (eq (derived-mode-class major-mode) - 'riece-dialogue-mode) + (with-current-buffer (if (riece-derived-mode-p 'riece-dialogue-mode) (current-buffer) (if (and riece-channel-buffer-mode riece-channel-buffer) @@ -633,12 +665,12 @@ If prefix argument ARG is non-nil, toggle frozen status." (interactive "P") (if (null riece-server-process-alist) (progn - (message "No server process") + (message (riece-mcat "No server process")) (ding)) - (if (y-or-n-p "Really quit IRC? ") + (if (y-or-n-p (riece-mcat "Really quit IRC? ")) (let ((message (if arg - (read-string "Message: ") + (read-string (riece-mcat "Message: ")) riece-quit-message)) (alist riece-server-process-alist)) (while alist @@ -699,7 +731,7 @@ If prefix argument ARG is non-nil, toggle frozen status." (if (eq completion t) nil (if (null completion) - (message "Can't find completion for \"%s\"" current) + (message (riece-mcat "Can't find completion for \"%s\"") current) (if (equal current completion) (with-output-to-temp-buffer "*Help*" (display-completion-list all)) @@ -709,7 +741,7 @@ If prefix argument ARG is non-nil, toggle frozen status." (defun riece-command-open-server (server-name) (interactive - (list (completing-read "Open server: " riece-server-alist))) + (list (completing-read (riece-mcat "Open server: ") riece-server-alist))) (if (riece-server-process server-name) (error "%s is already opened" server-name)) (riece-open-server @@ -718,23 +750,36 @@ If prefix argument ARG is non-nil, toggle frozen status." (defun riece-command-close-server (server-name &optional message) (interactive - (list (completing-read "Close server: " riece-server-process-alist) + (list (completing-read (riece-mcat "Close server: ") + riece-server-process-alist) (if current-prefix-arg - (read-string "Message: ") + (read-string (riece-mcat "Message: ")) riece-quit-message))) - (riece-quit-server-process (riece-server-process server-name) message)) + (let ((process (riece-server-process server-name))) + (unless process + (error "%s is not opened" server-name)) + (riece-quit-server-process process message))) (defun riece-command-universal-server-name-argument () (interactive) (let* ((riece-overriding-server-name - (completing-read "Server: " riece-server-process-alist)) + (completing-read (riece-mcat "Server: ") riece-server-process-alist)) (command (key-binding (read-key-sequence - (format "Command to execute on \"%s\":" + (format (riece-mcat "Command to execute on \"%s\":") riece-overriding-server-name))))) (message "") (call-interactively command))) +(eval-when-compile + (autoload 'riece-save-variables-files "riece")) +(defun riece-command-save-variables () + "Save `riece-variables-file'." + (interactive) + (if (or riece-save-variables-are-dirty + (y-or-n-p (riece-mcat "No changes made. Save anyway? "))) + (riece-save-variables-files))) + (provide 'riece-commands) ;;; riece-commands.el ends here