f13ac97a0314eb7264ca5cba0b568d7af3c29d04
[elisp/apel.git] / README.en
1 -*- outline -*-
2
3 [README for APEL (English Version)]
4
5 * What's APEL?
6
7 APEL stands for "A Portable Emacs Library".  It consists of following
8 modules:
9
10 **  poe.el
11
12 This is an emulation module mainly for basic functions and special
13 forms/macros of latest emacsen.
14
15   poe-xemacs.el  --- for XEmacs
16   poe-18.el      --- for Emacs 18/Nemacs
17   env.el         --- env.el for Emacs 18
18   localhook.el   --- hook functions for Emacs 19.28 and earlier.
19   pym.el         --- macros for poe.
20
21 ** poem.el
22
23 This module provides basic functions to write portable MULE programs.
24
25   poem-nemacs.el --- for Nemacs
26   poem-ltn1.el   --- for Emacs 19/XEmacs without MULE
27   poem-om.el     --- for MULE 1.*, 2.*
28   poem-20.el     --- shared module between Emacs 20 and XEmacs-MULE
29   poem-e20_2.el  --- for Emacs 20.1/20.2
30   poem-e20_3.el  --- for Emacs 20.3
31   poem-xm.el     --- for XEmacs-MULE
32
33 ** pces.el
34
35 This module provides portable character encoding scheme
36 (coding-system) features.
37
38   pces-20.el     --- for Emacs 20 and XEmacs with coding-system.
39   pces-e20.el    --- for Emacs 20.
40   pces-e20_2.el  --- for Emacs 20.1 and 20.2.
41   pces-nemacs.el --- for Nemacs.
42   pces-om.el     --- for Mule 1.* and Mule 2.*.
43   pces-raw.el    --- for emacsen without coding-system features.
44   pces-xfc.el    --- for XEmacs with file coding.
45   pces-xm.el     --- for XEmacs-mule.
46
47 ** invisible.el
48
49 This modules provides features about invisible region.
50
51   inv-18.el     --- for Emacs 18
52   inv-19.el     --- for Emacs 19
53   inv-xemacs.el --- for XEmacs
54
55 ** mcharset.el
56
57 This modules provides MIME charset related features.
58
59   mcs-nemacs.el --- for Nemacs
60   mcs-ltn1.el   --- for Emacs 19/XEmacs without MULE
61   mcs-om.el     --- for MULE 1.*, 2.*
62   mcs-20.el     --- shared module between Emacs 20 and XEmacs-MULE
63   mcs-e20.el    --- for Emacs 20
64   mcs-xm.el     --- for XEmacs-MULE
65   mcs-xmu.el    --- for XEmacs-MULE to unify ISO646 characters
66
67 ** static.el --- utility for static evaluation
68
69 ** broken.el --- provide information of broken facilities of Emacs
70
71 ** pccl.el --- utility to write portable CCL program
72
73   pccl-om.el --- for MULE 2.*
74   pccl-20.el --- for Emacs 20/XEmacs-21-MULE
75
76 ** alist.el: utility for Association-list
77
78 ** calist.el: utility for condition tree and condition/situation-alist
79
80 ** path-util.el: utility for path management or file detection
81
82 ** filename.el: utility to make file-name
83
84 ** install.el: utility to install emacs-lisp package
85
86 ** mule-caesar.el: ROT 13-47-48 Caesar rotation utility
87
88 ** emu.el
89
90 This module provides emu bundled in tm-7.106 compatibility.  It
91 required poe, poem and mcharset.
92
93   emu-mule:     --- for MULE 1.*, 2.*.
94   richtext.el   --- text/richtext module for Emacs 19.29 or later,
95                      XEmacs 19.14 or later
96   tinyrich.el   --- text/richtext module for old emacsen
97
98 ** pcustom.el --- provide portable custom environment
99
100   tinycustom.el --- emulation module of custom.el
101
102 ** timezone.el
103
104 This is a utility of time zone.  This is a Y2K fixed version.   This
105 works with old GNUS 3.14.4 under version 18 of Emacs, too.
106
107 ** product.el --- Functions for product version information.
108
109 * Installation
110
111 ** run in expanded place
112
113 If you don't want to install other directories, please do only
114 following (You can use make.bat for MS-DOS OS family.  If you want to
115 use it, see `make.bat (for MS-DOS family)'):
116
117   % make
118
119 You can specify the emacs command name, for example
120
121   % make EMACS=xemacs
122
123 If `EMACS=...' is omitted, EMACS=emacs is used.
124
125 ** make install
126
127 If you want to install other directories, please do following:
128
129   % make install
130
131 You can specify the emacs command name, for example
132
133   % make install EMACS=xemacs
134
135 If `EMACS=...' is omitted, EMACS=emacs is used.
136
137 You can specify the prefix of the directory tree for Emacs Lisp
138 programs and shell scripts, for example:
139
140   % make install PREFIX=~/
141
142 If `PREFIX=...' is omitted, the prefix of the directory tree of the
143 specified emacs command is used (perhaps /usr/local).
144
145 For example, if PREFIX=/usr/local and Emacs 20.2 is specified, it
146 will create the following directory tree:
147
148   /usr/local/share/emacs/20.2/site-lisp/        --- emu
149   /usr/local/share/emacs/site-lisp/apel/        --- APEL
150
151 You can specify the lisp directory for Emacs Lisp programs,
152 for example:
153
154   % make install LISPDIR=~/elisp
155
156 You can also specify the version specific lisp directory where the
157 emu modules will be installed in, for example:
158
159   % make install VERSION_SPECIFIC_LISPDIR=~/elisp
160
161 If you would like to know what files belong to the emu modules or
162 the apel modules, or where they will be installed in, for example,
163 please type the following command.
164
165   % make what-where LISPDIR=~/elisp VERSION_SPECIFIC_LISPDIR=~/elisp
166
167 You can specify other optional settings by editing the file
168 APEL-CFG.  Please read comments in it.
169
170 ** install as a XEmacs package
171
172 If you want to install to XEmacs package directory, please do
173 following:
174
175   % make install-package
176
177 You can specify the emacs command name, for example
178
179   % make install-package XEMACS=xemacs-21
180
181 If `XEMACS=...' is omitted, XEMACS=xemacs is used.
182
183 You can specify the package directory, for example:
184
185   % make install PACKAGEDIR=~/.xemacs
186
187 If `PACKAGEDIR=...' is omitted, the first existing package
188 directory is used.
189
190 Notice that XEmacs package system requires XEmacs 21.0 or later.
191
192
193 ** make.bat (for MS-DOS family)
194
195 make.bat is available for MS-DOS family.  You have to edit
196 make.bat if you want to use it.  If you use cygwin environment,
197 you can use make.exe and Makefile instead of make.bat.
198
199 In make.bat, a line which contain `rem' in its beginning is a
200 comment.  You have to insert or delete `rem', if necessary.
201
202 Default setups of make.bat is;
203
204   set MEADOWVER=1.10
205   set PREFIX=c:\usr\meadow
206   set EMACS=%PREFIX%\%MEADOWVER%\bin\meadow95.exe
207   set LISPDIR=%PREFIX%\site-lisp
208   set VLISPDIR=%PREFIX%\%MEADOWVER%\site-lisp
209
210 It assumes that meadow executable binary exists in
211 c:\usr\meadow\1.10\bin\meadow95.exe.  On such basis make.bat will
212 try to install meadow version independent modules of APEL to;
213
214   c:\usr\meadow\site-lisp
215
216 and meadow version dependent modules to;
217
218   c:\usr\meadow\1.10\site-lisp
219
220 Please edit make.bat for your own environment and run make.bat
221
222 Emacs 19.3x or earlier does not have (e.x. Mule for Windows based on
223 19.28) an Emacs version dependent site-lisp directory
224 (e.x. c:\usr\meadow\1.10\site-lisp), and its load-path does not refer
225 to such directory by default.  If you want install APEL to such an Emacs
226 you may install all APEL modules to an Emacs version independent
227 site-lisp directory such as c:\usr\mule\site-lisp.
228
229 We cannot provide you with a Demacs example for make.bat.  If you install
230 APEL to Demacs, please send us such an example to apel-en@m17n.org (you
231 can post a message to the ML, even if you are not a member).
232
233 If you checkout APEL by using Windows native cvs.exe (not cygwin
234 version), cvs.exe will regularize end of line codes, LF to CRLF.  And
235 it also will try to convert CRLF to CRCRLF.  make.bat of which eol
236 code is CRCRLF does not work, so if you get such a make.bat, edit it
237 to really regularize eol codes to CRLF.  If you need further
238 information, see the following URL (n.b. Japanese only)
239
240   http://openlab.ring.gr.jp/skk/cvswin-ja.html
241
242 * load-path (for Emacs or MULE)
243
244 If you are using Emacs or Mule, please add directory of apel to
245 load-path.  If you install by default setting with Emacs 19.29 or
246 later or Emacs 20.1/20.2, you can write subdirs.el for example:
247
248 --------------------------------------------------------------------
249 (normal-top-level-add-to-load-path '("apel"))
250 --------------------------------------------------------------------
251
252 If you are using Emacs 20.3 or later or XEmacs, there are no need to
253 set up load-path with normal installation.
254
255
256 * Version specific information
257
258 ** For Emacs 18 users: "old byte-compiler" vs "new byte-compiler"
259
260 In this package, we use compile-time evaluation heavily.
261 Unfortunately, the byte-compiler bundled with Emacs 18 (the "old
262 byte-compiler") does not have features such as `eval-when-compile'
263 and `eval-and-compile', and our emulation version of these macros
264 evaluate "compile-time evaluation" at load-time or at run-time!
265 In addition, the "old byte-compiler" cannot compile top-level use of
266 macros and leaves most of our code uncompiled.
267
268 Therefore, we recommend you to use the "new" optimizing byte-compiler.
269 It is the origin of byte-compiler bundled with Emacs 19 and later.
270
271 Optimizing byte-compiler for Emacs 18 is available from the Emacs
272 Lisp Archive and its mirrors.
273
274 In Mule 1.* days, "contrib" package for Mule 1.* was distributed and
275 it contained the "new byte-compiler" for Mule.  But, I think it is
276 difficult to obtain this package now.
277
278 AFAIK, the "new byte-compiler" for Emacs 18 is also bundled with SKK
279 9.6 or SKK 10.62a.  You can get SKK 10.62a from the following URL;
280
281   http://openlab.ring.gr.jp/skk/maintrunk
282
283 They include patch for Mule 1.*.
284
285
286 ** For Emacs 19.34 and XEmacs 19.14 users: "old custom" vs "new custom"
287
288 "custom" library bundled with Emacs 19.32 - 19.34, XEmacs 19.14, and
289 Gnus 5.2/5.3 is "old", its API is incompatible with "new custom"
290 bundled with Emacs 20.1, XEmacs 19.15, or newer, and Gnus 5.4/5.5.
291
292 "new custom" for Emacs 19.34 and XEmacs 19.15 - 20.2 is available
293 from the following URL.
294
295 ftp://ftp.dina.kvl.dk/pub/Staff/Per.Abrahamsen/custom/custom-1.9962.tar.gz
296
297 (Note that "new custom" bundled with XEmacs 19.15 - 20.2, and Gnus
298 5.4/5.5 is older than this version.)
299
300 Before installing "new custom", you should check the following points.
301
302   1) If you stick to Gnus 5.2/5.3 (or any other applications which
303      use "old custom"), you should not install "new custom".
304
305   2) If you use Mule (based on Emacs 19), you must apply this patch
306      to "new custom".
307
308 ----8<------8<------8<------8<------8<------8<------8<------8<----
309 --- custom-1.9962/cus-face.el~  Wed Mar  4 19:52:39 1998
310 +++ custom-1.9962/cus-face.el   Mon Mar  9 08:05:33 1998
311 @@ -96,7 +96,7 @@
312        "Define a new FACE on all frames, ignoring X resources."
313        (interactive "SMake face: ")
314        (or (internal-find-face name)
315 -         (let ((face (make-vector 8 nil)))
316 +         (let ((face (make-vector face-vector-length nil)))
317             (aset face 0 'face)
318             (aset face 1 name)
319             (let* ((frames (frame-list))
320 ----8<------8<------8<------8<------8<------8<------8<------8<----
321
322   3) Applications compiled with "custom" require the same version of
323      "custom" at load-time (and run-time).  Therefore, if you use "new
324      custom", you must always include "new custom" in your load-path.
325      The easiest way to achieve this is "subdirs.el"; if you installed
326      "new custom" in "/usr/local/share/emacs/19.34/site-lisp/custom/",
327      put the following line to "/usr/local/share/emacs/19.34/site-lisp/subdirs.el".
328
329        (normal-top-level-add-to-load-path '("custom"))
330
331
332 * How to use
333
334 ** alist
335
336 *** Function put-alist (ITEM VALUE ALIST)
337
338 Modify ALIST to set VALUE to ITEM.  If there is a pair whose car is
339 ITEM, replace its cdr by VALUE.  If there is not such pair, create
340 new pair (ITEM . VALUE) and return new alist whose car is the new
341 pair and cdr is ALIST.
342
343 *** Function del-alist (ITEM ALIST)
344
345 If there is a pair whose key is ITEM, delete it from ALIST.
346
347 *** Function set-alist (SYMBOL ITEM VALUE)
348
349 Modify a alist indicated by SYMBOL to set VALUE to ITEM.
350
351   Ex. (set-alist 'auto-mode-alist "\\.pln$" 'text-mode)
352
353 *** Function modify-alist (MODIFIER DEFAULT)
354
355 Modify alist DEFAULT into alist MODIFIER.
356
357 *** Function set-modified-alist (SYMBOL MODIFIER)
358
359 Modify a value of a SYMBOL into alist MODIFIER.  The SYMBOL should be
360 alist. If it is not bound, its value regard as nil.
361
362 ** path-util
363
364 *** Function add-path (PATH &rest OPTIONS)
365
366 Add PATH to `load-path' if it exists under `default-load-path'
367 directories and it does not exist in `load-path'.
368
369 You can use following PATH styles:
370
371   load-path relative: "PATH" (it is searched from `default-load-path')
372
373   home directory relative: "~/PATH" "~USER/PATH"
374
375   absolute path: "/FOO/BAR/BAZ"
376
377 You can specify following OPTIONS:
378
379   'all-paths --- search from `load-path' instead of
380                  `default-load-path'
381
382   'append --- add PATH to the last of `load-path'
383
384 *** Function add-latest-path (PATTERN &optional ALL-PATHS)
385
386 Add latest path matched by regexp PATTERN to `load-path' if it
387 exists under `default-load-path' directories and it does not exist
388 in `load-path'.
389
390 For example, if there is bbdb-1.50 and bbdb-1.51 under site-lisp,
391 and if bbdb-1.51 is newer than bbdb-1.50, and site-lisp is
392 /usr/local/share/emacs/site-lisp,
393
394   (add-latest-path "bbdb")
395
396 it adds "/usr/local/share/emacs/site-lisp/bbdb-1.51" to top of
397 `load-path'.
398
399 If optional argument ALL-PATHS is specified, it is searched from all
400 of `load-path' instead of `default-load-path'.
401
402 *** Function get-latest-path (PATTERN &optional ALL-PATHS)
403
404 Return latest directory in default-load-path which is matched to
405 regexp PATTERN.  If optional argument ALL-PATHS is specified, it is
406 searched from all of load-path instead of default-load-path.
407
408   Ex. (let ((gnus-path (get-latest-path "gnus")))
409         (add-path (expand-file-name "lisp" gnus-path))
410         (add-to-list 'Info-default-directory-list
411                      (expand-file-name "texi" gnus-path)))
412
413 *** Function file-installed-p (FILE &optional PATHS)
414
415 Return absolute-path of FILE if FILE exists in PATHS.  If PATHS is
416 omitted, `load-path' is used.
417
418 *** Function exec-installed-p (FILE &optional PATHS SUFFIXES)
419
420 Return absolute-path of FILE if FILE exists in PATHS.  If PATHS is
421 omitted, `exec-path' is used.  If SUFFIXES is omitted,
422 `exec-suffix-list' is used.
423
424 *** Function module-installed-p (MODULE &optional PATHS)
425
426 Return non-nil if MODULE is provided or exists in PATHS.  If PATHS is
427 omitted, `load-path' is used.
428
429 ** filename
430
431 *** Function replace-as-filename (string)
432
433 Return safety file-name from STRING.
434
435 It refers variable `filename-filters'.  It is list of functions for
436 file-name filter.  Default filter refers following variables:
437
438 **** Variable filename-limit-length
439
440 Limit size of file-name.
441
442 **** Variable filename-replacement-alist
443
444 Alist list of characters vs. string as replacement.  List of
445 characters represents characters not allowed as file-name.
446
447
448 * Bug reports
449
450 If you write bug-reports and/or suggestions for improvement, please
451 send them to the APEL Mailing List:
452
453   apel-en@lists.chise.org       (English)
454   apel-ja@lists.chise.org       (Japanese)
455
456 Via the APEL ML, you can report APEL bugs, obtain the latest release
457 of APEL, and discuss future enhancements to APEL.  To join the APEL
458 ML, please see the descriptions of the following pages:
459
460   http://lists.chise.org/mailman/listinfo/apel-en       (English)
461   http://lists.chise.org/mailman/listinfo/apel-ja       (Japanese)
462
463
464 * Anonymous FTP
465
466 Latest release of APEL can be obtained from:
467
468   ftp://ftp.m17n.org/pub/mule/apel/
469
470
471 * CVS
472
473 Development of APEL uses CVS.  So latest developing version is
474 available at CVS.
475
476 ** cvs login (first time only)
477
478   % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root login
479
480   CVS password: [CR] # NULL string
481
482 ** checkout
483
484   % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root checkout apel
485
486   If you would like to join CVS based development, please send mail to
487
488   cvs@cvs.m17n.org
489
490 with your account name and your public key for ssh.  cvsroot is
491 :ext:cvs@cvs.m17n.org:/cvs/root.
492
493 We hope you will join the open development.