X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-commands.el;h=84bffe8ef17897944ee7e7e62da1b3c6bbe2c358;hb=80eaae97b095bc44c97c3eb1b74de1aa02d2dedf;hp=76b0e30c8f984c47da37c8aa99095988e4869503;hpb=fd18e4a686ed1ed0b95ddd6ca9292a6e2725fb83;p=elisp%2Friece.git diff --git a/lisp/riece-commands.el b/lisp/riece-commands.el index 76b0e30..84bffe8 100644 --- a/lisp/riece-commands.el +++ b/lisp/riece-commands.el @@ -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: @@ -112,8 +112,23 @@ (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 @@ -148,7 +170,8 @@ the layout to the selected layout-name." (let* ((completion-ignore-case t) (user (riece-completing-read-identity "Finger user: " - (riece-get-users-on-server (riece-current-server-name))))) + (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" @@ -171,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 @@ -179,8 +203,9 @@ the layout to the selected layout-name." (riece-check-channel-commands-are-usable t) (list (riece-completing-read-identity "Invite user: " - (riece-get-users-on-server (riece-current-server-name)))))) - (riece-send-string (format "INVITE %s %s\r\n" + (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)))) @@ -203,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 @@ -254,7 +280,8 @@ the layout to the selected layout-name." (if current-prefix-arg (riece-completing-read-identity "Change mode for channel/user: " - (riece-get-identities-on-server (riece-current-server-name))) + (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)) @@ -272,8 +299,12 @@ the layout to the selected layout-name." (concat (riece-concat-channel-modes channel "Mode (? for help)") ": ") nil riece-minibuffer-map)))) - (riece-send-string (format "MODE %s :%s\r\n" (riece-identity-prefix channel) - change))) + (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-identity-prefix channel) + change)))) (defun riece-command-set-operators (users &optional arg) (interactive @@ -347,6 +378,7 @@ the layout to the selected layout-name." (defun riece-command-send-message (message notice) "Send MESSAGE to the current channel." + (run-hooks 'riece-command-send-message-hook) (if (equal message "") (error "No text to send")) (riece-check-channel-commands-are-usable) @@ -355,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)))) @@ -390,32 +424,35 @@ 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)))))) + (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)) (next-line 1))) (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-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)))))) + (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))) @@ -424,43 +461,38 @@ 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 (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 @@ -473,10 +505,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)) @@ -605,7 +637,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) @@ -616,8 +648,23 @@ If prefix argument ARG is non-nil, toggle frozen status." (interactive "sIRC command: ") (riece-send-string (concat command "\r\n"))) +(defun riece-command-beginning-of-buffer () + "Scroll channel buffer to the beginning." + (interactive) + (let (buffer window) + (setq buffer (if riece-channel-buffer-mode + riece-channel-buffer + riece-dialogue-buffer)) + (or (setq window (get-buffer-window buffer)) + (setq window (get-buffer-window riece-dialogue-buffer) + buffer riece-dialogue-buffer)) + (when window + (save-selected-window + (select-window window) + (goto-char (point-min)))))) + (defun riece-command-end-of-buffer () - "Get end of the dialogue buffer." + "Scroll channel buffer to the end." (interactive) (let (buffer window) (setq buffer (if riece-channel-buffer-mode @@ -644,7 +691,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) @@ -654,9 +701,10 @@ 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)))))) - + (defun riece-command-open-server (server-name) (interactive (list (completing-read "Open server: " riece-server-alist))) @@ -672,7 +720,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) @@ -685,6 +736,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