From: teranisi Date: Sat, 12 Jul 2003 13:43:27 +0000 (+0000) Subject: Sync up with main trunk and following. X-Git-Tag: elmo-mark-restart~61 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=264482f0a22e67ed597344edf2de7aafd6ed2565;p=elisp%2Fwanderlust.git Sync up with main trunk and following. * 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. --- diff --git a/ChangeLog b/ChangeLog index 0dd38cd..bc75d74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-06-05 TAKAHASHI Kaoru + + * WL-MK: Remove comment out code. Fix indent. + +2003-04-08 Yoichi NAKAYAMA + + * WL-MK: Nil for wl-info-lang means do nothing on info. + 2003-02-05 Yoichi NAKAYAMA * WL-MK (make-wl-news): Replace "^(" by "\\\\(" to avoid font-lock diff --git a/INSTALL b/INSTALL index d19d9eb..41bd6af 100644 --- 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. diff --git a/INSTALL.ja b/INSTALL.ja index 39fb62e..0369389 100644 --- a/INSTALL.ja +++ b/INSTALL.ja @@ -33,23 +33,23 @@ MIME用モジュールの選択 (a) XEmacs 21.1 以降 - APEL 10.4, FLIM 1.14.5, SEMI 1.14.5 + APEL 10.5, FLIM 1.14.5, SEMI 1.14.5 可能ならば XEmacs のパッケージとしてインストールすることをお勧めします。 (b) Emacs 20.4 以降 - 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〜20.3 - APEL 10.4, CLIME 1.14.5, SEMI 1.14.5 + APEL 10.5, CLIME 1.14.5, SEMI 1.14.5 FLIM が動きませんので、代わりに CLIME をインストールしてください。 (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 ベースの Mule では SEMI を動作させることが可能です。下記 のページが参考になります。 @@ -79,23 +79,33 @@ MIME用モジュールのインストール 例えば、以下の組合せの動作が確認されています。 - 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 のバージョンアップを行った場合は、Wanderlust をインス トールし直してください。 - 以下を実行することにより、APEL, FLIM, SEMI のチェックを含んだ環境テス - トが行えます。EMACS で emacs のコマンド名を指定することができます。 + +環境の確認 +========== + + Wanderlust のインストールの前に環境の確認をすることを推奨します。 % make check + または % make EMACS=xemacs check + で APEL, FLIM, SEMI のチェックを含んだ環境テストが行えます。 + + 新しい APEL, FLIM, SEMI がインストールされていても、load-path 上に古い + ものが残っている場合にはトラブルの原因となります。load-path 上で重複し + たファイルを探すには M-x list-load-path-shadows が便利です。 + 通常のインストール ================== -(a)Makefile の編集 +(a)Makefile, WL-CFG の編集 Makefile は、EMACS, LISPDIR の部分を編集してください。 @@ -105,6 +115,8 @@ MIME用モジュールのインストール LISPDIR は特に指定しなくても (NONE のままでも) 自動的にインストール 先を検出します。 + 必要なら WL-CFG を編集してください。 INFO の言語の指定などができます。 + (b)バイトコンパイル・インストール 以下を実行してください。 @@ -131,7 +143,7 @@ XEmacs のパッケージとしてインストール の設定、アイコンのパス設定を個人の .emacs に記述しなくても Wanderlust を正常に起動できるようになります。 -(a)Makefile の編集 +(a)Makefile, WL-CFG の編集 Makefile は、XEMACS, PACKAGEDIR の部分を編集してください。 @@ -141,6 +153,7 @@ XEmacs のパッケージとしてインストール PACKAGEDIR は特に指定しなくても (NONE のままでも)、SEMI がインストー ルされていれば自動的に検出されます。 + 必要なら WL-CFG を編集してください。 INFO の言語の指定などができます。 (b)バイトコンパイル・インストール diff --git a/NEWS b/NEWS index 0222792..22d1339 100644 --- 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 --- a/NEWS.ja +++ b/NEWS.ja @@ -1,5 +1,9 @@ Wanderlust NEWS (日本語版) -- User-visible changes in Wanderlust. +** wl-folder-hierarchy-access-folders の初期値が変更されました。 + +** 新聞フォルダのアクセスグループ "@/" が使えるようになりました。 + ** 前に使っていたものより新しい Wanderlust を起動すると NEWS(.ja) の内容を 表示します。 @@ -16,6 +20,38 @@ Wanderlust NEWS (日本語版) -- User-visible changes in Wanderlust. ** non-MIME PGP メッセージの検証、復号化のためのコマンドが追加されました。 メッセージバッファにおいて C-c:v, C-c:d でそれぞれ検証、復号化します。 +* 2.10.0 から 2.10.1 への変更点 + 2.10.1 は 2.10.0 のバグ修正版です。 + +** print-length や print-level が Non-nil のときに msgdb が壊れる問題が + 修正されました。 + +** パイプフォルダにおいて wl-summary-pack-number がうまく動かなかった + ため効かなくしてあります。必要であれば取り込み先フォルダの方で実行 + して下さい。 + +** wl-folder-move-cur-folder が効いていなかった問題が修正されました。 + +** Meadow 上で wl-draft-reedit がうまく動かない問題が修正されました。 + +** wl-summary-pack-number が Maildir や shimbun フォルダで動かない + 問題が修正されました。 + +** 重要マークつきメッセージのキャッシュに対する保護機能が働かない + 不具合が修正されました。 + +** wl-summary-line-format の %# で大きな数値を正しく扱えない不具合 + が修正されました。 + +** SMTP AUTH で認証以外のエラーでもパスワード消去される不具合が修 + 正されました。 + +** wl-message-buffer-prefetch-folder-type-list, + wl-message-buffer-prefetch-idle-time, + wl-message-buffer-prefetch-depth のデフォルト値が変更されました。 + +** XEmacs without mule でコンパイルできない問題が修正されました。 + * 2.8.1 から 2.10.0 への変更点 ** サマリ行の表示形式を変更できるようになりました。 diff --git a/WL-CFG b/WL-CFG index 937a9ed..a17c225 100644 --- 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 --- a/WL-MK +++ b/WL-MK @@ -398,7 +398,8 @@ (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)))) @@ -408,42 +409,42 @@ (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) diff --git a/doc/texinfo.tex b/doc/texinfo.tex index 5f84db7..e9293f3 100644 --- a/doc/texinfo.tex +++ b/doc/texinfo.tex @@ -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. @@ -34,12 +34,12 @@ % 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. @@ -71,11 +71,11 @@ \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 @@ -88,10 +88,12 @@ \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 @@ -164,8 +166,9 @@ % 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. @@ -202,7 +205,7 @@ % 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 @@ -536,6 +539,9 @@ % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} +% @/ allows a line break. +\let\/=\allowbreak + % @. is an end-of-sentence period. \def\.{.\spacefactor=3000 } @@ -564,7 +570,7 @@ % 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{...} -% If we want to allow any as delimiter, +% If we want to allow any 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'{'#1'}'{#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 diff --git a/doc/wl-ja.texi b/doc/wl-ja.texi index 22bf166..9bd0a87 100644 --- a/doc/wl-ja.texi +++ b/doc/wl-ja.texi @@ -278,7 +278,7 @@ APEL, FLIM, SEMI の順にインストールしてください。 推奨される APEL, FLIM, SEMI のバージョンの組合せは、以下の通りです。 @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 その他、FLIM, SEMI にはいろいろな変形バージョンが存在しますが、 @@ -287,8 +287,8 @@ APEL, FLIM, SEMI の順にインストールしてください。 例えば、以下の組合せで動作することが確認されています。 @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 もしくは SEMI のバージョンアップを行った場合は、Wanderlust を @@ -7382,7 +7382,7 @@ Non-nil ならば、メール送信時に本当に送信して良いかを確認します。 フォルダ名の正規表現とフォルダ移動時のサマリ更新レンジとの連想リストです。 更新レンジには @code{wl-summary-sync} で入力できる値のいずれか (@samp{all}, @samp{update}, @samp{rescan}, @samp{rescan-noscore}, -@samp{first}, @samp{last}) を指定します。マッチしなかった場合は、 +@samp{first}, @samp{last}, @samp{no-sync}) を指定します。マッチしなかった場合は、 @samp{update} となります。 @item wl-ask-range @@ -7744,6 +7744,7 @@ Wanderlust List in English @t{} 2001 7/04 2.6.0 stable リリース。 8/21 wl-addrmgr by 北本さん。 12/27 2.8.1 stable リリース。 +2002 12/11 2.10.0 stable リリース。 @end example 詳しい変遷は @file{ChangeLog} を御覧ください。 diff --git a/doc/wl.texi b/doc/wl.texi index 59f53cf..2a2588b 100644 --- a/doc/wl.texi +++ b/doc/wl.texi @@ -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. diff --git a/elmo/ChangeLog b/elmo/ChangeLog index 0919f2c..0c83093 100644 --- a/elmo/ChangeLog +++ b/elmo/ChangeLog @@ -1,3 +1,63 @@ +2003-07-12 Yuuichi Teranishi + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * acap.el, elmo-imap4.el, elmo-nntp.el, elmo-util.el, pldap.el: + `message' and `error' take format string. + +2003-04-10 Hiroya Murata + + * elmo-pipe.el (elmo-folder-clear): Implemented clear copied-list. + 2003-04-05 Hiroya Murata * elmo-msgdb.el (elmo-msgdb-message-entity-field): Don't use self diff --git a/elmo/acap.el b/elmo/acap.el index 4948740..df0dbe4 100644 --- a/elmo/acap.el +++ b/elmo/acap.el @@ -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) diff --git a/elmo/elmo-imap4.el b/elmo/elmo-imap4.el index 4ed7762..92bdef0 100644 --- a/elmo/elmo-imap4.el +++ b/elmo/elmo-imap4.el @@ -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 diff --git a/elmo/elmo-msgdb.el b/elmo/elmo-msgdb.el index 0e000d9..5edcac5 100644 --- a/elmo/elmo-msgdb.el +++ b/elmo/elmo-msgdb.el @@ -100,10 +100,8 @@ ;; 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) diff --git a/elmo/elmo-multi.el b/elmo/elmo-multi.el index 3c49cca..eebcd1e 100644 --- a/elmo/elmo-multi.el +++ b/elmo/elmo-multi.el @@ -179,18 +179,9 @@ (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 diff --git a/elmo/elmo-nntp.el b/elmo/elmo-nntp.el index 97a2f6d..f4fecd5 100644 --- a/elmo/elmo-nntp.el +++ b/elmo/elmo-nntp.el @@ -64,6 +64,22 @@ (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) @@ -79,16 +95,18 @@ (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 "" 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 diff --git a/elmo/elmo-pipe.el b/elmo/elmo-pipe.el index 87c477a..feae2df 100644 --- a/elmo/elmo-pipe.el +++ b/elmo/elmo-pipe.el @@ -89,6 +89,11 @@ (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) diff --git a/elmo/elmo-shimbun.el b/elmo/elmo-shimbun.el index b606f15..3f3b792 100644 --- a/elmo/elmo-shimbun.el +++ b/elmo/elmo-shimbun.el @@ -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))))) diff --git a/elmo/elmo-split.el b/elmo/elmo-split.el index 79090cb..db175a4 100644 --- a/elmo/elmo-split.el +++ b/elmo/elmo-split.el @@ -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 diff --git a/elmo/elmo-util.el b/elmo/elmo-util.el index 309a424..57cd392 100644 --- a/elmo/elmo-util.el +++ b/elmo/elmo-util.el @@ -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) diff --git a/elmo/elmo.el b/elmo/elmo.el index d357233..b8b24a1 100644 --- a/elmo/elmo.el +++ b/elmo/elmo.el @@ -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) diff --git a/elmo/pldap.el b/elmo/pldap.el index e8b944b..1d6d65f 100644 --- a/elmo/pldap.el +++ b/elmo/pldap.el @@ -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) diff --git a/samples/en/dot.wl b/samples/en/dot.wl index 610a989..cedef09 100644 --- a/samples/en/dot.wl +++ b/samples/en/dot.wl @@ -31,6 +31,10 @@ ;; Header From: ;(setq wl-from "Your Name ") +;; 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) @@ -46,19 +50,6 @@ ;; "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 diff --git a/samples/ja/dot.wl b/samples/ja/dot.wl index 854780a..dd262c2 100644 --- a/samples/ja/dot.wl +++ b/samples/ja/dot.wl @@ -31,6 +31,10 @@ ;; From: の設定 ;(setq wl-from "Your Name ") +;; (system-name) が FQDN を返さない場合、 +;; `wl-local-domain' にホスト名を除いたドメイン名を設定してください。 +;(setq wl-local-domain "example.com") + ;; 自分のメールアドレスのリスト (setq wl-user-mail-address-list (list (wl-address-header-extract-address wl-from) @@ -46,19 +50,6 @@ ;; "ml@example.com" ... )) -;; (system-name) が FQDN を返さない場合、 -;; `wl-local-domain' にホスト名を除いたドメイン名を設定してください。 -;; (system-name) "." wl-local-domain が Message-ID に使用されます。 -;(setq wl-local-domain "example.com") - -;; Message-ID のドメインパートを強制的に指定 -;(setq wl-message-id-domain "hostname.example.com") - -;; Message-ID のドメインパートを wl-from から生成します。 -;; globalなIPを持たない場合に使ってください。 -;; wl-local-domain, wl-message-id-domainに優先します。 -;(setq wl-message-id-use-wl-from t) - ;;; [[ サーバの設定 ]] ;; IMAP サーバの設定 diff --git a/utils/ChangeLog b/utils/ChangeLog index 5983303..24a5e8e 100644 --- a/utils/ChangeLog +++ b/utils/ChangeLog @@ -1,10 +1,20 @@ +2003-07-01 TAKAHASHI Kaoru + + * ptexinfmt.el: @verb, @tie, @/ support. + (ptexinfmt-broken-facility): Abolish NO-NOTICE argument. + Use `ptexinfmt-disable-broken-notice-flag' instead. + +2002-12-03 Katsumi Yamaoka + + * ptexinfmt.el: Modify it not to use APEL functions. + 2002-10-10 KOBAYASHI Shinji * 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 * ptexinfmt.el: discard @documentdescription. Support diff --git a/utils/ptexinfmt.el b/utils/ptexinfmt.el index 2f5abaa..c54fa38 100644 --- a/utils/ptexinfmt.el +++ b/utils/ptexinfmt.el @@ -7,6 +7,7 @@ ;; Author: TAKAHASHI Kaoru ;; Yoshiki Hayashi +;; Katsumi Yamaoka ;; Maintainer: TAKAHASHI Kaoru ;; Created: 7 Jul 2000 ;; Keywords: maint, tex, docs, emulation, compatibility @@ -33,29 +34,81 @@ ;; 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 " ")) ;;; 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{TEXT} (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)) ;;; 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} ==> 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)) @@ -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)))) +;;; 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 + + + ;;; 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 - - ;;; @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))) -(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) diff --git a/wl/ChangeLog b/wl/ChangeLog index 21f1d21..d6bb252 100644 --- a/wl/ChangeLog +++ b/wl/ChangeLog @@ -1,3 +1,81 @@ +2003-07-12 Yoichi NAKAYAMA + + * wl-vars.el (wl-thread-indent-level, wl-thread-*-str): Choose + default values along the value of wl-on-mule. + (from Tatsuya Kinoshita [wl-en:421]) + * wl-vars.el (wl-highlight-thread-indent-string-regexp): Remove. + It is not used anywhere. + +2003-06-16 Yoichi NAKAYAMA + + * wl-summary.el (wl-summary-print-destination): Keep position. + (wl-summary-cursor-move-surface): Keep horizontal position. + +2003-05-30 Yoichi NAKAYAMA + + * wl-draft.el (wl-draft-send-mail-with-smtp): Catch quitting and + write sendlog. + +2003-05-28 Yoichi NAKAYAMA + + * wl-summary.el (wl-summary-goto-folder-subr): Don't restrict + `wl-summary-highlight'. + +2003-05-26 Yoichi NAKAYAMA + + * wl-highlight.el (wl-highlight-summary-current-line): Remove + trivial condition for temp-mark. + +2003-05-24 Yoichi NAKAYAMA + + * wl-message.el (wl-message-buffer-cache-add): Create new buffer + when it hits killed buffer. + +2003-05-12 Yoichi NAKAYAMA + + * 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 + + * wl-folder (wl-folder-insert-entity): Display a message, + `...done', when the work finish. + (from Tatsuya Kinoshita [wl:10866]) + +2003-05-04 Hiroya Murata + + * wl-message.el (wl-message-redisplay): Remove unused local + variables (Reported by NAKAJIMA Mikio ). + +2003-04-30 Yoichi NAKAYAMA + + * 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 + + * wl-util.el (wl-as-coding-system): Define for non-mule too. + 2003-04-05 Hiroya Murata * wl-summary.el (wl-summary-mark-as-important): Fixed the last diff --git a/wl/wl-draft.el b/wl/wl-draft.el index 5ef768c..7d6f024 100644 --- a/wl/wl-draft.el +++ b/wl/wl-draft.el @@ -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)))))) diff --git a/wl/wl-expire.el b/wl/wl-expire.el index eb3444b..99cfd13 100644 --- a/wl/wl-expire.el +++ b/wl/wl-expire.el @@ -103,20 +103,20 @@ (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 @@ -156,8 +156,8 @@ 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) diff --git a/wl/wl-folder.el b/wl/wl-folder.el index 7d1de74..8e4b79d 100644 --- a/wl/wl-folder.el +++ b/wl/wl-folder.el @@ -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) diff --git a/wl/wl-highlight.el b/wl/wl-highlight.el index bdc7e24..389c9bb 100644 --- a/wl/wl-highlight.el +++ b/wl/wl-highlight.el @@ -816,33 +816,30 @@ (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 diff --git a/wl/wl-message.el b/wl/wl-message.el index e9a5f43..4a243eb 100644 --- a/wl/wl-message.el +++ b/wl/wl-message.el @@ -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)) diff --git a/wl/wl-mime.el b/wl/wl-mime.el index 69323f1..2a59520 100644 --- a/wl/wl-mime.el +++ b/wl/wl-mime.el @@ -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) diff --git a/wl/wl-news.el.in b/wl/wl-news.el.in index 8be3c40..4ca7839 100644 --- a/wl/wl-news.el.in +++ b/wl/wl-news.el.in @@ -286,8 +286,7 @@ (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) diff --git a/wl/wl-summary.el b/wl/wl-summary.el index 3e06cc6..df2dd3a 100644 --- a/wl/wl-summary.el +++ b/wl/wl-summary.el @@ -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 diff --git a/wl/wl-util.el b/wl/wl-util.el index 04f5468..723874d 100644 --- a/wl/wl-util.el +++ b/wl/wl-util.el @@ -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)) diff --git a/wl/wl-vars.el b/wl/wl-vars.el index c9455e3..3c96980 100644 --- a/wl/wl-vars.el +++ b/wl/wl-vars.el @@ -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 "┣" +(defvar wl-thread-have-younger-brother-str (if wl-on-mule "┣" "+") "*A string for thread branch line. It should contain one character.") -(defvar wl-thread-youngest-child-str "┗" +(defvar wl-thread-youngest-child-str (if wl-on-mule "┗" "+") "*A string for thread branch line. It should contain one character.") -(defvar wl-thread-vertical-str "┃" +(defvar wl-thread-vertical-str (if wl-on-mule "┃" "|") "*A string for thread branch line. It should contain one character.") -(defvar wl-thread-horizontal-str "━" +(defvar wl-thread-horizontal-str (if wl-on-mule "━" "-") "*A string for thread branch line. It should contain one character.") -(defvar wl-thread-space-str " " +(defvar wl-thread-space-str (if wl-on-mule " " " ") "*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.")