Sync up with main trunk and following.
authorteranisi <teranisi>
Sat, 12 Jul 2003 13:43:27 +0000 (13:43 +0000)
committerteranisi <teranisi>
Sat, 12 Jul 2003 13:43:27 +0000 (13:43 +0000)
* elmo-multi.el (elmo-folder-process-crosspost): Follow the change in API.
* elmo-nntp.el (elmo-folder-process-crosspost): Ditto.

* elmo.el (elmo-folder-process-crosspost): Remove optional argument.
(elmo-folder-list-message-entities): Added argument in-msgdb and numbers.
(elmo-folder-synchronize): Define as a method.

37 files changed:
ChangeLog
INSTALL
INSTALL.ja
NEWS
NEWS.ja
WL-CFG
WL-MK
doc/texinfo.tex
doc/wl-ja.texi
doc/wl.texi
elmo/ChangeLog
elmo/acap.el
elmo/elmo-imap4.el
elmo/elmo-msgdb.el
elmo/elmo-multi.el
elmo/elmo-nntp.el
elmo/elmo-pipe.el
elmo/elmo-shimbun.el
elmo/elmo-split.el
elmo/elmo-util.el
elmo/elmo.el
elmo/pldap.el
samples/en/dot.wl
samples/ja/dot.wl
utils/ChangeLog
utils/ptexinfmt.el
wl/ChangeLog
wl/wl-draft.el
wl/wl-expire.el
wl/wl-folder.el
wl/wl-highlight.el
wl/wl-message.el
wl/wl-mime.el
wl/wl-news.el.in
wl/wl-summary.el
wl/wl-util.el
wl/wl-vars.el

index 0dd38cd..bc75d74 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2003-06-05  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * WL-MK: Remove comment out code.  Fix indent.
+
+2003-04-08  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * WL-MK: Nil for wl-info-lang means do nothing on info.
+
 2003-02-05  Yoichi NAKAYAMA  <yoichi@eken.phys.nagoya-u.ac.jp>
 
        * WL-MK (make-wl-news): Replace "^(" by "\\\\(" to avoid font-lock
diff --git a/INSTALL b/INSTALL
index d19d9eb..41bd6af 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -34,24 +34,24 @@ Select MIME Module
 
   (a) XEmacs 21.1 or later
 
-       APEL 10.4, FLIM 1.14.5, SEMI 1.14.5
+       APEL 10.5, FLIM 1.14.5, SEMI 1.14.5
 
     Installation as a XEmacs package, If possible.
 
   (b) Emacs 20.4 or later
 
-       APEL 10.4, FLIM 1.14.5, SEMI 1.14.5
+       APEL 10.5, FLIM 1.14.5, SEMI 1.14.5
 
  (c) Emacs 20.1 to 20.3
 
-       APEL 10.4, CLIME 1.14.5, SEMI 1.14.5
+       APEL 10.5, CLIME 1.14.5, SEMI 1.14.5
 
     Use CLIME instead of FLIM.  FLIM does not support Emacs 20.3 or
     earlier.
 
   (d) Emacs 19.34 (Mule 2.3)
 
-       APEL 10.4, CLIME 1.14.5, SEMI 1.14.5
+       APEL 10.5, CLIME 1.14.5, SEMI 1.14.5
 
     Mule based on Emacs 19.34 can also run SEMI.  See the following web
     page to get more information (in Japanese).
@@ -77,21 +77,31 @@ Install MIME Module
   latest versions should work.  For example, the following combinations
   are confirmed to work:
 
-       APEL 10.4, SLIM 1.14.9, SEMI 1.14.5
-       APEL 10.4, CLIME 1.14.5, EMIKO 1.14.1
+       APEL 10.5, SLIM 1.14.9, SEMI 1.14.5
+       APEL 10.5, CLIME 1.14.5, EMIKO 1.14.1
 
   You have to re-install Wanderlust if you upgraded APEL, FLIM, or SEMI.
 
-  Do following, running environment test included APEL, FLIM, and SEMI
-  version check.  You can specify the emacs command name.
+
+Check Environment
+=================
+
+  Before going to the next step, we recommend you to run tests by
 
        % make check
+  or
        % make EMACS=xemacs check
 
+  to check running environment including the version of APEL, FLIM, and
+  SEMI.  Note that even if you have installed new APEL/FLIM/SEMI, old
+  ones in load-path may cause trouble.  To find duplicated files in the
+  load-path, M-x list-load-path-shadows will help you.
+
+
 Installation
 ============
 
-(a) Edit Makefile
+(a) Edit Makefile, WL-CFG
 
   Edit EMACS, LISPDIR, and so on in Makefile.
 
@@ -101,6 +111,8 @@ Installation
   If LISPDIR is not specified (or NONE by default), it is automatically
   detected.
 
+  Edit WL-CFG if you need. You can specify language for INFO, etc.
+
 (b) Bytecompile and Install
 
   Please do following.
@@ -125,7 +137,7 @@ Install as a XEmacs package
   packages.  After installation as a XEmacs package, you do not need
   configurations of autoload, icon path in your own .emacs file.
 
-(a) Edit Makefile
+(a) Edit Makefile, WL-CFG
 
   Edit XEMACS, PACKAGEDIR, and so on in Makefile.
 
@@ -135,6 +147,8 @@ Install as a XEmacs package
   If PACKAGEDIR is not specified (NONE by default) and the SEMI
   modules have been installed, it is automatically detected.
 
+  Edit WL-CFG if you need. You can specify language for INFO, etc.
+
 (b) Bytecompile and Install
 
   Please do following.
