* liece-handle.el (liece-handle-kill-message): Call
[elisp/liece.git] / lisp / liece.el
index e798957..d9fa3ae 100644 (file)
     "Mapping from keywords to default values.
 All keywords that can be used must be listed here."))
 
     "Mapping from keywords to default values.
 All keywords that can be used must be listed here."))
 
-(defadvice save-buffers-kill-emacs
-  (before liece-save-buffers-kill-emacs activate)
-  "Prompt user to quit IRC explicitly."
-  (run-hooks 'liece-before-kill-emacs-hook) )
-
-(add-hook 'liece-before-kill-emacs-hook 'liece-command-quit)
+(add-hook 'kill-emacs-hook 'liece-command-quit)
 
 (defvar liece-tmp-server-name nil "Temporaly server name.")
 (defvar liece-buffer-last-check-time nil)
 
 (defvar liece-tmp-server-name nil "Temporaly server name.")
 (defvar liece-buffer-last-check-time nil)
@@ -202,7 +197,6 @@ If optional argument SAFE is nil, overwrite previous definitions."
     "/" liece-command-generic
     ">" end-of-buffer
     "<" beginning-of-buffer
     "/" liece-command-generic
     ">" end-of-buffer
     "<" beginning-of-buffer
-    "!" liece-command-exec
     "|" liece-command-show-last-kill
     "a" liece-command-away
     "b" liece-command-submit-bug-report
     "|" liece-command-show-last-kill
     "a" liece-command-away
     "b" liece-command-submit-bug-report
@@ -230,8 +224,6 @@ If optional argument SAFE is nil, overwrite previous definitions."
     "t" liece-command-topic
     "T" liece-command-timestamp
     "\C-t" liece-command-find-timestamp
     "t" liece-command-topic
     "T" liece-command-timestamp
     "\C-t" liece-command-find-timestamp
-    "u" liece-command-lusers
-    "U" liece-command-userhost
     "v" liece-command-browse-url
     "w" liece-command-who)
 
     "v" liece-command-browse-url
     "w" liece-command-who)
 
@@ -266,11 +258,7 @@ If optional argument SAFE is nil, overwrite previous definitions."
     "\r" liece-command-enter-message
     [tab] liece-command-complete
     [(meta control c) >] liece-command-push
     "\r" liece-command-enter-message
     [tab] liece-command-complete
     [(meta control c) >] liece-command-push
-    [(meta control c) <] liece-command-pop
-    [(meta control c) o] liece-command-mode+o
-    [(meta control c) O] liece-command-mode-o
-    [(meta control c) v] liece-command-mode+v
-    [(meta control c) V] liece-command-mode-v)
+    [(meta control c) <] liece-command-pop)
 
   (liece-define-keys (liece-command-map "\C-c" liece-command-mode-map)
     "\177" liece-command-scroll-down
 
   (liece-define-keys (liece-command-map "\C-c" liece-command-mode-map)
     "\177" liece-command-scroll-down
@@ -281,8 +269,6 @@ If optional argument SAFE is nil, overwrite previous definitions."
     ">" liece-command-next-channel
     "<" liece-command-previous-channel
     "a" liece-command-away
     ">" liece-command-next-channel
     "<" liece-command-previous-channel
     "a" liece-command-away
-    "c" liece-command-inline
-    "\C-a" liece-command-previous-channel
     "\C-f" liece-command-freeze
     "\C-j" liece-command-next-channel
     "\C-n" liece-command-names
     "\C-f" liece-command-freeze
     "\C-j" liece-command-next-channel
     "\C-n" liece-command-names
@@ -291,7 +277,7 @@ If optional argument SAFE is nil, overwrite previous definitions."
     "L" liece-command-load-vars
     "M" liece-command-own-freeze
     "\C-m" liece-command-modec
     "L" liece-command-load-vars
     "M" liece-command-own-freeze
     "\C-m" liece-command-modec
-    "o" liece-command-mode+o
+    "o" liece-command-set-operators
     "O" liece-command-toggle-nick-buffer-mode
     "\C-o" liece-command-toggle-channel-buffer-mode
     "\C-p" liece-command-part
     "O" liece-command-toggle-nick-buffer-mode
     "\C-o" liece-command-toggle-channel-buffer-mode
     "\C-p" liece-command-part
@@ -299,16 +285,14 @@ If optional argument SAFE is nil, overwrite previous definitions."
     "\C-r" mule-caesar-region
     "s" liece-command-set-window-style
     "S" liece-command-save-vars
     "\C-r" mule-caesar-region
     "s" liece-command-set-window-style
     "S" liece-command-save-vars
-    "v" liece-command-mode+v
+    "v" liece-command-set-voices
     "\C-v" liece-command-browse-url
     "\C-y" liece-command-yank-send)
   (set-keymap-parent liece-command-map liece-dialogue-mode-map)
 
   (liece-define-keys liece-nick-mode-map
     "\C-v" liece-command-browse-url
     "\C-y" liece-command-yank-send)
   (set-keymap-parent liece-command-map liece-dialogue-mode-map)
 
   (liece-define-keys liece-nick-mode-map
-    "o" liece-command-mode+o
-    "O" liece-command-mode-o
-    "v" liece-command-mode+v
-    "V" liece-command-mode-v
+    "o" liece-command-set-operators
+    "v" liece-command-set-voices
     "f" liece-command-finger
     " " liece-command-nick-scroll-up
     "\177" liece-command-nick-scroll-down
     "f" liece-command-finger
     " " liece-command-nick-scroll-up
     "\177" liece-command-nick-scroll-down
@@ -346,13 +330,13 @@ is running on."
   (unless (listp liece-server)
     (let ((entry (assoc liece-server liece-server-alist)))
       (if entry
   (unless (listp liece-server)
     (let ((entry (assoc liece-server liece-server-alist)))
       (if entry
-         (setq liece-server (cdr entry)))
-      (setq liece-server
-           (let ((plist (liece-server-parse-string liece-server)))
-             (unless entry
-               (set-alist 'liece-server-alist liece-server plist)
-               (setq liece-save-variables-are-dirty t))
-             plist))))
+         (if (listp (cdr entry))
+             (setq liece-server (cdr entry))
+           (setq liece-server (liece-server-parse-string (cdr entry))))
+       (let ((plist (liece-server-parse-string liece-server)))
+         (set-alist 'liece-server-alist liece-server plist)
+         (setq liece-save-variables-are-dirty t)
+         (setq liece-server plist)))))
   (when (or (and confirm liece-ask-for-nickname)
            (null liece-nickname))
     (setq liece-nickname (read-string (_ "Enter your nickname: ") liece-nickname)))
   (when (or (and confirm liece-ask-for-nickname)
            (null liece-nickname))
     (setq liece-nickname (read-string (_ "Enter your nickname: ") liece-nickname)))
@@ -372,7 +356,7 @@ is running on."
        liece-server nil))
 
 ;;;###liece-autoload
        liece-server nil))
 
 ;;;###liece-autoload
