* riece-commands.el (riece-command-close-server): Cause error
[riece] / lisp / riece-commands.el
index 9348028..9aaec0b 100644 (file)
@@ -19,8 +19,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Code:
 
 
 (defun riece-command-configure-windows ()
   (interactive)
+  "Reconfigure windows with the current layout."
   (riece-redisplay-buffers t))
 
+(defun riece-command-suspend-resume ()
+  (interactive)
+  "Save or restore the current window configuration."
+  (let ((entry (assq 'riece-window-configuration (frame-parameters))))
+    (modify-frame-parameters (selected-frame)
+                            (list (cons 'riece-window-configuration
+                                        (current-window-configuration))))
+    (if (cdr entry)
+       (set-window-configuration (cdr entry))
+      (delete-other-windows))
+    (message
+     (substitute-command-keys
+      "\\[riece-command-suspend-resume] to get back the last windows"))))
+
 (defun riece-command-change-layout (name)
   "Select a layout-name from all current available layouts and change
 the layout to the selected layout-name."
@@ -129,6 +144,13 @@ the layout to the selected layout-name."
        riece-save-variables-are-dirty t)
   (riece-command-configure-windows))
 
+(defun riece-command-toggle-others-buffer-mode ()
+  (interactive)
+  (setq riece-others-buffer-mode
+       (not riece-others-buffer-mode)
+       riece-save-variables-are-dirty t)
+  (riece-command-configure-windows))
+
 (defun riece-command-toggle-user-list-buffer-mode ()
   (interactive)
   (setq riece-user-list-buffer-mode
@@ -172,7 +194,8 @@ the layout to the selected layout-name."
                                0)))))
   (riece-send-string (format "TOPIC %s :%s\r\n"
                             (riece-identity-prefix riece-current-channel)
-                            topic)))
+                            topic)
+                    riece-current-channel))
 
 (defun riece-command-invite (user)
   (interactive
@@ -182,7 +205,7 @@ the layout to the selected layout-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-send-string (format "INVITE %s :%s\r\n"
                             (riece-identity-prefix user)
                             (riece-identity-prefix riece-current-channel))))
 
@@ -205,7 +228,8 @@ the layout to the selected layout-name."
               user message)
      (format "KICK %s %s\r\n"
             (riece-identity-prefix riece-current-channel)
-            user))))
+            user))
+   riece-current-channel))
 
 (defun riece-command-names (pattern)
   (interactive
@@ -278,7 +302,7 @@ the layout to the selected layout-name."
   (if (equal change "")
       (riece-send-string (format "MODE %s\r\n"
                                 (riece-identity-prefix channel)))
-    (riece-send-string (format "MODE %s :%s\r\n"
+    (riece-send-string (format "MODE %s %s\r\n"
                               (riece-identity-prefix channel)
                               change))))
 
@@ -363,14 +387,16 @@ the layout to the selected layout-name."
        (riece-send-string
         (format "NOTICE %s :%s\r\n"
                 (riece-identity-prefix riece-current-channel)
-                message))
+                message)
+        riece-current-channel)
        (riece-display-message
         (riece-make-message (riece-current-nickname) riece-current-channel
                             message 'notice t)))
     (riece-send-string
      (format "PRIVMSG %s :%s\r\n"
             (riece-identity-prefix riece-current-channel)
-            message))
+            message)
+     riece-current-channel)
     (riece-display-message
      (riece-make-message (riece-current-nickname) riece-current-channel
                         message nil t))))
@@ -398,16 +424,19 @@ the layout to the selected layout-name."
 (defun riece-command-enter-message-to-user (user)
   "Send the current line to USER."
   (interactive
-   (let ((completion-ignore-case t))
-     (list (riece-completing-read-identity
-           "Message to user: "
-           (riece-get-users-on-server (riece-current-server-name))
-           nil nil nil nil nil t))))
+   (if (and (bolp) (eolp))
+       (error "No text to send")
+     (let ((completion-ignore-case t))
+       (list (riece-completing-read-identity
+             "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))))
     (riece-send-string
-     (format "PRIVMSG %s :%s\r\n" (riece-identity-prefix user) text))
+     (format "PRIVMSG %s :%s\r\n" (riece-identity-prefix user) text)
+     user)
     (riece-display-message
      (riece-make-message (riece-current-nickname) user text nil t)))
   (let ((next-line-add-newlines t))
@@ -418,13 +447,13 @@ the layout to the selected layout-name."
     (unless process
       (error "%s" (substitute-command-keys
                   "Type \\[riece-command-open-server] to open server.")))
-    (riece-process-send-string process
-                              (if key
-                                  (format "JOIN %s :%s\r\n"
-                                          (riece-identity-prefix target)
-                                          key)
-                                (format "JOIN %s\r\n"
-                                        (riece-identity-prefix target))))))
+    (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)))
@@ -433,43 +462,39 @@ the layout to the selected layout-name."
       (riece-join-channel target)
       (riece-switch-to-channel target))))
 