index 39fb62e..0369389 100644 (file)
@@ -33,23 +33,23 @@ MIME\e$BMQ%b%8%e!<%k$NA*Br\e(B
 
   (a) XEmacs 21.1 \e$B0J9_\e(B
 
-       APEL 10.4, FLIM 1.14.5, SEMI 1.14.5
+       APEL 10.5, FLIM 1.14.5, SEMI 1.14.5
 
     \e$B2DG=$J$i$P\e(B XEmacs \e$B$N%Q%C%1!<%8$H$7$F%$%s%9%H!<%k$9$k$3$H$r$*4+$a$7$^$9!#\e(B
 
   (b) Emacs 20.4 \e$B0J9_\e(B
 
-       APEL 10.4, FLIM 1.14.5, SEMI 1.14.5
+       APEL 10.5, FLIM 1.14.5, SEMI 1.14.5
 
   (c) Emacs 20.1\e$B!A\e(B20.3
 
-       APEL 10.4, CLIME 1.14.5, SEMI 1.14.5
+       APEL 10.5, CLIME 1.14.5, SEMI 1.14.5
 
     FLIM \e$B$,F0$-$^$;$s$N$G!"Be$o$j$K\e(B CLIME \e$B$r%$%s%9%H!<%k$7$F$/$@$5$$!#\e(B
 
   (d) Emacs 19.34 (Mule 2.3)
 
-       APEL 10.4, CLIME 1.14.5, SEMI 1.14.5
+       APEL 10.5, CLIME 1.14.5, SEMI 1.14.5
 
     Emacs 19.34 \e$B%Y!<%9$N\e(B Mule \e$B$G$O\e(B SEMI \e$B$rF0:n$5$;$k$3$H$,2DG=$G$9!#2<5-\e(B
     \e$B$N%Z!<%8$,;29M$K$J$j$^$9!#\e(B
@@ -79,23 +79,33 @@ MIME\e$BMQ%b%8%e!<%k$N%$%s%9%H!<%k\e(B
 
   \e$BNc$($P!"0J2<$NAH9g$;$NF0:n$,3NG'$5$l$F$$$^$9!#\e(B
 
-       APEL 10.4, SLIM 1.14.9, SEMI 1.14.5
-       APEL 10.4, CLIME 1.14.5, EMIKO 1.14.1
+       APEL 10.5, SLIM 1.14.9, SEMI 1.14.5
+       APEL 10.5, CLIME 1.14.5, EMIKO 1.14.1
 
   APEL, FLIM, SEMI \e$B$N%P!<%8%g%s%"%C%W$r9T$C$?>l9g$O!"\e(BWanderlust \e$B$r%$%s%9\e(B
   \e$B%H!<%k$7D>$7$F$/$@$5$$!#\e(B
 
-  \e$B0J2<$r<B9T$9$k$3$H$K$h$j!"\e(BAPEL, FLIM, SEMI \e$B$N%A%'%C%/$r4^$s$@4D6-%F%9\e(B
-  \e$B%H$,9T$($^$9!#\e(BEMACS \e$B$G\e(B emacs \e$B$N%3%^%s%IL>$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B4D6-$N3NG'\e(B
+==========
+
+  Wanderlust \e$B$N%$%s%9%H!<%k$NA0$K4D6-$N3NG'$r$9$k$3$H$r?d>)$7$^$9!#\e(B
 
        % make check
+  \e$B$^$?$O\e(B
        % make EMACS=xemacs check
 
+  \e$B$G\e(B APEL, FLIM, SEMI \e$B$N%A%'%C%/$r4^$s$@4D6-%F%9%H$,9T$($^$9!#\e(B
+
+  \e$B?7$7$$\e(B APEL, FLIM, SEMI \e$B$,%$%s%9%H!<%k$5$l$F$$$F$b!"\e(Bload-path \e$B>e$K8E$$\e(B
+  \e$B$b$N$,;D$C$F$$$k>l9g$K$O%H%i%V%k$N860x$H$J$j$^$9!#\e(Bload-path \e$B>e$G=EJ#$7\e(B
+  \e$B$?%U%!%$%k$rC5$9$K$O\e(B M-x list-load-path-shadows \e$B$,JXMx$G$9!#\e(B
+
 
 \e$BDL>o$N%$%s%9%H!<%k\e(B
 ==================
 
-(a)Makefile \e$B$NJT=8\e(B
+(a)Makefile, WL-CFG \e$B$NJT=8\e(B
 
   Makefile \e$B$O!"\e(BEMACS, LISPDIR \e$B$NItJ,$rJT=8$7$F$/$@$5$$!#\e(B
 
@@ -105,6 +115,8 @@ MIME\e$BMQ%b%8%e!<%k$N%$%s%9%H!<%k\e(B
   LISPDIR \e$B$OFC$K;XDj$7$J$/$F$b\e(B (NONE \e$B$N$^$^$G$b\e(B) \e$B<+F0E*$K%$%s%9%H!<%k\e(B
   \e$B@h$r8!=P$7$^$9!#\e(B
 
+  \e$BI,MW$J$i\e(B WL-CFG \e$B$rJT=8$7$F$/$@$5$$!#\e(B INFO \e$B$N8@8l$N;XDj$J$I$,$G$-$^$9!#\e(B
+
 (b)\e$B%P%$%H%3%s%Q%$%k!&%$%s%9%H!<%k\e(B
 
   \e$B0J2<$r<B9T$7$F$/$@$5$$!#\e(B
@@ -131,7 +143,7 @@ XEmacs \e$B$N%Q%C%1!<%8$H$7$F%$%s%9%H!<%k\e(B
   \e$B$N@_Dj!"%"%$%3%s$N%Q%9@_Dj$r8D?M$N\e(B .emacs \e$B$K5-=R$7$J$/$F$b\e(B 
   Wanderlust \e$B$r@5>o$K5/F0$G$-$k$h$&$K$J$j$^$9!#\e(B
 
-(a)Makefile \e$B$NJT=8\e(B
+(a)Makefile, WL-CFG \e$B$NJT=8\e(B
 
   Makefile \e$B$O!"\e(BXEMACS, PACKAGEDIR \e$B$NItJ,$rJT=8$7$F$/$@$5$$!#\e(B
 
@@ -141,6 +153,7 @@ XEmacs \e$B$N%Q%C%1!<%8$H$7$F%$%s%9%H!<%k\e(B
   PACKAGEDIR \e$B$OFC$K;XDj$7$J$/$F$b\e(B (NONE \e$B$N$^$^$G$b\e(B)\e$B!"\e(BSEMI \e$B$,%$%s%9%H!<\e(B
   \e$B%k$5$l$F$$$l$P<+F0E*$K8!=P$5$l$^$9!#\e(B
 
+  \e$BI,MW$J$i\e(B WL-CFG \e$B$rJT=8$7$F$/$@$5$$!#\e(B INFO \e$B$N8@8l$N;XDj$J$I$,$G$-$^$9!#\e(B
 
 (b)\e$B%P%$%H%3%s%Q%$%k!&%$%s%9%H!<%k\e(B
 
diff --git a/NEWS b/NEWS
index 0222792..22d1339 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,9 @@
 Wanderlust NEWS -- User-visible changes in Wanderlust.
 
+** Default value of wl-folder-hierarchy-access-folders has been changed.
+
+** Access group "@/" of shimbun folders can be used now.
+
 ** Show contents of NEWS(.ja) when you start Wanderlust newer than the
    one you used previously.
 
@@ -16,6 +20,37 @@ Wanderlust NEWS -- User-visible changes in Wanderlust.
 ** Commands to verify/decrypt non-MIME PGP message are added.
    C-c:v, C-c:d in message buffer to verify or decrypt respectively.
 
+* Changes in 2.10.1 from 2.10.0
+  Version 2.10.1 is a bug fix version of 2.10.0.
+
+** Fixed the problem that msgdb be destroyed when print-length or
+   print-level has Non-nil value.
+
+** wl-summary-pack-number in pipe folder is disabled temporarily
+   since it didn't work. Invoke it in destination folder instead.
+
+** Fixed a problem that wl-folder-move-cur-folder doesn't work.
+
+** Fixed a problem that wl-draft-reedit doesn't work properly on Meadow.
+
+** Fixed a problem that wl-summary-pack-number doesn't work on Maildir and
+   shimbun folders.
+
+** Fixed a problem that cache file is not protected even if it is marked
+   as important.
+
+** Fixed a problem that %# in wl-summary-line-format cannot handle large
+   number.
+
+** Fixed a problem to remove password even if SMTP AUTH failed at non-auth
+   phase.
+
+** Default value of wl-message-buffer-prefetch-folder-type-list,
+   wl-message-buffer-prefetch-idle-time, and
+   wl-message-buffer-prefetch-depth are changed.
+
+** Fixed to compile on XEmacs without mule feature.
+
 * Changes in 2.10.0 from 2.8.1
 
 ** You can alter the format of summary lines.
diff --git a/NEWS.ja b/NEWS.ja
index 9eccb66..8224383 100644 (file)
--- a/NEWS.ja
+++ b/NEWS.ja
@@ -1,5 +1,9 @@
 Wanderlust NEWS (\e$BF|K\8lHG\e(B) -- User-visible changes in Wanderlust.
 
+** wl-folder-hierarchy-access-folders \e$B$N=i4|CM$,JQ99$5$l$^$7$?!#\e(B
+
+** \e$B?7J9%U%)%k%@$N%"%/%;%9%0%k!<%W\e(B "@/" \e$B$,;H$($k$h$&$K$J$j$^$7$?!#\e(B
+
 ** \e$BA0$K;H$C$F$$$?$b$N$h$j?7$7$$\e(B Wanderlust \e$B$r5/F0$9$k$H\e(B NEWS(.ja) \e$B$NFbMF$r\e(B
    \e$BI=<($7$^$9!#\e(B
 
@@ -16,6 +20,38 @@ Wanderlust NEWS (\e$BF|K\8lHG\e(B) -- User-visible changes in Wanderlust.
 ** non-MIME PGP \e$B%a%C%;!<%8$N8!>Z!"I|9f2=$N$?$a$N%3%^%s%I$,DI2C$5$l$^$7$?!#\e(B
    \e$B%a%C%;!<%8%P%C%U%!$K$*$$$F\e(B C-c:v, C-c:d \e$B$G$=$l$>$l8!>Z!"I|9f2=$7$^$9!#\e(B
 
+* 2.10.0 \e$B$+$i\e(B 2.10.1 \e$B$X$NJQ99E@\e(B
+  2.10.1 \e$B$O\e(B 2.10.0 \e$B$N%P%0=$@5HG$G$9!#\e(B
+
+** print-length \e$B$d\e(B print-level \e$B$,\e(B Non-nil \e$B$N$H$-$K\e(B msgdb \e$B$,2u$l$kLdBj$,\e(B
+   \e$B=$@5$5$l$^$7$?!#\e(B
+
+** \e$B%Q%$%W%U%)%k%@$K$*$$$F\e(B wl-summary-pack-number \e$B$,$&$^$/F0$+$J$+$C$?\e(B
+   \e$B$?$a8z$+$J$/$7$F$"$j$^$9!#I,MW$G$"$l$P<h$j9~$_@h%U%)%k%@$NJ}$G<B9T\e(B
+   \e$B$7$F2<$5$$!#\e(B
+
+** wl-folder-move-cur-folder \e$B$,8z$$$F$$$J$+$C$?LdBj$,=$@5$5$l$^$7$?!#\e(B
+
+** Meadow \e$B>e$G\e(B wl-draft-reedit \e$B$,$&$^$/F0$+$J$$LdBj$,=$@5$5$l$^$7$?!#\e(B
+
+** wl-summary-pack-number \e$B$,\e(B Maildir \e$B$d\e(B shimbun \e$B%U%)%k%@$GF0$+$J$$\e(B
+   \e$BLdBj$,=$@5$5$l$^$7$?!#\e(B
+
+** \e$B=EMW%^!<%/$D$-%a%C%;!<%8$N%-%c%C%7%e$KBP$9$kJ]8n5!G=$,F/$+$J$$\e(B
+   \e$BIT6q9g$,=$@5$5$l$^$7$?!#\e(B
+
+** wl-summary-line-format \e$B$N\e(B %# \e$B$GBg$-$J?tCM$r@5$7$/07$($J$$IT6q9g\e(B
+   \e$B$,=$@5$5$l$^$7$?!#\e(B
+
+** SMTP AUTH \e$B$GG'>Z0J30$N%(%i!<$G$b%Q%9%o!<%I>C5n$5$l$kIT6q9g$,=$\e(B
+   \e$B@5$5$l$^$7$?!#\e(B
+
+** wl-message-buffer-prefetch-folder-type-list,
+   wl-message-buffer-prefetch-idle-time,
+   wl-message-buffer-prefetch-depth \e$B$N%G%U%)%k%HCM$,JQ99$5$l$^$7$?!#\e(B
+
+** XEmacs without mule \e$B$G%3%s%Q%$%k$G$-$J$$LdBj$,=$@5$5$l$^$7$?!#\e(B
+
 * 2.8.1 \e$B$+$i\e(B 2.10.0 \e$B$X$NJQ99E@\e(B
 
 ** \e$B%5%^%j9T$NI=<(7A<0$rJQ99$G$-$k$h$&$K$J$j$^$7$?!#\e(B
diff --git a/WL-CFG b/WL-CFG
index 937a9ed..a17c225 100644 (file)
--- a/WL-CFG
+++ b/WL-CFG
@@ -16,7 +16,7 @@
 ;(setq wl-info-lang "en")
 
 ;; Set language for news file ("ja" or "en", both in default).
-;(setq wl-news-lang '("ja" "en"))
+;(setq wl-news-lang '("ja" "en")) ; order sensitive
 
 ;; if you want to install wl modules to the subdirectory other than "wl"
 ;; under LISPDIR, set following variables.
diff --git a/WL-MK b/WL-MK
index 9823afd..cb0235d 100644 (file)
--- a/WL-MK
+++ b/WL-MK
 
 (defun wl-texinfo-format ()
   (wl-detect-info-directory)
-  (cond ((listp wl-info-lang)
+  (cond ((null wl-info-lang))
+       ((listp wl-info-lang)
         (mapcar 'wl-texinfo-format-file wl-info-lang))
        ((stringp wl-info-lang)
         (wl-texinfo-format-file wl-info-lang))))
     (install-file infofile DOCDIR INFODIR nil 'overwrite)))
 
 (defun wl-texinfo-install ()
-  (cond ((listp wl-info-lang)
+  (cond ((null wl-info-lang))
+       ((listp wl-info-lang)
         (mapcar 'wl-texinfo-install-file wl-info-lang))
        ((stringp wl-info-lang)
         (wl-texinfo-install-file wl-info-lang))))
 
 (defun wl-primary-info-file ()
   "Get primary info file (for wl-detect-info-directory)."
-  (cond
-   ((listp wl-info-lang)
-    (let ((wl-info-lang (car wl-info-lang)))
-      (wl-primary-info-file)))
-   ((stringp wl-info-lang)
-    (symbol-value (intern (format "wl-%s-info" wl-info-lang))))))
+  (cond ((null wl-info-lang))
+       ((listp wl-info-lang)
+        (let ((wl-info-lang (car wl-info-lang)))
+          (wl-primary-info-file)))
+       ((stringp wl-info-lang)
+        (symbol-value (intern (format "wl-%s-info" wl-info-lang))))))
 
 (defun wl-detect-info-directory ()
   (config-wl-package-subr)
   ;; INFODIR check.
-  (require 'info)
-  (if (fboundp 'info-initialize)
-      (info-initialize))
-  (unless INFODIR
-    (let ((infodir (car command-line-args-left))
-         (info (wl-primary-info-file))
-         previous)
-      (setq INFODIR
-           (if (string= infodir "NONE")
-               (if (setq previous
-                         (exec-installed-p info Info-directory-list
-                                           COMPRESS-SUFFIX-LIST))
-                   ;;(progn
-                   ;;(condition-case nil (delete-file previous))
-                   (directory-file-name (file-name-directory previous));)
-                 (car Info-directory-list))
-             infodir))
-      (setq command-line-args-left (cdr command-line-args-left))))
-  (princ (format "INFODIR is %s\n\n" INFODIR)))
+  (when wl-info-lang
+    (require 'info)
+    (if (fboundp 'info-initialize)
+       (info-initialize))
+    (unless INFODIR
+      (let ((infodir (car command-line-args-left))
+           (info (wl-primary-info-file))
+           previous)
+       (setq INFODIR
+             (if (string= infodir "NONE")
+                 (if (setq previous
+                           (exec-installed-p info Info-directory-list
+                                             COMPRESS-SUFFIX-LIST))
+                     (directory-file-name (file-name-directory previous))
+                   (car Info-directory-list))
+               infodir))
+       (setq command-line-args-left (cdr command-line-args-left))))
+    (princ (format "INFODIR is %s\n\n" INFODIR))))
 
 (defun install-wl-info ()
   (wl-texinfo-format)
index 5f84db7..e9293f3 100644 (file)
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2003-01-31.17}
+\def\texinfoversion{2003-05-04.08}
 %
 % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 %   ftp://tug.org/tex/texinfo.tex
 %     (and all CTAN mirrors, see http://www.ctan.org),
 %   and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-% 
+%
 % The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
-% 
+%
 % The texinfo.tex in any given Texinfo distribution could well be out
 % of date, so if that's what you're using, please check.
-% 
+%
 % Send bug reports to bug-texinfo@gnu.org.  Please include including a
 % complete document in each bug report with which we can reproduce the
 % problem.  Patches are, of course, greatly appreciated.
@@ -55,7 +55,7 @@
 % The extra TeX runs get the cross-reference information correct.
 % Sometimes one run after texindex suffices, and sometimes you need more
 % than two; texi2dvi does it as many times as necessary.
-% 
+%
 % It is possible to adapt texinfo.tex for other languages, to some
 % extent.  You can get the existing language-specific files from the
 % full Texinfo distribution.
 \message{Basics,}
 \chardef\other=12
 
-% We never want plain's outer \+ definition in Texinfo.
+% We never want plain's \outer definition of \+ in Texinfo.
 % For @tex, we can use \tabalign.
 \let\+ = \relax
 
-% Save some parts of plain tex whose names we will redefine.
+% Save some plain tex macros whose names we will redefine.
 \let\ptexb=\b
 \let\ptexbullet=\bullet
 \let\ptexc=\c
 \let\ptexgtr=>
 \let\ptexhat=^
 \let\ptexi=\i
+\let\ptexindent=\indent
 \let\ptexlbrace=\{
 \let\ptexless=<
 \let\ptexplus=+
 \let\ptexrbrace=\}
+\let\ptexslash=\/
 \let\ptexstar=\*
 \let\ptext=\t
 
 
 % Hyphenation fixes.
 \hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
 \hyphenation{eshell}
+\hyphenation{mini-buf-fer mini-buf-fers}
+\hyphenation{time-stamp}
 \hyphenation{white-space}
 
 % Margin to add to right of even pages, to left of odd pages.
 
 % add check for \lastpenalty to plain's definitions.  If the last thing
 % we did was a \nobreak, we don't want to insert more space.
-% 
+%
 \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
   \removelastskip\penalty-50\smallskip\fi\fi}
 \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
 % @* forces a line break.
 \def\*{\hfil\break\hbox{}\ignorespaces}
 
+% @/ allows a line break.
+\let\/=\allowbreak
+
 % @. is an end-of-sentence period.
 \def\.{.\spacefactor=3000 }
 
 % explicit \vfill so that the extra space is at the bottom.  The
 % threshold for doing this is if the group is more than \vfilllimit
 % percent of a page (\vfilllimit can be changed inside of @tex).
-% 
+%
 \newbox\groupbox
 \def\vfilllimit{0.7}
 %
@@ -721,8 +727,7 @@ where each line of input produces a line of output.}
   \spacefactor=3000
 }
 
-
-% @page    forces the start of a new page
+% @page forces the start of a new page.
 %
 \def\page{\par\vfill\supereject}
 
@@ -771,10 +776,10 @@ where each line of input produces a line of output.}
 % @inmargin{TEXT [, RIGHT-TEXT]}
 % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
 % else use TEXT for both).
-% 
+%
 \def\inmargin#1{\parseinmargin #1,,\finish}
 \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
-  \setbox0 = \hbox{\ignorespaces #2}% 
+  \setbox0 = \hbox{\ignorespaces #2}%
   \ifdim\wd0 > 0pt
     \def\lefttext{#1}%  have both texts
     \def\righttext{#2}%
@@ -843,8 +848,9 @@ where each line of input produces a line of output.}
 
 % @paragraphindent NCHARS
 % We'll use ems for NCHARS, close enough.
-% We cannot implement @paragraphindent asis, though.
-% 
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
 \def\asisword{asis} % no translation, these are keywords
 \def\noneword{none}
 %
@@ -879,6 +885,53 @@ where each line of input produces a line of output.}
   \fi
 }
 
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading.  If WORD is `insert', then do indentat such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.  We
+% switch the definition of this back and forth according to WORD.  By
+% default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\newdimen\currentparindent
+%
+\def\insertword{insert}
+%
+\def\firstparagraphindent{\parsearg\dofirstparagraphindent}
+\def\dofirstparagraphindent#1{%
+  \def\temp{#1}%
+  \ifx\temp\noneword
+    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+  \else\ifx\temp\insertword
+    \let\suppressfirstparagraphindent = \relax
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @firstparagraphindent option `\temp'}%
+  \fi\fi
+}
+
+% Here is how we actually suppress indentation.  Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+  \gdef\indent{%
+    \global\let\indent=\ptexindent
+    \global\everypar = {}%
+  }%
+  \global\everypar = {%
+    \kern-\parindent
+    \global\let\indent=\ptexindent
+    \global\everypar = {}%
+  }%
+}%
+
+
 % @asis just yields its argument.  Used with @table, for example.
 %
 \def\asis#1{#1}
@@ -887,14 +940,14 @@ where each line of input produces a line of output.}
 % We don't use $'s directly in the definition of \math because we need
 % to set catcodes according to plain TeX first, to allow for subscripts,
 % superscripts, special math chars, etc.
-% 
+%
 \let\implicitmath = $%$ font-lock fix
 %
 % One complication: _ usually means subscripts, but it could also mean
 % an actual _ character, as in @math{@var{some_variable} + 1}.  So make
 % _ within @math be active (mathcode "8000), and distinguish by seeing
 % if the current family is \slfam, which is what @var uses.
-% 
+%
 {\catcode\underChar = \active
 \gdef\mathunderscore{%
   \catcode\underChar=\active
@@ -905,7 +958,7 @@ where each line of input produces a line of output.}
 % FYI, plain.tex uses \\ as a temporary control sequence (why?), but
 % this is not advertised and we don't care.  Texinfo does not
 % otherwise define @\.
-% 
+%
 % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
 \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
 %
@@ -920,7 +973,7 @@ where each line of input produces a line of output.}
 % Some active characters (such as <) are spaced differently in math.
 % We have to reset their definitions in case the @math was an
 % argument to a command which set the catcodes (such as @item or @section).
-% 
+%
 {
   \catcode`^ = \active
   \catcode`< = \active
@@ -1046,8 +1099,8 @@ where each line of input produces a line of output.}
   \def\pdfmakeoutlines{{%
     \openin 1 \jobname.toc
     \ifeof 1\else\begingroup
-      \closein 1 
-      % Thanh's hack / proper braces in bookmarks  
+      \closein 1
+      % Thanh's hack / proper braces in bookmarks
       \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
       \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
       %
@@ -1076,7 +1129,7 @@ where each line of input produces a line of output.}
       \let\unnumbsubsubsecentry = \subsubsecentry
       %
       % Make special characters normal for writing to the pdf file.
-      % 
+      %
       \indexnofonts
       \let\tt=\relax
       \turnoffactive
@@ -1091,7 +1144,7 @@ where each line of input produces a line of output.}
       \let\nextmakelinks=\makelinks
       \ifnum\lnkcount>0,\fi
       \picknum{#1}%
-      \startlink attr{/Border [0 0 0]} 
+      \startlink attr{/Border [0 0 0]}
         goto name{\pdfmkpgn{\the\pgn}}%
       \linkcolor #1%
       \advance\lnkcount by 1%
@@ -1146,7 +1199,7 @@ where each line of input produces a line of output.}
     \ifx\first0\adn0
     \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
     \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
-    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 
+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
     \else
       \ifnum0=\countA\else\makelink\fi
       \ifx\first.\let\next=\done\else
@@ -1400,12 +1453,12 @@ where each line of input produces a line of output.}
 %   8.5x11=90+  smallbook=80  a4=90+  a5=77
 % For me, subjectively, the few extra characters that fit aren't worth
 % the additional smallness of 8pt.  So I'm making the default 9pt.
-% 
+%
 % By the way, for comparison, here's what fits with @example (10pt):
 %   8.5x11=71  smallbook=60  a4=75  a5=58
-% 
+%
 % I wish we used A4 paper on this side of the Atlantic.
-% 
+%
 % --karl, 24jan03.
 
 
@@ -1431,7 +1484,8 @@ where each line of input produces a line of output.}
 
 % \smartitalic{ARG} outputs arg in italics, followed by an italic correction
 % unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
+                    \ptexslash\fi\fi\fi}
 \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
 \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
 
@@ -1454,7 +1508,7 @@ where each line of input produces a line of output.}
 % Set sfcode to normal for the chars that usually have another value.
 % Can't use plain's \frenchspacing because it uses the `\x notation, and
 % sometimes \x has an active definition that messes things up.
-% 
+%
 \catcode`@=11
   \def\frenchspacing{%
     \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
@@ -1563,7 +1617,7 @@ where each line of input produces a line of output.}
     \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
   \else
     \errhelp = \EMsimple
-    \errmessage{Unknown @kbdinputstyle `\arg'}%
+    \errmessage{Unknown @kbdinputstyle option `\arg'}%
   \fi\fi\fi
 }
 \def\worddistinct{distinct}
@@ -1614,7 +1668,7 @@ where each line of input produces a line of output.}
 
 % rms does not like angle brackets --karl, 17may97.
 % So now @email is just like @uref, unless we are pdf.
-% 
+%
 %\def\email#1{\angleleft{\tt #1}\angleright}
 \ifpdf
   \def\email#1{\doemail#1,,\finish}
@@ -1659,6 +1713,16 @@ where each line of input produces a line of output.}
 % @pounds{} is a sterling sign.
 \def\pounds{{\it\$}}
 
+% @registeredsymbol - R in a circle.  For now, only works in text size;
+% we'd have to redo the font mechanism to change the \scriptstyle and
+% \scriptscriptstyle font sizes to make it look right in headings.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+  $^{{\ooalign{\hfil\raise.07ex\hbox{$\scriptstyle\rm R$}\hfil\crcr\Orb}}%
+    }$%
+}
+
 
 \message{page headings,}
 
@@ -2071,18 +2135,21 @@ where each line of input produces a line of output.}
   \itemizey {#1}{\Eitemize}
 }
 
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\exdentamount=\itemindent
-\parindent = 0pt %
-\parskip = \smallskipamount %
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\afterenvbreak\endgroup}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
+\def\itemizey#1#2{%
+  \aboveenvbreak
+  \itemmax=\itemindent
+  \advance\itemmax by -\itemmargin
+  \advance\leftskip by \itemindent
+  \exdentamount=\itemindent
+  \parindent=0pt
+  \parskip=\smallskipamount
+  \ifdim\parskip=0pt \parskip=2pt \fi
+  \def#2{\endgraf\afterenvbreak\endgroup}%
+  \def\itemcontents{#1}%
+  % @itemize with no arg is equivalent to @itemize @bullet.
+  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+  \let\item=\itemizeitem
+}
 
 % \splitoff TOKENS\endmark defines \first to be the first token in
 % TOKENS, and \rest to be the remainder.
@@ -2493,12 +2560,12 @@ width0pt\relax} \fi
 % @deffn ...
 % @end deffn
 % @end ignore
-% 
+%
 % The @end deffn is going to get expanded, because we're trying to allow
 % nested conditionals.  But we don't want to expand the actual @deffn,
 % since it might be syntactically correct and intended to be ignored.
 % Since \end checks for \relax, using \empty does not cause an error.
-% 
+%
 \def\ignoremorecommands{%
   \let\defcodeindex = \relax
   \let\defcv = \empty
@@ -2903,10 +2970,10 @@ width0pt\relax} \fi
 
 % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.
-% 
+%
 % @syncodeindex foo bar   similar, but put all entries made for index foo
 % inside @code.
-% 
+%
 \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
 \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
 
@@ -2948,13 +3015,13 @@ width0pt\relax} \fi
 % Take care of Texinfo commands that can appear in an index entry.
 % Since there are some commands we want to expand, and others we don't,
 % we have to laboriously prevent expansion for those that we don't.
-% 
+%
 \def\indexdummies{%
   \def\@{@}% change to @@ when we switch to @ as escape char in index files.
   \def\ {\realbackslash\space }%
   % Need these in case \tex is in effect and \{ is a \delimiter again.
   % But can't use \lbracecmd and \rbracecmd because texindex assumes
-  % braces and backslashes are used only as delimiters.  
+  % braces and backslashes are used only as delimiters.
   \let\{ = \mylbrace
   \let\} = \myrbrace
   %
@@ -2963,14 +3030,14 @@ width0pt\relax} \fi
   % words, not control letters, because the \space would be incorrect
   % for control characters, but is needed to separate the control word
   % from whatever follows.
-  % 
+  %
   % For control letters, we have \definedummyletter, which omits the
   % space.
-  % 
+  %
   % These can be used both for control words that take an argument and
   % those that do not.  If it is followed by {arg} in the input, then
   % that will dutifully get written to the index (or wherever).
-  % 
+  %
   \def\definedummyword##1{%
     \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
   }%
@@ -2983,9 +3050,9 @@ width0pt\relax} \fi
 }
 
 % For the aux file, @ is the escape character.  So we want to redefine
-% everything using @ instead of \realbackslash.  When everything uses 
+% everything using @ instead of \realbackslash.  When everything uses
 % @, this will be simpler.
-% 
+%
 \def\atdummies{%
   \def\@{@@}%
   \def\ {@ }%
@@ -3006,7 +3073,7 @@ width0pt\relax} \fi
 
 % Called from \indexdummies and \atdummies.  \definedummyword and
 % \definedummyletter must be defined first.
-% 
+%
 \def\commondummies{%
   %
   \normalturnoffactive
@@ -3326,6 +3393,7 @@ width0pt\relax} \fi
   %
   \smallfonts \rm
   \tolerance = 9500
+  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
   \indexbreaks
   %
   % See if the index file exists and is nonempty.
@@ -3569,7 +3637,7 @@ width0pt\relax} \fi
   \wd0=\hsize \wd2=\hsize
   \hbox to\pagewidth{\box0\hfil\box2}%
 }
-% 
+%
 % All done with double columns.
 \def\enddoublecolumns{%
   \output = {%
@@ -3707,6 +3775,7 @@ width0pt\relax} \fi
     \numberedsubsubseczzz{#2}
   \fi
 \fi
+\suppressfirstparagraphindent
 }
 
 % like \numhead, but chooses appendix heading levels
@@ -3726,6 +3795,7 @@ width0pt\relax} \fi
     \appendixsubsubseczzz{#2}
   \fi
 \fi
+\suppressfirstparagraphindent
 }
 
 % like \numhead, but chooses numberless heading levels
@@ -3745,6 +3815,7 @@ width0pt\relax} \fi
     \unnumberedsubsubseczzz{#2}
   \fi
 \fi
+\suppressfirstparagraphindent
 }
 
 % @chapter, @appendix, @unnumbered.
@@ -4357,7 +4428,7 @@ width0pt\relax} \fi
 % @foo ... @end foo.
 
 % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-% 
+%
 % Since these characters are used in examples, it should be an even number of
 % \tt widths. Each \tt character is 1en, so two makes it 1em.
 %
@@ -4369,7 +4440,7 @@ width0pt\relax} \fi
 
 % The @error{} command.
 % Adapted from the TeXbook's \boxit.
-% 
+%
 \newbox\errorbox
 %
 {\tentt \global\dimen0 = 3em}% Width of the box.
@@ -4416,9 +4487,11 @@ width0pt\relax} \fi
   \let\equiv=\ptexequiv
   \let\!=\ptexexclam
   \let\i=\ptexi
+  \let\indent=\ptexindent
   \let\{=\ptexlbrace
   \let\+=\tabalign
   \let\}=\ptexrbrace
+  \let\/=\ptexslash
   \let\*=\ptexstar
   \let\t=\ptext
   %
@@ -4502,6 +4575,7 @@ width0pt\relax} \fi
 \newskip\lskip\newskip\rskip
 
 \def\cartouche{%
+\par  % can't be in the midst of a paragraph.
 \begingroup
         \lskip=\leftskip \rskip=\rightskip
         \leftskip=0pt\rightskip=0pt %we want these *outside*.
@@ -4667,7 +4741,7 @@ width0pt\relax} \fi
 
 
 % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
-% If we want to allow any <char> as delimiter, 
+% If we want to allow any <char> as delimiter,
 % we need the curly braces so that makeinfo sees the @verb command, eg:
 % `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
 %
@@ -4745,8 +4819,8 @@ width0pt\relax} \fi
   \everypar{\starttabbox}%
 }
 
-% Do the @verb magic: verbatim text is quoted by unique 
-% delimiter characters.  Before first delimiter expect a 
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters.  Before first delimiter expect a
 % right brace, after last delimiter expect closing brace:
 %
 %    \def\doverb'{'<char>#1<char>'}'{#1}
@@ -4765,7 +4839,7 @@ width0pt\relax} \fi
 %
 %     \def\doverbatim#1@end verbatim{#1}
 %
-% For Texinfo it's a lot easier than for LaTeX, 
+% For Texinfo it's a lot easier than for LaTeX,
 % because texinfo's \verbatim doesn't stop at '\end{verbatim}':
 % we need not redefine '\', '{' and '}'.
 %
@@ -4800,14 +4874,14 @@ width0pt\relax} \fi
 % Allow normal characters that we make active in the argument (a file name).
 \def\verbatiminclude{%
   \begingroup
-    \catcode`\\=12
-    \catcode`~=12
-    \catcode`^=12
-    \catcode`_=12
-    \catcode`|=12
-    \catcode`<=12
-    \catcode`>=12
-    \catcode`+=12
+    \catcode`\\=\other
+    \catcode`~=\other
+    \catcode`^=\other
+    \catcode`_=\other
+    \catcode`|=\other
+    \catcode`<=\other
+    \catcode`>=\other
+    \catcode`+=\other
     \parsearg\doverbatiminclude
 }
 \def\setupverbatiminclude{%
@@ -4832,14 +4906,14 @@ width0pt\relax} \fi
 % @copying ... @end copying.
 % Save the text away for @insertcopying later.  Many commands won't be
 % allowed in this context, but that's ok.
-% 
+%
 % We save the uninterpreted tokens, rather than creating a box.
 % Saving the text in a box would be much easier, but then all the
 % typesetting commands (@smallbook, font changes, etc.) have to be done
 % beforehand -- and a) we want @copying to be done first in the source
 % file; b) letting users define the frontmatter in as flexible order as
 % possible is very desirable.
-% 
+%
 \def\copying{\begingroup
   % Define a command to swallow text until we reach `@end copying'.
   % \ is the escape char in this texinfo.tex file, so it is the
@@ -4862,15 +4936,15 @@ width0pt\relax} \fi
 % end-of-line to be a \par, as would happen with the normal active
 % definition of ^^M.  On the third hand, two ^^M's in a row should still
 % generate a \par.
-% 
+%
 % Our approach is to make ^^M insert a space and a penalty1 normally;
 % then it can also check if \lastpenalty=1.  If it does, then manually
 % do \par.
-% 
+%
 % This messes up the normal definitions of @c[omment], so we redefine
 % it.  Similarly for @ignore.  (These commands are used in the gcc
 % manual for man page generation.)
-% 
+%
 % Seems pretty fragile, most line-oriented commands will presumably
 % fail, but for the limited use of getting the copying text (which
 % should be quite simple) inserted, we can hope it's ok.
@@ -4911,7 +4985,7 @@ width0pt\relax} \fi
 \newcount\parencount
 
 % We want ()&[] to print specially on the defun line.
-% 
+%
 \def\activeparens{%
   \catcode`\(=\active \catcode`\)=\active
   \catcode`\&=\active
@@ -5014,7 +5088,7 @@ width0pt\relax} \fi
 % #1 is the \E... control sequence to end the definition (which we define).
 % #2 is the \...x control sequence (which our caller defines).
 % #3 is the control sequence to process the header, such as \defunheader.
-% 
+%
 \def\parsebodycommon#1#2#3{%
   \begingroup\inENV
   % If there are two @def commands in a row, we'll have a \nobreak,
@@ -5037,7 +5111,7 @@ width0pt\relax} \fi
 }
 
 % Common part of the \...x definitions.
-% 
+%
 \def\defxbodycommon{%
   % As with \parsebodycommon above, allow line break if we have multiple
   % x headers in a row.  It's not a great place, though.
@@ -5088,7 +5162,7 @@ width0pt\relax} \fi
 % to account for this both in the \...x definition and in parsing the
 % input at hand.  Thus also need a control sequence (passed as #5) for
 % the \E... definition to assign the category name to.
-% 
+%
 \def\deftypeopparsebody#1#2#3#4#5 #6 {%
   \parsebodycommon{#1}{#2}{#3}%
   \def#2##1 ##2 ##3 {\def#4{##1}%
@@ -5193,7 +5267,7 @@ width0pt\relax} \fi
 }
 
 % This expands the args and terminates the paragraph they comprise.
-% 
+%
 \def\defunargs#1{\functionparens \sl
 % Expand, preventing hyphenation at `-' chars.
 % Note that groups don't affect changes in \hyphenchar.
@@ -5455,7 +5529,7 @@ width0pt\relax} \fi
 
 % These definitions are used if you use @defunx (etc.)
 % anywhere other than immediately after a @defun or @defunx.
-% 
+%
 \def\defcvx#1 {\errmessage{@defcvx in invalid context}}
 \def\deffnx#1 {\errmessage{@deffnx in invalid context}}
 \def\defivarx#1 {\errmessage{@defivarx in invalid context}}
@@ -5627,7 +5701,7 @@ width0pt\relax} \fi
 
 % Called by \do from \dounmacro on each macro.  The idea is to omit any
 % macro definitions that have been changed to \relax.
-% 
+%
 \def\unmacrodo#1{%
   \ifx#1\relax
     % remove this
@@ -5783,8 +5857,8 @@ width0pt\relax} \fi
 
 % @node's job is to define \lastnode.
 \def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+\def\nodezzz#1{\nodexxx #1,\finishnodeparse}
+\def\nodexxx#1,#2\finishnodeparse{\gdef\lastnode{#1}}
 \let\nwnode=\node
 \let\lastnode=\relax
 
@@ -5822,14 +5896,14 @@ width0pt\relax} \fi
 % anchor), namely NAME-title (the corresponding @chapter/etc. name),
 % NAME-pg (the page number), and NAME-snt (section number and type).
 % Called from \foonoderef.
-% 
+%
 % We have to set \indexdummies so commands such as @code in a section
 % title aren't expanded.  It would be nicer not to expand the titles in
 % the first place, but there's so many layers that that is hard to do.
 %
 % Likewise, use \turnoffactive so that punctuation chars such as underscore
 % and backslash work in node names.
-% 
+%
 \def\setref#1#2{{%
   \atdummies
   \pdfmkdest{#1}%
@@ -5912,14 +5986,25 @@ width0pt\relax} \fi
      \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
      \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
     }%
-    % [mynode],
-    [\printednodename],\space
-    % page 3
+    % output the `[mynode]' via a macro.
+    \xrefprintnodename\printednodename
+    %
+    % But we always want a comma and a space:
+    ,\space
+    %
+    % output the `page 3'.
     \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
   \fi
   \endlink
 \endgroup}
 
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output.  It's a separate macro only so it can be changed more easily,
+% since not square brackets don't work in some documents.  Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
 % \dosetq is called from \setref to do the actual \write (\iflinks).
 %
 \def\dosetq#1#2{%
@@ -5934,7 +6019,7 @@ width0pt\relax} \fi
 \def\internalsetq#1#2{@xrdef{#1}{\csname #2\endcsname}}
 
 % Things to be expanded by \internalsetq.
-% 
+%
 \def\Ypagenumber{\folio}
 \def\Ytitle{\thissection}
 \def\Ynothing{}
@@ -6119,13 +6204,14 @@ width0pt\relax} \fi
 %
 % Auto-number footnotes.  Otherwise like plain.
 \gdef\footnote{%
+  \let\indent=\ptexindent
   \global\advance\footnoteno by \@ne
   \edef\thisfootno{$^{\the\footnoteno}$}%
   %
   % In case the footnote comes at the end of a sentence, preserve the
   % extra spacing after we do the footnote number.
   \let\@sf\empty
-  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
   %
   % Remove inadvertent blank space before typesetting the footnote number.
   \unskip
@@ -6266,7 +6352,7 @@ width0pt\relax} \fi
     \nobreak\bigskip
     % Usually we'll have text after the image which will insert
     % \parskip glue, so insert it here too to equalize the space
-    % above and below. 
+    % above and below.
     \nobreak\vskip\parskip
     \nobreak
     \line\bgroup\hss
@@ -6354,7 +6440,7 @@ should work if nowhere else does.}
 % Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
 % 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
 % physical page width.
-% 
+%
 % We also call \setleading{\textleading}, so the caller should define
 % \textleading.  The caller should also set \parskip.
 %
@@ -6422,7 +6508,7 @@ should work if nowhere else does.}
   \parskip = 3pt plus 2pt minus 1pt
   \textleading = 13.2pt
   %
-  % Double-side printing via postscript on Laserjet 4050 
+  % Double-side printing via postscript on Laserjet 4050
   % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
   % To change the settings for a different printer or situation, adjust
   % \normaloffset until the front-side and back-side texts align.  Then
@@ -6463,7 +6549,7 @@ should work if nowhere else does.}
   \tableindent = 12mm
 }}
 
-% A specific text layout, 24x15cm overall, intended for A4 paper.  
+% A specific text layout, 24x15cm overall, intended for A4 paper.
 \def\afourlatex{{\globaldefs = 1
   \afourpaper
   \internalpagesizes{237mm}{150mm}%
@@ -6639,7 +6725,7 @@ should work if nowhere else does.}
 % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
 % the literal character `\'.  (Thus, \ is not expandable when this is in
 % effect.)
-% 
+%
 @def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
 
 % Make _ and + \other characters, temporarily.
@@ -6668,7 +6754,7 @@ should work if nowhere else does.}
 % Say @foo, not \foo, in error messages.
 @escapechar = `@@
 
-% These look ok in all fonts, so just make them not special.  
+% These look ok in all fonts, so just make them not special.
 @catcode`@& = @other
 @catcode`@# = @other
 @catcode`@% = @other
index 22bf166..9bd0a87 100644 (file)
@@ -278,7 +278,7 @@ APEL, FLIM, SEMI \e$B$N=g$K%$%s%9%H!<%k$7$F$/$@$5$$!#\e(B
 \e$B?d>)$5$l$k\e(B APEL, FLIM, SEMI \e$B$N%P!<%8%g%s$NAH9g$;$O!"0J2<$NDL$j$G$9!#\e(B
 
 @itemize @minus
-@item APEL 10.4, FLIM 1.14.5, SEMI 1.14.5
+@item APEL 10.5, FLIM 1.14.5, SEMI 1.14.5
 @end itemize
 
 \e$B$=$NB>!"\e(BFLIM, SEMI \e$B$K$O$$$m$$$m$JJQ7A%P!<%8%g%s$,B8:_$7$^$9$,!"\e(B
@@ -287,8 +287,8 @@ APEL, FLIM, SEMI \e$B$N=g$K%$%s%9%H!<%k$7$F$/$@$5$$!#\e(B
 \e$BNc$($P!"0J2<$NAH9g$;$GF0:n$9$k$3$H$,3NG'$5$l$F$$$^$9!#\e(B
 
 @itemize @minus
-@item APEL 10.4, SLIM 1.14.9, SEMI 1.14.5
-@item APEL 10.4, CLIME 1.14.5, EMIKO 1.14.1
+@item APEL 10.5, SLIM 1.14.9, SEMI 1.14.5
+@item APEL 10.5, CLIME 1.14.5, EMIKO 1.14.1
 @end itemize
 
 APEL, FLIM \e$B$b$7$/$O\e(B SEMI \e$B$N%P!<%8%g%s%"%C%W$r9T$C$?>l9g$O!"\e(BWanderlust \e$B$r\e(B
@@ -7382,7 +7382,7 @@ Non-nil \e$B$J$i$P!"%a!<%kAw?.;~$KK\Ev$KAw?.$7$FNI$$$+$r3NG'$7$^$9!#\e(B
 \e$B%U%)%k%@L>$N@55,I=8=$H%U%)%k%@0\F0;~$N%5%^%j99?7%l%s%8$H$NO"A[%j%9%H$G$9!#\e(B
 \e$B99?7%l%s%8$K$O\e(B @code{wl-summary-sync} \e$B$GF~NO$G$-$kCM$N$$$:$l$+\e(B
 (@samp{all}, @samp{update}, @samp{rescan}, @samp{rescan-noscore},
-@samp{first}, @samp{last}) \e$B$r;XDj$7$^$9!#%^%C%A$7$J$+$C$?>l9g$O!"\e(B
+@samp{first}, @samp{last}, @samp{no-sync}) \e$B$r;XDj$7$^$9!#%^%C%A$7$J$+$C$?>l9g$O!"\e(B
 @samp{update} \e$B$H$J$j$^$9!#\e(B
 
 @item wl-ask-range
@@ -7744,6 +7744,7 @@ Wanderlust List in English @t{<wl-en@@lists.airs.net>}
 2001  7/04    2.6.0 stable \e$B%j%j!<%9!#\e(B
       8/21    wl-addrmgr by \e$BKLK\$5$s!#\e(B
      12/27    2.8.1 stable \e$B%j%j!<%9!#\e(B
+2002 12/11    2.10.0 stable \e$B%j%j!<%9!#\e(B
 @end example
 
 \e$B>\$7$$JQA+$O\e(B @file{ChangeLog} \e$B$r8fMw$/$@$5$$!#\e(B
index 59f53cf..2a2588b 100644 (file)
@@ -254,7 +254,7 @@ may help you.}.
 Recommended combination of APEL, FLIM and SEMI are following:
 
 @itemize @minus
-@item APEL 10.4, FLIM 1.14.5 and SEMI 1.14.5
+@item APEL 10.5, FLIM 1.14.5 and SEMI 1.14.5
 @end itemize
 
 You can also use many other FLIM/SEMI variants. Combination of the
@@ -262,8 +262,8 @@ latest versions should work.  For example, the following combination are
 confirmed to work.
 
 @itemize @minus
-@item APEL 10.4, SLIM 1.14.9, SEMI 1.14.5
-@item APEL 10.4, CLIME 1.14.5, EMIKO 1.14.1
+@item APEL 10.5, SLIM 1.14.9, SEMI 1.14.5
+@item APEL 10.5, CLIME 1.14.5, EMIKO 1.14.1
 @end itemize
 
 You have to re-install Wanderlust if you upgraded APEL, FLIM or SEMI.
@@ -7469,8 +7469,9 @@ The initial setting is the alist shown below:
 @noindent
 This is an associative list of regular expressions of folder names and
 update range of the summary.  Update range is one of the @samp{all},
-@samp{update}, @samp{rescan}, @samp{rescan-noscore}, @samp{first} and
-@samp{last}. If a folder do not match, @samp{update} is used.
+@samp{update}, @samp{rescan}, @samp{rescan-noscore}, @samp{first},
+@samp{last} and @samp{no-sync}. If a folder do not match, @samp{update}
+is used.
 
 @item wl-ask-range
 @vindex wl-ask-range
@@ -7827,6 +7828,7 @@ valuable advice and many pieces of code they contributed.
 2001  7/04    Released 2.6.0 stable.
       8/21    wl-addrmgr by Kitamoto-san.
      12/27    Released 2.8.1 stable.
+2002 12/11    Released 2.10.0 stable.
 @end example
 
 See @file{ChangeLog} for details.
index 0919f2c..0c83093 100644 (file)
@@ -1,3 +1,63 @@
+2003-07-12  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-multi.el (elmo-folder-process-crosspost): Follow the change in
+       API.
+       * elmo-nntp.el (elmo-folder-process-crosspost): Ditto.
+
+
+       * elmo.el (elmo-folder-process-crosspost): Remove optional argument.
+       (elmo-folder-list-message-entities): Added argument in-msgdb and
+       numbers.
+       (elmo-folder-synchronize): Define as a method.
+
+       * elmo-nntp.el (elmo-folder-initialize): Don't use
+       elmo-nntp-default-user if zero-length username is specified
+       explicitly.
+
+2003-07-06  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * elmo-nntp.el (elmo-nntp-folder-list-subfolders): Don't omit
+       server name in case with username.
+       (XXX: this is ad-hoc fix against username includes "@", it
+       should be solved fundamentally)
+
+2003-07-05  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * elmo-nntp.el (elmo-nntp-debug): New function.
+       (elmo-nntp-send-command, elmo-nntp-process-filter): Call it.
+       (elmo-network-authenticate-session): Hide auth-info from the log.
+
+       * elmo-nntp.el (elmo-nntp-folder-list-subfolders): Don't append
+       user name if it is equal to elmo-nntp-default-user.
+
+2003-06-07  Yuuichi Teranishi  <teranisi@gohome.org>
+
+       * elmo-shimbun.el (elmo-shimbun-get-headers): Use shimbun-server
+       instead of shimbun-server-internal;
+       Use shimbun-current-group instead of shimbun-current-group-internal.
+       (elmo-folder-plugged-p): Use shimbun-server instead of
+       shimbun-server-internal.
+       (elmo-folder-set-plugged): Ditto.
+       (elmo-net-port-info): Ditto.
+       (elmo-folder-check): Ditto.
+       (elmo-folder-expand-msgdb-path): Ditto.
+       (elmo-folder-list-subfolders): Ditto.
+
+2003-05-18  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * elmo-msgdb.el (elmo-msgdb-overview-entity-get-extra-field):
+       Convert field-name to lower case.
+       (elmo-msgdb-overview-entity-set-extra-field): Ditto.
+
+2003-05-12  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * acap.el, elmo-imap4.el, elmo-nntp.el, elmo-util.el, pldap.el:
+       `message' and `error' take format string.
+
+2003-04-10  Hiroya Murata  <lapis-lazuli@pop06.odn.ne.jp>
+
+       * elmo-pipe.el (elmo-folder-clear): Implemented clear copied-list.
+
 2003-04-05  Hiroya Murata  <lapis-lazuli@pop06.odn.ne.jp>
 
        * elmo-msgdb.el (elmo-msgdb-message-entity-field): Don't use self
index 4948740..df0dbe4 100644 (file)
@@ -550,7 +550,8 @@ ENTRIES is a store-entry list."
       (when (acap-response-bye-p acap-response)
        (if acap-logging-out
            (setq acap-response nil)
-         (error (prog1 (acap-response-bye-message acap-response)
+         (error "%s"
+                (prog1 (acap-response-bye-message acap-response)
                   (setq acap-response nil)))))
       (or (and (not (memq (process-status process) '(open run)))
               (sit-for 1))
@@ -814,8 +815,8 @@ ENTRIES is a store-entry list."
                               (acap-forward)
                               (acap-parse-return-data-list)))))
          (ALERT ;(cons 'alert (acap-parse-resp-body))
-          (message (nth 1 (acap-parse-resp-body))))
-         ((BYE Bye bye)  
+          (message "%s" (nth 1 (acap-parse-resp-body))))
+         ((BYE Bye bye)
           (cons 'bye (acap-parse-resp-body)))
          (CHANGE (cons 'change
                        (list (acap-parse-quoted)
@@ -837,7 +838,7 @@ ENTRIES is a store-entry list."
          (NO   (cons 'stat-no (acap-parse-resp-body)))
          (BAD  ;(cons 'stat-bad (acap-parse-resp-body))
           ;; XXX cyrus-sml-acap does not return tagged bad response?
-          (error (nth 1 (acap-parse-resp-body))))))
+          (error "%s" (nth 1 (acap-parse-resp-body))))))
        ((integerp token)
        ;; tagged response.
        (setq tag token)
index 4ed7762..92bdef0 100644 (file)
@@ -354,7 +354,7 @@ TAG is the tag of the command"
                    (elmo-imap4-response-bye-p elmo-imap4-current-response)
                    (when (elmo-imap4-response-garbage-p
                           elmo-imap4-current-response)
-                     (message "Garbage response: %s" 
+                     (message "Garbage response: %s"
                               (elmo-imap4-response-value
                                elmo-imap4-current-response
                                'garbage))
@@ -696,9 +696,9 @@ Returns response value if selecting folder succeed. "
                   (elmo-imap4-response-bye-p response))
              (elmo-imap4-process-bye session)
            (unless no-error
-             (error (or
-                     (elmo-imap4-response-error-text response)
-                     (format "Select %s failed" mailbox)))))))
+             (error "%s"
+                    (or (elmo-imap4-response-error-text response)
+                        (format "Select %s failed" mailbox)))))))
       (and result response))))
 
 (defun elmo-imap4-check-validity (spec validity-file)
@@ -1806,7 +1806,8 @@ Return nil if no complete line has arrived."
         (setq mailbox "inbox"))
      (if (eq (string-to-char mailbox) ?/)
         (setq mailbox (substring mailbox 1 (length mailbox))))
-     (concat ; don't use expand-file-name (e.g. %~/something)
+     ;; don't use expand-file-name (e.g. %~/something)
+     (concat
       (expand-file-name
        (or (elmo-net-folder-user-internal folder) "nobody")
        (expand-file-name (or (elmo-net-folder-server-internal folder)
@@ -2417,9 +2418,9 @@ If optional argument REMOVE is non-nil, remove FLAG."
                (elmo-imap4-session-set-current-mailbox-internal session nil)
                (if (elmo-imap4-response-bye-p response)
                    (elmo-imap4-process-bye session)
-                 (error (or
-                         (elmo-imap4-response-error-text response)
-                         (format "Select %s failed" mailbox)))))
+                 (error "%s"
+                        (or (elmo-imap4-response-error-text response)
+                            (format "Select %s failed" mailbox)))))
              (message "Selecting %s...done"
                       (elmo-folder-name-internal folder))
              (elmo-folder-set-msgdb-internal
index 0e000d9..5edcac5 100644 (file)
 ;; elmo-flag-table-get
 ;; elmo-flag-table-save
 
-;; elmo-msgdb-append-entity-from-buffer
-;; msgdb number flag-table &optional buffer
-
-;; 
+;; elmo-msgdb-append-entity
+;; msgdb entity flag-table
 
 ;; ENTITY elmo-msgdb-make-entity ARGS
 ;; VALUE elmo-msgdb-entity-field ENTITY
@@ -936,12 +934,14 @@ Return CONDITION itself if no entity exists in msgdb."
   (and entity (car entity)))
 
 (defsubst elmo-msgdb-overview-entity-get-extra-field (entity field-name)
-  (let ((extra (and entity (aref (cdr entity) 8))))
+  (let ((field-name (downcase field-name))
+       (extra (and entity (aref (cdr entity) 8))))
     (and extra
         (cdr (assoc field-name extra)))))
 
 (defsubst elmo-msgdb-overview-entity-set-extra-field (entity field-name value)
-  (let ((extras (and entity (aref (cdr entity) 8)))
+  (let ((field-name (downcase field-name))
+       (extras (and entity (aref (cdr entity) 8)))
        extra)
     (if (setq extra (assoc field-name extras))
        (setcdr extra value)
index 3c49cca..eebcd1e 100644 (file)
       (setq cur-number (1+ cur-number)))
     (elmo-msgdb-sort-by-date msgdb)))
 
-(luna-define-method elmo-folder-process-crosspost ((folder elmo-multi-folder)
-                                                  &optional
-                                                  number-alist)
-  (let ((number-alists (elmo-multi-split-number-alist
-                       folder
-                       (elmo-msgdb-get-number-alist
-                        (elmo-folder-msgdb folder))))
-       (cur-number 1))
-    (dolist (child (elmo-multi-folder-children-internal folder))
-      (elmo-folder-process-crosspost child (car number-alists))
-      (setq cur-number (+ 1 cur-number)
-           number-alists (cdr number-alists)))))
+(luna-define-method elmo-folder-process-crosspost ((folder elmo-multi-folder))
+  (dolist (child (elmo-multi-folder-children-internal folder))
+    (elmo-folder-process-crosspost child)))
 
 (defsubst elmo-multi-folder-append-msgdb (folder append-msgdb)
   (if append-msgdb
index 97a2f6d..f4fecd5 100644 (file)
       (decode-coding-string string elmo-nntp-group-coding-system)
     string))
 
+;; For debugging.
+(defvar elmo-nntp-debug nil
+  "Non-nil forces NNTP folder as debug mode.
+Debug information is inserted in the buffer \"*NNTP DEBUG*\"")
+
+;;; Debug
+(defsubst elmo-nntp-debug (message &rest args)
+  (if elmo-nntp-debug
+      (let ((biff (string-match "BIFF-" (buffer-name)))
+           pos)
+       (with-current-buffer (get-buffer-create (concat "*NNTP DEBUG*"
+                                                       (if biff "BIFF")))
+         (goto-char (point-max))
+         (setq pos (point))
+         (insert (apply 'format message args) "\n")))))
+
 ;;; ELMO NNTP folder
 (eval-and-compile
   (luna-define-class elmo-nntp-folder (elmo-net-folder)
                   (append elmo-nntp-stream-type-alist
                           elmo-network-stream-type-alist))
           elmo-network-stream-type-alist))
-       parse)
+       explicit-user parse)
     (setq name (luna-call-next-method))
     (setq parse (elmo-parse-token name ":"))
     (elmo-nntp-folder-set-group-internal folder
                                         (elmo-nntp-encode-group-string
                                          (car parse)))
+    (setq explicit-user (eq ?: (string-to-char (cdr parse))))
     (setq parse (elmo-parse-prefixed-element ?: (cdr parse)))
     (elmo-net-folder-set-user-internal folder
                                       (if (eq (length (car parse)) 0)
-                                          elmo-nntp-default-user
+                                          (unless explicit-user
+                                            elmo-nntp-default-user)
                                         (car parse)))
     (unless (elmo-net-folder-server-internal folder)
       (elmo-net-folder-set-server-internal folder
@@ -287,13 +305,17 @@ Don't cache if nil.")
       (elmo-nntp-send-command session
                              (format "authinfo user %s"
                                      (elmo-network-session-user-internal
-                                      session)))
+                                      session))
+                             nil
+                             'no-log)
       (or (elmo-nntp-read-response session)
          (signal 'elmo-authenticate-error '(authinfo)))
       (elmo-nntp-send-command
        session
        (format "authinfo pass %s"
-              (elmo-get-passwd (elmo-network-session-password-key session))))
+              (elmo-get-passwd (elmo-network-session-password-key session)))
+       nil
+       'no-log)
       (or (elmo-nntp-read-response session)
          (signal 'elmo-authenticate-error '(authinfo))))))
 
@@ -305,19 +327,21 @@ Don't cache if nil.")
   (when (buffer-live-p (process-buffer process))
     (with-current-buffer (process-buffer process)
       (goto-char (point-max))
-      (insert output))))
+      (insert output)
+      (elmo-nntp-debug "RECEIVED: %s\n" output))))
 
 (defun elmo-nntp-send-mode-reader (session)
   (elmo-nntp-send-command session "mode reader")
   (if (null (elmo-nntp-read-response session t))
       (message "Mode reader failed")))
 
-(defun elmo-nntp-send-command (session command &optional noerase)
+(defun elmo-nntp-send-command (session command &optional noerase no-log)
   (with-current-buffer (elmo-network-session-buffer session)
     (unless noerase
       (erase-buffer)
       (goto-char (point-min)))
     (setq elmo-nntp-read-point (point))
+    (elmo-nntp-debug "SEND: %s\n" (if no-log "<NO LOGGING>" command))
     (process-send-string (elmo-network-session-process-internal
                          session) command)
     (process-send-string (elmo-network-session-process-internal
@@ -457,7 +481,7 @@ Don't cache if nil.")
 (defun elmo-nntp-folder-list-subfolders (folder one-level)
   (let ((session (elmo-nntp-get-session folder))
        (case-fold-search nil)
-       response ret-val top-ng append-serv use-list-active start)
+       response ret-val top-ng username append-serv use-list-active start)
     (with-temp-buffer
       (set-buffer-multibyte nil)
       (if (and (elmo-nntp-folder-group-internal folder)
@@ -557,8 +581,16 @@ Don't cache if nil.")
        (when (> len elmo-display-progress-threshold)
          (elmo-display-progress
           'elmo-nntp-list-folders "Parsing active..." 100))))
-    (unless (string= (elmo-net-folder-server-internal folder)
-                    elmo-nntp-default-server)
+
+    (setq username (elmo-net-folder-user-internal folder))
+    (when (and username
+              elmo-nntp-default-user
+              (string= username elmo-nntp-default-user))
+      (setq username nil))
+
+    (when (or username ; XXX: ad-hoc fix against username includes "@"
+             (not (string= (elmo-net-folder-server-internal folder)
+                           elmo-nntp-default-server)))
       (setq append-serv (concat "@" (elmo-net-folder-server-internal
                                     folder))))
     (unless (eq (elmo-net-folder-port-internal folder) elmo-nntp-default-port)
@@ -575,16 +607,15 @@ Don't cache if nil.")
     (mapcar '(lambda (fld)
               (if (consp fld)
                   (list (concat "-" (elmo-nntp-decode-group-string (car fld))
-                                (and (elmo-net-folder-user-internal folder)
+                                (and username
                                      (concat
                                       ":"
-                                      (elmo-net-folder-user-internal folder)))
+                                      username))
                                 (and append-serv
                                      (concat append-serv))))
                 (concat "-" (elmo-nntp-decode-group-string fld)
-                        (and (elmo-net-folder-user-internal folder)
-                             (concat ":" (elmo-net-folder-user-internal
-                                          folder)))
+                        (and username
+                             (concat ":" username))
                         (and append-serv
                              (concat append-serv)))))
            ret-val)))
@@ -1022,7 +1053,7 @@ Don't cache if nil.")
       (if (not (string-match
                "^2" (setq response (elmo-nntp-read-raw-response
                                     session))))
-         (error (concat "NNTP error: " response))))))
+         (error "NNTP error: %s" response)))))
 
 (defsubst elmo-nntp-send-data-line (session line)
   "Send LINE to SESSION."
@@ -1515,26 +1546,15 @@ Returns a list of cons cells like (NUMBER . VALUE)"
                                                      &optional ignore-flags)
   (elmo-nntp-folder-update-crosspost-message-alist folder numbers))
 
-(luna-define-method elmo-folder-process-crosspost ((folder elmo-nntp-folder)
-                                                  &optional
-                                                  number-alist)
-  (elmo-nntp-folder-process-crosspost folder number-alist))
-
-(defun elmo-nntp-folder-process-crosspost (folder number-alist)
+(defsubst elmo-nntp-folder-process-crosspost (folder)
 ;;    2.1. At elmo-folder-process-crosspost, setup `reads' slot from
 ;;         `elmo-crosspost-message-alist'.
 ;;    2.2. remove crosspost entry for current newsgroup from
 ;;         `elmo-crosspost-message-alist'.
   (let (cross-deletes reads entity ngs)
     (dolist (cross elmo-crosspost-message-alist)
-      (if number-alist
-         (when (setq entity (rassoc (nth 0 cross) number-alist))
-           (setq reads (cons (car entity) reads)))
-       (when (setq entity (elmo-msgdb-overview-get-entity
-                           (nth 0 cross)
-                           (elmo-folder-msgdb folder)))
-         (setq reads (cons (elmo-msgdb-overview-entity-get-number entity)
-                           reads))))
+      (when (setq entity (elmo-message-entity folder (nth 0 cross)))
+       (setq reads (cons (elmo-message-entity-number entity) reads)))
       (when entity
        (if (setq ngs (delete (elmo-nntp-folder-group-internal folder)
                              (nth 1 cross)))
@@ -1547,6 +1567,9 @@ Returns a list of cons cells like (NUMBER . VALUE)"
                                          elmo-crosspost-message-alist)))
     (elmo-nntp-folder-set-reads-internal folder reads)))
 
+(luna-define-method elmo-folder-process-crosspost ((folder elmo-nntp-folder))
+  (elmo-nntp-folder-process-crosspost folder))
+
 (luna-define-method elmo-folder-list-unreads :around ((folder
                                                       elmo-nntp-folder))
   ;;    2.3. elmo-folder-list-unreads return unread message list according to
index 87c477a..feae2df 100644 (file)
   (elmo-message-fetch (elmo-pipe-folder-dst-internal folder)
                      number strategy section outbuf unseen))
 
+(luna-define-method elmo-folder-clear :after ((folder elmo-pipe-folder)
+                                             &optional keep-killed)
+  (unless keep-killed
+    (elmo-pipe-folder-copied-list-save folder nil)))
+
 (luna-define-method elmo-folder-delete-messages ((folder elmo-pipe-folder)
                                                 numbers)
   (elmo-folder-delete-messages (elmo-pipe-folder-dst-internal folder)
index b606f15..3f3b792 100644 (file)
@@ -193,8 +193,8 @@ update overview when message is fetched."
 
 (defun elmo-shimbun-get-headers (folder)
   (let* ((shimbun (elmo-shimbun-folder-shimbun-internal folder))
-        (key (concat (shimbun-server-internal shimbun)
-                     "." (shimbun-current-group-internal shimbun)))
+        (key (concat (shimbun-server shimbun)
+                     "." (shimbun-current-group shimbun)))
         (elmo-hash-minimum-size 63)
         headers)
     ;; new headers.
@@ -284,30 +284,30 @@ update overview when message is fetched."
   (elmo-plugged-p
    "shimbun"
    (and (elmo-shimbun-folder-shimbun-internal folder)
-       (shimbun-server-internal (elmo-shimbun-folder-shimbun-internal folder)))
+       (shimbun-server (elmo-shimbun-folder-shimbun-internal folder)))
    nil nil
    (and (elmo-shimbun-folder-shimbun-internal folder)
-       (shimbun-server-internal (elmo-shimbun-folder-shimbun-internal folder)))))
+       (shimbun-server (elmo-shimbun-folder-shimbun-internal folder)))))
 
 (luna-define-method elmo-folder-set-plugged ((folder elmo-shimbun-folder)
                                             plugged &optional add)
   (elmo-set-plugged plugged
                    "shimbun"
-                   (shimbun-server-internal
+                   (shimbun-server
                     (elmo-shimbun-folder-shimbun-internal folder))
                    nil nil nil
-                   (shimbun-server-internal
+                   (shimbun-server
                     (elmo-shimbun-folder-shimbun-internal folder))
                    add))
 
 (luna-define-method elmo-net-port-info ((folder elmo-shimbun-folder))
   (list "shimbun"
-       (shimbun-server-internal
+       (shimbun-server
         (elmo-shimbun-folder-shimbun-internal folder))
        nil))
 
 (luna-define-method elmo-folder-check :around ((folder elmo-shimbun-folder))
-  (when (shimbun-current-group-internal
+  (when (shimbun-current-group
         (elmo-shimbun-folder-shimbun-internal folder))
     (when (and (elmo-folder-plugged-p folder)
               (elmo-shimbun-headers-check-p folder))
@@ -325,7 +325,7 @@ update overview when message is fetched."
 (luna-define-method elmo-folder-expand-msgdb-path ((folder
                                                    elmo-shimbun-folder))
   (expand-file-name
-   (concat (shimbun-server-internal
+   (concat (shimbun-server
            (elmo-shimbun-folder-shimbun-internal folder))
           "/"
           (elmo-shimbun-folder-group-internal folder))
@@ -498,7 +498,7 @@ update overview when message is fetched."
             (mapcar
              (lambda (fld)
                (concat prefix
-                       (shimbun-server-internal
+                       (shimbun-server
                         (elmo-shimbun-folder-shimbun-internal folder))
                        "." fld))
              (shimbun-groups (elmo-shimbun-folder-shimbun-internal folder)))))
index 79090cb..db175a4 100644 (file)
@@ -294,6 +294,7 @@ If prefix argument ARG is specified, do a reharsal (no harm)."
                      (elmo-message-fetch folder msg
                                          (elmo-make-fetch-strategy 'entire)
                                          nil (current-buffer) 'unread))
+               (run-hooks 'elmo-split-fetch-hook)
                (setq elmo-split-message-entity (mime-parse-buffer))
                (catch 'terminate
                  (dolist (rule (append elmo-split-rule default-rule))
@@ -370,7 +371,7 @@ If prefix argument ARG is specified, do a reharsal (no harm)."
                                       "  Test: do nothing\n")
                                      ((function action)
                                       (format "  Test: function:%s\n"
-                                              (symbol-name action)))
+                                              (prin1-to-string action)))
                                      (t
                                       "  ERROR: wrong action specified\n"))
                                   (cond
index 309a424..57cd392 100644 (file)
@@ -765,7 +765,7 @@ the directory becomes empty after deletion."
 
 (defun elmo-list-diff (list1 list2 &optional mes)
   (if mes
-      (message mes))
+      (message "%s" mes))
   (let ((clist1 (copy-sequence list1))
        (clist2 (copy-sequence list2)))
     (while list2
@@ -775,7 +775,7 @@ the directory becomes empty after deletion."
       (setq clist2 (delq (car list1) clist2))
       (setq list1 (cdr list1)))
     (if mes
-       (message (concat mes "done")))
+       (message "%sdone" mes))
     (list clist1 clist2)))
 
 (defun elmo-list-bigger-diff (list1 list2 &optional mes)
index d357233..b8b24a1 100644 (file)
@@ -140,7 +140,7 @@ If optional argument NON-PERSISTENT is non-nil, the folder msgdb is not saved."
     (setq class (format "elmo-%s" (symbol-name type)))
     (require (intern class))
     (setq folder (luna-make-entity (intern (concat class "-folder"))
-                                  :type   type
+                                  :type type
                                   :prefix prefix
                                   :name original
                                   :persistent (not non-persistent)))
@@ -159,7 +159,7 @@ If optional argument NON-PERSISTENT is non-nil, the folder msgdb is not saved."
 (luna-define-generic elmo-folder-open (folder &optional load-msgdb)
   "Open and setup (load saved status) FOLDER.
 If optional LOAD-MSGDB is non-nil, msgdb is loaded.
-(otherwise, msgdb is loaded on-demand)")
+\(otherwise, msgdb is loaded on-demand)")
 
 (luna-define-generic elmo-folder-open-internal (folder)
   "Open FOLDER (without loading saved folder status).")
@@ -618,9 +618,7 @@ FIELD is a symbol of the field name.")
 (luna-define-generic elmo-message-folder (folder number)
   "Get primitive folder of the message.")
 
-(luna-define-generic elmo-folder-process-crosspost (folder
-                                                   &optional
-                                                   number-alist)
+(luna-define-generic elmo-folder-process-crosspost (folder)
   "Process crosspost for FOLDER.
 If NUMBER-ALIST is set, it is used as number-alist.
 Return a cons cell of (NUMBER-CROSSPOSTS . NEW-MARK-ALIST).")
@@ -1142,12 +1140,21 @@ If CACHED is t, message is set as cached."
                               (elmo-message-use-cache-p folder number))
     (elmo-folder-set-mark-modified-internal folder t)))
 
-;;; APIs for message-entity 
-(luna-define-generic elmo-folder-list-message-entities (folder)
-  "Return the all list of message-entity structure of FOLDER.")
-
-(luna-define-method elmo-folder-list-message-entities ((folder elmo-folder))
-  (elmo-msgdb-get-overview (elmo-folder-msgdb folder)))
+(luna-define-generic elmo-folder-list-message-entities (folder
+                                                       &optional numbers
+                                                       in-msgdb)
+  "List message-entity structure of FOLDER.
+If optional NUMBERS is specified, only the corresponding entities are
+retrieved.
+If second optional IN-MSGDB is specified, only entities in the msgdb are
+retreived (don't retrieve entities from folder).")
+
+(luna-define-method elmo-folder-list-message-entities ((folder elmo-folder)
+                                                      &optional numbers
+                                                      in-msgdb)
+  (if numbers
+      (mapcar (lambda (x) (elmo-message-entity folder x)) numbers)
+    (elmo-msgdb-get-overview (elmo-folder-msgdb folder))))
 
 (luna-define-generic elmo-message-entity (folder key)
   "Return the message-entity structure which matches to the KEY.
@@ -1311,12 +1318,15 @@ FIELD is a symbol of the field."
                           number
                           'answered))))
 
-(luna-define-method elmo-folder-process-crosspost ((folder elmo-folder)
-                                                  &optional
-                                                  number-alist)
+(luna-define-method elmo-folder-process-crosspost ((folder elmo-folder))
   ;; Do nothing.
   )
 
+;;(luna-define-generic elmo-folder-append-message-entity (folder entity
+;;                                                            &optional
+;;                                                            flag-table)
+;;  "Append ENTITY to the folder.")
+
 (defun elmo-generic-folder-append-msgdb (folder append-msgdb)
   (if append-msgdb
       (let* ((number-alist (elmo-msgdb-get-number-alist append-msgdb))
@@ -1448,30 +1458,30 @@ FIELD is a symbol of the field."
     (elmo-folder-set-killed-list-internal folder nil))
   (elmo-folder-set-msgdb-internal folder (elmo-msgdb-clear)))
 
-(defun elmo-folder-synchronize (folder
-                               &optional ignore-msgdb
-                               no-check)
+(luna-define-generic elmo-folder-synchronize (folder
+                                             &optional ignore-msgdb
+                                             no-check)
   "Synchronize the folder data to the newest status.
 FOLDER is the ELMO folder structure.
+
 If optional IGNORE-MSGDB is non-nil, current msgdb is thrown away except
 flag status. If IGNORE-MSGDB is 'visible-only, only visible messages
 \(the messages which are not in the killed-list\) are thrown away and
 synchronized.
 If NO-CHECK is non-nil, rechecking folder is skipped.
-
 Return a list of a cross-posted message number.
-If update process is interrupted, return nil."
+If update process is interrupted, return nil.")
+                                             
+(luna-define-method elmo-folder-synchronize ((folder elmo-folder)
+                                            &optional ignore-msgdb no-check)
   (let ((killed-list (elmo-folder-killed-list-internal folder))
        (before-append t)
-       number-alist mark-alist
+       number-alist
        old-msgdb diff diff-2 delete-list new-list new-msgdb mark
-       flag-table crossed after-append)
+       flag-table crossed after-append numbers)
     (setq old-msgdb (elmo-folder-msgdb folder))
     (setq flag-table (elmo-flag-table-load (elmo-folder-msgdb-path folder)))
-    (setq number-alist (elmo-msgdb-get-number-alist
-                       (elmo-folder-msgdb folder)))
-    (setq mark-alist (elmo-msgdb-get-mark-alist
-                     (elmo-folder-msgdb folder)))
+    (setq numbers (sort (elmo-folder-list-messages folder nil t) '<))
     (when ignore-msgdb
       (elmo-msgdb-flag-table (elmo-folder-msgdb folder) flag-table)
       (elmo-folder-clear folder (eq ignore-msgdb 'visible-only)))
@@ -1484,11 +1494,7 @@ If update process is interrupted, return nil."
          (setq diff (elmo-list-diff (elmo-folder-list-messages
                                      folder
                                      (eq 'visible-only ignore-msgdb))
-                                    (unless ignore-msgdb
-                                      (sort (mapcar
-                                             'car
-                                             number-alist)
-                                            '<))))
+                                    numbers))
          (message "Checking folder diff...done")
          (setq new-list (elmo-folder-confirm-appends (car diff)))
          ;; Set killed list.
@@ -1509,11 +1515,11 @@ If update process is interrupted, return nil."
            (if delete-list (elmo-msgdb-delete-msgs
                             (elmo-folder-msgdb folder) delete-list))
            (when new-list
-             (setq new-msgdb (elmo-folder-msgdb-create
-                              folder new-list flag-table))
              (elmo-msgdb-change-mark (elmo-folder-msgdb folder)
                                      elmo-msgdb-new-mark
                                      elmo-msgdb-unread-uncached-mark)
+             (setq new-msgdb (elmo-folder-msgdb-create
+                              folder new-list flag-table))
              ;; Clear flag-table
              (if (elmo-folder-persistent-p folder)
                  (elmo-flag-table-save (elmo-folder-msgdb-path folder)
index e8b944b..1d6d65f 100644 (file)
@@ -509,12 +509,12 @@ DN is the distinguished name of the entry to delete."
                       nil (current-buffer) t
                       (append arglist
                               (list dn))))
-      (if (integerp ret)
-         (if (not (zerop ret))
-             (error (car (split-string (buffer-string) "\n"))))
-       (if (and (setq ret (buffer-string)); Nemacs
-                (string-match "ldap_delete:" ret))
-           (error (car (split-string ret "\n"))))))))
+      (cond ((integerp ret)
+            (or (zerop ret)
+                (error "%s" (car (split-string (buffer-string) "\n")))))
+           ((and (setq ret (buffer-string)); Nemacs
+                 (string-match "ldap_delete:" ret))
+            (error "%s" (car (split-string ret "\n"))))))))
 
 (defmacro ldap/ldif-insert-field (attr value)
   (` (if (not (ldap/ldif-safe-string-p (, value)))
@@ -567,12 +567,12 @@ or `replace'.  ATTR is the LDAP attribute type to modify."
                       ldap-modify-program
                       t t nil
                       arglist))
-      (if (integerp ret)
-         (if (not (zerop ret))
-             (error (car (split-string (buffer-string) "\n"))))
-       (if (and (setq ret (buffer-string)); Nemacs
-                (string-match "ldap_modify:" ret))
-           (error (car (split-string ret "\n"))))))))
+      (cond ((integerp ret)
+            (or (zerop ret)
+                (error "%s" (car (split-string (buffer-string) "\n")))))
+           ((and (setq ret (buffer-string)); Nemacs
+                 (string-match "ldap_modify:" ret))
+            (error "%s" (car (split-string ret "\n"))))))))
 
 (defun ldap-add (ldap dn entry)
   "Add an entry to an LDAP directory.
@@ -607,12 +607,12 @@ containing attribute/value string pairs."
                       ldap-add-program
                       t t nil
                       arglist))
-      (if (integerp ret)
-         (if (not (zerop ret))
-             (error (car (split-string (buffer-string) "\n"))))
-       (if (and (setq ret (buffer-string)) ; Nemacs
-                (string-match "ldap_add:" ret))
-           (error (car (split-string ret "\n"))))))))
+      (cond ((integerp ret)
+            (or (zerop ret)
+                (error "%s" (car (split-string (buffer-string) "\n")))))
+           ((and (setq ret (buffer-string)) ; Nemacs
+                 (string-match "ldap_add:" ret))
+            (error "%s" (car (split-string ret "\n"))))))))
 
 (defun ldap-search-basic (ldap filter base scope
                               &optional attrs attrsonly withdn verbose)
index 610a989..cedef09 100644 (file)
 ;; Header From:
 ;(setq wl-from "Your Name <e-mail@example.com>")
 
+;; If (system-name) does not return FQDN,
+;; set following as a local domain name without hostname.
+;(setq wl-local-domain "example.com")
+
 ;; User's mail addresses.
 (setq wl-user-mail-address-list
       (list (wl-address-header-extract-address wl-from)
        ;; "ml@example.com" ...
        ))
 
-;; If (system-name) does not return FQDN,
-;; set following as a local domain name without hostname.
-;; ((system-name) "." wl-local-domain is used as domain part of Message-ID
-;; and an argument of HELO in SMTP.
-;(setq wl-local-domain "example.com")
-
-;; Specific domain part for message-id.
-;(setq wl-message-id-domain "hostname.example.com")
-
-;; Use wl-from for generating message-id.
-;; wl-message-id-use-wl-from precedes wl-local-domain and wl-message-id-domain.
-;(setq wl-message-id-use-wl-from t)
-
 ;;; [[ Server Setting ]]
 
 ;; Default IMAP4 server
index 854780a..dd262c2 100644 (file)
 ;; From: \e$B$N@_Dj\e(B
 ;(setq wl-from "Your Name <e-mail@example.com>")
 
+;; (system-name) \e$B$,\e(B FQDN \e$B$rJV$5$J$$>l9g!"\e(B
+;; `wl-local-domain' \e$B$K%[%9%HL>$r=|$$$?%I%a%$%sL>$r@_Dj$7$F$/$@$5$$!#\e(B
+;(setq wl-local-domain "example.com")
+
 ;; \e$B<+J,$N%a!<%k%"%I%l%9$N%j%9%H\e(B
 (setq wl-user-mail-address-list
       (list (wl-address-header-extract-address wl-from)
        ;; "ml@example.com" ...
        ))
 
-;; (system-name) \e$B$,\e(B FQDN \e$B$rJV$5$J$$>l9g!"\e(B
-;; `wl-local-domain' \e$B$K%[%9%HL>$r=|$$$?%I%a%$%sL>$r@_Dj$7$F$/$@$5$$!#\e(B
-;; (system-name)  "." wl-local-domain \e$B$,\e(B Message-ID \e$B$K;HMQ$5$l$^$9!#\e(B
-;(setq wl-local-domain "example.com")
-
-;; Message-ID \e$B$N%I%a%$%s%Q!<%H$r6/@)E*$K;XDj\e(B
-;(setq wl-message-id-domain "hostname.example.com")
-
-;; Message-ID \e$B$N%I%a%$%s%Q!<%H$r\e(B wl-from \e$B$+$i@8@.$7$^$9!#\e(B
-;; global\e$B$J\e(BIP\e$B$r;}$?$J$$>l9g$K;H$C$F$/$@$5$$!#\e(B
-;; wl-local-domain, wl-message-id-domain\e$B$KM%@h$7$^$9!#\e(B
-;(setq wl-message-id-use-wl-from t)
-
 ;;; [[ \e$B%5!<%P$N@_Dj\e(B ]]
 
 ;; IMAP \e$B%5!<%P$N@_Dj\e(B
index 5983303..24a5e8e 100644 (file)
@@ -1,10 +1,20 @@
+2003-07-01  TAKAHASHI Kaoru  <kaoru@kaisei.org>
+
+       * ptexinfmt.el: @verb, @tie, @/ support.
+       (ptexinfmt-broken-facility): Abolish NO-NOTICE argument.
+       Use `ptexinfmt-disable-broken-notice-flag' instead.
+
+2002-12-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * ptexinfmt.el: Modify it not to use APEL functions.
+
 2002-10-10  KOBAYASHI Shinji <kobayashi_shinji@nifty.com>
 
        * bbdb-wl.el (bbdb-wl-get-addresses-1): Call
        `bbdb-wl-canonicalize-full-name-function' after decoding full-name
        string.
        (bbdb-wl-get-addresses-2): Ditto.
-       
+
 2002-09-05  TAKAHASHI Kaoru  <kaoru@kaisei.org>
 
        * ptexinfmt.el: discard @documentdescription.  Support
index 2f5abaa..c54fa38 100644 (file)
@@ -7,6 +7,7 @@
 
 ;; Author: TAKAHASHI Kaoru <kaoru@kaisei.org>
 ;;     Yoshiki Hayashi <yoshiki@xemacs.org>
+;;     Katsumi Yamaoka <yamaoka@jpl.org>
 ;; Maintainer: TAKAHASHI Kaoru <kaoru@kaisei.org>
 ;; Created: 7 Jul 2000
 ;; Keywords: maint, tex, docs, emulation, compatibility
 
 ;; Support texinfmt.el 2.32 or later.
 
+;; Modified by Yamaoka not to use APEL functions.
+
 ;;; Code:
+
+(require 'backquote)
 (require 'texinfmt)
-(require 'poe)
-(require 'broken)
 
 ;;; Broken
 (defvar ptexinfmt-disable-broken-notice-flag t
-  "If non-nil disable notice, when call `broken-facility'.
-This is NO-NOTICE argument in `broken-facility'.")
+  "If non-nil disable notice, when call `ptexinfmt-broken-facility'.
+This is last argument in `ptexinfmt-broken-facility'.")
+
+(put 'ptexinfmt-broken-facility 'lisp-indent-function 'defun)
+(defmacro ptexinfmt-broken-facility (facility docstring assertion
+                                             &optional dummy)
+  "Declare a symbol FACILITY is broken if ASSERTION is nil.
+DOCSTRING will be printed if ASSERTION is nil and
+`ptexinfmt-disable-broken-notice-flag' is nil."
+  (` (let ((facility '(, facility))
+          (docstring (, docstring))
+          (assertion (eval '(, assertion))))
+       (put facility 'broken (not assertion))
+       (if assertion
+          nil
+        (put facility 'broken-docstring docstring)
+        (if ptexinfmt-disable-broken-notice-flag
+            nil
+          (message "BROKEN FACILITY DETECTED: %s" docstring))))))
+
+(put 'ptexinfmt-defun-if-broken 'lisp-indent-function 'defun)
+(defmacro ptexinfmt-defun-if-broken (&rest args)
+  "Redefine a function just like `defun' if it is considered broken."
+  (let ((name (list 'quote (car args))))
+    (setq args (cdr args))
+    (` (prog1
+          (, name)
+        (if (get (, name) 'broken)
+            (defalias (, name)
+              (function (lambda (,@ args)))))))))
+
+(put 'ptexinfmt-defun-if-void 'lisp-indent-function 'defun)
+(defmacro ptexinfmt-defun-if-void (&rest args)
+  "Define a function just like `defun' unless it is already defined."
+  (let ((name (list 'quote (car args))))
+    (setq args (cdr args))
+    (` (prog1
+          (, name)
+        (if (fboundp (, name))
+            nil
+          (defalias (, name)
+            (function (lambda (,@ args)))))))))
+
+(put 'ptexinfmt-defvar-if-void 'lisp-indent-function 'defun)
+(defmacro ptexinfmt-defvar-if-void (&rest args)
+  "Define a variable just like `defvar' unless it is already defined."
+  (let ((name (car args)))
+    (setq args (cdr args))
+    (` (prog1
+          (defvar (, name))
+        (if (boundp '(, name))
+            nil
+          (defvar (, name) (,@ args)))))))
 
 ;; sort -fd
-(broken-facility texinfo-format-printindex
+(ptexinfmt-broken-facility texinfo-format-printindex
   "Can't sort on Mule for Windows."
   (if (and (memq system-type '(windows-nt ms-dos))
 ;;; I don't know version threshold.
 ;;;       (string< texinfmt-version "2.37 of 24 May 1997")
           (boundp 'MULE) (not (featurep 'meadow))) ; Mule for Windows
       nil
-    t)
-  ptexinfmt-disable-broken-notice-flag)
+    t))
 
 ;; @var
-(broken-facility texinfo-format-var
+(ptexinfmt-broken-facility texinfo-format-var
   "Don't perse @var argument."
   (condition-case nil
       (with-temp-buffer
@@ -64,11 +117,10 @@ This is NO-NOTICE argument in `broken-facility'.")
          (insert "@var{@asis{foo}}\n")
          (texinfo-format-expand-region (point-min) (point-max))
          t))
-    (error nil))
-  ptexinfmt-disable-broken-notice-flag)
+    (error nil)))
 
 ;; @xref
-(broken-facility texinfo-format-xref
+(ptexinfmt-broken-facility texinfo-format-xref
   "Can't format @xref, 1st argument is empty."
   (condition-case nil
       (with-temp-buffer
@@ -77,24 +129,22 @@ This is NO-NOTICE argument in `broken-facility'.")
          (insert "@xref{, xref, , file}\n")
          (texinfo-format-expand-region (point-min) (point-max))
          t))
-    (error nil))
-  ptexinfmt-disable-broken-notice-flag)
+    (error nil)))
 
 ;; @uref
-(broken-facility texinfo-format-uref
+(ptexinfmt-broken-facility texinfo-format-uref
   "Parse twice @uref argument."
   (condition-case nil
       (with-temp-buffer
        (let (texinfo-enclosure-list texinfo-alias-list)
          (texinfo-mode)
-         (insert "@uref{mailto:foo@@bar.com}\n")
+         (insert "@uref{mailto:foo@@noncommand.example.com}\n")
          (texinfo-format-expand-region (point-min) (point-max))
          t))
-    (error nil))
-  ptexinfmt-disable-broken-notice-flag)
+    (error nil)))
 
 ;; @multitable
-(broken-facility texinfo-multitable-widths
+(ptexinfmt-broken-facility texinfo-multitable-widths
   "`texinfo-multitable-widths' unsupport wide-char."
   (if (fboundp 'texinfo-multitable-widths)
       (with-temp-buffer
@@ -106,13 +156,11 @@ This is NO-NOTICE argument in `broken-facility'.")
              nil
            t)))
     ;; function definition is void
-    t)
-  ptexinfmt-disable-broken-notice-flag)
+    t))
 
-(broken-facility texinfo-multitable-item
+(ptexinfmt-broken-facility texinfo-multitable-item
   "`texinfo-multitable-item' unsupport wide-char."
-  (if-broken texinfo-multitable-widths nil t)
-  ptexinfmt-disable-broken-notice-flag)
+  (not (get 'texinfo-multitable-widths 'broken)))
 
 
 ;;; Hardcopy and HTML (discard)
@@ -152,12 +200,17 @@ This is NO-NOTICE argument in `broken-facility'.")
 (put 'page 'texinfo-format 'texinfo-discard-line)
 (put 'hyphenation 'texinfo-format 'texinfo-discard-command-and-arg)
 
+;; @tie{} (makeinfo 4.3 or later)
+(put 'tie 'texinfo-format 'texinfo-format-tie)
+(ptexinfmt-defun-if-void texinfo-format-tie ()
+  (texinfo-parse-arg-discard)
+  (insert " "))
 
 \f
 ;;; Directory File
 ;; @direcategory
 (put 'dircategory 'texinfo-format 'texinfo-format-dircategory)
-(defun-maybe texinfo-format-dircategory ()
+(ptexinfmt-defun-if-void texinfo-format-dircategory ()
   (let ((str (texinfo-parse-arg-discard)))
     (delete-region (point)
                   (progn
@@ -167,13 +220,13 @@ This is NO-NOTICE argument in `broken-facility'.")
 
 ;; @direntry
 (put 'direntry 'texinfo-format 'texinfo-format-direntry)
-(defun-maybe texinfo-format-direntry ()
+(ptexinfmt-defun-if-void texinfo-format-direntry ()
   (texinfo-push-stack 'direntry nil)
   (texinfo-discard-line)
   (insert "START-INFO-DIR-ENTRY\n"))
 
 (put 'direntry 'texinfo-end 'texinfo-end-direntry)
-(defun-maybe texinfo-end-direntry ()
+(ptexinfmt-defun-if-void texinfo-end-direntry ()
   (texinfo-discard-command)
   (insert "END-INFO-DIR-ENTRY\n\n")
   (texinfo-pop-stack 'direntry))
@@ -213,14 +266,14 @@ This is NO-NOTICE argument in `broken-facility'.")
 
 ;; @ifnotinfo ... @end ifnotinfo (makeinfo 3.11 or later)
 (put 'ifnotinfo 'texinfo-format 'texinfo-format-ifnotinfo)
-(defun-maybe texinfo-format-ifnotinfo ()
+(ptexinfmt-defun-if-void texinfo-format-ifnotinfo ()
   (delete-region texinfo-command-start
                 (progn (re-search-forward "@end ifnotinfo[ \t]*\n")
                        (point))))
 
 ;; @html ... @end html (makeinfo 3.11 or later)
 (put 'html 'texinfo-format 'texinfo-format-html)
-(defun-maybe texinfo-format-html ()
+(ptexinfmt-defun-if-void texinfo-format-html ()
   (delete-region texinfo-command-start
                 (progn (re-search-forward "@end html[ \t]*\n")
                        (point))))
@@ -234,7 +287,7 @@ This is NO-NOTICE argument in `broken-facility'.")
 
 ;; @ifplaintext ... @end ifplaintext (makeinfo 4.2 or later)
 (put 'ifplaintext 'texinfo-format 'texinfo-format-ifplaintext)
-(defun-maybe texinfo-format-ifplaintext ()
+(ptexinfmt-defun-if-void texinfo-format-ifplaintext ()
   (delete-region texinfo-command-start
                 (progn (re-search-forward "@end ifplaintext[ \t]*\n")
                        (point))))
@@ -250,22 +303,20 @@ This is NO-NOTICE argument in `broken-facility'.")
 ;; @acronym
 (put 'acronym 'texinfo-format 'texinfo-format-var)
 
-(when-broken texinfo-format-var
-  (fmakunbound 'texinfo-format-var))
-(defun-maybe texinfo-format-var ()
+(ptexinfmt-defun-if-broken texinfo-format-var ()
   (let ((arg (texinfo-parse-expanded-arg)))
     (texinfo-discard-command)
     (insert (upcase arg))))
 
 ;; @key
 (put 'key 'texinfo-format 'texinfo-format-key)
-(defun-maybe texinfo-format-key ()
+(ptexinfmt-defun-if-void texinfo-format-key ()
   (insert (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @email{EMAIL-ADDRESS[, DISPLAYED-TEXT]}
 (put 'email 'texinfo-format 'texinfo-format-email)
-(defun-maybe texinfo-format-email ()
+(ptexinfmt-defun-if-void texinfo-format-email ()
   "Format EMAIL-ADDRESS and optional DISPLAYED-TXT.
 Insert < ... > around EMAIL-ADDRESS."
   (let ((args (texinfo-format-parse-args)))
@@ -277,7 +328,7 @@ Insert < ... > around EMAIL-ADDRESS."
 
 ;; @option
 (put 'option 'texinfo-format 'texinfo-format-option)
-(defun texinfo-format-option ()
+(ptexinfmt-defun-if-void texinfo-format-option ()
   "Insert ` ... ' around arg unless inside a table; in that case, no quotes."
   ;; `looking-at-backward' not available in v. 18.57, 20.2
   ;; searched-for character is a control-H
@@ -288,168 +339,193 @@ Insert < ... > around EMAIL-ADDRESS."
     (insert (texinfo-parse-arg-discard)))
   (goto-char texinfo-command-start))
 
+;; @verb{<char>TEXT<char>}  (makeinfo 4.1 or later)
+(put 'verb 'texinfo-format 'texinfo-format-verb)
+(ptexinfmt-defun-if-void texinfo-format-verb ()
+  "Format text between non-quoted unique delimiter characters verbatim.
+Enclose the verbatim text, including the delimiters, in braces.  Print
+text exactly as written (but not the delimiters) in a fixed-width.
+
+For example, @verb\{|@|\} results in @ and
+@verb\{+@'e?`!`+} results in @'e?`!`."
+
+  (let ((delimiter (buffer-substring-no-properties
+                   (1+ texinfo-command-end) (+ 2 texinfo-command-end))))
+    (unless (looking-at "{")
+      (error "Not found: @verb start brace"))
+    (delete-region texinfo-command-start (+ 2 texinfo-command-end))
+    (search-forward  delimiter))
+  (delete-backward-char 1)
+  (unless (looking-at "}")
+    (error "Not found: @verb end brace"))
+  (delete-char 1))
 
 \f
 ;;; Accents and Special characters
 ;; @pounds{}   ==>     #       Pounds Sterling
 (put 'pounds 'texinfo-format 'texinfo-format-pounds)
-(defun-maybe texinfo-format-pounds ()
+(ptexinfmt-defun-if-void texinfo-format-pounds ()
   (texinfo-parse-arg-discard)
   (insert "#"))
 
 ;; @OE{}       ==>     OE      French-OE-ligature
 (put 'OE 'texinfo-format 'texinfo-format-French-OE-ligature)
-(defun-maybe texinfo-format-French-OE-ligature ()
+(ptexinfmt-defun-if-void texinfo-format-French-OE-ligature ()
   (insert "OE" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @oe{}       ==>     oe
 (put 'oe 'texinfo-format 'texinfo-format-French-oe-ligature)
-(defun-maybe texinfo-format-French-oe-ligature () ; lower case
+(ptexinfmt-defun-if-void texinfo-format-French-oe-ligature () ; lower case
   (insert "oe" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @AA{}       ==>     AA      Scandinavian-A-with-circle
 (put 'AA 'texinfo-format 'texinfo-format-Scandinavian-A-with-circle)
-(defun-maybe texinfo-format-Scandinavian-A-with-circle ()
+(ptexinfmt-defun-if-void texinfo-format-Scandinavian-A-with-circle ()
   (insert "AA" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @aa{}       ==>     aa
 (put 'aa 'texinfo-format 'texinfo-format-Scandinavian-a-with-circle)
-(defun-maybe texinfo-format-Scandinavian-a-with-circle () ; lower case
+(ptexinfmt-defun-if-void texinfo-format-Scandinavian-a-with-circle () ; lower case
   (insert "aa" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @AE{}       ==>     AE      Latin-Scandinavian-AE
 (put 'AE 'texinfo-format 'texinfo-format-Latin-Scandinavian-AE)
-(defun-maybe texinfo-format-Latin-Scandinavian-AE ()
+(ptexinfmt-defun-if-void texinfo-format-Latin-Scandinavian-AE ()
   (insert "AE" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @ae{}       ==>     ae
 (put 'ae 'texinfo-format 'texinfo-format-Latin-Scandinavian-ae)
-(defun-maybe texinfo-format-Latin-Scandinavian-ae () ; lower case
+(ptexinfmt-defun-if-void texinfo-format-Latin-Scandinavian-ae () ; lower case
   (insert "ae" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @ss{}       ==>     ss      German-sharp-S
 (put 'ss 'texinfo-format 'texinfo-format-German-sharp-S)
-(defun-maybe texinfo-format-German-sharp-S ()
+(ptexinfmt-defun-if-void texinfo-format-German-sharp-S ()
   (insert "ss" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @questiondown{}     ==>     ?       upside-down-question-mark
 (put 'questiondown 'texinfo-format 'texinfo-format-upside-down-question-mark)
-(defun-maybe texinfo-format-upside-down-question-mark ()
+(ptexinfmt-defun-if-void texinfo-format-upside-down-question-mark ()
   (insert "?" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @exclamdown{}       ==>     !       upside-down-exclamation-mark
 (put 'exclamdown 'texinfo-format 'texinfo-format-upside-down-exclamation-mark)
-(defun-maybe texinfo-format-upside-down-exclamation-mark ()
+(ptexinfmt-defun-if-void texinfo-format-upside-down-exclamation-mark ()
   (insert "!" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @L{}                ==>     L/      Polish suppressed-L (Lslash)
 (put 'L 'texinfo-format 'texinfo-format-Polish-suppressed-L)
-(defun-maybe texinfo-format-Polish-suppressed-L ()
+(ptexinfmt-defun-if-void texinfo-format-Polish-suppressed-L ()
   (insert (texinfo-parse-arg-discard) "/L")
   (goto-char texinfo-command-start))
 
 ;; @l{}                ==>     l/      Polish suppressed-L (Lslash) (lower case)
 (put 'l 'texinfo-format 'texinfo-format-Polish-suppressed-l-lower-case)
-(defun-maybe texinfo-format-Polish-suppressed-l-lower-case ()
+(ptexinfmt-defun-if-void texinfo-format-Polish-suppressed-l-lower-case ()
   (insert (texinfo-parse-arg-discard) "/l")
   (goto-char texinfo-command-start))
 
 ;; @O{}                ==>     O/      Scandinavian O-with-slash
 (put 'O 'texinfo-format 'texinfo-format-Scandinavian-O-with-slash)
-(defun-maybe texinfo-format-Scandinavian-O-with-slash ()
+(ptexinfmt-defun-if-void texinfo-format-Scandinavian-O-with-slash ()
   (insert (texinfo-parse-arg-discard) "O/")
   (goto-char texinfo-command-start))
 
 ;; @o{}                ==>     o/      Scandinavian O-with-slash (lower case)
 (put 'o 'texinfo-format 'texinfo-format-Scandinavian-o-with-slash-lower-case)
-(defun-maybe texinfo-format-Scandinavian-o-with-slash-lower-case ()
+(ptexinfmt-defun-if-void texinfo-format-Scandinavian-o-with-slash-lower-case ()
   (insert (texinfo-parse-arg-discard) "o/")
   (goto-char texinfo-command-start))
 
 ;; @,{c}       ==>     c,      cedilla accent
 (put ', 'texinfo-format 'texinfo-format-cedilla-accent)
-(defun-maybe texinfo-format-cedilla-accent ()
+(ptexinfmt-defun-if-void texinfo-format-cedilla-accent ()
   (insert (texinfo-parse-arg-discard) ",")
   (goto-char texinfo-command-start))
 
 
 ;; @dotaccent{o}       ==>     .o      overdot-accent
 (put 'dotaccent 'texinfo-format 'texinfo-format-overdot-accent)
-(defun-maybe texinfo-format-overdot-accent ()
+(ptexinfmt-defun-if-void texinfo-format-overdot-accent ()
   (insert "." (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @ubaraccent{o}      ==>     _o      underbar-accent
 (put 'ubaraccent 'texinfo-format 'texinfo-format-underbar-accent)
-(defun-maybe texinfo-format-underbar-accent ()
+(ptexinfmt-defun-if-void texinfo-format-underbar-accent ()
   (insert "_" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @udotaccent{o}      ==>     o-.     underdot-accent
 (put 'udotaccent 'texinfo-format 'texinfo-format-underdot-accent)
-(defun-maybe texinfo-format-underdot-accent ()
+(ptexinfmt-defun-if-void texinfo-format-underdot-accent ()
   (insert (texinfo-parse-arg-discard) "-.")
   (goto-char texinfo-command-start))
 
 ;; @H{o}       ==>     ""o     long Hungarian umlaut
 (put 'H 'texinfo-format 'texinfo-format-long-Hungarian-umlaut)
-(defun-maybe texinfo-format-long-Hungarian-umlaut ()
+(ptexinfmt-defun-if-void texinfo-format-long-Hungarian-umlaut ()
   (insert "\"\"" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @ringaccent{o}      ==>     *o      ring accent
 (put 'ringaccent 'texinfo-format 'texinfo-format-ring-accent)
-(defun-maybe texinfo-format-ring-accent ()
+(ptexinfmt-defun-if-void texinfo-format-ring-accent ()
   (insert "*" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @tieaccent{oo}      ==>     [oo     tie after accent
 (put 'tieaccent 'texinfo-format 'texinfo-format-tie-after-accent)
-(defun-maybe texinfo-format-tie-after-accent ()
+(ptexinfmt-defun-if-void texinfo-format-tie-after-accent ()
   (insert "[" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @u{o}       ==>     (o      breve accent
 (put 'u 'texinfo-format 'texinfo-format-breve-accent)
-(defun-maybe texinfo-format-breve-accent ()
+(ptexinfmt-defun-if-void texinfo-format-breve-accent ()
   (insert "(" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @v{o}       ==>     <o      hacek accent
 (put 'v 'texinfo-format 'texinfo-format-hacek-accent)
-(defun-maybe texinfo-format-hacek-accent ()
+(ptexinfmt-defun-if-void texinfo-format-hacek-accent ()
   (insert "<" (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @dotless{i} ==>     i       dotless i and dotless j
 (put 'dotless 'texinfo-format 'texinfo-format-dotless)
-(defun-maybe texinfo-format-dotless ()
+(ptexinfmt-defun-if-void texinfo-format-dotless ()
   (insert (texinfo-parse-arg-discard))
   (goto-char texinfo-command-start))
 
 ;; @.
 (put '\. 'texinfo-format 'texinfo-format-\.)
-(defun-maybe texinfo-format-\. ()
+(ptexinfmt-defun-if-void texinfo-format-\. ()
   (texinfo-discard-command)
   (insert "."))
 
 ;; @:
 (put '\: 'texinfo-format 'texinfo-format-\:)
-(defun-maybe texinfo-format-\: ()
+(ptexinfmt-defun-if-void texinfo-format-\: ()
   (texinfo-discard-command))
 
 ;; @-
 (put '\- 'texinfo-format 'texinfo-format-soft-hyphen)
-(defun-maybe texinfo-format-soft-hyphen ()
+(ptexinfmt-defun-if-void texinfo-format-soft-hyphen ()
+  (texinfo-discard-command))
+
+;; @/
+(put '\/ 'texinfo-format 'texinfo-format-\/)
+(ptexinfmt-defun-if-void texinfo-format-\/ ()
   (texinfo-discard-command))
 
 \f
@@ -457,9 +533,7 @@ Insert < ... > around EMAIL-ADDRESS."
 ;; @ref, @xref
 (put 'ref 'texinfo-format 'texinfo-format-xref)
 
-(when-broken texinfo-format-xref
-  (fmakunbound 'texinfo-format-xref))
-(defun-maybe texinfo-format-xref ()
+(ptexinfmt-defun-if-broken texinfo-format-xref ()
   (let ((args (texinfo-format-parse-args)))
     (texinfo-discard-command)
     (insert "*Note ")
@@ -472,11 +546,9 @@ Insert < ... > around EMAIL-ADDRESS."
        (unless (null (nth 0 args))
          (insert (nth 0 args)))))))
 
-;; @uref
+;; @uref{URL [,TEXT] [,REPLACEMENT]}
 (put 'uref 'texinfo-format 'texinfo-format-uref)
-(when-broken texinfo-format-uref
-  (fmakunbound 'texinfo-format-uref))
-(defun-maybe texinfo-format-uref ()
+(ptexinfmt-defun-if-broken texinfo-format-uref ()
   "Format URL and optional URL-TITLE.
 Insert ` ... ' around URL if no URL-TITLE argument;
 otherwise, insert URL-TITLE followed by URL in parentheses."
@@ -489,7 +561,7 @@ otherwise, insert URL-TITLE followed by URL in parentheses."
 
 ;; @inforef
 (put 'inforef 'texinfo-format 'texinfo-format-inforef)
-(defun-maybe texinfo-format-inforef ()
+(ptexinfmt-defun-if-void texinfo-format-inforef ()
   (let ((args (texinfo-format-parse-args)))
     (texinfo-discard-command)
     (if (nth 1 args)
@@ -510,7 +582,7 @@ otherwise, insert URL-TITLE followed by URL in parentheses."
 ;;; New command definition
 ;; @alias NEW=EXISTING
 (put 'alias 'texinfo-format 'texinfo-alias)
-(defun-maybe texinfo-alias ()
+(ptexinfmt-defun-if-void texinfo-alias ()
   (let ((start (1- (point)))
        args)
     (skip-chars-forward " ")
@@ -526,10 +598,21 @@ otherwise, insert URL-TITLE followed by URL in parentheses."
       (texinfo-discard-command))))
 
 \f
+;;; Indent
+;; @exampleindent INDENT  (makeinfo 4.0 or later)
+
+;; @paragraphindent INDENT  (makeinfo 4.0 or later)
+;; INDENT: asis, 0, n
+
+;; @firstparagraphindent WORD   (makeinfo 4.6 or later)
+;; WORD: none, insert
+
+
+\f
 ;;; Special
-;; @image{FILENAME, [WIDTH], [HEIGHT]}
+;; @image{FILENAME [, WIDTH] [, HEIGHT]}
 (put 'image 'texinfo-format 'texinfo-format-image)
-(defun-maybe texinfo-format-image ()
+(ptexinfmt-defun-if-void texinfo-format-image ()
   ;; I don't know makeinfo parse FILENAME.
   (let ((args (texinfo-format-parse-args))
        filename)
@@ -544,16 +627,15 @@ otherwise, insert URL-TITLE followed by URL in parentheses."
     (message "Reading included file: %s...done" filename)))
 
 
-;; @exampleindent
-
-
 \f
 ;;; @multitable ... @end multitable
-(defvar-maybe texinfo-extra-inter-column-width 0
+(ptexinfmt-defvar-if-void texinfo-extra-inter-column-width 0
   "*Number of extra spaces between entries (columns) in @multitable.")
 
-(defvar-maybe texinfo-multitable-buffer-name "*multitable-temporary-buffer*")
-(defvar-maybe texinfo-multitable-rectangle-name "texinfo-multitable-temp-")
+(ptexinfmt-defvar-if-void texinfo-multitable-buffer-name
+  "*multitable-temporary-buffer*")
+(ptexinfmt-defvar-if-void texinfo-multitable-rectangle-name
+  "texinfo-multitable-temp-")
 
 ;; These commands are defined in texinfo.tex for printed output.
 (put 'multitableparskip 'texinfo-format 'texinfo-discard-line-with-args)
@@ -563,7 +645,7 @@ otherwise, insert URL-TITLE followed by URL in parentheses."
 
 (put 'multitable 'texinfo-format 'texinfo-multitable)
 
-(defun-maybe texinfo-multitable ()
+(ptexinfmt-defun-if-void texinfo-multitable ()
   "Produce multi-column tables."
 
 ;; This function pushes information onto the `texinfo-stack'.
@@ -580,15 +662,12 @@ otherwise, insert URL-TITLE followed by URL in parentheses."
   (texinfo-discard-line-with-args))
 
 (put 'multitable 'texinfo-end 'texinfo-end-multitable)
-(defun-maybe texinfo-end-multitable ()
+(ptexinfmt-defun-if-void texinfo-end-multitable ()
   "Discard the @end multitable line and pop the stack of multitable."
   (texinfo-discard-command)
   (texinfo-pop-stack 'multitable))
 
-(when-broken texinfo-multitable-widths
-  (fmakunbound 'texinfo-multitable-widths))
-
-(defun-maybe texinfo-multitable-widths ()
+(ptexinfmt-defun-if-broken texinfo-multitable-widths ()
   "Return list of widths of each column in a multi-column table."
   (let (texinfo-multitable-width-list)
     ;; Fractions format:
@@ -606,107 +685,106 @@ otherwise, insert URL-TITLE followed by URL in parentheses."
      ((looking-at "@columnfractions")
       (forward-word 1)
       (while (not (eolp))
-        (setq texinfo-multitable-width-list
-              (cons
-               (truncate
-                (1-
-                 (* fill-column (read (get-buffer (current-buffer))))))
-               texinfo-multitable-width-list))))
+       (setq texinfo-multitable-width-list
+             (cons
+              (truncate
+               (1-
+                (* fill-column (read (get-buffer (current-buffer))))))
+              texinfo-multitable-width-list))))
      ;;
      ;; Case 2: {Column 1 template} {Column 2} {Column 3 example}
      ((looking-at "{")
       (let ((start-of-templates (point)))
-        (while (not (eolp))
-          (skip-chars-forward " \t")
-          (let* ((start-of-template (1+ (point)))
-                 (end-of-template
-                 ;; forward-sexp works with braces in Texinfo mode
-                  (progn (forward-sexp 1) (1- (point)))))
-            (setq texinfo-multitable-width-list
-                 (cons (- (progn (goto-char end-of-template) (current-column))
-                          (progn (goto-char start-of-template) (current-column)))
-                        texinfo-multitable-width-list))
-            ;; Remove carriage return from within a template, if any.
-            ;; This helps those those who want to use more than
-            ;; one line's worth of words in @multitable line.
-            (narrow-to-region start-of-template end-of-template)
-            (goto-char (point-min))
-            (while (search-forward "
-" nil t)
-              (delete-char -1))
-            (goto-char (point-max))
-            (widen)
-            (forward-char 1)))))
+       (while (not (eolp))
+         (skip-chars-forward " \t")
+         (let* ((start-of-template (1+ (point)))
+                (end-of-template
+                 ;; forward-sexp works with braces in Texinfo mode
+                 (progn (forward-sexp 1) (1- (point)))))
+           (setq texinfo-multitable-width-list
+                 (cons (- (progn
+                            (goto-char end-of-template)
+                            (current-column))
+                          (progn
+                            (goto-char start-of-template)
+                            (current-column)))
+                       texinfo-multitable-width-list))
+           ;; Remove carriage return from within a template, if any.
+           ;; This helps those those who want to use more than
+           ;; one line's worth of words in @multitable line.
+           (narrow-to-region start-of-template end-of-template)
+           (goto-char (point-min))
+           (while (search-forward "\n" nil t)
+             (delete-char -1))
+           (goto-char (point-max))
+           (widen)
+           (forward-char 1)))))
      ;;
      ;; Case 3: Trouble
      (t
-      (error
-       "You probably need to specify column widths for @multitable correctly")))
+      (error "\
+You probably need to specify column widths for @multitable correctly")))
     ;; Check whether columns fit on page.
     (let ((desired-columns
-           (+
-            ;; between column spaces
-            (length texinfo-multitable-width-list)
-            ;; additional between column spaces, if any
-            texinfo-extra-inter-column-width
-            ;; sum of spaces for each entry
-            (apply '+ texinfo-multitable-width-list))))
+          (+
+           ;; between column spaces
+           (length texinfo-multitable-width-list)
+           ;; additional between column spaces, if any
+           texinfo-extra-inter-column-width
+           ;; sum of spaces for each entry
+           (apply '+ texinfo-multitable-width-list))))
       (if (> desired-columns fill-column)
-          (error
-           (format
-            "Multi-column table width, %d chars, is greater than page width, %d chars."
-            desired-columns fill-column))))
+         (error (format "\
+Multi-column table width, %d chars, is greater than page width, %d chars."
+                        desired-columns fill-column))))
     texinfo-multitable-width-list))
 
 ;; @item  A1  @tab  A2  @tab  A3
-(defun-maybe texinfo-multitable-extract-row ()
+(ptexinfmt-defun-if-void texinfo-multitable-extract-row ()
   "Return multitable row, as a string.
 End of row is beginning of next @item or beginning of @end.
 Cells within rows are separated by @tab."
   (skip-chars-forward " \t")
   (let* ((start (point))
-         (end (progn
-                (re-search-forward "@item\\|@end")
-                (match-beginning 0)))
-         (row (progn (goto-char end)
-                     (skip-chars-backward " ")
-                     ;; remove whitespace at end of argument
-                     (delete-region (point) end)
-                     (buffer-substring start (point)))))
+        (end (progn
+               (re-search-forward "@item\\|@end")
+               (match-beginning 0)))
+        (row (progn (goto-char end)
+                    (skip-chars-backward " ")
+                    ;; remove whitespace at end of argument
+                    (delete-region (point) end)
+                    (buffer-substring start (point)))))
     (delete-region texinfo-command-start end)
     row))
 
-(when-broken texinfo-multitable-item
-  (fmakunbound 'texinfo-multitable-item))
-
 (put 'multitable 'texinfo-item 'texinfo-multitable-item)
-(defun-maybe texinfo-multitable-item ()
+(ptexinfmt-defun-if-void texinfo-multitable-item ()
   "Format a row within a multicolumn table.
 Cells in row are separated by @tab.
 Widths of cells are specified by the arguments in the @multitable line.
 All cells are made to be the same height.
 This command is executed when texinfmt sees @item inside @multitable."
   (let ((original-buffer (current-buffer))
-        (table-widths (reverse (car (cdr (car texinfo-stack)))))
-        (existing-fill-column fill-column)
-        start
-        end
-        (table-column       0)
-        (table-entry-height 0)
-        ;; unformatted row looks like:  A1  @tab  A2  @tab  A3
-        ;; extract-row command deletes the source line in the table.
-        (unformated-row (texinfo-multitable-extract-row)))
+       (table-widths (reverse (car (cdr (car texinfo-stack)))))
+       (existing-fill-column fill-column)
+       start
+       end
+       (table-column       0)
+       (table-entry-height 0)
+       ;; unformatted row looks like:  A1  @tab  A2  @tab  A3
+       ;; extract-row command deletes the source line in the table.
+       (unformated-row (texinfo-multitable-extract-row)))
     ;; Use a temporary buffer
     (set-buffer (get-buffer-create texinfo-multitable-buffer-name))
     (delete-region (point-min) (point-max))
     (insert unformated-row)
     (goto-char (point-min))
 ;; 1. Check for correct number of @tab in line.
-    (let ((tab-number 1))                       ; one @tab between two columns
+    (let ((tab-number 1)) ;; one @tab between two columns
       (while (search-forward "@tab" nil t)
-        (setq tab-number (1+ tab-number)))
+       (setq tab-number (1+ tab-number)))
       (if (/= tab-number (length table-widths))
-          (error "Wrong number of @tab's in a @multitable row")))
+         (error "Wrong number of @tab's in a @multitable row")))
     (goto-char (point-min))
 ;; 2. Format each cell, and copy to a rectangle
     ;; buffer looks like this:    A1  @tab  A2  @tab  A3
@@ -716,16 +794,16 @@ This command is executed when texinfmt sees @item inside @multitable."
     (while (not (eobp))
       (setq start (point))
       (setq end (save-excursion
-                  (if (search-forward "@tab" nil 'move)
-                      ;; Delete the @tab command, including the @-sign
-                      (delete-region
-                       (point)
-                       (progn (forward-word -1) (1- (point)))))
-                  (point)))
+                 (if (search-forward "@tab" nil 'move)
+                     ;; Delete the @tab command, including the @-sign
+                     (delete-region
+                      (point)
+                      (progn (forward-word -1) (1- (point)))))
+                 (point)))
       ;; Set fill-column *wider* than needed to produce inter-column space
       (setq fill-column (+ 1
-                           texinfo-extra-inter-column-width
-                           (nth table-column table-widths)))
+                          texinfo-extra-inter-column-width
+                          (nth table-column table-widths)))
       (narrow-to-region start end)
       ;; Remove whitespace before and after entry.
       (skip-chars-forward " ")
@@ -735,71 +813,70 @@ This command is executed when texinfmt sees @item inside @multitable."
       (delete-region (point) (save-excursion (end-of-line) (point)))
       ;; Temorarily set texinfo-stack to nil so texinfo-format-scan
       ;; does not see an unterminated @multitable.
-      (let (texinfo-stack)                      ; nil
-        (texinfo-format-scan))
-      (let (fill-prefix)                        ; no fill prefix
-        (fill-region (point-min) (point-max)))
+      (let (texinfo-stack) ;; nil
+       (texinfo-format-scan))
+      (let (fill-prefix) ;; no fill prefix
+       (fill-region (point-min) (point-max)))
       (setq table-entry-height
-            (max table-entry-height (count-lines (point-min) (point-max))))
+           (max table-entry-height (count-lines (point-min) (point-max))))
 ;; 3. Move point to end of bottom line, and pad that line to fill column.
       (goto-char (point-min))
       (forward-line (1- table-entry-height))
-      (let* ((beg (point))                      ; beginning of line
-             ;; add one more space for inter-column spacing
-             (needed-whitespace
-              (1+
+      (let* ((beg (point)) ;; beginning of line
+            ;; add one more space for inter-column spacing
+            (needed-whitespace
+             (1+
               (- fill-column
-                 (progn (end-of-line) (current-column)))))) ; end of existing line
-        (insert (make-string
-                 (if (> needed-whitespace 0) needed-whitespace 1)
-                 ? )))
+                 (progn
+                   (end-of-line)
+                   (current-column)))))) ;; end of existing line
+       (insert (make-string
+                (if (> needed-whitespace 0) needed-whitespace 1)
+                ? )))
       ;; now, put formatted cell into a rectangle
       (set (intern (concat texinfo-multitable-rectangle-name
-                           (int-to-string table-column)))
-           (extract-rectangle (point-min) (point)))
+                          (int-to-string table-column)))
+          (extract-rectangle (point-min) (point)))
       (delete-region (point-min) (point))
       (goto-char (point-max))
       (setq table-column (1+ table-column))
       (widen))
 ;; 4. Add extra lines to rectangles so all are of same height
     (let ((total-number-of-columns table-column)
-          (column-number 0)
-          here)
+         (column-number 0)
+         here)
       (while (> table-column 0)
-        (let ((this-rectangle (int-to-string table-column)))
-          (while (< (length this-rectangle) table-entry-height)
-            (setq this-rectangle (append this-rectangle '("")))))
-        (setq table-column (1- table-column)))
+       (let ((this-rectangle (int-to-string table-column)))
+         (while (< (length this-rectangle) table-entry-height)
+           (setq this-rectangle (append this-rectangle '("")))))
+       (setq table-column (1- table-column)))
 ;; 5. Insert formatted rectangles in original buffer
       (switch-to-buffer original-buffer)
       (open-line table-entry-height)
       (while (< column-number total-number-of-columns)
-        (setq here (point))
-        (insert-rectangle
-         (eval (intern
-                (concat texinfo-multitable-rectangle-name
-                        (int-to-string column-number)))))
-        (goto-char here)
-        (end-of-line)
-        (setq column-number (1+ column-number))))
+       (setq here (point))
+       (insert-rectangle
+        (eval (intern
+               (concat texinfo-multitable-rectangle-name
+                       (int-to-string column-number)))))
+       (goto-char here)
+       (end-of-line)
+       (setq column-number (1+ column-number))))
     (kill-buffer texinfo-multitable-buffer-name)
     (setq fill-column existing-fill-column)))
 
 \f
-(when-broken texinfo-format-printindex
-  (fmakunbound 'texinfo-format-printindex))
-
-(defun-maybe texinfo-format-printindex ()
+(ptexinfmt-defun-if-broken texinfo-format-printindex ()
   (let ((indexelts (symbol-value
-                    (cdr (assoc (texinfo-parse-arg-discard)
-                                texinfo-indexvar-alist))))
-        opoint)
+                   (cdr (assoc (texinfo-parse-arg-discard)
+                               texinfo-indexvar-alist))))
+       opoint)
     (insert "\n* Menu:\n\n")
     (setq opoint (point))
     (texinfo-print-index nil indexelts)
 
     (if (memq system-type '(vax-vms windows-nt ms-dos))
-        (texinfo-sort-region opoint (point))
+       (texinfo-sort-region opoint (point))
       (shell-command-on-region opoint (point) "sort -fd" 1))))
 
 (provide 'ptexinfmt)
index 21f1d21..d6bb252 100644 (file)
@@ -1,3 +1,81 @@
+2003-07-12  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-vars.el (wl-thread-indent-level, wl-thread-*-str): Choose
+       default values along the value of wl-on-mule.
+       (from Tatsuya Kinoshita <tats@vega.ocn.ne.jp> [wl-en:421])
+       * wl-vars.el (wl-highlight-thread-indent-string-regexp): Remove.
+       It is not used anywhere.
+
+2003-06-16  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-summary.el (wl-summary-print-destination): Keep position.
+       (wl-summary-cursor-move-surface): Keep horizontal position.
+
+2003-05-30  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-draft.el (wl-draft-send-mail-with-smtp): Catch quitting and
+       write sendlog.
+
+2003-05-28  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-summary.el (wl-summary-goto-folder-subr): Don't restrict
+       `wl-summary-highlight'.
+
+2003-05-26  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-highlight.el (wl-highlight-summary-current-line): Remove
+       trivial condition for temp-mark.
+
+2003-05-24  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-message.el (wl-message-buffer-cache-add): Create new buffer
+       when it hits killed buffer.
+
+2003-05-12  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-draft.el, wl-expire.el, wl-mime.el, wl-summary.el, wl-util.el
+       * wl-news.el.in: `message' and `error' take format string.
+
+2003-05-11  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-folder (wl-folder-insert-entity): Display a message,
+       `...done', when the work finish.
+       (from Tatsuya Kinoshita <tats@vega.ocn.ne.jp> [wl:10866])
+
+2003-05-04  Hiroya Murata  <lapis-lazuli@pop06.odn.ne.jp>
+
+       * wl-message.el (wl-message-redisplay): Remove unused local
+       variables (Reported by NAKAJIMA Mikio <minakaji@namazu.org>).
+
+2003-04-30  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-summary.el (wl-summary-replace-status-marks): Disable
+       interactive use.
+       (wl-summary-reedit): Check message existence at first.
+       (wl-summary-mark-line): Fix doc, return value is indefinite.
+
+       * wl-highlight.el (wl-highlight-message): Arranged.
+
+       * wl-highlight.el (wl-highlight-summary-current-line): Abolish
+       unused 1st and 2nd arguments. Abolish 3rd argument `temp-too' and
+       check temp-mark by wl-summary-temp-mark always.
+       (wl-highlight-summary): Change accordingly.
+       * wl-summary.el (wl-summary-mark-as-read-all)
+       (wl-summary-delete-cache, wl-summary-set-score-mark)
+       (wl-summary-mark-as-unread, wl-summary-unmark)
+       (wl-summary-mark-line, wl-summary-mark-as-read)
+       (wl-summary-mark-as-important): Ditto.
+
+       * wl-highlight.el (wl-highlight-summary-window): Re-calculate the
+       end of the window if possible.
+       * wl-summary.el (wl-summary-sync-update): Support lazy
+       highlighting.
+       (wl-summary-toggle-disp-msg): Ditto.
+
+2003-04-09  Yoichi NAKAYAMA  <yoichi@geiin.org>
+
+       * wl-util.el (wl-as-coding-system): Define for non-mule too.
+
 2003-04-05  Hiroya Murata  <lapis-lazuli@pop06.odn.ne.jp>
 
        * wl-summary.el (wl-summary-mark-as-important): Fixed the last
index 5ef768c..7d6f024 100644 (file)
@@ -1090,6 +1090,10 @@ non-nil."
                           smtp-sasl-user-name
                           (car smtp-sasl-mechanisms)
                           smtp-server)))
+                    (signal (car err) (cdr err)))
+                   (quit
+                    (wl-draft-write-sendlog 'uncertain 'smtp smtp-server
+                                            recipients id)
                     (signal (car err) (cdr err)))))
                 (wl-draft-set-sent-message 'mail 'sent)
                 (wl-draft-write-sendlog
@@ -1167,7 +1171,7 @@ If FORCE-MSGID, insert message-id regardless of `wl-insert-message-id'."
   "Send the message in the current buffer.  Not modified the header fields."
   (let (delimline mime-bcc)
     (if (and wl-draft-verbose-send mes-string)
-       (message mes-string))
+       (message "%s" mes-string))
     ;; get fcc folders.
     (setq delimline (wl-draft-get-header-delimiter t))
     (unless wl-draft-fcc-list
@@ -1225,10 +1229,11 @@ If FORCE-MSGID, insert message-id regardless of `wl-insert-message-id'."
                (setq wl-draft-verbose-msg
                      (format "Sending%s and Queuing%s..."
                              sent-via unplugged-via))
-               (message (concat wl-draft-verbose-msg "done")))
+               (message "%sdone" wl-draft-verbose-msg))
            (if mes-string
-               (message (concat mes-string
-                                (if sent-via "done" "failed")))))))))
+               (message "%s%s"
+                        mes-string
+                        (if sent-via "done" "failed"))))))))
   (not wl-sent-message-modified)) ;; return value
 
 (defun wl-draft-raw-send (&optional kill-when-done force-pre-hook mes-string)
@@ -1316,11 +1321,12 @@ If KILL-WHEN-DONE is non-nil, current draft buffer is killed"
          (wl-draft-verbose-msg nil)
          err)
       (unwind-protect
-         (save-excursion (set-buffer sending-buffer)
+         (save-excursion
+           (set-buffer sending-buffer)
            (if (and (not (wl-message-mail-p))
                     (not (wl-message-news-p)))
                (error "No recipient is specified"))
-           (expand-abbrev) ; for mail-abbrevs
+           (expand-abbrev)             ; for mail-abbrevs
            (let ((mime-header-encode-method-alist
                   (append
                    '((wl-draft-eword-encode-address-list
@@ -1331,7 +1337,7 @@ If KILL-WHEN-DONE is non-nil, current draft buffer is killed"
              )
            ;;
            (if wl-draft-verbose-send
-               (message (or mes-string "Sending...")))
+               (message "%s" (or mes-string "Sending...")))
            (funcall wl-draft-send-function editing-buffer kill-when-done)
            ;; Now perform actions on successful sending.
            (while mail-send-actions
@@ -1341,9 +1347,10 @@ If KILL-WHEN-DONE is non-nil, current draft buffer is killed"
                (error))
              (setq mail-send-actions (cdr mail-send-actions)))
            (if wl-draft-verbose-send
-               (message (concat (or wl-draft-verbose-msg
-                                    mes-string "Sending...")
-                                "done"))))
+               (message "%sdone"
+                        (or wl-draft-verbose-msg
+                            mes-string
+                            "Sending..."))))
        ;; kill sending buffer, anyway.
        (and (buffer-live-p sending-buffer)
             (kill-buffer sending-buffer))))))
index eb3444b..99cfd13 100644 (file)
          (wl-expire-delete-reserve-marked-msgs-from-list
           delete-list (elmo-msgdb-get-mark-alist msgdb))))
   (when delete-list
-   (let ((mess
-        (format "Expiring (delete) %s msgs..."
-                (length delete-list))))
-    (message "%s" mess)
-    (if (elmo-folder-delete-messages folder
-                                    delete-list)
-       (progn
-         (elmo-msgdb-delete-msgs (elmo-folder-msgdb folder)
-                                 delete-list)
-         (wl-expire-append-log
-          (elmo-folder-name-internal folder)
-          delete-list nil 'delete)
-         (message "%s" (concat mess "done")))
-      (error (concat mess "failed!")))))
+    (let ((mess
+          (format "Expiring (delete) %s msgs..."
+                  (length delete-list))))
+      (message "%s" mess)
+      (if (elmo-folder-delete-messages folder
+                                      delete-list)
+         (progn
+           (elmo-msgdb-delete-msgs (elmo-folder-msgdb folder)
+                                   delete-list)
+           (wl-expire-append-log
+            (elmo-folder-name-internal folder)
+            delete-list nil 'delete)
+           (message "%sdone" mess))
+       (error "%sfailed!" mess))))
   (cons delete-list (length delete-list)))
 
 (defun wl-expire-refile (folder refile-list msgdb dst-folder
                 refile-list
                 (elmo-folder-name-internal dst-folder)
                 (if copy 'copy 'move))
-               (message "%s" (concat mess "done")))
-           (error (concat mess "failed!"))))))
+               (message "%sdone" mess))
+           (error "%sfailed!" mess)))))
     (cons refile-list (length refile-list))))
 
 (defun wl-expire-refile-with-copy-reserve-msg
@@ -231,8 +231,8 @@ If REFILE-LIST includes reserve mark message, so copy."
                           (elmo-folder-name-internal dst-folder)
                           (length refile-list))))
          (if ret-val
-             (message (concat mes "done"))
-           (error (concat mes "failed!")))))
+             (message "%sdone" mes)
+           (error "%sfailed!" mes))))
       (cons refile-list copy-len))))
 
 (defun wl-expire-archive-get-folder (src-folder &optional fmt dst-folder-arg)
@@ -589,11 +589,11 @@ ex. +ml/wl/1999_11/, +ml/wl/1999_12/."
          (wl-expire-delete-reserve-marked-msgs-from-list
           hide-list (elmo-msgdb-get-mark-alist msgdb))))
   (let ((mess (format "Hiding %s msgs..." (length hide-list))))
-    (message mess)
+    (message "%s" mess)
     (elmo-msgdb-delete-msgs (elmo-folder-msgdb folder) hide-list)
     (elmo-msgdb-append-to-killed-list folder hide-list)
     (elmo-folder-commit folder)
-    (message (concat mess "done"))
+    (message "%sdone" mess)
     (cons hide-list (length hide-list))))
 
 (defsubst wl-expire-folder-p (entity)
index 7d1de74..8e4b79d 100644 (file)
@@ -1742,7 +1742,9 @@ Entering Folder mode calls the value of `wl-folder-mode-hook'."
                    (elmo-display-progress
                     'wl-folder-insert-entity "Inserting group %s..."
                     (/ (* i 100) len) (car entity)))
-                 (setq flist (cdr flist))))
+                 (setq flist (cdr flist)))
+               (if (> len 0)
+                   (message "Inserting group %s...done" (car entity))))
              (save-excursion
                (goto-char group-name-end)
                (delete-region (point) (save-excursion (end-of-line)
index bdc7e24..389c9bb 100644 (file)
   (if wl-use-highlight-mouse-line
       (put-text-property 0 (length line) 'mouse-face 'highlight line)))
 
-(defun wl-highlight-summary-current-line (&optional smark regexp temp-too)
+(defun wl-highlight-summary-current-line ()
   (interactive)
   (save-excursion
     (let ((inhibit-read-only t)
          (case-fold-search nil) temp-mark status-mark
          (deactivate-mark nil)
-         fregexp fsymbol bol eol matched thread-top looked-at dest ds)
+         fsymbol bol eol matched thread-top looked-at dest ds)
       (end-of-line)
       (setq eol (point))
       (beginning-of-line)
       (setq bol (point))
-      (if smark
-         (setq status-mark smark)
-       (setq status-mark (wl-summary-persistent-mark)))
-      (when temp-too
-       (setq temp-mark (wl-summary-temp-mark))
-       (cond
-        ((string= temp-mark "*")
-         (setq fsymbol 'wl-highlight-summary-temp-face))
-        ((string= temp-mark "D")
-         (setq fsymbol 'wl-highlight-summary-deleted-face))
-        ((string= temp-mark "O")
-         (setq fsymbol 'wl-highlight-summary-copied-face
-               dest t))
-        ((string= temp-mark "o")
-         (setq fsymbol 'wl-highlight-summary-refiled-face
-               dest t))))
+      (setq status-mark (wl-summary-persistent-mark))
+      (setq temp-mark (wl-summary-temp-mark))
+      (cond
+       ((string= temp-mark "*")
+       (setq fsymbol 'wl-highlight-summary-temp-face))
+       ((string= temp-mark "D")
+       (setq fsymbol 'wl-highlight-summary-deleted-face))
+       ((string= temp-mark "O")
+       (setq fsymbol 'wl-highlight-summary-copied-face
+             dest t))
+       ((string= temp-mark "o")
+       (setq fsymbol 'wl-highlight-summary-refiled-face
+             dest t)))
       (if (not fsymbol)
          (cond
           ((and (string= temp-mark wl-summary-score-over-mark)
@@ -984,9 +981,7 @@ Faces used:
                  (< (point) end))
        (when (or (not lazy)
                  (null (get-text-property (point) 'face)))
-         (wl-highlight-summary-current-line nil nil
-                                            (or wl-summary-lazy-highlight
-                                                wl-summary-scored)))
+         (wl-highlight-summary-current-line))
        (forward-line 1))
       (unless wl-summary-lazy-highlight
        (message "Highlighting...done")))))
@@ -994,13 +989,17 @@ Faces used:
 (defun wl-highlight-summary-window (&optional win beg)
   "Highlight summary window.
 This function is defined for `window-scroll-functions'"
-  (if wl-summary-highlight
-      (with-current-buffer (window-buffer win)
-       (when (eq major-mode 'wl-summary-mode)
-         (wl-highlight-summary (window-start win)
-                               (window-end win)
-                               'lazy)
-         (set-buffer-modified-p nil)))))
+  (when wl-summary-highlight
+    (with-current-buffer (window-buffer win)
+      (when (eq major-mode 'wl-summary-mode)
+       (let ((start (window-start win))
+             (end (condition-case nil
+                      (window-end win t) ;; old emacsen doesn't support 2nd arg.
+                    (error (window-end win)))))
+         (wl-highlight-summary start
+                               end
+                               'lazy))
+       (set-buffer-modified-p nil)))))
 
 (defun wl-highlight-headers (&optional for-draft)
   (let ((beg (point-min))
@@ -1101,8 +1100,7 @@ interpreted as cited text.)"
        (real-end end)
        current  beg
        e p hend)
-    (if too-big
-       nil
+    (unless too-big
       (save-excursion
        (save-restriction
          (widen)
@@ -1131,29 +1129,27 @@ interpreted as cited text.)"
              (goto-char start)
              (while (and (not body-only)
                          (not (eobp)))
-               (cond
-                ((looking-at "^[^ \t\n:]+[ \t]*:")
-                 (put-text-property (match-beginning 0) (match-end 0)
-                                    'face 'wl-highlight-message-headers)
-                 (setq p (match-end 0))
-                 (setq hend (save-excursion (std11-field-end end)))
-                 (cond
-                  ((catch 'match
-                     (let ((regexp-alist wl-highlight-message-header-alist))
-                       (while regexp-alist
-                         (when (save-match-data
-                                 (looking-at (caar regexp-alist)))
-                           (put-text-property p hend 'face
-                                              (cdar regexp-alist))
-                           (throw 'match t))
-                         (setq regexp-alist (cdr regexp-alist)))
-                       (throw 'match nil))))
-                  (t
-                   (put-text-property
-                    p hend 'face 'wl-highlight-message-header-contents)))
-                 (goto-char hend))
-                ;; ignore non-header field name lines
-                (t (forward-line 1))))))
+               (if (looking-at "^[^ \t\n:]+[ \t]*:")
+                   (progn
+                     (put-text-property (match-beginning 0) (match-end 0)
+                                        'face 'wl-highlight-message-headers)
+                     (setq p (match-end 0))
+                     (setq hend (save-excursion (std11-field-end end)))
+                     (or (catch 'match
+                           (let ((regexp-alist wl-highlight-message-header-alist))
+                             (while regexp-alist
+                               (when (save-match-data
+                                       (looking-at (caar regexp-alist)))
+                                 (put-text-property p hend 'face
+                                                    (cdar regexp-alist))
+                                 (throw 'match t))
+                               (setq regexp-alist (cdr regexp-alist)))
+                             (throw 'match nil)))
+                         (put-text-property
+                          p hend 'face 'wl-highlight-message-header-contents))
+                     (goto-char hend))
+                 ;; ignore non-header field name lines
+                 (forward-line 1)))))
          (let (prefix prefix-face-alist pair end)
            (while (not (eobp))
              (cond
index e9a5f43..4a243eb 100644 (file)
@@ -147,9 +147,12 @@ Return its cache buffer."
        (buf nil))
     (if (< len wl-message-buffer-cache-size)
        (setq buf (wl-message-buffer-create))
-      (setq buf (wl-message-buffer-cache-buffer-get
-                (nth (1- len) wl-message-buffer-cache)))
-      (setcdr (nthcdr (- len 2) wl-message-buffer-cache) nil))
+      (let ((entry (nth (1- len) wl-message-buffer-cache)))
+       (if (buffer-live-p
+            (setq buf (wl-message-buffer-cache-buffer-get entry)))
+           (setcdr (nthcdr (- len 2) wl-message-buffer-cache) nil)
+         (setq wl-message-buffer-cache (delq entry wl-message-buffer-cache))
+         (setq buf (wl-message-buffer-create)))))
     (setq wl-message-buffer-cache
          (cons (wl-message-buffer-cache-entry-make key buf)
                wl-message-buffer-cache))
@@ -420,7 +423,7 @@ Returns non-nil if bottom of message."
         message-buf
         strategy entity
         cache-used
-        header-end real-fld-num summary-win delim)
+        summary-win delim)
     (setq buffer-read-only nil)
     (setq cache-used (wl-message-buffer-display
                      folder number flag force-reload))
index 69323f1..2a59520 100644 (file)
@@ -133,9 +133,8 @@ It calls following-method selected from variable
        (if (functionp f)
            (funcall f new-buf)
          (message
-          (format
-           "Sorry, following method for %s is not implemented yet."
-           mode))
+          "Sorry, following method for %s is not implemented yet."
+          mode)
          ))
       )))
 
@@ -192,7 +191,7 @@ It calls following-method selected from variable
       (when wl-highlight-body-too
        (wl-highlight-body))
       (run-hooks 'wl-draft-preview-message-hook))
-    (message recipients-message)))
+    (message "%s" recipients-message)))
 
 (defalias 'wl-draft-caesar-region  'mule-caesar-region)
 
index 8be3c40..4ca7839 100644 (file)
            (setq folder
                  (wl-summary-read-folder wl-default-folder "to append ")))
        (or (wl-news-send-news wl-news-buffer-oldest-version wl-news-lang folder)
-           (error
-            (format "Cannot append NEWS mail to %s" folder))))))
+           (error "Cannot append NEWS mail to %s" folder)))))
 
 (defun wl-news-force-exit ()
   (interactive)
index 3e06cc6..df2dd3a 100644 (file)
@@ -603,15 +603,18 @@ If optional USE-CACHE is non-nil, use cache if exists."
 If ARG is non-nil, Supersedes message"
   (interactive "P")
   (wl-summary-toggle-disp-msg 'off)
-  (if arg
-      (wl-summary-supersedes-message)
-    (if (string= (wl-summary-buffer-folder-name) wl-draft-folder)
-       (when (wl-summary-message-number)
-         (wl-draft-reedit (wl-summary-message-number))
-         (if (wl-message-news-p)
-             (mail-position-on-field "Newsgroups")
-           (mail-position-on-field "To")))
-      (wl-draft-edit-string (wl-summary-message-string)))))
+  (cond
+   ((not (wl-summary-message-number))
+    (message "No message."))
+   (arg
+    (wl-summary-supersedes-message))
+   ((string= (wl-summary-buffer-folder-name) wl-draft-folder)
+    (wl-draft-reedit (wl-summary-message-number))
+    (if (wl-message-news-p)
+       (mail-position-on-field "Newsgroups")
+      (mail-position-on-field "To")))
+   (t
+    (wl-draft-edit-string (wl-summary-message-string)))))
 
 (defun wl-summary-resend-bounced-mail ()
   "Re-mail the current message.
@@ -1650,7 +1653,7 @@ If ARG is non-nil, checking is omitted."
              ;; New mark and unread-uncached mark
              (insert new-mark)
              (if wl-summary-highlight
-                 (wl-highlight-summary-current-line nil nil t)))
+                 (wl-highlight-summary-current-line)))
            (forward-line 1)))
        (wl-folder-update-unread (wl-summary-buffer-folder-name) 0)
        (setq wl-summary-buffer-unread-count 0)
@@ -1683,7 +1686,7 @@ If ARG is non-nil, checking is omitted."
                              number
                              'message-id)))
        (if wl-summary-highlight
-           (wl-highlight-summary-current-line nil nil t))
+           (wl-highlight-summary-current-line))
        (set-buffer-modified-p nil)))))
 
 (defun wl-summary-resume-cache-status ()
@@ -1764,7 +1767,6 @@ If ARG is non-nil, checking is omitted."
 
 (defun wl-summary-replace-status-marks (before after)
   "Replace the status marks on buffer."
-  (interactive)
   (save-excursion
     (goto-char (point-min))
     (let ((inhibit-read-only t)
@@ -1886,7 +1888,7 @@ If ARG is non-nil, checking is omitted."
       (while diffs
        (wl-summary-mark-as-unread (car diffs) 'no-folder 'no-modeline)
        (setq diffs (cdr diffs)))
-      (if (interactive-p) (message mes)))))
+      (if (interactive-p) (message "%s" mes)))))
 
 (defun wl-summary-sync-update (&optional unset-cursor sync-all no-check)
   "Update the summary view to the newest folder status."
@@ -2029,6 +2031,7 @@ If ARG is non-nil, checking is omitted."
              (goto-char (point-max))
              (forward-line -1))
          (if (and wl-summary-highlight
+                  (not wl-summary-lazy-highlight)
                   (not (get-text-property (point) 'face)))
              (save-excursion
                (forward-line (- 0
@@ -2056,7 +2059,7 @@ If ARG is non-nil, checking is omitted."
        (delete-backward-char 1)
        (insert mark)
        (if wl-summary-highlight
-           (wl-highlight-summary-current-line nil nil t))
+           (wl-highlight-summary-current-line))
        (set-buffer-modified-p nil)))))
 
 (defun wl-summary-get-score-mark (msg-num)
@@ -2412,10 +2415,8 @@ If ARG, without confirm."
        (wl-summary-rescan))
       (wl-summary-toggle-disp-msg (if wl-summary-buffer-disp-msg 'on 'off))
       (unless (and reuse-buf keep-cursor)
-       ;(setq hilit wl-summary-highlight)
        (unwind-protect
-           (let ((wl-summary-highlight (if reuse-buf wl-summary-highlight))
-                 (wl-use-scoring
+           (let ((wl-use-scoring
                   (if (or scoring interactive) wl-use-scoring)))
              (if (and (not scan-type)
                       interactive
@@ -2462,7 +2463,6 @@ If ARG, without confirm."
                (forward-line -1)
              (wl-summary-prev))
            (setq retval 'more-next))
-         ;(setq wl-summary-highlight hilit)
          (if (and wl-summary-highlight
                   (not wl-summary-lazy-highlight)
                   (not reuse-buf))
@@ -2582,7 +2582,7 @@ If ARG, without confirm."
                        wl-summary-alike-hashtb)))
 
 (defun wl-summary-insert-headers (folder func mime-decode)
-  (let ((entities (elmo-folder-list-message-entities folder))
+  (let ((entities (elmo-folder-list-message-entities folder nil t))
        ov this last alike)
     (buffer-disable-undo (current-buffer))
     (make-local-variable 'wl-summary-alike-hashtb)
@@ -2979,14 +2979,13 @@ If optional argument NUMBER is specified, mark message specified by NUMBER."
          (wl-summary-toggle-disp-msg 'off)
          (setq wl-message-buffer nil))
        (set-buffer-modified-p nil)
-       (message (concat "Executing...done"
-                        (if (> refile-failures 0)
-                            (format " (%d refiling failed)" refile-failures)
-                          "")
-                        (if (> copy-failures 0)
-                            (format " (%d copying failed)" copy-failures)
-                          "")
-                        "."))))))
+       (message "Executing...done%s%s"
+                (if (> refile-failures 0)
+                    (format " (%d refiling failed)" refile-failures)
+                  "")
+                (if (> copy-failures 0)
+                    (format " (%d copying failed)" copy-failures)
+                  ""))))))
 
 (defun wl-summary-erase (&optional number)
   "Erase message actually, without moving it to trash."
@@ -3059,30 +3058,31 @@ If optional argument NUMBER is specified, mark message specified by NUMBER."
 (defun wl-summary-print-destination (msg-num folder)
   "Print refile destination on line."
   (wl-summary-remove-destination)
-  (let ((inhibit-read-only t)
-       (folder (copy-sequence folder))
-       (buffer-read-only nil)
-       len rs re c)
-    (setq len (string-width folder))
-    (if (< len 1) ()
-      ;;(end-of-line)
-      (beginning-of-line)
-      (search-forward "\r")
-      (forward-char -1)
-      (setq re (point))
-      (setq c 0)
-      (while (< c len)
+  (save-excursion
+    (let ((inhibit-read-only t)
+         (folder (copy-sequence folder))
+         (buffer-read-only nil)
+         len rs re c)
+      (setq len (string-width folder))
+      (if (< len 1) ()
+       ;;(end-of-line)
+       (beginning-of-line)
+       (search-forward "\r")
        (forward-char -1)
-       (setq c (+ c (char-width (following-char)))))
-      (and (> c len) (setq folder (concat " " folder)))
-      (setq rs (point))
-      (when wl-summary-width
+       (setq re (point))
+       (setq c 0)
+       (while (< c len)
+         (forward-char -1)
+         (setq c (+ c (char-width (following-char)))))
+       (and (> c len) (setq folder (concat " " folder)))
+       (setq rs (point))
+       (when wl-summary-width
          (put-text-property rs re 'invisible t))
-      (put-text-property rs re 'wl-summary-destination t)
-      (goto-char re)
-      (wl-highlight-refile-destination-string folder)
-      (insert folder)
-      (set-buffer-modified-p nil))))
+       (put-text-property rs re 'wl-summary-destination t)
+       (goto-char re)
+       (wl-highlight-refile-destination-string folder)
+       (insert folder)
+       (set-buffer-modified-p nil)))))
 
 (defsubst wl-summary-get-mark (number)
   "Return a temporal mark of message specified by NUMBER."
@@ -3275,27 +3275,24 @@ If optional argument NUMBER is specified, unmark message specified by NUMBER."
          (buffer-read-only nil)
          visible
          msg-num
-         cur-mark
-         score-mark)
+         cur-mark)
       (if number
          (setq visible (wl-summary-jump-to-msg number))
        (setq visible t))
       ;; Delete mark on buffer.
       (when visible
        (setq cur-mark (wl-summary-temp-mark))
-       (if (string= cur-mark " ")
-           ()
+       (unless (string= cur-mark " ")
          (delete-backward-char 1)
          (or number
              (setq number (wl-summary-message-number)))
-         (if (setq score-mark (wl-summary-get-score-mark number))
-             (insert score-mark)
-           (insert " ")))
+         (insert (or (wl-summary-get-score-mark number)
+                     " ")))
        (if (or (string= cur-mark "o")
                (string= cur-mark "O"))
            (wl-summary-remove-destination))
        (if wl-summary-highlight
-           (wl-highlight-summary-current-line nil nil score-mark))
+           (wl-highlight-summary-current-line))
        (set-buffer-modified-p nil))
       ;; Remove from temporal mark structure.
       (and number
@@ -3598,7 +3595,7 @@ If ARG, exit virtual folder."
   (buffer-substring (- (point) 1) (point)))
 
 (defun wl-summary-mark-line (mark)
-  "Put MARK on current line.  Return message number."
+  "Put MARK on current line."
   (save-excursion
     (beginning-of-line)
     (let ((inhibit-read-only t)
@@ -3607,7 +3604,7 @@ If ARG, exit virtual folder."
       (delete-backward-char 1)
       (insert mark)
       (if wl-summary-highlight
-         (wl-highlight-summary-current-line nil nil t))
+         (wl-highlight-summary-current-line))
       (set-buffer-modified-p nil))))
 
 (defun wl-summary-target-mark-delete ()
@@ -3854,7 +3851,7 @@ If ARG, exit virtual folder."
        (delete-backward-char 1)
        (insert (or cur-mark " ")))
       (when wl-summary-highlight
-       (wl-highlight-summary-current-line nil nil t))
+       (wl-highlight-summary-current-line))
       (set-buffer-modified-p nil))))
 
 (defsubst wl-summary-mark-as-read-internal (inverse
@@ -3886,7 +3883,7 @@ If ARG, exit virtual folder."
              (delete-backward-char 1)
              (insert (or new-mark " ")))
            (if (and visible wl-summary-highlight)
-               (wl-highlight-summary-current-line nil nil t))
+               (wl-highlight-summary-current-line))
            (set-buffer-modified-p nil))
          (unless inverse
            (if (member (elmo-message-mark folder number)
@@ -3990,7 +3987,7 @@ If ARG, exit virtual folder."
                (elmo-msgdb-global-mark-set message-id
                                            elmo-msgdb-important-mark)))))
       (if (and visible wl-summary-highlight)
-         (wl-highlight-summary-current-line nil nil t))))
+         (wl-highlight-summary-current-line))))
   (set-buffer-modified-p nil)
   number)
 
@@ -4437,7 +4434,9 @@ If ARG, exit virtual folder."
          (select-window (get-buffer-window cur-buf))
          (run-hooks 'wl-summary-toggle-disp-off-hook))
 ;;;    (switch-to-buffer cur-buf)
-       )))))
+       )))
+    (when wl-summary-lazy-highlight
+      (wl-highlight-summary-window))))
 
 (defun wl-summary-next-line-content ()
   "Show next line of the message."
@@ -4602,7 +4601,7 @@ Return t if message exists."
                       msgid
                       (read-from-minibuffer "NNTP Server: ")))
                     (t
-                     (message errmsg)
+                     (message "%s" errmsg)
                      nil)))
              ((or (eq wl-summary-search-via-nntp 'force)
                   (and
@@ -4611,7 +4610,7 @@ Return t if message exists."
                    wl-summary-search-via-nntp))
               (wl-summary-jump-to-msg-by-message-id-via-nntp msgid))
              (t
-              (message errmsg)
+              (message "%s" errmsg)
               nil))))))
 
 (defun wl-summary-jump-to-msg-by-message-id-via-nntp (&optional id server-spec)
@@ -4874,6 +4873,7 @@ Use function list is `wl-summary-write-current-folder-functions'."
   (let ((start (point))
        (skip-tmark-regexp (wl-regexp-opt wl-summary-skip-mark-list))
        (skip t)
+       (column (current-column))
        skip-pmark-regexp goto-next next-entity finfo)
     (if (elmo-folder-plugged-p wl-summary-buffer-elmo-folder)
        ()
@@ -4881,6 +4881,7 @@ Use function list is `wl-summary-write-current-folder-functions'."
            (wl-regexp-opt (list " "
                                 elmo-msgdb-unread-cached-mark
                                 elmo-msgdb-important-mark))))
