aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2004-09-29 07:22:20 +0000
committerMiles Bader2004-09-29 07:22:20 +0000
commit93952a2d5b2ba718f9d688dda216fed8621ec21e (patch)
treec4cda2097cdc4b8d07260702c7325b0fa1f6e30d
parent4148c3c9425939c1639f349b20a33b71fea72b8e (diff)
parentc1d7d28589c020b2b72d795638e100eda852d6aa (diff)
downloademacs-93952a2d5b2ba718f9d688dda216fed8621ec21e.tar.gz
emacs-93952a2d5b2ba718f9d688dda216fed8621ec21e.zip
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-47
Merge from emacs--cvs-trunk--0 Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-571 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-572 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-574 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-575 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-576 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-579 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-580 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-31 - miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-33 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-34 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-35 - miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-37 Update from CVS
-rw-r--r--ChangeLog5
-rwxr-xr-xconfigure18
-rw-r--r--configure.in21
-rw-r--r--etc/ChangeLog15
-rw-r--r--etc/NEWS1
-rw-r--r--etc/PROBLEMS22
-rw-r--r--etc/e/eterm.ti78
-rw-r--r--etc/enriched.doc10
-rw-r--r--leim/ChangeLog5
-rw-r--r--lisp/ChangeLog79
-rw-r--r--lisp/calendar/diary-lib.el227
-rw-r--r--lisp/dired.el134
-rw-r--r--lisp/files.el3
-rw-r--r--lisp/fringe.el46
-rw-r--r--lisp/gnus/ChangeLog74
-rw-r--r--lisp/gnus/flow-fill.el2
-rw-r--r--lisp/gnus/gnus-art.el2
-rw-r--r--lisp/gnus/gnus-cache.el5
-rw-r--r--lisp/gnus/gnus-diary.el2
-rw-r--r--lisp/gnus/gnus-fun.el7
-rw-r--r--lisp/gnus/gnus-msg.el20
-rw-r--r--lisp/gnus/gnus-picon.el3
-rw-r--r--lisp/gnus/gnus.el39
-rw-r--r--lisp/gnus/html2text.el5
-rw-r--r--lisp/gnus/message.el2
-rw-r--r--lisp/gnus/mm-bodies.el11
-rw-r--r--lisp/gnus/mm-decode.el8
-rw-r--r--lisp/gnus/mm-util.el17
-rw-r--r--lisp/gnus/mml-sec.el2
-rw-r--r--lisp/gnus/mml-smime.el3
-rw-r--r--lisp/gnus/mml.el3
-rw-r--r--lisp/gnus/nnfolder.el2
-rw-r--r--lisp/gnus/nnheader.el4
-rw-r--r--lisp/gnus/nnml.el2
-rw-r--r--lisp/gnus/rfc2047.el35
-rw-r--r--lisp/gnus/spam.el6
-rw-r--r--lisp/printing.el26
-rw-r--r--lisp/progmodes/gdb-ui.el16
-rw-r--r--lisp/term.el167
-rw-r--r--lisp/textmodes/enriched.el2
-rw-r--r--lispref/ChangeLog11
-rw-r--r--lispref/display.texi10
-rw-r--r--lispref/searching.texi26
-rw-r--r--lispref/text.texi26
-rw-r--r--man/ChangeLog60
-rw-r--r--man/display.texi28
-rw-r--r--man/emacs-mime.texi2
-rw-r--r--man/gnus-faq.texi54
-rw-r--r--man/gnus.texi106
-rw-r--r--man/message.texi4
-rw-r--r--man/pgg.texi11
-rw-r--r--man/sieve.texi5
-rw-r--r--src/ChangeLog38
-rw-r--r--src/buffer.c22
-rw-r--r--src/config.in2
-rw-r--r--src/dispextern.h2
-rw-r--r--src/fringe.c286
-rw-r--r--src/xdisp.c6
58 files changed, 1274 insertions, 554 deletions
diff --git a/ChangeLog b/ChangeLog
index a06d464ea91..3b77d509727 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
12004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
2
3 * configure.in (HAVE_EXECSHIELD): Only define on x86.
4 * configure: Rebuild.
5
12004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> 62004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
2 7
3 * configure.in: Check for exec-shield. 8 * configure.in: Check for exec-shield.
diff --git a/configure b/configure
index 204bf90b06d..6cbdf0b2e99 100755
--- a/configure
+++ b/configure
@@ -4302,7 +4302,7 @@ else
4302fi 4302fi
4303 4303
4304if test "$emacs_cv_execshield" = 1; then 4304if test "$emacs_cv_execshield" = 1; then
4305 # Extract the first word of "setarch", so it can be a program name with args. 4305 # Extract the first word of "setarch", so it can be a program name with args.
4306set dummy setarch; ac_word=$2 4306set dummy setarch; ac_word=$2
4307echo "$as_me:$LINENO: checking for $ac_word" >&5 4307echo "$as_me:$LINENO: checking for $ac_word" >&5
4308echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 4308echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -4343,13 +4343,25 @@ echo "${ECHO_T}no" >&6
4343fi 4343fi
4344 4344
4345 4345
4346 if test "$setarch" != no; then 4346 if test "$setarch" != no && test "$machine" = "intel386"; then
4347 4347
4348cat >>confdefs.h <<\_ACEOF 4348cat >>confdefs.h <<\_ACEOF
4349#define HAVE_EXECSHIELD 1 4349#define HAVE_EXECSHIELD 1
4350_ACEOF 4350_ACEOF
4351 4351
4352 fi 4352 else
4353 case "`cat /proc/sys/kernel/exec-shield`" in
4354 0) ;;
4355 *)
4356 { { echo "$as_me:$LINENO: error: Exec-shield is turned on.
4357Emacs can not dump itself if exec-shield is turned on.
4358See \`etc/PROBLEMS' for further information." >&5
4359echo "$as_me: error: Exec-shield is turned on.
4360Emacs can not dump itself if exec-shield is turned on.
4361See \`etc/PROBLEMS' for further information." >&2;}
4362 { (exit 1); exit 1; }; }
4363 esac
4364 fi
4353fi 4365fi
4354 4366
4355#### Extract some information from the operating system and machine files. 4367#### Extract some information from the operating system and machine files.
diff --git a/configure.in b/configure.in
index 52c35bb2b09..95ff1f855f7 100644
--- a/configure.in
+++ b/configure.in
@@ -1288,13 +1288,22 @@ AC_AIX
1288 1288
1289dnl check if exec-shield is present. 1289dnl check if exec-shield is present.
1290AC_CHECK_FILE(/proc/sys/kernel/exec-shield, emacs_cv_execshield=1, 1290AC_CHECK_FILE(/proc/sys/kernel/exec-shield, emacs_cv_execshield=1,
1291 emacs_cv_execshield=0) 1291 emacs_cv_execshield=0)
1292if test "$emacs_cv_execshield" = 1; then 1292if test "$emacs_cv_execshield" = 1; then
1293 AC_PATH_PROG(SETARCH, setarch, no) 1293 AC_PATH_PROG(SETARCH, setarch, no)
1294 AC_SUBST(SETARCH) 1294 AC_SUBST(SETARCH)
1295 if test "$setarch" != no; then 1295 if test "$setarch" != no && test "$machine" = "intel386"; then
1296 AC_DEFINE(HAVE_EXECSHIELD, 1, [Define to 1 if this OS has exec shield.]) 1296 AC_DEFINE(HAVE_EXECSHIELD, 1,
1297 fi 1297 [Define to 1 if this OS has exec shield and we can handle it.])
1298 else
1299 case "`cat /proc/sys/kernel/exec-shield`" in
1300 0) ;;
1301 *)
1302 AC_MSG_ERROR([Exec-shield is turned on.
1303Emacs can not dump itself if exec-shield is turned on.
1304See `etc/PROBLEMS' for further information.])
1305 esac
1306 fi
1298fi 1307fi
1299 1308
1300#### Extract some information from the operating system and machine files. 1309#### Extract some information from the operating system and machine files.
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 16e02786542..981fd88ba3a 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,18 @@
12004-09-26 Luc Teirlinck <teirllm@auburn.edu>
2
3 * enriched.doc: `enriched-annotation-alist' is now called
4 `enriched-translations'.
5
62004-09-26 Dan Nicolaescu <dann@ics.uci.edu>
7
8 * e/eterm.ti: Comment out smcup, rmcup. Add kbs, kdch1, rc, sc.
9 Reformat.
10 * e/eterm: Regenerate.
11
122004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
13
14 * PROBLEMS: Updated exec-shield description.
15
12004-09-16 Dan Nicolaescu <dann@ics.uci.edu> 162004-09-16 Dan Nicolaescu <dann@ics.uci.edu>
2 17
3 * e/eterm.ti: Change the strings for smso and rmso. 18 * e/eterm.ti: Change the strings for smso and rmso.
diff --git a/etc/NEWS b/etc/NEWS
index 9d63a7eda69..9e619898479 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2330,6 +2330,7 @@ configuration files.
2330 2330
2331* Lisp Changes in Emacs 21.4 2331* Lisp Changes in Emacs 21.4
2332 2332
2333+++
2333** Major mode functions now run the new normal hook 2334** Major mode functions now run the new normal hook
2334`after-change-major-mode-hook', at their very end, after the mode hooks. 2335`after-change-major-mode-hook', at their very end, after the mode hooks.
2335 2336
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index de816725240..313fe1554fd 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -2333,28 +2333,34 @@ The fix is to install a newer version of ncurses, such as version 4.2.
2333*** Linux: Segfault during `make bootstrap' under certain recent versions of the Linux kernel. 2333*** Linux: Segfault during `make bootstrap' under certain recent versions of the Linux kernel.
2334 2334
2335With certain recent Linux kernels (like the one of Redhat Fedora Core 2335With certain recent Linux kernels (like the one of Redhat Fedora Core
23361), the new "Exec-shield" functionality is enabled by default, which 23361 and 2), the new "Exec-shield" functionality is enabled by default, which
2337creates a different memory layout that breaks the emacs dumper. 2337creates a different memory layout that breaks the emacs dumper.
2338 2338
2339Configure can overcome the problem of exec-shield if the architecture is
2340x86 and the program setarch is present. On other architectures no
2341workaround is known.
2342
2339You can check the Exec-shield state like this: 2343You can check the Exec-shield state like this:
2340 2344
2341 cat /proc/sys/kernel/exec-shield 2345 cat /proc/sys/kernel/exec-shield
2342 2346
2343It returns 1 or 2 when Exec-shield is enabled, 0 otherwise. Please 2347It returns non-zero when Exec-shield is enabled, 0 otherwise. Please
2344read your system documentation for more details on Exec-shield and 2348read your system documentation for more details on Exec-shield and
2345associated commands. 2349associated commands. Exec-shield can be turned off with this command:
2350
2351 echo "0" > /proc/sys/kernel/exec-shield
2346 2352
2347When Exec-shield is enabled, building Emacs will segfault during the 2353When Exec-shield is enabled, building Emacs will segfault during the
2348execution of this command: 2354execution of this command:
2349 2355
2350temacs --batch --load loadup [dump|bootstrap] 2356 ./temacs --batch --load loadup [dump|bootstrap]
2351 2357
2352To work around this problem, it is necessary to temporarily disable 2358To work around this problem, it is necessary to temporarily disable
2353Exec-shield while building Emacs, using the `setarch' command like 2359Exec-shield while building Emacs, or, on x86, by using the `setarch'
2354this: 2360command when running temacs like this:
2361
2362 setarch i386 ./temacs --batch --load loadup [dump|bootstrap]
2355 2363
2356 setarch i386 ./configure <configure parameters>
2357 setarch i386 make <make parameters>
2358 2364
2359*** Fatal signal in the command temacs -l loadup inc dump. 2365*** Fatal signal in the command temacs -l loadup inc dump.
2360 2366
diff --git a/etc/e/eterm.ti b/etc/e/eterm.ti
index 648ff728518..36576b4db6a 100644
--- a/etc/e/eterm.ti
+++ b/etc/e/eterm.ti
@@ -1,21 +1,61 @@
1eterm, 1eterm,
2 lines#24,cols#80, 2 colors#8,
3 colors#8,pairs#64, 3 cols#80,
4 cuu1=\E[A,cud1=\n,cub1=\b,cuf1=\E[C,home=\E[H,cr=\r, 4 lines#24,
5 cuu=\E[%p1%dA,cud=\E[%p1%dB,cub=\E[%p1%dD,cuf=\E[%p1%dC, 5 pairs#64,
6 am,
7 mir,
8 xenl,
9 bel=^G,
10 bold=\E[1m,
11 clear=\E[H\E[J,
12 cr=\r,
13 csr=\E[%i%p1%d;%p2%dr,
14 cub1=\b,
15 cub=\E[%p1%dD,
16 cud1=\n,
17 cud=\E[%p1%dB,
18 cuf1=\E[C,
19 cuf=\E[%p1%dC,
6 cup=\E[%i%p1%d;%p2%dH, 20 cup=\E[%i%p1%d;%p2%dH,
7 ind=\n,csr=\E[%i%p1%d;%p2%dr, 21 cuu1=\E[A,
8 il1=\E[L,il=\E[%p1%dL, 22 cuu=\E[%p1%dA,
9 clear=\E[H\E[J,ed=\E[J,el=\E[K,el1=\E[1K, 23 dch1=\E[P,
10 dl1=\E[M,dl=\E[%p1%dM,dch1=\E[P,dch=\E[%p1%dP, 24 dch=\E[%p1%dP,
11 smir=\E[4h,rmir=\E[4l,ich=\E[%p1%d@,mir, 25 dl1=\E[M,
12 smcup=\E7\E[?47h,rmcup=\E[2J\E[?47l\E8, 26 dl=\E[%p1%dM,
13 ht=\t,khome=\E[1~,kend=\E[4~,knp=\E[6~,kpp=\E[5~, 27 ed=\E[J,
14 kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, 28 el1=\E[1K,
15 smso=\E[7m,rmso=\E[27m, 29 el=\E[K,
16 smul=\E[4m,rmul=\E[24m, 30 home=\E[H,
17 rev=\E[7m,bold=\E[1m,sgr0=\E[m, 31 ht=\t,
18 invis=\E[8m,op=\E[39;49m, 32 ich=\E[%p1%d@,
19 setab=\E[%p1%{40}%+%dm, setaf=\E[%p1%{30}%+%dm, 33 il1=\E[L,
20 bel=^G,xenl,am, 34 il=\E[%p1%dL,
21 35 ind=\n,
36 invis=\E[8m,
37 kbs=^?,
38 kcub1=\EOD,
39 kcud1=\EOB,
40 kcuf1=\EOC,
41 kcuu1=\EOA,
42 kdch1=\E[3~,
43 kend=\E[4~,
44 khome=\E[1~,
45 knp=\E[6~,
46 kpp=\E[5~,
47 op=\E[39;49m,
48 rc=\E8,
49 rev=\E[7m,
50 rmir=\E[4l,
51 rmso=\E[27m,
52 rmul=\E[24m,
53 sc=\E7,
54 setab=\E[%p1%{40}%+%dm,
55 setaf=\E[%p1%{30}%+%dm,
56 sgr0=\E[m,
57 smir=\E[4h,
58 smul=\E[4m,
59 smso=\E[7m,
60# smcup=\E[?47h,
61# rmcup=\E[?47l,
diff --git a/etc/enriched.doc b/etc/enriched.doc
index ff57087c989..55e11004f05 100644
--- a/etc/enriched.doc
+++ b/etc/enriched.doc
@@ -196,11 +196,11 @@ FTP or email may be obtained by sending an email message to
196enriched-verbose. 196enriched-verbose.
197 197
198</fixed></indent>-<indent> You can add annotations for your own text properties by making 198</fixed></indent>-<indent> You can add annotations for your own text properties by making
199additions to <fixed>enriched-annotation-alist</fixed>. Note that the 199additions to <fixed>enriched-translations</fixed>. Note that the standard
200standard requires you to name your annotation starting<italic> "x-" 200requires you to name your annotation starting<italic> "x-" </italic>(as in
201</italic>(as in <italic>"x-read-only"</italic>). Please send me any such additions that 201<italic>"x-read-only"</italic>). Please send me any such additions that you
202you think might be of general interest so that I can include 202think might be of general interest so that I can include them
203them in the distribution.</indent> 203in the distribution.</indent>
204 204
205</indent> 205</indent>
206 206
diff --git a/leim/ChangeLog b/leim/ChangeLog
index 2466de68ca6..7bff23067d6 100644
--- a/leim/ChangeLog
+++ b/leim/ChangeLog
@@ -1,3 +1,8 @@
12004-09-25 Kenichi Handa <handa@m17n.org>
2
3 * quail/uni-input.el (ucs-input-method): Add error clause to
4 condition-case.
5
12004-09-21 Kenichi Handa <handa@m17n.org> 62004-09-21 Kenichi Handa <handa@m17n.org>
2 7
3 * quail/uni-input.el: Move the call of register-input-method to 8 * quail/uni-input.el: Move the call of register-input-method to
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index a77f2206e58..187fc607c27 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,6 +1,79 @@
12004-09-28 Stefan <monnier@iro.umontreal.ca>
2
3 * dired.el (dired-view-command-alist): Use more efficient regexps.
4 Remove dubious arguments.
5 (dired-align-file): New function.
6 (dired-insert-directory): Use it.
7 (dired-move-to-end-of-filename): Make the " -> " search more specific.
8 (dired-buffers-for-dir): Remove unused var `pattern'.
9
102004-09-29 Kim F. Storm <storm@cua.dk>
11
12 * progmodes/gdb-ui.el (breakpoint): Define as fringe bitmap.
13 (gdb-mouse-toggle-breakpoint): Fix fringe-bitmaps-at-pos usage.
14 (gdb-put-breakpoint-icon): Use breakpoint bitmap.
15
16 * fringe.el (fringe-bitmap-p): New macro.
17 (fringe-bitmaps): Add standard fringe bitmaps on load.
18
192004-09-28 Matthew Mundell <matt@mundell.ukfsn.org> (tiny change)
20
21 * calendar/diary-lib.el (list-diary-entries): Save diary buffer
22 from diary display excursion. Store diary buffer's point for
23 `simple-diary-display'.
24 (simple-diary-display): Set window point and start when
25 displaying buffer, to preserve point.
26
272004-09-27 Luc Teirlinck <teirllm@auburn.edu>
28
29 * textmodes/enriched.el (enriched-translations): Replace defconst
30 with defvar.
31
322004-09-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
33
34 * printing.el: Doc fix.
35 (pr-version): New version number (6.8.1).
36 (pr-ps-file-using-ghostscript): Use make-temp-file instead of
37 make-temp-name.
38 (pr-delete-file): Check if file exists before deleting it. Reported by
39 Lennart Borgman <lennart.borgman.073@student.lu.se>.
40
412004-09-26 Stefan <monnier@iro.umontreal.ca>
42
43 * term.el (term-display-table): New variable.
44 (term-mode): Use it.
45 (term-exec-1): Set the coding system to binary.
46 (term-emulate-terminal): Decode the string before inserting it.
47
482004-09-26 Dan Nicolaescu <dann@ics.uci.edu>
49
50 * term.el (term-ansi-at-eval-string, term-ansi-default-fg)
51 (term-ansi-default-bg, term-ansi-current-temp): Delete unused
52 vars.
53 (map): Bind S-prior, S-next and S-insert.
54 (term-mode): Set `indent-tabs-mode' to nil.
55 (term-paste): New function to be bound to S-insert.
56 (term-send-del, term-send-backspace): Change the strings sent.
57 (term-termcap-format): Synchronyze with etc/e/eterm.ti.
58 (term-handle-colors-array): Fix handling of underline and reverse.
59 (term-handle-ansi-escape): Do not handle smcup/rmcup. Add
60 comments.
61 (term-erase-in-line): Fix comparison.
62 (term-emulate-terminal): Fix line wrap handling.
63 (term-start-output-log): Renamed from `term-set-output-log'.
64 (term-stop-output-log): Renamed from `term-stop-photo'.
65 (term-switch-to-alternate-sub-buffer): Comment out, unused.
66
672004-09-25 Stefan <monnier@iro.umontreal.ca>
68
69 * dired.el (dired-move-to-filename): Don't output a message if
70 raise-error is non-nil. Fix return position and value.
71
72 * files.el (insert-directory): Obey --dired even with symlinks.
73
12004-09-25 Lars Hansen <larsh@math.ku.dk> 742004-09-25 Lars Hansen <larsh@math.ku.dk>
2 75
3 * ls-lisp.el (ls-lisp-format): Mark file names with poperty 76 * ls-lisp.el (ls-lisp-format): Mark file names with property
4 dired-filename. 77 dired-filename.
5 78
62004-09-25 Kim F. Storm <storm@cua.dk> 792004-09-25 Kim F. Storm <storm@cua.dk>
@@ -21,8 +94,8 @@
21 it, and show completions. 94 it, and show completions.
22 (ido-all-completions): Let bind ido-directory-too-big to nil. 95 (ido-all-completions): Let bind ido-directory-too-big to nil.
23 (ido-exhibit): Handle ido-directory-too-big. 96 (ido-exhibit): Handle ido-directory-too-big.
24 (ido-read-buffer): Handle fallback to read-buffer. Init 97 (ido-read-buffer): Handle fallback to read-buffer.
25 ido-directory-too-big. 98 Init ido-directory-too-big.
26 (ido-read-file-name, ido-read-directory-name, ido-completing-read): 99 (ido-read-file-name, ido-read-directory-name, ido-completing-read):
27 Init ido-directory-too-big. 100 Init ido-directory-too-big.
28 101
diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el
index 45bb3c0e4c0..945119f06df 100644
--- a/lisp/calendar/diary-lib.el
+++ b/lisp/calendar/diary-lib.el
@@ -4,6 +4,7 @@
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: Edward M. Reingold <reingold@cs.uiuc.edu> 6;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
7;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
7;; Keywords: calendar 8;; Keywords: calendar
8 9
9;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
@@ -296,6 +297,8 @@ Only used if `diary-header-line-flag' is non-nil."
296 :type 'sexp 297 :type 'sexp
297 :version "21.4") 298 :version "21.4")
298 299
300(defvar diary-saved-point) ; internal
301
299(defun list-diary-entries (date number) 302(defun list-diary-entries (date number)
300 "Create and display a buffer containing the relevant lines in diary-file. 303 "Create and display a buffer containing the relevant lines in diary-file.
301The arguments are DATE and NUMBER; the entries selected are those 304The arguments are DATE and NUMBER; the entries selected are those
@@ -345,112 +348,116 @@ These hooks have the following distinct roles:
345 (set-buffer diary-buffer) 348 (set-buffer diary-buffer)
346 (or (verify-visited-file-modtime diary-buffer) 349 (or (verify-visited-file-modtime diary-buffer)
347 (revert-buffer t t)))) 350 (revert-buffer t t))))
348 (setq file-glob-attrs (nth 1 (diary-pull-attrs nil ""))) 351 ;; d-s-p is passed to the diary display function.
349 (setq selective-display t) 352 (let ((diary-saved-point (point)))
350 (setq selective-display-ellipses nil) 353 (save-excursion
351 (if diary-header-line-flag 354 (setq file-glob-attrs (nth 1 (diary-pull-attrs nil "")))
352 (setq header-line-format diary-header-line-format)) 355 (setq selective-display t)
353 (setq old-diary-syntax-table (syntax-table)) 356 (setq selective-display-ellipses nil)
354 (set-syntax-table diary-syntax-table) 357 (if diary-header-line-flag
355 (unwind-protect 358 (setq header-line-format diary-header-line-format))
356 (let ((buffer-read-only nil) 359 (setq old-diary-syntax-table (syntax-table))
357 (diary-modified (buffer-modified-p)) 360 (set-syntax-table diary-syntax-table)
358 (mark (regexp-quote diary-nonmarking-symbol))) 361 (unwind-protect
359 ;; First and last characters must be ^M or \n for 362 (let ((buffer-read-only nil)
360 ;; selective display to work properly 363 (diary-modified (buffer-modified-p))
361 (goto-char (1- (point-max))) 364 (mark (regexp-quote diary-nonmarking-symbol)))
362 (if (not (looking-at "\^M\\|\n")) 365 ;; First and last characters must be ^M or \n for
363 (progn 366 ;; selective display to work properly
364 (goto-char (point-max)) 367 (goto-char (1- (point-max)))
365 (insert "\^M"))) 368 (if (not (looking-at "\^M\\|\n"))
366 (goto-char (point-min)) 369 (progn
367 (if (not (looking-at "\^M\\|\n")) 370 (goto-char (point-max))
368 (insert "\^M")) 371 (insert "\^M")))
369 (subst-char-in-region (point-min) (point-max) ?\n ?\^M t) 372 (goto-char (point-min))
370 (calendar-for-loop i from 1 to number do 373 (if (not (looking-at "\^M\\|\n"))
371 (let ((d diary-date-forms) 374 (insert "\^M"))
372 (month (extract-calendar-month date)) 375 (subst-char-in-region (point-min) (point-max) ?\n ?\^M t)
373 (day (extract-calendar-day date)) 376 (calendar-for-loop
374 (year (extract-calendar-year date)) 377 i from 1 to number do
375 (entry-found (list-sexp-diary-entries date))) 378 (let ((d diary-date-forms)
376 (while d 379 (month (extract-calendar-month date))
377 (let* 380 (day (extract-calendar-day date))
378 ((date-form (if (equal (car (car d)) 'backup) 381 (year (extract-calendar-year date))
379 (cdr (car d)) 382 (entry-found (list-sexp-diary-entries date)))
380 (car d))) 383 (while d
381 (backup (equal (car (car d)) 'backup)) 384 (let*
382 (dayname 385 ((date-form (if (equal (car (car d)) 'backup)
383 (format "%s\\|%s\\.?" 386 (cdr (car d))
384 (calendar-day-name date) 387 (car d)))
385 (calendar-day-name date 'abbrev))) 388 (backup (equal (car (car d)) 'backup))
386 (monthname 389 (dayname
387 (format "\\*\\|%s\\|%s\\.?" 390 (format "%s\\|%s\\.?"
388 (calendar-month-name month) 391 (calendar-day-name date)
389 (calendar-month-name month 'abbrev))) 392 (calendar-day-name date 'abbrev)))
390 (month (concat "\\*\\|0*" (int-to-string month))) 393 (monthname
391 (day (concat "\\*\\|0*" (int-to-string day))) 394 (format "\\*\\|%s\\|%s\\.?"
392 (year 395 (calendar-month-name month)
393 (concat 396 (calendar-month-name month 'abbrev)))
394 "\\*\\|0*" (int-to-string year) 397 (month (concat "\\*\\|0*" (int-to-string month)))
395 (if abbreviated-calendar-year 398 (day (concat "\\*\\|0*" (int-to-string day)))
396 (concat "\\|" (format "%02d" (% year 100))) 399 (year
397 ""))) 400 (concat
398 (regexp 401 "\\*\\|0*" (int-to-string year)
399 (concat 402 (if abbreviated-calendar-year
400 "\\(\\`\\|\^M\\|\n\\)" mark "?\\(" 403 (concat "\\|" (format "%02d" (% year 100)))
401 (mapconcat 'eval date-form "\\)\\(") 404 "")))
402 "\\)")) 405 (regexp
403 (case-fold-search t)) 406 (concat
404 (goto-char (point-min)) 407 "\\(\\`\\|\^M\\|\n\\)" mark "?\\("
405 (while (re-search-forward regexp nil t) 408 (mapconcat 'eval date-form "\\)\\(")
406 (if backup (re-search-backward "\\<" nil t)) 409 "\\)"))
407 (if (and (or (char-equal (preceding-char) ?\^M) 410 (case-fold-search t))
408 (char-equal (preceding-char) ?\n)) 411 (goto-char (point-min))
409 (not (looking-at " \\|\^I"))) 412 (while (re-search-forward regexp nil t)
410 ;; Diary entry that consists only of date. 413 (if backup (re-search-backward "\\<" nil t))
411 (backward-char 1) 414 (if (and (or (char-equal (preceding-char) ?\^M)
412 ;; Found a nonempty diary entry--make it visible and 415 (char-equal (preceding-char) ?\n))
413 ;; add it to the list. 416 (not (looking-at " \\|\^I")))
414 (setq entry-found t) 417 ;; Diary entry that consists only of date.
415 (let ((entry-start (point)) 418 (backward-char 1)
416 date-start temp) 419 ;; Found a nonempty diary entry--make it
417 (re-search-backward "\^M\\|\n\\|\\`") 420 ;; visible and add it to the list.
418 (setq date-start (point)) 421 (setq entry-found t)
419 (re-search-forward "\^M\\|\n" nil t 2) 422 (let ((entry-start (point))
420 (while (looking-at " \\|\^I") 423 date-start temp)
421 (re-search-forward "\^M\\|\n" nil t)) 424 (re-search-backward "\^M\\|\n\\|\\`")
422 (backward-char 1) 425 (setq date-start (point))
423 (subst-char-in-region date-start 426 (re-search-forward "\^M\\|\n" nil t 2)
424 (point) ?\^M ?\n t) 427 (while (looking-at " \\|\^I")
425 (setq entry (buffer-substring entry-start (point)) 428 (re-search-forward "\^M\\|\n" nil t))
426 temp (diary-pull-attrs entry file-glob-attrs) 429 (backward-char 1)
427 entry (nth 0 temp)) 430 (subst-char-in-region date-start
428 (add-to-diary-list 431 (point) ?\^M ?\n t)
429 date 432 (setq entry (buffer-substring entry-start (point))
430 entry 433 temp (diary-pull-attrs entry file-glob-attrs)
431 (buffer-substring 434 entry (nth 0 temp))
432 (1+ date-start) (1- entry-start)) 435 (add-to-diary-list
433 (copy-marker entry-start) (nth 1 temp)))))) 436 date
434 (setq d (cdr d))) 437 entry
435 (or entry-found 438 (buffer-substring
436 (not diary-list-include-blanks) 439 (1+ date-start) (1- entry-start))
437 (setq diary-entries-list 440 (copy-marker entry-start) (nth 1 temp))))))
438 (append diary-entries-list 441 (setq d (cdr d)))
439 (list (list date "" "" "" ""))))) 442 (or entry-found
440 (setq date 443 (not diary-list-include-blanks)
441 (calendar-gregorian-from-absolute 444 (setq diary-entries-list
442 (1+ (calendar-absolute-from-gregorian date)))) 445 (append diary-entries-list
443 (setq entry-found nil))) 446 (list (list date "" "" "" "")))))
444 (set-buffer-modified-p diary-modified)) 447 (setq date
445 (set-syntax-table old-diary-syntax-table)) 448 (calendar-gregorian-from-absolute
446 (goto-char (point-min)) 449 (1+ (calendar-absolute-from-gregorian date))))
447 (run-hooks 'nongregorian-diary-listing-hook 450 (setq entry-found nil)))
448 'list-diary-entries-hook) 451 (set-buffer-modified-p diary-modified))
449 (if diary-display-hook 452 (set-syntax-table old-diary-syntax-table))
450 (run-hooks 'diary-display-hook) 453 (goto-char (point-min))
451 (simple-diary-display)) 454 (run-hooks 'nongregorian-diary-listing-hook
452 (run-hooks 'diary-hook) 455 'list-diary-entries-hook)
453 diary-entries-list)))) 456 (if diary-display-hook
457 (run-hooks 'diary-display-hook)
458 (simple-diary-display))
459 (run-hooks 'diary-hook)
460 diary-entries-list))))))
454 461
455(defun include-other-diary-files () 462(defun include-other-diary-files ()
456 "Include the diary entries from other diary files with those of diary-file. 463 "Include the diary entries from other diary files with those of diary-file.
@@ -528,8 +535,12 @@ changing the variable `diary-include-string'."
528 (setq buffer-read-only t) 535 (setq buffer-read-only t)
529 (display-buffer holiday-buffer) 536 (display-buffer holiday-buffer)
530 (message "No diary entries for %s" date-string)) 537 (message "No diary entries for %s" date-string))
531 (display-buffer (find-buffer-visiting 538 (with-current-buffer
532 (substitute-in-file-name diary-file))) 539 (find-buffer-visiting (substitute-in-file-name diary-file))
540 (let ((window (display-buffer (current-buffer))))
541 ;; d-s-p is passed from list-diary-entries.
542 (set-window-point window diary-saved-point)
543 (set-window-start window (point-min))))
533 (message "Preparing diary...done")))) 544 (message "Preparing diary...done"))))
534 545
535(defface diary-button-face '((((type pc) (class color)) 546(defface diary-button-face '((((type pc) (class color))
diff --git a/lisp/dired.el b/lisp/dired.el
index 43eec9408d4..96b2905337e 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -202,10 +202,11 @@ with the buffer narrowed to the listing."
202 202
203;; Fixme: This should use mailcap. 203;; Fixme: This should use mailcap.
204(defcustom dired-view-command-alist 204(defcustom dired-view-command-alist
205 '(("[.]\\(ps\\|ps_pages\\|eps\\)\\'" . "gv -spartan -color -watch %s") 205 '(("\\.\\(ps\\|ps_pages\\|eps\\)\\'" . "gv %s")
206 ("[.]pdf\\'" . "xpdf %s") 206 ("\\.pdf\\'" . "xpdf %s")
207 ("[.]\\(jpe?g\\|gif\\|png\\)\\'" . "eog %s") 207 ;; ("\\.pod\\'" . "perldoc %s")
208 ("[.]dvi\\'" . "xdvi -sidemargin 0.5 -topmargin 1 %s")) 208 ("\\.\\(jpe?g\\|gif\\|png\\)\\'" . "eog %s")
209 ("\\.dvi\\'" . "xdvi %s"))
209 "Alist specifying how to view special types of files. 210 "Alist specifying how to view special types of files.
210Each element has the form (REGEXP . SHELL-COMMAND). 211Each element has the form (REGEXP . SHELL-COMMAND).
211When the file name matches REGEXP, `dired-view-file' 212When the file name matches REGEXP, `dired-view-file'
@@ -797,6 +798,112 @@ wildcards, erases the buffer, and builds the subdir-alist anew
797 (dired-insert-directory dir dired-actual-switches 798 (dired-insert-directory dir dired-actual-switches
798 file-list (not file-list) t))))) 799 file-list (not file-list) t)))))
799 800
801(defun dired-align-file (beg end)
802 "Align the fields of a file to the ones of surrounding lines.
803BEG..END is the line where the file info is located."
804 ;; Some versions of ls try to adjust the size of each field so as to just
805 ;; hold the largest element ("largest" in the current invocation, of
806 ;; course). So when a single line is output, the size of each field is
807 ;; just big enough for that one output. Thus when dired refreshes one
808 ;; line, the alignment if this line w.r.t the rest is messed up because
809 ;; the fields of that one line will generally be smaller.
810 ;;
811 ;; To work around this problem, we here add spaces to try and re-align the
812 ;; fields as needed. Since this is purely aesthetic, it is of utmost
813 ;; importance that it doesn't mess up anything like
814 ;; `dired-move-to-filename'. To this end, we limit ourselves to adding
815 ;; spaces only, and to only add them at places where there was already at
816 ;; least one space. This way, as long as `dired-move-to-filename-regexp'
817 ;; always matches spaces with "*" or "+", we know we haven't made anything
818 ;; worse. There is one spot where the exact number of spaces is
819 ;; important, which is just before the actual filename, so we refrain from
820 ;; adding spaces there (and within the filename as well, of course).
821 (save-excursion
822 (let (file file-col other other-col)
823 ;; Check the there is indeed a file, and that there is anoter adjacent
824 ;; file with which to align, and that additional spaces are needed to
825 ;; align the filenames.
826 (when (and (setq file (progn (goto-char beg)
827 (dired-move-to-filename nil end)))
828 (setq file-col (current-column))
829 (setq other
830 (or (and (goto-char beg)
831 (zerop (forward-line -1))
832 (dired-move-to-filename))
833 (and (goto-char beg)
834 (zerop (forward-line 1))
835 (dired-move-to-filename))))
836 (setq other-col (current-column))
837 (/= file other)
838 ;; Make sure there is some work left to do.
839 (> other-col file-col))
840 ;; If we've only looked at the line above, check to see if the line
841 ;; below exists as well and if so, align with the shorter one.
842 (when (and (< other file)
843 (goto-char beg)
844 (zerop (forward-line 1))
845 (dired-move-to-filename))
846 (let ((alt-col (current-column)))
847 (when (< alt-col other-col)
848 (setq other-col alt-col)
849 (setq other (point)))))
850 ;; Keep positions uptodate when we insert stuff.
851 (if (> other file) (setq other (copy-marker other)))
852 (setq file (copy-marker file))
853 ;; Main loop.
854 (goto-char beg)
855 (while (and (> other-col file-col)
856 (skip-chars-forward "^ ")
857 ;; Skip the spaces, and make sure there's at least one.
858 (> (skip-chars-forward " ") 0)
859 ;; Don't touch anything just before (and after) the
860 ;; beginning of the filename.
861 (> file (point)))
862 ;; We're now just in front of a field, with a space behind us.
863 (let* ((curcol (current-column))
864 ;; Nums are right-aligned.
865 (num-align (looking-at "[0-9]"))
866 ;; Let's look at the other line, in the same column: we
867 ;; should be either near the end of the previous field, or
868 ;; in the space between that field and the next.
869 ;; [ Of course, it's also possible that we're already within
870 ;; the next field or even past it, but that's unlikely since
871 ;; other-col > file-col. ]
872 ;; Let's find the distance to the alignment-point (either
873 ;; the beginning or the end of the next field, depending on
874 ;; whether this field is left or right aligned).
875 (align-pt-offset
876 (save-excursion
877 (goto-char other)
878 (move-to-column curcol)
879 (when (looking-at
880 (concat
881 (if (eq (char-before) ?\ ) " *" "[^ ]* *")
882 (if num-align "[0-9][^ ]*")))
883 (- (match-end 0) (match-beginning 0)))))
884 ;; Now, the number of spaces to insert is align-pt-offset
885 ;; minus the distance to the equivalent point on the
886 ;; current line.
887 (spaces
888 (if (not num-align)
889 align-pt-offset
890 (and align-pt-offset
891 (save-excursion
892 (skip-chars-forward "^ ")
893 (- align-pt-offset (- (current-column) curcol)))))))
894 (when (and spaces (> spaces 0))
895 (setq file-col (+ spaces file-col))
896 (if (> file-col other-col)
897 (setq spaces (- spaces (- file-col other-col))))
898 (insert-char ?\s spaces)
899 ;; Let's just make really sure we did not mess up.
900 (unless (save-excursion
901 (equal (dired-move-to-filename) (marker-position file)))
902 ;; Damn! We messed up: let's revert the change.
903 (delete-char (- spaces))))))
904 (set-marker file nil)))))
905
906
800(defun dired-insert-directory (dir switches &optional file-list wildcard hdr) 907(defun dired-insert-directory (dir switches &optional file-list wildcard hdr)
801 "Insert a directory listing of DIR, Dired style. 908 "Insert a directory listing of DIR, Dired style.
802Use SWITCHES to make the listings. 909Use SWITCHES to make the listings.
@@ -815,7 +922,10 @@ If HDR is non-nil, insert a header line with the directory name."
815 ;; with the new value of dired-move-to-filename-regexp. 922 ;; with the new value of dired-move-to-filename-regexp.
816 (if file-list 923 (if file-list
817 (dolist (f file-list) 924 (dolist (f file-list)
818 (insert-directory f switches nil nil)) 925 (let ((beg (point)))
926 (insert-directory f switches nil nil)
927 ;; Re-align fields, if necessary.
928 (dired-align-file beg (point))))
819 (insert-directory dir switches wildcard (not wildcard))) 929 (insert-directory dir switches wildcard (not wildcard)))
820 ;; Quote certain characters, unless ls quoted them for us. 930 ;; Quote certain characters, unless ls quoted them for us.
821 (if (not (string-match "b" dired-actual-switches)) 931 (if (not (string-match "b" dired-actual-switches))
@@ -1762,6 +1872,8 @@ regardless of the language.")
1762;; Move to first char of filename on this line. 1872;; Move to first char of filename on this line.
1763;; Returns position (point) or nil if no filename on this line." 1873;; Returns position (point) or nil if no filename on this line."
1764(defun dired-move-to-filename (&optional raise-error eol) 1874(defun dired-move-to-filename (&optional raise-error eol)
1875 "Move to the beginning of the filename on the current line.
1876Return the position of the beginning of the filename, or nil if none found."
1765 ;; This is the UNIX version. 1877 ;; This is the UNIX version.
1766 (or eol (setq eol (line-end-position))) 1878 (or eol (setq eol (line-end-position)))
1767 (beginning-of-line) 1879 (beginning-of-line)
@@ -1774,8 +1886,10 @@ regardless of the language.")
1774 (goto-char (match-end 0))) 1886 (goto-char (match-end 0)))
1775 ((re-search-forward dired-permission-flags-regexp eol t) 1887 ((re-search-forward dired-permission-flags-regexp eol t)
1776 ;; Ha! There *is* a file. Our regexp-from-hell just failed to find it. 1888 ;; Ha! There *is* a file. Our regexp-from-hell just failed to find it.
1777 (funcall (if raise-error 'error 'message) 1889 (if raise-error
1778 "Unrecognized line! Check dired-move-to-filename-regexp")) 1890 (error "Unrecognized line! Check dired-move-to-filename-regexp"))
1891 (beginning-of-line)
1892 nil)
1779 (raise-error 1893 (raise-error
1780 (error "No file on this line"))))) 1894 (error "No file on this line")))))
1781 1895
@@ -1818,9 +1932,9 @@ regardless of the language.")
1818 (or no-error (error "No file on this line")))) 1932 (or no-error (error "No file on this line"))))
1819 ;; Move point to end of name: 1933 ;; Move point to end of name:
1820 (if symlink 1934 (if symlink
1821 (if (search-forward " ->" eol t) 1935 (if (search-forward " -> " eol t)
1822 (progn 1936 (progn
1823 (forward-char -3) 1937 (forward-char -4)
1824 (and used-F 1938 (and used-F
1825 dired-ls-F-marks-symlinks 1939 dired-ls-F-marks-symlinks
1826 (eq (preceding-char) ?@) ;; did ls really mark the link? 1940 (eq (preceding-char) ?@) ;; did ls really mark the link?
@@ -1885,7 +1999,7 @@ You can then feed the file name(s) to other commands with \\[yank]."
1885;; As a side effect, killed dired buffers for DIR are removed from 1999;; As a side effect, killed dired buffers for DIR are removed from
1886;; dired-buffers. 2000;; dired-buffers.
1887 (setq dir (file-name-as-directory dir)) 2001 (setq dir (file-name-as-directory dir))
1888 (let ((alist dired-buffers) result elt buf pattern) 2002 (let ((alist dired-buffers) result elt buf)
1889 (while alist 2003 (while alist
1890 (setq elt (car alist) 2004 (setq elt (car alist)
1891 buf (cdr elt)) 2005 buf (cdr elt))
diff --git a/lisp/files.el b/lisp/files.el
index 962fd483c2c..aaed1395275 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -4376,7 +4376,8 @@ normally equivalent short `-D' option is just passed on to
4376 (while (< (point) end) 4376 (while (< (point) end)
4377 (let ((start (+ beg (read (current-buffer)))) 4377 (let ((start (+ beg (read (current-buffer))))
4378 (end (+ beg (read (current-buffer))))) 4378 (end (+ beg (read (current-buffer)))))
4379 (if (= (char-after end) ?\n) 4379 (if (memq (char-after end) '(?\n ?\ ))
4380 ;; End is followed by \n or by " -> ".
4380 (put-text-property start end 'dired-filename t) 4381 (put-text-property start end 'dired-filename t)
4381 ;; It seems that we can't trust ls's output as to 4382 ;; It seems that we can't trust ls's output as to
4382 ;; byte positions of filenames. 4383 ;; byte positions of filenames.
diff --git a/lisp/fringe.el b/lisp/fringe.el
index f52ecdf64d2..07c93d39f40 100644
--- a/lisp/fringe.el
+++ b/lisp/fringe.el
@@ -37,27 +37,29 @@
37 37
38;; Standard fringe bitmaps 38;; Standard fringe bitmaps
39 39
40(defconst no-fringe-bitmap 0) 40(defmacro fringe-bitmap-p (symbol)
41(defconst undef-fringe-bitmap 1) 41 "Return non-nil if SYMBOL is a fringe bitmap."
42(defconst left-truncation-fringe-bitmap 2) 42 `(get ,symbol 'fringe))
43(defconst right-truncation-fringe-bitmap 3) 43
44(defconst up-arrow-fringe-bitmap 4) 44(defvar fringe-bitmaps)
45(defconst down-arrow-fringe-bitmap 5) 45
46(defconst continued-line-fringe-bitmap 6) 46(unless (get 'left-truncation 'fringe)
47(defconst continuation-line-fringe-bitmap 7) 47 (let ((bitmaps '(left-truncation right-truncation
48(defconst overlay-arrow-fringe-bitmap 8) 48 up-arrow down-arrow
49(defconst top-left-angle-fringe-bitmap 9) 49 continued-line continuation-line
50(defconst top-right-angle-fringe-bitmap 10) 50 overlay-arrow
51(defconst bottom-left-angle-fringe-bitmap 11) 51 top-left-angle top-right-angle
52(defconst bottom-right-angle-fringe-bitmap 12) 52 bottom-left-angle bottom-right-angle
53(defconst left-bracket-fringe-bitmap 13) 53 left-bracket right-bracket
54(defconst right-bracket-fringe-bitmap 14) 54 filled-box-cursor hollow-box-cursor hollow-square
55(defconst filled-box-cursor-fringe-bitmap 15) 55 bar-cursor hbar-cursor
56(defconst hollow-box-cursor-fringe-bitmap 16) 56 empty-line))
57(defconst hollow-square-fringe-bitmap 17) 57 (bn 2))
58(defconst bar-cursor-fringe-bitmap 18) 58 (while bitmaps
59(defconst hbar-cursor-fringe-bitmap 19) 59 (push (car bitmaps) fringe-bitmaps)
60(defconst empty-line-fringe-bitmap 20) 60 (put (car bitmaps) 'fringe bn)
61 (setq bitmaps (cdr bitmaps)
62 bn (1+ bn)))))
61 63
62 64
63;; Control presence of fringes 65;; Control presence of fringes
@@ -228,7 +230,7 @@ SIDE must be the symbol `left' or `right'."
228 (window-fringes)) 230 (window-fringes))
229 0) 231 0)
230 (float (frame-char-width)))) 232 (float (frame-char-width))))
231 233
232(provide 'fringe) 234(provide 'fringe)
233 235
234;;; arch-tag: 6611ef60-0869-47ed-8b93-587ee7d3ff5d 236;;; arch-tag: 6611ef60-0869-47ed-8b93-587ee7d3ff5d
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 60ad776347c..3cdda661e86 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,77 @@
12004-09-28 Jesper Harder <harder@ifa.au.dk>
2
3 * gnus-picon.el: Require cl.
4
5 * mml-sec.el (mml-signencrypt-style): Don't depend on Gnus.
6
7 * mml-smime.el: Require cl. Autoload message-fetch-field.
8
9 * gnus-fun.el: Require gnus-ems and gnus-util.
10
11 * gnus-diary.el (gnus-diary-header-schedule): caddr -> car (cddr
12
13 * gnus-art.el (gnus-article-edit-mode): Define before first
14 reference.
15
16 * gnus.el (gnus-method-to-server): Move defsubst before first use.
17
18 * spam.el (spam-check-spamoracle, spam-spamoracle-learn): Fix
19 format string mismatch.
20 * nnml.el (nnml-request-set-mark, nnml-save-marks): do.
21 * nnfolder.el (nnfolder-request-set-mark, nnfolder-save-marks): do.
22
232004-09-27 Reiner Steib <Reiner.Steib@gmx.de>
24
25 * gnus.el (gnus-version-number): Set to 5.11.
26
272004-09-27 Katsumi Yamaoka <yamaoka@jpl.org>
28
29 * mm-decode.el (mm-copy-to-buffer): Don't use set-buffer-multibyte.
30
312004-09-26 Jesper Harder <harder@ifa.au.dk>
32
33 * gnus-msg.el (gnus-post-news): Use blank Newsgroups line if
34 GROUP is a virtual group.
35
36 * mm-util.el (mm-charset-synonym-alist): Remove obsolete entries
37 for big5 and gb2312.
38
39 * rfc2047.el (rfc2047-pad-base64): Deal with more cases of invalid
40 padding.
41
42 * mm-bodies.el (mm-7bit-chars): Don't include \r.
43
44 * mml.el (mml-compute-boundary-1): Don't uncompress files.
45
46 * rfc2047.el (rfc2047-qp-or-base64): New function to reduce
47 dependencies.
48 (rfc2047-encode): Use it.
49
50 * flow-fill.el: Typo.
51
52 * mml.el (mml-generate-mime-1): Don't use format=flowed with
53 inline PGP.
54
55 * gnus.el (gnus-getenv-nntpserver): Strip whitespace.
56
57 * gnus-cache.el (gnus-cache-save-buffers): Check if buffer is
58 alive. Reported by Laurent Martelli <laurent@aopsys.com>.
59
60 * mm-util.el (mm-image-load-path): Handle nil in load-path.
61 From Christian Neukirchen <chneukirchen@yahoo.de>.
62
63 * html2text.el (html2text-replace-list): Add &amp; and &apos;.
64
65 * nnheader.el (nnheader-max-head-length): Increase to 8192.
66
67 * message.el (message-clone-locals): Clone sendmail and smtp
68 variables.
69
702004-09-23 Reiner Steib <Reiner.Steib@gmx.de>
71
72 * gnus-msg.el (gnus-configure-posting-styles): Narrow to headers
73 in `header' match. Reported by Svend Tollak Munkejord.
74
12004-09-20 Stefan Monnier <monnier@iro.umontreal.ca> 752004-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
2 76
3 * mm-decode.el (mm-copy-to-buffer): Preserve the data's unibyteness. 77 * mm-decode.el (mm-copy-to-buffer): Preserve the data's unibyteness.
diff --git a/lisp/gnus/flow-fill.el b/lisp/gnus/flow-fill.el
index a22f2a5af07..8a8098727fe 100644
--- a/lisp/gnus/flow-fill.el
+++ b/lisp/gnus/flow-fill.el
@@ -1,4 +1,4 @@
1;;; flow-fill.el --- interprete RFC2646 "flowed" text 1;;; flow-fill.el --- interpret RFC2646 "flowed" text
2 2
3;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. 3;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
4 4
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 5544c28f967..d4dbe1319e0 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -1464,6 +1464,8 @@ Initialized from `text-mode-syntax-table.")
1464 1464
1465(defvar gnus-inhibit-hiding nil) 1465(defvar gnus-inhibit-hiding nil)
1466 1466
1467(defvar gnus-article-edit-mode nil)
1468
1467;;; Macros for dealing with the article buffer. 1469;;; Macros for dealing with the article buffer.
1468 1470
1469(defmacro gnus-with-article-headers (&rest forms) 1471(defmacro gnus-with-article-headers (&rest forms)
diff --git a/lisp/gnus/gnus-cache.el b/lisp/gnus/gnus-cache.el
index bc09b3a2368..99e77b18f68 100644
--- a/lisp/gnus/gnus-cache.el
+++ b/lisp/gnus/gnus-cache.el
@@ -125,9 +125,8 @@ it's not cached."
125 (overview-file (gnus-cache-file-name 125 (overview-file (gnus-cache-file-name
126 (car gnus-cache-buffer) ".overview"))) 126 (car gnus-cache-buffer) ".overview")))
127 ;; write the overview only if it was modified 127 ;; write the overview only if it was modified
128 (when (buffer-modified-p buffer) 128 (when (and (buffer-live-p buffer) (buffer-modified-p buffer))
129 (save-excursion 129 (with-current-buffer buffer
130 (set-buffer buffer)
131 (if (> (buffer-size) 0) 130 (if (> (buffer-size) 0)
132 ;; Non-empty overview, write it to a file. 131 ;; Non-empty overview, write it to a file.
133 (let ((coding-system-for-write 132 (let ((coding-system-for-write
diff --git a/lisp/gnus/gnus-diary.el b/lisp/gnus/gnus-diary.el
index 120b812c209..e82d77fa58b 100644
--- a/lisp/gnus/gnus-diary.el
+++ b/lisp/gnus/gnus-diary.el
@@ -204,7 +204,7 @@ There are currently two built-in format functions:
204 (let ((head (cdr (assoc (intern (format "X-Diary-%s" (car elt))) 204 (let ((head (cdr (assoc (intern (format "X-Diary-%s" (car elt)))
205 headers)))) 205 headers))))
206 (when head 206 (when head
207 (nndiary-parse-schedule-value head (cadr elt) (caddr elt))))) 207 (nndiary-parse-schedule-value head (cadr elt) (car (cddr elt))))))
208 nndiary-headers)) 208 nndiary-headers))
209 209
210;; #### NOTE: Gnus sometimes gives me a HEADER not corresponding to any 210;; #### NOTE: Gnus sometimes gives me a HEADER not corresponding to any
diff --git a/lisp/gnus/gnus-fun.el b/lisp/gnus/gnus-fun.el
index 087c30da5df..82282e084f7 100644
--- a/lisp/gnus/gnus-fun.el
+++ b/lisp/gnus/gnus-fun.el
@@ -26,8 +26,11 @@
26;;; Code: 26;;; Code:
27 27
28(eval-when-compile 28(eval-when-compile
29 (require 'cl) 29 (require 'cl))
30 (require 'mm-util)) 30
31(require 'mm-util)
32(require 'gnus-ems)
33(require 'gnus-util)
31 34
32(defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory) 35(defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory)
33 "*Directory where X-Face PBM files are stored." 36 "*Directory where X-Face PBM files are stored."
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index f986e451c02..33531e7f8a4 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -915,7 +915,9 @@ header line with the old Message-ID."
915 (not to-address))) 915 (not to-address)))
916 ;; This is news. 916 ;; This is news.
917 (if post 917 (if post
918 (message-news (or to-group group)) 918 (message-news
919 (or to-group
920 (and (not (gnus-virtual-group-p pgroup)) group)))
919 (set-buffer gnus-article-copy) 921 (set-buffer gnus-article-copy)
920 (gnus-msg-treat-broken-reply-to) 922 (gnus-msg-treat-broken-reply-to)
921 (message-followup (if (or newsgroup-p force-news) 923 (message-followup (if (or newsgroup-p force-news)
@@ -1801,9 +1803,11 @@ this is a reply."
1801 ;; Obsolete format of header match. 1803 ;; Obsolete format of header match.
1802 (and (gnus-buffer-live-p gnus-article-copy) 1804 (and (gnus-buffer-live-p gnus-article-copy)
1803 (with-current-buffer gnus-article-copy 1805 (with-current-buffer gnus-article-copy
1804 (let ((header (message-fetch-field (pop style)))) 1806 (save-restriction
1805 (and header 1807 (nnheader-narrow-to-headers)
1806 (string-match (pop style) header)))))) 1808 (let ((header (message-fetch-field (pop style))))
1809 (and header
1810 (string-match (pop style) header)))))))
1807 ((or (symbolp match) 1811 ((or (symbolp match)
1808 (functionp match)) 1812 (functionp match))
1809 (cond 1813 (cond
@@ -1819,9 +1823,11 @@ this is a reply."
1819 ;; New format of header match. 1823 ;; New format of header match.
1820 (and (gnus-buffer-live-p gnus-article-copy) 1824 (and (gnus-buffer-live-p gnus-article-copy)
1821 (with-current-buffer gnus-article-copy 1825 (with-current-buffer gnus-article-copy
1822 (let ((header (message-fetch-field (nth 1 match)))) 1826 (save-restriction
1823 (and header 1827 (nnheader-narrow-to-headers)
1824 (string-match (nth 2 match) header)))))) 1828 (let ((header (message-fetch-field (nth 1 match))))
1829 (and header
1830 (string-match (nth 2 match) header)))))))
1825 (t 1831 (t
1826 ;; This is a form to be evaled. 1832 ;; This is a form to be evaled.
1827 (eval match))))) 1833 (eval match)))))
diff --git a/lisp/gnus/gnus-picon.el b/lisp/gnus/gnus-picon.el
index dbb96333d75..817696ed974 100644
--- a/lisp/gnus/gnus-picon.el
+++ b/lisp/gnus/gnus-picon.el
@@ -40,8 +40,9 @@
40;; 40;;
41;;; Code: 41;;; Code:
42 42
43(eval-when-compile (require 'cl))
44
43(require 'gnus) 45(require 'gnus)
44(require 'custom)
45(require 'gnus-art) 46(require 'gnus-art)
46 47
47;;; User variables: 48;;; User variables:
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index 3b7c8c916d8..28ef2c22a15 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -282,7 +282,7 @@ is restarted, and sometimes reloaded."
282 :link '(custom-manual "(gnus)Exiting Gnus") 282 :link '(custom-manual "(gnus)Exiting Gnus")
283 :group 'gnus) 283 :group 'gnus)
284 284
285(defconst gnus-version-number "5.10.6" 285(defconst gnus-version-number "5.11"
286 "Version number for this version of Gnus.") 286 "Version number for this version of Gnus.")
287 287
288(defconst gnus-version (format "Gnus v%s" gnus-version-number) 288(defconst gnus-version (format "Gnus v%s" gnus-version-number)
@@ -1104,9 +1104,8 @@ Check the NNTPSERVER environment variable and the
1104 (and (file-readable-p gnus-nntpserver-file) 1104 (and (file-readable-p gnus-nntpserver-file)
1105 (with-temp-buffer 1105 (with-temp-buffer
1106 (insert-file-contents gnus-nntpserver-file) 1106 (insert-file-contents gnus-nntpserver-file)
1107 (let ((name (buffer-string))) 1107 (when (re-search-forward "[^ \t\n\r]+" nil t)
1108 (unless (string-match "\\`[ \t\n]*$" name) 1108 (match-string 0))))))
1109 name))))))
1110 1109
1111(defcustom gnus-select-method 1110(defcustom gnus-select-method
1112 (condition-case nil 1111 (condition-case nil
@@ -3309,38 +3308,6 @@ that that variable is buffer-local to the summary buffers."
3309 (push (cons server result) gnus-server-method-cache)) 3308 (push (cons server result) gnus-server-method-cache))
3310 result))) 3309 result)))
3311 3310
3312(defsubst gnus-method-to-server (method)
3313 (catch 'server-name
3314 (setq method (or method gnus-select-method))
3315
3316 ;; Perhaps it is already in the cache.
3317 (mapc (lambda (name-method)
3318 (if (equal (cdr name-method) method)
3319 (throw 'server-name (car name-method))))
3320 gnus-server-method-cache)
3321
3322 (mapc
3323 (lambda (server-alist)
3324 (mapc (lambda (name-method)
3325 (when (gnus-methods-equal-p (cdr name-method) method)
3326 (unless (member name-method gnus-server-method-cache)
3327 (push name-method gnus-server-method-cache))
3328 (throw 'server-name (car name-method))))
3329 server-alist))
3330 (let ((alists (list gnus-server-alist
3331 gnus-predefined-server-alist)))
3332 (if gnus-select-method
3333 (push (list (cons "native" gnus-select-method)) alists))
3334 alists))
3335
3336 (let* ((name (if (member (cadr method) '(nil ""))
3337 (format "%s" (car method))
3338 (format "%s:%s" (car method) (cadr method))))
3339 (name-method (cons name method)))
3340 (unless (member name-method gnus-server-method-cache)
3341 (push name-method gnus-server-method-cache))
3342 name)))
3343
3344(defsubst gnus-server-get-method (group method) 3311(defsubst gnus-server-get-method (group method)
3345 ;; Input either a server name, and extended server name, or a 3312 ;; Input either a server name, and extended server name, or a
3346 ;; select method, and return a select method. 3313 ;; select method, and return a select method.
diff --git a/lisp/gnus/html2text.el b/lisp/gnus/html2text.el
index f2aefbef993..6f1ef3b0289 100644
--- a/lisp/gnus/html2text.el
+++ b/lisp/gnus/html2text.el
@@ -1,5 +1,5 @@
1;;; html2text.el --- a simple html to plain text converter 1;;; html2text.el --- a simple html to plain text converter
2;; Copyright (C) 2002, 2003 Free Software Foundation, Inc. 2;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
3 3
4;; Author: Joakim Hove <hove@phys.ntnu.no> 4;; Author: Joakim Hove <hove@phys.ntnu.no>
5 5
@@ -42,7 +42,8 @@
42(defvar html2text-format-single-element-list '(("hr" . html2text-clean-hr))) 42(defvar html2text-format-single-element-list '(("hr" . html2text-clean-hr)))
43 43
44(defvar html2text-replace-list 44(defvar html2text-replace-list
45 '(("&nbsp;" . " ") ("&gt;" . ">") ("&lt;" . "<") ("&quot;" . "\"")) 45 '(("&nbsp;" . " ") ("&gt;" . ">") ("&lt;" . "<") ("&quot;" . "\"")
46 ("&amp;" . "&") ("&apos;" . "'"))
46 "The map of entity to text. 47 "The map of entity to text.
47 48
48This is an alist were each element is a dotted pair consisting of an 49This is an alist were each element is a dotted pair consisting of an
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 21c386b86ce..8e5edbc048a 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -6685,7 +6685,7 @@ regexp VARSTR."
6685 (let ((locals (save-excursion 6685 (let ((locals (save-excursion
6686 (set-buffer buffer) 6686 (set-buffer buffer)
6687 (buffer-local-variables))) 6687 (buffer-local-variables)))
6688 (regexp "^gnus\\|^nn\\|^message\\|^user-mail-address")) 6688 (regexp "^gnus\\|^nn\\|^message\\|^sendmail\\|^smtp\\|^user-mail-address"))
6689 (mapcar 6689 (mapcar
6690 (lambda (local) 6690 (lambda (local)
6691 (when (and (consp local) 6691 (when (and (consp local)
diff --git a/lisp/gnus/mm-bodies.el b/lisp/gnus/mm-bodies.el
index 40b920bb70d..ad2239a22b8 100644
--- a/lisp/gnus/mm-bodies.el
+++ b/lisp/gnus/mm-bodies.el
@@ -38,9 +38,16 @@
38(require 'rfc2047) 38(require 'rfc2047)
39(require 'mm-encode) 39(require 'mm-encode)
40 40
41;; 8bit treatment gets any char except: 0x32 - 0x7f, CR, LF, TAB, BEL, 41;; 8bit treatment gets any char except: 0x32 - 0x7f, LF, TAB, BEL,
42;; BS, vertical TAB, form feed, and ^_ 42;; BS, vertical TAB, form feed, and ^_
43(defvar mm-7bit-chars "\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f") 43;;
44;; Note that CR is *not* included, as that would allow a non-paired CR
45;; in the body contrary to RFC 2822:
46;;
47;; - CR and LF MUST only occur together as CRLF; they MUST NOT
48;; appear independently in the body.
49
50(defvar mm-7bit-chars "\x20-\x7f\n\t\x7\x8\xb\xc\x1f")
44 51
45(defcustom mm-body-charset-encoding-alist 52(defcustom mm-body-charset-encoding-alist
46 '((iso-2022-jp . 7bit) 53 '((iso-2022-jp . 7bit)
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index ff05393415d..51ec38dc387 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -623,14 +623,14 @@ Postpone undisplaying of viewers for types in
623 "Copy the contents of the current buffer to a fresh buffer." 623 "Copy the contents of the current buffer to a fresh buffer."
624 (save-excursion 624 (save-excursion
625 (let ((obuf (current-buffer)) 625 (let ((obuf (current-buffer))
626 (multibyte enable-multibyte-characters)
627 beg) 626 beg)
628 (goto-char (point-min)) 627 (goto-char (point-min))
629 (search-forward-regexp "^\n" nil t) 628 (search-forward-regexp "^\n" nil t)
630 (setq beg (point)) 629 (setq beg (point))
631 (set-buffer (generate-new-buffer " *mm*")) 630 (set-buffer
632 ;; Preserve the data's unibyteness (for url-insert-file-contents). 631 ;; Preserve the data's unibyteness (for url-insert-file-contents).
633 (set-buffer-multibyte multibyte) 632 (let ((default-enable-multibyte-characters (mm-multibyte-p)))
633 (generate-new-buffer " *mm*")))
634 (insert-buffer-substring obuf beg) 634 (insert-buffer-substring obuf beg)
635 (current-buffer)))) 635 (current-buffer))))
636 636
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index 55c3fd33bc2..3831e1a07ce 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -133,15 +133,9 @@ In XEmacs, also return non-nil if CS is a coding system object."
133 133
134(defvar mm-charset-synonym-alist 134(defvar mm-charset-synonym-alist
135 `( 135 `(
136 ;; Perfectly fine? A valid MIME name, anyhow.
137 ,@(unless (mm-coding-system-p 'big5)
138 '((big5 . cn-big5)))
139 ;; Not in XEmacs, but it's not a proper MIME charset anyhow. 136 ;; Not in XEmacs, but it's not a proper MIME charset anyhow.
140 ,@(unless (mm-coding-system-p 'x-ctext) 137 ,@(unless (mm-coding-system-p 'x-ctext)
141 '((x-ctext . ctext))) 138 '((x-ctext . ctext)))
142 ;; Apparently not defined in Emacs 20, but is a valid MIME name.
143 ,@(unless (mm-coding-system-p 'gb2312)
144 '((gb2312 . cn-gb-2312)))
145 ;; ISO-8859-15 is very similar to ISO-8859-1. But it's _different_! 139 ;; ISO-8859-15 is very similar to ISO-8859-1. But it's _different_!
146 ,@(unless (mm-coding-system-p 'iso-8859-15) 140 ,@(unless (mm-coding-system-p 'iso-8859-15)
147 '((iso-8859-15 . iso-8859-1))) 141 '((iso-8859-15 . iso-8859-1)))
@@ -727,11 +721,12 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'."
727(defun mm-image-load-path (&optional package) 721(defun mm-image-load-path (&optional package)
728 (let (dir result) 722 (let (dir result)
729 (dolist (path load-path (nreverse result)) 723 (dolist (path load-path (nreverse result))
730 (if (file-directory-p 724 (when (and path
731 (setq dir (concat (file-name-directory 725 (file-directory-p
732 (directory-file-name path)) 726 (setq dir (concat (file-name-directory
733 "etc/" (or package "gnus/")))) 727 (directory-file-name path))
734 (push dir result)) 728 "etc/" (or package "gnus/")))))
729 (push dir result))
735 (push path result)))) 730 (push path result))))
736 731
737;; Fixme: This doesn't look useful where it's used. 732;; Fixme: This doesn't look useful where it's used.
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index c9f5cb80190..b8107364411 100644
--- a/lisp/gnus/mml-sec.el
+++ b/lisp/gnus/mml-sec.el
@@ -113,7 +113,7 @@ You can also customize or set `mml-signencrypt-style-alist' instead."
113 (setf (second style-item) style) 113 (setf (second style-item) style)
114 ;; otherwise, just return the current value 114 ;; otherwise, just return the current value
115 (second style-item)) 115 (second style-item))
116 (gnus-message 3 "Warning, attempt to set invalid signencrypt-style")))) 116 (message "Warning, attempt to set invalid signencrypt style"))))
117 117
118;;; Security functions 118;;; Security functions
119 119
diff --git a/lisp/gnus/mml-smime.el b/lisp/gnus/mml-smime.el
index 596585afc72..3313d6a4118 100644
--- a/lisp/gnus/mml-smime.el
+++ b/lisp/gnus/mml-smime.el
@@ -25,9 +25,12 @@
25 25
26;;; Code: 26;;; Code:
27 27
28(eval-when-compile (require 'cl))
29
28(require 'smime) 30(require 'smime)
29(require 'mm-decode) 31(require 'mm-decode)
30(autoload 'message-narrow-to-headers "message") 32(autoload 'message-narrow-to-headers "message")
33(autoload 'message-fetch-field "message")
31 34
32(defun mml-smime-sign (cont) 35(defun mml-smime-sign (cont)
33 (when (null smime-keys) 36 (when (null smime-keys)
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index c8f1c030acc..1843cf2068d 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -449,6 +449,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
449 ;; actually are hard newlines in the text. 449 ;; actually are hard newlines in the text.
450 (let (use-hard-newlines) 450 (let (use-hard-newlines)
451 (when (and (string= type "text/plain") 451 (when (and (string= type "text/plain")
452 (not (string= (cdr (assq 'sign cont)) "pgp"))
452 (or (null (assq 'format cont)) 453 (or (null (assq 'format cont))
453 (string= (cdr (assq 'format cont)) 454 (string= (cdr (assq 'format cont))
454 "flowed")) 455 "flowed"))
@@ -590,7 +591,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
590 (insert-buffer-substring (cdr (assq 'buffer cont)))) 591 (insert-buffer-substring (cdr (assq 'buffer cont))))
591 ((and (setq filename (cdr (assq 'filename cont))) 592 ((and (setq filename (cdr (assq 'filename cont)))
592 (not (equal (cdr (assq 'nofile cont)) "yes"))) 593 (not (equal (cdr (assq 'nofile cont)) "yes")))
593 (mm-insert-file-contents filename)) 594 (mm-insert-file-contents filename nil nil nil nil t))
594 (t 595 (t
595 (insert (cdr (assq 'contents cont))))) 596 (insert (cdr (assq 'contents cont)))))
596 (goto-char (point-min)) 597 (goto-char (point-min))
diff --git a/lisp/gnus/nnfolder.el b/lisp/gnus/nnfolder.el
index 142202cb4d2..369631ce653 100644
--- a/lisp/gnus/nnfolder.el
+++ b/lisp/gnus/nnfolder.el
@@ -1174,7 +1174,7 @@ This command does not work if you use short group names."
1174 (let ((range (nth 0 action)) 1174 (let ((range (nth 0 action))
1175 (what (nth 1 action)) 1175 (what (nth 1 action))
1176 (marks (nth 2 action))) 1176 (marks (nth 2 action)))
1177 (assert (or (eq what 'add) (eq what 'del)) t 1177 (assert (or (eq what 'add) (eq what 'del)) nil
1178 "Unknown request-set-mark action: %s" what) 1178 "Unknown request-set-mark action: %s" what)
1179 (dolist (mark marks) 1179 (dolist (mark marks)
1180 (setq nnfolder-marks (gnus-update-alist-soft 1180 (setq nnfolder-marks (gnus-update-alist-soft
diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el
index 0ff82c69523..1b6ec636734 100644
--- a/lisp/gnus/nnheader.el
+++ b/lisp/gnus/nnheader.el
@@ -1,7 +1,7 @@
1;;; nnheader.el --- header access macros for Gnus and its backends 1;;; nnheader.el --- header access macros for Gnus and its backends
2 2
3;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 3;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996,
4;; 1997, 1998, 2000, 2001, 2002, 2003 4;; 1997, 1998, 2000, 2001, 2002, 2003, 2004
5;; Free Software Foundation, Inc. 5;; Free Software Foundation, Inc.
6 6
7;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet> 7;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -58,7 +58,7 @@ they will keep on jabbering all the time."
58 :group 'gnus-server 58 :group 'gnus-server
59 :type 'boolean) 59 :type 'boolean)
60 60
61(defvar nnheader-max-head-length 4096 61(defvar nnheader-max-head-length 8192
62 "*Max length of the head of articles. 62 "*Max length of the head of articles.
63 63
64Value is an integer, nil, or t. nil means read in chunks of a file 64Value is an integer, nil, or t. nil means read in chunks of a file
diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index cb820b094c1..4a9cfd32943 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -923,7 +923,7 @@ Use the nov database for the current group if available."
923 (let ((range (nth 0 action)) 923 (let ((range (nth 0 action))
924 (what (nth 1 action)) 924 (what (nth 1 action))
925 (marks (nth 2 action))) 925 (marks (nth 2 action)))
926 (assert (or (eq what 'add) (eq what 'del)) t 926 (assert (or (eq what 'add) (eq what 'del)) nil
927 "Unknown request-set-mark action: %s" what) 927 "Unknown request-set-mark action: %s" what)
928 (dolist (mark marks) 928 (dolist (mark marks)
929 (setq nnml-marks (gnus-update-alist-soft 929 (setq nnml-marks (gnus-update-alist-soft
diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el
index 978bec3c361..cbb5a1fc5b0 100644
--- a/lisp/gnus/rfc2047.el
+++ b/lisp/gnus/rfc2047.el
@@ -126,6 +126,25 @@ quoted-printable and base64 respectively.")
126;;; Functions for encoding RFC2047 messages 126;;; Functions for encoding RFC2047 messages
127;;; 127;;;
128 128
129(defun rfc2047-qp-or-base64 ()
130 "Return the type with which to encode the buffer.
131This is either `base64' or `quoted-printable'."
132 (save-excursion
133 (let ((limit (min (point-max) (+ 2000 (point-min))))
134 (n8bit 0))
135 (goto-char (point-min))
136 (skip-chars-forward "\x20-\x7f\r\n\t" limit)
137 (while (< (point) limit)
138 (incf n8bit)
139 (forward-char 1)
140 (skip-chars-forward "\x20-\x7f\r\n\t" limit))
141 (if (or (< (* 6 n8bit) (- limit (point-min)))
142 ;; Don't base64, say, a short line with a single
143 ;; non-ASCII char when splitting parts by charset.
144 (= n8bit 1))
145 'quoted-printable
146 'base64))))
147
129(defun rfc2047-narrow-to-field () 148(defun rfc2047-narrow-to-field ()
130 "Narrow the buffer to the header on the current line." 149 "Narrow the buffer to the header on the current line."
131 (beginning-of-line) 150 (beginning-of-line)
@@ -411,7 +430,7 @@ By default, the region is treated as containing addresses (see
411 ;; encoding, choose the one that's shorter. 430 ;; encoding, choose the one that's shorter.
412 (save-restriction 431 (save-restriction
413 (narrow-to-region b e) 432 (narrow-to-region b e)
414 (if (eq (mm-qp-or-base64) 'base64) 433 (if (eq (rfc2047-qp-or-base64) 'base64)
415 'B 434 'B
416 'Q)))) 435 'Q))))
417 (start (concat 436 (start (concat
@@ -720,11 +739,15 @@ decodable."
720 ;; Be more liberal to accept buggy base64 strings. If 739 ;; Be more liberal to accept buggy base64 strings. If
721 ;; base64-decode-string accepts buggy strings, this function could 740 ;; base64-decode-string accepts buggy strings, this function could
722 ;; be aliased to identity. 741 ;; be aliased to identity.
723 (case (mod (length string) 4) 742 (if (= 0 (mod (length string) 4))
724 (0 string) 743 string
725 (1 string) ;; Error, don't pad it. 744 (when (string-match "=+$" string)
726 (2 (concat string "==")) 745 (setq string (substring string 0 (match-beginning 0))))
727 (3 (concat string "=")))) 746 (case (mod (length string) 4)
747 (0 string)
748 (1 string) ;; Error, don't pad it.
749 (2 (concat string "=="))
750 (3 (concat string "=")))))
728 751
729(defun rfc2047-decode (charset encoding string) 752(defun rfc2047-decode (charset encoding string)
730 "Decode STRING from the given MIME CHARSET in the given ENCODING. 753 "Decode STRING from the given MIME CHARSET in the given ENCODING.
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index 6fb99db157a..85534f3828c 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -1746,7 +1746,7 @@ REMOVE not nil, remove the ADDRESSES."
1746 (goto-char (point-min)) 1746 (goto-char (point-min))
1747 (when (re-search-forward "^X-Spam: yes;" nil t) 1747 (when (re-search-forward "^X-Spam: yes;" nil t)
1748 spam-split-group)) 1748 spam-split-group))
1749 (error "Error running spamoracle" status)))))))) 1749 (error "Error running spamoracle: %s" status))))))))
1750 1750
1751(defun spam-spamoracle-learn (articles article-is-spam-p &optional unregister) 1751(defun spam-spamoracle-learn (articles article-is-spam-p &optional unregister)
1752 "Run spamoracle in training mode." 1752 "Run spamoracle in training mode."
@@ -1768,8 +1768,8 @@ REMOVE not nil, remove the ADDRESSES."
1768 `("-f" ,spam-spamoracle-database 1768 `("-f" ,spam-spamoracle-database
1769 "add" ,arg) 1769 "add" ,arg)
1770 `("add" ,arg))))) 1770 `("add" ,arg)))))
1771 (when (not (eq 0 status)) 1771 (unless (eq 0 status)
1772 (error "Error running spamoracle" status))))))) 1772 (error "Error running spamoracle: %s" status)))))))
1773 1773
1774(defun spam-spamoracle-learn-ham (articles &optional unregister) 1774(defun spam-spamoracle-learn-ham (articles &optional unregister)
1775 (spam-spamoracle-learn articles nil unregister)) 1775 (spam-spamoracle-learn articles nil unregister))
diff --git a/lisp/printing.el b/lisp/printing.el
index a406e09b8c0..3efb53111fd 100644
--- a/lisp/printing.el
+++ b/lisp/printing.el
@@ -5,13 +5,13 @@
5 5
6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> 6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
7;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> 7;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
8;; Time-stamp: <2004/09/21 22:51:58 vinicius> 8;; Time-stamp: <2004/09/26 22:11:24 vinicius>
9;; Keywords: wp, print, PostScript 9;; Keywords: wp, print, PostScript
10;; Version: 6.8 10;; Version: 6.8.1
11;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/ 11;; X-URL: http://www.cpqd.com.br/~vinicius/emacs/
12 12
13(defconst pr-version "6.8" 13(defconst pr-version "6.8.1"
14 "printing.el, v 6.8 <2004/09/21 vinicius> 14 "printing.el, v 6.8.1 <2004/09/26 vinicius>
15 15
16Please send all bug fixes and enhancements to 16Please send all bug fixes and enhancements to
17 Vinicius Jose Latorre <viniciusjl@ig.com.br> 17 Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -125,16 +125,16 @@ Please send all bug fixes and enhancements to
125;; Novices (First Users) 125;; Novices (First Users)
126;; --------------------- 126;; ---------------------
127;; 127;;
128;; First of all, take a glance of printing documentation only to have an idea 128;; First of all, see printing documentation only to get an idea of what
129;; of what `printing' is capable. 129;; `printing' is capable.
130;; 130;;
131;; Then try to set the variables: `pr-ps-name', `pr-ps-printer-alist', 131;; Then try to set the variables: `pr-ps-name', `pr-ps-printer-alist',
132;; `pr-txt-name', `pr-txt-printer-alist' and `pr-path-alist'. These variables 132;; `pr-txt-name', `pr-txt-printer-alist' and `pr-path-alist'. These variables
133;; are the main variables for printing processing. 133;; are the main variables for printing processing.
134;; 134;;
135;; Now, please, see these variables documentation more in deep. You can do 135;; Now, please, see these variables documentation deeper. You can do this by
136;; this by typing C-h v pr-ps-name RET (for example) if you already loaded 136;; typing C-h v pr-ps-name RET (for example) if you already loaded printing
137;; printing package, or by browsing printing.el source file. 137;; package, or by browsing printing.el source file.
138;; 138;;
139;; If the documentation isn't clear or if you find a way to improve the 139;; If the documentation isn't clear or if you find a way to improve the
140;; documentation, please, send an email to maintainer. All printing users 140;; documentation, please, send an email to maintainer. All printing users
@@ -263,7 +263,8 @@ Please send all bug fixes and enhancements to
263;; in Windows. The gsprint utility is faster than ghostscript to print 263;; in Windows. The gsprint utility is faster than ghostscript to print
264;; monochrome PostScript. 264;; monochrome PostScript.
265;; 265;;
266;; The efficiency is similar to print non-monochrome PostScript file. 266;; To print non-monochrome PostScript file, the efficiency of ghostscript
267;; is similar to gsprint.
267;; 268;;
268;; Also the gsprint utility comes together with gsview distribution. 269;; Also the gsprint utility comes together with gsview distribution.
269;; 270;;
@@ -3887,7 +3888,7 @@ image in a file with that name."
3887 (interactive (list (pr-ps-infile-preprint "Print preview "))) 3888 (interactive (list (pr-ps-infile-preprint "Print preview ")))
3888 (and (stringp filename) (file-exists-p filename) 3889 (and (stringp filename) (file-exists-p filename)
3889 (let* ((file (pr-expand-file-name filename)) 3890 (let* ((file (pr-expand-file-name filename))
3890 (tempfile (pr-dosify-file-name (make-temp-name file)))) 3891 (tempfile (pr-dosify-file-name (make-temp-file file))))
3891 ;; gs use 3892 ;; gs use
3892 (pr-call-process pr-gs-command 3893 (pr-call-process pr-gs-command
3893 (format "-sDEVICE=%s" pr-gs-device) 3894 (format "-sDEVICE=%s" pr-gs-device)
@@ -5221,7 +5222,8 @@ non-nil."
5221 5222
5222 5223
5223(defun pr-delete-file (file) 5224(defun pr-delete-file (file)
5224 (and pr-delete-temp-file (delete-file file))) 5225 (and pr-delete-temp-file (file-exists-p file)
5226 (delete-file file)))
5225 5227
5226 5228
5227(defun pr-expand-file-name (filename) 5229(defun pr-expand-file-name (filename)
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index 1972074fdb1..612a2034e00 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -1069,8 +1069,9 @@ static char *magick[] = {
1069(defvar breakpoint-disabled-icon nil 1069(defvar breakpoint-disabled-icon nil
1070 "Icon for disabled breakpoint in display margin") 1070 "Icon for disabled breakpoint in display margin")
1071 1071
1072(defvar breakpoint-bitmap nil 1072;; Bitmap for breakpoint in fringe
1073 "Bitmap for breakpoint in fringe") 1073(define-fringe-bitmap 'breakpoint
1074 "\x3c\x7e\xff\xff\xff\xff\x7e\x3c")
1074 1075
1075(defface breakpoint-enabled-bitmap-face 1076(defface breakpoint-enabled-bitmap-face
1076 '((t 1077 '((t
@@ -1140,9 +1141,8 @@ static char *magick[] = {
1140 (save-excursion 1141 (save-excursion
1141 (goto-char (posn-point posn)) 1142 (goto-char (posn-point posn))
1142 (if (or (posn-object posn) 1143 (if (or (posn-object posn)
1143 (and breakpoint-bitmap 1144 (eq (car (fringe-bitmaps-at-pos (posn-point posn)))
1144 (eq (car (fringe-bitmaps-at-pos (posn-point posn))) 1145 'breakpoint))
1145 breakpoint-bitmap)))
1146 (gud-remove nil) 1146 (gud-remove nil)
1147 (gud-break nil))))))) 1147 (gud-break nil)))))))
1148 1148
@@ -1831,11 +1831,7 @@ BUFFER nil or omitted means use the current buffer."
1831 (if (>= (car (window-fringes)) 8) 1831 (if (>= (car (window-fringes)) 8)
1832 (gdb-put-string 1832 (gdb-put-string
1833 nil (1+ start) 1833 nil (1+ start)
1834 `(left-fringe 1834 `(left-fringe breakpoint
1835 ,(or breakpoint-bitmap
1836 (setq breakpoint-bitmap
1837 (define-fringe-bitmap
1838 "\x3c\x7e\xff\xff\xff\xff\x7e\x3c")))
1839 ,(if enabled 1835 ,(if enabled
1840 'breakpoint-enabled-bitmap-face 1836 'breakpoint-enabled-bitmap-face
1841 'breakpoint-disabled-bitmap-face))) 1837 'breakpoint-disabled-bitmap-face)))
diff --git a/lisp/term.el b/lisp/term.el
index 7991e74c5e9..35bb74834b5 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -1,6 +1,6 @@
1;;; term.el --- general command interpreter in a window stuff 1;;; term.el --- general command interpreter in a window stuff
2 2
3;;; Copyright (C) 1988, 1990, 1992, 1994, 1995 Free Software Foundation, Inc. 3;;; Copyright (C) 1988, 1990, 1992, 1994, 1995, 2004 Free Software Foundation, Inc.
4 4
5;; Author: Per Bothner <bothner@cygnus.com> 5;; Author: Per Bothner <bothner@cygnus.com>
6;; Based on comint mode written by: Olin Shivers <shivers@cs.cmu.edu> 6;; Based on comint mode written by: Olin Shivers <shivers@cs.cmu.edu>
@@ -676,7 +676,6 @@ Buffer local variable.")
676(defvar term-terminal-menu) 676(defvar term-terminal-menu)
677 677
678;;; Let's silence the byte-compiler -mm 678;;; Let's silence the byte-compiler -mm
679(defvar term-ansi-at-eval-string nil)
680(defvar term-ansi-at-host nil) 679(defvar term-ansi-at-host nil)
681(defvar term-ansi-at-dir nil) 680(defvar term-ansi-at-dir nil)
682(defvar term-ansi-at-user nil) 681(defvar term-ansi-at-user nil)
@@ -692,9 +691,6 @@ Buffer local variable.")
692(defvar term-ansi-current-highlight 0) 691(defvar term-ansi-current-highlight 0)
693(defvar term-ansi-current-reverse 0) 692(defvar term-ansi-current-reverse 0)
694(defvar term-ansi-current-invisible 0) 693(defvar term-ansi-current-invisible 0)
695(defvar term-ansi-default-fg 0)
696(defvar term-ansi-default-bg 0)
697(defvar term-ansi-current-temp 0)
698 694
699;;; Four should be enough, if you want more, just add. -mm 695;;; Four should be enough, if you want more, just add. -mm
700(defvar term-terminal-more-parameters 0) 696(defvar term-terminal-more-parameters 0)
@@ -915,6 +911,9 @@ is buffer-local.")
915 (define-key term-raw-map [backspace] 'term-send-backspace) 911 (define-key term-raw-map [backspace] 'term-send-backspace)
916 (define-key term-raw-map [home] 'term-send-home) 912 (define-key term-raw-map [home] 'term-send-home)
917 (define-key term-raw-map [end] 'term-send-end) 913 (define-key term-raw-map [end] 'term-send-end)
914 (define-key term-raw-map [S-prior] 'scroll-down)
915 (define-key term-raw-map [S-next] 'scroll-up)
916 (define-key term-raw-map [S-insert] 'term-paste)
918 (define-key term-raw-map [prior] 'term-send-prior) 917 (define-key term-raw-map [prior] 'term-send-prior)
919 (define-key term-raw-map [next] 'term-send-next))) 918 (define-key term-raw-map [next] 'term-send-next)))
920 919
@@ -930,6 +929,27 @@ is buffer-local.")
930 929
931(put 'term-mode 'mode-class 'special) 930(put 'term-mode 'mode-class 'special)
932 931
932
933;;; Use this variable as a display table for `term-mode'.
934(defvar term-display-table
935 (let ((dt (or (copy-sequence standard-display-table)
936 (make-display-table)))
937 i)
938 ;; avoid changing the display table for ^J
939 (setq i 0)
940 (while (< i 10)
941 (aset dt i (vector i))
942 (setq i (1+ i)))
943 (setq i 11)
944 (while (< i 32)
945 (aset dt i (vector i))
946 (setq i (1+ i)))
947 (setq i 128)
948 (while (< i 256)
949 (aset dt i (vector i))
950 (setq i (1+ i)))
951 dt))
952
933(defun term-mode () 953(defun term-mode ()
934 "Major mode for interacting with an inferior interpreter. 954 "Major mode for interacting with an inferior interpreter.
935The interpreter name is same as buffer name, sans the asterisks. 955The interpreter name is same as buffer name, sans the asterisks.
@@ -979,6 +999,9 @@ Entry to this mode runs the hooks on `term-mode-hook'."
979 (setq major-mode 'term-mode) 999 (setq major-mode 'term-mode)
980 (setq mode-name "Term") 1000 (setq mode-name "Term")
981 (use-local-map term-mode-map) 1001 (use-local-map term-mode-map)
1002 ;; we do not want indent to sneak in any tabs
1003 (setq indent-tabs-mode nil)
1004 (setq buffer-display-table term-display-table)
982 (make-local-variable 'term-home-marker) 1005 (make-local-variable 'term-home-marker)
983 (setq term-home-marker (copy-marker 0)) 1006 (setq term-home-marker (copy-marker 0))
984 (make-local-variable 'term-saved-home-marker) 1007 (make-local-variable 'term-saved-home-marker)
@@ -1182,6 +1205,11 @@ without any interpretation."
1182 ((eq arg '-) -1) 1205 ((eq arg '-) -1)
1183 (t (1- arg))))))) 1206 (t (1- arg)))))))
1184 1207
1208(defun term-paste ()
1209 "Insert the last stretch of killed text at point."
1210 (interactive)
1211 (term-send-raw-string (current-kill 0)))
1212
1185;; Which would be better: "\e[A" or "\eOA"? readline accepts either. 1213;; Which would be better: "\e[A" or "\eOA"? readline accepts either.
1186;; For my configuration it's definitely better \eOA but YMMV. -mm 1214;; For my configuration it's definitely better \eOA but YMMV. -mm
1187;; For example: vi works with \eOA while elm wants \e[A ... 1215;; For example: vi works with \eOA while elm wants \e[A ...
@@ -1193,8 +1221,8 @@ without any interpretation."
1193(defun term-send-end () (interactive) (term-send-raw-string "\e[4~")) 1221(defun term-send-end () (interactive) (term-send-raw-string "\e[4~"))
1194(defun term-send-prior () (interactive) (term-send-raw-string "\e[5~")) 1222(defun term-send-prior () (interactive) (term-send-raw-string "\e[5~"))
1195(defun term-send-next () (interactive) (term-send-raw-string "\e[6~")) 1223(defun term-send-next () (interactive) (term-send-raw-string "\e[6~"))
1196(defun term-send-del () (interactive) (term-send-raw-string "\C-?")) 1224(defun term-send-del () (interactive) (term-send-raw-string "\e[3~"))
1197(defun term-send-backspace () (interactive) (term-send-raw-string "\C-H")) 1225(defun term-send-backspace () (interactive) (term-send-raw-string "\C-?"))
1198 1226
1199(defun term-char-mode () 1227(defun term-char-mode ()
1200 "Switch to char (\"raw\") sub-mode of term mode. 1228 "Switch to char (\"raw\") sub-mode of term mode.
@@ -1364,14 +1392,15 @@ The main purpose is to get rid of the local keymap."
1364 "%s%s:li#%d:co#%d:cl=\\E[H\\E[J:cd=\\E[J:bs:am:xn:cm=\\E[%%i%%d;%%dH\ 1392 "%s%s:li#%d:co#%d:cl=\\E[H\\E[J:cd=\\E[J:bs:am:xn:cm=\\E[%%i%%d;%%dH\
1365:nd=\\E[C:up=\\E[A:ce=\\E[K:ho=\\E[H:pt\ 1393:nd=\\E[C:up=\\E[A:ce=\\E[K:ho=\\E[H:pt\
1366:al=\\E[L:dl=\\E[M:DL=\\E[%%dM:AL=\\E[%%dL:cs=\\E[%%i%%d;%%dr:sf=^J\ 1394:al=\\E[L:dl=\\E[M:DL=\\E[%%dM:AL=\\E[%%dL:cs=\\E[%%i%%d;%%dr:sf=^J\
1367:te=\\E[2J\\E[?47l\\E8:ti=\\E7\\E[?47h\
1368:dc=\\E[P:DC=\\E[%%dP:IC=\\E[%%d@:im=\\E[4h:ei=\\E[4l:mi:\ 1395:dc=\\E[P:DC=\\E[%%dP:IC=\\E[%%d@:im=\\E[4h:ei=\\E[4l:mi:\
1369:so=\\E[7m:se=\\E[m:us=\\E[4m:ue=\\E[m:md=\\E[1m:mr=\\E[7m:me=\\E[m\ 1396:so=\\E[7m:se=\\E[m:us=\\E[4m:ue=\\E[m:md=\\E[1m:mr=\\E[7m:me=\\E[m\
1370:UP=\\E[%%dA:DO=\\E[%%dB:LE=\\E[%%dD:RI=\\E[%%dC\ 1397:UP=\\E[%%dA:DO=\\E[%%dB:LE=\\E[%%dD:RI=\\E[%%dC\
1371:kl=\\EOD:kd=\\EOB:kr=\\EOC:ku=\\EOA:kN=\\E[6~:kP=\\E[5~:@7=\\E[4~:kh=\\E[1~\ 1398:kl=\\EOD:kd=\\EOB:kr=\\EOC:ku=\\EOA:kN=\\E[6~:kP=\\E[5~:@7=\\E[4~:kh=\\E[1~\
1372:mk=\\E[8m:cb=\\E[1K:op=\\E[39;49m:Co#8:pa#64:AB=\\E[4%%dm:AF=\\E[3%%dm:cr=^M\ 1399:mk=\\E[8m:cb=\\E[1K:op=\\E[39;49m:Co#8:pa#64:AB=\\E[4%%dm:AF=\\E[3%%dm:cr=^M\
1373:bl=^G:do=^J:le=^H:ta=^I:se=\E[27m:ue=\E24m:" 1400:bl=^G:do=^J:le=^H:ta=^I:se=\E[27m:ue=\E24m\
1401:kb=^?:kD=^[[3~:sc=\E7:rc=\E8:"
1374;;; : -undefine ic 1402;;; : -undefine ic
1403;;; don't define :te=\\E[2J\\E[?47l\\E8:ti=\\E7\\E[?47h\
1375 "termcap capabilities supported") 1404 "termcap capabilities supported")
1376 1405
1377;;; This auxiliary function cranks up the process for term-exec in 1406;;; This auxiliary function cranks up the process for term-exec in
@@ -1398,9 +1427,10 @@ The main purpose is to get rid of the local keymap."
1398 (process-connection-type t) 1427 (process-connection-type t)
1399 ;; We should suppress conversion of end-of-line format. 1428 ;; We should suppress conversion of end-of-line format.
1400 (inhibit-eol-conversion t) 1429 (inhibit-eol-conversion t)
1401 ;; inhibit-eol-conversion doesn't seem to do the job, but this does. 1430 ;; The process's output contains not just chars but also binary
1402 (coding-system-for-read 'unknown-unix) 1431 ;; escape codes, so we need to see the raw output. We will have to
1403 ) 1432 ;; do the decoding by hand on the parts that are made of chars.
1433 (coding-system-for-read 'binary))
1404 (apply 'start-process name buffer 1434 (apply 'start-process name buffer
1405 "/bin/sh" "-c" 1435 "/bin/sh" "-c"
1406 (format "stty -nl echo rows %d columns %d sane 2>/dev/null;\ 1436 (format "stty -nl echo rows %d columns %d sane 2>/dev/null;\
@@ -2691,7 +2721,12 @@ See `term-prompt-regexp'."
2691 (if (not funny) (setq funny str-length)) 2721 (if (not funny) (setq funny str-length))
2692 (cond ((> funny i) 2722 (cond ((> funny i)
2693 (cond ((eq term-terminal-state 1) 2723 (cond ((eq term-terminal-state 1)
2694 (term-move-columns 1) 2724 ;; We are in state 1, we need to wrap
2725 ;; around. Go to the beginning of
2726 ;; the next line and switch to state
2727 ;; 0.
2728 (term-down 1)
2729 (term-move-columns (- (term-current-column)))
2695 (setq term-terminal-state 0))) 2730 (setq term-terminal-state 0)))
2696 (setq count (- funny i)) 2731 (setq count (- funny i))
2697 (setq temp (- (+ (term-horizontal-column) count) 2732 (setq temp (- (+ (term-horizontal-column) count)
@@ -2700,6 +2735,7 @@ See `term-prompt-regexp'."
2700 ((> count temp) ;; Some chars fit. 2735 ((> count temp) ;; Some chars fit.
2701 ;; This iteration, handle only what fits. 2736 ;; This iteration, handle only what fits.
2702 (setq count (- count temp)) 2737 (setq count (- count temp))
2738 (setq temp 0)
2703 (setq funny (+ count i))) 2739 (setq funny (+ count i)))
2704 ((or (not (or term-pager-count 2740 ((or (not (or term-pager-count
2705 term-scroll-with-delete)) 2741 term-scroll-with-delete))
@@ -2720,7 +2756,7 @@ See `term-prompt-regexp'."
2720 ;; following point if not eob nor insert-mode. 2756 ;; following point if not eob nor insert-mode.
2721 (let ((old-column (current-column)) 2757 (let ((old-column (current-column))
2722 columns pos) 2758 columns pos)
2723 (insert (substring str i funny)) 2759 (insert (decode-coding-string (substring str i funny) locale-coding-system))
2724 (setq term-current-column (current-column) 2760 (setq term-current-column (current-column)
2725 columns (- term-current-column old-column)) 2761 columns (- term-current-column old-column))
2726 (when (not (or (eobp) term-insert-mode)) 2762 (when (not (or (eobp) term-insert-mode))
@@ -2739,7 +2775,7 @@ See `term-prompt-regexp'."
2739 (setq term-terminal-state 1))) 2775 (setq term-terminal-state 1)))
2740 (setq i (1- funny))) 2776 (setq i (1- funny)))
2741 ((and (setq term-terminal-state 0) 2777 ((and (setq term-terminal-state 0)
2742 (eq char ?\^I)) ; TAB 2778 (eq char ?\^I)) ; TAB (terminfo: ht)
2743 ;; FIXME: Does not handle line wrap! 2779 ;; FIXME: Does not handle line wrap!
2744 (setq count (term-current-column)) 2780 (setq count (term-current-column))
2745 (setq count (+ count 8 (- (mod count 8)))) 2781 (setq count (+ count 8 (- (mod count 8))))
@@ -2766,7 +2802,7 @@ See `term-prompt-regexp'."
2766 (if (not (and term-kill-echo-list 2802 (if (not (and term-kill-echo-list
2767 (term-check-kill-echo-list))) 2803 (term-check-kill-echo-list)))
2768 (term-down 1 t))) 2804 (term-down 1 t)))
2769 ((eq char ?\b) 2805 ((eq char ?\b) ;; (terminfo: cub1)
2770 (term-move-columns -1)) 2806 (term-move-columns -1))
2771 ((eq char ?\033) ; Escape 2807 ((eq char ?\033) ; Escape
2772 (setq term-terminal-state 2)) 2808 (setq term-terminal-state 2))
@@ -2816,13 +2852,13 @@ See `term-prompt-regexp'."
2816 ((eq char ?M) ;; scroll reversed 2852 ((eq char ?M) ;; scroll reversed
2817 (term-insert-lines 1) 2853 (term-insert-lines 1)
2818 (setq term-terminal-state 0)) 2854 (setq term-terminal-state 0))
2819 ((eq char ?7) ;; Save cursor 2855 ((eq char ?7) ;; Save cursor (terminfo: sc)
2820 (term-handle-deferred-scroll) 2856 (term-handle-deferred-scroll)
2821 (setq term-saved-cursor 2857 (setq term-saved-cursor
2822 (cons (term-current-row) 2858 (cons (term-current-row)
2823 (term-horizontal-column))) 2859 (term-horizontal-column)))
2824 (setq term-terminal-state 0)) 2860 (setq term-terminal-state 0))
2825 ((eq char ?8) ;; Restore cursor 2861 ((eq char ?8) ;; Restore cursor (terminfo: rc)
2826 (if term-saved-cursor 2862 (if term-saved-cursor
2827 (term-goto (car term-saved-cursor) 2863 (term-goto (car term-saved-cursor)
2828 (cdr term-saved-cursor))) 2864 (cdr term-saved-cursor)))
@@ -2974,13 +3010,13 @@ See `term-prompt-regexp'."
2974 ((eq parameter 8) 3010 ((eq parameter 8)
2975 (setq term-ansi-current-invisible 1)) 3011 (setq term-ansi-current-invisible 1))
2976 3012
2977;;; Reset reverse (i.e. terminfo rmso) 3013;;; Reset underline (i.e. terminfo rmul)
2978 ((eq parameter 24) 3014 ((eq parameter 24)
2979 (setq term-ansi-current-reverse 0)) 3015 (setq term-ansi-current-underline 0))
2980 3016
2981;;; Reset underline (i.e. terminfo rmul) 3017;;; Reset reverse (i.e. terminfo rmso)
2982 ((eq parameter 27) 3018 ((eq parameter 27)
2983 (setq term-ansi-current-underline 0)) 3019 (setq term-ansi-current-reverse 0))
2984 3020
2985;;; Foreground 3021;;; Foreground
2986 ((and (>= parameter 30) (<= parameter 37)) 3022 ((and (>= parameter 30) (<= parameter 37))
@@ -3095,7 +3131,7 @@ See `term-prompt-regexp'."
3095 (term-goto 3131 (term-goto
3096 (1- term-terminal-previous-parameter) 3132 (1- term-terminal-previous-parameter)
3097 (1- term-terminal-parameter))) 3133 (1- term-terminal-parameter)))
3098 ;; \E[A - cursor up 3134 ;; \E[A - cursor up (terminfo: cuu1)
3099 ((eq char ?A) 3135 ((eq char ?A)
3100 (term-handle-deferred-scroll) 3136 (term-handle-deferred-scroll)
3101 (term-down (- (max 1 term-terminal-parameter)) t)) 3137 (term-down (- (max 1 term-terminal-parameter)) t))
@@ -3108,13 +3144,13 @@ See `term-prompt-regexp'."
3108 ;; \E[D - cursor left 3144 ;; \E[D - cursor left
3109 ((eq char ?D) 3145 ((eq char ?D)
3110 (term-move-columns (- (max 1 term-terminal-parameter)))) 3146 (term-move-columns (- (max 1 term-terminal-parameter))))
3111 ;; \E[J - clear to end of screen 3147 ;; \E[J - clear to end of screen (terminfo: ed, clear)
3112 ((eq char ?J) 3148 ((eq char ?J)
3113 (term-erase-in-display term-terminal-parameter)) 3149 (term-erase-in-display term-terminal-parameter))
3114 ;; \E[K - clear to end of line 3150 ;; \E[K - clear to end of line (terminfo: el, el1)
3115 ((eq char ?K) 3151 ((eq char ?K)
3116 (term-erase-in-line term-terminal-parameter)) 3152 (term-erase-in-line term-terminal-parameter))
3117 ;; \E[L - insert lines 3153 ;; \E[L - insert lines (terminfo: il, il1)
3118 ((eq char ?L) 3154 ((eq char ?L)
3119 (term-insert-lines (max 1 term-terminal-parameter))) 3155 (term-insert-lines (max 1 term-terminal-parameter)))
3120 ;; \E[M - delete lines 3156 ;; \E[M - delete lines
@@ -3128,19 +3164,22 @@ See `term-prompt-regexp'."
3128 (term-insert-spaces (max 1 term-terminal-parameter))) 3164 (term-insert-spaces (max 1 term-terminal-parameter)))
3129 ;; \E[?h - DEC Private Mode Set 3165 ;; \E[?h - DEC Private Mode Set
3130 ((eq char ?h) 3166 ((eq char ?h)
3131 (cond ((eq term-terminal-parameter 4) 3167 (cond ((eq term-terminal-parameter 4) ;; (terminfo: smir)
3132 (setq term-insert-mode t)) 3168 (setq term-insert-mode t))
3133 ((eq term-terminal-parameter 47) 3169 ;; ((eq term-terminal-parameter 47) ;; (terminfo: smcup)
3134 (term-switch-to-alternate-sub-buffer t)))) 3170 ;; (term-switch-to-alternate-sub-buffer t))
3171 ))
3135 ;; \E[?l - DEC Private Mode Reset 3172 ;; \E[?l - DEC Private Mode Reset
3136 ((eq char ?l) 3173 ((eq char ?l)
3137 (cond ((eq term-terminal-parameter 4) 3174 (cond ((eq term-terminal-parameter 4) ;; (terminfo: rmir)
3138 (setq term-insert-mode nil)) 3175 (setq term-insert-mode nil))
3139 ((eq term-terminal-parameter 47) 3176 ;; ((eq term-terminal-parameter 47) ;; (terminfo: rmcup)
3140 (term-switch-to-alternate-sub-buffer nil)))) 3177 ;; (term-switch-to-alternate-sub-buffer nil))
3178 ))
3141 3179
3142;;; Modified to allow ansi coloring -mm 3180;;; Modified to allow ansi coloring -mm
3143 ;; \E[m - Set/reset standard mode 3181 ;; \E[m - Set/reset modes, set bg/fg
3182 ;;(terminfo: smso,rmso,smul,rmul,rev,bold,sgr0,invis,op,setab,setaf)
3144 ((eq char ?m) 3183 ((eq char ?m)
3145 (when (= term-terminal-more-parameters 1) 3184 (when (= term-terminal-more-parameters 1)
3146 (if (>= term-terminal-previous-parameter-4 0) 3185 (if (>= term-terminal-previous-parameter-4 0)
@@ -3184,32 +3223,32 @@ The top-most line is line 0."
3184 (not (and (= term-scroll-start 0) 3223 (not (and (= term-scroll-start 0)
3185 (= term-scroll-end term-height)))))) 3224 (= term-scroll-end term-height))))))
3186 3225
3187(defun term-switch-to-alternate-sub-buffer (set) 3226;; (defun term-switch-to-alternate-sub-buffer (set)
3188 ;; If asked to switch to (from) the alternate sub-buffer, and already (not) 3227;; ;; If asked to switch to (from) the alternate sub-buffer, and already (not)
3189 ;; using it, do nothing. This test is needed for some programs (including 3228;; ;; using it, do nothing. This test is needed for some programs (including
3190 ;; Emacs) that emit the ti termcap string twice, for unknown reason. 3229;; ;; Emacs) that emit the ti termcap string twice, for unknown reason.
3191 (term-handle-deferred-scroll) 3230;; (term-handle-deferred-scroll)
3192 (if (eq set (not (term-using-alternate-sub-buffer))) 3231;; (if (eq set (not (term-using-alternate-sub-buffer)))
3193 (let ((row (term-current-row)) 3232;; (let ((row (term-current-row))
3194 (col (term-horizontal-column))) 3233;; (col (term-horizontal-column)))
3195 (cond (set 3234;; (cond (set
3196 (goto-char (point-max)) 3235;; (goto-char (point-max))
3197 (if (not (eq (preceding-char) ?\n)) 3236;; (if (not (eq (preceding-char) ?\n))
3198 (term-insert-char ?\n 1)) 3237;; (term-insert-char ?\n 1))
3199 (setq term-scroll-with-delete t) 3238;; (setq term-scroll-with-delete t)
3200 (setq term-saved-home-marker (copy-marker term-home-marker)) 3239;; (setq term-saved-home-marker (copy-marker term-home-marker))
3201 (set-marker term-home-marker (point))) 3240;; (set-marker term-home-marker (point)))
3202 (t 3241;; (t
3203 (setq term-scroll-with-delete 3242;; (setq term-scroll-with-delete
3204 (not (and (= term-scroll-start 0) 3243;; (not (and (= term-scroll-start 0)
3205 (= term-scroll-end term-height)))) 3244;; (= term-scroll-end term-height))))
3206 (set-marker term-home-marker term-saved-home-marker) 3245;; (set-marker term-home-marker term-saved-home-marker)
3207 (set-marker term-saved-home-marker nil) 3246;; (set-marker term-saved-home-marker nil)
3208 (setq term-saved-home-marker nil) 3247;; (setq term-saved-home-marker nil)
3209 (goto-char term-home-marker))) 3248;; (goto-char term-home-marker)))
3210 (setq term-current-column nil) 3249;; (setq term-current-column nil)
3211 (setq term-current-row 0) 3250;; (setq term-current-row 0)
3212 (term-goto row col)))) 3251;; (term-goto row col))))
3213 3252
3214;; Default value for the symbol term-command-hook. 3253;; Default value for the symbol term-command-hook.
3215 3254
@@ -3519,11 +3558,11 @@ all pending output has been dealt with."))
3519 (if (not (bolp)) (insert-before-markers ?\n))) 3558 (if (not (bolp)) (insert-before-markers ?\n)))
3520 3559
3521(defun term-erase-in-line (kind) 3560(defun term-erase-in-line (kind)
3522 (if (> kind 1) ;; erase left of point 3561 (if (= kind 1) ;; erase left of point
3523 (let ((cols (term-horizontal-column)) (saved-point (point))) 3562 (let ((cols (term-horizontal-column)) (saved-point (point)))
3524 (term-vertical-motion 0) 3563 (term-vertical-motion 0)
3525 (delete-region (point) saved-point) 3564 (delete-region (point) saved-point)
3526 (term-insert-char ?\n cols))) 3565 (term-insert-char ? cols)))
3527 (if (not (eq kind 1)) ;; erase right of point 3566 (if (not (eq kind 1)) ;; erase right of point
3528 (let ((saved-point (point)) 3567 (let ((saved-point (point))
3529 (wrapped (and (zerop (term-horizontal-column)) 3568 (wrapped (and (zerop (term-horizontal-column))
@@ -3622,7 +3661,7 @@ Should only be called when point is at the start of a screen line."
3622 (term-insert-char ?\n lines) 3661 (term-insert-char ?\n lines)
3623 (goto-char start))) 3662 (goto-char start)))
3624 3663
3625(defun term-set-output-log (name) 3664(defun term-start-output-log (name)
3626 "Record raw inferior process output in a buffer." 3665 "Record raw inferior process output in a buffer."
3627 (interactive (list (if term-log-buffer 3666 (interactive (list (if term-log-buffer
3628 nil 3667 nil
@@ -3644,10 +3683,10 @@ Should only be called when point is at the start of a screen line."
3644 (message "Recording terminal emulator output into buffer \"%s\"" 3683 (message "Recording terminal emulator output into buffer \"%s\""
3645 (buffer-name term-log-buffer)))) 3684 (buffer-name term-log-buffer))))
3646 3685
3647(defun term-stop-photo () 3686(defun term-stop-output-log ()
3648 "Discontinue raw inferior process logging." 3687 "Discontinue raw inferior process logging."
3649 (interactive) 3688 (interactive)
3650 (term-set-output-log nil)) 3689 (term-start-output-log nil))
3651 3690
3652(defun term-show-maximum-output () 3691(defun term-show-maximum-output ()
3653 "Put the end of the buffer at the bottom of the window." 3692 "Put the end of the buffer at the bottom of the window."
diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el
index 4db493803ef..c2ed47cb48d 100644
--- a/lisp/textmodes/enriched.el
+++ b/lisp/textmodes/enriched.el
@@ -102,7 +102,7 @@ expression, which is evaluated to get the string to insert.")
102(defconst enriched-annotation-regexp "<\\(/\\)?\\([-A-Za-z0-9]+\\)>" 102(defconst enriched-annotation-regexp "<\\(/\\)?\\([-A-Za-z0-9]+\\)>"
103 "Regular expression matching enriched-text annotations.") 103 "Regular expression matching enriched-text annotations.")
104 104
105(defconst enriched-translations 105(defvar enriched-translations
106 '((face (bold-italic "bold" "italic") 106 '((face (bold-italic "bold" "italic")
107 (bold "bold") 107 (bold "bold")
108 (italic "italic") 108 (italic "italic")
diff --git a/lispref/ChangeLog b/lispref/ChangeLog
index cb510c43e33..8c25fe6c531 100644
--- a/lispref/ChangeLog
+++ b/lispref/ChangeLog
@@ -1,3 +1,14 @@
12004-09-28 Richard M. Stallman <rms@gnu.org>
2
3 * text.texi (Special Properties): Clarify line-spacing and line-height.
4
5 * searching.texi (Regexp Search): Add looking-back.
6
72004-09-25 Luc Teirlinck <teirllm@auburn.edu>
8
9 * display.texi: Correct typos.
10 (Image Descriptors): Correct xref's.
11
12004-09-25 Richard M. Stallman <rms@gnu.org> 122004-09-25 Richard M. Stallman <rms@gnu.org>
2 13
3 * text.texi (Special Properties): Cleanups in `cursor'. 14 * text.texi (Special Properties): Cleanups in `cursor'.
diff --git a/lispref/display.texi b/lispref/display.texi
index 44eda6723d1..2163ae725af 100644
--- a/lispref/display.texi
+++ b/lispref/display.texi
@@ -2716,7 +2716,7 @@ center the bitmap. The allowed values are @code{top}, @code{center},
2716or @code{bottom}. 2716or @code{bottom}.
2717 2717
2718The @var{align} argument may also be a list @code{(@var{align} 2718The @var{align} argument may also be a list @code{(@var{align}
2719@var{periodic})} where @var{align} is intepreted as described above. 2719@var{periodic})} where @var{align} is interpreted as described above.
2720If @var{periodic} is non-@code{nil}, it specifies that the rows in 2720If @var{periodic} is non-@code{nil}, it specifies that the rows in
2721@code{bits} should be repeated enough times to reach the specified 2721@code{bits} should be repeated enough times to reach the specified
2722height. 2722height.
@@ -2988,7 +2988,7 @@ edge, center, or right edge of the text area.
2988used with @code{:align-to} to specify that the position is relative to 2988used with @code{:align-to} to specify that the position is relative to
2989the left edge of the given area. Once the base offset for a relative 2989the left edge of the given area. Once the base offset for a relative
2990position has been set (by the first occurrence of one of these 2990position has been set (by the first occurrence of one of these
2991symbols), further occurences of these symbols are interpreted as the 2991symbols), further occurrences of these symbols are interpreted as the
2992width of the specified area. For example, to align to the center of 2992width of the specified area. For example, to align to the center of
2993the left-margin, use 2993the left-margin, use
2994 2994
@@ -3181,7 +3181,7 @@ are supported only if particular support libraries are installed on
3181your machine. In some environments, Emacs allows loading image 3181your machine. In some environments, Emacs allows loading image
3182libraries on demand; if so, the variable @code{image-library-alist} 3182libraries on demand; if so, the variable @code{image-library-alist}
3183can be used to modify the set of known names for these dynamic 3183can be used to modify the set of known names for these dynamic
3184libraries (though it is not posible to add new image formats). 3184libraries (though it is not possible to add new image formats).
3185 3185
3186 The supported image formats include XBM, XPM (needing the 3186 The supported image formats include XBM, XPM (needing the
3187libraries @code{libXpm} version 3.4k and @code{libz}), GIF (needing 3187libraries @code{libXpm} version 3.4k and @code{libz}), GIF (needing
@@ -3409,7 +3409,7 @@ specifying @code{:mask nil}.
3409 3409
3410@item :pointer @var{shape} 3410@item :pointer @var{shape}
3411This specifies the pointer shape when the mouse pointer is over this 3411This specifies the pointer shape when the mouse pointer is over this
3412image. @xref{Pointer Shapes}, for available pointer shapes. 3412image. @xref{Pointer Shape}, for available pointer shapes.
3413 3413
3414@item :map @var{map} 3414@item :map @var{map}
3415This associates an image map of @dfn{hot spots} with this image. 3415This associates an image map of @dfn{hot spots} with this image.
@@ -3437,7 +3437,7 @@ When the mouse pointer is above a hot-spot area of an image, the
3437property it defines a tool-tip for the hot-spot, and if it contains 3437property it defines a tool-tip for the hot-spot, and if it contains
3438a @code{pointer} property, it defines the shape of the mouse cursor when 3438a @code{pointer} property, it defines the shape of the mouse cursor when
3439it is over the hot-spot. 3439it is over the hot-spot.
3440@xref{Pointer Shapes}, for available pointer shapes. 3440@xref{Pointer Shape}, for available pointer shapes.
3441 3441
3442When you click the mouse when the mouse pointer is over a hot-spot, an 3442When you click the mouse when the mouse pointer is over a hot-spot, an
3443event is composed by combining the @var{id} of the hot-spot with the 3443event is composed by combining the @var{id} of the hot-spot with the
diff --git a/lispref/searching.texi b/lispref/searching.texi
index fd0d0e172a0..93a152fbbe1 100644
--- a/lispref/searching.texi
+++ b/lispref/searching.texi
@@ -975,6 +975,32 @@ comes back" twice.
975@end example 975@end example
976@end defun 976@end defun
977 977
978@defun looking-back regexp &optional limit
979This function returns @code{t} if @var{regexp} matches text before
980point, ending at point, and @code{nil} otherwise.
981
982Because regular expression matching works only going forward, this is
983implemented by searching backwards from point for a match that ends at
984point. That can be quite slow if it has to search a long distance.
985You can bound the time required by specifying @var{limit}, which says
986not to search before @var{limit}. In this case, the match that is
987found must begin at or after @var{limit}.
988
989@example
990@group
991---------- Buffer: foo ----------
992I read "@point{}The cat in the hat
993comes back" twice.
994---------- Buffer: foo ----------
995
996(looking-back "read \"" 3)
997 @result{} t
998(looking-back "read \"" 4)
999 @result{} nil
1000@end group
1001@end example
1002@end defun
1003
978@node POSIX Regexps 1004@node POSIX Regexps
979@section POSIX Regular Expression Searching 1005@section POSIX Regular Expression Searching
980 1006
diff --git a/lispref/text.texi b/lispref/text.texi
index 82763db496c..caa3f21b7b1 100644
--- a/lispref/text.texi
+++ b/lispref/text.texi
@@ -2989,12 +2989,11 @@ for possible pointer shapes.
2989 2989
2990@item line-spacing 2990@item line-spacing
2991@kindex line-spacing @r{(text property)} 2991@kindex line-spacing @r{(text property)}
2992A newline can have a @code{line-spacing} text or overlay property 2992A newline can have a @code{line-spacing} text or overlay property that
2993that controls the height of the corresponding display line. 2993controls the height of the display line ending with that newline. The
2994@c ??? Which display line is "corresponding"? 2994property value overrides the default frame line spacing and the buffer
2995The @code{line-spacing} property overrides the default frame line 2995local @code{line-spacing} variable. We will call the property value
2996spacing and the buffer local @code{line-spacing} variable. We will 2996@var{line-spacing}.
2997call the property value @var{line-spacing}.
2998 2997
2999If @var{line-spacing} is a positive integer, the value specifies 2998If @var{line-spacing} is a positive integer, the value specifies
3000additional vertical space, below the display line, in pixels. 2999additional vertical space, below the display line, in pixels.
@@ -3012,18 +3011,13 @@ is equivalent to using the @code{line-height} property.
3012@item line-height 3011@item line-height
3013@kindex line-height @r{(text property)} 3012@kindex line-height @r{(text property)}
3014A newline can have a @code{line-height} text or overlay property that 3013A newline can have a @code{line-height} text or overlay property that
3015controls the total height of the corresponding display line. 3014controls the total height of the display line ending in that newline.
3016@c ??? Which display line is "corresponding"?
3017We will call the property value @var{line-height}. 3015We will call the property value @var{line-height}.
3018 3016
3019If @var{line-height} is 0, the newline does not contribute to the 3017If @var{line-height} is 0, the height of the line is determined solely
3020height of the display row; instead the height of the newline glyph is 3018from its contents; nothing is added. Any @code{line-spacing} property
3021reduced. 3019on this newline is ignored. This case is useful for tiling small
3022@c ??? That is not clear. Reduced how much? 3020images or image slices without adding blank areas between the images.
3023In that case, any @code{line-spacing} property on
3024this newline is ignored. This can be used to tile small images or
3025image slices without adding blank areas between the images.
3026@c ??? Precisely which of these features does ``this'' mean?
3027 3021
3028If @var{line-height} is a positive integer, the value specifies the 3022If @var{line-height} is a positive integer, the value specifies the
3029minimum line height in pixels. The line's ascent height is 3023minimum line height in pixels. The line's ascent height is
diff --git a/man/ChangeLog b/man/ChangeLog
index 7b20cda2bc0..fc0bd61497a 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,3 +1,63 @@
12004-09-28 Kim F. Storm <storm@cua.dk>
2
3 * display.texi (Display Custom) <indicate-buffer-boundaries>:
4 Align with new functionality.
5
62004-09-26 Jesper Harder <harder@ifa.au.dk>
7
8 * sieve.texi (Manage Sieve API): nil -> @code{nil}.
9 * pgg.texi (User Commands, Backend methods): do.
10 * gnus.texi: Markup fixes.
11 (Setting Process Marks): Fix `M P a' entry.
12 * emacs-mime: Fixes.
13
142004-09-23 Reiner Steib <Reiner.Steib@gmx.de>
15
16 * gnus-faq.texi ([5.12]): Fix code example for FQDN in Message-Ids
17 again.
18 Use 5.10 instead of 5.10.0.
19
202004-09-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
21
22 * gnus.texi (Summary Mail Commands): S D e.
23
242004-09-20 Raymond Scholz <ray-2004@zonix.de> (tiny change)
25
26 * gnus.texi (Misc Article): Refer to `Summary Buffer Mode Line' in
27 the gnus-article-mode-line-format section.
28
292004-09-20 Helmut Waitzmann <Helmut.Waitzmann@web.de> (tiny change)
30
31 * gnus.texi (Various Summary Stuff): Fix the documentation for
32 gnus-newsgroup-variables.
33
342004-09-20 Reiner Steib <Reiner.Steib@gmx.de>
35
36 * gnus.texi (MIME Commands): Added
37 gnus-mime-display-multipart-as-mixed,
38 gnus-mime-display-multipart-alternative-as-mixed,
39 gnus-mime-display-multipart-related-as-mixed.
40 (Mail Source Customization): Clarify `mail-source-directory'.
41 (Splitting Mail): Mention gnus-group-find-new-groups.
42 (SpamOracle): Fixed typo.
43
44 * gnus-faq.texi: Untabify.
45 ([6.3]): nnir.el is in contrib directory.
46
47 * message.texi (News Headers): Clarify how a unique ID is created.
48
49 * gnus.texi (Batching Agents): Fixed typo in example. Reported
50 by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
51
522004-09-20 Andre Srinivasan <andre@e2open.com>
53
54 * gnus.texi (Group Parameters): Added more on hooks. (Small
55 change.)
56
572004-09-20 Florian Weimer <fw@deneb.enyo.de>
58
59 * gnus.texi (Charsets): Point to relevant section in emacs-mime.
60
12004-09-22 Luc Teirlinck <teirllm@auburn.edu> 612004-09-22 Luc Teirlinck <teirllm@auburn.edu>
2 62
3 * display.texi (Display Custom): Remove stray `@end defvar'. 63 * display.texi (Display Custom): Remove stray `@end defvar'.
diff --git a/man/display.texi b/man/display.texi
index 7d5e8ef84e0..b10589da576 100644
--- a/man/display.texi
+++ b/man/display.texi
@@ -1007,22 +1007,26 @@ This can be combined with up and down arrow bitmaps shown at the top
1007and bottom of the left or right fringe if the window can be scrolled 1007and bottom of the left or right fringe if the window can be scrolled
1008in either direction. 1008in either direction.
1009 1009
1010The buffer-local variable @code{indicate-buffer-boundaries} controls 1010 The buffer-local variable @code{indicate-buffer-boundaries} controls
1011how the buffer boundaries and window scrolling is indicated in the 1011how the buffer boundaries and window scrolling is indicated in the
1012fringes. 1012fringes.
1013 1013
1014If the value is @code{left} or @code{right}, both angle and arrow 1014 If the value is @code{left} or @code{right}, both angle and arrow
1015bitmaps are displayed in the left or right fringe, respectively. 1015bitmaps are displayed in the left or right fringe, respectively.
1016Any other non-@code{nil} value causes the bitmap on the top line to be 1016
1017displayed in the left fringe, and the bitmap on the bottom line in the 1017 If value is an alist, each element @code{(@var{indicator} .
1018right fringe. 1018@var{position})} specifies the position of one of the indicators.
1019 1019The @var{indicator} must be one of @code{top}, @code{bottom},
1020If value is a cons @code{(angles . arrows)}, the car specifies the 1020@code{up}, @code{down}, or @code{t} which specifies the default
1021position of the angle bitmaps, and the cdr specifies the position of 1021position for the indicators not present in the alist.
1022the arrow bitmaps. For example, @code{(t . right)} places the top 1022The @var{position} is one of @code{left}, @code{right}, or @code{ni}
1023angle bitmap in left fringe, the bottom angle bitmap in right fringe, 1023which specifies not to show this indicator.
1024and both arrow bitmaps in right fringe. To show just the angle 1024
1025bitmaps in the left fringe, but no arrow bitmaps, use @code{(left . nil)}. 1025 For example, @code{((top . left) (t . right))} places the top angle
1026bitmap in left fringe, the bottom angle bitmap in right fringe, and
1027both arrow bitmaps in right fringe. To show just the angle bitmaps in
1028the left fringe, but no arrow bitmaps, use @code{((top . left)
1029(bottom . left))}.
1026 1030
1027@vindex default-indicate-buffer-boundaries 1031@vindex default-indicate-buffer-boundaries
1028 The value of the variable @code{default-indicate-buffer-boundaries} 1032 The value of the variable @code{default-indicate-buffer-boundaries}
diff --git a/man/emacs-mime.texi b/man/emacs-mime.texi
index f30eec7e0fb..d60e40ebbd0 100644
--- a/man/emacs-mime.texi
+++ b/man/emacs-mime.texi
@@ -328,7 +328,7 @@ you could say something like:
328 328
329@item mm-inline-large-images 329@item mm-inline-large-images
330@vindex mm-inline-large-images 330@vindex mm-inline-large-images
331When displaying inline images that are larger than the window, XEmacs 331When displaying inline images that are larger than the window, Emacs
332does not enable scrolling, which means that you cannot see the whole 332does not enable scrolling, which means that you cannot see the whole
333image. To prevent this, the library tries to determine the image size 333image. To prevent this, the library tries to determine the image size
334before displaying it inline, and if it doesn't fit the window, the 334before displaying it inline, and if it doesn't fit the window, the
diff --git a/man/gnus-faq.texi b/man/gnus-faq.texi
index 42789ffa1f0..6f0fddc5562 100644
--- a/man/gnus-faq.texi
+++ b/man/gnus-faq.texi
@@ -102,7 +102,7 @@ Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented
102 102
103@menu 103@menu
104* [1.1]:: What is the latest version of Gnus? 104* [1.1]:: What is the latest version of Gnus?
105* [1.2]:: What's new in 5.10.0? 105* [1.2]:: What's new in 5.10?
106* [1.3]:: Where and how to get Gnus? 106* [1.3]:: Where and how to get Gnus?
107* [1.4]:: What to do with the tarball now? 107* [1.4]:: What to do with the tarball now?
108* [1.5]:: Which version of Emacs do I need? 108* [1.5]:: Which version of Emacs do I need?
@@ -119,7 +119,7 @@ What is the latest version of Gnus?
119 119
120Answer: 120Answer:
121 121
122 Jingle please: Gnus 5.10.0 is released, get it while it's 122 Jingle please: Gnus 5.10 is released, get it while it's
123 hot! As well as the step in version number is rather 123 hot! As well as the step in version number is rather
124 small, Gnus 5.10 has tons of new features which you 124 small, Gnus 5.10 has tons of new features which you
125 shouldn't miss, however if you are cautious, you might 125 shouldn't miss, however if you are cautious, you might
@@ -131,7 +131,7 @@ Answer:
131@end ifnottex 131@end ifnottex
132@subsubheading Question 1.2: 132@subsubheading Question 1.2:
133 133
134What's new in 5.10.0? 134What's new in 5.10?
135 135
136Answer: 136Answer:
137 137
@@ -227,7 +227,7 @@ Which version of Emacs do I need?
227 227
228Answer: 228Answer:
229 229
230 Gnus 5.10.0 requires an Emacs version that is greater 230 Gnus 5.10 requires an Emacs version that is greater
231 than or equal to Emacs 20.7 or XEmacs 21.1. 231 than or equal to Emacs 20.7 or XEmacs 21.1.
232 232
233@ifnottex 233@ifnottex
@@ -440,7 +440,7 @@ the line
440@example 440@example
441 441
442SET HOME=C:\myhome 442SET HOME=C:\myhome
443 443
444@end example 444@end example
445 445
446@noindent 446@noindent
@@ -548,9 +548,9 @@ Answer:
548 548
549@example 549@example
550(add-to-list 'gnus-secondary-select-methods 550(add-to-list 'gnus-secondary-select-methods
551 '(nntp "news.yourSecondProvider.net")) 551 '(nntp "news.yourSecondProvider.net"))
552(add-to-list 'gnus-secondary-select-methods 552(add-to-list 'gnus-secondary-select-methods
553 '(nntp "news.yourThirdProvider.net")) 553 '(nntp "news.yourThirdProvider.net"))
554@end example 554@end example
555 555
556@ifnottex 556@ifnottex
@@ -745,9 +745,9 @@ Answer:
745(add-to-list 745(add-to-list
746 'gnus-secondary-select-methods 746 'gnus-secondary-select-methods
747 '(nnimap "Give the baby a name" 747 '(nnimap "Give the baby a name"
748 (nnimap-address "imap.yourProvider.net") 748 (nnimap-address "imap.yourProvider.net")
749 (nnimap-port 143) 749 (nnimap-port 143)
750 (nnimap-list-pattern "archive.*"))) 750 (nnimap-list-pattern "archive.*")))
751@end example 751@end example
752 752
753@noindent 753@noindent
@@ -877,7 +877,7 @@ Answer:
877 fetched when you enter a group and slow down the process of entering a group). 877 fetched when you enter a group and slow down the process of entering a group).
878 878
879 879
880 If you already use Gnus 5.10.0, you can say 880 If you already use Gnus 5.10, you can say
881 @samp{/o N} 881 @samp{/o N}
882 In summary buffer to load the last N messages, this feature is not available in 5.8.8 882 In summary buffer to load the last N messages, this feature is not available in 5.8.8
883 883
@@ -1000,7 +1000,7 @@ Answer:
1000 1000
1001Answer: 1001Answer:
1002 1002
1003 Only if you use Gnus 5.10.0 or younger. In this case you've got the 1003 Only if you use Gnus 5.10 or younger. In this case you've got the
1004 choice between w3, w3m, links, lynx and html2text, which 1004 choice between w3, w3m, links, lynx and html2text, which
1005 one is used can be specified in the variable 1005 one is used can be specified in the variable
1006 mm-text-html-renderer, so if you want links to render your 1006 mm-text-html-renderer, so if you want links to render your
@@ -1033,7 +1033,7 @@ Answer:
1033 @samp{W Y f} gives you full deuglify. 1033 @samp{W Y f} gives you full deuglify.
1034 See @samp{W Y C-h} or 1034 See @samp{W Y C-h} or
1035 have a look at the menus for other deuglifications). 1035 have a look at the menus for other deuglifications).
1036 Outlook deuglify is only available since Gnus 5.10.0. 1036 Outlook deuglify is only available since Gnus 5.10.
1037 1037
1038@ifnottex 1038@ifnottex
1039@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages 1039@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages
@@ -1204,8 +1204,8 @@ Answer:
1204@example 1204@example
1205(gnus-add-configuration 1205(gnus-add-configuration
1206 '(article (vertical 1.0 1206 '(article (vertical 1.0
1207 (summary .35 point) 1207 (summary .35 point)
1208 (article 1.0)))) 1208 (article 1.0))))
1209@end example 1209@end example
1210 1210
1211 1211
@@ -1252,7 +1252,7 @@ Answer:
1252 sadly hard tabulators are broken in 5.8.8. 1252 sadly hard tabulators are broken in 5.8.8.
1253 1253
1254 1254
1255 Since 5.10.0, Gnus offers you some very nice new specifiers, 1255 Since 5.10, Gnus offers you some very nice new specifiers,
1256 e.g. %B which draws a thread-tree and %&user-date which 1256 e.g. %B which draws a thread-tree and %&user-date which
1257 gives you a date where the details are dependent of the 1257 gives you a date where the details are dependent of the
1258 articles age. Here's an example which uses both: 1258 articles age. Here's an example which uses both:
@@ -1771,7 +1771,7 @@ Answer:
1771@end example 1771@end example
1772 1772
1773@noindent 1773@noindent
1774 if you already use Gnus 5.10.0, if you still use 5.8.8 or 1774 if you already use Gnus 5.10, if you still use 5.8.8 or
1775 5.9 try this instead: 1775 5.9 try this instead:
1776 1776
1777 1777
@@ -1793,7 +1793,7 @@ Answer:
1793 1793
1794Answer: 1794Answer:
1795 1795
1796 Since 5.10.0 Gnus doesn't generate a sender header by 1796 Since 5.10 Gnus doesn't generate a sender header by
1797 default. For older Gnus' try this in ~/.gnus: 1797 default. For older Gnus' try this in ~/.gnus:
1798 1798
1799 1799
@@ -1851,10 +1851,10 @@ Answer:
1851@end example 1851@end example
1852@noindent 1852@noindent
1853 in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this 1853 in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this
1854instead: 1854instead (works for newer versions a well):
1855@example 1855@example
1856(eval-after-load "message" 1856(eval-after-load "message"
1857 '(let (myfqdn "yourmachine.yourdomain.tld");; <-- Edit this! 1857 '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this!
1858 (if (boundp 'message-user-fqdn) 1858 (if (boundp 'message-user-fqdn)
1859 (setq message-user-fqdn fqdn) 1859 (setq message-user-fqdn fqdn)
1860 (gnus-message 1 "Redefining `message-make-fqdn'.") 1860 (gnus-message 1 "Redefining `message-make-fqdn'.")
@@ -2021,7 +2021,7 @@ Answer:
2021 the raw message, look for the message-id, and say 2021 the raw message, look for the message-id, and say
2022 @samp{M-^ the@@message.id RET} in a 2022 @samp{M-^ the@@message.id RET} in a
2023 summary buffer. 2023 summary buffer.
2024 Since Gnus 5.10.0 there's also a Gnus interface for 2024 Since Gnus 5.10 there's also a Gnus interface for
2025 groups.google.com which you can call with 2025 groups.google.com which you can call with
2026 @samp{G W}) in group buffer. 2026 @samp{G W}) in group buffer.
2027 2027
@@ -2046,9 +2046,9 @@ Answer:
2046 engines and with the help of nnir you can search trough 2046 engines and with the help of nnir you can search trough
2047 the indexed mail and generate a temporary group with all 2047 the indexed mail and generate a temporary group with all
2048 messages which met your search criteria. If this sound 2048 messages which met your search criteria. If this sound
2049 cool to you get nnir.el from 2049 cool to you get nnir.el from the contrib directory of the Gnus
2050 @uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/} 2050 distribution or
2051 or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}. 2051 @uref{http://quimby.gnus.org/cgi-bin/cvsweb.cgi/~checkout~/gnus/contrib/nnir.el?rev=HEAD&content-type=text/plain}
2052 Instructions on how to use it are at the top of the file. 2052 Instructions on how to use it are at the top of the file.
2053 2053
2054@ifnottex 2054@ifnottex
@@ -2231,7 +2231,7 @@ Answer:
2231 later when you're offline. It kind of mimics offline 2231 later when you're offline. It kind of mimics offline
2232 newsreaders like e.g. Forte Agent. If you want to use 2232 newsreaders like e.g. Forte Agent. If you want to use
2233 the Agent place the following in ~/.gnus if you are 2233 the Agent place the following in ~/.gnus if you are
2234 still using 5.8.8 or 5.9 (it's the default since 5.10.0): 2234 still using 5.8.8 or 5.9 (it's the default since 5.10):
2235 2235
2236 2236
2237@example 2237@example
@@ -2524,7 +2524,7 @@ Answer:
2524 2524
2525@noindent 2525@noindent
2526 in ~/.emacs. If you don't care about width of CJK 2526 in ~/.emacs. If you don't care about width of CJK
2527 characters or use Gnus 5.10.0 or younger together with a 2527 characters or use Gnus 5.10 or younger together with a
2528 recent GNU Emacs, you should say 2528 recent GNU Emacs, you should say
2529 2529
2530 2530
@@ -2538,7 +2538,7 @@ Answer:
2538 two suggestions). Finally if you are still using 5.8.8 2538 two suggestions). Finally if you are still using 5.8.8
2539 or 5.9 and experience speed problems with summary 2539 or 5.9 and experience speed problems with summary
2540 buffer generation, you definitely should update to 2540 buffer generation, you definitely should update to
2541 5.10.0 since there quite some work on improving it has 2541 5.10 since there quite some work on improving it has
2542 been done. 2542 been done.
2543 2543
2544@ifnottex 2544@ifnottex
diff --git a/man/gnus.texi b/man/gnus.texi
index b435a34b462..c94845c7a8b 100644
--- a/man/gnus.texi
+++ b/man/gnus.texi
@@ -3013,11 +3013,23 @@ tag can be removed from the article subjects in the summary buffer for
3013the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")} 3013the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")}
3014into the group parameters for the group. 3014into the group parameters for the group.
3015 3015
3016This can also be used as a group-specific hook function, if you'd like. 3016This can also be used as a group-specific hook function. If you want to
3017If you want to hear a beep when you enter a group, you could put 3017hear a beep when you enter a group, you could put something like
3018something like @code{(dummy-variable (ding))} in the parameters of that 3018@code{(dummy-variable (ding))} in the parameters of that group.
3019group. @code{dummy-variable} will be set to the result of the 3019@code{dummy-variable} will be set to the (meaningless) result of the
3020@code{(ding)} form, but who cares? 3020@code{(ding)} form.
3021
3022Alternatively, since the VARIABLE becomes local to the group, this
3023pattern can be used to temporarily change a hook. For example, if the
3024following is added to a group parameter
3025
3026@lisp
3027(gnus-summary-prepared-hook
3028 '(lambda nil (local-set-key "d" (local-key-binding "n"))))
3029@end lisp
3030
3031when the group is entered, the 'd' key will not mark the article as
3032expired.
3021 3033
3022@end table 3034@end table
3023 3035
@@ -5368,6 +5380,13 @@ to the @code{root} account, you may want to resend it to
5368This command understands the process/prefix convention 5380This command understands the process/prefix convention
5369(@pxref{Process/Prefix}). 5381(@pxref{Process/Prefix}).
5370 5382
5383@item S D e
5384@kindex S D e (Summary)
5385@findex gnus-summary-resend-message-edit
5386
5387Like the previous command, but will allow you to edit the message as
5388if it were a new message before resending.
5389
5371@item S O m 5390@item S O m
5372@kindex S O m (Summary) 5391@kindex S O m (Summary)
5373@findex gnus-uu-digest-mail-forward 5392@findex gnus-uu-digest-mail-forward
@@ -6187,7 +6206,7 @@ Mark all series that have already had some articles marked
6187@item M P a 6206@item M P a
6188@kindex M P a (Summary) 6207@kindex M P a (Summary)
6189@findex gnus-uu-mark-all 6208@findex gnus-uu-mark-all
6190Mark all articles in series order (@code{gnus-uu-mark-series}). 6209Mark all articles in series order (@code{gnus-uu-mark-all}).
6191 6210
6192@item M P b 6211@item M P b
6193@kindex M P b (Summary) 6212@kindex M P b (Summary)
@@ -9328,6 +9347,26 @@ Here's an example function the does the latter:
9328@item gnus-mime-multipart-functions 9347@item gnus-mime-multipart-functions
9329Alist of @acronym{MIME} multipart types and functions to handle them. 9348Alist of @acronym{MIME} multipart types and functions to handle them.
9330 9349
9350@vindex gnus-mime-display-multipart-alternative-as-mixed
9351@item gnus-mime-display-multipart-alternative-as-mixed
9352Display "multipart/alternative" parts as "multipart/mixed".
9353
9354@vindex gnus-mime-display-multipart-related-as-mixed
9355@item gnus-mime-display-multipart-related-as-mixed
9356Display "multipart/related" parts as "multipart/mixed".
9357
9358If displaying "text/html" is discouraged, see
9359@code{mm-discouraged-alternatives} in @ref{Display Customization,
9360Display Customization, , emacs-mime, Emacs-Mime Manual}. Images or
9361other material inside a "multipart/related" part might be overlooked
9362when this variable is nil.
9363
9364@vindex gnus-mime-display-multipart-as-mixed
9365@item gnus-mime-display-multipart-as-mixed
9366Display "multipart" parts as "multipart/mixed". If t, it overrides nil
9367values of @code{gnus-mime-display-multipart-alternative-as-mixed} and
9368@code{gnus-mime-display-multipart-related-as-mixed}.
9369
9331@vindex mm-file-name-rewrite-functions 9370@vindex mm-file-name-rewrite-functions
9332@item mm-file-name-rewrite-functions 9371@item mm-file-name-rewrite-functions
9333List of functions used for rewriting file names of @acronym{MIME} parts. 9372List of functions used for rewriting file names of @acronym{MIME} parts.
@@ -9424,6 +9463,10 @@ encode using quoted-printable) or @code{t} (always use 8bit).
9424@cindex coding system aliases 9463@cindex coding system aliases
9425@cindex preferred charset 9464@cindex preferred charset
9426 9465
9466@xref{Encoding Customization, , Encoding Customization, emacs-mime,
9467The Emacs MIME Manual}, for additional variables that control which
9468MIME charsets are used when sending messages.
9469
9427Other charset tricks that may be useful, although not Gnus-specific: 9470Other charset tricks that may be useful, although not Gnus-specific:
9428 9471
9429If there are several @acronym{MIME} charsets that encode the same Emacs 9472If there are several @acronym{MIME} charsets that encode the same Emacs
@@ -10136,11 +10179,19 @@ the list in one particular group:
10136@vindex gnus-newsgroup-variables 10179@vindex gnus-newsgroup-variables
10137@item gnus-newsgroup-variables 10180@item gnus-newsgroup-variables
10138A list of newsgroup (summary buffer) local variables, or cons of 10181A list of newsgroup (summary buffer) local variables, or cons of
10139variables and their default values (when the default values are not 10182variables and their default expressions to be evalled (when the default
10140@code{nil}), that should be made global while the summary buffer is 10183values are not @code{nil}), that should be made global while the summary
10141active. These variables can be used to set variables in the group 10184buffer is active.
10142parameters while still allowing them to affect operations done in 10185
10143other buffers. For example: 10186Note: The default expressions will be evaluated (using function
10187@code{eval}) before assignment to the local variable rather than just
10188assigned to it. If the default expression is the symbol @code{global},
10189that symbol will not be evaluated but the global value of the local
10190variable will be used instead.
10191
10192These variables can be used to set variables in the group parameters
10193while still allowing them to affect operations done in other
10194buffers. For example:
10144 10195
10145@lisp 10196@lisp
10146(setq gnus-newsgroup-variables 10197(setq gnus-newsgroup-variables
@@ -10149,6 +10200,7 @@ other buffers. For example:
10149 "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:"))) 10200 "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
10150@end lisp 10201@end lisp
10151 10202
10203Also @pxref{Group Parameters}.
10152@end table 10204@end table
10153 10205
10154 10206
@@ -11269,9 +11321,9 @@ no more new text to scroll in. The default is @code{nil}.
11269@vindex gnus-article-mode-line-format 11321@vindex gnus-article-mode-line-format
11270@item gnus-article-mode-line-format 11322@item gnus-article-mode-line-format
11271This variable is a format string along the same lines as 11323This variable is a format string along the same lines as
11272@code{gnus-summary-mode-line-format} (@pxref{Mode Line Formatting}). It 11324@code{gnus-summary-mode-line-format} (@pxref{Summary Buffer Mode
11273accepts the same format specifications as that variable, with two 11325Line}). It accepts the same format specifications as that variable,
11274extensions: 11326with two extensions:
11275 11327
11276@table @samp 11328@table @samp
11277 11329
@@ -13203,7 +13255,9 @@ expression should @emph{always} be @samp{*} so that it matches any mails
13203that haven't been matched by any of the other regexps. (These rules are 13255that haven't been matched by any of the other regexps. (These rules are
13204processed from the beginning of the alist toward the end. The first 13256processed from the beginning of the alist toward the end. The first
13205rule to make a match will ``win'', unless you have crossposting enabled. 13257rule to make a match will ``win'', unless you have crossposting enabled.
13206In that case, all matching rules will ``win''.) 13258In that case, all matching rules will ``win''.) When new groups are
13259created by splitting mail, you may want to run
13260@code{gnus-group-find-new-groups} to see the new groups.
13207 13261
13208If you like to tinker with this yourself, you can set this variable to a 13262If you like to tinker with this yourself, you can set this variable to a
13209function of your choice. This function will be called without any 13263function of your choice. This function will be called without any
@@ -13771,10 +13825,10 @@ If non-@code{nil}, ignore errors when reading mail from a mail source.
13771 13825
13772@item mail-source-directory 13826@item mail-source-directory
13773@vindex mail-source-directory 13827@vindex mail-source-directory
13774Directory where files (if any) will be stored. The default is 13828Directory where incoming mail source files (if any) will be stored. The
13775@file{~/Mail/}. At present, the only thing this is used for is to say 13829default is @file{~/Mail/}. At present, the only thing this is used for
13776where the incoming files will be stored if the previous variable is 13830is to say where the incoming files will be stored if the variable
13777@code{nil}. 13831@code{mail-source-delete-incoming} is @code{nil} or a number.
13778 13832
13779@item mail-source-incoming-file-prefix 13833@item mail-source-incoming-file-prefix
13780@vindex mail-source-incoming-file-prefix 13834@vindex mail-source-incoming-file-prefix
@@ -16571,7 +16625,7 @@ follows:
16571This instructs the @code{imap.el} package to log any exchanges with 16625This instructs the @code{imap.el} package to log any exchanges with
16572the server. The log is stored in the buffer @samp{*imap-log*}. Look 16626the server. The log is stored in the buffer @samp{*imap-log*}. Look
16573for error messages, which sometimes are tagged with the keyword 16627for error messages, which sometimes are tagged with the keyword
16574@code{BAD} - but when submitting a bug, make sure to include all the 16628@code{BAD}---but when submitting a bug, make sure to include all the
16575data. 16629data.
16576 16630
16577@node Other Sources 16631@node Other Sources
@@ -18246,8 +18300,8 @@ placeholders if you care (See @code{gnus-auto-goto-ignores}).
18246While it may be obvious to all, the only headers and articles 18300While it may be obvious to all, the only headers and articles
18247available while unplugged are those headers and articles that were 18301available while unplugged are those headers and articles that were
18248fetched into the Agent while previously plugged. To put it another 18302fetched into the Agent while previously plugged. To put it another
18249way, "If you forget to fetch something while plugged, you might have a 18303way, ``If you forget to fetch something while plugged, you might have a
18250less than satisfying unplugged session". For this reason, the Agent 18304less than satisfying unplugged session''. For this reason, the Agent
18251adds two visual effects to your summary buffer. These effects display 18305adds two visual effects to your summary buffer. These effects display
18252the download status of each article so that you always know which 18306the download status of each article so that you always know which
18253articles will be available when unplugged. 18307articles will be available when unplugged.
@@ -18624,7 +18678,7 @@ following incantation:
18624 18678
18625@example 18679@example
18626#!/bin/sh 18680#!/bin/sh
18627emacs -batch -l ~/.emacs -f -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1 18681emacs -batch -l ~/.emacs -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1
18628@end example 18682@end example
18629 18683
18630 18684
@@ -20436,8 +20490,8 @@ something like:
20436... 20490...
20437@end example 20491@end example
20438 20492
20439Then that means "score on the from header of the grandparent of the 20493Then that means ``score on the from header of the grandparent of the
20440current article". An indirection is quite fast, but it's better to say: 20494current article''. An indirection is quite fast, but it's better to say:
20441 20495
20442@example 20496@example
20443(1- 20497(1-
@@ -22656,7 +22710,7 @@ entering a group. Thus, entering a group with unseen or unread
22656articles becomes the substitute for checking incoming mail. Whether 22710articles becomes the substitute for checking incoming mail. Whether
22657only unseen articles or all unread articles will be processed is 22711only unseen articles or all unread articles will be processed is
22658determined by the @code{spam-autodetect-recheck-messages}. When set 22712determined by the @code{spam-autodetect-recheck-messages}. When set
22659to t, unread messages will be rechecked. 22713to @code{t}, unread messages will be rechecked.
22660 22714
22661@code{spam-autodetect} grants the user at once more and less control 22715@code{spam-autodetect} grants the user at once more and less control
22662of spam filtering. The user will have more control over each group's 22716of spam filtering. The user will have more control over each group's
diff --git a/man/message.texi b/man/message.texi
index acc043d8e83..6a52698ddb5 100644
--- a/man/message.texi
+++ b/man/message.texi
@@ -1551,8 +1551,8 @@ This optional header will be computed by Message.
1551@cindex Sun 1551@cindex Sun
1552@cindex i-did-not-set--mail-host-address--so-tickle-me 1552@cindex i-did-not-set--mail-host-address--so-tickle-me
1553This required header will be generated by Message. A unique ID will be 1553This required header will be generated by Message. A unique ID will be
1554created based on the date, time, user name and system name. For the 1554created based on the date, time, user name (for the local part) and the
1555domain part, message will look (in this order) at 1555domain part. For the domain part, message will look (in this order) at
1556@code{message-user-fqdn}, @code{system-name}, @code{mail-host-address} 1556@code{message-user-fqdn}, @code{system-name}, @code{mail-host-address}
1557and @code{message-user-mail-address} (i.e. @code{user-mail-address}) 1557and @code{message-user-mail-address} (i.e. @code{user-mail-address})
1558until a probably valid fully qualified domain name (FQDN) was found. 1558until a probably valid fully qualified domain name (FQDN) was found.
diff --git a/man/pgg.texi b/man/pgg.texi
index dc786c51609..8593a9e64a2 100644
--- a/man/pgg.texi
+++ b/man/pgg.texi
@@ -135,8 +135,9 @@ would be asked about the recipients.
135If encryption is successful, it replaces the current region contents (in 135If encryption is successful, it replaces the current region contents (in
136the accessible portion) with the resulting data. 136the accessible portion) with the resulting data.
137 137
138If optional argument @var{sign} is non-nil, the function is request to 138If optional argument @var{sign} is non-@code{nil}, the function is
139do a combined sign and encrypt. This currently only work with GnuPG. 139request to do a combined sign and encrypt. This currently only work
140with GnuPG.
140@end deffn 141@end deffn
141 142
142@deffn Command pgg-decrypt-region start end 143@deffn Command pgg-decrypt-region start end
@@ -301,9 +302,9 @@ keyrings.
301 302
302@deffn Method pgg-scheme-encrypt-region scheme start end recipients &optional sign 303@deffn Method pgg-scheme-encrypt-region scheme start end recipients &optional sign
303Encrypt the current region between @var{start} and @var{end} for 304Encrypt the current region between @var{start} and @var{end} for
304@var{recipients}. If @var{sign} is non-nil, do a combined sign and 305@var{recipients}. If @var{sign} is non-@code{nil}, do a combined sign
305encrypt. If encryption is successful, it returns @code{t}, otherwise 306and encrypt. If encryption is successful, it returns @code{t},
306@code{nil}. 307otherwise @code{nil}.
307@end deffn 308@end deffn
308 309
309@deffn Method pgg-scheme-decrypt-region scheme start end 310@deffn Method pgg-scheme-decrypt-region scheme start end
diff --git a/man/sieve.texi b/man/sieve.texi
index d70941bf229..a41463c5316 100644
--- a/man/sieve.texi
+++ b/man/sieve.texi
@@ -277,7 +277,7 @@ Sets the default port to use, the suggested port number is @code{2000}.
277 277
278@item sieve-manage-log 278@item sieve-manage-log
279@vindex sieve-manage-log 279@vindex sieve-manage-log
280If non-nil, should be a string naming a buffer where a protocol trace 280If non-@code{nil}, should be a string naming a buffer where a protocol trace
281is dumped (for debugging purposes). 281is dumped (for debugging purposes).
282 282
283@end table 283@end table
@@ -313,7 +313,8 @@ List scripts on the server.
313 313
314@item sieve-manage-havespace 314@item sieve-manage-havespace
315@findex sieve-manage-havespace 315@findex sieve-manage-havespace
316Returns non-nil iff server have roam for a script of given size. 316Returns non-@code{nil} iff server have roam for a script of given
317size.
317 318
318@item sieve-manage-getscript 319@item sieve-manage-getscript
319@findex sieve-manage-getscript 320@findex sieve-manage-getscript
diff --git a/src/ChangeLog b/src/ChangeLog
index f7e62c1ce21..b71bffc5bce 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,41 @@
12004-09-29 Kim F. Storm <storm@cua.dk>
2
3 * dispextern.h (valid_fringe_bitmap_p): Fix prototype.
4
5 * fringe.c (Vfringe_bitmaps): New variable.
6 (syms_of_fringe): DEFVAR_LISP it.
7 (valid_fringe_bitmap_p): Rename from valid_fringe_bitmap_id_p.
8 Change arg to Lisp_Object and fail if not an integer.
9 (get_fringe_bitmap_name, resolve_fringe_bitmap)
10 (destroy_fringe_bitmap): New functions.
11 (Fdestroy_fringe_bitmap): Change arg to bitmap symbol. Use
12 destroy_fringe_bitmap. Remove symbol from Vfringe_bitmaps and
13 clear its fringe property.
14 (init_fringe_bitmap): Use destroy_fringe_bitmap instead of
15 Fdestroy_fringe_bitmap.
16 (Fdefine_fringe_bitmap): Add BITMAP arg specifying new or existing
17 bitmap symbol; remove WHICH arg. Add symbol to Vfringe_bitmaps
18 and set fringe property. Signal error if no free slots.
19 (Fset_fringe_bitmap_face): Change arg to bitmap symbol.
20 (Ffringe_bitmaps_at_pos): Return bitmap symbols instead of numbers.
21
22 * xdisp.c (handle_single_display_prop): Fringe bitmaps are now
23 symbols with a fringe property.
24
252004-09-27 Kim F. Storm <storm@cua.dk>
26
27 * buffer.c (syms_of_buffer) <indicate-buffer-boundaries>:
28 Doc fix. Format may now be a symbol or alist, not a cons.
29
30 * fringe.c (update_window_fringes): Handle new formats of
31 indicate-buffer-boundaries (symbol or alist). No longer
32 allow a simple cons.
33 (Ffringe_bitmaps_at_pos): Use nil value for no bitmap.
34
352004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
36
37 * config.in: Rebuild
38
12004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> 392004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
2 40
3 * config.in: Rebuild. 41 * config.in: Rebuild.
diff --git a/src/buffer.c b/src/buffer.c
index 75339c4fc85..b8aefcdbcca 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -5698,16 +5698,20 @@ If non-nil, the first and last line of the buffer are marked in the fringe
5698of a window on window-systems with angle bitmaps, or if the window can be 5698of a window on window-systems with angle bitmaps, or if the window can be
5699scrolled, the top and bottom line of the window are marked with up and down 5699scrolled, the top and bottom line of the window are marked with up and down
5700arrow bitmaps. 5700arrow bitmaps.
5701If value is `left' or `right', both angle and arrow bitmaps are displayed in 5701
5702the left or right fringe, resp. Any other non-nil value causes the 5702If value is a symbol `left' or `right', both angle and arrow bitmaps
5703bitmap on the top line to be displayed in the left fringe, and the 5703are displayed in the left or right fringe, resp.
5704bitmap on the bottom line in the right fringe. 5704
5705If value is a cons (ANGLES . ARROWS), the car specifies the position 5705If value is an alist, each element (INDICATOR . POSITION) specifies
5706of the angle bitmaps, and the cdr specifies the position of the arrow 5706the position of one of the indicators. INDICATOR is one of `top',
5707bitmaps. For example, (t . right) places the top angle bitmap in left 5707`bottom', `up', `down', or t, which specifies the default position,
5708fringe, the bottom angle bitmap in right fringe, and both arrow 5708and POSITION is one of `left', `right', or nil, meaning do not show
5709this indicator.
5710
5711For example, ((top . left) (t . right)) places the top angle bitmap in
5712left fringe, the bottom angle bitmap in right fringe, and both arrow
5709bitmaps in right fringe. To show just the angle bitmaps in the left 5713bitmaps in right fringe. To show just the angle bitmaps in the left
5710fringe, but no arrow bitmaps, use (left . nil). */); 5714fringe, but no arrow bitmaps, use ((top . left) (bottom . left)). */);
5711 5715
5712 DEFVAR_PER_BUFFER ("scroll-up-aggressively", 5716 DEFVAR_PER_BUFFER ("scroll-up-aggressively",
5713 &current_buffer->scroll_up_aggressively, Qnil, 5717 &current_buffer->scroll_up_aggressively, Qnil,
diff --git a/src/config.in b/src/config.in
index fac26db0a84..d87d235fe55 100644
--- a/src/config.in
+++ b/src/config.in
@@ -136,7 +136,7 @@ Boston, MA 02111-1307, USA. */
136/* Define to 1 if you have the `euidaccess' function. */ 136/* Define to 1 if you have the `euidaccess' function. */
137#undef HAVE_EUIDACCESS 137#undef HAVE_EUIDACCESS
138 138
139/* Define to 1 if this OS has exec shield. */ 139/* Define to 1 if this OS has exec shield and we can handle it. */
140#undef HAVE_EXECSHIELD 140#undef HAVE_EXECSHIELD
141 141
142/* Define to 1 if you have the <fcntl.h> header file. */ 142/* Define to 1 if you have the <fcntl.h> header file. */
diff --git a/src/dispextern.h b/src/dispextern.h
index 43ebe5c24d0..47454d5ba5a 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -2634,7 +2634,7 @@ extern int x_intersect_rectangles P_ ((XRectangle *, XRectangle *,
2634 2634
2635/* Defined in fringe.c */ 2635/* Defined in fringe.c */
2636 2636
2637int valid_fringe_bitmap_id_p (int); 2637int valid_fringe_bitmap_p (Lisp_Object);
2638void draw_fringe_bitmap P_ ((struct window *, struct glyph_row *, int)); 2638void draw_fringe_bitmap P_ ((struct window *, struct glyph_row *, int));
2639void draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *)); 2639void draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *));
2640void draw_window_fringes P_ ((struct window *)); 2640void draw_window_fringes P_ ((struct window *));
diff --git a/src/fringe.c b/src/fringe.c
index 3f040699009..d731bf5eaa6 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -31,12 +31,22 @@ Boston, MA 02111-1307, USA. */
31 31
32#ifdef HAVE_WINDOW_SYSTEM 32#ifdef HAVE_WINDOW_SYSTEM
33 33
34extern Lisp_Object Qfringe;
34extern Lisp_Object Qtop, Qbottom, Qcenter; 35extern Lisp_Object Qtop, Qbottom, Qcenter;
36extern Lisp_Object Qup, Qdown, Qleft, Qright;
35 37
36/* Non-nil means that newline may flow into the right fringe. */ 38/* Non-nil means that newline may flow into the right fringe. */
37 39
38Lisp_Object Voverflow_newline_into_fringe; 40Lisp_Object Voverflow_newline_into_fringe;
39 41
42/* List of known fringe bitmap symbols.
43
44 The fringe bitmap number is stored in the `fringe' property on
45 those symbols. Names for the built-in bitmaps are installed by
46 loading fringe.el.
47 */
48
49Lisp_Object Vfringe_bitmaps;
40 50
41enum fringe_bitmap_type 51enum fringe_bitmap_type
42{ 52{
@@ -443,15 +453,90 @@ static int max_used_fringe_bitmap = MAX_STANDARD_FRINGE_BITMAPS;
443/* Return 1 if FRINGE_ID is a valid fringe bitmap id. */ 453/* Return 1 if FRINGE_ID is a valid fringe bitmap id. */
444 454
445int 455int
446valid_fringe_bitmap_id_p (fringe_id) 456valid_fringe_bitmap_p (bitmap)
447 int fringe_id; 457 Lisp_Object bitmap;
458{
459 int bn;
460
461 if (!INTEGERP (bitmap))
462 return 0;
463
464 bn = XINT (bitmap);
465 return (bn >= NO_FRINGE_BITMAP
466 && bn < max_used_fringe_bitmap
467 && (bn < MAX_STANDARD_FRINGE_BITMAPS
468 || fringe_bitmaps[bn] != NULL));
469}
470
471/* Get fringe bitmap name for bitmap number BN.
472
473 Found by traversing Vfringe_bitmaps comparing BN to the
474 fringe property for each symbol.
475
476 Return BN if not found in Vfringe_bitmaps. */
477
478static Lisp_Object
479get_fringe_bitmap_name (bn)
480 int bn;
481{
482 Lisp_Object bitmaps;
483 Lisp_Object num;
484
485 /* Zero means no bitmap -- return nil. */
486 if (bn <= 0)
487 return Qnil;
488
489 bitmaps = Vfringe_bitmaps;
490 num = make_number (bn);
491
492 while (CONSP (bitmaps))
493 {
494 Lisp_Object bitmap = XCAR (bitmaps);
495 if (EQ (num, Fget (bitmap, Qfringe)))
496 return bitmap;
497 bitmaps = XCDR (bitmaps);
498 }
499
500 return num;
501}
502
503
504/* Resolve a BITMAP parameter.
505
506 An INTEGER, corresponding to a bitmap number.
507 A STRING which is interned to a symbol.
508 A SYMBOL which has a fringe property which is a bitmap number.
509*/
510
511static int
512resolve_fringe_bitmap (bitmap, namep)
513 Lisp_Object bitmap;
514 Lisp_Object *namep;
448{ 515{
449 return (fringe_id >= NO_FRINGE_BITMAP 516 if (namep)
450 && fringe_id < max_used_fringe_bitmap 517 *namep = Qnil;
451 && (fringe_id < MAX_STANDARD_FRINGE_BITMAPS 518
452 || fringe_bitmaps[fringe_id] != NULL)); 519 if (STRINGP (bitmap))
520 bitmap = intern (SDATA (bitmap));
521
522 if (SYMBOLP (bitmap))
523 {
524 if (namep)
525 *namep = bitmap;
526 bitmap = Fget (bitmap, Qfringe);
527 }
528
529 if (valid_fringe_bitmap_p (bitmap))
530 {
531 if (namep && NILP (*namep))
532 *namep = get_fringe_bitmap_name (XINT (bitmap));
533 return XINT (bitmap);
534 }
535
536 return -1;
453} 537}
454 538
539
455/* Draw the bitmap WHICH in one of the left or right fringes of 540/* Draw the bitmap WHICH in one of the left or right fringes of
456 window W. ROW is the glyph row for which to display the bitmap; it 541 window W. ROW is the glyph row for which to display the bitmap; it
457 determines the vertical position at which the bitmap has to be 542 determines the vertical position at which the bitmap has to be
@@ -706,9 +791,10 @@ update_window_fringes (w, force_p)
706 int rn, nrows = w->current_matrix->nrows; 791 int rn, nrows = w->current_matrix->nrows;
707 int y; 792 int y;
708 int redraw_p = 0; 793 int redraw_p = 0;
709 Lisp_Object ind; 794 Lisp_Object boundary_top = Qnil, boundary_bot = Qnil;
710 int boundary_pos = 0, arrow_pos = 0; 795 Lisp_Object arrow_top = Qnil, arrow_bot = Qnil;
711 int empty_pos = 0; 796 Lisp_Object empty_pos;
797 Lisp_Object ind = Qnil;
712 798
713 if (w->pseudo_window_p) 799 if (w->pseudo_window_p)
714 return 0; 800 return 0;
@@ -716,23 +802,29 @@ update_window_fringes (w, force_p)
716 if (!MINI_WINDOW_P (w) 802 if (!MINI_WINDOW_P (w)
717 && (ind = XBUFFER (w->buffer)->indicate_buffer_boundaries, !NILP (ind))) 803 && (ind = XBUFFER (w->buffer)->indicate_buffer_boundaries, !NILP (ind)))
718 { 804 {
719 int do_eob = 1, do_bob = 1; 805 if (EQ (ind, Qleft) || EQ (ind, Qright))
720 Lisp_Object arrows; 806 boundary_top = boundary_bot = arrow_top = arrow_bot = ind;
721 807 else if (CONSP (ind) && CONSP (XCAR (ind)))
722 if (CONSP (ind)) 808 {
723 arrows = XCDR (ind), ind = XCAR (ind); 809 Lisp_Object pos;
810 if (pos = Fassq (Qt, ind), !NILP (pos))
811 boundary_top = boundary_bot = arrow_top = arrow_bot = XCDR (pos);
812 if (pos = Fassq (Qtop, ind), !NILP (pos))
813 boundary_top = XCDR (pos);
814 if (pos = Fassq (Qbottom, ind), !NILP (pos))
815 boundary_bot = XCDR (pos);
816 if (pos = Fassq (Qup, ind), !NILP (pos))
817 arrow_top = XCDR (pos);
818 if (pos = Fassq (Qdown, ind), !NILP (pos))
819 arrow_bot = XCDR (pos);
820 }
724 else 821 else
725 arrows = ind; 822 ind = Qnil;
726 823 }
727 if (EQ (ind, Qleft))
728 boundary_pos = -1;
729 else if (EQ (ind, Qright))
730 boundary_pos = 1;
731 824
732 if (EQ (arrows, Qleft)) 825 if (!NILP (ind))
733 arrow_pos = -1; 826 {
734 else if (EQ (arrows, Qright)) 827 int do_eob = 1, do_bob = 1;
735 arrow_pos = 1;
736 828
737 for (y = 0, rn = 0; 829 for (y = 0, rn = 0;
738 y < yb && rn < nrows; 830 y < yb && rn < nrows;
@@ -753,17 +845,17 @@ update_window_fringes (w, force_p)
753 row->indicate_bob_p = row->indicate_top_line_p = 0; 845 row->indicate_bob_p = row->indicate_top_line_p = 0;
754 row->indicate_eob_p = row->indicate_bottom_line_p = 0; 846 row->indicate_eob_p = row->indicate_bottom_line_p = 0;
755 847
756 if (!NILP (ind) 848 if (!NILP (boundary_top)
757 && MATRIX_ROW_START_CHARPOS (row) <= BUF_BEGV (XBUFFER (w->buffer))) 849 && MATRIX_ROW_START_CHARPOS (row) <= BUF_BEGV (XBUFFER (w->buffer)))
758 row->indicate_bob_p = do_bob, do_bob = 0; 850 row->indicate_bob_p = do_bob, do_bob = 0;
759 else if (!NILP (arrows) 851 else if (!NILP (arrow_top)
760 && (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0) == rn) 852 && (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0) == rn)
761 row->indicate_top_line_p = 1; 853 row->indicate_top_line_p = 1;
762 854
763 if (!NILP (ind) 855 if (!NILP (boundary_bot)
764 && MATRIX_ROW_END_CHARPOS (row) >= BUF_ZV (XBUFFER (w->buffer))) 856 && MATRIX_ROW_END_CHARPOS (row) >= BUF_ZV (XBUFFER (w->buffer)))
765 row->indicate_eob_p = do_eob, do_eob = 0; 857 row->indicate_eob_p = do_eob, do_eob = 0;
766 else if (!NILP (arrows) 858 else if (!NILP (arrow_bot)
767 && y + row->height >= yb) 859 && y + row->height >= yb)
768 row->indicate_bottom_line_p = 1; 860 row->indicate_bottom_line_p = 1;
769 861
@@ -775,10 +867,9 @@ update_window_fringes (w, force_p)
775 } 867 }
776 } 868 }
777 869
778 if (EQ (XBUFFER (w->buffer)->indicate_empty_lines, Qright)) 870 empty_pos = XBUFFER (w->buffer)->indicate_empty_lines;
779 empty_pos = 1; 871 if (!NILP (empty_pos) && !EQ (empty_pos, Qright))
780 else if (EQ (XBUFFER (w->buffer)->indicate_empty_lines, Qleft)) 872 empty_pos = WINDOW_LEFT_FRINGE_WIDTH (w) == 0 ? Qright : Qleft;
781 empty_pos = -1;
782 873
783 for (y = 0, rn = 0; 874 for (y = 0, rn = 0;
784 y < yb && rn < nrows; 875 y < yb && rn < nrows;
@@ -802,20 +893,20 @@ update_window_fringes (w, force_p)
802 left = row->left_user_fringe_bitmap; 893 left = row->left_user_fringe_bitmap;
803 left_face_id = row->left_user_fringe_face_id; 894 left_face_id = row->left_user_fringe_face_id;
804 } 895 }
805 else if (row->indicate_bob_p && boundary_pos <= 0) 896 else if (row->indicate_bob_p && EQ (boundary_top, Qleft))
806 left = ((row->indicate_eob_p && boundary_pos < 0) 897 left = ((row->indicate_eob_p && EQ (boundary_bot, Qleft))
807 ? LEFT_BRACKET_BITMAP : TOP_LEFT_ANGLE_BITMAP); 898 ? LEFT_BRACKET_BITMAP : TOP_LEFT_ANGLE_BITMAP);
808 else if (row->indicate_eob_p && boundary_pos < 0) 899 else if (row->indicate_eob_p && EQ (boundary_bot, Qleft))
809 left = BOTTOM_LEFT_ANGLE_BITMAP; 900 left = BOTTOM_LEFT_ANGLE_BITMAP;
810 else if (row->truncated_on_left_p) 901 else if (row->truncated_on_left_p)
811 left = LEFT_TRUNCATION_BITMAP; 902 left = LEFT_TRUNCATION_BITMAP;
812 else if (MATRIX_ROW_CONTINUATION_LINE_P (row)) 903 else if (MATRIX_ROW_CONTINUATION_LINE_P (row))
813 left = CONTINUATION_LINE_BITMAP; 904 left = CONTINUATION_LINE_BITMAP;
814 else if (row->indicate_empty_line_p && empty_pos <= 0) 905 else if (row->indicate_empty_line_p && EQ (empty_pos, Qleft))
815 left = ZV_LINE_BITMAP; 906 left = ZV_LINE_BITMAP;
816 else if (row->indicate_top_line_p && arrow_pos <= 0) 907 else if (row->indicate_top_line_p && EQ (arrow_top, Qleft))
817 left = UP_ARROW_BITMAP; 908 left = UP_ARROW_BITMAP;
818 else if (row->indicate_bottom_line_p && arrow_pos < 0) 909 else if (row->indicate_bottom_line_p && EQ (arrow_bot, Qleft))
819 left = DOWN_ARROW_BITMAP; 910 left = DOWN_ARROW_BITMAP;
820 else 911 else
821 left = NO_FRINGE_BITMAP; 912 left = NO_FRINGE_BITMAP;
@@ -828,22 +919,20 @@ update_window_fringes (w, force_p)
828 right = row->right_user_fringe_bitmap; 919 right = row->right_user_fringe_bitmap;
829 right_face_id = row->right_user_fringe_face_id; 920 right_face_id = row->right_user_fringe_face_id;
830 } 921 }
831 else if (row->indicate_bob_p && boundary_pos > 0) 922 else if (row->indicate_bob_p && EQ (boundary_top, Qright))
832 right = ((row->indicate_eob_p && boundary_pos >= 0) 923 right = ((row->indicate_eob_p && EQ (boundary_bot, Qright))
833 ? RIGHT_BRACKET_BITMAP : TOP_RIGHT_ANGLE_BITMAP); 924 ? RIGHT_BRACKET_BITMAP : TOP_RIGHT_ANGLE_BITMAP);
834 else if (row->indicate_eob_p && boundary_pos >= 0) 925 else if (row->indicate_eob_p && EQ (boundary_bot, Qright))
835 right = BOTTOM_RIGHT_ANGLE_BITMAP; 926 right = BOTTOM_RIGHT_ANGLE_BITMAP;
836 else if (row->truncated_on_right_p) 927 else if (row->truncated_on_right_p)
837 right = RIGHT_TRUNCATION_BITMAP; 928 right = RIGHT_TRUNCATION_BITMAP;
838 else if (row->continued_p) 929 else if (row->continued_p)
839 right = CONTINUED_LINE_BITMAP; 930 right = CONTINUED_LINE_BITMAP;
840 else if (row->indicate_top_line_p && arrow_pos > 0) 931 else if (row->indicate_top_line_p && EQ (arrow_top, Qright))
841 right = UP_ARROW_BITMAP; 932 right = UP_ARROW_BITMAP;
842 else if (row->indicate_bottom_line_p && arrow_pos >= 0) 933 else if (row->indicate_bottom_line_p && EQ (arrow_bot, Qright))
843 right = DOWN_ARROW_BITMAP; 934 right = DOWN_ARROW_BITMAP;
844 else if (row->indicate_empty_line_p 935 else if (row->indicate_empty_line_p && EQ (empty_pos, Qright))
845 && (empty_pos > 0
846 || (WINDOW_LEFT_FRINGE_WIDTH (w) == 0 && empty_pos == 0)))
847 right = ZV_LINE_BITMAP; 936 right = ZV_LINE_BITMAP;
848 else 937 else
849 right = NO_FRINGE_BITMAP; 938 right = NO_FRINGE_BITMAP;
@@ -978,20 +1067,13 @@ compute_fringe_widths (f, redraw)
978 redraw_frame (f); 1067 redraw_frame (f);
979} 1068}
980 1069
981DEFUN ("destroy-fringe-bitmap", Fdestroy_fringe_bitmap, Sdestroy_fringe_bitmap, 1070
982 1, 1, 0, 1071void
983 doc: /* Destroy fringe bitmap WHICH. 1072destroy_fringe_bitmap (n)
984If WHICH overrides a standard fringe bitmap, the original bitmap is restored. */) 1073 int n;
985 (which)
986 Lisp_Object which;
987{ 1074{
988 int n;
989 struct fringe_bitmap **fbp; 1075 struct fringe_bitmap **fbp;
990 1076
991 CHECK_NUMBER (which);
992 if (n = XINT (which), n >= max_used_fringe_bitmap)
993 return Qnil;
994
995 fringe_faces[n] = FRINGE_FACE_ID; 1077 fringe_faces[n] = FRINGE_FACE_ID;
996 1078
997 fbp = &fringe_bitmaps[n]; 1079 fbp = &fringe_bitmaps[n];
@@ -1006,7 +1088,31 @@ If WHICH overrides a standard fringe bitmap, the original bitmap is restored. *
1006 while (max_used_fringe_bitmap > MAX_STANDARD_FRINGE_BITMAPS 1088 while (max_used_fringe_bitmap > MAX_STANDARD_FRINGE_BITMAPS
1007 && fringe_bitmaps[max_used_fringe_bitmap - 1] == NULL) 1089 && fringe_bitmaps[max_used_fringe_bitmap - 1] == NULL)
1008 max_used_fringe_bitmap--; 1090 max_used_fringe_bitmap--;
1091}
1092
1009 1093
1094DEFUN ("destroy-fringe-bitmap", Fdestroy_fringe_bitmap, Sdestroy_fringe_bitmap,
1095 1, 1, 0,
1096 doc: /* Destroy fringe bitmap BITMAP.
1097If BITMAP overrides a standard fringe bitmap, the original bitmap is restored. */)
1098 (bitmap)
1099 Lisp_Object bitmap;
1100{
1101 int n;
1102 Lisp_Object sym;
1103
1104 n = resolve_fringe_bitmap (bitmap, &sym);
1105 if (n < 0)
1106 return Qnil;
1107
1108 destroy_fringe_bitmap (n);
1109
1110 if (SYMBOLP (sym))
1111 {
1112 Vfringe_bitmaps = Fdelq (sym, Vfringe_bitmaps);
1113 /* It would be better to remove the fringe property. */
1114 Fput (sym, Qfringe, Qnil);
1115 }
1010 return Qnil; 1116 return Qnil;
1011} 1117}
1012 1118
@@ -1077,7 +1183,7 @@ init_fringe_bitmap (which, fb, once_p)
1077 1183
1078 if (!once_p) 1184 if (!once_p)
1079 { 1185 {
1080 Fdestroy_fringe_bitmap (make_number (which)); 1186 destroy_fringe_bitmap (which);
1081 1187
1082 if (rif->define_fringe_bitmap) 1188 if (rif->define_fringe_bitmap)
1083 rif->define_fringe_bitmap (which, fb->bits, fb->height, fb->width); 1189 rif->define_fringe_bitmap (which, fb->bits, fb->height, fb->width);
@@ -1090,26 +1196,32 @@ init_fringe_bitmap (which, fb, once_p)
1090 1196
1091 1197
1092DEFUN ("define-fringe-bitmap", Fdefine_fringe_bitmap, Sdefine_fringe_bitmap, 1198DEFUN ("define-fringe-bitmap", Fdefine_fringe_bitmap, Sdefine_fringe_bitmap,
1093 1, 5, 0, 1199 2, 5, 0,
1094 doc: /* Define a fringe bitmap from BITS of height HEIGHT and width WIDTH. 1200 doc: /* Define fringe bitmap BITMAP from BITS of size HEIGHT x WIDTH.
1201BITMAP is a symbol or string naming the new fringe bitmap.
1095BITS is either a string or a vector of integers. 1202BITS is either a string or a vector of integers.
1096HEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS. 1203HEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS.
1097WIDTH must be an integer between 1 and 16, or nil which defaults to 8. 1204WIDTH must be an integer between 1 and 16, or nil which defaults to 8.
1098Optional fourth arg ALIGN may be one of `top', `center', or `bottom', 1205Optional fifth arg ALIGN may be one of `top', `center', or `bottom',
1099indicating the positioning of the bitmap relative to the rows where it 1206indicating the positioning of the bitmap relative to the rows where it
1100is used; the default is to center the bitmap. Fourth arg may also be a 1207is used; the default is to center the bitmap. Fourth arg may also be a
1101list (ALIGN PERIODIC) where PERIODIC non-nil specifies that the bitmap 1208list (ALIGN PERIODIC) where PERIODIC non-nil specifies that the bitmap
1102should be repeated. 1209should be repeated.
1103Optional fifth argument WHICH is bitmap number to redefine. 1210If BITMAP already exists, the existing definition is replaced. */)
1104Return new bitmap number, or nil of no more free bitmap slots. */) 1211 (bitmap, bits, height, width, align)
1105 (bits, height, width, align, which) 1212 Lisp_Object bitmap, bits, height, width, align;
1106 Lisp_Object bits, height, width, align, which;
1107{ 1213{
1108 Lisp_Object len; 1214 Lisp_Object len;
1109 int n, h, i, j; 1215 int n, h, i, j;
1110 unsigned short *b; 1216 unsigned short *b;
1111 struct fringe_bitmap fb, *xfb; 1217 struct fringe_bitmap fb, *xfb;
1112 int fill1 = 0, fill2 = 0; 1218 int fill1 = 0, fill2 = 0;
1219 Lisp_Object sym;
1220
1221 n = resolve_fringe_bitmap (bitmap, &sym);
1222
1223 if (NILP (sym) || INTEGERP (sym))
1224 sym = wrong_type_argument (Qsymbolp, bitmap);
1113 1225
1114 if (!STRINGP (bits) && !VECTORP (bits)) 1226 if (!STRINGP (bits) && !VECTORP (bits))
1115 bits = wrong_type_argument (Qstringp, bits); 1227 bits = wrong_type_argument (Qstringp, bits);
@@ -1162,7 +1274,7 @@ Return new bitmap number, or nil of no more free bitmap slots. */)
1162 else if (!NILP (align) && !EQ (align, Qcenter)) 1274 else if (!NILP (align) && !EQ (align, Qcenter))
1163 error ("Bad align argument"); 1275 error ("Bad align argument");
1164 1276
1165 if (NILP (which)) 1277 if (n < 0)
1166 { 1278 {
1167 if (max_used_fringe_bitmap < MAX_FRINGE_BITMAPS) 1279 if (max_used_fringe_bitmap < MAX_FRINGE_BITMAPS)
1168 n = max_used_fringe_bitmap++; 1280 n = max_used_fringe_bitmap++;
@@ -1174,16 +1286,11 @@ Return new bitmap number, or nil of no more free bitmap slots. */)
1174 if (fringe_bitmaps[n] == NULL) 1286 if (fringe_bitmaps[n] == NULL)
1175 break; 1287 break;
1176 if (n == MAX_FRINGE_BITMAPS) 1288 if (n == MAX_FRINGE_BITMAPS)
1177 return Qnil; 1289 error ("Cannot define more fringe bitmaps");
1178 } 1290 }
1179 which = make_number (n); 1291
1180 } 1292 Vfringe_bitmaps = Fcons (sym, Vfringe_bitmaps);
1181 else 1293 Fput (sym, Qfringe, make_number (n));
1182 {
1183 CHECK_NUMBER (which);
1184 n = XINT (which);
1185 if (n <= NO_FRINGE_BITMAP || n >= MAX_FRINGE_BITMAPS)
1186 error ("Invalid fringe bitmap number");
1187 } 1294 }
1188 1295
1189 fb.dynamic = 1; 1296 fb.dynamic = 1;
@@ -1211,21 +1318,22 @@ Return new bitmap number, or nil of no more free bitmap slots. */)
1211 1318
1212 init_fringe_bitmap (n, xfb, 0); 1319 init_fringe_bitmap (n, xfb, 0);
1213 1320
1214 return which; 1321 return sym;
1215} 1322}
1216 1323
1217DEFUN ("set-fringe-bitmap-face", Fset_fringe_bitmap_face, Sset_fringe_bitmap_face, 1324DEFUN ("set-fringe-bitmap-face", Fset_fringe_bitmap_face, Sset_fringe_bitmap_face,
1218 1, 2, 0, 1325 1, 2, 0,
1219 doc: /* Set face for fringe bitmap FRINGE-ID to FACE. 1326 doc: /* Set face for fringe bitmap BITMAP to FACE.
1220If FACE is nil, reset face to default fringe face. */) 1327If FACE is nil, reset face to default fringe face. */)
1221 (fringe_id, face) 1328 (bitmap, face)
1222 Lisp_Object fringe_id, face; 1329 Lisp_Object bitmap, face;
1223{ 1330{
1331 int bn;
1224 int face_id; 1332 int face_id;
1225 1333
1226 CHECK_NUMBER (fringe_id); 1334 bn = resolve_fringe_bitmap (bitmap, 0);
1227 if (!valid_fringe_bitmap_id_p (XINT (fringe_id))) 1335 if (bn < 0)
1228 error ("Invalid fringe id"); 1336 error ("Undefined fringe bitmap");
1229 1337
1230 if (!NILP (face)) 1338 if (!NILP (face))
1231 { 1339 {
@@ -1236,7 +1344,7 @@ If FACE is nil, reset face to default fringe face. */)
1236 else 1344 else
1237 face_id = FRINGE_FACE_ID; 1345 face_id = FRINGE_FACE_ID;
1238 1346
1239 fringe_faces [XINT (fringe_id)] = face_id; 1347 fringe_faces [bn] = face_id;
1240 1348
1241 return Qnil; 1349 return Qnil;
1242} 1350}
@@ -1247,7 +1355,8 @@ DEFUN ("fringe-bitmaps-at-pos", Ffringe_bitmaps_at_pos, Sfringe_bitmaps_at_pos,
1247If WINDOW is nil, use selected window. If POS is nil, use value of point 1355If WINDOW is nil, use selected window. If POS is nil, use value of point
1248in that window. Return value is a cons (LEFT . RIGHT) where LEFT and RIGHT 1356in that window. Return value is a cons (LEFT . RIGHT) where LEFT and RIGHT
1249are the fringe bitmap numbers for the bitmaps in the left and right fringe, 1357are the fringe bitmap numbers for the bitmaps in the left and right fringe,
1250resp. Return nil if POS is not visible in WINDOW. */) 1358resp. If left or right fringe is empty, the corresponding element is nil.
1359Return nil if POS is not visible in WINDOW. */)
1251 (pos, window) 1360 (pos, window)
1252 Lisp_Object pos, window; 1361 Lisp_Object pos, window;
1253{ 1362{
@@ -1274,8 +1383,8 @@ resp. Return nil if POS is not visible in WINDOW. */)
1274 row = MATRIX_FIRST_TEXT_ROW (w->current_matrix); 1383 row = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
1275 row = row_containing_pos (w, textpos, row, NULL, 0); 1384 row = row_containing_pos (w, textpos, row, NULL, 0);
1276 if (row) 1385 if (row)
1277 return Fcons (make_number (row->left_fringe_bitmap), 1386 return Fcons (get_fringe_bitmap_name (row->left_fringe_bitmap),
1278 make_number (row->right_fringe_bitmap)); 1387 get_fringe_bitmap_name (row->right_fringe_bitmap));
1279 else 1388 else
1280 return Qnil; 1389 return Qnil;
1281} 1390}
@@ -1288,7 +1397,6 @@ resp. Return nil if POS is not visible in WINDOW. */)
1288void 1397void
1289syms_of_fringe () 1398syms_of_fringe ()
1290{ 1399{
1291
1292 defsubr (&Sdestroy_fringe_bitmap); 1400 defsubr (&Sdestroy_fringe_bitmap);
1293 defsubr (&Sdefine_fringe_bitmap); 1401 defsubr (&Sdefine_fringe_bitmap);
1294 defsubr (&Sfringe_bitmaps_at_pos); 1402 defsubr (&Sfringe_bitmaps_at_pos);
@@ -1303,6 +1411,10 @@ is at the final newline, the cursor is shown in the right fringe.
1303If nil, also continue lines which are exactly as wide as the window. */); 1411If nil, also continue lines which are exactly as wide as the window. */);
1304 Voverflow_newline_into_fringe = Qt; 1412 Voverflow_newline_into_fringe = Qt;
1305 1413
1414 DEFVAR_LISP ("fringe-bitmaps", &Vfringe_bitmaps,
1415 doc: /* List of fringe bitmap symbols.
1416You must (require 'fringe) to use fringe bitmap symbols in your programs." */);
1417 Vfringe_bitmaps = Qnil;
1306} 1418}
1307 1419
1308/* Initialize this module when Emacs starts. */ 1420/* Initialize this module when Emacs starts. */
diff --git a/src/xdisp.c b/src/xdisp.c
index d8166a30df5..353a72f65b6 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -308,6 +308,7 @@ extern Lisp_Object Qheight;
308extern Lisp_Object QCwidth, QCheight, QCascent; 308extern Lisp_Object QCwidth, QCheight, QCascent;
309extern Lisp_Object Qscroll_bar; 309extern Lisp_Object Qscroll_bar;
310extern Lisp_Object Qcursor; 310extern Lisp_Object Qcursor;
311extern Lisp_Object Qfringe;
311 312
312/* Non-nil means highlight trailing whitespace. */ 313/* Non-nil means highlight trailing whitespace. */
313 314
@@ -3581,8 +3582,9 @@ handle_single_display_prop (it, prop, object, position,
3581 3582
3582#ifdef HAVE_WINDOW_SYSTEM 3583#ifdef HAVE_WINDOW_SYSTEM
3583 value = XCAR (XCDR (prop)); 3584 value = XCAR (XCDR (prop));
3584 if (!NUMBERP (value) 3585 if (!SYMBOLP (value)
3585 || !valid_fringe_bitmap_id_p (XINT (value))) 3586 || (value = Fget (value, Qfringe),
3587 !valid_fringe_bitmap_p (value)))
3586 return 0; 3588 return 0;
3587 3589
3588 if (CONSP (XCDR (XCDR (prop)))) 3590 if (CONSP (XCDR (XCDR (prop))))