-(defun liece-close-server (&optional quit-string)
+(defun liece-close-server ()
   "Close chat server."
   (unwind-protect
       (progn
   "Close chat server."
   (unwind-protect
       (progn
@@ -381,12 +365,17 @@ is running on."
                   (eq 'liece-sentinel
                       (process-sentinel liece-server-process)))
          (set-process-sentinel liece-server-process nil))
                   (eq 'liece-sentinel
                       (process-sentinel liece-server-process)))
          (set-process-sentinel liece-server-process nil))
-       ;; We cannot send QUIT command unless the process is running.
-       (when (liece-server-opened)
-         (if quit-string
-             (liece-send "QUIT :%s" quit-string)
-           (liece-send "QUIT"))))
-    (liece-close-server-internal)))
+       (if (liece-server-opened)
+           (liece-command-quit)))
+    (liece-close-server-internal)
+    ;; Save settings to the `~/.liece/init.el' file.
+    (if liece-save-variables-are-dirty
+       (liece-command-save-vars))
+    ;; Reset everything.
+    (liece-clear-system)
+    (liece-window-configuration-pop)
+    ;; Allow the user to do things after cleaning up.
+    (run-hooks 'liece-exit-hook)))
 
 (defmacro liece-server-keyword-bind (plist &rest body)
   "Return a `let' form that binds all variables in PLIST.
 
 (defmacro liece-server-keyword-bind (plist &rest body)
   "Return a `let' form that binds all variables in PLIST.
@@ -444,7 +433,7 @@ If optional argument SERVICE is non-nil, open by the service name."
     (if (and (memq type '(rlogin telnet)) relay)
        (setq liece-tcp-relay-host relay))
     (setq liece-tmp-server-name host)
     (if (and (memq type '(rlogin telnet)) relay)
        (setq liece-tcp-relay-host relay))
     (setq liece-tmp-server-name host)
-    (liece-open-server-internal host service type)
+    (setq liece-server-process (liece-open-server-internal host service type))
     (setq liece-after-registration nil)
     (liece-maybe-poll)
     (if (null (liece-wait-for-response "^:[^ ]+ [4P][5O][1N][ G]"))
     (setq liece-after-registration nil)
     (liece-maybe-poll)
     (if (null (liece-wait-for-response "^:[^ ]+ [4P][5O][1N][ G]"))
@@ -481,29 +470,20 @@ If optional argument SERVICE is non-nil, open by the service name."
 (defun liece-open-server-internal (host &optional service type)
   "Open connection to chat server on HOST by SERVICE (default is irc).
 Optional argument TYPE specifies connection types such as `program'."
 (defun liece-open-server-internal (host &optional service type)
   "Open connection to chat server on HOST by SERVICE (default is irc).
 Optional argument TYPE specifies connection types such as `program'."
-  ;; canonicalize host representation
-  (unless (string-match "^[^\\[]" host)
-    (setq host (substring host 1 (1- (length host)))))
-  (condition-case error
-      (save-excursion
-       (let ((liece-tcp-connection-type type))
-         (as-binary-process
-          (setq liece-server-process
-                (liece-open-network-stream
-                 "IRC" " *IRC*" host (or service "irc"))))
-         (setq liece-server-buffer (process-buffer liece-server-process))
-         (set-buffer liece-server-buffer)
-         (set-buffer-multibyte nil)
-         (kill-all-local-variables)
-         (buffer-disable-undo)
-         (erase-buffer)
-         (setq liece-server-name host)
-         (run-hooks 'liece-server-hook)
-         ;; return the server process
-         liece-server-process))
-    (error
-     (setq liece-status-message-string (cadr error)
-          liece-server-process nil))))
+  (let ((liece-tcp-connection-type type)
+       process)
+    (as-binary-process
+     (setq process
+          (liece-open-network-stream
+           "IRC" " *IRC*" host (or service "irc"))))
+    (setq liece-server-buffer (process-buffer process))
+    (save-excursion
+      (set-buffer liece-server-buffer)
+      (set-buffer-multibyte nil)
+      (kill-all-local-variables)
+      (buffer-disable-undo)
+      (erase-buffer))
+    process))
 
 (defun liece-initialize-timers ()
   "Initialise internal timers."
 
 (defun liece-initialize-timers ()
   "Initialise internal timers."