From: kazuhiko Date: Tue, 21 Nov 2000 09:07:52 +0000 (+0000) Subject: import xemacs-21.2.37 X-Git-Tag: r21-2-37~2 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=98a6e4055a1fa624c592ac06f79287d55196ca37;p=chise%2Fxemacs-chise.git- import xemacs-21.2.37 --- diff --git a/CHANGES-beta b/CHANGES-beta index aefa0ef..d00ae9a 100644 --- a/CHANGES-beta +++ b/CHANGES-beta @@ -1,3 +1,37 @@ +to 21.2.37 "Pan" +-- etags fix -- Stephen Carney +-- more gutters and tab changes -- Andy Piper +-- eval-when-compile no longer compiles its body -- Martin Buchholz +-- top-level (defvar foo) no longer generates a run-time load-history + entry -- Martin Buchholz +-- Windows 1251 code page encoding for Cyrillic -- Sergey Groznyh +-- `local-key-binding' and `global-key-binding' now have an optional + `accepts-defaults' parameter, just like `lookup-key' -- Martin Buchholz +-- 1000 arglist-related lispref documentation bugs fixed -- Martin Buchholz +-- arg to `down-list', `up-list', `backward-up-list', `kill-sexp', + `backward-kill-sexp' are now optional, just like FSF Emacs -- Martin Buchholz +-- info mode fixes -- Didier Verna +-- Massive CCL upgrade -- MIYASHITA Hisashi +-- byte-code optimizations -- Yoshiki Hayashi +-- historical purecopy's purged -- Robert Pluim +-- `mwheel-install', `turn-on-auto-fill', `turn-on-font-lock', + `turn-off-font-lock' are now interactive -- Martin Buchholz +-- Detect _getpty correctly (for SGIs) -- Martin Buchholz +-- Several GCPRO bugs found -- Yoshiki Hayashi +-- `replace-buffer-in-windows' now has the same WHICH-FRAMES and + WHICH-DEVICES paratmeters as `delete-windows-on' -- Martin Buchholz +-- Add support for Compaq C on Alpha Linux -- Martin Buchholz +-- auto-save fixes -- Yoshiki Hayashi +-- Removed unused C vars detected by Compaq C -- Martin Buchholz +-- More 64-bit cleanliness micro-fixes -- Martin Buchholz +-- Fix cachel.merged_faces memory leak -- Golubev I. N. +-- More changes to allow definitions of lisp object types by + third-party modules -- Daiki Ueno. +-- Extbyte is now a char, not unsigned char -- Martin Buchholz +-- C++ compilability is restored -- Martin Buchholz +-- New tests for CCL -- MIYASHITA Hisashi, Yoshiki Hayashi +-- Use stropts.h, not sys/stropts.h. Likewise for strtio.h -- Martin Buchholz + to 21.2.36 "Notus" -- Fix build problems on AIX 4.3 -- Martin Buchholz -- Fix build problems on HP-UX 10.20 -- Alexandre Oliva and Martin Buchholz diff --git a/ChangeLog b/ChangeLog index 40a41b4..befb17f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,50 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-10-19 Stephen J. Turnbull + + * README.packages: Add "uninstalled package" FAQ. + + * etc/PACKAGES: Add details on os-utils contents. + +2000-11-01 Martin Buchholz + + * configure.in: Handle alloca with Compaq C on Alpha Linux. + +2000-10-27 Martin Buchholz + + * configure.in: Oops, _getpt ==> _getpty + +2000-10-23 Yoshiki Hayashi + + * Makefile.in.in: Remove lockdir related things. + +2000-10-11 Martin Buchholz + + * configure.in: + Remove checking for XFree86. Use feature tests instead! + Add check for XRegisterIMInstantiateCallback. + Add check for XRegisterIMInstantiateCallback's prototype. + +2000-10-04 Yoshiki Hayashi + + * etc/NEWS: Change lprogress-display to progress-feedback. + +2000-10-08 Karl M. Hegbloom + + * configure.in: Typo - missing paren. + +2000-10-10 Martin Buchholz + + * configure.in: + Use stropts.h, not sys/stropts.h. + Use strtio.h, not sys/strtio.h. + +2000-10-06 Martin Buchholz + + * configure.in: Pretend that DEC OSF >= 5 is really DEC OSF 4. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. diff --git a/Makefile.in.in b/Makefile.in.in index 2ccb3c0..04c1805 100644 --- a/Makefile.in.in +++ b/Makefile.in.in @@ -123,7 +123,6 @@ pkgdir=@pkgdir@ ## Where to install and expect the files that XEmacs modifies as it runs. ## These files are all architecture-independent. Right now, the ## only such data is the locking directory; -## ${lockdir} is a subdirectory of this. statedir=@statedir@ ## Where to install and expect executable files to be run by XEmacs @@ -199,11 +198,6 @@ buildlispdir=${srcdir}/lisp ## at once. etcdir=@etcdir@ -## Where to create and expect the locking directory, where -## the XEmacs locking code keeps track of which files are -## currently being edited. -lockdir=@lockdir@ - ## Where to put the DOC file. docdir=@docdir@ @@ -520,10 +514,9 @@ gzip-el: ## (e.g. /usr/local/lib/${PROGNAME}-20.5/sparc-sun-solaris2.6), we use ## make-path instead of mkdir. Not all mkdirs have the `-p' flag. mkdir: FRC.mkdir - ${MAKEPATH} ${COPYDESTS} ${lockdir} ${docdir} ${infodir} ${archlibdir} \ + ${MAKEPATH} ${COPYDESTS} ${docdir} ${infodir} ${archlibdir} \ ${mandir} ${bindir} ${datadir} ${libdir} ${pkgdir} \ ${sitelispdir} ${moduledir} ${sitemoduledir} - -chmod 0777 ${lockdir} ## Delete all the installed files that the `install' target would ## create (but not the noninstalled files such as `make all' would diff --git a/README.packages b/README.packages index d618862..04cc713 100644 --- a/README.packages +++ b/README.packages @@ -19,6 +19,13 @@ Q. I really liked the old way that packages were bundled and do not A. You can grab all the packages at once like you used to with old XEmacs versions, skip to the 'Sumo Tarball' section below. +Q. After installing, I want XEmacs to do `foo', but when I invoke it + (or click the toolbar button or select the menu item), nothing (or + an error) happens, and it used to work. +A. See the first FAQ; you may be missing a package that is essential to + you. You can either track it down and install it, or install the + `Sumo Tarball' (see the second FAQ). + A note of caution ----------------- diff --git a/configure b/configure index 0de4081..b2bcf8c 100755 --- a/configure +++ b/configure @@ -1140,7 +1140,7 @@ case "$canonical" in *-dec-osf1.2 | *-dec-osf1* ) opsys=decosf1-2 ;; *-dec-osf3.[2-9] ) opsys=decosf3-2 ;; *-dec-osf3* ) opsys=decosf3-1 ;; - *-dec-osf4* ) opsys=decosf4-0 ;; + *-dec-osf[4-9]* ) opsys=decosf4-0 ;; *-*-ultrix[0-3].* | *-*-ultrix4.0* ) opsys=bsd4-2 ;; *-*-ultrix4.[12]* ) opsys=bsd4-3 ;; @@ -6293,33 +6293,104 @@ fi done - echo $ac_n "checking for XFree86""... $ac_c" 1>&6 -echo "configure:6298: checking for XFree86" >&5 - if test -d "/usr/X386/include" -o \ - -f "/etc/XF86Config" -o \ - -f "/etc/X11/XF86Config" -o \ - -f "/usr/X11R6/lib/X11/XF86Config"; then - echo "$ac_t""yes" 1>&6 - { test "$extra_verbose" = "yes" && cat << \EOF - Defining HAVE_XFREE386 + for ac_func in XRegisterIMInstantiateCallback +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:6300: checking for $ac_func" >&5 + +cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:6326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + { test "$extra_verbose" = "yes" && cat << EOF + Defining $ac_tr_func +EOF +cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking for standard XRegisterIMInstantiateCallback prototype""... $ac_c" 1>&6 +echo "configure:6354: checking for standard XRegisterIMInstantiateCallback prototype" >&5 + cat > conftest.$ac_ext < +extern Bool XRegisterIMInstantiateCallback( + Display*, struct _XrmHashBucketRec*, char*, char*, XIMProc, XPointer*); + +int main() { + +; return 0; } +EOF +if { (eval echo configure:6368: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 + { test "$extra_verbose" = "yes" && cat << \EOF + Defining XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE EOF cat >> confdefs.h <<\EOF -#define HAVE_XFREE386 1 +#define XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE 1 EOF } - else - echo "$ac_t""no" 1>&6 - fi +fi +rm -f conftest* test -z "$with_xmu" && { echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6 -echo "configure:6318: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 +echo "configure:6389: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 ac_lib_var=`echo Xmu'_'XmuReadBitmapDataFromFile | sed 'y%./+-%__p_%'` xe_check_libs=" -lXmu " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6369,19 +6440,19 @@ EOF echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6 -echo "configure:6373: checking for main in -lXbsd" >&5 +echo "configure:6444: checking for main in -lXbsd" >&5 ac_lib_var=`echo Xbsd'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lXbsd " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6418,22 +6489,22 @@ fi fi if test "$with_msw" != "no"; then echo "checking for MS-Windows" 1>&6 -echo "configure:6422: checking for MS-Windows" >&5 +echo "configure:6493: checking for MS-Windows" >&5 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6 -echo "configure:6425: checking for main in -lgdi32" >&5 +echo "configure:6496: checking for main in -lgdi32" >&5 ac_lib_var=`echo gdi32'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdi32 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6499,12 +6570,12 @@ EOF fi fi cat > conftest.$ac_ext < int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; } EOF -if { (eval echo configure:6508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:6579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_MSG_SELECT @@ -6568,15 +6639,15 @@ fi if test "$with_x11" = "yes"; then ac_safe=`echo "X11/extensions/shape.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/extensions/shape.h""... $ac_c" 1>&6 -echo "configure:6572: checking for X11/extensions/shape.h" >&5 +echo "configure:6643: checking for X11/extensions/shape.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6580: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6623,7 +6694,7 @@ case "$x_libraries" in *X11R4* ) esac echo "checking for WM_COMMAND option" 1>&6 -echo "configure:6627: checking for WM_COMMAND option" >&5; +echo "configure:6698: checking for WM_COMMAND option" >&5; if test "$with_wmcommand" != "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_WMCOMMAND @@ -6638,15 +6709,15 @@ fi test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no test -z "$with_xauth" && { ac_safe=`echo "X11/Xauth.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xauth.h""... $ac_c" 1>&6 -echo "configure:6642: checking for X11/Xauth.h" >&5 +echo "configure:6713: checking for X11/Xauth.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6650: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6721: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6669,12 +6740,12 @@ fi } test -z "$with_xauth" && { echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6 -echo "configure:6673: checking for XauGetAuthByAddr in -lXau" >&5 +echo "configure:6744: checking for XauGetAuthByAddr in -lXau" >&5 ac_lib_var=`echo Xau'_'XauGetAuthByAddr | sed 'y%./+-%__p_%'` xe_check_libs=" -lXau " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6730,15 +6801,15 @@ if test "$with_tooltalk" != "no" ; then for dir in "" "Tt/" "desktop/" ; do ac_safe=`echo "${dir}tt_c.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${dir}tt_c.h""... $ac_c" 1>&6 -echo "configure:6734: checking for ${dir}tt_c.h" >&5 +echo "configure:6805: checking for ${dir}tt_c.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6742: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6774,12 +6845,12 @@ if test "$with_tooltalk" != "no" ; then xe_msg_checking="for tt_message_create in -ltt" test -n "$extra_libs" && xe_msg_checking="$xe_msg_checking using extra libs $extra_libs" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:6778: checking "$xe_msg_checking"" >&5 +echo "configure:6849: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo tt'_'tt_message_create | sed 'y%./+-%__p_%'` xe_check_libs=" -ltt $extra_libs" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6847,15 +6918,15 @@ fi test -z "$with_cde" && { ac_safe=`echo "Dt/Dt.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Dt/Dt.h""... $ac_c" 1>&6 -echo "configure:6851: checking for Dt/Dt.h" >&5 +echo "configure:6922: checking for Dt/Dt.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6859: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6930: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6878,12 +6949,12 @@ fi } test -z "$with_cde" && { echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6 -echo "configure:6882: checking for DtDndDragStart in -lDtSvc" >&5 +echo "configure:6953: checking for DtDndDragStart in -lDtSvc" >&5 ac_lib_var=`echo DtSvc'_'DtDndDragStart | sed 'y%./+-%__p_%'` xe_check_libs=" -lDtSvc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6963,7 +7034,7 @@ EOF fi echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6 -echo "configure:6967: checking if drag and drop API is needed" >&5 +echo "configure:7038: checking if drag and drop API is needed" >&5 if test "$with_dragndrop" != "no" ; then if test -n "$dragndrop_proto" ; then with_dragndrop=yes @@ -6984,18 +7055,18 @@ EOF fi echo "checking for LDAP" 1>&6 -echo "configure:6988: checking for LDAP" >&5 +echo "configure:7059: checking for LDAP" >&5 test -z "$with_ldap" && { ac_safe=`echo "ldap.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ldap.h""... $ac_c" 1>&6 -echo "configure:6991: checking for ldap.h" >&5 +echo "configure:7062: checking for ldap.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6999: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7070: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7018,15 +7089,15 @@ fi } test -z "$with_ldap" && { ac_safe=`echo "lber.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for lber.h""... $ac_c" 1>&6 -echo "configure:7022: checking for lber.h" >&5 +echo "configure:7093: checking for lber.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7030: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7101: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7050,12 +7121,12 @@ fi if test "$with_ldap" != "no"; then echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6 -echo "configure:7054: checking for ldap_search in -lldap" >&5 +echo "configure:7125: checking for ldap_search in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_search | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7091,12 +7162,12 @@ fi xe_msg_checking="for ldap_open in -lldap" test -n "-llber" && xe_msg_checking="$xe_msg_checking using extra libs -llber" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:7095: checking "$xe_msg_checking"" >&5 +echo "configure:7166: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap -llber" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7132,12 +7203,12 @@ fi xe_msg_checking="for ldap_open in -lldap" test -n "-llber -lkrb" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:7136: checking "$xe_msg_checking"" >&5 +echo "configure:7207: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap -llber -lkrb" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7173,12 +7244,12 @@ fi xe_msg_checking="for ldap_open in -lldap" test -n "-llber -lkrb -ldes" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb -ldes" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:7177: checking "$xe_msg_checking"" >&5 +echo "configure:7248: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap -llber -lkrb -ldes" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7240,10 +7311,10 @@ EOF for ac_func in ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7244: checking for $ac_func" >&5 +echo "configure:7315: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7297,20 +7368,20 @@ fi if test "$with_postgresql" != "no"; then echo "checking for PostgreSQL" 1>&6 -echo "configure:7301: checking for PostgreSQL" >&5 +echo "configure:7372: checking for PostgreSQL" >&5 for header_dir in "" "pgsql/" "postgresql/"; do ac_safe=`echo "${header_dir}libpq-fe.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${header_dir}libpq-fe.h""... $ac_c" 1>&6 -echo "configure:7306: checking for ${header_dir}libpq-fe.h" >&5 +echo "configure:7377: checking for ${header_dir}libpq-fe.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7385: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7334,12 +7405,12 @@ fi test -n "$libpq_fe_h_file" && { echo $ac_n "checking for PQconnectdb in -lpq""... $ac_c" 1>&6 -echo "configure:7338: checking for PQconnectdb in -lpq" >&5 +echo "configure:7409: checking for PQconnectdb in -lpq" >&5 ac_lib_var=`echo pq'_'PQconnectdb | sed 'y%./+-%__p_%'` xe_check_libs=" -lpq " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7383,12 +7454,12 @@ EOF echo $ac_n "checking for PQconnectStart in -lpq""... $ac_c" 1>&6 -echo "configure:7387: checking for PQconnectStart in -lpq" >&5 +echo "configure:7458: checking for PQconnectStart in -lpq" >&5 ac_lib_var=`echo pq'_'PQconnectStart | sed 'y%./+-%__p_%'` xe_check_libs=" -lpq " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7447,15 +7518,15 @@ fi if test "$window_system" != "none"; then echo "checking for graphics libraries" 1>&6 -echo "configure:7451: checking for graphics libraries" >&5 +echo "configure:7522: checking for graphics libraries" >&5 xpm_problem="" if test -z "$with_xpm"; then echo $ac_n "checking for Xpm - no older than 3.4f""... $ac_c" 1>&6 -echo "configure:7456: checking for Xpm - no older than 3.4f" >&5 +echo "configure:7527: checking for Xpm - no older than 3.4f" >&5 xe_check_libs=-lXpm cat > conftest.$ac_ext < @@ -7464,7 +7535,7 @@ echo "configure:7456: checking for Xpm - no older than 3.4f" >&5 XpmIncludeVersion != XpmLibraryVersion() ? 1 : XpmIncludeVersion < 30406 ? 2 : 0 ;} EOF -if { (eval echo configure:7468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:7539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ./conftest dummy_arg; xpm_status=$?; if test "$xpm_status" = "0"; then @@ -7506,17 +7577,17 @@ EOF libs_x="-lXpm $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXpm\" to \$libs_x"; fi echo $ac_n "checking for \"FOR_MSW\" xpm""... $ac_c" 1>&6 -echo "configure:7510: checking for \"FOR_MSW\" xpm" >&5 +echo "configure:7581: checking for \"FOR_MSW\" xpm" >&5 xe_check_libs=-lXpm cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xpm_for_msw=no else @@ -7542,15 +7613,15 @@ EOF test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for compface.h""... $ac_c" 1>&6 -echo "configure:7546: checking for compface.h" >&5 +echo "configure:7617: checking for compface.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7554: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7573,12 +7644,12 @@ fi } test -z "$with_xface" && { echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6 -echo "configure:7577: checking for UnGenFace in -lcompface" >&5 +echo "configure:7648: checking for UnGenFace in -lcompface" >&5 ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'` xe_check_libs=" -lcompface " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7641,12 +7712,12 @@ EOF if test "$with_png $with_tiff" != "no no"; then echo $ac_n "checking for inflate in -lc""... $ac_c" 1>&6 -echo "configure:7645: checking for inflate in -lc" >&5 +echo "configure:7716: checking for inflate in -lc" >&5 ac_lib_var=`echo c'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7676,12 +7747,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6 -echo "configure:7680: checking for inflate in -lz" >&5 +echo "configure:7751: checking for inflate in -lz" >&5 ac_lib_var=`echo z'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lz " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7711,12 +7782,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6 -echo "configure:7715: checking for inflate in -lgz" >&5 +echo "configure:7786: checking for inflate in -lgz" >&5 ac_lib_var=`echo gz'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lgz " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7757,15 +7828,15 @@ fi test -z "$with_jpeg" && { ac_safe=`echo "jpeglib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for jpeglib.h""... $ac_c" 1>&6 -echo "configure:7761: checking for jpeglib.h" >&5 +echo "configure:7832: checking for jpeglib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7769: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7788,12 +7859,12 @@ fi } test -z "$with_jpeg" && { echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6 -echo "configure:7792: checking for jpeg_destroy_decompress in -ljpeg" >&5 +echo "configure:7863: checking for jpeg_destroy_decompress in -ljpeg" >&5 ac_lib_var=`echo jpeg'_'jpeg_destroy_decompress | sed 'y%./+-%__p_%'` xe_check_libs=" -ljpeg " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7840,10 +7911,10 @@ EOF png_problem="" test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6 -echo "configure:7844: checking for pow" >&5 +echo "configure:7915: checking for pow" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_pow=yes" else @@ -7887,15 +7958,15 @@ fi } test -z "$with_png" && { ac_safe=`echo "png.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for png.h""... $ac_c" 1>&6 -echo "configure:7891: checking for png.h" >&5 +echo "configure:7962: checking for png.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7899: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7970: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7918,12 +7989,12 @@ fi } test -z "$with_png" && { echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6 -echo "configure:7922: checking for png_read_image in -lpng" >&5 +echo "configure:7993: checking for png_read_image in -lpng" >&5 ac_lib_var=`echo png'_'png_read_image | sed 'y%./+-%__p_%'` xe_check_libs=" -lpng " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7957,10 +8028,10 @@ fi } if test -z "$with_png"; then echo $ac_n "checking for workable png version information""... $ac_c" 1>&6 -echo "configure:7961: checking for workable png version information" >&5 +echo "configure:8032: checking for workable png version information" >&5 xe_check_libs="-lpng -lz" cat > conftest.$ac_ext < int main(int c, char **v) { @@ -7968,7 +8039,7 @@ echo "configure:7961: checking for workable png version information" >&5 if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0) return 1; return (PNG_LIBPNG_VER < 10002) ? 2 : 0 ;} EOF -if { (eval echo configure:7972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:8043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ./conftest dummy_arg; png_status=$?; if test "$png_status" = "0"; then @@ -8011,15 +8082,15 @@ EOF test -z "$with_tiff" && { ac_safe=`echo "tiffio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for tiffio.h""... $ac_c" 1>&6 -echo "configure:8015: checking for tiffio.h" >&5 +echo "configure:8086: checking for tiffio.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8042,12 +8113,12 @@ fi } test -z "$with_tiff" && { echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6 -echo "configure:8046: checking for TIFFClientOpen in -ltiff" >&5 +echo "configure:8117: checking for TIFFClientOpen in -ltiff" >&5 ac_lib_var=`echo tiff'_'TIFFClientOpen | sed 'y%./+-%__p_%'` xe_check_libs=" -ltiff " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8097,10 +8168,10 @@ fi if test "$with_x11" = "yes"; then echo "checking for X11 graphics libraries" 1>&6 -echo "configure:8101: checking for X11 graphics libraries" >&5 +echo "configure:8172: checking for X11 graphics libraries" >&5 echo "checking for the Athena widgets" 1>&6 -echo "configure:8104: checking for the Athena widgets" >&5 +echo "configure:8175: checking for the Athena widgets" >&5 case "$with_athena" in "xaw" | "") athena_variant=Xaw athena_3d=no ;; @@ -8114,12 +8185,12 @@ echo "configure:8104: checking for the Athena widgets" >&5 if test "$athena_3d" = "no"; then echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:8118: checking for XawScrollbarSetThumb in -l$athena_variant" >&5 +echo "configure:8189: checking for XawScrollbarSetThumb in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8146,12 +8217,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:8150: checking for threeDClassRec in -l$athena_variant" >&5 +echo "configure:8221: checking for threeDClassRec in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8193,12 +8264,12 @@ fi else echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:8197: checking for threeDClassRec in -l$athena_variant" >&5 +echo "configure:8268: checking for threeDClassRec in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8227,12 +8298,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for threeDClassRec in -lXaw""... $ac_c" 1>&6 -echo "configure:8231: checking for threeDClassRec in -lXaw" >&5 +echo "configure:8302: checking for threeDClassRec in -lXaw" >&5 ac_lib_var=`echo Xaw'_'threeDClassRec | sed 'y%./+-%__p_%'` xe_check_libs=" -lXaw " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8274,15 +8345,15 @@ fi if test "$athena_3d" = "no"; then ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6 -echo "configure:8278: checking for X11/Xaw/ThreeD.h" >&5 +echo "configure:8349: checking for X11/Xaw/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8286: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8357: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8302,15 +8373,15 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "X11/Xaw/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/XawInit.h""... $ac_c" 1>&6 -echo "configure:8306: checking for X11/Xaw/XawInit.h" >&5 +echo "configure:8377: checking for X11/Xaw/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8385: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8336,15 +8407,15 @@ fi else ac_safe=`echo "X11/$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/$athena_variant/XawInit.h""... $ac_c" 1>&6 -echo "configure:8340: checking for X11/$athena_variant/XawInit.h" >&5 +echo "configure:8411: checking for X11/$athena_variant/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8348: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8419: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8361,15 +8432,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "X11/$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/$athena_variant/ThreeD.h""... $ac_c" 1>&6 -echo "configure:8365: checking for X11/$athena_variant/ThreeD.h" >&5 +echo "configure:8436: checking for X11/$athena_variant/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8373: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8397,15 +8468,15 @@ fi if test -z "$athena_h_path"; then ac_safe=`echo "$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $athena_variant/XawInit.h""... $ac_c" 1>&6 -echo "configure:8401: checking for $athena_variant/XawInit.h" >&5 +echo "configure:8472: checking for $athena_variant/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8409: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8422,15 +8493,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $athena_variant/ThreeD.h""... $ac_c" 1>&6 -echo "configure:8426: checking for $athena_variant/ThreeD.h" >&5 +echo "configure:8497: checking for $athena_variant/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8505: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8459,15 +8530,15 @@ fi if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then ac_safe=`echo "X11/Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw3d/XawInit.h""... $ac_c" 1>&6 -echo "configure:8463: checking for X11/Xaw3d/XawInit.h" >&5 +echo "configure:8534: checking for X11/Xaw3d/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8542: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8484,15 +8555,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "X11/Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw3d/ThreeD.h""... $ac_c" 1>&6 -echo "configure:8488: checking for X11/Xaw3d/ThreeD.h" >&5 +echo "configure:8559: checking for X11/Xaw3d/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8496: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8567: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8524,15 +8595,15 @@ fi if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then ac_safe=`echo "Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xaw3d/XawInit.h""... $ac_c" 1>&6 -echo "configure:8528: checking for Xaw3d/XawInit.h" >&5 +echo "configure:8599: checking for Xaw3d/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8536: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8549,15 +8620,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xaw3d/ThreeD.h""... $ac_c" 1>&6 -echo "configure:8553: checking for Xaw3d/ThreeD.h" >&5 +echo "configure:8624: checking for Xaw3d/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8561: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8632: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8589,15 +8660,15 @@ fi if test -z "$athena_h_path"; then ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6 -echo "configure:8593: checking for X11/Xaw/ThreeD.h" >&5 +echo "configure:8664: checking for X11/Xaw/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8601: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8672: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8632,15 +8703,15 @@ fi ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6 -echo "configure:8636: checking for Xm/Xm.h" >&5 +echo "configure:8707: checking for Xm/Xm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8657,12 +8728,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6 -echo "configure:8661: checking for XmStringFree in -lXm" >&5 +echo "configure:8732: checking for XmStringFree in -lXm" >&5 ac_lib_var=`echo Xm'_'XmStringFree | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8702,9 +8773,9 @@ fi if test "$have_motif" = "yes"; then echo $ac_n "checking for Lesstif""... $ac_c" 1>&6 -echo "configure:8706: checking for Lesstif" >&5 +echo "configure:8777: checking for Lesstif" >&5 cat > conftest.$ac_ext < #ifdef LESSTIF_VERSION @@ -9110,7 +9181,7 @@ fi if test "$with_mule" = "yes" ; then echo "checking for Mule-related features" 1>&6 -echo "configure:9114: checking for Mule-related features" >&5 +echo "configure:9185: checking for Mule-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining MULE EOF @@ -9135,15 +9206,15 @@ EOF do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:9139: checking for $ac_hdr" >&5 +echo "configure:9210: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9147: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9174,12 +9245,12 @@ done echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6 -echo "configure:9178: checking for strerror in -lintl" >&5 +echo "configure:9249: checking for strerror in -lintl" >&5 ac_lib_var=`echo intl'_'strerror | sed 'y%./+-%__p_%'` xe_check_libs=" -lintl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9223,18 +9294,18 @@ fi echo "checking for Mule input methods" 1>&6 -echo "configure:9227: checking for Mule input methods" >&5 +echo "configure:9298: checking for Mule input methods" >&5 case "$with_xim" in "" | "yes" ) echo "checking for XIM" 1>&6 -echo "configure:9230: checking for XIM" >&5 +echo "configure:9301: checking for XIM" >&5 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6 -echo "configure:9233: checking for XOpenIM in -lX11" >&5 +echo "configure:9304: checking for XOpenIM in -lX11" >&5 ac_lib_var=`echo X11'_'XOpenIM | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9269,12 +9340,12 @@ fi if test "$have_motif $have_lesstif" = "yes no"; then echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6 -echo "configure:9273: checking for XmImMbLookupString in -lXm" >&5 +echo "configure:9344: checking for XmImMbLookupString in -lXm" >&5 ac_lib_var=`echo Xm'_'XmImMbLookupString | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9350,15 +9421,15 @@ EOF if test "$with_xfs" = "yes" ; then echo "checking for XFontSet" 1>&6 -echo "configure:9354: checking for XFontSet" >&5 +echo "configure:9425: checking for XFontSet" >&5 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6 -echo "configure:9357: checking for XmbDrawString in -lX11" >&5 +echo "configure:9428: checking for XmbDrawString in -lX11" >&5 ac_lib_var=`echo X11'_'XmbDrawString | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9409,15 +9480,15 @@ EOF test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support test -z "$with_wnn" && { ac_safe=`echo "wnn/jllib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wnn/jllib.h""... $ac_c" 1>&6 -echo "configure:9413: checking for wnn/jllib.h" >&5 +echo "configure:9484: checking for wnn/jllib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9421: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9492: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9442,10 +9513,10 @@ fi for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9446: checking for $ac_func" >&5 +echo "configure:9517: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9497,12 +9568,12 @@ done test "$ac_cv_func_crypt" != "yes" && { echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:9501: checking for crypt in -lcrypt" >&5 +echo "configure:9572: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` xe_check_libs=" -lcrypt " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9548,12 +9619,12 @@ fi if test -z "$with_wnn" -o "$with_wnn" = "yes"; then echo $ac_n "checking for jl_dic_list_e in -lwnn""... $ac_c" 1>&6 -echo "configure:9552: checking for jl_dic_list_e in -lwnn" >&5 +echo "configure:9623: checking for jl_dic_list_e in -lwnn" >&5 ac_lib_var=`echo wnn'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9582,12 +9653,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn4""... $ac_c" 1>&6 -echo "configure:9586: checking for jl_dic_list_e in -lwnn4" >&5 +echo "configure:9657: checking for jl_dic_list_e in -lwnn4" >&5 ac_lib_var=`echo wnn4'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn4 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9616,12 +9687,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn6""... $ac_c" 1>&6 -echo "configure:9620: checking for jl_dic_list_e in -lwnn6" >&5 +echo "configure:9691: checking for jl_dic_list_e in -lwnn6" >&5 ac_lib_var=`echo wnn6'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn6 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9650,12 +9721,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dic_list_e in -lwnn6_fromsrc""... $ac_c" 1>&6 -echo "configure:9654: checking for dic_list_e in -lwnn6_fromsrc" >&5 +echo "configure:9725: checking for dic_list_e in -lwnn6_fromsrc" >&5 ac_lib_var=`echo wnn6_fromsrc'_'dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn6_fromsrc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9714,12 +9785,12 @@ EOF if test "$with_wnn6" != "no"; then echo $ac_n "checking for jl_fi_dic_list in -l$libwnn""... $ac_c" 1>&6 -echo "configure:9718: checking for jl_fi_dic_list in -l$libwnn" >&5 +echo "configure:9789: checking for jl_fi_dic_list in -l$libwnn" >&5 ac_lib_var=`echo $libwnn'_'jl_fi_dic_list | sed 'y%./+-%__p_%'` xe_check_libs=" -l$libwnn " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9765,15 +9836,15 @@ EOF if test "$with_canna" != "no"; then ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6 -echo "configure:9769: checking for canna/jrkanji.h" >&5 +echo "configure:9840: checking for canna/jrkanji.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9777: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9800,15 +9871,15 @@ fi c_switch_site="$c_switch_site -I/usr/local/canna/include" ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6 -echo "configure:9804: checking for canna/jrkanji.h" >&5 +echo "configure:9875: checking for canna/jrkanji.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9836,15 +9907,15 @@ fi test -z "$with_canna" && { ac_safe=`echo "canna/RK.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/RK.h""... $ac_c" 1>&6 -echo "configure:9840: checking for canna/RK.h" >&5 +echo "configure:9911: checking for canna/RK.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9919: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9867,12 +9938,12 @@ fi } test -z "$with_canna" && { echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6 -echo "configure:9871: checking for RkBgnBun in -lRKC" >&5 +echo "configure:9942: checking for RkBgnBun in -lRKC" >&5 ac_lib_var=`echo RKC'_'RkBgnBun | sed 'y%./+-%__p_%'` xe_check_libs=" -lRKC " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9906,12 +9977,12 @@ fi } test -z "$with_canna" && { echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6 -echo "configure:9910: checking for jrKanjiControl in -lcanna" >&5 +echo "configure:9981: checking for jrKanjiControl in -lcanna" >&5 ac_lib_var=`echo canna'_'jrKanjiControl | sed 'y%./+-%__p_%'` xe_check_libs=" -lcanna " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9971,12 +10042,12 @@ if test "$need_motif" = "yes" ; then libs_x="-lXm $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXm\" to \$libs_x"; fi echo $ac_n "checking for layout_object_getvalue in -li18n""... $ac_c" 1>&6 -echo "configure:9975: checking for layout_object_getvalue in -li18n" >&5 +echo "configure:10046: checking for layout_object_getvalue in -li18n" >&5 ac_lib_var=`echo i18n'_'layout_object_getvalue | sed 'y%./+-%__p_%'` xe_check_libs=" -li18n " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10073,10 +10144,10 @@ fi for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime getaddrinfo gethostname getnameinfo getpagesize gettimeofday getcwd getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strerror tzset ulimit usleep utimes waitpid vsnprintf fsync ftruncate umask do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10077: checking for $ac_func" >&5 +echo "configure:10148: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10127,13 +10198,13 @@ fi done -for ac_func in getpt _getpt grantpt unlockpt ptsname killpg tcgetpgrp +for ac_func in getpt _getpty grantpt unlockpt ptsname killpg tcgetpgrp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10134: checking for $ac_func" >&5 +echo "configure:10205: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10185,10 +10256,10 @@ done echo $ac_n "checking for openpty""... $ac_c" 1>&6 -echo "configure:10189: checking for openpty" >&5 +echo "configure:10260: checking for openpty" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_openpty=yes" else @@ -10230,12 +10301,12 @@ else echo $ac_n "checking for openpty in -lutil""... $ac_c" 1>&6 -echo "configure:10234: checking for openpty in -lutil" >&5 +echo "configure:10305: checking for openpty in -lutil" >&5 ac_lib_var=`echo util'_'openpty | sed 'y%./+-%__p_%'` xe_check_libs=" -lutil " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10281,15 +10352,15 @@ EOF do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10285: checking for $ac_hdr" >&5 +echo "configure:10356: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10293: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10321,19 +10392,19 @@ done test "$need_libutil" = "yes" && libs_system="$libs_system -lutil" && if test "$extra_verbose" = "yes"; then echo " Appending \"-lutil\" to \$libs_system"; fi fi -for ac_hdr in sys/stropts.h +for ac_hdr in stropts.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10329: checking for $ac_hdr" >&5 +echo "configure:10400: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10408: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10362,14 +10433,14 @@ else fi done -if test "$ac_cv_header_sys_stropts_h" = "yes"; then +if test "$ac_cv_header_stropts_h" = "yes"; then for ac_func in isastream do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10370: checking for $ac_func" >&5 +echo "configure:10441: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10419,19 +10490,19 @@ else fi done - for ac_hdr in sys/strtio.h + for ac_hdr in strtio.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10427: checking for $ac_hdr" >&5 +echo "configure:10498: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10435: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10506: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10468,10 +10539,10 @@ extra_objs="$extra_objs realpath.o" && if test "$extra_verbose" = "yes"; then for ac_func in getloadavg do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10472: checking for $ac_func" >&5 +echo "configure:10543: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10527,15 +10598,15 @@ if test "$ac_cv_func_getloadavg" = "yes"; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10531: checking for $ac_hdr" >&5 +echo "configure:10602: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10610: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10571,12 +10642,12 @@ else echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6 -echo "configure:10575: checking for kstat_open in -lkstat" >&5 +echo "configure:10646: checking for kstat_open in -lkstat" >&5 ac_lib_var=`echo kstat'_'kstat_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lkstat " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10622,15 +10693,15 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:10626: checking for $ac_hdr" >&5 +echo "configure:10697: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10634: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10705: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10662,12 +10733,12 @@ done echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6 -echo "configure:10666: checking for kvm_read in -lkvm" >&5 +echo "configure:10737: checking for kvm_read in -lkvm" >&5 ac_lib_var=`echo kvm'_'kvm_read | sed 'y%./+-%__p_%'` xe_check_libs=" -lkvm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10712,16 +10783,16 @@ fi fi echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6 -echo "configure:10716: checking whether netdb declares h_errno" >&5 +echo "configure:10787: checking whether netdb declares h_errno" >&5 cat > conftest.$ac_ext < int main() { return h_errno; ; return 0; } EOF -if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF @@ -10741,16 +10812,16 @@ fi rm -f conftest* echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6 -echo "configure:10745: checking for sigsetjmp" >&5 +echo "configure:10816: checking for sigsetjmp" >&5 cat > conftest.$ac_ext < int main() { sigjmp_buf bar; sigsetjmp (bar, 0); ; return 0; } EOF -if { (eval echo configure:10754: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10825: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF @@ -10770,11 +10841,11 @@ fi rm -f conftest* echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6 -echo "configure:10774: checking whether localtime caches TZ" >&5 +echo "configure:10845: checking whether localtime caches TZ" >&5 if test "$ac_cv_func_tzset" = "yes"; then cat > conftest.$ac_ext < #if STDC_HEADERS @@ -10809,7 +10880,7 @@ main() exit (0); } EOF -if { (eval echo configure:10813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:10884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then emacs_cv_localtime_cache=no else @@ -10839,9 +10910,9 @@ fi if test "$HAVE_TIMEVAL" = "yes"; then echo $ac_n "checking whether gettimeofday accepts one or two arguments""... $ac_c" 1>&6 -echo "configure:10843: checking whether gettimeofday accepts one or two arguments" >&5 +echo "configure:10914: checking whether gettimeofday accepts one or two arguments" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""two" 1>&6 else @@ -10884,19 +10955,19 @@ fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:10888: checking for inline" >&5 +echo "configure:10959: checking for inline" >&5 ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -10933,20 +11004,21 @@ test "$ac_cv_c_inline" != "no" -a "$GCC" = "yes" && extra_objs="$extra_objs inli fi -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +if test "$__DECC" != "yes"; then + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:10940: checking for working alloca.h" >&5 +echo "configure:11012: checking for working alloca.h" >&5 cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:10950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -10970,10 +11042,10 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:10974: checking for alloca" >&5 +echo "configure:11046: checking for alloca" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -11040,10 +11112,10 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:11044: checking whether alloca needs Cray hooks" >&5 +echo "configure:11116: checking whether alloca needs Cray hooks" >&5 cat > conftest.$ac_ext <&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:11071: checking for $ac_func" >&5 +echo "configure:11143: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -11123,10 +11195,10 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:11127: checking stack direction for C alloca" >&5 +echo "configure:11199: checking stack direction for C alloca" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_c_stack_direction=1 else @@ -11168,21 +11240,22 @@ EOF fi -test -n "$ALLOCA" && extra_objs="$extra_objs $ALLOCA" && if test "$extra_verbose" = "yes"; then + test -n "$ALLOCA" && extra_objs="$extra_objs $ALLOCA" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"$ALLOCA\"" fi +fi ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 -echo "configure:11178: checking for vfork.h" >&5 +echo "configure:11251: checking for vfork.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11186: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11259: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11210,10 +11283,10 @@ else fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 -echo "configure:11214: checking for working vfork" >&5 +echo "configure:11287: checking for working vfork" >&5 cat > conftest.$ac_ext < @@ -11308,7 +11381,7 @@ main() { } } EOF -if { (eval echo configure:11312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_vfork_works=yes else @@ -11334,10 +11407,10 @@ fi echo $ac_n "checking for working strcoll""... $ac_c" 1>&6 -echo "configure:11338: checking for working strcoll" >&5 +echo "configure:11411: checking for working strcoll" >&5 cat > conftest.$ac_ext < main () @@ -11347,7 +11420,7 @@ main () strcoll ("123", "456") >= 0); } EOF -if { (eval echo configure:11351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_strcoll_works=yes else @@ -11375,10 +11448,10 @@ fi for ac_func in getpgrp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:11379: checking for $ac_func" >&5 +echo "configure:11452: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -11429,10 +11502,10 @@ fi done echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6 -echo "configure:11433: checking whether getpgrp takes no argument" >&5 +echo "configure:11506: checking whether getpgrp takes no argument" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_getpgrp_void=yes else @@ -11514,10 +11587,10 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11518: checking for working mmap" >&5 +echo "configure:11591: checking for working mmap" >&5 case "$opsys" in ultrix* ) have_mmap=no ;; *) cat > conftest.$ac_ext < #include @@ -11550,7 +11623,7 @@ int main (int argc, char *argv[]) return 1; } EOF -if { (eval echo configure:11554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:11627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then have_mmap=yes else @@ -11576,9 +11649,9 @@ test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no if test "$rel_alloc $have_mmap" = "default yes"; then if test "$doug_lea_malloc" = "yes"; then echo $ac_n "checking for M_MMAP_THRESHOLD""... $ac_c" 1>&6 -echo "configure:11580: checking for M_MMAP_THRESHOLD" >&5 +echo "configure:11653: checking for M_MMAP_THRESHOLD" >&5 cat > conftest.$ac_ext < int main() { @@ -11590,7 +11663,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:11594: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rel_alloc=no; echo "$ac_t""yes" 1>&6; else @@ -11615,15 +11688,15 @@ EOF ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for termios.h""... $ac_c" 1>&6 -echo "configure:11619: checking for termios.h" >&5 +echo "configure:11692: checking for termios.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11700: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11666,15 +11739,15 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "termio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for termio.h""... $ac_c" 1>&6 -echo "configure:11670: checking for termio.h" >&5 +echo "configure:11743: checking for termio.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11706,10 +11779,10 @@ fi echo $ac_n "checking for socket""... $ac_c" 1>&6 -echo "configure:11710: checking for socket" >&5 +echo "configure:11783: checking for socket" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_socket=yes" else @@ -11747,15 +11820,15 @@ if eval "test \"`echo '$ac_cv_func_'socket`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "netinet/in.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for netinet/in.h""... $ac_c" 1>&6 -echo "configure:11751: checking for netinet/in.h" >&5 +echo "configure:11824: checking for netinet/in.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11759: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11772,15 +11845,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "arpa/inet.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for arpa/inet.h""... $ac_c" 1>&6 -echo "configure:11776: checking for arpa/inet.h" >&5 +echo "configure:11849: checking for arpa/inet.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11857: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11805,9 +11878,9 @@ EOF } echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6 -echo "configure:11809: checking "for sun_len member in struct sockaddr_un"" >&5 +echo "configure:11882: checking "for sun_len member in struct sockaddr_un"" >&5 cat > conftest.$ac_ext < @@ -11818,7 +11891,7 @@ int main() { static struct sockaddr_un x; x.sun_len = 1; ; return 0; } EOF -if { (eval echo configure:11822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11895: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SOCKADDR_SUN_LEN @@ -11836,9 +11909,9 @@ else fi rm -f conftest* echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6 -echo "configure:11840: checking "for ip_mreq struct in netinet/in.h"" >&5 +echo "configure:11913: checking "for ip_mreq struct in netinet/in.h"" >&5 cat > conftest.$ac_ext < @@ -11848,7 +11921,7 @@ int main() { static struct ip_mreq x; ; return 0; } EOF -if { (eval echo configure:11852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_MULTICAST @@ -11879,10 +11952,10 @@ fi echo $ac_n "checking for msgget""... $ac_c" 1>&6 -echo "configure:11883: checking for msgget" >&5 +echo "configure:11956: checking for msgget" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_msgget=yes" else @@ -11920,15 +11993,15 @@ if eval "test \"`echo '$ac_cv_func_'msgget`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6 -echo "configure:11924: checking for sys/ipc.h" >&5 +echo "configure:11997: checking for sys/ipc.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11932: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12005: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11945,15 +12018,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6 -echo "configure:11949: checking for sys/msg.h" >&5 +echo "configure:12022: checking for sys/msg.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12030: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11991,15 +12064,15 @@ fi ac_safe=`echo "dirent.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dirent.h""... $ac_c" 1>&6 -echo "configure:11995: checking for dirent.h" >&5 +echo "configure:12068: checking for dirent.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12003: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12076: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12026,15 +12099,15 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "sys/dir.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/dir.h""... $ac_c" 1>&6 -echo "configure:12030: checking for sys/dir.h" >&5 +echo "configure:12103: checking for sys/dir.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12111: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12067,15 +12140,15 @@ fi ac_safe=`echo "nlist.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for nlist.h""... $ac_c" 1>&6 -echo "configure:12071: checking for nlist.h" >&5 +echo "configure:12144: checking for nlist.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12079: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12152: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12105,22 +12178,22 @@ fi echo "checking "for sound support"" 1>&6 -echo "configure:12109: checking "for sound support"" >&5 +echo "configure:12182: checking "for sound support"" >&5 test -z "$with_native_sound" -a -n "$native_sound_lib" && with_native_sound=yes if test "$with_native_sound" != "no"; then if test -n "$native_sound_lib"; then ac_safe=`echo "multimedia/audio_device.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for multimedia/audio_device.h""... $ac_c" 1>&6 -echo "configure:12116: checking for multimedia/audio_device.h" >&5 +echo "configure:12189: checking for multimedia/audio_device.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12124: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12197: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12168,12 +12241,12 @@ fi if test -z "$native_sound_lib"; then echo $ac_n "checking for ALopenport in -laudio""... $ac_c" 1>&6 -echo "configure:12172: checking for ALopenport in -laudio" >&5 +echo "configure:12245: checking for ALopenport in -laudio" >&5 ac_lib_var=`echo audio'_'ALopenport | sed 'y%./+-%__p_%'` xe_check_libs=" -laudio " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12215,12 +12288,12 @@ fi if test -z "$native_sound_lib"; then echo $ac_n "checking for AOpenAudio in -lAlib""... $ac_c" 1>&6 -echo "configure:12219: checking for AOpenAudio in -lAlib" >&5 +echo "configure:12292: checking for AOpenAudio in -lAlib" >&5 ac_lib_var=`echo Alib'_'AOpenAudio | sed 'y%./+-%__p_%'` xe_check_libs=" -lAlib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12269,15 +12342,15 @@ fi for dir in "machine" "sys" "linux"; do ac_safe=`echo "${dir}/soundcard.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${dir}/soundcard.h""... $ac_c" 1>&6 -echo "configure:12273: checking for ${dir}/soundcard.h" >&5 +echo "configure:12346: checking for ${dir}/soundcard.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12281: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12338,15 +12411,15 @@ fi if test "$with_nas_sound" != "no"; then ac_safe=`echo "audio/audiolib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for audio/audiolib.h""... $ac_c" 1>&6 -echo "configure:12342: checking for audio/audiolib.h" >&5 +echo "configure:12415: checking for audio/audiolib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12350: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12423: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12364,12 +12437,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo $ac_n "checking for AuOpenServer in -laudio""... $ac_c" 1>&6 -echo "configure:12368: checking for AuOpenServer in -laudio" >&5 +echo "configure:12441: checking for AuOpenServer in -laudio" >&5 ac_lib_var=`echo audio'_'AuOpenServer | sed 'y%./+-%__p_%'` xe_check_libs=" -laudio " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12419,7 +12492,7 @@ EOF fi libs_x="-laudio $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-laudio\" to \$libs_x"; fi cat > conftest.$ac_ext < EOF @@ -12450,7 +12523,7 @@ if test "$with_esd_sound" != "no"; then # Extract the first word of "esd-config", so it can be a program name with args. set dummy esd-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:12454: checking for $ac_word" >&5 +echo "configure:12527: checking for $ac_word" >&5 if test -n "$have_esd_config"; then ac_cv_prog_have_esd_config="$have_esd_config" # Let the user override the test. @@ -12479,10 +12552,10 @@ fi c_switch_site="$c_switch_site `esd-config --cflags`" && if test "$extra_verbose" = "yes"; then echo " Appending \"`esd-config --cflags`\" to \$c_switch_site"; fi LIBS="`esd-config --libs` $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"`esd-config --libs`\" to \$LIBS"; fi echo $ac_n "checking for esd_play_stream""... $ac_c" 1>&6 -echo "configure:12483: checking for esd_play_stream" >&5 +echo "configure:12556: checking for esd_play_stream" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_esd_play_stream=yes" else @@ -12556,7 +12629,7 @@ test -z "$with_tty" && with_tty=yes if test "$with_tty" = "yes" ; then echo "checking for TTY-related features" 1>&6 -echo "configure:12560: checking for TTY-related features" >&5 +echo "configure:12633: checking for TTY-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TTY EOF @@ -12572,12 +12645,12 @@ EOF if test -z "$with_ncurses"; then echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 -echo "configure:12576: checking for tgetent in -lncurses" >&5 +echo "configure:12649: checking for tgetent in -lncurses" >&5 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -lncurses " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12621,15 +12694,15 @@ EOF ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6 -echo "configure:12625: checking for ncurses/curses.h" >&5 +echo "configure:12698: checking for ncurses/curses.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12633: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12706: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12651,15 +12724,15 @@ fi ac_safe=`echo "ncurses/term.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/term.h""... $ac_c" 1>&6 -echo "configure:12655: checking for ncurses/term.h" >&5 +echo "configure:12728: checking for ncurses/term.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12663: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12736: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12689,15 +12762,15 @@ fi c_switch_site="$c_switch_site -I/usr/include/ncurses" ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6 -echo "configure:12693: checking for ncurses/curses.h" >&5 +echo "configure:12766: checking for ncurses/curses.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12774: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12732,12 +12805,12 @@ fi for lib in curses termlib termcap; do echo $ac_n "checking for tgetent in -l$lib""... $ac_c" 1>&6 -echo "configure:12736: checking for tgetent in -l$lib" >&5 +echo "configure:12809: checking for tgetent in -l$lib" >&5 ac_lib_var=`echo $lib'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -l$lib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12779,12 +12852,12 @@ fi else echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6 -echo "configure:12783: checking for tgetent in -lcurses" >&5 +echo "configure:12856: checking for tgetent in -lcurses" >&5 ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -lcurses " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12813,12 +12886,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 -echo "configure:12817: checking for tgetent in -ltermcap" >&5 +echo "configure:12890: checking for tgetent in -ltermcap" >&5 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -ltermcap " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12877,15 +12950,15 @@ EOF test -z "$with_gpm" && { ac_safe=`echo "gpm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for gpm.h""... $ac_c" 1>&6 -echo "configure:12881: checking for gpm.h" >&5 +echo "configure:12954: checking for gpm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12889: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12962: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12908,12 +12981,12 @@ fi } test -z "$with_gpm" && { echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6 -echo "configure:12912: checking for Gpm_Open in -lgpm" >&5 +echo "configure:12985: checking for Gpm_Open in -lgpm" >&5 ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'` xe_check_libs=" -lgpm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12974,20 +13047,20 @@ test "$with_x11" = "yes" -o "$with_tty" = "yes" && extra_objs="$extra_objs event test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \ != "no no no" && echo "checking for database support" 1>&6 -echo "configure:12978: checking for database support" >&5 +echo "configure:13051: checking for database support" >&5 if test "$with_database_gdbm $with_database_dbm" != "no no"; then ac_safe=`echo "ndbm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ndbm.h""... $ac_c" 1>&6 -echo "configure:12983: checking for ndbm.h" >&5 +echo "configure:13056: checking for ndbm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13064: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -13017,12 +13090,12 @@ fi if test "$with_database_gdbm" != "no"; then echo $ac_n "checking for dbm_open in -lgdbm""... $ac_c" 1>&6 -echo "configure:13021: checking for dbm_open in -lgdbm" >&5 +echo "configure:13094: checking for dbm_open in -lgdbm" >&5 ac_lib_var=`echo gdbm'_'dbm_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdbm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13061,10 +13134,10 @@ fi if test "$with_database_dbm" != "no"; then echo $ac_n "checking for dbm_open""... $ac_c" 1>&6 -echo "configure:13065: checking for dbm_open" >&5 +echo "configure:13138: checking for dbm_open" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dbm_open=yes" else @@ -13106,12 +13179,12 @@ else echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6 -echo "configure:13110: checking for dbm_open in -ldbm" >&5 +echo "configure:13183: checking for dbm_open in -ldbm" >&5 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'` xe_check_libs=" -ldbm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13163,10 +13236,10 @@ EOF if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6 -echo "configure:13167: checking for Berkeley db.h" >&5 +echo "configure:13240: checking for Berkeley db.h" >&5 for header in "db/db.h" "db.h"; do cat > conftest.$ac_ext < @@ -13188,7 +13261,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:13192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* db_h_file="$header"; break else @@ -13204,9 +13277,9 @@ rm -f conftest* if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley DB version""... $ac_c" 1>&6 -echo "configure:13208: checking for Berkeley DB version" >&5 +echo "configure:13281: checking for Berkeley DB version" >&5 cat > conftest.$ac_ext < #if DB_VERSION_MAJOR > 1 @@ -13225,10 +13298,10 @@ fi rm -f conftest* echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6 -echo "configure:13229: checking for $dbfunc" >&5 +echo "configure:13302: checking for $dbfunc" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$dbfunc=yes" else @@ -13270,12 +13343,12 @@ else echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6 -echo "configure:13274: checking for $dbfunc in -ldb" >&5 +echo "configure:13347: checking for $dbfunc in -ldb" >&5 ac_lib_var=`echo db'_'$dbfunc | sed 'y%./+-%__p_%'` xe_check_libs=" -ldb " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13350,12 +13423,12 @@ fi if test "$with_socks" = "yes"; then echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6 -echo "configure:13354: checking for SOCKSinit in -lsocks" >&5 +echo "configure:13427: checking for SOCKSinit in -lsocks" >&5 ac_lib_var=`echo socks'_'SOCKSinit | sed 'y%./+-%__p_%'` xe_check_libs=" -lsocks " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13421,22 +13494,22 @@ fi if test "$with_modules" != "no"; then echo "checking for module support" 1>&6 -echo "configure:13425: checking for module support" >&5 +echo "configure:13498: checking for module support" >&5 if test "$with_msw" = "yes"; then have_dl=yes; else ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 -echo "configure:13432: checking for dlfcn.h" >&5 +echo "configure:13505: checking for dlfcn.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:13440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:13513: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -13454,12 +13527,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:13458: checking for dlopen in -ldl" >&5 +echo "configure:13531: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` xe_check_libs=" -ldl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13489,12 +13562,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6 -echo "configure:13493: checking for dlopen in -lc" >&5 +echo "configure:13566: checking for dlopen in -lc" >&5 ac_lib_var=`echo c'_'dlopen | sed 'y%./+-%__p_%'` xe_check_libs=" -lc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13544,12 +13617,12 @@ EOF else echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 -echo "configure:13548: checking for shl_load in -ldld" >&5 +echo "configure:13621: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13587,12 +13660,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6 -echo "configure:13591: checking for dld_init in -ldld" >&5 +echo "configure:13664: checking for dld_init in -ldld" >&5 ac_lib_var=`echo dld'_'dld_init | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13648,7 +13721,7 @@ xehost=$canonical xealias=$internal_configuration echo "checking how to build dynamic libraries for ${xehost}" 1>&6 -echo "configure:13652: checking how to build dynamic libraries for ${xehost}" >&5 +echo "configure:13725: checking how to build dynamic libraries for ${xehost}" >&5 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts. case "$xehost" in *-*-linux-gnu*) ;; @@ -13676,9 +13749,9 @@ if test "$GCC" = "yes"; then XEGCC=yes else echo $ac_n "checking checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:13680: checking checking whether we are using GNU C" >&5 +echo "configure:13753: checking checking whether we are using GNU C" >&5 cat > conftest.$ac_ext <&6 -echo "configure:13704: checking how to produce PIC code" >&5 +echo "configure:13777: checking how to produce PIC code" >&5 wl= can_build_shared=yes @@ -13796,18 +13869,18 @@ if test -n "$dll_cflags"; then # Check to make sure the dll_cflags actually works. echo $ac_n "checking if PIC flag ${dll_cflags} really works""... $ac_c" 1>&6 -echo "configure:13800: checking if PIC flag ${dll_cflags} really works" >&5 +echo "configure:13873: checking if PIC flag ${dll_cflags} really works" >&5 save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $dll_cflags -DPIC" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13884: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # On HP-UX, the stripped-down bundled CC doesn't accept +Z, but also @@ -13838,7 +13911,7 @@ cc_produces_so=no xldf= xcldf= echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6 -echo "configure:13842: checking if C compiler can produce shared libraries" >&5 +echo "configure:13915: checking if C compiler can produce shared libraries" >&5 if test "$XEGCC" = yes; then xcldf="-shared" xldf="-shared" @@ -13889,14 +13962,14 @@ if test -n "$xcldf"; then xe_libs= ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* cc_produces_so=yes else @@ -13921,7 +13994,7 @@ if test -z "$LTLD"; then if test "$XEGCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 -echo "configure:13925: checking for ld used by GCC" >&5 +echo "configure:13998: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. @@ -13946,7 +14019,7 @@ echo "configure:13925: checking for ld used by GCC" >&5 esac else echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 -echo "configure:13950: checking for GNU ld" >&5 +echo "configure:14023: checking for GNU ld" >&5 fi if test -z "$LTLD"; then @@ -13984,7 +14057,7 @@ ld_dynamic_link_flags= # Check to see if it really is or isn't GNU ld. echo $ac_n "checking if the linker is GNU ld""... $ac_c" 1>&6 -echo "configure:13988: checking if the linker is GNU ld" >&5 +echo "configure:14061: checking if the linker is GNU ld" >&5 # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LTLD -v 2>&1 &5; then xe_gnu_ld=yes @@ -14012,7 +14085,7 @@ else # OK - only NOW do we futz about with ld. # See if the linker supports building shared libraries. echo $ac_n "checking whether the linker supports shared libraries""... $ac_c" 1>&6 -echo "configure:14016: checking whether the linker supports shared libraries" >&5 +echo "configure:14089: checking whether the linker supports shared libraries" >&5 dll_ld=$CC dll_ldflags=$LDFLAGS ld_shlibs=yes @@ -14227,10 +14300,10 @@ EOF for ac_func in dlerror _dlerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:14231: checking for $ac_func" >&5 +echo "configure:14304: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -14292,11 +14365,11 @@ done fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:14373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else diff --git a/configure.in b/configure.in index dbbcaf6..6dcfa75 100644 --- a/configure.in +++ b/configure.in @@ -57,7 +57,7 @@ dnl - no cache file dnl - non-standard options dnl - suport for extra-verbosity dnl - ordinary libs are handled separately from X libs (might be a mistake) -dnl - various random kludges (e.g. -with-dnet=no +dnl - various random kludges (e.g. -with-dnet=no) dnl PRINT_VAR(var var ...) prints values of shell variables define([PRINT_VAR],[for var in patsubst([$1],[[ @@ -1108,7 +1108,7 @@ case "$canonical" in *-dec-osf1.2 | *-dec-osf1* ) opsys=decosf1-2 ;; *-dec-osf3.[[2-9]] ) opsys=decosf3-2 ;; *-dec-osf3* ) opsys=decosf3-1 ;; - *-dec-osf4* ) opsys=decosf4-0 ;; + *-dec-osf[[4-9]]* ) opsys=decosf4-0 ;; dnl DEC Ultrix *-*-ultrix[[0-3]].* | *-*-ultrix4.0* ) opsys=bsd4-2 ;; @@ -2710,17 +2710,18 @@ dnl Avoid re-AC_DEFINE-ing xmkmf symbols we've already defined above. AC_CHECK_HEADERS(X11/Xlocale.h) - dnl remove this - we should avoid checking for specific OS - AC_MSG_CHECKING(for XFree86) - if test -d "/usr/X386/include" -o \ - -f "/etc/XF86Config" -o \ - -f "/etc/X11/XF86Config" -o \ - -f "/usr/X11R6/lib/X11/XF86Config"; then - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_XFREE386) - else - AC_MSG_RESULT(no) - fi + dnl XFree86 has a non-standard prototype for this X11R6 function + AC_CHECK_FUNCS(XRegisterIMInstantiateCallback) + AC_MSG_CHECKING(for standard XRegisterIMInstantiateCallback prototype) + AC_TRY_COMPILE([ +#define NeedFunctionPrototypes 1 +#include +extern Bool XRegisterIMInstantiateCallback( + Display*, struct _XrmHashBucketRec*, char*, char*, XIMProc, XPointer*); +], [], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_DEFINE(XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE)]) dnl autodetect -lXmu test -z "$with_xmu" && { AC_CHECK_LIB(Xmu, XmuReadBitmapDataFromFile, @@ -3557,10 +3558,10 @@ fi AC_CHECK_FUNCS(cbrt closedir dup2 eaccess fmod fpathconf frexp ftime getaddrinfo gethostname getnameinfo getpagesize gettimeofday getcwd getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strerror tzset ulimit usleep utimes waitpid vsnprintf fsync ftruncate umask) dnl Check for PTY support functions. -dnl getpt is the preferred pty allocation method on glibc systems. -dnl _getpt is the preferred pty allocation method on SGI systems. +dnl getpt is the preferred pty allocation method on glibc systems. +dnl _getpty is the preferred pty allocation method on SGI systems. dnl grantpt, unlockpt, ptsname are defined by Unix98. -AC_CHECK_FUNCS(getpt _getpt grantpt unlockpt ptsname killpg tcgetpgrp) +AC_CHECK_FUNCS(getpt _getpty grantpt unlockpt ptsname killpg tcgetpgrp) dnl openpty is the preferred pty allocation method on BSD and Tru64 systems. dnl openpty might be declared in pty.h or in libutil.h. @@ -3574,10 +3575,10 @@ fi dnl Check for STREAM support functions. dnl Confusingly, "str" means both "string" and "SysV Streams". -AC_CHECK_HEADERS(sys/stropts.h) -if test "$ac_cv_header_sys_stropts_h" = "yes"; then +AC_CHECK_HEADERS(stropts.h) +if test "$ac_cv_header_stropts_h" = "yes"; then AC_CHECK_FUNCS(isastream) - AC_CHECK_HEADERS(sys/strtio.h) dnl TIOCSIGNAL + AC_CHECK_HEADERS(strtio.h) dnl TIOCSIGNAL fi dnl Use our own realpath always. @@ -3697,8 +3698,11 @@ dnl case "${GCC}${opsys}" in hpux* ) dnl AC_CHECK_FUNC(alloca, [:], [AC_CHECK_LIB(PW, alloca)]) dnl esac -AC_FUNC_ALLOCA -test -n "$ALLOCA" && XE_ADD_OBJS($ALLOCA) +dnl AC_FUNC_ALLOCA doesn't know about DEC C's #pragma intrinsic(alloca) +if test "$__DECC" != "yes"; then + AC_FUNC_ALLOCA + test -n "$ALLOCA" && XE_ADD_OBJS($ALLOCA) +fi dnl Check whether vfork exists and works correctly. (This does more dnl than just check for its existence.) If so, it defines HAVE_VFORK_H. diff --git a/etc/NEWS b/etc/NEWS index 856fc15..e2ae0ca 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -255,7 +255,7 @@ height of the default face. Set `window-pixel-scroll-increment' to modify this behavior. ** Operation progress can be displayed using graphical widgets. -See `lprogress-display' for details. This support has been switched +See `progress-feedback' for details. This support has been switched on by default for font-lock and some web browsing functions. If you do not like this behavior set `progress-feedback-use-echo-area'. diff --git a/etc/PACKAGES b/etc/PACKAGES index 138ea65..7251e06 100644 --- a/etc/PACKAGES +++ b/etc/PACKAGES @@ -227,7 +227,8 @@ Front-end for Inferior Lisp. *** os-utils -Miscellaneous single-file O/S utilities. +Miscellaneous single-file O/S utilities, for printing, archiving, +compression, remote shells, etc. *** view-process diff --git a/info/internals.info b/info/internals.info index 4acd152..fd90b74 100644 --- a/info/internals.info +++ b/info/internals.info @@ -41,12 +41,12 @@ Foundation instead of in the original English. Indirect: internals.info-1: 1776 internals.info-2: 46627 -internals.info-3: 94462 -internals.info-4: 144159 +internals.info-3: 94463 +internals.info-4: 144160 internals.info-5: 194051 -internals.info-6: 243653 -internals.info-7: 287720 -internals.info-8: 336587 +internals.info-6: 243655 +internals.info-7: 287722 +internals.info-8: 336589  Tag Table: (Indirect) @@ -65,34 +65,34 @@ Node: The XEmacs Object System (Abstractly Speaking)46627 Node: How Lisp Objects Are Represented in C60713 Node: Rules When Writing New C Code65390 Node: General Coding Rules66194 -Node: Writing Lisp Primitives71914 -Node: Adding Global Lisp Variables83083 -Node: Coding for Mule86721 -Node: Character-Related Data Types87700 -Node: Working With Character and Byte Positions90697 -Node: Conversion to and from External Data94462 -Node: General Guidelines for Writing Mule-Aware Code100603 -Node: An Example of Mule-Aware Code103291 -Node: Techniques for XEmacs Developers105272 -Node: A Summary of the Various XEmacs Modules113219 -Node: Low-Level Modules114039 -Node: Basic Lisp Modules121500 -Node: Modules for Standard Editing Operations128094 -Node: Editor-Level Control Flow Modules133982 -Node: Modules for the Basic Displayable Lisp Objects137493 -Node: Modules for other Display-Related Lisp Objects140446 -Node: Modules for the Redisplay Mechanism141787 -Node: Modules for Interfacing with the File System144159 -Node: Modules for Other Aspects of the Lisp Interpreter and Object System147857 -Node: Modules for Interfacing with the Operating System153310 -Node: Modules for Interfacing with X Windows160866 -Node: Modules for Internationalization164349 -Node: Allocation of Objects in XEmacs Lisp166986 -Node: Introduction to Allocation167507 -Node: Garbage Collection171193 -Node: GCPROing172349 -Node: Garbage Collection - Step by Step179353 -Node: Invocation179745 +Node: Writing Lisp Primitives71915 +Node: Adding Global Lisp Variables83084 +Node: Coding for Mule86722 +Node: Character-Related Data Types87701 +Node: Working With Character and Byte Positions90698 +Node: Conversion to and from External Data94463 +Node: General Guidelines for Writing Mule-Aware Code100604 +Node: An Example of Mule-Aware Code103292 +Node: Techniques for XEmacs Developers105273 +Node: A Summary of the Various XEmacs Modules113220 +Node: Low-Level Modules114040 +Node: Basic Lisp Modules121501 +Node: Modules for Standard Editing Operations128095 +Node: Editor-Level Control Flow Modules133983 +Node: Modules for the Basic Displayable Lisp Objects137494 +Node: Modules for other Display-Related Lisp Objects140447 +Node: Modules for the Redisplay Mechanism141788 +Node: Modules for Interfacing with the File System144160 +Node: Modules for Other Aspects of the Lisp Interpreter and Object System147858 +Node: Modules for Interfacing with the Operating System153311 +Node: Modules for Interfacing with X Windows160867 +Node: Modules for Internationalization164350 +Node: Allocation of Objects in XEmacs Lisp166987 +Node: Introduction to Allocation167508 +Node: Garbage Collection171194 +Node: GCPROing172350 +Node: Garbage Collection - Step by Step179354 +Node: Invocation179746 Node: garbage_collect_1182759 Node: mark_object192239 Node: gc_sweep194051 @@ -103,87 +103,87 @@ Node: sweep_bit_vectors_1203254 Node: Integers and Characters203930 Node: Allocation from Frob Blocks204682 Node: lrecords206286 -Node: Low-level allocation218510 -Node: Cons222617 -Node: Vector223343 -Node: Bit Vector223920 -Node: Symbol224413 -Node: Marker224767 -Node: String225322 -Node: Compiled Function228935 -Node: Dumping229104 -Node: Overview231325 -Node: Data descriptions231895 -Node: Dumping phase233900 -Node: Object inventory234303 -Node: Address allocation237157 -Node: The header238544 -Node: Data dumping239052 -Node: Pointers dumping239713 -Node: Reloading phase240931 -Node: Remaining issues242692 -Node: Events and the Event Loop243653 -Node: Introduction to Events244103 -Node: Main Loop246052 -Node: Specifics of the Event Gathering Mechanism249627 -Node: Specifics About the Emacs Event262080 -Node: The Event Stream Callback Routines262335 -Node: Other Event Loop Functions262580 -Node: Converting Events263720 -Node: Dispatching Events; The Command Builder264329 -Node: Evaluation; Stack Frames; Bindings264564 -Node: Evaluation264906 -Node: Dynamic Binding; The specbinding Stack; Unwind-Protects271461 -Node: Simple Special Forms273845 -Node: Catch and Throw274628 -Node: Symbols and Variables277203 -Node: Introduction to Symbols277467 -Node: Obarrays278535 -Node: Symbol Values282068 -Node: Buffers and Textual Representation284356 -Node: Introduction to Buffers285014 -Node: The Text in a Buffer287720 -Node: Buffer Lists294870 -Node: Markers and Extents296821 -Node: Bufbytes and Emchars299086 -Node: The Buffer Object299301 -Node: MULE Character Sets and Encodings302781 -Node: Character Sets303843 -Node: Encodings307328 -Node: Japanese EUC (Extended Unix Code)308395 -Node: JIS7309227 -Node: Internal Mule Encodings310577 -Node: Internal String Encoding312407 -Node: Internal Character Encoding314552 -Node: CCL316276 -Node: The Lisp Reader and Compiler323029 -Node: Lstreams323242 -Node: Creating an Lstream324273 -Node: Lstream Types325500 -Node: Lstream Functions325752 -Node: Lstream Methods329318 -Node: Consoles; Devices; Frames; Windows332460 -Node: Introduction to Consoles; Devices; Frames; Windows332775 -Node: Point335308 -Node: Window Hierarchy336587 -Node: The Window Object341035 -Node: The Redisplay Mechanism344472 -Node: Critical Redisplay Sections345264 -Node: Line Start Cache346251 -Node: Redisplay Piece by Piece349487 -Node: Extents351524 -Node: Introduction to Extents352058 -Node: Extent Ordering353200 -Node: Format of the Extent Info354441 -Node: Zero-Length Extents356328 -Node: Mathematics of Extent Ordering357726 -Node: Extent Fragments362483 -Node: Faces363569 -Node: Glyphs363685 -Node: Specifiers366704 -Node: Menus366833 -Node: Subprocesses369091 -Node: Interface to X Windows371067 -Node: Index371238 +Node: Low-level allocation218512 +Node: Cons222619 +Node: Vector223345 +Node: Bit Vector223922 +Node: Symbol224415 +Node: Marker224769 +Node: String225324 +Node: Compiled Function228937 +Node: Dumping229106 +Node: Overview231327 +Node: Data descriptions231897 +Node: Dumping phase233902 +Node: Object inventory234305 +Node: Address allocation237159 +Node: The header238546 +Node: Data dumping239054 +Node: Pointers dumping239715 +Node: Reloading phase240933 +Node: Remaining issues242694 +Node: Events and the Event Loop243655 +Node: Introduction to Events244105 +Node: Main Loop246054 +Node: Specifics of the Event Gathering Mechanism249629 +Node: Specifics About the Emacs Event262082 +Node: The Event Stream Callback Routines262337 +Node: Other Event Loop Functions262582 +Node: Converting Events263722 +Node: Dispatching Events; The Command Builder264331 +Node: Evaluation; Stack Frames; Bindings264566 +Node: Evaluation264908 +Node: Dynamic Binding; The specbinding Stack; Unwind-Protects271463 +Node: Simple Special Forms273847 +Node: Catch and Throw274630 +Node: Symbols and Variables277205 +Node: Introduction to Symbols277469 +Node: Obarrays278537 +Node: Symbol Values282070 +Node: Buffers and Textual Representation284358 +Node: Introduction to Buffers285016 +Node: The Text in a Buffer287722 +Node: Buffer Lists294872 +Node: Markers and Extents296823 +Node: Bufbytes and Emchars299088 +Node: The Buffer Object299303 +Node: MULE Character Sets and Encodings302783 +Node: Character Sets303845 +Node: Encodings307330 +Node: Japanese EUC (Extended Unix Code)308397 +Node: JIS7309229 +Node: Internal Mule Encodings310579 +Node: Internal String Encoding312409 +Node: Internal Character Encoding314554 +Node: CCL316278 +Node: The Lisp Reader and Compiler323031 +Node: Lstreams323244 +Node: Creating an Lstream324275 +Node: Lstream Types325502 +Node: Lstream Functions325754 +Node: Lstream Methods329320 +Node: Consoles; Devices; Frames; Windows332462 +Node: Introduction to Consoles; Devices; Frames; Windows332777 +Node: Point335310 +Node: Window Hierarchy336589 +Node: The Window Object341041 +Node: The Redisplay Mechanism344478 +Node: Critical Redisplay Sections345270 +Node: Line Start Cache346257 +Node: Redisplay Piece by Piece349493 +Node: Extents351530 +Node: Introduction to Extents352064 +Node: Extent Ordering353206 +Node: Format of the Extent Info354447 +Node: Zero-Length Extents356334 +Node: Mathematics of Extent Ordering357734 +Node: Extent Fragments362491 +Node: Faces363577 +Node: Glyphs363693 +Node: Specifiers366712 +Node: Menus366841 +Node: Subprocesses369099 +Node: Interface to X Windows371075 +Node: Index371246  End Tag Table diff --git a/info/internals.info-2 b/info/internals.info-2 index 0dbaa54..b3867f7 100644 --- a/info/internals.info-2 +++ b/info/internals.info-2 @@ -590,9 +590,9 @@ copying a supplied argument into a local variable, so that Lisp lists are popular data structures in the C code as well as in Elisp. There are two sets of macros that iterate over lists. `EXTERNAL_LIST_LOOP_N' should be used when the list has been supplied -by the user, and cannot be trusted to be acyclic and nil-terminated. A -`malformed-list' or `circular-list' error will be generated if the list -being iterated over is not entirely kosher. `LIST_LOOP_N', on the +by the user, and cannot be trusted to be acyclic and `nil'-terminated. +A `malformed-list' or `circular-list' error will be generated if the +list being iterated over is not entirely kosher. `LIST_LOOP_N', on the other hand, is faster and less safe, and can be used only on trusted lists. diff --git a/info/lispref.info b/info/lispref.info index f7da7ad..6ab2727 100644 --- a/info/lispref.info +++ b/info/lispref.info @@ -53,51 +53,52 @@ Foundation instead of in the original English. Indirect: lispref.info-1: 2366 lispref.info-2: 48665 -lispref.info-3: 97204 -lispref.info-4: 147044 -lispref.info-5: 195878 -lispref.info-6: 243565 -lispref.info-7: 291843 -lispref.info-8: 340452 -lispref.info-9: 388779 -lispref.info-10: 438231 -lispref.info-11: 486459 -lispref.info-12: 536230 -lispref.info-13: 584130 -lispref.info-14: 632353 -lispref.info-15: 680607 -lispref.info-16: 726799 -lispref.info-17: 775533 -lispref.info-18: 825531 -lispref.info-19: 875222 -lispref.info-20: 924063 -lispref.info-21: 973600 -lispref.info-22: 1021181 -lispref.info-23: 1067505 -lispref.info-24: 1116678 -lispref.info-25: 1165730 -lispref.info-26: 1215205 -lispref.info-27: 1260832 -lispref.info-28: 1310121 -lispref.info-29: 1357971 -lispref.info-30: 1406195 -lispref.info-31: 1455872 -lispref.info-32: 1504421 -lispref.info-33: 1553719 -lispref.info-34: 1595052 -lispref.info-35: 1641357 -lispref.info-36: 1690574 -lispref.info-37: 1727545 -lispref.info-38: 1776475 -lispref.info-39: 1825715 -lispref.info-40: 1874374 -lispref.info-41: 1922471 -lispref.info-42: 1970588 -lispref.info-43: 2018981 -lispref.info-44: 2067685 -lispref.info-45: 2117245 -lispref.info-46: 2159831 -lispref.info-47: 2189044 +lispref.info-3: 97152 +lispref.info-4: 146992 +lispref.info-5: 196731 +lispref.info-6: 245085 +lispref.info-7: 293492 +lispref.info-8: 342147 +lispref.info-9: 387229 +lispref.info-10: 436160 +lispref.info-11: 485017 +lispref.info-12: 533548 +lispref.info-13: 581024 +lispref.info-14: 630620 +lispref.info-15: 678992 +lispref.info-16: 724920 +lispref.info-17: 770257 +lispref.info-18: 817727 +lispref.info-19: 865285 +lispref.info-20: 912910 +lispref.info-21: 960937 +lispref.info-22: 1009857 +lispref.info-23: 1056119 +lispref.info-24: 1102583 +lispref.info-25: 1152243 +lispref.info-26: 1200932 +lispref.info-27: 1249787 +lispref.info-28: 1298454 +lispref.info-29: 1345033 +lispref.info-30: 1393850 +lispref.info-31: 1442263 +lispref.info-32: 1492252 +lispref.info-33: 1540816 +lispref.info-34: 1587991 +lispref.info-35: 1637817 +lispref.info-36: 1686493 +lispref.info-37: 1732226 +lispref.info-38: 1781365 +lispref.info-39: 1828801 +lispref.info-40: 1877354 +lispref.info-41: 1923907 +lispref.info-42: 1972602 +lispref.info-43: 2016977 +lispref.info-44: 2061346 +lispref.info-45: 2107840 +lispref.info-46: 2148682 +lispref.info-47: 2197899 +lispref.info-48: 2211766  Tag Table: (Indirect) @@ -105,813 +106,813 @@ Node: Top2366 Node: Copying48665 Node: Introduction67823 Node: Caveats69414 -Node: Lisp History71145 -Node: Conventions72401 -Node: Some Terms73216 -Node: nil and t73937 -Node: Evaluation Notation75614 -Node: Printing Notation76527 -Node: Error Messages77401 -Node: Buffer Text Notation77842 -Node: Format of Descriptions78717 -Node: A Sample Function Description79571 -Node: A Sample Variable Description83557 -Node: Acknowledgements84465 -Node: Lisp Data Types86443 -Node: Printed Representation88998 -Node: Comments91040 -Node: Primitive Types91937 -Node: Programming Types93596 -Node: Integer Type95548 -Node: Floating Point Type96585 -Node: Character Type97204 -Node: Symbol Type105108 -Node: Sequence Type107803 -Node: Cons Cell Type109322 -Node: Dotted Pair Notation113806 -Node: Association List Type115927 -Node: Array Type116810 -Node: String Type118276 -Node: Vector Type120957 -Node: Bit Vector Type121729 -Node: Function Type122591 -Node: Macro Type123704 -Node: Primitive Function Type124401 -Node: Compiled-Function Type125927 -Node: Autoload Type126481 -Node: Char Table Type127495 -Node: Hash Table Type127669 -Node: Range Table Type128824 -Node: Weak List Type129677 -Node: Editing Types129827 -Node: Buffer Type131454 -Node: Marker Type133481 -Node: Extent Type134205 -Node: Window Type135473 -Node: Frame Type136884 -Node: Device Type137679 -Node: Console Type138505 -Node: Window Configuration Type139706 -Node: Event Type140404 -Node: Process Type140568 -Node: Stream Type141603 -Node: Keymap Type142726 -Node: Syntax Table Type143264 -Node: Display Table Type144287 -Node: Database Type144726 -Node: Charset Type144892 -Node: Coding System Type145056 -Node: ToolTalk Message Type145240 -Node: ToolTalk Pattern Type145439 -Node: Window-System Types145611 -Node: Face Type146757 -Node: Glyph Type146888 -Node: Specifier Type147044 -Node: Font Instance Type147217 -Node: Color Instance Type147407 -Node: Image Instance Type147604 -Node: Toolbar Button Type147802 -Node: Subwindow Type147995 -Node: X Resource Type148174 -Node: Type Predicates148327 -Node: Equality Predicates157456 -Node: Numbers162261 -Node: Integer Basics163716 -Node: Float Basics166065 -Node: Predicates on Numbers167807 -Node: Comparison of Numbers169440 -Node: Numeric Conversions173261 -Node: Arithmetic Operations174727 -Node: Rounding Operations180192 -Node: Bitwise Operations181297 -Node: Math Functions190343 -Node: Random Numbers192659 -Node: Strings and Characters194425 -Node: String Basics195878 -Node: Predicates for Strings198296 -Node: Creating Strings199059 -Node: Predicates for Characters204376 -Node: Character Codes205447 -Node: Text Comparison206860 -Node: String Conversion210222 -Node: Modifying Strings213898 -Node: String Properties214539 -Node: Formatting Strings215184 -Node: Character Case224802 -Node: Case Tables227948 -Node: Char Tables231846 -Node: Char Table Types233238 -Node: Working With Char Tables234813 -Node: Lists236762 -Node: Cons Cells237885 -Node: Lists as Boxes239221 -Node: List-related Predicates241863 -Node: List Elements243565 -Node: Building Lists248594 -Node: Modifying Lists254586 -Node: Setcar255398 -Node: Setcdr257819 -Node: Rearrangement260330 -Node: Sets And Lists265916 -Node: Association Lists270144 -Ref: Association Lists-Footnote-1279435 -Node: Property Lists279640 -Node: Working With Normal Plists281188 -Node: Working With Lax Plists283456 -Node: Converting Plists To/From Alists285696 -Node: Weak Lists287044 -Node: Sequences Arrays Vectors289207 -Node: Sequence Functions291843 -Node: Arrays295502 -Node: Array Functions298566 -Node: Vectors301099 -Node: Vector Functions302597 -Node: Bit Vectors305168 -Node: Bit Vector Functions306013 -Node: Symbols308263 -Node: Symbol Components309312 -Node: Definitions313485 -Node: Creating Symbols315710 -Node: Symbol Properties322744 -Node: Plists and Alists324271 -Node: Object Plists326020 -Node: Other Plists328780 -Node: Evaluation330582 -Node: Intro Eval331387 -Ref: Intro Eval-Footnote-1334740 -Node: Eval334875 -Node: Forms339293 -Node: Self-Evaluating Forms340452 -Node: Symbol Forms341965 -Node: Classifying Lists342882 -Node: Function Indirection343638 -Node: Function Forms346749 -Node: Macro Forms347746 -Node: Special Forms349346 -Node: Autoloading351655 -Node: Quoting352153 -Node: Control Structures353514 -Node: Sequencing355134 -Node: Conditionals357999 -Node: Combining Conditions361422 -Node: Iteration364692 -Node: Nonlocal Exits366471 -Node: Catch and Throw367173 -Node: Examples of Catch371012 -Node: Errors373031 -Node: Signaling Errors374520 -Node: Processing of Errors379259 -Node: Handling Errors381538 -Node: Error Symbols388779 -Node: Cleanups392735 -Node: Variables396513 -Node: Global Variables398282 -Node: Constant Variables399358 -Node: Local Variables399984 -Node: Void Variables404921 -Node: Defining Variables408437 -Node: Accessing Variables415601 -Node: Setting Variables417026 -Node: Variable Scoping421545 -Node: Scope423144 -Node: Extent424669 -Node: Impl of Scope426148 -Node: Using Scoping428111 -Node: Buffer-Local Variables429633 -Node: Intro to Buffer-Local430469 -Node: Creating Buffer-Local433012 -Node: Default Value438231 -Node: Variable Aliases441374 -Node: Functions443159 -Node: What Is a Function444253 -Node: Lambda Expressions448299 -Node: Lambda Components449209 -Node: Simple Lambda451041 -Node: Argument List452698 -Node: Function Documentation456426 -Node: Function Names458368 -Node: Defining Functions460941 -Node: Calling Functions463981 -Node: Mapping Functions467830 -Node: Anonymous Functions470518 -Node: Function Cells473763 -Node: Inline Functions478573 -Node: Related Topics480383 -Node: Macros481436 -Node: Simple Macro482720 -Node: Expansion483455 -Node: Compiling Macros486459 -Node: Defining Macros488295 -Node: Backquote489612 -Node: Problems with Macros492009 -Node: Argument Evaluation492704 -Node: Surprising Local Vars495619 -Node: Eval During Expansion497687 -Node: Repeated Expansion499380 -Node: Customization501296 -Node: Common Keywords501765 -Node: Group Definitions504610 -Node: Variable Definitions506802 -Node: Customization Types511792 -Node: Simple Types513227 -Node: Composite Types515384 -Node: Splicing into Lists520074 -Node: Type Keywords521909 -Node: Loading525429 -Node: How Programs Do Loading527104 -Node: Autoload536230 -Node: Repeated Loading542309 -Node: Named Features544422 -Node: Unloading550854 -Node: Hooks for Loading553010 -Node: Byte Compilation553727 -Node: Speed of Byte-Code555644 -Node: Compilation Functions556851 -Node: Docs and Compilation563239 -Node: Dynamic Loading565892 -Node: Eval During Compile568256 -Node: Compiled-Function Objects569521 -Node: Disassembly574319 -Node: Debugging581573 -Node: Debugger582985 -Node: Error Debugging584130 -Node: Infinite Loops586883 -Node: Function Debugging588127 -Node: Explicit Debug590917 -Node: Using Debugger591688 -Node: Debugger Commands593550 -Node: Invoking the Debugger597867 -Node: Internals of Debugger601782 -Node: Syntax Errors606669 -Node: Excess Open607917 -Node: Excess Close609792 -Node: Compilation Errors611213 -Node: Edebug612501 -Node: Using Edebug614609 -Node: Instrumenting617306 -Node: Edebug Execution Modes620795 -Node: Jumping623905 -Node: Edebug Misc626248 -Node: Breakpoints627637 -Node: Global Break Condition630443 -Node: Embedded Breakpoints631398 -Node: Trapping Errors632353 -Node: Edebug Views634429 -Node: Edebug Eval636394 -Node: Eval List637571 -Node: Reading in Edebug640956 -Node: Printing in Edebug641755 -Node: Tracing643470 -Node: Coverage Testing645356 -Node: The Outside Context647397 -Node: Checking Whether to Stop648346 -Node: Edebug Display Update648993 -Node: Edebug Recursive Edit651016 -Node: Instrumenting Macro Calls652671 -Node: Specification List655153 -Node: Backtracking664564 -Node: Debugging Backquote666502 -Node: Specification Examples670208 -Node: Edebug Options672275 -Node: Read and Print677612 -Node: Streams Intro678589 -Node: Input Streams680607 -Node: Input Functions685508 -Node: Output Streams687568 -Node: Output Functions691619 -Node: Output Variables695919 -Node: Minibuffers700718 -Node: Intro to Minibuffers701870 -Node: Text from Minibuffer704058 -Node: Object from Minibuffer709144 -Node: Minibuffer History713239 -Node: Completion716218 -Node: Basic Completion718193 -Node: Minibuffer Completion723222 -Node: Completion Commands726799 -Node: High-Level Completion731456 -Node: Reading File Names736199 -Node: Programmed Completion739891 -Node: Yes-or-No Queries742273 -Node: Multiple Queries748010 -Node: Reading a Password752077 -Node: Minibuffer Misc753414 -Node: Command Loop758284 -Node: Command Overview759628 -Node: Defining Commands762906 -Node: Using Interactive763654 -Node: Interactive Codes768427 -Node: Interactive Examples774219 -Node: Interactive Call775533 -Node: Command Loop Info780934 -Node: Events785913 -Node: Event Types787373 -Node: Event Contents789296 -Node: Event Predicates793772 -Node: Accessing Mouse Event Positions795097 -Node: Frame-Level Event Position Info795796 -Node: Window-Level Event Position Info796836 -Node: Event Text Position Info798600 -Node: Event Glyph Position Info801092 -Node: Event Toolbar Position Info802415 -Node: Other Event Position Info803086 -Node: Accessing Other Event Info803495 -Node: Working With Events805115 -Node: Converting Events811103 -Node: Reading Input814055 -Node: Key Sequence Input815057 -Node: Reading One Event817011 -Node: Dispatching an Event819828 -Node: Quoted Character Input820279 -Node: Peeking and Discarding821627 -Node: Waiting825531 -Node: Quitting827839 -Node: Prefix Command Arguments832247 -Node: Recursive Editing837334 -Node: Disabling Commands842130 -Node: Command History844198 -Node: Keyboard Macros845935 -Node: Keymaps848152 -Node: Keymap Terminology849729 -Node: Format of Keymaps852658 -Node: Creating Keymaps853069 -Node: Inheritance and Keymaps855148 -Node: Key Sequences857520 -Node: Prefix Keys862316 -Node: Active Keymaps865901 -Node: Key Lookup875222 -Node: Functions for Key Lookup880385 -Node: Changing Key Bindings886082 -Node: Key Binding Commands892979 -Node: Scanning Keymaps895044 -Node: Other Keymap Functions903555 -Node: Menus904177 -Node: Menu Format904769 -Node: Menubar Format913415 -Node: Menubar914040 -Node: Modifying Menus917153 -Node: Menu Filters922167 -Node: Pop-Up Menus924063 -Node: Menu Accelerators926268 -Node: Creating Menu Accelerators927024 -Node: Keyboard Menu Traversal928384 -Node: Menu Accelerator Functions929111 -Node: Buffers Menu932188 -Node: Dialog Boxes933482 -Node: Dialog Box Format933649 -Node: Dialog Box Functions935074 -Node: Toolbar935471 -Node: Toolbar Intro935906 -Node: Creating Toolbar938306 -Node: Toolbar Descriptor Format939223 -Node: Specifying the Toolbar943720 -Node: Other Toolbar Variables947325 -Node: Gutter951751 -Node: Gutter Intro952340 -Node: Creating Gutter954343 -Node: Gutter Descriptor Format957226 -Node: Specifying a Gutter961683 -Node: Other Gutter Variables965216 -Node: Common Gutter Widgets969601 -Node: Buffer Tabs970593 -Node: Progress Bars970734 -Node: Scrollbars970879 -Node: Drag and Drop971014 -Node: Supported Protocols972090 -Node: OffiX DND972593 -Node: CDE dt973600 -Node: MSWindows OLE974191 -Node: Loose ends974362 -Node: Drop Interface974754 -Node: Drag Interface975776 -Node: Modes975950 -Node: Major Modes976901 -Node: Major Mode Conventions979816 -Node: Example Major Modes985771 -Node: Auto Major Mode993804 -Node: Mode Help1001252 -Node: Derived Modes1002353 -Node: Minor Modes1004544 -Node: Minor Mode Conventions1005846 -Node: Keymaps and Minor Modes1008709 -Node: Modeline Format1009544 -Node: Modeline Data1011312 -Node: Modeline Variables1016465 -Node: %-Constructs1021181 -Node: Hooks1024168 -Node: Documentation1030930 -Node: Documentation Basics1032353 -Node: Accessing Documentation1035403 -Node: Keys in Documentation1041682 -Node: Describing Characters1045161 -Node: Help Functions1047510 -Node: Obsoleteness1053961 -Node: Files1056955 -Node: Visiting Files1058880 -Node: Visiting Functions1060385 -Node: Subroutines of Visiting1065432 -Node: Saving Buffers1067505 -Node: Reading from Files1073598 -Node: Writing to Files1075755 -Node: File Locks1078472 -Node: Information about Files1081525 -Node: Testing Accessibility1082286 -Node: Kinds of Files1086026 -Node: Truenames1087707 -Node: File Attributes1088709 -Node: Changing File Attributes1093848 -Node: File Names1099254 -Node: File Name Components1100863 -Node: Directory Names1103964 -Node: Relative File Names1107417 -Node: File Name Expansion1108495 -Node: Unique File Names1112402 -Node: File Name Completion1114017 -Node: User Name Completion1116678 -Node: Contents of Directories1118018 -Node: Create/Delete Dirs1121331 -Node: Magic File Names1122437 -Node: Partial Files1128067 -Node: Intro to Partial Files1128295 -Node: Creating a Partial File1129535 -Node: Detached Partial Files1130470 -Node: Format Conversion1131592 -Node: Files and MS-DOS1138108 -Node: Backups and Auto-Saving1140172 -Node: Backup Files1140847 -Node: Making Backups1142244 -Node: Rename or Copy1144993 -Node: Numbered Backups1147486 -Node: Backup Names1149721 -Node: Auto-Saving1153013 -Node: Reverting1161155 -Node: Buffers1164313 -Node: Buffer Basics1165730 -Node: Current Buffer1167783 -Node: Buffer Names1172471 -Node: Buffer File Name1175676 -Node: Buffer Modification1179795 -Node: Modification Time1181988 -Node: Read Only Buffers1185363 -Node: The Buffer List1187781 -Node: Creating Buffers1192611 -Node: Killing Buffers1194757 -Node: Indirect Buffers1198488 -Node: Windows1201060 -Node: Basic Windows1202538 -Node: Splitting Windows1205636 -Node: Deleting Windows1212525 -Node: Selecting Windows1215205 -Node: Cyclic Window Ordering1218334 -Node: Buffers and Windows1222958 -Node: Displaying Buffers1224799 -Node: Choosing Window1229975 -Node: Window Point1237691 -Node: Window Start1239738 -Node: Vertical Scrolling1244228 -Node: Horizontal Scrolling1250365 -Node: Size of Window1253874 -Node: Position of Window1258592 -Node: Resizing Windows1260832 -Node: Window Configurations1266261 -Node: Frames1269686 -Node: Creating Frames1272027 -Node: Frame Properties1273368 -Node: Property Access1274184 -Node: Initial Properties1275033 -Node: X Frame Properties1277519 -Node: Size and Position1282153 -Node: Frame Name1284149 -Node: Frame Titles1285063 -Node: Deleting Frames1286887 -Node: Finding All Frames1287487 -Node: Frames and Windows1289481 -Node: Minibuffers and Frames1291186 -Node: Input Focus1292104 -Node: Visibility of Frames1295181 -Node: Raising and Lowering1297100 -Node: Frame Configurations1299476 -Node: Frame Hooks1300070 -Node: Consoles and Devices1301875 -Node: Basic Console Functions1304618 -Node: Basic Device Functions1305041 -Node: Console Types and Device Classes1305757 -Node: Connecting to a Console or Device1307958 -Node: The Selected Console and Device1310121 -Node: Console and Device I/O1311147 -Node: Positions1311911 -Node: Point1312880 -Node: Motion1315970 -Node: Character Motion1316737 -Node: Word Motion1318974 -Node: Buffer End Motion1320475 -Node: Text Lines1321972 -Node: Screen Lines1326567 -Node: List Motion1330630 -Node: Skipping Characters1334038 -Node: Excursions1336257 -Node: Narrowing1339289 -Node: Markers1344614 -Node: Overview of Markers1345520 -Node: Predicates on Markers1350212 -Node: Creating Markers1351458 -Node: Information from Markers1355495 -Node: Changing Markers1356593 -Node: The Mark1357971 -Node: The Region1366465 -Node: Text1372151 -Node: Near Point1374850 -Node: Buffer Contents1379037 -Node: Comparing Text1380443 -Node: Insertion1381851 -Node: Commands for Insertion1385693 -Node: Deletion1388649 -Node: User-Level Deletion1392244 -Node: The Kill Ring1396405 -Node: Kill Ring Concepts1398579 -Node: Kill Functions1399633 -Node: Yank Commands1401538 -Node: Low-Level Kill Ring1403409 -Node: Internals of Kill Ring1406195 -Node: Undo1408975 -Node: Maintaining Undo1413304 -Node: Filling1415924 -Node: Margins1421918 -Node: Auto Filling1425847 -Node: Sorting1427028 -Node: Columns1436328 -Node: Indentation1438844 -Node: Primitive Indent1439623 -Node: Mode-Specific Indent1440867 -Node: Region Indent1443378 -Node: Relative Indent1446326 -Node: Indent Tabs1448708 -Node: Motion by Indent1450029 -Node: Case Changes1450808 -Node: Text Properties1454059 -Node: Examining Properties1455872 -Node: Changing Properties1457739 -Node: Property Search1461330 -Node: Special Properties1466041 -Node: Saving Properties1466322 -Node: Substitution1469464 -Node: Registers1472734 -Node: Transposition1475277 -Node: Change Hooks1476171 -Node: Transformations1478211 -Node: Searching and Matching1482596 -Node: String Search1483727 -Node: Regular Expressions1488451 -Node: Syntax of Regexps1489818 -Node: Regexp Example1504421 -Node: Regexp Search1506591 -Node: POSIX Regexps1512679 -Node: Search and Replace1514514 -Node: Match Data1517879 -Node: Simple Match Data1519009 -Node: Replacing Match1523274 -Node: Entire Match Data1525608 -Node: Saving Match Data1527599 -Node: Searching and Case1528980 -Node: Standard Regexps1531014 -Node: Syntax Tables1533212 -Node: Syntax Basics1534326 -Node: Syntax Descriptors1537298 -Node: Syntax Class Table1539148 -Node: Syntax Flags1545186 -Node: Syntax Table Functions1548403 -Node: Motion and Syntax1552267 -Node: Parsing Expressions1553719 -Node: Standard Syntax Tables1559788 -Node: Syntax Table Internals1560632 -Node: Abbrevs1561658 -Node: Abbrev Mode1563461 -Node: Abbrev Tables1564181 -Node: Defining Abbrevs1565714 -Node: Abbrev Files1567619 -Node: Abbrev Expansion1569392 -Node: Standard Abbrev Tables1574023 -Node: Extents1575182 -Node: Intro to Extents1576425 -Node: Creating and Modifying Extents1580417 -Node: Extent Endpoints1581924 -Node: Finding Extents1585187 -Node: Mapping Over Extents1588935 -Node: Extent Properties1595052 -Node: Detached Extents1605196 -Node: Extent Parents1607055 -Node: Duplicable Extents1608749 -Node: Extents and Events1611970 -Node: Atomic Extents1613877 -Node: Specifiers1614324 -Node: Introduction to Specifiers1616437 -Node: Specifiers In-Depth1618747 -Node: Specifier Instancing1623659 -Node: Specifier Types1626921 -Node: Adding Specifications1631995 -Node: Retrieving Specifications1641357 -Node: Specifier Tag Functions1645092 -Node: Specifier Instancing Functions1648326 -Node: Specifier Example1651733 -Node: Creating Specifiers1654889 -Node: Specifier Validation Functions1659206 -Node: Other Specification Functions1661590 -Node: Faces and Window-System Objects1665409 -Node: Faces1665733 -Node: Merging Faces1667350 -Node: Basic Face Functions1669311 -Node: Face Properties1671409 -Node: Face Convenience Functions1681651 -Node: Other Face Display Functions1684781 -Node: Fonts1685594 -Node: Font Specifiers1686295 -Node: Font Instances1687480 -Node: Font Instance Names1688447 -Node: Font Instance Size1689288 -Node: Font Instance Characteristics1690574 -Node: Font Convenience Functions1691743 -Node: Colors1693033 -Node: Color Specifiers1693473 -Node: Color Instances1695831 -Node: Color Instance Properties1696575 -Node: Color Convenience Functions1697201 -Node: Glyphs1698254 -Node: Glyph Functions1699855 -Node: Creating Glyphs1700262 -Node: Glyph Properties1712902 -Node: Glyph Convenience Functions1722069 -Node: Glyph Dimensions1726016 -Node: Images1727096 -Node: Image Specifiers1727545 -Node: Image Instantiator Conversion1742891 -Node: Image Instances1744256 -Node: Image Instance Types1745007 -Node: Image Instance Functions1747770 -Node: Glyph Types1754821 -Node: Mouse Pointer1756593 -Node: Redisplay Glyphs1759596 -Node: Subwindows1760629 -Node: Annotations1760872 -Node: Annotation Basics1761888 -Node: Annotation Primitives1765826 -Node: Annotation Properties1767155 -Node: Locating Annotations1770195 -Node: Margin Primitives1771032 -Node: Annotation Hooks1772926 -Node: Display1773586 -Node: Refresh Screen1774564 -Node: Truncation1776475 -Node: The Echo Area1779000 -Node: Warnings1785435 -Node: Invisible Text1789871 -Node: Selective Display1792450 -Node: Overlay Arrow1796576 -Node: Temporary Displays1797929 -Node: Blinking1802050 -Node: Usual Display1804235 -Node: Display Tables1806784 -Node: Display Table Format1807588 -Node: Active Display Table1809030 -Node: Character Descriptors1813025 -Node: Beeping1813782 -Node: Hash Tables1818548 -Node: Introduction to Hash Tables1819156 -Node: Working With Hash Tables1825715 -Node: Weak Hash Tables1826832 -Node: Range Tables1828849 -Node: Introduction to Range Tables1829538 -Node: Working With Range Tables1829969 -Node: Databases1830854 -Node: Connecting to a Database1831153 -Node: Working With a Database1832245 -Node: Other Database Functions1833103 -Node: Processes1833677 -Node: Subprocess Creation1835901 -Node: Synchronous Processes1839190 -Node: MS-DOS Subprocesses1845908 -Node: Asynchronous Processes1846982 -Node: Deleting Processes1850695 -Node: Process Information1852566 -Node: Input to Processes1856492 -Node: Signals to Processes1858782 -Node: Output from Processes1863598 -Node: Process Buffers1864410 -Node: Filter Functions1867277 -Node: Accepting Output1872847 -Node: Sentinels1874374 -Node: Process Window Size1877864 -Node: Transaction Queues1878213 -Node: Network1879911 -Node: System Interface1881745 -Node: Starting Up1883015 -Node: Start-up Summary1883609 -Node: Init File1887163 -Node: Terminal-Specific1889544 -Node: Command Line Arguments1892703 -Node: Getting Out1896192 -Node: Killing XEmacs1896761 -Node: Suspending XEmacs1898430 -Node: System Environment1901772 -Node: User Identification1908439 -Node: Time of Day1911968 -Node: Time Conversion1914755 -Node: Timers1919795 -Node: Terminal Input1921968 -Node: Input Modes1922471 -Node: Translating Input1924884 -Node: Recording Input1929049 -Node: Terminal Output1931149 -Node: Flow Control1934772 -Node: Batch Mode1938564 -Node: X-Windows1939946 -Node: X Selections1940817 -Node: X Server1943027 -Node: Resources1943478 -Node: Server Data1948787 -Node: Grabs1949994 -Node: X Miscellaneous1951574 -Node: ToolTalk Support1953959 -Node: XEmacs ToolTalk API Summary1954176 -Node: Sending Messages1955476 -Node: Example of Sending Messages1955727 -Node: Elisp Interface for Sending Messages1956789 -Node: Receiving Messages1963181 -Node: Example of Receiving Messages1963404 -Node: Elisp Interface for Receiving Messages1964240 -Node: LDAP Support1968065 -Node: Building XEmacs with LDAP support1968559 -Node: XEmacs LDAP API1969536 -Node: LDAP Variables1970588 -Node: The High-Level LDAP API1973188 -Node: The Low-Level LDAP API1976651 -Node: The LDAP Lisp Object1977482 -Node: Opening and Closing a LDAP Connection1978035 -Node: Low-level Operations on a LDAP Server1979835 -Node: LDAP Internationalization1982529 -Node: LDAP Internationalization Variables1983434 -Node: Encoder/Decoder Functions1985163 -Node: Syntax of Search Filters1986202 -Node: PostgreSQL Support1987500 -Node: Building XEmacs with PostgreSQL support1987895 -Node: XEmacs PostgreSQL libpq API1989242 -Node: libpq Lisp Variables1991121 -Node: libpq Lisp Symbols and DataTypes1994085 -Node: Synchronous Interface Functions2007325 -Node: Asynchronous Interface Functions2011816 -Node: Large Object Support2015319 -Node: Other libpq Functions2015946 -Node: Unimplemented libpq Functions2018981 -Node: XEmacs PostgreSQL libpq Examples2024300 -Node: Internationalization2030391 -Node: I18N Levels 1 and 22030734 -Node: I18N Level 32031440 -Node: Level 3 Basics2031721 -Node: Level 3 Primitives2032554 -Node: Dynamic Messaging2034160 -Node: Domain Specification2034623 -Node: Documentation String Extraction2036526 -Node: I18N Level 42037444 -Node: MULE2037636 -Node: Internationalization Terminology2038685 -Node: Charsets2050884 -Node: Charset Properties2051580 -Node: Basic Charset Functions2056295 -Node: Charset Property Functions2058476 -Node: Predefined Charsets2060518 -Node: MULE Characters2063438 -Node: Composite Characters2064285 -Node: Coding Systems2065545 -Node: Coding System Types2067685 -Node: ISO 20222071669 -Node: EOL Conversion2083944 -Node: Coding System Properties2085116 -Node: Basic Coding System Functions2089433 -Node: Coding System Property Functions2091467 -Node: Encoding and Decoding Text2092025 -Node: Detection of Textual Encoding2093161 -Node: Big5 and Shift-JIS Functions2094697 -Node: Predefined Coding Systems2095823 -Node: CCL2107917 -Node: CCL Syntax2111021 -Node: CCL Statements2112597 -Node: CCL Expressions2117245 -Node: Calling CCL2119784 -Node: CCL Examples2122773 -Node: Category Tables2122910 -Node: Tips2125268 -Node: Style Tips2125909 -Node: Compilation Tips2135428 -Node: Documentation Tips2137342 -Node: Comment Tips2142851 -Node: Library Headers2145853 -Node: Building XEmacs and Object Allocation2149825 -Node: Building XEmacs2150708 -Node: Pure Storage2157043 -Node: Garbage Collection2159831 -Node: Standard Errors2170970 -Node: Standard Buffer-Local Variables2175179 -Node: Standard Keymaps2177812 -Node: Standard Hooks2181544 -Node: Index2189044 +Node: Lisp History71093 +Node: Conventions72349 +Node: Some Terms73164 +Node: nil and t73885 +Node: Evaluation Notation75562 +Node: Printing Notation76475 +Node: Error Messages77349 +Node: Buffer Text Notation77790 +Node: Format of Descriptions78665 +Node: A Sample Function Description79519 +Node: A Sample Variable Description83505 +Node: Acknowledgements84413 +Node: Lisp Data Types86391 +Node: Printed Representation88946 +Node: Comments90988 +Node: Primitive Types91885 +Node: Programming Types93544 +Node: Integer Type95496 +Node: Floating Point Type96533 +Node: Character Type97152 +Node: Symbol Type105056 +Node: Sequence Type107751 +Node: Cons Cell Type109270 +Node: Dotted Pair Notation113754 +Node: Association List Type115875 +Node: Array Type116758 +Node: String Type118224 +Node: Vector Type120905 +Node: Bit Vector Type121677 +Node: Function Type122539 +Node: Macro Type123652 +Node: Primitive Function Type124349 +Node: Compiled-Function Type125875 +Node: Autoload Type126429 +Node: Char Table Type127443 +Node: Hash Table Type127617 +Node: Range Table Type128772 +Node: Weak List Type129625 +Node: Editing Types129775 +Node: Buffer Type131402 +Node: Marker Type133429 +Node: Extent Type134153 +Node: Window Type135421 +Node: Frame Type136832 +Node: Device Type137627 +Node: Console Type138453 +Node: Window Configuration Type139654 +Node: Event Type140352 +Node: Process Type140516 +Node: Stream Type141551 +Node: Keymap Type142674 +Node: Syntax Table Type143212 +Node: Display Table Type144235 +Node: Database Type144674 +Node: Charset Type144840 +Node: Coding System Type145004 +Node: ToolTalk Message Type145188 +Node: ToolTalk Pattern Type145387 +Node: Window-System Types145559 +Node: Face Type146705 +Node: Glyph Type146836 +Node: Specifier Type146992 +Node: Font Instance Type147165 +Node: Color Instance Type147355 +Node: Image Instance Type147552 +Node: Toolbar Button Type147750 +Node: Subwindow Type147943 +Node: X Resource Type148122 +Node: Type Predicates148275 +Node: Equality Predicates157404 +Node: Numbers162215 +Node: Integer Basics163670 +Node: Float Basics166019 +Node: Predicates on Numbers167761 +Node: Comparison of Numbers169394 +Node: Numeric Conversions173215 +Node: Arithmetic Operations174681 +Node: Rounding Operations180820 +Node: Bitwise Operations181933 +Node: Math Functions190979 +Node: Random Numbers193512 +Node: Strings and Characters195278 +Node: String Basics196731 +Node: Predicates for Strings199149 +Node: Creating Strings199912 +Node: Predicates for Characters205253 +Node: Character Codes206324 +Node: Text Comparison207744 +Node: String Conversion211189 +Node: Modifying Strings214859 +Node: String Properties215500 +Node: Formatting Strings216145 +Node: Character Case225763 +Node: Case Tables229317 +Node: Char Tables233288 +Node: Char Table Types234680 +Node: Working With Char Tables236265 +Node: Lists238282 +Node: Cons Cells239405 +Node: Lists as Boxes240741 +Node: List-related Predicates243383 +Node: List Elements245085 +Node: Building Lists250114 +Node: Modifying Lists256106 +Node: Setcar256918 +Node: Setcdr259349 +Node: Rearrangement261870 +Node: Sets And Lists267456 +Node: Association Lists271684 +Ref: Association Lists-Footnote-1280975 +Node: Property Lists281180 +Node: Working With Normal Plists282728 +Node: Working With Lax Plists285065 +Node: Converting Plists To/From Alists287345 +Node: Weak Lists288693 +Node: Sequences Arrays Vectors290856 +Node: Sequence Functions293492 +Node: Arrays297151 +Node: Array Functions300215 +Node: Vectors302748 +Node: Vector Functions304246 +Node: Bit Vectors306817 +Node: Bit Vector Functions307662 +Node: Symbols309961 +Node: Symbol Components311010 +Node: Definitions315183 +Node: Creating Symbols317408 +Node: Symbol Properties324442 +Node: Plists and Alists325969 +Node: Object Plists327718 +Node: Other Plists330478 +Node: Evaluation332277 +Node: Intro Eval333082 +Ref: Intro Eval-Footnote-1336435 +Node: Eval336570 +Node: Forms340988 +Node: Self-Evaluating Forms342147 +Node: Symbol Forms343660 +Node: Classifying Lists344577 +Node: Function Indirection345333 +Node: Function Forms348432 +Node: Macro Forms349429 +Node: Special Forms351029 +Node: Autoloading353338 +Node: Quoting353836 +Node: Control Structures355197 +Node: Sequencing356817 +Node: Conditionals359682 +Node: Combining Conditions363105 +Node: Iteration366375 +Node: Nonlocal Exits368154 +Node: Catch and Throw368856 +Node: Examples of Catch372695 +Node: Errors374714 +Node: Signaling Errors376203 +Node: Processing of Errors384950 +Node: Handling Errors387229 +Node: Error Symbols394470 +Node: Cleanups398426 +Node: Variables402204 +Node: Global Variables403973 +Node: Constant Variables405049 +Node: Local Variables405675 +Node: Void Variables410612 +Node: Defining Variables414128 +Node: Accessing Variables421292 +Node: Setting Variables422717 +Node: Variable Scoping427236 +Node: Scope428835 +Node: Extent430360 +Node: Impl of Scope431839 +Node: Using Scoping433802 +Node: Buffer-Local Variables435324 +Node: Intro to Buffer-Local436160 +Node: Creating Buffer-Local438703 +Node: Default Value444602 +Node: Variable Aliases447745 +Node: Functions449596 +Node: What Is a Function450690 +Node: Lambda Expressions454736 +Node: Lambda Components455646 +Node: Simple Lambda457478 +Node: Argument List459135 +Node: Function Documentation462863 +Node: Function Names464805 +Node: Defining Functions467378 +Node: Calling Functions470418 +Node: Mapping Functions474266 +Node: Anonymous Functions476954 +Node: Function Cells480199 +Node: Inline Functions485017 +Node: Related Topics486827 +Node: Macros487880 +Node: Simple Macro489164 +Node: Expansion489899 +Node: Compiling Macros492903 +Node: Defining Macros494739 +Node: Backquote496056 +Node: Problems with Macros498453 +Node: Argument Evaluation499148 +Node: Surprising Local Vars502063 +Node: Eval During Expansion504131 +Node: Repeated Expansion505824 +Node: Customization507740 +Node: Common Keywords508209 +Node: Group Definitions511054 +Node: Variable Definitions513246 +Node: Customization Types518236 +Node: Simple Types519671 +Node: Composite Types521828 +Node: Splicing into Lists526518 +Node: Type Keywords528353 +Node: Loading531873 +Node: How Programs Do Loading533548 +Node: Autoload542674 +Node: Repeated Loading548744 +Node: Named Features550857 +Node: Unloading557287 +Node: Hooks for Loading559443 +Node: Byte Compilation560160 +Node: Speed of Byte-Code562077 +Node: Compilation Functions563284 +Node: Docs and Compilation569941 +Node: Dynamic Loading572594 +Node: Eval During Compile574958 +Node: Compiled-Function Objects576223 +Node: Disassembly581024 +Node: Debugging588278 +Node: Debugger589690 +Node: Error Debugging590835 +Node: Infinite Loops593588 +Node: Function Debugging594832 +Node: Explicit Debug597632 +Node: Using Debugger598403 +Node: Debugger Commands600265 +Node: Invoking the Debugger604582 +Node: Internals of Debugger608497 +Node: Syntax Errors613384 +Node: Excess Open614632 +Node: Excess Close616507 +Node: Compilation Errors617928 +Node: Edebug619216 +Node: Using Edebug621324 +Node: Instrumenting624021 +Node: Edebug Execution Modes627510 +Node: Jumping630620 +Node: Edebug Misc632963 +Node: Breakpoints634352 +Node: Global Break Condition637158 +Node: Embedded Breakpoints638113 +Node: Trapping Errors639068 +Node: Edebug Views641144 +Node: Edebug Eval643109 +Node: Eval List644286 +Node: Reading in Edebug647671 +Node: Printing in Edebug648470 +Node: Tracing650185 +Node: Coverage Testing652073 +Node: The Outside Context654114 +Node: Checking Whether to Stop655063 +Node: Edebug Display Update655710 +Node: Edebug Recursive Edit657733 +Node: Instrumenting Macro Calls659388 +Node: Specification List661870 +Node: Backtracking671281 +Node: Debugging Backquote673219 +Node: Specification Examples676925 +Node: Edebug Options678992 +Node: Read and Print684331 +Node: Streams Intro685308 +Node: Input Streams687326 +Node: Input Functions692227 +Node: Output Streams694287 +Node: Output Functions698338 +Node: Output Variables702638 +Node: Minibuffers707439 +Node: Intro to Minibuffers708591 +Node: Text from Minibuffer710779 +Node: Object from Minibuffer715873 +Node: Minibuffer History719966 +Node: Completion722945 +Node: Basic Completion724920 +Node: Minibuffer Completion729803 +Node: Completion Commands733380 +Node: High-Level Completion738037 +Node: Reading File Names742786 +Node: Programmed Completion746478 +Node: Yes-or-No Queries748860 +Node: Multiple Queries754597 +Node: Reading a Password758664 +Node: Minibuffer Misc760007 +Node: Command Loop764887 +Node: Command Overview766231 +Node: Defining Commands769509 +Node: Using Interactive770257 +Node: Interactive Codes775030 +Node: Interactive Examples780822 +Node: Interactive Call782136 +Node: Command Loop Info787551 +Node: Events792530 +Node: Event Types793991 +Node: Event Contents795914 +Node: Event Predicates800390 +Node: Accessing Mouse Event Positions801708 +Node: Frame-Level Event Position Info802407 +Node: Window-Level Event Position Info803447 +Node: Event Text Position Info805211 +Node: Event Glyph Position Info807703 +Node: Event Toolbar Position Info809026 +Node: Other Event Position Info809697 +Node: Accessing Other Event Info810106 +Node: Working With Events811726 +Node: Converting Events817727 +Node: Reading Input821126 +Node: Key Sequence Input822128 +Node: Reading One Event824763 +Node: Dispatching an Event827587 +Node: Quoted Character Input828038 +Node: Peeking and Discarding829386 +Node: Waiting833290 +Node: Quitting835604 +Node: Prefix Command Arguments840012 +Node: Recursive Editing845099 +Node: Disabling Commands849894 +Node: Command History851962 +Node: Keyboard Macros853699 +Node: Keymaps855916 +Node: Keymap Terminology857493 +Node: Format of Keymaps860422 +Node: Creating Keymaps860833 +Node: Inheritance and Keymaps862913 +Node: Key Sequences865285 +Node: Prefix Keys870081 +Node: Active Keymaps873666 +Node: Key Lookup883037 +Node: Functions for Key Lookup888200 +Node: Changing Key Bindings893901 +Node: Key Binding Commands901063 +Node: Scanning Keymaps903128 +Node: Other Keymap Functions911696 +Node: Menus912318 +Node: Menu Format912910 +Node: Menubar Format921556 +Node: Menubar922181 +Node: Modifying Menus925294 +Node: Menu Filters930638 +Node: Pop-Up Menus932534 +Node: Menu Accelerators934862 +Node: Creating Menu Accelerators935618 +Node: Keyboard Menu Traversal936978 +Node: Menu Accelerator Functions937705 +Node: Buffers Menu940781 +Node: Dialog Boxes942075 +Node: Dialog Box Format942242 +Node: Dialog Box Functions943667 +Node: Toolbar944064 +Node: Toolbar Intro944499 +Node: Creating Toolbar946899 +Node: Toolbar Descriptor Format947816 +Node: Specifying the Toolbar952313 +Node: Other Toolbar Variables955920 +Node: Gutter960348 +Node: Gutter Intro960937 +Node: Creating Gutter962940 +Node: Gutter Descriptor Format965827 +Node: Specifying a Gutter970284 +Node: Other Gutter Variables973819 +Node: Common Gutter Widgets978206 +Node: Buffer Tabs979198 +Node: Progress Bars979339 +Node: Scrollbars979484 +Node: Drag and Drop979619 +Node: Supported Protocols980695 +Node: OffiX DND981198 +Node: CDE dt982205 +Node: MSWindows OLE982796 +Node: Loose ends982967 +Node: Drop Interface983359 +Node: Drag Interface984381 +Node: Modes984555 +Node: Major Modes985506 +Node: Major Mode Conventions988421 +Node: Example Major Modes994376 +Node: Auto Major Mode1002409 +Node: Mode Help1009857 +Node: Derived Modes1010958 +Node: Minor Modes1013149 +Node: Minor Mode Conventions1014451 +Node: Keymaps and Minor Modes1017314 +Node: Modeline Format1018149 +Node: Modeline Data1019917 +Node: Modeline Variables1025070 +Node: %-Constructs1029786 +Node: Hooks1032773 +Node: Documentation1039533 +Node: Documentation Basics1040956 +Node: Accessing Documentation1044006 +Node: Keys in Documentation1050287 +Node: Describing Characters1053770 +Node: Help Functions1056119 +Node: Obsoleteness1062569 +Node: Files1065561 +Node: Visiting Files1067486 +Node: Visiting Functions1068991 +Node: Subroutines of Visiting1074149 +Node: Saving Buffers1076222 +Node: Reading from Files1082315 +Node: Writing to Files1084476 +Node: File Locks1087193 +Node: Information about Files1090260 +Node: Testing Accessibility1091021 +Node: Kinds of Files1094761 +Node: Truenames1096442 +Node: File Attributes1097444 +Node: Changing File Attributes1102583 +Node: File Names1108005 +Node: File Name Components1109578 +Node: Directory Names1112023 +Node: Relative File Names1115253 +Node: File Name Expansion1116223 +Node: Unique File Names1119977 +Node: File Name Completion1121592 +Node: User Name Completion1124860 +Node: Contents of Directories1126267 +Node: Create/Delete Dirs1129580 +Node: Magic File Names1130686 +Node: Partial Files1136334 +Node: Intro to Partial Files1136562 +Node: Creating a Partial File1137802 +Node: Detached Partial Files1138738 +Node: Format Conversion1139860 +Node: Files and MS-DOS1145358 +Node: Backups and Auto-Saving1147422 +Node: Backup Files1148097 +Node: Making Backups1149494 +Node: Rename or Copy1152243 +Node: Numbered Backups1154736 +Node: Backup Names1156971 +Node: Auto-Saving1160263 +Node: Reverting1168424 +Node: Buffers1171759 +Node: Buffer Basics1173175 +Node: Current Buffer1175228 +Node: Buffer Names1179932 +Node: Buffer File Name1183139 +Node: Buffer Modification1187258 +Node: Modification Time1189501 +Node: Read Only Buffers1192876 +Node: The Buffer List1196115 +Node: Creating Buffers1200932 +Node: Killing Buffers1203078 +Node: Indirect Buffers1206910 +Node: Windows1209484 +Node: Basic Windows1210962 +Node: Splitting Windows1214060 +Node: Deleting Windows1219386 +Node: Selecting Windows1223304 +Node: Cyclic Window Ordering1227527 +Node: Buffers and Windows1232682 +Node: Displaying Buffers1234460 +Node: Choosing Window1239799 +Node: Window Point1247717 +Node: Window Start1249787 +Node: Vertical Scrolling1254586 +Node: Horizontal Scrolling1260784 +Node: Size of Window1264313 +Node: Position of Window1269031 +Node: Resizing Windows1271284 +Node: Window Configurations1276722 +Node: Frames1280219 +Node: Creating Frames1282560 +Node: Frame Properties1283900 +Node: Property Access1284716 +Node: Initial Properties1285623 +Node: X Frame Properties1288109 +Node: Size and Position1292743 +Node: Frame Name1294741 +Node: Frame Titles1295655 +Node: Deleting Frames1297479 +Node: Finding All Frames1298454 +Node: Frames and Windows1301682 +Node: Minibuffers and Frames1304464 +Node: Input Focus1305382 +Node: Visibility of Frames1308487 +Node: Raising and Lowering1310477 +Node: Frame Configurations1312853 +Node: Frame Hooks1313910 +Node: Consoles and Devices1315715 +Node: Basic Console Functions1318458 +Node: Basic Device Functions1318881 +Node: Console Types and Device Classes1319727 +Node: Connecting to a Console or Device1321994 +Node: The Selected Console and Device1324178 +Node: Console and Device I/O1325204 +Node: Positions1325968 +Node: Point1326937 +Node: Motion1330027 +Node: Character Motion1330794 +Node: Word Motion1333031 +Node: Buffer End Motion1334532 +Node: Text Lines1336069 +Node: Screen Lines1340970 +Node: List Motion1345033 +Node: Skipping Characters1348515 +Node: Excursions1350734 +Node: Narrowing1353774 +Node: Markers1359105 +Node: Overview of Markers1360011 +Node: Predicates on Markers1364703 +Node: Creating Markers1365949 +Node: Information from Markers1370149 +Node: Changing Markers1371247 +Node: The Mark1372775 +Node: The Region1381278 +Node: Text1386964 +Node: Near Point1389663 +Node: Buffer Contents1393850 +Node: Comparing Text1395256 +Node: Insertion1396664 +Node: Commands for Insertion1400574 +Node: Deletion1403468 +Node: User-Level Deletion1407062 +Node: The Kill Ring1411222 +Node: Kill Ring Concepts1413396 +Node: Kill Functions1414450 +Node: Yank Commands1416373 +Node: Low-Level Kill Ring1418244 +Node: Internals of Kill Ring1421330 +Node: Undo1424110 +Node: Maintaining Undo1428447 +Node: Filling1431065 +Node: Margins1437059 +Node: Auto Filling1441082 +Node: Sorting1442263 +Node: Columns1451577 +Node: Indentation1454658 +Node: Primitive Indent1455437 +Node: Mode-Specific Indent1456762 +Node: Region Indent1459294 +Node: Relative Indent1462241 +Node: Indent Tabs1464623 +Node: Motion by Indent1465944 +Node: Case Changes1466723 +Node: Text Properties1470076 +Node: Examining Properties1471889 +Node: Changing Properties1473772 +Node: Property Search1477363 +Node: Special Properties1482082 +Node: Saving Properties1482363 +Node: Substitution1485505 +Node: Registers1488775 +Node: Transposition1491358 +Node: Change Hooks1492252 +Node: Transformations1494292 +Node: Searching and Matching1499396 +Node: String Search1500527 +Node: Regular Expressions1505508 +Node: Syntax of Regexps1506875 +Node: Regexp Example1521478 +Node: Regexp Search1523648 +Node: POSIX Regexps1529979 +Node: Search and Replace1532056 +Node: Match Data1535421 +Node: Simple Match Data1536551 +Node: Replacing Match1540816 +Node: Entire Match Data1543497 +Node: Saving Match Data1545735 +Node: Searching and Case1547123 +Node: Standard Regexps1549157 +Node: Syntax Tables1551355 +Node: Syntax Basics1552469 +Node: Syntax Descriptors1555441 +Node: Syntax Class Table1557291 +Node: Syntax Flags1563329 +Node: Syntax Table Functions1566546 +Node: Motion and Syntax1570834 +Node: Parsing Expressions1572286 +Node: Standard Syntax Tables1578355 +Node: Syntax Table Internals1579199 +Node: Abbrevs1580225 +Node: Abbrev Mode1582028 +Node: Abbrev Tables1582748 +Node: Defining Abbrevs1584287 +Node: Abbrev Files1586208 +Node: Abbrev Expansion1587991 +Node: Standard Abbrev Tables1592622 +Node: Extents1593781 +Node: Intro to Extents1595024 +Node: Creating and Modifying Extents1599016 +Node: Extent Endpoints1600597 +Node: Finding Extents1603860 +Node: Mapping Over Extents1607982 +Node: Extent Properties1614105 +Node: Detached Extents1624266 +Node: Extent Parents1626125 +Node: Duplicable Extents1627819 +Node: Extents and Events1631040 +Node: Atomic Extents1632947 +Node: Specifiers1633394 +Node: Introduction to Specifiers1635507 +Node: Specifiers In-Depth1637817 +Node: Specifier Instancing1642729 +Node: Specifier Types1645991 +Node: Adding Specifications1651065 +Node: Retrieving Specifications1660486 +Node: Specifier Tag Functions1664231 +Node: Specifier Instancing Functions1667465 +Node: Specifier Example1670872 +Node: Creating Specifiers1674028 +Node: Specifier Validation Functions1678345 +Node: Other Specification Functions1680731 +Node: Faces and Window-System Objects1684552 +Node: Faces1684876 +Node: Merging Faces1686493 +Node: Basic Face Functions1688454 +Node: Face Properties1690602 +Node: Face Convenience Functions1700875 +Node: Other Face Display Functions1704095 +Node: Fonts1704907 +Node: Font Specifiers1705608 +Node: Font Instances1706793 +Node: Font Instance Names1707760 +Node: Font Instance Size1708601 +Node: Font Instance Characteristics1709887 +Node: Font Convenience Functions1711065 +Node: Colors1712355 +Node: Color Specifiers1712795 +Node: Color Instances1715155 +Node: Color Instance Properties1715899 +Node: Color Convenience Functions1716525 +Node: Glyphs1717578 +Node: Glyph Functions1719179 +Node: Creating Glyphs1719586 +Node: Glyph Properties1732226 +Node: Glyph Convenience Functions1741393 +Node: Glyph Dimensions1745340 +Node: Images1746420 +Node: Image Specifiers1746869 +Node: Image Instantiator Conversion1762360 +Node: Image Instances1763725 +Node: Image Instance Types1764476 +Node: Image Instance Functions1767241 +Node: Glyph Types1774298 +Node: Mouse Pointer1776070 +Node: Redisplay Glyphs1779073 +Node: Subwindows1780106 +Node: Annotations1780349 +Node: Annotation Basics1781365 +Node: Annotation Primitives1785303 +Node: Annotation Properties1786642 +Node: Locating Annotations1789682 +Node: Margin Primitives1790519 +Node: Annotation Hooks1792413 +Node: Display1793073 +Node: Refresh Screen1794051 +Node: Truncation1796245 +Node: The Echo Area1798770 +Node: Warnings1805207 +Node: Invisible Text1809643 +Node: Selective Display1812222 +Node: Overlay Arrow1816348 +Node: Temporary Displays1817701 +Node: Blinking1821822 +Node: Usual Display1824006 +Node: Display Tables1826555 +Node: Display Table Format1827359 +Node: Active Display Table1828801 +Node: Character Descriptors1832796 +Node: Beeping1833553 +Node: Hash Tables1838319 +Node: Introduction to Hash Tables1838927 +Node: Working With Hash Tables1845486 +Node: Weak Hash Tables1846603 +Node: Range Tables1848620 +Node: Introduction to Range Tables1849309 +Node: Working With Range Tables1849755 +Node: Databases1850714 +Node: Connecting to a Database1851013 +Node: Working With a Database1852120 +Node: Other Database Functions1852994 +Node: Processes1853563 +Node: Subprocess Creation1855787 +Node: Synchronous Processes1859238 +Node: MS-DOS Subprocesses1865960 +Node: Asynchronous Processes1867034 +Node: Deleting Processes1871391 +Node: Process Information1873262 +Node: Input to Processes1877354 +Node: Signals to Processes1880049 +Node: Output from Processes1884864 +Node: Process Buffers1885676 +Node: Filter Functions1888555 +Node: Accepting Output1894146 +Node: Sentinels1895673 +Node: Process Window Size1899163 +Node: Transaction Queues1899512 +Node: Network1901210 +Node: System Interface1903844 +Node: Starting Up1905114 +Node: Start-up Summary1905708 +Node: Init File1909262 +Node: Terminal-Specific1911643 +Node: Command Line Arguments1914802 +Node: Getting Out1918291 +Node: Killing XEmacs1918860 +Node: Suspending XEmacs1920528 +Node: System Environment1923907 +Node: User Identification1930088 +Node: Time of Day1933617 +Node: Time Conversion1936404 +Node: Timers1941646 +Node: Terminal Input1943819 +Node: Input Modes1944322 +Node: Translating Input1946781 +Node: Recording Input1950946 +Node: Terminal Output1953046 +Node: Flow Control1956667 +Node: Batch Mode1960629 +Node: X-Windows1962011 +Node: X Selections1962882 +Node: X Server1965633 +Node: Resources1966084 +Node: Server Data1971395 +Node: Grabs1972602 +Node: X Miscellaneous1974182 +Node: ToolTalk Support1976567 +Node: XEmacs ToolTalk API Summary1976784 +Node: Sending Messages1978084 +Node: Example of Sending Messages1978335 +Node: Elisp Interface for Sending Messages1979397 +Node: Receiving Messages1985993 +Node: Example of Receiving Messages1986216 +Node: Elisp Interface for Receiving Messages1987052 +Node: LDAP Support1990909 +Node: Building XEmacs with LDAP support1991403 +Node: XEmacs LDAP API1992380 +Node: LDAP Variables1993432 +Node: The High-Level LDAP API1996032 +Node: The Low-Level LDAP API1999505 +Node: The LDAP Lisp Object2000336 +Node: Opening and Closing a LDAP Connection2000891 +Node: Low-level Operations on a LDAP Server2002697 +Node: LDAP Internationalization2005421 +Node: LDAP Internationalization Variables2006326 +Node: Encoder/Decoder Functions2008057 +Node: Syntax of Search Filters2009094 +Node: PostgreSQL Support2010392 +Node: Building XEmacs with PostgreSQL support2010787 +Node: XEmacs PostgreSQL libpq API2012134 +Node: libpq Lisp Variables2014013 +Node: libpq Lisp Symbols and DataTypes2016977 +Node: Synchronous Interface Functions2030217 +Node: Asynchronous Interface Functions2034708 +Node: Large Object Support2038213 +Node: Other libpq Functions2038840 +Node: Unimplemented libpq Functions2041875 +Node: XEmacs PostgreSQL libpq Examples2047194 +Node: Internationalization2053285 +Node: I18N Levels 1 and 22053628 +Node: I18N Level 32054334 +Node: Level 3 Basics2054615 +Node: Level 3 Primitives2055448 +Node: Dynamic Messaging2057054 +Node: Domain Specification2057517 +Node: Documentation String Extraction2059187 +Node: I18N Level 42060105 +Node: MULE2060297 +Node: Internationalization Terminology2061346 +Node: Charsets2073545 +Node: Charset Properties2074241 +Node: Basic Charset Functions2078956 +Node: Charset Property Functions2081137 +Node: Predefined Charsets2083207 +Node: MULE Characters2086127 +Node: Composite Characters2087002 +Node: Coding Systems2088269 +Node: Coding System Types2090409 +Node: ISO 20222094393 +Node: EOL Conversion2106668 +Node: Coding System Properties2107840 +Node: Basic Coding System Functions2112163 +Node: Coding System Property Functions2114197 +Node: Encoding and Decoding Text2114755 +Node: Detection of Textual Encoding2115891 +Node: Big5 and Shift-JIS Functions2117427 +Node: Predefined Coding Systems2118579 +Node: CCL2130673 +Node: CCL Syntax2133777 +Node: CCL Statements2135353 +Node: CCL Expressions2140001 +Node: Calling CCL2142540 +Node: CCL Examples2145545 +Node: Category Tables2145682 +Node: Tips2148041 +Node: Style Tips2148682 +Node: Compilation Tips2158201 +Node: Documentation Tips2160115 +Node: Comment Tips2165624 +Node: Library Headers2168626 +Node: Building XEmacs and Object Allocation2172598 +Node: Building XEmacs2173481 +Node: Pure Storage2180059 +Node: Garbage Collection2182847 +Node: Standard Errors2193690 +Node: Standard Buffer-Local Variables2197899 +Node: Standard Keymaps2200532 +Node: Standard Hooks2204266 +Node: Index2211766  End Tag Table diff --git a/info/lispref.info-2 b/info/lispref.info-2 index e2a39c4..9d40b0e 100644 --- a/info/lispref.info-2 +++ b/info/lispref.info-2 @@ -460,7 +460,7 @@ but not flawless. There are a few topics that are not covered, either because we consider them secondary (such as most of the individual modes) or because they are yet to be written. Because we are not able to deal with them completely, we have left out several parts -intentionally. This includes most information about usage on VMS. +intentionally. The manual should be fully correct in what it does cover, and it is therefore open to criticism on anything it says--from specific examples diff --git a/info/lispref.info-4 b/info/lispref.info-4 index 7c10dcf..5f78301 100644 --- a/info/lispref.info-4 +++ b/info/lispref.info-4 @@ -530,7 +530,7 @@ describing the data type. => nil - - Function: old-eq obj1 obj2 + - Function: old-eq object1 object2 This function exists under XEmacs 20 and is exactly like `eq' except that it suffers from the char-int confoundance disease. In other words, it returns `t' if given a character and the @@ -943,8 +943,12 @@ any argument is floating. not check for overflow. Thus `(1+ 134217727)' may evaluate to -134217728, depending on your hardware. - - Function: 1+ number-or-marker - This function returns NUMBER-OR-MARKER plus 1. For example, + - Function: 1+ number + This function returns NUMBER plus one. NUMBER may be a number, + character or marker. Markers and characters are converted to + integers. + + For example, (setq foo 4) => 4 @@ -968,16 +972,21 @@ not check for overflow. Thus `(1+ 134217727)' may evaluate to more convenient and natural way to increment a variable is `(incf foo)'. - - Function: 1- number-or-marker - This function returns NUMBER-OR-MARKER minus 1. + - Function: 1- number + This function returns NUMBER minus one. NUMBER may be a number, + character or marker. Markers and characters are converted to + integers. - Function: abs number This returns the absolute value of NUMBER. - - Function: + &rest numbers-or-markers + - Function: + &rest numbers This function adds its arguments together. When given no arguments, `+' returns 0. + If any of the arguments are characters or markers, they are first + converted to integers. + (+) => 0 (+ 1) @@ -985,12 +994,15 @@ not check for overflow. Thus `(1+ 134217727)' may evaluate to (+ 1 2 3 4) => 10 - - Function: - &optional number-or-marker &rest other-numbers-or-markers + - Function: - &optional number &rest other-numbers The `-' function serves two purposes: negation and subtraction. When `-' has a single argument, the value is the negative of the argument. When there are multiple arguments, `-' subtracts each of - the OTHER-NUMBERS-OR-MARKERS from NUMBER-OR-MARKER, cumulatively. - If there are no arguments, the result is 0. + the OTHER-NUMBERS from NUMBER, cumulatively. If there are no + arguments, an error is signaled. + + If any of the arguments are characters or markers, they are first + converted to integers. (- 10 1 2 3 4) => 0 @@ -999,10 +1011,13 @@ not check for overflow. Thus `(1+ 134217727)' may evaluate to (-) => 0 - - Function: * &rest numbers-or-markers + - Function: * &rest numbers This function multiplies its arguments together, and returns the product. When given no arguments, `*' returns 1. + If any of the arguments are characters or markers, they are first + converted to integers. + (*) => 1 (* 1) @@ -1010,20 +1025,24 @@ not check for overflow. Thus `(1+ 134217727)' may evaluate to (* 1 2 3 4) => 24 - - Function: / dividend divisor &rest divisors - This function divides DIVIDEND by DIVISOR and returns the - quotient. If there are additional arguments DIVISORS, then it - divides DIVIDEND by each divisor in turn. Each argument may be a - number or a marker. + - Function: / dividend &rest divisors + The `/' function serves two purposes: inversion and division. When + `/' has a single argument, the value is the inverse of the + argument. When there are multiple arguments, `/' divides DIVIDEND + by each of the DIVISORS, cumulatively, returning the quotient. If + there are no arguments, an error is signaled. - If all the arguments are integers, then the result is an integer - too. This means the result has to be rounded. On most machines, - the result is rounded towards zero after each division, but some + If none of the arguments are floats, then the result is an integer. + This means the result has to be rounded. On most machines, the + result is rounded towards zero after each division, but some machines may round differently with negative arguments. This is because the Lisp function `/' is implemented using the C division operator, which also permits machine-dependent rounding. As a practical matter, all known machines round in the standard fashion. + If any of the arguments are characters or markers, they are first + converted to integers. + If you divide by 0, an `arith-error' error is signaled. (*Note Errors::.) @@ -1033,6 +1052,8 @@ not check for overflow. Thus `(1+ 134217727)' may evaluate to => 2 (/ 25 3 2) => 4 + (/ 3.0) + => 0.3333333333333333 (/ -17 6) => -2 @@ -1110,20 +1131,20 @@ is a nearby integer. `ffloor' returns the nearest integer below; `fceiling', the nearest integer above; `ftruncate', the nearest integer in the direction towards zero; `fround', the nearest integer. - - Function: ffloor float - This function rounds FLOAT to the next lower integral value, and + - Function: ffloor number + This function rounds NUMBER to the next lower integral value, and returns that value as a floating point number. - - Function: fceiling float - This function rounds FLOAT to the next higher integral value, and + - Function: fceiling number + This function rounds NUMBER to the next higher integral value, and returns that value as a floating point number. - - Function: ftruncate float - This function rounds FLOAT towards zero to an integral value, and + - Function: ftruncate number + This function rounds NUMBER towards zero to an integral value, and returns that value as a floating point number. - - Function: fround float - This function rounds FLOAT to the nearest integral value, and + - Function: fround number + This function rounds NUMBER to the nearest integral value, and returns that value as a floating point number.  @@ -1351,62 +1372,65 @@ Standard Mathematical Functions supported (which is the normal state of affairs). They allow integers as well as floating point numbers as arguments. - - Function: sin arg - - Function: cos arg - - Function: tan arg + - Function: sin number + - Function: cos number + - Function: tan number These are the ordinary trigonometric functions, with argument measured in radians. - - Function: asin arg - The value of `(asin ARG)' is a number between -pi/2 and pi/2 - (inclusive) whose sine is ARG; if, however, ARG is out of range - (outside [-1, 1]), then the result is a NaN. + - Function: asin number + The value of `(asin NUMBER)' is a number between -pi/2 and pi/2 + (inclusive) whose sine is NUMBER; if, however, NUMBER is out of + range (outside [-1, 1]), then the result is a NaN. + + - Function: acos number + The value of `(acos NUMBER)' is a number between 0 and pi + (inclusive) whose cosine is NUMBER; if, however, NUMBER is out of + range (outside [-1, 1]), then the result is a NaN. - - Function: acos arg - The value of `(acos ARG)' is a number between 0 and pi (inclusive) - whose cosine is ARG; if, however, ARG is out of range (outside - [-1, 1]), then the result is a NaN. + - Function: atan number &optional number2 + The value of `(atan NUMBER)' is a number between -pi/2 and pi/2 + (exclusive) whose tangent is NUMBER. - - Function: atan arg - The value of `(atan ARG)' is a number between -pi/2 and pi/2 - (exclusive) whose tangent is ARG. + If optional argument NUMBER2 is supplied, the function returns + `atan2(NUMBER,NUMBER2)'. - - Function: sinh arg - - Function: cosh arg - - Function: tanh arg + - Function: sinh number + - Function: cosh number + - Function: tanh number These are the ordinary hyperbolic trigonometric functions. - - Function: asinh arg - - Function: acosh arg - - Function: atanh arg + - Function: asinh number + - Function: acosh number + - Function: atanh number These are the inverse hyperbolic trigonometric functions. - - Function: exp arg - This is the exponential function; it returns e to the power ARG. - e is a fundamental mathematical constant also called the base of - natural logarithms. + - Function: exp number + This is the exponential function; it returns e to the power + NUMBER. e is a fundamental mathematical constant also called the + base of natural logarithms. - - Function: log arg &optional base - This function returns the logarithm of ARG, with base BASE. If - you don't specify BASE, the base E is used. If ARG is negative, - the result is a NaN. + - Function: log number &optional base + This function returns the logarithm of NUMBER, with base BASE. If + you don't specify BASE, the base E is used. If NUMBER is + negative, the result is a NaN. - - Function: log10 arg - This function returns the logarithm of ARG, with base 10. If ARG - is negative, the result is a NaN. `(log10 X)' == `(log X 10)', at - least approximately. + - Function: log10 number + This function returns the logarithm of NUMBER, with base 10. If + NUMBER is negative, the result is a NaN. `(log10 X)' == `(log X + 10)', at least approximately. - Function: expt x y This function returns X raised to power Y. If both arguments are integers and Y is positive, the result is an integer; in this case, it is truncated to fit the range of possible integer values. - - Function: sqrt arg - This returns the square root of ARG. If ARG is negative, the - value is a NaN. + - Function: sqrt number + This returns the square root of NUMBER. If NUMBER is negative, + the value is a NaN. - - Function: cube-root arg - This returns the cube root of ARG. + - Function: cube-root number + This returns the cube root of NUMBER.  File: lispref.info, Node: Random Numbers, Prev: Math Functions, Up: Numbers diff --git a/info/lispref.info-5 b/info/lispref.info-5 index b423272..95a8a55 100644 --- a/info/lispref.info-5 +++ b/info/lispref.info-5 @@ -142,9 +142,10 @@ putting strings together, or by taking them apart. `bit-vector' (*note Bit Vectors::). This function has not been available in XEmacs prior to 21.0 and FSF Emacs prior to 20.3. - - Function: make-string count character - This function returns a string made up of COUNT repetitions of - CHARACTER. If COUNT is negative, an error is signaled. + - Function: make-string length character + This function returns a new string consisting entirely of LENGTH + successive copies of CHARACTER. LENGTH must be a non-negative + integer. (make-string 5 ?x) => "xxxxx" @@ -284,7 +285,7 @@ File: lispref.info, Node: Character Codes, Next: Text Comparison, Prev: Predi Character Codes =============== - - Function: char-int ch + - Function: char-int character This function converts a character into an equivalent integer. The resulting integer will always be non-negative. The integers in the range 0 - 255 map to characters as follows: @@ -327,10 +328,11 @@ File: lispref.info, Node: Text Comparison, Next: String Conversion, Prev: Cha Comparison of Characters and Strings ==================================== - - Function: char-equal character1 character2 + - Function: char-equal character1 character2 &optional buffer This function returns `t' if the arguments represent the same character, `nil' otherwise. This function ignores differences in - case if `case-fold-search' is non-`nil'. + case if the value of `case-fold-search' is non-`nil' in BUFFER, + which defaults to the current buffer. (char-equal ?x ?x) => t @@ -491,12 +493,12 @@ functions are used primarily for making help messages. See also the function `format' in *Note Formatting Strings::. - Function: string-to-number string &optional base - This function returns the numeric value of the characters in - STRING, read in BASE. It skips spaces and tabs at the beginning - of STRING, then reads as much of STRING as it can interpret as a + This function returns the numeric value represented by STRING, + read in BASE. It skips spaces and tabs at the beginning of + STRING, then reads as much of STRING as it can interpret as a number. (On some systems it ignores other whitespace at the - beginning, not just spaces and tabs.) If the first character after - the ignored whitespace is not a digit or a minus sign, this + beginning, not just spaces and tabs.) If the first character + after the ignored whitespace is not a digit or a minus sign, this function returns 0. If BASE is not specified, it defaults to ten. With BASE other @@ -793,7 +795,7 @@ that are passed to them as arguments. The examples below use the characters `X' and `x' which have ASCII codes 88 and 120 respectively. - - Function: downcase string-or-char + - Function: downcase string-or-char &optional buffer This function converts a character or a string to lower case. When the argument to `downcase' is a string, the function creates @@ -804,6 +806,9 @@ codes 88 and 120 respectively. XEmacs 19.) If the original character is lower case, or is not a letter, then the value equals the original character. + Optional second arg BUFFER specifies which buffer's case tables to + use, and defaults to the current buffer. + (downcase "The cat in the hat") => "the cat in the hat" @@ -811,7 +816,7 @@ codes 88 and 120 respectively. => ?x ;; Under XEmacs 20. => 120 ;; Under XEmacs 19. - - Function: upcase string-or-char + - Function: upcase string-or-char &optional buffer This function converts a character or a string to upper case. When the argument to `upcase' is a string, the function creates @@ -824,6 +829,9 @@ codes 88 and 120 respectively. case, or is not a letter, then the value equals the original character. + Optional second arg BUFFER specifies which buffer's case tables to + use, and defaults to the current buffer. + (upcase "The cat in the hat") => "THE CAT IN THE HAT" @@ -831,7 +839,7 @@ codes 88 and 120 respectively. => ?X ;; Under XEmacs 20. => 88 ;; Under XEmacs 19. - - Function: capitalize string-or-char + - Function: capitalize string-or-char &optional buffer This function capitalizes strings or characters. If STRING-OR-CHAR is a string, the function creates and returns a new string, whose contents are a copy of STRING-OR-CHAR in which each @@ -846,6 +854,9 @@ codes 88 and 120 respectively. When the argument to `capitalize' is a character, `capitalize' has the same result as `upcase'. + Optional second arg BUFFER specifies which buffer's case tables to + use, and defaults to the current buffer. + (capitalize "The cat in the hat") => "The Cat In The Hat" @@ -910,18 +921,19 @@ Changing the standard case table doesn't affect any existing buffers. - Function: case-table-p object This predicate returns non-`nil' if OBJECT is a valid case table. - - Function: set-standard-case-table table - This function makes TABLE the standard case table, so that it will - apply to any buffers created subsequently. + - Function: set-standard-case-table case-table + This function makes CASE-TABLE the standard case table, so that it + will apply to any buffers created subsequently. - Function: standard-case-table This returns the standard case table. - - Function: current-case-table - This function returns the current buffer's case table. + - Function: current-case-table &optional buffer + This function returns the case table of BUFFER, which defaults to + the current buffer. - - Function: set-case-table table - This sets the current buffer's case table to TABLE. + - Function: set-case-table case-table + This sets the current buffer's case table to CASE-TABLE. The following three functions are convenient subroutines for packages that define non-ASCII character sets. They modify a string @@ -1026,8 +1038,8 @@ different sorts of values. The different char table types are character. Higher-level Lisp functions are provided for working with syntax tables. The valid values are integers. - - Function: char-table-type table - This function returns the type of char table TABLE. + - Function: char-table-type char-table + This function returns the type of char table CHAR-TABLE. - Function: char-table-type-list This function returns a list of the recognized char table types. @@ -1046,8 +1058,9 @@ Working With Char Tables should be a symbol, one of `char', `category', `display', `generic', or `syntax'. - - Function: put-char-table range val table - This function sets the value for chars in RANGE to be VAL in TABLE. + - Function: put-char-table range value char-table + This function sets the value for chars in RANGE to be VALUE in + CHAR-TABLE. RANGE specifies one or more characters to be affected and should be one of the following: @@ -1061,21 +1074,21 @@ Working With Char Tables * A single character - VAL must be a value appropriate for the type of TABLE. + VALUE must be a value appropriate for the type of CHAR-TABLE. - - Function: get-char-table ch table - This function finds the value for char CH in TABLE. + - Function: get-char-table character char-table + This function finds the value for CHARACTER in CHAR-TABLE. - - Function: get-range-char-table range table &optional multi - This function finds the value for a range in TABLE. If there is - more than one value, MULTI is returned (defaults to `nil'). + - Function: get-range-char-table range char-table &optional multi + This function finds the value for a range in CHAR-TABLE. If there + is more than one value, MULTI is returned (defaults to `nil'). - - Function: reset-char-table table - This function resets a char table to its default state. + - Function: reset-char-table char-table + This function resets CHAR-TABLE to its default state. - - Function: map-char-table function table &optional range - This function maps FUNCTION over entries in TABLE, calling it with - two args, each key and value in the table. + - Function: map-char-table function char-table &optional range + This function maps FUNCTION over entries in CHAR-TABLE, calling it + with two args, each key and value in the table. RANGE specifies a subrange to map over and is in the same format as the RANGE argument to `put-range-table'. If omitted or `t', it diff --git a/info/lispref.info-6 b/info/lispref.info-6 index 1145cac..4273b1d 100644 --- a/info/lispref.info-6 +++ b/info/lispref.info-6 @@ -403,9 +403,9 @@ Altering List Elements with `setcar' a list, `setcar' replaces one element of a list with a different element. - - Function: setcar cons object - This function stores OBJECT as the new CAR of CONS, replacing its - previous CAR. It returns the value OBJECT. For example: + - Function: setcar cons-cell object + This function stores OBJECT as the new CAR of CONS-CELL, replacing + its previous CAR. It returns the value OBJECT. For example: (setq x '(1 2)) => (1 2) @@ -481,9 +481,9 @@ Altering the CDR of a List The lowest-level primitive for modifying a CDR is `setcdr': - - Function: setcdr cons object - This function stores OBJECT as the new CDR of CONS, replacing its - previous CDR. It returns the value OBJECT. + - Function: setcdr cons-cell object + This function stores OBJECT as the new CDR of CONS-CELL, replacing + its previous CDR. It returns the value OBJECT. Here is an example of replacing the CDR of a list with a different list. All but the first element of the list are removed in favor of a @@ -1082,26 +1082,28 @@ File: lispref.info, Node: Working With Normal Plists, Next: Working With Lax P Working With Normal Plists -------------------------- - - Function: plist-get plist prop &optional default + - Function: plist-get plist property &optional default This function extracts a value from a property list. The function - returns the value corresponding to the given PROP, or DEFAULT if - PROP is not one of the properties on the list. - - - Function: plist-put plist prop val - This function changes the value in PLIST of PROP to VAL. If PROP - is already a property on the list, its value is set to VAL, - otherwise the new PROP VAL pair is added. The new plist is - returned; use `(setq x (plist-put x prop val))' to be sure to use - the new value. The PLIST is modified by side effects. - - - Function: plist-remprop plist prop - This function removes from PLIST the property PROP and its value. - The new plist is returned; use `(setq x (plist-remprop x prop - val))' to be sure to use the new value. The PLIST is modified by - side effects. + returns the value corresponding to the given PROPERTY, or DEFAULT + if PROPERTY is not one of the properties on the list. + + - Function: plist-put plist property value + This function changes the value in PLIST of PROPERTY to VALUE. If + PROPERTY is already a property on the list, its value is set to + VALUE, otherwise the new PROPERTY VALUE pair is added. The new + plist is returned; use `(setq x (plist-put x property value))' to + be sure to use the new value. The PLIST is modified by side + effects. + + - Function: plist-remprop plist property + This function removes from PLIST the property PROPERTY and its + value. The new plist is returned; use `(setq x (plist-remprop x + property))' to be sure to use the new value. The PLIST is + modified by side effects. - - Function: plist-member plist prop - This function returns `t' if PROP has a value specified in PLIST. + - Function: plist-member plist property + This function returns `t' if PROPERTY has a value specified in + PLIST. In the following functions, if optional arg NIL-MEANS-NOT-PRESENT is non-`nil', then a property with a `nil' value is ignored or removed. @@ -1135,22 +1137,22 @@ Working With Lax Plists Recall that a "lax plist" is a property list whose keys are compared using `equal' instead of `eq'. - - Function: lax-plist-get lax-plist prop &optional default + - Function: lax-plist-get lax-plist property &optional default This function extracts a value from a lax property list. The - function returns the value corresponding to the given PROP, or - DEFAULT if PROP is not one of the properties on the list. + function returns the value corresponding to the given PROPERTY, or + DEFAULT if PROPERTY is not one of the properties on the list. - - Function: lax-plist-put lax-plist prop val - This function changes the value in LAX-PLIST of PROP to VAL. + - Function: lax-plist-put lax-plist property value + This function changes the value in LAX-PLIST of PROPERTY to VALUE. - - Function: lax-plist-remprop lax-plist prop - This function removes from LAX-PLIST the property PROP and its + - Function: lax-plist-remprop lax-plist property + This function removes from LAX-PLIST the property PROPERTY and its value. The new plist is returned; use `(setq x (lax-plist-remprop - x prop val))' to be sure to use the new value. The LAX-PLIST is + x property))' to be sure to use the new value. The LAX-PLIST is modified by side effects. - - Function: lax-plist-member lax-plist prop - This function returns `t' if PROP has a value specified in + - Function: lax-plist-member lax-plist property + This function returns `t' if PROPERTY has a value specified in LAX-PLIST. In the following functions, if optional arg NIL-MEANS-NOT-PRESENT is diff --git a/info/lispref.info-7 b/info/lispref.info-7 index 2e16da4..5bc2e97 100644 --- a/info/lispref.info-7 +++ b/info/lispref.info-7 @@ -471,19 +471,20 @@ Functions That Operate on Bit Vectors - Function: bitp object This function returns `t' if OBJECT is either 0 or 1. - - Function: bit-vector &rest objects + - Function: bit-vector &rest bits This function creates and returns a bit vector whose elements are - the arguments OBJECTS. The elements must be either of the two - integers 0 or 1. + the arguments BITS. Each argument must be a bit, i.e. one of the + two integers 0 or 1. (bit-vector 0 0 0 1 0 0 0 0 1 0) => #*0001000010 (bit-vector) => #* - - Function: make-bit-vector length object + - Function: make-bit-vector length bit This function creates and returns a bit vector consisting of - LENGTH elements, each initialized to OBJECT. + LENGTH elements, each initialized to BIT, which must be one of the + two integers 0 or 1. (setq picket-fence (make-bit-vector 9 1)) => #*111111111 @@ -999,7 +1000,7 @@ stored in places other than symbols: (getf '(foo 4) 'foo) => 4 - - Function: putf plist property value + - Macro: putf plist property value This stores VALUE as the value of the PROPERTY property in the property list PLIST. It may modify PLIST destructively, or it may construct a new list structure without altering the old. The diff --git a/info/lispref.info-8 b/info/lispref.info-8 index e9ddbe6..333739c 100644 --- a/info/lispref.info-8 +++ b/info/lispref.info-8 @@ -191,11 +191,11 @@ symbol function indirection when calling `erste'. The built-in function `indirect-function' provides an easy way to perform symbol function indirection explicitly. - - Function: indirect-function function - This function returns the meaning of FUNCTION as a function. If - FUNCTION is a symbol, then it finds FUNCTION's function definition - and starts over with that value. If FUNCTION is not a symbol, - then it returns FUNCTION itself. + - Function: indirect-function object + This function returns the meaning of OBJECT as a function. If + OBJECT is a symbol, then it finds OBJECT's function definition and + starts over with that value. If OBJECT is not a symbol, then it + returns OBJECT itself. Here is how you could define `indirect-function' in Lisp: @@ -980,18 +980,125 @@ and others. Quitting, which happens when the user types `C-g', is not considered an error, but it is handled almost like an error. *Note Quitting::. - - Function: error format-string &rest args - This function signals an error with an error message constructed by - applying `format' (*note String Conversion::) to FORMAT-STRING and - ARGS. + XEmacs has a rich hierarchy of error symbols predefined via +`deferror'. + + error + syntax-error + invalid-read-syntax + list-formation-error + malformed-list + malformed-property-list + circular-list + circular-property-list + + invalid-argument + wrong-type-argument + args-out-of-range + wrong-number-of-arguments + invalid-function + no-catch + + invalid-state + void-function + cyclic-function-indirection + void-variable + cyclic-variable-indirection + + invalid-operation + invalid-change + setting-constant + editing-error + beginning-of-buffer + end-of-buffer + buffer-read-only + io-error + end-of-file + arith-error + range-error + domain-error + singularity-error + overflow-error + underflow-error + + The five most common errors you will probably use or base your new +errors off of are `syntax-error', `invalid-argument', `invalid-state', +`invalid-operation', and `invalid-change'. Note the semantic +differences: + + * `syntax-error' is for errors in complex structures: parsed strings, + lists, and the like. + + * `invalid-argument' is for errors in a simple value. Typically, the + entire value, not just one part of it, is wrong. + + * `invalid-state' means that some settings have been changed in such + a way that their current state is unallowable. More and more, + code is being written more carefully, and catches the error when + the settings are being changed, rather than afterwards. This + leads us to the next error: + + * `invalid-change' means that an attempt is being made to change some + settings into an invalid state. `invalid-change' is a type of + `invalid-operation'. + + * `invalid-operation' refers to all cases where code is trying to do + something that's disallowed. This includes file errors, buffer + errors (e.g. running off the end of a buffer), `invalid-change' as + just mentioned, and arithmetic errors. + + - Function: error datum &rest args + This function signals a non-continuable error. + + DATUM should normally be an error symbol, i.e. a symbol defined + using `define-error'. ARGS will be made into a list, and DATUM + and ARGS passed as the two arguments to `signal', the most basic + error handling function. This error is not continuable: you cannot continue execution after - the error using the debugger `r' or `c' commands. If you wish the - user to be able to continue execution, use `cerror' or `signal' - instead. + the error using the debugger `r' command. See also `cerror'. + + The correct semantics of ARGS varies from error to error, but for + most errors that need to be generated in Lisp code, the first + argument should be a string describing the *context* of the error + (i.e. the exact operation being performed and what went wrong), + and the remaining arguments or \"frobs\" (most often, there is + one) specify the offending object(s) and/or provide additional + details such as the exact error when a file error occurred, e.g.: + + * the buffer in which an editing error occurred. + + * an invalid value that was encountered. (In such cases, the + string should describe the purpose or \"semantics\" of the + value [e.g. if the value is an argument to a function, the + name of the argument; if the value is the value corresponding + to a keyword, the name of the keyword; if the value is + supposed to be a list length, say this and say what the + purpose of the list is; etc.] as well as specifying why the + value is invalid, if that's not self-evident.) + + * the file in which an error occurred. (In such cases, there + should be a second frob, probably a string, specifying the + exact error that occurred. This does not occur in the string + that precedes the first frob, because that frob describes the + exact operation that was happening. + + For historical compatibility, DATUM can also be a string. In this + case, DATUM and ARGS are passed together as the arguments to + `format', and then an error is signalled using the error symbol + `error' and formatted string. Although this usage of `error' is + very common, it is deprecated because it totally defeats the + purpose of having structured errors. There is now a rich set of + defined errors to use. + + See also `cerror', `signal', and `signal-error'." These examples show typical uses of `error': + (error 'syntax-error + "Dialog descriptor must supply at least one button" + descriptor) + (error "You have committed an error. Try something else.") error--> You have committed an error. @@ -1000,17 +1107,12 @@ an error, but it is handled almost like an error. *Note Quitting::. (error "You have committed %d errors." 10) error--> You have committed 10 errors. - `error' works by calling `signal' with two arguments: the error - symbol `error', and a list containing the string returned by - `format'. This is repeated in an endless loop, to ensure that - `error' never returns. - If you want to use your own string as an error message verbatim, don't just write `(error STRING)'. If STRING contains `%', it will be interpreted as a format specifier, with undesirable results. Instead, use `(error "%s" STRING)'. - - Function: cerror format-string &rest args + - Function: cerror datum &rest args This function behaves like `error', except that the error it signals is continuable. That means that debugger commands `c' and `r' can resume execution. @@ -1118,163 +1220,3 @@ Debugging::) is non-`nil'. Unlike error handlers, the debugger runs in the environment of the error, so that you can examine values of variables precisely as they were at the time of the error. - -File: lispref.info, Node: Handling Errors, Next: Error Symbols, Prev: Processing of Errors, Up: Errors - -Writing Code to Handle Errors -............................. - - The usual effect of signaling an error is to terminate the command -that is running and return immediately to the XEmacs editor command -loop. You can arrange to trap errors occurring in a part of your -program by establishing an error handler, with the special form -`condition-case'. A simple example looks like this: - - (condition-case nil - (delete-file filename) - (error nil)) - -This deletes the file named FILENAME, catching any error and returning -`nil' if an error occurs. - - The second argument of `condition-case' is called the "protected -form". (In the example above, the protected form is a call to -`delete-file'.) The error handlers go into effect when this form -begins execution and are deactivated when this form returns. They -remain in effect for all the intervening time. In particular, they are -in effect during the execution of functions called by this form, in -their subroutines, and so on. This is a good thing, since, strictly -speaking, errors can be signaled only by Lisp primitives (including -`signal' and `error') called by the protected form, not by the -protected form itself. - - The arguments after the protected form are handlers. Each handler -lists one or more "condition names" (which are symbols) to specify -which errors it will handle. The error symbol specified when an error -is signaled also defines a list of condition names. A handler applies -to an error if they have any condition names in common. In the example -above, there is one handler, and it specifies one condition name, -`error', which covers all errors. - - The search for an applicable handler checks all the established -handlers starting with the most recently established one. Thus, if two -nested `condition-case' forms offer to handle the same error, the inner -of the two will actually handle it. - - When an error is handled, control returns to the handler. Before -this happens, XEmacs unbinds all variable bindings made by binding -constructs that are being exited and executes the cleanups of all -`unwind-protect' forms that are exited. Once control arrives at the -handler, the body of the handler is executed. - - After execution of the handler body, execution continues by returning -from the `condition-case' form. Because the protected form is exited -completely before execution of the handler, the handler cannot resume -execution at the point of the error, nor can it examine variable -bindings that were made within the protected form. All it can do is -clean up and proceed. - - `condition-case' is often used to trap errors that are predictable, -such as failure to open a file in a call to `insert-file-contents'. It -is also used to trap errors that are totally unpredictable, such as -when the program evaluates an expression read from the user. - - Even when an error is handled, the debugger may still be called if -the variable `debug-on-signal' (*note Error Debugging::) is non-`nil'. -Note that this may yield unpredictable results with code that traps -expected errors as normal part of its operation. Do not set -`debug-on-signal' unless you know what you are doing. - - Error signaling and handling have some resemblance to `throw' and -`catch', but they are entirely separate facilities. An error cannot be -caught by a `catch', and a `throw' cannot be handled by an error -handler (though using `throw' when there is no suitable `catch' signals -an error that can be handled). - - - Special Form: condition-case var protected-form handlers... - This special form establishes the error handlers HANDLERS around - the execution of PROTECTED-FORM. If PROTECTED-FORM executes - without error, the value it returns becomes the value of the - `condition-case' form; in this case, the `condition-case' has no - effect. The `condition-case' form makes a difference when an - error occurs during PROTECTED-FORM. - - Each of the HANDLERS is a list of the form `(CONDITIONS BODY...)'. - Here CONDITIONS is an error condition name to be handled, or a - list of condition names; BODY is one or more Lisp expressions to - be executed when this handler handles an error. Here are examples - of handlers: - - (error nil) - - (arith-error (message "Division by zero")) - - ((arith-error file-error) - (message - "Either division by zero or failure to open a file")) - - Each error that occurs has an "error symbol" that describes what - kind of error it is. The `error-conditions' property of this - symbol is a list of condition names (*note Error Symbols::). Emacs - searches all the active `condition-case' forms for a handler that - specifies one or more of these condition names; the innermost - matching `condition-case' handles the error. Within this - `condition-case', the first applicable handler handles the error. - - After executing the body of the handler, the `condition-case' - returns normally, using the value of the last form in the handler - body as the overall value. - - The argument VAR is a variable. `condition-case' does not bind - this variable when executing the PROTECTED-FORM, only when it - handles an error. At that time, it binds VAR locally to a list of - the form `(ERROR-SYMBOL . DATA)', giving the particulars of the - error. The handler can refer to this list to decide what to do. - For example, if the error is for failure opening a file, the file - name is the second element of DATA--the third element of VAR. - - If VAR is `nil', that means no variable is bound. Then the error - symbol and associated data are not available to the handler. - - Here is an example of using `condition-case' to handle the error -that results from dividing by zero. The handler prints out a warning -message and returns a very large number. - - (defun safe-divide (dividend divisor) - (condition-case err - ;; Protected form. - (/ dividend divisor) - ;; The handler. - (arith-error ; Condition. - (princ (format "Arithmetic error: %s" err)) - 1000000))) - => safe-divide - - (safe-divide 5 0) - -| Arithmetic error: (arith-error) - => 1000000 - -The handler specifies condition name `arith-error' so that it will -handle only division-by-zero errors. Other kinds of errors will not be -handled, at least not by this `condition-case'. Thus, - - (safe-divide nil 3) - error--> Wrong type argument: integer-or-marker-p, nil - - Here is a `condition-case' that catches all kinds of errors, -including those signaled with `error': - - (setq baz 34) - => 34 - - (condition-case err - (if (eq baz 35) - t - ;; This is a call to the function `error'. - (error "Rats! The variable %s was %s, not 35" 'baz baz)) - ;; This is the handler; it is not a form. - (error (princ (format "The error was: %s" err)) - 2)) - -| The error was: (error "Rats! The variable baz was 34, not 35") - => 2 - diff --git a/info/lispref.info-9 b/info/lispref.info-9 index d9a7549..a0554c4 100644 --- a/info/lispref.info-9 +++ b/info/lispref.info-9 @@ -50,6 +50,166 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: lispref.info, Node: Handling Errors, Next: Error Symbols, Prev: Processing of Errors, Up: Errors + +Writing Code to Handle Errors +............................. + + The usual effect of signaling an error is to terminate the command +that is running and return immediately to the XEmacs editor command +loop. You can arrange to trap errors occurring in a part of your +program by establishing an error handler, with the special form +`condition-case'. A simple example looks like this: + + (condition-case nil + (delete-file filename) + (error nil)) + +This deletes the file named FILENAME, catching any error and returning +`nil' if an error occurs. + + The second argument of `condition-case' is called the "protected +form". (In the example above, the protected form is a call to +`delete-file'.) The error handlers go into effect when this form +begins execution and are deactivated when this form returns. They +remain in effect for all the intervening time. In particular, they are +in effect during the execution of functions called by this form, in +their subroutines, and so on. This is a good thing, since, strictly +speaking, errors can be signaled only by Lisp primitives (including +`signal' and `error') called by the protected form, not by the +protected form itself. + + The arguments after the protected form are handlers. Each handler +lists one or more "condition names" (which are symbols) to specify +which errors it will handle. The error symbol specified when an error +is signaled also defines a list of condition names. A handler applies +to an error if they have any condition names in common. In the example +above, there is one handler, and it specifies one condition name, +`error', which covers all errors. + + The search for an applicable handler checks all the established +handlers starting with the most recently established one. Thus, if two +nested `condition-case' forms offer to handle the same error, the inner +of the two will actually handle it. + + When an error is handled, control returns to the handler. Before +this happens, XEmacs unbinds all variable bindings made by binding +constructs that are being exited and executes the cleanups of all +`unwind-protect' forms that are exited. Once control arrives at the +handler, the body of the handler is executed. + + After execution of the handler body, execution continues by returning +from the `condition-case' form. Because the protected form is exited +completely before execution of the handler, the handler cannot resume +execution at the point of the error, nor can it examine variable +bindings that were made within the protected form. All it can do is +clean up and proceed. + + `condition-case' is often used to trap errors that are predictable, +such as failure to open a file in a call to `insert-file-contents'. It +is also used to trap errors that are totally unpredictable, such as +when the program evaluates an expression read from the user. + + Even when an error is handled, the debugger may still be called if +the variable `debug-on-signal' (*note Error Debugging::) is non-`nil'. +Note that this may yield unpredictable results with code that traps +expected errors as normal part of its operation. Do not set +`debug-on-signal' unless you know what you are doing. + + Error signaling and handling have some resemblance to `throw' and +`catch', but they are entirely separate facilities. An error cannot be +caught by a `catch', and a `throw' cannot be handled by an error +handler (though using `throw' when there is no suitable `catch' signals +an error that can be handled). + + - Special Form: condition-case var protected-form handlers... + This special form establishes the error handlers HANDLERS around + the execution of PROTECTED-FORM. If PROTECTED-FORM executes + without error, the value it returns becomes the value of the + `condition-case' form; in this case, the `condition-case' has no + effect. The `condition-case' form makes a difference when an + error occurs during PROTECTED-FORM. + + Each of the HANDLERS is a list of the form `(CONDITIONS BODY...)'. + Here CONDITIONS is an error condition name to be handled, or a + list of condition names; BODY is one or more Lisp expressions to + be executed when this handler handles an error. Here are examples + of handlers: + + (error nil) + + (arith-error (message "Division by zero")) + + ((arith-error file-error) + (message + "Either division by zero or failure to open a file")) + + Each error that occurs has an "error symbol" that describes what + kind of error it is. The `error-conditions' property of this + symbol is a list of condition names (*note Error Symbols::). Emacs + searches all the active `condition-case' forms for a handler that + specifies one or more of these condition names; the innermost + matching `condition-case' handles the error. Within this + `condition-case', the first applicable handler handles the error. + + After executing the body of the handler, the `condition-case' + returns normally, using the value of the last form in the handler + body as the overall value. + + The argument VAR is a variable. `condition-case' does not bind + this variable when executing the PROTECTED-FORM, only when it + handles an error. At that time, it binds VAR locally to a list of + the form `(ERROR-SYMBOL . DATA)', giving the particulars of the + error. The handler can refer to this list to decide what to do. + For example, if the error is for failure opening a file, the file + name is the second element of DATA--the third element of VAR. + + If VAR is `nil', that means no variable is bound. Then the error + symbol and associated data are not available to the handler. + + Here is an example of using `condition-case' to handle the error +that results from dividing by zero. The handler prints out a warning +message and returns a very large number. + + (defun safe-divide (dividend divisor) + (condition-case err + ;; Protected form. + (/ dividend divisor) + ;; The handler. + (arith-error ; Condition. + (princ (format "Arithmetic error: %s" err)) + 1000000))) + => safe-divide + + (safe-divide 5 0) + -| Arithmetic error: (arith-error) + => 1000000 + +The handler specifies condition name `arith-error' so that it will +handle only division-by-zero errors. Other kinds of errors will not be +handled, at least not by this `condition-case'. Thus, + + (safe-divide nil 3) + error--> Wrong type argument: integer-or-marker-p, nil + + Here is a `condition-case' that catches all kinds of errors, +including those signaled with `error': + + (setq baz 34) + => 34 + + (condition-case err + (if (eq baz 35) + t + ;; This is a call to the function `error'. + (error "Rats! The variable %s was %s, not 35" 'baz baz)) + ;; This is the handler; it is not a form. + (error (princ (format "The error was: %s" err)) + 2)) + -| The error was: (error "Rats! The variable baz was 34, not 35") + => 2 + + File: lispref.info, Node: Error Symbols, Prev: Handling Errors, Up: Errors Error Symbols and Condition Names @@ -1044,171 +1204,3 @@ important customization method. * Default Value:: The default value is seen in buffers that don't have their own local values. - -File: lispref.info, Node: Intro to Buffer-Local, Next: Creating Buffer-Local, Up: Buffer-Local Variables - -Introduction to Buffer-Local Variables --------------------------------------- - - A buffer-local variable has a buffer-local binding associated with a -particular buffer. The binding is in effect when that buffer is -current; otherwise, it is not in effect. If you set the variable while -a buffer-local binding is in effect, the new value goes in that binding, -so the global binding is unchanged; this means that the change is -visible in that buffer alone. - - A variable may have buffer-local bindings in some buffers but not in -others. The global binding is shared by all the buffers that don't have -their own bindings. Thus, if you set the variable in a buffer that does -not have a buffer-local binding for it, the new value is visible in all -buffers except those with buffer-local bindings. (Here we are assuming -that there are no `let'-style local bindings to complicate the issue.) - - The most common use of buffer-local bindings is for major modes to -change variables that control the behavior of commands. For example, C -mode and Lisp mode both set the variable `paragraph-start' to specify -that only blank lines separate paragraphs. They do this by making the -variable buffer-local in the buffer that is being put into C mode or -Lisp mode, and then setting it to the new value for that mode. - - The usual way to make a buffer-local binding is with -`make-local-variable', which is what major mode commands use. This -affects just the current buffer; all other buffers (including those yet -to be created) continue to share the global value. - - A more powerful operation is to mark the variable as "automatically -buffer-local" by calling `make-variable-buffer-local'. You can think -of this as making the variable local in all buffers, even those yet to -be created. More precisely, the effect is that setting the variable -automatically makes the variable local to the current buffer if it is -not already so. All buffers start out by sharing the global value of -the variable as usual, but any `setq' creates a buffer-local binding -for the current buffer. The new value is stored in the buffer-local -binding, leaving the (default) global binding untouched. The global -value can no longer be changed with `setq'; you need to use -`setq-default' to do that. - - Local variables in a file you edit are also represented by -buffer-local bindings for the buffer that holds the file within XEmacs. -*Note Auto Major Mode::. - - -File: lispref.info, Node: Creating Buffer-Local, Next: Default Value, Prev: Intro to Buffer-Local, Up: Buffer-Local Variables - -Creating and Deleting Buffer-Local Bindings -------------------------------------------- - - - Command: make-local-variable variable - This function creates a buffer-local binding in the current buffer - for VARIABLE (a symbol). Other buffers are not affected. The - value returned is VARIABLE. - - The buffer-local value of VARIABLE starts out as the same value - VARIABLE previously had. If VARIABLE was void, it remains void. - - ;; In buffer `b1': - (setq foo 5) ; Affects all buffers. - => 5 - (make-local-variable 'foo) ; Now it is local in `b1'. - => foo - foo ; That did not change - => 5 ; the value. - (setq foo 6) ; Change the value - => 6 ; in `b1'. - foo - => 6 - - ;; In buffer `b2', the value hasn't changed. - (save-excursion - (set-buffer "b2") - foo) - => 5 - - Making a variable buffer-local within a `let'-binding for that - variable does not work. This is because `let' does not distinguish - between different kinds of bindings; it knows only which variable - the binding was made for. - - *Please note:* do not use `make-local-variable' for a hook - variable. Instead, use `make-local-hook'. *Note Hooks::. - - - Command: make-variable-buffer-local variable - This function marks VARIABLE (a symbol) automatically - buffer-local, so that any subsequent attempt to set it will make it - local to the current buffer at the time. - - The value returned is VARIABLE. - - - Function: local-variable-p variable &optional buffer - This returns `t' if VARIABLE is buffer-local in buffer BUFFER - (which defaults to the current buffer); otherwise, `nil'. - - - Function: buffer-local-variables &optional buffer - This function returns a list describing the buffer-local variables - in buffer BUFFER. It returns an association list (*note - Association Lists::) in which each association contains one - buffer-local variable and its value. When a buffer-local variable - is void in BUFFER, then it appears directly in the resulting list. - If BUFFER is omitted, the current buffer is used. - - (make-local-variable 'foobar) - (makunbound 'foobar) - (make-local-variable 'bind-me) - (setq bind-me 69) - (setq lcl (buffer-local-variables)) - ;; First, built-in variables local in all buffers: - => ((mark-active . nil) - (buffer-undo-list nil) - (mode-name . "Fundamental") - ... - ;; Next, non-built-in local variables. - ;; This one is local and void: - foobar - ;; This one is local and nonvoid: - (bind-me . 69)) - - Note that storing new values into the CDRs of cons cells in this - list does _not_ change the local values of the variables. - - - Command: kill-local-variable variable - This function deletes the buffer-local binding (if any) for - VARIABLE (a symbol) in the current buffer. As a result, the - global (default) binding of VARIABLE becomes visible in this - buffer. Usually this results in a change in the value of - VARIABLE, since the global value is usually different from the - buffer-local value just eliminated. - - If you kill the local binding of a variable that automatically - becomes local when set, this makes the global value visible in the - current buffer. However, if you set the variable again, that will - once again create a local binding for it. - - `kill-local-variable' returns VARIABLE. - - This function is a command because it is sometimes useful to kill - one buffer-local variable interactively, just as it is useful to - create buffer-local variables interactively. - - - Function: kill-all-local-variables - This function eliminates all the buffer-local variable bindings of - the current buffer except for variables marked as "permanent". As - a result, the buffer will see the default values of most variables. - - This function also resets certain other information pertaining to - the buffer: it sets the local keymap to `nil', the syntax table to - the value of `standard-syntax-table', and the abbrev table to the - value of `fundamental-mode-abbrev-table'. - - Every major mode command begins by calling this function, which - has the effect of switching to Fundamental mode and erasing most - of the effects of the previous major mode. To ensure that this - does its job, the variables that major modes set should not be - marked permanent. - - `kill-all-local-variables' returns `nil'. - - A local variable is "permanent" if the variable name (a symbol) has a -`permanent-local' property that is non-`nil'. Permanent locals are -appropriate for data pertaining to where the file came from or how to -save it, rather than with how to edit the contents. - diff --git a/info/new-users-guide.info b/info/new-users-guide.info index 1f01bd3..f3d6418 100644 --- a/info/new-users-guide.info +++ b/info/new-users-guide.info @@ -20,7 +20,7 @@ preserved on all copies. Indirect: new-users-guide.info-1: 635 new-users-guide.info-2: 50468 -new-users-guide.info-3: 100029 +new-users-guide.info-3: 100033  Tag Table: (Indirect) @@ -58,19 +58,19 @@ Node: Files65082 Node: File Names65804 Node: Visiting67607 Node: Saving Files69731 -Node: Other Customizations73108 -Node: Setting Variables75584 -Node: Init File78793 -Node: Select and Move84263 -Node: Selecting Text85217 -Node: Mouse86730 -Node: Region Operation88055 -Node: Moving Text89315 -Node: Accumulating text90555 -Node: Search and Replace92876 -Node: Key Index96740 -Node: Command Index100029 -Node: Variable Index104131 -Node: Concept Index104708 +Node: Other Customizations73110 +Node: Setting Variables75586 +Node: Init File78795 +Node: Select and Move84265 +Node: Selecting Text85219 +Node: Mouse86732 +Node: Region Operation88057 +Node: Moving Text89317 +Node: Accumulating text90557 +Node: Search and Replace92878 +Node: Key Index96744 +Node: Command Index100033 +Node: Variable Index104135 +Node: Concept Index104712  End Tag Table diff --git a/info/widget.info b/info/widget.info index 652d4f1..425627c 100644 --- a/info/widget.info +++ b/info/widget.info @@ -94,7 +94,7 @@ and the HTML form support in the `w3' browser. The advantages for a programmer of using the `widget' package to implement forms are: - 1. More complex field than just editable text are supported. + 1. More complex fields than just editable text are supported. 2. You can give the user immediate feedback if he enters invalid data in a text field, and sometimes prevent entering invalid data. @@ -416,7 +416,7 @@ Basic Types NAME ::= (NAME [KEYWORD ARGUMENT]... ARGS) | NAME - Where, NAME is a widget name, KEYWORD is the name of a property, + where NAME is a widget name, KEYWORD is the name of a property, ARGUMENT is the value of the property, and ARGS are interpreted in a widget specific way. @@ -490,7 +490,8 @@ widget specific way. The value of the symbol is expanded according to this table. `:doc' - The string inserted by the `%d' escape in the format string. + The string inserted by the `%d' or `%h' escape in the format + string. `:tag' The string inserted by the `%t' escape in the format string. @@ -538,7 +539,7 @@ widget specific way. specified value. `:validate' - A function which takes a widget as an argument, and return nil if + A function which takes a widget as an argument, and returns nil if the widget's current value is valid for the widget. Otherwise it should return the widget containing the invalid data, and set that widget's `:error' property to a string explaining the error. @@ -685,8 +686,10 @@ widget will match all string values. The following extra properties are recognized. `:size' - The width of the editable field. - By default the field will reach to the end of the line. + The minimum width of the editable field. + By default the field will reach to the end of the line. If the + content is too large, the displayed representation will expand to + contain it. The content is not truncated to size. `:value-face' Face used for highlighting the editable field. Default is @@ -705,7 +708,7 @@ widget will match all string values. `:keymap' Keymap used in the editable field. The default value is `widget-field-keymap', which allows you to use all the normal - editing commands, even if the buffers major mode suppress some of + editing commands, even if the buffer's major mode suppress some of them. Pressing return invokes the function specified by `:action'.  @@ -1517,35 +1520,35 @@ Wishlist Tag Table: Node: Top211 Node: Introduction591 -Node: User Interface4074 -Node: Programming Example8969 -Node: Setting Up the Buffer13119 -Node: Basic Types14836 -Node: link20881 -Node: url-link21395 -Node: info-link21707 -Node: push-button21998 -Node: editable-field22571 -Node: text23910 -Node: menu-choice24208 -Node: radio-button-choice25061 -Node: item26628 -Node: choice-item27016 -Node: toggle27514 -Node: checkbox28251 -Node: checklist28557 -Node: editable-list30001 -Node: group31183 -Node: Sexp Types31470 -Node: constants31783 -Node: generic32862 -Node: atoms33395 -Node: composite35342 -Node: Widget Properties37812 -Node: Defining New Widgets40877 -Node: Widget Browser46177 -Node: Widget Minor Mode47035 -Node: Utilities47592 -Node: Widget Wishlist48073 +Node: User Interface4075 +Node: Programming Example8970 +Node: Setting Up the Buffer13120 +Node: Basic Types14837 +Node: link20895 +Node: url-link21409 +Node: info-link21721 +Node: push-button22012 +Node: editable-field22585 +Node: text24068 +Node: menu-choice24366 +Node: radio-button-choice25219 +Node: item26786 +Node: choice-item27174 +Node: toggle27672 +Node: checkbox28409 +Node: checklist28715 +Node: editable-list30159 +Node: group31341 +Node: Sexp Types31628 +Node: constants31941 +Node: generic33020 +Node: atoms33553 +Node: composite35500 +Node: Widget Properties37970 +Node: Defining New Widgets41035 +Node: Widget Browser46335 +Node: Widget Minor Mode47193 +Node: Utilities47750 +Node: Widget Wishlist48231  End Tag Table diff --git a/info/xemacs-faq.info b/info/xemacs-faq.info index 99ec491..836f830 100644 --- a/info/xemacs-faq.info +++ b/info/xemacs-faq.info @@ -9,257 +9,260 @@ END-INFO-DIR-ENTRY  Indirect: xemacs-faq.info-1: 205 -xemacs-faq.info-2: 50174 -xemacs-faq.info-3: 99767 -xemacs-faq.info-4: 149758 -xemacs-faq.info-5: 199303 +xemacs-faq.info-2: 49999 +xemacs-faq.info-3: 99617 +xemacs-faq.info-4: 149492 +xemacs-faq.info-5: 199354  Tag Table: (Indirect) Node: Top205 -Node: Introduction16499 -Node: Q1.0.119941 -Node: Q1.0.220477 -Node: Q1.0.321022 -Node: Q1.0.421284 -Node: Q1.0.522734 -Node: Q1.0.623423 -Node: Q1.0.724429 -Node: Q1.0.824682 -Node: Q1.0.924897 -Node: Q1.0.1025175 -Node: Q1.0.1125418 -Node: Q1.0.1225807 -Node: Q1.0.1326175 -Node: Q1.0.1426424 -Node: Q1.1.126934 -Node: Q1.1.227976 -Node: Q1.1.328369 -Node: Q1.2.129320 -Node: Q1.2.230376 -Node: Q1.2.330810 -Node: Q1.3.131894 -Node: Q1.3.232545 -Node: Q1.3.333009 -Node: Q1.3.433250 -Node: Q1.3.534023 -Node: Q1.3.636428 -Node: Q1.3.737959 -Node: Q1.4.138894 -Node: Q1.4.239756 -Node: Q1.4.340097 -Node: Q1.4.440516 -Node: Q1.4.542056 -Node: Q1.4.642360 -Node: Installation43353 -Node: Q2.0.145716 -Node: Q2.0.246516 -Node: Q2.0.348284 -Node: Q2.0.449582 -Node: Q2.0.550174 -Node: Q2.0.650522 -Node: Q2.0.750903 -Node: Q2.0.851284 -Node: Q2.0.952861 -Node: Q2.0.1054299 -Node: Q2.0.1155143 -Node: Q2.0.1256084 -Node: Q2.1.157606 -Node: Q2.1.260348 -Node: Q2.1.361525 -Node: Q2.1.462818 -Node: Q2.1.563617 -Node: Q2.1.663979 -Node: Q2.1.764456 -Node: Q2.1.864809 -Node: Q2.1.966343 -Node: Q2.1.1066765 -Node: Q2.1.1167522 -Node: Q2.1.1268387 -Node: Q2.1.1369342 -Node: Q2.1.1470373 -Node: Q2.1.1571484 -Node: Q2.1.1678516 -Node: Q2.1.1779210 -Node: Q2.1.1879807 -Node: Q2.1.1979934 -Node: Q2.1.2080464 -Node: Q2.1.2180846 -Node: Q2.1.2281039 -Node: Q2.1.2382336 -Node: Q2.1.2483004 -Node: Customization83460 -Node: Q3.0.188298 -Node: Q3.0.289004 -Node: Q3.0.389568 -Node: Q3.0.489985 -Node: Q3.0.590818 -Node: Q3.0.691599 -Node: Q3.0.792179 -Node: Q3.0.892843 -Node: Q3.0.993801 -Node: Q3.1.194362 -Node: Q3.1.295099 -Node: Q3.1.395530 -Node: Q3.1.495719 -Node: Q3.1.595908 -Node: Q3.1.696292 -Node: Q3.1.797001 -Node: Q3.1.899225 -Node: Q3.2.199767 -Node: Q3.2.2101420 -Node: Q3.2.3102219 -Node: Q3.2.4102821 -Node: Q3.2.5103855 -Node: Q3.2.6104322 -Node: Q3.3.1105247 -Node: Q3.3.2105677 -Node: Q3.3.3106308 -Node: Q3.3.4106689 -Node: Q3.3.5107790 -Node: Q3.4.1109284 -Node: Q3.4.2109927 -Node: Q3.5.1110439 -Node: Q3.5.2111888 -Node: Q3.5.3112306 -Node: Q3.5.4113144 -Node: Q3.5.5113976 -Node: Q3.5.6115116 -Node: Q3.5.7116106 -Node: Q3.5.8117546 -Node: Q3.5.9118293 -Node: Q3.5.10119073 -Node: Q3.5.11119709 -Node: Q3.6.1120262 -Node: Q3.6.2121007 -Node: Q3.6.3121435 -Node: Q3.7.1121935 -Node: Q3.7.2122823 -Node: Q3.7.3123482 -Node: Q3.7.4123904 -Node: Q3.7.5124247 -Node: Q3.7.6124715 -Node: Q3.7.7125430 -Node: Q3.7.8126450 -Node: Q3.8.1126869 -Node: Q3.8.2127329 -Node: Q3.8.3127792 -Node: Q3.8.4128398 -Node: Q3.8.5129117 -Node: Q3.9.1129902 -Node: Q3.9.2130842 -Node: Q3.9.3131440 -Node: Q3.9.4132102 -Node: Q3.10.1132981 -Node: Q3.10.2133799 -Node: Q3.10.3134804 -Node: Q3.10.4135532 -Node: Q3.10.5135915 -Node: Subsystems136967 -Node: Q4.0.1139454 -Node: Q4.0.2139979 -Node: Q4.0.3140537 -Node: Q4.0.4140858 -Node: Q4.0.5141100 -Node: Q4.0.6141331 -Node: Q4.0.7141919 -Node: Q4.0.8142244 -Node: Q4.0.9143471 -Node: Q4.0.10145509 -Node: Q4.0.11145998 -Node: Q4.0.12146876 -Node: Q4.1.1147849 -Node: Q4.1.2148252 -Node: Q4.1.3148579 -Node: Q4.2.1148888 -Node: Q4.2.2149518 -Node: Q4.2.3149758 -Node: Q4.2.4150302 -Node: Q4.3.1150955 -Node: Q4.3.2151539 -Node: Q4.3.3153020 -Node: Q4.3.4153292 -Node: Q4.3.5153969 -Node: Q4.4.1154597 -Node: Q4.4.2156083 -Node: Q4.5.1157287 -Node: Q4.6.1158056 -Node: Q4.7.1163316 -Node: Q4.7.2164271 -Node: Q4.7.3164568 -Node: Q4.7.4164754 -Node: Q4.7.5165638 -Node: Q4.7.6167279 -Node: Miscellaneous167568 -Node: Q5.0.1170981 -Node: Q5.0.2171720 -Node: Q5.0.3172574 -Node: Q5.0.4173276 -Node: Q5.0.5174215 -Node: Q5.0.6176195 -Node: Q5.0.7176852 -Node: Q5.0.8177457 -Node: Q5.0.9177976 -Node: Q5.0.10178490 -Node: Q5.0.11178738 -Node: Q5.0.12179276 -Node: Q5.0.13180193 -Node: Q5.0.14180877 -Node: Q5.0.15181642 -Node: Q5.0.16181939 -Node: Q5.0.17182451 -Node: Q5.0.18182716 -Node: Q5.0.19182910 -Node: Q5.0.20183334 -Node: Q5.1.1184249 -Node: Q5.1.2186318 -Node: Q5.1.3187054 -Node: Q5.1.4190448 -Node: Q5.1.5190983 -Node: Q5.1.6193107 -Node: Q5.1.7194593 -Node: Q5.1.8196186 -Node: Q5.1.9196738 -Node: Q5.1.10197623 -Node: Q5.1.11198754 -Node: Q5.2.1199303 -Node: Q5.2.2199873 -Node: Q5.2.3200290 -Node: Q5.2.4200525 -Node: Q5.3.1201435 -Node: Q5.3.2202656 -Node: Q5.3.3203432 -Node: Q5.3.4203916 -Node: Q5.3.5204583 -Node: Q5.3.6205452 -Node: Q5.3.7205697 -Node: Q5.3.8207887 -Node: Q5.3.9208134 -Node: Q5.3.10209087 -Node: Q5.3.11211171 -Node: Q5.3.12212762 -Node: MS Windows214036 -Node: Q6.0.1215513 -Node: Q6.0.2216260 -Node: Q6.0.3216725 -Node: Q6.0.4217005 -Node: Q6.1.1219284 -Node: Q6.1.2220155 -Node: Q6.1.3220610 -Node: Q6.1.4220892 -Node: Q6.1.5221270 -Node: Q6.1.6222138 -Node: Q6.2.1224444 -Node: Q6.2.2225345 -Node: Q6.2.3225757 -Node: Q6.3.1226046 -Node: Q6.3.2227140 -Node: Q6.3.3230321 -Node: Q6.4.1230590 -Node: Current Events231925 -Node: Q7.0.1232579 -Node: Q7.0.2233218 -Node: Q7.0.3234291 -Node: Q7.0.4234519 +Node: Introduction16704 +Node: Q1.0.120146 +Node: Q1.0.220682 +Node: Q1.0.321227 +Node: Q1.0.421489 +Node: Q1.0.522939 +Node: Q1.0.623628 +Node: Q1.0.724634 +Node: Q1.0.824887 +Node: Q1.0.925102 +Node: Q1.0.1025380 +Node: Q1.0.1125623 +Node: Q1.0.1226012 +Node: Q1.0.1326380 +Node: Q1.0.1426629 +Node: Q1.1.127139 +Node: Q1.1.228181 +Node: Q1.1.328574 +Node: Q1.2.129525 +Node: Q1.2.230581 +Node: Q1.2.331015 +Node: Q1.3.132099 +Node: Q1.3.232750 +Node: Q1.3.333214 +Node: Q1.3.433455 +Node: Q1.3.534228 +Node: Q1.3.636633 +Node: Q1.3.738164 +Node: Q1.4.139099 +Node: Q1.4.239961 +Node: Q1.4.340302 +Node: Q1.4.440721 +Node: Q1.4.542261 +Node: Q1.4.642565 +Node: Installation43558 +Node: Q2.0.146133 +Node: Q2.0.246933 +Node: Q2.0.348701 +Node: Q2.0.449999 +Node: Q2.0.550591 +Node: Q2.0.650939 +Node: Q2.0.751320 +Node: Q2.0.851701 +Node: Q2.0.953278 +Node: Q2.0.1054716 +Node: Q2.0.1155560 +Node: Q2.0.1256501 +Node: Q2.0.1358024 +Node: Q2.0.1458513 +Node: Q2.1.159571 +Node: Q2.1.262313 +Node: Q2.1.363490 +Node: Q2.1.464783 +Node: Q2.1.565582 +Node: Q2.1.665944 +Node: Q2.1.766421 +Node: Q2.1.866774 +Node: Q2.1.968308 +Node: Q2.1.1068730 +Node: Q2.1.1169487 +Node: Q2.1.1270352 +Node: Q2.1.1371307 +Node: Q2.1.1472338 +Node: Q2.1.1573449 +Node: Q2.1.1680481 +Node: Q2.1.1781175 +Node: Q2.1.1881772 +Node: Q2.1.1981899 +Node: Q2.1.2082429 +Node: Q2.1.2182811 +Node: Q2.1.2283004 +Node: Q2.1.2384301 +Node: Q2.1.2484969 +Node: Q2.1.2585441 +Node: Customization86076 +Node: Q3.0.190914 +Node: Q3.0.291620 +Node: Q3.0.392184 +Node: Q3.0.492601 +Node: Q3.0.593434 +Node: Q3.0.694215 +Node: Q3.0.794795 +Node: Q3.0.895459 +Node: Q3.0.996417 +Node: Q3.1.196978 +Node: Q3.1.297715 +Node: Q3.1.398146 +Node: Q3.1.498335 +Node: Q3.1.598524 +Node: Q3.1.698908 +Node: Q3.1.799617 +Node: Q3.1.8101841 +Node: Q3.2.1102383 +Node: Q3.2.2104036 +Node: Q3.2.3104835 +Node: Q3.2.4105437 +Node: Q3.2.5106471 +Node: Q3.2.6106938 +Node: Q3.3.1107863 +Node: Q3.3.2108293 +Node: Q3.3.3108924 +Node: Q3.3.4109305 +Node: Q3.3.5110406 +Node: Q3.4.1111900 +Node: Q3.4.2112543 +Node: Q3.5.1113055 +Node: Q3.5.2114504 +Node: Q3.5.3114922 +Node: Q3.5.4115760 +Node: Q3.5.5116592 +Node: Q3.5.6117732 +Node: Q3.5.7118722 +Node: Q3.5.8120162 +Node: Q3.5.9120909 +Node: Q3.5.10121689 +Node: Q3.5.11122325 +Node: Q3.6.1122878 +Node: Q3.6.2123623 +Node: Q3.6.3124051 +Node: Q3.7.1124551 +Node: Q3.7.2125439 +Node: Q3.7.3126098 +Node: Q3.7.4126520 +Node: Q3.7.5126863 +Node: Q3.7.6127331 +Node: Q3.7.7128046 +Node: Q3.7.8129066 +Node: Q3.8.1129485 +Node: Q3.8.2129945 +Node: Q3.8.3130408 +Node: Q3.8.4131014 +Node: Q3.8.5131733 +Node: Q3.9.1132518 +Node: Q3.9.2133458 +Node: Q3.9.3134056 +Node: Q3.9.4134718 +Node: Q3.10.1135597 +Node: Q3.10.2136415 +Node: Q3.10.3137420 +Node: Q3.10.4138148 +Node: Q3.10.5138531 +Node: Subsystems139583 +Node: Q4.0.1142070 +Node: Q4.0.2142595 +Node: Q4.0.3143153 +Node: Q4.0.4143474 +Node: Q4.0.5143716 +Node: Q4.0.6143947 +Node: Q4.0.7144535 +Node: Q4.0.8144860 +Node: Q4.0.9146087 +Node: Q4.0.10148125 +Node: Q4.0.11148614 +Node: Q4.0.12149492 +Node: Q4.1.1150465 +Node: Q4.1.2150868 +Node: Q4.1.3151195 +Node: Q4.2.1151504 +Node: Q4.2.2152134 +Node: Q4.2.3152374 +Node: Q4.2.4152918 +Node: Q4.3.1153571 +Node: Q4.3.2154155 +Node: Q4.3.3155636 +Node: Q4.3.4155908 +Node: Q4.3.5156585 +Node: Q4.4.1157213 +Node: Q4.4.2158699 +Node: Q4.5.1159903 +Node: Q4.6.1160672 +Node: Q4.7.1165932 +Node: Q4.7.2166887 +Node: Q4.7.3167184 +Node: Q4.7.4167370 +Node: Q4.7.5168254 +Node: Q4.7.6169895 +Node: Miscellaneous170184 +Node: Q5.0.1173597 +Node: Q5.0.2174336 +Node: Q5.0.3175190 +Node: Q5.0.4175892 +Node: Q5.0.5176831 +Node: Q5.0.6178811 +Node: Q5.0.7179468 +Node: Q5.0.8180073 +Node: Q5.0.9180592 +Node: Q5.0.10181106 +Node: Q5.0.11181354 +Node: Q5.0.12181892 +Node: Q5.0.13182809 +Node: Q5.0.14183493 +Node: Q5.0.15184258 +Node: Q5.0.16184555 +Node: Q5.0.17185067 +Node: Q5.0.18185332 +Node: Q5.0.19185526 +Node: Q5.0.20185950 +Node: Q5.1.1186865 +Node: Q5.1.2188934 +Node: Q5.1.3189670 +Node: Q5.1.4193064 +Node: Q5.1.5193599 +Node: Q5.1.6195723 +Node: Q5.1.7197209 +Node: Q5.1.8198802 +Node: Q5.1.9199354 +Node: Q5.1.10200239 +Node: Q5.1.11201370 +Node: Q5.2.1201919 +Node: Q5.2.2202489 +Node: Q5.2.3202906 +Node: Q5.2.4203141 +Node: Q5.3.1204051 +Node: Q5.3.2205272 +Node: Q5.3.3206048 +Node: Q5.3.4206532 +Node: Q5.3.5207199 +Node: Q5.3.6208068 +Node: Q5.3.7208313 +Node: Q5.3.8210503 +Node: Q5.3.9210750 +Node: Q5.3.10211703 +Node: Q5.3.11213787 +Node: Q5.3.12215378 +Node: MS Windows216652 +Node: Q6.0.1218129 +Node: Q6.0.2218876 +Node: Q6.0.3219341 +Node: Q6.0.4219621 +Node: Q6.1.1221900 +Node: Q6.1.2222771 +Node: Q6.1.3223226 +Node: Q6.1.4223508 +Node: Q6.1.5223886 +Node: Q6.1.6224754 +Node: Q6.2.1227060 +Node: Q6.2.2227961 +Node: Q6.2.3228373 +Node: Q6.3.1228662 +Node: Q6.3.2229756 +Node: Q6.3.3232937 +Node: Q6.4.1233206 +Node: Current Events234541 +Node: Q7.0.1235195 +Node: Q7.0.2235834 +Node: Q7.0.3236907 +Node: Q7.0.4237135  End Tag Table diff --git a/info/xemacs-faq.info-1 b/info/xemacs-faq.info-1 index 6401a38..791fbce 100644 --- a/info/xemacs-faq.info-1 +++ b/info/xemacs-faq.info-1 @@ -97,6 +97,8 @@ Installation and Trouble Shooting * Q2.0.10:: After I run configure I find a coredump, is something wrong? * Q2.0.11:: XEmacs can't resolve host names. * Q2.0.12:: Why can't I strip XEmacs? +* Q2.0.13:: I don't need no steenkin' packages. Do I? (NEW) +* Q2.0.14:: How do I figure out which packages to install? (NEW) Trouble Shooting: * Q2.1.1:: XEmacs just crashed on me! @@ -123,6 +125,7 @@ Trouble Shooting: * Q2.1.22:: XEmacs seems to take a really long time to do some things. * Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. * Q2.1.24:: XEmacs won't start without network. (NEW) +* Q2.1.25:: After upgrading, XEmacs won't do `foo' any more! (NEW) Customization and Options @@ -1115,6 +1118,8 @@ Installation: * Q2.0.10:: After I run configure I find a coredump, is something wrong? * Q2.0.11:: XEmacs can't resolve host names. * Q2.0.12:: Why can't I strip XEmacs? +* Q2.0.13:: I don't need no steenkin' packages. Do I? (NEW) +* Q2.0.14:: I don't want to install a million .els one at a time! (NEW) Trouble Shooting: * Q2.1.1:: XEmacs just crashed on me! @@ -1141,6 +1146,7 @@ Trouble Shooting: * Q2.1.22:: XEmacs seems to take a really long time to do some things. * Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. * Q2.1.24:: XEmacs won't start without network. (NEW) +* Q2.1.25:: After upgrading, XEmacs won't do `foo' any more! (NEW)  File: xemacs-faq.info, Node: Q2.0.1, Next: Q2.0.2, Prev: Installation, Up: Installation @@ -1236,21 +1242,3 @@ else, so if you see references to NAS or Network Audio System, it's the same thing. It also might be found at `ftp://ftp.x.org/contrib/audio/nas/'. - -File: xemacs-faq.info, Node: Q2.0.4, Next: Q2.0.5, Prev: Q2.0.3, Up: Installation - -Q2.0.4: Problems with Linux and ncurses. ----------------------------------------- - - On Linux 1.3.98 with termcap 2.0.8 and the ncurses that came with -libc 5.2.18, XEmacs 20.0b20 is unable to open a tty device: - - src/xemacs -nw -q - Initialization error: - Terminal type `xterm' undefined (or can't access database?) - - Ben Wing writes: - - Your ncurses configuration is messed up. Your /usr/lib/terminfo - is a bad pointer, perhaps to a CD-ROM that is not inserted. - diff --git a/info/xemacs-faq.info-2 b/info/xemacs-faq.info-2 index 6f1f39f..66252fd 100644 --- a/info/xemacs-faq.info-2 +++ b/info/xemacs-faq.info-2 @@ -7,6 +7,24 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  +File: xemacs-faq.info, Node: Q2.0.4, Next: Q2.0.5, Prev: Q2.0.3, Up: Installation + +Q2.0.4: Problems with Linux and ncurses. +---------------------------------------- + + On Linux 1.3.98 with termcap 2.0.8 and the ncurses that came with +libc 5.2.18, XEmacs 20.0b20 is unable to open a tty device: + + src/xemacs -nw -q + Initialization error: + Terminal type `xterm' undefined (or can't access database?) + + Ben Wing writes: + + Your ncurses configuration is messed up. Your /usr/lib/terminfo + is a bad pointer, perhaps to a CD-ROM that is not inserted. + + File: xemacs-faq.info, Node: Q2.0.5, Next: Q2.0.6, Prev: Q2.0.4, Up: Installation Q2.0.5: Do I need X11 to run XEmacs? @@ -169,7 +187,7 @@ that stock SunOS systems do not ship with DNS resolver code in libc. then proceed to link against the DNS resolver library code.  -File: xemacs-faq.info, Node: Q2.0.12, Next: Q2.1.1, Prev: Q2.0.11, Up: Installation +File: xemacs-faq.info, Node: Q2.0.12, Next: Q2.0.13, Prev: Q2.0.11, Up: Installation Q2.0.12: Why can't I strip XEmacs? ---------------------------------- @@ -212,7 +230,49 @@ Q2.0.12: Why can't I strip XEmacs? /usr/local/lib/xemacs-19.16/i586-unknown-linuxaout  -File: xemacs-faq.info, Node: Q2.1.1, Next: Q2.1.2, Prev: Q2.0.12, Up: Installation +File: xemacs-faq.info, Node: Q2.0.13, Next: Q2.0.14, Prev: Q2.0.12, Up: Installation + +Q2.0.13: I don't need no steenkin' packages. Do I? (NEW) +--------------------------------------------------------- + + Strictly speaking, no. XEmacs will build and install just fine +without any packages installed. However, only the most basic editing +functions will be available with no packages installed, so installing +packages is an essential part of making your installed XEmacs _useful_. + + +File: xemacs-faq.info, Node: Q2.0.14, Next: Q2.1.1, Prev: Q2.0.13, Up: Installation + +Q2.0.12: How do I figure out which packages to install? (NEW) +------------------------------------------------------------- + + Many people really liked the old way that packages were bundled and +do not want to mess with packages at all. You can grab all the +packages at once like you used to with old XEmacs versions. Download +the file + + `xemacs-sumo.tar.gz' + + For an XEmacs compiled with Mule you also need + + `xemacs-mule-sumo.tar.gz' + + from the `packages' directory on your XEmacs mirror archive. N.B. +They are called 'Sumo Tarballs' for good reason. They are currently +about 15MB and 2.3MB (gzipped) respectively. + + Install them by + + `cd $prefix/lib/xemacs ; gunzip -c | tar xf -' + + See README.packages for more detailed installation instructions. + + As the Sumo tarballs are not regenerated as often as the individual +packages, it is recommended that you use the automatic package tools +afterwards to pick up any recent updates. + + +File: xemacs-faq.info, Node: Q2.1.1, Next: Q2.1.2, Prev: Q2.0.14, Up: Installation 2.1: Trouble Shooting ===================== @@ -874,7 +934,7 @@ and 20.x. I am using Linux. #define MAIL_USE_FLOCK  -File: xemacs-faq.info, Node: Q2.1.24, Prev: Q2.1.23, Up: Installation +File: xemacs-faq.info, Node: Q2.1.24, Next: Q2.1.25, Prev: Q2.1.23, Up: Installation Q2.1.24: XEmacs won't start without network. (NEW) --------------------------------------------------- @@ -888,6 +948,19 @@ not on the network, you may be missing a "localhost" entry in your Add that line, and XEmacs will be happy.  +File: xemacs-faq.info, Node: Q2.1.25, Prev: Q2.1.24, Up: Installation + +Q2.1.25:: After upgrading, XEmacs won't do `foo' any more! (NEW) +----------------------------------------------------------------- + + You have been used to doing `foo', but now when you invoke it (or +click the toolbar button or select the menu item), nothing (or an error) +happens. The simplest explanation is that you are missing a package +that is essential to you. You can either track it down and install it +(there is a list of packages and brief descriptions of their contents in +`etc/PACKAGES'), or install the `Sumo Tarball' (see *note Q2.0.14::). + + File: xemacs-faq.info, Node: Customization, Next: Subsystems, Prev: Installation, Up: Top 3 Customization and Options @@ -1242,65 +1315,3 @@ directory/name of the current buffer file and not just the name. That is, use the file name, or the dired-directory, or the buffer name. - -File: xemacs-faq.info, Node: Q3.1.7, Next: Q3.1.8, Prev: Q3.1.6, Up: Customization - -Q3.1.7: `xemacs -name junk' doesn't work? ------------------------------------------ - - When I run `xterm -name junk', I get an xterm whose class name -according to xprop, is `junk'. This is the way it's supposed to work, -I think. When I run `xemacs -name junk' the class name is not set to -`junk'. It's still `emacs'. What does `xemacs -name' really do? The -reason I ask is that my window manager (fvwm) will make a window sticky -and I use XEmacs to read my mail. I want that XEmacs window to be -sticky, without having to use the window manager's function to set the -window sticky. What gives? - - `xemacs -name' sets the application name for the program (that is, -the thing which normally comes from `argv[0]'). Using `-name' is the -same as making a copy of the executable with that new name. The -`WM_CLASS' property on each frame is set to the frame-name, and the -application-class. So, if you did `xemacs -name FOO' and then created -a frame named BAR, you'd get an X window with WM_CLASS = `( "BAR", -"Emacs")'. However, the resource hierarchy for this widget would be: - - Name: FOO .shell .container .BAR - Class: Emacs .TopLevelEmacsShell.EmacsManager.EmacsFrame - - instead of the default - - Name: xemacs.shell .container .emacs - Class: Emacs .TopLevelEmacsShell.EmacsManager.EmacsFrame - - It is arguable that the first element of WM_CLASS should be set to -the application-name instead of the frame-name, but I think that's less -flexible, since it does not give you the ability to have multiple frames -with different WM_CLASS properties. Another possibility would be for -the default frame name to come from the application name instead of -simply being `emacs'. However, at this point, making that change would -be troublesome: it would mean that many users would have to make yet -another change to their resource files (since the default frame name -would suddenly change from `emacs' to `xemacs', or whatever the -executable happened to be named), so we'd rather avoid it. - - To make a frame with a particular name use: - - (make-frame '((name . "the-name"))) - - -File: xemacs-faq.info, Node: Q3.1.8, Next: Q3.2.1, Prev: Q3.1.7, Up: Customization - -Q3.1.8: `-iconic' doesn't work. -------------------------------- - - When I start up XEmacs using `-iconic' it doesn't work right. Using -`-unmapped' on the command line, and setting the `initiallyUnmapped' X -Resource don't seem to help much either... - - Ben Wing writes: - - Ugh, this stuff is such an incredible mess that I've about given up - getting it to work. The principal problem is numerous - window-manager bugs... - diff --git a/info/xemacs.info b/info/xemacs.info index b753711..7123481 100644 --- a/info/xemacs.info +++ b/info/xemacs.info @@ -32,390 +32,391 @@ translation approved by the author instead of in the original English.  Indirect: xemacs.info-1: 1350 -xemacs.info-2: 48878 -xemacs.info-3: 98489 -xemacs.info-4: 147801 -xemacs.info-5: 197397 -xemacs.info-6: 246837 -xemacs.info-7: 296794 -xemacs.info-8: 345041 -xemacs.info-9: 392811 -xemacs.info-10: 442411 -xemacs.info-11: 490852 -xemacs.info-12: 538047 -xemacs.info-13: 586228 -xemacs.info-14: 636005 -xemacs.info-15: 685652 -xemacs.info-16: 734792 -xemacs.info-17: 783205 -xemacs.info-18: 830803 -xemacs.info-19: 862297 -xemacs.info-20: 893951 -xemacs.info-21: 943355 -xemacs.info-22: 985941 +xemacs.info-2: 48895 +xemacs.info-3: 98506 +xemacs.info-4: 147816 +xemacs.info-5: 197412 +xemacs.info-6: 246852 +xemacs.info-7: 296809 +xemacs.info-8: 345202 +xemacs.info-9: 392972 +xemacs.info-10: 442574 +xemacs.info-11: 491015 +xemacs.info-12: 538210 +xemacs.info-13: 586468 +xemacs.info-14: 634794 +xemacs.info-15: 684331 +xemacs.info-16: 731876 +xemacs.info-17: 780201 +xemacs.info-18: 826586 +xemacs.info-19: 867946 +xemacs.info-20: 899600 +xemacs.info-21: 949004 +xemacs.info-22: 991590  Tag Table: (Indirect) Node: Top1350 -Node: License22773 -Node: Distrib36055 -Node: Intro37719 -Node: Frame40590 -Node: Point44534 -Node: Echo Area46501 -Node: Mode Line48878 -Node: XEmacs under X53309 -Node: Keystrokes56486 -Node: Intro to Keystrokes57330 -Node: Representing Keystrokes59433 -Node: Key Sequences60790 -Node: String Key Sequences64131 -Node: Meta Key64514 -Node: Super and Hyper Keys65987 -Node: Character Representation72232 -Node: Commands73252 -Node: Pull-down Menus76101 -Node: File Menu79450 -Node: Edit Menu83272 -Node: Apps Menu85655 -Node: Options Menu86145 -Node: Buffers Menu90163 -Node: Tools Menu90470 -Node: Help Menu90961 -Node: Menu Customization91362 -Node: Entering Emacs95592 -Node: Exiting98489 -Node: Command Switches102962 -Node: Startup Paths112326 -Node: Basic119653 -Node: Inserting Text121062 -Node: Moving Point124058 -Node: Erasing127664 -Node: Basic Files128969 -Node: Basic Help130891 -Node: Blank Lines131486 -Node: Continuation Lines133062 -Node: Position Info134729 -Node: Arguments138145 -Node: Undo142244 -Node: Minibuffer145191 -Node: Minibuffer File147801 -Node: Minibuffer Edit149606 -Node: Completion152547 -Node: Completion Example154478 -Node: Completion Commands155573 -Node: Strict Completion158549 -Node: Completion Options160330 -Node: Minibuffer History161838 -Node: Repetition165022 -Node: M-x167867 -Node: Help172961 -Node: Help Summary174371 -Node: Key Help177157 -Node: Name Help178116 -Node: Apropos180761 -Node: Library Keywords183880 -Node: Help Mode186201 -Node: Misc Help186698 -Node: Mark189846 -Node: Setting Mark191700 -Node: Using Region194822 -Node: Marking Objects195559 -Node: Mark Ring197397 -Node: Mouse Selection199113 -Node: Additional Mouse Operations201120 -Node: Killing205324 -Node: Yanking210960 -Node: Kill Ring211763 -Node: Appending Kills213365 -Node: Earlier Kills215402 -Node: Using X Selections218015 -Node: X Clipboard Selection219265 -Node: X Selection Commands221442 -Node: X Cut Buffers222528 -Node: Active Regions223887 -Node: Accumulating Text228467 -Node: Rectangles231540 -Node: Registers235059 -Node: RegPos236513 -Node: RegText237669 -Node: RegRect238775 -Node: RegConfig239654 -Node: RegNumbers240594 -Node: RegFiles241312 -Node: Bookmarks241970 -Node: Display245342 -Node: Scrolling246837 -Node: Horizontal Scrolling250980 -Node: Selective Display252175 -Node: Display Vars253394 -Node: Search256072 -Node: Incremental Search257265 -Node: Non-Incremental Search266193 -Node: Word Search267635 -Node: Regexp Search269253 -Node: Regexps271623 -Node: Search Case285620 -Node: Replace286401 -Node: Unconditional Replace287349 -Node: Regexp Replace288484 -Node: Replacement and Case289419 -Node: Query Replace290399 -Node: Other Repeating Search293626 -Node: Fixit294881 -Node: Kill Errors295461 -Node: Transpose296794 -Node: Fixing Case299198 -Node: Spelling299844 -Node: Files301305 -Node: File Names302615 -Node: Visiting306952 -Node: Saving313638 -Node: Backup318561 -Node: Backup Names319957 -Node: Backup Deletion321440 -Node: Backup Copying322590 -Node: Interlocking324296 -Node: Reverting328424 -Node: Auto Save330336 -Node: Auto Save Files331303 -Node: Auto Save Control333144 -Node: Recover334982 -Node: Version Control336137 -Node: Concepts of VC338175 -Node: Editing with VC339785 -Node: Variables for Check-in/out345041 -Node: Log Entries346940 -Node: Change Logs and VC348120 -Node: Old Versions351387 -Node: VC Status353390 -Node: Renaming and VC355104 -Node: Snapshots355783 -Node: Making Snapshots356284 -Node: Snapshot Caveats357577 -Node: Version Headers359386 -Node: ListDir362085 -Node: Comparing Files364134 -Node: Dired365667 -Node: Dired Enter366338 -Node: Dired Edit367163 -Node: Dired Deletion368910 -Node: Dired Immed372133 -Node: Misc File Ops373409 -Node: Buffers375897 -Node: Select Buffer378055 -Node: List Buffers379850 -Node: Misc Buffer381608 -Node: Kill Buffer383251 -Node: Several Buffers384381 -Node: Windows388248 -Node: Basic Window388959 -Node: Split Window390678 -Node: Other Window392811 -Node: Pop Up Window395240 -Node: Change Window396745 -Node: Mule399653 -Node: Mule Intro400916 -Node: Language Environments401932 -Node: Input Methods404039 -Node: Select Input Method407759 -Node: Coding Systems409914 -Node: Recognize Coding414100 -Node: Specify Coding417426 -Node: Major Modes422357 -Node: Choosing Modes424576 -Node: Indentation426966 -Node: Indentation Commands429061 -Node: Tab Stops431790 -Node: Just Spaces433639 -Node: Text434454 -Node: Text Mode436437 -Node: Nroff Mode438516 -Node: TeX Mode440159 -Node: TeX Editing442411 -Node: TeX Print445845 -Node: Outline Mode449064 -Node: Outline Format450545 -Node: Outline Motion453345 -Node: Outline Visibility454898 -Node: Words457819 -Node: Sentences460766 -Node: Paragraphs462962 -Node: Pages465250 -Node: Filling467850 -Node: Auto Fill468421 -Node: Fill Commands470568 -Node: Fill Prefix472733 -Node: Case474921 -Node: Programs476949 -Node: Program Modes479499 -Node: Lists481731 -Node: Defuns487571 -Node: Grinding490224 -Node: Basic Indent490852 -Node: Multi-line Indent492873 -Node: Lisp Indent494489 -Node: C Indent497939 -Node: Matching503179 -Node: Comments504701 -Node: Balanced Editing511153 -Node: Lisp Completion512167 -Node: Documentation513182 -Node: Change Log514421 -Node: Tags516999 -Node: Tag Syntax518648 -Node: Create Tags Table522592 -Node: Etags Regexps526652 -Node: Select Tags Table531310 -Node: Find Tag535083 -Node: Tags Search538047 -Node: List Tags541503 -Node: Fortran542532 -Node: Fortran Motion543608 -Node: Fortran Indent544428 -Node: ForIndent Commands545113 -Node: ForIndent Num546258 -Node: ForIndent Conv547532 -Node: ForIndent Vars548308 -Node: Fortran Comments549476 -Node: Fortran Columns553074 -Node: Fortran Abbrev554497 -Node: Asm Mode555406 -Node: Running555958 -Node: Compilation556928 -Node: Lisp Modes561778 -Node: Lisp Libraries563051 -Node: Loading563605 -Node: Compiling Libraries568065 -Node: Mocklisp570956 -Node: Lisp Eval571633 -Node: Lisp Debug575273 -Node: Lisp Interaction580700 -Node: External Lisp582055 -Node: Packages584129 -Node: Package Terminology584870 -Node: Using Packages586228 -Node: Building Packages595106 -Node: Abbrevs597628 -Node: Defining Abbrevs599828 -Node: Expanding Abbrevs602275 -Node: Editing Abbrevs604977 -Node: Saving Abbrevs606850 -Node: Dynamic Abbrevs608805 -Node: Picture610107 -Node: Basic Picture612540 -Node: Insert in Picture614825 -Node: Tabs in Picture616247 -Node: Rectangles in Picture617768 -Node: Sending Mail619676 -Node: Mail Format621387 -Node: Mail Headers622737 -Node: Mail Mode629145 -Node: Reading Mail632758 -Node: Calendar/Diary634333 -Node: Calendar Motion636005 -Node: Calendar Unit Motion636888 -Node: Move to Beginning or End639211 -Node: Specified Dates640344 -Node: Scroll Calendar641232 -Node: Mark and Region643023 -Node: General Calendar644929 -Node: LaTeX Calendar646537 -Node: Holidays648551 -Node: Sunrise/Sunset651653 -Node: Lunar Phases654692 -Node: Other Calendars656077 -Node: Calendar Systems657564 -Node: To Other Calendar660675 -Node: From Other Calendar662666 -Node: Mayan Calendar664971 -Node: Diary668166 -Node: Diary Commands669915 -Node: Format of Diary File673238 -Node: Date Formats676108 -Node: Adding to Diary678682 -Node: Special Diary Entries680313 -Node: Calendar Customization685652 -Node: Calendar Customizing686514 -Node: Holiday Customizing689749 -Node: Date Display Format696236 -Node: Time Display Format697194 -Node: Daylight Savings698332 -Node: Diary Customizing701520 -Node: Hebrew/Islamic Entries706141 -Node: Fancy Diary Display709481 -Node: Included Diary Files711397 -Node: Sexp Diary Entries712378 -Node: Appt Customizing717468 -Node: Sorting718514 -Node: Shell723320 -Node: Single Shell724613 -Node: Interactive Shell726227 -Node: Shell Mode729992 -Node: Terminal emulator732483 -Node: Term Mode734792 -Node: Paging in Term735706 -Node: Narrowing736504 -Node: Hardcopy738454 -Node: Recursive Edit739426 -Node: Dissociated Press742413 -Node: CONX744976 -Node: Amusements746000 -Node: Emulation746480 -Node: Customization748340 -Node: Minor Modes750156 -Node: Variables751788 -Node: Examining753744 -Node: Easy Customization755205 -Node: Customization Groups756219 -Node: Changing an Option759148 -Node: Face Customization765418 -Node: Specific Customization767182 -Node: Edit Options769789 -Node: Locals771373 -Node: File Variables774552 -Node: Keyboard Macros779102 -Node: Basic Kbd Macro781273 -Node: Save Kbd Macro783205 -Node: Kbd Macro Query784863 -Node: Key Bindings786805 -Node: Keymaps787679 -Node: Rebinding791529 -Node: Interactive Rebinding792228 -Node: Programmatic Rebinding794417 -Node: Key Bindings Using Strings797224 -Node: Disabling798851 -Node: Syntax800630 -Node: Syntax Entry801511 -Node: Syntax Change805595 -Node: Init File807764 -Node: Init Syntax809228 -Node: Init Examples811579 -Node: Terminal Init815769 -Node: Audible Bell817506 -Node: Faces820937 -Node: Frame Components825779 -Node: X Resources826224 -Node: Geometry Resources827883 -Node: Iconic Resources830331 -Node: Resource List830803 -Node: Face Resources837310 -Node: Widgets840987 -Node: Menubar Resources841926 -Node: Quitting843440 -Node: Lossage846418 -Node: Stuck Recursive847062 -Node: Screen Garbled847768 -Node: Text Garbled848902 -Node: Unasked-for Search849541 -Node: Emergency Escape850326 -Node: Total Frustration852105 -Node: Bugs852736 -Node: Glossary862297 -Node: Manifesto893951 -Node: Key Index917428 -Node: Command Index943355 -Node: Variable Index985941 -Node: Concept Index1002027 +Node: License22790 +Node: Distrib36072 +Node: Intro37736 +Node: Frame40607 +Node: Point44551 +Node: Echo Area46518 +Node: Mode Line48895 +Node: XEmacs under X53326 +Node: Keystrokes56503 +Node: Intro to Keystrokes57347 +Node: Representing Keystrokes59450 +Node: Key Sequences60807 +Node: String Key Sequences64148 +Node: Meta Key64531 +Node: Super and Hyper Keys66004 +Node: Character Representation72249 +Node: Commands73269 +Node: Pull-down Menus76118 +Node: File Menu79467 +Node: Edit Menu83289 +Node: Apps Menu85672 +Node: Options Menu86162 +Node: Buffers Menu90180 +Node: Tools Menu90487 +Node: Help Menu90978 +Node: Menu Customization91379 +Node: Entering Emacs95609 +Node: Exiting98506 +Node: Command Switches102979 +Node: Startup Paths112343 +Node: Basic119673 +Node: Inserting Text121077 +Node: Moving Point124073 +Node: Erasing127679 +Node: Basic Files128984 +Node: Basic Help130906 +Node: Blank Lines131501 +Node: Continuation Lines133077 +Node: Position Info134744 +Node: Arguments138160 +Node: Undo142259 +Node: Minibuffer145206 +Node: Minibuffer File147816 +Node: Minibuffer Edit149621 +Node: Completion152562 +Node: Completion Example154493 +Node: Completion Commands155588 +Node: Strict Completion158564 +Node: Completion Options160345 +Node: Minibuffer History161853 +Node: Repetition165037 +Node: M-x167882 +Node: Help172976 +Node: Help Summary174386 +Node: Key Help177172 +Node: Name Help178131 +Node: Apropos180776 +Node: Library Keywords183895 +Node: Help Mode186216 +Node: Misc Help186713 +Node: Mark189861 +Node: Setting Mark191715 +Node: Using Region194837 +Node: Marking Objects195574 +Node: Mark Ring197412 +Node: Mouse Selection199128 +Node: Additional Mouse Operations201135 +Node: Killing205339 +Node: Yanking210975 +Node: Kill Ring211778 +Node: Appending Kills213380 +Node: Earlier Kills215417 +Node: Using X Selections218030 +Node: X Clipboard Selection219280 +Node: X Selection Commands221457 +Node: X Cut Buffers222543 +Node: Active Regions223902 +Node: Accumulating Text228482 +Node: Rectangles231555 +Node: Registers235074 +Node: RegPos236528 +Node: RegText237684 +Node: RegRect238790 +Node: RegConfig239669 +Node: RegNumbers240609 +Node: RegFiles241327 +Node: Bookmarks241985 +Node: Display245357 +Node: Scrolling246852 +Node: Horizontal Scrolling250995 +Node: Selective Display252190 +Node: Display Vars253409 +Node: Search256087 +Node: Incremental Search257280 +Node: Non-Incremental Search266208 +Node: Word Search267650 +Node: Regexp Search269268 +Node: Regexps271638 +Node: Search Case285635 +Node: Replace286416 +Node: Unconditional Replace287364 +Node: Regexp Replace288499 +Node: Replacement and Case289434 +Node: Query Replace290414 +Node: Other Repeating Search293641 +Node: Fixit294896 +Node: Kill Errors295476 +Node: Transpose296809 +Node: Fixing Case299213 +Node: Spelling299859 +Node: Files301320 +Node: File Names302630 +Node: Visiting306967 +Node: Saving313799 +Node: Backup318722 +Node: Backup Names320118 +Node: Backup Deletion321601 +Node: Backup Copying322751 +Node: Interlocking324457 +Node: Reverting328585 +Node: Auto Save330497 +Node: Auto Save Files331464 +Node: Auto Save Control333305 +Node: Recover335143 +Node: Version Control336298 +Node: Concepts of VC338336 +Node: Editing with VC339946 +Node: Variables for Check-in/out345202 +Node: Log Entries347101 +Node: Change Logs and VC348281 +Node: Old Versions351548 +Node: VC Status353551 +Node: Renaming and VC355265 +Node: Snapshots355944 +Node: Making Snapshots356445 +Node: Snapshot Caveats357738 +Node: Version Headers359547 +Node: ListDir362246 +Node: Comparing Files364295 +Node: Dired365828 +Node: Dired Enter366499 +Node: Dired Edit367324 +Node: Dired Deletion369071 +Node: Dired Immed372294 +Node: Misc File Ops373570 +Node: Buffers376058 +Node: Select Buffer378216 +Node: List Buffers380011 +Node: Misc Buffer381769 +Node: Kill Buffer383412 +Node: Several Buffers384542 +Node: Windows388409 +Node: Basic Window389120 +Node: Split Window390839 +Node: Other Window392972 +Node: Pop Up Window395403 +Node: Change Window396908 +Node: Mule399816 +Node: Mule Intro401079 +Node: Language Environments402095 +Node: Input Methods404202 +Node: Select Input Method407922 +Node: Coding Systems410077 +Node: Recognize Coding414263 +Node: Specify Coding417589 +Node: Major Modes422520 +Node: Choosing Modes424739 +Node: Indentation427129 +Node: Indentation Commands429224 +Node: Tab Stops431953 +Node: Just Spaces433802 +Node: Text434617 +Node: Text Mode436600 +Node: Nroff Mode438679 +Node: TeX Mode440322 +Node: TeX Editing442574 +Node: TeX Print446008 +Node: Outline Mode449227 +Node: Outline Format450708 +Node: Outline Motion453508 +Node: Outline Visibility455061 +Node: Words457982 +Node: Sentences460929 +Node: Paragraphs463125 +Node: Pages465413 +Node: Filling468013 +Node: Auto Fill468584 +Node: Fill Commands470731 +Node: Fill Prefix472896 +Node: Case475084 +Node: Programs477112 +Node: Program Modes479662 +Node: Lists481894 +Node: Defuns487734 +Node: Grinding490387 +Node: Basic Indent491015 +Node: Multi-line Indent493036 +Node: Lisp Indent494652 +Node: C Indent498102 +Node: Matching503342 +Node: Comments504864 +Node: Balanced Editing511316 +Node: Lisp Completion512330 +Node: Documentation513345 +Node: Change Log514584 +Node: Tags517162 +Node: Tag Syntax518811 +Node: Create Tags Table522755 +Node: Etags Regexps526815 +Node: Select Tags Table531473 +Node: Find Tag535246 +Node: Tags Search538210 +Node: List Tags541666 +Node: Fortran542695 +Node: Fortran Motion543771 +Node: Fortran Indent544591 +Node: ForIndent Commands545276 +Node: ForIndent Num546421 +Node: ForIndent Conv547695 +Node: ForIndent Vars548471 +Node: Fortran Comments549639 +Node: Fortran Columns553237 +Node: Fortran Abbrev554660 +Node: Asm Mode555569 +Node: Running556121 +Node: Compilation557090 +Node: Lisp Modes561940 +Node: Lisp Libraries563213 +Node: Loading563767 +Node: Compiling Libraries568227 +Node: Mocklisp571118 +Node: Lisp Eval571795 +Node: Lisp Debug575435 +Node: Lisp Interaction580862 +Node: External Lisp582217 +Node: Packages584291 +Node: Package Terminology585110 +Node: Using Packages586468 +Node: Building Packages595346 +Node: Available Packages597895 +Node: Abbrevs603278 +Node: Defining Abbrevs605477 +Node: Expanding Abbrevs607924 +Node: Editing Abbrevs610626 +Node: Saving Abbrevs612499 +Node: Dynamic Abbrevs614454 +Node: Picture615756 +Node: Basic Picture618189 +Node: Insert in Picture620474 +Node: Tabs in Picture621896 +Node: Rectangles in Picture623417 +Node: Sending Mail625325 +Node: Mail Format627036 +Node: Mail Headers628386 +Node: Mail Mode634794 +Node: Reading Mail638407 +Node: Calendar/Diary639982 +Node: Calendar Motion641654 +Node: Calendar Unit Motion642537 +Node: Move to Beginning or End644860 +Node: Specified Dates645993 +Node: Scroll Calendar646881 +Node: Mark and Region648672 +Node: General Calendar650578 +Node: LaTeX Calendar652186 +Node: Holidays654200 +Node: Sunrise/Sunset657302 +Node: Lunar Phases660341 +Node: Other Calendars661726 +Node: Calendar Systems663213 +Node: To Other Calendar666324 +Node: From Other Calendar668315 +Node: Mayan Calendar670620 +Node: Diary673815 +Node: Diary Commands675564 +Node: Format of Diary File678887 +Node: Date Formats681757 +Node: Adding to Diary684331 +Node: Special Diary Entries685962 +Node: Calendar Customization691301 +Node: Calendar Customizing692163 +Node: Holiday Customizing695398 +Node: Date Display Format701885 +Node: Time Display Format702843 +Node: Daylight Savings703981 +Node: Diary Customizing707169 +Node: Hebrew/Islamic Entries711790 +Node: Fancy Diary Display715130 +Node: Included Diary Files717046 +Node: Sexp Diary Entries718027 +Node: Appt Customizing723117 +Node: Sorting724163 +Node: Shell728969 +Node: Single Shell730262 +Node: Interactive Shell731876 +Node: Shell Mode735641 +Node: Terminal emulator738132 +Node: Term Mode740441 +Node: Paging in Term741355 +Node: Narrowing742153 +Node: Hardcopy744103 +Node: Recursive Edit745075 +Node: Dissociated Press748062 +Node: CONX750625 +Node: Amusements751649 +Node: Emulation752129 +Node: Customization753989 +Node: Minor Modes755805 +Node: Variables757437 +Node: Examining759393 +Node: Easy Customization760854 +Node: Customization Groups761868 +Node: Changing an Option764797 +Node: Face Customization771067 +Node: Specific Customization772831 +Node: Edit Options775438 +Node: Locals777022 +Node: File Variables780201 +Node: Keyboard Macros784751 +Node: Basic Kbd Macro786922 +Node: Save Kbd Macro788854 +Node: Kbd Macro Query790512 +Node: Key Bindings792454 +Node: Keymaps793328 +Node: Rebinding797178 +Node: Interactive Rebinding797877 +Node: Programmatic Rebinding800066 +Node: Key Bindings Using Strings802873 +Node: Disabling804500 +Node: Syntax806279 +Node: Syntax Entry807160 +Node: Syntax Change811244 +Node: Init File813413 +Node: Init Syntax814877 +Node: Init Examples817228 +Node: Terminal Init821418 +Node: Audible Bell823155 +Node: Faces826586 +Node: Frame Components831428 +Node: X Resources831873 +Node: Geometry Resources833532 +Node: Iconic Resources835980 +Node: Resource List836452 +Node: Face Resources842959 +Node: Widgets846636 +Node: Menubar Resources847575 +Node: Quitting849089 +Node: Lossage852067 +Node: Stuck Recursive852711 +Node: Screen Garbled853417 +Node: Text Garbled854551 +Node: Unasked-for Search855190 +Node: Emergency Escape855975 +Node: Total Frustration857754 +Node: Bugs858385 +Node: Glossary867946 +Node: Manifesto899600 +Node: Key Index923077 +Node: Command Index949004 +Node: Variable Index991590 +Node: Concept Index1007676  End Tag Table diff --git a/info/xemacs.info-1 b/info/xemacs.info-1 index 378b1c7..ad6342f 100644 --- a/info/xemacs.info-1 +++ b/info/xemacs.info-1 @@ -70,7 +70,8 @@ Important General Concepts * Command Switches:: Hairy startup options. * Startup Paths:: - How XEmacs finds Directories and Files + How XEmacs finds Directories and Files. +* Packages:: How XEmacs organizes its high-level functionality. Fundamental Editing Commands * Basic:: The most basic editing commands. @@ -109,7 +110,6 @@ Advanced Features * Text:: Commands and modes for editing English. * Programs:: Commands and modes for editing programs. * Running:: Compiling, running and debugging programs. -* Packages:: How to add new packages to XEmacs. * Abbrevs:: How to define text abbreviations to reduce the number of characters you must type. * Picture:: Editing pictures made up of characters @@ -175,6 +175,13 @@ Pull-down Menus * Menu Customization:: Adding and removing menu items and related operations. +Packages + +* Packages:: Introduction to XEmacs Packages. +* Package Terminology:: Understanding different kinds of packages. +* Using Packages:: How to install and use packages. +* Building Packages:: Building packages from sources. + Basic Editing Commands * Blank Lines:: Commands to make or delete blank lines. @@ -444,13 +451,6 @@ Lisp Libraries * Compiling Libraries:: Compiling a library makes it load and run faster. * Mocklisp:: Converting Mocklisp to Lisp so XEmacs can run it. -Packages - -* Packages:: Introduction to XEmacs Packages. -* Package Terminology:: Understanding different kinds of packages. -* Using Packages:: How to install and use packages. -* Building Packages:: Building packages from sources. - Abbrevs * Defining Abbrevs:: Defining an abbrev, so it will expand when typed. diff --git a/info/xemacs.info-3 b/info/xemacs.info-3 index 80127b0..6c41e8f 100644 --- a/info/xemacs.info-3 +++ b/info/xemacs.info-3 @@ -393,7 +393,7 @@ command line arguments. Emacs only.  -File: xemacs.info, Node: Startup Paths, Next: Basic, Prev: Command Switches, Up: Top +File: xemacs.info, Node: Startup Paths, Next: Packages, Prev: Command Switches, Up: Top How XEmacs finds Directories and Files ====================================== @@ -555,7 +555,7 @@ aiding in debugging any problems which come up. package data directories as well as `data-directory'.  -File: xemacs.info, Node: Basic, Next: Undo, Prev: Startup Paths, Up: Top +File: xemacs.info, Node: Basic, Next: Undo, Prev: Packages, Up: Top Basic Editing Commands ********************** diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index cf05b9a..da7bcf0 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,11 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-09-01 Katsumi Yamaoka + + * make-po.c (BUFSIZE): Increase value to 32768. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. diff --git a/lib-src/make-po.c b/lib-src/make-po.c index 3db1189..37bb4fa 100644 --- a/lib-src/make-po.c +++ b/lib-src/make-po.c @@ -18,7 +18,8 @@ #endif /* #define BUFSIZE 8192 */ -#define BUFSIZE 16384 +/* #define BUFSIZE 16384 */ +#define BUFSIZE 32768 #define NEWSTRING 31 /* Character signalling start of new doc string */ #define LINEEND "\\n" #define ENDSTRING "\"\n" diff --git a/lib-src/qsort.c b/lib-src/qsort.c index ff8ef60..404469a 100644 --- a/lib-src/qsort.c +++ b/lib-src/qsort.c @@ -64,7 +64,7 @@ typedef struct stack. Assuming a 32-bit integer, this needs only 32 * sizeof (stack_node) == 136 bits. Pretty cheap, actually. - 2. Chose the pivot element using a median-of-three decision tree. + 2. Choose the pivot element using a median-of-three decision tree. This reduces the probability of selecting a bad pivot value and eliminates certain extraneous comparisons. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a37b66e..5977c1a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,378 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-11-13 Katsumi Yamaoka + + * code-cmds.el: Provide the feature. + +2000-07-21 Jan Vroonhof + + * dumped-lisp.el (preloaded-file-list): Load code-cmds.el + + * code-cmds.el: New file + * mule/mule-cmds.el: + * mule/mule-misc.el + (coding-keymap): New keymap. Define coding system keyboard + commands on file-coding builds too. + (coding-system-change-eol-conversion): + (universal-coding-system-argument): + (set-default-coding-systems): + (prefer-coding-system): Moved from mule-cmds.el + (set-buffer-process-coding-system): Moved from mule-misc.el + +2000-09-15 Stephen Carney + + * etags.el (buffer-tag-table-files): Use append instead of nconc. + +2000-11-09 Steve Youngs + + * package-get.el (package-get-download-sites): Add a pre-release + site for experimental packages. + + * auto-autoloads.el: Regenerated. + +2000-08-01 Andy Piper + + * gutter-items.el (buffers-tab-omit-function): reference + buffers-tab-select-visible-buffers. + (buffers-tab-filter-functions): new variable, by default uses + buffers-tab-selection-function and buffers-tab-omit-function. + (select-buffers-tab-buffers-by-mode): invert arguments. + (buffers-tab-select-visible-buffers): new function. Invert calling + of buffers-menu-omit-invisible-buffers. + (buffers-tab-items): rewrite to use + buffers-tab-filter-functions. Rewrite docstring. + (gutter-buffers-tab-extent): delete. + (add-tab-to-gutter): always build a new extent when adding the + tabs. + (update-tab-in-gutter): make gutter dirty when orientation + changes. + +2000-11-07 Martin Buchholz + + * bytecomp.el (byte-compile-defvar-or-defconst): + Only do loadhist recording if defvar form includes a value. + +2000-11-02 Martin Buchholz + + * bytecomp.el (byte-compile-initial-macro-environment): + `eval-when-compile' should not compile its body. + +2000-11-02 Stephen J. Turnbull + + * mule/cyrillic.el: Add Windows 1251 code page encoding (by + Sergey Groznyh in <863diqaygu.fsf@fct.ru>). Fix + some Japanese English. Remove some ancient FSF comments, and + improve docstrings. Use symbols not vectors for tables. + +2000-11-03 Martin Buchholz + + * keymap.el: + (local-key-binding): + (global-key-binding): + Add an optional `accept-defaults' parameter, just like `lookup-key'. + + * lisp.el: + (backward-sexp): Slightly simpler code. + (mark-sexp): Make arg optional, like FSF Emacs. + (forward-list): Slightly simpler code. + (backward-list): Slightly simpler code. + (down-list): Make arg optional, like FSF Emacs. + (up-list): Make arg optional, like FSF Emacs. + (backward-up-list): Make arg optional, like FSF Emacs. + (kill-sexp): Make arg optional, like FSF Emacs. + (backward-kill-sexp): Make arg optional, like FSF Emacs. + + * font-menu.el (font-menu-change-face): + Take continuable errors into account. + + * abbrev.el: + * abbrev.el (clear-abbrev-table): + * abbrev.el (define-abbrev-table): + * abbrev.el (define-abbrev): + * abbrev.el (insert-abbrev-table-description): + * apropos.el (apropos-documentation-check-doc-file): + * apropos.el (apropos-documentation-check-elc-file): + * buff-menu.el (list-buffers): + * buff-menu.el (list-buffers-noselect): + * bytecomp.el (byte-recompile-directory): + * bytecomp.el (batch-byte-compile): + * cl-macs.el (typep): + * code-files.el (find-coding-system-magic-cookie): + * code-files.el (insert-file-contents): + * cus-edit.el (customize-set-variable): + * cus-edit.el (customize-save-variable): + * cus-face.el (custom-set-face-font-size): + * cus-face.el (custom-set-face-update-spec): + * cus-face.el (custom-reset-faces): + * custom.el (custom-check-theme): + * custom.el (copy-upto-last): + * fill.el (canonically-space-region): + * fill.el (fill-paragraph): + * fill.el (fill-region): + * fill.el (find-space-insertable-point): + * fill.el (justify-current-line): + * faces.el (face-spec-update-all-matching): + * faces.el (set-face-stipple): + * files-nomule.el (insert-file-contents): + * files.el (insert-file-contents-literally): + * files.el (hack-local-variables-last-page): + * files.el (basic-save-buffer): + * files.el (insert-directory): + * font-menu.el (font-menu-change-face): + * font.el (font-spatial-to-canonical): + * format.el (format-encode-region): + * format.el (format-insert-file): + * format.el (format-replace-strings): + * gutter.el (set-gutter-element): + * help.el (key-or-menu-binding): + * help.el (describe-bindings): + * help.el (with-syntax-table): + * indent.el (indent-rigidly): + * indent.el (delete-to-left-margin): + * info.el: + * info.el (Info-extract-dir-entry-from): + * info.el (Info-build-dir-anew): + * info.el (Info-rebuild-dir): + * info.el (Info-batch-rebuild-dir): + * info.el (Info-read-subfile): + * info.el (Info-build-node-completions): + * info.el (Info-extract-menu-node-name): + * isearch-mode.el (isearch-range-invisible): + * isearch-mode.el (isearch-restore-invisible-extents): + * itimer.el (itimerp): + * itimer.el (itimer-live-p): + * keymap.el: + * keymap.el (substitute-key-definition): + * keymap.el (read-command-or-command-sexp): + * keymap.el (local-key-binding): + * keymap.el (global-key-binding): + * keymap.el (global-set-key): + * keymap.el (local-set-key): + * ldap.el: + * ldap.el (ldap-add-entries): + * ldap.el (ldap-delete-entries): + * lisp.el (backward-sexp): + * lisp.el (mark-sexp): + * lisp.el (forward-list): + * lisp.el (backward-list): + * lisp.el (down-list): + * lisp.el (backward-up-list): + * lisp.el (up-list): + * lisp.el (kill-sexp): + * lisp.el (backward-kill-sexp): + * menubar.el (add-menu-button): + * menubar.el (add-submenu): + * menubar.el (delete-menu-item): + * menubar.el (relabel-menu-item): + * mouse.el (narrow-window-to-region): + * obsolete.el (define-obsolete-variable-alias): + * obsolete.el (store-substring): + * package-admin.el: + * package-admin.el (package-admin-install-function): + * package-admin.el (package-admin-install-function-mswindows): + * package-admin.el (package-admin-default-install-function): + * package-get.el (package-get-update-base-entries): + * packages.el (packages-load-package-dumped-lisps): + * packages.el (packages-collect-package-dumped-lisps): + * printer.el (generic-print-buffer): + * printer.el (generic-print-region): + * replace.el (occur-mode-mouse-goto): + * replace.el (perform-replace): + * select.el (get-selection-no-error): + * simple.el: + * simple.el (newline): + * simple.el (open-line): + * simple.el (edit-and-eval-command): + * simple.el (goto-line): + * simple.el (undo): + * simple.el (kill-region): + * simple.el (copy-region-as-kill): + * simple.el (kill-ring-save): + * simple.el (set-mark): + * simple.el (next-line): + * simple.el (previous-line): + * simple.el (line-move): + * simple.el (set-goal-column): + * simple.el (comment-region): + * subr.el: + * subr.el (putf): + * syntax.el (modify-syntax-entry): + * syntax.el (map-syntax-table): + * view-less.el (view-file): + * view-less.el (view-buffer): + * view-less.el (view-file-other-window): + * window-xemacs.el (backward-other-window): + * window.el: + * window.el (one-window-p): + * window.el (walk-windows): + * window.el (window-list): + * x-mouse.el (x-mouse-kill): + * x-select.el (x-get-cutbuffer): + * x-select.el (x-store-cutbuffer): + * term/bg-mouse.el (bg-mouse-line-to-center): + * term/sun-mouse.el (window-line-end): + * term/sun-mouse.el (sun-select-region): + * term/sun.el (kill-region-and-unmark): + * mule/mule-category.el: + * mule/mule-category.el (modify-category-entry): + * mule/mule-category.el (char-category-list): + * mule/mule-coding.el (coding-system-force-on-output): + * mule/mule-misc.el (coding-system-put): + Docstring arglist/Texinfo fixes. See man/ChangeLog for details. + +2000-11-02 Stephen J. Turnbull + + * cus-face.el: Typo fixes and tiny clarifications. + * custom.el: ditto + +2000-10-27 Yoshiki Hayashi + + * startup.el (auto-save-list-file-prefix): Moved to fileio.c. + * startup.el (normal-top-level): Setup auto-save-list-file-name + if auto-save-list-file-prefix is non-nil. + +2000-10-25 Yoshiki Hayashi + + * files.el (auto-mode-alist): Allow mixed case suffix for idlwave-mode. + +2000-01-05 Yoshiki Hayashi + + * hyper-apropos.el (hyper-apropos-this-symbol): Don't always + get symbol at point-min. + +2000-10-24 Didier Verna + + * info.el (Info-emacs-info-file-name): defconst it. + * info.el (Info-footnote-tag): defcustom it. + * info.el (Info-no-description-string): ditto. + * info.el (Info-find-node): adapt to new semantics of + 'Info-suffixed-file (don't do the case variants stuff). + * info.el (Info-insert-dir): rewrite the dir file variants code. + * info.el (Info-directory-files): New. Return the list of info + files in a directory. + * info.el (Info-dir-outdated-p): use it. + * info.el (Info-parse-dir-entries): ditto. + * info.el (Info-build-dir-anew): don't restrict to files ending + with a ".info.*" extension. + * info.el (Info-set-mode-line): ditto. + * info.el (Info-read-subfile): adapt to new semantics of + 'Info-suffixed-file (append 'exact argument). + * info.el (Info-all-case-regexp): New. Return a regexp matching a + string independently of the case. + * info.el (Info-suffixed-file): use it (match all possible case + for the file name). + * info.el (Info-insert-file-contents): code cleanup. + * info.el (Info-rebuild-dir): cosmetics only. Fit code in 80 + columns. + * info.el (Info-batch-rebuild-dir): ditto. + * info.el (Info-read-node-name-1): ditto. + * info.el (Info-search): ditto. + * info.el (Info-fontify-node): ditto. + + +2000-10-24 Didier Verna + + * process.el (shell-command): when called from a program, avoid + 'push-mark's "mark-set" message. + +2000-10-15 MIYASHITA Hisashi + + * mule/thai-xtis.el (tis-620): Specify coding-system's ccl-program + by a symbol, not by a vector. + * mule/vietnamese.el (vscii): Likewise. + (viscii): Likewise. + * mule/cyrillic.el (koi8-r): Likewise. + + * mule/chinese.el (chinese-big5-1): Specify charset's ccl-program + by a symbol, not by a vector. + (chinese-big5-2): Likewise. + * mule/ethiopic.el (ethiopic): Likewise. + * mule/vietnamese.el (vietnamese-viscii-lower): Likewise. + (vietnamese-viscii-upper): Likewise. + +2000-10-12 Yoshiki Hayashi + + * files.el (auto-mode-alist): Remove obsolete entry for html3-mode. + +2000-10-13 Yoshiki Hayashi + + * byte-optimize.el (byte-optimize-car): New function. + (byte-optimize-cdr): Ditto. + +2000-10-12 Yoshiki Hayashi + + * byte-optimize.el: Partial synch with FSF 20.7. + Optimize constant concatenation. + Add keymapp as a side effect free function. It is a built-in. + (byte-after-unbind-pos): Remove byte-equal. + +2000-10-13 Gunnar Evermann + + * update-elc-2.el: Quote regexps correctly. + +2000-10-05 MIYASHITA Hisashi + + * mule/mule-ccl.el: Sync up with Emacs 21.0.90. + (ccl-compile): Apply integerp, not integer-or-char-p to + check the type of the buffer magnification + (ccl-compile-write-string): Encode a string with binary + coding system. + (ccl-compile-write-repeat): Likewise. + +2000-09-25 Robert Pluim + + * buff-menu.el: + * bytecomp.el: + * coding.el: + * faces.el: + * files.el: + * fill.el: + * float-sup.el: + * font-lock.el: + * help.el: + * iso8859-1.el: + * loaddefs.el: + * menubar-items.el: + * menubar.el: + * modeline.el: + * msw-font-menu.el: + * paragraphs.el: + * paths.el: + * replace.el: + * simple.el: + * sound.el: + * startup.el: + * version.el: + * x-faces.el: + * x-font-menu.el: + Remove purecopy. + +2000-10-03 Daniel Pittman + + * simple.el (do-auto-fill): Use the function pointer to by + `comment-line-break-function', not `indent-new-comment-line'. This + fixes an issue with cc-mode comment continuation. + +2000-10-11 Martin Buchholz + + * simple.el (turn-on-auto-fill): Add (interactive). + * mwheel.el (mwheel-install): Add (interactive). + * font-lock.el (turn-on-font-lock): Add (interactive). + (turn-off-font-lock): Add (interactive). + +2000-10-03 Karl M. Hegbloom + + * packages.el (packages-special-base-regexp): Add `man'. + +2000-10-08 Adrian Aichner + + * wid-edit.el (widget-specify-active): map over extents in current + buffer like `widget-specify-inactive' does. Mapping over the + inactive extent object does not work since the current extent is + ignored by `map-extents'. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. @@ -72,13 +447,13 @@ * easymenu.el: doc fixes. (easy-menu-do-define): Use backquote. - (easy-menu-change): - (easy-menu-add): + (easy-menu-change): + (easy-menu-add): `when' seems much clearer than `if' here. (easy-menu-remove): - (easy-menu-add-item): - (easy-menu-item-present-p): - (easy-menu-remove-item): + (easy-menu-add-item): + (easy-menu-item-present-p): + (easy-menu-remove-item): Wrap using (when (featurep 'menubar) ...) 2000-09-16 Martin Buchholz @@ -91,7 +466,7 @@ * window.el (save-selected-window): Use backquote. - * bytecomp.el (byte-compile-file-form-defvar-or-defconst): + * bytecomp.el (byte-compile-file-form-defvar-or-defconst): Renamed from `byte-compile-file-form-defvar'. * bytecomp.el (byte-compile-defvar-or-defconst): Only cons onto current-load-list in top-level forms. @@ -107,9 +482,9 @@ Remove unneeded defvar by rearranging order of let* forms. * mule/mule-ccl.el (ccl-get-next-code): - * menubar-items.el (bookmark-menu-filter): - (language-environment-menu-filter): - (tutorials-menu-filter): + * menubar-items.el (bookmark-menu-filter): + (language-environment-menu-filter): + (tutorials-menu-filter): * toolbar-items.el (toolbar-compile): * byte-optimize.el (disassemble-offset): Use (declare (special ...)) instead of `defvar'. @@ -149,13 +524,13 @@ problems. also undo the kludge of using a separate "*Show*" buffer for display when there's a temp-buffer-show-function; we can avoid this by just being a little smarter. - + * dialog-items.el: * dialog-items.el (search-dialog-regexp): New. * dialog-items.el (search-dialog-callback): * dialog-items.el (make-search-dialog): add a regexp option to the dialog and clean up a bit. - + * dialog.el: * dialog.el (yes-or-no-p-dialog-box): * dialog.el (get-dialog-box-response): @@ -168,12 +543,12 @@ modal dialog boxes, giving the standard window-system feedback. (e.g. under windows, clicking on a disabled frame causes a beep and makes the dialog box flash three times.) - + * dragdrop.el: header keyword frobbing. - + * dumped-lisp.el (preloaded-file-list): renamed winnt.el to win32-native.el. - + * faces.el (face-property): * faces.el (set-face-property): * faces.el (frob-face-property): @@ -193,20 +568,20 @@ something that required 'term. (Adrian, now you can use stack-trace- on-error to find the exact place where things are going wrong instead of having to laboriously binary-search your way through.) - + * finder.el (finder-known-keywords): cleaned up -- properly sorted, clarified the meanings of many of the keywords, and added a few -- mswin, gui, content, build, www, user, services. the last two try to distinguish between a package that's used directly by the user, and a package that provides support services to other packages. - + * font-lock.el (lisp-font-lock-keywords-2): update list of lisp control structures to include everything, including new ones i introduced. - + * gutter.el: header keyword frobbing. - + * isearch-mode.el (isearch-ring-adjust1): M-p to recall the most recent isearch element was not doing so! you got the second-most- recent instead. @@ -215,7 +590,7 @@ more menubar cleanups. * lisp-mode.el (with-selected-window): make it indent properly. - + * menubar-items.el (default-menubar): lots of menubar cleanups. rearranged the options menu the most, e.g. splitting up the Keyboard/Mouse menu into a new Editing menu and combining the @@ -230,7 +605,7 @@ better and better ways to group menu items. When we eventually move the options menu to a property sheet, the existing structure will probably be preserved fairly well. - + * minibuf.el (next-history-element): fix problems with pressing down arrow in repeat-complex-command. @@ -239,19 +614,19 @@ added custom variable for controlling the 3d modeline. the corresponding Options item has been present for a long time, but commented out with "fix me!" comments. it's fixed now. - + * obsolete.el (add-menu): remove bogus gettexts. - + * process.el (shell-quote-argument): handle this correctly under Windows native with COMMAND.COM/CMD.EXE. For bash under Windows native, see below. - + * simple.el: * simple.el (display-warning-buffer): Fixed the handling of warning display to eliminate the annoying *Show* buffer, like was done for byte-compiler output above. - + * simple.el (debug-print): New. Simple function for sending debug messages to the console and/or other debug places. @@ -264,7 +639,7 @@ duplicated the entire logic. The new version is smaller, easier to understand, much more robust, and has extended features -- those of replace-match.) - + * window.el: * window.el (with-selected-window): New. An obvious complement to the existing `with-selected-frame' and @@ -280,7 +655,7 @@ version, I tried hard to do what I thought was correct. But more thought is needed, and ideally the volunteer work of people with these configurations that they generally run on.) - + * x-font-menu.el (x-font-menu-font-data): Put in defvar's to fix byte-compiler warnings. @@ -315,7 +690,7 @@ * files.el (auto-mode-alist): Add .spec for RPM. 2000-07-31 Andy Piper - + * gutter-items.el (update-tab-in-gutter): deprecate :properties. 2000-07-31 Yoshiki Hayashi @@ -366,7 +741,7 @@ 2000-07-10 Andy Piper * dialog-items.el: sync with Ben's patch. - + * gutter-items.el (buffers-tab-switch-to-buffer): remove now-bogus comment. (progress-text-glyph): deleted. @@ -512,13 +887,13 @@ * help.el (variable-at-point): * help.el (variable-at-event): New. * help.el (describe-variable): - Major overhaul. - - Make functions and variables be mousable. - - Middle button hyperlinks. + Major overhaul. + - Make functions and variables be mousable. + - Middle button hyperlinks. - New context-menu entries. * keydefs.el: - * keydefs.el (global-map): + * keydefs.el (global-map): New key bindings to move lines up and down. * lisp-mode.el: @@ -542,7 +917,7 @@ * menubar-items.el (popup-buffer-menu): Removed. * menubar-items.el (popup-menubar-menu): Removed. Move to menubar.el. - + * menubar.el: * menubar.el (global-popup-menu): New. * menubar.el (mode-popup-menu): New. @@ -555,10 +930,10 @@ Move non-content functions here. Add support for context menu items on extents. - * minibuf.el (minibuffer-history-uniquify): + * minibuf.el (minibuffer-history-uniquify): Typo fix. - * minibuf.el (read-file-name-1): + * minibuf.el (read-file-name-1): Call new file dialog box if it exists. * minibuf.el (mouse-rfn-setup-vars): @@ -662,14 +1037,14 @@ 2000-07-16 Martin Buchholz - * apropos.el (apropos-documentation-check-doc-file): + * apropos.el (apropos-documentation-check-doc-file): `doc' variable should be let-bound, as was presumably intended. - * cus-edit.el (custom-variable-reset-saved): - (custom-variable-reset-standard): + * cus-edit.el (custom-variable-reset-saved): + (custom-variable-reset-standard): Remove unused variable comment-widget. Twice. - * toolbar.el (toolbar-blank-press-function): + * toolbar.el (toolbar-blank-press-function): Add a real defvar with initial value nil and proper docstring. (press-toolbar-button): No need to check for boundp-ness anymore. @@ -678,7 +1053,7 @@ * info.el (Info-find-node): This function needs an autoload cookie. - * mule/mule-x-init.el (x-use-halfwidth-roman-font): + * mule/mule-x-init.el (x-use-halfwidth-roman-font): Use let* since the second form referred to the first. 2000-07-16 Adrian Aichner @@ -727,19 +1102,19 @@ 2000-07-15 Martin Buchholz - * mule/mule-category.el (defined-category-hashtable): + * mule/mule-category.el (defined-category-hashtable): Use make-hash-table instead of make-hashtable * buff-menu.el: Byte-compiler warning fix. - * isearch-mode.el (isearch-highlight-all-cleanup): + * isearch-mode.el (isearch-highlight-all-cleanup): Remove unused variable `isearch-highlight-all-start'. * etags.el (add-to-tag-completion-table): Byte-compiler warning fix. * itimer.el (itimer-edit-mode): Byte-compiler warning fixes. - * cus-dep.el (Custom-make-dependencies): + * cus-dep.el (Custom-make-dependencies): Add autoload cookie for custom-add-loads to generated custom-load.el. * autoload.el (autoload-package-name): Warning suppression. @@ -747,7 +1122,7 @@ * custom.el: Add autoload for custom-declare-face. Allow `xemacs -no-autoloads -l bytecomp -f batch-byte-compile ...' - * cl.el (cl-hack-byte-compiler): + * cl.el (cl-hack-byte-compiler): Allow `xemacs -no-autoloads -l bytecomp -f batch-byte-compile ...' to work properly. @@ -832,7 +1207,7 @@ only when necessary. 2000-06-30 Charles G Waldman - + * cl-macs.el: fix cl-transform-function-property kludge so that it does not require a random feature. @@ -849,10 +1224,10 @@ * package-ui.el (defgroup pui): Correct a misspelling (pui-toggle-package-delete): Change `seleted' to `selected' - + 2000-06-12 Jan Vroonhof - * package-get.el (package-get-update-base): + * package-get.el (package-get-update-base): (package-get): Use insert-file-contents-literally always. (package-get-maybe-save-index): Force coding system for writing to binary. @@ -953,7 +1328,7 @@ Rewrite deferral code to handle any number of changes, merging them properly. Remove hacked-up code for revert-buffer, now unnecessary. - + * menubar-items.el (default-menubar): In Options->Edit Init File, don't switch to emacs-lisp-mode unless necessary; doing this turns off font-lock. @@ -988,14 +1363,14 @@ * gutter-items.el (raw-append-progress-display): Further fixes. Use set-glyph-image not set-image-instance-property, to fix problems with multiple windows in a frame. - + * menubar-items.el (tutorials-menu-filter): Fix typo. - + * startup.el (early-error-handler): Display message box under windows; otherwise, message will disappear before it can be viewed. - + * update-elc.el: Fix bug in NEEDTODUMP processing. @@ -1023,7 +1398,7 @@ * faces.el (set-face-blinking-p): * faces.el (set-face-reverse-p): doc string changes. - + * glyphs.el: * glyphs.el (make-image-specifier): * glyphs.el (glyph-property): @@ -1039,7 +1414,7 @@ conventions elsewhere in XEmacs and in general is a lot more obvious of a place to look. sometimes the make-foo-specifier function needs to be created in the process. - + * gutter.el: * gutter.el (make-gutter-specifier): New. * gutter.el (make-gutter-size-specifier): New. @@ -1102,7 +1477,7 @@ Restore M-up, M-down to 21.1 state. Put *ward-sentence on C-M-left, C-M-right instead. Define C-M-up, C-M-down to scroll the window without moving point. - + * simple.el: * simple.el (scroll-up-one): New. * simple.el (scroll-down-one): New. @@ -1114,9 +1489,9 @@ 2000-04-29 Martin Buchholz - * dialog.el (yes-or-no-p-dialog-box): + * dialog.el (yes-or-no-p-dialog-box): Fix docstring. - Fix following horrible bug in X11 mode with focus-follows-mouse: + Fix following horrible bug in X11 mode with focus-follows-mouse: 1. Visit two files in two different frames. 2. do File->Revert Buffer in one of those frames. 3. Dialog box appears. @@ -1124,7 +1499,7 @@ frame, then to the dialog box, and click on "Yes". 5. The file contents end up in the *wrong* buffer! Add TODO comment. - + 2000-04-28 Ben Wing * help.el (describe-installation): correct typo introduced @@ -1133,11 +1508,11 @@ * etags.el (buffer-tag-table-list): canonicalize filenames to Unix format so that tag-table-alist searching works under Windows. - + * autoload.el: Bowdlerize the supposedly objectionable words "who couldn't quite manage to cleanly modify batch-update-autoloads". - + * gutter-items.el (set-progress-display-style): * gutter-items.el (search-dialog-callback): * gutter-items.el (make-search-dialog): @@ -1183,7 +1558,7 @@ when quick-building. add commented-out code for profiling loadup. - + * update-elc.el (preloaded-file-list): add bytecomp.el, since it is required in order to build xemacs. @@ -1198,7 +1573,7 @@ * update-elc.el: compute whether any dumped .el or .elc files are newer than the dumped exe, and touch the file ../src/NEEDTODUMP if so. - + * update-elc.el (update-elc-files-to-compile): always change NOBYTECOMPILE in the src directory rather than current dir, so it will work under NT. @@ -1229,21 +1604,21 @@ 2000-04-16 Ben Wing * printer.el: New file. - + * dumped-lisp.el (preloaded-file-list): Declare printer.el. - + * help.el (describe-installation): Fix decoding for Windows. - + * menubar-items.el: * menubar-items.el (default-menubar): * menubar-items.el (tutorials-menu-filter): New. * menubar-items.el (popup-menubar-menu): Add authorship. Redo Help menu and Tutorials filter. - + * menubar.el: Correct comment. - + * modeline.el (modeline-buffer-identification): Correct doc string. - + * simple.el: * simple.el (printing): Removed. * simple.el (printer-name): Removed. @@ -1270,7 +1645,7 @@ (gutter-element-visibility-changed-hook): ditto. (set-gutter-element): ditto. (remove-gutter-element): ditto. - (set-gutter-element-visible-p): ditto. + (set-gutter-element-visible-p): ditto. (gutter-element-visible-p): ditto. (init-gutter): ditto. @@ -1289,9 +1664,9 @@ without constantly being prompted for the tag. * simple.el: Added a number of section headings, to clarify the organization of this file. - * simple.el (activate-region): - * simple.el (region-exists-p): - * simple.el (region-active-p): + * simple.el (activate-region): + * simple.el (region-exists-p): + * simple.el (region-active-p): Moved these three function down to the other side of the case-changing functions, so they join the rest of the region code. @@ -1300,10 +1675,10 @@ * simple.el (generic-print-buffer): New. New functions, a very simple prototype for a unified printing interface. - + * process.el (call-process-internal): Real fix for null BUFFER, other problems with BUFFER specs. - + * menubar-items.el: Fixed up File->Print to use new printing functions. Various corrections and expansions to Grep/Compile menus. @@ -1421,13 +1796,13 @@ (append-progress-display): ditto. 2000-03-20 Jeff Miller - + * lisp/make-docfile.el: call-process-internal is now implemented in process.el. 2000-03-21 Ben Wing - * mule\mule-cmds.el (set-language-info-alist): + * mule\mule-cmds.el (set-language-info-alist): Fix to correspond to new menu arrangement. 2000-03-21 Ben Wing @@ -1443,7 +1818,7 @@ * lisp-mode.el (lisp-interaction-mode-menubar-menu): New. * lisp-mode.el (lisp-interaction-mode): Put back Lisp Interaction menubar for Jan V's sake. - + * simple.el: * simple.el (mark-ring): * simple.el (dont-record-current-mark): New. @@ -1454,7 +1829,7 @@ * simple.el (push-mark): * simple.el (handle-pre-motion-command): Implement scheme for not recording unimportant marks. - + * subr.el: * subr.el (function-allows-args): New. New function function-allows-args. @@ -1574,12 +1949,12 @@ vassoc moved to alist.el. Accelerators added to all menus. Unused bound var new-props removed. - + * keydefs.el: I did a whole lot of rearranging to put things in a more consistent order and fixed a number of cases where key combinations involving up, down, left, right and so on were defined but the corresponding keypad combinations were not - defined. + defined. * lisp-mode.el: * lisp-mode.el (lisp-interaction-mode-popup-menu): @@ -1647,14 +2022,14 @@ b) I combined the top level Tools and Apps menus into a single Tools menu, because the distinction between the two is not obvious, and the items on the menus are not used often enough that - putting some of them onto submenus is a problem. + putting some of them onto submenus is a problem. c) I created two new top level menus called View and Cmds because there were too many items on the File and Edit menus, and I'm going to be adding more items to these menus. In contrast to the Tools menu, the items on these menus may be used quite often during an editing session, and so should be available with fewer - keystrokes. + keystrokes. d) I added a number of options to the options menu, including one for controlling whether the alt key can be used to traverse to @@ -1664,18 +2039,18 @@ options, and various other things. I also did a bit of rearranging, for example, combining the keyboard and mouse options into a single keyboard and mouse submenu to facilitate the - accelerators on that level. + accelerators on that level. e) I changed the variable buffers-menu-format-buffer-line-function to take two arguments instead of one, the second argument being the line number for use in creating an accelerator. I added a hack to support existing functions with one argument (although I - doubt that very many of these exist), for backward compatibility. + doubt that very many of these exist), for backward compatibility. f) I moved the top level mule menu to be a submenu of the edit menu. I think that most of the items on this menu are fairly useless and there are certainly not enough frequently used items - to justify this being its own top level menu. + to justify this being its own top level menu. g) I combined most of the items in big-menubar.el into the main menu. If people think the main menu is too big, it would be possible to @@ -1696,23 +2071,23 @@ a) Fixing the problem where closing the dialog box by clicking on the close button of the window didn't properly exit the - minibuffer. + minibuffer. b) Fixing the problem that if you typed part of a file name, and then clicked on a completion with the mouse, the file was not - correctly selected. + correctly selected. c) Changing the title of the dialog box to reflect the operation being done in accordance with user interface conventions, rather - than the name of the dialog box buffer, which is rather useless. + than the name of the dialog box buffer, which is rather useless. d) Remove the words "possible completions are" which didn't - belong. + belong. e) Fix things so that the completions scroll off the end of the completions windows only to the right, rather than both to the right and down, which is in accordance with Windows user interface - conventions. + conventions. * msw-init.el (init-post-mswindows-win): Added a binding for meta-F4, which is the standard windows binding @@ -1780,7 +2155,7 @@ * simple.el (capitalize-string-as-title): * simple.el (capitalize-region-as-title): New. - + * subr.el (add-hook): * subr.el (make-local-hook): New. diff --git a/lisp/abbrev.el b/lisp/abbrev.el index 110de33..eaf3c8b 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -67,38 +67,36 @@ This causes `save-some-buffers' to offer to save the abbrevs.") nil) -(defun define-abbrev-table (name defs) - "Define TABNAME (a symbol) as an abbrev table name. +(defun define-abbrev-table (table-name definitions) + "Define TABLE-NAME (a symbol) as an abbrev table name. Define abbrevs in it according to DEFINITIONS, which is a list of elements of the form (ABBREVNAME EXPANSION HOOK USECOUNT)." - (let ((table (and (boundp name) (symbol-value name)))) + (let ((table (and (boundp table-name) (symbol-value table-name)))) (cond ((vectorp table)) ((not table) (setq table (make-abbrev-table)) - (set name table) - (setq abbrev-table-name-list (cons name abbrev-table-name-list))) + (set table-name table) + (setq abbrev-table-name-list (cons table-name abbrev-table-name-list))) (t - (setq table (signal 'wrong-type-argument (list 'vectorp table))) - (set name table))) - (while defs - (apply (function define-abbrev) table (car defs)) - (setq defs (cdr defs))))) + (setq table (wrong-type-argument 'vectorp table)) + (set table-name table))) + (while definitions + (apply (function define-abbrev) table (car definitions)) + (setq definitions (cdr definitions))))) (defun define-abbrev (table name &optional expansion hook count) "Define an abbrev in TABLE named NAME, to expand to EXPANSION or call HOOK. NAME and EXPANSION are strings. Hook is a function or `nil'. To undefine an abbrev, define it with an expansion of `nil'." - (or (not expansion) - (stringp expansion) - (setq expansion (signal 'wrong-type-argument - (list 'stringp expansion)))) - (or (not count) - (integerp count) - (setq count (signal 'wrong-type-argument - (list 'fixnump count)))) - (or (vectorp table) - (setq table (signal 'wrong-type-argument - (list 'vectorp table)))) + (unless (or (null expansion) (stringp expansion)) + (setq expansion (wrong-type-argument 'stringp expansion))) + + (unless (or (null count) (integerp count)) + (setq count (wrong-type-argument 'fixnump count))) + + (unless (vectorp table) + (setq table (wrong-type-argument 'vectorp table))) + (let* ((sym (intern name table)) (oexp (and (boundp sym) (symbol-value sym))) (ohook (and (fboundp sym) (symbol-function sym)))) @@ -207,13 +205,13 @@ is not undone." -(defun insert-abbrev-table-description (name human-readable) +(defun insert-abbrev-table-description (name &optional human-readable) "Insert before point a full description of abbrev table named NAME. NAME is a symbol whose value is an abbrev table. -If optional 2nd arg HUMAN is non-nil, insert a human-readable description. -Otherwise the description is an expression, -a call to `define-abbrev-table', which would -define the abbrev table NAME exactly as it is currently defined." +If optional second argument HUMAN-READABLE is non-nil, insert a +human-readable description. Otherwise the description is an +expression, a call to `define-abbrev-table', which would define the +abbrev table NAME exactly as it is currently defined." (let ((table (symbol-value name)) (stream (current-buffer))) (message "Abbrev-table %s..." name) @@ -268,7 +266,7 @@ define the abbrev table NAME exactly as it is currently defined." (defun abbrev-mode (arg) "Toggle abbrev mode. -With argument ARG, turn abbrev mode on iff ARG is positive. +With argument ARG, enable abbrev mode if ARG is positive, else disable. In abbrev mode, inserting an abbreviation causes it to expand and be replaced by its expansion." (interactive "P") @@ -391,7 +389,7 @@ Optional second argument QUIETLY non-nil means don't print anything." (setq save-abbrevs t abbrevs-changed nil)) (defun quietly-read-abbrev-file (&optional file) - "Read abbrev definitions from file written with write-abbrev-file. + "Read abbrev definitions from file written with `write-abbrev-file'. Optional argument FILE is the name of the file to read; it defaults to the value of `abbrev-file-name'. Does not print anything." @@ -460,6 +458,13 @@ Don't use this function in a Lisp program; use `define-abbrev' instead." (add-abbrev global-abbrev-table "Global" arg)) (defun add-abbrev (table type arg) + "Add an abbreviation to abbrev table TABLE. +TYPE is a string describing in English the kind of abbrev this will be +(typically, \"global\" or \"mode-specific\"); this is used in +prompting the user. ARG is the number of words in the expansion. + +Return the symbol that internally represents the new abbrev, or nil if +the user declines to confirm redefining an existing abbrev." ;; XEmacs change: (let ((exp (abbrev-string-to-be-defined arg)) name) diff --git a/lisp/apropos.el b/lisp/apropos.el index 0b535d8..76be36b 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -377,7 +377,7 @@ Returns list of symbols and documentation found." ;; Finds all documentation related to APROPOS-REGEXP in internal-doc-file-name. (defun apropos-documentation-check-doc-file () - (let (type symbol (sepa 2) sepb beg end doc) + (let (type symbol (sepa 2) sepb start end doc) (insert ?\^_) (backward-char) (insert-file-contents (concat doc-directory internal-doc-file-name)) @@ -390,14 +390,14 @@ Returns list of symbols and documentation found." (narrow-to-region (point) (1- sepb)) (re-search-forward apropos-regexp nil t)) (progn - (setq beg (match-beginning 0) + (setq start (match-beginning 0) end (point)) (goto-char (1+ sepa)) (or (setq type (if (eq ?F (preceding-char)) 1 ; function documentation 2) ; variable documentation symbol (read) - beg (- beg (point) 1) + start (- start (point) 1) end (- end (point) 1) doc (buffer-substring (1+ (point)) (1- sepb)) apropos-item (assq symbol apropos-accumulator)) @@ -405,32 +405,32 @@ Returns list of symbols and documentation found." apropos-accumulator (cons apropos-item apropos-accumulator))) (if apropos-match-face - (put-text-property beg end 'face apropos-match-face doc)) + (put-text-property start end 'face apropos-match-face doc)) (setcar (nthcdr type apropos-item) doc))) (setq sepa (goto-char sepb))))) (defun apropos-documentation-check-elc-file (file) (if (member file apropos-files-scanned) nil - (let (symbol doc beg end this-is-a-variable) + (let (symbol doc start end this-is-a-variable) (setq apropos-files-scanned (cons file apropos-files-scanned)) (erase-buffer) (insert-file-contents file) (while (search-forward "\n#@" nil t) ;; Read the comment length, and advance over it. (setq end (read) - beg (1+ (point)) + start (1+ (point)) end (+ (point) end -1)) (forward-char) (if (save-restriction ;; match ^ and $ relative to doc string - (narrow-to-region beg end) + (narrow-to-region start end) (re-search-forward apropos-regexp nil t)) (progn (goto-char (+ end 2)) - (setq doc (buffer-substring beg end) - end (- (match-end 0) beg) - beg (- (match-beginning 0) beg) + (setq doc (buffer-substring start end) + end (- (match-end 0) start) + start (- (match-beginning 0) start) this-is-a-variable (looking-at "(def\\(var\\|const\\) ") symbol (progn (skip-chars-forward "(a-z") @@ -448,7 +448,7 @@ Returns list of symbols and documentation found." apropos-accumulator (cons apropos-item apropos-accumulator))) (if apropos-match-face - (put-text-property beg end 'face apropos-match-face + (put-text-property start end 'face apropos-match-face doc)) (setcar (nthcdr (if this-is-a-variable 2 1) apropos-item) diff --git a/lisp/auto-autoloads.el b/lisp/auto-autoloads.el index b303ad3..cec581d 100644 --- a/lisp/auto-autoloads.el +++ b/lisp/auto-autoloads.el @@ -131,16 +131,19 @@ be used only with -batch." nil nil) ;;;### (autoloads (build-report) "build-report" "lisp/build-report.el") (autoload 'build-report "build-report" "\ -Initializes a fresh mail composition buffer using `compose-mail' -with the contents of XEmacs Installation file and excerpts from XEmacs -make output and errors and leaves point at the beginning of the mail text. - See also -`compose-mail', `mail-user-agent', -`build-report-destination', -`build-report-keep-regexp', -`build-report-delete-regexp', -`build-report-make-output-file' and -`build-report-installation-file'." t nil) +Composes a fresh mail message with the contents of the built XEmacs +Installation file and excerpts from XEmacs make output. +`compose-mail' is used to create the mail message. Point is left at +the beginning of the mail text. You may add some personal notes if +you like and send the report. +See also + `compose-mail', `mail-user-agent', + `build-report-destination', + `build-report-keep-regexp', + `build-report-delete-regexp', + `build-report-make-output-dir', + `build-report-make-output-files', and + `build-report-installation-file'." t nil) ;;;*** @@ -153,8 +156,8 @@ Files in subdirectories of DIRECTORY are processed also." t nil) (autoload 'byte-recompile-directory "bytecomp" "\ Recompile every `.el' file in DIRECTORY that needs recompilation. This is if a `.elc' file exists but is older than the `.el' file. -Files in subdirectories of DIRECTORY are processed also unless argument -NORECURSION is non-nil. +Files in subdirectories of DIRECTORY are also processed unless +optional argument NORECURSION is non-nil. If the `.elc' file does not exist, normally the `.el' file is *not* compiled. But a prefix argument (optional second arg) means ask user, @@ -163,7 +166,7 @@ don't ask and compile the file anyway. A nonzero prefix argument also means ask about each subdirectory. -If the fourth argument FORCE is non-nil, +If the fourth optional argument FORCE is non-nil, recompile every `.el' file that already has a `.elc' file." t nil) (autoload 'byte-recompile-file "bytecomp" "\ @@ -219,7 +222,7 @@ Run `byte-compile-file' on the files remaining on the command line. Use this from the command line, with `-batch'; it won't work in an interactive Emacs. Each file is processed even if an error occurred previously. -For example, invoke \"xemacs -batch -f batch-byte-compile $emacs/ ~/*.el\"" nil nil) +For example, invoke \"xemacs -batch -f batch-byte-compile $emacs/ ~/*.el\"." nil nil) (autoload 'batch-byte-compile-one-file "bytecomp" "\ Run `byte-compile-file' on a single file remaining on the command line. @@ -595,7 +598,7 @@ If VARIABLE has a `custom-type' property, it must be a widget and the If given a prefix (or a COMMENT argument), also prompt for a comment." t nil) (autoload 'customize-set-variable "cus-edit" "\ -Set the default for VARIABLE to VALUE. VALUE is a Lisp object. +Set the default for VARIABLE to VALUE. VALUE is any Lisp object. If VARIABLE has a `custom-set' property, that is used for setting VARIABLE, otherwise `set-default' is used. @@ -730,7 +733,7 @@ Like `defface', but FACE is evaluated as a normal argument." nil nil) (autoload 'custom-set-face-update-spec "cus-face" "\ Customize the FACE for display types matching DISPLAY, merging - in the new items from PLIST" nil nil) + in the new items from PLIST." nil nil) (autoload 'custom-set-faces "cus-face" "\ Initialize faces according to user preferences. @@ -761,7 +764,7 @@ FACE. Nil otherwise." nil nil) Reset the value of the face to values previously defined. Associate this setting with the 'user' theme. -ARGS is defined as for `custom-theme-reset-faces'" nil nil) +ARGS is defined as for `custom-theme-reset-faces'." nil nil) ;;;*** @@ -1048,7 +1051,7 @@ A list defining the keywords for `font-lock-mode' to highlight. For example, an element of the first form highlights (if not already highlighted): - \"\\\\\" Discrete occurrences of \"foo\" in the value + \"\\\\\\=\" Discrete occurrences of \"foo\" in the value of the variable `font-lock-keyword-face'. (\"fu\\\\(bar\\\\)\" . 1) Substring \"bar\" within all occurrences of @@ -1067,7 +1070,7 @@ For example, an element of the first form highlights (if not already highlighted `fubar-match' finds and matches in the value of `fubar-face'. - (\"\\\\\" (0 anchor-face) (\"\\\\\" nil nil (0 item-face))) + (\"\\\\\\=\" (0 anchor-face) (\"\\\\\\=\" nil nil (0 item-face))) -------------- --------------- ------------ --- --- ------------- | | | | | | MATCHER | ANCHOR-MATCHER | +------+ MATCH-HIGHLIGHT @@ -1138,10 +1141,10 @@ size, you can use \\[font-lock-fontify-buffer]. See the variable `font-lock-keywords' for customization." t nil) (autoload 'turn-on-font-lock "font-lock" "\ -Unconditionally turn on Font Lock mode." nil nil) +Unconditionally turn on Font Lock mode." t nil) (autoload 'turn-off-font-lock "font-lock" "\ -Unconditionally turn off Font Lock mode." nil nil) +Unconditionally turn off Font Lock mode." t nil) (autoload 'font-lock-fontify-buffer "font-lock" "\ Fontify the current buffer the way `font-lock-mode' would. @@ -1168,7 +1171,7 @@ Generates the `Font', `Size', and `Weight' submenus for the Options menu. This is run the first time that a font-menu is needed for each device. If you don't like the lazy invocation of this function, you can add it to `create-device-hook' and that will make the font menus respond more quickly -when they are selected for the first time. If you add fonts to your system, +when they are selected for the first time. If you add fonts to your system, or if you change your font path, you can call this to re-initialize the menus." nil nil) (autoload 'font-menu-family-constructor "font-menu" nil nil nil) @@ -1306,11 +1309,12 @@ recovering from an error in this function; it says do not attempt further (recursive) error recovery. TRYFILE is ??" nil nil) (autoload 'Info-batch-rebuild-dir "info" "\ -(Re)build info `dir' files in the directories remaining on the command line. -Use this from the command line, with `-batch'; -it won't work in an interactive Emacs. -Each file is processed even if an error occurred previously. -For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"" nil nil) +(Re)build `dir' files in the directories remaining on the command line. +Use this from the command line, with `-batch', it won't work in an +interactive XEmacs. + +Each file is processed even if an error occurred previously. For example, +invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"." nil nil) (autoload 'Info-goto-node "info" "\ Go to info node named NAME. Give just NODENAME or (FILENAME)NODENAME. @@ -1380,7 +1384,7 @@ or if you change your font path, you can call this to re-initialize the menus." ;;;### (autoloads (mwheel-install) "mwheel" "lisp/mwheel.el") (autoload 'mwheel-install "mwheel" "\ -Enable mouse wheel support." nil nil) +Enable mouse wheel support." t nil) ;;;*** @@ -1446,7 +1450,7 @@ recent to least recent -- in other words, the version names don't have to be lexically ordered. It is debatable if it makes sense to have more than one version of a package available.") -(defcustom package-get-download-sites '(("xemacs.org" "ftp.xemacs.org" "pub/xemacs/packages") ("crc.ca (Canada)" "ftp.crc.ca" "pub/packages/editors/xemacs/packages") ("ualberta.ca (Canada)" "sunsite.ualberta.ca" "pub/Mirror/xemacs/packages") ("uiuc.edu (United States)" "uiarchive.uiuc.edu" "pub/packages/xemacs/packages") ("unc.edu (United States)" "metalab.unc.edu" "pub/packages/editors/xemacs/packages") ("utk.edu (United States)" "ftp.sunsite.utk.edu" "pub/xemacs/packages") ("unicamp.br (Brazil)" "ftp.unicamp.br" "pub/xemacs/packages") ("tuwien.ac.at (Austria)" "gd.tuwien.ac.at" "editors/xemacs/packages") ("auc.dk (Denmark)" "sunsite.auc.dk" "pub/emacs/xemacs/packages") ("doc.ic.ac.uk (England)" "sunsite.doc.ic.ac.uk" "packages/xemacs/packages") ("funet.fi (Finland)" "ftp.funet.fi" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/packages") ("cenatls.cena.dgac.fr (France)" "ftp.cenatls.cena.dgac.fr" "Emacs/xemacs/packages") ("pasteur.fr (France)" "ftp.pasteur.fr" "pub/computing/xemacs/packages") ("tu-darmstadt.de (Germany)" "ftp.tu-darmstadt.de" "pub/editors/xemacs/packages") ("kfki.hu (Hungary)" "ftp.kfki.hu" "pub/packages/xemacs/packages") ("eunet.ie (Ireland)" "ftp.eunet.ie" "mirrors/ftp.xemacs.org/pub/xemacs/packages") ("uniroma2.it (Italy)" "ftp.uniroma2.it" "unix/misc/dist/XEMACS/packages") ("uio.no (Norway)" "sunsite.uio.no" "pub/xemacs/packages") ("icm.edu.pl (Poland)" "ftp.icm.edu.pl" "pub/unix/editors/xemacs/packages") ("srcc.msu.su (Russia)" "ftp.srcc.msu.su" "mirror/ftp.xemacs.org/packages") ("sunet.se (Sweden)" "ftp.sunet.se" "pub/gnu/xemacs/packages") ("cnlab-switch.ch (Switzerland)" "sunsite.cnlab-switch.ch" "mirror/xemacs/packages") ("aist.go.jp (Japan)" "ring.aist.go.jp" "pub/text/xemacs/packages") ("asahi-net.or.jp (Japan)" "ring.asahi-net.or.jp" "pub/text/xemacs/packages") ("dti.ad.jp (Japan)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages") ("jaist.ac.jp (Japan)" "ftp.jaist.ac.jp" "pub/GNU/xemacs/packages") ("nucba.ac.jp (Japan)" "mirror.nucba.ac.jp" "mirror/xemacs/packages") ("sut.ac.jp (Japan)" "sunsite.sut.ac.jp" "pub/archives/packages/xemacs/packages") ("tsukuba.ac.jp (Japan)" "ftp.netlab.is.tsukuba.ac.jp" "pub/GNU/xemacs/packages") ("kreonet.re.kr (Korea)" "ftp.kreonet.re.kr" "pub/tools/emacs/xemacs/packages") ("nctu.edu.tw (Taiwan)" "coda.nctu.edu.tw" "Editors/xemacs/packages") ("sun.ac.za (South Africa)" "ftp.sun.ac.za" "xemacs/packages") ("isu.net.sa (Saudi Arabia)" "ftp.isu.net.sa" "pub/mirrors/ftp.xemacs.org/packages") ("aarnet.edu.au (Australia)" "mirror.aarnet.edu.au" "pub/xemacs/packages")) "*List of remote sites available for downloading packages.\nList format is '(site-description site-name directory-on-site).\nSITE-DESCRIPTION is a textual description of the site. SITE-NAME\nis the internet address of the download site. DIRECTORY-ON-SITE\nis the directory on the site in which packages may be found.\nThis variable is used to initialize `package-get-remote', the\nvariable actually used to specify package download sites." :tag "Package download sites" :type '(repeat (list (string :tag "Name") host-name directory)) :group 'package-get) +(defcustom package-get-download-sites '(("Pre-Releases" "ftp.xemacs.org" "pub/xemacs/beta/experimental/packages") ("xemacs.org" "ftp.xemacs.org" "pub/xemacs/packages") ("crc.ca (Canada)" "ftp.crc.ca" "pub/packages/editors/xemacs/packages") ("ualberta.ca (Canada)" "sunsite.ualberta.ca" "pub/Mirror/xemacs/packages") ("uiuc.edu (United States)" "uiarchive.uiuc.edu" "pub/packages/xemacs/packages") ("unc.edu (United States)" "metalab.unc.edu" "pub/packages/editors/xemacs/packages") ("utk.edu (United States)" "ftp.sunsite.utk.edu" "pub/xemacs/packages") ("unicamp.br (Brazil)" "ftp.unicamp.br" "pub/xemacs/packages") ("tuwien.ac.at (Austria)" "gd.tuwien.ac.at" "editors/xemacs/packages") ("auc.dk (Denmark)" "sunsite.auc.dk" "pub/emacs/xemacs/packages") ("doc.ic.ac.uk (England)" "sunsite.doc.ic.ac.uk" "packages/xemacs/packages") ("funet.fi (Finland)" "ftp.funet.fi" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/packages") ("cenatls.cena.dgac.fr (France)" "ftp.cenatls.cena.dgac.fr" "Emacs/xemacs/packages") ("pasteur.fr (France)" "ftp.pasteur.fr" "pub/computing/xemacs/packages") ("tu-darmstadt.de (Germany)" "ftp.tu-darmstadt.de" "pub/editors/xemacs/packages") ("kfki.hu (Hungary)" "ftp.kfki.hu" "pub/packages/xemacs/packages") ("eunet.ie (Ireland)" "ftp.eunet.ie" "mirrors/ftp.xemacs.org/pub/xemacs/packages") ("uniroma2.it (Italy)" "ftp.uniroma2.it" "unix/misc/dist/XEMACS/packages") ("uio.no (Norway)" "sunsite.uio.no" "pub/xemacs/packages") ("icm.edu.pl (Poland)" "ftp.icm.edu.pl" "pub/unix/editors/xemacs/packages") ("srcc.msu.su (Russia)" "ftp.srcc.msu.su" "mirror/ftp.xemacs.org/packages") ("sunet.se (Sweden)" "ftp.sunet.se" "pub/gnu/xemacs/packages") ("cnlab-switch.ch (Switzerland)" "sunsite.cnlab-switch.ch" "mirror/xemacs/packages") ("aist.go.jp (Japan)" "ring.aist.go.jp" "pub/text/xemacs/packages") ("asahi-net.or.jp (Japan)" "ring.asahi-net.or.jp" "pub/text/xemacs/packages") ("dti.ad.jp (Japan)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages") ("jaist.ac.jp (Japan)" "ftp.jaist.ac.jp" "pub/GNU/xemacs/packages") ("nucba.ac.jp (Japan)" "mirror.nucba.ac.jp" "mirror/xemacs/packages") ("sut.ac.jp (Japan)" "sunsite.sut.ac.jp" "pub/archives/packages/xemacs/packages") ("tsukuba.ac.jp (Japan)" "ftp.netlab.is.tsukuba.ac.jp" "pub/GNU/xemacs/packages") ("kreonet.re.kr (Korea)" "ftp.kreonet.re.kr" "pub/tools/emacs/xemacs/packages") ("nctu.edu.tw (Taiwan)" "coda.nctu.edu.tw" "Editors/xemacs/packages") ("sun.ac.za (South Africa)" "ftp.sun.ac.za" "xemacs/packages") ("isu.net.sa (Saudi Arabia)" "ftp.isu.net.sa" "pub/mirrors/ftp.xemacs.org/packages") ("aarnet.edu.au (Australia)" "mirror.aarnet.edu.au" "pub/xemacs/packages")) "*List of remote sites available for downloading packages.\nList format is '(site-description site-name directory-on-site).\nSITE-DESCRIPTION is a textual description of the site. SITE-NAME\nis the internet address of the download site. DIRECTORY-ON-SITE\nis the directory on the site in which packages may be found.\nThis variable is used to initialize `package-get-remote', the\nvariable actually used to specify package download sites." :tag "Package download sites" :type '(repeat (list (string :tag "Name") host-name directory)) :group 'package-get) (autoload 'package-get-download-menu "package-get" "\ Build the `Add Download Site' menu." nil nil) @@ -1763,21 +1767,21 @@ server and XEmacs has the necessary sound support compiled in." t nil) ;;;### (autoloads (ask-user-about-supersession-threat ask-user-about-lock) "userlock" "lisp/userlock.el") (autoload 'ask-user-about-lock "userlock" "\ -Ask user what to do when he wants to edit FILE but it is locked by USER. +Ask user wanting to edit FILENAME, locked by OTHER-USER, what to do. This function has a choice of three things to do: - do (signal 'file-locked (list FILE USER)) + do (signal 'file-locked (list FILENAME OTHER-USER)) to refrain from editing the file return t (grab the lock on the file) return nil (edit the file even though it is locked). -You can rewrite it to use any criterion you like to choose which one to do." nil nil) +You can rewrite it to use any criteria you like to choose which one to do." nil nil) (autoload 'ask-user-about-supersession-threat "userlock" "\ -Ask a user who is about to modify an obsolete buffer what to do. +Ask user who is about to modify an obsolete buffer what to do. This function has two choices: it can return, in which case the modification -of the buffer will proceed, or it can (signal 'file-supersession (file)), +of the buffer will proceed, or it can (signal 'file-supersession (FILENAME)), in which case the proposed buffer modification will not be made. -You can rewrite this to use any criterion you like to choose which one to do. +You can rewrite this to use any criteria you like to choose which one to do. The buffer in question is current when this function is called." nil nil) ;;;*** @@ -1789,13 +1793,13 @@ The buffer in question is current when this function is called." nil nil) (defvar view-mode-map (let ((map (copy-keymap view-minor-mode-map))) (set-keymap-name map 'view-mode-map) map)) (autoload 'view-file "view-less" "\ -Find FILE, enter view mode. With prefix arg OTHER-P, use other window." t nil) +Find FILENAME, enter view mode. With prefix arg OTHER-WINDOW-P, use other window." t nil) (autoload 'view-buffer "view-less" "\ -Switch to BUF, enter view mode. With prefix arg use other window." t nil) +Switch to BUFFER, enter view mode. With prefix arg use other window." t nil) (autoload 'view-file-other-window "view-less" "\ -Find FILE in other window, and enter view mode." t nil) +Find FILENAME in other window, and enter view mode." t nil) (autoload 'view-buffer-other-window "view-less" "\ Switch to BUFFER in another window, and enter view mode." t nil) diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index 49d09d0..5e62c34 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el @@ -46,7 +46,7 @@ ;; Based on FSF code dating back to 1985. ;;; Code: - + ;;;Trying to preserve the old window configuration works well in ;;;simple scenarios, when you enter the buffer menu, use it, and exit it. ;;;But it does strange things when you switch back to the buffer list buffer @@ -321,7 +321,7 @@ This command deletes and replaces all the previously existing windows in the selected frame." (interactive) (let ((buff (Buffer-menu-buffer t)) - (menu (current-buffer)) + (menu (current-buffer)) (others ()) tem) (goto-char (point-min)) @@ -484,8 +484,8 @@ The current window remains selected." ;; XEmacs (defvar list-buffers-header-line - (purecopy (concat " MR Buffer Size Mode File\n" - " -- ------ ---- ---- ----\n"))) + (concat " MR Buffer Size Mode File\n" + " -- ------ ---- ---- ----\n")) ;; XEmacs (defvar list-buffers-identification 'default-list-buffers-identification @@ -567,7 +567,7 @@ to generate such a string. This variable is always buffer-local.") (progn (setq current (point)) ?\.) ?\ )) (insert (if (buffer-modified-p buffer) - ?\* + ?\* ?\ )) (insert (if ro ?\% @@ -604,7 +604,7 @@ to generate such a string. This variable is always buffer-local.") "Display a list of names of existing buffers. The list is displayed in a buffer named `*Buffer List*'. Note that buffers with names starting with spaces are omitted. -Non-null optional arg FILES-ONLY means mention only file buffers. +Non-nil optional arg FILES-ONLY means mention only file buffers. The M column contains a * for buffers that are modified. The R column contains a % for buffers that are read-only." @@ -616,7 +616,7 @@ The R column contains a % for buffers that are read-only." "Create and return a buffer with a list of names of existing buffers. The buffer is named `*Buffer List*'. Note that buffers with names starting with spaces are omitted. -Non-null optional arg FILES-ONLY means mention only file buffers. +Non-nil optional arg FILES-ONLY means mention only file buffers. The M column contains a * for buffers that are modified. The R column contains a % for buffers that are read-only." diff --git a/lisp/byte-optimize.el b/lisp/byte-optimize.el index b18664b..6f9f8f4 100644 --- a/lisp/byte-optimize.el +++ b/lisp/byte-optimize.el @@ -23,7 +23,7 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. -;;; Synched up with: FSF 19.30. +;;; Synched up with: FSF 20.7. ;;; Commentary: @@ -177,13 +177,13 @@ ;;(disassemble #'(lambda (x) (eq (if (point) 'a 'b) 'c))) ;;(disassemble #'(lambda (x) (if (point) (eq 'a 'c) (eq 'b 'c)))) -;; (car (cons A B)) -> (progn B A) +;; (car (cons A B)) -> (prog1 A B) ;;(disassemble #'(lambda (x) (car (cons (foo) 42)))) ;; (cdr (cons A B)) -> (progn A B) ;;(disassemble #'(lambda (x) (cdr (cons 42 (foo))))) -;; (car (list A B ...)) -> (progn B ... A) +;; (car (list A B ...)) -> (prog1 A ... B) ;;(disassemble #'(lambda (x) (car (list (foo) 42 (bar))))) ;; (cdr (list A B ...)) -> (progn A (list B ...)) @@ -861,6 +861,44 @@ (if (= 1 (length (cdr form))) "" "s")) form)) +(defun byte-optimize-car (form) + (let ((arg (cadr form))) + (cond + ((and (byte-compile-trueconstp arg) + (not (and (consp arg) + (eq (car arg) 'quote) + (listp (cadr arg))))) + (byte-compile-warn + "taking car of a constant: %s" arg) + form) + ((and (eq (car-safe arg) 'cons) + (eq (length arg) 3)) + `(prog1 ,(nth 1 arg) ,(nth 2 arg))) + ((eq (car-safe arg) 'list) + `(prog1 ,@(cdr arg))) + (t + (byte-optimize-predicate form))))) + +(defun byte-optimize-cdr (form) + (let ((arg (cadr form))) + (cond + ((and (byte-compile-trueconstp arg) + (not (and (consp arg) + (eq (car arg) 'quote) + (listp (cadr arg))))) + (byte-compile-warn + "taking cdr of a constant: %s" arg) + form) + ((and (eq (car-safe arg) 'cons) + (eq (length arg) 3)) + `(progn ,(nth 1 arg) ,(nth 2 arg))) + ((eq (car-safe arg) 'list) + (if (> (length arg) 2) + `(progn ,(cadr arg) (list ,@(cddr arg))) + (cadr arg))) + (t + (byte-optimize-predicate form))))) + (put 'identity 'byte-optimizer 'byte-optimize-identity) (put '+ 'byte-optimizer 'byte-optimize-plus) @@ -899,8 +937,8 @@ (put 'logxor 'byte-optimizer 'byte-optimize-logmumble) (put 'lognot 'byte-optimizer 'byte-optimize-predicate) -(put 'car 'byte-optimizer 'byte-optimize-predicate) -(put 'cdr 'byte-optimizer 'byte-optimize-predicate) +(put 'car 'byte-optimizer 'byte-optimize-car) +(put 'cdr 'byte-optimizer 'byte-optimize-cdr) (put 'car-safe 'byte-optimizer 'byte-optimize-predicate) (put 'cdr-safe 'byte-optimizer 'byte-optimize-predicate) @@ -1111,6 +1149,18 @@ (while (>= (setq count (1- count)) 0) (setq form (list 'cdr form))) form))) + +(put 'concat 'byte-optimizer 'byte-optimize-concat) +(defun byte-optimize-concat (form) + (let ((args (cdr form)) + (constant t)) + (while (and args constant) + (or (byte-compile-constp (car args)) + (setq constant nil)) + (setq args (cdr args))) + (if constant + (eval form) + form))) ;;; enumerating those functions which need not be called if the returned ;;; value is not used. That is, something like @@ -1181,8 +1231,7 @@ hash-table-p identity ignore integerp integer-or-marker-p interactive-p invocation-directory invocation-name - ;; keymapp may autoload in XEmacs, so not on this list! - list listp + keymapp list listp make-marker mark mark-marker markerp memory-limit minibuffer-window ;; mouse-movement-p not in XEmacs natnump nlistp not null number-or-marker-p numberp @@ -1372,11 +1421,14 @@ (defconst byte-after-unbind-ops '(byte-constant byte-dup byte-symbolp byte-consp byte-stringp byte-listp byte-numberp byte-integerp - byte-eq byte-equal byte-not + byte-eq byte-not byte-cons byte-list1 byte-list2 ; byte-list3 byte-list4 byte-interactive-p) ;; How about other side-effect-free-ops? Is it safe to move an ;; error invocation (such as from nth) out of an unwind-protect? + ;; No, it is not, because the unwind-protect forms can alter + ;; the inside of the object to which nth would apply. + ;; For the same reason, byte-equal was deleted from this list. "Byte-codes that can be moved past an unbind.") (defconst byte-compile-side-effect-and-error-free-ops diff --git a/lisp/bytecomp.el b/lisp/bytecomp.el index 2fc251a..cc06e51 100644 --- a/lisp/bytecomp.el +++ b/lisp/bytecomp.el @@ -10,7 +10,7 @@ ;; Richard Stallman ;; Keywords: internal lisp -(defconst byte-compile-version (purecopy "2.27 XEmacs; 2000-09-12.")) +(defconst byte-compile-version "2.27 XEmacs; 2000-09-12.") ;; This file is part of XEmacs. @@ -121,7 +121,7 @@ ;;; generate .elc files which can be loaded into ;;; generic emacs 19. ;;; emacs-lisp-file-regexp Regexp for the extension of source-files; -;;; see also the function byte-compile-dest-file. +;;; see also the function `byte-compile-dest-file'. ;;; byte-compile-overwrite-file If nil, delete old .elc files before saving. ;;; ;;; Most of the above parameters can also be set on a file-by-file basis; see @@ -145,7 +145,7 @@ ;;; This is, in fact, exactly what `defsubst' does. To make a function no ;;; longer be inline, you must use `proclaim-notinline'. Beware that if ;;; you define a function with `defsubst' and later redefine it with -;;; `defun', it will still be open-coded until you use proclaim-notinline. +;;; `defun', it will still be open-coded until you use `proclaim-notinline'. ;;; ;;; o You can also open-code one particular call to a function without ;;; open-coding all calls. Use the 'inline' form to do this, like so: @@ -164,20 +164,20 @@ ;;; ;;; o Forms like ((lambda ...) ...) are open-coded. ;;; -;;; o The form `eval-when-compile' is like progn, except that the body +;;; o The form `eval-when-compile' is like `progn', except that the body ;;; is evaluated at compile-time. When it appears at top-level, this ;;; is analogous to the Common Lisp idiom (eval-when (compile) ...). ;;; When it does not appear at top-level, it is similar to the ;;; Common Lisp #. reader macro (but not in interpreted code). ;;; -;;; o The form `eval-and-compile' is similar to eval-when-compile, but -;;; the whole form is evalled both at compile-time and at run-time. +;;; o The form `eval-and-compile' is similar to `eval-when-compile', +;;; but the whole form is evalled both at compile-time and at run-time. ;;; ;;; o The command M-x byte-compile-and-load-file does what you'd think. ;;; -;;; o The command compile-defun is analogous to eval-defun. +;;; o The command `compile-defun' is analogous to `eval-defun'. ;;; -;;; o If you run byte-compile-file on a filename which is visited in a +;;; o If you run `byte-compile-file' on a filename which is visited in a ;;; buffer, and that buffer is modified, you are asked whether you want ;;; to save the buffer before compiling. ;;; @@ -229,7 +229,7 @@ is compiled with optimization, this causes a speedup.") (defmacro byte-compile-version-cond (cond) cond))) ) -(defvar emacs-lisp-file-regexp (purecopy "\\.el$") +(defvar emacs-lisp-file-regexp "\\.el$" "*Regexp which matches Emacs Lisp source files. You may want to redefine `byte-compile-dest-file' if you change this.") @@ -444,15 +444,13 @@ on the specbind stack. The cdr of each cell is an integer bitmask.") (defvar byte-compiler-error-flag) (defconst byte-compile-initial-macro-environment - (purecopy - '((byte-compiler-options . (lambda (&rest forms) - (apply 'byte-compiler-options-handler forms))) - (eval-when-compile . (lambda (&rest body) - (list 'quote (eval (byte-compile-top-level - (cons 'progn body)))))) - (eval-and-compile . (lambda (&rest body) - (eval (cons 'progn body)) - (cons 'progn body))))) + '((byte-compiler-options . (lambda (&rest forms) + (apply 'byte-compiler-options-handler forms))) + (eval-when-compile . (lambda (&rest body) + (list 'quote (eval (cons 'progn body))))) + (eval-and-compile . (lambda (&rest body) + (eval (cons 'progn body)) + (cons 'progn body)))) "The default macro-environment passed to macroexpand by the compiler. Placing a macro here will cause a macro to have different semantics when expanded by the compiler as when expanded by the interpreter.") @@ -716,18 +714,18 @@ otherwise pop it") (defconst byte-constant-limit 64 "Exclusive maximum index usable in the `byte-constant' opcode.") -(defconst byte-goto-ops (purecopy - '(byte-goto byte-goto-if-nil byte-goto-if-not-nil - byte-goto-if-nil-else-pop - byte-goto-if-not-nil-else-pop)) +(defconst byte-goto-ops + '(byte-goto byte-goto-if-nil byte-goto-if-not-nil + byte-goto-if-nil-else-pop + byte-goto-if-not-nil-else-pop) "List of byte-codes whose offset is a pc.") (defconst byte-goto-always-pop-ops - (purecopy '(byte-goto-if-nil byte-goto-if-not-nil))) + '(byte-goto-if-nil byte-goto-if-not-nil)) (defconst byte-rel-goto-ops - (purecopy '(byte-rel-goto byte-rel-goto-if-nil byte-rel-goto-if-not-nil - byte-rel-goto-if-nil-else-pop byte-rel-goto-if-not-nil-else-pop)) + '(byte-rel-goto byte-rel-goto-if-nil byte-rel-goto-if-not-nil + byte-rel-goto-if-nil-else-pop byte-rel-goto-if-not-nil-else-pop) "byte-codes for relative jumps.") (byte-extrude-byte-code-vectors) @@ -997,7 +995,7 @@ otherwise pop it") '(emacs19) '(emacs20))))) ;; now we can copy it. -(setq byte-compiler-legal-options (purecopy byte-compiler-legal-options)) +(setq byte-compiler-legal-options byte-compiler-legal-options) (defun byte-compiler-options-handler (&rest args) (let (key val desc choices) @@ -1229,7 +1227,10 @@ otherwise pop it") (setq var nil)) (setq rest (cdr rest))) ;; if var is nil at this point, it's a defvar in this file. - (not var)))) + (not var)) + ;; Perhaps (eval-when-compile (defvar foo)) + (and (boundp 'current-load-list) + (memq var current-load-list)))) ;;; If we have compiled bindings of variables which have no referents, warn. @@ -1371,8 +1372,8 @@ Files in subdirectories of DIRECTORY are processed also." (defun byte-recompile-directory (directory &optional arg norecursion force) "Recompile every `.el' file in DIRECTORY that needs recompilation. This is if a `.elc' file exists but is older than the `.el' file. -Files in subdirectories of DIRECTORY are processed also unless argument -NORECURSION is non-nil. +Files in subdirectories of DIRECTORY are also processed unless +optional argument NORECURSION is non-nil. If the `.elc' file does not exist, normally the `.el' file is *not* compiled. But a prefix argument (optional second arg) means ask user, @@ -1381,7 +1382,7 @@ don't ask and compile the file anyway. A nonzero prefix argument also means ask about each subdirectory. -If the fourth argument FORCE is non-nil, +If the fourth optional argument FORCE is non-nil, recompile every `.el' file that already has a `.elc' file." (interactive "DByte recompile directory: \nP") (if arg @@ -2679,6 +2680,8 @@ If FORM is a lambda or a macro, byte-compile it as a function." (if (eq base-op 'byte-varset) byte-compile-assigned-bit byte-compile-referenced-bit))))) + (and (boundp 'current-load-list) + (memq var current-load-list)) (if (eq base-op 'byte-varset) (or (memq var byte-compile-free-assignments) (progn @@ -3769,8 +3772,9 @@ If FORM is a lambda or a macro, byte-compile it as a function." (byte-compile-body-do-effect (list ;; Put the defined variable in this library's load-history entry - ;; just as a real defvar would, but only in top-level forms. - (when (null byte-compile-current-form) + ;; just as a real defvar would, but only in top-level forms with values. + (when (and (> (length form) 2) + (null byte-compile-current-form)) `(push ',var current-load-list)) (when (> (length form) 3) (when (and string (not (stringp string))) @@ -4048,7 +4052,7 @@ invoked interactively." Use this from the command line, with `-batch'; it won't work in an interactive Emacs. Each file is processed even if an error occurred previously. -For example, invoke \"xemacs -batch -f batch-byte-compile $emacs/ ~/*.el\"" +For example, invoke \"xemacs -batch -f batch-byte-compile $emacs/ ~/*.el\"." ;; command-line-args-left is what is left of the command line (from ;; startup.el) (defvar command-line-args-left) ;Avoid 'free variable' warning diff --git a/lisp/cl-macs.el b/lisp/cl-macs.el index 3299793..6eddb94 100644 --- a/lisp/cl-macs.el +++ b/lisp/cl-macs.el @@ -2434,10 +2434,10 @@ The type name can then be used in `typecase', `check-type', etc." (t (error "Bad type spec: %s" type))))) ;;;###autoload -(defun typep (val type) ; See compiler macro below. +(defun typep (object type) ; See compiler macro below. "Check that OBJECT is of type TYPE. TYPE is a Common Lisp-style type specifier." - (eval (cl-make-type-test 'val type))) + (eval (cl-make-type-test 'object type))) ;;;###autoload (defmacro check-type (form type &optional string) diff --git a/lisp/code-files.el b/lisp/code-files.el index f3d138a..1738d70 100644 --- a/lisp/code-files.el +++ b/lisp/code-files.el @@ -17,7 +17,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -205,16 +205,16 @@ object (the entry specified a coding system)." ;... (defun find-coding-system-magic-cookie () - "Look for the coding-system magic cookie in the current buffer.\n" -"The coding-system magic cookie is the exact string\n" -"\";;;###coding system: \" followed by a valid coding system symbol,\n" -"somewhere within the first 3000 characters of the file. If found,\n" -"the coding system symbol is returned; otherwise nil is returned.\n" -"Note that it is extremely unlikely that such a string would occur\n" -"coincidentally as the result of encoding some characters in a non-ASCII\n" -"charset, and that the spaces make it even less likely since the space\n" -"character is not a valid octet in any ISO 2022 encoding of most non-ASCII\n" -"charsets." + "Look for the coding-system magic cookie in the current buffer. +The coding-system magic cookie is the exact string +\";;;###coding system: \" followed by a valid coding system symbol, +somewhere within the first 3000 characters of the file. If found, +the coding system symbol is returned; otherwise nil is returned. +Note that it is extremely unlikely that such a string would occur +coincidentally as the result of encoding some characters in a non-ASCII +charset, and that the spaces make it even less likely since the space +character is not a valid octet in any ISO 2022 encoding of most non-ASCII +charsets." (save-excursion (goto-char (point-min)) (or (and (looking-at @@ -353,7 +353,7 @@ CODING-SYSTEM (the actual coding system used to decode the file), and a cons of absolute pathname and length of data inserted (the same thing as will be returned from `insert-file-contents').") -(defun insert-file-contents (filename &optional visit beg end replace) +(defun insert-file-contents (filename &optional visit start end replace) "Insert contents of file FILENAME after point. Returns list of absolute file name and length of data inserted. If second argument VISIT is non-nil, the buffer's visited filename @@ -361,9 +361,9 @@ and last save file modtime are set, and it is marked unmodified. If visiting and the file does not exist, visiting is completed before the error is signaled. -The optional third and fourth arguments BEG and END +The optional third and fourth arguments START and END specify what portion of the file to insert. -If VISIT is non-nil, BEG and END must be nil. +If VISIT is non-nil, START and END must be nil. If optional fifth argument REPLACE is non-nil, it means replace the current buffer contents (in the accessible portion) with the file contents. This is better than simply deleting and inserting @@ -416,7 +416,7 @@ and `insert-file-contents-post-hook'." coding-system) (setq coding-system 'undecided))) (setq return-val - (insert-file-contents-internal filename visit beg end + (insert-file-contents-internal filename visit start end replace coding-system ;; store here! 'used-codesys)) diff --git a/lisp/code-process.el b/lisp/code-process.el index 1b248dc..09279c8 100644 --- a/lisp/code-process.el +++ b/lisp/code-process.el @@ -195,7 +195,7 @@ See also the function `find-operation-coding-system'.") (defun open-network-stream (name buffer host service &optional protocol) "Open a TCP connection for a service to a host. -Return a subprocess-object to represent the connection. +Return a process object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. Args are NAME BUFFER HOST SERVICE. NAME is name for process. It is modified if necessary to make it unique. diff --git a/lisp/coding.el b/lisp/coding.el index 30e4036..3cc7fbe 100644 --- a/lisp/coding.el +++ b/lisp/coding.el @@ -38,9 +38,9 @@ ;; override the default value defined in loaddefs.el. (setq-default modeline-format - (cons (purecopy "") - (cons 'modeline-multibyte-status - (cdr modeline-format)))) + (cons "" + (cons 'modeline-multibyte-status + (cdr modeline-format)))) (defun modify-coding-system-alist (target-type regexp coding-system) "Modify one of look up tables for finding a coding system on I/O operation. diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 1d528c7..b6317b3 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -682,8 +682,8 @@ If given a prefix (or a COMMENT argument), also prompt for a comment." (put var 'variable-comment comment)))) ;;;###autoload -(defun customize-set-variable (var val &optional comment) - "Set the default for VARIABLE to VALUE. VALUE is a Lisp object. +(defun customize-set-variable (variable value &optional comment) + "Set the default for VARIABLE to VALUE. VALUE is any Lisp object. If VARIABLE has a `custom-set' property, that is used for setting VARIABLE, otherwise `set-default' is used. @@ -701,18 +701,18 @@ If given a prefix (or a COMMENT argument), also prompt for a comment." (interactive (custom-prompt-variable "Set variable: " "Set customized value for %s to: " current-prefix-arg)) - (funcall (or (get var 'custom-set) 'set-default) var val) - (put var 'customized-value (list (custom-quote val))) + (funcall (or (get variable 'custom-set) 'set-default) variable value) + (put variable 'customized-value (list (custom-quote value))) (cond ((string= comment "") - (put var 'variable-comment nil) - (put var 'customized-variable-comment nil)) + (put variable 'variable-comment nil) + (put variable 'customized-variable-comment nil)) (comment - (put var 'variable-comment comment) - (put var 'customized-variable-comment comment)))) + (put variable 'variable-comment comment) + (put variable 'customized-variable-comment comment)))) ;;;###autoload -(defun customize-save-variable (var val &optional comment) +(defun customize-save-variable (variable value &optional comment) "Set the default for VARIABLE to VALUE, and save it for future sessions. If VARIABLE has a `custom-set' property, that is used for setting VARIABLE, otherwise `set-default' is used. @@ -730,15 +730,15 @@ If given a prefix (or a COMMENT argument), also prompt for a comment." (interactive (custom-prompt-variable "Set and ave variable: " "Set and save value for %s as: " current-prefix-arg)) - (funcall (or (get var 'custom-set) 'set-default) var val) - (put var 'saved-value (list (custom-quote val))) - (custom-push-theme 'theme-value var 'user 'set (list (custom-quote val))) + (funcall (or (get variable 'custom-set) 'set-default) variable value) + (put variable 'saved-value (list (custom-quote value))) + (custom-push-theme 'theme-value variable 'user 'set (list (custom-quote value))) (cond ((string= comment "") - (put var 'variable-comment nil) - (put var 'saved-variable-comment nil)) + (put variable 'variable-comment nil) + (put variable 'saved-variable-comment nil)) (comment - (put var 'variable-comment comment) - (put var 'saved-variable-comment comment))) + (put variable 'variable-comment comment) + (put variable 'saved-variable-comment comment))) (custom-save-all)) ;;;###autoload @@ -1988,7 +1988,7 @@ Otherwise, look up symbol in `custom-guess-type-alist'." ;; Insert documentation. ;; #### NOTE: this is ugly!!!! I need to do update the :buttons property ;; before the call to `widget-default-format-handler'. Otherwise, I - ;; loose my current `buttons'. This function shouldn't be called like + ;; lose my current `buttons'. This function shouldn't be called like ;; this anyway. The doc string widget should be added like the others. ;; --dv (widget-put widget :buttons buttons) @@ -3270,7 +3270,7 @@ Leave point at the location of the call, or after the last expression." (unless (bolp) (princ "\n")) (princ "(custom-set-variables") - (mapatoms (lambda (symbol) + (mapatoms (lambda (symbol) (let ((spec (car-safe (get symbol 'theme-value))) (requests (get symbol 'custom-requests)) (now (not (or (get symbol 'standard-value) @@ -3345,7 +3345,7 @@ Leave point at the location of the call, or after the last expression." (defun custom-save-resets (property setter special) (let (started-writing ignored-special) (setq ignored-special ignored-special) ;; suppress byte-compiler warning - ;; (custom-save-delete setter) Done by caller + ;; (custom-save-delete setter) Done by caller (let ((standard-output (current-buffer)) (mapper `(lambda (object) (let ((spec (car-safe (get object (quote ,property))))) @@ -3370,7 +3370,7 @@ Leave point at the location of the call, or after the last expression." (when started-writing (princ ")\n")))) ) - + (defun custom-save-loaded-themes () (let ((themes (reverse (get 'user 'theme-loads-themes))) @@ -3381,7 +3381,7 @@ Leave point at the location of the call, or after the last expression." (mapc (lambda (theme) (princ "\n '") (prin1 theme)) themes) - (princ " )\n")))) + (princ " )\n")))) ;;;###autoload (defun customize-save-customized () diff --git a/lisp/cus-face.el b/lisp/cus-face.el index 656f710..403f806 100644 --- a/lisp/cus-face.el +++ b/lisp/cus-face.el @@ -55,6 +55,7 @@ ;;; Font Attributes. +;; Consider adding the stuff in the XML font model here. (defconst custom-face-attributes '((:foreground (color :tag "Foreground" :value "" @@ -98,18 +99,20 @@ Control whether the text should be strikethru.") :help-echo "\ Control whether the text should be inverted. Works only on TTY-s") set-face-reverse-p face-reverse-p)) - "Alist of face attributes. + "Alist of face attributes. -The elements are of the form (KEY TYPE SET GET) where KEY is a symbol -identifying the attribute, TYPE is a widget type for editing the -attibute, SET is a function for setting the attribute value, and GET is a function for getiing the attribute value. +The elements are lists of the form (KEY TYPE SET GET) where: + KEY is a symbol identifying the attribute. + TYPE is a widget type for editing the attribute. + SET is a function for setting the attribute value. + GET is a function for getting the attribute value. -The SET function should take three arguments, the face to modify, the +The SET function should take three arguments: the face to modify, the value of the attribute, and optionally the frame where the face should be changed. The GET function should take two arguments, the face to examine, and -optonally the frame where the face should be examined.") +optionally the frame where the face should be examined.") (defun face-custom-attributes-set (face frame tags &rest atts) "For FACE on FRAME set the attributes [KEYWORD VALUE].... @@ -192,13 +195,13 @@ If FRAME is nil, use the default face." (defun custom-face-background-pixmap (face &rest args) "Return the name of the background pixmap file used for FACE." - (let ((image (apply 'specifier-instance + (let ((image (apply 'specifier-instance (face-background-pixmap face) args))) - (and image + (and image (image-instance-file-name image)))) (defun custom-set-face-font-size (face size &optional locale tags) - "Set the font of FACE to SIZE" + "Set the font of FACE to SIZE." (let* ((font (apply 'face-font-name face locale)) ;; Gag (fontobj (font-create-object font))) @@ -230,7 +233,7 @@ If FRAME is nil, use the default face." ;;;###autoload (defun custom-set-face-update-spec (face display plist) "Customize the FACE for display types matching DISPLAY, merging - in the new items from PLIST" + in the new items from PLIST." (let ((spec (face-spec-update-all-matching (custom-face-get-spec face) display plist))) (put face 'customized-face spec) @@ -326,7 +329,7 @@ This means reset face to its value in to-theme." "Reset the value of the face to values previously defined. Associate this setting with the 'user' theme. -ARGS is defined as for `custom-theme-reset-faces'" +ARGS is defined as for `custom-theme-reset-faces'." (apply #'custom-theme-reset-faces 'user args)) diff --git a/lisp/custom.el b/lisp/custom.el index 20f02ab..5cd137d 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -396,7 +396,7 @@ LOAD should be either a library file name, or a feature name." Define a theme labeled by SYMBOL THEME. The optional argument DOC is a doc string describing the theme. It is optionally followed by the -following keyboard arguments +following keyword arguments :short-description DESC DESC is a short (one line) description of the theme. If not given DOC @@ -423,7 +423,7 @@ following keyboard arguments (memq theme custom-known-themes)) (defsubst custom-check-theme (theme) - "Check whether THEME is valid and signal an error if NOT" + "Check whether THEME is valid and signal an error if NOT." (unless (custom-theme-p theme) (error "Unknown theme `%s'" theme))) @@ -565,7 +565,7 @@ BODY is as with custom-theme-load-themes." (defsubst copy-upto-last (elt list) - "Copy all the elements of the list upto the last occurrence of elt" + "Copy all the elements of the list upto the last occurrence of elt." ;; Is it faster to do more work in C than to do less in elisp? (nreverse (cdr (member elt (reverse list))))) diff --git a/lisp/dialog.el b/lisp/dialog.el index cdfbe55..03a9931 100644 --- a/lisp/dialog.el +++ b/lisp/dialog.el @@ -308,7 +308,7 @@ For type `page-setup': This invokes the Windows standard Page Setup dialog. This dialog is usually invoked in response to the Page Setup command, and -used to chose such parameters as page orientation, print margins etc. +used to choose such parameters as page orientation, print margins etc. Note that this dialog contains the \"Printer\" button, which invokes the Printer Setup dialog (see `msprinter-print-setup-dialog') so that the user can update the printer options or even select a different printer diff --git a/lisp/dumped-lisp.el b/lisp/dumped-lisp.el index 7b7d338..a299732 100644 --- a/lisp/dumped-lisp.el +++ b/lisp/dumped-lisp.el @@ -115,8 +115,10 @@ ;;;;;;;;;;;;;;;;;; Coding-system support (when-feature file-coding "coding") (when-feature file-coding "code-files") + ;; Handle process with encoding/decoding coding-system. (when-feature file-coding "code-process") - + ;; Provide basic commands to set coding systems to user + (when-feature file-coding "code-cmds") ;;;;;;;;;;;;;;;;;; MULE support (when-feature mule "mule-charset") (when-feature mule "mule-coding") diff --git a/lisp/etags.el b/lisp/etags.el index e71cbe9..56fc478 100644 --- a/lisp/etags.el +++ b/lisp/etags.el @@ -408,7 +408,7 @@ File name returned is relative to tag table file's directory." (defun buffer-tag-table-files () "Returns a list of all files referenced by all TAGS tables that this buffer uses." - (apply #'nconc + (apply #'append (mapcar #'tag-table-files (buffer-tag-table-list)))) diff --git a/lisp/faces.el b/lisp/faces.el index eff6c16..953025b 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -842,12 +842,12 @@ the function to be called on it." ;; happen if that locale has no instantiators. So signal ;; an error to indicate this. - + (setq temp-sp (copy-specifier sp)) (if (and (or (eq locale 'global) (eq locale 'all) (not locale)) (not (face-property face property 'global))) (copy-specifier (face-property 'default property) - temp-sp 'global)) + temp-sp 'global)) (if (and (valid-specifier-locale-p locale) (not (specifier-specs temp-sp locale))) (error "Property must have a specification in locale %S" locale)) @@ -1298,7 +1298,7 @@ If FRAME is nil, return the default frame properties." (defun face-spec-update-all-matching (spec display plist) "Update all entries in the face spec that could match display to -have the entries from the new plist and return the new spec" +have the entries from the new plist and return the new spec." (mapcar (lambda (e) (let ((entries (car e)) @@ -1326,8 +1326,8 @@ have the entries from the new plist and return the new spec" (setq new-options (cddr new-options))) (list entries options)))) (copy-sequence spec))) - - + + (defun face-spec-set-match-display (display &optional frame) "Return non-nil if DISPLAY matches FRAME. @@ -1781,25 +1781,25 @@ in that frame; otherwise change each frame." (if (featurep 'xpm) (setq xpm-color-symbols (list - (purecopy '("foreground" (face-foreground 'default))) - (purecopy '("background" (face-background 'default))) - (purecopy '("backgroundToolBarColor" - (or - (and - (featurep 'x) - (x-get-resource "backgroundToolBarColor" - "BackgroundToolBarColor" 'string - nil nil 'warn)) - - (face-background 'toolbar)))) - (purecopy '("foregroundToolBarColor" - (or - (and - (featurep 'x) - (x-get-resource "foregroundToolBarColor" - "ForegroundToolBarColor" 'string - nil nil 'warn)) - (face-foreground 'toolbar)))) + '("foreground" (face-foreground 'default)) + '("background" (face-background 'default)) + '("backgroundToolBarColor" + (or + (and + (featurep 'x) + (x-get-resource "backgroundToolBarColor" + "BackgroundToolBarColor" 'string + nil nil 'warn)) + + (face-background 'toolbar))) + '("foregroundToolBarColor" + (or + (and + (featurep 'x) + (x-get-resource "foregroundToolBarColor" + "ForegroundToolBarColor" 'string + nil nil 'warn)) + (face-foreground 'toolbar))) ))) (when (featurep 'tty) diff --git a/lisp/files-nomule.el b/lisp/files-nomule.el index cab09cc..0c983fc 100644 --- a/lisp/files-nomule.el +++ b/lisp/files-nomule.el @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -33,7 +33,7 @@ ;;; Code: -(defun insert-file-contents (filename &optional visit beg end replace) +(defun insert-file-contents (filename &optional visit start end replace) "Insert contents of file FILENAME after point. Returns list of absolute file name and length of data inserted. If second argument VISIT is non-nil, the buffer's visited filename @@ -41,15 +41,15 @@ and last save file modtime are set, and it is marked unmodified. If visiting and the file does not exist, visiting is completed before the error is signaled. -The optional third and fourth arguments BEG and END +The optional third and fourth arguments START and END specify what portion of the file to insert. -If VISIT is non-nil, BEG and END must be nil. +If VISIT is non-nil, START and END must be nil. If optional fifth argument REPLACE is non-nil, it means replace the current buffer contents (in the accessible portion) with the file contents. This is better than simply deleting and inserting the whole thing because (1) it preserves some marker positions and (2) it puts less data in the undo list." - (insert-file-contents-internal filename visit beg end replace nil nil)) + (insert-file-contents-internal filename visit start end replace nil nil)) (defun write-region (start end filename &optional append visit lockname coding-system) "Write current region into specified file. diff --git a/lisp/files.el b/lisp/files.el index af78d9b..05d60f6 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -291,11 +291,11 @@ changing the major mode does not clear it. However, calling (defvar after-set-visited-file-name-hooks nil "List of functions to be called after \\[set-visited-file-name] or during \\[write-file]. -You can use this hook to restore local values of write-file-hooks, -after-save-hook, and revert-buffer-function, which pertain +You can use this hook to restore local values of `write-file-hooks', +`after-save-hook', and `revert-buffer-function', which pertain to a specific file and therefore are normally killed by a rename. -Put hooks pertaining to the buffer contents on write-contents-hooks -and revert-buffer-insert-file-contents-function.") +Put hooks pertaining to the buffer contents on `write-contents-hooks' +and `revert-buffer-insert-file-contents-function'.") (defvar write-contents-hooks nil "List of functions to be called before writing out a buffer to a file. @@ -870,18 +870,18 @@ If there is no such live buffer, return nil." (setq list (cdr list)))) found)))) -(defun insert-file-contents-literally (filename &optional visit beg end replace) +(defun insert-file-contents-literally (filename &optional visit start end replace) "Like `insert-file-contents', q.v., but only reads in the file. A buffer may be modified in several ways after reading into the buffer due to advanced Emacs features, such as format decoding, character code -conversion,find-file-hooks, automatic uncompression, etc. +conversion, find-file-hooks, automatic uncompression, etc. This function ensures that none of these modifications will take place." (let ((wrap-func (find-file-name-handler filename 'insert-file-contents-literally))) - (if wrap-func + (if wrap-func (funcall wrap-func 'insert-file-contents-literally filename - visit beg end replace) + visit start end replace) (let ((file-name-handler-alist nil) (format-alist nil) (after-insert-file-functions nil) @@ -894,7 +894,7 @@ conversion,find-file-hooks, automatic uncompression, etc. (unwind-protect (progn (fset 'find-buffer-file-type (lambda (filename) t)) - (insert-file-contents filename visit beg end replace)) + (insert-file-contents filename visit start end replace)) (if find-buffer-file-type-function (fset 'find-buffer-file-type find-buffer-file-type-function) (fmakunbound 'find-buffer-file-type))))))) @@ -1173,7 +1173,7 @@ run `normal-mode' explicitly." ("\\.m\\(?:[mes]\\|an\\)\\'" . nroff-mode) ("\\.icn\\'" . icon-mode) ("\\.\\(?:[ckz]?sh\\|shar\\)\\'" . sh-mode) - ("\\.pro\\'" . idlwave-mode) + ("\\.[Pp][Rr][Oo]\\'" . idlwave-mode) ;; #### Unix-specific! ("/\\.\\(?:bash_\\|z\\)?\\(profile\\|login\\|logout\\)\\'" . sh-mode) ("/\\.\\(?:[ckz]sh\\|bash\\|tcsh\\|es\\|xinit\\|startx\\)rc\\'" . sh-mode) @@ -1206,7 +1206,6 @@ run `normal-mode' explicitly." ("\\.[sj]?html?\\'" . html-mode) ("\\.jsp\\'" . html-mode) ("\\.xml\\'" . xml-mode) - ("\\.htm?l?3\\'" . html3-mode) ("\\.\\(?:sgml?\\|dtd\\)\\'" . sgml-mode) ("\\.c?ps\\'" . postscript-mode) ;; .emacs following a directory delimiter in either Unix or @@ -1260,8 +1259,7 @@ with the name of the interpreter specified in the first line. If it matches, mode MODE is selected.") (defvar binary-file-regexps - (purecopy - '("\\.\\(?:bz2\\|elc\\|g\\(if\\|z\\)\\|jp\\(eg\\|g\\)\\|png\\|t\\(ar\\|gz\\|iff\\)\\|[Zo]\\)\\'")) + '("\\.\\(?:bz2\\|elc\\|g\\(if\\|z\\)\\|jp\\(eg\\|g\\)\\|png\\|t\\(ar\\|gz\\|iff\\)\\|[Zo]\\)\\'") "List of regexps of filenames containing binary (non-text) data.") ; (eval-when-compile @@ -1281,9 +1279,9 @@ If it matches, mode MODE is selected.") ; "tiff" ; "jpg" ; "jpeg")))))) - + (defvar inhibit-first-line-modes-regexps - (purecopy binary-file-regexps) + binary-file-regexps "List of regexps; if one matches a file name, don't look for `-*-'.") (defvar inhibit-first-line-modes-suffixes nil @@ -1481,7 +1479,7 @@ for current buffer." (or force (hack-local-variables-p nil)))) (let ((continue t) - prefix prefixlen suffix beg + prefix prefixlen suffix start (enable-local-eval enable-local-eval)) ;; The prefix is what comes before "local variables:" in its line. ;; The suffix is what comes after "local variables:" in its line. @@ -1508,11 +1506,11 @@ for current buffer." (error "Local variables entry is missing the prefix"))) ;; Find the variable name; strip whitespace. (skip-chars-forward " \t") - (setq beg (point)) + (setq start (point)) (skip-chars-forward "^:\n") (if (eolp) (error "Missing colon in local variables entry")) (skip-chars-backward " \t") - (let* ((str (buffer-substring beg (point))) + (let* ((str (buffer-substring start (point))) (var (read str)) val) ;; Setting variable named "end" means end of list. @@ -2245,7 +2243,7 @@ After saving the buffer, run `after-save-hook'." (goto-char (point-max)) (insert ?\n))) - ;; Run the write-file-hooks until one returns non-null. + ;; Run the write-file-hooks until one returns non-nil. ;; Bind after-save-hook to nil while running the ;; write-file-hooks so that if this function is called ;; recursively (from inside a write-file-hook) the @@ -2361,9 +2359,9 @@ After saving the buffer, run `after-save-hook'." "Provide a clean way for a write-file-hook to wrap AROUND the execution of the remaining hooks and writing to disk. Do not call this function except from a functions -on the write-file-hooks or write-contents-hooks list. +on the `write-file-hooks' or `write-contents-hooks' list. A hook that calls this function must return non-nil, -to signal completion to its caller. continue-save-buffer +to signal completion to its caller. `continue-save-buffer' always returns non-nil." (let ((hooks (cdr (or continue-save-buffer-hooks-tail (error @@ -3165,19 +3163,19 @@ If WILDCARD, it also runs the shell specified by `shell-file-name'." (file-name-directory file) (file-name-directory (expand-file-name file)))) (pattern (file-name-nondirectory file)) - (beg 0)) + (start 0)) ;; Quote some characters that have special meanings in shells; ;; but don't quote the wildcards--we want them to be special. ;; We also currently don't quote the quoting characters ;; in case people want to use them explicitly to quote ;; wildcard characters. ;;#### Unix-specific - (while (string-match "[ \t\n;<>&|()#$]" pattern beg) + (while (string-match "[ \t\n;<>&|()#$]" pattern start) (setq pattern (concat (substring pattern 0 (match-beginning 0)) "\\" (substring pattern (match-beginning 0))) - beg (1+ (match-end 0)))) + start (1+ (match-end 0)))) (call-process shell-file-name nil t nil "-c" (concat "\\" ;; Disregard shell aliases! insert-directory-program diff --git a/lisp/fill.el b/lisp/fill.el index a1eafa1..2b2179b 100644 --- a/lisp/fill.el +++ b/lisp/fill.el @@ -88,7 +88,7 @@ reinserts the fill prefix in each resulting line." ;; #### - this is still weak. Yeah, there's filladapt, but this should ;; still be better... --Stig -(defcustom adaptive-fill-regexp (purecopy "[ \t]*\\([#;>*]+ +\\)?") +(defcustom adaptive-fill-regexp "[ \t]*\\([#;>*]+ +\\)?" "*Regexp to match text at start of line that constitutes indentation. If Adaptive Fill mode is enabled, whatever text matches this pattern on the second line of a paragraph is used as the standard indentation @@ -103,7 +103,7 @@ This function is used when `adaptive-fill-regexp' does not match." :type 'function :group 'fill) -;; Added for kinsoku processing. Use this instead of +;; Added for kinsoku processing. Use this instead of ;; (skip-chars-backward "^ \t\n") ;; (skip-chars-backward "^ \n" linebeg) (defun fill-move-backward-to-break-point (regexp &optional lim) @@ -161,7 +161,7 @@ number equals or exceeds the local fill-column - right-margin difference." here-col col)) (max here-col fill-col))))) -(defun canonically-space-region (beg end) +(defun canonically-space-region (start end) "Remove extra spaces between words in region. Leave one space between words, two at end of sentences or after colons \(depending on values of `sentence-end-double-space' and `colon-double-space'). @@ -169,7 +169,7 @@ Remove indentation from each line." (interactive "r") ;;;### 97/3/14 jhod: Do I have to add anything here for kinsoku? (save-excursion - (goto-char beg) + (goto-char start) ;; XEmacs - (ENE/stig from fa-extras.el): Skip the start of a comment. (and comment-start-skip (looking-at comment-start-skip) @@ -178,7 +178,7 @@ Remove indentation from each line." ;; This is quick, but loses when a tab follows the end of a sentence. ;; Actually, it is difficult to tell that from "Mr.\tSmith". ;; Blame the typist. - (subst-char-in-region beg end ?\t ?\ ) + (subst-char-in-region start end ?\t ?\ ) (while (and (< (point) end) (re-search-forward " *" end t)) (delete-region @@ -195,7 +195,7 @@ Remove indentation from each line." (match-end 0))) ;; Make sure sentences ending at end of line get an extra space. ;; loses on split abbrevs ("Mr.\nSmith") - (goto-char beg) + (goto-char start) (while (and (< (point) end) (re-search-forward "[.?!][])}\"']*$" end t)) ;; We insert before markers in case a caller such as @@ -294,7 +294,7 @@ space does not end a sentence, so don't break a line there." (beginning-of-line) (setq from (point)) - + ;; Delete all but one soft newline at end of region. ;; And leave TO before that one. (goto-char to) @@ -604,13 +604,13 @@ argument to it), and if it returns non-nil, we simply return its value." (forward-paragraph) (or (bolp) (newline 1)) (let ((end (point)) - (beg (progn (backward-paragraph) (point)))) + (start (progn (backward-paragraph) (point)))) (goto-char before) (if use-hard-newlines ;; Can't use fill-region-as-paragraph, since this paragraph may ;; still contain hard newlines. See fill-region. - (fill-region beg end arg) - (fill-region-as-paragraph beg end arg))))))) + (fill-region start end arg) + (fill-region-as-paragraph start end arg))))))) (defun fill-region (from to &optional justify nosqueeze to-eop) "Fill each of the paragraphs in the region. @@ -629,23 +629,23 @@ space does not end a sentence, so don't break a line there." (barf-if-buffer-read-only nil (region-beginning) (region-end)) (list (region-beginning) (region-end) (if current-prefix-arg 'full)))) - (let (end beg) + (let (end start) (save-restriction (goto-char (max from to)) (if to-eop (progn (skip-chars-backward "\n") (forward-paragraph))) (setq end (point)) - (goto-char (setq beg (min from to))) + (goto-char (setq start (min from to))) (beginning-of-line) (narrow-to-region (point) end) (while (not (eobp)) (let ((initial (point)) end) ;; If using hard newlines, break at every one for filling - ;; purposes rather than using paragraph breaks. + ;; purposes rather than using paragraph breaks. (if use-hard-newlines - (progn + (progn (while (and (setq end (text-property-any (point) (point-max) 'hard t)) (not (eq ?\n (char-after end))) @@ -656,8 +656,8 @@ space does not end a sentence, so don't break a line there." (forward-paragraph 1) (setq end (point)) (forward-paragraph -1)) - (if (< (point) beg) - (goto-char beg)) + (if (< (point) start) + (goto-char start)) (if (>= (point) initial) (fill-region-as-paragraph (point) end justify nosqueeze) (goto-char end))))))) @@ -671,7 +671,7 @@ See `fill-paragraph' and `fill-region' for more information." (fill-region (point) (mark) arg) (fill-paragraph arg))) - + (defconst default-justification 'left "*Method of justifying text not otherwise specified. Possible values are `left', `right', `full', `center', or `none'. @@ -685,9 +685,9 @@ This variable automatically becomes buffer-local when set in any fashion.") This returns the value of the text-property `justification', or the variable `default-justification' if there is no text-property. However, it returns nil rather than `none' to mean \"don't justify\"." - (let ((j (or (get-text-property + (let ((j (or (get-text-property ;; Make sure we're looking at paragraph body. - (save-excursion (skip-chars-forward " \t") + (save-excursion (skip-chars-forward " \t") (if (and (eobp) (not (bobp))) (1- (point)) (point))) 'justification) @@ -724,7 +724,7 @@ extended to include entire paragraphs as in the interactive command." (save-restriction (if whole-par (let ((paragraph-start (if use-hard-newlines "." paragraph-start)) - (paragraph-ignore-fill-prefix (if use-hard-newlines t + (paragraph-ignore-fill-prefix (if use-hard-newlines t paragraph-ignore-fill-prefix))) (goto-char begin) (while (and (bolp) (not (eobp))) (forward-char 1)) @@ -785,7 +785,7 @@ If the mark is not active, this applies to the current paragraph." ;; 97/3/14 jhod: This functions are added for Kinsoku support (defun find-space-insertable-point () - "Search backward for a permissible point for inserting justification spaces" + "Search backward for a permissible point for inserting justification spaces." (if (boundp 'space-insertable) (if (re-search-backward space-insertable nil t) (progn (forward-char 1) @@ -795,7 +795,7 @@ If the mark is not active, this applies to the current paragraph." ;; A line has up to six parts: ;; -;; >>> hello. +;; >>> hello. ;; [Indent-1][FP][ Indent-2 ][text][trailing whitespace][newline] ;; ;; "Indent-1" is the left-margin indentation; normally it ends at column @@ -807,7 +807,7 @@ If the mark is not active, this applies to the current paragraph." ;; Trailing whitespace is not counted as part of the line length when ;; center- or right-justifying. ;; -;; All parts of the line are optional, although the final newline can +;; All parts of the line are optional, although the final newline can ;; only be missing on the last line of the buffer. (defun justify-current-line (&optional how eop nosqueeze) @@ -815,7 +815,7 @@ If the mark is not active, this applies to the current paragraph." Normally does full justification: adds spaces to the line to make it end at the column given by `current-fill-column'. Optional first argument HOW specifies alternate type of justification: -it can be `left', `right', `full', `center', or `none'. +it can be `left', `right', `full', `center', or `none'. If HOW is t, will justify however the `current-justification' function says to. If HOW is nil or missing, full justification is done by default. Second arg EOP non-nil means that this is the last line of the paragraph, so @@ -831,14 +831,14 @@ otherwise it is made canonical." (let ((fc (current-fill-column)) (pos (point-marker)) fp-end ; point at end of fill prefix - beg ; point at beginning of line's text + start ; point at beginning of line's text end ; point at end of line's text - indent ; column of `beg' + indent ; column of `start' endcol ; column of `end' ncols) ; new indent point or offset (end-of-line) ;; Check if this is the last line of the paragraph. - (if (and use-hard-newlines (null eop) + (if (and use-hard-newlines (null eop) (get-text-property (point) 'hard)) (setq eop t)) (skip-chars-backward " \t") @@ -852,40 +852,40 @@ otherwise it is made canonical." (beginning-of-line) (skip-chars-forward " \t") ;; Skip over fill-prefix. - (if (and fill-prefix + (if (and fill-prefix (not (string-equal fill-prefix "")) (equal fill-prefix - (buffer-substring + (buffer-substring (point) (min (point-max) (+ (length fill-prefix) (point)))))) (forward-char (length fill-prefix)) - (if (and adaptive-fill-mode + (if (and adaptive-fill-mode (looking-at adaptive-fill-regexp)) (goto-char (match-end 0)))) (setq fp-end (point)) (skip-chars-forward " \t") ;; This is beginning of the line's text. (setq indent (current-column)) - (setq beg (point)) + (setq start (point)) (goto-char end) (setq endcol (current-column)) ;; HOW can't be null or left--we would have exited already - (cond ((eq 'right how) + (cond ((eq 'right how) (setq ncols (- fc endcol)) (if (< ncols 0) ;; Need to remove some indentation - (delete-region + (delete-region (progn (goto-char fp-end) (if (< (current-column) (+ indent ncols)) (move-to-column (+ indent ncols) t)) (point)) (progn (move-to-column indent) (point))) ;; Need to add some - (goto-char beg) + (goto-char start) (indent-to (+ indent ncols)) ;; If point was at beginning of text, keep it there. - (if (= beg pos) + (if (= start pos) (move-marker pos (point))))) ((eq 'center how) @@ -903,18 +903,18 @@ otherwise it is made canonical." (point)) (progn (move-to-column indent) (point))) ;; Have too little - add some - (goto-char beg) + (goto-char start) (indent-to ncols) ;; If point was at beginning of text, keep it there. - (if (= beg pos) + (if (= start pos) (move-marker pos (point))))) ((eq 'full how) ;; Insert extra spaces between words to justify line (save-restriction - (narrow-to-region beg end) + (narrow-to-region start end) (or nosqueeze - (canonically-space-region beg end)) + (canonically-space-region start end)) (goto-char (point-max)) (setq ncols (- fc endcol)) ;; Ncols is number of additional spaces needed @@ -956,10 +956,10 @@ extra spaces between words. It does nothing in other justification modes." (save-excursion (move-to-left-margin nil t) ;; Position ourselves after any fill-prefix. - (if (and fill-prefix + (if (and fill-prefix (not (string-equal fill-prefix "")) (equal fill-prefix - (buffer-substring + (buffer-substring (point) (min (point-max) (+ (length fill-prefix) (point)))))) (forward-char (length fill-prefix))) @@ -969,7 +969,7 @@ extra spaces between words. It does nothing in other justification modes." (defun unjustify-region (&optional begin end) "Remove justification whitespace from region. For centered or right-justified regions, this function removes any indentation -past the left margin from each line. For full-justified lines, it removes +past the left margin from each line. For full-justified lines, it removes extra spaces between words. It does nothing in other justification modes. Arguments BEGIN and END are optional; default is the whole buffer." (save-excursion @@ -1016,7 +1016,7 @@ MAIL-FLAG for a mail message, i. e. don't fill header lines." (goto-char min) (beginning-of-line) (narrow-to-region (point) max) - (if mailp + (if mailp (while (and (not (eobp)) (or (looking-at "[ \t]*[^ \t\n]+:") (looking-at "[ \t]*$"))) @@ -1040,7 +1040,7 @@ MAIL-FLAG for a mail message, i. e. don't fill header lines." (if (and adaptive-fill-mode adaptive-fill-regexp (looking-at adaptive-fill-regexp)) (match-string 0) - (buffer-substring + (buffer-substring (point) (save-excursion (skip-chars-forward " \t") (point)))) @@ -1055,7 +1055,7 @@ MAIL-FLAG for a mail message, i. e. don't fill header lines." (if fill-individual-varying-indent ;; If this line is a separator line, with or ;; without prefix, end the paragraph. - (and + (and (not (looking-at paragraph-separate)) (save-excursion (not (and (looking-at fill-prefix-regexp) diff --git a/lisp/float-sup.el b/lisp/float-sup.el index 11d409d..f034ecc 100644 --- a/lisp/float-sup.el +++ b/lisp/float-sup.el @@ -38,18 +38,16 @@ (error "Floating point was disabled at compile time")) ;; define pi and e via math-lib calls. (much less prone to killer typos.) -;; XEmacs change (purecopy) -(defconst pi (purecopy (* 4 (atan 1))) "The value of Pi (3.1415926...)") -(defconst e (purecopy (exp 1)) "The value of e (2.7182818...)") +(defconst pi (* 4 (atan 1)) "The value of Pi (3.1415926...)") +(defconst e (exp 1) "The value of e (2.7182818...)") ;; Careful when editing this file ... typos here will be hard to spot. ;; (defconst pi 3.14159265358979323846264338327 ;; "The value of Pi (3.14159265358979323846264338327...)") -;; XEmacs change (purecopy) -(defconst degrees-to-radians (purecopy (/ pi 180.0)) +(defconst degrees-to-radians (/ pi 180.0) "Degrees to radian conversion constant") -(defconst radians-to-degrees (purecopy (/ 180.0 pi)) +(defconst radians-to-degrees (/ 180.0 pi) "Radian to degree conversion constant") ;; these expand to a single multiply by a float when byte compiled diff --git a/lisp/font-lock.el b/lisp/font-lock.el index ee880bb..5a9452c 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -390,7 +390,7 @@ megabyte for buffers in `rmail-mode', and size is irrelevant otherwise." For example, an element of the first form highlights (if not already highlighted): - \"\\\\\" Discrete occurrences of \"foo\" in the value + \"\\\\\\=\" Discrete occurrences of \"foo\" in the value of the variable `font-lock-keyword-face'. (\"fu\\\\(bar\\\\)\" . 1) Substring \"bar\" within all occurrences of @@ -409,7 +409,7 @@ For example, an element of the first form highlights (if not already highlighted `fubar-match' finds and matches in the value of `fubar-face'. - (\"\\\\\" (0 anchor-face) (\"\\\\\" nil nil (0 item-face))) + (\"\\\\\\=\" (0 anchor-face) (\"\\\\\\=\" nil nil (0 item-face))) -------------- --------------- ------------ --- --- ------------- | | | | | | MATCHER | ANCHOR-MATCHER | +------+ MATCH-HIGHLIGHT @@ -909,11 +909,13 @@ See the variable `font-lock-keywords' for customization." ;;;###autoload (defun turn-on-font-lock () "Unconditionally turn on Font Lock mode." + (interactive) (font-lock-mode 1)) ;;;###autoload (defun turn-off-font-lock () "Unconditionally turn off Font Lock mode." + (interactive) (font-lock-mode 0)) ;;; FSF has here: @@ -2643,22 +2645,22 @@ The name is assumed to begin with a capital letter.") 3 (if (match-beginning 2) 'bold 'italic) keep)) "Default expressions to highlight in TeX modes.") -(defconst ksh-font-lock-keywords (purecopy +(defconst ksh-font-lock-keywords (list '("\\(^\\|[^\$\\\]\\)#.*" . font-lock-comment-face) '("\\<\\(if\\|then\\|else\\|elif\\|fi\\|case\\|esac\\|for\\|do\\|done\\|foreach\\|in\\|end\\|select\\|while\\|repeat\\|time\\|function\\|until\\|exec\\|command\\|coproc\\|noglob\\|nohup\\|nocorrect\\|source\\|autoload\\|alias\\|unalias\\|export\\|set\\|echo\\|eval\\|cd\\|log\\|compctl\\)\\>" . font-lock-keyword-face) '("\\<\\[\\[.*\\]\\]\\>" . font-lock-type-face) '("\$\(.*\)" . font-lock-type-face) - )) + ) "Additional expressions to highlight in ksh-mode.") -(defconst sh-font-lock-keywords (purecopy +(defconst sh-font-lock-keywords (list '("\\(^\\|[^\$\\\]\\)#.*" . font-lock-comment-face) '("\\<\\(if\\|then\\|else\\|elif\\|fi\\|case\\|esac\\|for\\|do\\|done\\|in\\|while\\|exec\\|export\\|set\\|echo\\|eval\\|cd\\)\\>" . font-lock-keyword-face) '("\\[.*\\]" . font-lock-type-face) '("`.*`" . font-lock-type-face) - )) + ) "Additional expressions to highlight in sh-mode.") diff --git a/lisp/font-menu.el b/lisp/font-menu.el index 14c680d..d1cb509 100644 --- a/lisp/font-menu.el +++ b/lisp/font-menu.el @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -158,7 +158,7 @@ the last entry in the menu." :type '(choice (string :tag "Format string") (function))) -(defvar font-menu-preferred-resolution +(defvar font-menu-preferred-resolution (make-specifier-and-init 'generic '((global ((mswindows) . ":") ((x) . "*-*"))) t) "Preferred horizontal and vertical font menu resolution (e.g. \"75:75\").") @@ -187,7 +187,7 @@ the last entry in the menu." This is run the first time that a font-menu is needed for each device. If you don't like the lazy invocation of this function, you can add it to `create-device-hook' and that will make the font menus respond more quickly -when they are selected for the first time. If you add fonts to your system, +when they are selected for the first time. If you add fonts to your system, or if you change your font path, you can call this to re-initialize the menus." (message "Getting list of fonts from server... ") (if (or noninteractive @@ -356,7 +356,7 @@ or if you change your font path, you can call this to re-initialize the menus." (when weight (signal 'error '("Setting weight currently not supported"))) (setq new-default-face-font - (font-menu-load-font + (font-menu-load-font (or family from-family) (or weight from-weight) (or size from-size) @@ -398,14 +398,14 @@ or if you change your font path, you can call this to re-initialize the menus." (/ (or size from-size) (specifier-instance font-menu-size-scaling (selected-device)))) - "pt"))) + "pt"))) (message "Font %s" (face-font-name 'default))))) (defun font-menu-change-face (face from-family from-weight from-size to-family to-weight to-size) - (or (symbolp face) (signal 'wrong-type-argument (list 'symbolp face))) + (or (symbolp face) (setq face (wrong-type-argument 'symbolp face))) (let* ((dcache (device-fonts-cache)) (font-data (font-menu-font-data face dcache)) (face-family (aref font-data 1)) @@ -422,7 +422,7 @@ or if you change your font path, you can call this to re-initialize the menus." ;; If its value is inherited, we don't touch it. If any of this ;; is not true, we leave it alone. (when (and (face-font face 'global) - (cond + (cond (to-family (string-equal face-family from-family)) (to-weight (string-equal face-weight from-weight)) (to-size (= face-size from-size)))) @@ -432,7 +432,7 @@ or if you change your font path, you can call this to re-initialize the menus." (or to-size face-size) face-slant (specifier-instance - font-menu-preferred-resolution + font-menu-preferred-resolution (selected-device))) (and font-menu-this-frame-only-p (selected-frame)))))) diff --git a/lisp/font.el b/lisp/font.el index 28bb05d..db52f88 100644 --- a/lisp/font.el +++ b/lisp/font.el @@ -299,7 +299,7 @@ for use in the 'weight' field of an X font string.") w2)))) (defun font-spatial-to-canonical (spec &optional device) - "Convert SPEC (in inches, millimeters, points, or picas) into points" + "Convert SPEC (in inches, millimeters, points, or picas) into points." ;; 1 in = 6 pa = 25.4 mm = 72 pt (cond ((numberp spec) diff --git a/lisp/format.el b/lisp/format.el index 7542247..076dba5 100644 --- a/lisp/format.el +++ b/lisp/format.el @@ -312,7 +312,7 @@ formats defined in `format-alist', or a list of such symbols." buffer-file-format)))) (format-encode-region (point-min) (point-max) format)) -(defun format-encode-region (beg end &optional format) +(defun format-encode-region (start end &optional format) "Translate the region into some FORMAT. FORMAT defaults to `buffer-file-format', it is a symbol naming one of the formats defined in `format-alist', or a list of such symbols." @@ -334,10 +334,10 @@ one of the formats defined in `format-alist', or a list of such symbols." ) (if to-fn (if modify - (setq end (format-encode-run-method to-fn beg end + (setq end (format-encode-run-method to-fn start end (current-buffer))) (format-insert-annotations - (funcall to-fn beg end (current-buffer))))) + (funcall to-fn start end (current-buffer))))) (setq format (cdr format))))))) (defun format-write-file (filename format) @@ -374,10 +374,10 @@ If FORMAT is nil then do not do any format conversion." (if format (format-decode-buffer format))) -(defun format-insert-file (filename format &optional beg end) +(defun format-insert-file (filename format &optional start end) "Insert the contents of file FILE using data format FORMAT. If FORMAT is nil then do not do any format conversion. -The optional third and fourth arguments BEG and END specify +The optional third and fourth arguments START and END specify the part of the file to read. The return value is like the value of `insert-file-contents': @@ -390,7 +390,7 @@ a list (ABSOLUTE-FILE-NAME . SIZE)." (list file fmt))) (let (value size) (let ((format-alist nil)) - (setq value (insert-file-contents filename nil beg end)) + (setq value (insert-file-contents filename nil start end)) (setq size (nth 1 value))) (if format (setq size (format-decode format size) @@ -412,7 +412,7 @@ Formats are defined in `format-alist'. Optional arg is the PROMPT to use." ;;; decoding functions for use in format-alist. ;;; -(defun format-replace-strings (alist &optional reverse beg end) +(defun format-replace-strings (alist &optional reverse start end) "Do multiple replacements on the buffer. ALIST is a list of (from . to) pairs, which should be proper arguments to `search-forward' and `replace-match' respectively. @@ -422,12 +422,12 @@ strings. Optional args BEGIN and END specify a region of the buffer to operate on." (save-excursion (save-restriction - (or beg (setq beg (point-min))) + (or start (setq start (point-min))) (if end (narrow-to-region (point-min) end)) (while alist (let ((from (if reverse (cdr (car alist)) (car (car alist)))) (to (if reverse (car (cdr alist)) (cdr (car alist))))) - (goto-char beg) + (goto-char start) (while (search-forward from nil t) (goto-char (match-beginning 0)) (insert to) diff --git a/lisp/frame.el b/lisp/frame.el index 8224377..f13e517 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -776,7 +776,7 @@ all frames that were visible, and iconify all frames that were not." (setq iconification-data (cdr iconification-data)))) (defun suspend-or-iconify-emacs () - "Call iconify-emacs if using a window system, otherwise call suspend-emacs." + "Call iconify-emacs if using a window system, otherwise suspend Emacs." (interactive) (cond ((device-on-window-system-p) (iconify-emacs)) @@ -1055,8 +1055,8 @@ prepended to the `default-frame-plist' when creating a frame for the first time. This function may be used as the value of `pre-display-buffer-function', -to cause the display-buffer function and its callers to exhibit the above -behavior." +to cause the `display-buffer' function and its callers to exhibit the +above behavior." (let ((frame (get-frame-for-buffer-noselect buffer not-this-window-p on-frame))) (if (not (eq frame (selected-frame))) @@ -1104,7 +1104,7 @@ is first in the list. VISIBLE-ONLY will only list non-iconified frames." :group 'frames) (defun show-temp-buffer-in-current-frame (buffer) - "For use as the value of temp-buffer-show-function: + "For use as the value of `temp-buffer-show-function': always displays the buffer in the selected frame, regardless of the behavior that would otherwise be introduced by the `pre-display-buffer-function', which is normally set to `get-frame-for-buffer' (which see)." diff --git a/lisp/gutter-items.el b/lisp/gutter-items.el index b1c75df..d5676d3 100644 --- a/lisp/gutter-items.el +++ b/lisp/gutter-items.el @@ -47,11 +47,16 @@ This option should be set through the options menu." 'buffers-tab val) (setq gutter-buffers-tab-visible-p val))) +(defcustom gutter-buffers-tab-enabled t + "*Whether to enable support for buffers tab in the gutter. +This is different to `gutter-buffers-tab-visible-p' which still runs hooks +even when the gutter is invisible." + :group 'buffers-tab + :type 'boolean) + (defvar gutter-buffers-tab-orientation 'top "Where the buffers tab currently is. Do not set this.") -(defvar gutter-buffers-tab-extent nil) - (defcustom buffers-tab-max-size 6 "*Maximum number of entries which may appear on the \"Buffers\" tab. If this is 10, then only the ten most-recently-selected buffers will be @@ -72,7 +77,7 @@ a large number or nil will slow down tab responsiveness." (defcustom buffers-tab-omit-function 'buffers-menu-omit-invisible-buffers "*If non-nil, a function specifying the buffers to omit from the buffers tab. This is passed a buffer and should return non-nil if the buffer should be -omitted. The default value `buffers-tab-omit-invisible-buffers' omits +omitted. The default value `buffers-menu-omit-invisible-buffers' omits buffers that are normally considered \"invisible\" (those whose name begins with a space)." :type '(choice (const :tag "None" nil) @@ -90,6 +95,18 @@ by `buffers-tab-grouping-regexp'." function) :group 'buffers-tab) +(defcustom buffers-tab-filter-functions (list buffers-tab-selection-function) + "*If non-nil, a list of functions specifying the buffers to select +from the buffers tab. +Each function in the list is passed two buffers, the buffer to +potentially select and the context buffer, and should return non-nil +if the first buffer should be selected. The default value groups +buffers by major mode and by `buffers-tab-grouping-regexp'." + + :type '(choice (const :tag "None" nil) + sexp) + :group 'buffers-tab) + (defcustom buffers-tab-sort-function nil "*If non-nil, a function specifying the buffers to select from the buffers tab. This is passed the buffer list and returns the list in the @@ -159,13 +176,14 @@ If this is 0, then the full buffer name will be shown." (select-window (car (windows-of-buffer buffer))) (switch-to-buffer buffer)))) -(defun select-buffers-tab-buffers-by-mode (buf1 buf2) +(defun select-buffers-tab-buffers-by-mode (buffer-to-select buf1) "For use as a value of `buffers-tab-selection-function'. This selects buffers by major mode `buffers-tab-grouping-regexp'." (let ((mode1 (symbol-name (symbol-value-in-buffer 'major-mode buf1))) - (mode2 (symbol-name (symbol-value-in-buffer 'major-mode buf2))) + (mode2 (symbol-name (symbol-value-in-buffer 'major-mode + buffer-to-select))) (modenm1 (symbol-value-in-buffer 'mode-name buf1)) - (modenm2 (symbol-value-in-buffer 'mode-name buf2))) + (modenm2 (symbol-value-in-buffer 'mode-name buffer-to-select))) (cond ((or (eq mode1 mode2) (eq modenm1 modenm2) (and (string-match "^[^-]+-" mode1) @@ -212,32 +230,25 @@ This just returns the buffer's name, optionally truncated." (when selected (setq selected nil)))) buffers))) -;;; #### SJT I'd really like this function to have just two hooks: (1) the -;;; buffer filter list and (2) a sort function list. Both should be lists -;;; of functions. Each filter takes two arguments: a buffer and a model -;;; buffer. (The model buffer argument allows selecting according to the -;;; mode or directory of that buffer.) The filter returns t if the buffer -;;; should be listed and nil otherwise. Effectively the filter amounts to -;;; the conjuction of the filter list. (Optionally the filter could take a -;;; frame instead of a buffer or generalize to a locale as in a specifier?) -;;; The filtering is done this way to preserve the ordering imposed by -;;; `buffer-list'. In addition, the in-deletion argument will be used the -;;; same way as in the current design. -;;; The list is checked for length and pruned according to least-recently- -;;; selected. (Optionally there could be some kind of sort function here, -;;; too.) -;;; Finally the list is sorted to gutter display order, and the tab data -;;; structure is created and returned. -;;; #### Docstring isn't very well expressed. +;;; #### SJT would like this function to have a sort function list. I +;;; don't see how this could work given that sorting is not +;;; cumulative --andyp. (defun buffers-tab-items (&optional in-deletion frame force-selection) - "This is the tab filter for the top-level buffers \"Buffers\" tab. -It dynamically creates a list of buffers to use as the contents of the tab. -Only the most-recently-used few buffers will be listed on the tab, for -efficiency reasons. You can control how many buffers will be shown by -setting `buffers-tab-max-size'. You can control the text of the tab -items by redefining the function `format-buffers-menu-line'." + "Return a list of tab instantiators based on the current buffers list. +This function is used as the tab filter for the top-level buffers +\"Buffers\" tab. It dynamically creates a list of tab instantiators +to use as the contents of the tab. The contents and order of the list +is controlled by `buffers-tab-filter-functions' which by default +groups buffers according to major mode and removes invisible buffers. +You can control how many buffers will be shown by setting +`buffers-tab-max-size'. You can control the text of the tab items by +redefining the function `format-buffers-menu-line'." (save-match-data - (let* ((buffers (delete-if buffers-tab-omit-function (buffer-list frame))) + ;; NB it is too late if we run the omit function as part of the + ;; filter functions because we need to know which buffer is the + ;; context buffer before they get run. + (let* ((buffers (delete-if + buffers-tab-omit-function (buffer-list frame))) (first-buf (car buffers))) ;; maybe force the selected window (when (and force-selection @@ -249,11 +260,19 @@ items by redefining the function `format-buffers-menu-line'." (when in-deletion (setq buffers (delq (current-buffer) buffers)) (setq first-buf (car buffers))) - ;; select buffers in group (default is by mode) - (when buffers-tab-selection-function - (delete-if-not #'(lambda (buf) - (funcall buffers-tab-selection-function - first-buf buf)) buffers)) + ;; filter buffers + (when buffers-tab-filter-functions + (setq buffers + (delete-if + #'null + (mapcar #'(lambda (buf) + (let ((tmp-buf buf)) + (mapc #'(lambda (fun) + (unless (funcall fun buf first-buf) + (setq tmp-buf nil))) + buffers-tab-filter-functions) + tmp-buf)) + buffers)))) ;; maybe shorten list of buffers (and (integerp buffers-tab-max-size) (> buffers-tab-max-size 1) @@ -269,14 +288,11 @@ items by redefining the function `format-buffers-menu-line'." (defun add-tab-to-gutter () "Put a tab control in the gutter area to hold the most recent buffers." (setq gutter-buffers-tab-orientation (default-gutter-position)) - (let ((gutter-string (copy-sequence "\n"))) - (unless gutter-buffers-tab-extent - (setq gutter-buffers-tab-extent (make-extent 0 1 gutter-string))) - (set-extent-begin-glyph - gutter-buffers-tab-extent - (setq gutter-buffers-tab - (make-glyph))) - + (let* ((gutter-string (copy-sequence "\n")) + (gutter-buffers-tab-extent (make-extent 0 1 gutter-string))) + (set-extent-begin-glyph gutter-buffers-tab-extent + (setq gutter-buffers-tab + (make-glyph))) ;; Nuke all existing tabs (remove-gutter-element top-gutter 'buffers-tab) (remove-gutter-element bottom-gutter 'buffers-tab) @@ -298,17 +314,11 @@ items by redefining the function `format-buffers-menu-line'." ((eq gutter-buffers-tab-orientation 'left) (set-specifier left-gutter-border-width 0 'global x) (set-gutter-element left-gutter 'buffers-tab - gutter-string 'global x) - (set-specifier left-gutter-width - (glyph-width gutter-buffers-tab) - 'global x)) + gutter-string 'global x)) ((eq gutter-buffers-tab-orientation 'right) (set-specifier right-gutter-border-width 0 'global x) (set-gutter-element right-gutter 'buffers-tab - gutter-string 'global x) - (set-specifier right-gutter-width - (glyph-width gutter-buffers-tab) - 'global x)) + gutter-string 'global x)) ))) (console-type-list)))) @@ -333,21 +343,33 @@ items by redefining the function `format-buffers-menu-line'." (eq gutter-buffers-tab-orientation 'bottom)) '(gutter-pixel-width) '(gutter-pixel-height)) :items (buffers-tab-items nil frame force-selection)) - frame))))) + frame) + ;; set-glyph-image will not make the gutter dirty + (set-specifier-dirty-flag + (eval (intern (concat + (symbol-name gutter-buffers-tab-orientation) + "-gutter")))))))) ;; A myriad of different update hooks all doing slightly different things -(add-hook 'create-frame-hook - #'(lambda (frame) - (when gutter-buffers-tab (update-tab-in-gutter frame t)))) -(add-hook 'buffer-list-changed-hook 'update-tab-in-gutter) -(add-hook 'default-gutter-position-changed-hook - #'(lambda () - (when gutter-buffers-tab - (mapc #'update-tab-in-gutter (frame-list))))) -(add-hook 'gutter-element-visibility-changed-hook - #'(lambda (prop visible-p) - (when (and (eq prop 'buffers-tab) visible-p) - (mapc #'update-tab-in-gutter (frame-list))))) +(add-one-shot-hook + 'after-init-hook + #'(lambda () + ;; don't add the hooks if the user really doesn't want them + (when gutter-buffers-tab-enabled + (add-hook 'create-frame-hook + #'(lambda (frame) + (when gutter-buffers-tab (update-tab-in-gutter frame t)))) + (add-hook 'buffer-list-changed-hook 'update-tab-in-gutter) + (add-hook 'default-gutter-position-changed-hook + #'(lambda () + (when gutter-buffers-tab + (mapc #'update-tab-in-gutter (frame-list))))) + (add-hook 'gutter-element-visibility-changed-hook + #'(lambda (prop visible-p) + (when (and (eq prop 'buffers-tab) visible-p) + (mapc #'update-tab-in-gutter (frame-list))))) + (update-tab-in-gutter (selected-frame) t)))) + ;; ;; progress display ;; ripped off from message display diff --git a/lisp/gutter.el b/lisp/gutter.el index 44df9a0..19283da 100644 --- a/lisp/gutter.el +++ b/lisp/gutter.el @@ -60,15 +60,15 @@ element in the gutter changes. The value of this variable may be buffer-local. The gutter element symbol is passed as an argument to the hook, as is the visibility flag.") -(defun set-gutter-element (gutter-specifier prop val &optional locale tag-set) - "Set GUTTER-SPECIFIER gutter element PROP to VAL in optional LOCALE. +(defun set-gutter-element (gutter-specifier prop value &optional locale tag-set) + "Set GUTTER-SPECIFIER gutter element PROP to VALUE in optional LOCALE. This is a convenience function for setting gutter elements. -VAL in general must be a string. If VAL is a glyph then a string will be -created to put the glyph into." - (let ((spec val)) - (when (glyphp val) +VALUE in general must be a string. If VALUE is a glyph then a string +will be created to put the glyph into." + (let ((spec value)) + (when (glyphp value) (setq spec (copy-sequence "\n")) - (set-extent-begin-glyph (make-extent 0 1 spec) val)) + (set-extent-begin-glyph (make-extent 0 1 spec) value)) (map-extents #'(lambda (extent arg) (set-extent-property extent 'duplicable t)) spec) (modify-specifier-instances gutter-specifier #'plist-put (list prop spec) diff --git a/lisp/help.el b/lisp/help.el index ab95b37..b07aa17 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -51,7 +51,7 @@ (defvar help-map (let ((map (make-sparse-keymap))) (set-keymap-name map 'help-map) (set-keymap-prompt - map (purecopy (gettext "(Type ? for further options)"))) + map (gettext "(Type ? for further options)")) map) "Keymap for characters following the Help key.") @@ -304,7 +304,7 @@ otherwise it is killed." Like `key-binding', but handles menu events and toolbar presses correctly. KEY is any value returned by `next-command-event'. MENU-FLAG is a symbol that should be set to t if KEY is a menu event, - or nil otherwise" + or nil otherwise." (let (defn) (and menu-flag (set menu-flag nil)) ;; If the key typed was really a menu selection, grab the form out @@ -663,10 +663,10 @@ describes the minor mode." (defun describe-bindings (&optional prefix mouse-only-p) "Show a list of all defined keys, and their definitions. The list is put in a buffer, which is displayed. -If the optional argument PREFIX is supplied, only commands which -start with that sequence of keys are described. -If the second argument (prefix arg, interactively) is non-null -then only the mouse bindings are displayed." +If optional first argument PREFIX is supplied, only commands +which start with that sequence of keys are described. +If optional second argument MOUSE-ONLY-P (prefix arg, interactively) +is non-nil then only the mouse bindings are displayed." (interactive (list nil current-prefix-arg)) (with-displaying-help-buffer (lambda () @@ -883,7 +883,7 @@ The number of messages shown is controlled by `view-lossage-message-count'." help-map) (defmacro with-syntax-table (syntab &rest body) - "Evaluate BODY with the syntax-table SYNTAB" + "Evaluate BODY with the SYNTAB as the current syntax table." `(let ((stab (syntax-table))) (unwind-protect (progn @@ -1164,7 +1164,7 @@ part of the documentation of internal subroutines." (defvar help-symbol-function-and-variable-context-menu '("---" - ["View Function %_Documentation" (help-symbol-run-function + ["View Function %_Documentation" (help-symbol-run-function 'describe-function)] ["View Variable D%_ocumentation" (help-symbol-run-function 'describe-variable)] diff --git a/lisp/hyper-apropos.el b/lisp/hyper-apropos.el index 7725839..7194df8 100644 --- a/lisp/hyper-apropos.el +++ b/lisp/hyper-apropos.el @@ -1085,12 +1085,13 @@ Deletes lines which match PATTERN." nil (forward-char 3) (read (point-marker)))) - ((and - (eq major-mode 'hyper-apropos-help-mode) - (> (point) (point-min))) - (save-excursion - (goto-char (point-min)) - (hyper-apropos-this-symbol))) + ;; What's this? This ends up in the same symbol already described. +;; ((and +;; (eq major-mode 'hyper-apropos-help-mode) +;; (> (point) (point-min))) +;; (save-excursion +;; (goto-char (point-min)) +;; (hyper-apropos-this-symbol))) (t (let* ((st (progn (skip-syntax-backward "w_") diff --git a/lisp/indent.el b/lisp/indent.el index adf2485..5c642cf 100644 --- a/lisp/indent.el +++ b/lisp/indent.el @@ -64,9 +64,9 @@ Default number of columns for margin-changing functions to indent.") ;; XEmacs: (Need the `1+') (indent-to (* tab-width (1+ (/ (current-column) tab-width))))))) -(defun indent-rigidly (start end arg) - "Indent all lines starting in the region sideways by ARG columns. -Called from a program, takes three arguments, START, END and ARG." +(defun indent-rigidly (start end count) + "Indent all lines starting in the region sideways by COUNT columns. +Called from a program, takes three arguments, START, END and COUNT." (interactive "r\np") (save-excursion (goto-char end) @@ -80,7 +80,7 @@ Called from a program, takes three arguments, START, END and ARG." (skip-chars-forward " \t") (setq eol-flag (eolp))) (or eol-flag - (indent-to (max 0 (+ indent arg)) 0)) + (indent-to (max 0 (+ indent count)) 0)) (delete-region (point) (progn (skip-chars-forward " \t") (point)))) (forward-line 1)) (move-marker end nil) @@ -139,7 +139,8 @@ interactively or with optional argument FORCE, it will be fixed." (defun delete-to-left-margin (&optional from to) "Remove left margin indentation from a region. -This deletes to the column given by `current-left-margin'. +The amount of indentation to delete is determined by calling the +function `current-left-margin'. In no case will it delete non-whitespace. Args FROM and TO are optional; default is the whole buffer." (save-excursion @@ -264,16 +265,16 @@ If `auto-fill-mode' is active, re-fills region to fit in new margin." With optional argument, move forward N-1 lines first. From the beginning of the line, moves past the left-margin indentation, the fill-prefix, and any indentation used for centering or right-justifying the -line, but does not move past any whitespace that was explicitly inserted +line, but does not move past any whitespace that was explicitly inserted \(such as a tab used to indent the first line of a paragraph)." (interactive "p") (beginning-of-line n) (skip-chars-forward " \t") ;; Skip over fill-prefix. - (if (and fill-prefix + (if (and fill-prefix (not (string-equal fill-prefix ""))) (if (equal fill-prefix - (buffer-substring + (buffer-substring (point) (min (point-max) (+ (length fill-prefix) (point))))) (forward-char (length fill-prefix))) (if (and adaptive-fill-mode adaptive-fill-regexp diff --git a/lisp/info.el b/lisp/info.el index b2e266e..bc8f765 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -428,9 +428,9 @@ nil or `never', the default, auto-generated info directory (const :tag "conservative" conservative)) :group 'info) -(defvar Info-emacs-info-file-name "xemacs.info" - "The filename of the XEmacs info for -`Info-goto-emacs-command-node' (`\\\\[Info-goto-emacs-command-node]')") +(defconst Info-emacs-info-file-name "xemacs.info" + "The filename of the XEmacs info for `Info-goto-emacs-command-node' +(`\\\\[Info-goto-emacs-command-node]')") ;;;###autoload (defvar Info-directory-list nil @@ -447,12 +447,10 @@ from .emacs. For instance: (setq Info-directory-list (cons \"~/info\" Info-directory-list))") -(defcustom Info-localdir-heading-regexp - "^Locally installed XEmacs Packages:?" +;; This could as well be hard-coded since ${srcdir}/info/dir is in CVS --dv +(defconst Info-localdir-heading-regexp "^Local Packages:$" "The menu part of localdir files will be inserted below this topic -heading." - :type 'regexp - :group 'info) +heading.") (defface info-node '((t (:bold t :italic t))) "Face used for node links in info." @@ -462,25 +460,41 @@ heading." "Face used for cross-references in info." :group 'info-faces) -;; Is this right for NT? .zip, with -c for to stdout, right? -(defvar Info-suffix-list '( ("" . nil) - (".info" . nil) - (".info.bz2" . "bzip2 -dc %s") - (".info.gz" . "gzip -dc %s") - (".info-z" . "gzip -dc %s") - (".info.Z" . "uncompress -c %s") - (".bz2" . "bzip2 -dc %s") - (".gz" . "gzip -dc %s") - (".Z" . "uncompress -c %s") - (".zip" . "unzip -c %s") ) - "List of file name suffixes and associated decoding commands. +;; This list is based on Karl Berry-s advice about extensions `info' itself +;; might encounter. --dv +(defcustom Info-suffix-list '(("" . nil) + (".info" . nil) + (".gz" . "gzip -dc %s") + (".info.gz" . "gzip -dc %s") + (".z" . "gzip -dc %s") + (".info.z" . "gzip -dc %s") + (".bz2" . "bzip2 -dc %s") + (".info.bz2" . "bzip2 -dc %s") + (".Z" . "uncompress -c %s") + (".info.Z" . "uncompress -c %s") + (".zip" . "unzip -c %s") + (".info.zip" . "unzip -c %s") + (".y" . "cat %s | unyabba") + ("info.y" . "cat %s | unyabba") + ;; These ones are for MS-DOS filenames. + (".inf" . nil) + (".igz" . "gzip -dc %s") + (".inz" . "gzip -c %s")) + "*List of file name suffixes and associated decoding commands. Each entry should be (SUFFIX . STRING); if STRING contains %s, that is changed to name of the file to decode, otherwise the file is given to -the command as standard input. If STRING is nil, no decoding is done.") +the command as standard input. If STRING is nil, no decoding is done." + :type '(repeat (cons (string :tag "suffix") + (choice :tag "command" + (const :tag "none" :value nil) + (string :tag "")))) + :group 'info) -(defvar Info-footnote-tag "Note" +(defcustom Info-footnote-tag "Note" "*Symbol that identifies a footnote or cross-reference. -All \"*Note\" references will be changed to use this word instead.") +All \"*Note\" references will be changed to use this word instead." + :type 'string + :group 'info) (defvar Info-current-file nil "Info file that Info is now looking at, or nil. @@ -508,6 +522,7 @@ Marker points nowhere if file has no tag table.") (defvar Info-index-alternatives nil "List of possible matches for last Info-index command.") + (defvar Info-index-first-alternative nil) (defcustom Info-annotations-path @@ -545,8 +560,10 @@ File: dir Node: Top This is the top of the INFO tree ") -(defvar Info-no-description-string "[No description available]" - "Description string for info files that have none") +(defcustom Info-no-description-string "[No description available]" + "*Description string for info files that have none" + :type 'string + :group 'info) ;;;###autoload (defun info (&optional file) @@ -610,13 +627,16 @@ further (recursive) error recovery. TRYFILE is ??" (Info-find-file-node nil nodename no-going-back tryfile line)) ;; Convert filename to lower case if not found as specified. ;; Expand it, look harder... - ((let (temp temp-downcase found - (fname (substitute-in-file-name filename))) + ((let ((fname (substitute-in-file-name filename)) + temp found) (let ((dirs (cond - ((string-match "^\\./" fname) ; If specified name starts with `./' - (list default-directory)) ; then just try current directory. + ;; If specified name starts with `./', then just try + ;; current directory. No point in searching for an absolute + ;; file name + ((string-match "^\\./" fname) + (list default-directory)) ((file-name-absolute-p fname) - '(nil)) ; No point in searching for an absolute file name + '(nil)) (Info-additional-search-directory-list (append Info-directory-list Info-additional-search-directory-list)) @@ -624,12 +644,7 @@ further (recursive) error recovery. TRYFILE is ??" ;; Search the directory list for file FNAME. (while (and dirs (not found)) (setq temp (expand-file-name fname (car dirs))) - (setq temp-downcase - (expand-file-name (downcase fname) (car dirs))) - (if (equal temp-downcase temp) (setq temp-downcase nil)) - ;; Try several variants of specified name. - ;; Try downcasing, appending a suffix, or both. - (setq found (Info-suffixed-file temp temp-downcase)) + (setq found (Info-suffixed-file temp)) (setq dirs (cdr dirs))) (if found (progn (setq filename (expand-file-name found)) @@ -742,10 +757,10 @@ further (recursive) error recovery. TRYFILE is ??" (set-buffer (marker-buffer Info-tag-table-marker)) (goto-char m) (setq foun (re-search-forward regexp nil t)) - (if foun + (if foun (setq guesspos (read (current-buffer)))) (setq found-mode major-mode)) - (if foun + (if foun ;; If this is an indirect file, ;; determine which file really holds this node ;; and read it in. @@ -820,7 +835,7 @@ further (recursive) error recovery. TRYFILE is ??" (defun Info-insert-dir () "Construct the Info directory node by merging the files named -\"dir\" or \"localdir\" from the directories in `Info-directory-list' +\"dir\" or \"localdir\" from the directories in `Info-directory-list'. The \"dir\" files will take precedence in cases where both exist. It sets the *info* buffer's `default-directory' to the first directory we actually get any text from." @@ -846,25 +861,26 @@ actually get any text from." (let ((truename (file-truename (expand-file-name (car dirs))))) (or (member truename dirs-done) (member (directory-file-name truename) dirs-done) - ;; Try several variants of specified name. - ;; Try upcasing, appending `.info', or both. - (let* (buf - file - (attrs - (or - (progn (setq file (expand-file-name "dir" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "DIR" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "dir.info" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "DIR.INFO" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "localdir" truename)) - (file-attributes file)) - (progn (setq file (expand-file-name "dir" truename)) - nil) - ))) + ;; Karl Berry recently added the ability all possibilities for + ;; extension as for normal info files. This code however is + ;; still unsatisfactory: if one day, we find a compressed dir + ;; file (which looks possible), we should be able to handle it + ;; (which means decompress and read it, update it, save and + ;; recompress it). --dv + (let ((trials '("dir" "DIR" + "dir.info" "DIR.INFO" + "dir.inf" "DIR.INF" + "localdir" "LOCALDIR" + "localdir.info" "LOCALDIR.INFO" + "localdir.inf" "LOCALDIR.INF")) + buf file attrs) + (catch 'found + (while (setq file (pop trials)) + (setq file (expand-file-name file truename)) + (and (setq attrs (file-attributes file)) + (throw 'found t)))) + (unless file + (setq file (expand-file-name "dir" truename))) (setq dirs-done (cons truename (cons (directory-file-name truename) @@ -1020,10 +1036,55 @@ actually get any text from." (setq default-directory Info-dir-contents-directory) (setq buffer-file-name (caar Info-dir-file-attributes))) +(defmacro Info-directory-files (dir-file &optional all full nosort files-only) + "Return a list of Info files living in the same directory as DIR-FILE. +This list actually contains the files living in this directory, except for +the dir file itself and the secondary info files (foo-1 foo-2 etc). + +If the optional argument ALL is non nil, the secondary info files are also +included in the list. + +Please refer to the function `directory-files' for the meaning of the other +optional arguments." + `(let* ((dir (file-name-directory ,dir-file)) + (all-files (remove ,dir-file (directory-files dir ',full nil ',nosort + ',files-only)))) + (setq all-files + (if ,full + (remove (concat dir ".") + (remove (concat dir "..") all-files)) + (remove "." + (remove ".." all-files)))) + (if ,all + all-files + (let ((suff-match + (concat "-[0-9]+\\(" + ;; Extract all known compression suffixes from + ;; Info-suffix-list. These suffixes can typically be + ;; found in entries of the form `.info.something'. + (let ((suff-list Info-suffix-list) + suff regexp) + (while (setq suff (pop suff-list)) + (and (string-match "^\\.info" (car suff)) + (setq regexp (concat regexp + (regexp-quote + (substring + (car suff) 5)) + (and suff-list "\\|"))))) + regexp) + "\\)?$")) + info-files file) + (while (setq file (pop all-files)) + (or (string-match suff-match file) + (push file info-files))) + (reverse info-files) + )) + )) + (defun Info-maybe-update-dir (file) "Rebuild dir or localdir according to `Info-auto-generate-directory'." (unless (or (not (file-exists-p (file-name-directory file))) - (null (directory-files (file-name-directory file) nil "\\.info"))) + (null (Info-directory-files file 'all))) (if (not (find-buffer-visiting file)) (if (not (file-exists-p file)) (if (or (eq Info-auto-generate-directory 'always) @@ -1042,8 +1103,7 @@ actually get any text from." dir or localdir are outdated when an info file in the same directory has been modified more recently." (let ((dir-mod-time (nth 5 (file-attributes file))) - f-mod-time - newer) + f-mod-time newer) (setq Info-dir-newer-info-files nil) (mapcar #'(lambda (f) @@ -1051,22 +1111,18 @@ directory has been modified more recently." (setq f-mod-time (nth 5 (file-attributes f))) (setq newer (or (> (car f-mod-time) (car dir-mod-time)) (and (= (car f-mod-time) (car dir-mod-time)) - (> (car (cdr f-mod-time)) (car (cdr dir-mod-time)))))) - (if (and (file-readable-p f) - newer) + (> (car (cdr f-mod-time)) + (car (cdr dir-mod-time)))))) + (if (and (file-readable-p f) newer) (setq Info-dir-newer-info-files (cons f Info-dir-newer-info-files))))) - (directory-files (file-name-directory file) - 'fullname - ".*\\.info\\(\\.gz\\|\\.bz2\\|\\.Z\\|-z\\|\\.zip\\)?$" - 'nosort - t)) + (Info-directory-files file nil 'fullname 'nosort t)) Info-dir-newer-info-files)) (defun Info-extract-dir-entry-from (file) "Extract the dir entry from the info FILE. The dir entry is delimited by the markers `START-INFO-DIR-ENTRY' -and `END-INFO-DIR-ENTRY'" +and `END-INFO-DIR-ENTRY'." (save-excursion (set-buffer (get-buffer-create " *Info-tmp*")) (when (file-readable-p file) @@ -1080,15 +1136,16 @@ and `END-INFO-DIR-ENTRY'" (goto-char (match-beginning 0)) (car (Info-parse-dir-entries beg (point))))))))) -;; Parse dir entries contained between BEG and END into a list of the form +;; Parse dir entries contained between START and END into a list of the form ;; (filename topic node (description-line-1 description-line-2 ...)) -(defun Info-parse-dir-entries (beg end) +(defun Info-parse-dir-entries (start end) (let (entry entries) (save-excursion (save-restriction - (narrow-to-region beg end) - (goto-char beg) - (while (re-search-forward "^\\* \\([^:]+\\):\\([ \t]*(\\([^)]*\\))\\w*\\.\\|:\\)" nil t) + (narrow-to-region start end) + (goto-char start) + (while (re-search-forward + "^\\* \\([^:]+\\):\\([ \t]*(\\([^)]*\\))\\w*\\.\\|:\\)" nil t) (setq entry (list (match-string 2) (match-string 1) (downcase (or (match-string 3) @@ -1135,36 +1192,31 @@ and `END-INFO-DIR-ENTRY'" (defun Info-build-dir-anew (directory) "Build info directory information for DIRECTORY. The generated directory listing may be saved to a `dir' according -to the value of `Info-save-auto-generated-dir'" +to the value of `Info-save-auto-generated-dir'." (save-excursion (let* ((dirfile (expand-file-name "dir" directory)) (to-temp (or (null Info-save-auto-generated-dir) (eq Info-save-auto-generated-dir 'never) (and (not (file-writable-p dirfile)) - (message "File not writable %s. Using temporary." dirfile)))) - (info-files - (directory-files directory - 'fullname - ".*\\.info\\(.gz\\|.Z\\|-z\\|.zip\\)?$" - nil - t))) + (message "File not writable %s. Using temporary." + dirfile)))) + (info-files (Info-directory-files dirfile nil 'fullname nil t))) (if to-temp (message "Creating temporary dir in %s..." directory) (message "Creating %s..." dirfile)) (set-buffer (find-file-noselect dirfile t)) (setq buffer-read-only nil) (erase-buffer) - (insert Info-dir-prologue - "Info files in " directory ":\n\n") + (insert Info-dir-prologue "Info files in " directory ":\n\n") (Info-dump-dir-entries (mapcar #'(lambda (f) (or (Info-extract-dir-entry-from f) (list 'dummy - (progn - (string-match "\\(.*\\)\\.info\\(.gz\\|.Z\\|-z\\|.zip\\)?$" - (file-name-nondirectory f)) - (capitalize (match-string 1 (file-name-nondirectory f)))) + (progn (string-match "\\([^.]*\\)\\(\\..*\\)?$" + (file-name-nondirectory f)) + (capitalize + (match-string 1 (file-name-nondirectory f)))) ":" (list Info-no-description-string)))) info-files)) @@ -1182,7 +1234,7 @@ Description of info files are merged from the info files in the directory and the contents of FILE with the description in info files taking precedence over descriptions in FILE. The generated directory listing may be saved to a `dir' according to -the value of `Info-save-auto-generated-dir' " +the value of `Info-save-auto-generated-dir'." (save-excursion (save-restriction (let (dir-section-contents dir-full-contents @@ -1198,7 +1250,8 @@ the value of `Info-save-auto-generated-dir' " (message "File not writable %s. Using temporary." file)) (and (eq Info-save-auto-generated-dir 'conservative) (or (and (not (file-writable-p file)) - (message "File not writable %s. Using temporary." file)) + (message + "File not writable %s. Using temporary." file)) (not (y-or-n-p (message "%s is outdated. Overwrite ? " file)))))))) @@ -1216,13 +1269,14 @@ the value of `Info-save-auto-generated-dir' " (match-beginning 0)))) (throw 'done nil)) (setq dir-full-contents (Info-parse-dir-entries mark (point-max))) - (setq next-section (or (and (re-search-forward "^[^* \t].*:[ \t]*$" nil t) + (setq next-section (or (and (re-search-forward "^[^* \t].*:[ \t]*$" + nil t) (match-beginning 0)) (point-max))) (while next-section (narrow-to-region mark next-section) - (setq dir-section-contents (nreverse (Info-parse-dir-entries (point-min) - (point-max)))) + (setq dir-section-contents (nreverse (Info-parse-dir-entries + (point-min) (point-max)))) (mapcar #'(lambda (file) (setq dir-entry (assoc (downcase @@ -1232,8 +1286,8 @@ the value of `Info-save-auto-generated-dir' " file-dir-entry (Info-extract-dir-entry-from file)) (if dir-entry (if file-dir-entry - ;; A dir entry in the info file takes precedence over an - ;; existing entry in the dir file + ;; A dir entry in the info file takes precedence over + ;; an existing entry in the dir file (setcdr dir-entry (cdr file-dir-entry))) (unless (or not-first-section (assoc (downcase @@ -1241,12 +1295,13 @@ the value of `Info-save-auto-generated-dir' " (file-name-nondirectory file))) dir-full-contents)) (if file-dir-entry - (setq dir-section-contents (cons file-dir-entry - dir-section-contents)) + (setq dir-section-contents + (cons file-dir-entry dir-section-contents)) (setq dir-section-contents (cons (list 'dummy (capitalize (file-name-sans-extension - (file-name-nondirectory file))) + (file-name-nondirectory + file))) ":" (list Info-no-description-string)) dir-section-contents)))))) @@ -1259,7 +1314,8 @@ the value of `Info-save-auto-generated-dir' " (or (setq mark (and (re-search-forward "^\\* " nil t) (match-beginning 0))) (throw 'done nil)) - (setq next-section (or (and (re-search-forward "^[^* \t].*:[ \t]*$" nil t) + (setq next-section (or (and (re-search-forward + "^[^* \t].*:[ \t]*$" nil t) (match-beginning 0)) (point-max)))) (setq not-first-section t))) @@ -1272,11 +1328,12 @@ the value of `Info-save-auto-generated-dir' " ;;;###autoload (defun Info-batch-rebuild-dir () - "(Re)build info `dir' files in the directories remaining on the command line. -Use this from the command line, with `-batch'; -it won't work in an interactive Emacs. -Each file is processed even if an error occurred previously. -For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"" + "(Re)build `dir' files in the directories remaining on the command line. +Use this from the command line, with `-batch', it won't work in an +interactive XEmacs. + +Each file is processed even if an error occurred previously. For example, +invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"." ;; command-line-args-left is what is left of the command line (from ;; startup.el) (defvar command-line-args-left) ; Avoid 'free variable' warning @@ -1289,7 +1346,8 @@ For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"" (message "Warning: Skipped %s. Not a directory." (car command-line-args-left)) (setq dir (expand-file-name "dir" (car command-line-args-left))) - (setq localdir (expand-file-name "localdir" (car command-line-args-left))) + (setq localdir (expand-file-name "localdir" + (car command-line-args-left))) (cond ((file-exists-p dir) (Info-rebuild-dir dir)) @@ -1331,10 +1389,10 @@ For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"" (catch 'foo (while (not (looking-at "\^_")) (if (not (eolp)) - (let ((beg (point)) + (let ((start (point)) thisfilepos thisfilename) (search-forward ": ") - (setq thisfilename (buffer-substring beg (- (point) 2))) + (setq thisfilename (buffer-substring start (- (point) 2))) (setq thisfilepos (read (current-buffer))) ;; read in version 19 stops at the end of number. ;; Advance to the next line. @@ -1353,7 +1411,8 @@ For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"" (Info-insert-file-contents (Info-suffixed-file (expand-file-name lastfilename (file-name-directory - Info-current-file))) + Info-current-file)) + 'exact) t) (set-buffer-modified-p nil) (setq Info-current-subfile lastfilename))) @@ -1361,36 +1420,90 @@ For example, invoke \"xemacs -batch -f Info-batch-rebuild-dir /usr/local/info\"" (search-forward "\n\^_") (+ (- nodepos lastfilepos) (point)))) -(defun Info-suffixed-file (name &optional name2) - "Look for NAME with each of the `Info-suffix-list' extensions in -turn. Optional NAME2 is the name of a fallback info file to check -for; usually a downcased version of NAME." - (let ((suff Info-suffix-list) - (found nil) - file file2) - (while (and suff (not found)) - (setq file (concat name (caar suff)) - file2 (and name2 (concat name2 (caar suff)))) - (cond - ((file-regular-p file) - (setq found file)) - ((and file2 (file-regular-p file2)) - (setq found file2)) - (t - (setq suff (cdr suff))))) - (or found - (and name (when (file-regular-p name) - name)) - (and name2 (when (file-regular-p name2) - name2))))) +(defun Info-all-case-regexp (str) + (let ((regexp "") + (len (length str)) + (i 0) + c) + (while (< i len) + (setq c (aref str i)) + (cond ((or (and (>= c ?A) (<= c ?Z)) + (and (>= c ?a) (<= c ?z))) + (setq regexp (concat regexp + "[" + (char-to-string (downcase c)) + "\\|" + (char-to-string (upcase c)) + "]"))) + (t + (setq regexp (concat regexp (char-to-string c))))) + (setq i (1+ i))) + regexp)) + +(defun Info-suffixed-file (name &optional exact) + "Look for an info file named NAME. This function tries to be smart in +finding the file corresponding to NAME: if it doesn't exist, several +variants are looked for, notably by appending suffixes from +`Info-suffix-list' and by trying to change the characters case in NAME. + +The optional argument EXACT prevents this function from trying different case +versions of NAME. Only the suffixes are tried." + (catch 'found + ;; First, try NAME alone: + (and (file-regular-p name) (throw 'found name)) + ;; Then, try different variants + (let ((suff-match (concat "\\(" + (let ((suff-list Info-suffix-list) + suff regexp) + (while (setq suff (pop suff-list)) + (setq regexp + (concat regexp + (regexp-quote (car suff)) + (and suff-list "\\|")))) + regexp) + "\\)?$")) + (dir (file-name-directory name)) + file files) + (setq name (file-name-nondirectory name)) + (setq files + (condition-case data ;; protect against invalid directory + ;; First, try NAME[.] + (append + (directory-files dir 'fullname + (concat "^" (regexp-quote name) suff-match) + nil t) + (if exact + nil + ;; Then, try to match the name independantly of the + ;; characters case. + (directory-files dir 'fullname + (Info-all-case-regexp + (concat "^" + (regexp-quote name) + suff-match)) + nil t))) + (t + (display-warning 'info + (format "directory `%s' error: %s" dir data)) + nil))) + (while (setq file (pop files)) + (and (file-regular-p file) + (throw 'found file))) + ))) (defun Info-insert-file-contents (file &optional visit) (setq file (expand-file-name file default-directory)) - (let ((suff Info-suffix-list)) - (while (and suff (or (<= (length file) (length (car (car suff)))) - (not (equal (substring file - (- (length (car (car suff))))) - (car (car suff)))))) + (let ((suff Info-suffix-list) + len) + (while (and suff + (setq len (length (car (car suff)))) + (or (<= (length file) len) + (not (or + (equal (substring file (- len)) + (car (car suff))) + (equal (substring file (- len)) + (upcase (car (car suff))))) + ))) (setq suff (cdr suff))) (if (stringp (cdr (car suff))) (let ((command (if (string-match "%s" (cdr (car suff))) @@ -1457,9 +1570,10 @@ for; usually a downcased version of NAME." (concat "(" (if Info-current-file - (let ((name (file-name-nondirectory Info-current-file))) - (if (string-match "\\.info$" name) - (substring name 0 -5) + (let ((name (file-name-nondirectory + Info-current-file))) + (if (string-match "^\\([^.]*\\)\\..*$" name) + (match-string 1 name) name)) "") ")" @@ -1538,11 +1652,13 @@ annotation for any node of any file. (See `a' and `x' commands.)" (cond ((eq code nil) (if no-completion string - (try-completion string Info-read-node-completion-table predicate))) + (try-completion string Info-read-node-completion-table + predicate))) ((eq code t) (if no-completion nil - (all-completions string Info-read-node-completion-table predicate))) + (all-completions string Info-read-node-completion-table + predicate))) ((eq code 'lambda) (if no-completion t @@ -1595,10 +1711,10 @@ annotation for any node of any file. (See `a' and `x' commands.)" (goto-char (point-min)) (while (search-forward "\n\^_" nil t) (forward-line 1) - (let ((beg (point))) + (let ((start (point))) (forward-line 1) (if (re-search-backward "Node: *\\([^,\n]*\\) *[,\n\t]" - beg t) + start t) (setq compl (cons (list (buffer-substring (match-beginning 1) (match-end 1))) @@ -1634,7 +1750,8 @@ annotation for any node of any file. (See `a' and `x' commands.)" (condition-case nil (progn (re-search-forward regexp) (setq found (point))) (search-failed nil))))) - (if (not found) ;can only happen in subfile case -- else would have erred + (if (not found) + ;; can only happen in subfile case -- else would have erred (unwind-protect (let ((list ())) (save-excursion @@ -1652,8 +1769,9 @@ annotation for any node of any file. (See `a' and `x' commands.)" (re-search-forward "\\(^.*\\): [0-9]+$") (goto-char (+ (match-end 1) 2)) (setq list (cons (cons (read (current-buffer)) - (buffer-substring (match-beginning 1) - (match-end 1))) + (buffer-substring + (match-beginning 1) + (match-end 1))) list)) (goto-char (1+ (match-end 0)))) (setq list (nreverse list) @@ -1879,13 +1997,13 @@ NAME may be an abbreviation of the reference name." (defun Info-extract-menu-node-name (&optional errmessage multi-line) (skip-chars-forward " \t\n") - (let ((beg (point)) + (let ((start (point)) str i) (skip-chars-forward "^:") (forward-char 1) (setq str (if (looking-at ":") - (buffer-substring beg (1- (point))) + (buffer-substring start (1- (point))) (skip-chars-forward " \t\n") ;; Kludge. ;; Allow dots in node name not followed by whitespace. @@ -2378,6 +2496,7 @@ This command is designed to be used whether you are already in Info or not." (defvar Info-annotate-map nil "Local keymap used within `a' command of Info.") + (if Info-annotate-map nil ;; (setq Info-annotate-map (nconc (make-sparse-keymap) text-mode-map)) @@ -2693,6 +2812,7 @@ At end of the node's text, moves to the next node." (defvar Info-mode-map nil "Keymap containing Info commands.") + (if Info-mode-map nil (setq Info-mode-map (make-sparse-keymap)) @@ -2855,6 +2975,7 @@ e Edit the contents of the current node." (defvar Info-edit-map nil "Local keymap used within `e' command of Info.") + (if Info-edit-map nil ;; XEmacs: remove FSF stuff @@ -2994,19 +3115,22 @@ The locations are of the format used in Info-history, i.e. (while (looking-at "[ \t]*[^:, \t\n]+:[ \t]+\\([^:,\t\n]+\\),?\n?") (goto-char (match-end 0)) - (Info-highlight-region (match-beginning 1) (match-end 1) 'info-xref)))) + (Info-highlight-region (match-beginning 1) (match-end 1) + 'info-xref)))) ;; Now get the xrefs in the body (goto-char (point-min)) (while (re-search-forward xref-regexp nil t) (if (= (char-after (1- (match-beginning 0))) ?\") ; hack nil - (Info-highlight-region (match-beginning 1) (match-end 1) 'info-xref))) + (Info-highlight-region (match-beginning 1) (match-end 1) + 'info-xref))) ;; then highlight the nodes in the menu. (goto-char (point-min)) (if (and (search-forward "\n* menu:" nil t)) (while (re-search-forward "^\\* \\([^:\t\n]*\\):?:[ \t\n]" nil t) - (Info-highlight-region (match-beginning 1) (match-end 1) 'info-node))) + (Info-highlight-region (match-beginning 1) (match-end 1) + 'info-node))) (set-buffer-modified-p nil)))) (defun Info-construct-menu (&optional event) diff --git a/lisp/isearch-mode.el b/lisp/isearch-mode.el index 492bacd..3cb2440 100644 --- a/lisp/isearch-mode.el +++ b/lisp/isearch-mode.el @@ -180,8 +180,8 @@ an overlay having an `invisible' property and that overlay has a property This variable makes a difference when `search-invisible' is set to `open'. It means that after search makes some invisible text visible to show the match, it makes the text invisible again when the match moves. -Ordinarily the text becomes invisible again at the end of the search." - :type 'boolean +Ordinarily the text becomes invisible again at the end of the search." + :type 'boolean :group 'isearch) (defvar isearch-mode-hook nil @@ -674,7 +674,7 @@ is treated as a regexp. See \\[isearch-forward] for more info." (defun isearch-update-ring (string &optional regexp) "Add STRING to the beginning of the search ring. REGEXP says which ring to use." - (if regexp + (if regexp (if (or (null regexp-search-ring) (not (string= string (car regexp-search-ring)))) (progn @@ -1722,18 +1722,18 @@ If there is no completion possible, say so and continue searching." (put extent 'invisible nil) (put extent 'intangible nil)) -(defun isearch-range-invisible (beg end) - "Return t if all the text from BEG to END is invisible. +(defun isearch-range-invisible (start end) + "Return t if all the text from START to END is invisible. Before that, if search-invisible is `open', unhide the extents with an `isearch-open-invisible' property." ;; isearch-search uses this to skip the extents that are invisible, ;; but don't have `isearch-open-invisible' set. It is unclear - ;; what's supposed to happen if only a part of [BEG, END) overlaps + ;; what's supposed to happen if only a part of [START, END) overlaps ;; the extent. (let (to-be-unhidden) (if (map-extents (lambda (extent ignored) - (if (and (<= (extent-start-position extent) beg) + (if (and (<= (extent-start-position extent) start) (>= (extent-end-position extent) end)) ;; All of the region is covered by the extent. (if (and (eq search-invisible 'open) @@ -1747,7 +1747,7 @@ Before that, if search-invisible is `open', unhide the extents with an t) ;; Else, keep looking. nil)) - nil beg end nil 'all-extents-closed 'invisible) + nil start end nil 'all-extents-closed 'invisible) ;; The whole match must be skipped. Signal it by returning t ;; to the caller. t @@ -1766,9 +1766,9 @@ Before that, if search-invisible is `open', unhide the extents with an (remprop extent 'isearch-intangible)) ;; FSF calls this function `isearch-clean-overlays'. -(defun isearch-restore-invisible-extents (beg end) +(defun isearch-restore-invisible-extents (start end) (cond - ((null beg) + ((null start) ;; Delete all -- this is called at the end of isearch. (mapc #'isearch-restore-extent isearch-unhidden-extents) (setq isearch-unhidden-extents nil)) @@ -1777,7 +1777,7 @@ Before that, if search-invisible is `open', unhide the extents with an ;; restored to their hidden state. (setq isearch-unhidden-extents (delete-if (lambda (extent) - (unless (extent-in-region-p extent beg end + (unless (extent-in-region-p extent start end 'all-extents-closed) (isearch-restore-extent extent) t)) diff --git a/lisp/iso8859-1.el b/lisp/iso8859-1.el index dbfe12f..01a15eb 100644 --- a/lisp/iso8859-1.el +++ b/lisp/iso8859-1.el @@ -161,9 +161,9 @@ (setq pairs (cdr pairs))) (cons 'setq (cons 'iso8859/1-case-table - (list (list 'purecopy - (list 'quote - (list downcase nil nil nil))))))))) + (list + (list 'quote + (list downcase nil nil nil)))))))) (?\300 ?\340) ; Agrave (?\301 ?\341) ; Aacute diff --git a/lisp/itimer.el b/lisp/itimer.el index f4bdbcf..5199917 100644 --- a/lisp/itimer.el +++ b/lisp/itimer.el @@ -120,7 +120,7 @@ many seconds.") ;; signal errors appropriately if the arguments are not valid. (defmacro check-itimer (var) - "If VAR is not bound to an itimer, signal wrong-type-argument. + "If VAR is not bound to an itimer, signal `wrong-type-argument'. This is a macro." (list 'setq var (list 'if (list 'itimerp var) var @@ -139,7 +139,7 @@ wrong-type-argument. This is a macro." (list 'list ''string-or-itimer-p var)))))) (defmacro check-nonnegative-number (var) - "If VAR is not bound to a number, signal wrong-type-argument. + "If VAR is not bound to a number, signal `wrong-type-argument'. If VAR is not bound to a positive number, signal args-out-of-range. This is a macro." (list 'setq var @@ -151,7 +151,7 @@ This is a macro." var)))) (defmacro check-string (var) - "If VAR is not bound to a string, signal wrong-type-argument. + "If VAR is not bound to a string, signal `wrong-type-argument'. This is a macro." (list 'setq var (list 'if (list 'stringp var) var @@ -160,16 +160,16 @@ This is a macro." ;; Functions to access and modify itimer attributes. -(defun itimerp (obj) - "Return non-nil if OBJ is an itimer." - (and (consp obj) (eq (length obj) 8))) +(defun itimerp (object) + "Return non-nil if OBJECT is an itimer." + (and (consp object) (eq (length object) 8))) -(defun itimer-live-p (obj) - "Return non-nil if OBJ is an itimer and is active. +(defun itimer-live-p (object) + "Return non-nil if OBJECT is an itimer and is active. ``Active'' means Emacs will run it when it expires. `activate-timer' must be called on an itimer to make it active. Itimers started with `start-itimer' are automatically active." - (and (itimerp obj) (memq obj itimer-list))) + (and (itimerp object) (memq object itimer-list))) (defun itimer-name (itimer) "Return the name of ITIMER." @@ -329,7 +329,7 @@ VALUE is the number of seconds until this itimer expires. must be an integer. Optional fourth arg RESTART non-nil means that this itimer should be restarted automatically after its function is called. Normally an itimer - is deleted at expiration after its function has returned. + is deleted at expiration after its function has returned. If non-nil RESTART should be a number indicating the value at which the itimer should be set at restart time. Optional fifth arg IS-IDLE specifies if this is an idle timer. diff --git a/lisp/keymap.el b/lisp/keymap.el index 9f3f69d..bfd8c87 100644 --- a/lisp/keymap.el +++ b/lisp/keymap.el @@ -70,8 +70,8 @@ but optional second arg NODIGITS non-nil treats them like other chars." In other words, OLDDEF is replaced with NEWDEF wherever it appears. Prefix keymaps are checked recursively. If optional fourth argument OLDMAP is specified, we redefine in KEYMAP as NEWDEF those chars which are defined -as OLDDEF in OLDMAP, unless that keybinding is already present in keymap. -If optional fifth argument PREFIX is defined, then only those occurrences of +as OLDDEF in OLDMAP, unless that keybinding is already present in KEYMAP. +If optional fifth argument PREFIX is non-nil, then only those occurrences of OLDDEF found in keymaps accessible through the keymap bound to PREFIX in KEYMAP are redefined. See also `accessible-keymaps'." (let ((maps (accessible-keymaps (or oldmap keymap) prefix)) @@ -103,8 +103,6 @@ KEYMAP are redefined. See also `accessible-keymaps'." ))) -;; From Bill Dubuque - ;; This used to wrap forms into an interactive lambda. It is unclear ;; to me why this is needed in this function. Anyway, ;; `key-or-menu-binding' doesn't do it, so this function no longer @@ -119,7 +117,6 @@ KEYMAP are redefined. See also `accessible-keymaps'." (setq defn (key-binding defn))) ;; a keyboard macro (insert (format "%s" defn))))) -;; From Bill Dubuque (defun read-command-or-command-sexp (prompt) "Read a command symbol or command sexp. A command sexp is wrapped in an interactive lambda if needed. @@ -136,7 +133,7 @@ Prompts with PROMPT." ,result) result))) -(defun local-key-binding (keys) +(defun local-key-binding (keys &optional accept-defaults) "Return the binding for command KEYS in current local keymap only. KEYS is a string, a vector of events, or a vector of key-description lists as described in the documentation for the `define-key' function. @@ -144,17 +141,16 @@ The binding is probably a symbol with a function definition; see the documentation for `lookup-key' for more information." (let ((map (current-local-map))) (if map - (lookup-key map keys) + (lookup-key map keys accept-defaults) nil))) -(defun global-key-binding (keys) +(defun global-key-binding (keys &optional accept-defaults) "Return the binding for command KEYS in current global keymap only. KEYS is a string or vector of events, a sequence of keystrokes. The binding is probably a symbol with a function definition; see the documentation for `lookup-key' for more information." - (lookup-key (current-global-map) keys)) + (lookup-key (current-global-map) keys accept-defaults)) -;; from Bill Dubuque (defun global-set-key (key command) "Give KEY a global binding as COMMAND. COMMAND is a symbol naming an interactively-callable function. @@ -172,7 +168,6 @@ that local binding will continue to shadow any global binding." (define-key (current-global-map) key command) nil) -;; from Bill Dubuque (defun local-set-key (key command) "Give KEY a local binding as COMMAND. COMMAND is a symbol naming an interactively-callable function. diff --git a/lisp/ldap.el b/lisp/ldap.el index 4f5e9a9..1c14c13 100644 --- a/lisp/ldap.el +++ b/lisp/ldap.el @@ -5,7 +5,7 @@ ;; Author: Oscar Figueiredo ;; Maintainer: Oscar Figueiredo ;; Created: Jan 1998 -;; Version: $Revision: 1.7.2.8 $ +;; Version: $Revision: 1.7.2.9 $ ;; Keywords: help comm ;; This file is part of XEmacs @@ -21,13 +21,13 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to +;; along with XEmacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; This file provides mid-level and user-level functions to access directory -;; servers using the LDAP protocol (RFC 1777). +;; servers using the LDAP protocol (RFC 1777). ;;; Installation: ;; LDAP support must have been built into XEmacs. @@ -45,7 +45,7 @@ (defcustom ldap-default-host nil "*Default LDAP server hostname. -A TCP port number can be appended to that name using a colon as +A TCP port number can be appended to that name using a colon as a separator." :type '(choice (string :tag "Host name") (const :tag "Use library default" nil)) @@ -73,13 +73,13 @@ Acme organization in the United States." The format of each list element is: \(HOST PROP1 VAL1 PROP2 VAL2 ...) HOST is the hostname of an LDAP server (with an optional TCP port number -appended to it using a colon as a separator). +appended to it using a colon as a separator). PROPn and VALn are property/value pairs describing parameters for the server. Valid properties include: - `binddn' is the distinguished name of the user to bind as + `binddn' is the distinguished name of the user to bind as (in RFC 1779 syntax). `passwd' is the password to use for simple authentication. - `auth' is the authentication method to use. + `auth' is the authentication method to use. Possible values are: `simple', `krbv41' and `krbv42'. `base' is the base for the search as described in RFC 1779. `scope' is one of the three symbols `subtree', `base' or `onelevel'. @@ -95,7 +95,7 @@ Valid properties include: (checklist :inline t :greedy t (list - :tag "Search Base" + :tag "Search Base" :inline t (const :tag "Search Base" base) string) @@ -119,7 +119,7 @@ Valid properties include: (const :menu-tag "Kerberos 4.1" :tag "Kerberos 4.1" krbv41) (const :menu-tag "Kerberos 4.2" :tag "Kerberos 4.2" krbv42))) (list - :tag "Search Scope" + :tag "Search Scope" :inline t (const :tag "Search Scope" scope) (choice @@ -166,139 +166,139 @@ Valid properties include: (defcustom ldap-coding-system nil "*Coding system of LDAP string values. -LDAP v3 specifies the coding system of strings to be UTF-8. +LDAP v3 specifies the coding system of strings to be UTF-8. Mule support is needed for this." :type 'symbol :group 'ldap) (defvar ldap-attribute-syntax-encoders - [nil ; 1 ACI Item N - nil ; 2 Access Point Y - nil ; 3 Attribute Type Description Y - nil ; 4 Audio N - nil ; 5 Binary N - nil ; 6 Bit String Y - ldap-encode-boolean ; 7 Boolean Y - nil ; 8 Certificate N - nil ; 9 Certificate List N - nil ; 10 Certificate Pair N - ldap-encode-country-string ; 11 Country String Y - ldap-encode-string ; 12 DN Y - nil ; 13 Data Quality Syntax Y - nil ; 14 Delivery Method Y - ldap-encode-string ; 15 Directory String Y - nil ; 16 DIT Content Rule Description Y - nil ; 17 DIT Structure Rule Description Y - nil ; 18 DL Submit Permission Y - nil ; 19 DSA Quality Syntax Y - nil ; 20 DSE Type Y - nil ; 21 Enhanced Guide Y - nil ; 22 Facsimile Telephone Number Y - nil ; 23 Fax N - nil ; 24 Generalized Time Y - nil ; 25 Guide Y - nil ; 26 IA5 String Y - number-to-string ; 27 INTEGER Y - nil ; 28 JPEG N - nil ; 29 Master And Shadow Access Points Y - nil ; 30 Matching Rule Description Y - nil ; 31 Matching Rule Use Description Y - nil ; 32 Mail Preference Y - nil ; 33 MHS OR Address Y - nil ; 34 Name And Optional UID Y - nil ; 35 Name Form Description Y - nil ; 36 Numeric String Y - nil ; 37 Object Class Description Y - nil ; 38 OID Y - nil ; 39 Other Mailbox Y - nil ; 40 Octet String Y - ldap-encode-address ; 41 Postal Address Y - nil ; 42 Protocol Information Y - nil ; 43 Presentation Address Y - ldap-encode-string ; 44 Printable String Y - nil ; 45 Subtree Specification Y - nil ; 46 Supplier Information Y - nil ; 47 Supplier Or Consumer Y - nil ; 48 Supplier And Consumer Y - nil ; 49 Supported Algorithm N - nil ; 50 Telephone Number Y - nil ; 51 Teletex Terminal Identifier Y - nil ; 52 Telex Number Y - nil ; 53 UTC Time Y - nil ; 54 LDAP Syntax Description Y - nil ; 55 Modify Rights Y - nil ; 56 LDAP Schema Definition Y - nil ; 57 LDAP Schema Description Y - nil ; 58 Substring Assertion Y - ] + [nil ; 1 ACI Item N + nil ; 2 Access Point Y + nil ; 3 Attribute Type Description Y + nil ; 4 Audio N + nil ; 5 Binary N + nil ; 6 Bit String Y + ldap-encode-boolean ; 7 Boolean Y + nil ; 8 Certificate N + nil ; 9 Certificate List N + nil ; 10 Certificate Pair N + ldap-encode-country-string ; 11 Country String Y + ldap-encode-string ; 12 DN Y + nil ; 13 Data Quality Syntax Y + nil ; 14 Delivery Method Y + ldap-encode-string ; 15 Directory String Y + nil ; 16 DIT Content Rule Description Y + nil ; 17 DIT Structure Rule Description Y + nil ; 18 DL Submit Permission Y + nil ; 19 DSA Quality Syntax Y + nil ; 20 DSE Type Y + nil ; 21 Enhanced Guide Y + nil ; 22 Facsimile Telephone Number Y + nil ; 23 Fax N + nil ; 24 Generalized Time Y + nil ; 25 Guide Y + nil ; 26 IA5 String Y + number-to-string ; 27 INTEGER Y + nil ; 28 JPEG N + nil ; 29 Master And Shadow Access Points Y + nil ; 30 Matching Rule Description Y + nil ; 31 Matching Rule Use Description Y + nil ; 32 Mail Preference Y + nil ; 33 MHS OR Address Y + nil ; 34 Name And Optional UID Y + nil ; 35 Name Form Description Y + nil ; 36 Numeric String Y + nil ; 37 Object Class Description Y + nil ; 38 OID Y + nil ; 39 Other Mailbox Y + nil ; 40 Octet String Y + ldap-encode-address ; 41 Postal Address Y + nil ; 42 Protocol Information Y + nil ; 43 Presentation Address Y + ldap-encode-string ; 44 Printable String Y + nil ; 45 Subtree Specification Y + nil ; 46 Supplier Information Y + nil ; 47 Supplier Or Consumer Y + nil ; 48 Supplier And Consumer Y + nil ; 49 Supported Algorithm N + nil ; 50 Telephone Number Y + nil ; 51 Teletex Terminal Identifier Y + nil ; 52 Telex Number Y + nil ; 53 UTC Time Y + nil ; 54 LDAP Syntax Description Y + nil ; 55 Modify Rights Y + nil ; 56 LDAP Schema Definition Y + nil ; 57 LDAP Schema Description Y + nil ; 58 Substring Assertion Y + ] "A vector of functions used to encode LDAP attribute values. The sequence of functions corresponds to the sequence of LDAP attribute syntax -object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in +object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2") (defvar ldap-attribute-syntax-decoders - [nil ; 1 ACI Item N - nil ; 2 Access Point Y - nil ; 3 Attribute Type Description Y - nil ; 4 Audio N - nil ; 5 Binary N - nil ; 6 Bit String Y - ldap-decode-boolean ; 7 Boolean Y - nil ; 8 Certificate N - nil ; 9 Certificate List N - nil ; 10 Certificate Pair N - ldap-decode-string ; 11 Country String Y - ldap-decode-string ; 12 DN Y - nil ; 13 Data Quality Syntax Y - nil ; 14 Delivery Method Y - ldap-decode-string ; 15 Directory String Y - nil ; 16 DIT Content Rule Description Y - nil ; 17 DIT Structure Rule Description Y - nil ; 18 DL Submit Permission Y - nil ; 19 DSA Quality Syntax Y - nil ; 20 DSE Type Y - nil ; 21 Enhanced Guide Y - nil ; 22 Facsimile Telephone Number Y - nil ; 23 Fax N - nil ; 24 Generalized Time Y - nil ; 25 Guide Y - nil ; 26 IA5 String Y - string-to-number ; 27 INTEGER Y - nil ; 28 JPEG N - nil ; 29 Master And Shadow Access Points Y - nil ; 30 Matching Rule Description Y - nil ; 31 Matching Rule Use Description Y - nil ; 32 Mail Preference Y - nil ; 33 MHS OR Address Y - nil ; 34 Name And Optional UID Y - nil ; 35 Name Form Description Y - nil ; 36 Numeric String Y - nil ; 37 Object Class Description Y - nil ; 38 OID Y - nil ; 39 Other Mailbox Y - nil ; 40 Octet String Y - ldap-decode-address ; 41 Postal Address Y - nil ; 42 Protocol Information Y - nil ; 43 Presentation Address Y - ldap-decode-string ; 44 Printable String Y - nil ; 45 Subtree Specification Y - nil ; 46 Supplier Information Y - nil ; 47 Supplier Or Consumer Y - nil ; 48 Supplier And Consumer Y - nil ; 49 Supported Algorithm N - nil ; 50 Telephone Number Y - nil ; 51 Teletex Terminal Identifier Y - nil ; 52 Telex Number Y - nil ; 53 UTC Time Y - nil ; 54 LDAP Syntax Description Y - nil ; 55 Modify Rights Y - nil ; 56 LDAP Schema Definition Y - nil ; 57 LDAP Schema Description Y - nil ; 58 Substring Assertion Y - ] + [nil ; 1 ACI Item N + nil ; 2 Access Point Y + nil ; 3 Attribute Type Description Y + nil ; 4 Audio N + nil ; 5 Binary N + nil ; 6 Bit String Y + ldap-decode-boolean ; 7 Boolean Y + nil ; 8 Certificate N + nil ; 9 Certificate List N + nil ; 10 Certificate Pair N + ldap-decode-string ; 11 Country String Y + ldap-decode-string ; 12 DN Y + nil ; 13 Data Quality Syntax Y + nil ; 14 Delivery Method Y + ldap-decode-string ; 15 Directory String Y + nil ; 16 DIT Content Rule Description Y + nil ; 17 DIT Structure Rule Description Y + nil ; 18 DL Submit Permission Y + nil ; 19 DSA Quality Syntax Y + nil ; 20 DSE Type Y + nil ; 21 Enhanced Guide Y + nil ; 22 Facsimile Telephone Number Y + nil ; 23 Fax N + nil ; 24 Generalized Time Y + nil ; 25 Guide Y + nil ; 26 IA5 String Y + string-to-number ; 27 INTEGER Y + nil ; 28 JPEG N + nil ; 29 Master And Shadow Access Points Y + nil ; 30 Matching Rule Description Y + nil ; 31 Matching Rule Use Description Y + nil ; 32 Mail Preference Y + nil ; 33 MHS OR Address Y + nil ; 34 Name And Optional UID Y + nil ; 35 Name Form Description Y + nil ; 36 Numeric String Y + nil ; 37 Object Class Description Y + nil ; 38 OID Y + nil ; 39 Other Mailbox Y + nil ; 40 Octet String Y + ldap-decode-address ; 41 Postal Address Y + nil ; 42 Protocol Information Y + nil ; 43 Presentation Address Y + ldap-decode-string ; 44 Printable String Y + nil ; 45 Subtree Specification Y + nil ; 46 Supplier Information Y + nil ; 47 Supplier Or Consumer Y + nil ; 48 Supplier And Consumer Y + nil ; 49 Supported Algorithm N + nil ; 50 Telephone Number Y + nil ; 51 Teletex Terminal Identifier Y + nil ; 52 Telex Number Y + nil ; 53 UTC Time Y + nil ; 54 LDAP Syntax Description Y + nil ; 55 Modify Rights Y + nil ; 56 LDAP Schema Definition Y + nil ; 57 LDAP Schema Description Y + nil ; 58 Substring Assertion Y + ] "A vector of functions used to decode LDAP attribute values. The sequence of functions corresponds to the sequence of LDAP attribute syntax -object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in +object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2") @@ -395,7 +395,7 @@ This table is built from RFC2252 Section 5 and RFC2256 Section 5") nil) (t (error "Wrong LDAP boolean string: %s" str)))) - + (defun ldap-encode-country-string (str) ;; We should do something useful here... (if (not (= 2 (length str))) @@ -421,16 +421,16 @@ This table is built from RFC2252 Section 5 and RFC2256 Section 5") ;; LDAP protocol functions - + (defun ldap-get-host-parameter (host parameter) "Get the value of PARAMETER for HOST in `ldap-host-parameters-alist'." (plist-get (cdr (assoc host ldap-host-parameters-alist)) parameter)) - + (defun ldap-decode-attribute (attr) "Decode the attribute/value pair ATTR according to LDAP rules. -The attribute name is looked up in `ldap-attribute-syntaxes-alist' -and the corresponding decoder is then retrieved from +The attribute name is looked up in `ldap-attribute-syntaxes-alist' +and the corresponding decoder is then retrieved from `ldap-attribute-syntax-decoders' and applied on the value(s)." (let* ((name (car attr)) (values (cdr attr)) @@ -458,13 +458,13 @@ and the corresponding decoder is then retrieved from decoded))) (defun ldap-search (arg1 &rest args) - "Perform an LDAP search." + "Perform an LDAP search." (apply (if (ldapp arg1) 'ldap-search-basic 'ldap-search-entries) arg1 args)) -(make-obsolete 'ldap-search - "Use `ldap-search-entries' instead or +(make-obsolete 'ldap-search + "Use `ldap-search-entries' instead or `ldap-search-basic' for the low-level search API.") (defun ldap-search-entries (filter &optional host attributes attrsonly withdn) @@ -477,7 +477,7 @@ If ATTRSONLY is non nil, the attributes will be retrieved without the associated values. If WITHDN is non-nil each entry in the result will be prepennded with its distinguished name DN. -Additional search parameters can be specified through +Additional search parameters can be specified through `ldap-host-parameters-alist' which see. The function returns a list of matching entries. Each entry is itself an alist of attribute/value pairs optionally preceded by the DN of the @@ -494,7 +494,7 @@ entry according to the value of WITHDN." (setq ldap (ldap-open host host-plist)) (if ldap-verbose (message "Searching with LDAP on %s..." host)) - (setq result (ldap-search ldap filter + (setq result (ldap-search ldap filter (plist-get host-plist 'base) (plist-get host-plist 'scope) attributes attrsonly withdn @@ -506,13 +506,13 @@ entry according to the value of WITHDN." (defun ldap-add-entries (entries &optional host binddn passwd) "Add entries to an LDAP directory. -ENTRIES is a list of entry specifications of +ENTRIES is a list of entry specifications of the form (DN (ATTR . VALUE) (ATTR . VALUE) ...) where DN is the distinguished name of an entry to add, the following are cons cells containing attribute/value string pairs. -HOST is the LDAP host, defaulting to `ldap-default-host' -BINDDN is the DN to bind as to the server -PASSWD is the corresponding password" +HOST is the LDAP host, defaulting to `ldap-default-host'. +BINDDN is the DN to bind as to the server. +PASSWD is the corresponding password." (or host (setq host ldap-default-host) (error "No LDAP host specified")) @@ -542,17 +542,17 @@ PASSWD is the corresponding password" (defun ldap-modify-entries (entry-mods &optional host binddn passwd) "Modify entries of an LDAP directory. -ENTRY_MODS is a list of entry modifications of the form - (DN MOD-SPEC1 MOD-SPEC2 ...) where DN is the distinguished name of -the entry to modify, the following are modification specifications. -A modification specification is itself a list of the form -(MOD-OP ATTR VALUE1 VALUE2 ...) MOD-OP and ATTR are mandatory, +ENTRY_MODS is a list of entry modifications of the form + (DN MOD-SPEC1 MOD-SPEC2 ...) where DN is the distinguished name of +the entry to modify, the following are modification specifications. +A modification specification is itself a list of the form +(MOD-OP ATTR VALUE1 VALUE2 ...) MOD-OP and ATTR are mandatory, VALUEs are optional depending on MOD-OP. MOD-OP is the type of modification, one of the symbols `add', `delete' or `replace'. ATTR is the LDAP attribute type to modify. -HOST is the LDAP host, defaulting to `ldap-default-host' -BINDDN is the DN to bind as to the server -PASSWD is the corresponding password" +HOST is the LDAP host, defaulting to `ldap-default-host'. +BINDDN is the DN to bind as to the server. +PASSWD is the corresponding password." (or host (setq host ldap-default-host) (error "No LDAP host specified")) @@ -582,10 +582,10 @@ PASSWD is the corresponding password" (defun ldap-delete-entries (dn &optional host binddn passwd) "Delete an entry from an LDAP directory. -DN is the distinguished name of an entry to delete or +DN is the distinguished name of an entry to delete or a list of those. -HOST is the LDAP host, defaulting to `ldap-default-host' -BINDDN is the DN to bind as to the server +HOST is the LDAP host, defaulting to `ldap-default-host'. +BINDDN is the DN to bind as to the server. PASSWD is the corresponding password." (or host (setq host ldap-default-host) @@ -619,5 +619,5 @@ PASSWD is the corresponding password." (provide 'ldap) - + ;;; ldap.el ends here diff --git a/lisp/lib-complete.el b/lisp/lib-complete.el index 69d5554..bbdc5d8 100644 --- a/lisp/lib-complete.el +++ b/lisp/lib-complete.el @@ -128,8 +128,8 @@ Display MESSAGE and evaluate FORMS, returning value of the last one." ;;=== Completion caching ================================================== (defconst lib-complete:cache nil - "Used within read-library and read-library-internal to prevent -costly repeated calls to library-all-completions. + "Used within `read-library' and `read-library-internal' to prevent +costly repeated calls to `library-all-completions'. Format is a list of lists of the form ([ ] ...) diff --git a/lisp/lisp.el b/lisp/lisp.el index 5878e23..4226730 100644 --- a/lisp/lisp.el +++ b/lisp/lisp.el @@ -80,17 +80,15 @@ With argument, do it that many times. Negative arg -N means move forward across N balanced expressions." ;; XEmacs change (for zmacs regions) (interactive "_p") - (or arg (setq arg 1)) - (forward-sexp (- arg))) + (forward-sexp (- (or arg 1)))) -(defun mark-sexp (arg) +(defun mark-sexp (&optional arg) "Set mark ARG sexps from point. The place mark goes is the same place \\[forward-sexp] would move to with the same argument. Repeat this command to mark more sexps in the same direction." (interactive "p") - ;; XEmacs change - (mark-something 'mark-sexp 'forward-sexp arg)) + (mark-something 'mark-sexp 'forward-sexp (or arg 1))) (defun forward-list (&optional arg) "Move forward across one balanced group of parentheses. @@ -98,8 +96,7 @@ With argument, do it that many times. Negative arg -N means move backward across N groups of parentheses." ;; XEmacs change (interactive "_p") - (or arg (setq arg 1)) - (goto-char (or (scan-lists (point) arg 0) (buffer-end arg)))) + (goto-char (or (scan-lists (point) (or arg 1) 0) (buffer-end (or arg 1))))) (defun backward-list (&optional arg) "Move backward across one balanced group of parentheses. @@ -107,56 +104,55 @@ With argument, do it that many times. Negative arg -N means move forward across N groups of parentheses." ;; XEmacs change (for zmacs regions) (interactive "_p") - (or arg (setq arg 1)) - (forward-list (- arg))) + (forward-list (- (or arg 1)))) -(defun down-list (arg) +(defun down-list (&optional arg) "Move forward down one level of parentheses. With argument, do this that many times. -A negative argument means move backward but still go down a level. -In Lisp programs, an argument is required." +A negative argument means move backward but still go down a level." ;; XEmacs change (for zmacs regions) (interactive "_p") + (or arg (setq arg 1)) (let ((inc (if (> arg 0) 1 -1))) (while (/= arg 0) (goto-char (or (scan-lists (point) inc -1) (buffer-end arg))) (setq arg (- arg inc))))) -(defun backward-up-list (arg) +(defun backward-up-list (&optional arg) "Move backward out of one level of parentheses. With argument, do this that many times. -A negative argument means move forward but still to a less deep spot. -In Lisp programs, an argument is required." +A negative argument means move forward but still to a less deep spot." (interactive "_p") - (up-list (- arg))) + (up-list (- (or arg 1)))) -(defun up-list (arg) +(defun up-list (&optional arg) "Move forward out of one level of parentheses. With argument, do this that many times. A negative argument means move backward but still to a less deep spot. In Lisp programs, an argument is required." ;; XEmacs change (for zmacs regions) (interactive "_p") + (or arg (setq arg 1)) (let ((inc (if (> arg 0) 1 -1))) (while (/= arg 0) (goto-char (or (scan-lists (point) inc 1) (buffer-end arg))) (setq arg (- arg inc))))) -(defun kill-sexp (arg) +(defun kill-sexp (&optional arg) "Kill the sexp (balanced expression) following the cursor. With argument, kill that many sexps after the cursor. Negative arg -N means kill N sexps before the cursor." (interactive "p") (let ((opoint (point))) - (forward-sexp arg) + (forward-sexp (or arg 1)) (kill-region opoint (point)))) -(defun backward-kill-sexp (arg) +(defun backward-kill-sexp (&optional arg) "Kill the sexp (balanced expression) preceding the cursor. With argument, kill that many sexps before the cursor. Negative arg -N means kill N sexps after the cursor." (interactive "p") - (kill-sexp (- arg))) + (kill-sexp (- (or arg 1)))) (defun beginning-of-defun (&optional arg) "Move backward to the beginning of a defun. diff --git a/lisp/loaddefs.el b/lisp/loaddefs.el index 52458c3..6ec4914 100644 --- a/lisp/loaddefs.el +++ b/lisp/loaddefs.el @@ -85,7 +85,6 @@ ;; are ignored in completion, ;; making it more likely you will get a unique match. (setq completion-ignored-extensions - (mapcar 'purecopy ;; this is way way way bogus. ;; completely wtf? ;; the only things that should be here are those that are @@ -99,10 +98,10 @@ ; ".aux" ".a" ".ln" ; ".lof" ".blg" ".bbl" ".glo" ".idx" ".lot" ".fmt" ; ".diff" ".oi" ".class"))) - '(".o" ".obj" ".elc" "~" - ".bin" ".lbin" ;; #### these are doubtful, esp. the latter. - ".dvi";; possibly doubtful, too. - ".class"))) + '(".o" ".obj" ".elc" "~" + ".bin" ".lbin" ;; #### these are doubtful, esp. the latter. + ".dvi";; possibly doubtful, too. + ".class")) ;; This needs to be redone better. -slb diff --git a/lisp/menubar-items.el b/lisp/menubar-items.el index 11f695f..31e54a6 100644 --- a/lisp/menubar-items.el +++ b/lisp/menubar-items.el @@ -121,7 +121,7 @@ which will not be used as accelerators." (t ""))) (defconst default-menubar - (purecopy-menubar +; (purecopy-menubar ;purespace is dead ;; note backquote. `( ("%_File" @@ -1453,7 +1453,7 @@ which will not be used as accelerators." ["View %_Splash Screen" xemacs-splash-buffer] ["%_Unix Manual..." manual-entry]) ["Send %_Bug Report..." report-emacs-bug - :active (fboundp 'report-emacs-bug)])))) + :active (fboundp 'report-emacs-bug)]))) (defun maybe-add-init-button () diff --git a/lisp/menubar.el b/lisp/menubar.el index de084e1..a971530 100644 --- a/lisp/menubar.el +++ b/lisp/menubar.el @@ -20,7 +20,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -96,7 +96,7 @@ See `current-menubar' for a description of the syntax of a menubar." ((stringp menuitem) (and (string-match "^\\(-+\\|=+\\):\\(.*\\)" menuitem) (setq item (match-string 2 menuitem)) - (or (member item '(;; Motif-compatible + (or (member item '(;; Motif-compatible "singleLine" "doubleLine" "singleDashedLine" @@ -289,14 +289,13 @@ MENU-LEAF is a menubar leaf node. See the documentation of `current-menubar'. BEFORE, if provided, is the name of a menu item before which this item should be added, if this item is not on the menu already. If the item is already present, it will not be moved. -If IN-MENU is present use that instead of `current-menubar' as the menu to -change. -" +IN-MENU, if provided, means use that instead of `current-menubar' as the + menu to change." ;; Note easymenu.el uses the fact that menu-leaf can be a submenu. (add-menu-item-1 t menu-path menu-leaf before in-menu)) ;; I actually liked the old name better, but the interface has changed too -;; drastically to keep it. --Stig +;; drastically to keep it. --Stig (defun add-submenu (menu-path submenu &optional before in-menu) "Add a menu to the menubar or one of its submenus. If the named menu exists already, it is changed. @@ -308,33 +307,38 @@ SUBMENU is the new menu to add. See the documentation of `current-menubar' for the syntax. BEFORE, if provided, is the name of a menu before which this menu should be added, if this menu is not on its parent already. If the menu is already - present, it will not be moved." + present, it will not be moved. +IN-MENU, if provided, means use that instead of `current-menubar' as the + menu to change." (check-menu-syntax submenu nil) (add-menu-item-1 nil menu-path submenu before in-menu)) - -(defun purecopy-menubar (x) - ;; this calls purecopy on the strings, and the contents of the vectors, - ;; but not on the vectors themselves, or the conses - those must be - ;; writable. - (cond ((vectorp x) - (let ((i (length x))) - (while (> i 0) - (aset x (1- i) (purecopy (aref x (1- i)))) - (setq i (1- i)))) - x) - ((consp x) - (let ((rest x)) - (while rest - (setcar rest (purecopy-menubar (car rest))) - (setq rest (cdr rest)))) - x) - (t - (purecopy x)))) +;; purespace is no more, so this function is unnecessary +;(defun purecopy-menubar (x) +; ;; this calls purecopy on the strings, and the contents of the vectors, +; ;; but not on the vectors themselves, or the conses - those must be +; ;; writable. +; (cond ((vectorp x) +; (let ((i (length x))) +; (while (> i 0) +; (aset x (1- i) (purecopy (aref x (1- i)))) +; (setq i (1- i)))) +; x) +; ((consp x) +; (let ((rest x)) +; (while rest +; (setcar rest (purecopy-menubar (car rest))) +; (setq rest (cdr rest)))) +; x) +; (t +; (purecopy x)))) (defun delete-menu-item (path &optional from-menu) "Remove the named menu item from the menu hierarchy. -PATH is a list of strings which identify the position of the menu item in -the menu hierarchy. The documentation of `add-submenu' describes menu-paths." +PATH is a list of strings which identify the position of the menu item +in the menu hierarchy. The documentation of `add-submenu' describes +menu paths. +FROM-MENU, if provided, means use that instead of `current-menubar' +as the menu to change." (let* ((pair (condition-case nil (find-menu-item (or from-menu current-menubar) path) (error nil))) @@ -352,13 +356,13 @@ the menu hierarchy. The documentation of `add-submenu' describes menu-paths." (defun relabel-menu-item (path new-name) "Change the string of the specified menu item. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\". NEW-NAME is the string that the menu item will be printed as from now on." (or (stringp new-name) - (setq new-name (signal 'wrong-type-argument (list 'stringp new-name)))) + (setq new-name (wrong-type-argument 'stringp new-name))) (let* ((menubar current-menubar) (pair (find-menu-item menubar path)) (item (car pair)) @@ -380,7 +384,7 @@ NEW-NAME is the string that the menu item will be printed as from now on." ;; into the menubar if we didn't want people to use 'em? ;; x-font-menu.el is the only known offender right now and that ought to be ;; rehashed a bit. -;; +;; (defun enable-menu-item-1 (path toggle-p on-p) (let (menu item) @@ -430,33 +434,33 @@ NEW-NAME is the string that the menu item will be printed as from now on." (defun enable-menu-item (path) "Make the named menu item be selectable. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\"." (enable-menu-item-1 path nil t)) (defun disable-menu-item (path) "Make the named menu item be unselectable. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\"." (enable-menu-item-1 path nil nil)) (defun select-toggle-menu-item (path) "Make the named toggle- or radio-style menu item be in the `selected' state. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\"." (enable-menu-item-1 path t t)) (defun deselect-toggle-menu-item (path) "Make the named toggle- or radio-style menu item be in the `unselected' state. -PATH is a list of strings which identify the position of the menu item in +PATH is a list of strings which identify the position of the menu item in the menu hierarchy. (\"File\" \"Save\") means the menu item called \"Save\" -under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the +under the toplevel \"File\" menu. (\"Menu\" \"Foo\" \"Item\") means the menu item called \"Item\" under the \"Foo\" submenu of \"Menu\"." (enable-menu-item-1 path t nil)) @@ -554,7 +558,7 @@ button was clicked." (dispatch-event (next-event))) )) - + (defun popup-buffer-menu (event) "Pop up a copy of the Buffers menu (from the menubar) where the mouse is clicked." (interactive "e") diff --git a/lisp/minibuf.el b/lisp/minibuf.el index 34d2ddb..019519f 100644 --- a/lisp/minibuf.el +++ b/lisp/minibuf.el @@ -196,7 +196,7 @@ minibuffer is reinvoked while it is the selected window." (define-key map "\M-\t" 'comint-dynamic-complete) (define-key map "\M-?" 'comint-dynamic-list-completions) map) - "Minibuffer keymap used by shell-command and related commands.") + "Minibuffer keymap used by `shell-command' and related commands.") (defcustom use-dialog-box t "*Variable controlling usage of the dialog box. @@ -376,8 +376,8 @@ Sixth arg ABBREV-TABLE, if non-nil, becomes the value of `local-abbrev-table' Seventh arg DEFAULT, if non-nil, will be returned when user enters an empty string. -See also the variable completion-highlight-first-word-only for control over - completion display." +See also the variable `completion-highlight-first-word-only' for + control over completion display." (if (and (not enable-recursive-minibuffers) (> (minibuffer-depth) 0) (eq (selected-window) (minibuffer-window))) @@ -1212,7 +1212,7 @@ the special minibuffer behavior." (defun minibuffer-smart-maybe-select-highlighted-completion (event &optional click-count) - "Like minibuffer-smart-select-highlighted-completion but does nothing if + "Like `minibuffer-smart-select-highlighted-completion' but does nothing if there is no completion (as opposed to executing the global binding). Useful as the value of `mouse-track-click-hook'." (interactive "e") diff --git a/lisp/modeline.el b/lisp/modeline.el index c6e6a09..3e10878 100644 --- a/lisp/modeline.el +++ b/lisp/modeline.el @@ -588,14 +588,14 @@ parentheses on the modeline." "button2 cycles to the next buffer") (defconst modeline-buffer-identification - (list (cons modeline-buffer-id-left-extent (purecopy "XEmacs%N:")) + (list (cons modeline-buffer-id-left-extent "XEmacs%N:") ; this used to be "XEmacs:" - (cons modeline-buffer-id-right-extent (purecopy " %17b"))) + (cons modeline-buffer-id-right-extent " %17b")) "Modeline control for identifying the buffer being displayed. Its default value is - (list (cons modeline-buffer-id-left-extent (purecopy \"XEmacs%N:\")) - (cons modeline-buffer-id-right-extent (purecopy \" %17b\"))) + (list (cons modeline-buffer-id-left-extent \"XEmacs%N:\") + (cons modeline-buffer-id-right-extent \" %17b\"))) Major modes that edit things other than ordinary files may change this (e.g. Info, Dired,...).") @@ -626,7 +626,7 @@ Normally nil in most modes, since there is no process to display.") (set-extent-property modeline-modified-extent 'help-echo "button2 toggles the buffer's read-only status") -(defconst modeline-modified (purecopy '("--%1*%1+-")) +(defconst modeline-modified '("--%1*%1+-") "Modeline control for displaying whether current buffer is modified.") (make-variable-buffer-local 'modeline-modified) @@ -645,21 +645,21 @@ Normally nil in most modes, since there is no process to display.") (setq-default modeline-format (list - (purecopy "") + "" (cons modeline-modified-extent 'modeline-modified) (cons modeline-buffer-id-extent 'modeline-buffer-identification) - (purecopy " ") + " " 'global-mode-string - (purecopy " %[(") + " %[(" (cons modeline-minor-mode-extent - (list (purecopy "") 'mode-name 'minor-mode-alist)) - (cons modeline-narrowed-extent (purecopy "%n")) + (list "" 'mode-name 'minor-mode-alist)) + (cons modeline-narrowed-extent "%n") 'modeline-process - (purecopy ")%]----") - (list 'line-number-mode (purecopy "L%l--")) - (list 'column-number-mode (purecopy "C%c--")) - (cons -3 (purecopy "%p")) - (purecopy "-%-"))) + ")%]----" + (list 'line-number-mode "L%l--") + (list 'column-number-mode "C%c--") + (cons -3 "%p") + "-%-")) ;;; Added for XEmacs 20.3. Provide wrapper for vc since it may not always be ;;; present, and its symbols are not visible this early in the dump if it diff --git a/lisp/mouse.el b/lisp/mouse.el index 3fdc75a..67bea91 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -119,7 +119,7 @@ between point and mark." (interactive "P") ;; we fallback to the clipboard if the current selection is not existent (let ((text (if check-cutbuffer-p - (or (get-selection-no-error) + (or (get-selection-no-error) (get-cutbuffer) (get-selection-no-error 'CLIPBOARD) (error "No selection, clipboard or cut buffer available")) @@ -222,7 +222,7 @@ Returns whether a drag was begun." ;; #### barely implemented. (when (click-inside-selection-p event) (cond ((featurep 'offix) - (offix-start-drag-region + (offix-start-drag-region event (extent-start-position zmacs-region-extent) (extent-end-position zmacs-region-extent)) @@ -238,7 +238,7 @@ Returns whether a drag was begun." "Evaluate the sexp under the mouse. Usually, this is the last sexp before the click, but if you click on a left paren, then it is the sexp beginning with the paren that is evaluated. Also, since strings evaluate to themselves, -they're fed to re-search-forward and the matched region is highlighted until +they're fed to `re-search-forward' and the matched region is highlighted until the mouse button is released. Perhaps the most useful thing about this function is that the evaluation of @@ -343,7 +343,7 @@ Display cursor at that position for a second." (switch-to-buffer val)))) (defun narrow-window-to-region (m n) - "Narrow window to region between point and last mark" + "Narrow window to region between point and last mark." (interactive "r") (save-excursion (save-restriction diff --git a/lisp/msw-font-menu.el b/lisp/msw-font-menu.el index 23a2b6d..5b97f33 100644 --- a/lisp/msw-font-menu.el +++ b/lisp/msw-font-menu.el @@ -43,12 +43,11 @@ "Registry and encoding to use with font menu fonts.") (defvar mswindows-font-menu-junk-families - (purecopy - (mapconcat - #'identity - '("Symbol" - ) - "\\|")) + (mapconcat + #'identity + '("Symbol" + ) + "\\|") "A regexp matching font families which are uninteresting (e.g. cursor fonts).") (defvar mswindows-font-regexp-ascii nil diff --git a/lisp/mule/chinese.el b/lisp/mule/chinese.el index aff138f..7ab691e 100644 --- a/lisp/mule/chinese.el +++ b/lisp/mule/chinese.el @@ -255,8 +255,8 @@ ;; (setq font-ccl-encoder-alist ;; (cons (cons "big5" ccl-encode-big5-font) font-ccl-encoder-alist)) -(set-charset-ccl-program 'chinese-big5-1 ccl-encode-big5-font) -(set-charset-ccl-program 'chinese-big5-2 ccl-encode-big5-font) +(set-charset-ccl-program 'chinese-big5-1 'ccl-encode-big5-font) +(set-charset-ccl-program 'chinese-big5-2 'ccl-encode-big5-font) (set-language-info-alist "Chinese-BIG5" '((charset chinese-big5-1 chinese-big5-2) diff --git a/lisp/mule/cyrillic.el b/lisp/mule/cyrillic.el index a766710..610dce0 100644 --- a/lisp/mule/cyrillic.el +++ b/lisp/mule/cyrillic.el @@ -25,12 +25,13 @@ ;;; Commentary: -;; The character set ISO8859-5 is supported. KOI-8 and ALTERNATIVNYJ -;; are converted to ISO8859-5 internally. +;; The character set ISO8859-5 is supported. +;; KOI-8, Windows-1251, and ALTERNATIVNYJ are converted to ISO8859-5 +;; internally. ;;; Code: -;; For syntax of Cyrillic +;; Cyrillic syntax (modify-syntax-entry 'cyrillic-iso8859-5 "w") (modify-syntax-entry ?,L-(B ".") (modify-syntax-entry ?,Lp(B ".") @@ -40,21 +41,11 @@ ;;; CYRILLIC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ISO-8859-5 staff - -;; (make-coding-system -;; 'cyrillic-iso-8bit 2 ?5 -;; "ISO 2022 based 8-bit encoding for Cyrillic script (MIME:ISO-8859-5)" -;; '(ascii cyrillic-iso8859-5 nil nil -;; nil nil nil nil nil nil nil) -;; '((safe-charsets ascii cyrillic-iso8859-5) -;; (mime-charset . iso-8859-5))) - -;; (define-coding-system-alias 'iso-8859-5 'cyrillic-iso-8bit) +;; ISO-8859-5 (make-coding-system 'iso-8859-5 'iso2022 - "MIME ISO-8859-5" + "ISO-8859-5 (ISO 2022 based 8-bit encoding for Cyrillic script)" '(charset-g0 ascii charset-g1 cyrillic-iso8859-5 charset-g2 t @@ -73,7 +64,7 @@ (documentation . "Support for Cyrillic ISO-8859-5.")) '("Cyrillic")) -;; KOI-8 staff +;; KOI-8 (eval-and-compile @@ -133,31 +124,17 @@ (write-read-repeat r0 , cyrillic-koi8-r-encode-table)))))) "CCL program to encode KOI8.") -;; (make-coding-system -;; 'cyrillic-koi8 4 -;; ;; We used to use ?K. It is true that ?K is more strictly correct, -;; ;; but it is also used for Korean. -;; ;; So people who use koi8 for languages other than Russian -;; ;; will have to forgive us. -;; ?R "KOI8 8-bit encoding for Cyrillic (MIME: KOI8-R)" -;; '(ccl-decode-koi8 . ccl-encode-koi8) -;; '((safe-charsets ascii cyrillic-iso8859-5) -;; (mime-charset . koi8-r) -;; (valid-codes (0 . 127) 163 179 (192 . 255)) -;; (charset-origin-alist (cyrillic-iso8859-5 "KOI8-R" -;; cyrillic-encode-koi8-r-char)))) - ;; (define-coding-system-alias 'koi8-r 'cyrillic-koi8) ;; (define-coding-system-alias 'koi8 'cyrillic-koi8) (make-coding-system 'koi8-r 'ccl - "Coding-system used for KOI8-R." - `(decode ,ccl-decode-koi8 - encode ,ccl-encode-koi8 + "KOI8-R 8-bit encoding for Cyrillic." + '(decode ccl-decode-koi8 + encode ccl-encode-koi8 mnemonic "KOI8")) -;; it is not correct, but XEmacs doesn't have `ccl' category... +;; `iso-8-1' is not correct, but XEmacs doesn't have a `ccl' category (coding-system-put 'koi8-r 'category 'iso-8-1) ;; (define-ccl-program ccl-encode-koi8-font @@ -184,7 +161,88 @@ (documentation . "Support for Cyrillic KOI8-R.")) '("Cyrillic")) -;;; ALTERNATIVNYJ staff +;;; WINDOWS-1251 + +(eval-and-compile + +(defvar cyrillic-windows-1251-decode-table + [ + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 + 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 + 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 + 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 + 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 + 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 + 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 + ?,L"(B ?,L#(B 32 ?,Ls(B 32 32 32 32 32 32 ?,L)(B 32 ?,L*(B ?,L,(B ?,L+(B ?,L/(B ;" + ?,Lr(B 32 32 32 32 32 32 32 32 32 ?,Ly(B 32 ?,Lz(B ?,L|(B ?,L{(B ?,L(B + ?,L (B ?,L.(B ?,L~(B ?,L((B ?,A$(B 32 ?,A&(B ?,L}(B ?,L!(B ?,A)(B ?,L$(B ?,A+(B ?,A,(B ?,L-(B ?,A.(B ?,L'(B + ?,A0(B ?,A1(B ?,L&(B ?,Lv(B 32 ?,A5(B ?,A6(B ?,A7(B ?,Lq(B ?,Lp(B ?,Lt(B ?,A;(B ?,Lx(B ?,L%(B ?,Lu(B ?,Lw(B + ?,L0(B ?,L1(B ?,L2(B ?,L3(B ?,L4(B ?,L5(B ?,L6(B ?,L7(B ?,L8(B ?,L9(B ?,L:(B ?,L;(B ?,L<(B ?,L=(B ?,L>(B ?,L?(B + ?,L@(B ?,LA(B ?,LB(B ?,LC(B ?,LD(B ?,LE(B ?,LF(B ?,LG(B ?,LH(B ?,LI(B ?,LJ(B ?,LK(B ?,LL(B ?,LM(B ?,LN(B ?,LO(B + ?,LP(B ?,LQ(B ?,LR(B ?,LS(B ?,LT(B ?,LU(B ?,LV(B ?,LW(B ?,LX(B ?,LY(B ?,LZ(B ?,L[(B ?,L\(B ?,L](B ?,L^(B ?,L_(B + ?,L`(B ?,La(B ?,Lb(B ?,Lc(B ?,Ld(B ?,Le(B ?,Lf(B ?,Lg(B ?,Lh(B ?,Li(B ?,Lj(B ?,Lk(B ?,Ll(B ?,Lm(B ?,Ln(B ?,Lo(B ] + "Cyrillic Windows-1251 decoding table.") + +(defvar cyrillic-windows-1251-encode-table + (let ((table (make-vector 256 32)) + (i 0)) + (while (< i 256) + (let* ((ch (aref cyrillic-windows-1251-decode-table i)) + (split (split-char ch))) + (cond ((eq (car split) 'cyrillic-iso8859-5) + (aset table (logior (nth 1 split) 128) i) + ) + ((eq ch 32)) + ((eq (car split) 'ascii) + (aset table ch i) + ))) + (setq i (1+ i))) + table) + "Cyrillic Windows-1251 encoding table.") + +) + +(define-ccl-program ccl-decode-windows1251 + `(3 + ((read r0) + (loop + (write-read-repeat r0 ,cyrillic-windows-1251-decode-table)))) + "CCL program to decode Windows-1251.") + +(define-ccl-program ccl-encode-windows1251 + `(1 + ((read r0) + (loop + (if (r0 != ,(charset-id 'cyrillic-iso8859-5)) + (write-read-repeat r0) + ((read r0) + (write-read-repeat r0 , cyrillic-windows-1251-encode-table)))))) + "CCL program to encode Windows-1251.") + +(make-coding-system + 'windows-1251 'ccl + "Coding-system used for Windows-1251." + '(decode ccl-decode-windows1251 + encode ccl-encode-windows1251 + mnemonic "CyrW")) + +;; `iso-8-1' is not correct, but XEmacs doesn't have a `ccl' category +(coding-system-put 'windows-1251 'category 'iso-8-1) + +(set-language-info-alist + "Cyrillic-Win" '((charset cyrillic-iso8859-5) + (coding-system windows-1251) + (coding-priority windows-1251) + (input-method . "cyrillic-yawerty") + (features cyril-util) + (tutorial . "TUTORIAL.ru") + (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") + (documentation . "Support for Cyrillic Windows-1251.")) + '("Cyrillic")) + +;;; ALTERNATIVNYJ (eval-and-compile @@ -242,26 +300,16 @@ (write-read-repeat r0 ,cyrillic-alternativnyj-encode-table)))))) "CCL program to encode Alternativnyj.") -;; (make-coding-system -;; 'cyrillic-alternativnyj 4 ?A -;; "ALTERNATIVNYJ 8-bit encoding for Cyrillic" -;; '(ccl-decode-alternativnyj . ccl-encode-alternativnyj) -;; '((safe-charsets ascii cyrillic-iso8859-5) -;; (valid-codes (0 . 175) (224 . 241) 255) -;; (charset-origin-alist (cyrillic-iso8859-5 "ALTERNATIVNYJ" -;; cyrillic-encode-koi8-r-char)))) - - ;; (define-coding-system-alias 'alternativnyj 'cyrillic-alternativnyj) (make-coding-system 'alternativnyj 'ccl "Coding-system used for Alternativnyj" - `(decode ,ccl-decode-alternativnyj - encode ,ccl-encode-alternativnyj + '(decode ccl-decode-alternativnyj + encode ccl-encode-alternativnyj mnemonic "Cy.Alt")) -;; it is not correct, but XEmacs doesn't have `ccl' category... +;; `iso-8-1' is not correct, but XEmacs doesn't have `ccl' category (coding-system-put 'alternativnyj 'category 'iso-8-1) ;; (define-ccl-program ccl-encode-alternativnyj-font diff --git a/lisp/mule/ethiopic.el b/lisp/mule/ethiopic.el index 9c31637..66e08ed 100644 --- a/lisp/mule/ethiopic.el +++ b/lisp/mule/ethiopic.el @@ -65,7 +65,7 @@ ;; (setq font-ccl-encoder-alist ;; (cons (cons "ethiopic" ccl-encode-ethio-font) font-ccl-encoder-alist)) -(set-charset-ccl-program 'ethiopic ccl-encode-ethio-font) +(set-charset-ccl-program 'ethiopic 'ccl-encode-ethio-font) (set-language-info-alist "Ethiopic" '((setup-function . setup-ethiopic-environment-internal) diff --git a/lisp/mule/mule-category.el b/lisp/mule/mule-category.el index 913fc71..254b541 100644 --- a/lisp/mule/mule-category.el +++ b/lisp/mule/mule-category.el @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -79,21 +79,21 @@ Categories are given by their designators." (check-argument-type 'defined-category-p designator) (gethash designator defined-category-hashtable)) -(defun modify-category-entry (char-range designator &optional table reset) +(defun modify-category-entry (char-range designator &optional category-table reset) "Add a category to the categories associated with CHAR-RANGE. CHAR-RANGE is a single character or a range of characters, as per `put-char-table'. The category is given by a designator character. -The changes are made in TABLE, which defaults to the current buffer's - category table. +The changes are made in CATEGORY-TABLE, which defaults to the current + buffer's category table. If optional fourth argument RESET is non-nil, previous categories associated with CHAR-RANGE are removed before adding the specified category." - (or table (setq table (category-table))) - (check-argument-type 'category-table-p table) + (or category-table (setq category-table (category-table))) + (check-argument-type 'category-table-p category-table) (check-argument-type 'defined-category-p designator) (if reset ;; clear all existing stuff. - (put-char-table char-range nil table)) + (put-char-table char-range nil category-table)) (map-char-table #'(lambda (key value) ;; make sure that this range has a bit-vector assigned to it @@ -103,16 +103,16 @@ If optional fourth argument RESET is non-nil, previous categories associated ;; set the appropriate bit in that vector. (aset value (- designator 32) 1) ;; put the vector back, thus assuring we have a unique setting for this range - (put-char-table key value table)) - table char-range)) + (put-char-table key value category-table)) + category-table char-range)) -(defun char-category-list (char &optional table) - "Return a list of the categories that CHAR is in. -TABLE defaults to the current buffer's category table. +(defun char-category-list (character &optional category-table) + "Return a list of the categories that CHARACTER is in. +CATEGORY-TABLE defaults to the current buffer's category table. The categories are given by their designators." - (or table (setq table (category-table))) - (check-argument-type 'category-table-p table) - (let ((vec (get-char-table char table))) + (or category-table (setq category-table (category-table))) + (check-argument-type 'category-table-p category-table) + (let ((vec (get-char-table character category-table))) (if (null vec) nil (let ((a 32) list) (while (< a 127) @@ -121,7 +121,7 @@ The categories are given by their designators." (setq a (1+ a))) (nreverse list))))) -;; implemented in c, file chartab.c (97/3/14 jhod@po.iijnet.or.jp) +;; implemented in C, file chartab.c (97/3/14 jhod@po.iijnet.or.jp) ;(defun char-in-category-p (char category &optional table) ; "Return non-nil if CHAR is in CATEGORY. ;TABLE defaults to the current buffer's category table. diff --git a/lisp/mule/mule-ccl.el b/lisp/mule/mule-ccl.el index 1f24a55..72880fe 100644 --- a/lisp/mule/mule-ccl.el +++ b/lisp/mule/mule-ccl.el @@ -22,7 +22,7 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. -;; Synched up with: FSF 20.2 +;; Synched up with: FSF 21.0.90 ;;; Commentary: @@ -39,66 +39,17 @@ ;; combination of three or more arithmetic operations can be ;; calculated faster than Emacs Lisp. ;; -;; Here's the syntax of CCL program in BNF notation. -;; -;; CCL_PROGRAM := -;; (BUFFER_MAGNIFICATION -;; CCL_MAIN_BLOCK -;; [ CCL_EOF_BLOCK ]) -;; -;; BUFFER_MAGNIFICATION := integer -;; CCL_MAIN_BLOCK := CCL_BLOCK -;; CCL_EOF_BLOCK := CCL_BLOCK -;; -;; CCL_BLOCK := -;; STATEMENT | (STATEMENT [STATEMENT ...]) -;; STATEMENT := -;; SET | IF | BRANCH | LOOP | REPEAT | BREAK | READ | WRITE | CALL -;; -;; SET := -;; (REG = EXPRESSION) -;; | (REG ASSIGNMENT_OPERATOR EXPRESSION) -;; | integer -;; -;; EXPRESSION := ARG | (EXPRESSION OPERATOR ARG) -;; -;; IF := (if EXPRESSION CCL_BLOCK CCL_BLOCK) -;; BRANCH := (branch EXPRESSION CCL_BLOCK [CCL_BLOCK ...]) -;; LOOP := (loop STATEMENT [STATEMENT ...]) -;; BREAK := (break) -;; REPEAT := -;; (repeat) -;; | (write-repeat [REG | integer | string]) -;; | (write-read-repeat REG [integer | ARRAY]) -;; READ := -;; (read REG ...) -;; | (read-if (REG OPERATOR ARG) CCL_BLOCK CCL_BLOCK) -;; | (read-branch REG CCL_BLOCK [CCL_BLOCK ...]) -;; | (read-multibyte-character REG {charset} REG {code-point}) -;; WRITE := -;; (write REG ...) -;; | (write EXPRESSION) -;; | (write integer) | (write string) | (write REG ARRAY) -;; | string -;; | (write-multibyte-character REG(charset) REG(codepoint)) -;; CALL := (call ccl-program-name) -;; END := (end) -;; -;; REG := r0 | r1 | r2 | r3 | r4 | r5 | r6 | r7 -;; ARG := REG | integer -;; OPERATOR := -;; + | - | * | / | % | & | '|' | ^ | << | >> | <8 | >8 | // -;; | < | > | == | <= | >= | != | de-sjis | en-sjis -;; ASSIGNMENT_OPERATOR := -;; += | -= | *= | /= | %= | &= | '|=' | ^= | <<= | >>= -;; ARRAY := '[' integer ... ']' +;; Syntax and semantics of CCL program is described in the +;; documentation of `define-ccl-program'. ;;; Code: (defconst ccl-command-table [if branch loop break repeat write-repeat write-read-repeat read read-if read-branch write call end - read-multibyte-character write-multibyte-character] + read-multibyte-character write-multibyte-character + translate-character + iterate-multiple-map map-multiple map-single] "Vector of CCL commands (symbols).") ;; Put a property to each symbol of CCL commands for the compiler. @@ -228,11 +179,26 @@ ;; Embed integer DATA in `ccl-program-vector' at `ccl-current-ic' and ;; increment it. If IC is specified, embed DATA at IC. (defun ccl-embed-data (data &optional ic) - (let ((val (if (characterp data) (char-int data) data))) - (if ic - (aset ccl-program-vector ic val) - (aset ccl-program-vector ccl-current-ic val) - (setq ccl-current-ic (1+ ccl-current-ic))))) + (if (characterp data) + (setq data (char-int data))) + (if ic + (aset ccl-program-vector ic data) + (let ((len (length ccl-program-vector))) + (if (>= ccl-current-ic len) + (let ((new (make-vector (* len 2) nil))) + (while (> len 0) + (setq len (1- len)) + (aset new len (aref ccl-program-vector len))) + (setq ccl-program-vector new)))) + (aset ccl-program-vector ccl-current-ic data) + (setq ccl-current-ic (1+ ccl-current-ic)))) + +;; Embed pair of SYMBOL and PROP where (get SYMBOL PROP) should give +;; proper index number for SYMBOL. PROP should be +;; `translation-table-id', `code-conversion-map-id', or +;; `ccl-program-idx'. +(defun ccl-embed-symbol (symbol prop) + (ccl-embed-data (cons symbol prop))) ;; Embed string STR of length LEN in `ccl-program-vector' at ;; `ccl-current-ic'. @@ -280,8 +246,7 @@ (logior (ash (get reg2 'ccl-register-number) 8) (ash data 11)) (ash data 8))))) - (aset ccl-program-vector ccl-current-ic code) - (setq ccl-current-ic (1+ ccl-current-ic)))) + (ccl-embed-data code))) ;; extended ccl command format ;; |- 14-bit -|- 3-bit --|- 3-bit --|- 3-bit --|- 5-bit -| @@ -297,18 +262,6 @@ (defun ccl-increment-ic (inc) (setq ccl-current-ic (+ ccl-current-ic inc))) -;;;###autoload -(defun ccl-program-p (obj) - "Return t if OBJECT is a valid CCL compiled code." - (and (vectorp obj) - (let ((i 0) (len (length obj)) (flag t)) - (if (> len 1) - (progn - (while (and flag (< i len)) - (setq flag (integerp (aref obj i))) - (setq i (1+ i))) - flag))))) - ;; If non-nil, index of the start of the current loop. (defvar ccl-loop-head nil) ;; If non-nil, list of absolute addresses of the breaking points of @@ -319,7 +272,7 @@ (defun ccl-compile (ccl-program) "Return a compiled code of CCL-PROGRAM as a vector of integer." (if (or (null (consp ccl-program)) - (null (integer-or-char-p (car ccl-program))) + (null (integerp (car ccl-program))) (null (listp (car (cdr ccl-program))))) (error "CCL: Invalid CCL program: %s" ccl-program)) (if (null (vectorp ccl-program-vector)) @@ -479,7 +432,8 @@ (setq left 'r7))) ;; Now EXPR has the form (LEFT OP RIGHT). - (if (eq rrr left) + (if (and (eq rrr left) + (< op (length ccl-assign-arith-table))) ;; Compile this SET statement as `(RRR OP= RIGHT)'. (if (integer-or-char-p right) (progn @@ -501,6 +455,7 @@ ;; Compile WRITE statement with string argument. (defun ccl-compile-write-string (str) + (setq str (encode-coding-string str 'binary)) (let ((len (length str))) (ccl-embed-code 'write-const-string 1 len) (ccl-embed-string len str)) @@ -712,6 +667,7 @@ (ccl-embed-code 'write-const-jump 0 ccl-loop-head) (ccl-embed-data arg)) ((stringp arg) + (setq arg (encode-coding-string arg 'binary)) (let ((len (length arg)) (i 0)) (ccl-embed-code 'write-string-jump 0 ccl-loop-head) @@ -825,11 +781,8 @@ (error "CCL: Invalid number of arguments: %s" cmd)) (if (not (symbolp (nth 1 cmd))) (error "CCL: Subroutine should be a symbol: %s" cmd)) - (let* ((name (nth 1 cmd)) - (idx (get name 'ccl-program-idx))) - (if (not idx) - (error "CCL: Unknown subroutine name: %s" name)) - (ccl-embed-code 'call 0 idx)) + (ccl-embed-code 'call 1 0) + (ccl-embed-symbol (nth 1 cmd) 'ccl-program-idx) nil) ;; Compile END statement. @@ -862,97 +815,99 @@ nil) ;; Compile translate-character -;; (defun ccl-compile-translate-character (cmd) -;; (if (/= (length cmd) 4) -;; (error "CCL: Invalid number of arguments: %s" cmd)) -;; (let ((Rrr (nth 1 cmd)) -;; (RRR (nth 2 cmd)) -;; (rrr (nth 3 cmd))) -;; (ccl-check-register rrr cmd) -;; (ccl-check-register RRR cmd) -;; (cond ((and (symbolp Rrr) (not (get Rrr 'ccl-register-number))) -;; (if (not (get Rrr 'translation-table)) -;; (error "CCL: Invalid translation table %s in %s" Rrr cmd)) -;; (ccl-embed-extended-command 'translate-character-const-tbl -;; rrr RRR 0) -;; (ccl-embed-data Rrr)) -;; (t -;; (ccl-check-register Rrr cmd) -;; (ccl-embed-extended-command 'translate-character rrr RRR Rrr)))) -;; nil) - -;; (defun ccl-compile-iterate-multiple-map (cmd) -;; (ccl-compile-multiple-map-function 'iterate-multiple-map cmd) -;; nil) - -;; (defun ccl-compile-map-multiple (cmd) -;; (if (/= (length cmd) 4) -;; (error "CCL: Invalid number of arguments: %s" cmd)) -;; (let ((func '(lambda (arg mp) -;; (let ((len 0) result add) -;; (while arg -;; (if (consp (car arg)) -;; (setq add (funcall func (car arg) t) -;; result (append result add) -;; add (+ (-(car add)) 1)) -;; (setq result -;; (append result -;; (list (car arg))) -;; add 1)) -;; (setq arg (cdr arg) -;; len (+ len add))) -;; (if mp -;; (cons (- len) result) -;; result)))) -;; arg) -;; (setq arg (append (list (nth 0 cmd) (nth 1 cmd) (nth 2 cmd)) -;; (funcall func (nth 3 cmd) nil))) -;; (ccl-compile-multiple-map-function 'map-multiple arg)) -;; nil) - -;; (defun ccl-compile-map-single (cmd) -;; (if (/= (length cmd) 4) -;; (error "CCL: Invalid number of arguments: %s" cmd)) -;; (let ((RRR (nth 1 cmd)) -;; (rrr (nth 2 cmd)) -;; (map (nth 3 cmd)) -;; id) -;; (ccl-check-register rrr cmd) -;; (ccl-check-register RRR cmd) -;; (ccl-embed-extended-command 'map-single rrr RRR 0) -;; (cond ((symbolp map) -;; (if (get map 'code-conversion-map) -;; (ccl-embed-data map) -;; (error "CCL: Invalid map: %s" map))) -;; (t -;; (error "CCL: Invalid type of arguments: %s" cmd)))) -;; nil) - -;; (defun ccl-compile-multiple-map-function (command cmd) -;; (if (< (length cmd) 4) -;; (error "CCL: Invalid number of arguments: %s" cmd)) -;; (let ((RRR (nth 1 cmd)) -;; (rrr (nth 2 cmd)) -;; (args (nthcdr 3 cmd)) -;; map) -;; (ccl-check-register rrr cmd) -;; (ccl-check-register RRR cmd) -;; (ccl-embed-extended-command command rrr RRR 0) -;; (ccl-embed-data (length args)) -;; (while args -;; (setq map (car args)) -;; (cond ((symbolp map) -;; (if (get map 'code-conversion-map) -;; (ccl-embed-data map) -;; (error "CCL: Invalid map: %s" map))) -;; ((numberp map) -;; (ccl-embed-data map)) -;; (t -;; (error "CCL: Invalid type of arguments: %s" cmd))) -;; (setq args (cdr args))))) +(defun ccl-compile-translate-character (cmd) + (if (/= (length cmd) 4) + (error "CCL: Invalid number of arguments: %s" cmd)) + (let ((Rrr (nth 1 cmd)) + (RRR (nth 2 cmd)) + (rrr (nth 3 cmd))) + (ccl-check-register rrr cmd) + (ccl-check-register RRR cmd) + (cond ((and (symbolp Rrr) (not (get Rrr 'ccl-register-number))) + (ccl-embed-extended-command 'translate-character-const-tbl + rrr RRR 0) + (ccl-embed-symbol Rrr 'translation-table-id)) + (t + (ccl-check-register Rrr cmd) + (ccl-embed-extended-command 'translate-character rrr RRR Rrr)))) + nil) + +(defun ccl-compile-iterate-multiple-map (cmd) + (ccl-compile-multiple-map-function 'iterate-multiple-map cmd) + nil) + +(defun ccl-compile-map-multiple (cmd) + (if (/= (length cmd) 4) + (error "CCL: Invalid number of arguments: %s" cmd)) + (let (func arg) + (setq func + (lambda (arg mp) + (let ((len 0) result add) + (while arg + (if (consp (car arg)) + (setq add (funcall func (car arg) t) + result (append result add) + add (+ (- (car add)) 1)) + (setq result + (append result + (list (car arg))) + add 1)) + (setq arg (cdr arg) + len (+ len add))) + (if mp + (cons (- len) result) + result)))) + (setq arg (append (list (nth 0 cmd) (nth 1 cmd) (nth 2 cmd)) + (funcall func (nth 3 cmd) nil))) + (ccl-compile-multiple-map-function 'map-multiple arg)) + nil) + +(defun ccl-compile-map-single (cmd) + (if (/= (length cmd) 4) + (error "CCL: Invalid number of arguments: %s" cmd)) + (let ((RRR (nth 1 cmd)) + (rrr (nth 2 cmd)) + (map (nth 3 cmd)) + id) + (ccl-check-register rrr cmd) + (ccl-check-register RRR cmd) + (ccl-embed-extended-command 'map-single rrr RRR 0) + (cond ((symbolp map) + (if (get map 'code-conversion-map) + (ccl-embed-symbol map 'code-conversion-map-id) + (error "CCL: Invalid map: %s" map))) + (t + (error "CCL: Invalid type of arguments: %s" cmd)))) + nil) + +(defun ccl-compile-multiple-map-function (command cmd) + (if (< (length cmd) 4) + (error "CCL: Invalid number of arguments: %s" cmd)) + (let ((RRR (nth 1 cmd)) + (rrr (nth 2 cmd)) + (args (nthcdr 3 cmd)) + map) + (ccl-check-register rrr cmd) + (ccl-check-register RRR cmd) + (ccl-embed-extended-command command rrr RRR 0) + (ccl-embed-data (length args)) + (while args + (setq map (car args)) + (cond ((symbolp map) + (if (get map 'code-conversion-map) + (ccl-embed-symbol map 'code-conversion-map-id) + (error "CCL: Invalid map: %s" map))) + ((numberp map) + (ccl-embed-data map)) + (t + (error "CCL: Invalid type of arguments: %s" cmd))) + (setq args (cdr args))))) -;;; CCL dump stuff +;;; CCL dump staffs + +;; To avoid byte-compiler warning. +(defvar ccl-code) ;;;###autoload (defun ccl-dump (ccl-code) @@ -980,7 +935,6 @@ ;; Return a CCL code in `ccl-code' at `ccl-current-ic'. (defun ccl-get-next-code () - (declare (special ccl-code)) (prog1 (aref ccl-code ccl-current-ic) (setq ccl-current-ic (1+ ccl-current-ic)))) @@ -1230,40 +1184,40 @@ (defun ccl-dump-write-multibyte-character (rrr RRR Rrr) (insert (format "write-multibyte-character r%d r%d\n" RRR rrr))) -;; (defun ccl-dump-translate-character (rrr RRR Rrr) -;; (insert (format "translation table(r%d) r%d r%d\n" Rrr RRR rrr))) - -;; (defun ccl-dump-translate-character-const-tbl (rrr RRR Rrr) -;; (let ((tbl (ccl-get-next-code))) -;; (insert (format "translation table(%S) r%d r%d\n" tbl RRR rrr)))) - -;; (defun ccl-dump-iterate-multiple-map (rrr RRR Rrr) -;; (let ((notbl (ccl-get-next-code)) -;; (i 0) id) -;; (insert (format "iterate-multiple-map r%d r%d\n" RRR rrr)) -;; (insert (format "\tnumber of maps is %d .\n\t [" notbl)) -;; (while (< i notbl) -;; (setq id (ccl-get-next-code)) -;; (insert (format "%S" id)) -;; (setq i (1+ i))) -;; (insert "]\n"))) - -;; (defun ccl-dump-map-multiple (rrr RRR Rrr) -;; (let ((notbl (ccl-get-next-code)) -;; (i 0) id) -;; (insert (format "map-multiple r%d r%d\n" RRR rrr)) -;; (insert (format "\tnumber of maps and separators is %d\n\t [" notbl)) -;; (while (< i notbl) -;; (setq id (ccl-get-next-code)) -;; (if (= id -1) -;; (insert "]\n\t [") -;; (insert (format "%S " id))) -;; (setq i (1+ i))) -;; (insert "]\n"))) - -;; (defun ccl-dump-map-single (rrr RRR Rrr) -;; (let ((id (ccl-get-next-code))) -;; (insert (format "map-single r%d r%d map(%S)\n" RRR rrr id)))) +(defun ccl-dump-translate-character (rrr RRR Rrr) + (insert (format "translation table(r%d) r%d r%d\n" Rrr RRR rrr))) + +(defun ccl-dump-translate-character-const-tbl (rrr RRR Rrr) + (let ((tbl (ccl-get-next-code))) + (insert (format "translation table(%S) r%d r%d\n" tbl RRR rrr)))) + +(defun ccl-dump-iterate-multiple-map (rrr RRR Rrr) + (let ((notbl (ccl-get-next-code)) + (i 0) id) + (insert (format "iterate-multiple-map r%d r%d\n" RRR rrr)) + (insert (format "\tnumber of maps is %d .\n\t [" notbl)) + (while (< i notbl) + (setq id (ccl-get-next-code)) + (insert (format "%S" id)) + (setq i (1+ i))) + (insert "]\n"))) + +(defun ccl-dump-map-multiple (rrr RRR Rrr) + (let ((notbl (ccl-get-next-code)) + (i 0) id) + (insert (format "map-multiple r%d r%d\n" RRR rrr)) + (insert (format "\tnumber of maps and separators is %d\n\t [" notbl)) + (while (< i notbl) + (setq id (ccl-get-next-code)) + (if (= id -1) + (insert "]\n\t [") + (insert (format "%S " id))) + (setq i (1+ i))) + (insert "]\n"))) + +(defun ccl-dump-map-single (rrr RRR Rrr) + (let ((id (ccl-get-next-code))) + (insert (format "map-single r%d r%d map(%S)\n" RRR rrr id)))) ;; CCL emulation staffs @@ -1276,16 +1230,222 @@ (defmacro declare-ccl-program (name &optional vector) "Declare NAME as a name of CCL program. -To compile a CCL program which calls another CCL program not yet -defined, it must be declared as a CCL program in advance. +This macro exists for backward compatibility. In the old version of +Emacs, to compile a CCL program which calls another CCL program not +yet defined, it must be declared as a CCL program in advance. But, +now CCL program names are resolved not at compile time but before +execution. + Optional arg VECTOR is a compiled CCL code of the CCL program." `(put ',name 'ccl-program-idx (register-ccl-program ',name ,vector))) ;;;###autoload (defmacro define-ccl-program (name ccl-program &optional doc) "Set NAME the compiled code of CCL-PROGRAM. -CCL-PROGRAM is `eval'ed before being handed to the CCL compiler `ccl-compile'. -The compiled code is a vector of integers." + +CCL-PROGRAM has this form: + (BUFFER_MAGNIFICATION + CCL_MAIN_CODE + [ CCL_EOF_CODE ]) + +BUFFER_MAGNIFICATION is an integer value specifying the approximate +output buffer magnification size compared with the bytes of input data +text. If the value is zero, the CCL program can't execute `read' and +`write' commands. + +CCL_MAIN_CODE and CCL_EOF_CODE are CCL program codes. CCL_MAIN_CODE +executed at first. If there's no more input data when `read' command +is executed in CCL_MAIN_CODE, CCL_EOF_CODE is executed. If +CCL_MAIN_CODE is terminated, CCL_EOF_CODE is not executed. + +Here's the syntax of CCL program code in BNF notation. The lines +starting by two semicolons (and optional leading spaces) describe the +semantics. + +CCL_MAIN_CODE := CCL_BLOCK + +CCL_EOF_CODE := CCL_BLOCK + +CCL_BLOCK := STATEMENT | (STATEMENT [STATEMENT ...]) + +STATEMENT := + SET | IF | BRANCH | LOOP | REPEAT | BREAK | READ | WRITE | CALL + | TRANSLATE | END + +SET := (REG = EXPRESSION) + | (REG ASSIGNMENT_OPERATOR EXPRESSION) + ;; The following form is the same as (r0 = integer). + | integer + +EXPRESSION := ARG | (EXPRESSION OPERATOR ARG) + +;; Evaluate EXPRESSION. If the result is nonzeor, execute +;; CCL_BLOCK_0. Otherwise, execute CCL_BLOCK_1. +IF := (if EXPRESSION CCL_BLOCK_0 CCL_BLOCK_1) + +;; Evaluate EXPRESSION. Provided that the result is N, execute +;; CCL_BLOCK_N. +BRANCH := (branch EXPRESSION CCL_BLOCK_0 [CCL_BLOCK_1 ...]) + +;; Execute STATEMENTs until (break) or (end) is executed. +LOOP := (loop STATEMENT [STATEMENT ...]) + +;; Terminate the most inner loop. +BREAK := (break) + +REPEAT := + ;; Jump to the head of the most inner loop. + (repeat) + ;; Same as: ((write [REG | integer | string]) + ;; (repeat)) + | (write-repeat [REG | integer | string]) + ;; Same as: ((write REG [ARRAY]) + ;; (read REG) + ;; (repeat)) + | (write-read-repeat REG [ARRAY]) + ;; Same as: ((write integer) + ;; (read REG) + ;; (repeat)) + | (write-read-repeat REG integer) + +READ := ;; Set REG_0 to a byte read from the input text, set REG_1 + ;; to the next byte read, and so on. + (read REG_0 [REG_1 ...]) + ;; Same as: ((read REG) + ;; (if (REG OPERATOR ARG) CCL_BLOCK_0 CCL_BLOCK_1)) + | (read-if (REG OPERATOR ARG) CCL_BLOCK_0 CCL_BLOCK_1) + ;; Same as: ((read REG) + ;; (branch REG CCL_BLOCK_0 [CCL_BLOCK_1 ...])) + | (read-branch REG CCL_BLOCK_0 [CCL_BLOCK_1 ...]) + ;; Read a character from the input text while parsing + ;; multibyte representation, set REG_0 to the charset ID of + ;; the character, set REG_1 to the code point of the + ;; character. If the dimension of charset is two, set REG_1 + ;; to ((CODE0 << 8) | CODE1), where CODE0 is the first code + ;; point and CODE1 is the second code point. + | (read-multibyte-character REG_0 REG_1) + +WRITE := + ;; Write REG_0, REG_1, ... to the output buffer. If REG_N is + ;; a multibyte character, write the corresponding multibyte + ;; representation. + (write REG_0 [REG_1 ...]) + ;; Same as: ((r7 = EXPRESSION) + ;; (write r7)) + | (write EXPRESSION) + ;; Write the value of `integer' to the output buffer. If it + ;; is a multibyte character, write the corresponding multibyte + ;; representation. + | (write integer) + ;; Write the byte sequence of `string' as is to the output + ;; buffer. It is encoded by binary coding system, thus, + ;; by this operation, you cannot write multibyte string + ;; as it is. + | (write string) + ;; Same as: (write string) + | string + ;; Provided that the value of REG is N, write Nth element of + ;; ARRAY to the output buffer. If it is a multibyte + ;; character, write the corresponding multibyte + ;; representation. + | (write REG ARRAY) + ;; Write a multibyte representation of a character whose + ;; charset ID is REG_0 and code point is REG_1. If the + ;; dimension of the charset is two, REG_1 should be ((CODE0 << + ;; 8) | CODE1), where CODE0 is the first code point and CODE1 + ;; is the second code point of the character. + | (write-multibyte-character REG_0 REG_1) + +;; Call CCL program whose name is ccl-program-name. +CALL := (call ccl-program-name) + +;; Terminate the CCL program. +END := (end) + +;; CCL registers that can contain any integer value. As r7 is also +;; used by CCL interpreter, its value is changed unexpectedly. +REG := r0 | r1 | r2 | r3 | r4 | r5 | r6 | r7 + +ARG := REG | integer + +OPERATOR := + ;; Normal arithmethic operators (same meaning as C code). + + | - | * | / | % + + ;; Bitwize operators (same meaning as C code) + | & | `|' | ^ + + ;; Shifting operators (same meaning as C code) + | << | >> + + ;; (REG = ARG_0 <8 ARG_1) means: + ;; (REG = ((ARG_0 << 8) | ARG_1)) + | <8 + + ;; (REG = ARG_0 >8 ARG_1) means: + ;; ((REG = (ARG_0 >> 8)) + ;; (r7 = (ARG_0 & 255))) + | >8 + + ;; (REG = ARG_0 // ARG_1) means: + ;; ((REG = (ARG_0 / ARG_1)) + ;; (r7 = (ARG_0 % ARG_1))) + | // + + ;; Normal comparing operators (same meaning as C code) + | < | > | == | <= | >= | != + + ;; If ARG_0 and ARG_1 are higher and lower byte of Shift-JIS + ;; code, and CHAR is the corresponding JISX0208 character, + ;; (REG = ARG_0 de-sjis ARG_1) means: + ;; ((REG = CODE0) + ;; (r7 = CODE1)) + ;; where CODE0 is the first code point of CHAR, CODE1 is the + ;; second code point of CHAR. + | de-sjis + + ;; If ARG_0 and ARG_1 are the first and second code point of + ;; JISX0208 character CHAR, and SJIS is the correponding + ;; Shift-JIS code, + ;; (REG = ARG_0 en-sjis ARG_1) means: + ;; ((REG = HIGH) + ;; (r7 = LOW)) + ;; where HIGH is the higher byte of SJIS, LOW is the lower + ;; byte of SJIS. + | en-sjis + +ASSIGNMENT_OPERATOR := + ;; Same meaning as C code + += | -= | *= | /= | %= | &= | `|=' | ^= | <<= | >>= + + ;; (REG <8= ARG) is the same as: + ;; ((REG <<= 8) + ;; (REG |= ARG)) + | <8= + + ;; (REG >8= ARG) is the same as: + ;; ((r7 = (REG & 255)) + ;; (REG >>= 8)) + + ;; (REG //= ARG) is the same as: + ;; ((r7 = (REG % ARG)) + ;; (REG /= ARG)) + | //= + +ARRAY := `[' integer ... `]' + + +TRANSLATE := + (translate-character REG(table) REG(charset) REG(codepoint)) + | (translate-character SYMBOL REG(charset) REG(codepoint)) +MAP := + (iterate-multiple-map REG REG MAP-IDs) + | (map-multiple REG REG (MAP-SET)) + | (map-single REG REG MAP-ID) +MAP-IDs := MAP-ID ... +MAP-SET := MAP-IDs | (MAP-IDs) MAP-SET +MAP-ID := integer +" `(let ((prog ,(ccl-compile (eval ccl-program)))) (defconst ,name prog ,doc) (put ',name 'ccl-program-idx (register-ccl-program ',name prog)) @@ -1294,25 +1454,23 @@ The compiled code is a vector of integers." ;;;###autoload (defmacro check-ccl-program (ccl-program &optional name) "Check validity of CCL-PROGRAM. -If CCL-PROGRAM is a symbol denoting a valid CCL program, return +If CCL-PROGRAM is a symbol denoting a CCL program, return CCL-PROGRAM, else return nil. If CCL-PROGRAM is a vector and optional arg NAME (symbol) is supplied, register CCL-PROGRAM by name NAME, and return NAME." - `(let ((result ,ccl-program)) - (cond ((symbolp ,ccl-program) - (or (numberp (get ,ccl-program 'ccl-program-idx)) - (setq result nil))) - ((vectorp ,ccl-program) - (setq result ,name) - (register-ccl-program result ,ccl-program)) - (t - (setq result nil))) - result)) + `(if (ccl-program-p ,ccl-program) + (if (vectorp ,ccl-program) + (progn + (register-ccl-program ,name ,ccl-program) + ,name) + ,ccl-program))) ;;;###autoload (defun ccl-execute-with-args (ccl-prog &rest args) "Execute CCL-PROGRAM with registers initialized by the remaining args. -The return value is a vector of resulting CCL registers." +The return value is a vector of resulting CCL registers. + +See the documentation of `define-ccl-program' for the detail of CCL program." (let ((reg (make-vector 8 0)) (i 0)) (while (and args (< i 8)) diff --git a/lisp/mule/mule-cmds.el b/lisp/mule/mule-cmds.el index 2b6ad0e..d07ff15 100644 --- a/lisp/mule/mule-cmds.el +++ b/lisp/mule/mule-cmds.el @@ -23,25 +23,20 @@ ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ;; 02111-1307, USA. +;; Note: Some of the code here is now in code-cmds.el + ;;; Code: ;;; MULE related key bindings and menus. -(defvar mule-keymap (make-sparse-keymap "Mule") - "Keymap for Mule (Multilingual environment) specific commands.") +(require 'code-cmds) -;; Keep "C-x C-m ..." for mule specific commands. -(define-key ctl-x-map "\C-m" mule-keymap) +;; Preserve the old name +(defvaralias 'mule-keymap 'coding-keymap) -(define-key mule-keymap "f" 'set-buffer-file-coding-system) -(define-key mule-keymap "F" 'set-default-buffer-file-coding-system) ; XEmacs -(define-key mule-keymap "t" 'set-terminal-coding-system) -(define-key mule-keymap "k" 'set-keyboard-coding-system) -(define-key mule-keymap "p" 'set-buffer-process-coding-system) (define-key mule-keymap "x" 'set-selection-coding-system) (define-key mule-keymap "X" 'set-next-selection-coding-system) (define-key mule-keymap "\C-\\" 'set-input-method) -(define-key mule-keymap "c" 'universal-coding-system-argument) ;;(define-key mule-keymap "c" 'list-coding-system-briefly) ; XEmacs (define-key mule-keymap "C" 'describe-coding-system) ; XEmacs (define-key mule-keymap "r" 'toggle-display-direction) ; XEmacs @@ -123,378 +118,6 @@ They means `lf', `crlf', and `cr' respectively." (let ((coding-system-for-read 'iso-2022-7bit)) (find-file-read-only (expand-file-name "HELLO" data-directory)))) -(defun universal-coding-system-argument () - "Execute an I/O command using the specified coding system." - (interactive) - (let* ((default (and buffer-file-coding-system - (not (eq (coding-system-type buffer-file-coding-system) - t)) - (coding-system-name buffer-file-coding-system))) - (coding-system - (read-coding-system - (if default - (format "Coding system for following command (default, %s): " - default) - "Coding system for following command: ") - default)) - (keyseq (read-key-sequence - (format "Command to execute with %s:" coding-system))) - (cmd (key-binding keyseq))) - (let ((coding-system-for-read coding-system) - (coding-system-for-write coding-system)) - (message "") - (call-interactively cmd)))) - -(defun set-default-coding-systems (coding-system) - "Set default value of various coding systems to CODING-SYSTEM. -This sets the following coding systems: - o coding system of a newly created buffer - o default coding system for terminal output - o default coding system for keyboard input - o default coding system for subprocess I/O - o default coding system for converting file names." - (check-coding-system coding-system) - ;;(setq-default buffer-file-coding-system coding-system) - (set-default-buffer-file-coding-system coding-system) - ;; (if default-enable-multibyte-characters - ;; (setq default-file-name-coding-system coding-system)) - ;; If coding-system is nil, honor that on MS-DOS as well, so - ;; that they could reset the terminal coding system. - ;; (unless (and (eq window-system 'pc) coding-system) - ;; (setq default-terminal-coding-system coding-system)) - (set-terminal-coding-system coding-system) - ;;(setq default-keyboard-coding-system coding-system) - (set-keyboard-coding-system coding-system) - ;;(setq default-process-coding-system (cons coding-system coding-system)) - ;; Refer to coding-system-for-read and coding-system-for-write - ;; so that C-x RET c works. - (add-hook 'comint-exec-hook - `(lambda () - (let ((proc (get-buffer-process (current-buffer)))) - (set-process-input-coding-system - proc (or coding-system-for-read ',coding-system)) - (set-process-output-coding-system - proc (or coding-system-for-write ',coding-system)))) - 'append) - (setq file-name-coding-system coding-system)) - -(defun prefer-coding-system (coding-system) - "Add CODING-SYSTEM at the front of the priority list for automatic detection. -This also sets the following coding systems: - o coding system of a newly created buffer - o default coding system for terminal output - o default coding system for keyboard input - o default coding system for converting file names. - -If CODING-SYSTEM specifies a certain type of EOL conversion, the coding -systems set by this function will use that type of EOL conversion. - -This command does not change the default value of terminal coding system -for MS-DOS terminal, because DOS terminals only support a single coding -system, and Emacs automatically sets the default to that coding system at -startup." - (interactive "zPrefer coding system: ") - (if (not (and coding-system (find-coding-system coding-system))) - (error "Invalid coding system `%s'" coding-system)) - (let ((coding-category (coding-system-category coding-system)) - (base (coding-system-base coding-system)) - (eol-type (coding-system-eol-type coding-system))) - (if (not coding-category) - ;; CODING-SYSTEM is no-conversion or undecided. - (error "Can't prefer the coding system `%s'" coding-system)) - (set-coding-category-system coding-category (or base coding-system)) - ;; (update-coding-systems-internal) - (or (eq coding-category (car (coding-category-list))) - ;; We must change the order. - (set-coding-priority-list (list coding-category))) - (if (and base (interactive-p)) - (message "Highest priority is set to %s (base of %s)" - base coding-system)) - ;; If they asked for specific EOL conversion, honor that. - (if (memq eol-type '(lf crlf mac)) - (setq coding-system - (coding-system-change-eol-conversion base eol-type)) - (setq coding-system base)) - (set-default-coding-systems coding-system))) - -;; (defun find-coding-systems-region-subset-p (list1 list2) -;; "Return non-nil if all elements in LIST1 are included in LIST2. -;; Comparison done with EQ." -;; (catch 'tag -;; (while list1 -;; (or (memq (car list1) list2) -;; (throw 'tag nil)) -;; (setq list1 (cdr list1))) -;; t)) - -;; (defun find-coding-systems-region (from to) -;; "Return a list of proper coding systems to encode a text between FROM and TO. -;; All coding systems in the list can safely encode any multibyte characters -;; in the text. -;; -;; If the text contains no multibyte characters, return a list of a single -;; element `undecided'." -;; (find-coding-systems-for-charsets (find-charset-region from to))) - -;; (defun find-coding-systems-string (string) -;; "Return a list of proper coding systems to encode STRING. -;; All coding systems in the list can safely encode any multibyte characters -;; in STRING. -;; -;; If STRING contains no multibyte characters, return a list of a single -;; element `undecided'." -;; (find-coding-systems-for-charsets (find-charset-string string))) - -;; (defun find-coding-systems-for-charsets (charsets) -;; "Return a list of proper coding systems to encode characters of CHARSETS. -;; CHARSETS is a list of character sets." -;; (if (or (null charsets) -;; (and (= (length charsets) 1) -;; (eq 'ascii (car charsets)))) -;; '(undecided) -;; (setq charsets (delq 'composition charsets)) -;; (let ((l (coding-system-list 'base-only)) -;; (charset-preferred-codings -;; (mapcar (function -;; (lambda (x) -;; (if (eq x 'unknown) -;; 'raw-text -;; (get-charset-property x 'preferred-coding-system)))) -;; charsets)) -;; (priorities (mapcar (function (lambda (x) (symbol-value x))) -;; coding-category-list)) -;; codings coding safe) -;; (if (memq 'unknown charsets) -;; ;; The region contains invalid multibyte characters. -;; (setq l '(raw-text))) -;; (while l -;; (setq coding (car l) l (cdr l)) -;; (if (and (setq safe (coding-system-get coding 'safe-charsets)) -;; (or (eq safe t) -;; (find-coding-systems-region-subset-p charsets safe))) -;; ;; We put the higher priority to coding systems included -;; ;; in CHARSET-PREFERRED-CODINGS, and within them, put the -;; ;; higher priority to coding systems which support smaller -;; ;; number of charsets. -;; (let ((priority -;; (+ (if (coding-system-get coding 'mime-charset) 4096 0) -;; (lsh (length (memq coding priorities)) 7) -;; (if (memq coding charset-preferred-codings) 64 0) -;; (if (> (coding-system-type coding) 0) 32 0) -;; (if (consp safe) (- 32 (length safe)) 0)))) -;; (setq codings (cons (cons priority coding) codings))))) -;; (mapcar 'cdr -;; (sort codings (function (lambda (x y) (> (car x) (car y)))))) -;; ))) - -;; (defun find-multibyte-characters (from to &optional maxcount excludes) -;; "Find multibyte characters in the region specified by FROM and TO. -;; If FROM is a string, find multibyte characters in the string. -;; The return value is an alist of the following format: -;; ((CHARSET COUNT CHAR ...) ...) -;; where -;; CHARSET is a character set, -;; COUNT is a number of characters, -;; CHARs are found characters of the character set. -;; Optional 3rd arg MAXCOUNT limits how many CHARs are put in the above list. -;; Optional 4th arg EXCLUDE is a list of character sets to be ignored. -;; -;; For invalid characters, CHARs are actually strings." -;; (let ((chars nil) -;; charset char) -;; (if (stringp from) -;; (let ((idx 0)) -;; (while (setq idx (string-match "[^\000-\177]" from idx)) -;; (setq char (aref from idx) -;; charset (char-charset char)) -;; (if (eq charset 'unknown) -;; (setq char (match-string 0))) -;; (if (or (eq charset 'unknown) -;; (not (or (eq excludes t) (memq charset excludes)))) -;; (let ((slot (assq charset chars))) -;; (if slot -;; (if (not (memq char (nthcdr 2 slot))) -;; (let ((count (nth 1 slot))) -;; (setcar (cdr slot) (1+ count)) -;; (if (or (not maxcount) (< count maxcount)) -;; (nconc slot (list char))))) -;; (setq chars (cons (list charset 1 char) chars))))) -;; (setq idx (1+ idx)))) -;; (save-excursion -;; (goto-char from) -;; (while (re-search-forward "[^\000-\177]" to t) -;; (setq char (preceding-char) -;; charset (char-charset char)) -;; (if (eq charset 'unknown) -;; (setq char (match-string 0))) -;; (if (or (eq charset 'unknown) -;; (not (or (eq excludes t) (memq charset excludes)))) -;; (let ((slot (assq charset chars))) -;; (if slot -;; (if (not (member char (nthcdr 2 slot))) -;; (let ((count (nth 1 slot))) -;; (setcar (cdr slot) (1+ count)) -;; (if (or (not maxcount) (< count maxcount)) -;; (nconc slot (list char))))) -;; (setq chars (cons (list charset 1 char) chars)))))))) -;; (nreverse chars))) - -;; (defvar last-coding-system-specified nil -;; "Most recent coding system explicitly specified by the user when asked. -;; This variable is set whenever Emacs asks the user which coding system -;; to use in order to write a file. If you set it to nil explicitly, -;; then call `write-region', then afterward this variable will be non-nil -;; only if the user was explicitly asked and specified a coding system.") - -;; (defun select-safe-coding-system (from to &optional default-coding-system) -;; "Ask a user to select a safe coding system from candidates. -;; The candidates of coding systems which can safely encode a text -;; between FROM and TO are shown in a popup window. -;; -;; Optional arg DEFAULT-CODING-SYSTEM specifies a coding system to be -;; checked at first. If omitted, buffer-file-coding-system of the -;; current buffer is used. -;; -;; If the text can be encoded safely by DEFAULT-CODING-SYSTEM, it is -;; returned without any user interaction. -;; -;; Kludgy feature: if FROM is a string, the string is the target text, -;; and TO is ignored." -;; (or default-coding-system -;; (setq default-coding-system buffer-file-coding-system)) -;; (let* ((charsets (if (stringp from) (find-charset-string from) -;; (find-charset-region from to))) -;; (safe-coding-systems (find-coding-systems-for-charsets charsets))) -;; (if (or (not enable-multibyte-characters) -;; (eq (car safe-coding-systems) 'undecided) -;; (eq default-coding-system 'no-conversion) -;; (and default-coding-system -;; (memq (coding-system-base default-coding-system) -;; safe-coding-systems))) -;; default-coding-system -;; -;; ;; At first, change each coding system to the corresponding -;; ;; mime-charset name if it is also a coding system. -;; (let ((l safe-coding-systems) -;; mime-charset) -;; (while l -;; (setq mime-charset (coding-system-get (car l) 'mime-charset)) -;; (if (and mime-charset (coding-system-p mime-charset)) -;; (setcar l mime-charset)) -;; (setq l (cdr l)))) -;; -;; (let ((non-safe-chars (find-multibyte-characters -;; from to 3 -;; (and default-coding-system -;; (coding-system-get default-coding-system -;; 'safe-charsets)))) -;; show-position overlays) -;; (save-excursion -;; ;; Highlight characters that default-coding-system can't encode. -;; (when (integerp from) -;; (goto-char from) -;; (let ((found nil)) -;; (while (and (not found) -;; (re-search-forward "[^\000-\177]" to t)) -;; (setq found (assq (char-charset (preceding-char)) -;; non-safe-chars)))) -;; (forward-line -1) -;; (setq show-position (point)) -;; (save-excursion -;; (while (and (< (length overlays) 256) -;; (re-search-forward "[^\000-\177]" to t)) -;; (let* ((char (preceding-char)) -;; (charset (char-charset char))) -;; (when (assq charset non-safe-chars) -;; (setq overlays (cons (make-overlay (1- (point)) (point)) -;; overlays)) -;; (overlay-put (car overlays) 'face 'highlight)))))) -;; -;; ;; At last, ask a user to select a proper coding system. -;; (unwind-protect -;; (save-window-excursion -;; (when show-position -;; ;; At first, be sure to show the current buffer. -;; (set-window-buffer (selected-window) (current-buffer)) -;; (set-window-start (selected-window) show-position)) -;; ;; Then, show a helpful message. -;; (with-output-to-temp-buffer "*Warning*" -;; (save-excursion -;; (set-buffer standard-output) -;; (insert "The target text contains the following non ASCII character(s):\n") -;; (let ((len (length non-safe-chars)) -;; (shown 0)) -;; (while (and non-safe-chars (< shown 3)) -;; (when (> (length (car non-safe-chars)) 2) -;; (setq shown (1+ shown)) -;; (insert (format "%25s: " (car (car non-safe-chars)))) -;; (let ((l (nthcdr 2 (car non-safe-chars)))) -;; (while l -;; (if (or (stringp (car l)) (char-valid-p (car l))) -;; (insert (car l))) -;; (setq l (cdr l)))) -;; (if (> (nth 1 (car non-safe-chars)) 3) -;; (insert "...")) -;; (insert "\n")) -;; (setq non-safe-chars (cdr non-safe-chars))) -;; (if (< shown len) -;; (insert (format "%27s\n" "...")))) -;; (insert (format "\ -;; These can't be encoded safely by the coding system %s. -;; -;; Please select one from the following safe coding systems:\n" -;; default-coding-system)) -;; (let ((pos (point)) -;; (fill-prefix " ")) -;; (mapcar (function (lambda (x) (princ " ") (princ x))) -;; safe-coding-systems) -;; (fill-region-as-paragraph pos (point))))) -;; -;; ;; Read a coding system. -;; (let* ((safe-names (mapcar (lambda (x) (list (symbol-name x))) -;; safe-coding-systems)) -;; (name (completing-read -;; (format "Select coding system (default %s): " -;; (car safe-coding-systems)) -;; safe-names nil t nil nil -;; (car (car safe-names))))) -;; (setq last-coding-system-specified (intern name)) -;; (if (integerp (coding-system-eol-type default-coding-system)) -;; (setq last-coding-system-specified -;; (coding-system-change-eol-conversion -;; last-coding-system-specified -;; (coding-system-eol-type default-coding-system)))) -;; last-coding-system-specified)) -;; (kill-buffer "*Warning*") -;; (while overlays -;; (delete-overlay (car overlays)) -;; (setq overlays (cdr overlays))))))))) - -;; (setq select-safe-coding-system-function 'select-safe-coding-system) - -;; (defun select-message-coding-system () -;; "Return a coding system to encode the outgoing message of the current buffer. -;; It at first tries the first coding system found in these variables -;; in this order: -;; (1) local value of `buffer-file-coding-system' -;; (2) value of `sendmail-coding-system' -;; (3) value of `default-buffer-file-coding-system' -;; (4) value of `default-sendmail-coding-system' -;; If the found coding system can't encode the current buffer, -;; or none of them are bound to a coding system, -;; it asks the user to select a proper coding system." -;; (let ((coding (or (and (local-variable-p 'buffer-file-coding-system) -;; buffer-file-coding-system) -;; sendmail-coding-system -;; default-buffer-file-coding-system -;; default-sendmail-coding-system))) -;; (if (eq coding 'no-conversion) -;; ;; We should never use no-conversion for outgoing mails. -;; (setq coding nil)) -;; (if (fboundp select-safe-coding-system-function) -;; (funcall select-safe-coding-system-function -;; (point-min) (point-max) coding) -;; coding))) ;;; Language support stuff. @@ -1057,7 +680,7 @@ to using the function `set-language-environment'." The default status is as follows: - The default value of buffer-file-coding-system is nil. + The default value of `buffer-file-coding-system' is nil. The default coding system for process I/O is nil. The default value for the command `set-terminal-coding-system' is nil. The default value for the command `set-keyboard-coding-system' is nil. diff --git a/lisp/mule/mule-coding.el b/lisp/mule/mule-coding.el index 7ea0183..281e980 100644 --- a/lisp/mule/mule-coding.el +++ b/lisp/mule/mule-coding.el @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -31,8 +31,7 @@ (defun coding-system-force-on-output (coding-system register) "Return the 'force-on-output property of CODING-SYSTEM for the specified REGISTER." - (unless (integerp register) - (signal 'wrong-type-argument (list 'integerp register))) + (check-type register integer) (coding-system-property coding-system (case register diff --git a/lisp/mule/mule-misc.el b/lisp/mule/mule-misc.el index 2a411dd..eeecb2f 100644 --- a/lisp/mule/mule-misc.el +++ b/lisp/mule/mule-misc.el @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -220,25 +220,6 @@ because its `find-charset-string' ignores ASCII charset." ; )))) -;;; Commands - -(defun set-buffer-process-coding-system (decoding encoding) - "Set coding systems for the process associated with the current buffer. -DECODING is the coding system to be used to decode input from the process, -ENCODING is the coding system to be used to encode output to the process. - -For a list of possible values of CODING-SYSTEM, use \\[list-coding-systems]." - (interactive - "zCoding-system for process input: \nzCoding-system for process output: ") - (let ((proc (get-buffer-process (current-buffer)))) - (if (null proc) - (error "no process") - (check-coding-system decoding) - (check-coding-system encoding) - (set-process-coding-system proc decoding encoding))) - (force-mode-line-update)) - - ;;; Language environments ;; (defvar current-language-environment nil) @@ -314,13 +295,13 @@ when the language environment is made current." (coding-system-property coding-system prop) (error nil)))) -(defun coding-system-put (coding-system prop val) - "Change value in CODING-SYSTEM's property list PROP to VAL." +(defun coding-system-put (coding-system prop value) + "Change value in CODING-SYSTEM's property list PROP to VALUE." (put (coding-system-name coding-system) 'coding-system-property (plist-put (get (coding-system-name coding-system) 'coding-system-property) - prop val))) + prop value))) (defun coding-system-category (coding-system) "Return the coding category of CODING-SYSTEM." @@ -356,5 +337,5 @@ when the language environment is made current." ((= dim 2) 'iso-8-2) (t 'iso-8-designate)) )))))))) - + ;;; mule-misc.el ends here diff --git a/lisp/mule/thai-xtis.el b/lisp/mule/thai-xtis.el index 1092a05..1036597 100644 --- a/lisp/mule/thai-xtis.el +++ b/lisp/mule/thai-xtis.el @@ -342,8 +342,8 @@ 'tis-620 'ccl "external=tis620, internal=thai-xtis" `(mnemonic "TIS620" - decode ,ccl-decode-thai-xtis - encode ,ccl-encode-thai-xtis)) + decode ccl-decode-thai-xtis + encode ccl-encode-thai-xtis)) (coding-system-put 'tis-620 'category 'iso-8-1)) (make-coding-system 'tis-620 4 ?T "external=tis620, internal=thai-xtis" diff --git a/lisp/mule/vietnamese.el b/lisp/mule/vietnamese.el index e25c833..a3f6540 100644 --- a/lisp/mule/vietnamese.el +++ b/lisp/mule/vietnamese.el @@ -209,8 +209,8 @@ Both tables are indexed by the position code of Vietnamese characters.") 'viscii 'ccl "Coding-system used for VISCII 1.1." `(mnemonic "VISCII" - decode ,ccl-decode-viscii - encode ,ccl-encode-viscii)) + decode ccl-decode-viscii + encode ccl-encode-viscii)) ;; it is not correct, but XEmacs doesn't have `ccl' category... (coding-system-put 'viscii 'category 'iso-8-1) @@ -229,8 +229,8 @@ Both tables are indexed by the position code of Vietnamese characters.") 'vscii 'ccl "Coding-system used for VSCII 1.1." `(mnemonic "VSCII" - decode ,ccl-decode-vscii - encode ,ccl-encode-vscii)) + decode ccl-decode-vscii + encode ccl-encode-vscii)) ;; (make-coding-system ;; 'vietnamese-vscii 4 ?v @@ -264,12 +264,12 @@ Both tables are indexed by the position code of Vietnamese characters.") ;; For VISCII users (set-charset-ccl-program 'vietnamese-viscii-lower - ccl-encode-viscii-font) + 'ccl-encode-viscii-font) (set-charset-ccl-program 'vietnamese-viscii-upper - ccl-encode-viscii-font) + 'ccl-encode-viscii-font) ;; For VSCII users -(set-charset-ccl-program 'vietnamese-viscii-lower ccl-encode-vscii-font) -(set-charset-ccl-program 'vietnamese-viscii-upper ccl-encode-vscii-font) +(set-charset-ccl-program 'vietnamese-viscii-lower 'ccl-encode-vscii-font) +(set-charset-ccl-program 'vietnamese-viscii-upper 'ccl-encode-vscii-font) ;; (setq font-ccl-encoder-alist ;; (cons (cons "viscii" ccl-encode-viscii-font) font-ccl-encoder-alist)) diff --git a/lisp/multicast.el b/lisp/multicast.el index efd3f80..bcc6d08 100644 --- a/lisp/multicast.el +++ b/lisp/multicast.el @@ -45,7 +45,7 @@ (defun open-multicast-group (name buffer address) "Open a multicast connection on the specified address. -Returns a subprocess-object to represent the connection. +Returns a process object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. Args are NAME BUFFER ADDRESS. NAME is a name for the process. It is modified if necessary to make it unique. diff --git a/lisp/mwheel.el b/lisp/mwheel.el index 57725f2..03d4392 100644 --- a/lisp/mwheel.el +++ b/lisp/mwheel.el @@ -100,6 +100,7 @@ This can be slightly disconcerting, but some people may prefer it." ;;;###autoload (defun mwheel-install () "Enable mouse wheel support." + (interactive) (let ((keys '([(mouse-4)] [(shift mouse-4)] [(mouse-5)] [(shift mouse-5)]))) ;; This condition-case is here because Emacs 19 will throw an error ;; if you try to define a key that it does not know about. I for one diff --git a/lisp/obsolete.el b/lisp/obsolete.el index 635f368..8e8571f 100644 --- a/lisp/obsolete.el +++ b/lisp/obsolete.el @@ -57,7 +57,7 @@ This makes referencing or setting OLDVAR equivalent to referencing or setting NEWVAR and marks OLDVAR as obsolete. If OLDVAR was bound and NEWVAR was not, Set NEWVAR to OLDVAR. -Note: Use this before any other references (defvar/defcustom) to NEWVAR" +Note: Use this before any other references (defvar/defcustom) to NEWVAR." (let ((needs-setting (and (boundp oldvar) (not (boundp newvar)))) (value (and (boundp oldvar) (symbol-value oldvar)))) (defvaralias oldvar newvar) @@ -338,13 +338,13 @@ Multibyte characters are concerned." "Return a vector of characters in STRING." (mapvector #'identity string)) -(defun store-substring (string idx obj) - "Embed OBJ (string or character) at index IDX of STRING." - (let* ((str (cond ((stringp obj) obj) - ((characterp obj) (char-to-string obj)) +(defun store-substring (string idx object) + "Embed OBJECT (string or character) at index IDX of STRING." + (let* ((str (cond ((stringp object) object) + ((characterp object) (char-to-string object)) (t (error "Invalid argument (should be string or character): %s" - obj)))) + object)))) (string-len (length string)) (len (length str)) (i 0)) diff --git a/lisp/package-admin.el b/lisp/package-admin.el index 333d303..2f971ea 100644 --- a/lisp/package-admin.el +++ b/lisp/package-admin.el @@ -42,9 +42,9 @@ 'package-admin-install-function-mswindows 'package-admin-default-install-function) "The function to call to install a package. -Three args are passed: FILENAME PKG-DIR BUF +Three args are passed: FILENAME PKG-DIR BUFFER Install package FILENAME into directory PKG-DIR, with any messages output -to buffer BUF.") +to buffer BUFFER.") (defvar package-admin-error-messages '( "No space left on device" @@ -123,31 +123,31 @@ The optional `pkg-dir' can be used to override the default package hierarchy ;; rest of command line follows package-admin-xemacs file destination))) -(defun package-admin-install-function-mswindows (file pkg-dir buf) - "Install function for mswindows" +(defun package-admin-install-function-mswindows (file pkg-dir buffer) + "Install function for mswindows." (let ((default-directory (file-name-as-directory pkg-dir))) (unless (file-directory-p default-directory) (make-directory default-directory t)) - (call-process "minitar" nil buf t file))) + (call-process "minitar" nil buffer t file))) -(defun package-admin-default-install-function (file pkg-dir buf) +(defun package-admin-default-install-function (filename pkg-dir buffer) "Default function to install a package. Install package FILENAME into directory PKG-DIR, with any messages output -to buffer BUF." +to BUFFER." (let* ((pkg-dir (file-name-as-directory pkg-dir)) (default-directory pkg-dir) - (filename (expand-file-name file))) + (filename (expand-file-name filename))) (unless (file-directory-p pkg-dir) (make-directory pkg-dir t)) ;; Don't assume GNU tar. - (if (shell-command (concat "gunzip -c " filename " | tar xvf -") buf) + (if (shell-command (concat "gunzip -c " filename " | tar xvf -") buffer) 0 1) )) ; (call-process "add-big-package.sh" ; nil -; buf +; buffer ; t ; ;; rest of command line follows ; package-admin-xemacs file pkg-dir)) @@ -180,7 +180,7 @@ or return a location appropriate for the package otherwise." (if (eq package 'xemacs-base) (car (last late-packages)) (package-admin-get-install-dir 'xemacs-base nil nil))))))) - + (defun package-admin-get-manifest-file (pkg-topdir package) @@ -294,7 +294,7 @@ is the top-level directory under which the package was installed." ;; Create pkginfo, if necessary (if (not (file-directory-p pathname)) (make-directory pathname)) - (setq pathname (expand-file-name + (setq pathname (expand-file-name (concat "MANIFEST." package-name) pathname)) (save-excursion @@ -435,9 +435,9 @@ PACKAGE is a symbol, not a string." ;; Note, user might have removed the file! (condition-case () (delete-file file) - (error nil))) ;; We may want to turn the error into a Warning? + (error nil))) ;; We may want to turn the error into a Warning? (forward-line 1)) - + ;; Delete empty directories. (if dirs (let ( (orig-default-directory default-directory) @@ -473,7 +473,7 @@ PACKAGE is a symbol, not a string." (lambda (dir) (condition-case () (delete-directory dir))) - dirs)) + dirs)) (setq default-directory orig-default-directory) ))) ) @@ -499,7 +499,7 @@ PACKAGE is a symbol, not a string." (package-admin-rmtree package-lispdir) (message "Removing old lisp directory \"%s\" ... done" package-lispdir) - )) + )) ;; Delete the package from the database of installed packages. (package-delete-name package))) diff --git a/lisp/package-get.el b/lisp/package-get.el index b837861..88be9d3 100644 --- a/lisp/package-get.el +++ b/lisp/package-get.el @@ -184,6 +184,7 @@ order until the package is found. As a special case, `site-name' can be (defcustom package-get-download-sites '( ;; North America + ("Pre-Releases" "ftp.xemacs.org" "pub/xemacs/beta/experimental/packages") ("xemacs.org" "ftp.xemacs.org" "pub/xemacs/packages") ("crc.ca (Canada)" "ftp.crc.ca" "pub/packages/editors/xemacs/packages") ("ualberta.ca (Canada)" "sunsite.ualberta.ca" "pub/Mirror/xemacs/packages") @@ -457,11 +458,11 @@ used interactively, for example from a mail or news buffer." (package-get-update-base-entries content-beg content-end) (message "Updated package-get database")))) -(defun package-get-update-base-entries (beg end) +(defun package-get-update-base-entries (start end) "Update the package-get database with the entries found between -BEG and END in the current buffer." +START and END in the current buffer." (save-excursion - (goto-char beg) + (goto-char start) (if (not (re-search-forward "^(package-get-update-base-entry" nil t)) (error "Buffer does not contain package-get database entries")) (beginning-of-line) diff --git a/lisp/packages.el b/lisp/packages.el index 11162e4..780d9a0 100644 --- a/lisp/packages.el +++ b/lisp/packages.el @@ -355,7 +355,7 @@ This function is basically a wrapper over `locate-file'." (and version-directory (list version-directory)) (and site-directory (list site-directory))))) -(defvar packages-special-base-regexp "^\\(etc\\|info\\|lisp\\|lib-src\\|bin\\|pkginfo\\)$" +(defvar packages-special-base-regexp "^\\(etc\\|info\\|man\\|lisp\\|lib-src\\|bin\\|pkginfo\\)$" "Special subdirectories of packages.") (defvar packages-no-package-hierarchy-regexp @@ -418,7 +418,7 @@ DEFAULT is a default list of packages." (or default (let ((packages '())) (while package-locations - (packages-deconstruct + (packages-deconstruct (car package-locations) #'(lambda (name a-time thunk) (if (and (eq time a-time) @@ -529,12 +529,12 @@ Call HANDLE on each file off definitions of PACKAGE-LISP there." (defun packages-load-package-dumped-lisps (package-load-path) "Load dumped-lisp.el files along a load path. -Also load files off PACKAGE-LISP definitions there" +Also load files off PACKAGE-LISP definitions there." (packages-handle-package-dumped-lisps #'load package-load-path)) (defun packages-collect-package-dumped-lisps (package-load-path) "Load dumped-lisp.el files along a load path. -Return list of files off PACKAGE-LISP definitions there" +Return list of files off PACKAGE-LISP definitions there." (let ((*files* '())) (packages-handle-package-dumped-lisps #'(lambda (file) diff --git a/lisp/paragraphs.el b/lisp/paragraphs.el index cb6025c..0d209a9 100644 --- a/lisp/paragraphs.el +++ b/lisp/paragraphs.el @@ -99,8 +99,7 @@ to paragraphs. The fill functions insert and delete only soft newlines." (point) (1+ (point)))))))))))) (setq use-hard-newlines t))) -;; XEmacs - use purecopy -(defconst paragraph-start (purecopy "[ \t\n\f]") "\ +(defconst paragraph-start "[ \t\n\f]" "\ *Regexp for beginning of a line that starts OR separates paragraphs. This regexp should match lines that separate paragraphs and should also match lines that start a paragraph @@ -123,8 +122,7 @@ hard newline are considered to match.") ;; something very minimal, even including "." (which makes every hard newline ;; start a new paragraph). -;; XEmacs -- use purecopy -(defconst paragraph-separate (purecopy "[ \t\f]*$") "\ +(defconst paragraph-separate "[ \t\f]*$" "\ *Regexp for beginning of a line that separates paragraphs. If you change this, you may have to change paragraph-start also. @@ -133,8 +131,7 @@ the beginning of the line, so it should not use \"^\" as an anchor. This ensures that the paragraph functions will work equally within a region of text indented by a margin setting.") -;; XEmacs -- use purecopy -(defconst sentence-end (purecopy "[.?!][]\"')}]*\\($\\| $\\|\t\\| \\)[ \t\n]*") "\ +(defconst sentence-end "[.?!][]\"')}]*\\($\\| $\\|\t\\| \\)[ \t\n]*" "\ *Regexp describing the end of a sentence. All paragraph boundaries also end sentences, regardless. @@ -142,8 +139,7 @@ In order to be recognized as the end of a sentence, the ending period, question mark, or exclamation point must be followed by two spaces, unless it's inside some sort of quotes or parenthesis.") -;; XEmacs -- use purecopy -(defconst page-delimiter (purecopy "^\014") "\ +(defconst page-delimiter "^\014" "\ *Regexp describing line-beginnings that separate pages.") (defvar paragraph-ignore-fill-prefix nil "\ diff --git a/lisp/paths.el b/lisp/paths.el index 1636a56..d83d54c 100644 --- a/lisp/paths.el +++ b/lisp/paths.el @@ -91,7 +91,7 @@ (defvar mh-lib nil "Directory of MH library.") -(defvar rmail-file-name (purecopy "~/RMAIL") +(defvar rmail-file-name "~/RMAIL" "Name of user's primary mail file.") (defconst rmail-spool-directory nil @@ -104,7 +104,7 @@ Its name should end with a slash.") (defconst remote-shell-program nil "Program used to execute shell commands on a remote machine.") -(defconst term-file-prefix (purecopy "term/") +(defconst term-file-prefix "term/" "If non-nil, Emacs startup does (load (concat term-file-prefix (getenv \"TERM\"))) You may set this variable to nil in your `.emacs' file if you do not wish the terminal-initialization file to be loaded.") @@ -112,7 +112,7 @@ the terminal-initialization file to be loaded.") (defconst manual-program nil "Program to run to print man pages.") -(defconst abbrev-file-name (purecopy "~/.abbrev_defs") +(defconst abbrev-file-name "~/.abbrev_defs" "*Default name of file to read abbrevs from.") (defconst directory-abbrev-alist nil) diff --git a/lisp/printer.el b/lisp/printer.el index 8a12a5a..2a9cc7b 100644 --- a/lisp/printer.el +++ b/lisp/printer.el @@ -134,32 +134,33 @@ user-id User logon id user-name User full name" (error "not yet implemented")) -(defun generic-print-buffer (&optional buf) - "Print buffer BUF using a printing method appropriate to the O.S. being run. +(defun generic-print-buffer (&optional buffer) + "Print buffer BUFFER using a printing method appropriate to the O.S. being run. Under Unix, `lpr' is normally used to spool out a no-frills version of the buffer, or the `ps-print' package is used to pretty-print the buffer to a PostScript printer. Under MS Windows, the built-in printing support is used. -If BUF is nil or omitted, the current buffer is used." +If BUFFER is nil or omitted, the current buffer is used." (interactive) - (generic-print-region (point-min buf) (point-max buf) buf)) + (generic-print-region (point-min buffer) (point-max buffer) buffer)) -(defun generic-print-region (b e &optional buf) +(defun generic-print-region (start end &optional buffer) "Print region using a printing method appropriate to the O.S. being run. -The region between B and E of BUF (defaults to the current buffer) is printed. +The region between START and END of BUFFER (defaults to the current +buffer) is printed. Under Unix, `lpr' is normally used to spool out a no-frills version of the buffer, or the `ps-print' package is used to pretty-print the buffer to a PostScript printer. Under MS Windows, the built-in printing support is used." (cond ((valid-specifier-tag-p 'msprinter) (let (d f) - (setq buf (decode-buffer buf)) + (setq buffer (decode-buffer buffer)) (unwind-protect (progn (setq d (make-device 'msprinter printer-name)) (setq f (make-frame - (list* 'name (concat (substitute ?_ ?. - (buffer-name buf)) + (list* 'name (concat (substitute ?_ ?. + (buffer-name buffer)) " - XEmacs") '(menubar-visible-p nil has-modeline-p nil @@ -175,12 +176,12 @@ PostScript printer. Under MS Windows, the built-in printing support is used." (pixel-vertical-clip-threshold (/ vertdpi 2)) (last-end 0) done) - (set-window-buffer w (or buf (current-buffer))) - (set-window-start w b) + (set-window-buffer w (or buffer (current-buffer))) + (set-window-start w start) (while (not done) (redisplay-frame f) (print-job-eject-page f) - (let ((end (window-end w)) + (let ((this-end (window-end w)) (pixvis (window-last-line-visible-height w))) ;; in case we get stuck somewhere, bow out ;; rather than printing an infinite number of @@ -188,14 +189,14 @@ PostScript printer. Under MS Windows, the built-in printing support is used." ;; bigger than an entire page. but we really ;; need this check here. we should be more ;; clever in our check, to deal with this case. - (if (or (= end last-end) + (if (or (= this-end last-end) ;; #### fuckme! window-end returns a value ;; outside of the valid range of buffer ;; positions!!! - (>= end e)) + (>= this-end end)) (setq done t) - (setq last-end end) - (set-window-start w end) + (setq last-end this-end) + (set-window-start w this-end) (if pixvis (save-selected-window (select-window w) @@ -207,5 +208,5 @@ PostScript printer. Under MS Windows, the built-in printing support is used." ))) ((and (not (eq system-type 'windows-nt)) (fboundp 'lpr-buffer)) - (lpr-region buf)) + (lpr-region buffer)) (t (error "No print support available")))) diff --git a/lisp/process.el b/lisp/process.el index e078009..e287189 100644 --- a/lisp/process.el +++ b/lisp/process.el @@ -20,7 +20,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -258,7 +258,7 @@ In either case, the output is inserted after point (leaving mark after it)." (if (and output-buffer (not (or (bufferp output-buffer) (stringp output-buffer)))) (progn (barf-if-buffer-read-only) - (push-mark) + (push-mark nil (not (interactive-p))) ;; We do not use -f for csh; we will not support broken use of ;; .cshrcs. Even the BSD csh manual says to use ;; "if ($?prompt) exit" before things which are not useful @@ -405,7 +405,7 @@ Remaining arguments are strings to give program as arguments." (defun open-network-stream (name buffer host service &optional protocol) "Open a TCP connection for a service to a host. -Returns a subprocess-object to represent the connection. +Returns a process object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. Args are NAME BUFFER HOST SERVICE. NAME is name for process. It is modified if necessary to make it unique. diff --git a/lisp/replace.el b/lisp/replace.el index 990625b..6d7c7ee 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -56,7 +56,7 @@ That becomes the \"string to replace\".") (defvar replace-search-function (lambda (str limit) (search-forward str limit t)) - "Function used by perform-replace to search forward for a string. It will be + "Function used by perform-replace to search forward for a string. It will be called with two arguments: the string to search for and a limit bounding the search.") @@ -322,7 +322,7 @@ Alternatively, click \\[occur-mode-mouse-goto] on an item to go to it. (defun occur-mode-mouse-goto (event) "Go to the occurrence highlighted by mouse. -This function is only reasonable when bound to a mouse key in the occur buffer" +This function should be bound to a mouse key in the `*Occur*' buffer." (interactive "e") (let ((window-save (selected-window)) (frame-save (selected-frame))) @@ -498,7 +498,7 @@ It serves as a menu to find any of the occurrences in this buffer. (insert "--------\n")) (setq first nil) (insert-buffer-substring buffer start end) - (set-marker final-context-start + (set-marker final-context-start (- (point) (- end (match-end 0)))) (backward-char (- end start)) (setq tem (if (< nlines 0) (- nlines) nlines)) @@ -511,7 +511,7 @@ It serves as a menu to find any of the occurrences in this buffer. (if (null tag) (setq tag (format "%5d" this-linenum))) (insert tag ?:) - ;; FSFmacs -- + ;; FSFmacs -- ;; we handle this using mode-motion-highlight-line, above. ;; (put-text-property (save-excursion ;; (beginning-of-line) @@ -546,8 +546,7 @@ It serves as a menu to find any of the occurrences in this buffer. ;; It would be nice to use \\[...], but there is no reasonable way ;; to make that display both SPC and Y. (defconst query-replace-help - (purecopy - "Type Space or `y' to replace one match, Delete or `n' to skip to next, + "Type Space or `y' to replace one match, Delete or `n' to skip to next, RET or `q' to exit, Period to replace one match and exit, Comma to replace but not move point immediately, C-r to enter recursive edit (\\[exit-recursive-edit] to get out again), @@ -555,7 +554,7 @@ C-w to delete match and recursive edit, C-l to clear the frame, redisplay, and offer same replacement again, ! to replace all remaining matches with no more questions, ^ to move point back to previous match." -) + "Help message while in query-replace") (defvar query-replace-map nil @@ -596,7 +595,7 @@ The valid answers include `act', `skip', `act-and-show', (define-key map "\C-]" 'quit) ;FSFmacs (define-key map "\e" 'exit-prefix) (define-key map [escape] 'exit-prefix) - + (setq query-replace-map map))) ;; isearch-mode is dumped, so don't autoload. @@ -624,15 +623,16 @@ just as `query-replace' does. Instead, write a simple loop like this: (while (re-search-forward \"foo[ \t]+bar\" nil t) (replace-match \"foobar\" nil nil)) which will run faster and probably do exactly what you want. -When searching for a match, this function use `replace-search-function' and `replace-re-search-function'" +When searching for a match, this function uses +`replace-search-function' and `replace-re-search-function'." (or map (setq map query-replace-map)) (let* ((event (make-event)) (nocasify (not (and case-fold-search case-replace (string-equal from-string (downcase from-string))))) (literal (not regexp-flag)) - (search-function (if regexp-flag - replace-re-search-function + (search-function (if regexp-flag + replace-re-search-function replace-search-function)) (search-string from-string) (real-match-data nil) ; the match data for the current match @@ -692,7 +692,7 @@ When searching for a match, this function use `replace-search-function' and `rep (if (or (eobp) (and limit (>= (point) limit))) nil - ;; Don't replace the null string + ;; Don't replace the null string ;; right after end of previous replacement. (forward-char 1) (let ((case-fold-search qr-case-fold-search)) @@ -705,7 +705,7 @@ When searching for a match, this function use `replace-search-function' and `rep ;; Before we make the replacement, decide whether the search string ;; can match again just after this match. (if regexp-flag - (progn + (progn (setq match-again (looking-at search-string)) ;; XEmacs addition (store-match-data real-match-data))) diff --git a/lisp/select.el b/lisp/select.el index 479e548..3905641 100644 --- a/lisp/select.el +++ b/lisp/select.el @@ -20,7 +20,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -28,7 +28,7 @@ ;;; Commentary: -;; This file is dumped with XEmacs +;; This file is dumped with XEmacs ;;; Code: @@ -40,7 +40,7 @@ COMPOUND_TEXT and STRING are the most commonly used data types. If a list is provided, the types are tried in sequence until there is a successful conversion.") -(defvar selection-sets-clipboard nil +(defvar selection-sets-clipboard nil "Controls the selection's relationship to the clipboard. When non-nil, any operation that sets the primary selection will also set the clipboard.") @@ -86,7 +86,7 @@ This will do nothing under anything other than X.") "Return the value of a window-system selection. The argument TYPE (default `PRIMARY') says which selection, and the argument DATA-TYPE (default `STRING', or `COMPOUND_TEXT' under Mule) -says how to convert the data. Returns NIL if there is no selection" +says how to convert the data. Returns NIL if there is no selection." (condition-case nil (get-selection type data-type) (t nil))) (defun get-selection (&optional type data-type) @@ -623,7 +623,7 @@ nil if this is impossible, or a suitable representation otherwise." (defun select-convert-from-integer (selection type value) (cond ((integerp value) ; Integer value) - + ((and (consp value) ; (integer . integer) (integerp (car value)) (integerp (cdr value))) @@ -633,7 +633,7 @@ nil if this is impossible, or a suitable representation otherwise." (< (cdr value) 0)) (cdr value) value))) - + ((and (listp value) ; (integer integer) (eq (length value) 2) (integerp (car value)) @@ -644,21 +644,21 @@ nil if this is impossible, or a suitable representation otherwise." (< (cdr value) 0)) (- (cadr value)) (cons (car value) (cadr value))))) - + ((listp value) ; list (if (cdr value) (mapcar '(lambda (x) (select-convert-from-integer selection type x)) value) (select-convert-from-integer selection type (car value)))) - + ((vectorp value) ; vector (if (eq (length value) 1) (select-convert-from-integer selection type (aref value 0)) (mapvector '(lambda (x) (select-convert-from-integer selection type x)) value))) - + (t nil) )) @@ -740,7 +740,7 @@ nil if this is impossible, or a suitable representation otherwise." (defun select-buffer-killed-text (selection type value buffer) (select-buffer-killed-default selection type value buffer)) - + ;; Types listed in here can be selections of XEmacs (setq selection-converter-out-alist '((TEXT . select-convert-to-text) diff --git a/lisp/simple.el b/lisp/simple.el index c8d5e1f..eb9ebee 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -108,14 +108,14 @@ This does not apply to \"yanked\" strings." If REGEXP-FLAG is non-nil, disregard letters preceded by `\\' (but not `\\\\') since they have special meaning in a regexp." (let ((case-fold-search nil)) - (not (string-match (if regexp-flag + (not (string-match (if regexp-flag "\\(^\\|\\\\\\\\\\|[^\\]\\)[A-Z]" "[A-Z]") string)) )) (defmacro with-search-caps-disable-folding (string regexp-flag &rest body) "\ -Eval BODY with `case-fold-search' let to nil if `search-caps-disable-folding' +Eval BODY with `case-fold-search' let to nil if `search-caps-disable-folding' is non-nil, and if STRING (either a string or a regular expression according to REGEXP-FLAG) contains uppercase letters." `(let ((case-fold-search @@ -124,27 +124,27 @@ to REGEXP-FLAG) contains uppercase letters." case-fold-search))) ,@body)) (put 'with-search-caps-disable-folding 'lisp-indent-function 2) -(put 'with-search-caps-disable-folding 'edebug-form-spec +(put 'with-search-caps-disable-folding 'edebug-form-spec '(sexp sexp &rest form)) -(defmacro with-interactive-search-caps-disable-folding (string regexp-flag +(defmacro with-interactive-search-caps-disable-folding (string regexp-flag &rest body) "Same as `with-search-caps-disable-folding', but only in the case of a function called interactively." `(let ((case-fold-search - (if (and (interactive-p) + (if (and (interactive-p) case-fold-search search-caps-disable-folding) (no-upper-case-p ,string ,regexp-flag) case-fold-search))) ,@body)) (put 'with-interactive-search-caps-disable-folding 'lisp-indent-function 2) -(put 'with-interactive-search-caps-disable-folding 'edebug-form-spec +(put 'with-interactive-search-caps-disable-folding 'edebug-form-spec '(sexp sexp &rest form)) -(defun newline (&optional arg) +(defun newline (&optional n) "Insert a newline, and move to left margin of the new line if it's blank. The newline is marked with the text-property `hard'. -With arg, insert that many newlines. +With optional arg N, insert that many newlines. In Auto Fill mode, if no numeric arg, break the preceding line if it's long." (interactive "*P") (barf-if-buffer-read-only nil (point)) @@ -178,16 +178,16 @@ In Auto Fill mode, if no numeric arg, break the preceding line if it's long." ;; Don't auto-fill if we have a numeric argument. ;; Also not if flag is true (it would fill wrong line); ;; there is no need to since we're at BOL. - (auto-fill-function (if (or arg flag) nil auto-fill-function))) + (auto-fill-function (if (or n flag) nil auto-fill-function))) (unwind-protect - (self-insert-command (prefix-numeric-value arg)) + (self-insert-command (prefix-numeric-value n)) ;; If we get an error in self-insert-command, put point at right place. (if flag (forward-char 1)))) ;; If we did *not* get an error, cancel that forward-char. (if flag (backward-char 1)) ;; Mark the newline(s) `hard'. (if use-hard-newlines - (let* ((from (- (point) (if arg (prefix-numeric-value arg) 1))) + (let* ((from (- (point) (if n (prefix-numeric-value n) 1))) (sticky (get-text-property from 'end-open))) ; XEmacs (put-text-property from (point) 'hard 't) ;; If end-open is not "t", add 'hard to end-open list @@ -219,7 +219,7 @@ In Auto Fill mode, if no numeric arg, break the preceding line if it's long." (put-text-property from (point) 'rear-nonsticky (cons 'hard sticky))))) -(defun open-line (arg) +(defun open-line (n) "Insert a newline and leave point before it. If there is a fill prefix and/or a left-margin, insert them on the new line if the line would have been blank. @@ -228,14 +228,14 @@ With arg N, insert N newlines." (let* ((do-fill-prefix (and fill-prefix (bolp))) (do-left-margin (and (bolp) (> (current-left-margin) 0))) (loc (point))) - (newline arg) + (newline n) (goto-char loc) - (while (> arg 0) + (while (> n 0) (cond ((bolp) (if do-left-margin (indent-to (current-left-margin))) (if do-fill-prefix (insert fill-prefix)))) (forward-line 1) - (setq arg (1- arg))) + (setq n (1- n))) (goto-char loc) (end-of-line))) @@ -827,33 +827,33 @@ With prefix argument, insert the result to the current buffer." (if eval-expression-insert-value (current-buffer) t))) ;; XEmacs -- extra parameter (variant, but equivalent logic) -(defun edit-and-eval-command (prompt command &optional history) - "Prompting with PROMPT, let user edit COMMAND and eval result. -COMMAND is a Lisp expression. Let user edit that expression in +(defun edit-and-eval-command (prompt form &optional history) + "Prompting with PROMPT, let user edit FORM and eval result. +FORM is a Lisp expression. Let user edit that expression in the minibuffer, then read and evaluate the result." - (let ((command (read-expression prompt - ;; first try to format the thing readably; - ;; and if that fails, print it normally. - (condition-case () - (let ((print-readably t)) - (prin1-to-string command)) - (error (prin1-to-string command))) - (or history '(command-history . 1))))) + (let ((form (read-expression prompt + ;; first try to format the thing readably; + ;; and if that fails, print it normally. + (condition-case () + (let ((print-readably t)) + (prin1-to-string form)) + (error (prin1-to-string form))) + (or history '(command-history . 1))))) (or history (setq history 'command-history)) (if (consp history) (setq history (car history))) (if (eq history t) nil - ;; If command was added to the history as a string, + ;; If form was added to the history as a string, ;; get rid of that. We want only evallable expressions there. (if (stringp (car (symbol-value history))) (set history (cdr (symbol-value history)))) - ;; If command to be redone does not match front of history, + ;; If form to be redone does not match front of history, ;; add it to the history. - (or (equal command (car (symbol-value history))) - (set history (cons command (symbol-value history))))) - (eval command))) + (or (equal form (car (symbol-value history))) + (set history (cons form (symbol-value history))))) + (eval form))) (defun repeat-complex-command (arg) "Edit and re-evaluate last complex command, or ARGth from last. @@ -880,21 +880,21 @@ to get different commands to edit and resubmit." ;; next-complete-history-element ;; previous-complete-history-element -(defun goto-line (arg) - "Goto line ARG, counting from line 1 at beginning of buffer." +(defun goto-line (line) + "Goto line LINE, counting from line 1 at beginning of buffer." (interactive "NGoto line: ") - (setq arg (prefix-numeric-value arg)) + (setq line (prefix-numeric-value line)) (save-restriction (widen) (goto-char 1) (if (eq selective-display t) - (re-search-forward "[\n\C-m]" nil 'end (1- arg)) - (forward-line (1- arg))))) + (re-search-forward "[\n\C-m]" nil 'end (1- line)) + (forward-line (1- line))))) ;Put this on C-x u, so we can force that rather than C-_ into startup msg (define-function 'advertised-undo 'undo) -(defun undo (&optional arg) +(defun undo (&optional count) "Undo some previous changes. Repeat this command to undo more changes. A numeric argument serves as a repeat count." @@ -910,7 +910,7 @@ A numeric argument serves as a repeat count." (eq (current-buffer) last-undo-buffer)) ; XEmacs (progn (undo-start) (undo-more 1))) - (undo-more (or arg 1)) + (undo-more (or count 1)) ;; Don't specify a position in the undo record for the undo command. ;; Instead, undoing this should move point to where the change is. (let ((tail buffer-undo-list) @@ -1090,16 +1090,16 @@ Repeating \\[universal-argument] without digits or minus sign ;; XEmacs -- keep zmacs-region active. -(defun forward-to-indentation (arg) - "Move forward ARG lines and position at first nonblank character." +(defun forward-to-indentation (count) + "Move forward COUNT lines and position at first nonblank character." (interactive "_p") - (forward-line arg) + (forward-line count) (skip-chars-forward " \t")) -(defun backward-to-indentation (arg) - "Move backward ARG lines and position at first nonblank character." +(defun backward-to-indentation (count) + "Move backward COUNT lines and position at first nonblank character." (interactive "_p") - (forward-line (- arg)) + (forward-line (- count)) (skip-chars-forward " \t")) (defcustom kill-whole-line nil @@ -1271,7 +1271,7 @@ ring directly.") (defun kill-new (string &optional replace) "Make STRING the latest kill in the kill ring. -Set the kill-ring-yank pointer to point to it. +Set `kill-ring-yank-pointer' to point to it. Run `kill-hooks'. Optional second argument REPLACE non-nil means that STRING will replace the front of the kill ring, rather than being added to the list." @@ -1331,7 +1331,7 @@ yanking point\; just return the Nth kill forward." ;(defvar kill-read-only-ok nil ; "*Non-nil means don't signal an error for killing read-only text.") -(defun kill-region (beg end &optional verbose) ; verbose is XEmacs addition +(defun kill-region (start end &optional verbose) ; verbose is XEmacs addition "Kill between point and mark. The text is deleted but saved in the kill ring. The command \\[yank] can retrieve it from there. @@ -1352,18 +1352,18 @@ to make one entry in the kill ring." ; (prog1 ; (list (point) (mark) current-prefix-arg) ; (if region-hack (zmacs-deactivate-region))))) - ;; beg and end can be markers but the rest of this function is + ;; start and end can be markers but the rest of this function is ;; written as if they are only integers - (if (markerp beg) (setq beg (marker-position beg))) + (if (markerp start) (setq start (marker-position start))) (if (markerp end) (setq end (marker-position end))) - (or (and beg end) (if zmacs-regions ;; rewritten for I18N3 snarfing + (or (and start end) (if zmacs-regions ;; rewritten for I18N3 snarfing (error "The region is not active now") (error "The mark is not set now"))) (if verbose (if buffer-read-only (lmessage 'command "Copying %d characters" - (- (max beg end) (min beg end))) + (- (max start end) (min start end))) (lmessage 'command "Killing %d characters" - (- (max beg end) (min beg end))))) + (- (max start end) (min start end))))) (cond ;; I don't like this large change in behavior -- jwz @@ -1373,11 +1373,11 @@ to make one entry in the kill ring." ;; just isn't aware of this. However, there's no harm in putting ;; the region's text in the kill ring, anyway. ((or (and buffer-read-only (not inhibit-read-only)) - (text-property-not-all (min beg end) (max beg end) 'read-only nil)) + (text-property-not-all (min start end) (max start end) 'read-only nil)) ;; This is redundant. ;; (if verbose (message "Copying %d characters" - ;; (- (max beg end) (min beg end)))) - (copy-region-as-kill beg end) + ;; (- (max start end) (min start end)))) + (copy-region-as-kill start end) ;; ;; This should always barf, and give us the correct error. ;; (if kill-read-only-ok ;; (message "Read only text copied to kill ring") @@ -1390,13 +1390,13 @@ to make one entry in the kill ring." ((not (or (eq buffer-undo-list t) (eq last-command 'kill-region) ;; Use = since positions may be numbers or markers. - (= beg end))) + (= start end))) ;; Don't let the undo list be truncated before we can even access it. ;; FSF calls this `undo-strong-limit' - (let ((undo-high-threshold (+ (- end beg) 100)) + (let ((undo-high-threshold (+ (- end start) 100)) ;(old-list buffer-undo-list) tail) - (delete-region beg end) + (delete-region start end) ;; Search back in buffer-undo-list for this string, ;; in case a change hook made property changes. (setq tail buffer-undo-list) @@ -1411,31 +1411,31 @@ to make one entry in the kill ring." (t ;; if undo is not kept, grab the string then delete it (which won't ;; add another string to the undo list). - (copy-region-as-kill beg end) - (delete-region beg end))) + (copy-region-as-kill start end) + (delete-region start end))) (setq this-command 'kill-region)) ;; copy-region-as-kill no longer sets this-command, because it's confusing ;; to get two copies of the text when the user accidentally types M-w and ;; then corrects it with the intended C-w. -(defun copy-region-as-kill (beg end) +(defun copy-region-as-kill (start end) "Save the region as if killed, but don't kill it. Run `kill-hooks'." (interactive "r") (if (eq last-command 'kill-region) - (kill-append (buffer-substring beg end) (< end beg)) - (kill-new (buffer-substring beg end))) + (kill-append (buffer-substring start end) (< end start)) + (kill-new (buffer-substring start end))) nil) -(defun kill-ring-save (beg end) +(defun kill-ring-save (start end) "Save the region as if killed, but don't kill it. This command is similar to `copy-region-as-kill', except that it gives visual feedback indicating the extent of the region being copied." (interactive "r") - (copy-region-as-kill beg end) + (copy-region-as-kill start end) ;; copy before delay, for xclipboard's benefit (if (interactive-p) - (let ((other-end (if (= (point) beg) end beg)) + (let ((other-end (if (= (point) start) end start)) (opoint (point)) ;; Inhibit quitting so we can make a quit here ;; look like a C-g typed as a command. @@ -1457,7 +1457,7 @@ visual feedback indicating the extent of the region being copied." ;; too noisy. -- jwz ; (let* ((killed-text (current-kill 0)) ; (message-len (min (length killed-text) 40))) -; (if (= (point) beg) +; (if (= (point) start) ; ;; Don't say "killed"; that is misleading. ; (message "Saved text until \"%s\"" ; (substring killed-text (- message-len))) @@ -1656,7 +1656,7 @@ the user to see that the mark has moved, and you want the previous mark position to be lost. Normally, when a new mark is set, the old one should go on the stack. -This is why most applications should use push-mark, not set-mark. +This is why most applications should use `push-mark', not `set-mark'. Novice Emacs Lisp programmers often try to use the mark for the wrong purposes. The mark saves a location for the user's convenience. @@ -1664,7 +1664,7 @@ Most editing commands should not alter the mark. To remember a location for internal use in the Lisp program, store it in a Lisp variable. Example: - (let ((beg (point))) (forward-line 1) (delete-region beg (point)))." + (let ((start (point))) (forward-line 1) (delete-region start (point)))." (setq buffer (decode-buffer buffer)) (set-marker (mark-marker t buffer) pos buffer)) @@ -1960,7 +1960,7 @@ if `shifted-motion-keys-select-region' is nil." '(left right up down home end prior next kp-left kp-right kp-up kp-down kp-home kp-end kp-prior kp-next)))) - + (defun handle-pre-motion-command () (if (and @@ -2028,9 +2028,9 @@ boundaries do not cause an error to be signaled." (scroll-up-command 1)) (defun scroll-up-command (&optional n) - "Scroll text of current window upward ARG lines; or near full screen if no ARG. + "Scroll current window upward N lines; or near full screen if N is nil. A near full screen is `next-screen-context-lines' less than a full screen. -Negative ARG means scroll downward. +Negative N means scroll downward. When calling from a program, supply a number as argument or nil. On attempt to scroll past end of buffer, `end-of-buffer' is signaled. On attempt to scroll past beginning of buffer, `beginning-of-buffer' is @@ -2058,9 +2058,9 @@ boundaries do not cause an error to be signaled." (scroll-down-command 1)) (defun scroll-down-command (&optional n) - "Scroll text of current window downward ARG lines; or near full screen if no ARG. + "Scroll current window downward N lines; or near full screen if N is nil. A near full screen is `next-screen-context-lines' less than a full screen. -Negative ARG means scroll upward. +Negative N means scroll upward. When calling from a program, supply a number as argument or nil. On attempt to scroll past end of buffer, `end-of-buffer' is signaled. On attempt to scroll past beginning of buffer, `beginning-of-buffer' is @@ -2076,8 +2076,8 @@ boundaries do not cause an error to be signaled." (beginning-of-buffer nil) (end-of-buffer nil)))) -(defun next-line (arg) - "Move cursor vertically down ARG lines. +(defun next-line (count) + "Move cursor vertically down COUNT lines. If there is no character in the target line exactly under the current column, the cursor is positioned after the character in that line which spans this column, or at the end of the line if it is not long enough. @@ -2096,25 +2096,25 @@ If you are thinking of using this in a Lisp program, consider using `forward-line' instead. It is usually easier to use and more reliable (no dependence on goal column, etc.)." (interactive "_p") - (if (and next-line-add-newlines (= arg 1)) + (if (and next-line-add-newlines (= count 1)) (let ((opoint (point))) (end-of-line) (if (eobp) (newline 1) (goto-char opoint) - (line-move arg))) + (line-move count))) (if (interactive-p) ;; XEmacs: Not sure what to do about this. It's inconsistent. -sb (condition-case nil - (line-move arg) + (line-move count) ((beginning-of-buffer end-of-buffer) (when signal-error-on-buffer-boundary (ding nil 'buffer-bound)))) - (line-move arg))) + (line-move count))) nil) -(defun previous-line (arg) - "Move cursor vertically up ARG lines. +(defun previous-line (count) + "Move cursor vertically up COUNT lines. If there is no character in the target line exactly over the current column, the cursor is positioned after the character in that line which spans this column, or at the end of the line if it is not long enough. @@ -2129,11 +2129,11 @@ to use and more reliable (no dependence on goal column, etc.)." (interactive "_p") (if (interactive-p) (condition-case nil - (line-move (- arg)) + (line-move (- count)) ((beginning-of-buffer end-of-buffer) (when signal-error-on-buffer-boundary ; XEmacs (ding nil 'buffer-bound)))) - (line-move (- arg))) + (line-move (- count))) nil) (defcustom block-movement-size 6 @@ -2186,8 +2186,8 @@ Use with care, as it slows down movement significantly. Outline mode sets this. :group 'editing-basics) ;; This is the guts of next-line and previous-line. -;; Arg says how many lines to move. -(defun line-move (arg) +;; Count says how many lines to move. +(defun line-move (count) ;; Don't run any point-motion hooks, and disregard intangibility, ;; for intermediate positions. (let ((inhibit-point-motion-hooks t) @@ -2199,7 +2199,7 @@ Use with care, as it slows down movement significantly. Outline mode sets this. (eq last-command 'previous-line))) (setq temporary-goal-column (if (and track-eol (eolp) - ;; Don't count beg of empty line as end of line + ;; Don't count start of empty line as end of line ;; unless we just did explicit end-of-line. (or (not (bolp)) (eq last-command 'end-of-line))) 9999 @@ -2207,21 +2207,21 @@ Use with care, as it slows down movement significantly. Outline mode sets this. (if (and (not (integerp selective-display)) (not line-move-ignore-invisible)) ;; Use just newline characters. - (or (if (> arg 0) - (progn (if (> arg 1) (forward-line (1- arg))) - ;; This way of moving forward ARG lines + (or (if (> count 0) + (progn (if (> count 1) (forward-line (1- count))) + ;; This way of moving forward COUNT lines ;; verifies that we have a newline after the last one. ;; It doesn't get confused by intangible text. (end-of-line) (zerop (forward-line 1))) - (and (zerop (forward-line arg)) + (and (zerop (forward-line count)) (bolp))) - (signal (if (< arg 0) + (signal (if (< count 0) 'beginning-of-buffer 'end-of-buffer) nil)) - ;; Move by arg lines, but ignore invisible ones. - (while (> arg 0) + ;; Move by count lines, but ignore invisible ones. + (while (> count 0) (end-of-line) (and (zerop (vertical-motion 1)) (signal 'end-of-buffer nil)) @@ -2237,8 +2237,8 @@ Use with care, as it slows down movement significantly. Outline mode sets this. (if (get-text-property (point) 'invisible) (goto-char (next-single-property-change (point) 'invisible)) (goto-char (next-extent-change (point))))) ; XEmacs - (setq arg (1- arg))) - (while (< arg 0) + (setq count (1- count))) + (while (< count 0) (beginning-of-line) (and (zerop (vertical-motion -1)) (signal 'beginning-of-buffer nil)) @@ -2252,7 +2252,7 @@ Use with care, as it slows down movement significantly. Outline mode sets this. (if (get-text-property (1- (point)) 'invisible) (goto-char (previous-single-property-change (point) 'invisible)) (goto-char (previous-extent-change (point))))) ; XEmacs - (setq arg (1+ arg)))) + (setq count (1+ count)))) (move-to-column (or goal-column temporary-goal-column))) ;; Remember where we moved to, go back home, ;; then do the motion over again @@ -2269,7 +2269,7 @@ Use with care, as it slows down movement significantly. Outline mode sets this. ;; It's not on a key, as of 20.2. So no need for this. ;(put 'set-goal-column 'disabled t) -(defun set-goal-column (arg) +(defun set-goal-column (column) "Set the current horizontal position as a goal for \\[next-line] and \\[previous-line]. Those commands will move to this position in the line moved to rather than trying to keep the same horizontal position. @@ -2277,13 +2277,13 @@ With a non-nil argument, clears out the goal column so that \\[next-line] and \\[previous-line] resume vertical motion. The goal column is stored in the variable `goal-column'." (interactive "_P") ; XEmacs - (if arg + (if column (progn (setq goal-column nil) (display-message 'command "No goal column")) (setq goal-column (current-column)) (lmessage 'command - "Goal column %d (use %s with an arg to unset it)" + "Goal column %d (use %s with a prefix arg to unset it)" goal-column (substitute-command-keys "\\[set-goal-column]"))) nil) @@ -2395,7 +2395,7 @@ With argument 0, interchanges line point is in with line mark is in." (defun transpose-line-up (arg) "Move current line one line up, leaving point at beginning of that line. -This can be run repeatedly to move to current line up a number of lines." +This can be run repeatedly to move the current line up a number of lines." (interactive "*p") ;; Move forward over a line, ;; but create a newline if none exists yet. @@ -2408,7 +2408,7 @@ This can be run repeatedly to move to current line up a number of lines." (defun transpose-line-down (arg) "Move current line one line down, leaving point at beginning of that line. -This can be run repeatedly to move to current line down a number of lines." +This can be run repeatedly to move the current line down a number of lines." (interactive "*p") ;; Move forward over a line, ;; but create a newline if none exists yet. @@ -2642,7 +2642,7 @@ With argument, kill comments on that many lines starting with this one." (if arg (forward-line 1)) (setq count (1- count))))) -(defun comment-region (beg end &optional arg) +(defun comment-region (start end &optional arg) "Comment or uncomment each line in the region. With just C-u prefix arg, uncomment each line in region. Numeric prefix arg ARG means use ARG comment characters. @@ -2655,7 +2655,7 @@ not end the comment. Blank lines do not get comments." ;; every line. (interactive "r\nP") (or comment-start (error "No comment syntax is defined")) - (if (> beg end) (let (mid) (setq mid beg beg end end mid))) + (if (> start end) (let (mid) (setq mid start start end end mid))) (save-excursion (save-restriction (let ((cs comment-start) (ce comment-end) @@ -2668,9 +2668,9 @@ not end the comment. Blank lines do not get comments." (setq cs (concat cs comment-start) ce (concat ce comment-end)) (setq numarg (1- numarg)))) - ;; Loop over all lines from BEG to END. - (narrow-to-region beg end) - (goto-char beg) + ;; Loop over all lines from START to END. + (narrow-to-region start end) + (goto-char start) (while (not (eobp)) (if (or (eq numarg t) (< numarg 0)) (progn @@ -2902,7 +2902,7 @@ indicating whether soft newlines should be inserted.") (= (point) fill-point)) ;; 1999-09-17 hniksic: turn off Kinsoku until ;; it's debugged. - (indent-new-comment-line) + (funcall comment-line-break-function) ;; 97/3/14 jhod: Kinsoku processing ; ;(indent-new-comment-line) ; (let ((spacep (memq (char-before (point)) '(?\ ?\t)))) @@ -3052,6 +3052,7 @@ for `auto-fill-function' when turning Auto Fill mode on." (defun turn-on-auto-fill () "Unconditionally turn on Auto Fill mode." + (interactive) (auto-fill-mode 1)) (defun set-fill-column (arg) @@ -3206,14 +3207,14 @@ state before disabling selective display." (add-hook 'change-major-mode-hook 'nuke-selective-display) -(defconst overwrite-mode-textual (purecopy " Ovwrt") +(defconst overwrite-mode-textual " Ovwrt" "The string displayed in the mode line when in overwrite mode.") -(defconst overwrite-mode-binary (purecopy " Bin Ovwrt") +(defconst overwrite-mode-binary " Bin Ovwrt" "The string displayed in the mode line when in binary overwrite mode.") (defun overwrite-mode (arg) "Toggle overwrite mode. -With arg, turn overwrite mode on iff arg is positive. +With arg, enable overwrite mode if arg is positive, else disable. In overwrite mode, printing characters typed in replace existing text on a one-for-one basis, rather than pushing it to the right. At the end of a line, such characters extend the line. Before a tab, @@ -3229,7 +3230,7 @@ is supposed to make it easier to insert characters when necessary." (defun binary-overwrite-mode (arg) "Toggle binary overwrite mode. -With arg, turn binary overwrite mode on iff arg is positive. +With arg, enable binary overwrite mode if arg is positive, else disable. In binary overwrite mode, printing characters typed in replace existing text. Newlines are not treated specially, so typing at the end of a line joins the line to the next, with the typed character @@ -3256,7 +3257,7 @@ specialization of overwrite-mode, entered by setting the (defun line-number-mode (arg) "Toggle Line Number mode. -With arg, turn Line Number mode on iff arg is positive. +With arg, enable Line Number mode if arg is positive, else disable. When Line Number mode is enabled, the line number appears in the mode line." (interactive "P") @@ -3272,7 +3273,7 @@ in the mode line." (defun column-number-mode (arg) "Toggle Column Number mode. -With arg, turn Column Number mode on iff arg is positive. +With arg, enable Column Number mode if arg is positive, else disable. When Column Number mode is enabled, the column number appears in the mode line." (interactive "P") @@ -4399,5 +4400,5 @@ The C code calls this periodically, right before redisplay." "Send a string to the debugging output. The string is formatted using (apply #'format FORMAT ARGS)." (princ (apply #'format format args) 'external-debugging-output)) - + ;;; simple.el ends here diff --git a/lisp/sound.el b/lisp/sound.el index e63c0e9..2857165 100644 --- a/lisp/sound.el +++ b/lisp/sound.el @@ -163,12 +163,11 @@ nVolume (0 for default): ") ;; some conses in sound-alist might have been dumped with emacs. (if old (setq sound-alist (delq old (copy-sequence sound-alist))))) (setq sound-alist (cons - (purecopy - (nconc (list sound-name) - (if (and volume (not (eq 0 volume))) - (list ':volume volume)) - (list ':sound data))) - sound-alist))) + (nconc (list sound-name) + (if (and volume (not (eq 0 volume))) + (list ':volume volume)) + (list ':sound data)) + sound-alist))) sound-name) ;;;###autoload diff --git a/lisp/startup.el b/lisp/startup.el index e3473aa..361cd71 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -136,7 +136,7 @@ Otherwise, XEmacs will offer migration to the init directory.") ;; #### called `site-run-file' in FSFmacs -(defvar site-start-file (purecopy "site-start") +(defvar site-start-file "site-start" "File containing site-wide run-time initializations. This file is loaded at run-time before `.emacs'. It contains inits that need to be in place for the entire site, but @@ -171,11 +171,6 @@ after your init file is read, in case it sets `mail-host-address'." :type 'string :group 'mail) -(defvar auto-save-list-file-prefix "~/.saves-" - "Prefix for generating auto-save-list-file-name. -Emacs's pid and the system name will be appended to -this prefix to create a unique file name.") - (defvar init-file-debug nil) (defvar init-file-had-error nil) @@ -190,23 +185,22 @@ after, and will not be true at any time before.") (defvar command-switch-alist - (purecopy - '(("-help" . command-line-do-help) - ("-version". command-line-do-version) - ("-V" . command-line-do-version) - ("-funcall". command-line-do-funcall) - ("-f" . command-line-do-funcall) - ("-e" . command-line-do-funcall-1) - ("-eval" . command-line-do-eval) - ("-load" . command-line-do-load) - ("-l" . command-line-do-load) - ("-insert" . command-line-do-insert) - ("-i" . command-line-do-insert) - ("-kill" . command-line-do-kill) - ;; Options like +35 are handled specially. - ;; Window-system, site, or package-specific code might add to this. - ;; X11 handles its options by letting Xt remove args from this list. - )) + '(("-help" . command-line-do-help) + ("-version". command-line-do-version) + ("-V" . command-line-do-version) + ("-funcall". command-line-do-funcall) + ("-f" . command-line-do-funcall) + ("-e" . command-line-do-funcall-1) + ("-eval" . command-line-do-eval) + ("-load" . command-line-do-load) + ("-l" . command-line-do-load) + ("-insert" . command-line-do-insert) + ("-i" . command-line-do-insert) + ("-kill" . command-line-do-kill) + ;; Options like +35 are handled specially. + ;; Window-system, site, or package-specific code might add to this. + ;; X11 handles its options by letting Xt remove args from this list. + ) "Alist of command-line switches. Elements look like (SWITCH-STRING . HANDLER-FUNCTION). HANDLER-FUNCTION receives switch name as sole arg; @@ -444,12 +438,13 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n") (setq default-directory (abbreviate-file-name default-directory)) ;; Specify the file for recording all the auto save files of ;; this session. This is used by recover-session. - (setq auto-save-list-file-name - (expand-file-name - (format "%s%d-%s" - auto-save-list-file-prefix - (emacs-pid) - (system-name)))) + (if auto-save-list-file-prefix + (setq auto-save-list-file-name + (expand-file-name + (format "%s%d-%s" + auto-save-list-file-prefix + (emacs-pid) + (system-name))))) (run-hooks 'emacs-startup-hook) (and term-setup-hook (run-hooks 'term-setup-hook)) diff --git a/lisp/subr.el b/lisp/subr.el index fd65346..bbde00d 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -359,7 +359,7 @@ function allows you to set the local value. NOTE: At some point, this will be moved into C and will be very fast." (with-current-buffer buffer (set sym val))) - + ;;;; String functions. ;; XEmacs @@ -446,13 +446,13 @@ See also `with-temp-buffer'." (set-buffer ,buffer) ,@body)) -(defmacro with-temp-file (file &rest forms) - "Create a new buffer, evaluate FORMS there, and write the buffer to FILE. +(defmacro with-temp-file (filename &rest forms) + "Create a new buffer, evaluate FORMS there, and write the buffer to FILENAME. The value of the last form in FORMS is returned, like `progn'. See also `with-temp-buffer'." (let ((temp-file (make-symbol "temp-file")) (temp-buffer (make-symbol "temp-buffer"))) - `(let ((,temp-file ,file) + `(let ((,temp-file ,filename) (,temp-buffer (get-buffer-create (generate-new-buffer-name " *temp file*")))) (unwind-protect @@ -571,20 +571,20 @@ The original alist is not modified. See also `destructive-alist-to-plist'." ;; getf, remf in cl*.el. -(defmacro putf (plist prop val) - "Add property PROP to plist PLIST with value VAL. -Analogous to (setq PLIST (plist-put PLIST PROP VAL))." - `(setq ,plist (plist-put ,plist ,prop ,val))) +(defmacro putf (plist property value) + "Add property PROPERTY to plist PLIST with value VALUE. +Analogous to (setq PLIST (plist-put PLIST PROPERTY VALUE))." + `(setq ,plist (plist-put ,plist ,property ,value))) -(defmacro laxputf (lax-plist prop val) - "Add property PROP to lax plist LAX-PLIST with value VAL. -Analogous to (setq LAX-PLIST (lax-plist-put LAX-PLIST PROP VAL))." - `(setq ,lax-plist (lax-plist-put ,lax-plist ,prop ,val))) +(defmacro laxputf (lax-plist property value) + "Add property PROPERTY to lax plist LAX-PLIST with value VALUE. +Analogous to (setq LAX-PLIST (lax-plist-put LAX-PLIST PROPERTY VALUE))." + `(setq ,lax-plist (lax-plist-put ,lax-plist ,property ,value))) -(defmacro laxremf (lax-plist prop) - "Remove property PROP from lax plist LAX-PLIST. -Analogous to (setq LAX-PLIST (lax-plist-remprop LAX-PLIST PROP))." - `(setq ,lax-plist (lax-plist-remprop ,lax-plist ,prop))) +(defmacro laxremf (lax-plist property) + "Remove property PROPERTY from lax plist LAX-PLIST. +Analogous to (setq LAX-PLIST (lax-plist-remprop LAX-PLIST PROPERTY))." + `(setq ,lax-plist (lax-plist-remprop ,lax-plist ,property))) ;;; Error functions @@ -746,9 +746,9 @@ yourself.]" ;;;; Miscellanea. ;; This is now in C. -;(defun buffer-substring-no-properties (beg end) -; "Return the text from BEG to END, without text properties, as a string." -; (let ((string (buffer-substring beg end))) +;(defun buffer-substring-no-properties (start end) +; "Return the text from START to END, without text properties, as a string." +; (let ((string (buffer-substring start end))) ; (set-text-properties 0 (length string) nil string) ; string)) diff --git a/lisp/syntax.el b/lisp/syntax.el index 8835eab..08557cd 100644 --- a/lisp/syntax.el +++ b/lisp/syntax.el @@ -16,7 +16,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -147,11 +147,11 @@ If STRING is invalid, signal an error." (setq code (cons code (aref string 1)))) code)) -(defun modify-syntax-entry (char-range spec &optional table) +(defun modify-syntax-entry (char-range spec &optional syntax-table) "Set syntax for the characters CHAR-RANGE according to string SPEC. CHAR-RANGE is a single character or a range of characters, as per `put-char-table'. -The syntax is changed only for table TABLE, which defaults to +The syntax is changed only for SYNTAX-TABLE, which defaults to the current buffer's syntax table. The first character of SPEC should be one of the following: Space whitespace syntax. w word constituent. @@ -181,26 +181,27 @@ Defined flags are the characters 1, 2, 3, 4, 5, 6, 7, 8, p, a, and b. between expressions. a means C is comment starter or comment ender for comment style a (default) b means C is comment starter or comment ender for comment style b." - (interactive + (interactive ;; I really don't know why this is interactive ;; help-form should at least be made useful while reading the second arg "cSet syntax for character: \nsSet syntax for %c to: ") - (cond ((syntax-table-p table)) - ((not table) - (setq table (syntax-table))) - (t - (setq table - (wrong-type-argument 'syntax-table-p table)))) - (let ((code (syntax-string-to-code spec))) - (simple-set-syntax-entry char-range code table)) + (simple-set-syntax-entry + char-range + (syntax-string-to-code spec) + (cond ((syntax-table-p syntax-table) + syntax-table) + ((null syntax-table) + (syntax-table)) + (t + (wrong-type-argument 'syntax-table-p syntax-table)))) nil) -(defun map-syntax-table (__function __table &optional __range) - "Map FUNCTION over entries in syntax table TABLE, collapsing inheritance. +(defun map-syntax-table (__function __syntax_table &optional __range) + "Map FUNCTION over entries in SYNTAX-TABLE, collapsing inheritance. This is similar to `map-char-table', but works only on syntax tables, and collapses any entries that call for inheritance by invisibly substituting the inherited values from the standard syntax table." - (check-argument-type 'syntax-table-p __table) + (check-argument-type 'syntax-table-p __syntax_table) (map-char-table #'(lambda (__key __value) (if (eq ?@ (char-syntax-from-code __value)) (map-char-table #'(lambda (__key __value) @@ -209,7 +210,7 @@ This is similar to `map-char-table', but works only on syntax tables, and (standard-syntax-table) __key) (funcall __function __key __value))) - __table __range)) + __syntax_table __range)) ;(defun test-xm () ; (let ((o (copy-syntax-table)) diff --git a/lisp/term/bg-mouse.el b/lisp/term/bg-mouse.el index ca3b447..e75f35e 100644 --- a/lisp/term/bg-mouse.el +++ b/lisp/term/bg-mouse.el @@ -71,7 +71,7 @@ To reinitialize the mouse if the terminal is reset, type ESC : RET" ((screen-mouse-x (min (1- (frame-width)) ;don't hit column 86! (/ (bg-get-tty-num semicolon) 9))) (screen-mouse-y (- (1- (frame-height)) ;assume default font size. - (/ (bg-get-tty-num semicolon) 16))) + (/ (bg-get-tty-num semicolon) 16))) (bg-mouse-buttons (% (bg-get-tty-num ?c) 8)) (bg-mouse-window (bg-window-from-x-y screen-mouse-x screen-mouse-y)) (bg-cursor-window (selected-window)) @@ -168,8 +168,8 @@ through the buffer as the BitGraph mouse's X position in the window." (scroll-up bg-mouse-y)) (defun bg-mouse-line-to-center () - "Scroll the line pointed to by the BitGraph mouse to the center -of the window" + "Scroll the line pointed to by the BitGraph mouse to the center +of the window." (interactive) (scroll-up (/ (+ 2 bg-mouse-y bg-mouse-y (- (window-height))) 2))) @@ -290,7 +290,7 @@ X and Y are 0-based character positions on the screen." "Bind bg-mouse CLICK-CODE to run FUNCTION." (define-key mouse-map (char-to-string click-code) function)) -(bind-bg-mouse-click bg-button-l 'bg-set-point) +(bind-bg-mouse-click bg-button-l 'bg-set-point) (bind-bg-mouse-click bg-button-m 'bg-yank) (bind-bg-mouse-click bg-button-r 'bg-set-mark) (bind-bg-mouse-click (+ bg-button-l bg-button-m) 'yank-pop-1) diff --git a/lisp/term/sun-mouse.el b/lisp/term/sun-mouse.el index 0537147..2879126 100644 --- a/lisp/term/sun-mouse.el +++ b/lisp/term/sun-mouse.el @@ -34,7 +34,7 @@ ;; Modelled after the GNUEMACS keymap interface. ;; ;; User Functions: -;; make-mousemap, copy-mousemap, +;; make-mousemap, copy-mousemap, ;; define-mouse, global-set-mouse, local-set-mouse, ;; use-global-mousemap, use-local-mousemap, ;; mouse-lookup, describe-mouse-bindings @@ -189,7 +189,7 @@ Just like the Common Lisp function of the same name." YESMINI says to include the minibuffer as a window. This is a macro, and does not evaluate its arguments." `(let ((OriginallySelectedWindow (selected-window))) - (unwind-protect + (unwind-protect (while (progn ,form (not (eq OriginallySelectedWindow @@ -216,7 +216,7 @@ Handles wrapped and horizontally scrolled lines correctly." (defun minibuffer-window-p (window) - "True iff this WINDOW is minibuffer." + "Return t if this WINDOW is a minibuffer." (= (frame-height) (nth 3 (window-edges window)) ; The bottom edge. )) @@ -224,9 +224,9 @@ Handles wrapped and horizontally scrolled lines correctly." (defun sun-mouse-handler (&optional hit) "Evaluates the function or list associated with a mouse hit. -Expecting to read a hit, which is a list: (button x y delta). -A form bound to button by define-mouse is found by mouse-lookup. -The variables: *mouse-window*, *mouse-x*, *mouse-y* are bound. +Expecting to read a hit, which is a list: (button x y delta). +A form bound to button by define-mouse is found by mouse-lookup. +The variables: *mouse-window*, *mouse-x*, *mouse-y* are bound. If the form is a symbol (symbolp), it is funcall'ed with *mouse-window*, *mouse-x*, and *mouse-y* as arguments; if the form is a list (listp), the form is eval'ed; if the form is neither of these, it is an error. @@ -242,8 +242,8 @@ Returns nil." (mouse-lookup mouse-code)))) (cond ((null form) (if (not (sm::hit-up-p hit)) ; undefined up hits are ok. - (error "Undefined mouse event: %s" - (prin1-to-string + (error "Undefined mouse event: %s" + (prin1-to-string (mouse-code-to-mouse-list mouse-code))))) ((symbolp form) (setq this-command form) @@ -268,9 +268,9 @@ Returns nil." (let ((hit2 (mouse-second-hit extra-click-wait))) (if hit2 ; we cons'd it, we can smash it. ; (setf (sm::hit-code hit1) (logior (sm::hit-code hit1) ...)) - (setcar hit1 (logior (sm::hit-code hit1) + (setcar hit1 (logior (sm::hit-code hit1) (sm::hit-code hit2) - (if (= (sm::hit-button hit1) + (if (= (sm::hit-button hit1) (sm::hit-button hit2)) sm::DoubleBits 0)))))) hit1)) @@ -280,7 +280,7 @@ Returns nil." but that uses minibuffer, and mucks up last-command." (let ((char-list nil) (char nil)) (while (not (equal 13 ; Carriage return. - (prog1 (setq char (read-char)) + (prog1 (setq char (read-char)) (setq char-list (cons char char-list)))))) (read (mapconcat 'char-to-string (nreverse char-list) "")) )) @@ -331,7 +331,7 @@ but that uses minibuffer, and mucks up last-command." Returns list (window x y) where x and y are relative to window." (or (catch 'found - (eval-in-windows + (eval-in-windows (let ((we (window-edges (selected-window)))) (let ((le (nth 0 we)) (te (nth 1 we)) @@ -347,7 +347,7 @@ Returns list (window x y) where x and y are relative to window." (if (and (>= x le) (< x re) (>= y te) (< y be)) - (throw 'found + (throw 'found (list (selected-window) (- x le) (- y te)))))) t)) ; include minibuffer in eval-in-windows ;;If x,y from a real mouse click, we shouldn't get here. @@ -375,14 +375,14 @@ Returns one of (text scrollbar modeline minibuffer)" (t 'text))))) (defun window-line-end (w x y) - "Return WINDOW column (ignore X) containing end of line Y" + "Return WINDOW column (ignore X) containing end of line Y." (eval-in-window w (save-excursion (move-to-loc (frame-width) y)))) ;;; ;;; The encoding of mouse events into a mousemap. ;;; These values must agree with coding in emacstool: ;;; -(defconst sm::keyword-alist +(defconst sm::keyword-alist '((left . 1) (middle . 2) (right . 4) (shift . 8) (control . 16) (meta . 32) (double . 64) (up . 128) (text . 256) (scrollbar . 512) (modeline . 1024) (minibuffer . 2048) @@ -538,7 +538,7 @@ where each mouse-list is bound to the function in REGION." (defun describe-mouse-briefly (mouse-list) "Print a short description of the function bound to MOUSE-LIST." - (interactive "xDescibe mouse list briefly: ") + (interactive "xDescribe mouse list briefly: ") (let ((function (mouse-lookup (mouse-list-to-mouse-code mouse-list)))) (if function (message "%s runs the command %s" mouse-list function) @@ -584,7 +584,7 @@ of MENU. MENU (or its symbol-value) should be a menu defined by defmenu. the FORM associated with the selected STRING is evaluated, and the resulting value is returned. Generally these FORMs are evaluated for their side-effects rather than their values. - If the selected form is a menu or a symbol whose value is a menu, + If the selected form is a menu or a symbol whose value is a menu, then it is displayed and evaluated as a pullright menu item. If the FORM of the first ITEM is nil, the STRING of the item is used as a label for the menu, i.e. it's inverted and not selectable." @@ -595,7 +595,7 @@ is used as a label for the menu, i.e. it's inverted and not selectable." (defun sun-get-frame-data (code) "Sends the tty-sub-window escape sequence CODE to terminal, and returns a cons of the two numbers in returned escape sequence. -That is it returns (cons ) from \"\\E[n;;t\". +That is it returns (cons ) from \"\\E[n;;t\". CODE values: 13 = Tool-Position, 14 = Size-in-Pixels, 18 = Size-in-Chars." (send-string-to-terminal (concat "\033[" (int-to-string code) "t")) (let (char str x y) @@ -615,9 +615,9 @@ CODE values: 13 = Tool-Position, 14 = Size-in-Pixels, 18 = Size-in-Chars." (chr (sun-get-frame-data 18))) ; returns size in chars (cons (/ (car pix) (car chr)) (/ (cdr pix) (cdr chr))))) -(defvar sm::menu-kludge-x nil +(defvar sm::menu-kludge-x nil "Cached frame-to-window X-Offset for sm::menu-kludge") -(defvar sm::menu-kludge-y nil +(defvar sm::menu-kludge-y nil "Cached frame-to-window Y-Offset for sm::menu-kludge") (defun sm::menu-kludge () @@ -641,10 +641,10 @@ Insert contents into the current buffer at point." (set-mark-command nil) (insert-string (sun-get-selection))) -(defun sun-select-region (beg end) +(defun sun-select-region (start end) "Set the sunwindows selection to the region in the current buffer." (interactive "r") - (sun-set-selection (buffer-substring beg end))) + (sun-set-selection (buffer-substring start end))) ;;; ;;; Support for emacstool @@ -653,7 +653,7 @@ Insert contents into the current buffer at point." (defun suspend-emacstool (&optional stuffstring) "Suspend emacstool. If running under as a detached process emacstool, -you don't want to suspend (there is no way to resume), +you don't want to suspend (there is no way to resume), just close the window, and wait for reopening." (interactive) (run-hooks 'suspend-hook) diff --git a/lisp/term/sun.el b/lisp/term/sun.el index 94d443c..5cb92ef 100644 --- a/lisp/term/sun.el +++ b/lisp/term/sun.el @@ -43,10 +43,10 @@ (next-line n) (scroll-up n)) -(defun kill-region-and-unmark (beg end) +(defun kill-region-and-unmark (start end) "Like kill-region, but pops the mark [which equals point, anyway.]" (interactive "r") - (kill-region beg end) + (kill-region start end) (setq this-command 'kill-region-and-unmark) (set-mark-command t)) @@ -68,11 +68,11 @@ (let* ((command (car command-history)) (command-name (symbol-name (car command))) (search-arg (car (cdr command))) - (search-command + (search-command (and command-name (string-match "search" command-name))) ) (if (and search-command (stringp search-arg)) (setq grep-arg search-arg) - (setq search-command this-command + (setq search-command this-command grep-arg (read-string "REsearch: " grep-arg) this-command search-command) grep-arg)))) @@ -91,7 +91,7 @@ ;;; handle sun's extra function keys ;;; this version for those who run with standard .ttyswrc and no emacstool ;;; -;;; sunview picks up expose and open on the way UP, +;;; sunview picks up expose and open on the way UP, ;;; so we ignore them on the way down ;;; @@ -169,11 +169,11 @@ ;;; ;;; {c} is [a-j] for LEFT, [a-i] for TOP, [a-o] for RIGHT. ;;; A higher level insists on encoding {h,j,l,n}{r} (the arrow keys) -;;; as ANSI escape sequences. Use the shell command +;;; as ANSI escape sequences. Use the shell command ;;; % setkeys noarrows ;;; if you want these to come through for emacstool. ;;; -;;; If you are not using EmacsTool, +;;; If you are not using EmacsTool, ;;; you can also use this by creating a .ttyswrc file to do the conversion. ;;; but it won't include the CONTROL, META, or SHIFT keys! ;;; @@ -213,10 +213,10 @@ (define-key suntool-map "i\M-l" 'research-backward) ; M-Find (define-key suntool-map "i\M-," 're-search-backward) ; C-M-Find -(define-key suntool-map "jL" 'yank) ; DELETE +(define-key suntool-map "jL" 'yank) ; DELETE (define-key suntool-map "jl" 'kill-region-and-unmark) ; Delete (define-key suntool-map "j\M-l" 'exchange-point-and-mark); M-Delete -(define-key suntool-map "j," +(define-key suntool-map "j," #'(lambda () (interactive) (pop-mark 1))) ; C-Delete (define-key suntool-map "fT" 'shrink-window-horizontally) ; T6 @@ -249,7 +249,7 @@ ;;; ;;; C-x C-@ is the mouse command prefix. -(autoload 'sun-mouse-handler "sun-mouse" +(autoload 'sun-mouse-handler "sun-mouse" "Sun Emacstool handler for mouse blips (not loaded)." t) (defun emacstool-init () diff --git a/lisp/update-elc-2.el b/lisp/update-elc-2.el index aa46fcf..eb2bd21 100644 --- a/lisp/update-elc-2.el +++ b/lisp/update-elc-2.el @@ -52,18 +52,18 @@ (defvar update-elc-ignored-files ;; note: entries here are regexps '("^," ;; #### huh? - "^paths.el$" - "^loadup.el$" - "^loadup-el.el$" - "^update-elc.el$" - "^update-elc-2.el$" - "^dumped-lisp.el$" - "^make-docfile.el$" - "^site-start.el$" - "^site-load.el$" - "^site-init.el$" - "^version.el$" - "^very-early-lisp.el$")) + "^paths\\.el$" + "^loadup\\.el$" + "^loadup-el\\.el$" + "^update-elc\\.el$" + "^update-elc-2\\.el$" + "^dumped-lisp\\.el$" + "^make-docfile\\.el$" + "^site-start\\.el$" + "^site-load\\.el$" + "^site-init\\.el$" + "^version\\.el$" + "^very-early-lisp\\.el$")) ;; SEEN accumulates the list of already-handled dirs. (defun do-update-elc-2 (dir compile-stage-p seen) @@ -75,7 +75,7 @@ ;; Do this directory. (if compile-stage-p ;; Stage 2: Recompile necessary .els - (let ((files (directory-files dir t ".el$")) + (let ((files (directory-files dir t "\\.el$")) file file-c) (while (setq file (car files)) (setq files (cdr files)) @@ -95,7 +95,7 @@ ;; Stage 1. ;; Remove out-of-date elcs - (let ((files (directory-files dir t ".el$")) + (let ((files (directory-files dir t "\\.el$")) file file-c) (while (setq file (car files)) (setq files (cdr files)) @@ -105,7 +105,7 @@ (message "Removing out-of-date %s" file-c) (delete-file file-c)))) ;; Remove elcs without corresponding el - (let ((files (directory-files dir t ".elc$")) + (let ((files (directory-files dir t "\\.elc$")) file file-c) (while (setq file-c (car files)) (setq files (cdr files)) @@ -145,4 +145,4 @@ (message "Recompiling updated .els in directory tree `%s'...done" dir)) (setq command-line-args-left nil)) -;;; cleantree.el ends here +;;; update-elc-2.el ends here diff --git a/lisp/userlock.el b/lisp/userlock.el index ff7f344..7f4657c 100644 --- a/lisp/userlock.el +++ b/lisp/userlock.el @@ -35,11 +35,11 @@ (define-error 'file-locked "File is locked" 'file-error) ; XEmacs -(defun ask-user-about-lock-minibuf (fn opponent) +(defun ask-user-about-lock-minibuf (filename other-user) (save-window-excursion (let (answer) (while (null answer) - (message "%s is locking %s: action (s, q, p, ?)? " opponent fn) + (message "%s is locking %s: action (s, q, p, ?)? " other-user filename) (let ((tem (let ((inhibit-quit t) (cursor-in-echo-area t)) (prog1 (downcase (read-char)) @@ -59,7 +59,7 @@ (ask-user-about-lock-help) (setq answer nil)) ((eq (cdr answer) 'yield) - (signal 'file-locked (list "File is locked" fn opponent))))))) + (signal 'file-locked (list "File is locked" filename other-user))))))) (cdr answer)))) (defun ask-user-about-lock-help () @@ -77,12 +77,12 @@ You can uit; don't modify this file.") (define-error 'file-supersession "File changed on disk" 'file-error) ; XEmacs -(defun ask-user-about-supersession-threat-minibuf (fn) +(defun ask-user-about-supersession-threat-minibuf (filename) (save-window-excursion (let (answer) (while (null answer) (message "%s changed on disk; really edit the buffer? (y, n, r or C-h) " - (file-name-nondirectory fn)) + (file-name-nondirectory filename)) (let ((tem (downcase (let ((cursor-in-echo-area t)) (read-char))))) (setq answer @@ -104,10 +104,10 @@ You can uit; don't modify this file.") (revert-buffer nil (not (buffer-modified-p))) ; ask confirmation iff buffer modified (signal 'file-supersession - (list "File reverted" fn))) + (list "File reverted" filename))) ((eq answer 'yield) (signal 'file-supersession - (list "File changed on disk" fn)))))) + (list "File changed on disk" filename)))))) (message "File on disk now will become a backup file if you save these changes.") (setq buffer-backed-up nil)))) @@ -131,14 +131,14 @@ to get the latest version of the file, then make the change again.") ;;; dialog-box versions [XEmacs] -(defun ask-user-about-lock-dbox (fn opponent) +(defun ask-user-about-lock-dbox (filename other-user) (let ((echo-keystrokes 0)) (make-dialog-box 'question :question (format "%s is locking %s\n It has been detected that you want to modify a file that someone else has already started modifying in XEmacs." - opponent fn) + other-user filename) :buttons '(["Steal Lock\n\nThe other user will\nbecome the intruder" steal t] ["Proceed\n\nEdit file at your own\n\(and the other user's) risk" @@ -156,7 +156,7 @@ to get the latest version of the file, then make the change again.") (throw 'aual-done t)) ((and (misc-user-event-p event) (eq (event-object event) 'yield)) - (signal 'file-locked (list "File is locked" fn opponent))) + (signal 'file-locked (list "File is locked" filename other-user))) ((and (misc-user-event-p event) (eq (event-object event) 'menu-no-selection-hook)) (signal 'quit nil)) @@ -170,7 +170,7 @@ to get the latest version of the file, then make the change again.") (beep) (message "please answer the dialog box")))))))) -(defun ask-user-about-supersession-threat-dbox (fn) +(defun ask-user-about-supersession-threat-dbox (filename) (let ((echo-keystrokes 0)) (make-dialog-box 'question @@ -178,7 +178,7 @@ to get the latest version of the file, then make the change again.") (format "File %s has changed on disk since its buffer was last read in or saved. -Do you really want to edit the buffer? " fn) +Do you really want to edit the buffer? " filename) :buttons '(["Yes\n\nEdit the buffer anyway,\nignoring the disk file" proceed t] @@ -192,14 +192,14 @@ Do you really want to edit the buffer? " fn) (cond ((and (misc-user-event-p event) (eq (event-object event) 'proceed)) (throw 'auast-done nil)) ((and (misc-user-event-p event) (eq (event-object event) 'yield)) - (signal 'file-supersession (list fn))) + (signal 'file-supersession (list filename))) ((and (misc-user-event-p event) (eq (event-object event) 'revert)) - (or (equal fn (buffer-file-name)) + (or (equal filename (buffer-file-name)) (error "ask-user-about-supersession-threat called bogusly")) (revert-buffer nil t) (signal 'file-supersession - (list fn "(reverted)"))) + (list filename "(reverted)"))) ((and (misc-user-event-p event) (eq (event-object event) 'menu-no-selection-hook)) (signal 'quit nil)) @@ -217,31 +217,31 @@ Do you really want to edit the buffer? " fn) ;;; top-level ;;;###autoload -(defun ask-user-about-lock (fn opponent) - "Ask user what to do when he wants to edit FILE but it is locked by USER. +(defun ask-user-about-lock (filename other-user) + "Ask user wanting to edit FILENAME, locked by OTHER-USER, what to do. This function has a choice of three things to do: - do (signal 'file-locked (list FILE USER)) + do (signal 'file-locked (list FILENAME OTHER-USER)) to refrain from editing the file return t (grab the lock on the file) return nil (edit the file even though it is locked). -You can rewrite it to use any criterion you like to choose which one to do." +You can rewrite it to use any criteria you like to choose which one to do." (discard-input) (if (should-use-dialog-box-p) - (ask-user-about-lock-dbox fn opponent) - (ask-user-about-lock-minibuf fn opponent))) + (ask-user-about-lock-dbox filename other-user) + (ask-user-about-lock-minibuf filename other-user))) ;;;###autoload -(defun ask-user-about-supersession-threat (fn) - "Ask a user who is about to modify an obsolete buffer what to do. +(defun ask-user-about-supersession-threat (filename) + "Ask user who is about to modify an obsolete buffer what to do. This function has two choices: it can return, in which case the modification -of the buffer will proceed, or it can (signal 'file-supersession (file)), +of the buffer will proceed, or it can (signal 'file-supersession (FILENAME)), in which case the proposed buffer modification will not be made. -You can rewrite this to use any criterion you like to choose which one to do. +You can rewrite this to use any criteria you like to choose which one to do. The buffer in question is current when this function is called." (discard-input) (if (should-use-dialog-box-p) - (ask-user-about-supersession-threat-dbox fn) - (ask-user-about-supersession-threat-minibuf fn))) + (ask-user-about-supersession-threat-dbox filename) + (ask-user-about-supersession-threat-minibuf filename))) ;;; userlock.el ends here diff --git a/lisp/version.el b/lisp/version.el index d913142..d2bc894 100644 --- a/lisp/version.el +++ b/lisp/version.el @@ -36,20 +36,19 @@ Warning, this variable did not exist in XEmacs versions prior to 20.3") (defconst emacs-version - (purecopy - (format "%d.%d %s%s%s%s" - emacs-major-version - emacs-minor-version - (if emacs-patch-level - (format "(patch %d)" emacs-patch-level) - "") - (if xemacs-betaname - (concat " " xemacs-betaname) - "") - (if xemacs-codename - (concat " \"" xemacs-codename "\"") - "") - " XEmacs Lucid")) + (format "%d.%d %s%s%s%s" + emacs-major-version + emacs-minor-version + (if emacs-patch-level + (format "(patch %d)" emacs-patch-level) + "") + (if xemacs-betaname + (concat " " xemacs-betaname) + "") + (if xemacs-codename + (concat " \"" xemacs-codename "\"") + "") + " XEmacs Lucid") "Version numbers of this version of XEmacs.") (if (featurep 'infodock) @@ -131,9 +130,9 @@ argument are optional. Only the Non-nil arguments are used in the test." ;; `what(1)' can extract from the executable or a core file. We don't ;; actually need this to be pointed to from lisp; pure objects can't ;; be GCed. -(purecopy (concat "\n@" "(#)" (emacs-version) - "\n@" "(#)" "Configuration: " - system-configuration "\n")) +(concat "\n@" "(#)" (emacs-version) + "\n@" "(#)" "Configuration: " + system-configuration "\n") ;;Local variables: ;;version-control: never diff --git a/lisp/view-less.el b/lisp/view-less.el index 28c14be..bc41a17 100644 --- a/lisp/view-less.el +++ b/lisp/view-less.el @@ -7,17 +7,17 @@ ;; Keywords: wp, unix ;; This file is part of XEmacs. -;; +;; ;; XEmacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2 of the License, or ;; (at your option) any later version. -;; +;; ;; XEmacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. -;; +;; ;; You should have received a copy of the GNU General Public License ;; along with XEmacs; if not, write to the Free Software ;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -32,7 +32,7 @@ ;; Originally written for v18 by David Gudeman (gudeman@arizona.edu) ;; Mods by Bengt Martensson, to closely resemble less (July 1987) ;; -;; If you would like all write-protected files to be visited in view-mode, +;; If you would like all write-protected files to be visited in view-mode, ;; then add the following to your .emacs file: ;; ;; (add-hook 'find-file-hooks 'auto-view-mode) @@ -108,33 +108,34 @@ map)) ;;;###autoload -(defun view-file (file &optional other-p) - "Find FILE, enter view mode. With prefix arg OTHER-P, use other window." +(defun view-file (filename &optional other-window-p) + "Find FILENAME, enter view mode. With prefix arg OTHER-WINDOW-P, use other window." (interactive "fView File: \nP") - (let ((old-p (get-file-buffer file)) + (let ((old-p (get-file-buffer filename)) (obuf (current-buffer))) - (if other-p - (find-file-other-window file) - (find-file file)) - (view-mode (if other-p nil obuf) + (if other-window-p + (find-file-other-window filename) + (find-file filename)) + (view-mode (if other-window-p nil obuf) (if old-p nil 'kill-buffer)) nil)) ;;;###autoload -(defun view-buffer (buf &optional other-p) - "Switch to BUF, enter view mode. With prefix arg use other window." +(defun view-buffer (buffer &optional other-window-p) + "Switch to BUFFER, enter view mode. With prefix arg use other window." (interactive "bView Buffer: \nP") (let ((obuf (current-buffer))) - (if other-p - (switch-to-buffer-other-window buf) - (switch-to-buffer buf)) - (view-mode (if other-p nil obuf) (if other-p nil 'bury-buffer)))) + (if other-window-p + (switch-to-buffer-other-window buffer) + (switch-to-buffer buffer)) + (view-mode (if other-window-p nil obuf) + (if other-window-p nil 'bury-buffer)))) ;;;###autoload -(defun view-file-other-window (file) - "Find FILE in other window, and enter view mode." +(defun view-file-other-window (filename) + "Find FILENAME in other window, and enter view mode." (interactive "fView File: ") - (view-file file t)) + (view-file filename t)) ;;;###autoload (defun view-buffer-other-window (buffer) @@ -252,7 +253,7 @@ This is meant to be added to `find-file-hooks'." "Exit view mode and execute the global binding of the key that invoked this command. Normally, this will toggle the state of `buffer-read-only', perhaps invoking some version-control mechanism." - (interactive) + (interactive) (setq view-exit-position nil) ;; Kludge so this works as advertised. Stig, why can't you write ;; bug-free code??? @@ -376,7 +377,7 @@ Positive prefix arg sets, negative disables." With prefix ARG, search forward that many occurrences." (interactive "sView search: \np") (unwind-protect - (re-search-forward + (re-search-forward (if (string-equal "" s) view-search-string s) nil nil p) (setq view-search-arg p) (or (string-equal "" s) diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index b84901d..3f22c46 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -512,14 +512,16 @@ Suitable for use with `map-extents'." (defun widget-specify-active (widget) "Make WIDGET active for user modifications." - (let ((inactive (widget-get widget :inactive))) + (let ((inactive (widget-get widget :inactive)) + (from (widget-get widget :from)) + (to (widget-get widget :to))) (when (and inactive (not (extent-detached-p inactive))) ;; Reactivate the buttons and fields covered by the extent. (map-extents 'widget-activation-widget-mapper - inactive nil nil :activate nil 'button-or-field) + nil from to :activate nil 'button-or-field) ;; Reactivate the glyphs. (map-extents 'widget-activation-glyph-mapper - inactive nil nil :activate nil 'end-glyph) + nil from to :activate nil 'end-glyph) (delete-extent inactive) (widget-put widget :inactive nil)))) @@ -566,7 +568,7 @@ Otherwise, just return the value." value))) (defun widget-member (widget property) - "Non-nil iff there is a definition in WIDGET for PROPERTY." + "Return t if there is a definition in WIDGET for PROPERTY." (cond ((widget-plist-member (cdr widget) property) t) ((car widget) diff --git a/lisp/window-xemacs.el b/lisp/window-xemacs.el index 3418047..6fb0abd 100644 --- a/lisp/window-xemacs.el +++ b/lisp/window-xemacs.el @@ -51,11 +51,11 @@ If WINDOW is nil, the selected window is used." (when (null n) (redraw-frame (window-frame window) t))) -(defun backward-other-window (arg &optional all-frames device) - "Select the ARG'th different window on this frame, going backwards. -This is just like calling `other-window' with the arg negated." +(defun backward-other-window (count &optional which-frames which-devices) + "Select the COUNT'th different window on this frame, going backwards. +This is just like calling `other-window' with COUNT negated." (interactive "p") - (other-window (- arg) all-frames device)) + (other-window (- count) which-frames which-devices)) (defalias 'windows-of-buffer 'get-buffer-window-list) diff --git a/lisp/window.el b/lisp/window.el index 4687c8a..cfd37e7 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -33,32 +33,38 @@ ;;;; Window tree functions. -(defun one-window-p (&optional nomini all-frames device) +(defun one-window-p (&optional nomini which-frames which-devices) "Return non-nil if the selected window is the only window (in its frame). Optional arg NOMINI non-nil means don't count the minibuffer even if it is active. -The optional arg ALL-FRAMES t means count windows on all frames. -If it is `visible', count windows on all visible frames. -ALL-FRAMES nil or omitted means count only the selected frame, +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES nil or omitted means count only the selected frame, plus the minibuffer it uses (which may be on another frame). -ALL-FRAMES = 0 means count windows on all visible and iconified frames. -If ALL-FRAMES is any other value, count only the selected frame. - -If optional third argument DEVICE is nil or omitted, count frames -on all devices. -If a device, count frames only on that device. -If a device type, count frames only on devices of that type. -Otherwise, count frames only on the selected device." +WHICH-FRAMES = `visible' means include windows on all visible frames. +WHICH-FRAMES = 0 means include windows on all visible and iconified frames. +WHICH-FRAMES = t means include windows on all frames including invisible frames. +If WHICH-FRAMES is any other value, count only the selected frame. + +The optional third argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices." (let ((base-window (selected-window))) (if (and nomini (eq base-window (minibuffer-window))) (setq base-window (next-window base-window))) (eq base-window - (next-window base-window (if nomini 'arg) all-frames device)))) + (next-window base-window (if nomini 'arg) which-frames which-devices)))) -(defun walk-windows (proc &optional minibuf all-frames device) - "Cycle through all visible windows, calling PROC for each one. -PROC is called with a window as argument. +(defun walk-windows (function &optional minibuf which-frames which-devices) + "Cycle through all visible windows, calling FUNCTION for each one. +FUNCTION is called with a window as argument. Optional second arg MINIBUF t means count the minibuffer window even if not active. MINIBUF nil or omitted means count the minibuffer iff @@ -70,20 +76,25 @@ counts, all windows on all frames that share that minibuffer count too. Therefore, when a separate minibuffer frame is active, `walk-windows' includes the windows in the frame from which you entered the minibuffer, as well as the minibuffer window. But if the -minibuffer does not count, only windows from WINDOW's frame count. - -ALL-FRAMES is the optional third argument. -ALL-FRAMES nil or omitted means cycle within the frames as specified above. -ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -ALL-FRAMES = t means include windows on all frames including invisible frames. +minibuffer does not count, only the selected window counts. + +By default, only the windows in the selected frame are included. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES nil or omitted means cycle within the frames as specified above. +WHICH-FRAMES = `visible' means include windows on all visible frames. +WHICH-FRAMES = 0 means include windows on all visible and iconified frames. +WHICH-FRAMES = t means include windows on all frames including invisible frames. Anything else means restrict to WINDOW's frame. -If optional fourth argument DEVICE is nil or omitted, include frames -on all devices. -If a device, include frames only on that device. -If a device type, include frames only on devices of that type. -Otherwise, include frames only on the selected device." +The optional fourth argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices." ;; If we start from the minibuffer window, don't fail to come back to it. (if (window-minibuffer-p (selected-window)) (setq minibuf t)) @@ -94,9 +105,9 @@ Otherwise, include frames only on the selected device." (walk-windows-current walk-windows-start)) (while (progn (setq walk-windows-current - (next-window walk-windows-current minibuf all-frames - device)) - (funcall proc walk-windows-current) + (next-window walk-windows-current minibuf which-frames + which-devices)) + (funcall function walk-windows-current) (not (eq walk-windows-current walk-windows-start)))))) ;; The old XEmacs definition of the above clause. It's more correct in ;; that it will never hit a window that's already been hit even if you @@ -107,12 +118,12 @@ Otherwise, include frames only on the selected device." ; (walk-windows-current (selected-window))) ; (while (progn ; (setq walk-windows-current -; (next-window walk-windows-current minibuf all-frames -; device)) +; (next-window walk-windows-current minibuf which-frames +; which-devices)) ; (not (memq walk-windows-current walk-windows-history))) ; (setq walk-windows-history (cons walk-windows-current ; walk-windows-history)) -; (funcall proc walk-windows-current)))) +; (funcall function walk-windows-current)))) (defun minibuffer-window-active-p (window) "Return t if WINDOW (a minibuffer window) is now active." @@ -213,7 +224,7 @@ If the variable split-window-keep-point is non-nil, both new windows will get the same value of point as the current window. This is often more convenient for editing. -Otherwise, we chose window starts so as to minimize the amount of +Otherwise, we choose window starts so as to minimize the amount of redisplay; this is convenient on slow terminals. The new selected window is the one that the current value of point appears in. The value of point can change if the text around point is hidden by the @@ -329,30 +340,31 @@ or if the window is the only window of its frame." (kill-buffer buffer)) (error "Aborted"))) -;;; New with XEmacs 20.3 -;;; Suggested by Noah Friedman, and tuned by Hrvoje Niksic. -(defun window-list (&optional minibuf all-frames device) +(defun window-list (&optional minibuf which-frames which-devices) "Return a list of existing windows. If the optional argument MINIBUF is non-nil, then include minibuffer windows in the result. By default, only the windows in the selected frame are returned. -The optional argument ALL-FRAMES changes this behavior: -ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -ALL-FRAMES = t means include windows on all frames including invisible frames. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES = `visible' means include windows on all visible frames. +WHICH-FRAMES = 0 means include windows on all visible and iconified frames. +WHICH-FRAMES = t means include windows on all frames including invisible frames. Anything else means restrict to the selected frame. -The optional fourth argument DEVICE further clarifies which frames to -search as specified by ALL-FRAMES. This value is only meaningful if -ALL-FRAMES is non-nil. -If nil or omitted, search only the selected device. -If a device, search frames only on that device. -If a device type, search frames only on devices of that type. -Any other non-nil value means search frames on all devices." + +The optional fourth argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices." (let ((wins nil)) (walk-windows (lambda (win) (push win wins)) - minibuf all-frames device) + minibuf which-frames which-devices) wins)) ;;; window.el ends here diff --git a/lisp/x-faces.el b/lisp/x-faces.el index 5dddded..aabfe87 100644 --- a/lisp/x-faces.el +++ b/lisp/x-faces.el @@ -101,41 +101,38 @@ (encoding "[^-]+") ; false! ) (setq x-font-regexp - (purecopy - (concat "\\`\\*?[-?*]" - foundry - family - weight\? - slant\? - swidth - adstyle - - pixelsize - pointsize - resx - resy - spacing - avgwidth - - registry - encoding "\\'" - ))) + (concat "\\`\\*?[-?*]" + foundry - family - weight\? - slant\? - swidth - adstyle - + pixelsize - pointsize - resx - resy - spacing - avgwidth - + registry - encoding "\\'" + )) (setq x-font-regexp-head - (purecopy - (concat "\\`[-?*]" foundry - family - weight\? - slant\? - "\\([-*?]\\|\\'\\)"))) + (concat "\\`[-?*]" foundry - family - weight\? - slant\? + "\\([-*?]\\|\\'\\)")) (setq x-font-regexp-head-2 - (purecopy - (concat "\\`[-?*]" foundry - family - weight\? - slant\? - - swidth - adstyle - pixelsize - pointsize - "\\([-*?]\\|\\'\\)"))) - (setq x-font-regexp-slant (purecopy (concat - slant -))) - (setq x-font-regexp-weight (purecopy (concat - weight -))) + (concat "\\`[-?*]" foundry - family - weight\? - slant\? + - swidth - adstyle - pixelsize - pointsize + "\\([-*?]\\|\\'\\)")) + (setq x-font-regexp-slant (concat - slant -)) + (setq x-font-regexp-weight (concat - weight -)) ;; if we can't match any of the more specific regexps (unfortunate) then ;; look for digits; assume 2+ digits is 10ths of points, and 1-2 digits ;; is pixels. Bogus as hell. - (setq x-font-regexp-pixel (purecopy "[-?*]\\([0-9][0-9]?\\)[-?*]")) - (setq x-font-regexp-point (purecopy "[-?*]\\([0-9][0-9]+\\)[-?*]")) + (setq x-font-regexp-pixel "[-?*]\\([0-9][0-9]?\\)[-?*]") + (setq x-font-regexp-point "[-?*]\\([0-9][0-9]+\\)[-?*]") ;; the following two are used by x-font-menu.el. (setq x-font-regexp-foundry-and-family - (purecopy (concat "\\`[-?*]" foundry - "\\(" family "\\)" -))) + (concat "\\`[-?*]" foundry - "\\(" family "\\)" -)) (setq x-font-regexp-registry-and-encoding - (purecopy (concat - "\\(" registry "\\)" - "\\(" encoding "\\)\\'"))) + (concat - "\\(" registry "\\)" - "\\(" encoding "\\)\\'")) (setq x-font-regexp-spacing - (purecopy (concat - "\\(" spacing "\\)" - avgwidth - - registry - encoding "\\'"))) + (concat - "\\(" spacing "\\)" - avgwidth + - registry - encoding "\\'")) ) ;; A "loser font" is something like "8x13" -> "8x13bold". ;; These are supported only through extreme generosity. -(defconst x-loser-font-regexp (purecopy "\\`[0-9]+x[0-9]+\\'")) +(defconst x-loser-font-regexp "\\`[0-9]+x[0-9]+\\'") (defun x-frob-font-weight (font which) (if (font-instance-p font) (setq font (font-instance-name font))) diff --git a/lisp/x-font-menu.el b/lisp/x-font-menu.el index 03b4092..b4adead 100644 --- a/lisp/x-font-menu.el +++ b/lisp/x-font-menu.el @@ -38,17 +38,16 @@ "Registry and encoding to use with font menu fonts.") (defvar x-fonts-menu-junk-families - (purecopy - (mapconcat - #'identity - '("cursor" "glyph" "symbol" ; Obvious losers. - "\\`Ax...\\'" ; FrameMaker fonts - there are just way too + (mapconcat + #'identity + '("cursor" "glyph" "symbol" ; Obvious losers. + "\\`Ax...\\'" ; FrameMaker fonts - there are just way too ; many of these, and there is a different ; font family for each font face! Losers. ; "Axcor" -> "Applix Courier Roman", ; "Axcob" -> "Applix Courier Bold", etc. - ) - "\\|")) + ) + "\\|") "A regexp matching font families which are uninteresting (e.g. cursor fonts).") (defun hack-font-truename (fn) diff --git a/lisp/x-mouse.el b/lisp/x-mouse.el index 2d57100..3db5e6c 100644 --- a/lisp/x-mouse.el +++ b/lisp/x-mouse.el @@ -40,7 +40,7 @@ (defun x-mouse-kill (event) "Kill the text between the point and mouse and copy it to the clipboard and -to the cut buffer" +to the cut buffer." (interactive "@e") (let ((old-point (point))) (mouse-set-point event) diff --git a/lisp/x-select.el b/lisp/x-select.el index 3b3a598..1dcf05a 100644 --- a/lisp/x-select.el +++ b/lisp/x-select.el @@ -51,7 +51,7 @@ (define-obsolete-function-alias 'x-cut-copy-clear-internal 'cut-copy-clear-internal) (define-obsolete-function-alias 'x-get-selection 'get-selection) (define-obsolete-function-alias 'x-get-clipboard 'get-clipboard) -(define-obsolete-function-alias 'x-yank-clipboard-selection +(define-obsolete-function-alias 'x-yank-clipboard-selection 'yank-clipboard-selection) (define-obsolete-function-alias 'x-disown-selection-internal 'disown-selection-internal) @@ -72,14 +72,14 @@ be the text between those markers)." (own-selection selection 'SECONDARY)) (defun x-notice-selection-requests (selection type successful) - "for possible use as the value of x-sent-selection-hooks." + "for possible use as the value of `x-sent-selection-hooks'." (if (not successful) (message "Selection request failed to convert %s to %s" selection type) (message "Sent selection %s as %s" selection type))) (defun x-notice-selection-failures (selection type successful) - "for possible use as the value of x-sent-selection-hooks." + "for possible use as the value of `x-sent-selection-hooks'." (or successful (message "Selection request failed to convert %s to %s" selection type))) @@ -95,32 +95,25 @@ be the text between those markers)." "Return the value of one of the 8 X server cut buffers. Optional arg WHICH-ONE should be a number from 0 to 7, defaulting to 0. Cut buffers are considered obsolete; you should use selections instead. -This function does nothing if support for cut buffers was not compiled -into Emacs." - (and (fboundp 'x-get-cutbuffer-internal) - (x-get-cutbuffer-internal - (if which-one - (aref [CUT_BUFFER0 CUT_BUFFER1 CUT_BUFFER2 CUT_BUFFER3 - CUT_BUFFER4 CUT_BUFFER5 CUT_BUFFER6 CUT_BUFFER7] - which-one) - 'CUT_BUFFER0)))) +This function does nothing if cut buffer support was not compiled in." + (when (fboundp 'x-get-cutbuffer-internal) + (x-get-cutbuffer-internal + (aref [CUT_BUFFER0 CUT_BUFFER1 CUT_BUFFER2 CUT_BUFFER3 + CUT_BUFFER4 CUT_BUFFER5 CUT_BUFFER6 CUT_BUFFER7] + (or which-one 0))))) ;;; FSF name x-set-cut-buffer (defun x-store-cutbuffer (string &optional push) "Store STRING into the X server's primary cut buffer. -If PUSH is non-nil, also rotate the cut buffers: -this means the previous value of the primary cut buffer moves the second +If optional arg PUSH is non-nil, also rotate the cut buffers: this +means the previous value of the primary cut buffer moves to the second cut buffer, and the second to the third, and so on (there are 8 buffers.) Cut buffers are considered obsolete; you should use selections instead. -This function does nothing if support for cut buffers was not compiled -into Emacs." - (and (fboundp 'x-store-cutbuffer-internal) - (progn - ;; Check the data type of STRING. - (substring string 0 0) - (if push - (x-rotate-cutbuffers-internal 1)) - (x-store-cutbuffer-internal 'CUT_BUFFER0 string)))) +This function does nothing if cut buffer support was not compiled in." + (when (fboundp 'x-store-cutbuffer-internal) + (when push + (x-rotate-cutbuffers-internal 1)) + (x-store-cutbuffer-internal 'CUT_BUFFER0 string))) ;FSFmacs (provide 'select) diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index c530488..776a3b8 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -1,7 +1,21 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-11-02 Stephen J. Turnbull + + * lwlib.h: Typo fixes and tiny clarifications. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. +2000-09-21 Andy Piper + + * lwlib.h: declare copy_widget_value_tree. + + * lwlib.c (copy_widget_value_tree): make non-static. + 2000-09-19 Martin Buchholz * *: Spelling mega-patch diff --git a/lwlib/lwlib.h b/lwlib/lwlib.h index 76d3241..9ee62e8 100644 --- a/lwlib/lwlib.h +++ b/lwlib/lwlib.h @@ -104,7 +104,7 @@ typedef struct _widget_args ArgList args; int nargs; /* Copying args is impossible so we make the caller give us heap allocated - args and free them when on-one wants them any more. */ + args and free them when no one wants them any more. */ int ref_count; } widget_args; @@ -115,7 +115,7 @@ typedef struct _widget_value /* name of widget */ char* name; - /* value (meaning BOGUSLY depend on widget type) */ + /* value (meaning BOGUSLY depends on widget type) */ char* value; /* keyboard equivalent. no implications for XtTranslations */ char* key; @@ -134,11 +134,11 @@ typedef struct _widget_value Boolean edited; /* true if has changed (maintained by lw library) */ change_type change; - /* Contents of the sub-widgets, also selected slot for checkbox */ + /* Contents of sub-widgets, also selected slot for checkbox */ struct _widget_value* contents; /* data passed to callback */ XtPointer call_data; - /* next one in the list */ + /* next in the list of siblings */ struct _widget_value* next; /* slot for the toolkit dependent part. Always initialize to NULL. */ void* toolkit_data; diff --git a/man/ChangeLog b/man/ChangeLog index 959ddd5..0ba2252 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,328 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-10-27 Martin Buchholz + + * xemacs/windows.texi (Other Window): + + * new-users-guide/files.texi (Saving Files): + * new-users-guide/search.texi (Search and Replace): + + * lispref/abbrevs.texi (Abbrev Tables): + * lispref/abbrevs.texi (Defining Abbrevs): + * lispref/abbrevs.texi (Abbrev Files): + * lispref/annotations.texi (Annotation Primitives): + * lispref/backups.texi (Auto-Saving): + * lispref/backups.texi (Reverting): + * lispref/buffers.texi (Current Buffer): + * lispref/buffers.texi (Buffer Names): + * lispref/buffers.texi (Buffer Modification): + * lispref/buffers.texi (Read Only Buffers): + * lispref/buffers.texi (The Buffer List): + * lispref/buffers.texi (Killing Buffers): + * lispref/buffers.texi (Indirect Buffers): + * lispref/building.texi (Building XEmacs): + * lispref/building.texi (Garbage Collection): + * lispref/commands.texi (Interactive Call): + * lispref/commands.texi (Events): + * lispref/commands.texi (Event Predicates): + * lispref/commands.texi (Working With Events): + * lispref/commands.texi (Converting Events): + * lispref/commands.texi (Key Sequence Input): + * lispref/commands.texi (Reading One Event): + * lispref/commands.texi (Waiting): + * lispref/commands.texi (Prefix Command Arguments): + * lispref/commands.texi (Recursive Editing): + * lispref/compile.texi (Compilation Functions): + * lispref/compile.texi (Compiled-Function Objects): + * lispref/consoles-devices.texi (Basic Device Functions): + * lispref/consoles-devices.texi (Console Types and Device Classes): + * lispref/consoles-devices.texi (Connecting to a Console or Device): + * lispref/control.texi (Signaling Errors): + * lispref/customize.texi (Type Keywords): + * lispref/databases.texi (Connecting to a Database): + * lispref/databases.texi (Working With a Database): + * lispref/databases.texi (Other Database Functions): + * lispref/debugging.texi (Function Debugging): + * lispref/display.texi (Refresh Screen): + * lispref/display.texi (The Echo Area): + * lispref/display.texi (Blinking): + * lispref/edebug-inc.texi (Tracing): + * lispref/edebug-inc.texi (Instrumenting Macro Calls): + * lispref/edebug-inc.texi (Edebug Options): + * lispref/eval.texi (Function Indirection): + * lispref/extents.texi (Creating and Modifying Extents): + * lispref/extents.texi (Finding Extents): + * lispref/extents.texi (Mapping Over Extents): + * lispref/extents.texi (Extent Properties): + * lispref/faces.texi (Basic Face Functions): + * lispref/faces.texi (Face Properties): + * lispref/faces.texi (Face Convenience Functions): + * lispref/faces.texi (Other Face Display Functions): + * lispref/faces.texi (Font Instance Characteristics): + * lispref/faces.texi (Color Specifiers): + * lispref/files.texi (Visiting Functions): + * lispref/files.texi (Reading from Files): + * lispref/files.texi (Changing File Attributes): + * lispref/files.texi (File Names): + * lispref/files.texi (File Name Components): + * lispref/files.texi (Directory Names): + * lispref/files.texi (Relative File Names): + * lispref/files.texi (File Name Expansion): + * lispref/files.texi (File Name Completion): + * lispref/files.texi (User Name Completion): + * lispref/files.texi (Magic File Names): + * lispref/files.texi (Creating a Partial File): + * lispref/files.texi (Format Conversion): + * lispref/frames.texi (Creating Frames): + * lispref/frames.texi (Property Access): + * lispref/frames.texi (Size and Position): + * lispref/frames.texi (Deleting Frames): + * lispref/frames.texi (Finding All Frames): + * lispref/frames.texi (Frames and Windows): + * lispref/frames.texi (Visibility of Frames): + * lispref/frames.texi (Frame Configurations): + * lispref/functions.texi (Calling Functions): + * lispref/functions.texi (Function Cells): + * lispref/glyphs.texi (Creating Glyphs): + * lispref/glyphs.texi (Image Specifiers): + * lispref/glyphs.texi (Image Instance Types): + * lispref/glyphs.texi (Image Instance Functions): + * lispref/gutter.texi (Creating Gutter): + * lispref/gutter.texi (Specifying a Gutter): + * lispref/gutter.texi (Other Gutter Variables): + * lispref/help.texi (Accessing Documentation): + * lispref/help.texi (Help Functions): + * lispref/help.texi (Obsoleteness): + * lispref/internationalization.texi (Domain Specification): + * lispref/intro.texi (Caveats): + * lispref/keymaps.texi (Active Keymaps): + * lispref/keymaps.texi (Functions for Key Lookup): + * lispref/keymaps.texi (Changing Key Bindings): + * lispref/keymaps.texi (Scanning Keymaps): + * lispref/ldap.texi (The High-Level LDAP API): + * lispref/ldap.texi (Low-level Operations on a LDAP Server): + * lispref/ldap.texi (Encoder/Decoder Functions): + * lispref/lists.texi (Setcar): + * lispref/lists.texi (Setcdr): + * lispref/lists.texi (Working With Normal Plists): + * lispref/lists.texi (Working With Lax Plists): + * lispref/loading.texi (Autoload): + * lispref/loading.texi (Named Features): + * lispref/markers.texi (Creating Markers): + * lispref/markers.texi (Changing Markers): + * lispref/markers.texi (The Mark): + * lispref/menus.texi (Modifying Menus): + * lispref/menus.texi (Pop-Up Menus): + * lispref/menus.texi (Menu Accelerator Functions): + * lispref/minibuf.texi (Text from Minibuffer): + * lispref/minibuf.texi (Object from Minibuffer): + * lispref/minibuf.texi (Basic Completion): + * lispref/minibuf.texi (High-Level Completion): + * lispref/minibuf.texi (Reading a Password): + * lispref/minibuf.texi (Minibuffer Misc): + * lispref/mouse.texi (Mouse Tracking): + * lispref/syntax.texi (Syntax Table Functions): + * lispref/numbers.texi (Arithmetic Operations): + * lispref/numbers.texi (Rounding Operations): + * lispref/numbers.texi (Math Functions): + * lispref/objects.texi (String Type): + * lispref/objects.texi (Equality Predicates): + * lispref/os.texi (Killing XEmacs): + * lispref/os.texi (Suspending XEmacs): + * lispref/os.texi (System Environment): + * lispref/os.texi (Time Conversion): + * lispref/os.texi (Timers): + * lispref/os.texi (Input Modes): + * lispref/os.texi (Translating Input): + * lispref/os.texi (Terminal Output): + * lispref/os.texi (Flow Control): + * lispref/positions.texi (Character Motion): + * lispref/positions.texi (Word Motion): + * lispref/positions.texi (Text Lines): + * lispref/positions.texi (Screen Lines): + * lispref/positions.texi (List Motion): + * lispref/positions.texi (Narrowing): + * lispref/postgresql.texi (Asynchronous Interface Functions): + * lispref/processes.texi (Subprocess Creation): + * lispref/processes.texi (Synchronous Processes): + * lispref/processes.texi (Asynchronous Processes): + * lispref/processes.texi (Process Information): + * lispref/processes.texi (Input to Processes): + * lispref/processes.texi (Signals to Processes): + * lispref/processes.texi (Process Buffers): + * lispref/processes.texi (Filter Functions): + * lispref/processes.texi (Network): + * lispref/range-tables.texi (Working With Range Tables): + * lispref/searching.texi (String Search): + * lispref/searching.texi (Regexp Search): + * lispref/searching.texi (POSIX Regexps): + * lispref/searching.texi (Replacing Match): + * lispref/searching.texi (Entire Match Data): + * lispref/sequences.texi (Bit Vector Functions): + * lispref/specifiers.texi (Adding Specifications): + * lispref/specifiers.texi (Creating Specifiers): + * lispref/specifiers.texi (Specifier Validation Functions): + * lispref/specifiers.texi (Other Specification Functions): + * lispref/streams.texi (Output Variables): + * lispref/symbols.texi (Other Plists): + * lispref/text.texi (Insertion): + * lispref/text.texi (Commands for Insertion): + * lispref/text.texi (Deletion): + * lispref/text.texi (User-Level Deletion): + * lispref/text.texi (Kill Functions): + * lispref/text.texi (Low-Level Kill Ring): + * lispref/text.texi (Undo): + * lispref/text.texi (Maintaining Undo): + * lispref/text.texi (Margins): + * lispref/text.texi (Sorting): + * lispref/text.texi (Columns): + * lispref/text.texi (Primitive Indent): + * lispref/text.texi (Mode-Specific Indent): + * lispref/text.texi (Region Indent): + * lispref/text.texi (Case Changes): + * lispref/text.texi (Examining Properties): + * lispref/text.texi (Property Search): + * lispref/text.texi (Registers): + * lispref/text.texi (Transformations): + * lispref/mule.texi (Charset Property Functions): + * lispref/mule.texi (MULE Characters): + * lispref/mule.texi (Composite Characters): + * lispref/mule.texi (Coding System Properties): + * lispref/mule.texi (Big5 and Shift-JIS Functions): + * lispref/mule.texi (CCL Statements): + * lispref/mule.texi (Calling CCL): + * lispref/mule.texi (Category Tables): + * lispref/toolbar.texi (Specifying the Toolbar): + * lispref/toolbar.texi (Other Toolbar Variables): + * lispref/tooltalk.texi (Elisp Interface for Sending Messages): + * lispref/tooltalk.texi (Elisp Interface for Receiving Messages): + * lispref/variables.texi (Creating Buffer-Local): + * lispref/variables.texi (Variable Aliases): + * lispref/windows.texi (Splitting Windows): + * lispref/windows.texi (Deleting Windows): + * lispref/windows.texi (Selecting Windows): + * lispref/windows.texi (Cyclic Window Ordering): + * lispref/windows.texi (Buffers and Windows): + * lispref/windows.texi (Displaying Buffers): + * lispref/windows.texi (Choosing Window): + * lispref/windows.texi (Window Point): + * lispref/windows.texi (Window Start): + * lispref/windows.texi (Vertical Scrolling): + * lispref/windows.texi (Horizontal Scrolling): + * lispref/windows.texi (Resizing Windows): + * lispref/windows.texi (Window Configurations): + * lispref/x-windows.texi (X Selections): + * lispref/x-windows.texi (Resources): + * lispref/strings.texi (Creating Strings): + * lispref/strings.texi (Character Codes): + * lispref/strings.texi (Text Comparison): + * lispref/strings.texi (String Conversion): + * lispref/strings.texi (Formatting Strings): + * lispref/strings.texi (Character Case): + * lispref/strings.texi (Case Tables): + * lispref/strings.texi (Char Table Types): + * lispref/strings.texi (Working With Char Tables): + Giant docstring parameter/Texinfo fixes. + + Don't use abbreviations for English words, especially when those + words have other meanings. For example, use START, not BEG. + Use OBJECT, not OBJ. + Use VALUE, not VAL. + Use BUFFER, not BUF. + Use PROCESS, not PROC. (Sometimes PROC was used to mean FUNCTION!) + Use CHARACTER, not CH or CHR. + Use NUMBER, not NUM. + Use COLUMN, not COL. + Use POSITION, not POS. + Use SYMBOL, not SYM. + Use STRING, not STR. + Use LIMIT, not LIM. + Use OTHER-WINDOW-P, not OTHER-P. + Use PRIORITY, not PRI. + + Use `non-nil', not `true'. + + Don't call a parameter an ALIST if it can also be a FUNCTION or OBARRAY. + + Use CASE-TABLE, CATEGORY-TABLE, CHAR-TABLE, etc. instead of TABLE. + + Try to find better parameter names than ARG. + + Use consistent parameter names. For example, s/NO-ERROR/NOERROR/g; + + Use type information in parameter names. For example, use + (make-bit-vector length bit), not (make-bit-vector length init). + + Completion functions should have parameters with names like + PARTIAL-FILENAME instead of the misleading FILENAME. + + Type predicates should consistently take an OBJECT parameter, + since any object is valid as input. + + Use WHICH-FRAMES and WHICH-DEVICES parameters consistently for + functions like next-window and next-frame that walk over window or + frame lists. + + Deleted duplicated documentation for: + one-window-p, format-insert-file + + Deleted 21 lines of VMS-specific texinfo documentation. + + Fixed up a few places where `_' was used in docstring parameter + names instead of `-'. + + Fixed up places that used nil or t without @code. + + Fixed up places that erroneously used @code instead of @var. + + Fixed many typos. + + Fixed many places where the parameters mentioned in the docstring + didn't match the actual parameters. + + Fixed 7 places that used `@var{nil}' instead of `@code{nil}'. + + Fixed 40 places where docstrings were missing trailing `.' + + Fixed the texi documentation of 41 functions where the + interactiveness of the function in the documentation did not match + the implementation. + + Fixed 117 functions where the names of parameters in the texi was + different from the names in the implementation. + + Fixed the texi documentation of 137 functions where the parameter + list of the function in the texi was semantically different from + the implementation. + +2000-10-28 Adrian Aichner + + * xemacs-faq.texi (Q1.2.1): Use @html instead of @ifhtml to + incorporate raw HTML output in the HTML version. + +2000-11-02 Stephen J. Turnbull + + * xemacs/menus.texi: + * widget.texi: + Typo fixes and tiny clarifications. + +2000-10-19 Stephen J. Turnbull + + * xemacs-faq.texi: Added Q2.0.13, Q2.0.14 - packages why and how. + Added Q2.1.25 - function not found due to package not installed. + + * xemacs/xemacs.texi: + * xemacs/abbrevs.texi: + * xemacs/basic.texi: + * xemacs/building.texi: + * xemacs/packages.texi: + * xemacs/startup.texi: + Moved "Packages" node to "Important General Concepts" section. + + * xemacs/packages.texi: Added package list from etc/PACKAGES. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. diff --git a/man/internals/internals.texi b/man/internals/internals.texi index 5b8d38e..d7e67c5 100644 --- a/man/internals/internals.texi +++ b/man/internals/internals.texi @@ -1813,7 +1813,7 @@ Lisp lists are popular data structures in the C code as well as in Elisp. There are two sets of macros that iterate over lists. @code{EXTERNAL_LIST_LOOP_@var{n}} should be used when the list has been supplied by the user, and cannot be trusted to be acyclic and -nil-terminated. A @code{malformed-list} or @code{circular-list} error +@code{nil}-terminated. A @code{malformed-list} or @code{circular-list} error will be generated if the list being iterated over is not entirely kosher. @code{LIST_LOOP_@var{n}}, on the other hand, is faster and less safe, and can be used only on trusted lists. @@ -4810,7 +4810,7 @@ for example @code{or}, @code{and}, @code{if}, @code{cond}, @code{while}, @code{setq}, etc., miscellaneous @code{gui_item_...} functions, everything related to @code{eval} (@code{Feval_buffer}, @code{call0}, ...) and inside @code{Fsignal}. The latter is used to handle signals, as -for example the ones raised by every @code{QUITE}-macro triggered after +for example the ones raised by every @code{QUIT}-macro triggered after pressing Ctrl-g. @node garbage_collect_1, mark_object, Invocation, Garbage Collection - Step by Step @@ -5390,7 +5390,7 @@ A @dfn{mark} method. This is called during the marking stage and passed a function pointer (usually the @code{mark_object()} function), which is used to mark an object. All Lisp objects that are contained within the object need to be marked by applying this function to them. The mark -method should also return a Lisp object, which should be either nil or +method should also return a Lisp object, which should be either @code{nil} or an object to mark. (This can be used in lieu of calling @code{mark_object()} on the object, to reduce the recursion depth, and consequently should be the most heavily nested sub-object, such as a @@ -8113,7 +8113,7 @@ All windows have three fields governing their contents: these are @dfn{hchild} (a list of horizontally-arrayed children), @dfn{vchild} (a list of vertically-arrayed children), and @dfn{buffer} (the buffer contained in a leaf window). Exactly one of -these will be non-nil. Remember that @dfn{horizontally-arrayed} +these will be non-@code{nil}. Remember that @dfn{horizontally-arrayed} means ``side-by-side'' and @dfn{vertically-arrayed} means @dfn{one above the other}. @@ -8121,7 +8121,7 @@ means ``side-by-side'' and @dfn{vertically-arrayed} means Leaf windows also have markers in their @code{start} (the first buffer position displayed in the window) and @code{pointm} (the window's stashed value of @code{point}---see above) fields, -while combination windows have nil in these fields. +while combination windows have @code{nil} in these fields. @item The list of children for a window is threaded through the @@ -8531,7 +8531,7 @@ generalized to handle integers and linked list equally well). @section Zero-Length Extents Extents can be zero-length, and will end up that way if their endpoints -are explicitly set that way or if their detachable property is nil +are explicitly set that way or if their detachable property is @code{nil} and all the text in the extent is deleted. (The exception is open-open zero-length extents, which are barred from existing because there is no sensible way to define their properties. Deletion of the text in diff --git a/man/lispref/abbrevs.texi b/man/lispref/abbrevs.texi index c59e84c..1736cbe 100644 --- a/man/lispref/abbrevs.texi +++ b/man/lispref/abbrevs.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/abbrevs.info @node Abbrevs, Extents, Syntax Tables, Top @@ -42,7 +42,7 @@ Mode, emacs, The XEmacs Reference Manual}. @end menu @node Abbrev Mode -@section Setting Up Abbrev Mode +@section Setting Up Abbrev Mode Abbrev mode is a minor mode controlled by the value of the variable @code{abbrev-mode}. @@ -76,8 +76,8 @@ This function undefines all the abbrevs in abbrev table @var{table}, leaving it empty. The function returns @code{nil}. @end defun -@defun define-abbrev-table tabname definitions -This function defines @var{tabname} (a symbol) as an abbrev table name, +@defun define-abbrev-table table-name definitions +This function defines @var{table-name} (a symbol) as an abbrev table name, i.e., as a variable whose value is an abbrev table. It defines abbrevs in the table according to @var{definitions}, a list of elements of the form @code{(@var{abbrevname} @var{expansion} @var{hook} @@ -121,7 +121,7 @@ abbrev, or @code{nil} if the user declines to confirm redefining an existing abbrev. @end defun -@defun define-abbrev table name expansion hook +@defun define-abbrev table name &optional expansion hook count This function defines an abbrev in @var{table} named @var{name}, to expand to @var{expansion}, and call @var{hook}. The return value is an uninterned symbol that represents the abbrev inside XEmacs; its name is @@ -165,7 +165,7 @@ described here. This is the default file name for reading and saving abbrevs. @end defopt -@defun quietly-read-abbrev-file filename +@defun quietly-read-abbrev-file &optional filename This function reads abbrev definitions from a file named @var{filename}, previously written with @code{write-abbrev-file}. If @var{filename} is @code{nil}, the file specified in @code{abbrev-file-name} is used. @@ -181,7 +181,7 @@ the file to save the abbrevs in. @end defopt @defvar abbrevs-changed -This variable is set non-@code{nil} by defining or altering any +This variable is set non-@code{nil} by defining or altering any abbrevs. This serves as a flag for various XEmacs commands to offer to save your abbrevs. @end defvar diff --git a/man/lispref/annotations.texi b/man/lispref/annotations.texi index 700375f..755851b 100644 --- a/man/lispref/annotations.texi +++ b/man/lispref/annotations.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c Copyright (C) 1995 Ben Wing. @c See the file lispref.texi for copying conditions. @setfilename ../../info/annotations.info @@ -123,10 +123,10 @@ space to display in. @section Annotation Primitives @defun make-annotation glyph &optional position layout buffer with-event d-glyph rightp -This function creates a marginal annotation at position @var{pos} in +This function creates a marginal annotation at position @var{position} in @var{buffer}. The annotation is displayed using @var{glyph}, which should be a glyph object or a string, and is positioned using layout -policy @var{layout}. If @var{pos} is @code{nil}, point is used. If +policy @var{layout}. If @var{position} is @code{nil}, point is used. If @var{layout} is @code{nil}, @code{whitespace} is used. If @var{buffer} is @code{nil}, the current buffer is used. @@ -180,7 +180,7 @@ which should be a glyph object. @defun annotation-face annotation This function returns the face associated with @var{annotation}. @end defun - + @defun set-annotation-face annotation face This function sets the face associated with @var{annotation} to @var{face}. diff --git a/man/lispref/backups.texi b/man/lispref/backups.texi index 62fc2e8..e1c0a18 100644 --- a/man/lispref/backups.texi +++ b/man/lispref/backups.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/backups.info @node Backups and Auto-Saving, Buffers, Files, Top @@ -78,9 +78,9 @@ which may save disk space. (You would put this code in your @smallexample @group -(add-hook 'rmail-mode-hook +(add-hook 'rmail-mode-hook (function (lambda () - (make-local-variable + (make-local-variable 'make-backup-files) (setq make-backup-files nil)))) @end group @@ -121,7 +121,7 @@ its value. Major modes should not set this variable---they should set @subsection Backup by Renaming or by Copying? @cindex backup files, how to make them - There are two ways that XEmacs can make a backup file: + There are two ways that XEmacs can make a backup file: @itemize @bullet @item @@ -347,7 +347,7 @@ This function returns the name of the most recent backup file for Some file comparison commands use this function so that they can automatically compare a file with its most recent backup. -@end defun +@end defun @node Auto-Saving @section Auto-Saving @@ -421,7 +421,7 @@ be sure to redefine the function @code{make-auto-save-file-name} correspondingly. @end defun -@defun make-auto-save-file-name +@defun make-auto-save-file-name &optional filename This function returns the file name to use for auto-saving the current buffer. This is just the file name with hash marks (@samp{#}) appended and prepended to it. This function does not look at the variable @@ -581,7 +581,7 @@ about them, you can get rid of them by reading in the previous version of the file with the @code{revert-buffer} command. @xref{Reverting, , Reverting a Buffer, emacs, The XEmacs Reference Manual}. -@deffn Command revert-buffer &optional check-auto-save noconfirm +@deffn Command revert-buffer &optional check-auto-save noconfirm preserve-modes This command replaces the buffer text with the text of the visited file on disk. This action undoes all changes since the file was visited or saved. @@ -597,6 +597,10 @@ Normally, @code{revert-buffer} asks for confirmation before it changes the buffer; but if the argument @var{noconfirm} is non-@code{nil}, @code{revert-buffer} does not ask for confirmation. +Optional third argument @var{preserve-modes} non-@code{nil} means don't +alter the files modes. Normally we reinitialize them using +@code{normal-mode}. + Reverting tries to preserve marker positions in the buffer by using the replacement feature of @code{insert-file-contents}. If the buffer contents and the file contents are identical before the revert diff --git a/man/lispref/buffers.texi b/man/lispref/buffers.texi index cc95f52..301364d 100644 --- a/man/lispref/buffers.texi +++ b/man/lispref/buffers.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/buffers.info @node Buffers, Windows, Backups and Auto-Saving, Top @@ -13,7 +13,7 @@ also be buffers that are not visiting files. While several buffers may exist at one time, exactly one buffer is designated the @dfn{current buffer} at any time. Most editing commands act on the contents of the current buffer. Each buffer, including the current buffer, may or may -not be displayed in any windows. +not be displayed in any window. @menu * Buffer Basics:: What is a buffer? @@ -134,7 +134,7 @@ original buffer. Next, @code{set-buffer} makes another buffer current. Finally, @code{insert-buffer-substring} copies the string from the original current buffer to the new current buffer. - If the buffer appended to happens to be displayed in some window, + If the buffer appended to happens to be displayed in some window, the next redisplay will show how its text has changed. Otherwise, you will not see the change immediately on the screen. The buffer becomes current temporarily during the execution of the command, but this does @@ -194,9 +194,9 @@ not display the buffer in the currently selected window or in any other window, so the user cannot necessarily see the buffer. But Lisp programs can in any case work on it. -This function returns the buffer identified by @var{buffer-or-name}. -An error is signaled if @var{buffer-or-name} does not identify an -existing buffer. +@var{buffer-or-name} must be a buffer or the name of an existing +buffer--else an error is signaled. This function returns the buffer +identified by @var{buffer-or-name}. @end defun @node Buffer Names @@ -265,11 +265,11 @@ buffer under the name @samp{*shell*}. @end deffn @defun get-buffer buffer-or-name -This function returns the buffer specified by @var{buffer-or-name}. -If @var{buffer-or-name} is a string and there is no buffer with that -name, the value is @code{nil}. If @var{buffer-or-name} is a buffer, it -is returned as given. (That is not very useful, so the argument is usually -a name.) For example: +This function returns the buffer named @var{buffer-or-name}. If +@var{buffer-or-name} is a string and there is no buffer with that name, +the value is @code{nil}. If @var{buffer-or-name} is actually a buffer, +it is returned as given. (That is not very useful, so the argument is +usually a name.) For example: @example @group @@ -289,8 +289,6 @@ a name.) For example: See also the function @code{get-buffer-create} in @ref{Creating Buffers}. @end defun -@c Emacs 19 feature -@c IGNORE is only in XEmacs @defun generate-new-buffer-name starting-name &optional ignore This function returns a name that would be unique for a new buffer---but does not create the buffer. It starts with @var{starting-name}, and @@ -443,9 +441,10 @@ otherwise. If @var{buffer} is not supplied, the current buffer is tested. @end defun -@defun set-buffer-modified-p flag -This function marks the current buffer as modified if @var{flag} is +@defun set-buffer-modified-p flag &optional buffer +This function marks @var{buffer} as modified if @var{flag} is non-@code{nil}, or as unmodified if the flag is @code{nil}. +@var{buffer} defaults to the current buffer. Another effect of calling this function is to cause unconditional redisplay of the modeline for the current buffer. In fact, the @@ -477,7 +476,7 @@ counter that increments every time the buffer is modified. If @node Modification Time @section Comparison of Modification Time @cindex comparison of modification time -@cindex modification time, comparison of +@cindex modification time, comparison of Suppose that you visit a file and make changes in its buffer, and meanwhile the file itself is changed on disk. At this point, saving the @@ -545,7 +544,7 @@ some other program has probably altered the file. Depending on the user's answer, the function may return normally, in which case the modification of the buffer proceeds, or it may signal a @code{file-supersession} error with data @code{(@var{filename})}, in which -case the proposed buffer modification is not allowed. +case the proposed buffer modification is not allowed. This function is called automatically by XEmacs on the proper occasions. It exists so you can customize XEmacs by redefining it. @@ -560,7 +559,7 @@ See also the file locking mechanism in @ref{File Locks}. @cindex buffer, read-only If a buffer is @dfn{read-only}, then you cannot change its contents, -although you may change your view of the contents by scrolling and +although you may change your view of the contents by scrolling and narrowing. Read-only buffers are used in two kinds of situations: @@ -601,18 +600,35 @@ properties have no effect. If @code{inhibit-read-only} is a list, then of the list (comparison is done with @code{eq}). @end defvar -@deffn Command toggle-read-only -This command changes whether the current buffer is read-only. It is -intended for interactive use; don't use it in programs. At any given -point in a program, you should know whether you want the read-only flag -on or off; so you can set @code{buffer-read-only} explicitly to the -proper value, @code{t} or @code{nil}. +@deffn Command toggle-read-only &optional arg +This command changes whether the current buffer is read-only. +Interactively, if a prefix arg @var{arg} is supplied, set the current +buffer read only if and only if @var{arg} is positive. + +This command is intended for interactive use only; don't use it in +programs. At any given point in a program, you should know whether you +want the read-only flag on or off; so you can set +@code{buffer-read-only} explicitly to the proper value, @code{t} or +@code{nil}. @end deffn -@defun barf-if-buffer-read-only -This function signals a @code{buffer-read-only} error if the current -buffer is read-only. @xref{Interactive Call}, for another way to -signal an error if the current buffer is read-only. +@defun barf-if-buffer-read-only &optional buffer start end +This function signals a @code{buffer-read-only} error if @var{buffer} is +read-only. @var{buffer} defaults to the current buffer. +@xref{Interactive Call}, for another way to signal an error if the +current buffer is read-only. + +If optional argument @var{start} is non-@code{nil}, all extents in the +buffer which overlap that part of the buffer are checked to ensure none +has a @code{read-only} property. (Extents that lie completely within the +range, however, are not checked.) @var{end} defaults to the value of +@var{start}. + +If @var{start} and @var{end} are equal, the range checked is +[@var{start}, @var{end}] (i.e. closed on both ends); otherwise, the +range checked is (@var{start}, @var{end}) \(open on both ends), except +that extents that lie completely within [@var{start}, @var{end}] are not +checked. See @code{extent-in-region-p} for a fuller discussion. @end defun @node The Buffer List @@ -656,7 +672,7 @@ global, non-frame ordering is returned instead. ;; @r{Note that the name of the minibuffer} ;; @r{begins with a space!} (mapcar (function buffer-name) (buffer-list)) - @result{} ("buffers.texi" " *Minibuf-1*" + @result{} ("buffers.texi" " *Minibuf-1*" "buffer.c" "*Help*" "TAGS") @end group @end example @@ -698,7 +714,6 @@ If no suitable buffer exists, the buffer @samp{*scratch*} is returned Note that in FSF Emacs 19, there is no @var{frame} argument, and @var{visible-ok} is the second argument instead of the third. -FSF Emacs 19. @end defun @deffn Command list-buffers &optional files-only @@ -709,7 +724,7 @@ intended for interactive use, and is described fully in @cite{The XEmacs Reference Manual}. It returns @code{nil}. @end deffn -@deffn Command bury-buffer &optional buffer-or-name +@deffn Command bury-buffer &optional buffer-or-name before This function puts @var{buffer-or-name} at the end of the buffer list without changing the order of any of the other buffers on the list. This buffer therefore becomes the least desirable candidate for @@ -821,16 +836,17 @@ buffers, the indirect buffers are automatically killed as well. whether a buffer has been killed, you can either use this feature or the function @code{buffer-live-p}. -@defun buffer-live-p buffer -This function returns @code{nil} if @var{buffer} is deleted, and -@code{t} otherwise. +@defun buffer-live-p object +This function returns @code{t} if @var{object} is an editor buffer that +has not been deleted, @code{nil} otherwise. @end defun @deffn Command kill-buffer buffer-or-name This function kills the buffer @var{buffer-or-name}, freeing all its memory for use as space for other buffers. (Emacs version 18 and older was unable to return the memory to the operating system.) It returns -@code{nil}. +@code{nil}. The argument @var{buffer-or-name} may be a buffer or the +name of one. Any processes that have this buffer as the @code{process-buffer} are sent the @code{SIGHUP} signal, which normally causes them to terminate. @@ -917,7 +933,7 @@ the base buffer kills all its indirect children. This creates an indirect buffer named @var{name} whose base buffer is @var{base-buffer}. The argument @var{base-buffer} may be a buffer or a string. - + If @var{base-buffer} is an indirect buffer, its base buffer is used as the base for the new buffer. @@ -946,7 +962,7 @@ not supplied, it defaults to the current buffer. @defun buffer-indirect-children &optional buffer This function returns a list of all indirect buffers whose base buffer is @var{buffer}. If @var{buffer} is indirect, the return value will -always be nil; see @code{make-indirect-buffer}. If @var{buffer} is not +always be @code{nil}; see @code{make-indirect-buffer}. If @var{buffer} is not supplied, it defaults to the current buffer. @example diff --git a/man/lispref/building.texi b/man/lispref/building.texi index 9f962af..4e9c1cd 100644 --- a/man/lispref/building.texi +++ b/man/lispref/building.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/building.info @node Building XEmacs and Object Allocation, Standard Errors, Tips, Top @@ -127,10 +127,14 @@ most emphatically @emph{not} call this yourself; it will reinitialize your XEmacs process and you'll be sorry. @end defun -@deffn Command emacs-version +@deffn Command emacs-version &optional arg This function returns a string describing the version of XEmacs that is running. It is useful to include this string in bug reports. +When called interactively with a prefix argument, insert string at point. +Don't use this function in programs to choose actions according +to the system configuration; look at @code{system-configuration} instead. + @example @group (emacs-version) @@ -150,7 +154,7 @@ local site. @example @group emacs-build-time "Mon Apr 7 20:28:52 1997" - @result{} + @result{} @end group @end example @end defvar @@ -310,7 +314,7 @@ information: (@var{used-syms} . @var{free-syms}) @end group (@var{used-markers} . @var{free-markers}) - @var{used-string-chars} + @var{used-string-chars} @var{used-vector-slots} (@var{plist})) @@ -436,6 +440,7 @@ not apply if XEmacs was configured with @samp{--debug}. Therefore, be careful when setting @code{gc-cons-threshold} in that case!) @end defopt +@ignore @c Emacs 19 feature @defun memory-limit This function returns the address of the last byte XEmacs has allocated, @@ -445,6 +450,7 @@ Lisp integer. You can use this to get a general idea of how your actions affect the memory usage. @end defun +@end ignore @defvar pre-gc-hook This is a normal hook to be run just before each garbage collection. diff --git a/man/lispref/commands.texi b/man/lispref/commands.texi index d68d1b4..9821a57 100644 --- a/man/lispref/commands.texi +++ b/man/lispref/commands.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/commands.info @node Command Loop, Keymaps, Minibuffers, Top @@ -11,7 +11,7 @@ When you run XEmacs, it enters the @dfn{editor command loop} almost immediately. This loop reads events, executes their definitions, and displays the results. In this chapter, we describe how these things -are done, and the subroutines that allow Lisp programs to do them. +are done, and the subroutines that allow Lisp programs to do them. @menu * Command Overview:: How the command loop reads commands. @@ -429,7 +429,7 @@ value becomes the argument for the command. Prompt. @node Interactive Examples @subsection Examples of Using @code{interactive} @cindex examples of using @code{interactive} -@cindex @code{interactive}, examples of using +@cindex @code{interactive}, examples of using Here are some examples of @code{interactive}: @@ -487,9 +487,9 @@ command, @code{command-execute} calls @code{call-interactively}, which reads the arguments and calls the command. You can also call these functions yourself. -@defun commandp object -Returns @code{t} if @var{object} is suitable for calling interactively; -that is, if @var{object} is a command. Otherwise, returns @code{nil}. +@defun commandp function +Returns @code{t} if @var{function} is suitable for calling interactively; +that is, if @var{function} is a command. Otherwise, returns @code{nil}. The interactively callable objects include strings and vectors (treated as keyboard macros), lambda expressions that contain a top-level call to @@ -508,7 +508,7 @@ See @code{documentation} in @ref{Accessing Documentation}, for a realistic example of using @code{commandp}. @end defun -@defun call-interactively command &optional record-flag +@defun call-interactively command &optional record-flag keys This function calls the interactively callable function @var{command}, reading arguments according to its interactive calling specifications. An error is signaled if @var{command} is not a function or if it cannot @@ -518,7 +518,7 @@ considered commands, because they are not functions. @c XEmacs feature? If @var{record-flag} is the symbol @code{lambda}, the interactive -calling arguments for @code{command} are read and returned as a list, +calling arguments for @var{command} are read and returned as a list, but the function is not called on them. @cindex record command history @@ -528,7 +528,7 @@ Otherwise, the command is added only if it uses the minibuffer to read an argument. @xref{Command History}. @end defun -@defun command-execute command &optional record-flag +@defun command-execute command &optional record-flag keys @cindex keyboard macro execution This function executes @var{command} as an editing command. The argument @var{command} must satisfy the @code{commandp} predicate; i.e., @@ -632,7 +632,7 @@ foobar @section Information from the Command Loop The editor command loop sets several Lisp variables to keep status -records for itself and for commands that are run. +records for itself and for commands that are run. @defvar last-command This variable records the name of the previous command executed by the @@ -792,7 +792,7 @@ For information about how exactly the XEmacs command loop works, @xref{Reading Input}. @defun eventp object -This function returns non-@code{nil} if @var{event} is an input event. +This function returns non-@code{nil} if @var{object} is an input event. @end defun @menu @@ -847,7 +847,7 @@ also specify the modifier keys that were held down at the time. a portion of a frame needing to be redrawn) has occurred. The contents of this event are not accessible at the E-Lisp level, but @code{dispatch-event} knows what to do with an event of this type. - + @item eval event This is a special kind of event specifying that a particular function needs to be called when this event is dispatched. An event of this type @@ -1009,7 +1009,7 @@ particular type. This is true if @var{object} is a key-press event. @end defun -@defun button-event-p object object +@defun button-event-p object This is true if @var{object} is a mouse button-press or button-release event. @end defun @@ -1327,7 +1327,7 @@ The event button. This an integer, either 1, 2 or 3. It is allowed only for button-press and button-release events. @item @code{modifiers} -The event modifiers. This is a list of modifier symbols. It is allowed +The event modifiers. This is a list of modifier symbols. It is allowed for key-press, button-press, button-release and motion events. @item @code{x} @@ -1430,10 +1430,11 @@ feature of @var{plist}. The following example creates a copy of @end defun @defun copy-event event1 &optional event2 -This function makes a copy of the given event object. If a second -argument is given, the first event is copied into the second and the -second is returned. If the second argument is not supplied (or is -@code{nil}) then a new event will be made. +This function makes a copy of the event object @var{event1}. If a +second event argument @var{event2} is given, @var{event1} is copied into +@var{event2} and @var{event2} is returned. If @var{event2} is not +supplied (or is @code{nil}) then a new event will be made, as with +@code{make-event}. @end defun @defun deallocate-event event @@ -1442,7 +1443,7 @@ This function allows the given event structure to be reused. You it. You will lose. It is not necessary to call this function, as event objects are garbage-collected like all other objects; however, it may be more efficient to explicitly deallocate events when you are sure that -that is safe. +it is safe to do so. @end defun @node Converting Events @@ -1452,25 +1453,32 @@ XEmacs provides some auxiliary functions for converting between events and other ways of representing keys. These are useful when working with @sc{ascii} strings and with keymaps. -@defun character-to-event ch &optional event device -This function converts a numeric @sc{ascii} value to an event structure, -replete with modifier bits. @var{ch} is the character to convert, and +@defun character-to-event key-description &optional event console use-console-meta-flag +This function converts a keystroke description to an event structure. +@var{key-description} is the specification of a key stroke, and @var{event} is the event object to fill in. This function contains knowledge about what the codes ``mean''---for example, the number 9 is converted to the character @key{Tab}, not the distinct character @key{Control-I}. -Note that @var{ch} does not have to be a numeric value, but can be a -symbol such as @code{clear} or a list such as @code{(control -backspace)}. +Note that @var{key-description} can be an integer, a character, a symbol +such as @code{clear} or a list such as @code{(control backspace)}. + +If optional arg @var{event} is non-@code{nil}, it is modified; +otherwise, a new event object is created. In both cases, the event is +returned. -If @code{event} is not @code{nil}, it is modified; otherwise, a -new event object is created. In both cases, the event is returned. +Optional third arg @var{console} is the console to store in the event, +and defaults to the selected console. -Optional third arg @var{device} is the device to store in the event; -this also affects whether the high bit is interpreted as a meta key. A -value of @code{nil} means use the selected device but always treat the -high bit as meta. +If @var{key-description} is an integer or character, the high bit may be +interpreted as the meta key. (This is done for backward compatibility in +lots of places.) If @var{use-console-meta-flag} is @code{nil}, this +will always be the case. If @var{use-console-meta-flag} is +non-@code{nil}, the @code{meta} flag for @var{console} affects whether +the high bit is interpreted as a meta key. (See @code{set-input-mode}.) +If you don't want this silly meta interpretation done, you should pass +in a list containing the character. Beware that @code{character-to-event} and @code{event-to-character} are not strictly inverse functions, since events contain much more @@ -1540,15 +1548,15 @@ Lisp programs can read input a key sequence at a time by calling @code{read-key-sequence}; for example, @code{describe-key} uses it to read the key to describe. -@defun read-key-sequence prompt +@defun read-key-sequence prompt &optional continue-echo dont-downcase-last @cindex key sequence This function reads a sequence of keystrokes or mouse clicks and returns -it as a vector of events. It keeps reading events until it has -accumulated a full key sequence; that is, enough to specify a non-prefix -command using the currently active keymaps. +it as a vector of event objects read. It keeps reading events until it +has accumulated a full key sequence; that is, enough to specify a +non-prefix command using the currently active keymaps. -The vector and the event objects it contains are freshly created, and -will not be side-effected by subsequent calls to this function. +The vector and the event objects it contains are freshly created (and +so will not be side-effected by subsequent calls to this function). The function @code{read-key-sequence} suppresses quitting: @kbd{C-g} typed while reading with this function works like any other character, @@ -1557,6 +1565,17 @@ and does not set @code{quit-flag}. @xref{Quitting}. The argument @var{prompt} is either a string to be displayed in the echo area as a prompt, or @code{nil}, meaning not to display a prompt. +Second optional arg @var{continue-echo} non-@code{nil} means this key +echoes as a continuation of the previous key. + +Third optional arg @var{dont-downcase-last} non-@code{nil} means do not +convert the last event to lower case. (Normally any upper case event is +converted to lower case if the original event is undefined and the lower +case equivalent is defined.) This argument is provided mostly for +@var{fsf} compatibility; the equivalent effect can be achieved more +generally by binding @code{retry-undefined-key-binding-unshifted} to +@code{nil} around the call to @code{read-key-sequence}. + @c XEmacs feature If the user selects a menu item while we are prompting for a key sequence, the returned value will be a vector of a single menu-selection @@ -1618,7 +1637,7 @@ In most cases, the function @code{next-command-event} is more appropriate. @end defun -@defun next-command-event &optional event +@defun next-command-event &optional event prompt This function returns the next available ``user'' event from the window system or terminal driver. Pass this object to @code{dispatch-event} to handle it. If an event object is supplied, it is filled in and @@ -1745,7 +1764,7 @@ functions to read command input. For example, the function that implements numeric prefix arguments reads any number of digits. When it finds a non-digit event, it must unread the event so that it can be read normally by the command loop. -Likewise, incremental search uses this feature to unread events with no +Likewise, incremental search uses this feature to unread events with no special meaning in a search, because these events should exit the search and then execute normally. @@ -1823,7 +1842,7 @@ It returns @code{nil}. In the following example, the user may type a number of characters right after starting the evaluation of the form. After the @code{sleep-for} -finishes sleeping, @code{discard-input} discards any characters typed +finishes sleeping, @code{discard-input} discards any characters typed during the sleep. @example @@ -1850,7 +1869,7 @@ take two arguments to specify the time (one integer and one float value), instead of a single argument that can be either an integer or a float. -@defun sit-for seconds &optional nodisp +@defun sit-for seconds &optional nodisplay This function performs redisplay (provided there is no pending input from the user), then waits @var{seconds} seconds, or until input is available. The result is @code{t} if @code{sit-for} waited the full @@ -1859,15 +1878,6 @@ and Discarding}). Otherwise, the value is @code{nil}. The argument @var{seconds} need not be an integer. If it is a floating point number, @code{sit-for} waits for a fractional number of seconds. -@ignore FSF Emacs stuff -Some systems support only a whole number of seconds; on these systems, -@var{seconds} is rounded down. - -The optional argument @var{millisec} specifies an additional waiting -period measured in milliseconds. This adds to the period specified by -@var{seconds}. If the system doesn't support waiting fractions of a -second, you get an error if you specify nonzero @var{millisec}. -@end ignore @cindex forcing redisplay Redisplay is normally preempted if input arrives, and does not happen at @@ -1876,7 +1886,7 @@ updating in such a case by using @code{force-redisplay}. @xref{Refresh Screen}.) If there is no input pending, you can force an update with no delay by using @code{(sit-for 0)}. -If @var{nodisp} is non-@code{nil}, then @code{sit-for} does not +If @var{nodisplay} is non-@code{nil}, then @code{sit-for} does not redisplay, but it still returns as soon as input is available (or when the timeout elapses). @@ -1946,7 +1956,7 @@ non-@code{nil} in any way thus causes a quit. At the level of C code, quitting cannot happen just anywhere; only at the special places that check @code{quit-flag}. The reason for this is that quitting at other places might leave an inconsistency in XEmacs's -internal state. Because quitting is delayed until a safe place, quitting +internal state. Because quitting is delayed until a safe place, quitting cannot make XEmacs crash. Certain functions such as @code{read-key-sequence} or @@ -1955,7 +1965,7 @@ for input. Instead of quitting, @kbd{C-g} serves as the requested input. In the case of @code{read-key-sequence}, this serves to bring about the special behavior of @kbd{C-g} in the command loop. In the case of @code{read-quoted-char}, this is so that @kbd{C-q} can be used -to quote a @kbd{C-g}. +to quote a @kbd{C-g}. You can prevent quitting for a portion of a Lisp function by binding the variable @code{inhibit-quit} to a non-@code{nil} value. Then, @@ -2010,7 +2020,7 @@ in @ref{Errors}.) You can specify a character other than @kbd{C-g} to use for quitting. See the function @code{set-input-mode} in @ref{Terminal Input}. - + @node Prefix Command Arguments @section Prefix Command Arguments @cindex prefix argument @@ -2081,13 +2091,13 @@ M-3 M-x display-prefix @print{} 3 ; @r{(Same as @code{C-u 3}.)} C-3 M-x display-prefix @print{} 3 ; @r{(Same as @code{C-u 3}.)} -C-u - M-x display-prefix @print{} - +C-u - M-x display-prefix @print{} - M-- M-x display-prefix @print{} - ; @r{(Same as @code{C-u -}.)} C-- M-x display-prefix @print{} - ; @r{(Same as @code{C-u -}.)} -C-u - 7 M-x display-prefix @print{} -7 +C-u - 7 M-x display-prefix @print{} -7 M-- 7 M-x display-prefix @print{} -7 ; @r{(Same as @code{C-u -7}.)} @@ -2108,9 +2118,9 @@ argument, either numeric or raw, in the @code{interactive} declaration. value of the prefix argument directly in the variable @code{current-prefix-arg}, but this is less clean. -@defun prefix-numeric-value arg +@defun prefix-numeric-value raw This function returns the numeric meaning of a valid raw prefix argument -value, @var{arg}. The argument may be a symbol, a number, or a list. +value, @var{raw}. The argument may be a symbol, a number, or a list. If it is @code{nil}, the value 1 is returned; if it is @code{-}, the value @minus{}1 is returned; if it is a number, that number is returned; if it is a list, the @sc{car} of that list (which should be a number) is @@ -2219,7 +2229,7 @@ a recursive edit but also provides the other features of the debugger. Recursive editing levels are also used when you type @kbd{C-r} in @code{query-replace} or use @kbd{C-x q} (@code{kbd-macro-query}). -@defun recursive-edit +@deffn Command recursive-edit @cindex suspend evaluation This function invokes the editor command loop. It is called automatically by the initialization of XEmacs, to let the user begin @@ -2241,17 +2251,17 @@ then type @kbd{C-M-c} to exit and continue executing @code{simple-rec}. (simple-rec) @result{} nil @end example -@end defun +@end deffn @deffn Command exit-recursive-edit This function exits from the innermost recursive edit (including minibuffer input). Its definition is effectively @code{(throw 'exit -nil)}. +nil)}. @end deffn @deffn Command abort-recursive-edit This function aborts the command that requested the innermost recursive -edit (including minibuffer input), by signaling @code{quit} +edit (including minibuffer input), by signaling @code{quit} after exiting the recursive edit. Its definition is effectively @code{(throw 'exit t)}. @xref{Quitting}. @end deffn @@ -2394,7 +2404,7 @@ not a symbol, string, or vector, an error is signaled. The argument @var{count} is a repeat count; @var{macro} is executed that many times. If @var{count} is omitted or @code{nil}, @var{macro} is executed once. If it is 0, @var{macro} is executed over and over until it -encounters an error or a failing search. +encounters an error or a failing search. @end defun @defvar executing-macro diff --git a/man/lispref/compile.texi b/man/lispref/compile.texi index 6feb3e0..7db86b7 100644 --- a/man/lispref/compile.texi +++ b/man/lispref/compile.texi @@ -213,17 +213,23 @@ for the file name. @end deffn @c flag is not optional in FSF Emacs -@deffn Command byte-recompile-directory directory &optional flag +@deffn Command byte-recompile-directory directory &optional flag norecursion force @cindex library compilation This function recompiles every @samp{.el} file in @var{directory} that needs recompilation. A file needs recompilation if a @samp{.elc} file exists but is older than the @samp{.el} file. +Files in subdirectories of @var{directory} are also processed unless +optional argument @var{norecursion} is non-@code{nil}. + When a @samp{.el} file has no corresponding @samp{.elc} file, then @var{flag} says what to do. If it is @code{nil}, these files are ignored. If it is non-@code{nil}, the user is asked whether to compile each such file. +If the fourth optional argument @var{force} is non-@code{nil}, +recompile every @samp{.el} file that already has a @samp{.elc} file. + The return value of this command is unpredictable. @end deffn @@ -254,7 +260,7 @@ normally @code{nil}, but is bound to @code{t} by @code{batch-byte-recompile-directory}. @end defvar -@defun byte-code instructions constants stack-size +@defun byte-code instructions constants stack-depth @cindex byte-code interpreter This function actually interprets byte-code. Don't call this function yourself. Only the byte compiler knows how to @@ -451,7 +457,7 @@ The string containing the byte-code instructions. The vector of Lisp objects referenced by the byte code. These include symbols used as function names and variable names. -@item stack-size +@item stack-depth The maximum stack size this function needs. @item doc-string @@ -485,7 +491,7 @@ representation. It is the definition of the command The primitive way to create a compiled-function object is with @code{make-byte-code}: -@defun make-byte-code arglist instructions constants stack-size &optional doc-string interactive +@defun make-byte-code arglist instructions constants stack-depth &optional doc-string interactive This function constructs and returns a compiled-function object with the specified attributes. @@ -522,7 +528,7 @@ This function returns the vector of Lisp objects referenced by compiled-function object @var{function}. @end defun -@defun compiled-function-stack-size function +@defun compiled-function-stack-depth function This function returns the maximum stack size needed by compiled-function object @var{function}. @end defun diff --git a/man/lispref/consoles-devices.texi b/man/lispref/consoles-devices.texi index 67f5f07..3a0e4bc 100644 --- a/man/lispref/consoles-devices.texi +++ b/man/lispref/consoles-devices.texi @@ -90,12 +90,14 @@ frame. This function is useful because devices and frames are similar in many respects and many functions can operate on either one. @end defun -@defun device-frame-list device +@defun device-frame-list &optional device This function returns a list of all frames on @var{device}. +@var{device} defaults to the currently selected device. @end defun -@defun frame-device frame +@defun frame-device &optional frame This function returns the device that @var{frame} is on. +@var{frame} defaults to the currently selected frame. @end defun @node Console Types and Device Classes @@ -136,16 +138,17 @@ but no color). A device that can only display two colors (e.g. black and white). @end table -@defun device-type device +@defun device-type &optional device This function returns the type of @var{device}. This is a symbol whose -name is one of the device types mentioned above. +name is one of the device types mentioned above. @var{device} defaults +to the selected device. @end defun @defun device-or-frame-type device-or-frame This function returns the type of @var{device-or-frame}. @end defun -@defun device-class device +@defun device-class &optional device This function returns the class (color behavior) of @var{device}. This is a symbol whose name is one of the device classes mentioned above. @end defun @@ -168,14 +171,14 @@ represents XEmacs's stdout. @node Connecting to a Console or Device @section Connecting to a Console or Device -@defun make-device &optional type device-data +@defun make-device type connection &optional props This function creates a new device. @end defun The following two functions create devices of specific types and are written in terms of @code{make-device}. -@defun make-tty-device &optional tty terminal-type +@defun make-tty-device &optional tty terminal-type This function creates a new tty device on @var{tty}. This also creates the tty's first frame. @var{tty} should be a string giving the name of a tty device file (e.g. @samp{/dev/ttyp3} under SunOS et al.), as @@ -193,7 +196,7 @@ argument @var{argv-list} is a list of strings describing command line options. @end defun -@defun delete-device device +@defun delete-device device &optional force This function deletes @var{device}, permanently eliminating it from use. This disconnects XEmacs's connection to the device. @end defun diff --git a/man/lispref/control.texi b/man/lispref/control.texi index 4588d48..59000f7 100644 --- a/man/lispref/control.texi +++ b/man/lispref/control.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/control.info @node Control Structures, Variables, Evaluation, Top @@ -152,7 +152,7 @@ based on the value of @var{condition}. If the evaluated @var{condition} is non-@code{nil}, @var{then-form} is evaluated and the result returned. Otherwise, the @var{else-forms} are evaluated in textual order, and the value of the last one is returned. (The @var{else} part of @code{if} is -an example of an implicit @code{progn}. @xref{Sequencing}.) +an example of an implicit @code{progn}. @xref{Sequencing}.) If @var{condition} has the value @code{nil}, and no @var{else-forms} are given, @code{if} returns @code{nil}. @@ -163,8 +163,8 @@ never evaluated---it is ignored. Thus, in the example below, @example @group -(if nil - (print 'true) +(if nil + (print 'true) 'very-false) @result{} very-false @end group @@ -226,7 +226,7 @@ clauses was successful. To do this, we use @code{t} as the never @code{nil}, so this clause never fails, provided the @code{cond} gets to it at all. -For example, +For example, @example @group @@ -360,7 +360,7 @@ You could almost write @code{or} in terms of @code{if}, but not quite: @example @group (if @var{arg1} @var{arg1} - (if @var{arg2} @var{arg2} + (if @var{arg2} @var{arg2} @var{arg3})) @end group @end example @@ -581,7 +581,7 @@ return points at once. First, two return points with the same tag, @end group @group -(catch 'hack +(catch 'hack (print (catch2 'hack)) 'no) @print{} yes @@ -664,48 +664,161 @@ which you call for other purposes, such as if you try to take the buffer; you can also signal errors explicitly with the functions @code{error}, @code{signal}, and others. - Quitting, which happens when the user types @kbd{C-g}, is not + Quitting, which happens when the user types @kbd{C-g}, is not considered an error, but it is handled almost like an error. @xref{Quitting}. -@defun error format-string &rest args -This function signals an error with an error message constructed by -applying @code{format} (@pxref{String Conversion}) to -@var{format-string} and @var{args}. +XEmacs has a rich hierarchy of error symbols predefined via @code{deferror}. + +@example +error + syntax-error + invalid-read-syntax + list-formation-error + malformed-list + malformed-property-list + circular-list + circular-property-list + + invalid-argument + wrong-type-argument + args-out-of-range + wrong-number-of-arguments + invalid-function + no-catch + + invalid-state + void-function + cyclic-function-indirection + void-variable + cyclic-variable-indirection + + invalid-operation + invalid-change + setting-constant + editing-error + beginning-of-buffer + end-of-buffer + buffer-read-only + io-error + end-of-file + arith-error + range-error + domain-error + singularity-error + overflow-error + underflow-error +@end example + +The five most common errors you will probably use or base your new +errors off of are @code{syntax-error}, @code{invalid-argument}, +@code{invalid-state}, @code{invalid-operation}, and +@code{invalid-change}. Note the semantic differences: + +@itemize @bullet +@item +@code{syntax-error} is for errors in complex structures: parsed strings, +lists, and the like. + +@item +@code{invalid-argument} is for errors in a simple value. Typically, the +entire value, not just one part of it, is wrong. + +@item +@code{invalid-state} means that some settings have been changed in such +a way that their current state is unallowable. More and more, code is +being written more carefully, and catches the error when the settings +are being changed, rather than afterwards. This leads us to the next +error: + +@item +@code{invalid-change} means that an attempt is being made to change some +settings into an invalid state. @code{invalid-change} is a type of +@code{invalid-operation}. + +@item +@code{invalid-operation} refers to all cases where code is trying to do +something that's disallowed. This includes file errors, buffer errors +(e.g. running off the end of a buffer), @code{invalid-change} as just +mentioned, and arithmetic errors. +@end itemize + +@defun error datum &rest args +This function signals a non-continuable error. + +@var{datum} should normally be an error symbol, i.e. a symbol defined +using @code{define-error}. @var{args} will be made into a list, and +@var{datum} and @var{args} passed as the two arguments to @code{signal}, +the most basic error handling function. This error is not continuable: you cannot continue execution after the -error using the debugger @kbd{r} or @kbd{c} commands. If you wish the -user to be able to continue execution, use @code{cerror} or -@code{signal} instead. +error using the debugger @kbd{r} command. See also @code{cerror}. + +The correct semantics of @var{args} varies from error to error, but for +most errors that need to be generated in Lisp code, the first argument +should be a string describing the *context* of the error (i.e. the exact +operation being performed and what went wrong), and the remaining +arguments or \"frobs\" (most often, there is one) specify the offending +object(s) and/or provide additional details such as the exact error when +a file error occurred, e.g.: + +@itemize @bullet +@item +the buffer in which an editing error occurred. +@item +an invalid value that was encountered. (In such cases, the string +should describe the purpose or \"semantics\" of the value [e.g. if the +value is an argument to a function, the name of the argument; if the value +is the value corresponding to a keyword, the name of the keyword; if the +value is supposed to be a list length, say this and say what the purpose +of the list is; etc.] as well as specifying why the value is invalid, if +that's not self-evident.) +@item +the file in which an error occurred. (In such cases, there should be a +second frob, probably a string, specifying the exact error that occurred. +This does not occur in the string that precedes the first frob, because +that frob describes the exact operation that was happening. +@end itemize + +For historical compatibility, DATUM can also be a string. In this case, +@var{datum} and @var{args} are passed together as the arguments to +@code{format}, and then an error is signalled using the error symbol +@code{error} and formatted string. Although this usage of @code{error} +is very common, it is deprecated because it totally defeats the purpose +of having structured errors. There is now a rich set of defined errors +to use. + +See also @code{cerror}, @code{signal}, and @code{signal-error}." These examples show typical uses of @code{error}: @example @group -(error "You have committed an error. +(error 'syntax-error + "Dialog descriptor must supply at least one button" + descriptor) +@end group + +@group +(error "You have committed an error. Try something else.") - @error{} You have committed an error. + @error{} You have committed an error. Try something else. @end group @group (error "You have committed %d errors." 10) - @error{} You have committed 10 errors. + @error{} You have committed 10 errors. @end group @end example -@code{error} works by calling @code{signal} with two arguments: the -error symbol @code{error}, and a list containing the string returned by -@code{format}. This is repeated in an endless loop, to ensure that -@code{error} never returns. - If you want to use your own string as an error message verbatim, don't just write @code{(error @var{string})}. If @var{string} contains @samp{%}, it will be interpreted as a format specifier, with undesirable results. Instead, use @code{(error "%s" @var{string})}. @end defun -@defun cerror format-string &rest args +@defun cerror datum &rest args This function behaves like @code{error}, except that the error it signals is continuable. That means that debugger commands @kbd{c} and @kbd{r} can resume execution. @@ -966,9 +1079,9 @@ message and returns a very large number. @smallexample @group (defun safe-divide (dividend divisor) - (condition-case err + (condition-case err ;; @r{Protected form.} - (/ dividend divisor) + (/ dividend divisor) ;; @r{The handler.} (arith-error ; @r{Condition.} (princ (format "Arithmetic error: %s" err)) @@ -1011,7 +1124,7 @@ including those signaled with @code{error}: ;; @r{This is a call to the function @code{error}.} (error "Rats! The variable %s was %s, not 35" 'baz baz)) ;; @r{This is the handler; it is not a form.} - (error (princ (format "The error was: %s" err)) + (error (princ (format "The error was: %s" err)) 2)) @print{} The error was: (error "Rats! The variable baz was 34, not 35") @result{} 2 @@ -1119,7 +1232,7 @@ make it possible to categorize errors at various levels of generality when you write an error handler. Using error symbols alone would eliminate all but the narrowest level of classification. - + @xref{Standard Errors}, for a list of all the standard error symbols and their conditions. diff --git a/man/lispref/customize.texi b/man/lispref/customize.texi index 4c2c260..fddbf33 100644 --- a/man/lispref/customize.texi +++ b/man/lispref/customize.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1997, 1998 Free Software Foundation, Inc. +@c Copyright (C) 1997, 1998 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../info/customize @node Customization, , , Top @@ -13,8 +13,8 @@ definitions---as well as face definitions. @menu * Common Keywords:: -* Group Definitions:: -* Variable Definitions:: +* Group Definitions:: +* Variable Definitions:: * Customization Types:: @end menu @@ -627,7 +627,7 @@ Substitute the tag here. You specify the tag with the @code{:tag} keyword. @item %% -Display a literal @samp{%}. +Display a literal @samp{%}. @end table @item :action @var{action} @@ -710,7 +710,7 @@ in a @code{menu-choice} widget. By default, the tag used will be either the representation of the @code{:value} property if not. @item :validate -A function which takes a widget as an argument, and return nil if the +A function which takes a widget as an argument, and returns @code{nil} if the widgets current value is valid for the widget. Otherwise, it should return the widget containing the invalid data, and set that widgets @code{:error} property to a string explaining the error. @@ -727,7 +727,7 @@ implemented. @item Widgets with tabbing order @code{-1} are ignored. -@item +@item (Unimplemented) When on a widget with tabbing order @var{n}, go to the next widget in the buffer with tabbing order @var{n+1} or @code{nil}, whichever comes first. diff --git a/man/lispref/databases.texi b/man/lispref/databases.texi index b3106e3..6b05aa8 100644 --- a/man/lispref/databases.texi +++ b/man/lispref/databases.texi @@ -35,58 +35,58 @@ For a @var{type} of @code{'dbm}, there are no subtypes, so For a @var{type} of @code{'berkeley-db}, the following subtypes are available: @code{'hash}, @code{'btree}, and @code{'recno}. See the -manpages for the Berkeley DB functions for more information about these +manpages for the Berkeley DB functions for more information about these types. @end defun -@defun close-database obj -This function closes database @var{obj}. +@defun close-database database +This function closes database @var{database}. @end defun -@defun database-live-p obj -This function returns @code{t} iff @var{obj} is an active database, else +@defun database-live-p object +This function returns @code{t} if @var{object} is an active database, else @code{nil}. @end defun @node Working With a Database @section Working With a Database -@defun get-database key dbase &optional default +@defun get-database key database &optional default This function finds the value for @var{key} in @var{database}. If there is no corresponding value, @var{default} is returned (@code{nil} if @var{default} is omitted). @end defun -@defun map-database function dbase +@defun map-database function database This function maps @var{function} over entries in @var{database}, calling it with two args, each key and value in the database. @end defun -@defun put-database key val dbase &optional replace -This function stores @var{key} and @var{val} in @var{database}. If -optional fourth arg @var{replace} is non-@code{nil}, replace any +@defun put-database key value database &optional replace +This function stores @var{key} and @var{value} in @var{database}. +If optional fourth arg @var{replace} is non-@code{nil}, replace any existing entry in the database. @end defun -@defun remove-database key dbase +@defun remove-database key database This function removes @var{key} from @var{database}. @end defun @node Other Database Functions @section Other Database Functions -@defun database-file-name obj -This function returns the filename associated with the database @var{obj}. +@defun database-file-name database +This function returns the filename associated with @var{database}. @end defun -@defun database-last-error &optional obj -This function returns the last error associated with database @var{obj}. +@defun database-last-error &optional database +This function returns the last error associated with @var{database}. @end defun -@defun database-subtype obj -This function returns the subtype of database @var{obj}, if any. +@defun database-subtype database +This function returns the subtype of @var{database}, if any. @end defun -@defun database-type obj -This function returns the type of database @var{obj}. +@defun database-type database +This function returns the type of @var{database}. @end defun diff --git a/man/lispref/debugging.texi b/man/lispref/debugging.texi index 698d0ed..99c351e 100644 --- a/man/lispref/debugging.texi +++ b/man/lispref/debugging.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/debugging.info @node Debugging, Read and Print, Byte Compilation, Top @@ -232,7 +232,7 @@ Entering: @end example @end deffn -@deffn Command cancel-debug-on-entry function-name +@deffn Command cancel-debug-on-entry &optional function-name This function undoes the effect of @code{debug-on-entry} on @var{function-name}. When called interactively, it prompts for @var{function-name} in the minibuffer. If @var{function-name} is diff --git a/man/lispref/dialog.texi b/man/lispref/dialog.texi index 7aba6fb..a282f5e 100644 --- a/man/lispref/dialog.texi +++ b/man/lispref/dialog.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/dialog.info @node Dialog Boxes, Toolbar, Menus, Top diff --git a/man/lispref/display.texi b/man/lispref/display.texi index 1a85ffc..043f4e4 100644 --- a/man/lispref/display.texi +++ b/man/lispref/display.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/display.info @node Display, Hash Tables, Annotations, Top @@ -30,9 +30,14 @@ that XEmacs presents to the user. The function @code{redraw-frame} redisplays the entire contents of a given frame. @xref{Frames}. -@c Emacs 19 feature -@defun redraw-frame frame +@defun redraw-frame &optional frame no-preempt This function clears and redisplays frame @var{frame}. + +@var{frame} defaults to the selected frame if omitted. + +Normally, redisplay is preempted as normal if input arrives. However, +if optional second arg @var{no-preempt} is non-@code{nil}, redisplay +will not stop for input and is guaranteed to proceed to completion. @end defun Even more powerful is @code{redraw-display}: @@ -72,9 +77,9 @@ redrawn from scratch. Normally this occurs the next time that @code{next-event} or @code{sit-for} is called; however, a display update will not occur if there is input pending. @xref{Command Loop}. -@defun force-cursor-redisplay -This function causes an immediate update of the cursor on the selected -frame. (This function does not exist in FSF Emacs.) +@defun force-cursor-redisplay &optional frame +This function causes an immediate update of the cursor on @var{frame}, +which defaults to the selected frame. @end defun @node Truncation @@ -216,16 +221,16 @@ function; @item @code{progress}---progress indicators like @samp{Converting... 45%} (not logged by default); -@item @code{prompt}---prompt-like messages like @samp{Isearch: foo} (not +@item @code{prompt}---prompt-like messages like @samp{Isearch: foo} (not logged by default); -@item @code{command}---helper command messages like @samp{Mark set} (not +@item @code{command}---helper command messages like @samp{Mark set} (not logged by default); @item @code{no-log}---messages that should never be logged @end itemize -Several messages may be stacked in the echo area at once. Lisp programs +Several messages may be stacked in the echo area at once. Lisp programs may access these messages, or remove them as appropriate, via the message stack. @@ -273,7 +278,7 @@ displayed there. If a message remains at the head of the message-stack and @var{no-restore} is @code{nil}, it will be displayed. The string which remains in the echo area will be returned, or @code{nil} if the -message-stack is now empty. If @var{label} is nil, the entire +message-stack is now empty. If @var{label} is @code{nil}, the entire message-stack is cleared. @example @@ -554,7 +559,7 @@ effect is seen only within XEmacs. @defvar selective-display This buffer-local variable enables selective display. This means that -lines, or portions of lines, may be made invisible. +lines, or portions of lines, may be made invisible. @itemize @bullet @item @@ -823,7 +828,7 @@ at the matching parenthesis. A fraction of a second often gives good results, but the default is 1, which works on all systems. @end defvar -@defun blink-matching-open +@deffn Command blink-matching-open This function is the default value of @code{blink-paren-function}. It assumes that point follows a character with close parenthesis syntax and moves the cursor momentarily to the matching opening character. If that @@ -836,9 +841,6 @@ Here is an example of calling this function explicitly. @smallexample @group (defun interactive-blink-matching-open () -@c Do not break this line! -- rms. -@c The first line of a doc string -@c must stand alone. "Indicate momentarily the start of sexp before point." (interactive) @end group @@ -849,7 +851,7 @@ Here is an example of calling this function explicitly. (blink-matching-open))) @end group @end smallexample -@end defun +@end deffn @node Usual Display @section Usual Display Conventions diff --git a/man/lispref/dragndrop.texi b/man/lispref/dragndrop.texi index ceab662..5d48ba6 100644 --- a/man/lispref/dragndrop.texi +++ b/man/lispref/dragndrop.texi @@ -1,7 +1,7 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. @c Copyright (C) 1998 Oliver Graf -@c Original reference is (c) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Original reference is (c) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/dragndrop.texi @node Drag and Drop, Modes, Scrollbars, Top @@ -57,10 +57,10 @@ OffiX is supported if 'offix is member of the variable dragdrop-protocols, or the feature 'offix is defined. Unfortunately it uses it's own data types. Examples are: File, Files, -Exe, Link, URL, MIME. The API tries to choose the right type for the data that +Exe, Link, URL, MIME. The API tries to choose the right type for the data that is dragged from XEmacs (well, not yet...). -XEmacs supports both MIME and URL drags and drops using this API. No application +XEmacs supports both MIME and URL drags and drops using this API. No application interaction is possible while dragging is in progress. For information about the OffiX project have a look at http://leb.net/~offix/ @@ -107,7 +107,7 @@ misc-user-event. This misc-user-event has its function argument set to @code{dragdrop-drop-dispatch} and the object contains the data of the drop (converted to URL/MIME specific data). This function will search the variable -@code{experimental-dragdrop-drop-functions} for a function that can handle the +@code{experimental-dragdrop-drop-functions} for a function that can handle the dropped data. To modify the drop behavior, the user can modify the variable @@ -118,7 +118,7 @@ extent-property with the same name. Extents are checked prior to the variable. The customization group @code{drag-n-drop} shows all variables of user -interest. +interest. @node Drag Interface @section Drag Interface diff --git a/man/lispref/edebug-inc.texi b/man/lispref/edebug-inc.texi index bce6dbc..682ffc0 100644 --- a/man/lispref/edebug-inc.texi +++ b/man/lispref/edebug-inc.texi @@ -22,10 +22,10 @@ each breakpoint. @item Display expression results and evaluate expressions as if outside of -Edebug. Interface with the custom printing package +Edebug. Interface with the custom printing package for printing circular structures. -@item +@item Automatically reevaluate a list of expressions and display their results each time Edebug updates the display. @@ -108,7 +108,7 @@ open-parenthesis before @code{if}. @cindex stop points The places within a function where Edebug can stop execution are called @dfn{stop points}. These occur both before and after each subexpression -that is a list, and also after each variable reference. +that is a list, and also after each variable reference. Here we show with periods the stop points found in the function @code{fac}: @@ -134,7 +134,7 @@ the display you will see: @end example When Edebug stops execution after an expression, it displays the -expression's value in the echo area. +expression's value in the echo area. Other frequently used commands are @kbd{b} to set a breakpoint at a stop point, @kbd{g} to execute until a breakpoint is reached, and @kbd{q} to @@ -190,7 +190,7 @@ package you are using but only when you also use Edebug. For example, @file{my-package.el}. @example -(add-hook 'edebug-setup-hook +(add-hook 'edebug-setup-hook (function (lambda () (require 'my-specs)))) @end example @@ -288,7 +288,7 @@ program more slowly or stop sooner. When you enter a new Edebug level, the initial execution mode comes from the value of the variable @code{edebug-initial-mode}. By default, this specifies @code{step} mode. Note that you may reenter the same Edebug -level several times if, for example, an instrumented function is called +level several times if, for example, an instrumented function is called several times from one command. While executing or tracing, you can interrupt the execution by typing @@ -342,7 +342,7 @@ point, type @kbd{w} first, to move point there. @item o Continue ``out of'' an expression (@code{edebug-step-out}). It places a -temporary breakpoint at the end of the sexp containing point. +temporary breakpoint at the end of the sexp containing point. If the containing sexp is a function definition itself, it continues until just before the last sexp in the definition. If that is where you @@ -410,7 +410,7 @@ execution. From the Edebug recursive edit, you may invoke commands that activate Edebug again recursively. Any time Edebug is active, you can quit to the top level with @kbd{q} or abort one recursive edit level with -@kbd{C-]}. You can display a backtrace of all the +@kbd{C-]}. You can display a backtrace of all the pending evaluations with @kbd{d}. @@ -479,7 +479,7 @@ to the first breakpoint if there are no following breakpoints. This command does not continue execution---it just moves point in the buffer. @menu -* Global Break Condition:: Breaking on an event. +* Global Break Condition:: Breaking on an event. * Embedded Breakpoints:: Embedding breakpoints in code. @end menu @@ -495,7 +495,7 @@ break condition} is a condition that is repeatedly evaluated at every stop point. If it evaluates to a non-@code{nil} value, then execution is stopped or paused depending on the execution mode, just like a breakpoint. Any errors that might occur as a result of evaluating the -condition are ignored, as if the result were @code{nil}. +condition are ignored, as if the result were @code{nil}. @findex edebug-set-global-break-condition @vindex edebug-global-break-condition @@ -831,7 +831,7 @@ produce a traditional trace listing of execution in a separate buffer, @findex edebug-print-trace-before @findex edebug-print-trace-after -If the variable @code{edebug-trace} is non-nil, each function entry and +If the variable @code{edebug-trace} is non-@code{nil}, each function entry and exit adds lines to the trace buffer. On function entry, Edebug prints @samp{::::@{} followed by the function name and argument values. On function exit, Edebug prints @samp{::::@}} followed by the function name @@ -903,13 +903,13 @@ the breakpoint is reached, the frequency data is looks like this: @example (defun fac (n) (if (= n 0) (edebug)) -;#6 1 0 =5 +;#6 1 0 =5 (if (< 0 n) -;#5 = +;#5 = (* n (fac (1- n))) -;# 5 0 +;# 5 0 1)) -;# 0 +;# 0 @end example The comment lines show that @code{fac} has been called 6 times. The @@ -945,12 +945,12 @@ Whenever Edebug is entered just to think about whether to take some action, it needs to save and restore certain data. @itemize @bullet -@item +@item @code{max-lisp-eval-depth} and @code{max-specpdl-size} are both incremented one time to reduce Edebug's impact on the stack. You could, however, still run out of stack space when using Edebug. -@item +@item The state of keyboard macro execution is saved and restored. While Edebug is active, @code{executing-macro} is bound to @code{edebug-continue-kbd-macro}. @@ -978,19 +978,19 @@ following data, but some of these are deliberately not restored if an error or quit signal occurs. @itemize @bullet -@item +@item @cindex current buffer point and mark (Edebug) Which buffer is current, and where point and mark are in the current buffer are saved and restored. -@item +@item @cindex window configuration (Edebug) @findex save-excursion (Edebug) @vindex edebug-save-windows The Edebug Display Update, is saved and restored if @code{edebug-save-windows} is non-@code{nil}. It is not restored on error or quit, but the outside selected window @emph{is} reselected even -on error or quit in case a @code{save-excursion} is active. +on error or quit in case a @code{save-excursion} is active. If the value of @code{edebug-save-windows} is a list, only the listed windows are saved and restored. @@ -1007,7 +1007,7 @@ The variables @code{overlay-arrow-position} and @code{overlay-arrow-string} are saved and restored. So you can safely invoke Edebug from the recursive edit elsewhere in the same buffer. -@item +@item @code{cursor-in-echo-area} is locally bound to @code{nil} so that the cursor shows up in the window. @@ -1055,7 +1055,7 @@ evaluation list window. by the @code{recursive-edit}, but Edebug temporarily restores them during evaluations. -@item +@item The state of keyboard macro definition is saved and restored. While Edebug is active, @code{defining-kbd-macro} is bound to @code{edebug-continue-kbd-macro}. @@ -1074,7 +1074,7 @@ resulting expansion is evaluated, or any time later.) You must explain the format of macro call arguments by using @code{def-edebug-spec} to define an @dfn{Edebug specification} for each macro. -@deffn Macro def-edebug-spec macro specification +@defmac def-edebug-spec macro specification Specify which expressions of a call to macro @var{macro} are forms to be evaluated. For simple macros, the @var{specification} often looks very similar to the formal argument list of the macro definition, but @@ -1086,7 +1086,7 @@ name. Unless you are using Emacs 19 or XEmacs, this macro is only defined in Edebug, so you may want to use the following which is equivalent: @code{(put '@var{macro} 'edebug-form-spec '@var{specification})} -@end deffn +@end defmac Here is a simple example that defines the specification for the @code{for} macro described in the XEmacs Lisp Reference Manual, followed @@ -1194,7 +1194,7 @@ An unquoted anonymous lambda expression. @item &optional @cindex &optional (Edebug) All following elements in the specification list are optional; as soon -as one does not match, Edebug stops matching at this level. +as one does not match, Edebug stops matching at this level. To make just a few elements optional followed by non-optional elements, use @code{[&optional @var{specs}@dots{}]}. To specify that several @@ -1229,7 +1229,7 @@ Each of the following elements is matched as alternatives as if by using of them match, nothing is matched, but the @code{¬} specification succeeds. -@item &define +@item &define @cindex &define (Edebug) Indicates that the specification is for a defining form. The defining form itself is not instrumented (i.e. Edebug does not stop before and @@ -1243,7 +1243,7 @@ described here. See the @code{defun} example below. @table @code @item name -The argument, a symbol, is the name of the defining form. +The argument, a symbol, is the name of the defining form. But a defining form need not be named at all, in which case a unique name will be created for it. @@ -1442,7 +1442,7 @@ specification for the macro as follows: the specifications for those arguments must use @code{def-form} instead of @code{form}. (This is to reestablish the Edebugging context for those external forms.) -For example, the @code{for} macro +For example, the @code{for} macro @c (@pxref{Problems with Macros}) @c in XEmacs Lisp Reference Manual (@pxref{Problems with Macros,,,, XEmacs Lisp Reference Manual}) @c Edebug Doc is shown here but with @code{edebug-`} @@ -1517,8 +1517,8 @@ function body. @example (def-edebug-spec defmacro defun) ; @r{Indirect ref to @code{defun} spec} -(def-edebug-spec defun - (&define name lambda-list +(def-edebug-spec defun + (&define name lambda-list [&optional stringp] ; @r{Match the doc string, if present.} [&optional ("interactive" interactive)] def-body)) @@ -1594,7 +1594,7 @@ what happens to data about windows, you may want to set this variable to @code{nil}. If the value is a list, only the listed windows are saved and -restored. +restored. @kbd{M-x edebug-toggle-save-windows} may be used to change this variable. This command is bound to @kbd{W} in source code buffers. @@ -1621,7 +1621,7 @@ mode for Edebug when it is first activated. Possible values are @code{step}, @code{next}, @code{go}, @code{Go-nonstop}, @code{trace}, @code{Trace-fast}, @code{continue}, and @code{Continue-fast}. -The default value is @code{step}. +The default value is @code{step}. See @ref{Edebug Execution Modes}. @end defopt @@ -1630,15 +1630,15 @@ See @ref{Edebug Execution Modes}. @findex edebug-print-trace-after Non-@code{nil} means display a trace of function entry and exit. Tracing output is displayed in a buffer named @samp{*edebug-trace*}, one -function entry or exit per line, indented by the recursion level. +function entry or exit per line, indented by the recursion level. -The default value is @code{nil}. +The default value is @code{nil}. Also see @code{edebug-tracing}. See @ref{Tracing}. @end defopt -@defopt edebug-test-coverage +@defopt edebug-test-coverage If non-@code{nil}, Edebug tests coverage of all expressions debugged. This is done by comparing the result of each expression with the previous result. Coverage is considered OK if two different @@ -1651,7 +1651,7 @@ and coverage information for a definition. See @ref{Coverage Testing}. @end defopt -@defopt edebug-continue-kbd-macro +@defopt edebug-continue-kbd-macro If non-@code{nil}, continue defining or executing any keyboard macro that is executing outside of Edebug. Use this with caution since it is not debugged. @@ -1664,12 +1664,12 @@ results in Edebug. The default value is @code{50}. See @ref{Printing in Edebug}. @end defopt -@defopt edebug-print-level +@defopt edebug-print-level If non-@code{nil}, bind @code{print-level} to this while printing results in Edebug. The default value is @code{50}. @end defopt -@defopt edebug-print-circle +@defopt edebug-print-circle If non-@code{nil}, bind @code{print-circle} to this while printing results in Edebug. The default value is @code{nil}. @end defopt @@ -1694,6 +1694,6 @@ See @ref{Debugging Backquote}. @defopt edebug-global-break-condition If non-@code{nil}, an expression to test for at every stop point. -If the result is non-nil, then break. Errors are ignored. +If the result is non-@code{nil}, then break. Errors are ignored. See @ref{Global Break Condition}. @end defopt diff --git a/man/lispref/edebug.texi b/man/lispref/edebug.texi index 37f5ad4..527211a 100644 --- a/man/lispref/edebug.texi +++ b/man/lispref/edebug.texi @@ -149,7 +149,7 @@ sometimes. There is a bug in window updating when there is both a trace buffer and an evaluation list - the source buffer doesn't get displayed. -@item +@item Killing and reinserting an instrumented definition or parts of it leaves marks in the buffer which may confuse Edebug later. @@ -170,7 +170,7 @@ macros across the Edebug activation boundary. There are no other known bugs, so if you find any, please let me know. There is nothing worse than a buggy debugger! -@item +@item I need to rethink locally binding @code{debug-on-error}, @code{debug-on-quit}, and keyboard macro state variables. Should we allow the global values to be changed by the user? @@ -208,7 +208,7 @@ Use copy of @code{current-local-map} instead of @code{emacs-lisp-mode-map} Better integration with standard debug. @item -Use @code{inhibit-quit} while edebugging? +Use @code{inhibit-quit} while edebugging? @item Crawl mode would @code{sit-for} 0 or 1 in the outside window configuration diff --git a/man/lispref/errors.texi b/man/lispref/errors.texi index d246f1b..abde5b9 100644 --- a/man/lispref/errors.texi +++ b/man/lispref/errors.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/errors.info @node Standard Errors, Standard Buffer-Local Variables, Building XEmacs and Object Allocation, Top @@ -75,7 +75,7 @@ error message is constructed from the data items alone when the error condition @code{file-error} is present.@* @xref{Files}. -@item file-locked +@item file-locked This is a @code{file-error}.@* @xref{File Locks}. @@ -128,7 +128,7 @@ This is a @code{file-error}.@* @xref{Searching and Matching}. @item setting-constant -@code{"Attempt to set a constant symbol"}@* +@code{"Attempt to set a constant symbol"}@* @xref{Constant Variables, , Variables that Never Change}. @c XEmacs feature diff --git a/man/lispref/eval.texi b/man/lispref/eval.texi index 4714c04..71ce6d2 100644 --- a/man/lispref/eval.texi +++ b/man/lispref/eval.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/eval.info @node Evaluation, Control Structures, Symbols, Top @@ -30,7 +30,7 @@ function @code{eval}. @section Introduction to Evaluation The Lisp interpreter, or evaluator, is the program that computes -the value of an expression that is given to it. When a function +the value of an expression that is given to it. When a function written in Lisp is called, the evaluator computes the value of the function by evaluating the expressions in the function body. Thus, running any Lisp program really means running the Lisp interpreter. @@ -433,7 +433,7 @@ function, not a symbol. @smallexample @group ((lambda (arg) (erste arg)) - '(1 2 3)) + '(1 2 3)) @result{} 1 @end group @end smallexample @@ -445,12 +445,11 @@ symbol function indirection when calling @code{erste}. The built-in function @code{indirect-function} provides an easy way to perform symbol function indirection explicitly. -@c Emacs 19 feature -@defun indirect-function function -This function returns the meaning of @var{function} as a function. If -@var{function} is a symbol, then it finds @var{function}'s function -definition and starts over with that value. If @var{function} is not a -symbol, then it returns @var{function} itself. +@defun indirect-function object +This function returns the meaning of @var{object} as a function. If +@var{object} is a symbol, then it finds @var{object}'s function +definition and starts over with that value. If @var{object} is not a +symbol, then it returns @var{object} itself. Here is how you could define @code{indirect-function} in Lisp: diff --git a/man/lispref/extents.texi b/man/lispref/extents.texi index a654d69..d9c852c 100644 --- a/man/lispref/extents.texi +++ b/man/lispref/extents.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c Copyright (C) 1996 Ben Wing. @c See the file lispref.texi for copying conditions. @setfilename ../../info/extents.info @@ -108,16 +108,16 @@ commands. @xref{Duplicable Extents}. @node Creating and Modifying Extents @section Creating and Modifying Extents -@defun make-extent from to &optional object +@defun make-extent from to &optional buffer-or-string This function makes an extent for the range [@var{from}, @var{to}) in -@var{object} (a buffer or string). @var{object} defaults to the current -buffer. Insertions at point @var{to} will be outside of the extent; -insertions at @var{from} will be inside the extent, causing the extent -to grow (@pxref{Extent Endpoints}). This is the same way that markers -behave. The extent is initially detached if both @var{from} and -@var{to} are @code{nil}, and in this case @var{object} defaults to -@code{nil}, meaning the extent is in no buffer or string -(@pxref{Detached Extents}). +@var{buffer-or-string} (a buffer or string). @var{buffer-or-string} +defaults to the current buffer. Insertions at point @var{to} will be +outside of the extent; insertions at @var{from} will be inside the +extent, causing the extent to grow (@pxref{Extent Endpoints}). This is +the same way that markers behave. The extent is initially detached if +both @var{from} and @var{to} are @code{nil}, and in this case +@var{buffer-or-string} defaults to @code{nil}, meaning the extent is in +no buffer or string (@pxref{Detached Extents}). @end defun @defun delete-extent extent @@ -135,9 +135,9 @@ however, a detached extent will not necessarily return a value of @code{nil}. @end defun -@defun extent-live-p extent -This function returns @code{nil} if @var{extent} is deleted, and -@code{t} otherwise. +@defun extent-live-p object +This function returns @code{t} if @var{object} is an extent that has not +been deleted, and @code{nil} otherwise. @end defun @node Extent Endpoints @@ -231,7 +231,7 @@ are also provided (@pxref{Mapping Over Extents}). When reading through this section, keep in mind the way that extents are ordered (@pxref{Extent Endpoints}). -@defun extent-list &optional buffer-or-string from to flags +@defun extent-list &optional buffer-or-string from to flags property value This function returns a list of the extents in @var{buffer-or-string}. @var{buffer-or-string} defaults to the current buffer if omitted. @var{from} and @var{to} can be used to limit the range over which @@ -245,10 +245,19 @@ to the beginning and end of @var{buffer-or-string}, respectively. @var{flags} controls how end cases are treated. For a discussion of this, and exactly what ``overlap'' means, see @code{map-extents}. + +The optional arguments @var{property} and @var{value} can be used to +further restrict which extents are returned. They have the same meaning +as for @code{map-extents}. + +If you want to map a function over the extents in a buffer or string, +consider using @code{map-extents} or @code{mapcar-extents} instead. + +See also the function @code{extents-at}. @end defun Functions that create extents must be prepared for the possibility -that there are other extents in the same area, created by other +that there are other extents in the same area, created by other functions. To deal with this, functions typically mark their own extents by setting a particular property on them. The following function makes it easier to locate those extents. @@ -326,8 +335,8 @@ the end of the region is open), but this can be changed with the @var{function} is called with the arguments (extent, @var{maparg}). The arguments @var{object}, @var{from}, @var{to}, @var{maparg}, and @var{flags} are all optional and default to the current buffer, the -beginning of @var{object}, the end of @var{object}, @var{nil}, and -@var{nil}, respectively. @code{map-extents} returns the first +beginning of @var{object}, the end of @var{object}, @code{nil}, and +@code{nil}, respectively. @code{map-extents} returns the first non-@code{nil} result produced by @var{function}, and no more calls to @var{function} are made after it returns non-@code{nil}. @@ -436,7 +445,7 @@ Thus, this function may be used to walk a tree of extents in a buffer: @end defun @defun extent-in-region-p extent &optional from to flags -This function returns @var{t} if @code{map-extents} would visit +This function returns @code{t} if @code{map-extents} would visit @var{extent} if called with the given arguments. @end defun @@ -463,9 +472,9 @@ from that parent (or from the root ancestor if the parent in turn has a parent), and setting a property of the extent actually sets that property on the parent. @xref{Extent Parents}. -@defun extent-property extent property -This function returns the value of @var{property} in @var{extent}. If -@var{property} is undefined, @code{nil} is returned. +@defun extent-property extent property &optional default +This function returns @var{extent}'s value for @var{property}, or +@var{default} if no such property exists. @end defun @defun extent-properties extent @@ -669,9 +678,9 @@ there is none, @code{nil} is returned. The following convenience functions are provided for setting particular properties of an extent. -@defun set-extent-priority extent pri +@defun set-extent-priority extent priority This function sets the @code{priority} property of @var{extent} to -@var{pri}. +@var{priority}. @end defun @defun set-extent-face extent face @@ -713,7 +722,7 @@ respectively. (@var{layout} defaults to @code{text} if not specified.) @end defun @defun set-extent-initial-redisplay-function extent function -This function sets the @code{initial-redisplay-function} property of the +This function sets the @code{initial-redisplay-function} property of the extent to @var{function}. @end defun diff --git a/man/lispref/faces.texi b/man/lispref/faces.texi index ee36e15..4837ae7 100644 --- a/man/lispref/faces.texi +++ b/man/lispref/faces.texi @@ -127,16 +127,18 @@ other non-@code{nil} value both permanent and temporary are included. @end defun @defun facep object -This function returns whether the given object is a face. +This function returns @code{t} if @var{object} is a face, else @code{nil}. @end defun -@defun copy-face old-face new-name &optional locale how-to-add +@defun copy-face old-face new-name &optional locale tag-set exact-p how-to-add This function defines a new face named @var{new-name} which is a copy of the existing face named @var{old-face}. If there is already a face named @var{new-name}, then it alters the face to have the same -properties as @var{old-face}. @var{locale} and @var{how-to-add} -let you copy just parts of the old face rather than the whole face, -and are as in @code{copy-specifier} (@pxref{Specifiers}). +properties as @var{old-face}. + +@var{locale}, @var{tag-set}, @var{exact-p} and @var{how-to-add} let you +copy just parts of the old face rather than the whole face, and are as +in @code{copy-specifier} (@pxref{Specifiers}). @end defun @node Face Properties @@ -187,7 +189,7 @@ specifier, unlike all the other built-in properties, and cannot contain locale-specific values. @end table -@defun set-face-property face property value &optional locale tag how-to-add +@defun set-face-property face property value &optional locale tag-set how-to-add This function changes a property of a @var{face}. For built-in properties, the actual value of the property is a specifier @@ -248,7 +250,7 @@ specifier, it will automatically be converted into a @code{generic} specifier. @end defun -@defun remove-face-property face property &optional local tag-set exact-p +@defun remove-face-property face property &optional locale tag-set exact-p This function removes a property of a @var{face}. For built-in properties, this is analogous to @code{remove-specifier}. @@ -263,7 +265,7 @@ specifier, it will be converted into a @code{generic} specifier automatically. @end defun -@defun face-property face property &optional locale +@defun face-property face property &optional locale tag-set exact-p This function returns @var{face}'s value of the given @var{property}. If @var{locale} is omitted, the @var{face}'s actual value for @@ -354,15 +356,15 @@ in @code{specifier-instance}. @xref{Specifiers}. @node Face Convenience Functions @subsection Face Convenience Functions -@defun set-face-foreground face color &optional locale tag how-to-add -@defunx set-face-background face color &optional locale tag how-to-add +@deffn Command set-face-foreground face color &optional locale tag-set how-to-add +@deffnx Command set-face-background face color &optional locale tag-set how-to-add These functions set the foreground (respectively, background) color of face @var{face} to @var{color}. The argument @var{color} should be a string (the name of a color) or a color object as returned by @code{make-color} (@pxref{Colors}). -@end defun +@end deffn -@defun set-face-background-pixmap face pixmap &optional locale tag how-to-add +@deffn Command set-face-background-pixmap face pixmap &optional locale tag-set how-to-add This function sets the background pixmap of face @var{face} to @var{pixmap}. The argument @var{pixmap} should be a string (the name of a bitmap or pixmap file; the directories listed in the variable @@ -371,33 +373,34 @@ returned by @code{make-glyph} (@pxref{Glyphs}). The argument may also be a list of the form @code{(@var{width} @var{height} @var{data})} where @var{width} and @var{height} are the size in pixels, and @var{data} is a string, containing the raw bits of the bitmap. -@end defun +@end deffn -@defun set-face-font face font &optional locale tag how-to-add +@deffn Command set-face-font face font &optional locale tag-set how-to-add This function sets the font of face @var{face}. The argument @var{font} should be a string or a font object as returned by @code{make-font} (@pxref{Fonts}). -@end defun +@end deffn -@defun set-face-underline-p face underline-p &optional locale tag how-to-add +@deffn Command set-face-underline-p face underline-p &optional locale tag-set how-to-add This function sets the underline property of face @var{face}. -@end defun +@end deffn -@defun face-foreground face &optional locale -@defunx face-background face &optional locale +@defun face-foreground face &optional locale tag-set exact-p +@defunx face-background face &optional locale tag-set exact-p These functions return the foreground (respectively, background) color specifier of face @var{face}. @xref{Colors}. @end defun -@defun face-background-pixmap face &optional locale +@defun face-background-pixmap face &optional locale tag-set exact-p This function return the background-pixmap glyph object of face @var{face}. @end defun -@defun face-font face &optional locale +@defun face-font face &optional locale tag-set exact-p This function returns the font specifier of face @var{face}. (Note: This is not the same as the function @code{face-font} in FSF Emacs.) + @xref{Fonts}. @end defun @@ -433,11 +436,11 @@ This function returns the font specifier of face @var{face}. @node Other Face Display Functions @subsection Other Face Display Functions -@defun invert-face face &optional locale +@deffn Command invert-face face &optional locale Swap the foreground and background colors of face @var{face}. If the face doesn't specify both foreground and background, then its foreground and background are set to the default background and foreground. -@end defun +@end deffn @defun face-equal face1 face2 &optional domain This returns @code{t} if the faces @var{face1} and @var{face2} will @@ -584,7 +587,7 @@ that is defined. @cindex italic @cindex oblique -@defun font-instance-properties font +@defun font-instance-properties font-instance This function returns the properties (an alist or @code{nil}) of @var{font-instance}. @end defun @@ -711,7 +714,7 @@ A vector of two or three elements: a face to inherit from, optionally a symbol naming the property of that face to inherit from (if omitted, defaults to the same property that this face-boolean specifier is used for; if this specifier is not part of a face, the instantiator would not -be valid), and optionally a value which, if non-nil, means to invert the +be valid), and optionally a value which, if non-@code{nil}, means to invert the sense of the inherited property. @end itemize @@ -736,7 +739,7 @@ The color-instance object returned describes the way the background color of the @code{default} face is displayed in the next window after the selected one. -@defun color-instance-p object +@defun color-instance-p object This function returns non-@code{nil} if @var{object} is a color-instance. @end defun @@ -744,7 +747,7 @@ This function returns non-@code{nil} if @var{object} is a color-instance. @subsection Color Instance Properties @defun color-instance-name color-instance -This function returns the name used to allocate @var{color-instance}. +This function returns the name used to allocate @var{color-instance}. @end defun @defun color-instance-rgb-components color-instance diff --git a/man/lispref/files.texi b/man/lispref/files.texi index 7608b4a..e3e4171 100644 --- a/man/lispref/files.texi +++ b/man/lispref/files.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/files.info @node Files, Backups and Auto-Saving, Documentation, Top @@ -86,7 +86,7 @@ temporary buffer. Visiting the file is not necessary and takes longer. @deffn Command find-file filename This command selects a buffer visiting the file @var{filename}, -using an existing buffer if there is one, and otherwise creating a +using an existing buffer if there is one, and otherwise creating a new buffer and reading the file into it. It also returns that buffer. The body of the @code{find-file} function is very simple and looks @@ -121,7 +121,7 @@ file named @var{filename}, it displays the message @samp{New file} in the echo area, and leaves the buffer empty. @c XEmacs feature -If @var{no-warn} is non-@code{nil}, various warnings that XEmacs normally +If @var{nowarn} is non-@code{nil}, various warnings that XEmacs normally gives (e.g. if another buffer is already visiting @var{filename} but @var{filename} has been removed from disk since that buffer was created) are suppressed. @@ -161,7 +161,7 @@ When this command is called interactively, it prompts for @var{filename}. @end deffn -@deffn Command view-file filename +@deffn Command view-file filename &optional other-window-p This command visits @var{filename} in View mode, and displays it in a recursive edit, returning to the previous buffer when done. View mode is a mode that allows you to skim rapidly through the file but does not @@ -170,6 +170,9 @@ let you modify it. Entering View mode runs the normal hook When @code{view-file} is called interactively, it prompts for @var{filename}. + +With non-@code{nil} prefix arg @var{other-window-p}, visit @var{filename} +in another window. @end deffn @defvar find-file-hooks @@ -403,7 +406,7 @@ major modes set it to @code{t} in particular buffers. using the @code{insert-file-contents} function. Don't use the user-level command @code{insert-file} in a Lisp program, as that sets the mark. -@defun insert-file-contents filename &optional visit beg end replace +@defun insert-file-contents filename &optional visit start end replace This function inserts the contents of file @var{filename} into the current buffer after point. It returns a list of the absolute file name and the length of the data inserted. An error is signaled if @@ -421,7 +424,7 @@ is visiting the file @var{filename}: these include the buffer's visited file name and its last save file modtime. This feature is used by @code{find-file-noselect} and you probably should not use it yourself. -If @var{beg} and @var{end} are non-@code{nil}, they should be integers +If @var{start} and @var{end} are non-@code{nil}, they should be integers specifying the portion of the file to insert. In this case, @var{visit} must be @code{nil}. For example, @@ -548,10 +551,10 @@ the file should not be locked, so this function does nothing. It also does nothing if the current buffer is not visiting a file. @end defun -@defun ask-user-about-lock file other-user -This function is called when the user tries to modify @var{file}, but it -is locked by another user named @var{other-user}. The value it returns -determines what happens next: +@defun ask-user-about-lock filename other-user +This function is called when the user tries to modify @var{filename}, +but it is locked by another user named @var{other-user}. The value it +returns determines what happens next: @itemize @bullet @item @@ -570,11 +573,11 @@ case the change that the user was about to make does not take place. The error message for this error looks like this: @example -@error{} File is locked: @var{file} @var{other-user} +@error{} File is locked: @var{filename} @var{other-user} @end example @noindent -where @code{file} is the name of the file and @var{other-user} is the +where @var{filename} is the name of the file and @var{other-user} is the name of the user who has locked the file. @end itemize @@ -749,7 +752,7 @@ name of a text file, a directory, or even another symbolic link, or it may be a nonexistent file name. If the file @var{filename} is not a symbolic link (or there is no such file), -@code{file-symlink-p} returns @code{nil}. +@code{file-symlink-p} returns @code{nil}. @example @group @@ -968,16 +971,16 @@ For example, here are the file attributes for @file{files.texi}: @example @group (file-attributes "files.texi") - @result{} (nil - 1 - 2235 - 75 - (8489 20284) - (8489 20284) + @result{} (nil + 1 + 2235 + 75 + (8489 20284) + (8489 20284) (8489 20285) - 14906 - "-rw-rw-rw-" - nil + 14906 + "-rw-rw-rw-" + nil 129500 -32252) @end group @@ -1037,9 +1040,10 @@ is on file system number -32252. The functions in this section rename, copy, delete, link, and set the modes of files. - In the functions that have an argument @var{newname}, if a file by the -name of @var{newname} already exists, the actions taken depend on the -value of the argument @var{ok-if-already-exists}: + In the functions that have arguments @var{newname} and +@var{ok-if-already-exists}, if a file by the name of @var{newname} +already exists, the actions taken depend on the value of +@var{ok-if-already-exists}: @itemize @bullet @item @@ -1047,19 +1051,20 @@ Signal a @code{file-already-exists} error if @var{ok-if-already-exists} is @code{nil}. @item -Request confirmation if @var{ok-if-already-exists} is a number. +Request confirmation if @var{ok-if-already-exists} is a number. This is +what happens when the function is invoked interactively. @item Replace the old file without confirmation if @var{ok-if-already-exists} is any other value. @end itemize -@deffn Command add-name-to-file oldname newname &optional ok-if-already-exists +@deffn Command add-name-to-file filename newname &optional ok-if-already-exists @cindex file with multiple names @cindex file hard link -This function gives the file named @var{oldname} the additional name +This function gives the file named @var{filename} the additional name @var{newname}. This means that @var{newname} becomes a new ``hard -link'' to @var{oldname}. +link'' to @var{filename}. Both these arguments must be strings. In the first part of the following example, we list two files, @file{foo} and @file{foo3}. @@ -1116,8 +1121,8 @@ contents of @file{foo3} are lost. @end group @end example - This function is meaningless on VMS, where multiple names for one file -are not allowed. +This function is meaningless on non-Unix systems, where multiple names +for one file are not allowed. See also @code{file-nlinks} in @ref{File Attributes}. @end deffn @@ -1135,9 +1140,9 @@ In an interactive call, this function prompts for @var{filename} and @var{newname} already exists. @end deffn -@deffn Command copy-file oldname newname &optional ok-if-exists time -This command copies the file @var{oldname} to @var{newname}. An -error is signaled if @var{oldname} does not exist. +@deffn Command copy-file filename newname &optional ok-if-already-exists time +This command copies the file @var{filename} to @var{newname}. An +error is signaled if @var{filename} does not exist. If @var{time} is non-@code{nil}, then this functions gives the new file the same last-modified time that the old one has. (This works on @@ -1161,7 +1166,7 @@ its directory is writable.) See also @code{delete-directory} in @ref{Create/Delete Dirs}. @end deffn -@deffn Command make-symbolic-link filename newname &optional ok-if-exists +@deffn Command make-symbolic-link filename newname &optional ok-if-already-exists @pindex ln @kindex file-already-exists This command makes a symbolic link to @var{filename}, named @@ -1173,11 +1178,6 @@ In an interactive call, this function prompts for @var{filename} and @var{newname} already exists. @end deffn -@defun define-logical-name varname string -This function defines the logical name @var{name} to have the value -@var{string}. It is available only on VMS. -@end defun - @defun set-file-modes filename mode This function sets mode bits of @var{filename} to @var{mode} (which must be an integer). Only the low 12 bits of @var{mode} are used. @@ -1226,11 +1226,10 @@ how to manipulate file names. can operate on file names that do not refer to an existing file or directory. - On VMS, all these functions understand both VMS file-name syntax and -Unix syntax. This is so that all the standard Lisp libraries can -specify file names in Unix syntax and work properly on VMS without -change. On MS-DOS, these functions understand MS-DOS file-name syntax -as well as Unix syntax. +On MS-DOS, these functions understand MS-DOS file-name syntax as well as +Unix syntax. This is so that all the standard Lisp libraries can specify +file names in Unix syntax and work properly on all systems without +change. Similarly for other operating systems. @menu * File Name Components:: The directory part of a file name, and the rest. @@ -1257,22 +1256,16 @@ parts: the @dfn{directory name} part, and the @dfn{nondirectory} part Concatenating these two parts reproduces the original file name. On Unix, the directory part is everything up to and including the last -slash; the nondirectory part is the rest. The rules in VMS syntax are -complicated. +slash; the nondirectory part is the rest. For some purposes, the nondirectory part is further subdivided into the name proper and the @dfn{version number}. On Unix, only backup -files have version numbers in their names; on VMS, every file has a -version number, but most of the time the file name actually used in -XEmacs omits the version number. Version numbers are found mostly in -directory lists. +files have version numbers in their names. @defun file-name-directory filename This function returns the directory part of @var{filename} (or @code{nil} if @var{filename} does not include a directory part). On -Unix, the function returns a string ending in a slash. On VMS, it -returns a string ending in one of the three characters @samp{:}, -@samp{]}, or @samp{>}. +Unix, the function returns a string ending in a slash. @example @group @@ -1283,10 +1276,6 @@ returns a string ending in one of the three characters @samp{:}, (file-name-directory "foo") ; @r{Unix example} @result{} nil @end group -@group -(file-name-directory "[X]FOO.TMP") ; @r{VMS example} - @result{} "[X]" -@end group @end example @end defun @@ -1302,11 +1291,6 @@ returns a string ending in one of the three characters @samp{:}, (file-name-nondirectory "foo") @result{} "foo" @end group -@group -;; @r{The following example is accurate only on VMS.} -(file-name-nondirectory "[X]FOO.TMP") - @result{} "FOO.TMP" -@end group @end example @end defun @@ -1331,11 +1315,6 @@ version numbers, only true file version numbers. (file-name-sans-versions "~rms/foo") @result{} "~rms/foo" @end group -@group -;; @r{The following example applies to VMS only.} -(file-name-sans-versions "foo;23") - @result{} "foo" -@end group @end example @end defun @@ -1363,7 +1342,7 @@ name but not identical to it. (This is not quite the same as the usual Unix terminology.) These two different names for the same entity are related by a syntactic transformation. On Unix, this is simple: a directory name ends in a slash, whereas the directory's name as a file -lacks that slash. On VMS, the relationship is more complicated. +lacks that slash. The difference between a directory name and its name as a file is subtle but crucial. When an XEmacs variable or function argument is @@ -1377,9 +1356,7 @@ such as @samp{$HOME}, and the constructs @samp{~}, and @samp{..}. @defun file-name-as-directory filename This function returns a string representing @var{filename} in a form that the operating system will interpret as the name of a directory. In -Unix, this means appending a slash to the string. On VMS, the function -converts a string of the form @file{[X]Y.DIR.1} to the form -@file{[X.Y]}. +Unix, this means appending a slash to the string. @example @group @@ -1392,9 +1369,7 @@ converts a string of the form @file{[X]Y.DIR.1} to the form @defun directory-file-name dirname This function returns a string representing @var{dirname} in a form that the operating system will interpret as the name of a file. On -Unix, this means removing a final slash from the string. On VMS, the -function converts a string of the form @file{[X.Y]} to -@file{[X]Y.DIR.1}. +Unix, this means removing a final slash from the string. @example @group @@ -1415,7 +1390,7 @@ abbreviation instead. If you wish to convert a directory name to its abbreviation, use this function: -@defun abbreviate-file-name dirname &optional hack-homedir +@defun abbreviate-file-name filename &optional hack-homedir This function applies abbreviations from @code{directory-abbrev-alist} to its argument, and substitutes @samp{~} for the user's home directory. @@ -1468,13 +1443,11 @@ starting from the root of the tree; then it is called an @dfn{absolute} file name. Or it can specify the position of the file in the tree relative to a default directory; then it is called a @dfn{relative} file name. On Unix, an absolute file name starts with a slash or a -tilde (@samp{~}), and a relative one does not. The rules on VMS are -complicated. +tilde (@samp{~}), and a relative one does not. @defun file-name-absolute-p filename This function returns @code{t} if file @var{filename} is an absolute -file name, @code{nil} otherwise. On VMS, this function understands both -Unix syntax and VMS syntax. +file name, @code{nil} otherwise. @example @group @@ -1622,9 +1595,6 @@ example: @result{} "/xcssun/users/rms/foo" @end group @end example - -On VMS, @samp{$} substitution is not done, so this function does nothing -on VMS except discard superfluous initial components as shown above. @end defun @node Unique File Names @@ -1666,7 +1636,7 @@ there is no danger of generating a name being used by another process. @end example In addition, this function makes an attempt to choose a name that does -not specify an existing file. To make this work, @var{prefix} should be +not specify an existing file. To make this work, @var{prefix} should be an absolute file name. To avoid confusion, each Lisp application should preferably use a unique @@ -1682,7 +1652,7 @@ To avoid confusion, each Lisp application should preferably use a unique name. For other completion functions, see @ref{Completion}. @defun file-name-all-completions partial-filename directory -This function returns a list of all possible completions for a file +This function returns a list of all possible completions for files whose name starts with @var{partial-filename} in directory @var{directory}. The order of the completions is the order of the files in the directory, which is unpredictable and conveys no useful @@ -1692,6 +1662,11 @@ The argument @var{partial-filename} must be a file name containing no directory part and no slash. The current buffer's default directory is prepended to @var{directory}, if @var{directory} is not absolute. +File names which end with any member of @code{completion-ignored-extensions} +are not considered as possible completions for @var{partial-filename} unless +there is no other possible completion. @code{completion-ignored-extensions} +is not applied to the names of directories. + In the following example, suppose that the current default directory, @file{~rms/lewis}, has five files whose names begin with @samp{f}: @file{foo}, @file{file~}, @file{file.c}, @file{file.c.~1~}, and @@ -1700,25 +1675,30 @@ In the following example, suppose that the current default directory, @example @group (file-name-all-completions "f" "") - @result{} ("foo" "file~" "file.c.~2~" + @result{} ("foo" "file~" "file.c.~2~" "file.c.~1~" "file.c") @end group @group -(file-name-all-completions "fo" "") +(file-name-all-completions "fo" "") @result{} ("foo") @end group @end example @end defun -@defun file-name-completion filename directory -This function completes the file name @var{filename} in directory +@defun file-name-completion partial-filename directory +This function completes the file name @var{partial-filename} in directory @var{directory}. It returns the longest prefix common to all file names -in directory @var{directory} that start with @var{filename}. +in directory @var{directory} that start with @var{partial-filename}. -If only one match exists and @var{filename} matches it exactly, the +If only one match exists and @var{partial-filename} matches it exactly, the function returns @code{t}. The function returns @code{nil} if directory -@var{directory} contains no name starting with @var{filename}. +@var{directory} contains no name starting with @var{partial-filename}. + +File names which end with any member of @code{completion-ignored-extensions} +are not considered as possible completions for @var{partial-filename} unless +there is no other possible completion. @code{completion-ignored-extensions} +is not applied to the names of directories. In the following example, suppose that the current default directory has five files whose names begin with @samp{f}: @file{foo}, @@ -1773,26 +1753,27 @@ completion-ignored-extensions name. For other completion functions, see @ref{Completion}. @defun user-name-all-completions partial-username -This function returns a list of all possible completions for a user -whose name starts with @var{partial-username}. The order of the -completions is unpredictable and conveys no useful information. +This function returns a list of all possible completions for a user name +starting with @var{partial-username}. The order of the completions is +unpredictable and conveys no useful information. -The argument @var{partial-username} must be a partial user name +The argument @var{partial-username} must be a partial user name containing no tilde character and no slash. @end defun -@defun user-name-completion username -This function completes the user name @var{username}. It returns the -longest prefix common to all user names that start with @var{username}. +@defun user-name-completion partial-username +This function completes a user name from @var{partial-username}. It +returns the longest prefix common to all user names that start with +@var{partial-username}. -If only one match exists and @var{username} matches it exactly, the -function returns @code{t}. The function returns @code{nil} if no user -name starting with @var{username} exists. +If only one match exists and @var{partial-username} matches it exactly, +the function returns @code{t}. The function returns @code{nil} if no +user name starting with @var{partial-username} exists. @end defun -@defun user-name-completion-1 username -This function completes the user name @var{username}, like -@code{user-name-completion}, differing only in the return value. +@defun user-name-completion-1 partial-username +This function completes the partial user name @var{partial-username}, +like @code{user-name-completion}, differing only in the return value. This function returns the cons of the completion returned by @code{user-name-completion}, and a boolean indicating whether that completion was unique. @@ -1843,7 +1824,7 @@ returned. @group (directory-files "~lewis") @result{} ("#foo#" "#foo.el#" "." ".." - "dired-mods.el" "files.texi" + "dired-mods.el" "files.texi" "files.texi.~1~") @end group @end example @@ -2002,7 +1983,7 @@ for an operation it does not recognize. Here's one way to do this: @dots{} ;; @r{Handle any operation we don't know about.} (t (let ((inhibit-file-name-handlers - (cons 'my-file-handler + (cons 'my-file-handler (and (eq inhibit-file-name-operation operation) inhibit-file-name-handlers))) (inhibit-file-name-operation operation)) @@ -2028,8 +2009,8 @@ for a certain operation. The operation for which certain handlers are presently inhibited. @end defvar -@defun find-file-name-handler file operation -This function returns the handler function for file name @var{file}, or +@defun find-file-name-handler filename &optional operation +This function returns the handler function for file name @var{filename}, or @code{nil} if there is none. The argument @var{operation} should be the operation to be performed on the file---the value you will pass to the handler as its first argument when you call it. The operation is needed @@ -2095,7 +2076,7 @@ work correctly. @node Creating a Partial File @subsection Creating a Partial File -@defun make-file-part &optional start end name buffer +@deffn Command make-file-part &optional start end name buffer Make a file part on buffer @var{buffer} out of the region. Call it @var{name}. This command creates a new buffer containing the contents of the region and marks the buffer as referring to the specified buffer, @@ -2106,9 +2087,9 @@ buffer is deleted, all file parts are deleted with it. When called from a function, expects four arguments, @var{start}, @var{end}, @var{name}, and @var{buffer}, all of which are optional and default to the beginning of @var{buffer}, the end of @var{buffer}, a -name generated from @var{buffer} name, and the current buffer, +name generated from @var{buffer}'s name, and the current buffer, respectively. -@end defun +@end deffn @node Detached Partial Files @subsection Detached Partial Files @@ -2237,14 +2218,14 @@ When @code{write-region} writes data into a file, it first calls the encoding functions for the formats listed in @code{buffer-file-format}, in the order of appearance in the list. -@defun format-write-file file format +@deffn Command format-write-file file format This command writes the current buffer contents into the file @var{file} in format @var{format}, and makes that format the default for future saves of the buffer. The argument @var{format} is a list of format names. -@end defun +@end deffn -@defun format-find-file file format +@deffn Command format-find-file file format This command finds the file @var{file}, converting it according to format @var{format}. It also makes @var{format} the default if the buffer is saved later. @@ -2252,11 +2233,11 @@ buffer is saved later. The argument @var{format} is a list of format names. If @var{format} is @code{nil}, no conversion takes place. Interactively, typing just @key{RET} for @var{format} specifies @code{nil}. -@end defun +@end deffn -@defun format-insert-file file format &optional beg end +@deffn Command format-insert-file file format &optional start end This command inserts the contents of file @var{file}, converting it -according to format @var{format}. If @var{beg} and @var{end} are +according to format @var{format}. If @var{start} and @var{end} are non-@code{nil}, they specify which part of the file to read, as in @code{insert-file-contents} (@pxref{Reading from Files}). @@ -2267,32 +2248,7 @@ list of the absolute file name and the length of the data inserted The argument @var{format} is a list of format names. If @var{format} is @code{nil}, no conversion takes place. Interactively, typing just @key{RET} for @var{format} specifies @code{nil}. -@end defun - -@defun format-find-file file format -This command finds the file @var{file}, converting it according to -format @var{format}. It also makes @var{format} the default if the -buffer is saved later. - -The argument @var{format} is a list of format names. If @var{format} is -@code{nil}, no conversion takes place. Interactively, typing just -@key{RET} for @var{format} specifies @code{nil}. -@end defun - -@defun format-insert-file file format &optional beg end -This command inserts the contents of file @var{file}, converting it -according to format @var{format}. If @var{beg} and @var{end} are -non-@code{nil}, they specify which part of the file to read, -as in @code{insert-file-contents} (@pxref{Reading from Files}). - -The return value is like what @code{insert-file-contents} returns: a -list of the absolute file name and the length of the data inserted -(after conversion). - -The argument @var{format} is a list of format names. If @var{format} is -@code{nil}, no conversion takes place. Interactively, typing just -@key{RET} for @var{format} specifies @code{nil}. -@end defun +@end deffn @defvar auto-save-file-format This variable specifies the format to use for auto-saving. Its value is diff --git a/man/lispref/frames.texi b/man/lispref/frames.texi index 1ae6f9b..892ca6c 100644 --- a/man/lispref/frames.texi +++ b/man/lispref/frames.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c Copyright (C) 1995, 1996 Ben Wing. @c See the file lispref.texi for copying conditions. @setfilename ../../info/frames.info @@ -63,7 +63,7 @@ This predicate returns @code{t} if @var{object} is a frame, and To create a new frame, call the function @code{make-frame}. -@defun make-frame &optional props device +@deffn Command make-frame &optional props device This function creates a new frame on @var{device}, if @var{device} permits creation of frames. (An X server does; an ordinary terminal does not (yet).) @var{device} defaults to the selected device if omitted. @@ -83,7 +83,7 @@ The set of possible properties depends in principle on what kind of window system XEmacs uses to display its frames. @xref{X Frame Properties}, for documentation of individual properties you can specify when creating an X window frame. -@end defun +@end deffn @node Frame Properties @section Frame Properties @@ -116,7 +116,7 @@ and their values. @defun frame-property frame property &optional default This function returns @var{frame}'s value for the property -@var{property}. +@var{property}, or @var{default} if there is no such property. @end defun @defun set-frame-properties frame plist @@ -125,9 +125,9 @@ elements of property list @var{plist}. If you don't mention a property in @var{plist}, its value doesn't change. @end defun -@defun set-frame-property frame prop val -This function sets the property @var{prop} of frame @var{frame} to the -value @var{val}. +@defun set-frame-property frame property value +This function sets the property @var{property} of frame @var{frame} to the +value @var{value}. @end defun @node Initial Properties @@ -362,7 +362,7 @@ pixels. If you don't supply @var{frame}, they use the selected frame. @defun set-frame-size frame cols rows &optional pretend This function sets the size of @var{frame}, measured in characters; @var{cols} and @var{rows} specify the new width and height. (If -@var{pretend} is non-nil, it means that redisplay should act as if +@var{pretend} is non-@code{nil}, it means that redisplay should act as if the frame's size is @var{cols} by @var{rows}, but the actual size of the frame should not be changed. You should not normally use this option.) @@ -498,9 +498,16 @@ Frames remain potentially visible until you explicitly @dfn{delete} them. A deleted frame cannot appear on the screen, but continues to exist as a Lisp object until there are no references to it. -@deffn Command delete-frame &optional frame +@deffn Command delete-frame &optional frame force This function deletes the frame @var{frame}. By default, @var{frame} is the selected frame. + +A frame may not be deleted if its minibuffer is used by other frames. +Normally, you cannot delete the last non-minibuffer-only frame (you must +use @code{save-buffers-kill-emacs} or @code{kill-emacs}). However, if +optional second argument @var{force} is non-@code{nil}, you can delete +the last frame. (This will automatically call +@code{save-buffers-kill-emacs}.) @end deffn @defun frame-live-p frame @@ -538,34 +545,84 @@ If @var{device} is specified only frames on that device will be returned. ``visible'', even though only the selected one is actually displayed.) @end defun -@defun next-frame &optional frame minibuf +@defun next-frame &optional frame which-frames which-devices The function @code{next-frame} lets you cycle conveniently through all the frames from an arbitrary starting point. It returns the ``next'' -frame after @var{frame} in the cycle. If @var{frame} is omitted or -@code{nil}, it defaults to the selected frame. +frame after @var{frame} in the cycle. If @var{frame} defaults to the +selected frame. -The second argument, @var{minibuf}, says which frames to consider: +The second argument, @var{which-frames}, says which frames to consider: @table @asis -@item @code{nil} -Exclude minibuffer-only frames. @item @code{visible} -Consider all visible frames. -@item 0 -Consider all visible or iconified frames. -@item a window -Consider only the frames using that particular window as their -minibuffer. -@item the symbol @code{visible} -Include all visible frames. -@item @code{0} -Include all visible and iconified frames. -@item anything else +Consider only frames that are visible. + +@item @code{iconic} +Consider only frames that are iconic. + +@item @code{invisible} +Consider only frames that are invisible (this is different from iconic). + +@item @code{visible-iconic} +Consider frames that are visible or iconic. + +@item @code{invisible-iconic} +Consider frames that are invisible or iconic. + +@item @code{nomini} +Consider all frames except minibuffer-only ones. + +@item @code{visible-nomini} +Like @code{visible} but omits minibuffer-only frames. + +@item @code{iconic-nomini} +Like @code{iconic} but omits minibuffer-only frames. + +@item @code{invisible-nomini} +Like @code{invisible} but omits minibuffer-only frames. + +@item @code{visible-iconic-nomini} +Like @code{visible-iconic} but omits minibuffer-only frames. + +@item @code{invisible-iconic-nomini} +Like @code{invisible-iconic} but omits minibuffer-only frames. + +@item @code{nil} +Identical to @code{nomini}. + +@item @var{window} +Consider only the window @var{window}'s frame and any frame now using +@var{window} as the minibuffer. + +@item any other value Consider all frames. @end table + +The optional argument @var{which-devices} further clarifies on which +devices to search for frames as specified by @var{which-frames}. + +@table @asis +@item @code{nil} +Consider all devices on the selected console. + +@item @var{device} +Consider only the one device @var{device}. + +@item @var{console} +Consider all devices on @var{console}. + +@item @var{device-type} +Consider all devices with device type @var{device-type}. + +@item @code{window-system} +Consider all devices on window system consoles. + +@item anything else +Consider all devices without restriction. +@end table @end defun -@defun previous-frame &optional frame minibuf +@defun previous-frame &optional frame which-frames which-devices Like @code{next-frame}, but cycles through all frames in the opposite direction. @end defun @@ -595,10 +652,39 @@ upper left corner, down and to the right, until it reaches the window at the lower right corner (always the minibuffer window, if the frame has one), and then it moves back to the top. -@defun frame-top-window frame -This returns the topmost, leftmost window of frame @var{frame}. +@defun frame-highest-window &optional frame position +This function returns the topmost, leftmost window of frame @var{frame} +at position @var{position}. + +If omitted, @var{frame} defaults to the currently selected frame. + +@var{position} is used to distinguish between multiple windows that abut +the top of the frame: 0 means the leftmost window abutting the top of +the frame, 1 the next-leftmost, etc. @var{position} can also be less +than zero: -1 means the rightmost window abutting the top of the frame, +-2 the next-rightmost, etc. If omitted, @var{position} defaults to 0, +i.e. the leftmost highest window. If there is no window at the given +@var{position}, @code{nil} is returned. +@end defun + +The following three functions work similarly. + +@defun frame-lowest-window &optional frame position +This function returns the lowest window on @var{frame} which is at +@var{position}. +@end defun + +@defun frame-leftmost-window &optional frame position +This function returns the leftmost window on @var{frame} which is at +@var{position}. +@end defun + +@defun frame-rightmost-window &optional frame position +This function returns the rightmost window on @var{frame} which is at +@var{position}. @end defun + At any time, exactly one window on any frame is @dfn{selected within the frame}. The significance of this designation is that selecting the frame also selects this window. You can get the frame's current @@ -699,18 +785,18 @@ The operation of @code{focus-frame} is not affected by the value of @code{focus-follows-mouse}. @end defun -@defmac save-selected-frame forms@dots{} -This macro records the selected frame, executes @var{forms} in sequence, -then restores the earlier selected frame. The value returned is the -value of the last form. -@end defmac +@defspec save-selected-frame forms@dots{} +This special form records the selected frame, executes @var{forms} in +sequence, then restores the earlier selected frame. The value returned +is the value of the last form. +@end defspec -@defmac with-selected-frame frame forms@dots{} -This macro records the selected frame, then selects @var{frame} and -executes @var{forms} in sequence. After the last form is finished, the -earlier selected frame is restored. The value returned is the value of -the last form. -@end defmac +@defspec with-selected-frame frame forms@dots{} +This special form records the selected frame, then selects @var{frame} +and executes @var{forms} in sequence. After the last form is finished, +the earlier selected frame is restored. The value returned is the value +of the last form. +@end defspec @ignore (FSF Emacs, continued from defun select-frame) XEmacs cooperates with the X server and the window managers by arranging @@ -765,7 +851,7 @@ change it. @cindex iconified frame @cindex frame visibility -An X window frame may be @dfn{visible}, @dfn{invisible}, or +An frame on a window system may be @dfn{visible}, @dfn{invisible}, or @dfn{iconified}. If it is visible, you can see its contents. If it is iconified, the frame's contents do not appear on the screen, but an icon does. If the frame is invisible, it doesn't show on the screen, not @@ -774,31 +860,31 @@ even as an icon. Visibility is meaningless for TTY frames, since only the selected one is actually displayed in any case. -@deffn Command make-frame-visible &optional frame +@defun make-frame-visible &optional frame This function makes frame @var{frame} visible. If you omit @var{frame}, it makes the selected frame visible. -@end deffn +@end defun -@deffn Command make-frame-invisible &optional frame +@defun make-frame-invisible &optional frame force This function makes frame @var{frame} invisible. -@end deffn +@end defun @deffn Command iconify-frame &optional frame This function iconifies frame @var{frame}. @end deffn -@deffn Command deiconify-frame &optional frame -This function de-iconifies frame @var{frame}. Under X, this is -equivalent to @code{make-frame-visible}. -@end deffn +@defun Command deiconify-frame &optional frame +This function de-iconifies frame @var{frame}. Under a window system, +this is equivalent to @code{make-frame-visible}. +@end defun -@defun frame-visible-p frame +@defun frame-visible-p &optional frame This returns whether @var{frame} is currently ``visible'' (actually in use for display). A frame that is not visible is not updated, and, if it works through a window system, may not show at all. @end defun -@defun frame-iconified-p frame +@defun frame-iconified-p &optional frame This returns whether @var{frame} is iconified. Not all window managers use icons; some merely unmap the window, so this function is not the inverse of @code{frame-visible-p}. It is possible for a frame to not @@ -807,7 +893,7 @@ iconified, it will not be visible. (Under FSF Emacs, the functionality of this function is obtained through @code{frame-visible-p}.) @end defun -@defun frame-totally-visible-p frame +@defun frame-totally-visible-p &optional frame This returns whether @var{frame} is not obscured by any other X windows. On TTY frames, this is the same as @code{frame-visible-p}. @end defun @@ -904,9 +990,18 @@ This function returns a frame configuration list that describes the current arrangement of frames and their contents. @end defun -@defun set-frame-configuration configuration -This function restores the state of frames described in +@defun set-frame-configuration configuration &optional nodelete +This function restores the state of frames described by +@var{configuration}, which should be the return value from a previous +call to @code{current-frame-configuration}. + +Each frame listed in @var{configuration} has its position, size, window +configuration, and other properties set as specified in @var{configuration}. + +Ordinarily, this function deletes all existing frames not listed in +@var{configuration}. But if optional second argument @var{nodelete} is +non-@code{nil}, the unwanted frames are iconified instead. @end defun @node Frame Hooks diff --git a/man/lispref/functions.texi b/man/lispref/functions.texi index c2e6bb4..638cf96 100644 --- a/man/lispref/functions.texi +++ b/man/lispref/functions.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/functions.info @node Functions, Macros, Variables, Top @@ -17,7 +17,7 @@ define them. * Defining Functions:: Lisp expressions for defining functions. * Calling Functions:: How to use an existing function. * Mapping Functions:: Applying a function to each element of a list, etc. -* Anonymous Functions:: Lambda expressions are functions with no names. +* Anonymous Functions:: Lambda expressions are functions with no names. * Function Cells:: Accessing or setting the function definition of a symbol. * Inline Functions:: Defining functions that the compiler will open code. @@ -671,9 +671,9 @@ function: This function returns @var{arg} and has no side effects. @end defun -@defun ignore &rest args +@deffn Command ignore &rest args This function ignores any arguments and returns @code{nil}. -@end defun +@end deffn @node Mapping Functions @section Mapping Functions @@ -718,10 +718,10 @@ The length of the result is the same as the length of @var{sequence}. "Apply FUNCTION to successive cars of all ARGS. Return the list of results." ;; @r{If no list is exhausted,} - (if (not (memq 'nil args)) + (if (not (memq 'nil args)) ;; @r{apply function to @sc{car}s.} - (cons (apply f (mapcar 'car args)) - (apply 'mapcar* f + (cons (apply f (mapcar 'car args)) + (apply 'mapcar* f ;; @r{Recurse for rest of elements.} (mapcar 'cdr args))))) @end group @@ -743,7 +743,7 @@ other suitable punctuation. The argument @var{function} must be a function that can take one argument and return a string. The argument @var{sequence} can be any kind of sequence; that is, a list, a vector, a bit vector, or a string. - + @smallexample @group (mapconcat 'symbol-name @@ -931,7 +931,7 @@ and can be stored into a function cell just as any other object can be can make it void once more using @code{fmakunbound}. @defun fboundp symbol -This function returns @code{t} if the symbol has an object in its +This function returns @code{t} if @var{symbol} has an object in its function cell, @code{nil} otherwise. It does not check that the object is a legitimate function. @end defun @@ -976,9 +976,9 @@ making an alternate name for a function.) @item Giving a symbol a function definition that is not a list and therefore cannot be made with @code{defun}. For example, you can use @code{fset} -to give a symbol @code{s1} a function definition which is another symbol -@code{s2}; then @code{s1} serves as an alias for whatever definition -@code{s2} presently has. +to give a symbol @var{symbol1} a function definition which is another symbol +@var{symbol2}; then @var{symbol1} serves as an alias for whatever definition +@var{symbol2} presently has. @item In constructs for defining or altering functions. If @code{defun} diff --git a/man/lispref/glyphs.texi b/man/lispref/glyphs.texi index bf0c043..bc8663d 100644 --- a/man/lispref/glyphs.texi +++ b/man/lispref/glyphs.texi @@ -82,7 +82,7 @@ a toolbar, or as a mouse pointer or an icon, for example. Creating a glyph using @code{make-glyph} does not specify @emph{where} the glyph will be used, but it does specify @emph{what} the glyph will -look like. In particular, SPEC-LIST is used to specify this, and it's +look like. In particular, @var{spec-list} is used to specify this, and it's used to initialize the glyph's @code{image} property, which is an image specifier. (Note that @dfn{image} as used in the context of a glyph's @code{image} property or in the terms @dfn{image specifier}, @dfn{image @@ -90,7 +90,7 @@ instantiator}, or @dfn{image instance} does not refer to what people normally think of as an image (which in XEmacs is called a @dfn{pixmap}), but to any graphical element---a pixmap, a widget, or even a block of text, when used in the places that call for a glyph.) -The format of the SPEC-LIST is typically an image instantiator (a string +The format of the @var{spec-list} is typically an image instantiator (a string or a vector; @ref{Image Specifiers}), but can also be a list of such instantiators (each one in turn is tried until an image is successfully produced), a cons of a locale (frame, buffer, etc.) and an @@ -235,7 +235,7 @@ filled in with the corresponding colors from the face. @end itemize It is extremely rare that you will ever have to specify a value for -TYPE, which should be one of @code{buffer} (used for glyphs in an +@var{type}, which should be one of @code{buffer} (used for glyphs in an extent, the modeline, the toolbar, or elsewhere in a buffer), @code{pointer} (used for the mouse-pointer), or @code{icon} (used for a frame's icon), and defaults to @code{buffer}. The only cases where it @@ -880,10 +880,15 @@ the file must exist when the instantiator is added to the image, but does not need to exist at any other time (e.g. it may safely be a temporary file). -@defun valid-image-instantiator-format-p format +@defun valid-image-instantiator-format-p format &optional locale This function returns non-@code{nil} if @var{format} is a valid image -instantiator format. Note that the return value for many formats listed -above depends on whether XEmacs was compiled with support for that format. +instantiator format. + +If @var{locale} is non-@code{nil} then the format is checked in that locale. +If @var{locale} is @code{nil} the current console is used. + +Note that the return value for many formats listed above depends on +whether XEmacs was compiled with support for that format. @end defun @defun image-instantiator-format-list @@ -906,7 +911,7 @@ The default value of this variable defines the logical color names @end defvar @defvar x-bitmap-file-path -A list of the directories in which X bitmap files may be found. If nil, +A list of the directories in which X bitmap files may be found. If @code{nil}, this is initialized from the @samp{"*bitmapFilePath"} resource. This is used by the @code{make-image-instance} function (however, note that if the environment variable @samp{XBMLANGPATH} is set, it is consulted @@ -1047,13 +1052,13 @@ instance of type @code{nothing}. @end defun @defun widget-image-instance-p object -Return t if @var{object} is an image instance of type @code{widget}. +Return @code{t} if @var{object} is an image instance of type @code{widget}. @end defun @node Image Instance Functions @subsubsection Image Instance Functions -@defun make-image-instance data &optional domain dest-types no-error +@defun make-image-instance data &optional domain dest-types noerror This function creates a new image-instance object. @var{data} is an image instantiator, which describes the image @@ -1110,10 +1115,10 @@ fix this.) n If omitted, @var{domain} defaults to the selected window. -@var{no-error} controls what happens when the image cannot be generated. -If @var{nil}, an error message is generated. If @var{t}, no messages -are generated and this function returns @var{nil}. If anything else, a -warning message is generated and this function returns @var{nil}. +@var{noerror} controls what happens when the image cannot be generated. +If @code{nil}, an error message is generated. If @code{t}, no messages +are generated and this function returns @code{nil}. If anything else, a +warning message is generated and this function returns @code{nil}. @end defun @defun colorize-image-instance image-instance foreground background diff --git a/man/lispref/gutter.texi b/man/lispref/gutter.texi index db5882d..f3f9b9c 100644 --- a/man/lispref/gutter.texi +++ b/man/lispref/gutter.texi @@ -115,10 +115,10 @@ gutter. The values of the variables @code{default-gutter-visible-p}, @code{right-gutter-visible-p}, and @code{bottom-gutter-visible-p} are always gutter-visible specifiers. -Valid gutter-visible instantiators are t, nil or a list of symbols. If -a gutter-visible instantiator is set to a list of symbols, and the -corresponding gutter specification is a property-list strings, then -elements of the gutter specification will only be visible if the +Valid gutter-visible instantiators are @code{t}, @code{nil} or a list of +symbols. If a gutter-visible instantiator is set to a list of symbols, +and the corresponding gutter specification is a property-list strings, +then elements of the gutter specification will only be visible if the corresponding symbol occurs in the gutter-visible instantiator. @end defun @@ -252,7 +252,7 @@ the user to choose where the gutter should go. @defvr Specifier default-gutter The position of this gutter is specified in the function -@code{default-gutter-position}. If the corresponding +@code{default-gutter-position}. If the corresponding position-specific gutter (e.g. @code{top-gutter} if @code{default-gutter-position} is @code{top}) does not specify a gutter in a particular domain, then the value of @code{default-gutter} @@ -312,7 +312,7 @@ Specifier for the gutter at the right edge of the frame. @end defvr @defun gutter-specifier-p object -This function returns non-nil if @var{object} is a gutter specifier. +This function returns non-@code{nil} if @var{object} is a gutter specifier. Gutter specifiers are the actual objects contained in the gutter variables described above, and their valid instantiators are gutter descriptors (@pxref{Gutter Descriptor Format}). @@ -408,7 +408,7 @@ visibility that is used in frame geometry calculations. left gutter width for that frame to 68 pixels, then the frame will be sized to fit 80 characters plus a 68-pixel left gutter. If you then set the left gutter width to 0 for a particular buffer (or if that -buffer does not specify a left gutter or has a nil value specified for +buffer does not specify a left gutter or has a @code{nil} value specified for @code{left-gutter-visible-p}), you will find that, when that buffer is displayed in the selected window, the window will have a width of 86 or 87 characters -- the frame is sized for a 68-pixel left gutter but the diff --git a/man/lispref/help.texi b/man/lispref/help.texi index 7117fb1..9ab8294 100644 --- a/man/lispref/help.texi +++ b/man/lispref/help.texi @@ -226,7 +226,7 @@ Set the current horizontal position as a goal for C-n and C-p. @group Those commands will move to this position in the line moved to rather than trying to keep the same horizontal position. -With a non-nil argument, clears out the goal column +With a non-@code{nil} argument, clears out the goal column so that C-n and C-p resume vertical motion. The goal column is stored in the variable `goal-column'. @end group @@ -359,14 +359,14 @@ C-g abort-recursive-edit @group (substitute-command-keys "Substrings of the form \\=\\@{MAPVAR@} are replaced by summaries -\(made by describe-bindings) of the value of MAPVAR, taken as a keymap. +\(made by `describe-bindings') of the value of MAPVAR, taken as a keymap. Substrings of the form \\=\\ specify to use the value of MAPVAR as the keymap for future \\=\\[COMMAND] substrings. \\=\\= quotes the following character and is discarded; thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ into the output.") @result{} "Substrings of the form \@{MAPVAR@} are replaced by summaries -(made by describe-bindings) of the value of MAPVAR, taken as a keymap. +(made by `describe-bindings') of the value of MAPVAR, taken as a keymap. Substrings of the form \ specify to use the value of MAPVAR as the keymap for future \[COMMAND] substrings. \= quotes the following character and is discarded; @@ -606,12 +606,12 @@ help character, and the help character has no binding after that prefix. The variable's default value is @code{describe-prefix-bindings}. @end defvar -@defun describe-prefix-bindings +@deffn Command describe-prefix-bindings This function calls @code{describe-bindings} to display a list of all the subcommands of the prefix key of the most recent key sequence. The prefix described consists of all but the last event of that key sequence. (The last event is, presumably, the help character.) -@end defun +@end deffn The following two functions are found in the library @file{helper}. They are for modes that want to provide help without relinquishing @@ -676,7 +676,7 @@ users of that function should be told to use the newer one instead. XEmacs Lisp lets you mark a function or variable as @dfn{obsolete}, and indicate what should be used instead. -@defun make-obsolete function new +@deffn Command make-obsolete function new This function indicates that @var{function} is an obsolete function, and the function @var{new} should be used instead. The byte compiler will issue a warning to this effect when it encounters a usage of the @@ -685,11 +685,11 @@ documentation. @var{new} can also be a string (if there is not a single function with the same functionality any more), and should be a descriptive statement, such as "use @var{foo} or @var{bar} instead" or "this function is unnecessary". -@end defun +@end deffn -@defun make-obsolete-variable variable new +@deffn Command make-obsolete-variable variable new This is like @code{make-obsolete} but is for variables instead of functions. -@end defun +@end deffn @defun define-obsolete-function-alias oldfun newfun This function combines @code{make-obsolete} and @code{define-function}, diff --git a/man/lispref/hooks.texi b/man/lispref/hooks.texi index e8a3381..9773d56 100644 --- a/man/lispref/hooks.texi +++ b/man/lispref/hooks.texi @@ -1,13 +1,13 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/hooks.info @node Standard Hooks, Index, Standard Keymaps, Top @appendix Standard Hooks The following is a list of hook variables that let you provide -functions to be called from within Emacs on suitable occasions. +functions to be called from within Emacs on suitable occasions. Most of these variables have names ending with @samp{-hook}. They are @dfn{normal hooks}, run by means of @code{run-hooks}. The value of such @@ -98,8 +98,8 @@ special way (they are passed arguments, or else their values are used). @item ediff-long-help-message-function @item ediff-make-wide-display-function @item ediff-merge-split-window-function -@item ediff-meta-action-function -@item ediff-meta-redraw-function +@item ediff-meta-action-function +@item ediff-meta-redraw-function @item ediff-mode-hook @item ediff-prepare-buffer-hook @item ediff-quit-hook diff --git a/man/lispref/index.texi b/man/lispref/index.texi index 31ed313..937b347 100644 --- a/man/lispref/index.texi +++ b/man/lispref/index.texi @@ -24,7 +24,7 @@ @ignore All variables, functions, keys, programs, files, and concepts are -in this one index. +in this one index. All names and concepts are permuted, so they appear several times, one for each permutation of the parts of the name. For example, diff --git a/man/lispref/internationalization.texi b/man/lispref/internationalization.texi index b39bee5..4882f74 100644 --- a/man/lispref/internationalization.texi +++ b/man/lispref/internationalization.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/internationalization.info @node Internationalization, MULE, PostgreSQL Support, top @@ -160,12 +160,8 @@ Example: @end example @end defspec -Autoloaded functions which are specified in @file{loaddefs.el} do not need -to have a domain specification, because their documentation strings are -extracted into the main message base. However, for autoloaded functions -which are specified in a separate package, use following syntax: - -@defun autoload symbol filename &optional docstring interactive macro domain +@defun autoload function filename &optional docstring interactive type +This function defines @var{function} to autoload from @var{filename} Example: @example (autoload 'explore "jungle" "Explore the jungle." nil nil "emacs-gorilla") diff --git a/man/lispref/intro.texi b/man/lispref/intro.texi index 93f6309..162051f 100644 --- a/man/lispref/intro.texi +++ b/man/lispref/intro.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/intro.info @@ -368,7 +368,7 @@ when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author} Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome -to redistribute it under certain conditions; type `show c' +to redistribute it under certain conditions; type `show c' for details. @end smallexample @@ -386,7 +386,7 @@ necessary. Here is a sample; alter the names: @group Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' -(which makes passes at compilers) written +(which makes passes at compilers) written by James Hacker. @var{signature of Ty Coon}, 1 April 1989 @@ -441,7 +441,7 @@ but not flawless. There are a few topics that are not covered, either because we consider them secondary (such as most of the individual modes) or because they are yet to be written. Because we are not able to deal with them completely, we have left out several parts -intentionally. This includes most information about usage on VMS. +intentionally. The manual should be fully correct in what it does cover, and it is therefore open to criticism on anything it says---from specific examples @@ -712,7 +712,7 @@ The description follows on succeeding lines, sometimes with examples. function, @code{foo}. * A Sample Variable Description:: A description of an imaginary variable, - @code{electric-future-map}. + @code{electric-future-map}. @end menu @node A Sample Function Description diff --git a/man/lispref/keymaps.texi b/man/lispref/keymaps.texi index f727df8..a509fdf 100644 --- a/man/lispref/keymaps.texi +++ b/man/lispref/keymaps.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c Copyright (C) 1996 Ben Wing. @c See the file lispref.texi for copying conditions. @setfilename ../../info/keymaps.info @@ -131,7 +131,7 @@ This function constructs and returns a new keymap object. All entries in it are @code{nil}, meaning ``command undefined''. The only difference between this function and @code{make-keymap} is that this function returns a ``smaller'' keymap (one that is expected to contain -fewer entries). As keymaps dynamically resize, the distinction is not +fewer entries). As keymaps dynamically resize, this distinction is not great. Optional argument @var{name} specifies a name to assign to the keymap, @@ -282,7 +282,7 @@ That is, the @kbd{A} keystroke is represented by all of these forms: A ?A 65 (A) (?A) (65) [A] [?A] [65] [(A)] [(?A)] [(65)] @end example - + the @kbd{control-a} keystroke is represented by these forms: @example @@ -602,11 +602,13 @@ other. @end example @end defun -@defun current-local-map -This function returns the current buffer's local keymap, or @code{nil} -if it has none. In the following example, the keymap for the -@samp{*scratch*} buffer (using Lisp Interaction mode) has a number -of entries, including one prefix key, @kbd{C-x}. +@defun current-local-map &optional buffer +This function returns @var{buffer}'s local keymap, or @code{nil} +if it has none. @var{buffer} defaults to the current buffer. + +In the following example, the keymap for the @samp{*scratch*} buffer +(using Lisp Interaction mode) has a number of entries, including one +prefix key, @kbd{C-x}. @example @group @@ -931,8 +933,8 @@ bindings, as in @code{lookup-key} (above). @end example @end defun -@defun local-key-binding key &optional accept-defaults -This function returns the binding for @var{key} in the current +@defun local-key-binding keys &optional accept-defaults +This function returns the binding for @var{keys} in the current local keymap, or @code{nil} if it is undefined there. @c Emacs 19 feature @@ -940,8 +942,8 @@ The argument @var{accept-defaults} controls checking for default bindings, as in @code{lookup-key} (above). @end defun -@defun global-key-binding key &optional accept-defaults -This function returns the binding for command @var{key} in the +@defun global-key-binding keys &optional accept-defaults +This function returns the binding for command @var{keys} in the current global keymap, or @code{nil} if it is undefined there. @c Emacs 19 feature @@ -1002,7 +1004,7 @@ meta-prefix-char ; @r{The default value.} @end group @group (setq meta-prefix-char 24) - @result{} 24 + @result{} 24 @end group @group (key-binding "\C-xb") @@ -1149,26 +1151,28 @@ changing an entry in @code{ctl-x-map}, and this has the effect of changing the bindings of both @kbd{C-p C-f} and @kbd{C-x C-f} in the default global map. -@defun substitute-key-definition olddef newdef keymap &optional oldmap +@defun substitute-key-definition olddef newdef keymap &optional oldmap prefix @cindex replace bindings This function replaces @var{olddef} with @var{newdef} for any keys in @var{keymap} that were bound to @var{olddef}. In other words, -@var{olddef} is replaced with @var{newdef} wherever it appears. The -function returns @code{nil}. +@var{olddef} is replaced with @var{newdef} wherever it appears. Prefix +keymaps are checked recursively. + +The function returns @code{nil}. For example, this redefines @kbd{C-x C-f}, if you do it in an XEmacs with standard bindings: @smallexample @group -(substitute-key-definition +(substitute-key-definition 'find-file 'find-file-read-only (current-global-map)) @end group @end smallexample @c Emacs 19 feature If @var{oldmap} is non-@code{nil}, then its bindings determine which -keys to rebind. The rebindings still happen in @var{newmap}, not in +keys to rebind. The rebindings still happen in @var{keymap}, not in @var{oldmap}. Thus, you can change one map under the control of the bindings in another. For example, @@ -1182,6 +1186,11 @@ bindings in another. For example, puts the special deletion command in @code{my-map} for whichever keys are globally bound to the standard deletion command. +If argument @var{prefix} is non-@code{nil}, then only those occurrences +of @var{olddef} found in keymaps accessible through the keymap bound to +@var{prefix} in @var{keymap} are redefined. See also +@code{accessible-keymaps}. + @ignore @c Emacs 18 only Prefix keymaps that appear within @var{keymap} are not checked @@ -1194,9 +1203,9 @@ Here is an example showing a keymap before and after substitution: @smallexample @group -(setq map '(keymap - (?1 . olddef-1) - (?2 . olddef-2) +(setq map '(keymap + (?1 . olddef-1) + (?2 . olddef-2) (?3 . olddef-1))) @result{} (keymap (49 . olddef-1) (50 . olddef-2) (51 . olddef-1)) @end group @@ -1225,8 +1234,8 @@ digits to run @code{digit-argument}, and @kbd{-} to run @code{negative-argument}. Otherwise it makes them undefined like the rest of the printing characters. -@cindex yank suppression -@cindex @code{quoted-insert} suppression +@cindex yank suppression +@cindex @code{quoted-insert} suppression The @code{suppress-keymap} function does not make it impossible to modify a buffer, as it does not suppress commands such as @code{yank} and @code{quoted-insert}. To prevent any modification of a buffer, make @@ -1404,7 +1413,7 @@ sequences beginning with @kbd{C-x}.) @smallexample @group -(current-local-map) +(current-local-map) @result{} # (accessible-keymaps (current-local-map)) @result{}(([] . #) @@ -1452,7 +1461,7 @@ indicating their relationship to their enclosing keymap. @end defun @defun map-keymap function keymap &optional sort-first -This function applies @var{function} to each element of @code{KEYMAP}. +This function applies @var{function} to each element of @var{keymap}. @var{function} will be called with two arguments: a key-description list, and the binding. The order in which the elements of the keymap are passed to the function is unspecified. If the function inserts new @@ -1482,14 +1491,14 @@ bound to @var{definition} in a set of keymaps. The argument @var{definition} can be any object; it is compared with all keymap entries using @code{eq}. -KEYMAPS can be either a keymap (meaning search in that keymap and the +@var{keymaps} can be either a keymap (meaning search in that keymap and the current global keymap) or a list of keymaps (meaning search in exactly -those keymaps and no others). If KEYMAPS is nil, search in the currently -applicable maps for EVENT-OR-KEYS. +those keymaps and no others). If @var{keymaps} is nil, search in the currently +applicable maps for @var{event-or-keys}. -If @var{keymap} is a keymap, then the maps searched are @var{keymap} and -the global keymap. If @var{keymap} is a list of keymaps, then the maps -searched are exactly those keymaps, and no others. If @var{keymap} is +If @var{keymaps} is a keymap, then the maps searched are @var{keymaps} and +the global keymap. If @var{keymaps} is a list of keymaps, then the maps +searched are exactly those keymaps, and no others. If @var{keymaps} is @code{nil}, then the maps used are the current active keymaps for @var{event-or-keys} (this is equivalent to specifying @code{(current-keymaps @var{event-or-keys})} as the argument to @@ -1538,13 +1547,14 @@ for mouse clicks. @code{describe-bindings-internal} is used to implement the help command @code{describe-bindings}. -@deffn Command describe-bindings prefix mouse-only-p +@deffn Command describe-bindings &optional prefix mouse-only-p This function creates a listing of all defined keys and their definitions. It writes the listing in a buffer named @samp{*Help*} and displays it in a window. -If @var{prefix} is non-@code{nil}, it should be a prefix key; then the -listing includes only keys that start with @var{prefix}. +If optional argument @var{prefix} is non-@code{nil}, it should be a +prefix key; then the listing includes only keys that start with +@var{prefix}. When several characters with consecutive @sc{ascii} codes have the same definition, they are shown together, as @@ -1556,8 +1566,9 @@ For example, in the default global map, the characters @samp{@key{SPC} the normal printing characters, (e.g., letters, digits, punctuation, etc.@:); all these characters are bound to @code{self-insert-command}. -If the second argument (prefix arg, interactively) is non-@code{nil} -then only the mouse bindings are displayed. +If the second optional argument @var{mouse-only-p} (prefix arg, +interactively) is non-@code{nil} then only the mouse bindings are +displayed. @end deffn @node Other Keymap Functions diff --git a/man/lispref/ldap.texi b/man/lispref/ldap.texi index 6e9c686..827fca0 100644 --- a/man/lispref/ldap.texi +++ b/man/lispref/ldap.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1998 Free Software Foundation, Inc. +@c Copyright (C) 1998 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/ldap.info @node LDAP Support, PostgreSQL Support, ToolTalk Support, top @@ -58,7 +58,7 @@ and ensuring compliance with LDAP internationalization rules and formats @menu * LDAP Variables:: Lisp variables related to LDAP -* The High-Level LDAP API:: High-level LDAP lisp functions +* The High-Level LDAP API:: High-level LDAP lisp functions * The Low-Level LDAP API:: Low-level LDAP lisp primitives * LDAP Internationalization:: I18n variables and functions @end menu @@ -70,7 +70,7 @@ and ensuring compliance with LDAP internationalization rules and formats @defvar ldap-default-host The default LDAP server hostname. -A TCP port number can be appended to that name using a colon as +A TCP port number can be appended to that name using a colon as a separator. @end defvar @@ -87,7 +87,7 @@ Acme organization in the United States. @end defvar @defvar ldap-host-parameters-alist -An alist of per host options for LDAP transactions. +An alist of per host options for LDAP transactions. The list elements look like @code{(HOST PROP1 VAL1 PROP2 VAL2 ...)} @var{host} is the name of an LDAP server. A TCP port number can be appended to that name using a colon as a separator. @@ -105,12 +105,12 @@ The authentication method to use, possible values depend on the LDAP library XEmacs was compiled with, they may include @code{simple}, @code{krbv41} and @code{krbv42}. @item base -The base for the search. This may look like @samp{cÿ, o¬me}, see +The base for the search. This may look like @samp{cÿ, o¬me}, see RFC 1779 for syntax details. @item scope -One of the symbols @code{base}, @code{onelevel} or @code{subtree} +One of the symbols @code{base}, @code{onelevel} or @code{subtree} indicating the scope of the search limited to a base -object, to a single level or to the whole subtree. +object, to a single level or to the whole subtree. @item deref The dereference policy is one of the symbols @code{never}, @code{always}, @code{search} or @code{find} and defines how aliases are @@ -146,63 +146,64 @@ LDAP operations. All of them open a connection to a host, perform an operation (add/search/modify/delete) on one or several entries and cleanly close the connection thus insulating the user from all the details of the low-level interface such as LDAP Lisp objects @pxref{The -Low-Level LDAP API}. +Low-Level LDAP API}. Note that @code{ldap-search} which used to be the name of the high-level -search function in XEmacs 21.1 is now obsolete. For consistency in the +search function in XEmacs 21.1 is now obsolete. For consistency in the naming as well as backward compatibility, that function now acts as a wrapper that calls either @code{ldap-search-basic} (low-level search function) or @code{ldap-search-entries} (high-level search function) according to the actual parameters. A direct call to one of these two functions is preferred since it is faster and unambiguous. -@defun ldap-search-entries filter &optional host attributes attrsonly withdn +@deffn Command ldap-search-entries filter &optional host attributes attrsonly withdn Perform an LDAP search. @var{filter} is the search filter @pxref{Syntax of Search Filters} @var{host} is the LDAP host on which to perform the search. -@var{attributes} is the specific attributes to retrieve, @code{nil} means +@var{attributes} is the specific attributes to retrieve, @code{nil} means retrieve all. -@var{attrsonly} if non-@code{nil} retrieves the attributes only without +@var{attrsonly} if non-@code{nil} retrieves the attributes only without their associated values. If @var{withdn} is non-@code{nil} each entry in the result will be prepended with its distinguished name DN. -Additional search parameters can be specified through +Additional search parameters can be specified through @code{ldap-host-parameters-alist}. The function returns a list of matching entries. Each entry is itself an alist of attribute/value pairs optionally preceded by the DN of the entry according to the value of @var{withdn}. -@end defun +@end deffn @defun ldap-add-entries entries &optional host binddn passwd Add entries to an LDAP directory. @var{entries} is a list of entry -specifications of the form @code{(DN (ATTR . VALUE) (ATTR . VALUE) ...)} +specifications of the form @code{(DN (ATTR . VALUE) (ATTR . VALUE) ...)} where @var{dn} the distinguished name of an entry to add, the following -are cons cells containing attribute/value string pairs. @var{host} is -the LDAP host, defaulting to `ldap-default-host' @var{binddn} is the DN -to bind as to the server @var{passwd} is the corresponding password. +are cons cells containing attribute/value string pairs. +@var{host} is the LDAP host, defaulting to @code{ldap-default-host}. +@var{binddn} is the DN to bind as to the server. +@var{passwd} is the corresponding password. @end defun @defun ldap-modify-entries entry-mods &optional host binddn passwd Modify entries of an LDAP directory. -@var{entry_mods} is a list of entry modifications of the form -@code{(DN MOD-SPEC1 MOD-SPEC2 ...)} where @var{dn} is the distinguished name of -the entry to modify, the following are modification specifications. -A modification specification is itself a list of the form -@code{(MOD-OP ATTR VALUE1 VALUE2 ...)} @var{mod-op} and @var{attr} are mandatory, +@var{entry_mods} is a list of entry modifications of the form +@code{(DN MOD-SPEC1 MOD-SPEC2 ...)} where @var{dn} is the distinguished name of +the entry to modify, the following are modification specifications. +A modification specification is itself a list of the form +@code{(MOD-OP ATTR VALUE1 VALUE2 ...)} @var{mod-op} and @var{attr} are mandatory, @var{values} are optional depending on @var{mod-op}. @var{mod-op} is the type of modification, one of the symbols @code{add}, @code{delete} or @code{replace}. @var{attr} is the LDAP attribute type to modify. -@var{host} is the LDAP host, defaulting to @code{ldap-default-host} -@var{binddn} is the DN to bind as to the server -@var{passwd} is the corresponding password" +@var{host} is the LDAP host, defaulting to @code{ldap-default-host}. +@var{binddn} is the DN to bind as to the server. +@var{passwd} is the corresponding password. @end defun @defun ldap-delete-entries dn &optional host binddn passwd Delete an entry from an LDAP directory. -@var{dn} is the distinguished name of an entry to delete or +@var{dn} is the distinguished name of an entry to delete or a list of those. -@var{host} is the LDAP host, defaulting to @code{ldap-default-host} -@var{binddn} is the DN to bind as to the server +@var{host} is the LDAP host, defaulting to @code{ldap-default-host}. +@var{binddn} is the DN to bind as to the server. @var{passwd} is the corresponding password. @end defun @@ -222,9 +223,9 @@ Note that the former functions @code{ldap-*-internal} functions have been renamed in XEmacs 21.2 @menu -* The LDAP Lisp Object:: -* Opening and Closing a LDAP Connection:: -* Low-level Operations on a LDAP Server:: +* The LDAP Lisp Object:: +* Opening and Closing a LDAP Connection:: +* Low-level Operations on a LDAP Server:: @end menu @node The LDAP Lisp Object, Opening and Closing a LDAP Connection, The Low-Level LDAP API, The Low-Level LDAP API @@ -239,11 +240,11 @@ This function returns non-@code{nil} if @var{object} is a @code{ldap} object. @end defun @defun ldap-host ldap -Return the server host of the connection represented by @var{ldap} +Return the server host of the connection represented by @var{ldap}. @end defun @defun ldap-live-p ldap -Return non-@code{nil} if @var{ldap} is an active LDAP connection +Return non-@code{nil} if @var{ldap} is an active LDAP connection. @end defun @@ -274,13 +275,13 @@ The dereference policy is one of the symbols @code{never}, dereferenced. @table @code @item never -Aliases are never dereferenced +Aliases are never dereferenced. @item always -Aliases are always dereferenced +Aliases are always dereferenced. @item search -Aliases are dereferenced when searching +Aliases are dereferenced when searching. @item find -Aliases are dereferenced when locating the base object for the search +Aliases are dereferenced when locating the base object for the search. @end table The default is @code{never}. @item timelimit @@ -291,7 +292,7 @@ The maximum number of matches to return for searches performed on this connectio @end defun @defun ldap-close ldap -Close the connection represented by @var{ldap} +Close the connection represented by @var{ldap}. @end defun @@ -305,7 +306,7 @@ thus requiring a preliminary call to @code{ldap-open}. Multiple searches can be made on the same connection, then the session must be closed with @code{ldap-close}. -@defun ldap-search-basic ldap filter base scope attrs attrsonly +@defun ldap-search-basic ldap filter &optional base scope attrs attrsonly withdn verbose Perform a search on an open connection @var{ldap} created with @code{ldap-open}. @var{filter} is a filter string for the search @pxref{Syntax of Search Filters} @var{base} is the distinguished name at which to start the search. @@ -313,16 +314,16 @@ Perform a search on an open connection @var{ldap} created with @code{ldap-open}. @code{subtree} indicating the scope of the search limited to a base object, to a single level or to the whole subtree. The default is @code{subtree}. -@code{attrs} is a list of strings indicating which attributes to retrieve +@var{attrs} is a list of strings indicating which attributes to retrieve for each matching entry. If @code{nil} all available attributes are returned. -If @code{attrsonly} is non-@code{nil} then only the attributes are retrieved, not -their associated values -If @code{withdn} is non-@code{nil} then each entry in the result is prepended with -its distinguished name DN -If @code{verbose} is non-@code{nil} then progress messages are echoed +If @var{attrsonly} is non-@code{nil} then only the attributes are +retrieved, not their associated values. +If @var{withdn} is non-@code{nil} then each entry in the result is +prepended with its distinguished name DN. +If @var{verbose} is non-@code{nil} then progress messages are echoed The function returns a list of matching entries. Each entry is itself an alist of attribute/value pairs optionally preceded by the DN of the -entry according to the value of @code{withdn}. +entry according to the value of @var{withdn}. @end defun @defun ldap-add ldap dn entry @@ -341,13 +342,13 @@ Modify an entry in an LDAP directory. A modification is a list of the form @code{(MOD-OP ATTR VALUE1 VALUE2 ...)} @var{mod-op} and @var{attr} are mandatory, @var{values} are optional depending on @var{mod-op}. @var{mod-op} is the type of modification, one of the symbols @code{add}, @code{delete} -or @code{replace}. @var{attr} is the LDAP attribute type to modify +or @code{replace}. @var{attr} is the LDAP attribute type to modify. @end defun @defun ldap-delete ldap dn Delete an entry to an LDAP directory. @var{ldap} is an LDAP connection object created with @code{ldap-open}. -@var{dn} is the distinguished name of the entry to delete +@var{dn} is the distinguished name of the entry to delete. @end defun @@ -370,8 +371,8 @@ and the corresponding decoder is then retrieved from @end defun @menu -* LDAP Internationalization Variables:: -* Encoder/Decoder Functions:: +* LDAP Internationalization Variables:: +* Encoder/Decoder Functions:: @end menu @node LDAP Internationalization Variables, Encoder/Decoder Functions, LDAP Internationalization, LDAP Internationalization @@ -384,20 +385,20 @@ If non-@code{nil}, no encoding/decoding will be performed LDAP attribute values @defvar ldap-coding-system Coding system of LDAP string values. -LDAP v3 specifies the coding system of strings to be UTF-8. +LDAP v3 specifies the coding system of strings to be UTF-8. You need an XEmacs with Mule support for this. @end defvar @defvar ldap-default-attribute-decoder Decoder function to use for attributes whose syntax is unknown. Such a function receives an encoded attribute value as a string and should -return the decoded value as a string +return the decoded value as a string. @end defvar @defvar ldap-attribute-syntax-encoders A vector of functions used to encode LDAP attribute values. The sequence of functions corresponds to the sequence of LDAP attribute syntax -object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in +object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2. As of this writing, only a few encoder functions are available. @end defvar @@ -405,14 +406,14 @@ are available. @defvar ldap-attribute-syntax-decoders A vector of functions used to decode LDAP attribute values. The sequence of functions corresponds to the sequence of LDAP attribute syntax -object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in +object identifiers of the form 1.3.6.1.4.1.1466.1115.121.1.* as defined in RFC2252 section 4.3.2. As of this writing, only a few decoder functions are available. @end defvar @defvar ldap-attribute-syntaxes-alist A map of LDAP attribute names to their type object id minor number. -This table is built from RFC2252 Section 5 and RFC2256 Section 5 +This table is built from RFC2252 Section 5 and RFC2256 Section 5. @end defvar @node Encoder/Decoder Functions, , LDAP Internationalization Variables, LDAP Internationalization @@ -421,32 +422,32 @@ This table is built from RFC2252 Section 5 and RFC2256 Section 5 @defun ldap-encode-boolean bool A function that encodes an elisp boolean @var{bool} into a LDAP -boolean string representation +boolean string representation. @end defun @defun ldap-decode-boolean str A function that decodes a LDAP boolean string representation -@var{str} into an elisp boolean +@var{str} into an elisp boolean. @end defun @defun ldap-decode-string str -Decode a string @var{str} according to `ldap-coding-system' +Decode a string @var{str} according to @var{ldap-coding-system}. @end defun @defun ldap-encode-string str -Encode a string @var{str} according to `ldap-coding-system' +Encode a string @var{str} according to @var{ldap-coding-system}. @end defun @defun ldap-decode-address str -Decode an address @var{str} according to `ldap-coding-system' and +Decode an address @var{str} according to @var{ldap-coding-system} and replacing $ signs with newlines as specified by LDAP encoding rules for -addresses +addresses. @end defun @defun ldap-encode-address str -Encode an address @var{str} according to `ldap-coding-system' and +Encode an address @var{str} according to @var{ldap-coding-system} and replacing newlines with $ signs as specified by LDAP encoding rules for -addresses +addresses. @end defun @@ -468,9 +469,9 @@ In that syntax simple filters have the form: @code{} is the corresponding value. This is generally an exact string but may also contain @code{*} characters as wildcards -@code{filtertype} is one @code{=} @code{~=}, @code{<=}, @code{>=} which +@code{filtertype} is one @code{=} @code{~=}, @code{<=}, @code{>=} which respectively describe equality, approximate equality, inferiority and -superiority. +superiority. Thus @code{(cn=John Smith)} matches all records having a canonical name equal to John Smith. @@ -485,5 +486,5 @@ not operators. @code{(&(objectClass=Person)(mail=*)(|(sn=Smith)(givenname=John)))} matches records of class @code{Person} containing a @code{mail} -attribute and corresponding to people whose last name is @code{Smith} or +attribute and corresponding to people whose last name is @code{Smith} or whose first name is @code{John}. diff --git a/man/lispref/lispref.texi b/man/lispref/lispref.texi index 19e4b5a..5003ef5 100644 --- a/man/lispref/lispref.texi +++ b/man/lispref/lispref.texi @@ -247,8 +247,8 @@ Conventions Format of Descriptions -* A Sample Function Description:: -* A Sample Variable Description:: +* A Sample Function Description:: +* A Sample Variable Description:: Lisp Data Types @@ -365,7 +365,7 @@ Evaluation * Intro Eval:: Evaluation in the scheme of things. * Eval:: How to invoke the Lisp interpreter explicitly. * Forms:: How various sorts of objects are evaluated. -* Quoting:: Avoiding evaluation (to put constants in +* Quoting:: Avoiding evaluation (to put constants in the program). Kinds of Forms @@ -418,11 +418,11 @@ Variables Scoping Rules for Variable Bindings -* Scope:: Scope means where in the program a value +* Scope:: Scope means where in the program a value is visible. Comparison with other languages. * Extent:: Extent means how long in time a value exists. * Impl of Scope:: Two ways to implement dynamic scoping. -* Using Scoping:: How to use dynamic scoping carefully and +* Using Scoping:: How to use dynamic scoping carefully and avoid problems. Buffer-Local Variables @@ -440,11 +440,11 @@ Functions * Defining Functions:: Lisp expressions for defining functions. * Calling Functions:: How to use an existing function. * Mapping Functions:: Applying a function to each element of a list, etc. -* Anonymous Functions:: Lambda-expressions are functions with no names. +* Anonymous Functions:: Lambda-expressions are functions with no names. * Function Cells:: Accessing or setting the function definition of a symbol. * Related Topics:: Cross-references to specific Lisp primitives - that have a special bearing on how + that have a special bearing on how functions work. Lambda Expressions @@ -480,10 +480,10 @@ Debugging Lisp Programs * Debugger:: How the XEmacs Lisp debugger is implemented. * Syntax Errors:: How to find syntax errors. -* Compilation Errors:: How to find errors that show up in +* Compilation Errors:: How to find errors that show up in byte compilation. * Edebug:: A source-level XEmacs Lisp debugger. - + The Lisp Debugger * Error Debugging:: Entering the debugger when an error happens. @@ -502,10 +502,10 @@ Debugging Invalid Lisp Syntax Reading and Printing Lisp Objects * Streams Intro:: Overview of streams, reading and printing. -* Input Streams:: Various data types that can be used as +* Input Streams:: Various data types that can be used as input streams. * Input Functions:: Functions to read Lisp objects from text. -* Output Streams:: Various data types that can be used as +* Output Streams:: Various data types that can be used as output streams. * Output Functions:: Functions to print Lisp objects as text. @@ -634,7 +634,7 @@ Major and Minor Modes * Major Modes:: Defining major modes. * Minor Modes:: Defining minor modes. * Modeline Format:: Customizing the text that appears in the modeline. -* Hooks:: How to use hooks; how to write code that +* Hooks:: How to use hooks; how to write code that provides hooks. Major Modes @@ -694,7 +694,7 @@ File Names * File Name Components:: The directory part of a file name, and the rest. * Directory Names:: A directory's name as a directory is different from its name as a file. -* Relative File Names:: Some file names are relative to a +* Relative File Names:: Some file names are relative to a current directory. * File Name Expansion:: Converting relative file names to absolute ones. * Unique File Names:: Generating names for temporary files. @@ -702,17 +702,17 @@ File Names Backups and Auto-Saving -* Backup Files:: How backup files are made; how their names +* Backup Files:: How backup files are made; how their names are chosen. * Auto-Saving:: How auto-save files are made; how their names are chosen. -* Reverting:: @code{revert-buffer}, and how to customize +* Reverting:: @code{revert-buffer}, and how to customize what it does. Backup Files * Making Backups:: How XEmacs makes backup files, and when. -* Rename or Copy:: Two alternatives: renaming the old file +* Rename or Copy:: Two alternatives: renaming the old file or copying it. * Numbered Backups:: Keeping multiple backups for each source file. * Backup Names:: How backup file names are computed; customization. @@ -746,7 +746,7 @@ Windows and choosing a window for it. * Window Point:: Each window has its own location of point. * Window Start:: The display-start position controls which text - is on-screen in the window. + is on-screen in the window. * Vertical Scrolling:: Moving text up and down in the window. * Horizontal Scrolling:: Moving text sideways on the window. * Size of Window:: Accessing the size of a window. @@ -792,7 +792,7 @@ Markers * Predicates on Markers:: Testing whether an object is a marker. * Creating Markers:: Making empty markers or markers at certain places. * Information from Markers:: Finding the marker's buffer or character - position. + position. * Changing Markers:: Moving the marker to a new buffer or position. * The Mark:: How ``the mark'' is implemented with a marker. * The Region:: How to access ``the region''. @@ -823,7 +823,7 @@ Text position stored in a register. * Transposition:: Swapping two portions of a buffer. * Change Hooks:: Supplying functions to be run when text is changed. - + The Kill Ring * Kill Ring Concepts:: What text looks like in the kill ring. @@ -1097,20 +1097,20 @@ LDAP Support XEmacs LDAP API * LDAP Variables:: Lisp variables related to LDAP -* The High-Level LDAP API:: High-level LDAP lisp functions +* The High-Level LDAP API:: High-level LDAP lisp functions * The Low-Level LDAP API:: Low-level LDAP lisp primitives * LDAP Internationalization:: I18n variables and functions The Low-Level LDAP API -* The LDAP Lisp Object:: -* Opening and Closing a LDAP Connection:: -* Low-level Operations on a LDAP Server:: +* The LDAP Lisp Object:: +* Opening and Closing a LDAP Connection:: +* Low-level Operations on a LDAP Server:: LDAP Internationalization -* LDAP Internationalization Variables:: -* Encoder/Decoder Functions:: +* LDAP Internationalization Variables:: +* Encoder/Decoder Functions:: Internationalization diff --git a/man/lispref/lists.texi b/man/lispref/lists.texi index d708b8e..cd237e1 100644 --- a/man/lispref/lists.texi +++ b/man/lispref/lists.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/lists.info @node Lists, Sequences Arrays Vectors, Strings and Characters, Top @@ -698,8 +698,8 @@ new @sc{car} or @sc{cdr}. used on a list, @code{setcar} replaces one element of a list with a different element. -@defun setcar cons object -This function stores @var{object} as the new @sc{car} of @var{cons}, +@defun setcar cons-cell object +This function stores @var{object} as the new @sc{car} of @var{cons-cell}, replacing its previous @sc{car}. It returns the value @var{object}. For example: @@ -798,8 +798,8 @@ x2: | The lowest-level primitive for modifying a @sc{cdr} is @code{setcdr}: -@defun setcdr cons object -This function stores @var{object} as the new @sc{cdr} of @var{cons}, +@defun setcdr cons-cell object +This function stores @var{object} as the new @sc{cdr} of @var{cons-cell}, replacing its previous @sc{cdr}. It returns the value @var{object}. @end defun @@ -1598,30 +1598,30 @@ with it. This means that it's a malformed or circular plist. @node Working With Normal Plists @subsection Working With Normal Plists -@defun plist-get plist prop &optional default +@defun plist-get plist property &optional default This function extracts a value from a property list. The function -returns the value corresponding to the given @var{prop}, or -@var{default} if @var{prop} is not one of the properties on the list. +returns the value corresponding to the given @var{property}, or +@var{default} if @var{property} is not one of the properties on the list. @end defun -@defun plist-put plist prop val -This function changes the value in @var{plist} of @var{prop} to -@var{val}. If @var{prop} is already a property on the list, its value is -set to @var{val}, otherwise the new @var{prop} @var{val} pair is added. -The new plist is returned; use @code{(setq x (plist-put x prop val))} to +@defun plist-put plist property value +This function changes the value in @var{plist} of @var{property} to +@var{value}. If @var{property} is already a property on the list, its value is +set to @var{value}, otherwise the new @var{property} @var{value} pair is added. +The new plist is returned; use @code{(setq x (plist-put x property value))} to be sure to use the new value. The @var{plist} is modified by side effects. @end defun -@defun plist-remprop plist prop -This function removes from @var{plist} the property @var{prop} and its +@defun plist-remprop plist property +This function removes from @var{plist} the property @var{property} and its value. The new plist is returned; use @code{(setq x (plist-remprop x -prop val))} to be sure to use the new value. The @var{plist} is +property))} to be sure to use the new value. The @var{plist} is modified by side effects. @end defun -@defun plist-member plist prop -This function returns @code{t} if @var{prop} has a value specified in +@defun plist-member plist property +This function returns @code{t} if @var{property} has a value specified in @var{plist}. @end defun @@ -1657,25 +1657,25 @@ to @code{setq} the value back into where it came from. Recall that a @dfn{lax plist} is a property list whose keys are compared using @code{equal} instead of @code{eq}. -@defun lax-plist-get lax-plist prop &optional default +@defun lax-plist-get lax-plist property &optional default This function extracts a value from a lax property list. The function -returns the value corresponding to the given @var{prop}, or -@var{default} if @var{prop} is not one of the properties on the list. +returns the value corresponding to the given @var{property}, or +@var{default} if @var{property} is not one of the properties on the list. @end defun -@defun lax-plist-put lax-plist prop val -This function changes the value in @var{lax-plist} of @var{prop} to @var{val}. +@defun lax-plist-put lax-plist property value +This function changes the value in @var{lax-plist} of @var{property} to @var{value}. @end defun -@defun lax-plist-remprop lax-plist prop -This function removes from @var{lax-plist} the property @var{prop} and +@defun lax-plist-remprop lax-plist property +This function removes from @var{lax-plist} the property @var{property} and its value. The new plist is returned; use @code{(setq x -(lax-plist-remprop x prop val))} to be sure to use the new value. The +(lax-plist-remprop x property))} to be sure to use the new value. The @var{lax-plist} is modified by side effects. @end defun -@defun lax-plist-member lax-plist prop -This function returns @code{t} if @var{prop} has a value specified in +@defun lax-plist-member lax-plist property +This function returns @code{t} if @var{property} has a value specified in @var{lax-plist}. @end defun diff --git a/man/lispref/loading.texi b/man/lispref/loading.texi index e533588..e3888ed 100644 --- a/man/lispref/loading.texi +++ b/man/lispref/loading.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/loading.info @node Loading, Byte Compilation, Macros, Top @@ -300,9 +300,9 @@ to load automatically from @var{filename}. The string @var{filename} specifies the file to load to get the real definition of @var{function}. The argument @var{docstring} is the documentation string for the -function. Normally, this is the identical to the documentation string -in the function definition itself. Specifying the documentation string -in the call to @code{autoload} makes it possible to look at the +function. Normally, this is identical to the documentation string in +the function definition itself. Specifying the documentation string in +the call to @code{autoload} makes it possible to look at the documentation without loading the function's real definition. If @var{interactive} is non-@code{nil}, then the function can be called @@ -314,9 +314,9 @@ definition. You can autoload macros and keymaps as well as ordinary functions. Specify @var{type} as @code{macro} if @var{function} is really a macro. -Specify @var{type} as @code{keymap} if @var{function} is really a -keymap. Various parts of Emacs need to know this information without -loading the real definition. +Specify @var{type} as @code{keymap} if @var{function} is really a keymap. +Various parts of Emacs need to know this information without loading the +real definition. An autoloaded keymap loads automatically during key lookup when a prefix key's binding is the symbol @var{function}. Autoloading does not occur @@ -335,7 +335,7 @@ object, then it is defined as an autoload object like this: (autoload @var{filename} @var{docstring} @var{interactive} @var{type}) @end example -For example, +For example, @example @group @@ -509,7 +509,7 @@ file should call @code{provide} at the top level to add the feature to Features are normally named after the files that provide them, so that @code{require} need not be given the file name. - For example, in @file{emacs/lisp/prolog.el}, + For example, in @file{emacs/lisp/prolog.el}, the definition for @code{run-prolog} includes the following code: @smallexample @@ -609,11 +609,11 @@ presence or absence of emacs or environment extensions. @var{fexp} can be a symbol, a number, or a list. -If @var{fexp} is a symbol, it is looked up in the `features' variable, +If @var{fexp} is a symbol, it is looked up in the @code{features} variable, and @code{t} is returned if it is found, @code{nil} otherwise. If @var{fexp} is a number, the function returns @code{t} if this Emacs -has an equal or greater number than @code{fexp}, @code{nil} otherwise. +has an equal or greater number than @var{fexp}, @code{nil} otherwise. Note that minor Emacs version is expected to be 2 decimal places wide, so @code{(featurep 20.4)} will return @code{nil} on XEmacs 20.4---you must write @code{(featurep 20.04)}, unless you wish to match for XEmacs @@ -627,7 +627,7 @@ If @var{fexp} is a list whose car is the symbol @code{or}, the function returns @code{t} if any the features in its cdr are present, @code{nil} otherwise. -If @var{fexp} is a list whose car is the symbol @code{not}, the function +If @var{fexp} is a list whose car is the symbol @code{not}, the function returns @code{t} if the feature is not present, @code{nil} otherwise. Examples: diff --git a/man/lispref/locals.texi b/man/lispref/locals.texi index ef9359d..2d3ed27 100644 --- a/man/lispref/locals.texi +++ b/man/lispref/locals.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/locals.info @node Standard Buffer-Local Variables, Standard Keymaps, Standard Errors, Top diff --git a/man/lispref/macros.texi b/man/lispref/macros.texi index 92c6dbf..78b43d6 100644 --- a/man/lispref/macros.texi +++ b/man/lispref/macros.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/macros.info @node Macros, Loading, Functions, Top @@ -282,7 +282,7 @@ Here are some examples: @end group @end example -@quotation +@quotation In older versions of Emacs (before XEmacs 19.12 or FSF Emacs version 19.29), @samp{`} used a different syntax which required an extra level of parentheses around the entire backquote construct. Likewise, each @@ -397,7 +397,7 @@ macro. Here is a correct expansion for the @code{for} macro: @end group @end smallexample -Here is a macro definition that creates this expansion: +Here is a macro definition that creates this expansion: @smallexample @group diff --git a/man/lispref/maps.texi b/man/lispref/maps.texi index 1421e91..15e9fb4 100644 --- a/man/lispref/maps.texi +++ b/man/lispref/maps.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/maps.info @node Standard Keymaps, Standard Hooks, Standard Buffer-Local Variables, Top @@ -163,7 +163,7 @@ The minibuffer keymap used for reading Lisp expressions. @item read-shell-command-map @vindex read-shell-command-map -The minibuffer keymap used by shell-command and related commands. +The minibuffer keymap used by @code{shell-command} and related commands. @item shared-lisp-mode-map @vindex shared-lisp-mode-map diff --git a/man/lispref/markers.texi b/man/lispref/markers.texi index 44920a8..b22c287 100644 --- a/man/lispref/markers.texi +++ b/man/lispref/markers.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/markers.info @node Markers, Text, Positions, Top @@ -258,7 +258,7 @@ chapter. @end example @end defun -@defun copy-marker marker-or-integer +@defun copy-marker marker-or-integer &optional marker-type If passed a marker as its argument, @code{copy-marker} returns a new marker that points to the same place and the same buffer as does @var{marker-or-integer}. If passed an integer as its argument, @@ -271,8 +271,11 @@ passed an integer argument greater than the length of the buffer, @code{copy-marker} returns a new marker that points to the end of the buffer. -An error is signaled if @var{marker} is neither a marker nor an -integer. +An error is signaled if @var{marker-or-integer} is neither a marker nor +an integer. + +Optional second argument @var{marker-type} specifies the insertion type +of the new marker; see @code{marker-insertion-type}. @example @group @@ -399,11 +402,14 @@ This function moves @var{marker} to @var{position} in @var{buffer}. If @var{buffer} is not provided, it defaults to the current buffer. -If @var{position} is less than 1, @code{set-marker} moves @var{marker} -to the beginning of the buffer. If @var{position} is greater than the -size of the buffer, @code{set-marker} moves marker to the end of the -buffer. If @var{position} is @code{nil} or a marker that points -nowhere, then @var{marker} is set to point nowhere. +@var{position} can be a marker, an integer or @code{nil}. If +@var{position} is an integer, @code{set-marker} moves @var{marker} to +point before the @var{position}th character in @var{buffer}. If +@var{position} is @code{nil}, @var{marker} is made to point nowhere. +Then it no longer slows down editing in any buffer. If @var{position} +is less than 1, @var{marker} is moved to the beginning of @var{buffer}. +If @var{position} is greater than the size of @var{buffer}, @var{marker} +is moved to the end of @var{buffer}. The value returned is @var{marker}. @@ -510,7 +516,7 @@ If you are using this in an editing command, you are most likely making a mistake; see the documentation of @code{set-mark} below. @end defun -@defun mark-marker inactive-p buffer +@defun mark-marker &optional force buffer This function returns @var{buffer}'s mark. @var{buffer} defaults to the current buffer if omitted. This is the very marker that records the mark location inside XEmacs, not a copy. Therefore, changing this @@ -576,9 +582,9 @@ example: @example @group -(let ((beg (point))) +(let ((start (point))) (forward-line 1) - (delete-region beg (point))). + (delete-region start (point))). @end group @end example @end defun @@ -621,7 +627,7 @@ marks of the current buffer, most recent first. @example @group mark-ring -@result{} (# +@result{} (# # @dots{}) @end group diff --git a/man/lispref/menus.texi b/man/lispref/menus.texi index 7f6e158..53d1ef7 100644 --- a/man/lispref/menus.texi +++ b/man/lispref/menus.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1997 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1997 Free Software Foundation, Inc. @c Copyright (C) 1995 Sun Microsystems. @c See the file lispref.texi for copying conditions. @setfilename ../../info/menu.info @@ -366,7 +366,7 @@ also specifies a particular item to be modified. For example, top-level ``File'' menu. @code{("Menu" "Foo" "Item")} means the menu item called ``Item'' under the ``Foo'' submenu of ``Menu''. -@defun add-submenu menu-path submenu &optional before +@defun add-submenu menu-path submenu &optional before in-menu This function adds a menu to the menubar or one of its submenus. If the named menu exists already, it is changed. @@ -379,9 +379,12 @@ to the menubar itself. @var{before}, if provided, is the name of a menu before which this menu should be added, if this menu is not on its parent already. If the menu is already present, it will not be moved. + +If @var{in-menu} is present use that instead of @code{current-menubar} +as the menu to change. @end defun -@defun add-menu-button menu-path menu-leaf &optional before +@defun add-menu-button menu-path menu-leaf &optional before in-menu This function adds a menu item to some menu, creating the menu first if necessary. If the named item exists already, it is changed. @@ -393,11 +396,17 @@ be inserted. @var{before}, if provided, is the name of a menu before which this item should be added, if this item is not on the menu already. If the item is already present, it will not be moved. + +If @var{in-menu} is present use that instead of @code{current-menubar} +as the menu to change. @end defun -@defun delete-menu-item menu-item-path +@defun delete-menu-item menu-item-path &optional from-menu This function removes the menu item specified by @var{menu-item-path} from the menu hierarchy. + +If @var{from-menu} is present use that instead of @code{current-menubar} +as the menu to change. @end defun @defun enable-menu-item menu-item-path @@ -526,10 +535,10 @@ more information. @section Pop-Up Menus @cindex pop-up menu -@defun popup-menu menu-desc -This function pops up a menu specified by @var{menu-desc}, which is a -menu description (@pxref{Menu Format}). The menu is displayed at the -current mouse position. +@defun popup-menu menu-description &optional event +This function pops up a menu specified by @var{menu-description}, which +is a menu description (@pxref{Menu Format}). The menu is displayed at +the current mouse position. @end defun @defun popup-menu-up-p @@ -579,14 +588,15 @@ run. The following convenience functions are provided for displaying pop-up menus. -@defun popup-buffer-menu event +@deffn Command popup-buffer-menu event This function pops up a copy of the @samp{Buffers} menu (from the menubar) -where the mouse is clicked. -@end defun +where the mouse is clicked. It should be bound to a mouse button event. +@end deffn -@defun popup-menubar-menu event +@deffn Command popup-menubar-menu event This function pops up a copy of menu that also appears in the menubar. -@end defun +It should be bound to a mouse button event. +@end deffn @node Menu Accelerators @section Menu Accelerators @@ -651,10 +661,10 @@ for more information about how to modify the menu traversal keys. @node Menu Accelerator Functions @subsection Menu Accelerator Functions -@defun accelerate-menu +@deffn Command accelerate-menu Make the menubar immediately active and place the cursor on the left most entry in the top level menu. Menu items can be selected as usual. -@end defun +@end deffn @defvar menu-accelerator-enabled Whether menu accelerator keys can cause the menubar to become active. diff --git a/man/lispref/minibuf.texi b/man/lispref/minibuf.texi index ac8b10d..d897a0e 100644 --- a/man/lispref/minibuf.texi +++ b/man/lispref/minibuf.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/minibuf.info @node Minibuffers, Command Loop, Read and Print, Top @@ -95,7 +95,7 @@ string; however, if @var{read} is non-@code{nil}, then it uses @code{read} to convert the text into a Lisp object (@pxref{Input Functions}). -The first thing this function does is to activate a minibuffer and +The first thing this function does is to activate a minibuffer and display it with @var{prompt-string} as the prompt. This value must be a string. @@ -156,9 +156,9 @@ arguments @var{prompt} and @var{initial} are used as in @code{read-from-minibuffer}. The keymap used is @code{minibuffer-local-map}. -The optional argument @var{history}, if non-nil, specifies a history +The optional argument @var{history}, if non-@code{nil}, specifies a history list and optionally the initial position in the list. The optional -argument @var{default} specifies a default value to return if the user +argument @var{default-value} specifies a default value to return if the user enters null input; it should be a string. This function is a simplified interface to the @@ -213,7 +213,7 @@ This function reads a Lisp object using the minibuffer, and returns it without evaluating it. The arguments @var{prompt} and @var{initial} are used as in @code{read-from-minibuffer}. -The optional argument @var{history}, if non-nil, specifies a history +The optional argument @var{history}, if non-@code{nil}, specifies a history list and optionally the initial position in the list. The optional argument @var{default-value} specifies a default value to return if the user enters null input; it should be a string. @@ -264,7 +264,7 @@ This function reads a Lisp expression using the minibuffer, evaluates it, then returns the result. The arguments @var{prompt} and @var{initial} are used as in @code{read-from-minibuffer}. -The optional argument @var{history}, if non-nil, specifies a history +The optional argument @var{history}, if non-@code{nil}, specifies a history list and optionally the initial position in the list. The optional argument @var{default-value} specifies a default value to return if the user enters null input; it should be a string. @@ -281,10 +281,10 @@ This function simply evaluates the result of a call to @end smallexample @end defun -@defun edit-and-eval-command prompt command &optional history +@defun edit-and-eval-command prompt form &optional history This function reads a Lisp expression in the minibuffer, and then evaluates it. The difference between this command and -@code{eval-minibuffer} is that here the initial @var{command} is not +@code{eval-minibuffer} is that here the initial @var{form} is not optional and it is treated as a Lisp object to be converted to printed representation rather than as a string of text. It is printed with @code{prin1}, so if it is a string, double-quote characters (@samp{"}) @@ -304,7 +304,7 @@ text which is a valid form already: @group (edit-and-eval-command "Please edit: " '(forward-word 1)) -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following appears in the minibuffer:} @end group @@ -456,7 +456,7 @@ this chapter so as to keep them near the higher-level completion features that do use the minibuffer. @defun try-completion string collection &optional predicate -This function returns the longest common substring of all possible +This function returns the longest common prefix of all possible completions of @var{string} in @var{collection}. The value of @var{collection} must be an alist, an obarray, or a function that implements a virtual set of strings (see below). @@ -506,7 +506,7 @@ is @code{t}. @smallexample @group -(try-completion +(try-completion "foo" '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))) @result{} "fooba" @@ -536,44 +536,40 @@ too short). Both of those begin with the string @samp{foobar}. @smallexample @group -(defun test (s) +(defun test (s) (> (length (car s)) 6)) @result{} test @end group @group -(try-completion +(try-completion "foo" - '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)) + '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)) 'test) @result{} "foobar" @end group @end smallexample @end defun -@defun all-completions string collection &optional predicate nospace -This function returns a list of all possible completions of -@var{string}. The arguments to this function are the same as those of -@code{try-completion}. +@defun all-completions string collection &optional predicate +This function returns a list of all possible completions of @var{string}. +The arguments to this function are the same as those of @code{try-completion}. If @var{collection} is a function, it is called with three arguments: @var{string}, @var{predicate} and @code{t}; then @code{all-completions} returns whatever the function returns. @xref{Programmed Completion}. -If @var{nospace} is non-@code{nil}, completions that start with a space -are ignored unless @var{string} also starts with a space. - Here is an example, using the function @code{test} shown in the example for @code{try-completion}: @smallexample @group -(defun test (s) +(defun test (s) (> (length (car s)) 6)) @result{} test @end group @group -(all-completions +(all-completions "foo" '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)) 'test) @@ -583,7 +579,7 @@ example for @code{try-completion}: @end defun @defvar completion-ignore-case -If the value of this variable is +If the value of this variable is non-@code{nil}, XEmacs does not consider case significant in completion. @end defvar @@ -649,7 +645,7 @@ Here's an example of using @code{completing-read}: @end group @group -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following appears in the minibuffer:} ---------- Buffer: Minibuffer ---------- @@ -834,7 +830,7 @@ only buffer name starting with the given input is @example (read-buffer "Buffer name? " "foo" t) @group -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following prompt appears,} ;; @r{with an empty minibuffer:} @end group @@ -869,13 +865,13 @@ enters null input, the return value is @code{nil}. (read-command "Command name? ") @group -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following prompt appears with an empty minibuffer:} @end group @group ----------- Buffer: Minibuffer ---------- -Command name? +---------- Buffer: Minibuffer ---------- +Command name? ---------- Buffer: Minibuffer ---------- @end group @end example @@ -894,7 +890,7 @@ as to complete in the set of extant Lisp symbols, and it uses the @group (read-command @var{prompt}) @equiv{} -(intern (completing-read @var{prompt} obarray +(intern (completing-read @var{prompt} obarray 'commandp t nil)) @end group @end example @@ -906,7 +902,7 @@ symbol. The argument @var{default-value} specifies what to return if the user enters null input. It can be a symbol or a string; if it is a string, -@code{read-variable} interns it before returning it. If @var{default} +@code{read-variable} interns it before returning it. If @var{default-value} is @code{nil}, that means no default has been specified; then if the user enters null input, the return value is @code{nil}. @@ -914,8 +910,8 @@ user enters null input, the return value is @code{nil}. @group (read-variable "Variable name? ") -;; @r{After evaluation of the preceding expression,} -;; @r{the following prompt appears,} +;; @r{After evaluation of the preceding expression,} +;; @r{the following prompt appears,} ;; @r{with an empty minibuffer:} @end group @@ -980,13 +976,13 @@ case, point goes at the beginning of @var{initial}. The default for @var{initial} is @code{nil}---don't insert any file name. To see what @var{initial} does, try the command @kbd{C-x C-v}. -Here is an example: +Here is an example: @example @group (read-file-name "The file is ") -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following appears in the minibuffer:} @end group @@ -1172,13 +1168,13 @@ invalid. At the next prompt the user types @kbd{y}. @group (y-or-n-p "Do you need a lift? ") -;; @r{After evaluation of the preceding expression,} +;; @r{After evaluation of the preceding expression,} ;; @r{the following prompt appears in the echo area:} @end group @group ---------- Echo area ---------- -Do you need a lift? (y or n) +Do you need a lift? (y or n) ---------- Echo area ---------- @end group @@ -1186,7 +1182,7 @@ Do you need a lift? (y or n) @group ---------- Echo area ---------- -Please answer y or n. Do you need a lift? (y or n) +Please answer y or n. Do you need a lift? (y or n) ---------- Echo area ---------- @end group @@ -1225,14 +1221,14 @@ Here is an example: @group (yes-or-no-p "Do you really want to remove everything? ") -;; @r{After evaluation of the preceding expression,} -;; @r{the following prompt appears,} +;; @r{After evaluation of the preceding expression,} +;; @r{the following prompt appears,} ;; @r{with an empty minibuffer:} @end group @group ---------- Buffer: minibuffer ---------- -Do you really want to remove everything? (yes or no) +Do you really want to remove everything? (yes or no) ---------- Buffer: minibuffer ---------- @end group @end smallexample @@ -1390,13 +1386,13 @@ and inserted in the minibuffer. If @var{default} is @code{nil}, then @end defun @defopt passwd-invert-frame-when-keyboard-grabbed -If non-nil swap the foreground and background colors of all faces while -reading a password. Default values is @code{t} unless feature +If non-@code{nil}, swap the foreground and background colors of all faces while +reading a password. Default values is @code{t}, unless feature @code{infodock} is provided. @end defopt @defopt passwd-echo -This specifies the character echoed when typing a password. When nil, +This specifies the character echoed when typing a password. When @code{nil}, nothing is echoed. @end defopt @@ -1478,7 +1474,7 @@ other frame's minibuffer window. @end defun @c Emacs 19 feature -@defun window-minibuffer-p window +@defun window-minibuffer-p &optional window This function returns non-@code{nil} if @var{window} is a minibuffer window. @end defun @@ -1515,7 +1511,7 @@ minibuffer. The outer-level minibuffer is invisible while you are editing the inner one. This variable only affects invoking the minibuffer while the -minibuffer window is selected. If you switch windows while in the +minibuffer window is selected. If you switch windows while in the minibuffer, you can always invoke minibuffer commands while some other window is selected. @end defopt diff --git a/man/lispref/modes.texi b/man/lispref/modes.texi index d338082..5db9648 100644 --- a/man/lispref/modes.texi +++ b/man/lispref/modes.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/modes.info @node Modes, Documentation, Drag and Drop, Top @@ -79,7 +79,7 @@ Fundamental mode. Rmail mode is a complicated and specialized mode. * Example Major Modes:: Text mode and Lisp modes. * Auto Major Mode:: How XEmacs chooses the major mode automatically. * Mode Help:: Finding out how to use a mode. -* Derived Modes:: Defining a new major mode based on another major +* Derived Modes:: Defining a new major mode based on another major mode. @end menu @@ -249,7 +249,7 @@ the conventions listed above: @smallexample @group ;; @r{Create mode-specific tables.} -(defvar text-mode-syntax-table nil +(defvar text-mode-syntax-table nil "Syntax table used while in text mode.") @end group @@ -285,7 +285,7 @@ the conventions listed above: @smallexample @group (defun text-mode () - "Major mode for editing text intended for humans to read. + "Major mode for editing text intended for humans to read. Special commands: \\@{text-mode-map@} @end group @group @@ -315,7 +315,7 @@ correspondingly more complicated. Here are excerpts from @smallexample @group ;; @r{Create mode-specific table variables.} -(defvar lisp-mode-syntax-table nil "") +(defvar lisp-mode-syntax-table nil "") (defvar emacs-lisp-mode-syntax-table nil "") (defvar lisp-mode-abbrev-table nil "") @end group @@ -331,7 +331,7 @@ correspondingly more complicated. Here are excerpts from ;; @r{Set syntax of chars up to 0 to class of chars that are} ;; @r{part of symbol names but not words.} ;; @r{(The number 0 is @code{48} in the @sc{ascii} character set.)} - (while (< i ?0) + (while (< i ?0) (modify-syntax-entry i "_ " emacs-lisp-mode-syntax-table) (setq i (1+ i))) @dots{} @@ -432,7 +432,7 @@ set up. This lets the user customize the keymap. @smallexample @group -(defvar emacs-lisp-mode-map () "") +(defvar emacs-lisp-mode-map () "") (if emacs-lisp-mode-map () (setq emacs-lisp-mode-map (make-sparse-keymap)) @@ -442,7 +442,7 @@ set up. This lets the user customize the keymap. @end smallexample Finally, here is the complete major mode function definition for -Emacs Lisp mode. +Emacs Lisp mode. @smallexample @group @@ -545,7 +545,7 @@ the @samp{mode:} local variable near the end of a file; the How Major Modes are Chosen, emacs, The XEmacs Reference Manual}. @end defun -@defopt default-major-mode +@defopt default-major-mode This variable holds the default major mode for new buffers. The standard value is @code{fundamental-mode}. @@ -593,7 +593,7 @@ For example, @end group @group ("\\.el\\'" . emacs-lisp-mode) - ("\\.c\\'" . c-mode) + ("\\.c\\'" . c-mode) ("\\.h\\'" . c-mode) @dots{}) @end group @@ -621,11 +621,11 @@ Here is an example of how to prepend several pattern pairs to @smallexample @group (setq auto-mode-alist - (append + (append ;; @r{File name starts with a dot.} - '(("/\\.[^/]*\\'" . fundamental-mode) + '(("/\\.[^/]*\\'" . fundamental-mode) ;; @r{File name has no dot.} - ("[^\\./]*\\'" . fundamental-mode) + ("[^\\./]*\\'" . fundamental-mode) ;; @r{File name ends in @samp{.C}.} ("\\.C\\'" . c++-mode)) auto-mode-alist)) @@ -697,7 +697,7 @@ This construct defines @var{variant} as a major mode command, using The new command @var{variant} is defined to call the function @var{parent}, then override certain aspects of that parent mode: -@itemize @bullet +@itemize @bullet @item The new mode has its own keymap, named @code{@var{variant}-map}. @code{define-derived-mode} initializes this map to inherit from @@ -706,25 +706,25 @@ The new mode has its own keymap, named @code{@var{variant}-map}. @item The new mode has its own syntax table, kept in the variable @code{@var{variant}-syntax-table}. -@code{define-derived-mode} initializes this variable by copying +@code{define-derived-mode} initializes this variable by copying @code{@var{parent}-syntax-table}, if it is not already set. @item The new mode has its own abbrev table, kept in the variable @code{@var{variant}-abbrev-table}. -@code{define-derived-mode} initializes this variable by copying +@code{define-derived-mode} initializes this variable by copying @code{@var{parent}-abbrev-table}, if it is not already set. @item The new mode has its own mode hook, @code{@var{variant}-hook}, which it runs in standard fashion as the very last thing that it does. -(The new mode also runs the mode hook of @var{parent} as part +(The new mode also runs the mode hook of @var{parent} as part of calling @var{parent}.) @end itemize In addition, you can specify how to override other aspects of @var{parent} with @var{body}. The command @var{variant} -evaluates the forms in @var{body} after setting up all its usual +evaluates the forms in @var{body} after setting up all its usual overrides, just before running @code{@var{variant}-hook}. The argument @var{docstring} specifies the documentation string for the @@ -1028,18 +1028,18 @@ directory. (setq modeline-format (list "" 'modeline-modified - "%b--" + "%b--" @end group (getenv "HOST") ; @r{One element is not constant.} - ":" + ":" 'default-directory " " 'global-mode-string " %[(" - 'mode-name - 'modeline-process - 'minor-mode-alist - "%n" + 'mode-name + 'modeline-process + 'minor-mode-alist + "%n" ")%]----" @group '(line-number-mode "L%l--") @@ -1120,9 +1120,9 @@ The default value of @code{minor-mode-alist} is: @group minor-mode-alist @result{} ((vc-mode vc-mode) - (abbrev-mode " Abbrev") - (overwrite-mode overwrite-mode) - (auto-fill-function " Fill") + (abbrev-mode " Abbrev") + (overwrite-mode overwrite-mode) + (auto-fill-function " Fill") (defining-kbd-macro " Def") (isearch-mode isearch-mode)) @end group @@ -1158,12 +1158,12 @@ The default value of @code{default-modeline-format} is: " " global-mode-string " %[(" - mode-name + mode-name @end group @group modeline-process - minor-mode-alist - "%n" + minor-mode-alist + "%n" ")%]----" (line-number-mode "L%l--") (-3 . "%p") @@ -1294,7 +1294,7 @@ up in the @file{.emacs} file, but Lisp programs can set them also. Most of the hooks in XEmacs are @dfn{normal hooks}. These variables contain lists of functions to be called with no arguments. The reason most hooks are normal hooks is so that you can use them in a uniform -way. You can usually tell when a hook is a normal hook, because its +way. You can usually tell when a hook is a normal hook, because its name ends in @samp{-hook}. The recommended way to add a hook function to a normal hook is by @@ -1333,7 +1333,7 @@ expression. @cindex lambda expression in hook @example @group -(add-hook 'c-mode-hook +(add-hook 'c-mode-hook (function (lambda () (setq c-indent-level 4 c-argdecl-indent 0 @@ -1358,17 +1358,17 @@ modified for a particular class of buffers only. (setq modeline-format '(modeline-modified "Emacs: %14b" - " " + " " @end group @group default-directory " " global-mode-string - "%[(" - mode-name - minor-mode-alist - "%n" - modeline-process + "%[(" + mode-name + minor-mode-alist + "%n" + modeline-process ") %]---" (-3 . "%p") "-%-"))))) @@ -1440,7 +1440,7 @@ difference. @end defun @defun make-local-hook hook -This function makes the hook variable @code{hook} local to the current +This function makes the hook variable @var{hook} local to the current buffer. When a hook variable is local, it can have local and global hook functions, and @code{run-hooks} runs all of them. diff --git a/man/lispref/mouse.texi b/man/lispref/mouse.texi index 9f9424a..495ab44 100644 --- a/man/lispref/mouse.texi +++ b/man/lispref/mouse.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/mouse.info @node Mouse @@ -27,14 +27,14 @@ is ok for mouse tracking, since it doesn't make sense for mouse tracking to change the text, and the body of @code{track-mouse} normally reads the events itself and does not do redisplay. -@defun x-contour-region window beg end -This function draws lines to make a box around the text from @var{beg} +@defun x-contour-region window start end +This function draws lines to make a box around the text from @var{start} to @var{end}, in window @var{window}. @end defun -@defun x-uncontour-region window beg end +@defun x-uncontour-region window start end This function erases the lines that would make a box around the text -from @var{beg} to @var{end}, in window @var{window}. Use it to remove +from @var{start} to @var{end}, in window @var{window}. Use it to remove a contour that you previously made by calling @code{x-contour-region}. @end defun diff --git a/man/lispref/mule.texi b/man/lispref/mule.texi index d227bcc..9483964 100644 --- a/man/lispref/mule.texi +++ b/man/lispref/mule.texi @@ -47,7 +47,7 @@ hugely variant shapes as the "same" character. Sometimes, especially where characters are extremely complicated to write, completely different shapes may be defined as the "same" character in national standards. The Taiwanese variant of Hanzi is generally the most -complicated; over the centuries, the Japanese, Koreans, and the People's +complicated; over the centuries, the Japanese, Koreans, and the People's Republic of China have adopted simplifications of the shape, but the line of descent from the original shape is recorded, and the meanings and pronunciation of different forms of the same character are @@ -399,8 +399,8 @@ properties of a charset. This function returns the name of @var{charset}. This will be a symbol. @end defun -@defun charset-doc-string charset -This function returns the doc string of @var{charset}. +@defun charset-description charset +This function returns the documentation string of @var{charset}. @end defun @defun charset-registry charset @@ -416,7 +416,7 @@ This function returns the number of characters per dimension of @var{charset}. @end defun -@defun charset-columns charset +@defun charset-width charset This function returns the number of display columns per character (in TTY mode) of @var{charset}. @end defun @@ -426,12 +426,12 @@ This function returns the display direction of @var{charset}---either @code{l2r} or @code{r2l}. @end defun -@defun charset-final charset +@defun charset-iso-final-char charset This function returns the final byte of the ISO 2022 escape sequence designating @var{charset}. @end defun -@defun charset-graphic charset +@defun charset-iso-graphic-plane charset This function returns either 0 or 1, depending on whether the position codes of characters in @var{charset} map to the left or right half of their font, respectively. @@ -520,13 +520,13 @@ This function makes a multi-byte character from @var{charset} and octets @var{arg1} and @var{arg2}. @end defun -@defun char-charset ch -This function returns the character set of char @var{ch}. +@defun char-charset character +This function returns the character set of char @var{character}. @end defun -@defun char-octet ch &optional n +@defun char-octet character &optional n This function returns the octet (i.e. position code) numbered @var{n} -(should be 0 or 1) of char @var{ch}. @var{n} defaults to 0 if omitted. +(should be 0 or 1) of char @var{character}. @var{n} defaults to 0 if omitted. @end defun @defun find-charset-region start end &optional buffer @@ -550,7 +550,7 @@ character is the result of overstriking all the characters in the string. @end defun -@defun composite-char-string ch +@defun composite-char-string character This function returns a string of the characters comprising a composite character. @end defun @@ -702,7 +702,7 @@ character set and UTF-8, for example). ISO 2022 provides for switching between character sets via escape sequences. This switching is somewhat complicated, because ISO 2022 provides for both legacy applications like Internet mail that accept -only 7 significant bits in some contexts (RFC 822 headers, for example), +only 7 significant bits in some contexts (RFC 822 headers, for example), and more modern "8-bit clean" applications. It also provides for compact and transparent representation of languages like Japanese which mix ASCII and a national script (even outside of computer programs). @@ -719,7 +719,7 @@ the control character "ASCII DEL" respectively. C1 (0x80-0x9F), and GR (0xA0-0xFF). GL and GR stand for "graphic left" and "graphic right", respectively, because of the standard method of displaying graphic character sets in tables with the high byte indexing -columns and the low byte indexing rows. I don't find it very intuitive, +columns and the low byte indexing rows. I don't find it very intuitive, but these are called "registers". An ISO 2022-conformant encoding for a graphic character set must use a @@ -890,7 +890,7 @@ bit environments. (#### Ben says: I think the above is slightly incorrect. It appears that SS2 invokes G2 into GR and SS3 invokes G3 into GR, whereas ESC N and -ESC O behave as indicated. The above definitions will not parse +ESC O behave as indicated. The above definitions will not parse EUC-encoded text correctly, and it looks like the code in mule-coding.c has similar problems.) @@ -1021,25 +1021,25 @@ End-of-line conversion to be used. It should be one of the types listed in @ref{EOL Conversion}. @item eol-lf -The coding system which is the same as this one, except that it uses the +The coding system which is the same as this one, except that it uses the Unix line-breaking convention. @item eol-crlf -The coding system which is the same as this one, except that it uses the +The coding system which is the same as this one, except that it uses the DOS line-breaking convention. @item eol-cr -The coding system which is the same as this one, except that it uses the +The coding system which is the same as this one, except that it uses the Macintosh line-breaking convention. @item post-read-conversion Function called after a file has been read in, to perform the decoding. -Called with two arguments, @var{beg} and @var{end}, denoting a region of +Called with two arguments, @var{start} and @var{end}, denoting a region of the current buffer to be decoded. @item pre-write-conversion Function called before a file is written out, to perform the encoding. -Called with two arguments, @var{beg} and @var{end}, denoting a region of +Called with two arguments, @var{start} and @var{end}, denoting a region of the current buffer to be encoded. @end table @@ -1098,7 +1098,7 @@ designation by escape sequence. If non-@code{nil}, don't use ISO6429's direction specification. @item escape-quoted -If non-nil, literal control characters that are the same as the +If non-@code{nil}, literal control characters that are the same as the beginning of a recognized ISO 2022 or ISO 6429 escape sequence (in particular, ESC (0x1B), SO (0x0E), SI (0x0F), SS2 (0x8E), SS3 (0x8F), and CSI (0x9B)) are ``quoted'' with an escape character so that they can @@ -1274,10 +1274,10 @@ This function decodes a JIS X 0208 character of Shift-JIS coding-system. The corresponding character is returned. @end defun -@defun encode-shift-jis-char ch -This function encodes a JIS X 0208 character @var{ch} to SHIFT-JIS -coding-system. The corresponding character code in SHIFT-JIS is -returned as a cons of two bytes. +@defun encode-shift-jis-char character +This function encodes a JIS X 0208 character @var{character} to +SHIFT-JIS coding-system. The corresponding character code in SHIFT-JIS +is returned as a cons of two bytes. @end defun @defun decode-big5-char code @@ -1286,8 +1286,8 @@ This function decodes a Big5 character @var{code} of BIG5 coding-system. is returned. @end defun -@defun encode-big5-char ch -This function encodes the Big5 character @var{char} to BIG5 +@defun encode-big5-char character +This function encodes the Big5 character @var{character} to BIG5 coding-system. The corresponding character code in Big5 is returned. @end defun @@ -1297,16 +1297,16 @@ coding-system. The corresponding character code in Big5 is returned. MULE initializes most of the commonly used coding systems at XEmacs's startup. A few others are initialized only when the relevant language environment is selected and support libraries are loaded. (NB: The -following list is based on XEmacs 21.2.19, the development branch at the +following list is based on XEmacs 21.2.19, the development branch at the time of writing. The list may be somewhat different for other versions. Recent versions of GNU Emacs 20 implement a few more rare coding systems; work is being done to port these to XEmacs.) - Unfortunately, there is not a consistent naming convention for character -sets, and for practical purposes coding systems often take their name + Unfortunately, there is not a consistent naming convention for character +sets, and for practical purposes coding systems often take their name from their principal character sets (ASCII, KOI8-R, Shift JIS). Others -take their names from the coding system (ISO-2022-JP, EUC-KR), and a few -from their non-text usages (internal, binary). To provide for this, and +take their names from the coding system (ISO-2022-JP, EUC-KR), and a few +from their non-text usages (internal, binary). To provide for this, and for the fact that many coding systems have several common names, an aliasing system is provided. Finally, some effort has been made to use names that are registered as MIME charsets (this is why the name @@ -1337,7 +1337,7 @@ table of coding systems.) need language usage for the ISO-8859 family. Note that although true coding system aliases have been implemented for -XEmacs 21.2, the coding system initialization has not yet been converted +XEmacs 21.2, the coding system initialization has not yet been converted as of 21.2.19. So coding systems described as aliases have the same properties as the aliased coding system, but will not be equal as Lisp objects. @@ -1671,7 +1671,7 @@ implements a virtual machine with 8 registers called @code{r0}, ..., @code{r7}, a number of control structures, and some I/O operators. Take care when using registers @code{r0} (used in implicit @dfn{set} statements) and especially @code{r7} (used internally by several -statements and operations, especially for multiple return values and I/O +statements and operations, especially for multiple return values and I/O operations). CCL is used for code conversion during process I/O and file I/O for @@ -1707,9 +1707,9 @@ executed when the input is exhausted. Both the main block and the EOF block are CCL blocks. A @dfn{CCL block} is either a CCL statement or list of CCL statements. -A @dfn{CCL statement} is either a @dfn{set statement} (either an integer +A @dfn{CCL statement} is either a @dfn{set statement} (either an integer or an @dfn{assignment}, which is a list of a register to receive the -assignment, an assignment operator, and an expression) or a @dfn{control +assignment, an assignment operator, and an expression) or a @dfn{control statement} (a list starting with a keyword, whose allowable syntax depends on the keyword). @@ -1804,7 +1804,7 @@ the form @code{(r0 = @var{integer})}. @heading I/O statements: The @dfn{read} statement takes one or more registers as arguments. It -reads one byte (a C char) from the input into each register in turn. +reads one byte (a C char) from the input into each register in turn. The @dfn{write} takes several forms. In the form @samp{(write @var{reg} ...)} it takes one or more registers as arguments and writes each in @@ -1841,7 +1841,7 @@ array, and the @code{branch} statement uses the @var{expression} as the index of the CCL block to execute. Null CCL blocks may be used as no-ops, continuing execution with the statement following the @code{branch} statement in the containing CCL block. Out-of-range -values for the @var{EXPRESSION} are also treated as no-ops. +values for the @var{expression} are also treated as no-ops. The @dfn{read-branch} variant of the @dfn{branch} statement takes an @var{register}, a @var{CCL block}, and an optional @var{second CCL @@ -1852,19 +1852,19 @@ block just as the @code{branch} statement does. @heading Loop control statements: The @dfn{loop} statement creates a block with an implied jump from the -end of the block back to its head. The loop is exited on a @code{break} +end of the block back to its head. The loop is exited on a @code{break} statement, and continued without executing the tail by a @code{repeat} statement. The @dfn{break} statement, written @samp{(break)}, terminates the current loop and continues with the next statement in the current -block. +block. The @dfn{repeat} statement has three variants, @code{repeat}, @code{write-repeat}, and @code{write-read-repeat}. Each continues the current loop from its head, possibly after performing I/O. @code{repeat} takes no arguments and does no I/O before jumping. -@code{write-repeat} takes a single argument (a register, an +@code{write-repeat} takes a single argument (a register, an integer, or a string), writes it to the output, then jumps. @code{write-read-repeat} takes one or two arguments. The first must be a register. The second may be an integer or an array; if absent, it @@ -1950,7 +1950,7 @@ other CCL programs, and from Lisp using these functions: @defun ccl-execute ccl-program status Execute @var{ccl-program} with registers initialized by @var{status}. @var{ccl-program} is a vector of compiled CCL code -created by @code{ccl-compile}. It is an error for the program to try to +created by @code{ccl-compile}. It is an error for the program to try to execute a CCL I/O command. @var{status} must be a vector of nine values, specifying the initial value for the R0, R1 .. R7 registers and for the instruction counter IC. A @code{nil} value for a register @@ -1958,10 +1958,10 @@ initializer causes the register to be set to 0. A @code{nil} value for the IC initializer causes execution to start at the beginning of the program. When the program is done, @var{status} is modified (by side-effect) to contain the ending values for the corresponding -registers and IC. +registers and IC. @end defun -@defun ccl-execute-on-string ccl-program status str &optional continue +@defun ccl-execute-on-string ccl-program status string &optional continue Execute @var{ccl-program} with initial @var{status} on @var{string}. @var{ccl-program} is a vector of compiled CCL code created by @code{ccl-compile}. @var{status} must be a vector of nine @@ -1969,11 +1969,11 @@ values, specifying the initial value for the R0, R1 .. R7 registers and for the instruction counter IC. A @code{nil} value for a register initializer causes the register to be set to 0. A @code{nil} value for the IC initializer causes execution to start at the beginning of the -program. An optional fourth argument @var{continue}, if non-nil, causes +program. An optional fourth argument @var{continue}, if non-@code{nil}, causes the IC to remain on the unsatisfied read operation if the program terminates due to exhaustion of the input buffer. Otherwise the IC is set to the end -of the program. When the program is done, @var{status} is modified (by +of the program. When the program is done, @var{status} is modified (by side-effect) to contain the ending values for the corresponding registers and IC. Returns the resulting string. @end defun @@ -1982,9 +1982,9 @@ registers and IC. Returns the resulting string. registered: @defun register-ccl-program name ccl-program -Register @var{name} for CCL program @var{program} in -@code{ccl-program-table}. @var{program} should be the compiled form of -a CCL program, or nil. Return index number of the registered CCL +Register @var{name} for CCL program @var{ccl-program} in +@code{ccl-program-table}. @var{ccl-program} should be the compiled form of +a CCL program, or @code{nil}. Return index number of the registered CCL program. @end defun @@ -2034,8 +2034,8 @@ whether the character is in that category. Special Lisp functions are provided that abstract this, so you do not have to directly manipulate bit vectors. -@defun category-table-p obj -This function returns @code{t} if @var{arg} is a category table. +@defun category-table-p object +This function returns @code{t} if @var{object} is a category table. @end defun @defun category-table &optional buffer @@ -2049,24 +2049,23 @@ This function returns the standard category table. This is the one used for new buffers. @end defun -@defun copy-category-table &optional table -This function constructs a new category table and return it. It is a -copy of the @var{table}, which defaults to the standard category table. +@defun copy-category-table &optional category-table +This function returns a new category table which is a copy of +@var{category-table}, which defaults to the standard category table. @end defun -@defun set-category-table table &optional buffer -This function selects a new category table for @var{buffer}. One -argument, a category table. @var{buffer} defaults to the current buffer -if omitted. +@defun set-category-table category-table &optional buffer +This function selects @var{category-table} as the new category table for +@var{buffer}. @var{buffer} defaults to the current buffer if omitted. @end defun -@defun category-designator-p obj -This function returns @code{t} if @var{arg} is a category designator (a +@defun category-designator-p object +This function returns @code{t} if @var{object} is a category designator (a char in the range @samp{' '} to @samp{'~'}). @end defun -@defun category-table-value-p obj -This function returns @code{t} if @var{arg} is a category table value. +@defun category-table-value-p object +This function returns @code{t} if @var{object} is a category table value. Valid values are @code{nil} or a bit vector of size 95. @end defun diff --git a/man/lispref/numbers.texi b/man/lispref/numbers.texi index 241de5d..6258217 100644 --- a/man/lispref/numbers.texi +++ b/man/lispref/numbers.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/numbers.info @node Numbers, Strings and Characters, Lisp Data Types, Top @@ -37,17 +37,17 @@ they have a fixed, limited amount of precision. The range of values for an integer depends on the machine. The minimum range is @minus{}134217728 to 134217727 (28 bits; i.e., -@ifinfo +@ifinfo -2**27 @end ifinfo -@tex +@tex $-2^{27}$ @end tex -to -@ifinfo +to +@ifinfo 2**27 - 1), @end ifinfo -@tex +@tex $2^{27}-1$), @end tex but some machines may provide a wider range. Many examples in this @@ -410,8 +410,11 @@ if any argument is floating. do not check for overflow. Thus @code{(1+ 134217727)} may evaluate to @minus{}134217728, depending on your hardware. -@defun 1+ number-or-marker -This function returns @var{number-or-marker} plus 1. +@defun 1+ number +This function returns @var{number} plus one. @var{number} may be a +number, character or marker. Markers and characters are converted to +integers. + For example, @example @@ -442,18 +445,23 @@ more convenient and natural way to increment a variable is @w{@code{(incf foo)}}. @end defun -@defun 1- number-or-marker -This function returns @var{number-or-marker} minus 1. +@defun 1- number +This function returns @var{number} minus one. @var{number} may be a +number, character or marker. Markers and characters are converted to +integers. @end defun @defun abs number This returns the absolute value of @var{number}. @end defun -@defun + &rest numbers-or-markers +@defun + &rest numbers This function adds its arguments together. When given no arguments, @code{+} returns 0. +If any of the arguments are characters or markers, they are first +converted to integers. + @example (+) @result{} 0 @@ -464,12 +472,15 @@ This function adds its arguments together. When given no arguments, @end example @end defun -@defun - &optional number-or-marker &rest other-numbers-or-markers +@defun - &optional number &rest other-numbers The @code{-} function serves two purposes: negation and subtraction. When @code{-} has a single argument, the value is the negative of the argument. When there are multiple arguments, @code{-} subtracts each of -the @var{other-numbers-or-markers} from @var{number-or-marker}, -cumulatively. If there are no arguments, the result is 0. +the @var{other-numbers} from @var{number}, cumulatively. If there are +no arguments, an error is signaled. + +If any of the arguments are characters or markers, they are first +converted to integers. @example (- 10 1 2 3 4) @@ -481,10 +492,13 @@ cumulatively. If there are no arguments, the result is 0. @end example @end defun -@defun * &rest numbers-or-markers +@defun * &rest numbers This function multiplies its arguments together, and returns the product. When given no arguments, @code{*} returns 1. +If any of the arguments are characters or markers, they are first +converted to integers. + @example (*) @result{} 1 @@ -495,13 +509,14 @@ product. When given no arguments, @code{*} returns 1. @end example @end defun -@defun / dividend divisor &rest divisors -This function divides @var{dividend} by @var{divisor} and returns the -quotient. If there are additional arguments @var{divisors}, then it -divides @var{dividend} by each divisor in turn. Each argument may be a -number or a marker. +@defun / dividend &rest divisors +The @code{/} function serves two purposes: inversion and division. When +@code{/} has a single argument, the value is the inverse of the +argument. When there are multiple arguments, @code{/} divides +@var{dividend} by each of the @var{divisors}, cumulatively, returning +the quotient. If there are no arguments, an error is signaled. -If all the arguments are integers, then the result is an integer too. +If none of the arguments are floats, then the result is an integer. This means the result has to be rounded. On most machines, the result is rounded towards zero after each division, but some machines may round differently with negative arguments. This is because the Lisp function @@ -509,6 +524,9 @@ differently with negative arguments. This is because the Lisp function permits machine-dependent rounding. As a practical matter, all known machines round in the standard fashion. +If any of the arguments are characters or markers, they are first +converted to integers. + @cindex @code{arith-error} in division If you divide by 0, an @code{arith-error} error is signaled. (@xref{Errors}.) @@ -522,6 +540,8 @@ If you divide by 0, an @code{arith-error} error is signaled. @result{} 2 (/ 25 3 2) @result{} 4 +(/ 3.0) + @result{} 0.3333333333333333 (/ -17 6) @result{} -2 @end example @@ -627,23 +647,23 @@ nearest integer below; @code{fceiling}, the nearest integer above; @code{ftruncate}, the nearest integer in the direction towards zero; @code{fround}, the nearest integer. -@defun ffloor float -This function rounds @var{float} to the next lower integral value, and +@defun ffloor number +This function rounds @var{number} to the next lower integral value, and returns that value as a floating point number. @end defun -@defun fceiling float -This function rounds @var{float} to the next higher integral value, and +@defun fceiling number +This function rounds @var{number} to the next higher integral value, and returns that value as a floating point number. @end defun -@defun ftruncate float -This function rounds @var{float} towards zero to an integral value, and +@defun ftruncate number +This function rounds @var{number} towards zero to an integral value, and returns that value as a floating point number. @end defun -@defun fround float -This function rounds @var{float} to the nearest integral value, +@defun fround number +This function rounds @var{number} to the nearest integral value, and returns that value as a floating point number. @end defun @@ -698,7 +718,7 @@ like this (with 8-bit binary numbers): (lsh 3 2) @result{} 12 ;; @r{Decimal 3 becomes decimal 12.} -00000011 @result{} 00001100 +00000011 @result{} 00001100 @end group @end example @@ -709,14 +729,14 @@ On the other hand, shifting one place to the right looks like this: (lsh 6 -1) @result{} 3 ;; @r{Decimal 6 becomes decimal 3.} -00000110 @result{} 00000011 +00000110 @result{} 00000011 @end group @group (lsh 5 -1) @result{} 2 ;; @r{Decimal 5 becomes decimal 2.} -00000101 @result{} 00000010 +00000101 @result{} 00000010 @end group @end example @@ -739,7 +759,7 @@ In binary, in the 28-bit implementation, the argument looks like this: @example @group ;; @r{Decimal 134,217,727} -0111 1111 1111 1111 1111 1111 1111 +0111 1111 1111 1111 1111 1111 1111 @end group @end example @@ -749,7 +769,7 @@ which becomes the following when left shifted: @example @group ;; @r{Decimal @minus{}2} -1111 1111 1111 1111 1111 1111 1110 +1111 1111 1111 1111 1111 1111 1110 @end group @end example @end defun @@ -770,10 +790,10 @@ looks like this: @example @group -(ash -6 -1) @result{} -3 +(ash -6 -1) @result{} -3 ;; @r{Decimal @minus{}6 becomes decimal @minus{}3.} 1111 1111 1111 1111 1111 1111 1010 - @result{} + @result{} 1111 1111 1111 1111 1111 1111 1101 @end group @end example @@ -786,7 +806,7 @@ In contrast, shifting the pattern of bits one place to the right with (lsh -6 -1) @result{} 134217725 ;; @r{Decimal @minus{}6 becomes decimal 134,217,725.} 1111 1111 1111 1111 1111 1111 1010 - @result{} + @result{} 0111 1111 1111 1111 1111 1111 1101 @end group @end example @@ -944,7 +964,7 @@ bit is one in the result if, and only if, the @var{n}th bit is zero in @var{integer}, and vice-versa. @example -(lognot 5) +(lognot 5) @result{} -6 ;; 5 = @r{0000 0000 0000 0000 0000 0000 0101} ;; @r{becomes} @@ -961,71 +981,60 @@ These mathematical functions are available if floating point is supported (which is the normal state of affairs). They allow integers as well as floating point numbers as arguments. -@defun sin arg -@defunx cos arg -@defunx tan arg +@defun sin number +@defunx cos number +@defunx tan number These are the ordinary trigonometric functions, with argument measured in radians. @end defun -@defun asin arg -The value of @code{(asin @var{arg})} is a number between @minus{}pi/2 -and pi/2 (inclusive) whose sine is @var{arg}; if, however, @var{arg} +@defun asin number +The value of @code{(asin @var{number})} is a number between @minus{}pi/2 +and pi/2 (inclusive) whose sine is @var{number}; if, however, @var{number} is out of range (outside [-1, 1]), then the result is a NaN. @end defun -@defun acos arg -The value of @code{(acos @var{arg})} is a number between 0 and pi -(inclusive) whose cosine is @var{arg}; if, however, @var{arg} +@defun acos number +The value of @code{(acos @var{number})} is a number between 0 and pi +(inclusive) whose cosine is @var{number}; if, however, @var{number} is out of range (outside [-1, 1]), then the result is a NaN. @end defun -@defun atan arg -The value of @code{(atan @var{arg})} is a number between @minus{}pi/2 -and pi/2 (exclusive) whose tangent is @var{arg}. +@defun atan number &optional number2 +The value of @code{(atan @var{number})} is a number between @minus{}pi/2 +and pi/2 (exclusive) whose tangent is @var{number}. + +If optional argument @var{number2} is supplied, the function returns +@code{atan2(@var{number},@var{number2})}. @end defun -@defun sinh arg -@defunx cosh arg -@defunx tanh arg +@defun sinh number +@defunx cosh number +@defunx tanh number These are the ordinary hyperbolic trigonometric functions. @end defun -@defun asinh arg -@defunx acosh arg -@defunx atanh arg +@defun asinh number +@defunx acosh number +@defunx atanh number These are the inverse hyperbolic trigonometric functions. @end defun -@defun exp arg +@defun exp number This is the exponential function; it returns @i{e} to the power -@var{arg}. @i{e} is a fundamental mathematical constant also called the +@var{number}. @i{e} is a fundamental mathematical constant also called the base of natural logarithms. @end defun -@defun log arg &optional base -This function returns the logarithm of @var{arg}, with base @var{base}. -If you don't specify @var{base}, the base @var{e} is used. If @var{arg} +@defun log number &optional base +This function returns the logarithm of @var{number}, with base @var{base}. +If you don't specify @var{base}, the base @var{e} is used. If @var{number} is negative, the result is a NaN. @end defun -@ignore -@defun expm1 arg -This function returns @code{(1- (exp @var{arg}))}, but it is more -accurate than that when @var{arg} is negative and @code{(exp @var{arg})} -is close to 1. -@end defun - -@defun log1p arg -This function returns @code{(log (1+ @var{arg}))}, but it is more -accurate than that when @var{arg} is so small that adding 1 to it would -lose accuracy. -@end defun -@end ignore - -@defun log10 arg -This function returns the logarithm of @var{arg}, with base 10. If -@var{arg} is negative, the result is a NaN. @code{(log10 @var{x})} +@defun log10 number +This function returns the logarithm of @var{number}, with base 10. If +@var{number} is negative, the result is a NaN. @code{(log10 @var{x})} @equiv{} @code{(log @var{x} 10)}, at least approximately. @end defun @@ -1036,13 +1045,13 @@ integer; in this case, it is truncated to fit the range of possible integer values. @end defun -@defun sqrt arg -This returns the square root of @var{arg}. If @var{arg} is negative, +@defun sqrt number +This returns the square root of @var{number}. If @var{number} is negative, the value is a NaN. @end defun -@defun cube-root arg -This returns the cube root of @var{arg}. +@defun cube-root number +This returns the cube root of @var{number}. @end defun @node Random Numbers diff --git a/man/lispref/objects.texi b/man/lispref/objects.texi index 320c41e..e14d9f9 100644 --- a/man/lispref/objects.texi +++ b/man/lispref/objects.texi @@ -1081,11 +1081,11 @@ where @var{property-data} consists of zero or more elements, in groups of three as follows: @example -@var{beg} @var{end} @var{plist} +@var{start} @var{end} @var{plist} @end example @noindent -The elements @var{beg} and @var{end} are integers, and together specify +The elements @var{start} and @var{end} are integers, and together specify a range of indices in the string; @var{plist} is the property list for that range. @end ignore @@ -2255,7 +2255,7 @@ to @code{old-eq} when executed under XEmacs 20. @end defun -@defun old-eq obj1 obj2 +@defun old-eq object1 object2 This function exists under XEmacs 20 and is exactly like @code{eq} except that it suffers from the char-int confoundance disease. In other words, it returns @code{t} if given a character and the diff --git a/man/lispref/os.texi b/man/lispref/os.texi index afe40ac..67d1ff3 100644 --- a/man/lispref/os.texi +++ b/man/lispref/os.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/os.info @node System Interface, X-Windows, Processes, Top @@ -77,13 +77,13 @@ It loads the library @file{site-start}, unless the option @file{site-start.el}. @cindex @file{site-start.el} -@item +@item It loads the file @file{~/.emacs} unless @samp{-q} was specified on the command line. (This is not done in @samp{-batch} mode.) The @samp{-u} option can specify the user name whose home directory should be used instead of @file{~}. -@item +@item It loads the library @file{default} unless @code{inhibit-default-init} is non-@code{nil}. (This is not done in @samp{-batch} mode or if @samp{-q} was specified on the command line.) The library's file name @@ -98,7 +98,7 @@ It sets the major mode according to @code{initial-major-mode}, provided the buffer @samp{*scratch*} is still current and still in Fundamental mode. -@item +@item It loads the terminal-specific Lisp file, if any, except when in batch mode or using a window system. @@ -106,10 +106,10 @@ mode or using a window system. It displays the initial echo area message, unless you have suppressed that with @code{inhibit-startup-echo-area-message}. -@item +@item It processes the action arguments from the command line. -@item +@item It runs @code{term-setup-hook}. @item @@ -117,10 +117,10 @@ It calls @code{frame-notice-user-settings}, which modifies the parameters of the selected frame according to whatever the init files specify. -@item +@item It runs @code{window-setup-hook}. @xref{Terminal-Specific}. -@item +@item It displays copyleft, nonwarranty, and basic use information, provided there were no remaining command line arguments (a few steps above) and the value of @code{inhibit-startup-message} is @code{nil}. @@ -272,7 +272,7 @@ terminal-initialization file. To do this, put the following in your @file{.emacs} file: @code{(setq term-file-prefix nil)}. @end defvar -@defvar term-setup-hook +@defvar term-setup-hook This variable is a normal hook that XEmacs runs after loading your @file{.emacs} file, the default initialization file (if any) and the terminal-specific Lisp file. @@ -346,7 +346,7 @@ form: -@var{option} @end example -The elements of the @code{command-switch-alist} look like this: +The elements of the @code{command-switch-alist} look like this: @example (@var{option} . @var{handler-function}) @@ -416,7 +416,7 @@ common. parent process normally resumes control. The low-level primitive for killing XEmacs is @code{kill-emacs}. -@defun kill-emacs &optional exit-data +@deffn Command kill-emacs &optional exit-data This function exits the XEmacs process and kills it. If @var{exit-data} is an integer, then it is used as the exit status @@ -426,7 +426,7 @@ of the XEmacs process. (This is useful primarily in batch operation; see If @var{exit-data} is a string, its contents are stuffed into the terminal input buffer so that the shell (or whatever program next reads input) can read them. -@end defun +@end deffn All the information in the XEmacs process, aside from files that have been saved, is lost when the XEmacs is killed. Because killing XEmacs @@ -470,15 +470,15 @@ case you can give input to some other job such as a shell merely by moving to a different window. Therefore, suspending is not allowed when XEmacs is an X client. -@defun suspend-emacs string +@deffn Command suspend-emacs &optional stuffstring This function stops XEmacs and returns control to the superior process. If and when the superior process resumes XEmacs, @code{suspend-emacs} returns @code{nil} to its caller in Lisp. -If @var{string} is non-@code{nil}, its characters are sent to be read -as terminal input by XEmacs's superior shell. The characters in -@var{string} are not echoed by the superior shell; only the results -appear. +If optional arg @var{stuffstring} is non-@code{nil}, its characters are +sent to be read as terminal input by XEmacs's superior shell. The +characters in @var{stuffstring} are not echoed by the superior shell; +only the results appear. Before suspending, @code{suspend-emacs} runs the normal hook @code{suspend-hook}. In Emacs version 18, @code{suspend-hook} was not a @@ -538,7 +538,7 @@ lewis@@slug[24] % fg Resumed! @end group @end smallexample -@end defun +@end deffn @defvar suspend-hook This variable is a normal hook run before suspending. @@ -597,9 +597,6 @@ UniSoft UniPlus. @item usg-unix-v AT&T System V. -@item vax-vms -VAX VMS. - @item windows-nt Microsoft windows NT. @@ -645,12 +642,14 @@ done when XEmacs starts up, the value actually used is the one saved when XEmacs was dumped. @xref{Building XEmacs}.) @end defvar -@defun getenv var +@deffn Command getenv var &optional interactivep @cindex environment variable access This function returns the value of the environment variable @var{var}, as a string. Within XEmacs, the environment variable values are kept in the Lisp variable @code{process-environment}. +When invoked interactively, @code{getenv} prints the value in the echo area. + @example @group (getenv "USER") @@ -668,10 +667,9 @@ SHELL=/bin/csh HOME=/user/lewis @end group @end example -@end defun +@end deffn -@c Emacs 19 feature -@deffn Command setenv variable value +@deffn Command setenv variable &optional value unset This command sets the value of the environment variable named @var{variable} to @var{value}. Both arguments should be strings. This function works by modifying @code{process-environment}; binding that @@ -680,18 +678,18 @@ variable with @code{let} is also reasonable practice. @defvar process-environment This variable is a list of strings, each describing one environment -variable. The functions @code{getenv} and @code{setenv} work by means -of this variable. +variable. The functions @code{getenv} and @code{setenv} work by +manipulating this variable. @smallexample @group process-environment @result{} ("l=/usr/stanford/lib/gnuemacs/lisp" "PATH=.:/user/lewis/bin:/usr/class:/nfsusr/local/bin" - "USER=lewis" + "USER=lewis" @end group @group - "TERM=ibmapa16" + "TERM=ibmapa16" "SHELL=/bin/csh" "HOME=/user/lewis") @end group @@ -729,7 +727,7 @@ This function returns a list of the current 1-minute, 5-minute and system load averages. (The load averages indicate the number of processes trying to run.) -When @var{use-floats} is non-@code{nil}, floats will be returned instead +When @var{use-floats} is non-@code{nil}, floats will be returned instead of integers. These floats are not multiplied by 100. @example @@ -750,7 +748,7 @@ lewis@@rocky[5] % uptime If the 5-minute or 15-minute load averages are not available, return a shortened list, containing only those averages which are available. -On some systems, this function may require special privileges to run, or +On some systems, this function may require special privileges to run, or it may be unimplemented for the particular system type. In that case, the function will signal an error. @end defun @@ -759,18 +757,6 @@ the function will signal an error. This function returns the process @sc{id} of the Emacs process. @end defun -@defun setprv privilege-name &optional setp getprv -This function sets or resets a VMS privilege. (It does not exist on -Unix.) The first arg is the privilege name, as a string. The second -argument, @var{setp}, is @code{t} or @code{nil}, indicating whether the -privilege is to be turned on or off. Its default is @code{nil}. The -function returns @code{t} if successful, @code{nil} otherwise. - - If the third argument, @var{getprv}, is non-@code{nil}, @code{setprv} -does not change the privilege, but returns @code{t} or @code{nil} -indicating whether the privilege is currently enabled. -@end defun - @node User Identification @section User Identification @@ -807,7 +793,7 @@ environment variables @code{LOGNAME} and @code{USER}. @defvar user-full-name This variable holds the name of the user running this Emacs. It is initialized at startup time from the value of @code{NAME} environment -variable. You can change the value of this variable to alter the result +variable. You can change the value of this variable to alter the result of the @code{user-full-name} function. @end defvar @@ -817,7 +803,7 @@ This function returns the full name of @var{user}. If @var{user} is the value of @code{user-full-name} variable, if non-@code{nil}, will be used. -If @var{user} is specified explicitly, @code{user-full-name} variable is +If @var{user} is specified explicitly, @code{user-full-name} variable is ignored. @example @@ -855,7 +841,7 @@ This function returns the real @sc{uid} of the user. @end defun @defun user-uid -This function returns the effective @sc{uid} of the user. +This function returns the effective @sc{uid} of the user. @end defun @defun user-home-directory @@ -1052,9 +1038,14 @@ This stands for the time zone abbreviation. @end table @end defun -@defun decode-time time +@defun decode-time &optional specified-time This function converts a time value into calendrical information. The -return value is a list of nine elements, as follows: +optional @var{specified-time} should be a list of +(@var{high} @var{low} . @var{ignored}) or (@var{high} . @var{low}), as from +@code{current-time} and @code{file-attributes}, or @code{nil} to use the +current time. + +The return value is a list of nine elements, as follows: @example (@var{seconds} @var{minutes} @var{hour} @var{day} @var{month} @var{year} @var{dow} @var{dst} @var{zone}) @@ -1117,8 +1108,8 @@ has elapsed. @var{secs} is a number of seconds, expressed as an integer or a float. @var{function} will be called after that many seconds have elapsed, with one argument, the given @var{object}. If the optional @var{resignal} argument is provided, then after this timeout expires, -`add-timeout' will automatically be called again with @var{resignal} as the -first argument. +@code{add-timeout} will automatically be called again with +@var{resignal} as the first argument. This function returns an object which is the @dfn{id} of this particular timeout. You can pass that object to @code{disable-timeout} to turn off @@ -1170,7 +1161,7 @@ functions. @cindex input modes @cindex terminal input modes -@defun set-input-mode interrupt flow meta quit-char +@defun set-input-mode interrupt flow meta &optional quit-char console This function sets the mode for reading keyboard input. If @var{interrupt} is non-null, then XEmacs uses input interrupts. If it is @code{nil}, then it uses @sc{cbreak} mode. When XEmacs communicates @@ -1203,7 +1194,7 @@ The @code{current-input-mode} function returns the input mode settings XEmacs is currently using. @c Emacs 19 feature -@defun current-input-mode +@defun current-input-mode &optional console This function returns current mode for reading keyboard input. It returns a list, corresponding to the arguments of @code{set-input-mode}, of the form @code{(@var{interrupt} @var{flow} @var{meta} @var{quit})} in @@ -1306,10 +1297,11 @@ such as @code{recent-keys} and dribble files record the characters after translation. @end defvar -@defun keyboard-translate from to +@defun keyboard-translate &rest pairs This function modifies @code{keyboard-translate-table} to translate character code @var{from} into character code @var{to}. It creates -or enlarges the translate table if necessary. +or enlarges the translate table if necessary. Multiple +@var{from}-@var{to} pairs may be specified. @end defun @end ignore @@ -1441,7 +1433,7 @@ return. By default, 100 events are stored. @end defun @defun set-recent-keys-ring-size size -This function changes the number of events stored by XEmacs and returned +This function changes the number of events stored by XEmacs and returned by @code{recent-keys}. For example, @code{(set-recent-keys-ring-size 250)} will make XEmacs @@ -1449,7 +1441,7 @@ remember last 250 events and will make @code{recent-keys} return last 250 events by default. @end defun -@deffn Command open-dribble-file filename +@deffn Command open-dribble-file filename @cindex dribble file This function opens a @dfn{dribble file} named @var{filename}. When a dribble file is open, each input event from the keyboard or mouse (but @@ -1505,10 +1497,10 @@ the proper value, but others do not. If XEmacs has the wrong value, it makes decisions that are less than optimal. To fix the problem, use @code{set-device-baud-rate}. -@defun set-device-baud-rate &optional device +@defun set-device-baud-rate device baud-rate This function sets the output speed of @var{device}. See @code{device-baud-rate}. @var{device} defaults to the selected device -(usually the only device) if omitted. +(usually the only device) if @code{nil}. @end defun @defun send-string-to-terminal char-or-string &optional stdout-p device @@ -1629,11 +1621,15 @@ terminals, this problem is gradually being cured. For the mean time, XEmacs provides a convenient way of enabling flow control if you want it: call the function @code{enable-flow-control}. -@defun enable-flow-control +@deffn Command enable-flow-control &optional argument This function enables use of @kbd{C-s} and @kbd{C-q} for output flow control, and provides the characters @kbd{C-\} and @kbd{C-^} as aliases for them using @code{keyboard-translate-table} (@pxref{Translating Input}). -@end defun + +With optional argument @var{argument} (interactively the prefix +argument), enable flow control mode if @var{argument} is positive; else +disable it. +@end deffn You can use the function @code{enable-flow-control-on} in your @file{.emacs} file to enable flow control automatically on certain diff --git a/man/lispref/positions.texi b/man/lispref/positions.texi index 1383201..85e05a7 100644 --- a/man/lispref/positions.texi +++ b/man/lispref/positions.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/positions.info @node Positions, Markers, Consoles and Devices, Top @@ -249,26 +249,26 @@ Likewise, to move to the end of the buffer, use: documented here to warn you not to use them in Lisp programs, because they set the mark and display messages in the echo area. -@deffn Command beginning-of-buffer &optional n +@deffn Command beginning-of-buffer &optional count This function moves point to the beginning of the buffer (or the limits of the accessible portion, when narrowing is in effect), setting the -mark at the previous position. If @var{n} is non-@code{nil}, then it -puts point @var{n} tenths of the way from the beginning of the buffer. +mark at the previous position. If @var{count} is non-@code{nil}, then it +puts point @var{count} tenths of the way from the beginning of the buffer. -In an interactive call, @var{n} is the numeric prefix argument, -if provided; otherwise @var{n} defaults to @code{nil}. +In an interactive call, @var{count} is the numeric prefix argument, +if provided; otherwise @var{count} defaults to @code{nil}. Don't use this function in Lisp programs! @end deffn -@deffn Command end-of-buffer &optional n +@deffn Command end-of-buffer &optional count This function moves point to the end of the buffer (or the limits of the accessible portion, when narrowing is in effect), setting the mark -at the previous position. If @var{n} is non-@code{nil}, then it puts -point @var{n} tenths of the way from the end of the buffer. +at the previous position. If @var{count} is non-@code{nil}, then it puts +point @var{count} tenths of the way from the end of the buffer. -In an interactive call, @var{n} is the numeric prefix argument, -if provided; otherwise @var{n} defaults to @code{nil}. +In an interactive call, @var{count} is the numeric prefix argument, +if provided; otherwise @var{count} defaults to @code{nil}. Don't use this function in Lisp programs! @end deffn @@ -353,7 +353,7 @@ the end of the last line, and the value will be 2. In an interactive call, @var{count} is the numeric prefix argument. @end deffn -@defun count-lines start end +@defun count-lines start end &optional ignore-invisible-lines-flag @cindex lines in region This function returns the number of lines between the positions @var{start} and @var{end} in the current buffer. If @var{start} and @@ -362,6 +362,16 @@ This function returns the number of lines between the positions because the text between them, considered in isolation, must contain at least one line unless it is empty. +With optional @var{ignore-invisible-lines-flag} non-@code{nil}, lines +collapsed with selective-display are excluded from the line count. + +@strong{Note:} The expression to return the current line number is not +obvious: + +@example +(1+ (count-lines 1 (point-at-bol))) +@end example + Here is an example of using @code{count-lines}: @example @@ -475,7 +485,7 @@ performance of your code. @xref{Text Lines, cache-long-line-scans}. This function moves point to the start of the frame line @var{count} frame lines down from the frame line containing point. If @var{count} is negative, it moves up instead. The optional second argument -@var{window} may be used to specify a window other than the +@var{window} may be used to specify a window other than the selected window in which to perform the motion. Normally, @code{vertical-motion} returns the number of lines moved. The @@ -592,7 +602,7 @@ beginning of the first screen line. @xref{Minibuffer Misc}. @end ignore @node List Motion -@subsection Moving over Balanced Expressions +@subsection Moving over Balanced Expressions @cindex sexp motion @cindex Lisp expression motion @cindex list motion @@ -612,29 +622,30 @@ quotes are ignored.) @var{arg} defaults to 1 if omitted. If @var{arg} is negative, move backward across that many groups of parentheses. @end deffn -@deffn Command backward-list &optional arg -This function moves backward across @var{arg} balanced groups of +@deffn Command backward-list &optional count +This function moves backward across @var{count} balanced groups of parentheses. (Other syntactic entities such as words or paired string -quotes are ignored.) @var{arg} defaults to 1 if omitted. If @var{arg} -is negative, move forward across that many groups of parentheses. +quotes are ignored.) @var{count} defaults to 1 if omitted. If +@var{count} is negative, move forward across that many groups of +parentheses. @end deffn -@deffn Command up-list arg -This function moves forward out of @var{arg} levels of parentheses. +@deffn Command up-list &optional count +This function moves forward out of @var{count} levels of parentheses. A negative argument means move backward but still to a less deep spot. @end deffn -@deffn Command down-list arg -This function moves forward into @var{arg} levels of parentheses. A -negative argument means move backward but still go -deeper in parentheses (@minus{}@var{arg} levels). +@deffn Command down-list &optional count +This function moves forward into @var{count} levels of parentheses. +A negative argument means move backward but still go deeper in +parentheses (@minus{}@var{count} levels). @end deffn -@deffn Command forward-sexp &optional arg -This function moves forward across @var{arg} balanced expressions. +@deffn Command forward-sexp &optional count +This function moves forward across @var{count} balanced expressions. Balanced expressions include both those delimited by parentheses and -other kinds, such as words and string constants. @var{arg} defaults to -1 if omitted. If @var{arg} is negative, move backward across that many +other kinds, such as words and string constants. @var{count} defaults to +1 if omitted. If @var{count} is negative, move backward across that many balanced expressions. For example, @example @@ -655,24 +666,24 @@ balanced expressions. For example, @end example @end deffn -@deffn Command backward-sexp &optional arg -This function moves backward across @var{arg} balanced expressions. -@var{arg} defaults to 1 if omitted. If @var{arg} is negative, move +@deffn Command backward-sexp &optional count +This function moves backward across @var{count} balanced expressions. +@var{count} defaults to 1 if omitted. If @var{count} is negative, move forward across that many balanced expressions. @end deffn -@deffn Command beginning-of-defun &optional arg -This function moves back to the @var{arg}th beginning of a defun. If -@var{arg} is negative, this actually moves forward, but it still moves -to the beginning of a defun, not to the end of one. @var{arg} defaults -to 1 if omitted. +@deffn Command beginning-of-defun &optional count +This function moves back to the @var{count}th beginning of a defun. +If @var{count} is negative, this actually moves forward, but it still +moves to the beginning of a defun, not to the end of one. @var{count} +defaults to 1 if omitted. @end deffn -@deffn Command end-of-defun &optional arg -This function moves forward to the @var{arg}th end of a defun. If -@var{arg} is negative, this actually moves backward, but it still moves -to the end of a defun, not to the beginning of one. @var{arg} defaults -to 1 if omitted. +@deffn Command end-of-defun &optional count +This function moves forward to the @var{count}th end of a defun. +If @var{count} is negative, this actually moves backward, but it still +moves to the end of a defun, not to the beginning of one. @var{count} +defaults to 1 if omitted. @end deffn @defopt defun-prompt-regexp @@ -813,9 +824,9 @@ This special form evaluates @var{forms} with @var{buffer} as the current buffer. It returns the value of the last form. @end defspec -@defspec with-temp-file file forms@dots{} +@defspec with-temp-file filename forms@dots{} This special form creates a new buffer, evaluates @var{forms} there, and -writes the buffer to @var{file}. It returns the value of the last form +writes the buffer to @var{filename}. It returns the value of the last form evaluated. @end defspec @@ -925,13 +936,13 @@ tool for the job. Here is what you must use instead: @example @group -(let ((beg (point-min-marker)) +(let ((start (point-min-marker)) (end (point-max-marker))) (unwind-protect (progn @var{body}) (save-excursion - (set-buffer (marker-buffer beg)) - (narrow-to-region beg end)))) + (set-buffer (marker-buffer start)) + (narrow-to-region start end)))) @end group @end example diff --git a/man/lispref/postgresql.texi b/man/lispref/postgresql.texi index f565f44..d22ab29 100644 --- a/man/lispref/postgresql.texi +++ b/man/lispref/postgresql.texi @@ -781,7 +781,7 @@ Returns: t if successfully submitted Retrieve an asynchronous result from a query. @var{conn} A database connection object. -NIL is returned when no more query work remains. +@code{nil} is returned when no more query work remains. @end defun @defun pq-set-nonblocking conn arg diff --git a/man/lispref/processes.texi b/man/lispref/processes.texi index f664474..d750074 100644 --- a/man/lispref/processes.texi +++ b/man/lispref/processes.texi @@ -60,7 +60,7 @@ The other two, @code{call-process} and @code{call-process-region}, create a synchronous process and do not return a process object (@pxref{Synchronous Processes}). - Synchronous and asynchronous processes are explained in following + Synchronous and asynchronous processes are explained in the following sections. Since the three functions are all called in a similar fashion, their common arguments are described here. @@ -98,6 +98,10 @@ since they are passed directly to the specified program. name of the program; it may not contain any command-line arguments. You must use @var{args} to provide those. +If you want to use features of the shell, then invoke the shell directly +using, for example, @var{program} of @code{"sh"}, and @var{args} of +@code{"-c"} and @var{"command line..."}. + The subprocess gets its current directory from the value of @code{default-directory} (@pxref{File Name Expansion}). @@ -246,13 +250,13 @@ of @code{call-process}: @end smallexample @end defun -@defun call-process-region start end program &optional delete destination display &rest args +@defun call-process-region start end program &optional deletep destination displayp &rest args This function sends the text between @var{start} to @var{end} as standard input to a process running @var{program}. It deletes the text -sent if @var{delete} is non-@code{nil}; this is useful when @var{buffer} +sent if @var{deletep} is non-@code{nil}; this is useful when @var{buffer} is @code{t}, to insert the output in the current buffer. -The arguments @var{destination} and @var{display} control what to do +The arguments @var{destination} and @var{displayp} control what to do with the output from the subprocess, and whether to update the display as it comes in. For details, see the description of @code{call-process}, above. If @var{destination} is the integer 0, @@ -406,7 +410,9 @@ etc.) to work between the process and its children whereas pipes do not. For subprocesses used for internal purposes by programs, it is often better to use a pipe, because they are more efficient. In addition, the total number of @sc{pty}s is limited on many systems and it is good not -to waste them. +to waste them. A rule of thumb is to use ptys for processes the user +interacts with directly, and pipes for processes that are hidden from +the user. The value @code{process-connection-type} is used when @code{start-process} is called. So you can specify how to communicate @@ -425,6 +431,16 @@ To determine whether a given subprocess actually got a pipe or a Information}). @end defvar +Lisp functions that manipulate processes usually accept a @var{process} +argument. Besides using an actual process object for this argument, you +can use a process name, a buffer object, the name of a buffer, or +@code{nil}. Specifying a buffer or buffer name for the @var{process} +argument means use the process associated with the buffer (or the most +recent one, if there is more than one). @code{nil} means use the +process associated with the current buffer. +@xref{Process Information}. +@xref{Process Buffers}. + @node Deleting Processes @section Deleting Processes @cindex deleting processes @@ -500,9 +516,12 @@ This function returns a list of all processes that have not been deleted. @end smallexample @end defun -@defun get-process name -This function returns the process named @var{name}, or @code{nil} if -there is none. An error is signaled if @var{name} is not a string. +@defun get-process process-name +This function returns the process named @var{process-name}. If +@var{process-name} is a string and there is no process with that name, the +value is @code{nil}. If @var{process-name} is actually a process, it is +returned as given. (That is not very useful, so the argument is usually +a name.) For example: @smallexample @group @@ -538,9 +557,9 @@ process is started and remains constant as long as the process exists. This function returns the name of @var{process}. @end defun -@defun process-status process-name -This function returns the status of @var{process-name} as a symbol. -The argument @var{process-name} must be a process, a buffer, a +@defun process-status process +This function returns the status of @var{process} as a symbol. +The argument @var{process} must be a process, a buffer, a process name (string) or a buffer name (string). The possible values for an actual subprocess are: @@ -561,7 +580,7 @@ for a network connection that is closed. Once a connection is closed, you cannot reopen it, though you might be able to open a new connection to the same place. @item nil -if @var{process-name} is not the name of an existing process. +if @var{process} does not identify an existing process. @end table @smallexample @@ -619,15 +638,21 @@ specify the process to send input to, and the input data to send. The data appears on the ``standard input'' of the subprocess. Some operating systems have limited space for buffered input in a -@sc{pty}. On these systems, Emacs sends an @sc{eof} periodically amidst -the other characters, to force them through. For most programs, -these @sc{eof}s do no harm. +@sc{pty}. On these systems, XEmacs sends long input in chunks, with +@sc{eof} characters added amidst the other characters, to force the +operating system to periodically drain the input buffer. For most +programs, these @sc{eof}s do no harm. + +@defun process-send-string process string &optional start end +This function sends @var{process} the contents of @var{string} as +standard input. -@defun process-send-string process-name string -This function sends @var{process-name} the contents of @var{string} as -standard input. The argument @var{process-name} must be a process or -the name of a process. If it is @code{nil}, the current buffer's -process is used. +The argument @var{process} may be a process or the name of a process, or +a buffer or the name of a buffer, in which case the buffer's process is +used. If it is @code{nil}, the current buffer's process is used. + +Optional arguments @var{start} and @var{end} specify part of @var{string}; +see @code{substring}. The function returns @code{nil}. @@ -650,26 +675,28 @@ introduction.txt text.texi~ @end smallexample @end defun -@deffn Command process-send-region process-name start end +@defun process-send-region process start end &optional buffer This function sends the text in the region defined by @var{start} and -@var{end} as standard input to @var{process-name}, which is a process or -a process name. (If it is @code{nil}, the current buffer's process is -used.) +@var{end} as standard input to @var{process}. + +The argument @var{process} may be a process or the name of a process, or +a buffer or the name of a buffer, in which case the buffer's process is +used. If it is @code{nil}, the current buffer's process is used. An error is signaled unless both @var{start} and @var{end} are integers or markers that indicate positions in the current buffer. (It is unimportant which number is larger.) -@end deffn +@end defun -@defun process-send-eof &optional process-name - This function makes @var{process-name} see an end-of-file in its +@defun process-send-eof &optional process + This function makes @var{process} see an end-of-file in its input. The @sc{eof} comes after any text already sent to it. - If @var{process-name} is not supplied, or if it is @code{nil}, then -this function sends the @sc{eof} to the current buffer's process. An -error is signaled if the current buffer has no process. +@var{process} may be a process, a buffer, the name of a process or +buffer, or @code{nil}, indicating the current buffer's process. An +error is signaled if @var{process} does not identify any process. - The function returns @var{process-name}. +The function returns the process object identified by @var{process}. @smallexample @group @@ -779,11 +806,11 @@ it the signal @code{SIGCONT}. This presumes that @var{process} was stopped previously. @end defun -@defun signal-process pid signal +@deffn Command signal-process pid signal This function sends a signal to the process with process id @var{pid}, which need not be a child of XEmacs. The argument @var{signal} specifies which signal to send. -@end defun +@end deffn @node Output from Processes @section Receiving Output from Processes @@ -862,10 +889,10 @@ associated with no buffer. @defun get-buffer-process buffer-or-name This function returns the process associated with @var{buffer-or-name}. -If there are several processes associated with it, then one is chosen. -(Presently, the one chosen is the one most recently created.) It is -usually a bad idea to have more than one process associated with the -same buffer. +If there are several processes associated with @var{buffer-or-name}, +then one is chosen. (Presently, the one chosen is the one most recently +created.) It is usually a bad idea to have more than one process +associated with the same buffer. @smallexample @group @@ -926,20 +953,20 @@ Here is how to do these things: @smallexample @group -(defun ordinary-insertion-filter (proc string) +(defun ordinary-insertion-filter (process string) (let ((old-buffer (current-buffer))) (unwind-protect (let (moving) - (set-buffer (process-buffer proc)) - (setq moving (= (point) (process-mark proc))) + (set-buffer (process-buffer process)) + (setq moving (= (point) (process-mark process))) @end group @group (save-excursion ;; @r{Insert the text, moving the process-marker.} - (goto-char (process-mark proc)) + (goto-char (process-mark process)) (insert string) - (set-marker (process-mark proc) (point))) - (if moving (goto-char (process-mark proc)))) + (set-marker (process-mark process) (point))) + (if moving (goto-char (process-mark process)))) (set-buffer old-buffer)))) @end group @end smallexample @@ -954,7 +981,7 @@ text arrives, insert the following line just before the @code{unwind-protect}: @smallexample -(display-buffer (process-buffer proc)) +(display-buffer (process-buffer process)) @end smallexample To force point to move to the end of the new output no matter where @@ -1032,15 +1059,15 @@ there is no filter function: @group ;; @r{Insert input in the buffer specified by @code{my-shell-buffer}} ;; @r{and make sure that buffer is shown in some window.} -(defun my-process-filter (proc str) +(defun my-process-filter (process string) (let ((cur (selected-window)) (pop-up-windows t)) (pop-to-buffer my-shell-buffer) @end group @group (goto-char (point-max)) - (insert str) - (set-marker (process-mark proc) (point-max)) + (insert string) + (set-marker (process-mark process) (point-max)) (select-window cur))) @end group @end smallexample @@ -1254,21 +1281,35 @@ function. It always returns either @code{open} or @code{closed} for a network connection, and it never returns either of those values for a real subprocess. @xref{Process Information}. -@defun open-network-stream name buffer-or-name host service +@defun open-network-stream name buffer-or-name host service &optional protocol This function opens a TCP connection for a service to a host. It returns a process object to represent the connection. +Input and output work as for other process objects. +@code{delete-process} closes the connection. + The @var{name} argument specifies the name for the process object. It is modified as necessary to make it unique. The @var{buffer-or-name} argument is the buffer to associate with the -connection. Output from the connection is inserted in the buffer, -unless you specify a filter function to handle the output. If -@var{buffer-or-name} is @code{nil}, it means that the connection is not -associated with any buffer. +connection. It can be a buffer or the name of one. Output from the +connection is inserted in the buffer, unless you specify a filter +function to handle the output. If @var{buffer-or-name} is @code{nil}, +it means that the connection is not associated with any buffer. The arguments @var{host} and @var{service} specify where to connect to; @var{host} is the host name or IP address (a string), and @var{service} is the name of a defined network service (a string) or a port number (an integer). + +Optional fifth arg @var{protocol} is the network protocol to use. +Currently only @code{tcp} (Transmission Control Protocol) and @code{udp} +(User Datagram Protocol) are supported. When omitted, @code{tcp} is assumed. + +Output via @code{process-send-string} and input via buffer or filter +(see @code{set-process-filter}) are stream-oriented. That means +UDP datagrams are not guaranteed to be sent and received in +discrete packets. (But small datagrams around 500 bytes that are not +truncated by @code{process-send-string} are usually fine.) Note further +that the UDP protocol does not guard against lost packets. @end defun diff --git a/man/lispref/range-tables.texi b/man/lispref/range-tables.texi index 900eda5..6424d49 100644 --- a/man/lispref/range-tables.texi +++ b/man/lispref/range-tables.texi @@ -36,37 +36,38 @@ Return non-@code{nil} if @var{object} is a range table. Make a new, empty range table. @end defun -@defun copy-range-table old-table -Make a new range table which contains the same values for the same -ranges as the given table. The values will not themselves be copied. +@defun copy-range-table range-table +This function returns a new range table which contains the same values +for the same ranges as @var{range-table}. The values will not +themselves be copied. @end defun @node Working With Range Tables @section Working With Range Tables -@defun get-range-table pos table &optional default -This function finds value for position @var{pos} in @var{table}. If -there is no corresponding value, return @var{default} (defaults to +@defun get-range-table pos range-table &optional default +This function finds value for position @var{pos} in @var{range-table}. +If there is no corresponding value, return @var{default} (defaults to @code{nil}). @end defun -@defun put-range-table start end val table +@defun put-range-table start end value range-table This function sets the value for range (@var{start}, @var{end}) to be -@var{val} in @var{table}. +@var{value} in @var{range-table}. @end defun -@defun remove-range-table start end table +@defun remove-range-table start end range-table This function removes the value for range (@var{start}, @var{end}) in -@var{table}. +@var{range-table}. @end defun -@defun clear-range-table table -This function flushes @var{table}. +@defun clear-range-table range-table +This function flushes @var{range-table}. @end defun -@defun map-range-table function table -This function maps @var{function} over entries in @var{table}, calling -it with three args, the beginning and end of the range and the +@defun map-range-table function range-table +This function maps @var{function} over entries in @var{range-table}, +calling it with three args, the beginning and end of the range and the corresponding value. @end defun diff --git a/man/lispref/searching.texi b/man/lispref/searching.texi index 2436514..a8ec820 100644 --- a/man/lispref/searching.texi +++ b/man/lispref/searching.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/searching.info @node Searching and Matching, Syntax Tables, Text, Top @@ -35,15 +35,14 @@ portions of it. These are the primitive functions for searching through the text in a buffer. They are meant for use in programs, but you may call them interactively. If you do so, they prompt for the search string; -@var{limit} and @var{noerror} are set to @code{nil}, and @var{repeat} +@var{limit} and @var{noerror} are set to @code{nil}, and @var{count} is set to 1. -@deffn Command search-forward string &optional limit noerror repeat +@deffn Command search-forward string &optional limit noerror count buffer This function searches forward from point for an exact match for @var{string}. If successful, it sets point to the end of the occurrence found, and returns the new value of point. If no match is found, the value and side effects depend on @var{noerror} (see below). -@c Emacs 19 feature In the following example, point is initially at the beginning of the line. Then @code{(search-forward "fox")} moves point after the last @@ -81,25 +80,26 @@ upper bound and returns @code{nil}. (It would be more consistent now to return the new position of point in that case, but some programs may depend on a value of @code{nil}.) -If @var{repeat} is supplied (it must be a positive number), then the -search is repeated that many times (each time starting at the end of the -previous time's match). If these successive searches succeed, the -function succeeds, moving point and returning its new value. Otherwise -the search fails. +If @var{count} is supplied (it must be an integer), then the search is +repeated that many times (each time starting at the end of the previous +time's match). If @var{count} is negative, the search direction is +backward. If the successive searches succeed, the function succeeds, +moving point and returning its new value. Otherwise the search fails. + +@var{buffer} is the buffer to search in, and defaults to the current buffer. @end deffn -@deffn Command search-backward string &optional limit noerror repeat +@deffn Command search-backward string &optional limit noerror count buffer This function searches backward from point for @var{string}. It is just like @code{search-forward} except that it searches backwards and leaves point at the beginning of the match. @end deffn -@deffn Command word-search-forward string &optional limit noerror repeat +@deffn Command word-search-forward string &optional limit noerror count buffer @cindex word search This function searches forward from point for a ``word'' match for @var{string}. If it finds a match, it sets point to the end of the match found, and returns the new value of point. -@c Emacs 19 feature Word matching regards @var{string} as a sequence of words, disregarding punctuation that separates them. It searches the buffer for the same @@ -140,11 +140,13 @@ returns @code{nil} instead of signaling an error. If @var{noerror} is neither @code{nil} nor @code{t}, it moves point to @var{limit} (or the end of the buffer) and returns @code{nil}. -If @var{repeat} is non-@code{nil}, then the search is repeated that many +If @var{count} is non-@code{nil}, then the search is repeated that many times. Point is positioned at the end of the last match. + +@var{buffer} is the buffer to search in, and defaults to the current buffer. @end deffn -@deffn Command word-search-backward string &optional limit noerror repeat +@deffn Command word-search-backward string &optional limit noerror count buffer This function searches backward from point for a word match to @var{string}. This function is just like @code{word-search-forward} except that it searches backward and normally leaves point at the @@ -585,7 +587,7 @@ whitespace: Here is a complicated regexp, used by XEmacs to recognize the end of a sentence together with any whitespace that follows. It is the value of -the variable @code{sentence-end}. +the variable @code{sentence-end}. First, we show the regexp as a string in Lisp syntax to distinguish spaces from tab characters. The string constant begins and ends with a @@ -604,7 +606,7 @@ will see the following: @group sentence-end @result{} -"[.?!][]\"')@}]*\\($\\| $\\| \\| \\)[ +"[.?!][]\"')@}]*\\($\\| $\\| \\| \\)[ ]*" @end group @end example @@ -655,7 +657,7 @@ Search, emacs, The XEmacs Reference Manual}. Here we describe only the search functions useful in programs. The principal one is @code{re-search-forward}. -@deffn Command re-search-forward regexp &optional limit noerror repeat +@deffn Command re-search-forward regexp &optional limit noerror count buffer This function searches forward in the current buffer for a string of text that is matched by the regular expression @var{regexp}. The function skips over any amount of text that is not matched by @@ -674,7 +676,7 @@ error is signaled. If @var{noerror} is @code{t}, @code{re-search-forward} moves point to @var{limit} (or the end of the buffer) and returns @code{nil}. -If @var{repeat} is supplied (it must be a positive number), then the +If @var{count} is supplied (it must be a positive number), then the search is repeated that many times (each time starting at the end of the previous time's match). If these successive searches succeed, the function succeeds, moving point and returning its new value. Otherwise @@ -704,7 +706,7 @@ comes back" twice. @end example @end deffn -@deffn Command re-search-backward regexp &optional limit noerror repeat +@deffn Command re-search-backward regexp &optional limit noerror count buffer This function searches backward in the current buffer for a string of text that is matched by the regular expression @var{regexp}, leaving point at the beginning of the first text found. @@ -723,12 +725,17 @@ feature for matching regexps from end to beginning. It's not worth the trouble of implementing that. @end deffn -@defun string-match regexp string &optional start +@defun string-match regexp string &optional start buffer This function returns the index of the start of the first match for the regular expression @var{regexp} in @var{string}, or @code{nil} if there is no match. If @var{start} is non-@code{nil}, the search starts at that index in @var{string}. + +Optional arg @var{buffer} controls how case folding is done (according +to the value of @code{case-fold-search} in @var{buffer} and +@var{buffer}'s case tables) and defaults to the current buffer. + For example, @example @@ -801,7 +808,7 @@ components are separated with the characters specified with be @samp{:}, while under Windows, it will be @samp{;}. @end defun -@defun looking-at regexp +@defun looking-at regexp &optional buffer This function determines whether the text in the current buffer directly following point matches the regular expression @var{regexp}. ``Directly following'' means precisely that: the search is ``anchored'' and it can @@ -846,28 +853,32 @@ functions only when you really need the longest match. In Emacs versions prior to 19.29, these functions did not exist, and the functions described above implemented full POSIX backtracking. -@defun posix-search-forward regexp &optional limit noerror repeat +@deffn Command posix-search-forward regexp &optional limit noerror count buffer This is like @code{re-search-forward} except that it performs the full backtracking specified by the POSIX standard for regular expression matching. -@end defun +@end deffn -@defun posix-search-backward regexp &optional limit noerror repeat +@deffn Command posix-search-backward regexp &optional limit noerror count buffer This is like @code{re-search-backward} except that it performs the full backtracking specified by the POSIX standard for regular expression matching. -@end defun +@end deffn -@defun posix-looking-at regexp +@defun posix-looking-at regexp &optional buffer This is like @code{looking-at} except that it performs the full backtracking specified by the POSIX standard for regular expression matching. @end defun -@defun posix-string-match regexp string &optional start +@defun posix-string-match regexp string &optional start buffer This is like @code{string-match} except that it performs the full backtracking specified by the POSIX standard for regular expression matching. + +Optional arg @var{buffer} controls how case folding is done (according +to the value of @code{case-fold-search} in @var{buffer} and +@var{buffer}'s case tables) and defaults to the current buffer. @end defun @ignore @@ -900,29 +911,29 @@ that all men are created @end deffn @deffn Command flush-lines regexp -This function is the same as @code{delete-matching-lines}. +This function is an alias of @code{delete-matching-lines}. @end deffn -@defun delete-non-matching-lines regexp +@deffn Command delete-non-matching-lines regexp This function deletes all lines following point which don't contain a match for the regular expression @var{regexp}. -@end defun +@end deffn @deffn Command keep-lines regexp This function is the same as @code{delete-non-matching-lines}. @end deffn -@deffn Command how-many regexp +@deffn Command count-matches regexp This function counts the number of matches for @var{regexp} there are in the current buffer following point. It prints this number in the echo area, returning the string printed. @end deffn -@deffn Command count-matches regexp -This function is a synonym of @code{how-many}. +@deffn Command how-many regexp +This function is an alias of @code{count-matches}. @end deffn -@deffn Command list-matching-lines regexp nlines +@deffn Command list-matching-lines regexp &optional nlines This function is a synonym of @code{occur}. Show all lines following point containing a match for @var{regexp}. Display each line with @var{nlines} lines before and after, @@ -1124,7 +1135,7 @@ positions within the text: @group (string-match "\\(qu\\)\\(ick\\)" "The quick fox jumped quickly.") - ;0123456789 + ;0123456789 @result{} 4 @end group @@ -1191,7 +1202,7 @@ character of the buffer counts as 1.) @var{replacement}. @cindex case in replacements -@defun replace-match replacement &optional fixedcase literal string +@defun replace-match replacement &optional fixedcase literal string strbuffer This function replaces the text in the buffer (or in @var{string}) that was matched by the last search. It replaces that text with @var{replacement}. @@ -1205,6 +1216,12 @@ If you did the search in a string, pass the same string as @var{string}. Then @code{replace-match} does the replacement by constructing and returning a new string. +If the fourth argument @var{string} is a string, fifth argument +@var{strbuffer} specifies the buffer to be used for syntax-table and +case-table lookup and defaults to the current buffer. When @var{string} +is not a string, the buffer that the match occurred in has automatically +been remembered and you do not need to specify it. + If @var{fixedcase} is non-@code{nil}, then the case of the replacement text is not changed; otherwise, the replacement text is converted to a different case depending upon the capitalization of the text to be @@ -1216,7 +1233,7 @@ letter, @code{replace-match} considers this a capitalized first word rather than all upper case. If @code{case-replace} is @code{nil}, then case conversion is not done, -regardless of the value of @var{fixed-case}. @xref{Searching and Case}. +regardless of the value of @var{fixedcase}. @xref{Searching and Case}. If @var{literal} is non-@code{nil}, then @var{replacement} is inserted exactly as it is, the only alterations being case changes as needed. @@ -1247,7 +1264,7 @@ Subexpressions are those expressions grouped inside @samp{\(@dots{}\)}. The functions @code{match-data} and @code{set-match-data} read or write the entire match data, all at once. -@defun match-data +@defun match-data &optional integers reuse This function returns a newly constructed list containing all the information on what text the last search matched. Element zero is the position of the beginning of the match for the whole expression; element @@ -1272,9 +1289,13 @@ corresponds to @code{(match-end @var{n})}. All the elements are markers or @code{nil} if matching was done on a buffer, and all are integers or @code{nil} if matching was done on a -string with @code{string-match}. (In Emacs 18 and earlier versions, -markers were used even for matching on a string, except in the case -of the integer 0.) +string with @code{string-match}. However, if the optional first +argument @var{integers} is non-@code{nil}, always use integers (rather +than markers) to represent buffer positions. + +If the optional second argument @var{reuse} is a list, reuse it as part +of the value. If @var{reuse} is long enough to hold all the values, and if +@var{integers} is non-@code{nil}, no new lisp objects are created. As always, there must be no possibility of intervening searches between the call to a search function and the call to @code{match-data} that is @@ -1324,10 +1345,10 @@ that shows the problem that arises if you fail to save the match data: You can save and restore the match data with @code{save-match-data}: -@defmac save-match-data body@dots{} +@defspec save-match-data body@dots{} This special form executes @var{body}, saving and restoring the match data around it. -@end defmac +@end defspec You can use @code{set-match-data} together with @code{match-data} to imitate the effect of the special form @code{save-match-data}. This is diff --git a/man/lispref/sequences.texi b/man/lispref/sequences.texi index fd7f170..43bab70 100644 --- a/man/lispref/sequences.texi +++ b/man/lispref/sequences.texi @@ -603,9 +603,9 @@ This function returns @code{t} if @var{object} is a bit vector. This function returns @code{t} if @var{object} is either 0 or 1. @end defun -@defun bit-vector &rest objects +@defun bit-vector &rest bits This function creates and returns a bit vector whose elements are the -arguments @var{objects}. The elements must be either of the two +arguments @var{bits}. Each argument must be a bit, i.e. one of the two integers 0 or 1. @example @@ -618,9 +618,10 @@ integers 0 or 1. @end example @end defun -@defun make-bit-vector length object +@defun make-bit-vector length bit This function creates and returns a bit vector consisting of -@var{length} elements, each initialized to @var{object}. +@var{length} elements, each initialized to @var{bit}, which must be +one of the two integers 0 or 1. @example @group diff --git a/man/lispref/specifiers.texi b/man/lispref/specifiers.texi index 660d251..adb36ff 100644 --- a/man/lispref/specifiers.texi +++ b/man/lispref/specifiers.texi @@ -478,7 +478,7 @@ In many circumstances, the higher-level function @code{set-specifier} is more convenient and should be used instead. @end defun -@deffn Macro let-specifier specifier-list &rest body +@defspec let-specifier specifier-list &rest body This special form temporarily adds specifications to specifiers, evaluates forms in @var{body} and restores the specifiers to their previous states. The specifiers and their temporary specifications are @@ -516,9 +516,9 @@ selected window for the duration of a second: (let-specifier ((modeline-shadow-thickness 0 (selected-window))) (sit-for 1)) @end example -@end deffn +@end defspec -@defun set-specifier specifier value &optional how-to-add +@defun set-specifier specifier value &optional locale tag-set how-to-add This function adds some specifications to @var{specifier}. @var{value} can be a single instantiator or tagged instantiator (added as a global specification), a list of tagged and/or untagged instantiators (added as @@ -527,7 +527,8 @@ and instantiator list, a list of such conses, or nearly any other reasonable form. More specifically, @var{value} can be anything accepted by @code{canonicalize-spec-list}. -@var{how-to-add} is the same as in @code{add-spec-to-specifier}. +@var{locale}, @var{tag-set}, and @var{how-to-add} are the same as in +@code{add-spec-to-specifier}. Note that @code{set-specifier} is exactly complementary to @code{specifier-specs} except in the case where @var{specifier} has no @@ -626,7 +627,7 @@ If @var{locale} is a particular locale (a window, buffer, frame, device, or the symbol @code{global}), a spec-list consisting of the specification for that locale will be returned. -If @var{locale} is a locale type (i.e. a symbol @code{window}, +If @var{locale} is a locale type (i.e. one of the symbols @code{window}, @code{buffer}, @code{frame}, or @code{device}), a spec-list of the specifications for all locales of that type will be returned. @@ -639,7 +640,7 @@ on each element of the list and the results concatenated together. Only instantiators where @var{tag-set} (a list of zero or more tags) is a subset of (or possibly equal to) the instantiator's tag set are -returned. (The default value of@code{ nil} is a subset of all tag sets, +returned. (The default value of @code{nil} is a subset of all tag sets, so in this case no instantiators will be screened out.) If @var{exact-p} is non-@code{nil}, however, @var{tag-set} must be equal to an instantiator's tag set for the instantiator to be returned. @@ -922,8 +923,8 @@ whose value can be per-buffer, per-window, per-frame, or per-device, and can further be restricted to a particular device-type or device-class. Specifiers are used, for example, for the various built-in properties of a face; this allows a face to have different values in different frames, -buffers, etc. For more information, see `specifier-instance', -`specifier-specs', and `add-spec-to-specifier'; or, for a detailed +buffers, etc. For more information, see @code{specifier-instance}, +@code{specifier-specs}, and @code{add-spec-to-specifier}; or, for a detailed description of specifiers, including how they are instantiated over a particular domain (i.e. how their value in that domain is determined), see the chapter on specifiers in the XEmacs Lisp Reference Manual. @@ -1024,7 +1025,7 @@ buffer, and @code{global}. (@code{nil} is not valid.) @end defun @defun valid-specifier-locale-type-p locale-type -Given a specifier @var{locale-type}, this function returns non-nil if it +Given a specifier @var{locale-type}, this function returns non-@code{nil} if it is valid. Valid locale types are the symbols @code{global}, @code{device}, @code{frame}, @code{window}, and @code{buffer}. (Note, however, that in functions that accept either a locale or a locale type, @@ -1101,7 +1102,7 @@ is non-@code{nil}, however, @var{tag-set} must be equal to an instantiator's tag set for the instantiator to be copied. Optional argument @var{how-to-add} specifies what to do with existing -specifications in @var{dest}. If nil, then whichever locales or locale +specifications in @var{dest}. If @code{nil}, then whichever locales or locale types are copied will first be completely erased in @var{dest}. Otherwise, it is the same as in @code{add-spec-to-specifier}. @end defun diff --git a/man/lispref/streams.texi b/man/lispref/streams.texi index 98b6494..0128d22 100644 --- a/man/lispref/streams.texi +++ b/man/lispref/streams.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/streams.info @node Read and Print, Minibuffers, Debugging, Top @@ -558,13 +558,13 @@ characters are used. @code{print} returns @var{object}. For example: (progn (print 'The\ cat\ in) (print "the hat") (print " came back")) - @print{} + @print{} @print{} The\ cat\ in - @print{} + @print{} @print{} "the hat" - @print{} + @print{} @print{} " came back" - @print{} + @print{} @result{} " came back" @end group @end example @@ -578,8 +578,8 @@ This function outputs the printed representation of @var{object} to @example @group -(progn (prin1 'The\ cat\ in) - (prin1 "the hat") +(progn (prin1 'The\ cat\ in) + (prin1 "the hat") (prin1 " came back")) @print{} The\ cat\ in"the hat"" came back" @result{} " came back" @@ -789,7 +789,7 @@ The precision in any of these cases is the number of digits following the decimal point. With @samp{f}, a precision of 0 means to omit the decimal point. 0 is not allowed with @samp{f} or @samp{g}. -A value of nil means to use @samp{%.16g}. +A value of @code{nil} means to use @samp{%.16g}. Regardless of the value of @code{float-output-format}, a floating point number will never be printed in such a way that it is ambiguous with an diff --git a/man/lispref/strings.texi b/man/lispref/strings.texi index d9d00a0..8cd793b 100644 --- a/man/lispref/strings.texi +++ b/man/lispref/strings.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/strings.info @node Strings and Characters, Lists, Numbers, Top @@ -138,13 +138,14 @@ putting strings together, or by taking them apart. Analogous functions operating on other data types include @code{list}, @code{cons} (@pxref{Building Lists}), @code{vector} (@pxref{Vectors}) -and @code{bit-vector} (@pxref{Bit Vectors}). This function has not been +and @code{bit-vector} (@pxref{Bit Vectors}). This function has not been available in XEmacs prior to 21.0 and FSF Emacs prior to 20.3. @end defun -@defun make-string count character - This function returns a string made up of @var{count} repetitions of -@var{character}. If @var{count} is negative, an error is signaled. +@defun make-string length character +This function returns a new string consisting entirely of @var{length} +successive copies of @var{character}. @var{length} must be a +non-negative integer. @example (make-string 5 ?x) @@ -179,7 +180,7 @@ position up to which the substring is copied. The character whose index is 3 is actually the fourth character in the string. A negative number counts from the end of the string, so that @minus{}1 -signifies the index of the last character of the string. For example: +signifies the index of the last character of the string. For example: @example @group @@ -312,7 +313,7 @@ This function returns @code{t} if @var{object} is an integer or character. @node Character Codes @section Character Codes -@defun char-int ch +@defun char-int character This function converts a character into an equivalent integer. The resulting integer will always be non-negative. The integers in the range 0 - 255 map to characters as follows: @@ -357,10 +358,11 @@ integer that can be converted into one. @section Comparison of Characters and Strings @cindex string equality -@defun char-equal character1 character2 +@defun char-equal character1 character2 &optional buffer This function returns @code{t} if the arguments represent the same character, @code{nil} otherwise. This function ignores differences -in case if @code{case-fold-search} is non-@code{nil}. +in case if the value of @code{case-fold-search} is non-@code{nil} in +@var{buffer}, which defaults to the current buffer. @example (char-equal ?x ?x) @@ -460,7 +462,7 @@ no characters is less than any other string. (string< "abc" "ab") @result{} nil (string< "" "") - @result{} nil + @result{} nil @end group @end example @end defun @@ -560,13 +562,13 @@ See also the function @code{format} in @ref{Formatting Strings}. @defun string-to-number string &optional base @cindex string to number -This function returns the numeric value of the characters in -@var{string}, read in @var{base}. It skips spaces and tabs at the -beginning of @var{string}, then reads as much of @var{string} as it can -interpret as a number. (On some systems it ignores other whitespace at -the beginning, not just spaces and tabs.) If the first character after -the ignored whitespace is not a digit or a minus sign, this function -returns 0. +This function returns the numeric value represented by @var{string}, +read in @var{base}. It skips spaces and tabs at the beginning of +@var{string}, then reads as much of @var{string} as it can interpret as +a number. (On some systems it ignores other whitespace at the +beginning, not just spaces and tabs.) If the first character after the +ignored whitespace is not a digit or a minus sign, this function returns +0. If @var{base} is not specified, it defaults to ten. With @var{base} other than ten, only integers can be read. @@ -637,7 +639,7 @@ in how they use the result of formatting. @defun format string &rest objects This function returns a new string that is made by copying -@var{string} and then replacing any format specification +@var{string} and then replacing any format specification in the copy with encodings of the corresponding @var{objects}. The arguments @var{objects} are the computed values to be formatted. @end defun @@ -745,9 +747,9 @@ operation} error. (format "The buffer object prints as %s." (current-buffer)) @result{} "The buffer object prints as #." -(format "The octal value of %d is %o, +(format "The octal value of %d is %o, and the hex value is %x." 18 18 18) - @result{} "The octal value of 18 is 22, + @result{} "The octal value of 18 is 22, and the hex value is 12." @end group @end example @@ -782,9 +784,9 @@ An optional precision, preceded by a @samp{.} character. specifications. Normally the first specification uses the first argument, the second specification uses the second argument, etc. Using a repositioning specification, you can change this. By placing a number -@var{N} followed by a @samp{$} between the @samp{%} and the format -character, you cause the specification to use the @var{N}th argument. -The next specification will use the @var{N}+1'th argument, etc. +@var{n} followed by a @samp{$} between the @samp{%} and the format +character, you cause the specification to use the @var{n}th argument. +The next specification will use the @var{n}+1'th argument, etc. For example: @@ -846,23 +848,23 @@ only 3 letters, so 4 blank spaces are inserted for padding. In the second case, the string @code{"specification"} is 13 letters wide but is not truncated. In the third case, the padding is on the right. -@smallexample +@smallexample @group (format "The word `%7s' actually has %d letters in it." "foo" (length "foo")) - @result{} "The word ` foo' actually has 3 letters in it." + @result{} "The word ` foo' actually has 3 letters in it." @end group @group (format "The word `%7s' actually has %d letters in it." - "specification" (length "specification")) - @result{} "The word `specification' actually has 13 letters in it." + "specification" (length "specification")) + @result{} "The word `specification' actually has 13 letters in it." @end group @group (format "The word `%-7s' actually has %d letters in it." "foo" (length "foo")) - @result{} "The word `foo ' actually has 3 letters in it." + @result{} "The word `foo ' actually has 3 letters in it." @end group @end smallexample @@ -899,9 +901,9 @@ conversions. @node Character Case @section Character Case -@cindex upper case -@cindex lower case -@cindex character case +@cindex upper case +@cindex lower case +@cindex character case The character case functions change the case of single characters or of the contents of strings. The functions convert only alphabetic @@ -912,7 +914,7 @@ modify the strings that are passed to them as arguments. The examples below use the characters @samp{X} and @samp{x} which have @sc{ascii} codes 88 and 120 respectively. -@defun downcase string-or-char +@defun downcase string-or-char &optional buffer This function converts a character or a string to lower case. When the argument to @code{downcase} is a string, the function creates @@ -923,6 +925,9 @@ corresponding lower case character. (This value is actually an integer under XEmacs 19.) If the original character is lower case, or is not a letter, then the value equals the original character. +Optional second arg @var{buffer} specifies which buffer's case tables to +use, and defaults to the current buffer. + @example (downcase "The cat in the hat") @result{} "the cat in the hat" @@ -934,7 +939,7 @@ letter, then the value equals the original character. @end example @end defun -@defun upcase string-or-char +@defun upcase string-or-char &optional buffer This function converts a character or a string to upper case. When the argument to @code{upcase} is a string, the function creates @@ -946,6 +951,9 @@ the corresponding upper case character. (This value is actually an integer under XEmacs 19.) If the original character is upper case, or is not a letter, then the value equals the original character. +Optional second arg @var{buffer} specifies which buffer's case tables to +use, and defaults to the current buffer. + @example (upcase "The cat in the hat") @result{} "THE CAT IN THE HAT" @@ -956,7 +964,7 @@ is not a letter, then the value equals the original character. @end example @end defun -@defun capitalize string-or-char +@defun capitalize string-or-char &optional buffer @cindex capitalization This function capitalizes strings or characters. If @var{string-or-char} is a string, the function creates and returns a new @@ -972,6 +980,9 @@ table (@pxref{Syntax Class Table}). When the argument to @code{capitalize} is a character, @code{capitalize} has the same result as @code{upcase}. +Optional second arg @var{buffer} specifies which buffer's case tables to +use, and defaults to the current buffer. + @example (capitalize "The cat in the hat") @result{} "The Cat In The Hat" @@ -1045,21 +1056,22 @@ This predicate returns non-@code{nil} if @var{object} is a valid case table. @end defun -@defun set-standard-case-table table -This function makes @var{table} the standard case table, so that it will -apply to any buffers created subsequently. +@defun set-standard-case-table case-table +This function makes @var{case-table} the standard case table, so that it +will apply to any buffers created subsequently. @end defun @defun standard-case-table This returns the standard case table. @end defun -@defun current-case-table -This function returns the current buffer's case table. +@defun current-case-table &optional buffer +This function returns the case table of @var{buffer}, which defaults to +the current buffer. @end defun -@defun set-case-table table -This sets the current buffer's case table to @var{table}. +@defun set-case-table case-table +This sets the current buffer's case table to @var{case-table}. @end defun The following three functions are convenient subroutines for packages @@ -1171,8 +1183,8 @@ character. Higher-level Lisp functions are provided for working with syntax tables. The valid values are integers. @end table -@defun char-table-type table -This function returns the type of char table @var{table}. +@defun char-table-type char-table +This function returns the type of char table @var{char-table}. @end defun @defun char-table-type-list @@ -1192,9 +1204,9 @@ This function makes a new, empty char table of type @var{type}. @code{display}, @code{generic}, or @code{syntax}. @end defun -@defun put-char-table range val table -This function sets the value for chars in @var{range} to be @var{val} in -@var{table}. +@defun put-char-table range value char-table +This function sets the value for chars in @var{range} to be @var{value} in +@var{char-table}. @var{range} specifies one or more characters to be affected and should be one of the following: @@ -1211,24 +1223,24 @@ A vector of two elements: a two-octet charset and a row number A single character @end itemize -@var{val} must be a value appropriate for the type of @var{table}. +@var{value} must be a value appropriate for the type of @var{char-table}. @end defun -@defun get-char-table ch table -This function finds the value for char @var{ch} in @var{table}. +@defun get-char-table character char-table +This function finds the value for @var{character} in @var{char-table}. @end defun -@defun get-range-char-table range table &optional multi -This function finds the value for a range in @var{table}. If there is +@defun get-range-char-table range char-table &optional multi +This function finds the value for a range in @var{char-table}. If there is more than one value, @var{multi} is returned (defaults to @code{nil}). @end defun -@defun reset-char-table table -This function resets a char table to its default state. +@defun reset-char-table char-table +This function resets @var{char-table} to its default state. @end defun -@defun map-char-table function table &optional range -This function maps @var{function} over entries in @var{table}, calling +@defun map-char-table function char-table &optional range +This function maps @var{function} over entries in @var{char-table}, calling it with two args, each key and value in the table. @var{range} specifies a subrange to map over and is in the same format diff --git a/man/lispref/symbols.texi b/man/lispref/symbols.texi index ef25af8..268648d 100644 --- a/man/lispref/symbols.texi +++ b/man/lispref/symbols.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/symbols.info @node Symbols, Evaluation, Sequences Arrays Vectors, Top @@ -532,7 +532,7 @@ stored in the property list @var{plist}. For example, @end example @end defun -@defun putf plist property value +@defmac putf plist property value This stores @var{value} as the value of the @var{property} property in the property list @var{plist}. It may modify @var{plist} destructively, or it may construct a new list structure without altering the old. The @@ -547,7 +547,7 @@ in the place where you got @var{plist}. For example, (setq my-plist (putf my-plist 'quux '(a))) @result{} (quux (a) bar t foo 5) @end example -@end defun +@end defmac @defun plists-eq a b This function returns non-@code{nil} if property lists @var{a} and @var{b} diff --git a/man/lispref/syntax.texi b/man/lispref/syntax.texi index 82b93a0..2bbbdd6 100644 --- a/man/lispref/syntax.texi +++ b/man/lispref/syntax.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/syntax.info @node Syntax Tables, Abbrevs, Searching and Matching, Top @@ -368,7 +368,7 @@ prefix (@samp{'}). @xref{Motion and Syntax}. In this section we describe functions for creating, accessing and altering syntax tables. -@defun make-syntax-table &optional table +@defun make-syntax-table &optional oldtable This function creates a new syntax table. Character codes 0 through 31 and 128 through 255 are set up to inherit from the standard syntax table. The other character codes are set up by copying what the @@ -377,28 +377,28 @@ standard syntax table says about them. Most major mode syntax tables are created in this way. @end defun -@defun copy-syntax-table &optional table -This function constructs a copy of @var{table} and returns it. If -@var{table} is not supplied (or is @code{nil}), it returns a copy of the -current syntax table. Otherwise, an error is signaled if @var{table} is -not a syntax table. +@defun copy-syntax-table &optional syntax-table +This function constructs a copy of @var{syntax-table} and returns it. +If @var{syntax-table} is not supplied (or is @code{nil}), it returns a +copy of the current syntax table. Otherwise, an error is signaled if +@var{syntax-table} is not a syntax table. @end defun -@deffn Command modify-syntax-entry char syntax-descriptor &optional table -This function sets the syntax entry for @var{char} according to -@var{syntax-descriptor}. The syntax is changed only for @var{table}, -which defaults to the current buffer's syntax table, and not in any -other syntax table. The argument @var{syntax-descriptor} specifies the -desired syntax; this is a string beginning with a class designator -character, and optionally containing a matching character and flags as -well. @xref{Syntax Descriptors}. +@deffn Command modify-syntax-entry char-range syntax-descriptor &optional syntax-table +This function sets the syntax entry for @var{char-range} according to +@var{syntax-descriptor}. @var{char-range} is either a single character +or a range of characters, as used with @code{put-char-table}. The syntax +is changed only for @var{syntax-table}, which defaults to the current +buffer's syntax table, and not in any other syntax table. The argument +@var{syntax-descriptor} specifies the desired syntax; this is a string +beginning with a class designator character, and optionally containing a +matching character and flags as well. @xref{Syntax Descriptors}. This function always returns @code{nil}. The old syntax information in -the table for this character is discarded. +the table for @var{char-range} is discarded. An error is signaled if the first character of the syntax descriptor is not -one of the twelve syntax class designator characters. An error is also -signaled if @var{char} is not a character. +one of the twelve syntax class designator characters. @example @group @@ -434,12 +434,18 @@ signaled if @var{char} is not a character. @end example @end deffn -@defun char-syntax character +@defun char-syntax character &optional syntax-table This function returns the syntax class of @var{character}, represented by its mnemonic designator character. This @emph{only} returns the class, not any matching parenthesis or flags. -An error is signaled if @var{char} is not a character. +An error is signaled if @var{character} is not a character. + +The characters that correspond to various syntax codes +are listed in the documentation of @code{modify-syntax-entry}. + +Optional second argument @var{syntax-table} is the syntax table to be +used, and defaults to the current buffer's syntax table. The following examples apply to C mode. The first example shows that the syntax class of space is whitespace (represented by a space). The @@ -467,9 +473,9 @@ character, @samp{)}. @end example @end defun -@defun set-syntax-table table &optional buffer -This function makes @var{table} the syntax table for @var{buffer}, which -defaults to the current buffer if omitted. It returns @var{table}. +@defun set-syntax-table syntax-table &optional buffer +This function makes @var{syntax-table} the syntax table for @var{buffer}, which +defaults to the current buffer if omitted. It returns @var{syntax-table}. @end defun @defun syntax-table &optional buffer @@ -560,33 +566,33 @@ The result is a list of eight elements describing the final state of the parse: @enumerate 0 -@item +@item The depth in parentheses, counting from 0. -@item +@item @cindex innermost containing parentheses The character position of the start of the innermost parenthetical grouping containing the stopping point; @code{nil} if none. -@item +@item @cindex previous complete subexpression The character position of the start of the last complete subexpression terminated; @code{nil} if none. -@item +@item @cindex inside string Non-@code{nil} if inside a string. More precisely, this is the character that will terminate the string. -@item +@item @cindex inside comment @code{t} if inside a comment (of either style). -@item +@item @cindex quote character @code{t} if point is just after a quote character. -@item +@item The minimum parenthesis depth encountered during this scan. @item diff --git a/man/lispref/text.texi b/man/lispref/text.texi index 7aad873..b4ec428 100644 --- a/man/lispref/text.texi +++ b/man/lispref/text.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/text.info @node Text, Searching and Matching, Markers, Top @@ -329,13 +329,16 @@ a buffer other than the current one (otherwise you could just use @code{insert}). @end defun -@defun insert-char character count &optional buffer +@defun insert-char character &optional count ignored buffer This function inserts @var{count} instances of @var{character} into @var{buffer} before point. @var{count} must be a number, and -@var{character} must be a character. The value is @code{nil}. If -optional argument @var{buffer} is @code{nil}, the current buffer is -assumed. (In FSF Emacs, the third argument is called @var{inherit} -and refers to text properties.) +@var{character} must be a character. + +If optional argument @var{buffer} is @code{nil}, the current buffer is +assumed. (In FSF Emacs, the third argument is called @var{inherit} and +refers to text properties. In XEmacs, it is always ignored.) + +This function always returns @code{nil}. @end defun @defun insert-buffer-substring from-buffer-or-name &optional start end @@ -403,19 +406,19 @@ This is also responsible for calling @code{blink-paren-function} when the inserted character has close parenthesis syntax (@pxref{Blinking}). @end deffn -@deffn Command newline &optional number-of-newlines +@deffn Command newline &optional count This command inserts newlines into the current buffer before point. -If @var{number-of-newlines} is supplied, that many newline characters +If @var{count} is supplied, that many newline characters are inserted. @cindex newline and Auto Fill mode This function calls @code{auto-fill-function} if the current column number is greater than the value of @code{fill-column} and -@var{number-of-newlines} is @code{nil}. Typically what +@var{count} is @code{nil}. Typically what @code{auto-fill-function} does is insert a newline; thus, the overall result in this case is to insert two newlines at different places: one at point, and another earlier in the line. @code{newline} does not -auto-fill if @var{number-of-newlines} is non-@code{nil}. +auto-fill if @var{count} is non-@code{nil}. This command indents to the left margin if that is not zero. @xref{Margins}. @@ -453,7 +456,7 @@ cases. All of the deletion functions operate on the current buffer, and all return a value of @code{nil}. -@defun erase-buffer &optional buffer +@deffn Command erase-buffer &optional buffer This function deletes the entire text of @var{buffer}, leaving it empty. If the buffer is read-only, it signals a @code{buffer-read-only} error. Otherwise, it deletes the text without asking for any @@ -465,7 +468,7 @@ auto-saving of that buffer ``because it has shrunk''. However, @code{erase-buffer} does not do this, the idea being that the future text is not really related to the former text, and its size should not be compared with that of the former text. -@end defun +@end deffn @deffn Command delete-region start end &optional buffer This command deletes the text in @var{buffer} in the region defined by @@ -564,7 +567,7 @@ You thought @end example @end deffn -@deffn Command delete-indentation &optional join-following-p +@deffn Command delete-indentation &optional join-following-p This function joins the line point is on to the previous line, deleting any whitespace at the join and in some cases replacing it with one space. If @var{join-following-p} is non-@code{nil}, @@ -601,7 +604,7 @@ After the lines are joined, the function @code{fixup-whitespace} is responsible for deciding whether to leave a space at the junction. @end deffn -@defun fixup-whitespace +@deffn Command fixup-whitespace This function replaces all the white space surrounding point with either one space or no space, according to the context. It returns @code{nil}. @@ -637,7 +640,7 @@ This has too many spaces at the start of (this list) ---------- Buffer: foo ---------- @end group @end smallexample -@end defun +@end deffn @deffn Command just-one-space @comment !!SourceFile simple.el @@ -738,7 +741,7 @@ adds it to the most recent element. It uses the @code{last-command} variable to determine whether the previous command was a kill command, and if so appends the killed text to the most recent entry. -@deffn Command kill-region start end +@deffn Command kill-region start end &optional verbose This function kills the text in the region defined by @var{start} and @var{end}. The text is deleted but saved in the kill ring, along with its text properties. The value is always @code{nil}. @@ -822,26 +825,32 @@ level, but still convenient for use in Lisp programs. They take care of interaction with X Window selections. They do not exist in Emacs version 18. -@defun current-kill n &optional do-not-move +@defun current-kill count &optional do-not-move The function @code{current-kill} rotates the yanking pointer which -designates the ``front'' of the kill ring by @var{n} places (from newer +designates the ``front'' of the kill ring by @var{count} places (from newer kills to older ones), and returns the text at that place in the ring. If the optional second argument @var{do-not-move} is non-@code{nil}, then @code{current-kill} doesn't alter the yanking pointer; it just -returns the @var{n}th kill, counting from the current yanking pointer. +returns the @var{count}th kill, counting from the current yanking pointer. -If @var{n} is zero, indicating a request for the latest kill, +If @var{count} is zero, indicating a request for the latest kill, @code{current-kill} calls the value of @code{interprogram-paste-function} (documented below) before consulting the kill ring. @end defun -@defun kill-new string -This function puts the text @var{string} into the kill ring as a new -entry at the front of the ring. It discards the oldest entry if -appropriate. It also invokes the value of -@code{interprogram-cut-function} (see below). +@defun kill-new string &optional replace +This function makes the text @var{string} the latest entry in the kill +ring, and sets @code{kill-ring-yank-pointer} to point to it. + +Normally, @var{string} is added to the front of the kill ring as a new +entry. However, if optional argument @var{replace} is non-@code{nil}, +the entry previously at the front of the kill ring is discarded, and +@var{string} replaces it. + +This function runs the functions on @code{kill-hooks}, and also invokes +the value of @code{interprogram-cut-function} (see below). @end defun @defun kill-append string before-p @@ -884,7 +893,7 @@ to the newly killed text. The variable @code{kill-ring} holds the kill ring contents, in the form of a list of strings. The most recent kill is always at the front -of the list. +of the list. The @code{kill-ring-yank-pointer} variable points to a link in the kill ring list, whose @sc{car} is the text to yank next. We say it @@ -909,7 +918,7 @@ rotate the ring so that the newly killed text is at the front. Here is a diagram that shows the variable @code{kill-ring-yank-pointer} pointing to the second entry in the kill ring @code{("some text" "a -different piece of text" "yet older text")}. +different piece of text" "yet older text")}. @example @group @@ -917,11 +926,11 @@ kill-ring kill-ring-yank-pointer | | | ___ ___ ---> ___ ___ ___ ___ --> |___|___|------> |___|___|--> |___|___|--> nil - | | | - | | | - | | -->"yet older text" + | | | + | | | + | | -->"yet older text" | | - | --> "a different piece of text" + | --> "a different piece of text" | --> "some text" @end group @@ -973,9 +982,9 @@ This kind of element records a previous value of point. Ordinary cursor motion does not get any sort of undo record, but deletion commands use these entries to record where point was before the command. -@item (@var{beg} . @var{end}) +@item (@var{start} . @var{end}) This kind of element indicates how to delete text that was inserted. -Upon insertion, the text occupied the range @var{beg}--@var{end} in the +Upon insertion, the text occupied the range @var{start}--@var{end} in the buffer. @item (@var{text} . @var{position}) @@ -991,12 +1000,12 @@ was previously visited or saved. @code{primitive-undo} uses those values to determine whether to mark the buffer as unmodified once again; it does so only if the file's modification time matches those numbers. -@item (nil @var{property} @var{value} @var{beg} . @var{end}) +@item (nil @var{property} @var{value} @var{start} . @var{end}) This kind of element records a change in a text property. Here's how you might undo the change: @example -(put-text-property @var{beg} @var{end} @var{property} @var{value}) +(put-text-property @var{start} @var{end} @var{property} @var{value}) @end example @item @var{position} @@ -1072,8 +1081,8 @@ In an interactive call, @var{buffer-or-name} is the current buffer. You cannot specify any other buffer. @end deffn -@defun buffer-disable-undo &optional buffer -@defunx buffer-flush-undo &optional buffer +@deffn Command buffer-disable-undo &optional buffer +@deffnx Command buffer-flush-undo &optional buffer @cindex disable undo This function discards the undo list of @var{buffer}, and disables further recording of undo information. As a result, it is no longer @@ -1086,7 +1095,7 @@ This function returns @code{nil}. It cannot be called interactively. The name @code{buffer-flush-undo} is not considered obsolete, but the preferred name @code{buffer-disable-undo} is new as of Emacs versions 19. -@end defun +@end deffn As editing continues, undo lists get longer and longer. To prevent them from using up all available memory space, garbage collection trims @@ -1321,11 +1330,14 @@ If @var{force} is non-@code{nil}, that says to fix the line's indentation if that doesn't match the left margin value. @end deffn -@defun delete-to-left-margin from to +@defun delete-to-left-margin &optional from to This function removes left margin indentation from the text between @var{from} and @var{to}. The amount of indentation to delete is determined by calling @code{current-left-margin}. In no case does this function delete non-whitespace. + +The arguments @var{from} and @var{to} are optional; the default is the +whole buffer. @end defun @defun indent-to-left-margin @@ -1441,16 +1453,16 @@ definition for @code{sort-lines}: @group ;; @r{Note that the first two lines of doc string} ;; @r{are effectively one line when viewed by a user.} -(defun sort-lines (reverse beg end) +(defun sort-lines (reverse start end) "Sort lines in region alphabetically. Called from a program, there are three arguments: @end group @group REVERSE (non-nil means reverse order), -and BEG and END (the region to sort)." +and START and END (the region to sort)." (interactive "P\nr") (save-restriction - (narrow-to-region beg end) + (narrow-to-region start end) (goto-char (point-min)) (sort-subr reverse 'forward-line @@ -1469,8 +1481,8 @@ its @code{sort-subr} call looks like this: @example @group (sort-subr reverse - (function - (lambda () + (function + (lambda () (skip-chars-forward "\n \t\f"))) 'forward-paragraph) @end group @@ -1582,16 +1594,16 @@ region. Fields are separated by whitespace and numbered starting from is useful for sorting tables. @end deffn -@deffn Command sort-columns reverse &optional beg end -This command sorts the lines in the region between @var{beg} and +@deffn Command sort-columns reverse &optional start end +This command sorts the lines in the region between @var{start} and @var{end}, comparing them alphabetically by a certain range of columns. -The column positions of @var{beg} and @var{end} bound the range of +The column positions of @var{start} and @var{end} bound the range of columns to sort on. If @var{reverse} is non-@code{nil}, the sort is in reverse order. One unusual thing about this command is that the entire line -containing position @var{beg}, and the entire line containing position +containing position @var{start}, and the entire line containing position @var{end}, are included in the region sorted. Note that @code{sort-columns} uses the @code{sort} utility program, @@ -1620,17 +1632,29 @@ occupying a number of columns that depends on the value of amount of horizontal scrolling. Consequently, a column value can be arbitrarily high. The first (or leftmost) column is numbered 0. -@defun current-column +@defun current-column &optional buffer This function returns the horizontal position of point, measured in -columns, counting from 0 at the left margin. The column position is the -sum of the widths of all the displayed representations of the characters -between the start of the current line and point. +columns, counting from 0 at the left margin. + +This is calculated by adding together the widths of all the displayed +representations of the character between the start of the previous line +and point. (e.g. control characters will have a width of 2 or 4, tabs +will have a variable width.) + +Ignores the finite width of frame displaying the buffer, which means +that this function may return values greater than +@code{(frame-width)}. + +Whether the line is visible (if @code{selective-display} is t) has no effect; +however, ^M is treated as end of line when @code{selective-display} is t. + +If @var{buffer} is nil, the current buffer is assumed. For an example of using @code{current-column}, see the description of @code{count-lines} in @ref{Text Lines}. @end defun -@defun move-to-column column &optional force +@defun move-to-column column &optional force buffer This function moves point to @var{column} in the current line. The calculation of @var{column} takes into account the widths of the displayed representations of the characters between the start of the @@ -1649,10 +1673,11 @@ converts the tab into spaces so that it can move precisely to column @var{force}, since there is no way to split them. The argument @var{force} also has an effect if the line isn't long -enough to reach column @var{column}; in that case, it says to add +enough to reach column @var{column}; in that case, unless the value of +@var{force} is the special value @code{coerce}, it says to add whitespace at the end of the line to reach that column. -If @var{column} is not an integer, an error is signaled. +If @var{column} is not a non-negative integer, an error is signaled. The return value is the column number actually moved to. @end defun @@ -1682,7 +1707,7 @@ count from zero at the left margin. insert indentation. The functions in the following sections use these primitives. -@defun current-indentation +@defun current-indentation &optional buffer @comment !!Type Primitive Function @comment !!SourceFile indent.c This function returns the indentation of the current line, which is @@ -1691,7 +1716,7 @@ contents are entirely blank, then this is the horizontal position of the end of the line. @end defun -@deffn Command indent-to column &optional minimum +@deffn Command indent-to column &optional minimum buffer @comment !!Type Primitive Function @comment !!SourceFile indent.c This function indents from point with tabs and spaces until @var{column} @@ -1699,7 +1724,7 @@ is reached. If @var{minimum} is specified and non-@code{nil}, then at least that many spaces are inserted even if this requires going beyond @var{column}. Otherwise the function does nothing if point is already beyond @var{column}. The value is the column at which the inserted -indentation ends. +indentation ends. If @var{buffer} is @code{nil}, the current buffer is assumed. @end deffn @defopt indent-tabs-mode @@ -1734,7 +1759,7 @@ This command calls the function in @code{indent-line-function} to indent the current line in a way appropriate for the current major mode. @end deffn -@deffn Command indent-for-tab-command +@deffn Command indent-for-tab-command &optional prefix-arg This command calls the function in @code{indent-line-function} to indent the current line; except that if that function is @code{indent-to-left-margin}, it calls @code{insert-tab} instead. (That @@ -1826,13 +1851,13 @@ In Mail mode, @kbd{C-c C-y} (@code{mail-yank-original}) uses replied to. @end deffn -@defun indent-code-rigidly start end columns &optional nochange-regexp +@deffn Command indent-code-rigidly start end columns &optional nochange-regexp This is like @code{indent-rigidly}, except that it doesn't alter lines that start within strings or comments. In addition, it doesn't alter a line if @var{nochange-regexp} matches at the beginning of the line (if @var{nochange-regexp} is non-@code{nil}). -@end defun +@end deffn @node Relative Indent @subsection Indentation Relative to Previous Lines @@ -1946,7 +1971,7 @@ interactively. These commands, primarily for interactive use, act based on the indentation in the text. -@deffn Command back-to-indentation +@deffn Command back-to-indentation @comment !!SourceFile simple.el This command moves point to the first non-whitespace character in the current line (which is the line in which point is located). It returns @@ -1974,7 +1999,7 @@ buffer. @xref{Character Case}, for case conversion commands that work on strings and characters. @xref{Case Tables}, for how to customize which characters are upper or lower case and how to convert them. -@deffn Command capitalize-region start end +@deffn Command capitalize-region start end &optional buffer This function capitalizes all words in the region defined by @var{start} and @var{end}. To capitalize means to convert each word's first character to upper case and convert the rest of each word to lower @@ -2004,7 +2029,7 @@ This Is The Contents Of The 5th Foo. @end example @end deffn -@deffn Command downcase-region start end +@deffn Command downcase-region start end &optional buffer This function converts all of the letters in the region defined by @var{start} and @var{end} to lower case. The function returns @code{nil}. @@ -2013,7 +2038,7 @@ When @code{downcase-region} is called interactively, @var{start} and @var{end} are point and the mark, with the smallest first. @end deffn -@deffn Command upcase-region start end +@deffn Command upcase-region start end &optional buffer This function converts all of the letters in the region defined by @var{start} and @var{end} to upper case. The function returns @code{nil}. @@ -2022,7 +2047,7 @@ When @code{upcase-region} is called interactively, @var{start} and @var{end} are point and the mark, with the smallest first. @end deffn -@deffn Command capitalize-word count +@deffn Command capitalize-word count &optional buffer This function capitalizes @var{count} words after point, moving point over as it does. To capitalize means to convert each word's first character to upper case and convert the rest of each word to lower case. @@ -2037,7 +2062,7 @@ When @code{capitalize-word} is called interactively, @var{count} is set to the numeric prefix argument. @end deffn -@deffn Command downcase-word count +@deffn Command downcase-word count &optional buffer This function converts the @var{count} words after point to all lower case, moving point over as it does. If @var{count} is negative, it converts the @minus{}@var{count} previous words but does not move point. @@ -2047,7 +2072,7 @@ When @code{downcase-word} is called interactively, @var{count} is set to the numeric prefix argument. @end deffn -@deffn Command upcase-word count +@deffn Command upcase-word count &optional buffer This function converts the @var{count} words after point to all upper case, moving point over as it does. If @var{count} is negative, it converts the @minus{}@var{count} previous words but does not move point. @@ -2115,7 +2140,7 @@ functions to examine the properties of a number of characters at once. positions in a string start from 0, whereas positions in a buffer start from 1.) -@defun get-text-property pos prop &optional object +@defun get-text-property pos prop &optional object at-flag This function returns the value of the @var{prop} property of the character after position @var{pos} in @var{object} (a buffer or string). The argument @var{object} is optional and defaults to the current @@ -2127,7 +2152,7 @@ the @var{prop} property of that symbol. @end ignore @end defun -@defun get-char-property pos prop &optional object +@defun get-char-property pos prop &optional object at-flag This function is like @code{get-text-property}, except that it checks all extents, not just text-property extents. @@ -2280,7 +2305,7 @@ properties are not identical to those of the character just after @var{pos}. If @var{limit} is non-@code{nil}, then the scan ends at position -@var{limit}. If there is no property change before that point, +@var{limit}. If there is no property change before that point, @code{next-property-change} returns @var{limit}. The value is @code{nil} if the properties remain unchanged all the way @@ -2311,7 +2336,7 @@ returns the position of the first character beyond @var{pos} whose @var{pos}. If @var{limit} is non-@code{nil}, then the scan ends at position -@var{limit}. If there is no property change before that point, +@var{limit}. If there is no property change before that point, @code{next-single-property-change} returns @var{limit}. The value is @code{nil} if the property remains unchanged all the way to @@ -2321,14 +2346,14 @@ equals @var{pos} only if @var{limit} equals @var{pos}. @end defun @defun previous-property-change pos &optional object limit -This is like @code{next-property-change}, but scans back from @var{pos} +This is like @code{next-property-change}, but scans backward from @var{pos} instead of forward. If the value is non-@code{nil}, it is a position less than or equal to @var{pos}; it equals @var{pos} only if @var{limit} equals @var{pos}. @end defun @defun previous-single-property-change pos prop &optional object limit -This is like @code{next-single-property-change}, but scans back from +This is like @code{next-single-property-change}, but scans backward from @var{pos} instead of forward. If the value is non-@code{nil}, it is a position less than or equal to @var{pos}; it equals @var{pos} only if @var{limit} equals @var{pos}. @@ -2372,7 +2397,7 @@ The predefined properties are the same as those for extents. @cindex saving text properties You can save text properties in files, and restore text properties -when inserting the files, using these two hooks: +when inserting the files, using these two hooks: @defvar write-region-annotate-functions This variable's value is a list of functions for @code{write-region} to @@ -2422,7 +2447,7 @@ uses may be possible. We invite users to write Lisp programs to store and retrieve text properties in files, using these hooks, and thus to experiment with -various data formats and find good ones. Eventually we hope users +various data formats and find good ones. Eventually we hope users will produce good, general extensions we can install in Emacs. We suggest not trying to handle arbitrary Lisp objects as property @@ -2477,7 +2502,7 @@ This function applies a translation table to the characters in the buffer between positions @var{start} and @var{end}. The translation table @var{table} can be either a string, a vector, or a char-table. -If @var{table} is a string, its @var{n}th element is the mapping for the +If @var{table} is a string, its @var{n}th element is the mapping for the character with code @var{n}. If @var{table} is a vector, its @var{n}th element is the mapping for @@ -2557,44 +2582,44 @@ the register. A marker represents a position. A list represents a rectangle; its elements are strings, one per line of the rectangle. @end defvar -@defun get-register reg +@defun get-register register This function returns the contents of the register -@var{reg}, or @code{nil} if it has no contents. +@var{register}, or @code{nil} if it has no contents. @end defun -@defun set-register reg value -This function sets the contents of register @var{reg} to @var{value}. +@defun set-register register value +This function sets the contents of register @var{register} to @var{value}. A register can be set to any value, but the other register functions expect only certain data types. The return value is @var{value}. @end defun -@deffn Command view-register reg -This command displays what is contained in register @var{reg}. +@deffn Command view-register register +This command displays what is contained in register @var{register}. @end deffn @ignore -@deffn Command point-to-register reg +@deffn Command point-to-register register This command stores both the current location of point and the current -buffer in register @var{reg} as a marker. +buffer in register @var{register} as a marker. @end deffn -@deffn Command jump-to-register reg -@deffnx Command register-to-point reg +@deffn Command jump-to-register register +@deffnx Command register-to-point register @comment !!SourceFile register.el -This command restores the status recorded in register @var{reg}. +This command restores the status recorded in register @var{register}. -If @var{reg} contains a marker, it moves point to the position stored in -the marker. Since both the buffer and the location within the buffer -are stored by the @code{point-to-register} function, this command can -switch you to another buffer. +If @var{register} contains a marker, it moves point to the position +stored in the marker. Since both the buffer and the location within the +buffer are stored by the @code{point-to-register} function, this command +can switch you to another buffer. -If @var{reg} contains a window configuration or a frame configuration. +If @var{register} contains a window configuration or a frame configuration. @code{jump-to-register} restores that configuration. @end deffn @end ignore -@deffn Command insert-register reg &optional beforep -This command inserts contents of register @var{reg} into the current +@deffn Command insert-register register &optional beforep +This command inserts contents of register @var{register} into the current buffer. Normally, this command puts point before the inserted text, and the @@ -2613,39 +2638,39 @@ changed in the future. @end deffn @ignore -@deffn Command copy-to-register reg start end &optional delete-flag +@deffn Command copy-to-register register start end &optional delete-flag This command copies the region from @var{start} to @var{end} into -register @var{reg}. If @var{delete-flag} is non-@code{nil}, it deletes +register @var{register}. If @var{delete-flag} is non-@code{nil}, it deletes the region from the buffer after copying it into the register. @end deffn -@deffn Command prepend-to-register reg start end &optional delete-flag +@deffn Command prepend-to-register register start end &optional delete-flag This command prepends the region from @var{start} to @var{end} into -register @var{reg}. If @var{delete-flag} is non-@code{nil}, it deletes +register @var{register}. If @var{delete-flag} is non-@code{nil}, it deletes the region from the buffer after copying it to the register. @end deffn -@deffn Command append-to-register reg start end &optional delete-flag +@deffn Command append-to-register register start end &optional delete-flag This command appends the region from @var{start} to @var{end} to the -text already in register @var{reg}. If @var{delete-flag} is +text already in register @var{register}. If @var{delete-flag} is non-@code{nil}, it deletes the region from the buffer after copying it to the register. @end deffn -@deffn Command copy-rectangle-to-register reg start end &optional delete-flag +@deffn Command copy-rectangle-to-register register start end &optional delete-flag This command copies a rectangular region from @var{start} to @var{end} -into register @var{reg}. If @var{delete-flag} is non-@code{nil}, it +into register @var{register}. If @var{delete-flag} is non-@code{nil}, it deletes the region from the buffer after copying it to the register. @end deffn -@deffn Command window-configuration-to-register reg +@deffn Command window-configuration-to-register register This function stores the window configuration of the selected frame in -register @var{reg}. +register @var{register}. @end deffn -@deffn Command frame-configuration-to-register reg +@deffn Command frame-configuration-to-register register This function stores the current frame configuration in register -@var{reg}. +@var{register}. @end deffn @end ignore @@ -2742,14 +2767,23 @@ target digest. MD5 is used heavily by various authentication schemes. Emacs Lisp interface to MD5 consists of a single function @code{md5}: -@defun md5 object &optional start end +@defun md5 object &optional start end coding noerror This function returns the MD5 message digest of @var{object}, a buffer or string. Optional arguments @var{start} and @var{end} denote positions for computing the digest of a portion of @var{object}. -Some examples of usage: +The optional @var{coding} argument specifies the coding system the text +is to be represented in while computing the digest. If unspecified, it +defaults to the current format of the data, or is guessed. + +If @var{noerror} is non-@code{nil}, silently assume binary coding if the +guesswork fails. Normally, an error is signaled in such case. + +@var{coding} and @var{noerror} arguments are meaningful only in XEmacsen +with file-coding or Mule support. Otherwise, they are ignored. Some +examples of usage: @example @group @@ -2779,13 +2813,13 @@ binary bodies, and to encode binary characters in message headers. The Lisp interface to base64 consists of four functions: -@defun base64-encode-region beg end &optional no-line-break -This function encodes the region between @var{beg} and @var{end} of the -current buffer to base64 format. This means that the original region is +@deffn Command base64-encode-region start end &optional no-line-break +This function encodes the region between @var{start} and @var{end} of the +current buffer to base64 format. This means that the original region is deleted, and replaced with its base64 equivalent. Normally, encoded base64 output is multi-line, with 76-character lines. -If @var{no-line-break} is non-@code{nil}, newlines will not be inserted, +If @var{no-line-break} is non-@code{nil}, newlines will not be inserted, resulting in single-line output. Mule note: you should make sure that you convert the multibyte @@ -2805,12 +2839,16 @@ an error. The function can also be used interactively, in which case it works on the currently active region. -@end defun +@end deffn -@defun base64-encode-string string +@defun base64-encode-string string &optional no-line-break This function encodes @var{string} to base64, and returns the encoded string. +Normally, encoded base64 output is multi-line, with 76-character lines. +If @var{no-line-break} is non-@code{nil}, newlines will not be inserted, +resulting in single-line output. + For Mule, the same considerations apply as for @code{base64-encode-region}. @@ -2822,12 +2860,12 @@ For Mule, the same considerations apply as for @end example @end defun -@defun base64-decode-region beg end -This function decodes the region between @var{beg} and @var{end} of the +@deffn Command base64-decode-region start end +This function decodes the region between @var{start} and @var{end} of the current buffer. The region should be in base64 encoding. If the region was decoded correctly, @code{base64-decode-region} returns -the length of the decoded region. If the decoding failed, @code{nil} is +the length of the decoded region. If the decoding failed, @code{nil} is returned. @example @@ -2836,7 +2874,7 @@ returned. (base64-decode-region (point-min) (point-max)) @end group @end example -@end defun +@end deffn @defun base64-decode-string string This function decodes @var{string} to base64, and returns the decoded diff --git a/man/lispref/tips.texi b/man/lispref/tips.texi index 5e952ab..eb4be94 100644 --- a/man/lispref/tips.texi +++ b/man/lispref/tips.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/tips.info @node Tips, Building XEmacs and Object Allocation, MULE, Top @@ -160,7 +160,7 @@ standard names instead. @item Redefining an Emacs primitive is an even worse idea. -It may do the right thing for a particular program, but +It may do the right thing for a particular program, but there is no telling what other programs might break as a result. @item @@ -284,7 +284,7 @@ may be worth rearranging a data structure so that one of these primitive search functions can be used. @item -Certain built-in functions are handled specially in byte-compiled code, +Certain built-in functions are handled specially in byte-compiled code, avoiding the need for an ordinary function call. It is a good idea to use these functions rather than alternatives. To see whether a function is handled specially by the compiler, examine its @code{byte-compile} @@ -369,13 +369,13 @@ Do not start or end a documentation string with whitespace. @item Format the documentation string so that it fits in an Emacs window on an 80-column screen. It is a good idea for most lines to be no wider than -60 characters. The first line can be wider if necessary to fit the +60 characters. The first line can be wider if necessary to fit the information that ought to be there. However, rather than simply filling the entire documentation string, you can make it much more readable by choosing line breaks with care. Use blank lines between topics if the documentation string is long. - + @item @strong{Do not} indent subsequent lines of a documentation string so that the text is lined up in the source code with the text of the first diff --git a/man/lispref/toolbar.texi b/man/lispref/toolbar.texi index 3d725a6..7cf6a90 100644 --- a/man/lispref/toolbar.texi +++ b/man/lispref/toolbar.texi @@ -210,7 +210,7 @@ the user to choose where the toolbar should go. @defvr Specifier default-toolbar The position of this toolbar is specified in the function -@code{default-toolbar-position}. If the corresponding +@code{default-toolbar-position}. If the corresponding position-specific toolbar (e.g. @code{top-toolbar} if @code{default-toolbar-position} is @code{top}) does not specify a toolbar in a particular domain, then the value of @code{default-toolbar} @@ -270,7 +270,7 @@ Specifier for the toolbar at the right edge of the frame. @end defvr @defun toolbar-specifier-p object -This function returns non-nil if @var{object} is a toolbar specifier. +This function returns non-@code{nil} if @var{object} is a toolbar specifier. Toolbar specifiers are the actual objects contained in the toolbar variables described above, and their valid instantiators are toolbar descriptors (@pxref{Toolbar Descriptor Format}). @@ -366,7 +366,7 @@ Thus, for example, if you set the frame width to 80 characters and the left toolbar width for that frame to 68 pixels, then the frame will be sized to fit 80 characters plus a 68-pixel left toolbar. If you then set the left toolbar width to 0 for a particular buffer (or if that -buffer does not specify a left toolbar or has a nil value specified for +buffer does not specify a left toolbar or has a @code{nil} value specified for @code{left-toolbar-visible-p}), you will find that, when that buffer is displayed in the selected window, the window will have a width of 86 or 87 characters---the frame is sized for a 68-pixel left toolbar but the diff --git a/man/lispref/tooltalk.texi b/man/lispref/tooltalk.texi index 0140d16..0ce1334 100644 --- a/man/lispref/tooltalk.texi +++ b/man/lispref/tooltalk.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/tooltalk.info @node ToolTalk Support, LDAP Support, X-Windows, top @@ -38,7 +38,7 @@ the callback is specified with a Lisp symbol (the symbol should have a function binding). @item -The session attribute for messages and patterns is always +The session attribute for messages and patterns is always initialized to the default session. @item @@ -74,8 +74,8 @@ stored in the first argument of the message. (message "Random query turns up nothing"))))) (defvar random-query-message - '( class TT_REQUEST - scope TT_SESSION + '( class TT_REQUEST + scope TT_SESSION address TT_PROCEDURE op "random-query" args '((TT_INOUT "?" "string")) @@ -90,12 +90,12 @@ stored in the first argument of the message. @defun make-tooltalk-message attributes Create a ToolTalk message and initialize its attributes. -The value of @var{attributes} must be a list of alternating keyword/values, -where keywords are symbols that name valid message attributes. +The value of @var{attributes} must be a list of alternating keyword/values, +where keywords are symbols that name valid message attributes. For example: @example - (make-tooltalk-message + (make-tooltalk-message '(class TT_NOTICE scope TT_SESSION address TT_PROCEDURE @@ -223,12 +223,16 @@ nulls (use @code{arg_bval}). @refill @end defun -@defun create-tooltalk-message +@defun create-tooltalk-message &optional no-callback Create a new ToolTalk message. The message's session attribute is initialized to the default session. Other attributes can be initialized with @code{set-tooltalk-message-attribute}. @code{make-tooltalk-message} is the preferred way to create and initialize a message. + +Optional arg @var{no-callback} says don't add a C-level callback at all. +Normally don't do that; just don't specify the Lisp callback when +calling @code{make-tooltalk-message}. @refill @end defun @@ -275,19 +279,19 @@ string to display. @defun make-tooltalk-pattern attributes Create a ToolTalk pattern and initialize its attributes. -The value of attributes must be a list of alternating keyword/values, +The value of attributes must be a list of alternating keyword/values, where keywords are symbols that name valid pattern attributes or lists of valid attributes. For example: @example - (make-tooltalk-pattern + (make-tooltalk-pattern '(category TT_OBSERVE scope TT_SESSION op ("operation1" "operation2") args ("arg1" 12345 (TT_INOUT "arg3" "string")))) @end example -Attribute names are the same as those supported by +Attribute names are the same as those supported by @code{add-tooltalk-pattern-attribute}, plus @code{'args}. Values must always be strings, integers, or symbols that represent @@ -316,15 +320,15 @@ chapter 3 of the @cite{ToolTalk Programmer's Guide}. @refill @end defun -@defun register-tooltalk-pattern pat +@defun register-tooltalk-pattern pattern XEmacs will begin receiving messages that match this pattern. @end defun -@defun unregister-tooltalk-pattern pat +@defun unregister-tooltalk-pattern pattern XEmacs will stop receiving messages that match this pattern. @end defun -@defun add-tooltalk-pattern-attribute value pat indicator +@defun add-tooltalk-pattern-attribute value pattern indicator Add one value to the indicated pattern attribute. The names of attributes are the same as the ToolTalk accessors used to set them less the @samp{tooltalk_pattern_} prefix and the @samp{_add} suffix. For @@ -340,9 +344,9 @@ argument. It will be called each time the pattern matches an incoming message. @end defun -@defun add-tooltalk-pattern-arg pat mode type value +@defun add-tooltalk-pattern-arg pattern mode vtype &optional value Add one fully-specified argument to a ToolTalk pattern. @var{mode} must -be one of @code{TT_IN}, @code{TT_INOUT}, or @code{TT_OUT}. @var{type} +be one of @code{TT_IN}, @code{TT_INOUT}, or @code{TT_OUT}. @var{vtype} must be a string. @var{value} can be an integer, string or @code{nil}. If @var{value} is an integer then an integer argument (@samp{tt_pattern_iarg_add}) is added; otherwise a string argument is @@ -355,7 +359,7 @@ Create a new ToolTalk pattern and initialize its session attribute to be the default session. @end defun -@defun destroy-tooltalk-pattern pat +@defun destroy-tooltalk-pattern pattern Apply @samp{tt_pattern_destroy} to the pattern. This effectively unregisters the pattern. @end defun diff --git a/man/lispref/variables.texi b/man/lispref/variables.texi index d5d5ab5..6d3cc9d 100644 --- a/man/lispref/variables.texi +++ b/man/lispref/variables.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/variables.info @node Variables, Functions, Control Structures, Top @@ -190,7 +190,7 @@ which is 2, not the new value, 1. @result{} 2 @end group @group -(let ((Y 1) +(let ((Y 1) (Z Y)) (list Y Z)) @result{} (1 2) @@ -635,7 +635,7 @@ The value of the @code{setq} form is the value of the last @var{form}. x ; @r{@code{x} now has a global value.} @result{} 3 @group -(let ((x 5)) +(let ((x 5)) (setq x 6) ; @r{The local binding of @code{x} is set.} x) @result{} 6 @@ -652,7 +652,7 @@ second @var{symbol} is set, and so on: @group (setq x 10 ; @r{Notice that @code{x} is set before} y (1+ x)) ; @r{the value of @code{y} is computed.} - @result{} 11 + @result{} 11 @end group @end example @end defspec @@ -1101,10 +1101,26 @@ local to the current buffer at the time. The value returned is @var{variable}. @end deffn -@defun local-variable-p variable &optional buffer +@defun local-variable-p variable buffer &optional after-set This returns @code{t} if @var{variable} is buffer-local in buffer -@var{buffer} (which defaults to the current buffer); otherwise, -@code{nil}. +@var{buffer}; else @code{nil}. + +If optional third arg @var{after-set} is non-@code{nil}, return @code{t} +if @var{symbol} would be buffer-local after it is set, regardless of +whether it is so presently. + +A @code{nil} value for @var{buffer} is @emph{not} the same as +@code{(current-buffer)}, but means "no buffer". Specifically: + +If @var{buffer} is @code{nil} and @var{after-set} is @code{nil}, a +return value of @code{t} indicates that the variable is one of the +special built-in variables that is always buffer-local. (This includes +@code{buffer-file-name}, @code{buffer-read-only}, +@code{buffer-undo-list}, and others.) + +If @var{buffer} is @code{nil} and @var{after-set} is @code{t}, a return +value of @code{t} indicates that the variable has had +@code{make-variable-buffer-local} applied to it. @end defun @defun buffer-local-variables &optional buffer @@ -1129,7 +1145,7 @@ the current buffer is used. (mode-name . "Fundamental") @dots{} @group - ;; @r{Next, non-built-in local variables.} + ;; @r{Next, non-built-in local variables.} ;; @r{This one is local and void:} foobar ;; @r{This one is local and nonvoid:} @@ -1330,13 +1346,13 @@ cannot be a built-in variable, a variable that has a buffer-local value in any buffer, or the symbols @code{nil} or @code{t}. @end defun -@defun variable-alias variable +@defun variable-alias variable &optional follow-past-lisp-magic If @var{variable} is aliased to another variable, this function returns that variable. @var{variable} should be a symbol. If @var{variable} is not aliased, this function returns @code{nil}. @end defun -@defun indirect-variable object +@defun indirect-variable object &optional follow-past-lisp-magic This function returns the variable at the end of @var{object}'s variable-alias chain. If @var{object} is a symbol, follow all variable aliases and return the final (non-aliased) symbol. If @var{object} is diff --git a/man/lispref/windows.texi b/man/lispref/windows.texi index 287184b..b05616e 100644 --- a/man/lispref/windows.texi +++ b/man/lispref/windows.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/windows.info @node Windows, Frames, Buffers, Top @@ -22,7 +22,7 @@ displayed in windows. * Choosing Window:: How to choose a window for displaying a buffer. * Window Point:: Each window has its own location of point. * Window Start:: The display-start position controls which text - is on-screen in the window. + is on-screen in the window. * Vertical Scrolling:: Moving text up and down in the window. * Horizontal Scrolling:: Moving text sideways on the window. * Size of Window:: Accessing the size of a window. @@ -66,31 +66,31 @@ life. (@xref{Deleting Windows}.) @item containing frame -@item +@item window height -@item +@item window width -@item +@item window edges with respect to the frame or screen -@item +@item the buffer it displays -@item +@item position within the buffer at the upper left of the window -@item +@item amount of horizontal scrolling, in columns -@item +@item point -@item +@item the mark -@item +@item how recently the window was selected @end itemize @@ -139,33 +139,15 @@ but not always: @code{pop-to-buffer} and @code{display-buffer} The two ``halves'' of the split window initially display the same buffer previously visible in the window that was split. -@defun one-window-p &optional no-mini all-frames +@defun one-window-p &optional nomini which-frames which-devices This function returns non-@code{nil} if there is only one window. The -argument @var{no-mini}, if non-@code{nil}, means don't count the +argument @var{nomini}, if non-@code{nil}, means don't count the minibuffer even if it is active; otherwise, the minibuffer window is included, if active, in the total number of windows which is compared against one. - The argument @var{all-frame} controls which set of windows are -counted. -@itemize @bullet -@item -If it is @code{nil} or omitted, then count only the selected frame, plus -the minibuffer it uses (which may be on another frame). -@item -If it is @code{t}, then windows on all frames that currently exist -(including invisible and iconified frames) are counted. -@item -If it is the symbol @code{visible}, then windows on all visible frames -are counted. -@item -If it is the number 0, then windows on all visible and iconified frames -are counted. -@item -If it is any other value, then precisely the windows in @var{window}'s -frame are counted, excluding the minibuffer in use if it lies in -some other frame. -@end itemize +The remaining arguments controls which set of windows are counted, as +with @code{next-window}. @end defun @deffn Command split-window &optional window size horizontal @@ -202,7 +184,7 @@ lines high by 80 columns wide; then the window is split. @group ;; @r{Returns window created} -(setq w2 (split-window w 15)) +(setq w2 (split-window w 15)) @result{} # @end group @group @@ -220,8 +202,8 @@ The frame looks like this: @smallexample @group - __________ - | | line 0 + __________ + | | line 0 | w | |__________| | | line 15 @@ -259,8 +241,8 @@ Now, the screen looks like this: @smallexample @group column 35 - __________ - | | | line 0 + __________ + | | | line 0 | w | w3 | |___|______| | | line 15 @@ -281,7 +263,7 @@ characters; see @ref{Display Tables}. This function splits the selected window into two windows, one above the other, leaving the selected window with @var{size} lines. -This function is simply an interface to @code{split-windows}. +This function is simply an interface to @code{split-window}. Here is the complete function definition for it: @smallexample @@ -298,7 +280,7 @@ Here is the complete function definition for it: This function splits the selected window into two windows side-by-side, leaving the selected window with @var{size} columns. -This function is simply an interface to @code{split-windows}. Here is +This function is simply an interface to @code{split-window}. Here is the complete definition for @code{split-window-horizontally} (except for part of the documentation string): @@ -312,35 +294,6 @@ part of the documentation string): @end smallexample @end deffn -@defun one-window-p &optional no-mini all-frames -This function returns non-@code{nil} if there is only one window. The -argument @var{no-mini}, if non-@code{nil}, means don't count the -minibuffer even if it is active; otherwise, the minibuffer window is -included, if active, in the total number of windows, which is compared -against one. - -The argument @var{all-frames} specifies which frames to consider. Here -are the possible values and their meanings: - -@table @asis -@item @code{nil} -Count the windows in the selected frame, plus the minibuffer used -by that frame even if it lies in some other frame. - -@item @code{t} -Count all windows in all existing frames. - -@item @code{visible} -Count all windows in all visible frames. - -@item 0 -Count all windows in all visible or iconified frames. - -@item anything else -Count precisely the windows in the selected frame, and no others. -@end table -@end defun - @node Deleting Windows @section Deleting Windows @cindex deleting windows @@ -366,15 +319,21 @@ This function returns @code{nil} if @var{window} is deleted, and using a deleted window as if it were live. @end defun -@deffn Command delete-window &optional window -This function removes @var{window} from the display. If @var{window} -is omitted, then the selected window is deleted. An error is signaled -if there is only one window when @code{delete-window} is called. +@deffn Command delete-window &optional window force +This function removes @var{window} from the display. If @var{window} is +omitted, then the selected window is deleted. If window is the only one +on its frame, the frame is deleted as well. + +Normally, you cannot delete the last non-minibuffer-only frame (you must +use @code{save-buffers-kill-emacs} or @code{kill-emacs}); an error is +signaled instead. However, if optional second argument @var{force} is +non-@code{nil}, you can delete the last frame. (This will automatically +call @code{save-buffers-kill-emacs}.) This function returns @code{nil}. -When @code{delete-window} is called interactively, @var{window} -defaults to the selected window. +When @code{delete-window} is called interactively, the selected window +is deleted. @end deffn @deffn Command delete-other-windows &optional window @@ -385,7 +344,7 @@ deleting the other windows in that frame. If @var{window} is omitted or The result is @code{nil}. @end deffn -@deffn Command delete-windows-on buffer &optional frame +@deffn Command delete-windows-on buffer &optional which-frames which-devices This function deletes all windows showing @var{buffer}. If there are no windows showing @var{buffer}, it does nothing. @@ -397,20 +356,52 @@ where there is only one window), then the frame reverts to having a single window showing another buffer chosen with @code{other-buffer}. @xref{The Buffer List}. -The argument @var{frame} controls which frames to operate on: +The argument @var{which-frames} controls which frames to operate on: -@itemize @bullet -@item -If it is @code{nil}, operate on the selected frame. -@item -If it is @code{t}, operate on all frames. -@item -If it is @code{visible}, operate on all visible frames. -@item 0 -If it is 0, operate on all visible or iconified frames. -@item -If it is a frame, operate on that frame. -@end itemize +@table @asis +@item @code{nil} +Delete all windows showing @var{buffer} in any frame. + +@item @code{t} +Delete only windows showing @var{buffer} in the selected frame. + +@item @code{visible} +Delete all windows showing @var{buffer} in any visible frame. + +@item @code{0} +Delete all windows showing @var{buffer} in any visible frame. + +@item @var{frame} +If it is a frame, delete all windows showing @var{buffer} in that frame. +@end table + +@strong{Warning:} This is similar to, but not identical to, the meaning +of the @var{which-frames} argument to @code{next-window}; the meanings +of @code{nil} and @code{t} are reversed. + +The optional argument @var{which-devices} further clarifies on which +devices to search for frames as specified by @var{which-frames}. +This value is only meaningful if @var{which-frames} is not @code{t}. + +@table @asis +@item @code{nil} +Consider all devices on the selected console. + +@item @var{device} +Consider only the one device @var{device}. + +@item @var{console} +Consider all devices on @var{console}. + +@item @var{device-type} +Consider all devices with device type @var{device-type}. + +@item @code{window-system} +Consider all devices on window system consoles. + +@item anything else +Consider all devices without restriction. +@end table This function always returns @code{nil}. @end deffn @@ -438,7 +429,7 @@ appears in @var{window} (on redisplay). The buffer being displayed in If optional argument @var{norecord} is non-@code{nil} then the global and per-frame buffer orderings are not modified, as by the function -@code{record-buffer}. +@code{record-buffer}. The return value is @var{window}. @@ -451,19 +442,18 @@ The return value is @var{window}. @end example @end defun -@defmac save-selected-window forms@dots{} -This macro records the selected window, executes @var{forms} -in sequence, then restores the earlier selected window. -It does not save or restore anything about the sizes, arrangement -or contents of windows; therefore, if the @var{forms} change them, -the changes are permanent. -@end defmac +@defspec save-selected-window forms@dots{} +This special form records the selected window, executes @var{forms} in +sequence, then restores the earlier selected window. It does not save +or restore anything about the sizes, arrangement or contents of windows; +therefore, if the @var{forms} change them, the changes are permanent. +@end defspec @cindex finding windows The following functions choose one of the windows on the screen, offering various criteria for the choice. -@defun get-lru-window &optional frame +@defun get-lru-window &optional which-frames which-devices This function returns the window least recently ``used'' (that is, selected). The selected window is always the most recently used window. @@ -471,23 +461,59 @@ The selected window can be the least recently used window if it is the only window. A newly created window becomes the least recently used window until it is selected. A minibuffer window is never a candidate. -The argument @var{frame} controls which windows are considered. +By default, only the windows in the selected frame are considered. +The optional argument @var{which-frames} changes this behavior. +Here are the possible values and their meanings: + +@table @asis +@item @code{nil} +Consider all the windows in the selected windows's frame, plus the +minibuffer used by that frame even if it lies in some other frame. + +@item @code{t} +Consider all windows in all existing frames. + +@item @code{visible} +Consider all windows in all visible frames. (To get useful results, you +must ensure @var{window} is in a visible frame.) + +@item @code{0} +Consider all windows in all visible or iconified frames. + +@item @var{frame} +Consider all windows on frame @var{frame}. + +@item anything else +Consider precisely the windows in the selected window's frame, and no others. +@end table + +The optional argument @var{which-devices} further clarifies on which +devices to search for frames as specified by @var{which-frames}. +This value is only meaningful if @var{which-frames} is non-@code{nil}. + +@table @asis +@item @code{nil} +Consider all devices on the selected console. + +@item @var{device} +Consider only the one device @var{device}. + +@item @var{console} +Consider all devices on @var{console}. + +@item @var{device-type} +Consider all devices with device type @var{device-type}. + +@item @code{window-system} +Consider all devices on window system consoles. + +@item anything else +Consider all devices without restriction. +@end table -@itemize @bullet -@item -If it is @code{nil}, consider windows on the selected frame. -@item -If it is @code{t}, consider windows on all frames. -@item -If it is @code{visible}, consider windows on all visible frames. -@item -If it is 0, consider windows on all visible or iconified frames. -@item -If it is a frame, consider windows on that frame. -@end itemize @end defun -@defun get-largest-window &optional frame +@defun get-largest-window &optional which-frames which-devices This function returns the window with the largest area (height times width). If there are no side-by-side windows, then this is the window with the most lines. A minibuffer window is never a candidate. @@ -496,15 +522,15 @@ If there are two windows of the same size, then the function returns the window that is first in the cyclic ordering of windows (see following section), starting from the selected window. -The argument @var{frame} controls which set of windows are -considered. See @code{get-lru-window}, above. +The remaining arguments control which set of windows are considered. +See @code{next-window}, above. @end defun @node Cyclic Window Ordering @section Cyclic Ordering of Windows @cindex cyclic ordering of windows @cindex ordering of windows, cyclic -@cindex window ordering, cyclic +@cindex window ordering, cyclic When you use the command @kbd{C-x o} (@code{other-window}) to select the next window, it moves through all the windows on the screen in a @@ -523,7 +549,7 @@ horizontal, the ordering is top to bottom in the left part, and so on. In general, within each set of siblings at any level in the window tree, the order is left to right, or top to bottom. -@defun next-window &optional window minibuf all-frames +@defun next-window &optional window minibuf which-frames which-devices @cindex minibuffer window This function returns the window following @var{window} in the cyclic ordering of windows. This is the window that @kbd{C-x o} would select @@ -543,8 +569,9 @@ minibuffer window even if it is not active. If @var{minibuf} is neither @code{t} nor @code{nil}, then the minibuffer window is not included even if it is active. -The argument @var{all-frames} specifies which frames to consider. Here -are the possible values and their meanings: +By default, only the windows in the selected frame are considered. +The optional argument @var{which-frames} changes this behavior. +Here are the possible values and their meanings: @table @asis @item @code{nil} @@ -558,14 +585,47 @@ Consider all windows in all existing frames. Consider all windows in all visible frames. (To get useful results, you must ensure @var{window} is in a visible frame.) -@item 0 +@item @code{0} Consider all windows in all visible or iconified frames. +@item @var{frame} +Consider all windows on frame @var{frame}. + @item anything else Consider precisely the windows in @var{window}'s frame, and no others. @end table -This example assumes there are two windows, both displaying the +The optional argument @var{which-devices} further clarifies on which +devices to search for frames as specified by @var{which-frames}. +This value is only meaningful if @var{which-frames} is non-@code{nil}. + +@table @asis +@item @code{nil} +Consider all devices on the selected console. + +@item @var{device} +Consider only the one device @var{device}. + +@item @var{console} +Consider all devices on @var{console}. + +@item @var{device-type} +Consider all devices with device type @var{device-type}. + +@item @code{window-system} +Consider all devices on window system consoles. + +@item anything else +Consider all devices without restriction. +@end table + +If you use consistent values for @var{minibuf}, @var{which-frames}, and +@var{which-devices}, you can use @code{next-window} to iterate through the +entire cycle of acceptable windows, eventually ending up back at the +window you started with. @code{previous-window} traverses the same +cycle, in the reverse order. + +This example assumes there are two windows, both displaying the buffer @samp{windows.texi}: @example @@ -584,48 +644,29 @@ buffer @samp{windows.texi}: @end example @end defun -@defun previous-window &optional window minibuf all-frames +@defun previous-window &optional window minibuf which-frames which-devices This function returns the window preceding @var{window} in the cyclic ordering of windows. The other arguments specify which windows to include in the cycle, as in @code{next-window}. @end defun -@deffn Command other-window count &optional frame -This function selects the @var{count}th following window in the cyclic -order. If count is negative, then it selects the @minus{}@var{count}th +@deffn Command other-window count &optional which-frames which-devices +This function selects the @var{count}th following window in the cyclic order. +If @var{count} is negative, then it selects the @minus{}@var{count}th preceding window. It returns @code{nil}. In an interactive call, @var{count} is the numeric prefix argument. -The argument @var{frame} controls which set of windows are considered. -@itemize @bullet -@item -If it is @code{nil} or omitted, then windows on the selected frame are -considered. -@item -If it is a frame, then windows on that frame are considered. -@item -If it is @code{t}, then windows on all frames that currently exist -(including invisible and iconified frames) are considered. -@item -If it is the symbol @code{visible}, then windows on all visible frames -are considered. -@item -If it is the number 0, then windows on all visible and iconified frames -are considered. -@item -If it is any other value, then the behavior is undefined. -@end itemize +The other arguments specify which windows to include in the cycle, as in +@code{next-window}. @end deffn -@c Emacs 19 feature -@defun walk-windows proc &optional minibuf all-frames -This function cycles through all windows, calling @code{proc} +@defun walk-windows function &optional minibuf which-frames which-devices +This function cycles through all windows, calling @code{function} once for each window with the window as its sole argument. -The optional arguments @var{minibuf} and @var{all-frames} specify the -set of windows to include in the scan. See @code{next-window}, above, -for details. +The other arguments specify which windows to cycle through, as in +@code{next-window}. @end defun @node Buffers and Windows @@ -647,9 +688,14 @@ The functions described there are easier to use than these, but they employ heuristics in choosing or creating a window; use these functions when you need complete control. -@defun set-window-buffer window buffer-or-name +@defun set-window-buffer window buffer-or-name &optional norecord This function makes @var{window} display @var{buffer-or-name} as its -contents. It returns @code{nil}. +contents. @var{buffer-or-name} can be a buffer or a buffer name. + +With non-@code{nil} optional argument @var{norecord}, do not modify the +global or per-frame buffer ordering. + +This function returns @code{nil}. @example @group @@ -672,27 +718,15 @@ selected window. @end example @end defun -@defun get-buffer-window buffer-or-name &optional frame +@defun get-buffer-window buffer-or-name &optional which-frames which-devices This function returns a window currently displaying @var{buffer-or-name}, or @code{nil} if there is none. If there are several such windows, then the function returns the first one in the cyclic ordering of windows, starting from the selected window. @xref{Cyclic Window Ordering}. -The argument @var{all-frames} controls which windows to consider. - -@itemize @bullet -@item -If it is @code{nil}, consider windows on the selected frame. -@item -If it is @code{t}, consider windows on all frames. -@item -If it is @code{visible}, consider windows on all visible frames. -@item -If it is 0, consider windows on all visible or iconified frames. -@item -If it is a frame, consider windows on that frame. -@end itemize +The remaining arguments control which windows to consider. They have +the same meaning as for @code{next-window}. @end defun @node Displaying Buffers @@ -801,13 +835,16 @@ buffer on. Functions}. @end defun -@deffn Command replace-buffer-in-windows buffer +@deffn Command replace-buffer-in-windows buffer &optional which-frames which-devices This function replaces @var{buffer} with some other buffer in all windows displaying it. The other buffer used is chosen with @code{other-buffer}. In the usual applications of this function, you don't care which other buffer is used; you just want to make sure that @var{buffer} is no longer displayed. +The optional arguments @var{which-frames} and @var{which-devices} have +the same meaning as with @code{delete-windows-on}. + This function returns @code{nil}. @end deffn @@ -819,12 +856,14 @@ display a buffer in---@code{display-buffer}. All the higher-level functions and commands use this subroutine. Here we describe how to use @code{display-buffer} and how to customize it. -@deffn Command display-buffer buffer-or-name &optional not-this-window +@deffn Command display-buffer buffer-or-name &optional not-this-window override-frame This command makes @var{buffer-or-name} appear in some window, like @code{pop-to-buffer}, but it does not select that window and does not make the buffer current. The identity of the selected window is unaltered by this function. +@var{buffer-or-name} can be a buffer or the name of one. + If @var{not-this-window} is non-@code{nil}, it means to display the specified buffer in a window other than the selected one, even if it is already on display in the selected window. This can cause the buffer to @@ -832,8 +871,10 @@ appear in two windows at once. Otherwise, if @var{buffer-or-name} is already being displayed in any window, that is good enough, so this function does nothing. -@code{display-buffer} returns the window chosen to display -@var{buffer-or-name}. +If @var{override-frame} is non-@code{nil}, display on that frame instead +of the current frame (or the dedicated frame). + +@code{display-buffer} returns the window chosen to display @var{buffer-or-name}. Precisely how @code{display-buffer} finds or creates a window depends on the variables described below. @@ -1039,13 +1080,14 @@ point and the buffer's point always move together; they remain equal. when the user switches to another buffer, the cursor jumps to the position of point in that buffer. -@defun window-point window +@defun window-point &optional window This function returns the current position of point in @var{window}. For a non-selected window, this is the value point would have (in that window's buffer) if that window were selected. When @var{window} is the selected window and its buffer is also the -current buffer, the value returned is the same as point in that buffer. +current buffer, the value returned is the same as the value of point in +that buffer. Strictly speaking, it would be more correct to return the ``top-level'' value of point, outside of any @code{save-excursion} @@ -1071,7 +1113,7 @@ inevitably, at the beginning of a text line. @cindex window top line This function returns the display-start position of window @var{window}. If @var{window} is @code{nil}, the selected window is -used. For example, +used. For example, @example @group @@ -1088,19 +1130,25 @@ For a realistic example, see the description of @code{count-lines} in @ref{Text Lines}. @end defun -@defun window-end &optional window +@defun window-end &optional window guarantee This function returns the position of the end of the display in window @var{window}. If @var{window} is @code{nil}, the selected window is used. -Simply changing the buffer text or moving point does not update the -value that @code{window-end} returns. The value is updated only when -Emacs redisplays and redisplay actually finishes. +Simply changing the buffer text or setting @code{window-start} does not +update the value that @code{window-end} returns. The value is updated +only when Emacs redisplays and redisplay actually finishes. If the last redisplay of @var{window} was preempted, and did not finish, Emacs does not know the position of the end of display in that window. In that case, this function returns a value that is not correct. In a future version, @code{window-end} will return @code{nil} in that case. + +If optional arg @var{guarantee} is non-@code{nil}, the return value is +guaranteed to be the same as @code{window-end} would return at the end +of the next full redisplay assuming nothing else changes in the +meantime. This function is potentially much slower with this flag set. + @ignore in that case, this function returns @code{nil}. You can compute where the end of the window @emph{would} have been, if redisplay had finished, @@ -1229,33 +1277,33 @@ names that fit the user's point of view. unpredictable results if the current buffer is different from the buffer that is displayed in the selected window. @xref{Current Buffer}. -@deffn Command scroll-up &optional count +@deffn Command scroll-up &optional lines This function scrolls the text in the selected window upward -@var{count} lines. If @var{count} is negative, scrolling is actually +@var{lines} lines. If @var{lines} is negative, scrolling is actually downward. -If @var{count} is @code{nil} (or omitted), then the length of scroll +If @var{lines} is @code{nil} (or omitted), then the length of scroll is @code{next-screen-context-lines} lines less than the usable height of the window (not counting its modeline). @code{scroll-up} returns @code{nil}. @end deffn -@deffn Command scroll-down &optional count +@deffn Command scroll-down &optional lines This function scrolls the text in the selected window downward -@var{count} lines. If @var{count} is negative, scrolling is actually +@var{lines} lines. If @var{lines} is negative, scrolling is actually upward. -If @var{count} is omitted or @code{nil}, then the length of the scroll +If @var{lines} is omitted or @code{nil}, then the length of the scroll is @code{next-screen-context-lines} lines less than the usable height of the window (not counting its mode line). @code{scroll-down} returns @code{nil}. @end deffn -@deffn Command scroll-other-window &optional count -This function scrolls the text in another window upward @var{count} -lines. Negative values of @var{count}, or @code{nil}, are handled +@deffn Command scroll-other-window &optional lines +This function scrolls the text in another window upward @var{lines} +lines. Negative values of @var{lines}, or @code{nil}, are handled as in @code{scroll-up}. You can specify a buffer to scroll with the variable @@ -1305,26 +1353,27 @@ bottom of the window appear instead at the top. The default value is @code{2}. @end defopt -@deffn Command recenter &optional count +@deffn Command recenter &optional location window @cindex centering point -This function scrolls the selected window to put the text where point -is located at a specified vertical position within the window. +This function scrolls @var{window} (which defaults to the selected +window) to put the text where point is located at a specified vertical +position within the window. -If @var{count} is a nonnegative number, it puts the line containing -point @var{count} lines down from the top of the window. If @var{count} +If @var{location} is a nonnegative number, it puts the line containing +point @var{location} lines down from the top of the window. If @var{location} is a negative number, then it counts upward from the bottom of the window, so that @minus{}1 stands for the last usable line in the window. -If @var{count} is a non-@code{nil} list, then it stands for the line in +If @var{location} is a non-@code{nil} list, then it stands for the line in the middle of the window. -If @var{count} is @code{nil}, @code{recenter} puts the line containing +If @var{location} is @code{nil}, @code{recenter} puts the line containing point in the middle of the window, then clears and redisplays the entire selected frame. -When @code{recenter} is called interactively, @var{count} is the raw +When @code{recenter} is called interactively, @var{location} is the raw prefix argument. Thus, typing @kbd{C-u} as the prefix sets the -@var{count} to a non-@code{nil} list, while typing @kbd{C-u 4} sets -@var{count} to 4, which positions the current line four lines from the +@var{location} to a non-@code{nil} list, while typing @kbd{C-u 4} sets +@var{location} to 4, which positions the current line four lines from the top. With an argument of zero, @code{recenter} positions the current line at @@ -1336,10 +1385,10 @@ separate key binding to do this. For example, (defun line-to-top-of-window () "Scroll current line to top of window. Replaces three keystroke sequence C-u 0 C-l." - (interactive) + (interactive) (recenter 0)) -(global-set-key [kp-multiply] 'line-to-top-of-window) +(global-set-key [kp-multiply] 'line-to-top-of-window) @end group @end example @end deffn @@ -1368,14 +1417,14 @@ far as to reduce the net horizontal scroll to zero. There is no limit to how far left you can scroll, but eventually all the text will disappear off the left edge. -@deffn Command scroll-left count +@deffn Command scroll-left &optional count This function scrolls the selected window @var{count} columns to the left (or to the right if @var{count} is negative). The return value is the total amount of leftward horizontal scrolling in effect after the change---just like the value returned by @code{window-hscroll} (below). @end deffn -@deffn Command scroll-right count +@deffn Command scroll-right &optional count This function scrolls the selected window @var{count} columns to the right (or to the left if @var{count} is negative). The return value is the total amount of leftward horizontal scrolling in effect after the @@ -1433,9 +1482,9 @@ is off the screen due to horizontal scrolling: @example @group (defun hscroll-on-screen (window position) - (save-excursion + (save-excursion (goto-char position) - (and + (and (>= (- (current-column) (window-hscroll window)) 0) (< (- (current-column) (window-hscroll window)) (window-width window))))) @@ -1590,7 +1639,7 @@ and divider, if any, is not counted. This function returns the height in pixels of the text displayed in @var{window}, which defaults to the selected window. Unlike @code{window-text-area-pixel-height}, any blank space below the -end of the buffer is not included. If optional argument @var{noclipped} +end of the buffer is not included. If optional argument @var{noclipped} is non-@code{nil}, any space occupied by clipped lines will not be included. @end defun @@ -1611,20 +1660,20 @@ used. The order of the list is @code{(@var{left} @var{top} @var{right} @var{bottom})}, all elements relative to 0, 0 at the top left corner of -the frame. The element @var{right} of the value is one more than the -rightmost pixel used by @var{window} (including any left margin, right -margin, or vertical scrollbar displayed alongside it), and +@var{window}'s frame. The element @var{right} of the value is one more +than the rightmost pixel used by @var{window} (including any left +margin, right margin, or vertical scrollbar displayed alongside it), and @var{bottom} is one more than the bottommost pixel used by @var{window} -(including any modeline or horizontal scrollbar displayed above -or below it). The frame area does not include any frame menubars or -toolbars that may be displayed; thus, for example, if there is only -one window on the frame, the values for @var{left} and @var{top} will -always be 0. +(including any modeline or horizontal scrollbar displayed above or below +it). The frame area does not include any frame menubars, toolbars, or +gutters that may be displayed; thus, for example, if there is only one +window on the frame, the values for @var{left} and @var{top} will always +be 0. If @var{window} is at the upper left corner of its frame, @var{right} and @var{bottom} are the same as the values returned by @code{(window-pixel-width)} and @code{(window-pixel-height)} -respectively, and @var{top} and @var{bottom} are zero. +respectively, and @var{left} and @var{top} are zero. @end defun There is no longer a function @code{window-edges} because it does not @@ -1660,15 +1709,15 @@ that change the size of windows and low-level functions that access window size. XEmacs does not permit overlapping windows or gaps between windows, so resizing one window affects other windows. -@deffn Command enlarge-window size &optional horizontal window -This function makes the selected window @var{size} lines taller, +@deffn Command enlarge-window count &optional horizontal window +This function makes the selected window @var{count} lines taller, stealing lines from neighboring windows. It takes the lines from one window at a time until that window is used up, then takes from another. If a window from which lines are stolen shrinks below @code{window-min-height} lines, that window disappears. If @var{horizontal} is non-@code{nil}, this function makes -@var{window} wider by @var{size} columns, stealing columns instead of +@var{window} wider by @var{count} columns, stealing columns instead of lines. If a window from which columns are stolen shrinks below @code{window-min-width} columns, that window disappears. @@ -1676,15 +1725,15 @@ If the requested size would exceed that of the window's frame, then the function makes the window occupy the entire height (or width) of the frame. -If @var{size} is negative, this function shrinks the window by -@minus{}@var{size} lines or columns. If that makes the window smaller +If @var{count} is negative, this function shrinks the window by +@minus{}@var{count} lines or columns. If that makes the window smaller than the minimum size (@code{window-min-height} and @code{window-min-width}), @code{enlarge-window} deletes the window. If @var{window} is non-@code{nil}, it specifies a window to change instead of the selected window. -@code{enlarge-window} returns @code{nil}. +@code{enlarge-window} returns @code{nil}. @end deffn @deffn Command enlarge-window-horizontally columns @@ -1700,20 +1749,20 @@ It could be defined as follows: @end deffn @deffn Command enlarge-window-pixels count &optional side window -This function makes the selected window @var{count} pixels larger. When -called from Lisp, optional second argument @var{side} non-@code{nil} -means to grow sideways @var{count} pixels, and optional third argument -@var{window} specifies the window to change instead of the selected -window. +This function makes the selected window @var{count} pixels larger. +When called from Lisp, optional second argument @var{side} +non-@code{nil} means to grow sideways @var{count} pixels, and optional +third argument @var{window} specifies the window to change instead of +the selected window. @end deffn -@deffn Command shrink-window size &optional horizontal window +@deffn Command shrink-window count &optional horizontal window This function is like @code{enlarge-window} but negates the argument -@var{size}, making the selected window smaller by giving lines (or +@var{count}, making the selected window smaller by giving lines (or columns) to the other windows. If the window shrinks below @code{window-min-height} or @code{window-min-width}, then it disappears. -If @var{size} is negative, the window is enlarged by @minus{}@var{size} +If @var{count} is negative, the window is enlarged by @minus{}@var{count} lines or columns. If @var{window} is non-@code{nil}, it specifies a window to change @@ -1800,13 +1849,15 @@ configuration previously saved. configuration instead of a window configuration. @xref{Frame Configurations}. -@defun current-window-configuration -This function returns a new object representing XEmacs's current window -configuration, namely the number of windows, their sizes and current -buffers, which window is the selected window, and for each window the -displayed buffer, the display-start position, and the positions of point -and the mark. An exception is made for point in the current buffer, -whose value is not saved. +@defun current-window-configuration &optional frame +This function returns a new object representing the current current +window configuration of @var{frame}, namely the number of windows, their +sizes and current buffers, which window is the selected window, and for +each window the displayed buffer, the display-start position, and the +positions of point and the mark. An exception is made for point in the +current buffer, whose value is not saved. + +@var{frame} defaults to the selected frame. @end defun @defun set-window-configuration configuration diff --git a/man/lispref/x-windows.texi b/man/lispref/x-windows.texi index 1cadf17..04a521d 100644 --- a/man/lispref/x-windows.texi +++ b/man/lispref/x-windows.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/x-windows.texinfo @node X-Windows, ToolTalk Support, System Interface, Top @@ -72,11 +72,23 @@ This function returns the contents of cut buffer number @var{n}. (This function is called @code{x-get-cut-buffer} in FSF Emacs.) @end defun -@defun x-store-cutbuffer string +@defun x-store-cutbuffer string &optional push This function stores @var{string} into the first cut buffer (cut buffer -0), moving the other values down through the series of cut buffers, -kill-ring-style. (This function is called @code{x-set-cut-buffer} in FSF -Emacs.) +0). + +Normally, the contents of the first cut buffer are simply replaced by +@var{string}. However, if optional argument @var{push} is +non-@code{nil}, the cut buffers are rotated. This means that the +previous value of the first cut buffer moves to the second cut buffer, +and the second to the third, and so on, moving the other values down +through the series of cut buffers, kill-ring-style. There are 8 cut +buffers altogether. + +Cut buffers are considered obsolete; you should use selections instead. + +This function has no effect if support for cut buffers was not compiled in. + +This function is called @code{x-set-cut-buffer} in FSF Emacs. @end defun @node X Server @@ -237,7 +249,7 @@ be made before the connection to the X server is initialized, that is, this variable may only be changed before XEmacs is dumped, or by setting it in the file @file{lisp/term/x-win.el}. -By default, this variable is nil at startup. When the connection +By default, this variable is @code{nil} at startup. When the connection to the X server is first initialized, the X resource database will be consulted and the value will be set according to whether any resources are found for the application class ``XEmacs''. @@ -251,7 +263,7 @@ get information about the capabilities and origin of the X server corresponding to a particular device. The device argument is generally optional and defaults to the selected device. -@defun x-server-version &optional device +@defun x-server-version &optional device This function returns the list of version numbers of the X server @var{device} is on. The returned value is a list of three integers: the major and minor version numbers of the X protocol in use, and the diff --git a/man/new-users-guide/files.texi b/man/new-users-guide/files.texi index d7219b1..1cfd3bf 100644 --- a/man/new-users-guide/files.texi +++ b/man/new-users-guide/files.texi @@ -6,7 +6,7 @@ The basic unit of stored data in Unix is the @dfn{file}. To edit a file, you must tell Emacs to read the file into a buffer. This is called @dfn{visiting} the file. You can now edit the buffer and to save the -changes you must write the buffer back to the file. +changes you must write the buffer back to the file. In addition to visiting and saving files, Emacs can delete, copy, rename, and append to files, and operate on file directories. @@ -51,7 +51,7 @@ buffer is by using the @b{Describe Variable} option from the @b{Help} menu. When Emacs prompts you for the variable name to describe, type @var{default-directory}. If you wish to open a file in some other directory, use @key{DEL} or the @key{BackSpace} key to go back and type -the path name of the new directory. +the path name of the new directory. You can create a new directory by typing @kbd{M-x make-directory}. This command will prompt you for a directory name: @@ -72,7 +72,7 @@ command. Similarly, you can also remove a directory by using the command @kbd{remove-directory}. The command @kbd{M-x pwd} will print the current buffer's default directory. For more information on file names, @xref{File Names,,,xemacs,XEmacs User's Manual}. - + @node Visiting, Saving Files, File Names, Files @section Visiting Files @@ -109,14 +109,14 @@ screen with its name in the mode-line. If the filename you specify already exists in Emacs, the buffer containing that file will be selected. You will get an error message if the filename does not exist. If you still press @key{RET}, a new buffer with the given -filename will be displayed on the screen. +filename will be displayed on the screen. @item C-x C-v @kindex C-x C-v @findex find-alternate-file This command (@code{find-alternate-file}), will visit a different file instead of the one visited last. It is similar to @kbd{C-c C-f} except -that it kills the current buffer (after offering to save it). +that it kills the current buffer (after offering to save it). @item C-x 5 C-f @kindex C-x 5 C-f @@ -126,7 +126,7 @@ This command will visit a file in another frame frame. The @b{Open in New Frame...} from the @b{File} menu will do the same thing. It will prompt you for a file name in the echo area. After you type the file name and press @key{RET}, the specified file will be -read into a new buffer and displayed on a new frame. +read into a new buffer and displayed on a new frame. @end table @node Saving Files, , Visiting, Files @@ -153,7 +153,7 @@ Wrote /usr/workspace/myfile.texinfo @noindent Try using this command twice. You will get the above message the first time you use this command, the second time you will get the following -message: +message: @example (No changes need to be saved) @@ -161,7 +161,7 @@ message: @noindent This message indicates that you haven't made any changes since the last -time you saved the file. +time you saved the file. @item C-x s @kindex C-x s @@ -175,7 +175,7 @@ Save file /usr/workspace/myfile.texinfo? (y or n) @noindent You will get the above message for all the buffers. Type "y" if you want -to save the buffer. +to save the buffer. @item C-x C-w @findex write file @@ -191,17 +191,17 @@ Write file: /usr/workspace/ @noindent After you type in a file name, press @key{RET}. The buffer will be saved in a new file. You can make copies of a particular file using this -command. +command. @end table You can also undo all the changes made since the file was visited or saved by reading the text from the file again (called @dfn{reverting}). For more information on this option, -@xref{Reverting,,,xemacs,XEmacs User's Manual}. +@xref{Reverting,,,xemacs,XEmacs User's Manual}. @vindex make-backup-files When you save a file in Emacs, it destroys its old contents. However, -if you set the variable @var{make-backup-files} to non-@var{nil} +if you set the variable @var{make-backup-files} to non-@code{nil} i.e. @samp{t}, Emacs will create a @dfn{backup} file. Select the @b{Describe variable} option from the @b{Help} menu and look at the documentation for this variable. Its default value should be @@ -209,7 +209,7 @@ documentation for this variable. Its default value should be to @samp{t} (@pxref{Setting Variables}). The backup file will contain the contents from the last time you visited the file. Emacs also provides options for creating numbered backups. For more information on -backups, @xref{Backup,,,xemacs,XEmacs User's Manual}. +backups, @xref{Backup,,,xemacs,XEmacs User's Manual}. @cindex auto saving Emacs also saves all the files from time to time so that in case of a @@ -219,7 +219,7 @@ being saved automatically. The auto saved files are named by putting the character @samp{#} in front and back. For example a file called "myfile.texinfo" would be named as @file{#myfile.texinfo#}. For information on controlling auto-saving and recovering data from -auto-saving, @xref{Auto Save Files,,,xemacs,XEmacs User's Manual}. +auto-saving, @xref{Auto Save Files,,,xemacs,XEmacs User's Manual}. @cindex simultaneous editing Emacs provides protection from simultaneous editing which occurs if @@ -230,9 +230,9 @@ the user about the lock and provide some options. For more information on protection against simultaneous editing, @xref{Interlocking,,,xemacs,XEmacs User's Manual}. - - + + diff --git a/man/new-users-guide/search.texi b/man/new-users-guide/search.texi index cedc71e..d4cc7f6 100644 --- a/man/new-users-guide/search.texi +++ b/man/new-users-guide/search.texi @@ -12,9 +12,9 @@ of the text they are searching, i.e. if you are searching for "String", then "string" will also be one of the selections. If you want a case sensitive search select the @b{Case Sensitive Search} from the @b{Option} menu. You can also set the variable @var{case-fold-search} to -@var{nil} for making searches case-sensitive. For information on setting +@code{nil} for making searches case-sensitive. For information on setting variables, @xref{Setting Variables}. The two commands for searching for -strings in XEmacs are: +strings in XEmacs are: @table @kbd @item C-s @@ -34,9 +34,9 @@ string which has been found so far. If you find the correct match just hit @key{RET} or type @kbd{C-f} or @kbd{C-b} to set the cursor's position. If you find a matching string "myname" but you were looking for a different occurrence of it, use @kbd{C-s} again. If the search is -unable to find the string, it will give you an error message. +unable to find the string, it will give you an error message. -@item C-r +@item C-r @findex isearch-backward @kindex C-r This command will perform an incremental search in the backward @@ -56,7 +56,7 @@ you an error message. If you make a mistake while typing the string names when you use the above commands, you can use the @key{DEL} key to erase characters. Each @key{DEL} will erase the last character. At any time if you want to quit -the search, just type @kbd{C-g}. +the search, just type @kbd{C-g}. To do a non-incremental search i.e. to start the search only after you have typed the whole string you can use the following commands: @@ -64,7 +64,7 @@ you have typed the whole string you can use the following commands: @table @kbd @item C-s RET @dfn{string} RET This command will search for the specified string in the forward -direction and will give an error message if the string is not found. +direction and will give an error message if the string is not found. @item C-r RET @dfn{string} RET This command will search for the specified string in the backward @@ -72,13 +72,13 @@ direction. @end table For information on how Emacs searches for words and regular -expressions, @xref{Search,,,xemacs,XEmacs User's Manual}. +expressions, @xref{Search,,,xemacs,XEmacs User's Manual}. To replace all occurrences of a string in Emacs, you can use the -following command: +following command: @findex replace-string @example -M-x replace-string +M-x replace-string @end example @noindent @@ -111,8 +111,8 @@ check the spelling of a word or a region. You can use menus to check for spellings: @noindent -Evaluate the expression @code{(load "big-menubar")}. To evaluate this +Evaluate the expression @code{(load "big-menubar")}. To evaluate this expression you need to hit the @key{META} or the @key{ESC} key twice and type in the expression in the echo area before hitting @key{RET}. You will get an extensive menubar. Select the @b{Spell Check} menu item from -the @b{Utilities} menu for checking spellings. +the @b{Utilities} menu for checking spellings. diff --git a/man/widget.texi b/man/widget.texi index 46f6bd1..4a797d5 100644 --- a/man/widget.texi +++ b/man/widget.texi @@ -94,7 +94,7 @@ implement forms are: @enumerate @item -More complex field than just editable text are supported. +More complex fields than just editable text are supported. @item You can give the user immediate feedback if he enters invalid data in a text field, and sometimes prevent entering invalid data. @@ -430,7 +430,7 @@ NAME ::= (NAME [KEYWORD ARGUMENT]... ARGS) | NAME @end example -Where, @var{name} is a widget name, @var{keyword} is the name of a +where @var{name} is a widget name, @var{keyword} is the name of a property, @var{argument} is the value of the property, and @var{args} are interpreted in a widget specific way. @@ -510,7 +510,7 @@ The value of the symbol is expanded according to this table. @end table @item :doc -The string inserted by the @samp{%d} escape in the format +The string inserted by the @samp{%d} or @samp{%h} escape in the format string. @item :tag @@ -559,7 +559,7 @@ Should be a function called with two arguments, the widget and a value, and returning non-nil if the widget can represent the specified value. @item :validate -A function which takes a widget as an argument, and return nil if the +A function which takes a widget as an argument, and returns nil if the widget's current value is valid for the widget. Otherwise it should return the widget containing the invalid data, and set that widget's @code{:error} property to a string explaining the error. @@ -722,8 +722,10 @@ The following extra properties are recognized. @table @code @item :size -The width of the editable field.@* -By default the field will reach to the end of the line. +The minimum width of the editable field.@* +By default the field will reach to the end of the line. If the +content is too large, the displayed representation will expand to +contain it. The content is not truncated to size. @item :value-face Face used for highlighting the editable field. Default is @@ -742,7 +744,7 @@ which matches everything. @item :keymap Keymap used in the editable field. The default value is @code{widget-field-keymap}, which allows you to use all the normal -editing commands, even if the buffers major mode suppress some of them. +editing commands, even if the buffer's major mode suppress some of them. Pressing return invokes the function specified by @code{:action}. @end table diff --git a/man/xemacs-faq.texi b/man/xemacs-faq.texi index 7014895..d683baa 100644 --- a/man/xemacs-faq.texi +++ b/man/xemacs-faq.texi @@ -7,7 +7,7 @@ @finalout @titlepage @title XEmacs FAQ -@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2000/09/19 07:50:41 $ +@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2000/11/02 21:51:16 $ @sp 1 @author Tony Rossini @author Ben Wing @@ -148,6 +148,8 @@ Installation and Trouble Shooting * Q2.0.10:: After I run configure I find a coredump, is something wrong? * Q2.0.11:: XEmacs can't resolve host names. * Q2.0.12:: Why can't I strip XEmacs? +* Q2.0.13:: I don't need no steenkin' packages. Do I? (NEW) +* Q2.0.14:: How do I figure out which packages to install? (NEW) Trouble Shooting: * Q2.1.1:: XEmacs just crashed on me! @@ -174,6 +176,7 @@ Trouble Shooting: * Q2.1.22:: XEmacs seems to take a really long time to do some things. * Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. * Q2.1.24:: XEmacs won't start without network. (NEW) +* Q2.1.25:: After upgrading, XEmacs won't do `foo' any more! (NEW) Customization and Options @@ -787,23 +790,23 @@ developers responsible for the 19.16/20.x releases are: @itemize @bullet @item @email{martin@@xemacs.org, Martin Buchholz} -@ifhtml +@html
Portrait of Martin Buchholz
-@end ifhtml +@end html @item @email{steve@@xemacs.org, Steve Baur} -@ifhtml +@html
Portrait of Steve Baur
-@end ifhtml +@end html @item @email{hniksic@@xemacs.org, Hrvoje Niksic} -@ifhtml +@html
Portrait of Hrvoje Niksic
-@end ifhtml +@end html @end itemize @@ -811,26 +814,26 @@ The developers responsible for the 19.14 release are: @itemize @bullet @item @email{cthomp@@xemacs.org, Chuck Thompson} -@ifhtml +@html
Portrait of Chuck Thompson
-@end ifhtml +@end html Chuck was Mr. XEmacs from 19.11 through 19.14, and is responsible for XEmacs becoming a widely distributed program over the Internet. @item @email{ben@@xemacs.org, Ben Wing} -@ifhtml +@html
Portrait of Ben Wing
-@end ifhtml +@end html @end itemize @itemize @bullet @item @email{jwz@@jwz.org, Jamie Zawinski} -@ifhtml +@html
Portrait of Jamie Zawinski
-@end ifhtml +@end html Jamie Zawinski was Mr. Lucid Emacs from 19.0 through 19.10, the last release actually named Lucid Emacs. Richard Mlynarik was crucial to @@ -1212,6 +1215,8 @@ Installation: * Q2.0.10:: After I run configure I find a coredump, is something wrong? * Q2.0.11:: XEmacs can't resolve host names. * Q2.0.12:: Why can't I strip XEmacs? +* Q2.0.13:: I don't need no steenkin' packages. Do I? (NEW) +* Q2.0.14:: I don't want to install a million .els one at a time! (NEW) Trouble Shooting: * Q2.1.1:: XEmacs just crashed on me! @@ -1238,6 +1243,7 @@ Trouble Shooting: * Q2.1.22:: XEmacs seems to take a really long time to do some things. * Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. * Q2.1.24:: XEmacs won't start without network. (NEW) +* Q2.1.25:: After upgrading, XEmacs won't do `foo' any more! (NEW) @end menu @node Q2.0.1, Q2.0.2, Installation, Installation @@ -1520,7 +1526,7 @@ check to see if you've put DNS in the shared libc and will then proceed to link against the DNS resolver library code. @end quotation -@node Q2.0.12, Q2.1.1, Q2.0.11, Installation +@node Q2.0.12, Q2.0.13, Q2.0.11, Installation @unnumberedsubsec Q2.0.12: Why can't I strip XEmacs? @email{cognot@@fronsac.ensg.u-nancy.fr, Richard Cognot} writes: @@ -1575,7 +1581,42 @@ cp lib-src/DOC-19.16-XEmacs @end enumerate @end quotation -@node Q2.1.1, Q2.1.2, Q2.0.12, Installation +@node Q2.0.13, Q2.0.14, Q2.0.12, Installation +@unnumberedsubsec Q2.0.13: I don't need no steenkin' packages. Do I? (NEW) + +Strictly speaking, no. XEmacs will build and install just fine without +any packages installed. However, only the most basic editing functions +will be available with no packages installed, so installing packages is +an essential part of making your installed XEmacs _useful_. + +@node Q2.0.14, Q2.1.1, Q2.0.13, Installation +@unnumberedsubsec Q2.0.12: How do I figure out which packages to install? (NEW) + +Many people really liked the old way that packages were bundled and do +not want to mess with packages at all. You can grab all the packages at +once like you used to with old XEmacs versions. Download the file + +@file{xemacs-sumo.tar.gz} + +For an XEmacs compiled with Mule you also need + +@file{xemacs-mule-sumo.tar.gz} + +from the @file{packages} directory on your XEmacs mirror archive. +N.B. They are called 'Sumo Tarballs' for good reason. They are +currently about 15MB and 2.3MB (gzipped) respectively. + +Install them by + +@code{cd $prefix/lib/xemacs ; gunzip -c | tar xf -} + +See README.packages for more detailed installation instructions. + +As the Sumo tarballs are not regenerated as often as the individual +packages, it is recommended that you use the automatic package tools +afterwards to pick up any recent updates. + +@node Q2.1.1, Q2.1.2, Q2.0.14, Installation @unnumberedsec 2.1: Trouble Shooting @unnumberedsubsec Q2.1.1: Help! XEmacs just crashed on me! @@ -2274,7 +2315,7 @@ and uncomment the line that reads: @end example @end quotation -@node Q2.1.24, , Q2.1.23, Installation +@node Q2.1.24, Q2.1.25, Q2.1.23, Installation @unnumberedsubsec Q2.1.24: XEmacs won't start without network. (NEW) If XEmacs starts when you're on the network, but fails when you're not @@ -2287,6 +2328,18 @@ on the network, you may be missing a "localhost" entry in your Add that line, and XEmacs will be happy. +@node Q2.1.25, , Q2.1.24, Installation +@unnumberedsubsec Q2.1.25:: After upgrading, XEmacs won't do `foo' any more! (NEW) + +You have been used to doing `foo', but now when you invoke it (or click +the toolbar button or select the menu item), nothing (or an error) +happens. The simplest explanation is that you are missing a package +that is essential to you. You can either track it down and install it +(there is a list of packages and brief descriptions of their contents in +@file{etc/PACKAGES}), or install the `Sumo Tarball' (see @pxref{Q2.0.14}). + +@c #### should xref to XEmacs manual here + @node Customization, Subsystems, Installation, Top @unnumbered 3 Customization and Options diff --git a/man/xemacs/abbrevs.texi b/man/xemacs/abbrevs.texi index f7fd2ac..28a6814 100644 --- a/man/xemacs/abbrevs.texi +++ b/man/xemacs/abbrevs.texi @@ -1,5 +1,5 @@ -@node Abbrevs, Picture, Packages, Top +@node Abbrevs, Picture, Running, Top @chapter Abbrevs @cindex abbrevs @cindex expansion (of abbrevs) diff --git a/man/xemacs/basic.texi b/man/xemacs/basic.texi index 542d289..0d6b4e5 100644 --- a/man/xemacs/basic.texi +++ b/man/xemacs/basic.texi @@ -1,7 +1,7 @@ @c This is part of the XEmacs manual. @c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc. @c See file xemacs.texi for copying conditions. -@node Basic, Undo, Startup Paths, Top +@node Basic, Undo, Packages, Top @chapter Basic Editing Commands @kindex C-h t diff --git a/man/xemacs/building.texi b/man/xemacs/building.texi index e7d3589..479a53d 100644 --- a/man/xemacs/building.texi +++ b/man/xemacs/building.texi @@ -1,5 +1,5 @@ -@node Running, Packages, Programs, Top +@node Running, Abbrevs, Programs, Top @chapter Compiling and Testing Programs The previous chapter discusses the Emacs commands that are useful for @@ -71,7 +71,7 @@ compilation is finished. You do not have to keep this buffer visible; compilation continues in any case. @findex kill-compilation - To kill the compilation process, type @kbd{M-x-kill-compilation}. The mode + To kill the compilation process, type @kbd{M-x kill-compilation}. The mode line of the @samp{*compilation*} buffer changes to say @samp{signal} instead of @samp{run}. Starting a new compilation also kills any running compilation, as only one can occur at any time. Starting a new diff --git a/man/xemacs/files.texi b/man/xemacs/files.texi index 7ee4fcf..ba63163 100644 --- a/man/xemacs/files.texi +++ b/man/xemacs/files.texi @@ -212,8 +212,10 @@ non-@code{nil}, the @code{find-file} command will check the @code{buffer-file-truename} of all visited files when deciding whether a given file is already in a buffer, instead of just @code{buffer-file-name}. If you attempt to visit another file which is -a hard-link or symbolic-link to a file that is already in a buffer, the -existing buffer will be found instead of a newly created one. +a symbolic link to a file that is already in a buffer, the existing +buffer will be found instead of a newly created one. This works if any +component of the pathname (including a non-terminal component) is a +symbolic link as well, but doesn't work with hard links (nothing does). @cindex creating files If you want to create a file, just visit it. Emacs prints diff --git a/man/xemacs/menus.texi b/man/xemacs/menus.texi index d64afe4..6513323 100644 --- a/man/xemacs/menus.texi +++ b/man/xemacs/menus.texi @@ -21,6 +21,9 @@ Perform standard editing operations, such as cutting, copying, pasting, and killing selected text. @cindex Edit menu +@c #### The Mule menu needs to be documented, but this is not the place +@c for it since Ben just moved it. + @item Apps Access to sub-applications implemented within XEmacs, such as the mail reader, the World Wide Web browser, the spell-checker, and the calendar diff --git a/man/xemacs/packages.texi b/man/xemacs/packages.texi index 15197a9..ccd8f07 100644 --- a/man/xemacs/packages.texi +++ b/man/xemacs/packages.texi @@ -1,4 +1,7 @@ -@node Packages, Abbrevs, Running, Top +@c This is part of the XEmacs manual. +@c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc. +@c See file xemacs.texi for copying conditions. +@node Packages, Basic, Startup Paths, Top @comment node-name, next, previous, up @section Packages @@ -16,6 +19,7 @@ local needs with safe removal of unnecessary code. * Package Terminology:: Understanding different kinds of packages. * Using Packages:: How to install and use packages. * Building Packages:: Building packages from sources. +* Available Packages:: A brief, out-of-date, directory of packaged LISP. @end menu @node Package Terminology, Using Packages, , Packages @@ -335,7 +339,7 @@ changed packages. @end enumerate -@node Building Packages, , Using Packages, Packages +@node Building Packages, Available Packages, Using Packages, Packages @comment node-name, next, previous, up Source packages are available from the @file{packages/source-packages} @@ -397,3 +401,272 @@ Runs the rules @code{srckit} followed by @code{binkit}. This is primarily of use by XEmacs maintainers producing files for distribution. @end table + +@node Available Packages, , Building Packages, Packages +@comment node-name, next, previous, up + +This section is surely out-of-date. If you're sure that XEmacs is +able to do something, but your installed XEmacs won't do it for you, +it's probably in a package. If you can't find it in this section, +that's a bug---please report it. It is very hard to keep this section +up-to-date; your reports, comments, and questions will help a lot. + +This data is up-to-date as of 10 February 1999. (Ouch! I told you!) + +@subsection Library Packages (libs) + +These packages are required to build and support most of the rest of +XEmacs. By design, xemacs-base is a `regular' package. Use restraint +when adding new files there as it is required by almost everything. + +@table @file +@item Sun +Support for Sparcworks. + +@item apel +A Portable Emacs Library. Used by XEmacs MIME support. + +@item edebug +A Lisp debugger. + +@item dired +The DIRectory EDitor is for manipulating, and running commands on +files in a directory. + +@item efs +Treat files on remote systems the same as local files. + +@item mail-lib +Fundamental lisp files for providing email support. + +@item tooltalk +Support for building with Tooltalk. + +@item xemacs-base +Fundamental XEmacs support. Install this unless you wish a totally +naked XEmacs. + +@item xemacs-devel +XEmacs Lisp developer support. This package contains utilities for +supporting Lisp development. It is a single-file package so it may be +tailored. +@end table + +@subsection Communications Packages (comm) + +These packages provide support for various communications, primarily +email and usenet. + +@table @file +@item footnote +Footnoting in mail message editing modes. + +@item gnats +XEmacs bug reports. + +@item gnus +The Gnus Newsreader and Mailreader. + +@item mailcrypt +Support for messaging encryption with PGP. + +@item mh-e +Front end support for MH. + +@item net-utils +Miscellaneous Networking Utilities. This is a single-file package and +files may be deleted at will. + +@item ph +Emacs implementation of the ph client to CCSO/qi directory servers. + +@item rmail +An obsolete Emacs mailer. If you do not already use it don't start. + +@item supercite +An Emacs citation tool. Useful with all Emacs Mailers and Newsreaders. + +@item tm +Emacs MIME support. + +@item vm +An Emacs mailer. + +@item w3 +A Web browser. +@end table + +@subsection Games and Amusements (games) + +@table @file +@item cookie +Spook and Yow (Zippy quotes). + +@item games +Tetris, Sokoban, and Snake. + +@item mine +Minehunt. + +@item misc-games +Other amusements and diversions. +@end table + +@subsection Mule Support (mule) + +@table @file +@item egg-its +Wnn (4.2 and 6) support. SJ3 support. Must be installed prior to +XEmacs build. + +@item leim +Quail. Used for everything other than English and Japanese. + +@item locale +Used for localized menubars (French and Japanese) and localized splash +screens (Japanese). + +@item mule-base +Basic Mule support. Must be installed prior to building with Mule. + +@item skk +Another Japanese Language Input Method. Can be used without a +separate process running as a dictionary server. +@end table + +@subsection Productivity Packages (oa) + +@table @file +@item calendar +Calendar and diary support. + +@item edit-utils +Single file lisp packages for various XEmacs goodies. Load this and +weed out the junk you don't want. + +@item forms +Forms editing support (obsolete, use the builtin Widget instead). + +@item frame-icon +Provide a WM icon based on major mode. + +@item hm--html-menus +HTML editing. + +@item ispell +Spell-checking with ispell. + +@item pc +PC style interface emulation. + +@item psgml +Validated HTML/SGML editing. + +@item sgml +SGML/Linuxdoc-SGML editing. + +@item slider +User interface tool. + +@item speedbar +??? Document me. + +@item strokes +Mouse enhancement utility. + +@item text-modes +Various single file lisp packages for editing text files. + +@item time +Display time & date on the modeline. +@end table + +@subsection Operating System Utilities (os) + +@table @file +@item eterm +Terminal emulator. + +@item igrep +Enhanced front-end for Grep. + +@item ilisp +Front-end for Inferior Lisp. + +@item os-utils +Miscellaneous single-file O/S utilities, for printing, archiving, +compression, remote shells, etc. + +@item view-process +A Unix process browsing tool. +@end table + +@subsection Program Editing Support (prog) + +@table @file +@item ada +Ada language support. + +@item c-support +Basic single-file add-ons for editing C code. + +@item cc-mode +C, C++ and Java language support. + +@item debug +GUD, gdb, dbx debugging support. + +@item ediff +Interface over patch. + +@item emerge +Another interface over patch. + +@item pcl-cvs +CVS frontend. + +@item prog-modes +Miscellaneous single-file lisp files for various programming languages. + +@item scheme +Front-end support for Inferior Scheme. + +@item sh-script +Support for editing shell scripts. + +@item vc +Version Control for Free systems. + +@item vc-cc +Version Control for ClearCase. This package must be installed prior +to building XEmacs [broken as of XEmacs 20.5-beta19]. + +@item vhdl +Support for VHDL. +@end table + +@subsection Word Processing (wp) + +@table @file +@item auctex +Basic TeX/LaTeX support. + +@item crisp +Crisp/Brief emulation. + +@item edt +DEC EDIT/EDT emulation. + +@item texinfo +XEmacs TeXinfo support. + +@item textools +Single-file TeX support. + +@item tpu +DEC EDIT/TPU support. + +@item viper +VI emulation support. +@end table + diff --git a/man/xemacs/startup.texi b/man/xemacs/startup.texi index f7bd171..dde0945 100644 --- a/man/xemacs/startup.texi +++ b/man/xemacs/startup.texi @@ -1,4 +1,4 @@ -@node Startup Paths, Basic, Command Switches, Top +@node Startup Paths, Packages, Command Switches, Top @comment node-name, next, previous, up @section How XEmacs finds Directories and Files diff --git a/man/xemacs/windows.texi b/man/xemacs/windows.texi index 17e903e..2dd07c3 100644 --- a/man/xemacs/windows.texi +++ b/man/xemacs/windows.texi @@ -6,7 +6,7 @@ Emacs can split the frame into two or many windows, which can display parts of different buffers or different parts of one buffer. If you are running XEmacs under X, that means you can have the X window that contains -the Emacs frame have multiple subwindows. +the Emacs frame have multiple subwindows. @menu * Basic Window:: Introduction to Emacs windows. @@ -30,7 +30,7 @@ show different parts of it, because each window has its own value of point. displayed by that window is the current buffer. The cursor shows the location of point in that window. Each other window has a location of point as well, but since the terminal has only one cursor, it -cannot show the location of point in the other windows. +cannot show the location of point in the other windows. Commands to move point affect the value of point for the selected Emacs window only. They do not change the value of point in any other Emacs @@ -127,7 +127,7 @@ order, generally top to bottom and left to right. From the rightmost and bottommost window, it goes back to the one at the upper left corner. A numeric argument, @var{n}, moves several steps in the cyclic order of windows. A negative numeric argument moves around the cycle in the -opposite order. If the optional second argument @var{all-frames} is +opposite order. If the optional second argument @var{which-frames} is non-@code{nil}, the function cycles through all frames. When the minibuffer is active, the minibuffer is the last window in the cycle; you can switch from the minibuffer window to one of the other windows, @@ -146,7 +146,7 @@ are no more windows. The usual scrolling commands (@pxref{Display}) apply to the selected window only. @kbd{M-C-v} (@code{scroll-other-window}) scrolls the window that @kbd{C-x o} would select. Like @kbd{C-v}, it takes positive -and negative arguments. +and negative arguments. @findex compare-windows The command @kbd{M-x compare-windows} compares the text in the current @@ -178,7 +178,7 @@ buffer to select. @findex mail-other-window @table @kbd @item C-x 4 b @var{bufname} @key{RET} -Select buffer @var{bufname} in another window. This runs +Select buffer @var{bufname} in another window. This runs @code{switch-to-buffer-other-window}. @item C-x 4 f @var{filename} @key{RET} Visit file @var{filename} and select its buffer in another window. This @@ -209,10 +209,10 @@ work using this function. @table @kbd @item C-x 0 -Get rid of the selected window (@code{delete-window}). That is a zero. +Get rid of the selected window (@code{delete-window}). That is a zero. If there is more than one Emacs frame, deleting the sole remaining window on that frame deletes the frame as well. If the current frame -is the only frame, it is not deleted. +is the only frame, it is not deleted. @item C-x 1 Get rid of all windows except the selected one (@code{delete-other-windows}). diff --git a/man/xemacs/xemacs.texi b/man/xemacs/xemacs.texi index 8dc6609..abb9efb 100644 --- a/man/xemacs/xemacs.texi +++ b/man/xemacs/xemacs.texi @@ -129,7 +129,8 @@ Important General Concepts * Command Switches:: Hairy startup options. * Startup Paths:: - How XEmacs finds Directories and Files + How XEmacs finds Directories and Files. +* Packages:: How XEmacs organizes its high-level functionality. Fundamental Editing Commands * Basic:: The most basic editing commands. @@ -168,7 +169,6 @@ Advanced Features * Text:: Commands and modes for editing English. * Programs:: Commands and modes for editing programs. * Running:: Compiling, running and debugging programs. -* Packages:: How to add new packages to XEmacs. * Abbrevs:: How to define text abbreviations to reduce the number of characters you must type. * Picture:: Editing pictures made up of characters @@ -234,6 +234,13 @@ Pull-down Menus * Menu Customization:: Adding and removing menu items and related operations. +Packages + +* Packages:: Introduction to XEmacs Packages. +* Package Terminology:: Understanding different kinds of packages. +* Using Packages:: How to install and use packages. +* Building Packages:: Building packages from sources. + Basic Editing Commands * Blank Lines:: Commands to make or delete blank lines. @@ -503,13 +510,6 @@ Lisp Libraries * Compiling Libraries:: Compiling a library makes it load and run faster. * Mocklisp:: Converting Mocklisp to Lisp so XEmacs can run it. -Packages - -* Packages:: Introduction to XEmacs Packages. -* Package Terminology:: Understanding different kinds of packages. -* Using Packages:: How to install and use packages. -* Building Packages:: Building packages from sources. - Abbrevs * Defining Abbrevs:: Defining an abbrev, so it will expand when typed. diff --git a/modules/base64/base64.c b/modules/base64/base64.c index 48459a7..2c5bac1 100644 --- a/modules/base64/base64.c +++ b/modules/base64/base64.c @@ -66,7 +66,7 @@ determined. Else assume binary coding if all else fails. /* set up the in stream */ if (BUFFERP (object)) { - struct buffer *b = decode_buffer (object, 1); + struct buffer *b = XBUFFER (object); Bufpos begv, endv; /* Figure out where we need to get info from */ get_buffer_range_char (b, start, end, &begv, &endv, GB_ALLOW_NIL); @@ -256,7 +256,7 @@ determined. Else assume binary coding if all else fails. /* set up the in stream */ if (BUFFERP (object)) { - struct buffer *b = decode_buffer (object, 1); + struct buffer *b = XBUFFER (object); Bufpos begv, endv; /* Figure out where we need to get info from */ get_buffer_range_char (b, start, end, &begv, &endv, GB_ALLOW_NIL); diff --git a/nt/ChangeLog b/nt/ChangeLog index d91476c..90971b2 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,27 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-10-27 Martin Buchholz + + * config.h: Oops, _getpt ==> _getpty + +2000-10-11 Martin Buchholz + + * config.h (HAVE_XFREE86): Remove. + (HAVE_XREGISTERIMINSTANTIATECALLBACK): New. + (XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE): New. + +2000-10-10 Martin Buchholz + + * config.h: + Sync with pty/signaling related changes to src/config.h.in + +2000-10-07 Adrian Aichner + + * xemacs.mak (default): Enforce runnig nmake from xemacs.mak's + directory to avoid problems with relative paths. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. diff --git a/nt/README b/nt/README index dba6c22..439eda5 100644 --- a/nt/README +++ b/nt/README @@ -137,7 +137,7 @@ If you want support for X you will also need: it somewhere. Copy nt\tiff.mak from the xemacs sources to the contrib\winnt subdirectory of the tiff sources, cd to that directory and build libtiff with 'nmake -f tiff.mak'. Note: tiff.mak has only been - verified to work under WinNT, not Win95 or 98. However, the lastest + verified to work under WinNT, not Win95 or 98. However, the latest distribution of libtiff includes a contrib\win95\makefile.w95; that might work. diff --git a/nt/config.h b/nt/config.h index 34ac06b..6dd1f1c 100644 --- a/nt/config.h +++ b/nt/config.h @@ -92,8 +92,8 @@ Boston, MA 02111-1307, USA. */ #define FUNCPROTO 15 #endif -/* Define this if you're using XFree386. */ -#undef HAVE_XFREE386 +#define HAVE_XREGISTERIMINSTANTIATECALLBACK +#undef XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE #undef THIS_IS_X11R4 #undef THIS_IS_X11R5 @@ -148,7 +148,6 @@ Boston, MA 02111-1307, USA. */ /* Some things figured out by the configure script, grouped as they are in configure.in. */ #undef HAVE_MACH_MACH_H -#undef HAVE_SYS_STROPTS_H #undef HAVE_SYS_TIMEB_H #undef HAVE_UNISTD_H #undef HAVE_UTIME_H @@ -261,6 +260,22 @@ Boston, MA 02111-1307, USA. */ #undef HAVE_TZSET #undef HAVE_UTIMES #undef HAVE_WAITPID +#undef HAVE_VSNPRINTF + +/* PTY support functions */ +#undef HAVE_GETPT /* glibc's easy pty allocation function */ +#undef HAVE__GETPTY /* SGI's easy pty allocation function */ +#undef HAVE_OPENPTY /* BSD's easy pty allocation function */ +#undef HAVE_GRANTPT /* Unix98 */ +#undef HAVE_UNLOCKPT /* Unix98 */ +#undef HAVE_PTSNAME /* Unix98 */ +#undef HAVE_KILLPG /* BSD */ +#undef HAVE_TCGETPGRP /* Posix 1 */ +#undef HAVE_ISASTREAM /* SysV streams */ +#undef HAVE_PTY_H /* Linux, Tru64 openpty */ +#undef HAVE_LIBUTIL_H /* BSD openpty */ +#undef HAVE_STROPTS_H /* SysV streams */ +#undef HAVE_STRTIO_H /* SysV streams TIOCSIGNAL */ #define HAVE_SOCKETS #undef HAVE_SOCKADDR_SUN_LEN diff --git a/nt/xemacs.mak b/nt/xemacs.mak index b0ffd19..f081407 100644 --- a/nt/xemacs.mak +++ b/nt/xemacs.mak @@ -26,7 +26,14 @@ default: all -XEMACS=.. +# APA: Since there seems to be no way to determine the directory where +# xemacs.mak is located (from within nmake) we just insist on the user +# to invoke nmake in the directory where xemacs.mak is. +!if !exist("$(MAKEDIR)\xemacs.mak") +!error Please run nmake from the directory of this makefile (xemacs\nt). +!endif + +XEMACS=$(MAKEDIR)\.. LISP=$(XEMACS)\lisp LIB_SRC=$(XEMACS)\lib-src MODULES=$(XEMACS)\modules diff --git a/src/alloc.c b/src/alloc.c index 008689b..b069424 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1006,9 +1006,9 @@ list6 (Lisp_Object obj0, Lisp_Object obj1, Lisp_Object obj2, Lisp_Object obj3, } DEFUN ("make-list", Fmake_list, 2, 2, 0, /* -Return a new list of length LENGTH, with each element being INIT. +Return a new list of length LENGTH, with each element being OBJECT. */ - (length, init)) + (length, object)) { CHECK_NATNUM (length); @@ -1017,7 +1017,7 @@ Return a new list of length LENGTH, with each element being INIT. size_t size = XINT (length); while (size--) - val = Fcons (init, val); + val = Fcons (object, val); return val; } } @@ -1128,13 +1128,13 @@ make_vector_internal (size_t sizei) } Lisp_Object -make_vector (size_t length, Lisp_Object init) +make_vector (size_t length, Lisp_Object object) { Lisp_Vector *vecp = make_vector_internal (length); Lisp_Object *p = vector_data (vecp); while (length--) - *p++ = init; + *p++ = object; { Lisp_Object vector; @@ -1144,13 +1144,13 @@ make_vector (size_t length, Lisp_Object init) } DEFUN ("make-vector", Fmake_vector, 2, 2, 0, /* -Return a new vector of length LENGTH, with each element being INIT. +Return a new vector of length LENGTH, with each element being OBJECT. See also the function `vector'. */ - (length, init)) + (length, object)) { CONCHECK_NATNUM (length); - return make_vector (XINT (length), init); + return make_vector (XINT (length), object); } DEFUN ("vector", Fvector, 0, MANY, 0, /* @@ -1299,14 +1299,14 @@ make_bit_vector_internal (size_t sizei) } Lisp_Object -make_bit_vector (size_t length, Lisp_Object init) +make_bit_vector (size_t length, Lisp_Object bit) { Lisp_Bit_Vector *p = make_bit_vector_internal (length); size_t num_longs = BIT_VECTOR_LONG_STORAGE (length); - CHECK_BIT (init); + CHECK_BIT (bit); - if (ZEROP (init)) + if (ZEROP (bit)) memset (p->bits, 0, num_longs * sizeof (long)); else { @@ -1342,19 +1342,20 @@ make_bit_vector_from_byte_vector (unsigned char *bytevec, size_t length) } DEFUN ("make-bit-vector", Fmake_bit_vector, 2, 2, 0, /* -Return a new bit vector of length LENGTH. with each bit being INIT. -Each element is set to INIT. See also the function `bit-vector'. +Return a new bit vector of length LENGTH. with each bit set to BIT. +BIT must be one of the integers 0 or 1. See also the function `bit-vector'. */ - (length, init)) + (length, bit)) { CONCHECK_NATNUM (length); - return make_bit_vector (XINT (length), init); + return make_bit_vector (XINT (length), bit); } DEFUN ("bit-vector", Fbit_vector, 0, MANY, 0, /* Return a newly created bit vector with specified arguments as elements. Any number of arguments, even zero arguments, are allowed. +Each argument must be one of the integers 0 or 1. */ (int nargs, Lisp_Object *args)) { @@ -2035,21 +2036,21 @@ set_string_char (Lisp_String *s, Charcount i, Emchar c) #endif /* MULE */ DEFUN ("make-string", Fmake_string, 2, 2, 0, /* -Return a new string of length LENGTH, with each character being INIT. -LENGTH must be an integer and INIT must be a character. +Return a new string consisting of LENGTH copies of CHARACTER. +LENGTH must be a non-negative integer. */ - (length, init)) + (length, character)) { CHECK_NATNUM (length); - CHECK_CHAR_COERCE_INT (init); + CHECK_CHAR_COERCE_INT (character); { Bufbyte init_str[MAX_EMCHAR_LEN]; - int len = set_charptr_emchar (init_str, XCHAR (init)); + int len = set_charptr_emchar (init_str, XCHAR (character)); Lisp_Object val = make_uninit_string (len * XINT (length)); if (len == 1) /* Optimize the single-byte case */ - memset (XSTRING_DATA (val), XCHAR (init), XSTRING_LENGTH (val)); + memset (XSTRING_DATA (val), XCHAR (character), XSTRING_LENGTH (val)); else { size_t i; @@ -2324,9 +2325,9 @@ Make a copy of OBJECT in pure storage. Recursively copies contents of vectors and cons cells. Does not copy symbols. */ - (obj)) + (object)) { - return obj; + return object; } @@ -2679,12 +2680,10 @@ sweep_bit_vectors_1 (Lisp_Object *prev, #define SWEEP_FIXED_TYPE_BLOCK(typename, obj_type) \ do { \ struct typename##_block *SFTB_current; \ - struct typename##_block **SFTB_prev; \ int SFTB_limit; \ int num_free = 0, num_used = 0; \ \ - for (SFTB_prev = ¤t_##typename##_block, \ - SFTB_current = current_##typename##_block, \ + for (SFTB_current = current_##typename##_block, \ SFTB_limit = current_##typename##_block_index; \ SFTB_current; \ ) \ @@ -2714,7 +2713,6 @@ do { \ UNMARK_##typename (SFTB_victim); \ } \ } \ - SFTB_prev = &(SFTB_current->prev); \ SFTB_current = SFTB_current->prev; \ SFTB_limit = countof (current_##typename##_block->block); \ } \ @@ -2938,7 +2936,7 @@ void free_marker (Lisp_Marker *ptr) { /* Perhaps this will catch freeing an already-freed marker. */ - gc_checking_assert (ptr->lheader.type = lrecord_type_marker); + gc_checking_assert (ptr->lheader.type == lrecord_type_marker); #ifndef ALLOC_NO_POOLS FREE_FIXED_TYPE_WHEN_NOT_IN_GC (marker, Lisp_Marker, ptr); @@ -3707,7 +3705,7 @@ If this value exceeds `gc-cons-threshold', a garbage collection happens. } #if 0 -DEFUN ("memory-limit", Fmemory_limit, 0, 0, "", /* +DEFUN ("memory-limit", Fmemory_limit, 0, 0, 0, /* Return the address of the last byte Emacs has allocated, divided by 1024. This may be helpful in debugging Emacs's memory usage. The value is divided by 1024 to make sure it will fit in a lisp integer. diff --git a/src/buffer.c b/src/buffer.c index 2a97d62..1ba488c 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -402,11 +402,10 @@ assoc_ignore_text_properties (REGISTER Lisp_Object key, Lisp_Object list) #endif /* FSFmacs */ DEFUN ("get-buffer", Fget_buffer, 1, 1, 0, /* -Return the buffer named NAME (a string). -If there is no live buffer named NAME, return nil. -NAME may also be a buffer; if so, the value is that buffer. +Return the buffer named BUFFER-NAME (a string), or nil if there is none. +BUFFER-NAME may also be a buffer; if so, the value is that buffer. */ - (name)) + (buffer_name)) { #ifdef I18N3 /* #### Doc string should indicate that the buffer name will get @@ -415,9 +414,9 @@ NAME may also be a buffer; if so, the value is that buffer. /* #### This might return a dead buffer. This is gross. This is called FSF compatibility. */ - if (BUFFERP (name)) - return name; - return get_buffer (name, 0); + if (BUFFERP (buffer_name)) + return buffer_name; + return get_buffer (buffer_name, 0); /* FSFmacs 19.29 calls assoc_ignore_text_properties() here. Bleagh!! */ } @@ -633,10 +632,11 @@ The value is never nil. DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, 2, 2, "bMake indirect buffer (to buffer): \nBName of indirect buffer: ", /* -Create and return an indirect buffer for buffer BASE, named NAME. -BASE should be an existing buffer (or buffer name). +Create and return an indirect buffer for buffer BASE-BUFFER, named NAME. +BASE-BUFFER should be an existing buffer (or buffer name). NAME should be a string which is not the name of an existing buffer. -If BASE is an indirect buffer itself, the base buffer for that buffer + +If BASE-BUFFER is itself an indirect buffer, the base buffer for that buffer is made the base buffer for the newly created buffer. (Thus, there will never be indirect buffers whose base buffers are themselves indirect.) */ @@ -924,7 +924,7 @@ as BUFFER means use current buffer. display). We still need to make sure redisplay realizes that the contents have potentially altered and it needs to do some work. */ - buf = decode_buffer(buffer, 0); + buf = decode_buffer (buffer, 0); BUF_MODIFF (buf)++; BUF_SAVE_MODIFF (buf) = NILP (flag) ? BUF_MODIFF (buf) : 0; MARK_MODELINE_CHANGED; @@ -1078,7 +1078,7 @@ VISIBLE-OK. } DEFUN ("buffer-disable-undo", Fbuffer_disable_undo, 0, 1, "", /* -Make BUFFER stop keeping undo information. +Stop keeping undo information for BUFFER. Any undo records it already has are discarded. No argument or nil as argument means do this for the current buffer. */ @@ -1091,7 +1091,7 @@ No argument or nil as argument means do this for the current buffer. } DEFUN ("buffer-enable-undo", Fbuffer_enable_undo, 0, 1, "", /* -Start keeping undo information for buffer BUFFER. +Start keeping undo information for BUFFER. No argument or nil as argument means do this for the current buffer. */ (buffer)) @@ -1280,7 +1280,7 @@ with `delete-process'. /* #### This is a problem if this buffer is in a dedicated window. Need to undedicate any windows of this buffer first (and delete them?) */ - Freplace_buffer_in_windows (buf); + Freplace_buffer_in_windows (buf, Qnil, Qnil); font_lock_buffer_was_killed (b); @@ -1524,7 +1524,7 @@ Use `switch-to-buffer' or `pop-to-buffer' to switch buffers permanently. DEFUN ("barf-if-buffer-read-only", Fbarf_if_buffer_read_only, 0, 3, 0, /* -Signal a `buffer-read-only' error if the buffer is read-only. +Signal a `buffer-read-only' error if BUFFER is read-only. Optional argument BUFFER defaults to the current buffer. If optional argument START is non-nil, all extents in the buffer @@ -1968,7 +1968,7 @@ dfc_convert_to_external_format (dfc_conversion_type source_type, if (sink_type != DFC_TYPE_LISP_LSTREAM) { sink->data.len = Dynarr_length (conversion_out_dynarr); - Dynarr_add (conversion_out_dynarr, 0); + Dynarr_add (conversion_out_dynarr, '\0'); /* NUL-terminate! */ sink->data.ptr = Dynarr_atp (conversion_out_dynarr, 0); } } @@ -2017,7 +2017,7 @@ dfc_convert_to_internal_format (dfc_conversion_type source_type, for (; ptr < end; ptr++) { - Extbyte c = *ptr; + Bufbyte c = *ptr; if (BYTE_ASCII_P (c)) Dynarr_add (conversion_in_dynarr, c); @@ -2106,7 +2106,7 @@ dfc_convert_to_internal_format (dfc_conversion_type source_type, if (sink_type != DFC_TYPE_LISP_LSTREAM) { sink->data.len = Dynarr_length (conversion_in_dynarr); - Dynarr_add (conversion_in_dynarr, 0); /* remember to zero-terminate! */ + Dynarr_add (conversion_in_dynarr, '\0'); /* NUL-terminate! */ sink->data.ptr = Dynarr_atp (conversion_in_dynarr, 0); } } @@ -2216,16 +2216,16 @@ the read-only state of the buffer. See also `kill-all-local-variables'. Vchange_major_mode_hook = Qnil; DEFVAR_BOOL ("find-file-compare-truenames", &find_file_compare_truenames /* -If this is true, then the find-file command will check the truenames +If this is true, then the `find-file' command will check the truenames of all visited files when deciding whether a given file is already in -a buffer, instead of just the buffer-file-name. This means that if you -attempt to visit another file which is a symbolic-link to a file which is -already in a buffer, the existing buffer will be found instead of a newly- -created one. This works if any component of the pathname (including a non- -terminal component) is a symbolic link as well, but doesn't work with hard -links (nothing does). - -See also the variable find-file-use-truenames. +a buffer, instead of just `buffer-file-name'. This means that if you +attempt to visit another file which is a symbolic link to a file which +is already in a buffer, the existing buffer will be found instead of a +newly-created one. This works if any component of the pathname +(including a non-terminal component) is a symbolic link as well, but +doesn't work with hard links (nothing does). + +See also the variable `find-file-use-truenames'. */ ); find_file_compare_truenames = 0; @@ -2236,7 +2236,7 @@ will never be a symbolic link anywhere in its directory path. That is, the buffer-file-name and buffer-file-truename will be equal. This doesn't work with hard links. -See also the variable find-file-compare-truenames. +See also the variable `find-file-compare-truenames'. */ ); find_file_use_truenames = 0; @@ -2920,8 +2920,8 @@ and VALUE is the old value. List of undo entries in current buffer. Recent changes come first; older changes follow newer. -An entry (BEG . END) represents an insertion which begins at -position BEG and ends at position END. +An entry (START . END) represents an insertion which begins at +position START and ends at position END. An entry (TEXT . POSITION) represents the deletion of the string TEXT from (abs POSITION). If POSITION is positive, point was at the front @@ -3005,8 +3005,8 @@ The default is t, which means that text is invisible if it has (or is covered by an extent with) a non-nil `invisible' property. If the value is a list, a text character is invisible if its `invisible' property is an element in that list. -If an element is a cons cell of the form (PROP . ELLIPSIS), -then characters with property value PROP are invisible, +If an element is a cons cell of the form (PROPERTY . ELLIPSIS), +then characters with property value PROPERTY are invisible, and they have an ellipsis as well if ELLIPSIS is non-nil. Note that the actual characters used for the ellipsis are controllable using `invisible-text-glyph', and default to "...". diff --git a/src/callint.c b/src/callint.c index 25bbd0c..b3abc7b 100644 --- a/src/callint.c +++ b/src/callint.c @@ -53,6 +53,9 @@ Lisp_Object Vmark_even_if_inactive; #endif #if 0 /* ill-conceived */ +/* FSF calls Qmouse_leave_buffer_hook at all sorts of random places, + including a bunch of places in their mouse.el. If this is + implemented, it has to be done cleanly. */ Lisp_Object Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook; #endif @@ -807,14 +810,6 @@ when reading the arguments. } case 'S': /* Any symbol. */ { -#if 0 /* Historical crock */ - Lisp_Object tem = intern ("minibuffer-local-ns-map"); - tem = find_symbol_value (tem); - if (UNBOUNDP (tem)) tem = Qnil; - tem = call3 (Qread_from_minibuffer, PROMPT (), Qnil, - tem); - args[argnum] = Fintern (tem, Qnil); -#else /* 1 */ visargs[argnum] = Qnil; for (;;) { @@ -837,7 +832,6 @@ when reading the arguments. directly */ break; } -#endif /* 1 */ arg_from_tty = 1; break; } @@ -952,7 +946,7 @@ when reading the arguments. } DEFUN ("prefix-numeric-value", Fprefix_numeric_value, 1, 1, 0, /* -Return numeric meaning of raw prefix argument ARG. +Return numeric meaning of raw prefix argument RAW. A raw prefix argument is what you get from `(interactive "P")'. Its numeric meaning is what you would get from `(interactive "p")'. */ diff --git a/src/callproc.c b/src/callproc.c index b908a3a..35a62a7 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -331,9 +331,6 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you REGISTER char **save_environ = environ; REGISTER int fd1 = fd[1]; int fd_error = fd1; - char **env; - - env = environ; /* Record that we're about to create a synchronous process. */ synch_process_alive = 1; @@ -452,7 +449,6 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you { int nread; - int first = 1; int total_read = 0; Lisp_Object instream; struct gcpro ngcpro1; @@ -536,7 +532,6 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you if (!NILP (display) && INTERACTIVE) { - first = 0; redisplay (); } } diff --git a/src/casefiddle.c b/src/casefiddle.c index 88fe83e..49cf028 100644 --- a/src/casefiddle.c +++ b/src/casefiddle.c @@ -30,28 +30,29 @@ Boston, MA 02111-1307, USA. */ enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP}; static Lisp_Object -casify_object (enum case_action flag, Lisp_Object obj, Lisp_Object buffer) +casify_object (enum case_action flag, Lisp_Object string_or_char, + Lisp_Object buffer) { struct buffer *buf = decode_buffer (buffer, 0); retry: - if (CHAR_OR_CHAR_INTP (obj)) + if (CHAR_OR_CHAR_INTP (string_or_char)) { Emchar c; - CHECK_CHAR_COERCE_INT (obj); - c = XCHAR (obj); + CHECK_CHAR_COERCE_INT (string_or_char); + c = XCHAR (string_or_char); c = (flag == CASE_DOWN) ? DOWNCASE (buf, c) : UPCASE (buf, c); return make_char (c); } - if (STRINGP (obj)) + if (STRINGP (string_or_char)) { Lisp_Char_Table *syntax_table = XCHAR_TABLE (buf->mirror_syntax_table); Bufbyte *storage = - alloca_array (Bufbyte, XSTRING_LENGTH (obj) * MAX_EMCHAR_LEN); + alloca_array (Bufbyte, XSTRING_LENGTH (string_or_char) * MAX_EMCHAR_LEN); Bufbyte *newp = storage; - Bufbyte *oldp = XSTRING_DATA (obj); + Bufbyte *oldp = XSTRING_DATA (string_or_char); int wordp = 0, wordp_prev; while (*oldp) @@ -87,91 +88,90 @@ casify_object (enum case_action flag, Lisp_Object obj, Lisp_Object buffer) return make_string (storage, newp - storage); } - obj = wrong_type_argument (Qchar_or_string_p, obj); + string_or_char = wrong_type_argument (Qchar_or_string_p, string_or_char); goto retry; } DEFUN ("upcase", Fupcase, 1, 2, 0, /* -Convert OBJECT to upper case and return that. -OBJECT may be a character or string. The result has the same type. -OBJECT is not altered--the value is a copy. +Convert STRING-OR-CHAR to upper case and return that. +STRING-OR-CHAR may be a character or string. The result has the same type. +STRING-OR-CHAR is not altered--the value is a copy. See also `capitalize', `downcase' and `upcase-initials'. Optional second arg BUFFER specifies which buffer's case tables to use, and defaults to the current buffer. */ - (object, buffer)) + (string_or_char, buffer)) { - return casify_object (CASE_UP, object, buffer); + return casify_object (CASE_UP, string_or_char, buffer); } DEFUN ("downcase", Fdowncase, 1, 2, 0, /* -Convert OBJECT to lower case and return that. -OBJECT may be a character or string. The result has the same type. -OBJECT is not altered--the value is a copy. +Convert STRING-OR-CHAR to lower case and return that. +STRING-OR-CHAR may be a character or string. The result has the same type. +STRING-OR-CHAR is not altered--the value is a copy. Optional second arg BUFFER specifies which buffer's case tables to use, and defaults to the current buffer. */ - (object, buffer)) + (string_or_char, buffer)) { - return casify_object (CASE_DOWN, object, buffer); + return casify_object (CASE_DOWN, string_or_char, buffer); } DEFUN ("capitalize", Fcapitalize, 1, 2, 0, /* -Convert OBJECT to capitalized form and return that. +Convert STRING-OR-CHAR to capitalized form and return that. This means that each word's first character is upper case and the rest is lower case. -OBJECT may be a character or string. The result has the same type. -OBJECT is not altered--the value is a copy. +STRING-OR-CHAR may be a character or string. The result has the same type. +STRING-OR-CHAR is not altered--the value is a copy. Optional second arg BUFFER specifies which buffer's case tables to use, and defaults to the current buffer. */ - (object, buffer)) + (string_or_char, buffer)) { - return casify_object (CASE_CAPITALIZE, object, buffer); + return casify_object (CASE_CAPITALIZE, string_or_char, buffer); } /* Like Fcapitalize but change only the initial characters. */ DEFUN ("upcase-initials", Fupcase_initials, 1, 2, 0, /* -Convert the initial of each word in OBJECT to upper case. +Convert the initial of each word in STRING-OR-CHAR to upper case. Do not change the other letters of each word. -OBJECT may be a character or string. The result has the same type. -OBJECT is not altered--the value is a copy. +STRING-OR-CHAR may be a character or string. The result has the same type. +STRING-OR-CHAR is not altered--the value is a copy. Optional second arg BUFFER specifies which buffer's case tables to use, and defaults to the current buffer. */ - (object, buffer)) + (string_or_char, buffer)) { - return casify_object (CASE_CAPITALIZE_UP, object, buffer); + return casify_object (CASE_CAPITALIZE_UP, string_or_char, buffer); } /* flag is CASE_UP, CASE_DOWN or CASE_CAPITALIZE or CASE_CAPITALIZE_UP. - b and e specify range of buffer to operate on. */ + START and END specify range of buffer to operate on. */ static void -casify_region_internal (enum case_action flag, Lisp_Object b, Lisp_Object e, - struct buffer *buf) +casify_region_internal (enum case_action flag, Lisp_Object start, + Lisp_Object end, struct buffer *buf) { /* This function can GC */ - REGISTER Bufpos i; - Bufpos start, end; + Bufpos pos, s, e; Lisp_Char_Table *syntax_table = XCHAR_TABLE (buf->mirror_syntax_table); int mccount; - Emchar oldc, c; int wordp = 0, wordp_prev; - if (EQ (b, e)) + if (EQ (start, end)) /* Not modifying because nothing marked */ return; - get_buffer_range_char (buf, b, e, &start, &end, 0); + get_buffer_range_char (buf, start, end, &s, &e, 0); - mccount = begin_multiple_change (buf, start, end); - record_change (buf, start, end - start); + mccount = begin_multiple_change (buf, s, e); + record_change (buf, s, e - s); - for (i = start; i < end; i++) + for (pos = s; pos < e; pos++) { - c = oldc = BUF_FETCH_CHAR (buf, i); + Emchar oldc = BUF_FETCH_CHAR (buf, pos); + Emchar c = oldc; switch (flag) { @@ -199,7 +199,7 @@ casify_region_internal (enum case_action flag, Lisp_Object b, Lisp_Object e, } if (oldc == c) continue; - buffer_replace_char (buf, i, c, 1, (i == start)); + buffer_replace_char (buf, pos, c, 1, (pos == s)); BUF_MODIFF (buf)++; } @@ -207,10 +207,10 @@ casify_region_internal (enum case_action flag, Lisp_Object b, Lisp_Object e, } static Lisp_Object -casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e, +casify_region (enum case_action flag, Lisp_Object start, Lisp_Object end, Lisp_Object buffer) { - casify_region_internal (flag, b, e, decode_buffer (buffer, 1)); + casify_region_internal (flag, start, end, decode_buffer (buffer, 1)); return Qnil; } @@ -222,10 +222,10 @@ These arguments specify the starting and ending character numbers of See also `capitalize-region'. Optional third arg BUFFER defaults to the current buffer. */ - (b, e, buffer)) + (start, end, buffer)) { /* This function can GC */ - return casify_region (CASE_UP, b, e, buffer); + return casify_region (CASE_UP, start, end, buffer); } DEFUN ("downcase-region", Fdowncase_region, 2, 3, "r", /* @@ -235,10 +235,10 @@ These arguments specify the starting and ending character numbers of point and the mark is operated on. Optional third arg BUFFER defaults to the current buffer. */ - (b, e, buffer)) + (start, end, buffer)) { /* This function can GC */ - return casify_region (CASE_DOWN, b, e, buffer); + return casify_region (CASE_DOWN, start, end, buffer); } DEFUN ("capitalize-region", Fcapitalize_region, 2, 3, "r", /* @@ -249,10 +249,10 @@ In programs, give two arguments, the starting and ending character positions to operate on. Optional third arg BUFFER defaults to the current buffer. */ - (b, e, buffer)) + (start, end, buffer)) { /* This function can GC */ - return casify_region (CASE_CAPITALIZE, b, e, buffer); + return casify_region (CASE_CAPITALIZE, start, end, buffer); } /* Like Fcapitalize_region but change only the initials. */ @@ -264,9 +264,9 @@ In programs, give two arguments, the starting and ending character positions to operate on. Optional third arg BUFFER defaults to the current buffer. */ - (b, e, buffer)) + (start, end, buffer)) { - return casify_region (CASE_CAPITALIZE_UP, b, e, buffer); + return casify_region (CASE_CAPITALIZE_UP, start, end, buffer); } @@ -288,39 +288,39 @@ casify_word (enum case_action flag, Lisp_Object arg, Lisp_Object buffer) } DEFUN ("upcase-word", Fupcase_word, 1, 2, "p", /* -Convert following word (or N words) to upper case, moving over. +Convert following word (or COUNT words) to upper case, moving over. With negative argument, convert previous words but do not move. See also `capitalize-word'. Optional second arg BUFFER defaults to the current buffer. */ - (n, buffer)) + (count, buffer)) { /* This function can GC */ - return casify_word (CASE_UP, n, buffer); + return casify_word (CASE_UP, count, buffer); } DEFUN ("downcase-word", Fdowncase_word, 1, 2, "p", /* -Convert following word (or N words) to lower case, moving over. +Convert following word (or COUNT words) to lower case, moving over. With negative argument, convert previous words but do not move. Optional second arg BUFFER defaults to the current buffer. */ - (n, buffer)) + (count, buffer)) { /* This function can GC */ - return casify_word (CASE_DOWN, n, buffer); + return casify_word (CASE_DOWN, count, buffer); } DEFUN ("capitalize-word", Fcapitalize_word, 1, 2, "p", /* -Capitalize the following word (or N words), moving over. +Capitalize the following word (or COUNT words), moving over. This gives the word(s) a first character in upper case and the rest lower case. With negative argument, capitalize previous words but do not move. Optional second arg BUFFER defaults to the current buffer. */ - (n, buffer)) + (count, buffer)) { /* This function can GC */ - return casify_word (CASE_CAPITALIZE, n, buffer); + return casify_word (CASE_CAPITALIZE, count, buffer); } diff --git a/src/casetab.c b/src/casetab.c index 2d52a84..4bb1cde 100644 --- a/src/casetab.c +++ b/src/casetab.c @@ -55,16 +55,16 @@ static void compute_trt_inverse (Lisp_Object trt, Lisp_Object inverse); #define STRING256_P(obj) (STRINGP (obj) && XSTRING_CHAR_LENGTH (obj) == 256) DEFUN ("case-table-p", Fcase_table_p, 1, 1, 0, /* -Return t if ARG is a case table. +Return t if OBJECT is a case table. See `set-case-table' for more information on these data structures. */ - (table)) + (object)) { Lisp_Object down, up, canon, eqv; - if (!CONSP (table)) return Qnil; down = XCAR (table); table = XCDR (table); - if (!CONSP (table)) return Qnil; up = XCAR (table); table = XCDR (table); - if (!CONSP (table)) return Qnil; canon = XCAR (table); table = XCDR (table); - if (!CONSP (table)) return Qnil; eqv = XCAR (table); + if (!CONSP (object)) return Qnil; down = XCAR (object); object = XCDR (object); + if (!CONSP (object)) return Qnil; up = XCAR (object); object = XCDR (object); + if (!CONSP (object)) return Qnil; canon = XCAR (object); object = XCDR (object); + if (!CONSP (object)) return Qnil; eqv = XCAR (object); return (STRING256_P (down) && (NILP (up) || STRING256_P (up)) @@ -75,13 +75,11 @@ See `set-case-table' for more information on these data structures. } static Lisp_Object -check_case_table (Lisp_Object obj) +check_case_table (Lisp_Object object) { - REGISTER Lisp_Object tem; - - while (tem = Fcase_table_p (obj), NILP (tem)) - obj = wrong_type_argument (Qcase_tablep, obj); - return (obj); + while (NILP (Fcase_table_p (object))) + object = wrong_type_argument (Qcase_tablep, object); + return object; } DEFUN ("current-case-table", Fcurrent_case_table, 0, 1, 0, /* @@ -113,7 +111,7 @@ static Lisp_Object set_case_table (Lisp_Object table, int standard); DEFUN ("set-case-table", Fset_case_table, 1, 1, 0, /* -Select a new case table for the current buffer. +Select CASE-TABLE as the new case table for the current buffer. A case table is a list (DOWNCASE UPCASE CANONICALIZE EQUIVALENCES) where each element is either nil or a string of length 256. DOWNCASE maps each character to its lower-case equivalent. @@ -134,18 +132,18 @@ BUG: Under XEmacs/Mule, translations to or from non-ASCII characters will not correctly conflate a-umlaut and A-umlaut even if the case tables call for this. */ - (table)) + (case_table)) { - return set_case_table (table, 0); + return set_case_table (case_table, 0); } DEFUN ("set-standard-case-table", Fset_standard_case_table, 1, 1, 0, /* -Select a new standard case table for new buffers. +Select CASE-TABLE as the new standard case table for new buffers. See `set-case-table' for more info on case tables. */ - (table)) + (case_table)) { - return set_case_table (table, 1); + return set_case_table (case_table, 1); } #ifdef MULE diff --git a/src/cmdloop.c b/src/cmdloop.c index e015320..80a99dc 100644 --- a/src/cmdloop.c +++ b/src/cmdloop.c @@ -549,9 +549,13 @@ Don't call this unless you know what you're doing. } } +#if 0 /* What's wrong with going through ordinary procedure of quit? + quitting here leaves overriding-terminal-local-map + when you type C-u C-u C-g. */ /* If ^G was typed before we got here (that is, before emacs was idle and waiting for input) then we treat that as an interrupt. */ QUIT; +#endif /* If minibuffer on and echo area in use, wait 2 sec and redraw minibuffer. Treat a ^G here as a command, not an interrupt. diff --git a/src/cmds.c b/src/cmds.c index c902092..82e7568 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -46,31 +46,31 @@ Lisp_Object Vself_insert_face_command; Lisp_Object Vauto_fill_chars; DEFUN ("forward-char", Fforward_char, 0, 2, "_p", /* -Move point right N characters (left if N negative). +Move point right COUNT characters (left if COUNT is negative). On attempt to pass end of buffer, stop and signal `end-of-buffer'. On attempt to pass beginning of buffer, stop and signal `beginning-of-buffer'. On reaching end of buffer, stop and signal error. */ - (n, buffer)) + (count, buffer)) { struct buffer *buf = decode_buffer (buffer, 1); - EMACS_INT count; + EMACS_INT n; - if (NILP (n)) - count = 1; + if (NILP (count)) + n = 1; else { - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); } - /* This used to just set point to point + XINT (n), and then check + /* This used to just set point to point + XINT (count), and then check to see if it was within boundaries. But now that SET_PT can potentially do a lot of stuff (calling entering and exiting hooks, etcetera), that's not a good approach. So we validate the proposed position, then set point. */ { - Bufpos new_point = BUF_PT (buf) + count; + Bufpos new_point = BUF_PT (buf) + n; if (new_point < BUF_BEGV (buf)) { @@ -92,49 +92,49 @@ On reaching end of buffer, stop and signal error. } DEFUN ("backward-char", Fbackward_char, 0, 2, "_p", /* -Move point left N characters (right if N negative). +Move point left COUNT characters (right if COUNT is negative). On attempt to pass end of buffer, stop and signal `end-of-buffer'. On attempt to pass beginning of buffer, stop and signal `beginning-of-buffer'. */ - (n, buffer)) + (count, buffer)) { - if (NILP (n)) - n = make_int (-1); + if (NILP (count)) + count = make_int (-1); else { - CHECK_INT (n); - XSETINT (n, - XINT (n)); + CHECK_INT (count); + count = make_int (- XINT (count)); } - return Fforward_char (n, buffer); + return Fforward_char (count, buffer); } DEFUN ("forward-line", Fforward_line, 0, 2, "_p", /* -Move N lines forward (backward if N is negative). -Precisely, if point is on line I, move to the start of line I + N. +Move COUNT lines forward (backward if COUNT is negative). +Precisely, if point is on line I, move to the start of line I + COUNT. If there isn't room, go as far as possible (no error). Returns the count of lines left to move. If moving forward, -that is N - number of lines moved; if backward, N + number moved. -With positive N, a non-empty line at the end counts as one line +that is COUNT - number of lines moved; if backward, COUNT + number moved. +With positive COUNT, a non-empty line at the end counts as one line successfully moved (for the return value). If BUFFER is nil, the current buffer is assumed. */ - (n, buffer)) + (count, buffer)) { struct buffer *buf = decode_buffer (buffer, 1); Bufpos pos2 = BUF_PT (buf); Bufpos pos; - EMACS_INT count, shortage, negp; + EMACS_INT n, shortage, negp; - if (NILP (n)) - count = 1; + if (NILP (count)) + n = 1; else { - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); } - negp = count <= 0; - pos = scan_buffer (buf, '\n', pos2, 0, count - negp, &shortage, 1); + negp = n <= 0; + pos = scan_buffer (buf, '\n', pos2, 0, n - negp, &shortage, 1); if (shortage > 0 && (negp || (BUF_ZV (buf) > BUF_BEGV (buf) @@ -147,26 +147,26 @@ If BUFFER is nil, the current buffer is assumed. DEFUN ("point-at-bol", Fpoint_at_bol, 0, 2, 0, /* Return the character position of the first character on the current line. -With argument N not nil or 1, move forward N - 1 lines first. +With argument COUNT not nil or 1, move forward COUNT - 1 lines first. If scan reaches end of buffer, return that position. This function does not move point. */ - (n, buffer)) + (count, buffer)) { struct buffer *b = decode_buffer (buffer, 1); REGISTER int orig, end; XSETBUFFER (buffer, b); - if (NILP (n)) - n = make_int (0); + if (NILP (count)) + count = make_int (0); else { - CHECK_INT (n); - n = make_int (XINT (n) - 1); + CHECK_INT (count); + count = make_int (XINT (count) - 1); } orig = BUF_PT (b); - Fforward_line (n, buffer); + Fforward_line (count, buffer); end = BUF_PT (b); BUF_SET_PT (b, orig); @@ -175,75 +175,75 @@ This function does not move point. DEFUN ("beginning-of-line", Fbeginning_of_line, 0, 2, "_p", /* Move point to beginning of current line. -With argument N not nil or 1, move forward N - 1 lines first. +With argument COUNT not nil or 1, move forward COUNT - 1 lines first. If scan reaches end of buffer, stop there without error. If BUFFER is nil, the current buffer is assumed. */ - (n, buffer)) + (count, buffer)) { struct buffer *b = decode_buffer (buffer, 1); - BUF_SET_PT (b, XINT (Fpoint_at_bol (n, buffer))); + BUF_SET_PT (b, XINT (Fpoint_at_bol (count, buffer))); return Qnil; } DEFUN ("point-at-eol", Fpoint_at_eol, 0, 2, 0, /* Return the character position of the last character on the current line. -With argument N not nil or 1, move forward N - 1 lines first. +With argument COUNT not nil or 1, move forward COUNT - 1 lines first. If scan reaches end of buffer, return that position. This function does not move point. */ - (n, buffer)) + (count, buffer)) { struct buffer *buf = decode_buffer (buffer, 1); - int count; + int n; - if (NILP (n)) - count = 1; + if (NILP (count)) + n = 1; else { - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); } return make_int (find_before_next_newline (buf, BUF_PT (buf), 0, - count - (count <= 0))); + n - (n <= 0))); } DEFUN ("end-of-line", Fend_of_line, 0, 2, "_p", /* Move point to end of current line. -With argument N not nil or 1, move forward N - 1 lines first. +With argument COUNT not nil or 1, move forward COUNT - 1 lines first. If scan reaches end of buffer, stop there without error. If BUFFER is nil, the current buffer is assumed. */ - (n, buffer)) + (count, buffer)) { struct buffer *b = decode_buffer (buffer, 1); - BUF_SET_PT (b, XINT (Fpoint_at_eol (n, buffer))); + BUF_SET_PT (b, XINT (Fpoint_at_eol (count, buffer))); return Qnil; } DEFUN ("delete-char", Fdelete_char, 1, 2, "*p\nP", /* -Delete the following N characters (previous, with negative N). -Optional second arg KILLFLAG non-nil means kill instead (save in kill ring). -Interactively, N is the prefix arg, and KILLFLAG is set if -N was explicitly specified. +Delete the following COUNT characters (previous, with negative COUNT). +Optional second arg KILLP non-nil means kill instead (save in kill ring). +Interactively, COUNT is the prefix arg, and KILLP is set if +COUNT was explicitly specified. */ - (n, killflag)) + (count, killp)) { /* This function can GC */ Bufpos pos; struct buffer *buf = current_buffer; - int count; + int n; - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); - pos = BUF_PT (buf) + count; - if (NILP (killflag)) + pos = BUF_PT (buf) + n; + if (NILP (killp)) { - if (count < 0) + if (n < 0) { if (pos < BUF_BEGV (buf)) signal_error (Qbeginning_of_buffer, Qnil); @@ -260,22 +260,22 @@ N was explicitly specified. } else { - call1 (Qkill_forward_chars, n); + call1 (Qkill_forward_chars, count); } return Qnil; } DEFUN ("delete-backward-char", Fdelete_backward_char, 1, 2, "*p\nP", /* -Delete the previous N characters (following, with negative N). -Optional second arg KILLFLAG non-nil means kill instead (save in kill ring). -Interactively, N is the prefix arg, and KILLFLAG is set if -N was explicitly specified. +Delete the previous COUNT characters (following, with negative COUNT). +Optional second arg KILLP non-nil means kill instead (save in kill ring). +Interactively, COUNT is the prefix arg, and KILLP is set if +COUNT was explicitly specified. */ - (n, killflag)) + (count, killp)) { /* This function can GC */ - CHECK_INT (n); - return Fdelete_char (make_int (- XINT (n)), killflag); + CHECK_INT (count); + return Fdelete_char (make_int (- XINT (count)), killp); } static void internal_self_insert (Emchar ch, int noautofill); @@ -283,16 +283,17 @@ static void internal_self_insert (Emchar ch, int noautofill); DEFUN ("self-insert-command", Fself_insert_command, 1, 1, "*p", /* Insert the character you type. Whichever character you type to run this command is inserted. +If a prefix arg COUNT is specified, the character is inserted COUNT times. */ - (n)) + (count)) { /* This function can GC */ Emchar ch; Lisp_Object c; - int count; + int n; - CHECK_NATNUM (n); - count = XINT (n); + CHECK_NATNUM (count); + n = XINT (count); if (CHAR_OR_CHAR_INTP (Vlast_command_char)) c = Vlast_command_char; @@ -307,8 +308,8 @@ Whichever character you type to run this command is inserted. ch = XCHAR (c); - while (count--) - internal_self_insert (ch, (count != 0)); + while (n--) + internal_self_insert (ch, (n != 0)); return Qnil; } @@ -447,13 +448,13 @@ internal_self_insert (Emchar c1, int noautofill) /* (this comes from Mule but is a generally good idea) */ DEFUN ("self-insert-internal", Fself_insert_internal, 1, 1, 0, /* -Invoke `self-insert-command' as if CH is entered from keyboard. +Invoke `self-insert-command' as if CHARACTER is entered from keyboard. */ - (ch)) + (character)) { /* This function can GC */ - CHECK_CHAR_COERCE_INT (ch); - internal_self_insert (XCHAR (ch), 0); + CHECK_CHAR_COERCE_INT (character); + internal_self_insert (XCHAR (character), 0); return Qnil; } @@ -506,7 +507,7 @@ More precisely, a char with closeparen syntax is self-inserted. DEFVAR_LISP ("auto-fill-chars", &Vauto_fill_chars /* A char-table for characters which invoke auto-filling. -Such characters has value t in this table. +Such characters have value t in this table. */); Vauto_fill_chars = Fmake_char_table (Qgeneric); XCHAR_TABLE (Vauto_fill_chars)->ascii[' '] = Qt; diff --git a/src/config.h.in b/src/config.h.in index 1d1a9bb..357df62 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -34,12 +34,15 @@ Boston, MA 02111-1307, USA. */ #ifndef NOT_C_CODE #ifdef __GNUC__ #define alloca __builtin_alloca -#elif HAVE_ALLOCA_H +#elif defined __DECC +#include +#pragma intrinsic(alloca) +#elif defined HAVE_ALLOCA_H #include #elif defined(_AIX) #pragma alloca #elif ! defined (alloca) -char *alloca (); +void *alloca (); #endif #endif /* C code */ @@ -172,8 +175,9 @@ char *alloca (); #define HAVE_UNIXOID_EVENT_LOOP #endif -/* Are we using XFree386? */ -#undef HAVE_XFREE386 +/* XFree86 has a different prototype for this function */ +#undef HAVE_XREGISTERIMINSTANTIATECALLBACK +#undef XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE #undef THIS_IS_X11R4 #undef THIS_IS_X11R5 @@ -331,7 +335,7 @@ char *alloca (); /* PTY support functions */ #undef HAVE_GETPT /* glibc's easy pty allocation function */ -#undef HAVE__GETPT /* SGI's easy pty allocation function */ +#undef HAVE__GETPTY /* SGI's easy pty allocation function */ #undef HAVE_OPENPTY /* BSD's easy pty allocation function */ #undef HAVE_GRANTPT /* Unix98 */ #undef HAVE_UNLOCKPT /* Unix98 */ @@ -341,8 +345,8 @@ char *alloca (); #undef HAVE_ISASTREAM /* SysV streams */ #undef HAVE_PTY_H /* Linux, Tru64 openpty */ #undef HAVE_LIBUTIL_H /* BSD openpty */ -#undef HAVE_SYS_STROPTS_H /* SysV streams */ -#undef HAVE_SYS_STRTIO_H /* SysV streams TIOCSIGNAL */ +#undef HAVE_STROPTS_H /* SysV streams */ +#undef HAVE_STRTIO_H /* SysV streams TIOCSIGNAL */ #undef HAVE_SOCKETS #undef HAVE_SOCKADDR_SUN_LEN @@ -707,7 +711,7 @@ extern "C" { Also, SunOS 4.1.1 contains buggy versions of strcmp and strcpy that sometimes reference memory past the end of the string, which can segv. - I don't know whether this is has been fixed as of 4.1.2 or 4.1.3. */ + I don't know whether this has been fixed as of 4.1.2 or 4.1.3. */ #if defined (sparc) && !defined (USG) #define OBJECTS_SYSTEM sunOS-fix.o strcmp.o strcpy.o #endif diff --git a/src/console-stream.c b/src/console-stream.c index 7077b3c..a02f7f4 100644 --- a/src/console-stream.c +++ b/src/console-stream.c @@ -279,17 +279,17 @@ void vars_of_console_stream (void) { DEFVAR_LISP ("terminal-console", &Vterminal_console /* -The initial console-object, which represents XEmacs' stdout. +The initial console object, which represents XEmacs' stdout. */ ); Vterminal_console = Qnil; DEFVAR_LISP ("terminal-device", &Vterminal_device /* -The initial device-object, which represents XEmacs' stdout. +The initial device object, which represents XEmacs' stdout. */ ); Vterminal_device = Qnil; DEFVAR_LISP ("terminal-frame", &Vterminal_frame /* -The initial frame-object, which represents XEmacs' stdout. +The initial frame object, which represents XEmacs' stdout. */ ); Vterminal_frame = Qnil; diff --git a/src/console-x.c b/src/console-x.c index dcc7407..f7bcdfb 100644 --- a/src/console-x.c +++ b/src/console-x.c @@ -43,31 +43,43 @@ x_initially_selected_for_input (struct console *con) return 1; } +/* Parse a DISPLAY specification like "host:10.0" or ":0" */ static void split_up_display_spec (Lisp_Object display, int *hostname_length, int *display_length, int *screen_length) { - Bufbyte *dotptr; + Bufbyte *beg = XSTRING_DATA (display); + Bufbyte *end = beg + XSTRING_LENGTH (display); + Bufbyte *p = end; - dotptr = strrchr ((char *) XSTRING_DATA (display), ':'); - if (!dotptr) + while (p > beg) { - *hostname_length = XSTRING_LENGTH (display); - *display_length = 0; - } - else - { - *hostname_length = dotptr - XSTRING_DATA (display); + DEC_CHARPTR (p); + if (charptr_emchar (p) == ':') + { + *hostname_length = p - beg; - dotptr = strchr ((char *) dotptr, '.'); - if (dotptr) - *display_length = (dotptr - XSTRING_DATA (display) - *hostname_length); - else - *display_length = XSTRING_LENGTH (display) - *hostname_length; + while (p < end - 1) + { + INC_CHARPTR (p); + if (charptr_emchar (p) == '.') + { + *display_length = p - beg - *hostname_length; + *screen_length = end - p; + return; + } + } + /* No '.' found. */ + *display_length = XSTRING_LENGTH (display) - *hostname_length; + *screen_length = 0; + return; + } } - *screen_length = (XSTRING_LENGTH (display) - *display_length - - *hostname_length); + /* No ':' found. */ + *hostname_length = XSTRING_LENGTH (display); + *display_length = 0; + *screen_length = 0; } /* Remember, in all of the following functions, we have to verify @@ -182,11 +194,26 @@ x_semi_canonicalize_console_connection (Lisp_Object connection, connection = x_device_to_console_connection (connection, errb); /* Check for a couple of standard special cases */ - if (string_byte (XSTRING (connection), 0) == ':') + if (string_char (XSTRING (connection), 0) == ':') connection = concat2 (build_string ("localhost"), connection); - else if (!strncmp (XSTRING_DATA (connection), "unix:", 5)) - connection = concat2 (build_string ("localhost:"), - Fsubstring (connection, make_int (5), Qnil)); + else + { + /* connection =~ s/^unix:/localhost:/; */ + const Bufbyte *p = XSTRING_DATA (connection); + const Bufbyte *end = XSTRING_DATA (connection) + XSTRING_LENGTH (connection); + size_t i; + + for (i = 0; i < sizeof ("unix:") - 1; i++) + { + if (p == end || charptr_emchar (p) != "unix:"[i]) + goto ok; + INC_CHARPTR (p); + } + + connection = concat2 (build_string ("localhost:"), + make_string (p, end - p)); + } + ok: RETURN_UNGCPRO (connection); } @@ -262,8 +289,8 @@ x_canonicalize_device_connection (Lisp_Object connection, Error_behavior errb) split_up_display_spec (connection, &hostname_length, &display_length, &screen_length); - screen_str = build_string (XSTRING_DATA (connection) - + hostname_length + display_length); + screen_str = make_string (XSTRING_DATA (connection) + + hostname_length + display_length, screen_length); connection = x_canonicalize_console_connection (connection, errb); RETURN_UNGCPRO (concat2 (connection, screen_str)); diff --git a/src/console.c b/src/console.c index ab147bc..8e79a8d 100644 --- a/src/console.c +++ b/src/console.c @@ -196,7 +196,7 @@ valid_console_type_p (Lisp_Object type) } DEFUN ("valid-console-type-p", Fvalid_console_type_p, 1, 1, 0, /* -Given a CONSOLE-TYPE, return t if it is valid. +Return t if CONSOLE-TYPE is a valid console type. Valid types are 'x, 'tty, and 'stream. */ (console_type)) @@ -216,9 +216,9 @@ DEFUN ("cdfw-console", Fcdfw_console, 1, 1, 0, /* Given a console, device, frame, or window, return the associated console. Return nil otherwise. */ - (obj)) + (object)) { - return CDFW_CONSOLE (obj); + return CDFW_CONSOLE (object); } @@ -307,7 +307,7 @@ Return non-nil if OBJECT is a console that has not been deleted. } DEFUN ("console-type", Fconsole_type, 0, 1, 0, /* -Return the type of the specified console (e.g. `x' or `tty'). +Return the console type (e.g. `x' or `tty') of CONSOLE. Value is `tty' for a tty console (a character-only terminal), `x' for a console that is an X display, `mswindows' for a console that is a Windows NT/95/97 connection, @@ -327,7 +327,7 @@ Value is `tty' for a tty console (a character-only terminal), } DEFUN ("console-name", Fconsole_name, 0, 1, 0, /* -Return the name of the specified console. +Return the name of CONSOLE. */ (console)) { @@ -750,7 +750,7 @@ Return a list of all consoles. DEFUN ("console-device-list", Fconsole_device_list, 0, 1, 0, /* Return a list of all devices on CONSOLE. -If CONSOLE is nil, the selected console will be used. +If CONSOLE is nil, the selected console is used. */ (console)) { @@ -780,7 +780,8 @@ Disable input on console CONSOLE. } DEFUN ("console-on-window-system-p", Fconsole_on_window_system_p, 0, 1, 0, /* -Return non-nil if this console is on a window system. +Return t if CONSOLE is on a window system. +If CONSOLE is nil, the selected console is used. This generally means that there is support for the mouse, the menubar, the toolbar, glyphs, etc. */ @@ -1023,6 +1024,7 @@ See also `current-input-mode'. TTY_FLAGS (con).flow_control = !NILP (flow); TTY_FLAGS (con).meta_key = meta_key; init_one_console (con); + MARK_FRAME_CHANGED (XFRAME (CONSOLE_SELECTED_FRAME (con))); } #endif diff --git a/src/database.c b/src/database.c index e7750b6..9cf085f 100644 --- a/src/database.c +++ b/src/database.c @@ -144,9 +144,9 @@ allocate_database (void) } static Lisp_Object -mark_database (Lisp_Object obj) +mark_database (Lisp_Object object) { - Lisp_Database *db = XDATABASE (obj); + Lisp_Database *db = XDATABASE (object); return db->fname; } @@ -178,11 +178,11 @@ finalize_database (void *header, int for_disksave) if (for_disksave) { - Lisp_Object obj; - XSETDATABASE (obj, db); + Lisp_Object object; + XSETDATABASE (object, db); signal_simple_error - ("Can't dump an emacs containing database objects", obj); + ("Can't dump an emacs containing database objects", object); } db->funcs->close (db); } @@ -226,11 +226,12 @@ Return the subtype of database DATABASE, if any. } DEFUN ("database-live-p", Fdatabase_live_p, 1, 1, 0, /* -Return t if OBJ is an active database. +Return t if OBJECT is an active database. */ - (obj)) + (object)) { - return DATABASEP (obj) && DATABASE_LIVE_P (XDATABASE (obj)) ? Qt : Qnil; + return DATABASEP (object) && DATABASE_LIVE_P (XDATABASE (object)) ? + Qt : Qnil; } DEFUN ("database-file-name", Fdatabase_file_name, 1, 1, 0, /* @@ -244,11 +245,11 @@ Return the filename associated with the database DATABASE. } DEFUN ("databasep", Fdatabasep, 1, 1, 0, /* -Return t if OBJ is a database. +Return t if OBJECT is a database. */ - (obj)) + (object)) { - return DATABASEP (obj) ? Qt : Qnil; + return DATABASEP (object) ? Qt : Qnil; } #ifdef HAVE_DBM diff --git a/src/device.c b/src/device.c index b02ecc3..16c10a6 100644 --- a/src/device.c +++ b/src/device.c @@ -227,9 +227,9 @@ DEFUN ("dfw-device", Fdfw_device, 1, 1, 0, /* Given a device, frame, or window, return the associated device. Return nil otherwise. */ - (obj)) + (object)) { - return DFW_DEVICE (obj); + return DFW_DEVICE (object); } diff --git a/src/dialog-msw.c b/src/dialog-msw.c index 27fbad7..62c70e2 100644 --- a/src/dialog-msw.c +++ b/src/dialog-msw.c @@ -157,6 +157,9 @@ mswindows_is_dialog_msg (MSG *msg) LIST_LOOP_2 (popup, Vpopup_frame_list) { HWND hwnd = FRAME_MSWINDOWS_HANDLE (XFRAME (popup)); + /* This is a windows feature that allows dialog type + processing to be applied to standard windows containing + controls. */ if (IsDialogMessage (hwnd, msg)) return 1; } diff --git a/src/dired.c b/src/dired.c index 474c828..69142b7 100644 --- a/src/dired.c +++ b/src/dired.c @@ -179,18 +179,18 @@ static Lisp_Object file_name_completion (Lisp_Object file, int all_flag, int ver_flag); DEFUN ("file-name-completion", Ffile_name_completion, 2, 2, 0, /* -Complete file name FILE in directory DIRECTORY. -Returns the longest string common to all filenames in DIRECTORY -that start with FILE. -If there is only one and FILE matches it exactly, returns t. -Returns nil if DIRECTORY contains no name starting with FILE. - -Filenames which end with any member of `completion-ignored-extensions' -are not considered as possible completions for FILE unless there is no -other possible completion. `completion-ignored-extensions' is not applied -to the names of directories. +Complete file name PARTIAL-FILENAME in directory DIRECTORY. +Return the longest prefix common to all file names in DIRECTORY +that start with PARTIAL-FILENAME. +If there is only one and PARTIAL-FILENAME matches it exactly, return t. +Return nil if DIRECTORY contains no name starting with PARTIAL-FILENAME. + +File names which end with any member of `completion-ignored-extensions' +are not considered as possible completions for PARTIAL-FILENAME unless +there is no other possible completion. `completion-ignored-extensions' +is not applied to the names of directories. */ - (file, directory)) + (partial_filename, directory)) { /* This function can GC. GC checked 1996.04.06. */ Lisp_Object handler; @@ -199,27 +199,27 @@ to the names of directories. call the corresponding file handler. */ handler = Ffind_file_name_handler (directory, Qfile_name_completion); if (!NILP (handler)) - return call3 (handler, Qfile_name_completion, file, directory); + return call3 (handler, Qfile_name_completion, partial_filename, directory); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (file, Qfile_name_completion); + handler = Ffind_file_name_handler (partial_filename, Qfile_name_completion); if (!NILP (handler)) - return call3 (handler, Qfile_name_completion, file, directory); + return call3 (handler, Qfile_name_completion, partial_filename, directory); - return file_name_completion (file, directory, 0, 0); + return file_name_completion (partial_filename, directory, 0, 0); } DEFUN ("file-name-all-completions", Ffile_name_all_completions, 2, 2, 0, /* -Return a list of all completions of file name FILE in directory DIRECTORY. -These are all file names in directory DIRECTORY which begin with FILE. +Return a list of all completions of PARTIAL-FILENAME in DIRECTORY. +These are all file names in DIRECTORY which begin with PARTIAL-FILENAME. File names which end with any member of `completion-ignored-extensions' -are not considered as possible completions for FILE unless there is no -other possible completion. `completion-ignored-extensions' is not applied -to the names of directories. +are not considered as possible completions for PARTIAL-FILENAME unless +there is no other possible completion. `completion-ignored-extensions' +is not applied to the names of directories. */ - (file, directory)) + (partial_filename, directory)) { /* This function can GC. GC checked 1997.06.04. */ Lisp_Object handler; @@ -232,10 +232,10 @@ to the names of directories. handler = Ffind_file_name_handler (directory, Qfile_name_all_completions); UNGCPRO; if (!NILP (handler)) - return call3 (handler, Qfile_name_all_completions, file, + return call3 (handler, Qfile_name_all_completions, partial_filename, directory); - return file_name_completion (file, directory, 1, 0); + return file_name_completion (partial_filename, directory, 1, 0); } static int @@ -516,44 +516,45 @@ static Lisp_Object user_name_completion (Lisp_Object user, int *uniq); DEFUN ("user-name-completion", Fuser_name_completion, 1, 1, 0, /* -Complete user name USER. - -Returns the longest string common to all user names that start -with USER. If there is only one and USER matches it exactly, -returns t. Returns nil if there is no user name starting with USER. +Complete user name from PARTIAL-USERNAME. +Return the longest prefix common to all user names starting with +PARTIAL-USERNAME. If there is only one and PARTIAL-USERNAME matches +it exactly, returns t. Return nil if there is no user name starting +with PARTIAL-USERNAME. */ - (user)) + (partial_username)) { - return user_name_completion (user, 0, NULL); + return user_name_completion (partial_username, 0, NULL); } DEFUN ("user-name-completion-1", Fuser_name_completion_1, 1, 1, 0, /* -Complete user name USER. +Complete user name from PARTIAL-USERNAME. This function is identical to `user-name-completion', except that the cons of the completion and an indication of whether the completion was unique is returned. -The car of the returned value is the longest string common to all -user names that start with USER. If there is only one and USER -matches it exactly, the car is t. The car is nil if there is no -user name starting with USER. The cdr of the result is non-nil -if and only if the completion returned in the car was unique. +The car of the returned value is the longest prefix common to all user +names that start with PARTIAL-USERNAME. If there is only one and +PARTIAL-USERNAME matches it exactly, the car is t. The car is nil if +there is no user name starting with PARTIAL-USERNAME. The cdr of the +result is non-nil if and only if the completion returned in the car +was unique. */ - (user)) + (partial_username)) { int uniq; - Lisp_Object completed = user_name_completion (user, 0, &uniq); + Lisp_Object completed = user_name_completion (partial_username, 0, &uniq); return Fcons (completed, uniq ? Qt : Qnil); } DEFUN ("user-name-all-completions", Fuser_name_all_completions, 1, 1, 0, /* -Return a list of all completions of user name USER. -These are all user names which begin with USER. +Return a list of all user name completions from PARTIAL-USERNAME. +These are all the user names which begin with PARTIAL-USERNAME. */ - (user)) + (partial_username)) { - return user_name_completion (user, 1, NULL); + return user_name_completion (partial_username, 1, NULL); } struct user_name diff --git a/src/doc.c b/src/doc.c index d683fba..88e95af 100644 --- a/src/doc.c +++ b/src/doc.c @@ -138,7 +138,7 @@ unparesseuxify_doc_string (int fd, EMACS_INT position, } /* #### mrb: following STILL completely broken */ - return_me = make_ext_string ((Bufbyte *) buffer, to - buffer, Qbinary); + return_me = make_ext_string (buffer, to - buffer, Qbinary); done: if (buffer != buf) /* We must have allocated buffer above */ @@ -261,7 +261,7 @@ read_doc_string (Lisp_Object filepos) DEFUN ("documentation", Fdocumentation, 1, 2, 0, /* Return the documentation string of FUNCTION. -Unless a non-nil second argument is given, the +Unless a non-nil second argument RAW is given, the string is passed through `substitute-command-keys'. */ (function, raw)) @@ -359,7 +359,7 @@ This is like `get', but it can refer to strings stored in the through `substitute-command-keys'. A non-nil third argument avoids this translation. */ - (sym, prop, raw)) + (symbol, prop, raw)) { /* This function can GC */ REGISTER Lisp_Object doc = Qnil; @@ -370,7 +370,7 @@ translation. GCPRO1 (doc); - doc = Fget (sym, prop, Qnil); + doc = Fget (symbol, prop, Qnil); if (INTP (doc)) doc = get_doc_string (XINT (doc) > 0 ? doc : make_int (- XINT (doc))); else if (CONSP (doc)) @@ -378,7 +378,7 @@ translation. #ifdef I18N3 if (!NILP (doc)) { - domain = Fget (sym, Qvariable_domain, Qnil); + domain = Fget (symbol, Qvariable_domain, Qnil); if (NILP (domain)) doc = Fgettext (doc); else @@ -739,13 +739,13 @@ Return a new string which is STRING with substrings of the form \\=\\[COMMAND] replaced by either: a keystroke sequence that will invoke COMMAND, or "M-x COMMAND" if COMMAND is not on any keys. Substrings of the form \\=\\{MAPVAR} are replaced by summaries -\(made by describe-bindings) of the value of MAPVAR, taken as a keymap. +\(made by `describe-bindings') of the value of MAPVAR, taken as a keymap. Substrings of the form \\=\\ specify to use the value of MAPVAR as the keymap for future \\=\\[COMMAND] substrings. \\=\\= quotes the following character and is discarded; thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ into the output. */ - (str)) + (string)) { /* This function can GC */ Bufbyte *buf; @@ -756,33 +756,30 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int Bytecount idx; Bytecount bsize; Bufbyte *new; - Lisp_Object tem; - Lisp_Object keymap; + Lisp_Object tem = Qnil; + Lisp_Object keymap = Qnil; + Lisp_Object name = Qnil; Bufbyte *start; Bytecount length; - Lisp_Object name; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; - if (NILP (str)) + if (NILP (string)) return Qnil; - CHECK_STRING (str); - tem = Qnil; - keymap = Qnil; - name = Qnil; - GCPRO4 (str, tem, keymap, name); + CHECK_STRING (string); + GCPRO4 (string, tem, keymap, name); /* There is the possibility that the string is not destined for a translating stream, and it could be argued that we should do the same thing here as in Fformat(), but there are very few times when this will be the case and many calls to this function would have to have `gettext' calls added. (I18N3) */ - str = LISP_GETTEXT (str); + string = LISP_GETTEXT (string); /* KEYMAP is either nil (which means search all the active keymaps) or a specified local map (which means search just that and the global map). If non-nil, it might come from Voverriding_local_map, - or from a \\ construct in STR itself.. */ + or from a \\ construct in STRING itself.. */ #if 0 /* FSFmacs */ /* This is really weird and garbagey. If keymap is nil and there's an overriding-local-map, `where-is-internal' will correctly note @@ -795,13 +792,13 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int */ #endif - strlength = XSTRING_LENGTH (str); + strlength = XSTRING_LENGTH (string); bsize = 1 + strlength; buf = (Bufbyte *) xmalloc (bsize); bufp = buf; /* Have to reset strdata every time GC might be called */ - strdata = XSTRING_DATA (str); + strdata = XSTRING_DATA (string); for (idx = 0; idx < strlength; ) { Bufbyte *strp = strdata + idx; @@ -856,15 +853,15 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int tem = Fwhere_is_internal (tem, keymap, Qt, Qnil, Qnil); #if 0 /* FSFmacs */ - /* Disregard menu bar bindings; it is positively annoying to - mention them when there's no menu bar, and it isn't terribly - useful even when there is a menu bar. */ - if (!NILP (tem)) - { - firstkey = Faref (tem, Qzero); - if (EQ (firstkey, Qmenu_bar)) - tem = Qnil; - } + /* Disregard menu bar bindings; it is positively annoying to + mention them when there's no menu bar, and it isn't terribly + useful even when there is a menu bar. */ + if (!NILP (tem)) + { + firstkey = Faref (tem, Qzero); + if (EQ (firstkey, Qmenu_bar)) + tem = Qnil; + } #endif if (NILP (tem)) /* but not on any keys */ @@ -885,13 +882,8 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int case '{': case '<': { - /* #### jump to label `subst_string|subst' crosses - initialization of `buffer|_buf' */ - Lisp_Object buffer; - struct buffer *buf_; - - buffer = Fget_buffer_create (QSsubstitute); - buf_ = XBUFFER (buffer); + Lisp_Object buffer = Fget_buffer_create (QSsubstitute); + struct buffer *buf_ = XBUFFER (buffer); Fbuffer_disable_undo (buffer); Ferase_buffer (buffer); @@ -926,16 +918,9 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int if (NILP (tem)) { - char boof[255], *b = boof; - *b++ = '\n'; - /* #### This sprintf() is potentially dangerous! */ - sprintf (b, GETTEXT ( - "Uses keymap \"%s\", which is not currently defined."), - (char *) XSTRING_DATA (Fsymbol_name (name))); - b += strlen (b); - *b++ = '\n'; - *b++ = 0; - buffer_insert_c_string (buf_, boof); + buffer_insert_c_string (buf_, "(uses keymap \""); + buffer_insert_lisp_string (buf_, Fsymbol_name (name)); + buffer_insert_c_string (buf_, "\", which is not currently defined) "); if (start[-1] == '<') keymap = Qnil; } @@ -947,31 +932,31 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int tem = make_string_from_buffer (buf_, BUF_BEG (buf_), BUF_Z (buf_) - BUF_BEG (buf_)); Ferase_buffer (buffer); - goto subst_string; - - subst_string: - start = XSTRING_DATA (tem); - length = XSTRING_LENGTH (tem); - subst: - bsize += length; - new = (Bufbyte *) xrealloc (buf, bsize); - bufp += new - buf; - buf = new; - memcpy (bufp, start, length); - bufp += length; - - /* Reset STRDATA in case gc relocated it. */ - strdata = XSTRING_DATA (str); - - break; } + goto subst_string; + + subst_string: + start = XSTRING_DATA (tem); + length = XSTRING_LENGTH (tem); + subst: + bsize += length; + new = (Bufbyte *) xrealloc (buf, bsize); + bufp += new - buf; + buf = new; + memcpy (bufp, start, length); + bufp += length; + + /* Reset STRDATA in case gc relocated it. */ + strdata = XSTRING_DATA (string); + + break; } } if (changed) /* don't bother if nothing substituted */ tem = make_string (buf, bufp - buf); else - tem = str; + tem = string; xfree (buf); UNGCPRO; return tem; diff --git a/src/editfns.c b/src/editfns.c index 1129eb1..7a8df46 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -99,26 +99,26 @@ init_editfns (void) } DEFUN ("char-to-string", Fchar_to_string, 1, 1, 0, /* -Convert arg CH to a one-character string containing that character. +Convert CHARACTER to a one-character string containing that character. */ - (ch)) + (character)) { Bytecount len; Bufbyte str[MAX_EMCHAR_LEN]; - if (EVENTP (ch)) + if (EVENTP (character)) { - Lisp_Object ch2 = Fevent_to_character (ch, Qt, Qnil, Qnil); + Lisp_Object ch2 = Fevent_to_character (character, Qt, Qnil, Qnil); if (NILP (ch2)) return signal_simple_continuable_error - ("character has no ASCII equivalent:", Fcopy_event (ch, Qnil)); - ch = ch2; + ("character has no ASCII equivalent:", Fcopy_event (character, Qnil)); + character = ch2; } - CHECK_CHAR_COERCE_INT (ch); + CHECK_CHAR_COERCE_INT (character); - len = set_charptr_emchar (str, XCHAR (ch)); + len = set_charptr_emchar (str, XCHAR (character)); return make_string (str, len); } @@ -126,12 +126,12 @@ DEFUN ("string-to-char", Fstring_to_char, 1, 1, 0, /* Convert arg STRING to a character, the first character of that string. An empty string will return the constant `nil'. */ - (str)) + (string)) { Lisp_String *p; - CHECK_STRING (str); + CHECK_STRING (string); - p = XSTRING (str); + p = XSTRING (string); if (string_length (p) != 0) return make_char (string_char (p, 0)); else @@ -611,7 +611,7 @@ DEFUN ("temp-directory", Ftemp_directory, 0, 0, 0, /* Return the pathname to the directory to use for temporary files. On MS Windows, this is obtained from the TEMP or TMP environment variables, defaulting to / if they are both undefined. -On Unix it is obtained from TMPDIR, with /tmp as the default +On Unix it is obtained from TMPDIR, with /tmp as the default. */ ()) { @@ -1579,7 +1579,7 @@ Jamie thinks this is bogus. */ DEFUN ("insert-char", Finsert_char, 1, 4, 0, /* -Insert COUNT (second arg) copies of CHR (first arg). +Insert COUNT copies of CHARACTER into BUFFER. Point and all markers are affected as in the function `insert'. COUNT defaults to 1 if omitted. The optional third arg IGNORED is INHERIT under FSF Emacs. @@ -1588,7 +1588,7 @@ This is highly bogus, however, and XEmacs always behaves as if The optional fourth arg BUFFER specifies the buffer to insert the text into. If BUFFER is nil, the current buffer is assumed. */ - (chr, count, ignored, buffer)) + (character, count, ignored, buffer)) { /* This function can GC */ REGISTER Bufbyte *string; @@ -1600,7 +1600,7 @@ text into. If BUFFER is nil, the current buffer is assumed. struct buffer *b = decode_buffer (buffer, 1); int cou; - CHECK_CHAR_COERCE_INT (chr); + CHECK_CHAR_COERCE_INT (character); if (NILP (count)) cou = 1; else @@ -1609,7 +1609,7 @@ text into. If BUFFER is nil, the current buffer is assumed. cou = XINT (count); } - charlen = set_charptr_emchar (str, XCHAR (chr)); + charlen = set_charptr_emchar (str, XCHAR (character)); n = cou * charlen; if (n <= 0) return Qnil; @@ -1668,7 +1668,7 @@ If BUFFER is nil, the current buffer is assumed. and what the function does is probably good enough for what the user-code will typically want to use it for. */ DEFUN ("buffer-substring-no-properties", Fbuffer_substring_no_properties, 0, 3, 0, /* -Return the text from BEG to END, as a string, without copying the extents. +Return the text from START to END as a string, without copying the extents. */ (start, end, buffer)) { @@ -1991,18 +1991,18 @@ Returns the number of substitutions performed. DEFUN ("delete-region", Fdelete_region, 2, 3, "r", /* Delete the text between point and mark. -When called from a program, expects two arguments, -positions (integers or markers) specifying the stretch to be deleted. -If BUFFER is nil, the current buffer is assumed. +When called from a program, expects two arguments START and END +\(integers or markers) specifying the stretch to be deleted. +If optional third arg BUFFER is nil, the current buffer is assumed. */ - (b, e, buffer)) + (start, end, buffer)) { /* This function can GC */ - Bufpos start, end; + Bufpos bp_start, bp_end; struct buffer *buf = decode_buffer (buffer, 1); - get_buffer_range_char (buf, b, e, &start, &end, 0); - buffer_delete_range (buf, start, end, 0); + get_buffer_range_char (buf, start, end, &bp_start, &bp_end, 0); + buffer_delete_range (buf, bp_start, bp_end, 0); zmacs_region_stays = 0; return Qnil; } @@ -2055,22 +2055,23 @@ See also `save-restriction'. When calling from a program, pass two arguments; positions (integers or markers) bounding the text that should remain visible. */ - (b, e, buffer)) + (start, end, buffer)) { - Bufpos start, end; + Bufpos bp_start, bp_end; struct buffer *buf = decode_buffer (buffer, 1); Bytind bi_start, bi_end; - get_buffer_range_char (buf, b, e, &start, &end, GB_ALLOW_PAST_ACCESSIBLE); - bi_start = bufpos_to_bytind (buf, start); - bi_end = bufpos_to_bytind (buf, end); - - SET_BOTH_BUF_BEGV (buf, start, bi_start); - SET_BOTH_BUF_ZV (buf, end, bi_end); - if (BUF_PT (buf) < start) - BUF_SET_PT (buf, start); - if (BUF_PT (buf) > end) - BUF_SET_PT (buf, end); + get_buffer_range_char (buf, start, end, &bp_start, &bp_end, + GB_ALLOW_PAST_ACCESSIBLE); + bi_start = bufpos_to_bytind (buf, bp_start); + bi_end = bufpos_to_bytind (buf, bp_end); + + SET_BOTH_BUF_BEGV (buf, bp_start, bi_start); + SET_BOTH_BUF_ZV (buf, bp_end, bi_end); + if (BUF_PT (buf) < bp_start) + BUF_SET_PT (buf, bp_start); + if (BUF_PT (buf) > bp_end) + BUF_SET_PT (buf, bp_end); MARK_CLIP_CHANGED; /* Changing the buffer bounds invalidates any recorded current column. */ invalidate_current_column (); @@ -2270,15 +2271,15 @@ Both arguments must be characters (i.e. NOT integers). Case is ignored if `case-fold-search' is non-nil in BUFFER. If BUFFER is nil, the current buffer is assumed. */ - (c1, c2, buffer)) + (character1, character2, buffer)) { Emchar x1, x2; struct buffer *b = decode_buffer (buffer, 1); - CHECK_CHAR_COERCE_INT (c1); - CHECK_CHAR_COERCE_INT (c2); - x1 = XCHAR (c1); - x2 = XCHAR (c2); + CHECK_CHAR_COERCE_INT (character1); + CHECK_CHAR_COERCE_INT (character2); + x1 = XCHAR (character1); + x2 = XCHAR (character2); return (!NILP (b->case_fold_search) ? DOWNCASE (b, x1) == DOWNCASE (b, x2) @@ -2290,12 +2291,12 @@ DEFUN ("char=", Fchar_Equal, 2, 2, 0, /* Return t if two characters match, case is significant. Both arguments must be characters (i.e. NOT integers). */ - (c1, c2)) + (character1, character2)) { - CHECK_CHAR_COERCE_INT (c1); - CHECK_CHAR_COERCE_INT (c2); + CHECK_CHAR_COERCE_INT (character1); + CHECK_CHAR_COERCE_INT (character2); - return EQ (c1, c2) ? Qt : Qnil; + return EQ (character1, character2) ? Qt : Qnil; } #if 0 /* Undebugged FSFmacs code */ @@ -2367,36 +2368,36 @@ Transpose region START1 to END1 with START2 to END2. The regions may not be overlapping, because the size of the buffer is never changed in a transposition. -Optional fifth arg LEAVE_MARKERS, if non-nil, means don't transpose +Optional fifth arg LEAVE-MARKERS, if non-nil, means don't transpose any markers that happen to be located in the regions. (#### BUG: currently -this function always acts as if LEAVE_MARKERS is non-nil.) +this function always acts as if LEAVE-MARKERS is non-nil.) Transposing beyond buffer boundaries is an error. */ - (startr1, endr1, startr2, endr2, leave_markers)) + (start1, end1, start2, end2, leave_markers)) { - Bufpos start1, end1, start2, end2; + Bufpos startr1, endr1, startr2, endr2; Charcount len1, len2; Lisp_Object string1, string2; struct buffer *buf = current_buffer; - get_buffer_range_char (buf, startr1, endr1, &start1, &end1, 0); - get_buffer_range_char (buf, startr2, endr2, &start2, &end2, 0); + get_buffer_range_char (buf, start1, end1, &startr1, &endr1, 0); + get_buffer_range_char (buf, start2, end2, &startr2, &endr2, 0); - len1 = end1 - start1; - len2 = end2 - start2; + len1 = endr1 - startr1; + len2 = endr2 - startr2; - if (start2 < end1) + if (startr2 < endr1) error ("transposed regions not properly ordered"); - else if (start1 == end1 || start2 == end2) + else if (startr1 == endr1 || startr2 == endr2) error ("transposed region may not be of length 0"); - string1 = make_string_from_buffer (buf, start1, len1); - string2 = make_string_from_buffer (buf, start2, len2); - buffer_delete_range (buf, start2, end2, 0); - buffer_insert_lisp_string_1 (buf, start2, string1, 0); - buffer_delete_range (buf, start1, end1, 0); - buffer_insert_lisp_string_1 (buf, start1, string2, 0); + string1 = make_string_from_buffer (buf, startr1, len1); + string2 = make_string_from_buffer (buf, startr2, len2); + buffer_delete_range (buf, startr2, endr2, 0); + buffer_insert_lisp_string_1 (buf, startr2, string1, 0); + buffer_delete_range (buf, startr1, endr1, 0); + buffer_insert_lisp_string_1 (buf, startr1, string2, 0); /* In FSFmacs there is a whole bunch of really ugly code here to attempt to transpose the regions without using up any @@ -2510,7 +2511,7 @@ More specifically: - Commands which operate on the region only work if the region is active. - Only a very small set of commands cause the region to become active: - Those commands whose semantics are to mark an area, like mark-defun. + Those commands whose semantics are to mark an area, like `mark-defun'. - The region is deactivated after each command that is executed, except that: - "Motion" commands do not change whether the region is active or not. diff --git a/src/eldap.c b/src/eldap.c index c26272d..c118529 100644 --- a/src/eldap.c +++ b/src/eldap.c @@ -120,7 +120,7 @@ print_ldap (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) print_internal (ldap->host, printcharfun, 1); if (!ldap->ld) write_c_string ("(dead) ",printcharfun); - sprintf (buf, " 0x%x>", (unsigned int)ldap); + sprintf (buf, " 0x%lx>", (long)ldap); write_c_string (buf, printcharfun); } diff --git a/src/elhash.c b/src/elhash.c index 36b51de..2fb2c04 100644 --- a/src/elhash.c +++ b/src/elhash.c @@ -71,9 +71,9 @@ struct Lisp_Hash_Table #define HASH_TABLE_MIN_SIZE 10 #define HASH_CODE(key, ht) \ -((((ht)->hash_function ? (ht)->hash_function (key) : LISP_HASH (key)) \ - * (ht)->golden_ratio) \ - % (ht)->size) + ((((ht)->hash_function ? (ht)->hash_function (key) : LISP_HASH (key)) \ + * (ht)->golden_ratio) \ + % (ht)->size) #define KEYS_EQUAL_P(key1, key2, testfun) \ (EQ (key1, key2) || ((testfun) && (testfun) (key1, key2))) @@ -1432,7 +1432,7 @@ internal_hash (Lisp_Object obj, int depth) DEFUN ("sxhash", Fsxhash, 1, 1, 0, /* Return a hash value for OBJECT. -(equal obj1 obj2) implies (= (sxhash obj1) (sxhash obj2)). +\(equal obj1 obj2) implies (= (sxhash obj1) (sxhash obj2)). */ (object)) { diff --git a/src/emacs.c b/src/emacs.c index abc8bfe..c8e3b40 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -385,8 +385,8 @@ int nodumpfile; int debug_paths; /* Save argv and argc. */ -static Extbyte **initial_argv; -static int initial_argc; +static Extbyte **initial_argv; /* #### currently unused */ +static int initial_argc; /* #### currently unused */ static void sort_args (int argc, char **argv); @@ -1678,6 +1678,9 @@ main_1 (int argc, char **argv, char **envp, int restart) vars_of_extents (); vars_of_faces (); vars_of_fileio (); +#ifdef CLASH_DETECTION + vars_of_filelock (); +#endif vars_of_floatfns (); vars_of_font_lock (); vars_of_frame (); @@ -2912,13 +2915,13 @@ Remember to set `command-line-processed' to nil before dumping if you want the dumped XEmacs to process its command line and announce itself normally when it is run. */ - (intoname, symname)) + (filename, symfile)) { /* This function can GC */ struct gcpro gcpro1, gcpro2; int opurify; - GCPRO2 (intoname, symname); + GCPRO2 (filename, symfile); #ifdef FREE_CHECKING Freally_free (Qnil); @@ -2927,15 +2930,15 @@ and announce itself normally when it is run. disable_free_hook (); #endif - CHECK_STRING (intoname); - intoname = Fexpand_file_name (intoname, Qnil); - if (!NILP (symname)) + CHECK_STRING (filename); + filename = Fexpand_file_name (filename, Qnil); + if (!NILP (symfile)) { - CHECK_STRING (symname); - if (XSTRING_LENGTH (symname) > 0) - symname = Fexpand_file_name (symname, Qnil); + CHECK_STRING (symfile); + if (XSTRING_LENGTH (symfile) > 0) + symfile = Fexpand_file_name (symfile, Qnil); else - symname = Qnil; + symfile = Qnil; } opurify = purify_flag; @@ -2962,15 +2965,15 @@ and announce itself normally when it is run. UNGCPRO; { - char *intoname_ext; - char *symname_ext; + char *filename_ext; + char *symfile_ext; - LISP_STRING_TO_EXTERNAL (intoname, intoname_ext, Qfile_name); + LISP_STRING_TO_EXTERNAL (filename, filename_ext, Qfile_name); - if (STRINGP (symname)) - LISP_STRING_TO_EXTERNAL (symname, symname_ext, Qfile_name); + if (STRINGP (symfile)) + LISP_STRING_TO_EXTERNAL (symfile, symfile_ext, Qfile_name); else - symname_ext = 0; + symfile_ext = 0; garbage_collect_1 (); @@ -2987,7 +2990,7 @@ and announce itself normally when it is run. modify all the unexec routines to ensure that filename conversion is applied everywhere. Don't worry about memory leakage because this call only happens once. */ - unexec (intoname_ext, symname_ext, (uintptr_t) my_edata, 0, 0); + unexec (filename_ext, symfile_ext, (uintptr_t) my_edata, 0, 0); #ifdef DOUG_LEA_MALLOC free (malloc_state_ptr); #endif @@ -3521,7 +3524,7 @@ This is mainly meant for use in path searching. DEFVAR_LISP ("emacs-program-version", &Vemacs_program_version /* *Version of the Emacs variant. -This typically has the form XX.XX[-bXX]. +This typically has the form NN.NN-bNN. This is mainly meant for use in path searching. */ ); Vemacs_program_version = build_string ((char *) PATH_VERSION); @@ -3540,7 +3543,7 @@ especially executable programs intended for XEmacs to invoke. DEFVAR_LISP ("configure-exec-directory", &Vconfigure_exec_directory /* For internal use by the build procedure only. -configure's idea of what EXEC-DIRECTORY will be. +configure's idea of what `exec-directory' will be. */ ); #ifdef PATH_EXEC Vconfigure_exec_directory = Ffile_name_as_directory @@ -3556,7 +3559,7 @@ configure's idea of what EXEC-DIRECTORY will be. DEFVAR_LISP ("configure-lisp-directory", &Vconfigure_lisp_directory /* For internal use by the build procedure only. -configure's idea of what LISP-DIRECTORY will be. +configure's idea of what `lisp-directory' will be. */ ); #ifdef PATH_LOADSEARCH Vconfigure_lisp_directory = Ffile_name_as_directory @@ -3572,7 +3575,7 @@ configure's idea of what LISP-DIRECTORY will be. DEFVAR_LISP ("configure-module-directory", &Vconfigure_module_directory /* For internal use by the build procedure only. -configure's idea of what MODULE-DIRECTORY will be. +configure's idea of what `module-directory' will be. */ ); #ifdef PATH_MODULESEARCH Vconfigure_module_directory = Ffile_name_as_directory @@ -3602,7 +3605,7 @@ functions `locate-data-file' and `locate-data-directory' and the variable DEFVAR_LISP ("configure-data-directory", &Vconfigure_data_directory /* For internal use by the build procedure only. -configure's idea of what DATA-DIRECTORY will be. +configure's idea of what `data-directory' will be. */ ); #ifdef PATH_DATA Vconfigure_data_directory = Ffile_name_as_directory @@ -3624,7 +3627,7 @@ or were installed as packages, and are intended for XEmacs to use. DEFVAR_LISP ("configure-site-directory", &Vconfigure_site_directory /* For internal use by the build procedure only. -configure's idea of what SITE-DIRECTORY will be. +configure's idea of what `site-directory' will be. */ ); #ifdef PATH_SITE Vconfigure_site_directory = Ffile_name_as_directory @@ -3640,7 +3643,7 @@ configure's idea of what SITE-DIRECTORY will be. DEFVAR_LISP ("configure-site-module-directory", &Vconfigure_site_module_directory /* For internal use by the build procedure only. -configure's idea of what SITE-DIRECTORY will be. +configure's idea of what `site-directory' will be. */ ); #ifdef PATH_SITE_MODULES Vconfigure_site_module_directory = Ffile_name_as_directory @@ -3651,13 +3654,13 @@ configure's idea of what SITE-DIRECTORY will be. DEFVAR_LISP ("doc-directory", &Vdoc_directory /* *Directory containing the DOC file that comes with XEmacs. -This is usually the same as exec-directory. +This is usually the same as `exec-directory'. */ ); Vdoc_directory = Qnil; DEFVAR_LISP ("configure-doc-directory", &Vconfigure_doc_directory /* For internal use by the build procedure only. -configure's idea of what DOC-DIRECTORY will be. +configure's idea of what `doc-directory' will be. */ ); #ifdef PATH_DOC Vconfigure_doc_directory = Ffile_name_as_directory @@ -3668,7 +3671,7 @@ configure's idea of what DOC-DIRECTORY will be. DEFVAR_LISP ("configure-exec-prefix-directory", &Vconfigure_exec_prefix_directory /* For internal use by the build procedure only. -configure's idea of what EXEC-PREFIX-DIRECTORY will be. +configure's idea of what `exec-prefix-directory' will be. */ ); #ifdef PATH_EXEC_PREFIX Vconfigure_exec_prefix_directory = Ffile_name_as_directory @@ -3679,7 +3682,7 @@ configure's idea of what EXEC-PREFIX-DIRECTORY will be. DEFVAR_LISP ("configure-prefix-directory", &Vconfigure_prefix_directory /* For internal use by the build procedure only. -configure's idea of what PREFIX-DIRECTORY will be. +configure's idea of what `prefix-directory' will be. */ ); #ifdef PATH_PREFIX Vconfigure_prefix_directory = Ffile_name_as_directory diff --git a/src/emodules.c b/src/emodules.c index eb03bc8..6458319 100644 --- a/src/emodules.c +++ b/src/emodules.c @@ -79,7 +79,7 @@ XEmacs, and then reload those new or changed modules that are required. Messages informing you of the progress of the load are displayed unless the variable `load-modules-quietly' is non-NIL. */ - (file,name,version)) + (file, name, version)) { char *mod, *mname, *mver; int speccount = specpdl_depth(); @@ -118,7 +118,7 @@ referring to variables inside the module code. However, once you have requested a module to be unloaded, it will be unloaded from memory as soon as the last reference to symbols within the module is destroyed. */ - (file,name,version)) + (file, name, version)) { int x; char *mod, *mname, *mver; diff --git a/src/event-Xt.c b/src/event-Xt.c index d597719..ddbb49d 100644 --- a/src/event-Xt.c +++ b/src/event-Xt.c @@ -687,20 +687,29 @@ x_handle_sticky_modifiers (XEvent *ev, struct device *d) { /* Not a modifier key */ Bool key_event_p = (type == KeyPress || type == KeyRelease); - if (type == KeyPress && !xd->last_downkey) - xd->last_downkey = keycode; - else if (type == ButtonPress || - (type == KeyPress && xd->last_downkey && - (keycode != xd->last_downkey || - ev->xkey.time != xd->release_time))) + if (type == ButtonPress + || (type == KeyPress + && ((xd->last_downkey + && ((keycode != xd->last_downkey + || ev->xkey.time != xd->release_time))) + || (INTP (Vmodifier_keys_sticky_time) + && ev->xkey.time + > (xd->modifier_release_time + + XINT (Vmodifier_keys_sticky_time)))))) { xd->need_to_add_mask = 0; xd->last_downkey = 0; } + else if (type == KeyPress && !xd->last_downkey) + xd->last_downkey = keycode; + if (type == KeyPress) xd->release_time = 0; if (type == KeyPress || type == ButtonPress) - xd->down_mask = 0; + { + xd->down_mask = 0; + xd->modifier_release_time = 0; + } if (key_event_p) ev->xkey.state |= xd->need_to_add_mask; @@ -722,7 +731,8 @@ x_handle_sticky_modifiers (XEvent *ev, struct device *d) So we assume that if the release and the next press occur at the same time, the key was actually auto- repeated. Under Open-Windows, at least, this works. */ - xd->release_time = key_event_p ? ev->xkey.time : ev->xbutton.time; + xd->modifier_release_time = xd->release_time + = key_event_p ? ev->xkey.time : ev->xbutton.time; } else /* Modifier key pressed */ { @@ -742,6 +752,15 @@ x_handle_sticky_modifiers (XEvent *ev, struct device *d) xd->need_to_add_mask = 0; } + if (xd->modifier_release_time + && INTP (Vmodifier_keys_sticky_time) + && (ev->xkey.time + > xd->modifier_release_time + XINT (Vmodifier_keys_sticky_time))) + { + xd->need_to_add_mask = 0; + xd->down_mask = 0; + } + #define FROB(mask) \ do { \ if (type == KeyPress) \ @@ -767,6 +786,7 @@ do { \ xd->need_to_add_mask |= mask; \ } \ } \ + xd->modifier_release_time = ev->xkey.time; \ } while (0) for (i = 0; i < xd->x_keysym_map_keysyms_per_code; i++) diff --git a/src/event-msw.c b/src/event-msw.c index 2dfb2fe..a09c81f 100644 --- a/src/event-msw.c +++ b/src/event-msw.c @@ -1276,6 +1276,8 @@ mswindows_drain_windows_queue (void) { char class_name_buf [sizeof (XEMACS_CLASS) + 2] = ""; + /* Don't translate messages destined for a dialog box, this + makes keyboard traversal work. I think?? */ if (mswindows_is_dialog_msg (&msg)) { mswindows_unmodalize_signal_maybe (); @@ -2792,6 +2794,8 @@ mswindows_wnd_proc (HWND hwnd, UINT message_, WPARAM wParam, LPARAM lParam) case CBN_SELCHANGE: if (!NILP (mswindows_handle_gui_wm_command (frame, cid, id))) return 0; + case BN_SETFOCUS: + } /* menubars always must come last since the hashtables do not always exist*/ diff --git a/src/events.h b/src/events.h index e8fa7f8..3dcab79 100644 --- a/src/events.h +++ b/src/events.h @@ -533,6 +533,7 @@ EXFUN (Fmake_event, 2); extern Lisp_Object QKbackspace, QKdelete, QKescape, QKlinefeed, QKreturn; extern Lisp_Object QKspace, QKtab, Qmouse_event_p, Vcharacter_set_property; extern Lisp_Object Qcancel_mode_internal; +extern Lisp_Object Vmodifier_keys_sticky_time; /* Note: under X Windows, XEMACS_MOD_ALT is generated by the Alt key if there are both Alt and Meta keys. If there are no Meta keys, then Alt generates diff --git a/src/extents.c b/src/extents.c index 910c0aa..a79f7d6 100644 --- a/src/extents.c +++ b/src/extents.c @@ -3426,7 +3426,7 @@ DEFUN ("next-extent-change", Fnext_extent_change, 1, 2, 0, /* Return the next position after POS where an extent begins or ends. If POS is at the end of the buffer or string, POS will be returned; otherwise a position greater than POS will always be returned. -If BUFFER is nil, the current buffer is assumed. +If OBJECT is nil, the current buffer is assumed. */ (pos, object)) { @@ -4916,7 +4916,7 @@ canonicalize_extent_property (Lisp_Object prop, Lisp_Object value) /* Do we need a lisp-level function ? */ DEFUN ("set-extent-initial-redisplay-function", Fset_extent_initial_redisplay_function, - 2,2,0,/* + 2,2,0, /* Note: This feature is experimental! Set initial-redisplay-function of EXTENT to the function @@ -5437,6 +5437,7 @@ For a list of built-in properties, see `set-extent-property'. DEFUN ("extent-property", Fextent_property, 2, 3, 0, /* Return EXTENT's value for property PROPERTY. +If no such property exists, DEFAULT is returned. See `set-extent-property' for the built-in property names. */ (extent, property, default_)) @@ -6596,7 +6597,7 @@ Scans characters forward from POS till it finds a change in the PROP argument OBJECT is the buffer or string to scan (defaults to the current buffer). The property values are compared with `eq'. -Return nil if the property is constant all the way to the end of BUFFER. +Return nil if the property is constant all the way to the end of OBJECT. If the value is non-nil, it is a position greater than POS, never equal. If the optional fourth argument LIMIT is non-nil, don't search @@ -6663,7 +6664,7 @@ Scans characters backward from POS till it finds a change in the PROP argument OBJECT is the buffer or string to scan (defaults to the current buffer). The property values are compared with `eq'. -Return nil if the property is constant all the way to the start of BUFFER. +Return nil if the property is constant all the way to the start of OBJECT. If the value is non-nil, it is a position less than POS, never equal. If the optional fourth argument LIMIT is non-nil, don't search back diff --git a/src/faces.c b/src/faces.c index 0d5f503..91d1517 100644 --- a/src/faces.c +++ b/src/faces.c @@ -596,7 +596,7 @@ face_property_matching_instance (Lisp_Object face, Lisp_Object property, DEFUN ("facep", Ffacep, 1, 1, 0, /* -Return non-nil if OBJECT is a face. +Return t if OBJECT is a face. */ (object)) { @@ -762,8 +762,8 @@ other non-nil value both permanent and temporary are included. } DEFUN ("make-face", Fmake_face, 1, 3, 0, /* -Define and return a new FACE described by DOC-STRING. -You can modify the font, color, etc of a face with the set-face-* functions. +Define a new face with name NAME (a symbol), described by DOC-STRING. +You can modify the font, color, etc. of a face with the set-face-* functions. If the face already exists, it is unmodified. If TEMPORARY is non-nil, this face will cease to exist if not in use. */ @@ -1575,7 +1575,16 @@ get_extent_fragment_face_cache_index (struct window *w, findex = get_builtin_face_cache_index (w, Vdefault_face); merge_face_cachel_data (w, findex, &cachel); - return get_merged_face_cache_index (w, &cachel); + findex = get_merged_face_cache_index (w, &cachel); + if (cachel.merged_faces && + /* merged_faces did not get stored and available via return value */ + Dynarr_at (w->face_cachels, findex).merged_faces != + cachel.merged_faces) + { + Dynarr_free (cachel.merged_faces); + cachel.merged_faces = 0; + } + return findex; } } diff --git a/src/file-coding.c b/src/file-coding.c index 9fce353..aaca9ef 100644 --- a/src/file-coding.c +++ b/src/file-coding.c @@ -176,68 +176,47 @@ EXFUN (Fcopy_coding_system, 2); #ifdef MULE struct detection_state; static int detect_coding_sjis (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_sjis (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, - unsigned int n); -static void encode_coding_sjis (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, - unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_sjis (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_sjis (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); static int detect_coding_big5 (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_big5 (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void encode_coding_big5 (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_big5 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_big5 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); static int detect_coding_ucs4 (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_ucs4 (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void encode_coding_ucs4 (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_ucs4 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_ucs4 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); static int detect_coding_utf8 (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_utf8 (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void encode_coding_utf8 (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_utf8 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_utf8 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); static int postprocess_iso2022_mask (int mask); static void reset_iso2022 (Lisp_Object coding_system, struct iso2022_decoder *iso); static int detect_coding_iso2022 (struct detection_state *st, - const unsigned char *src, - unsigned int n); -static void decode_coding_iso2022 (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void encode_coding_iso2022 (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); + const Extbyte *src, size_t n); +static void decode_coding_iso2022 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_iso2022 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); #endif /* MULE */ -static void decode_coding_no_conversion (Lstream *decoding, - const unsigned char *src, - unsigned_char_dynarr *dst, - unsigned int n); -static void encode_coding_no_conversion (Lstream *encoding, - const unsigned char *src, - unsigned_char_dynarr *dst, - unsigned int n); -static void mule_decode (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); -static void mule_encode (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n); +static void decode_coding_no_conversion (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void encode_coding_no_conversion (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void mule_decode (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n); +static void mule_encode (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n); typedef struct codesys_prop codesys_prop; struct codesys_prop @@ -789,12 +768,12 @@ character set. Recognized properties are: 'post-read-conversion Function called after a file has been read in, to perform the - decoding. Called with two arguments, BEG and END, denoting + decoding. Called with two arguments, START and END, denoting a region of the current buffer to be decoded. 'pre-write-conversion Function called before a file is written out, to perform the - encoding. Called with two arguments, BEG and END, denoting + encoding. Called with two arguments, START and END, denoting a region of the current buffer to be encoded. @@ -983,18 +962,42 @@ if TYPE is 'ccl: } else if (EQ (type, Qccl)) { + Lisp_Object sym; + struct ccl_program test_ccl; + Extbyte *suffix; + + /* Check key first. */ if (EQ (key, Qdecode)) - { - CHECK_VECTOR (value); - CODING_SYSTEM_CCL_DECODE (codesys) = value; - } + suffix = "-ccl-decode"; else if (EQ (key, Qencode)) + suffix = "-ccl-encode"; + else + signal_simple_error ("Unrecognized property", key); + + /* If value is vector, register it as a ccl program + associated with an newly created symbol for + backward compatibility. */ + if (VECTORP (value)) { - CHECK_VECTOR (value); - CODING_SYSTEM_CCL_ENCODE (codesys) = value; + sym = Fintern (concat2 (Fsymbol_name (name), + build_string (suffix)), + Qnil); + Fregister_ccl_program (sym, value); } else - signal_simple_error ("Unrecognized property", key); + { + CHECK_SYMBOL (value); + sym = value; + } + /* check if the given ccl programs are valid. */ + if (setup_ccl_program (&test_ccl, sym) < 0) + signal_simple_error ("Invalid CCL program", value); + + if (EQ (key, Qdecode)) + CODING_SYSTEM_CCL_DECODE (codesys) = sym; + else if (EQ (key, Qencode)) + CODING_SYSTEM_CCL_ENCODE (codesys) = sym; + } #endif /* MULE */ else @@ -1628,14 +1631,12 @@ mask_has_at_most_one_bit_p (int mask) } static eol_type_t -detect_eol_type (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_eol_type (struct detection_state *st, const Extbyte *src, + size_t n) { - int c; - while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (c == '\n') { if (st->eol.just_saw_cr) @@ -1674,10 +1675,8 @@ detect_eol_type (struct detection_state *st, const unsigned char *src, static int detect_coding_type (struct detection_state *st, const Extbyte *src, - unsigned int n, int just_do_eol) + size_t n, int just_do_eol) { - int c; - if (st->eol_type == EOL_AUTODETECT) st->eol_type = detect_eol_type (st, src, n); @@ -1688,7 +1687,7 @@ detect_coding_type (struct detection_state *st, const Extbyte *src, { for (; n; n--, src++) { - c = *src; + unsigned char c = *(unsigned char *) src; if ((c < 0x20 && !acceptable_control_char_p (c)) || c >= 0x80) { st->seen_non_ascii = 1; @@ -1914,8 +1913,8 @@ determine_real_coding_system (Lstream *stream, Lisp_Object *codesys_in_out, DEFUN ("detect-coding-region", Fdetect_coding_region, 2, 3, 0, /* Detect coding system of the text in the region between START and END. -Returned a list of possible coding systems ordered by priority. -If only ASCII characters are found, it returns 'undecided or one of +Return a list of possible coding systems ordered by priority. +If only ASCII characters are found, return 'undecided or one of its subsidiary coding systems according to a detected end-of-line type. Optional arg BUFFER defaults to the current buffer. */ @@ -1940,7 +1939,7 @@ type. Optional arg BUFFER defaults to the current buffer. decst.mask = ~0; while (1) { - unsigned char random_buffer[4096]; + Extbyte random_buffer[4096]; ssize_t nread = Lstream_read (istr, random_buffer, sizeof (random_buffer)); if (!nread) @@ -2196,7 +2195,7 @@ decoding_reader (Lstream *stream, unsigned char *data, size_t size) /* There might be some more end data produced in the translation. See the comment above. */ str->flags |= CODING_STATE_END; - mule_decode (stream, data, str->runoff, read_size); + mule_decode (stream, (Extbyte *) data, str->runoff, read_size); } if (data - orig_data == 0) @@ -2214,7 +2213,7 @@ decoding_writer (Lstream *stream, const unsigned char *data, size_t size) /* Decode all our data into the runoff, and then attempt to write it all out to the other end. Remove whatever chunk we succeeded in writing. */ - mule_decode (stream, data, str->runoff, size); + mule_decode (stream, (Extbyte *) data, str->runoff, size); retval = Lstream_write (str->other_end, Dynarr_atp (str->runoff, 0), Dynarr_length (str->runoff)); if (retval > 0) @@ -2366,8 +2365,8 @@ make_decoding_output_stream (Lstream *stream, Lisp_Object codesys) be used for both reading and writing. */ static void -mule_decode (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +mule_decode (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct decoding_stream *str = DECODING_STREAM_DATA (decoding); @@ -2431,7 +2430,10 @@ mule_decode (Lstream *decoding, const unsigned char *src, break; case CODESYS_CCL: str->ccl.last_block = str->flags & CODING_STATE_END; - ccl_driver (&str->ccl, src, dst, n, 0, CCL_MODE_DECODING); + /* When applying ccl program to stream, MUST NOT set NULL + pointer to src. */ + ccl_driver (&str->ccl, (src ? (unsigned char *)src : (unsigned char*)""), + dst, n, 0, CCL_MODE_DECODING); break; case CODESYS_ISO2022: decode_coding_iso2022 (decoding, src, dst, n); @@ -2810,8 +2812,8 @@ make_encoding_output_stream (Lstream *stream, Lisp_Object codesys) Store the encoded data into DST. */ static void -mule_encode (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +mule_encode (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); @@ -2843,7 +2845,10 @@ mule_encode (Lstream *encoding, const unsigned char *src, break; case CODESYS_CCL: str->ccl.last_block = str->flags & CODING_STATE_END; - ccl_driver (&str->ccl, src, dst, n, 0, CCL_MODE_ENCODING); + /* When applying ccl program to stream, MUST NOT set NULL + pointer to src. */ + ccl_driver (&str->ccl, ((src) ? src : (unsigned char*)""), + dst, n, 0, CCL_MODE_ENCODING); break; case CODESYS_ISO2022: encode_coding_iso2022 (encoding, src, dst, n); @@ -2957,14 +2962,11 @@ text. BUFFER defaults to the current buffer if unspecified. ((c) >= 0xA1 && (c) <= 0xDF) static int -detect_coding_sjis (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_sjis (struct detection_state *st, const Extbyte *src, size_t n) { - int c; - while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO) return 0; if (st->shift_jis.in_second_byte) @@ -2982,10 +2984,9 @@ detect_coding_sjis (struct detection_state *st, const unsigned char *src, /* Convert Shift-JIS data to internal format. */ static void -decode_coding_sjis (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_sjis (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { - unsigned char c; struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; unsigned int ch = str->ch; @@ -2993,7 +2994,7 @@ decode_coding_sjis (Lstream *decoding, const unsigned char *src, while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (ch) { @@ -3039,10 +3040,9 @@ decode_coding_sjis (Lstream *decoding, const unsigned char *src, /* Convert internally-formatted data to Shift-JIS. */ static void -encode_coding_sjis (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_sjis (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { - unsigned char c; struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); unsigned int flags = str->flags; unsigned int ch = str->ch; @@ -3050,7 +3050,7 @@ encode_coding_sjis (Lstream *encoding, const unsigned char *src, while (n--) { - c = *src++; + Bufbyte c = *src++; if (c == '\n') { if (eol_type != EOL_LF && eol_type != EOL_AUTODETECT) @@ -3119,16 +3119,16 @@ Return the corresponding character. } DEFUN ("encode-shift-jis-char", Fencode_shift_jis_char, 1, 1, 0, /* -Encode a JISX0208 character CHAR to SHIFT-JIS coding-system. +Encode a JISX0208 character CHARACTER to SHIFT-JIS coding-system. Return the corresponding character code in SHIFT-JIS as a cons of two bytes. */ - (ch)) + (character)) { Lisp_Object charset; int c1, c2, s1, s2; - CHECK_CHAR_COERCE_INT (ch); - BREAKUP_CHAR (XCHAR (ch), charset, c1, c2); + CHECK_CHAR_COERCE_INT (character); + BREAKUP_CHAR (XCHAR (character), charset, c1, c2); if (EQ (charset, Vcharset_japanese_jisx0208)) { ENCODE_SJIS (c1 | 0x80, c2 | 0x80, s1, s2); @@ -3243,14 +3243,11 @@ Return the corresponding character code in SHIFT-JIS as a cons of two bytes. } while (0) static int -detect_coding_big5 (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_big5 (struct detection_state *st, const Extbyte *src, size_t n) { - int c; - while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO || (c >= 0x80 && c <= 0xA0)) return 0; @@ -3269,10 +3266,9 @@ detect_coding_big5 (struct detection_state *st, const unsigned char *src, /* Convert Big5 data to internal format. */ static void -decode_coding_big5 (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_big5 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { - unsigned char c; struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; unsigned int ch = str->ch; @@ -3280,7 +3276,7 @@ decode_coding_big5 (Lstream *decoding, const unsigned char *src, while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; if (ch) { /* Previous character was first byte of Big5 char. */ @@ -3319,8 +3315,8 @@ decode_coding_big5 (Lstream *decoding, const unsigned char *src, /* Convert internally-formatted data to Big5. */ static void -encode_coding_big5 (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_big5 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { unsigned char c; struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); @@ -3407,16 +3403,16 @@ Return the corresponding character. } DEFUN ("encode-big5-char", Fencode_big5_char, 1, 1, 0, /* -Encode the Big5 character CH to BIG5 coding-system. +Encode the Big5 character CHARACTER in the BIG5 coding-system. Return the corresponding character code in Big5. */ - (ch)) + (character)) { Lisp_Object charset; int c1, c2, b1, b2; - CHECK_CHAR_COERCE_INT (ch); - BREAKUP_CHAR (XCHAR (ch), charset, c1, c2); + CHECK_CHAR_COERCE_INT (character); + BREAKUP_CHAR (XCHAR (character), charset, c1, c2); if (EQ (charset, Vcharset_chinese_big5_1) || EQ (charset, Vcharset_chinese_big5_2)) { @@ -3586,12 +3582,11 @@ encode_ucs4 (Lisp_Object charset, } static int -detect_coding_ucs4 (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_ucs4 (struct detection_state *st, const Extbyte *src, size_t n) { while (n--) { - int c = *src++; + unsigned char c = *(unsigned char *)src++; switch (st->ucs4.in_byte) { case 0: @@ -3611,8 +3606,8 @@ detect_coding_ucs4 (struct detection_state *st, const unsigned char *src, } static void -decode_coding_ucs4 (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_ucs4 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; @@ -3621,7 +3616,7 @@ decode_coding_ucs4 (Lstream *decoding, const unsigned char *src, while (n--) { - unsigned char c = *src++; + unsigned char c = *(unsigned char *)src++; switch (counter) { case 0: @@ -3647,8 +3642,8 @@ decode_coding_ucs4 (Lstream *decoding, const unsigned char *src, } static void -encode_coding_ucs4 (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_ucs4 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); unsigned int flags = str->flags; @@ -3713,9 +3708,9 @@ encode_coding_ucs4 (Lstream *encoding, const unsigned char *src, { /* #### Bother! We don't know how to handle this yet. */ - Dynarr_add (dst, 0); - Dynarr_add (dst, 0); - Dynarr_add (dst, 0); + Dynarr_add (dst, '\0'); + Dynarr_add (dst, '\0'); + Dynarr_add (dst, '\0'); Dynarr_add (dst, '~'); } else @@ -3786,12 +3781,11 @@ encode_coding_ucs4 (Lstream *encoding, const unsigned char *src, /************************************************************************/ static int -detect_coding_utf8 (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_utf8 (struct detection_state *st, const Extbyte *src, size_t n) { while (n--) { - unsigned char c = *src++; + unsigned char c = *(unsigned char *)src++; switch (st->utf8.in_byte) { case 0: @@ -3821,8 +3815,8 @@ detect_coding_utf8 (struct detection_state *st, const unsigned char *src, } static void -decode_coding_utf8 (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_utf8 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; @@ -3832,7 +3826,7 @@ decode_coding_utf8 (Lstream *decoding, const unsigned char *src, while (n--) { - unsigned char c = *src++; + unsigned char c = *(unsigned char *)src++; switch (counter) { case 0: @@ -3935,8 +3929,8 @@ encode_utf8 (Lisp_Object charset, } static void -encode_coding_utf8 (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_utf8 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); unsigned int flags = str->flags; @@ -4654,8 +4648,7 @@ parse_iso2022_esc (Lisp_Object codesys, struct iso2022_decoder *iso, } static int -detect_coding_iso2022 (struct detection_state *st, const unsigned char *src, - unsigned int n) +detect_coding_iso2022 (struct detection_state *st, const Extbyte *src, size_t n) { int mask; @@ -4685,7 +4678,7 @@ detect_coding_iso2022 (struct detection_state *st, const unsigned char *src, while (n--) { - int c = *src++; + unsigned char c = *(unsigned char *)src++; if (c >= 0xA0) { mask &= ~CODING_CATEGORY_ISO_7_MASK; @@ -4845,8 +4838,8 @@ ensure_correct_direction (int direction, Lisp_Coding_System *codesys, /* Convert ISO2022-format data to internal format. */ static void -decode_coding_iso2022 (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_iso2022 (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; @@ -4866,7 +4859,7 @@ decode_coding_iso2022 (Lstream *decoding, const unsigned char *src, while (n--) { - unsigned char c = *src++; + unsigned char c = *(unsigned char *)src++; if (flags & CODING_STATE_ESCAPE) { /* Within ESC sequence */ int retval = parse_iso2022_esc (coding_system, &str->iso2022, @@ -5171,8 +5164,8 @@ ensure_shift_out (struct encoding_stream *str, unsigned_char_dynarr *dst) /* Convert internally-formatted data to ISO2022 format. */ static void -encode_coding_iso2022 (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_iso2022 (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { unsigned char charmask, c; unsigned char char_boundary; @@ -5480,10 +5473,9 @@ encode_coding_iso2022 (Lstream *encoding, const unsigned char *src, contain all 256 possible byte values and that are not to be interpreted as being in any particular decoding. */ static void -decode_coding_no_conversion (Lstream *decoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +decode_coding_no_conversion (Lstream *decoding, const Extbyte *src, + unsigned_char_dynarr *dst, size_t n) { - unsigned char c; struct decoding_stream *str = DECODING_STREAM_DATA (decoding); unsigned int flags = str->flags; unsigned int ch = str->ch; @@ -5491,7 +5483,7 @@ decode_coding_no_conversion (Lstream *decoding, const unsigned char *src, while (n--) { - c = *src++; + unsigned char c = *(unsigned char *)src++; DECODE_HANDLE_EOL_TYPE (eol_type, c, flags, dst); DECODE_ADD_BINARY_CHAR (c, dst); @@ -5505,8 +5497,8 @@ decode_coding_no_conversion (Lstream *decoding, const unsigned char *src, } static void -encode_coding_no_conversion (Lstream *encoding, const unsigned char *src, - unsigned_char_dynarr *dst, unsigned int n) +encode_coding_no_conversion (Lstream *encoding, const Bufbyte *src, + unsigned_char_dynarr *dst, size_t n) { unsigned char c; struct encoding_stream *str = ENCODING_STREAM_DATA (encoding); diff --git a/src/fileio.c b/src/fileio.c index 49f9262..a726938 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -94,6 +94,12 @@ Lisp_Object Vwrite_region_annotations_so_far; /* File name in which we write a list of all our auto save files. */ Lisp_Object Vauto_save_list_file_name; +/* Prefix used to construct Vauto_save_list_file_name. */ +Lisp_Object Vauto_save_list_file_prefix; + +/* When non-nil, it prevents auto-save list file creation. */ +int inhibit_auto_save_session; + int disable_auto_save_when_buffer_shrinks; Lisp_Object Vdirectory_sep_char; @@ -393,31 +399,31 @@ call3_check_string (Lisp_Object fn, Lisp_Object arg0, DEFUN ("file-name-directory", Ffile_name_directory, 1, 1, 0, /* -Return the directory component in file name NAME. -Return nil if NAME does not include a directory. +Return the directory component in file name FILENAME. +Return nil if FILENAME does not include a directory. Otherwise return a directory spec. Given a Unix syntax file name, returns a string ending in slash. */ - (file)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben */ Bufbyte *beg; Bufbyte *p; Lisp_Object handler; - CHECK_STRING (file); + CHECK_STRING (filename); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (file, Qfile_name_directory); + handler = Ffind_file_name_handler (filename, Qfile_name_directory); if (!NILP (handler)) - return call2_check_string_or_nil (handler, Qfile_name_directory, file); + return call2_check_string_or_nil (handler, Qfile_name_directory, filename); #ifdef FILE_SYSTEM_CASE - file = FILE_SYSTEM_CASE (file); + filename = FILE_SYSTEM_CASE (filename); #endif - beg = XSTRING_DATA (file); - p = beg + XSTRING_LENGTH (file); + beg = XSTRING_DATA (filename); + p = beg + XSTRING_LENGTH (filename); while (p != beg && !IS_ANY_SEP (p[-1]) #ifdef WIN32_NATIVE @@ -452,27 +458,27 @@ Given a Unix syntax file name, returns a string ending in slash. } DEFUN ("file-name-nondirectory", Ffile_name_nondirectory, 1, 1, 0, /* -Return file name NAME sans its directory. +Return file name FILENAME sans its directory. For example, in a Unix-syntax file name, this is everything after the last slash, or the entire name if it contains no slash. */ - (file)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben */ Bufbyte *beg, *p, *end; Lisp_Object handler; - CHECK_STRING (file); + CHECK_STRING (filename); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (file, Qfile_name_nondirectory); + handler = Ffind_file_name_handler (filename, Qfile_name_nondirectory); if (!NILP (handler)) - return call2_check_string (handler, Qfile_name_nondirectory, file); + return call2_check_string (handler, Qfile_name_nondirectory, filename); - beg = XSTRING_DATA (file); - end = p = beg + XSTRING_LENGTH (file); + beg = XSTRING_DATA (filename); + end = p = beg + XSTRING_LENGTH (filename); while (p != beg && !IS_ANY_SEP (p[-1]) #ifdef WIN32_NATIVE @@ -493,7 +499,7 @@ If FILENAME is a directly usable file itself, return The `call-process' and `start-process' functions use this function to get a current directory to run processes in. */ - (filename)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben */ Lisp_Object handler; @@ -543,23 +549,23 @@ or passed as second argument to `expand-file-name'. For a Unix-syntax file name, just appends a slash, except for (file-name-as-directory \"\") => \"./\". */ - (file)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben */ char *buf; Lisp_Object handler; - CHECK_STRING (file); + CHECK_STRING (filename); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (file, Qfile_name_as_directory); + handler = Ffind_file_name_handler (filename, Qfile_name_as_directory); if (!NILP (handler)) - return call2_check_string (handler, Qfile_name_as_directory, file); + return call2_check_string (handler, Qfile_name_as_directory, filename); - buf = (char *) alloca (XSTRING_LENGTH (file) + 10); + buf = (char *) alloca (XSTRING_LENGTH (filename) + 10); return build_string (file_name_as_directory - (buf, (char *) XSTRING_DATA (file))); + (buf, (char *) XSTRING_DATA (filename))); } /* @@ -588,8 +594,8 @@ directory_file_name (const char *src, char *dst) } DEFUN ("directory-file-name", Fdirectory_file_name, 1, 1, 0, /* -Return the file name of the directory named DIR. -This is the name of the file that holds the data for the directory DIR. +Return the file name of the directory named DIRECTORY. +This is the name of the file that holds the data for the directory. This operation exists because a directory is also a file, but its name as a directory is different from its name as a file. In Unix-syntax, this function just removes the final slash. @@ -731,7 +737,7 @@ DEFUN ("expand-file-name", Fexpand_file_name, 1, 2, 0, /* Convert filename NAME to absolute, and canonicalize it. Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative (does not start with slash); if DEFAULT-DIRECTORY is nil or missing, -the current buffer's value of default-directory is used. +the current buffer's value of `default-directory' is used. File name components that are `.' are removed, and so are file name components followed by `..', along with the `..' itself; note that these simplifications are done without checking the resulting @@ -1247,10 +1253,10 @@ See also the function `substitute-in-file-name'. } DEFUN ("file-truename", Ffile_truename, 1, 2, 0, /* -Return the canonical name of the given FILE. -Second arg DEFAULT is directory to start with if FILE is relative +Return the canonical name of FILENAME. +Second arg DEFAULT is directory to start with if FILENAME is relative (does not start with slash); if DEFAULT is nil or missing, - the current buffer's value of default-directory is used. + the current buffer's value of `default-directory' is used. No component of the resulting pathname will be a symbolic link, as in the realpath() function. */ @@ -1389,12 +1395,11 @@ DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name, 1, 1, 0, /* Substitute environment variables referred to in FILENAME. `$FOO' where FOO is an environment variable name means to substitute the value of that variable. The variable name should be terminated -with a character not a letter, digit or underscore; otherwise, enclose +with a character, not a letter, digit or underscore; otherwise, enclose the entire variable name in braces. If `/~' appears, all of FILENAME through that `/' is discarded. - */ - (string)) + (filename)) { /* This function can GC. GC checked 2000-07-28 ben. */ Bufbyte *nm; @@ -1406,17 +1411,17 @@ If `/~' appears, all of FILENAME through that `/' is discarded. Bufbyte *xnm; Lisp_Object handler; - CHECK_STRING (string); + CHECK_STRING (filename); /* If the file name has special constructs in it, call the corresponding file handler. */ - handler = Ffind_file_name_handler (string, Qsubstitute_in_file_name); + handler = Ffind_file_name_handler (filename, Qsubstitute_in_file_name); if (!NILP (handler)) return call2_check_string_or_nil (handler, Qsubstitute_in_file_name, - string); + filename); - nm = XSTRING_DATA (string); - endp = nm + XSTRING_LENGTH (string); + nm = XSTRING_DATA (filename); + endp = nm + XSTRING_LENGTH (filename); /* If /~ or // appears, discard everything through first slash. */ @@ -1496,11 +1501,11 @@ If `/~' appears, all of FILENAME through that `/' is discarded. } if (!substituted) - return string; + return filename; - /* If substitution required, recopy the string and do it */ + /* If substitution required, recopy the filename and do it */ /* Make space in stack frame for the new copy */ - xnm = (Bufbyte *) alloca (XSTRING_LENGTH (string) + total + 1); + xnm = (Bufbyte *) alloca (XSTRING_LENGTH (filename) + total + 1); x = xnm; /* Copy the rest of the name through, replacing $ constructs with values */ @@ -1572,13 +1577,13 @@ If `/~' appears, all of FILENAME through that `/' is discarded. return make_string (xnm, x - xnm); badsubst: - syntax_error ("Bad format environment-variable substitution", string); + syntax_error ("Bad format environment-variable substitution", filename); missingclose: syntax_error ("Missing \"}\" in environment-variable substitution", - string); + filename); badvar: syntax_error_2 ("Substituting nonexistent environment variable", - string, build_string (target)); + filename, build_string ((char *) target)); /* NOTREACHED */ return Qnil; /* suppress compiler warning */ @@ -1662,7 +1667,7 @@ barf_or_query_if_file_exists (Lisp_Object absname, const char *querystring, DEFUN ("copy-file", Fcopy_file, 2, 4, "fCopy file: \nFCopy %s to file: \np\nP", /* -Copy FILE to NEWNAME. Both args must be strings. +Copy FILENAME to NEWNAME. Both args must be strings. Signals a `file-already-exists' error if file NEWNAME already exists, unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil. A number as third arg means request confirmation if NEWNAME already exists. @@ -1922,8 +1927,8 @@ internal_delete_file (Lisp_Object filename) DEFUN ("rename-file", Frename_file, 2, 3, "fRename file: \nFRename %s to file: \np", /* -Rename FILE as NEWNAME. Both args strings. -If file has names other than FILE, it continues to have those names. +Rename FILENAME as NEWNAME. Both args must be strings. +If file has names other than FILENAME, it continues to have those names. Signals a `file-already-exists' error if a file NEWNAME already exists unless optional third argument OK-IF-ALREADY-EXISTS is non-nil. A number as third arg means request confirmation if NEWNAME already exists. @@ -2006,7 +2011,7 @@ This is what happens in interactive use with M-x. DEFUN ("add-name-to-file", Fadd_name_to_file, 2, 3, "fAdd name to file: \nFName to add to %s: \np", /* -Give FILE additional name NEWNAME. Both args strings. +Give FILENAME additional name NEWNAME. Both args must be strings. Signals a `file-already-exists' error if a file NEWNAME already exists unless optional third argument OK-IF-ALREADY-EXISTS is non-nil. A number as third arg means request confirmation if NEWNAME already exists. @@ -2494,7 +2499,7 @@ This is the sort of file that holds an ordinary stream of data bytes. } DEFUN ("file-modes", Ffile_modes, 1, 1, 0, /* -Return mode bits of FILE, as an integer. +Return mode bits of file named FILENAME, as an integer. */ (filename)) { @@ -2531,7 +2536,7 @@ Return mode bits of FILE, as an integer. } DEFUN ("set-file-modes", Fset_file_modes, 2, 2, 0, /* -Set mode bits of FILE to MODE (an integer). +Set mode bits of file named FILENAME to MODE (an integer). Only the 12 low bits of MODE are used. */ (filename, mode)) @@ -2563,9 +2568,9 @@ Only the 12 low bits of MODE are used. DEFUN ("set-default-file-modes", Fset_default_file_modes, 1, 1, 0, /* Set the file permission bits for newly created files. -MASK should be an integer; if a permission's bit in MASK is 1, -subsequently created files will not have that permission enabled. -Only the low 9 bits are used. +The argument MODE should be an integer; if a bit in MODE is 1, +subsequently created files will not have the permission corresponding +to that bit enabled. Only the low 9 bits are used. This setting is inherited by subprocesses. */ (mode)) @@ -2669,13 +2674,12 @@ it should be a symbol, and the actual coding system that was used for the decoding is stored into it. It will in general be different from CODESYS if CODESYS specifies automatic encoding detection or end-of-line detection. -Currently BEG and END refer to byte positions (as opposed to character +Currently START and END refer to byte positions (as opposed to character positions), even in Mule. (Fixing this is very difficult.) */ - (filename, visit, beg, end, replace, codesys, used_codesys)) + (filename, visit, start, end, replace, codesys, used_codesys)) { /* This function can call lisp */ - /* #### dmoore - this function hasn't been checked for gc recently */ struct stat st; int fd; int saverrno = 0; @@ -2720,7 +2724,7 @@ positions), even in Mule. (Fixing this is very difficult.) if (!NILP (handler)) { val = call6 (handler, Qinsert_file_contents, filename, - visit, beg, end, replace); + visit, start, end, replace); goto handled; } @@ -2729,7 +2733,7 @@ positions), even in Mule. (Fixing this is very difficult.) CHECK_SYMBOL (used_codesys); #endif - if ( (!NILP (beg) || !NILP (end)) && !NILP (visit) ) + if ( (!NILP (start) || !NILP (end)) && !NILP (visit) ) error ("Attempt to visit less than an entire file"); fd = -1; @@ -2746,7 +2750,7 @@ positions), even in Mule. (Fixing this is very difficult.) #ifdef S_IFREG /* Signal an error if we are accessing a non-regular file, with - REPLACE, BEG or END being non-nil. */ + REPLACE, START or END being non-nil. */ if (!S_ISREG (st.st_mode)) { not_regular = 1; @@ -2754,21 +2758,22 @@ positions), even in Mule. (Fixing this is very difficult.) if (!NILP (visit)) goto notfound; - if (!NILP (replace) || !NILP (beg) || !NILP (end)) + if (!NILP (replace) || !NILP (start) || !NILP (end)) { end_multiple_change (buf, mc_count); - return Fsignal (Qfile_error, - list2 (build_translated_string("not a regular file"), - filename)); + RETURN_UNGCPRO + (Fsignal (Qfile_error, + list2 (build_translated_string("not a regular file"), + filename))); } } #endif /* S_IFREG */ - if (!NILP (beg)) - CHECK_INT (beg); + if (!NILP (start)) + CHECK_INT (start); else - beg = Qzero; + start = Qzero; if (!NILP (end)) CHECK_INT (end); @@ -2911,7 +2916,7 @@ positions), even in Mule. (Fixing this is very difficult.) same_at_end += overlap; /* Arrange to read only the nonmatching middle part of the file. */ - beg = make_int (same_at_start - BUF_BEGV (buf)); + start = make_int (same_at_start - BUF_BEGV (buf)); end = make_int (st.st_size - (BUF_ZV (buf) - same_at_end)); buffer_delete_range (buf, same_at_start, same_at_end, @@ -2923,7 +2928,7 @@ positions), even in Mule. (Fixing this is very difficult.) if (!not_regular) { - total = XINT (end) - XINT (beg); + total = XINT (end) - XINT (start); /* Make sure point-max won't overflow after this insertion. */ if (total != XINT (make_int (total))) @@ -2934,7 +2939,7 @@ positions), even in Mule. (Fixing this is very difficult.) will make the stream functions read as much as possible. */ total = -1; - if (XINT (beg) != 0 + if (XINT (start) != 0 #ifdef FSFMACS_SPEEDY_INSERT /* why was this here? asked jwz. The reason is that the replace-mode connivings above will normally put the file pointer other than @@ -2943,7 +2948,7 @@ positions), even in Mule. (Fixing this is very difficult.) #endif /* !FSFMACS_SPEEDY_INSERT */ ) { - if (lseek (fd, XINT (beg), 0) < 0) + if (lseek (fd, XINT (start), 0) < 0) report_file_error ("Setting file position", list1 (filename)); } @@ -3027,6 +3032,9 @@ positions), even in Mule. (Fixing this is very difficult.) it could be called here. But that's just silly. There's no reason C code can't call out to Lisp code, and it's a lot cleaner this way. */ + /* Note: compute-buffer-file-truename is called for + side-effect! Its return value is intentionally + ignored. */ if (!NILP (Ffboundp (Qcompute_buffer_file_truename))) call1 (Qcompute_buffer_file_truename, make_buffer (buf)); } @@ -3647,18 +3655,18 @@ Decrypt STRING using KEY. DEFUN ("verify-visited-file-modtime", Fverify_visited_file_modtime, 1, 1, 0, /* -Return t if last mod time of BUF's visited file matches what BUF records. +Return t if last mod time of BUFFER's visited file matches what BUFFER records. This means that the file has not been changed since it was visited or saved. */ - (buf)) + (buffer)) { /* This function can call lisp; GC checked 2000-07-11 ben */ struct buffer *b; struct stat st; Lisp_Object handler; - CHECK_BUFFER (buf); - b = XBUFFER (buf); + CHECK_BUFFER (buffer); + b = XBUFFER (buffer); if (!STRINGP (b->filename)) return Qt; if (b->modtime == 0) return Qt; @@ -3668,7 +3676,7 @@ This means that the file has not been changed since it was visited or saved. handler = Ffind_file_name_handler (b->filename, Qverify_visited_file_modtime); if (!NILP (handler)) - return call2 (handler, Qverify_visited_file_modtime, buf); + return call2 (handler, Qverify_visited_file_modtime, buffer); if (xemacs_stat ((char *) XSTRING_DATA (b->filename), &st) < 0) { @@ -3982,7 +3990,9 @@ Non-nil second argument means save only current buffer. /* Open the auto-save list file, if necessary. We only do this now so that the file only exists if we actually auto-saved any files. */ - if (!auto_saved && STRINGP (listfile) && listdesc < 0) + if (!auto_saved && !inhibit_auto_save_session + && !NILP (Vauto_save_list_file_prefix) + && STRINGP (listfile) && listdesc < 0) { listdesc = open ((char *) XSTRING_DATA (listfile), O_WRONLY | O_TRUNC | O_CREAT | OPEN_BINARY, @@ -4298,6 +4308,18 @@ File name in which we write a list of all auto save file names. */ ); Vauto_save_list_file_name = Qnil; + DEFVAR_LISP ("auto-save-list-file-prefix", &Vauto_save_list_file_prefix /* +Prefix for generating auto-save-list-file-name. +Emacs's pid and the system name will be appended to +this prefix to create a unique file name. +*/ ); + Vauto_save_list_file_prefix = build_string ("~/.saves-"); + + DEFVAR_BOOL ("inhibit-auto-save-session", &inhibit_auto_save_session /* +When non-nil, inhibit auto save list file creation. +*/ ); + inhibit_auto_save_session = 0; + DEFVAR_BOOL ("disable-auto-save-when-buffer-shrinks", &disable_auto_save_when_buffer_shrinks /* If non-nil, auto-saving is disabled when a buffer shrinks too much. diff --git a/src/filelock.c b/src/filelock.c index 7a645c2..308565b 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -32,6 +32,7 @@ Boston, MA 02111-1307, USA. */ Lisp_Object Qask_user_about_supersession_threat; Lisp_Object Qask_user_about_lock; +int inhibit_clash_detection; #ifdef CLASH_DETECTION @@ -311,10 +312,15 @@ lock_file (Lisp_Object fn) register Lisp_Object attack, orig_fn; register char *lfname, *locker; lock_info_type lock_info; - struct gcpro gcpro1,gcpro2; + struct gcpro gcpro1, gcpro2, gcpro3; + Lisp_Object old_current_buffer; Lisp_Object subject_buf; - GCPRO2 (fn, subject_buf); + if (inhibit_clash_detection) + return; + + XSETBUFFER (old_current_buffer, current_buffer); + GCPRO3 (fn, subject_buf, old_current_buffer); orig_fn = fn; fn = Fexpand_file_name (fn, Qnil); @@ -333,8 +339,10 @@ lock_file (Lisp_Object fn) } /* Try to lock the lock. */ - if (lock_if_free (&lock_info, lfname) <= 0) - /* Return now if we have locked it, or if lock creation failed */ + if (current_buffer != XBUFFER (old_current_buffer) + || lock_if_free (&lock_info, lfname) <= 0) + /* Return now if we have locked it, or if lock creation failed + or current buffer is killed. */ goto done; /* Else consider breaking the lock */ @@ -347,7 +355,7 @@ lock_file (Lisp_Object fn) attack = call2_in_buffer (BUFFERP (subject_buf) ? XBUFFER (subject_buf) : current_buffer, Qask_user_about_lock , fn, build_string (locker)); - if (!NILP (attack)) + if (!NILP (attack) && current_buffer == XBUFFER (old_current_buffer)) /* User says take the lock */ { lock_file_1 (lfname, 1); @@ -488,5 +496,13 @@ syms_of_filelock (void) defsymbol (&Qask_user_about_lock, "ask-user-about-lock"); } +void +vars_of_filelock (void) +{ + DEFVAR_BOOL ("inhibit-clash-detection", &inhibit_clash_detection /* +Non-nil inhibits creation of lock file to detect clash. +*/); + inhibit_clash_detection = 0; +} #endif /* CLASH_DETECTION */ diff --git a/src/floatfns.c b/src/floatfns.c index 337c581..de0c407 100644 --- a/src/floatfns.c +++ b/src/floatfns.c @@ -212,86 +212,88 @@ extract_float (Lisp_Object num) #ifdef LISP_FLOAT_TYPE DEFUN ("acos", Facos, 1, 1, 0, /* -Return the inverse cosine of ARG. +Return the inverse cosine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 1.0 || d < -1.0) - domain_error ("acos", arg); + domain_error ("acos", number); #endif - IN_FLOAT (d = acos (d), "acos", arg); + IN_FLOAT (d = acos (d), "acos", number); return make_float (d); } DEFUN ("asin", Fasin, 1, 1, 0, /* -Return the inverse sine of ARG. +Return the inverse sine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 1.0 || d < -1.0) - domain_error ("asin", arg); + domain_error ("asin", number); #endif - IN_FLOAT (d = asin (d), "asin", arg); + IN_FLOAT (d = asin (d), "asin", number); return make_float (d); } DEFUN ("atan", Fatan, 1, 2, 0, /* -Return the inverse tangent of ARG. +Return the inverse tangent of NUMBER. +If optional second argument NUMBER2 is provided, +return atan2 (NUMBER, NUMBER2). */ - (arg1, arg2)) + (number, number2)) { - double d = extract_float (arg1); + double d = extract_float (number); - if (NILP (arg2)) - IN_FLOAT (d = atan (d), "atan", arg1); + if (NILP (number2)) + IN_FLOAT (d = atan (d), "atan", number); else { - double d2 = extract_float (arg2); + double d2 = extract_float (number2); #ifdef FLOAT_CHECK_DOMAIN if (d == 0.0 && d2 == 0.0) - domain_error2 ("atan", arg1, arg2); + domain_error2 ("atan", number, number2); #endif - IN_FLOAT2 (d = atan2 (d, d2), "atan", arg1, arg2); + IN_FLOAT2 (d = atan2 (d, d2), "atan", number, number2); } return make_float (d); } DEFUN ("cos", Fcos, 1, 1, 0, /* -Return the cosine of ARG. +Return the cosine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = cos (d), "cos", arg); + double d = extract_float (number); + IN_FLOAT (d = cos (d), "cos", number); return make_float (d); } DEFUN ("sin", Fsin, 1, 1, 0, /* -Return the sine of ARG. +Return the sine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = sin (d), "sin", arg); + double d = extract_float (number); + IN_FLOAT (d = sin (d), "sin", number); return make_float (d); } DEFUN ("tan", Ftan, 1, 1, 0, /* -Return the tangent of ARG. +Return the tangent of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); double c = cos (d); #ifdef FLOAT_CHECK_DOMAIN if (c == 0.0) - domain_error ("tan", arg); + domain_error ("tan", number); #endif - IN_FLOAT (d = (sin (d) / c), "tan", arg); + IN_FLOAT (d = (sin (d) / c), "tan", number); return make_float (d); } #endif /* LISP_FLOAT_TYPE (trig functions) */ @@ -302,68 +304,68 @@ Return the tangent of ARG. /* #ifdef LISP_FLOAT_TYPE */ DEFUN ("bessel-j0", Fbessel_j0, 1, 1, 0, /* -Return the bessel function j0 of ARG. +Return the bessel function j0 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = j0 (d), "bessel-j0", arg); + double d = extract_float (number); + IN_FLOAT (d = j0 (d), "bessel-j0", number); return make_float (d); } DEFUN ("bessel-j1", Fbessel_j1, 1, 1, 0, /* -Return the bessel function j1 of ARG. +Return the bessel function j1 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = j1 (d), "bessel-j1", arg); + double d = extract_float (number); + IN_FLOAT (d = j1 (d), "bessel-j1", number); return make_float (d); } DEFUN ("bessel-jn", Fbessel_jn, 2, 2, 0, /* -Return the order N bessel function output jn of ARG. -The first arg (the order) is truncated to an integer. +Return the order N bessel function output jn of NUMBER. +The first number (the order) is truncated to an integer. */ - (arg1, arg2)) + (number1, number2)) { - int i1 = extract_float (arg1); - double f2 = extract_float (arg2); + int i1 = extract_float (number1); + double f2 = extract_float (number2); - IN_FLOAT (f2 = jn (i1, f2), "bessel-jn", arg1); + IN_FLOAT (f2 = jn (i1, f2), "bessel-jn", number1); return make_float (f2); } DEFUN ("bessel-y0", Fbessel_y0, 1, 1, 0, /* -Return the bessel function y0 of ARG. +Return the bessel function y0 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = y0 (d), "bessel-y0", arg); + double d = extract_float (number); + IN_FLOAT (d = y0 (d), "bessel-y0", number); return make_float (d); } DEFUN ("bessel-y1", Fbessel_y1, 1, 1, 0, /* -Return the bessel function y1 of ARG. +Return the bessel function y1 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = y1 (d), "bessel-y0", arg); + double d = extract_float (number); + IN_FLOAT (d = y1 (d), "bessel-y0", number); return make_float (d); } DEFUN ("bessel-yn", Fbessel_yn, 2, 2, 0, /* -Return the order N bessel function output yn of ARG. -The first arg (the order) is truncated to an integer. +Return the order N bessel function output yn of NUMBER. +The first number (the order) is truncated to an integer. */ - (arg1, arg2)) + (number1, number2)) { - int i1 = extract_float (arg1); - double f2 = extract_float (arg2); + int i1 = extract_float (number1); + double f2 = extract_float (number2); - IN_FLOAT (f2 = yn (i1, f2), "bessel-yn", arg1); + IN_FLOAT (f2 = yn (i1, f2), "bessel-yn", number1); return make_float (f2); } @@ -374,32 +376,32 @@ The first arg (the order) is truncated to an integer. /* #ifdef LISP_FLOAT_TYPE */ DEFUN ("erf", Ferf, 1, 1, 0, /* -Return the mathematical error function of ARG. +Return the mathematical error function of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = erf (d), "erf", arg); + double d = extract_float (number); + IN_FLOAT (d = erf (d), "erf", number); return make_float (d); } DEFUN ("erfc", Ferfc, 1, 1, 0, /* -Return the complementary error function of ARG. +Return the complementary error function of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = erfc (d), "erfc", arg); + double d = extract_float (number); + IN_FLOAT (d = erfc (d), "erfc", number); return make_float (d); } DEFUN ("log-gamma", Flog_gamma, 1, 1, 0, /* -Return the log gamma of ARG. +Return the log gamma of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = lgamma (d), "log-gamma", arg); + double d = extract_float (number); + IN_FLOAT (d = lgamma (d), "log-gamma", number); return make_float (d); } @@ -410,35 +412,35 @@ Return the log gamma of ARG. #ifdef LISP_FLOAT_TYPE DEFUN ("exp", Fexp, 1, 1, 0, /* -Return the exponential base e of ARG. +Return the exponential base e of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 709.7827) /* Assume IEEE doubles here */ - range_error ("exp", arg); + range_error ("exp", number); else if (d < -709.0) return make_float (0.0); else #endif - IN_FLOAT (d = exp (d), "exp", arg); + IN_FLOAT (d = exp (d), "exp", number); return make_float (d); } #endif /* LISP_FLOAT_TYPE */ DEFUN ("expt", Fexpt, 2, 2, 0, /* -Return the exponential ARG1 ** ARG2. +Return the exponential NUMBER1 ** NUMBER2. */ - (arg1, arg2)) + (number1, number2)) { - if (INTP (arg1) && /* common lisp spec */ - INTP (arg2)) /* don't promote, if both are ints */ + if (INTP (number1) && /* common lisp spec */ + INTP (number2)) /* don't promote, if both are ints */ { EMACS_INT retval; - EMACS_INT x = XINT (arg1); - EMACS_INT y = XINT (arg2); + EMACS_INT x = XINT (number1); + EMACS_INT y = XINT (number2); if (y < 0) { @@ -465,98 +467,99 @@ Return the exponential ARG1 ** ARG2. #ifdef LISP_FLOAT_TYPE { - double f1 = extract_float (arg1); - double f2 = extract_float (arg2); + double f1 = extract_float (number1); + double f2 = extract_float (number2); /* Really should check for overflow, too */ if (f1 == 0.0 && f2 == 0.0) f1 = 1.0; # ifdef FLOAT_CHECK_DOMAIN else if ((f1 == 0.0 && f2 < 0.0) || (f1 < 0 && f2 != floor(f2))) - domain_error2 ("expt", arg1, arg2); + domain_error2 ("expt", number1, number2); # endif /* FLOAT_CHECK_DOMAIN */ - IN_FLOAT2 (f1 = pow (f1, f2), "expt", arg1, arg2); + IN_FLOAT2 (f1 = pow (f1, f2), "expt", number1, number2); return make_float (f1); } #else - CHECK_INT_OR_FLOAT (arg1); - CHECK_INT_OR_FLOAT (arg2); - return Fexpt (arg1, arg2); + CHECK_INT_OR_FLOAT (number1); + CHECK_INT_OR_FLOAT (number2); + return Fexpt (number1, number2); #endif /* LISP_FLOAT_TYPE */ } #ifdef LISP_FLOAT_TYPE DEFUN ("log", Flog, 1, 2, 0, /* -Return the natural logarithm of ARG. -If second optional argument BASE is given, return log ARG using that base. +Return the natural logarithm of NUMBER. +If second optional argument BASE is given, return the logarithm of +NUMBER using that base. */ - (arg, base)) + (number, base)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d <= 0.0) - domain_error2 ("log", arg, base); + domain_error2 ("log", number, base); #endif if (NILP (base)) - IN_FLOAT (d = log (d), "log", arg); + IN_FLOAT (d = log (d), "log", number); else { double b = extract_float (base); #ifdef FLOAT_CHECK_DOMAIN if (b <= 0.0 || b == 1.0) - domain_error2 ("log", arg, base); + domain_error2 ("log", number, base); #endif if (b == 10.0) - IN_FLOAT2 (d = log10 (d), "log", arg, base); + IN_FLOAT2 (d = log10 (d), "log", number, base); else - IN_FLOAT2 (d = (log (d) / log (b)), "log", arg, base); + IN_FLOAT2 (d = (log (d) / log (b)), "log", number, base); } return make_float (d); } DEFUN ("log10", Flog10, 1, 1, 0, /* -Return the logarithm base 10 of ARG. +Return the logarithm base 10 of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d <= 0.0) - domain_error ("log10", arg); + domain_error ("log10", number); #endif - IN_FLOAT (d = log10 (d), "log10", arg); + IN_FLOAT (d = log10 (d), "log10", number); return make_float (d); } DEFUN ("sqrt", Fsqrt, 1, 1, 0, /* -Return the square root of ARG. +Return the square root of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d < 0.0) - domain_error ("sqrt", arg); + domain_error ("sqrt", number); #endif - IN_FLOAT (d = sqrt (d), "sqrt", arg); + IN_FLOAT (d = sqrt (d), "sqrt", number); return make_float (d); } DEFUN ("cube-root", Fcube_root, 1, 1, 0, /* -Return the cube root of ARG. +Return the cube root of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef HAVE_CBRT - IN_FLOAT (d = cbrt (d), "cube-root", arg); + IN_FLOAT (d = cbrt (d), "cube-root", number); #else if (d >= 0.0) - IN_FLOAT (d = pow (d, 1.0/3.0), "cube-root", arg); + IN_FLOAT (d = pow (d, 1.0/3.0), "cube-root", number); else - IN_FLOAT (d = -pow (-d, 1.0/3.0), "cube-root", arg); + IN_FLOAT (d = -pow (-d, 1.0/3.0), "cube-root", number); #endif return make_float (d); } @@ -568,90 +571,90 @@ Return the cube root of ARG. /* #if 0 Not clearly worth adding... */ DEFUN ("acosh", Facosh, 1, 1, 0, /* -Return the inverse hyperbolic cosine of ARG. +Return the inverse hyperbolic cosine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d < 1.0) - domain_error ("acosh", arg); + domain_error ("acosh", number); #endif #ifdef HAVE_INVERSE_HYPERBOLIC - IN_FLOAT (d = acosh (d), "acosh", arg); + IN_FLOAT (d = acosh (d), "acosh", number); #else - IN_FLOAT (d = log (d + sqrt (d*d - 1.0)), "acosh", arg); + IN_FLOAT (d = log (d + sqrt (d*d - 1.0)), "acosh", number); #endif return make_float (d); } DEFUN ("asinh", Fasinh, 1, 1, 0, /* -Return the inverse hyperbolic sine of ARG. +Return the inverse hyperbolic sine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef HAVE_INVERSE_HYPERBOLIC - IN_FLOAT (d = asinh (d), "asinh", arg); + IN_FLOAT (d = asinh (d), "asinh", number); #else - IN_FLOAT (d = log (d + sqrt (d*d + 1.0)), "asinh", arg); + IN_FLOAT (d = log (d + sqrt (d*d + 1.0)), "asinh", number); #endif return make_float (d); } DEFUN ("atanh", Fatanh, 1, 1, 0, /* -Return the inverse hyperbolic tangent of ARG. +Return the inverse hyperbolic tangent of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d >= 1.0 || d <= -1.0) - domain_error ("atanh", arg); + domain_error ("atanh", number); #endif #ifdef HAVE_INVERSE_HYPERBOLIC - IN_FLOAT (d = atanh (d), "atanh", arg); + IN_FLOAT (d = atanh (d), "atanh", number); #else - IN_FLOAT (d = 0.5 * log ((1.0 + d) / (1.0 - d)), "atanh", arg); + IN_FLOAT (d = 0.5 * log ((1.0 + d) / (1.0 - d)), "atanh", number); #endif return make_float (d); } DEFUN ("cosh", Fcosh, 1, 1, 0, /* -Return the hyperbolic cosine of ARG. +Return the hyperbolic cosine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 710.0 || d < -710.0) - range_error ("cosh", arg); + range_error ("cosh", number); #endif - IN_FLOAT (d = cosh (d), "cosh", arg); + IN_FLOAT (d = cosh (d), "cosh", number); return make_float (d); } DEFUN ("sinh", Fsinh, 1, 1, 0, /* -Return the hyperbolic sine of ARG. +Return the hyperbolic sine of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); #ifdef FLOAT_CHECK_DOMAIN if (d > 710.0 || d < -710.0) - range_error ("sinh", arg); + range_error ("sinh", number); #endif - IN_FLOAT (d = sinh (d), "sinh", arg); + IN_FLOAT (d = sinh (d), "sinh", number); return make_float (d); } DEFUN ("tanh", Ftanh, 1, 1, 0, /* -Return the hyperbolic tangent of ARG. +Return the hyperbolic tangent of NUMBER. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = tanh (d), "tanh", arg); + double d = extract_float (number); + IN_FLOAT (d = tanh (d), "tanh", number); return make_float (d); } #endif /* LISP_FLOAT_TYPE (inverse trig functions) */ @@ -659,64 +662,64 @@ Return the hyperbolic tangent of ARG. /* Rounding functions */ DEFUN ("abs", Fabs, 1, 1, 0, /* -Return the absolute value of ARG. +Return the absolute value of NUMBER. */ - (arg)) + (number)) { #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) + if (FLOATP (number)) { - IN_FLOAT (arg = make_float (fabs (XFLOAT_DATA (arg))), - "abs", arg); - return arg; + IN_FLOAT (number = make_float (fabs (XFLOAT_DATA (number))), + "abs", number); + return number; } #endif /* LISP_FLOAT_TYPE */ - if (INTP (arg)) - return (XINT (arg) >= 0) ? arg : make_int (- XINT (arg)); + if (INTP (number)) + return (XINT (number) >= 0) ? number : make_int (- XINT (number)); - return Fabs (wrong_type_argument (Qnumberp, arg)); + return Fabs (wrong_type_argument (Qnumberp, number)); } #ifdef LISP_FLOAT_TYPE DEFUN ("float", Ffloat, 1, 1, 0, /* -Return the floating point number numerically equal to ARG. +Return the floating point number numerically equal to NUMBER. */ - (arg)) + (number)) { - if (INTP (arg)) - return make_float ((double) XINT (arg)); + if (INTP (number)) + return make_float ((double) XINT (number)); - if (FLOATP (arg)) /* give 'em the same float back */ - return arg; + if (FLOATP (number)) /* give 'em the same float back */ + return number; - return Ffloat (wrong_type_argument (Qnumberp, arg)); + return Ffloat (wrong_type_argument (Qnumberp, number)); } #endif /* LISP_FLOAT_TYPE */ #ifdef LISP_FLOAT_TYPE DEFUN ("logb", Flogb, 1, 1, 0, /* -Return largest integer <= the base 2 log of the magnitude of ARG. +Return largest integer <= the base 2 log of the magnitude of NUMBER. This is the same as the exponent of a float. */ - (arg)) + (number)) { - double f = extract_float (arg); + double f = extract_float (number); if (f == 0.0) return make_int (- (EMACS_INT)(((EMACS_UINT) 1) << (VALBITS - 1))); /* most-negative-fixnum */ #ifdef HAVE_LOGB { Lisp_Object val; - IN_FLOAT (val = make_int ((EMACS_INT) logb (f)), "logb", arg); + IN_FLOAT (val = make_int ((EMACS_INT) logb (f)), "logb", number); return val; } #else #ifdef HAVE_FREXP { int exqp; - IN_FLOAT (frexp (f, &exqp), "logb", arg); + IN_FLOAT (frexp (f, &exqp), "logb", number); return make_int (exqp - 1); } #else @@ -750,33 +753,34 @@ This is the same as the exponent of a float. DEFUN ("ceiling", Fceiling, 1, 1, 0, /* -Return the smallest integer no less than ARG. (Round toward +inf.) +Return the smallest integer no less than NUMBER. (Round toward +inf.) */ - (arg)) + (number)) { #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) + if (FLOATP (number)) { double d; - IN_FLOAT ((d = ceil (XFLOAT_DATA (arg))), "ceiling", arg); - return (float_to_int (d, "ceiling", arg, Qunbound)); + IN_FLOAT ((d = ceil (XFLOAT_DATA (number))), "ceiling", number); + return (float_to_int (d, "ceiling", number, Qunbound)); } #endif /* LISP_FLOAT_TYPE */ - if (INTP (arg)) - return arg; + if (INTP (number)) + return number; - return Fceiling (wrong_type_argument (Qnumberp, arg)); + return Fceiling (wrong_type_argument (Qnumberp, number)); } DEFUN ("floor", Ffloor, 1, 2, 0, /* -Return the largest integer no greater than ARG. (Round towards -inf.) -With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR. +Return the largest integer no greater than NUMBER. (Round towards -inf.) +With optional second argument DIVISOR, return the largest integer no +greater than NUMBER/DIVISOR. */ - (arg, divisor)) + (number, divisor)) { - CHECK_INT_OR_FLOAT (arg); + CHECK_INT_OR_FLOAT (number); if (! NILP (divisor)) { @@ -785,20 +789,20 @@ With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR. CHECK_INT_OR_FLOAT (divisor); #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg) || FLOATP (divisor)) + if (FLOATP (number) || FLOATP (divisor)) { - double f1 = extract_float (arg); + double f1 = extract_float (number); double f2 = extract_float (divisor); if (f2 == 0) Fsignal (Qarith_error, Qnil); - IN_FLOAT2 (f1 = floor (f1 / f2), "floor", arg, divisor); - return float_to_int (f1, "floor", arg, divisor); + IN_FLOAT2 (f1 = floor (f1 / f2), "floor", number, divisor); + return float_to_int (f1, "floor", number, divisor); } #endif /* LISP_FLOAT_TYPE */ - i1 = XINT (arg); + i1 = XINT (number); i2 = XINT (divisor); if (i2 == 0) @@ -814,53 +818,53 @@ With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR. } #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) + if (FLOATP (number)) { double d; - IN_FLOAT ((d = floor (XFLOAT_DATA (arg))), "floor", arg); - return (float_to_int (d, "floor", arg, Qunbound)); + IN_FLOAT ((d = floor (XFLOAT_DATA (number))), "floor", number); + return (float_to_int (d, "floor", number, Qunbound)); } #endif /* LISP_FLOAT_TYPE */ - return arg; + return number; } DEFUN ("round", Fround, 1, 1, 0, /* -Return the nearest integer to ARG. +Return the nearest integer to NUMBER. */ - (arg)) + (number)) { #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) + if (FLOATP (number)) { double d; /* Screw the prevailing rounding mode. */ - IN_FLOAT ((d = emacs_rint (XFLOAT_DATA (arg))), "round", arg); - return (float_to_int (d, "round", arg, Qunbound)); + IN_FLOAT ((d = emacs_rint (XFLOAT_DATA (number))), "round", number); + return (float_to_int (d, "round", number, Qunbound)); } #endif /* LISP_FLOAT_TYPE */ - if (INTP (arg)) - return arg; + if (INTP (number)) + return number; - return Fround (wrong_type_argument (Qnumberp, arg)); + return Fround (wrong_type_argument (Qnumberp, number)); } DEFUN ("truncate", Ftruncate, 1, 1, 0, /* Truncate a floating point number to an integer. Rounds the value toward zero. */ - (arg)) + (number)) { #ifdef LISP_FLOAT_TYPE - if (FLOATP (arg)) - return float_to_int (XFLOAT_DATA (arg), "truncate", arg, Qunbound); + if (FLOATP (number)) + return float_to_int (XFLOAT_DATA (number), "truncate", number, Qunbound); #endif /* LISP_FLOAT_TYPE */ - if (INTP (arg)) - return arg; + if (INTP (number)) + return number; - return Ftruncate (wrong_type_argument (Qnumberp, arg)); + return Ftruncate (wrong_type_argument (Qnumberp, number)); } /* Float-rounding functions. */ @@ -868,34 +872,34 @@ Rounds the value toward zero. /* #if 1 It's not clear these are worth adding... */ DEFUN ("fceiling", Ffceiling, 1, 1, 0, /* -Return the smallest integer no less than ARG, as a float. +Return the smallest integer no less than NUMBER, as a float. \(Round toward +inf.\) */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = ceil (d), "fceiling", arg); + double d = extract_float (number); + IN_FLOAT (d = ceil (d), "fceiling", number); return make_float (d); } DEFUN ("ffloor", Fffloor, 1, 1, 0, /* -Return the largest integer no greater than ARG, as a float. +Return the largest integer no greater than NUMBER, as a float. \(Round towards -inf.\) */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = floor (d), "ffloor", arg); + double d = extract_float (number); + IN_FLOAT (d = floor (d), "ffloor", number); return make_float (d); } DEFUN ("fround", Ffround, 1, 1, 0, /* -Return the nearest integer to ARG, as a float. +Return the nearest integer to NUMBER, as a float. */ - (arg)) + (number)) { - double d = extract_float (arg); - IN_FLOAT (d = emacs_rint (d), "fround", arg); + double d = extract_float (number); + IN_FLOAT (d = emacs_rint (d), "fround", number); return make_float (d); } @@ -903,13 +907,13 @@ DEFUN ("ftruncate", Fftruncate, 1, 1, 0, /* Truncate a floating point number to an integral float value. Rounds the value toward zero. */ - (arg)) + (number)) { - double d = extract_float (arg); + double d = extract_float (number); if (d >= 0.0) - IN_FLOAT (d = floor (d), "ftruncate", arg); + IN_FLOAT (d = floor (d), "ftruncate", number); else - IN_FLOAT (d = ceil (d), "ftruncate", arg); + IN_FLOAT (d = ceil (d), "ftruncate", number); return make_float (d); } diff --git a/src/frame.h b/src/frame.h index 4ce3d15..9a80e8e 100644 --- a/src/frame.h +++ b/src/frame.h @@ -772,10 +772,8 @@ extern int frame_changed; DEVICE_FRAME_LOOP (frmcons, XDEVICE (XCAR (devcons))) void update_frame_title (struct frame *f); -Lisp_Object next_frame (Lisp_Object f, Lisp_Object frametype, - Lisp_Object console); -Lisp_Object previous_frame (Lisp_Object f, Lisp_Object frametype, - Lisp_Object console); +Lisp_Object next_frame (Lisp_Object, Lisp_Object, Lisp_Object); +Lisp_Object previous_frame (Lisp_Object, Lisp_Object, Lisp_Object); void pixel_to_char_size (struct frame *f, int pixel_width, int pixel_height, int *char_width, int *char_height); void char_to_pixel_size (struct frame *f, int char_width, int char_height, @@ -811,7 +809,7 @@ void delete_frame_internal (struct frame *f, int force, void io_error_delete_frame (Lisp_Object frame); Lisp_Object find_some_frame (int (*predicate) (Lisp_Object, void *), void *closure); -int device_matches_console_spec (Lisp_Object device, Lisp_Object console); +int device_matches_device_spec (Lisp_Object device, Lisp_Object device_spec); Lisp_Object frame_first_window (struct frame *f); int show_gc_cursor (struct frame *f, Lisp_Object cursor); void set_frame_selected_window (struct frame *f, Lisp_Object window); diff --git a/src/glyphs.c b/src/glyphs.c index 2953dce..d69bb2d 100644 --- a/src/glyphs.c +++ b/src/glyphs.c @@ -226,7 +226,7 @@ valid_image_instantiator_format_p (Lisp_Object format, Lisp_Object locale) DEFUN ("valid-image-instantiator-format-p", Fvalid_image_instantiator_format_p, 1, 2, 0, /* Given an IMAGE-INSTANTIATOR-FORMAT, return non-nil if it is valid. -If LOCALE is non-nil then the format is checked in that domain. +If LOCALE is non-nil then the format is checked in that locale. If LOCALE is nil the current console is used. Valid formats are some subset of 'nothing, 'string, 'formatted-string, @@ -283,7 +283,7 @@ get_image_conversion_list (Lisp_Object console_type) DEFUN ("set-console-type-image-conversion-list", Fset_console_type_image_conversion_list, 2, 2, 0, /* -Set the image-conversion-list for consoles of the given TYPE. +Set the image-conversion-list for consoles of the given CONSOLE-TYPE. The image-conversion-list specifies how image instantiators that are strings should be interpreted. Each element of the list should be a list of two elements (a regular expression string and a vector) or @@ -351,7 +351,7 @@ specifiers will not be affected. DEFUN ("console-type-image-conversion-list", Fconsole_type_image_conversion_list, 1, 1, 0, /* -Return the image-conversion-list for devices of the given TYPE. +Return the image-conversion-list for devices of the given CONSOLE-TYPE. The image-conversion-list specifies how to interpret image string instantiators for the specified console type. See `set-console-type-image-conversion-list' for a description of its syntax. @@ -473,11 +473,11 @@ find_instantiator_differences (Lisp_Object new, Lisp_Object old) DEFUN ("set-instantiator-property", Fset_instantiator_property, 3, 3, 0, /* -Destructively set the property KEYWORD of INSTANTIATOR to VAL. +Destructively set the property KEYWORD of INSTANTIATOR to VALUE. If the property is not set then it is added to a copy of the instantiator and the new instantiator returned. Use `set-glyph-image' on glyphs to register instantiator changes. */ - (instantiator, keyword, val)) + (instantiator, keyword, value)) { Lisp_Object *elt; int len; @@ -493,7 +493,7 @@ Use `set-glyph-image' on glyphs to register instantiator changes. */ { if (EQ (elt[len], keyword)) { - elt[len+1] = val; + elt[len+1] = value; break; } } @@ -506,7 +506,7 @@ Use `set-glyph-image' on glyphs to register instantiator changes. */ GCPRO1 (alist); alist = tagged_vector_to_alist (instantiator); - alist = Fcons (Fcons (keyword, val), alist); + alist = Fcons (Fcons (keyword, value), alist); result = alist_to_tagged_vector (elt[0], alist); free_alist (alist); RETURN_UNGCPRO (result); @@ -1413,11 +1413,11 @@ Return a list of valid image-instance types. } Error_behavior -decode_error_behavior_flag (Lisp_Object no_error) +decode_error_behavior_flag (Lisp_Object noerror) { - if (NILP (no_error)) return ERROR_ME; - else if (EQ (no_error, Qt)) return ERROR_ME_NOT; - else return ERROR_ME_WARN; + if (NILP (noerror)) return ERROR_ME; + else if (EQ (noerror, Qt)) return ERROR_ME_NOT; + else return ERROR_ME_WARN; } Lisp_Object @@ -1567,14 +1567,14 @@ but we currently disallow this. #### We should fix this.) If omitted, DOMAIN defaults to the selected window. -NO-ERROR controls what happens when the image cannot be generated. +NOERROR controls what happens when the image cannot be generated. If nil, an error message is generated. If t, no messages are generated and this function returns nil. If anything else, a warning message is generated and this function returns nil. */ - (data, domain, dest_types, no_error)) + (data, domain, dest_types, noerror)) { - Error_behavior errb = decode_error_behavior_flag (no_error); + Error_behavior errb = decode_error_behavior_flag (noerror); return call_with_suspended_errors ((lisp_fn_t) make_image_instance_1, Qnil, Qimage, errb, @@ -2583,7 +2583,7 @@ bitmap_to_lisp_data (Lisp_Object name, int *xhot, int *yhot, LISP_STRING_TO_EXTERNAL (name, filename_ext, Qfile_name); result = read_bitmap_data_from_file (filename_ext, &w, &h, - &data, xhot, yhot); + (unsigned char **) &data, xhot, yhot); if (result == BitmapSuccess) { @@ -2592,7 +2592,7 @@ bitmap_to_lisp_data (Lisp_Object name, int *xhot, int *yhot, retval = list3 (make_int (w), make_int (h), make_ext_string (data, len, Qbinary)); - XFree ((char *) data); + XFree (data); return retval; } @@ -5383,7 +5383,7 @@ are necessary to properly display Unicode characters. set_specifier_caching (Vcurrent_display_table, offsetof (struct window, display_table), some_window_value_changed, - 0, 0); + 0, 0, 0); } void diff --git a/src/glyphs.h b/src/glyphs.h index e1867af..056cc23 100644 --- a/src/glyphs.h +++ b/src/glyphs.h @@ -729,10 +729,11 @@ struct Lisp_Image_Instance #define IMAGE_INSTANCE_WIDGET_PENDING_ITEMS(i) \ ((i)->u.subwindow.pending_items) #define IMAGE_INSTANCE_WIDGET_ITEM(i) \ -(CONSP (IMAGE_INSTANCE_WIDGET_ITEMS (i)) ? \ -XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \ - IMAGE_INSTANCE_WIDGET_ITEMS (i)) -#define IMAGE_INSTANCE_WIDGET_TEXT(i) XGUI_ITEM (IMAGE_INSTANCE_WIDGET_ITEM (i))->name + (CONSP (IMAGE_INSTANCE_WIDGET_ITEMS (i)) ? \ + XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \ + IMAGE_INSTANCE_WIDGET_ITEMS (i)) +#define IMAGE_INSTANCE_WIDGET_TEXT(i) \ + XGUI_ITEM (IMAGE_INSTANCE_WIDGET_ITEM (i))->name /* Layout properties */ #define IMAGE_INSTANCE_LAYOUT_CHILDREN(i) ((i)->u.subwindow.children) diff --git a/src/gui-x.c b/src/gui-x.c index 7a0e382..d476906 100644 --- a/src/gui-x.c +++ b/src/gui-x.c @@ -289,7 +289,7 @@ popup_selection_callback (Widget widget, LWLIB_ID ignored_id, } /* This is the timestamp used for asserting focus so we need to get an - up-to-date value event if no events has been dispatched to emacs + up-to-date value event if no events have been dispatched to emacs */ #if defined(HAVE_MENUBARS) DEVICE_X_MOUSE_TIMESTAMP (d) = x_focus_timestamp_really_sucks_fix_me_better; @@ -489,11 +489,14 @@ button_item_to_widget_value (Lisp_Object gui_object_instance, if (NILP (pgui->style)) { Bufbyte *intname; + Bytecount intlen; /* If the callback is nil, treat this item like unselectable text. This way, dashes will show up as a separator. */ if (!wv->enabled) wv->type = BUTTON_TYPE; - EXTERNAL_TO_C_STRING (wv->name, intname, Qlwlib_encoding); + TO_INTERNAL_FORMAT (C_STRING, wv->name, + ALLOCA, (intname, intlen), + Qlwlib_encoding); if (separator_string_p (intname)) { wv->type = SEPARATOR_TYPE; diff --git a/src/input-method-xlib.c b/src/input-method-xlib.c index b0068fd..db564bb 100644 --- a/src/input-method-xlib.c +++ b/src/input-method-xlib.c @@ -34,9 +34,9 @@ Boston, MA 02111-1307, USA. */ The XIC is of each frame, by each frame, for each frame. The exceptions are: 1. Activate XICs on poor frames when the XIM is back. - 2. Deactivate all the XICs when the XIM go down. + 2. Deactivate all the XICs when the XIM goes down. - Methods: + Implementation: - Register a callback for an XIM when the X device is being initialized. XIM_init_device (d) { XRegisterIMInstantiateCallback (); } @@ -55,7 +55,7 @@ Boston, MA 02111-1307, USA. */ In IMDestroyCallback: DEVICE_FRAME_LOOP (...) { FRAME_X_XIC (f) = NULL; } - - Re-enable XIC for all the frames which doesn't have XIC when the XIM + - Re-enable XIC for all the frames which don't have XIC when the XIM is back. In IMInstantiateCallback: DEVICE_FRAME_LOOP (...) { XIM_init_frame (f); } @@ -71,6 +71,7 @@ Boston, MA 02111-1307, USA. */ #include #include "lisp.h" #include /* More portable than ? */ +#include #include "frame.h" #include "device.h" #include "window.h" @@ -79,10 +80,6 @@ Boston, MA 02111-1307, USA. */ #include "EmacsFrame.h" #include "events.h" -#ifdef THIS_IS_X11R6 -#include -#endif - #ifndef XIM_XLIB #error XIM_XLIB is not defined?? #endif @@ -122,13 +119,10 @@ static char DefaultXIMStyles[] = "XIMPreeditNone|XIMStatusNothing\n" "XIMPreeditNone|XIMStatusNone"; -static Boolean xim_initted = False; - static XIMStyle best_style (XIMStyles *user, XIMStyles *xim); -/* #### it appears this prototype is missing from the X11R6.4 includes, - at least the XFree86 version ... */ -char * XSetIMValues(XIM, ...); +/* This function is documented, but no prototype in the header files */ +EXTERN_C char * XSetIMValues(XIM, ...); void Initialize_Locale (void) @@ -181,7 +175,11 @@ Initialize_Locale (void) } } -#ifdef THIS_IS_X11R6 /* Callbacks for IM are supported from X11R6 or later. */ +/* Callbacks for IM are supported from X11R6 or later. */ +#ifdef HAVE_XREGISTERIMINSTANTIATECALLBACK + +static Boolean xim_initted = False; + /* Called from when XIM is destroying. Clear all the XIC when the XIM was destroying... */ static void @@ -224,7 +222,7 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data) DEVICE_X_XIM (d) = xim = XOpenIM (dpy, XtDatabase (dpy), name, class); /* destroy callback for im */ - ximcallback.callback = IMDestroyCallback; + ximcallback.callback = (XIMProc) IMDestroyCallback; ximcallback.client_data = (XPointer) d; XSetIMValues (xim, XNDestroyCallback, &ximcallback, NULL); } @@ -240,23 +238,29 @@ IMInstantiateCallback (Display *dpy, XPointer client_data, XPointer call_data) } return; } -#endif /* if THIS_IS_X11R6 */ +#endif /* HAVE_XREGISTERIMINSTANTIATECALLBACK */ /* Initialize XIM for X device. Register the use of XIM using XRegisterIMInstantiateCallback. */ void XIM_init_device (struct device *d) { -#ifdef THIS_IS_X11R6 +#ifdef HAVE_XREGISTERIMINSTANTIATECALLBACK /* X11R6+ */ DEVICE_X_XIM (d) = NULL; XRegisterIMInstantiateCallback (DEVICE_X_DISPLAY (d), NULL, NULL, NULL, - IMInstantiateCallback, +#ifdef XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE /* The sixth parameter is of type XPointer in XFree86 but (XPointer *) on most other X11's. */ - (void *) d); + (XIDProc) IMInstantiateCallback, + (XPointer) d +#else /* X Consortium prototype */ + (XIMProc) IMInstantiateCallback, + (XPointer *) d +#endif /* XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE */ + ); return; -#else +#else /* pre-X11R6 */ Display *dpy = DEVICE_X_DISPLAY (d); char *name, *class; XIM xim; @@ -273,7 +277,7 @@ XIM_init_device (struct device *d) XGetIMValues (xim, XNQueryInputStyle, &DEVICE_X_XIM_STYLES (d), NULL); return; } -#endif +#endif /* HAVE_XREGISTERIMINSTANTIATECALLBACK */ } @@ -407,7 +411,7 @@ XIM_init_frame (struct frame *f) XSetICFocus (xic); -#ifdef THIS_IS_X11R6 +#ifdef HAVE_XREGISTERIMINSTANTIATECALLBACK /* when frame is going to be destroyed (closed) */ XtAddCallback (FRAME_X_TEXT_WIDGET(f), XNDestroyCallback, XIM_delete_frame, (XtPointer)f); diff --git a/src/lisp.h b/src/lisp.h index 7d4b7fc..1d21663 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -304,19 +304,14 @@ typedef UChar UBufbyte; typedef char SBufbyte; /* The data representing a string in "external" format (binary or any - external encoding) is logically a set of Extbytes, declared as follows. */ + external encoding) is logically a set of Extbytes, declared as + follows. Extbyte is guaranteed to be just a char, so for example + strlen (Extbyte *) is OK. Extbyte is only a documentation device + for referring to external text. */ -typedef UChar Extbyte; /* #### I REALLY think this should be a char. This - is more logical and will fix enough char-UChar - inconsistencies that maybe we'll be able to stop - turning off those warnings. --ben */ - -/* Explicitly signed or unsigned versions: */ -typedef UChar UExtbyte; -typedef char SExtbyte; +typedef char Extbyte; /* A byte in a string in binary format: */ - typedef char Char_Binary; typedef UChar UChar_Binary; @@ -808,24 +803,20 @@ PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \ tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) -#define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \ - tortoise, suspicion_length) \ - for (tortoise = hare = list, len = 0; \ - \ - (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \ - (NILP (hare) ? 0 : \ - (signal_malformed_list_error (list), 0))); \ - \ - hare = XCDR (hare), \ - ((++len < suspicion_length) ? \ - ((void) 0) : \ - (((len & 1) ? \ - ((void) (tortoise = XCDR (tortoise))) : \ - ((void) 0)) \ - , \ - (EQ (hare, tortoise) ? \ - ((void) signal_circular_list_error (list)) : \ - ((void) 0))))) +#define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \ + tortoise, suspicion_length) \ + for (tortoise = hare = list, len = 0; \ + \ + (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \ + (NILP (hare) ? 0 : \ + (signal_malformed_list_error (list), 0))); \ + \ + hare = XCDR (hare), \ + (void) \ + ((++len > suspicion_length) \ + && \ + ((((len & 1) != 0) && (tortoise = XCDR (tortoise), 0)), \ + (EQ (hare, tortoise) && (signal_circular_list_error (list), 0))))) /* GET_LIST_LENGTH and GET_EXTERNAL_LIST_LENGTH: diff --git a/src/lread.c b/src/lread.c index 03a4f54..4a995ba 100644 --- a/src/lread.c +++ b/src/lread.c @@ -258,12 +258,13 @@ readchar (Lisp_Object readcharfun) Emchar c = Lstream_get_emchar (XLSTREAM (readcharfun)); #ifdef DEBUG_XEMACS /* testing Mule */ static int testing_mule = 0; /* Change via debugger */ - if (testing_mule) { - if (c >= 0x20 && c <= 0x7E) stderr_out ("%c", c); - else if (c == '\n') stderr_out ("\\n\n"); - else stderr_out ("\\%o ", c); - } -#endif + if (testing_mule) + { + if (c >= 0x20 && c <= 0x7E) stderr_out ("%c", c); + else if (c == '\n') stderr_out ("\\n\n"); + else stderr_out ("\\%o ", c); + } +#endif /* testing Mule */ return c; } else if (MARKERP (readcharfun)) @@ -536,7 +537,7 @@ system that was used for the decoding is stored into it. It will in general be different from CODESYS if CODESYS specifies automatic encoding detection or end-of-line detection. */ - (file, no_error, nomessage, nosuffix, codesys, used_codesys)) + (file, noerror, nomessage, nosuffix, codesys, used_codesys)) { /* This function can GC */ int fd = -1; @@ -567,7 +568,7 @@ encoding detection or end-of-line detection. /* If file name is magic, call the handler. */ handler = Ffind_file_name_handler (file, Qload); if (!NILP (handler)) - RETURN_UNGCPRO (call5 (handler, Qload, file, no_error, + RETURN_UNGCPRO (call5 (handler, Qload, file, noerror, nomessage, nosuffix)); /* Do this after the handler to avoid @@ -596,7 +597,7 @@ encoding detection or end-of-line detection. if (fd < 0) { - if (NILP (no_error)) + if (NILP (noerror)) signal_file_error ("Cannot open load file", file); else { @@ -1470,22 +1471,21 @@ Execute BUFFER as Lisp code. Programs can pass two arguments, BUFFER and PRINTFLAG. BUFFER is the buffer to evaluate (nil means use current buffer). PRINTFLAG controls printing of output: -nil means discard it; anything else is stream for print. +nil means discard it; anything else is a stream for printing. If there is no error, point does not move. If there is an error, point remains at the end of the last character read from the buffer. -Execute BUFFER as Lisp code. */ - (bufname, printflag)) + (buffer, printflag)) { /* This function can GC */ int speccount = specpdl_depth (); Lisp_Object tem, buf; - if (NILP (bufname)) + if (NILP (buffer)) buf = Fcurrent_buffer (); else - buf = Fget_buffer (bufname); + buf = Fget_buffer (buffer); if (NILP (buf)) error ("No such buffer."); @@ -1519,10 +1519,10 @@ point remains at the end of the last character read from the buffer. DEFUN ("eval-region", Feval_region, 2, 3, "r", /* Execute the region as Lisp code. -When called from programs, expects two arguments, +When called from programs, expects two arguments START and END giving starting and ending indices in the current buffer of the text to be executed. -Programs can pass third argument PRINTFLAG which controls output: +Programs can pass third optional argument STREAM which controls output: nil means discard it; anything else is stream for printing it. If there is no error, point does not move. If there is an error, @@ -1532,28 +1532,28 @@ Note: Before evaling the region, this function narrows the buffer to it. If the code being eval'd should happen to trigger a redisplay you may see some text temporarily disappear because of this. */ - (b, e, printflag)) + (start, end, stream)) { /* This function can GC */ int speccount = specpdl_depth (); Lisp_Object tem; Lisp_Object cbuf = Fcurrent_buffer (); - if (NILP (printflag)) + if (NILP (stream)) tem = Qsymbolp; /* #### #@[]*&$#*[& SI:NULL-STREAM */ else - tem = printflag; + tem = stream; specbind (Qstandard_output, tem); - if (NILP (printflag)) + if (NILP (stream)) record_unwind_protect (save_excursion_restore, save_excursion_save ()); record_unwind_protect (save_restriction_restore, save_restriction_save ()); - /* This both uses b and checks its type. */ - Fgoto_char (b, cbuf); - Fnarrow_to_region (make_int (BUF_BEGV (current_buffer)), e, cbuf); + /* This both uses start and checks its type. */ + Fgoto_char (start, cbuf); + Fnarrow_to_region (make_int (BUF_BEGV (current_buffer)), end, cbuf); readevalloop (cbuf, XBUFFER (cbuf)->filename, Feval, - !NILP (printflag)); + !NILP (stream)); return unbind_to (speccount, Qnil); } @@ -2035,23 +2035,27 @@ static Lisp_Object read_bit_vector (Lisp_Object readcharfun) { unsigned_char_dynarr *dyn = Dynarr_new (unsigned_char); - Emchar c; Lisp_Object val; while (1) { - c = readchar (readcharfun); - if (c != '0' && c != '1') - break; - Dynarr_add (dyn, (unsigned char) (c - '0')); + unsigned char bit; + Emchar c = readchar (readcharfun); + if (c == '0') + bit = 0; + else if (c == '1') + bit = 1; + else + { + if (c >= 0) + unreadchar (readcharfun, c); + break; + } + Dynarr_add (dyn, bit); } - if (c >= 0) - unreadchar (readcharfun, c); - val = make_bit_vector_from_byte_vector (Dynarr_atp (dyn, 0), Dynarr_length (dyn)); - Dynarr_free (dyn); return val; diff --git a/src/lstream.h b/src/lstream.h index 6800934..b46adbc 100644 --- a/src/lstream.h +++ b/src/lstream.h @@ -273,8 +273,9 @@ INLINE_HEADER Emchar Lstream_get_emchar (Lstream *stream) { int c = Lstream_getc (stream); - return BYTE_ASCII_P (c) ? (Emchar) c : - Lstream_get_emchar_1 (stream, c); + return (c < 0x80 /* c == EOF || BYTE_ASCII_P (c) */ + ? (Emchar) c + : Lstream_get_emchar_1 (stream, c)); } INLINE_HEADER int Lstream_put_emchar (Lstream *stream, Emchar ch); diff --git a/src/marker.c b/src/marker.c index 0811ac0..9e57b2e 100644 --- a/src/marker.c +++ b/src/marker.c @@ -168,8 +168,8 @@ check_marker_circularities (struct buffer *buf) #endif static Lisp_Object -set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, - int restricted_p) +set_marker_internal (Lisp_Object marker, Lisp_Object position, + Lisp_Object buffer, int restricted_p) { Bufpos charno; struct buffer *b; @@ -182,8 +182,8 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, /* If position is nil or a marker that points nowhere, make this marker point nowhere. */ - if (NILP (pos) || - (MARKERP (pos) && !XMARKER (pos)->buffer)) + if (NILP (position) || + (MARKERP (position) && !XMARKER (position)->buffer)) { if (point_p) signal_simple_error ("Can't make point-marker point nowhere", @@ -193,7 +193,7 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, return marker; } - CHECK_INT_COERCE_MARKER (pos); + CHECK_INT_COERCE_MARKER (position); if (NILP (buffer)) b = current_buffer; else @@ -212,7 +212,7 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, } } - charno = XINT (pos); + charno = XINT (position); m = XMARKER (marker); if (restricted_p) @@ -259,26 +259,32 @@ set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer, DEFUN ("set-marker", Fset_marker, 2, 3, 0, /* -Position MARKER before character number NUMBER in BUFFER. +Move MARKER to position POSITION in BUFFER. +POSITION can be a marker, an integer or nil. If POSITION is an +integer, make MARKER point before the POSITIONth character in BUFFER. +If POSITION is nil, makes MARKER point nowhere. Then it no longer +slows down editing in any buffer. If POSITION is less than 1, move +MARKER to the beginning of BUFFER. If POSITION is greater than the +size of BUFFER, move MARKER to the end of BUFFER. BUFFER defaults to the current buffer. -If NUMBER is nil, makes marker point nowhere. -Then it no longer slows down editing in any buffer. -If this marker was returned by (point-marker t), then changing its position -moves point. You cannot change its buffer or make it point nowhere. -Returns MARKER. +If this marker was returned by (point-marker t), then changing its +position moves point. You cannot change its buffer or make it point +nowhere. +The return value is MARKER. */ - (marker, number, buffer)) + (marker, position, buffer)) { - return set_marker_internal (marker, number, buffer, 0); + return set_marker_internal (marker, position, buffer, 0); } /* This version of Fset_marker won't let the position be outside the visible part. */ Lisp_Object -set_marker_restricted (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer) +set_marker_restricted (Lisp_Object marker, Lisp_Object position, + Lisp_Object buffer) { - return set_marker_internal (marker, pos, buffer, 1); + return set_marker_internal (marker, position, buffer, 1); } @@ -404,21 +410,21 @@ copy_marker_1 (Lisp_Object marker, Lisp_Object type, int noseeum) } DEFUN ("copy-marker", Fcopy_marker, 1, 2, 0, /* -Return a new marker pointing at the same place as MARKER. -If argument is a number, makes a new marker pointing +Return a new marker pointing at the same place as MARKER-OR-INTEGER. +If MARKER-OR-INTEGER is an integer, return a new marker pointing at that position in the current buffer. -The optional argument TYPE specifies the insertion type of the new marker; -see `marker-insertion-type'. +Optional argument MARKER-TYPE specifies the insertion type of the new +marker; see `marker-insertion-type'. */ - (marker, type)) + (marker_or_integer, marker_type)) { - return copy_marker_1 (marker, type, 0); + return copy_marker_1 (marker_or_integer, marker_type, 0); } Lisp_Object -noseeum_copy_marker (Lisp_Object marker, Lisp_Object type) +noseeum_copy_marker (Lisp_Object marker, Lisp_Object marker_type) { - return copy_marker_1 (marker, type, 1); + return copy_marker_1 (marker, marker_type, 1); } DEFUN ("marker-insertion-type", Fmarker_insertion_type, 1, 1, 0, /* diff --git a/src/menubar-x.c b/src/menubar-x.c index 84d147e..34932dd 100644 --- a/src/menubar-x.c +++ b/src/menubar-x.c @@ -251,7 +251,7 @@ menu_item_descriptor_to_widget_value_1 (Lisp_Object desc, title_wv->enabled = 1; title_wv->next = sep_wv; sep_wv->type = SEPARATOR_TYPE; - sep_wv->value = menu_separator_style_and_to_external ("=="); + sep_wv->value = menu_separator_style_and_to_external ((Bufbyte *) "=="); sep_wv->next = 0; wv->contents = title_wv; diff --git a/src/menubar.c b/src/menubar.c index 7641aae..d0d60d7 100644 --- a/src/menubar.c +++ b/src/menubar.c @@ -232,7 +232,7 @@ See also 'find-menu-item'. } DEFUN ("popup-menu", Fpopup_menu, 1, 2, 0, /* -Pop up the given menu. +Pop up the menu described by MENU-DESCRIPTION. A menu description is a list of menu items, strings, and submenus. The first element of a menu must be a string, which is the name of the menu. @@ -312,10 +312,10 @@ For example: See menubar.el for many more examples. */ - (menu_desc, event)) + (menu_description, event)) { - struct frame *f = decode_frame(Qnil); - MAYBE_FRAMEMETH (f, popup_menu, (menu_desc,event)); + struct frame *f = decode_frame (Qnil); + MAYBE_FRAMEMETH (f, popup_menu, (menu_description, event)); return Qnil; } @@ -739,7 +739,7 @@ This is a specifier; use `set-specifier' to change it. offsetof (struct window, menubar_visible_p), menubar_visible_p_changed, offsetof (struct frame, menubar_visible_p), - menubar_visible_p_changed_in_frame); + menubar_visible_p_changed_in_frame, 0); } void diff --git a/src/miscplay.c b/src/miscplay.c index 723981d..e2366b7 100644 --- a/src/miscplay.c +++ b/src/miscplay.c @@ -381,8 +381,11 @@ size_t sndcnv8S_2mono(void **data,size_t *sz,void **outbuf) *outbuf = dest = miscplay_sndbuf; while (count--) - *dest++ = (unsigned char)(((int)*((signed char *)(src++)) + - (int)*((signed char *)(src++))) / 2); + { + *dest++ = (unsigned char)(((int)*((signed char *)(src)) + + (int)*((signed char *)(src+1))) / 2); + src += 2; + } *data = src; return(rc); } @@ -402,8 +405,11 @@ size_t sndcnv2monounsigned(void **data,size_t *sz,void **outbuf) *outbuf = dest = miscplay_sndbuf; while (count--) - *dest++ = (unsigned char)(((int)*((signed char *)(src++)) + - (int)*((signed char *)(src++))) / 2) ^ 0x80; + { + *dest++ = (unsigned char)(((int)*((signed char *)(src)) + + (int)*((signed char *)(src+1))) / 2) ^ 0x80; + src += 2; + } *data = src; return(rc); } @@ -493,7 +499,10 @@ size_t sndcnvULaw_2linear(void **data,size_t *sz,void **outbuf) *outbuf = *data; while ((*sz)--) - *p++ = ulaw_dsp[*p]; + { + *p = ulaw_dsp[*p]; + p++; + } *sz = 0; *data = p; return p - (unsigned char *)*outbuf; @@ -550,11 +559,14 @@ size_t sndcnvULaw_2mono(void **data,size_t *sz,void **outbuf) *outbuf = dest = miscplay_sndbuf; while (count--) - /* it is not possible to directly interpolate between two ulaw encoded - data bytes, thus we need to convert to linear format first and later - we convert back to ulaw format */ - *dest++ = int2ulaw(ulaw2int[*(src)++] + - ulaw2int[*(src)++]); + { + /* it is not possible to directly interpolate between two ulaw encoded + data bytes, thus we need to convert to linear format first and later + we convert back to ulaw format */ + *dest++ = int2ulaw(ulaw2int[*src] + + ulaw2int[*(src+1)]); + src += 2; + } *data = src; return(rc); } @@ -566,9 +578,11 @@ size_t sndcnv16swap(void **data,size_t *sz,void **outbuf) *outbuf = *data; p = (unsigned short *) *outbuf; - while (cnt--) { - *p++ = ((*p & 0x00ff) << 8) | (*p >> 8); - } + while (cnt--) + { + *p = ((*p & 0x00ff) << 8) | (*p >> 8); + p++; + } *data = p; cnt = *sz; *sz = 0; diff --git a/src/mule-ccl.c b/src/mule-ccl.c index fc15f56..afd30d6 100644 --- a/src/mule-ccl.c +++ b/src/mule-ccl.c @@ -1,8 +1,8 @@ /* CCL (Code Conversion Language) interpreter. - Copyright (C) 1995, 1997, 1998, 1999 Electrotechnical Laboratory, JAPAN. + Copyright (C) 1995, 1997 Electrotechnical Laboratory, JAPAN. Licensed to the Free Software Foundation. -This file is part of XEmacs. +This file is part of GNU Emacs. GNU Emacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,19 +19,16 @@ along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* Synched up with : FSF Emacs 20.3.10 without ExCCL - * (including {Read|Write}MultibyteChar) */ +/* Synched up with : FSF Emacs 21.0.90 except TranslateCharacter */ #ifdef emacs - #include - -#if 0 -#ifdef STDC_HEADERS -#include -#endif #endif +#include + +#ifdef emacs + #include "lisp.h" #include "buffer.h" #include "mule-charset.h" @@ -40,35 +37,34 @@ Boston, MA 02111-1307, USA. */ #else /* not emacs */ -#include #include "mulelib.h" #endif /* not emacs */ /* This contains all code conversion map available to CCL. */ -/* Lisp_Object Vcode_conversion_map_vector; -*/ /* Alist of fontname patterns vs corresponding CCL program. */ Lisp_Object Vfont_ccl_encoder_alist; -/* This symbol is a property which assocates with ccl program vector. +/* This symbol is a property which associates with ccl program vector. Ex: (get 'ccl-big5-encoder 'ccl-program) returns ccl program vector. */ Lisp_Object Qccl_program; /* These symbols are properties which associate with code conversion map and their ID respectively. */ -/* Lisp_Object Qcode_conversion_map; Lisp_Object Qcode_conversion_map_id; -*/ /* Symbols of ccl program have this property, a value of the property - is an index for Vccl_protram_table. */ + is an index for Vccl_program_table. */ Lisp_Object Qccl_program_idx; -/* Vector of CCL program names vs corresponding program data. */ +/* Table of registered CCL programs. Each element is a vector of + NAME, CCL_PROG, and RESOLVEDP where NAME (symbol) is the name of + the program, CCL_PROG (vector) is the compiled code of the program, + RESOLVEDP (t or nil) is the flag to tell if symbols in CCL_PROG is + already resolved to index numbers or not. */ Lisp_Object Vccl_program_table; /* CCL (Code Conversion Language) is a simple language which has @@ -181,18 +177,18 @@ Lisp_Object Vccl_program_table; #define CCL_WriteConstJump 0x08 /* Write constant and jump: 1:A--D--D--R--E--S--S-000XXXXX - 2:const + 2:CONST ------------------------------ - write (const); + write (CONST); IC += ADDRESS; */ #define CCL_WriteConstReadJump 0x09 /* Write constant, read, and jump: 1:A--D--D--R--E--S--S-rrrXXXXX - 2:const + 2:CONST 3:A--D--D--R--E--S--S-rrrYYYYY ----------------------------- - write (const); + write (CONST); IC += 2; read (reg[rrr]); IC += ADDRESS; @@ -300,10 +296,15 @@ Lisp_Object Vccl_program_table; */ #define CCL_Call 0x13 /* Call the CCL program whose ID is - (CC..C). - 1:CCCCCCCCCCCCCCCCCCCC000XXXXX + CC..C or cc..c. + 1:CCCCCCCCCCCCCCCCCCCCFFFXXXXX + [2:00000000cccccccccccccccccccc] ------------------------------ - call (CC..C) + if (FFF) + call (cc..c) + IC++; + else + call (CC..C) */ #define CCL_WriteConstString 0x14 /* Write a constant or a string: @@ -422,9 +423,9 @@ Lisp_Object Vccl_program_table; IC += 2; */ -#define CCL_Extension 0x1F /* Extended CCL code +#define CCL_Extention 0x1F /* Extended CCL code 1:ExtendedCOMMNDRrrRRRrrrXXXXX - 2:ARGUEMENT + 2:ARGUMENT 3:... ------------------------------ extended_command (rrr,RRR,Rrr,ARGS) @@ -450,7 +451,6 @@ Lisp_Object Vccl_program_table; #define CCL_WriteMultibyteChar2 0x01 /* Write Multibyte Character 1:ExtendedCOMMNDRrrRRRrrrXXXXX */ -#if 0 /* Translate a character whose code point is reg[rrr] and the charset ID is reg[RRR] by a translation table whose ID is reg[Rrr]. @@ -480,7 +480,7 @@ Lisp_Object Vccl_program_table; If the element is t or lambda, finish without changing reg[rrr]. If the element is a number, set reg[rrr] to the number and finish. - Detail of the map structure is descibed in the comment for + Detail of the map structure is described in the comment for CCL_MapMultiple below. */ #define CCL_IterateMultipleMap 0x10 /* Iterate multiple maps @@ -504,7 +504,7 @@ Lisp_Object Vccl_program_table; (MAP-ID21 (MAP-ID211 (MAP-ID2111) MAP-ID212) MAP-ID22)), - the compiled CCL codes has this sequence: + the compiled CCL code has this sequence: CCL_MapMultiple (CCL code of this command) 16 (total number of MAPs and SEPARATORs) -7 (1st SEPARATOR) @@ -540,19 +540,26 @@ Lisp_Object Vccl_program_table; At first, VAL0 is set to reg[rrr], and it is translated by the first map to VAL1. Then, VAL1 is translated by the next map to VAL2. This mapping is iterated until the last map is used. The - result of the mapping is the last value of VAL?. + result of the mapping is the last value of VAL?. When the mapping + process reached to the end of the map set, it moves to the next + map set. If the next does not exit, the mapping process terminates, + and regard the last value as a result. But, when VALm is mapped to VALn and VALn is not a number, the - mapping proceed as below: + mapping proceeds as follows: If VALn is nil, the lastest map is ignored and the mapping of VALm - proceed to the next map. + proceeds to the next map. In VALn is t, VALm is reverted to reg[rrr] and the mapping of VALm - proceed to the next map. + proceeds to the next map. + + If VALn is lambda, move to the next map set like reaching to the + end of the current map set. - If VALn is lambda, the whole mapping process terminates, and VALm - is the result of this mapping. + If VALn is a symbol, call the CCL program refered by it. + Then, use reg[rrr] as a mapped value except for -1, -2 and -3. + Such special values are regarded as nil, t, and lambda respectively. Each map is a Lisp vector of the following format (a) or (b): (a)......[STARTPOINT VAL1 VAL2 ...] @@ -580,7 +587,7 @@ Lisp_Object Vccl_program_table; N:SEPARATOR_z (< 0) */ -#define MAX_MAP_SET_LEVEL 20 +#define MAX_MAP_SET_LEVEL 30 typedef struct { @@ -590,21 +597,45 @@ typedef struct static tr_stack mapping_stack[MAX_MAP_SET_LEVEL]; static tr_stack *mapping_stack_pointer; -#endif -#define PUSH_MAPPING_STACK(restlen, orig) \ -{ \ - mapping_stack_pointer->rest_length = (restlen); \ - mapping_stack_pointer->orig_val = (orig); \ - mapping_stack_pointer++; \ -} +/* If this variable is non-zero, it indicates the stack_idx + of immediately called by CCL_MapMultiple. */ +static int stack_idx_of_map_multiple = 0; -#define POP_MAPPING_STACK(restlen, orig) \ -{ \ - mapping_stack_pointer--; \ - (restlen) = mapping_stack_pointer->rest_length; \ - (orig) = mapping_stack_pointer->orig_val; \ -} \ +#define PUSH_MAPPING_STACK(restlen, orig) \ + do { \ + mapping_stack_pointer->rest_length = (restlen); \ + mapping_stack_pointer->orig_val = (orig); \ + mapping_stack_pointer++; \ + } while (0) + +#define POP_MAPPING_STACK(restlen, orig) \ + do { \ + mapping_stack_pointer--; \ + (restlen) = mapping_stack_pointer->rest_length; \ + (orig) = mapping_stack_pointer->orig_val; \ + } while (0) + +#define CCL_CALL_FOR_MAP_INSTRUCTION(symbol, ret_ic) \ + do { \ + struct ccl_program called_ccl; \ + if (stack_idx >= 256 \ + || (setup_ccl_program (&called_ccl, (symbol)) != 0)) \ + { \ + if (stack_idx > 0) \ + { \ + ccl_prog = ccl_prog_stack_struct[0].ccl_prog; \ + ic = ccl_prog_stack_struct[0].ic; \ + } \ + CCL_INVALID_CMD; \ + } \ + ccl_prog_stack_struct[stack_idx].ccl_prog = ccl_prog; \ + ccl_prog_stack_struct[stack_idx].ic = (ret_ic); \ + stack_idx++; \ + ccl_prog = called_ccl.prog; \ + ic = CCL_HEADER_MAIN; \ + goto ccl_repeat; \ + } while (0) #define CCL_MapSingle 0x12 /* Map by single code conversion map 1:ExtendedCOMMNDXXXRRRrrrXXXXX @@ -643,100 +674,192 @@ static tr_stack *mapping_stack_pointer; #define CCL_ENCODE_SJIS 0x17 /* X = HIGHER_BYTE (SJIS (Y, Z)) r[7] = LOWER_BYTE (SJIS (Y, Z) */ +/* Terminate CCL program successfully. */ +#define CCL_SUCCESS \ + do { \ + ccl->status = CCL_STAT_SUCCESS; \ + goto ccl_finish; \ + } while (0) + /* Suspend CCL program because of reading from empty input buffer or writing to full output buffer. When this program is resumed, the - same I/O command is executed. The `if (1)' is for warning suppression. */ + same I/O command is executed. */ #define CCL_SUSPEND(stat) \ do { \ ic--; \ ccl->status = stat; \ - if (1) goto ccl_finish; \ + goto ccl_finish; \ } while (0) /* Terminate CCL program because of invalid command. Should not occur - in the normal case. The `if (1)' is for warning suppression. */ + in the normal case. */ #define CCL_INVALID_CMD \ do { \ ccl->status = CCL_STAT_INVALID_CMD; \ - if (1) goto ccl_error_handler; \ + goto ccl_error_handler; \ } while (0) /* Encode one character CH to multibyte form and write to the current - output buffer. If CH is less than 256, CH is written as is. */ -#define CCL_WRITE_CHAR(ch) do { \ - if (!destination) \ - { \ - ccl->status = CCL_STAT_INVALID_CMD; \ - goto ccl_error_handler; \ - } \ - else \ - { \ - Bufbyte work[MAX_EMCHAR_LEN]; \ - int len = ( ch < ( conversion_mode == CCL_MODE_ENCODING ? \ - 256 : 128 ) ) ? \ - simple_set_charptr_emchar (work, ch) : \ - non_ascii_set_charptr_emchar (work, ch); \ - Dynarr_add_many (destination, work, len); \ - } \ -} while (0) + output buffer. At encoding time, if CH is less than 256, CH is + written as is. At decoding time, if CH cannot be regarded as an + ASCII character, write it in multibyte form. */ +#define CCL_WRITE_CHAR(ch) \ + do { \ + if (!destination) \ + CCL_INVALID_CMD; \ + if (conversion_mode == CCL_MODE_ENCODING) \ + { \ + if (ch == '\n') \ + { \ + if (ccl->eol_type == CCL_CODING_EOL_CRLF) \ + { \ + Dynarr_add (destination, '\r'); \ + Dynarr_add (destination, '\n'); \ + } \ + else if (ccl->eol_type == CCL_CODING_EOL_CR) \ + Dynarr_add (destination, '\r'); \ + else \ + Dynarr_add (destination, '\n'); \ + } \ + else if (ch < 0x100) \ + { \ + Dynarr_add (destination, ch); \ + } \ + else \ + { \ + Bufbyte work[MAX_EMCHAR_LEN]; \ + int len; \ + len = non_ascii_set_charptr_emchar (work, ch); \ + Dynarr_add_many (destination, work, len); \ + } \ + } \ + else \ + { \ + if (!CHAR_MULTIBYTE_P(ch)) \ + { \ + Dynarr_add (destination, ch); \ + } \ + else \ + { \ + Bufbyte work[MAX_EMCHAR_LEN]; \ + int len; \ + len = non_ascii_set_charptr_emchar (work, ch); \ + Dynarr_add_many (destination, work, len); \ + } \ + } \ + } while (0) /* Write a string at ccl_prog[IC] of length LEN to the current output - buffer. */ -#define CCL_WRITE_STRING(len) do { \ - if (!destination) \ - { \ - ccl->status = CCL_STAT_INVALID_CMD; \ - goto ccl_error_handler; \ - } \ - else \ - { \ - Bufbyte work[MAX_EMCHAR_LEN]; \ - for (i = 0; i < len; i++) \ - { \ - int ch = (XINT (ccl_prog[ic + (i / 3)]) \ - >> ((2 - (i % 3)) * 8)) & 0xFF; \ - int bytes = \ - ( ch < ( conversion_mode == CCL_MODE_ENCODING ? \ - 256 : 128 ) ) ? \ - simple_set_charptr_emchar (work, ch) : \ - non_ascii_set_charptr_emchar (work, ch); \ - Dynarr_add_many (destination, work, bytes); \ - } \ - } \ -} while (0) + buffer. But this macro treat this string as a binary. Therefore, + cannot handle a multibyte string except for Control-1 characters. */ +#define CCL_WRITE_STRING(len) \ + do { \ + Bufbyte work[MAX_EMCHAR_LEN]; \ + int ch, bytes; \ + if (!destination) \ + CCL_INVALID_CMD; \ + else if (conversion_mode == CCL_MODE_ENCODING) \ + { \ + for (i = 0; i < len; i++) \ + { \ + ch = ((XINT (ccl_prog[ic + (i / 3)])) \ + >> ((2 - (i % 3)) * 8)) & 0xFF; \ + if (ch == '\n') \ + { \ + if (ccl->eol_type == CCL_CODING_EOL_CRLF) \ + { \ + Dynarr_add (destination, '\r'); \ + Dynarr_add (destination, '\n'); \ + } \ + else if (ccl->eol_type == CCL_CODING_EOL_CR) \ + Dynarr_add (destination, '\r'); \ + else \ + Dynarr_add (destination, '\n'); \ + } \ + if (ch < 0x100) \ + { \ + Dynarr_add (destination, ch); \ + } \ + else \ + { \ + bytes = non_ascii_set_charptr_emchar (work, ch); \ + Dynarr_add_many (destination, work, len); \ + } \ + } \ + } \ + else \ + { \ + for (i = 0; i < len; i++) \ + { \ + ch = ((XINT (ccl_prog[ic + (i / 3)])) \ + >> ((2 - (i % 3)) * 8)) & 0xFF; \ + if (!CHAR_MULTIBYTE_P(ch)) \ + { \ + Dynarr_add (destination, ch); \ + } \ + else \ + { \ + bytes = non_ascii_set_charptr_emchar (work, ch); \ + Dynarr_add_many (destination, work, len); \ + } \ + } \ + } \ + } while (0) /* Read one byte from the current input buffer into Rth register. */ -#define CCL_READ_CHAR(r) do { \ - if (!src && !ccl->last_block) \ - { \ - ccl->status = CCL_STAT_INVALID_CMD; \ - goto ccl_error_handler; \ - } \ - else if (src < src_end) \ - r = *src++; \ - else if (ccl->last_block) \ - { \ - ic = ccl->eof_ic; \ - goto ccl_repeat; \ - } \ - else \ - /* Suspend CCL program because of \ - reading from empty input buffer or \ - writing to full output buffer. \ - When this program is resumed, the \ - same I/O command is executed. */ \ - { \ - ic--; \ - ccl->status = CCL_STAT_SUSPEND_BY_SRC; \ - goto ccl_finish; \ - } \ -} while (0) +#define CCL_READ_CHAR(r) \ + do { \ + if (!src) \ + CCL_INVALID_CMD; \ + if (src < src_end) \ + r = *src++; \ + else \ + { \ + if (ccl->last_block) \ + { \ + ic = ccl->eof_ic; \ + goto ccl_repeat; \ + } \ + else \ + CCL_SUSPEND (CCL_STAT_SUSPEND_BY_SRC); \ + } \ + } while (0) + + +/* Set C to the character code made from CHARSET and CODE. This is + like MAKE_CHAR but check the validity of CHARSET and CODE. If they + are not valid, set C to (CODE & 0xFF) because that is usually the + case that CCL_ReadMultibyteChar2 read an invalid code and it set + CODE to that invalid byte. */ + +/* On XEmacs, TranslateCharacter is not supported. Thus, this + macro is not used. */ +#if 0 +#define CCL_MAKE_CHAR(charset, code, c) \ + do { \ + if (charset == CHARSET_ASCII) \ + c = code & 0xFF; \ + else if (CHARSET_DEFINED_P (charset) \ + && (code & 0x7F) >= 32 \ + && (code < 256 || ((code >> 7) & 0x7F) >= 32)) \ + { \ + int c1 = code & 0x7F, c2 = 0; \ + \ + if (code >= 256) \ + c2 = c1, c1 = (code >> 7) & 0x7F; \ + c = MAKE_CHAR (charset, c1, c2); \ + } \ + else \ + c = code & 0xFF; \ + } while (0) +#endif /* Execute CCL code on SRC_BYTES length text at SOURCE. The resulting - text goes to a place pointed by DESTINATION. The bytes actually - processed is returned as *CONSUMED. The return value is the length - of the resulting text. As a side effect, the contents of CCL registers + text goes to a place pointed by DESTINATION, the length of which + should not exceed DST_BYTES. The bytes actually processed is + returned as *CONSUMED. The return value is the length of the + resulting text. As a side effect, the contents of CCL registers are updated. If SOURCE or DESTINATION is NULL, only operations on registers are permitted. */ @@ -756,17 +879,20 @@ struct ccl_prog_stack static struct ccl_prog_stack ccl_prog_stack_struct[256]; int -ccl_driver (struct ccl_program *ccl, const unsigned char *source, - unsigned_char_dynarr *destination, int src_bytes, - int *consumed, int conversion_mode) +ccl_driver (struct ccl_program *ccl, + const unsigned char *source, + unsigned_char_dynarr *destination, + int src_bytes, + int *consumed, + int conversion_mode) { - int *reg = ccl->reg; - int ic = ccl->ic; - int code = -1; /* init to illegal value, */ - int field1, field2; - Lisp_Object *ccl_prog = ccl->prog; + register int *reg = ccl->reg; + register int ic = ccl->ic; + register int code = -1; + register int field1, field2; + register Lisp_Object *ccl_prog = ccl->prog; const unsigned char *src = source, *src_end = src + src_bytes; - int jump_address = 0; /* shut up the compiler */ + int jump_address; int i, j, op; int stack_idx = ccl->stack_idx; /* Instruction counter of the current CCL code. */ @@ -775,10 +901,11 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, if (ic >= ccl->eof_ic) ic = CCL_HEADER_MAIN; -#if 0 /* not for XEmacs ? */ if (ccl->buf_magnification ==0) /* We can't produce any bytes. */ - dst = NULL; -#endif + destination = NULL; + + /* Set mapping stack pointer. */ + mapping_stack_pointer = mapping_stack; #ifdef CCL_DEBUG ccl_backtrace_idx = 0; @@ -927,7 +1054,7 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, i = reg[RRR]; j = XINT (ccl_prog[ic]); op = field1 >> 6; - ic++; + jump_address = ic + 1; goto ccl_set_expr; case CCL_WriteRegister: /* CCCCCCCCCCCCCCCCCCCrrrXXXXX */ @@ -947,32 +1074,43 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, i = reg[RRR]; j = reg[Rrr]; op = field1 >> 6; + jump_address = ic; goto ccl_set_expr; - case CCL_Call: /* CCCCCCCCCCCCCCCCCCCC000XXXXX */ + case CCL_Call: /* 1:CCCCCCCCCCCCCCCCCCCCFFFXXXXX */ { Lisp_Object slot; + int prog_id; + + /* If FFF is nonzero, the CCL program ID is in the + following code. */ + if (rrr) + { + prog_id = XINT (ccl_prog[ic]); + ic++; + } + else + prog_id = field1; if (stack_idx >= 256 - || field1 < 0 - || field1 >= XVECTOR_LENGTH (Vccl_program_table) - || (slot = XVECTOR_DATA (Vccl_program_table)[field1], - !CONSP (slot)) - || !VECTORP (XCDR (slot))) + || prog_id < 0 + || prog_id >= XVECTOR (Vccl_program_table)->size + || (slot = XVECTOR (Vccl_program_table)->contents[prog_id], + !VECTORP (slot)) + || !VECTORP (XVECTOR (slot)->contents[1])) { if (stack_idx > 0) { ccl_prog = ccl_prog_stack_struct[0].ccl_prog; ic = ccl_prog_stack_struct[0].ic; } - ccl->status = CCL_STAT_INVALID_CMD; - goto ccl_error_handler; + CCL_INVALID_CMD; } ccl_prog_stack_struct[stack_idx].ccl_prog = ccl_prog; ccl_prog_stack_struct[stack_idx].ic = ic; stack_idx++; - ccl_prog = XVECTOR_DATA (XCDR (slot)); + ccl_prog = XVECTOR (XVECTOR (slot)->contents[1])->contents; ic = CCL_HEADER_MAIN; } break; @@ -998,8 +1136,9 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, break; case CCL_End: /* 0000000000000000000000XXXXX */ - if (stack_idx-- > 0) + if (stack_idx > 0) { + stack_idx--; ccl_prog = ccl_prog_stack_struct[stack_idx].ccl_prog; ic = ccl_prog_stack_struct[stack_idx].ic; break; @@ -1009,9 +1148,7 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, /* ccl->ic should points to this command code again to suppress further processing. */ ic--; - /* Terminate CCL program successfully. */ - ccl->status = CCL_STAT_SUCCESS; - goto ccl_finish; + CCL_SUCCESS; case CCL_ExprSelfConst: /* 00000OPERATION000000rrrXXXXX */ i = XINT (ccl_prog[ic]); @@ -1045,9 +1182,7 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, case CCL_LE: reg[rrr] = reg[rrr] <= i; break; case CCL_GE: reg[rrr] = reg[rrr] >= i; break; case CCL_NE: reg[rrr] = reg[rrr] != i; break; - default: - ccl->status = CCL_STAT_INVALID_CMD; - goto ccl_error_handler; + default: CCL_INVALID_CMD; } break; @@ -1096,7 +1231,7 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, case CCL_MOD: reg[rrr] = i % j; break; case CCL_AND: reg[rrr] = i & j; break; case CCL_OR: reg[rrr] = i | j; break; - case CCL_XOR: reg[rrr] = i ^ j; break; + case CCL_XOR: reg[rrr] = i ^ j;; break; case CCL_LSH: reg[rrr] = i << j; break; case CCL_RSH: reg[rrr] = i >> j; break; case CCL_LSH8: reg[rrr] = (i << 8) | j; break; @@ -1108,23 +1243,32 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, case CCL_LE: reg[rrr] = i <= j; break; case CCL_GE: reg[rrr] = i >= j; break; case CCL_NE: reg[rrr] = i != j; break; - case CCL_DECODE_SJIS: DECODE_SJIS (i, j, reg[rrr], reg[7]); break; - case CCL_ENCODE_SJIS: ENCODE_SJIS (i, j, reg[rrr], reg[7]); break; - default: - ccl->status = CCL_STAT_INVALID_CMD; - goto ccl_error_handler; + case CCL_DECODE_SJIS: + /* DECODE_SJIS set MSB for internal format + as opposed to Emacs. */ + DECODE_SJIS (i, j, reg[rrr], reg[7]); + reg[rrr] &= 0x7F; + reg[7] &= 0x7F; + break; + case CCL_ENCODE_SJIS: + /* ENCODE_SJIS assumes MSB of SJIS-char is set + as opposed to Emacs. */ + ENCODE_SJIS (i | 0x80, j | 0x80, reg[rrr], reg[7]); + break; + default: CCL_INVALID_CMD; } code &= 0x1F; if (code == CCL_WriteExprConst || code == CCL_WriteExprRegister) { i = reg[rrr]; CCL_WRITE_CHAR (i); + ic = jump_address; } else if (!reg[rrr]) ic = jump_address; break; - case CCL_Extension: + case CCL_Extention: switch (EXCMD) { case CCL_ReadMultibyteChar2: @@ -1139,48 +1283,6 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, } i = *src++; -#if 0 - if (i == LEADING_CODE_COMPOSITION) - { - if (src >= src_end) - goto ccl_read_multibyte_character_suspend; - if (*src == 0xFF) - { - ccl->private_state = COMPOSING_WITH_RULE_HEAD; - src++; - } - else - ccl->private_state = COMPOSING_NO_RULE_HEAD; - - continue; - } - if (ccl->private_state != COMPOSING_NO) - { - /* composite character */ - if (i < 0xA0) - ccl->private_state = COMPOSING_NO; - else - { - if (COMPOSING_WITH_RULE_RULE == ccl->private_state) - { - ccl->private_state = COMPOSING_WITH_RULE_HEAD; - continue; - } - else if (COMPOSING_WITH_RULE_HEAD == ccl->private_state) - ccl->private_state = COMPOSING_WITH_RULE_RULE; - - if (i == 0xA0) - { - if (src >= src_end) - goto ccl_read_multibyte_character_suspend; - i = *src++ & 0x7F; - } - else - i -= 0x20; - } - } -#endif - if (i < 0x80) { /* ASCII */ @@ -1245,14 +1347,10 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, i = reg[RRR]; /* charset */ if (i == LEADING_BYTE_ASCII) i = reg[rrr] & 0xFF; -#if 0 - else if (i == CHARSET_COMPOSITION) - i = MAKE_COMPOSITE_CHAR (reg[rrr]); -#endif else if (XCHARSET_DIMENSION (CHARSET_BY_LEADING_BYTE (i)) == 1) - i = ((i - FIELD2_TO_OFFICIAL_LEADING_BYTE) << 7) - | (reg[rrr] & 0x7F); - else if (i < MIN_LEADING_BYTE_OFFICIAL_2) + i = (((i - FIELD2_TO_OFFICIAL_LEADING_BYTE) << 7) + | (reg[rrr] & 0x7F)); + else if (i < MAX_LEADING_BYTE_OFFICIAL_2) i = ((i - FIELD1_TO_OFFICIAL_LEADING_BYTE) << 14) | reg[rrr]; else i = ((i - FIELD1_TO_PRIVATE_LEADING_BYTE) << 14) | reg[rrr]; @@ -1261,23 +1359,11 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, break; -#if 0 case CCL_TranslateCharacter: - i = reg[RRR]; /* charset */ - if (i == LEADING_BYTE_ASCII) - i = reg[rrr]; - else if (i == CHARSET_COMPOSITION) - { - reg[RRR] = -1; - break; - } - else if (CHARSET_DIMENSION (i) == 1) - i = ((i - 0x70) << 7) | (reg[rrr] & 0x7F); - else if (i < MIN_LEADING_BYTE_OFFICIAL_2) - i = ((i - 0x8F) << 14) | (reg[rrr] & 0x3FFF); - else - i = ((i - 0xE0) << 14) | (reg[rrr] & 0x3FFF); - +#if 0 + /* XEmacs does not have translate_char, and its + equivalent nor. We do nothing on this operation. */ + CCL_MAKE_CHAR (reg[RRR], reg[rrr], i); op = translate_char (GET_TRANSLATION_TABLE (reg[Rrr]), i, -1, 0, 0); SPLIT_CHAR (op, reg[RRR], i, j); @@ -1285,32 +1371,23 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, i = (i << 7) | j; reg[rrr] = i; +#endif break; case CCL_TranslateCharacterConstTbl: +#if 0 + /* XEmacs does not have translate_char, and its + equivalent nor. We do nothing on this operation. */ op = XINT (ccl_prog[ic]); /* table */ ic++; - i = reg[RRR]; /* charset */ - if (i == LEADING_BYTE_ASCII) - i = reg[rrr]; - else if (i == CHARSET_COMPOSITION) - { - reg[RRR] = -1; - break; - } - else if (CHARSET_DIMENSION (i) == 1) - i = ((i - 0x70) << 7) | (reg[rrr] & 0x7F); - else if (i < MIN_LEADING_BYTE_OFFICIAL_2) - i = ((i - 0x8F) << 14) | (reg[rrr] & 0x3FFF); - else - i = ((i - 0xE0) << 14) | (reg[rrr] & 0x3FFF); - + CCL_MAKE_CHAR (reg[RRR], reg[rrr], i); op = translate_char (GET_TRANSLATION_TABLE (op), i, -1, 0, 0); SPLIT_CHAR (op, reg[RRR], i, j); if (j != -1) i = (i << 7) | j; reg[rrr] = i; +#endif break; case CCL_IterateMultipleMap: @@ -1342,9 +1419,9 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, map = XVECTOR (Vcode_conversion_map_vector)->contents[point]; - /* Check map varidity. */ + /* Check map validity. */ if (!CONSP (map)) continue; - map = XCONS(map)->cdr; + map = XCDR (map); if (!VECTORP (map)) continue; size = XVECTOR (map)->size; if (size <= 1) continue; @@ -1353,8 +1430,8 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, /* check map type, [STARTPOINT VAL1 VAL2 ...] or - [t ELELMENT STARTPOINT ENDPOINT] */ - if (NUMBERP (content)) + [t ELEMENT STARTPOINT ENDPOINT] */ + if (INTP (content)) { point = XUINT (content); point = op - point + 1; @@ -1375,7 +1452,7 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, if (NILP (content)) continue; - else if (NUMBERP (content)) + else if (INTP (content)) { reg[RRR] = i; reg[rrr] = XINT(content); @@ -1388,14 +1465,18 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, } else if (CONSP (content)) { - attrib = XCONS (content)->car; - value = XCONS (content)->cdr; - if (!NUMBERP (attrib) || !NUMBERP (value)) + attrib = XCAR (content); + value = XCDR (content); + if (!INTP (attrib) || !INTP (value)) continue; reg[RRR] = i; reg[rrr] = XUINT (value); break; } + else if (SYMBOLP (content)) + CCL_CALL_FOR_MAP_INSTRUCTION (content, fin_ic); + else + CCL_INVALID_CMD; } if (i == j) reg[RRR] = -1; @@ -1408,10 +1489,27 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, Lisp_Object map, content, attrib, value; int point, size, map_vector_size; int map_set_rest_length, fin_ic; + int current_ic = this_ic; + + /* inhibit recursive call on MapMultiple. */ + if (stack_idx_of_map_multiple > 0) + { + if (stack_idx_of_map_multiple <= stack_idx) + { + stack_idx_of_map_multiple = 0; + mapping_stack_pointer = mapping_stack; + CCL_INVALID_CMD; + } + } + else + mapping_stack_pointer = mapping_stack; + stack_idx_of_map_multiple = 0; map_set_rest_length = XINT (ccl_prog[ic++]); /* number of maps and separators. */ fin_ic = ic + map_set_rest_length; + op = reg[rrr]; + if ((map_set_rest_length > reg[RRR]) && (reg[RRR] >= 0)) { ic += reg[RRR]; @@ -1422,100 +1520,165 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, { ic = fin_ic; reg[RRR] = -1; + mapping_stack_pointer = mapping_stack; break; } - mapping_stack_pointer = mapping_stack; - op = reg[rrr]; - PUSH_MAPPING_STACK (0, op); - reg[RRR] = -1; - map_vector_size = XVECTOR (Vcode_conversion_map_vector)->size; - for (;map_set_rest_length > 0;i++, map_set_rest_length--) - { - point = XINT(ccl_prog[ic++]); - if (point < 0) - { - point = -point; - if (mapping_stack_pointer - >= &mapping_stack[MAX_MAP_SET_LEVEL]) - { - CCL_INVALID_CMD; - } - PUSH_MAPPING_STACK (map_set_rest_length - point, - reg[rrr]); - map_set_rest_length = point + 1; - reg[rrr] = op; - continue; - } - - if (point >= map_vector_size) continue; - map = (XVECTOR (Vcode_conversion_map_vector) - ->contents[point]); - /* Check map varidity. */ - if (!CONSP (map)) continue; - map = XCONS (map)->cdr; - if (!VECTORP (map)) continue; - size = XVECTOR (map)->size; - if (size <= 1) continue; - - content = XVECTOR (map)->contents[0]; - - /* check map type, - [STARTPOINT VAL1 VAL2 ...] or - [t ELEMENT STARTPOINT ENDPOINT] */ - if (NUMBERP (content)) - { - point = XUINT (content); - point = op - point + 1; - if (!((point >= 1) && (point < size))) continue; - content = XVECTOR (map)->contents[point]; - } - else if (EQ (content, Qt)) - { - if (size != 4) continue; - if ((op >= XUINT (XVECTOR (map)->contents[2])) && - (op < XUINT (XVECTOR (map)->contents[3]))) - content = XVECTOR (map)->contents[1]; - else - continue; - } - else - continue; + if (mapping_stack_pointer <= (mapping_stack + 1)) + { + /* Set up initial state. */ + mapping_stack_pointer = mapping_stack; + PUSH_MAPPING_STACK (0, op); + reg[RRR] = -1; + } + else + { + /* Recover after calling other ccl program. */ + int orig_op; - if (NILP (content)) - continue; - else if (NUMBERP (content)) - { - op = XINT (content); - reg[RRR] = i; - i += map_set_rest_length; - POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); - } - else if (CONSP (content)) - { - attrib = XCONS (content)->car; - value = XCONS (content)->cdr; - if (!NUMBERP (attrib) || !NUMBERP (value)) - continue; - reg[RRR] = i; - op = XUINT (value); - i += map_set_rest_length; - POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); - } - else if (EQ (content, Qt)) + POP_MAPPING_STACK (map_set_rest_length, orig_op); + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + switch (op) { - reg[RRR] = i; + case -1: + /* Regard it as Qnil. */ + op = orig_op; + i++; + ic++; + map_set_rest_length--; + break; + case -2: + /* Regard it as Qt. */ op = reg[rrr]; + i++; + ic++; + map_set_rest_length--; + break; + case -3: + /* Regard it as Qlambda. */ + op = orig_op; i += map_set_rest_length; + ic += map_set_rest_length; + map_set_rest_length = 0; + break; + default: + /* Regard it as normal mapping. */ + i += map_set_rest_length; + ic += map_set_rest_length; POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); - } - else if (EQ (content, Qlambda)) - { break; } - else - CCL_INVALID_CMD; } + map_vector_size = XVECTOR (Vcode_conversion_map_vector)->size; + + do { + for (;map_set_rest_length > 0;i++, ic++, map_set_rest_length--) + { + point = XINT(ccl_prog[ic]); + if (point < 0) + { + /* +1 is for including separator. */ + point = -point + 1; + if (mapping_stack_pointer + >= &mapping_stack[MAX_MAP_SET_LEVEL]) + CCL_INVALID_CMD; + PUSH_MAPPING_STACK (map_set_rest_length - point, + reg[rrr]); + map_set_rest_length = point; + reg[rrr] = op; + continue; + } + + if (point >= map_vector_size) continue; + map = (XVECTOR (Vcode_conversion_map_vector) + ->contents[point]); + + /* Check map validity. */ + if (!CONSP (map)) continue; + map = XCDR (map); + if (!VECTORP (map)) continue; + size = XVECTOR (map)->size; + if (size <= 1) continue; + + content = XVECTOR (map)->contents[0]; + + /* check map type, + [STARTPOINT VAL1 VAL2 ...] or + [t ELEMENT STARTPOINT ENDPOINT] */ + if (INTP (content)) + { + point = XUINT (content); + point = op - point + 1; + if (!((point >= 1) && (point < size))) continue; + content = XVECTOR (map)->contents[point]; + } + else if (EQ (content, Qt)) + { + if (size != 4) continue; + if ((op >= XUINT (XVECTOR (map)->contents[2])) && + (op < XUINT (XVECTOR (map)->contents[3]))) + content = XVECTOR (map)->contents[1]; + else + continue; + } + else + continue; + + if (NILP (content)) + continue; + + reg[RRR] = i; + if (INTP (content)) + { + op = XINT (content); + i += map_set_rest_length - 1; + ic += map_set_rest_length - 1; + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + map_set_rest_length++; + } + else if (CONSP (content)) + { + attrib = XCAR (content); + value = XCDR (content); + if (!INTP (attrib) || !INTP (value)) + continue; + op = XUINT (value); + i += map_set_rest_length - 1; + ic += map_set_rest_length - 1; + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + map_set_rest_length++; + } + else if (EQ (content, Qt)) + { + op = reg[rrr]; + } + else if (EQ (content, Qlambda)) + { + i += map_set_rest_length; + ic += map_set_rest_length; + break; + } + else if (SYMBOLP (content)) + { + if (mapping_stack_pointer + >= &mapping_stack[MAX_MAP_SET_LEVEL]) + CCL_INVALID_CMD; + PUSH_MAPPING_STACK (map_set_rest_length, reg[rrr]); + PUSH_MAPPING_STACK (map_set_rest_length, op); + stack_idx_of_map_multiple = stack_idx + 1; + CCL_CALL_FOR_MAP_INSTRUCTION (content, current_ic); + } + else + CCL_INVALID_CMD; + } + if (mapping_stack_pointer <= (mapping_stack + 1)) + break; + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + i += map_set_rest_length; + ic += map_set_rest_length; + POP_MAPPING_STACK (map_set_rest_length, reg[rrr]); + } while (1); + ic = fin_ic; } reg[rrr] = op; @@ -1538,7 +1701,7 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, reg[RRR] = -1; break; } - map = XCONS(map)->cdr; + map = XCDR (map); if (!VECTORP (map)) { reg[RRR] = -1; @@ -1553,28 +1716,29 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, reg[RRR] = -1; else { + reg[RRR] = 0; content = XVECTOR (map)->contents[point]; if (NILP (content)) reg[RRR] = -1; - else if (NUMBERP (content)) + else if (INTP (content)) reg[rrr] = XINT (content); - else if (EQ (content, Qt)) - reg[RRR] = i; + else if (EQ (content, Qt)); else if (CONSP (content)) { - attrib = XCONS (content)->car; - value = XCONS (content)->cdr; - if (!NUMBERP (attrib) || !NUMBERP (value)) + attrib = XCAR (content); + value = XCDR (content); + if (!INTP (attrib) || !INTP (value)) continue; reg[rrr] = XUINT(value); break; } + else if (SYMBOLP (content)) + CCL_CALL_FOR_MAP_INSTRUCTION (content, ic); else reg[RRR] = -1; } } break; -#endif default: CCL_INVALID_CMD; @@ -1582,8 +1746,7 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, break; default: - ccl->status = CCL_STAT_INVALID_CMD; - goto ccl_error_handler; + CCL_INVALID_CMD; } } @@ -1595,15 +1758,8 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, there. */ char msg[256]; -#if 0 /* not for XEmacs ? */ - if (!dst) - dst = destination; -#endif - switch (ccl->status) { - /* Terminate CCL program because of invalid command. - Should not occur in the normal case. */ case CCL_STAT_INVALID_CMD: sprintf(msg, "\nCCL: Invalid command %x (ccl_code = %x) at %d.", code & 0x1F, code, this_ic); @@ -1628,7 +1784,7 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, break; case CCL_STAT_QUIT: - sprintf(msg, "\nCCL: Quited."); + sprintf(msg, "\nCCL: Exited."); break; default: @@ -1643,143 +1799,220 @@ ccl_driver (struct ccl_program *ccl, const unsigned char *source, ccl->stack_idx = stack_idx; ccl->prog = ccl_prog; if (consumed) *consumed = src - source; - if (destination) - return Dynarr_length (destination); - else + if (!destination) return 0; -} - -/* Setup fields of the structure pointed by CCL appropriately for the - execution of compiled CCL code in VEC (vector of integer). - If VEC is nil, we skip setting ups based on VEC. */ -void -setup_ccl_program (struct ccl_program *ccl, Lisp_Object vec) -{ - int i; - - if (VECTORP (vec)) - { - ccl->size = XVECTOR_LENGTH (vec); - ccl->prog = XVECTOR_DATA (vec); - ccl->eof_ic = XINT (XVECTOR_DATA (vec)[CCL_HEADER_EOF]); - ccl->buf_magnification = XINT (XVECTOR_DATA (vec)[CCL_HEADER_BUF_MAG]); - } - ccl->ic = CCL_HEADER_MAIN; - for (i = 0; i < 8; i++) - ccl->reg[i] = 0; - ccl->last_block = 0; - ccl->private_state = 0; - ccl->status = 0; - ccl->stack_idx = 0; + return Dynarr_length (destination); } /* Resolve symbols in the specified CCL code (Lisp vector). This function converts symbols of code conversion maps and character - translation tables embeded in the CCL code into their ID numbers. */ + translation tables embedded in the CCL code into their ID numbers. + + The return value is a vector (CCL itself or a new vector in which + all symbols are resolved), Qt if resolving of some symbol failed, + or nil if CCL contains invalid data. */ static Lisp_Object resolve_symbol_ccl_program (Lisp_Object ccl) { - int i, veclen; - Lisp_Object result, contents /*, prop */; + int i, veclen, unresolved = 0; + Lisp_Object result, contents, val; result = ccl; - veclen = XVECTOR_LENGTH (result); + veclen = XVECTOR (result)->size; - /* Set CCL program's table ID */ for (i = 0; i < veclen; i++) { - contents = XVECTOR_DATA (result)[i]; - if (SYMBOLP (contents)) + contents = XVECTOR (result)->contents[i]; + if (INTP (contents)) + continue; + else if (CONSP (contents) + && SYMBOLP (XCAR (contents)) + && SYMBOLP (XCDR (contents))) { - if (EQ(result, ccl)) + /* This is the new style for embedding symbols. The form is + (SYMBOL . PROPERTY). (get SYMBOL PROPERTY) should give + an index number. */ + + if (EQ (result, ccl)) + result = Fcopy_sequence (ccl); + + val = Fget (XCAR (contents), XCDR (contents), Qnil); + if (NATNUMP (val)) + XVECTOR (result)->contents[i] = val; + else + unresolved = 1; + continue; + } + else if (SYMBOLP (contents)) + { + /* This is the old style for embedding symbols. This style + may lead to a bug if, for instance, a translation table + and a code conversion map have the same name. */ + if (EQ (result, ccl)) result = Fcopy_sequence (ccl); -#if 0 - prop = Fget (contents, Qtranslation_table_id); - if (NUMBERP (prop)) - { - XVECTOR_DATA (result)[i] = prop; - continue; - } - prop = Fget (contents, Qcode_conversion_map_id); - if (NUMBERP (prop)) - { - XVECTOR_DATA (result)[i] = prop; - continue; - } - prop = Fget (contents, Qccl_program_idx); - if (NUMBERP (prop)) + val = Fget (contents, Qcode_conversion_map_id, Qnil); + if (NATNUMP (val)) + XVECTOR (result)->contents[i] = val; + else { - XVECTOR_DATA (result)[i] = prop; - continue; + val = Fget (contents, Qccl_program_idx, Qnil); + if (NATNUMP (val)) + XVECTOR (result)->contents[i] = val; + else + unresolved = 1; } -#endif + continue; } + return Qnil; } - return result; + return (unresolved ? Qt : result); } +/* Return the compiled code (vector) of CCL program CCL_PROG. + CCL_PROG is a name (symbol) of the program or already compiled + code. If necessary, resolve symbols in the compiled code to index + numbers. If we failed to get the compiled code or to resolve + symbols, return Qnil. */ + +static Lisp_Object +ccl_get_compiled_code (Lisp_Object ccl_prog) +{ + Lisp_Object val, slot; + + if (VECTORP (ccl_prog)) + { + val = resolve_symbol_ccl_program (ccl_prog); + return (VECTORP (val) ? val : Qnil); + } + if (!SYMBOLP (ccl_prog)) + return Qnil; + + val = Fget (ccl_prog, Qccl_program_idx, Qnil); + if (! NATNUMP (val) + || XINT (val) >= XVECTOR_LENGTH (Vccl_program_table)) + return Qnil; + slot = XVECTOR_DATA (Vccl_program_table)[XINT (val)]; + if (! VECTORP (slot) + || XVECTOR (slot)->size != 3 + || ! VECTORP (XVECTOR_DATA (slot)[1])) + return Qnil; + if (NILP (XVECTOR_DATA (slot)[2])) + { + val = resolve_symbol_ccl_program (XVECTOR_DATA (slot)[1]); + if (! VECTORP (val)) + return Qnil; + XVECTOR_DATA (slot)[1] = val; + XVECTOR_DATA (slot)[2] = Qt; + } + return XVECTOR_DATA (slot)[1]; +} + +/* Setup fields of the structure pointed by CCL appropriately for the + execution of CCL program CCL_PROG. CCL_PROG is the name (symbol) + of the CCL program or the already compiled code (vector). + Return 0 if we succeed this setup, else return -1. + + If CCL_PROG is nil, we just reset the structure pointed by CCL. */ +int +setup_ccl_program (struct ccl_program *ccl, Lisp_Object ccl_prog) +{ + int i; + + if (! NILP (ccl_prog)) + { + ccl_prog = ccl_get_compiled_code (ccl_prog); + if (! VECTORP (ccl_prog)) + return -1; + ccl->size = XVECTOR_LENGTH (ccl_prog); + ccl->prog = XVECTOR_DATA (ccl_prog); + ccl->eof_ic = XINT (XVECTOR_DATA (ccl_prog)[CCL_HEADER_EOF]); + ccl->buf_magnification = XINT (XVECTOR_DATA (ccl_prog)[CCL_HEADER_BUF_MAG]); + } + ccl->ic = CCL_HEADER_MAIN; + for (i = 0; i < 8; i++) + ccl->reg[i] = 0; + ccl->last_block = 0; + ccl->private_state = 0; + ccl->status = 0; + ccl->stack_idx = 0; + ccl->eol_type = CCL_CODING_EOL_LF; + return 0; +} #ifdef emacs +DEFUN ("ccl-program-p", Fccl_program_p, 1, 1, 0, /* +Return t if OBJECT is a CCL program name or a compiled CCL program code. +See the documentation of `define-ccl-program' for the detail of CCL program. +*/ + (object)) +{ + Lisp_Object val; + + if (VECTORP (object)) + { + val = resolve_symbol_ccl_program (object); + return (VECTORP (val) ? Qt : Qnil); + } + if (!SYMBOLP (object)) + return Qnil; + + val = Fget (object, Qccl_program_idx, Qnil); + return ((! NATNUMP (val) + || XINT (val) >= XVECTOR_LENGTH (Vccl_program_table)) + ? Qnil : Qt); +} + DEFUN ("ccl-execute", Fccl_execute, 2, 2, 0, /* Execute CCL-PROGRAM with registers initialized by REGISTERS. -CCL-PROGRAM is a symbol registered by register-ccl-program, +CCL-PROGRAM is a CCL program name (symbol) or a compiled code generated by `ccl-compile' (for backward compatibility, -in this case, the execution is slower). +in this case, the overhead of the execution is bigger than the former case). No I/O commands should appear in CCL-PROGRAM. REGISTERS is a vector of [R0 R1 ... R7] where RN is an initial value of Nth register. -As side effect, each element of REGISTER holds the value of +As side effect, each element of REGISTERS holds the value of corresponding register after the execution. + +See the documentation of `define-ccl-program' for the detail of CCL program. */ - (ccl_prog, reg)) + (ccl_prog, reg)) { struct ccl_program ccl; int i; - Lisp_Object ccl_id; - if (SYMBOLP (ccl_prog) && - !NILP (ccl_id = Fget (ccl_prog, Qccl_program_idx, Qnil))) - { - ccl_prog = XVECTOR_DATA (Vccl_program_table)[XUINT (ccl_id)]; - CHECK_LIST (ccl_prog); - ccl_prog = XCDR (ccl_prog); - CHECK_VECTOR (ccl_prog); - } - else - { - CHECK_VECTOR (ccl_prog); - ccl_prog = resolve_symbol_ccl_program (ccl_prog); - } + if (setup_ccl_program (&ccl, ccl_prog) < 0) + error ("Invalid CCL program"); CHECK_VECTOR (reg); if (XVECTOR_LENGTH (reg) != 8) - error ("Invalid length of vector REGISTERS"); + error ("Length of vector REGISTERS is not 8"); - setup_ccl_program (&ccl, ccl_prog); for (i = 0; i < 8; i++) ccl.reg[i] = (INTP (XVECTOR_DATA (reg)[i]) ? XINT (XVECTOR_DATA (reg)[i]) : 0); - ccl_driver (&ccl, (const unsigned char *)0, (unsigned_char_dynarr *)0, - 0, (int *)0, CCL_MODE_ENCODING); + ccl_driver (&ccl, (const unsigned char *)0, + (unsigned_char_dynarr *)0, 0, (int *)0, + CCL_MODE_ENCODING); QUIT; if (ccl.status != CCL_STAT_SUCCESS) error ("Error in CCL program at %dth code", ccl.ic); for (i = 0; i < 8; i++) - XSETINT (XVECTOR_DATA (reg)[i], ccl.reg[i]); + XSETINT (XVECTOR (reg)->contents[i], ccl.reg[i]); return Qnil; } -DEFUN ("ccl-execute-on-string", Fccl_execute_on_string, 3, 4, 0, /* +DEFUN ("ccl-execute-on-string", Fccl_execute_on_string, + 3, 4, 0, /* Execute CCL-PROGRAM with initial STATUS on STRING. CCL-PROGRAM is a symbol registered by register-ccl-program, @@ -1788,7 +2021,6 @@ in this case, the execution is slower). Read buffer is set to STRING, and write buffer is allocated automatically. -If IC is nil, it is initialized to head of the CCL program.\n\ STATUS is a vector of [R0 R1 ... R7 IC], where R0..R7 are initial values of corresponding registers, IC is the instruction counter specifying from where to start the program. @@ -1796,42 +2028,32 @@ If R0..R7 are nil, they are initialized to 0. If IC is nil, it is initialized to head of the CCL program. If optional 4th arg CONTINUE is non-nil, keep IC on read operation -when read buffer is exausted, else, IC is always set to the end of +when read buffer is exhausted, else, IC is always set to the end of CCL-PROGRAM on exit. It returns the contents of write buffer as a string, and as side effect, STATUS is updated. + +See the documentation of `define-ccl-program' for the detail of CCL program. */ - (ccl_prog, status, str, contin)) + (ccl_prog, status, string, continue_)) { Lisp_Object val; struct ccl_program ccl; int i, produced; unsigned_char_dynarr *outbuf; - struct gcpro gcpro1, gcpro2, gcpro3; - Lisp_Object ccl_id; + struct gcpro gcpro1, gcpro2; - if (SYMBOLP (ccl_prog) && - !NILP (ccl_id = Fget (ccl_prog, Qccl_program_idx, Qnil))) - { - ccl_prog = XVECTOR (Vccl_program_table)->contents[XUINT (ccl_id)]; - CHECK_LIST (ccl_prog); - ccl_prog = XCDR (ccl_prog); - CHECK_VECTOR (ccl_prog); - } - else - { - CHECK_VECTOR (ccl_prog); - ccl_prog = resolve_symbol_ccl_program (ccl_prog); - } + if (setup_ccl_program (&ccl, ccl_prog) < 0) + error ("Invalid CCL program"); CHECK_VECTOR (status); - if (XVECTOR_LENGTH (status) != 9) - signal_simple_error ("Vector should be of length 9", status); - CHECK_STRING (str); - GCPRO3 (ccl_prog, status, str); + if (XVECTOR (status)->size != 9) + error ("Length of vector STATUS is not 9"); + CHECK_STRING (string); + + GCPRO2 (status, string); - setup_ccl_program (&ccl, ccl_prog); for (i = 0; i < 8; i++) { if (NILP (XVECTOR_DATA (status)[i])) @@ -1839,80 +2061,106 @@ It returns the contents of write buffer as a string, if (INTP (XVECTOR_DATA (status)[i])) ccl.reg[i] = XINT (XVECTOR_DATA (status)[i]); } - if (INTP (XVECTOR_DATA (status)[8])) + if (INTP (XVECTOR (status)->contents[i])) { i = XINT (XVECTOR_DATA (status)[8]); if (ccl.ic < i && i < ccl.size) ccl.ic = i; } outbuf = Dynarr_new (unsigned_char); - ccl.last_block = NILP (contin); - produced = ccl_driver (&ccl, XSTRING_DATA (str), outbuf, - XSTRING_LENGTH (str), (int *)0, CCL_MODE_DECODING); + ccl.last_block = NILP (continue_); + produced = ccl_driver (&ccl, XSTRING_DATA (string), outbuf, + XSTRING_LENGTH (string), + (int *) 0, + CCL_MODE_DECODING); for (i = 0; i < 8; i++) - XVECTOR_DATA (status)[i] = make_int(ccl.reg[i]); + XSETINT (XVECTOR_DATA (status)[i], ccl.reg[i]); XSETINT (XVECTOR_DATA (status)[8], ccl.ic); UNGCPRO; val = make_string (Dynarr_atp (outbuf, 0), produced); Dynarr_free (outbuf); QUIT; + if (ccl.status == CCL_STAT_SUSPEND_BY_DST) + error ("Output buffer for the CCL programs overflow"); if (ccl.status != CCL_STAT_SUCCESS - && ccl.status != CCL_STAT_SUSPEND_BY_SRC - && ccl.status != CCL_STAT_SUSPEND_BY_DST) + && ccl.status != CCL_STAT_SUSPEND_BY_SRC) error ("Error in CCL program at %dth code", ccl.ic); return val; } -DEFUN ("register-ccl-program", Fregister_ccl_program, 2, 2, 0, /* -Register CCL program PROGRAM of NAME in `ccl-program-table'. -PROGRAM should be a compiled code of CCL program, or nil. +DEFUN ("register-ccl-program", Fregister_ccl_program, + 2, 2, 0, /* +Register CCL program CCL-PROG as NAME in `ccl-program-table'. +CCL-PROG should be a compiled CCL program (vector), or nil. +If it is nil, just reserve NAME as a CCL program name. Return index number of the registered CCL program. */ - (name, ccl_prog)) + (name, ccl_prog)) { int len = XVECTOR_LENGTH (Vccl_program_table); - int i; + int idx; + Lisp_Object resolved; CHECK_SYMBOL (name); + resolved = Qnil; if (!NILP (ccl_prog)) { CHECK_VECTOR (ccl_prog); - ccl_prog = resolve_symbol_ccl_program (ccl_prog); + resolved = resolve_symbol_ccl_program (ccl_prog); + if (! NILP (resolved)) + { + ccl_prog = resolved; + resolved = Qt; + } } - for (i = 0; i < len; i++) + for (idx = 0; idx < len; idx++) { - Lisp_Object slot = XVECTOR_DATA (Vccl_program_table)[i]; + Lisp_Object slot; - if (!CONSP (slot)) + slot = XVECTOR_DATA (Vccl_program_table)[idx]; + if (!VECTORP (slot)) + /* This is the first unused slot. Register NAME here. */ break; - if (EQ (name, XCAR (slot))) + if (EQ (name, XVECTOR_DATA (slot)[0])) { - XCDR (slot) = ccl_prog; - return make_int (i); + /* Update this slot. */ + XVECTOR_DATA (slot)[1] = ccl_prog; + XVECTOR_DATA (slot)[2] = resolved; + return make_int (idx); } } - if (i == len) + if (idx == len) { - Lisp_Object new_table = Fmake_vector (make_int (len * 2), Qnil); + /* Extend the table. */ + Lisp_Object new_table; int j; + new_table = Fmake_vector (make_int (len * 2), Qnil); for (j = 0; j < len; j++) XVECTOR_DATA (new_table)[j] = XVECTOR_DATA (Vccl_program_table)[j]; Vccl_program_table = new_table; } - XVECTOR_DATA (Vccl_program_table)[i] = Fcons (name, ccl_prog); - Fput (name, Qccl_program_idx, make_int (i)); - return make_int (i); + { + Lisp_Object elt; + + elt = Fmake_vector (make_int (3), Qnil); + XVECTOR_DATA (elt)[0] = name; + XVECTOR_DATA (elt)[1] = ccl_prog; + XVECTOR_DATA (elt)[2] = resolved; + XVECTOR_DATA (Vccl_program_table)[idx] = elt; + } + + Fput (name, Qccl_program_idx, make_int (idx)); + return make_int (idx); } -#if 0 /* Register code conversion map. A code conversion map consists of numbers, Qt, Qnil, and Qlambda. The first element is start code point. @@ -1923,34 +2171,33 @@ Return index number of the registered CCL program. */ DEFUN ("register-code-conversion-map", Fregister_code_conversion_map, - Sregister_code_conversion_map, - 2, 2, 0, - "Register SYMBOL as code conversion map MAP.\n\ -Return index number of the registered map.") - (symbol, map) - Lisp_Object symbol, map; + 2, 2, 0, /* +Register SYMBOL as code conversion map MAP. +Return index number of the registered map. +*/ + (symbol, map)) { - int len = XVECTOR (Vcode_conversion_map_vector)->size; + int len = XVECTOR_LENGTH (Vcode_conversion_map_vector); int i; - Lisp_Object index; + Lisp_Object idx; - CHECK_SYMBOL (symbol, 0); - CHECK_VECTOR (map, 1); + CHECK_SYMBOL (symbol); + CHECK_VECTOR (map); for (i = 0; i < len; i++) { - Lisp_Object slot = XVECTOR (Vcode_conversion_map_vector)->contents[i]; + Lisp_Object slot = XVECTOR_DATA (Vcode_conversion_map_vector)[i]; if (!CONSP (slot)) break; - if (EQ (symbol, XCONS (slot)->car)) + if (EQ (symbol, XCAR (slot))) { - index = make_int (i); - XCONS (slot)->cdr = map; + idx = make_int (i); + XCDR (slot) = map; Fput (symbol, Qcode_conversion_map, map); - Fput (symbol, Qcode_conversion_map_id, index); - return index; + Fput (symbol, Qcode_conversion_map_id, idx); + return idx; } } @@ -1960,29 +2207,27 @@ Return index number of the registered map.") int j; for (j = 0; j < len; j++) - XVECTOR (new_vector)->contents[j] - = XVECTOR (Vcode_conversion_map_vector)->contents[j]; + XVECTOR_DATA (new_vector)[j] + = XVECTOR_DATA (Vcode_conversion_map_vector)[j]; Vcode_conversion_map_vector = new_vector; } - index = make_int (i); + idx = make_int (i); Fput (symbol, Qcode_conversion_map, map); - Fput (symbol, Qcode_conversion_map_id, index); - XVECTOR (Vcode_conversion_map_vector)->contents[i] = Fcons (symbol, map); - return index; + Fput (symbol, Qcode_conversion_map_id, idx); + XVECTOR_DATA (Vcode_conversion_map_vector)[i] = Fcons (symbol, map); + return idx; } -#endif void syms_of_mule_ccl (void) { + DEFSUBR (Fccl_program_p); DEFSUBR (Fccl_execute); DEFSUBR (Fccl_execute_on_string); DEFSUBR (Fregister_ccl_program); -#if 0 - DEFSUBR (&Fregister_code_conversion_map); -#endif + DEFSUBR (Fregister_code_conversion_map); } void @@ -1991,23 +2236,15 @@ vars_of_mule_ccl (void) staticpro (&Vccl_program_table); Vccl_program_table = Fmake_vector (make_int (32), Qnil); - Qccl_program = intern ("ccl-program"); - staticpro (&Qccl_program); - - Qccl_program_idx = intern ("ccl-program-idx"); - staticpro (&Qccl_program_idx); - -#if 0 - Qcode_conversion_map = intern ("code-conversion-map"); - staticpro (&Qcode_conversion_map); - - Qcode_conversion_map_id = intern ("code-conversion-map-id"); - staticpro (&Qcode_conversion_map_id); + defsymbol (&Qccl_program, "ccl-program"); + defsymbol (&Qccl_program_idx, "ccl-program-idx"); + defsymbol (&Qcode_conversion_map, "code-conversion-map"); + defsymbol (&Qcode_conversion_map_id, "code-conversion-map-id"); DEFVAR_LISP ("code-conversion-map-vector", &Vcode_conversion_map_vector /* -Vector of code conversion maps.*/ ); +Vector of code conversion maps. +*/ ); Vcode_conversion_map_vector = Fmake_vector (make_int (16), Qnil); -#endif DEFVAR_LISP ("font-ccl-encoder-alist", &Vfont_ccl_encoder_alist /* Alist of fontname patterns vs corresponding CCL program. diff --git a/src/mule-charset.c b/src/mule-charset.c index ea04c9d..1949e90 100644 --- a/src/mule-charset.c +++ b/src/mule-charset.c @@ -322,26 +322,18 @@ non_ascii_valid_char_p (Emchar ch) /* Basic string functions */ /************************************************************************/ -/* Copy the character pointed to by PTR into STR, assuming it's - non-ASCII. Do not call this directly. Use the macro - charptr_copy_char() instead. */ +/* Copy the character pointed to by SRC into DST. Do not call this + directly. Use the macro charptr_copy_char() instead. + Return the number of bytes copied. */ Bytecount -non_ascii_charptr_copy_char (const Bufbyte *ptr, Bufbyte *str) +non_ascii_charptr_copy_char (const Bufbyte *src, Bufbyte *dst) { - Bufbyte *strptr = str; - *strptr = *ptr++; - switch (REP_BYTES_BY_FIRST_BYTE (*strptr)) - { - /* Notice fallthrough. */ - case 4: *++strptr = *ptr++; - case 3: *++strptr = *ptr++; - case 2: *++strptr = *ptr; - break; - default: - abort (); - } - return strptr + 1 - str; + unsigned int bytes = REP_BYTES_BY_FIRST_BYTE (*src); + unsigned int i; + for (i = bytes; i; i--, dst++, src++) + *dst = *src; + return bytes; } @@ -358,26 +350,15 @@ Lstream_get_emchar_1 (Lstream *stream, int ch) { Bufbyte str[MAX_EMCHAR_LEN]; Bufbyte *strptr = str; + unsigned int bytes; str[0] = (Bufbyte) ch; - switch (REP_BYTES_BY_FIRST_BYTE (ch)) + + for (bytes = REP_BYTES_BY_FIRST_BYTE (ch) - 1; bytes; bytes--) { - /* Notice fallthrough. */ - case 4: - ch = Lstream_getc (stream); - assert (ch >= 0); - *++strptr = (Bufbyte) ch; - case 3: - ch = Lstream_getc (stream); - assert (ch >= 0); - *++strptr = (Bufbyte) ch; - case 2: - ch = Lstream_getc (stream); - assert (ch >= 0); - *++strptr = (Bufbyte) ch; - break; - default: - abort (); + int c = Lstream_getc (stream); + bufpos_checking_assert (c >= 0); + *++strptr = (Bufbyte) c; } return charptr_emchar (str); } @@ -629,7 +610,7 @@ Return a list of the names of all defined charsets. } DEFUN ("charset-name", Fcharset_name, 1, 1, 0, /* -Return the name of the given charset. +Return the name of charset CHARSET. */ (charset)) { @@ -774,7 +755,10 @@ character set. Recognized properties are: else if (EQ (keyword, Qccl_program)) { - CHECK_VECTOR (value); + struct ccl_program test_ccl; + + if (setup_ccl_program (&test_ccl, value) < 0) + signal_simple_error ("Invalid value for 'ccl-program", value); ccl_program = value; } @@ -1030,8 +1014,11 @@ Set the 'ccl-program property of CHARSET to CCL-PROGRAM. */ (charset, ccl_program)) { + struct ccl_program test_ccl; + charset = Fget_charset (charset); - CHECK_VECTOR (ccl_program); + if (setup_ccl_program (&test_ccl, ccl_program) < 0) + signal_simple_error ("Invalid ccl-program", ccl_program); XCHARSET_CCL_PROGRAM (charset) = ccl_program; return Qnil; } @@ -1115,28 +1102,28 @@ character s with caron. } DEFUN ("char-charset", Fchar_charset, 1, 1, 0, /* -Return the character set of char CH. +Return the character set of CHARACTER. */ - (ch)) + (character)) { - CHECK_CHAR_COERCE_INT (ch); + CHECK_CHAR_COERCE_INT (character); return XCHARSET_NAME (CHARSET_BY_LEADING_BYTE - (CHAR_LEADING_BYTE (XCHAR (ch)))); + (CHAR_LEADING_BYTE (XCHAR (character)))); } DEFUN ("char-octet", Fchar_octet, 1, 2, 0, /* -Return the octet numbered N (should be 0 or 1) of char CH. +Return the octet numbered N (should be 0 or 1) of CHARACTER. N defaults to 0 if omitted. */ - (ch, n)) + (character, n)) { Lisp_Object charset; int octet0, octet1; - CHECK_CHAR_COERCE_INT (ch); + CHECK_CHAR_COERCE_INT (character); - BREAKUP_CHAR (XCHAR (ch), charset, octet0, octet1); + BREAKUP_CHAR (XCHAR (character), charset, octet0, octet1); if (NILP (n) || EQ (n, Qzero)) return make_int (octet0); @@ -1147,7 +1134,7 @@ N defaults to 0 if omitted. } DEFUN ("split-char", Fsplit_char, 1, 1, 0, /* -Return list of charset and one or two position-codes of CHAR. +Return list of charset and one or two position-codes of CHARACTER. */ (character)) { diff --git a/src/objects.c b/src/objects.c index baccaad..2597b61 100644 --- a/src/objects.c +++ b/src/objects.c @@ -137,8 +137,8 @@ Optional argument DEVICE specifies the device this object applies to and defaults to the selected device. An error is signaled if the color is unknown or cannot be allocated; -however, if optional argument NO-ERROR is non-nil, nil is simply -returned in this case. (And if NO-ERROR is other than t, a warning may +however, if optional argument NOERROR is non-nil, nil is simply +returned in this case. (And if NOERROR is other than t, a warning may be issued.) The returned object is a normal, first-class lisp object. The way you @@ -147,7 +147,7 @@ you drop all pointers to it and allow it to be garbage collected. When these objects are GCed, the underlying window-system data (e.g. X object) is deallocated as well. */ - (name, device, no_error)) + (name, device, noerror)) { Lisp_Color_Instance *c; Lisp_Object val; @@ -163,7 +163,7 @@ is deallocated as well. retval = MAYBE_INT_DEVMETH (XDEVICE (device), initialize_color_instance, (c, name, device, - decode_error_behavior_flag (no_error))); + decode_error_behavior_flag (noerror))); if (!retval) return Qnil; @@ -315,12 +315,12 @@ The returned object is a normal, first-class lisp object. The way you you drop all pointers to it and allow it to be garbage collected. When these objects are GCed, the underlying X data is deallocated as well. */ - (name, device, no_error)) + (name, device, noerror)) { Lisp_Font_Instance *f; Lisp_Object val; int retval = 0; - Error_behavior errb = decode_error_behavior_flag (no_error); + Error_behavior errb = decode_error_behavior_flag (noerror); if (ERRB_EQ (errb, ERROR_ME)) CHECK_STRING (name); diff --git a/src/print.c b/src/print.c index afbbf0d..73f0960 100644 --- a/src/print.c +++ b/src/print.c @@ -509,19 +509,19 @@ write_c_string (const char *str, Lisp_Object stream) DEFUN ("write-char", Fwrite_char, 1, 2, 0, /* -Output character CH to stream STREAM. +Output character CHARACTER to stream STREAM. STREAM defaults to the value of `standard-output' (which see). */ - (ch, stream)) + (character, stream)) { /* This function can GC */ Bufbyte str[MAX_EMCHAR_LEN]; Bytecount len; - CHECK_CHAR_COERCE_INT (ch); - len = set_charptr_emchar (str, XCHAR (ch)); + CHECK_CHAR_COERCE_INT (character); + len = set_charptr_emchar (str, XCHAR (character)); output_string (canonicalize_printcharfun (stream), str, Qnil, 0, len); - return ch; + return character; } void @@ -673,7 +673,7 @@ DEFUN ("princ", Fprinc, 1, 2, 0, /* Output the printed representation of OBJECT, any Lisp object. No quoting characters are used; no delimiters are printed around the contents of strings. -Output stream is STREAM, or value of standard-output (which see). +Output stream is STREAM, or value of `standard-output' (which see). */ (object, stream)) { @@ -1604,22 +1604,24 @@ the output also will be logged to this file. } DEFUN ("open-termscript", Fopen_termscript, 1, 1, "FOpen termscript file: ", /* -Start writing all terminal output to FILE as well as the terminal. -FILE = nil means just close any termscript file currently open. +Start writing all terminal output to FILENAME as well as the terminal. +FILENAME = nil means just close any termscript file currently open. */ - (file)) + (filename)) { /* This function can GC */ if (termscript != 0) - fclose (termscript); - termscript = 0; + { + fclose (termscript); + termscript = 0; + } - if (! NILP (file)) + if (! NILP (filename)) { - file = Fexpand_file_name (file, Qnil); - termscript = fopen ((char *) XSTRING_DATA (file), "w"); + filename = Fexpand_file_name (filename, Qnil); + termscript = fopen ((char *) XSTRING_DATA (filename), "w"); if (termscript == NULL) - report_file_error ("Opening termscript", list1 (file)); + report_file_error ("Opening termscript", list1 (filename)); } return Qnil; } diff --git a/src/process-unix.c b/src/process-unix.c index 3523f6c..0063a6e 100644 --- a/src/process-unix.c +++ b/src/process-unix.c @@ -1407,9 +1407,9 @@ static void try_to_initialize_subtty (struct unix_process_data *upd) { if (upd->pty_flag - && (upd->subtty = -1 || ! isatty (upd->subtty)) + && (upd->subtty == -1 || ! isatty (upd->subtty)) && STRINGP (upd->tty_name)) - upd->subtty = open (XSTRING_DATA (upd->tty_name), O_RDWR, 0); + upd->subtty = open ((char *) XSTRING_DATA (upd->tty_name), O_RDWR, 0); } /* Send signal number SIGNO to PROCESS. @@ -1475,9 +1475,21 @@ unix_kill_child_process (Lisp_Object proc, int signo, ioctl TIOCGPGRP it is supposed to obsolete. Sometimes we have to use TIOCGPGRP on the master end, sometimes the slave end (probably an AIX bug). So we better get a fd for the slave if we - haven't got it yet. On some systems none of these work, so then - we just fall back to the non-current_group behavior and kill the - process group of the child. */ + haven't got it yet. + + Anal operating systems like SGI Irix and Compaq Tru64 adhere + strictly to the letter of the law, so our hack doesn't work. + The following fragment from an Irix header file is suggestive: + + #ifdef __notdef__ + // this is not currently supported + #define TIOCSIGNAL (tIOC|31) // pty: send signal to slave + #endif + + On those systems where none of our tricks work, we just fall back + to the non-current_group behavior and kill the process group of + the child. + */ if (current_group) { try_to_initialize_subtty (d); diff --git a/src/redisplay-msw.c b/src/redisplay-msw.c index ea34721..307fd6e 100644 --- a/src/redisplay-msw.c +++ b/src/redisplay-msw.c @@ -134,9 +134,9 @@ separate_textual_runs (unsigned char *text_storage, #ifdef MULE { Lisp_Object ccl_prog = XCHARSET_CCL_PROGRAM (charset); - need_ccl_conversion = !NILP (ccl_prog); - if (need_ccl_conversion) - setup_ccl_program (&char_converter, ccl_prog); + if ((!NILP (ccl_prog)) + && (setup_ccl_program (&char_converter, ccl_prog) >= 0)) + need_ccl_conversion = 1; } #endif } diff --git a/src/redisplay-tty.c b/src/redisplay-tty.c index 359f5e2..187cd47 100644 --- a/src/redisplay-tty.c +++ b/src/redisplay-tty.c @@ -924,6 +924,7 @@ tty_redisplay_shutdown (struct console *c) up or removed. */ +#ifdef NOT_YET /* FLAGS - these don't need to be console local since only one console can be being updated at a time. */ static int insert_mode_on; /* nonzero if in insert mode */ @@ -932,7 +933,6 @@ static int underline_mode_on; /* nonzero if in underline mode */ static int alternate_mode_on; /* nonzero if in alternate char set */ static int attributes_on; /* nonzero if any attributes on */ -#ifdef NOT_YET static void turn_on_insert (struct frame *f) { @@ -1218,6 +1218,7 @@ init_tty_for_redisplay (struct device *d, char *terminal_type) */ cm_cost_init (c); +#ifdef NOT_YET /* * Initialize local flags. */ @@ -1226,6 +1227,7 @@ init_tty_for_redisplay (struct device *d, char *terminal_type) underline_mode_on = 0; alternate_mode_on = 0; attributes_on = 0; +#endif /* * Attempt to initialize the function_key_map to diff --git a/src/regex.c b/src/regex.c index ef33687..9a145af 100644 --- a/src/regex.c +++ b/src/regex.c @@ -286,7 +286,7 @@ init_syntax_once (void) #include #else /* not __GNUC__ or HAVE_ALLOCA_H */ #ifndef _AIX /* Already did AIX, up at the top. */ -char *alloca (); +void *alloca (); #endif /* not _AIX */ #endif /* not HAVE_ALLOCA_H */ #endif /* not __GNUC__ */ diff --git a/src/scrollbar.c b/src/scrollbar.c index 37092a5..1baa76f 100644 --- a/src/scrollbar.c +++ b/src/scrollbar.c @@ -409,7 +409,7 @@ update_scrollbar_instance (struct window *w, int vertical, int new_minimum = -1, new_maximum = -1; int new_slider_size = -1, new_slider_position = -1; int new_width = -1, new_height = -1, new_x = -1, new_y = -1; - struct window *new_window = 0; /* kludge city */ + struct window *new_window = 0; /* #### currently unused */ end_pos = BUF_Z (b) - w->window_end_pos[CURRENT_DISP]; sb_pos = scrollbar_point (w, 0); @@ -953,7 +953,7 @@ This is a specifier; use `set-specifier' to change it. offsetof (struct window, scrollbar_width), vertical_scrollbar_changed_in_window, offsetof (struct frame, scrollbar_width), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("scrollbar-height", &Vscrollbar_height /* *Height of horizontal scrollbars. @@ -967,7 +967,7 @@ This is a specifier; use `set-specifier' to change it. offsetof (struct window, scrollbar_height), some_window_value_changed, offsetof (struct frame, scrollbar_height), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("horizontal-scrollbar-visible-p", &Vhorizontal_scrollbar_visible_p /* *Whether the horizontal scrollbar is visible. @@ -982,7 +982,7 @@ This is a specifier; use `set-specifier' to change it. some_window_value_changed, offsetof (struct frame, horizontal_scrollbar_visible_p), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("vertical-scrollbar-visible-p", &Vvertical_scrollbar_visible_p /* *Whether the vertical scrollbar is visible. @@ -997,7 +997,7 @@ This is a specifier; use `set-specifier' to change it. vertical_scrollbar_changed_in_window, offsetof (struct frame, vertical_scrollbar_visible_p), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("scrollbar-on-left-p", &Vscrollbar_on_left_p /* *Whether the vertical scrollbar is on the left side of window or frame. @@ -1023,7 +1023,7 @@ This is a specifier; use `set-specifier' to change it. offsetof (struct window, scrollbar_on_left_p), vertical_scrollbar_changed_in_window, offsetof (struct frame, scrollbar_on_left_p), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("scrollbar-on-top-p", &Vscrollbar_on_top_p /* *Whether the horizontal scrollbar is on the top side of window or frame. @@ -1036,7 +1036,7 @@ This is a specifier; use `set-specifier' to change it. offsetof (struct window, scrollbar_on_top_p), some_window_value_changed, offsetof (struct frame, scrollbar_on_top_p), - frame_size_slipped); + frame_size_slipped, 0); } void @@ -1047,5 +1047,5 @@ complex_vars_of_scrollbar (void) set_specifier_caching (XGLYPH (Vscrollbar_pointer_glyph)->image, offsetof (struct window, scrollbar_pointer), scrollbar_pointer_changed_in_window, - 0, 0); + 0, 0, 0); } diff --git a/src/search.c b/src/search.c index 7f92765..7738cde 100644 --- a/src/search.c +++ b/src/search.c @@ -932,7 +932,7 @@ skip_chars (struct buffer *buf, int forwardp, int syntaxp, } DEFUN ("skip-chars-forward", Fskip_chars_forward, 1, 3, 0, /* -Move point forward, stopping before a char not in STRING, or at pos LIM. +Move point forward, stopping before a char not in STRING, or at pos LIMIT. STRING is like the inside of a `[...]' in a regular expression except that `]' is never special and `\\' quotes `^', `-' or `\\'. Thus, with arg "a-zA-Z", this skips letters stopping before first nonletter. @@ -941,57 +941,57 @@ Returns the distance traveled, either zero or positive. Optional argument BUFFER defaults to the current buffer. */ - (string, lim, buffer)) + (string, limit, buffer)) { - return skip_chars (decode_buffer (buffer, 0), 1, 0, string, lim); + return skip_chars (decode_buffer (buffer, 0), 1, 0, string, limit); } DEFUN ("skip-chars-backward", Fskip_chars_backward, 1, 3, 0, /* -Move point backward, stopping after a char not in STRING, or at pos LIM. +Move point backward, stopping after a char not in STRING, or at pos LIMIT. See `skip-chars-forward' for details. Returns the distance traveled, either zero or negative. Optional argument BUFFER defaults to the current buffer. */ - (string, lim, buffer)) + (string, limit, buffer)) { - return skip_chars (decode_buffer (buffer, 0), 0, 0, string, lim); + return skip_chars (decode_buffer (buffer, 0), 0, 0, string, limit); } DEFUN ("skip-syntax-forward", Fskip_syntax_forward, 1, 3, 0, /* Move point forward across chars in specified syntax classes. SYNTAX is a string of syntax code characters. -Stop before a char whose syntax is not in SYNTAX, or at position LIM. +Stop before a char whose syntax is not in SYNTAX, or at position LIMIT. If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX. This function returns the distance traveled, either zero or positive. Optional argument BUFFER defaults to the current buffer. */ - (syntax, lim, buffer)) + (syntax, limit, buffer)) { - return skip_chars (decode_buffer (buffer, 0), 1, 1, syntax, lim); + return skip_chars (decode_buffer (buffer, 0), 1, 1, syntax, limit); } DEFUN ("skip-syntax-backward", Fskip_syntax_backward, 1, 3, 0, /* Move point backward across chars in specified syntax classes. SYNTAX is a string of syntax code characters. -Stop on reaching a char whose syntax is not in SYNTAX, or at position LIM. +Stop on reaching a char whose syntax is not in SYNTAX, or at position LIMIT. If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX. This function returns the distance traveled, either zero or negative. Optional argument BUFFER defaults to the current buffer. */ - (syntax, lim, buffer)) + (syntax, limit, buffer)) { - return skip_chars (decode_buffer (buffer, 0), 0, 1, syntax, lim); + return skip_chars (decode_buffer (buffer, 0), 0, 1, syntax, limit); } /* Subroutines of Lisp buffer search functions. */ static Lisp_Object -search_command (Lisp_Object string, Lisp_Object bound, Lisp_Object no_error, +search_command (Lisp_Object string, Lisp_Object limit, Lisp_Object noerror, Lisp_Object count, Lisp_Object buffer, int direction, int RE, int posix) { @@ -1009,14 +1009,14 @@ search_command (Lisp_Object string, Lisp_Object bound, Lisp_Object no_error, buf = decode_buffer (buffer, 0); CHECK_STRING (string); - if (NILP (bound)) + if (NILP (limit)) lim = n > 0 ? BUF_ZV (buf) : BUF_BEGV (buf); else { - CHECK_INT_COERCE_MARKER (bound); - lim = XINT (bound); + CHECK_INT_COERCE_MARKER (limit); + lim = XINT (limit); if (n > 0 ? lim < BUF_PT (buf) : lim > BUF_PT (buf)) - error ("Invalid search bound (wrong side of point)"); + error ("Invalid search limit (wrong side of point)"); if (lim > BUF_ZV (buf)) lim = BUF_ZV (buf); if (lim < BUF_BEGV (buf)) @@ -1033,9 +1033,9 @@ search_command (Lisp_Object string, Lisp_Object bound, Lisp_Object no_error, if (np <= 0) { - if (NILP (no_error)) + if (NILP (noerror)) return signal_failure (string); - if (!EQ (no_error, Qt)) + if (!EQ (noerror, Qt)) { if (lim < BUF_BEGV (buf) || lim > BUF_ZV (buf)) abort (); @@ -1645,70 +1645,103 @@ wordify (Lisp_Object buffer, Lisp_Object string) DEFUN ("search-backward", Fsearch_backward, 1, 5, "sSearch backward: ", /* Search backward from point for STRING. Set point to the beginning of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend before that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, position at limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend before that position. +The value nil is equivalent to (point-min). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (string, bound, no_error, count, buffer)) + (string, limit, noerror, count, buffer)) { - return search_command (string, bound, no_error, count, buffer, -1, 0, 0); + return search_command (string, limit, noerror, count, buffer, -1, 0, 0); } DEFUN ("search-forward", Fsearch_forward, 1, 5, "sSearch: ", /* Search forward from point for STRING. Set point to the end of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. nil is equivalent - to (point-max). -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend after that position. The +value nil is equivalent to (point-max). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (string, bound, no_error, count, buffer)) + (string, limit, noerror, count, buffer)) { - return search_command (string, bound, no_error, count, buffer, 1, 0, 0); + return search_command (string, limit, noerror, count, buffer, 1, 0, 0); } DEFUN ("word-search-backward", Fword_search_backward, 1, 5, "sWord search backward: ", /* Search backward from point for STRING, ignoring differences in punctuation. Set point to the beginning of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend before that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend before that position. +The value nil is equivalent to (point-min). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + +See also the functions `match-beginning', `match-end' and `replace-match'. */ - (string, bound, no_error, count, buffer)) + (string, limit, noerror, count, buffer)) { - return search_command (wordify (buffer, string), bound, no_error, count, + return search_command (wordify (buffer, string), limit, noerror, count, buffer, -1, 1, 0); } DEFUN ("word-search-forward", Fword_search_forward, 1, 5, "sWord search: ", /* Search forward from point for STRING, ignoring differences in punctuation. Set point to the end of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend after that position. The +value nil is equivalent to (point-max). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + +See also the functions `match-beginning', `match-end' and `replace-match'. */ - (string, bound, no_error, count, buffer)) + (string, limit, noerror, count, buffer)) { - return search_command (wordify (buffer, string), bound, no_error, count, + return search_command (wordify (buffer, string), limit, noerror, count, buffer, 1, 1, 0); } @@ -1718,35 +1751,51 @@ Search backward from point for match for regular expression REGEXP. Set point to the beginning of the match, and return point. The match found is the one starting last in the buffer and yet ending before the origin of the search. -An optional second argument bounds the search; it is a buffer position. -The match found must start at or after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend before that position. +The value nil is equivalent to (point-min). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (regexp, bound, no_error, count, buffer)) + (regexp, limit, noerror, count, buffer)) { - return search_command (regexp, bound, no_error, count, buffer, -1, 1, 0); + return search_command (regexp, limit, noerror, count, buffer, -1, 1, 0); } DEFUN ("re-search-forward", Fre_search_forward, 1, 5, "sRE search: ", /* Search forward from point for regular expression REGEXP. Set point to the end of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend after that position. The +value nil is equivalent to (point-max). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (regexp, bound, no_error, count, buffer)) + (regexp, limit, noerror, count, buffer)) { - return search_command (regexp, bound, no_error, count, buffer, 1, 1, 0); + return search_command (regexp, limit, noerror, count, buffer, 1, 1, 0); } DEFUN ("posix-search-backward", Fposix_search_backward, 1, 5, @@ -1756,36 +1805,52 @@ Find the longest match in accord with Posix regular expression rules. Set point to the beginning of the match, and return point. The match found is the one starting last in the buffer and yet ending before the origin of the search. -An optional second argument bounds the search; it is a buffer position. -The match found must start at or after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend before that position. +The value nil is equivalent to (point-min). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (regexp, bound, no_error, count, buffer)) + (regexp, limit, noerror, count, buffer)) { - return search_command (regexp, bound, no_error, count, buffer, -1, 1, 1); + return search_command (regexp, limit, noerror, count, buffer, -1, 1, 1); } DEFUN ("posix-search-forward", Fposix_search_forward, 1, 5, "sPosix search: ", /* Search forward from point for regular expression REGEXP. Find the longest match in accord with Posix regular expression rules. Set point to the end of the occurrence found, and return point. -An optional second argument bounds the search; it is a buffer position. -The match found must not extend after that position. -Optional third argument, if t, means if fail just return nil (no error). - If not nil and not t, move to limit of search and return nil. -Optional fourth argument is repeat count--search for successive occurrences. + +Optional second argument LIMIT bounds the search; it is a buffer +position. The match found must not extend after that position. The +value nil is equivalent to (point-max). + +Optional third argument NOERROR, if t, means just return nil (no +error) if the search fails. If neither nil nor t, set point to LIMIT +and return nil. + +Optional fourth argument COUNT is a repeat count--search for +successive occurrences. + Optional fifth argument BUFFER specifies the buffer to search in and - defaults to the current buffer. +defaults to the current buffer. + See also the functions `match-beginning', `match-end' and `replace-match'. */ - (regexp, bound, no_error, count, buffer)) + (regexp, limit, noerror, count, buffer)) { - return search_command (regexp, bound, no_error, count, buffer, 1, 1, 1); + return search_command (regexp, limit, noerror, count, buffer, 1, 1, 1); } @@ -1801,18 +1866,18 @@ free_created_dynarrs (Lisp_Object cons) } DEFUN ("replace-match", Freplace_match, 1, 5, 0, /* -Replace text matched by last search with NEWTEXT. +Replace text matched by last search with REPLACEMENT. If second arg FIXEDCASE is non-nil, do not alter case of replacement text. Otherwise maybe capitalize the whole text, or maybe just word initials, based on the replaced text. If the replaced text has only capital letters -and has at least one multiletter word, convert NEWTEXT to all caps. +and has at least one multiletter word, convert REPLACEMENT to all caps. If the replaced text has at least one word starting with a capital letter, -then capitalize each word in NEWTEXT. +then capitalize each word in REPLACEMENT. -If third arg LITERAL is non-nil, insert NEWTEXT literally. +If third arg LITERAL is non-nil, insert REPLACEMENT literally. Otherwise treat `\\' as special: - `\\&' in NEWTEXT means substitute original matched text. + `\\&' in REPLACEMENT means substitute original matched text. `\\N' means substitute what matched the Nth `\\(...\\)'. If Nth parens didn't match, substitute nothing. `\\\\' means insert one `\\'. @@ -1831,11 +1896,11 @@ In that case, this function creates and returns a new string which is made by replacing the part of STRING that was matched. When fourth argument is a string, fifth argument STRBUFFER specifies the buffer to be used for syntax-table and case-table lookup and -defaults to the current buffer. (When fourth argument is not a string, +defaults to the current buffer. When fourth argument is not a string, the buffer that the match occurred in has automatically been remembered -and you do not need to specify it.) +and you do not need to specify it. */ - (newtext, fixedcase, literal, string, strbuffer)) + (replacement, fixedcase, literal, string, strbuffer)) { /* This function has been Mule-ized. */ /* This function can GC */ @@ -1855,7 +1920,7 @@ and you do not need to specify it.) int_dynarr *ul_pos_dynarr = 0; int speccount; - CHECK_STRING (newtext); + CHECK_STRING (replacement); if (! NILP (string)) { @@ -1979,10 +2044,10 @@ and you do not need to specify it.) before = Fsubstring (string, Qzero, make_int (search_regs.start[0])); after = Fsubstring (string, make_int (search_regs.end[0]), Qnil); - /* Do case substitution into NEWTEXT if desired. */ + /* Do case substitution into REPLACEMENT if desired. */ if (NILP (literal)) { - Charcount stlen = XSTRING_CHAR_LENGTH (newtext); + Charcount stlen = XSTRING_CHAR_LENGTH (replacement); Charcount strpos; /* XEmacs change: rewrote this loop somewhat to make it cleaner. Also added \U, \E, etc. */ @@ -2009,10 +2074,10 @@ and you do not need to specify it.) Charcount substart = -1; Charcount subend = -1; - c = string_char (XSTRING (newtext), strpos); + c = string_char (XSTRING (replacement), strpos); if (c == '\\' && strpos < stlen - 1) { - c = string_char (XSTRING (newtext), ++strpos); + c = string_char (XSTRING (replacement), ++strpos); if (c == '&') { literal_end = strpos - 1; @@ -2061,7 +2126,7 @@ and you do not need to specify it.) Lisp_Object literal_text = Qnil; Lisp_Object substring = Qnil; if (literal_end != literal_start) - literal_text = Fsubstring (newtext, + literal_text = Fsubstring (replacement, make_int (literal_start), make_int (literal_end)); if (substart >= 0 && subend != substart) @@ -2076,29 +2141,33 @@ and you do not need to specify it.) if (strpos != literal_start) /* some literal text at end to be inserted */ - newtext = concat2 (accum, Fsubstring (newtext, - make_int (literal_start), - make_int (strpos))); + replacement = concat2 (accum, Fsubstring (replacement, + make_int (literal_start), + make_int (strpos))); else - newtext = accum; + replacement = accum; } + /* replacement can be nil. */ + if (NILP (replacement)) + replacement = build_string (""); + if (case_action == all_caps) - newtext = Fupcase (newtext, buffer); + replacement = Fupcase (replacement, buffer); else if (case_action == cap_initial) - newtext = Fupcase_initials (newtext, buffer); + replacement = Fupcase_initials (replacement, buffer); /* Now finally, we need to process the \U's, \E's, etc. */ if (ul_pos_dynarr) { int i = 0; int cur_action = 'E'; - Charcount stlen = XSTRING_CHAR_LENGTH (newtext); + Charcount stlen = XSTRING_CHAR_LENGTH (replacement); Charcount strpos; for (strpos = 0; strpos < stlen; strpos++) { - Emchar curchar = string_char (XSTRING (newtext), strpos); + Emchar curchar = string_char (XSTRING (replacement), strpos); Emchar newchar = -1; if (i < Dynarr_length (ul_pos_dynarr) && strpos == Dynarr_at (ul_pos_dynarr, i)) @@ -2122,13 +2191,13 @@ and you do not need to specify it.) newchar = curchar; } if (newchar != curchar) - set_string_char (XSTRING (newtext), strpos, newchar); + set_string_char (XSTRING (replacement), strpos, newchar); } } /* frees the Dynarrs if necessary. */ unbind_to (speccount, Qnil); - return concat3 (before, newtext, after); + return concat3 (before, replacement, after); } mc_count = begin_multiple_change (buf, search_regs.start[0], @@ -2144,21 +2213,21 @@ and you do not need to specify it.) position in the replacement. */ BUF_SET_PT (buf, search_regs.start[0]); if (!NILP (literal)) - Finsert (1, &newtext); + Finsert (1, &replacement); else { - Charcount stlen = XSTRING_CHAR_LENGTH (newtext); + Charcount stlen = XSTRING_CHAR_LENGTH (replacement); Charcount strpos; struct gcpro gcpro1; - GCPRO1 (newtext); + GCPRO1 (replacement); for (strpos = 0; strpos < stlen; strpos++) { Charcount offset = BUF_PT (buf) - search_regs.start[0]; - c = string_char (XSTRING (newtext), strpos); + c = string_char (XSTRING (replacement), strpos); if (c == '\\' && strpos < stlen - 1) { - c = string_char (XSTRING (newtext), ++strpos); + c = string_char (XSTRING (replacement), ++strpos); if (c == '&') Finsert_buffer_substring (buffer, @@ -2498,19 +2567,19 @@ restore_match_data (void) DEFUN ("regexp-quote", Fregexp_quote, 1, 1, 0, /* Return a regexp string which matches exactly STRING and nothing else. */ - (str)) + (string)) { REGISTER Bufbyte *in, *out, *end; REGISTER Bufbyte *temp; - CHECK_STRING (str); + CHECK_STRING (string); - temp = (Bufbyte *) alloca (XSTRING_LENGTH (str) * 2); + temp = (Bufbyte *) alloca (XSTRING_LENGTH (string) * 2); /* Now copy the data into the new string, inserting escapes. */ - in = XSTRING_DATA (str); - end = in + XSTRING_LENGTH (str); + in = XSTRING_DATA (string); + end = in + XSTRING_LENGTH (string); out = temp; while (in < end) diff --git a/src/select.c b/src/select.c index 6c1076d..add109b 100644 --- a/src/select.c +++ b/src/select.c @@ -134,13 +134,16 @@ get_local_selection (Lisp_Object selection_symbol, Lisp_Object target_type) #endif DEFUN ("own-selection-internal", Fown_selection_internal, 2, 5, 0, /* -Assert a selection of the given NAME with the given VALUE, and -optional window-system DATA-TYPE. HOW-TO-ADD specifies how the -selection will be combined with any existing selection(s) - see -`own-selection' for more information. -NAME is a symbol, typically PRIMARY, SECONDARY, or CLIPBOARD. -VALUE is typically a string, or a cons of two markers, but may be +Give the selection SELECTION-NAME the value SELECTION-VALUE. +SELECTION-NAME is a symbol, typically PRIMARY, SECONDARY, or CLIPBOARD. +SELECTION-VALUE is typically a string, or a cons of two markers, but may be anything that the functions on selection-converter-out-alist know about. +Optional arg HOW-TO-ADD specifies how the selection will be combined +with any existing selection(s) - see `own-selection' for more +information. +Optional arg DATA-TYPE is a window-system-specific type. +Optional arg DEVICE specifies the device on which to assert the selection. +It defaults to the selected device. */ (selection_name, selection_value, how_to_add, data_type, device)) { @@ -441,8 +444,8 @@ If we own the named selection, then disown it (make there be no selection). } DEFUN ("selection-owner-p", Fselection_owner_p, 0, 1, 0, /* -Return t if current emacs process owns the given Selection. -The arg should be the name of the selection in question, typically one of +Return t if the current emacs process owns SELECTION. +SELECTION should be the name of the selection in question, typically one of the symbols PRIMARY, SECONDARY, or CLIPBOARD. (For convenience, the symbol nil is the same as PRIMARY, and t is the same as SECONDARY.) */ @@ -456,11 +459,11 @@ nil is the same as PRIMARY, and t is the same as SECONDARY.) } DEFUN ("selection-exists-p", Fselection_exists_p, 0, 3, 0, /* -Whether there is an owner for the given Selection. -The arg should be the name of the selection in question, typically one of +Whether there is currently an owner for SELECTION. +SELECTION should be the name of the selection in question, typically one of the symbols PRIMARY, SECONDARY, or CLIPBOARD. (For convenience, the symbol nil is the same as PRIMARY, and t is the same as SECONDARY.) -Optionally the DEVICE and the window-system DATA-TYPE may be specified. +Optionally, the window-system DATA-TYPE and the DEVICE may be specified. */ (selection, data_type, device)) { @@ -499,18 +502,18 @@ visible from Lisp. */ DEFUN ("get-selection-internal", Fget_selection_internal, 2, 3, 0, /* Return text selected from some window-system window. -SELECTION_SYMBOL is a symbol, typically PRIMARY, SECONDARY, or CLIPBOARD. -TARGET_TYPE is the type of data desired, typically STRING or COMPOUND_TEXT. +SELECTION is a symbol, typically PRIMARY, SECONDARY, or CLIPBOARD. +TARGET-TYPE is the type of data desired, typically STRING or COMPOUND_TEXT. Under Mule, if the resultant data comes back as 8-bit data in type TEXT or COMPOUND_TEXT, it will be decoded as Compound Text. */ - (selection_symbol, target_type, device)) + (selection, target_type, device)) { /* This function can GC */ Lisp_Object val = Qnil; struct gcpro gcpro1, gcpro2; GCPRO2 (target_type, val); - CHECK_SYMBOL (selection_symbol); + CHECK_SYMBOL (selection); if (NILP (device)) device = Fselected_device (Qnil); @@ -538,19 +541,19 @@ TEXT or COMPOUND_TEXT, it will be decoded as Compound Text. the device (in which case target_type would be a device-specific identifier - probably an integer) - ajh */ - val = get_local_selection (selection_symbol, target_type); + val = get_local_selection (selection, target_type); if (!NILP (val)) { /* If we get something from the local cache, we may need to convert it slightly - to do this, we call select-coerce */ - val = call3 (Qselect_coerce, selection_symbol, target_type, val); + val = call3 (Qselect_coerce, selection, target_type, val); } else if (HAS_DEVMETH_P (XDEVICE (device), get_foreign_selection)) { /* Nothing in the local cache; try the window system */ val = DEVMETH (XDEVICE (device), get_foreign_selection, - (selection_symbol, target_type)); + (selection, target_type)); } if (NILP (val)) @@ -562,12 +565,12 @@ TEXT or COMPOUND_TEXT, it will be decoded as Compound Text. the first for which a conversion succeeds gets returned. */ EXTERNAL_LIST_LOOP_2 (element, Vselection_coercible_types) { - val = get_local_selection (selection_symbol, element); + val = get_local_selection (selection, element); if (NILP (val)) continue; - val = call3 (Qselect_coerce, selection_symbol, target_type, val); + val = call3 (Qselect_coerce, selection, target_type, val); if (!NILP (val)) break; diff --git a/src/syntax.c b/src/syntax.c index 8daf22c..eae9c11 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -156,12 +156,13 @@ find_defun_start (struct buffer *buf, Bufpos pos) } DEFUN ("syntax-table-p", Fsyntax_table_p, 1, 1, 0, /* -Return t if ARG is a syntax table. +Return t if OBJECT is a syntax table. Any vector of 256 elements will do. */ - (obj)) + (object)) { - return CHAR_TABLEP (obj) && XCHAR_TABLE_TYPE (obj) == CHAR_TABLE_TYPE_SYNTAX + return (CHAR_TABLEP (object) + && XCHAR_TABLE_TYPE (object) == CHAR_TABLE_TYPE_SYNTAX) ? Qt : Qnil; } @@ -195,32 +196,31 @@ This is the one used for new buffers. } DEFUN ("copy-syntax-table", Fcopy_syntax_table, 0, 1, 0, /* -Construct a new syntax table and return it. -It is a copy of the TABLE, which defaults to the standard syntax table. +Return a new syntax table which is a copy of SYNTAX-TABLE. +SYNTAX-TABLE defaults to the standard syntax table. */ - (table)) + (syntax_table)) { if (NILP (Vstandard_syntax_table)) return Fmake_char_table (Qsyntax); - table = check_syntax_table (table, Vstandard_syntax_table); - return Fcopy_char_table (table); + syntax_table = check_syntax_table (syntax_table, Vstandard_syntax_table); + return Fcopy_char_table (syntax_table); } DEFUN ("set-syntax-table", Fset_syntax_table, 1, 2, 0, /* -Select a new syntax table for BUFFER. -One argument, a syntax table. +Select SYNTAX-TABLE as the new syntax table for BUFFER. BUFFER defaults to the current buffer if omitted. */ - (table, buffer)) + (syntax_table, buffer)) { struct buffer *buf = decode_buffer (buffer, 0); - table = check_syntax_table (table, Qnil); - buf->syntax_table = table; - buf->mirror_syntax_table = XCHAR_TABLE (table)->mirror_table; + syntax_table = check_syntax_table (syntax_table, Qnil); + buf->syntax_table = syntax_table; + buf->mirror_syntax_table = XCHAR_TABLE (syntax_table)->mirror_table; /* Indicate that this buffer now has a specified syntax table. */ buf->local_var_flags |= XINT (buffer_local_flags.syntax_table); - return table; + return syntax_table; } /* Convert a letter which signifies a syntax code @@ -262,25 +262,26 @@ numbered starting at 0. } DEFUN ("char-syntax", Fchar_syntax, 1, 2, 0, /* -Return the syntax code of CHAR, described by a character. -For example, if CHAR is a word constituent, the character `?w' is returned. +Return the syntax code of CHARACTER, described by a character. +For example, if CHARACTER is a word constituent, +the character `?w' is returned. The characters that correspond to various syntax codes are listed in the documentation of `modify-syntax-entry'. -Optional second argument TABLE defaults to the current buffer's +Optional second argument SYNTAX-TABLE defaults to the current buffer's syntax table. */ - (ch, table)) + (character, syntax_table)) { Lisp_Char_Table *mirrortab; - if (NILP(ch)) + if (NILP (character)) { - ch = make_char('\000'); + character = make_char ('\000'); } - CHECK_CHAR_COERCE_INT (ch); - table = check_syntax_table (table, current_buffer->syntax_table); - mirrortab = XCHAR_TABLE (XCHAR_TABLE (table)->mirror_table); - return make_char (syntax_code_spec[(int) SYNTAX (mirrortab, XCHAR (ch))]); + CHECK_CHAR_COERCE_INT (character); + syntax_table = check_syntax_table (syntax_table, current_buffer->syntax_table); + mirrortab = XCHAR_TABLE (XCHAR_TABLE (syntax_table)->mirror_table); + return make_char (syntax_code_spec[(int) SYNTAX (mirrortab, XCHAR (character))]); } #ifdef MULE @@ -296,9 +297,9 @@ charset_syntax (struct buffer *buf, Lisp_Object charset, int *multi_p_out) #endif Lisp_Object -syntax_match (Lisp_Object table, Emchar ch) +syntax_match (Lisp_Object syntax_table, Emchar ch) { - Lisp_Object code = XCHAR_TABLE_VALUE_UNSAFE (table, ch); + Lisp_Object code = XCHAR_TABLE_VALUE_UNSAFE (syntax_table, ch); Lisp_Object code2 = code; if (CONSP (code)) @@ -310,21 +311,21 @@ syntax_match (Lisp_Object table, Emchar ch) } DEFUN ("matching-paren", Fmatching_paren, 1, 2, 0, /* -Return the matching parenthesis of CHAR, or nil if none. -Optional second argument TABLE defaults to the current buffer's +Return the matching parenthesis of CHARACTER, or nil if none. +Optional second argument SYNTAX-TABLE defaults to the current buffer's syntax table. */ - (ch, table)) + (character, syntax_table)) { Lisp_Char_Table *mirrortab; int code; - CHECK_CHAR_COERCE_INT (ch); - table = check_syntax_table (table, current_buffer->syntax_table); - mirrortab = XCHAR_TABLE (XCHAR_TABLE (table)->mirror_table); - code = SYNTAX (mirrortab, XCHAR (ch)); + CHECK_CHAR_COERCE_INT (character); + syntax_table = check_syntax_table (syntax_table, current_buffer->syntax_table); + mirrortab = XCHAR_TABLE (XCHAR_TABLE (syntax_table)->mirror_table); + code = SYNTAX (mirrortab, XCHAR (character)); if (code == Sopen || code == Sclose || code == Sstring) - return syntax_match (table, XCHAR (ch)); + return syntax_match (syntax_table, XCHAR (character)); return Qnil; } @@ -648,30 +649,30 @@ find_end_of_comment (struct buffer *buf, Bufpos from, Bufpos stop, int mask) at those changes. --ben */ DEFUN ("forward-comment", Fforward_comment, 1, 2, 0, /* -Move forward across up to N comments. If N is negative, move backward. +Move forward across up to COUNT comments, or backwards if COUNT is negative. Stop scanning if we find something other than a comment or whitespace. Set point to where scanning stops. -If N comments are found as expected, with nothing except whitespace +If COUNT comments are found as expected, with nothing except whitespace between them, return t; otherwise return nil. Point is set in either case. Optional argument BUFFER defaults to the current buffer. */ - (n, buffer)) + (count, buffer)) { Bufpos from; Bufpos stop; Emchar c; enum syntaxcode code; - EMACS_INT count; + EMACS_INT n; struct buffer *buf = decode_buffer (buffer, 0); Lisp_Char_Table *mirrortab = XCHAR_TABLE (buf->mirror_syntax_table); - CHECK_INT (n); - count = XINT (n); + CHECK_INT (count); + n = XINT (count); from = BUF_PT (buf); - while (count > 0) + while (n > 0) { QUIT; @@ -740,10 +741,10 @@ Optional argument BUFFER defaults to the current buffer. } /* End of comment reached */ - count--; + n--; } - while (count < 0) + while (n < 0) { QUIT; @@ -799,7 +800,7 @@ Optional argument BUFFER defaults to the current buffer. } } - count++; + n++; } BUF_SET_PT (buf, from); @@ -809,7 +810,7 @@ Optional argument BUFFER defaults to the current buffer. Lisp_Object scan_lists (struct buffer *buf, Bufpos from, int count, int depth, - int sexpflag, int no_error) + int sexpflag, int noerror) { Bufpos stop; Emchar c; @@ -929,7 +930,7 @@ scan_lists (struct buffer *buf, Bufpos from, int count, int depth, if (!--depth) goto done; if (depth < min_depth) { - if (no_error) + if (noerror) return Qnil; error ("Containing expression ends prematurely"); } @@ -1074,7 +1075,7 @@ scan_lists (struct buffer *buf, Bufpos from, int count, int depth, if (!--depth) goto done2; if (depth < min_depth) { - if (no_error) + if (noerror) return Qnil; error ("Containing expression ends prematurely"); } @@ -1126,7 +1127,7 @@ scan_lists (struct buffer *buf, Bufpos from, int count, int depth, return (make_int (from)); lose: - if (!no_error) + if (!noerror) error ("Unbalanced parentheses"); return Qnil; } @@ -1168,7 +1169,7 @@ of in the current buffer. If optional arg NOERROR is non-nil, scan-lists will return nil instead of signalling an error. */ - (from, count, depth, buffer, no_error)) + (from, count, depth, buffer, noerror)) { struct buffer *buf; @@ -1178,7 +1179,7 @@ signalling an error. buf = decode_buffer (buffer, 0); return scan_lists (buf, XINT (from), XINT (count), XINT (depth), 0, - !NILP (no_error)); + !NILP (noerror)); } DEFUN ("scan-sexps", Fscan_sexps, 2, 4, 0, /* @@ -1199,13 +1200,13 @@ of in the current buffer. If optional arg NOERROR is non-nil, scan-sexps will return nil instead of signalling an error. */ - (from, count, buffer, no_error)) + (from, count, buffer, noerror)) { struct buffer *buf = decode_buffer (buffer, 0); CHECK_INT (from); CHECK_INT (count); - return scan_lists (buf, XINT (from), XINT (count), 0, 1, !NILP (no_error)); + return scan_lists (buf, XINT (from), XINT (count), 0, 1, !NILP (noerror)); } DEFUN ("backward-prefix-chars", Fbackward_prefix_chars, 0, 1, 0, /* @@ -1508,7 +1509,7 @@ DEFUN ("parse-partial-sexp", Fparse_partial_sexp, 2, 7, 0, /* Parse Lisp syntax starting at FROM until TO; return status of parse at TO. Parsing stops at TO or when certain criteria are met; point is set to where parsing stops. -If fifth arg STATE is omitted or nil, +If fifth arg OLDSTATE is omitted or nil, parsing assumes that FROM is the beginning of a function. Value is a list of eight elements describing final state of parsing: 0. depth in parens. @@ -1524,7 +1525,7 @@ If third arg TARGETDEPTH is non-nil, parsing stops if the depth in parentheses becomes equal to TARGETDEPTH. Fourth arg STOPBEFORE non-nil means stop when come to any character that starts a sexp. -Fifth arg STATE is an eight-element list like what this function returns. +Fifth arg OLDSTATE is an eight-element list like what this function returns. It is used to initialize the state of the parse. Its second and third elements are ignored. Sixth arg COMMENTSTOP non-nil means stop at the start of a comment. diff --git a/src/sysdep.c b/src/sysdep.c index afd72cf..1ac4834 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -3031,7 +3031,7 @@ sys_readdir (DIR *dirp) Qfile_name); Dynarr_add_many (internal_DIRENTRY, internal_name, internal_len); - Dynarr_add (internal_DIRENTRY, 0); /* zero-terminate */ + Dynarr_add (internal_DIRENTRY, '\0'); /* NUL-terminate */ return (DIRENTRY *) Dynarr_atp (internal_DIRENTRY, 0); } } diff --git a/src/toolbar.c b/src/toolbar.c index 573241a..9d20a82 100644 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -990,11 +990,11 @@ Verify the syntax of entry BUTTON in a toolbar description list. If you want to verify the syntax of a toolbar description list as a whole, use `check-valid-instantiator' with a specifier type of 'toolbar. */ - (button, no_error)) + (button, noerror)) { Lisp_Object *elt, glyphs, value; int len; - Error_behavior errb = decode_error_behavior_flag (no_error); + Error_behavior errb = decode_error_behavior_flag (noerror); if (!VECTORP (button)) CTB_ERROR ("toolbar button descriptors must be vectors"); @@ -1417,7 +1417,7 @@ For the other vector formats (specifying blank areas of the toolbar): set_specifier_caching (Vdefault_toolbar, offsetof (struct window, default_toolbar), default_toolbar_specs_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("top-toolbar", &Vtoolbar[TOP_TOOLBAR] /* @@ -1429,7 +1429,7 @@ See `default-toolbar' for a description of a valid toolbar instantiator. set_specifier_caching (Vtoolbar[TOP_TOOLBAR], offsetof (struct window, toolbar[TOP_TOOLBAR]), toolbar_specs_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("bottom-toolbar", &Vtoolbar[BOTTOM_TOOLBAR] /* @@ -1446,7 +1446,7 @@ displayed even if you provide a value for `bottom-toolbar'. set_specifier_caching (Vtoolbar[BOTTOM_TOOLBAR], offsetof (struct window, toolbar[BOTTOM_TOOLBAR]), toolbar_specs_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("left-toolbar", &Vtoolbar[LEFT_TOOLBAR] /* @@ -1463,7 +1463,7 @@ displayed even if you provide a value for `left-toolbar'. set_specifier_caching (Vtoolbar[LEFT_TOOLBAR], offsetof (struct window, toolbar[LEFT_TOOLBAR]), toolbar_specs_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("right-toolbar", &Vtoolbar[RIGHT_TOOLBAR] /* @@ -1480,7 +1480,7 @@ displayed even if you provide a value for `right-toolbar'. set_specifier_caching (Vtoolbar[RIGHT_TOOLBAR], offsetof (struct window, toolbar[RIGHT_TOOLBAR]), toolbar_specs_changed, - 0, 0); + 0, 0, 0); /* initially, top inherits from default; this can be changed with `set-default-toolbar-position'. */ @@ -1535,7 +1535,7 @@ is not visible, so it is expanded to take up the slack. offsetof (struct window, default_toolbar_height), default_toolbar_size_changed_in_window, offsetof (struct frame, default_toolbar_height), - default_toolbar_size_changed_in_frame); + default_toolbar_size_changed_in_frame, 0); DEFVAR_SPECIFIER ("default-toolbar-width", &Vdefault_toolbar_width /* *Width of the default toolbar, if it's oriented vertically. @@ -1548,7 +1548,7 @@ See `default-toolbar-height' for more information. offsetof (struct window, default_toolbar_width), default_toolbar_size_changed_in_window, offsetof (struct frame, default_toolbar_width), - default_toolbar_size_changed_in_frame); + default_toolbar_size_changed_in_frame, 0); DEFVAR_SPECIFIER ("top-toolbar-height", &Vtoolbar_size[TOP_TOOLBAR] /* @@ -1562,7 +1562,7 @@ See `default-toolbar-height' for more information. offsetof (struct window, toolbar_size[TOP_TOOLBAR]), toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_size[TOP_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("bottom-toolbar-height", &Vtoolbar_size[BOTTOM_TOOLBAR] /* @@ -1576,7 +1576,7 @@ See `default-toolbar-height' for more information. offsetof (struct window, toolbar_size[BOTTOM_TOOLBAR]), toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_size[BOTTOM_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("left-toolbar-width", &Vtoolbar_size[LEFT_TOOLBAR] /* @@ -1590,7 +1590,7 @@ See `default-toolbar-height' for more information. offsetof (struct window, toolbar_size[LEFT_TOOLBAR]), toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_size[LEFT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("right-toolbar-width", &Vtoolbar_size[RIGHT_TOOLBAR] /* @@ -1604,7 +1604,7 @@ See `default-toolbar-height' for more information. offsetof (struct window, toolbar_size[RIGHT_TOOLBAR]), toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_size[RIGHT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); fb = Qnil; #ifdef HAVE_TTY @@ -1667,7 +1667,7 @@ the value in a window domain will not. offsetof (struct window, default_toolbar_border_width), default_toolbar_border_width_changed_in_window, offsetof (struct frame, default_toolbar_border_width), - default_toolbar_border_width_changed_in_frame); + default_toolbar_border_width_changed_in_frame, 0); DEFVAR_SPECIFIER ("top-toolbar-border-width", &Vtoolbar_border_width[TOP_TOOLBAR] /* @@ -1683,7 +1683,7 @@ See `default-toolbar-height' for more information. toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_border_width[TOP_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("bottom-toolbar-border-width", &Vtoolbar_border_width[BOTTOM_TOOLBAR] /* @@ -1699,7 +1699,7 @@ See `default-toolbar-height' for more information. toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_border_width[BOTTOM_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("left-toolbar-border-width", &Vtoolbar_border_width[LEFT_TOOLBAR] /* @@ -1715,7 +1715,7 @@ See `default-toolbar-height' for more information. toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_border_width[LEFT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("right-toolbar-border-width", &Vtoolbar_border_width[RIGHT_TOOLBAR] /* @@ -1731,7 +1731,7 @@ See `default-toolbar-height' for more information. toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_border_width[RIGHT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); fb = Qnil; #ifdef HAVE_TTY @@ -1777,7 +1777,7 @@ visibility specifiers have a fallback value of true. offsetof (struct window, default_toolbar_visible_p), default_toolbar_visible_p_changed_in_window, offsetof (struct frame, default_toolbar_visible_p), - default_toolbar_visible_p_changed_in_frame); + default_toolbar_visible_p_changed_in_frame, 0); DEFVAR_SPECIFIER ("top-toolbar-visible-p", &Vtoolbar_visible_p[TOP_TOOLBAR] /* @@ -1793,7 +1793,7 @@ See `default-toolbar-visible-p' for more information. toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_visible_p[TOP_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("bottom-toolbar-visible-p", &Vtoolbar_visible_p[BOTTOM_TOOLBAR] /* @@ -1809,7 +1809,7 @@ See `default-toolbar-visible-p' for more information. toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_visible_p[BOTTOM_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("left-toolbar-visible-p", &Vtoolbar_visible_p[LEFT_TOOLBAR] /* @@ -1825,7 +1825,7 @@ See `default-toolbar-visible-p' for more information. toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_visible_p[LEFT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); DEFVAR_SPECIFIER ("right-toolbar-visible-p", &Vtoolbar_visible_p[RIGHT_TOOLBAR] /* @@ -1841,7 +1841,7 @@ See `default-toolbar-visible-p' for more information. toolbar_geometry_changed_in_window, offsetof (struct frame, toolbar_visible_p[RIGHT_TOOLBAR]), - frame_size_slipped); + frame_size_slipped, 0); /* initially, top inherits from default; this can be changed with `set-default-toolbar-position'. */ @@ -1864,7 +1864,7 @@ This is a specifier; use `set-specifier' to change it. set_specifier_caching (Vtoolbar_buttons_captioned_p, offsetof (struct window, toolbar_buttons_captioned_p), toolbar_buttons_captioned_p_changed, - 0, 0); + 0, 0, 0); set_specifier_fallback (Vtoolbar_buttons_captioned_p, list1 (Fcons (Qnil, Qt))); } diff --git a/src/tooltalk.doc b/src/tooltalk.doc index 247bb8d..d752e66 100644 --- a/src/tooltalk.doc +++ b/src/tooltalk.doc @@ -275,7 +275,7 @@ Emacs will stop receiving messages that match this pattern. Add one value to the indicated pattern attribute. The names of attributes are the same as the Tooltalk accessors used to set them less the "tooltalk_pattern_" prefix and the "_add" suffix). For example -the name of the attribute for tt_pattern_dispostion_add attribute +the name of the attribute for tt_pattern_disposition_add attribute is 'disposition. The 'category attribute is handled specially, since a pattern can only be a member of one category (TT_OBSERVE or TT_HANDLE. diff --git a/src/unexcw.c b/src/unexcw.c index 7f9b551..a39fbc2 100644 --- a/src/unexcw.c +++ b/src/unexcw.c @@ -51,6 +51,9 @@ unexec (char *, char *, void *, void *, void *) #define ALLOC_MASK ~((unsigned long)(ALLOC_UNIT)) #define ALIGN_ALLOC(addr) \ ((((unsigned long)addr) + ALLOC_UNIT) & ALLOC_MASK) +/* Note that all sections must be aligned on a 0x1000 boundary so + this is the minimum size that our dummy bss can be. */ +#define BSS_PAD_SIZE 0x1000 /* To prevent zero-initialized variables from being placed into the bss section, use non-zero values to represent an uninitialized state. */ @@ -252,13 +255,19 @@ copy_executable_and_dump_data_section (int a_out, int a_new) void* empty_space; extern int static_heap_dumped; SCNHDR section; - /* calculate new sizes f_ohdr.dsize is the total initialized data - size on disk which is f_data.s_size + f_idata.s_size. - f_ohdr.data_start is the base addres of all data and so should - not be changed. *.s_vaddr is the virtual address of the start - of the section normalzed from f_ohdr.ImageBase. *.s_paddr - appears to be the number of bytes in the section actually used - (whereas *.s_size is aligned). + /* calculate new sizes: + + f_ohdr.dsize is the total initialized data size on disk which is + f_data.s_size + f_idata.s_size. + + f_ohdr.data_start is the base addres of all data and so should + not be changed. + + *.s_vaddr is the virtual address of the start of the section + *normalized from f_ohdr.ImageBase. + + *.s_paddr appears to be the number of bytes in the section + *actually used (whereas *.s_size is aligned). bsize is now 0 since subsumed into .data dsize is dsize + (f_data.s_vaddr - f_bss.s_vaddr) @@ -278,7 +287,7 @@ copy_executable_and_dump_data_section (int a_out, int a_new) data_padding = (f_bss.s_vaddr - f_data.s_vaddr) - f_data.s_size; } - file_sz_change=new_bss_size + data_padding; + file_sz_change=(new_bss_size + data_padding) - BSS_PAD_SIZE; new_data_size=f_ohdr.dsize + file_sz_change; if (!sections_reversed) @@ -297,7 +306,7 @@ copy_executable_and_dump_data_section (int a_out, int a_new) lseek (a_new, 0, SEEK_SET); /* write file header */ f_hdr.f_symptr += file_sz_change; - f_hdr.f_nscns--; + printf("writing file header\n"); if (write(a_new, &f_hdr, sizeof(f_hdr)) != sizeof(f_hdr)) { @@ -312,7 +321,7 @@ copy_executable_and_dump_data_section (int a_out, int a_new) PERROR("new data size is < approx"); } f_ohdr.dsize=new_data_size; - f_ohdr.bsize=0; + f_ohdr.bsize=BSS_PAD_SIZE; if (write(a_new, &f_ohdr, sizeof(f_ohdr)) != sizeof(f_ohdr)) { PERROR("failed to write optional header"); @@ -325,6 +334,18 @@ copy_executable_and_dump_data_section (int a_out, int a_new) PERROR("failed to write text header"); } + /* Write small bss section. */ + if (!sections_reversed) + { + f_bss.s_size = BSS_PAD_SIZE; + f_bss.s_paddr = BSS_PAD_SIZE; + f_bss.s_vaddr = f_data.s_vaddr - BSS_PAD_SIZE; + if (write(a_new, &f_bss, sizeof(f_bss)) != sizeof(f_bss)) + { + PERROR("failed to write bss header"); + } + } + /* write new data header */ printf("writing .data header\n"); @@ -333,6 +354,18 @@ copy_executable_and_dump_data_section (int a_out, int a_new) PERROR("failed to write data header"); } + /* Write small bss section. */ + if (sections_reversed) + { + f_bss.s_size = BSS_PAD_SIZE; + f_bss.s_paddr = BSS_PAD_SIZE; + f_bss.s_vaddr = f_nextdata.s_vaddr - BSS_PAD_SIZE; + if (write(a_new, &f_bss, sizeof(f_bss)) != sizeof(f_bss)) + { + PERROR("failed to write bss header"); + } + } + printf("writing following data header\n"); f_nextdata.s_scnptr += file_sz_change; if (f_nextdata.s_lnnoptr != 0) f_nextdata.s_lnnoptr += file_sz_change; @@ -360,13 +393,6 @@ copy_executable_and_dump_data_section (int a_out, int a_new) } } - /* dump bss to maintain offsets */ - memset(&f_bss, 0, sizeof(f_bss)); - if (write(a_new, &f_bss, sizeof(f_bss)) != sizeof(f_bss)) - { - PERROR("failed to write bss header"); - } - size=lseek(a_new, 0, SEEK_CUR); CHECK_AOUT_POS(size); @@ -381,7 +407,7 @@ copy_executable_and_dump_data_section (int a_out, int a_new) if (!sections_reversed) { - /* dump bss + padding between sections */ + /* dump bss + padding between sections, sans small bss pad */ printf ("dumping .bss into executable... %lx bytes\n", bss_size); if (write(a_new, bss_start, bss_size) != (int)bss_size) { @@ -389,7 +415,11 @@ copy_executable_and_dump_data_section (int a_out, int a_new) } /* pad, needs to be zero */ - bss_padding = new_bss_size - bss_size; + bss_padding = (new_bss_size - bss_size) - BSS_PAD_SIZE; + if (bss_padding < 0) + { + PERROR("padded .bss too small"); + } printf ("padding .bss ... %lx bytes\n", bss_padding); empty_space = malloc(bss_padding); memset(empty_space, 0, bss_padding); @@ -420,7 +450,7 @@ copy_executable_and_dump_data_section (int a_out, int a_new) } else { - /* need to bad to bss with data in file */ + /* need to pad to bss with data in file */ printf ("padding .data ... %lx bytes\n", data_padding); size = (f_bss_s_vaddr - f_data_s_vaddr) - data_size; dup_file_area(a_out, a_new, size); @@ -433,7 +463,11 @@ copy_executable_and_dump_data_section (int a_out, int a_new) } /* pad, needs to be zero */ - bss_padding = new_bss_size - bss_size; + bss_padding = (new_bss_size - bss_size) - BSS_PAD_SIZE; + if (bss_padding < 0) + { + PERROR("padded .bss too small"); + } printf ("padding .bss ... %lx bytes\n", bss_padding); empty_space = malloc(bss_padding); memset(empty_space, 0, bss_padding); diff --git a/src/unexelfsgi.c b/src/unexelfsgi.c index 6c36431..ad54ccf 100644 --- a/src/unexelfsgi.c +++ b/src/unexelfsgi.c @@ -1,25 +1,38 @@ -/* Copyright (C) 1985, 1986, 1987, 1988, 1990, 1992 +/* Copyright (C) 1985, 1986, 1987, 1988, 1990, 1992, 1999, 2000 Free Software Foundation, Inc. This file is part of XEmacs. -XEmacs is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. +XEmacs is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. -XEmacs is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. +GNU Emacs is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with XEmacs; see the file COPYING. If not, write to +along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +Boston, MA 02111-1307, USA. -/* Synched up with: FSF 19.31. */ +In other words, you are welcome to use, share and improve this program. +You are forbidden to forbid anyone else to use, share and improve +what you give them. Help stamp out software-hoarding! */ +/* 2000-10-31: Martin Buchholz + + I noticed that xemacs on Irix 6.5 could not write to stderr, e.g. + (external-debugging-output "\n") + would produce NO output. + temacs worked fine, so this was clearly a dumping problem. + + So I copied over the latest available unexelf.c from FSF Emacs, + and installed it as unexelfsgi.c in XEmacs. + In addition, I converted it to "Clean C", resulting in this file. +*/ /* * unexec.c - Convert a running program into an a.out file. @@ -31,14 +44,14 @@ Boston, MA 02111-1307, USA. */ * Modified heavily since then. * * Synopsis: - * unexec (new_name, a_name, data_start, bss_start, entry_address) - * char *new_name, *a_name; + * unexec (new_name, old_name, data_start, bss_start, entry_address) + * char *new_name, *old_name; * unsigned data_start, bss_start, entry_address; * * Takes a snapshot of the program and makes an a.out format file in the * file named by the string argument new_name. - * If a_name is non-NULL, the symbol table will be taken from the given file. - * On some machines, an existing a_name file is required. + * If old_name is non-NULL, the symbol table will be taken from the given file. + * On some machines, an existing old_name file is required. * * The boundaries within the a.out file may be adjusted with the data_start * and bss_start arguments. Either or both may be given as 0 for defaults. @@ -50,11 +63,6 @@ Boston, MA 02111-1307, USA. */ * The value you specify may be rounded down to a suitable boundary * as required by the machine you are using. * - * Specifying zero for data_start means the boundary between text and data - * should not be the same as when the program was loaded. - * If NO_REMAP is defined, the argument data_start is ignored and the - * segment boundaries are never changed. - * * Bss_start indicates how much of the data segment is to be saved in the * a.out file and restored when the program is executed. It gives the lowest * unsaved address, and is rounded up to a page boundary. The default when 0 @@ -64,9 +72,6 @@ Boston, MA 02111-1307, USA. */ * * The new file is set up to start at entry_address. * - * If you make improvements I'd like to get them too. - * harpo!utah-cs!thomas, thomas@Utah-20 - * */ /* Even more heavily modified by james@bigtex.cactus.org of Dell Computer Co. @@ -99,64 +104,64 @@ temacs: Link Info Adralgn Entsize [1] 1 2 0x80480d4 0xd4 0x13 .interp - 0 0 0x1 0 + 0 0 0x1 0 [2] 5 2 0x80480e8 0xe8 0x388 .hash - 3 0 0x4 0x4 + 3 0 0x4 0x4 [3] 11 2 0x8048470 0x470 0x7f0 .dynsym - 4 1 0x4 0x10 + 4 1 0x4 0x10 [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr - 0 0 0x1 0 + 0 0 0x1 0 [5] 9 2 0x8049010 0x1010 0x338 .rel.plt - 3 7 0x4 0x8 + 3 7 0x4 0x8 [6] 1 6 0x8049348 0x1348 0x3 .init - 0 0 0x4 0 + 0 0 0x4 0 [7] 1 6 0x804934c 0x134c 0x680 .plt - 0 0 0x4 0x4 + 0 0 0x4 0x4 [8] 1 6 0x80499cc 0x19cc 0x3c56f .text - 0 0 0x4 0 + 0 0 0x4 0 [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini - 0 0 0x4 0 + 0 0 0x4 0 [10] 1 2 0x8085f40 0x3df40 0x69c .rodata - 0 0 0x4 0 + 0 0 0x4 0 [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1 - 0 0 0x4 0 + 0 0 0x4 0 [12] 1 3 0x8088330 0x3f330 0x20afc .data - 0 0 0x4 0 + 0 0 0x4 0 [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1 - 0 0 0x4 0 + 0 0 0x4 0 [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got - 0 0 0x4 0x4 + 0 0 0x4 0x4 [15] 6 3 0x80a9874 0x60874 0x80 .dynamic - 4 0 0x4 0x8 + 4 0 0x4 0x8 [16] 8 3 0x80a98f4 0x608f4 0x449c .bss - 0 0 0x4 0 + 0 0 0x4 0 [17] 2 0 0 0x608f4 0x9b90 .symtab - 18 371 0x4 0x10 + 18 371 0x4 0x10 [18] 3 0 0 0x6a484 0x8526 .strtab - 0 0 0x1 0 + 0 0 0x1 0 [19] 3 0 0 0x729aa 0x93 .shstrtab - 0 0 0x1 0 + 0 0 0x1 0 [20] 1 0 0 0x72a3d 0x68b7 .comment - 0 0 0x1 0 + 0 0 0x1 0 raid:/nfs/raid/src/dist-18.56/src> dump -h xemacs @@ -167,67 +172,67 @@ xemacs: Link Info Adralgn Entsize [1] 1 2 0x80480d4 0xd4 0x13 .interp - 0 0 0x1 0 + 0 0 0x1 0 [2] 5 2 0x80480e8 0xe8 0x388 .hash - 3 0 0x4 0x4 + 3 0 0x4 0x4 [3] 11 2 0x8048470 0x470 0x7f0 .dynsym - 4 1 0x4 0x10 + 4 1 0x4 0x10 [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr - 0 0 0x1 0 + 0 0 0x1 0 [5] 9 2 0x8049010 0x1010 0x338 .rel.plt - 3 7 0x4 0x8 + 3 7 0x4 0x8 [6] 1 6 0x8049348 0x1348 0x3 .init - 0 0 0x4 0 + 0 0 0x4 0 [7] 1 6 0x804934c 0x134c 0x680 .plt - 0 0 0x4 0x4 + 0 0 0x4 0x4 [8] 1 6 0x80499cc 0x19cc 0x3c56f .text - 0 0 0x4 0 + 0 0 0x4 0 [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini - 0 0 0x4 0 + 0 0 0x4 0 [10] 1 2 0x8085f40 0x3df40 0x69c .rodata - 0 0 0x4 0 + 0 0 0x4 0 [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1 - 0 0 0x4 0 + 0 0 0x4 0 [12] 1 3 0x8088330 0x3f330 0x20afc .data - 0 0 0x4 0 + 0 0 0x4 0 [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1 - 0 0 0x4 0 + 0 0 0x4 0 [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got - 0 0 0x4 0x4 + 0 0 0x4 0x4 [15] 6 3 0x80a9874 0x60874 0x80 .dynamic - 4 0 0x4 0x8 + 4 0 0x4 0x8 [16] 8 3 0x80c6800 0x7d800 0 .bss - 0 0 0x4 0 + 0 0 0x4 0 [17] 2 0 0 0x7d800 0x9b90 .symtab - 18 371 0x4 0x10 + 18 371 0x4 0x10 [18] 3 0 0 0x87390 0x8526 .strtab - 0 0 0x1 0 + 0 0 0x1 0 [19] 3 0 0 0x8f8b6 0x93 .shstrtab - 0 0 0x1 0 + 0 0 0x1 0 [20] 1 0 0 0x8f949 0x68b7 .comment - 0 0 0x1 0 + 0 0 0x1 0 [21] 1 3 0x80a98f4 0x608f4 0x1cf0c .data - 0 0 0x4 0 + 0 0 0x4 0 * This is an example of how the file header is changed. "Shoff" is * the section header offset within the file. Since that table is @@ -277,20 +282,20 @@ temacs: Type Offset Vaddr Paddr Filesz Memsz Flags Align -6 0x34 0x8048034 0 -0xa0 0xa0 5 0 +6 0x34 0x8048034 0 +0xa0 0xa0 5 0 -3 0xd4 0 0 -0x13 0 4 0 +3 0xd4 0 0 +0x13 0 4 0 -1 0x34 0x8048034 0 -0x3f2f9 0x3f2f9 5 0x1000 +1 0x34 0x8048034 0 +0x3f2f9 0x3f2f9 5 0x1000 -1 0x3f330 0x8088330 0 -0x215c4 0x25a60 7 0x1000 +1 0x3f330 0x8088330 0 +0x215c4 0x25a60 7 0x1000 -2 0x60874 0x80a9874 0 -0x80 0 7 0 +2 0x60874 0x80a9874 0 +0x80 0 7 0 raid:/nfs/raid/src/dist-18.56/src> dump -o xemacs @@ -299,42 +304,42 @@ xemacs: Type Offset Vaddr Paddr Filesz Memsz Flags Align -6 0x34 0x8048034 0 -0xa0 0xa0 5 0 +6 0x34 0x8048034 0 +0xa0 0xa0 5 0 -3 0xd4 0 0 -0x13 0 4 0 +3 0xd4 0 0 +0x13 0 4 0 -1 0x34 0x8048034 0 -0x3f2f9 0x3f2f9 5 0x1000 +1 0x34 0x8048034 0 +0x3f2f9 0x3f2f9 5 0x1000 -1 0x3f330 0x8088330 0 -0x3e4d0 0x3e4d0 7 0x1000 +1 0x3f330 0x8088330 0 +0x3e4d0 0x3e4d0 7 0x1000 -2 0x60874 0x80a9874 0 -0x80 0 7 0 +2 0x60874 0x80a9874 0 +0x80 0 7 0 */ -/* Modified by wtien@urbana.mcd.mot.com of Motorola Inc. - * +/* Modified by wtien@urbana.mcd.mot.com of Motorola Inc. + * * The above mechanism does not work if the unexeced ELF file is being - * re-layout by other applications (such as `strip'). All the applications + * re-layout by other applications (such as `strip'). All the applications * that re-layout the internal of ELF will layout all sections in ascending - * order of their file offsets. After the re-layout, the data2 section will - * still be the LAST section in the section header vector, but its file offset + * order of their file offsets. After the re-layout, the data2 section will + * still be the LAST section in the section header vector, but its file offset * is now being pushed far away down, and causes part of it not to be mapped - * in (ie. not covered by the load segment entry in PHDR vector), therefore + * in (ie. not covered by the load segment entry in PHDR vector), therefore * causes the new binary to fail. * * The solution is to modify the unexec algorithm to insert the new data2 * section header right before the new bss section header, so their file - * offsets will be in the ascending order. Since some of the section's (all - * sections AFTER the bss section) indexes are now changed, we also need to - * modify some fields to make them point to the right sections. This is done + * offsets will be in the ascending order. Since some of the section's (all + * sections AFTER the bss section) indexes are now changed, we also need to + * modify some fields to make them point to the right sections. This is done * by macro PATCH_INDEX. All the fields that need to be patched are: - * + * * 1. ELF header e_shstrndx field. * 2. section header sh_link and sh_info field. * 3. symbol table entry st_shndx field. @@ -346,203 +351,246 @@ Filesz Memsz Flags Align Link Info Adralgn Entsize [1] 1 2 0x80480d4 0xd4 0x13 .interp - 0 0 0x1 0 + 0 0 0x1 0 [2] 5 2 0x80480e8 0xe8 0x388 .hash - 3 0 0x4 0x4 + 3 0 0x4 0x4 [3] 11 2 0x8048470 0x470 0x7f0 .dynsym - 4 1 0x4 0x10 + 4 1 0x4 0x10 [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr - 0 0 0x1 0 + 0 0 0x1 0 [5] 9 2 0x8049010 0x1010 0x338 .rel.plt - 3 7 0x4 0x8 + 3 7 0x4 0x8 [6] 1 6 0x8049348 0x1348 0x3 .init - 0 0 0x4 0 + 0 0 0x4 0 [7] 1 6 0x804934c 0x134c 0x680 .plt - 0 0 0x4 0x4 + 0 0 0x4 0x4 [8] 1 6 0x80499cc 0x19cc 0x3c56f .text - 0 0 0x4 0 + 0 0 0x4 0 [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini - 0 0 0x4 0 + 0 0 0x4 0 [10] 1 2 0x8085f40 0x3df40 0x69c .rodata - 0 0 0x4 0 + 0 0 0x4 0 [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1 - 0 0 0x4 0 + 0 0 0x4 0 [12] 1 3 0x8088330 0x3f330 0x20afc .data - 0 0 0x4 0 + 0 0 0x4 0 [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1 - 0 0 0x4 0 + 0 0 0x4 0 [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got - 0 0 0x4 0x4 + 0 0 0x4 0x4 [15] 6 3 0x80a9874 0x60874 0x80 .dynamic - 4 0 0x4 0x8 + 4 0 0x4 0x8 [16] 1 3 0x80a98f4 0x608f4 0x1cf0c .data - 0 0 0x4 0 + 0 0 0x4 0 [17] 8 3 0x80c6800 0x7d800 0 .bss - 0 0 0x4 0 + 0 0 0x4 0 [18] 2 0 0 0x7d800 0x9b90 .symtab - 19 371 0x4 0x10 + 19 371 0x4 0x10 [19] 3 0 0 0x87390 0x8526 .strtab - 0 0 0x1 0 + 0 0 0x1 0 [20] 3 0 0 0x8f8b6 0x93 .shstrtab - 0 0 0x1 0 + 0 0 0x1 0 [21] 1 0 0 0x8f949 0x68b7 .comment - 0 0 0x1 0 + 0 0 0x1 0 */ - - /* More mods, by Jack Repenning , Fri Aug 11 15:45:52 1995 - - Same algorithm as immediately above. However, the detailed - calculations of the various locations needed significant - overhaul. - - At the point of the old .bss, the file offsets and the memory - addresses do distinct, slightly snaky things: - - offset of .bss is meaningless and unpredictable - addr of .bss is meaningful - alignment of .bss is important to addr, so there may be a small - gap in address range before start of bss - offset of next section is rounded up modulo 0x1000 - the hole so-introduced is zero-filled, so it can be mapped in as - the first partial-page of bss (the rest of the bss is mapped from - /dev/zero) - I suppose you could view this not as a hole, but as the beginning - of the bss, actually present in the file. But you should not - push that worldview too far, as the linker still knows that the - "offset" claimed for the bss is unused, and seems not always - careful about setting it. - - We are doing all our tricks at this same rather complicated - location (isn't life fun?): - - insert a new data section to contain now-initialized old bss and - heap - define a zero-length bss just so there is one - - The offset of the new data section is dictated by its current - address (which, of course, we want also to be its addr): the - loader maps in the whole file region containing old data, rodata, - got, and new data as a single mapped segment, starting at the - address of the first chunk; the rest have to be laid out in the - file such that the map into the right spots. That is: - - offset(newdata) == - addrInRunningMemory(newdata)-aIRM(olddata) - + offset(oldData) - - This would not necessarily match the oldbss offset, even if it - were carefully calculated! We must compute this. - - The linker that built temacs has also already arranged that - olddata is properly page-aligned (not necessarily beginning on a - page, but rather that a page's worth of the low bits of addr and - offset match). We preserve this. - - addr(bss) is alignment-constrained from the end of the new data. - Since we base endof(newdata) on sbrk(), we have a page boundary - (in both offset and addr) and meet any alignment constraint, - needing no alignment adjustment of this location and no - mini-hole. Or, if you like, we've allowed sbrk() to "compute" - the mini-hole size for us. - - That puts newbss beginning on a page boundary, both in offset and - addr. (offset(bss) is still meaningless, but what the heck, - we'll fix it up.) - - Since newbss has zero length, and its offset (however - meaningless) is page aligned, we place the next section exactly - there, with no hole needed to restore page alignment. - - So, the shift for all sections beyond the playing field is: - - new_bss_addr - roundup(old_bss_addr,0x1000) - - */ - /* Still more mods... Olivier Galibert 19971705 - - support for .sbss section (automagically changed to data without - name change) - - support for 64bits ABI (will need a bunch of fixes in the rest - of the code before it works - */ +#ifndef emacs +#define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1) +#include +#else +#include +extern void fatal (const char *, ...); +#endif + #include #include #include #include -#include #include #include #include +#if !defined (__NetBSD__) && !defined (__OpenBSD__) #include -#include /* for HDRR declaration */ +#endif #include -#include -#include "lisp.h" - -/* in 64bits mode, use 64bits elf */ -#ifdef _ABI64 -typedef Elf64_Shdr l_Elf_Shdr; -typedef Elf64_Phdr l_Elf_Phdr; -typedef Elf64_Ehdr l_Elf_Ehdr; -typedef Elf64_Addr l_Elf_Addr; -typedef Elf64_Word l_Elf_Word; -typedef Elf64_Off l_Elf_Off; -typedef Elf64_Sym l_Elf_Sym; -#else -typedef Elf32_Shdr l_Elf_Shdr; -typedef Elf32_Phdr l_Elf_Phdr; -typedef Elf32_Ehdr l_Elf_Ehdr; -typedef Elf32_Addr l_Elf_Addr; -typedef Elf32_Word l_Elf_Word; -typedef Elf32_Off l_Elf_Off; -typedef Elf32_Sym l_Elf_Sym; +#if defined (__sony_news) && defined (_SYSTYPE_SYSV) +#include +#include +#endif /* __sony_news && _SYSTYPE_SYSV */ +#if __sgi +#include /* for HDRR declaration */ +#endif /* __sgi */ + +#if defined (__alpha__) && !defined (__NetBSD__) && !defined (__OpenBSD__) +/* Declare COFF debugging symbol table. This used to be in + /usr/include/sym.h, but this file is no longer included in Red Hat + 5.0 and presumably in any other glibc 2.x based distribution. */ +typedef struct { + short magic; + short vstamp; + int ilineMax; + int idnMax; + int ipdMax; + int isymMax; + int ioptMax; + int iauxMax; + int issMax; + int issExtMax; + int ifdMax; + int crfd; + int iextMax; + long cbLine; + long cbLineOffset; + long cbDnOffset; + long cbPdOffset; + long cbSymOffset; + long cbOptOffset; + long cbAuxOffset; + long cbSsOffset; + long cbSsExtOffset; + long cbFdOffset; + long cbRfdOffset; + long cbExtOffset; +} HDRR, *pHDRR; +#define cbHDRR sizeof(HDRR) +#define hdrNil ((pHDRR)0) +#endif + +#ifdef __NetBSD__ +/* + * NetBSD does not have normal-looking user-land ELF support. + */ +# if defined __alpha__ || defined __sparc_v9__ +# define ELFSIZE 64 +# else +# define ELFSIZE 32 +# endif +# include + +# ifndef PT_LOAD +# define PT_LOAD Elf_pt_load +# if 0 /* was in pkgsrc patches for 20.7 */ +# define SHT_PROGBITS Elf_sht_progbits +# endif +# define SHT_SYMTAB Elf_sht_symtab +# define SHT_DYNSYM Elf_sht_dynsym +# define SHT_NULL Elf_sht_null +# define SHT_NOBITS Elf_sht_nobits +# define SHT_REL Elf_sht_rel +# define SHT_RELA Elf_sht_rela + +# define SHN_UNDEF Elf_eshn_undefined +# define SHN_ABS Elf_eshn_absolute +# define SHN_COMMON Elf_eshn_common +# endif /* !PT_LOAD */ + +# ifdef __alpha__ +# include +# define HDRR struct ecoff_symhdr +# define pHDRR HDRR * +# endif /* __alpha__ */ + +#ifdef __mips__ /* was in pkgsrc patches for 20.7 */ +# define SHT_MIPS_DEBUG DT_MIPS_FLAGS +# define HDRR struct Elf_Shdr +#endif /* __mips__ */ +#endif /* __NetBSD__ */ + +#ifdef __OpenBSD__ +# include +#endif + +#if __GNU_LIBRARY__ - 0 >= 6 +# include /* get ElfW etc */ +#endif + +#ifndef ElfW +# ifdef __STDC__ +# define ElfBitsW(bits, type) Elf##bits##_##type +# else +# define ElfBitsW(bits, type) Elf/**/bits/**/_/**/type +# endif +# ifdef _LP64 +# define ELFSIZE 64 +# else +# define ELFSIZE 32 +# endif + /* This macro expands `bits' before invoking ElfBitsW. */ +# define ElfExpandBitsW(bits, type) ElfBitsW (bits, type) +# define ElfW(type) ElfExpandBitsW (ELFSIZE, type) #endif +#ifndef ELF_BSS_SECTION_NAME +#define ELF_BSS_SECTION_NAME ".bss" +#endif /* Get the address of a particular section or program header entry, * accounting for the size of the entries. */ +/* + On PPC Reference Platform running Solaris 2.5.1 + the plt section is also of type NOBI like the bss section. + (not really stored) and therefore sections after the bss + section start at the plt offset. The plt section is always + the one just before the bss section. + Thus, we modify the test from + if (NEW_SECTION_H (nn).sh_offset >= new_data2_offset) + to + if (NEW_SECTION_H (nn).sh_offset >= + OLD_SECTION_H (old_bss_index-1).sh_offset) + This is just a hack. We should put the new data section + before the .plt section. + And we should not have this routine at all but use + the libelf library to read the old file and create the new + file. + The changed code is minimal and depends on prep set in m/prep.h + Erik Deumens + Quantum Theory Project + University of Florida + deumens@qtp.ufl.edu + Apr 23, 1996 + */ #define OLD_SECTION_H(n) \ - (*(l_Elf_Shdr *) ((byte *) old_section_h + old_file_h->e_shentsize * (n))) + (*(ElfW(Shdr) *) ((byte *) old_section_h + old_file_h->e_shentsize * (n))) #define NEW_SECTION_H(n) \ - (*(l_Elf_Shdr *) ((byte *) new_section_h + new_file_h->e_shentsize * (n))) + (*(ElfW(Shdr) *) ((byte *) new_section_h + new_file_h->e_shentsize * (n))) #define OLD_PROGRAM_H(n) \ - (*(l_Elf_Phdr *) ((byte *) old_program_h + old_file_h->e_phentsize * (n))) + (*(ElfW(Phdr) *) ((byte *) old_program_h + old_file_h->e_phentsize * (n))) #define NEW_PROGRAM_H(n) \ - (*(l_Elf_Phdr *) ((byte *) new_program_h + new_file_h->e_phentsize * (n))) + (*(ElfW(Phdr) *) ((byte *) new_program_h + new_file_h->e_phentsize * (n))) #define PATCH_INDEX(n) \ do { \ - if ((n) >= old_bss_index) \ + if ((int) (n) >= old_bss_index) \ (n)++; } while (0) typedef unsigned char byte; /* Round X up to a multiple of Y. */ -static int -round_up (int x, int y) +static ElfW(Addr) +round_up (ElfW(Addr) x, ElfW(Addr) y) { int rem = x % y; if (rem == 0) @@ -561,8 +609,8 @@ static int find_section (char *name, char *section_names, char *file_name, - l_Elf_Ehdr *old_file_h, - l_Elf_Shdr *old_section_h, + ElfW(Ehdr) *old_file_h, + ElfW(Shdr) *old_section_h, int noerror) { int idx; @@ -582,7 +630,7 @@ find_section (char *name, if (noerror) return -1; else - fatal ("Can't find .bss in %s.\n", file_name); + fatal ("Can't find %s in %s.\n", name, file_name); } return idx; @@ -597,41 +645,40 @@ find_section (char *name, * .data section, and inserting an empty .bss immediately afterwards. * */ -int +void unexec (char *new_name, char *old_name, uintptr_t data_start, uintptr_t bss_start, uintptr_t entry_address) { - extern uintptr_t bss_end; int new_file, old_file, new_file_size; - /* Pointers to the base of the image of the two files. */ + /* Pointers to the base of the image of the two files. */ caddr_t old_base, new_base; /* Pointers to the file, program and section headers for the old and new - files. */ - l_Elf_Ehdr *old_file_h, *new_file_h; - l_Elf_Phdr *old_program_h, *new_program_h; - l_Elf_Shdr *old_section_h, *new_section_h; - l_Elf_Shdr *oldbss; + * files. + */ + ElfW(Ehdr) *old_file_h, *new_file_h; + ElfW(Phdr) *old_program_h, *new_program_h; + ElfW(Shdr) *old_section_h, *new_section_h; - /* Point to the section name table in the old file. */ + /* Point to the section name table in the old file */ char *old_section_names; - l_Elf_Addr old_bss_addr, new_bss_addr; - l_Elf_Addr old_base_addr; - l_Elf_Word old_bss_size, new_data2_size; - l_Elf_Off new_data2_offset, new_base_offset; - l_Elf_Addr new_data2_addr; - l_Elf_Addr new_offsets_shift; + ElfW(Addr) old_bss_addr, new_bss_addr; + ElfW(Word) old_bss_size, new_data2_size; + ElfW(Off) new_data2_offset; + ElfW(Addr) new_data2_addr; - int n, nn, old_bss_index, old_data_index; - int old_mdebug_index, old_sbss_index; + int n, nn; + int old_bss_index, old_sbss_index; + int old_data_index, new_data2_index; + int old_mdebug_index; struct stat stat_buf; - /* Open the old file & map it into the address space. */ + /* Open the old file & map it into the address space. */ old_file = open (old_name, O_RDONLY); @@ -639,43 +686,58 @@ unexec (char *new_name, fatal ("Can't open %s for reading: errno %d\n", old_name, errno); if (fstat (old_file, &stat_buf) == -1) - fatal ("Can't fstat(%s): errno %d\n", old_name, errno); + fatal ("Can't fstat (%s): errno %d\n", old_name, errno); - old_base = mmap (0, stat_buf.st_size, PROT_READ, MAP_SHARED, old_file, 0); + old_base = (caddr_t) mmap ((caddr_t) 0, stat_buf.st_size, + PROT_READ, MAP_SHARED, old_file, 0); if (old_base == (caddr_t) -1) - fatal ("Can't mmap(%s): errno %d\n", old_name, errno); + fatal ("Can't mmap (%s): errno %d\n", old_name, errno); #ifdef DEBUG - fprintf (stderr, "mmap(%s, %x) -> %x\n", old_name, stat_buf.st_size, + fprintf (stderr, "mmap (%s, %x) -> %x\n", old_name, stat_buf.st_size, old_base); #endif - /* Get pointers to headers & section names. */ + /* Get pointers to headers & section names */ - old_file_h = (l_Elf_Ehdr *) old_base; - old_program_h = (l_Elf_Phdr *) ((byte *) old_base + old_file_h->e_phoff); - old_section_h = (l_Elf_Shdr *) ((byte *) old_base + old_file_h->e_shoff); - old_section_names - = (char *) old_base + OLD_SECTION_H (old_file_h->e_shstrndx).sh_offset; + old_file_h = (ElfW(Ehdr) *) old_base; + old_program_h = (ElfW(Phdr) *) ((byte *) old_base + old_file_h->e_phoff); + old_section_h = (ElfW(Shdr) *) ((byte *) old_base + old_file_h->e_shoff); + old_section_names = (char *) old_base + + OLD_SECTION_H (old_file_h->e_shstrndx).sh_offset; /* Find the mdebug section, if any. */ old_mdebug_index = find_section (".mdebug", old_section_names, old_name, old_file_h, old_section_h, 1); - /* Find the .sbss section, if any. */ + /* Find the old .bss section. Figure out parameters of the new + * data2 and bss sections. + */ + + old_bss_index = find_section (".bss", old_section_names, + old_name, old_file_h, old_section_h, 0); old_sbss_index = find_section (".sbss", old_section_names, old_name, old_file_h, old_section_h, 1); + if (old_sbss_index != -1) + if (OLD_SECTION_H (old_sbss_index).sh_type == SHT_PROGBITS) + old_sbss_index = -1; - if (old_sbss_index != -1 && (OLD_SECTION_H (old_sbss_index).sh_type == SHT_PROGBITS)) - old_sbss_index = -1; - - /* Find the old .bss section. */ - - old_bss_index = find_section (".bss", old_section_names, - old_name, old_file_h, old_section_h, 0); + if (old_sbss_index == -1) + { + old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr; + old_bss_size = OLD_SECTION_H (old_bss_index).sh_size; + new_data2_index = old_bss_index; + } + else + { + old_bss_addr = OLD_SECTION_H (old_sbss_index).sh_addr; + old_bss_size = OLD_SECTION_H (old_bss_index).sh_size + + OLD_SECTION_H (old_sbss_index).sh_size; + new_data2_index = old_sbss_index; + } /* Find the old .data section. Figure out parameters of the new data2 and bss sections. */ @@ -683,68 +745,64 @@ unexec (char *new_name, old_data_index = find_section (".data", old_section_names, old_name, old_file_h, old_section_h, 0); - old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr; - old_bss_size = OLD_SECTION_H (old_bss_index).sh_size; - old_base_addr = old_sbss_index == -1 ? old_bss_addr : OLD_SECTION_H (old_sbss_index).sh_addr; -#if defined(emacs) || !defined(DEBUG) - bss_end = (uintptr_t) sbrk (0); - new_bss_addr = (l_Elf_Addr) bss_end; +#if defined (emacs) || !defined (DEBUG) + new_bss_addr = (ElfW(Addr)) sbrk (0); #else - new_bss_addr = old_bss_addr + old_bss_size + 0x1234; + new_bss_addr = old_bss_addr + old_bss_size + 0x1234; #endif - new_data2_addr = old_bss_addr; - new_data2_size = new_bss_addr - old_bss_addr; + new_data2_addr = old_bss_addr; + new_data2_size = new_bss_addr - old_bss_addr; new_data2_offset = OLD_SECTION_H (old_data_index).sh_offset + (new_data2_addr - OLD_SECTION_H (old_data_index).sh_addr); - new_base_offset = OLD_SECTION_H (old_data_index).sh_offset + - (old_base_addr - OLD_SECTION_H (old_data_index).sh_addr); - new_offsets_shift = new_bss_addr - (old_base_addr & ~0xfff) + - ((old_base_addr & 0xfff) ? 0x1000 : 0); #ifdef DEBUG fprintf (stderr, "old_bss_index %d\n", old_bss_index); fprintf (stderr, "old_bss_addr %x\n", old_bss_addr); fprintf (stderr, "old_bss_size %x\n", old_bss_size); - fprintf (stderr, "old_base_addr %x\n", old_base_addr); fprintf (stderr, "new_bss_addr %x\n", new_bss_addr); fprintf (stderr, "new_data2_addr %x\n", new_data2_addr); fprintf (stderr, "new_data2_size %x\n", new_data2_size); fprintf (stderr, "new_data2_offset %x\n", new_data2_offset); - fprintf (stderr, "new_offsets_shift %x\n", new_offsets_shift); #endif if ((unsigned) new_bss_addr < (unsigned) old_bss_addr + old_bss_size) - fatal (".bss shrank when undumping???\n"); + fatal (".bss shrank when undumping???\n", 0, 0); /* Set the output file to the right size and mmap it. Set - pointers to various interesting objects. stat_buf still has - old_file data. */ + * pointers to various interesting objects. stat_buf still has + * old_file data. + */ new_file = open (new_name, O_RDWR | O_CREAT, 0666); if (new_file < 0) fatal ("Can't creat (%s): errno %d\n", new_name, errno); - new_file_size = stat_buf.st_size /* old file size */ - + old_file_h->e_shentsize /* one new section header */ - + new_offsets_shift; /* trailing section shift */ + new_file_size = stat_buf.st_size + old_file_h->e_shentsize + new_data2_size; if (ftruncate (new_file, new_file_size)) fatal ("Can't ftruncate (%s): errno %d\n", new_name, errno); - new_base = mmap (0, new_file_size, PROT_READ | PROT_WRITE, MAP_SHARED, - new_file, 0); +#ifdef UNEXEC_USE_MAP_PRIVATE + new_base = (caddr_t) mmap ((caddr_t) 0, new_file_size, + PROT_READ | PROT_WRITE, + MAP_PRIVATE, new_file, 0); +#else + new_base = (caddr_t) mmap ((caddr_t) 0, new_file_size, + PROT_READ | PROT_WRITE, + MAP_SHARED, new_file, 0); +#endif if (new_base == (caddr_t) -1) fatal ("Can't mmap (%s): errno %d\n", new_name, errno); - new_file_h = (l_Elf_Ehdr *) new_base; - new_program_h = (l_Elf_Phdr *) ((byte *) new_base + old_file_h->e_phoff); - new_section_h - = (l_Elf_Shdr *) ((byte *) new_base + old_file_h->e_shoff - + new_offsets_shift); + new_file_h = (ElfW(Ehdr) *) new_base; + new_program_h = (ElfW(Phdr) *) ((byte *) new_base + old_file_h->e_phoff); + new_section_h = (ElfW(Shdr) *) + ((byte *) new_base + old_file_h->e_shoff + new_data2_size); /* Make our new file, program and section headers as copies of the - originals. */ + * originals. + */ memcpy (new_file_h, old_file_h, old_file_h->e_ehsize); memcpy (new_program_h, old_program_h, @@ -754,12 +812,12 @@ unexec (char *new_name, PATCH_INDEX (new_file_h->e_shstrndx); /* Fix up file header. We'll add one section. Section header is - further away now. */ + * further away now. + */ - new_file_h->e_shoff += new_offsets_shift; + new_file_h->e_shoff += new_data2_size; new_file_h->e_shnum += 1; - #ifdef DEBUG fprintf (stderr, "Old section offset %x\n", old_file_h->e_shoff); fprintf (stderr, "Old section count %d\n", old_file_h->e_shnum); @@ -768,164 +826,248 @@ unexec (char *new_name, #endif /* Fix up a new program header. Extend the writable data segment so - that the bss area is covered too. Find that segment by looking - for one that starts before and ends after the .bss and it PT_LOADable. - Put a loop at the end to adjust the offset and address of any segment - that is above data2, just in case we decide to allow this later. */ + * that the bss area is covered too. Find that segment by looking + * for a segment that ends just before the .bss area. Make sure + * that no segments are above the new .data2. Put a loop at the end + * to adjust the offset and address of any segment that is above + * data2, just in case we decide to allow this later. + */ - oldbss = &OLD_SECTION_H(old_bss_index); for (n = new_file_h->e_phnum - 1; n >= 0; n--) { /* Compute maximum of all requirements for alignment of section. */ - l_Elf_Phdr * ph = (l_Elf_Phdr *)((byte *) new_program_h + - new_file_h->e_phentsize*(n)); -#ifdef DEBUG - printf ("%d @ %0x + %0x against %0x + %0x", - n, ph->p_vaddr, ph->p_memsz, - oldbss->sh_addr, oldbss->sh_size); -#endif - if ((ph->p_type == PT_LOAD) && - (ph->p_vaddr <= oldbss->sh_addr) && - ((ph->p_vaddr + ph->p_memsz)>=(oldbss->sh_addr + oldbss->sh_size))) { - ph->p_filesz += new_offsets_shift; - ph->p_memsz = ph->p_filesz; -#ifdef DEBUG - puts (" That's the one!"); - fflush (stdout); -#endif - break; - } -#ifdef DEBUG - putchar ('\n'); - fflush (stdout); -#endif + ElfW(Word) alignment = (NEW_PROGRAM_H (n)).p_align; + if ((OLD_SECTION_H (old_bss_index)).sh_addralign > alignment) + alignment = OLD_SECTION_H (old_bss_index).sh_addralign; + +#ifdef __sgi + /* According to r02kar@x4u2.desy.de (Karsten Kuenne) + and oliva@gnu.org (Alexandre Oliva), on IRIX 5.2, we + always get "Program segment above .bss" when dumping + when the executable doesn't have an sbss section. */ + if (old_sbss_index != -1) +#endif /* __sgi */ + if (NEW_PROGRAM_H (n).p_vaddr + NEW_PROGRAM_H (n).p_filesz + > (old_sbss_index == -1 + ? old_bss_addr + : round_up (old_bss_addr, alignment))) + fatal ("Program segment above .bss in %s\n", old_name, 0); + + if (NEW_PROGRAM_H (n).p_type == PT_LOAD + && (round_up ((NEW_PROGRAM_H (n)).p_vaddr + + (NEW_PROGRAM_H (n)).p_filesz, + alignment) + == round_up (old_bss_addr, alignment))) + break; } if (n < 0) - fatal ("Couldn't find segment next to %s in %s\n", - old_sbss_index == -1 ? ".sbss" : ".bss", old_name); + fatal ("Couldn't find segment next to .bss in %s\n", old_name, 0); + /* Make sure that the size includes any padding before the old .bss + section. */ + NEW_PROGRAM_H (n).p_filesz = new_bss_addr - NEW_PROGRAM_H (n).p_vaddr; + NEW_PROGRAM_H (n).p_memsz = NEW_PROGRAM_H (n).p_filesz; -#if 1 /* Maybe allow section after data2 - does this ever happen? */ +#if 0 /* Maybe allow section after data2 - does this ever happen? */ for (n = new_file_h->e_phnum - 1; n >= 0; n--) { if (NEW_PROGRAM_H (n).p_vaddr && NEW_PROGRAM_H (n).p_vaddr >= new_data2_addr) - NEW_PROGRAM_H (n).p_vaddr += new_offsets_shift - old_bss_size; + NEW_PROGRAM_H (n).p_vaddr += new_data2_size - old_bss_size; if (NEW_PROGRAM_H (n).p_offset >= new_data2_offset) - NEW_PROGRAM_H (n).p_offset += new_offsets_shift; + NEW_PROGRAM_H (n).p_offset += new_data2_size; } #endif /* Fix up section headers based on new .data2 section. Any section - whose offset or virtual address is after the new .data2 section - gets its value adjusted. .bss size becomes zero and new address - is set. data2 section header gets added by copying the existing - .data header and modifying the offset, address and size. */ - for (old_data_index = 1; old_data_index < old_file_h->e_shnum; + * whose offset or virtual address is after the new .data2 section + * gets its value adjusted. .bss size becomes zero and new address + * is set. data2 section header gets added by copying the existing + * .data header and modifying the offset, address and size. + */ + for (old_data_index = 1; old_data_index < (int) old_file_h->e_shnum; old_data_index++) if (!strcmp (old_section_names + OLD_SECTION_H (old_data_index).sh_name, ".data")) break; if (old_data_index == old_file_h->e_shnum) - fatal ("Can't find .data in %s.\n", old_name); + fatal ("Can't find .data in %s.\n", old_name, 0); - /* Walk through all section headers, insert the new data2 section right - before the new bss section. */ - for (n = 1, nn = 1; n < old_file_h->e_shnum; n++, nn++) + /* Walk through all section headers, insert the new data2 section right + before the new bss section. */ + for (n = 1, nn = 1; n < (int) old_file_h->e_shnum; n++, nn++) { caddr_t src; - - /* XEmacs change: */ - if (n < old_bss_index) - { - memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), - old_file_h->e_shentsize); - - } - else if (n == old_bss_index) + /* If it is (s)bss section, insert the new data2 section before it. */ + /* new_data2_index is the index of either old_sbss or old_bss, that was + chosen as a section for new_data2. */ + if (n == new_data2_index) { - - /* If it is bss section, insert the new data2 section before it. */ - /* Steal the data section header for this data2 section. */ + /* Steal the data section header for this data2 section. */ memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (old_data_index), new_file_h->e_shentsize); - + NEW_SECTION_H (nn).sh_addr = new_data2_addr; NEW_SECTION_H (nn).sh_offset = new_data2_offset; NEW_SECTION_H (nn).sh_size = new_data2_size; /* Use the bss section's alignment. This will assure that the new data2 section always be placed in the same spot as the old - bss section by any other application. */ + bss section by any other application. */ NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (n).sh_addralign; - /* Now copy over what we have in the memory now. */ - memcpy (NEW_SECTION_H (nn).sh_offset + new_base, - (caddr_t) OLD_SECTION_H (n).sh_addr, + /* Now copy over what we have in the memory now. */ + memcpy (NEW_SECTION_H (nn).sh_offset + new_base, + (caddr_t) OLD_SECTION_H (n).sh_addr, new_data2_size); nn++; - memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), - old_file_h->e_shentsize); - - /* The new bss section's size is zero, and its file offset and virtual - address should be off by NEW_OFFSETS_SHIFT. */ - NEW_SECTION_H (nn).sh_offset += new_offsets_shift; - NEW_SECTION_H (nn).sh_addr = new_bss_addr; + } + + memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), + old_file_h->e_shentsize); + + if (n == old_bss_index + /* The new bss and sbss section's size is zero, and its file offset + and virtual address should be off by NEW_DATA2_SIZE. */ + || n == old_sbss_index + ) + { + /* NN should be `old_s?bss_index + 1' at this point. */ + NEW_SECTION_H (nn).sh_offset = + NEW_SECTION_H (new_data2_index).sh_offset + new_data2_size; + NEW_SECTION_H (nn).sh_addr = + NEW_SECTION_H (new_data2_index).sh_addr + new_data2_size; /* Let the new bss section address alignment be the same as the - section address alignment followed the old bss section, so - this section will be placed in exactly the same place. */ - NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (n).sh_addralign; + section address alignment followed the old bss section, so + this section will be placed in exactly the same place. */ + NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (nn).sh_addralign; NEW_SECTION_H (nn).sh_size = 0; } - else /* n > old_bss_index */ - memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n), - old_file_h->e_shentsize); - - /* Any section that was original placed AFTER the bss - section must now be adjusted by NEW_OFFSETS_SHIFT. */ - - if (NEW_SECTION_H (nn).sh_offset >= new_base_offset) - NEW_SECTION_H (nn).sh_offset += new_offsets_shift; - + else + { + /* Any section that was original placed AFTER the bss + section should now be off by NEW_DATA2_SIZE. */ +#ifdef SOLARIS_POWERPC + /* On PPC Reference Platform running Solaris 2.5.1 + the plt section is also of type NOBI like the bss section. + (not really stored) and therefore sections after the bss + section start at the plt offset. The plt section is always + the one just before the bss section. + It would be better to put the new data section before + the .plt section, or use libelf instead. + Erik Deumens, deumens@qtp.ufl.edu. */ + if (NEW_SECTION_H (nn).sh_offset + >= OLD_SECTION_H (old_bss_index-1).sh_offset) + NEW_SECTION_H (nn).sh_offset += new_data2_size; +#else + if (round_up (NEW_SECTION_H (nn).sh_offset, + OLD_SECTION_H (old_bss_index).sh_addralign) + >= new_data2_offset) + NEW_SECTION_H (nn).sh_offset += new_data2_size; +#endif + /* Any section that was originally placed after the section + header table should now be off by the size of one section + header table entry. */ + if (NEW_SECTION_H (nn).sh_offset > new_file_h->e_shoff) + NEW_SECTION_H (nn).sh_offset += new_file_h->e_shentsize; + } + /* If any section hdr refers to the section after the new .data - section, make it refer to next one because we have inserted + section, make it refer to next one because we have inserted a new section in between. */ - + PATCH_INDEX (NEW_SECTION_H (nn).sh_link); /* For symbol tables, info is a symbol table index, so don't change it. */ if (NEW_SECTION_H (nn).sh_type != SHT_SYMTAB && NEW_SECTION_H (nn).sh_type != SHT_DYNSYM) PATCH_INDEX (NEW_SECTION_H (nn).sh_info); - - /* Fix the type and alignment for the .sbss section */ - if ((old_sbss_index != -1) && !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".sbss")) - { - NEW_SECTION_H (nn).sh_type = SHT_PROGBITS; - NEW_SECTION_H (nn).sh_offset = round_up (NEW_SECTION_H (nn).sh_offset, - NEW_SECTION_H (nn).sh_addralign); - } - /* Now, start to copy the content of sections. */ + if (old_sbss_index != -1) + if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".sbss")) + { + NEW_SECTION_H (nn).sh_offset = + round_up (NEW_SECTION_H (nn).sh_offset, + NEW_SECTION_H (nn).sh_addralign); + NEW_SECTION_H (nn).sh_type = SHT_PROGBITS; + } + + /* Now, start to copy the content of sections. */ if (NEW_SECTION_H (nn).sh_type == SHT_NULL || NEW_SECTION_H (nn).sh_type == SHT_NOBITS) continue; - - /* Write out the sections. .data, .data1 and .sbss (and data2, called + + /* Write out the sections. .data and .data1 (and data2, called ".data" in the strings table) get copied from the current process instead of the old file. */ - if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data") - || !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data1") - || !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".got") - || !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".sbss")) + if (!strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".data") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".sdata") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".lit4") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".lit8") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".sdata1") + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name), + ".data1") + || !strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, + ".sbss")) src = (caddr_t) OLD_SECTION_H (n).sh_addr; else src = old_base + OLD_SECTION_H (n).sh_offset; - + memcpy (NEW_SECTION_H (nn).sh_offset + new_base, src, NEW_SECTION_H (nn).sh_size); - /* Adjust the HDRR offsets in .mdebug and copy the +#ifdef __alpha__ + /* Update Alpha COFF symbol table: */ + if (strcmp (old_section_names + OLD_SECTION_H (n).sh_name, ".mdebug") + == 0) + { + pHDRR symhdr = (pHDRR) (NEW_SECTION_H (nn).sh_offset + new_base); + + symhdr->cbLineOffset += new_data2_size; + symhdr->cbDnOffset += new_data2_size; + symhdr->cbPdOffset += new_data2_size; + symhdr->cbSymOffset += new_data2_size; + symhdr->cbOptOffset += new_data2_size; + symhdr->cbAuxOffset += new_data2_size; + symhdr->cbSsOffset += new_data2_size; + symhdr->cbSsExtOffset += new_data2_size; + symhdr->cbFdOffset += new_data2_size; + symhdr->cbRfdOffset += new_data2_size; + symhdr->cbExtOffset += new_data2_size; + } +#endif /* __alpha__ */ + +#if defined (__sony_news) && defined (_SYSTYPE_SYSV) + if (NEW_SECTION_H (nn).sh_type == SHT_MIPS_DEBUG + && old_mdebug_index != -1) + { + int diff = NEW_SECTION_H(nn).sh_offset + - OLD_SECTION_H(old_mdebug_index).sh_offset; + HDRR *phdr = (HDRR *)(NEW_SECTION_H (nn).sh_offset + new_base); + + if (diff) + { + phdr->cbLineOffset += diff; + phdr->cbDnOffset += diff; + phdr->cbPdOffset += diff; + phdr->cbSymOffset += diff; + phdr->cbOptOffset += diff; + phdr->cbAuxOffset += diff; + phdr->cbSsOffset += diff; + phdr->cbSsExtOffset += diff; + phdr->cbFdOffset += diff; + phdr->cbRfdOffset += diff; + phdr->cbExtOffset += diff; + } + } +#endif /* __sony_news && _SYSTYPE_SYSV */ + +#if __sgi + /* Adjust the HDRR offsets in .mdebug and copy the line data if it's in its usual 'hole' in the object. Makes the new file debuggable with dbx. patches up two problems: the absolute file offsets @@ -943,7 +1085,7 @@ unexec (char *new_name, HDRR * o_phdrr = (HDRR *)((byte *)old_base + OLD_SECTION_H (n).sh_offset); HDRR * n_phdrr = (HDRR *)((byte *)new_base + NEW_SECTION_H (nn).sh_offset); - unsigned movement = new_offsets_shift; + unsigned movement = new_data2_size; MDEBUGADJUST (idnMax, cbDnOffset); MDEBUGADJUST (ipdMax, cbPdOffset); @@ -977,27 +1119,106 @@ unexec (char *new_name, } } } +#endif /* __sgi */ - /* If it is the symbol table, its st_shndx field needs to be patched. */ + /* If it is the symbol table, its st_shndx field needs to be patched. */ if (NEW_SECTION_H (nn).sh_type == SHT_SYMTAB || NEW_SECTION_H (nn).sh_type == SHT_DYNSYM) { - l_Elf_Shdr *spt = &NEW_SECTION_H (nn); + ElfW(Shdr) *spt = &NEW_SECTION_H (nn); unsigned int num = spt->sh_size / spt->sh_entsize; - l_Elf_Sym * sym = (l_Elf_Sym *) (NEW_SECTION_H (nn).sh_offset - + new_base); + ElfW(Sym) * sym = (ElfW(Sym) *) (NEW_SECTION_H (nn).sh_offset + + new_base); for (; num--; sym++) { - if (sym->st_shndx == SHN_UNDEF - || sym->st_shndx == SHN_ABS - || sym->st_shndx == SHN_COMMON) + if ((sym->st_shndx == SHN_UNDEF) + || (sym->st_shndx == SHN_ABS) + || (sym->st_shndx == SHN_COMMON)) continue; - + PATCH_INDEX (sym->st_shndx); } } } + /* Update the symbol values of _edata and _end. */ + for (n = new_file_h->e_shnum - 1; n; n--) + { + byte *symnames; + ElfW(Sym) *symp, *symendp; + + if (NEW_SECTION_H (n).sh_type != SHT_DYNSYM + && NEW_SECTION_H (n).sh_type != SHT_SYMTAB) + continue; + + symnames = ((byte *) new_base + + NEW_SECTION_H (NEW_SECTION_H (n).sh_link).sh_offset); + symp = (ElfW(Sym) *) (NEW_SECTION_H (n).sh_offset + new_base); + symendp = (ElfW(Sym) *) ((byte *)symp + NEW_SECTION_H (n).sh_size); + + for (; symp < symendp; symp ++) + if (strcmp ((char *) (symnames + symp->st_name), "_end") == 0 + || strcmp ((char *) (symnames + symp->st_name), "end") == 0 + || strcmp ((char *) (symnames + symp->st_name), "_edata") == 0 + || strcmp ((char *) (symnames + symp->st_name), "edata") == 0) + memcpy (&symp->st_value, &new_bss_addr, sizeof (new_bss_addr)); + } + + /* This loop seeks out relocation sections for the data section, so + that it can undo relocations performed by the runtime linker. */ + for (n = new_file_h->e_shnum - 1; n; n--) + { + ElfW(Shdr) section = NEW_SECTION_H (n); + switch (section.sh_type) { + default: + break; + case SHT_REL: + case SHT_RELA: + /* This code handles two different size structs, but there should + be no harm in that provided that r_offset is always the first + member. */ + nn = section.sh_info; + if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".sdata") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".lit4") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".lit8") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".sdata1") + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name), + ".data1")) + { + ElfW(Addr) offset = NEW_SECTION_H (nn).sh_addr - + NEW_SECTION_H (nn).sh_offset; + caddr_t reloc = old_base + section.sh_offset, end; + for (end = reloc + section.sh_size; reloc < end; + reloc += section.sh_entsize) + { + ElfW(Addr) addr = ((ElfW(Rel) *) reloc)->r_offset - offset; +#ifdef __alpha__ + /* The Alpha ELF binutils currently have a bug that + sometimes results in relocs that contain all + zeroes. Work around this for now... */ + if (((ElfW(Rel) *) reloc)->r_offset == 0) + continue; +#endif + memcpy (new_base + addr, old_base + addr, sizeof(ElfW(Addr))); + } + } + break; + } + } + +#ifdef UNEXEC_USE_MAP_PRIVATE + if (lseek (new_file, 0, SEEK_SET) == -1) + fatal ("Can't rewind (%s): errno %d\n", new_name, errno); + + if (write (new_file, new_base, new_file_size) != new_file_size) + fatal ("Can't write (%s): errno %d\n", new_name, errno); +#endif + /* Close the files and make the new file executable. */ if (close (old_file)) @@ -1014,6 +1235,4 @@ unexec (char *new_name, stat_buf.st_mode |= 0111 & ~n; if (chmod (new_name, stat_buf.st_mode) == -1) fatal ("Can't chmod (%s): errno %d\n", new_name, errno); - - return 0; } diff --git a/src/window.c b/src/window.c index cfa89b4..18ee8e4 100644 --- a/src/window.c +++ b/src/window.c @@ -64,8 +64,8 @@ static int window_pixel_height_to_char_height (struct window *w, static int window_char_height_to_pixel_height (struct window *w, int char_height, int include_gutters_p); -static void change_window_height (struct window *w, int delta, int widthflag, - int inpixels); +static void change_window_height (Lisp_Object window, int delta, + Lisp_Object horizontalp, int inpixels); /* Thickness of shadow border around 3d modelines. */ Lisp_Object Vmodeline_shadow_thickness; @@ -1112,19 +1112,20 @@ window_pixel_height (struct window* w) DEFUN ("windowp", Fwindowp, 1, 1, 0, /* -Return t if OBJ is a window. +Return t if OBJECT is a window. */ - (obj)) + (object)) { - return WINDOWP (obj) ? Qt : Qnil; + return WINDOWP (object) ? Qt : Qnil; } DEFUN ("window-live-p", Fwindow_live_p, 1, 1, 0, /* -Return t if OBJ is a window which is currently visible. +Return t if OBJECT is a window which is currently visible. */ - (obj)) + (object)) { - return WINDOWP (obj) && WINDOW_LIVE_P (XWINDOW (obj)) ? Qt : Qnil; + return WINDOWP (object) && WINDOW_LIVE_P (XWINDOW (object)) + ? Qt : Qnil; } DEFUN ("selected-window", Fselected_window, 0, 1, 0, /* @@ -1597,8 +1598,10 @@ Afterwards the end-trigger value is reset to nil. DEFUN ("window-pixel-edges", Fwindow_pixel_edges, 0, 1, 0, /* Return a list of the pixel edge coordinates of WINDOW. -\(LEFT TOP RIGHT BOTTOM), all relative to 0, 0 at top left corner of frame. -The frame toolbars, menubars and gutters are considered to be outside of this area. +The returned list is of the form (LEFT TOP RIGHT BOTTOM), +all relative to 0, 0 at the top left corner of WINDOW's frame. +The frame toolbars, menubars and gutters are considered to be outside +of this area, while the scrollbars are considered to be inside. */ (window)) { @@ -1619,8 +1622,9 @@ The frame toolbars, menubars and gutters are considered to be outside of this ar DEFUN ("window-text-area-pixel-edges", Fwindow_text_area_pixel_edges, 0, 1, 0, /* Return a list of the pixel edge coordinates of the text area of WINDOW. -Returns the list \(LEFT TOP RIGHT BOTTOM), all relative to 0, 0 at the -top left corner of the window. +The returned list is of the form (LEFT TOP RIGHT BOTTOM), +all relative to 0, 0 at the top left corner of the total area allocated +to the window, which includes the scrollbars. */ (window)) { @@ -1646,7 +1650,7 @@ Note that, when WINDOW is the selected window and its buffer is also currently selected, the value returned is the same as (point). It would be more strictly correct to return the `top-level' value of point, outside of any save-excursion forms. -But that is hard to define. +But that value is hard to find. */ (window)) { @@ -1672,12 +1676,13 @@ This is updated by redisplay or by calling `set-window-start'. DEFUN ("window-end", Fwindow_end, 0, 2, 0, /* Return position at which display currently ends in WINDOW. This is updated by redisplay, when it runs to completion. -Simply changing the buffer text or setting `window-start' -does not update this value. -If GUARANTEE is non-nil, then the return value is guaranteed to be -the value of window-end at the end of the next full redisplay assuming -nothing else changes in the meantime. This function is potentially much -slower with this flag set. +Simply changing the buffer text or setting `window-start' does not +update this value. WINDOW defaults to the selected window. + +If optional arg GUARANTEE is non-nil, the return value is guaranteed +to be the same value as this function would return at the end of the +next full redisplay assuming nothing else changes in the meantime. +This function is potentially much slower with this flag set. */ (window, guarantee)) { @@ -1930,7 +1935,7 @@ mark_window_as_deleted (struct window *w) DEFUN ("delete-window", Fdelete_window, 0, 2, "", /* Remove WINDOW from the display. Default is selected window. -If window is the only one on the frame, the frame is destroyed. +If window is the only one on its frame, the frame is deleted as well. Normally, you cannot delete the last non-minibuffer-only frame (you must use `save-buffers-kill-emacs' or `kill-emacs'). However, if optional second argument FORCE is non-nil, you can delete the last frame. (This @@ -2124,27 +2129,30 @@ too. Therefore, `next-window' can be used to iterate through the set of windows even when the minibuffer is on another frame. If the minibuffer does not count, only windows from WINDOW's frame count. -Optional third arg ALL-FRAMES t means include windows on all frames. -ALL-FRAMES nil or omitted means cycle within the frames as specified -above. ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -If ALL-FRAMES is a frame, restrict search to windows on that frame. -Anything else means restrict to WINDOW's frame. - -Optional fourth arg CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on WINDOW's console. Otherwise, all windows are considered. - -If you use consistent values for MINIBUF, ALL-FRAMES, and CONSOLE, you -can use `next-window' to iterate through the entire cycle of acceptable -windows, eventually ending up back at the window you started with. +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES = `visible' means search windows on all visible frames. +WHICH-FRAMES = 0 means search windows on all visible and iconified frames. +WHICH-FRAMES = t means search windows on all frames including invisible frames. +WHICH-FRAMES = a frame means search only windows on that frame. +Anything else means restrict to the selected frame. + +The optional fourth argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all window-system devices. +Any other non-nil value means search all devices. + +If you use consistent values for MINIBUF, WHICH-FRAMES, and WHICH-DEVICES, +you can use `next-window' to iterate through the entire cycle of +acceptable windows, eventually ending up back at the window you started with. `previous-window' traverses the same cycle, in the reverse order. */ - (window, minibuf, all_frames, console)) + (window, minibuf, which_frames, which_devices)) { Lisp_Object tem; Lisp_Object start_window; @@ -2167,25 +2175,25 @@ windows, eventually ending up back at the window you started with. lambda => count none of them or a specific minibuffer window (the active one) to count. */ - /* all_frames == nil doesn't specify which frames to include. */ - if (NILP (all_frames)) - all_frames = (! EQ (minibuf, Qlambda) + /* which_frames == nil doesn't specify which frames to include. */ + if (NILP (which_frames)) + which_frames = (! EQ (minibuf, Qlambda) ? (FRAME_MINIBUF_WINDOW (XFRAME (WINDOW_FRAME (XWINDOW (window))))) : Qnil); - else if (EQ (all_frames, Qvisible)) + else if (EQ (which_frames, Qvisible)) ; - else if (ZEROP (all_frames)) + else if (ZEROP (which_frames)) ; - else if (FRAMEP (all_frames) && ! EQ (all_frames, Fwindow_frame (window))) - /* If all_frames is a frame and window arg isn't on that frame, just + else if (FRAMEP (which_frames) && ! EQ (which_frames, Fwindow_frame (window))) + /* If which_frames is a frame and window arg isn't on that frame, just return the first window on the frame. */ - return frame_first_window (XFRAME (all_frames)); - else if (! EQ (all_frames, Qt)) - all_frames = Qnil; - /* Now `all_frames' is one of: + return frame_first_window (XFRAME (which_frames)); + else if (! EQ (which_frames, Qt)) + which_frames = Qnil; + /* Now `which_frames' is one of: t => search all frames nil => search just the current frame visible => search just visible frames @@ -2207,10 +2215,10 @@ windows, eventually ending up back at the window you started with. Which other frames are acceptable? */ tem = WINDOW_FRAME (XWINDOW (window)); - if (! NILP (all_frames)) + if (! NILP (which_frames)) { Lisp_Object tem1 = tem; - tem = next_frame (tem, all_frames, console); + tem = next_frame (tem, which_frames, which_devices); /* In the case where the minibuffer is active, and we include its frame as well as the selected one, @@ -2267,27 +2275,30 @@ too. Therefore, `previous-window' can be used to iterate through the set of windows even when the minibuffer is on another frame. If the minibuffer does not count, only windows from WINDOW's frame count. -Optional third arg ALL-FRAMES t means include windows on all frames. -ALL-FRAMES nil or omitted means cycle within the frames as specified -above. ALL-FRAMES = `visible' means include windows on all visible frames. -ALL-FRAMES = 0 means include windows on all visible and iconified frames. -If ALL-FRAMES is a frame, restrict search to windows on that frame. -Anything else means restrict to WINDOW's frame. - -Optional fourth arg CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on WINDOW's console. Otherwise, all windows are considered. - -If you use consistent values for MINIBUF, ALL-FRAMES, and CONSOLE, you -can use `previous-window' to iterate through the entire cycle of acceptable -windows, eventually ending up back at the window you started with. +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES = `visible' means search windows on all visible frames. +WHICH-FRAMES = 0 means search windows on all visible and iconified frames. +WHICH-FRAMES = t means search windows on all frames including invisible frames. +WHICH-FRAMES = a frame means search only windows on that frame. +Anything else means restrict to the selected frame. + +The optional fourth argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all window-system devices. +Any other non-nil value means search all devices. + +If you use consistent values for MINIBUF, WHICH-FRAMES, and WHICH-DEVICES, +you can use `previous-window' to iterate through the entire cycle of +acceptable windows, eventually ending up back at the window you started with. `next-window' traverses the same cycle, in the reverse order. */ - (window, minibuf, all_frames, console)) + (window, minibuf, which_frames, devices)) { Lisp_Object tem; Lisp_Object start_window; @@ -2310,26 +2321,26 @@ windows, eventually ending up back at the window you started with. lambda => count none of them or a specific minibuffer window (the active one) to count. */ - /* all_frames == nil doesn't specify which frames to include. + /* which_frames == nil doesn't specify which frames to include. Decide which frames it includes. */ - if (NILP (all_frames)) - all_frames = (! EQ (minibuf, Qlambda) + if (NILP (which_frames)) + which_frames = (! EQ (minibuf, Qlambda) ? (FRAME_MINIBUF_WINDOW (XFRAME (WINDOW_FRAME (XWINDOW (window))))) : Qnil); - else if (EQ (all_frames, Qvisible)) + else if (EQ (which_frames, Qvisible)) ; - else if (ZEROP (all_frames)) + else if (ZEROP (which_frames)) ; - else if (FRAMEP (all_frames) && ! EQ (all_frames, Fwindow_frame (window))) - /* If all_frames is a frame and window arg isn't on that frame, just + else if (FRAMEP (which_frames) && ! EQ (which_frames, Fwindow_frame (window))) + /* If which_frames is a frame and window arg isn't on that frame, just return the first window on the frame. */ - return frame_first_window (XFRAME (all_frames)); - else if (! EQ (all_frames, Qt)) - all_frames = Qnil; - /* Now `all_frames' is one of: + return frame_first_window (XFRAME (which_frames)); + else if (! EQ (which_frames, Qt)) + which_frames = Qnil; + /* Now `which_frames' is one of: t => search all frames nil => search just the current frame visible => search just visible frames @@ -2351,7 +2362,7 @@ windows, eventually ending up back at the window you started with. Which frames are acceptable? */ tem = WINDOW_FRAME (XWINDOW (window)); - if (! NILP (all_frames)) + if (! NILP (which_frames)) /* It's actually important that we use previous_frame here, rather than next_frame. All the windows acceptable according to the given parameters should form a ring; @@ -2363,7 +2374,7 @@ windows, eventually ending up back at the window you started with. met. */ { Lisp_Object tem1 = tem; - tem = previous_frame (tem, all_frames, console); + tem = previous_frame (tem, which_frames, devices); /* In the case where the minibuffer is active, and we include its frame as well as the selected one, next_frame may get stuck in that frame. @@ -2462,43 +2473,46 @@ Return the next window which is vertically after WINDOW. } DEFUN ("other-window", Fother_window, 1, 3, "p", /* -Select the N'th different window on this frame. +Select the COUNT'th different window on this frame. All windows on current frame are arranged in a cyclic order. -This command selects the window N steps away in that order. -A negative N moves in the opposite order. - -If optional argument FRAME is `visible', search all visible frames. -If FRAME is 0, search all visible and iconified frames. -If FRAME is t, search all frames. -If FRAME is nil, search only the selected frame. -If FRAME is a frame, search only that frame. - -Optional third argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. +This command selects the window COUNT steps away in that order. +A negative COUNT moves in the opposite order. + +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +WHICH-FRAMES = `visible' means search windows on all visible frames. +WHICH-FRAMES = 0 means search windows on all visible and iconified frames. +WHICH-FRAMES = t means search windows on all frames including invisible frames. +WHICH-FRAMES = a frame means search only windows on that frame. +Anything else means restrict to the selected frame. + +The optional argument WHICH-DEVICES further clarifies on which devices +to search for frames as specified by WHICH-FRAMES. This value is only +meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all window-system devices. +Any other non-nil value means search all devices. */ - (n, frame, console)) + (count, which_frames, which_devices)) { int i; Lisp_Object w; - CHECK_INT (n); + CHECK_INT (count); w = Fselected_window (Qnil); - i = XINT (n); + i = XINT (count); while (i > 0) { - w = Fnext_window (w, Qnil, frame, console); + w = Fnext_window (w, Qnil, which_frames, which_devices); i--; } while (i < 0) { - w = Fprevious_window (w, Qnil, frame, console); + w = Fprevious_window (w, Qnil, which_frames, which_devices); i++; } Fselect_window (w, Qnil); @@ -2531,9 +2545,9 @@ static Lisp_Object window_loop (enum window_loop type, Lisp_Object obj, int mini, - Lisp_Object frames, + Lisp_Object which_frames, int dedicated_too, - Lisp_Object console) + Lisp_Object which_devices) { /* This function can GC if type == DELETE_BUFFER_WINDOWS or UNSHOW_BUFFER */ Lisp_Object w; @@ -2552,9 +2566,9 @@ window_loop (enum window_loop type, /* If we're only looping through windows on a particular frame, FRAME points to that frame. If we're looping through windows on all frames, FRAME is 0. */ - if (FRAMEP (frames)) - frame = XFRAME (frames); - else if (NILP (frames)) + if (FRAMEP (which_frames)) + frame = XFRAME (which_frames); + else if (NILP (which_frames)) frame = selected_frame (); else frame = 0; @@ -2564,10 +2578,10 @@ window_loop (enum window_loop type, or Qt otherwise. */ if (frame) frame_arg = Qlambda; - else if (ZEROP (frames)) - frame_arg = frames; - else if (EQ (frames, Qvisible)) - frame_arg = frames; + else if (ZEROP (which_frames)) + frame_arg = which_frames; + else if (EQ (which_frames, Qvisible)) + frame_arg = which_frames; DEVICE_LOOP_NO_BREAK (devcons, concons) { @@ -2582,10 +2596,10 @@ window_loop (enum window_loop type, if (NILP (the_frame)) continue; - if (!device_matches_console_spec (device, - NILP (console) ? - FRAME_CONSOLE (XFRAME (the_frame)) : - console)) + if (!device_matches_device_spec (device, + NILP (which_devices) ? + FRAME_CONSOLE (XFRAME (the_frame)) : + which_devices)) continue; /* Pick a window to start with. */ @@ -2855,31 +2869,35 @@ buffer_window_mru (struct window *w) DEFUN ("get-lru-window", Fget_lru_window, 0, 2, 0, /* Return the window least recently selected or used for display. -If optional argument FRAME is `visible', search all visible frames. -If FRAME is 0, search all visible and iconified frames. -If FRAME is t, search all frames. -If FRAME is nil, search only the selected frame. -If FRAME is a frame, search only that frame. - -Optional second argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. + +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +If optional argument WHICH-FRAMES is `visible', search all visible frames. +If WHICH-FRAMES is 0, search all visible and iconified frames. +If WHICH-FRAMES is t, search all frames. +If WHICH-FRAMES is nil, search only the selected frame. +If WHICH-FRAMES is a frame, search only that frame. + +The optional argument WHICH-DEVICES further clarifies on which devices +to search for frames as specified by WHICH-FRAMES. This value is only +meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices. */ - (frame, console)) + (which_frames, which_devices)) { Lisp_Object w; /* First try for a non-dedicated window that is full-width */ - w = window_loop (GET_LRU_WINDOW, Qt, 0, frame, 0, console); + w = window_loop (GET_LRU_WINDOW, Qt, 0, which_frames, 0, which_devices); if (!NILP (w) && !EQ (w, Fselected_window (Qnil))) return w; /* Then try for any non-dedicated window */ - w = window_loop (GET_LRU_WINDOW, Qnil, 0, frame, 0, console); + w = window_loop (GET_LRU_WINDOW, Qnil, 0, which_frames, 0, which_devices); if (!NILP (w) && !EQ (w, Fselected_window (Qnil))) return w; @@ -2889,12 +2907,12 @@ Otherwise, all windows are considered. shit is so disgusting and awful that it needs to be rethought from scratch. */ /* then try for a dedicated window that is full-width */ - w = window_loop (GET_LRU_WINDOW, Qt, 0, frame, 1, console); + w = window_loop (GET_LRU_WINDOW, Qt, 0, which_frames, 1, which_devices); if (!NILP (w) && !EQ (w, Fselected_window (Qnil))) return w; /* If none of them, then all windows, dedicated or not. */ - w = window_loop (GET_LRU_WINDOW, Qnil, 0, frame, 1, console); + w = window_loop (GET_LRU_WINDOW, Qnil, 0, which_frames, 1, which_devices); /* At this point we damn well better have found something. */ if (NILP (w)) abort (); @@ -2905,52 +2923,62 @@ Otherwise, all windows are considered. DEFUN ("get-largest-window", Fget_largest_window, 0, 2, 0, /* Return the window largest in area. -If optional argument FRAME is `visible', search all visible frames. -If FRAME is 0, search all visible and iconified frames. -If FRAME is t, search all frames. -If FRAME is nil, search only the selected frame. -If FRAME is a frame, search only that frame. - -Optional second argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. + +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +If optional argument WHICH-FRAMES is `visible', search all visible frames. +If WHICH-FRAMES is 0, search all visible and iconified frames. +If WHICH-FRAMES is t, search all frames. +If WHICH-FRAMES is nil, search only the selected frame. +If WHICH-FRAMES is a frame, search only that frame. + +The optional argument WHICH-DEVICES further clarifies on which devices +to search for frames as specified by WHICH-FRAMES. This value is only +meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices. */ - (frame, console)) + (which_frames, which_devices)) { /* Don't search dedicated windows because FSFmacs doesn't. This stuff is all black magic so don't try to apply common sense to it. */ - return window_loop (GET_LARGEST_WINDOW, Qnil, 0, frame, 0, console); + return window_loop (GET_LARGEST_WINDOW, Qnil, 0, + which_frames, 0, which_devices); } DEFUN ("get-buffer-window", Fget_buffer_window, 1, 3, 0, /* Return a window currently displaying BUFFER, or nil if none. -If optional argument FRAME is `visible', search all visible frames. -If optional argument FRAME is 0, search all visible and iconified frames. -If FRAME is t, search all frames. -If FRAME is nil, search only the selected frame. -If FRAME is a frame, search only that frame. - -Optional third argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. + +By default, only the windows in the selected frame are considered. +The optional argument WHICH-FRAMES changes this behavior: +If optional argument WHICH-FRAMES is `visible', search all visible frames. +If WHICH-FRAMES is 0, search all visible and iconified frames. +If WHICH-FRAMES is t, search all frames. +If WHICH-FRAMES is nil, search only the selected frame. +If WHICH-FRAMES is a frame, search only that frame. + +The optional argument WHICH-DEVICES further clarifies on which devices +to search for frames as specified by WHICH-FRAMES. This value is only +meaningful if WHICH-FRAMES is non-nil. +If nil or omitted, search all devices on the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on window-system consoles. +Any other non-nil value means search all devices. */ - (buffer, frame, console)) + (buffer, which_frames, which_devices)) { buffer = Fget_buffer (buffer); if (BUFFERP (buffer)) /* Search dedicated windows too. (Doesn't matter here anyway.) */ - return window_loop (GET_BUFFER_WINDOW, buffer, 1, frame, 1, console); + return window_loop (GET_BUFFER_WINDOW, buffer, 1, + which_frames, 1, which_devices); else return Qnil; } @@ -3033,53 +3061,81 @@ value is reasonable when this function is called. DEFUN ("delete-windows-on", Fdelete_windows_on, 1, 3, "bDelete windows on (buffer): ", /* Delete all windows showing BUFFER. -Optional second argument FRAME controls which frames are affected. + +Optional second argument WHICH-FRAMES controls which frames are affected. If nil or omitted, delete all windows showing BUFFER in any frame. If t, delete only windows showing BUFFER in the selected frame. If `visible', delete all windows showing BUFFER in any visible frame. If a frame, delete only windows showing BUFFER in that frame. - -Optional third argument CONSOLE controls which consoles or devices the -returned window may be on. If CONSOLE is a console, return windows only -on that console. If CONSOLE is a device, return windows only on that -device. If CONSOLE is a console type, return windows only on consoles -of that type. If CONSOLE is 'window-system, return any windows on any -window-system consoles. If CONSOLE is nil or omitted, return windows only -on FRAME'S console, or on the selected console if FRAME is not a frame. -Otherwise, all windows are considered. +Warning: WHICH-FRAMES has the same meaning as with `next-window', +except that the meanings of nil and t are reversed. + +The optional third argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is not t. +If nil or omitted, search only the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on a window system. +Any other non-nil value means search all devices. */ - (buffer, frame, console)) + (buffer, which_frames, which_devices)) { /* This function can GC */ - /* FRAME uses t and nil to mean the opposite of what window_loop - expects. */ - if (!FRAMEP (frame)) - frame = NILP (frame) ? Qt : Qnil; + buffer = Fget_buffer (buffer); + CHECK_BUFFER (buffer); - if (!NILP (buffer)) - { - buffer = Fget_buffer (buffer); - CHECK_BUFFER (buffer); - /* Ignore dedicated windows. */ - window_loop (DELETE_BUFFER_WINDOWS, buffer, 0, frame, 0, console); - } + /* WHICH-FRAMES values t and nil mean the opposite of what + window_loop expects. */ + if (EQ (which_frames, Qnil)) + which_frames = Qt; + else if (EQ (which_frames, Qt)) + which_frames = Qnil; + + /* Ignore dedicated windows. */ + window_loop (DELETE_BUFFER_WINDOWS, buffer, 0, + which_frames, 0, which_devices); return Qnil; } -DEFUN ("replace-buffer-in-windows", Freplace_buffer_in_windows, 1, 1, +DEFUN ("replace-buffer-in-windows", Freplace_buffer_in_windows, 1, 3, "bReplace buffer in windows: ", /* Replace BUFFER with some other buffer in all windows showing it. + +Optional second argument WHICH-FRAMES controls which frames are affected. +If nil or omitted, all frames are affected. +If t, only the selected frame is affected. +If `visible', all visible frames are affected. +If a frame, only that frame is affected. +Warning: WHICH-FRAMES has the same meaning as with `next-window', +except that the meanings of nil and t are reversed. + +The optional third argument WHICH-DEVICES further clarifies on which +devices to search for frames as specified by WHICH-FRAMES. This value +is only meaningful if WHICH-FRAMES is not t. +If nil or omitted, search only the selected console. +If a device, only search that device. +If a console, search all devices on that console. +If a device type, search all devices of that type. +If `window-system', search all devices on a window system. +Any other non-nil value means search all devices. */ - (buffer)) + (buffer, which_frames, which_devices)) { /* This function can GC */ - if (!NILP (buffer)) - { - buffer = Fget_buffer (buffer); - CHECK_BUFFER (buffer); - /* Ignore dedicated windows. */ - window_loop (UNSHOW_BUFFER, buffer, 0, Qt, 0, Qnil); - } + buffer = Fget_buffer (buffer); + CHECK_BUFFER (buffer); + + /* WHICH-FRAMES values t and nil mean the opposite of what + window_loop expects. */ + if (EQ (which_frames, Qnil)) + which_frames = Qt; + else if (EQ (which_frames, Qt)) + which_frames = Qnil; + + /* Ignore dedicated windows. */ + window_loop (UNSHOW_BUFFER, buffer, 0, which_frames, 0, which_devices); return Qnil; } @@ -3530,16 +3586,16 @@ make_dummy_parent (Lisp_Object window) DEFUN ("split-window", Fsplit_window, 0, 3, "", /* Split WINDOW, putting SIZE lines in the first of the pair. -WINDOW defaults to selected one and SIZE to half its size. +WINDOW defaults to the selected one and SIZE to half its size. If optional third arg HORFLAG is non-nil, split side by side and put SIZE columns in the first of the pair. */ - (window, chsize, horflag)) + (window, size, horflag)) { Lisp_Object new; struct window *o, *p; struct frame *f; - int size; + int csize; int psize; if (NILP (window)) @@ -3550,29 +3606,29 @@ and put SIZE columns in the first of the pair. o = XWINDOW (window); f = XFRAME (WINDOW_FRAME (o)); - if (NILP (chsize)) + if (NILP (size)) { if (!NILP (horflag)) /* In the new scheme, we are symmetric with respect to separators so there is no need to do weird things here. */ { psize = WINDOW_WIDTH (o) >> 1; - size = window_pixel_width_to_char_width (o, psize, 0); + csize = window_pixel_width_to_char_width (o, psize, 0); } else { psize = WINDOW_HEIGHT (o) >> 1; - size = window_pixel_height_to_char_height (o, psize, 1); + csize = window_pixel_height_to_char_height (o, psize, 1); } } else { - CHECK_INT (chsize); - size = XINT (chsize); + CHECK_INT (size); + csize = XINT (size); if (!NILP (horflag)) - psize = window_char_width_to_pixel_width (o, size, 0); + psize = window_char_width_to_pixel_width (o, csize, 0); else - psize = window_char_height_to_pixel_height (o, size, 1); + psize = window_char_height_to_pixel_height (o, csize, 1); } if (MINI_WINDOW_P (o)) @@ -3584,11 +3640,11 @@ and put SIZE columns in the first of the pair. if (NILP (horflag)) { - if (size < window_min_height) - error ("Window height %d too small (after splitting)", size); - if (size + window_min_height > window_char_height (o, 1)) + if (csize < window_min_height) + error ("Window height %d too small (after splitting)", csize); + if (csize + window_min_height > window_char_height (o, 1)) error ("Window height %d too small (after splitting)", - window_char_height (o, 1) - size); + window_char_height (o, 1) - csize); if (NILP (o->parent) || NILP (XWINDOW (o->parent)->vchild)) { @@ -3601,11 +3657,11 @@ and put SIZE columns in the first of the pair. } else { - if (size < window_min_width) - error ("Window width %d too small (after splitting)", size); - if (size + window_min_width > window_char_width (o, 0)) + if (csize < window_min_width) + error ("Window width %d too small (after splitting)", csize); + if (csize + window_min_width > window_char_width (o, 0)) error ("Window width %d too small (after splitting)", - window_char_width (o, 0) - size); + window_char_width (o, 0) - csize); if (NILP (o->parent) || NILP (XWINDOW (o->parent)->hchild)) { @@ -3667,58 +3723,54 @@ and put SIZE columns in the first of the pair. DEFUN ("enlarge-window", Fenlarge_window, 1, 3, "_p", /* -Make the selected window N lines bigger. -From program, optional second arg SIDE non-nil means grow sideways N columns, -and optional third arg WINDOW specifies the window to change instead of the -selected window. +Make the selected window COUNT lines taller. +From program, optional second arg HORIZONTALP non-nil means grow +sideways COUNT columns, and optional third arg WINDOW specifies the +window to change instead of the selected window. */ - (n, side, window)) + (count, horizontalp, window)) { - struct window *w = decode_window (window); - CHECK_INT (n); - change_window_height (w, XINT (n), !NILP (side), /* inpixels */ 0); + CHECK_INT (count); + change_window_height (window, XINT (count), horizontalp, /* inpixels */ 0); return Qnil; } DEFUN ("enlarge-window-pixels", Fenlarge_window_pixels, 1, 3, "_p", /* -Make the selected window N pixels bigger. -From program, optional second arg SIDE non-nil means grow sideways N pixels, -and optional third arg WINDOW specifies the window to change instead of the -selected window. +Make the selected window COUNT pixels taller. +From program, optional second arg HORIZONTALP non-nil means grow +sideways COUNT pixels, and optional third arg WINDOW specifies the +window to change instead of the selected window. */ - (n, side, window)) + (count, horizontalp, window)) { - struct window *w = decode_window (window); - CHECK_INT (n); - change_window_height (w, XINT (n), !NILP (side), /* inpixels */ 1); + CHECK_INT (count); + change_window_height (window, XINT (count), horizontalp, /* inpixels */ 1); return Qnil; } DEFUN ("shrink-window", Fshrink_window, 1, 3, "_p", /* -Make the selected window N lines smaller. -From program, optional second arg SIDE non-nil means shrink sideways N columns, -and optional third arg WINDOW specifies the window to change instead of the -selected window. +Make the selected window COUNT lines shorter. +From program, optional second arg HORIZONTALP non-nil means shrink +sideways COUNT columns, and optional third arg WINDOW specifies the +window to change instead of the selected window. */ - (n, side, window)) + (count, horizontalp, window)) { - CHECK_INT (n); - change_window_height (decode_window (window), -XINT (n), !NILP (side), - /* inpixels */ 0); + CHECK_INT (count); + change_window_height (window, -XINT (count), horizontalp, /* inpixels */ 0); return Qnil; } DEFUN ("shrink-window-pixels", Fshrink_window_pixels, 1, 3, "_p", /* -Make the selected window N pixels smaller. -From program, optional second arg SIDE non-nil means shrink sideways N pixels, -and optional third arg WINDOW specifies the window to change instead of the -selected window. +Make the selected window COUNT pixels smaller. +From program, optional second arg HORIZONTALP non-nil means shrink +sideways COUNT pixels, and optional third arg WINDOW specifies the +window to change instead of the selected window. */ - (n, side, window)) + (count, horizontalp, window)) { - CHECK_INT (n); - change_window_height (decode_window (window), -XINT (n), !NILP (side), - /* inpixels */ 1); + CHECK_INT (count); + change_window_height (window, -XINT (count), horizontalp, /* inpixels */ 1); return Qnil; } @@ -3963,11 +4015,12 @@ window_pixheight (Lisp_Object w) keep everything consistent. */ static void -change_window_height (struct window *win, int delta, int widthflag, +change_window_height (Lisp_Object window, int delta, Lisp_Object horizontalp, int inpixels) { + struct window *win = decode_window (window); + int widthflag = !NILP (horizontalp); Lisp_Object parent; - Lisp_Object window; struct window *w; struct frame *f; int *sizep; @@ -4119,10 +4172,11 @@ change_window_height (struct window *win, int delta, int widthflag, -/* Scroll contents of window WINDOW up N lines. If N < (top line height / - average line height) then we just adjust the top clip. */ +/* Scroll contents of window WINDOW up COUNT lines. + If COUNT < (top line height / average line height) then we just adjust + the top clip. */ void -window_scroll (Lisp_Object window, Lisp_Object n, int direction, +window_scroll (Lisp_Object window, Lisp_Object count, int direction, Error_behavior errb) { struct window *w = XWINDOW (window); @@ -4166,14 +4220,14 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction, MARK_WINDOWS_CHANGED (w); } - if (!NILP (n)) + if (!NILP (count)) { - if (EQ (n, Qminus)) + if (EQ (count, Qminus)) direction *= -1; else { - n = Fprefix_numeric_value (n); - value = XINT (n) * direction; + count = Fprefix_numeric_value (count); + value = XINT (count) * direction; if (!value) return; /* someone just made a pointless call */ @@ -4182,7 +4236,7 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction, /* If the user didn't specify how far to scroll then we have to figure it out by ourselves. */ - if (NILP (n) || EQ (n, Qminus)) + if (NILP (count) || EQ (count, Qminus)) { /* Going forwards is easy. If that is what we are doing then just set value and the section which handles the user specifying a @@ -4404,32 +4458,32 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction, } DEFUN ("scroll-up", Fscroll_up, 0, 1, "_P", /* -Scroll text of current window upward N lines; or near full screen if no arg. +Scroll text of current window up COUNT lines; or near full screen if no arg. A near full screen is `next-screen-context-lines' less than a full screen. -Negative N means scroll downward. +Negative COUNT means scroll downward. When calling from a program, supply an integer as argument or nil. On attempt to scroll past end of buffer, `end-of-buffer' is signaled. On attempt to scroll past beginning of buffer, `beginning-of-buffer' is signaled. */ - (n)) + (count)) { - window_scroll (Fselected_window (Qnil), n, 1, ERROR_ME); + window_scroll (Fselected_window (Qnil), count, 1, ERROR_ME); return Qnil; } DEFUN ("scroll-down", Fscroll_down, 0, 1, "_P", /* -Scroll text of current window downward N lines; or near full screen if no arg. +Scroll text of current window down COUNT lines; or near full screen if no arg. A near full screen is `next-screen-context-lines' less than a full screen. -Negative N means scroll upward. +Negative COUNT means scroll upward. When calling from a program, supply a number as argument or nil. On attempt to scroll past end of buffer, `end-of-buffer' is signaled. On attempt to scroll past beginning of buffer, `beginning-of-buffer' is signaled. */ - (n)) + (count)) { - window_scroll (Fselected_window (Qnil), n, -1, ERROR_ME); + window_scroll (Fselected_window (Qnil), count, -1, ERROR_ME); return Qnil; } @@ -4479,9 +4533,9 @@ showing that buffer is used. } DEFUN ("scroll-other-window", Fscroll_other_window, 0, 1, "_P", /* -Scroll next window upward N lines; or near full frame if no arg. +Scroll next window upward COUNT lines; or near full frame if no arg. The next window is the one below the current one; or the one at the top -if the current one is at the bottom. Negative N means scroll downward. +if the current one is at the bottom. Negative COUNT means scroll downward. When calling from a program, supply a number as argument or nil. If in the minibuffer, `minibuffer-scroll-window' if non-nil @@ -4489,40 +4543,40 @@ specifies the window to scroll. If `other-window-scroll-buffer' is non-nil, scroll the window showing that buffer, popping the buffer up if necessary. */ - (n)) + (count)) { - window_scroll (Fother_window_for_scrolling (), n, 1, ERROR_ME); + window_scroll (Fother_window_for_scrolling (), count, 1, ERROR_ME); return Qnil; } DEFUN ("scroll-left", Fscroll_left, 0, 1, "_P", /* -Scroll selected window display N columns left. -Default for N is window width minus 2. +Scroll selected window display COUNT columns left. +Default for COUNT is window width minus 2. */ - (n)) + (count)) { Lisp_Object window = Fselected_window (Qnil); struct window *w = XWINDOW (window); - int count = (NILP (n) ? - window_char_width (w, 0) - 2 : - XINT (Fprefix_numeric_value (n))); + int n = (NILP (count) ? + window_char_width (w, 0) - 2 : + XINT (Fprefix_numeric_value (count))); - return Fset_window_hscroll (window, make_int (w->hscroll + count)); + return Fset_window_hscroll (window, make_int (w->hscroll + n)); } DEFUN ("scroll-right", Fscroll_right, 0, 1, "_P", /* -Scroll selected window display N columns right. -Default for N is window width minus 2. +Scroll selected window display COUNT columns right. +Default for COUNT is window width minus 2. */ - (n)) + (count)) { Lisp_Object window = Fselected_window (Qnil); struct window *w = XWINDOW (window); - int count = (NILP (n) ? - window_char_width (w, 0) - 2 : - XINT (Fprefix_numeric_value (n))); + int n = (NILP (count) ? + window_char_width (w, 0) - 2 : + XINT (Fprefix_numeric_value (count))); - return Fset_window_hscroll (window, make_int (w->hscroll - count)); + return Fset_window_hscroll (window, make_int (w->hscroll - n)); } DEFUN ("center-to-window-line", Fcenter_to_window_line, 0, 2, "_P", /* @@ -5050,9 +5104,9 @@ window_config_equal (Lisp_Object conf1, Lisp_Object conf2) DEFUN ("window-configuration-p", Fwindow_configuration_p, 1, 1, 0, /* Return t if OBJECT is a window-configuration object. */ - (obj)) + (object)) { - return WINDOW_CONFIGURATIONP (obj) ? Qt : Qnil; + return WINDOW_CONFIGURATIONP (object) ? Qt : Qnil; } static int @@ -5729,8 +5783,9 @@ DEFUN ("current-window-configuration", Fcurrent_window_configuration, 0, 1, 0, / Return an object representing the current window configuration of FRAME. If FRAME is nil or omitted, use the selected frame. This describes the number of windows, their sizes and current buffers, -and for each displayed buffer, where display starts, and the positions of -point and mark. An exception is made for point in the current buffer: +and for each window on FRAME the displayed buffer, where display +starts, and the positions of point and mark. +An exception is made for point in the current buffer: its value is -not- saved. */ (frame)) @@ -6136,7 +6191,7 @@ This is a specifier; use `set-specifier' to change it. set_specifier_caching (Vmodeline_shadow_thickness, offsetof (struct window, modeline_shadow_thickness), modeline_shadow_thickness_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("has-modeline-p", &Vhas_modeline_p /* *Whether the modeline should be displayed. @@ -6152,7 +6207,7 @@ This is a specifier; use `set-specifier' to change it. has changed, but not one to indicate that the modeline has been turned off or on. */ some_window_value_changed, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-always-visible-p", &Vvertical_divider_always_visible_p /* @@ -6171,7 +6226,7 @@ This is a specifier; use `set-specifier' to change it. offsetof (struct window, vertical_divider_always_visible_p), vertical_divider_changed_in_window, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-shadow-thickness", &Vvertical_divider_shadow_thickness /* *How thick to draw 3D shadows around vertical dividers. @@ -6186,7 +6241,7 @@ This is a specifier; use `set-specifier' to change it. offsetof (struct window, vertical_divider_shadow_thickness), vertical_divider_changed_in_window, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-line-width", &Vvertical_divider_line_width /* *The width of the vertical dividers, not including shadows. @@ -6217,7 +6272,7 @@ This is a specifier; use `set-specifier' to change it. offsetof (struct window, vertical_divider_line_width), vertical_divider_changed_in_window, - 0, 0); + 0, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-spacing", &Vvertical_divider_spacing /* *How much space to leave around the vertical dividers. @@ -6246,5 +6301,5 @@ This is a specifier; use `set-specifier' to change it. set_specifier_caching (Vvertical_divider_spacing, offsetof (struct window, vertical_divider_spacing), vertical_divider_changed_in_window, - 0, 0); + 0, 0, 0); } diff --git a/tests/ChangeLog b/tests/ChangeLog index e435bb2..4accfc3 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,39 @@ +2000-11-14 Martin Buchholz + + * XEmacs 21.2.37 is released. + +2000-11-09 Yoshiki Hayashi + + * automated/lisp-test.el: More format tests. + +2000-11-10 Yoshiki Hayashi + + * automated/ccl-tests.el (ccl-test-simple-read-and-write): + (ccl-test-read-write-multibyte-character): Use make-char + for non MULE XEmacs. + +2000-10-15 MIYASHITA Hisashi + + * automated/ccl-tests.el: New file. + +2000-10-30 Yoshiki Hayashi + + * automated/lisp-test.el: Add test for format. + +2000-10-13 Yoshiki Hayashi + + * automated/byte-compiler-test.el: Add optimization test for + byte-after-unbind-ops. + +2000-10-13 Yoshiki Hayashi + + * automated/hash-table-test.el: Make new cons cell for + equal and not eq object. + +2000-10-03 Yoshiki Hayashi + + * automated/lisp-test.el: Add replace-match test. + 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. diff --git a/tests/automated/byte-compiler-tests.el b/tests/automated/byte-compiler-tests.el index 21c110f..11f355a 100644 --- a/tests/automated/byte-compiler-tests.el +++ b/tests/automated/byte-compiler-tests.el @@ -118,3 +118,102 @@ (before-and-after-compile-equal (- 3)) (before-and-after-compile-equal (- simplyamarker 1)) (before-and-after-compile-equal (- simplyamarker)) + +;; byte-after-unbind-ops + +;; byte-constant +;; byte-dup + +;; byte-symbolp +(before-and-after-compile-equal + (let ((x 's)) + (unwind-protect + (symbolp x) + (setq x 1)))) + +;; byte-consp +(before-and-after-compile-equal + (let ((x '(a b))) + (unwind-protect + (consp x) + (setq x 1)))) + +;; byte-stringp +(before-and-after-compile-equal + (let ((x "a")) + (unwind-protect + (stringp x) + (setq x 1)))) + +;; byte-listp +(before-and-after-compile-equal + (let ((x '(a b c))) + (unwind-protect + (listp x) + (setq x 1)))) + +;; byte-numberp +(before-and-after-compile-equal + (let ((x 1)) + (unwind-protect + (numberp x) + (setq x nil)))) + +;; byte-integerp +(before-and-after-compile-equal + (let ((x 1)) + (unwind-protect + (integerp x) + (setq x nil)))) + +;; byte-equal +(before-and-after-compile-equal + (let ((x 'a) + (y 'a)) + (unwind-protect + (eq x y) + (setq x 'c)))) + +;; byte-not +(before-and-after-compile-equal + (let (x) + (unwind-protect + (not x) + (setq x t)))) + +;; byte-cons +(before-and-after-compile-equal + (equal '(1 . 2) + (let ((x 1) + (y 2)) + (unwind-protect + (cons x y) + (setq x t))))) + +;; byte-list1 +(before-and-after-compile-equal + (equal '(1) + (let ((x 1)) + (unwind-protect + (list x) + (setq x t))))) + +;; byte-list2 +(before-and-after-compile-equal + (equal '(1 . 2) + (let ((x 1) + (y 2)) + (unwind-protect + (list x y) + (setq x t))))) + +;; byte-interactive-p + +;; byte-equal +(before-and-after-compile-equal + (let (x y) + (setq x '(1 . 2)) + (setq y '(1 . 2)) + (unwind-protect + (equal x y) + (setq y '(1 . 3))))) diff --git a/tests/automated/hash-table-tests.el b/tests/automated/hash-table-tests.el index 8aba946..1c8af88 100644 --- a/tests/automated/hash-table-tests.el +++ b/tests/automated/hash-table-tests.el @@ -164,13 +164,13 @@ (dotimes (j iterations) (puthash (+ one 0.0) t ht) (puthash (+ two 0.0) t ht) - (puthash (concat "1" "2") t ht) - (puthash (concat "3" "4") t ht)) + (puthash (cons 1 2) t ht) + (puthash (cons 3 4) t ht)) (Assert (eq (hashtable-test-function ht) 'eq)) (Assert (eq (hash-table-test ht) 'eq)) (Assert (= (* iterations 4) (hash-table-count ht))) (Assert (eq nil (gethash 1.0 ht))) - (Assert (eq nil (gethash "12" ht))) + (Assert (eq nil (gethash '(1 . 2) ht))) (check-copy ht) ) @@ -178,13 +178,13 @@ (dotimes (j iterations) (puthash (+ one 0.0) t ht) (puthash (+ two 0.0) t ht) - (puthash (concat "1" "2") t ht) - (puthash (concat "3" "4") t ht)) + (puthash (cons 1 2) t ht) + (puthash (cons 3 4) t ht)) (Assert (eq (hashtable-test-function ht) 'eql)) (Assert (eq (hash-table-test ht) 'eql)) (Assert (= (+ 2 (* 2 iterations)) (hash-table-count ht))) (Assert (eq t (gethash 1.0 ht))) - (Assert (eq nil (gethash "12" ht))) + (Assert (eq nil (gethash '(1 . 2) ht))) (check-copy ht) ) @@ -192,13 +192,13 @@ (dotimes (j iterations) (puthash (+ one 0.0) t ht) (puthash (+ two 0.0) t ht) - (puthash (concat "1" "2") t ht) - (puthash (concat "3" "4") t ht)) + (puthash (cons 1 2) t ht) + (puthash (cons 3 4) t ht)) (Assert (eq (hashtable-test-function ht) 'equal)) (Assert (eq (hash-table-test ht) 'equal)) (Assert (= 4 (hash-table-count ht))) (Assert (eq t (gethash 1.0 ht))) - (Assert (eq t (gethash "12" ht))) + (Assert (eq t (gethash '(1 . 2) ht))) (check-copy ht) ) diff --git a/tests/automated/lisp-tests.el b/tests/automated/lisp-tests.el index 66c9272..c4d22b1 100644 --- a/tests/automated/lisp-tests.el +++ b/tests/automated/lisp-tests.el @@ -832,6 +832,15 @@ (Assert (equal (split-string ",foo,,bar," ",+") '("" "foo" "bar" ""))) (Assert (not (string-match "\\(\\.\\=\\)" "."))) +(Assert (string= "" (let ((str "test string")) + (if (string-match "^.*$" str) + (replace-match "\\U" t nil str))))) +(with-temp-buffer + (erase-buffer) + (insert "test string") + (re-search-backward "^.*$") + (replace-match "\\U" t) + (Assert (and (bobp) (eobp)))) ;;----------------------------------------------------- ;; Test near-text buffer functions. @@ -945,3 +954,72 @@ ;; Time-related tests ;;----------------------------------------------------- (Assert (= (length (current-time-string)) 24)) + +;;----------------------------------------------------- +;; format test +;;----------------------------------------------------- +(Assert (string= (format "%d" 10) "10")) +(Assert (string= (format "%o" 8) "10")) +(Assert (string= (format "%x" 31) "1f")) +(Assert (string= (format "%X" 31) "1F")) +(Assert (string= (format "%e" 100) "1.000000e+02")) +(Assert (string= (format "%E" 100) "1.000000E+02")) +(Assert (string= (format "%f" 100) "100.000000")) +(Assert (string= (format "%g" 100.0) "100")) +(Assert (string= (format "%g" 0.000001) "1e-06")) +(Assert (string= (format "%g" 0.0001) "0.0001")) +(Assert (string= (format "%G" 100.0) "100")) +(Assert (string= (format "%G" 0.000001) "1E-06")) +(Assert (string= (format "%G" 0.0001) "0.0001")) + +(Assert (string= (format "%2$d%1$d" 10 20) "2010")) +(Assert (string= (format "%-d" 10) "10")) +(Assert (string= (format "%-4d" 10) "10 ")) +(Assert (string= (format "%+d" 10) "+10")) +(Assert (string= (format "%+d" -10) "-10")) +(Assert (string= (format "%+4d" 10) " +10")) +(Assert (string= (format "%+4d" -10) " -10")) +(Assert (string= (format "% d" 10) " 10")) +(Assert (string= (format "% d" -10) "-10")) +(Assert (string= (format "% 4d" 10) " 10")) +(Assert (string= (format "% 4d" -10) " -10")) +(Assert (string= (format "%0d" 10) "10")) +(Assert (string= (format "%0d" -10) "-10")) +(Assert (string= (format "%04d" 10) "0010")) +(Assert (string= (format "%04d" -10) "-010")) +(Assert (string= (format "%*d" 4 10) " 10")) +(Assert (string= (format "%*d" 4 -10) " -10")) +(Assert (string= (format "%*d" -4 10) "10 ")) +(Assert (string= (format "%*d" -4 -10) "-10 ")) +(Assert (string= (format "%#d" 10) "10")) +(Assert (string= (format "%#o" 8) "010")) +(Assert (string= (format "%#x" 16) "0x10")) +(Assert (string= (format "%#e" 100) "1.000000e+02")) +(Assert (string= (format "%#E" 100) "1.000000E+02")) +(Assert (string= (format "%#f" 100) "100.000000")) +(Assert (string= (format "%#g" 100.0) "100.000")) +(Assert (string= (format "%#g" 0.000001) "1.00000e-06")) +(Assert (string= (format "%#g" 0.0001) "0.000100000")) +(Assert (string= (format "%#G" 100.0) "100.000")) +(Assert (string= (format "%#G" 0.000001) "1.00000E-06")) +(Assert (string= (format "%#G" 0.0001) "0.000100000")) +(Assert (string= (format "%.1d" 10) "10")) +(Assert (string= (format "%.4d" 10) "0010")) +;; Combination of `-', `+', ` ', `0', `#', `.', `*' +(Assert (string= (format "%-04d" 10) "0010")) +(Assert (string= (format "%-*d" 4 10) "10 ")) +;; #### Correctness of this behavior is questionable. +;; It might be better to signal error. +(Assert (string= (format "%-*d" -4 10) "10 ")) +;; These behavior is not specified. +;; (format "%-+d" 10) +;; (format "%- d" 10) +;; (format "%-01d" 10) +;; (format "%-#4x" 10) +;; (format "%-.1d" 10) + +(Assert (string= (format "%01.1d" 10) "10")) +(Assert (string= (format "%03.1d" 10) "010")) +(Assert (string= (format "%01.3d" 10) "10")) +(Assert (string= (format "%1.3d" 10) "10")) +(Assert (string= (format "%3.1d" 10) " 10")) diff --git a/version.sh b/version.sh index 05e3746..78e3f2d 100644 --- a/version.sh +++ b/version.sh @@ -2,8 +2,8 @@ emacs_is_beta=t emacs_major_version=21 emacs_minor_version=2 -emacs_beta_version=36 -xemacs_codename="Notus" +emacs_beta_version=37 +xemacs_codename="Pan" infodock_major_version=4 infodock_minor_version=0 infodock_build_version=8