X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-server.el;h=4164488cc010cb99bddaa192e933af15deb05f2d;hp=0182813161361bada1f60fbd2b8593d3e89e68c4;hb=cc93ede6798603a9dd66468a5522c47f0ba809ad;hpb=b3b111c08ece2cc499656fcb321bf25ad52f3d0d diff --git a/lisp/riece-server.el b/lisp/riece-server.el index 0182813..4164488 100644 --- a/lisp/riece-server.el +++ b/lisp/riece-server.el @@ -93,7 +93,7 @@ the `riece-server-keyword-map' variable." (format "IRC<%s>" server-name))) (defun riece-server-process (server-name) - (get-process (riece-server-process-name server-name))) + (cdr (assoc server-name riece-server-process-alist))) (defmacro riece-with-server-buffer (server-name &rest body) `(let ((process (riece-server-process ,server-name))) @@ -108,16 +108,18 @@ the `riece-server-keyword-map' variable." (with-current-buffer (process-buffer process) (process-send-string process (riece-encode-coding-string string)))) -(defun riece-send-string (string) - (let* ((server-name - (or riece-overriding-server-name +(defun riece-current-server-name () + (or riece-overriding-server-name ;already in the server buffer - (if (local-variable-p 'riece-server-name (current-buffer)) - riece-server-name - (if riece-current-channel - (riece-identity-server riece-current-channel) - (if (riece-server-opened "") - ""))))) + (if (local-variable-p 'riece-server-name (current-buffer)) + riece-server-name + (if riece-current-channel + (riece-identity-server riece-current-channel) + (if (riece-server-opened "") + ""))))) + +(defun riece-send-string (string) + (let* ((server-name (riece-current-server-name)) (process (riece-server-process server-name))) (unless process (error "%s" (substitute-command-keys @@ -150,7 +152,10 @@ the `riece-server-keyword-map' variable." (message "Logging in to %s..." server-name)) (if riece-reconnect-with-password ;password incorrect or not set. (unwind-protect - (setq password (riece-read-passwd "Password: ")) + ;; XEmacs signals an error when the keyboard cannot be grabbed. + (condition-case nil + (setq password (riece-read-passwd "Password: ")) + (error)) (setq riece-reconnect-with-password nil))) (if password (riece-process-send-string process @@ -165,8 +170,9 @@ the `riece-server-keyword-map' variable." (setq riece-last-nickname riece-real-nickname riece-nick-accepted 'sent riece-coding-system coding)) - (setq riece-process-list - (cons process riece-process-list))))) + (setq riece-server-process-alist + (cons (cons server-name process) + riece-server-process-alist))))) (defun riece-reset-process-buffer (process) (save-excursion @@ -197,22 +203,37 @@ the `riece-server-keyword-map' variable." (if riece-debug (delete-process process) (kill-buffer (process-buffer process))) - (setq riece-process-list (delq process riece-process-list))) + (setq riece-server-process-alist + (delq (rassq process riece-server-process-alist) + riece-server-process-alist))) -(defun riece-server-opened (&optional server-name) - (let ((process-list riece-process-list)) - (catch 'found - (while process-list - (if (memq (process-status (car process-list)) '(open run)) - (throw 'found t)) - (setq process-list (cdr process-list)))))) +(defun riece-server-process-opened (process) + (not (null (memq (process-status process) '(open run))))) +(defun riece-server-opened (&optional server-name) + (if server-name + (let ((process (riece-server-process server-name))) + (and process + (riece-server-process-opened process))) + (let ((alist riece-server-process-alist)) + (catch 'found + (while alist + (if (riece-server-process-opened (cdr (car alist))) + (throw 'found t)) + (setq alist (cdr alist))))))) + +(eval-when-compile + (autoload 'riece-exit "riece")) (defun riece-quit-server-process (process &optional message) - (run-at-time riece-quit-timeout nil - (lambda (process) - (if (memq process riece-process-list) - (kill-process (process-buffer process)))) - process) + (if riece-quit-timeout + (riece-run-at-time riece-quit-timeout nil + (lambda (process) + (when (rassq process riece-server-process-alist) + (riece-close-server-process process) + ;; If no server process is available, exit. + (unless riece-server-process-alist + (riece-exit)))) + process)) (riece-process-send-string process (if message (format "QUIT :%s\r\n" message)