-(defun riece-command-join (target &optional key)
+(defun riece-command-join (target)
   (interactive
-   (let* ((completion-ignore-case t)
-         (target
-          (if riece-join-channel-candidate
-              (let ((default (riece-format-identity
-                              riece-join-channel-candidate)))
-                (riece-completing-read-identity
-                 (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
-             "Join channel/user: "
-             (riece-get-identities-on-server (riece-current-server-name)))))
-         key)
-     (if (and current-prefix-arg
-             (riece-channel-p (riece-identity-prefix target)))
-        (setq key
-              (riece-read-passwd (format "Key for %s: "
-                                         (riece-format-identity target)))))
-     (list target key)))
+   (let ((completion-ignore-case t))
+     (list
+      (if riece-join-channel-candidate
+         (let ((default (riece-format-identity
+                         riece-join-channel-candidate)))
+           (riece-completing-read-identity
+            (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
+        "Join channel/user: "
+        (riece-get-identities-on-server (riece-current-server-name)))))))
   (let ((pointer (riece-identity-member target riece-current-channels)))
     (if pointer
        (riece-command-switch-to-channel (car pointer))
       (if (riece-channel-p (riece-identity-prefix target))
-         (riece-command-join-channel target key)
+         (riece-command-join-channel target nil)
        (riece-command-join-partner target)))))
 
 (defun riece-command-part-channel (target message)
   (let ((process (riece-server-process (riece-identity-server target))))
-    (riece-process-send-string process
-                              (if message
-                                  (format "PART %s :%s\r\n"
-                                          (riece-identity-prefix target)
-                                          message)
-                                (format "PART %s\r\n"
-                                        (riece-identity-prefix 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)))
 
 (defun riece-command-part (target &optional message)
   (interactive
@@ -482,10 +507,10 @@ the layout to the selected layout-name."
                      (riece-format-identity riece-current-channel))
              riece-current-channels nil nil nil nil
              (riece-format-identity riece-current-channel)))
-           message)
-       (if (and current-prefix-arg
-               (riece-channel-p (riece-identity-prefix target)))
-          (setq message (read-string "Message: ")))
+           (message
+            (if current-prefix-arg
+                (read-string "Message: ")
+              riece-part-message)))
        (list target message))))
   (if (riece-identity-member target riece-current-channels)
       (if (riece-channel-p (riece-identity-prefix target))
@@ -614,7 +639,7 @@ If prefix argument ARG is non-nil, toggle frozen status."
        (let ((message
               (if arg
                   (read-string "Message: ")
-              riece-quit-message))
+                riece-quit-message))
              (alist riece-server-process-alist))
          (while alist
            (riece-quit-server-process (cdr (car alist)) message)
@@ -668,7 +693,7 @@ If prefix argument ARG is non-nil, toggle frozen status."
                          (list (riece-format-identity user t)))
                        (riece-get-users-on-server
                         (riece-current-server-name))))
-        (current (current-word))
+        (current (or (current-word) ""))
         (completion (try-completion current table))
         (all (all-completions current table)))
     (if (eq completion t)
@@ -678,6 +703,7 @@ If prefix argument ARG is non-nil, toggle frozen status."
        (if (equal current completion)
            (with-output-to-temp-buffer "*Help*"
              (display-completion-list all))
+         (re-search-forward "\\>" nil t)
          (delete-region (point) (- (point) (length current)))
          (insert completion))))))
 
@@ -696,7 +722,10 @@ If prefix argument ARG is non-nil, toggle frozen status."
         (if current-prefix-arg
             (read-string "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)
@@ -709,6 +738,15 @@ If prefix argument ARG is non-nil, toggle frozen status."
     (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 "No changes made.  Save anyway? "))
+      (riece-save-variables-files)))
+
 (provide 'riece-commands)
 
 ;;; riece-commands.el ends here