+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
+2000-11-14 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.37 is released.
+
+2000-10-19 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * README.packages: Add "uninstalled package" FAQ.
+
+ * etc/PACKAGES: Add details on os-utils contents.
+
+2000-11-01 Martin Buchholz <martin@xemacs.org>
+
+ * configure.in: Handle alloca with Compaq C on Alpha Linux.
+
+2000-10-27 Martin Buchholz <martin@xemacs.org>
+
+ * configure.in: Oops, _getpt ==> _getpty
+
+2000-10-23 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * Makefile.in.in: Remove lockdir related things.
+
+2000-10-11 Martin Buchholz <martin@xemacs.org>
+
+ * 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 <yoshiki@xemacs.org>
+
+ * etc/NEWS: Change lprogress-display to progress-feedback.
+
+2000-10-08 Karl M. Hegbloom <karlheg@debian.org>
+
+ * configure.in: Typo - missing paren.
+
+2000-10-10 Martin Buchholz <martin@xemacs.org>
+
+ * configure.in:
+ Use stropts.h, not sys/stropts.h.
+ Use strtio.h, not sys/strtio.h.
+
+2000-10-06 Martin Buchholz <martin@xemacs.org>
+
+ * configure.in: Pretend that DEC OSF >= 5 is really DEC OSF 4.
+
2000-10-04 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.36 is released.
## 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
## 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@
## (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
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
-----------------
*-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 ;;
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 <<EOF
+#line 6303 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* 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 <<EOF
+#define $ac_tr_func 1
+EOF
+}
+
+else
+ echo "$ac_t""no" 1>&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 <<EOF
+#line 6356 "configure"
+#include "confdefs.h"
+
+#define NeedFunctionPrototypes 1
+#include <X11/Xlib.h>
+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 <<EOF
-#line 6323 "configure"
+#line 6394 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XmuReadBitmapDataFromFile()
; return 0; }
EOF
-if { (eval echo configure:6334: \"$ac_link\") 1>&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
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 <<EOF
-#line 6378 "configure"
+#line 6449 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:6385: \"$ac_link\") 1>&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
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 <<EOF
-#line 6430 "configure"
+#line 6501 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:6437: \"$ac_link\") 1>&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
fi
fi
cat > conftest.$ac_ext <<EOF
-#line 6503 "configure"
+#line 6574 "configure"
#include "confdefs.h"
#include <fcntl.h>
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
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
-#line 6575 "configure"
+#line 6646 "configure"
#include "confdefs.h"
#include <X11/extensions/shape.h>
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*
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
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
-#line 6645 "configure"
+#line 6716 "configure"
#include "confdefs.h"
#include <X11/Xauth.h>
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*
}
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 <<EOF
-#line 6678 "configure"
+#line 6749 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XauGetAuthByAddr()
; return 0; }
EOF
-if { (eval echo configure:6689: \"$ac_link\") 1>&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
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
-#line 6737 "configure"
+#line 6808 "configure"
#include "confdefs.h"
#include <${dir}tt_c.h>
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*
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 <<EOF
-#line 6783 "configure"
+#line 6854 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tt_message_create()
; return 0; }
EOF
-if { (eval echo configure:6794: \"$ac_link\") 1>&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
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
-#line 6854 "configure"
+#line 6925 "configure"
#include "confdefs.h"
#include <Dt/Dt.h>
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*
}
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 <<EOF
-#line 6887 "configure"
+#line 6958 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
DtDndDragStart()
; return 0; }
EOF
-if { (eval echo configure:6898: \"$ac_link\") 1>&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
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
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
-#line 6994 "configure"
+#line 7065 "configure"
#include "confdefs.h"
#include <ldap.h>
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*
}
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
-#line 7025 "configure"
+#line 7096 "configure"
#include "confdefs.h"
#include <lber.h>
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*
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 <<EOF
-#line 7059 "configure"
+#line 7130 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ldap_search()
; return 0; }
EOF
-if { (eval echo configure:7070: \"$ac_link\") 1>&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
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 <<EOF
-#line 7100 "configure"
+#line 7171 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ldap_open()
; return 0; }
EOF
-if { (eval echo configure:7111: \"$ac_link\") 1>&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
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 <<EOF
-#line 7141 "configure"
+#line 7212 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ldap_open()
; return 0; }
EOF
-if { (eval echo configure:7152: \"$ac_link\") 1>&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
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 <<EOF
-#line 7182 "configure"
+#line 7253 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ldap_open()
; return 0; }
EOF
-if { (eval echo configure:7193: \"$ac_link\") 1>&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
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 <<EOF
-#line 7247 "configure"
+#line 7318 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:7270: \"$ac_link\") 1>&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
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
-#line 7309 "configure"
+#line 7380 "configure"
#include "confdefs.h"
#include <${header_dir}libpq-fe.h>
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*
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 <<EOF
-#line 7343 "configure"
+#line 7414 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
PQconnectdb()
; return 0; }
EOF
-if { (eval echo configure:7354: \"$ac_link\") 1>&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
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 <<EOF
-#line 7392 "configure"
+#line 7463 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
PQconnectStart()
; return 0; }
EOF
-if { (eval echo configure:7403: \"$ac_link\") 1>&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
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 <<EOF
-#line 7459 "configure"
+#line 7530 "configure"
#include "confdefs.h"
#define XPM_NUMBERS
#include <X11/xpm.h>
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
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 <<EOF
-#line 7513 "configure"
+#line 7584 "configure"
#include "confdefs.h"
int main() {
XpmCreatePixmapFromData()
; return 0; }
EOF
-if { (eval echo configure:7520: \"$ac_link\") 1>&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
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
-#line 7549 "configure"
+#line 7620 "configure"
#include "confdefs.h"
#include <compface.h>
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*
}
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 <<EOF
-#line 7582 "configure"
+#line 7653 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
UnGenFace()
; return 0; }
EOF
-if { (eval echo configure:7593: \"$ac_link\") 1>&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
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 <<EOF
-#line 7650 "configure"
+#line 7721 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
inflate()
; return 0; }
EOF
-if { (eval echo configure:7661: \"$ac_link\") 1>&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
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 <<EOF
-#line 7685 "configure"
+#line 7756 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
inflate()
; return 0; }
EOF
-if { (eval echo configure:7696: \"$ac_link\") 1>&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
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 <<EOF
-#line 7720 "configure"
+#line 7791 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
inflate()
; return 0; }
EOF
-if { (eval echo configure:7731: \"$ac_link\") 1>&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
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
-#line 7764 "configure"
+#line 7835 "configure"
#include "confdefs.h"
#include <jpeglib.h>
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*
}
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 <<EOF
-#line 7797 "configure"
+#line 7868 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jpeg_destroy_decompress()
; return 0; }
EOF
-if { (eval echo configure:7808: \"$ac_link\") 1>&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
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 <<EOF
-#line 7847 "configure"
+#line 7918 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char pow(); below. */
; return 0; }
EOF
-if { (eval echo configure:7870: \"$ac_link\") 1>&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
}
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
-#line 7894 "configure"
+#line 7965 "configure"
#include "confdefs.h"
#include <png.h>
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*
}
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 <<EOF
-#line 7927 "configure"
+#line 7998 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
png_read_image()
; return 0; }
EOF
-if { (eval echo configure:7938: \"$ac_link\") 1>&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
}
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 <<EOF
-#line 7964 "configure"
+#line 8035 "configure"
#include "confdefs.h"
#include <png.h>
int main(int c, char **v) {
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
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
-#line 8018 "configure"
+#line 8089 "configure"
#include "confdefs.h"
#include <tiffio.h>
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*
}
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 <<EOF
-#line 8051 "configure"
+#line 8122 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
TIFFClientOpen()
; return 0; }
EOF
-if { (eval echo configure:8062: \"$ac_link\") 1>&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
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 ;;
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 <<EOF
-#line 8123 "configure"
+#line 8194 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XawScrollbarSetThumb()
; return 0; }
EOF
-if { (eval echo configure:8134: \"$ac_link\") 1>&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
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 <<EOF
-#line 8155 "configure"
+#line 8226 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
threeDClassRec()
; return 0; }
EOF
-if { (eval echo configure:8166: \"$ac_link\") 1>&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
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 <<EOF
-#line 8202 "configure"
+#line 8273 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
threeDClassRec()
; return 0; }
EOF
-if { (eval echo configure:8213: \"$ac_link\") 1>&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
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 <<EOF
-#line 8236 "configure"
+#line 8307 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
threeDClassRec()
; return 0; }
EOF
-if { (eval echo configure:8247: \"$ac_link\") 1>&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
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
-#line 8281 "configure"
+#line 8352 "configure"
#include "confdefs.h"
#include <X11/Xaw/ThreeD.h>
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*
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
-#line 8309 "configure"
+#line 8380 "configure"
#include "confdefs.h"
#include <X11/Xaw/XawInit.h>
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*
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
-#line 8343 "configure"
+#line 8414 "configure"
#include "confdefs.h"
#include <X11/$athena_variant/XawInit.h>
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*
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
-#line 8368 "configure"
+#line 8439 "configure"
#include "confdefs.h"
#include <X11/$athena_variant/ThreeD.h>
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*
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
-#line 8404 "configure"
+#line 8475 "configure"
#include "confdefs.h"
#include <$athena_variant/XawInit.h>
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*
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
-#line 8429 "configure"
+#line 8500 "configure"
#include "confdefs.h"
#include <$athena_variant/ThreeD.h>
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*
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
-#line 8466 "configure"
+#line 8537 "configure"
#include "confdefs.h"
#include <X11/Xaw3d/XawInit.h>
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*
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
-#line 8491 "configure"
+#line 8562 "configure"
#include "confdefs.h"
#include <X11/Xaw3d/ThreeD.h>
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*
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
-#line 8531 "configure"
+#line 8602 "configure"
#include "confdefs.h"
#include <Xaw3d/XawInit.h>
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*
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
-#line 8556 "configure"
+#line 8627 "configure"
#include "confdefs.h"
#include <Xaw3d/ThreeD.h>
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*
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
-#line 8596 "configure"
+#line 8667 "configure"
#include "confdefs.h"
#include <X11/Xaw/ThreeD.h>
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*
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
-#line 8639 "configure"
+#line 8710 "configure"
#include "confdefs.h"
#include <Xm/Xm.h>
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*
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 <<EOF
-#line 8666 "configure"
+#line 8737 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XmStringFree()
; return 0; }
EOF
-if { (eval echo configure:8677: \"$ac_link\") 1>&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
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 <<EOF
-#line 8708 "configure"
+#line 8779 "configure"
#include "confdefs.h"
#include <Xm/Xm.h>
#ifdef LESSTIF_VERSION
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
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
-#line 9142 "configure"
+#line 9213 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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 <<EOF
-#line 9183 "configure"
+#line 9254 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
strerror()
; return 0; }
EOF
-if { (eval echo configure:9194: \"$ac_link\") 1>&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
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 <<EOF
-#line 9238 "configure"
+#line 9309 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XOpenIM()
; return 0; }
EOF
-if { (eval echo configure:9249: \"$ac_link\") 1>&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
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 <<EOF
-#line 9278 "configure"
+#line 9349 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XmImMbLookupString()
; return 0; }
EOF
-if { (eval echo configure:9289: \"$ac_link\") 1>&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
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 <<EOF
-#line 9362 "configure"
+#line 9433 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
XmbDrawString()
; return 0; }
EOF
-if { (eval echo configure:9373: \"$ac_link\") 1>&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
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
-#line 9416 "configure"
+#line 9487 "configure"
#include "confdefs.h"
#include <wnn/jllib.h>
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*
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 <<EOF
-#line 9449 "configure"
+#line 9520 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:9472: \"$ac_link\") 1>&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
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 <<EOF
-#line 9506 "configure"
+#line 9577 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
crypt()
; return 0; }
EOF
-if { (eval echo configure:9517: \"$ac_link\") 1>&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
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 <<EOF
-#line 9557 "configure"
+#line 9628 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jl_dic_list_e()
; return 0; }
EOF
-if { (eval echo configure:9568: \"$ac_link\") 1>&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
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 <<EOF
-#line 9591 "configure"
+#line 9662 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jl_dic_list_e()
; return 0; }
EOF
-if { (eval echo configure:9602: \"$ac_link\") 1>&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
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 <<EOF
-#line 9625 "configure"
+#line 9696 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jl_dic_list_e()
; return 0; }
EOF
-if { (eval echo configure:9636: \"$ac_link\") 1>&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
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 <<EOF
-#line 9659 "configure"
+#line 9730 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dic_list_e()
; return 0; }
EOF
-if { (eval echo configure:9670: \"$ac_link\") 1>&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
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 <<EOF
-#line 9723 "configure"
+#line 9794 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jl_fi_dic_list()
; return 0; }
EOF
-if { (eval echo configure:9734: \"$ac_link\") 1>&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
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
-#line 9772 "configure"
+#line 9843 "configure"
#include "confdefs.h"
#include <canna/jrkanji.h>
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*
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
-#line 9807 "configure"
+#line 9878 "configure"
#include "confdefs.h"
#include <canna/jrkanji.h>
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*
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
-#line 9843 "configure"
+#line 9914 "configure"
#include "confdefs.h"
#include <canna/RK.h>
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*
}
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 <<EOF
-#line 9876 "configure"
+#line 9947 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
RkBgnBun()
; return 0; }
EOF
-if { (eval echo configure:9887: \"$ac_link\") 1>&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
}
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 <<EOF
-#line 9915 "configure"
+#line 9986 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
jrKanjiControl()
; return 0; }
EOF
-if { (eval echo configure:9926: \"$ac_link\") 1>&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
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 <<EOF
-#line 9980 "configure"
+#line 10051 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
layout_object_getvalue()
; return 0; }
EOF
-if { (eval echo configure:9991: \"$ac_link\") 1>&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
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 <<EOF
-#line 10080 "configure"
+#line 10151 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:10103: \"$ac_link\") 1>&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
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 <<EOF
-#line 10137 "configure"
+#line 10208 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:10160: \"$ac_link\") 1>&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
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 <<EOF
-#line 10192 "configure"
+#line 10263 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char openpty(); below. */
; return 0; }
EOF
-if { (eval echo configure:10215: \"$ac_link\") 1>&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
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 <<EOF
-#line 10239 "configure"
+#line 10310 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
openpty()
; return 0; }
EOF
-if { (eval echo configure:10250: \"$ac_link\") 1>&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
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
-#line 10288 "configure"
+#line 10359 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 10332 "configure"
+#line 10403 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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 <<EOF
-#line 10373 "configure"
+#line 10444 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:10396: \"$ac_link\") 1>&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
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
-#line 10430 "configure"
+#line 10501 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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 <<EOF
-#line 10475 "configure"
+#line 10546 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:10498: \"$ac_link\") 1>&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
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
-#line 10534 "configure"
+#line 10605 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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 <<EOF
-#line 10580 "configure"
+#line 10651 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
kstat_open()
; return 0; }
EOF
-if { (eval echo configure:10591: \"$ac_link\") 1>&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
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
-#line 10629 "configure"
+#line 10700 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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 <<EOF
-#line 10671 "configure"
+#line 10742 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
kvm_read()
; return 0; }
EOF
-if { (eval echo configure:10682: \"$ac_link\") 1>&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
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 <<EOF
-#line 10718 "configure"
+#line 10789 "configure"
#include "confdefs.h"
#include <netdb.h>
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
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 <<EOF
-#line 10747 "configure"
+#line 10818 "configure"
#include "confdefs.h"
#include <setjmp.h>
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
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 <<EOF
-#line 10778 "configure"
+#line 10849 "configure"
#include "confdefs.h"
#include <time.h>
#if STDC_HEADERS
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
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 <<EOF
-#line 10845 "configure"
+#line 10916 "configure"
#include "confdefs.h"
#ifdef TIME_WITH_SYS_TIME
; return 0; }
EOF
-if { (eval echo configure:10866: \"$ac_link\") 1>&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
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 <<EOF
-#line 10893 "configure"
+#line 10964 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:10900: \"$ac_compile\") 1>&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
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 <<EOF
-#line 10943 "configure"
+#line 11015 "configure"
#include "confdefs.h"
#include <alloca.h>
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
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 <<EOF
-#line 10977 "configure"
+#line 11049 "configure"
#include "confdefs.h"
#ifdef __GNUC__
char *p = (char *) alloca(1);
; return 0; }
EOF
-if { (eval echo configure:11005: \"$ac_link\") 1>&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
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 <<EOF
-#line 11047 "configure"
+#line 11119 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
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 <<EOF
-#line 11074 "configure"
+#line 11146 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:11097: \"$ac_link\") 1>&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
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 <<EOF
-#line 11130 "configure"
+#line 11202 "configure"
#include "confdefs.h"
find_stack_direction ()
{
exit (find_stack_direction() < 0);
}
EOF
-if { (eval echo configure:11149: \"$ac_link\") 1>&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
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
-#line 11181 "configure"
+#line 11254 "configure"
#include "confdefs.h"
#include <vfork.h>
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*
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 <<EOF
-#line 11217 "configure"
+#line 11290 "configure"
#include "confdefs.h"
/* Thanks to Paul Eggert for this test. */
#include <stdio.h>
}
}
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
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 <<EOF
-#line 11341 "configure"
+#line 11414 "configure"
#include "confdefs.h"
#include <string.h>
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
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 <<EOF
-#line 11382 "configure"
+#line 11455 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:11405: \"$ac_link\") 1>&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
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 <<EOF
-#line 11436 "configure"
+#line 11509 "configure"
#include "confdefs.h"
/*
}
EOF
-if { (eval echo configure:11491: \"$ac_link\") 1>&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
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 <<EOF
-#line 11521 "configure"
+#line 11594 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <unistd.h>
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
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 <<EOF
-#line 11582 "configure"
+#line 11655 "configure"
#include "confdefs.h"
#include <malloc.h>
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
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
-#line 11622 "configure"
+#line 11695 "configure"
#include "confdefs.h"
#include <termios.h>
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*
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
-#line 11673 "configure"
+#line 11746 "configure"
#include "confdefs.h"
#include <termio.h>
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*
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 <<EOF
-#line 11713 "configure"
+#line 11786 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char socket(); below. */
; return 0; }
EOF
-if { (eval echo configure:11736: \"$ac_link\") 1>&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
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
-#line 11754 "configure"
+#line 11827 "configure"
#include "confdefs.h"
#include <netinet/in.h>
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*
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
-#line 11779 "configure"
+#line 11852 "configure"
#include "confdefs.h"
#include <arpa/inet.h>
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*
}
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 <<EOF
-#line 11811 "configure"
+#line 11884 "configure"
#include "confdefs.h"
#include <sys/types.h>
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
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 <<EOF
-#line 11842 "configure"
+#line 11915 "configure"
#include "confdefs.h"
#include <sys/types.h>
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
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 <<EOF
-#line 11886 "configure"
+#line 11959 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char msgget(); below. */
; return 0; }
EOF
-if { (eval echo configure:11909: \"$ac_link\") 1>&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
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
-#line 11927 "configure"
+#line 12000 "configure"
#include "confdefs.h"
#include <sys/ipc.h>
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*
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
-#line 11952 "configure"
+#line 12025 "configure"
#include "confdefs.h"
#include <sys/msg.h>
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*
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
-#line 11998 "configure"
+#line 12071 "configure"
#include "confdefs.h"
#include <dirent.h>
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*
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
-#line 12033 "configure"
+#line 12106 "configure"
#include "confdefs.h"
#include <sys/dir.h>
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*
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
-#line 12074 "configure"
+#line 12147 "configure"
#include "confdefs.h"
#include <nlist.h>
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*
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
-#line 12119 "configure"
+#line 12192 "configure"
#include "confdefs.h"
#include <multimedia/audio_device.h>
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*
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 <<EOF
-#line 12177 "configure"
+#line 12250 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
ALopenport()
; return 0; }
EOF
-if { (eval echo configure:12188: \"$ac_link\") 1>&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
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 <<EOF
-#line 12224 "configure"
+#line 12297 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
AOpenAudio()
; return 0; }
EOF
-if { (eval echo configure:12235: \"$ac_link\") 1>&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
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
-#line 12276 "configure"
+#line 12349 "configure"
#include "confdefs.h"
#include <${dir}/soundcard.h>
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*
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
-#line 12345 "configure"
+#line 12418 "configure"
#include "confdefs.h"
#include <audio/audiolib.h>
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*
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 <<EOF
-#line 12373 "configure"
+#line 12446 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
AuOpenServer()
; return 0; }
EOF
-if { (eval echo configure:12384: \"$ac_link\") 1>&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
fi
libs_x="-laudio $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-laudio\" to \$libs_x"; fi
cat > conftest.$ac_ext <<EOF
-#line 12423 "configure"
+#line 12496 "configure"
#include "confdefs.h"
#include <audio/Xtutil.h>
EOF
# 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.
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 <<EOF
-#line 12486 "configure"
+#line 12559 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char esd_play_stream(); below. */
; return 0; }
EOF
-if { (eval echo configure:12509: \"$ac_link\") 1>&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
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
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 <<EOF
-#line 12581 "configure"
+#line 12654 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tgetent()
; return 0; }
EOF
-if { (eval echo configure:12592: \"$ac_link\") 1>&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
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
-#line 12628 "configure"
+#line 12701 "configure"
#include "confdefs.h"
#include <ncurses/curses.h>
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*
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
-#line 12658 "configure"
+#line 12731 "configure"
#include "confdefs.h"
#include <ncurses/term.h>
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*
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
-#line 12696 "configure"
+#line 12769 "configure"
#include "confdefs.h"
#include <ncurses/curses.h>
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*
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 <<EOF
-#line 12741 "configure"
+#line 12814 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tgetent()
; return 0; }
EOF
-if { (eval echo configure:12752: \"$ac_link\") 1>&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
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 <<EOF
-#line 12788 "configure"
+#line 12861 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tgetent()
; return 0; }
EOF
-if { (eval echo configure:12799: \"$ac_link\") 1>&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
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 <<EOF
-#line 12822 "configure"
+#line 12895 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
tgetent()
; return 0; }
EOF
-if { (eval echo configure:12833: \"$ac_link\") 1>&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
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
-#line 12884 "configure"
+#line 12957 "configure"
#include "confdefs.h"
#include <gpm.h>
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*
}
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 <<EOF
-#line 12917 "configure"
+#line 12990 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
Gpm_Open()
; return 0; }
EOF
-if { (eval echo configure:12928: \"$ac_link\") 1>&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
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
-#line 12986 "configure"
+#line 13059 "configure"
#include "confdefs.h"
#include <ndbm.h>
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*
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 <<EOF
-#line 13026 "configure"
+#line 13099 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dbm_open()
; return 0; }
EOF
-if { (eval echo configure:13037: \"$ac_link\") 1>&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
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 <<EOF
-#line 13068 "configure"
+#line 13141 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char dbm_open(); below. */
; return 0; }
EOF
-if { (eval echo configure:13091: \"$ac_link\") 1>&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
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 <<EOF
-#line 13115 "configure"
+#line 13188 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dbm_open()
; return 0; }
EOF
-if { (eval echo configure:13126: \"$ac_link\") 1>&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
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 <<EOF
-#line 13170 "configure"
+#line 13243 "configure"
#include "confdefs.h"
#include <stdlib.h>
; 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
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 <<EOF
-#line 13210 "configure"
+#line 13283 "configure"
#include "confdefs.h"
#include <$db_h_file>
#if DB_VERSION_MAJOR > 1
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 <<EOF
-#line 13232 "configure"
+#line 13305 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $dbfunc(); below. */
; return 0; }
EOF
-if { (eval echo configure:13255: \"$ac_link\") 1>&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
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 <<EOF
-#line 13279 "configure"
+#line 13352 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
$dbfunc()
; return 0; }
EOF
-if { (eval echo configure:13290: \"$ac_link\") 1>&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
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 <<EOF
-#line 13359 "configure"
+#line 13432 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
SOCKSinit()
; return 0; }
EOF
-if { (eval echo configure:13370: \"$ac_link\") 1>&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
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
-#line 13435 "configure"
+#line 13508 "configure"
#include "confdefs.h"
#include <dlfcn.h>
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*
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 <<EOF
-#line 13463 "configure"
+#line 13536 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dlopen()
; return 0; }
EOF
-if { (eval echo configure:13474: \"$ac_link\") 1>&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
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 <<EOF
-#line 13498 "configure"
+#line 13571 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dlopen()
; return 0; }
EOF
-if { (eval echo configure:13509: \"$ac_link\") 1>&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
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 <<EOF
-#line 13553 "configure"
+#line 13626 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
shl_load()
; return 0; }
EOF
-if { (eval echo configure:13564: \"$ac_link\") 1>&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
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 <<EOF
-#line 13596 "configure"
+#line 13669 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dld_init()
; return 0; }
EOF
-if { (eval echo configure:13607: \"$ac_link\") 1>&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
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*) ;;
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 <<EOF
-#line 13682 "configure"
+#line 13755 "configure"
#include "confdefs.h"
#ifdef __GNUC__
fi
echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&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
# 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 <<EOF
-#line 13804 "configure"
+#line 13877 "configure"
#include "confdefs.h"
int main() {
int x=0;
; return 0; }
EOF
-if { (eval echo configure:13811: \"$ac_compile\") 1>&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
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"
xe_libs=
ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5'
cat > conftest.$ac_ext <<EOF
-#line 13893 "configure"
+#line 13966 "configure"
#include "confdefs.h"
int main() {
int x=0;
; return 0; }
EOF
-if { (eval echo configure:13900: \"$ac_link\") 1>&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
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.
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
# 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 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
xe_gnu_ld=yes
# 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
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 <<EOF
-#line 14234 "configure"
+#line 14307 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:14257: \"$ac_link\") 1>&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
fi
cat > conftest.$ac_ext <<EOF
-#line 14296 "configure"
+#line 14369 "configure"
#include "confdefs.h"
int main(int c,char *v[]){return 0;}
EOF
-if { (eval echo configure:14300: \"$ac_link\") 1>&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
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],[[
*-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 ;;
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 <X11/Xlib.h>
+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,
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.
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.
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.
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'.
*** os-utils
-Miscellaneous single-file O/S utilities.
+Miscellaneous single-file O/S utilities, for printing, archiving,
+compression, remote shells, etc.
*** view-process
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
\1f
Tag Table:
(Indirect)
Node: How Lisp Objects Are Represented in C\7f60713
Node: Rules When Writing New C Code\7f65390
Node: General Coding Rules\7f66194
-Node: Writing Lisp Primitives\7f71914
-Node: Adding Global Lisp Variables\7f83083
-Node: Coding for Mule\7f86721
-Node: Character-Related Data Types\7f87700
-Node: Working With Character and Byte Positions\7f90697
-Node: Conversion to and from External Data\7f94462
-Node: General Guidelines for Writing Mule-Aware Code\7f100603
-Node: An Example of Mule-Aware Code\7f103291
-Node: Techniques for XEmacs Developers\7f105272
-Node: A Summary of the Various XEmacs Modules\7f113219
-Node: Low-Level Modules\7f114039
-Node: Basic Lisp Modules\7f121500
-Node: Modules for Standard Editing Operations\7f128094
-Node: Editor-Level Control Flow Modules\7f133982
-Node: Modules for the Basic Displayable Lisp Objects\7f137493
-Node: Modules for other Display-Related Lisp Objects\7f140446
-Node: Modules for the Redisplay Mechanism\7f141787
-Node: Modules for Interfacing with the File System\7f144159
-Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f147857
-Node: Modules for Interfacing with the Operating System\7f153310
-Node: Modules for Interfacing with X Windows\7f160866
-Node: Modules for Internationalization\7f164349
-Node: Allocation of Objects in XEmacs Lisp\7f166986
-Node: Introduction to Allocation\7f167507
-Node: Garbage Collection\7f171193
-Node: GCPROing\7f172349
-Node: Garbage Collection - Step by Step\7f179353
-Node: Invocation\7f179745
+Node: Writing Lisp Primitives\7f71915
+Node: Adding Global Lisp Variables\7f83084
+Node: Coding for Mule\7f86722
+Node: Character-Related Data Types\7f87701
+Node: Working With Character and Byte Positions\7f90698
+Node: Conversion to and from External Data\7f94463
+Node: General Guidelines for Writing Mule-Aware Code\7f100604
+Node: An Example of Mule-Aware Code\7f103292
+Node: Techniques for XEmacs Developers\7f105273
+Node: A Summary of the Various XEmacs Modules\7f113220
+Node: Low-Level Modules\7f114040
+Node: Basic Lisp Modules\7f121501
+Node: Modules for Standard Editing Operations\7f128095
+Node: Editor-Level Control Flow Modules\7f133983
+Node: Modules for the Basic Displayable Lisp Objects\7f137494
+Node: Modules for other Display-Related Lisp Objects\7f140447
+Node: Modules for the Redisplay Mechanism\7f141788
+Node: Modules for Interfacing with the File System\7f144160
+Node: Modules for Other Aspects of the Lisp Interpreter and Object System\7f147858
+Node: Modules for Interfacing with the Operating System\7f153311
+Node: Modules for Interfacing with X Windows\7f160867
+Node: Modules for Internationalization\7f164350
+Node: Allocation of Objects in XEmacs Lisp\7f166987
+Node: Introduction to Allocation\7f167508
+Node: Garbage Collection\7f171194
+Node: GCPROing\7f172350
+Node: Garbage Collection - Step by Step\7f179354
+Node: Invocation\7f179746
Node: garbage_collect_1\7f182759
Node: mark_object\7f192239
Node: gc_sweep\7f194051
Node: Integers and Characters\7f203930
Node: Allocation from Frob Blocks\7f204682
Node: lrecords\7f206286
-Node: Low-level allocation\7f218510
-Node: Cons\7f222617
-Node: Vector\7f223343
-Node: Bit Vector\7f223920
-Node: Symbol\7f224413
-Node: Marker\7f224767
-Node: String\7f225322
-Node: Compiled Function\7f228935
-Node: Dumping\7f229104
-Node: Overview\7f231325
-Node: Data descriptions\7f231895
-Node: Dumping phase\7f233900
-Node: Object inventory\7f234303
-Node: Address allocation\7f237157
-Node: The header\7f238544
-Node: Data dumping\7f239052
-Node: Pointers dumping\7f239713
-Node: Reloading phase\7f240931
-Node: Remaining issues\7f242692
-Node: Events and the Event Loop\7f243653
-Node: Introduction to Events\7f244103
-Node: Main Loop\7f246052
-Node: Specifics of the Event Gathering Mechanism\7f249627
-Node: Specifics About the Emacs Event\7f262080
-Node: The Event Stream Callback Routines\7f262335
-Node: Other Event Loop Functions\7f262580
-Node: Converting Events\7f263720
-Node: Dispatching Events; The Command Builder\7f264329
-Node: Evaluation; Stack Frames; Bindings\7f264564
-Node: Evaluation\7f264906
-Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f271461
-Node: Simple Special Forms\7f273845
-Node: Catch and Throw\7f274628
-Node: Symbols and Variables\7f277203
-Node: Introduction to Symbols\7f277467
-Node: Obarrays\7f278535
-Node: Symbol Values\7f282068
-Node: Buffers and Textual Representation\7f284356
-Node: Introduction to Buffers\7f285014
-Node: The Text in a Buffer\7f287720
-Node: Buffer Lists\7f294870
-Node: Markers and Extents\7f296821
-Node: Bufbytes and Emchars\7f299086
-Node: The Buffer Object\7f299301
-Node: MULE Character Sets and Encodings\7f302781
-Node: Character Sets\7f303843
-Node: Encodings\7f307328
-Node: Japanese EUC (Extended Unix Code)\7f308395
-Node: JIS7\7f309227
-Node: Internal Mule Encodings\7f310577
-Node: Internal String Encoding\7f312407
-Node: Internal Character Encoding\7f314552
-Node: CCL\7f316276
-Node: The Lisp Reader and Compiler\7f323029
-Node: Lstreams\7f323242
-Node: Creating an Lstream\7f324273
-Node: Lstream Types\7f325500
-Node: Lstream Functions\7f325752
-Node: Lstream Methods\7f329318
-Node: Consoles; Devices; Frames; Windows\7f332460
-Node: Introduction to Consoles; Devices; Frames; Windows\7f332775
-Node: Point\7f335308
-Node: Window Hierarchy\7f336587
-Node: The Window Object\7f341035
-Node: The Redisplay Mechanism\7f344472
-Node: Critical Redisplay Sections\7f345264
-Node: Line Start Cache\7f346251
-Node: Redisplay Piece by Piece\7f349487
-Node: Extents\7f351524
-Node: Introduction to Extents\7f352058
-Node: Extent Ordering\7f353200
-Node: Format of the Extent Info\7f354441
-Node: Zero-Length Extents\7f356328
-Node: Mathematics of Extent Ordering\7f357726
-Node: Extent Fragments\7f362483
-Node: Faces\7f363569
-Node: Glyphs\7f363685
-Node: Specifiers\7f366704
-Node: Menus\7f366833
-Node: Subprocesses\7f369091
-Node: Interface to X Windows\7f371067
-Node: Index\7f371238
+Node: Low-level allocation\7f218512
+Node: Cons\7f222619
+Node: Vector\7f223345
+Node: Bit Vector\7f223922
+Node: Symbol\7f224415
+Node: Marker\7f224769
+Node: String\7f225324
+Node: Compiled Function\7f228937
+Node: Dumping\7f229106
+Node: Overview\7f231327
+Node: Data descriptions\7f231897
+Node: Dumping phase\7f233902
+Node: Object inventory\7f234305
+Node: Address allocation\7f237159
+Node: The header\7f238546
+Node: Data dumping\7f239054
+Node: Pointers dumping\7f239715
+Node: Reloading phase\7f240933
+Node: Remaining issues\7f242694
+Node: Events and the Event Loop\7f243655
+Node: Introduction to Events\7f244105
+Node: Main Loop\7f246054
+Node: Specifics of the Event Gathering Mechanism\7f249629
+Node: Specifics About the Emacs Event\7f262082
+Node: The Event Stream Callback Routines\7f262337
+Node: Other Event Loop Functions\7f262582
+Node: Converting Events\7f263722
+Node: Dispatching Events; The Command Builder\7f264331
+Node: Evaluation; Stack Frames; Bindings\7f264566
+Node: Evaluation\7f264908
+Node: Dynamic Binding; The specbinding Stack; Unwind-Protects\7f271463
+Node: Simple Special Forms\7f273847
+Node: Catch and Throw\7f274630
+Node: Symbols and Variables\7f277205
+Node: Introduction to Symbols\7f277469
+Node: Obarrays\7f278537
+Node: Symbol Values\7f282070
+Node: Buffers and Textual Representation\7f284358
+Node: Introduction to Buffers\7f285016
+Node: The Text in a Buffer\7f287722
+Node: Buffer Lists\7f294872
+Node: Markers and Extents\7f296823
+Node: Bufbytes and Emchars\7f299088
+Node: The Buffer Object\7f299303
+Node: MULE Character Sets and Encodings\7f302783
+Node: Character Sets\7f303845
+Node: Encodings\7f307330
+Node: Japanese EUC (Extended Unix Code)\7f308397
+Node: JIS7\7f309229
+Node: Internal Mule Encodings\7f310579
+Node: Internal String Encoding\7f312409
+Node: Internal Character Encoding\7f314554
+Node: CCL\7f316278
+Node: The Lisp Reader and Compiler\7f323031
+Node: Lstreams\7f323244
+Node: Creating an Lstream\7f324275
+Node: Lstream Types\7f325502
+Node: Lstream Functions\7f325754
+Node: Lstream Methods\7f329320
+Node: Consoles; Devices; Frames; Windows\7f332462
+Node: Introduction to Consoles; Devices; Frames; Windows\7f332777
+Node: Point\7f335310
+Node: Window Hierarchy\7f336589
+Node: The Window Object\7f341041
+Node: The Redisplay Mechanism\7f344478
+Node: Critical Redisplay Sections\7f345270
+Node: Line Start Cache\7f346257
+Node: Redisplay Piece by Piece\7f349493
+Node: Extents\7f351530
+Node: Introduction to Extents\7f352064
+Node: Extent Ordering\7f353206
+Node: Format of the Extent Info\7f354447
+Node: Zero-Length Extents\7f356334
+Node: Mathematics of Extent Ordering\7f357734
+Node: Extent Fragments\7f362491
+Node: Faces\7f363577
+Node: Glyphs\7f363693
+Node: Specifiers\7f366712
+Node: Menus\7f366841
+Node: Subprocesses\7f369099
+Node: Interface to X Windows\7f371075
+Node: Index\7f371246
\1f
End Tag Table
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.
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
\1f
Tag Table:
(Indirect)
Node: Copying\7f48665
Node: Introduction\7f67823
Node: Caveats\7f69414
-Node: Lisp History\7f71145
-Node: Conventions\7f72401
-Node: Some Terms\7f73216
-Node: nil and t\7f73937
-Node: Evaluation Notation\7f75614
-Node: Printing Notation\7f76527
-Node: Error Messages\7f77401
-Node: Buffer Text Notation\7f77842
-Node: Format of Descriptions\7f78717
-Node: A Sample Function Description\7f79571
-Node: A Sample Variable Description\7f83557
-Node: Acknowledgements\7f84465
-Node: Lisp Data Types\7f86443
-Node: Printed Representation\7f88998
-Node: Comments\7f91040
-Node: Primitive Types\7f91937
-Node: Programming Types\7f93596
-Node: Integer Type\7f95548
-Node: Floating Point Type\7f96585
-Node: Character Type\7f97204
-Node: Symbol Type\7f105108
-Node: Sequence Type\7f107803
-Node: Cons Cell Type\7f109322
-Node: Dotted Pair Notation\7f113806
-Node: Association List Type\7f115927
-Node: Array Type\7f116810
-Node: String Type\7f118276
-Node: Vector Type\7f120957
-Node: Bit Vector Type\7f121729
-Node: Function Type\7f122591
-Node: Macro Type\7f123704
-Node: Primitive Function Type\7f124401
-Node: Compiled-Function Type\7f125927
-Node: Autoload Type\7f126481
-Node: Char Table Type\7f127495
-Node: Hash Table Type\7f127669
-Node: Range Table Type\7f128824
-Node: Weak List Type\7f129677
-Node: Editing Types\7f129827
-Node: Buffer Type\7f131454
-Node: Marker Type\7f133481
-Node: Extent Type\7f134205
-Node: Window Type\7f135473
-Node: Frame Type\7f136884
-Node: Device Type\7f137679
-Node: Console Type\7f138505
-Node: Window Configuration Type\7f139706
-Node: Event Type\7f140404
-Node: Process Type\7f140568
-Node: Stream Type\7f141603
-Node: Keymap Type\7f142726
-Node: Syntax Table Type\7f143264
-Node: Display Table Type\7f144287
-Node: Database Type\7f144726
-Node: Charset Type\7f144892
-Node: Coding System Type\7f145056
-Node: ToolTalk Message Type\7f145240
-Node: ToolTalk Pattern Type\7f145439
-Node: Window-System Types\7f145611
-Node: Face Type\7f146757
-Node: Glyph Type\7f146888
-Node: Specifier Type\7f147044
-Node: Font Instance Type\7f147217
-Node: Color Instance Type\7f147407
-Node: Image Instance Type\7f147604
-Node: Toolbar Button Type\7f147802
-Node: Subwindow Type\7f147995
-Node: X Resource Type\7f148174
-Node: Type Predicates\7f148327
-Node: Equality Predicates\7f157456
-Node: Numbers\7f162261
-Node: Integer Basics\7f163716
-Node: Float Basics\7f166065
-Node: Predicates on Numbers\7f167807
-Node: Comparison of Numbers\7f169440
-Node: Numeric Conversions\7f173261
-Node: Arithmetic Operations\7f174727
-Node: Rounding Operations\7f180192
-Node: Bitwise Operations\7f181297
-Node: Math Functions\7f190343
-Node: Random Numbers\7f192659
-Node: Strings and Characters\7f194425
-Node: String Basics\7f195878
-Node: Predicates for Strings\7f198296
-Node: Creating Strings\7f199059
-Node: Predicates for Characters\7f204376
-Node: Character Codes\7f205447
-Node: Text Comparison\7f206860
-Node: String Conversion\7f210222
-Node: Modifying Strings\7f213898
-Node: String Properties\7f214539
-Node: Formatting Strings\7f215184
-Node: Character Case\7f224802
-Node: Case Tables\7f227948
-Node: Char Tables\7f231846
-Node: Char Table Types\7f233238
-Node: Working With Char Tables\7f234813
-Node: Lists\7f236762
-Node: Cons Cells\7f237885
-Node: Lists as Boxes\7f239221
-Node: List-related Predicates\7f241863
-Node: List Elements\7f243565
-Node: Building Lists\7f248594
-Node: Modifying Lists\7f254586
-Node: Setcar\7f255398
-Node: Setcdr\7f257819
-Node: Rearrangement\7f260330
-Node: Sets And Lists\7f265916
-Node: Association Lists\7f270144
-Ref: Association Lists-Footnote-1\7f279435
-Node: Property Lists\7f279640
-Node: Working With Normal Plists\7f281188
-Node: Working With Lax Plists\7f283456
-Node: Converting Plists To/From Alists\7f285696
-Node: Weak Lists\7f287044
-Node: Sequences Arrays Vectors\7f289207
-Node: Sequence Functions\7f291843
-Node: Arrays\7f295502
-Node: Array Functions\7f298566
-Node: Vectors\7f301099
-Node: Vector Functions\7f302597
-Node: Bit Vectors\7f305168
-Node: Bit Vector Functions\7f306013
-Node: Symbols\7f308263
-Node: Symbol Components\7f309312
-Node: Definitions\7f313485
-Node: Creating Symbols\7f315710
-Node: Symbol Properties\7f322744
-Node: Plists and Alists\7f324271
-Node: Object Plists\7f326020
-Node: Other Plists\7f328780
-Node: Evaluation\7f330582
-Node: Intro Eval\7f331387
-Ref: Intro Eval-Footnote-1\7f334740
-Node: Eval\7f334875
-Node: Forms\7f339293
-Node: Self-Evaluating Forms\7f340452
-Node: Symbol Forms\7f341965
-Node: Classifying Lists\7f342882
-Node: Function Indirection\7f343638
-Node: Function Forms\7f346749
-Node: Macro Forms\7f347746
-Node: Special Forms\7f349346
-Node: Autoloading\7f351655
-Node: Quoting\7f352153
-Node: Control Structures\7f353514
-Node: Sequencing\7f355134
-Node: Conditionals\7f357999
-Node: Combining Conditions\7f361422
-Node: Iteration\7f364692
-Node: Nonlocal Exits\7f366471
-Node: Catch and Throw\7f367173
-Node: Examples of Catch\7f371012
-Node: Errors\7f373031
-Node: Signaling Errors\7f374520
-Node: Processing of Errors\7f379259
-Node: Handling Errors\7f381538
-Node: Error Symbols\7f388779
-Node: Cleanups\7f392735
-Node: Variables\7f396513
-Node: Global Variables\7f398282
-Node: Constant Variables\7f399358
-Node: Local Variables\7f399984
-Node: Void Variables\7f404921
-Node: Defining Variables\7f408437
-Node: Accessing Variables\7f415601
-Node: Setting Variables\7f417026
-Node: Variable Scoping\7f421545
-Node: Scope\7f423144
-Node: Extent\7f424669
-Node: Impl of Scope\7f426148
-Node: Using Scoping\7f428111
-Node: Buffer-Local Variables\7f429633
-Node: Intro to Buffer-Local\7f430469
-Node: Creating Buffer-Local\7f433012
-Node: Default Value\7f438231
-Node: Variable Aliases\7f441374
-Node: Functions\7f443159
-Node: What Is a Function\7f444253
-Node: Lambda Expressions\7f448299
-Node: Lambda Components\7f449209
-Node: Simple Lambda\7f451041
-Node: Argument List\7f452698
-Node: Function Documentation\7f456426
-Node: Function Names\7f458368
-Node: Defining Functions\7f460941
-Node: Calling Functions\7f463981
-Node: Mapping Functions\7f467830
-Node: Anonymous Functions\7f470518
-Node: Function Cells\7f473763
-Node: Inline Functions\7f478573
-Node: Related Topics\7f480383
-Node: Macros\7f481436
-Node: Simple Macro\7f482720
-Node: Expansion\7f483455
-Node: Compiling Macros\7f486459
-Node: Defining Macros\7f488295
-Node: Backquote\7f489612
-Node: Problems with Macros\7f492009
-Node: Argument Evaluation\7f492704
-Node: Surprising Local Vars\7f495619
-Node: Eval During Expansion\7f497687
-Node: Repeated Expansion\7f499380
-Node: Customization\7f501296
-Node: Common Keywords\7f501765
-Node: Group Definitions\7f504610
-Node: Variable Definitions\7f506802
-Node: Customization Types\7f511792
-Node: Simple Types\7f513227
-Node: Composite Types\7f515384
-Node: Splicing into Lists\7f520074
-Node: Type Keywords\7f521909
-Node: Loading\7f525429
-Node: How Programs Do Loading\7f527104
-Node: Autoload\7f536230
-Node: Repeated Loading\7f542309
-Node: Named Features\7f544422
-Node: Unloading\7f550854
-Node: Hooks for Loading\7f553010
-Node: Byte Compilation\7f553727
-Node: Speed of Byte-Code\7f555644
-Node: Compilation Functions\7f556851
-Node: Docs and Compilation\7f563239
-Node: Dynamic Loading\7f565892
-Node: Eval During Compile\7f568256
-Node: Compiled-Function Objects\7f569521
-Node: Disassembly\7f574319
-Node: Debugging\7f581573
-Node: Debugger\7f582985
-Node: Error Debugging\7f584130
-Node: Infinite Loops\7f586883
-Node: Function Debugging\7f588127
-Node: Explicit Debug\7f590917
-Node: Using Debugger\7f591688
-Node: Debugger Commands\7f593550
-Node: Invoking the Debugger\7f597867
-Node: Internals of Debugger\7f601782
-Node: Syntax Errors\7f606669
-Node: Excess Open\7f607917
-Node: Excess Close\7f609792
-Node: Compilation Errors\7f611213
-Node: Edebug\7f612501
-Node: Using Edebug\7f614609
-Node: Instrumenting\7f617306
-Node: Edebug Execution Modes\7f620795
-Node: Jumping\7f623905
-Node: Edebug Misc\7f626248
-Node: Breakpoints\7f627637
-Node: Global Break Condition\7f630443
-Node: Embedded Breakpoints\7f631398
-Node: Trapping Errors\7f632353
-Node: Edebug Views\7f634429
-Node: Edebug Eval\7f636394
-Node: Eval List\7f637571
-Node: Reading in Edebug\7f640956
-Node: Printing in Edebug\7f641755
-Node: Tracing\7f643470
-Node: Coverage Testing\7f645356
-Node: The Outside Context\7f647397
-Node: Checking Whether to Stop\7f648346
-Node: Edebug Display Update\7f648993
-Node: Edebug Recursive Edit\7f651016
-Node: Instrumenting Macro Calls\7f652671
-Node: Specification List\7f655153
-Node: Backtracking\7f664564
-Node: Debugging Backquote\7f666502
-Node: Specification Examples\7f670208
-Node: Edebug Options\7f672275
-Node: Read and Print\7f677612
-Node: Streams Intro\7f678589
-Node: Input Streams\7f680607
-Node: Input Functions\7f685508
-Node: Output Streams\7f687568
-Node: Output Functions\7f691619
-Node: Output Variables\7f695919
-Node: Minibuffers\7f700718
-Node: Intro to Minibuffers\7f701870
-Node: Text from Minibuffer\7f704058
-Node: Object from Minibuffer\7f709144
-Node: Minibuffer History\7f713239
-Node: Completion\7f716218
-Node: Basic Completion\7f718193
-Node: Minibuffer Completion\7f723222
-Node: Completion Commands\7f726799
-Node: High-Level Completion\7f731456
-Node: Reading File Names\7f736199
-Node: Programmed Completion\7f739891
-Node: Yes-or-No Queries\7f742273
-Node: Multiple Queries\7f748010
-Node: Reading a Password\7f752077
-Node: Minibuffer Misc\7f753414
-Node: Command Loop\7f758284
-Node: Command Overview\7f759628
-Node: Defining Commands\7f762906
-Node: Using Interactive\7f763654
-Node: Interactive Codes\7f768427
-Node: Interactive Examples\7f774219
-Node: Interactive Call\7f775533
-Node: Command Loop Info\7f780934
-Node: Events\7f785913
-Node: Event Types\7f787373
-Node: Event Contents\7f789296
-Node: Event Predicates\7f793772
-Node: Accessing Mouse Event Positions\7f795097
-Node: Frame-Level Event Position Info\7f795796
-Node: Window-Level Event Position Info\7f796836
-Node: Event Text Position Info\7f798600
-Node: Event Glyph Position Info\7f801092
-Node: Event Toolbar Position Info\7f802415
-Node: Other Event Position Info\7f803086
-Node: Accessing Other Event Info\7f803495
-Node: Working With Events\7f805115
-Node: Converting Events\7f811103
-Node: Reading Input\7f814055
-Node: Key Sequence Input\7f815057
-Node: Reading One Event\7f817011
-Node: Dispatching an Event\7f819828
-Node: Quoted Character Input\7f820279
-Node: Peeking and Discarding\7f821627
-Node: Waiting\7f825531
-Node: Quitting\7f827839
-Node: Prefix Command Arguments\7f832247
-Node: Recursive Editing\7f837334
-Node: Disabling Commands\7f842130
-Node: Command History\7f844198
-Node: Keyboard Macros\7f845935
-Node: Keymaps\7f848152
-Node: Keymap Terminology\7f849729
-Node: Format of Keymaps\7f852658
-Node: Creating Keymaps\7f853069
-Node: Inheritance and Keymaps\7f855148
-Node: Key Sequences\7f857520
-Node: Prefix Keys\7f862316
-Node: Active Keymaps\7f865901
-Node: Key Lookup\7f875222
-Node: Functions for Key Lookup\7f880385
-Node: Changing Key Bindings\7f886082
-Node: Key Binding Commands\7f892979
-Node: Scanning Keymaps\7f895044
-Node: Other Keymap Functions\7f903555
-Node: Menus\7f904177
-Node: Menu Format\7f904769
-Node: Menubar Format\7f913415
-Node: Menubar\7f914040
-Node: Modifying Menus\7f917153
-Node: Menu Filters\7f922167
-Node: Pop-Up Menus\7f924063
-Node: Menu Accelerators\7f926268
-Node: Creating Menu Accelerators\7f927024
-Node: Keyboard Menu Traversal\7f928384
-Node: Menu Accelerator Functions\7f929111
-Node: Buffers Menu\7f932188
-Node: Dialog Boxes\7f933482
-Node: Dialog Box Format\7f933649
-Node: Dialog Box Functions\7f935074
-Node: Toolbar\7f935471
-Node: Toolbar Intro\7f935906
-Node: Creating Toolbar\7f938306
-Node: Toolbar Descriptor Format\7f939223
-Node: Specifying the Toolbar\7f943720
-Node: Other Toolbar Variables\7f947325
-Node: Gutter\7f951751
-Node: Gutter Intro\7f952340
-Node: Creating Gutter\7f954343
-Node: Gutter Descriptor Format\7f957226
-Node: Specifying a Gutter\7f961683
-Node: Other Gutter Variables\7f965216
-Node: Common Gutter Widgets\7f969601
-Node: Buffer Tabs\7f970593
-Node: Progress Bars\7f970734
-Node: Scrollbars\7f970879
-Node: Drag and Drop\7f971014
-Node: Supported Protocols\7f972090
-Node: OffiX DND\7f972593
-Node: CDE dt\7f973600
-Node: MSWindows OLE\7f974191
-Node: Loose ends\7f974362
-Node: Drop Interface\7f974754
-Node: Drag Interface\7f975776
-Node: Modes\7f975950
-Node: Major Modes\7f976901
-Node: Major Mode Conventions\7f979816
-Node: Example Major Modes\7f985771
-Node: Auto Major Mode\7f993804
-Node: Mode Help\7f1001252
-Node: Derived Modes\7f1002353
-Node: Minor Modes\7f1004544
-Node: Minor Mode Conventions\7f1005846
-Node: Keymaps and Minor Modes\7f1008709
-Node: Modeline Format\7f1009544
-Node: Modeline Data\7f1011312
-Node: Modeline Variables\7f1016465
-Node: %-Constructs\7f1021181
-Node: Hooks\7f1024168
-Node: Documentation\7f1030930
-Node: Documentation Basics\7f1032353
-Node: Accessing Documentation\7f1035403
-Node: Keys in Documentation\7f1041682
-Node: Describing Characters\7f1045161
-Node: Help Functions\7f1047510
-Node: Obsoleteness\7f1053961
-Node: Files\7f1056955
-Node: Visiting Files\7f1058880
-Node: Visiting Functions\7f1060385
-Node: Subroutines of Visiting\7f1065432
-Node: Saving Buffers\7f1067505
-Node: Reading from Files\7f1073598
-Node: Writing to Files\7f1075755
-Node: File Locks\7f1078472
-Node: Information about Files\7f1081525
-Node: Testing Accessibility\7f1082286
-Node: Kinds of Files\7f1086026
-Node: Truenames\7f1087707
-Node: File Attributes\7f1088709
-Node: Changing File Attributes\7f1093848
-Node: File Names\7f1099254
-Node: File Name Components\7f1100863
-Node: Directory Names\7f1103964
-Node: Relative File Names\7f1107417
-Node: File Name Expansion\7f1108495
-Node: Unique File Names\7f1112402
-Node: File Name Completion\7f1114017
-Node: User Name Completion\7f1116678
-Node: Contents of Directories\7f1118018
-Node: Create/Delete Dirs\7f1121331
-Node: Magic File Names\7f1122437
-Node: Partial Files\7f1128067
-Node: Intro to Partial Files\7f1128295
-Node: Creating a Partial File\7f1129535
-Node: Detached Partial Files\7f1130470
-Node: Format Conversion\7f1131592
-Node: Files and MS-DOS\7f1138108
-Node: Backups and Auto-Saving\7f1140172
-Node: Backup Files\7f1140847
-Node: Making Backups\7f1142244
-Node: Rename or Copy\7f1144993
-Node: Numbered Backups\7f1147486
-Node: Backup Names\7f1149721
-Node: Auto-Saving\7f1153013
-Node: Reverting\7f1161155
-Node: Buffers\7f1164313
-Node: Buffer Basics\7f1165730
-Node: Current Buffer\7f1167783
-Node: Buffer Names\7f1172471
-Node: Buffer File Name\7f1175676
-Node: Buffer Modification\7f1179795
-Node: Modification Time\7f1181988
-Node: Read Only Buffers\7f1185363
-Node: The Buffer List\7f1187781
-Node: Creating Buffers\7f1192611
-Node: Killing Buffers\7f1194757
-Node: Indirect Buffers\7f1198488
-Node: Windows\7f1201060
-Node: Basic Windows\7f1202538
-Node: Splitting Windows\7f1205636
-Node: Deleting Windows\7f1212525
-Node: Selecting Windows\7f1215205
-Node: Cyclic Window Ordering\7f1218334
-Node: Buffers and Windows\7f1222958
-Node: Displaying Buffers\7f1224799
-Node: Choosing Window\7f1229975
-Node: Window Point\7f1237691
-Node: Window Start\7f1239738
-Node: Vertical Scrolling\7f1244228
-Node: Horizontal Scrolling\7f1250365
-Node: Size of Window\7f1253874
-Node: Position of Window\7f1258592
-Node: Resizing Windows\7f1260832
-Node: Window Configurations\7f1266261
-Node: Frames\7f1269686
-Node: Creating Frames\7f1272027
-Node: Frame Properties\7f1273368
-Node: Property Access\7f1274184
-Node: Initial Properties\7f1275033
-Node: X Frame Properties\7f1277519
-Node: Size and Position\7f1282153
-Node: Frame Name\7f1284149
-Node: Frame Titles\7f1285063
-Node: Deleting Frames\7f1286887
-Node: Finding All Frames\7f1287487
-Node: Frames and Windows\7f1289481
-Node: Minibuffers and Frames\7f1291186
-Node: Input Focus\7f1292104
-Node: Visibility of Frames\7f1295181
-Node: Raising and Lowering\7f1297100
-Node: Frame Configurations\7f1299476
-Node: Frame Hooks\7f1300070
-Node: Consoles and Devices\7f1301875
-Node: Basic Console Functions\7f1304618
-Node: Basic Device Functions\7f1305041
-Node: Console Types and Device Classes\7f1305757
-Node: Connecting to a Console or Device\7f1307958
-Node: The Selected Console and Device\7f1310121
-Node: Console and Device I/O\7f1311147
-Node: Positions\7f1311911
-Node: Point\7f1312880
-Node: Motion\7f1315970
-Node: Character Motion\7f1316737
-Node: Word Motion\7f1318974
-Node: Buffer End Motion\7f1320475
-Node: Text Lines\7f1321972
-Node: Screen Lines\7f1326567
-Node: List Motion\7f1330630
-Node: Skipping Characters\7f1334038
-Node: Excursions\7f1336257
-Node: Narrowing\7f1339289
-Node: Markers\7f1344614
-Node: Overview of Markers\7f1345520
-Node: Predicates on Markers\7f1350212
-Node: Creating Markers\7f1351458
-Node: Information from Markers\7f1355495
-Node: Changing Markers\7f1356593
-Node: The Mark\7f1357971
-Node: The Region\7f1366465
-Node: Text\7f1372151
-Node: Near Point\7f1374850
-Node: Buffer Contents\7f1379037
-Node: Comparing Text\7f1380443
-Node: Insertion\7f1381851
-Node: Commands for Insertion\7f1385693
-Node: Deletion\7f1388649
-Node: User-Level Deletion\7f1392244
-Node: The Kill Ring\7f1396405
-Node: Kill Ring Concepts\7f1398579
-Node: Kill Functions\7f1399633
-Node: Yank Commands\7f1401538
-Node: Low-Level Kill Ring\7f1403409
-Node: Internals of Kill Ring\7f1406195
-Node: Undo\7f1408975
-Node: Maintaining Undo\7f1413304
-Node: Filling\7f1415924
-Node: Margins\7f1421918
-Node: Auto Filling\7f1425847
-Node: Sorting\7f1427028
-Node: Columns\7f1436328
-Node: Indentation\7f1438844
-Node: Primitive Indent\7f1439623
-Node: Mode-Specific Indent\7f1440867
-Node: Region Indent\7f1443378
-Node: Relative Indent\7f1446326
-Node: Indent Tabs\7f1448708
-Node: Motion by Indent\7f1450029
-Node: Case Changes\7f1450808
-Node: Text Properties\7f1454059
-Node: Examining Properties\7f1455872
-Node: Changing Properties\7f1457739
-Node: Property Search\7f1461330
-Node: Special Properties\7f1466041
-Node: Saving Properties\7f1466322
-Node: Substitution\7f1469464
-Node: Registers\7f1472734
-Node: Transposition\7f1475277
-Node: Change Hooks\7f1476171
-Node: Transformations\7f1478211
-Node: Searching and Matching\7f1482596
-Node: String Search\7f1483727
-Node: Regular Expressions\7f1488451
-Node: Syntax of Regexps\7f1489818
-Node: Regexp Example\7f1504421
-Node: Regexp Search\7f1506591
-Node: POSIX Regexps\7f1512679
-Node: Search and Replace\7f1514514
-Node: Match Data\7f1517879
-Node: Simple Match Data\7f1519009
-Node: Replacing Match\7f1523274
-Node: Entire Match Data\7f1525608
-Node: Saving Match Data\7f1527599
-Node: Searching and Case\7f1528980
-Node: Standard Regexps\7f1531014
-Node: Syntax Tables\7f1533212
-Node: Syntax Basics\7f1534326
-Node: Syntax Descriptors\7f1537298
-Node: Syntax Class Table\7f1539148
-Node: Syntax Flags\7f1545186
-Node: Syntax Table Functions\7f1548403
-Node: Motion and Syntax\7f1552267
-Node: Parsing Expressions\7f1553719
-Node: Standard Syntax Tables\7f1559788
-Node: Syntax Table Internals\7f1560632
-Node: Abbrevs\7f1561658
-Node: Abbrev Mode\7f1563461
-Node: Abbrev Tables\7f1564181
-Node: Defining Abbrevs\7f1565714
-Node: Abbrev Files\7f1567619
-Node: Abbrev Expansion\7f1569392
-Node: Standard Abbrev Tables\7f1574023
-Node: Extents\7f1575182
-Node: Intro to Extents\7f1576425
-Node: Creating and Modifying Extents\7f1580417
-Node: Extent Endpoints\7f1581924
-Node: Finding Extents\7f1585187
-Node: Mapping Over Extents\7f1588935
-Node: Extent Properties\7f1595052
-Node: Detached Extents\7f1605196
-Node: Extent Parents\7f1607055
-Node: Duplicable Extents\7f1608749
-Node: Extents and Events\7f1611970
-Node: Atomic Extents\7f1613877
-Node: Specifiers\7f1614324
-Node: Introduction to Specifiers\7f1616437
-Node: Specifiers In-Depth\7f1618747
-Node: Specifier Instancing\7f1623659
-Node: Specifier Types\7f1626921
-Node: Adding Specifications\7f1631995
-Node: Retrieving Specifications\7f1641357
-Node: Specifier Tag Functions\7f1645092
-Node: Specifier Instancing Functions\7f1648326
-Node: Specifier Example\7f1651733
-Node: Creating Specifiers\7f1654889
-Node: Specifier Validation Functions\7f1659206
-Node: Other Specification Functions\7f1661590
-Node: Faces and Window-System Objects\7f1665409
-Node: Faces\7f1665733
-Node: Merging Faces\7f1667350
-Node: Basic Face Functions\7f1669311
-Node: Face Properties\7f1671409
-Node: Face Convenience Functions\7f1681651
-Node: Other Face Display Functions\7f1684781
-Node: Fonts\7f1685594
-Node: Font Specifiers\7f1686295
-Node: Font Instances\7f1687480
-Node: Font Instance Names\7f1688447
-Node: Font Instance Size\7f1689288
-Node: Font Instance Characteristics\7f1690574
-Node: Font Convenience Functions\7f1691743
-Node: Colors\7f1693033
-Node: Color Specifiers\7f1693473
-Node: Color Instances\7f1695831
-Node: Color Instance Properties\7f1696575
-Node: Color Convenience Functions\7f1697201
-Node: Glyphs\7f1698254
-Node: Glyph Functions\7f1699855
-Node: Creating Glyphs\7f1700262
-Node: Glyph Properties\7f1712902
-Node: Glyph Convenience Functions\7f1722069
-Node: Glyph Dimensions\7f1726016
-Node: Images\7f1727096
-Node: Image Specifiers\7f1727545
-Node: Image Instantiator Conversion\7f1742891
-Node: Image Instances\7f1744256
-Node: Image Instance Types\7f1745007
-Node: Image Instance Functions\7f1747770
-Node: Glyph Types\7f1754821
-Node: Mouse Pointer\7f1756593
-Node: Redisplay Glyphs\7f1759596
-Node: Subwindows\7f1760629
-Node: Annotations\7f1760872
-Node: Annotation Basics\7f1761888
-Node: Annotation Primitives\7f1765826
-Node: Annotation Properties\7f1767155
-Node: Locating Annotations\7f1770195
-Node: Margin Primitives\7f1771032
-Node: Annotation Hooks\7f1772926
-Node: Display\7f1773586
-Node: Refresh Screen\7f1774564
-Node: Truncation\7f1776475
-Node: The Echo Area\7f1779000
-Node: Warnings\7f1785435
-Node: Invisible Text\7f1789871
-Node: Selective Display\7f1792450
-Node: Overlay Arrow\7f1796576
-Node: Temporary Displays\7f1797929
-Node: Blinking\7f1802050
-Node: Usual Display\7f1804235
-Node: Display Tables\7f1806784
-Node: Display Table Format\7f1807588
-Node: Active Display Table\7f1809030
-Node: Character Descriptors\7f1813025
-Node: Beeping\7f1813782
-Node: Hash Tables\7f1818548
-Node: Introduction to Hash Tables\7f1819156
-Node: Working With Hash Tables\7f1825715
-Node: Weak Hash Tables\7f1826832
-Node: Range Tables\7f1828849
-Node: Introduction to Range Tables\7f1829538
-Node: Working With Range Tables\7f1829969
-Node: Databases\7f1830854
-Node: Connecting to a Database\7f1831153
-Node: Working With a Database\7f1832245
-Node: Other Database Functions\7f1833103
-Node: Processes\7f1833677
-Node: Subprocess Creation\7f1835901
-Node: Synchronous Processes\7f1839190
-Node: MS-DOS Subprocesses\7f1845908
-Node: Asynchronous Processes\7f1846982
-Node: Deleting Processes\7f1850695
-Node: Process Information\7f1852566
-Node: Input to Processes\7f1856492
-Node: Signals to Processes\7f1858782
-Node: Output from Processes\7f1863598
-Node: Process Buffers\7f1864410
-Node: Filter Functions\7f1867277
-Node: Accepting Output\7f1872847
-Node: Sentinels\7f1874374
-Node: Process Window Size\7f1877864
-Node: Transaction Queues\7f1878213
-Node: Network\7f1879911
-Node: System Interface\7f1881745
-Node: Starting Up\7f1883015
-Node: Start-up Summary\7f1883609
-Node: Init File\7f1887163
-Node: Terminal-Specific\7f1889544
-Node: Command Line Arguments\7f1892703
-Node: Getting Out\7f1896192
-Node: Killing XEmacs\7f1896761
-Node: Suspending XEmacs\7f1898430
-Node: System Environment\7f1901772
-Node: User Identification\7f1908439
-Node: Time of Day\7f1911968
-Node: Time Conversion\7f1914755
-Node: Timers\7f1919795
-Node: Terminal Input\7f1921968
-Node: Input Modes\7f1922471
-Node: Translating Input\7f1924884
-Node: Recording Input\7f1929049
-Node: Terminal Output\7f1931149
-Node: Flow Control\7f1934772
-Node: Batch Mode\7f1938564
-Node: X-Windows\7f1939946
-Node: X Selections\7f1940817
-Node: X Server\7f1943027
-Node: Resources\7f1943478
-Node: Server Data\7f1948787
-Node: Grabs\7f1949994
-Node: X Miscellaneous\7f1951574
-Node: ToolTalk Support\7f1953959
-Node: XEmacs ToolTalk API Summary\7f1954176
-Node: Sending Messages\7f1955476
-Node: Example of Sending Messages\7f1955727
-Node: Elisp Interface for Sending Messages\7f1956789
-Node: Receiving Messages\7f1963181
-Node: Example of Receiving Messages\7f1963404
-Node: Elisp Interface for Receiving Messages\7f1964240
-Node: LDAP Support\7f1968065
-Node: Building XEmacs with LDAP support\7f1968559
-Node: XEmacs LDAP API\7f1969536
-Node: LDAP Variables\7f1970588
-Node: The High-Level LDAP API\7f1973188
-Node: The Low-Level LDAP API\7f1976651
-Node: The LDAP Lisp Object\7f1977482
-Node: Opening and Closing a LDAP Connection\7f1978035
-Node: Low-level Operations on a LDAP Server\7f1979835
-Node: LDAP Internationalization\7f1982529
-Node: LDAP Internationalization Variables\7f1983434
-Node: Encoder/Decoder Functions\7f1985163
-Node: Syntax of Search Filters\7f1986202
-Node: PostgreSQL Support\7f1987500
-Node: Building XEmacs with PostgreSQL support\7f1987895
-Node: XEmacs PostgreSQL libpq API\7f1989242
-Node: libpq Lisp Variables\7f1991121
-Node: libpq Lisp Symbols and DataTypes\7f1994085
-Node: Synchronous Interface Functions\7f2007325
-Node: Asynchronous Interface Functions\7f2011816
-Node: Large Object Support\7f2015319
-Node: Other libpq Functions\7f2015946
-Node: Unimplemented libpq Functions\7f2018981
-Node: XEmacs PostgreSQL libpq Examples\7f2024300
-Node: Internationalization\7f2030391
-Node: I18N Levels 1 and 2\7f2030734
-Node: I18N Level 3\7f2031440
-Node: Level 3 Basics\7f2031721
-Node: Level 3 Primitives\7f2032554
-Node: Dynamic Messaging\7f2034160
-Node: Domain Specification\7f2034623
-Node: Documentation String Extraction\7f2036526
-Node: I18N Level 4\7f2037444
-Node: MULE\7f2037636
-Node: Internationalization Terminology\7f2038685
-Node: Charsets\7f2050884
-Node: Charset Properties\7f2051580
-Node: Basic Charset Functions\7f2056295
-Node: Charset Property Functions\7f2058476
-Node: Predefined Charsets\7f2060518
-Node: MULE Characters\7f2063438
-Node: Composite Characters\7f2064285
-Node: Coding Systems\7f2065545
-Node: Coding System Types\7f2067685
-Node: ISO 2022\7f2071669
-Node: EOL Conversion\7f2083944
-Node: Coding System Properties\7f2085116
-Node: Basic Coding System Functions\7f2089433
-Node: Coding System Property Functions\7f2091467
-Node: Encoding and Decoding Text\7f2092025
-Node: Detection of Textual Encoding\7f2093161
-Node: Big5 and Shift-JIS Functions\7f2094697
-Node: Predefined Coding Systems\7f2095823
-Node: CCL\7f2107917
-Node: CCL Syntax\7f2111021
-Node: CCL Statements\7f2112597
-Node: CCL Expressions\7f2117245
-Node: Calling CCL\7f2119784
-Node: CCL Examples\7f2122773
-Node: Category Tables\7f2122910
-Node: Tips\7f2125268
-Node: Style Tips\7f2125909
-Node: Compilation Tips\7f2135428
-Node: Documentation Tips\7f2137342
-Node: Comment Tips\7f2142851
-Node: Library Headers\7f2145853
-Node: Building XEmacs and Object Allocation\7f2149825
-Node: Building XEmacs\7f2150708
-Node: Pure Storage\7f2157043
-Node: Garbage Collection\7f2159831
-Node: Standard Errors\7f2170970
-Node: Standard Buffer-Local Variables\7f2175179
-Node: Standard Keymaps\7f2177812
-Node: Standard Hooks\7f2181544
-Node: Index\7f2189044
+Node: Lisp History\7f71093
+Node: Conventions\7f72349
+Node: Some Terms\7f73164
+Node: nil and t\7f73885
+Node: Evaluation Notation\7f75562
+Node: Printing Notation\7f76475
+Node: Error Messages\7f77349
+Node: Buffer Text Notation\7f77790
+Node: Format of Descriptions\7f78665
+Node: A Sample Function Description\7f79519
+Node: A Sample Variable Description\7f83505
+Node: Acknowledgements\7f84413
+Node: Lisp Data Types\7f86391
+Node: Printed Representation\7f88946
+Node: Comments\7f90988
+Node: Primitive Types\7f91885
+Node: Programming Types\7f93544
+Node: Integer Type\7f95496
+Node: Floating Point Type\7f96533
+Node: Character Type\7f97152
+Node: Symbol Type\7f105056
+Node: Sequence Type\7f107751
+Node: Cons Cell Type\7f109270
+Node: Dotted Pair Notation\7f113754
+Node: Association List Type\7f115875
+Node: Array Type\7f116758
+Node: String Type\7f118224
+Node: Vector Type\7f120905
+Node: Bit Vector Type\7f121677
+Node: Function Type\7f122539
+Node: Macro Type\7f123652
+Node: Primitive Function Type\7f124349
+Node: Compiled-Function Type\7f125875
+Node: Autoload Type\7f126429
+Node: Char Table Type\7f127443
+Node: Hash Table Type\7f127617
+Node: Range Table Type\7f128772
+Node: Weak List Type\7f129625
+Node: Editing Types\7f129775
+Node: Buffer Type\7f131402
+Node: Marker Type\7f133429
+Node: Extent Type\7f134153
+Node: Window Type\7f135421
+Node: Frame Type\7f136832
+Node: Device Type\7f137627
+Node: Console Type\7f138453
+Node: Window Configuration Type\7f139654
+Node: Event Type\7f140352
+Node: Process Type\7f140516
+Node: Stream Type\7f141551
+Node: Keymap Type\7f142674
+Node: Syntax Table Type\7f143212
+Node: Display Table Type\7f144235
+Node: Database Type\7f144674
+Node: Charset Type\7f144840
+Node: Coding System Type\7f145004
+Node: ToolTalk Message Type\7f145188
+Node: ToolTalk Pattern Type\7f145387
+Node: Window-System Types\7f145559
+Node: Face Type\7f146705
+Node: Glyph Type\7f146836
+Node: Specifier Type\7f146992
+Node: Font Instance Type\7f147165
+Node: Color Instance Type\7f147355
+Node: Image Instance Type\7f147552
+Node: Toolbar Button Type\7f147750
+Node: Subwindow Type\7f147943
+Node: X Resource Type\7f148122
+Node: Type Predicates\7f148275
+Node: Equality Predicates\7f157404
+Node: Numbers\7f162215
+Node: Integer Basics\7f163670
+Node: Float Basics\7f166019
+Node: Predicates on Numbers\7f167761
+Node: Comparison of Numbers\7f169394
+Node: Numeric Conversions\7f173215
+Node: Arithmetic Operations\7f174681
+Node: Rounding Operations\7f180820
+Node: Bitwise Operations\7f181933
+Node: Math Functions\7f190979
+Node: Random Numbers\7f193512
+Node: Strings and Characters\7f195278
+Node: String Basics\7f196731
+Node: Predicates for Strings\7f199149
+Node: Creating Strings\7f199912
+Node: Predicates for Characters\7f205253
+Node: Character Codes\7f206324
+Node: Text Comparison\7f207744
+Node: String Conversion\7f211189
+Node: Modifying Strings\7f214859
+Node: String Properties\7f215500
+Node: Formatting Strings\7f216145
+Node: Character Case\7f225763
+Node: Case Tables\7f229317
+Node: Char Tables\7f233288
+Node: Char Table Types\7f234680
+Node: Working With Char Tables\7f236265
+Node: Lists\7f238282
+Node: Cons Cells\7f239405
+Node: Lists as Boxes\7f240741
+Node: List-related Predicates\7f243383
+Node: List Elements\7f245085
+Node: Building Lists\7f250114
+Node: Modifying Lists\7f256106
+Node: Setcar\7f256918
+Node: Setcdr\7f259349
+Node: Rearrangement\7f261870
+Node: Sets And Lists\7f267456
+Node: Association Lists\7f271684
+Ref: Association Lists-Footnote-1\7f280975
+Node: Property Lists\7f281180
+Node: Working With Normal Plists\7f282728
+Node: Working With Lax Plists\7f285065
+Node: Converting Plists To/From Alists\7f287345
+Node: Weak Lists\7f288693
+Node: Sequences Arrays Vectors\7f290856
+Node: Sequence Functions\7f293492
+Node: Arrays\7f297151
+Node: Array Functions\7f300215
+Node: Vectors\7f302748
+Node: Vector Functions\7f304246
+Node: Bit Vectors\7f306817
+Node: Bit Vector Functions\7f307662
+Node: Symbols\7f309961
+Node: Symbol Components\7f311010
+Node: Definitions\7f315183
+Node: Creating Symbols\7f317408
+Node: Symbol Properties\7f324442
+Node: Plists and Alists\7f325969
+Node: Object Plists\7f327718
+Node: Other Plists\7f330478
+Node: Evaluation\7f332277
+Node: Intro Eval\7f333082
+Ref: Intro Eval-Footnote-1\7f336435
+Node: Eval\7f336570
+Node: Forms\7f340988
+Node: Self-Evaluating Forms\7f342147
+Node: Symbol Forms\7f343660
+Node: Classifying Lists\7f344577
+Node: Function Indirection\7f345333
+Node: Function Forms\7f348432
+Node: Macro Forms\7f349429
+Node: Special Forms\7f351029
+Node: Autoloading\7f353338
+Node: Quoting\7f353836
+Node: Control Structures\7f355197
+Node: Sequencing\7f356817
+Node: Conditionals\7f359682
+Node: Combining Conditions\7f363105
+Node: Iteration\7f366375
+Node: Nonlocal Exits\7f368154
+Node: Catch and Throw\7f368856
+Node: Examples of Catch\7f372695
+Node: Errors\7f374714
+Node: Signaling Errors\7f376203
+Node: Processing of Errors\7f384950
+Node: Handling Errors\7f387229
+Node: Error Symbols\7f394470
+Node: Cleanups\7f398426
+Node: Variables\7f402204
+Node: Global Variables\7f403973
+Node: Constant Variables\7f405049
+Node: Local Variables\7f405675
+Node: Void Variables\7f410612
+Node: Defining Variables\7f414128
+Node: Accessing Variables\7f421292
+Node: Setting Variables\7f422717
+Node: Variable Scoping\7f427236
+Node: Scope\7f428835
+Node: Extent\7f430360
+Node: Impl of Scope\7f431839
+Node: Using Scoping\7f433802
+Node: Buffer-Local Variables\7f435324
+Node: Intro to Buffer-Local\7f436160
+Node: Creating Buffer-Local\7f438703
+Node: Default Value\7f444602
+Node: Variable Aliases\7f447745
+Node: Functions\7f449596
+Node: What Is a Function\7f450690
+Node: Lambda Expressions\7f454736
+Node: Lambda Components\7f455646
+Node: Simple Lambda\7f457478
+Node: Argument List\7f459135
+Node: Function Documentation\7f462863
+Node: Function Names\7f464805
+Node: Defining Functions\7f467378
+Node: Calling Functions\7f470418
+Node: Mapping Functions\7f474266
+Node: Anonymous Functions\7f476954
+Node: Function Cells\7f480199
+Node: Inline Functions\7f485017
+Node: Related Topics\7f486827
+Node: Macros\7f487880
+Node: Simple Macro\7f489164
+Node: Expansion\7f489899
+Node: Compiling Macros\7f492903
+Node: Defining Macros\7f494739
+Node: Backquote\7f496056
+Node: Problems with Macros\7f498453
+Node: Argument Evaluation\7f499148
+Node: Surprising Local Vars\7f502063
+Node: Eval During Expansion\7f504131
+Node: Repeated Expansion\7f505824
+Node: Customization\7f507740
+Node: Common Keywords\7f508209
+Node: Group Definitions\7f511054
+Node: Variable Definitions\7f513246
+Node: Customization Types\7f518236
+Node: Simple Types\7f519671
+Node: Composite Types\7f521828
+Node: Splicing into Lists\7f526518
+Node: Type Keywords\7f528353
+Node: Loading\7f531873
+Node: How Programs Do Loading\7f533548
+Node: Autoload\7f542674
+Node: Repeated Loading\7f548744
+Node: Named Features\7f550857
+Node: Unloading\7f557287
+Node: Hooks for Loading\7f559443
+Node: Byte Compilation\7f560160
+Node: Speed of Byte-Code\7f562077
+Node: Compilation Functions\7f563284
+Node: Docs and Compilation\7f569941
+Node: Dynamic Loading\7f572594
+Node: Eval During Compile\7f574958
+Node: Compiled-Function Objects\7f576223
+Node: Disassembly\7f581024
+Node: Debugging\7f588278
+Node: Debugger\7f589690
+Node: Error Debugging\7f590835
+Node: Infinite Loops\7f593588
+Node: Function Debugging\7f594832
+Node: Explicit Debug\7f597632
+Node: Using Debugger\7f598403
+Node: Debugger Commands\7f600265
+Node: Invoking the Debugger\7f604582
+Node: Internals of Debugger\7f608497
+Node: Syntax Errors\7f613384
+Node: Excess Open\7f614632
+Node: Excess Close\7f616507
+Node: Compilation Errors\7f617928
+Node: Edebug\7f619216
+Node: Using Edebug\7f621324
+Node: Instrumenting\7f624021
+Node: Edebug Execution Modes\7f627510
+Node: Jumping\7f630620
+Node: Edebug Misc\7f632963
+Node: Breakpoints\7f634352
+Node: Global Break Condition\7f637158
+Node: Embedded Breakpoints\7f638113
+Node: Trapping Errors\7f639068
+Node: Edebug Views\7f641144
+Node: Edebug Eval\7f643109
+Node: Eval List\7f644286
+Node: Reading in Edebug\7f647671
+Node: Printing in Edebug\7f648470
+Node: Tracing\7f650185
+Node: Coverage Testing\7f652073
+Node: The Outside Context\7f654114
+Node: Checking Whether to Stop\7f655063
+Node: Edebug Display Update\7f655710
+Node: Edebug Recursive Edit\7f657733
+Node: Instrumenting Macro Calls\7f659388
+Node: Specification List\7f661870
+Node: Backtracking\7f671281
+Node: Debugging Backquote\7f673219
+Node: Specification Examples\7f676925
+Node: Edebug Options\7f678992
+Node: Read and Print\7f684331
+Node: Streams Intro\7f685308
+Node: Input Streams\7f687326
+Node: Input Functions\7f692227
+Node: Output Streams\7f694287
+Node: Output Functions\7f698338
+Node: Output Variables\7f702638
+Node: Minibuffers\7f707439
+Node: Intro to Minibuffers\7f708591
+Node: Text from Minibuffer\7f710779
+Node: Object from Minibuffer\7f715873
+Node: Minibuffer History\7f719966
+Node: Completion\7f722945
+Node: Basic Completion\7f724920
+Node: Minibuffer Completion\7f729803
+Node: Completion Commands\7f733380
+Node: High-Level Completion\7f738037
+Node: Reading File Names\7f742786
+Node: Programmed Completion\7f746478
+Node: Yes-or-No Queries\7f748860
+Node: Multiple Queries\7f754597
+Node: Reading a Password\7f758664
+Node: Minibuffer Misc\7f760007
+Node: Command Loop\7f764887
+Node: Command Overview\7f766231
+Node: Defining Commands\7f769509
+Node: Using Interactive\7f770257
+Node: Interactive Codes\7f775030
+Node: Interactive Examples\7f780822
+Node: Interactive Call\7f782136
+Node: Command Loop Info\7f787551
+Node: Events\7f792530
+Node: Event Types\7f793991
+Node: Event Contents\7f795914
+Node: Event Predicates\7f800390
+Node: Accessing Mouse Event Positions\7f801708
+Node: Frame-Level Event Position Info\7f802407
+Node: Window-Level Event Position Info\7f803447
+Node: Event Text Position Info\7f805211
+Node: Event Glyph Position Info\7f807703
+Node: Event Toolbar Position Info\7f809026
+Node: Other Event Position Info\7f809697
+Node: Accessing Other Event Info\7f810106
+Node: Working With Events\7f811726
+Node: Converting Events\7f817727
+Node: Reading Input\7f821126
+Node: Key Sequence Input\7f822128
+Node: Reading One Event\7f824763
+Node: Dispatching an Event\7f827587
+Node: Quoted Character Input\7f828038
+Node: Peeking and Discarding\7f829386
+Node: Waiting\7f833290
+Node: Quitting\7f835604
+Node: Prefix Command Arguments\7f840012
+Node: Recursive Editing\7f845099
+Node: Disabling Commands\7f849894
+Node: Command History\7f851962
+Node: Keyboard Macros\7f853699
+Node: Keymaps\7f855916
+Node: Keymap Terminology\7f857493
+Node: Format of Keymaps\7f860422
+Node: Creating Keymaps\7f860833
+Node: Inheritance and Keymaps\7f862913
+Node: Key Sequences\7f865285
+Node: Prefix Keys\7f870081
+Node: Active Keymaps\7f873666
+Node: Key Lookup\7f883037
+Node: Functions for Key Lookup\7f888200
+Node: Changing Key Bindings\7f893901
+Node: Key Binding Commands\7f901063
+Node: Scanning Keymaps\7f903128
+Node: Other Keymap Functions\7f911696
+Node: Menus\7f912318
+Node: Menu Format\7f912910
+Node: Menubar Format\7f921556
+Node: Menubar\7f922181
+Node: Modifying Menus\7f925294
+Node: Menu Filters\7f930638
+Node: Pop-Up Menus\7f932534
+Node: Menu Accelerators\7f934862
+Node: Creating Menu Accelerators\7f935618
+Node: Keyboard Menu Traversal\7f936978
+Node: Menu Accelerator Functions\7f937705
+Node: Buffers Menu\7f940781
+Node: Dialog Boxes\7f942075
+Node: Dialog Box Format\7f942242
+Node: Dialog Box Functions\7f943667
+Node: Toolbar\7f944064
+Node: Toolbar Intro\7f944499
+Node: Creating Toolbar\7f946899
+Node: Toolbar Descriptor Format\7f947816
+Node: Specifying the Toolbar\7f952313
+Node: Other Toolbar Variables\7f955920
+Node: Gutter\7f960348
+Node: Gutter Intro\7f960937
+Node: Creating Gutter\7f962940
+Node: Gutter Descriptor Format\7f965827
+Node: Specifying a Gutter\7f970284
+Node: Other Gutter Variables\7f973819
+Node: Common Gutter Widgets\7f978206
+Node: Buffer Tabs\7f979198
+Node: Progress Bars\7f979339
+Node: Scrollbars\7f979484
+Node: Drag and Drop\7f979619
+Node: Supported Protocols\7f980695
+Node: OffiX DND\7f981198
+Node: CDE dt\7f982205
+Node: MSWindows OLE\7f982796
+Node: Loose ends\7f982967
+Node: Drop Interface\7f983359
+Node: Drag Interface\7f984381
+Node: Modes\7f984555
+Node: Major Modes\7f985506
+Node: Major Mode Conventions\7f988421
+Node: Example Major Modes\7f994376
+Node: Auto Major Mode\7f1002409
+Node: Mode Help\7f1009857
+Node: Derived Modes\7f1010958
+Node: Minor Modes\7f1013149
+Node: Minor Mode Conventions\7f1014451
+Node: Keymaps and Minor Modes\7f1017314
+Node: Modeline Format\7f1018149
+Node: Modeline Data\7f1019917
+Node: Modeline Variables\7f1025070
+Node: %-Constructs\7f1029786
+Node: Hooks\7f1032773
+Node: Documentation\7f1039533
+Node: Documentation Basics\7f1040956
+Node: Accessing Documentation\7f1044006
+Node: Keys in Documentation\7f1050287
+Node: Describing Characters\7f1053770
+Node: Help Functions\7f1056119
+Node: Obsoleteness\7f1062569
+Node: Files\7f1065561
+Node: Visiting Files\7f1067486
+Node: Visiting Functions\7f1068991
+Node: Subroutines of Visiting\7f1074149
+Node: Saving Buffers\7f1076222
+Node: Reading from Files\7f1082315
+Node: Writing to Files\7f1084476
+Node: File Locks\7f1087193
+Node: Information about Files\7f1090260
+Node: Testing Accessibility\7f1091021
+Node: Kinds of Files\7f1094761
+Node: Truenames\7f1096442
+Node: File Attributes\7f1097444
+Node: Changing File Attributes\7f1102583
+Node: File Names\7f1108005
+Node: File Name Components\7f1109578
+Node: Directory Names\7f1112023
+Node: Relative File Names\7f1115253
+Node: File Name Expansion\7f1116223
+Node: Unique File Names\7f1119977
+Node: File Name Completion\7f1121592
+Node: User Name Completion\7f1124860
+Node: Contents of Directories\7f1126267
+Node: Create/Delete Dirs\7f1129580
+Node: Magic File Names\7f1130686
+Node: Partial Files\7f1136334
+Node: Intro to Partial Files\7f1136562
+Node: Creating a Partial File\7f1137802
+Node: Detached Partial Files\7f1138738
+Node: Format Conversion\7f1139860
+Node: Files and MS-DOS\7f1145358
+Node: Backups and Auto-Saving\7f1147422
+Node: Backup Files\7f1148097
+Node: Making Backups\7f1149494
+Node: Rename or Copy\7f1152243
+Node: Numbered Backups\7f1154736
+Node: Backup Names\7f1156971
+Node: Auto-Saving\7f1160263
+Node: Reverting\7f1168424
+Node: Buffers\7f1171759
+Node: Buffer Basics\7f1173175
+Node: Current Buffer\7f1175228
+Node: Buffer Names\7f1179932
+Node: Buffer File Name\7f1183139
+Node: Buffer Modification\7f1187258
+Node: Modification Time\7f1189501
+Node: Read Only Buffers\7f1192876
+Node: The Buffer List\7f1196115
+Node: Creating Buffers\7f1200932
+Node: Killing Buffers\7f1203078
+Node: Indirect Buffers\7f1206910
+Node: Windows\7f1209484
+Node: Basic Windows\7f1210962
+Node: Splitting Windows\7f1214060
+Node: Deleting Windows\7f1219386
+Node: Selecting Windows\7f1223304
+Node: Cyclic Window Ordering\7f1227527
+Node: Buffers and Windows\7f1232682
+Node: Displaying Buffers\7f1234460
+Node: Choosing Window\7f1239799
+Node: Window Point\7f1247717
+Node: Window Start\7f1249787
+Node: Vertical Scrolling\7f1254586
+Node: Horizontal Scrolling\7f1260784
+Node: Size of Window\7f1264313
+Node: Position of Window\7f1269031
+Node: Resizing Windows\7f1271284
+Node: Window Configurations\7f1276722
+Node: Frames\7f1280219
+Node: Creating Frames\7f1282560
+Node: Frame Properties\7f1283900
+Node: Property Access\7f1284716
+Node: Initial Properties\7f1285623
+Node: X Frame Properties\7f1288109
+Node: Size and Position\7f1292743
+Node: Frame Name\7f1294741
+Node: Frame Titles\7f1295655
+Node: Deleting Frames\7f1297479
+Node: Finding All Frames\7f1298454
+Node: Frames and Windows\7f1301682
+Node: Minibuffers and Frames\7f1304464
+Node: Input Focus\7f1305382
+Node: Visibility of Frames\7f1308487
+Node: Raising and Lowering\7f1310477
+Node: Frame Configurations\7f1312853
+Node: Frame Hooks\7f1313910
+Node: Consoles and Devices\7f1315715
+Node: Basic Console Functions\7f1318458
+Node: Basic Device Functions\7f1318881
+Node: Console Types and Device Classes\7f1319727
+Node: Connecting to a Console or Device\7f1321994
+Node: The Selected Console and Device\7f1324178
+Node: Console and Device I/O\7f1325204
+Node: Positions\7f1325968
+Node: Point\7f1326937
+Node: Motion\7f1330027
+Node: Character Motion\7f1330794
+Node: Word Motion\7f1333031
+Node: Buffer End Motion\7f1334532
+Node: Text Lines\7f1336069
+Node: Screen Lines\7f1340970
+Node: List Motion\7f1345033
+Node: Skipping Characters\7f1348515
+Node: Excursions\7f1350734
+Node: Narrowing\7f1353774
+Node: Markers\7f1359105
+Node: Overview of Markers\7f1360011
+Node: Predicates on Markers\7f1364703
+Node: Creating Markers\7f1365949
+Node: Information from Markers\7f1370149
+Node: Changing Markers\7f1371247
+Node: The Mark\7f1372775
+Node: The Region\7f1381278
+Node: Text\7f1386964
+Node: Near Point\7f1389663
+Node: Buffer Contents\7f1393850
+Node: Comparing Text\7f1395256
+Node: Insertion\7f1396664
+Node: Commands for Insertion\7f1400574
+Node: Deletion\7f1403468
+Node: User-Level Deletion\7f1407062
+Node: The Kill Ring\7f1411222
+Node: Kill Ring Concepts\7f1413396
+Node: Kill Functions\7f1414450
+Node: Yank Commands\7f1416373
+Node: Low-Level Kill Ring\7f1418244
+Node: Internals of Kill Ring\7f1421330
+Node: Undo\7f1424110
+Node: Maintaining Undo\7f1428447
+Node: Filling\7f1431065
+Node: Margins\7f1437059
+Node: Auto Filling\7f1441082
+Node: Sorting\7f1442263
+Node: Columns\7f1451577
+Node: Indentation\7f1454658
+Node: Primitive Indent\7f1455437
+Node: Mode-Specific Indent\7f1456762
+Node: Region Indent\7f1459294
+Node: Relative Indent\7f1462241
+Node: Indent Tabs\7f1464623
+Node: Motion by Indent\7f1465944
+Node: Case Changes\7f1466723
+Node: Text Properties\7f1470076
+Node: Examining Properties\7f1471889
+Node: Changing Properties\7f1473772
+Node: Property Search\7f1477363
+Node: Special Properties\7f1482082
+Node: Saving Properties\7f1482363
+Node: Substitution\7f1485505
+Node: Registers\7f1488775
+Node: Transposition\7f1491358
+Node: Change Hooks\7f1492252
+Node: Transformations\7f1494292
+Node: Searching and Matching\7f1499396
+Node: String Search\7f1500527
+Node: Regular Expressions\7f1505508
+Node: Syntax of Regexps\7f1506875
+Node: Regexp Example\7f1521478
+Node: Regexp Search\7f1523648
+Node: POSIX Regexps\7f1529979
+Node: Search and Replace\7f1532056
+Node: Match Data\7f1535421
+Node: Simple Match Data\7f1536551
+Node: Replacing Match\7f1540816
+Node: Entire Match Data\7f1543497
+Node: Saving Match Data\7f1545735
+Node: Searching and Case\7f1547123
+Node: Standard Regexps\7f1549157
+Node: Syntax Tables\7f1551355
+Node: Syntax Basics\7f1552469
+Node: Syntax Descriptors\7f1555441
+Node: Syntax Class Table\7f1557291
+Node: Syntax Flags\7f1563329
+Node: Syntax Table Functions\7f1566546
+Node: Motion and Syntax\7f1570834
+Node: Parsing Expressions\7f1572286
+Node: Standard Syntax Tables\7f1578355
+Node: Syntax Table Internals\7f1579199
+Node: Abbrevs\7f1580225
+Node: Abbrev Mode\7f1582028
+Node: Abbrev Tables\7f1582748
+Node: Defining Abbrevs\7f1584287
+Node: Abbrev Files\7f1586208
+Node: Abbrev Expansion\7f1587991
+Node: Standard Abbrev Tables\7f1592622
+Node: Extents\7f1593781
+Node: Intro to Extents\7f1595024
+Node: Creating and Modifying Extents\7f1599016
+Node: Extent Endpoints\7f1600597
+Node: Finding Extents\7f1603860
+Node: Mapping Over Extents\7f1607982
+Node: Extent Properties\7f1614105
+Node: Detached Extents\7f1624266
+Node: Extent Parents\7f1626125
+Node: Duplicable Extents\7f1627819
+Node: Extents and Events\7f1631040
+Node: Atomic Extents\7f1632947
+Node: Specifiers\7f1633394
+Node: Introduction to Specifiers\7f1635507
+Node: Specifiers In-Depth\7f1637817
+Node: Specifier Instancing\7f1642729
+Node: Specifier Types\7f1645991
+Node: Adding Specifications\7f1651065
+Node: Retrieving Specifications\7f1660486
+Node: Specifier Tag Functions\7f1664231
+Node: Specifier Instancing Functions\7f1667465
+Node: Specifier Example\7f1670872
+Node: Creating Specifiers\7f1674028
+Node: Specifier Validation Functions\7f1678345
+Node: Other Specification Functions\7f1680731
+Node: Faces and Window-System Objects\7f1684552
+Node: Faces\7f1684876
+Node: Merging Faces\7f1686493
+Node: Basic Face Functions\7f1688454
+Node: Face Properties\7f1690602
+Node: Face Convenience Functions\7f1700875
+Node: Other Face Display Functions\7f1704095
+Node: Fonts\7f1704907
+Node: Font Specifiers\7f1705608
+Node: Font Instances\7f1706793
+Node: Font Instance Names\7f1707760
+Node: Font Instance Size\7f1708601
+Node: Font Instance Characteristics\7f1709887
+Node: Font Convenience Functions\7f1711065
+Node: Colors\7f1712355
+Node: Color Specifiers\7f1712795
+Node: Color Instances\7f1715155
+Node: Color Instance Properties\7f1715899
+Node: Color Convenience Functions\7f1716525
+Node: Glyphs\7f1717578
+Node: Glyph Functions\7f1719179
+Node: Creating Glyphs\7f1719586
+Node: Glyph Properties\7f1732226
+Node: Glyph Convenience Functions\7f1741393
+Node: Glyph Dimensions\7f1745340
+Node: Images\7f1746420
+Node: Image Specifiers\7f1746869
+Node: Image Instantiator Conversion\7f1762360
+Node: Image Instances\7f1763725
+Node: Image Instance Types\7f1764476
+Node: Image Instance Functions\7f1767241
+Node: Glyph Types\7f1774298
+Node: Mouse Pointer\7f1776070
+Node: Redisplay Glyphs\7f1779073
+Node: Subwindows\7f1780106
+Node: Annotations\7f1780349
+Node: Annotation Basics\7f1781365
+Node: Annotation Primitives\7f1785303
+Node: Annotation Properties\7f1786642
+Node: Locating Annotations\7f1789682
+Node: Margin Primitives\7f1790519
+Node: Annotation Hooks\7f1792413
+Node: Display\7f1793073
+Node: Refresh Screen\7f1794051
+Node: Truncation\7f1796245
+Node: The Echo Area\7f1798770
+Node: Warnings\7f1805207
+Node: Invisible Text\7f1809643
+Node: Selective Display\7f1812222
+Node: Overlay Arrow\7f1816348
+Node: Temporary Displays\7f1817701
+Node: Blinking\7f1821822
+Node: Usual Display\7f1824006
+Node: Display Tables\7f1826555
+Node: Display Table Format\7f1827359
+Node: Active Display Table\7f1828801
+Node: Character Descriptors\7f1832796
+Node: Beeping\7f1833553
+Node: Hash Tables\7f1838319
+Node: Introduction to Hash Tables\7f1838927
+Node: Working With Hash Tables\7f1845486
+Node: Weak Hash Tables\7f1846603
+Node: Range Tables\7f1848620
+Node: Introduction to Range Tables\7f1849309
+Node: Working With Range Tables\7f1849755
+Node: Databases\7f1850714
+Node: Connecting to a Database\7f1851013
+Node: Working With a Database\7f1852120
+Node: Other Database Functions\7f1852994
+Node: Processes\7f1853563
+Node: Subprocess Creation\7f1855787
+Node: Synchronous Processes\7f1859238
+Node: MS-DOS Subprocesses\7f1865960
+Node: Asynchronous Processes\7f1867034
+Node: Deleting Processes\7f1871391
+Node: Process Information\7f1873262
+Node: Input to Processes\7f1877354
+Node: Signals to Processes\7f1880049
+Node: Output from Processes\7f1884864
+Node: Process Buffers\7f1885676
+Node: Filter Functions\7f1888555
+Node: Accepting Output\7f1894146
+Node: Sentinels\7f1895673
+Node: Process Window Size\7f1899163
+Node: Transaction Queues\7f1899512
+Node: Network\7f1901210
+Node: System Interface\7f1903844
+Node: Starting Up\7f1905114
+Node: Start-up Summary\7f1905708
+Node: Init File\7f1909262
+Node: Terminal-Specific\7f1911643
+Node: Command Line Arguments\7f1914802
+Node: Getting Out\7f1918291
+Node: Killing XEmacs\7f1918860
+Node: Suspending XEmacs\7f1920528
+Node: System Environment\7f1923907
+Node: User Identification\7f1930088
+Node: Time of Day\7f1933617
+Node: Time Conversion\7f1936404
+Node: Timers\7f1941646
+Node: Terminal Input\7f1943819
+Node: Input Modes\7f1944322
+Node: Translating Input\7f1946781
+Node: Recording Input\7f1950946
+Node: Terminal Output\7f1953046
+Node: Flow Control\7f1956667
+Node: Batch Mode\7f1960629
+Node: X-Windows\7f1962011
+Node: X Selections\7f1962882
+Node: X Server\7f1965633
+Node: Resources\7f1966084
+Node: Server Data\7f1971395
+Node: Grabs\7f1972602
+Node: X Miscellaneous\7f1974182
+Node: ToolTalk Support\7f1976567
+Node: XEmacs ToolTalk API Summary\7f1976784
+Node: Sending Messages\7f1978084
+Node: Example of Sending Messages\7f1978335
+Node: Elisp Interface for Sending Messages\7f1979397
+Node: Receiving Messages\7f1985993
+Node: Example of Receiving Messages\7f1986216
+Node: Elisp Interface for Receiving Messages\7f1987052
+Node: LDAP Support\7f1990909
+Node: Building XEmacs with LDAP support\7f1991403
+Node: XEmacs LDAP API\7f1992380
+Node: LDAP Variables\7f1993432
+Node: The High-Level LDAP API\7f1996032
+Node: The Low-Level LDAP API\7f1999505
+Node: The LDAP Lisp Object\7f2000336
+Node: Opening and Closing a LDAP Connection\7f2000891
+Node: Low-level Operations on a LDAP Server\7f2002697
+Node: LDAP Internationalization\7f2005421
+Node: LDAP Internationalization Variables\7f2006326
+Node: Encoder/Decoder Functions\7f2008057
+Node: Syntax of Search Filters\7f2009094
+Node: PostgreSQL Support\7f2010392
+Node: Building XEmacs with PostgreSQL support\7f2010787
+Node: XEmacs PostgreSQL libpq API\7f2012134
+Node: libpq Lisp Variables\7f2014013
+Node: libpq Lisp Symbols and DataTypes\7f2016977
+Node: Synchronous Interface Functions\7f2030217
+Node: Asynchronous Interface Functions\7f2034708
+Node: Large Object Support\7f2038213
+Node: Other libpq Functions\7f2038840
+Node: Unimplemented libpq Functions\7f2041875
+Node: XEmacs PostgreSQL libpq Examples\7f2047194
+Node: Internationalization\7f2053285
+Node: I18N Levels 1 and 2\7f2053628
+Node: I18N Level 3\7f2054334
+Node: Level 3 Basics\7f2054615
+Node: Level 3 Primitives\7f2055448
+Node: Dynamic Messaging\7f2057054
+Node: Domain Specification\7f2057517
+Node: Documentation String Extraction\7f2059187
+Node: I18N Level 4\7f2060105
+Node: MULE\7f2060297
+Node: Internationalization Terminology\7f2061346
+Node: Charsets\7f2073545
+Node: Charset Properties\7f2074241
+Node: Basic Charset Functions\7f2078956
+Node: Charset Property Functions\7f2081137
+Node: Predefined Charsets\7f2083207
+Node: MULE Characters\7f2086127
+Node: Composite Characters\7f2087002
+Node: Coding Systems\7f2088269
+Node: Coding System Types\7f2090409
+Node: ISO 2022\7f2094393
+Node: EOL Conversion\7f2106668
+Node: Coding System Properties\7f2107840
+Node: Basic Coding System Functions\7f2112163
+Node: Coding System Property Functions\7f2114197
+Node: Encoding and Decoding Text\7f2114755
+Node: Detection of Textual Encoding\7f2115891
+Node: Big5 and Shift-JIS Functions\7f2117427
+Node: Predefined Coding Systems\7f2118579
+Node: CCL\7f2130673
+Node: CCL Syntax\7f2133777
+Node: CCL Statements\7f2135353
+Node: CCL Expressions\7f2140001
+Node: Calling CCL\7f2142540
+Node: CCL Examples\7f2145545
+Node: Category Tables\7f2145682
+Node: Tips\7f2148041
+Node: Style Tips\7f2148682
+Node: Compilation Tips\7f2158201
+Node: Documentation Tips\7f2160115
+Node: Comment Tips\7f2165624
+Node: Library Headers\7f2168626
+Node: Building XEmacs and Object Allocation\7f2172598
+Node: Building XEmacs\7f2173481
+Node: Pure Storage\7f2180059
+Node: Garbage Collection\7f2182847
+Node: Standard Errors\7f2193690
+Node: Standard Buffer-Local Variables\7f2197899
+Node: Standard Keymaps\7f2200532
+Node: Standard Hooks\7f2204266
+Node: Index\7f2211766
\1f
End Tag Table
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
=> 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
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
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)
(+ 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
(-)
=> 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)
(* 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::.)
=> 2
(/ 25 3 2)
=> 4
+ (/ 3.0)
+ => 0.3333333333333333
(/ -17 6)
=> -2
`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.
\1f
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.
\1f
File: lispref.info, Node: Random Numbers, Prev: Math Functions, Up: Numbers
`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"
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:
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
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
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
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"
=> ?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
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"
=> ?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
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"
- 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
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.
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:
* 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
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)
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
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.
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
- 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
(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
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:
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.
(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.
the environment of the error, so that you can examine values of
variables precisely as they were at the time of the error.
-\1f
-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
-
Foundation instead of in the original English.
\1f
+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
+
+\1f
File: lispref.info, Node: Error Symbols, Prev: Handling Errors, Up: Errors
Error Symbols and Condition Names
* Default Value:: The default value is seen in buffers
that don't have their own local values.
-\1f
-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::.
-
-\1f
-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.
-
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
\1f
Tag Table:
(Indirect)
Node: File Names\7f65804
Node: Visiting\7f67607
Node: Saving Files\7f69731
-Node: Other Customizations\7f73108
-Node: Setting Variables\7f75584
-Node: Init File\7f78793
-Node: Select and Move\7f84263
-Node: Selecting Text\7f85217
-Node: Mouse\7f86730
-Node: Region Operation\7f88055
-Node: Moving Text\7f89315
-Node: Accumulating text\7f90555
-Node: Search and Replace\7f92876
-Node: Key Index\7f96740
-Node: Command Index\7f100029
-Node: Variable Index\7f104131
-Node: Concept Index\7f104708
+Node: Other Customizations\7f73110
+Node: Setting Variables\7f75586
+Node: Init File\7f78795
+Node: Select and Move\7f84265
+Node: Selecting Text\7f85219
+Node: Mouse\7f86732
+Node: Region Operation\7f88057
+Node: Moving Text\7f89317
+Node: Accumulating text\7f90557
+Node: Search and Replace\7f92878
+Node: Key Index\7f96744
+Node: Command Index\7f100033
+Node: Variable Index\7f104135
+Node: Concept Index\7f104712
\1f
End Tag Table
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.
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.
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.
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.
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
`: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'.
\1f
Tag Table:
Node: Top\7f211
Node: Introduction\7f591
-Node: User Interface\7f4074
-Node: Programming Example\7f8969
-Node: Setting Up the Buffer\7f13119
-Node: Basic Types\7f14836
-Node: link\7f20881
-Node: url-link\7f21395
-Node: info-link\7f21707
-Node: push-button\7f21998
-Node: editable-field\7f22571
-Node: text\7f23910
-Node: menu-choice\7f24208
-Node: radio-button-choice\7f25061
-Node: item\7f26628
-Node: choice-item\7f27016
-Node: toggle\7f27514
-Node: checkbox\7f28251
-Node: checklist\7f28557
-Node: editable-list\7f30001
-Node: group\7f31183
-Node: Sexp Types\7f31470
-Node: constants\7f31783
-Node: generic\7f32862
-Node: atoms\7f33395
-Node: composite\7f35342
-Node: Widget Properties\7f37812
-Node: Defining New Widgets\7f40877
-Node: Widget Browser\7f46177
-Node: Widget Minor Mode\7f47035
-Node: Utilities\7f47592
-Node: Widget Wishlist\7f48073
+Node: User Interface\7f4075
+Node: Programming Example\7f8970
+Node: Setting Up the Buffer\7f13120
+Node: Basic Types\7f14837
+Node: link\7f20895
+Node: url-link\7f21409
+Node: info-link\7f21721
+Node: push-button\7f22012
+Node: editable-field\7f22585
+Node: text\7f24068
+Node: menu-choice\7f24366
+Node: radio-button-choice\7f25219
+Node: item\7f26786
+Node: choice-item\7f27174
+Node: toggle\7f27672
+Node: checkbox\7f28409
+Node: checklist\7f28715
+Node: editable-list\7f30159
+Node: group\7f31341
+Node: Sexp Types\7f31628
+Node: constants\7f31941
+Node: generic\7f33020
+Node: atoms\7f33553
+Node: composite\7f35500
+Node: Widget Properties\7f37970
+Node: Defining New Widgets\7f41035
+Node: Widget Browser\7f46335
+Node: Widget Minor Mode\7f47193
+Node: Utilities\7f47750
+Node: Widget Wishlist\7f48231
\1f
End Tag Table
\1f
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
\1f
Tag Table:
(Indirect)
Node: Top\7f205
-Node: Introduction\7f16499
-Node: Q1.0.1\7f19941
-Node: Q1.0.2\7f20477
-Node: Q1.0.3\7f21022
-Node: Q1.0.4\7f21284
-Node: Q1.0.5\7f22734
-Node: Q1.0.6\7f23423
-Node: Q1.0.7\7f24429
-Node: Q1.0.8\7f24682
-Node: Q1.0.9\7f24897
-Node: Q1.0.10\7f25175
-Node: Q1.0.11\7f25418
-Node: Q1.0.12\7f25807
-Node: Q1.0.13\7f26175
-Node: Q1.0.14\7f26424
-Node: Q1.1.1\7f26934
-Node: Q1.1.2\7f27976
-Node: Q1.1.3\7f28369
-Node: Q1.2.1\7f29320
-Node: Q1.2.2\7f30376
-Node: Q1.2.3\7f30810
-Node: Q1.3.1\7f31894
-Node: Q1.3.2\7f32545
-Node: Q1.3.3\7f33009
-Node: Q1.3.4\7f33250
-Node: Q1.3.5\7f34023
-Node: Q1.3.6\7f36428
-Node: Q1.3.7\7f37959
-Node: Q1.4.1\7f38894
-Node: Q1.4.2\7f39756
-Node: Q1.4.3\7f40097
-Node: Q1.4.4\7f40516
-Node: Q1.4.5\7f42056
-Node: Q1.4.6\7f42360
-Node: Installation\7f43353
-Node: Q2.0.1\7f45716
-Node: Q2.0.2\7f46516
-Node: Q2.0.3\7f48284
-Node: Q2.0.4\7f49582
-Node: Q2.0.5\7f50174
-Node: Q2.0.6\7f50522
-Node: Q2.0.7\7f50903
-Node: Q2.0.8\7f51284
-Node: Q2.0.9\7f52861
-Node: Q2.0.10\7f54299
-Node: Q2.0.11\7f55143
-Node: Q2.0.12\7f56084
-Node: Q2.1.1\7f57606
-Node: Q2.1.2\7f60348
-Node: Q2.1.3\7f61525
-Node: Q2.1.4\7f62818
-Node: Q2.1.5\7f63617
-Node: Q2.1.6\7f63979
-Node: Q2.1.7\7f64456
-Node: Q2.1.8\7f64809
-Node: Q2.1.9\7f66343
-Node: Q2.1.10\7f66765
-Node: Q2.1.11\7f67522
-Node: Q2.1.12\7f68387
-Node: Q2.1.13\7f69342
-Node: Q2.1.14\7f70373
-Node: Q2.1.15\7f71484
-Node: Q2.1.16\7f78516
-Node: Q2.1.17\7f79210
-Node: Q2.1.18\7f79807
-Node: Q2.1.19\7f79934
-Node: Q2.1.20\7f80464
-Node: Q2.1.21\7f80846
-Node: Q2.1.22\7f81039
-Node: Q2.1.23\7f82336
-Node: Q2.1.24\7f83004
-Node: Customization\7f83460
-Node: Q3.0.1\7f88298
-Node: Q3.0.2\7f89004
-Node: Q3.0.3\7f89568
-Node: Q3.0.4\7f89985
-Node: Q3.0.5\7f90818
-Node: Q3.0.6\7f91599
-Node: Q3.0.7\7f92179
-Node: Q3.0.8\7f92843
-Node: Q3.0.9\7f93801
-Node: Q3.1.1\7f94362
-Node: Q3.1.2\7f95099
-Node: Q3.1.3\7f95530
-Node: Q3.1.4\7f95719
-Node: Q3.1.5\7f95908
-Node: Q3.1.6\7f96292
-Node: Q3.1.7\7f97001
-Node: Q3.1.8\7f99225
-Node: Q3.2.1\7f99767
-Node: Q3.2.2\7f101420
-Node: Q3.2.3\7f102219
-Node: Q3.2.4\7f102821
-Node: Q3.2.5\7f103855
-Node: Q3.2.6\7f104322
-Node: Q3.3.1\7f105247
-Node: Q3.3.2\7f105677
-Node: Q3.3.3\7f106308
-Node: Q3.3.4\7f106689
-Node: Q3.3.5\7f107790
-Node: Q3.4.1\7f109284
-Node: Q3.4.2\7f109927
-Node: Q3.5.1\7f110439
-Node: Q3.5.2\7f111888
-Node: Q3.5.3\7f112306
-Node: Q3.5.4\7f113144
-Node: Q3.5.5\7f113976
-Node: Q3.5.6\7f115116
-Node: Q3.5.7\7f116106
-Node: Q3.5.8\7f117546
-Node: Q3.5.9\7f118293
-Node: Q3.5.10\7f119073
-Node: Q3.5.11\7f119709
-Node: Q3.6.1\7f120262
-Node: Q3.6.2\7f121007
-Node: Q3.6.3\7f121435
-Node: Q3.7.1\7f121935
-Node: Q3.7.2\7f122823
-Node: Q3.7.3\7f123482
-Node: Q3.7.4\7f123904
-Node: Q3.7.5\7f124247
-Node: Q3.7.6\7f124715
-Node: Q3.7.7\7f125430
-Node: Q3.7.8\7f126450
-Node: Q3.8.1\7f126869
-Node: Q3.8.2\7f127329
-Node: Q3.8.3\7f127792
-Node: Q3.8.4\7f128398
-Node: Q3.8.5\7f129117
-Node: Q3.9.1\7f129902
-Node: Q3.9.2\7f130842
-Node: Q3.9.3\7f131440
-Node: Q3.9.4\7f132102
-Node: Q3.10.1\7f132981
-Node: Q3.10.2\7f133799
-Node: Q3.10.3\7f134804
-Node: Q3.10.4\7f135532
-Node: Q3.10.5\7f135915
-Node: Subsystems\7f136967
-Node: Q4.0.1\7f139454
-Node: Q4.0.2\7f139979
-Node: Q4.0.3\7f140537
-Node: Q4.0.4\7f140858
-Node: Q4.0.5\7f141100
-Node: Q4.0.6\7f141331
-Node: Q4.0.7\7f141919
-Node: Q4.0.8\7f142244
-Node: Q4.0.9\7f143471
-Node: Q4.0.10\7f145509
-Node: Q4.0.11\7f145998
-Node: Q4.0.12\7f146876
-Node: Q4.1.1\7f147849
-Node: Q4.1.2\7f148252
-Node: Q4.1.3\7f148579
-Node: Q4.2.1\7f148888
-Node: Q4.2.2\7f149518
-Node: Q4.2.3\7f149758
-Node: Q4.2.4\7f150302
-Node: Q4.3.1\7f150955
-Node: Q4.3.2\7f151539
-Node: Q4.3.3\7f153020
-Node: Q4.3.4\7f153292
-Node: Q4.3.5\7f153969
-Node: Q4.4.1\7f154597
-Node: Q4.4.2\7f156083
-Node: Q4.5.1\7f157287
-Node: Q4.6.1\7f158056
-Node: Q4.7.1\7f163316
-Node: Q4.7.2\7f164271
-Node: Q4.7.3\7f164568
-Node: Q4.7.4\7f164754
-Node: Q4.7.5\7f165638
-Node: Q4.7.6\7f167279
-Node: Miscellaneous\7f167568
-Node: Q5.0.1\7f170981
-Node: Q5.0.2\7f171720
-Node: Q5.0.3\7f172574
-Node: Q5.0.4\7f173276
-Node: Q5.0.5\7f174215
-Node: Q5.0.6\7f176195
-Node: Q5.0.7\7f176852
-Node: Q5.0.8\7f177457
-Node: Q5.0.9\7f177976
-Node: Q5.0.10\7f178490
-Node: Q5.0.11\7f178738
-Node: Q5.0.12\7f179276
-Node: Q5.0.13\7f180193
-Node: Q5.0.14\7f180877
-Node: Q5.0.15\7f181642
-Node: Q5.0.16\7f181939
-Node: Q5.0.17\7f182451
-Node: Q5.0.18\7f182716
-Node: Q5.0.19\7f182910
-Node: Q5.0.20\7f183334
-Node: Q5.1.1\7f184249
-Node: Q5.1.2\7f186318
-Node: Q5.1.3\7f187054
-Node: Q5.1.4\7f190448
-Node: Q5.1.5\7f190983
-Node: Q5.1.6\7f193107
-Node: Q5.1.7\7f194593
-Node: Q5.1.8\7f196186
-Node: Q5.1.9\7f196738
-Node: Q5.1.10\7f197623
-Node: Q5.1.11\7f198754
-Node: Q5.2.1\7f199303
-Node: Q5.2.2\7f199873
-Node: Q5.2.3\7f200290
-Node: Q5.2.4\7f200525
-Node: Q5.3.1\7f201435
-Node: Q5.3.2\7f202656
-Node: Q5.3.3\7f203432
-Node: Q5.3.4\7f203916
-Node: Q5.3.5\7f204583
-Node: Q5.3.6\7f205452
-Node: Q5.3.7\7f205697
-Node: Q5.3.8\7f207887
-Node: Q5.3.9\7f208134
-Node: Q5.3.10\7f209087
-Node: Q5.3.11\7f211171
-Node: Q5.3.12\7f212762
-Node: MS Windows\7f214036
-Node: Q6.0.1\7f215513
-Node: Q6.0.2\7f216260
-Node: Q6.0.3\7f216725
-Node: Q6.0.4\7f217005
-Node: Q6.1.1\7f219284
-Node: Q6.1.2\7f220155
-Node: Q6.1.3\7f220610
-Node: Q6.1.4\7f220892
-Node: Q6.1.5\7f221270
-Node: Q6.1.6\7f222138
-Node: Q6.2.1\7f224444
-Node: Q6.2.2\7f225345
-Node: Q6.2.3\7f225757
-Node: Q6.3.1\7f226046
-Node: Q6.3.2\7f227140
-Node: Q6.3.3\7f230321
-Node: Q6.4.1\7f230590
-Node: Current Events\7f231925
-Node: Q7.0.1\7f232579
-Node: Q7.0.2\7f233218
-Node: Q7.0.3\7f234291
-Node: Q7.0.4\7f234519
+Node: Introduction\7f16704
+Node: Q1.0.1\7f20146
+Node: Q1.0.2\7f20682
+Node: Q1.0.3\7f21227
+Node: Q1.0.4\7f21489
+Node: Q1.0.5\7f22939
+Node: Q1.0.6\7f23628
+Node: Q1.0.7\7f24634
+Node: Q1.0.8\7f24887
+Node: Q1.0.9\7f25102
+Node: Q1.0.10\7f25380
+Node: Q1.0.11\7f25623
+Node: Q1.0.12\7f26012
+Node: Q1.0.13\7f26380
+Node: Q1.0.14\7f26629
+Node: Q1.1.1\7f27139
+Node: Q1.1.2\7f28181
+Node: Q1.1.3\7f28574
+Node: Q1.2.1\7f29525
+Node: Q1.2.2\7f30581
+Node: Q1.2.3\7f31015
+Node: Q1.3.1\7f32099
+Node: Q1.3.2\7f32750
+Node: Q1.3.3\7f33214
+Node: Q1.3.4\7f33455
+Node: Q1.3.5\7f34228
+Node: Q1.3.6\7f36633
+Node: Q1.3.7\7f38164
+Node: Q1.4.1\7f39099
+Node: Q1.4.2\7f39961
+Node: Q1.4.3\7f40302
+Node: Q1.4.4\7f40721
+Node: Q1.4.5\7f42261
+Node: Q1.4.6\7f42565
+Node: Installation\7f43558
+Node: Q2.0.1\7f46133
+Node: Q2.0.2\7f46933
+Node: Q2.0.3\7f48701
+Node: Q2.0.4\7f49999
+Node: Q2.0.5\7f50591
+Node: Q2.0.6\7f50939
+Node: Q2.0.7\7f51320
+Node: Q2.0.8\7f51701
+Node: Q2.0.9\7f53278
+Node: Q2.0.10\7f54716
+Node: Q2.0.11\7f55560
+Node: Q2.0.12\7f56501
+Node: Q2.0.13\7f58024
+Node: Q2.0.14\7f58513
+Node: Q2.1.1\7f59571
+Node: Q2.1.2\7f62313
+Node: Q2.1.3\7f63490
+Node: Q2.1.4\7f64783
+Node: Q2.1.5\7f65582
+Node: Q2.1.6\7f65944
+Node: Q2.1.7\7f66421
+Node: Q2.1.8\7f66774
+Node: Q2.1.9\7f68308
+Node: Q2.1.10\7f68730
+Node: Q2.1.11\7f69487
+Node: Q2.1.12\7f70352
+Node: Q2.1.13\7f71307
+Node: Q2.1.14\7f72338
+Node: Q2.1.15\7f73449
+Node: Q2.1.16\7f80481
+Node: Q2.1.17\7f81175
+Node: Q2.1.18\7f81772
+Node: Q2.1.19\7f81899
+Node: Q2.1.20\7f82429
+Node: Q2.1.21\7f82811
+Node: Q2.1.22\7f83004
+Node: Q2.1.23\7f84301
+Node: Q2.1.24\7f84969
+Node: Q2.1.25\7f85441
+Node: Customization\7f86076
+Node: Q3.0.1\7f90914
+Node: Q3.0.2\7f91620
+Node: Q3.0.3\7f92184
+Node: Q3.0.4\7f92601
+Node: Q3.0.5\7f93434
+Node: Q3.0.6\7f94215
+Node: Q3.0.7\7f94795
+Node: Q3.0.8\7f95459
+Node: Q3.0.9\7f96417
+Node: Q3.1.1\7f96978
+Node: Q3.1.2\7f97715
+Node: Q3.1.3\7f98146
+Node: Q3.1.4\7f98335
+Node: Q3.1.5\7f98524
+Node: Q3.1.6\7f98908
+Node: Q3.1.7\7f99617
+Node: Q3.1.8\7f101841
+Node: Q3.2.1\7f102383
+Node: Q3.2.2\7f104036
+Node: Q3.2.3\7f104835
+Node: Q3.2.4\7f105437
+Node: Q3.2.5\7f106471
+Node: Q3.2.6\7f106938
+Node: Q3.3.1\7f107863
+Node: Q3.3.2\7f108293
+Node: Q3.3.3\7f108924
+Node: Q3.3.4\7f109305
+Node: Q3.3.5\7f110406
+Node: Q3.4.1\7f111900
+Node: Q3.4.2\7f112543
+Node: Q3.5.1\7f113055
+Node: Q3.5.2\7f114504
+Node: Q3.5.3\7f114922
+Node: Q3.5.4\7f115760
+Node: Q3.5.5\7f116592
+Node: Q3.5.6\7f117732
+Node: Q3.5.7\7f118722
+Node: Q3.5.8\7f120162
+Node: Q3.5.9\7f120909
+Node: Q3.5.10\7f121689
+Node: Q3.5.11\7f122325
+Node: Q3.6.1\7f122878
+Node: Q3.6.2\7f123623
+Node: Q3.6.3\7f124051
+Node: Q3.7.1\7f124551
+Node: Q3.7.2\7f125439
+Node: Q3.7.3\7f126098
+Node: Q3.7.4\7f126520
+Node: Q3.7.5\7f126863
+Node: Q3.7.6\7f127331
+Node: Q3.7.7\7f128046
+Node: Q3.7.8\7f129066
+Node: Q3.8.1\7f129485
+Node: Q3.8.2\7f129945
+Node: Q3.8.3\7f130408
+Node: Q3.8.4\7f131014
+Node: Q3.8.5\7f131733
+Node: Q3.9.1\7f132518
+Node: Q3.9.2\7f133458
+Node: Q3.9.3\7f134056
+Node: Q3.9.4\7f134718
+Node: Q3.10.1\7f135597
+Node: Q3.10.2\7f136415
+Node: Q3.10.3\7f137420
+Node: Q3.10.4\7f138148
+Node: Q3.10.5\7f138531
+Node: Subsystems\7f139583
+Node: Q4.0.1\7f142070
+Node: Q4.0.2\7f142595
+Node: Q4.0.3\7f143153
+Node: Q4.0.4\7f143474
+Node: Q4.0.5\7f143716
+Node: Q4.0.6\7f143947
+Node: Q4.0.7\7f144535
+Node: Q4.0.8\7f144860
+Node: Q4.0.9\7f146087
+Node: Q4.0.10\7f148125
+Node: Q4.0.11\7f148614
+Node: Q4.0.12\7f149492
+Node: Q4.1.1\7f150465
+Node: Q4.1.2\7f150868
+Node: Q4.1.3\7f151195
+Node: Q4.2.1\7f151504
+Node: Q4.2.2\7f152134
+Node: Q4.2.3\7f152374
+Node: Q4.2.4\7f152918
+Node: Q4.3.1\7f153571
+Node: Q4.3.2\7f154155
+Node: Q4.3.3\7f155636
+Node: Q4.3.4\7f155908
+Node: Q4.3.5\7f156585
+Node: Q4.4.1\7f157213
+Node: Q4.4.2\7f158699
+Node: Q4.5.1\7f159903
+Node: Q4.6.1\7f160672
+Node: Q4.7.1\7f165932
+Node: Q4.7.2\7f166887
+Node: Q4.7.3\7f167184
+Node: Q4.7.4\7f167370
+Node: Q4.7.5\7f168254
+Node: Q4.7.6\7f169895
+Node: Miscellaneous\7f170184
+Node: Q5.0.1\7f173597
+Node: Q5.0.2\7f174336
+Node: Q5.0.3\7f175190
+Node: Q5.0.4\7f175892
+Node: Q5.0.5\7f176831
+Node: Q5.0.6\7f178811
+Node: Q5.0.7\7f179468
+Node: Q5.0.8\7f180073
+Node: Q5.0.9\7f180592
+Node: Q5.0.10\7f181106
+Node: Q5.0.11\7f181354
+Node: Q5.0.12\7f181892
+Node: Q5.0.13\7f182809
+Node: Q5.0.14\7f183493
+Node: Q5.0.15\7f184258
+Node: Q5.0.16\7f184555
+Node: Q5.0.17\7f185067
+Node: Q5.0.18\7f185332
+Node: Q5.0.19\7f185526
+Node: Q5.0.20\7f185950
+Node: Q5.1.1\7f186865
+Node: Q5.1.2\7f188934
+Node: Q5.1.3\7f189670
+Node: Q5.1.4\7f193064
+Node: Q5.1.5\7f193599
+Node: Q5.1.6\7f195723
+Node: Q5.1.7\7f197209
+Node: Q5.1.8\7f198802
+Node: Q5.1.9\7f199354
+Node: Q5.1.10\7f200239
+Node: Q5.1.11\7f201370
+Node: Q5.2.1\7f201919
+Node: Q5.2.2\7f202489
+Node: Q5.2.3\7f202906
+Node: Q5.2.4\7f203141
+Node: Q5.3.1\7f204051
+Node: Q5.3.2\7f205272
+Node: Q5.3.3\7f206048
+Node: Q5.3.4\7f206532
+Node: Q5.3.5\7f207199
+Node: Q5.3.6\7f208068
+Node: Q5.3.7\7f208313
+Node: Q5.3.8\7f210503
+Node: Q5.3.9\7f210750
+Node: Q5.3.10\7f211703
+Node: Q5.3.11\7f213787
+Node: Q5.3.12\7f215378
+Node: MS Windows\7f216652
+Node: Q6.0.1\7f218129
+Node: Q6.0.2\7f218876
+Node: Q6.0.3\7f219341
+Node: Q6.0.4\7f219621
+Node: Q6.1.1\7f221900
+Node: Q6.1.2\7f222771
+Node: Q6.1.3\7f223226
+Node: Q6.1.4\7f223508
+Node: Q6.1.5\7f223886
+Node: Q6.1.6\7f224754
+Node: Q6.2.1\7f227060
+Node: Q6.2.2\7f227961
+Node: Q6.2.3\7f228373
+Node: Q6.3.1\7f228662
+Node: Q6.3.2\7f229756
+Node: Q6.3.3\7f232937
+Node: Q6.4.1\7f233206
+Node: Current Events\7f234541
+Node: Q7.0.1\7f235195
+Node: Q7.0.2\7f235834
+Node: Q7.0.3\7f236907
+Node: Q7.0.4\7f237135
\1f
End Tag Table
* 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!
* 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
* 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!
* 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)
\1f
File: xemacs-faq.info, Node: Q2.0.1, Next: Q2.0.2, Prev: Installation, Up: Installation
same thing. It also might be found at
`ftp://ftp.x.org/contrib/audio/nas/'.
-\1f
-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 <ben@xemacs.org> writes:
-
- Your ncurses configuration is messed up. Your /usr/lib/terminfo
- is a bad pointer, perhaps to a CD-ROM that is not inserted.
-
END-INFO-DIR-ENTRY
\1f
+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 <ben@xemacs.org> writes:
+
+ Your ncurses configuration is messed up. Your /usr/lib/terminfo
+ is a bad pointer, perhaps to a CD-ROM that is not inserted.
+
+\1f
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?
then proceed to link against the DNS resolver library code.
\1f
-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?
----------------------------------
/usr/local/lib/xemacs-19.16/i586-unknown-linuxaout
\1f
-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_.
+
+\1f
+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 <tarballname> | 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.
+
+\1f
+File: xemacs-faq.info, Node: Q2.1.1, Next: Q2.1.2, Prev: Q2.0.14, Up: Installation
2.1: Trouble Shooting
=====================
#define MAIL_USE_FLOCK
\1f
-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)
---------------------------------------------------
Add that line, and XEmacs will be happy.
\1f
+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::).
+
+\1f
File: xemacs-faq.info, Node: Customization, Next: Subsystems, Prev: Installation, Up: Top
3 Customization and Options
That is, use the file name, or the dired-directory, or the buffer
name.
-\1f
-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")))
-
-\1f
-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 <ben@xemacs.org> 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...
-
\1f
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
\1f
Tag Table:
(Indirect)
Node: Top\7f1350
-Node: License\7f22773
-Node: Distrib\7f36055
-Node: Intro\7f37719
-Node: Frame\7f40590
-Node: Point\7f44534
-Node: Echo Area\7f46501
-Node: Mode Line\7f48878
-Node: XEmacs under X\7f53309
-Node: Keystrokes\7f56486
-Node: Intro to Keystrokes\7f57330
-Node: Representing Keystrokes\7f59433
-Node: Key Sequences\7f60790
-Node: String Key Sequences\7f64131
-Node: Meta Key\7f64514
-Node: Super and Hyper Keys\7f65987
-Node: Character Representation\7f72232
-Node: Commands\7f73252
-Node: Pull-down Menus\7f76101
-Node: File Menu\7f79450
-Node: Edit Menu\7f83272
-Node: Apps Menu\7f85655
-Node: Options Menu\7f86145
-Node: Buffers Menu\7f90163
-Node: Tools Menu\7f90470
-Node: Help Menu\7f90961
-Node: Menu Customization\7f91362
-Node: Entering Emacs\7f95592
-Node: Exiting\7f98489
-Node: Command Switches\7f102962
-Node: Startup Paths\7f112326
-Node: Basic\7f119653
-Node: Inserting Text\7f121062
-Node: Moving Point\7f124058
-Node: Erasing\7f127664
-Node: Basic Files\7f128969
-Node: Basic Help\7f130891
-Node: Blank Lines\7f131486
-Node: Continuation Lines\7f133062
-Node: Position Info\7f134729
-Node: Arguments\7f138145
-Node: Undo\7f142244
-Node: Minibuffer\7f145191
-Node: Minibuffer File\7f147801
-Node: Minibuffer Edit\7f149606
-Node: Completion\7f152547
-Node: Completion Example\7f154478
-Node: Completion Commands\7f155573
-Node: Strict Completion\7f158549
-Node: Completion Options\7f160330
-Node: Minibuffer History\7f161838
-Node: Repetition\7f165022
-Node: M-x\7f167867
-Node: Help\7f172961
-Node: Help Summary\7f174371
-Node: Key Help\7f177157
-Node: Name Help\7f178116
-Node: Apropos\7f180761
-Node: Library Keywords\7f183880
-Node: Help Mode\7f186201
-Node: Misc Help\7f186698
-Node: Mark\7f189846
-Node: Setting Mark\7f191700
-Node: Using Region\7f194822
-Node: Marking Objects\7f195559
-Node: Mark Ring\7f197397
-Node: Mouse Selection\7f199113
-Node: Additional Mouse Operations\7f201120
-Node: Killing\7f205324
-Node: Yanking\7f210960
-Node: Kill Ring\7f211763
-Node: Appending Kills\7f213365
-Node: Earlier Kills\7f215402
-Node: Using X Selections\7f218015
-Node: X Clipboard Selection\7f219265
-Node: X Selection Commands\7f221442
-Node: X Cut Buffers\7f222528
-Node: Active Regions\7f223887
-Node: Accumulating Text\7f228467
-Node: Rectangles\7f231540
-Node: Registers\7f235059
-Node: RegPos\7f236513
-Node: RegText\7f237669
-Node: RegRect\7f238775
-Node: RegConfig\7f239654
-Node: RegNumbers\7f240594
-Node: RegFiles\7f241312
-Node: Bookmarks\7f241970
-Node: Display\7f245342
-Node: Scrolling\7f246837
-Node: Horizontal Scrolling\7f250980
-Node: Selective Display\7f252175
-Node: Display Vars\7f253394
-Node: Search\7f256072
-Node: Incremental Search\7f257265
-Node: Non-Incremental Search\7f266193
-Node: Word Search\7f267635
-Node: Regexp Search\7f269253
-Node: Regexps\7f271623
-Node: Search Case\7f285620
-Node: Replace\7f286401
-Node: Unconditional Replace\7f287349
-Node: Regexp Replace\7f288484
-Node: Replacement and Case\7f289419
-Node: Query Replace\7f290399
-Node: Other Repeating Search\7f293626
-Node: Fixit\7f294881
-Node: Kill Errors\7f295461
-Node: Transpose\7f296794
-Node: Fixing Case\7f299198
-Node: Spelling\7f299844
-Node: Files\7f301305
-Node: File Names\7f302615
-Node: Visiting\7f306952
-Node: Saving\7f313638
-Node: Backup\7f318561
-Node: Backup Names\7f319957
-Node: Backup Deletion\7f321440
-Node: Backup Copying\7f322590
-Node: Interlocking\7f324296
-Node: Reverting\7f328424
-Node: Auto Save\7f330336
-Node: Auto Save Files\7f331303
-Node: Auto Save Control\7f333144
-Node: Recover\7f334982
-Node: Version Control\7f336137
-Node: Concepts of VC\7f338175
-Node: Editing with VC\7f339785
-Node: Variables for Check-in/out\7f345041
-Node: Log Entries\7f346940
-Node: Change Logs and VC\7f348120
-Node: Old Versions\7f351387
-Node: VC Status\7f353390
-Node: Renaming and VC\7f355104
-Node: Snapshots\7f355783
-Node: Making Snapshots\7f356284
-Node: Snapshot Caveats\7f357577
-Node: Version Headers\7f359386
-Node: ListDir\7f362085
-Node: Comparing Files\7f364134
-Node: Dired\7f365667
-Node: Dired Enter\7f366338
-Node: Dired Edit\7f367163
-Node: Dired Deletion\7f368910
-Node: Dired Immed\7f372133
-Node: Misc File Ops\7f373409
-Node: Buffers\7f375897
-Node: Select Buffer\7f378055
-Node: List Buffers\7f379850
-Node: Misc Buffer\7f381608
-Node: Kill Buffer\7f383251
-Node: Several Buffers\7f384381
-Node: Windows\7f388248
-Node: Basic Window\7f388959
-Node: Split Window\7f390678
-Node: Other Window\7f392811
-Node: Pop Up Window\7f395240
-Node: Change Window\7f396745
-Node: Mule\7f399653
-Node: Mule Intro\7f400916
-Node: Language Environments\7f401932
-Node: Input Methods\7f404039
-Node: Select Input Method\7f407759
-Node: Coding Systems\7f409914
-Node: Recognize Coding\7f414100
-Node: Specify Coding\7f417426
-Node: Major Modes\7f422357
-Node: Choosing Modes\7f424576
-Node: Indentation\7f426966
-Node: Indentation Commands\7f429061
-Node: Tab Stops\7f431790
-Node: Just Spaces\7f433639
-Node: Text\7f434454
-Node: Text Mode\7f436437
-Node: Nroff Mode\7f438516
-Node: TeX Mode\7f440159
-Node: TeX Editing\7f442411
-Node: TeX Print\7f445845
-Node: Outline Mode\7f449064
-Node: Outline Format\7f450545
-Node: Outline Motion\7f453345
-Node: Outline Visibility\7f454898
-Node: Words\7f457819
-Node: Sentences\7f460766
-Node: Paragraphs\7f462962
-Node: Pages\7f465250
-Node: Filling\7f467850
-Node: Auto Fill\7f468421
-Node: Fill Commands\7f470568
-Node: Fill Prefix\7f472733
-Node: Case\7f474921
-Node: Programs\7f476949
-Node: Program Modes\7f479499
-Node: Lists\7f481731
-Node: Defuns\7f487571
-Node: Grinding\7f490224
-Node: Basic Indent\7f490852
-Node: Multi-line Indent\7f492873
-Node: Lisp Indent\7f494489
-Node: C Indent\7f497939
-Node: Matching\7f503179
-Node: Comments\7f504701
-Node: Balanced Editing\7f511153
-Node: Lisp Completion\7f512167
-Node: Documentation\7f513182
-Node: Change Log\7f514421
-Node: Tags\7f516999
-Node: Tag Syntax\7f518648
-Node: Create Tags Table\7f522592
-Node: Etags Regexps\7f526652
-Node: Select Tags Table\7f531310
-Node: Find Tag\7f535083
-Node: Tags Search\7f538047
-Node: List Tags\7f541503
-Node: Fortran\7f542532
-Node: Fortran Motion\7f543608
-Node: Fortran Indent\7f544428
-Node: ForIndent Commands\7f545113
-Node: ForIndent Num\7f546258
-Node: ForIndent Conv\7f547532
-Node: ForIndent Vars\7f548308
-Node: Fortran Comments\7f549476
-Node: Fortran Columns\7f553074
-Node: Fortran Abbrev\7f554497
-Node: Asm Mode\7f555406
-Node: Running\7f555958
-Node: Compilation\7f556928
-Node: Lisp Modes\7f561778
-Node: Lisp Libraries\7f563051
-Node: Loading\7f563605
-Node: Compiling Libraries\7f568065
-Node: Mocklisp\7f570956
-Node: Lisp Eval\7f571633
-Node: Lisp Debug\7f575273
-Node: Lisp Interaction\7f580700
-Node: External Lisp\7f582055
-Node: Packages\7f584129
-Node: Package Terminology\7f584870
-Node: Using Packages\7f586228
-Node: Building Packages\7f595106
-Node: Abbrevs\7f597628
-Node: Defining Abbrevs\7f599828
-Node: Expanding Abbrevs\7f602275
-Node: Editing Abbrevs\7f604977
-Node: Saving Abbrevs\7f606850
-Node: Dynamic Abbrevs\7f608805
-Node: Picture\7f610107
-Node: Basic Picture\7f612540
-Node: Insert in Picture\7f614825
-Node: Tabs in Picture\7f616247
-Node: Rectangles in Picture\7f617768
-Node: Sending Mail\7f619676
-Node: Mail Format\7f621387
-Node: Mail Headers\7f622737
-Node: Mail Mode\7f629145
-Node: Reading Mail\7f632758
-Node: Calendar/Diary\7f634333
-Node: Calendar Motion\7f636005
-Node: Calendar Unit Motion\7f636888
-Node: Move to Beginning or End\7f639211
-Node: Specified Dates\7f640344
-Node: Scroll Calendar\7f641232
-Node: Mark and Region\7f643023
-Node: General Calendar\7f644929
-Node: LaTeX Calendar\7f646537
-Node: Holidays\7f648551
-Node: Sunrise/Sunset\7f651653
-Node: Lunar Phases\7f654692
-Node: Other Calendars\7f656077
-Node: Calendar Systems\7f657564
-Node: To Other Calendar\7f660675
-Node: From Other Calendar\7f662666
-Node: Mayan Calendar\7f664971
-Node: Diary\7f668166
-Node: Diary Commands\7f669915
-Node: Format of Diary File\7f673238
-Node: Date Formats\7f676108
-Node: Adding to Diary\7f678682
-Node: Special Diary Entries\7f680313
-Node: Calendar Customization\7f685652
-Node: Calendar Customizing\7f686514
-Node: Holiday Customizing\7f689749
-Node: Date Display Format\7f696236
-Node: Time Display Format\7f697194
-Node: Daylight Savings\7f698332
-Node: Diary Customizing\7f701520
-Node: Hebrew/Islamic Entries\7f706141
-Node: Fancy Diary Display\7f709481
-Node: Included Diary Files\7f711397
-Node: Sexp Diary Entries\7f712378
-Node: Appt Customizing\7f717468
-Node: Sorting\7f718514
-Node: Shell\7f723320
-Node: Single Shell\7f724613
-Node: Interactive Shell\7f726227
-Node: Shell Mode\7f729992
-Node: Terminal emulator\7f732483
-Node: Term Mode\7f734792
-Node: Paging in Term\7f735706
-Node: Narrowing\7f736504
-Node: Hardcopy\7f738454
-Node: Recursive Edit\7f739426
-Node: Dissociated Press\7f742413
-Node: CONX\7f744976
-Node: Amusements\7f746000
-Node: Emulation\7f746480
-Node: Customization\7f748340
-Node: Minor Modes\7f750156
-Node: Variables\7f751788
-Node: Examining\7f753744
-Node: Easy Customization\7f755205
-Node: Customization Groups\7f756219
-Node: Changing an Option\7f759148
-Node: Face Customization\7f765418
-Node: Specific Customization\7f767182
-Node: Edit Options\7f769789
-Node: Locals\7f771373
-Node: File Variables\7f774552
-Node: Keyboard Macros\7f779102
-Node: Basic Kbd Macro\7f781273
-Node: Save Kbd Macro\7f783205
-Node: Kbd Macro Query\7f784863
-Node: Key Bindings\7f786805
-Node: Keymaps\7f787679
-Node: Rebinding\7f791529
-Node: Interactive Rebinding\7f792228
-Node: Programmatic Rebinding\7f794417
-Node: Key Bindings Using Strings\7f797224
-Node: Disabling\7f798851
-Node: Syntax\7f800630
-Node: Syntax Entry\7f801511
-Node: Syntax Change\7f805595
-Node: Init File\7f807764
-Node: Init Syntax\7f809228
-Node: Init Examples\7f811579
-Node: Terminal Init\7f815769
-Node: Audible Bell\7f817506
-Node: Faces\7f820937
-Node: Frame Components\7f825779
-Node: X Resources\7f826224
-Node: Geometry Resources\7f827883
-Node: Iconic Resources\7f830331
-Node: Resource List\7f830803
-Node: Face Resources\7f837310
-Node: Widgets\7f840987
-Node: Menubar Resources\7f841926
-Node: Quitting\7f843440
-Node: Lossage\7f846418
-Node: Stuck Recursive\7f847062
-Node: Screen Garbled\7f847768
-Node: Text Garbled\7f848902
-Node: Unasked-for Search\7f849541
-Node: Emergency Escape\7f850326
-Node: Total Frustration\7f852105
-Node: Bugs\7f852736
-Node: Glossary\7f862297
-Node: Manifesto\7f893951
-Node: Key Index\7f917428
-Node: Command Index\7f943355
-Node: Variable Index\7f985941
-Node: Concept Index\7f1002027
+Node: License\7f22790
+Node: Distrib\7f36072
+Node: Intro\7f37736
+Node: Frame\7f40607
+Node: Point\7f44551
+Node: Echo Area\7f46518
+Node: Mode Line\7f48895
+Node: XEmacs under X\7f53326
+Node: Keystrokes\7f56503
+Node: Intro to Keystrokes\7f57347
+Node: Representing Keystrokes\7f59450
+Node: Key Sequences\7f60807
+Node: String Key Sequences\7f64148
+Node: Meta Key\7f64531
+Node: Super and Hyper Keys\7f66004
+Node: Character Representation\7f72249
+Node: Commands\7f73269
+Node: Pull-down Menus\7f76118
+Node: File Menu\7f79467
+Node: Edit Menu\7f83289
+Node: Apps Menu\7f85672
+Node: Options Menu\7f86162
+Node: Buffers Menu\7f90180
+Node: Tools Menu\7f90487
+Node: Help Menu\7f90978
+Node: Menu Customization\7f91379
+Node: Entering Emacs\7f95609
+Node: Exiting\7f98506
+Node: Command Switches\7f102979
+Node: Startup Paths\7f112343
+Node: Basic\7f119673
+Node: Inserting Text\7f121077
+Node: Moving Point\7f124073
+Node: Erasing\7f127679
+Node: Basic Files\7f128984
+Node: Basic Help\7f130906
+Node: Blank Lines\7f131501
+Node: Continuation Lines\7f133077
+Node: Position Info\7f134744
+Node: Arguments\7f138160
+Node: Undo\7f142259
+Node: Minibuffer\7f145206
+Node: Minibuffer File\7f147816
+Node: Minibuffer Edit\7f149621
+Node: Completion\7f152562
+Node: Completion Example\7f154493
+Node: Completion Commands\7f155588
+Node: Strict Completion\7f158564
+Node: Completion Options\7f160345
+Node: Minibuffer History\7f161853
+Node: Repetition\7f165037
+Node: M-x\7f167882
+Node: Help\7f172976
+Node: Help Summary\7f174386
+Node: Key Help\7f177172
+Node: Name Help\7f178131
+Node: Apropos\7f180776
+Node: Library Keywords\7f183895
+Node: Help Mode\7f186216
+Node: Misc Help\7f186713
+Node: Mark\7f189861
+Node: Setting Mark\7f191715
+Node: Using Region\7f194837
+Node: Marking Objects\7f195574
+Node: Mark Ring\7f197412
+Node: Mouse Selection\7f199128
+Node: Additional Mouse Operations\7f201135
+Node: Killing\7f205339
+Node: Yanking\7f210975
+Node: Kill Ring\7f211778
+Node: Appending Kills\7f213380
+Node: Earlier Kills\7f215417
+Node: Using X Selections\7f218030
+Node: X Clipboard Selection\7f219280
+Node: X Selection Commands\7f221457
+Node: X Cut Buffers\7f222543
+Node: Active Regions\7f223902
+Node: Accumulating Text\7f228482
+Node: Rectangles\7f231555
+Node: Registers\7f235074
+Node: RegPos\7f236528
+Node: RegText\7f237684
+Node: RegRect\7f238790
+Node: RegConfig\7f239669
+Node: RegNumbers\7f240609
+Node: RegFiles\7f241327
+Node: Bookmarks\7f241985
+Node: Display\7f245357
+Node: Scrolling\7f246852
+Node: Horizontal Scrolling\7f250995
+Node: Selective Display\7f252190
+Node: Display Vars\7f253409
+Node: Search\7f256087
+Node: Incremental Search\7f257280
+Node: Non-Incremental Search\7f266208
+Node: Word Search\7f267650
+Node: Regexp Search\7f269268
+Node: Regexps\7f271638
+Node: Search Case\7f285635
+Node: Replace\7f286416
+Node: Unconditional Replace\7f287364
+Node: Regexp Replace\7f288499
+Node: Replacement and Case\7f289434
+Node: Query Replace\7f290414
+Node: Other Repeating Search\7f293641
+Node: Fixit\7f294896
+Node: Kill Errors\7f295476
+Node: Transpose\7f296809
+Node: Fixing Case\7f299213
+Node: Spelling\7f299859
+Node: Files\7f301320
+Node: File Names\7f302630
+Node: Visiting\7f306967
+Node: Saving\7f313799
+Node: Backup\7f318722
+Node: Backup Names\7f320118
+Node: Backup Deletion\7f321601
+Node: Backup Copying\7f322751
+Node: Interlocking\7f324457
+Node: Reverting\7f328585
+Node: Auto Save\7f330497
+Node: Auto Save Files\7f331464
+Node: Auto Save Control\7f333305
+Node: Recover\7f335143
+Node: Version Control\7f336298
+Node: Concepts of VC\7f338336
+Node: Editing with VC\7f339946
+Node: Variables for Check-in/out\7f345202
+Node: Log Entries\7f347101
+Node: Change Logs and VC\7f348281
+Node: Old Versions\7f351548
+Node: VC Status\7f353551
+Node: Renaming and VC\7f355265
+Node: Snapshots\7f355944
+Node: Making Snapshots\7f356445
+Node: Snapshot Caveats\7f357738
+Node: Version Headers\7f359547
+Node: ListDir\7f362246
+Node: Comparing Files\7f364295
+Node: Dired\7f365828
+Node: Dired Enter\7f366499
+Node: Dired Edit\7f367324
+Node: Dired Deletion\7f369071
+Node: Dired Immed\7f372294
+Node: Misc File Ops\7f373570
+Node: Buffers\7f376058
+Node: Select Buffer\7f378216
+Node: List Buffers\7f380011
+Node: Misc Buffer\7f381769
+Node: Kill Buffer\7f383412
+Node: Several Buffers\7f384542
+Node: Windows\7f388409
+Node: Basic Window\7f389120
+Node: Split Window\7f390839
+Node: Other Window\7f392972
+Node: Pop Up Window\7f395403
+Node: Change Window\7f396908
+Node: Mule\7f399816
+Node: Mule Intro\7f401079
+Node: Language Environments\7f402095
+Node: Input Methods\7f404202
+Node: Select Input Method\7f407922
+Node: Coding Systems\7f410077
+Node: Recognize Coding\7f414263
+Node: Specify Coding\7f417589
+Node: Major Modes\7f422520
+Node: Choosing Modes\7f424739
+Node: Indentation\7f427129
+Node: Indentation Commands\7f429224
+Node: Tab Stops\7f431953
+Node: Just Spaces\7f433802
+Node: Text\7f434617
+Node: Text Mode\7f436600
+Node: Nroff Mode\7f438679
+Node: TeX Mode\7f440322
+Node: TeX Editing\7f442574
+Node: TeX Print\7f446008
+Node: Outline Mode\7f449227
+Node: Outline Format\7f450708
+Node: Outline Motion\7f453508
+Node: Outline Visibility\7f455061
+Node: Words\7f457982
+Node: Sentences\7f460929
+Node: Paragraphs\7f463125
+Node: Pages\7f465413
+Node: Filling\7f468013
+Node: Auto Fill\7f468584
+Node: Fill Commands\7f470731
+Node: Fill Prefix\7f472896
+Node: Case\7f475084
+Node: Programs\7f477112
+Node: Program Modes\7f479662
+Node: Lists\7f481894
+Node: Defuns\7f487734
+Node: Grinding\7f490387
+Node: Basic Indent\7f491015
+Node: Multi-line Indent\7f493036
+Node: Lisp Indent\7f494652
+Node: C Indent\7f498102
+Node: Matching\7f503342
+Node: Comments\7f504864
+Node: Balanced Editing\7f511316
+Node: Lisp Completion\7f512330
+Node: Documentation\7f513345
+Node: Change Log\7f514584
+Node: Tags\7f517162
+Node: Tag Syntax\7f518811
+Node: Create Tags Table\7f522755
+Node: Etags Regexps\7f526815
+Node: Select Tags Table\7f531473
+Node: Find Tag\7f535246
+Node: Tags Search\7f538210
+Node: List Tags\7f541666
+Node: Fortran\7f542695
+Node: Fortran Motion\7f543771
+Node: Fortran Indent\7f544591
+Node: ForIndent Commands\7f545276
+Node: ForIndent Num\7f546421
+Node: ForIndent Conv\7f547695
+Node: ForIndent Vars\7f548471
+Node: Fortran Comments\7f549639
+Node: Fortran Columns\7f553237
+Node: Fortran Abbrev\7f554660
+Node: Asm Mode\7f555569
+Node: Running\7f556121
+Node: Compilation\7f557090
+Node: Lisp Modes\7f561940
+Node: Lisp Libraries\7f563213
+Node: Loading\7f563767
+Node: Compiling Libraries\7f568227
+Node: Mocklisp\7f571118
+Node: Lisp Eval\7f571795
+Node: Lisp Debug\7f575435
+Node: Lisp Interaction\7f580862
+Node: External Lisp\7f582217
+Node: Packages\7f584291
+Node: Package Terminology\7f585110
+Node: Using Packages\7f586468
+Node: Building Packages\7f595346
+Node: Available Packages\7f597895
+Node: Abbrevs\7f603278
+Node: Defining Abbrevs\7f605477
+Node: Expanding Abbrevs\7f607924
+Node: Editing Abbrevs\7f610626
+Node: Saving Abbrevs\7f612499
+Node: Dynamic Abbrevs\7f614454
+Node: Picture\7f615756
+Node: Basic Picture\7f618189
+Node: Insert in Picture\7f620474
+Node: Tabs in Picture\7f621896
+Node: Rectangles in Picture\7f623417
+Node: Sending Mail\7f625325
+Node: Mail Format\7f627036
+Node: Mail Headers\7f628386
+Node: Mail Mode\7f634794
+Node: Reading Mail\7f638407
+Node: Calendar/Diary\7f639982
+Node: Calendar Motion\7f641654
+Node: Calendar Unit Motion\7f642537
+Node: Move to Beginning or End\7f644860
+Node: Specified Dates\7f645993
+Node: Scroll Calendar\7f646881
+Node: Mark and Region\7f648672
+Node: General Calendar\7f650578
+Node: LaTeX Calendar\7f652186
+Node: Holidays\7f654200
+Node: Sunrise/Sunset\7f657302
+Node: Lunar Phases\7f660341
+Node: Other Calendars\7f661726
+Node: Calendar Systems\7f663213
+Node: To Other Calendar\7f666324
+Node: From Other Calendar\7f668315
+Node: Mayan Calendar\7f670620
+Node: Diary\7f673815
+Node: Diary Commands\7f675564
+Node: Format of Diary File\7f678887
+Node: Date Formats\7f681757
+Node: Adding to Diary\7f684331
+Node: Special Diary Entries\7f685962
+Node: Calendar Customization\7f691301
+Node: Calendar Customizing\7f692163
+Node: Holiday Customizing\7f695398
+Node: Date Display Format\7f701885
+Node: Time Display Format\7f702843
+Node: Daylight Savings\7f703981
+Node: Diary Customizing\7f707169
+Node: Hebrew/Islamic Entries\7f711790
+Node: Fancy Diary Display\7f715130
+Node: Included Diary Files\7f717046
+Node: Sexp Diary Entries\7f718027
+Node: Appt Customizing\7f723117
+Node: Sorting\7f724163
+Node: Shell\7f728969
+Node: Single Shell\7f730262
+Node: Interactive Shell\7f731876
+Node: Shell Mode\7f735641
+Node: Terminal emulator\7f738132
+Node: Term Mode\7f740441
+Node: Paging in Term\7f741355
+Node: Narrowing\7f742153
+Node: Hardcopy\7f744103
+Node: Recursive Edit\7f745075
+Node: Dissociated Press\7f748062
+Node: CONX\7f750625
+Node: Amusements\7f751649
+Node: Emulation\7f752129
+Node: Customization\7f753989
+Node: Minor Modes\7f755805
+Node: Variables\7f757437
+Node: Examining\7f759393
+Node: Easy Customization\7f760854
+Node: Customization Groups\7f761868
+Node: Changing an Option\7f764797
+Node: Face Customization\7f771067
+Node: Specific Customization\7f772831
+Node: Edit Options\7f775438
+Node: Locals\7f777022
+Node: File Variables\7f780201
+Node: Keyboard Macros\7f784751
+Node: Basic Kbd Macro\7f786922
+Node: Save Kbd Macro\7f788854
+Node: Kbd Macro Query\7f790512
+Node: Key Bindings\7f792454
+Node: Keymaps\7f793328
+Node: Rebinding\7f797178
+Node: Interactive Rebinding\7f797877
+Node: Programmatic Rebinding\7f800066
+Node: Key Bindings Using Strings\7f802873
+Node: Disabling\7f804500
+Node: Syntax\7f806279
+Node: Syntax Entry\7f807160
+Node: Syntax Change\7f811244
+Node: Init File\7f813413
+Node: Init Syntax\7f814877
+Node: Init Examples\7f817228
+Node: Terminal Init\7f821418
+Node: Audible Bell\7f823155
+Node: Faces\7f826586
+Node: Frame Components\7f831428
+Node: X Resources\7f831873
+Node: Geometry Resources\7f833532
+Node: Iconic Resources\7f835980
+Node: Resource List\7f836452
+Node: Face Resources\7f842959
+Node: Widgets\7f846636
+Node: Menubar Resources\7f847575
+Node: Quitting\7f849089
+Node: Lossage\7f852067
+Node: Stuck Recursive\7f852711
+Node: Screen Garbled\7f853417
+Node: Text Garbled\7f854551
+Node: Unasked-for Search\7f855190
+Node: Emergency Escape\7f855975
+Node: Total Frustration\7f857754
+Node: Bugs\7f858385
+Node: Glossary\7f867946
+Node: Manifesto\7f899600
+Node: Key Index\7f923077
+Node: Command Index\7f949004
+Node: Variable Index\7f991590
+Node: Concept Index\7f1007676
\1f
End Tag Table
* 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.
* 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
* 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.
* 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.
Emacs only.
\1f
-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
======================================
package data directories as well as `data-directory'.
\1f
-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
**********************
+2000-11-14 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.37 is released.
+
+2000-09-01 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * make-po.c (BUFSIZE): Increase value to 32768.
+
2000-10-04 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.36 is released.
#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"
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.
+2000-11-14 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.37 is released.
+
+2000-11-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * code-cmds.el: Provide the feature.
+
+2000-07-21 Jan Vroonhof <jan@xemacs.org>
+
+ * 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 <carney@scubadoo.com>
+
+ * etags.el (buffer-tag-table-files): Use append instead of nconc.
+
+2000-11-09 Steve Youngs <youngs@xemacs.org>
+
+ * package-get.el (package-get-download-sites): Add a pre-release
+ site for experimental packages.
+
+ * auto-autoloads.el: Regenerated.
+
+2000-08-01 Andy Piper <andy@xemacs.org>
+
+ * 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 <martin@xemacs.org>
+
+ * bytecomp.el (byte-compile-defvar-or-defconst):
+ Only do loadhist recording if defvar form includes a value.
+
+2000-11-02 Martin Buchholz <martin@xemacs.org>
+
+ * bytecomp.el (byte-compile-initial-macro-environment):
+ `eval-when-compile' should not compile its body.
+
+2000-11-02 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * mule/cyrillic.el: Add Windows 1251 code page encoding (by
+ Sergey Groznyh <gsm@fct.ru> 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 <martin@xemacs.org>
+
+ * 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 <stephen@xemacs.org>
+
+ * cus-face.el: Typo fixes and tiny clarifications.
+ * custom.el: ditto
+
+2000-10-27 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * 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 <yoshiki@xemacs.org>
+
+ * files.el (auto-mode-alist): Allow mixed case suffix for idlwave-mode.
+
+2000-01-05 Yoshiki Hayashi <t90553@mail.ecc.u-tokyo.ac.jp>
+
+ * hyper-apropos.el (hyper-apropos-this-symbol): Don't always
+ get symbol at point-min.
+
+2000-10-24 Didier Verna <didier@xemacs.org>
+
+ * 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 <didier@xemacs.org>
+
+ * process.el (shell-command): when called from a program, avoid
+ 'push-mark's "mark-set" message.
+
+2000-10-15 MIYASHITA Hisashi <himi@m17n.org>
+
+ * 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 <yoshiki@xemacs.org>
+
+ * files.el (auto-mode-alist): Remove obsolete entry for html3-mode.
+
+2000-10-13 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * byte-optimize.el (byte-optimize-car): New function.
+ (byte-optimize-cdr): Ditto.
+
+2000-10-12 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * 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 <ge204@eng.cam.ac.uk>
+
+ * update-elc-2.el: Quote regexps correctly.
+
+2000-10-05 MIYASHITA Hisashi <himi@m17n.org>
+
+ * 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 <rpluim@bigfoot.com>
+
+ * 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 <daniel@rimspace.net>
+
+ * 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 <martin@xemacs.org>
+
+ * 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 <karlheg@bittersweet.inetarena.com>
+
+ * packages.el (packages-special-base-regexp): Add `man'.
+
+2000-10-08 Adrian Aichner <adrian@xemacs.org>
+
+ * 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 <martin@xemacs.org>
* XEmacs 21.2.36 is released.
* 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 <martin@xemacs.org>
* 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.
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'.
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):
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):
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.
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
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.
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.
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
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.
* files.el (auto-mode-alist): Add .spec for RPM.
2000-07-31 Andy Piper <andy@xemacs.org>
-
+
* gutter-items.el (update-tab-in-gutter): deprecate :properties.
2000-07-31 Yoshiki Hayashi <yoshiki@xemacs.org>
2000-07-10 Andy Piper <andy@xemacs.org>
* dialog-items.el: sync with Ben's patch.
-
+
* gutter-items.el (buffers-tab-switch-to-buffer): remove now-bogus
comment.
(progress-text-glyph): deleted.
* 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:
* 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.
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):
2000-07-16 Martin Buchholz <martin@xemacs.org>
- * 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.
* 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 <aichner@ecf.teradyne.com>
2000-07-15 Martin Buchholz <martin@xemacs.org>
- * 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.
* 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.
only when necessary.
2000-06-30 Charles G Waldman <cgw@alum.mit.edu>
-
+
* cl-macs.el: fix cl-transform-function-property kludge
so that it does not require a random feature.
* package-ui.el (defgroup pui): Correct a misspelling
(pui-toggle-package-delete): Change `seleted' to `selected'
-
+
2000-06-12 Jan Vroonhof <vroonhof@math.ethz.ch>
- * 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.
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.
* 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.
* 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):
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.
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.
2000-04-29 Martin Buchholz <martin@xemacs.org>
- * 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.
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 <ben@xemacs.org>
* help.el (describe-installation): correct typo introduced
* 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):
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.
* 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.
2000-04-16 Ben Wing <ben@xemacs.org>
* 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.
(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.
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.
* 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.
(append-progress-display): ditto.
2000-03-20 Jeff Miller <jmiller@cablespeed.com>
-
+
* lisp/make-docfile.el: call-process-internal is now implemented
in process.el.
2000-03-21 Ben Wing <ben@xemacs.org>
- * 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 <ben@xemacs.org>
* 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.
* 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.
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):
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
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
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
* simple.el (capitalize-string-as-title):
* simple.el (capitalize-region-as-title):
New.
-
+
* subr.el (add-hook):
* subr.el (make-local-hook): New.
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))))
\f
-(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)
(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")
(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."
(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)
;; 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))
(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))
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")
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)
;;;### (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)
;;;***
\f
(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,
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" "\
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.
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.
(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.
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)
;;;***
\f
For example, an element of the first form highlights (if not already highlighted):
- \"\\\\<foo\\\\>\" Discrete occurrences of \"foo\" in the value
+ \"\\\\\\=<foo\\\\\\=>\" Discrete occurrences of \"foo\" in the value
of the variable `font-lock-keyword-face'.
(\"fu\\\\(bar\\\\)\" . 1) Substring \"bar\" within all occurrences of
`fubar-match' finds and matches in the value
of `fubar-face'.
- (\"\\\\<anchor\\\\>\" (0 anchor-face) (\"\\\\<item\\\\>\" nil nil (0 item-face)))
+ (\"\\\\\\=<anchor\\\\\\=>\" (0 anchor-face) (\"\\\\\\=<item\\\\\\=>\" nil nil (0 item-face)))
-------------- --------------- ------------ --- --- -------------
| | | | | |
MATCHER | ANCHOR-MATCHER | +------+ MATCH-HIGHLIGHT
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.
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)
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.
;;;### (autoloads (mwheel-install) "mwheel" "lisp/mwheel.el")
(autoload 'mwheel-install "mwheel" "\
-Enable mouse wheel support." nil nil)
+Enable mouse wheel support." t nil)
;;;***
\f
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)
;;;### (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)
;;;***
(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)
;; 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
in the selected frame."
(interactive)
(let ((buff (Buffer-menu-buffer t))
- (menu (current-buffer))
+ (menu (current-buffer))
(others ())
tem)
(goto-char (point-min))
\f
;; 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
(progn (setq current (point)) ?\.)
?\ ))
(insert (if (buffer-modified-p buffer)
- ?\*
+ ?\*
?\ ))
(insert (if ro
?\%
"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."
"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."
;; 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:
;;(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 ...))
(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)
(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)
(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)))
\f
;;; enumerating those functions which need not be called if the returned
;;; value is not used. That is, something like
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
(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
;; Richard Stallman <rms@gnu.org>
;; 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.
;;; 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
;;; 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:
;;;
;;; 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.
;;;
(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.")
(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.")
(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)
'(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)
(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.
(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,
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
(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
(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)))
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
(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)
;; 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.
;...
(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
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
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
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))
(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.
;; 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.
(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.
(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.
(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
;; 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)
(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)
(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)))))
(when started-writing
(princ ")\n"))))
)
-
+
(defun custom-save-loaded-themes ()
(let ((themes (reverse (get 'user 'theme-loads-themes)))
(mapc (lambda (theme)
(princ "\n '")
(prin1 theme)) themes)
- (princ " )\n"))))
+ (princ " )\n"))))
;;;###autoload
(defun customize-save-customized ()
;;; Font Attributes.
+;; Consider adding the stuff in the XML font model here.
(defconst custom-face-attributes
'((:foreground (color :tag "Foreground"
:value ""
: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]....
(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)))
;;;###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)
"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))
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
(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)))
(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)))))
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
;;;;;;;;;;;;;;;;;; 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")
(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))))
\f
;; 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))
(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))
(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.
(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)
;; 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.
;;; 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
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.
(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.
(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)
(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)))))))
("\\.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)
("\\.[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
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
; "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
(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.
(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.
(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
"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
(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
;; #### - 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
: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)
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').
(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)
;; 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
(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
(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)
(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.
(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)))
(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)))))))
(fill-region (point) (mark) arg)
(fill-paragraph arg)))
-\f
+\f
(defconst default-justification 'left
"*Method of justifying text not otherwise specified.
Possible values are `left', `right', `full', `center', or `none'.
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)
(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))
;; 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)
;; 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
;; 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)
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
(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")
(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)
(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
(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)))
(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
(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]*$")))
(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))))
(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)
(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
For example, an element of the first form highlights (if not already highlighted):
- \"\\\\<foo\\\\>\" Discrete occurrences of \"foo\" in the value
+ \"\\\\\\=<foo\\\\\\=>\" Discrete occurrences of \"foo\" in the value
of the variable `font-lock-keyword-face'.
(\"fu\\\\(bar\\\\)\" . 1) Substring \"bar\" within all occurrences of
`fubar-match' finds and matches in the value
of `fubar-face'.
- (\"\\\\<anchor\\\\>\" (0 anchor-face) (\"\\\\<item\\\\>\" nil nil (0 item-face)))
+ (\"\\\\\\=<anchor\\\\\\=>\" (0 anchor-face) (\"\\\\\\=<item\\\\\\=>\" nil nil (0 item-face)))
-------------- --------------- ------------ --- --- -------------
| | | | | |
MATCHER | ANCHOR-MATCHER | +------+ MATCH-HIGHLIGHT
;;;###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:
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.")
\f
;; 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.
: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\").")
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
(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)
(/ (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))
;; 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))))
(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))))))
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)
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."
)
(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)
(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':
(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)
;;; 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.
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)
(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))
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)))
: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)."
'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
(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)
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
(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)
(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
(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)
(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)
((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))))
(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
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)
(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.")
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
(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 ()
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
(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)]
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_")
;; 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)
(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)
(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
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
(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' (`\\<help-mode-map>\\[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'
+(`\\<help-mode-map>\\[Info-goto-emacs-command-node]')")
;;;###autoload
(defvar Info-directory-list nil
(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."
"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.
(defvar Info-index-alternatives nil
"List of possible matches for last Info-index command.")
+
(defvar Info-index-first-alternative nil)
(defcustom Info-annotations-path
")
-(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)
(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))
;; 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))
(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.
(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."
(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)
(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)
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)
(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)
(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)
(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))
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
(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))))))))
(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
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
(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))))))
(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)))
;;;###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
(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))
(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.
(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)))
(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[.<suffix>]
+ (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)))
(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))
"")
")"
(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
(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)))
(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
(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)
(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.
(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))
\f
(defvar Info-mode-map nil
"Keymap containing Info commands.")
+
(if Info-mode-map
nil
(setq Info-mode-map (make-sparse-keymap))
(defvar Info-edit-map nil
"Local keymap used within `e' command of Info.")
+
(if Info-edit-map
nil
;; XEmacs: remove FSF stuff
(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)
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
(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
(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)
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
(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))
;; 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))
(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
;; 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
(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
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
\f
;; 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."
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.
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))
)))
-;; From Bill Dubuque <wgd@martigny.ai.mit.edu>
-
;; 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
(setq defn (key-binding defn))) ;; a keyboard macro
(insert (format "%s" defn)))))
-;; From Bill Dubuque <wgd@martigny.ai.mit.edu>
(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.
,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.
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 <wgd@martigny.ai.mit.edu>
(defun global-set-key (key command)
"Give KEY a global binding as COMMAND.
COMMAND is a symbol naming an interactively-callable function.
(define-key (current-global-map) key command)
nil)
-;; from Bill Dubuque <wgd@martigny.ai.mit.edu>
(defun local-set-key (key command)
"Give KEY a local binding as COMMAND.
COMMAND is a symbol naming an interactively-callable function.
;; Author: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
;; Maintainer: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
;; Created: Jan 1998
-;; Version: $Revision: 1.7.2.8 $
+;; Version: $Revision: 1.7.2.9 $
;; Keywords: help comm
;; This file is part of XEmacs
;; 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.
(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))
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'.
(checklist :inline t
:greedy t
(list
- :tag "Search Base"
+ :tag "Search Base"
:inline t
(const :tag "Search Base" base)
string)
(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
(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")
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)))
;; 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))
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)
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
(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
(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"))
(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"))
(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)
(provide 'ldap)
-
+
;;; ldap.el ends here
;;=== 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
([<path> <subdir>] <cache-record> <cache-record> ...)
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.
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.
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))))
\f
(defun beginning-of-defun (&optional arg)
"Move backward to the beginning of a defun.
;; 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
; ".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"))
\f
;; This needs to be redone better. -slb
(t "")))
(defconst default-menubar
- (purecopy-menubar
+; (purecopy-menubar ;purespace is dead
;; note backquote.
`(
("%_File"
["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)])))
\f
(defun maybe-add-init-button ()
;; 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.
((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"
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.
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)))
(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))
;; 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)
(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))
(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")
(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.
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)))
(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")
"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,...).")
(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)
(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
(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"))
;; #### 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))
"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
(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
"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
;; (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)
;;; 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 ?\e,L-\e(B ".")
(modify-syntax-entry ?\e,Lp\e(B ".")
;;; 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
(documentation . "Support for Cyrillic ISO-8859-5."))
'("Cyrillic"))
-;; KOI-8 staff
+;; KOI-8
(eval-and-compile
(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
(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
+ ?\e,L"\e(B ?\e,L#\e(B 32 ?\e,Ls\e(B 32 32 32 32 32 32 ?\e,L)\e(B 32 ?\e,L*\e(B ?\e,L,\e(B ?\e,L+\e(B ?\e,L/\e(B ;"
+ ?\e,Lr\e(B 32 32 32 32 32 32 32 32 32 ?\e,Ly\e(B 32 ?\e,Lz\e(B ?\e,L|\e(B ?\e,L{\e(B ?\e,L\7f\e(B
+ ?\e,L \e(B ?\e,L.\e(B ?\e,L~\e(B ?\e,L(\e(B ?\e,A$\e(B 32 ?\e,A&\e(B ?\e,L}\e(B ?\e,L!\e(B ?\e,A)\e(B ?\e,L$\e(B ?\e,A+\e(B ?\e,A,\e(B ?\e,L-\e(B ?\e,A.\e(B ?\e,L'\e(B
+ ?\e,A0\e(B ?\e,A1\e(B ?\e,L&\e(B ?\e,Lv\e(B 32 ?\e,A5\e(B ?\e,A6\e(B ?\e,A7\e(B ?\e,Lq\e(B ?\e,Lp\e(B ?\e,Lt\e(B ?\e,A;\e(B ?\e,Lx\e(B ?\e,L%\e(B ?\e,Lu\e(B ?\e,Lw\e(B
+ ?\e,L0\e(B ?\e,L1\e(B ?\e,L2\e(B ?\e,L3\e(B ?\e,L4\e(B ?\e,L5\e(B ?\e,L6\e(B ?\e,L7\e(B ?\e,L8\e(B ?\e,L9\e(B ?\e,L:\e(B ?\e,L;\e(B ?\e,L<\e(B ?\e,L=\e(B ?\e,L>\e(B ?\e,L?\e(B
+ ?\e,L@\e(B ?\e,LA\e(B ?\e,LB\e(B ?\e,LC\e(B ?\e,LD\e(B ?\e,LE\e(B ?\e,LF\e(B ?\e,LG\e(B ?\e,LH\e(B ?\e,LI\e(B ?\e,LJ\e(B ?\e,LK\e(B ?\e,LL\e(B ?\e,LM\e(B ?\e,LN\e(B ?\e,LO\e(B
+ ?\e,LP\e(B ?\e,LQ\e(B ?\e,LR\e(B ?\e,LS\e(B ?\e,LT\e(B ?\e,LU\e(B ?\e,LV\e(B ?\e,LW\e(B ?\e,LX\e(B ?\e,LY\e(B ?\e,LZ\e(B ?\e,L[\e(B ?\e,L\\e(B ?\e,L]\e(B ?\e,L^\e(B ?\e,L_\e(B
+ ?\e,L`\e(B ?\e,La\e(B ?\e,Lb\e(B ?\e,Lc\e(B ?\e,Ld\e(B ?\e,Le\e(B ?\e,Lf\e(B ?\e,Lg\e(B ?\e,Lh\e(B ?\e,Li\e(B ?\e,Lj\e(B ?\e,Lk\e(B ?\e,Ll\e(B ?\e,Lm\e(B ?\e,Ln\e(B ?\e,Lo\e(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 (\e,L@caaZXY\e(B) \e,L7T`PRabRcYbU\e(B!")
+ (documentation . "Support for Cyrillic Windows-1251."))
+ '("Cyrillic"))
+
+;;; ALTERNATIVNYJ
(eval-and-compile
(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
;; (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)
;; 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.
(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
;; 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)
(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.
;; 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:
;; 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.
;; 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'.
(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 -|
(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
(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))
(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
;; 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))
(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)
(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.
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)))))
\f
-;;; CCL dump stuff
+;;; CCL dump staffs
+
+;; To avoid byte-compiler warning.
+(defvar ccl-code)
;;;###autoload
(defun ccl-dump (ccl-code)
;; 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))))
(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))))
\f
;; CCL emulation staffs
(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))
;;;###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))
;; 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
(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)))
\f
;;; Language support stuff.
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.
;; 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.
(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
;; 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.
; ))))
-;;; 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)
(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."
((= dim 2) 'iso-8-2)
(t 'iso-8-designate))
))))))))
-
+
;;; mule-misc.el ends here
'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"
'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)
'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
;; 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))
(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.
;;;###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
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)
"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))
'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"
;; 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))
(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)
;; 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
;; 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)
(lambda (dir)
(condition-case ()
(delete-directory dir)))
- dirs))
+ dirs))
(setq default-directory orig-default-directory)
)))
)
(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)))
(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")
(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)
(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
(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)
(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)
(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
;; 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.
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.
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 "\
(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
(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.")
(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)
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
(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
;; 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)
)))
((and (not (eq system-type 'windows-nt))
(fboundp 'lpr-buffer))
- (lpr-region buf))
+ (lpr-region buffer))
(t (error "No print support available"))))
;; 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.
(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
(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.
(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.")
(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)))
(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))
(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)
;; 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),
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
(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.
(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
(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))
;; 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)))
;; 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.
;;; Commentary:
-;; This file is dumped with XEmacs
+;; This file is dumped with XEmacs
;;; Code:
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.")
"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)
(defun select-convert-from-integer (selection type value)
(cond ((integerp value) ; Integer
value)
-
+
((and (consp value) ; (integer . integer)
(integerp (car value))
(integerp (cdr value)))
(< (cdr value) 0))
(cdr value)
value)))
-
+
((and (listp value) ; (integer integer)
(eq (length value) 2)
(integerp (car value))
(< (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)
))
(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)
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
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))
;; 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
(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.
(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)))
(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.
;; next-complete-history-element
;; previous-complete-history-element
\f
-(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."
(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)
\f
;; 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
(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."
;(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.
; (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
;; 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")
((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)
(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.
;; 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)))
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.
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))
'(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
(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
(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
(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.
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.
(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
: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)
(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
(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))
(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))
(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
;; 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.
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)
(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.
(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.
(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.
;; 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)
(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
(= (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))))
(defun turn-on-auto-fill ()
"Unconditionally turn on Auto Fill mode."
+ (interactive)
(auto-fill-mode 1))
(defun set-fill-column (arg)
(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,
(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
(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")
(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")
"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
;; 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
;; #### 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
: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)
\f
(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;
(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))
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
(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
;; 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)))
\f
;;; Error functions
;;;; 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))
;; 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.
(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.
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)
(standard-syntax-table)
__key)
(funcall __function __key __value)))
- __table __range))
+ __syntax_table __range))
;(defun test-xm ()
; (let ((o (copy-syntax-table))
((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))
(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)))
"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)
;; 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
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
(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.
))
\f
(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.
(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)
(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))
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) ""))
))
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))
(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.
(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))))
\f
;;;
;;; 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)
(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)
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."
(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 <car> <cdr>) from \"\\E[n;<car>;<cdr>t\".
+That is it returns (cons <car> <cdr>) from \"\\E[n;<car>;<cdr>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)
(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 ()
(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
(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)
(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))
(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))))
;;; 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
;;;
;;;
;;; {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!
;;;
(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
;;;
;;; 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 ()
(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)
;; 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))
;; 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))
(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))
(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
(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))
(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 ()
(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
(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))))
\f
;;; 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"
(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))
(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
(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]
(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))
;;; 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
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)
;; `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
;; 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.
;; 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)
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)
"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???
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)
(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))))
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)
(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)
;;;; 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
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))
(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
; (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."
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
(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
(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)))
"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)
(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)
(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)
(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)))
"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)))
\f
;FSFmacs (provide 'select)
+2000-11-14 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.37 is released.
+
+2000-11-02 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * lwlib.h: Typo fixes and tiny clarifications.
+
2000-10-04 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.36 is released.
+2000-09-21 Andy Piper <andy@xemacs.org>
+
+ * lwlib.h: declare copy_widget_value_tree.
+
+ * lwlib.c (copy_widget_value_tree): make non-static.
+
2000-09-19 Martin Buchholz <martin@xemacs.org>
* *: Spelling mega-patch
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;
/* 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;
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;
+2000-11-14 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.37 is released.
+
+2000-10-27 Martin Buchholz <martin@xemacs.org>
+
+ * 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 <adrian@xemacs.org>
+
+ * 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 <stephen@xemacs.org>
+
+ * xemacs/menus.texi:
+ * widget.texi:
+ Typo fixes and tiny clarifications.
+
+2000-10-19 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * 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 <martin@xemacs.org>
* XEmacs 21.2.36 is released.
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.
@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
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
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}.
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
@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
@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
@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}.
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}
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
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.
@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
@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
@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.
@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}.
@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
@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
@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
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
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
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.
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
@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
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?
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
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
@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
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
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
@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
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.
@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:
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
;; @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
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
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
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.
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.
@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
@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
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)
@example
@group
emacs-build-time "Mon Apr 7 20:28:52 1997"
- @result{}
+ @result{}
@end group
@end example
@end defvar
(@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}))
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,
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.
@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
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.
@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}:
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
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
@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
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.,
@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
@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
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
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
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}
@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
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
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
@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,
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
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
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.
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
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
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
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).
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
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,
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
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}.)}
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
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
(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
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
@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
@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
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
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.
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
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
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
@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
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
@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
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}.
@example
@group
-(if nil
- (print 'true)
+(if nil
+ (print 'true)
'very-false)
@result{} very-false
@end group
never @code{nil}, so this clause never fails, provided the @code{cond}
gets to it at all.
-For example,
+For example,
@example
@group
@example
@group
(if @var{arg1} @var{arg1}
- (if @var{arg2} @var{arg2}
+ (if @var{arg2} @var{arg2}
@var{arg3}))
@end group
@end example
@end group
@group
-(catch 'hack
+(catch 'hack
(print (catch2 'hack))
'no)
@print{} yes
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.
@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))
;; @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
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.
@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
@menu
* Common Keywords::
-* Group Definitions::
-* Variable Definitions::
+* Group Definitions::
+* Variable Definitions::
* Customization Types::
@end menu
keyword.
@item %%
-Display a literal @samp{%}.
+Display a literal @samp{%}.
@end table
@item :action @var{action}
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.
@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.
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
@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
@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
@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
@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
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}:
@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
@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.
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
@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
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
@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
(blink-matching-open)))
@end group
@end smallexample
-@end defun
+@end deffn
@node Usual Display
@section Usual Display Conventions
@c -*-texinfo-*-
@c This is part of the XEmacs Lisp Reference Manual.
@c Copyright (C) 1998 Oliver Graf <ograf@fga.de>
-@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
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/
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
variable.
The customization group @code{drag-n-drop} shows all variables of user
-interest.
+interest.
@node Drag Interface
@section Drag Interface
@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.
@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}:
@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
@file{my-package.el}.
@example
-(add-hook 'edebug-setup-hook
+(add-hook 'edebug-setup-hook
(function (lambda () (require 'my-specs))))
@end example
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
@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
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}.
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
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
@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
@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
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}.
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.
@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.
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}.
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
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
@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
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
@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.
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-`}
@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))
@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.
@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
@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
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.
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
@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
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.
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?
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
@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
condition @code{file-error} is present.@*
@xref{Files}.
-@item file-locked
+@item file-locked
This is a @code{file-error}.@*
@xref{File Locks}.
@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
@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
@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.
@smallexample
@group
((lambda (arg) (erste arg))
- '(1 2 3))
+ '(1 2 3))
@result{} 1
@end group
@end smallexample
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:
@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
@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
@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
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
@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.
@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}.
@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
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
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
@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
@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
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
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}.
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
@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
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
@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
@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
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
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
@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
@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
@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
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.
@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
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
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
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,
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
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
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
@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
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
@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}.
@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
@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
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
@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.
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.
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
(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
(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
(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
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
@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
@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
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.
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
@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
@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
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
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
@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},
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.
@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
@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))
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
@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,
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
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.
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}).
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
@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
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.
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
@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
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
@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.)
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
``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
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
@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
@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
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
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
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
@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
* 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.
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
"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
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
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
@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}
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
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
@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
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
@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
@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
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
@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
@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}
@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}).
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
@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
@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 \\=\\<MAPVAR> 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 \<MAPVAR> specify to use the value of MAPVAR
as the keymap for future \[COMMAND] substrings.
\= quotes the following character and is discarded;
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
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
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},
@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
@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
@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,
@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
@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")
@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
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
@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
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
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
@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
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,
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
@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
@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
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
@end group
@group
(setq meta-prefix-char 24)
- @result{} 24
+ @result{} 24
@end group
@group
(key-binding "\C-xb")
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,
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
@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
@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
@smallexample
@group
-(current-local-map)
+(current-local-map)
@result{} #<keymap lisp-interaction-mode-map 5 entries 0x558>
(accessible-keymaps (current-local-map))
@result{}(([] . #<keymap lisp-interaction-mode-map 5 entries 0x558>)
@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
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
@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
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
@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
@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
@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
@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.
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
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
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
@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
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
@end defun
@defun ldap-close ldap
-Close the connection represented by @var{ldap}
+Close the connection represented by @var{ldap}.
@end defun
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.
@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
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
@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
@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
@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
@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
@code{<value>} 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.
@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}.
Format of Descriptions
-* A Sample Function Description::
-* A Sample Variable Description::
+* A Sample Function Description::
+* A Sample Variable Description::
Lisp Data Types
* 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
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
* 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
* 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.
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.
* 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
* 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.
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.
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.
* 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''.
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.
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
@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
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:
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
@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
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
@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
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
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
(autoload @var{filename} @var{docstring} @var{interactive} @var{type})
@end example
-For example,
+For example,
@example
@group
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
@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
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:
@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
@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
@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
@end group
@end smallexample
-Here is a macro definition that creates this expansion:
+Here is a macro definition that creates this expansion:
@smallexample
@group
@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
@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
@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
@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,
@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
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}.
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
@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
@example
@group
mark-ring
-@result{} (#<marker at 11050 in markers.texi>
+@result{} (#<marker at 11050 in markers.texi>
#<marker at 10832 in markers.texi>
@dots{})
@end group
@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
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.
@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.
@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
@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
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
@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.
@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
@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.
@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
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.
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.
@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{"})
@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
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).
@smallexample
@group
-(try-completion
+(try-completion
"foo"
'(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)))
@result{} "fooba"
@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)
@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
@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 ----------
@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
(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
@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
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}.
@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
@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
@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
@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
@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
@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
@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
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
@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
* 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
@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
@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
@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
;; @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{}
@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))
@end smallexample
Finally, here is the complete major mode function definition for
-Emacs Lisp mode.
+Emacs Lisp mode.
@smallexample
@group
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}.
@end group
@group
("\\.el\\'" . emacs-lisp-mode)
- ("\\.c\\'" . c-mode)
+ ("\\.c\\'" . c-mode)
("\\.h\\'" . c-mode)
@dots{})
@end group
@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))
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
@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
(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--")
@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
" "
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")
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
@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
(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")
"-%-")))))
@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.
@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
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
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
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
@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
@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.
@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
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
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).
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
(#### 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.)
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
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
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
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
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
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.
@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
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).
@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
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
@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
@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
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
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
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
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
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
@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
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
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
@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
@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)
@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
@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
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}.)
@result{} 2
(/ 25 3 2)
@result{} 4
+(/ 3.0)
+ @result{} 0.3333333333333333
(/ -17 6)
@result{} -2
@end example
@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
(lsh 3 2)
@result{} 12
;; @r{Decimal 3 becomes decimal 12.}
-00000011 @result{} 00001100
+00000011 @result{} 00001100
@end group
@end example
(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
@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
@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
@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
(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
@var{integer}, and vice-versa.
@example
-(lognot 5)
+(lognot 5)
@result{} -6
;; 5 = @r{0000 0000 0000 0000 0000 0000 0101}
;; @r{becomes}
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
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
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
@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
@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
@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
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.
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
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}.
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.
-@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})
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
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
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
Resumed!
@end group
@end smallexample
-@end defun
+@end deffn
@defvar suspend-hook
This variable is a normal hook run before suspending.
@item usg-unix-v
AT&T System V.
-@item vax-vms
-VAX VMS.
-
@item windows-nt
Microsoft windows NT.
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")
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
@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
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
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
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
@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
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
@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
@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})
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
@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
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
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
@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
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
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
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
@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
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
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
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
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
@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
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
@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
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
@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
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
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.
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}).
@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,
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
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
@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
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:
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
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}.
@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
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
@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
@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
@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
@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
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
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
@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
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
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
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
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
@group
sentence-end
@result{}
-"[.?!][]\"')@}]*\\($\\| $\\| \\| \\)[
+"[.?!][]\"')@}]*\\($\\| $\\| \\| \\)[
]*"
@end group
@end example
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
@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
@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.
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
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
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
@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,
@group
(string-match "\\(qu\\)\\(ick\\)"
"The quick fox jumped quickly.")
- ;0123456789
+ ;0123456789
@result{} 4
@end group
@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}.
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
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.
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
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
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
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
@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
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
(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
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
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.
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.
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.
@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,
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
@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
(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
@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"
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
@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
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)
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
@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:
@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)
(string< "abc" "ab")
@result{} nil
(string< "" "")
- @result{} nil
+ @result{} nil
@end group
@end example
@end defun
@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.
@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
(format "The buffer object prints as %s." (current-buffer))
@result{} "The buffer object prints as #<buffer strings.texi>."
-(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
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:
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
@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
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
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"
@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
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"
@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
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"
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
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
@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:
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
@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
@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
(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}
@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
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
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
@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
@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
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
@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
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
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}.
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
@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
@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},
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}.
---------- Buffer: foo ----------
@end group
@end smallexample
-@end defun
+@end deffn
@deffn Command just-one-space
@comment !!SourceFile simple.el
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}.
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
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
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
| |
| ___ ___ ---> ___ ___ ___ ___
--> |___|___|------> |___|___|--> |___|___|--> nil
- | | |
- | | |
- | | -->"yet older text"
+ | | |
+ | | |
+ | | -->"yet older text"
| |
- | --> "a different piece of text"
+ | --> "a different piece of text"
|
--> "some text"
@end group
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})
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}
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
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
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
@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
@example
@group
(sort-subr reverse
- (function
- (lambda ()
+ (function
+ (lambda ()
(skip-chars-forward "\n \t\f")))
'forward-paragraph)
@end group
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,
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
@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
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
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}
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
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
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
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
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
@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}.
@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}.
@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.
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.
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.
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
@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.
@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
@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
@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}.
@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
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
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
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
@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
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
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
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}.
@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
(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
@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
@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
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}
@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
@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}
@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}).
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
@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
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
(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"))
@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
@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
@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
@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
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
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
@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
@result{} 2
@end group
@group
-(let ((Y 1)
+(let ((Y 1)
(Z Y))
(list Y Z))
@result{} (1 2)
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
@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
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
(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:}
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
@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
* 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.
@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
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
@group
;; @r{Returns window created}
-(setq w2 (split-window w 15))
+(setq w2 (split-window w 15))
@result{} #<window 28 on windows.texi>
@end group
@group
@smallexample
@group
- __________
- | | line 0
+ __________
+ | | line 0
| w |
|__________|
| | line 15
@smallexample
@group
column 35
- __________
- | | | line 0
+ __________
+ | | | line 0
| w | w3 |
|___|______|
| | line 15
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
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):
@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
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
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.
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
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}.
@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.
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.
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
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
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}
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
@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
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
@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
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
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
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.
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}
@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
@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,
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
@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
(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
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
@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)))))
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
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
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.
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
@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
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
@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
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
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''.
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
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.
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:
@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
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
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
@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)
@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
@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
@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
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
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
options. For more information on protection against simultaneous
editing, @xref{Interlocking,,,xemacs,XEmacs User's Manual}.
-
-
+
+
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
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
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:
@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
@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
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.
@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.
| 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.
@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
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.
@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
@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
@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 <rossini@@biostat.washington.edu>
@author Ben Wing <ben@@xemacs.org>
* 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!
* 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
@itemize @bullet
@item @email{martin@@xemacs.org, Martin Buchholz}
-@ifhtml
+@html
<br><img src="mrb.jpeg" alt="Portrait of Martin Buchholz"><br>
-@end ifhtml
+@end html
@item @email{steve@@xemacs.org, Steve Baur}
-@ifhtml
+@html
<br><img src="steve.gif" alt="Portrait of Steve Baur"><br>
-@end ifhtml
+@end html
@item @email{hniksic@@xemacs.org, Hrvoje Niksic}
-@ifhtml
+@html
<br><img src="hniksic.jpeg" alt="Portrait of Hrvoje Niksic"><br>
-@end ifhtml
+@end html
@end itemize
@itemize @bullet
@item @email{cthomp@@xemacs.org, Chuck Thompson}
-@ifhtml
+@html
<br><img src="cthomp.jpeg" alt="Portrait of Chuck Thompson"><br>
-@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
<br><img src="wing.gif" alt="Portrait of Ben Wing"><br>
-@end ifhtml
+@end html
@end itemize
@itemize @bullet
@item @email{jwz@@jwz.org, Jamie Zawinski}
-@ifhtml
+@html
<br><img src="jwz.gif" alt="Portrait of Jamie Zawinski"><br>
-@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
* 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!
* 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
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:
@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 <tarballname> | 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!
@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
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
-@node Abbrevs, Picture, Packages, Top
+@node Abbrevs, Picture, Running, Top
@chapter Abbrevs
@cindex abbrevs
@cindex expansion (of abbrevs)
@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
-@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
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
@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
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
-@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
* 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
@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}
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
+
-@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
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.
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
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,
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
@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
@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}).
* 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.
* 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
* 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.
* 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.
/* 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);
/* 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);
+2000-11-14 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.37 is released.
+
+2000-10-27 Martin Buchholz <martin@xemacs.org>
+
+ * config.h: Oops, _getpt ==> _getpty
+
+2000-10-11 Martin Buchholz <martin@xemacs.org>
+
+ * config.h (HAVE_XFREE86): Remove.
+ (HAVE_XREGISTERIMINSTANTIATECALLBACK): New.
+ (XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE): New.
+
+2000-10-10 Martin Buchholz <martin@xemacs.org>
+
+ * config.h:
+ Sync with pty/signaling related changes to src/config.h.in
+
+2000-10-07 Adrian Aichner <aichner@ecf.teradyne.com>
+
+ * xemacs.mak (default): Enforce runnig nmake from xemacs.mak's
+ directory to avoid problems with relative paths.
+
2000-10-04 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.36 is released.
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.
#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
/* 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
#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
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
}
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);
size_t size = XINT (length);
while (size--)
- val = Fcons (init, val);
+ val = Fcons (object, val);
return val;
}
}
}
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;
}
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, /*
}
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
{
}
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))
{
#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;
Recursively copies contents of vectors and cons cells.
Does not copy symbols.
*/
- (obj))
+ (object))
{
- return obj;
+ return object;
}
\f
#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; \
) \
UNMARK_##typename (SFTB_victim); \
} \
} \
- SFTB_prev = &(SFTB_current->prev); \
SFTB_current = SFTB_current->prev; \
SFTB_limit = countof (current_##typename##_block->block); \
} \
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);
}
#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.
#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
/* #### 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!! */
}
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.)
*/
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;
}
\f
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.
*/
}
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))
/* #### 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);
\f
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
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);
}
}
for (; ptr < end; ptr++)
{
- Extbyte c = *ptr;
+ Bufbyte c = *ptr;
if (BYTE_ASCII_P (c))
Dynarr_add (conversion_in_dynarr, c);
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);
}
}
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;
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;
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
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 "...".
#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
}
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 (;;)
{
directly */
break;
}
-#endif /* 1 */
arg_from_tty = 1;
break;
}
}
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")'.
*/
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;
{
int nread;
- int first = 1;
int total_read = 0;
Lisp_Object instream;
struct gcpro ngcpro1;
if (!NILP (display) && INTERACTIVE)
{
- first = 0;
redisplay ();
}
}
enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP};
\f
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)
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);
}
\f
/* 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)
{
}
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)++;
}
}
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;
}
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", /*
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", /*
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. */
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);
}
\f
}
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);
}
\f
#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))
}
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, /*
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.
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
}
}
+#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.
Lisp_Object Vauto_fill_chars;
\f
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))
{
}
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)
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);
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);
}
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);
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;
ch = XCHAR (c);
- while (count--)
- internal_self_insert (ch, (count != 0));
+ while (n--)
+ internal_self_insert (ch, (n != 0));
return Qnil;
}
/* (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;
}
\f
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;
#ifndef NOT_C_CODE
#ifdef __GNUC__
#define alloca __builtin_alloca
-#elif HAVE_ALLOCA_H
+#elif defined __DECC
+#include <alloca.h>
+#pragma intrinsic(alloca)
+#elif defined HAVE_ALLOCA_H
#include <alloca.h>
#elif defined(_AIX)
#pragma alloca
#elif ! defined (alloca)
-char *alloca ();
+void *alloca ();
#endif
#endif /* C code */
#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
/* 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 */
#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
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
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;
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
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);
}
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));
}
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))
Given a console, device, frame, or window, return the associated console.
Return nil otherwise.
*/
- (obj))
+ (object))
{
- return CDFW_CONSOLE (obj);
+ return CDFW_CONSOLE (object);
}
\f
}
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,
}
DEFUN ("console-name", Fconsole_name, 0, 1, 0, /*
-Return the name of the specified console.
+Return the name of CONSOLE.
*/
(console))
{
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))
{
}
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.
*/
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
}
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;
}
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);
}
}
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, /*
}
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
Given a device, frame, or window, return the associated device.
Return nil otherwise.
*/
- (obj))
+ (object))
{
- return DFW_DEVICE (obj);
+ return DFW_DEVICE (object);
}
\f
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;
}
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;
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;
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
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
}
/* #### 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 */
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))
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;
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))
#ifdef I18N3
if (!NILP (doc))
{
- domain = Fget (sym, Qvariable_domain, Qnil);
+ domain = Fget (symbol, Qvariable_domain, Qnil);
if (NILP (domain))
doc = Fgettext (doc);
else
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 \\=\\<MAPVAR> 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;
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 \\<mapname> construct in STR itself.. */
+ or from a \\<mapname> 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
*/
#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;
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 */
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);
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;
}
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;
}
\f
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);
}
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
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.
*/
())
{
\f
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.
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;
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
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;
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))
{
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;
}
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 ();
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)
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;
}
\f
#if 0 /* Undebugged FSFmacs code */
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
- 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.
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);
}
#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)))
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))
{
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);
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 ();
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);
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;
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 ();
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
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);
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
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
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
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
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
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
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
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
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
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();
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;
{ /* 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;
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 */
{
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) \
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++)
{
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 ();
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*/
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
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))
{
/* 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
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_))
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
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
\f
DEFUN ("facep", Ffacep, 1, 1, 0, /*
-Return non-nil if OBJECT is a face.
+Return t if OBJECT is a face.
*/
(object))
{
}
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.
*/
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;
}
}
#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
'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.
}
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
}
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)
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);
{
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;
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.
*/
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)
/* 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)
/* 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)
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);
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);
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);
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);
((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)
/* 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;
while (n--)
{
- c = *src++;
+ unsigned char c = *(unsigned char *)src++;
if (ch)
{
/* 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;
while (n--)
{
- c = *src++;
+ Bufbyte c = *src++;
if (c == '\n')
{
if (eol_type != EOL_LF && eol_type != EOL_AUTODETECT)
}
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);
} 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;
/* 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;
while (n--)
{
- c = *src++;
+ unsigned char c = *(unsigned char *)src++;
if (ch)
{
/* Previous character was first byte of Big5 char. */
/* 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);
}
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))
{
}
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:
}
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;
while (n--)
{
- unsigned char c = *src++;
+ unsigned char c = *(unsigned char *)src++;
switch (counter)
{
case 0:
}
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;
{
/* #### 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
/************************************************************************/
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:
}
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;
while (n--)
{
- unsigned char c = *src++;
+ unsigned char c = *(unsigned char *)src++;
switch (counter)
{
case 0:
}
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;
}
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;
while (n--)
{
- int c = *src++;
+ unsigned char c = *(unsigned char *)src++;
if (c >= 0xA0)
{
mask &= ~CODING_CATEGORY_ISO_7_MASK;
/* 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;
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,
/* 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;
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;
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);
}
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);
/* 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;
\f
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
}
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
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;
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)));
}
\f
/*
}
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.
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
}
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.
*/
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;
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. */
}
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 */
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 */
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.
\f
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.
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.
}
\f
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))
{
}
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))
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))
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;
if (!NILP (handler))
{
val = call6 (handler, Qinsert_file_contents, filename,
- visit, beg, end, replace);
+ visit, start, end, replace);
goto handled;
}
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;
#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;
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);
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,
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)))
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
#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));
}
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));
}
\f
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;
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)
{
/* 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,
*/ );
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.
Lisp_Object Qask_user_about_supersession_threat;
Lisp_Object Qask_user_about_lock;
+int inhibit_clash_detection;
#ifdef CLASH_DETECTION
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);
}
/* 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 */
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);
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 */
#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) */
/* #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);
}
/* #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);
}
#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)
{
#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);
}
/* #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) */
/* 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
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))
{
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)
}
#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));
}
\f
/* Float-rounding functions. */
/* #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);
}
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);
}
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,
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);
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,
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
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.
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;
{
if (EQ (elt[len], keyword))
{
- elt[len+1] = val;
+ elt[len+1] = value;
break;
}
}
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);
}
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
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,
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)
{
retval = list3 (make_int (w), make_int (h),
make_ext_string (data, len, Qbinary));
- XFree ((char *) data);
+ XFree (data);
return retval;
}
set_specifier_caching (Vcurrent_display_table,
offsetof (struct window, display_table),
some_window_value_changed,
- 0, 0);
+ 0, 0, 0);
}
void
#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)
}
/* 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;
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;
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 (); }
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); }
#include <config.h>
#include "lisp.h"
#include <X11/Xlocale.h> /* More portable than <locale.h> ? */
+#include <X11/Xlib.h>
#include "frame.h"
#include "device.h"
#include "window.h"
#include "EmacsFrame.h"
#include "events.h"
-#ifdef THIS_IS_X11R6
-#include <X11/IntrinsicP.h>
-#endif
-
#ifndef XIM_XLIB
#error XIM_XLIB is not defined??
#endif
"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)
}
}
-#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
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);
}
}
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;
XGetIMValues (xim, XNQueryInputStyle, &DEVICE_X_XIM_STYLES (d), NULL);
return;
}
-#endif
+#endif /* HAVE_XREGISTERIMINSTANTIATECALLBACK */
}
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);
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;
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:
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))
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;
/* 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
if (fd < 0)
{
- if (NILP (no_error))
+ if (NILP (noerror))
signal_file_error ("Cannot open load file", file);
else
{
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.");
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,
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);
}
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;
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);
#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;
/* 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",
return marker;
}
- CHECK_INT_COERCE_MARKER (pos);
+ CHECK_INT_COERCE_MARKER (position);
if (NILP (buffer))
b = current_buffer;
else
}
}
- charno = XINT (pos);
+ charno = XINT (position);
m = XMARKER (marker);
if (restricted_p)
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);
}
}
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, /*
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;
}
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.
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;
}
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
*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);
}
*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);
}
*outbuf = *data;
while ((*sz)--)
- *p++ = ulaw_dsp[*p];
+ {
+ *p = ulaw_dsp[*p];
+ p++;
+ }
*sz = 0;
*data = p;
return p - (unsigned char *)*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);
}
*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;
/* 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
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 <config.h>
-
-#if 0
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#endif
#endif
+#include <stdio.h>
+
+#ifdef emacs
+
#include "lisp.h"
#include "buffer.h"
#include "mule-charset.h"
#else /* not emacs */
-#include <stdio.h>
#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
#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;
*/
#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:
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)
#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].
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
(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)
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 ...]
N:SEPARATOR_z (< 0)
*/
-#define MAX_MAP_SET_LEVEL 20
+#define MAX_MAP_SET_LEVEL 30
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
#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. */
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. */
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;
i = reg[RRR];
j = XINT (ccl_prog[ic]);
op = field1 >> 6;
- ic++;
+ jump_address = ic + 1;
goto ccl_set_expr;
case CCL_WriteRegister: /* CCCCCCCCCCCCCCCCCCCrrrXXXXX */
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;
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;
/* 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]);
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;
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;
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:
}
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 */
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];
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);
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:
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;
/* 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;
if (NILP (content))
continue;
- else if (NUMBERP (content))
+ else if (INTP (content))
{
reg[RRR] = i;
reg[rrr] = XINT(content);
}
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;
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];
{
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;
reg[RRR] = -1;
break;
}
- map = XCONS(map)->cdr;
+ map = XCDR (map);
if (!VECTORP (map))
{
reg[RRR] = -1;
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;
break;
default:
- ccl->status = CCL_STAT_INVALID_CMD;
- goto ccl_error_handler;
+ CCL_INVALID_CMD;
}
}
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);
break;
case CCL_STAT_QUIT:
- sprintf(msg, "\nCCL: Quited.");
+ sprintf(msg, "\nCCL: Exited.");
break;
default:
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,
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.
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]))
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.
*/
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;
}
}
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
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.
/* 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;
}
\f
{
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);
}
}
DEFUN ("charset-name", Fcharset_name, 1, 1, 0, /*
-Return the name of the given charset.
+Return the name of charset CHARSET.
*/
(charset))
{
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;
}
*/
(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;
}
}
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);
}
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))
{
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
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;
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;
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);
\f
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
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))
{
}
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;
}
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.
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);
#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
}
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 */
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)
{
*/
cm_cost_init (c);
+#ifdef NOT_YET
/*
* Initialize local flags.
*/
underline_mode_on = 0;
alternate_mode_on = 0;
attributes_on = 0;
+#endif
/*
* Attempt to initialize the function_key_map to
#include <alloca.h>
#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__ */
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);
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.
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.
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.
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.
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.
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
set_specifier_caching (XGLYPH (Vscrollbar_pointer_glyph)->image,
offsetof (struct window, scrollbar_pointer),
scrollbar_pointer_changed_in_window,
- 0, 0);
+ 0, 0, 0);
}
}
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.
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);
}
\f
/* 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)
{
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))
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 ();
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);
}
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,
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);
}
\f
}
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 `\\'.
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 */
int_dynarr *ul_pos_dynarr = 0;
int speccount;
- CHECK_STRING (newtext);
+ CHECK_STRING (replacement);
if (! NILP (string))
{
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. */
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;
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)
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))
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],
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,
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)
#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))
{
}
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.)
*/
}
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))
{
*/
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);
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))
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;
}
\f
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;
}
}
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;
}
\f
/* Convert a letter which signifies a syntax code
}
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
#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))
}
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;
}
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;
}
/* End of comment reached */
- count--;
+ n--;
}
- while (count < 0)
+ while (n < 0)
{
QUIT;
}
}
- count++;
+ n++;
}
BUF_SET_PT (buf, from);
\f
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;
if (!--depth) goto done;
if (depth < min_depth)
{
- if (no_error)
+ if (noerror)
return Qnil;
error ("Containing expression ends prematurely");
}
if (!--depth) goto done2;
if (depth < min_depth)
{
- if (no_error)
+ if (noerror)
return Qnil;
error ("Containing expression ends prematurely");
}
return (make_int (from));
lose:
- if (!no_error)
+ if (!noerror)
error ("Unbalanced parentheses");
return Qnil;
}
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;
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, /*
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, /*
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.
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.
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);
}
}
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");
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] /*
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] /*
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] /*
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] /*
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'. */
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.
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] /*
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] /*
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] /*
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] /*
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
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] /*
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] /*
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] /*
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] /*
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
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] /*
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] /*
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] /*
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] /*
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'. */
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)));
}
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.
#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. */
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)
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)
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))
{
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");
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");
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;
}
}
- /* 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);
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)
{
}
/* 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);
}
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);
}
/* 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);
-/* 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.
* 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.
* 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
*
* 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.
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
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
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
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
*/
\f
-/* 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.
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 <jackr@sgi.com>, 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
- */
\f
+#ifndef emacs
+#define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
+#include <string.h>
+#else
+#include <config.h>
+extern void fatal (const char *, ...);
+#endif
+
#include <sys/types.h>
#include <stdio.h>
#include <sys/stat.h>
#include <memory.h>
-#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
+#if !defined (__NetBSD__) && !defined (__OpenBSD__)
#include <elf.h>
-#include <sym.h> /* for HDRR declaration */
+#endif
#include <sys/mman.h>
-#include <config.h>
-#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 <sys/elf_mips.h>
+#include <sym.h>
+#endif /* __sony_news && _SYSTYPE_SYSV */
+#if __sgi
+#include <syms.h> /* 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 <sys/exec_elf.h>
+
+# 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 <sys/exec_ecoff.h>
+# 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 <sys/exec_elf.h>
+#endif
+
+#if __GNU_LIBRARY__ - 0 >= 6
+# include <link.h> /* 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)
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;
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;
* .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);
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. */
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,
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);
#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
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);
}
}
}
+#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))
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;
}
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;
\f
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, /*
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))
{
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))
{
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))
{
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))
{
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
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;
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
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,
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;
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
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;
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.
}
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);
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;
/* 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;
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)
{
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. */
\f
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;
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 ();
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;
}
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;
}
\f
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))
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))
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))
{
}
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))
{
\f
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;
}
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;
\f
-/* 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);
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 */
/* 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
}
\f
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;
}
\f
}
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
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;
}
\f
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));
}
\f
DEFUN ("center-to-window-line", Fcenter_to_window_line, 0, 2, "_P", /*
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
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))
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.
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 /*
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.
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.
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.
set_specifier_caching (Vvertical_divider_spacing,
offsetof (struct window, vertical_divider_spacing),
vertical_divider_changed_in_window,
- 0, 0);
+ 0, 0, 0);
}
+2000-11-14 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.37 is released.
+
+2000-11-09 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * automated/lisp-test.el: More format tests.
+
+2000-11-10 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * 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 <himi@m17n.org>
+
+ * automated/ccl-tests.el: New file.
+
+2000-10-30 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * automated/lisp-test.el: Add test for format.
+
+2000-10-13 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * automated/byte-compiler-test.el: Add optimization test for
+ byte-after-unbind-ops.
+
+2000-10-13 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * automated/hash-table-test.el: Make new cons cell for
+ equal and not eq object.
+
+2000-10-03 Yoshiki Hayashi <yoshiki@xemacs.org>
+
+ * automated/lisp-test.el: Add replace-match test.
+
2000-10-04 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.36 is released.
(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)))))
(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)
)
(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)
)
(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)
)
(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.
;; 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"))
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