From: yamaoka Date: Wed, 28 Feb 2001 11:55:12 +0000 (+0000) Subject: * gnus-clfns.el (subseq, merge, coerce, butlast): New compiler macros. X-Git-Tag: t-gnus-6_15_0-09-quimby~2 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=b145c3b39301b1f134cb15148ba0b438f611d6f2;p=elisp%2Fgnus.git- * gnus-clfns.el (subseq, merge, coerce, butlast): New compiler macros. (mapc): Remove. * nnwfm.el: Require `gnus-clfns' when compiling. * nnshimbun.el: Ditto. * nnfolder.el: Ditto. * mm-util.el: Ditto. * gnus-vers.el: Ditto. * gnus-sum.el: Ditto. * gnus-score.el: Ditto. * gnus-nocem.el: Ditto. * gnus-ofsetup.el: Don't require `gnus-clfns'. (gnus-ofsetup-customize-done): Use `dolist' instead of `mapc'. (gnus-setup-for-offline): Ditto. * gnus-offline.el: Don't use `mapc' for binding some vars; don't require `gnus-clfns'. * gnus-art.el: Use `dolist' instead of `mapcar' for defining `gnus-article-read-summary-keys'. --- diff --git a/ChangeLog b/ChangeLog index f309258..0e4862c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,30 @@ 2001-02-28 Katsumi Yamaoka + * lisp/nnwfm.el: Require `gnus-clfns' when compiling. + * lisp/nnshimbun.el: Ditto. + * lisp/nnfolder.el: Ditto. + * lisp/mm-util.el: Ditto. + * lisp/gnus-vers.el: Ditto. + * lisp/gnus-sum.el: Ditto. + * lisp/gnus-score.el: Ditto. + * lisp/gnus-nocem.el: Ditto. + + * lisp/gnus-ofsetup.el: Don't require `gnus-clfns'. + (gnus-ofsetup-customize-done): Use `dolist' instead of `mapc'. + (gnus-setup-for-offline): Ditto. + + * lisp/gnus-offline.el: Don't use `mapc' for binding some vars; + don't require `gnus-clfns'. + + * lisp/gnus-clfns.el (subseq, merge, coerce, butlast): New compiler + macros. + (mapc): Remove. + + * lisp/gnus-art.el: Use `dolist' instead of `mapcar' for defining + `gnus-article-read-summary-keys'. + +2001-02-28 Katsumi Yamaoka + * lisp/gnus-art.el (gnus-article-mime-edit-article-setup): Leave the forwarded parts undecoded. (gnus-article-decode-article-as-default-mime-charset): Set the diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 6ace398..ce1d773 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -3136,27 +3136,20 @@ If variable `gnus-use-long-file-name' is non-nil, it is "\M-g" gnus-article-read-summary-keys) ;; Define almost undefined keys to `gnus-article-read-summary-keys'. -(mapcar - (lambda (key) - (unless (lookup-key gnus-article-mode-map key) - (define-key gnus-article-mode-map key - 'gnus-article-read-summary-keys))) - (delq nil - (append - (mapcar - (lambda (elt) - (let ((key (car elt))) - (and (> (length key) 0) - (not (eq 'menu-bar (aref key 0))) - (symbolp (lookup-key gnus-summary-mode-map key)) - key))) - (accessible-keymaps gnus-summary-mode-map)) - (let ((c 127) - keys) - (while (>= c 32) - (push (char-to-string c) keys) - (decf c)) - keys)))) +(let (keys) + (let ((key 32)) + (while (<= key 127) + (push (char-to-string key) keys) + (incf key)) + (dolist (elem (accessible-keymaps gnus-summary-mode-map)) + (setq key (car elem)) + (when (and (> (length key) 0) + (not (eq 'menu-bar (aref key 0))) + (symbolp (lookup-key gnus-summary-mode-map key))) + (push key keys)))) + (dolist (key keys) + (unless (lookup-key gnus-article-mode-map key) + (define-key gnus-article-mode-map key 'gnus-article-read-summary-keys)))) (eval-when-compile (defvar gnus-article-commands-menu)) diff --git a/lisp/gnus-clfns.el b/lisp/gnus-clfns.el index 6fed527..e5b2e01 100644 --- a/lisp/gnus-clfns.el +++ b/lisp/gnus-clfns.el @@ -1,5 +1,5 @@ ;;; gnus-clfns.el --- compiler macros for emulating cl functions -;; Copyright (C) 2000 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2001 Free Software Foundation, Inc. ;; Author: Kastsumi Yamaoka ;; Keywords: cl, compile @@ -31,6 +31,47 @@ nil (require 'cl) + (define-compiler-macro butlast (&whole form x &optional n) + (if (and (fboundp 'butlast) + (subrp (symbol-function 'butlast))) + form + (if n + `(let ((x ,x) + (n ,n)) + (if (and n (<= n 0)) + x + (let ((m (length x))) + (or n (setq n 1)) + (and (< n m) + (progn + (if (> n 0) (setcdr (nthcdr (- (1- m) n) x) nil)) + x))))) + `(let* ((x ,x) + (m (length x))) + (and (< 1 m) + (progn + (setcdr (nthcdr (- m 2) x) nil) + x)))))) + + (define-compiler-macro coerce (&whole form x type) + (if (and (fboundp 'coerce) + (subrp (symbol-function 'coerce))) + form + `(let ((x ,x) + (type ,type)) + (cond ((eq type 'list) (if (listp x) x (append x nil))) + ((eq type 'vector) (if (vectorp x) x (vconcat x))) + ((eq type 'string) (if (stringp x) x (concat x))) + ((eq type 'array) (if (arrayp x) x (vconcat x))) + ((and (eq type 'character) (stringp x) (= (length x) 1)) + (aref x 0)) + ((and (eq type 'character) (symbolp x) + (= (length (symbol-name x)) 1)) + (aref (symbol-name x) 0)) + ((eq type 'float) (float x)) + ((typep x type) x) + (t (error "Can't coerce %s to type %s" x type)))))) + (define-compiler-macro last (&whole form x &optional n) (if (and (fboundp 'last) (subrp (symbol-function 'last))) @@ -53,23 +94,73 @@ (pop x)) x)))) - (define-compiler-macro mapc (&whole form fn seq &rest rest) - (if (and (fboundp 'mapc) - (subrp (symbol-function 'mapc))) + (define-compiler-macro merge (&whole form type seq1 seq2 pred &rest keys) + (if (and (fboundp 'merge) + (subrp (symbol-function 'merge))) + form + `(let ((type ,type) + (seq1 ,seq1) + (seq2 ,seq2) + (pred ,pred)) + (or (listp seq1) (setq seq1 (append seq1 nil))) + (or (listp seq2) (setq seq2 (append seq2 nil))) + (let ((res nil)) + (while (and seq1 seq2) + (if (funcall pred (car seq2) (car seq1)) + (push (pop seq2) res) + (push (pop seq1) res))) + (coerce (nconc (nreverse res) seq1 seq2) type))))) + + (define-compiler-macro subseq (&whole form seq start &optional end) + (if (and (fboundp 'subseq) + (subrp (symbol-function 'subseq))) form - (if rest - `(let* ((fn ,fn) - (seq ,seq) - (args (list seq ,@rest)) - (m (apply (function min) (mapcar (function length) args))) - (n 0)) - (while (< n m) - (apply fn (mapcar (function (lambda (arg) (nth n arg))) args)) - (setq n (1+ n))) - seq) - `(let ((seq ,seq)) - (mapcar ,fn seq) - seq)))) + (if end + `(let ((seq ,seq) + (start ,start) + (end ,end)) + (if (stringp seq) + (substring seq start end) + (let (len) + (if (< end 0) + (setq end (+ end (setq len (length seq))))) + (if (< start 0) + (setq start (+ start (or len (setq len (length seq)))))) + (cond ((listp seq) + (if (> start 0) + (setq seq (nthcdr start seq))) + (let ((res nil)) + (while (>= (setq end (1- end)) start) + (push (pop seq) res)) + (nreverse res))) + (t + (let ((res (make-vector (max (- end start) 0) nil)) + (i 0)) + (while (< start end) + (aset res i (aref seq start)) + (setq i (1+ i) + start (1+ start))) + res)))))) + `(let ((seq ,seq) + (start ,start)) + (if (stringp seq) + (substring seq start) + (let (len) + (if (< start 0) + (setq start (+ start (or len (setq len (length seq)))))) + (cond ((listp seq) + (if (> start 0) + (setq seq (nthcdr start seq))) + (copy-sequence seq)) + (t + (let* ((end (or len (length seq))) + (res (make-vector (max (- end start) 0) nil)) + (i 0)) + (while (< start end) + (aset res i (aref seq start)) + (setq i (1+ i) + start (1+ start))) + res))))))))) ) (provide 'gnus-clfns) diff --git a/lisp/gnus-nocem.el b/lisp/gnus-nocem.el index d682451..0ae227c 100644 --- a/lisp/gnus-nocem.el +++ b/lisp/gnus-nocem.el @@ -27,6 +27,7 @@ ;;; Code: (eval-when-compile (require 'cl)) +(eval-when-compile (require 'gnus-clfns)) (require 'gnus) (require 'nnmail) diff --git a/lisp/gnus-offline.el b/lisp/gnus-offline.el index 63e6c74..67edad9 100644 --- a/lisp/gnus-offline.el +++ b/lisp/gnus-offline.el @@ -1,7 +1,7 @@ ;;; gnus-offline.el --- To process mail & news at offline environment. -;;; Copyright (C) 1998 Tatsuya Ichikawa -;;; Yukihiro Ito +;;; Copyright (C) 1998, 2001 Tatsuya Ichikawa +;;; Copyright (C) 1998, 2001 Yukihiro Ito ;;; Author: Tatsuya Ichikawa ;;; Yukihiro Ito ;;; Hidekazu Nakamura @@ -78,7 +78,6 @@ (eval '(run-hooks 'gnus-offline-load-hook)) (eval-when-compile (require 'cl)) -(eval-when-compile (require 'gnus-clfns)) (eval-when-compile (require 'static) @@ -110,17 +109,11 @@ gnus-offline-version-number)) (eval-when-compile - (mapc - (lambda (symbol) - (unless (boundp symbol) - (make-local-variable symbol) - (eval (list 'setq symbol nil)))) - '(nnagent-version - nnspool-version - msspool-news-server - msspool-news-service - miee-popup-menu - gnus-group-toolbar))) + (defvar nnagent-version) + (defvar nnspool-version) + (defvar msspool-news-server) + (defvar msspool-news-service) + (defvar miee-popup-menu)) (if (featurep 'meadow) (define-process-argument-editing "/hang\\.exe\\'" diff --git a/lisp/gnus-ofsetup.el b/lisp/gnus-ofsetup.el index a10a275..15a3eeb 100644 --- a/lisp/gnus-ofsetup.el +++ b/lisp/gnus-ofsetup.el @@ -1,6 +1,6 @@ ;;; gnus-ofsetup.el --- Setup advisor for Offline reading for Mail/News. -;; Copyright (C) 1998 Tatsuya Ichikawa +;; Copyright (C) 1998, 2001 Tatsuya Ichikawa ;; Author: Tatsuya Ichikawa ;; Tsukamoto Tetsuo @@ -34,7 +34,6 @@ ;;; Code: (eval-when-compile (require 'cl)) -(eval-when-compile (require 'gnus-clfns)) (require 'read-passwd) @@ -526,17 +525,13 @@ mail source specifier とか上記のようなキーワードについてもっとよく (format "<%d of %d> %s" j n (gnus-ofsetup-gettext 'setup-21))))) ;; Now set a mail source specifier. - (setq source `(,type)) - (mapc - #'(lambda (sym) - (when (symbol-value sym) - (setq source - (nconc source - (list - (make-symbol - (format ":%s" sym)) - (symbol-value sym)))))) - '(path user server authentication stream program)) + (setq source (list type)) + (let (value) + (dolist (symbol '(path user server authentication stream program)) + (when (setq value (symbol-value symbol)) + (setq source (nconc source + (list (make-symbol (format ":%s" symbol)) + value)))))) (setq mail-source (nconc mail-source (list source)))) (setq i (1- i))) (setq save-passwd @@ -715,24 +710,23 @@ mail source specifier とか上記のようなキーワードについてもっとよく t))) (if (null params) (gnus-message 4 (gnus-ofsetup-gettext 'customize-done-1)) - (mapc #'(lambda (el) - (let ((sym (car el)) - (val (cdr el))) - (set sym val) - (cond ((eq sym 'news-method) - (if (eq val 'nnspool) - (setq use-miee t))) - ((eq sym 'drafts-queue-type) - (setq use-miee - (if (eq val 'miee) t nil))) - ((eq sym 'save-passwd) - (if val - (add-to-list 'gnus-variable-list - 'mail-source-password-cache) - (setq gnus-variable-list - (delq 'mail-source-password-cache - gnus-variable-list))))))) - params) + (let (symbol value) + (dolist (elem params) + (setq symbol (car elem) + value (cdr elem)) + (set symbol value) + (cond ((eq symbol 'news-method) + (if (eq value 'nnspool) + (setq use-miee t))) + ((eq symbol 'drafts-queue-type) + (setq use-miee (eq value 'miee))) + ((eq symbol 'save-passwd) + (if value + (add-to-list 'gnus-variable-list + 'mail-source-password-cache) + (setq gnus-variable-list + (delq 'mail-source-password-cache + gnus-variable-list))))))) (if (and (eq news-method 'nnspool) (not (eq drafts-queue-type 'miee))) (error (gnus-ofsetup-gettext 'customize-done-2))) diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index cc173c3..7f9771e 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -28,6 +28,7 @@ ;;; Code: (eval-when-compile (require 'cl)) +(eval-when-compile (require 'gnus-clfns)) (require 'gnus) (require 'gnus-sum) diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index a695d4a..d4927e1 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -29,6 +29,7 @@ ;;; Code: (eval-when-compile (require 'cl)) +(eval-when-compile (require 'gnus-clfns)) (require 'gnus) (require 'gnus-group) diff --git a/lisp/gnus-vers.el b/lisp/gnus-vers.el index 2595f54..22cc977 100644 --- a/lisp/gnus-vers.el +++ b/lisp/gnus-vers.el @@ -27,6 +27,9 @@ ;;; Code: +(eval-when-compile (require 'cl)) +(eval-when-compile (require 'gnus-clfns)) + (require 'poe) (require 'product) (provide 'gnus-vers) diff --git a/lisp/mm-util.el b/lisp/mm-util.el index 2ca0fcd..38a3ba8 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -24,9 +24,10 @@ ;;; Code: +(eval-when-compile (require 'cl)) +(eval-when-compile (require 'gnus-clfns)) (eval-when-compile (require 'static)) -(eval-when-compile (require 'cl)) (require 'mail-prsvr) (defvar mm-mime-mule-charset-alist diff --git a/lisp/nnfolder.el b/lisp/nnfolder.el index 4329617..db79bae 100644 --- a/lisp/nnfolder.el +++ b/lisp/nnfolder.el @@ -29,11 +29,13 @@ ;;; Code: +(eval-when-compile (require 'cl)) +(eval-when-compile (require 'gnus-clfns)) + (require 'nnheader) (require 'message) (require 'nnmail) (require 'nnoo) -(eval-when-compile (require 'cl)) (require 'gnus-util) (require 'gnus-range) diff --git a/lisp/nnshimbun.el b/lisp/nnshimbun.el index b58d3f0..dfb6939 100644 --- a/lisp/nnshimbun.el +++ b/lisp/nnshimbun.el @@ -33,6 +33,7 @@ (gnus-declare-backend "nnshimbun" 'address) (eval-when-compile (require 'cl)) +(eval-when-compile (require 'gnus-clfns)) (eval-when-compile (require 'static)) (require 'nnheader) diff --git a/lisp/nnwfm.el b/lisp/nnwfm.el index 130c689..99eb421 100644 --- a/lisp/nnwfm.el +++ b/lisp/nnwfm.el @@ -29,6 +29,7 @@ ;;; Code: (eval-when-compile (require 'cl)) +(eval-when-compile (require 'gnus-clfns)) (require 'nnoo) (require 'message)