aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2004-12-25 02:00:25 +0000
committerMiles Bader2004-12-25 02:00:25 +0000
commit6a89b7e95a771e5141bb1718e8278dcf892359ea (patch)
tree189a864da85f49e73c6f9220b7231f0c54250e6e
parent054b6b53c3554c83ae02d24a772a74b63ebb08cd (diff)
parent70d16390a08dc9d94c961eb380be8e1b5b496963 (diff)
downloademacs-6a89b7e95a771e5141bb1718e8278dcf892359ea.tar.gz
emacs-6a89b7e95a771e5141bb1718e8278dcf892359ea.zip
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-79
Merge from emacs--cvs-trunk--0 Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-735 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-747 Update from CVS
-rw-r--r--admin/FOR-RELEASE24
-rwxr-xr-xconfigure543
-rw-r--r--etc/ChangeLog8
-rw-r--r--etc/DEBUG24
-rw-r--r--etc/DISTRIB2
-rw-r--r--etc/NEWS83
-rw-r--r--lib-src/ChangeLog5
-rw-r--r--lib-src/etags.c4
-rw-r--r--lisp/ChangeLog277
-rw-r--r--lisp/apropos.el25
-rw-r--r--lisp/calc/calc-aent.el52
-rw-r--r--lisp/calc/calc-comb.el9
-rw-r--r--lisp/calculator.el220
-rw-r--r--lisp/calendar/calendar.el7
-rw-r--r--lisp/calendar/diary-lib.el4
-rw-r--r--lisp/descr-text.el46
-rw-r--r--lisp/dired.el1
-rw-r--r--lisp/emacs-lisp/bytecomp.el2
-rw-r--r--lisp/emacs-lisp/lisp.el6
-rw-r--r--lisp/emulation/cua-base.el17
-rw-r--r--lisp/faces.el10
-rw-r--r--lisp/gnus/ChangeLog8
-rw-r--r--lisp/gnus/gnus-group.el1
-rw-r--r--lisp/gnus/gnus-sum.el7
-rw-r--r--lisp/help-fns.el10
-rw-r--r--lisp/help-mode.el1
-rw-r--r--lisp/help.el61
-rw-r--r--lisp/info-look.el2
-rw-r--r--lisp/international/quail.el28
-rw-r--r--lisp/isearch.el5
-rw-r--r--lisp/mouse.el108
-rw-r--r--lisp/net/tramp-smb.el8
-rw-r--r--lisp/net/tramp.el128
-rw-r--r--lisp/net/trampver.el2
-rw-r--r--lisp/pcvs-defs.el2
-rw-r--r--lisp/play/zone.el287
-rw-r--r--lisp/progmodes/compile.el3
-rw-r--r--lisp/progmodes/executable.el14
-rw-r--r--lisp/progmodes/grep.el5
-rw-r--r--lisp/progmodes/hideshow.el164
-rw-r--r--lisp/progmodes/idlwave.el4
-rw-r--r--lisp/replace.el166
-rw-r--r--lisp/simple.el21
-rw-r--r--lisp/textmodes/ispell.el2
-rw-r--r--lisp/tooltip.el23
-rw-r--r--lisp/vc.el2
-rw-r--r--lisp/wid-edit.el6
-rw-r--r--lispref/ChangeLog4
-rw-r--r--lispref/commands.texi12
-rw-r--r--man/ChangeLog37
-rw-r--r--man/calc.texi449
-rw-r--r--man/cc-mode.texi4
-rw-r--r--man/mark.texi11
-rw-r--r--man/trampver.texi2
-rw-r--r--man/url.texi94
-rw-r--r--src/ChangeLog116
-rw-r--r--src/alloc.c109
-rw-r--r--src/atimer.c2
-rw-r--r--src/data.c1
-rw-r--r--src/dispnew.c4
-rw-r--r--src/emacs.c21
-rw-r--r--src/eval.c1
-rw-r--r--src/fileio.c16
-rw-r--r--src/floatfns.c1
-rw-r--r--src/image.c6
-rw-r--r--src/keyboard.c56
-rw-r--r--src/lisp.h3
-rw-r--r--src/macterm.c102
-rw-r--r--src/process.c3
-rw-r--r--src/regex.c2
-rw-r--r--src/sysdep.c1
-rw-r--r--src/syssignal.h27
-rw-r--r--src/undo.c156
-rw-r--r--src/xdisp.c15
-rw-r--r--src/xselect.c2
-rw-r--r--src/xterm.c6
76 files changed, 2288 insertions, 1412 deletions
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE
index ca0e16bdec9..e00c40b0871 100644
--- a/admin/FOR-RELEASE
+++ b/admin/FOR-RELEASE
@@ -57,7 +57,7 @@ Trying 192.87.102.36...
57Connected to ftp.nluug.nl. 57Connected to ftp.nluug.nl.
58 58
59Ange-ftp chokes on the `No route to host' message and doesn't look any 59Ange-ftp chokes on the `No route to host' message and doesn't look any
60further. 60further.
61 61
62I think in the near future we will see more of this problem, so it might be 62I think in the near future we will see more of this problem, so it might be
63time to make anfe-ftp more intelligent. 63time to make anfe-ftp more intelligent.
@@ -112,6 +112,28 @@ we come to mark the http buffers as dead.
112 112
113* REDISPLAY RELATED BUGS 113* REDISPLAY RELATED BUGS
114 114
115** Strange text scrolling with Emacs + GTK
116
117> I could reproduce the problem with the latest CVS.
118>
119> % emacs -Q
120> M-x info RET
121> M->
122> C-l
123> C-x ( C-u - 1 C-v C-x )
124> C-x e e e e ...
125>
126> I see the problem around "CC mode" and "Forms".
127
128It is not specific for the first line of a buffer.
129
130Rather it happens for lines which are indented but the
131indentation is controlled by a display property and
132the newline is part of that display property -- in
133that case, the indentation is not recognized for the
134first display line.
135
136
115** Avoid unbreakable loops in redisplay. 137** Avoid unbreakable loops in redisplay.
116 138
117Redisplay may loop if there is an error in some display property, e.g. 139Redisplay may loop if there is an error in some display property, e.g.
diff --git a/configure b/configure
index 4ae0be0ae95..e80559cce4d 100755
--- a/configure
+++ b/configure
@@ -984,7 +984,7 @@ esac
984 else 984 else
985 echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 985 echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
986 fi 986 fi
987 cd $ac_popdir 987 cd "$ac_popdir"
988 done 988 done
989fi 989fi
990 990
@@ -3250,8 +3250,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
3250 cat conftest.err >&5 3250 cat conftest.err >&5
3251 echo "$as_me:$LINENO: \$? = $ac_status" >&5 3251 echo "$as_me:$LINENO: \$? = $ac_status" >&5
3252 (exit $ac_status); } && 3252 (exit $ac_status); } &&
3253 { ac_try='test -z "$ac_c_werror_flag" 3253 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
3254 || test ! -s conftest.err'
3255 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 3254 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
3256 (eval $ac_try) 2>&5 3255 (eval $ac_try) 2>&5
3257 ac_status=$? 3256 ac_status=$?
@@ -3309,8 +3308,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
3309 cat conftest.err >&5 3308 cat conftest.err >&5
3310 echo "$as_me:$LINENO: \$? = $ac_status" >&5 3309 echo "$as_me:$LINENO: \$? = $ac_status" >&5
3311 (exit $ac_status); } && 3310 (exit $ac_status); } &&
3312 { ac_try='test -z "$ac_c_werror_flag" 3311 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
3313 || test ! -s conftest.err'
3314 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 3312 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
3315 (eval $ac_try) 2>&5 3313 (eval $ac_try) 2>&5
3316 ac_status=$? 3314 ac_status=$?
@@ -3426,8 +3424,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
3426 cat conftest.err >&5 3424 cat conftest.err >&5
3427 echo "$as_me:$LINENO: \$? = $ac_status" >&5 3425 echo "$as_me:$LINENO: \$? = $ac_status" >&5
3428 (exit $ac_status); } && 3426 (exit $ac_status); } &&
3429 { ac_try='test -z "$ac_c_werror_flag" 3427 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
3430 || test ! -s conftest.err'
3431 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 3428 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
3432 (eval $ac_try) 2>&5 3429 (eval $ac_try) 2>&5
3433 ac_status=$? 3430 ac_status=$?
@@ -3481,8 +3478,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
3481 cat conftest.err >&5 3478 cat conftest.err >&5
3482 echo "$as_me:$LINENO: \$? = $ac_status" >&5 3479 echo "$as_me:$LINENO: \$? = $ac_status" >&5
3483 (exit $ac_status); } && 3480 (exit $ac_status); } &&
3484 { ac_try='test -z "$ac_c_werror_flag" 3481 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
3485 || test ! -s conftest.err'
3486 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 3482 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
3487 (eval $ac_try) 2>&5 3483 (eval $ac_try) 2>&5
3488 ac_status=$? 3484 ac_status=$?
@@ -3527,8 +3523,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
3527 cat conftest.err >&5 3523 cat conftest.err >&5
3528 echo "$as_me:$LINENO: \$? = $ac_status" >&5 3524 echo "$as_me:$LINENO: \$? = $ac_status" >&5
3529 (exit $ac_status); } && 3525 (exit $ac_status); } &&
3530 { ac_try='test -z "$ac_c_werror_flag" 3526 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
3531 || test ! -s conftest.err'
3532 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 3527 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
3533 (eval $ac_try) 2>&5 3528 (eval $ac_try) 2>&5
3534 ac_status=$? 3529 ac_status=$?
@@ -3572,8 +3567,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
3572 cat conftest.err >&5 3567 cat conftest.err >&5
3573 echo "$as_me:$LINENO: \$? = $ac_status" >&5 3568 echo "$as_me:$LINENO: \$? = $ac_status" >&5
3574 (exit $ac_status); } && 3569 (exit $ac_status); } &&
3575 { ac_try='test -z "$ac_c_werror_flag" 3570 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
3576 || test ! -s conftest.err'
3577 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 3571 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
3578 (eval $ac_try) 2>&5 3572 (eval $ac_try) 2>&5
3579 ac_status=$? 3573 ac_status=$?
@@ -4206,8 +4200,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
4206 cat conftest.err >&5 4200 cat conftest.err >&5
4207 echo "$as_me:$LINENO: \$? = $ac_status" >&5 4201 echo "$as_me:$LINENO: \$? = $ac_status" >&5
4208 (exit $ac_status); } && 4202 (exit $ac_status); } &&
4209 { ac_try='test -z "$ac_c_werror_flag" 4203 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
4210 || test ! -s conftest.err'
4211 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 4204 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
4212 (eval $ac_try) 2>&5 4205 (eval $ac_try) 2>&5
4213 ac_status=$? 4206 ac_status=$?
@@ -4483,8 +4476,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
4483 cat conftest.err >&5 4476 cat conftest.err >&5
4484 echo "$as_me:$LINENO: \$? = $ac_status" >&5 4477 echo "$as_me:$LINENO: \$? = $ac_status" >&5
4485 (exit $ac_status); } && 4478 (exit $ac_status); } &&
4486 { ac_try='test -z "$ac_c_werror_flag" 4479 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
4487 || test ! -s conftest.err'
4488 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 4480 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
4489 (eval $ac_try) 2>&5 4481 (eval $ac_try) 2>&5
4490 ac_status=$? 4482 ac_status=$?
@@ -4513,8 +4505,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
4513 cat conftest.err >&5 4505 cat conftest.err >&5
4514 echo "$as_me:$LINENO: \$? = $ac_status" >&5 4506 echo "$as_me:$LINENO: \$? = $ac_status" >&5
4515 (exit $ac_status); } && 4507 (exit $ac_status); } &&
4516 { ac_try='test -z "$ac_c_werror_flag" 4508 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
4517 || test ! -s conftest.err'
4518 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 4509 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
4519 (eval $ac_try) 2>&5 4510 (eval $ac_try) 2>&5
4520 ac_status=$? 4511 ac_status=$?
@@ -4584,8 +4575,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
4584 cat conftest.err >&5 4575 cat conftest.err >&5
4585 echo "$as_me:$LINENO: \$? = $ac_status" >&5 4576 echo "$as_me:$LINENO: \$? = $ac_status" >&5
4586 (exit $ac_status); } && 4577 (exit $ac_status); } &&
4587 { ac_try='test -z "$ac_c_werror_flag" 4578 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
4588 || test ! -s conftest.err'
4589 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 4579 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
4590 (eval $ac_try) 2>&5 4580 (eval $ac_try) 2>&5
4591 ac_status=$? 4581 ac_status=$?
@@ -4637,8 +4627,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
4637 cat conftest.err >&5 4627 cat conftest.err >&5
4638 echo "$as_me:$LINENO: \$? = $ac_status" >&5 4628 echo "$as_me:$LINENO: \$? = $ac_status" >&5
4639 (exit $ac_status); } && 4629 (exit $ac_status); } &&
4640 { ac_try='test -z "$ac_c_werror_flag" 4630 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
4641 || test ! -s conftest.err'
4642 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 4631 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
4643 (eval $ac_try) 2>&5 4632 (eval $ac_try) 2>&5
4644 ac_status=$? 4633 ac_status=$?
@@ -4709,8 +4698,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
4709 cat conftest.err >&5 4698 cat conftest.err >&5
4710 echo "$as_me:$LINENO: \$? = $ac_status" >&5 4699 echo "$as_me:$LINENO: \$? = $ac_status" >&5
4711 (exit $ac_status); } && 4700 (exit $ac_status); } &&
4712 { ac_try='test -z "$ac_c_werror_flag" 4701 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
4713 || test ! -s conftest.err'
4714 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 4702 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
4715 (eval $ac_try) 2>&5 4703 (eval $ac_try) 2>&5
4716 ac_status=$? 4704 ac_status=$?
@@ -4762,8 +4750,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
4762 cat conftest.err >&5 4750 cat conftest.err >&5
4763 echo "$as_me:$LINENO: \$? = $ac_status" >&5 4751 echo "$as_me:$LINENO: \$? = $ac_status" >&5
4764 (exit $ac_status); } && 4752 (exit $ac_status); } &&
4765 { ac_try='test -z "$ac_c_werror_flag" 4753 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
4766 || test ! -s conftest.err'
4767 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 4754 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
4768 (eval $ac_try) 2>&5 4755 (eval $ac_try) 2>&5
4769 ac_status=$? 4756 ac_status=$?
@@ -4833,8 +4820,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
4833 cat conftest.err >&5 4820 cat conftest.err >&5
4834 echo "$as_me:$LINENO: \$? = $ac_status" >&5 4821 echo "$as_me:$LINENO: \$? = $ac_status" >&5
4835 (exit $ac_status); } && 4822 (exit $ac_status); } &&
4836 { ac_try='test -z "$ac_c_werror_flag" 4823 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
4837 || test ! -s conftest.err'
4838 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 4824 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
4839 (eval $ac_try) 2>&5 4825 (eval $ac_try) 2>&5
4840 ac_status=$? 4826 ac_status=$?
@@ -5004,8 +4990,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
5004 cat conftest.err >&5 4990 cat conftest.err >&5
5005 echo "$as_me:$LINENO: \$? = $ac_status" >&5 4991 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5006 (exit $ac_status); } && 4992 (exit $ac_status); } &&
5007 { ac_try='test -z "$ac_c_werror_flag" 4993 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5008 || test ! -s conftest.err'
5009 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 4994 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5010 (eval $ac_try) 2>&5 4995 (eval $ac_try) 2>&5
5011 ac_status=$? 4996 ac_status=$?
@@ -5074,8 +5059,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
5074 cat conftest.err >&5 5059 cat conftest.err >&5
5075 echo "$as_me:$LINENO: \$? = $ac_status" >&5 5060 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5076 (exit $ac_status); } && 5061 (exit $ac_status); } &&
5077 { ac_try='test -z "$ac_c_werror_flag" 5062 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5078 || test ! -s conftest.err'
5079 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 5063 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5080 (eval $ac_try) 2>&5 5064 (eval $ac_try) 2>&5
5081 ac_status=$? 5065 ac_status=$?
@@ -5229,8 +5213,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
5229 cat conftest.err >&5 5213 cat conftest.err >&5
5230 echo "$as_me:$LINENO: \$? = $ac_status" >&5 5214 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5231 (exit $ac_status); } && 5215 (exit $ac_status); } &&
5232 { ac_try='test -z "$ac_c_werror_flag" 5216 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5233 || test ! -s conftest.err'
5234 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 5217 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5235 (eval $ac_try) 2>&5 5218 (eval $ac_try) 2>&5
5236 ac_status=$? 5219 ac_status=$?
@@ -5323,8 +5306,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
5323 cat conftest.err >&5 5306 cat conftest.err >&5
5324 echo "$as_me:$LINENO: \$? = $ac_status" >&5 5307 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5325 (exit $ac_status); } && 5308 (exit $ac_status); } &&
5326 { ac_try='test -z "$ac_c_werror_flag" 5309 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5327 || test ! -s conftest.err'
5328 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 5310 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5329 (eval $ac_try) 2>&5 5311 (eval $ac_try) 2>&5
5330 ac_status=$? 5312 ac_status=$?
@@ -5466,8 +5448,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
5466 cat conftest.err >&5 5448 cat conftest.err >&5
5467 echo "$as_me:$LINENO: \$? = $ac_status" >&5 5449 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5468 (exit $ac_status); } && 5450 (exit $ac_status); } &&
5469 { ac_try='test -z "$ac_c_werror_flag" 5451 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5470 || test ! -s conftest.err'
5471 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 5452 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5472 (eval $ac_try) 2>&5 5453 (eval $ac_try) 2>&5
5473 ac_status=$? 5454 ac_status=$?
@@ -5586,8 +5567,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
5586 cat conftest.err >&5 5567 cat conftest.err >&5
5587 echo "$as_me:$LINENO: \$? = $ac_status" >&5 5568 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5588 (exit $ac_status); } && 5569 (exit $ac_status); } &&
5589 { ac_try='test -z "$ac_c_werror_flag" 5570 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5590 || test ! -s conftest.err'
5591 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 5571 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5592 (eval $ac_try) 2>&5 5572 (eval $ac_try) 2>&5
5593 ac_status=$? 5573 ac_status=$?
@@ -5752,8 +5732,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
5752 cat conftest.err >&5 5732 cat conftest.err >&5
5753 echo "$as_me:$LINENO: \$? = $ac_status" >&5 5733 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5754 (exit $ac_status); } && 5734 (exit $ac_status); } &&
5755 { ac_try='test -z "$ac_c_werror_flag" 5735 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5756 || test ! -s conftest.err'
5757 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 5736 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5758 (eval $ac_try) 2>&5 5737 (eval $ac_try) 2>&5
5759 ac_status=$? 5738 ac_status=$?
@@ -5816,8 +5795,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
5816 cat conftest.err >&5 5795 cat conftest.err >&5
5817 echo "$as_me:$LINENO: \$? = $ac_status" >&5 5796 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5818 (exit $ac_status); } && 5797 (exit $ac_status); } &&
5819 { ac_try='test -z "$ac_c_werror_flag" 5798 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5820 || test ! -s conftest.err'
5821 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 5799 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5822 (eval $ac_try) 2>&5 5800 (eval $ac_try) 2>&5
5823 ac_status=$? 5801 ac_status=$?
@@ -5890,8 +5868,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
5890 cat conftest.err >&5 5868 cat conftest.err >&5
5891 echo "$as_me:$LINENO: \$? = $ac_status" >&5 5869 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5892 (exit $ac_status); } && 5870 (exit $ac_status); } &&
5893 { ac_try='test -z "$ac_c_werror_flag" 5871 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5894 || test ! -s conftest.err'
5895 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 5872 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5896 (eval $ac_try) 2>&5 5873 (eval $ac_try) 2>&5
5897 ac_status=$? 5874 ac_status=$?
@@ -5977,8 +5954,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
5977 cat conftest.err >&5 5954 cat conftest.err >&5
5978 echo "$as_me:$LINENO: \$? = $ac_status" >&5 5955 echo "$as_me:$LINENO: \$? = $ac_status" >&5
5979 (exit $ac_status); } && 5956 (exit $ac_status); } &&
5980 { ac_try='test -z "$ac_c_werror_flag" 5957 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
5981 || test ! -s conftest.err'
5982 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 5958 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
5983 (eval $ac_try) 2>&5 5959 (eval $ac_try) 2>&5
5984 ac_status=$? 5960 ac_status=$?
@@ -6051,8 +6027,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6051 cat conftest.err >&5 6027 cat conftest.err >&5
6052 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6028 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6053 (exit $ac_status); } && 6029 (exit $ac_status); } &&
6054 { ac_try='test -z "$ac_c_werror_flag" 6030 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6055 || test ! -s conftest.err'
6056 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6031 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6057 (eval $ac_try) 2>&5 6032 (eval $ac_try) 2>&5
6058 ac_status=$? 6033 ac_status=$?
@@ -6122,8 +6097,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6122 cat conftest.err >&5 6097 cat conftest.err >&5
6123 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6098 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6124 (exit $ac_status); } && 6099 (exit $ac_status); } &&
6125 { ac_try='test -z "$ac_c_werror_flag" 6100 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6126 || test ! -s conftest.err'
6127 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6101 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6128 (eval $ac_try) 2>&5 6102 (eval $ac_try) 2>&5
6129 ac_status=$? 6103 ac_status=$?
@@ -6182,8 +6156,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6182 cat conftest.err >&5 6156 cat conftest.err >&5
6183 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6157 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6184 (exit $ac_status); } && 6158 (exit $ac_status); } &&
6185 { ac_try='test -z "$ac_c_werror_flag" 6159 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6186 || test ! -s conftest.err'
6187 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6160 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6188 (eval $ac_try) 2>&5 6161 (eval $ac_try) 2>&5
6189 ac_status=$? 6162 ac_status=$?
@@ -6252,8 +6225,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6252 cat conftest.err >&5 6225 cat conftest.err >&5
6253 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6226 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6254 (exit $ac_status); } && 6227 (exit $ac_status); } &&
6255 { ac_try='test -z "$ac_c_werror_flag" 6228 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6256 || test ! -s conftest.err'
6257 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6229 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6258 (eval $ac_try) 2>&5 6230 (eval $ac_try) 2>&5
6259 ac_status=$? 6231 ac_status=$?
@@ -6314,8 +6286,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6314 cat conftest.err >&5 6286 cat conftest.err >&5
6315 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6287 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6316 (exit $ac_status); } && 6288 (exit $ac_status); } &&
6317 { ac_try='test -z "$ac_c_werror_flag" 6289 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6318 || test ! -s conftest.err'
6319 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6290 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6320 (eval $ac_try) 2>&5 6291 (eval $ac_try) 2>&5
6321 ac_status=$? 6292 ac_status=$?
@@ -6381,8 +6352,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6381 cat conftest.err >&5 6352 cat conftest.err >&5
6382 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6353 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6383 (exit $ac_status); } && 6354 (exit $ac_status); } &&
6384 { ac_try='test -z "$ac_c_werror_flag" 6355 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6385 || test ! -s conftest.err'
6386 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6356 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6387 (eval $ac_try) 2>&5 6357 (eval $ac_try) 2>&5
6388 ac_status=$? 6358 ac_status=$?
@@ -6528,8 +6498,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6528 cat conftest.err >&5 6498 cat conftest.err >&5
6529 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6499 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6530 (exit $ac_status); } && 6500 (exit $ac_status); } &&
6531 { ac_try='test -z "$ac_c_werror_flag" 6501 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6532 || test ! -s conftest.err'
6533 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6502 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6534 (eval $ac_try) 2>&5 6503 (eval $ac_try) 2>&5
6535 ac_status=$? 6504 ac_status=$?
@@ -6593,8 +6562,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6593 cat conftest.err >&5 6562 cat conftest.err >&5
6594 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6563 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6595 (exit $ac_status); } && 6564 (exit $ac_status); } &&
6596 { ac_try='test -z "$ac_c_werror_flag" 6565 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6597 || test ! -s conftest.err'
6598 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6566 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6599 (eval $ac_try) 2>&5 6567 (eval $ac_try) 2>&5
6600 ac_status=$? 6568 ac_status=$?
@@ -6659,8 +6627,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6659 cat conftest.err >&5 6627 cat conftest.err >&5
6660 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6628 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6661 (exit $ac_status); } && 6629 (exit $ac_status); } &&
6662 { ac_try='test -z "$ac_c_werror_flag" 6630 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6663 || test ! -s conftest.err'
6664 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6631 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6665 (eval $ac_try) 2>&5 6632 (eval $ac_try) 2>&5
6666 ac_status=$? 6633 ac_status=$?
@@ -6706,8 +6673,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6706 cat conftest.err >&5 6673 cat conftest.err >&5
6707 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6674 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6708 (exit $ac_status); } && 6675 (exit $ac_status); } &&
6709 { ac_try='test -z "$ac_c_werror_flag" 6676 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6710 || test ! -s conftest.err'
6711 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6677 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6712 (eval $ac_try) 2>&5 6678 (eval $ac_try) 2>&5
6713 ac_status=$? 6679 ac_status=$?
@@ -6781,8 +6747,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
6781 cat conftest.err >&5 6747 cat conftest.err >&5
6782 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6748 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6783 (exit $ac_status); } && 6749 (exit $ac_status); } &&
6784 { ac_try='test -z "$ac_c_werror_flag" 6750 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6785 || test ! -s conftest.err'
6786 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6751 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6787 (eval $ac_try) 2>&5 6752 (eval $ac_try) 2>&5
6788 ac_status=$? 6753 ac_status=$?
@@ -6847,8 +6812,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6847 cat conftest.err >&5 6812 cat conftest.err >&5
6848 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6813 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6849 (exit $ac_status); } && 6814 (exit $ac_status); } &&
6850 { ac_try='test -z "$ac_c_werror_flag" 6815 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6851 || test ! -s conftest.err'
6852 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6816 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6853 (eval $ac_try) 2>&5 6817 (eval $ac_try) 2>&5
6854 ac_status=$? 6818 ac_status=$?
@@ -6892,8 +6856,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6892 cat conftest.err >&5 6856 cat conftest.err >&5
6893 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6857 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6894 (exit $ac_status); } && 6858 (exit $ac_status); } &&
6895 { ac_try='test -z "$ac_c_werror_flag" 6859 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6896 || test ! -s conftest.err'
6897 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6860 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6898 (eval $ac_try) 2>&5 6861 (eval $ac_try) 2>&5
6899 ac_status=$? 6862 ac_status=$?
@@ -6964,8 +6927,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
6964 cat conftest.err >&5 6927 cat conftest.err >&5
6965 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6928 echo "$as_me:$LINENO: \$? = $ac_status" >&5
6966 (exit $ac_status); } && 6929 (exit $ac_status); } &&
6967 { ac_try='test -z "$ac_c_werror_flag" 6930 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
6968 || test ! -s conftest.err'
6969 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6931 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
6970 (eval $ac_try) 2>&5 6932 (eval $ac_try) 2>&5
6971 ac_status=$? 6933 ac_status=$?
@@ -7015,8 +6977,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7015 cat conftest.err >&5 6977 cat conftest.err >&5
7016 echo "$as_me:$LINENO: \$? = $ac_status" >&5 6978 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7017 (exit $ac_status); } && 6979 (exit $ac_status); } &&
7018 { ac_try='test -z "$ac_c_werror_flag" 6980 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7019 || test ! -s conftest.err'
7020 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 6981 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7021 (eval $ac_try) 2>&5 6982 (eval $ac_try) 2>&5
7022 ac_status=$? 6983 ac_status=$?
@@ -7087,8 +7048,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7087 cat conftest.err >&5 7048 cat conftest.err >&5
7088 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7049 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7089 (exit $ac_status); } && 7050 (exit $ac_status); } &&
7090 { ac_try='test -z "$ac_c_werror_flag" 7051 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7091 || test ! -s conftest.err'
7092 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7052 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7093 (eval $ac_try) 2>&5 7053 (eval $ac_try) 2>&5
7094 ac_status=$? 7054 ac_status=$?
@@ -7138,8 +7098,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7138 cat conftest.err >&5 7098 cat conftest.err >&5
7139 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7099 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7140 (exit $ac_status); } && 7100 (exit $ac_status); } &&
7141 { ac_try='test -z "$ac_c_werror_flag" 7101 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7142 || test ! -s conftest.err'
7143 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7102 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7144 (eval $ac_try) 2>&5 7103 (eval $ac_try) 2>&5
7145 ac_status=$? 7104 ac_status=$?
@@ -7210,8 +7169,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7210 cat conftest.err >&5 7169 cat conftest.err >&5
7211 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7170 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7212 (exit $ac_status); } && 7171 (exit $ac_status); } &&
7213 { ac_try='test -z "$ac_c_werror_flag" 7172 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7214 || test ! -s conftest.err'
7215 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7173 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7216 (eval $ac_try) 2>&5 7174 (eval $ac_try) 2>&5
7217 ac_status=$? 7175 ac_status=$?
@@ -7261,8 +7219,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7261 cat conftest.err >&5 7219 cat conftest.err >&5
7262 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7220 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7263 (exit $ac_status); } && 7221 (exit $ac_status); } &&
7264 { ac_try='test -z "$ac_c_werror_flag" 7222 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7265 || test ! -s conftest.err'
7266 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7223 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7267 (eval $ac_try) 2>&5 7224 (eval $ac_try) 2>&5
7268 ac_status=$? 7225 ac_status=$?
@@ -7333,8 +7290,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7333 cat conftest.err >&5 7290 cat conftest.err >&5
7334 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7291 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7335 (exit $ac_status); } && 7292 (exit $ac_status); } &&
7336 { ac_try='test -z "$ac_c_werror_flag" 7293 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7337 || test ! -s conftest.err'
7338 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7294 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7339 (eval $ac_try) 2>&5 7295 (eval $ac_try) 2>&5
7340 ac_status=$? 7296 ac_status=$?
@@ -7384,8 +7340,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7384 cat conftest.err >&5 7340 cat conftest.err >&5
7385 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7341 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7386 (exit $ac_status); } && 7342 (exit $ac_status); } &&
7387 { ac_try='test -z "$ac_c_werror_flag" 7343 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7388 || test ! -s conftest.err'
7389 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7344 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7390 (eval $ac_try) 2>&5 7345 (eval $ac_try) 2>&5
7391 ac_status=$? 7346 ac_status=$?
@@ -7456,8 +7411,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7456 cat conftest.err >&5 7411 cat conftest.err >&5
7457 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7412 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7458 (exit $ac_status); } && 7413 (exit $ac_status); } &&
7459 { ac_try='test -z "$ac_c_werror_flag" 7414 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7460 || test ! -s conftest.err'
7461 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7415 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7462 (eval $ac_try) 2>&5 7416 (eval $ac_try) 2>&5
7463 ac_status=$? 7417 ac_status=$?
@@ -7507,8 +7461,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7507 cat conftest.err >&5 7461 cat conftest.err >&5
7508 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7462 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7509 (exit $ac_status); } && 7463 (exit $ac_status); } &&
7510 { ac_try='test -z "$ac_c_werror_flag" 7464 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7511 || test ! -s conftest.err'
7512 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7465 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7513 (eval $ac_try) 2>&5 7466 (eval $ac_try) 2>&5
7514 ac_status=$? 7467 ac_status=$?
@@ -7595,8 +7548,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7595 cat conftest.err >&5 7548 cat conftest.err >&5
7596 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7549 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7597 (exit $ac_status); } && 7550 (exit $ac_status); } &&
7598 { ac_try='test -z "$ac_c_werror_flag" 7551 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7599 || test ! -s conftest.err'
7600 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7552 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7601 (eval $ac_try) 2>&5 7553 (eval $ac_try) 2>&5
7602 ac_status=$? 7554 ac_status=$?
@@ -7702,8 +7654,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7702 cat conftest.err >&5 7654 cat conftest.err >&5
7703 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7655 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7704 (exit $ac_status); } && 7656 (exit $ac_status); } &&
7705 { ac_try='test -z "$ac_c_werror_flag" 7657 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7706 || test ! -s conftest.err'
7707 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7658 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7708 (eval $ac_try) 2>&5 7659 (eval $ac_try) 2>&5
7709 ac_status=$? 7660 ac_status=$?
@@ -7763,8 +7714,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
7763 cat conftest.err >&5 7714 cat conftest.err >&5
7764 echo "$as_me:$LINENO: \$? = $ac_status" >&5 7715 echo "$as_me:$LINENO: \$? = $ac_status" >&5
7765 (exit $ac_status); } && 7716 (exit $ac_status); } &&
7766 { ac_try='test -z "$ac_c_werror_flag" 7717 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
7767 || test ! -s conftest.err'
7768 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 7718 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
7769 (eval $ac_try) 2>&5 7719 (eval $ac_try) 2>&5
7770 ac_status=$? 7720 ac_status=$?
@@ -7888,6 +7838,7 @@ fi
7888echo "$as_me:$LINENO: checking for X" >&5 7838echo "$as_me:$LINENO: checking for X" >&5
7889echo $ECHO_N "checking for X... $ECHO_C" >&6 7839echo $ECHO_N "checking for X... $ECHO_C" >&6
7890 7840
7841ac_path_x_has_been_run=yes
7891 7842
7892# Check whether --with-x or --without-x was given. 7843# Check whether --with-x or --without-x was given.
7893if test "${with_x+set}" = set; then 7844if test "${with_x+set}" = set; then
@@ -7980,7 +7931,7 @@ ac_x_header_dirs='
7980/usr/openwin/share/include' 7931/usr/openwin/share/include'
7981 7932
7982if test "$ac_x_includes" = no; then 7933if test "$ac_x_includes" = no; then
7983 # Guess where to find include files, by looking for Intrinsic.h. 7934 # Guess where to find include files, by looking for a specified header file.
7984 # First, try using that file with no special directory specified. 7935 # First, try using that file with no special directory specified.
7985 cat >conftest.$ac_ext <<_ACEOF 7936 cat >conftest.$ac_ext <<_ACEOF
7986/* confdefs.h. */ 7937/* confdefs.h. */
@@ -8054,8 +8005,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
8054 cat conftest.err >&5 8005 cat conftest.err >&5
8055 echo "$as_me:$LINENO: \$? = $ac_status" >&5 8006 echo "$as_me:$LINENO: \$? = $ac_status" >&5
8056 (exit $ac_status); } && 8007 (exit $ac_status); } &&
8057 { ac_try='test -z "$ac_c_werror_flag" 8008 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
8058 || test ! -s conftest.err'
8059 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 8009 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
8060 (eval $ac_try) 2>&5 8010 (eval $ac_try) 2>&5
8061 ac_status=$? 8011 ac_status=$?
@@ -8115,8 +8065,12 @@ else
8115 # Update the cache value to reflect the command line values. 8065 # Update the cache value to reflect the command line values.
8116 ac_cv_have_x="have_x=yes \ 8066 ac_cv_have_x="have_x=yes \
8117 ac_x_includes=$x_includes ac_x_libraries=$x_libraries" 8067 ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
8118 echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5 8068 # It might be that x_includes is empty (headers are found in the
8119echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 8069 # standard search path. Then output the corresponding message
8070 ac_out_x_includes=$x_includes
8071 test "x$x_includes" = x && ac_out_x_includes="in standard search path"
8072 echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5
8073echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6
8120fi 8074fi
8121 8075
8122if test "$no_x" = yes; then 8076if test "$no_x" = yes; then
@@ -8280,8 +8234,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
8280 cat conftest.err >&5 8234 cat conftest.err >&5
8281 echo "$as_me:$LINENO: \$? = $ac_status" >&5 8235 echo "$as_me:$LINENO: \$? = $ac_status" >&5
8282 (exit $ac_status); } && 8236 (exit $ac_status); } &&
8283 { ac_try='test -z "$ac_c_werror_flag" 8237 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
8284 || test ! -s conftest.err'
8285 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 8238 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
8286 (eval $ac_try) 2>&5 8239 (eval $ac_try) 2>&5
8287 ac_status=$? 8240 ac_status=$?
@@ -8376,8 +8329,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
8376 cat conftest.err >&5 8329 cat conftest.err >&5
8377 echo "$as_me:$LINENO: \$? = $ac_status" >&5 8330 echo "$as_me:$LINENO: \$? = $ac_status" >&5
8378 (exit $ac_status); } && 8331 (exit $ac_status); } &&
8379 { ac_try='test -z "$ac_c_werror_flag" 8332 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
8380 || test ! -s conftest.err'
8381 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 8333 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
8382 (eval $ac_try) 2>&5 8334 (eval $ac_try) 2>&5
8383 ac_status=$? 8335 ac_status=$?
@@ -8436,8 +8388,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
8436 cat conftest.err >&5 8388 cat conftest.err >&5
8437 echo "$as_me:$LINENO: \$? = $ac_status" >&5 8389 echo "$as_me:$LINENO: \$? = $ac_status" >&5
8438 (exit $ac_status); } && 8390 (exit $ac_status); } &&
8439 { ac_try='test -z "$ac_c_werror_flag" 8391 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
8440 || test ! -s conftest.err'
8441 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 8392 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
8442 (eval $ac_try) 2>&5 8393 (eval $ac_try) 2>&5
8443 ac_status=$? 8394 ac_status=$?
@@ -8521,8 +8472,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
8521 cat conftest.err >&5 8472 cat conftest.err >&5
8522 echo "$as_me:$LINENO: \$? = $ac_status" >&5 8473 echo "$as_me:$LINENO: \$? = $ac_status" >&5
8523 (exit $ac_status); } && 8474 (exit $ac_status); } &&
8524 { ac_try='test -z "$ac_c_werror_flag" 8475 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
8525 || test ! -s conftest.err'
8526 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 8476 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
8527 (eval $ac_try) 2>&5 8477 (eval $ac_try) 2>&5
8528 ac_status=$? 8478 ac_status=$?
@@ -8706,8 +8656,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
8706 cat conftest.err >&5 8656 cat conftest.err >&5
8707 echo "$as_me:$LINENO: \$? = $ac_status" >&5 8657 echo "$as_me:$LINENO: \$? = $ac_status" >&5
8708 (exit $ac_status); } && 8658 (exit $ac_status); } &&
8709 { ac_try='test -z "$ac_c_werror_flag" 8659 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
8710 || test ! -s conftest.err'
8711 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 8660 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
8712 (eval $ac_try) 2>&5 8661 (eval $ac_try) 2>&5
8713 ac_status=$? 8662 ac_status=$?
@@ -8959,8 +8908,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
8959 cat conftest.err >&5 8908 cat conftest.err >&5
8960 echo "$as_me:$LINENO: \$? = $ac_status" >&5 8909 echo "$as_me:$LINENO: \$? = $ac_status" >&5
8961 (exit $ac_status); } && 8910 (exit $ac_status); } &&
8962 { ac_try='test -z "$ac_c_werror_flag" 8911 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
8963 || test ! -s conftest.err'
8964 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 8912 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
8965 (eval $ac_try) 2>&5 8913 (eval $ac_try) 2>&5
8966 ac_status=$? 8914 ac_status=$?
@@ -9027,8 +8975,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9027 cat conftest.err >&5 8975 cat conftest.err >&5
9028 echo "$as_me:$LINENO: \$? = $ac_status" >&5 8976 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9029 (exit $ac_status); } && 8977 (exit $ac_status); } &&
9030 { ac_try='test -z "$ac_c_werror_flag" 8978 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9031 || test ! -s conftest.err'
9032 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 8979 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9033 (eval $ac_try) 2>&5 8980 (eval $ac_try) 2>&5
9034 ac_status=$? 8981 ac_status=$?
@@ -9097,8 +9044,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9097 cat conftest.err >&5 9044 cat conftest.err >&5
9098 echo "$as_me:$LINENO: \$? = $ac_status" >&5 9045 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9099 (exit $ac_status); } && 9046 (exit $ac_status); } &&
9100 { ac_try='test -z "$ac_c_werror_flag" 9047 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9101 || test ! -s conftest.err'
9102 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 9048 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9103 (eval $ac_try) 2>&5 9049 (eval $ac_try) 2>&5
9104 ac_status=$? 9050 ac_status=$?
@@ -9183,8 +9129,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9183 cat conftest.err >&5 9129 cat conftest.err >&5
9184 echo "$as_me:$LINENO: \$? = $ac_status" >&5 9130 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9185 (exit $ac_status); } && 9131 (exit $ac_status); } &&
9186 { ac_try='test -z "$ac_c_werror_flag" 9132 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9187 || test ! -s conftest.err'
9188 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 9133 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9189 (eval $ac_try) 2>&5 9134 (eval $ac_try) 2>&5
9190 ac_status=$? 9135 ac_status=$?
@@ -9261,8 +9206,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9261 cat conftest.err >&5 9206 cat conftest.err >&5
9262 echo "$as_me:$LINENO: \$? = $ac_status" >&5 9207 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9263 (exit $ac_status); } && 9208 (exit $ac_status); } &&
9264 { ac_try='test -z "$ac_c_werror_flag" 9209 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9265 || test ! -s conftest.err'
9266 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 9210 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9267 (eval $ac_try) 2>&5 9211 (eval $ac_try) 2>&5
9268 ac_status=$? 9212 ac_status=$?
@@ -9316,8 +9260,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9316 cat conftest.err >&5 9260 cat conftest.err >&5
9317 echo "$as_me:$LINENO: \$? = $ac_status" >&5 9261 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9318 (exit $ac_status); } && 9262 (exit $ac_status); } &&
9319 { ac_try='test -z "$ac_c_werror_flag" 9263 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9320 || test ! -s conftest.err'
9321 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 9264 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9322 (eval $ac_try) 2>&5 9265 (eval $ac_try) 2>&5
9323 ac_status=$? 9266 ac_status=$?
@@ -9386,8 +9329,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9386 cat conftest.err >&5 9329 cat conftest.err >&5
9387 echo "$as_me:$LINENO: \$? = $ac_status" >&5 9330 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9388 (exit $ac_status); } && 9331 (exit $ac_status); } &&
9389 { ac_try='test -z "$ac_c_werror_flag" 9332 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9390 || test ! -s conftest.err'
9391 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 9333 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9392 (eval $ac_try) 2>&5 9334 (eval $ac_try) 2>&5
9393 ac_status=$? 9335 ac_status=$?
@@ -9491,8 +9433,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9491 cat conftest.err >&5 9433 cat conftest.err >&5
9492 echo "$as_me:$LINENO: \$? = $ac_status" >&5 9434 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9493 (exit $ac_status); } && 9435 (exit $ac_status); } &&
9494 { ac_try='test -z "$ac_c_werror_flag" 9436 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9495 || test ! -s conftest.err'
9496 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 9437 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9497 (eval $ac_try) 2>&5 9438 (eval $ac_try) 2>&5
9498 ac_status=$? 9439 ac_status=$?
@@ -9559,8 +9500,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9559 cat conftest.err >&5 9500 cat conftest.err >&5
9560 echo "$as_me:$LINENO: \$? = $ac_status" >&5 9501 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9561 (exit $ac_status); } && 9502 (exit $ac_status); } &&
9562 { ac_try='test -z "$ac_c_werror_flag" 9503 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9563 || test ! -s conftest.err'
9564 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 9504 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9565 (eval $ac_try) 2>&5 9505 (eval $ac_try) 2>&5
9566 ac_status=$? 9506 ac_status=$?
@@ -9630,8 +9570,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9630 cat conftest.err >&5 9570 cat conftest.err >&5
9631 echo "$as_me:$LINENO: \$? = $ac_status" >&5 9571 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9632 (exit $ac_status); } && 9572 (exit $ac_status); } &&
9633 { ac_try='test -z "$ac_c_werror_flag" 9573 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9634 || test ! -s conftest.err'
9635 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 9574 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9636 (eval $ac_try) 2>&5 9575 (eval $ac_try) 2>&5
9637 ac_status=$? 9576 ac_status=$?
@@ -9871,8 +9810,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
9871 cat conftest.err >&5 9810 cat conftest.err >&5
9872 echo "$as_me:$LINENO: \$? = $ac_status" >&5 9811 echo "$as_me:$LINENO: \$? = $ac_status" >&5
9873 (exit $ac_status); } && 9812 (exit $ac_status); } &&
9874 { ac_try='test -z "$ac_c_werror_flag" 9813 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
9875 || test ! -s conftest.err'
9876 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 9814 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
9877 (eval $ac_try) 2>&5 9815 (eval $ac_try) 2>&5
9878 ac_status=$? 9816 ac_status=$?
@@ -10394,8 +10332,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
10394 cat conftest.err >&5 10332 cat conftest.err >&5
10395 echo "$as_me:$LINENO: \$? = $ac_status" >&5 10333 echo "$as_me:$LINENO: \$? = $ac_status" >&5
10396 (exit $ac_status); } && 10334 (exit $ac_status); } &&
10397 { ac_try='test -z "$ac_c_werror_flag" 10335 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
10398 || test ! -s conftest.err'
10399 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 10336 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
10400 (eval $ac_try) 2>&5 10337 (eval $ac_try) 2>&5
10401 ac_status=$? 10338 ac_status=$?
@@ -10467,8 +10404,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
10467 cat conftest.err >&5 10404 cat conftest.err >&5
10468 echo "$as_me:$LINENO: \$? = $ac_status" >&5 10405 echo "$as_me:$LINENO: \$? = $ac_status" >&5
10469 (exit $ac_status); } && 10406 (exit $ac_status); } &&
10470 { ac_try='test -z "$ac_c_werror_flag" 10407 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
10471 || test ! -s conftest.err'
10472 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 10408 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
10473 (eval $ac_try) 2>&5 10409 (eval $ac_try) 2>&5
10474 ac_status=$? 10410 ac_status=$?
@@ -10550,8 +10486,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
10550 cat conftest.err >&5 10486 cat conftest.err >&5
10551 echo "$as_me:$LINENO: \$? = $ac_status" >&5 10487 echo "$as_me:$LINENO: \$? = $ac_status" >&5
10552 (exit $ac_status); } && 10488 (exit $ac_status); } &&
10553 { ac_try='test -z "$ac_c_werror_flag" 10489 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
10554 || test ! -s conftest.err'
10555 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 10490 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
10556 (eval $ac_try) 2>&5 10491 (eval $ac_try) 2>&5
10557 ac_status=$? 10492 ac_status=$?
@@ -10630,8 +10565,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
10630 cat conftest.err >&5 10565 cat conftest.err >&5
10631 echo "$as_me:$LINENO: \$? = $ac_status" >&5 10566 echo "$as_me:$LINENO: \$? = $ac_status" >&5
10632 (exit $ac_status); } && 10567 (exit $ac_status); } &&
10633 { ac_try='test -z "$ac_c_werror_flag" 10568 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
10634 || test ! -s conftest.err'
10635 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 10569 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
10636 (eval $ac_try) 2>&5 10570 (eval $ac_try) 2>&5
10637 ac_status=$? 10571 ac_status=$?
@@ -10705,8 +10639,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
10705 cat conftest.err >&5 10639 cat conftest.err >&5
10706 echo "$as_me:$LINENO: \$? = $ac_status" >&5 10640 echo "$as_me:$LINENO: \$? = $ac_status" >&5
10707 (exit $ac_status); } && 10641 (exit $ac_status); } &&
10708 { ac_try='test -z "$ac_c_werror_flag" 10642 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
10709 || test ! -s conftest.err'
10710 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 10643 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
10711 (eval $ac_try) 2>&5 10644 (eval $ac_try) 2>&5
10712 ac_status=$? 10645 ac_status=$?
@@ -10774,8 +10707,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
10774 cat conftest.err >&5 10707 cat conftest.err >&5
10775 echo "$as_me:$LINENO: \$? = $ac_status" >&5 10708 echo "$as_me:$LINENO: \$? = $ac_status" >&5
10776 (exit $ac_status); } && 10709 (exit $ac_status); } &&
10777 { ac_try='test -z "$ac_c_werror_flag" 10710 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
10778 || test ! -s conftest.err'
10779 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 10711 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
10780 (eval $ac_try) 2>&5 10712 (eval $ac_try) 2>&5
10781 ac_status=$? 10713 ac_status=$?
@@ -10844,8 +10776,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
10844 cat conftest.err >&5 10776 cat conftest.err >&5
10845 echo "$as_me:$LINENO: \$? = $ac_status" >&5 10777 echo "$as_me:$LINENO: \$? = $ac_status" >&5
10846 (exit $ac_status); } && 10778 (exit $ac_status); } &&
10847 { ac_try='test -z "$ac_c_werror_flag" 10779 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
10848 || test ! -s conftest.err'
10849 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 10780 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
10850 (eval $ac_try) 2>&5 10781 (eval $ac_try) 2>&5
10851 ac_status=$? 10782 ac_status=$?
@@ -10969,8 +10900,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
10969 cat conftest.err >&5 10900 cat conftest.err >&5
10970 echo "$as_me:$LINENO: \$? = $ac_status" >&5 10901 echo "$as_me:$LINENO: \$? = $ac_status" >&5
10971 (exit $ac_status); } && 10902 (exit $ac_status); } &&
10972 { ac_try='test -z "$ac_c_werror_flag" 10903 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
10973 || test ! -s conftest.err'
10974 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 10904 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
10975 (eval $ac_try) 2>&5 10905 (eval $ac_try) 2>&5
10976 ac_status=$? 10906 ac_status=$?
@@ -11066,8 +10996,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
11066 cat conftest.err >&5 10996 cat conftest.err >&5
11067 echo "$as_me:$LINENO: \$? = $ac_status" >&5 10997 echo "$as_me:$LINENO: \$? = $ac_status" >&5
11068 (exit $ac_status); } && 10998 (exit $ac_status); } &&
11069 { ac_try='test -z "$ac_c_werror_flag" 10999 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
11070 || test ! -s conftest.err'
11071 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 11000 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
11072 (eval $ac_try) 2>&5 11001 (eval $ac_try) 2>&5
11073 ac_status=$? 11002 ac_status=$?
@@ -11147,8 +11076,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
11147 cat conftest.err >&5 11076 cat conftest.err >&5
11148 echo "$as_me:$LINENO: \$? = $ac_status" >&5 11077 echo "$as_me:$LINENO: \$? = $ac_status" >&5
11149 (exit $ac_status); } && 11078 (exit $ac_status); } &&
11150 { ac_try='test -z "$ac_c_werror_flag" 11079 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
11151 || test ! -s conftest.err'
11152 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 11080 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
11153 (eval $ac_try) 2>&5 11081 (eval $ac_try) 2>&5
11154 ac_status=$? 11082 ac_status=$?
@@ -11216,8 +11144,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
11216 cat conftest.err >&5 11144 cat conftest.err >&5
11217 echo "$as_me:$LINENO: \$? = $ac_status" >&5 11145 echo "$as_me:$LINENO: \$? = $ac_status" >&5
11218 (exit $ac_status); } && 11146 (exit $ac_status); } &&
11219 { ac_try='test -z "$ac_c_werror_flag" 11147 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
11220 || test ! -s conftest.err'
11221 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 11148 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
11222 (eval $ac_try) 2>&5 11149 (eval $ac_try) 2>&5
11223 ac_status=$? 11150 ac_status=$?
@@ -11362,8 +11289,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
11362 cat conftest.err >&5 11289 cat conftest.err >&5
11363 echo "$as_me:$LINENO: \$? = $ac_status" >&5 11290 echo "$as_me:$LINENO: \$? = $ac_status" >&5
11364 (exit $ac_status); } && 11291 (exit $ac_status); } &&
11365 { ac_try='test -z "$ac_c_werror_flag" 11292 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
11366 || test ! -s conftest.err'
11367 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 11293 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
11368 (eval $ac_try) 2>&5 11294 (eval $ac_try) 2>&5
11369 ac_status=$? 11295 ac_status=$?
@@ -11472,8 +11398,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
11472 cat conftest.err >&5 11398 cat conftest.err >&5
11473 echo "$as_me:$LINENO: \$? = $ac_status" >&5 11399 echo "$as_me:$LINENO: \$? = $ac_status" >&5
11474 (exit $ac_status); } && 11400 (exit $ac_status); } &&
11475 { ac_try='test -z "$ac_c_werror_flag" 11401 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
11476 || test ! -s conftest.err'
11477 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 11402 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
11478 (eval $ac_try) 2>&5 11403 (eval $ac_try) 2>&5
11479 ac_status=$? 11404 ac_status=$?
@@ -11618,8 +11543,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
11618 cat conftest.err >&5 11543 cat conftest.err >&5
11619 echo "$as_me:$LINENO: \$? = $ac_status" >&5 11544 echo "$as_me:$LINENO: \$? = $ac_status" >&5
11620 (exit $ac_status); } && 11545 (exit $ac_status); } &&
11621 { ac_try='test -z "$ac_c_werror_flag" 11546 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
11622 || test ! -s conftest.err'
11623 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 11547 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
11624 (eval $ac_try) 2>&5 11548 (eval $ac_try) 2>&5
11625 ac_status=$? 11549 ac_status=$?
@@ -11726,8 +11650,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
11726 cat conftest.err >&5 11650 cat conftest.err >&5
11727 echo "$as_me:$LINENO: \$? = $ac_status" >&5 11651 echo "$as_me:$LINENO: \$? = $ac_status" >&5
11728 (exit $ac_status); } && 11652 (exit $ac_status); } &&
11729 { ac_try='test -z "$ac_c_werror_flag" 11653 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
11730 || test ! -s conftest.err'
11731 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 11654 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
11732 (eval $ac_try) 2>&5 11655 (eval $ac_try) 2>&5
11733 ac_status=$? 11656 ac_status=$?
@@ -11881,8 +11804,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
11881 cat conftest.err >&5 11804 cat conftest.err >&5
11882 echo "$as_me:$LINENO: \$? = $ac_status" >&5 11805 echo "$as_me:$LINENO: \$? = $ac_status" >&5
11883 (exit $ac_status); } && 11806 (exit $ac_status); } &&
11884 { ac_try='test -z "$ac_c_werror_flag" 11807 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
11885 || test ! -s conftest.err'
11886 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 11808 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
11887 (eval $ac_try) 2>&5 11809 (eval $ac_try) 2>&5
11888 ac_status=$? 11810 ac_status=$?
@@ -11957,8 +11879,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
11957 cat conftest.err >&5 11879 cat conftest.err >&5
11958 echo "$as_me:$LINENO: \$? = $ac_status" >&5 11880 echo "$as_me:$LINENO: \$? = $ac_status" >&5
11959 (exit $ac_status); } && 11881 (exit $ac_status); } &&
11960 { ac_try='test -z "$ac_c_werror_flag" 11882 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
11961 || test ! -s conftest.err'
11962 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 11883 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
11963 (eval $ac_try) 2>&5 11884 (eval $ac_try) 2>&5
11964 ac_status=$? 11885 ac_status=$?
@@ -12106,8 +12027,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
12106 cat conftest.err >&5 12027 cat conftest.err >&5
12107 echo "$as_me:$LINENO: \$? = $ac_status" >&5 12028 echo "$as_me:$LINENO: \$? = $ac_status" >&5
12108 (exit $ac_status); } && 12029 (exit $ac_status); } &&
12109 { ac_try='test -z "$ac_c_werror_flag" 12030 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
12110 || test ! -s conftest.err'
12111 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 12031 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
12112 (eval $ac_try) 2>&5 12032 (eval $ac_try) 2>&5
12113 ac_status=$? 12033 ac_status=$?
@@ -12184,8 +12104,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
12184 cat conftest.err >&5 12104 cat conftest.err >&5
12185 echo "$as_me:$LINENO: \$? = $ac_status" >&5 12105 echo "$as_me:$LINENO: \$? = $ac_status" >&5
12186 (exit $ac_status); } && 12106 (exit $ac_status); } &&
12187 { ac_try='test -z "$ac_c_werror_flag" 12107 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
12188 || test ! -s conftest.err'
12189 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 12108 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
12190 (eval $ac_try) 2>&5 12109 (eval $ac_try) 2>&5
12191 ac_status=$? 12110 ac_status=$?
@@ -12332,8 +12251,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
12332 cat conftest.err >&5 12251 cat conftest.err >&5
12333 echo "$as_me:$LINENO: \$? = $ac_status" >&5 12252 echo "$as_me:$LINENO: \$? = $ac_status" >&5
12334 (exit $ac_status); } && 12253 (exit $ac_status); } &&
12335 { ac_try='test -z "$ac_c_werror_flag" 12254 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
12336 || test ! -s conftest.err'
12337 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 12255 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
12338 (eval $ac_try) 2>&5 12256 (eval $ac_try) 2>&5
12339 ac_status=$? 12257 ac_status=$?
@@ -12409,8 +12327,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
12409 cat conftest.err >&5 12327 cat conftest.err >&5
12410 echo "$as_me:$LINENO: \$? = $ac_status" >&5 12328 echo "$as_me:$LINENO: \$? = $ac_status" >&5
12411 (exit $ac_status); } && 12329 (exit $ac_status); } &&
12412 { ac_try='test -z "$ac_c_werror_flag" 12330 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
12413 || test ! -s conftest.err'
12414 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 12331 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
12415 (eval $ac_try) 2>&5 12332 (eval $ac_try) 2>&5
12416 ac_status=$? 12333 ac_status=$?
@@ -12553,8 +12470,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
12553 cat conftest.err >&5 12470 cat conftest.err >&5
12554 echo "$as_me:$LINENO: \$? = $ac_status" >&5 12471 echo "$as_me:$LINENO: \$? = $ac_status" >&5
12555 (exit $ac_status); } && 12472 (exit $ac_status); } &&
12556 { ac_try='test -z "$ac_c_werror_flag" 12473 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
12557 || test ! -s conftest.err'
12558 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 12474 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
12559 (eval $ac_try) 2>&5 12475 (eval $ac_try) 2>&5
12560 ac_status=$? 12476 ac_status=$?
@@ -12722,8 +12638,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
12722 cat conftest.err >&5 12638 cat conftest.err >&5
12723 echo "$as_me:$LINENO: \$? = $ac_status" >&5 12639 echo "$as_me:$LINENO: \$? = $ac_status" >&5
12724 (exit $ac_status); } && 12640 (exit $ac_status); } &&
12725 { ac_try='test -z "$ac_c_werror_flag" 12641 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
12726 || test ! -s conftest.err'
12727 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 12642 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
12728 (eval $ac_try) 2>&5 12643 (eval $ac_try) 2>&5
12729 ac_status=$? 12644 ac_status=$?
@@ -12868,8 +12783,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
12868 cat conftest.err >&5 12783 cat conftest.err >&5
12869 echo "$as_me:$LINENO: \$? = $ac_status" >&5 12784 echo "$as_me:$LINENO: \$? = $ac_status" >&5
12870 (exit $ac_status); } && 12785 (exit $ac_status); } &&
12871 { ac_try='test -z "$ac_c_werror_flag" 12786 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
12872 || test ! -s conftest.err'
12873 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 12787 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
12874 (eval $ac_try) 2>&5 12788 (eval $ac_try) 2>&5
12875 ac_status=$? 12789 ac_status=$?
@@ -12945,8 +12859,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
12945 cat conftest.err >&5 12859 cat conftest.err >&5
12946 echo "$as_me:$LINENO: \$? = $ac_status" >&5 12860 echo "$as_me:$LINENO: \$? = $ac_status" >&5
12947 (exit $ac_status); } && 12861 (exit $ac_status); } &&
12948 { ac_try='test -z "$ac_c_werror_flag" 12862 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
12949 || test ! -s conftest.err'
12950 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 12863 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
12951 (eval $ac_try) 2>&5 12864 (eval $ac_try) 2>&5
12952 ac_status=$? 12865 ac_status=$?
@@ -13009,8 +12922,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
13009 cat conftest.err >&5 12922 cat conftest.err >&5
13010 echo "$as_me:$LINENO: \$? = $ac_status" >&5 12923 echo "$as_me:$LINENO: \$? = $ac_status" >&5
13011 (exit $ac_status); } && 12924 (exit $ac_status); } &&
13012 { ac_try='test -z "$ac_c_werror_flag" 12925 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
13013 || test ! -s conftest.err'
13014 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 12926 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
13015 (eval $ac_try) 2>&5 12927 (eval $ac_try) 2>&5
13016 ac_status=$? 12928 ac_status=$?
@@ -13091,8 +13003,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
13091 cat conftest.err >&5 13003 cat conftest.err >&5
13092 echo "$as_me:$LINENO: \$? = $ac_status" >&5 13004 echo "$as_me:$LINENO: \$? = $ac_status" >&5
13093 (exit $ac_status); } && 13005 (exit $ac_status); } &&
13094 { ac_try='test -z "$ac_c_werror_flag" 13006 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
13095 || test ! -s conftest.err'
13096 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 13007 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
13097 (eval $ac_try) 2>&5 13008 (eval $ac_try) 2>&5
13098 ac_status=$? 13009 ac_status=$?
@@ -13233,8 +13144,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
13233 cat conftest.err >&5 13144 cat conftest.err >&5
13234 echo "$as_me:$LINENO: \$? = $ac_status" >&5 13145 echo "$as_me:$LINENO: \$? = $ac_status" >&5
13235 (exit $ac_status); } && 13146 (exit $ac_status); } &&
13236 { ac_try='test -z "$ac_c_werror_flag" 13147 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
13237 || test ! -s conftest.err'
13238 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 13148 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
13239 (eval $ac_try) 2>&5 13149 (eval $ac_try) 2>&5
13240 ac_status=$? 13150 ac_status=$?
@@ -13379,8 +13289,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
13379 cat conftest.err >&5 13289 cat conftest.err >&5
13380 echo "$as_me:$LINENO: \$? = $ac_status" >&5 13290 echo "$as_me:$LINENO: \$? = $ac_status" >&5
13381 (exit $ac_status); } && 13291 (exit $ac_status); } &&
13382 { ac_try='test -z "$ac_c_werror_flag" 13292 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
13383 || test ! -s conftest.err'
13384 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 13293 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
13385 (eval $ac_try) 2>&5 13294 (eval $ac_try) 2>&5
13386 ac_status=$? 13295 ac_status=$?
@@ -13456,8 +13365,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
13456 cat conftest.err >&5 13365 cat conftest.err >&5
13457 echo "$as_me:$LINENO: \$? = $ac_status" >&5 13366 echo "$as_me:$LINENO: \$? = $ac_status" >&5
13458 (exit $ac_status); } && 13367 (exit $ac_status); } &&
13459 { ac_try='test -z "$ac_c_werror_flag" 13368 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
13460 || test ! -s conftest.err'
13461 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 13369 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
13462 (eval $ac_try) 2>&5 13370 (eval $ac_try) 2>&5
13463 ac_status=$? 13371 ac_status=$?
@@ -13530,8 +13438,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
13530 cat conftest.err >&5 13438 cat conftest.err >&5
13531 echo "$as_me:$LINENO: \$? = $ac_status" >&5 13439 echo "$as_me:$LINENO: \$? = $ac_status" >&5
13532 (exit $ac_status); } && 13440 (exit $ac_status); } &&
13533 { ac_try='test -z "$ac_c_werror_flag" 13441 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
13534 || test ! -s conftest.err'
13535 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 13442 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
13536 (eval $ac_try) 2>&5 13443 (eval $ac_try) 2>&5
13537 ac_status=$? 13444 ac_status=$?
@@ -13686,8 +13593,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
13686 cat conftest.err >&5 13593 cat conftest.err >&5
13687 echo "$as_me:$LINENO: \$? = $ac_status" >&5 13594 echo "$as_me:$LINENO: \$? = $ac_status" >&5
13688 (exit $ac_status); } && 13595 (exit $ac_status); } &&
13689 { ac_try='test -z "$ac_c_werror_flag" 13596 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
13690 || test ! -s conftest.err'
13691 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 13597 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
13692 (eval $ac_try) 2>&5 13598 (eval $ac_try) 2>&5
13693 ac_status=$? 13599 ac_status=$?
@@ -13753,8 +13659,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
13753 cat conftest.err >&5 13659 cat conftest.err >&5
13754 echo "$as_me:$LINENO: \$? = $ac_status" >&5 13660 echo "$as_me:$LINENO: \$? = $ac_status" >&5
13755 (exit $ac_status); } && 13661 (exit $ac_status); } &&
13756 { ac_try='test -z "$ac_c_werror_flag" 13662 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
13757 || test ! -s conftest.err'
13758 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 13663 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
13759 (eval $ac_try) 2>&5 13664 (eval $ac_try) 2>&5
13760 ac_status=$? 13665 ac_status=$?
@@ -14013,8 +13918,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
14013 cat conftest.err >&5 13918 cat conftest.err >&5
14014 echo "$as_me:$LINENO: \$? = $ac_status" >&5 13919 echo "$as_me:$LINENO: \$? = $ac_status" >&5
14015 (exit $ac_status); } && 13920 (exit $ac_status); } &&
14016 { ac_try='test -z "$ac_c_werror_flag" 13921 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
14017 || test ! -s conftest.err'
14018 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 13922 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
14019 (eval $ac_try) 2>&5 13923 (eval $ac_try) 2>&5
14020 ac_status=$? 13924 ac_status=$?
@@ -14081,8 +13985,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
14081 cat conftest.err >&5 13985 cat conftest.err >&5
14082 echo "$as_me:$LINENO: \$? = $ac_status" >&5 13986 echo "$as_me:$LINENO: \$? = $ac_status" >&5
14083 (exit $ac_status); } && 13987 (exit $ac_status); } &&
14084 { ac_try='test -z "$ac_c_werror_flag" 13988 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
14085 || test ! -s conftest.err'
14086 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 13989 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
14087 (eval $ac_try) 2>&5 13990 (eval $ac_try) 2>&5
14088 ac_status=$? 13991 ac_status=$?
@@ -14234,8 +14137,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
14234 cat conftest.err >&5 14137 cat conftest.err >&5
14235 echo "$as_me:$LINENO: \$? = $ac_status" >&5 14138 echo "$as_me:$LINENO: \$? = $ac_status" >&5
14236 (exit $ac_status); } && 14139 (exit $ac_status); } &&
14237 { ac_try='test -z "$ac_c_werror_flag" 14140 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
14238 || test ! -s conftest.err'
14239 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 14141 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
14240 (eval $ac_try) 2>&5 14142 (eval $ac_try) 2>&5
14241 ac_status=$? 14143 ac_status=$?
@@ -14419,8 +14321,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
14419 cat conftest.err >&5 14321 cat conftest.err >&5
14420 echo "$as_me:$LINENO: \$? = $ac_status" >&5 14322 echo "$as_me:$LINENO: \$? = $ac_status" >&5
14421 (exit $ac_status); } && 14323 (exit $ac_status); } &&
14422 { ac_try='test -z "$ac_c_werror_flag" 14324 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
14423 || test ! -s conftest.err'
14424 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 14325 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
14425 (eval $ac_try) 2>&5 14326 (eval $ac_try) 2>&5
14426 ac_status=$? 14327 ac_status=$?
@@ -14747,8 +14648,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
14747 cat conftest.err >&5 14648 cat conftest.err >&5
14748 echo "$as_me:$LINENO: \$? = $ac_status" >&5 14649 echo "$as_me:$LINENO: \$? = $ac_status" >&5
14749 (exit $ac_status); } && 14650 (exit $ac_status); } &&
14750 { ac_try='test -z "$ac_c_werror_flag" 14651 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
14751 || test ! -s conftest.err'
14752 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 14652 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
14753 (eval $ac_try) 2>&5 14653 (eval $ac_try) 2>&5
14754 ac_status=$? 14654 ac_status=$?
@@ -14849,8 +14749,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
14849 cat conftest.err >&5 14749 cat conftest.err >&5
14850 echo "$as_me:$LINENO: \$? = $ac_status" >&5 14750 echo "$as_me:$LINENO: \$? = $ac_status" >&5
14851 (exit $ac_status); } && 14751 (exit $ac_status); } &&
14852 { ac_try='test -z "$ac_c_werror_flag" 14752 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
14853 || test ! -s conftest.err'
14854 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 14753 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
14855 (eval $ac_try) 2>&5 14754 (eval $ac_try) 2>&5
14856 ac_status=$? 14755 ac_status=$?
@@ -14923,8 +14822,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
14923 cat conftest.err >&5 14822 cat conftest.err >&5
14924 echo "$as_me:$LINENO: \$? = $ac_status" >&5 14823 echo "$as_me:$LINENO: \$? = $ac_status" >&5
14925 (exit $ac_status); } && 14824 (exit $ac_status); } &&
14926 { ac_try='test -z "$ac_c_werror_flag" 14825 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
14927 || test ! -s conftest.err'
14928 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 14826 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
14929 (eval $ac_try) 2>&5 14827 (eval $ac_try) 2>&5
14930 ac_status=$? 14828 ac_status=$?
@@ -15003,8 +14901,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
15003 cat conftest.err >&5 14901 cat conftest.err >&5
15004 echo "$as_me:$LINENO: \$? = $ac_status" >&5 14902 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15005 (exit $ac_status); } && 14903 (exit $ac_status); } &&
15006 { ac_try='test -z "$ac_c_werror_flag" 14904 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15007 || test ! -s conftest.err'
15008 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 14905 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15009 (eval $ac_try) 2>&5 14906 (eval $ac_try) 2>&5
15010 ac_status=$? 14907 ac_status=$?
@@ -15073,8 +14970,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
15073 cat conftest.err >&5 14970 cat conftest.err >&5
15074 echo "$as_me:$LINENO: \$? = $ac_status" >&5 14971 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15075 (exit $ac_status); } && 14972 (exit $ac_status); } &&
15076 { ac_try='test -z "$ac_c_werror_flag" 14973 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15077 || test ! -s conftest.err'
15078 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 14974 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15079 (eval $ac_try) 2>&5 14975 (eval $ac_try) 2>&5
15080 ac_status=$? 14976 ac_status=$?
@@ -15142,8 +15038,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
15142 cat conftest.err >&5 15038 cat conftest.err >&5
15143 echo "$as_me:$LINENO: \$? = $ac_status" >&5 15039 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15144 (exit $ac_status); } && 15040 (exit $ac_status); } &&
15145 { ac_try='test -z "$ac_c_werror_flag" 15041 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15146 || test ! -s conftest.err'
15147 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 15042 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15148 (eval $ac_try) 2>&5 15043 (eval $ac_try) 2>&5
15149 ac_status=$? 15044 ac_status=$?
@@ -15217,8 +15112,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
15217 cat conftest.err >&5 15112 cat conftest.err >&5
15218 echo "$as_me:$LINENO: \$? = $ac_status" >&5 15113 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15219 (exit $ac_status); } && 15114 (exit $ac_status); } &&
15220 { ac_try='test -z "$ac_c_werror_flag" 15115 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15221 || test ! -s conftest.err'
15222 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 15116 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15223 (eval $ac_try) 2>&5 15117 (eval $ac_try) 2>&5
15224 ac_status=$? 15118 ac_status=$?
@@ -15322,8 +15216,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
15322 cat conftest.err >&5 15216 cat conftest.err >&5
15323 echo "$as_me:$LINENO: \$? = $ac_status" >&5 15217 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15324 (exit $ac_status); } && 15218 (exit $ac_status); } &&
15325 { ac_try='test -z "$ac_c_werror_flag" 15219 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15326 || test ! -s conftest.err'
15327 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 15220 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15328 (eval $ac_try) 2>&5 15221 (eval $ac_try) 2>&5
15329 ac_status=$? 15222 ac_status=$?
@@ -15398,8 +15291,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
15398 cat conftest.err >&5 15291 cat conftest.err >&5
15399 echo "$as_me:$LINENO: \$? = $ac_status" >&5 15292 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15400 (exit $ac_status); } && 15293 (exit $ac_status); } &&
15401 { ac_try='test -z "$ac_c_werror_flag" 15294 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15402 || test ! -s conftest.err'
15403 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 15295 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15404 (eval $ac_try) 2>&5 15296 (eval $ac_try) 2>&5
15405 ac_status=$? 15297 ac_status=$?
@@ -15551,8 +15443,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
15551 cat conftest.err >&5 15443 cat conftest.err >&5
15552 echo "$as_me:$LINENO: \$? = $ac_status" >&5 15444 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15553 (exit $ac_status); } && 15445 (exit $ac_status); } &&
15554 { ac_try='test -z "$ac_c_werror_flag" 15446 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15555 || test ! -s conftest.err'
15556 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 15447 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15557 (eval $ac_try) 2>&5 15448 (eval $ac_try) 2>&5
15558 ac_status=$? 15449 ac_status=$?
@@ -15620,8 +15511,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
15620 cat conftest.err >&5 15511 cat conftest.err >&5
15621 echo "$as_me:$LINENO: \$? = $ac_status" >&5 15512 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15622 (exit $ac_status); } && 15513 (exit $ac_status); } &&
15623 { ac_try='test -z "$ac_c_werror_flag" 15514 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15624 || test ! -s conftest.err'
15625 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 15515 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15626 (eval $ac_try) 2>&5 15516 (eval $ac_try) 2>&5
15627 ac_status=$? 15517 ac_status=$?
@@ -15798,8 +15688,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
15798 cat conftest.err >&5 15688 cat conftest.err >&5
15799 echo "$as_me:$LINENO: \$? = $ac_status" >&5 15689 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15800 (exit $ac_status); } && 15690 (exit $ac_status); } &&
15801 { ac_try='test -z "$ac_c_werror_flag" 15691 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15802 || test ! -s conftest.err'
15803 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 15692 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15804 (eval $ac_try) 2>&5 15693 (eval $ac_try) 2>&5
15805 ac_status=$? 15694 ac_status=$?
@@ -15875,8 +15764,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
15875 cat conftest.err >&5 15764 cat conftest.err >&5
15876 echo "$as_me:$LINENO: \$? = $ac_status" >&5 15765 echo "$as_me:$LINENO: \$? = $ac_status" >&5
15877 (exit $ac_status); } && 15766 (exit $ac_status); } &&
15878 { ac_try='test -z "$ac_c_werror_flag" 15767 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
15879 || test ! -s conftest.err'
15880 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 15768 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
15881 (eval $ac_try) 2>&5 15769 (eval $ac_try) 2>&5
15882 ac_status=$? 15770 ac_status=$?
@@ -16030,8 +15918,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
16030 cat conftest.err >&5 15918 cat conftest.err >&5
16031 echo "$as_me:$LINENO: \$? = $ac_status" >&5 15919 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16032 (exit $ac_status); } && 15920 (exit $ac_status); } &&
16033 { ac_try='test -z "$ac_c_werror_flag" 15921 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16034 || test ! -s conftest.err'
16035 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 15922 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16036 (eval $ac_try) 2>&5 15923 (eval $ac_try) 2>&5
16037 ac_status=$? 15924 ac_status=$?
@@ -16182,8 +16069,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
16182 cat conftest.err >&5 16069 cat conftest.err >&5
16183 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16070 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16184 (exit $ac_status); } && 16071 (exit $ac_status); } &&
16185 { ac_try='test -z "$ac_c_werror_flag" 16072 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16186 || test ! -s conftest.err'
16187 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16073 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16188 (eval $ac_try) 2>&5 16074 (eval $ac_try) 2>&5
16189 ac_status=$? 16075 ac_status=$?
@@ -16334,8 +16220,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
16334 cat conftest.err >&5 16220 cat conftest.err >&5
16335 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16221 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16336 (exit $ac_status); } && 16222 (exit $ac_status); } &&
16337 { ac_try='test -z "$ac_c_werror_flag" 16223 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16338 || test ! -s conftest.err'
16339 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16224 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16340 (eval $ac_try) 2>&5 16225 (eval $ac_try) 2>&5
16341 ac_status=$? 16226 ac_status=$?
@@ -16477,8 +16362,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
16477 cat conftest.err >&5 16362 cat conftest.err >&5
16478 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16363 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16479 (exit $ac_status); } && 16364 (exit $ac_status); } &&
16480 { ac_try='test -z "$ac_c_werror_flag" 16365 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16481 || test ! -s conftest.err'
16482 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16366 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16483 (eval $ac_try) 2>&5 16367 (eval $ac_try) 2>&5
16484 ac_status=$? 16368 ac_status=$?
@@ -16522,8 +16406,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
16522 cat conftest.err >&5 16406 cat conftest.err >&5
16523 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16407 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16524 (exit $ac_status); } && 16408 (exit $ac_status); } &&
16525 { ac_try='test -z "$ac_c_werror_flag" 16409 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16526 || test ! -s conftest.err'
16527 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16410 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16528 (eval $ac_try) 2>&5 16411 (eval $ac_try) 2>&5
16529 ac_status=$? 16412 ac_status=$?
@@ -16669,8 +16552,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
16669 cat conftest.err >&5 16552 cat conftest.err >&5
16670 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16553 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16671 (exit $ac_status); } && 16554 (exit $ac_status); } &&
16672 { ac_try='test -z "$ac_c_werror_flag" 16555 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16673 || test ! -s conftest.err'
16674 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16556 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16675 (eval $ac_try) 2>&5 16557 (eval $ac_try) 2>&5
16676 ac_status=$? 16558 ac_status=$?
@@ -16714,8 +16596,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
16714 cat conftest.err >&5 16596 cat conftest.err >&5
16715 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16597 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16716 (exit $ac_status); } && 16598 (exit $ac_status); } &&
16717 { ac_try='test -z "$ac_c_werror_flag" 16599 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16718 || test ! -s conftest.err'
16719 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16600 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16720 (eval $ac_try) 2>&5 16601 (eval $ac_try) 2>&5
16721 ac_status=$? 16602 ac_status=$?
@@ -16780,8 +16661,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
16780 cat conftest.err >&5 16661 cat conftest.err >&5
16781 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16662 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16782 (exit $ac_status); } && 16663 (exit $ac_status); } &&
16783 { ac_try='test -z "$ac_c_werror_flag" 16664 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16784 || test ! -s conftest.err'
16785 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16665 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16786 (eval $ac_try) 2>&5 16666 (eval $ac_try) 2>&5
16787 ac_status=$? 16667 ac_status=$?
@@ -16844,8 +16724,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
16844 cat conftest.err >&5 16724 cat conftest.err >&5
16845 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16725 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16846 (exit $ac_status); } && 16726 (exit $ac_status); } &&
16847 { ac_try='test -z "$ac_c_werror_flag" 16727 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16848 || test ! -s conftest.err'
16849 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16728 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16850 (eval $ac_try) 2>&5 16729 (eval $ac_try) 2>&5
16851 ac_status=$? 16730 ac_status=$?
@@ -16947,8 +16826,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
16947 cat conftest.err >&5 16826 cat conftest.err >&5
16948 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16827 echo "$as_me:$LINENO: \$? = $ac_status" >&5
16949 (exit $ac_status); } && 16828 (exit $ac_status); } &&
16950 { ac_try='test -z "$ac_c_werror_flag" 16829 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
16951 || test ! -s conftest.err'
16952 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16830 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
16953 (eval $ac_try) 2>&5 16831 (eval $ac_try) 2>&5
16954 ac_status=$? 16832 ac_status=$?
@@ -17017,8 +16895,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17017 cat conftest.err >&5 16895 cat conftest.err >&5
17018 echo "$as_me:$LINENO: \$? = $ac_status" >&5 16896 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17019 (exit $ac_status); } && 16897 (exit $ac_status); } &&
17020 { ac_try='test -z "$ac_c_werror_flag" 16898 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17021 || test ! -s conftest.err'
17022 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 16899 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17023 (eval $ac_try) 2>&5 16900 (eval $ac_try) 2>&5
17024 ac_status=$? 16901 ac_status=$?
@@ -17125,8 +17002,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17125 cat conftest.err >&5 17002 cat conftest.err >&5
17126 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17003 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17127 (exit $ac_status); } && 17004 (exit $ac_status); } &&
17128 { ac_try='test -z "$ac_c_werror_flag" 17005 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17129 || test ! -s conftest.err'
17130 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17006 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17131 (eval $ac_try) 2>&5 17007 (eval $ac_try) 2>&5
17132 ac_status=$? 17008 ac_status=$?
@@ -17229,8 +17105,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17229 cat conftest.err >&5 17105 cat conftest.err >&5
17230 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17106 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17231 (exit $ac_status); } && 17107 (exit $ac_status); } &&
17232 { ac_try='test -z "$ac_c_werror_flag" 17108 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17233 || test ! -s conftest.err'
17234 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17109 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17235 (eval $ac_try) 2>&5 17110 (eval $ac_try) 2>&5
17236 ac_status=$? 17111 ac_status=$?
@@ -17306,8 +17181,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17306 cat conftest.err >&5 17181 cat conftest.err >&5
17307 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17182 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17308 (exit $ac_status); } && 17183 (exit $ac_status); } &&
17309 { ac_try='test -z "$ac_c_werror_flag" 17184 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17310 || test ! -s conftest.err'
17311 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17185 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17312 (eval $ac_try) 2>&5 17186 (eval $ac_try) 2>&5
17313 ac_status=$? 17187 ac_status=$?
@@ -17411,8 +17285,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17411 cat conftest.err >&5 17285 cat conftest.err >&5
17412 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17286 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17413 (exit $ac_status); } && 17287 (exit $ac_status); } &&
17414 { ac_try='test -z "$ac_c_werror_flag" 17288 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17415 || test ! -s conftest.err'
17416 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17289 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17417 (eval $ac_try) 2>&5 17290 (eval $ac_try) 2>&5
17418 ac_status=$? 17291 ac_status=$?
@@ -17504,8 +17377,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17504 cat conftest.err >&5 17377 cat conftest.err >&5
17505 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17378 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17506 (exit $ac_status); } && 17379 (exit $ac_status); } &&
17507 { ac_try='test -z "$ac_c_werror_flag" 17380 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17508 || test ! -s conftest.err'
17509 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17381 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17510 (eval $ac_try) 2>&5 17382 (eval $ac_try) 2>&5
17511 ac_status=$? 17383 ac_status=$?
@@ -17570,8 +17442,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17570 cat conftest.err >&5 17442 cat conftest.err >&5
17571 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17443 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17572 (exit $ac_status); } && 17444 (exit $ac_status); } &&
17573 { ac_try='test -z "$ac_c_werror_flag" 17445 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17574 || test ! -s conftest.err'
17575 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17446 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17576 (eval $ac_try) 2>&5 17447 (eval $ac_try) 2>&5
17577 ac_status=$? 17448 ac_status=$?
@@ -17637,8 +17508,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17637 cat conftest.err >&5 17508 cat conftest.err >&5
17638 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17509 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17639 (exit $ac_status); } && 17510 (exit $ac_status); } &&
17640 { ac_try='test -z "$ac_c_werror_flag" 17511 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17641 || test ! -s conftest.err'
17642 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17512 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17643 (eval $ac_try) 2>&5 17513 (eval $ac_try) 2>&5
17644 ac_status=$? 17514 ac_status=$?
@@ -17748,8 +17618,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17748 cat conftest.err >&5 17618 cat conftest.err >&5
17749 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17619 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17750 (exit $ac_status); } && 17620 (exit $ac_status); } &&
17751 { ac_try='test -z "$ac_c_werror_flag" 17621 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17752 || test ! -s conftest.err'
17753 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17622 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17754 (eval $ac_try) 2>&5 17623 (eval $ac_try) 2>&5
17755 ac_status=$? 17624 ac_status=$?
@@ -17814,8 +17683,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17814 cat conftest.err >&5 17683 cat conftest.err >&5
17815 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17684 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17816 (exit $ac_status); } && 17685 (exit $ac_status); } &&
17817 { ac_try='test -z "$ac_c_werror_flag" 17686 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17818 || test ! -s conftest.err'
17819 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17687 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17820 (eval $ac_try) 2>&5 17688 (eval $ac_try) 2>&5
17821 ac_status=$? 17689 ac_status=$?
@@ -17895,8 +17763,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17895 cat conftest.err >&5 17763 cat conftest.err >&5
17896 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17764 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17897 (exit $ac_status); } && 17765 (exit $ac_status); } &&
17898 { ac_try='test -z "$ac_c_werror_flag" 17766 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17899 || test ! -s conftest.err'
17900 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17767 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17901 (eval $ac_try) 2>&5 17768 (eval $ac_try) 2>&5
17902 ac_status=$? 17769 ac_status=$?
@@ -17969,8 +17836,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17969 cat conftest.err >&5 17836 cat conftest.err >&5
17970 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17837 echo "$as_me:$LINENO: \$? = $ac_status" >&5
17971 (exit $ac_status); } && 17838 (exit $ac_status); } &&
17972 { ac_try='test -z "$ac_c_werror_flag" 17839 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
17973 || test ! -s conftest.err'
17974 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17840 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17975 (eval $ac_try) 2>&5 17841 (eval $ac_try) 2>&5
17976 ac_status=$? 17842 ac_status=$?
@@ -18043,8 +17909,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
18043 cat conftest.err >&5 17909 cat conftest.err >&5
18044 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17910 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18045 (exit $ac_status); } && 17911 (exit $ac_status); } &&
18046 { ac_try='test -z "$ac_c_werror_flag" 17912 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18047 || test ! -s conftest.err'
18048 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17913 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18049 (eval $ac_try) 2>&5 17914 (eval $ac_try) 2>&5
18050 ac_status=$? 17915 ac_status=$?
@@ -18117,8 +17982,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
18117 cat conftest.err >&5 17982 cat conftest.err >&5
18118 echo "$as_me:$LINENO: \$? = $ac_status" >&5 17983 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18119 (exit $ac_status); } && 17984 (exit $ac_status); } &&
18120 { ac_try='test -z "$ac_c_werror_flag" 17985 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18121 || test ! -s conftest.err'
18122 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 17986 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18123 (eval $ac_try) 2>&5 17987 (eval $ac_try) 2>&5
18124 ac_status=$? 17988 ac_status=$?
@@ -18192,8 +18056,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
18192 cat conftest.err >&5 18056 cat conftest.err >&5
18193 echo "$as_me:$LINENO: \$? = $ac_status" >&5 18057 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18194 (exit $ac_status); } && 18058 (exit $ac_status); } &&
18195 { ac_try='test -z "$ac_c_werror_flag" 18059 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18196 || test ! -s conftest.err'
18197 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18060 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18198 (eval $ac_try) 2>&5 18061 (eval $ac_try) 2>&5
18199 ac_status=$? 18062 ac_status=$?
@@ -18265,8 +18128,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
18265 cat conftest.err >&5 18128 cat conftest.err >&5
18266 echo "$as_me:$LINENO: \$? = $ac_status" >&5 18129 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18267 (exit $ac_status); } && 18130 (exit $ac_status); } &&
18268 { ac_try='test -z "$ac_c_werror_flag" 18131 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18269 || test ! -s conftest.err'
18270 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18132 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18271 (eval $ac_try) 2>&5 18133 (eval $ac_try) 2>&5
18272 ac_status=$? 18134 ac_status=$?
@@ -18341,8 +18203,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
18341 cat conftest.err >&5 18203 cat conftest.err >&5
18342 echo "$as_me:$LINENO: \$? = $ac_status" >&5 18204 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18343 (exit $ac_status); } && 18205 (exit $ac_status); } &&
18344 { ac_try='test -z "$ac_c_werror_flag" 18206 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18345 || test ! -s conftest.err'
18346 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18207 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18347 (eval $ac_try) 2>&5 18208 (eval $ac_try) 2>&5
18348 ac_status=$? 18209 ac_status=$?
@@ -18414,8 +18275,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
18414 cat conftest.err >&5 18275 cat conftest.err >&5
18415 echo "$as_me:$LINENO: \$? = $ac_status" >&5 18276 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18416 (exit $ac_status); } && 18277 (exit $ac_status); } &&
18417 { ac_try='test -z "$ac_c_werror_flag" 18278 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18418 || test ! -s conftest.err'
18419 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18279 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18420 (eval $ac_try) 2>&5 18280 (eval $ac_try) 2>&5
18421 ac_status=$? 18281 ac_status=$?
@@ -18488,8 +18348,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
18488 cat conftest.err >&5 18348 cat conftest.err >&5
18489 echo "$as_me:$LINENO: \$? = $ac_status" >&5 18349 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18490 (exit $ac_status); } && 18350 (exit $ac_status); } &&
18491 { ac_try='test -z "$ac_c_werror_flag" 18351 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18492 || test ! -s conftest.err'
18493 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18352 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18494 (eval $ac_try) 2>&5 18353 (eval $ac_try) 2>&5
18495 ac_status=$? 18354 ac_status=$?
@@ -18639,8 +18498,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
18639 cat conftest.err >&5 18498 cat conftest.err >&5
18640 echo "$as_me:$LINENO: \$? = $ac_status" >&5 18499 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18641 (exit $ac_status); } && 18500 (exit $ac_status); } &&
18642 { ac_try='test -z "$ac_c_werror_flag" 18501 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18643 || test ! -s conftest.err'
18644 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18502 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18645 (eval $ac_try) 2>&5 18503 (eval $ac_try) 2>&5
18646 ac_status=$? 18504 ac_status=$?
@@ -18786,8 +18644,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
18786 cat conftest.err >&5 18644 cat conftest.err >&5
18787 echo "$as_me:$LINENO: \$? = $ac_status" >&5 18645 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18788 (exit $ac_status); } && 18646 (exit $ac_status); } &&
18789 { ac_try='test -z "$ac_c_werror_flag" 18647 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18790 || test ! -s conftest.err'
18791 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18648 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18792 (eval $ac_try) 2>&5 18649 (eval $ac_try) 2>&5
18793 ac_status=$? 18650 ac_status=$?
@@ -18933,8 +18790,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
18933 cat conftest.err >&5 18790 cat conftest.err >&5
18934 echo "$as_me:$LINENO: \$? = $ac_status" >&5 18791 echo "$as_me:$LINENO: \$? = $ac_status" >&5
18935 (exit $ac_status); } && 18792 (exit $ac_status); } &&
18936 { ac_try='test -z "$ac_c_werror_flag" 18793 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
18937 || test ! -s conftest.err'
18938 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18794 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
18939 (eval $ac_try) 2>&5 18795 (eval $ac_try) 2>&5
18940 ac_status=$? 18796 ac_status=$?
@@ -19091,8 +18947,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
19091 cat conftest.err >&5 18947 cat conftest.err >&5
19092 echo "$as_me:$LINENO: \$? = $ac_status" >&5 18948 echo "$as_me:$LINENO: \$? = $ac_status" >&5
19093 (exit $ac_status); } && 18949 (exit $ac_status); } &&
19094 { ac_try='test -z "$ac_c_werror_flag" 18950 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
19095 || test ! -s conftest.err'
19096 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 18951 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
19097 (eval $ac_try) 2>&5 18952 (eval $ac_try) 2>&5
19098 ac_status=$? 18953 ac_status=$?
@@ -19238,8 +19093,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
19238 cat conftest.err >&5 19093 cat conftest.err >&5
19239 echo "$as_me:$LINENO: \$? = $ac_status" >&5 19094 echo "$as_me:$LINENO: \$? = $ac_status" >&5
19240 (exit $ac_status); } && 19095 (exit $ac_status); } &&
19241 { ac_try='test -z "$ac_c_werror_flag" 19096 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
19242 || test ! -s conftest.err'
19243 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 19097 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
19244 (eval $ac_try) 2>&5 19098 (eval $ac_try) 2>&5
19245 ac_status=$? 19099 ac_status=$?
@@ -19385,8 +19239,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
19385 cat conftest.err >&5 19239 cat conftest.err >&5
19386 echo "$as_me:$LINENO: \$? = $ac_status" >&5 19240 echo "$as_me:$LINENO: \$? = $ac_status" >&5
19387 (exit $ac_status); } && 19241 (exit $ac_status); } &&
19388 { ac_try='test -z "$ac_c_werror_flag" 19242 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
19389 || test ! -s conftest.err'
19390 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 19243 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
19391 (eval $ac_try) 2>&5 19244 (eval $ac_try) 2>&5
19392 ac_status=$? 19245 ac_status=$?
@@ -19544,8 +19397,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
19544 cat conftest.err >&5 19397 cat conftest.err >&5
19545 echo "$as_me:$LINENO: \$? = $ac_status" >&5 19398 echo "$as_me:$LINENO: \$? = $ac_status" >&5
19546 (exit $ac_status); } && 19399 (exit $ac_status); } &&
19547 { ac_try='test -z "$ac_c_werror_flag" 19400 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
19548 || test ! -s conftest.err'
19549 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 19401 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
19550 (eval $ac_try) 2>&5 19402 (eval $ac_try) 2>&5
19551 ac_status=$? 19403 ac_status=$?
@@ -19703,8 +19555,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
19703 cat conftest.err >&5 19555 cat conftest.err >&5
19704 echo "$as_me:$LINENO: \$? = $ac_status" >&5 19556 echo "$as_me:$LINENO: \$? = $ac_status" >&5
19705 (exit $ac_status); } && 19557 (exit $ac_status); } &&
19706 { ac_try='test -z "$ac_c_werror_flag" 19558 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
19707 || test ! -s conftest.err'
19708 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 19559 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
19709 (eval $ac_try) 2>&5 19560 (eval $ac_try) 2>&5
19710 ac_status=$? 19561 ac_status=$?
@@ -19893,8 +19744,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
19893 cat conftest.err >&5 19744 cat conftest.err >&5
19894 echo "$as_me:$LINENO: \$? = $ac_status" >&5 19745 echo "$as_me:$LINENO: \$? = $ac_status" >&5
19895 (exit $ac_status); } && 19746 (exit $ac_status); } &&
19896 { ac_try='test -z "$ac_c_werror_flag" 19747 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
19897 || test ! -s conftest.err'
19898 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 19748 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
19899 (eval $ac_try) 2>&5 19749 (eval $ac_try) 2>&5
19900 ac_status=$? 19750 ac_status=$?
@@ -19967,8 +19817,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
19967 cat conftest.err >&5 19817 cat conftest.err >&5
19968 echo "$as_me:$LINENO: \$? = $ac_status" >&5 19818 echo "$as_me:$LINENO: \$? = $ac_status" >&5
19969 (exit $ac_status); } && 19819 (exit $ac_status); } &&
19970 { ac_try='test -z "$ac_c_werror_flag" 19820 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
19971 || test ! -s conftest.err'
19972 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 19821 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
19973 (eval $ac_try) 2>&5 19822 (eval $ac_try) 2>&5
19974 ac_status=$? 19823 ac_status=$?
@@ -20036,8 +19885,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
20036 cat conftest.err >&5 19885 cat conftest.err >&5
20037 echo "$as_me:$LINENO: \$? = $ac_status" >&5 19886 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20038 (exit $ac_status); } && 19887 (exit $ac_status); } &&
20039 { ac_try='test -z "$ac_c_werror_flag" 19888 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20040 || test ! -s conftest.err'
20041 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 19889 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20042 (eval $ac_try) 2>&5 19890 (eval $ac_try) 2>&5
20043 ac_status=$? 19891 ac_status=$?
@@ -20083,8 +19931,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
20083 cat conftest.err >&5 19931 cat conftest.err >&5
20084 echo "$as_me:$LINENO: \$? = $ac_status" >&5 19932 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20085 (exit $ac_status); } && 19933 (exit $ac_status); } &&
20086 { ac_try='test -z "$ac_c_werror_flag" 19934 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20087 || test ! -s conftest.err'
20088 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 19935 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20089 (eval $ac_try) 2>&5 19936 (eval $ac_try) 2>&5
20090 ac_status=$? 19937 ac_status=$?
@@ -20158,8 +20005,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
20158 cat conftest.err >&5 20005 cat conftest.err >&5
20159 echo "$as_me:$LINENO: \$? = $ac_status" >&5 20006 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20160 (exit $ac_status); } && 20007 (exit $ac_status); } &&
20161 { ac_try='test -z "$ac_c_werror_flag" 20008 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20162 || test ! -s conftest.err'
20163 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 20009 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20164 (eval $ac_try) 2>&5 20010 (eval $ac_try) 2>&5
20165 ac_status=$? 20011 ac_status=$?
@@ -20223,8 +20069,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
20223 cat conftest.err >&5 20069 cat conftest.err >&5
20224 echo "$as_me:$LINENO: \$? = $ac_status" >&5 20070 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20225 (exit $ac_status); } && 20071 (exit $ac_status); } &&
20226 { ac_try='test -z "$ac_c_werror_flag" 20072 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20227 || test ! -s conftest.err'
20228 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 20073 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20229 (eval $ac_try) 2>&5 20074 (eval $ac_try) 2>&5
20230 ac_status=$? 20075 ac_status=$?
@@ -20362,8 +20207,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
20362 cat conftest.err >&5 20207 cat conftest.err >&5
20363 echo "$as_me:$LINENO: \$? = $ac_status" >&5 20208 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20364 (exit $ac_status); } && 20209 (exit $ac_status); } &&
20365 { ac_try='test -z "$ac_c_werror_flag" 20210 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20366 || test ! -s conftest.err'
20367 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 20211 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20368 (eval $ac_try) 2>&5 20212 (eval $ac_try) 2>&5
20369 ac_status=$? 20213 ac_status=$?
@@ -20424,8 +20268,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
20424 cat conftest.err >&5 20268 cat conftest.err >&5
20425 echo "$as_me:$LINENO: \$? = $ac_status" >&5 20269 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20426 (exit $ac_status); } && 20270 (exit $ac_status); } &&
20427 { ac_try='test -z "$ac_c_werror_flag" 20271 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20428 || test ! -s conftest.err'
20429 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 20272 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20430 (eval $ac_try) 2>&5 20273 (eval $ac_try) 2>&5
20431 ac_status=$? 20274 ac_status=$?
@@ -20570,8 +20413,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
20570 cat conftest.err >&5 20413 cat conftest.err >&5
20571 echo "$as_me:$LINENO: \$? = $ac_status" >&5 20414 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20572 (exit $ac_status); } && 20415 (exit $ac_status); } &&
20573 { ac_try='test -z "$ac_c_werror_flag" 20416 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20574 || test ! -s conftest.err'
20575 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 20417 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20576 (eval $ac_try) 2>&5 20418 (eval $ac_try) 2>&5
20577 ac_status=$? 20419 ac_status=$?
@@ -20727,8 +20569,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
20727 cat conftest.err >&5 20569 cat conftest.err >&5
20728 echo "$as_me:$LINENO: \$? = $ac_status" >&5 20570 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20729 (exit $ac_status); } && 20571 (exit $ac_status); } &&
20730 { ac_try='test -z "$ac_c_werror_flag" 20572 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20731 || test ! -s conftest.err'
20732 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 20573 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20733 (eval $ac_try) 2>&5 20574 (eval $ac_try) 2>&5
20734 ac_status=$? 20575 ac_status=$?
@@ -20899,8 +20740,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
20899 cat conftest.err >&5 20740 cat conftest.err >&5
20900 echo "$as_me:$LINENO: \$? = $ac_status" >&5 20741 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20901 (exit $ac_status); } && 20742 (exit $ac_status); } &&
20902 { ac_try='test -z "$ac_c_werror_flag" 20743 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20903 || test ! -s conftest.err'
20904 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 20744 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20905 (eval $ac_try) 2>&5 20745 (eval $ac_try) 2>&5
20906 ac_status=$? 20746 ac_status=$?
@@ -20968,8 +20808,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
20968 cat conftest.err >&5 20808 cat conftest.err >&5
20969 echo "$as_me:$LINENO: \$? = $ac_status" >&5 20809 echo "$as_me:$LINENO: \$? = $ac_status" >&5
20970 (exit $ac_status); } && 20810 (exit $ac_status); } &&
20971 { ac_try='test -z "$ac_c_werror_flag" 20811 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
20972 || test ! -s conftest.err'
20973 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 20812 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
20974 (eval $ac_try) 2>&5 20813 (eval $ac_try) 2>&5
20975 ac_status=$? 20814 ac_status=$?
@@ -21154,8 +20993,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
21154 cat conftest.err >&5 20993 cat conftest.err >&5
21155 echo "$as_me:$LINENO: \$? = $ac_status" >&5 20994 echo "$as_me:$LINENO: \$? = $ac_status" >&5
21156 (exit $ac_status); } && 20995 (exit $ac_status); } &&
21157 { ac_try='test -z "$ac_c_werror_flag" 20996 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
21158 || test ! -s conftest.err'
21159 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 20997 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
21160 (eval $ac_try) 2>&5 20998 (eval $ac_try) 2>&5
21161 ac_status=$? 20999 ac_status=$?
@@ -21448,8 +21286,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
21448 cat conftest.err >&5 21286 cat conftest.err >&5
21449 echo "$as_me:$LINENO: \$? = $ac_status" >&5 21287 echo "$as_me:$LINENO: \$? = $ac_status" >&5
21450 (exit $ac_status); } && 21288 (exit $ac_status); } &&
21451 { ac_try='test -z "$ac_c_werror_flag" 21289 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
21452 || test ! -s conftest.err'
21453 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 21290 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
21454 (eval $ac_try) 2>&5 21291 (eval $ac_try) 2>&5
21455 ac_status=$? 21292 ac_status=$?
@@ -21514,8 +21351,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
21514 cat conftest.err >&5 21351 cat conftest.err >&5
21515 echo "$as_me:$LINENO: \$? = $ac_status" >&5 21352 echo "$as_me:$LINENO: \$? = $ac_status" >&5
21516 (exit $ac_status); } && 21353 (exit $ac_status); } &&
21517 { ac_try='test -z "$ac_c_werror_flag" 21354 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
21518 || test ! -s conftest.err'
21519 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 21355 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
21520 (eval $ac_try) 2>&5 21356 (eval $ac_try) 2>&5
21521 ac_status=$? 21357 ac_status=$?
@@ -21578,8 +21414,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
21578 cat conftest.err >&5 21414 cat conftest.err >&5
21579 echo "$as_me:$LINENO: \$? = $ac_status" >&5 21415 echo "$as_me:$LINENO: \$? = $ac_status" >&5
21580 (exit $ac_status); } && 21416 (exit $ac_status); } &&
21581 { ac_try='test -z "$ac_c_werror_flag" 21417 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
21582 || test ! -s conftest.err'
21583 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 21418 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
21584 (eval $ac_try) 2>&5 21419 (eval $ac_try) 2>&5
21585 ac_status=$? 21420 ac_status=$?
@@ -21645,8 +21480,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
21645 cat conftest.err >&5 21480 cat conftest.err >&5
21646 echo "$as_me:$LINENO: \$? = $ac_status" >&5 21481 echo "$as_me:$LINENO: \$? = $ac_status" >&5
21647 (exit $ac_status); } && 21482 (exit $ac_status); } &&
21648 { ac_try='test -z "$ac_c_werror_flag" 21483 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
21649 || test ! -s conftest.err'
21650 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 21484 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
21651 (eval $ac_try) 2>&5 21485 (eval $ac_try) 2>&5
21652 ac_status=$? 21486 ac_status=$?
@@ -21687,8 +21521,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
21687 cat conftest.err >&5 21521 cat conftest.err >&5
21688 echo "$as_me:$LINENO: \$? = $ac_status" >&5 21522 echo "$as_me:$LINENO: \$? = $ac_status" >&5
21689 (exit $ac_status); } && 21523 (exit $ac_status); } &&
21690 { ac_try='test -z "$ac_c_werror_flag" 21524 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
21691 || test ! -s conftest.err'
21692 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 21525 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
21693 (eval $ac_try) 2>&5 21526 (eval $ac_try) 2>&5
21694 ac_status=$? 21527 ac_status=$?
@@ -21755,8 +21588,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
21755 cat conftest.err >&5 21588 cat conftest.err >&5
21756 echo "$as_me:$LINENO: \$? = $ac_status" >&5 21589 echo "$as_me:$LINENO: \$? = $ac_status" >&5
21757 (exit $ac_status); } && 21590 (exit $ac_status); } &&
21758 { ac_try='test -z "$ac_c_werror_flag" 21591 { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
21759 || test ! -s conftest.err'
21760 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 21592 { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
21761 (eval $ac_try) 2>&5 21593 (eval $ac_try) 2>&5
21762 ac_status=$? 21594 ac_status=$?
@@ -22885,11 +22717,6 @@ esac
22885 *) ac_INSTALL=$ac_top_builddir$INSTALL ;; 22717 *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
22886 esac 22718 esac
22887 22719
22888 if test x"$ac_file" != x-; then
22889 { echo "$as_me:$LINENO: creating $ac_file" >&5
22890echo "$as_me: creating $ac_file" >&6;}
22891 rm -f "$ac_file"
22892 fi
22893 # Let's still pretend it is `configure' which instantiates (i.e., don't 22720 # Let's still pretend it is `configure' which instantiates (i.e., don't
22894 # use $as_me), people would be surprised to read: 22721 # use $as_me), people would be surprised to read:
22895 # /* config.h. Generated by config.status. */ 22722 # /* config.h. Generated by config.status. */
@@ -22928,6 +22755,12 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
22928 fi;; 22755 fi;;
22929 esac 22756 esac
22930 done` || { (exit 1); exit 1; } 22757 done` || { (exit 1); exit 1; }
22758
22759 if test x"$ac_file" != x-; then
22760 { echo "$as_me:$LINENO: creating $ac_file" >&5
22761echo "$as_me: creating $ac_file" >&6;}
22762 rm -f "$ac_file"
22763 fi
22931_ACEOF 22764_ACEOF
22932cat >>$CONFIG_STATUS <<_ACEOF 22765cat >>$CONFIG_STATUS <<_ACEOF
22933 sed "$ac_vpsub 22766 sed "$ac_vpsub
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 23401937003..f0123a8b90d 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,11 @@
12004-12-21 Richard M. Stallman <rms@gnu.org>
2
3 * DISTRIB: Don't say "freeware".
4
52004-12-15 Nick Roberts <nickrob@snap.net.nz>
6
7 * DEBUG: Change printing example to break on a procedure name.
8
12004-12-11 Dan Nicolaescu <dann@ics.uci.edu> 92004-12-11 Dan Nicolaescu <dann@ics.uci.edu>
2 10
3 * e/eterm.ti: Add rs1. 11 * e/eterm.ti: Add rs1.
diff --git a/etc/DEBUG b/etc/DEBUG
index 6419b3dfd81..abb49143a05 100644
--- a/etc/DEBUG
+++ b/etc/DEBUG
@@ -107,36 +107,32 @@ objects which you can examine in turn with the x... commands.
107Even with a live process, these x... commands are useful for 107Even with a live process, these x... commands are useful for
108examining the fields in a buffer, window, process, frame or marker. 108examining the fields in a buffer, window, process, frame or marker.
109Here's an example using concepts explained in the node "Value History" 109Here's an example using concepts explained in the node "Value History"
110of the GDB manual to print the variable frame from this line in 110of the GDB manual to print values associated with the variable
111xmenu.c: 111called frame. First, use these commands:
112
113 buf.frame_or_window = frame;
114
115First, use these commands:
116 112
117 cd src 113 cd src
118 gdb emacs 114 gdb emacs
119 b xmenu.c:1296 115 b set_frame_buffer_list
120 r -q 116 r -q
121 117
122Then type C-x 5 2 to create a new frame, and it hits the breakpoint: 118Then when Emacs it hits the breakpoint:
123 119
124 (gdb) p frame 120 (gdb) p frame
125 $1 = 1077872640 121 $1 = 139854428
126 (gdb) xtype 122 (gdb) xtype
127 Lisp_Vectorlike 123 Lisp_Vectorlike
128 PVEC_FRAME 124 PVEC_FRAME
129 (gdb) xframe 125 (gdb) xframe
130 $2 = (struct frame *) 0x3f0800 126 $2 = (struct frame *) 0x8560258
131 (gdb) p *$ 127 (gdb) p *$
132 $3 = { 128 $3 = {
133 size = 536871989, 129 size = 1073742931,
134 next = 0x366240, 130 next = 0x85dfe58,
135 name = 809661752, 131 name = 140615219,
136 [...] 132 [...]
137 } 133 }
138 (gdb) p $3->name 134 (gdb) p $3->name
139 $4 = 809661752 135 $4 = 140615219
140 136
141Now we can use `pr' to print the name of the frame: 137Now we can use `pr' to print the name of the frame:
142 138
diff --git a/etc/DISTRIB b/etc/DISTRIB
index f1e8deb6ce1..bc0ea8cc60d 100644
--- a/etc/DISTRIB
+++ b/etc/DISTRIB
@@ -83,7 +83,7 @@ product and divide it by five, that is a good amount.
83If you like GNU Emacs, please express your satisfaction with a 83If you like GNU Emacs, please express your satisfaction with a
84donation: send me or the Foundation what you feel Emacs has been worth 84donation: send me or the Foundation what you feel Emacs has been worth
85to you. If you are glad that I developed GNU Emacs and distribute it 85to you. If you are glad that I developed GNU Emacs and distribute it
86as freeware, rather than following the obstructive and antisocial 86as free software, rather than following the obstructive and antisocial
87practices typical of software developers, reward me. If you would 87practices typical of software developers, reward me. If you would
88like the Foundation to develop more free software, contribute. 88like the Foundation to develop more free software, contribute.
89 89
diff --git a/etc/NEWS b/etc/NEWS
index 5b3dbc05435..0076e2cb41f 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -173,26 +173,44 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types.
173 173
174* Changes in Emacs 21.4 174* Changes in Emacs 21.4
175 175
176** line-move-ignore-invisible now defaults to t. 176** You can now follow links by clicking Mouse-1 on the link.
177 177
178** In Outline mode, hide-body no longer hides lines at the top 178Traditionally, Emacs uses a Mouse-1 click to set point and a Mouse-2
179of the file that precede the first header line. 179click to follow a link, whereas most other applications use a Mouse-1
180click for both purposes, depending on whether you click outside or
181inside a link. With release 21.4, the behaviour of a Mouse-1 click
182has been changed to match this context-sentitive dual behaviour.
180 183
181+++ 184Depending on the current mode, a Mouse-2 click in Emacs may do much
182** `set-auto-mode' now gives the interpreter magic line (if present) 185more than just follow a link, so the new Mouse-1 behaviour is only
183precedence over the file name. Likewise an <?xml or <!DOCTYPE declaration 186activated for modes which explicitly mark a clickable text as a "link"
184will give the buffer XML or SGML mode, based on the new var 187(see the new function `mouse-on-link-p' for details). The lisp
185`magic-mode-alist'. 188packages that are included in release 21.4 have been adapted to do
189this, but external packages may not yet support this. However, there
190is no risk in using such packages, as the worst thing that could
191happen is that you get the original Mouse-1 behaviour when you click
192on a link, which typically means that you set point where you click.
186 193
187+++ 194If you want to get the original Mouse-1 action also inside a link, you
188** New function `looking-back' checks whether a regular expression matches 195just need to press the Mouse-1 button a little longer than a normal
189the text before point. Specifying the LIMIT argument bounds how far 196click (i.e. press and hold the Mouse-1 button for half a second before
190back the match can start; this is a way to keep it from taking too long. 197you release it).
198
199Dragging the Mouse-1 inside a link still performs the original
200drag-mouse-1 action, typically copy the text.
201
202You can customize the new Mouse-1 behaviour via the new user option
203`mouse-1-click-follows-link'.
191 204
192+++ 205+++
193** New functions `make-progress-reporter', `progress-reporter-update', 206** When the undo information of the current command gets really large
194`progress-reporter-force-update' and `progress-reporter-done' provide 207(beyond the value of `undo-outer-limit'), Emacs asks you whether to
195a simple and efficient way of printing progress messages to the user. 208discard it or keep it.
209
210** line-move-ignore-invisible now defaults to t.
211
212** In Outline mode, hide-body no longer hides lines at the top
213of the file that precede the first header line.
196 214
197+++ 215+++
198** In Enriched mode, `set-left-margin' and `set-right-margin' are now 216** In Enriched mode, `set-left-margin' and `set-right-margin' are now
@@ -1160,9 +1178,11 @@ All regular expression replacement commands now allow `\?' in the
1160replacement string to specify a position where the replacement string 1178replacement string to specify a position where the replacement string
1161can be edited for each replacement. 1179can be edited for each replacement.
1162 1180
1163** query-replace uses isearch highlighting with lazy highlighting 1181** query-replace uses isearch lazy highlighting when the new user option
1164when the user option `query-replace-highlight' is set to `isearch'. 1182`query-replace-lazy-highlight' is non-nil.
1165If it is t, it uses old query-replace highlighting method. 1183
1184** The current match in query-replace is highlighted in new face
1185`query-replace' which by default inherits from isearch face.
1166 1186
1167+++ 1187+++
1168** Emacs normally highlights mouse sensitive text whenever the mouse 1188** Emacs normally highlights mouse sensitive text whenever the mouse
@@ -1497,9 +1517,8 @@ previous mark, i.e. C-u C-SPC C-SPC C-SPC ... cycles through the
1497mark ring. Use C-u C-u C-SPC to set the mark immediately after a jump. 1517mark ring. Use C-u C-u C-SPC to set the mark immediately after a jump.
1498 1518
1499** Movement commands `beginning-of-buffer', `end-of-buffer', 1519** Movement commands `beginning-of-buffer', `end-of-buffer',
1500`beginning-of-defun', `end-of-defun' do not set the mark if the new 1520`beginning-of-defun', `end-of-defun' do not set the mark if the mark
1501option `inhibit-mark-movement' is non-nil, or if the mark is already 1521is already active in Transient Mark mode.
1502active in Transient Mark mode.
1503 1522
1504+++ 1523+++
1505** In the *Occur* buffer, `o' switches to it in another window, and 1524** In the *Occur* buffer, `o' switches to it in another window, and
@@ -2446,11 +2465,33 @@ configuration files.
2446 2465
2447* Lisp Changes in Emacs 21.4 2466* Lisp Changes in Emacs 21.4
2448 2467
2468** Lisp code can now test if a given buffer position is inside a
2469clickable link with the new function `mouse-on-link-p'. This is the
2470function used by the new `mouse-1-click-follows-link' functionality.
2471
2472+++
2449** (while-no-input BODY...) runs BODY, but only so long as no input 2473** (while-no-input BODY...) runs BODY, but only so long as no input
2450arrives. If the user types or clicks anything, BODY stops as if a 2474arrives. If the user types or clicks anything, BODY stops as if a
2451quit had occurred. while-no-input returns the value of BODY, if BODY 2475quit had occurred. while-no-input returns the value of BODY, if BODY
2452finishes. It returns nil if BODY was aborted. 2476finishes. It returns nil if BODY was aborted.
2453 2477
2478+++
2479** `set-auto-mode' now gives the interpreter magic line (if present)
2480precedence over the file name. Likewise an <?xml or <!DOCTYPE declaration
2481will give the buffer XML or SGML mode, based on the new var
2482`magic-mode-alist'.
2483
2484+++
2485** New function `looking-back' checks whether a regular expression matches
2486the text before point. Specifying the LIMIT argument bounds how far
2487back the match can start; this is a way to keep it from taking too long.
2488
2489+++
2490** New functions `make-progress-reporter', `progress-reporter-update',
2491`progress-reporter-force-update' and `progress-reporter-done' provide
2492a simple and efficient way for a command to present progress messages
2493for the user.
2494
2454--- 2495---
2455** To manipulate the File menu using easy-menu, you must specify the 2496** To manipulate the File menu using easy-menu, you must specify the
2456proper name "file". In previous Emacs versions, you had to specify 2497proper name "file". In previous Emacs versions, you had to specify
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 994102f5a87..d913fbaf2c9 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,8 @@
12004-12-15 Andreas Schwab <schwab@suse.de>
2
3 * etags.c (main): Fix typo in conversion of LONG_OPTIONS from
4 preprocessing to compile time constant.
5
12004-11-17 Kim F. Storm <storm@cua.dk> 62004-11-17 Kim F. Storm <storm@cua.dk>
2 7
3 * etags.c: Undo last change. 8 * etags.c: Undo last change.
diff --git a/lib-src/etags.c b/lib-src/etags.c
index a6004a048a9..a06d29bfd11 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -1,5 +1,5 @@
1/* Tags file maker to go with GNU Emacs -*- coding: latin-1 -*- 1/* Tags file maker to go with GNU Emacs -*- coding: latin-1 -*-
2 Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2001, 2002 2 Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2001, 2002, 2004
3 Free Software Foundation, Inc. and Ken Arnold 3 Free Software Foundation, Inc. and Ken Arnold
4 4
5 This file is not considered part of GNU Emacs. 5 This file is not considered part of GNU Emacs.
@@ -1183,7 +1183,7 @@ main (argc, argv)
1183#ifdef ETAGS_REGEXPS 1183#ifdef ETAGS_REGEXPS
1184 optstring = "-r:Rc:"; 1184 optstring = "-r:Rc:";
1185#endif /* ETAGS_REGEXPS */ 1185#endif /* ETAGS_REGEXPS */
1186 if (LONG_OPTIONS) 1186 if (!LONG_OPTIONS)
1187 optstring += 1; 1187 optstring += 1;
1188 optstring = concat (optstring, 1188 optstring = concat (optstring,
1189 "Cf:Il:o:SVhH", 1189 "Cf:Il:o:SVhH",
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 6912fb5d861..7cf0678dcb0 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,280 @@
12004-12-24 Thien-Thi Nguyen <ttn@gnu.org>
2
3 * progmodes/hideshow.el: Require `cl' when compiling.
4 Remove XEmacs and Emacs 19 compatibility.
5 Use `dolist' and `add-to-list' for load-time actions.
6 (hs-discard-overlays): Use `dolist'.
7 (hs-show-block): Likewise.
8
92004-12-23 Dan Nicolaescu <dann@ics.uci.edu>
10
11 * faces.el (mode-line, mode-line-inactive): Use min-colors.
12
132004-12-23 Thien-Thi Nguyen <ttn@gnu.org>
14
15 * progmodes/hideshow.el (hs-inside-comment-p): Fix omission bug:
16 When extending backwards, move outside the current comment first.
17
182004-12-22 Kenichi Handa <handa@m17n.org>
19
20 * international/quail.el (quail-start-translation): Fix prompt
21 string for the case if input-method-use-echo-area being non-nil.
22 (quail-start-conversion): Likewise.
23 (quail-show-guidance): Don't show guidance if
24 input-method-use-echo-area is non-nil.
25
262004-12-21 Richard M. Stallman <rms@gnu.org>
27
28 * textmodes/ispell.el (ispell-help): Bind resize-mini-windows.
29
302004-12-21 Markus Rost <rost@ias.edu>
31
32 * calendar/diary-lib.el (mark-diary-entries): Set
33 mark-diary-entries-in-calendar only after checking for diary-file.
34
352004-12-21 Richard M. Stallman <rms@gnu.org>
36
37 * faces.el (escape-glyph): Use blue against light foreground.
38
39 * simple.el (undo-outer-limit-truncate): New function.
40 (undo-outer-limit-function): Use undo-outer-limit-truncate.
41
422004-12-21 Eli Barzilay <eli@barzilay.org>
43
44 * calculator.el: (calculator-radix-grouping-mode)
45 (calculator-radix-grouping-digits)
46 (calculator-radix-grouping-separator):
47 New defcustoms for the new radix grouping mode functionality.
48 (calculator-mode-hook): Now used in electric mode too.
49 (calculator-mode-map): Some new keys.
50 (calculator-message): New function. Some new calls.
51 (calculator-string-to-number): New function,
52 (calculator-curnum-value): Use it.
53 (calculator-rotate-displayer, calculator-rotate-displayer-back)
54 (calculator-displayer-prev, calculator-displayer-next):
55 Change digit group size when in radix mode.
56 (calculator-number-to-string): Renamed from calculator-num-to-string.
57 Now deals with digit grouping in radix mode.
58
592004-12-20 Glenn Morris <gmorris@ast.cam.ac.uk>
60
61 * calendar/calendar.el (view-other-diary-entries): Add autoload.
62 * calendar/diary-lib.el (view-other-diary-entries): Use
63 current-prefix-arg in interactive spec.
64
652004-12-19 Jay Belanger <belanger@truman.edu>
66
67 * calc/calc-aent.el (calcAlg-blank-matching-open):
68 Temporarily adjust the syntax of both delimiters of half-open
69 intervals.
70
712004-12-19 Kim F. Storm <storm@cua.dk>
72
73 * mouse.el (mouse-1-click-follows-link): Doc fix.
74
752004-12-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
76
77 * term/mac-win.el (encoding-vector, mac-font-encoder-list)
78 (ccl-encode-mac-centraleurroman-font): Use centraleurroman
79 instead of centraleuropean as the name
80
812004-12-17 Michael Albinus <michael.albinus@gmx.de>
82
83 Sync with Tramp 2.0.46.
84
85 * net/tramp.el (tramp-maybe-send-perl-script): Change order of
86 parameters wrt Tramp convention.
87 (tramp-handle-file-attributes-with-perl)
88 (tramp-handle-directory-files-and-attributes): Apply it.
89 (tramp-do-copy-or-rename-file-out-of-band): Check for existence of
90 `copy-program'. Reported by Zack Weinberg
91 <zack@codesourcery.com>.
92 (top): Set `edebug-form-spec' property directly rather than
93 calling `def-edebug-spec'.
94
95 * net/tramp-smb.el (tramp-smb-advice-PC-do-completion): Make the
96 advice less fragile. Surround temporary redefinition of
97 `substitute-in-file-name' with `unwind-protect'. Suggested by
98 Matt Hodges <MPHodges@member.fsf.org>.
99
1002004-12-17 Juri Linkov <juri@jurta.org>
101
102 * replace.el (occur-accumulate-lines, occur-engine):
103 Make forcing deferred font-lock fontification jit-specific.
104
1052004-12-17 Kim F. Storm <storm@cua.dk>
106
107 * mouse.el (mouse-1-click-follows-link): New defcustom.
108 (mouse-on-link-p): New function.
109 (mouse-drag-region-1): Implement mouse-1-click-follows-link
110 functionality. Map a mouse-1 click event into a mouse-2 (or
111 other) event when position is inside a link.
112
113 * tooltip.el (tooltip-show-help-function): Replace "mouse-2"
114 prefix in tooltip text with "mouse-1" when this is a link
115 recognized by mouse-1-click-follows-link functionality.
116
117 * help.el (describe-key): Report effective and original binding
118 for mouse-1 when clicked on a link.
119 (describe-mode): Add follow-link property to "minor-mode" button.
120
121 * help-fns.el (describe-variable): Add follow-link property to
122 "below" button.
123
124 * help-mode.el (help-xref): Add follow-link property.
125
126 * apropos.el (apropos-symbol, apropos-function, apropos-macro)
127 (apropos-command, apropos-variable, apropos-face, apropos-group)
128 (apropos-widget, apropos-plist): Add follow-link property.
129
130 * pcvs-defs.el (cvs-mode-map): Map follow-link to a function which
131 checks if position is in a filename, rather than some other
132 clickable item. Function looks for cvs-filename-face at position.
133
134 * wid-edit.el (widget-specify-field, widget-specify-button):
135 Map a :follow-link keyword into a follow-link property.
136 (link): Add :follow-link keyword, map to RET binding.
137
138 * dired.el (dired-mode-map): Map follow-link to mouse-face.
139
140 * progmodes/compile.el (compilation-minor-mode-map)
141 (compilation-button-map, compilation-mode-map): Likewise.
142
1432004-12-17 Thien-Thi Nguyen <ttn@gnu.org>
144
145 * play/zone.el (zone): Init `line-spacing' from orig buffer.
146 (zone-replace-char): Take `count' and `del-count'
147 instead of `direction'. Update callers. When `del-count' is
148 non-nil, delete that many characters, otherwise `count' characters
149 backwards. Insert the newly-replaced string `count' times.
150 (zone-fret): Handle chars w/ width greater than one.
151 (zone-fall-through-ws): No longer take window width `ww'.
152 Update callers. Add handling for `char-width' greater than one.
153 (zone-pgm-drip): Update var holding window-end position every cycle.
154
1552004-12-17 Andre Spiegel <spiegel@gnu.org>
156
157 * vc.el (vc-default-update-changelog): Use insert-file-contents,
158 rather than insert-file.
159
1602004-12-16 Jay Belanger <belanger@truman.edu>
161
162 * calc/calc-comb.el (var-RandSeed): Don't initially bind it.
163 (math-init-random-base, math-random-digit): Check to see if
164 var-RandSeed is bound.
165 (math-random-last): Declare it.
166 (math-random-digit): Don't make math-random-last local.
167
1682004-12-16 Thien-Thi Nguyen <ttn@gnu.org>
169
170 * play/zone.el (zone): Fix omission bug: Use a self-disabling
171 one-shot thunk for uniform (error, quit, normal) recovery.
172 Reported by John Paul Wallington.
173 (zone-pgm-random-life): Fix bug:
174 Recognize empty initial field by lack of "@" chars.
175
1762004-12-16 Juri Linkov <juri@jurta.org>
177
178 * help.el (function-called-at-point):
179 * help-fns.el (variable-at-point): As a last resort try striping
180 non-word prefixes and suffixes.
181
182 * descr-text.el (describe-property-list): Don't treat syntax-table
183 specially. Use describe-text-sexp which inserts [show] button
184 for large objects and handles printing errors. Sort properties
185 by names in alphabetical order instead of by value sizes.
186 Add `mouse-face' to list of properties for `describe-face' widget.
187 (describe-char): Mask out face-id from 19 bits of character.
188 Print face-id separately.
189
190 * replace.el (occur-accumulate-lines, occur-engine):
191 Fontify unfontified matching lines in the source buffer
192 before copying them.
193 (occur-engine): Don't put mouse-face on context lines.
194 (occur-next-error): Set point to line beginning/end
195 before searching for prev/next property to skip multiple
196 matches on a line (not supported by occur engine).
197 Remove redundant prefix-numeric-value.
198
1992004-12-15 Juri Linkov <juri@jurta.org>
200
201 * replace.el (match): New face.
202 (list-matching-lines-face): Change default from `bold' to `match'.
203
204 * progmodes/grep.el (grep-match-face): New defvar.
205 (grep-mode-font-lock-keywords): Use grep-match-face instead of
206 compilation-column-face to highlight grep matches.
207
208 * apropos.el (apropos-match-face): Change default from
209 `secondary-selection' to `match'.
210
211 * info-look.el (info-lookup-highlight-face): Change default from
212 `highlight' to `match'.
213
2142004-12-15 Daniel Pfeiffer <occitan@esperanto.org>
215
216 * progmodes/executable.el (executable-interpret): Eliminate
217 obsolete compile-internal, and switch to comint for interaction.
218
2192004-12-15 J.D. Smith <jdsmith@as.arizona.edu>
220
221 * progmodes/idlwave.el (idlwave-skip-multi-commands): Don't match
222 `&&' when skipping multiple statements on a line.
223
2242004-12-15 Thien-Thi Nguyen <ttn@gnu.org>
225
226 * play/zone.el (zone): Set `truncate-lines'.
227 Also, init `tab-width' with value from original buffer.
228 (zone-shift-up): Rewrite for speed.
229 (zone-shift-down, zone-shift-left, zone-shift-right): Likewise.
230 (zone-pgm-jitter): Remove redundant entries from ops vector.
231 (zone-exploding-remove): Reduce iteration count.
232 (zone-cpos): Convert to defsubst.
233 (zone-replace-char): New defsubst.
234 (zone-park/sit-for): Likewise.
235 (zone-fret): Take window-start arg.
236 Update callers. Use `zone-park/sit-for'.
237 (zone-fill-out-screen): Rewrite.
238 (zone-fall-through-ws): Likewise. Update callers.
239 (zone-pgm-drip): Use `zone-replace-char'.
240 Move var inits before while-loop. Use `zone-park/sit-for'.
241 (zone-pgm-random-life): Handle empty initial field.
242 Use `zone-replace-char' and `zone-park/sit-for'.
243
2442004-12-15 Juri Linkov <juri@jurta.org>
245
246 * isearch.el (isearch-update): Test isearch-lazy-highlight
247 before calling isearch-lazy-highlight-new-loop.
248 (isearch-lazy-highlight-new-loop):
249 Don't test isearch-lazy-highlight.
250
251 * replace.el (perform-replace): Add isearch-case-fold-search.
252 Use delimited-flag for isearch-regexp.
253 Reset isearch-lazy-highlight-last-string to force lazy
254 highlighting when called from isearch mode.
255 (query-replace-highlight): Revert defcustom type to boolean.
256 (query-replace-lazy-highlight): New defcustom.
257 (query-replace): New face.
258 (perform-replace, replace-highlight, replace-dehighlight):
259 Test query-replace-lazy-highlight instead of special value
260 `isearch' of query-replace-highlight.
261 (replace-dehighlight): Don't call isearch-dehighlight.
262 (replace-highlight): Don't call isearch-highlight.
263 Use face `query-replace' unconditionally.
264
2652004-12-14 Kim F. Storm <storm@cua.dk>
266
267 * simple.el (inhibit-mark-movement): Remove defvar.
268 (beginning-of-buffer, end-of-buffer): Don't use it.
269
270 * emacs-lisp/lisp.el (beginning-of-defun, end-of-defun): Don't
271 use inhibit-mark-movement.
272
273 * emulation/cua-base.el (cua--preserve-mark-commands): Remove.
274 (cua--undo-push-mark): Remove.
275 (cua--pre-command-handler, cua--post-command-handler): Don't
276 fiddle with inhibit-mark-movement.
277
12004-12-14 Juri Linkov <juri@jurta.org> 2782004-12-14 Juri Linkov <juri@jurta.org>
2 279
3 * buff-menu.el (list-buffers-noselect): Collect internal info 280 * buff-menu.el (list-buffers-noselect): Collect internal info
diff --git a/lisp/apropos.el b/lisp/apropos.el
index 8bfaa3ad592..1befefe8814 100644
--- a/lisp/apropos.el
+++ b/lisp/apropos.el
@@ -96,7 +96,7 @@ turns off mouse highlighting."
96 :group 'apropos 96 :group 'apropos
97 :type 'face) 97 :type 'face)
98 98
99(defcustom apropos-match-face 'secondary-selection 99(defcustom apropos-match-face 'match
100 "*Face for matching text in Apropos documentation/value, or nil for none. 100 "*Face for matching text in Apropos documentation/value, or nil for none.
101This applies when you look for matches in the documentation or variable value 101This applies when you look for matches in the documentation or variable value
102for the regexp; the part that matches gets displayed in this font." 102for the regexp; the part that matches gets displayed in this font."
@@ -163,6 +163,7 @@ term, and the rest of the words are alternative terms.")
163(define-button-type 'apropos-symbol 163(define-button-type 'apropos-symbol
164 'face apropos-symbol-face 164 'face apropos-symbol-face
165 'help-echo "mouse-2, RET: Display more help on this symbol" 165 'help-echo "mouse-2, RET: Display more help on this symbol"
166 'follow-link t
166 'action #'apropos-symbol-button-display-help 167 'action #'apropos-symbol-button-display-help
167 'skip t) 168 'skip t)
168 169
@@ -174,19 +175,24 @@ term, and the rest of the words are alternative terms.")
174 175
175(define-button-type 'apropos-function 176(define-button-type 'apropos-function
176 'apropos-label "Function" 177 'apropos-label "Function"
178 'help-echo "mouse-2, RET: Display more help on this function"
179 'follow-link t
177 'action (lambda (button) 180 'action (lambda (button)
178 (describe-function (button-get button 'apropos-symbol))) 181 (describe-function (button-get button 'apropos-symbol))))
179 'help-echo "mouse-2, RET: Display more help on this function") 182
180(define-button-type 'apropos-macro 183(define-button-type 'apropos-macro
181 'apropos-label "Macro" 184 'apropos-label "Macro"
185 'help-echo "mouse-2, RET: Display more help on this macro"
186 'follow-link t
182 'action (lambda (button) 187 'action (lambda (button)
183 (describe-function (button-get button 'apropos-symbol))) 188 (describe-function (button-get button 'apropos-symbol))))
184 'help-echo "mouse-2, RET: Display more help on this macro") 189
185(define-button-type 'apropos-command 190(define-button-type 'apropos-command
186 'apropos-label "Command" 191 'apropos-label "Command"
192 'help-echo "mouse-2, RET: Display more help on this command"
193 'follow-link t
187 'action (lambda (button) 194 'action (lambda (button)
188 (describe-function (button-get button 'apropos-symbol))) 195 (describe-function (button-get button 'apropos-symbol))))
189 'help-echo "mouse-2, RET: Display more help on this command")
190 196
191;; We used to use `customize-variable-other-window' instead for a 197;; We used to use `customize-variable-other-window' instead for a
192;; customizable variable, but that is slow. It is better to show an 198;; customizable variable, but that is slow. It is better to show an
@@ -196,18 +202,21 @@ term, and the rest of the words are alternative terms.")
196(define-button-type 'apropos-variable 202(define-button-type 'apropos-variable
197 'apropos-label "Variable" 203 'apropos-label "Variable"
198 'help-echo "mouse-2, RET: Display more help on this variable" 204 'help-echo "mouse-2, RET: Display more help on this variable"
205 'follow-link t
199 'action (lambda (button) 206 'action (lambda (button)
200 (describe-variable (button-get button 'apropos-symbol)))) 207 (describe-variable (button-get button 'apropos-symbol))))
201 208
202(define-button-type 'apropos-face 209(define-button-type 'apropos-face
203 'apropos-label "Face" 210 'apropos-label "Face"
204 'help-echo "mouse-2, RET: Display more help on this face" 211 'help-echo "mouse-2, RET: Display more help on this face"
212 'follow-link t
205 'action (lambda (button) 213 'action (lambda (button)
206 (describe-face (button-get button 'apropos-symbol)))) 214 (describe-face (button-get button 'apropos-symbol))))
207 215
208(define-button-type 'apropos-group 216(define-button-type 'apropos-group
209 'apropos-label "Group" 217 'apropos-label "Group"
210 'help-echo "mouse-2, RET: Display more help on this group" 218 'help-echo "mouse-2, RET: Display more help on this group"
219 'follow-link t
211 'action (lambda (button) 220 'action (lambda (button)
212 (customize-group-other-window 221 (customize-group-other-window
213 (button-get button 'apropos-symbol)))) 222 (button-get button 'apropos-symbol))))
@@ -215,12 +224,14 @@ term, and the rest of the words are alternative terms.")
215(define-button-type 'apropos-widget 224(define-button-type 'apropos-widget
216 'apropos-label "Widget" 225 'apropos-label "Widget"
217 'help-echo "mouse-2, RET: Display more help on this widget" 226 'help-echo "mouse-2, RET: Display more help on this widget"
227 'follow-link t
218 'action (lambda (button) 228 'action (lambda (button)
219 (widget-browse-other-window (button-get button 'apropos-symbol)))) 229 (widget-browse-other-window (button-get button 'apropos-symbol))))
220 230
221(define-button-type 'apropos-plist 231(define-button-type 'apropos-plist
222 'apropos-label "Plist" 232 'apropos-label "Plist"
223 'help-echo "mouse-2, RET: Display more help on this plist" 233 'help-echo "mouse-2, RET: Display more help on this plist"
234 'follow-link t
224 'action (lambda (button) 235 'action (lambda (button)
225 (apropos-describe-plist (button-get button 'apropos-symbol)))) 236 (apropos-describe-plist (button-get button 'apropos-symbol))))
226 237
diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el
index c062a822e89..2210435036c 100644
--- a/lisp/calc/calc-aent.el
+++ b/lisp/calc/calc-aent.el
@@ -410,32 +410,40 @@ T means abort and give an error message.")
410 (exit-minibuffer)))) 410 (exit-minibuffer))))
411 411
412(defun calcAlg-blink-matching-open () 412(defun calcAlg-blink-matching-open ()
413 (let ((oldpos (point)) 413 (let ((rightpt (point))
414 (blinkpos nil)) 414 (leftpt nil)
415 (rightchar (preceding-char))
416 leftchar
417 rightsyntax
418 leftsyntax)
415 (save-excursion 419 (save-excursion
416 (condition-case () 420 (condition-case ()
417 (setq blinkpos (scan-sexps oldpos -1)) 421 (setq leftpt (scan-sexps rightpt -1)
418 (error nil))) 422 leftchar (char-after leftpt))
419 (if (and blinkpos 423 (error nil)))
420 (> oldpos (1+ (point-min))) 424 (if (and leftpt
421 (or (and (= (char-after (1- oldpos)) ?\)) 425 (or (and (= rightchar ?\))
422 (= (char-after blinkpos) ?\[)) 426 (= leftchar ?\[))
423 (and (= (char-after (1- oldpos)) ?\]) 427 (and (= rightchar ?\])
424 (= (char-after blinkpos) ?\())) 428 (= leftchar ?\()))
425 (save-excursion 429 (save-excursion
426 (goto-char blinkpos) 430 (goto-char leftpt)
427 (looking-at ".+\\(\\.\\.\\|\\\\dots\\|\\\\ldots\\)"))) 431 (looking-at ".+\\(\\.\\.\\|\\\\dots\\|\\\\ldots\\)")))
428 (let ((saved (aref (syntax-table) (char-after blinkpos)))) 432 (let ((leftsaved (aref (syntax-table) leftchar))
429 (unwind-protect 433 (rightsaved (aref (syntax-table) rightchar)))
430 (progn 434 (unwind-protect
431 (aset (syntax-table) (char-after blinkpos) 435 (progn
432 (+ (logand saved 255) 436 (cond ((= leftchar ?\[)
433 (lsh (char-after (1- oldpos)) 8))) 437 (aset (syntax-table) leftchar (cons 4 ?\)))
434 (blink-matching-open)) 438 (aset (syntax-table) rightchar (cons 5 ?\[)))
435 (aset (syntax-table) (char-after blinkpos) saved))) 439 (t
440 (aset (syntax-table) leftchar (cons 4 ?\]))
441 (aset (syntax-table) rightchar (cons 5 ?\())))
442 (blink-matching-open))
443 (aset (syntax-table) leftchar leftsaved)
444 (aset (syntax-table) rightchar rightsaved)))
436 (blink-matching-open)))) 445 (blink-matching-open))))
437 446
438
439(defun calc-alg-digit-entry () 447(defun calc-alg-digit-entry ()
440 (calc-alg-entry 448 (calc-alg-entry
441 (cond ((eq last-command-char ?e) 449 (cond ((eq last-command-char ?e)
diff --git a/lisp/calc/calc-comb.el b/lisp/calc/calc-comb.el
index 24e3e5f182e..adb8fcecce6 100644
--- a/lisp/calc/calc-comb.el
+++ b/lisp/calc/calc-comb.el
@@ -540,12 +540,12 @@
540;;; Produce a random 10-bit integer, with (random) if no seed provided, 540;;; Produce a random 10-bit integer, with (random) if no seed provided,
541;;; or else with Numerical Recipes algorithm ran3 / Knuth 3.2.2-A. 541;;; or else with Numerical Recipes algorithm ran3 / Knuth 3.2.2-A.
542 542
543(defvar var-RandSeed nil) 543(defvar var-RandSeed)
544(defvar math-random-cache nil) 544(defvar math-random-cache nil)
545(defvar math-gaussian-cache nil) 545(defvar math-gaussian-cache nil)
546 546
547(defun math-init-random-base () 547(defun math-init-random-base ()
548 (if var-RandSeed 548 (if (and (boundp 'var-RandSeed) var-RandSeed)
549 (if (eq (car-safe var-RandSeed) 'vec) 549 (if (eq (car-safe var-RandSeed) 'vec)
550 nil 550 nil
551 (if (Math-integerp var-RandSeed) 551 (if (Math-integerp var-RandSeed)
@@ -599,9 +599,10 @@
599;;; Produce a random digit in the range 0..999. 599;;; Produce a random digit in the range 0..999.
600;;; Avoid various pitfalls that may lurk in the built-in (random) function! 600;;; Avoid various pitfalls that may lurk in the built-in (random) function!
601;;; Shuffling algorithm from Numerical Recipes, section 7.1. 601;;; Shuffling algorithm from Numerical Recipes, section 7.1.
602(defvar math-random-last)
602(defun math-random-digit () 603(defun math-random-digit ()
603 (let (i math-random-last) 604 (let (i)
604 (or (eq var-RandSeed math-last-RandSeed) 605 (or (and (boundp 'var-RandSeed) (eq var-RandSeed math-last-RandSeed))
605 (math-init-random-base)) 606 (math-init-random-base))
606 (or math-random-cache 607 (or math-random-cache
607 (progn 608 (progn
diff --git a/lisp/calculator.el b/lisp/calculator.el
index a9410ae961c..76ff4053c7f 100644
--- a/lisp/calculator.el
+++ b/lisp/calculator.el
@@ -4,6 +4,7 @@
4 4
5;; Author: Eli Barzilay <eli@barzilay.org> 5;; Author: Eli Barzilay <eli@barzilay.org>
6;; Keywords: tools, convenience 6;; Keywords: tools, convenience
7;; Time-stamp: <2002-07-13 01:14:35 eli>
7 8
8;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
9 10
@@ -100,6 +101,20 @@ at runtime."
100 :type 'integer 101 :type 'integer
101 :group 'calculator) 102 :group 'calculator)
102 103
104(defcustom calculator-radix-grouping-mode t
105 "*Use digit grouping in radix output mode.
106If this is set, chunks of `calculator-radix-grouping-digits' characters
107will be separated by `calculator-radix-grouping-separator' when in radix
108output mode is active (determined by `calculator-output-radix').")
109
110(defcustom calculator-radix-grouping-digits 4
111 "*The number of digits used for grouping display in radix modes.
112See `calculator-radix-grouping-mode'.")
113
114(defcustom calculator-radix-grouping-separator "'"
115 "*The separator used in radix grouping display.
116See `calculator-radix-grouping-mode'.")
117
103(defcustom calculator-remove-zeros t 118(defcustom calculator-remove-zeros t
104 "*Non-nil value means delete all redundant zero decimal digits. 119 "*Non-nil value means delete all redundant zero decimal digits.
105If this value is not t, and not nil, redundant zeros are removed except 120If this value is not t, and not nil, redundant zeros are removed except
@@ -163,7 +178,11 @@ Otherwise show as a negative number."
163 :group 'calculator) 178 :group 'calculator)
164 179
165(defcustom calculator-mode-hook nil 180(defcustom calculator-mode-hook nil
166 "*List of hook functions for `calculator-mode' to run." 181 "*List of hook functions for `calculator-mode' to run.
182Note: if `calculator-electric-mode' is on, then this hook will get
183activated in the minibuffer - in that case it should not do much more
184than local key settings and other effects that will change things
185outside the scope of calculator related code."
167 :type 'hook 186 :type 'hook
168 :group 'calculator) 187 :group 'calculator)
169 188
@@ -387,7 +406,7 @@ Used for repeating operations in calculator-repR/L.")
387 "oD" "oH" "oX" "oO" "oB") 406 "oD" "oH" "oX" "oO" "oB")
388 (calculator-rotate-displayer "'") 407 (calculator-rotate-displayer "'")
389 (calculator-rotate-displayer-back "\"") 408 (calculator-rotate-displayer-back "\"")
390 (calculator-displayer-pref "{") 409 (calculator-displayer-prev "{")
391 (calculator-displayer-next "}") 410 (calculator-displayer-next "}")
392 (calculator-saved-up [up] [?\C-p]) 411 (calculator-saved-up [up] [?\C-p])
393 (calculator-saved-down [down] [?\C-n]) 412 (calculator-saved-down [down] [?\C-n])
@@ -399,10 +418,10 @@ Used for repeating operations in calculator-repR/L.")
399 (calculator-save-and-quit [(control return)] 418 (calculator-save-and-quit [(control return)]
400 [(control kp-enter)]) 419 [(control kp-enter)])
401 (calculator-paste [insert] [(shift insert)] 420 (calculator-paste [insert] [(shift insert)]
402 [mouse-2]) 421 [paste] [mouse-2] [?\C-y])
403 (calculator-clear [delete] [?\C-?] [?\C-d]) 422 (calculator-clear [delete] [?\C-?] [?\C-d])
404 (calculator-help [?h] [??] [f1] [help]) 423 (calculator-help [?h] [??] [f1] [help])
405 (calculator-copy [(control insert)]) 424 (calculator-copy [(control insert)] [copy])
406 (calculator-backspace [backspace]) 425 (calculator-backspace [backspace])
407 ))) 426 )))
408 (while p 427 (while p
@@ -536,7 +555,7 @@ Used for repeating operations in calculator-repR/L.")
536 ,@(mapcar (lambda (x) (nth 1 x)) radix-selectors) 555 ,@(mapcar (lambda (x) (nth 1 x)) radix-selectors)
537 "---" 556 "---"
538 ,@(mapcar (lambda (x) (nth 2 x)) radix-selectors))) 557 ,@(mapcar (lambda (x) (nth 2 x)) radix-selectors)))
539 ("Decimal Dislpay" 558 ("Decimal Display"
540 ,@(mapcar (lambda (d) 559 ,@(mapcar (lambda (d)
541 (vector (cadr d) 560 (vector (cadr d)
542 ;; Note: inserts actual object here 561 ;; Note: inserts actual object here
@@ -611,10 +630,11 @@ The prompt indicates the current modes:
611* \"=?\": (? is B/O/H) the display radix (when input is decimal); 630* \"=?\": (? is B/O/H) the display radix (when input is decimal);
612* \"??\": (? is D/B/O/H) 1st char for input radix, 2nd for display. 631* \"??\": (? is D/B/O/H) 1st char for input radix, 2nd for display.
613 632
614Also, the quote character can be used to switch display modes for 633Also, the quote key can be used to switch display modes for decimal
615decimal numbers (double-quote rotates back), and the two brace 634numbers (double-quote rotates back), and the two brace characters
616characters (\"{\" and \"}\" change display parameters that these 635\(\"{\" and \"}\" change display parameters that these displayers use (if
617displayers use (if they handle such). 636they handle such). If output is using any radix mode, then these keys
637toggle digit grouping mode and the chunk size.
618 638
619Values can be saved for future reference in either a list of saved 639Values can be saved for future reference in either a list of saved
620values, or in registers. 640values, or in registers.
@@ -683,6 +703,7 @@ See the documentation for `calculator-mode' for more information."
683 (setq calculator-saved-global-map (current-global-map)) 703 (setq calculator-saved-global-map (current-global-map))
684 (use-local-map nil) 704 (use-local-map nil)
685 (use-global-map calculator-mode-map) 705 (use-global-map calculator-mode-map)
706 (run-hooks 'calculator-mode-hook)
686 (unwind-protect 707 (unwind-protect
687 (catch 'calculator-done 708 (catch 'calculator-done
688 (Electric-command-loop 709 (Electric-command-loop
@@ -717,6 +738,12 @@ See the documentation for `calculator-mode' for more information."
717 (if (and calculator-restart-other-mode calculator-electric-mode) 738 (if (and calculator-restart-other-mode calculator-electric-mode)
718 (calculator))) 739 (calculator)))
719 740
741(defun calculator-message (string &rest arguments)
742 "Same as `message', but special handle of electric mode."
743 (apply 'message string arguments)
744 (if calculator-electric-mode
745 (progn (sit-for 1) (message nil))))
746
720;;;--------------------------------------------------------------------- 747;;;---------------------------------------------------------------------
721;;; Operators 748;;; Operators
722 749
@@ -818,82 +845,116 @@ The string is set not to exceed the screen width."
818 (concat calculator-prompt 845 (concat calculator-prompt
819 (substring prompt (+ trim (length calculator-prompt))))))) 846 (substring prompt (+ trim (length calculator-prompt)))))))
820 847
821(defun calculator-curnum-value () 848(defun calculator-string-to-number (str)
822 "Get the numeric value of the displayed number string as a float." 849 "Convert the given STR to a number, according to the value of
850`calculator-input-radix'."
823 (if calculator-input-radix 851 (if calculator-input-radix
824 (let ((radix 852 (let ((radix
825 (cdr (assq calculator-input-radix 853 (cdr (assq calculator-input-radix
826 '((bin . 2) (oct . 8) (hex . 16))))) 854 '((bin . 2) (oct . 8) (hex . 16)))))
827 (i -1) (value 0)) 855 (i -1) (value 0) (new-value 0))
828 ;; assume valid input (upcased & characters in range) 856 ;; assume mostly valid input (e.g., characters in range)
829 (while (< (setq i (1+ i)) (length calculator-curnum)) 857 (while (< (setq i (1+ i)) (length str))
830 (setq value 858 (setq new-value
831 (+ (let ((ch (aref calculator-curnum i))) 859 (let* ((ch (upcase (aref str i)))
832 (- ch (if (<= ch ?9) ?0 (- ?A 10)))) 860 (n (cond ((< ch ?0) nil)
833 (* radix value)))) 861 ((<= ch ?9) (- ch ?0))
862 ((< ch ?A) nil)
863 ((<= ch ?Z) (- ch (- ?A 10)))
864 (t nil))))
865 (if (and n (<= 0 n) (< n radix))
866 (+ n (* radix value))
867 (progn
868 (calculator-message
869 "Warning: Ignoring bad input character `%c'." ch)
870 (sit-for 1)
871 value))))
872 (if (if (< new-value 0) (> value 0) (< value 0))
873 (calculator-message "Warning: Overflow in input."))
874 (setq value new-value))
834 value) 875 value)
835 (car 876 (car (read-from-string
836 (read-from-string 877 (cond ((equal "." str) "0.0")
837 (cond 878 ((string-match "[eE][+-]?$" str) (concat str "0"))
838 ((equal "." calculator-curnum) 879 ((string-match "\\.[0-9]\\|[eE]" str) str)
839 "0.0") 880 ((string-match "\\." str)
840 ((string-match "[eE][+-]?$" calculator-curnum) 881 ;; do this because Emacs reads "23." as an integer
841 (concat calculator-curnum "0")) 882 (concat str "0"))
842 ((string-match "\\.[0-9]\\|[eE]" calculator-curnum) 883 ((stringp str) (concat str ".0"))
843 calculator-curnum) 884 (t "0.0"))))))
844 ((string-match "\\." calculator-curnum) 885
845 ;; do this because Emacs reads "23." as an integer 886(defun calculator-curnum-value ()
846 (concat calculator-curnum "0")) 887 "Get the numeric value of the displayed number string as a float."
847 ((stringp calculator-curnum) 888 (calculator-string-to-number calculator-curnum))
848 (concat calculator-curnum ".0"))
849 (t "0.0"))))))
850 889
851(defun calculator-rotate-displayer (&optional new-disp) 890(defun calculator-rotate-displayer (&optional new-disp)
852 "Switch to the next displayer on the `calculator-displayers' list. 891 "Switch to the next displayer on the `calculator-displayers' list.
853Can be called with an optional argument NEW-DISP to force rotation to 892Can be called with an optional argument NEW-DISP to force rotation to
854that argument." 893that argument.
894If radix output mode is active, toggle digit grouping."
855 (interactive) 895 (interactive)
856 (setq calculator-displayers 896 (cond
857 (if (and new-disp (memq new-disp calculator-displayers)) 897 (calculator-output-radix
858 (let ((tmp nil)) 898 (setq calculator-radix-grouping-mode
859 (while (not (eq (car calculator-displayers) new-disp)) 899 (not calculator-radix-grouping-mode))
860 (setq tmp (cons (car calculator-displayers) tmp)) 900 (calculator-message
861 (setq calculator-displayers (cdr calculator-displayers))) 901 "Digit grouping mode %s."
862 (setq calculator-displayers 902 (if calculator-radix-grouping-mode "ON" "OFF")))
863 (nconc calculator-displayers (nreverse tmp)))) 903 (t
864 (nconc (cdr calculator-displayers) 904 (setq calculator-displayers
865 (list (car calculator-displayers))))) 905 (if (and new-disp (memq new-disp calculator-displayers))
866 (message "Using %s." (cadr (car calculator-displayers))) 906 (let ((tmp nil))
867 (if calculator-electric-mode 907 (while (not (eq (car calculator-displayers) new-disp))
868 (progn (sit-for 1) (message nil))) 908 (setq tmp (cons (car calculator-displayers) tmp))
909 (setq calculator-displayers
910 (cdr calculator-displayers)))
911 (setq calculator-displayers
912 (nconc calculator-displayers (nreverse tmp))))
913 (nconc (cdr calculator-displayers)
914 (list (car calculator-displayers)))))
915 (calculator-message
916 "Using %s." (cadr (car calculator-displayers)))))
869 (calculator-enter)) 917 (calculator-enter))
870 918
871(defun calculator-rotate-displayer-back () 919(defun calculator-rotate-displayer-back ()
872 "Like `calculator-rotate-displayer', but rotates modes back." 920 "Like `calculator-rotate-displayer', but rotates modes back.
921If radix output mode is active, toggle digit grouping."
873 (interactive) 922 (interactive)
874 (calculator-rotate-displayer (car (last calculator-displayers)))) 923 (calculator-rotate-displayer (car (last calculator-displayers))))
875 924
876(defun calculator-displayer-prev () 925(defun calculator-displayer-prev ()
877 "Send the current displayer function a 'left argument. 926 "Send the current displayer function a 'left argument.
878This is used to modify display arguments (if the current displayer 927This is used to modify display arguments (if the current displayer
879function supports this)." 928function supports this).
929If radix output mode is active, increase the grouping size."
880 (interactive) 930 (interactive)
881 (and (car calculator-displayers) 931 (if calculator-output-radix
882 (let ((disp (caar calculator-displayers))) 932 (progn (setq calculator-radix-grouping-digits
883 (cond ((symbolp disp) (funcall disp 'left)) 933 (1+ calculator-radix-grouping-digits))
884 ((and (consp disp) (eq 'std (car disp))) 934 (calculator-enter))
885 (calculator-standard-displayer 'left (cadr disp))))))) 935 (and (car calculator-displayers)
936 (let ((disp (caar calculator-displayers)))
937 (cond
938 ((symbolp disp) (funcall disp 'left))
939 ((and (consp disp) (eq 'std (car disp)))
940 (calculator-standard-displayer 'left (cadr disp))))))))
886 941
887(defun calculator-displayer-next () 942(defun calculator-displayer-next ()
888 "Send the current displayer function a 'right argument. 943 "Send the current displayer function a 'right argument.
889This is used to modify display arguments (if the current displayer 944This is used to modify display arguments (if the current displayer
890function supports this)." 945function supports this).
946If radix output mode is active, decrease the grouping size."
891 (interactive) 947 (interactive)
892 (and (car calculator-displayers) 948 (if calculator-output-radix
893 (let ((disp (caar calculator-displayers))) 949 (progn (setq calculator-radix-grouping-digits
894 (cond ((symbolp disp) (funcall disp 'right)) 950 (max 2 (1- calculator-radix-grouping-digits)))
895 ((and (consp disp) (eq 'std (car disp))) 951 (calculator-enter))
896 (calculator-standard-displayer 'right (cadr disp))))))) 952 (and (car calculator-displayers)
953 (let ((disp (caar calculator-displayers)))
954 (cond
955 ((symbolp disp) (funcall disp 'right))
956 ((and (consp disp) (eq 'std (car disp)))
957 (calculator-standard-displayer 'right (cadr disp))))))))
897 958
898(defun calculator-remove-zeros (numstr) 959(defun calculator-remove-zeros (numstr)
899 "Get a number string NUMSTR and remove unnecessary zeroes. 960 "Get a number string NUMSTR and remove unnecessary zeroes.
@@ -995,7 +1056,7 @@ the 'left or 'right when one of the standard modes is used."
995 (calculator-remove-zeros str)) 1056 (calculator-remove-zeros str))
996 "e" (number-to-string exp)))))) 1057 "e" (number-to-string exp))))))
997 1058
998(defun calculator-num-to-string (num) 1059(defun calculator-number-to-string (num)
999 "Convert NUM to a displayable string." 1060 "Convert NUM to a displayable string."
1000 (cond 1061 (cond
1001 ((and (numberp num) calculator-output-radix) 1062 ((and (numberp num) calculator-output-radix)
@@ -1015,6 +1076,14 @@ the 'left or 'right when one of the standard modes is used."
1015 (?6 . "110") (?7 . "111"))))))) 1076 (?6 . "110") (?7 . "111")))))))
1016 (string-match "^0*\\(.+\\)" s) 1077 (string-match "^0*\\(.+\\)" s)
1017 (setq str (match-string 1 s)))) 1078 (setq str (match-string 1 s))))
1079 (if calculator-radix-grouping-mode
1080 (let ((d (/ (length str) calculator-radix-grouping-digits))
1081 (r (% (length str) calculator-radix-grouping-digits)))
1082 (while (>= (setq d (1- d)) (if (zerop r) 1 0))
1083 (let ((i (+ r (* d calculator-radix-grouping-digits))))
1084 (setq str (concat (substring str 0 i)
1085 calculator-radix-grouping-separator
1086 (substring str i)))))))
1018 (upcase 1087 (upcase
1019 (if (and (not calculator-2s-complement) (< num 0)) 1088 (if (and (not calculator-2s-complement) (< num 0))
1020 (concat "-" str) 1089 (concat "-" str)
@@ -1051,7 +1120,7 @@ If optional argument FORCE is non-nil, don't use the cached string."
1051 ;; customizable display for a single value 1120 ;; customizable display for a single value
1052 (caar calculator-displayers) 1121 (caar calculator-displayers)
1053 calculator-displayer))) 1122 calculator-displayer)))
1054 (mapconcat 'calculator-num-to-string 1123 (mapconcat 'calculator-number-to-string
1055 (reverse calculator-stack) 1124 (reverse calculator-stack)
1056 " ")) 1125 " "))
1057 " " 1126 " "
@@ -1319,9 +1388,8 @@ Optional string argument KEYS will force using it as the keys entered."
1319 (if (not (and op (= -1 (calculator-op-arity op)))) 1388 (if (not (and op (= -1 (calculator-op-arity op))))
1320 ;;(error "Binary operator without a first operand") 1389 ;;(error "Binary operator without a first operand")
1321 (progn 1390 (progn
1322 (message "Binary operator without a first operand") 1391 (calculator-message
1323 (if calculator-electric-mode 1392 "Binary operator without a first operand")
1324 (progn (sit-for 1) (message nil)))
1325 (throw 'op-error nil))))) 1393 (throw 'op-error nil)))))
1326 (calculator-reduce-stack 1394 (calculator-reduce-stack
1327 (cond ((eq (nth 1 op) '\() 10) 1395 (cond ((eq (nth 1 op) '\() 10)
@@ -1334,9 +1402,7 @@ Optional string argument KEYS will force using it as the keys entered."
1334 (not (numberp (car calculator-stack))))) 1402 (not (numberp (car calculator-stack)))))
1335 ;;(error "Unterminated expression") 1403 ;;(error "Unterminated expression")
1336 (progn 1404 (progn
1337 (message "Unterminated expression") 1405 (calculator-message "Unterminated expression")
1338 (if calculator-electric-mode
1339 (progn (sit-for 1) (message nil)))
1340 (throw 'op-error nil))) 1406 (throw 'op-error nil)))
1341 (setq calculator-stack (cons op calculator-stack)) 1407 (setq calculator-stack (cons op calculator-stack))
1342 (calculator-reduce-stack (calculator-op-prec op)) 1408 (calculator-reduce-stack (calculator-op-prec op))
@@ -1540,7 +1606,7 @@ Optional string argument KEYS will force using it as the keys entered."
1540 (setcdr as val) 1606 (setcdr as val)
1541 (setq calculator-registers 1607 (setq calculator-registers
1542 (cons (cons reg val) calculator-registers))) 1608 (cons (cons reg val) calculator-registers)))
1543 (message (format "[%c] := %S" reg val)))) 1609 (calculator-message "[%c] := %S" reg val)))
1544 1610
1545(defun calculator-put-value (val) 1611(defun calculator-put-value (val)
1546 "Paste VAL as if entered. 1612 "Paste VAL as if entered.
@@ -1552,24 +1618,26 @@ Used by `calculator-paste' and `get-register'."
1552 (progn 1618 (progn
1553 (calculator-clear-fragile) 1619 (calculator-clear-fragile)
1554 (setq calculator-curnum (let ((calculator-displayer "%S")) 1620 (setq calculator-curnum (let ((calculator-displayer "%S"))
1555 (calculator-num-to-string val))) 1621 (calculator-number-to-string val)))
1556 (calculator-update-display)))) 1622 (calculator-update-display))))
1557 1623
1558(defun calculator-paste () 1624(defun calculator-paste ()
1559 "Paste a value from the `kill-ring'." 1625 "Paste a value from the `kill-ring'."
1560 (interactive) 1626 (interactive)
1561 (calculator-put-value 1627 (calculator-put-value
1562 (let ((str (current-kill 0))) 1628 (let ((str (replace-regexp-in-string
1563 (and calculator-paste-decimals 1629 "^ *\\(.+[^ ]\\) *$" "\\1" (current-kill 0))))
1630 (and (not calculator-input-radix)
1631 calculator-paste-decimals
1564 (string-match "\\([0-9]+\\)\\(\\.[0-9]+\\)?\\(e[0-9]+\\)?" 1632 (string-match "\\([0-9]+\\)\\(\\.[0-9]+\\)?\\(e[0-9]+\\)?"
1565 str) 1633 str)
1566 (or (match-string 1 str) 1634 (or (match-string 1 str)
1567 (match-string 2 str) 1635 (match-string 2 str)
1568 (match-string 3 str)) 1636 (match-string 3 str))
1569 (setq str (concat (match-string 1 str) 1637 (setq str (concat (or (match-string 1 str) "0")
1570 (or (match-string 2 str) ".0") 1638 (or (match-string 2 str) ".0")
1571 (match-string 3 str)))) 1639 (or (match-string 3 str) ""))))
1572 (condition-case nil (car (read-from-string str)) 1640 (condition-case nil (calculator-string-to-number str)
1573 (error nil))))) 1641 (error nil)))))
1574 1642
1575(defun calculator-get-register (reg) 1643(defun calculator-get-register (reg)
@@ -1678,7 +1746,7 @@ To use this, apply a binary operator (evaluate it), then call this."
1678 (while (> x 0) 1746 (while (> x 0)
1679 (setq r (* r (truncate x))) 1747 (setq r (* r (truncate x)))
1680 (setq x (1- x))) 1748 (setq x (1- x)))
1681 r)) 1749 (+ 0.0 r)))
1682 1750
1683(defun calculator-truncate (n) 1751(defun calculator-truncate (n)
1684 "Truncate N, return 0 in case of overflow." 1752 "Truncate N, return 0 in case of overflow."
diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el
index aa0b3005fad..88d6aee513f 100644
--- a/lisp/calendar/calendar.el
+++ b/lisp/calendar/calendar.el
@@ -1660,6 +1660,13 @@ the date indicated by the cursor position in the displayed three-month
1660calendar." 1660calendar."
1661 t) 1661 t)
1662 1662
1663(autoload 'view-other-diary-entries "diary-lib"
1664 "Prepare and display buffer of diary entries from an alternative diary file.
1665Searches for entries that match ARG days, starting with the date indicated
1666by the cursor position in the displayed three-month calendar.
1667D-FILE specifies the file to use as the diary file."
1668 t)
1669
1663(autoload 'calendar-sunrise-sunset "solar" 1670(autoload 'calendar-sunrise-sunset "solar"
1664 "Local time of sunrise and sunset for date under cursor." 1671 "Local time of sunrise and sunset for date under cursor."
1665 t) 1672 t)
diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el
index 679c4b991b6..511f82f8f2f 100644
--- a/lisp/calendar/diary-lib.el
+++ b/lisp/calendar/diary-lib.el
@@ -80,7 +80,7 @@ Searches for entries that match ARG days, starting with the date indicated
80by the cursor position in the displayed three-month calendar. 80by the cursor position in the displayed three-month calendar.
81D-FILE specifies the file to use as the diary file." 81D-FILE specifies the file to use as the diary file."
82 (interactive 82 (interactive
83 (list (if arg (prefix-numeric-value arg) 1) 83 (list (prefix-numeric-value current-prefix-arg)
84 (read-file-name "Enter diary file name: " default-directory nil t))) 84 (read-file-name "Enter diary file name: " default-directory nil t)))
85 (let ((diary-file d-file)) 85 (let ((diary-file d-file))
86 (view-diary-entries arg))) 86 (view-diary-entries arg)))
@@ -841,11 +841,11 @@ Each entry in the diary file visible in the calendar window is marked.
841After the entries are marked, the hooks `nongregorian-diary-marking-hook' and 841After the entries are marked, the hooks `nongregorian-diary-marking-hook' and
842`mark-diary-entries-hook' are run." 842`mark-diary-entries-hook' are run."
843 (interactive) 843 (interactive)
844 (setq mark-diary-entries-in-calendar t)
845 (let ((marking-diary-entries t) 844 (let ((marking-diary-entries t)
846 file-glob-attrs marks) 845 file-glob-attrs marks)
847 (save-excursion 846 (save-excursion
848 (set-buffer (find-file-noselect (diary-check-diary-file) t)) 847 (set-buffer (find-file-noselect (diary-check-diary-file) t))
848 (setq mark-diary-entries-in-calendar t)
849 (message "Marking diary entries...") 849 (message "Marking diary entries...")
850 (setq file-glob-attrs (nth 1 (diary-pull-attrs nil '()))) 850 (setq file-glob-attrs (nth 1 (diary-pull-attrs nil '())))
851 (let ((d diary-date-forms) 851 (let ((d diary-date-forms)
diff --git a/lisp/descr-text.el b/lisp/descr-text.el
index 0a5fa799f13..4b41c2501e5 100644
--- a/lisp/descr-text.el
+++ b/lisp/descr-text.el
@@ -104,24 +104,11 @@ The `category', `face' and `font-lock-face' properties are made
104into widget buttons that call `describe-text-category' or 104into widget buttons that call `describe-text-category' or
105`describe-face' when pushed." 105`describe-face' when pushed."
106 ;; Sort the properties by the size of their value. 106 ;; Sort the properties by the size of their value.
107 (dolist (elt (sort (let ((ret nil) 107 (dolist (elt (sort (let (ret)
108 (key nil)
109 (val nil)
110 (len nil))
111 (while properties 108 (while properties
112 (setq key (pop properties) 109 (push (list (pop properties) (pop properties)) ret))
113 val (pop properties)
114 len 0)
115 (unless (or (memq key '(category face font-lock-face
116 syntax-table))
117 (widgetp val))
118 (setq val (pp-to-string val)
119 len (length val)))
120 (push (list key val len) ret))
121 ret) 110 ret)
122 (lambda (a b) 111 (lambda (a b) (string< (nth 0 a) (nth 0 b)))))
123 (< (nth 2 a)
124 (nth 2 b)))))
125 (let ((key (nth 0 elt)) 112 (let ((key (nth 0 elt))
126 (value (nth 1 elt))) 113 (value (nth 1 elt)))
127 (widget-insert (propertize (format " %-20s " key) 114 (widget-insert (propertize (format " %-20s " key)
@@ -131,23 +118,15 @@ into widget buttons that call `describe-text-category' or
131 :notify `(lambda (&rest ignore) 118 :notify `(lambda (&rest ignore)
132 (describe-text-category ',value)) 119 (describe-text-category ',value))
133 (format "%S" value))) 120 (format "%S" value)))
134 ((memq key '(face font-lock-face)) 121 ((memq key '(face font-lock-face mouse-face))
135 (widget-create 'link 122 (widget-create 'link
136 :notify `(lambda (&rest ignore) 123 :notify `(lambda (&rest ignore)
137 (describe-face ',value)) 124 (describe-face ',value))
138 (format "%S" value))) 125 (format "%S" value)))
139 ((eq key 'syntax-table)
140 (widget-create 'push-button
141 :tag "show"
142 :action (lambda (widget &optional event)
143 (with-output-to-temp-buffer
144 "*Pp Eval Output*"
145 (pp (widget-get widget :value))))
146 value))
147 ((widgetp value) 126 ((widgetp value)
148 (describe-text-widget value)) 127 (describe-text-widget value))
149 (t 128 (t
150 (widget-insert value)))) 129 (describe-text-sexp value))))
151 (widget-insert "\n"))) 130 (widget-insert "\n")))
152 131
153;;; Describe-Text Commands. 132;;; Describe-Text Commands.
@@ -544,10 +523,17 @@ as well as widgets, buttons, overlays, and text properties."
544 (dotimes (i (length disp-vector)) 523 (dotimes (i (length disp-vector))
545 (setq char (aref disp-vector i)) 524 (setq char (aref disp-vector i))
546 (aset disp-vector i 525 (aset disp-vector i
547 (cons char (describe-char-display pos char)))) 526 (cons char (describe-char-display
527 pos (logand char #x7ffff)))))
548 (format "by display table entry [%s] (see below)" 528 (format "by display table entry [%s] (see below)"
549 (mapconcat #'(lambda (x) (format "?%c" (car x))) 529 (mapconcat
550 disp-vector " "))) 530 #'(lambda (x)
531 (if (> (car x) #x7ffff)
532 (format "?%c<face-id=%s>"
533 (logand (car x) #x7ffff)
534 (lsh (car x) -19))
535 (format "?%c" (car x))))
536 disp-vector " ")))
551 (composition 537 (composition
552 (let ((from (car composition)) 538 (let ((from (car composition))
553 (to (nth 1 composition)) 539 (to (nth 1 composition))
@@ -618,7 +604,7 @@ as well as widgets, buttons, overlays, and text properties."
618 (progn 604 (progn
619 (insert "these fonts (glyph codes):\n") 605 (insert "these fonts (glyph codes):\n")
620 (dotimes (i (length disp-vector)) 606 (dotimes (i (length disp-vector))
621 (insert (car (aref disp-vector i)) ?: 607 (insert (logand (car (aref disp-vector i)) #x7ffff) ?:
622 (propertize " " 'display '(space :align-to 5)) 608 (propertize " " 'display '(space :align-to 5))
623 (if (cdr (aref disp-vector i)) 609 (if (cdr (aref disp-vector i))
624 (format "%s (0x%02X)" (cadr (aref disp-vector i)) 610 (format "%s (0x%02X)" (cadr (aref disp-vector i))
diff --git a/lisp/dired.el b/lisp/dired.el
index 19ea0768e2b..037bf282eda 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1104,6 +1104,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
1104 (let ((map (make-keymap))) 1104 (let ((map (make-keymap)))
1105 (suppress-keymap map) 1105 (suppress-keymap map)
1106 (define-key map [mouse-2] 'dired-mouse-find-file-other-window) 1106 (define-key map [mouse-2] 'dired-mouse-find-file-other-window)
1107 (define-key map [follow-link] 'mouse-face)
1107 ;; Commands to mark or flag certain categories of files 1108 ;; Commands to mark or flag certain categories of files
1108 (define-key map "#" 'dired-flag-auto-save-files) 1109 (define-key map "#" 'dired-flag-auto-save-files)
1109 (define-key map "." 'dired-clean-directory) 1110 (define-key map "." 'dired-clean-directory)
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 2f22388d87d..9ba613b267d 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -2178,7 +2178,7 @@ list that represents a doc string reference.
2178 (let ((old-load-list current-load-list) 2178 (let ((old-load-list current-load-list)
2179 (args (mapcar 'eval (cdr form)))) 2179 (args (mapcar 'eval (cdr form))))
2180 (apply 'require args) 2180 (apply 'require args)
2181 ;; Detech (require 'cl) in a way that works even if cl is already loaded. 2181 ;; Detect (require 'cl) in a way that works even if cl is already loaded.
2182 (if (member (car args) '("cl" cl)) 2182 (if (member (car args) '("cl" cl))
2183 (setq byte-compile-warnings 2183 (setq byte-compile-warnings
2184 (remq 'cl-functions byte-compile-warnings)))) 2184 (remq 'cl-functions byte-compile-warnings))))
diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el
index 090f793c700..82882d6c2b7 100644
--- a/lisp/emacs-lisp/lisp.el
+++ b/lisp/emacs-lisp/lisp.el
@@ -192,8 +192,7 @@ open-parenthesis, and point ends up at the beginning of the line.
192If variable `beginning-of-defun-function' is non-nil, its value 192If variable `beginning-of-defun-function' is non-nil, its value
193is called as a function to find the defun's beginning." 193is called as a function to find the defun's beginning."
194 (interactive "p") 194 (interactive "p")
195 (or inhibit-mark-movement 195 (or (not (eq this-command 'beginning-of-defun))
196 (not (eq this-command 'beginning-of-defun))
197 (eq last-command 'beginning-of-defun) 196 (eq last-command 'beginning-of-defun)
198 (and transient-mark-mode mark-active) 197 (and transient-mark-mode mark-active)
199 (push-mark)) 198 (push-mark))
@@ -245,8 +244,7 @@ matches the open-parenthesis that starts a defun; see function
245If variable `end-of-defun-function' is non-nil, its value 244If variable `end-of-defun-function' is non-nil, its value
246is called as a function to find the defun's end." 245is called as a function to find the defun's end."
247 (interactive "p") 246 (interactive "p")
248 (or inhibit-mark-movement 247 (or (not (eq this-command 'end-of-defun))
249 (not (eq this-command 'end-of-defun))
250 (eq last-command 'end-of-defun) 248 (eq last-command 'end-of-defun)
251 (and transient-mark-mode mark-active) 249 (and transient-mark-mode mark-active)
252 (push-mark)) 250 (push-mark))
diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el
index 523a07d26de..24adae30040 100644
--- a/lisp/emulation/cua-base.el
+++ b/lisp/emulation/cua-base.el
@@ -1003,14 +1003,6 @@ Extra commands should be added to `cua-movement-commands'")
1003(defvar cua-movement-commands nil 1003(defvar cua-movement-commands nil
1004 "User may add additional movement commands to this list.") 1004 "User may add additional movement commands to this list.")
1005 1005
1006(defvar cua--preserve-mark-commands
1007 '(end-of-buffer beginning-of-buffer)
1008 "List of movement commands that move the mark.
1009CUA will preserve the previous mark position if a mark is already
1010active before one of these commands is executed.")
1011
1012(defvar cua--undo-push-mark nil)
1013
1014;;; Scrolling commands which does not signal errors at top/bottom 1006;;; Scrolling commands which does not signal errors at top/bottom
1015;;; of buffer at first key-press (instead moves to top/bottom 1007;;; of buffer at first key-press (instead moves to top/bottom
1016;;; of buffer). 1008;;; of buffer).
@@ -1100,11 +1092,7 @@ If ARG is the atom `-', scroll upward by nearly full screen."
1100 (aref (if window-system 1092 (aref (if window-system
1101 (this-single-command-raw-keys) 1093 (this-single-command-raw-keys)
1102 (this-single-command-keys)) 0))) 1094 (this-single-command-keys)) 0)))
1103 (if mark-active 1095 (unless mark-active
1104 (if (and (memq this-command cua--preserve-mark-commands)
1105 (not inhibit-mark-movement))
1106 (setq cua--undo-push-mark t
1107 inhibit-mark-movement t))
1108 (push-mark-command nil t)) 1096 (push-mark-command nil t))
1109 (setq cua--last-region-shifted t) 1097 (setq cua--last-region-shifted t)
1110 (setq cua--explicit-region-start nil)) 1098 (setq cua--explicit-region-start nil))
@@ -1151,9 +1139,6 @@ If ARG is the atom `-', scroll upward by nearly full screen."
1151(defun cua--post-command-handler () 1139(defun cua--post-command-handler ()
1152 (condition-case nil 1140 (condition-case nil
1153 (progn 1141 (progn
1154 (when cua--undo-push-mark
1155 (setq cua--undo-push-mark nil
1156 inhibit-mark-movement nil))
1157 (when cua--global-mark-active 1142 (when cua--global-mark-active
1158 (cua--global-mark-post-command)) 1143 (cua--global-mark-post-command))
1159 (when (fboundp 'cua--rectangle-post-command) 1144 (when (fboundp 'cua--rectangle-post-command)
diff --git a/lisp/faces.el b/lisp/faces.el
index 5a7c119899d..dc4fddd8ae6 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -1784,7 +1784,7 @@ created."
1784 1784
1785 1785
1786(defface mode-line 1786(defface mode-line
1787 '((((type x w32 mac) (class color)) 1787 '((((class color) (min-colors 88))
1788 :box (:line-width -1 :style released-button) 1788 :box (:line-width -1 :style released-button)
1789 :background "grey75" :foreground "black") 1789 :background "grey75" :foreground "black")
1790 (t 1790 (t
@@ -1797,11 +1797,11 @@ created."
1797(defface mode-line-inactive 1797(defface mode-line-inactive
1798 '((default 1798 '((default
1799 :inherit mode-line) 1799 :inherit mode-line)
1800 (((type x w32 mac) (background light) (class color)) 1800 (((class color) (min-colors 88) (background light))
1801 :weight light 1801 :weight light
1802 :box (:line-width -1 :color "grey75" :style nil) 1802 :box (:line-width -1 :color "grey75" :style nil)
1803 :foreground "grey20" :background "grey90") 1803 :foreground "grey20" :background "grey90")
1804 (((type x w32 mac) (background dark) (class color)) 1804 (((class color) (min-colors 88) (background dark) )
1805 :weight light 1805 :weight light
1806 :box (:line-width -1 :color "grey40" :style nil) 1806 :box (:line-width -1 :color "grey40" :style nil)
1807 :foreground "grey80" :background "grey30")) 1807 :foreground "grey80" :background "grey30"))
@@ -2032,8 +2032,8 @@ Note: Other faces cannot inherit from the cursor face."
2032 2032
2033(defface escape-glyph '((((background dark)) :foreground "cyan") 2033(defface escape-glyph '((((background dark)) :foreground "cyan")
2034 (((type pc)) :foreground "magenta") 2034 (((type pc)) :foreground "magenta")
2035 (t :foreground "dark blue")) 2035 (t :foreground "blue"))
2036 "Face for displaying \\ and ^ in multichar glyphs." 2036 "Face for characters displayed as ^-sequences or \-sequences."
2037 :group 'basic-faces) 2037 :group 'basic-faces)
2038 2038
2039;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2039;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 518a9903085..bb7b8337f4c 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,9 @@
12004-12-17 Kim F. Storm <storm@cua.dk>
2
3 * gnus-group.el (gnus-group-mode-map): Map follow-link to mouse-face.
4
5 * gnus-sum.el (gnus-summary-mode-map): Likewise.
6
12004-12-08 Stefan Monnier <monnier@iro.umontreal.ca> 72004-12-08 Stefan Monnier <monnier@iro.umontreal.ca>
2 8
3 * gnus-art.el (gnus-narrow-to-page): Don't hardcode point-min. 9 * gnus-art.el (gnus-narrow-to-page): Don't hardcode point-min.
@@ -905,7 +911,7 @@
905 * gnus-delay.el (gnus-delay-default-hour): Add :version. 911 * gnus-delay.el (gnus-delay-default-hour): Add :version.
906 912
907 * gnus-cite.el (gnus-cite-blank-line-after-header) 913 * gnus-cite.el (gnus-cite-blank-line-after-header)
908 (gnus-article-boring-faces): 914 (gnus-article-boring-faces):
909 915
910 * gnus-art.el (gnus-buttonized-mime-types) 916 * gnus-art.el (gnus-buttonized-mime-types)
911 (gnus-inhibit-mime-unbuttonizing) 917 (gnus-inhibit-mime-unbuttonizing)
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index b7d0cf9eef4..336b635a6a0 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -591,6 +591,7 @@ simple manner.")
591 "\M-e" gnus-group-edit-group-method 591 "\M-e" gnus-group-edit-group-method
592 "^" gnus-group-enter-server-mode 592 "^" gnus-group-enter-server-mode
593 gnus-mouse-2 gnus-mouse-pick-group 593 gnus-mouse-2 gnus-mouse-pick-group
594 [follow-link] mouse-face
594 "<" beginning-of-buffer 595 "<" beginning-of-buffer
595 ">" end-of-buffer 596 ">" end-of-buffer
596 "\C-c\C-b" gnus-bug 597 "\C-c\C-b" gnus-bug
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 0971bb2a265..1f6f5437841 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -1703,6 +1703,7 @@ increase the score of each group you read."
1703 "Q" gnus-summary-exit-no-update 1703 "Q" gnus-summary-exit-no-update
1704 "\C-c\C-i" gnus-info-find-node 1704 "\C-c\C-i" gnus-info-find-node
1705 gnus-mouse-2 gnus-mouse-pick-article 1705 gnus-mouse-2 gnus-mouse-pick-article
1706 [follow-link] mouse-face
1706 "m" gnus-summary-mail-other-window 1707 "m" gnus-summary-mail-other-window
1707 "a" gnus-summary-post-news 1708 "a" gnus-summary-post-news
1708 "i" gnus-summary-news-other-window 1709 "i" gnus-summary-news-other-window
@@ -5096,7 +5097,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
5096 5097
5097 (when gnus-agent 5098 (when gnus-agent
5098 (gnus-agent-possibly-alter-active group (gnus-active group) info) 5099 (gnus-agent-possibly-alter-active group (gnus-active group) info)
5099 5100
5100 (setq gnus-summary-use-undownloaded-faces 5101 (setq gnus-summary-use-undownloaded-faces
5101 (gnus-agent-find-parameter 5102 (gnus-agent-find-parameter
5102 group 5103 group
@@ -7044,7 +7045,7 @@ If optional argument UNREAD is non-nil, only unread article is selected."
7044 (gnus-summary-goto-subject article t))) 7045 (gnus-summary-goto-subject article t)))
7045 (gnus-summary-limit (append articles gnus-newsgroup-limit)) 7046 (gnus-summary-limit (append articles gnus-newsgroup-limit))
7046 (gnus-summary-position-point)) 7047 (gnus-summary-position-point))
7047 7048
7048(defun gnus-summary-goto-subject (article &optional force silent) 7049(defun gnus-summary-goto-subject (article &optional force silent)
7049 "Go the subject line of ARTICLE. 7050 "Go the subject line of ARTICLE.
7050If FORCE, also allow jumping to articles not currently shown." 7051If FORCE, also allow jumping to articles not currently shown."
@@ -9140,7 +9141,7 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
9140 9141
9141 ;;;!!!Why is this necessary? 9142 ;;;!!!Why is this necessary?
9142 (set-buffer gnus-summary-buffer) 9143 (set-buffer gnus-summary-buffer)
9143 9144
9144 (gnus-summary-goto-subject article) 9145 (gnus-summary-goto-subject article)
9145 (when (eq action 'move) 9146 (when (eq action 'move)
9146 (gnus-summary-mark-article article gnus-canceled-mark)))) 9147 (gnus-summary-mark-article article gnus-canceled-mark))))
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index c06a7b1ee73..f799fbd9be7 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -478,8 +478,13 @@ Return 0 if there is no such symbol."
478 (and (symbolp obj) (boundp obj) obj)))) 478 (and (symbolp obj) (boundp obj) obj))))
479 (error nil)) 479 (error nil))
480 (let* ((str (find-tag-default)) 480 (let* ((str (find-tag-default))
481 (obj (if str (intern str)))) 481 (sym (if str (intern-soft str))))
482 (and (symbolp obj) (boundp obj) obj)) 482 (if (and sym (boundp sym))
483 sym
484 (save-match-data
485 (when (and str (string-match "\\`\\W*\\(.*?\\)\\W*\\'" str))
486 (setq sym (intern-soft (match-string 1 str)))
487 (and (boundp sym) sym)))))
483 0)) 488 0))
484 489
485;;;###autoload 490;;;###autoload
@@ -564,6 +569,7 @@ it is displayed along with the global value."
564 (insert " value is shown ") 569 (insert " value is shown ")
565 (insert-button "below" 570 (insert-button "below"
566 'action help-button-cache 571 'action help-button-cache
572 'follow-link t
567 'help-echo "mouse-2, RET: show value") 573 'help-echo "mouse-2, RET: show value")
568 (insert ".\n\n"))) 574 (insert ".\n\n")))
569 ;; Add a note for variables that have been make-var-buffer-local. 575 ;; Add a note for variables that have been make-var-buffer-local.
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index a2dcdf91ed8..e9d3561d251 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -68,6 +68,7 @@ The format is (FUNCTION ARGS...).")
68;; Button types used by help 68;; Button types used by help
69 69
70(define-button-type 'help-xref 70(define-button-type 'help-xref
71 'follow-link t
71 'action #'help-button-action) 72 'action #'help-button-action)
72 73
73(defun help-button-action (button) 74(defun help-button-action (button)
diff --git a/lisp/help.el b/lisp/help.el
index 5ec9b1f5299..f5831c9ab3f 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -267,8 +267,13 @@ If that doesn't give a function, return nil."
267 (and (symbolp obj) (fboundp obj) obj)))) 267 (and (symbolp obj) (fboundp obj) obj))))
268 (error nil)))) 268 (error nil))))
269 (let* ((str (find-tag-default)) 269 (let* ((str (find-tag-default))
270 (obj (if str (intern str)))) 270 (sym (if str (intern-soft str))))
271 (and (symbolp obj) (fboundp obj) obj)))) 271 (if (and sym (fboundp sym))
272 sym
273 (save-match-data
274 (when (and str (string-match "\\`\\W*\\(.*?\\)\\W*\\'" str))
275 (setq sym (intern-soft (match-string 1 str)))
276 (and (fboundp sym) sym)))))))
272 277
273 278
274;;; `User' help functions 279;;; `User' help functions
@@ -609,17 +614,58 @@ the last key hit are used."
609 (princ "\n which is ") 614 (princ "\n which is ")
610 (describe-function-1 defn) 615 (describe-function-1 defn)
611 (when up-event 616 (when up-event
612 (let ((defn (or (string-key-binding up-event) (key-binding up-event)))) 617 (let ((ev (aref up-event 0))
618 (descr (key-description up-event))
619 (hdr "\n\n-------------- up event ---------------\n\n")
620 defn
621 mouse-1-tricky mouse-1-remapped)
622 (when (and (consp ev)
623 (eq (car ev) 'mouse-1)
624 (windowp window)
625 mouse-1-click-follows-link
626 (not (eq mouse-1-click-follows-link 'double))
627 (with-current-buffer (window-buffer window)
628 (mouse-on-link-p (posn-point (event-start ev)))))
629 (setq mouse-1-tricky (integerp mouse-1-click-follows-link)
630 mouse-1-remapped (or (not mouse-1-tricky)
631 (> mouse-1-click-follows-link 0)))
632 (if mouse-1-remapped
633 (setcar ev 'mouse-2)))
634 (setq defn (or (string-key-binding up-event) (key-binding up-event)))
613 (unless (or (null defn) (integerp defn) (equal defn 'undefined)) 635 (unless (or (null defn) (integerp defn) (equal defn 'undefined))
614 (princ "\n\n-------------- up event ---------------\n\n") 636 (princ (if mouse-1-tricky
615 (princ (key-description up-event)) 637 "\n\n----------------- up-event (short click) ----------------\n\n"
638 hdr))
639 (setq hdr nil)
640 (princ descr)
616 (if (windowp window) 641 (if (windowp window)
617 (princ " at that spot")) 642 (princ " at that spot"))
643 (if mouse-1-remapped
644 (princ " is remapped to <mouse-2>\n which" ))
618 (princ " runs the command ") 645 (princ " runs the command ")
619 (prin1 defn) 646 (prin1 defn)
620 (princ "\n which is ") 647 (princ "\n which is ")
621 (describe-function-1 defn)))) 648 (describe-function-1 defn))
622 (print-help-return-message))))))) 649 (when mouse-1-tricky
650 (setcar ev
651 (if (> mouse-1-click-follows-link 0) 'mouse-1 'mouse-2))
652 (setq defn (or (string-key-binding up-event) (key-binding up-event)))
653 (unless (or (null defn) (integerp defn) (equal defn 'undefined))
654 (princ (or hdr
655 "\n\n----------------- up-event (long click) ----------------\n\n"))
656 (princ "Pressing ")
657 (princ descr)
658 (if (windowp window)
659 (princ " at that spot"))
660 (princ (format " for longer than %d milli-seconds\n"
661 (abs mouse-1-click-follows-link)))
662 (if (not mouse-1-remapped)
663 (princ " remaps it to <mouse-2> which" ))
664 (princ " runs the command ")
665 (prin1 defn)
666 (princ "\n which is ")
667 (describe-function-1 defn))))
668 (print-help-return-message))))))))
623 669
624 670
625(defun describe-mode (&optional buffer) 671(defun describe-mode (&optional buffer)
@@ -692,6 +738,7 @@ whose documentation describes the minor mode."
692 (princ " ") 738 (princ " ")
693 (insert-button pretty-minor-mode 739 (insert-button pretty-minor-mode
694 'action (car help-button-cache) 740 'action (car help-button-cache)
741 'follow-link t
695 'help-echo "mouse-2, RET: show full information") 742 'help-echo "mouse-2, RET: show full information")
696 (princ (format " minor mode (%s):\n" 743 (princ (format " minor mode (%s):\n"
697 (if indicator 744 (if indicator
diff --git a/lisp/info-look.el b/lisp/info-look.el
index 388415ec8c1..bc886f0320c 100644
--- a/lisp/info-look.el
+++ b/lisp/info-look.el
@@ -47,7 +47,7 @@ Automatically becomes buffer local when set in any fashion.")
47 "Non-nil means pop up the Info buffer in another window." 47 "Non-nil means pop up the Info buffer in another window."
48 :group 'info-lookup :type 'boolean) 48 :group 'info-lookup :type 'boolean)
49 49
50(defcustom info-lookup-highlight-face 'highlight 50(defcustom info-lookup-highlight-face 'match
51 "Face for highlighting looked up help items. 51 "Face for highlighting looked up help items.
52Setting this variable to nil disables highlighting." 52Setting this variable to nil disables highlighting."
53 :group 'info-lookup :type 'face) 53 :group 'info-lookup :type 'face)
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index 2feaaeabf20..6aff3e4f497 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -1359,11 +1359,12 @@ Return the input string."
1359 (while quail-translating 1359 (while quail-translating
1360 (set-buffer-modified-p modified-p) 1360 (set-buffer-modified-p modified-p)
1361 (quail-show-guidance) 1361 (quail-show-guidance)
1362 (let* ((keyseq (read-key-sequence 1362 (let* ((prompt (if input-method-use-echo-area
1363 (and input-method-use-echo-area 1363 (format "%s%s %s"
1364 (concat input-method-previous-message 1364 (or input-method-previous-message "")
1365 quail-current-str)) 1365 quail-current-str
1366 nil nil t)) 1366 quail-guidance-str)))
1367 (keyseq (read-key-sequence prompt nil nil t))
1367 (cmd (lookup-key (quail-translation-keymap) keyseq))) 1368 (cmd (lookup-key (quail-translation-keymap) keyseq)))
1368 (if (if key 1369 (if (if key
1369 (and (commandp cmd) (not (eq cmd 'quail-other-command))) 1370 (and (commandp cmd) (not (eq cmd 'quail-other-command)))
@@ -1424,12 +1425,13 @@ Return the input string."
1424 quail-translating t) 1425 quail-translating t)
1425 (quail-setup-overlays nil))) 1426 (quail-setup-overlays nil)))
1426 (quail-show-guidance) 1427 (quail-show-guidance)
1427 (let* ((keyseq (read-key-sequence 1428 (let* ((prompt (if input-method-use-echo-area
1428 (and input-method-use-echo-area 1429 (format "%s%s%s %s"
1429 (concat input-method-previous-message 1430 (or input-method-previous-message "")
1430 quail-conversion-str 1431 quail-conversion-str
1431 quail-current-str)) 1432 quail-current-str
1432 nil nil t)) 1433 quail-guidance-str)))
1434 (keyseq (read-key-sequence prompt nil nil t))
1433 (cmd (lookup-key (quail-conversion-keymap) keyseq))) 1435 (cmd (lookup-key (quail-conversion-keymap) keyseq)))
1434 (if (if key (commandp cmd) (eq cmd 'quail-self-insert-command)) 1436 (if (if key (commandp cmd) (eq cmd 'quail-self-insert-command))
1435 (progn 1437 (progn
@@ -1938,10 +1940,10 @@ minibuffer and the selected frame has no other windows)."
1938 1940
1939 ;; Then, show the guidance. 1941 ;; Then, show the guidance.
1940 (when (and (quail-require-guidance-buf) 1942 (when (and (quail-require-guidance-buf)
1943 (not input-method-use-echo-area)
1941 (null unread-command-events) 1944 (null unread-command-events)
1942 (null unread-post-input-method-events)) 1945 (null unread-post-input-method-events))
1943 (if (or (eq (selected-window) (minibuffer-window)) 1946 (if (eq (selected-window) (minibuffer-window))
1944 input-method-use-echo-area)
1945 (if (eq (minibuffer-window) (frame-root-window)) 1947 (if (eq (minibuffer-window) (frame-root-window))
1946 ;; Use another frame. It is sure that we are using some 1948 ;; Use another frame. It is sure that we are using some
1947 ;; window system. 1949 ;; window system.
diff --git a/lisp/isearch.el b/lisp/isearch.el
index b15a8f5affe..fb31c3a2587 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -649,7 +649,7 @@ is treated as a regexp. See \\[isearch-forward] for more info."
649 (setq ;; quit-flag nil not for isearch-mode 649 (setq ;; quit-flag nil not for isearch-mode
650 isearch-adjusted nil 650 isearch-adjusted nil
651 isearch-yank-flag nil) 651 isearch-yank-flag nil)
652 (isearch-lazy-highlight-new-loop) 652 (if isearch-lazy-highlight (isearch-lazy-highlight-new-loop))
653 ;; We must prevent the point moving to the end of composition when a 653 ;; We must prevent the point moving to the end of composition when a
654 ;; part of the composition has just been searched. 654 ;; part of the composition has just been searched.
655 (setq disable-point-adjustment t)) 655 (setq disable-point-adjustment t))
@@ -2329,8 +2329,7 @@ is nil. This function is called when exiting an incremental search if
2329 "Cleanup any previous `isearch-lazy-highlight' loop and begin a new one. 2329 "Cleanup any previous `isearch-lazy-highlight' loop and begin a new one.
2330This happens when `isearch-update' is invoked (which can cause the 2330This happens when `isearch-update' is invoked (which can cause the
2331search string to change or the window to scroll)." 2331search string to change or the window to scroll)."
2332 (when (and isearch-lazy-highlight 2332 (when (and (null executing-kbd-macro)
2333 (null executing-kbd-macro)
2334 (sit-for 0) ;make sure (window-start) is credible 2333 (sit-for 0) ;make sure (window-start) is credible
2335 (or (not (equal isearch-string 2334 (or (not (equal isearch-string
2336 isearch-lazy-highlight-last-string)) 2335 isearch-lazy-highlight-last-string))
diff --git a/lisp/mouse.el b/lisp/mouse.el
index b2fa71dde24..91e2e4ae5c6 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -49,6 +49,39 @@
49 :version "21.4" 49 :version "21.4"
50 :group 'mouse) 50 :group 'mouse)
51 51
52(defcustom mouse-1-click-follows-link 350
53 "Non-nil means that clicking Mouse-1 on a link follows the link.
54
55With the default setting, an ordinary Mouse-1 click on a link
56performs the same action as Mouse-2 on that link, while a longer
57Mouse-1 click \(hold down the Mouse-1 button for more than 350
58milliseconds) performs the original Mouse-1 binding \(which
59typically sets point where you click the mouse).
60
61If value is an integer, the time elapsed between pressing and
62releasing the mouse button determines whether to follow the link
63or perform the normal Mouse-1 action (typically set point).
64The absolute numeric value specifices the maximum duration of a
65\"short click\" in milliseconds. A positive value means that a
66short click follows the link, and a longer click performs the
67normal action. A negative value gives the opposite behaviour.
68
69If value is `double', a double click follows the link.
70
71Otherwise, a single Mouse-1 click unconditionally follows the link.
72
73Note that dragging the mouse never follows the link.
74
75This feature only works in modes that specifically identify
76clickable text as links, so it may not work with some external
77packages. See `mouse-on-link-p' for details."
78 :version "21.4"
79 :type '(choice (const :tag "Disabled" nil)
80 (const :tag "Double click" double)
81 (number :tag "Single click time limit" :value 350)
82 (other :tag "Single click" t))
83 :group 'mouse)
84
52 85
53;; Provide a mode-specific menu on a mouse button. 86;; Provide a mode-specific menu on a mouse button.
54 87
@@ -733,6 +766,51 @@ If the click is in the echo area, display the `*Messages*' buffer."
733 (run-hooks 'mouse-leave-buffer-hook) 766 (run-hooks 'mouse-leave-buffer-hook)
734 (mouse-drag-region-1 start-event)))) 767 (mouse-drag-region-1 start-event))))
735 768
769
770(defun mouse-on-link-p (pos)
771 "Return non-nil if POS is on a link in the current buffer.
772
773A clickable link is identified by one of the following methods:
774
7751) If the character at POS has a non-nil `follow-link' text or
776overlay property, the value of that property is returned.
777
7782) If there is a local key-binding or a keybinding at position
779POS for the `follow-link' event, the binding of that event
780determines whether POS is inside a link:
781
782- If the binding is `mouse-face', POS is inside a link if there
783is a non-nil `mouse-face' property at POS. Return t in this case.
784
785- If the binding is a function, FUNC, POS is inside a link if
786the call \(FUNC POS) returns non-nil. Return the return value
787from that call.
788
789- Otherwise, return the binding of the `follow-link' binding.
790
791The return value is interpreted as follows:
792
793- If it is a string, the mouse-1 event is translated into the
794first character of the string, i.e. the action of the mouse-1
795click is the local or global binding of that character.
796
797- If it is a vector, the mouse-1 event is translated into the
798first element of that vector, i.e. the action of the mouse-1
799click is the local or global binding of that event.
800
801- Otherwise, the mouse-1 event is translated into a mouse-2 event
802at the same position."
803 (or (get-char-property pos 'follow-link)
804 (save-excursion
805 (goto-char pos)
806 (let ((b (key-binding [follow-link] nil t)))
807 (cond
808 ((eq b 'mouse-face)
809 (and (get-char-property pos 'mouse-face) t))
810 ((functionp b)
811 (funcall b pos))
812 (t b))))))
813
736(defun mouse-drag-region-1 (start-event) 814(defun mouse-drag-region-1 (start-event)
737 (mouse-minibuffer-check start-event) 815 (mouse-minibuffer-check start-event)
738 (let* ((echo-keystrokes 0) 816 (let* ((echo-keystrokes 0)
@@ -749,6 +827,7 @@ If the click is in the echo area, display the `*Messages*' buffer."
749 (nth 3 bounds) 827 (nth 3 bounds)
750 ;; Don't count the mode line. 828 ;; Don't count the mode line.
751 (1- (nth 3 bounds)))) 829 (1- (nth 3 bounds))))
830 on-link remap-double-click
752 (click-count (1- (event-click-count start-event)))) 831 (click-count (1- (event-click-count start-event))))
753 (setq mouse-selection-click-count click-count) 832 (setq mouse-selection-click-count click-count)
754 (setq mouse-selection-click-count-buffer (current-buffer)) 833 (setq mouse-selection-click-count-buffer (current-buffer))
@@ -758,6 +837,13 @@ If the click is in the echo area, display the `*Messages*' buffer."
758 (if (< (point) start-point) 837 (if (< (point) start-point)
759 (goto-char start-point)) 838 (goto-char start-point))
760 (setq start-point (point)) 839 (setq start-point (point))
840 (setq on-link (and mouse-1-click-follows-link
841 (mouse-on-link-p start-point)))
842 (setq remap-double-click (and on-link
843 (eq mouse-1-click-follows-link 'double)
844 (= click-count 1)))
845 (if remap-double-click ;; Don't expand mouse overlay in links
846 (setq click-count 0))
761 (let ((range (mouse-start-end start-point start-point click-count))) 847 (let ((range (mouse-start-end start-point start-point click-count)))
762 (move-overlay mouse-drag-overlay (car range) (nth 1 range) 848 (move-overlay mouse-drag-overlay (car range) (nth 1 range)
763 (window-buffer start-window)) 849 (window-buffer start-window))
@@ -880,6 +966,28 @@ If the click is in the echo area, display the `*Messages*' buffer."
880 (or end-point 966 (or end-point
881 (= (window-start start-window) 967 (= (window-start start-window)
882 start-window-start))) 968 start-window-start)))
969 (if (and on-link
970 (not end-point)
971 (consp event)
972 (or remap-double-click
973 (and
974 (not (eq mouse-1-click-follows-link 'double))
975 (= click-count 0)
976 (= (event-click-count event) 1)
977 (not (input-pending-p))
978 (or (not (integerp mouse-1-click-follows-link))
979 (let ((t0 (posn-timestamp (event-start start-event)))
980 (t1 (posn-timestamp (event-end event))))
981 (and (integerp t0) (integerp t1)
982 (if (> mouse-1-click-follows-link 0)
983 (<= (- t1 t0) mouse-1-click-follows-link)
984 (< (- t0 t1) mouse-1-click-follows-link)))))
985 (or (not double-click-time)
986 (sit-for 0 (if (integerp double-click-time)
987 double-click-time 500) t)))))
988 (if (or (vectorp on-link) (stringp on-link))
989 (setq event (aref on-link 0))
990 (setcar event 'mouse-2)))
883 (setq unread-command-events 991 (setq unread-command-events
884 (cons event unread-command-events))))) 992 (cons event unread-command-events)))))
885 (delete-overlay mouse-drag-overlay))))) 993 (delete-overlay mouse-drag-overlay)))))
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index 4628af88178..d0a7cf7b65f 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -1105,9 +1105,11 @@ Return the difference in the format of a time value."
1105 ;; Do `PC-do-completion' without substitution 1105 ;; Do `PC-do-completion' without substitution
1106 (let* (save) 1106 (let* (save)
1107 (fset 'save (symbol-function 'substitute-in-file-name)) 1107 (fset 'save (symbol-function 'substitute-in-file-name))
1108 (fset 'substitute-in-file-name (symbol-function 'identity)) 1108 (unwind-protect
1109 ad-do-it 1109 (progn
1110 (fset 'substitute-in-file-name (symbol-function 'save))) 1110 (fset 'substitute-in-file-name (symbol-function 'identity))
1111 ad-do-it)
1112 (fset 'substitute-in-file-name (symbol-function 'save))))
1111 1113
1112 ;; Expand "$" 1114 ;; Expand "$"
1113 (let* ((beg (or (and (functionp 'minibuffer-prompt-end) ; Emacs 21 1115 (let* ((beg (or (and (functionp 'minibuffer-prompt-end) ; Emacs 21
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index b0448fd25e9..34572e98674 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -34,7 +34,7 @@
34;; 34;;
35;; Notes: 35;; Notes:
36;; ----- 36;; -----
37;; 37;;
38;; This package only works for Emacs 20 and higher, and for XEmacs 21 38;; This package only works for Emacs 20 and higher, and for XEmacs 21
39;; and higher. (XEmacs 20 is missing the `with-timeout' macro. Emacs 39;; and higher. (XEmacs 20 is missing the `with-timeout' macro. Emacs
40;; 19 is reported to have other problems. For XEmacs 21, you need the 40;; 19 is reported to have other problems. For XEmacs 21, you need the
@@ -205,7 +205,7 @@ file name, the backup directory is prepended with Tramp file name prefix
205 205
206gives the same backup policy for Tramp files on their hosts like the 206gives the same backup policy for Tramp files on their hosts like the
207policy for local files." 207policy for local files."
208 :type '(repeat 208 :type '(repeat
209 (list (regexp :tag "File regexp") 209 (list (regexp :tag "File regexp")
210 (string :tag "Backup Dir") 210 (string :tag "Backup Dir")
211 (set :inline t 211 (set :inline t
@@ -506,7 +506,7 @@ This variable defaults to the value of `tramp-encoding-shell'."
506 (tramp-copy-args nil) 506 (tramp-copy-args nil)
507 (tramp-copy-keep-date-arg "-p") 507 (tramp-copy-keep-date-arg "-p")
508 (tramp-password-end-of-line "xy")) ;see docstring for "xy" 508 (tramp-password-end-of-line "xy")) ;see docstring for "xy"
509 ("fcp" 509 ("fcp"
510 (tramp-connection-function tramp-open-connection-rsh) 510 (tramp-connection-function tramp-open-connection-rsh)
511 (tramp-login-program "fsh") 511 (tramp-login-program "fsh")
512 (tramp-copy-program "fcp") 512 (tramp-copy-program "fcp")
@@ -633,7 +633,7 @@ variable `tramp-methods'."
633 ("rsh" tramp-multi-connect-rlogin "rsh %h -l %u%n") 633 ("rsh" tramp-multi-connect-rlogin "rsh %h -l %u%n")
634 ("remsh" tramp-multi-connect-rlogin "remsh %h -l %u%n") 634 ("remsh" tramp-multi-connect-rlogin "remsh %h -l %u%n")
635 ("ssh" tramp-multi-connect-rlogin "ssh %h -l %u%n") 635 ("ssh" tramp-multi-connect-rlogin "ssh %h -l %u%n")
636 ("ssht" tramp-multi-connect-rlogin "ssh %h -e none -t -t -l %u%n") 636 ("ssht" tramp-multi-connect-rlogin "ssh %h -e none -t -t -l %u%n")
637 ("su" tramp-multi-connect-su "su - %u%n") 637 ("su" tramp-multi-connect-su "su - %u%n")
638 ("sudo" tramp-multi-connect-su "sudo -u %u -s -p Password:%n")) 638 ("sudo" tramp-multi-connect-su "sudo -u %u -s -p Password:%n"))
639 "*List of connection functions for multi-hop methods. 639 "*List of connection functions for multi-hop methods.
@@ -777,7 +777,7 @@ the info pages.")
777 "sudo" tramp-completion-function-alist-su) 777 "sudo" tramp-completion-function-alist-su)
778 (tramp-set-completion-function 778 (tramp-set-completion-function
779 "multi" nil) 779 "multi" nil)
780 (tramp-set-completion-function 780 (tramp-set-completion-function
781 "scpx" tramp-completion-function-alist-ssh) 781 "scpx" tramp-completion-function-alist-ssh)
782 (tramp-set-completion-function 782 (tramp-set-completion-function
783 "sshx" tramp-completion-function-alist-ssh) 783 "sshx" tramp-completion-function-alist-ssh)
@@ -1536,9 +1536,9 @@ cat /tmp/tramp.$$
1536rm -f /tmp/tramp.$$ 1536rm -f /tmp/tramp.$$
1537}" 1537}"
1538 "Shell function to implement `uudecode' to standard output. 1538 "Shell function to implement `uudecode' to standard output.
1539Many systems support `uudecode -o /dev/stdout' for this or 1539Many systems support `uudecode -o /dev/stdout' or `uudecode -o -'
1540`uudecode -o -' or `uudecode -p', but some systems don't, and for 1540for this or `uudecode -p', but some systems don't, and for them
1541them we have this shell function.") 1541we have this shell function.")
1542 1542
1543;; Perl script to implement `file-attributes' in a Lisp `read'able 1543;; Perl script to implement `file-attributes' in a Lisp `read'able
1544;; output. If you are hacking on this, note that you get *no* output 1544;; output. If you are hacking on this, note that you get *no* output
@@ -1960,10 +1960,9 @@ If VAR is nil, then we bind `v' to the structure and `multi-method',
1960(put 'with-parsed-tramp-file-name 'lisp-indent-function 2) 1960(put 'with-parsed-tramp-file-name 'lisp-indent-function 2)
1961;; To be activated for debugging containing this macro 1961;; To be activated for debugging containing this macro
1962;; It works only when VAR is nil. Otherwise, it can be deactivated by 1962;; It works only when VAR is nil. Otherwise, it can be deactivated by
1963;; (def-edebug-spec with-parsed-tramp-file-name 0) 1963;; (put 'with-parsed-tramp-file-name 'edebug-form-spec 0)
1964;; I'm too stupid to write a precise SPEC for it. 1964;; I'm too stupid to write a precise SPEC for it.
1965(if (functionp 'def-edebug-spec) 1965(put 'with-parsed-tramp-file-name 'edebug-form-spec t)
1966 (def-edebug-spec with-parsed-tramp-file-name t))
1967 1966
1968(defmacro tramp-let-maybe (variable value &rest body) 1967(defmacro tramp-let-maybe (variable value &rest body)
1969 "Let-bind VARIABLE to VALUE in BODY, but only if VARIABLE is not obsolete. 1968 "Let-bind VARIABLE to VALUE in BODY, but only if VARIABLE is not obsolete.
@@ -2056,7 +2055,7 @@ target of the symlink differ."
2056 (setq filename (tramp-file-name-localname 2055 (setq filename (tramp-file-name-localname
2057 (tramp-dissect-file-name 2056 (tramp-dissect-file-name
2058 (expand-file-name filename))))) 2057 (expand-file-name filename)))))
2059 2058
2060 ;; Right, they are on the same host, regardless of user, method, etc. 2059 ;; Right, they are on the same host, regardless of user, method, etc.
2061 ;; We now make the link on the remote machine. This will occur as the user 2060 ;; We now make the link on the remote machine. This will occur as the user
2062 ;; that FILENAME belongs to. 2061 ;; that FILENAME belongs to.
@@ -2065,7 +2064,7 @@ target of the symlink differ."
2065 l-multi-method l-method l-user l-host 2064 l-multi-method l-method l-user l-host
2066 (format "cd %s && %s -sf %s %s" 2065 (format "cd %s && %s -sf %s %s"
2067 cwd ln 2066 cwd ln
2068 filename 2067 filename
2069 l-localname) 2068 l-localname)
2070 t))))) 2069 t)))))
2071 2070
@@ -2347,9 +2346,9 @@ target of the symlink differ."
2347 "file attributes with perl: %s" 2346 "file attributes with perl: %s"
2348 (tramp-make-tramp-file-name 2347 (tramp-make-tramp-file-name
2349 multi-method method user host localname)) 2348 multi-method method user host localname))
2350 (tramp-maybe-send-perl-script tramp-perl-file-attributes 2349 (tramp-maybe-send-perl-script multi-method method user host
2351 "tramp_file_attributes" 2350 tramp-perl-file-attributes
2352 multi-method method user host) 2351 "tramp_file_attributes")
2353 (tramp-send-command multi-method method user host 2352 (tramp-send-command multi-method method user host
2354 (format "tramp_file_attributes %s %s" 2353 (format "tramp_file_attributes %s %s"
2355 (tramp-shell-quote-argument localname) id-format)) 2354 (tramp-shell-quote-argument localname) id-format))
@@ -2394,7 +2393,12 @@ target of the symlink differ."
2394;; This function makes the same assumption as 2393;; This function makes the same assumption as
2395;; `tramp-handle-set-visited-file-modtime'. 2394;; `tramp-handle-set-visited-file-modtime'.
2396(defun tramp-handle-verify-visited-file-modtime (buf) 2395(defun tramp-handle-verify-visited-file-modtime (buf)
2397 "Like `verify-visited-file-modtime' for tramp files." 2396 "Like `verify-visited-file-modtime' for tramp files.
2397At the time `verify-visited-file-modtime' calls this function, we
2398already know that the buffer is visiting a file and that
2399`visited-file-modtime' does not return 0. Do not call this
2400function directly, unless those two cases are already taken care
2401of."
2398 (with-current-buffer buf 2402 (with-current-buffer buf
2399 ;; There is no file visiting the buffer, or the buffer has no 2403 ;; There is no file visiting the buffer, or the buffer has no
2400 ;; recorded last modification time. 2404 ;; recorded last modification time.
@@ -2406,7 +2410,7 @@ target of the symlink differ."
2406 (let* ((attr (file-attributes f)) 2410 (let* ((attr (file-attributes f))
2407 (modtime (nth 5 attr)) 2411 (modtime (nth 5 attr))
2408 (mt (visited-file-modtime))) 2412 (mt (visited-file-modtime)))
2409 2413
2410 (cond 2414 (cond
2411 ;; file exists, and has a known modtime. 2415 ;; file exists, and has a known modtime.
2412 ((and attr (not (equal modtime '(0 0)))) 2416 ((and attr (not (equal modtime '(0 0))))
@@ -2689,9 +2693,9 @@ if the remote host can't provide the modtime."
2689 (save-excursion 2693 (save-excursion
2690 (setq directory (tramp-handle-expand-file-name directory)) 2694 (setq directory (tramp-handle-expand-file-name directory))
2691 (with-parsed-tramp-file-name directory nil 2695 (with-parsed-tramp-file-name directory nil
2692 (tramp-maybe-send-perl-script tramp-perl-directory-files-and-attributes 2696 (tramp-maybe-send-perl-script multi-method method user host
2693 "tramp_directory_files_and_attributes" 2697 tramp-perl-directory-files-and-attributes
2694 multi-method method user host) 2698 "tramp_directory_files_and_attributes")
2695 (tramp-send-command multi-method method user host 2699 (tramp-send-command multi-method method user host
2696 (format "tramp_directory_files_and_attributes %s %s" 2700 (format "tramp_directory_files_and_attributes %s %s"
2697 (tramp-shell-quote-argument localname) 2701 (tramp-shell-quote-argument localname)
@@ -2753,7 +2757,7 @@ if the remote host can't provide the modtime."
2753 (push (buffer-substring (point) 2757 (push (buffer-substring (point)
2754 (tramp-line-end-position)) 2758 (tramp-line-end-position))
2755 result)) 2759 result))
2756 2760
2757 (tramp-send-command multi-method method user host "cd") 2761 (tramp-send-command multi-method method user host "cd")
2758 (tramp-wait-for-output) 2762 (tramp-wait-for-output)
2759 2763
@@ -3096,6 +3100,12 @@ be a local filename. The method used must be an out-of-band method."
3096 3100
3097 ;; Use an asynchronous process. By this, password can be handled. 3101 ;; Use an asynchronous process. By this, password can be handled.
3098 (save-excursion 3102 (save-excursion
3103
3104 ;; Check for program.
3105 (when (and (fboundp 'executable-find)
3106 (not (executable-find copy-program)))
3107 (error "Cannot find copy program: %s" copy-program))
3108
3099 (set-buffer trampbuf) 3109 (set-buffer trampbuf)
3100 (setq tramp-current-multi-method multi-method 3110 (setq tramp-current-multi-method multi-method
3101 tramp-current-method method 3111 tramp-current-method method
@@ -3170,15 +3180,15 @@ This is like `dired-recursive-delete-directory' for tramp files."
3170 'file-error 3180 'file-error
3171 (list "Removing old file name" "no such directory" filename))) 3181 (list "Removing old file name" "no such directory" filename)))
3172 ;; Which is better, -r or -R? (-r works for me <daniel@danann.net>) 3182 ;; Which is better, -r or -R? (-r works for me <daniel@danann.net>)
3173 (tramp-send-command multi-method method user host 3183 (tramp-send-command multi-method method user host
3174 (format "rm -r %s" (tramp-shell-quote-argument localname))) 3184 (format "rm -r %s" (tramp-shell-quote-argument localname)))
3175 ;; Wait for the remote system to return to us... 3185 ;; Wait for the remote system to return to us...
3176 ;; This might take a while, allow it plenty of time. 3186 ;; This might take a while, allow it plenty of time.
3177 (tramp-wait-for-output 120) 3187 (tramp-wait-for-output 120)
3178 ;; Make sure that it worked... 3188 ;; Make sure that it worked...
3179 (and (file-exists-p filename) 3189 (and (file-exists-p filename)
3180 (error "Failed to recusively delete %s" filename)))) 3190 (error "Failed to recursively delete %s" filename))))
3181 3191
3182(defun tramp-handle-dired-call-process (program discard &rest arguments) 3192(defun tramp-handle-dired-call-process (program discard &rest arguments)
3183 "Like `dired-call-process' for tramp files." 3193 "Like `dired-call-process' for tramp files."
3184 (with-parsed-tramp-file-name default-directory nil 3194 (with-parsed-tramp-file-name default-directory nil
@@ -3200,7 +3210,7 @@ This is like `dired-recursive-delete-directory' for tramp files."
3200 (tramp-send-command-and-check multi-method method user host nil) 3210 (tramp-send-command-and-check multi-method method user host nil)
3201 (tramp-send-command multi-method method user host "cd") 3211 (tramp-send-command multi-method method user host "cd")
3202 (tramp-wait-for-output))))) 3212 (tramp-wait-for-output)))))
3203 3213
3204(defun tramp-handle-dired-compress-file (file &rest ok-flag) 3214(defun tramp-handle-dired-compress-file (file &rest ok-flag)
3205 "Like `dired-compress-file' for tramp files." 3215 "Like `dired-compress-file' for tramp files."
3206 ;; OK-FLAG is valid for XEmacs only, but not implemented. 3216 ;; OK-FLAG is valid for XEmacs only, but not implemented.
@@ -3568,7 +3578,7 @@ This will break if COMMAND prints a newline, followed by the value of
3568 (when (and (numberp buffer) (zerop buffer)) 3578 (when (and (numberp buffer) (zerop buffer))
3569 (error "Implementation does not handle immediate return")) 3579 (error "Implementation does not handle immediate return"))
3570 (when (consp buffer) (error "Implementation does not handle error files")) 3580 (when (consp buffer) (error "Implementation does not handle error files"))
3571 (shell-command 3581 (shell-command
3572 (mapconcat 'tramp-shell-quote-argument 3582 (mapconcat 'tramp-shell-quote-argument
3573 (cons program args) 3583 (cons program args)
3574 " ") 3584 " ")
@@ -4250,7 +4260,7 @@ necessary anymore."
4250;; `tramp-completion-file-name-regexp-unified' aren't different. 4260;; `tramp-completion-file-name-regexp-unified' aren't different.
4251;; If nil, `tramp-completion-run-real-handler' is called (i.e. forwarding to 4261;; If nil, `tramp-completion-run-real-handler' is called (i.e. forwarding to
4252;; `tramp-file-name-handler'). Otherwise, it takes `tramp-run-real-handler'. 4262;; `tramp-file-name-handler'). Otherwise, it takes `tramp-run-real-handler'.
4253;; Using `last-input-event' is a little bit risky, because completing a file 4263;; Using `last-input-event' is a little bit risky, because completing a file
4254;; might require loading other files, like "~/.netrc", and for them it 4264;; might require loading other files, like "~/.netrc", and for them it
4255;; shouldn't be decided based on that variable. On the other hand, those files 4265;; shouldn't be decided based on that variable. On the other hand, those files
4256;; shouldn't have partial tramp file name syntax. Maybe another variable should 4266;; shouldn't have partial tramp file name syntax. Maybe another variable should
@@ -4354,7 +4364,7 @@ necessary anymore."
4354 (funcall (nth 0 x) (nth 1 x))))) 4364 (funcall (nth 0 x) (nth 1 x)))))
4355 (tramp-get-completion-function m)) 4365 (tramp-get-completion-function m))
4356 4366
4357 (setq result (append result 4367 (setq result (append result
4358 (mapcar 4368 (mapcar
4359 (lambda (x) 4369 (lambda (x)
4360 (tramp-get-completion-user-host 4370 (tramp-get-completion-user-host
@@ -4395,7 +4405,7 @@ necessary anymore."
4395;; [nil nil "x" nil nil] 4405;; [nil nil "x" nil nil]
4396;; [nil "x" nil nil nil] 4406;; [nil "x" nil nil nil]
4397 4407
4398;; "/x:" "/x:y" "/x:y:" 4408;; "/x:" "/x:y" "/x:y:"
4399;; [nil nil nil "x" ""] [nil nil nil "x" "y"] [nil "x" nil "y" ""] 4409;; [nil nil nil "x" ""] [nil nil nil "x" "y"] [nil "x" nil "y" ""]
4400;; "/[x/" "/[x/y" 4410;; "/[x/" "/[x/y"
4401;; [nil "x" nil "" nil] [nil "x" nil "y" nil] 4411;; [nil "x" nil "" nil] [nil "x" nil "y" nil]
@@ -4769,7 +4779,7 @@ User may be nil."
4769 4779
4770;;; Internal Functions: 4780;;; Internal Functions:
4771 4781
4772(defun tramp-maybe-send-perl-script (script name multi-method method user host) 4782(defun tramp-maybe-send-perl-script (multi-method method user host script name)
4773 "Define in remote shell function NAME implemented as perl SCRIPT. 4783 "Define in remote shell function NAME implemented as perl SCRIPT.
4774Only send the definition if it has not already been done. 4784Only send the definition if it has not already been done.
4775Function may have 0-3 parameters." 4785Function may have 0-3 parameters."
@@ -4864,7 +4874,7 @@ TIME is an Emacs internal time value as returned by `current-time'."
4864 "touch" nil (current-buffer) nil "-t" touch-time file)) 4874 "touch" nil (current-buffer) nil "-t" touch-time file))
4865 (pop-to-buffer (current-buffer)) 4875 (pop-to-buffer (current-buffer))
4866 (error "tramp-touch: touch failed")))))) 4876 (error "tramp-touch: touch failed"))))))
4867 4877
4868(defun tramp-buffer-name (multi-method method user host) 4878(defun tramp-buffer-name (multi-method method user host)
4869 "A name for the connection buffer for USER at HOST using METHOD." 4879 "A name for the connection buffer for USER at HOST using METHOD."
4870 (if multi-method 4880 (if multi-method
@@ -5022,7 +5032,7 @@ file exists and nonzero exit status otherwise."
5022 (file-exists-p existing) 5032 (file-exists-p existing)
5023 (not (file-exists-p nonexisting)))) 5033 (not (file-exists-p nonexisting))))
5024 (error "Couldn't find command to check if file exists.")))) 5034 (error "Couldn't find command to check if file exists."))))
5025 5035
5026 5036
5027;; CCC test ksh or bash found for tilde expansion? 5037;; CCC test ksh or bash found for tilde expansion?
5028(defun tramp-find-shell (multi-method method user host) 5038(defun tramp-find-shell (multi-method method user host)
@@ -5121,9 +5131,9 @@ Returns nil if none was found, else the command is returned."
5121 (tramp-check-ls-commands multi-method method user host "gnuls" tramp-remote-path) 5131 (tramp-check-ls-commands multi-method method user host "gnuls" tramp-remote-path)
5122 (tramp-check-ls-commands multi-method method user host "gls" tramp-remote-path))) 5132 (tramp-check-ls-commands multi-method method user host "gls" tramp-remote-path)))
5123 5133
5124;; ------------------------------------------------------------ 5134;; ------------------------------------------------------------
5125;; -- Functions for establishing connection -- 5135;; -- Functions for establishing connection --
5126;; ------------------------------------------------------------ 5136;; ------------------------------------------------------------
5127 5137
5128;; The following functions are actions to be taken when seeing certain 5138;; The following functions are actions to be taken when seeing certain
5129;; prompts from the remote host. See the variable 5139;; prompts from the remote host. See the variable
@@ -5364,7 +5374,7 @@ Maybe the different regular expressions need to be tuned.
5364 (when multi-method 5374 (when multi-method
5365 (error "Cannot multi-connect using telnet connection method")) 5375 (error "Cannot multi-connect using telnet connection method"))
5366 (tramp-pre-connection multi-method method user host) 5376 (tramp-pre-connection multi-method method user host)
5367 (tramp-message 7 "Opening connection for %s@%s using %s..." 5377 (tramp-message 7 "Opening connection for %s@%s using %s..."
5368 (or user (user-login-name)) host method) 5378 (or user (user-login-name)) host method)
5369 (let ((process-environment (copy-sequence process-environment))) 5379 (let ((process-environment (copy-sequence process-environment)))
5370 (setenv "TERM" tramp-terminal-type) 5380 (setenv "TERM" tramp-terminal-type)
@@ -5398,7 +5408,7 @@ Maybe the different regular expressions need to be tuned.
5398 p multi-method method user host) 5408 p multi-method method user host)
5399 (tramp-post-connection multi-method method user host))))) 5409 (tramp-post-connection multi-method method user host)))))
5400 5410
5401 5411
5402(defun tramp-open-connection-rsh (multi-method method user host) 5412(defun tramp-open-connection-rsh (multi-method method user host)
5403 "Open a connection using an rsh METHOD. 5413 "Open a connection using an rsh METHOD.
5404This starts the command `rsh HOST -l USER'[*], then waits for a remote 5414This starts the command `rsh HOST -l USER'[*], then waits for a remote
@@ -5423,7 +5433,7 @@ arguments, and xx will be used as the host name to connect to.
5423 (error "Cannot multi-connect using rsh connection method")) 5433 (error "Cannot multi-connect using rsh connection method"))
5424 (tramp-pre-connection multi-method method user host) 5434 (tramp-pre-connection multi-method method user host)
5425 (if (and user (not (string= user ""))) 5435 (if (and user (not (string= user "")))
5426 (tramp-message 7 "Opening connection for %s@%s using %s..." 5436 (tramp-message 7 "Opening connection for %s@%s using %s..."
5427 user host method) 5437 user host method)
5428 (tramp-message 7 "Opening connection at %s using %s..." host method)) 5438 (tramp-message 7 "Opening connection at %s using %s..." host method))
5429 (let ((process-environment (copy-sequence process-environment)) 5439 (let ((process-environment (copy-sequence process-environment))
@@ -5452,9 +5462,9 @@ arguments, and xx will be used as the host name to connect to.
5452 (> emacs-major-version 20)) 5462 (> emacs-major-version 20))
5453 tramp-dos-coding-system)) 5463 tramp-dos-coding-system))
5454 (p (if (and user (not (string= user ""))) 5464 (p (if (and user (not (string= user "")))
5455 (apply #'start-process bufnam buf login-program 5465 (apply #'start-process bufnam buf login-program
5456 real-host "-l" user login-args) 5466 real-host "-l" user login-args)
5457 (apply #'start-process bufnam buf login-program 5467 (apply #'start-process bufnam buf login-program
5458 real-host login-args))) 5468 real-host login-args)))
5459 (found nil)) 5469 (found nil))
5460 (tramp-set-process-query-on-exit-flag p nil) 5470 (tramp-set-process-query-on-exit-flag p nil)
@@ -5524,10 +5534,10 @@ prompt than you do, so it is not at all unlikely that the variable
5524 tramp-actions-before-shell) 5534 tramp-actions-before-shell)
5525 (tramp-open-connection-setup-interactive-shell 5535 (tramp-open-connection-setup-interactive-shell
5526 p multi-method method user host) 5536 p multi-method method user host)
5527 (tramp-post-connection multi-method method 5537 (tramp-post-connection multi-method method
5528 user host))))) 5538 user host)))))
5529 5539
5530;; HHH: Not Changed. Multi method. It is not clear to me how this can 5540;; HHH: Not Changed. Multi method. It is not clear to me how this can
5531;; handle not giving a user name in the "file name". 5541;; handle not giving a user name in the "file name".
5532;; 5542;;
5533;; This is more difficult than for the single-hop method. In the 5543;; This is more difficult than for the single-hop method. In the
@@ -5597,7 +5607,7 @@ log in as u2 to h2."
5597 (tramp-post-connection multi-method method user host))))) 5607 (tramp-post-connection multi-method method user host)))))
5598 5608
5599;; HHH: Changed. Multi method. Don't know how to handle this in the case 5609;; HHH: Changed. Multi method. Don't know how to handle this in the case
5600;; of no user name provided. Hack to make it work as it did before: 5610;; of no user name provided. Hack to make it work as it did before:
5601;; changed `user' to `(or user (user-login-name))' in the places where 5611;; changed `user' to `(or user (user-login-name))' in the places where
5602;; the value is actually used. 5612;; the value is actually used.
5603(defun tramp-multi-connect-telnet (p method user host command) 5613(defun tramp-multi-connect-telnet (p method user host command)
@@ -5619,8 +5629,8 @@ If USER is nil, uses the return value of (user-login-name) instead."
5619 (tramp-process-multi-actions p method user host 5629 (tramp-process-multi-actions p method user host
5620 tramp-multi-actions))) 5630 tramp-multi-actions)))
5621 5631
5622;; HHH: Changed. Multi method. Don't know how to handle this in the case 5632;; HHH: Changed. Multi method. Don't know how to handle this in the case
5623;; of no user name provided. Hack to make it work as it did before: 5633;; of no user name provided. Hack to make it work as it did before:
5624;; changed `user' to `(or user (user-login-name))' in the places where 5634;; changed `user' to `(or user (user-login-name))' in the places where
5625;; the value is actually used. 5635;; the value is actually used.
5626(defun tramp-multi-connect-rlogin (p method user host command) 5636(defun tramp-multi-connect-rlogin (p method user host command)
@@ -5645,8 +5655,8 @@ If USER is nil, uses the return value of (user-login-name) instead."
5645 (tramp-process-multi-actions p method user host 5655 (tramp-process-multi-actions p method user host
5646 tramp-multi-actions))) 5656 tramp-multi-actions)))
5647 5657
5648;; HHH: Changed. Multi method. Don't know how to handle this in the case 5658;; HHH: Changed. Multi method. Don't know how to handle this in the case
5649;; of no user name provided. Hack to make it work as it did before: 5659;; of no user name provided. Hack to make it work as it did before:
5650;; changed `user' to `(or user (user-login-name))' in the places where 5660;; changed `user' to `(or user (user-login-name))' in the places where
5651;; the value is actually used. 5661;; the value is actually used.
5652(defun tramp-multi-connect-su (p method user host command) 5662(defun tramp-multi-connect-su (p method user host command)
@@ -6276,7 +6286,7 @@ Sends COMMAND, then waits 30 seconds for shell prompt."
6276 (tramp-barf-if-no-shell-prompt 6286 (tramp-barf-if-no-shell-prompt
6277 nil 30 6287 nil 30
6278 "Couldn't `%s', see buffer `%s'" command (buffer-name))) 6288 "Couldn't `%s', see buffer `%s'" command (buffer-name)))
6279 6289
6280(defun tramp-wait-for-output (&optional timeout) 6290(defun tramp-wait-for-output (&optional timeout)
6281 "Wait for output from remote rsh command." 6291 "Wait for output from remote rsh command."
6282 (let ((proc (get-buffer-process (current-buffer))) 6292 (let ((proc (get-buffer-process (current-buffer)))
@@ -6609,9 +6619,9 @@ Not actually used. Use `(format \"%o\" i)' instead?"
6609 "")) 6619 ""))
6610 6620
6611 6621
6612;; ------------------------------------------------------------ 6622;; ------------------------------------------------------------
6613;; -- TRAMP file names -- 6623;; -- TRAMP file names --
6614;; ------------------------------------------------------------ 6624;; ------------------------------------------------------------
6615;; Conversion functions between external representation and 6625;; Conversion functions between external representation and
6616;; internal data structure. Convenience functions for internal 6626;; internal data structure. Convenience functions for internal
6617;; data structure. 6627;; data structure.
@@ -6622,7 +6632,7 @@ Not actually used. Use `(format \"%o\" i)' instead?"
6622 "Return t iff NAME is a tramp file." 6632 "Return t iff NAME is a tramp file."
6623 (save-match-data 6633 (save-match-data
6624 (string-match tramp-file-name-regexp name))) 6634 (string-match tramp-file-name-regexp name)))
6625 6635
6626;; HHH: Changed. Used to assign the return value of (user-login-name) 6636;; HHH: Changed. Used to assign the return value of (user-login-name)
6627;; to the `user' part of the structure if a user name was not 6637;; to the `user' part of the structure if a user name was not
6628;; provided, now it assigns nil. 6638;; provided, now it assigns nil.
@@ -6675,7 +6685,7 @@ This is MULTI-METHOD, if non-nil. Otherwise, it is METHOD, if non-nil.
6675If both MULTI-METHOD and METHOD are nil, do a lookup in 6685If both MULTI-METHOD and METHOD are nil, do a lookup in
6676`tramp-default-method-alist'." 6686`tramp-default-method-alist'."
6677 (or multi-method method (tramp-find-default-method user host))) 6687 (or multi-method method (tramp-find-default-method user host)))
6678 6688
6679;; HHH: Not Changed. Multi method. Will probably not handle the case where 6689;; HHH: Not Changed. Multi method. Will probably not handle the case where
6680;; a user name is not provided in the "file name" very well. 6690;; a user name is not provided in the "file name" very well.
6681(defun tramp-dissect-multi-file-name (name) 6691(defun tramp-dissect-multi-file-name (name)
@@ -6847,7 +6857,7 @@ as default."
6847 (if entry 6857 (if entry
6848 (second entry) 6858 (second entry)
6849 (symbol-value param)))) 6859 (symbol-value param))))
6850 6860
6851 6861
6852;; Auto saving to a special directory. 6862;; Auto saving to a special directory.
6853 6863
@@ -7039,9 +7049,9 @@ exiting if process is running."
7039 process flag))) 7049 process flag)))
7040 7050
7041 7051
7042;; ------------------------------------------------------------ 7052;; ------------------------------------------------------------
7043;; -- Kludges section -- 7053;; -- Kludges section --
7044;; ------------------------------------------------------------ 7054;; ------------------------------------------------------------
7045 7055
7046;; Currently (as of Emacs 20.5), the function `shell-quote-argument' 7056;; Currently (as of Emacs 20.5), the function `shell-quote-argument'
7047;; does not deal well with newline characters. Newline is replaced by 7057;; does not deal well with newline characters. Newline is replaced by
@@ -7304,7 +7314,7 @@ report.
7304;; strange when doing zerop, we should kill the process and start 7314;; strange when doing zerop, we should kill the process and start
7305;; again. (Greg Stark) 7315;; again. (Greg Stark)
7306;; * Add caching for filename completion. (Greg Stark) 7316;; * Add caching for filename completion. (Greg Stark)
7307;; Of course, this has issues with usability (stale cache bites) 7317;; Of course, this has issues with usability (stale cache bites)
7308;; -- <daniel@danann.net> 7318;; -- <daniel@danann.net>
7309;; * Provide a local cache of old versions of remote files for the rsync 7319;; * Provide a local cache of old versions of remote files for the rsync
7310;; transfer method to use. (Greg Stark) 7320;; transfer method to use. (Greg Stark)
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 7456bc1660f..866d6e5647d 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -30,7 +30,7 @@
30;; are auto-frobbed from configure.ac, so you should edit that file and run 30;; are auto-frobbed from configure.ac, so you should edit that file and run
31;; "autoconf && ./configure" to change them. 31;; "autoconf && ./configure" to change them.
32 32
33(defconst tramp-version "2.0.45" 33(defconst tramp-version "2.0.46"
34 "This version of Tramp.") 34 "This version of Tramp.")
35 35
36(defconst tramp-bug-report-address "tramp-devel@mail.freesoftware.fsf.org" 36(defconst tramp-bug-report-address "tramp-devel@mail.freesoftware.fsf.org"
diff --git a/lisp/pcvs-defs.el b/lisp/pcvs-defs.el
index 6bdd6bb6dd8..27629c5ddc6 100644
--- a/lisp/pcvs-defs.el
+++ b/lisp/pcvs-defs.el
@@ -380,6 +380,8 @@ This variable is buffer local and only used in the *cvs* buffer.")
380 ("+" . cvs-mode-tree) 380 ("+" . cvs-mode-tree)
381 ;; mouse bindings 381 ;; mouse bindings
382 ([mouse-2] . cvs-mode-find-file) 382 ([mouse-2] . cvs-mode-find-file)
383 ([follow-link] . (lambda (pos)
384 (if (eq (get-char-property pos 'face) 'cvs-filename-face) t)))
383 ([(down-mouse-3)] . cvs-menu) 385 ([(down-mouse-3)] . cvs-menu)
384 ;; dired-like bindings 386 ;; dired-like bindings
385 ("\C-o" . cvs-mode-display-file) 387 ("\C-o" . cvs-mode-display-file)
diff --git a/lisp/play/zone.el b/lisp/play/zone.el
index e073e343f02..80d0760bed2 100644
--- a/lisp/play/zone.el
+++ b/lisp/play/zone.el
@@ -33,10 +33,11 @@
33;; `zone-programs'. See `zone-call' for higher-ordered zoning. 33;; `zone-programs'. See `zone-call' for higher-ordered zoning.
34 34
35;; WARNING: Not appropriate for Emacs sessions over modems or 35;; WARNING: Not appropriate for Emacs sessions over modems or
36;; computers as slow as mine. 36;; computers as slow as mine.
37 37
38;; THANKS: Christopher Mayer, Scott Flinchbaugh, Rachel Kalmar, 38;; THANKS: Christopher Mayer, Scott Flinchbaugh,
39;; Max Froumentin. 39;; Rachel Kalmar, Max Froumentin, Juri Linkov,
40;; Luigi Panzeri, John Paul Wallington.
40 41
41;;; Code: 42;;; Code:
42 43
@@ -140,19 +141,28 @@ If the element is a function or a list of a function and a number,
140 (window-start))))) 141 (window-start)))))
141 (put 'zone 'orig-buffer (current-buffer)) 142 (put 'zone 'orig-buffer (current-buffer))
142 (put 'zone 'modeline-hidden-level 0) 143 (put 'zone 'modeline-hidden-level 0)
143 (set-buffer outbuf) 144 (switch-to-buffer outbuf)
144 (setq mode-name "Zone") 145 (setq mode-name "Zone")
145 (erase-buffer) 146 (erase-buffer)
147 (setq buffer-undo-list t
148 truncate-lines t
149 tab-width (zone-orig tab-width)
150 line-spacing (zone-orig line-spacing))
146 (insert text) 151 (insert text)
147 (switch-to-buffer outbuf)
148 (setq buffer-undo-list t)
149 (untabify (point-min) (point-max)) 152 (untabify (point-min) (point-max))
150 (set-window-start (selected-window) (point-min)) 153 (set-window-start (selected-window) (point-min))
151 (set-window-point (selected-window) wp) 154 (set-window-point (selected-window) wp)
152 (sit-for 0 500) 155 (sit-for 0 500)
153 (let ((pgm (elt zone-programs (random (length zone-programs)))) 156 (let ((pgm (elt zone-programs (random (length zone-programs))))
154 (ct (and f (frame-parameter f 'cursor-type)))) 157 (ct (and f (frame-parameter f 'cursor-type)))
155 (when ct (modify-frame-parameters f '((cursor-type . (bar . 0))))) 158 (restore (list '(kill-buffer outbuf))))
159 (when ct
160 (modify-frame-parameters f '((cursor-type . (bar . 0))))
161 (setq restore (cons '(modify-frame-parameters
162 f (list (cons 'cursor-type ct)))
163 restore)))
164 ;; Make `restore' a self-disabling one-shot thunk.
165 (setq restore `(lambda () ,@restore (setq restore nil)))
156 (condition-case nil 166 (condition-case nil
157 (progn 167 (progn
158 (message "Zoning... (%s)" pgm) 168 (message "Zoning... (%s)" pgm)
@@ -166,14 +176,17 @@ If the element is a function or a list of a function and a number,
166 (zone-call pgm) 176 (zone-call pgm)
167 (message "Zoning...sorry")) 177 (message "Zoning...sorry"))
168 (error 178 (error
179 (funcall restore)
169 (while (not (input-pending-p)) 180 (while (not (input-pending-p))
170 (message (format "We were zoning when we wrote %s..." pgm)) 181 (message (format "We were zoning when we wrote %s..." pgm))
171 (sit-for 3) 182 (sit-for 3)
172 (message "...here's hoping we didn't hose your buffer!") 183 (message "...here's hoping we didn't hose your buffer!")
173 (sit-for 3))) 184 (sit-for 3)))
174 (quit (ding) (message "Zoning...sorry"))) 185 (quit
175 (when ct (modify-frame-parameters f (list (cons 'cursor-type ct))))) 186 (funcall restore)
176 (kill-buffer outbuf))) 187 (ding)
188 (message "Zoning...sorry")))
189 (when restore (funcall restore)))))
177 190
178;;;; Zone when idle, or not. 191;;;; Zone when idle, or not.
179 192
@@ -195,13 +208,11 @@ If the element is a function or a list of a function and a number,
195 (message "I won't zone out any more")) 208 (message "I won't zone out any more"))
196 209
197 210
198;;;; zone-pgm-jitter 211;;;; jittering
199 212
200(defun zone-shift-up () 213(defun zone-shift-up ()
201 (let* ((b (point)) 214 (let* ((b (point))
202 (e (progn 215 (e (progn (forward-line 1) (point)))
203 (end-of-line)
204 (if (looking-at "\n") (1+ (point)) (point))))
205 (s (buffer-substring b e))) 216 (s (buffer-substring b e)))
206 (delete-region b e) 217 (delete-region b e)
207 (goto-char (point-max)) 218 (goto-char (point-max))
@@ -209,48 +220,40 @@ If the element is a function or a list of a function and a number,
209 220
210(defun zone-shift-down () 221(defun zone-shift-down ()
211 (goto-char (point-max)) 222 (goto-char (point-max))
212 (forward-line -1)
213 (beginning-of-line)
214 (let* ((b (point)) 223 (let* ((b (point))
215 (e (progn 224 (e (progn (forward-line -1) (point)))
216 (end-of-line)
217 (if (looking-at "\n") (1+ (point)) (point))))
218 (s (buffer-substring b e))) 225 (s (buffer-substring b e)))
219 (delete-region b e) 226 (delete-region b e)
220 (goto-char (point-min)) 227 (goto-char (point-min))
221 (insert s))) 228 (insert s)))
222 229
223(defun zone-shift-left () 230(defun zone-shift-left ()
224 (while (not (eobp)) 231 (let (s)
225 (or (eolp) 232 (while (not (eobp))
226 (let ((c (following-char))) 233 (unless (eolp)
227 (delete-char 1) 234 (setq s (buffer-substring (point) (1+ (point))))
228 (end-of-line) 235 (delete-char 1)
229 (insert c))) 236 (end-of-line)
230 (forward-line 1))) 237 (insert s))
238 (forward-char 1))))
231 239
232(defun zone-shift-right () 240(defun zone-shift-right ()
233 (while (not (eobp)) 241 (goto-char (point-max))
234 (end-of-line) 242 (end-of-line)
235 (or (bolp) 243 (let (s)
236 (let ((c (preceding-char))) 244 (while (not (bobp))
237 (delete-backward-char 1) 245 (unless (bolp)
238 (beginning-of-line) 246 (setq s (buffer-substring (1- (point)) (point)))
239 (insert c))) 247 (delete-char -1)
240 (forward-line 1))) 248 (beginning-of-line)
249 (insert s))
250 (end-of-line 0))))
241 251
242(defun zone-pgm-jitter () 252(defun zone-pgm-jitter ()
243 (let ((ops [ 253 (let ((ops [
244 zone-shift-left 254 zone-shift-left
245 zone-shift-left
246 zone-shift-left
247 zone-shift-left
248 zone-shift-right 255 zone-shift-right
249 zone-shift-down 256 zone-shift-down
250 zone-shift-down
251 zone-shift-down
252 zone-shift-down
253 zone-shift-down
254 zone-shift-up 257 zone-shift-up
255 ])) 258 ]))
256 (goto-char (point-min)) 259 (goto-char (point-min))
@@ -260,7 +263,7 @@ If the element is a function or a list of a function and a number,
260 (sit-for 0 10)))) 263 (sit-for 0 10))))
261 264
262 265
263;;;; zone-pgm-whack-chars 266;;;; whacking chars
264 267
265(defun zone-pgm-whack-chars () 268(defun zone-pgm-whack-chars ()
266 (let ((tbl (copy-sequence (get 'zone-pgm-whack-chars 'wc-tbl)))) 269 (let ((tbl (copy-sequence (get 'zone-pgm-whack-chars 'wc-tbl))))
@@ -280,7 +283,7 @@ If the element is a function or a list of a function and a number,
280 (setq i (1+ i))) 283 (setq i (1+ i)))
281 tbl)) 284 tbl))
282 285
283;;;; zone-pgm-dissolve 286;;;; dissolving
284 287
285(defun zone-remove-text () 288(defun zone-remove-text ()
286 (let ((working t)) 289 (let ((working t))
@@ -305,11 +308,11 @@ If the element is a function or a list of a function and a number,
305 (zone-pgm-jitter)) 308 (zone-pgm-jitter))
306 309
307 310
308;;;; zone-pgm-explode 311;;;; exploding
309 312
310(defun zone-exploding-remove () 313(defun zone-exploding-remove ()
311 (let ((i 0)) 314 (let ((i 0))
312 (while (< i 20) 315 (while (< i 5)
313 (save-excursion 316 (save-excursion
314 (goto-char (point-min)) 317 (goto-char (point-min))
315 (while (not (eobp)) 318 (while (not (eobp))
@@ -328,7 +331,7 @@ If the element is a function or a list of a function and a number,
328 (zone-pgm-jitter)) 331 (zone-pgm-jitter))
329 332
330 333
331;;;; zone-pgm-putz-with-case 334;;;; putzing w/ case
332 335
333;; Faster than `zone-pgm-putz-with-case', but not as good: all 336;; Faster than `zone-pgm-putz-with-case', but not as good: all
334;; instances of the same letter have the same case, which produces a 337;; instances of the same letter have the same case, which produces a
@@ -377,7 +380,7 @@ If the element is a function or a list of a function and a number,
377 (sit-for 0 2))) 380 (sit-for 0 2)))
378 381
379 382
380;;;; zone-pgm-rotate 383;;;; rotating
381 384
382(defun zone-line-specs () 385(defun zone-line-specs ()
383 (let (ret) 386 (let (ret)
@@ -439,66 +442,84 @@ If the element is a function or a list of a function and a number,
439 (zone-pgm-rotate (lambda () (1- (- (random 3)))))) 442 (zone-pgm-rotate (lambda () (1- (- (random 3))))))
440 443
441 444
442;;;; zone-pgm-drip 445;;;; dripping
443 446
444(defun zone-cpos (pos) 447(defsubst zone-cpos (pos)
445 (buffer-substring pos (1+ pos))) 448 (buffer-substring pos (1+ pos)))
446 449
447(defun zone-fret (pos) 450(defsubst zone-replace-char (count del-count char-as-string new-value)
451 (delete-char (or del-count (- count)))
452 (aset char-as-string 0 new-value)
453 (dotimes (i count) (insert char-as-string)))
454
455(defsubst zone-park/sit-for (pos seconds)
456 (let ((p (point)))
457 (goto-char pos)
458 (prog1 (sit-for seconds)
459 (goto-char p))))
460
461(defun zone-fret (wbeg pos)
448 (let* ((case-fold-search nil) 462 (let* ((case-fold-search nil)
449 (c-string (zone-cpos pos)) 463 (c-string (zone-cpos pos))
464 (cw-ceil (ceiling (char-width (aref c-string 0))))
450 (hmm (cond 465 (hmm (cond
451 ((string-match "[a-z]" c-string) (upcase c-string)) 466 ((string-match "[a-z]" c-string) (upcase c-string))
452 ((string-match "[A-Z]" c-string) (downcase c-string)) 467 ((string-match "[A-Z]" c-string) (downcase c-string))
453 (t " ")))) 468 (t (propertize " " 'display `(space :width ,cw-ceil))))))
454 (do ((i 0 (1+ i)) 469 (do ((i 0 (1+ i))
455 (wait 0.5 (* wait 0.8))) 470 (wait 0.5 (* wait 0.8)))
456 ((= i 20)) 471 ((= i 20))
457 (goto-char pos) 472 (goto-char pos)
458 (delete-char 1) 473 (delete-char 1)
459 (insert (if (= 0 (% i 2)) hmm c-string)) 474 (insert (if (= 0 (% i 2)) hmm c-string))
460 (sit-for wait)) 475 (zone-park/sit-for wbeg wait))
461 (delete-char -1) (insert c-string))) 476 (delete-char -1) (insert c-string)))
462 477
463(defun zone-fill-out-screen (width height) 478(defun zone-fill-out-screen (width height)
464 (save-excursion 479 (let ((start (window-start))
465 (goto-char (point-min)) 480 (line (make-string width 32)))
481 (goto-char start)
466 ;; fill out rectangular ws block 482 ;; fill out rectangular ws block
467 (while (not (eobp)) 483 (while (progn (end-of-line)
468 (end-of-line) 484 (let ((cc (current-column)))
469 (let ((cc (current-column))) 485 (if (< cc width)
470 (if (< cc width) 486 (insert (substring line cc))
471 (insert (make-string (- width cc) 32)) 487 (delete-char (- width cc)))
472 (delete-char (- width cc)))) 488 (cond ((eobp) (insert "\n") nil)
473 (unless (eobp) 489 (t (forward-char 1) t)))))
474 (forward-char 1)))
475 ;; pad ws past bottom of screen 490 ;; pad ws past bottom of screen
476 (let ((nl (- height (count-lines (point-min) (point))))) 491 (let ((nl (- height (count-lines (point-min) (point)))))
477 (when (> nl 0) 492 (when (> nl 0)
478 (let ((line (concat (make-string (1- width) ? ) "\n"))) 493 (setq line (concat line "\n"))
479 (do ((i 0 (1+ i))) 494 (do ((i 0 (1+ i)))
480 ((= i nl)) 495 ((= i nl))
481 (insert line))))))) 496 (insert line))))
482 497 (goto-char start)
483(defun zone-fall-through-ws (c col wend) 498 (recenter 0)
484 (let ((fall-p nil) ; todo: move outward 499 (sit-for 0)))
485 (wait 0.15) 500
486 (o (point)) ; for terminals w/o cursor hiding 501(defun zone-fall-through-ws (c wbeg wend)
487 (p (point))) 502 (let* ((cw-ceil (ceiling (char-width (aref c 0))))
488 (while (progn 503 (spaces (make-string cw-ceil 32))
489 (forward-line 1) 504 (col (current-column))
490 (move-to-column col) 505 (wait 0.15)
491 (looking-at " ")) 506 newpos fall-p)
492 (setq fall-p t) 507 (while (when (save-excursion
493 (delete-char 1) 508 (next-line 1)
494 (insert (if (< (point) wend) c " ")) 509 (and (= col (current-column))
495 (save-excursion 510 (setq newpos (point))
496 (goto-char p) 511 (string= spaces (buffer-substring-no-properties
497 (delete-char 1) 512 newpos (+ newpos cw-ceil)))
498 (insert " ") 513 (setq newpos (+ newpos (1- cw-ceil)))))
499 (goto-char o) 514 (setq fall-p t)
500 (sit-for (setq wait (* wait 0.8)))) 515 (delete-char 1)
501 (setq p (1- (point)))) 516 (insert spaces)
517 (goto-char newpos)
518 (when (< (point) wend)
519 (delete-char cw-ceil)
520 (insert c)
521 (forward-char -1)
522 (zone-park/sit-for wbeg (setq wait (* wait 0.8))))))
502 fall-p)) 523 fall-p))
503 524
504(defun zone-pgm-drip (&optional fret-p pancake-p) 525(defun zone-pgm-drip (&optional fret-p pancake-p)
@@ -506,41 +527,35 @@ If the element is a function or a list of a function and a number,
506 (wh (window-height)) 527 (wh (window-height))
507 (mc 0) ; miss count 528 (mc 0) ; miss count
508 (total (* ww wh)) 529 (total (* ww wh))
509 (fall-p nil)) 530 (fall-p nil)
531 wbeg wend c)
510 (zone-fill-out-screen ww wh) 532 (zone-fill-out-screen ww wh)
533 (setq wbeg (window-start)
534 wend (window-end))
511 (catch 'done 535 (catch 'done
512 (while (not (input-pending-p)) 536 (while (not (input-pending-p))
513 (let ((wbeg (window-start)) 537 (setq mc 0 wend (window-end))
514 (wend (window-end))) 538 ;; select non-ws character, but don't miss too much
515 (setq mc 0) 539 (goto-char (+ wbeg (random (- wend wbeg))))
516 ;; select non-ws character, but don't miss too much 540 (while (looking-at "[ \n\f]")
517 (goto-char (+ wbeg (random (- wend wbeg)))) 541 (if (= total (setq mc (1+ mc)))
518 (while (looking-at "[ \n\f]") 542 (throw 'done 'sel)
519 (if (= total (setq mc (1+ mc))) 543 (goto-char (+ wbeg (random (- wend wbeg))))))
520 (throw 'done 'sel) 544 ;; character animation sequence
521 (goto-char (+ wbeg (random (- wend wbeg)))))) 545 (let ((p (point)))
522 ;; character animation sequence 546 (when fret-p (zone-fret wbeg p))
523 (let ((p (point))) 547 (goto-char p)
524 (when fret-p (zone-fret p)) 548 (setq c (zone-cpos p)
525 (goto-char p) 549 fall-p (zone-fall-through-ws c wbeg wend)))
526 (setq fall-p (zone-fall-through-ws
527 (zone-cpos p) (current-column) wend))))
528 ;; assuming current-column has not changed... 550 ;; assuming current-column has not changed...
529 (when (and pancake-p 551 (when (and pancake-p
530 fall-p 552 fall-p
531 (< (count-lines (point-min) (point)) 553 (< (count-lines (point-min) (point))
532 wh)) 554 wh))
533 (previous-line 1) 555 (let ((cw (ceiling (char-width (aref c 0)))))
534 (forward-char 1) 556 (zone-replace-char cw 1 c ?@) (zone-park/sit-for wbeg 0.137)
535 (sit-for 0.137) 557 (zone-replace-char cw nil c ?*) (zone-park/sit-for wbeg 0.137)
536 (delete-char -1) 558 (zone-replace-char cw nil c ?_)))))))
537 (insert "@")
538 (sit-for 0.137)
539 (delete-char -1)
540 (insert "*")
541 (sit-for 0.137)
542 (delete-char -1)
543 (insert "_"))))))
544 559
545(defun zone-pgm-drip-fretfully () 560(defun zone-pgm-drip-fretfully ()
546 (zone-pgm-drip t)) 561 (zone-pgm-drip t))
@@ -552,7 +567,7 @@ If the element is a function or a list of a function and a number,
552 (zone-pgm-drip t t)) 567 (zone-pgm-drip t t))
553 568
554 569
555;;;; zone-pgm-paragraph-spaz 570;;;; paragraph spazzing (for textish modes)
556 571
557(defun zone-pgm-paragraph-spaz () 572(defun zone-pgm-paragraph-spaz ()
558 (if (memq (zone-orig major-mode) 573 (if (memq (zone-orig major-mode)
@@ -633,30 +648,29 @@ If nil, `zone-pgm-random-life' chooses a value from 0-3 (inclusive).")
633 (rtc (- (frame-width) 11)) 648 (rtc (- (frame-width) 11))
634 (min (window-start)) 649 (min (window-start))
635 (max (1- (window-end))) 650 (max (1- (window-end)))
636 c col) 651 s c col)
637 (delete-region max (point-max)) 652 (delete-region max (point-max))
638 (while (progn (goto-char (+ min (random max))) 653 (while (and (progn (goto-char min) (sit-for 0.05))
639 (and (sit-for 0.005) 654 (progn (goto-char (+ min (random max)))
640 (or (progn (skip-chars-forward " @\n" max) 655 (or (progn (skip-chars-forward " @\n" max)
641 (not (= max (point)))) 656 (not (= max (point))))
642 (unless (or (= 0 (skip-chars-backward " @\n" min)) 657 (unless (or (= 0 (skip-chars-backward " @\n" min))
643 (= min (point))) 658 (= min (point)))
644 (forward-char -1) 659 (forward-char -1)
645 t)))) 660 t))))
646 (setq c (char-after)) 661 (unless (or (eolp) (eobp))
647 (unless (or (not c) (= ?\n c)) 662 (setq s (zone-cpos (point))
648 (forward-char 1) 663 c (aref s 0))
649 (insert-and-inherit ; keep colors 664 (zone-replace-char
650 (cond ((or (> top (point)) 665 (char-width c)
651 (< bot (point)) 666 1 s (cond ((or (> top (point))
652 (or (> 11 (setq col (current-column))) 667 (< bot (point))
653 (< rtc col))) 668 (or (> 11 (setq col (current-column)))
654 32) 669 (< rtc col)))
655 ((and (<= ?a c) (>= ?z c)) (+ c (- ?A ?a))) 670 32)
656 ((and (<= ?A c) (>= ?Z c)) ?*) 671 ((and (<= ?a c) (>= ?z c)) (+ c (- ?A ?a)))
657 (t ?@))) 672 ((and (<= ?A c) (>= ?Z c)) ?*)
658 (forward-char -1) 673 (t ?@)))))
659 (delete-char -1)))
660 (sit-for 3) 674 (sit-for 3)
661 (setq col nil) 675 (setq col nil)
662 (goto-char bot) 676 (goto-char bot)
@@ -666,8 +680,13 @@ If nil, `zone-pgm-random-life' chooses a value from 0-3 (inclusive).")
666 (setq col (cons (buffer-substring (point) c) col)) 680 (setq col (cons (buffer-substring (point) c) col))
667 (end-of-line 0) 681 (end-of-line 0)
668 (forward-char -10)) 682 (forward-char -10))
669 (let ((life-patterns (vector (cons (make-string (length (car col)) 32) 683 (let ((life-patterns (vector
670 col)))) 684 (if (and col (search-forward "@" max t))
685 (cons (make-string (length (car col)) 32) col)
686 (list (mapconcat 'identity
687 (make-list (/ (- rtc 11) 15)
688 (make-string 5 ?@))
689 (make-string 10 32)))))))
671 (life (or zone-pgm-random-life-wait (random 4))) 690 (life (or zone-pgm-random-life-wait (random 4)))
672 (kill-buffer nil)))) 691 (kill-buffer nil))))
673 692
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index f2750ec8ff4..9c7e8fe1560 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1044,6 +1044,7 @@ exited abnormally with code %d\n"
1044(defvar compilation-minor-mode-map 1044(defvar compilation-minor-mode-map
1045 (let ((map (make-sparse-keymap))) 1045 (let ((map (make-sparse-keymap)))
1046 (define-key map [mouse-2] 'compile-goto-error) 1046 (define-key map [mouse-2] 'compile-goto-error)
1047 (define-key map [follow-link] 'mouse-face)
1047 (define-key map "\C-c\C-c" 'compile-goto-error) 1048 (define-key map "\C-c\C-c" 'compile-goto-error)
1048 (define-key map "\C-m" 'compile-goto-error) 1049 (define-key map "\C-m" 'compile-goto-error)
1049 (define-key map "\C-c\C-k" 'kill-compilation) 1050 (define-key map "\C-c\C-k" 'kill-compilation)
@@ -1073,6 +1074,7 @@ exited abnormally with code %d\n"
1073(defvar compilation-button-map 1074(defvar compilation-button-map
1074 (let ((map (make-sparse-keymap))) 1075 (let ((map (make-sparse-keymap)))
1075 (define-key map [mouse-2] 'compile-goto-error) 1076 (define-key map [mouse-2] 'compile-goto-error)
1077 (define-key map [follow-link] 'mouse-face)
1076 (define-key map "\C-m" 'compile-goto-error) 1078 (define-key map "\C-m" 'compile-goto-error)
1077 map) 1079 map)
1078 "Keymap for compilation-message buttons.") 1080 "Keymap for compilation-message buttons.")
@@ -1084,6 +1086,7 @@ exited abnormally with code %d\n"
1084 ;; because that introduces a menu bar item we don't want. 1086 ;; because that introduces a menu bar item we don't want.
1085 ;; That confuses C-down-mouse-3. 1087 ;; That confuses C-down-mouse-3.
1086 (define-key map [mouse-2] 'compile-goto-error) 1088 (define-key map [mouse-2] 'compile-goto-error)
1089 (define-key map [follow-link] 'mouse-face)
1087 (define-key map "\C-c\C-c" 'compile-goto-error) 1090 (define-key map "\C-c\C-c" 'compile-goto-error)
1088 (define-key map "\C-m" 'compile-goto-error) 1091 (define-key map "\C-m" 'compile-goto-error)
1089 (define-key map "\C-c\C-k" 'kill-compilation) 1092 (define-key map "\C-c\C-k" 'kill-compilation)
diff --git a/lisp/progmodes/executable.el b/lisp/progmodes/executable.el
index a5d401a5f5e..0eb53771019 100644
--- a/lisp/progmodes/executable.el
+++ b/lisp/progmodes/executable.el
@@ -199,20 +199,20 @@ non-executable files."
199 (file-modes buffer-file-name))))))) 199 (file-modes buffer-file-name)))))))
200 200
201 201
202;;;###autoload
202(defun executable-interpret (command) 203(defun executable-interpret (command)
203 "Run script with user-specified args, and collect output in a buffer. 204 "Run script with user-specified args, and collect output in a buffer.
204While script runs asynchronously, you can use the \\[next-error] command 205While script runs asynchronously, you can use the \\[next-error]
205to find the next error." 206command to find the next error. The buffer is also in `comint-mode' and
207`compilation-shell-minor-mode', so that you can answer any prompts."
206 (interactive (list (read-string "Run script: " 208 (interactive (list (read-string "Run script: "
207 (or executable-command 209 (or executable-command
208 buffer-file-name)))) 210 buffer-file-name))))
209 (require 'compile) 211 (require 'compile)
210 (save-some-buffers (not compilation-ask-about-save)) 212 (save-some-buffers (not compilation-ask-about-save))
211 (make-local-variable 'executable-command) 213 (set (make-local-variable 'executable-command) command)
212 (compile-internal (setq executable-command command) 214 (let ((compilation-error-regexp-alist executable-error-regexp-alist))
213 "No more errors." "Interpretation" 215 (compilation-start command t (lambda (x) "*interpretation*"))))
214 ;; Give it a simpler regexp to match.
215 nil executable-error-regexp-alist))
216 216
217 217
218 218
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index fd4b716ae4b..04fcae78ea6 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -275,6 +275,9 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies
275(defvar grep-error-face compilation-error-face 275(defvar grep-error-face compilation-error-face
276 "Face name to use for grep error messages.") 276 "Face name to use for grep error messages.")
277 277
278(defvar grep-match-face 'match
279 "Face name to use for grep matches.")
280
278(defvar grep-mode-font-lock-keywords 281(defvar grep-mode-font-lock-keywords
279 '(;; Command output lines. 282 '(;; Command output lines.
280 ("^\\([A-Za-z_0-9/\.+-]+\\)[ \t]*:" 1 font-lock-function-name-face) 283 ("^\\([A-Za-z_0-9/\.+-]+\\)[ \t]*:" 1 font-lock-function-name-face)
@@ -291,7 +294,7 @@ Notice that using \\[next-error] or \\[compile-goto-error] modifies
291 (2 compilation-line-face)) 294 (2 compilation-line-face))
292 ;; Highlight grep matches and delete markers 295 ;; Highlight grep matches and delete markers
293 ("\\(\033\\[01;41m\\)\\(.*?\\)\\(\033\\[00m\\)" 296 ("\\(\033\\[01;41m\\)\\(.*?\\)\\(\033\\[00m\\)"
294 (2 compilation-column-face) 297 (2 grep-match-face)
295 ((lambda (p)) 298 ((lambda (p))
296 (progn 299 (progn
297 ;; Delete markers with `replace-match' because it updates 300 ;; Delete markers with `replace-match' because it updates
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el
index 7013c3856e3..3bd5dd2a1f6 100644
--- a/lisp/progmodes/hideshow.el
+++ b/lisp/progmodes/hideshow.el
@@ -5,7 +5,7 @@
5;; Author: Thien-Thi Nguyen <ttn@gnu.org> 5;; Author: Thien-Thi Nguyen <ttn@gnu.org>
6;; Dan Nicolaescu <dann@ics.uci.edu> 6;; Dan Nicolaescu <dann@ics.uci.edu>
7;; Keywords: C C++ java lisp tools editing comments blocks hiding outlines 7;; Keywords: C C++ java lisp tools editing comments blocks hiding outlines
8;; Maintainer-Version: 5.31 8;; Maintainer-Version: 5.39.2.8
9;; Time-of-Day-Author-Most-Likely-to-be-Recalcitrant: early morning 9;; Time-of-Day-Author-Most-Likely-to-be-Recalcitrant: early morning
10 10
11;; This file is part of GNU Emacs. 11;; This file is part of GNU Emacs.
@@ -58,7 +58,7 @@
58;; 58;;
59;; (load-library "hideshow") 59;; (load-library "hideshow")
60;; (add-hook 'X-mode-hook ; other modes similarly 60;; (add-hook 'X-mode-hook ; other modes similarly
61;; '(lambda () (hs-minor-mode 1))) 61;; (lambda () (hs-minor-mode 1)))
62;; 62;;
63;; where X = {emacs-lisp,c,c++,perl,...}. You can also manually toggle 63;; where X = {emacs-lisp,c,c++,perl,...}. You can also manually toggle
64;; hideshow minor mode by typing `M-x hs-minor-mode'. After hideshow is 64;; hideshow minor mode by typing `M-x hs-minor-mode'. After hideshow is
@@ -133,10 +133,7 @@
133;; variable `hs-special-modes-alist'. Packages that use hideshow should 133;; variable `hs-special-modes-alist'. Packages that use hideshow should
134;; do something like: 134;; do something like:
135;; 135;;
136;; (let ((my-mode-hs-info '(my-mode "{{" "}}" ...))) 136;; (add-to-list 'hs-special-modes-alist '(my-mode "{{" "}}" ...))
137;; (if (not (member my-mode-hs-info hs-special-modes-alist))
138;; (setq hs-special-modes-alist
139;; (cons my-mode-hs-info hs-special-modes-alist))))
140;; 137;;
141;; If you have an entry that works particularly well, consider 138;; If you have an entry that works particularly well, consider
142;; submitting it for inclusion in hideshow.el. See docstring for 139;; submitting it for inclusion in hideshow.el. See docstring for
@@ -180,9 +177,9 @@
180;; In the case of `vc-diff', here is a less invasive workaround: 177;; In the case of `vc-diff', here is a less invasive workaround:
181;; 178;;
182;; (add-hook 'vc-before-checkin-hook 179;; (add-hook 'vc-before-checkin-hook
183;; '(lambda () 180;; (lambda ()
184;; (goto-char (point-min)) 181;; (goto-char (point-min))
185;; (hs-show-block))) 182;; (hs-show-block)))
186;; 183;;
187;; Unfortunately, these workarounds do not restore hideshow state. 184;; Unfortunately, these workarounds do not restore hideshow state.
188;; If someone figures out a better way, please let me know. 185;; If someone figures out a better way, please let me know.
@@ -223,6 +220,7 @@
223;;; Code: 220;;; Code:
224 221
225(require 'easymenu) 222(require 'easymenu)
223(eval-when-compile (require 'cl))
226 224
227;;--------------------------------------------------------------------------- 225;;---------------------------------------------------------------------------
228;; user-configurable variables 226;; user-configurable variables
@@ -265,8 +263,7 @@ This has effect iff `search-invisible' is set to `open'."
265 '((c-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning) 263 '((c-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning)
266 (c++-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning) 264 (c++-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning)
267 (bibtex-mode ("^@\\S(*\\(\\s(\\)" 1)) 265 (bibtex-mode ("^@\\S(*\\(\\s(\\)" 1))
268 (java-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning) 266 (java-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning))
269 )
270 "*Alist for initializing the hideshow variables for different modes. 267 "*Alist for initializing the hideshow variables for different modes.
271Each element has the form 268Each element has the form
272 (MODE START END COMMENT-START FORWARD-SEXP-FUNC ADJUST-BEG-FUNC). 269 (MODE START END COMMENT-START FORWARD-SEXP-FUNC ADJUST-BEG-FUNC).
@@ -378,28 +375,6 @@ Note that `mode-line-format' is buffer-local.")
378;;--------------------------------------------------------------------------- 375;;---------------------------------------------------------------------------
379;; system dependency 376;; system dependency
380 377
381; ;; xemacs compatibility
382; (when (string-match "xemacs\\|lucid" emacs-version)
383; ;; use pre-packaged compatiblity layer
384; (require 'overlay))
385;
386; ;; xemacs and emacs-19 compatibility
387; (when (or (not (fboundp 'add-to-invisibility-spec))
388; (not (fboundp 'remove-from-invisibility-spec)))
389; ;; `buffer-invisibility-spec' mutators snarfed from Emacs 20.3 lisp/subr.el
390; (defun add-to-invisibility-spec (arg)
391; (cond
392; ((or (null buffer-invisibility-spec) (eq buffer-invisibility-spec t))
393; (setq buffer-invisibility-spec (list arg)))
394; (t
395; (setq buffer-invisibility-spec
396; (cons arg buffer-invisibility-spec)))))
397; (defun remove-from-invisibility-spec (arg)
398; (when buffer-invisibility-spec
399; (setq buffer-invisibility-spec
400; (delete arg buffer-invisibility-spec)))))
401
402;; hs-match-data
403(defalias 'hs-match-data 'match-data) 378(defalias 'hs-match-data 'match-data)
404 379
405;;--------------------------------------------------------------------------- 380;;---------------------------------------------------------------------------
@@ -409,12 +384,9 @@ Note that `mode-line-format' is buffer-local.")
409 "Delete hideshow overlays in region defined by FROM and TO." 384 "Delete hideshow overlays in region defined by FROM and TO."
410 (when (< to from) 385 (when (< to from)
411 (setq from (prog1 to (setq to from)))) 386 (setq from (prog1 to (setq to from))))
412 (let ((ovs (overlays-in from to))) 387 (dolist (ov (overlays-in from to))
413 (while ovs 388 (when (overlay-get ov 'hs)
414 (let ((ov (car ovs))) 389 (delete-overlay ov))))
415 (when (overlay-get ov 'hs)
416 (delete-overlay ov)))
417 (setq ovs (cdr ovs)))))
418 390
419(defun hs-isearch-show (ov) 391(defun hs-isearch-show (ov)
420 "Delete overlay OV, and set `hs-headline' to nil. 392 "Delete overlay OV, and set `hs-headline' to nil.
@@ -433,16 +405,16 @@ OV is shown.
433This function is meant to be used as the `isearch-open-invisible-temporary' 405This function is meant to be used as the `isearch-open-invisible-temporary'
434property of an overlay." 406property of an overlay."
435 (setq hs-headline 407 (setq hs-headline
436 (if hide-p 408 (if hide-p
437 nil 409 nil
438 (or hs-headline 410 (or hs-headline
439 (let ((start (overlay-start ov))) 411 (let ((start (overlay-start ov)))
440 (buffer-substring 412 (buffer-substring
441 (save-excursion (goto-char start) 413 (save-excursion (goto-char start)
442 (beginning-of-line) 414 (beginning-of-line)
443 (skip-chars-forward " \t") 415 (skip-chars-forward " \t")
444 (point)) 416 (point))
445 start))))) 417 start)))))
446 (force-mode-line-update) 418 (force-mode-line-update)
447 (overlay-put ov 'invisible (and hide-p 'hs))) 419 (overlay-put ov 'invisible (and hide-p 'hs)))
448 420
@@ -464,10 +436,10 @@ on what kind of block is to be hidden."
464 ;; deprecated backward compatibility -- `block'<=>`code' 436 ;; deprecated backward compatibility -- `block'<=>`code'
465 (and (eq 'block hs-isearch-open) 437 (and (eq 'block hs-isearch-open)
466 (eq 'code flag))) 438 (eq 'code flag)))
467 (overlay-put overlay 'isearch-open-invisible 'hs-isearch-show) 439 (overlay-put overlay 'isearch-open-invisible 'hs-isearch-show)
468 (overlay-put overlay 440 (overlay-put overlay
469 'isearch-open-invisible-temporary 441 'isearch-open-invisible-temporary
470 'hs-isearch-show-temporary)) 442 'hs-isearch-show-temporary))
471 overlay)))) 443 overlay))))
472 444
473(defun hs-forward-sexp (match-data arg) 445(defun hs-forward-sexp (match-data arg)
@@ -523,10 +495,10 @@ and then further adjusted to be at the end of the line."
523 495
524(defun hs-safety-is-job-n () 496(defun hs-safety-is-job-n ()
525 "Warn if `buffer-invisibility-spec' does not contain symbol `hs'." 497 "Warn if `buffer-invisibility-spec' does not contain symbol `hs'."
526 (unless (and (listp buffer-invisibility-spec) 498 (unless (and (listp buffer-invisibility-spec)
527 (assq 'hs buffer-invisibility-spec)) 499 (assq 'hs buffer-invisibility-spec))
528 (message "Warning: `buffer-invisibility-spec' does not contain hs!!") 500 (message "Warning: `buffer-invisibility-spec' does not contain hs!!")
529 (sit-for 2))) 501 (sit-for 2)))
530 502
531(defun hs-inside-comment-p () 503(defun hs-inside-comment-p ()
532 "Return non-nil if point is inside a comment, otherwise nil. 504 "Return non-nil if point is inside a comment, otherwise nil.
@@ -543,10 +515,15 @@ as cdr."
543 (let ((q (point))) 515 (let ((q (point)))
544 (when (or (looking-at hs-c-start-regexp) 516 (when (or (looking-at hs-c-start-regexp)
545 (re-search-backward hs-c-start-regexp (point-min) t)) 517 (re-search-backward hs-c-start-regexp (point-min) t))
518 ;; first get to the beginning of this comment...
519 (while (and (not (bobp))
520 (= (point) (progn (forward-comment -1) (point))))
521 (forward-char -1))
522 ;; ...then extend backwards
546 (forward-comment (- (buffer-size))) 523 (forward-comment (- (buffer-size)))
547 (skip-chars-forward " \t\n\f") 524 (skip-chars-forward " \t\n\f")
548 (let ((p (point)) 525 (let ((p (point))
549 (not-hidable nil)) 526 (hidable t))
550 (beginning-of-line) 527 (beginning-of-line)
551 (unless (looking-at (concat "[ \t]*" hs-c-start-regexp)) 528 (unless (looking-at (concat "[ \t]*" hs-c-start-regexp))
552 ;; we are in this situation: (example) 529 ;; we are in this situation: (example)
@@ -565,19 +542,19 @@ as cdr."
565 (while (and (< (point) q) 542 (while (and (< (point) q)
566 (> (point) p) 543 (> (point) p)
567 (not (looking-at hs-c-start-regexp))) 544 (not (looking-at hs-c-start-regexp)))
568 (setq p (point));; use this to avoid an infinite cycle 545 (setq p (point)) ;; use this to avoid an infinite cycle
569 (forward-comment 1) 546 (forward-comment 1)
570 (skip-chars-forward " \t\n\f")) 547 (skip-chars-forward " \t\n\f"))
571 (when (or (not (looking-at hs-c-start-regexp)) 548 (when (or (not (looking-at hs-c-start-regexp))
572 (> (point) q)) 549 (> (point) q))
573 ;; we cannot hide this comment block 550 ;; we cannot hide this comment block
574 (setq not-hidable t))) 551 (setq hidable nil)))
575 ;; goto the end of the comment 552 ;; goto the end of the comment
576 (forward-comment (buffer-size)) 553 (forward-comment (buffer-size))
577 (skip-chars-backward " \t\n\f") 554 (skip-chars-backward " \t\n\f")
578 (end-of-line) 555 (end-of-line)
579 (when (>= (point) q) 556 (when (>= (point) q)
580 (list (if not-hidable nil p) (point)))))))) 557 (list (and hidable p) (point))))))))
581 558
582(defun hs-grok-mode-type () 559(defun hs-grok-mode-type ()
583 "Set up hideshow variables for new buffers. 560 "Set up hideshow variables for new buffers.
@@ -645,7 +622,7 @@ Return point, or nil if original point was not in a block."
645 (hs-hide-level-recursive (1- arg) minp maxp) 622 (hs-hide-level-recursive (1- arg) minp maxp)
646 (goto-char (match-beginning hs-block-start-mdata-select)) 623 (goto-char (match-beginning hs-block-start-mdata-select))
647 (hs-hide-block-at-point t))) 624 (hs-hide-block-at-point t)))
648 (hs-safety-is-job-n) 625 (hs-safety-is-job-n)
649 (goto-char maxp)) 626 (goto-char maxp))
650 627
651(defmacro hs-life-goes-on (&rest body) 628(defmacro hs-life-goes-on (&rest body)
@@ -675,8 +652,8 @@ and `case-fold-search' are both t."
675 (let ((overlays (overlays-at (point))) 652 (let ((overlays (overlays-at (point)))
676 (found nil)) 653 (found nil))
677 (while (and (not found) (overlayp (car overlays))) 654 (while (and (not found) (overlayp (car overlays)))
678 (setq found (overlay-get (car overlays) 'hs) 655 (setq found (overlay-get (car overlays) 'hs)
679 overlays (cdr overlays))) 656 overlays (cdr overlays)))
680 found))) 657 found)))
681 658
682(defun hs-c-like-adjust-block-beginning (initial) 659(defun hs-c-like-adjust-block-beginning (initial)
@@ -724,7 +701,7 @@ If `hs-hide-comments-when-hiding-all' is non-nil, also hide the comments."
724 (funcall hs-hide-all-non-comment-function) 701 (funcall hs-hide-all-non-comment-function)
725 (hs-hide-block-at-point t))) 702 (hs-hide-block-at-point t)))
726 ;; found a comment, probably 703 ;; found a comment, probably
727 (let ((c-reg (hs-inside-comment-p))) ; blech! 704 (let ((c-reg (hs-inside-comment-p))) ; blech!
728 (when (and c-reg (car c-reg)) 705 (when (and c-reg (car c-reg))
729 (if (> (count-lines (car c-reg) (nth 1 c-reg)) 1) 706 (if (> (count-lines (car c-reg) (nth 1 c-reg)) 1)
730 (hs-hide-block-at-point t c-reg) 707 (hs-hide-block-at-point t c-reg)
@@ -772,18 +749,15 @@ See documentation for functions `hs-hide-block' and `run-hooks'."
772 (or 749 (or
773 ;; first see if we have something at the end of the line 750 ;; first see if we have something at the end of the line
774 (catch 'eol-begins-hidden-region-p 751 (catch 'eol-begins-hidden-region-p
775 (let ((here (point)) 752 (let ((here (point)))
776 (ovs (save-excursion (end-of-line) (overlays-at (point))))) 753 (dolist (ov (save-excursion (end-of-line) (overlays-at (point))))
777 (while ovs 754 (when (overlay-get ov 'hs)
778 (let ((ov (car ovs))) 755 (goto-char
779 (when (overlay-get ov 'hs) 756 (cond (end (overlay-end ov))
780 (goto-char 757 ((eq 'comment (overlay-get ov 'hs)) here)
781 (cond (end (overlay-end ov)) 758 (t (+ (overlay-start ov) (overlay-get ov 'hs-ofs)))))
782 ((eq 'comment (overlay-get ov 'hs)) here) 759 (delete-overlay ov)
783 (t (+ (overlay-start ov) (overlay-get ov 'hs-ofs))))) 760 (throw 'eol-begins-hidden-region-p t)))
784 (delete-overlay ov)
785 (throw 'eol-begins-hidden-region-p t)))
786 (setq ovs (cdr ovs)))
787 nil)) 761 nil))
788 ;; not immediately obvious, look for a suitable block 762 ;; not immediately obvious, look for a suitable block
789 (let ((c-reg (hs-inside-comment-p)) 763 (let ((c-reg (hs-inside-comment-p))
@@ -870,9 +844,9 @@ Key bindings:
870 844
871 (interactive "P") 845 (interactive "P")
872 (setq hs-headline nil 846 (setq hs-headline nil
873 hs-minor-mode (if (null arg) 847 hs-minor-mode (if (null arg)
874 (not hs-minor-mode) 848 (not hs-minor-mode)
875 (> (prefix-numeric-value arg) 0))) 849 (> (prefix-numeric-value arg) 0)))
876 (if hs-minor-mode 850 (if hs-minor-mode
877 (progn 851 (progn
878 (hs-grok-mode-type) 852 (hs-grok-mode-type)
@@ -912,27 +886,19 @@ Key bindings:
912 ))))) 886 )))))
913 887
914;; some housekeeping 888;; some housekeeping
915(or (assq 'hs-minor-mode minor-mode-map-alist) 889(add-to-list 'minor-mode-map-alist (cons 'hs-minor-mode hs-minor-mode-map))
916 (setq minor-mode-map-alist 890(add-to-list 'minor-mode-alist '(hs-minor-mode " hs") t)
917 (cons (cons 'hs-minor-mode hs-minor-mode-map)
918 minor-mode-map-alist)))
919(or (assq 'hs-minor-mode minor-mode-alist)
920 (setq minor-mode-alist (append minor-mode-alist
921 (list '(hs-minor-mode " hs")))))
922 891
923;; make some variables permanently buffer-local 892;; make some variables permanently buffer-local
924(let ((vars '(hs-minor-mode 893(dolist (var '(hs-minor-mode
925 hs-c-start-regexp 894 hs-c-start-regexp
926 hs-block-start-regexp 895 hs-block-start-regexp
927 hs-block-start-mdata-select 896 hs-block-start-mdata-select
928 hs-block-end-regexp 897 hs-block-end-regexp
929 hs-forward-sexp-func 898 hs-forward-sexp-func
930 hs-adjust-block-beginning))) 899 hs-adjust-block-beginning))
931 (while vars 900 (make-variable-buffer-local var)
932 (let ((var (car vars))) 901 (put var 'permanent-local t))
933 (make-variable-buffer-local var)
934 (put var 'permanent-local t))
935 (setq vars (cdr vars))))
936 902
937;;--------------------------------------------------------------------------- 903;;---------------------------------------------------------------------------
938;; that's it 904;; that's it
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 45694b57b99..a17ba3e844f 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -2571,7 +2571,9 @@ If not in a statement just moves to end of line. Returns position."
2571 (let ((save-point (point))) 2571 (let ((save-point (point)))
2572 (when (re-search-forward ".*&" lim t) 2572 (when (re-search-forward ".*&" lim t)
2573 (goto-char (match-end 0)) 2573 (goto-char (match-end 0))
2574 (if (idlwave-quoted) (goto-char save-point))) 2574 (if (idlwave-quoted)
2575 (goto-char save-point)
2576 (if (eq (char-after (- (point) 2)) ?&) (goto-char save-point))))
2575 (point))) 2577 (point)))
2576 2578
2577(defun idlwave-skip-label-or-case () 2579(defun idlwave-skip-label-or-case ()
diff --git a/lisp/replace.el b/lisp/replace.el
index 646f693cd7f..775ad0ffb05 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -735,16 +735,17 @@ Alternatively, click \\[occur-mode-mouse-goto] on an item to go to it.
735Compatibility function for \\[next-error] invocations." 735Compatibility function for \\[next-error] invocations."
736 (interactive "p") 736 (interactive "p")
737 ;; we need to run occur-find-match from within the Occur buffer 737 ;; we need to run occur-find-match from within the Occur buffer
738 (with-current-buffer 738 (with-current-buffer
739 (if (next-error-buffer-p (current-buffer)) 739 (if (next-error-buffer-p (current-buffer))
740 (current-buffer) 740 (current-buffer)
741 (next-error-find-buffer nil nil (lambda() (eq major-mode 'occur-mode)))) 741 (next-error-find-buffer nil nil (lambda() (eq major-mode 'occur-mode))))
742 742
743 (when reset 743 (goto-char (cond (reset (point-min))
744 (goto-char (point-min))) 744 ((< argp 0) (line-beginning-position))
745 ((line-end-position))))
745 (occur-find-match 746 (occur-find-match
746 (abs (prefix-numeric-value argp)) 747 (abs argp)
747 (if (> 0 (prefix-numeric-value argp)) 748 (if (> 0 argp)
748 #'previous-single-property-change 749 #'previous-single-property-change
749 #'next-single-property-change) 750 #'next-single-property-change)
750 "No more matches") 751 "No more matches")
@@ -752,6 +753,20 @@ Compatibility function for \\[next-error] invocations."
752 (set-window-point (get-buffer-window (current-buffer)) (point)) 753 (set-window-point (get-buffer-window (current-buffer)) (point))
753 (occur-mode-goto-occurrence))) 754 (occur-mode-goto-occurrence)))
754 755
756(defface match
757 '((((class color) (min-colors 88) (background light))
758 :background "Tan")
759 (((class color) (min-colors 88) (background dark))
760 :background "RoyalBlue4")
761 (((class color) (min-colors 8))
762 :background "blue" :foreground "white")
763 (((type tty) (class mono))
764 :inverse-video t)
765 (t :background "gray"))
766 "Face used to highlight matches permanently."
767 :group 'matching
768 :version "21.4")
769
755(defcustom list-matching-lines-default-context-lines 0 770(defcustom list-matching-lines-default-context-lines 0
756 "*Default number of context lines included around `list-matching-lines' matches. 771 "*Default number of context lines included around `list-matching-lines' matches.
757A negative number means to include that many lines before the match. 772A negative number means to include that many lines before the match.
@@ -761,7 +776,7 @@ A positive number means to include that many lines both before and after."
761 776
762(defalias 'list-matching-lines 'occur) 777(defalias 'list-matching-lines 'occur)
763 778
764(defcustom list-matching-lines-face 'bold 779(defcustom list-matching-lines-face 'match
765 "*Face used by \\[list-matching-lines] to show the text that matches. 780 "*Face used by \\[list-matching-lines] to show the text that matches.
766If the value is nil, don't highlight the matching portions specially." 781If the value is nil, don't highlight the matching portions specially."
767 :type 'face 782 :type 'face
@@ -776,18 +791,22 @@ If the value is nil, don't highlight the buffer names specially."
776(defun occur-accumulate-lines (count &optional keep-props) 791(defun occur-accumulate-lines (count &optional keep-props)
777 (save-excursion 792 (save-excursion
778 (let ((forwardp (> count 0)) 793 (let ((forwardp (> count 0))
779 (result nil)) 794 result beg end)
780 (while (not (or (zerop count) 795 (while (not (or (zerop count)
781 (if forwardp 796 (if forwardp
782 (eobp) 797 (eobp)
783 (bobp)))) 798 (bobp))))
784 (setq count (+ count (if forwardp -1 1))) 799 (setq count (+ count (if forwardp -1 1)))
800 (setq beg (line-beginning-position)
801 end (line-end-position))
802 (if (and keep-props (boundp 'jit-lock-mode) jit-lock-mode
803 (text-property-not-all beg end 'fontified t))
804 (jit-lock-fontify-now beg end))
785 (push 805 (push
786 (funcall (if keep-props 806 (funcall (if keep-props
787 #'buffer-substring 807 #'buffer-substring
788 #'buffer-substring-no-properties) 808 #'buffer-substring-no-properties)
789 (line-beginning-position) 809 beg end)
790 (line-end-position))
791 result) 810 result)
792 (forward-line (if forwardp 1 -1))) 811 (forward-line (if forwardp 1 -1)))
793 (nreverse result)))) 812 (nreverse result))))
@@ -982,14 +1001,17 @@ See also `multi-occur'."
982 (when (setq endpt (re-search-forward regexp nil t)) 1001 (when (setq endpt (re-search-forward regexp nil t))
983 (setq matches (1+ matches)) ;; increment match count 1002 (setq matches (1+ matches)) ;; increment match count
984 (setq matchbeg (match-beginning 0)) 1003 (setq matchbeg (match-beginning 0))
985 (setq begpt (save-excursion
986 (goto-char matchbeg)
987 (line-beginning-position)))
988 (setq lines (+ lines (1- (count-lines origpt endpt)))) 1004 (setq lines (+ lines (1- (count-lines origpt endpt))))
1005 (save-excursion
1006 (goto-char matchbeg)
1007 (setq begpt (line-beginning-position)
1008 endpt (line-end-position)))
989 (setq marker (make-marker)) 1009 (setq marker (make-marker))
990 (set-marker marker matchbeg) 1010 (set-marker marker matchbeg)
991 (setq curstring (buffer-substring begpt 1011 (if (and keep-props (boundp 'jit-lock-mode) jit-lock-mode
992 (line-end-position))) 1012 (text-property-not-all begpt endpt 'fontified t))
1013 (jit-lock-fontify-now begpt endpt))
1014 (setq curstring (buffer-substring begpt endpt))
993 ;; Depropertize the string, and maybe 1015 ;; Depropertize the string, and maybe
994 ;; highlight the matches 1016 ;; highlight the matches
995 (let ((len (length curstring)) 1017 (let ((len (length curstring))
@@ -998,17 +1020,15 @@ See also `multi-occur'."
998 (set-text-properties 0 len nil curstring)) 1020 (set-text-properties 0 len nil curstring))
999 (while (and (< start len) 1021 (while (and (< start len)
1000 (string-match regexp curstring start)) 1022 (string-match regexp curstring start))
1001 (add-text-properties (match-beginning 0) 1023 (add-text-properties
1002 (match-end 0) 1024 (match-beginning 0) (match-end 0)
1003 (append 1025 (append
1004 `(occur-match t) 1026 `(occur-match t)
1005 (when match-face 1027 (when match-face
1006 ;; Use `face' rather than 1028 ;; Use `face' rather than `font-lock-face' here
1007 ;; `font-lock-face' here 1029 ;; so as to override faces copied from the buffer.
1008 ;; so as to override faces 1030 `(face ,match-face)))
1009 ;; copied from the buffer. 1031 curstring)
1010 `(face ,match-face)))
1011 curstring)
1012 (setq start (match-end 0)))) 1032 (setq start (match-end 0))))
1013 ;; Generate the string to insert for this match 1033 ;; Generate the string to insert for this match
1014 (let* ((out-line 1034 (let* ((out-line
@@ -1019,7 +1039,10 @@ See also `multi-occur'."
1019 (when prefix-face 1039 (when prefix-face
1020 `(font-lock-face prefix-face)) 1040 `(font-lock-face prefix-face))
1021 '(occur-prefix t))) 1041 '(occur-prefix t)))
1022 curstring 1042 ;; We don't put `mouse-face' on the newline,
1043 ;; because that loses. And don't put it
1044 ;; on context lines to reduce flicker.
1045 (propertize curstring 'mouse-face 'highlight)
1023 "\n")) 1046 "\n"))
1024 (data 1047 (data
1025 (if (= nlines 0) 1048 (if (= nlines 0)
@@ -1043,10 +1066,7 @@ See also `multi-occur'."
1043 (insert "-------\n")) 1066 (insert "-------\n"))
1044 (add-text-properties 1067 (add-text-properties
1045 beg end 1068 beg end
1046 `(occur-target ,marker help-echo "mouse-2: go to this occurrence")) 1069 `(occur-target ,marker help-echo "mouse-2: go to this occurrence")))))
1047 ;; We don't put `mouse-face' on the newline,
1048 ;; because that loses.
1049 (add-text-properties beg (1- end) '(mouse-face highlight)))))
1050 (goto-char endpt)) 1070 (goto-char endpt))
1051 (if endpt 1071 (if endpt
1052 (progn 1072 (progn
@@ -1283,6 +1303,7 @@ make, or the user didn't cancel the call."
1283 1303
1284 (isearch-string isearch-string) 1304 (isearch-string isearch-string)
1285 (isearch-regexp isearch-regexp) 1305 (isearch-regexp isearch-regexp)
1306 (isearch-case-fold-search isearch-case-fold-search)
1286 (message 1307 (message
1287 (if query-flag 1308 (if query-flag
1288 (substitute-command-keys 1309 (substitute-command-keys
@@ -1315,9 +1336,11 @@ make, or the user didn't cancel the call."
1315 (if regexp-flag from-string 1336 (if regexp-flag from-string
1316 (regexp-quote from-string)) 1337 (regexp-quote from-string))
1317 "\\b"))) 1338 "\\b")))
1318 (if (eq query-replace-highlight 'isearch) 1339 (when query-replace-lazy-highlight
1319 (setq isearch-string search-string 1340 (setq isearch-string search-string
1320 isearch-regexp regexp-flag)) 1341 isearch-regexp (or delimited-flag regexp-flag)
1342 isearch-case-fold-search case-fold-search
1343 isearch-lazy-highlight-last-string nil))
1321 1344
1322 (push-mark) 1345 (push-mark)
1323 (undo-boundary) 1346 (undo-boundary)
@@ -1535,13 +1558,15 @@ make, or the user didn't cancel the call."
1535 (append (listify-key-sequence key) 1558 (append (listify-key-sequence key)
1536 unread-command-events)) 1559 unread-command-events))
1537 (setq done t))) 1560 (setq done t)))
1538 (when (eq query-replace-highlight 'isearch) 1561 (when query-replace-lazy-highlight
1539 ;; Force isearch rehighlighting 1562 ;; Restore isearch data for lazy highlighting
1540 (if (not (memq def '(skip backup))) 1563 ;; in case of isearching during recursive edit
1541 (setq isearch-lazy-highlight-last-string nil))
1542 ;; Restore isearch data in case of isearching during edit
1543 (setq isearch-string search-string 1564 (setq isearch-string search-string
1544 isearch-regexp regexp-flag))) 1565 isearch-regexp (or delimited-flag regexp-flag)
1566 isearch-case-fold-search case-fold-search)
1567 ;; Force lazy rehighlighting only after replacements
1568 (if (not (memq def '(skip backup)))
1569 (setq isearch-lazy-highlight-last-string nil))))
1545 ;; Record previous position for ^ when we move on. 1570 ;; Record previous position for ^ when we move on.
1546 ;; Change markers to numbers in the match data 1571 ;; Change markers to numbers in the match data
1547 ;; since lots of markers slow down editing. 1572 ;; since lots of markers slow down editing.
@@ -1576,38 +1601,45 @@ make, or the user didn't cancel the call."
1576 (if (= replace-count 1) "" "s"))) 1601 (if (= replace-count 1) "" "s")))
1577 (and keep-going stack))) 1602 (and keep-going stack)))
1578 1603
1579(defcustom query-replace-highlight 1604(defcustom query-replace-highlight t
1580 (if (and search-highlight isearch-lazy-highlight) 'isearch t) 1605 "*Non-nil means to highlight matches during query replacement."
1581 "*Non-nil means to highlight words during query replacement. 1606 :type 'boolean
1582If `isearch', use isearch highlighting for query replacement."
1583 :type '(choice (const :tag "Highlight" t)
1584 (const :tag "No highlighting" nil)
1585 (const :tag "Isearch highlighting" 'isearch))
1586 :group 'matching) 1607 :group 'matching)
1587 1608
1609(defcustom query-replace-lazy-highlight t
1610 "*Controls the lazy-highlighting during query replacements.
1611When non-nil, all text in the buffer matching the current match
1612is highlighted lazily using isearch lazy highlighting (see
1613`isearch-lazy-highlight-initial-delay' and
1614`isearch-lazy-highlight-interval')."
1615 :type 'boolean
1616 :group 'matching
1617 :version "21.4")
1618
1619(defface query-replace
1620 '((t (:inherit isearch)))
1621 "Face for highlighting query replacement matches."
1622 :group 'matching
1623 :version "21.4")
1624
1588(defvar replace-overlay nil) 1625(defvar replace-overlay nil)
1589 1626
1627(defun replace-highlight (beg end)
1628 (if query-replace-highlight
1629 (if replace-overlay
1630 (move-overlay replace-overlay beg end (current-buffer))
1631 (setq replace-overlay (make-overlay beg end))
1632 (overlay-put replace-overlay 'priority 1) ;higher than lazy overlays
1633 (overlay-put replace-overlay 'face 'query-replace)))
1634 (if query-replace-lazy-highlight
1635 (isearch-lazy-highlight-new-loop)))
1636
1590(defun replace-dehighlight () 1637(defun replace-dehighlight ()
1591 (cond ((eq query-replace-highlight 'isearch) 1638 (when replace-overlay
1592 (isearch-dehighlight t) 1639 (delete-overlay replace-overlay))
1593 (isearch-lazy-highlight-cleanup isearch-lazy-highlight-cleanup) 1640 (when query-replace-lazy-highlight
1594 (setq isearch-lazy-highlight-last-string nil)) 1641 (isearch-lazy-highlight-cleanup isearch-lazy-highlight-cleanup)
1595 (query-replace-highlight 1642 (setq isearch-lazy-highlight-last-string nil)))
1596 (when replace-overlay
1597 (delete-overlay replace-overlay)
1598 (setq replace-overlay nil)))))
1599
1600(defun replace-highlight (start end)
1601 (cond ((eq query-replace-highlight 'isearch)
1602 (isearch-highlight start end)
1603 (isearch-lazy-highlight-new-loop))
1604 (query-replace-highlight
1605 (if replace-overlay
1606 (move-overlay replace-overlay start end (current-buffer))
1607 (setq replace-overlay (make-overlay start end))
1608 (overlay-put replace-overlay 'face
1609 (if (facep 'query-replace)
1610 'query-replace 'region))))))
1611 1643
1612;; arch-tag: 16b4cd61-fd40-497b-b86f-b667c4cf88e4 1644;; arch-tag: 16b4cd61-fd40-497b-b86f-b667c4cf88e4
1613;;; replace.el ends here 1645;;; replace.el ends here
diff --git a/lisp/simple.el b/lisp/simple.el
index 4a95b18bcb9..a87a30e1786 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -645,10 +645,6 @@ If BACKWARD-ONLY is non-nil, only delete spaces before point."
645 (skip-chars-forward " \t") 645 (skip-chars-forward " \t")
646 (constrain-to-field nil orig-pos t))))) 646 (constrain-to-field nil orig-pos t)))))
647 647
648(defvar inhibit-mark-movement nil
649 "If non-nil, movement commands, such as \\[beginning-of-buffer], \
650do not set the mark.")
651
652(defun beginning-of-buffer (&optional arg) 648(defun beginning-of-buffer (&optional arg)
653 "Move point to the beginning of the buffer; leave mark at previous position. 649 "Move point to the beginning of the buffer; leave mark at previous position.
654With \\[universal-argument] prefix, do not set mark at previous position. 650With \\[universal-argument] prefix, do not set mark at previous position.
@@ -660,8 +656,7 @@ of the accessible part of the buffer.
660Don't use this command in Lisp programs! 656Don't use this command in Lisp programs!
661\(goto-char (point-min)) is faster and avoids clobbering the mark." 657\(goto-char (point-min)) is faster and avoids clobbering the mark."
662 (interactive "P") 658 (interactive "P")
663 (or inhibit-mark-movement 659 (or (consp arg)
664 (consp arg)
665 (and transient-mark-mode mark-active) 660 (and transient-mark-mode mark-active)
666 (push-mark)) 661 (push-mark))
667 (let ((size (- (point-max) (point-min)))) 662 (let ((size (- (point-max) (point-min))))
@@ -686,8 +681,7 @@ of the accessible part of the buffer.
686Don't use this command in Lisp programs! 681Don't use this command in Lisp programs!
687\(goto-char (point-max)) is faster and avoids clobbering the mark." 682\(goto-char (point-max)) is faster and avoids clobbering the mark."
688 (interactive "P") 683 (interactive "P")
689 (or inhibit-mark-movement 684 (or (consp arg)
690 (consp arg)
691 (and transient-mark-mode mark-active) 685 (and transient-mark-mode mark-active)
692 (push-mark)) 686 (push-mark))
693 (let ((size (- (point-max) (point-min)))) 687 (let ((size (- (point-max) (point-min))))
@@ -1490,6 +1484,17 @@ is not *inside* the region START...END."
1490 (t 1484 (t
1491 '(0 . 0))) 1485 '(0 . 0)))
1492 '(0 . 0))) 1486 '(0 . 0)))
1487
1488;; When the first undo batch in an undo list is longer than undo-outer-limit,
1489;; this function gets called to ask the user what to do.
1490;; Garbage collection is inhibited around the call,
1491;; so it had better not do a lot of consing.
1492(setq undo-outer-limit-function 'undo-outer-limit-truncate)
1493(defun undo-outer-limit-truncate (size)
1494 (if (yes-or-no-p (format "Buffer %s undo info is %d bytes long; discard it? "
1495 (buffer-name) size))
1496 (progn (setq buffer-undo-list nil) t)
1497 nil))
1493 1498
1494(defvar shell-command-history nil 1499(defvar shell-command-history nil
1495 "History list for some commands that read shell commands.") 1500 "History list for some commands that read shell commands.")
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index f6a1c1d5cce..f3a7616bfd6 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -1975,7 +1975,7 @@ SPC: Accept word this time.
1975 (sit-for 5) 1975 (sit-for 5)
1976 (kill-buffer "*Ispell Help*")) 1976 (kill-buffer "*Ispell Help*"))
1977 (unwind-protect 1977 (unwind-protect
1978 (progn 1978 (let ((resize-mini-windows 'grow-only))
1979 (select-window (minibuffer-window)) 1979 (select-window (minibuffer-window))
1980 (erase-buffer) 1980 (erase-buffer)
1981 (message nil) 1981 (message nil)
diff --git a/lisp/tooltip.el b/lisp/tooltip.el
index 5bcb28dde52..2e60df02459 100644
--- a/lisp/tooltip.el
+++ b/lisp/tooltip.el
@@ -1,6 +1,7 @@
1;;; tooltip.el --- show tooltip windows 1;;; tooltip.el --- show tooltip windows
2 2
3;; Copyright (C) 1997, 1999, 2000, 2001, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003, 2004
4;; Free Software Foundation, Inc.
4 5
5;; Author: Gerd Moellmann <gerd@acm.org> 6;; Author: Gerd Moellmann <gerd@acm.org>
6;; Keywords: help c mouse tools 7;; Keywords: help c mouse tools
@@ -476,7 +477,25 @@ This function must return nil if it doesn't handle EVENT."
476(defun tooltip-show-help-function (msg) 477(defun tooltip-show-help-function (msg)
477 "Function installed as `show-help-function'. 478 "Function installed as `show-help-function'.
478MSG is either a help string to display, or nil to cancel the display." 479MSG is either a help string to display, or nil to cancel the display."
479 (let ((previous-help tooltip-help-message)) 480 (let ((previous-help tooltip-help-message)
481 mp pos)
482 (if (and mouse-1-click-follows-link
483 (stringp msg)
484 (save-match-data
485 (string-match "^mouse-2" msg))
486 (setq mp (mouse-pixel-position))
487 (consp (setq pos (cdr mp)))
488 (setq pos (posn-at-x-y (car pos) (cdr pos) (car mp)))
489 (windowp (posn-window pos)))
490 (with-current-buffer (window-buffer (posn-window pos))
491 (if (mouse-on-link-p (posn-point pos))
492 (setq msg (concat
493 (cond
494 ((eq mouse-1-click-follows-link 'double) "double-")
495 ((and (integerp mouse-1-click-follows-link)
496 (< mouse-1-click-follows-link 0)) "Long ")
497 (t ""))
498 "mouse-1" (substring msg 7))))))
480 (setq tooltip-help-message msg) 499 (setq tooltip-help-message msg)
481 (cond ((null msg) 500 (cond ((null msg)
482 ;; Cancel display. This also cancels a delayed tip, if 501 ;; Cancel display. This also cancels a delayed tip, if
diff --git a/lisp/vc.el b/lisp/vc.el
index 63e9be651d9..64de0351922 100644
--- a/lisp/vc.el
+++ b/lisp/vc.el
@@ -2836,7 +2836,7 @@ Uses `rcs2log' which only works for RCS and CVS."
2836 (pop-to-buffer 2836 (pop-to-buffer
2837 (set-buffer (get-buffer-create "*vc*"))) 2837 (set-buffer (get-buffer-create "*vc*")))
2838 (erase-buffer) 2838 (erase-buffer)
2839 (insert-file tempfile) 2839 (insert-file-contents tempfile)
2840 "failed")) 2840 "failed"))
2841 (setq default-directory (file-name-directory changelog)) 2841 (setq default-directory (file-name-directory changelog))
2842 (delete-file tempfile))))) 2842 (delete-file tempfile)))))
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index f3d7657984f..46eb608c690 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -327,6 +327,7 @@ new value.")
327 (let ((keymap (widget-get widget :keymap)) 327 (let ((keymap (widget-get widget :keymap))
328 (face (or (widget-get widget :value-face) 'widget-field-face)) 328 (face (or (widget-get widget :value-face) 'widget-field-face))
329 (help-echo (widget-get widget :help-echo)) 329 (help-echo (widget-get widget :help-echo))
330 (follow-link (widget-get widget :follow-link))
330 (rear-sticky 331 (rear-sticky
331 (or (not widget-field-add-space) (widget-get widget :size)))) 332 (or (not widget-field-add-space) (widget-get widget :size))))
332 (if (functionp help-echo) 333 (if (functionp help-echo)
@@ -345,6 +346,7 @@ new value.")
345 ;; works in the field when, say, Custom uses `suppress-keymap'. 346 ;; works in the field when, say, Custom uses `suppress-keymap'.
346 (overlay-put overlay 'local-map keymap) 347 (overlay-put overlay 'local-map keymap)
347 (overlay-put overlay 'face face) 348 (overlay-put overlay 'face face)
349 (overlay-put overlay 'follow-link follow-link)
348 (overlay-put overlay 'help-echo help-echo)) 350 (overlay-put overlay 'help-echo help-echo))
349 (setq to (1- to)) 351 (setq to (1- to))
350 (setq rear-sticky t)) 352 (setq rear-sticky t))
@@ -354,6 +356,7 @@ new value.")
354 (overlay-put overlay 'field widget) 356 (overlay-put overlay 'field widget)
355 (overlay-put overlay 'local-map keymap) 357 (overlay-put overlay 'local-map keymap)
356 (overlay-put overlay 'face face) 358 (overlay-put overlay 'face face)
359 (overlay-put overlay 'follow-link follow-link)
357 (overlay-put overlay 'help-echo help-echo))) 360 (overlay-put overlay 'help-echo help-echo)))
358 (widget-specify-secret widget)) 361 (widget-specify-secret widget))
359 362
@@ -378,6 +381,7 @@ new value.")
378(defun widget-specify-button (widget from to) 381(defun widget-specify-button (widget from to)
379 "Specify button for WIDGET between FROM and TO." 382 "Specify button for WIDGET between FROM and TO."
380 (let ((overlay (make-overlay from to nil t nil)) 383 (let ((overlay (make-overlay from to nil t nil))
384 (follow-link (widget-get widget :follow-link))
381 (help-echo (widget-get widget :help-echo))) 385 (help-echo (widget-get widget :help-echo)))
382 (widget-put widget :button-overlay overlay) 386 (widget-put widget :button-overlay overlay)
383 (if (functionp help-echo) 387 (if (functionp help-echo)
@@ -389,6 +393,7 @@ new value.")
389 (unless (widget-get widget :suppress-face) 393 (unless (widget-get widget :suppress-face)
390 (overlay-put overlay 'face (widget-apply widget :button-face-get))) 394 (overlay-put overlay 'face (widget-apply widget :button-face-get)))
391 (overlay-put overlay 'pointer 'hand) 395 (overlay-put overlay 'pointer 'hand)
396 (overlay-put overlay 'follow-link follow-link)
392 (overlay-put overlay 'help-echo help-echo))) 397 (overlay-put overlay 'help-echo help-echo)))
393 398
394(defun widget-mouse-help (window overlay point) 399(defun widget-mouse-help (window overlay point)
@@ -1705,6 +1710,7 @@ If END is omitted, it defaults to the length of LIST."
1705 "An embedded link." 1710 "An embedded link."
1706 :button-prefix 'widget-link-prefix 1711 :button-prefix 'widget-link-prefix
1707 :button-suffix 'widget-link-suffix 1712 :button-suffix 'widget-link-suffix
1713 :follow-link "\C-m"
1708 :help-echo "Follow the link." 1714 :help-echo "Follow the link."
1709 :format "%[%t%]") 1715 :format "%[%t%]")
1710 1716
diff --git a/lispref/ChangeLog b/lispref/ChangeLog
index 6944d2af6c5..247309624de 100644
--- a/lispref/ChangeLog
+++ b/lispref/ChangeLog
@@ -1,3 +1,7 @@
12004-12-21 Richard M. Stallman <rms@gnu.org>
2
3 * commands.texi (Event Input Misc): Add while-no-input.
4
12004-12-11 Richard M. Stallman <rms@gnu.org> 52004-12-11 Richard M. Stallman <rms@gnu.org>
2 6
3 * display.texi (Line Height): Rewrite text for clarity. 7 * display.texi (Line Height): Rewrite text for clarity.
diff --git a/lispref/commands.texi b/lispref/commands.texi
index 0144123ecb5..85e2953f102 100644
--- a/lispref/commands.texi
+++ b/lispref/commands.texi
@@ -2388,6 +2388,18 @@ The alias @code{last-input-char} exists for compatibility with
2388Emacs version 18. 2388Emacs version 18.
2389@end defvar 2389@end defvar
2390 2390
2391@defmac while-no-input body...
2392This construct runs the @var{body} forms and returns the value
2393of the last one---but only if no input arrives. If any input
2394arrives during the execution of the @var{body} forms, it aborts
2395them (working much like a quit), and the @code{while-no-input}
2396form returns @code{nil}.
2397
2398If a part of @var{body} binds @code{inhibit-quit} to non-@code{nil},
2399arrival of input during those parts won't cause an abort until
2400the end of that part.
2401@end defmac
2402
2391@defun discard-input 2403@defun discard-input
2392@cindex flush input 2404@cindex flush input
2393@cindex discard input 2405@cindex discard input
diff --git a/man/ChangeLog b/man/ChangeLog
index b251dc8e912..3b6507e6b78 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,3 +1,40 @@
12004-12-20 Jay Belanger <belanger@truman.edu>
2
3 * calc.texi (Types Tutorial): Emphasized that you can't divide by
4 zero.
5
62004-12-17 Luc Teirlinck <teirllm@auburn.edu>
7
8 * cc-mode.texi (Text Filling and Line Breaking): Put period after
9 @xref.
10 (Font Locking): Avoid @strong{Note:}.
11
122004-12-17 Michael Albinus <michael.albinus@gmx.de>
13
14 Sync with Tramp 2.0.46.
15
16 * tramp.texi (bottom): Add arch-tag. It was lost, somehow.
17
182004-12-16 Luc Teirlinck <teirllm@auburn.edu>
19
20 * url.texi: Correct typos.
21 (Retrieving URLs): @var{nil}->@code{nil}.
22 (HTTP language/coding, mailto): Replace "GNU Emacs Manual" with
23 the standard "The GNU Emacs Manual" in fifth argument of @xref's.
24 (Dealing with HTTP documents): @inforef->@xref.
25
262004-12-15 Juri Linkov <juri@jurta.org>
27
28 * mark.texi (Transient Mark, Mark Ring): M-< and other
29 movement commands don't set mark in Transient Mark mode
30 if mark is active.
31
322004-12-15 Jay Belanger <belanger@truman.edu>
33
34 * calc.texi: Consistently capitalized all mode names.
35 (Answers to Exercises): Mention that an answer can be a fraction
36 when in Fraction mode.
37
12004-12-13 Jay Belanger <belanger@truman.edu> 382004-12-13 Jay Belanger <belanger@truman.edu>
2 39
3 * calc.texi: Fix some TeX definitions. 40 * calc.texi: Fix some TeX definitions.
diff --git a/man/calc.texi b/man/calc.texi
index 16447e4e953..8260ed10350 100644
--- a/man/calc.texi
+++ b/man/calc.texi
@@ -463,7 +463,7 @@ Algebraic manipulation features, including symbolic calculus.
463Moving data to and from regular editing buffers. 463Moving data to and from regular editing buffers.
464 464
465@item 465@item
466``Embedded mode'' for manipulating Calc formulas and data directly 466Embedded mode for manipulating Calc formulas and data directly
467inside any editing buffer. 467inside any editing buffer.
468 468
469@item 469@item
@@ -766,7 +766,7 @@ To exit from Calc, press @kbd{q} or @kbd{M-# c} again.
766@noindent 766@noindent
767Calc has several user interfaces that are specialized for 767Calc has several user interfaces that are specialized for
768different kinds of tasks. As well as Calc's standard interface, 768different kinds of tasks. As well as Calc's standard interface,
769there are Quick Mode, Keypad Mode, and Embedded Mode. 769there are Quick mode, Keypad mode, and Embedded mode.
770 770
771@menu 771@menu
772* Starting Calc:: 772* Starting Calc::
@@ -801,7 +801,7 @@ doesn't matter for @kbd{M-#}) that says which Calc interface you
801want to use. 801want to use.
802 802
803To get Calc's standard interface, type @kbd{M-# c}. To get 803To get Calc's standard interface, type @kbd{M-# c}. To get
804Keypad Mode, type @kbd{M-# k}. Type @kbd{M-# ?} to get a brief 804Keypad mode, type @kbd{M-# k}. Type @kbd{M-# ?} to get a brief
805list of the available options, and type a second @kbd{?} to get 805list of the available options, and type a second @kbd{?} to get
806a complete list. 806a complete list.
807 807
@@ -814,7 +814,7 @@ function key twice is just like hitting @kbd{M-# M-#}.)
814 814
815If @kbd{M-#} doesn't work for you, you can always type explicit 815If @kbd{M-#} doesn't work for you, you can always type explicit
816commands like @kbd{M-x calc} (for the standard user interface) or 816commands like @kbd{M-x calc} (for the standard user interface) or
817@w{@kbd{M-x calc-keypad}} (for Keypad Mode). First type @kbd{M-x} 817@w{@kbd{M-x calc-keypad}} (for Keypad mode). First type @kbd{M-x}
818(that's Meta with the letter @kbd{x}), then, at the prompt, 818(that's Meta with the letter @kbd{x}), then, at the prompt,
819type the full command (like @kbd{calc-keypad}) and press Return. 819type the full command (like @kbd{calc-keypad}) and press Return.
820 820
@@ -917,11 +917,11 @@ way to switch out of Calc momentarily to edit your file; type
917@subsection Quick Mode (Overview) 917@subsection Quick Mode (Overview)
918 918
919@noindent 919@noindent
920@dfn{Quick Mode} is a quick way to use Calc when you don't need the 920@dfn{Quick mode} is a quick way to use Calc when you don't need the
921full complexity of the stack and trail. To use it, type @kbd{M-# q} 921full complexity of the stack and trail. To use it, type @kbd{M-# q}
922(@code{quick-calc}) in any regular editing buffer. 922(@code{quick-calc}) in any regular editing buffer.
923 923
924Quick Mode is very simple: It prompts you to type any formula in 924Quick mode is very simple: It prompts you to type any formula in
925standard algebraic notation (like @samp{4 - 2/3}) and then displays 925standard algebraic notation (like @samp{4 - 2/3}) and then displays
926the result at the bottom of the Emacs screen (@mathit{3.33333333333} 926the result at the bottom of the Emacs screen (@mathit{3.33333333333}
927in this case). You are then back in the same editing buffer you 927in this case). You are then back in the same editing buffer you
@@ -930,7 +930,7 @@ again to do another quick calculation. The result of the calculation
930will also be in the Emacs ``kill ring'' so that a @kbd{C-y} command 930will also be in the Emacs ``kill ring'' so that a @kbd{C-y} command
931at this point will yank the result into your editing buffer. 931at this point will yank the result into your editing buffer.
932 932
933Calc mode settings affect Quick Mode, too, though you will have to 933Calc mode settings affect Quick mode, too, though you will have to
934go into regular Calc (with @kbd{M-# c}) to change the mode settings. 934go into regular Calc (with @kbd{M-# c}) to change the mode settings.
935 935
936@c [fix-ref Quick Calculator mode] 936@c [fix-ref Quick Calculator mode]
@@ -940,12 +940,12 @@ go into regular Calc (with @kbd{M-# c}) to change the mode settings.
940@subsection Keypad Mode (Overview) 940@subsection Keypad Mode (Overview)
941 941
942@noindent 942@noindent
943@dfn{Keypad Mode} is a mouse-based interface to the Calculator. 943@dfn{Keypad mode} is a mouse-based interface to the Calculator.
944It is designed for use with terminals that support a mouse. If you 944It is designed for use with terminals that support a mouse. If you
945don't have a mouse, you will have to operate keypad mode with your 945don't have a mouse, you will have to operate Keypad mode with your
946arrow keys (which is probably more trouble than it's worth). 946arrow keys (which is probably more trouble than it's worth).
947 947
948Type @kbd{M-# k} to turn Keypad Mode on or off. Once again you 948Type @kbd{M-# k} to turn Keypad mode on or off. Once again you
949get two new windows, this time on the righthand side of the screen 949get two new windows, this time on the righthand side of the screen
950instead of at the bottom. The upper window is the familiar Calc 950instead of at the bottom. The upper window is the familiar Calc
951Stack; the lower window is a picture of a typical calculator keypad. 951Stack; the lower window is a picture of a typical calculator keypad.
@@ -981,12 +981,12 @@ Stack; the lower window is a picture of a typical calculator keypad.
981 |-----+-----+-----+-----+-----+ 981 |-----+-----+-----+-----+-----+
982@end smallexample 982@end smallexample
983 983
984Keypad Mode is much easier for beginners to learn, because there 984Keypad mode is much easier for beginners to learn, because there
985is no need to memorize lots of obscure key sequences. But not all 985is no need to memorize lots of obscure key sequences. But not all
986commands in regular Calc are available on the Keypad. You can 986commands in regular Calc are available on the Keypad. You can
987always switch the cursor into the Calc stack window to use 987always switch the cursor into the Calc stack window to use
988standard Calc commands if you need. Serious Calc users, though, 988standard Calc commands if you need. Serious Calc users, though,
989often find they prefer the standard interface over Keypad Mode. 989often find they prefer the standard interface over Keypad mode.
990 990
991To operate the Calculator, just click on the ``buttons'' of the 991To operate the Calculator, just click on the ``buttons'' of the
992keypad using your left mouse button. To enter the two numbers 992keypad using your left mouse button. To enter the two numbers
@@ -999,13 +999,13 @@ keypad change to show other sets of commands, such as advanced
999math functions, vector operations, and operations on binary 999math functions, vector operations, and operations on binary
1000numbers. 1000numbers.
1001 1001
1002Because Keypad Mode doesn't use the regular keyboard, Calc leaves 1002Because Keypad mode doesn't use the regular keyboard, Calc leaves
1003the cursor in your original editing buffer. You can type in 1003the cursor in your original editing buffer. You can type in
1004this buffer in the usual way while also clicking on the Calculator 1004this buffer in the usual way while also clicking on the Calculator
1005keypad. One advantage of Keypad Mode is that you don't need an 1005keypad. One advantage of Keypad mode is that you don't need an
1006explicit command to switch between editing and calculating. 1006explicit command to switch between editing and calculating.
1007 1007
1008If you press @kbd{M-# b} first, you get a full-screen Keypad Mode 1008If you press @kbd{M-# b} first, you get a full-screen Keypad mode
1009(@code{full-calc-keypad}) with three windows: The keypad in the lower 1009(@code{full-calc-keypad}) with three windows: The keypad in the lower
1010left, the stack in the lower right, and the trail on top. 1010left, the stack in the lower right, and the trail on top.
1011 1011
@@ -1043,7 +1043,7 @@ itself.
1043@subsection Embedded Mode (Overview) 1043@subsection Embedded Mode (Overview)
1044 1044
1045@noindent 1045@noindent
1046@dfn{Embedded Mode} is a way to use Calc directly from inside an 1046@dfn{Embedded mode} is a way to use Calc directly from inside an
1047editing buffer. Suppose you have a formula written as part of a 1047editing buffer. Suppose you have a formula written as part of a
1048document like this: 1048document like this:
1049 1049
@@ -1060,7 +1060,7 @@ is
1060@noindent 1060@noindent
1061and you wish to have Calc compute and format the derivative for 1061and you wish to have Calc compute and format the derivative for
1062you and store this derivative in the buffer automatically. To 1062you and store this derivative in the buffer automatically. To
1063do this with Embedded Mode, first copy the formula down to where 1063do this with Embedded mode, first copy the formula down to where
1064you want the result to be: 1064you want the result to be:
1065 1065
1066@smallexample 1066@smallexample
@@ -1099,7 +1099,7 @@ is
1099@end smallexample 1099@end smallexample
1100 1100
1101To make this look nicer, you might want to press @kbd{d =} to center 1101To make this look nicer, you might want to press @kbd{d =} to center
1102the formula, and even @kbd{d B} to use ``big'' display mode. 1102the formula, and even @kbd{d B} to use Big display mode.
1103 1103
1104@smallexample 1104@smallexample
1105@group 1105@group
@@ -1139,7 +1139,7 @@ righthand label: Type @kbd{d @} (1) @key{RET}}.
1139@end group 1139@end group
1140@end smallexample 1140@end smallexample
1141 1141
1142To leave Embedded Mode, type @kbd{M-# e} again. The mode line 1142To leave Embedded mode, type @kbd{M-# e} again. The mode line
1143and keyboard will revert to the way they were before. (If you have 1143and keyboard will revert to the way they were before. (If you have
1144actually been trying this as you read along, you'll want to press 1144actually been trying this as you read along, you'll want to press
1145@kbd{M-# 0} [with the digit zero] now to reset the modes you changed.) 1145@kbd{M-# 0} [with the digit zero] now to reset the modes you changed.)
@@ -1154,7 +1154,7 @@ A slope of one-third corresponds to an angle of 1 degrees.
1154@end smallexample 1154@end smallexample
1155 1155
1156Place the cursor on the @samp{1}, then type @kbd{M-# w} to enable 1156Place the cursor on the @samp{1}, then type @kbd{M-# w} to enable
1157Embedded Mode on that number. Now type @kbd{3 /} (to get one-third), 1157Embedded mode on that number. Now type @kbd{3 /} (to get one-third),
1158and @kbd{I T} (the Inverse Tangent converts a slope into an angle), 1158and @kbd{I T} (the Inverse Tangent converts a slope into an angle),
1159then @w{@kbd{M-# w}} again to exit Embedded mode. 1159then @w{@kbd{M-# w}} again to exit Embedded mode.
1160 1160
@@ -1221,7 +1221,7 @@ move it out of that window.
1221Control whether @kbd{M-# c} and @kbd{M-# k} use the full screen. 1221Control whether @kbd{M-# c} and @kbd{M-# k} use the full screen.
1222 1222
1223@item Q 1223@item Q
1224Use Quick Mode for a single short calculation. 1224Use Quick mode for a single short calculation.
1225 1225
1226@item K 1226@item K
1227Turn Calc Keypad mode on or off. 1227Turn Calc Keypad mode on or off.
@@ -1270,7 +1270,7 @@ Yank a value from the Calculator into the current editing buffer.
1270@end iftex 1270@end iftex
1271 1271
1272@noindent 1272@noindent
1273Commands for use with Embedded Mode: 1273Commands for use with Embedded mode:
1274 1274
1275@table @kbd 1275@table @kbd
1276@item A 1276@item A
@@ -1478,9 +1478,9 @@ to skip on to the rest of this manual.
1478 1478
1479@c [fix-ref Embedded Mode] 1479@c [fix-ref Embedded Mode]
1480This tutorial describes the standard user interface of Calc only. 1480This tutorial describes the standard user interface of Calc only.
1481The ``Quick Mode'' and ``Keypad Mode'' interfaces are fairly 1481The Quick mode and Keypad mode interfaces are fairly
1482self-explanatory. @xref{Embedded Mode}, for a description of 1482self-explanatory. @xref{Embedded Mode}, for a description of
1483the ``Embedded Mode'' interface. 1483the Embedded mode interface.
1484 1484
1485@ifinfo 1485@ifinfo
1486The easiest way to read this tutorial on-line is to have two windows on 1486The easiest way to read this tutorial on-line is to have two windows on
@@ -1940,8 +1940,8 @@ entire stack.)
1940 1940
1941@noindent 1941@noindent
1942If you are not used to RPN notation, you may prefer to operate the 1942If you are not used to RPN notation, you may prefer to operate the
1943Calculator in ``algebraic mode,'' which is closer to the way 1943Calculator in Algebraic mode, which is closer to the way
1944non-RPN calculators work. In algebraic mode, you enter formulas 1944non-RPN calculators work. In Algebraic mode, you enter formulas
1945in traditional @expr{2+3} notation. 1945in traditional @expr{2+3} notation.
1946 1946
1947You don't really need any special ``mode'' to enter algebraic formulas. 1947You don't really need any special ``mode'' to enter algebraic formulas.
@@ -2005,15 +2005,15 @@ that @samp{^} is evaluated from right to left. Thus, @samp{2-3-4} is
2005equivalent to @samp{(2-3)-4} or @mathit{-5}, whereas @samp{2^3^4} is equivalent 2005equivalent to @samp{(2-3)-4} or @mathit{-5}, whereas @samp{2^3^4} is equivalent
2006to @samp{2^(3^4)} (a very large integer; try it!). 2006to @samp{2^(3^4)} (a very large integer; try it!).
2007 2007
2008If you tire of typing the apostrophe all the time, there is an 2008If you tire of typing the apostrophe all the time, there is
2009``algebraic mode'' you can select in which Calc automatically senses 2009Algebraic mode, where Calc automatically senses
2010when you are about to type an algebraic expression. To enter this 2010when you are about to type an algebraic expression. To enter this
2011mode, press the two letters @w{@kbd{m a}}. (An @samp{Alg} indicator 2011mode, press the two letters @w{@kbd{m a}}. (An @samp{Alg} indicator
2012should appear in the Calc window's mode line.) 2012should appear in the Calc window's mode line.)
2013 2013
2014Press @kbd{m a}, then @kbd{2+3+4} with no apostrophe, then @key{RET}. 2014Press @kbd{m a}, then @kbd{2+3+4} with no apostrophe, then @key{RET}.
2015 2015
2016In algebraic mode, when you press any key that would normally begin 2016In Algebraic mode, when you press any key that would normally begin
2017entering a number (such as a digit, a decimal point, or the @kbd{_} 2017entering a number (such as a digit, a decimal point, or the @kbd{_}
2018key), or if you press @kbd{(} or @kbd{[}, Calc automatically begins 2018key), or if you press @kbd{(} or @kbd{[}, Calc automatically begins
2019an algebraic entry. 2019an algebraic entry.
@@ -2028,7 +2028,7 @@ Press the apostrophe, then type @kbd{sqrt(5*2) - 3}. The result should
2028be @expr{0.16227766017}. 2028be @expr{0.16227766017}.
2029 2029
2030Note that if the formula begins with a function name, you need to use 2030Note that if the formula begins with a function name, you need to use
2031the apostrophe even if you are in algebraic mode. If you type @kbd{arcsin} 2031the apostrophe even if you are in Algebraic mode. If you type @kbd{arcsin}
2032out of the blue, the @kbd{a r} will be taken as an Algebraic Rewrite 2032out of the blue, the @kbd{a r} will be taken as an Algebraic Rewrite
2033command, and the @kbd{csin} will be taken as the name of the rewrite 2033command, and the @kbd{csin} will be taken as the name of the rewrite
2034rule to use! 2034rule to use!
@@ -2037,7 +2037,7 @@ Some people prefer to enter complex numbers and vectors in algebraic
2037form because they find RPN entry with incomplete objects to be too 2037form because they find RPN entry with incomplete objects to be too
2038distracting, even though they otherwise use Calc as an RPN calculator. 2038distracting, even though they otherwise use Calc as an RPN calculator.
2039 2039
2040Still in algebraic mode, type: 2040Still in Algebraic mode, type:
2041 2041
2042@smallexample 2042@smallexample
2043@group 2043@group
@@ -2053,15 +2053,15 @@ Algebraic mode allows us to enter complex numbers without pressing
2053an apostrophe first, but it also means we need to press @key{RET} 2053an apostrophe first, but it also means we need to press @key{RET}
2054after every entry, even for a simple number like @expr{1}. 2054after every entry, even for a simple number like @expr{1}.
2055 2055
2056(You can type @kbd{C-u m a} to enable a special ``incomplete algebraic 2056(You can type @kbd{C-u m a} to enable a special Incomplete Algebraic
2057mode'' in which the @kbd{(} and @kbd{[} keys use algebraic entry even 2057mode in which the @kbd{(} and @kbd{[} keys use algebraic entry even
2058though regular numeric keys still use RPN numeric entry. There is also 2058though regular numeric keys still use RPN numeric entry. There is also
2059a ``total algebraic mode,'' started by typing @kbd{m t}, in which all 2059Total Algebraic mode, started by typing @kbd{m t}, in which all
2060normal keys begin algebraic entry. You must then use the @key{META} key 2060normal keys begin algebraic entry. You must then use the @key{META} key
2061to type Calc commands: @kbd{M-m t} to get back out of total algebraic 2061to type Calc commands: @kbd{M-m t} to get back out of Total Algebraic
2062mode, @kbd{M-q} to quit, etc.) 2062mode, @kbd{M-q} to quit, etc.)
2063 2063
2064If you're still in algebraic mode, press @kbd{m a} again to turn it off. 2064If you're still in Algebraic mode, press @kbd{m a} again to turn it off.
2065 2065
2066Actual non-RPN calculators use a mixture of algebraic and RPN styles. 2066Actual non-RPN calculators use a mixture of algebraic and RPN styles.
2067In general, operators of two numbers (like @kbd{+} and @kbd{*}) 2067In general, operators of two numbers (like @kbd{+} and @kbd{*})
@@ -2376,7 +2376,7 @@ during entry of a number or algebraic formula.
2376@noindent 2376@noindent
2377Calc has many types of @dfn{modes} that affect the way it interprets 2377Calc has many types of @dfn{modes} that affect the way it interprets
2378your commands or the way it displays data. We have already seen one 2378your commands or the way it displays data. We have already seen one
2379mode, namely algebraic mode. There are many others, too; we'll 2379mode, namely Algebraic mode. There are many others, too; we'll
2380try some of the most common ones here. 2380try some of the most common ones here.
2381 2381
2382Perhaps the most fundamental mode in Calc is the current @dfn{precision}. 2382Perhaps the most fundamental mode in Calc is the current @dfn{precision}.
@@ -2795,7 +2795,7 @@ and vice-versa.
2795@end group 2795@end group
2796@end smallexample 2796@end smallexample
2797 2797
2798Another interesting mode is @dfn{fraction mode}. Normally, 2798Another interesting mode is @dfn{Fraction mode}. Normally,
2799dividing two integers produces a floating-point result if the 2799dividing two integers produces a floating-point result if the
2800quotient can't be expressed as an exact integer. Fraction mode 2800quotient can't be expressed as an exact integer. Fraction mode
2801causes integer division to produce a fraction, i.e., a rational 2801causes integer division to produce a fraction, i.e., a rational
@@ -2819,7 +2819,7 @@ You can enter a fraction at any time using @kbd{:} notation.
2819(Calc uses @kbd{:} instead of @kbd{/} as the fraction separator 2819(Calc uses @kbd{:} instead of @kbd{/} as the fraction separator
2820because @kbd{/} is already used to divide the top two stack 2820because @kbd{/} is already used to divide the top two stack
2821elements.) Calculations involving fractions will always 2821elements.) Calculations involving fractions will always
2822produce exact fractional results; fraction mode only says 2822produce exact fractional results; Fraction mode only says
2823what to do when dividing two integers. 2823what to do when dividing two integers.
2824 2824
2825@cindex Fractions vs. floats 2825@cindex Fractions vs. floats
@@ -2830,7 +2830,7 @@ why would you ever use floating-point numbers instead?
2830 2830
2831Typing @kbd{m f} doesn't change any existing values in the stack. 2831Typing @kbd{m f} doesn't change any existing values in the stack.
2832In the above example, we had to Undo the division and do it over 2832In the above example, we had to Undo the division and do it over
2833again when we changed to fraction mode. But if you use the 2833again when we changed to Fraction mode. But if you use the
2834evaluates-to operator you can get commands like @kbd{m f} to 2834evaluates-to operator you can get commands like @kbd{m f} to
2835recompute for you. 2835recompute for you.
2836 2836
@@ -2846,7 +2846,7 @@ recompute for you.
2846@noindent 2846@noindent
2847In this example, the righthand side of the @samp{=>} operator 2847In this example, the righthand side of the @samp{=>} operator
2848on the stack is recomputed when we change the precision, then 2848on the stack is recomputed when we change the precision, then
2849again when we change to fraction mode. All @samp{=>} expressions 2849again when we change to Fraction mode. All @samp{=>} expressions
2850on the stack are recomputed every time you change any mode that 2850on the stack are recomputed every time you change any mode that
2851might affect their values. 2851might affect their values.
2852 2852
@@ -4530,7 +4530,7 @@ with the symbol @code{nan} (for Not A Number).
4530 4530
4531Dividing by zero is normally treated as an error, but you can get 4531Dividing by zero is normally treated as an error, but you can get
4532Calc to write an answer in terms of infinity by pressing @kbd{m i} 4532Calc to write an answer in terms of infinity by pressing @kbd{m i}
4533to turn on ``infinite mode.'' 4533to turn on Infinite mode.
4534 4534
4535@smallexample 4535@smallexample
4536@group 4536@group
@@ -4757,10 +4757,11 @@ or 24 hours.
4757@end smallexample 4757@end smallexample
4758 4758
4759@noindent 4759@noindent
4760In this last step, Calc has found a new number which, when multiplied 4760In this last step, Calc has divided by 5 modulo 24; i.e., it has found a
4761by 5 modulo 24, produces the original number, 21. If @var{m} is prime 4761new number which, when multiplied by 5 modulo 24, produces the original
4762it is always possible to find such a number. For non-prime @var{m} 4762number, 21. If @var{m} is prime and the divisor is not a multiple of
4763like 24, it is only sometimes possible. 4763@var{m}, it is always possible to find such a number. For non-prime
4764@var{m} like 24, it is only sometimes possible.
4764 4765
4765@smallexample 4766@smallexample
4766@group 4767@group
@@ -4960,7 +4961,7 @@ formulas.
4960@subsection Basic Algebra 4961@subsection Basic Algebra
4961 4962
4962@noindent 4963@noindent
4963If you enter a formula in algebraic mode that refers to variables, 4964If you enter a formula in Algebraic mode that refers to variables,
4964the formula itself is pushed onto the stack. You can manipulate 4965the formula itself is pushed onto the stack. You can manipulate
4965formulas as regular data objects. 4966formulas as regular data objects.
4966 4967
@@ -5181,7 +5182,7 @@ polynomial? (The answer will be unique to within a constant
5181multiple; choose the solution where the leading coefficient is one.) 5182multiple; choose the solution where the leading coefficient is one.)
5182@xref{Algebra Answer 2, 2}. (@bullet{}) 5183@xref{Algebra Answer 2, 2}. (@bullet{})
5183 5184
5184The @kbd{m s} command enables ``symbolic mode,'' in which formulas 5185The @kbd{m s} command enables Symbolic mode, in which formulas
5185like @samp{sqrt(5)} that can't be evaluated exactly are left in 5186like @samp{sqrt(5)} that can't be evaluated exactly are left in
5186symbolic form rather than giving a floating-point approximate answer. 5187symbolic form rather than giving a floating-point approximate answer.
5187Fraction mode (@kbd{m f}) is also useful when doing algebra. 5188Fraction mode (@kbd{m f}) is also useful when doing algebra.
@@ -5196,7 +5197,7 @@ Fraction mode (@kbd{m f}) is also useful when doing algebra.
5196@end group 5197@end group
5197@end smallexample 5198@end smallexample
5198 5199
5199One more mode that makes reading formulas easier is ``Big mode.'' 5200One more mode that makes reading formulas easier is Big mode.
5200 5201
5201@smallexample 5202@smallexample
5202@group 5203@group
@@ -5344,7 +5345,7 @@ also have used plain @kbd{v x} as follows: @kbd{v x 10 @key{RET} 9 + .1 *}.)
5344 5345
5345@noindent 5346@noindent
5346(If you got wildly different results, did you remember to switch 5347(If you got wildly different results, did you remember to switch
5347to radians mode?) 5348to Radians mode?)
5348 5349
5349Here we have divided the curve into ten segments of equal width; 5350Here we have divided the curve into ten segments of equal width;
5350approximating these segments as rectangular boxes (i.e., assuming 5351approximating these segments as rectangular boxes (i.e., assuming
@@ -5600,7 +5601,7 @@ only once and stores the compiled form along with the variable. That's
5600another good reason to store your rules in variables rather than 5601another good reason to store your rules in variables rather than
5601entering them on the fly. 5602entering them on the fly.
5602 5603
5603(@bullet{}) @strong{Exercise 1.} Type @kbd{m s} to get symbolic 5604(@bullet{}) @strong{Exercise 1.} Type @kbd{m s} to get Symbolic
5604mode, then enter the formula @samp{@w{(2 + sqrt(2))} / @w{(1 + sqrt(2))}}. 5605mode, then enter the formula @samp{@w{(2 + sqrt(2))} / @w{(1 + sqrt(2))}}.
5605Using a rewrite rule, simplify this formula by multiplying both 5606Using a rewrite rule, simplify this formula by multiplying both
5606sides by the conjugate @w{@samp{1 - sqrt(2)}}. The result will have 5607sides by the conjugate @w{@samp{1 - sqrt(2)}}. The result will have
@@ -5859,11 +5860,11 @@ so that @expr{2 - 3 (x + y) + x y} is a sum of three terms.)
5859@xref{Rewrites Answer 5, 5}. (@bullet{}) 5860@xref{Rewrites Answer 5, 5}. (@bullet{})
5860 5861
5861(@bullet{}) @strong{Exercise 6.} Calc considers the form @expr{0^0} 5862(@bullet{}) @strong{Exercise 6.} Calc considers the form @expr{0^0}
5862to be ``indeterminate,'' and leaves it unevaluated (assuming infinite 5863to be ``indeterminate,'' and leaves it unevaluated (assuming Infinite
5863mode is not enabled). Some people prefer to define @expr{0^0 = 1}, 5864mode is not enabled). Some people prefer to define @expr{0^0 = 1},
5864so that the identity @expr{x^0 = 1} can safely be used for all @expr{x}. 5865so that the identity @expr{x^0 = 1} can safely be used for all @expr{x}.
5865Find a way to make Calc follow this convention. What happens if you 5866Find a way to make Calc follow this convention. What happens if you
5866now type @kbd{m i} to turn on infinite mode? 5867now type @kbd{m i} to turn on Infinite mode?
5867@xref{Rewrites Answer 6, 6}. (@bullet{}) 5868@xref{Rewrites Answer 6, 6}. (@bullet{})
5868 5869
5869(@bullet{}) @strong{Exercise 7.} A Taylor series for a function is an 5870(@bullet{}) @strong{Exercise 7.} A Taylor series for a function is an
@@ -6838,7 +6839,7 @@ the result will be zero because Calc uses the general rule that ``zero
6838times anything is zero.'' 6839times anything is zero.''
6839 6840
6840@c [fix-ref Infinities] 6841@c [fix-ref Infinities]
6841The @kbd{m i} command enables an @dfn{infinite mode} in which @expr{1 / 0} 6842The @kbd{m i} command enables an @dfn{Infinite mode} in which @expr{1 / 0}
6842results in a special symbol that represents ``infinity.'' If you 6843results in a special symbol that represents ``infinity.'' If you
6843multiply infinity by zero, Calc uses another special new symbol to 6844multiply infinity by zero, Calc uses another special new symbol to
6844show that the answer is ``indeterminate.'' @xref{Infinities}, for 6845show that the answer is ``indeterminate.'' @xref{Infinities}, for
@@ -7002,7 +7003,7 @@ The result, when converted to an integer, will be off by 106.
7002 7003
7003Here are two solutions: Raise the precision enough that the 7004Here are two solutions: Raise the precision enough that the
7004floating-point round-off error is strictly to the right of the 7005floating-point round-off error is strictly to the right of the
7005decimal point. Or, convert to fraction mode so that @expr{123456789 / 2} 7006decimal point. Or, convert to Fraction mode so that @expr{123456789 / 2}
7006produces the exact fraction @expr{123456789:2}, which can be rounded 7007produces the exact fraction @expr{123456789:2}, which can be rounded
7007down by the @kbd{F} command without ever switching to floating-point 7008down by the @kbd{F} command without ever switching to floating-point
7008format. 7009format.
@@ -7015,9 +7016,9 @@ format.
7015does a floating-point calculation instead and produces @expr{1.5}. 7016does a floating-point calculation instead and produces @expr{1.5}.
7016 7017
7017Calc will find an exact result for a logarithm if the result is an integer 7018Calc will find an exact result for a logarithm if the result is an integer
7018or the reciprocal of an integer. But there is no efficient way to search 7019or (when in Fraction mode) the reciprocal of an integer. But there is
7019the space of all possible rational numbers for an exact answer, so Calc 7020no efficient way to search the space of all possible rational numbers
7020doesn't try. 7021for an exact answer, so Calc doesn't try.
7021 7022
7022@node Vector Answer 1, Vector Answer 2, Arithmetic Answer 2, Answers to Exercises 7023@node Vector Answer 1, Vector Answer 2, Arithmetic Answer 2, Answers to Exercises
7023@subsection Vector Tutorial Exercise 1 7024@subsection Vector Tutorial Exercise 1
@@ -7089,7 +7090,7 @@ matrix as usual.
7089@end group 7090@end group
7090@end smallexample 7091@end smallexample
7091 7092
7092This can be made more readable using @kbd{d B} to enable ``big'' display 7093This can be made more readable using @kbd{d B} to enable Big display
7093mode: 7094mode:
7094 7095
7095@smallexample 7096@smallexample
@@ -7100,7 +7101,7 @@ mode:
7100@end group 7101@end group
7101@end smallexample 7102@end smallexample
7102 7103
7103Type @kbd{d N} to return to ``normal'' display mode afterwards. 7104Type @kbd{d N} to return to Normal display mode afterwards.
7104 7105
7105@node Matrix Answer 3, List Answer 1, Matrix Answer 2, Answers to Exercises 7106@node Matrix Answer 3, List Answer 1, Matrix Answer 2, Answers to Exercises
7106@subsection Matrix Tutorial Exercise 3 7107@subsection Matrix Tutorial Exercise 3
@@ -8247,7 +8248,7 @@ so it settles for the conservative answer @code{uinf}.
8247 8248
8248@samp{ln(0) = -inf}. Here we have an infinite answer to a finite 8249@samp{ln(0) = -inf}. Here we have an infinite answer to a finite
8249input. As in the @expr{1 / 0} case, Calc will only use infinities 8250input. As in the @expr{1 / 0} case, Calc will only use infinities
8250here if you have turned on ``infinite'' mode. Otherwise, it will 8251here if you have turned on Infinite mode. Otherwise, it will
8251treat @samp{ln(0)} as an error. 8252treat @samp{ln(0)} as an error.
8252 8253
8253@node Types Answer 3, Types Answer 4, Types Answer 2, Answers to Exercises 8254@node Types Answer 3, Types Answer 4, Types Answer 2, Answers to Exercises
@@ -8461,7 +8462,7 @@ Calc normally treats division by zero as an error, so that the formula
8461@w{@samp{1 / [0 .. 10]}}, also (potentially) divides by zero because zero 8462@w{@samp{1 / [0 .. 10]}}, also (potentially) divides by zero because zero
8462is now a member of the interval. So Calc leaves this one unevaluated, too. 8463is now a member of the interval. So Calc leaves this one unevaluated, too.
8463 8464
8464If you turn on ``infinite'' mode by pressing @kbd{m i}, you will 8465If you turn on Infinite mode by pressing @kbd{m i}, you will
8465instead get the answer @samp{[0.1 .. inf]}, which includes infinity 8466instead get the answer @samp{[0.1 .. inf]}, which includes infinity
8466as a possible value. 8467as a possible value.
8467 8468
@@ -9124,7 +9125,7 @@ But then:
9124@end group 9125@end group
9125@end smallexample 9126@end smallexample
9126 9127
9127Perhaps more surprisingly, this rule still works with infinite mode 9128Perhaps more surprisingly, this rule still works with Infinite mode
9128turned on. Calc tries @code{EvalRules} before any built-in rules for 9129turned on. Calc tries @code{EvalRules} before any built-in rules for
9129a function. This allows you to override the default behavior of any 9130a function. This allows you to override the default behavior of any
9130Calc feature: Even though Calc now wants to evaluate @expr{0^0} to 9131Calc feature: Even though Calc now wants to evaluate @expr{0^0} to
@@ -9889,10 +9890,10 @@ By default this creates a pair of small windows, @samp{*Calculator*}
9889and @samp{*Calc Trail*}. The former displays the contents of the 9890and @samp{*Calc Trail*}. The former displays the contents of the
9890Calculator stack and is manipulated exclusively through Calc commands. 9891Calculator stack and is manipulated exclusively through Calc commands.
9891It is possible (though not usually necessary) to create several Calc 9892It is possible (though not usually necessary) to create several Calc
9892Mode buffers each of which has an independent stack, undo list, and 9893mode buffers each of which has an independent stack, undo list, and
9893mode settings. There is exactly one Calc Trail buffer; it records a 9894mode settings. There is exactly one Calc Trail buffer; it records a
9894list of the results of all calculations that have been done. The 9895list of the results of all calculations that have been done. The
9895Calc Trail buffer uses a variant of Calc Mode, so Calculator commands 9896Calc Trail buffer uses a variant of Calc mode, so Calculator commands
9896still work when the trail buffer's window is selected. It is possible 9897still work when the trail buffer's window is selected. It is possible
9897to turn the trail window off, but the @samp{*Calc Trail*} buffer itself 9898to turn the trail window off, but the @samp{*Calc Trail*} buffer itself
9898still exists and is updated silently. @xref{Trail Commands}. 9899still exists and is updated silently. @xref{Trail Commands}.
@@ -9906,7 +9907,7 @@ still exists and is updated silently. @xref{Trail Commands}.
9906In most installations, the @kbd{M-# c} key sequence is a more 9907In most installations, the @kbd{M-# c} key sequence is a more
9907convenient way to start the Calculator. Also, @kbd{M-# M-#} and 9908convenient way to start the Calculator. Also, @kbd{M-# M-#} and
9908@kbd{M-# #} are synonyms for @kbd{M-# c} unless you last used Calc 9909@kbd{M-# #} are synonyms for @kbd{M-# c} unless you last used Calc
9909in its ``keypad'' mode. 9910in its Keypad mode.
9910 9911
9911@kindex x 9912@kindex x
9912@kindex M-x 9913@kindex M-x
@@ -9978,7 +9979,7 @@ the keys with the mouse to operate the calculator. @xref{Keypad Mode}.
9978@pindex calc-quit 9979@pindex calc-quit
9979@cindex Quitting the Calculator 9980@cindex Quitting the Calculator
9980@cindex Exiting the Calculator 9981@cindex Exiting the Calculator
9981The @kbd{q} key (@code{calc-quit}) exits Calc Mode and closes the 9982The @kbd{q} key (@code{calc-quit}) exits Calc mode and closes the
9982Calculator's window(s). It does not delete the Calculator buffers. 9983Calculator's window(s). It does not delete the Calculator buffers.
9983If you type @kbd{M-x calc} again, the Calculator will reappear with the 9984If you type @kbd{M-x calc} again, the Calculator will reappear with the
9984contents of the stack intact. Typing @kbd{M-# c} or @kbd{M-# M-#} 9985contents of the stack intact. Typing @kbd{M-# c} or @kbd{M-# M-#}
@@ -10278,7 +10279,7 @@ expressions in this way. You may want to use @key{DEL} every so often to
10278clear previous results off the stack. 10279clear previous results off the stack.
10279 10280
10280You can press the apostrophe key during normal numeric entry to switch 10281You can press the apostrophe key during normal numeric entry to switch
10281the half-entered number into algebraic entry mode. One reason to do this 10282the half-entered number into Algebraic entry mode. One reason to do this
10282would be to use the full Emacs cursor motion and editing keys, which are 10283would be to use the full Emacs cursor motion and editing keys, which are
10283available during algebraic entry but not during numeric entry. 10284available during algebraic entry but not during numeric entry.
10284 10285
@@ -10289,7 +10290,7 @@ you complete your half-finished entry in a separate buffer.
10289 10290
10290@kindex m a 10291@kindex m a
10291@pindex calc-algebraic-mode 10292@pindex calc-algebraic-mode
10292@cindex Algebraic mode 10293@cindex Algebraic Mode
10293If you prefer algebraic entry, you can use the command @kbd{m a} 10294If you prefer algebraic entry, you can use the command @kbd{m a}
10294(@code{calc-algebraic-mode}) to set Algebraic mode. In this mode, 10295(@code{calc-algebraic-mode}) to set Algebraic mode. In this mode,
10295digits and other keys that would normally start numeric entry instead 10296digits and other keys that would normally start numeric entry instead
@@ -10300,7 +10301,7 @@ but you will have to press @key{RET} to terminate every number:
10300@kbd{2 @key{RET} 3 @key{RET} * 4 @key{RET} +} would accomplish the same 10301@kbd{2 @key{RET} 3 @key{RET} * 4 @key{RET} +} would accomplish the same
10301thing as @kbd{2*3+4 @key{RET}}. 10302thing as @kbd{2*3+4 @key{RET}}.
10302 10303
10303@cindex Incomplete algebraic mode 10304@cindex Incomplete Algebraic Mode
10304If you give a numeric prefix argument like @kbd{C-u} to the @kbd{m a} 10305If you give a numeric prefix argument like @kbd{C-u} to the @kbd{m a}
10305command, it enables Incomplete Algebraic mode; this is like regular 10306command, it enables Incomplete Algebraic mode; this is like regular
10306Algebraic mode except that it applies to the @kbd{(} and @kbd{[} keys 10307Algebraic mode except that it applies to the @kbd{(} and @kbd{[} keys
@@ -10308,15 +10309,15 @@ only. Numeric keys still begin a numeric entry in this mode.
10308 10309
10309@kindex m t 10310@kindex m t
10310@pindex calc-total-algebraic-mode 10311@pindex calc-total-algebraic-mode
10311@cindex Total algebraic mode 10312@cindex Total Algebraic Mode
10312The @kbd{m t} (@code{calc-total-algebraic-mode}) gives you an even 10313The @kbd{m t} (@code{calc-total-algebraic-mode}) gives you an even
10313stronger algebraic-entry mode, in which @emph{all} regular letter and 10314stronger algebraic-entry mode, in which @emph{all} regular letter and
10314punctuation keys begin algebraic entry. Use this if you prefer typing 10315punctuation keys begin algebraic entry. Use this if you prefer typing
10315@w{@kbd{sqrt( )}} instead of @kbd{Q}, @w{@kbd{factor( )}} instead of 10316@w{@kbd{sqrt( )}} instead of @kbd{Q}, @w{@kbd{factor( )}} instead of
10316@kbd{a f}, and so on. To type regular Calc commands when you are in 10317@kbd{a f}, and so on. To type regular Calc commands when you are in
10317``total'' algebraic mode, hold down the @key{META} key. Thus @kbd{M-q} 10318Total Algebraic mode, hold down the @key{META} key. Thus @kbd{M-q}
10318is the command to quit Calc, @kbd{M-p} sets the precision, and 10319is the command to quit Calc, @kbd{M-p} sets the precision, and
10319@kbd{M-m t} (or @kbd{M-m M-t}, if you prefer) turns total algebraic 10320@kbd{M-m t} (or @kbd{M-m M-t}, if you prefer) turns Total Algebraic
10320mode back off again. Meta keys also terminate algebraic entry, so 10321mode back off again. Meta keys also terminate algebraic entry, so
10321that @kbd{2+3 M-S} is equivalent to @kbd{2+3 @key{RET} M-S}. The symbol 10322that @kbd{2+3 M-S} is equivalent to @kbd{2+3 @key{RET} M-S}. The symbol
10322@samp{Alg*} will appear in the mode line whenever you are in this mode. 10323@samp{Alg*} will appear in the mode line whenever you are in this mode.
@@ -10577,7 +10578,7 @@ that you must always press @kbd{w} yourself to see the messages).
10577 10578
10578@noindent 10579@noindent
10579@pindex another-calc 10580@pindex another-calc
10580It is possible to have any number of Calc Mode buffers at once. 10581It is possible to have any number of Calc mode buffers at once.
10581Usually this is done by executing @kbd{M-x another-calc}, which 10582Usually this is done by executing @kbd{M-x another-calc}, which
10582is similar to @kbd{M-# c} except that if a @samp{*Calculator*} 10583is similar to @kbd{M-# c} except that if a @samp{*Calculator*}
10583buffer already exists, a new, independent one with a name of the 10584buffer already exists, a new, independent one with a name of the
@@ -10792,7 +10793,7 @@ The Calculator stores integers to arbitrary precision. Addition,
10792subtraction, and multiplication of integers always yields an exact 10793subtraction, and multiplication of integers always yields an exact
10793integer result. (If the result of a division or exponentiation of 10794integer result. (If the result of a division or exponentiation of
10794integers is not an integer, it is expressed in fractional or 10795integers is not an integer, it is expressed in fractional or
10795floating-point form according to the current Fraction Mode. 10796floating-point form according to the current Fraction mode.
10796@xref{Fraction Mode}.) 10797@xref{Fraction Mode}.)
10797 10798
10798A decimal integer is represented as an optional sign followed by a 10799A decimal integer is represented as an optional sign followed by a
@@ -10818,7 +10819,7 @@ A @dfn{fraction} is a ratio of two integers. Fractions are traditionally
10818written ``2/3'' but Calc uses the notation @samp{2:3}. (The @kbd{/} key 10819written ``2/3'' but Calc uses the notation @samp{2:3}. (The @kbd{/} key
10819performs RPN division; the following two sequences push the number 10820performs RPN division; the following two sequences push the number
10820@samp{2:3} on the stack: @kbd{2 :@: 3 @key{RET}}, or @kbd{2 @key{RET} 3 /} 10821@samp{2:3} on the stack: @kbd{2 :@: 3 @key{RET}}, or @kbd{2 @key{RET} 3 /}
10821assuming Fraction Mode has been enabled.) 10822assuming Fraction mode has been enabled.)
10822When the Calculator produces a fractional result it always reduces it to 10823When the Calculator produces a fractional result it always reduces it to
10823simplest form, which may in fact be an integer. 10824simplest form, which may in fact be an integer.
10824 10825
@@ -10932,7 +10933,7 @@ Complex numbers are entered in stages using incomplete objects.
10932Operations on rectangular complex numbers yield rectangular complex 10933Operations on rectangular complex numbers yield rectangular complex
10933results, and similarly for polar complex numbers. Where the two types 10934results, and similarly for polar complex numbers. Where the two types
10934are mixed, or where new complex numbers arise (as for the square root of 10935are mixed, or where new complex numbers arise (as for the square root of
10935a negative real), the current @dfn{Polar Mode} is used to determine the 10936a negative real), the current @dfn{Polar mode} is used to determine the
10936type. @xref{Polar Mode}. 10937type. @xref{Polar Mode}.
10937 10938
10938A complex result in which the imaginary part is zero (or the phase angle 10939A complex result in which the imaginary part is zero (or the phase angle
@@ -11020,7 +11021,7 @@ infinity, it's just that @emph{which} number it stands for
11020cannot be determined.) In Calc's notation, @samp{0 * inf = nan} 11021cannot be determined.) In Calc's notation, @samp{0 * inf = nan}
11021and @samp{inf / inf = nan}. A few other common indeterminate 11022and @samp{inf / inf = nan}. A few other common indeterminate
11022expressions are @samp{inf - inf} and @samp{inf ^ 0}. Also, 11023expressions are @samp{inf - inf} and @samp{inf ^ 0}. Also,
11023@samp{0 / 0 = nan} if you have turned on ``infinite mode'' 11024@samp{0 / 0 = nan} if you have turned on Infinite mode
11024(as described above). 11025(as described above).
11025 11026
11026Infinities are especially useful as parts of @dfn{intervals}. 11027Infinities are especially useful as parts of @dfn{intervals}.
@@ -11586,10 +11587,10 @@ rather than @samp{1 ..@: 0.1e2}. Add spaces or zeros if you want to
11586get the other interpretation. If you omit the lower or upper limit, 11587get the other interpretation. If you omit the lower or upper limit,
11587a default of @samp{-inf} or @samp{inf} (respectively) is furnished. 11588a default of @samp{-inf} or @samp{inf} (respectively) is furnished.
11588 11589
11589``Infinite mode'' also affects operations on intervals 11590Infinite mode also affects operations on intervals
11590(@pxref{Infinities}). Calc will always introduce an open infinity, 11591(@pxref{Infinities}). Calc will always introduce an open infinity,
11591as in @samp{1 / (0 .. 2] = [0.5 .. inf)}. But closed infinities, 11592as in @samp{1 / (0 .. 2] = [0.5 .. inf)}. But closed infinities,
11592@w{@samp{1 / [0 .. 2] = [0.5 .. inf]}}, arise only in infinite mode; 11593@w{@samp{1 / [0 .. 2] = [0.5 .. inf]}}, arise only in Infinite mode;
11593otherwise they are left unevaluated. Note that the ``direction'' of 11594otherwise they are left unevaluated. Note that the ``direction'' of
11594a zero is not an issue in this case since the zero is always assumed 11595a zero is not an issue in this case since the zero is always assumed
11595to be continuous with the rest of the interval. For intervals that 11596to be continuous with the rest of the interval. For intervals that
@@ -11904,7 +11905,7 @@ Commands that interpret (``parse'') text as algebraic formulas include
11904algebraic entry (@kbd{'}), editing commands like @kbd{`} which parse 11905algebraic entry (@kbd{'}), editing commands like @kbd{`} which parse
11905the contents of the editing buffer when you finish, the @kbd{M-# g} 11906the contents of the editing buffer when you finish, the @kbd{M-# g}
11906and @w{@kbd{M-# r}} commands, the @kbd{C-y} command, the X window system 11907and @w{@kbd{M-# r}} commands, the @kbd{C-y} command, the X window system
11907``paste'' mouse operation, and Embedded Mode. All of these operations 11908``paste'' mouse operation, and Embedded mode. All of these operations
11908use the same rules for parsing formulas; in particular, language modes 11909use the same rules for parsing formulas; in particular, language modes
11909(@pxref{Language Modes}) affect them all in the same way. 11910(@pxref{Language Modes}) affect them all in the same way.
11910 11911
@@ -12313,7 +12314,7 @@ Otherwise, the new mode information is appended to the end of the file.
12313@pindex calc-mode-record-mode 12314@pindex calc-mode-record-mode
12314The @kbd{m R} (@code{calc-mode-record-mode}) command tells Calc to 12315The @kbd{m R} (@code{calc-mode-record-mode}) command tells Calc to
12315record the new mode settings (as if by pressing @kbd{m m}) every 12316record the new mode settings (as if by pressing @kbd{m m}) every
12316time a mode setting changes. If Embedded Mode is enabled, other 12317time a mode setting changes. If Embedded mode is enabled, other
12317options are available; @pxref{Mode Settings in Embedded Mode}. 12318options are available; @pxref{Mode Settings in Embedded Mode}.
12318 12319
12319@kindex m F 12320@kindex m F
@@ -12494,7 +12495,7 @@ Functions that compute angles produce a number in radians, a number in
12494degrees, or an HMS form depending on the current angular mode. If the 12495degrees, or an HMS form depending on the current angular mode. If the
12495result is a complex number and the current mode is HMS, the number is 12496result is a complex number and the current mode is HMS, the number is
12496instead expressed in degrees. (Complex-number calculations would 12497instead expressed in degrees. (Complex-number calculations would
12497normally be done in radians mode, though. Complex numbers are converted 12498normally be done in Radians mode, though. Complex numbers are converted
12498to degrees by calculating the complex result in radians and then 12499to degrees by calculating the complex result in radians and then
12499multiplying by 180 over @cpi{}.) 12500multiplying by 180 over @cpi{}.)
12500 12501
@@ -12507,7 +12508,7 @@ multiplying by 180 over @cpi{}.)
12507The @kbd{m r} (@code{calc-radians-mode}), @kbd{m d} (@code{calc-degrees-mode}), 12508The @kbd{m r} (@code{calc-radians-mode}), @kbd{m d} (@code{calc-degrees-mode}),
12508and @kbd{m h} (@code{calc-hms-mode}) commands control the angular mode. 12509and @kbd{m h} (@code{calc-hms-mode}) commands control the angular mode.
12509The current angular mode is displayed on the Emacs mode line. 12510The current angular mode is displayed on the Emacs mode line.
12510The default angular mode is degrees. 12511The default angular mode is Degrees.
12511 12512
12512@node Polar Mode, Fraction Mode, Angular Modes, Calculation Modes 12513@node Polar Mode, Fraction Mode, Angular Modes, Calculation Modes
12513@subsection Polar Mode 12514@subsection Polar Mode
@@ -12523,7 +12524,7 @@ number, or by entering @kbd{( 2 @key{SPC} 3 )}.
12523@kindex m p 12524@kindex m p
12524@pindex calc-polar-mode 12525@pindex calc-polar-mode
12525The @kbd{m p} (@code{calc-polar-mode}) command toggles complex-number 12526The @kbd{m p} (@code{calc-polar-mode}) command toggles complex-number
12526preference between rectangular and polar forms. In polar mode, all 12527preference between rectangular and polar forms. In Polar mode, all
12527of the above example situations would produce polar complex numbers. 12528of the above example situations would produce polar complex numbers.
12528 12529
12529@node Fraction Mode, Infinite Mode, Polar Mode, Calculation Modes 12530@node Fraction Mode, Infinite Mode, Polar Mode, Calculation Modes
@@ -12543,8 +12544,8 @@ even though @kbd{6 @key{RET} 4 /} produces @expr{1.5}.
12543To set the Calculator to produce fractional results for normal integer 12544To set the Calculator to produce fractional results for normal integer
12544divisions, use the @kbd{m f} (@code{calc-frac-mode}) command. 12545divisions, use the @kbd{m f} (@code{calc-frac-mode}) command.
12545For example, @expr{8/4} produces @expr{2} in either mode, 12546For example, @expr{8/4} produces @expr{2} in either mode,
12546but @expr{6/4} produces @expr{3:2} in Fraction Mode, @expr{1.5} in 12547but @expr{6/4} produces @expr{3:2} in Fraction mode, @expr{1.5} in
12547Float Mode. 12548Float mode.
12548 12549
12549At any time you can use @kbd{c f} (@code{calc-float}) to convert a 12550At any time you can use @kbd{c f} (@code{calc-float}) to convert a
12550fraction to a float, or @kbd{c F} (@code{calc-fraction}) to convert a 12551fraction to a float, or @kbd{c F} (@code{calc-fraction}) to convert a
@@ -12567,25 +12568,25 @@ on and off. When the mode is off, infinities do not arise except
12567in calculations that already had infinities as inputs. (One exception 12568in calculations that already had infinities as inputs. (One exception
12568is that infinite open intervals like @samp{[0 .. inf)} can be 12569is that infinite open intervals like @samp{[0 .. inf)} can be
12569generated; however, intervals closed at infinity (@samp{[0 .. inf]}) 12570generated; however, intervals closed at infinity (@samp{[0 .. inf]})
12570will not be generated when infinite mode is off.) 12571will not be generated when Infinite mode is off.)
12571 12572
12572With infinite mode turned on, @samp{1 / 0} will generate @code{uinf}, 12573With Infinite mode turned on, @samp{1 / 0} will generate @code{uinf},
12573an undirected infinity. @xref{Infinities}, for a discussion of the 12574an undirected infinity. @xref{Infinities}, for a discussion of the
12574difference between @code{inf} and @code{uinf}. Also, @expr{0 / 0} 12575difference between @code{inf} and @code{uinf}. Also, @expr{0 / 0}
12575evaluates to @code{nan}, the ``indeterminate'' symbol. Various other 12576evaluates to @code{nan}, the ``indeterminate'' symbol. Various other
12576functions can also return infinities in this mode; for example, 12577functions can also return infinities in this mode; for example,
12577@samp{ln(0) = -inf}, and @samp{gamma(-7) = uinf}. Once again, 12578@samp{ln(0) = -inf}, and @samp{gamma(-7) = uinf}. Once again,
12578note that @samp{exp(inf) = inf} regardless of infinite mode because 12579note that @samp{exp(inf) = inf} regardless of Infinite mode because
12579this calculation has infinity as an input. 12580this calculation has infinity as an input.
12580 12581
12581@cindex Positive infinite mode 12582@cindex Positive Infinite mode
12582The @kbd{m i} command with a numeric prefix argument of zero, 12583The @kbd{m i} command with a numeric prefix argument of zero,
12583i.e., @kbd{C-u 0 m i}, turns on a ``positive infinite mode'' in 12584i.e., @kbd{C-u 0 m i}, turns on a Positive Infinite mode in
12584which zero is treated as positive instead of being directionless. 12585which zero is treated as positive instead of being directionless.
12585Thus, @samp{1 / 0 = inf} and @samp{-1 / 0 = -inf} in this mode. 12586Thus, @samp{1 / 0 = inf} and @samp{-1 / 0 = -inf} in this mode.
12586Note that zero never actually has a sign in Calc; there are no 12587Note that zero never actually has a sign in Calc; there are no
12587separate representations for @mathit{+0} and @mathit{-0}. Positive 12588separate representations for @mathit{+0} and @mathit{-0}. Positive
12588infinite mode merely changes the interpretation given to the 12589Infinite mode merely changes the interpretation given to the
12589single symbol, @samp{0}. One consequence of this is that, while 12590single symbol, @samp{0}. One consequence of this is that, while
12590you might expect @samp{1 / -0 = -inf}, actually @samp{1 / -0} 12591you might expect @samp{1 / -0 = -inf}, actually @samp{1 / -0}
12591is equivalent to @samp{1 / 0}, which is equal to positive @code{inf}. 12592is equivalent to @samp{1 / 0}, which is equal to positive @code{inf}.
@@ -12604,7 +12605,7 @@ number or a symbolic expression if the argument is an expression:
12604 12605
12605@kindex m s 12606@kindex m s
12606@pindex calc-symbolic-mode 12607@pindex calc-symbolic-mode
12607In @dfn{symbolic mode}, controlled by the @kbd{m s} (@code{calc-symbolic-mode}) 12608In @dfn{Symbolic mode}, controlled by the @kbd{m s} (@code{calc-symbolic-mode})
12608command, functions which would produce inexact, irrational results are 12609command, functions which would produce inexact, irrational results are
12609left in symbolic form. Thus @kbd{16 Q} pushes 4, but @kbd{2 Q} pushes 12610left in symbolic form. Thus @kbd{16 Q} pushes 4, but @kbd{2 Q} pushes
12610@samp{sqrt(2)}. 12611@samp{sqrt(2)}.
@@ -12631,12 +12632,12 @@ variables.)
12631@cindex Scalar mode 12632@cindex Scalar mode
12632Calc sometimes makes assumptions during algebraic manipulation that 12633Calc sometimes makes assumptions during algebraic manipulation that
12633are awkward or incorrect when vectors and matrices are involved. 12634are awkward or incorrect when vectors and matrices are involved.
12634Calc has two modes, @dfn{matrix mode} and @dfn{scalar mode}, which 12635Calc has two modes, @dfn{Matrix mode} and @dfn{Scalar mode}, which
12635modify its behavior around vectors in useful ways. 12636modify its behavior around vectors in useful ways.
12636 12637
12637@kindex m v 12638@kindex m v
12638@pindex calc-matrix-mode 12639@pindex calc-matrix-mode
12639Press @kbd{m v} (@code{calc-matrix-mode}) once to enter matrix mode. 12640Press @kbd{m v} (@code{calc-matrix-mode}) once to enter Matrix mode.
12640In this mode, all objects are assumed to be matrices unless provably 12641In this mode, all objects are assumed to be matrices unless provably
12641otherwise. One major effect is that Calc will no longer consider 12642otherwise. One major effect is that Calc will no longer consider
12642multiplication to be commutative. (Recall that in matrix arithmetic, 12643multiplication to be commutative. (Recall that in matrix arithmetic,
@@ -12655,18 +12656,18 @@ a true identity matrix of the appropriate size. On the other hand,
12655if it is combined with a scalar (as in @samp{idn(1) + 2}), Calc 12656if it is combined with a scalar (as in @samp{idn(1) + 2}), Calc
12656will assume it really was a scalar after all and produce, e.g., 3. 12657will assume it really was a scalar after all and produce, e.g., 3.
12657 12658
12658Press @kbd{m v} a second time to get scalar mode. Here, objects are 12659Press @kbd{m v} a second time to get Scalar mode. Here, objects are
12659assumed @emph{not} to be vectors or matrices unless provably so. 12660assumed @emph{not} to be vectors or matrices unless provably so.
12660For example, normally adding a variable to a vector, as in 12661For example, normally adding a variable to a vector, as in
12661@samp{[x, y, z] + a}, will leave the sum in symbolic form because 12662@samp{[x, y, z] + a}, will leave the sum in symbolic form because
12662as far as Calc knows, @samp{a} could represent either a number or 12663as far as Calc knows, @samp{a} could represent either a number or
12663another 3-vector. In scalar mode, @samp{a} is assumed to be a 12664another 3-vector. In Scalar mode, @samp{a} is assumed to be a
12664non-vector, and the addition is evaluated to @samp{[x+a, y+a, z+a]}. 12665non-vector, and the addition is evaluated to @samp{[x+a, y+a, z+a]}.
12665 12666
12666Press @kbd{m v} a third time to return to the normal mode of operation. 12667Press @kbd{m v} a third time to return to the normal mode of operation.
12667 12668
12668If you press @kbd{m v} with a numeric prefix argument @var{n}, you 12669If you press @kbd{m v} with a numeric prefix argument @var{n}, you
12669get a special ``dimensioned matrix mode'' in which matrices of 12670get a special ``dimensioned'' Matrix mode in which matrices of
12670unknown size are assumed to be @var{n}x@var{n} square matrices. 12671unknown size are assumed to be @var{n}x@var{n} square matrices.
12671Then, the function call @samp{idn(1)} will expand into an actual 12672Then, the function call @samp{idn(1)} will expand into an actual
12672matrix rather than representing a ``generic'' matrix. 12673matrix rather than representing a ``generic'' matrix.
@@ -12687,11 +12688,11 @@ for @samp{[x, y, z] + [1, 2, 3]}, but that's because you have broken
12687your earlier promise to Calc that @samp{a} would be scalar. 12688your earlier promise to Calc that @samp{a} would be scalar.
12688 12689
12689Another way to mix scalars and matrices is to use selections 12690Another way to mix scalars and matrices is to use selections
12690(@pxref{Selecting Subformulas}). Use matrix mode when operating on 12691(@pxref{Selecting Subformulas}). Use Matrix mode when operating on
12691your formula normally; then, to apply scalar mode to a certain part 12692your formula normally; then, to apply Scalar mode to a certain part
12692of the formula without affecting the rest just select that part, 12693of the formula without affecting the rest just select that part,
12693change into scalar mode and press @kbd{=} to resimplify the part 12694change into Scalar mode and press @kbd{=} to resimplify the part
12694under this mode, then change back to matrix mode before deselecting. 12695under this mode, then change back to Matrix mode before deselecting.
12695 12696
12696@node Automatic Recomputation, Working Message, Matrix Mode, Calculation Modes 12697@node Automatic Recomputation, Working Message, Matrix Mode, Calculation Modes
12697@subsection Automatic Recomputation 12698@subsection Automatic Recomputation
@@ -12707,7 +12708,7 @@ are changed. @xref{Evaluates-To Operator}.
12707The @kbd{m C} (@code{calc-auto-recompute}) command turns this 12708The @kbd{m C} (@code{calc-auto-recompute}) command turns this
12708automatic recomputation on and off. If you turn it off, Calc will 12709automatic recomputation on and off. If you turn it off, Calc will
12709not update @samp{=>} operators on the stack (nor those in the 12710not update @samp{=>} operators on the stack (nor those in the
12710attached Embedded Mode buffer, if there is one). They will not 12711attached Embedded mode buffer, if there is one). They will not
12711be updated unless you explicitly do so by pressing @kbd{=} or until 12712be updated unless you explicitly do so by pressing @kbd{=} or until
12712you press @kbd{m C} to turn recomputation back on. (While automatic 12713you press @kbd{m C} to turn recomputation back on. (While automatic
12713recomputation is off, you can think of @kbd{m C m C} as a command 12714recomputation is off, you can think of @kbd{m C m C} as a command
@@ -12828,7 +12829,7 @@ A common technique is to set the simplification mode down to the lowest
12828amount of simplification you will allow to be applied automatically, then 12829amount of simplification you will allow to be applied automatically, then
12829use manual commands like @kbd{a s} and @kbd{c c} (@code{calc-clean}) to 12830use manual commands like @kbd{a s} and @kbd{c c} (@code{calc-clean}) to
12830perform higher types of simplifications on demand. @xref{Algebraic 12831perform higher types of simplifications on demand. @xref{Algebraic
12831Definitions}, for another sample use of no-simplification mode. 12832Definitions}, for another sample use of No-Simplification mode.
12832 12833
12833@node Declarations, Display Modes, Simplification Modes, Mode Settings 12834@node Declarations, Display Modes, Simplification Modes, Mode Settings
12834@section Declarations 12835@section Declarations
@@ -13075,8 +13076,8 @@ and @code{y} are known to be vectors or matrices. (Calc currently
13075never distinguishes between @code{vector} and @code{matrix} 13076never distinguishes between @code{vector} and @code{matrix}
13076declarations.) 13077declarations.)
13077 13078
13078@xref{Matrix Mode}, for a discussion of ``matrix mode'' and 13079@xref{Matrix Mode}, for a discussion of Matrix mode and
13079``scalar mode,'' which are similar to declaring @samp{[All, matrix]} 13080Scalar mode, which are similar to declaring @samp{[All, matrix]}
13080or @samp{[All, scalar]} but much more convenient. 13081or @samp{[All, scalar]} but much more convenient.
13081 13082
13082One more type symbol that is recognized is used with the @kbd{H a d} 13083One more type symbol that is recognized is used with the @kbd{H a d}
@@ -13228,8 +13229,8 @@ remains unevaluated.
13228@tindex dscalar 13229@tindex dscalar
13229The @code{dscalar} function returns 1 if its argument is provably 13230The @code{dscalar} function returns 1 if its argument is provably
13230scalar, or 0 if its argument is provably non-scalar. It is left 13231scalar, or 0 if its argument is provably non-scalar. It is left
13231unevaluated if this cannot be determined. (If matrix mode or scalar 13232unevaluated if this cannot be determined. (If Matrix mode or Scalar
13232mode are in effect, this function returns 1 or 0, respectively, 13233mode is in effect, this function returns 1 or 0, respectively,
13233if it has no other information.) When Calc interprets a condition 13234if it has no other information.) When Calc interprets a condition
13234(say, in a rewrite rule) it considers an unevaluated formula to be 13235(say, in a rewrite rule) it considers an unevaluated formula to be
13235``false.'' Thus, @samp{dscalar(a)} is ``true'' only if @code{a} is 13236``false.'' Thus, @samp{dscalar(a)} is ``true'' only if @code{a} is
@@ -13338,7 +13339,7 @@ entirety.)
13338@cindex Digit grouping 13339@cindex Digit grouping
13339Long numbers can be hard to read if they have too many digits. For 13340Long numbers can be hard to read if they have too many digits. For
13340example, the factorial of 30 is 33 digits long! Press @kbd{d g} 13341example, the factorial of 30 is 33 digits long! Press @kbd{d g}
13341(@code{calc-group-digits}) to enable @dfn{grouping} mode, in which digits 13342(@code{calc-group-digits}) to enable @dfn{Grouping} mode, in which digits
13342are displayed in clumps of 3 or 4 (depending on the current radix) 13343are displayed in clumps of 3 or 4 (depending on the current radix)
13343separated by commas. 13344separated by commas.
13344 13345
@@ -13884,7 +13885,7 @@ line at a time (or several lines with a prefix argument).
13884Values on the stack are normally left-justified in the window. You can 13885Values on the stack are normally left-justified in the window. You can
13885control this arrangement by typing @kbd{d <} (@code{calc-left-justify}), 13886control this arrangement by typing @kbd{d <} (@code{calc-left-justify}),
13886@kbd{d >} (@code{calc-right-justify}), or @kbd{d =} 13887@kbd{d >} (@code{calc-right-justify}), or @kbd{d =}
13887(@code{calc-center-justify}). For example, in right-justification mode, 13888(@code{calc-center-justify}). For example, in Right-Justification mode,
13888stack entries are displayed flush-right against the right edge of the 13889stack entries are displayed flush-right against the right edge of the
13889window. 13890window.
13890 13891
@@ -13905,20 +13906,20 @@ breaking lines are given below. Notice that the interaction between
13905origin and line width is slightly different in each justification 13906origin and line width is slightly different in each justification
13906mode. 13907mode.
13907 13908
13908In left-justified mode, the line is indented by a number of spaces 13909In Left-Justified mode, the line is indented by a number of spaces
13909given by the origin (default zero). If the result is longer than the 13910given by the origin (default zero). If the result is longer than the
13910maximum line width, if given, or too wide to fit in the Calc window 13911maximum line width, if given, or too wide to fit in the Calc window
13911otherwise, then it is broken into lines which will fit; each broken 13912otherwise, then it is broken into lines which will fit; each broken
13912line is indented to the origin. 13913line is indented to the origin.
13913 13914
13914In right-justified mode, lines are shifted right so that the rightmost 13915In Right-Justified mode, lines are shifted right so that the rightmost
13915character is just before the origin, or just before the current 13916character is just before the origin, or just before the current
13916window width if no origin was specified. If the line is too long 13917window width if no origin was specified. If the line is too long
13917for this, then it is broken; the current line width is used, if 13918for this, then it is broken; the current line width is used, if
13918specified, or else the origin is used as a width if that is 13919specified, or else the origin is used as a width if that is
13919specified, or else the line is broken to fit in the window. 13920specified, or else the line is broken to fit in the window.
13920 13921
13921In centering mode, the origin is the column number of the center of 13922In Centering mode, the origin is the column number of the center of
13922each stack entry. If a line width is specified, lines will not be 13923each stack entry. If a line width is specified, lines will not be
13923allowed to go past that width; Calc will either indent less or 13924allowed to go past that width; Calc will either indent less or
13924break the lines if necessary. If no origin is specified, half the 13925break the lines if necessary. If no origin is specified, half the
@@ -13953,13 +13954,13 @@ Give a blank string (with @kbd{d @{ @key{RET}}) to turn the label off.
13953The @kbd{d @}} (@code{calc-right-label}) command similarly adds a 13954The @kbd{d @}} (@code{calc-right-label}) command similarly adds a
13954label on the righthand side. It does not affect positioning of 13955label on the righthand side. It does not affect positioning of
13955the stack entries unless they are right-justified. Also, if both 13956the stack entries unless they are right-justified. Also, if both
13956a line width and an origin are given in right-justified mode, the 13957a line width and an origin are given in Right-Justified mode, the
13957stack entry is justified to the origin and the righthand label is 13958stack entry is justified to the origin and the righthand label is
13958justified to the line width. 13959justified to the line width.
13959 13960
13960One application of labels would be to add equation numbers to 13961One application of labels would be to add equation numbers to
13961formulas you are manipulating in Calc and then copying into a 13962formulas you are manipulating in Calc and then copying into a
13962document (possibly using Embedded Mode). The equations would 13963document (possibly using Embedded mode). The equations would
13963typically be centered, and the equation numbers would be on the 13964typically be centered, and the equation numbers would be on the
13964left or right as you prefer. 13965left or right as you prefer.
13965 13966
@@ -14061,7 +14062,7 @@ such as powers, quotients, and square roots:
14061@noindent 14062@noindent
14062in place of @samp{sqrt((a+1)/b + c^2)}. 14063in place of @samp{sqrt((a+1)/b + c^2)}.
14063 14064
14064Subscripts like @samp{a_i} are displayed as actual subscripts in ``big'' 14065Subscripts like @samp{a_i} are displayed as actual subscripts in Big
14065mode. Double subscripts, @samp{a_i_j} (@samp{subscr(subscr(a, i), j)}) 14066mode. Double subscripts, @samp{a_i_j} (@samp{subscr(subscr(a, i), j)})
14066are displayed as @samp{a} with subscripts separated by commas: 14067are displayed as @samp{a} with subscripts separated by commas:
14067@samp{i, j}. They must still be entered in the usual underscore 14068@samp{i, j}. They must still be entered in the usual underscore
@@ -14134,12 +14135,12 @@ In C mode, vectors and matrices use curly braces instead of brackets.
14134Octal and hexadecimal values are written with leading @samp{0} or @samp{0x} 14135Octal and hexadecimal values are written with leading @samp{0} or @samp{0x}
14135rather than using the @samp{#} symbol. Array subscripting is 14136rather than using the @samp{#} symbol. Array subscripting is
14136translated into @code{subscr} calls, so that @samp{a[i]} in C 14137translated into @code{subscr} calls, so that @samp{a[i]} in C
14137mode is the same as @samp{a_i} in normal mode. Assignments 14138mode is the same as @samp{a_i} in Normal mode. Assignments
14138turn into the @code{assign} function, which Calc normally displays 14139turn into the @code{assign} function, which Calc normally displays
14139using the @samp{:=} symbol. 14140using the @samp{:=} symbol.
14140 14141
14141The variables @code{var-pi} and @code{var-e} would be displayed @samp{pi} 14142The variables @code{var-pi} and @code{var-e} would be displayed @samp{pi}
14142and @samp{e} in normal mode, but in C mode they are displayed as 14143and @samp{e} in Normal mode, but in C mode they are displayed as
14143@samp{M_PI} and @samp{M_E}, corresponding to the names of constants 14144@samp{M_PI} and @samp{M_E}, corresponding to the names of constants
14144typically provided in the @file{<math.h>} header. Functions whose 14145typically provided in the @file{<math.h>} header. Functions whose
14145names are different in C are translated automatically for entry and 14146names are different in C are translated automatically for entry and
@@ -14181,7 +14182,7 @@ function!).
14181 14182
14182Underscores are allowed in variable and function names in all of these 14183Underscores are allowed in variable and function names in all of these
14183language modes. The underscore here is equivalent to the @samp{#} in 14184language modes. The underscore here is equivalent to the @samp{#} in
14184normal mode, or to hyphens in the underlying Emacs Lisp variable names. 14185Normal mode, or to hyphens in the underlying Emacs Lisp variable names.
14185 14186
14186FORTRAN and Pascal modes normally do not adjust the case of letters in 14187FORTRAN and Pascal modes normally do not adjust the case of letters in
14187formulas. Most built-in Calc names use lower-case letters. If you use a 14188formulas. Most built-in Calc names use lower-case letters. If you use a
@@ -14823,7 +14824,7 @@ object.
14823@tindex choriz 14824@tindex choriz
14824The @code{choriz} function takes a vector of objects and composes 14825The @code{choriz} function takes a vector of objects and composes
14825them horizontally. For example, @samp{choriz([17, a b/c, d])} formats 14826them horizontally. For example, @samp{choriz([17, a b/c, d])} formats
14826as @w{@samp{17a b / cd}} in normal language mode, or as 14827as @w{@samp{17a b / cd}} in Normal language mode, or as
14827 14828
14828@example 14829@example
14829@group 14830@group
@@ -15086,7 +15087,7 @@ then return a certain measurement of the composition as an integer.
15086@tindex cwidth 15087@tindex cwidth
15087The @code{cwidth} function measures the width, in characters, of a 15088The @code{cwidth} function measures the width, in characters, of a
15088composition. For example, @samp{cwidth(a + b)} is 5, and 15089composition. For example, @samp{cwidth(a + b)} is 5, and
15089@samp{cwidth(a / b)} is 5 in normal mode, 1 in Big mode, and 11 in 15090@samp{cwidth(a / b)} is 5 in Normal mode, 1 in Big mode, and 11 in
15090@TeX{} mode (for @samp{@{a \over b@}}). The argument may involve 15091@TeX{} mode (for @samp{@{a \over b@}}). The argument may involve
15091the composition functions described in this section. 15092the composition functions described in this section.
15092 15093
@@ -15262,7 +15263,7 @@ unrelated to the syntax tables described in the Emacs manual.)
15262@pindex calc-edit-user-syntax 15263@pindex calc-edit-user-syntax
15263The @kbd{Z S} (@code{calc-edit-user-syntax}) command edits the 15264The @kbd{Z S} (@code{calc-edit-user-syntax}) command edits the
15264syntax table for the current language mode. If you want your 15265syntax table for the current language mode. If you want your
15265syntax to work in any language, define it in the normal language 15266syntax to work in any language, define it in the Normal language
15266mode. Type @kbd{M-# M-#} to finish editing the syntax table, or 15267mode. Type @kbd{M-# M-#} to finish editing the syntax table, or
15267@kbd{M-# x} to cancel the edit. The @kbd{m m} command saves all 15268@kbd{M-# x} to cancel the edit. The @kbd{m m} command saves all
15268the syntax tables along with the other mode settings; 15269the syntax tables along with the other mode settings;
@@ -15293,7 +15294,7 @@ zero or more expressions separated by commas, and @samp{)}.''
15293A @dfn{syntax table} is a list of user-defined @dfn{syntax rules}, 15294A @dfn{syntax table} is a list of user-defined @dfn{syntax rules},
15294which allow you to specify new patterns to define your own 15295which allow you to specify new patterns to define your own
15295favorite input notations. Calc's parser always checks the syntax 15296favorite input notations. Calc's parser always checks the syntax
15296table for the current language mode, then the table for the normal 15297table for the current language mode, then the table for the Normal
15297language mode, before it uses its built-in rules to parse an 15298language mode, before it uses its built-in rules to parse an
15298algebraic formula you have entered. Each syntax rule should go on 15299algebraic formula you have entered. Each syntax rule should go on
15299its own line; it consists of a @dfn{pattern}, a @samp{:=} symbol, 15300its own line; it consists of a @dfn{pattern}, a @samp{:=} symbol,
@@ -15648,7 +15649,7 @@ In this approach, we allow @samp{#2} to equal the whole expression
15648@samp{i=1..10}. Then, we use @code{matches} to break it apart into 15649@samp{i=1..10}. Then, we use @code{matches} to break it apart into
15649its components. If the expression turns out not to match the pattern, 15650its components. If the expression turns out not to match the pattern,
15650the syntax rule will fail. Note that @kbd{Z S} always uses Calc's 15651the syntax rule will fail. Note that @kbd{Z S} always uses Calc's
15651normal language mode for editing expressions in syntax rules, so we 15652Normal language mode for editing expressions in syntax rules, so we
15652must use regular Calc notation for the interval @samp{[b..c]} that 15653must use regular Calc notation for the interval @samp{[b..c]} that
15653will correspond to the Maple mode interval @samp{1..10}. 15654will correspond to the Maple mode interval @samp{1..10}.
15654 15655
@@ -15721,11 +15722,11 @@ Polar mode. Value is 0 (rectangular) or 1 (polar); default is 0.
15721Command is @kbd{m p}. 15722Command is @kbd{m p}.
15722 15723
15723@item 15724@item
15724Matrix/scalar mode. Default value is @mathit{-1}. Value is 0 for scalar 15725Matrix/Scalar mode. Default value is @mathit{-1}. Value is 0 for Scalar
15725mode, @mathit{-2} for matrix mode, or @var{N} for 15726mode, @mathit{-2} for Matrix mode, or @var{N} for
15726@texline @math{N\times N} 15727@texline @math{N\times N}
15727@infoline @var{N}x@var{N} 15728@infoline @var{N}x@var{N}
15728matrix mode. Command is @kbd{m v}. 15729Matrix mode. Command is @kbd{m v}.
15729 15730
15730@item 15731@item
15731Simplification mode. Default is 1. Value is @mathit{-1} for off (@kbd{m O}), 15732Simplification mode. Default is 1. Value is @mathit{-1} for off (@kbd{m O}),
@@ -15760,7 +15761,7 @@ programming commands. @xref{Conditionals in Macros}.)
15760@cindex Mode line indicators 15761@cindex Mode line indicators
15761This section is a summary of all symbols that can appear on the 15762This section is a summary of all symbols that can appear on the
15762Calc mode line, the highlighted bar that appears under the Calc 15763Calc mode line, the highlighted bar that appears under the Calc
15763stack window (or under an editing window in Embedded Mode). 15764stack window (or under an editing window in Embedded mode).
15764 15765
15765The basic mode line format is: 15766The basic mode line format is:
15766 15767
@@ -15772,7 +15773,7 @@ The @samp{%%} is the Emacs symbol for ``read-only''; it shows that
15772regular Emacs commands are not allowed to edit the stack buffer 15773regular Emacs commands are not allowed to edit the stack buffer
15773as if it were text. 15774as if it were text.
15774 15775
15775The word @samp{Calc:} changes to @samp{CalcEmbed:} if Embedded Mode 15776The word @samp{Calc:} changes to @samp{CalcEmbed:} if Embedded mode
15776is enabled. The words after this describe the various Calc modes 15777is enabled. The words after this describe the various Calc modes
15777that are in effect. 15778that are in effect.
15778 15779
@@ -15800,7 +15801,7 @@ Symbolic mode (@kbd{m s}; @pxref{Symbolic Mode}).
15800Matrix mode (@kbd{m v}; @pxref{Matrix Mode}). 15801Matrix mode (@kbd{m v}; @pxref{Matrix Mode}).
15801 15802
15802@item Matrix@var{n} 15803@item Matrix@var{n}
15803Dimensioned matrix mode (@kbd{C-u @var{n} m v}). 15804Dimensioned Matrix mode (@kbd{C-u @var{n} m v}).
15804 15805
15805@item Scalar 15806@item Scalar
15806Scalar mode (@kbd{m v}; @pxref{Matrix Mode}). 15807Scalar mode (@kbd{m v}; @pxref{Matrix Mode}).
@@ -15815,7 +15816,7 @@ Fraction mode (@kbd{m f}; @pxref{Fraction Mode}).
15815Infinite mode (@kbd{m i}; @pxref{Infinite Mode}). 15816Infinite mode (@kbd{m i}; @pxref{Infinite Mode}).
15816 15817
15817@item +Inf 15818@item +Inf
15818Positive infinite mode (@kbd{C-u 0 m i}). 15819Positive Infinite mode (@kbd{C-u 0 m i}).
15819 15820
15820@item NoSimp 15821@item NoSimp
15821Default simplifications off (@kbd{m O}; @pxref{Simplification Modes}). 15822Default simplifications off (@kbd{m O}; @pxref{Simplification Modes}).
@@ -16023,14 +16024,14 @@ to every element of a vector.
16023 16024
16024If either argument of @kbd{+} is a complex number, the result will in general 16025If either argument of @kbd{+} is a complex number, the result will in general
16025be complex. If one argument is in rectangular form and the other polar, 16026be complex. If one argument is in rectangular form and the other polar,
16026the current Polar Mode determines the form of the result. If Symbolic 16027the current Polar mode determines the form of the result. If Symbolic
16027Mode is enabled, the sum may be left as a formula if the necessary 16028mode is enabled, the sum may be left as a formula if the necessary
16028conversions for polar addition are non-trivial. 16029conversions for polar addition are non-trivial.
16029 16030
16030If both arguments of @kbd{+} are HMS forms, the forms are added according to 16031If both arguments of @kbd{+} are HMS forms, the forms are added according to
16031the usual conventions of hours-minutes-seconds notation. If one argument 16032the usual conventions of hours-minutes-seconds notation. If one argument
16032is an HMS form and the other is a number, that number is converted from 16033is an HMS form and the other is a number, that number is converted from
16033degrees or radians (depending on the current Angular Mode) to HMS format 16034degrees or radians (depending on the current Angular mode) to HMS format
16034and then the two HMS forms are added. 16035and then the two HMS forms are added.
16035 16036
16036If one argument of @kbd{+} is a date form, the other can be either a 16037If one argument of @kbd{+} is a date form, the other can be either a
@@ -16182,7 +16183,7 @@ must be positive real number.
16182@tindex fdiv 16183@tindex fdiv
16183The @kbd{:} (@code{calc-fdiv}) command [@code{fdiv} function in a formula] 16184The @kbd{:} (@code{calc-fdiv}) command [@code{fdiv} function in a formula]
16184divides the two integers on the top of the stack to produce a fractional 16185divides the two integers on the top of the stack to produce a fractional
16185result. This is a convenient shorthand for enabling Fraction Mode (with 16186result. This is a convenient shorthand for enabling Fraction mode (with
16186@kbd{m f}) temporarily and using @samp{/}. Note that during numeric entry 16187@kbd{m f}) temporarily and using @samp{/}. Note that during numeric entry
16187the @kbd{:} key is interpreted as a fraction separator, so to divide 8 by 6 16188the @kbd{:} key is interpreted as a fraction separator, so to divide 8 by 6
16188you would have to type @kbd{8 @key{RET} 6 @key{RET} :}. (Of course, in 16189you would have to type @kbd{8 @key{RET} 6 @key{RET} :}. (Of course, in
@@ -16236,7 +16237,7 @@ matrix, it computes the inverse of that matrix.
16236@tindex sqrt 16237@tindex sqrt
16237The @kbd{Q} (@code{calc-sqrt}) [@code{sqrt}] command computes the square 16238The @kbd{Q} (@code{calc-sqrt}) [@code{sqrt}] command computes the square
16238root of a number. For a negative real argument, the result will be a 16239root of a number. For a negative real argument, the result will be a
16239complex number whose form is determined by the current Polar Mode. 16240complex number whose form is determined by the current Polar mode.
16240 16241
16241@kindex f h 16242@kindex f h
16242@pindex calc-hypot 16243@pindex calc-hypot
@@ -16298,7 +16299,7 @@ The @kbd{f S} (@code{calc-scale-float}) [@code{scf}] function scales a number
16298by a given power of ten. Thus, @samp{scf(mant(x), xpon(x)) = x} for any 16299by a given power of ten. Thus, @samp{scf(mant(x), xpon(x)) = x} for any
16299real @samp{x}. The second argument must be an integer, but the first 16300real @samp{x}. The second argument must be an integer, but the first
16300may actually be any numeric value. For example, @samp{scf(5,-2) = 0.05} 16301may actually be any numeric value. For example, @samp{scf(5,-2) = 0.05}
16301or @samp{1:20} depending on the current Fraction Mode. 16302or @samp{1:20} depending on the current Fraction mode.
16302 16303
16303@kindex f [ 16304@kindex f [
16304@kindex f ] 16305@kindex f ]
@@ -16482,7 +16483,7 @@ be in the range @mathit{-180} degrees (exclusive) to @mathit{+180} degrees
16482The @code{calc-imaginary} command multiplies the number on the 16483The @code{calc-imaginary} command multiplies the number on the
16483top of the stack by the imaginary number @expr{i = (0,1)}. This 16484top of the stack by the imaginary number @expr{i = (0,1)}. This
16484command is not normally bound to a key in Calc, but it is available 16485command is not normally bound to a key in Calc, but it is available
16485on the @key{IMAG} button in Keypad Mode. 16486on the @key{IMAG} button in Keypad mode.
16486 16487
16487@kindex f r 16488@kindex f r
16488@pindex calc-re 16489@pindex calc-re
@@ -17761,7 +17762,7 @@ formulas below for symbolic arguments only when you use the @kbd{a "}
17761integrals or solving equations involving the functions. 17762integrals or solving equations involving the functions.
17762 17763
17763@ifinfo 17764@ifinfo
17764These formulas are shown using the conventions of ``Big'' display 17765These formulas are shown using the conventions of Big display
17765mode (@kbd{d B}); for example, the formula for @code{fv} written 17766mode (@kbd{d B}); for example, the formula for @code{fv} written
17766linearly is @samp{pmt * ((1 + rate)^n) - 1) / rate}. 17767linearly is @samp{pmt * ((1 + rate)^n) - 1) / rate}.
17767 17768
@@ -18217,7 +18218,7 @@ to any base. For example, @kbd{1024 @key{RET} 2 B} produces 10, since
18217@infoline @expr{2^10 = 1024}. 18218@infoline @expr{2^10 = 1024}.
18218In certain cases like @samp{log(3,9)}, the result 18219In certain cases like @samp{log(3,9)}, the result
18219will be either @expr{1:2} or @expr{0.5} depending on the current Fraction 18220will be either @expr{1:2} or @expr{0.5} depending on the current Fraction
18220Mode setting. With the Inverse flag [@code{alog}], this command is 18221mode setting. With the Inverse flag [@code{alog}], this command is
18221similar to @kbd{^} except that the order of the arguments is reversed. 18222similar to @kbd{^} except that the order of the arguments is reversed.
18222 18223
18223@kindex f I 18224@kindex f I
@@ -18273,7 +18274,7 @@ of the current angular mode. @xref{Basic Operations on Units}.
18273Also, the symbolic variable @code{pi} is not ordinarily recognized in 18274Also, the symbolic variable @code{pi} is not ordinarily recognized in
18274arguments to trigonometric functions, as in @samp{sin(3 pi / 4)}, but 18275arguments to trigonometric functions, as in @samp{sin(3 pi / 4)}, but
18275the @kbd{a s} (@code{calc-simplify}) command recognizes many such 18276the @kbd{a s} (@code{calc-simplify}) command recognizes many such
18276formulas when the current angular mode is radians @emph{and} symbolic 18277formulas when the current angular mode is Radians @emph{and} Symbolic
18277mode is enabled; this example would be replaced by @samp{sqrt(2) / 2}. 18278mode is enabled; this example would be replaced by @samp{sqrt(2) / 2}.
18278@xref{Symbolic Mode}. Beware, this simplification occurs even if you 18279@xref{Symbolic Mode}. Beware, this simplification occurs even if you
18279have stored a different value in the variable @samp{pi}; this is one 18280have stored a different value in the variable @samp{pi}; this is one
@@ -18282,7 +18283,7 @@ the form @expr{x} plus a multiple of @cpiover{2} are also simplified.
18282Calc includes similar formulas for @code{cos} and @code{tan}. 18283Calc includes similar formulas for @code{cos} and @code{tan}.
18283 18284
18284The @kbd{a s} command knows all angles which are integer multiples of 18285The @kbd{a s} command knows all angles which are integer multiples of
18285@cpiover{12}, @cpiover{10}, or @cpiover{8} radians. In degrees mode, 18286@cpiover{12}, @cpiover{10}, or @cpiover{8} radians. In Degrees mode,
18286analogous simplifications occur for integer multiples of 15 or 18 18287analogous simplifications occur for integer multiples of 15 or 18
18287degrees, and for arguments plus multiples of 90 degrees. 18288degrees, and for arguments plus multiples of 90 degrees.
18288 18289
@@ -18633,7 +18634,7 @@ For @samp{arctanh(z)}: This is defined by @samp{(ln(1+z) - ln(1-z)) / 2}.
18633The branch cuts are on the real axis, less than @mathit{-1} and greater than 1. 18634The branch cuts are on the real axis, less than @mathit{-1} and greater than 1.
18634 18635
18635The following tables for @code{arcsin}, @code{arccos}, and 18636The following tables for @code{arcsin}, @code{arccos}, and
18636@code{arctan} assume the current angular mode is radians. The 18637@code{arctan} assume the current angular mode is Radians. The
18637hyperbolic functions operate independently of the angular mode. 18638hyperbolic functions operate independently of the angular mode.
18638 18639
18639@smallexample 18640@smallexample
@@ -19478,7 +19479,7 @@ Note that the prefix argument can have an effect even when the input is
19478not a vector. For example, if the input is the number @mathit{-5}, then 19479not a vector. For example, if the input is the number @mathit{-5}, then
19479@kbd{c-u -1 v u} yields @mathit{-5} and 0 (the components of @mathit{-5} 19480@kbd{c-u -1 v u} yields @mathit{-5} and 0 (the components of @mathit{-5}
19480when viewed as a rectangular complex number); @kbd{C-u -2 v u} yields 5 19481when viewed as a rectangular complex number); @kbd{C-u -2 v u} yields 5
19481and 180 (assuming degrees mode); and @kbd{C-u -10 v u} yields @mathit{-5} 19482and 180 (assuming Degrees mode); and @kbd{C-u -10 v u} yields @mathit{-5}
19482and 1 (the numerator and denominator of @mathit{-5}, viewed as a rational 19483and 1 (the numerator and denominator of @mathit{-5}, viewed as a rational
19483number). Plain @kbd{v u} with this input would complain that the input 19484number). Plain @kbd{v u} with this input would complain that the input
19484is not a composite object. 19485is not a composite object.
@@ -19608,7 +19609,7 @@ such generic identity matrices, and if one is combined with a matrix
19608whose size is known, it is converted automatically to an identity 19609whose size is known, it is converted automatically to an identity
19609matrix of a suitable matching size. The @kbd{v i} command with an 19610matrix of a suitable matching size. The @kbd{v i} command with an
19610argument of zero creates a generic identity matrix, @samp{idn(1)}. 19611argument of zero creates a generic identity matrix, @samp{idn(1)}.
19611Note that in dimensioned matrix mode (@pxref{Matrix Mode}), generic 19612Note that in dimensioned Matrix mode (@pxref{Matrix Mode}), generic
19612identity matrices are immediately expanded to the current default 19613identity matrices are immediately expanded to the current default
19613dimensions. 19614dimensions.
19614 19615
@@ -21265,11 +21266,11 @@ for anything else'') prefix.
21265using regular Emacs editing commands. 21266using regular Emacs editing commands.
21266 21267
21267When doing algebraic work, you may find several of the Calculator's 21268When doing algebraic work, you may find several of the Calculator's
21268modes to be helpful, including algebraic-simplification mode (@kbd{m A}) 21269modes to be helpful, including Algebraic Simplification mode (@kbd{m A})
21269or no-simplification mode (@kbd{m O}), 21270or No-Simplification mode (@kbd{m O}),
21270algebraic-entry mode (@kbd{m a}), fraction mode (@kbd{m f}), and 21271Algebraic entry mode (@kbd{m a}), Fraction mode (@kbd{m f}), and
21271symbolic mode (@kbd{m s}). @xref{Mode Settings}, for discussions 21272Symbolic mode (@kbd{m s}). @xref{Mode Settings}, for discussions
21272of these modes. You may also wish to select ``big'' display mode (@kbd{d B}). 21273of these modes. You may also wish to select Big display mode (@kbd{d B}).
21273@xref{Normal Language Modes}. 21274@xref{Normal Language Modes}.
21274 21275
21275@menu 21276@menu
@@ -21323,7 +21324,7 @@ sub-formula, and press @w{@kbd{j s}} (@code{calc-select-here}). Calc will
21323highlight the smallest portion of the formula that contains that 21324highlight the smallest portion of the formula that contains that
21324character. By default the sub-formula is highlighted by blanking out 21325character. By default the sub-formula is highlighted by blanking out
21325all of the rest of the formula with dots. Selection works in any 21326all of the rest of the formula with dots. Selection works in any
21326display mode but is perhaps easiest in ``big'' (@kbd{d B}) mode. 21327display mode but is perhaps easiest in Big mode (@kbd{d B}).
21327Suppose you enter the following formula: 21328Suppose you enter the following formula:
21328 21329
21329@smallexample 21330@smallexample
@@ -21353,7 +21354,7 @@ to
21353Every character not part of the sub-formula @samp{b} has been changed 21354Every character not part of the sub-formula @samp{b} has been changed
21354to a dot. The @samp{*} next to the line number is to remind you that 21355to a dot. The @samp{*} next to the line number is to remind you that
21355the formula has a portion of it selected. (In this case, it's very 21356the formula has a portion of it selected. (In this case, it's very
21356obvious, but it might not always be. If Embedded Mode is enabled, 21357obvious, but it might not always be. If Embedded mode is enabled,
21357the word @samp{Sel} also appears in the mode line because the stack 21358the word @samp{Sel} also appears in the mode line because the stack
21358may not be visible. @pxref{Embedded Mode}.) 21359may not be visible. @pxref{Embedded Mode}.)
21359 21360
@@ -22003,9 +22004,9 @@ but which also substitutes stored values for variables in the formula.
22003Use @kbd{a v} if you want the variables to ignore their stored values. 22004Use @kbd{a v} if you want the variables to ignore their stored values.
22004 22005
22005If you give a numeric prefix argument of 2 to @kbd{a v}, it simplifies 22006If you give a numeric prefix argument of 2 to @kbd{a v}, it simplifies
22006as if in algebraic simplification mode. This is equivalent to typing 22007as if in Algebraic Simplification mode. This is equivalent to typing
22007@kbd{a s}; @pxref{Simplifying Formulas}. If you give a numeric prefix 22008@kbd{a s}; @pxref{Simplifying Formulas}. If you give a numeric prefix
22008of 3 or more, it uses extended simplification mode (@kbd{a e}). 22009of 3 or more, it uses Extended Simplification mode (@kbd{a e}).
22009 22010
22010If you give a negative prefix argument @mathit{-1}, @mathit{-2}, or @mathit{-3}, 22011If you give a negative prefix argument @mathit{-1}, @mathit{-2}, or @mathit{-3},
22011it simplifies in the corresponding mode but only works on the top-level 22012it simplifies in the corresponding mode but only works on the top-level
@@ -22013,7 +22014,7 @@ function call of the formula. For example, @samp{(2 + 3) * (2 + 3)} will
22013simplify to @samp{(2 + 3)^2}, without simplifying the sub-formulas 22014simplify to @samp{(2 + 3)^2}, without simplifying the sub-formulas
22014@samp{2 + 3}. As another example, typing @kbd{V R +} to sum the vector 22015@samp{2 + 3}. As another example, typing @kbd{V R +} to sum the vector
22015@samp{[1, 2, 3, 4]} produces the formula @samp{reduce(add, [1, 2, 3, 4])} 22016@samp{[1, 2, 3, 4]} produces the formula @samp{reduce(add, [1, 2, 3, 4])}
22016in no-simplify mode. Using @kbd{a v} will evaluate this all the way to 22017in No-Simplify mode. Using @kbd{a v} will evaluate this all the way to
2201710; using @kbd{C-u - a v} will evaluate it only to @samp{1 + 2 + 3 + 4}. 2201810; using @kbd{C-u - a v} will evaluate it only to @samp{1 + 2 + 3 + 4}.
22018(@xref{Reducing and Mapping}.) 22019(@xref{Reducing and Mapping}.)
22019 22020
@@ -22021,7 +22022,7 @@ in no-simplify mode. Using @kbd{a v} will evaluate this all the way to
22021@tindex evalvn 22022@tindex evalvn
22022The @kbd{=} command corresponds to the @code{evalv} function, and 22023The @kbd{=} command corresponds to the @code{evalv} function, and
22023the related @kbd{N} command, which is like @kbd{=} but temporarily 22024the related @kbd{N} command, which is like @kbd{=} but temporarily
22024disables symbolic (@kbd{m s}) mode during the evaluation, corresponds 22025disables Symbolic mode (@kbd{m s}) during the evaluation, corresponds
22025to the @code{evalvn} function. (These commands interpret their prefix 22026to the @code{evalvn} function. (These commands interpret their prefix
22026arguments differently than @kbd{a v}; @kbd{=} treats the prefix as 22027arguments differently than @kbd{a v}; @kbd{=} treats the prefix as
22027the number of stack elements to evaluate at once, and @kbd{N} treats 22028the number of stack elements to evaluate at once, and @kbd{N} treats
@@ -22196,7 +22197,7 @@ is evaluated to @expr{3}. Evaluation does not occur if the arguments
22196to a function are somehow of the wrong type @expr{@t{tan}([2,3,4])}), 22197to a function are somehow of the wrong type @expr{@t{tan}([2,3,4])}),
22197range (@expr{@t{tan}(90)}), or number (@expr{@t{tan}(3,5)}), 22198range (@expr{@t{tan}(90)}), or number (@expr{@t{tan}(3,5)}),
22198or if the function name is not recognized (@expr{@t{f}(5)}), or if 22199or if the function name is not recognized (@expr{@t{f}(5)}), or if
22199``symbolic'' mode (@pxref{Symbolic Mode}) prevents evaluation 22200Symbolic mode (@pxref{Symbolic Mode}) prevents evaluation
22200(@expr{@t{sqrt}(2)}). 22201(@expr{@t{sqrt}(2)}).
22201 22202
22202Calc simplifies (evaluates) the arguments to a function before it 22203Calc simplifies (evaluates) the arguments to a function before it
@@ -22304,7 +22305,7 @@ to @expr{-a}.
22304The products @expr{1 a} and @expr{a 1} are simplified to @expr{a}; 22305The products @expr{1 a} and @expr{a 1} are simplified to @expr{a};
22305@expr{(-1) a} and @expr{a (-1)} are simplified to @expr{-a}; 22306@expr{(-1) a} and @expr{a (-1)} are simplified to @expr{-a};
22306@expr{0 a} and @expr{a 0} are simplified to @expr{0}, except that 22307@expr{0 a} and @expr{a 0} are simplified to @expr{0}, except that
22307in matrix mode where @expr{a} is not provably scalar the result 22308in Matrix mode where @expr{a} is not provably scalar the result
22308is the generic zero matrix @samp{idn(0)}, and that if @expr{a} is 22309is the generic zero matrix @samp{idn(0)}, and that if @expr{a} is
22309infinite the result is @samp{nan}. 22310infinite the result is @samp{nan}.
22310 22311
@@ -22330,18 +22331,18 @@ or the implicit one-half of @expr{@t{sqrt}(x)}, and similarly for
22330@expr{b}. The result is written using @samp{sqrt} or @samp{1/sqrt} 22331@expr{b}. The result is written using @samp{sqrt} or @samp{1/sqrt}
22331if the sum of the powers is @expr{1/2} or @expr{-1/2}, respectively. 22332if the sum of the powers is @expr{1/2} or @expr{-1/2}, respectively.
22332If the sum of the powers is zero, the product is simplified to 22333If the sum of the powers is zero, the product is simplified to
22333@expr{1} or to @samp{idn(1)} if matrix mode is enabled. 22334@expr{1} or to @samp{idn(1)} if Matrix mode is enabled.
22334 22335
22335The product of a negative power times anything but another negative 22336The product of a negative power times anything but another negative
22336power is changed to use division: 22337power is changed to use division:
22337@texline @math{x^{-2} y} 22338@texline @math{x^{-2} y}
22338@infoline @expr{x^(-2) y} 22339@infoline @expr{x^(-2) y}
22339goes to @expr{y / x^2} unless matrix mode is 22340goes to @expr{y / x^2} unless Matrix mode is
22340in effect and neither @expr{x} nor @expr{y} are scalar (in which 22341in effect and neither @expr{x} nor @expr{y} are scalar (in which
22341case it is considered unsafe to rearrange the order of the terms). 22342case it is considered unsafe to rearrange the order of the terms).
22342 22343
22343Finally, @expr{a (b/c)} is rewritten to @expr{(a b)/c}, and also 22344Finally, @expr{a (b/c)} is rewritten to @expr{(a b)/c}, and also
22344@expr{(a/b) c} is changed to @expr{(a c)/b} unless in matrix mode. 22345@expr{(a/b) c} is changed to @expr{(a c)/b} unless in Matrix mode.
22345 22346
22346@tex 22347@tex
22347\bigskip 22348\bigskip
@@ -22368,7 +22369,7 @@ for any power @expr{c}.
22368 22369
22369Also, @expr{(-a) / b} and @expr{a / (-b)} go to @expr{-(a/b)}; 22370Also, @expr{(-a) / b} and @expr{a / (-b)} go to @expr{-(a/b)};
22370@expr{(a/b) / c} goes to @expr{a / (b c)}; and @expr{a / (b/c)} 22371@expr{(a/b) / c} goes to @expr{a / (b c)}; and @expr{a / (b/c)}
22371goes to @expr{(a c) / b} unless matrix mode prevents this 22372goes to @expr{(a c) / b} unless Matrix mode prevents this
22372rearrangement. Similarly, @expr{a / (b:c)} is simplified to 22373rearrangement. Similarly, @expr{a / (b:c)} is simplified to
22373@expr{(c:b) a} for any fraction @expr{b:c}. 22374@expr{(c:b) a} for any fraction @expr{b:c}.
22374 22375
@@ -22392,7 +22393,7 @@ to @expr{a / (c - b)}, and @expr{(a - b) / (-c)} to @expr{(b - a) / c}.
22392@end tex 22393@end tex
22393 22394
22394The formula @expr{x^0} is simplified to @expr{1}, or to @samp{idn(1)} 22395The formula @expr{x^0} is simplified to @expr{1}, or to @samp{idn(1)}
22395in matrix mode. The formula @expr{0^x} is simplified to @expr{0} 22396in Matrix mode. The formula @expr{0^x} is simplified to @expr{0}
22396unless @expr{x} is a negative number or complex number, in which 22397unless @expr{x} is a negative number or complex number, in which
22397case the result is an infinity or an unsimplified formula according 22398case the result is an infinity or an unsimplified formula according
22398to the current infinite mode. Note that @expr{0^0} is an 22399to the current infinite mode. Note that @expr{0^0} is an
@@ -22568,7 +22569,7 @@ property that real-valued numbers, interval forms and infinities
22568come first, and are sorted into increasing order. The @kbd{V S} 22569come first, and are sorted into increasing order. The @kbd{V S}
22569command uses the same ordering when sorting a vector. 22570command uses the same ordering when sorting a vector.
22570 22571
22571Sorting of terms of products is inhibited when matrix mode is 22572Sorting of terms of products is inhibited when Matrix mode is
22572turned on; in this case, Calc will never exchange the order of 22573turned on; in this case, Calc will never exchange the order of
22573two terms unless it knows at least one of the terms is a scalar. 22574two terms unless it knows at least one of the terms is a scalar.
22574 22575
@@ -23176,7 +23177,7 @@ With a numeric prefix argument @var{n}, this command computes the
23176@var{n}th derivative. 23177@var{n}th derivative.
23177 23178
23178When working with trigonometric functions, it is best to switch to 23179When working with trigonometric functions, it is best to switch to
23179radians mode first (with @w{@kbd{m r}}). The derivative of @samp{sin(x)} 23180Radians mode first (with @w{@kbd{m r}}). The derivative of @samp{sin(x)}
23180in degrees is @samp{(pi/180) cos(x)}, probably not the expected 23181in degrees is @samp{(pi/180) cos(x)}, probably not the expected
23181answer! 23182answer!
23182 23183
@@ -23267,7 +23268,7 @@ due to a different choice of constant of integration.
23267 23268
23268The Calculator remembers all the integrals it has done. If conditions 23269The Calculator remembers all the integrals it has done. If conditions
23269change in a way that would invalidate the old integrals, say, a switch 23270change in a way that would invalidate the old integrals, say, a switch
23270from degrees to radians mode, then they will be thrown out. If you 23271from Degrees to Radians mode, then they will be thrown out. If you
23271suspect this is not happening when it should, use the 23272suspect this is not happening when it should, use the
23272@code{calc-flush-caches} command; @pxref{Caches}. 23273@code{calc-flush-caches} command; @pxref{Caches}.
23273 23274
@@ -23626,10 +23627,10 @@ which can be solved for @expr{x^3} using the quadratic equation, and then
23626for @expr{x} by taking cube roots. But in many cases, like 23627for @expr{x} by taking cube roots. But in many cases, like
23627@expr{x^6 + x + 1}, Calc does not know how to rewrite the polynomial 23628@expr{x^6 + x + 1}, Calc does not know how to rewrite the polynomial
23628into a form it can solve. The @kbd{a P} command can still deliver a 23629into a form it can solve. The @kbd{a P} command can still deliver a
23629list of numerical roots, however, provided that symbolic mode (@kbd{m s}) 23630list of numerical roots, however, provided that Symbolic mode (@kbd{m s})
23630is not turned on. (If you work with symbolic mode on, recall that the 23631is not turned on. (If you work with Symbolic mode on, recall that the
23631@kbd{N} (@code{calc-eval-num}) key is a handy way to reevaluate the 23632@kbd{N} (@code{calc-eval-num}) key is a handy way to reevaluate the
23632formula on the stack with symbolic mode temporarily off.) Naturally, 23633formula on the stack with Symbolic mode temporarily off.) Naturally,
23633@kbd{a P} can only provide numerical roots if the polynomial coefficients 23634@kbd{a P} can only provide numerical roots if the polynomial coefficients
23634are all numbers (real or complex). 23635are all numbers (real or complex).
23635 23636
@@ -24244,9 +24245,9 @@ Note that since the constant and linear terms are enough to fit the
24244data exactly, it's no surprise that Calc chose a tiny contribution 24245data exactly, it's no surprise that Calc chose a tiny contribution
24245for @expr{x^2}. (The fact that it's not exactly zero is due only 24246for @expr{x^2}. (The fact that it's not exactly zero is due only
24246to roundoff error. Since our data are exact integers, we could get 24247to roundoff error. Since our data are exact integers, we could get
24247an exact answer by typing @kbd{m f} first to get fraction mode. 24248an exact answer by typing @kbd{m f} first to get Fraction mode.
24248Then the @expr{x^2} term would vanish altogether. Usually, though, 24249Then the @expr{x^2} term would vanish altogether. Usually, though,
24249the data being fitted will be approximate floats so fraction mode 24250the data being fitted will be approximate floats so Fraction mode
24250won't help.) 24251won't help.)
24251 24252
24252Doing the @kbd{a F 2} fit on the data set with 14 instead of 13 24253Doing the @kbd{a F 2} fit on the data set with 14 instead of 13
@@ -24271,7 +24272,7 @@ The actual coefficients we get with a precision of 12, like
24271@expr{0.0416666663588}, clearly suffer from loss of precision. 24272@expr{0.0416666663588}, clearly suffer from loss of precision.
24272It is a good idea to increase the working precision to several 24273It is a good idea to increase the working precision to several
24273digits beyond what you need when you do a fitting operation. 24274digits beyond what you need when you do a fitting operation.
24274Or, if your data are exact, use fraction mode to get exact 24275Or, if your data are exact, use Fraction mode to get exact
24275results. 24276results.
24276 24277
24277You can type @kbd{i} instead of a digit at the model prompt to fit 24278You can type @kbd{i} instead of a digit at the model prompt to fit
@@ -25942,12 +25943,12 @@ like @samp{(x + y) + (z - w)}, are not tried.
25942 25943
25943Note that @samp{*} is not commutative when applied to matrices, but 25944Note that @samp{*} is not commutative when applied to matrices, but
25944rewrite rules pretend that it is. If you type @kbd{m v} to enable 25945rewrite rules pretend that it is. If you type @kbd{m v} to enable
25945matrix mode (@pxref{Matrix Mode}), rewrite rules will match @samp{*} 25946Matrix mode (@pxref{Matrix Mode}), rewrite rules will match @samp{*}
25946literally, ignoring its usual commutativity property. (In the 25947literally, ignoring its usual commutativity property. (In the
25947current implementation, the associativity also vanishes---it is as 25948current implementation, the associativity also vanishes---it is as
25948if the pattern had been enclosed in a @code{plain} marker; see below.) 25949if the pattern had been enclosed in a @code{plain} marker; see below.)
25949If you are applying rewrites to formulas with matrices, it's best to 25950If you are applying rewrites to formulas with matrices, it's best to
25950enable matrix mode first to prevent algebraically incorrect rewrites 25951enable Matrix mode first to prevent algebraically incorrect rewrites
25951from occurring. 25952from occurring.
25952 25953
25953The pattern @samp{-x} will actually match any expression. For example, 25954The pattern @samp{-x} will actually match any expression. For example,
@@ -26424,8 +26425,8 @@ You must use @code{apply} for meta-variables with function names
26424on both sides of a rewrite rule: @samp{apply(f, [x]) := f(x+1)} 26425on both sides of a rewrite rule: @samp{apply(f, [x]) := f(x+1)}
26425is @emph{not} correct, because it rewrites @samp{spam(6)} into 26426is @emph{not} correct, because it rewrites @samp{spam(6)} into
26426@samp{f(7)}. The righthand side should be @samp{apply(f, [x+1])}. 26427@samp{f(7)}. The righthand side should be @samp{apply(f, [x+1])}.
26427Also note that you will have to use no-simplify (@kbd{m O}) 26428Also note that you will have to use No-Simplify mode (@kbd{m O})
26428mode when entering this rule so that the @code{apply} isn't 26429when entering this rule so that the @code{apply} isn't
26429evaluated immediately to get the new rule @samp{f(x) := f(x+1)}. 26430evaluated immediately to get the new rule @samp{f(x) := f(x+1)}.
26430Or, use @kbd{s e} to enter the rule without going through the stack, 26431Or, use @kbd{s e} to enter the rule without going through the stack,
26431or enter the rule as @samp{apply(f, [x]) := apply(f, [x+1]) @w{:: 1}}. 26432or enter the rule as @samp{apply(f, [x]) := apply(f, [x+1]) @w{:: 1}}.
@@ -27160,7 +27161,7 @@ To apply these manually, you could put them in a variable called
27160to expand trig functions. But if instead you store them in the 27161to expand trig functions. But if instead you store them in the
27161variable @code{EvalRules}, they will automatically be applied to all 27162variable @code{EvalRules}, they will automatically be applied to all
27162sines and cosines of sums. Then, with @samp{2 x} and @samp{45} on 27163sines and cosines of sums. Then, with @samp{2 x} and @samp{45} on
27163the stack, typing @kbd{+ S} will (assuming degrees mode) result in 27164the stack, typing @kbd{+ S} will (assuming Degrees mode) result in
27164@samp{0.7071 sin(2 x) + 0.7071 cos(2 x)} automatically. 27165@samp{0.7071 sin(2 x) + 0.7071 cos(2 x)} automatically.
27165 27166
27166As each level of a formula is evaluated, the rules from 27167As each level of a formula is evaluated, the rules from
@@ -27236,11 +27237,11 @@ number @expr{(2, 3)}, Calc computes @samp{sqrt(2*2 + 3*3)} by calling
27236the multiplication, addition, and square root functions directly rather 27237the multiplication, addition, and square root functions directly rather
27237than applying the default simplifications to this formula. So an 27238than applying the default simplifications to this formula. So an
27238@code{EvalRules} rule that (perversely) rewrites @samp{sqrt(13) := 6} 27239@code{EvalRules} rule that (perversely) rewrites @samp{sqrt(13) := 6}
27239would not apply. (However, if you put Calc into symbolic mode so that 27240would not apply. (However, if you put Calc into Symbolic mode so that
27240@samp{sqrt(13)} will be left in symbolic form by the built-in square 27241@samp{sqrt(13)} will be left in symbolic form by the built-in square
27241root function, your rule will be able to apply. But if the complex 27242root function, your rule will be able to apply. But if the complex
27242number were @expr{(3,4)}, so that @samp{sqrt(25)} must be calculated, 27243number were @expr{(3,4)}, so that @samp{sqrt(25)} must be calculated,
27243then symbolic mode will not help because @samp{sqrt(25)} can be 27244then Symbolic mode will not help because @samp{sqrt(25)} can be
27244evaluated exactly to 5.) 27245evaluated exactly to 5.)
27245 27246
27246One subtle restriction that normally only manifests itself with 27247One subtle restriction that normally only manifests itself with
@@ -27347,7 +27348,7 @@ A surprisingly useful rewrite rule is @samp{a/(b-c) := a*(b+c)/(b^2-c^2)}.
27347This will simplify the formula whenever @expr{b} and/or @expr{c} can 27348This will simplify the formula whenever @expr{b} and/or @expr{c} can
27348be made simpler by squaring. For example, applying this rule to 27349be made simpler by squaring. For example, applying this rule to
27349@samp{2 / (sqrt(2) + 3)} yields @samp{6:7 - 2:7 sqrt(2)} (assuming 27350@samp{2 / (sqrt(2) + 3)} yields @samp{6:7 - 2:7 sqrt(2)} (assuming
27350Symbolic Mode has been enabled to keep the square root from being 27351Symbolic mode has been enabled to keep the square root from being
27351evaluated to a floating-point approximation). This rule is also 27352evaluated to a floating-point approximation). This rule is also
27352useful when working with symbolic complex numbers, e.g., 27353useful when working with symbolic complex numbers, e.g.,
27353@samp{(a + b i) / (c + d i)}. 27354@samp{(a + b i) / (c + d i)}.
@@ -27457,7 +27458,7 @@ formula @samp{1 mm} is ``simplified'' to @samp{mm}. This is only a
27457display anomaly, however; @samp{mm} will work just fine as a 27458display anomaly, however; @samp{mm} will work just fine as a
27458representation of one millimeter. 27459representation of one millimeter.
27459 27460
27460You may find that Algebraic Mode (@pxref{Algebraic Entry}) makes working 27461You may find that Algebraic mode (@pxref{Algebraic Entry}) makes working
27461with units expressions easier. Otherwise, you will have to remember 27462with units expressions easier. Otherwise, you will have to remember
27462to hit the apostrophe key every time you wish to enter units. 27463to hit the apostrophe key every time you wish to enter units.
27463 27464
@@ -28346,11 +28347,11 @@ including the current simplification mode. Recall that the
28346formula @samp{x + y + x} is not handled by Calc's default 28347formula @samp{x + y + x} is not handled by Calc's default
28347simplifications, but the @kbd{a s} command will reduce it to 28348simplifications, but the @kbd{a s} command will reduce it to
28348the simpler form @samp{y + 2 x}. You can also type @kbd{m A} 28349the simpler form @samp{y + 2 x}. You can also type @kbd{m A}
28349to enable an algebraic-simplification mode in which the 28350to enable an Algebraic Simplification mode in which the
28350equivalent of @kbd{a s} is used on all of Calc's results. 28351equivalent of @kbd{a s} is used on all of Calc's results.
28351If you enter @samp{x + y + x =>} normally, the result will 28352If you enter @samp{x + y + x =>} normally, the result will
28352be @samp{x + y + x => x + y + x}. If you change to 28353be @samp{x + y + x => x + y + x}. If you change to
28353algebraic-simplification mode, the result will be 28354Algebraic Simplification mode, the result will be
28354@samp{x + y + x => y + 2 x}. However, just pressing @kbd{a s} 28355@samp{x + y + x => y + 2 x}. However, just pressing @kbd{a s}
28355once will have no effect on @samp{x + y + x => x + y + x}, 28356once will have no effect on @samp{x + y + x => x + y + x},
28356because the righthand side depends only on the lefthand side 28357because the righthand side depends only on the lefthand side
@@ -28389,13 +28390,13 @@ side effects.
28389@pindex calc-assign 28390@pindex calc-assign
28390@tindex assign 28391@tindex assign
28391@tindex := 28392@tindex :=
28392Embedded Mode also uses @samp{=>} operators. In embedded mode, 28393Embedded mode also uses @samp{=>} operators. In Embedded mode,
28393the lefthand side of an @samp{=>} operator can refer to variables 28394the lefthand side of an @samp{=>} operator can refer to variables
28394assigned elsewhere in the file by @samp{:=} operators. The 28395assigned elsewhere in the file by @samp{:=} operators. The
28395assignment operator @samp{a := 17} does not actually do anything 28396assignment operator @samp{a := 17} does not actually do anything
28396by itself. But Embedded Mode recognizes it and marks it as a sort 28397by itself. But Embedded mode recognizes it and marks it as a sort
28397of file-local definition of the variable. You can enter @samp{:=} 28398of file-local definition of the variable. You can enter @samp{:=}
28398operators in algebraic mode, or by using the @kbd{s :} 28399operators in Algebraic mode, or by using the @kbd{s :}
28399(@code{calc-assign}) [@code{assign}] command which takes a variable 28400(@code{calc-assign}) [@code{assign}] command which takes a variable
28400and value from the stack and replaces them with an assignment. 28401and value from the stack and replaces them with an assignment.
28401 28402
@@ -29096,7 +29097,7 @@ killing GNUPLOT because you think it has gotten stuck.
29096The commands in this chapter move information between the Calculator and 29097The commands in this chapter move information between the Calculator and
29097other Emacs editing buffers. 29098other Emacs editing buffers.
29098 29099
29099In many cases Embedded Mode is an easier and more natural way to 29100In many cases Embedded mode is an easier and more natural way to
29100work with Calc from a regular editing buffer. @xref{Embedded Mode}. 29101work with Calc from a regular editing buffer. @xref{Embedded Mode}.
29101 29102
29102@menu 29103@menu
@@ -29367,7 +29368,7 @@ just by double-clicking on it in the shell, then middle-clicking
29367in the Calc window. 29368in the Calc window.
29368 29369
29369@node Keypad Mode, Embedded Mode, Kill and Yank, Introduction 29370@node Keypad Mode, Embedded Mode, Kill and Yank, Introduction
29370@chapter ``Keypad'' Mode 29371@chapter Keypad Mode
29371 29372
29372@noindent 29373@noindent
29373@kindex M-# k 29374@kindex M-# k
@@ -29376,7 +29377,7 @@ The @kbd{M-# k} (@code{calc-keypad}) command starts the Calculator
29376and displays a picture of a calculator-style keypad. If you are using 29377and displays a picture of a calculator-style keypad. If you are using
29377the X window system, you can click on any of the ``keys'' in the 29378the X window system, you can click on any of the ``keys'' in the
29378keypad using the left mouse button to operate the calculator. 29379keypad using the left mouse button to operate the calculator.
29379The original window remains the selected window; in keypad mode 29380The original window remains the selected window; in Keypad mode
29380you can type in your file while simultaneously performing 29381you can type in your file while simultaneously performing
29381calculations with the mouse. 29382calculations with the mouse.
29382 29383
@@ -29392,11 +29393,11 @@ the @samp{*Calc Keypad*} window, place the cursor on the desired
29392``key,'' and type @key{SPC} or @key{RET}. If you think this 29393``key,'' and type @key{SPC} or @key{RET}. If you think this
29393is easier than using Calc normally, go right ahead. 29394is easier than using Calc normally, go right ahead.
29394 29395
29395Calc commands are more or less the same in keypad mode. Certain 29396Calc commands are more or less the same in Keypad mode. Certain
29396keypad keys differ slightly from the corresponding normal Calc 29397keypad keys differ slightly from the corresponding normal Calc
29397keystrokes; all such deviations are described below. 29398keystrokes; all such deviations are described below.
29398 29399
29399Keypad Mode includes many more commands than will fit on the keypad 29400Keypad mode includes many more commands than will fit on the keypad
29400at once. Click the right mouse button [@code{calc-keypad-menu}] 29401at once. Click the right mouse button [@code{calc-keypad-menu}]
29401to switch to the next menu. The bottom five rows of the keypad 29402to switch to the next menu. The bottom five rows of the keypad
29402stay the same; the top three rows change to a new set of commands. 29403stay the same; the top three rows change to a new set of commands.
@@ -29444,7 +29445,7 @@ original buffer.
29444@end smallexample 29445@end smallexample
29445 29446
29446@noindent 29447@noindent
29447This is the menu that appears the first time you start Keypad Mode. 29448This is the menu that appears the first time you start Keypad mode.
29448It will show up in a vertical window on the right side of your screen. 29449It will show up in a vertical window on the right side of your screen.
29449Above this menu is the traditional Calc stack display. On a 24-line 29450Above this menu is the traditional Calc stack display. On a 24-line
29450screen you will be able to see the top three stack entries. 29451screen you will be able to see the top three stack entries.
@@ -29461,7 +29462,7 @@ At other times it changes the sign of the number on the top of the
29461stack. 29462stack.
29462 29463
29463The @key{INV} and @key{HYP} keys modify other keys. As well as 29464The @key{INV} and @key{HYP} keys modify other keys. As well as
29464having the effects described elsewhere in this manual, Keypad Mode 29465having the effects described elsewhere in this manual, Keypad mode
29465defines several other ``inverse'' operations. These are described 29466defines several other ``inverse'' operations. These are described
29466below and in the following sections. 29467below and in the following sections.
29467 29468
@@ -29481,7 +29482,7 @@ The @key{EXEC} key prompts you to enter any keystroke sequence
29481that would normally work in Calc mode. This can include a 29482that would normally work in Calc mode. This can include a
29482numeric prefix if you wish. It is also possible simply to 29483numeric prefix if you wish. It is also possible simply to
29483switch into the Calc window and type commands in it; there is 29484switch into the Calc window and type commands in it; there is
29484nothing ``magic'' about this window when Keypad Mode is active. 29485nothing ``magic'' about this window when Keypad mode is active.
29485 29486
29486The other keys in this display perform their obvious calculator 29487The other keys in this display perform their obvious calculator
29487functions. @key{CLN2} rounds the top-of-stack by temporarily 29488functions. @key{CLN2} rounds the top-of-stack by temporarily
@@ -29760,16 +29761,16 @@ The @key{OVER} key duplicates the second-to-top stack element.
29760The @key{STO} and @key{RCL} keys are analogous to @kbd{s t} and 29761The @key{STO} and @key{RCL} keys are analogous to @kbd{s t} and
29761@kbd{s r} in regular Calc. @xref{Store and Recall}. Click the 29762@kbd{s r} in regular Calc. @xref{Store and Recall}. Click the
29762@key{STO} or @key{RCL} key, then one of the ten digits. (Named 29763@key{STO} or @key{RCL} key, then one of the ten digits. (Named
29763variables are not available in Keypad Mode.) You can also use, 29764variables are not available in Keypad mode.) You can also use,
29764for example, @kbd{STO + 3} to add to register 3. 29765for example, @kbd{STO + 3} to add to register 3.
29765 29766
29766@node Embedded Mode, Programming, Keypad Mode, Top 29767@node Embedded Mode, Programming, Keypad Mode, Top
29767@chapter Embedded Mode 29768@chapter Embedded Mode
29768 29769
29769@noindent 29770@noindent
29770Embedded Mode in Calc provides an alternative to copying numbers 29771Embedded mode in Calc provides an alternative to copying numbers
29771and formulas back and forth between editing buffers and the Calc 29772and formulas back and forth between editing buffers and the Calc
29772stack. In Embedded Mode, your editing buffer becomes temporarily 29773stack. In Embedded mode, your editing buffer becomes temporarily
29773linked to the stack and this copying is taken care of automatically. 29774linked to the stack and this copying is taken care of automatically.
29774 29775
29775@menu 29776@menu
@@ -29794,7 +29795,7 @@ are visiting your own files.
29794 29795
29795Calc normally scans backward and forward in the buffer for the 29796Calc normally scans backward and forward in the buffer for the
29796nearest opening and closing @dfn{formula delimiters}. The simplest 29797nearest opening and closing @dfn{formula delimiters}. The simplest
29797delimiters are blank lines. Other delimiters that Embedded Mode 29798delimiters are blank lines. Other delimiters that Embedded mode
29798understands are: 29799understands are:
29799 29800
29800@enumerate 29801@enumerate
@@ -30352,15 +30353,15 @@ use @kbd{M-# u} to update the buffer by hand.
30352@section Mode Settings in Embedded Mode 30353@section Mode Settings in Embedded Mode
30353 30354
30354@noindent 30355@noindent
30355Embedded Mode has a rather complicated mechanism for handling mode 30356Embedded mode has a rather complicated mechanism for handling mode
30356settings in Embedded formulas. It is possible to put annotations 30357settings in Embedded formulas. It is possible to put annotations
30357in the file that specify mode settings either global to the entire 30358in the file that specify mode settings either global to the entire
30358file or local to a particular formula or formulas. In the latter 30359file or local to a particular formula or formulas. In the latter
30359case, different modes can be specified for use when a formula 30360case, different modes can be specified for use when a formula
30360is the enabled Embedded Mode formula. 30361is the enabled Embedded mode formula.
30361 30362
30362When you give any mode-setting command, like @kbd{m f} (for fraction 30363When you give any mode-setting command, like @kbd{m f} (for Fraction
30363mode) or @kbd{d s} (for scientific notation), Embedded Mode adds 30364mode) or @kbd{d s} (for scientific notation), Embedded mode adds
30364a line like the following one to the file just before the opening 30365a line like the following one to the file just before the opening
30365delimiter of the formula. 30366delimiter of the formula.
30366 30367
@@ -30413,7 +30414,7 @@ sure the value is of a legal type or range; if you write an
30413annotation by hand, be sure to give a proper value or results 30414annotation by hand, be sure to give a proper value or results
30414will be unpredictable. Mode-setting annotations are case-sensitive. 30415will be unpredictable. Mode-setting annotations are case-sensitive.
30415 30416
30416While Embedded Mode is enabled, the word @code{Local} appears in 30417While Embedded mode is enabled, the word @code{Local} appears in
30417the mode line. This is to show that mode setting commands generate 30418the mode line. This is to show that mode setting commands generate
30418annotations that are ``local'' to the current formula or set of 30419annotations that are ``local'' to the current formula or set of
30419formulas. The @kbd{m R} (@code{calc-mode-record-mode}) command 30420formulas. The @kbd{m R} (@code{calc-mode-record-mode}) command
@@ -30429,7 +30430,7 @@ that look like this, respectively:
30429@end example 30430@end example
30430 30431
30431The first kind of annotation will be used only while a formula 30432The first kind of annotation will be used only while a formula
30432is enabled in Embedded Mode. The second kind will be used only 30433is enabled in Embedded mode. The second kind will be used only
30433when the formula is @emph{not} enabled. (Whether the formula 30434when the formula is @emph{not} enabled. (Whether the formula
30434is ``active'' or not, i.e., whether Calc has seen this formula 30435is ``active'' or not, i.e., whether Calc has seen this formula
30435yet, is not relevant here.) 30436yet, is not relevant here.)
@@ -30471,21 +30472,21 @@ We would have to go down to the other formula and press @kbd{M-# u}
30471on it in order to get it to notice the new annotation. 30472on it in order to get it to notice the new annotation.
30472 30473
30473Two more mode-recording modes selectable by @kbd{m R} are @code{Save} 30474Two more mode-recording modes selectable by @kbd{m R} are @code{Save}
30474(which works even outside of Embedded Mode), in which mode settings 30475(which works even outside of Embedded mode), in which mode settings
30475are recorded permanently in your Emacs startup file @file{~/.emacs} 30476are recorded permanently in your Emacs startup file @file{~/.emacs}
30476rather than by annotating the current document, and no-recording 30477rather than by annotating the current document, and no-recording
30477mode (where there is no symbol like @code{Save} or @code{Local} in 30478mode (where there is no symbol like @code{Save} or @code{Local} in
30478the mode line), in which mode-changing commands do not leave any 30479the mode line), in which mode-changing commands do not leave any
30479annotations at all. 30480annotations at all.
30480 30481
30481When Embedded Mode is not enabled, mode-recording modes except 30482When Embedded mode is not enabled, mode-recording modes except
30482for @code{Save} have no effect. 30483for @code{Save} have no effect.
30483 30484
30484@node Customizing Embedded Mode, , Mode Settings in Embedded Mode, Embedded Mode 30485@node Customizing Embedded Mode, , Mode Settings in Embedded Mode, Embedded Mode
30485@section Customizing Embedded Mode 30486@section Customizing Embedded Mode
30486 30487
30487@noindent 30488@noindent
30488You can modify Embedded Mode's behavior by setting various Lisp 30489You can modify Embedded mode's behavior by setting various Lisp
30489variables described here. Use @kbd{M-x set-variable} or 30490variables described here. Use @kbd{M-x set-variable} or
30490@kbd{M-x edit-options} to adjust a variable on the fly, or 30491@kbd{M-x edit-options} to adjust a variable on the fly, or
30491put a suitable @code{setq} statement in your @file{~/.emacs} 30492put a suitable @code{setq} statement in your @file{~/.emacs}
@@ -30495,7 +30496,7 @@ file; @pxref{File Variables, , Local Variables in Files, emacs, the
30495Emacs manual}.) 30496Emacs manual}.)
30496 30497
30497While none of these variables will be buffer-local by default, you 30498While none of these variables will be buffer-local by default, you
30498can make any of them local to any embedded-mode buffer. (Their 30499can make any of them local to any Embedded mode buffer. (Their
30499values in the @samp{*Calculator*} buffer are never used.) 30500values in the @samp{*Calculator*} buffer are never used.)
30500 30501
30501@vindex calc-embedded-open-formula 30502@vindex calc-embedded-open-formula
@@ -30584,7 +30585,7 @@ The default string is @code{"%%% "} (note the trailing space).
30584@vindex calc-embedded-close-plain 30585@vindex calc-embedded-close-plain
30585The @code{calc-embedded-close-plain} variable is a string which 30586The @code{calc-embedded-close-plain} variable is a string which
30586ends a ``plain'' formula. The default is @code{" %%%\n"}. Without 30587ends a ``plain'' formula. The default is @code{" %%%\n"}. Without
30587the trailing newline here, the first line of a ``big'' mode formula 30588the trailing newline here, the first line of a Big mode formula
30588that followed might be shifted over with respect to the other lines. 30589that followed might be shifted over with respect to the other lines.
30589 30590
30590@vindex calc-embedded-open-new-formula 30591@vindex calc-embedded-open-new-formula
@@ -31045,7 +31046,7 @@ conditional and looping commands.
31045@cindex Restoring saved modes 31046@cindex Restoring saved modes
31046Keyboard macros sometimes want to operate under known conditions 31047Keyboard macros sometimes want to operate under known conditions
31047without affecting surrounding conditions. For example, a keyboard 31048without affecting surrounding conditions. For example, a keyboard
31048macro may wish to turn on Fraction Mode, or set a particular 31049macro may wish to turn on Fraction mode, or set a particular
31049precision, independent of the user's normal setting for those 31050precision, independent of the user's normal setting for those
31050modes. 31051modes.
31051 31052
@@ -31094,7 +31095,7 @@ for all mode-setting commands inside the macro.
31094In fact, @kbd{C-u Z `} is like @kbd{Z `} except that it sets the modes 31095In fact, @kbd{C-u Z `} is like @kbd{Z `} except that it sets the modes
31095listed above to their default values. As usual, the matching @kbd{Z '} 31096listed above to their default values. As usual, the matching @kbd{Z '}
31096will restore the modes to their settings from before the @kbd{C-u Z `}. 31097will restore the modes to their settings from before the @kbd{C-u Z `}.
31097Also, @w{@kbd{Z `}} with a negative prefix argument resets algebraic mode 31098Also, @w{@kbd{Z `}} with a negative prefix argument resets the algebraic mode
31098to its default (off) but leaves the other modes the same as they were 31099to its default (off) but leaves the other modes the same as they were
31099outside the construct. 31100outside the construct.
31100 31101
@@ -32166,7 +32167,7 @@ If the first argument to @code{calc-eval} is a list whose first
32166element is a formula string, then @code{calc-eval} sets all the 32167element is a formula string, then @code{calc-eval} sets all the
32167various Calc modes to their default values while the formula is 32168various Calc modes to their default values while the formula is
32168evaluated and formatted. For example, the precision is set to 12 32169evaluated and formatted. For example, the precision is set to 12
32169digits, digit grouping is turned off, and the normal language 32170digits, digit grouping is turned off, and the Normal language
32170mode is used. 32171mode is used.
32171 32172
32172This same principle applies to the other options discussed below. 32173This same principle applies to the other options discussed below.
@@ -32189,7 +32190,7 @@ It's usually best to use this form of @code{calc-eval} unless your
32189program actually considers the interaction with Calc's mode settings 32190program actually considers the interaction with Calc's mode settings
32190to be a feature. This will avoid all sorts of potential ``gotchas''; 32191to be a feature. This will avoid all sorts of potential ``gotchas'';
32191consider what happens with @samp{(calc-eval "sqrt(2)" 'num)} 32192consider what happens with @samp{(calc-eval "sqrt(2)" 'num)}
32192when the user has left Calc in symbolic mode or no-simplify mode. 32193when the user has left Calc in Symbolic mode or No-Simplify mode.
32193 32194
32194As another example, @samp{(equal (calc-eval '("$<$$") nil a b) "1")} 32195As another example, @samp{(equal (calc-eval '("$<$$") nil a b) "1")}
32195checks if the number in string @expr{a} is less than the one in 32196checks if the number in string @expr{a} is less than the one in
@@ -32765,7 +32766,7 @@ will be used.
32765This function takes a Calc object and ``normalizes'' it. At the very 32766This function takes a Calc object and ``normalizes'' it. At the very
32766least this involves re-rounding floating-point values according to the 32767least this involves re-rounding floating-point values according to the
32767current precision and other similar jobs. Also, unless the user has 32768current precision and other similar jobs. Also, unless the user has
32768selected no-simplify mode (@pxref{Simplification Modes}), this involves 32769selected No-Simplify mode (@pxref{Simplification Modes}), this involves
32769actually evaluating a formula object by executing the function calls 32770actually evaluating a formula object by executing the function calls
32770it contains, and possibly also doing algebraic simplification, etc. 32771it contains, and possibly also doing algebraic simplification, etc.
32771@end defun 32772@end defun
@@ -33127,13 +33128,13 @@ function call which led here will be left in symbolic form.
33127@end defun 33128@end defun
33128 33129
33129@defun inexact-value 33130@defun inexact-value
33130If Symbolic Mode is enabled, this will signal an error that causes 33131If Symbolic mode is enabled, this will signal an error that causes
33131@code{normalize} to leave the formula in symbolic form, with the message 33132@code{normalize} to leave the formula in symbolic form, with the message
33132``Inexact result.'' (This function has no effect when not in Symbolic Mode.) 33133``Inexact result.'' (This function has no effect when not in Symbolic mode.)
33133Note that if your function calls @samp{(sin 5)} in Symbolic Mode, the 33134Note that if your function calls @samp{(sin 5)} in Symbolic mode, the
33134@code{sin} function will call @code{inexact-value}, which will cause your 33135@code{sin} function will call @code{inexact-value}, which will cause your
33135function to be left unsimplified. You may instead wish to call 33136function to be left unsimplified. You may instead wish to call
33136@samp{(normalize (list 'calcFunc-sin 5))}, which in Symbolic Mode will 33137@samp{(normalize (list 'calcFunc-sin 5))}, which in Symbolic mode will
33137return the formula @samp{sin(5)} to your function. 33138return the formula @samp{sin(5)} to your function.
33138@end defun 33139@end defun
33139 33140
@@ -33179,9 +33180,9 @@ number of parameters, or because it returns @code{nil} or calls
33179@code{reject-arg} or @code{inexact-result}, @code{normalize} returns 33180@code{reject-arg} or @code{inexact-result}, @code{normalize} returns
33180the formula still in symbolic form. 33181the formula still in symbolic form.
33181 33182
33182If the current Simplification Mode is ``none'' or ``numeric arguments 33183If the current simplification mode is ``none'' or ``numeric arguments
33183only,'' @code{normalize} will act appropriately. However, the more 33184only,'' @code{normalize} will act appropriately. However, the more
33184powerful simplification modes (like algebraic simplification) are 33185powerful simplification modes (like Algebraic Simplification) are
33185not handled by @code{normalize}. They are handled by @code{calc-normalize}, 33186not handled by @code{normalize}. They are handled by @code{calc-normalize},
33186which calls @code{normalize} and possibly some other routines, such 33187which calls @code{normalize} and possibly some other routines, such
33187as @code{simplify} or @code{simplify-units}. Programs generally will 33188as @code{simplify} or @code{simplify-units}. Programs generally will
@@ -33369,7 +33370,7 @@ again to 30 digits for use in the present request.
33369If the current angular mode is Degrees or HMS, this function returns the 33370If the current angular mode is Degrees or HMS, this function returns the
33370integer 360. In Radians mode, this function returns either the 33371integer 360. In Radians mode, this function returns either the
33371corresponding value in radians to the current precision, or the formula 33372corresponding value in radians to the current precision, or the formula
33372@samp{2*pi}, depending on the Symbolic Mode. There are also similar 33373@samp{2*pi}, depending on the Symbolic mode. There are also similar
33373function @code{half-circle} and @code{quarter-circle}. 33374function @code{half-circle} and @code{quarter-circle}.
33374@end defun 33375@end defun
33375 33376
@@ -33427,12 +33428,12 @@ If @var{a} is a formula, this returns the formula @samp{deg(@var{a})}.
33427@end defun 33428@end defun
33428 33429
33429@defun to-radians-2 a 33430@defun to-radians-2 a
33430Like @code{to-radians}, except that in Symbolic Mode a degrees to 33431Like @code{to-radians}, except that in Symbolic mode a degrees to
33431radians conversion yields a formula like @samp{@var{a}*pi/180}. 33432radians conversion yields a formula like @samp{@var{a}*pi/180}.
33432@end defun 33433@end defun
33433 33434
33434@defun from-radians-2 a 33435@defun from-radians-2 a
33435Like @code{from-radians}, except that in Symbolic Mode a radians to 33436Like @code{from-radians}, except that in Symbolic mode a radians to
33436degrees conversion yields a formula like @samp{@var{a}*180/pi}. 33437degrees conversion yields a formula like @samp{@var{a}*180/pi}.
33437@end defun 33438@end defun
33438 33439
diff --git a/man/cc-mode.texi b/man/cc-mode.texi
index 2c0933a5335..89e49d67442 100644
--- a/man/cc-mode.texi
+++ b/man/cc-mode.texi
@@ -1420,7 +1420,7 @@ then as the comment prefix. It defaults to @samp{*
1420@code{c-block-comment-prefix} typically gets overriden by the default 1420@code{c-block-comment-prefix} typically gets overriden by the default
1421style @code{gnu}, which sets it to blank. You can see the line 1421style @code{gnu}, which sets it to blank. You can see the line
1422splitting effect described here by setting a different style, 1422splitting effect described here by setting a different style,
1423e.g. @code{k&r} @xref{Choosing a Style}}, which makes a comment 1423e.g. @code{k&r} @xref{Choosing a Style}.}, which makes a comment
1424 1424
1425@example 1425@example
1426/* Got O(n^2) here, which is a Bad Thing. */ 1426/* Got O(n^2) here, which is a Bad Thing. */
@@ -1643,7 +1643,7 @@ trailing backslashes.
1643@cindex font locking 1643@cindex font locking
1644@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1644@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1645 1645
1646@strong{Note:} The font locking in AWK mode is currently not integrated 1646@strong{Please note:} The font locking in AWK mode is currently not integrated
1647with the rest of @ccmode{}, so this section does not apply there. 1647with the rest of @ccmode{}, so this section does not apply there.
1648@xref{AWK Mode Font Locking}, instead. 1648@xref{AWK Mode Font Locking}, instead.
1649 1649
diff --git a/man/mark.texi b/man/mark.texi
index 4f1c8a6d4d9..c37bd7857e0 100644
--- a/man/mark.texi
+++ b/man/mark.texi
@@ -191,7 +191,9 @@ You can activate the new region by executing @kbd{C-x C-x}
191(@code{exchange-point-and-mark}). 191(@code{exchange-point-and-mark}).
192 192
193@item 193@item
194@kbd{C-s} when the mark is active does not alter the mark. 194Commands that normally set the mark before moving long distances (like
195@kbd{M-<} and @kbd{C-s}) do not alter the mark in Transient Mark mode
196when the mark is active.
195 197
196@item 198@item
197Some commands operate on the region if a region is active. For 199Some commands operate on the region if a region is active. For
@@ -384,9 +386,10 @@ the same buffer.
384 Many commands that can move long distances, such as @kbd{M-<} 386 Many commands that can move long distances, such as @kbd{M-<}
385(@code{beginning-of-buffer}), start by setting the mark and saving the 387(@code{beginning-of-buffer}), start by setting the mark and saving the
386old mark on the mark ring. This is to make it easier for you to move 388old mark on the mark ring. This is to make it easier for you to move
387back later. Searches set the mark if they move point. You can tell 389back later. Searches set the mark if they move point. However, in
388when a command sets the mark because it displays @samp{Mark set} in the 390Transient Mark mode, these commands do not set the mark when the mark
389echo area. 391is already active. You can tell when a command sets the mark because
392it displays @samp{Mark set} in the echo area.
390 393
391 If you want to move back to the same place over and over, the mark 394 If you want to move back to the same place over and over, the mark
392ring may not be convenient enough. If so, you can record the position 395ring may not be convenient enough. If so, you can record the position
diff --git a/man/trampver.texi b/man/trampver.texi
index 743b49388f7..45cbefb72ac 100644
--- a/man/trampver.texi
+++ b/man/trampver.texi
@@ -4,7 +4,7 @@
4@c In the Tramp CVS, the version number is auto-frobbed from 4@c In the Tramp CVS, the version number is auto-frobbed from
5@c configure.ac, so you should edit that file and run 5@c configure.ac, so you should edit that file and run
6@c "autoconf && ./configure" to change the version number. 6@c "autoconf && ./configure" to change the version number.
7@set trampver 2.0.45 7@set trampver 2.0.46
8 8
9@c Other flags from configuration 9@c Other flags from configuration
10@set prefix /usr/local 10@set prefix /usr/local
diff --git a/man/url.texi b/man/url.texi
index 5f36826d926..f5c15e2dff5 100644
--- a/man/url.texi
+++ b/man/url.texi
@@ -27,7 +27,7 @@ Copyright (C) 1993, 1994, 1995, 1996 William M. Perry
27Permission is granted to copy, distribute and/or modify this document 27Permission is granted to copy, distribute and/or modify this document
28under the terms of the GNU Free Documentation License, Version 1.1 or 28under the terms of the GNU Free Documentation License, Version 1.1 or
29any later version published by the Free Software Foundation; with the 29any later version published by the Free Software Foundation; with the
30Invariant Sections being 30Invariant Sections being
31``GNU GENERAL PUBLIC LICENSE''. A copy of the 31``GNU GENERAL PUBLIC LICENSE''. A copy of the
32license is included in the section entitled ``GNU Free Documentation 32license is included in the section entitled ``GNU Free Documentation
33License.'' 33License.''
@@ -74,9 +74,9 @@ License.''
74* General Facilities:: URLs can be cached, accessed via a gateway 74* General Facilities:: URLs can be cached, accessed via a gateway
75 and tracked in a history list. 75 and tracked in a history list.
76* Customization:: Variables you can alter. 76* Customization:: Variables you can alter.
77* Function Index:: 77* Function Index::
78* Variable Index:: 78* Variable Index::
79* Concept Index:: 79* Concept Index::
80@end menu 80@end menu
81 81
82@node Getting Started 82@node Getting Started
@@ -115,7 +115,7 @@ The meaning of
115the @var{path} component depends on the service. 115the @var{path} component depends on the service.
116 116
117@menu 117@menu
118* Configuration:: 118* Configuration::
119* Parsed URLs:: URLs are parsed into vector structures. 119* Parsed URLs:: URLs are parsed into vector structures.
120@end menu 120@end menu
121 121
@@ -204,7 +204,7 @@ Recreates a URL string from the parsed @var{url}.
204@defun url-retrieve-synchronously url 204@defun url-retrieve-synchronously url
205Retrieve @var{url} synchronously and return a buffer containing the 205Retrieve @var{url} synchronously and return a buffer containing the
206data. @var{url} is either a string or a parsed URL structure. Return 206data. @var{url} is either a string or a parsed URL structure. Return
207@var{nil} if there are no data associated with it (the case for dired, 207@code{nil} if there are no data associated with it (the case for dired,
208info, or mailto URLs that need no further processing). 208info, or mailto URLs that need no further processing).
209@end defun 209@end defun
210 210
@@ -214,7 +214,7 @@ Retrieve @var{url} asynchronously and call @var{callback} with args
214has been completely retrieved, with the current buffer containing the 214has been completely retrieved, with the current buffer containing the
215object and any MIME headers associated with it. @var{url} is either a 215object and any MIME headers associated with it. @var{url} is either a
216string or a parsed URL structure. Returns the buffer @var{url} will 216string or a parsed URL structure. Returns the buffer @var{url} will
217load into, or @var{nil} if the process has already completed. 217load into, or @code{nil} if the process has already completed.
218@end defun 218@end defun
219 219
220@node Supported URL Types 220@node Supported URL Types
@@ -222,7 +222,7 @@ load into, or @var{nil} if the process has already completed.
222 222
223@menu 223@menu
224* http/https:: Hypertext Transfer Protocol. 224* http/https:: Hypertext Transfer Protocol.
225* file/ftp:: Local files and FTP archives. 225* file/ftp:: Local files and FTP archives.
226* info:: Emacs `Info' pages. 226* info:: Emacs `Info' pages.
227* mailto:: Sending email. 227* mailto:: Sending email.
228* news/nntp/snews:: Usenet news. 228* news/nntp/snews:: Usenet news.
@@ -235,7 +235,7 @@ load into, or @var{nil} if the process has already completed.
235@c * netrek:: 235@c * netrek::
236@c * prospero:: 236@c * prospero::
237* cid:: Content-ID. 237* cid:: Content-ID.
238* about:: 238* about::
239* ldap:: Lightweight Directory Access Protocol 239* ldap:: Lightweight Directory Access Protocol
240* imap:: IMAP mailboxes. 240* imap:: IMAP mailboxes.
241* man:: Unix man pages. 241* man:: Unix man pages.
@@ -273,10 +273,10 @@ otherwise the user will be asked on each request.
273 273
274 274
275@menu 275@menu
276* Cookies:: 276* Cookies::
277* HTTP language/coding:: 277* HTTP language/coding::
278* HTTP URL Options:: 278* HTTP URL Options::
279* Dealing with HTTP documents:: 279* Dealing with HTTP documents::
280@end menu 280@end menu
281 281
282@node Cookies 282@node Cookies
@@ -330,7 +330,7 @@ preferred character set encodings, e.g.@: Latin-9 or Big5, and these
330can be weighted. In Emacs 21 this list is generated automatically 330can be weighted. In Emacs 21 this list is generated automatically
331from the list of defined coding systems which have associated MIME 331from the list of defined coding systems which have associated MIME
332types. These are sorted by coding priority. @xref{Recognize Coding, 332types. These are sorted by coding priority. @xref{Recognize Coding,
333, Recognizing Coding Systems, emacs, GNU Emacs Manual}. 333, Recognizing Coding Systems, emacs, The GNU Emacs Manual}.
334@end defopt 334@end defopt
335 335
336@defopt url-mime-language-string 336@defopt url-mime-language-string
@@ -384,9 +384,9 @@ Currently this is just the raw header contents.
384 384
385HTTP URLs are retrieved into a buffer containing the HTTP headers 385HTTP URLs are retrieved into a buffer containing the HTTP headers
386followed by the body. Since the headers are quasi-MIME, they may be 386followed by the body. Since the headers are quasi-MIME, they may be
387processed using the MIME library. @inforef{Top, The MIME library, 387processed using the MIME library. @xref{Top,, Emacs MIME,
388emacs-mime}. The URL package provides a function to do this in 388emacs-mime, The Emacs MIME Manual}. The URL package provides a
389general: 389function to do this in general:
390 390
391@defun url-decode-text-part handle &optional coding 391@defun url-decode-text-part handle &optional coding
392This function decodes charset-encoded text in the current buffer. In 392This function decodes charset-encoded text in the current buffer. In
@@ -414,8 +414,8 @@ file://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
414@end example 414@end example
415 415
416These schemes are defined in RFC 1808. 416These schemes are defined in RFC 1808.
417@samp{ftp:} and @samp{file:} are synonomous in this library. They 417@samp{ftp:} and @samp{file:} are synonymous in this library. They
418allow reading arbitary files from hosts. Either @samp{ange-ftp} 418allow reading arbitrary files from hosts. Either @samp{ange-ftp}
419(Emacs) or @samp{efs} (XEmacs) is used to retrieve them from remote 419(Emacs) or @samp{efs} (XEmacs) is used to retrieve them from remote
420hosts. Local files are accessed directly. 420hosts. Local files are accessed directly.
421 421
@@ -451,13 +451,13 @@ Info URLs are not officially defined. They invoke
451@cindex email 451@cindex email
452A mailto URL will send an email message to the address in the 452A mailto URL will send an email message to the address in the
453URL, for example @samp{mailto:foo@@bar.com} would compose a 453URL, for example @samp{mailto:foo@@bar.com} would compose a
454message to @samp{foo@@bar.com}. 454message to @samp{foo@@bar.com}.
455 455
456@defopt url-mail-command 456@defopt url-mail-command
457@vindex mail-user-agent 457@vindex mail-user-agent
458The function called whenever url needs to send mail. This should 458The function called whenever url needs to send mail. This should
459normally be left to default from @var{mail-user-agent}. @xref{Mail 459normally be left to default from @var{mail-user-agent}. @xref{Mail
460Methods, , Mail-Composition Methods, emacs, GNU Emacs Manual}. 460Methods, , Mail-Composition Methods, emacs, The GNU Emacs Manual}.
461@end defopt 461@end defopt
462 462
463An @samp{X-Url-From} header field containing the URL of the document 463An @samp{X-Url-From} header field containing the URL of the document
@@ -468,7 +468,7 @@ The form of a mailto URL is
468@example 468@example
469@samp{mailto:@var{mailbox}[?@var{header}=@var{contents}[&@var{header}=@var{contents}]]} 469@samp{mailto:@var{mailbox}[?@var{header}=@var{contents}[&@var{header}=@var{contents}]]}
470@end example 470@end example
471@noindent where an arbitary number of @var{header}s can be added. If the 471@noindent where an arbitrary number of @var{header}s can be added. If the
472@var{header} is @samp{body}, then @var{contents} is put in the body 472@var{header} is @samp{body}, then @var{contents} is put in the body
473otherwise a @var{header} header field is created with @var{contents} 473otherwise a @var{header} header field is created with @var{contents}
474as its contents. Note that the URL library does not consider any 474as its contents. Note that the URL library does not consider any
@@ -493,11 +493,11 @@ fields may be included in news URLs though they are properly only
493allowed for nntp an snews. 493allowed for nntp an snews.
494 494
495@table @samp 495@table @samp
496@item news:@var{newsgroup} 496@item news:@var{newsgroup}
497Retrieves a list of messages in @var{newsgroup}; 497Retrieves a list of messages in @var{newsgroup};
498@item news:@var{message-id} 498@item news:@var{message-id}
499Retrieves the message with the given @var{message-id}; 499Retrieves the message with the given @var{message-id};
500@item news:* 500@item news:*
501Retrieves a list of all available newsgroups; 501Retrieves a list of all available newsgroups;
502@item nntp://@var{host}:@var{port}/@var{newsgroup} 502@item nntp://@var{host}:@var{port}/@var{newsgroup}
503@itemx nntp://@var{host}:@var{port}/@var{message-id} 503@itemx nntp://@var{host}:@var{port}/@var{message-id}
@@ -510,7 +510,7 @@ Similar to the @samp{news} versions.
510@samp{snews} is the same as @samp{nntp} except that the default port 510@samp{snews} is the same as @samp{nntp} except that the default port
511is :563. 511is :563.
512@cindex SSL 512@cindex SSL
513(It is tunnelled through SSL.) 513(It is tunneled through SSL.)
514 514
515An @samp{nntp} URL is the same as a news URL, except that the URL may 515An @samp{nntp} URL is the same as a news URL, except that the URL may
516specify an article by its number. 516specify an article by its number.
@@ -550,9 +550,9 @@ Well-known ports are used if the URL does not specify a port.
550@cindex IRC 550@cindex IRC
551@cindex Internet Relay Chat 551@cindex Internet Relay Chat
552@cindex ZEN IRC 552@cindex ZEN IRC
553@c Fixme: reference (was http://www.w3.org/Addressing/draft-mirashi-url-irc-01.txt) 553@c Fixme: reference (was http://www.w3.org/Addressing/draft-mirashi-url-irc-01.txt)
554@dfn{Internet Relay Chat} (IRC) is handled by handing off the @sc{irc} 554@dfn{Internet Relay Chat} (IRC) is handled by handing off the @sc{irc}
555session to a function named in @code{url-irc-function}. 555session to a function named in @code{url-irc-function}.
556 556
557@defopt url-irc-function 557@defopt url-irc-function
558A function to actually open an IRC connection. 558A function to actually open an IRC connection.
@@ -582,7 +582,7 @@ including parameters. It defaults to
582@samp{text/plain;charset=US-ASCII}. The @samp{text/plain} can be 582@samp{text/plain;charset=US-ASCII}. The @samp{text/plain} can be
583omitted but the charset parameter supplied. If @samp{;base64} is 583omitted but the charset parameter supplied. If @samp{;base64} is
584present, the @var{data} are base64-encoded. 584present, the @var{data} are base64-encoded.
585 585
586@node nfs 586@node nfs
587@section nfs 587@section nfs
588@cindex NFS 588@cindex NFS
@@ -658,11 +658,11 @@ the Lisp @code{man} function.
658@chapter Defining New URLs 658@chapter Defining New URLs
659 659
660@menu 660@menu
661* Naming conventions:: 661* Naming conventions::
662* Required functions:: 662* Required functions::
663* Optional functions:: 663* Optional functions::
664* Asynchronous fetching:: 664* Asynchronous fetching::
665* Supporting file-name-handlers:: 665* Supporting file-name-handlers::
666@end menu 666@end menu
667 667
668@node Naming conventions 668@node Naming conventions
@@ -684,10 +684,10 @@ the Lisp @code{man} function.
684@chapter General Facilities 684@chapter General Facilities
685 685
686@menu 686@menu
687* Disk Caching:: 687* Disk Caching::
688* Proxies:: 688* Proxies::
689* Gateways in general:: 689* Gateways in general::
690* History:: 690* History::
691@end menu 691@end menu
692 692
693@node Disk Caching 693@node Disk Caching
@@ -761,7 +761,7 @@ more likely to conflict with other files.
761@end smallexample 761@end smallexample
762@end defun 762@end defun
763 763
764@c Fixme: never actually used currently? 764@c Fixme: never actually used currently?
765@c @defopt url-standalone-mode 765@c @defopt url-standalone-mode
766@c @cindex Relying on cache 766@c @cindex Relying on cache
767@c @cindex Cache only mode 767@c @cindex Cache only mode
@@ -783,7 +783,7 @@ more likely to conflict with other files.
783@node Proxies 783@node Proxies
784@section Proxies and Gatewaying 784@section Proxies and Gatewaying
785 785
786@c fixme: check/document url-ns stuff 786@c fixme: check/document url-ns stuff
787@cindex proxy servers 787@cindex proxy servers
788@cindex proxies 788@cindex proxies
789@cindex environment variables 789@cindex environment variables
@@ -815,7 +815,7 @@ NO_PROXY="*.aventail.com,home.com,.seanet.com"
815@noindent says to contact all machines in the @samp{aventail.com} and 815@noindent says to contact all machines in the @samp{aventail.com} and
816@samp{seanet.com} domains directly, as well as the machine named 816@samp{seanet.com} domains directly, as well as the machine named
817@samp{home.com}. If @code{NO_PROXY} isn't defined, @code{no_PROXY} 817@samp{home.com}. If @code{NO_PROXY} isn't defined, @code{no_PROXY}
818and @code{no_proxy} are also tried, in that order. 818and @code{no_proxy} are also tried, in that order.
819 819
820Proxies may also be specified directly in Lisp. 820Proxies may also be specified directly in Lisp.
821 821
@@ -940,7 +940,7 @@ This specifies the default server, it takes the form
940where @var{version} can be either 4 or 5. 940where @var{version} can be either 4 or 5.
941@end defopt 941@end defopt
942@defvar socks-password 942@defvar socks-password
943If this is @code{nil} then you will be asked for the passward, 943If this is @code{nil} then you will be asked for the password,
944otherwise it will be used as the password for authenticating you to 944otherwise it will be used as the password for authenticating you to
945the @sc{socks} server. 945the @sc{socks} server.
946@end defvar 946@end defvar
@@ -980,9 +980,9 @@ This the @samp{nslookup} program. It is @code{"nslookup"} by default.
980@end defopt 980@end defopt
981 981
982@menu 982@menu
983* Suppressing network connexions:: 983* Suppressing network connexions::
984@end menu 984@end menu
985@c * Broken hostname resolution:: 985@c * Broken hostname resolution::
986 986
987@node Suppressing network connexions 987@node Suppressing network connexions
988@subsection Suppressing Network Connexions 988@subsection Suppressing Network Connexions
@@ -1010,7 +1010,7 @@ opened by the URL library.
1010@c @cindex resolver, hostname 1010@c @cindex resolver, hostname
1011@c Some C libraries do not include the hostname resolver routines in 1011@c Some C libraries do not include the hostname resolver routines in
1012@c their static libraries. If Emacs was linked statically, and was not 1012@c their static libraries. If Emacs was linked statically, and was not
1013@c linked with the resolver libraries, it wil not be able to get to any 1013@c linked with the resolver libraries, it will not be able to get to any
1014@c machines off the local network. This is characterized by being able 1014@c machines off the local network. This is characterized by being able
1015@c to reach someplace with a raw ip number, but not its hostname 1015@c to reach someplace with a raw ip number, but not its hostname
1016@c (@url{http://129.79.254.191/} works, but 1016@c (@url{http://129.79.254.191/} works, but
@@ -1052,8 +1052,8 @@ The history `list' is actually a hash table,
1052strings. The times are in the format returned by @code{current-time}. 1052strings. The times are in the format returned by @code{current-time}.
1053 1053
1054@defun url-history-update-url url time 1054@defun url-history-update-url url time
1055This function updates the hsitory table with an entry for @var{url} 1055This function updates the history table with an entry for @var{url}
1056accessed at the gievn @var{time}. 1056accessed at the given @var{time}.
1057@end defun 1057@end defun
1058 1058
1059@defopt url-history-track 1059@defopt url-history-track
@@ -1144,7 +1144,7 @@ function taking a single argument (the prompt) and returning @code{t}
1144only if an affirmative answer is given. 1144only if an affirmative answer is given.
1145@end defopt 1145@end defopt
1146@defopt url-gateway-method 1146@defopt url-gateway-method
1147@c fixme: describe gatewaying 1147@c fixme: describe gatewaying
1148A symbol specifying the type of gateway support to use fro connexions 1148A symbol specifying the type of gateway support to use fro connexions
1149from the local machine. The supported methods are: 1149from the local machine. The supported methods are:
1150 1150
diff --git a/src/ChangeLog b/src/ChangeLog
index a2706547e77..9323304dc46 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,118 @@
12004-12-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
2
3 * keyboard.c (input_available_signal): Call SIGNAL_THREAD_CHECK
4 before touching input_available_clear_time, to avoid accessing it
5 from multiple threads.
6
72004-12-23 Jason Rumney <jasonr@gnu.org>
8
9 * image.c (__WIN32__) [HAVE_NTGUI]: Define for correct behaviour
10 of JPEG library.
11
122004-12-22 Richard M. Stallman <rms@gnu.org>
13
14 * emacs.c (main): If batch mode, set Vundo_outer_limit to nil.
15
16 * lisp.h (Vundo_outer_limit): Fix decl.
17
18 * undo.c (Vundo_outer_limit): Replaces undo_outer_limit.
19 Uses changed.
20 (syms_of_undo): Initialize appropriately.
21 (truncate_undo_list): If it's nil, there's no limit.
22
232004-12-22 Kenichi Handa <handa@m17n.org>
24
25 * xselect.c (Fx_get_cut_buffer_internal): Return a unibyte string.
26
272004-12-21 Richard M. Stallman <rms@gnu.org>
28
29 * eval.c (unwind_to_catch): Clear immediate_quit.
30
31 * xdisp.c (get_next_display_element): Display codes 8a0 and 8ad
32 specially as `\ ' and `\-'.
33
34 * keyboard.c (kbd_buffer_store_event_hold):
35 In the code for while-no-input, handle immediate_quit.
36
37 * alloc.c (Fgarbage_collect): Update call to truncate_undo_list.
38 Call that at the very start.
39 (undo_limit, undo_strong_limit, undo_outer_limit): Moved to undo.c.
40 (syms_of_alloc): Don't define undo-limit,
41 undo-strong-limit and undo-outer-limit here.
42
43 * undo.c (truncate_undo_list): Return void.
44 Take just one argument, the buffer.
45 Make it current, and inhibit recursive GC.
46 Access and update the undo list directly; return void.
47 Refer to the undo...limit variables directly.
48 Test undo_outer_limit only after counting the whole current command.
49 When it's exceeded, call the function in undo-outer-limit-function.
50 (undo_limit, undo_strong_limit, undo_outer_limit): From alloc.c.
51 (Vundo_outer_limit_function): New variable.
52 (syms_of_undo): Define undo-limit, undo-strong-limit
53 and undo-outer-limit here, and undo-outer-limit-function.
54 Doc fixes.
55
56 * lisp.h (truncate_undo_list): Update decl.
57
582004-12-21 Piet van Oostrum <piet@cs.uu.nl>
59
60 * fileio.c (Fread_file_name): Delete duplicates in
61 file-name-history when history_delete_duplicates is true.
62
632004-12-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
64
65 * macterm.c (mac_do_list_fonts): Fix memory leak
66
672004-12-20 Richard M. Stallman <rms@gnu.org>
68
69 * regex.c (re_match_2_internal) <symend, wordend>:
70 Fix calls to UPDATE_SYNTAX_TABLE_FORWARD.
71
722004-12-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
73
74 * macterm.c (endif, x_font_name_to_mac_font_name): Use
75 maccentraleurroman instead of maccentraleuropean
76 (mac_c_string_match, mac_do_list_fonts): Speed up font search by
77 quickly finding a specific font without needing regexps.
78
792004-12-15 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
80
81 * syssignal.h: Declare main_thread.
82 (SIGNAL_THREAD_CHECK): New macro.
83
84 * keyboard.c (input_available_signal): Move thread checking code
85 to macro SIGNAL_THREAD_CHECK and call that macro.
86 (interrupt_signal): Call SIGNAL_THREAD_CHECK.
87
88 * alloc.c (uninterrupt_malloc): Move main_thread to emacs.c.
89
90 * emacs.c: Define main_thread.
91 (main): Initialize main_thread.
92 (handle_USR1_signal, handle_USR2_signal, fatal_error_signal)
93 (memory_warning_signal): Call SIGNAL_THREAD_CHECK.
94
95 * floatfns.c (float_error): Call SIGNAL_THREAD_CHECK.
96
97 * dispnew.c (window_change_signal): Call SIGNAL_THREAD_CHECK.
98
99 * sysdep.c (select_alarm): Call SIGNAL_THREAD_CHECK.
100
101 * process.c (send_process_trap, sigchld_handler): Call
102 SIGNAL_THREAD_CHECK.
103
104 * data.c (arith_error): Call SIGNAL_THREAD_CHECK.
105
106 * atimer.c (alarm_signal_handler): Call SIGNAL_THREAD_CHECK.
107
108 * xterm.c (xg_scroll_callback): Update XG_LAST_SB_DATA before
109 returning when xg_ignore_gtk_scrollbar is true.
110
1112004-12-14 Kim F. Storm <storm@cua.dk>
112
113 * keyboard.c (read_char): Save and restore echo_string when
114 handling input method.
115
12004-12-13 Richard M. Stallman <rms@gnu.org> 1162004-12-13 Richard M. Stallman <rms@gnu.org>
2 117
3 * eval.c (syms_of_eval) <quit-flag>: Doc fix. 118 * eval.c (syms_of_eval) <quit-flag>: Doc fix.
@@ -143,6 +258,7 @@
143 * eval.c (Fcalled_interactively_p): Don't check INTERACTIVE. 258 * eval.c (Fcalled_interactively_p): Don't check INTERACTIVE.
144 (interactive_p): Skip Scalled_interactively_p frames 259 (interactive_p): Skip Scalled_interactively_p frames
145 like Sinteractive_p frames. 260 like Sinteractive_p frames.
261 (unwind_to_catch): Clear handling_signal.
146 262
147 * data.c (Fmake_variable_buffer_local): Doc fix. 263 * data.c (Fmake_variable_buffer_local): Doc fix.
148 (Fmake_local_variable): Doc fix. 264 (Fmake_local_variable): Doc fix.
diff --git a/src/alloc.c b/src/alloc.c
index 2a539920f22..9dd5e1abc05 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -99,7 +99,7 @@ extern __malloc_size_t __malloc_extra_blocks;
99 If Emacs sets malloc hooks (! SYSTEM_MALLOC) and the emacs_blocked_* 99 If Emacs sets malloc hooks (! SYSTEM_MALLOC) and the emacs_blocked_*
100 functions below are called from malloc, there is a chance that one 100 functions below are called from malloc, there is a chance that one
101 of these threads preempts the Emacs main thread and the hook variables 101 of these threads preempts the Emacs main thread and the hook variables
102 end up in a inconsistent state. So we have a mutex to prevent that (note 102 end up in an inconsistent state. So we have a mutex to prevent that (note
103 that the backend handles concurrent access to malloc within its own threads 103 that the backend handles concurrent access to malloc within its own threads
104 but Emacs code running in the main thread is not included in that control). 104 but Emacs code running in the main thread is not included in that control).
105 105
@@ -109,7 +109,6 @@ extern __malloc_size_t __malloc_extra_blocks;
109 To prevent that, we only call BLOCK/UNBLOCK from the main thread. */ 109 To prevent that, we only call BLOCK/UNBLOCK from the main thread. */
110 110
111static pthread_mutex_t alloc_mutex; 111static pthread_mutex_t alloc_mutex;
112pthread_t main_thread;
113 112
114#define BLOCK_INPUT_ALLOC \ 113#define BLOCK_INPUT_ALLOC \
115 do \ 114 do \
@@ -201,12 +200,6 @@ extern
201#endif /* VIRT_ADDR_VARIES */ 200#endif /* VIRT_ADDR_VARIES */
202int malloc_sbrk_unused; 201int malloc_sbrk_unused;
203 202
204/* Two limits controlling how much undo information to keep. */
205
206EMACS_INT undo_limit;
207EMACS_INT undo_strong_limit;
208EMACS_INT undo_outer_limit;
209
210/* Number of live and free conses etc. */ 203/* Number of live and free conses etc. */
211 204
212static int total_conses, total_markers, total_symbols, total_vector_size; 205static int total_conses, total_markers, total_symbols, total_vector_size;
@@ -1310,8 +1303,6 @@ uninterrupt_malloc ()
1310 pthread_mutexattr_init (&attr); 1303 pthread_mutexattr_init (&attr);
1311 pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE); 1304 pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
1312 pthread_mutex_init (&alloc_mutex, &attr); 1305 pthread_mutex_init (&alloc_mutex, &attr);
1313
1314 main_thread = pthread_self ();
1315#endif /* HAVE_GTK_AND_PTHREAD */ 1306#endif /* HAVE_GTK_AND_PTHREAD */
1316 1307
1317 if (__free_hook != emacs_blocked_free) 1308 if (__free_hook != emacs_blocked_free)
@@ -4604,13 +4595,48 @@ returns nil, because real GC can't be done. */)
4604 if (abort_on_gc) 4595 if (abort_on_gc)
4605 abort (); 4596 abort ();
4606 4597
4607 EMACS_GET_TIME (t1);
4608
4609 /* Can't GC if pure storage overflowed because we can't determine 4598 /* Can't GC if pure storage overflowed because we can't determine
4610 if something is a pure object or not. */ 4599 if something is a pure object or not. */
4611 if (pure_bytes_used_before_overflow) 4600 if (pure_bytes_used_before_overflow)
4612 return Qnil; 4601 return Qnil;
4613 4602
4603 /* Don't keep undo information around forever.
4604 Do this early on, so it is no problem if the user quits. */
4605 {
4606 register struct buffer *nextb = all_buffers;
4607
4608 while (nextb)
4609 {
4610 /* If a buffer's undo list is Qt, that means that undo is
4611 turned off in that buffer. Calling truncate_undo_list on
4612 Qt tends to return NULL, which effectively turns undo back on.
4613 So don't call truncate_undo_list if undo_list is Qt. */
4614 if (! EQ (nextb->undo_list, Qt))
4615 truncate_undo_list (nextb);
4616
4617 /* Shrink buffer gaps, but skip indirect and dead buffers. */
4618 if (nextb->base_buffer == 0 && !NILP (nextb->name))
4619 {
4620 /* If a buffer's gap size is more than 10% of the buffer
4621 size, or larger than 2000 bytes, then shrink it
4622 accordingly. Keep a minimum size of 20 bytes. */
4623 int size = min (2000, max (20, (nextb->text->z_byte / 10)));
4624
4625 if (nextb->text->gap_size > size)
4626 {
4627 struct buffer *save_current = current_buffer;
4628 current_buffer = nextb;
4629 make_gap (-(nextb->text->gap_size - size));
4630 current_buffer = save_current;
4631 }
4632 }
4633
4634 nextb = nextb->next;
4635 }
4636 }
4637
4638 EMACS_GET_TIME (t1);
4639
4614 /* In case user calls debug_print during GC, 4640 /* In case user calls debug_print during GC,
4615 don't let that cause a recursive GC. */ 4641 don't let that cause a recursive GC. */
4616 consing_since_gc = 0; 4642 consing_since_gc = 0;
@@ -4649,42 +4675,6 @@ returns nil, because real GC can't be done. */)
4649 4675
4650 shrink_regexp_cache (); 4676 shrink_regexp_cache ();
4651 4677
4652 /* Don't keep undo information around forever. */
4653 {
4654 register struct buffer *nextb = all_buffers;
4655
4656 while (nextb)
4657 {
4658 /* If a buffer's undo list is Qt, that means that undo is
4659 turned off in that buffer. Calling truncate_undo_list on
4660 Qt tends to return NULL, which effectively turns undo back on.
4661 So don't call truncate_undo_list if undo_list is Qt. */
4662 if (! EQ (nextb->undo_list, Qt))
4663 nextb->undo_list
4664 = truncate_undo_list (nextb->undo_list, undo_limit,
4665 undo_strong_limit, undo_outer_limit);
4666
4667 /* Shrink buffer gaps, but skip indirect and dead buffers. */
4668 if (nextb->base_buffer == 0 && !NILP (nextb->name))
4669 {
4670 /* If a buffer's gap size is more than 10% of the buffer
4671 size, or larger than 2000 bytes, then shrink it
4672 accordingly. Keep a minimum size of 20 bytes. */
4673 int size = min (2000, max (20, (nextb->text->z_byte / 10)));
4674
4675 if (nextb->text->gap_size > size)
4676 {
4677 struct buffer *save_current = current_buffer;
4678 current_buffer = nextb;
4679 make_gap (-(nextb->text->gap_size - size));
4680 current_buffer = save_current;
4681 }
4682 }
4683
4684 nextb = nextb->next;
4685 }
4686 }
4687
4688 gc_in_progress = 1; 4678 gc_in_progress = 1;
4689 4679
4690 /* clear_marks (); */ 4680 /* clear_marks (); */
@@ -5959,29 +5949,6 @@ prevent garbage collection during a part of the program. */);
5959 doc: /* Non-nil means loading Lisp code in order to dump an executable. 5949 doc: /* Non-nil means loading Lisp code in order to dump an executable.
5960This means that certain objects should be allocated in shared (pure) space. */); 5950This means that certain objects should be allocated in shared (pure) space. */);
5961 5951
5962 DEFVAR_INT ("undo-limit", &undo_limit,
5963 doc: /* Keep no more undo information once it exceeds this size.
5964This limit is applied when garbage collection happens.
5965The size is counted as the number of bytes occupied,
5966which includes both saved text and other data. */);
5967 undo_limit = 20000;
5968
5969 DEFVAR_INT ("undo-strong-limit", &undo_strong_limit,
5970 doc: /* Don't keep more than this much size of undo information.
5971A previous command which pushes the undo list past this size
5972is entirely forgotten when GC happens.
5973The size is counted as the number of bytes occupied,
5974which includes both saved text and other data. */);
5975 undo_strong_limit = 30000;
5976
5977 DEFVAR_INT ("undo-outer-limit", &undo_outer_limit,
5978 doc: /* Don't keep more than this much size of undo information.
5979If the current command has produced more than this much undo information,
5980GC discards it. This is a last-ditch limit to prevent memory overflow.
5981The size is counted as the number of bytes occupied,
5982which includes both saved text and other data. */);
5983 undo_outer_limit = 300000;
5984
5985 DEFVAR_BOOL ("garbage-collection-messages", &garbage_collection_messages, 5952 DEFVAR_BOOL ("garbage-collection-messages", &garbage_collection_messages,
5986 doc: /* Non-nil means display messages at start and end of garbage collection. */); 5953 doc: /* Non-nil means display messages at start and end of garbage collection. */);
5987 garbage_collection_messages = 0; 5954 garbage_collection_messages = 0;
diff --git a/src/atimer.c b/src/atimer.c
index 7410cad0244..ff5b8faaf36 100644
--- a/src/atimer.c
+++ b/src/atimer.c
@@ -364,6 +364,8 @@ alarm_signal_handler (signo)
364{ 364{
365 EMACS_TIME now; 365 EMACS_TIME now;
366 366
367 SIGNAL_THREAD_CHECK (signo);
368
367 EMACS_GET_TIME (now); 369 EMACS_GET_TIME (now);
368 pending_atimers = 0; 370 pending_atimers = 0;
369 371
diff --git a/src/data.c b/src/data.c
index 0439d5763bc..8fbc04489b9 100644
--- a/src/data.c
+++ b/src/data.c
@@ -3262,6 +3262,7 @@ arith_error (signo)
3262 sigsetmask (SIGEMPTYMASK); 3262 sigsetmask (SIGEMPTYMASK);
3263#endif /* not BSD4_1 */ 3263#endif /* not BSD4_1 */
3264 3264
3265 SIGNAL_THREAD_CHECK (signo);
3265 Fsignal (Qarith_error, Qnil); 3266 Fsignal (Qarith_error, Qnil);
3266} 3267}
3267 3268
diff --git a/src/dispnew.c b/src/dispnew.c
index 814a3095ddf..f04e806b368 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -5980,6 +5980,9 @@ window_change_signal (signalnum) /* If we don't have an argument, */
5980#endif 5980#endif
5981 int old_errno = errno; 5981 int old_errno = errno;
5982 5982
5983 signal (SIGWINCH, window_change_signal);
5984 SIGNAL_THREAD_CHECK (signalnum);
5985
5983 get_frame_size (&width, &height); 5986 get_frame_size (&width, &height);
5984 5987
5985 /* The frame size change obviously applies to a termcap-controlled 5988 /* The frame size change obviously applies to a termcap-controlled
@@ -6002,7 +6005,6 @@ window_change_signal (signalnum) /* If we don't have an argument, */
6002 } 6005 }
6003 } 6006 }
6004 6007
6005 signal (SIGWINCH, window_change_signal);
6006 errno = old_errno; 6008 errno = old_errno;
6007} 6009}
6008#endif /* SIGWINCH */ 6010#endif /* SIGWINCH */
diff --git a/src/emacs.c b/src/emacs.c
index 02031fe9072..d84cc29fcfa 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -342,6 +342,14 @@ int fatal_error_in_progress;
342 342
343void (*fatal_error_signal_hook) P_ ((void)); 343void (*fatal_error_signal_hook) P_ ((void));
344 344
345#ifdef HAVE_GTK_AND_PTHREAD
346/* When compiled with GTK and running under Gnome, multiple threads meay be
347 created. Keep track of our main thread to make sure signals are delivered
348 to it (see syssignal.h). */
349
350pthread_t main_thread;
351#endif
352
345 353
346#ifdef SIGUSR1 354#ifdef SIGUSR1
347SIGTYPE 355SIGTYPE
@@ -350,6 +358,7 @@ handle_USR1_signal (sig)
350{ 358{
351 struct input_event buf; 359 struct input_event buf;
352 360
361 SIGNAL_THREAD_CHECK (sig);
353 bzero (&buf, sizeof buf); 362 bzero (&buf, sizeof buf);
354 buf.kind = USER_SIGNAL_EVENT; 363 buf.kind = USER_SIGNAL_EVENT;
355 buf.frame_or_window = selected_frame; 364 buf.frame_or_window = selected_frame;
@@ -365,6 +374,7 @@ handle_USR2_signal (sig)
365{ 374{
366 struct input_event buf; 375 struct input_event buf;
367 376
377 SIGNAL_THREAD_CHECK (sig);
368 bzero (&buf, sizeof buf); 378 bzero (&buf, sizeof buf);
369 buf.kind = USER_SIGNAL_EVENT; 379 buf.kind = USER_SIGNAL_EVENT;
370 buf.code = 1; 380 buf.code = 1;
@@ -379,6 +389,7 @@ SIGTYPE
379fatal_error_signal (sig) 389fatal_error_signal (sig)
380 int sig; 390 int sig;
381{ 391{
392 SIGNAL_THREAD_CHECK (sig);
382 fatal_error_code = sig; 393 fatal_error_code = sig;
383 signal (sig, SIG_DFL); 394 signal (sig, SIG_DFL);
384 395
@@ -418,6 +429,7 @@ memory_warning_signal (sig)
418 int sig; 429 int sig;
419{ 430{
420 signal (sig, memory_warning_signal); 431 signal (sig, memory_warning_signal);
432 SIGNAL_THREAD_CHECK (sig);
421 433
422 malloc_warning ("Operating system warns that virtual memory is running low.\n"); 434 malloc_warning ("Operating system warns that virtual memory is running low.\n");
423 435
@@ -1029,6 +1041,10 @@ main (argc, argv
1029# endif /* not SYNC_INPUT */ 1041# endif /* not SYNC_INPUT */
1030#endif /* not SYSTEM_MALLOC */ 1042#endif /* not SYSTEM_MALLOC */
1031 1043
1044#ifdef HAVE_GTK_AND_PTHREAD
1045 main_thread = pthread_self ();
1046#endif /* HAVE_GTK_AND_PTHREAD */
1047
1032#if defined (MSDOS) || defined (WINDOWSNT) 1048#if defined (MSDOS) || defined (WINDOWSNT)
1033 /* We do all file input/output as binary files. When we need to translate 1049 /* We do all file input/output as binary files. When we need to translate
1034 newlines, we do that manually. */ 1050 newlines, we do that manually. */
@@ -1117,7 +1133,10 @@ main (argc, argv
1117 /* Handle the -batch switch, which means don't do interactive display. */ 1133 /* Handle the -batch switch, which means don't do interactive display. */
1118 noninteractive = 0; 1134 noninteractive = 0;
1119 if (argmatch (argv, argc, "-batch", "--batch", 5, NULL, &skip_args)) 1135 if (argmatch (argv, argc, "-batch", "--batch", 5, NULL, &skip_args))
1120 noninteractive = 1; 1136 {
1137 noninteractive = 1;
1138 Vundo_outer_limit = Qnil;
1139 }
1121 if (argmatch (argv, argc, "-script", "--script", 3, &junk, &skip_args)) 1140 if (argmatch (argv, argc, "-script", "--script", 3, &junk, &skip_args))
1122 { 1141 {
1123 noninteractive = 1; /* Set batch mode. */ 1142 noninteractive = 1; /* Set batch mode. */
diff --git a/src/eval.c b/src/eval.c
index 879f916aa46..df528e3da80 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1178,6 +1178,7 @@ unwind_to_catch (catch, value)
1178 set_poll_suppress_count (catch->poll_suppress_count); 1178 set_poll_suppress_count (catch->poll_suppress_count);
1179 interrupt_input_blocked = catch->interrupt_input_blocked; 1179 interrupt_input_blocked = catch->interrupt_input_blocked;
1180 handling_signal = 0; 1180 handling_signal = 0;
1181 immediate_quit = 0;
1181 1182
1182 do 1183 do
1183 { 1184 {
diff --git a/src/fileio.c b/src/fileio.c
index 6f52f792a5b..3b43a06e7ea 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -228,6 +228,8 @@ extern int minibuf_level;
228 228
229extern int minibuffer_auto_raise; 229extern int minibuffer_auto_raise;
230 230
231extern int history_delete_duplicates;
232
231/* These variables describe handlers that have "already" had a chance 233/* These variables describe handlers that have "already" had a chance
232 to handle the current operation. 234 to handle the current operation.
233 235
@@ -6299,7 +6301,13 @@ and `read-file-name-function'. */)
6299 if (replace_in_history) 6301 if (replace_in_history)
6300 /* Replace what Fcompleting_read added to the history 6302 /* Replace what Fcompleting_read added to the history
6301 with what we will actually return. */ 6303 with what we will actually return. */
6302 XSETCAR (Fsymbol_value (Qfile_name_history), double_dollars (val)); 6304 {
6305 Lisp_Object val1 = double_dollars (val);
6306 tem = Fsymbol_value (Qfile_name_history);
6307 if (history_delete_duplicates)
6308 XSETCDR (tem, Fdelete (val1, XCDR(tem)));
6309 XSETCAR (tem, val1);
6310 }
6303 else if (add_to_history) 6311 else if (add_to_history)
6304 { 6312 {
6305 /* Add the value to the history--but not if it matches 6313 /* Add the value to the history--but not if it matches
@@ -6307,8 +6315,10 @@ and `read-file-name-function'. */)
6307 Lisp_Object val1 = double_dollars (val); 6315 Lisp_Object val1 = double_dollars (val);
6308 tem = Fsymbol_value (Qfile_name_history); 6316 tem = Fsymbol_value (Qfile_name_history);
6309 if (! CONSP (tem) || NILP (Fequal (XCAR (tem), val1))) 6317 if (! CONSP (tem) || NILP (Fequal (XCAR (tem), val1)))
6310 Fset (Qfile_name_history, 6318 {
6311 Fcons (val1, tem)); 6319 if (history_delete_duplicates) tem = Fdelete (val1, tem);
6320 Fset (Qfile_name_history, Fcons (val1, tem));
6321 }
6312 } 6322 }
6313 6323
6314 return val; 6324 return val;
diff --git a/src/floatfns.c b/src/floatfns.c
index 61879eabe39..8cd08106ef2 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -981,6 +981,7 @@ float_error (signo)
981 signal (SIGILL, float_error); 981 signal (SIGILL, float_error);
982#endif /* BSD_SYSTEM */ 982#endif /* BSD_SYSTEM */
983 983
984 SIGNAL_THREAD_CHECK (signo);
984 in_float = 0; 985 in_float = 0;
985 986
986 Fsignal (Qarith_error, Fcons (float_error_arg, Qnil)); 987 Fsignal (Qarith_error, Fcons (float_error_arg, Qnil));
diff --git a/src/image.c b/src/image.c
index 18ffc2db3a4..6a86708a9d7 100644
--- a/src/image.c
+++ b/src/image.c
@@ -6269,6 +6269,12 @@ jpeg_image_p (object)
6269#undef HAVE_STDLIB_H 6269#undef HAVE_STDLIB_H
6270#endif /* HAVE_STLIB_H */ 6270#endif /* HAVE_STLIB_H */
6271 6271
6272#if defined (HAVE_NTGUI) && !defined (__WIN32__)
6273/* jpeglib.h will define boolean differently depending on __WIN32__,
6274 so make sure it is defined. */
6275#define __WIN32__ 1
6276#endif
6277
6272#include <jpeglib.h> 6278#include <jpeglib.h>
6273#include <jerror.h> 6279#include <jerror.h>
6274#include <setjmp.h> 6280#include <setjmp.h>
diff --git a/src/keyboard.c b/src/keyboard.c
index 6ed15f232d1..29e65d3acda 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -3043,6 +3043,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu)
3043 /* Save the echo status. */ 3043 /* Save the echo status. */
3044 int saved_immediate_echo = current_kboard->immediate_echo; 3044 int saved_immediate_echo = current_kboard->immediate_echo;
3045 struct kboard *saved_ok_to_echo = ok_to_echo_at_next_pause; 3045 struct kboard *saved_ok_to_echo = ok_to_echo_at_next_pause;
3046 Lisp_Object saved_echo_string = current_kboard->echo_string;
3046 int saved_echo_after_prompt = current_kboard->echo_after_prompt; 3047 int saved_echo_after_prompt = current_kboard->echo_after_prompt;
3047 3048
3048#if 0 3049#if 0
@@ -3097,6 +3098,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu)
3097 3098
3098 cancel_echoing (); 3099 cancel_echoing ();
3099 ok_to_echo_at_next_pause = saved_ok_to_echo; 3100 ok_to_echo_at_next_pause = saved_ok_to_echo;
3101 current_kboard->echo_string = saved_echo_string;
3100 current_kboard->echo_after_prompt = saved_echo_after_prompt; 3102 current_kboard->echo_after_prompt = saved_echo_after_prompt;
3101 if (saved_immediate_echo) 3103 if (saved_immediate_echo)
3102 echo_now (); 3104 echo_now ();
@@ -3579,6 +3581,9 @@ event_to_kboard (event)
3579} 3581}
3580#endif 3582#endif
3581 3583
3584
3585Lisp_Object Vthrow_on_input;
3586
3582/* Store an event obtained at interrupt level into kbd_buffer, fifo */ 3587/* Store an event obtained at interrupt level into kbd_buffer, fifo */
3583 3588
3584void 3589void
@@ -3704,6 +3709,24 @@ kbd_buffer_store_event_hold (event, hold_quit)
3704 *kbd_store_ptr = *event; 3709 *kbd_store_ptr = *event;
3705 ++kbd_store_ptr; 3710 ++kbd_store_ptr;
3706 } 3711 }
3712
3713 /* If we're inside while-no-input, and this event qualifies
3714 as input, set quit-flag to cause an interrupt. */
3715 if (!NILP (Vthrow_on_input)
3716 && event->kind != FOCUS_IN_EVENT
3717 && event->kind != HELP_EVENT
3718 && event->kind != DEICONIFY_EVENT)
3719 {
3720 Vquit_flag = Vthrow_on_input;
3721 /* If we're inside a function that wants immediate quits,
3722 do it now. */
3723 if (immediate_quit && NILP (Vinhibit_quit))
3724 {
3725 immediate_quit = 0;
3726 sigfree ();
3727 QUIT;
3728 }
3729 }
3707} 3730}
3708 3731
3709 3732
@@ -6817,30 +6840,16 @@ input_available_signal (signo)
6817 sigisheld (SIGIO); 6840 sigisheld (SIGIO);
6818#endif 6841#endif
6819 6842
6820 if (input_available_clear_time)
6821 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6822
6823#ifdef SYNC_INPUT 6843#ifdef SYNC_INPUT
6824 interrupt_input_pending = 1; 6844 interrupt_input_pending = 1;
6825#else 6845#else
6846 SIGNAL_THREAD_CHECK (signo);
6847#endif
6848
6849 if (input_available_clear_time)
6850 EMACS_SET_SECS_USECS (*input_available_clear_time, 0, 0);
6826 6851
6827# if !defined (SYSTEM_MALLOC) && defined (HAVE_GTK_AND_PTHREAD) 6852#ifndef SYNC_INPUT
6828 extern pthread_t main_thread;
6829 if (pthread_self () != main_thread)
6830 {
6831 /* POSIX says any thread can receive the signal. On GNU/Linux that is
6832 not true, but for other systems (FreeBSD at least) it is. So direct
6833 the signal to the correct thread and block it from this thread. */
6834 sigset_t new_mask;
6835
6836 sigemptyset (&new_mask);
6837 sigaddset (&new_mask, SIGIO);
6838 pthread_sigmask (SIG_BLOCK, &new_mask, 0);
6839 pthread_kill (main_thread, SIGIO);
6840 return;
6841 }
6842# endif /* HAVE_GTK_AND_PTHREAD */
6843
6844 handle_async_input (); 6853 handle_async_input ();
6845#endif 6854#endif
6846 6855
@@ -10255,6 +10264,7 @@ interrupt_signal (signalnum) /* If we don't have an argument, */
10255 } 10264 }
10256#endif /* USG */ 10265#endif /* USG */
10257 10266
10267 SIGNAL_THREAD_CHECK (signalnum);
10258 cancel_echoing (); 10268 cancel_echoing ();
10259 10269
10260 if (!NILP (Vquit_flag) 10270 if (!NILP (Vquit_flag)
@@ -11375,6 +11385,12 @@ Used during Emacs' startup. */);
11375 doc: /* *How long to display an echo-area message when the minibuffer is active. 11385 doc: /* *How long to display an echo-area message when the minibuffer is active.
11376If the value is not a number, such messages don't time out. */); 11386If the value is not a number, such messages don't time out. */);
11377 Vminibuffer_message_timeout = make_number (2); 11387 Vminibuffer_message_timeout = make_number (2);
11388
11389 DEFVAR_LISP ("throw-on-input", &Vthrow_on_input,
11390 doc: /* If non-nil, any keyboard input throws to this symbol.
11391The value of that variable is passed to `quit-flag' and later causes a
11392peculiar kind of quitting. */);
11393 Vthrow_on_input = Qnil;
11378} 11394}
11379 11395
11380void 11396void
diff --git a/src/lisp.h b/src/lisp.h
index 3f49ac546cc..a6ea85b00c1 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -3090,7 +3090,7 @@ extern void syms_of_macros P_ ((void));
3090/* defined in undo.c */ 3090/* defined in undo.c */
3091extern Lisp_Object Qinhibit_read_only; 3091extern Lisp_Object Qinhibit_read_only;
3092EXFUN (Fundo_boundary, 0); 3092EXFUN (Fundo_boundary, 0);
3093extern Lisp_Object truncate_undo_list P_ ((Lisp_Object, int, int, int)); 3093extern void truncate_undo_list P_ ((struct buffer *));
3094extern void record_marker_adjustment P_ ((Lisp_Object, int)); 3094extern void record_marker_adjustment P_ ((Lisp_Object, int));
3095extern void record_insert P_ ((int, int)); 3095extern void record_insert P_ ((int, int));
3096extern void record_delete P_ ((int, Lisp_Object)); 3096extern void record_delete P_ ((int, Lisp_Object));
@@ -3099,6 +3099,7 @@ extern void record_change P_ ((int, int));
3099extern void record_property_change P_ ((int, int, Lisp_Object, Lisp_Object, 3099extern void record_property_change P_ ((int, int, Lisp_Object, Lisp_Object,
3100 Lisp_Object)); 3100 Lisp_Object));
3101extern void syms_of_undo P_ ((void)); 3101extern void syms_of_undo P_ ((void));
3102extern Lisp_Object Vundo_outer_limit;
3102 3103
3103/* defined in textprop.c */ 3104/* defined in textprop.c */
3104extern Lisp_Object Qfont, Qmouse_face; 3105extern Lisp_Object Qfont, Qmouse_face;
diff --git a/src/macterm.c b/src/macterm.c
index ba19e0fbc31..4e9981da8b8 100644
--- a/src/macterm.c
+++ b/src/macterm.c
@@ -5997,7 +5997,7 @@ mac_to_x_fontname (name, size, style, scriptcode, encoding_base)
5997 strcpy(cs, "mac-cyrillic"); 5997 strcpy(cs, "mac-cyrillic");
5998 break; 5998 break;
5999 case kTextEncodingMacCentralEurRoman: 5999 case kTextEncodingMacCentralEurRoman:
6000 strcpy(cs, "mac-centraleuropean"); 6000 strcpy(cs, "mac-centraleurroman");
6001 break; 6001 break;
6002 case kTextEncodingMacSymbol: 6002 case kTextEncodingMacSymbol:
6003 case kTextEncodingMacDingbats: 6003 case kTextEncodingMacDingbats:
@@ -6055,7 +6055,7 @@ x_font_name_to_mac_font_name (char *xf, char *mf)
6055 coding_system = Qeuc_kr; 6055 coding_system = Qeuc_kr;
6056 else if (strcmp (cs, "mac-roman") == 0 6056 else if (strcmp (cs, "mac-roman") == 0
6057 || strcmp (cs, "mac-cyrillic") == 0 6057 || strcmp (cs, "mac-cyrillic") == 0
6058 || strcmp (cs, "mac-centraleuropean") == 0 6058 || strcmp (cs, "mac-centraleurroman") == 0
6059 || strcmp (cs, "adobe-fontspecific") == 0) 6059 || strcmp (cs, "adobe-fontspecific") == 0)
6060 strcpy (mf, family); 6060 strcpy (mf, family);
6061 else 6061 else
@@ -6300,6 +6300,28 @@ static int xlfd_scalable_fields[] =
6300 }; 6300 };
6301 6301
6302static Lisp_Object 6302static Lisp_Object
6303mac_c_string_match (regexp, string, nonspecial, exact)
6304 Lisp_Object regexp;
6305 const char *string, *nonspecial;
6306 int exact;
6307{
6308 if (exact)
6309 {
6310 if (strcmp (string, nonspecial) == 0)
6311 return build_string (string);
6312 }
6313 else if (strstr (string, nonspecial))
6314 {
6315 Lisp_Object str = build_string (string);
6316
6317 if (fast_string_match (regexp, str) >= 0)
6318 return str;
6319 }
6320
6321 return Qnil;
6322}
6323
6324static Lisp_Object
6303mac_do_list_fonts (pattern, maxnames) 6325mac_do_list_fonts (pattern, maxnames)
6304 char *pattern; 6326 char *pattern;
6305 int maxnames; 6327 int maxnames;
@@ -6310,6 +6332,8 @@ mac_do_list_fonts (pattern, maxnames)
6310 char scaled[256]; 6332 char scaled[256];
6311 char *ptr; 6333 char *ptr;
6312 int scl_val[XLFD_SCL_LAST], *field, *val; 6334 int scl_val[XLFD_SCL_LAST], *field, *val;
6335 char *longest_start, *cur_start, *nonspecial;
6336 int longest_len, cur_len, exact;
6313 6337
6314 for (i = 0; i < XLFD_SCL_LAST; i++) 6338 for (i = 0; i < XLFD_SCL_LAST; i++)
6315 scl_val[i] = -1; 6339 scl_val[i] = -1;
@@ -6367,34 +6391,66 @@ mac_do_list_fonts (pattern, maxnames)
6367 ptr = regex; 6391 ptr = regex;
6368 *ptr++ = '^'; 6392 *ptr++ = '^';
6369 6393
6370 /* Turn pattern into a regexp and do a regexp match. */ 6394 longest_start = cur_start = ptr;
6395 longest_len = cur_len = 0;
6396 exact = 1;
6397
6398 /* Turn pattern into a regexp and do a regexp match. Also find the
6399 longest substring containing no special characters. */
6371 for (; *pattern; pattern++) 6400 for (; *pattern; pattern++)
6372 { 6401 {
6373 if (*pattern == '?') 6402 if (*pattern == '?' || *pattern == '*')
6374 *ptr++ = '.'; 6403 {
6375 else if (*pattern == '*') 6404 if (cur_len > longest_len)
6376 { 6405 {
6377 *ptr++ = '.'; 6406 longest_start = cur_start;
6378 *ptr++ = '*'; 6407 longest_len = cur_len;
6379 } 6408 }
6409 cur_len = 0;
6410 exact = 0;
6411
6412 if (*pattern == '?')
6413 *ptr++ = '.';
6414 else /* if (*pattern == '*') */
6415 {
6416 *ptr++ = '.';
6417 *ptr++ = '*';
6418 }
6419 }
6380 else 6420 else
6381 *ptr++ = tolower (*pattern); 6421 {
6422 if (cur_len == 0)
6423 cur_start = ptr;
6424 cur_len++;
6425
6426 *ptr++ = tolower (*pattern);
6427 }
6382 } 6428 }
6429
6430 if (cur_len > longest_len)
6431 {
6432 longest_start = cur_start;
6433 longest_len = cur_len;
6434 }
6435
6383 *ptr = '$'; 6436 *ptr = '$';
6384 *(ptr + 1) = '\0'; 6437 *(ptr + 1) = '\0';
6385 6438
6439 nonspecial = xmalloc (longest_len + 1);
6440 strncpy (nonspecial, longest_start, longest_len);
6441 nonspecial[longest_len] = '\0';
6442
6386 pattern_regex = build_string (regex); 6443 pattern_regex = build_string (regex);
6387 6444
6388 for (i = 0; i < font_name_count; i++) 6445 for (i = 0; i < font_name_count; i++)
6389 { 6446 {
6390 fontname = build_string (font_name_table[i]); 6447 fontname = mac_c_string_match (pattern_regex, font_name_table[i],
6391 if (fast_string_match (pattern_regex, fontname) >= 0) 6448 nonspecial, exact);
6449 if (!NILP (fontname))
6392 { 6450 {
6393 font_list = Fcons (fontname, font_list); 6451 font_list = Fcons (fontname, font_list);
6394 6452 if (exact || maxnames > 0 && ++n_fonts >= maxnames)
6395 n_fonts++; 6453 break;
6396 if (maxnames > 0 && n_fonts >= maxnames)
6397 break;
6398 } 6454 }
6399 else if (scl_val[XLFD_SCL_PIXEL_SIZE] > 0 6455 else if (scl_val[XLFD_SCL_PIXEL_SIZE] > 0
6400 && (ptr = strstr (font_name_table[i], "-0-0-75-75-m-0-"))) 6456 && (ptr = strstr (font_name_table[i], "-0-0-75-75-m-0-")))
@@ -6408,17 +6464,19 @@ mac_do_list_fonts (pattern, maxnames)
6408 scl_val[XLFD_SCL_POINT_SIZE], 6464 scl_val[XLFD_SCL_POINT_SIZE],
6409 scl_val[XLFD_SCL_AVGWIDTH], 6465 scl_val[XLFD_SCL_AVGWIDTH],
6410 ptr + sizeof ("-0-0-75-75-m-0-") - 1); 6466 ptr + sizeof ("-0-0-75-75-m-0-") - 1);
6411 fontname = build_string (scaled); 6467 fontname = mac_c_string_match (pattern_regex, scaled,
6412 if (fast_string_match (pattern_regex, fontname) >= 0) 6468 nonspecial, exact);
6469 if (!NILP (fontname))
6413 { 6470 {
6414 font_list = Fcons (fontname, font_list); 6471 font_list = Fcons (fontname, font_list);
6415 6472 if (exact || maxnames > 0 && ++n_fonts >= maxnames)
6416 n_fonts++;
6417 if (maxnames > 0 && n_fonts >= maxnames)
6418 break; 6473 break;
6419 } 6474 }
6420 } 6475 }
6421 } 6476 }
6477
6478 xfree (nonspecial);
6479
6422 return font_list; 6480 return font_list;
6423} 6481}
6424 6482
diff --git a/src/process.c b/src/process.c
index 699c99cdcb8..6da7d73594d 100644
--- a/src/process.c
+++ b/src/process.c
@@ -5109,6 +5109,7 @@ Lisp_Object process_sent_to;
5109SIGTYPE 5109SIGTYPE
5110send_process_trap () 5110send_process_trap ()
5111{ 5111{
5112 SIGNAL_THREAD_CHECK (SIGPIPE);
5112#ifdef BSD4_1 5113#ifdef BSD4_1
5113 sigrelse (SIGPIPE); 5114 sigrelse (SIGPIPE);
5114 sigrelse (SIGALRM); 5115 sigrelse (SIGALRM);
@@ -6144,6 +6145,8 @@ sigchld_handler (signo)
6144 register struct Lisp_Process *p; 6145 register struct Lisp_Process *p;
6145 extern EMACS_TIME *input_available_clear_time; 6146 extern EMACS_TIME *input_available_clear_time;
6146 6147
6148 SIGNAL_THREAD_CHECK (signo);
6149
6147#ifdef BSD4_1 6150#ifdef BSD4_1
6148 extern int sigheld; 6151 extern int sigheld;
6149 sigheld |= sigbit (SIGCHLD); 6152 sigheld |= sigbit (SIGCHLD);
diff --git a/src/regex.c b/src/regex.c
index f21955a3c0e..e43fc2dc0aa 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -6096,7 +6096,7 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
6096 PREFETCH_NOLIMIT (); 6096 PREFETCH_NOLIMIT ();
6097 c2 = RE_STRING_CHAR (d, dend - d); 6097 c2 = RE_STRING_CHAR (d, dend - d);
6098#ifdef emacs 6098#ifdef emacs
6099 UPDATE_SYNTAX_TABLE_FORWARD (charpos); 6099 UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1);
6100#endif 6100#endif
6101 s2 = SYNTAX (c2); 6101 s2 = SYNTAX (c2);
6102 6102
diff --git a/src/sysdep.c b/src/sysdep.c
index 6284774d092..1884c0ccffa 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -2472,6 +2472,7 @@ select_alarm ()
2472#else /* not BSD4_1 */ 2472#else /* not BSD4_1 */
2473 signal (SIGALRM, SIG_IGN); 2473 signal (SIGALRM, SIG_IGN);
2474#endif /* not BSD4_1 */ 2474#endif /* not BSD4_1 */
2475 SIGNAL_THREAD_CHECK (SIGALRM);
2475 if (read_alarm_should_throw) 2476 if (read_alarm_should_throw)
2476 longjmp (read_alarm_throw, 1); 2477 longjmp (read_alarm_throw, 1);
2477} 2478}
diff --git a/src/syssignal.h b/src/syssignal.h
index cef71f7459a..04e84df1a3a 100644
--- a/src/syssignal.h
+++ b/src/syssignal.h
@@ -20,6 +20,11 @@ Boston, MA 02111-1307, USA. */
20 20
21extern void init_signals P_ ((void)); 21extern void init_signals P_ ((void));
22 22
23#ifdef HAVE_GTK_AND_PTHREAD
24#include <pthread.h>
25extern pthread_t main_thread;
26#endif
27
23#ifdef POSIX_SIGNALS 28#ifdef POSIX_SIGNALS
24 29
25/* Don't #include <signal.h>. That header should always be #included 30/* Don't #include <signal.h>. That header should always be #included
@@ -198,5 +203,27 @@ extern SIGMASKTYPE sigprocmask_set;
198char *strsignal (); 203char *strsignal ();
199#endif 204#endif
200 205
206#ifdef HAVE_GTK_AND_PTHREAD
207#define SIGNAL_THREAD_CHECK(signo) \
208 do { \
209 if (pthread_self () != main_thread) \
210 { \
211 /* POSIX says any thread can receive the signal. On GNU/Linux \
212 that is not true, but for other systems (FreeBSD at least) \
213 it is. So direct the signal to the correct thread and block \
214 it from this thread. */ \
215 sigset_t new_mask; \
216 \
217 sigemptyset (&new_mask); \
218 sigaddset (&new_mask, signo); \
219 pthread_sigmask (SIG_BLOCK, &new_mask, 0); \
220 pthread_kill (main_thread, signo); \
221 return; \
222 } \
223 } while (0)
224
225#else /* not HAVE_GTK_AND_PTHREAD */
226#define SIGNAL_THREAD_CHECK(signo)
227#endif /* not HAVE_GTK_AND_PTHREAD */
201/* arch-tag: 4580e86a-340d-4574-9e11-a742b6e1a152 228/* arch-tag: 4580e86a-340d-4574-9e11-a742b6e1a152
202 (do not change this comment) */ 229 (do not change this comment) */
diff --git a/src/undo.c b/src/undo.c
index 9fdc46a3b13..df4b8d08cd6 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -24,6 +24,17 @@ Boston, MA 02111-1307, USA. */
24#include "buffer.h" 24#include "buffer.h"
25#include "commands.h" 25#include "commands.h"
26 26
27/* Limits controlling how much undo information to keep. */
28
29EMACS_INT undo_limit;
30EMACS_INT undo_strong_limit;
31
32Lisp_Object Vundo_outer_limit;
33
34/* Function to call when undo_outer_limit is exceeded. */
35
36Lisp_Object Vundo_outer_limit_function;
37
27/* Last buffer for which undo information was recorded. */ 38/* Last buffer for which undo information was recorded. */
28Lisp_Object last_undo_buffer; 39Lisp_Object last_undo_buffer;
29 40
@@ -291,31 +302,35 @@ but another undo command will undo to the previous boundary. */)
291} 302}
292 303
293/* At garbage collection time, make an undo list shorter at the end, 304/* At garbage collection time, make an undo list shorter at the end,
294 returning the truncated list. 305 returning the truncated list. How this is done depends on the
295 MINSIZE, MAXSIZE and LIMITSIZE are the limits on size allowed, 306 variables undo-limit, undo-strong-limit and undo-outer-limit.
296 as described below. 307 In some cases this works by calling undo-outer-limit-function. */
297 In practice, these are the values of undo-limit, 308
298 undo-strong-limit, and undo-outer-limit. */ 309void
299 310truncate_undo_list (b)
300Lisp_Object 311 struct buffer *b;
301truncate_undo_list (list, minsize, maxsize, limitsize)
302 Lisp_Object list;
303 int minsize, maxsize, limitsize;
304{ 312{
313 Lisp_Object list;
305 Lisp_Object prev, next, last_boundary; 314 Lisp_Object prev, next, last_boundary;
306 int size_so_far = 0; 315 int size_so_far = 0;
307 316
317 /* Make sure that calling undo-outer-limit-function
318 won't cause another GC. */
319 int count = inhibit_garbage_collection ();
320
321 /* Make the buffer current to get its local values of variables such
322 as undo_limit. Also so that Vundo_outer_limit_function can
323 tell which buffer to operate on. */
324 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ());
325 set_buffer_internal (b);
326
327 list = b->undo_list;
328
308 prev = Qnil; 329 prev = Qnil;
309 next = list; 330 next = list;
310 last_boundary = Qnil; 331 last_boundary = Qnil;
311 332
312 /* Always preserve at least the most recent undo record 333 /* If the first element is an undo boundary, skip past it. */
313 unless it is really horribly big.
314 If the first element is an undo boundary, skip past it.
315
316 Skip, skip, skip the undo, skip, skip, skip the undo,
317 Skip, skip, skip the undo, skip to the undo bound'ry.
318 (Get it? "Skip to my Loo?") */
319 if (CONSP (next) && NILP (XCAR (next))) 334 if (CONSP (next) && NILP (XCAR (next)))
320 { 335 {
321 /* Add in the space occupied by this element and its chain link. */ 336 /* Add in the space occupied by this element and its chain link. */
@@ -326,6 +341,12 @@ truncate_undo_list (list, minsize, maxsize, limitsize)
326 next = XCDR (next); 341 next = XCDR (next);
327 } 342 }
328 343
344 /* Always preserve at least the most recent undo record
345 unless it is really horribly big.
346
347 Skip, skip, skip the undo, skip, skip, skip the undo,
348 Skip, skip, skip the undo, skip to the undo bound'ry. */
349
329 while (CONSP (next) && ! NILP (XCAR (next))) 350 while (CONSP (next) && ! NILP (XCAR (next)))
330 { 351 {
331 Lisp_Object elt; 352 Lisp_Object elt;
@@ -341,35 +362,53 @@ truncate_undo_list (list, minsize, maxsize, limitsize)
341 + SCHARS (XCAR (elt))); 362 + SCHARS (XCAR (elt)));
342 } 363 }
343 364
344 /* If we reach LIMITSIZE before the first boundary,
345 we're heading for memory full, so truncate the list to nothing. */
346 if (size_so_far > limitsize)
347 return Qnil;
348
349 /* Advance to next element. */ 365 /* Advance to next element. */
350 prev = next; 366 prev = next;
351 next = XCDR (next); 367 next = XCDR (next);
352 } 368 }
353 369
370 /* If by the first boundary we have already passed undo_outer_limit,
371 we're heading for memory full, so offer to clear out the list. */
372 if (INTEGERP (Vundo_outer_limit)
373 && size_so_far > XINT (Vundo_outer_limit)
374 && !NILP (Vundo_outer_limit_function))
375 {
376 Lisp_Object temp = last_undo_buffer;
377
378 /* Normally the function this calls is undo-outer-limit-truncate. */
379 if (! NILP (call1 (Vundo_outer_limit_function,
380 make_number (size_so_far))))
381 {
382 /* The function is responsible for making
383 any desired changes in buffer-undo-list. */
384 unbind_to (count, Qnil);
385 return;
386 }
387 /* That function probably used the minibuffer, and if so, that
388 changed last_undo_buffer. Change it back so that we don't
389 force next change to make an undo boundary here. */
390 last_undo_buffer = temp;
391 }
392
354 if (CONSP (next)) 393 if (CONSP (next))
355 last_boundary = prev; 394 last_boundary = prev;
356 395
357 /* Keep more if it fits. */ 396 /* Keep additional undo data, if it fits in the limits. */
358 while (CONSP (next)) 397 while (CONSP (next))
359 { 398 {
360 Lisp_Object elt; 399 Lisp_Object elt;
361 elt = XCAR (next); 400 elt = XCAR (next);
362 401
363 /* When we get to a boundary, decide whether to truncate 402 /* When we get to a boundary, decide whether to truncate
364 either before or after it. The lower threshold, MINSIZE, 403 either before or after it. The lower threshold, undo_limit,
365 tells us to truncate after it. If its size pushes past 404 tells us to truncate after it. If its size pushes past
366 the higher threshold MAXSIZE as well, we truncate before it. */ 405 the higher threshold undo_strong_limit, we truncate before it. */
367 if (NILP (elt)) 406 if (NILP (elt))
368 { 407 {
369 if (size_so_far > maxsize) 408 if (size_so_far > undo_strong_limit)
370 break; 409 break;
371 last_boundary = prev; 410 last_boundary = prev;
372 if (size_so_far > minsize) 411 if (size_so_far > undo_limit)
373 break; 412 break;
374 } 413 }
375 414
@@ -390,16 +429,15 @@ truncate_undo_list (list, minsize, maxsize, limitsize)
390 429
391 /* If we scanned the whole list, it is short enough; don't change it. */ 430 /* If we scanned the whole list, it is short enough; don't change it. */
392 if (NILP (next)) 431 if (NILP (next))
393 return list; 432 ;
394
395 /* Truncate at the boundary where we decided to truncate. */ 433 /* Truncate at the boundary where we decided to truncate. */
396 if (!NILP (last_boundary)) 434 else if (!NILP (last_boundary))
397 { 435 XSETCDR (last_boundary, Qnil);
398 XSETCDR (last_boundary, Qnil); 436 /* There's nothing we decided to keep, so clear it out. */
399 return list;
400 }
401 else 437 else
402 return Qnil; 438 b->undo_list = Qnil;
439
440 unbind_to (count, Qnil);
403} 441}
404 442
405DEFUN ("primitive-undo", Fprimitive_undo, Sprimitive_undo, 2, 2, 0, 443DEFUN ("primitive-undo", Fprimitive_undo, Sprimitive_undo, 2, 2, 0,
@@ -563,6 +601,54 @@ syms_of_undo ()
563 601
564 defsubr (&Sprimitive_undo); 602 defsubr (&Sprimitive_undo);
565 defsubr (&Sundo_boundary); 603 defsubr (&Sundo_boundary);
604
605 DEFVAR_INT ("undo-limit", &undo_limit,
606 doc: /* Keep no more undo information once it exceeds this size.
607This limit is applied when garbage collection happens.
608When a previous command increases the total undo list size past this
609value, the earlier commands that came before it are forgotten.
610
611The size is counted as the number of bytes occupied,
612which includes both saved text and other data. */);
613 undo_limit = 20000;
614
615 DEFVAR_INT ("undo-strong-limit", &undo_strong_limit,
616 doc: /* Don't keep more than this much size of undo information.
617This limit is applied when garbage collection happens.
618When a previous command increases the total undo list size past this
619value, that command and the earlier commands that came before it are forgotten.
620However, the most recent buffer-modifying command's undo info
621is never discarded for this reason.
622
623The size is counted as the number of bytes occupied,
624which includes both saved text and other data. */);
625 undo_strong_limit = 30000;
626
627 DEFVAR_LISP ("undo-outer-limit", &Vundo_outer_limit,
628 doc: /* Outer limit on size of undo information for one command.
629At garbage collection time, if the current command has produced
630more than this much undo information, it asks you whether to delete
631the information. This is a last-ditch limit to prevent memory overflow.
632
633The size is counted as the number of bytes occupied,
634which includes both saved text and other data.
635
636In fact, this calls the function which is the value of
637`undo-outer-limit-function' with one argument, the size.
638The text above describes the behavior of the function
639that variable usually specifies. */);
640 Vundo_outer_limit = make_number (300000);
641
642 DEFVAR_LISP ("undo-outer-limit-function", &Vundo_outer_limit_function,
643 doc: /* Function to call when an undo list exceeds `undo-outer-limit'.
644This function is called with one argument, the current undo list size
645for the most recent command (since the last undo boundary).
646If the function returns t, that means truncation has been fully handled.
647If it returns nil, the other forms of truncation are done.
648
649Garbage collection is inhibited around the call to this function,
650so it must make sure not to do a lot of consing. */);
651 Vundo_outer_limit_function = Qnil;
566} 652}
567 653
568/* arch-tag: d546ee01-4aed-4ffb-bb8b-eefaae50d38a 654/* arch-tag: d546ee01-4aed-4ffb-bb8b-eefaae50d38a
diff --git a/src/xdisp.c b/src/xdisp.c
index ba6ee253d79..62efd4cac6c 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -5050,6 +5050,21 @@ get_next_display_element (it)
5050 XSETINT (it->ctl_chars[1], g); 5050 XSETINT (it->ctl_chars[1], g);
5051 ctl_len = 2; 5051 ctl_len = 2;
5052 } 5052 }
5053 else if (it->c == 0x8a0 || it->c == 0x8ad)
5054 {
5055 /* Set IT->ctl_chars[0] to the glyph for `\\'. */
5056 if (it->dp
5057 && INTEGERP (DISP_ESCAPE_GLYPH (it->dp))
5058 && GLYPH_CHAR_VALID_P (XINT (DISP_ESCAPE_GLYPH (it->dp))))
5059 g = XINT (DISP_ESCAPE_GLYPH (it->dp));
5060 else
5061 g = FAST_MAKE_GLYPH ('\\', face_id);
5062 XSETINT (it->ctl_chars[0], g);
5063
5064 g = FAST_MAKE_GLYPH (it->c == 0x8ad ? '-' : ' ', face_id);
5065 XSETINT (it->ctl_chars[1], g);
5066 ctl_len = 2;
5067 }
5053 else 5068 else
5054 { 5069 {
5055 unsigned char str[MAX_MULTIBYTE_LENGTH]; 5070 unsigned char str[MAX_MULTIBYTE_LENGTH];
diff --git a/src/xselect.c b/src/xselect.c
index c89347be2cd..38547ea6bbf 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -2324,7 +2324,7 @@ DEFUN ("x-get-cut-buffer-internal", Fx_get_cut_buffer_internal,
2324 Fcons (x_atom_to_symbol (display, type), 2324 Fcons (x_atom_to_symbol (display, type),
2325 Fcons (make_number (format), Qnil)))); 2325 Fcons (make_number (format), Qnil))));
2326 2326
2327 ret = (bytes ? make_string ((char *) data, bytes) : Qnil); 2327 ret = (bytes ? make_unibyte_string ((char *) data, bytes) : Qnil);
2328 /* Use xfree, not XFree, because x_get_window_property 2328 /* Use xfree, not XFree, because x_get_window_property
2329 calls xmalloc itself. */ 2329 calls xmalloc itself. */
2330 xfree (data); 2330 xfree (data);
diff --git a/src/xterm.c b/src/xterm.c
index 2ffe7668516..05148608961 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -4289,8 +4289,6 @@ xg_scroll_callback (widget, data)
4289 int part = -1, whole = 0, portion = 0; 4289 int part = -1, whole = 0, portion = 0;
4290 GtkAdjustment *adj = GTK_ADJUSTMENT (gtk_range_get_adjustment (widget)); 4290 GtkAdjustment *adj = GTK_ADJUSTMENT (gtk_range_get_adjustment (widget));
4291 4291
4292 if (xg_ignore_gtk_scrollbar) return;
4293
4294 position = gtk_adjustment_get_value (adj); 4292 position = gtk_adjustment_get_value (adj);
4295 4293
4296 p = g_object_get_data (G_OBJECT (widget), XG_LAST_SB_DATA); 4294 p = g_object_get_data (G_OBJECT (widget), XG_LAST_SB_DATA);
@@ -4304,6 +4302,8 @@ xg_scroll_callback (widget, data)
4304 previous = *p; 4302 previous = *p;
4305 *p = position; 4303 *p = position;
4306 4304
4305 if (xg_ignore_gtk_scrollbar) return;
4306
4307 diff = (int) (position - previous); 4307 diff = (int) (position - previous);
4308 4308
4309 if (diff == (int) adj->step_increment) 4309 if (diff == (int) adj->step_increment)
@@ -4335,7 +4335,7 @@ xg_scroll_callback (widget, data)
4335 } 4335 }
4336 4336
4337 if (part >= 0) 4337 if (part >= 0)
4338 { 4338 {
4339 window_being_scrolled = bar->window; 4339 window_being_scrolled = bar->window;
4340 last_scroll_bar_part = part; 4340 last_scroll_bar_part = part;
4341 x_send_scroll_bar_event (bar->window, part, portion, whole); 4341 x_send_scroll_bar_event (bar->window, part, portion, whole);