diff options
| author | Miles Bader | 2004-09-29 07:22:20 +0000 |
|---|---|---|
| committer | Miles Bader | 2004-09-29 07:22:20 +0000 |
| commit | 93952a2d5b2ba718f9d688dda216fed8621ec21e (patch) | |
| tree | c4cda2097cdc4b8d07260702c7325b0fa1f6e30d | |
| parent | 4148c3c9425939c1639f349b20a33b71fea72b8e (diff) | |
| parent | c1d7d28589c020b2b72d795638e100eda852d6aa (diff) | |
| download | emacs-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
58 files changed, 1274 insertions, 554 deletions
| @@ -1,3 +1,8 @@ | |||
| 1 | 2004-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 | |||
| 1 | 2004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | 6 | 2004-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. |
| @@ -4302,7 +4302,7 @@ else | |||
| 4302 | fi | 4302 | fi |
| 4303 | 4303 | ||
| 4304 | if test "$emacs_cv_execshield" = 1; then | 4304 | if 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. |
| 4306 | set dummy setarch; ac_word=$2 | 4306 | set dummy setarch; ac_word=$2 |
| 4307 | echo "$as_me:$LINENO: checking for $ac_word" >&5 | 4307 | echo "$as_me:$LINENO: checking for $ac_word" >&5 |
| 4308 | echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 | 4308 | echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 |
| @@ -4343,13 +4343,25 @@ echo "${ECHO_T}no" >&6 | |||
| 4343 | fi | 4343 | fi |
| 4344 | 4344 | ||
| 4345 | 4345 | ||
| 4346 | if test "$setarch" != no; then | 4346 | if test "$setarch" != no && test "$machine" = "intel386"; then |
| 4347 | 4347 | ||
| 4348 | cat >>confdefs.h <<\_ACEOF | 4348 | cat >>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. | ||
| 4357 | Emacs can not dump itself if exec-shield is turned on. | ||
| 4358 | See \`etc/PROBLEMS' for further information." >&5 | ||
| 4359 | echo "$as_me: error: Exec-shield is turned on. | ||
| 4360 | Emacs can not dump itself if exec-shield is turned on. | ||
| 4361 | See \`etc/PROBLEMS' for further information." >&2;} | ||
| 4362 | { (exit 1); exit 1; }; } | ||
| 4363 | esac | ||
| 4364 | fi | ||
| 4353 | fi | 4365 | fi |
| 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 | ||
| 1289 | dnl check if exec-shield is present. | 1289 | dnl check if exec-shield is present. |
| 1290 | AC_CHECK_FILE(/proc/sys/kernel/exec-shield, emacs_cv_execshield=1, | 1290 | AC_CHECK_FILE(/proc/sys/kernel/exec-shield, emacs_cv_execshield=1, |
| 1291 | emacs_cv_execshield=0) | 1291 | emacs_cv_execshield=0) |
| 1292 | if test "$emacs_cv_execshield" = 1; then | 1292 | if 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. | ||
| 1303 | Emacs can not dump itself if exec-shield is turned on. | ||
| 1304 | See `etc/PROBLEMS' for further information.]) | ||
| 1305 | esac | ||
| 1306 | fi | ||
| 1298 | fi | 1307 | fi |
| 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 @@ | |||
| 1 | 2004-09-26 Luc Teirlinck <teirllm@auburn.edu> | ||
| 2 | |||
| 3 | * enriched.doc: `enriched-annotation-alist' is now called | ||
| 4 | `enriched-translations'. | ||
| 5 | |||
| 6 | 2004-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 | |||
| 12 | 2004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | ||
| 13 | |||
| 14 | * PROBLEMS: Updated exec-shield description. | ||
| 15 | |||
| 1 | 2004-09-16 Dan Nicolaescu <dann@ics.uci.edu> | 16 | 2004-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. |
| @@ -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 | ||
| 2335 | With certain recent Linux kernels (like the one of Redhat Fedora Core | 2335 | With certain recent Linux kernels (like the one of Redhat Fedora Core |
| 2336 | 1), the new "Exec-shield" functionality is enabled by default, which | 2336 | 1 and 2), the new "Exec-shield" functionality is enabled by default, which |
| 2337 | creates a different memory layout that breaks the emacs dumper. | 2337 | creates a different memory layout that breaks the emacs dumper. |
| 2338 | 2338 | ||
| 2339 | Configure can overcome the problem of exec-shield if the architecture is | ||
| 2340 | x86 and the program setarch is present. On other architectures no | ||
| 2341 | workaround is known. | ||
| 2342 | |||
| 2339 | You can check the Exec-shield state like this: | 2343 | You 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 | ||
| 2343 | It returns 1 or 2 when Exec-shield is enabled, 0 otherwise. Please | 2347 | It returns non-zero when Exec-shield is enabled, 0 otherwise. Please |
| 2344 | read your system documentation for more details on Exec-shield and | 2348 | read your system documentation for more details on Exec-shield and |
| 2345 | associated commands. | 2349 | associated commands. Exec-shield can be turned off with this command: |
| 2350 | |||
| 2351 | echo "0" > /proc/sys/kernel/exec-shield | ||
| 2346 | 2352 | ||
| 2347 | When Exec-shield is enabled, building Emacs will segfault during the | 2353 | When Exec-shield is enabled, building Emacs will segfault during the |
| 2348 | execution of this command: | 2354 | execution of this command: |
| 2349 | 2355 | ||
| 2350 | temacs --batch --load loadup [dump|bootstrap] | 2356 | ./temacs --batch --load loadup [dump|bootstrap] |
| 2351 | 2357 | ||
| 2352 | To work around this problem, it is necessary to temporarily disable | 2358 | To work around this problem, it is necessary to temporarily disable |
| 2353 | Exec-shield while building Emacs, using the `setarch' command like | 2359 | Exec-shield while building Emacs, or, on x86, by using the `setarch' |
| 2354 | this: | 2360 | command 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 @@ | |||
| 1 | eterm, | 1 | eterm, |
| 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 | |||
| 196 | enriched-verbose. | 196 | enriched-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 |
| 199 | additions to <fixed>enriched-annotation-alist</fixed>. Note that the | 199 | additions to <fixed>enriched-translations</fixed>. Note that the standard |
| 200 | standard requires you to name your annotation starting<italic> "x-" | 200 | requires 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 |
| 202 | you think might be of general interest so that I can include | 202 | think might be of general interest so that I can include them |
| 203 | them in the distribution.</indent> | 203 | in 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 @@ | |||
| 1 | 2004-09-25 Kenichi Handa <handa@m17n.org> | ||
| 2 | |||
| 3 | * quail/uni-input.el (ucs-input-method): Add error clause to | ||
| 4 | condition-case. | ||
| 5 | |||
| 1 | 2004-09-21 Kenichi Handa <handa@m17n.org> | 6 | 2004-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 @@ | |||
| 1 | 2004-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 | |||
| 10 | 2004-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 | |||
| 19 | 2004-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 | |||
| 27 | 2004-09-27 Luc Teirlinck <teirllm@auburn.edu> | ||
| 28 | |||
| 29 | * textmodes/enriched.el (enriched-translations): Replace defconst | ||
| 30 | with defvar. | ||
| 31 | |||
| 32 | 2004-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 | |||
| 41 | 2004-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 | |||
| 48 | 2004-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 | |||
| 67 | 2004-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 | |||
| 1 | 2004-09-25 Lars Hansen <larsh@math.ku.dk> | 74 | 2004-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 | ||
| 6 | 2004-09-25 Kim F. Storm <storm@cua.dk> | 79 | 2004-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. |
| 301 | The arguments are DATE and NUMBER; the entries selected are those | 304 | The 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. |
| 210 | Each element has the form (REGEXP . SHELL-COMMAND). | 211 | Each element has the form (REGEXP . SHELL-COMMAND). |
| 211 | When the file name matches REGEXP, `dired-view-file' | 212 | When 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. | ||
| 803 | BEG..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. |
| 802 | Use SWITCHES to make the listings. | 909 | Use 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. | ||
| 1876 | Return 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 @@ | |||
| 1 | 2004-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 | |||
| 23 | 2004-09-27 Reiner Steib <Reiner.Steib@gmx.de> | ||
| 24 | |||
| 25 | * gnus.el (gnus-version-number): Set to 5.11. | ||
| 26 | |||
| 27 | 2004-09-27 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 28 | |||
| 29 | * mm-decode.el (mm-copy-to-buffer): Don't use set-buffer-multibyte. | ||
| 30 | |||
| 31 | 2004-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 & and '. | ||
| 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 | |||
| 70 | 2004-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 | |||
| 1 | 2004-09-20 Stefan Monnier <monnier@iro.umontreal.ca> | 75 | 2004-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 | '((" " . " ") (">" . ">") ("<" . "<") (""" . "\"")) | 45 | '((" " . " ") (">" . ">") ("<" . "<") (""" . "\"") |
| 46 | ("&" . "&") ("'" . "'")) | ||
| 46 | "The map of entity to text. | 47 | "The map of entity to text. |
| 47 | 48 | ||
| 48 | This is an alist were each element is a dotted pair consisting of an | 49 | This 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 | ||
| 64 | Value is an integer, nil, or t. nil means read in chunks of a file | 64 | Value 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. | ||
| 131 | This 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 | ||
| 16 | Please send all bug fixes and enhancements to | 16 | Please 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. |
| 935 | The interpreter name is same as buffer name, sans the asterisks. | 955 | The 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 @@ | |||
| 1 | 2004-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 | |||
| 7 | 2004-09-25 Luc Teirlinck <teirllm@auburn.edu> | ||
| 8 | |||
| 9 | * display.texi: Correct typos. | ||
| 10 | (Image Descriptors): Correct xref's. | ||
| 11 | |||
| 1 | 2004-09-25 Richard M. Stallman <rms@gnu.org> | 12 | 2004-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}, | |||
| 2716 | or @code{bottom}. | 2716 | or @code{bottom}. |
| 2717 | 2717 | ||
| 2718 | The @var{align} argument may also be a list @code{(@var{align} | 2718 | The @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. |
| 2720 | If @var{periodic} is non-@code{nil}, it specifies that the rows in | 2720 | If @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 |
| 2722 | height. | 2722 | height. |
| @@ -2988,7 +2988,7 @@ edge, center, or right edge of the text area. | |||
| 2988 | used with @code{:align-to} to specify that the position is relative to | 2988 | used with @code{:align-to} to specify that the position is relative to |
| 2989 | the left edge of the given area. Once the base offset for a relative | 2989 | the left edge of the given area. Once the base offset for a relative |
| 2990 | position has been set (by the first occurrence of one of these | 2990 | position has been set (by the first occurrence of one of these |
| 2991 | symbols), further occurences of these symbols are interpreted as the | 2991 | symbols), further occurrences of these symbols are interpreted as the |
| 2992 | width of the specified area. For example, to align to the center of | 2992 | width of the specified area. For example, to align to the center of |
| 2993 | the left-margin, use | 2993 | the left-margin, use |
| 2994 | 2994 | ||
| @@ -3181,7 +3181,7 @@ are supported only if particular support libraries are installed on | |||
| 3181 | your machine. In some environments, Emacs allows loading image | 3181 | your machine. In some environments, Emacs allows loading image |
| 3182 | libraries on demand; if so, the variable @code{image-library-alist} | 3182 | libraries on demand; if so, the variable @code{image-library-alist} |
| 3183 | can be used to modify the set of known names for these dynamic | 3183 | can be used to modify the set of known names for these dynamic |
| 3184 | libraries (though it is not posible to add new image formats). | 3184 | libraries (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 |
| 3187 | libraries @code{libXpm} version 3.4k and @code{libz}), GIF (needing | 3187 | libraries @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} |
| 3411 | This specifies the pointer shape when the mouse pointer is over this | 3411 | This specifies the pointer shape when the mouse pointer is over this |
| 3412 | image. @xref{Pointer Shapes}, for available pointer shapes. | 3412 | image. @xref{Pointer Shape}, for available pointer shapes. |
| 3413 | 3413 | ||
| 3414 | @item :map @var{map} | 3414 | @item :map @var{map} |
| 3415 | This associates an image map of @dfn{hot spots} with this image. | 3415 | This 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 | |||
| 3437 | property it defines a tool-tip for the hot-spot, and if it contains | 3437 | property it defines a tool-tip for the hot-spot, and if it contains |
| 3438 | a @code{pointer} property, it defines the shape of the mouse cursor when | 3438 | a @code{pointer} property, it defines the shape of the mouse cursor when |
| 3439 | it is over the hot-spot. | 3439 | it is over the hot-spot. |
| 3440 | @xref{Pointer Shapes}, for available pointer shapes. | 3440 | @xref{Pointer Shape}, for available pointer shapes. |
| 3441 | 3441 | ||
| 3442 | When you click the mouse when the mouse pointer is over a hot-spot, an | 3442 | When you click the mouse when the mouse pointer is over a hot-spot, an |
| 3443 | event is composed by combining the @var{id} of the hot-spot with the | 3443 | event 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 | ||
| 979 | This function returns @code{t} if @var{regexp} matches text before | ||
| 980 | point, ending at point, and @code{nil} otherwise. | ||
| 981 | |||
| 982 | Because regular expression matching works only going forward, this is | ||
| 983 | implemented by searching backwards from point for a match that ends at | ||
| 984 | point. That can be quite slow if it has to search a long distance. | ||
| 985 | You can bound the time required by specifying @var{limit}, which says | ||
| 986 | not to search before @var{limit}. In this case, the match that is | ||
| 987 | found must begin at or after @var{limit}. | ||
| 988 | |||
| 989 | @example | ||
| 990 | @group | ||
| 991 | ---------- Buffer: foo ---------- | ||
| 992 | I read "@point{}The cat in the hat | ||
| 993 | comes 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)} |
| 2992 | A newline can have a @code{line-spacing} text or overlay property | 2992 | A newline can have a @code{line-spacing} text or overlay property that |
| 2993 | that controls the height of the corresponding display line. | 2993 | controls the height of the display line ending with that newline. The |
| 2994 | @c ??? Which display line is "corresponding"? | 2994 | property value overrides the default frame line spacing and the buffer |
| 2995 | The @code{line-spacing} property overrides the default frame line | 2995 | local @code{line-spacing} variable. We will call the property value |
| 2996 | spacing and the buffer local @code{line-spacing} variable. We will | 2996 | @var{line-spacing}. |
| 2997 | call the property value @var{line-spacing}. | ||
| 2998 | 2997 | ||
| 2999 | If @var{line-spacing} is a positive integer, the value specifies | 2998 | If @var{line-spacing} is a positive integer, the value specifies |
| 3000 | additional vertical space, below the display line, in pixels. | 2999 | additional 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)} |
| 3014 | A newline can have a @code{line-height} text or overlay property that | 3013 | A newline can have a @code{line-height} text or overlay property that |
| 3015 | controls the total height of the corresponding display line. | 3014 | controls the total height of the display line ending in that newline. |
| 3016 | @c ??? Which display line is "corresponding"? | ||
| 3017 | We will call the property value @var{line-height}. | 3015 | We will call the property value @var{line-height}. |
| 3018 | 3016 | ||
| 3019 | If @var{line-height} is 0, the newline does not contribute to the | 3017 | If @var{line-height} is 0, the height of the line is determined solely |
| 3020 | height of the display row; instead the height of the newline glyph is | 3018 | from its contents; nothing is added. Any @code{line-spacing} property |
| 3021 | reduced. | 3019 | on this newline is ignored. This case is useful for tiling small |
| 3022 | @c ??? That is not clear. Reduced how much? | 3020 | images or image slices without adding blank areas between the images. |
| 3023 | In that case, any @code{line-spacing} property on | ||
| 3024 | this newline is ignored. This can be used to tile small images or | ||
| 3025 | image slices without adding blank areas between the images. | ||
| 3026 | @c ??? Precisely which of these features does ``this'' mean? | ||
| 3027 | 3021 | ||
| 3028 | If @var{line-height} is a positive integer, the value specifies the | 3022 | If @var{line-height} is a positive integer, the value specifies the |
| 3029 | minimum line height in pixels. The line's ascent height is | 3023 | minimum 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 @@ | |||
| 1 | 2004-09-28 Kim F. Storm <storm@cua.dk> | ||
| 2 | |||
| 3 | * display.texi (Display Custom) <indicate-buffer-boundaries>: | ||
| 4 | Align with new functionality. | ||
| 5 | |||
| 6 | 2004-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 | |||
| 14 | 2004-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 | |||
| 20 | 2004-09-20 Lars Magne Ingebrigtsen <larsi@gnus.org> | ||
| 21 | |||
| 22 | * gnus.texi (Summary Mail Commands): S D e. | ||
| 23 | |||
| 24 | 2004-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 | |||
| 29 | 2004-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 | |||
| 34 | 2004-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 | |||
| 52 | 2004-09-20 Andre Srinivasan <andre@e2open.com> | ||
| 53 | |||
| 54 | * gnus.texi (Group Parameters): Added more on hooks. (Small | ||
| 55 | change.) | ||
| 56 | |||
| 57 | 2004-09-20 Florian Weimer <fw@deneb.enyo.de> | ||
| 58 | |||
| 59 | * gnus.texi (Charsets): Point to relevant section in emacs-mime. | ||
| 60 | |||
| 1 | 2004-09-22 Luc Teirlinck <teirllm@auburn.edu> | 61 | 2004-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 | |||
| 1007 | and bottom of the left or right fringe if the window can be scrolled | 1007 | and bottom of the left or right fringe if the window can be scrolled |
| 1008 | in either direction. | 1008 | in either direction. |
| 1009 | 1009 | ||
| 1010 | The buffer-local variable @code{indicate-buffer-boundaries} controls | 1010 | The buffer-local variable @code{indicate-buffer-boundaries} controls |
| 1011 | how the buffer boundaries and window scrolling is indicated in the | 1011 | how the buffer boundaries and window scrolling is indicated in the |
| 1012 | fringes. | 1012 | fringes. |
| 1013 | 1013 | ||
| 1014 | If 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 |
| 1015 | bitmaps are displayed in the left or right fringe, respectively. | 1015 | bitmaps are displayed in the left or right fringe, respectively. |
| 1016 | Any other non-@code{nil} value causes the bitmap on the top line to be | 1016 | |
| 1017 | displayed in the left fringe, and the bitmap on the bottom line in the | 1017 | If value is an alist, each element @code{(@var{indicator} . |
| 1018 | right fringe. | 1018 | @var{position})} specifies the position of one of the indicators. |
| 1019 | 1019 | The @var{indicator} must be one of @code{top}, @code{bottom}, | |
| 1020 | If value is a cons @code{(angles . arrows)}, the car specifies the | 1020 | @code{up}, @code{down}, or @code{t} which specifies the default |
| 1021 | position of the angle bitmaps, and the cdr specifies the position of | 1021 | position for the indicators not present in the alist. |
| 1022 | the arrow bitmaps. For example, @code{(t . right)} places the top | 1022 | The @var{position} is one of @code{left}, @code{right}, or @code{ni} |
| 1023 | angle bitmap in left fringe, the bottom angle bitmap in right fringe, | 1023 | which specifies not to show this indicator. |
| 1024 | and both arrow bitmaps in right fringe. To show just the angle | 1024 | |
| 1025 | bitmaps in the left fringe, but no arrow bitmaps, use @code{(left . nil)}. | 1025 | For example, @code{((top . left) (t . right))} places the top angle |
| 1026 | bitmap in left fringe, the bottom angle bitmap in right fringe, and | ||
| 1027 | both arrow bitmaps in right fringe. To show just the angle bitmaps in | ||
| 1028 | the 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 |
| 331 | When displaying inline images that are larger than the window, XEmacs | 331 | When displaying inline images that are larger than the window, Emacs |
| 332 | does not enable scrolling, which means that you cannot see the whole | 332 | does not enable scrolling, which means that you cannot see the whole |
| 333 | image. To prevent this, the library tries to determine the image size | 333 | image. To prevent this, the library tries to determine the image size |
| 334 | before displaying it inline, and if it doesn't fit the window, the | 334 | before 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 | ||
| 120 | Answer: | 120 | Answer: |
| 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 | ||
| 134 | What's new in 5.10.0? | 134 | What's new in 5.10? |
| 135 | 135 | ||
| 136 | Answer: | 136 | Answer: |
| 137 | 137 | ||
| @@ -227,7 +227,7 @@ Which version of Emacs do I need? | |||
| 227 | 227 | ||
| 228 | Answer: | 228 | Answer: |
| 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 | ||
| 442 | SET HOME=C:\myhome | 442 | SET 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 | ||
| 1001 | Answer: | 1001 | Answer: |
| 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 | ||
| 1794 | Answer: | 1794 | Answer: |
| 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 |
| 1854 | instead: | 1854 | instead (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 | |||
| 3013 | the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")} | 3013 | the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")} |
| 3014 | into the group parameters for the group. | 3014 | into the group parameters for the group. |
| 3015 | 3015 | ||
| 3016 | This can also be used as a group-specific hook function, if you'd like. | 3016 | This can also be used as a group-specific hook function. If you want to |
| 3017 | If you want to hear a beep when you enter a group, you could put | 3017 | hear a beep when you enter a group, you could put something like |
| 3018 | something like @code{(dummy-variable (ding))} in the parameters of that | 3018 | @code{(dummy-variable (ding))} in the parameters of that group. |
| 3019 | group. @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 | |||
| 3022 | Alternatively, since the VARIABLE becomes local to the group, this | ||
| 3023 | pattern can be used to temporarily change a hook. For example, if the | ||
| 3024 | following 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 | |||
| 3031 | when the group is entered, the 'd' key will not mark the article as | ||
| 3032 | expired. | ||
| 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 | |||
| 5368 | This command understands the process/prefix convention | 5380 | This 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 | |||
| 5387 | Like the previous command, but will allow you to edit the message as | ||
| 5388 | if 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 |
| 6190 | Mark all articles in series order (@code{gnus-uu-mark-series}). | 6209 | Mark 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 |
| 9329 | Alist of @acronym{MIME} multipart types and functions to handle them. | 9348 | Alist 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 | ||
| 9352 | Display "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 | ||
| 9356 | Display "multipart/related" parts as "multipart/mixed". | ||
| 9357 | |||
| 9358 | If displaying "text/html" is discouraged, see | ||
| 9359 | @code{mm-discouraged-alternatives} in @ref{Display Customization, | ||
| 9360 | Display Customization, , emacs-mime, Emacs-Mime Manual}. Images or | ||
| 9361 | other material inside a "multipart/related" part might be overlooked | ||
| 9362 | when this variable is nil. | ||
| 9363 | |||
| 9364 | @vindex gnus-mime-display-multipart-as-mixed | ||
| 9365 | @item gnus-mime-display-multipart-as-mixed | ||
| 9366 | Display "multipart" parts as "multipart/mixed". If t, it overrides nil | ||
| 9367 | values 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 |
| 9333 | List of functions used for rewriting file names of @acronym{MIME} parts. | 9372 | List 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, | ||
| 9467 | The Emacs MIME Manual}, for additional variables that control which | ||
| 9468 | MIME charsets are used when sending messages. | ||
| 9469 | |||
| 9427 | Other charset tricks that may be useful, although not Gnus-specific: | 9470 | Other charset tricks that may be useful, although not Gnus-specific: |
| 9428 | 9471 | ||
| 9429 | If there are several @acronym{MIME} charsets that encode the same Emacs | 9472 | If 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 |
| 10138 | A list of newsgroup (summary buffer) local variables, or cons of | 10181 | A list of newsgroup (summary buffer) local variables, or cons of |
| 10139 | variables and their default values (when the default values are not | 10182 | variables and their default expressions to be evalled (when the default |
| 10140 | @code{nil}), that should be made global while the summary buffer is | 10183 | values are not @code{nil}), that should be made global while the summary |
| 10141 | active. These variables can be used to set variables in the group | 10184 | buffer is active. |
| 10142 | parameters while still allowing them to affect operations done in | 10185 | |
| 10143 | other buffers. For example: | 10186 | Note: The default expressions will be evaluated (using function |
| 10187 | @code{eval}) before assignment to the local variable rather than just | ||
| 10188 | assigned to it. If the default expression is the symbol @code{global}, | ||
| 10189 | that symbol will not be evaluated but the global value of the local | ||
| 10190 | variable will be used instead. | ||
| 10191 | |||
| 10192 | These variables can be used to set variables in the group parameters | ||
| 10193 | while still allowing them to affect operations done in other | ||
| 10194 | buffers. 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 | ||
| 10203 | Also @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 |
| 11271 | This variable is a format string along the same lines as | 11323 | This 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 |
| 11273 | accepts the same format specifications as that variable, with two | 11325 | Line}). It accepts the same format specifications as that variable, |
| 11274 | extensions: | 11326 | with 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 | |||
| 13203 | that haven't been matched by any of the other regexps. (These rules are | 13255 | that haven't been matched by any of the other regexps. (These rules are |
| 13204 | processed from the beginning of the alist toward the end. The first | 13256 | processed from the beginning of the alist toward the end. The first |
| 13205 | rule to make a match will ``win'', unless you have crossposting enabled. | 13257 | rule to make a match will ``win'', unless you have crossposting enabled. |
| 13206 | In that case, all matching rules will ``win''.) | 13258 | In that case, all matching rules will ``win''.) When new groups are |
| 13259 | created by splitting mail, you may want to run | ||
| 13260 | @code{gnus-group-find-new-groups} to see the new groups. | ||
| 13207 | 13261 | ||
| 13208 | If you like to tinker with this yourself, you can set this variable to a | 13262 | If you like to tinker with this yourself, you can set this variable to a |
| 13209 | function of your choice. This function will be called without any | 13263 | function 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 |
| 13774 | Directory where files (if any) will be stored. The default is | 13828 | Directory 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 | 13829 | default is @file{~/Mail/}. At present, the only thing this is used for |
| 13776 | where the incoming files will be stored if the previous variable is | 13830 | is 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: | |||
| 16571 | This instructs the @code{imap.el} package to log any exchanges with | 16625 | This instructs the @code{imap.el} package to log any exchanges with |
| 16572 | the server. The log is stored in the buffer @samp{*imap-log*}. Look | 16626 | the server. The log is stored in the buffer @samp{*imap-log*}. Look |
| 16573 | for error messages, which sometimes are tagged with the keyword | 16627 | for 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 |
| 16575 | data. | 16629 | data. |
| 16576 | 16630 | ||
| 16577 | @node Other Sources | 16631 | @node Other Sources |
| @@ -18246,8 +18300,8 @@ placeholders if you care (See @code{gnus-auto-goto-ignores}). | |||
| 18246 | While it may be obvious to all, the only headers and articles | 18300 | While it may be obvious to all, the only headers and articles |
| 18247 | available while unplugged are those headers and articles that were | 18301 | available while unplugged are those headers and articles that were |
| 18248 | fetched into the Agent while previously plugged. To put it another | 18302 | fetched into the Agent while previously plugged. To put it another |
| 18249 | way, "If you forget to fetch something while plugged, you might have a | 18303 | way, ``If you forget to fetch something while plugged, you might have a |
| 18250 | less than satisfying unplugged session". For this reason, the Agent | 18304 | less than satisfying unplugged session''. For this reason, the Agent |
| 18251 | adds two visual effects to your summary buffer. These effects display | 18305 | adds two visual effects to your summary buffer. These effects display |
| 18252 | the download status of each article so that you always know which | 18306 | the download status of each article so that you always know which |
| 18253 | articles will be available when unplugged. | 18307 | articles will be available when unplugged. |
| @@ -18624,7 +18678,7 @@ following incantation: | |||
| 18624 | 18678 | ||
| 18625 | @example | 18679 | @example |
| 18626 | #!/bin/sh | 18680 | #!/bin/sh |
| 18627 | emacs -batch -l ~/.emacs -f -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1 | 18681 | emacs -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 | ||
| 20439 | Then that means "score on the from header of the grandparent of the | 20493 | Then that means ``score on the from header of the grandparent of the |
| 20440 | current article". An indirection is quite fast, but it's better to say: | 20494 | current 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 | |||
| 22656 | articles becomes the substitute for checking incoming mail. Whether | 22710 | articles becomes the substitute for checking incoming mail. Whether |
| 22657 | only unseen articles or all unread articles will be processed is | 22711 | only unseen articles or all unread articles will be processed is |
| 22658 | determined by the @code{spam-autodetect-recheck-messages}. When set | 22712 | determined by the @code{spam-autodetect-recheck-messages}. When set |
| 22659 | to t, unread messages will be rechecked. | 22713 | to @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 |
| 22662 | of spam filtering. The user will have more control over each group's | 22716 | of 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 |
| 1553 | This required header will be generated by Message. A unique ID will be | 1553 | This required header will be generated by Message. A unique ID will be |
| 1554 | created based on the date, time, user name and system name. For the | 1554 | created based on the date, time, user name (for the local part) and the |
| 1555 | domain part, message will look (in this order) at | 1555 | domain 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} |
| 1557 | and @code{message-user-mail-address} (i.e. @code{user-mail-address}) | 1557 | and @code{message-user-mail-address} (i.e. @code{user-mail-address}) |
| 1558 | until a probably valid fully qualified domain name (FQDN) was found. | 1558 | until 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. | |||
| 135 | If encryption is successful, it replaces the current region contents (in | 135 | If encryption is successful, it replaces the current region contents (in |
| 136 | the accessible portion) with the resulting data. | 136 | the accessible portion) with the resulting data. |
| 137 | 137 | ||
| 138 | If optional argument @var{sign} is non-nil, the function is request to | 138 | If optional argument @var{sign} is non-@code{nil}, the function is |
| 139 | do a combined sign and encrypt. This currently only work with GnuPG. | 139 | request to do a combined sign and encrypt. This currently only work |
| 140 | with 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 |
| 303 | Encrypt the current region between @var{start} and @var{end} for | 304 | Encrypt 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 |
| 305 | encrypt. If encryption is successful, it returns @code{t}, otherwise | 306 | and encrypt. If encryption is successful, it returns @code{t}, |
| 306 | @code{nil}. | 307 | otherwise @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 |
| 280 | If non-nil, should be a string naming a buffer where a protocol trace | 280 | If non-@code{nil}, should be a string naming a buffer where a protocol trace |
| 281 | is dumped (for debugging purposes). | 281 | is 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 |
| 316 | Returns non-nil iff server have roam for a script of given size. | 316 | Returns non-@code{nil} iff server have roam for a script of given |
| 317 | size. | ||
| 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 @@ | |||
| 1 | 2004-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 | |||
| 25 | 2004-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 | |||
| 35 | 2004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | ||
| 36 | |||
| 37 | * config.in: Rebuild | ||
| 38 | |||
| 1 | 2004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | 39 | 2004-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 | |||
| 5698 | of a window on window-systems with angle bitmaps, or if the window can be | 5698 | of a window on window-systems with angle bitmaps, or if the window can be |
| 5699 | scrolled, the top and bottom line of the window are marked with up and down | 5699 | scrolled, the top and bottom line of the window are marked with up and down |
| 5700 | arrow bitmaps. | 5700 | arrow bitmaps. |
| 5701 | If value is `left' or `right', both angle and arrow bitmaps are displayed in | 5701 | |
| 5702 | the left or right fringe, resp. Any other non-nil value causes the | 5702 | If value is a symbol `left' or `right', both angle and arrow bitmaps |
| 5703 | bitmap on the top line to be displayed in the left fringe, and the | 5703 | are displayed in the left or right fringe, resp. |
| 5704 | bitmap on the bottom line in the right fringe. | 5704 | |
| 5705 | If value is a cons (ANGLES . ARROWS), the car specifies the position | 5705 | If value is an alist, each element (INDICATOR . POSITION) specifies |
| 5706 | of the angle bitmaps, and the cdr specifies the position of the arrow | 5706 | the position of one of the indicators. INDICATOR is one of `top', |
| 5707 | bitmaps. For example, (t . right) places the top angle bitmap in left | 5707 | `bottom', `up', `down', or t, which specifies the default position, |
| 5708 | fringe, the bottom angle bitmap in right fringe, and both arrow | 5708 | and POSITION is one of `left', `right', or nil, meaning do not show |
| 5709 | this indicator. | ||
| 5710 | |||
| 5711 | For example, ((top . left) (t . right)) places the top angle bitmap in | ||
| 5712 | left fringe, the bottom angle bitmap in right fringe, and both arrow | ||
| 5709 | bitmaps in right fringe. To show just the angle bitmaps in the left | 5713 | bitmaps in right fringe. To show just the angle bitmaps in the left |
| 5710 | fringe, but no arrow bitmaps, use (left . nil). */); | 5714 | fringe, 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 | ¤t_buffer->scroll_up_aggressively, Qnil, | 5717 | ¤t_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 | ||
| 2637 | int valid_fringe_bitmap_id_p (int); | 2637 | int valid_fringe_bitmap_p (Lisp_Object); |
| 2638 | void draw_fringe_bitmap P_ ((struct window *, struct glyph_row *, int)); | 2638 | void draw_fringe_bitmap P_ ((struct window *, struct glyph_row *, int)); |
| 2639 | void draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *)); | 2639 | void draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *)); |
| 2640 | void draw_window_fringes P_ ((struct window *)); | 2640 | void 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 | ||
| 34 | extern Lisp_Object Qfringe; | ||
| 34 | extern Lisp_Object Qtop, Qbottom, Qcenter; | 35 | extern Lisp_Object Qtop, Qbottom, Qcenter; |
| 36 | extern 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 | ||
| 38 | Lisp_Object Voverflow_newline_into_fringe; | 40 | Lisp_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 | |||
| 49 | Lisp_Object Vfringe_bitmaps; | ||
| 40 | 50 | ||
| 41 | enum fringe_bitmap_type | 51 | enum 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 | ||
| 445 | int | 455 | int |
| 446 | valid_fringe_bitmap_id_p (fringe_id) | 456 | valid_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 | |||
| 478 | static Lisp_Object | ||
| 479 | get_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 | |||
| 511 | static int | ||
| 512 | resolve_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 | ||
| 981 | DEFUN ("destroy-fringe-bitmap", Fdestroy_fringe_bitmap, Sdestroy_fringe_bitmap, | 1070 | |
| 982 | 1, 1, 0, | 1071 | void |
| 983 | doc: /* Destroy fringe bitmap WHICH. | 1072 | destroy_fringe_bitmap (n) |
| 984 | If 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 | ||
| 1094 | DEFUN ("destroy-fringe-bitmap", Fdestroy_fringe_bitmap, Sdestroy_fringe_bitmap, | ||
| 1095 | 1, 1, 0, | ||
| 1096 | doc: /* Destroy fringe bitmap BITMAP. | ||
| 1097 | If 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 | ||
| 1092 | DEFUN ("define-fringe-bitmap", Fdefine_fringe_bitmap, Sdefine_fringe_bitmap, | 1198 | DEFUN ("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. |
| 1201 | BITMAP is a symbol or string naming the new fringe bitmap. | ||
| 1095 | BITS is either a string or a vector of integers. | 1202 | BITS is either a string or a vector of integers. |
| 1096 | HEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS. | 1203 | HEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS. |
| 1097 | WIDTH must be an integer between 1 and 16, or nil which defaults to 8. | 1204 | WIDTH must be an integer between 1 and 16, or nil which defaults to 8. |
| 1098 | Optional fourth arg ALIGN may be one of `top', `center', or `bottom', | 1205 | Optional fifth arg ALIGN may be one of `top', `center', or `bottom', |
| 1099 | indicating the positioning of the bitmap relative to the rows where it | 1206 | indicating the positioning of the bitmap relative to the rows where it |
| 1100 | is used; the default is to center the bitmap. Fourth arg may also be a | 1207 | is used; the default is to center the bitmap. Fourth arg may also be a |
| 1101 | list (ALIGN PERIODIC) where PERIODIC non-nil specifies that the bitmap | 1208 | list (ALIGN PERIODIC) where PERIODIC non-nil specifies that the bitmap |
| 1102 | should be repeated. | 1209 | should be repeated. |
| 1103 | Optional fifth argument WHICH is bitmap number to redefine. | 1210 | If BITMAP already exists, the existing definition is replaced. */) |
| 1104 | Return 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 | ||
| 1217 | DEFUN ("set-fringe-bitmap-face", Fset_fringe_bitmap_face, Sset_fringe_bitmap_face, | 1324 | DEFUN ("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. |
| 1220 | If FACE is nil, reset face to default fringe face. */) | 1327 | If 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, | |||
| 1247 | If WINDOW is nil, use selected window. If POS is nil, use value of point | 1355 | If WINDOW is nil, use selected window. If POS is nil, use value of point |
| 1248 | in that window. Return value is a cons (LEFT . RIGHT) where LEFT and RIGHT | 1356 | in that window. Return value is a cons (LEFT . RIGHT) where LEFT and RIGHT |
| 1249 | are the fringe bitmap numbers for the bitmaps in the left and right fringe, | 1357 | are the fringe bitmap numbers for the bitmaps in the left and right fringe, |
| 1250 | resp. Return nil if POS is not visible in WINDOW. */) | 1358 | resp. If left or right fringe is empty, the corresponding element is nil. |
| 1359 | Return 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. */) | |||
| 1288 | void | 1397 | void |
| 1289 | syms_of_fringe () | 1398 | syms_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. | |||
| 1303 | If nil, also continue lines which are exactly as wide as the window. */); | 1411 | If 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. | ||
| 1416 | You 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; | |||
| 308 | extern Lisp_Object QCwidth, QCheight, QCascent; | 308 | extern Lisp_Object QCwidth, QCheight, QCascent; |
| 309 | extern Lisp_Object Qscroll_bar; | 309 | extern Lisp_Object Qscroll_bar; |
| 310 | extern Lisp_Object Qcursor; | 310 | extern Lisp_Object Qcursor; |
| 311 | extern 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)))) |