Mercurial > emacs
changeset 110157:969b41083104
gnus-ems.el: Make process-plist functions work.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Fri, 03 Sep 2010 01:00:10 +0000 |
parents | a2439ed30c52 |
children | 64b3982570b5 aff5a41a067d |
files | lisp/gnus/ChangeLog lisp/gnus/gnus-ems.el |
diffstat | 2 files changed, 25 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog Fri Sep 03 00:55:58 2010 +0000 +++ b/lisp/gnus/ChangeLog Fri Sep 03 01:00:10 2010 +0000 @@ -1,3 +1,9 @@ +2010-09-03 Katsumi Yamaoka <yamaoka@jpl.org> + + * gnus-ems.el (gnus-set-process-plist, gnus-process-plist): Change name + of symbol that holds plist data. + (gnus-process-plist): Remove plist of process after getting it. + 2010-09-02 Lars Magne Ingebrigtsen <larsi@gnus.org> * message.el (message-generate-hashcash): Change default to
--- a/lisp/gnus/gnus-ems.el Fri Sep 03 00:55:58 2010 +0000 +++ b/lisp/gnus/gnus-ems.el Fri Sep 03 01:00:10 2010 +0000 @@ -314,24 +314,31 @@ (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 process plist)) + (put 'gnus-process-plist-internal process plist)) + (defun gnus-process-plist (process) "Return the plist of PROCESS." - ;; Remove those of dead processes from `gnus-process-plist' - ;; to prevent it from growing. - (let ((plist (symbol-plist 'gnus-process-plist)) - proc) - (while (setq proc (car plist)) - (if (and (processp proc) - (memq (process-status proc) '(open run))) - (setq plist (cddr plist)) - (setcar plist (caddr plist)) - (setcdr plist (or (cdddr plist) '(nil)))))) - (get 'gnus-process-plist 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)'."