+    (beginning-of-line)
     (while (and skip
                (not (if downward (eobp) (bobp))))
       (if downward
@@ -4898,8 +4899,7 @@ Use function list is `wl-summary-write-current-folder-functions'."
     (if (if downward (eobp) (and (bobp) skip)) (setq goto-next t))
     (if (or (eobp) (and (bobp) skip))
        (goto-char start))
-
-    (beginning-of-line)
+    (move-to-column column)
 
     (if (not goto-next)
        (if wl-summary-buffer-disp-msg
index 04f5468..723874d 100644 (file)
@@ -154,7 +154,7 @@ If HACK-ADDRESSES is t, then the strings are considered to be mail addresses,
             (cmd (if (featurep 'xemacs)
                      (event-to-character last-command-event)
                    (string-to-char (format "%s" (this-command-keys))))))
-    (message mes-string)
+    (message "%s" mes-string)
     (setq key (car (setq keve (wl-read-event-char))))
     (if (or (equal key ?\ )
            (and cmd
@@ -283,16 +283,20 @@ even when invalid character is contained."
 (put 'wl-as-mime-charset 'lisp-indent-function 1)
 
 (eval-and-compile
-  (if wl-on-mule3
-      (defmacro wl-as-coding-system (coding-system &rest body)
-       (` (let ((coding-system-for-read (, coding-system))
-                (coding-system-for-write (, coding-system)))
-            (,@ body))))
-    (if wl-on-mule
-       (defmacro wl-as-coding-system (coding-system &rest body)
-         (` (let ((file-coding-system-for-read (, coding-system))
-                  (file-coding-system (, coding-system)))
-              (,@ body)))))))
+  (cond
+   (wl-on-mule3
+    (defmacro wl-as-coding-system (coding-system &rest body)
+      (` (let ((coding-system-for-read (, coding-system))
+              (coding-system-for-write (, coding-system)))
+          (,@ body)))))
+   (wl-on-mule
+    (defmacro wl-as-coding-system (coding-system &rest body)
+      (` (let ((file-coding-system-for-read (, coding-system))
+              (file-coding-system (, coding-system)))
+          (,@ body)))))
+   (t
+    (defmacro wl-as-coding-system (coding-system &rest body)
+      (` (progn (,@ body)))))))
 
 (defmacro wl-as-mime-charset (mime-charset &rest body)
   (` (wl-as-coding-system (mime-charset-to-coding-system (, mime-charset))
index c9455e3..3c96980 100644 (file)
@@ -2555,22 +2555,19 @@ a symbol `bitmap', `xbm' or `xpm' in order to force the image format."
 (defvar wl-modeline-biff-state-off wl-biff-state-indicator-off)
 
 ;; Advanced thread view.
-(defvar wl-thread-indent-level 1
+(defvar wl-thread-indent-level (if wl-on-mule 1 2)
   "*Indent level for thread.")
-(defvar wl-thread-have-younger-brother-str "\e$B(2\e(B"
+(defvar wl-thread-have-younger-brother-str (if wl-on-mule "\e$B(2\e(B" "+")
   "*A string for thread branch line.  It should contain one character.")
-(defvar wl-thread-youngest-child-str       "\e$B(1\e(B"
+(defvar wl-thread-youngest-child-str       (if wl-on-mule "\e$B(1\e(B" "+")
   "*A string for thread branch line.  It should contain one character.")
-(defvar wl-thread-vertical-str             "\e$B(-\e(B"
+(defvar wl-thread-vertical-str             (if wl-on-mule "\e$B(-\e(B" "|")
   "*A string for thread branch line.  It should contain one character.")
-(defvar wl-thread-horizontal-str           "\e$B(,\e(B"
+(defvar wl-thread-horizontal-str           (if wl-on-mule "\e$B(,\e(B" "-")
   "*A string for thread branch line.  It should contain one character.")
-(defvar wl-thread-space-str                "\e$B!!\e(B"
+(defvar wl-thread-space-str                (if wl-on-mule "\e$B!!\e(B" " ")
   "*A string for thread branch line.  It should contain one character.")
 
-(defvar wl-highlight-thread-indent-string-regexp "[^[<]*"
-  "* A regexp string for thread indent...for highlight.")
-
 ;; folder icons. filename relative to wl-icon-directory
 (defvar wl-opened-group-folder-icon "opened.xpm"
   "*Icon file for opened group folder.")