Store the IMAP greeting, so that we can tell what kind of server we're talking to.
[gnus] / lisp / gnus-ems.el
index ef557c7..9c395db 100644 (file)
@@ -1,7 +1,7 @@
 ;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 (eval-and-compile
   (autoload 'gnus-xmas-define "gnus-xmas")
-  (autoload 'gnus-xmas-redefine "gnus-xmas")
-  (autoload 'gnus-get-buffer-create "gnus")
-  (autoload 'nnheader-find-etc-directory "nnheader"))
+  (autoload 'gnus-xmas-redefine "gnus-xmas"))
 
+(autoload 'gnus-get-buffer-create "gnus")
+(autoload 'nnheader-find-etc-directory "nnheader")
 (autoload 'smiley-region "smiley")
 
 (defun gnus-kill-all-overlays ()
                    (car sbars)
                    (/ (or (car fringes) 0) fcw))
            yoffset (cadr (window-edges))
-           top (max 0 (- (* (max (if (and tool-bar-mode
+           top (max 0 (- (* (max (if (and (boundp 'tool-bar-mode)
+                                          tool-bar-mode
                                           (not (featurep 'gtk))
                                           (eq (frame-first-window)
                                               (selected-window)))
          (setq start end
                end nil))))))
 
+(eval-and-compile
+  (if (fboundp 'set-process-plist)
+      (progn
+       (defalias 'gnus-set-process-plist 'set-process-plist)
+       (defalias 'gnus-process-plist 'process-plist)
+       (defalias 'gnus-process-get 'process-get)
+       (defalias 'gnus-process-put 'process-put))
+    (defun gnus-set-process-plist (process plist)
+      "Replace the plist of PROCESS with PLIST.  Returns PLIST."
+      (put 'gnus-process-plist-internal process plist))
+
+    (defun gnus-process-plist (process)
+      "Return the plist of PROCESS."
+      ;; This form works but can't prevent the plist data from
+      ;; growing infinitely.
+      ;;(get 'gnus-process-plist-internal process)
+      (let* ((plist (symbol-plist 'gnus-process-plist-internal))
+            (tem (memq process plist)))
+       (prog1
+           (cadr tem)
+         ;; Remove it from the plist data.
+         (when tem
+           (if (eq plist tem)
+               (progn
+                 (setcar plist (caddr plist))
+                 (setcdr plist (or (cdddr plist) '(nil))))
+             (setcdr (nthcdr (- (length plist) (length tem) 1) plist)
+                     (cddr tem)))))))
+
+    (defun gnus-process-get (process propname)
+      "Return the value of PROCESS' PROPNAME property.
+This is the last value stored with `(gnus-process-put PROCESS PROPNAME VALUE)'."
+      (plist-get (gnus-process-plist process) propname))
+
+    (defun gnus-process-put (process propname value)
+      "Change PROCESS' PROPNAME property to VALUE.
+It can be retrieved with `(gnus-process-get PROCESS PROPNAME)'."
+      (gnus-set-process-plist process
+                             (plist-put (gnus-process-plist process)
+                                        propname value)))))
+
 (provide 'gnus-ems)
 
-;; arch-tag: e7360b45-14b5-4171-aa39-69a44aed3cdb
 ;;; gnus-ems.el ends here