This diff file does not contain changes to .elc files because they are binary files and programs like `patch' can't handle them. Do M-x byte-recompile-directory to recompile the changed Emacs Lisp files before you build Emacs 19.8 from the modified sources. diff -rcP emacs-19.7/ChangeLog emacs-19.8/ChangeLog *** emacs-19.7/ChangeLog Sat May 22 20:08:24 1993 --- emacs-19.8/ChangeLog Tue May 25 10:51:44 1993 *************** *** 1,3 **** --- 1,99 ---- + Tue May 25 05:15:14 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + + Tue May 25 00:55:45 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * configure.in: When looking for source in the same directory as + the configure script, make the path thus discovered absolute. + If the user specifies the `--srcdir' switch, make that directory + absolute too. + + * Makefile.in (srcdir): Remove comment saying this doesn't work. + + * Makefile.in (src/paths.h): Edit the `infodir' variable into this + too, as the value of the PATH_INFO macro. + + * configure.in: Check to see if the source lives in the same + directory as the configure script. + + Mon May 24 12:14:41 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Makefile.in (install): Split this into `install' and + `do-install', to give people more control over exactly what gets + done. + (do-install): New target, containing the guts of `install'. Don't + remove and recreate the directories inside the copying loop - do + it all before the copying loop. Pass more flags to the lib-src + make. + (mkdir): Create ${infodir}, ${mandir}, and ${sitelispdir} here, to + avoid errors and warnings. + + * configure.in: For generic IBM PC boxes, insist on "unknown" for + the manufacturer - the more general case was blocking other i386 + configuration names below, and that's how the names are written in + MACHINES anyway. + + * make-dist: When breaking links, remove the link before moving + the copy onto it, to avoid interactive behavior. + + * Makefile.in: Doc fix. + + * configure.in: Doc fix. + + * INSTALL: Mention --exec-prefix option. + + * configure.in: Add support for the `--exec-prefix' option. + * Makefile.in: Accept that support. + + * configure.in: Use the AC_PROG_INSTALL macro. + * Makefile.in (INSTALL): Variable removed. + (INSTALL_PROGRAM, INSTALL_DATA): Accept these values from configure. + + * configure.in: Distinguish between hp800's and hp700's by calling + "uname -m". + + Mon May 24 00:12:26 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in: Recognize configuration names for i860 boxes + running SYSV. + + Sun May 23 00:37:44 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * configure.in: Distinguish between hp800's and hp700's by the + version of HP/UX they run, since that's something people are more + likely to know - hp700's run 8.0. + Add HP 700 configuration. + + * configure.in: Test for the presence of the `rename' function. + + * Makefile.in (C_SWITCH_X_SITE): New variable - get this from + configure.in. + (oldXMenu/Makefile): Edit C_SWITCH_X_SITE into this. + + * make-dist: Break intra-tree links. + + * configure.in: Explain that this is an autoconf script, and give + instructions for rebuilding configure from it. Arrange to put + comments in configure explaining this too. + + * configure.in: Make the first line of the configure script be + "#!/bin/sh". Leaving the first line blank didn't work. + + * configure.in (long_usage): Removed; made short_usage describe + the options briefly. + + * configure.in: Implement the --prefix option. + * Makefile.in (prefix): Add support for it here. + * INSTALL: Document it here. + + * Makefile.in (install): Don't assume that the files in the `info' + subdirectory match *.info. They don't have that prefix. + + Sat May 22 22:53:24 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * configure.in: Add case for version 5 of Esix. + Sat May 22 17:24:06 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) * Version 19.7 released. diff -rcP emacs-19.7/INSTALL emacs-19.8/INSTALL *** emacs-19.7/INSTALL Sun May 16 17:07:16 1993 --- emacs-19.8/INSTALL Mon May 24 02:17:48 1993 *************** *** 53,59 **** only be necessary if you have your X Window System files installed in unusual places. ! The --run-in-place option sets up default values for the path variables in `./Makefile' so that Emacs will expect to find its data files (lisp libraries, runnable programs, and the like) in the same locations they occupy while Emacs builds. This means that you don't --- 53,59 ---- only be necessary if you have your X Window System files installed in unusual places. ! The `--run-in-place' option sets up default values for the path variables in `./Makefile' so that Emacs will expect to find its data files (lisp libraries, runnable programs, and the like) in the same locations they occupy while Emacs builds. This means that you don't *************** *** 65,74 **** `--with-gcc=no'. If this option is omitted, `configure' will search for GCC in your load path, and use it if present. ! The --srcdir=DIR option specifies that the configuration and build processes should look for the Emacs source code in DIR, when DIR is not the current directory. For example, the command --- 65,92 ---- `--with-gcc=no'. If this option is omitted, `configure' will search for GCC in your load path, and use it if present. ! The `--srcdir=DIR' option specifies that the configuration and build processes should look for the Emacs source code in DIR, when DIR is not the current directory. + The `--prefix=PREFIXDIR' option specifies where the installation process + should put emacs and its data files. This defaults to `/usr/local'. + - Emacs (and the other utilities users run) go in PREFIXDIR/bin + (unless the `--exec-prefix' option says otherwise). + - The architecture-independent files go in PREFIXDIR/lib/emacs/VERSION + (where VERSION is the version number of Emacs, like `19.7'). + - The architecture-dependent files go in + PREFIXDIR/lib/emacs/VERSION/CONFIGURATION + (where CONFIGURATION is the configuration name, like mips-dec-ultrix4.2), + unless the `--exec-prefix' option says otherwise. + + The `--exec-prefix=EXECDIR' option allows you to specify a separate + portion of the directory tree for installing architecture-specific + files, like executables and utility programs. If specified, + - Emacs (and the other utilities users run) go in EXECDIR/bin, and + - The architecture-dependent files go in + EXECDIR/lib/emacs/VERSION/CONFIGURATION. + EXECDIR/bin should be a directory that is normally in users' PATHs. For example, the command diff -rcP emacs-19.7/Makefile.in emacs-19.8/Makefile.in *** emacs-19.7/Makefile.in Fri May 21 20:28:30 1993 --- emacs-19.8/Makefile.in Tue May 25 10:10:36 1993 *************** *** 41,46 **** --- 41,47 ---- ALLOCA=@ALLOCA@ LN_S=@LN_S@ CFLAGS=@CFLAGS@ + C_SWITCH_X_SITE=@C_SWITCH_X_SITE@ ### These help us choose version- and architecture-specific directories ### to install files in. *************** *** 61,71 **** # The default location for installation. Everything is placed in # subdirectories of this directory. The default values for many of # the variables below are expressed in terms of this one, so you may ! # not need to change them. ! prefix=/usr/local # Like `prefix', but used for architecture-specific files. ! exec_prefix=${prefix} # Where to install Emacs and other binaries that people will want to # run directly (like etags). --- 62,72 ---- # The default location for installation. Everything is placed in # subdirectories of this directory. The default values for many of # the variables below are expressed in terms of this one, so you may ! # not need to change them. This defaults to /usr/local. ! prefix=@prefix@ # Like `prefix', but used for architecture-specific files. ! exec_prefix=@exec_prefix@ # Where to install Emacs and other binaries that people will want to # run directly (like etags). *************** *** 96,103 **** # system, it is inappropriate to imply that it is part of Emacs. infodir=${prefix}/info ! # Where to find the source code - setting this to anything but ! # . doesn't work yet. The source code for Emacs's C kernel is # expected to be in ${srcdir}/src, and the source code for Emacs's # utility programs is expected to be in ${srcdir}/lib-src. This is # set by the configure script's `--srcdir' option. --- 97,103 ---- # system, it is inappropriate to imply that it is part of Emacs. infodir=${prefix}/info ! # Where to find the source code. The source code for Emacs's C kernel is # expected to be in ${srcdir}/src, and the source code for Emacs's # utility programs is expected to be in ${srcdir}/lib-src. This is # set by the configure script's `--srcdir' option. *************** *** 182,190 **** # ==================== Utility Programs for the Build ==================== # Allow the user to specify the install program. ! INSTALL = install -c ! INSTALL_PROGRAM = ${INSTALL} ! INSTALL_DATA = ${INSTALL} # ============================= Targets ============================== --- 182,189 ---- # ==================== Utility Programs for the Build ==================== # Allow the user to specify the install program. ! INSTALL_PROGRAM = @INSTALL_PROGRAM@ ! INSTALL_DATA = @INSTALL_DATA@ # ============================= Targets ============================== *************** *** 225,230 **** --- 224,230 ---- -e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'$${lisppath}'";' \ -e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "'$${buildlisppath}'";' \ -e 's;\(#.*PATH_EXEC\).*$$;\1 "${archlibdir}";' \ + -e 's;\(#.*PATH_INFO\).*$$;\1 "${infodir}";' \ -e 's;\(#.*PATH_DATA\).*$$;\1 "${etcdir}";' \ -e 's;\(#.*PATH_LOCK\).*$$;\1 "${lockdir}/";') @${srcdir}/move-if-change src/paths.h.tmp src/paths.h *************** *** 288,295 **** oldXMenu/Makefile: ${srcdir}/oldXMenu/Makefile.in Makefile rm -f oldXMenu/Makefile.tmp ! @echo "Producing \`oldXMenu/Makefile' from \`${srcdir}/oldXMenu/Makefile'." ! @(echo "# This file is generated from \`${srcdir}/oldXMenu/Makefile'." ; \ echo "# If you are thinking about editing it, you should seriously consider" ; \ echo "# running \`make oldXMenu/Makefile' at the top of the" ; \ echo "# Emacs build tree instead, or editing" ; \ --- 288,295 ---- oldXMenu/Makefile: ${srcdir}/oldXMenu/Makefile.in Makefile rm -f oldXMenu/Makefile.tmp ! @echo "Producing \`oldXMenu/Makefile' from \`${srcdir}/oldXMenu/Makefile.in'." ! @(echo "# This file is generated from \`${srcdir}/oldXMenu/Makefile.in'." ; \ echo "# If you are thinking about editing it, you should seriously consider" ; \ echo "# running \`make oldXMenu/Makefile' at the top of the" ; \ echo "# Emacs build tree instead, or editing" ; \ *************** *** 297,302 **** --- 297,303 ---- sed < ${srcdir}/oldXMenu/Makefile.in \ -e 's|^\(srcdir *=\).*$$|\1'"${srcdir}"'/oldXMenu|' \ -e 's|^\(VPATH *=\).*$$|\1'"${srcdir}"'/oldXMenu|' \ + -e 's|^\(C_SWITCH_X_SITE *=\).*$$|\1'"${C_SWITCH_X_SITE}"'|' \ -e 's|^CC *=.*$$|CC='"${CC}"'|' \ -e 's|^DEFS *=.*$$|DEFS='"${DEFS}"'|' \ -e '/^# DIST: /d') > oldXMenu/Makefile.tmp *************** *** 320,334 **** ## place with their files read-only (perhaps because they are checked ## into RCS). In order to make this safe, we make sure that the ## source exists and is distinct from the destination. ! install: all mkdir ! (cd lib-src; $(MAKE) install ${MFLAGS} bindir=${bindir} libdir=${libdir}) -set ${COPYDESTS} ; \ for dir in ${COPYDIR} ; do \ dest=$$1 ; shift ; \ [ -d $${dir} ] \ && [ `(cd $${dir}; /bin/pwd)` != `(cd $${dest}; /bin/pwd)` ] \ && (echo "Copying $${dir}..." ; \ - rm -rf $${dest} ; mkdir $${dest} ; \ (cd $${dir}; tar cf - . )|(cd $${dest}; umask 0; tar xvf - ); \ for subdir in `find $${dest} -type d ! -name RCS -print` ; do \ rm -rf $${subdir}/RCS ; \ --- 321,341 ---- ## place with their files read-only (perhaps because they are checked ## into RCS). In order to make this safe, we make sure that the ## source exists and is distinct from the destination. ! install: all do-install ! ! do-install: mkdir ! (cd lib-src; \ ! $(MAKE) install ${MFLAGS} prefix=${prefix} \ ! exec_prefix=${exec_prefix} bindir=${bindir} libdir=${libdir} \ ! archlibdir=${archlibdir}) -set ${COPYDESTS} ; \ + rm -rf ${COPYDESTS} ; \ + mkdir ${COPYDESTS} ; \ for dir in ${COPYDIR} ; do \ dest=$$1 ; shift ; \ [ -d $${dir} ] \ && [ `(cd $${dir}; /bin/pwd)` != `(cd $${dest}; /bin/pwd)` ] \ && (echo "Copying $${dir}..." ; \ (cd $${dir}; tar cf - . )|(cd $${dest}; umask 0; tar xvf - ); \ for subdir in `find $${dest} -type d ! -name RCS -print` ; do \ rm -rf $${subdir}/RCS ; \ *************** *** 341,351 **** if [ ! -f ${infodir}/dir ] && [ -f dir ]; then \ ${INSTALL_DATA} dir ${infodir}/dir ; \ fi ; \ ! if [ "`echo *.info*`" != "*.info*" ]; then \ ! for f in *.info* ; do \ ! ${INSTALL_DATA} $$f ${infodir}/$$f ; \ ! done ; \ ! fi) cd ${srcdir}/etc; for page in emacs etags ctags ; do \ ${INSTALL_DATA} $${page}.1 ${mandir}/$${page}${manext} ; \ done --- 348,356 ---- if [ ! -f ${infodir}/dir ] && [ -f dir ]; then \ ${INSTALL_DATA} dir ${infodir}/dir ; \ fi ; \ ! for f in cl* emacs* forms* info* vip* ; do \ ! ${INSTALL_DATA} $$f ${infodir}/$$f ; \ ! done) cd ${srcdir}/etc; for page in emacs etags ctags ; do \ ${INSTALL_DATA} $${page}.1 ${mandir}/$${page}${manext} ; \ done *************** *** 359,365 **** ### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use make-path ### instead of mkdir. Not all systems' mkdirs have the `-p' flag. mkdir: FRC ! ./lib-src/make-path ${COPYDESTS} ${lockdir} chmod 777 ${COPYDESTS} ${lockdir} FRC: --- 364,371 ---- ### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use make-path ### instead of mkdir. Not all systems' mkdirs have the `-p' flag. mkdir: FRC ! ./lib-src/make-path ${COPYDESTS} ${lockdir} ${infodir} ${mandir} \ ! ${bindir} ${datadir} ${libdir} ${sitelisp} chmod 777 ${COPYDESTS} ${lockdir} FRC: diff -rcP emacs-19.7/README emacs-19.8/README *** emacs-19.7/README Sat May 22 20:17:12 1993 --- emacs-19.8/README Tue May 25 11:01:08 1993 *************** *** 1,4 **** ! This directory tree holds version 19.7 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. See the files `etc/NEWS' and `etc/news.texi' for information on new --- 1,4 ---- ! This directory tree holds version 19.8 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. See the files `etc/NEWS' and `etc/news.texi' for information on new diff -rcP emacs-19.7/configure emacs-19.8/configure *** emacs-19.7/configure Sat May 22 19:44:40 1993 --- emacs-19.8/configure Tue May 25 10:16:11 1993 *************** *** 1,10 **** ! ! ### The above line is deliberately left blank. If it starts with a #, ! ### some CSH's will think this is a csh script. ! #### Configuration script for GNU Emacs #### Copyright (C) 1992 Free Software Foundation, Inc. ### This file is part of GNU Emacs. ### GNU Emacs is free software; you can redistribute it and/or modify --- 1,14 ---- ! #!/bin/sh #### Configuration script for GNU Emacs #### Copyright (C) 1992 Free Software Foundation, Inc. + ### Don't edit this script! + ### This script was automatically generated by the `autoconf' program + ### from the file `./configure.in'. + ### To rebuild it, execute the command + ### autoconf + ### in the this directory. You must have autoconf version 1.4 or later. + ### This file is part of GNU Emacs. ### GNU Emacs is free software; you can redistribute it and/or modify *************** *** 24,36 **** ### Since Emacs has configuration requirements that autoconf can't ### meet, this file is an unholy marriage of custom-baked ! ### configuration code and autoconf macros. New versions of autoconf ! ### could very well break this arrangement. ### - ### We omit the invocation of autoconf's initialization function, - ### because it produces Bourne shell code to parse arguments, but we - ### need to parse our own arguments. - ### ### We use the m4 quoting characters [ ] (as established by the ### autoconf system) to include large sections of raw sewage - Oops, I ### mean, shell code - in the final configuration script. --- 28,35 ---- ### Since Emacs has configuration requirements that autoconf can't ### meet, this file is an unholy marriage of custom-baked ! ### configuration code and autoconf macros. ### ### We use the m4 quoting characters [ ] (as established by the ### autoconf system) to include large sections of raw sewage - Oops, I ### mean, shell code - in the final configuration script. *************** *** 59,108 **** #### Usage messages. ! short_usage="Type \`${progname} --usage' for more information about options." ! ! long_usage="Usage: ${progname} CONFIGURATION [-OPTION[=VALUE] ...] Set compilation and installation parameters for GNU Emacs, and report. CONFIGURATION specifies the machine and operating system to build for. ! For example: ! ${progname} sparc-sun-sunos4.1 ! configures Emacs to build on a Sun Sparc machine running SunOS 4.1, and ! ${progname} decstation ! configures Emacs to run on a DECstation running Ultrix. See \`etc/MACHINES'. ! ! The --with-x, --with-x11 and --with-x10 options specify what window ! system to use; if all are omitted, use X11 if present. If you ! don't want X, specify \`--with-x=no'. ! ! The --x-includes=DIR option tells the build process where to search ! for the X Windows header files. DIR should have a ! subdirectory called \`X11' which contains \`X.h', \`Xlib.h', and ! the rest of the header files; DIR should not contain \`X11' ! itself. If this option is omitted, the build process assumes ! they exist in a directory the compiler checks by default. ! ! The --x-libraries=DIR option tells the build process where to look for ! the X windows libraries. If this option is omitted, the build ! process assumes they are in a directory the compiler checks by ! default. ! ! The --with-gcc option says that the build process should use GCC to ! compile Emacs. If you have GCC but don't want to use it, ! specify \`--with-gcc=no'. \`configure' tries to guess whether ! or not you have GCC by searching your executable path, but if ! it guesses incorrectly, you may need to use this. ! ! The --run-in-place option sets up default values for the path ! variables in \`./Makefile' so that Emacs will expect to find ! its data files (lisp libraries, runnable programs, and the ! like) in the same locations they occupy while Emacs builds. ! This means that you don't have to install Emacs in order to ! run it; it uses its data files as they were unpacked. ! ! The --srcdir=DIR option specifies that the configuration and build ! processes should look for the Emacs source code in DIR, when ! DIR is not the current directory. If successful, ${progname} leaves its status in config.status. If unsuccessful after disturbing the status quo, it removes config.status." --- 58,77 ---- #### Usage messages. ! short_usage="Usage: ${progname} CONFIGURATION [-OPTION[=VALUE] ...] Set compilation and installation parameters for GNU Emacs, and report. CONFIGURATION specifies the machine and operating system to build for. ! --with-x Support the X Window System. ! --with-x=no Don't support the X Window System. ! --x-includes=DIR Search for X Window System header files in DIR. ! --x-libraries=DIR Search for X Window System libraries in DIR. ! --with-gcc Use GCC to compile Emacs. ! --with-gcc=no Don't use GCC to compile Emacs. ! --run-in-place Use libraries and data files directly out of the ! source tree. ! --srcdir=DIR Look for source in DIR. ! --prefix=DIR Install files below dir. If successful, ${progname} leaves its status in config.status. If unsuccessful after disturbing the status quo, it removes config.status." *************** *** 119,124 **** --- 88,97 ---- rip_paths='#disabled# ' inst_paths='' + ### Establish some default values. + prefix='/usr/local' + exec_prefix='${prefix}' + while [ $# != 0 ]; do arg="$1" case "${arg}" in *************** *** 239,247 **** inst_paths='#disabled# ' ;; ## Has the user asked for some help? "usage" | "help" ) ! echo "${long_usage}" | more exit ;; --- 212,252 ---- inst_paths='#disabled# ' ;; + ## Has the user specifiec an installation prefix? + "prefix" ) + ## If the value was omitted, get it from the next argument. + if [ "${valomitted}" = "yes" ]; then + ## Get the next argument from the argument list, if there is one. + if [ $# = 1 ]; then + (echo "${progname}: You must give a value for the \`--${optname}' option, as in + \`--${optname}=FOO'." + echo "${short_usage}") >&2 + exit 1 + fi + shift; val="$1" + fi + prefix="${val}" + ;; + + ## Has the user specifiec an installation prefix? + "exec_prefix" ) + ## If the value was omitted, get it from the next argument. + if [ "${valomitted}" = "yes" ]; then + ## Get the next argument from the argument list, if there is one. + if [ $# = 1 ]; then + (echo "${progname}: You must give a value for the \`--${optname}' option, as in + \`--${optname}=FOO'." + echo "${short_usage}") >&2 + exit 1 + fi + shift; val="$1" + fi + exec_prefix="${val}" + ;; + ## Has the user asked for some help? "usage" | "help" ) ! echo "${short_usage}" | more exit ;; *************** *** 271,290 **** ## If it's not specified, see if `.' or `..' might work. "" ) ! if [ -f "./src/lisp.h" -a -f "./lisp/version.el" ]; then ! srcdir=`pwd` else ! if [ -f "../src/lisp.h" -a -f "../lisp/version.el" ]; then ! srcdir=`(cd .. ; pwd)` else ! (echo "\ ${progname}: Neither the current directory nor its parent seem to contain the Emacs sources. If you do not want to build Emacs in its source tree, you should run \`${progname}' in the directory in which you wish to build Emacs, using its \`--srcdir' option to say where the sources may be found." ! echo "${short_usage}") >&2 ! exit 1 fi fi ;; --- 276,300 ---- ## If it's not specified, see if `.' or `..' might work. "" ) ! confdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'` ! if [ -f $confdir/src/lisp.h -a -f $confdir/lisp/version.el ]; then ! srcdir=`(cd $confdir ; pwd)` else ! if [ -f "./src/lisp.h" -a -f "./lisp/version.el" ]; then ! srcdir=`pwd` else ! if [ -f "../src/lisp.h" -a -f "../lisp/version.el" ]; then ! srcdir=`(cd .. ; pwd)` ! else ! (echo "\ ${progname}: Neither the current directory nor its parent seem to contain the Emacs sources. If you do not want to build Emacs in its source tree, you should run \`${progname}' in the directory in which you wish to build Emacs, using its \`--srcdir' option to say where the sources may be found." ! echo "${short_usage}") >&2 ! exit 1 ! fi fi fi ;; *************** *** 291,296 **** --- 301,307 ---- ## Otherwise, check if the directory they specified is okay. * ) + srcdir=`(cd ${srcdir}; pwd)` if [ ! -d "${srcdir}" -o ! -f "${srcdir}/src/lisp.h" -o ! -f "${srcdir}/lisp/version.el" ]; then (echo "\ ${progname}: The directory specified with the \`--srcdir' option, *************** *** 498,507 **** machine=hp9000s300 opsys=hpux ;; ! ## HP 9000 series 800, running HP/UX hppa1.0-hp-hpux* ) ! machine=hp9000s800 opsys=hpux ;; ## Orion machines orion-orion-bsd* ) --- 509,528 ---- machine=hp9000s300 opsys=hpux ;; ! ## HP 9000 series 700 and 800, running HP/UX hppa1.0-hp-hpux* ) ! machine=hp9000s800 opsys=hpux.h ! ;; ! hppa1.1-hp-hpux* ) ! machine=hp9000s800 opsys=hpux8.h ;; + hppa*-hp-hpux* ) + ## Cross-compilation? Nah! + case "`uname -m`" in + 9000/8?? ) machine=hp9000s800 opsys=hpux.h ;; + 9000/7?? ) machine=hp9000s800 opsys=hpux8.h ;; + esac + ;; ## Orion machines orion-orion-bsd* ) *************** *** 544,555 **** machine=is386 opsys=usg5-2-2 ;; ## Intel 386 machines where we don't care about the manufacturer ! i[34]86-* ) machine=intel386 case "${configuration}" in *-isc1.* | *-isc2.[01]* ) opsys=386-ix ;; *-isc2.2 ) opsys=isc2-2 ;; *-isc* ) opsys=isc3-0 ;; *-esix* ) opsys=esix ;; *-xenix* ) opsys=xenix ;; *-linux* ) opsys=linux ;; --- 565,577 ---- machine=is386 opsys=usg5-2-2 ;; ## Intel 386 machines where we don't care about the manufacturer ! i[34]86-unknown-* ) machine=intel386 case "${configuration}" in *-isc1.* | *-isc2.[01]* ) opsys=386-ix ;; *-isc2.2 ) opsys=isc2-2 ;; *-isc* ) opsys=isc3-0 ;; + *-esix5* ) opsys=esix5r4 ;; *-esix* ) opsys=esix ;; *-xenix* ) opsys=xenix ;; *-linux* ) opsys=linux ;; *************** *** 558,563 **** --- 580,590 ---- esac ;; + ## Intel 860 + i860-*-sysvr4 ) + machine=i860 opsys=usg5-4 + ;; + ## Silicon Graphics machines ## Iris 2500 and Iris 2500 Turbo (aka the Iris 3030) m68*-sgi-iris3.5 ) *************** *** 914,919 **** --- 941,986 ---- rm -f conftest* fi + # Make sure to not get the incompatible SysV /etc/install and + # /usr/sbin/install, which might be in PATH before a BSD-like install, + # or the SunOS /usr/etc/install directory, or the AIX /bin/install, + # or the AFS install, which mishandles nonexistent args, or + # /usr/ucb/install on SVR4, which tries to use the nonexistent group + # `staff'. On most BSDish systems install is in /usr/bin, not /usr/ucb + # anyway. Sigh. + if test "z${INSTALL}" = "z" ; then + echo checking for install + IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" + for dir in $PATH; do + test -z "$dir" && dir=. + case $dir in + /etc|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;; + *) + if test -f $dir/installbsd; then + INSTALL="$dir/installbsd -c" # OSF1 + INSTALL_PROGRAM='$(INSTALL)' + INSTALL_DATA='$(INSTALL) -m 644' + break + fi + if test -f $dir/install; then + if grep dspmsg $dir/install >/dev/null 2>&1; then + : # AIX + else + INSTALL="$dir/install -c" + INSTALL_PROGRAM='$(INSTALL)' + INSTALL_DATA='$(INSTALL) -m 644' + break + fi + fi + ;; + esac + done + IFS="$saveifs" + fi + INSTALL=${INSTALL-cp} + INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'} + INSTALL_DATA=${INSTALL_DATA-'$(INSTALL)'} + for hdr in sys/timeb.h sys/time.h *************** *** 1280,1286 **** rm -f conftest* fi ! for func in gettimeofday gethostname dup2 do trfunc=HAVE_`echo $func | tr '[a-z]' '[A-Z]'` echo checking for ${func} --- 1347,1353 ---- rm -f conftest* fi ! for func in gettimeofday gethostname dup2 rename do trfunc=HAVE_`echo $func | tr '[a-z]' '[A-Z]'` echo checking for ${func} *************** *** 1643,1648 **** --- 1710,1717 ---- + + { test -n "$verbose" && \ echo ' defining' config_machfile to be '"\"${machfile}\""' *************** *** 1827,1832 **** --- 1896,1904 ---- CC='$CC' LN_S='$LN_S' CPP='$CPP' + INSTALL='$INSTALL' + INSTALL_PROGRAM='$INSTALL_PROGRAM' + INSTALL_DATA='$INSTALL_DATA' ALLOCA='$ALLOCA' configuration='$configuration' version='$version' *************** *** 1838,1843 **** --- 1910,1917 ---- LD_SWITCH_X_SITE='$LD_SWITCH_X_SITE' C_SWITCH_X_SITE='$C_SWITCH_X_SITE' CFLAGS='$CFLAGS' + prefix='$prefix' + exec_prefix='$exec_prefix' LIBS='$LIBS' prefix='$prefix' exec_prefix='$exec_prefix' *************** *** 1866,1871 **** --- 1940,1948 ---- s%@CC@%$CC%g s%@LN_S@%$LN_S%g s%@CPP@%$CPP%g + s%@INSTALL@%$INSTALL%g + s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g + s%@INSTALL_DATA@%$INSTALL_DATA%g s%@ALLOCA@%$ALLOCA%g s%@configuration@%$configuration%g s%@version@%$version%g *************** *** 1877,1882 **** --- 1954,1961 ---- s%@LD_SWITCH_X_SITE@%$LD_SWITCH_X_SITE%g s%@C_SWITCH_X_SITE@%$C_SWITCH_X_SITE%g s%@CFLAGS@%$CFLAGS%g + s%@prefix@%$prefix%g + s%@exec_prefix@%$exec_prefix%g s%@LIBS@%$LIBS%g s%@DEFS@%-DHAVE_CONFIG_H%" $top_srcdir/${file}.in >> $file fi; done diff -rcP emacs-19.7/configure.in emacs-19.8/configure.in *** emacs-19.7/configure.in Fri May 21 20:28:47 1993 --- emacs-19.8/configure.in Tue May 25 10:14:53 1993 *************** *** 1,10 **** ! [ ! ### The above line is deliberately left blank. If it starts with a #, ! ### some CSH's will think this is a csh script. ! #### Configuration script for GNU Emacs #### Copyright (C) 1992 Free Software Foundation, Inc. ### This file is part of GNU Emacs. ### GNU Emacs is free software; you can redistribute it and/or modify --- 1,22 ---- ! dnl This is an autoconf script. ! dnl To rebuild the `configure' script from this, execute the command ! dnl autoconf ! dnl in the directory containing this script. You must have autoconf ! dnl version 1.4 or later. ! dnl ! dnl The following text appears in the resulting `configure' script, ! dnl explaining how to rebuild it. ! [#!/bin/sh #### Configuration script for GNU Emacs #### Copyright (C) 1992 Free Software Foundation, Inc. + ### Don't edit this script! + ### This script was automatically generated by the `autoconf' program + ### from the file `./configure.in'. + ### To rebuild it, execute the command + ### autoconf + ### in the this directory. You must have autoconf version 1.4 or later. + ### This file is part of GNU Emacs. ### GNU Emacs is free software; you can redistribute it and/or modify *************** *** 24,36 **** ### Since Emacs has configuration requirements that autoconf can't ### meet, this file is an unholy marriage of custom-baked ! ### configuration code and autoconf macros. New versions of autoconf ! ### could very well break this arrangement. ### - ### We omit the invocation of autoconf's initialization function, - ### because it produces Bourne shell code to parse arguments, but we - ### need to parse our own arguments. - ### ### We use the m4 quoting characters [ ] (as established by the ### autoconf system) to include large sections of raw sewage - Oops, I ### mean, shell code - in the final configuration script. --- 36,43 ---- ### Since Emacs has configuration requirements that autoconf can't ### meet, this file is an unholy marriage of custom-baked ! ### configuration code and autoconf macros. ### ### We use the m4 quoting characters [ ] (as established by the ### autoconf system) to include large sections of raw sewage - Oops, I ### mean, shell code - in the final configuration script. *************** *** 59,108 **** #### Usage messages. ! short_usage="Type \`${progname} --usage' for more information about options." ! ! long_usage="Usage: ${progname} CONFIGURATION [-OPTION[=VALUE] ...] Set compilation and installation parameters for GNU Emacs, and report. CONFIGURATION specifies the machine and operating system to build for. ! For example: ! ${progname} sparc-sun-sunos4.1 ! configures Emacs to build on a Sun Sparc machine running SunOS 4.1, and ! ${progname} decstation ! configures Emacs to run on a DECstation running Ultrix. See \`etc/MACHINES'. ! ! The --with-x, --with-x11 and --with-x10 options specify what window ! system to use; if all are omitted, use X11 if present. If you ! don't want X, specify \`--with-x=no'. ! ! The --x-includes=DIR option tells the build process where to search ! for the X Windows header files. DIR should have a ! subdirectory called \`X11' which contains \`X.h', \`Xlib.h', and ! the rest of the header files; DIR should not contain \`X11' ! itself. If this option is omitted, the build process assumes ! they exist in a directory the compiler checks by default. ! ! The --x-libraries=DIR option tells the build process where to look for ! the X windows libraries. If this option is omitted, the build ! process assumes they are in a directory the compiler checks by ! default. ! ! The --with-gcc option says that the build process should use GCC to ! compile Emacs. If you have GCC but don't want to use it, ! specify \`--with-gcc=no'. \`configure' tries to guess whether ! or not you have GCC by searching your executable path, but if ! it guesses incorrectly, you may need to use this. ! ! The --run-in-place option sets up default values for the path ! variables in \`./Makefile' so that Emacs will expect to find ! its data files (lisp libraries, runnable programs, and the ! like) in the same locations they occupy while Emacs builds. ! This means that you don't have to install Emacs in order to ! run it; it uses its data files as they were unpacked. ! ! The --srcdir=DIR option specifies that the configuration and build ! processes should look for the Emacs source code in DIR, when ! DIR is not the current directory. If successful, ${progname} leaves its status in config.status. If unsuccessful after disturbing the status quo, it removes config.status." --- 66,85 ---- #### Usage messages. ! short_usage="Usage: ${progname} CONFIGURATION [-OPTION[=VALUE] ...] Set compilation and installation parameters for GNU Emacs, and report. CONFIGURATION specifies the machine and operating system to build for. ! --with-x Support the X Window System. ! --with-x=no Don't support the X Window System. ! --x-includes=DIR Search for X Window System header files in DIR. ! --x-libraries=DIR Search for X Window System libraries in DIR. ! --with-gcc Use GCC to compile Emacs. ! --with-gcc=no Don't use GCC to compile Emacs. ! --run-in-place Use libraries and data files directly out of the ! source tree. ! --srcdir=DIR Look for source in DIR. ! --prefix=DIR Install files below dir. If successful, ${progname} leaves its status in config.status. If unsuccessful after disturbing the status quo, it removes config.status." *************** *** 119,124 **** --- 96,105 ---- rip_paths='#disabled# ' inst_paths='' + ### Establish some default values. + prefix='/usr/local' + exec_prefix='${prefix}' + while [ $# != 0 ]; do arg="$1" case "${arg}" in *************** *** 239,247 **** inst_paths='#disabled# ' ;; ## Has the user asked for some help? "usage" | "help" ) ! echo "${long_usage}" | more exit ;; --- 220,260 ---- inst_paths='#disabled# ' ;; + ## Has the user specifiec an installation prefix? + "prefix" ) + ## If the value was omitted, get it from the next argument. + if [ "${valomitted}" = "yes" ]; then + ## Get the next argument from the argument list, if there is one. + if [ $# = 1 ]; then + (echo "${progname}: You must give a value for the \`--${optname}' option, as in + \`--${optname}=FOO'." + echo "${short_usage}") >&2 + exit 1 + fi + shift; val="$1" + fi + prefix="${val}" + ;; + + ## Has the user specifiec an installation prefix? + "exec_prefix" ) + ## If the value was omitted, get it from the next argument. + if [ "${valomitted}" = "yes" ]; then + ## Get the next argument from the argument list, if there is one. + if [ $# = 1 ]; then + (echo "${progname}: You must give a value for the \`--${optname}' option, as in + \`--${optname}=FOO'." + echo "${short_usage}") >&2 + exit 1 + fi + shift; val="$1" + fi + exec_prefix="${val}" + ;; + ## Has the user asked for some help? "usage" | "help" ) ! echo "${short_usage}" | more exit ;; *************** *** 271,290 **** ## If it's not specified, see if `.' or `..' might work. "" ) ! if [ -f "./src/lisp.h" -a -f "./lisp/version.el" ]; then ! srcdir=`pwd` else ! if [ -f "../src/lisp.h" -a -f "../lisp/version.el" ]; then ! srcdir=`(cd .. ; pwd)` else ! (echo "\ ${progname}: Neither the current directory nor its parent seem to contain the Emacs sources. If you do not want to build Emacs in its source tree, you should run \`${progname}' in the directory in which you wish to build Emacs, using its \`--srcdir' option to say where the sources may be found." ! echo "${short_usage}") >&2 ! exit 1 fi fi ;; --- 284,308 ---- ## If it's not specified, see if `.' or `..' might work. "" ) ! confdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'` ! if [ -f $confdir/src/lisp.h -a -f $confdir/lisp/version.el ]; then ! srcdir=`(cd $confdir ; pwd)` else ! if [ -f "./src/lisp.h" -a -f "./lisp/version.el" ]; then ! srcdir=`pwd` else ! if [ -f "../src/lisp.h" -a -f "../lisp/version.el" ]; then ! srcdir=`(cd .. ; pwd)` ! else ! (echo "\ ${progname}: Neither the current directory nor its parent seem to contain the Emacs sources. If you do not want to build Emacs in its source tree, you should run \`${progname}' in the directory in which you wish to build Emacs, using its \`--srcdir' option to say where the sources may be found." ! echo "${short_usage}") >&2 ! exit 1 ! fi fi fi ;; *************** *** 291,296 **** --- 309,315 ---- ## Otherwise, check if the directory they specified is okay. * ) + srcdir=`(cd ${srcdir}; pwd)` if [ ! -d "${srcdir}" -o ! -f "${srcdir}/src/lisp.h" -o ! -f "${srcdir}/lisp/version.el" ]; then (echo "\ ${progname}: The directory specified with the \`--srcdir' option, *************** *** 498,507 **** machine=hp9000s300 opsys=hpux ;; ! ## HP 9000 series 800, running HP/UX hppa1.0-hp-hpux* ) ! machine=hp9000s800 opsys=hpux ;; ## Orion machines orion-orion-bsd* ) --- 517,536 ---- machine=hp9000s300 opsys=hpux ;; ! ## HP 9000 series 700 and 800, running HP/UX hppa1.0-hp-hpux* ) ! machine=hp9000s800 opsys=hpux.h ! ;; ! hppa1.1-hp-hpux* ) ! machine=hp9000s800 opsys=hpux8.h ;; + hppa*-hp-hpux* ) + ## Cross-compilation? Nah! + case "`uname -m`" in + 9000/8?? ) machine=hp9000s800 opsys=hpux.h ;; + 9000/7?? ) machine=hp9000s800 opsys=hpux8.h ;; + esac + ;; ## Orion machines orion-orion-bsd* ) *************** *** 544,555 **** machine=is386 opsys=usg5-2-2 ;; ## Intel 386 machines where we don't care about the manufacturer ! i[34]86-* ) machine=intel386 case "${configuration}" in *-isc1.* | *-isc2.[01]* ) opsys=386-ix ;; *-isc2.2 ) opsys=isc2-2 ;; *-isc* ) opsys=isc3-0 ;; *-esix* ) opsys=esix ;; *-xenix* ) opsys=xenix ;; *-linux* ) opsys=linux ;; --- 573,585 ---- machine=is386 opsys=usg5-2-2 ;; ## Intel 386 machines where we don't care about the manufacturer ! i[34]86-unknown-* ) machine=intel386 case "${configuration}" in *-isc1.* | *-isc2.[01]* ) opsys=386-ix ;; *-isc2.2 ) opsys=isc2-2 ;; *-isc* ) opsys=isc3-0 ;; + *-esix5* ) opsys=esix5r4 ;; *-esix* ) opsys=esix ;; *-xenix* ) opsys=xenix ;; *-linux* ) opsys=linux ;; *************** *** 558,563 **** --- 588,598 ---- esac ;; + ## Intel 860 + i860-*-sysvr4 ) + machine=i860 opsys=usg5-4 + ;; + ## Silicon Graphics machines ## Iris 2500 and Iris 2500 Turbo (aka the Iris 3030) m68*-sgi-iris3.5 ) *************** *** 823,828 **** --- 858,864 ---- dnl checks for programs AC_LN_S AC_PROG_CPP + AC_PROG_INSTALL dnl checks for UNIX variants that set `DEFS' *************** *** 836,842 **** dnl checks for functions AC_ALLOCA ! AC_HAVE_FUNCS(gettimeofday gethostname dup2) dnl checks for structure members AC_STRUCT_TM --- 872,878 ---- dnl checks for functions AC_ALLOCA ! AC_HAVE_FUNCS(gettimeofday gethostname dup2 rename) dnl checks for structure members AC_STRUCT_TM *************** *** 1015,1020 **** --- 1051,1058 ---- AC_SUBST(LD_SWITCH_X_SITE) AC_SUBST(C_SWITCH_X_SITE) AC_SUBST(CFLAGS) + AC_SUBST(prefix) + AC_SUBST(exec_prefix) AC_DEFINE_UNQUOTED(config_machfile, "\"${machfile}\"") AC_DEFINE_UNQUOTED(config_opsysfile, "\"${opsysfile}\"") diff -rcP emacs-19.7/etc/ChangeLog emacs-19.8/etc/ChangeLog *** emacs-19.7/etc/ChangeLog Sat May 22 19:38:13 1993 --- emacs-19.8/etc/ChangeLog Mon May 24 12:17:52 1993 *************** *** 1,3 **** --- 1,7 ---- + Mon May 24 12:14:41 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + Sat May 22 19:37:01 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) * Version 19.7 released. diff -rcP emacs-19.7/etc/FTP emacs-19.8/etc/FTP *** emacs-19.7/etc/FTP Fri May 14 12:23:26 1993 --- emacs-19.8/etc/FTP Tue May 25 04:13:02 1993 *************** *** 134,140 **** scam.berkeley.edu, jaguar.utah.edu, gatekeeper.dec.com:/pub/gnu, archive.cis.ohio-state.edu, and ftp.uu.net:/archive/systems/gnu). And these foreign sites: archie.oz.au:/gnu (Australia (archie.oz or ! archie.oz.au for ACSnet)), ftp.informatik.tu-muenchen.de or ftp.informatik.rwth-aachen.de (Germany), isy.liu.se, ftp.stacken.kth.se or ftp.luth.se:/pub/unix/gnu (Sweden), hp4nl.nluug.nl (Netherlands), ftp.win.tue.nl (Netherlands Internet --- 134,142 ---- scam.berkeley.edu, jaguar.utah.edu, gatekeeper.dec.com:/pub/gnu, archive.cis.ohio-state.edu, and ftp.uu.net:/archive/systems/gnu). And these foreign sites: archie.oz.au:/gnu (Australia (archie.oz or ! archie.oz.au for ACSnet)), ! ftp-admin@ftp.technion.al.il:/pub/unsupported/gnu (Israel, automatic ! update daily), ftp.informatik.tu-muenchen.de or ftp.informatik.rwth-aachen.de (Germany), isy.liu.se, ftp.stacken.kth.se or ftp.luth.se:/pub/unix/gnu (Sweden), hp4nl.nluug.nl (Netherlands), ftp.win.tue.nl (Netherlands Internet *************** *** 183,191 **** Information on how to uucp some GNU programs is available via electronic mail from: uunet!hutch!barber, hqda-ai!merlin, acornrc!bob, ! hao!scicom!qetzal!upba!ugn!nepa!denny, bigtex!james (aka ! james@bigtex.cactus.org), ncar!noao!asuvax!hrc!dan, oli-stl!root, ! src@contrib.de (in Germany) and info@ftp.uu.net. * If You Like The Software --- 185,193 ---- Information on how to uucp some GNU programs is available via electronic mail from: uunet!hutch!barber, hqda-ai!merlin, acornrc!bob, ! hao!scicom!qetzal!upba!ugn!nepa!denny, ncar!noao!asuvax!hrc!dan, ! bigtex!james (aka james@bigtex.cactus.org), oli-stl!root, ! src@contrib.de (Germany), toku@dit.co.jp (Japan) and info@ftp.uu.net. * If You Like The Software diff -rcP emacs-19.7/etc/LNEWS emacs-19.8/etc/LNEWS *** emacs-19.7/etc/LNEWS Thu May 20 09:13:27 1993 --- emacs-19.8/etc/LNEWS Sun May 23 23:39:33 1993 *************** *** 299,310 **** `log' Logarithm base E. - `expm1' - Power of E, minus 1. - - `log1p' - Add 1, then take the logarithm. - `log10' Logarithm base 10 --- 299,304 ---- *************** *** 438,449 **** take note of `deactivate-mark' and actually deactivate the mark. Transient Mark mode enables highlighting of the region when the ! mark is active. This is currently implemented only using X ! Windows. A few other commands vary their behavior slightly in ! this case, by testing `transient-mark-mode'. More specifically, ! they avoid special display actions such as moving the cursor ! temporarily, which are not needed when the region is shown by ! highlighting. The variables `activate-mark-hook' and `deactivate-mark-hook' are normal hooks run, respectively, when the mark becomes active --- 432,443 ---- take note of `deactivate-mark' and actually deactivate the mark. Transient Mark mode enables highlighting of the region when the ! mark is active. This is currently implemented only under the X ! Window System. A few other commands vary their behavior slightly ! in this case, by testing `transient-mark-mode'. More ! specifically, they avoid special display actions such as moving ! the cursor temporarily, which are not needed when the region is ! shown by highlighting. The variables `activate-mark-hook' and `deactivate-mark-hook' are normal hooks run, respectively, when the mark becomes active *************** *** 528,536 **** object--just as for properties of symbols. You can use the property `face-code' to control the font and color ! of text. That is the only property name which currently has a special ! meaning, but you can create properties of any name and examine them ! later for your own purposes. Copying text between strings and buffers preserves the properties along with the characters; this includes such diverse functions as --- 522,530 ---- object--just as for properties of symbols. You can use the property `face-code' to control the font and color ! of text. Several other property names have special meanings. You can ! create properties of any name and examine them later for your own ! purposes. Copying text between strings and buffers preserves the properties along with the characters; this includes such diverse functions as *************** *** 573,579 **** Changing Text Properties ------------------------ ! There are three primitives for changing properties of a specified range of text: `add-text-properties' --- 567,573 ---- Changing Text Properties ------------------------ ! There are four primitives for changing properties of a specified range of text: `add-text-properties' *************** *** 905,912 **** Creating and Deleting Frames ---------------------------- ! Use `make-frame' to create a new frame (supported under X Windows ! only). This is the only primitive for creating frames. `make-frame' takes just one argument, which is an alist specifying frame parameters. Any parameters not mentioned in the argument alist --- 899,907 ---- Creating and Deleting Frames ---------------------------- ! Use `make-frame' to create a new frame. This is the only primitive ! for creating frames. In principle it could work under any window system ! which Emacs understands; the only one we support is X. `make-frame' takes just one argument, which is an alist specifying frame parameters. Any parameters not mentioned in the argument alist *************** *** 930,937 **** position parameters or neither. The geometry parameters that you don't specify are chosen by the window manager in its usual fashion. ! The function `x-parse-geometry' converts a standard X windows ! geometry string to an alist which you can use as part of the argument to `make-frame'. Use the function `delete-frame' to eliminate a frame. Frames are --- 925,932 ---- position parameters or neither. The geometry parameters that you don't specify are chosen by the window manager in its usual fashion. ! The function `x-parse-geometry' converts a standard X-style geometry ! string to an alist which you can use as part of the argument to `make-frame'. Use the function `delete-frame' to eliminate a frame. Frames are *************** *** 1087,1093 **** `foreground-color' The color to use for the inside of a character. Use strings to ! designate colors; X windows defines the meaningful color names. `background-color' The color to use for the background of text. --- 1082,1088 ---- `foreground-color' The color to use for the inside of a character. Use strings to ! designate colors; the X server defines the meaningful color names. `background-color' The color to use for the background of text. *************** *** 1141,1148 **** You can also specify a minibuffer window explicitly when you create a frame; then `default-minibuffer-frame' is not used. ! X Windows Features ! ================== * The new functions `mouse-position' and `set-mouse-position' give access to the current position of the mouse. --- 1136,1143 ---- You can also specify a minibuffer window explicitly when you create a frame; then `default-minibuffer-frame' is not used. ! X Window System Features ! ======================== * The new functions `mouse-position' and `set-mouse-position' give access to the current position of the mouse. *************** *** 1168,1189 **** `track-mouse' returns the value of the last form in BODY. ! The format of these events is described under "New features for key ! bindings and input." ! * `x-set-selection' sets a "selection" in the X Windows server. It ! takes two arguments: a selection type TYPE, and the value to ! assign to it, DATA. If DATA is `nil', it means to clear out the ! selection. Otherwise, DATA may be a string, a symbol, an integer ! (or a cons of two integers or list of two integers), or a cons of ! two markers pointing to the same buffer. In the last case, the ! selection is considered to be the text between the markers. The ! data may also be a vector of valid non-vector selection values. Each possible TYPE has its own selection value, which changes independently. The usual values of TYPE are `PRIMARY' and `SECONDARY'; these are symbols with upper-case names, in accord ! with X Windows conventions. The default is `PRIMARY'. To get the value of the selection, call `x-get-selection'. This function accesses selections set up by Emacs and those set up by --- 1163,1184 ---- `track-mouse' returns the value of the last form in BODY. ! The format of these events is described under "New Input Event ! Formats." ! * `x-set-selection' sets a "selection" in the X server. It takes ! two arguments: a selection type TYPE, and the value to assign to ! it, DATA. If DATA is `nil', it means to clear out the selection. ! Otherwise, DATA may be a string, a symbol, an integer (or a cons ! of two integers or list of two integers), or a cons of two markers ! pointing to the same buffer. In the last case, the selection is ! considered to be the text between the markers. The data may also ! be a vector of valid non-vector selection values. Each possible TYPE has its own selection value, which changes independently. The usual values of TYPE are `PRIMARY' and `SECONDARY'; these are symbols with upper-case names, in accord ! with X protocol conventions. The default is `PRIMARY'. To get the value of the selection, call `x-get-selection'. This function accesses selections set up by Emacs and those set up by *************** *** 1198,1205 **** upper-case names in accord with X Windows conventions.) The default for DATA-TYPE is `STRING'. ! * X Windows has a set of numbered "cut buffers" which can store text ! or other data being moved between applications. Use `x-get-cut-buffer' to get the contents of a cut buffer; specify the cut buffer number as argument. Use `x-set-cut-buffer' with argument STRING to store a new string into the first cut buffer --- 1193,1200 ---- upper-case names in accord with X Windows conventions.) The default for DATA-TYPE is `STRING'. ! * The X server has a set of numbered "cut buffers" which can store ! text or other data being moved between applications. Use `x-get-cut-buffer' to get the contents of a cut buffer; specify the cut buffer number as argument. Use `x-set-cut-buffer' with argument STRING to store a new string into the first cut buffer *************** *** 1206,1218 **** (moving the other values down through the series of cut buffers, kill-ring-style). ! Cut buffers are considered obsolete in X Windows, but Emacs ! supports them for the sake of X clients that still use them. ! * You can close the connection with the X Windows server with the ! function `x-close-current-connection'. This takes no arguments. ! Then you can connect to a different X Windows server with `x-open-connection'. The first argument, DISPLAY, is the name of the display to connect to. --- 1201,1213 ---- (moving the other values down through the series of cut buffers, kill-ring-style). ! Cut buffers are considered obsolete, but Emacs supports them for ! the sake of X clients that still use them. ! * You can close the connection with the X server with the function ! `x-close-current-connection'. This takes no arguments. ! Then you can connect to a different X server with `x-open-connection'. The first argument, DISPLAY, is the name of the display to connect to. *************** *** 1219,1226 **** The optional second argument XRM-STRING is a string of resource names and values, in the same format used in the `.Xresources' file. The values you specify override the resource values ! recorded in the X Windows server itself. Here's an example of ! what this string might look like: "*BorderWidth: 3\n*InternalBorder: 2\n" --- 1214,1221 ---- The optional second argument XRM-STRING is a string of resource names and values, in the same format used in the `.Xresources' file. The values you specify override the resource values ! recorded in the X server itself. Here's an example of what this ! string might look like: "*BorderWidth: 3\n*InternalBorder: 2\n" *************** *** 1293,1300 **** If you specify them, the key is `INSTANCE.COMPONENT.ATTRIBUTE', and the class is `Emacs.SUBCLASS'. ! * `x-display-color-p' returns `t' if you are using an X Window ! server with a color display, and `nil' otherwise. `x-color-defined-p' takes as argument a string describing a color; it returns `t' if the display supports that color. (If the color --- 1288,1295 ---- If you specify them, the key is `INSTANCE.COMPONENT.ATTRIBUTE', and the class is `Emacs.SUBCLASS'. ! * `x-display-color-p' returns `t' if you are using an X server with ! a color display, and `nil' otherwise. `x-color-defined-p' takes as argument a string describing a color; it returns `t' if the display supports that color. (If the color *************** *** 1316,1323 **** that pop up menus. * You can use the function `x-rebind-key' to change the sequence of ! characters generated by one of the keyboard keys. This works only ! with X Windows. The first two arguments, KEYCODE and SHIFT-MASK, should be numbers representing the keyboard code and shift mask respectively. They --- 1311,1317 ---- that pop up menus. * You can use the function `x-rebind-key' to change the sequence of ! characters generated by the X server for one of the keyboard keys. The first two arguments, KEYCODE and SHIFT-MASK, should be numbers representing the keyboard code and shift mask respectively. They *************** *** 1360,1368 **** shift mask. * The function `x-parse-geometry' parses a string specifying window ! size and position in the usual fashion for X windows. It returns ! an alist describing which parameters were specified, and the ! values that were given for them. The elements of the alist look like `(PARAMETER . VALUE)'. The possible PARAMETER values are `left', `top', `width', and `height'. --- 1354,1362 ---- shift mask. * The function `x-parse-geometry' parses a string specifying window ! size and position in the usual X format. It returns an alist ! describing which parameters were specified, and the values that ! were given for them. The elements of the alist look like `(PARAMETER . VALUE)'. The possible PARAMETER values are `left', `top', `width', and `height'. *************** *** 1534,1542 **** Display Features ================ - * We removed the variable `line-number-display-limit' and the - function `line-number-mode'. - * `baud-rate' is now a variable rather than a function. This is so you can set it to reflect the effective speed of your terminal, when the system doesn't accurately know the speed. --- 1528,1533 ---- *************** *** 1568,1575 **** position on the screen. You can also define how to display each glyph on your terminal, using the "glyph table". ! Display Tables ! -------------- Use `make-display-table' to create a display table. The table initially has `nil' in all elements. --- 1559,1566 ---- position on the screen. You can also define how to display each glyph on your terminal, using the "glyph table". ! Display Tables Proper ! --------------------- Use `make-display-table' to create a display table. The table initially has `nil' in all elements. *************** *** 1640,1650 **** INTEGER Define this glyph code as an alias for code INTEGER. This is used ! with X windows to specify a face code. STRING Send the characters in STRING to the terminal to output this ! glyph. This alternative is not available with X Windows. `NIL' This glyph is simple. On an ordinary terminal, the glyph code mod --- 1631,1642 ---- INTEGER Define this glyph code as an alias for code INTEGER. This is used ! with X Windows to specify a face code. STRING Send the characters in STRING to the terminal to output this ! glyph. This alternative is available only for character ! terminals, not with X. `NIL' This glyph is simple. On an ordinary terminal, the glyph code mod *************** *** 1655,1669 **** Any glyph code beyond the length of the glyph table is automatically simple. - A face code for X windows is the combination of a font and a color. - Emacs uses integers to identify face codes. You can define a new face - code with `(x-set-face FACE-CODE FONT FOREGROUND BACKGROUND)'. - fACE-CODE is an integer from 0 to 255; it specifies which face to - define. The other three arguments are strings: FONT is the name of the - font to use, and FOREGROUND and BACKGROUND specify the colors to use. - If `glyph-table' is `nil', then all possible glyph codes are simple. ISO Latin 1 ----------- --- 1647,1658 ---- Any glyph code beyond the length of the glyph table is automatically simple. If `glyph-table' is `nil', then all possible glyph codes are simple. + A "face" is a named combination of a font and a pair of colors + (foreground and background). A glyph code can specify a face id number + to use for displaying that glyph. + ISO Latin 1 ----------- *************** *** 1688,1693 **** --- 1677,1794 ---- You can load the appropriate display table for your terminal automatically by writing a terminal-specific Lisp file for the terminal type. + + Overlays + ======== + + You can use "overlays" to alter the appearance of a buffer's text on + the screen. An overlay is an object which belongs to a particular + buffer, and has a specified beginning and end. It also has properties + which you can examine and set; these affect the display of the text + within the overlay. + + Overlay Properties + ------------------ + + Overlay properties are like text properties in some respects, but the + differences are more important than the similarities. Text properties + are considered a part of the text; overlays are specifically considered + not to be part of the text. Thus, copying text between various buffers + and strings preserves text properties, but does not try to preserve + overlays. Changing a buffer's text properties marks the buffer as + modified, while moving an overlay or changing its properties does not. + + `face' + This property specifies a face for displaying the text within the + overlay. + + `priority' + This property's value (which should be a nonnegative number) + determines the priority of the overlay. The priority matters when + two or more overlays cover the same character and both specify a + face for display; the one whose `priority' value is larger takes + priority over the other, and its face attributes override the face + attributes of the lower priority overlay. + + Currently, all overlays take priority over text properties. Please + avoid using negative priority values, as we have not yet decided + just what they should mean. + + `window' + If the `window' property is non-`nil', then the overlay applies + only on that window. + + Overlay Functions + ----------------- + + Use the functions `overlay-get' and `overlay-put' to access and set + the properties of an overlay. They take arguments like `get' and + `put', except that the first argument is an overlay rather than a + symbol. + + To create an overlay, call `(make-overlay START END)'. You can + specify the buffer as the third argument if you wish. To delete one, + use `delete-overlay'. + + Use `overlay-start', `overlay-end' and `overlay-buffer' to examine + the location and range of an overlay. Use `move-overlay' to change + them; its arguments are OVERLAY, START, END and (optionally) the buffer. + + There are two functions to search for overlays: `overlays-at' and + `next-overlay-change'. `overlays-at' returns a list of all the + overlays containing a particular position. `(next-overlay-change POS)' + returns the position of the next overlay beginning or end following POS. + + Faces + ===== + + A "face" is a named collection of graphical attributes: font, + foreground color, background color and optional underlining. Faces + control the display of text on the screen. + + Each face has its own "face id number" which distinguishes faces at + low levels within Emacs. However, for most purposes, you can refer to + faces in Lisp programs by their names. + + Each face name is meaningful for all frames, and by default it has + the same meaning in all frames. But you can arrange to give a + particular face name a special meaning in one frame if you wish. + + Choosing a Face for Display + --------------------------- + + Here are all the ways to specify which face to use for display of + text: + + * With defaults. Each frame has a "default face", whose id number is + zero, which is used for all text that doesn't somehow specify + another face. + + * With text properties. A character may have a `face' property; if + so, it's displayed with that face. If the character has a + `mouse-face' property, that is used instead of the `face' property + when the mouse is "near enough" to the character. + + * With overlays. An overlay may have `face' and `mouse-face' + properties too; they apply to all the text covered by the overlay. + + * With special glyphs. Each glyph can specify a particular face id + number. + + If these various sources together specify more than one face for a + particular character, Emacs merges the attributes of the various faces + specified. The attributes of the faces of special glyphs come first; + then come attributes of faces from overlays, followed by those from text + properties, and last the default face. + + When multiple overlays cover one character, an overlay with higher + priority overrides those with lower priority. + + If an attribute such as the font or a color is not specified in any + of the above ways, the frame's own font or color is used. + + *Note Face Functions: (elisp)Face Functions, for functions to create + and change faces. New Input Event Formats ======================= diff -rcP emacs-19.7/etc/MACHINES emacs-19.8/etc/MACHINES *** emacs-19.7/etc/MACHINES Wed May 19 20:59:32 1993 --- emacs-19.8/etc/MACHINES Sun May 23 23:24:31 1993 *************** *** 297,307 **** which relocates data in memory during execution of a program, and support for it would be difficult to implement. ! HP 9000 series 800 (Spectrum) (hppa1.0-hp-hpux) These files support HP's Precision Architecture machines running HP-UX. It has been moderately tested on the Series 840. If you are running HP-UX release 8.0 or later, you need the optional "C/ANSI C" software in order to build Emacs (older releases of HP-UX --- 297,310 ---- which relocates data in memory during execution of a program, and support for it would be difficult to implement. ! HP 9000 series 700 or 800 (Spectrum) (hppa-hp-hpux) These files support HP's Precision Architecture machines running HP-UX. It has been moderately tested on the Series 840. + + It hasn't been tested on the 700's at all. If you try it out on + this system, please send us comments and patches. If you are running HP-UX release 8.0 or later, you need the optional "C/ANSI C" software in order to build Emacs (older releases of HP-UX diff -rcP emacs-19.7/etc/NEWS emacs-19.8/etc/NEWS *** emacs-19.7/etc/NEWS Fri May 21 13:34:46 1993 --- emacs-19.8/etc/NEWS Tue May 25 10:47:00 1993 *************** *** 6,11 **** --- 6,57 ---- For older news, see the file ONEWS. For Lisp changes in Emacs 19, see the file LNEWS. + Changes in version 19.8. + + * It is now simpler to tell Emacs to display accented characters under + X windows. M-x standard-display-european toggles the display of + buffer text according to the ISO Latin-1 standard. With a prefix + argument, this command enables European character display iff the + argument is positive. + + * The `-i' command-line argument tells Emacs to use a picture of the + GNU gnu as its icon, instead of letting the window manager choose an + icon for it. This option used to insert a file into the current + buffer; use `-insert' to do that now. + + * The `configure' script now supports `--prefix' and `--exec-prefix' + options. + + The `--prefix=PREFIXDIR' option specifies where the installation process + should put emacs and its data files. This defaults to `/usr/local'. + - Emacs (and the other utilities users run) go in PREFIXDIR/bin + (unless the `--exec-prefix' option says otherwise). + - The architecture-independent files go in PREFIXDIR/lib/emacs/VERSION + (where VERSION is the version number of Emacs, like `19.7'). + - The architecture-dependent files go in + PREFIXDIR/lib/emacs/VERSION/CONFIGURATION + (where CONFIGURATION is the configuration name, like mips-dec-ultrix4.2), + unless the `--exec-prefix' option says otherwise. + + The `--exec-prefix=EXECDIR' option allows you to specify a separate + portion of the directory tree for installing architecture-specific + files, like executables and utility programs. If specified, + - Emacs (and the other utilities users run) go in EXECDIR/bin, and + - The architecture-dependent files go in + EXECDIR/lib/emacs/VERSION/CONFIGURATION. + EXECDIR/bin should be a directory that is normally in users' PATHs. + + * When running under X Windows, the new lisp function `x-list-fonts' + allows code to find out which fonts are available from the X server. + The first argument PATTERN is a string, perhaps with wildcard characters; + the * character matches any substring, and + the ? character matches any single character. + PATTERN is case-insensitive. + If the optional arguments FACE and FRAME are specified, then + `x-list-fonts' returns only fonts the same size as FACE on FRAME. + + + Changes in version 19. * When you kill buffers, Emacs now returns memory to the operating system, *************** *** 41,54 **** * You can quit while Emacs is waiting to read or write files. * The arrow keys now have default bindings to move in the appropriate ! directions. (Of course, you must provide a terminal-specific file to ! tell Emacs what sequences the arrow keys send on each kind of ! terminal, or Emacs won't recognize the arrow keys.) ! ! * The arrow keys now act like true motion commands; down-arrow will ! beep when you try to move past the buffer end and not insert newlines, ! left and right arrow will trigger horizontal scrolling when point ! would otherwise move off the screen. * You can suppress next-line's habit of inserting a newline when called at the end of a buffer by setting next-line-add-newlines to nil --- 87,93 ---- * You can quit while Emacs is waiting to read or write files. * The arrow keys now have default bindings to move in the appropriate ! directions. * You can suppress next-line's habit of inserting a newline when called at the end of a buffer by setting next-line-add-newlines to nil diff -rcP emacs-19.7/etc/ORDERS emacs-19.8/etc/ORDERS *** emacs-19.7/etc/ORDERS Sat May 22 13:54:59 1993 --- emacs-19.8/etc/ORDERS Mon May 24 06:12:02 1993 *************** *** 127,133 **** GNU Utilities Tape The tape includes source code for: ! * acm * autoconf (produces shell scripts to automatically configure software builds) * Bash (GNU's Bourne Again SHell) * GNU bc, dc & cpio --- 127,133 ---- GNU Utilities Tape The tape includes source code for: ! * acm (multiplayer aerial combat simulation for the X window system) * autoconf (produces shell scripts to automatically configure software builds) * Bash (GNU's Bourne Again SHell) * GNU bc, dc & cpio *************** *** 135,141 **** * GNU diffutils (cmp, diff, diff3 & sdiff) * doschk (checks if file names are under 15 characters and in MS-DOS format) * elvis (a clone of the vi/ex Unix editor) ! * es (a new shell with closure and other lisp-like features) * Fax (a fax spooling system) * GNU find & finger * GNU fontutils (create and support fonts for use with Ghostscript or TeX) --- 135,141 ---- * GNU diffutils (cmp, diff, diff3 & sdiff) * doschk (checks if file names are under 15 characters and in MS-DOS format) * elvis (a clone of the vi/ex Unix editor) ! * es (extensible rc-like shell with lexical scope, first class functions, etc.) * Fax (a fax spooling system) * GNU find & finger * GNU fontutils (create and support fonts for use with Ghostscript or TeX) *************** *** 157,165 **** * GNU m4 * mtools (allows Unix systems to manipulate files on an MS-DOS file system) * patch ! * rc (a new minimalist shell) * RCS (Revision Control System) ! * recode (converts files between character sets and usages) * screen (a terminal multiplexor that allows you to handle several independent ``screens'' (ttys) on a single physical terminal) * GNU sed & tar --- 157,165 ---- * GNU m4 * mtools (allows Unix systems to manipulate files on an MS-DOS file system) * patch ! * rc (shell with far more C-like syntax and far cleaner quoting than csh or sh) * RCS (Revision Control System) ! * recode (converts files between many character sets and usages) * screen (a terminal multiplexor that allows you to handle several independent ``screens'' (ttys) on a single physical terminal) * GNU sed & tar diff -rcP emacs-19.7/etc/ORDERS.JAPAN emacs-19.8/etc/ORDERS.JAPAN *** emacs-19.7/etc/ORDERS.JAPAN Thu May 20 16:45:49 1993 --- emacs-19.8/etc/ORDERS.JAPAN Mon May 24 16:58:40 1993 *************** *** 54,69 **** Packet of ten Flex reference cards Y1,500 ________ __________ ! FSF T-shirt (size M) Y7,500 ________ __________ Color: Natural or Black (circle) ! FSF T-shirt (size L) Y7,500 ________ __________ Color: Natural or Black (circle) ! FSF T-shirt (size XL) Y7,500 ________ __________ Color: Natural or Black (circle) ! FSF T-shirt (size XXL) Y7,500 ________ __________ Color: Natural or Black (circle) Shipping Y1,500 --- 54,69 ---- Packet of ten Flex reference cards Y1,500 ________ __________ ! FSF T-shirt (size M) Y5,500 ________ __________ Color: Natural or Black (circle) ! FSF T-shirt (size L) Y5,500 ________ __________ Color: Natural or Black (circle) ! FSF T-shirt (size XL) Y5,500 ________ __________ Color: Natural or Black (circle) ! FSF T-shirt (size XXL) Y5,500 ________ __________ Color: Natural or Black (circle) Shipping Y1,500 diff -rcP emacs-19.7/etc/emacs.1 emacs-19.8/etc/emacs.1 *** emacs-19.7/etc/emacs.1 Sat Mar 2 01:07:48 1991 --- emacs-19.8/etc/emacs.1 Mon May 24 22:43:35 1993 *************** *** 134,140 **** defaults in the user's X resources. This must be the first option specified in the command line. .TP 8 ! .BI \-wn " name" Specifies the name which should be assigned to the .I Emacs window. --- 134,140 ---- defaults in the user's X resources. This must be the first option specified in the command line. .TP 8 ! .BI \-name " name" Specifies the name which should be assigned to the .I Emacs window. *************** *** 189,195 **** Defaults to one pixel of padding on each side of the window. .PP .TP 8 ! .BI \-w " geometry, " \-geometry " geometry" Set the .I Emacs window's width, height, and position as specified. The geometry --- 189,195 ---- Defaults to one pixel of padding on each side of the window. .PP .TP 8 ! .BI \-geometry " geometry" Set the .I Emacs window's width, height, and position as specified. The geometry diff -rcP emacs-19.7/etc/news.texi emacs-19.8/etc/news.texi *** emacs-19.7/etc/news.texi Thu May 20 11:09:18 1993 --- emacs-19.8/etc/news.texi Mon May 24 03:27:06 1993 *************** *** 577,585 **** Lisp object---just as for properties of symbols. You can use the property @code{face-code} to control the font and ! color of text. That is the only property name which currently has a ! special meaning, but you can create properties of any name and examine ! them later for your own purposes. Copying text between strings and buffers preserves the properties along with the characters; this includes such diverse functions as --- 577,585 ---- Lisp object---just as for properties of symbols. You can use the property @code{face-code} to control the font and ! color of text. Several other property names have special meanings. You ! can create properties of any name and examine them later for your own ! purposes. Copying text between strings and buffers preserves the properties along with the characters; this includes such diverse functions as *************** *** 628,634 **** @subsection Changing Text Properties ! There are three primitives for changing properties of a specified range of text: @table @code --- 628,634 ---- @subsection Changing Text Properties ! There are four primitives for changing properties of a specified range of text: @table @code *************** *** 680,689 **** of the symbol serve as defaults for the properties of the character. You can use the property @code{face-code} to control the font and ! color of text. That is the only property name which currently has a ! special meaning, but you can create properties of any name and examine ! them later for your own purposes. ! about face codes. You can specify a different keymap for a portion of the text by means of a @code{local-map} property. The property's value, for the character --- 680,686 ---- of the symbol serve as defaults for the properties of the character. You can use the property @code{face-code} to control the font and ! color of text. You can specify a different keymap for a portion of the text by means of a @code{local-map} property. The property's value, for the character *************** *** 1699,1708 **** @section Display Features @itemize @bullet - @item - We removed the variable @code{line-number-display-limit} and the - function @code{line-number-mode}. - @item @code{baud-rate} is now a variable rather than a function. This is so you can set it to reflect the effective speed of your terminal, when the --- 1696,1701 ---- diff -rcP emacs-19.7/info/emacs emacs-19.8/info/emacs *** emacs-19.7/info/emacs Fri May 21 14:01:08 1993 --- emacs-19.8/info/emacs Tue May 25 11:00:31 1993 *************** *** 4,403 ****  Indirect: emacs-1: 92 ! emacs-2: 49021 ! emacs-3: 94070 ! emacs-4: 142194 ! emacs-5: 181393 ! emacs-6: 231006 ! emacs-7: 279954 ! emacs-8: 327693 ! emacs-9: 376626 ! emacs-10: 424981 ! emacs-11: 474049 ! emacs-12: 521672 ! emacs-13: 568733 ! emacs-14: 618492 ! emacs-15: 667132 ! emacs-16: 716812 ! emacs-17: 766187 ! emacs-18: 808593 ! emacs-19: 842922 ! emacs-20: 870336 ! emacs-21: 911392  Tag Table: (Indirect) Node: Top92 ! Node: Distrib14508 ! Node: Copying17250 ! Node: Intro36398 ! Node: Screen39289 ! Node: Point41191 ! Node: Echo Area43040 ! Node: Mode Line45368 ! Node: User Input49021 ! Node: Keys52713 ! Node: Commands54926 ! Node: Text Characters57635 ! Node: Entering Emacs58628 ! Node: Exiting61098 ! Node: Basic63898 ! Node: Inserting Text64932 ! Node: Moving Point67446 ! Node: Erasing70487 ! Node: Basic Files71707 ! Node: Basic Help73360 ! Node: Blank Lines73916 ! Node: Continuation Lines75486 ! Node: Position Info77140 ! Node: Arguments80363 ! Node: Undo84003 ! Node: Minibuffer87872 ! Node: Minibuffer File90464 ! Node: Minibuffer Edit92081 ! Node: Completion94070 ! Node: Minibuffer History100110 ! Node: Repetition102809 ! Node: M-x104995 ! Node: Help107331 ! Node: Help Summary108449 ! Node: Key Help110486 ! Node: Name Help111185 ! Node: Apropos113573 ! Node: Library Keywords115754 ! Node: Misc Help117440 ! Node: Mark119911 ! Node: Setting Mark121534 ! Node: Using Region124474 ! Node: Marking Objects125329 ! Node: Mark Ring127243 ! Node: Killing129179 ! Node: Deletion130444 ! Node: Killing by Lines132326 ! Node: Other Kill Commands133848 ! Node: Yanking135170 ! Node: Kill Ring135978 ! Node: Appending Kills137190 ! Node: Earlier Kills139405 ! Node: Accumulating Text142194 ! Node: Rectangles145245 ! Node: Registers149642 ! Node: RegPos150693 ! Node: RegText151572 ! Node: RegRect152559 ! Node: RegConfig153298 ! Node: RegFiles153987 ! Node: Display154623 ! Node: Scrolling156088 ! Node: Horizontal Scrolling159918 ! Node: Selective Display161362 ! Node: Optional Display162536 ! Node: Display Vars164164 ! Node: Search167741 ! Node: Incremental Search168927 ! Node: Nonincremental Search176379 ! Node: Word Search177836 ! Node: Regexp Search179454 ! Node: Regexps181393 ! Node: Search Case192367 ! Node: Replace193373 ! Node: Unconditional Replace194485 ! Node: Regexp Replace195614 ! Node: Replacement and Case196532 ! Node: Query Replace197481 ! Node: Other Repeating Search201300 ! Node: Fixit202517 ! Node: Kill Errors203105 ! Node: Transpose204372 ! Node: Fixing Case206881 ! Node: Spelling207538 ! Node: Files210538 ! Node: File Names211754 ! Node: Visiting215815 ! Node: Saving221543 ! Node: Backup227645 ! Node: Backup Names229035 ! Node: Backup Deletion231006 ! Node: Backup Copying232181 ! Node: Interlocking233911 ! Node: Reverting237831 ! Node: Auto Save239013 ! Node: Auto Save Files239982 ! Node: Auto Save Control242097 ! Node: Recover243962 ! Node: File Aliases244828 ! Node: Version Control245980 ! Node: Concepts of VC247060 ! Node: Editing with VC248521 ! Node: Variables for Check-in/out253077 ! Node: Log Entries254748 ! Node: Change Logs and VC255921 ! Node: Comparing Versions259186 ! Node: VC Status260574 ! Node: Renaming and VC262270 ! Node: Snapshots262945 ! Node: Making Snapshots263437 ! Node: Snapshot Caveats264696 ! Node: Version Headers266362 ! Node: ListDir268818 ! Node: Comparing Files270320 ! Node: Misc File Ops271937 ! Node: Buffers274921 ! Node: Select Buffer277195 ! Node: List Buffers278478 ! Node: Misc Buffer279954 ! Node: Kill Buffer282518 ! Node: Several Buffers283974 ! Node: Windows288235 ! Node: Basic Window288927 ! Node: Split Window290767 ! Node: Other Window292732 ! Node: Pop Up Window294493 ! Node: Change Window295960 ! Node: Frames297834 ! Node: Mouse Commands298725 ! Node: Creating Frames300094 ! Node: Frame Parameters301447 ! Node: Scroll Bars302841 ! Node: Menu Bars304309 ! Node: Faces304786 ! Node: Misc X307228 ! Node: Major Modes307809 ! Node: Choosing Modes310077 ! Node: Indentation312730 ! Node: Indentation Commands314911 ! Node: Tab Stops317844 ! Node: Just Spaces319752 ! Node: Text320557 ! Node: Words322570 ! Node: Sentences325514 ! Node: Paragraphs327693 ! Node: Pages329994 ! Node: Filling332584 ! Node: Auto Fill333151 ! Node: Fill Commands335296 ! Node: Fill Prefix337927 ! Node: Case341340 ! Node: Text Mode343644 ! Node: Outline Mode345729 ! Node: Outline Format347345 ! Node: Outline Motion350125 ! Node: Outline Visibility351691 ! Node: TeX Mode354652 ! Node: TeX Editing356124 ! Node: LaTeX Editing359452 ! Node: TeX Print360890 ! Node: TeX Distrib367103 ! Node: Nroff Mode368215 ! Node: Programs369759 ! Node: Program Modes372449 ! Node: Lists374663 ! Node: List Commands376626 ! Node: Defuns380138 ! Node: Program Indent382795 ! Node: Basic Indent383428 ! Node: Multi-line Indent385425 ! Node: Lisp Indent387060 ! Node: C Indent390446 ! Node: Matching395696 ! Node: Comments397245 ! Node: Balanced Editing404628 ! Node: Symbol Completion405639 ! Node: Documentation407024 ! Node: Change Log408486 ! Node: Tags410864 ! Node: Tag Syntax412201 ! Node: Create Tag Table413382 ! Node: Select Tag Table414975 ! Node: Find Tag416503 ! Node: Tags Search419477 ! Node: Tags Stepping422342 ! Node: List Tags422884 ! Node: Emerge424039 ! Node: Overview of Emerge424981 ! Node: Submodes of Emerge428082 ! Node: State of Difference429762 ! Node: Merge Commands432276 ! Node: Exiting Emerge434833 ! Node: Combining in Emerge435681 ! Node: Fine Points of Emerge436540 ! Node: C Mode437485 ! Node: Fortran439425 ! Node: Fortran Motion440717 ! Node: Fortran Indent441504 ! Node: ForIndent Commands442247 ! Node: ForIndent Cont443698 ! Node: ForIndent Num446036 ! Node: ForIndent Conv447005 ! Node: ForIndent Vars448052 ! Node: Fortran Comments449869 ! Node: Fortran Autofill453773 ! Node: Fortran Columns455383 ! Node: Fortran Abbrev456909 ! Node: Asm Mode457815 ! Node: Building458357 ! Node: Compilation459323 ! Node: Debuggers464504 ! Node: Starting GUD465127 ! Node: Debugger Operation466615 ! Node: Commands of GUD467901 ! Node: GUD Customization470370 ! Node: Executing Lisp472121 ! Node: Lisp Libraries474049 ! Node: Lisp Eval477690 ! Node: Lisp Interaction481315 ! Node: External Lisp482484 ! Node: Abbrevs484660 ! Node: Defining Abbrevs486869 ! Node: Expanding Abbrevs489301 ! Node: Editing Abbrevs492331 ! Node: Saving Abbrevs494217 ! Node: Dynamic Abbrevs496206 ! Node: Picture497502 ! Node: Basic Picture499867 ! Node: Insert in Picture502325 ! Node: Tabs in Picture503741 ! Node: Rectangles in Picture505244 ! Node: Sending Mail506981 ! Node: Mail Format509330 ! Node: Mail Headers510671 ! Node: Mail Aliases514196 ! Node: Mail Mode516128 ! Node: Distracting NSA520904 ! Node: Rmail521672 ! Node: Rmail Scrolling524940 ! Node: Rmail Motion525916 ! Node: Rmail Deletion529065 ! Node: Rmail Inbox531812 ! Node: Rmail Files534083 ! Node: Rmail Output536559 ! Node: Rmail Labels539680 ! Node: Rmail Reply543445 ! Node: Rmail Summary547771 ! Node: Rmail Make Summary548754 ! Node: Rmail Summary Edit550521 ! Node: Rmail Editing553069 ! Node: Rmail Digest555300 ! Node: Out of Rmail556396 ! Node: Rmail Rot13556880 ! Node: Dired557499 ! Node: Dired Enter558880 ! Node: Dired Commands559794 ! Node: Dired Deletion560811 ! Node: Dired Visiting564810 ! Node: Marks vs. Flags566076 ! Node: Operating on Files568733 ! Node: Shell Commands in Dired572057 ! Node: Transforming File Names573741 ! Node: Comparison in Dired576158 ! Node: Subdirectories in Dired576977 ! Node: Subdirectory Motion578592 ! Node: Hiding Subdirectories579528 ! Node: Dired Updating580739 ! Node: Dired and Find582556 ! Node: Calendar/Diary583775 ! Node: Calendar Motion585135 ! Node: Calendar Unit Motion585893 ! Node: Move to Beginning or End588185 ! Node: Specified Dates589200 ! Node: Scroll Calendar590084 ! Node: Counting Days592101 ! Node: General Calendar592533 ! Node: Holidays593492 ! Node: Sunrise/Sunset595809 ! Node: Lunar Phases598413 ! Node: Other Calendars599799 ! Node: Calendar Systems600974 ! Node: To Other Calendar602826 ! Node: From Other Calendar603956 ! Node: Mayan Calendar605773 ! Node: Diary608929 ! Node: Diary Commands610435 ! Node: Format of Diary File613175 ! Node: Date Formats615948 ! Node: Adding to Diary618492 ! Node: Special Diary Entries620120 ! Node: Appointments624403 ! Node: Daylight Savings626345 ! Node: GNUS627901 ! Node: Buffers of GNUS628632 ! Node: GNUS Startup629643 ! Node: Summary of GNUS630617 ! Node: Sorting634097 ! Node: Shell639069 ! Node: Single Shell640060 ! Node: Interactive Shell641716 ! Node: Shell Mode644864 ! Node: Shell History647792 ! Node: Narrowing649564 ! Node: Hardcopy651850 ! Node: Two-Column652978 ! Node: Editing Binary Files656162 ! Node: Emacs Server657495 ! Node: Recursive Edit660184 ! Node: Dissociated Press663508 ! Node: Amusements666204 ! Node: Emulation667132 ! Node: Customization669761 ! Node: Minor Modes671455 ! Node: Variables674434 ! Node: Examining676554 ! Node: Edit Options678121 ! Node: Hooks679773 ! Node: Locals681889 ! Node: File Variables685296 ! Node: Keyboard Macros689919 ! Node: Basic Kbd Macro692100 ! Node: Save Kbd Macro694792 ! Node: Kbd Macro Query696466 ! Node: Key Bindings698424 ! Node: Keymaps699618 ! Node: Prefix Keymaps703025 ! Node: Local Keymaps704310 ! Node: Minibuffer Maps706475 ! Node: Rebinding707093 ! Node: Init Rebinding710161 ! Node: Function Keys711647 ! Node: Mouse Buttons714331 ! Node: Disabling716812 ! Node: Keyboard Translations718551 ! Node: Syntax720058 ! Node: Init File721188 ! Node: Init Syntax722618 ! Node: Init Examples724712 ! Node: Terminal Init728641 ! Node: Find Init730316 ! Node: Quitting731176 ! Node: Lossage734734 ! Node: DEL Gets Help735431 ! Node: Stuck Recursive735799 ! Node: Screen Garbled736505 ! Node: Text Garbled737624 ! Node: Unasked-for Search738263 ! Node: Emergency Escape739745 ! Node: Total Frustration741496 ! Node: Bugs742115 ! Node: Bug Criteria742816 ! Node: Understanding Bug Reporting745410 ! Node: Checklist747907 ! Node: Sending Patches758090 ! Node: Service762961 ! Node: Command Arguments763557 ! Node: Ordinary Arguments765425 ! Node: Initial Options766187 ! Node: Command Example768119 ! Node: Resume Arguments768969 ! Node: Display X770620 ! Node: Font X773001 ! Node: Colors X774331 ! Node: Window Size X775551 ! Node: Borders X777935 ! Node: Resources X778870 ! Node: Manifesto782583 ! Node: Glossary808593 ! Node: Key Index842922 ! Node: Command Index870336 ! Node: Variable Index911392 ! Node: Concept Index923527  End Tag Table --- 4,404 ----  Indirect: emacs-1: 92 ! emacs-2: 49064 ! emacs-3: 94113 ! emacs-4: 142237 ! emacs-5: 181939 ! emacs-6: 231552 ! emacs-7: 280500 ! emacs-8: 328239 ! emacs-9: 377172 ! emacs-10: 425527 ! emacs-11: 474595 ! emacs-12: 522218 ! emacs-13: 569279 ! emacs-14: 619038 ! emacs-15: 667678 ! emacs-16: 717370 ! emacs-17: 766801 ! emacs-18: 810034 ! emacs-19: 844363 ! emacs-20: 871777 ! emacs-21: 912891  Tag Table: (Indirect) Node: Top92 ! Node: Distrib14551 ! Node: Copying17293 ! Node: Intro36441 ! Node: Screen39332 ! Node: Point41234 ! Node: Echo Area43083 ! Node: Mode Line45411 ! Node: User Input49064 ! Node: Keys52756 ! Node: Commands54969 ! Node: Text Characters57678 ! Node: Entering Emacs58671 ! Node: Exiting61141 ! Node: Basic63941 ! Node: Inserting Text64975 ! Node: Moving Point67489 ! Node: Erasing70530 ! Node: Basic Files71750 ! Node: Basic Help73403 ! Node: Blank Lines73959 ! Node: Continuation Lines75529 ! Node: Position Info77183 ! Node: Arguments80406 ! Node: Undo84046 ! Node: Minibuffer87915 ! Node: Minibuffer File90507 ! Node: Minibuffer Edit92124 ! Node: Completion94113 ! Node: Minibuffer History100153 ! Node: Repetition102852 ! Node: M-x105038 ! Node: Help107374 ! Node: Help Summary108492 ! Node: Key Help110529 ! Node: Name Help111228 ! Node: Apropos113616 ! Node: Library Keywords115797 ! Node: Misc Help117483 ! Node: Mark119954 ! Node: Setting Mark121577 ! Node: Using Region124517 ! Node: Marking Objects125372 ! Node: Mark Ring127286 ! Node: Killing129222 ! Node: Deletion130487 ! Node: Killing by Lines132369 ! Node: Other Kill Commands133891 ! Node: Yanking135213 ! Node: Kill Ring136021 ! Node: Appending Kills137233 ! Node: Earlier Kills139448 ! Node: Accumulating Text142237 ! Node: Rectangles145288 ! Node: Registers149685 ! Node: RegPos150736 ! Node: RegText151615 ! Node: RegRect152602 ! Node: RegConfig153341 ! Node: RegFiles154030 ! Node: Display154666 ! Node: Scrolling156131 ! Node: Horizontal Scrolling159961 ! Node: Selective Display161405 ! Node: Optional Display162579 ! Node: Display Vars164710 ! Node: Search168287 ! Node: Incremental Search169473 ! Node: Nonincremental Search176925 ! Node: Word Search178382 ! Node: Regexp Search180000 ! Node: Regexps181939 ! Node: Search Case192913 ! Node: Replace193919 ! Node: Unconditional Replace195031 ! Node: Regexp Replace196160 ! Node: Replacement and Case197078 ! Node: Query Replace198027 ! Node: Other Repeating Search201846 ! Node: Fixit203063 ! Node: Kill Errors203651 ! Node: Transpose204918 ! Node: Fixing Case207427 ! Node: Spelling208084 ! Node: Files211084 ! Node: File Names212300 ! Node: Visiting216361 ! Node: Saving222089 ! Node: Backup228191 ! Node: Backup Names229581 ! Node: Backup Deletion231552 ! Node: Backup Copying232727 ! Node: Interlocking234457 ! Node: Reverting238377 ! Node: Auto Save239559 ! Node: Auto Save Files240528 ! Node: Auto Save Control242643 ! Node: Recover244508 ! Node: File Aliases245374 ! Node: Version Control246526 ! Node: Concepts of VC247606 ! Node: Editing with VC249067 ! Node: Variables for Check-in/out253623 ! Node: Log Entries255294 ! Node: Change Logs and VC256467 ! Node: Comparing Versions259732 ! Node: VC Status261120 ! Node: Renaming and VC262816 ! Node: Snapshots263491 ! Node: Making Snapshots263983 ! Node: Snapshot Caveats265242 ! Node: Version Headers266908 ! Node: ListDir269364 ! Node: Comparing Files270866 ! Node: Misc File Ops272483 ! Node: Buffers275467 ! Node: Select Buffer277741 ! Node: List Buffers279024 ! Node: Misc Buffer280500 ! Node: Kill Buffer283064 ! Node: Several Buffers284520 ! Node: Windows288781 ! Node: Basic Window289473 ! Node: Split Window291313 ! Node: Other Window293278 ! Node: Pop Up Window295039 ! Node: Change Window296506 ! Node: Frames298380 ! Node: Mouse Commands299271 ! Node: Creating Frames300640 ! Node: Frame Parameters301993 ! Node: Scroll Bars303387 ! Node: Menu Bars304855 ! Node: Faces305332 ! Node: Misc X307774 ! Node: Major Modes308355 ! Node: Choosing Modes310623 ! Node: Indentation313276 ! Node: Indentation Commands315457 ! Node: Tab Stops318390 ! Node: Just Spaces320298 ! Node: Text321103 ! Node: Words323116 ! Node: Sentences326060 ! Node: Paragraphs328239 ! Node: Pages330540 ! Node: Filling333130 ! Node: Auto Fill333697 ! Node: Fill Commands335842 ! Node: Fill Prefix338473 ! Node: Case341886 ! Node: Text Mode344190 ! Node: Outline Mode346275 ! Node: Outline Format347891 ! Node: Outline Motion350671 ! Node: Outline Visibility352237 ! Node: TeX Mode355198 ! Node: TeX Editing356670 ! Node: LaTeX Editing359998 ! Node: TeX Print361436 ! Node: TeX Distrib367649 ! Node: Nroff Mode368761 ! Node: Programs370305 ! Node: Program Modes372995 ! Node: Lists375209 ! Node: List Commands377172 ! Node: Defuns380684 ! Node: Program Indent383341 ! Node: Basic Indent383974 ! Node: Multi-line Indent385971 ! Node: Lisp Indent387606 ! Node: C Indent390992 ! Node: Matching396242 ! Node: Comments397791 ! Node: Balanced Editing405174 ! Node: Symbol Completion406185 ! Node: Documentation407570 ! Node: Change Log409032 ! Node: Tags411410 ! Node: Tag Syntax412747 ! Node: Create Tag Table413928 ! Node: Select Tag Table415521 ! Node: Find Tag417049 ! Node: Tags Search420023 ! Node: Tags Stepping422888 ! Node: List Tags423430 ! Node: Emerge424585 ! Node: Overview of Emerge425527 ! Node: Submodes of Emerge428628 ! Node: State of Difference430308 ! Node: Merge Commands432822 ! Node: Exiting Emerge435379 ! Node: Combining in Emerge436227 ! Node: Fine Points of Emerge437086 ! Node: C Mode438031 ! Node: Fortran439971 ! Node: Fortran Motion441263 ! Node: Fortran Indent442050 ! Node: ForIndent Commands442793 ! Node: ForIndent Cont444244 ! Node: ForIndent Num446582 ! Node: ForIndent Conv447551 ! Node: ForIndent Vars448598 ! Node: Fortran Comments450415 ! Node: Fortran Autofill454319 ! Node: Fortran Columns455929 ! Node: Fortran Abbrev457455 ! Node: Asm Mode458361 ! Node: Building458903 ! Node: Compilation459869 ! Node: Debuggers465050 ! Node: Starting GUD465673 ! Node: Debugger Operation467161 ! Node: Commands of GUD468447 ! Node: GUD Customization470916 ! Node: Executing Lisp472667 ! Node: Lisp Libraries474595 ! Node: Lisp Eval478236 ! Node: Lisp Interaction481861 ! Node: External Lisp483030 ! Node: Abbrevs485206 ! Node: Defining Abbrevs487415 ! Node: Expanding Abbrevs489847 ! Node: Editing Abbrevs492877 ! Node: Saving Abbrevs494763 ! Node: Dynamic Abbrevs496752 ! Node: Picture498048 ! Node: Basic Picture500413 ! Node: Insert in Picture502871 ! Node: Tabs in Picture504287 ! Node: Rectangles in Picture505790 ! Node: Sending Mail507527 ! Node: Mail Format509876 ! Node: Mail Headers511217 ! Node: Mail Aliases514742 ! Node: Mail Mode516674 ! Node: Distracting NSA521450 ! Node: Rmail522218 ! Node: Rmail Scrolling525486 ! Node: Rmail Motion526462 ! Node: Rmail Deletion529611 ! Node: Rmail Inbox532358 ! Node: Rmail Files534629 ! Node: Rmail Output537105 ! Node: Rmail Labels540226 ! Node: Rmail Reply543991 ! Node: Rmail Summary548317 ! Node: Rmail Make Summary549300 ! Node: Rmail Summary Edit551067 ! Node: Rmail Editing553615 ! Node: Rmail Digest555846 ! Node: Out of Rmail556942 ! Node: Rmail Rot13557426 ! Node: Dired558045 ! Node: Dired Enter559426 ! Node: Dired Commands560340 ! Node: Dired Deletion561357 ! Node: Dired Visiting565356 ! Node: Marks vs. Flags566622 ! Node: Operating on Files569279 ! Node: Shell Commands in Dired572603 ! Node: Transforming File Names574287 ! Node: Comparison in Dired576704 ! Node: Subdirectories in Dired577523 ! Node: Subdirectory Motion579138 ! Node: Hiding Subdirectories580074 ! Node: Dired Updating581285 ! Node: Dired and Find583102 ! Node: Calendar/Diary584321 ! Node: Calendar Motion585681 ! Node: Calendar Unit Motion586439 ! Node: Move to Beginning or End588731 ! Node: Specified Dates589746 ! Node: Scroll Calendar590630 ! Node: Counting Days592647 ! Node: General Calendar593079 ! Node: Holidays594038 ! Node: Sunrise/Sunset596355 ! Node: Lunar Phases598959 ! Node: Other Calendars600345 ! Node: Calendar Systems601520 ! Node: To Other Calendar603372 ! Node: From Other Calendar604502 ! Node: Mayan Calendar606319 ! Node: Diary609475 ! Node: Diary Commands610981 ! Node: Format of Diary File613721 ! Node: Date Formats616494 ! Node: Adding to Diary619038 ! Node: Special Diary Entries620666 ! Node: Appointments624949 ! Node: Daylight Savings626891 ! Node: GNUS628447 ! Node: Buffers of GNUS629178 ! Node: GNUS Startup630189 ! Node: Summary of GNUS631163 ! Node: Sorting634643 ! Node: Shell639615 ! Node: Single Shell640606 ! Node: Interactive Shell642262 ! Node: Shell Mode645410 ! Node: Shell History648338 ! Node: Narrowing650110 ! Node: Hardcopy652396 ! Node: Two-Column653524 ! Node: Editing Binary Files656708 ! Node: Emacs Server658041 ! Node: Recursive Edit660730 ! Node: Dissociated Press664054 ! Node: Amusements666750 ! Node: Emulation667678 ! Node: Customization670319 ! Node: Minor Modes672013 ! Node: Variables674992 ! Node: Examining677112 ! Node: Edit Options678679 ! Node: Hooks680331 ! Node: Locals682447 ! Node: File Variables685854 ! Node: Keyboard Macros690477 ! Node: Basic Kbd Macro692658 ! Node: Save Kbd Macro695350 ! Node: Kbd Macro Query697024 ! Node: Key Bindings698982 ! Node: Keymaps700176 ! Node: Prefix Keymaps703583 ! Node: Local Keymaps704868 ! Node: Minibuffer Maps707033 ! Node: Rebinding707651 ! Node: Init Rebinding710719 ! Node: Function Keys712205 ! Node: Mouse Buttons714889 ! Node: Disabling717370 ! Node: Keyboard Translations719109 ! Node: Syntax720616 ! Node: Init File721746 ! Node: Init Syntax723176 ! Node: Init Examples725270 ! Node: Terminal Init729199 ! Node: Find Init730874 ! Node: Quitting731734 ! Node: Lossage735292 ! Node: DEL Gets Help735989 ! Node: Stuck Recursive736357 ! Node: Screen Garbled737063 ! Node: Text Garbled738182 ! Node: Unasked-for Search738821 ! Node: Emergency Escape740305 ! Node: Total Frustration742056 ! Node: Bugs742675 ! Node: Bug Criteria743376 ! Node: Understanding Bug Reporting745970 ! Node: Checklist748467 ! Node: Sending Patches758650 ! Node: Service763521 ! Node: Command Arguments764117 ! Node: Ordinary Arguments766049 ! Node: Initial Options766801 ! Node: Command Example768733 ! Node: Resume Arguments769583 ! Node: Display X771234 ! Node: Font X773615 ! Node: Colors X774945 ! Node: Window Size X776165 ! Node: Borders X778549 ! Node: Icons X779480 ! Node: Resources X780440 ! Node: Manifesto784024 ! Node: Glossary810034 ! Node: Key Index844363 ! Node: Command Index871777 ! Node: Variable Index912891 ! Node: Concept Index925026  End Tag Table diff -rcP emacs-19.7/info/emacs-1 emacs-19.8/info/emacs-1 *** emacs-19.7/info/emacs-1 Fri May 21 14:00:58 1993 --- emacs-19.8/info/emacs-1 Tue May 25 11:00:22 1993 *************** *** 8,14 **** Emacs is the extensible, customizable, self-documenting real-time display editor. This Info file describes how to edit with Emacs and ! some of how to customize it, but not how to extend it. * Menu: --- 8,15 ---- Emacs is the extensible, customizable, self-documenting real-time display editor. This Info file describes how to edit with Emacs and ! some of how to customize it, but not how to extend it. It corresponds ! to GNU Emacs version 19.8. * Menu: diff -rcP emacs-19.7/info/emacs-15 emacs-19.8/info/emacs-15 *** emacs-19.7/info/emacs-15 Fri May 21 14:01:04 1993 --- emacs-19.8/info/emacs-15 Tue May 25 11:00:28 1993 *************** *** 21,31 **** Gosling Emacs To turn on emulation of Gosling Emacs (alias Unipress Emacs), type ! `M-x set-gosmacs-bindings'. This redefines many keys, mostly on ! the `C-x' and `ESC' prefixes, to work as they do in Gosmacs. `M-x ! set-gnu-bindings' returns to normal GNU Emacs by rebinding the ! same keys to the definitions they had before you used `M-x ! set-gosmacs-bindings'. vi (Berkeley Unix editor) Turn on vi emulation with `M-x vi-mode'. This is a major mode --- 21,31 ---- Gosling Emacs To turn on emulation of Gosling Emacs (alias Unipress Emacs), type ! the command `M-x set-gosmacs-bindings'. This redefines many keys, ! mostly on the `C-x' and `ESC' prefixes, to work as they do in ! Gosmacs. `M-x set-gnu-bindings' returns to normal GNU Emacs by ! rebinding the same keys to the definitions they had before you used ! `M-x set-gosmacs-bindings'. vi (Berkeley Unix editor) Turn on vi emulation with `M-x vi-mode'. This is a major mode diff -rcP emacs-19.7/info/emacs-16 emacs-19.8/info/emacs-16 *** emacs-19.7/info/emacs-16 Fri May 21 14:01:04 1993 --- emacs-19.8/info/emacs-16 Tue May 25 11:00:28 1993 *************** *** 545,555 **** Typically there are particular terminal types with which you must use flow control. You can conveniently ask for flow control on those ! terminal types only, using `evade-flow-control-on'. For example, if you find you must use flow control on VT-100 and H19 terminals, put the following in your `.emacs' file: ! (evade-flow-control-on "vt100" "h19") When flow control is enabled, you must type `C-\' to get the effect of a `C-s', and type `C-^' to get the effect of a `C-q'. (These --- 545,555 ---- Typically there are particular terminal types with which you must use flow control. You can conveniently ask for flow control on those ! terminal types only, using `enable-flow-control-on'. For example, if you find you must use flow control on VT-100 and H19 terminals, put the following in your `.emacs' file: ! (enable-flow-control-on "vt100" "h19") When flow control is enabled, you must type `C-\' to get the effect of a `C-s', and type `C-^' to get the effect of a `C-q'. (These *************** *** 1120,1125 **** --- 1120,1126 ---- * Colors X:: Choosing colors, under X. * Window Size X:: Start-up window size, under X. * Borders X:: Internal and external borders, under X. + * Icons X:: Choosing what sort of icon to use, under X. * Resources X:: Advanced use of classes and resources, under X.  *************** *** 1145,1151 **** `-funcall FUNCTION' Call Lisp function FUNCTION with no arguments. - `-i FILE' `-insert FILE' Insert the contents of FILE into the current buffer. This is like what `M-x insert-buffer' does; *Note Misc File Ops::. --- 1146,1151 ---- diff -rcP emacs-19.7/info/emacs-17 emacs-19.8/info/emacs-17 *** emacs-19.7/info/emacs-17 Fri May 21 14:01:05 1993 --- emacs-19.8/info/emacs-17 Tue May 25 11:00:29 1993 *************** *** 297,303 **** `-geometry' option.  ! File: emacs, Node: Borders X, Next: Resources X, Prev: Window Size X, Up: Command Arguments Internal and External Borders ============================= --- 297,303 ---- `-geometry' option.  ! File: emacs, Node: Borders X, Next: Icons X, Prev: Window Size X, Up: Command Arguments Internal and External Borders ============================= *************** *** 319,326 **** The default width of the external border is 2.  ! File: emacs, Node: Resources X, Prev: Borders X, Up: Command Arguments X Resources =========== --- 319,349 ---- The default width of the external border is 2.  ! File: emacs, Node: Icons X, Next: Resources X, Prev: Borders X, Up: Command Arguments + Icons + ===== + + Most window managers allow the user to "iconify" a frame, removing + it from sight, and leaving a small, distinctive "icon" window in its + place. Clicking on the icon window will make the original frame visible + again. If a user has many clients running at once, they can avoid + cluttering up their screen by iconifying all but the clients currently + in use. + + The `-i' and `-itype' option tells Emacs to use an icon window + containing a picture of the GNU gnu. If omitted, Emacs lets the window + manager choose what sort of icon to use -- usually just a small + rectangle containing the frame's title. + + The `-iconic' option tells Emacs to begin running as an icon, rather + than opening a frame right away. In this situation, the icon window + provides only indication that Emacs has started; the usual text frame + doesn't appear until you de-iconify it. + +  + File: emacs, Node: Resources X, Prev: Icons X, Up: Command Arguments + X Resources =========== *************** *** 400,411 **** `font' (class `Font') Font name for text. - - `PaneFont' (class `Font') - Font name for menu pane titles. - - `SelectionFont' (class `Font') - Font name for menu items. `foreground' (class `Foreground') Color name for text. --- 423,428 ---- diff -rcP emacs-19.7/info/emacs-20 emacs-19.8/info/emacs-20 *** emacs-19.7/info/emacs-20 Fri May 21 14:01:06 1993 --- emacs-19.8/info/emacs-20 Tue May 25 11:00:30 1993 *************** *** 250,255 **** --- 250,257 ---- * emerge-skip-prefers-mode: Submodes of Emerge. * enable-command: Disabling. * enable-flow-control: Unasked-for Search. + * enable-flow-control-on: Unasked-for Search. + * enable-flow-control-on: Unasked-for Search. * enable-local-eval: File Variables. * enable-local-variables: File Variables. * end-kbd-macro: Basic Kbd Macro. *************** *** 260,267 **** * enlarge-window: Change Window. * enlarge-window-horizontally: Change Window. * european-calendar: Date Formats. - * evade-flow-control-on: Unasked-for Search. - * evade-flow-control-on: Unasked-for Search. * eval-current-buffer: Lisp Eval. * eval-defun: Lisp Eval. * eval-expression: Lisp Eval. --- 262,267 ---- *************** *** 661,666 **** --- 661,667 ---- * split-window-horizontally: Split Window. * split-window-vertically: Split Window. * spook: Distracting NSA. + * standard-display-european: Optional Display. * start-kbd-macro: Basic Kbd Macro. * string-rectangle: Rectangles. * substitute-key-definition: Init Rebinding. diff -rcP emacs-19.7/info/emacs-21 emacs-19.8/info/emacs-21 *** emacs-19.7/info/emacs-21 Fri May 21 14:01:06 1993 --- emacs-19.8/info/emacs-21 Tue May 25 11:00:30 1993 *************** *** 255,260 **** --- 255,261 ---- * Abbrev mode: Abbrevs. * abbrevs: Abbrevs. * aborting recursive edit: Quitting. + * accented characters: Optional Display. * accessible portion: Narrowing. * againformation: Dissociated Press. * alarm clock: Appointments. *************** *** 278,285 **** * backup file: Backup. * batch mode: Initial Options. * binding: Commands. - * blank lines: Blank Lines. * blank lines: Comments. * body lines (Outline mode): Outline Format. * bold font: Faces. * borders (X Windows): Borders X. --- 279,286 ---- * backup file: Backup. * batch mode: Initial Options. * binding: Commands. * blank lines: Comments. + * blank lines: Blank Lines. * body lines (Outline mode): Outline Format. * bold font: Faces. * borders (X Windows): Borders X. *************** *** 297,304 **** * C-: User Input. * C-g: Quitting. * calendar: Calendar/Diary. - * case conversion: Fixing Case. * case conversion: Case. * centering: Fill Commands. * change buffers: Select Buffer. * change log: Change Log. --- 298,305 ---- * C-: User Input. * C-g: Quitting. * calendar: Calendar/Diary. * case conversion: Case. + * case conversion: Fixing Case. * centering: Fill Commands. * change buffers: Select Buffer. * change log: Change Log. *************** *** 338,345 **** * current buffer: Buffers. * cursor: Point. * customization: Commands. - * customization: Lisp Indent. * customization: Customization. * cutting: Killing. * cutting and X: Mouse Commands. * day of year: General Calendar. --- 339,346 ---- * current buffer: Buffers. * cursor: Point. * customization: Commands. * customization: Customization. + * customization: Lisp Indent. * cutting: Killing. * cutting and X: Mouse Commands. * day of year: General Calendar. *************** *** 379,384 **** --- 380,386 ---- * environment: Single Shell. * error log: Compilation. * ESC replacing META key: User Input. + * European character sets: Optional Display. * exiting: Exiting. * exiting recursive edit: Recursive Edit. * expanding subdirectories in Dired: Subdirectories in Dired. *************** *** 390,398 **** * file directory: ListDir. * file names: File Names. * file truenames: File Aliases. - * files: Basic Files. * files: Visiting. * files: Files. * fill prefix: Fill Prefix. * filling: Filling. * flagging files (in Dired): Dired Deletion. --- 392,400 ---- * file directory: ListDir. * file names: File Names. * file truenames: File Aliases. * files: Visiting. * files: Files. + * files: Basic Files. * fill prefix: Fill Prefix. * filling: Filling. * flagging files (in Dired): Dired Deletion. *************** *** 430,435 **** --- 432,438 ---- * hook: Hooks. * horizontal scrolling: Horizontal Scrolling. * Icon mode: Program Modes. + * icons (X Windows): Icons X. * ignoriginal: Dissociated Press. * in-situ subdirectory (Dired): Subdirectories in Dired. * inbox file: Rmail Inbox. *************** *** 449,454 **** --- 452,458 ---- * invisible lines: Outline Mode. * Islamic calendar: Calendar Systems. * ISO commercial calendar: Calendar Systems. + * ISO Latin-1 character sets: Optional Display. * italic font: Faces. * Julian calendar: Calendar Systems. * Julian day numbers: Calendar Systems. *************** *** 460,467 **** * keyboard input: User Input. * keyboard macro: Keyboard Macros. * keyboard translations: Keyboard Translations. - * keymap: Keymaps. * keymap: Commands. * kill ring: Yanking. * killing: Killing. * killing Emacs: Exiting. --- 464,471 ---- * keyboard input: User Input. * keyboard macro: Keyboard Macros. * keyboard translations: Keyboard Translations. * keymap: Commands. + * keymap: Keymaps. * kill ring: Yanking. * killing: Killing. * killing Emacs: Exiting. *************** *** 515,522 **** * minibuffer keymaps: Minibuffer Maps. * minor mode keymap: Local Keymaps. * minor modes: Minor Modes. - * mistakes, correcting: Fixit. * mistakes, correcting: Undo. * mode hook: Program Modes. * mode line: Mode Line. * mode, Abbrev: Abbrevs. --- 519,526 ---- * minibuffer keymaps: Minibuffer Maps. * minor mode keymap: Local Keymaps. * minor modes: Minor Modes. * mistakes, correcting: Undo. + * mistakes, correcting: Fixit. * mode hook: Program Modes. * mode line: Mode Line. * mode, Abbrev: Abbrevs. *************** *** 656,663 **** * touch: Keymaps. * tower of Hanoi: Amusements. * Transient Mark mode: Setting Mark. - * transposition: Transpose. * transposition: List Commands. * truenames of files: File Aliases. * truncation: Continuation Lines. * two-column editing: Two-Column. --- 660,667 ---- * touch: Keymaps. * tower of Hanoi: Amusements. * Transient Mark mode: Setting Mark. * transposition: List Commands. + * transposition: Transpose. * truenames of files: File Aliases. * truncation: Continuation Lines. * two-column editing: Two-Column. *************** *** 678,685 **** * widening: Narrowing. * windows: Windows. * word search: Word Search. - * words: Case. * words: Fixing Case. * words: Words. * work file: Concepts of VC. * wrapping: Continuation Lines. --- 682,689 ---- * widening: Narrowing. * windows: Windows. * word search: Word Search. * words: Fixing Case. + * words: Case. * words: Words. * work file: Concepts of VC. * wrapping: Continuation Lines. diff -rcP emacs-19.7/info/emacs-3 emacs-19.8/info/emacs-3 *** emacs-19.7/info/emacs-3 Fri May 21 14:00:59 1993 --- emacs-19.8/info/emacs-3 Tue May 25 11:00:23 1993 *************** *** 550,556 **** `help' Support for on-line help systems. ! `i14n' Internationalization and alternate character-set support. `internal' --- 550,556 ---- `help' Support for on-line help systems. ! `i18n' Internationalization and alternate character-set support. `internal' *************** *** 587,593 **** Programming tools. `unix' ! Front-ends/assistants for, or emulators of, UNIX features. `vms' Support code for VMS. --- 587,593 ---- Programming tools. `unix' ! Front-ends/assistants for, or emulators of, Unix features. `vms' Support code for VMS. diff -rcP emacs-19.7/info/emacs-4 emacs-19.8/info/emacs-4 *** emacs-19.7/info/emacs-4 Fri May 21 14:00:59 1993 --- emacs-19.8/info/emacs-4 Tue May 25 11:00:23 1993 *************** *** 516,521 **** --- 516,531 ---- Optional Display Features ========================= + Emacs can display accented characters, assuming the font in use + supports them. The `M-x standard-display-european' command toggles + European character display. When enabled, Emacs displays characters + according to the ISO 8859 Latin-1 encoding for European languages; when + disabled, Emacs uses octal notation for all characters not specified by + the ordinary ASCII standard. + + With a prefix argument, `M-x standard-display-european' enables + European character display iff the argument is positive. + To add the current line number of point to the mode line, enable Line Number mode with the command `M-x line-number-mode'. The line number appears before POS, with the letter `L' to indicate what it is. *Note diff -rcP emacs-19.7/info/vip emacs-19.8/info/vip *** emacs-19.7/info/vip Sat Feb 13 03:13:11 1988 --- emacs-19.8/info/vip Tue May 25 03:20:22 1993 *************** *** 1,1936 **** ! Info file vip, produced by texinfo-format-buffer -*-Text-*- ! from file vip.texinfo - - Distribution ************ ! Copyright (C) 1987 Masahiko Sato. ! ! Permission is granted to make and distribute verbatim copies of ! this manual provided the copyright notice and this permission notice ! are preserved on all copies. ! ! Permission is granted to copy and distribute modified versions of this ! manual under the conditions for verbatim copying, provided that the entire ! resulting derived work is distributed under the terms of a permission ! notice identical to this one. ! ! Permission is granted to copy and distribute translations of this manual ! into another language, under the same conditions as for modified versions. ! ! !  ! File: vip Node: Top, Up: (DIR), Next: Survey ! ! VIP ! *** ! ! VIP is a Vi emulating package written in Emacs Lisp. VIP implements most ! Vi commands including Ex commands. It is therefore hoped that this package ! will enable you to do Vi style editing under the powerful GNU Emacs ! environment. This info file describes the usage of VIP assuming that you ! are fairly accustomed to Vi but not so much with Emacs. Also we will ! concentrate mainly on differences from Vi, especially features unique to ! VIP. ! ! It is recommended that you read nodes on survey and on customization before ! you start using VIP. Other nodes may be visited as needed. ! ! Comments and bug reports are welcome. Please send messages to ! `ms@Sail.Stanford.Edu' if you are outside of Japan and to ! `masahiko@sato.riec.tohoku.junet' if you are in Japan. ! ! ! * Menu: ! ! * Survey:: A survey of VIP. ! * Vi Commands:: Details of Vi commands. ! * Ex Commands:: Details of Ex commands. ! * Customization:: How to customize VIP. ! !  ! File: vip Node: Survey, Prev: Top, Up: Top, Next: Basic Concepts ! ! A Survey of VIP ! *************** ! ! In this chapter we describe basics of VIP with emphasis on the features not ! found in Vi and on how to use VIP under GNU Emacs. ! ! * Menu: ! ! * Basic Concepts:: Basic concepts in Emacs. ! * Loading VIP:: How to load VIP automatically. ! * Modes in VIP:: VIP has three modes, which are orthogonal to modes ! in Emacs. ! * Differences from Vi:: Differences of VIP from Vi is explained. ! !  ! File: vip Node: Basic Concepts, Prev: Survey, Up: Survey, Next: Loading VIP ! ! Basic Concepts ! ============== ! ! We begin by explaining some basic concepts of Emacs. These concepts are ! explained in more detail in the GNU Emacs Manual. ! ! ! Conceptually, a "buffer" is just a string of ASCII characters and two ! special characters PNT ("point") and MRK ("mark") such that the character ! PNT occurs exactly once and MRK occurs at most once. The "text" of a ! buffer is obtained by deleting the occurrences of PNT and MRK. If, in a ! buffer, there is a character following PNT then we say that point is ! "looking at" the character; otherwise we say that point is "at the end of ! buffer". PNT and MRK are used to indicate positions in a buffer and they ! are not part of the text of the buffer. If a buffer contains a MRK then ! the text between MRK and PNT is called the "region" of the buffer. ! ! ! Emacs provides (multiple) "windows" on the screen, and you can see the ! content of a buffer through the window associated with the buffer. The ! cursor of the screen is always positioned on the character after PNT. ! ! ! ! A "keymap" is a table that records the bindings between characters and ! command functions. There is the "global keymap" common to all the buffers. ! Each buffer has its "local keymap" that determines the "mode" of the ! buffer. Local keymap overrides global keymap, so that if a function is ! bound to some key in the local keymap then that function will be executed ! when you type the key. If no function is bound to a key in the local map, ! however, the function bound to the key in the global map becomes in effect. ! !  ! File: vip Node: Loading VIP, Prev: Basic Concepts, Up: Survey, Next: Modes in VIP ! ! Loading VIP ! =========== ! ! The recommended way to load VIP automatically is to include the line: ! (load "vip") ! in your `.emacs' file. The `.emacs' file is placed in your home ! directly and it will be executed every time you invoke Emacs. If you wish ! to be in vi mode whenver Emacs starts up, you can include the following ! line in your `.emacs' file instead of the above line: ! (setq term-setup-hook 'vip-mode) ! (*Note Vi Mode::, for the explanation of vi mode.) ! ! Even if your `.emacs' file does not contain any of the above lines, ! you can load VIP and enter vi mode by typing the following from within ! Emacs. ! M-x vip-mode ! !  ! File: vip Node: Modes in VIP, Prev: Loading VIP, Up: Survey, Next: Emacs Mode ! ! Modes in VIP ! ============ ! ! ! Loading VIP has the effect of globally binding `C-z' (`Control-z') to the ! function `vip-change-mode-to-vi'. The default binding of `C-z' in GNU Emacs ! is `suspend-emacs', but, you can also call `suspend-emacs' by typing `C-x ! C-z'. Other than this, all the key bindings of Emacs remain the same after ! loading VIP. ! ! ! Now, if you hit `C-z', the function `vip-change-mode-to-vi' will be called ! and you will be in "vi mode". (Some major modes may locally bind `C-z' to ! some special functions. In such cases, you can call ! `vip-change-mode-to-vi' by `execute-extended-command' which is invoked by ! `M-x'. Here `M-x' means `Meta-x', and if your terminal does not have a ! META key you can enter it by typing `ESC x'. The same effect can also be ! achieve by typing `M-x vip-mode'.) ! ! ! You can observe the change of mode by looking at the "mode line". For ! instance, if the mode line is: ! -----Emacs: *scratch* (Lisp Interaction)----All------------ ! then it will change to: ! -----Vi: *scratch* (Lisp Interaction)----All------------ ! Thus the word `Emacs' in the mode line will change to `Vi'. ! ! ! You can go back to the original "emacs mode" by typing `C-z' in vi mode. ! Thus `C-z' toggles between these two modes. ! ! Note that modes in VIP exist orthogonally to modes in Emacs. This means ! that you can be in vi mode and at the same time, say, shell mode. ! ! Vi mode corresponds to Vi's command mode. From vi mode you can enter ! "insert mode" (which corresponds to Vi's insert mode) by usual Vi command ! keys like `i', `a', `o' ... etc. ! ! In insert mode, the mode line will look like this: ! -----Insert *scratch* (Lisp Interaction)----All------------ ! You can exit from insert mode by hitting ESC key as you do in Vi. ! ! That VIP has three modes may seem very complicated, but in fact it is not ! so. VIP is implemented so that you can do most editing remaining only ! in the two modes for Vi (that is vi mode and insert mode). ! ! ! The figure below shows the transition of three modes in VIP. ! ! ! === C-z ==> == i,o ... ==> ! emacs mode vi mode insert mode ! <== X-z === <=== ESC ==== ! ! * Menu: ! ! * Emacs Mode:: This is the mode you should know better. ! * Vi Mode:: Vi commands are executed in this mode. ! * Insert Mode:: You can enter text, and also can do editing if you ! know enough Emacs commands. ! !  ! File: vip Node: Emacs Mode, Prev: Modes in VIP, Up: Modes in VIP, Next: Vi Mode ! ! Emacs Mode ! ---------- ! ! ! You will be in this mode just after you loaded VIP. You can do all normal ! Emacs editing in this mode. Note that the key `C-z' is globally bound to ! `vip-change-mode-to-vi'. So, if you type `C-z' in this mode then you will ! be in vi mode. ! !  ! File: vip Node: Vi Mode, Prev: Emacs Mode, Up: Modes in VIP, Next: Insert Mode ! ! Vi Mode ! ------- ! ! This mode corresponds to Vi's command mode. Most Vi commands work as they ! do in Vi. You can go back to emacs mode by typing `C-z'. You can ! enter insert mode, just as in Vi, by typing `i', `a' etc. ! !  ! File: vip Node: Insert Mode, Prev: Vi Mode, Up: Modes in VIP, Next: Differences from Vi ! ! Insert Mode ! ----------- ! ! The key bindings in this mode is the same as in the emacs mode except for ! the following 4 keys. So, you can move around in the buffer and change ! its content while you are in insert mode. ! ! `ESC' ! This key will take you back to vi mode. ! `C-h' ! Delete previous character. ! `C-w' ! Delete previous word. ! `C-z' ! Typing this key has the same effect as typing ESC in emacs mode. ! Thus typing `C-z x' in insert mode will have the same effect as typing ! `ESC x' in emacs mode. ! !  ! File: vip Node: Differences from Vi, Prev: Insert Mode, Up: Survey, Next: Undoing ! ! Differences from Vi ! =================== ! ! The major differences from Vi are explained below. ! ! * Menu: ! ! * Undoing:: You can undo more in VIP. ! * Changing:: Commands for changing the text. ! * Searching:: Search commands. ! * z Command:: You can now use zH, zM and zL as well as z- etc. ! * Counts:: Some Vi commands which do not accept a count now ! accept one. ! * Marking:: You can now mark the current point, beginning of ! the buffer etc. ! * Region Commands:: You can now give a region as an argument for delete ! commands etc. ! * New Commands:: Some new commands not available in Vi are added. ! * New Bindings:: Bindings of some keys are changed for the ! convenience of editing under Emacs. ! * Window Commands:: Commands for moving among windows etc. ! * Buffer Commands:: Commands for selecting buffers etc. ! * File Commands:: Commands for visiting files etc. ! * Misc Commands:: Other useful commands. ! !  ! File: vip Node: Undoing, Prev: Differences from Vi, Up: Differences from Vi, Next: Changing ! ! Undoing ! ------- ! ! ! You can repeat undoing by the `.' key. So, `u' will undo a single change, ! while `u . . .', for instance, will undo 4 previous changes. Undo is ! undoable as in Vi. So the content of the buffer will be the same before ! and after `u u'. ! !  ! File: vip Node: Changing, Prev: Undoing, Up: Differences from Vi, Next: Searching ! ! Changing ! -------- ! ! Some commands which change a small number of characters are executed ! slightly differently. Thus, if point is at the beginning of a word `foo' ! and you wished to change it to `bar' by typing `c w', then VIP will prompt ! you for a new word in the minibuffer by the prompt `foo => '. You can then ! enter `bar' followed by RET or ESC to complete the command. Before you ! enter RET or ESC you can abort the command by typing `C-g'. In general, ! you can abort a partially formed command by typing `C-g'. ! !  ! File: vip Node: Searching, Prev: Changing, Up: Differences from Vi, Next: z Command ! ! Searching ! --------- ! ! ! As in Vi, searching is done by `/' and `?'. The string will be searched ! literally by default. To invoke a regular expression search, first execute ! the search command `/' (or `?') with empty search string. (I.e, type `/' ! followed by RET.) A search for empty string will toggle the search mode ! between vanilla search and regular expression search. You cannot give an ! offset to the search string. (It is a limitation.) By default, search ! will wrap around the buffer as in Vi. You can change this by rebinding the ! variable `vip-search-wrap-around'. *Note Customization::, for how to do ! this. ! !  ! File: vip Node: z Command, Prev: Searching, Up: Differences from Vi, Next: Counts ! ! z Command ! --------- ! ! ! For those of you who cannot remember which of `z' followed by RET, `.' and ! `-' do what. You can also use `z' followed by `H', `M' and `L' to place ! the current line in the Home (Middle, and Last) line of the window. ! !  ! File: vip Node: Counts, Prev: z Command, Up: Differences from Vi, Next: Marking ! ! Counts ! ------ ! ! Some Vi commands which do not accept a count now accept one ! ! `p' ! `P' ! Given counts, text will be yanked (in Vi's sense) that many times. Thus ! `3 p' is the same as `p p p'. ! `o' ! `O' ! Given counts, that many copies of text will be inserted. Thus ! `o a b c ESC' will insert 3 lines of `abc' below the current ! line. ! `/' ! `?' ! Given a count N, N-th occurrence will be searched. ! !  ! File: vip Node: Marking, Prev: Counts, Up: Differences from Vi, Next: Region Commands ! ! Marking ! ------- ! ! Typing an `m' followed by a lower case character CH marks the ! point to the register named CH as in Vi. In addition to these, we ! have following key bindings for marking. ! ! ! `m <' ! Set mark at the beginning of buffer. ! `m >' ! Set mark at the end of buffer. ! `m .' ! Set mark at point (and push old mark on mark ring). ! `m ,' ! Jump to mark (and pop mark off the mark ring). ! !  ! File: vip Node: Region Commands, Prev: Marking, Up: Differences from Vi, Next: New Commands ! ! Region Commands ! --------------- ! ! ! Vi operators like `d', `c' etc. are usually used in combination with motion ! commands. It is now possible to use current region as the argument to ! these operators. (A "region" is a part of buffer delimited by point and ! mark.) The key `r' is used for this purpose. Thus `d r' will delete the ! current region. If `R' is used instead of `r' the region will first be ! enlarged so that it will become the smallest region containing the original ! region and consisting of whole lines. Thus `m . d R' will have the same ! effect as `d d'. ! !  ! File: vip Node: New Commands, Prev: Region Commands, Up: Differences from Vi, Next: New Bindings ! ! Some New Commands ! ----------------- ! ! Note that the keys below (except for `R') are not used in Vi. ! ! `C-a' ! Move point to the beginning of line. ! `C-n' ! If you have two or more windows in the screen, this key will move point to ! the next window. ! `C-o' ! Insert a newline and leave point before it, and then enter insert mode. ! `C-r' ! Backward incremental search. ! `C-s' ! Forward incremental search. ! `C-c' ! `C-x' ! `ESC' ! These keys will exit from vi mode and return to emacs mode temporarily. If ! you hit one of these keys, Emacs will be in emacs mode and will believe ! that you hit that key in emacs mode. For example, if you hit `C-x' ! followed by `2', then the current window will be split into 2 and you ! will be in vi mode again. ! `\' ! Escape to emacs mode. Hitting `\' will take you to emacs mode, and ! you can execute a single Emacs command. After executing the Emacs ! command you will be in vi mode again. You can give a count before ! typing `\'. Thus `5 \ *', as well as `\ C-u 5 *', will insert `*****' ! before point. Similarly `1 0 \ C-p' will move the point 10 lines ! above the current line. ! `K' ! Kill current buffer if it is not modified. Useful when you selected a ! buffer which you did not want. ! `Q' ! `R' ! `Q' is for query replace and `R' is for replace. By default, ! string to be replaced are treated literally. If you wish to do a regular ! expression replace, first do replace with empty string as the string to be ! replaced. In this way, you can toggle between vanilla and regular ! expression replacement. ! `v' ! `V' ! These keys are used to Visit files. `v' will switch to a buffer ! visiting file whose name can be entered in the minibuffer. `V' is ! similar, but will use window different from the current window. ! `#' ! If followed by a certain character CH, it becomes an operator whose ! argument is the region determined by the motion command that follows. ! Currently, CH can be one of `c', `C', `g', `q' and `s'. ! `# c' ! Change upper case characters in the region to lower case ! (`downcase-region'). ! `# C' ! Change lower case characters in the region to upper case. For instance, ! `# C 3 w' will capitalize 3 words from the current point ! (`upcase-region'). ! `# g' ! Execute last keyboard macro for each line in the region ! (`vip-global-execute'). ! `# q' ! Insert specified string at the beginning of each line in the region ! (`vip-quote-region'). ! `# s' ! Check spelling of words in the region (`spell-region'). ! `*' ! Call last keyboard macro. ! !  ! File: vip Node: New Bindings, Prev: New Commands, Up: Differences from Vi, Next: Window Commands ! ! New Key Bindings ! ---------------- ! ! In VIP the meanings of some keys are entirely different from Vi. These key ! bindings are done deliberately in the hope that editing under Emacs will ! become easier. It is however possible to rebind these keys to functions ! which behave similarly as in Vi. *Note Customizing Key Bindings::, for ! details. ! ! `C-g' ! `g' ! In Vi, `C-g' is used to get information about the file associated to ! the current buffer. Here, `g' will do that, and `C-g' is ! used to abort a command (this is for compatibility with emacs mode.) ! `SPC' ! `RET' ! Now these keys will scroll up and down the text of current window. ! Convenient for viewing the text. ! `s' ! `S' ! They are used to switch to a specified buffer. Useful for switching to ! already existing buffer since buffer name completion is provided. Also ! a default buffer will be given as part of the prompt, to which you can ! switch by just typing RET key. `s' is used to select buffer ! in the current window, while `S' selects buffer in another window. ! `C' ! `X' ! These keys will exit from vi mode and return to emacs mode ! temporarily. If you type `C' (`X'), Emacs will be in emacs mode and ! will believe that you have typed `C-c' (`C-x', resp.) in emacs mode. ! Moreover, if the following character you type is an upper case letter, ! then Emacs will believe that you have typed the corresponding control ! character. You will be in vi mode again after the command is ! executed. For example, typing `X S' in vi mode is the same as typing ! `C-x C-s' in emacs mode. You get the same effect by typing `C-x C-s' ! in vi mode, but the idea here is that you can execute useful Emacs ! commands without typing control characters. For example, if you hit ! `X' (or `C-x') followed by `2', then the current window will be split ! into 2 and you will be in vi mode again. ! ! In addition to these, `ctl-x-map' is slightly modified: ! ! ! `X 3' ! `C-x 3' ! This is equivalent to `C-x 1 C-x 2' (1 + 2 = 3). ! !  ! File: vip Node: Window Commands, Prev: New Bindings, Up: Differences from Vi, Next: Buffer Commands ! ! Window Commands ! --------------- ! ! In this and following subsections, we give a summary of key bindings for ! basic functions related to windows, buffers and files. ! ! `C-n' ! Switch to next window. ! `X 1' ! `C-x 1' ! Delete other windows. ! `X 2' ! `C-x 2' ! Split current window into two windows. ! `X 3' ! `C-x 3' ! Show current buffer in two windows. ! !  ! File: vip Node: Buffer Commands, Prev: Window Commands, Up: Differences from Vi, Next: File Commands ! ! Buffer Commands ! --------------- ! ! `s' ! Switch to the specified buffer in the current window ! (`vip-switch-to-buffer'). ! `S' ! Switch to the specified buffer in another window ! (`vip-switch-to-buffer-other-window'). ! `K' ! Kill the current buffer if it is not modified. ! `X S' ! `C-x C-s' ! Save the current buffer in the file associated to the buffer. ! !  ! File: vip Node: File Commands, Prev: Buffer Commands, Up: Differences from Vi, Next: Misc Commands ! ! File Commands ! ------------- ! ! `v' ! Visit specified file in the current window. ! `V' ! Visit specified file in another window. ! `X W' ! `C-x C-w' ! Write current buffer into the specified file. ! `X I' ! `C-x C-i' ! ! Insert specified file at point. ! !  ! File: vip Node: Misc Commands, Prev: File Commands, Up: Differences from Vi, Next: Vi Commands ! ! Miscellaneous Commands ! ---------------------- ! ! `X (' ! `C-x (' ! Start remembering keyboard macro. ! `X )' ! `C-x )' ! Finish remembering keyboard macro. ! `*' ! Call last remembered keyboard macro. ! `X Z' ! `C-x C-z' ! Suspend Emacs. ! `Z Z' ! Exit Emacs. ! `Q' ! Query replace. ! `R' ! Replace. ! !  ! File: vip Node: Vi Commands, Prev: Misc Commands, Up: Top, Next: Numeric Arguments ! ! Vi Commands ! *********** ! ! This chapter describes Vi commands other than Ex commands implemented in ! VIP. Except for the last section which discusses insert mode, all the ! commands described in this chapter are to be used in vi mode. ! ! * Menu: ! ! * Numeric Arguments:: Many commands accept numeric arguments ! * Important Keys:: Some very important keys. ! * Buffers and Windows:: Commands for handling buffers and windows. ! * Files:: Commands for handling files. ! * Viewing the Buffer:: How you can view the current buffer. ! * Mark Commands:: Marking positions in a buffer. ! * Motion Commands:: Commands for moving point. ! * Modifying Commands:: Commands for modifying the buffer. ! !  ! File: vip Node: Numeric Arguments, Prev: Vi Commands, Up: Vi Commands, Next: Important Keys ! ! Numeric Arguments ! ================= ! ! ! Most Vi commands accept a "numeric argument" which can be supplied as a ! prefix to the commands. A numeric argument is also called a "count". In ! many cases, if a count is given, the command is executed that many times. ! For instance, `5 d d' deletes 5 lines while simple `d d' deletes a line. ! In this manual the metavariable N will denote a count. ! !  ! File: vip Node: Important Keys, Prev: Numeric Arguments, Up: Vi Commands, Next: Buffers and Windows ! ! Important Keys ! ============== ! ! The keys `C-g' and `C-l' are unique in that their associated ! functions are the same in any of emacs, vi and insert mode. ! ! `C-g' ! Quit. Cancel running or partially typed command (`keyboard-quit'). ! `C-l' ! Clear the screen and reprint everything (`recenter'). ! ! In Emacs many commands are bound to the key strokes that start with `C-x', ! `C-c' and ESC. These commands can be accessed from vi mode as easily as ! from emacs mode. ! ! `C-x' ! `C-c' ! `ESC' ! Typing one of these keys have the same effect as typing it in emacs mode. ! Appropriate command will be executed according as the keys you type after ! it. You will be in vi mode again after the execution of the command. ! For instance, if you type `ESC <' (in vi mode) then the cursor will ! move to the beginning of the buffer and you will still be in vi mode. ! `C' ! `X' ! Typing one of these keys have the effect of typing the corresponding ! control character in emacs mode. Moreover, if you type an upper case ! character following it, that character will also be translated to the ! corresponding control character. Thus typing `X W' in vi mode is the ! same as typing `C-x C-w' in emacs mode. You will be in vi mode again ! after the execution of a command. ! `\' ! Escape to emacs mode. Hitting the `\' key will take you to emacs ! mode, and you can execute a single Emacs command. After executing the ! Emacs command you will be in vi mode again. You can give a count ! before typing `\'. Thus `5 \ +', as well as `\ C-u 5 +', will insert ! `+++++' before point. ! !  ! File: vip Node: Buffers and Windows, Prev: Important Keys, Up: Vi Commands, Next: Files ! ! Buffers and Windows ! =================== ! ! ! In Emacs the text you edit is stored in a "buffer". See GNU Emacs Manual, ! for details. There is always one "selected" buffer which is called the ! "current buffer". ! ! ! You can see the contents of buffers through "windows" created by Emacs. ! When you have multiple windows on the screen only one of them is selected. ! Each buffer has a unique name, and each window has a mode line which shows ! the name of the buffer associated with the window and other information ! about the status of the buffer. You can change the format of the mode ! line, but normally if you see `**' at the beginning of a mode line it ! means that the buffer is "modified". If you write out the content of ! the buffer to a file, then the buffer will become not modified. Also if ! you see `%%' at the beginning of the mode line, it means that the file ! associated with the buffer is write protected. ! ! We have the following commands related to windows and buffers. ! ! `C-n' ! Move cursor to the next-window (`vip-next-window'). ! `X 1' ! Delete other windows and make the selected window fill the screen ! (`delete-other-windows'). ! `X 2' ! Split current window into two windows (`split-window-vertically'). ! `X 3' ! Show current buffer in two windows. ! `s BUFFER RET' ! Select or create a buffer named BUFFER (`vip-switch-to-buffer'). ! `S BUFFER RET' ! Similar but select a buffer named BUFFER in another window ! (`vip-switch-to-buffer-other-window'). ! `K' ! Kill the current buffer if it is not modified or if it is not associated ! with a file (`vip-kill-buffer'). ! `X B' ! List the existing buffers (`list-buffers'). ! ! ! As "buffer name completion" is provided, you have only to type in ! initial substring of the buffer name which is sufficient to identify it ! among names of existing buffers. After that, if you hit TAB the rest ! of the buffer name will be supplied by the system, and you can confirm it ! by RET. The default buffer name to switch to will also be prompted, ! and you can select it by giving a simple RET. See GNU Emacs Manual ! for details of completion. ! !  ! File: vip Node: Files, Prev: Buffers and Windows, Up: Vi Commands, Next: Viewing the Buffer ! ! Files ! ===== ! ! We have the following commands related to files. They are used to visit, ! save and insert files. ! ! `v FILE RET' ! Visit specified file in the current window (`vip-find-file'). ! `V FILE RET' ! Visit specified file in another window (`vip-find-file-other-window'). ! `X S' ! Save current buffer to the file associated with the buffer. If no file is ! associated with the buffer, the name of the file to write out the content ! of the buffer will be asked in the minibuffer. ! `X W FILE RET' ! Write current buffer into a specified file. ! `X I FILE RET' ! Insert a specified file at point. ! `g' ! Give information on the file associated with the current buffer. Tell you ! the name of the file associated with the buffer, the line number of the ! current point and total line numbers in the buffer. If no file is ! associated with the buffer, this fact will be indicated by the null file ! name `""'. ! ! ! In Emacs, you can edit a file by "visiting" it. If you wish to visit a ! file in the current window, you can just type `v'. Emacs maintains the ! "default directory" which is specific to each buffer. Suppose, for ! instance, that the default directory of the current buffer is ! `/usr/masahiko/lisp/'. Then you will get the following prompt in the ! minibuffer. ! visit file: /usr/masahiko/lisp/ ! If you wish to visit, say, `vip.el' in this directory, then you can ! just type `vip.el' followed by RET. If the file `vip.el' ! already exists in the directory, Emacs will visit that file, and if not, ! the file will be created. Emacs will use the file name (`vip.el', in ! this case) as the name of the buffer visiting the file. In order to make ! the buffer name unique, Emacs may append `<2>', `<3>' etc., to ! the buffer name. As the "file name completion" is provided here, you ! can sometime save typing. For instance, suppose there is only one file in the ! default directory whose name starts with `v', that is `vip.el'. ! Then if you just type `v TAB' then it will be completed to ! `vip.el'. Thus, in this case, you just have to type `v v TAB ! RET' to visit `/usr/masahiko/lisp/vip.el'. Continuing the ! example, let us now suppose that you wished to visit the file ! `/usr/masahiko/man/vip.texinfo'. Then to the same prompt which you get ! after you typed `v', you can enter `/usr/masahiko/man/vip.texinfo' or ! `../man/vip.texinfo' followed by RET. ! ! Use `V' instead of `v', if you wish to visit a file in another ! window. ! ! You can verify which file you are editing by typing `g'. (You can also ! type `X B' to get nformation on other buffers too.) If you type `g' you ! will get an information like below in the echo area: ! "/usr/masahiko/man/vip.texinfo" line 921 of 1949 ! ! After you edited the buffer (`vip.texinfo', in our example) for a while, ! you may wish to save it in a file. If you wish to save it in the file ! associated with the buffer (`/usr/masahiko/man/vip.texinfo', in this case), ! you can just say `X S'. If you wish to save it in another file, you can ! type `X W'. You will then get a similar prompt as you get for `v', to ! which you can enter the file name. ! !  ! File: vip Node: Viewing the Buffer, Prev: Files, Up: Vi Commands, Next: Mark Commands ! ! Viewing the Buffer ! ================== ! ! In this and next section we discuss commands for moving around in the ! buffer. These command do not change the content of the buffer. The ! following commands are useful for viewing the content of the current ! buffer. ! ! `SPC' ! `C-f' ! Scroll text of current window upward almost full screen. You can go ! forward in the buffer by this command (`vip-scroll'). ! `RET' ! `C-b' ! Scroll text of current window downward almost full screen. You can go ! backward in the buffer by this command (`vip-scroll-back'). ! `C-d' ! Scroll text of current window upward half screen. You can go ! down in the buffer by this command (`vip-scroll-down'). ! `C-u' ! Scroll text of current window downward half screen. You can go ! up in the buffer by this command (`vip-scroll-up'). ! `C-y' ! Scroll text of current window upward by one line (`vip-scroll-down-one'). ! `C-e' ! Scroll text of current window downward by one line (`vip-scroll-up-one'). ! You can repeat these commands by giving a count. Thus, `2 SPC' ! has the same effect as `SPC SPC'. ! ! The following commands reposition point in the window. ! ! `z H' ! `z RET' ! Put point on the top (home) line in the window. So the current line ! becomes the top line in the window. Given a count N, point will be ! placed in the N-th line from top (`vip-line-to-top'). ! `z M' ! `z .' ! Put point on the middle line in the window. Given a count N, ! point will be placed in the N-th line from the middle line ! (`vip-line-to-middle'). ! `z L' ! `z -' ! Put point on the bottom line in the window. Given a count N, ! point will be placed in the N-th line from bottom ! (`vip-line-to-bottom'). ! `C-l' ! Center point in window and redisplay screen (`recenter'). ! !  ! File: vip Node: Mark Commands, Prev: Viewing the Buffer, Up: Vi Commands, Next: Motion Commands ! ! Mark Commands ! ============= ! ! The following commands are used to mark positions in the buffer. ! ! `m CH' ! Store current point in the register CH. CH must be a lower ! case character between `a' and `z'. ! `m <' ! Set mark at the beginning of current buffer. ! `m >' ! Set mark at the end of current buffer. ! `m .' ! Set mark at point. ! `m ,' ! Jump to mark (and pop mark off the mark ring). ! ! ! Emacs uses the "mark ring" to store marked positions. The commands ! `m <', `m >' and `m .' not only set mark but also add it as the ! latest element of the mark ring (replacing the oldest one). By repeating ! the command ``m ,'' you can visit older and older marked positions. You ! will eventually be in a loop as the mark ring is a ring. ! !  ! File: vip Node: Motion Commands, Prev: Mark Commands, Up: Vi Commands, Next: Searching and Replacing ! ! Motion Commands ! =============== ! ! Commands for moving around in the current buffer are collected here. These ! commands are used as an `argument' for the delete, change and yank commands ! to be described in the next section. ! ! `h' ! Move point backward by one character. Signal error if point is at the ! beginning of buffer, but (unlike Vi) do not complain otherwise ! (`vip-backward-char'). ! `l' ! Move point backward by one character. Signal error if point is at the ! end of buffer, but (unlike Vi) do not complain otherwise ! (`vip-forward-char'). ! `j' ! Move point to the next line keeping the current column. If point is on the ! last line of the buffer, a new line will be created and point will move to ! that line (`vip-next-line'). ! `k' ! Move point to the previous line keeping the current column ! (`vip-next-line'). ! `+' ! Move point to the next line at the first non-white character. If point is ! on the last line of the buffer, a new line will be created and point will ! move to the beginning of that lin (`vip-next-line-at-bol'). ! `-' ! Move point to the previous line at the first non-white character ! (`vip-previous-line-at-bol'). ! If a count is given to these commands, the commands will be repeated that ! many times. ! ! `0' ! Move point to the beginning of line (`vip-beginning-of-line'). ! `^' ! Move point to the first non-white character on the line ! (`vip-bol-and-skip-white'). ! `$' ! Move point to the end of line (`vip-goto-eol'). ! `N |' ! Move point to the N-th column on the line (`vip-goto-col'). ! Except for the `|' command, these commands neglect a count. ! ! ! `w' ! Move point forward to the beginning of the next word ! (`vip-forward-word'). ! `W' ! Move point forward to the beginning of the next word, where a "word" is ! considered as a sequence of non-white characters (`vip-forward-Word'). ! `b' ! Move point backward to the beginning of a word (`vip-backward-word'). ! `B' ! Move point backward to the beginning of a word, where a word is ! considered as a sequence of non-white characters (`vip-forward-Word'). ! `e' ! Move point forward to the end of a word (`vip-end-of-word'). ! `E' ! Move point forward to the end of a word, where a word is ! considered as a sequence of non-white characters (`vip-end-of-Word'). ! Here the meaning of the word `word' for the `w', `b' and `e' ! commands is determined by the "syntax table" effective in the current ! buffer. Each major mode has its syntax mode, and therefore the meaning of ! a word also changes as the major mode changes. See GNU Emacs Manual for ! details of syntax table. ! ! `H' ! Move point to the beginning of the home (top) line of the window. ! Given a count N, go to the N-th line from top ! (`vip-window-top'). ! `M' ! Move point to the beginning of the middle line of the window. Given ! a count N, go to the N-th line from the middle line ! (`vip-window-middle'). ! `L' ! Move point to the beginning of the lowest (bottom) line of the ! window. Given count, go to the N-th line from bottom ! (`vip-window-bottom'). ! These commands can be used to go to the desired line visible on the screen. ! ! `(' ! Move point backward to the beginning of the sentence ! (`vip-backward-sentence'). ! `)' ! Move point forward to the end of the sentence ! (`vip-forward-sentence'). ! `{' ! Move point backward to the beginning of the paragraph ! (`vip-backward-paragraph'). ! `}' ! Move point forward to the end of the paragraph ! (`vip-forward-paragraph'). ! A count repeats the effect for these commands. ! ! `G' ! Given a count N, move point to the N-th line in the buffer on ! the first non-white character. Without a count, go to the end of the buffer ! (`vip-goto-line'). ! `` `' ! Exchange point and mark (`vip-goto-mark'). ! `` CH' ! Move point to the position stored in the register CH. CH must ! be a lower case letter. ! `' '' ! Exchange point and mark, and then move point to the first non-white ! character on the line (`vip-goto-mark-and-skip-white'). ! `' CH' ! Move point to the position stored in the register CH and skip to the ! first non-white character on the line. CH must be a lower case letter. ! `%' ! Move point to the matching parenthesis if point is looking at `(', ! `)', `{', `}', `[' or `]' ! (`vip-paren-match'). ! The command `G' mark point before move, so that you can return to the ! original point by `` `'. The original point will also be stored in ! the mark ring. ! ! The following commands are useful for moving points on the line. A count ! will repeat the effect. ! ! `f CH' ! Move point forward to the character CH on the line. Signal error if ! CH could not be found (`vip-find-char-forward'). ! `F CH' ! Move point backward to the character CH on the line. Signal error if ! CH could not be found (`vip-find-char-backward'). ! `t CH' ! Move point forward upto the character CH on the line. Signal error if ! CH could not be found (`vip-goto-char-forward'). ! `T CH' ! Move point backward upto the character CH on the line. Signal error if ! CH could not be found (`vip-goto-char-backward'). ! `;' ! Repeat previous `f', `t', `F' or `T' command ! (`vip-repeat-find'). ! `,' ! Repeat previous `f', `t', `F' or `T' command, in the ! opposite direction (`vip-repeat-find-opposite'). ! !  ! File: vip Node: Searching and Replacing, Prev: Motion Commands, Up: Vi Commands, Next: Modifying Commands ! ! Searching and Replacing ! ======================= ! ! Following commands are available for searching and replacing. ! ! ! `/ STRING RET' ! Search the first occurrence of the string STRING forward starting ! from point. Given a count N, the N-th occurrence of ! STRING will be searched. If the variable `vip-re-search' has value ! `t' then "regular expression" search is done and the string ! matching the regular expression STRING is found. If you give an ! empty string as STRING then the search mode will change from vanilla ! search to regular expression search and vice versa ! (`vip-search-forward'). ! `? STRING RET' ! Same as `/', except that search is done backward ! (`vip-search-backward'). ! `n' ! Search the previous search pattern in the same direction as before ! (`vip-search-next'). ! `N' ! Search the previous search pattern in the opposite direction ! (`vip-search-Next'). ! `C-s' ! Search forward incrementally. See GNU Emacs Manual for details ! (`isearch-forward'). ! `C-r' ! Search backward incrementally (`isearch-backward'). ! `R STRING RET NEWSTRING' ! There are two modes of replacement, "vanilla" and "regular expression". ! If the mode is vanilla you will get a prompt `Replace string:', ! and if the mode is regular expression you will ge a prompt ! `Replace regexp:'. The mode is initially vanilla, but you can ! toggle these modes by giving a null string as STRING. If the mode is ! vanilla, this command replaces every occurrence of STRING with ! NEWSTRING. If the mode is regular expression, STRING is ! treated as a regular expression and every string matching the regular ! expression is replaced with NEWSTRING (`vip-replace-string'). ! `Q STRING RET NEWSTRING' ! Same as `R' except that you will be asked form confirmation before each ! replacement ! (`vip-query-replace'). ! `r CH' ! Replace the character point is looking at by the character CH. Give ! count, replace that many characters by CH (`vip-replace-char'). ! The commands `/' and `?' mark point before move, so that you can ! return to the original point by `` `'. ! !  ! File: vip Node: Modifying Commands, Prev: Searching and Replacing, Up: Vi Commands, Next: Delete Commands ! ! Modifying Commands ! ================== ! ! In this section, commands for modifying the content of a buffer are ! described. These commands affect the region determined by a motion command ! which is given to the commands as their argument. ! ! ! We classify motion commands into "point commands" and ! "line commands". The point commands are as follows: ! `h', `l', `0', `^', `$', `w', `W', `b', `B', `e', `E', `(', `)', `/', `?', ``', `f', `F', `t', `T', `%', `;', `,' ! The line commands are as follows: ! `j', `k', `+', `-', `H', `M', `L', `{', `}', `G', `'' ! If a point command is given as an argument to a modifying command, the ! region determined by the point command will be affected by the modifying ! command. On the other hand, if a line command is given as an argument to a ! modifying command, the region determined by the line command will be ! enlarged so that it will become the smallest region properly containing the ! region and consisting of whole lines (we call this process "expanding ! the region"), and then the enlarged region will be affected by the modifying ! command. ! ! * Menu: ! ! * Delete Commands:: Commands for deleting text. ! * Yank Commands:: Commands for yanking text in Vi's sense. ! * Put Back Commands:: Commands for putting bake deleted/yanked text. ! * Change Commands:: Commands for changing text. !  ! File: vip Node: Delete Commands, Prev: Modifying Commands, Up: Modifying Commands, Next: Yank Commands ! ! Delete Commands ! --------------- ! ! `d MOTION-COMMAND' ! Delete the region determined by the motion command MOTION-COMMAND. ! For example, `d $' will delete the region between point and end of ! current line since `$' is a point command that moves point to end of line. ! `d G' will delete the region between the beginning of current line and ! end of the buffer, since `G' is a line command. A count given to the ! command above will become the count for the associated motion command. ! Thus, `3 d w' will delete three words. ! ! It is also possible to save the deleted text into a register you specify. ! For example, you can say `" t 3 d w' to delete three words and save it ! to register `t'. The name of a register is a lower case letter between ! `a' and `z'. If you give an upper case letter as an argument to ! a delete command, then the deleted text will be appended to the content of ! the register having the corresponding lower case letter as its name. So, ! `" T d w' will delete a word and append it to register `t'. Other ! modifying commands also accept a register name as their argument, and we ! will not repeat similar explanations. ! ! We have more delete commands as below. ! ! `d d' ! Delete a line. Given a count N, delete N lines. ! `d r' ! Delete current region. ! `d R' ! Expand current region and delete it. ! `D' ! Delete to the end of a line (`vip-kill-line'). ! `x' ! Delete a character after point. Given N, delete N characters ! (`vip-delete-char'). ! `DEL' ! Delete a character before point. Given N, delete N characters ! (`vip-delete-backward-char'). ! !  ! File: vip Node: Yank Commands, Prev: Delete Commands, Up: Modifying Commands, Next: Put Back Commands ! ! Yank Commands ! ------------- ! ! ! Yank commands "yank" a text of buffer into a (usually anonymous) register. ! Here the word `yank' is used in Vi's sense. Thus yank commands do not ! alter the content of the buffer, and useful only in combination with ! commands that put back the yanked text into the buffer. ! ! `y MOTION-COMMAND' ! Yank the region determined by the motion command MOTION-COMMAND. ! For example, `y $' will yank the text between point and the end of line ! into an anonymous register, while `"c y $' will yank the same text into ! register `c'. ! ! Use the following command to yank consecutive lines of text. ! ! `y y' ! `Y' ! Yank a line. Given N, yank N lines (`vip-yank-line'). ! `y r' ! Yank current region. ! `y R' ! Expand current region and yank it. ! !  ! File: vip Node: Put Back Commands, Prev: Yank Commands, Up: Modifying Commands, Next: Change Commands ! ! Put Back Commands ! ----------------- ! Deleted or yanked texts can be put back into the buffer by the command ! below. ! ! `p' ! Insert, after the character point is looking at, most recently ! deleted/yanked text from anonymous register. Given a register name ! argument, the content of the named register will be put back. Given a ! count, the command will be repeated that many times. This command also ! checks if the text to put back ends with a new line character, and if so ! the text will be but below the current line (`vip-put-back'). ! `P' ! Insert at point most recently deleted/yanked text from anonymous register. ! Given a register name argument, the content of the named register will ! be put back. Given a count, the command will be repeated that many times. ! This command also checks if the text to put back ends with a new line ! character, and if so the text will be put above the current line rather ! than at point (`vip-Put-back'). ! Thus, `" c p' will put back the content of the register `c' into the ! buffer. It is also possible to specify "number register" which is a ! numeral between `1' and `9'. If the number register N is ! specified, N-th previously deleted/yanked text will be put back. It ! is an error to specify a number register for the delete/yank commands. ! !  ! File: vip Node: Change Commands, Prev: Put Back Commands, Up: Modifying Commands, Next: Repeating and Undoing Modifications ! ! Change Commands ! --------------- ! ! Most commonly used change command takes the following form. ! ! `c MOTION-COMMAND' ! Replace the content of the region determined by the motion command ! MOTION-COMMAND by the text you type. If the motion command is a ! point command then you will type the text into minibuffer, and if the ! motion command is a line command then the region will be deleted first and ! you can insert the text in INSERT MODE. For example, if point is at ! the beginning of a word `foo' and you wish to change it to `bar', you can ! type `c w'. Then, as `w' is a point command, you will get the prompt `foo ! =>' in the minibuffer, for which you can type `b a r RET' to complete the ! change command. ! ! `c c' ! Change a line. Given a count, that many lines are changed. ! `c r' ! Change current region. ! `c R' ! Expand current region and change it. ! !  ! File: vip Node: Repeating and Undoing Modifications, Prev: Change Commands, Up: Modifying Commands, Next: Other Vi Commands ! ! Repeating and Undoing Modifications ! ----------------------------------- ! ! VIP records the previous modifying command, so that it is easy to repeat ! it. It is also very easy to undo changes made by modifying commands. ! ! `u' ! Undo the last change. You can undo more by repeating undo by the repeat ! command `.'. For example, you can undo 5 previous changes by typing ! `u....'. If you type `uu', then the second `u' undoes the ! first undo command (`vip-undo'). ! `.' ! Repeat the last modifying command. Given count N it becomes the new ! count for the repeated command. Otherwise, the count for the last ! modifying command is used again (`vip-repeat'). ! !  ! File: vip Node: Other Vi Commands, Prev: Repeating and Undoing Modifications, Up: Vi Commands, Next: Commands in Insert Mode ! ! Other Vi Commands ! ================= ! ! Miscellaneous Vi commands are collected here. ! ! `Z Z' ! Exit Emacs. If modified buffers exist, you will be asked whether you wish ! to save them or not (`save-buffers-kill-emacs'). ! `! MOTION-COMMAND FORMAT-COMMAND' ! `N ! ! FORMAT-COMMAND' ! The region determined by the motion command MOTION-COMMAND will be ! given to the shell command FORMAT-COMMAND and the region will be ! replaced by its output. If a count is given, it will be passed to ! MOTION-COMMAND. For example, `3!Gsort' will sort the region ! between point and the 3rd line. If `!' is used instead of ! MOTION-COMMAND then N lines will be processed by ! FORMAT-COMMAND (`vip-command-argument'). ! `J' ! Join two lines. Given count, join that many lines. A space will be ! inserted at each junction (`vip-join-lines'). ! `< MOTION-COMMAND' ! `N < <' ! Shift region determined by the motion command MOTION-COMMAND to ! left by SHIFT-WIDTH (default is 8). If `<' is used instead of ! MOTION-COMMAND then shift N lines ! (`vip-command-argument'). ! `> MOTION-COMMAND' ! `N > >' ! Shift region determined by the motion command MOTION-COMMAND to ! right by SHIFT-WIDTH (default is 8). If `<' is used instead of ! MOTION-COMMAND then shift N lines ! (`vip-command-argument'). ! `= MOTION-COMMAND' ! Indent region determined by the motion command MOTION-COMMAND. If ! `=' is used instead of MOTION-COMMAND then indent N lines ! (`vip-command-argument'). ! `*' ! Call last remembered keyboard macro. ! `#' ! A new vi operator. *Note New Commands::, for more details. ! ! The following keys are reserved for future extensions, and currently ! assigned to a function that just beeps (`vip-nil'). ! ! ! &, @, U, [, ], _, q, ~ ! ! VIP uses a special local keymap to interpret key strokes you enter in vi ! mode. The following keys are bound to NIL in the keymap. Therefore, ! these keys are interpreted by the global keymap of Emacs. We give below a ! short description of the functions bound to these keys in the global ! keymap. See GNU Emacs Manual for details. ! ! `C-@' ! Set mark and push previous mark on mark ring (`set-mark-command'). ! `TAB' ! Indent line for current major mode (`indent-for-tab-command'). ! `LFD' ! Insert a newline, then indent according to mode (`newline-and-indent'). ! `C-k' ! Kill the rest of the current line; before a newline, kill the newline. ! With prefix argument, kill that many lines from point. Negative arguments ! kill lines backward (`kill-line'). ! `C-l' ! Clear the screen and reprint everything (`recenter'). ! `N C-p' ! Move cursor vertically up N lines (`previous-line'). ! `C-q' ! Read next input character and insert it. Useful for inserting control ! characters ! (`quoted-insert'). ! `C-r' ! Search backward incrementally (`isearch-backward'). ! `C-s' ! Search forward incrementally (`isearch-forward'). ! `N C-t' ! Interchange charcters around point, moving forward one character. With ! count N, take character before point and drag it forward past N ! other characters. If no argument and at end of line, the previous two ! characters are exchanged (`transpose-chars'). ! `N C-v' ! Scroll text upward N lines. If N is not given, scroll near ! full screen (`scroll-up'). ! `C-w' ! Kill between point and mark. The text is save in the kill ring. The ! command `P' or `p' can retrieve it from kill ring ! (`kill-region'). ! !  ! File: vip Node: Commands in Insert Mode, Prev: Other Vi Commands, Up: Vi Commands, Next: Ex Commands ! ! Insert Mode ! =========== ! ! You can enter insert mode by one of the following commands. In addition to ! these, you will enter insert mode if you give a change command with a line ! command as the motion command. Insert commands are also modifying commands ! and you can repeat them by the repeat command `.' (`vip-repeat'). ! ! `i' ! Enter insert mode at point (`vip-insert'). ! `I' ! Enter insert mode at the first non white character on the line ! (`vip-Insert'). ! `a' ! Move point forward by one character and then enter insert mode ! (`vip-append'). ! `A' ! Enter insert mode at end of line (`vip-Append'). ! `o' ! Open a new line below the current line and enter insert mode ! (`vip-open-line'). ! `O' ! Open a new line above the current line and enter insert mode ! (`vip-Open-line'). ! `C-o' ! Insert a newline and leave point before it, and then enter insert mode ! (`vip-open-line-at-point'). ! ! Insert mode is almost like emacs mode. Only the following 4 keys behave ! differently from emacs mode. ! ! `ESC' ! This key will take you back to vi mode (`vip-change-mode-to-vi'). ! `C-h' ! Delete previous character (`delete-backward-char'). ! `C-w' ! Delete previous word (`vip-delete-backward-word'). ! `C-z' ! This key simulates ESC key in emacs mode. For instance, typing ! `C-z x' in insert mode iw the same as typing `ESC x' in emacs mode ! (`vip-ESC'). ! You can also bind `C-h' to `help-command' if you like. ! (*Note Customizing Key Bindings::, for details.) Binding `C-h' to ! `help-command' has the effect of making the meaning of `C-h' ! uniform among emacs, vi and insert modes. ! ! When you enter insert mode, VIP records point as the start point of ! insertion, and when you leave insert mode the region between point and ! start point is saved for later use by repeat command etc. Therefore, repeat ! command will not really repeat insertion if you move point by emacs ! commands while in insert mode. ! !  ! File: vip Node: Ex Commands, Prev: Commands in Insert Mode, Up: Top, Next: Ex Command Reference ! ! Ex Commands ! *********** ! ! ! In vi mode, you can execute an Ex command EX-COMMAND by typing: ! `: EX-COMMAND RET' ! Every Ex command follows the following pattern: ! ADDRESS COMMAND `!' PARAMETERS COUNT FLAGS ! where all parts are optional. For the syntax of "address", the reader ! is referred to the reference manual of Ex. ! ! ! In the current version of VIP, searching by Ex commands is always ! "magic". That is, search patterns are always treated as "regular ! expressions". For example, a typical forward search would be invoked by ! `:/PAT/'. If you wish to include `/' as part of ! PAT you must preceded it by `\'. VIP strips off these `\''s ! before `/' and the resulting PAT becomes the actual search ! pattern. Emacs provides a different and richer class or regular ! expressions than Vi/Ex, and VIP uses Emacs' regular expressions. See GNU ! Emacs Manual for details of regular expressions. ! ! Several Ex commands can be entered in a line by separating them by a pipe ! character `|'. ! ! * Menu: ! ! * Ex Command Reference:: Explain all the Ex commands available in VIP. !  ! File: vip Node: Ex Command Reference, Prev: Ex Commands, Up: Ex Commands, Next: Customization ! ! Ex Command Reference ! ==================== ! In this section we briefly explain all the Ex commands supported by VIP. ! Most Ex commands expect ADDRESS as their argument, and they use ! default addresses if they are not explicitly given. In the following, such ! default addresses will be shown in parentheses. ! ! Most command names can and preferably be given in abbreviated forms. In ! the following, optional parts of command names will be enclosed in ! brackets. For example, `co[py]' will mean that copy command can be ! give as `co' or `cop' or `copy'. ! ! If COMMAND is empty, point will move to the beginning of the line ! specified by the ADDRESS. If ADDRESS is also empty, point will ! move to the beginning of the current line. ! ! ! Some commands accept "flags" which are one of `p', `l' and ! `#'. If FLAGS are given, the text affected by the commands will ! be displayed on a temporary window, and you will be asked to hit return to ! continue. In this way, you can see the text affected by the commands ! before the commands will be executed. If you hit `C-g' instead of ! RET then the commands will be aborted. Note that the meaning of ! FLAGS is different in VIP from that in Vi/Ex. ! ! `(.,.) co[py] ADDR FLAGS' ! `(.,.) t ADDR FLAGS' ! Place a copy of specified lines after ADDR. If ADDR is ! `0', it will be placed before the first line. ! `(.,.) d[elete] REGISTER COUNT FLAGS' ! Delete specified lines. Text will be saved in a named REGISTER if a ! lower case letter is given, and appended to a register if a capital letter is ! given. ! `e[dit] ! +ADDR FILE' ! `e[x] ! +ADDR FILE' ! `vi[sual] ! +ADDR FILE' ! Edit a new file FILE in the current window. The command will abort ! if current buffer is modified, which you can override by giving `!'. ! If `+'ADDR is given, ADDR becomes the current line. ! `file' ! Give information about the current file. ! `(1,$) g[lobal] ! /PAT/ CMDS' ! `(1,$) v /PAT/ CMDS' ! Among specified lines first mark each line which matches the regular ! expression PAT, and then execute CMDS on each marked line. ! If `!' is given, CMDS will be executed on each line not matching ! PAT. `v' is same as `g!'. ! `(.,.+1) j[oin] ! COUNT FLAGS' ! Join specified lines into a line. Without `!', a space character will ! be inserted at each junction. ! `(.) k CH' ! `(.) mar[k] CH' ! Mark specified line by a lower case character CH. Then the ! addressing form `''CH will refer to this line. No white space is ! required between `k' and CH. A white space is necessary between ! `mark' and CH, however. ! `map CH RHS' ! Define a macro for vi mode. After this command, the character CH ! will be expanded to RHS in vi mode. ! `(.,.) m[ove] ADDR' ! Move specified lines after ADDR. ! `(.) pu[t] REGISTER' ! Put back previously deleted or yanked text. If REGISTER is given, ! the text saved in the register will be put back; otherwise, last deleted or ! yanked text will be put back. ! `q[uit] !' ! Quit from Emacs. If modified buffers with associated files exist, you will ! be asked whether you wish to save each of them. At this point, you may ! choose not to quit, by hitting `C-g'. If `!' is given, exit from ! Emacs without saving modified buffers. ! `(.) r[ead] FILE' ! Read in the content of the file FILE after the specified line. ! `(.) r[ead] ! COMMAND' ! Read in the output of the shell command COMMAND after the specified ! line. ! `se[t]' ! Set a variable's value. *Note Customizing Constants::, for the list of variables ! you can set. ! `sh[ell]' ! Run a subshell in a window. ! `(.,.) s[ubstitute] /PAT/REPL/ OPTIONS COUNT FLAGS' ! `(.,.) & OPTIONS COUNT FLAGS' ! On each specified line, the first occurrence of string matching regular ! expression PAT is replaced by replacement pattern REPL. Option ! characters are `g' and `c'. If global option character `g' ! appears as part of OPTIONS, all occurrences are substituted. If ! confirm option character `c' appears, you will be asked to give ! confirmation before each substitution. If `/PAT/REPL/' is ! missing, the last substitution is repeated. ! `st[op]' ! Suspend Emacs. ! `ta[g] TAG' ! Find first definition of TAG. If no TAG is given, previously ! given TAG is used and next alternate definition is find. By default, ! the file `TAGS' in the current directory becomes the "selected tag ! table". You can select another tag table by `set' command. ! *Note Customizing Constants::, for details. ! `und[o]' ! Undo the last change. ! `unm[ap] CH' ! The macro expansion associated with CH is removed. ! `ve[rsion]' ! Tell the version number of VIP. ! `(1,$) w[rite] ! FILE' ! Write out specified lines into file FILE. If no FILE is given, ! text will be written to the file associated to the current buffer. Unless ! `!' is given, if FILE is different from the file associated to ! the current buffer and if the file FILE exists, the command will not ! be executed. Unlike Ex, FILE becomes the file associated to the ! current buffer. ! `(1,$) w[rite]>> FILE' ! Write out specified lines at the end of file FILE. FILE ! becomes the file associated to the current buffer. ! `(1,$) wq ! FILE' ! Same as `write' and then `quit'. If `!' is given, same as ! `write !' then `quit'. ! `(.,.) y[ank] REGISTER COUNT' ! Save specified lines into register REGISTER. If no register is ! specified, text will be saved in an anonymous register. ! `ADDR ! COMMAND' ! Execute shell command COMMAND. The output will be shown in a new ! window. If ADDR is given, specified lines will be used as standard ! input to COMMAND. ! `($) =' ! Print the line number of the addressed line. ! `(.,.) > COUNT FLAGS' ! Shift specified lines to the right. The variable `vip-shift-width' ! (default value is 8) determines the amount of shift. ! `(.,.) < COUNT FLAGS' ! Shift specified lines to the left. The variable `vip-shift-width' ! (default value is 8) determines the amount of shift. ! `(.,.) ~ OPTIONS COUNT FLAGS' ! Repeat the previous `substitute' command using previous search pattern ! as PAT for matching. ! ! The following Ex commands are available in Vi, but not implemented in VIP. ! `abbreviate', `list', `next', `print', `preserve', `recover', `rewind', `source', ! `unabbreviate', `xit', `z' ! !  ! File: vip Node: Customization, Prev: Ex Command Reference, Up: Top, Next: Customizing Constants ! ! Customization ! ************* ! ! If you have a file called `.vip' in your home directory, then it ! will also be loaded when VIP is loaded. This file is thus useful for ! customizing VIP. ! ! * Menu: ! ! * Customizing Constants:: How to change values of constants. ! * Customizing Key Bindings:: How to change key bindings. ! * Adding Lisp Code:: Most powerful way of customization. !  ! File: vip Node: Customizing Constants, Prev: Customization, Up: Customization, Next: Customizing Key Bindings ! ! Customizing Constants ! ===================== ! An easy way to customize VIP is to change the values of constants used ! in VIP. Here is the list of the constants used in VIP and their default ! values. ! ! `vip-shift-width 8' ! The number of columns shifted by `>' and `<' command. ! `vip-re-replace nil' ! If `t' then do regexp replace, if `nil' then do string replace. ! `vip-search-wrap-around t' ! If `t', search wraps around the buffer. ! `vip-re-search nil' ! If `t' then search is reg-exp search, if `nil' then vanilla ! search. ! `vip-case-fold-search nil' ! If `t' search ignores cases. ! `vip-re-query-replace nil' ! If `t' then do reg-exp replace in query replace. ! `vip-open-with-indent nil' ! If `t' then indent to the previous current line when open a new line ! by `o' or `O' command. ! `vip-tags-file-name "TAGS"' ! The name of the file used as the tag table. ! `vip-help-in-insert-mode nil' ! If `t' then C-h is bound to `help-command' in insert mode, ! if `nil' then it sis bound to `delete-backward-char'. ! You can reset these constants in VIP by the Ex command `set'. Or you ! can include a line like this in your `.vip' file: ! (setq vip-case-fold-search t) ! !  ! File: vip Node: Customizing Key Bindings, Prev: Customizing Constants, Up: Customization ! ! Customizing Key Bindings ! ======================== ! ! ! VIP uses `vip-command-mode-map' as the "local keymap" for vi mode. ! For example, in vi mode, SPC is bound to the function ! `vip-scroll'. But, if you wish to make SPC and some other keys ! behave like Vi, you can include the following lines in your `.vip' ! file. ! ! (define-key vip-command-mode-map "\C-g" 'vip-info-on-file) ! (define-key vip-command-mode-map "\C-h" 'vip-backward-char) ! (define-key vip-command-mode-map "\C-m" 'vip-next-line-at-bol) ! (define-key vip-command-mode-map " " 'vip-forward-char) ! (define-key vip-command-mode-map "g" 'vip-keyboard-quit) ! (define-key vip-command-mode-map "s" 'vip-substitute) ! (define-key vip-command-mode-map "C" 'vip-change-to-eol) ! (define-key vip-command-mode-map "R" 'vip-change-to-eol) ! (define-key vip-command-mode-map "S" 'vip-substitute-line) ! (define-key vip-command-mode-map "X" 'vip-delete-backward-char) ! ! ! Key Index ! ********* ! ! ! * Menu: ! ! * 000 @kbd{C-@@} (@code{set-mark-command}): Other Vi Commands. ! * 001 @kbd{C-a} (@code{vip-beginning-of-line}): New Commands. ! * 002 @kbd{C-b} (@code{vip-scroll-back}): Viewing the Buffer. ! * 003 @kbd{C-c} (@code{vip-ctl-c}): Important Keys. ! * 003 @kbd{C-c} (@code{vip-ctl-c}): New Commands. ! * 004 @kbd{C-d} (@code{vip-scroll-up}): Viewing the Buffer. ! * 005 @kbd{C-e} (@code{vip-scroll-up-one}): Viewing the Buffer. ! * 006 @kbd{C-f} (@code{vip-scroll-back}): Viewing the Buffer. ! * 007 @kbd{C-g} (@code{vip-keyboard-quit}): Changing. ! * 007 @kbd{C-g} (@code{vip-keyboard-quit}): Important Keys. ! * 007 @kbd{C-g} (@code{vip-keyboard-quit}): New Bindings. ! * 010 @kbd{C-h} (@code{delete-backward-char}) (insert mode): Commands in Insert Mode. ! * 010 @kbd{C-h} (@code{vip-delete-backward-char}) (insert mode): Insert Mode. ! * 011 @kbd{TAB} (@code{indent-for-tab-command}): Other Vi Commands. ! * 012 @kbd{LFD} (@code{newline-and-indent}): Other Vi Commands. ! * 013 @kbd{C-k} (@code{kill-line}): Other Vi Commands. ! * 014 @kbd{C-l} (@code{recenter}): Important Keys. ! * 014 @kbd{C-l} (@code{recenter}): Other Vi Commands. ! * 015 @kbd{RET} (@code{vip-scroll-back}): New Bindings. ! * 015 @kbd{RET} (@code{vip-scroll-back}): Viewing the Buffer. ! * 016 @kbd{C-n} (@code{vip-next-window}): Buffers and Windows. ! * 016 @kbd{C-n} (@code{vip-next-window}): New Commands. ! * 016 @kbd{C-n} (@code{vip-next-window}): Window Commands. ! * 017 @kbd{C-o} (@code{vip-open-line-at-point}): Commands in Insert Mode. ! * 017 @kbd{C-o} (@code{vip-open-line-at-point}): New Commands. ! * 020 @kbd{C-p} (@code{previous-line}): Other Vi Commands. ! * 021 @kbd{C-q} (@code{quoted-insert}): Other Vi Commands. ! * 022 @kbd{C-r} (@code{isearch-backward}): New Commands. ! * 022 @kbd{C-r} (@code{isearch-backward}): Other Vi Commands. ! * 022 @kbd{C-r} (@code{isearch-backward}): Searching and Replacing. ! * 023 @kbd{C-s} (@code{isearch-forward}): New Commands. ! * 023 @kbd{C-s} (@code{isearch-forward}): Other Vi Commands. ! * 023 @kbd{C-s} (@code{isearch-forward}): Searching and Replacing. ! * 024 @kbd{C-t} (@code{transpose-chars}): Other Vi Commands. ! * 025 @kbd{C-u} (@code{vip-scroll-down}): Viewing the Buffer. ! * 026 @kbd{C-v} (@code{scroll-up}): Other Vi Commands. ! * 027 @kbd{C-w} (@code{kill-region}): Other Vi Commands. ! * 027 @kbd{C-w} (@code{vip-delete-backward-word}) (insert mode): Commands in Insert Mode. ! * 027 @kbd{C-w} (@code{vip-delete-backward-word}) (insert mode): Insert Mode. ! * 0300 @kbd{C-x} (@code{vip-ctl-x}): Important Keys. ! * 0300 @kbd{C-x} (@code{vip-ctl-x}): New Commands. ! * 0301 @kbd{C-x C-z} (@code{suspend-emacs}): Modes in VIP. ! * 031 @kbd{C-y} (@code{vip-scroll-down-one}): Viewing the Buffer. ! * 032 @kbd{C-z} (@code{vip-change-mode-to-vi}): Emacs Mode. ! * 032 @kbd{C-z} (@code{vip-change-mode-to-vi}): Modes in VIP. ! * 032 @kbd{C-z} (@code{vip-ESC}) (insert mode): Commands in Insert Mode. ! * 032 @kbd{C-z} (@code{vip-ESC}) (insert mode): Insert Mode. ! * 033 @kbd{ESC} (@code{vip-change-mode-to-vi}) (insert mode): Commands in Insert Mode. ! * 033 @kbd{ESC} (@code{vip-change-mode-to-vi}) (insert mode): Insert Mode. ! * 033 @kbd{ESC} (@code{vip-ESC}): Important Keys. ! * 033 @kbd{ESC} (@code{vip-ESC}): New Commands. ! * 040 @kbd{SPC} (@code{vip-scroll}): New Bindings. ! * 040 @kbd{SPC} (@code{vip-scroll}): Viewing the Buffer. ! * 041 @kbd{!} (@code{vip-command-argument}): Other Vi Commands. ! * 042 @kbd{"} (@code{vip-command-argument}): Delete Commands. ! * 0430 @kbd{#} (@code{vip-command-argument}): New Commands. ! * 0431 @kbd{# C} (@code{upcase-region}): New Commands. ! * 0432 @kbd{# c} (@code{downcase-region}): New Commands. ! * 0432 @kbd{# g} (@code{vip-global-execute}): New Commands. ! * 0432 @kbd{# q} (@code{vip-quote-region}): New Commands. ! * 0432 @kbd{# s} (@code{spell-region}): New Commands. ! * 044 @kbd{$} (@code{vip-goto-eol}): Motion Commands. ! * 045 @kbd{%} (@code{vip-paren-match}): Motion Commands. ! * 046 @kbd{&} (@code{vip-nil}): Other Vi Commands. ! * 047 @kbd{'} (@code{vip-goto-mark-and-skip-white}): Motion Commands. ! * 050 @kbd{(} (@code{vip-backward-sentence}): Motion Commands. ! * 051 @kbd{)} (@code{vip-forward-sentence}): Motion Commands. ! * 052 @kbd{*} (@code{vip-call-last-kbd-macro}): Misc Commands. ! * 052 @kbd{*} (@code{vip-call-last-kbd-macro}): New Commands. ! * 052 @kbd{*} (@code{vip-call-last-kbd-macro}): Other Vi Commands. ! * 053 @kbd{+} (@code{vip-next-line-at-bol}): Motion Commands. ! * 054 @kbd{,} (@code{vip-repeat-find-opposite}): Motion Commands. ! * 055 @kbd{-} (@code{vip-previous-line-at-bol}): Motion Commands. ! * 056 @kbd{.} (@code{vip-repeat}): Repeating and Undoing Modifications. ! * 056 @kbd{.} (@code{vip-repeat}): Undoing. ! * 057 @kbd{/} (@code{vip-search-forward}): Counts. ! * 057 @kbd{/} (@code{vip-search-forward}): Searching. ! * 057 @kbd{/} (@code{vip-search-forward}): Searching and Replacing. ! * 060 @kbd{0} (@code{vip-beginning-of-line}): Motion Commands. ! * 061 @kbd{1} (numeric argument): Numeric Arguments. ! * 062 @kbd{2} (numeric argument): Numeric Arguments. ! * 063 @kbd{3} (numeric argument): Numeric Arguments. ! * 064 @kbd{4} (numeric argument): Numeric Arguments. ! * 065 @kbd{5} (numeric argument): Numeric Arguments. ! * 066 @kbd{6} (numeric argument): Numeric Arguments. ! * 067 @kbd{7} (numeric argument): Numeric Arguments. ! * 068 @kbd{8} (numeric argument): Numeric Arguments. ! * 069 @kbd{9} (numeric argument): Numeric Arguments. ! * 072 @kbd{:} (@code{vip-ex}): Ex Commands. ! * 073 @kbd{;} (@code{vip-repeat-find}): Motion Commands. ! * 074 @kbd{<} (@code{vip-command-argument}): Other Vi Commands. ! * 075 @kbd{=} (@code{vip-command-argument}): Other Vi Commands. ! * 076 @kbd{>} (@code{vip-command-argument}): Other Vi Commands. ! * 077 @kbd{?} (@code{vip-search-backward}): Counts. ! * 077 @kbd{?} (@code{vip-search-backward}): Searching. ! * 077 @kbd{?} (@code{vip-search-backward}): Searching and Replacing. ! * 100 @kbd{@@} (@code{vip-nil}): Other Vi Commands. ! * 101 @kbd{A} (@code{vip-Append}): Commands in Insert Mode. ! * 102 @kbd{B} (@code{vip-backward-Word}): Motion Commands. ! * 103 @kbd{C} (@code{vip-ctl-c-equivalent}): Important Keys. ! * 103 @kbd{C} (@code{vip-ctl-c-equivalent}): New Bindings. ! * 104 @kbd{D} (@code{vip-kill-line}): Delete Commands. ! * 105 @kbd{E} (@code{vip-end-of-Word}): Motion Commands. ! * 106 @kbd{F} (@code{vip-find-char-backward}): Motion Commands. ! * 107 @kbd{G} (@code{vip-goto-line}): Motion Commands. ! * 110 @kbd{H} (@code{vip-window-top}): Motion Commands. ! * 111 @kbd{I} (@code{vip-Insert}): Commands in Insert Mode. ! * 112 @kbd{J} (@code{vip-join-lines}): Other Vi Commands. ! * 113 @kbd{K} (@code{vip-kill-buffer}): Buffer Commands. ! * 113 @kbd{K} (@code{vip-kill-buffer}): Buffers and Windows. ! * 113 @kbd{K} (@code{vip-kill-buffer}): New Commands. ! * 114 @kbd{L} (@code{vip-window-bottom}): Motion Commands. ! * 115 @kbd{M} (@code{vip-window-middle}): Motion Commands. ! * 116 @kbd{N} (@code{vip-search-Next}): Searching and Replacing. ! * 117 @kbd{O} (@code{vip-Open-line}): Commands in Insert Mode. ! * 117 @kbd{O} (@code{vip-Open-line}): Counts. ! * 120 @kbd{P} (@code{vip-Put-back}): Counts. ! * 120 @kbd{P} (@code{vip-Put-back}): Put Back Commands. ! * 121 @kbd{Q} (@code{vip-query-replace}): New Commands. ! * 121 @kbd{Q} (@code{vip-query-replace}): Searching and Replacing. ! * 122 @kbd{R} (@code{vip-replace-string}): New Commands. ! * 122 @kbd{R} (@code{vip-replace-string}): Searching and Replacing. ! * 123 @kbd{S} (@code{vip-switch-to-buffer-other-window}): Buffer Commands. ! * 123 @kbd{S} (@code{vip-switch-to-buffer-other-window}): Buffers and Windows. ! * 123 @kbd{S} (@code{vip-switch-to-buffer-other-window}): New Bindings. ! * 124 @kbd{T} (@code{vip-goto-char-backward}): Motion Commands. ! * 125 @kbd{U} (@code{vip-nil}): Other Vi Commands. ! * 126 @kbd{V} (@code{vip-find-file-other-window}): File Commands. ! * 126 @kbd{V} (@code{vip-find-file-other-window}): Files. ! * 126 @kbd{V} (@code{vip-find-file-other-window}): New Commands. ! * 127 @kbd{W} (@code{vip-forward-Word}): Motion Commands. ! * 1300 @kbd{X} (@code{vip-ctl-x-equivalent}): Important Keys. ! * 1300 @kbd{X} (@code{vip-ctl-x-equivalent}): New Bindings. ! * 1301 @kbd{X )} (@code{end-kbd-macro}): Misc Commands. ! * 1301 @kbd{X (} (@code{start-kbd-macro}): Misc Commands. ! * 1301 @kbd{X 1} (@code{delete-other-windows}): Buffers and Windows. ! * 1301 @kbd{X 1} (@code{delete-other-windows}): Window Commands. ! * 1301 @kbd{X 2} (@code{split-window-vertically}): Buffers and Windows. ! * 1301 @kbd{X 2} (@code{split-window-vertically}): Window Commands. ! * 1301 @kbd{X 3} (@code{vip-buffer-in-two-windows}): Buffers and Windows. ! * 1301 @kbd{X 3} (@code{vip-buffer-in-two-windows}): New Bindings. ! * 1301 @kbd{X 3} (@code{vip-buffer-in-two-windows}): Window Commands. ! * 1302 @kbd{X B} (@code{list-buffers}): Buffers and Windows. ! * 1302 @kbd{X I} (@code{insert-file}): File Commands. ! * 1302 @kbd{X I} (@code{insert-file}): Files. ! * 1302 @kbd{X S} (@code{save-buffer}): Buffer Commands. ! * 1302 @kbd{X S} (@code{save-buffer}): Files. ! * 1302 @kbd{X W} (@code{write-file}): File Commands. ! * 1302 @kbd{X W} (@code{write-file}): Files. ! * 1302 @kbd{X Z} (@code{suspend-emacs}): Misc Commands. ! * 131 @kbd{Y} (@code{vip-yank-line}): Yank Commands. ! * 132 @kbd{Z Z} (@code{save-buffers-kill-emacs}): Other Vi Commands. ! * 133 @kbd{[} (@code{vip-nil}): Other Vi Commands. ! * 134 @kbd{\} (@code{vip-escape-to-emacs}): Important Keys. ! * 134 @kbd{\} (@code{vip-escape-to-emacs}): New Commands. ! * 135 @kbd{]} (@code{vip-nil}): Other Vi Commands. ! * 136 @kbd{^} (@code{vip-bol-and-skip-white}): Motion Commands. ! * 137 @kbd{_} (@code{vip-nil}): Other Vi Commands. ! * 140 @kbd{`} (@code{vip-goto-mark}): Motion Commands. ! * 141 @kbd{a} (@code{vip-append}): Commands in Insert Mode. ! * 142 @kbd{b} (@code{vip-backward-word}): Motion Commands. ! * 1430 @kbd{c} (@code{vip-command-argument}): Change Commands. ! * 1431 @kbd{c R}: Change Commands. ! * 1432 @kbd{c c}: Change Commands. ! * 1432 @kbd{c r}: Change Commands. ! * 1440 @kbd{d} (@code{vip-command-argument}): Delete Commands. ! * 1441 @kbd{d R}: Delete Commands. ! * 1442 @kbd{d d}: Delete Commands. ! * 1442 @kbd{d r}: Delete Commands. ! * 145 @kbd{e} (@code{vip-end-of-word}): Motion Commands. ! * 146 @kbd{f} (@code{vip-find-char-forward}): Motion Commands. ! * 147 @kbd{g} (@code{vip-info-on-file}): Files. ! * 147 @kbd{g} (@code{vip-info-on-file}): New Bindings. ! * 150 @kbd{h} (@code{vip-backward-char}): Motion Commands. ! * 151 @kbd{i} (@code{vip-insert}): Commands in Insert Mode. ! * 152 @kbd{j} (@code{vip-next-line}): Motion Commands. ! * 153 @kbd{k} (@code{vip-previous-line}): Motion Commands. ! * 154 @kbd{l} (@code{vip-forward-char}): Motion Commands. ! * 155 @kbd{m} (@code{vip-mark-point}): Mark Commands. ! * 155 @kbd{m} (@code{vip-mark-point}): Marking. ! * 156 @kbd{n} (@code{vip-search-next}): Searching and Replacing. ! * 157 @kbd{o} (@code{vip-open-line}): Commands in Insert Mode. ! * 157 @kbd{o} (@code{vip-open-line}): Counts. ! * 160 @kbd{p} (@code{vip-put-back}): Counts. ! * 160 @kbd{p} (@code{vip-put-back}): Put Back Commands. ! * 161 @kbd{q} (@code{vip-nil}): Other Vi Commands. ! * 162 @kbd{r} (@code{vip-replace-char}): Searching and Replacing. ! * 163 @kbd{s} (@code{vip-switch-to-buffer}): Buffer Commands. ! * 163 @kbd{s} (@code{vip-switch-to-buffer}): Buffers and Windows. ! * 163 @kbd{s} (@code{vip-switch-to-buffer}): New Bindings. ! * 164 @kbd{t} (@code{vip-goto-char-forward}): Motion Commands. ! * 165 @kbd{u} (@code{vip-undo}): Repeating and Undoing Modifications. ! * 165 @kbd{u} (@code{vip-undo}): Undoing. ! * 166 @kbd{v} (@code{vip-find-file}): File Commands. ! * 166 @kbd{v} (@code{vip-find-file}): Files. ! * 166 @kbd{v} (@code{vip-find-file}): New Commands. ! * 167 @kbd{w} (@code{vip-forward-word}): Motion Commands. ! * 170 @kbd{x} (@code{vip-delete-char}): Delete Commands. ! * 1710 @kbd{y} (@code{vip-command-argument}): Yank Commands. ! * 1711 @kbd{y R}: Yank Commands. ! * 1712 @kbd{y r}: Yank Commands. ! * 1712 @kbd{y y} (@code{vip-yank-line}): Yank Commands. ! * 1721 @kbd{z RET} (@code{vip-line-to-top}): Viewing the Buffer. ! * 1721 @kbd{z RET} (@code{vip-line-to-top}): z Command. ! * 1722 @kbd{z -} (@code{vip-line-to-bottom}): Viewing the Buffer. ! * 1722 @kbd{z -} (@code{vip-line-to-bottom}): z Command. ! * 1722 @kbd{z .} (@code{vip-line-to-middle}): Viewing the Buffer. ! * 1722 @kbd{z .} (@code{vip-line-to-middle}): z Command. ! * 1723 @kbd{z H} (@code{vip-line-to-top}): Viewing the Buffer. ! * 1723 @kbd{z H} (@code{vip-line-to-top}): z Command. ! * 1723 @kbd{z L} (@code{vip-line-to-bottom}): Viewing the Buffer. ! * 1723 @kbd{z L} (@code{vip-line-to-bottom}): z Command. ! * 1723 @kbd{z M} (@code{vip-line-to-middle}): Viewing the Buffer. ! * 1723 @kbd{z M} (@code{vip-line-to-middle}): z Command. ! * 173 @kbd{@{} (@code{vip-backward-paragraph}): Motion Commands. ! * 174 @kbd{|} (@code{vip-goto-col}): Motion Commands. ! * 175 @kbd{@}} (@code{vip-forward-paragraph}): Motion Commands. ! * 176 @kbd{~} (@code{vip-nil}): Other Vi Commands. ! * 177 @kbd{DEL} (@code{vip-delete-backward-char}): Delete Commands. ! ! ! Concept Index ! ************* ! ! * Menu: ! ! * address: Ex Commands. ! * buffer: Basic Concepts. ! * buffer: Buffers and Windows. ! * buffer name completion: Buffers and Windows. ! * count: Numeric Arguments. ! * current buffer: Buffers and Windows. ! * default directory: Files. ! * emacs mode: Modes in VIP. ! * end (of buffer): Basic Concepts. ! * expanding (region): Modifying Commands. ! * file name completion: Files. ! * flag: Ex Command Reference. ! * global keymap: Basic Concepts. ! * insert mode: Modes in VIP. ! * keymap: Basic Concepts. ! * line commands: Modifying Commands. ! * local keymap: Basic Concepts. ! * local keymap: Customizing Key Bindings. ! * looking at: Basic Concepts. ! * magic: Ex Commands. ! * mark: Basic Concepts. ! * mark ring: Mark Commands. ! * mode: Basic Concepts. ! * mode line: Modes in VIP. ! * modified (buffer): Buffers and Windows. ! * number register: Put Back Commands. ! * numeric arguments: Numeric Arguments. ! * point: Basic Concepts. ! * point commands: Modifying Commands. ! * region: Basic Concepts. ! * region: Region Commands. ! * regular expression: Ex Commands. ! * regular expression (replacement): Searching and Replacing. ! * regular expression (search): Searching and Replacing. ! * selected buffer: Buffers and Windows. ! * selected tag table: Ex Command Reference. ! * syntax table: Motion Commands. ! * tag: Ex Command Reference. ! * text: Basic Concepts. ! * vanilla (replacement): Searching and Replacing. ! * vi mode: Modes in VIP. ! * visiting (a file): Files. ! * window: Basic Concepts. ! * window: Buffers and Windows. ! * word: Motion Commands. ! * yank: Yank Commands. !  ! Tag table: ! Node: Top712 ! Node: Survey1690 ! Node: Basic Concepts2168 ! Node: Loading VIP3780 ! Node: Modes in VIP4500 ! Node: Emacs Mode7026 ! Node: Vi Mode7374 ! Node: Insert Mode7675 ! Node: Differences from Vi8304 ! Node: Undoing9291 ! Node: Changing9641 ! Node: Searching10244 ! Node: z Command10952 ! Node: Counts11277 ! Node: Marking11805 ! Node: Region Commands12316 ! Node: New Commands12979 ! Node: New Bindings15804 ! Node: Window Commands17995 ! Node: Buffer Commands18485 ! Node: File Commands18983 ! Node: Misc Commands19374 ! Node: Vi Commands19825 ! Node: Numeric Arguments20581 ! Node: Important Keys21064 ! Node: Buffers and Windows22817 ! Node: Files25047 ! Node: Viewing the Buffer28277 ! Node: Mark Commands30212 ! Node: Motion Commands31078 ! Node: Searching and Replacing36717 ! Node: Modifying Commands39009 ! Node: Delete Commands40427 ! Node: Yank Commands42142 ! Node: Put Back Commands43034 ! Node: Change Commands44472 ! Node: Repeating and Undoing Modifications45498 ! Node: Other Vi Commands46315 ! Node: Commands in Insert Mode50024 ! Node: Ex Commands52115 ! Node: Ex Command Reference53274 ! Node: Customization59890 ! Node: Customizing Constants60357 ! Node: Customizing Key Bindings61709  ! End tag table --- 1,74 ---- ! This is Info file ../info/vip, produced by Makeinfo-1.54 from the input ! file vip.texinfo. Distribution ************ ! Copyright (C) 1987 Masahiko Sato. ! Permission is granted to make and distribute verbatim copies of this ! manual provided the copyright notice and this permission notice are ! preserved on all copies. ! ! Permission is granted to copy and distribute modified versions of ! this manual under the conditions for verbatim copying, provided that ! the entire resulting derived work is distributed under the terms of a ! permission notice identical to this one. ! ! Permission is granted to copy and distribute translations of this ! manual into another language, under the same conditions as for modified ! versions. ! !  ! Indirect: ! vip-1: 724 ! vip-2: 49772 !  ! Tag Table: ! (Indirect) ! Node: Top724 ! Node: Survey1713 ! Node: Basic Concepts2198 ! Node: Loading VIP3822 ! Node: Modes in VIP4555 ! Node: Emacs Mode7097 ! Node: Vi Mode7451 ! Node: Insert Mode7759 ! Node: Differences from Vi8378 ! Node: Undoing9372 ! Node: Changing9727 ! Node: Searching10337 ! Node: z Command11047 ! Node: Counts11378 ! Node: Marking11879 ! Node: Region Commands12379 ! Node: New Commands13047 ! Node: New Bindings15796 ! Node: Window Commands17958 ! Node: Buffer Commands18423 ! Node: File Commands18903 ! Node: Misc Commands19265 ! Node: Vi Commands19676 ! Node: Numeric Arguments20614 ! Node: Important Keys21104 ! Node: Buffers and Windows22842 ! Node: Files25059 ! Node: Viewing the Buffer28284 ! Node: Mark Commands30173 ! Node: Motion Commands31027 ! Node: Searching and Replacing36552 ! Node: Modifying Commands38819 ! Node: Delete Commands40289 ! Node: Yank Commands41988 ! Node: Put Back Commands42868 ! Node: Change Commands44317 ! Node: Repeating and Undoing Modifications45332 ! Node: Other Vi Commands46147 ! Node: Commands in Insert Mode49772 ! Node: Ex Commands51837 ! Node: Ex Command Reference53012 ! Node: Customization59494 ! Node: Customizing Constants59911 ! Node: Customizing Key Bindings61230  ! End Tag Table diff -rcP emacs-19.7/info/vip-1 emacs-19.8/info/vip-1 *** emacs-19.7/info/vip-1 --- emacs-19.8/info/vip-1 Tue May 25 03:20:22 1993 *************** *** 0 **** --- 1,1460 ---- + This is Info file ../info/vip, produced by Makeinfo-1.54 from the input + file vip.texinfo. + + Distribution + ************ + + Copyright (C) 1987 Masahiko Sato. + + Permission is granted to make and distribute verbatim copies of this + manual provided the copyright notice and this permission notice are + preserved on all copies. + + Permission is granted to copy and distribute modified versions of + this manual under the conditions for verbatim copying, provided that + the entire resulting derived work is distributed under the terms of a + permission notice identical to this one. + + Permission is granted to copy and distribute translations of this + manual into another language, under the same conditions as for modified + versions. + +  + File: vip, Node: Top, Next: Survey, Up: (DIR) + + VIP *** + + VIP is a Vi emulating package written in Emacs Lisp. VIP implements + most Vi commands including Ex commands. It is therefore hoped that + this package will enable you to do Vi style editing under the powerful + GNU Emacs environment. This info file describes the usage of VIP + assuming that you are fairly accustomed to Vi but not so much with + Emacs. Also we will concentrate mainly on differences from Vi, + especially features unique to VIP. + + It is recommended that you read nodes on survey and on customization + before you start using VIP. Other nodes may be visited as needed. + + Comments and bug reports are welcome. Please send messages to + `ms@Sail.Stanford.Edu' if you are outside of Japan and to + `masahiko@sato.riec.tohoku.junet' if you are in Japan. + + * Menu: + + * Survey:: A survey of VIP. + * Vi Commands:: Details of Vi commands. + * Ex Commands:: Details of Ex commands. + * Customization:: How to customize VIP. + +  + File: vip, Node: Survey, Next: Basic Concepts, Prev: Top, Up: Top + + A Survey of VIP + *************** + + In this chapter we describe basics of VIP with emphasis on the + features not found in Vi and on how to use VIP under GNU Emacs. + + * Menu: + + * Basic Concepts:: Basic concepts in Emacs. + * Loading VIP:: How to load VIP automatically. + * Modes in VIP:: VIP has three modes, which are orthogonal to modes + in Emacs. + * Differences from Vi:: Differences of VIP from Vi is explained. + +  + File: vip, Node: Basic Concepts, Next: Loading VIP, Prev: Survey, Up: Survey + + Basic Concepts + ============== + + We begin by explaining some basic concepts of Emacs. These concepts + are explained in more detail in the GNU Emacs Manual. + + Conceptually, a "buffer" is just a string of ASCII characters and two + special characters PNT ("point") and MRK ("mark") such that the + character PNT occurs exactly once and MRK occurs at most once. The + "text" of a buffer is obtained by deleting the occurrences of PNT and + MRK. If, in a buffer, there is a character following PNT then we say + that point is "looking at" the character; otherwise we say that point + is "at the end of buffer". PNT and MRK are used to indicate positions + in a buffer and they are not part of the text of the buffer. If a + buffer contains a MRK then the text between MRK and PNT is called the + "region" of the buffer. + + Emacs provides (multiple) "windows" on the screen, and you can see + the content of a buffer through the window associated with the buffer. + The cursor of the screen is always positioned on the character after + PNT. + + A "keymap" is a table that records the bindings between characters + and command functions. There is the "global keymap" common to all the + buffers. Each buffer has its "local keymap" that determines the "mode" + of the buffer. Local keymap overrides global keymap, so that if a + function is bound to some key in the local keymap then that function + will be executed when you type the key. If no function is bound to a + key in the local map, however, the function bound to the key in the + global map becomes in effect. + +  + File: vip, Node: Loading VIP, Next: Modes in VIP, Prev: Basic Concepts, Up: Survey + + Loading VIP + =========== + + The recommended way to load VIP automatically is to include the line: + (load "vip") + + in your `.emacs' file. The `.emacs' file is placed in your home + directory and it will be executed every time you invoke Emacs. If you + wish to be in vi mode whenver Emacs starts up, you can include the + following line in your `.emacs' file instead of the above line: + (setq term-setup-hook 'vip-mode) + + (*Note Vi Mode::, for the explanation of vi mode.) + + Even if your `.emacs' file does not contain any of the above lines, + you can load VIP and enter vi mode by typing the following from within + Emacs. + M-x vip-mode + +  + File: vip, Node: Modes in VIP, Next: Emacs Mode, Prev: Loading VIP, Up: Survey + + Modes in VIP + ============ + + Loading VIP has the effect of globally binding `C-z' (`Control-z') to + the function `vip-change-mode-to-vi'. The default binding of `C-z' in + GNU Emacs is `suspend-emacs', but, you can also call `suspend-emacs' by + typing `C-x C-z'. Other than this, all the key bindings of Emacs + remain the same after loading VIP. + + Now, if you hit `C-z', the function `vip-change-mode-to-vi' will be + called and you will be in "vi mode". (Some major modes may locally bind + `C-z' to some special functions. In such cases, you can call + `vip-change-mode-to-vi' by `execute-extended-command' which is invoked + by `M-x'. Here `M-x' means `Meta-x', and if your terminal does not + have a META key you can enter it by typing `ESC x'. The same effect + can also be achieve by typing `M-x vip-mode'.) + + You can observe the change of mode by looking at the "mode line". + For instance, if the mode line is: + -----Emacs: *scratch* (Lisp Interaction)----All------------ + + then it will change to: + -----Vi: *scratch* (Lisp Interaction)----All------------ + + Thus the word `Emacs' in the mode line will change to `Vi'. + + You can go back to the original "emacs mode" by typing `C-z' in vi + mode. Thus `C-z' toggles between these two modes. + + Note that modes in VIP exist orthogonally to modes in Emacs. This + means that you can be in vi mode and at the same time, say, shell mode. + + Vi mode corresponds to Vi's command mode. From vi mode you can enter + "insert mode" (which corresponds to Vi's insert mode) by usual Vi + command keys like `i', `a', `o' ... etc. + + In insert mode, the mode line will look like this: + -----Insert *scratch* (Lisp Interaction)----All------------ + + You can exit from insert mode by hitting ESC key as you do in Vi. + + That VIP has three modes may seem very complicated, but in fact it + is not so. VIP is implemented so that you can do most editing + remaining only in the two modes for Vi (that is vi mode and insert + mode). + + The figure below shows the transition of three modes in VIP. + + + === C-z ==> == i,o ... ==> + emacs mode vi mode insert mode + <== X-z === <=== ESC ==== + + * Menu: + + * Emacs Mode:: This is the mode you should know better. + * Vi Mode:: Vi commands are executed in this mode. + * Insert Mode:: You can enter text, and also can do editing if you + know enough Emacs commands. + +  + File: vip, Node: Emacs Mode, Next: Vi Mode, Prev: Modes in VIP, Up: Modes in VIP + + Emacs Mode + ---------- + + You will be in this mode just after you loaded VIP. You can do all + normal Emacs editing in this mode. Note that the key `C-z' is globally + bound to `vip-change-mode-to-vi'. So, if you type `C-z' in this mode + then you will be in vi mode. + +  + File: vip, Node: Vi Mode, Next: Insert Mode, Prev: Emacs Mode, Up: Modes in VIP + + Vi Mode + ------- + + This mode corresponds to Vi's command mode. Most Vi commands work + as they do in Vi. You can go back to emacs mode by typing `C-z'. You + can enter insert mode, just as in Vi, by typing `i', `a' etc. + +  + File: vip, Node: Insert Mode, Next: Differences from Vi, Prev: Vi Mode, Up: Modes in VIP + + Insert Mode + ----------- + + The key bindings in this mode is the same as in the emacs mode + except for the following 4 keys. So, you can move around in the buffer + and change its content while you are in insert mode. + + `ESC' + This key will take you back to vi mode. + + `C-h' + Delete previous character. + + `C-w' + Delete previous word. + + `C-z' + Typing this key has the same effect as typing ESC in emacs mode. + Thus typing `C-z x' in insert mode will have the same effect as + typing `ESC x' in emacs mode. + +  + File: vip, Node: Differences from Vi, Next: Undoing, Prev: Insert Mode, Up: Survey + + Differences from Vi + =================== + + The major differences from Vi are explained below. + + * Menu: + + * Undoing:: You can undo more in VIP. + * Changing:: Commands for changing the text. + * Searching:: Search commands. + * z Command:: You can now use zH, zM and zL as well as z- etc. + * Counts:: Some Vi commands which do not accept a count now + accept one. + * Marking:: You can now mark the current point, beginning of + the buffer etc. + * Region Commands:: You can now give a region as an argument for delete + commands etc. + * New Commands:: Some new commands not available in Vi are added. + * New Bindings:: Bindings of some keys are changed for the + convenience of editing under Emacs. + * Window Commands:: Commands for moving among windows etc. + * Buffer Commands:: Commands for selecting buffers etc. + * File Commands:: Commands for visiting files etc. + * Misc Commands:: Other useful commands. + +  + File: vip, Node: Undoing, Next: Changing, Prev: Differences from Vi, Up: Differences from Vi + + Undoing + ------- + + You can repeat undoing by the `.' key. So, `u' will undo a single + change, while `u . . .', for instance, will undo 4 previous changes. + Undo is undoable as in Vi. So the content of the buffer will be the + same before and after `u u'. + +  + File: vip, Node: Changing, Next: Searching, Prev: Undoing, Up: Differences from Vi + + Changing + -------- + + Some commands which change a small number of characters are executed + slightly differently. Thus, if point is at the beginning of a word + `foo' and you wished to change it to `bar' by typing `c w', then VIP + will prompt you for a new word in the minibuffer by the prompt `foo => + '. You can then enter `bar' followed by RET or ESC to complete the + command. Before you enter RET or ESC you can abort the command by + typing `C-g'. In general, you can abort a partially formed command by + typing `C-g'. + +  + File: vip, Node: Searching, Next: z Command, Prev: Changing, Up: Differences from Vi + + Searching + --------- + + As in Vi, searching is done by `/' and `?'. The string will be + searched literally by default. To invoke a regular expression search, + first execute the search command `/' (or `?') with empty search string. + (I.e, type `/' followed by RET.) A search for empty string will toggle + the search mode between vanilla search and regular expression search. + You cannot give an offset to the search string. (It is a limitation.) + By default, search will wrap around the buffer as in Vi. You can + change this by rebinding the variable `vip-search-wrap-around'. *Note + Customization::, for how to do this. + +  + File: vip, Node: z Command, Next: Counts, Prev: Searching, Up: Differences from Vi + + z Command + --------- + + For those of you who cannot remember which of `z' followed by RET, + `.' and `-' do what. You can also use `z' followed by `H', `M' and `L' + to place the current line in the Home (Middle, and Last) line of the + window. + +  + File: vip, Node: Counts, Next: Marking, Prev: z Command, Up: Differences from Vi + + Counts + ------ + + Some Vi commands which do not accept a count now accept one + + `p' + `P' + Given counts, text will be yanked (in Vi's sense) that many times. + Thus `3 p' is the same as `p p p'. + + `o' + `O' + Given counts, that many copies of text will be inserted. Thus `o a + b c ESC' will insert 3 lines of `abc' below the current line. + + `/' + `?' + Given a count N, N-th occurrence will be searched. + +  + File: vip, Node: Marking, Next: Region Commands, Prev: Counts, Up: Differences from Vi + + Marking + ------- + + Typing an `m' followed by a lower case character CH marks the point + to the register named CH as in Vi. In addition to these, we have + following key bindings for marking. + + `m <' + Set mark at the beginning of buffer. + + `m >' + Set mark at the end of buffer. + + `m .' + Set mark at point (and push old mark on mark ring). + + `m ,' + Jump to mark (and pop mark off the mark ring). + +  + File: vip, Node: Region Commands, Next: New Commands, Prev: Marking, Up: Differences from Vi + + Region Commands + --------------- + + Vi operators like `d', `c' etc. are usually used in combination with + motion commands. It is now possible to use current region as the + argument to these operators. (A "region" is a part of buffer delimited + by point and mark.) The key `r' is used for this purpose. Thus `d r' + will delete the current region. If `R' is used instead of `r' the + region will first be enlarged so that it will become the smallest + region containing the original region and consisting of whole lines. + Thus `m . d R' will have the same effect as `d d'. + +  + File: vip, Node: New Commands, Next: New Bindings, Prev: Region Commands, Up: Differences from Vi + + Some New Commands + ----------------- + + Note that the keys below (except for `R') are not used in Vi. + + `C-a' + Move point to the beginning of line. + + `C-n' + If you have two or more windows in the screen, this key will move + point to the next window. + + `C-o' + Insert a newline and leave point before it, and then enter insert + mode. + + `C-r' + Backward incremental search. + + `C-s' + Forward incremental search. + + `C-c' + `C-x' + `ESC' + These keys will exit from vi mode and return to emacs mode + temporarily. If you hit one of these keys, Emacs will be in emacs + mode and will believe that you hit that key in emacs mode. For + example, if you hit `C-x' followed by `2', then the current window + will be split into 2 and you will be in vi mode again. + + `\' + Escape to emacs mode. Hitting `\' will take you to emacs mode, + and you can execute a single Emacs command. After executing the + Emacs command you will be in vi mode again. You can give a count + before typing `\'. Thus `5 \ *', as well as `\ C-u 5 *', will + insert `*****' before point. Similarly `1 0 \ C-p' will move the + point 10 lines above the current line. + + `K' + Kill current buffer if it is not modified. Useful when you + selected a buffer which you did not want. + + `Q' + `R' + `Q' is for query replace and `R' is for replace. By default, + string to be replaced are treated literally. If you wish to do a + regular expression replace, first do replace with empty string as + the string to be replaced. In this way, you can toggle between + vanilla and regular expression replacement. + + `v' + `V' + These keys are used to Visit files. `v' will switch to a buffer + visiting file whose name can be entered in the minibuffer. `V' is + similar, but will use window different from the current window. + + `#' + If followed by a certain character CH, it becomes an operator whose + argument is the region determined by the motion command that + follows. Currently, CH can be one of `c', `C', `g', `q' and `s'. + + `# c' + Change upper case characters in the region to lower case + (`downcase-region'). + + `# C' + Change lower case characters in the region to upper case. For + instance, `# C 3 w' will capitalize 3 words from the current point + (`upcase-region'). + + `# g' + Execute last keyboard macro for each line in the region + (`vip-global-execute'). + + `# q' + Insert specified string at the beginning of each line in the region + (`vip-quote-region'). + + `# s' + Check spelling of words in the region (`spell-region'). + + `*' + Call last keyboard macro. + +  + File: vip, Node: New Bindings, Next: Window Commands, Prev: New Commands, Up: Differences from Vi + + New Key Bindings + ---------------- + + In VIP the meanings of some keys are entirely different from Vi. + These key bindings are done deliberately in the hope that editing under + Emacs will become easier. It is however possible to rebind these keys + to functions which behave similarly as in Vi. *Note Customizing Key + Bindings::, for details. + + `C-g' + `g' + In Vi, `C-g' is used to get information about the file associated + to the current buffer. Here, `g' will do that, and `C-g' is used + to abort a command (this is for compatibility with emacs mode.) + + `SPC' + `RET' + Now these keys will scroll up and down the text of current window. + Convenient for viewing the text. + + `s' + `S' + They are used to switch to a specified buffer. Useful for + switching to already existing buffer since buffer name completion + is provided. Also a default buffer will be given as part of the + prompt, to which you can switch by just typing RET key. `s' is + used to select buffer in the current window, while `S' selects + buffer in another window. + + `C' + `X' + These keys will exit from vi mode and return to emacs mode + temporarily. If you type `C' (`X'), Emacs will be in emacs mode + and will believe that you have typed `C-c' (`C-x', resp.) in emacs + mode. Moreover, if the following character you type is an upper + case letter, then Emacs will believe that you have typed the + corresponding control character. You will be in vi mode again + after the command is executed. For example, typing `X S' in vi + mode is the same as typing `C-x C-s' in emacs mode. You get the + same effect by typing `C-x C-s' in vi mode, but the idea here is + that you can execute useful Emacs commands without typing control + characters. For example, if you hit `X' (or `C-x') followed by + `2', then the current window will be split into 2 and you will be + in vi mode again. + + In addition to these, `ctl-x-map' is slightly modified: + + `X 3' + `C-x 3' + This is equivalent to `C-x 1 C-x 2' (1 + 2 = 3). + +  + File: vip, Node: Window Commands, Next: Buffer Commands, Prev: New Bindings, Up: Differences from Vi + + Window Commands + --------------- + + In this and following subsections, we give a summary of key bindings + for basic functions related to windows, buffers and files. + + `C-n' + Switch to next window. + + `X 1' + `C-x 1' + Delete other windows. + + `X 2' + `C-x 2' + Split current window into two windows. + + `X 3' + `C-x 3' + Show current buffer in two windows. + +  + File: vip, Node: Buffer Commands, Next: File Commands, Prev: Window Commands, Up: Differences from Vi + + Buffer Commands + --------------- + + `s' + Switch to the specified buffer in the current window + (`vip-switch-to-buffer'). + + `S' + Switch to the specified buffer in another window + (`vip-switch-to-buffer-other-window'). + + `K' + Kill the current buffer if it is not modified. + + `X S' + `C-x C-s' + Save the current buffer in the file associated to the buffer. + +  + File: vip, Node: File Commands, Next: Misc Commands, Prev: Buffer Commands, Up: Differences from Vi + + File Commands + ------------- + + `v' + Visit specified file in the current window. + + `V' + Visit specified file in another window. + + `X W' + `C-x C-w' + Write current buffer into the specified file. + + `X I' + `C-x C-i' + Insert specified file at point. + +  + File: vip, Node: Misc Commands, Next: Vi Commands, Prev: File Commands, Up: Differences from Vi + + Miscellaneous Commands + ---------------------- + + `X (' + `C-x (' + Start remembering keyboard macro. + + `X )' + `C-x )' + Finish remembering keyboard macro. + + `*' + Call last remembered keyboard macro. + + `X Z' + `C-x C-z' + Suspend Emacs. + + `Z Z' + Exit Emacs. + + `Q' + Query replace. + + `R' + Replace. + +  + File: vip, Node: Vi Commands, Next: Numeric Arguments, Prev: Misc Commands, Up: Top + + Vi Commands + *********** + + This chapter describes Vi commands other than Ex commands + implemented in VIP. Except for the last section which discusses insert + mode, all the commands described in this chapter are to be used in vi + mode. + + * Menu: + + * Numeric Arguments:: Many commands accept numeric arguments + * Important Keys:: Some very important keys. + * Buffers and Windows:: Commands for handling buffers and windows. + * Files:: Commands for handling files. + * Viewing the Buffer:: How you can view the current buffer. + * Mark Commands:: Marking positions in a buffer. + * Motion Commands:: Commands for moving point. + * Searching and Replacing:: Commands for searching and replacing. + * Modifying Commands:: Commands for modifying the buffer. + * Other Vi Commands:: Miscellaneous Commands. + * Commands in Insert Mode:: Commands for entering insert mode. + +  + File: vip, Node: Numeric Arguments, Next: Important Keys, Prev: Vi Commands, Up: Vi Commands + + Numeric Arguments + ================= + + Most Vi commands accept a "numeric argument" which can be supplied as + a prefix to the commands. A numeric argument is also called a "count". + In many cases, if a count is given, the command is executed that many + times. For instance, `5 d d' deletes 5 lines while simple `d d' + deletes a line. In this manual the metavariable N will denote a count. + +  + File: vip, Node: Important Keys, Next: Buffers and Windows, Prev: Numeric Arguments, Up: Vi Commands + + Important Keys + ============== + + The keys `C-g' and `C-l' are unique in that their associated + functions are the same in any of emacs, vi and insert mode. + + `C-g' + Quit. Cancel running or partially typed command (`keyboard-quit'). + + `C-l' + Clear the screen and reprint everything (`recenter'). + + In Emacs many commands are bound to the key strokes that start with + `C-x', `C-c' and ESC. These commands can be accessed from vi mode as + easily as from emacs mode. + + `C-x' + `C-c' + `ESC' + Typing one of these keys have the same effect as typing it in + emacs mode. Appropriate command will be executed according as the + keys you type after it. You will be in vi mode again after the + execution of the command. For instance, if you type `ESC <' (in + vi mode) then the cursor will move to the beginning of the buffer + and you will still be in vi mode. + + `C' + `X' + Typing one of these keys have the effect of typing the + corresponding control character in emacs mode. Moreover, if you + type an upper case character following it, that character will + also be translated to the corresponding control character. Thus + typing `X W' in vi mode is the same as typing `C-x C-w' in emacs + mode. You will be in vi mode again after the execution of a + command. + + `\' + Escape to emacs mode. Hitting the `\' key will take you to emacs + mode, and you can execute a single Emacs command. After executing + the Emacs command you will be in vi mode again. You can give a + count before typing `\'. Thus `5 \ +', as well as `\ C-u 5 +', + will insert `+++++' before point. + +  + File: vip, Node: Buffers and Windows, Next: Files, Prev: Important Keys, Up: Vi Commands + + Buffers and Windows + =================== + + In Emacs the text you edit is stored in a "buffer". See GNU Emacs + Manual, for details. There is always one "selected" buffer which is + called the "current buffer". + + You can see the contents of buffers through "windows" created by + Emacs. When you have multiple windows on the screen only one of them + is selected. Each buffer has a unique name, and each window has a mode + line which shows the name of the buffer associated with the window and + other information about the status of the buffer. You can change the + format of the mode line, but normally if you see `**' at the beginning + of a mode line it means that the buffer is "modified". If you write + out the content of the buffer to a file, then the buffer will become + not modified. Also if you see `%%' at the beginning of the mode line, + it means that the file associated with the buffer is write protected. + + We have the following commands related to windows and buffers. + + `C-n' + Move cursor to the next-window (`vip-next-window'). + + `X 1' + Delete other windows and make the selected window fill the screen + (`delete-other-windows'). + + `X 2' + Split current window into two windows (`split-window-vertically'). + + `X 3' + Show current buffer in two windows. + + `s BUFFER RET' + Select or create a buffer named BUFFER (`vip-switch-to-buffer'). + + `S BUFFER RET' + Similar but select a buffer named BUFFER in another window + (`vip-switch-to-buffer-other-window'). + + `K' + Kill the current buffer if it is not modified or if it is not + associated with a file + (`vip-kill-buffer'). + + `X B' + List the existing buffers (`list-buffers'). + + As "buffer name completion" is provided, you have only to type in + initial substring of the buffer name which is sufficient to identify it + among names of existing buffers. After that, if you hit TAB the rest + of the buffer name will be supplied by the system, and you can confirm + it by RET. The default buffer name to switch to will also be prompted, + and you can select it by giving a simple RET. See GNU Emacs Manual for + details of completion. + +  + File: vip, Node: Files, Next: Viewing the Buffer, Prev: Buffers and Windows, Up: Vi Commands + + Files + ===== + + We have the following commands related to files. They are used to + visit, save and insert files. + + `v FILE RET' + Visit specified file in the current window (`vip-find-file'). + + `V FILE RET' + Visit specified file in another window + (`vip-find-file-other-window'). + + `X S' + Save current buffer to the file associated with the buffer. If no + file is associated with the buffer, the name of the file to write + out the content of the buffer will be asked in the minibuffer. + + `X W FILE RET' + Write current buffer into a specified file. + + `X I FILE RET' + Insert a specified file at point. + + `g' + Give information on the file associated with the current buffer. + Tell you the name of the file associated with the buffer, the line + number of the current point and total line numbers in the buffer. + If no file is associated with the buffer, this fact will be + indicated by the null file name `""'. + + In Emacs, you can edit a file by "visiting" it. If you wish to + visit a file in the current window, you can just type `v'. Emacs + maintains the "default directory" which is specific to each buffer. + Suppose, for instance, that the default directory of the current buffer + is `/usr/masahiko/lisp/'. Then you will get the following prompt in the + minibuffer. + visit file: /usr/masahiko/lisp/ + + If you wish to visit, say, `vip.el' in this directory, then you can + just type `vip.el' followed by RET. If the file `vip.el' already + exists in the directory, Emacs will visit that file, and if not, the + file will be created. Emacs will use the file name (`vip.el', in this + case) as the name of the buffer visiting the file. In order to make + the buffer name unique, Emacs may append `<2>', `<3>' etc., to the + buffer name. As the "file name completion" is provided here, you can + sometime save typing. For instance, suppose there is only one file in + the default directory whose name starts with `v', that is `vip.el'. + Then if you just type `v TAB' then it will be completed to `vip.el'. + Thus, in this case, you just have to type `v v TAB RET' to visit + `/usr/masahiko/lisp/vip.el'. Continuing the example, let us now + suppose that you wished to visit the file + `/usr/masahiko/man/vip.texinfo'. Then to the same prompt which you get + after you typed `v', you can enter `/usr/masahiko/man/vip.texinfo' or + `../man/vip.texinfo' followed by RET. + + Use `V' instead of `v', if you wish to visit a file in another + window. + + You can verify which file you are editing by typing `g'. (You can + also type `X B' to get nformation on other buffers too.) If you type + `g' you will get an information like below in the echo area: + "/usr/masahiko/man/vip.texinfo" line 921 of 1949 + + After you edited the buffer (`vip.texinfo', in our example) for a + while, you may wish to save it in a file. If you wish to save it in + the file associated with the buffer (`/usr/masahiko/man/vip.texinfo', + in this case), you can just say `X S'. If you wish to save it in + another file, you can type `X W'. You will then get a similar prompt + as you get for `v', to which you can enter the file name. + +  + File: vip, Node: Viewing the Buffer, Next: Mark Commands, Prev: Files, Up: Vi Commands + + Viewing the Buffer + ================== + + In this and next section we discuss commands for moving around in the + buffer. These command do not change the content of the buffer. The + following commands are useful for viewing the content of the current + buffer. + + `SPC' + `C-f' + Scroll text of current window upward almost full screen. You can + go forward in the buffer by this command (`vip-scroll'). + + `RET' + `C-b' + Scroll text of current window downward almost full screen. You + can go backward in the buffer by this command (`vip-scroll-back'). + + `C-d' + Scroll text of current window upward half screen. You can go down + in the buffer by this command (`vip-scroll-down'). + + `C-u' + Scroll text of current window downward half screen. You can go up + in the buffer by this command (`vip-scroll-up'). + + `C-y' + Scroll text of current window upward by one line + (`vip-scroll-down-one'). + + `C-e' + Scroll text of current window downward by one line + (`vip-scroll-up-one'). + + You can repeat these commands by giving a count. Thus, `2 SPC' has the + same effect as `SPC SPC'. + + The following commands reposition point in the window. + + `z H' + `z RET' + Put point on the top (home) line in the window. So the current + line becomes the top line in the window. Given a count N, point + will be placed in the N-th line from top (`vip-line-to-top'). + + `z M' + `z .' + Put point on the middle line in the window. Given a count N, + point will be placed in the N-th line from the middle line + (`vip-line-to-middle'). + + `z L' + `z -' + Put point on the bottom line in the window. Given a count N, + point will be placed in the N-th line from bottom + (`vip-line-to-bottom'). + + `C-l' + Center point in window and redisplay screen (`recenter'). + +  + File: vip, Node: Mark Commands, Next: Motion Commands, Prev: Viewing the Buffer, Up: Vi Commands + + Mark Commands + ============= + + The following commands are used to mark positions in the buffer. + + `m CH' + Store current point in the register CH. CH must be a lower case + character between `a' and `z'. + + `m <' + Set mark at the beginning of current buffer. + + `m >' + Set mark at the end of current buffer. + + `m .' + Set mark at point. + + `m ,' + Jump to mark (and pop mark off the mark ring). + + Emacs uses the "mark ring" to store marked positions. The commands + `m <', `m >' and `m .' not only set mark but also add it as the latest + element of the mark ring (replacing the oldest one). By repeating the + command ``m ,'' you can visit older and older marked positions. You + will eventually be in a loop as the mark ring is a ring. + +  + File: vip, Node: Motion Commands, Next: Searching and Replacing, Prev: Mark Commands, Up: Vi Commands + + Motion Commands + =============== + + Commands for moving around in the current buffer are collected here. + These commands are used as an `argument' for the delete, change and + yank commands to be described in the next section. + + `h' + Move point backward by one character. Signal error if point is at + the beginning of buffer, but (unlike Vi) do not complain otherwise + (`vip-backward-char'). + + `l' + Move point backward by one character. Signal error if point is at + the end of buffer, but (unlike Vi) do not complain otherwise + (`vip-forward-char'). + + `j' + Move point to the next line keeping the current column. If point + is on the last line of the buffer, a new line will be created and + point will move to that line (`vip-next-line'). + + `k' + Move point to the previous line keeping the current column + (`vip-next-line'). + + `+' + Move point to the next line at the first non-white character. If + point is on the last line of the buffer, a new line will be + created and point will move to the beginning of that line + (`vip-next-line-at-bol'). + + `-' + Move point to the previous line at the first non-white character + (`vip-previous-line-at-bol'). + + If a count is given to these commands, the commands will be repeated + that many times. + + `0' + Move point to the beginning of line (`vip-beginning-of-line'). + + `^' + Move point to the first non-white character on the line + (`vip-bol-and-skip-white'). + + `$' + Move point to the end of line (`vip-goto-eol'). + + `N |' + Move point to the N-th column on the line (`vip-goto-col'). + + Except for the `|' command, these commands neglect a count. + + `w' + Move point forward to the beginning of the next word + (`vip-forward-word'). + + `W' + Move point forward to the beginning of the next word, where a + "word" is considered as a sequence of non-white characters + (`vip-forward-Word'). + + `b' + Move point backward to the beginning of a word + (`vip-backward-word'). + + `B' + Move point backward to the beginning of a word, where a word is + considered as a sequence of non-white characters + (`vip-forward-Word'). + + `e' + Move point forward to the end of a word (`vip-end-of-word'). + + `E' + Move point forward to the end of a word, where a word is + considered as a sequence of non-white characters + (`vip-end-of-Word'). + + Here the meaning of the word `word' for the `w', `b' and `e' commands + is determined by the "syntax table" effective in the current buffer. + Each major mode has its syntax mode, and therefore the meaning of a + word also changes as the major mode changes. See GNU Emacs Manual for + details of syntax table. + + `H' + Move point to the beginning of the home (top) line of the window. + Given a count N, go to the N-th line from top (`vip-window-top'). + + `M' + Move point to the beginning of the middle line of the window. + Given a count N, go to the N-th line from the middle line + (`vip-window-middle'). + + `L' + Move point to the beginning of the lowest (bottom) line of the + window. Given count, go to the N-th line from bottom + (`vip-window-bottom'). + + These commands can be used to go to the desired line visible on the + screen. + + `(' + Move point backward to the beginning of the sentence + (`vip-backward-sentence'). + + `)' + Move point forward to the end of the sentence + (`vip-forward-sentence'). + + `{' + Move point backward to the beginning of the paragraph + (`vip-backward-paragraph'). + + `}' + Move point forward to the end of the paragraph + (`vip-forward-paragraph'). + + A count repeats the effect for these commands. + + `G' + Given a count N, move point to the N-th line in the buffer on the + first non-white character. Without a count, go to the end of the + buffer (`vip-goto-line'). + + `` `' + Exchange point and mark (`vip-goto-mark'). + + `` CH' + Move point to the position stored in the register CH. CH must be + a lower case letter. + + `' '' + Exchange point and mark, and then move point to the first non-white + character on the line (`vip-goto-mark-and-skip-white'). + + `' CH' + Move point to the position stored in the register CH and skip to + the first non-white character on the line. CH must be a lower + case letter. + + `%' + Move point to the matching parenthesis if point is looking at `(', + `)', `{', `}', `[' or `]' + (`vip-paren-match'). + + The command `G' mark point before move, so that you can return to the + original point by `` `'. The original point will also be stored in the + mark ring. + + The following commands are useful for moving points on the line. A + count will repeat the effect. + + `f CH' + Move point forward to the character CH on the line. Signal error + if CH could not be found (`vip-find-char-forward'). + + `F CH' + Move point backward to the character CH on the line. Signal error + if CH could not be found (`vip-find-char-backward'). + + `t CH' + Move point forward upto the character CH on the line. Signal + error if CH could not be found (`vip-goto-char-forward'). + + `T CH' + Move point backward upto the character CH on the line. Signal + error if CH could not be found (`vip-goto-char-backward'). + + `;' + Repeat previous `f', `t', `F' or `T' command (`vip-repeat-find'). + + `,' + Repeat previous `f', `t', `F' or `T' command, in the opposite + direction (`vip-repeat-find-opposite'). + +  + File: vip, Node: Searching and Replacing, Next: Modifying Commands, Prev: Motion Commands, Up: Vi Commands + + Searching and Replacing + ======================= + + Following commands are available for searching and replacing. + + `/ STRING RET' + Search the first occurrence of the string STRING forward starting + from point. Given a count N, the N-th occurrence of STRING will + be searched. If the variable `vip-re-search' has value `t' then + "regular expression" search is done and the string matching the + regular expression STRING is found. If you give an empty string + as STRING then the search mode will change from vanilla search to + regular expression search and vice versa (`vip-search-forward'). + + `? STRING RET' + Same as `/', except that search is done backward + (`vip-search-backward'). + + `n' + Search the previous search pattern in the same direction as before + (`vip-search-next'). + + `N' + Search the previous search pattern in the opposite direction + (`vip-search-Next'). + + `C-s' + Search forward incrementally. See GNU Emacs Manual for details + (`isearch-forward'). + + `C-r' + Search backward incrementally (`isearch-backward'). + + `R STRING RET NEWSTRING' + There are two modes of replacement, "vanilla" and "regular + expression". If the mode is vanilla you will get a prompt + `Replace string:', and if the mode is regular expression you will + ge a prompt `Replace regexp:'. The mode is initially vanilla, but + you can toggle these modes by giving a null string as STRING. If + the mode is vanilla, this command replaces every occurrence of + STRING with NEWSTRING. If the mode is regular expression, STRING + is treated as a regular expression and every string matching the + regular expression is replaced with NEWSTRING + (`vip-replace-string'). + + `Q STRING RET NEWSTRING' + Same as `R' except that you will be asked form confirmation before + each replacement + (`vip-query-replace'). + + `r CH' + Replace the character point is looking at by the character CH. + Give count, replace that many characters by CH + (`vip-replace-char'). + + The commands `/' and `?' mark point before move, so that you can return + to the original point by `` `'. + +  + File: vip, Node: Modifying Commands, Next: Delete Commands, Prev: Searching and Replacing, Up: Vi Commands + + Modifying Commands + ================== + + In this section, commands for modifying the content of a buffer are + described. These commands affect the region determined by a motion + command which is given to the commands as their argument. + + We classify motion commands into "point commands" and "line + commands". The point commands are as follows: + `h', `l', `0', `^', `$', `w', `W', `b', `B', `e', `E', `(', `)', `/', `?', ``', `f', `F', `t', `T', `%', `;', `,' + + The line commands are as follows: + `j', `k', `+', `-', `H', `M', `L', `{', `}', `G', `'' + + If a point command is given as an argument to a modifying command, the + region determined by the point command will be affected by the modifying + command. On the other hand, if a line command is given as an argument + to a modifying command, the region determined by the line command will + be enlarged so that it will become the smallest region properly + containing the region and consisting of whole lines (we call this + process "expanding the region"), and then the enlarged region will be + affected by the modifying command. + + * Menu: + + * Delete Commands:: Commands for deleting text. + * Yank Commands:: Commands for yanking text in Vi's sense. + * Put Back Commands:: Commands for putting back deleted/yanked text. + * Change Commands:: Commands for changing text. + * Repeating and Undoing Modifications:: + +  + File: vip, Node: Delete Commands, Next: Yank Commands, Prev: Modifying Commands, Up: Modifying Commands + + Delete Commands + --------------- + + `d MOTION-COMMAND' + Delete the region determined by the motion command MOTION-COMMAND. + + For example, `d $' will delete the region between point and end of + current line since `$' is a point command that moves point to end of + line. `d G' will delete the region between the beginning of current + line and end of the buffer, since `G' is a line command. A count given + to the command above will become the count for the associated motion + command. Thus, `3 d w' will delete three words. + + It is also possible to save the deleted text into a register you + specify. For example, you can say `" t 3 d w' to delete three words + and save it to register `t'. The name of a register is a lower case + letter between `a' and `z'. If you give an upper case letter as an + argument to a delete command, then the deleted text will be appended to + the content of the register having the corresponding lower case letter + as its name. So, `" T d w' will delete a word and append it to + register `t'. Other modifying commands also accept a register name as + their argument, and we will not repeat similar explanations. + + We have more delete commands as below. + + `d d' + Delete a line. Given a count N, delete N lines. + + `d r' + Delete current region. + + `d R' + Expand current region and delete it. + + `D' + Delete to the end of a line (`vip-kill-line'). + + `x' + Delete a character after point. Given N, delete N characters + (`vip-delete-char'). + + `DEL' + Delete a character before point. Given N, delete N characters + (`vip-delete-backward-char'). + +  + File: vip, Node: Yank Commands, Next: Put Back Commands, Prev: Delete Commands, Up: Modifying Commands + + Yank Commands + ------------- + + Yank commands "yank" a text of buffer into a (usually anonymous) + register. Here the word `yank' is used in Vi's sense. Thus yank + commands do not alter the content of the buffer, and useful only in + combination with commands that put back the yanked text into the buffer. + + `y MOTION-COMMAND' + Yank the region determined by the motion command MOTION-COMMAND. + + For example, `y $' will yank the text between point and the end of line + into an anonymous register, while `"c y $' will yank the same text into + register `c'. + + Use the following command to yank consecutive lines of text. + + `y y' + `Y' + Yank a line. Given N, yank N lines (`vip-yank-line'). + + `y r' + Yank current region. + + `y R' + Expand current region and yank it. + +  + File: vip, Node: Put Back Commands, Next: Change Commands, Prev: Yank Commands, Up: Modifying Commands + + Put Back Commands + ----------------- + + Deleted or yanked texts can be put back into the buffer by the + command below. + + `p' + Insert, after the character point is looking at, most recently + deleted/yanked text from anonymous register. Given a register name + argument, the content of the named register will be put back. + Given a count, the command will be repeated that many times. This + command also checks if the text to put back ends with a new line + character, and if so the text will be put below the current line + (`vip-put-back'). + + `P' + Insert at point most recently deleted/yanked text from anonymous + register. Given a register name argument, the content of the + named register will be put back. Given a count, the command will + be repeated that many times. This command also checks if the text + to put back ends with a new line character, and if so the text + will be put above the current line rather than at point + (`vip-Put-back'). + + Thus, `" c p' will put back the content of the register `c' into the + buffer. It is also possible to specify "number register" which is a + numeral between `1' and `9'. If the number register N is specified, + N-th previously deleted/yanked text will be put back. It is an error + to specify a number register for the delete/yank commands. + +  + File: vip, Node: Change Commands, Next: Repeating and Undoing Modifications, Prev: Put Back Commands, Up: Modifying Commands + + Change Commands + --------------- + + Most commonly used change command takes the following form. + + `c MOTION-COMMAND' + Replace the content of the region determined by the motion command + MOTION-COMMAND by the text you type. If the motion command is a + point command then you will type the text into minibuffer, and if + the motion command is a line command then the region will be + deleted first and you can insert the text in INSERT MODE. + + For example, if point is at the beginning of a word `foo' and you wish + to change it to `bar', you can type `c w'. Then, as `w' is a point + command, you will get the prompt `foo =>' in the minibuffer, for which + you can type `b a r RET' to complete the change command. + + `c c' + Change a line. Given a count, that many lines are changed. + + `c r' + Change current region. + + `c R' + Expand current region and change it. + +  + File: vip, Node: Repeating and Undoing Modifications, Next: Other Vi Commands, Prev: Change Commands, Up: Modifying Commands + + Repeating and Undoing Modifications + ----------------------------------- + + VIP records the previous modifying command, so that it is easy to + repeat it. It is also very easy to undo changes made by modifying + commands. + + `u' + Undo the last change. You can undo more by repeating undo by the + repeat command `.'. For example, you can undo 5 previous changes + by typing `u....'. If you type `uu', then the second `u' undoes + the first undo command (`vip-undo'). + + `.' + Repeat the last modifying command. Given count N it becomes the + new count for the repeated command. Otherwise, the count for the + last modifying command is used again (`vip-repeat'). + +  + File: vip, Node: Other Vi Commands, Next: Commands in Insert Mode, Prev: Repeating and Undoing Modifications, Up: Vi Commands + + Other Vi Commands + ================= + + Miscellaneous Vi commands are collected here. + + `Z Z' + Exit Emacs. If modified buffers exist, you will be asked whether + you wish to save them or not (`save-buffers-kill-emacs'). + + `! MOTION-COMMAND FORMAT-COMMAND' + `N ! ! FORMAT-COMMAND' + The region determined by the motion command MOTION-COMMAND will be + given to the shell command FORMAT-COMMAND and the region will be + replaced by its output. If a count is given, it will be passed to + MOTION-COMMAND. For example, `3!Gsort' will sort the region + between point and the 3rd line. If `!' is used instead of + MOTION-COMMAND then N lines will be processed by FORMAT-COMMAND + (`vip-command-argument'). + + `J' + Join two lines. Given count, join that many lines. A space will + be inserted at each junction (`vip-join-lines'). + + `< MOTION-COMMAND' + `N < <' + Shift region determined by the motion command MOTION-COMMAND to + left by SHIFT-WIDTH (default is 8). If `<' is used instead of + MOTION-COMMAND then shift N lines + (`vip-command-argument'). + + `> MOTION-COMMAND' + `N > >' + Shift region determined by the motion command MOTION-COMMAND to + right by SHIFT-WIDTH (default is 8). If `<' is used instead of + MOTION-COMMAND then shift N lines + (`vip-command-argument'). + + `= MOTION-COMMAND' + Indent region determined by the motion command MOTION-COMMAND. If + `=' is used instead of MOTION-COMMAND then indent N lines + (`vip-command-argument'). + + `*' + Call last remembered keyboard macro. + + `#' + A new vi operator. *Note New Commands::, for more details. + + The following keys are reserved for future extensions, and currently + assigned to a function that just beeps (`vip-nil'). + + &, @, U, [, ], _, q, ~ + + VIP uses a special local keymap to interpret key strokes you enter + in vi mode. The following keys are bound to NIL in the keymap. + Therefore, these keys are interpreted by the global keymap of Emacs. + We give below a short description of the functions bound to these keys + in the global keymap. See GNU Emacs Manual for details. + + `C-@' + Set mark and push previous mark on mark ring (`set-mark-command'). + + `TAB' + Indent line for current major mode (`indent-for-tab-command'). + + `LFD' + Insert a newline, then indent according to mode + (`newline-and-indent'). + + `C-k' + Kill the rest of the current line; before a newline, kill the + newline. With prefix argument, kill that many lines from point. + Negative arguments kill lines backward (`kill-line'). + + `C-l' + Clear the screen and reprint everything (`recenter'). + + `N C-p' + Move cursor vertically up N lines (`previous-line'). + + `C-q' + Read next input character and insert it. Useful for inserting + control characters + (`quoted-insert'). + + `C-r' + Search backward incrementally (`isearch-backward'). + + `C-s' + Search forward incrementally (`isearch-forward'). + + `N C-t' + Interchange charcters around point, moving forward one character. + With count N, take character before point and drag it forward past + N other characters. If no argument and at end of line, the + previous two characters are exchanged (`transpose-chars'). + + `N C-v' + Scroll text upward N lines. If N is not given, scroll near full + screen (`scroll-up'). + + `C-w' + Kill between point and mark. The text is save in the kill ring. + The command `P' or `p' can retrieve it from kill ring + (`kill-region'). + diff -rcP emacs-19.7/info/vip-2 emacs-19.8/info/vip-2 *** emacs-19.7/info/vip-2 --- emacs-19.8/info/vip-2 Tue May 25 03:20:22 1993 *************** *** 0 **** --- 1,649 ---- + This is Info file ../info/vip, produced by Makeinfo-1.54 from the input + file vip.texinfo. + + Distribution + ************ + + Copyright (C) 1987 Masahiko Sato. + + Permission is granted to make and distribute verbatim copies of this + manual provided the copyright notice and this permission notice are + preserved on all copies. + + Permission is granted to copy and distribute modified versions of + this manual under the conditions for verbatim copying, provided that + the entire resulting derived work is distributed under the terms of a + permission notice identical to this one. + + Permission is granted to copy and distribute translations of this + manual into another language, under the same conditions as for modified + versions. + +  + File: vip, Node: Commands in Insert Mode, Next: Ex Commands, Prev: Other Vi Commands, Up: Vi Commands + + Insert Mode + =========== + + You can enter insert mode by one of the following commands. In + addition to these, you will enter insert mode if you give a change + command with a line command as the motion command. Insert commands are + also modifying commands and you can repeat them by the repeat command + `.' (`vip-repeat'). + + `i' + Enter insert mode at point (`vip-insert'). + + `I' + Enter insert mode at the first non white character on the line + (`vip-Insert'). + + `a' + Move point forward by one character and then enter insert mode + (`vip-append'). + + `A' + Enter insert mode at end of line (`vip-Append'). + + `o' + Open a new line below the current line and enter insert mode + (`vip-open-line'). + + `O' + Open a new line above the current line and enter insert mode + (`vip-Open-line'). + + `C-o' + Insert a newline and leave point before it, and then enter insert + mode + (`vip-open-line-at-point'). + + Insert mode is almost like emacs mode. Only the following 4 keys + behave differently from emacs mode. + + `ESC' + This key will take you back to vi mode (`vip-change-mode-to-vi'). + + `C-h' + Delete previous character (`delete-backward-char'). + + `C-w' + Delete previous word (`vip-delete-backward-word'). + + `C-z' + This key simulates ESC key in emacs mode. For instance, typing + `C-z x' in insert mode iw the same as typing `ESC x' in emacs mode + (`vip-ESC'). + + You can also bind `C-h' to `help-command' if you like. (*Note + Customizing Key Bindings::, for details.) Binding `C-h' to + `help-command' has the effect of making the meaning of `C-h' uniform + among emacs, vi and insert modes. + + When you enter insert mode, VIP records point as the start point of + insertion, and when you leave insert mode the region between point and + start point is saved for later use by repeat command etc. Therefore, + repeat command will not really repeat insertion if you move point by + emacs commands while in insert mode. + +  + File: vip, Node: Ex Commands, Next: Ex Command Reference, Prev: Commands in Insert Mode, Up: Top + + Ex Commands + *********** + + In vi mode, you can execute an Ex command EX-COMMAND by typing: + `: EX-COMMAND RET' + Every Ex command follows the following pattern: + ADDRESS COMMAND `!' PARAMETERS COUNT FLAGS + + where all parts are optional. For the syntax of "address", the reader + is referred to the reference manual of Ex. + + In the current version of VIP, searching by Ex commands is always + "magic". That is, search patterns are always treated as "regular + expressions". For example, a typical forward search would be invoked by + `:/PAT/'. If you wish to include `/' as part of PAT you must preceded + it by `\'. VIP strips off these `\''s before `/' and the resulting PAT + becomes the actual search pattern. Emacs provides a different and + richer class or regular expressions than Vi/Ex, and VIP uses Emacs' + regular expressions. See GNU Emacs Manual for details of regular + expressions. + + Several Ex commands can be entered in a line by separating them by a + pipe character `|'. + + * Menu: + + * Ex Command Reference:: Explain all the Ex commands available in VIP. + +  + File: vip, Node: Ex Command Reference, Next: Customization, Prev: Ex Commands, Up: Ex Commands + + Ex Command Reference + ==================== + + In this section we briefly explain all the Ex commands supported by + VIP. Most Ex commands expect ADDRESS as their argument, and they use + default addresses if they are not explicitly given. In the following, + such default addresses will be shown in parentheses. + + Most command names can and preferably be given in abbreviated forms. + In the following, optional parts of command names will be enclosed in + brackets. For example, `co[py]' will mean that copy command can be + give as `co' or `cop' or `copy'. + + If COMMAND is empty, point will move to the beginning of the line + specified by the ADDRESS. If ADDRESS is also empty, point will move to + the beginning of the current line. + + Some commands accept "flags" which are one of `p', `l' and `#'. If + FLAGS are given, the text affected by the commands will be displayed on + a temporary window, and you will be asked to hit return to continue. + In this way, you can see the text affected by the commands before the + commands will be executed. If you hit `C-g' instead of RET then the + commands will be aborted. Note that the meaning of FLAGS is different + in VIP from that in Vi/Ex. + + `(.,.) co[py] ADDR FLAGS' + `(.,.) t ADDR FLAGS' + Place a copy of specified lines after ADDR. If ADDR is `0', it + will be placed before the first line. + + `(.,.) d[elete] REGISTER COUNT FLAGS' + Delete specified lines. Text will be saved in a named REGISTER if + a lower case letter is given, and appended to a register if a + capital letter is given. + + `e[dit] ! +ADDR FILE' + `e[x] ! +ADDR FILE' + `vi[sual] ! +ADDR FILE' + Edit a new file FILE in the current window. The command will abort + if current buffer is modified, which you can override by giving + `!'. If `+'ADDR is given, ADDR becomes the current line. + + `file' + Give information about the current file. + + `(1,$) g[lobal] ! /PAT/ CMDS' + `(1,$) v /PAT/ CMDS' + Among specified lines first mark each line which matches the + regular expression PAT, and then execute CMDS on each marked line. + If `!' is given, CMDS will be executed on each line not matching + PAT. `v' is same as `g!'. + + `(.,.+1) j[oin] ! COUNT FLAGS' + Join specified lines into a line. Without `!', a space character + will be inserted at each junction. + + `(.) k CH' + `(.) mar[k] CH' + Mark specified line by a lower case character CH. Then the + addressing form `''CH will refer to this line. No white space is + required between `k' and CH. A white space is necessary between + `mark' and CH, however. + + `map CH RHS' + Define a macro for vi mode. After this command, the character CH + will be expanded to RHS in vi mode. + + `(.,.) m[ove] ADDR' + Move specified lines after ADDR. + + `(.) pu[t] REGISTER' + Put back previously deleted or yanked text. If REGISTER is given, + the text saved in the register will be put back; otherwise, last + deleted or yanked text will be put back. + + `q[uit] !' + Quit from Emacs. If modified buffers with associated files exist, + you will be asked whether you wish to save each of them. At this + point, you may choose not to quit, by hitting `C-g'. If `!' is + given, exit from Emacs without saving modified buffers. + + `(.) r[ead] FILE' + Read in the content of the file FILE after the specified line. + + `(.) r[ead] ! COMMAND' + Read in the output of the shell command COMMAND after the specified + line. + + `se[t]' + Set a variable's value. *Note Customizing Constants::, for the + list of variables you can set. + + `sh[ell]' + Run a subshell in a window. + + `(.,.) s[ubstitute] /PAT/REPL/ OPTIONS COUNT FLAGS' + `(.,.) & OPTIONS COUNT FLAGS' + On each specified line, the first occurrence of string matching + regular expression PAT is replaced by replacement pattern REPL. + Option characters are `g' and `c'. If global option character `g' + appears as part of OPTIONS, all occurrences are substituted. If + confirm option character `c' appears, you will be asked to give + confirmation before each substitution. If `/PAT/REPL/' is + missing, the last substitution is repeated. + + `st[op]' + Suspend Emacs. + + `ta[g] TAG' + Find first definition of TAG. If no TAG is given, previously + given TAG is used and next alternate definition is find. By + default, the file `TAGS' in the current directory becomes the + "selected tag table". You can select another tag table by `set' + command. *Note Customizing Constants::, for details. + + `und[o]' + Undo the last change. + + `unm[ap] CH' + The macro expansion associated with CH is removed. + + `ve[rsion]' + Tell the version number of VIP. + + `(1,$) w[rite] ! FILE' + Write out specified lines into file FILE. If no FILE is given, + text will be written to the file associated to the current buffer. + Unless `!' is given, if FILE is different from the file + associated to the current buffer and if the file FILE exists, the + command will not be executed. Unlike Ex, FILE becomes the file + associated to the current buffer. + + `(1,$) w[rite]>> FILE' + Write out specified lines at the end of file FILE. FILE becomes + the file associated to the current buffer. + + `(1,$) wq ! FILE' + Same as `write' and then `quit'. If `!' is given, same as `write + !' then `quit'. + + `(.,.) y[ank] REGISTER COUNT' + Save specified lines into register REGISTER. If no register is + specified, text will be saved in an anonymous register. + + `ADDR ! COMMAND' + Execute shell command COMMAND. The output will be shown in a new + window. If ADDR is given, specified lines will be used as standard + input to COMMAND. + + `($) =' + Print the line number of the addressed line. + + `(.,.) > COUNT FLAGS' + Shift specified lines to the right. The variable `vip-shift-width' + (default value is 8) determines the amount of shift. + + `(.,.) < COUNT FLAGS' + Shift specified lines to the left. The variable `vip-shift-width' + (default value is 8) determines the amount of shift. + + `(.,.) ~ OPTIONS COUNT FLAGS' + Repeat the previous `substitute' command using previous search + pattern as PAT for matching. + + The following Ex commands are available in Vi, but not implemented + in VIP. + `abbreviate', `list', `next', `print', `preserve', `recover', `rewind', `source', + `unabbreviate', `xit', `z' + +  + File: vip, Node: Customization, Next: Customizing Constants, Prev: Ex Command Reference, Up: Top + + Customization + ************* + + If you have a file called `.vip' in your home directory, then it + will also be loaded when VIP is loaded. This file is thus useful for + customizing VIP. + + * Menu: + + * Customizing Constants:: How to change values of constants. + * Customizing Key Bindings:: How to change key bindings. + +  + File: vip, Node: Customizing Constants, Next: Customizing Key Bindings, Prev: Customization, Up: Customization + + Customizing Constants + ===================== + + An easy way to customize VIP is to change the values of constants + used in VIP. Here is the list of the constants used in VIP and their + default values. + + `vip-shift-width 8' + The number of columns shifted by `>' and `<' command. + + `vip-re-replace nil' + If `t' then do regexp replace, if `nil' then do string replace. + + `vip-search-wrap-around t' + If `t', search wraps around the buffer. + + `vip-re-search nil' + If `t' then search is reg-exp search, if `nil' then vanilla search. + + `vip-case-fold-search nil' + If `t' search ignores cases. + + `vip-re-query-replace nil' + If `t' then do reg-exp replace in query replace. + + `vip-open-with-indent nil' + If `t' then indent to the previous current line when open a new + line by `o' or `O' command. + + `vip-tags-file-name "TAGS"' + The name of the file used as the tag table. + + `vip-help-in-insert-mode nil' + If `t' then C-h is bound to `help-command' in insert mode, if + `nil' then it sis bound to `delete-backward-char'. + + You can reset these constants in VIP by the Ex command `set'. Or you + can include a line like this in your `.vip' file: + (setq vip-case-fold-search t) + +  + File: vip, Node: Customizing Key Bindings, Prev: Customizing Constants, Up: Customization + + Customizing Key Bindings + ======================== + + VIP uses `vip-command-mode-map' as the "local keymap" for vi mode. + For example, in vi mode, SPC is bound to the function `vip-scroll'. + But, if you wish to make SPC and some other keys behave like Vi, you + can include the following lines in your `.vip' file. + + (define-key vip-command-mode-map "\C-g" 'vip-info-on-file) + (define-key vip-command-mode-map "\C-h" 'vip-backward-char) + (define-key vip-command-mode-map "\C-m" 'vip-next-line-at-bol) + (define-key vip-command-mode-map " " 'vip-forward-char) + (define-key vip-command-mode-map "g" 'vip-keyboard-quit) + (define-key vip-command-mode-map "s" 'vip-substitute) + (define-key vip-command-mode-map "C" 'vip-change-to-eol) + (define-key vip-command-mode-map "R" 'vip-change-to-eol) + (define-key vip-command-mode-map "S" 'vip-substitute-line) + (define-key vip-command-mode-map "X" 'vip-delete-backward-char) + + Key Index + ********* + + * Menu: + + * 000 C-@ (set-mark-command): Other Vi Commands. + * 001 C-a (vip-beginning-of-line): New Commands. + * 002 C-b (vip-scroll-back): Viewing the Buffer. + * 003 C-c (vip-ctl-c): New Commands. + * 003 C-c (vip-ctl-c): Important Keys. + * 004 C-d (vip-scroll-up): Viewing the Buffer. + * 005 C-e (vip-scroll-up-one): Viewing the Buffer. + * 006 C-f (vip-scroll-back): Viewing the Buffer. + * 007 C-g (vip-keyboard-quit): Changing. + * 007 C-g (vip-keyboard-quit): Important Keys. + * 007 C-g (vip-keyboard-quit): New Bindings. + * 010 C-h (delete-backward-char) (insert mode): Commands in Insert Mode. + * 010 C-h (vip-delete-backward-char) (insert mode): Insert Mode. + * 011 TAB (indent-for-tab-command): Other Vi Commands. + * 012 LFD (newline-and-indent): Other Vi Commands. + * 013 C-k (kill-line): Other Vi Commands. + * 014 C-l (recenter): Important Keys. + * 014 C-l (recenter): Other Vi Commands. + * 015 RET (vip-scroll-back): New Bindings. + * 015 RET (vip-scroll-back): Viewing the Buffer. + * 016 C-n (vip-next-window): Window Commands. + * 016 C-n (vip-next-window): Buffers and Windows. + * 016 C-n (vip-next-window): New Commands. + * 017 C-o (vip-open-line-at-point): New Commands. + * 017 C-o (vip-open-line-at-point): Commands in Insert Mode. + * 020 C-p (previous-line): Other Vi Commands. + * 021 C-q (quoted-insert): Other Vi Commands. + * 022 C-r (isearch-backward): Other Vi Commands. + * 022 C-r (isearch-backward): New Commands. + * 022 C-r (isearch-backward): Searching and Replacing. + * 023 C-s (isearch-forward): Other Vi Commands. + * 023 C-s (isearch-forward): New Commands. + * 023 C-s (isearch-forward): Searching and Replacing. + * 024 C-t (transpose-chars): Other Vi Commands. + * 025 C-u (vip-scroll-down): Viewing the Buffer. + * 026 C-v (scroll-up): Other Vi Commands. + * 027 C-w (kill-region): Other Vi Commands. + * 027 C-w (vip-delete-backward-word) (insert mode): Insert Mode. + * 027 C-w (vip-delete-backward-word) (insert mode): Commands in Insert Mode. + * 0300 C-x (vip-ctl-x): Important Keys. + * 0300 C-x (vip-ctl-x): New Commands. + * 0301 C-x C-z (suspend-emacs): Modes in VIP. + * 031 C-y (vip-scroll-down-one): Viewing the Buffer. + * 032 C-z (vip-change-mode-to-vi): Modes in VIP. + * 032 C-z (vip-change-mode-to-vi): Emacs Mode. + * 032 C-z (vip-ESC) (insert mode): Insert Mode. + * 032 C-z (vip-ESC) (insert mode): Commands in Insert Mode. + * 033 ESC (vip-change-mode-to-vi) (insert mode): Commands in Insert Mode. + * 033 ESC (vip-change-mode-to-vi) (insert mode): Insert Mode. + * 033 ESC (vip-ESC): Important Keys. + * 033 ESC (vip-ESC): New Commands. + * 040 SPC (vip-scroll): New Bindings. + * 040 SPC (vip-scroll): Viewing the Buffer. + * 041 ! (vip-command-argument): Other Vi Commands. + * 042 " (vip-command-argument): Delete Commands. + * 0430 # (vip-command-argument): New Commands. + * 0431 # C (upcase-region): New Commands. + * 0432 # c (downcase-region): New Commands. + * 0432 # g (vip-global-execute): New Commands. + * 0432 # q (vip-quote-region): New Commands. + * 0432 # s (spell-region): New Commands. + * 044 $ (vip-goto-eol): Motion Commands. + * 045 % (vip-paren-match): Motion Commands. + * 046 & (vip-nil): Other Vi Commands. + * 047 ' (vip-goto-mark-and-skip-white): Motion Commands. + * 050 ( (vip-backward-sentence): Motion Commands. + * 051 ) (vip-forward-sentence): Motion Commands. + * 052 * (vip-call-last-kbd-macro): Other Vi Commands. + * 052 * (vip-call-last-kbd-macro): New Commands. + * 052 * (vip-call-last-kbd-macro): Misc Commands. + * 053 + (vip-next-line-at-bol): Motion Commands. + * 054 , (vip-repeat-find-opposite): Motion Commands. + * 055 - (vip-previous-line-at-bol): Motion Commands. + * 056 . (vip-repeat): Undoing. + * 056 . (vip-repeat): Repeating and Undoing Modifications. + * 057 / (vip-search-forward): Searching and Replacing. + * 057 / (vip-search-forward): Counts. + * 057 / (vip-search-forward): Searching. + * 060 0 (vip-beginning-of-line): Motion Commands. + * 061 1 (numeric argument): Numeric Arguments. + * 062 2 (numeric argument): Numeric Arguments. + * 063 3 (numeric argument): Numeric Arguments. + * 064 4 (numeric argument): Numeric Arguments. + * 065 5 (numeric argument): Numeric Arguments. + * 066 6 (numeric argument): Numeric Arguments. + * 067 7 (numeric argument): Numeric Arguments. + * 068 8 (numeric argument): Numeric Arguments. + * 069 9 (numeric argument): Numeric Arguments. + * 072 : (vip-ex): Ex Commands. + * 073 ; (vip-repeat-find): Motion Commands. + * 074 < (vip-command-argument): Other Vi Commands. + * 075 = (vip-command-argument): Other Vi Commands. + * 076 > (vip-command-argument): Other Vi Commands. + * 077 ? (vip-search-backward): Counts. + * 077 ? (vip-search-backward): Searching and Replacing. + * 077 ? (vip-search-backward): Searching. + * 100 @ (vip-nil): Other Vi Commands. + * 101 A (vip-Append): Commands in Insert Mode. + * 102 B (vip-backward-Word): Motion Commands. + * 103 C (vip-ctl-c-equivalent): New Bindings. + * 103 C (vip-ctl-c-equivalent): Important Keys. + * 104 D (vip-kill-line): Delete Commands. + * 105 E (vip-end-of-Word): Motion Commands. + * 106 F (vip-find-char-backward): Motion Commands. + * 107 G (vip-goto-line): Motion Commands. + * 110 H (vip-window-top): Motion Commands. + * 111 I (vip-Insert): Commands in Insert Mode. + * 112 J (vip-join-lines): Other Vi Commands. + * 113 K (vip-kill-buffer): New Commands. + * 113 K (vip-kill-buffer): Buffer Commands. + * 113 K (vip-kill-buffer): Buffers and Windows. + * 114 L (vip-window-bottom): Motion Commands. + * 115 M (vip-window-middle): Motion Commands. + * 116 N (vip-search-Next): Searching and Replacing. + * 117 O (vip-Open-line): Commands in Insert Mode. + * 117 O (vip-Open-line): Counts. + * 120 P (vip-Put-back): Put Back Commands. + * 120 P (vip-Put-back): Counts. + * 121 Q (vip-query-replace): Searching and Replacing. + * 121 Q (vip-query-replace): New Commands. + * 122 R (vip-replace-string): Searching and Replacing. + * 122 R (vip-replace-string): New Commands. + * 123 S (vip-switch-to-buffer-other-window): Buffers and Windows. + * 123 S (vip-switch-to-buffer-other-window): New Bindings. + * 123 S (vip-switch-to-buffer-other-window): Buffer Commands. + * 124 T (vip-goto-char-backward): Motion Commands. + * 125 U (vip-nil): Other Vi Commands. + * 126 V (vip-find-file-other-window): File Commands. + * 126 V (vip-find-file-other-window): New Commands. + * 126 V (vip-find-file-other-window): Files. + * 127 W (vip-forward-Word): Motion Commands. + * 1300 X (vip-ctl-x-equivalent): Important Keys. + * 1300 X (vip-ctl-x-equivalent): New Bindings. + * 1301 X ( (start-kbd-macro): Misc Commands. + * 1301 X ) (end-kbd-macro): Misc Commands. + * 1301 X 1 (delete-other-windows): Buffers and Windows. + * 1301 X 1 (delete-other-windows): Window Commands. + * 1301 X 2 (split-window-vertically): Buffers and Windows. + * 1301 X 2 (split-window-vertically): Window Commands. + * 1301 X 3 (vip-buffer-in-two-windows): Buffers and Windows. + * 1301 X 3 (vip-buffer-in-two-windows): Window Commands. + * 1301 X 3 (vip-buffer-in-two-windows): New Bindings. + * 1302 X B (list-buffers): Buffers and Windows. + * 1302 X I (insert-file): Files. + * 1302 X I (insert-file): File Commands. + * 1302 X S (save-buffer): Files. + * 1302 X S (save-buffer): Buffer Commands. + * 1302 X W (write-file): File Commands. + * 1302 X W (write-file): Files. + * 1302 X Z (suspend-emacs): Misc Commands. + * 131 Y (vip-yank-line): Yank Commands. + * 132 Z Z (save-buffers-kill-emacs): Other Vi Commands. + * 133 [ (vip-nil): Other Vi Commands. + * 134 \ (vip-escape-to-emacs): Important Keys. + * 134 \ (vip-escape-to-emacs): New Commands. + * 135 ] (vip-nil): Other Vi Commands. + * 136 ^ (vip-bol-and-skip-white): Motion Commands. + * 137 _ (vip-nil): Other Vi Commands. + * 140 ` (vip-goto-mark): Motion Commands. + * 141 a (vip-append): Commands in Insert Mode. + * 142 b (vip-backward-word): Motion Commands. + * 1430 c (vip-command-argument): Change Commands. + * 1431 c R: Change Commands. + * 1432 c c: Change Commands. + * 1432 c r: Change Commands. + * 1440 d (vip-command-argument): Delete Commands. + * 1441 d R: Delete Commands. + * 1442 d d: Delete Commands. + * 1442 d r: Delete Commands. + * 145 e (vip-end-of-word): Motion Commands. + * 146 f (vip-find-char-forward): Motion Commands. + * 147 g (vip-info-on-file): Files. + * 147 g (vip-info-on-file): New Bindings. + * 150 h (vip-backward-char): Motion Commands. + * 151 i (vip-insert): Commands in Insert Mode. + * 152 j (vip-next-line): Motion Commands. + * 153 k (vip-previous-line): Motion Commands. + * 154 l (vip-forward-char): Motion Commands. + * 155 m (vip-mark-point): Marking. + * 155 m (vip-mark-point): Mark Commands. + * 156 n (vip-search-next): Searching and Replacing. + * 157 o (vip-open-line): Counts. + * 157 o (vip-open-line): Commands in Insert Mode. + * 160 p (vip-put-back): Counts. + * 160 p (vip-put-back): Put Back Commands. + * 161 q (vip-nil): Other Vi Commands. + * 162 r (vip-replace-char): Searching and Replacing. + * 163 s (vip-switch-to-buffer): New Bindings. + * 163 s (vip-switch-to-buffer): Buffer Commands. + * 163 s (vip-switch-to-buffer): Buffers and Windows. + * 164 t (vip-goto-char-forward): Motion Commands. + * 165 u (vip-undo): Repeating and Undoing Modifications. + * 165 u (vip-undo): Undoing. + * 166 v (vip-find-file): New Commands. + * 166 v (vip-find-file): File Commands. + * 166 v (vip-find-file): Files. + * 167 w (vip-forward-word): Motion Commands. + * 170 x (vip-delete-char): Delete Commands. + * 1710 y (vip-command-argument): Yank Commands. + * 1711 y R: Yank Commands. + * 1712 y r: Yank Commands. + * 1712 y y (vip-yank-line): Yank Commands. + * 1721 z RET (vip-line-to-top): Viewing the Buffer. + * 1721 z RET (vip-line-to-top): z Command. + * 1722 z - (vip-line-to-bottom): z Command. + * 1722 z - (vip-line-to-bottom): Viewing the Buffer. + * 1722 z . (vip-line-to-middle): z Command. + * 1722 z . (vip-line-to-middle): Viewing the Buffer. + * 1723 z H (vip-line-to-top): Viewing the Buffer. + * 1723 z H (vip-line-to-top): z Command. + * 1723 z L (vip-line-to-bottom): Viewing the Buffer. + * 1723 z L (vip-line-to-bottom): z Command. + * 1723 z M (vip-line-to-middle): Viewing the Buffer. + * 1723 z M (vip-line-to-middle): z Command. + * 173 { (vip-backward-paragraph): Motion Commands. + * 174 | (vip-goto-col): Motion Commands. + * 175 } (vip-forward-paragraph): Motion Commands. + * 176 ~ (vip-nil): Other Vi Commands. + * 177 DEL (vip-delete-backward-char): Delete Commands. + + Concept Index + ************* + + * Menu: + + * address: Ex Commands. + * buffer: Basic Concepts. + * buffer: Buffers and Windows. + * buffer name completion: Buffers and Windows. + * count: Numeric Arguments. + * current buffer: Buffers and Windows. + * default directory: Files. + * emacs mode: Modes in VIP. + * end (of buffer): Basic Concepts. + * expanding (region): Modifying Commands. + * file name completion: Files. + * flag: Ex Command Reference. + * global keymap: Basic Concepts. + * insert mode: Modes in VIP. + * keymap: Basic Concepts. + * line commands: Modifying Commands. + * local keymap: Customizing Key Bindings. + * local keymap: Basic Concepts. + * looking at: Basic Concepts. + * magic: Ex Commands. + * mark: Basic Concepts. + * mark ring: Mark Commands. + * mode: Basic Concepts. + * mode line: Modes in VIP. + * modified (buffer): Buffers and Windows. + * number register: Put Back Commands. + * numeric arguments: Numeric Arguments. + * point: Basic Concepts. + * point commands: Modifying Commands. + * region: Basic Concepts. + * region: Region Commands. + * regular expression: Ex Commands. + * regular expression (replacement): Searching and Replacing. + * regular expression (search): Searching and Replacing. + * selected buffer: Buffers and Windows. + * selected tag table: Ex Command Reference. + * syntax table: Motion Commands. + * tag: Ex Command Reference. + * text: Basic Concepts. + * vanilla (replacement): Searching and Replacing. + * vi mode: Modes in VIP. + * visiting (a file): Files. + * window: Basic Concepts. + * window: Buffers and Windows. + * word: Motion Commands. + * yank: Yank Commands. + + diff -rcP emacs-19.7/lib-src/ChangeLog emacs-19.8/lib-src/ChangeLog *** emacs-19.7/lib-src/ChangeLog Sat May 22 19:38:49 1993 --- emacs-19.8/lib-src/ChangeLog Mon May 24 19:34:54 1993 *************** *** 1,3 **** --- 1,26 ---- + Mon May 24 12:14:41 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + + * make-docfile.c: Doc fix. + + Mon May 24 19:33:35 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * tcp.c: Fix comment syntax at top of file. + (main): Don't call htons with the port number. + + Mon May 24 01:53:42 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Makefile.in (timer.o, sorted-doc.c): Link with alloca.o, if it's + appropriate. + + * Makefile.in (install): Refer to the variables INSTALLABLES and + INSTALLABLE_SCRIPTS, instead of writing them out. + + Sun May 23 14:52:17 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * make-path.c (main): Return 0. + Sat May 22 19:37:01 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) * Version 19.7 released. diff -rcP emacs-19.7/lib-src/Makefile.in emacs-19.8/lib-src/Makefile.in *** emacs-19.7/lib-src/Makefile.in Sat May 15 20:49:15 1993 --- emacs-19.8/lib-src/Makefile.in Mon May 24 11:59:17 1993 *************** *** 137,143 **** install: ${archlibdir} @echo @echo "Installing utilities for users to run." ! for file in emacsclient etags ctags b2m ; do \ cp $${file} ${bindir}/$${file}.new ; \ chmod 755 ${bindir}/$${file}.new ; \ done --- 137,143 ---- install: ${archlibdir} @echo @echo "Installing utilities for users to run." ! for file in ${INSTALLABLES} ${INSTALLABLE_SCRIPTS} ; do \ cp $${file} ${bindir}/$${file}.new ; \ chmod 755 ${bindir}/$${file}.new ; \ done *************** *** 203,210 **** digest-doc: ${srcdir}/digest-doc.c $(CC) ${ALL_CFLAGS} ${srcdir}/digest-doc.c $(LOADLIBES) -o digest-doc ! sorted-doc: ${srcdir}/sorted-doc.c ! $(CC) ${ALL_CFLAGS} ${srcdir}/sorted-doc.c $(LOADLIBES) -o sorted-doc b2m: ${srcdir}/b2m.c ../src/config.h $(CC) -I${srcdir}/../src ${ALL_CFLAGS} ${srcdir}/b2m.c $(LOADLIBES) -o b2m --- 203,210 ---- digest-doc: ${srcdir}/digest-doc.c $(CC) ${ALL_CFLAGS} ${srcdir}/digest-doc.c $(LOADLIBES) -o digest-doc ! sorted-doc: ${srcdir}/sorted-doc.c ${ALLOCA} ! $(CC) ${ALL_CFLAGS} ${srcdir}/sorted-doc.c ${ALLOCA} $(LOADLIBES) -o sorted-doc b2m: ${srcdir}/b2m.c ../src/config.h $(CC) -I${srcdir}/../src ${ALL_CFLAGS} ${srcdir}/b2m.c $(LOADLIBES) -o b2m *************** *** 233,238 **** --- 233,239 ---- hexl: ${srcdir}/hexl.c $(CC) ${ALL_CFLAGS} ${srcdir}/hexl.c $(LOADLIBES) -o hexl + TIMEROBJS=getdate.o timer.o $(ALLOCA) getdate.o: ${srcdir}/getdate.y ../src/config.h ${YACC} ${YFLAGS} ${srcdir}/getdate.y $(CC) -I${srcdir}/../src $(ALL_CFLAGS) -c y.tab.c *************** *** 239,246 **** mv y.tab.o getdate.o timer.o: ${srcdir}/timer.c ../src/config.h $(CC) -c -I${srcdir}/../src $(ALL_CFLAGS) ${srcdir}/timer.c ! timer: getdate.o timer.o ! $(CC) -I${srcdir}/../src $(ALL_CFLAGS) getdate.o timer.o -o timer make-path: ${srcdir}/make-path.c $(CC) $(ALL_CFLAGS) ${srcdir}/make-path.c -o make-path --- 240,247 ---- mv y.tab.o getdate.o timer.o: ${srcdir}/timer.c ../src/config.h $(CC) -c -I${srcdir}/../src $(ALL_CFLAGS) ${srcdir}/timer.c ! timer: ${TIMEROBJS} ! $(CC) -I${srcdir}/../src $(ALL_CFLAGS) ${TIMEROBJS} -o timer make-path: ${srcdir}/make-path.c $(CC) $(ALL_CFLAGS) ${srcdir}/make-path.c -o make-path diff -rcP emacs-19.7/lib-src/alloca.c emacs-19.8/lib-src/alloca.c *** emacs-19.7/lib-src/alloca.c Sun May 23 15:12:33 1993 --- emacs-19.8/lib-src/alloca.c Mon May 24 20:43:37 1993 *************** *** 60,68 **** #define NULL 0 ! #ifdef emacs ! #define xmalloc malloc ! #else extern pointer xmalloc (); #endif --- 60,77 ---- #define NULL 0 ! /* Different portions of Emacs need to call different versions of ! malloc. The Emacs executable needs alloca to call xmalloc, because ! ordinary malloc isn't protected from input signals. On the other ! hand, the utilities in lib-src need alloca to call malloc; some of ! them are very simple, and don't have an xmalloc routine. ! ! Non-Emacs programs expect this to call use xmalloc. ! ! Callers below should use malloc. */ ! ! #ifndef emacs ! #define malloc xmalloc extern pointer xmalloc (); #endif *************** *** 181,187 **** /* Allocate combined header + user data storage. */ { ! register pointer new = xmalloc (sizeof (header) + size); /* Address of header. */ ((header *) new)->h.next = last_alloca_header; --- 190,196 ---- /* Allocate combined header + user data storage. */ { ! register pointer new = malloc (sizeof (header) + size); /* Address of header. */ ((header *) new)->h.next = last_alloca_header; diff -rcP emacs-19.7/lib-src/getdate.y emacs-19.8/lib-src/getdate.y *** emacs-19.7/lib-src/getdate.y Sat May 15 00:49:20 1993 --- emacs-19.8/lib-src/getdate.y Sun May 23 21:56:04 1993 *************** *** 28,33 **** --- 28,34 ---- #endif #ifdef __GNUC__ + #undef alloca #define alloca __builtin_alloca #else #ifdef HAVE_ALLOCA_H diff -rcP emacs-19.7/lib-src/make-docfile.c emacs-19.8/lib-src/make-docfile.c *** emacs-19.7/lib-src/make-docfile.c Sat May 22 14:06:50 1993 --- emacs-19.8/lib-src/make-docfile.c Mon May 24 14:04:58 1993 *************** *** 66,72 **** err_count += scan_file (argv[i]); /* err_count seems to be {mis,un}used */ #ifndef VMS exit (err_count); /* see below - shane */ ! #endif VMS } /* Read file FILENAME and output its doc strings to outfile. */ --- 66,72 ---- err_count += scan_file (argv[i]); /* err_count seems to be {mis,un}used */ #ifndef VMS exit (err_count); /* see below - shane */ ! #endif /* VMS */ } /* Read file FILENAME and output its doc strings to outfile. */ diff -rcP emacs-19.7/lib-src/make-path.c emacs-19.8/lib-src/make-path.c *** emacs-19.7/lib-src/make-path.c Sun Dec 6 17:18:27 1992 --- emacs-19.8/lib-src/make-path.c Sun May 23 14:51:35 1993 *************** *** 82,85 **** --- 82,87 ---- next_pathname: ; } + + return 0; } diff -rcP emacs-19.7/lib-src/tcp.c emacs-19.8/lib-src/tcp.c *** emacs-19.7/lib-src/tcp.c Wed May 19 17:19:57 1993 --- emacs-19.8/lib-src/tcp.c Mon May 24 19:34:31 1993 *************** *** 19,28 **** You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to ! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ * ! * Yasunari,Itoh at PFU limited contributed for Fujitsu UTS and SX/A. * * Thu Apr 6 13:47:37 JST 1989 * USG fixes by Sakaeda --- 19,28 ---- You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to ! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * ! * Yasunari, Itoh at PFU limited contributed for Fujitsu UTS and SX/A. * * Thu Apr 6 13:47:37 JST 1989 * USG fixes by Sakaeda *************** *** 31,40 **** * cc -O -o tcp tcp.c -DFUJITSU_UTS -lu -lsocket */ - #ifndef lint - static char *rcsId = "$Header: tcp.c,v 1.5 93/05/10 19:49:51 umerin Locked $"; - #endif - #include #include #include --- 31,36 ---- *************** *** 58,81 **** #endif #ifdef FUJITSU_UTS ! #define bcopy(f,t,n) memcpy(t,f,n) ! #define bcmp(b1,b2,n) (memcmp(b1,b2,n)!=0) ! #define bzero(b,n) memset(b,0,n) #endif #ifdef USG int selectable = 1; ! sigout() { ! fcntl(fileno(stdin),F_SETFL,0); ! exit(-1); } #endif ! main(argc, argv) ! int argc; ! char *argv[]; { struct hostent *host; struct sockaddr_in sockin, sockme; --- 54,77 ---- #endif #ifdef FUJITSU_UTS ! #define bcopy(f, t, n) memcpy (t, f, n) ! #define bcmp(b1, b2, n) (memcmp (b1, b2, n)!=0) ! #define bzero(b, n) memset (b, 0, n) #endif #ifdef USG int selectable = 1; ! sigout () { ! fcntl (fileno (stdin), F_SETFL, 0); ! exit (-1); } #endif ! main (argc, argv) ! int argc; ! char *argv[]; { struct hostent *host; struct sockaddr_in sockin, sockme; *************** *** 86,224 **** int readfds; int writefds; int server; /* NNTP Server */ ! int emacsIn = fileno(stdin); /* Emacs intput */ ! int emacsOut = fileno(stdout); /* Emacs output */ char buffer[1024]; int nbuffer; /* Number of bytes in buffer */ int wret; char *retry; /* retry bufferp */ ! int false = 0; /* FALSE flag for setsockopt() */ ! if(argc < 2) { ! fprintf(stderr, "Usage: %s HOST [SERVICE]\n", argv[0]); ! exit(1); ! }; ! if(argc >= 2) hostname = argv[1]; ! if(argc >= 3) service = argv[2]; ! if((host = gethostbyname(hostname)) == NULL){ ! perror("gethostbyname"); ! exit(1); ! } ! if(isdigit(service[0])) ! port = atoi(service); ! else { ! serv = getservbyname(service, "tcp"); ! if(serv == NULL){ ! perror("getservbyname"); ! exit(1); } ! port = serv->s_port; ! } ! bzero(&sockin, sizeof(sockin)); sockin.sin_family = host->h_addrtype; ! bcopy(host->h_addr, &sockin.sin_addr, host->h_length); ! sockin.sin_port = htons(port); ! if((server = socket(AF_INET, SOCK_STREAM, 0)) < 0) { ! perror("socket"); ! exit(1); ! } ! if(setsockopt(server, SOL_SOCKET, SO_REUSEADDR, &false, sizeof (false))) { ! perror("setsockopt"); ! exit(1); ! } ! bzero(&sockme, sizeof(sockme)); sockme.sin_family = sockin.sin_family; sockme.sin_addr.s_addr = INADDR_ANY; ! if(bind(server, &sockme, sizeof(sockme)) < 0){ ! perror("bind"); ! exit(1); ! } ! if(connect(server, &sockin, sizeof (sockin)) < 0){ ! perror("connect"); ! close(server); ! exit(1); ! } #ifdef O_NDELAY ! fcntl(server, F_SETFL, O_NDELAY); #ifdef USG /* USG pipe cannot not select emacsIn */ { struct stat statbuf; ! fstat (emacsIn,&statbuf); if (statbuf.st_mode & 010000) selectable = 0; ! if (!selectable){ ! signal(SIGINT,sigout); ! fcntl(emacsIn, F_SETFL, O_NDELAY); ! } } #endif #endif /* Connection established. */ ! while(1){ ! readfds = (1 << server) | (1 << emacsIn); ! if(select(32, &readfds, NULL, NULL, (struct timeval *)NULL) == -1){ ! perror("select"); ! exit(1); ! } ! if(readfds & (1 << emacsIn)){ ! /* From Emacs */ ! nbuffer = read(emacsIn, buffer, sizeof buffer -1); ! ! #ifdef USG ! if (selectable && nbuffer == 0){ ! goto finish; ! } else if (!(readfds & (1 << server)) && nbuffer == 0){ ! sleep (1); ! } else #else ! if(nbuffer == 0) ! goto finish; #endif ! for(retry = buffer; nbuffer > 0; nbuffer -= wret, retry += wret){ ! writefds = 1 << server; ! if(select(server+1,NULL,&writefds,NULL,(struct timeval*)NULL) == -1){ ! perror("select"); ! exit(1); } ! wret = write(server, retry, nbuffer); ! if(wret < 0) goto finish; ! } ! } ! if(readfds & (1 << server)){ ! /* From NNTP server */ ! nbuffer = read(server, buffer, sizeof buffer -1); ! if(nbuffer == 0) ! goto finish; ! for(retry = buffer; nbuffer > 0; nbuffer -= wret, retry += wret){ ! writefds = 1 << emacsOut; ! #ifdef USG ! if(selectable) ! #endif ! if(select(emacsOut+1,NULL,&writefds,NULL,(struct timeval*)NULL) == -1){ ! perror("select"); ! exit(1); ! } ! wret = write(emacsOut, retry, nbuffer); ! if(wret < 0) goto finish; ! } } - } /* End of communication. */ finish: ! close(server); #ifdef USG ! if (!selectable) fcntl(emacsIn, F_SETFL,0); #endif ! close(emacsIn); ! close(emacsOut); ! exit(0); } --- 82,241 ---- int readfds; int writefds; int server; /* NNTP Server */ ! int emacsIn = fileno (stdin); /* Emacs intput */ ! int emacsOut = fileno (stdout); /* Emacs output */ char buffer[1024]; int nbuffer; /* Number of bytes in buffer */ int wret; char *retry; /* retry bufferp */ ! int false = 0; /* FALSE flag for setsockopt () */ ! if (argc < 2) ! { ! fprintf (stderr, "Usage: %s HOST [SERVICE]\n", argv[0]); ! exit (1); ! } ! if (argc >= 2) hostname = argv[1]; ! if (argc >= 3) service = argv[2]; ! if ((host = gethostbyname (hostname)) == NULL) ! { ! perror ("gethostbyname"); ! exit (1); } ! if (isdigit (service[0])) ! port = atoi (service); ! else ! { ! serv = getservbyname (service, "tcp"); ! if (serv == NULL) ! { ! perror ("getservbyname"); ! exit (1); ! } ! port = serv->s_port; ! } ! bzero (&sockin, sizeof (sockin)); sockin.sin_family = host->h_addrtype; ! bcopy (host->h_addr, &sockin.sin_addr, host->h_length); ! sockin.sin_port = port; ! if ((server = socket (AF_INET, SOCK_STREAM, 0)) < 0) ! { ! perror ("socket"); ! exit (1); ! } ! if (setsockopt (server, SOL_SOCKET, SO_REUSEADDR, &false, sizeof (false))) ! { ! perror ("setsockopt"); ! exit (1); ! } ! bzero (&sockme, sizeof (sockme)); sockme.sin_family = sockin.sin_family; sockme.sin_addr.s_addr = INADDR_ANY; ! if (bind (server, &sockme, sizeof (sockme)) < 0) ! { ! perror ("bind"); ! exit (1); ! } ! if (connect (server, &sockin, sizeof (sockin)) < 0) ! { ! perror ("connect"); ! close (server); ! exit (1); ! } #ifdef O_NDELAY ! fcntl (server, F_SETFL, O_NDELAY); #ifdef USG /* USG pipe cannot not select emacsIn */ { struct stat statbuf; ! fstat (emacsIn, &statbuf); if (statbuf.st_mode & 010000) selectable = 0; ! if (!selectable) ! { ! signal (SIGINT, sigout); ! fcntl (emacsIn, F_SETFL, O_NDELAY); ! } } #endif #endif /* Connection established. */ ! while (1) ! { ! readfds = (1 << server) | (1 << emacsIn); ! if (select (32, &readfds, NULL, NULL, (struct timeval *)NULL) == -1) ! { ! perror ("select"); ! exit (1); ! } ! if (readfds & (1 << emacsIn)) ! { ! /* From Emacs */ ! nbuffer = read (emacsIn, buffer, sizeof buffer -1); ! ! #ifdef USG ! if (selectable && nbuffer == 0) ! { ! goto finish; ! } ! else if (!(readfds & (1 << server)) && nbuffer == 0) ! { ! sleep (1); ! } ! else #else ! if (nbuffer == 0) ! goto finish; #endif ! for (retry = buffer; nbuffer > 0; nbuffer -= wret, retry += wret) ! { ! writefds = 1 << server; ! if (select (server+1, NULL, &writefds, NULL, (struct timeval*)NULL) == -1) ! { ! perror ("select"); ! exit (1); ! } ! wret = write (server, retry, nbuffer); ! if (wret < 0) goto finish; ! } } ! if (readfds & (1 << server)) ! { ! /* From NNTP server */ ! nbuffer = read (server, buffer, sizeof buffer -1); ! if (nbuffer == 0) ! goto finish; ! for (retry = buffer; nbuffer > 0; nbuffer -= wret, retry += wret) ! { ! writefds = 1 << emacsOut; ! #ifdef USG ! if (selectable) ! #endif ! if (select (emacsOut+1, NULL, &writefds, NULL, (struct timeval*)NULL) == -1) ! { ! perror ("select"); ! exit (1); ! } ! wret = write (emacsOut, retry, nbuffer); ! if (wret < 0) goto finish; ! } ! } } /* End of communication. */ finish: ! close (server); #ifdef USG ! if (!selectable) fcntl (emacsIn, F_SETFL, 0); #endif ! close (emacsIn); ! close (emacsOut); ! exit (0); } diff -rcP emacs-19.7/lisp/ChangeLog emacs-19.8/lisp/ChangeLog *** emacs-19.7/lisp/ChangeLog Sat May 22 19:37:17 1993 --- emacs-19.8/lisp/ChangeLog Tue May 25 10:51:15 1993 *************** *** 1,3 **** --- 1,94 ---- + Tue May 25 05:15:14 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + + * startup.el (command-line-1): Don't handle `-i'. We're + abandoning the `insert file' meaning in favor of the `use a + bitmapped icon' meaning. + + * faces.el (set-face-font): Call x-resolve-font-name on the font + before including it in the face. + (x-resolve-font-name): New function. + + * iso-syntax.el: Make downcase into a proper case table before + passing it to set-standard-case-table. + + * disp-table.el (standard-display-european): Doc fix. Make + it autoload. Make it respond to prefix arg like a minor mode. + + Mon May 24 17:16:41 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * files.el (find-file-read-only-other-window): + Use find-file-other-window. + + * paths.el (Info-default-directory-list): Add ../../info. + + * info.el (Info-suffix-list): Fix duplicate .z to .info.z. + + * faces.el (x-create-frame-with-faces): Handle `reverse' as parameter. + * frame.el (frame-initialize): Likewise. + + * dired.el (dired-flag-backup-files): Speedup: + check explicitly for ~ at end of line. + (dired-flag-auto-save-files): Similar change. + + * register.el (jump-to-register): + Don't fail if frame-configuration-p is unbound. + + * files.el (cd): Set cd-path to a list. + + * simple.el (kill-new): Pass t as 2nd arg to interprogram-cut-function. + * select.el (x-set-cut-buffer): New arg PUSH. + + Mon May 24 12:14:41 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * disp-table.el (standard-display-default): New function. + (standard-display-european): New command. + + * loaddefs.el: Bind [?\M-\C-\ ] to mark-sexp. + + Mon May 24 14:44:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * simple.el (shell-command): Don't activate mark even momentarily. + + Mon May 24 03:54:44 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * case-table.el, disp-table.el, finder.el, iso-ascii.el, + iso-insert.el, iso-swed.el, iso-syntax.el, iso8859-1.el, + swedish.el: Change "i14n" keyword to "i18n". + * finder.el (finder-compile-keywords): Replacement unnecessary. + + Mon May 24 01:06:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * menu-bar.el (menu-bar-mode): Doc fix. + + Sun May 23 21:58:38 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * lucid.el (switch-to-other-buffer): Build the list of acceptable + buffers properly. + + * faces.el (make-face): Change interactive spec to 'S'. + + Sun May 23 18:44:30 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * ange-ftp.el (ange-ftp-raw-send-cmd): Allow quitting + during accept-process-output. + + * finder.el (finder-known-keywords): Use i18n, not i14n. + (finder-compile-keywords): Substitute i18n for i14n. + Turn off undo in *finder-scratch*. Ignore file names + starting with =. + (finder-mode, finder-current-item): Rename headmark to finder-headmark. + (finder-list-matches, finder-list-keywords): Likewise. + + * iso8859-1.el: Call set-case-..., not standard-case-... + + Sun May 23 18:56:04 1993 Paul Eggert (eggert@twinsun.com) + + * calendar.el (calendar-daylight-savings-starts, + calendar-daylight-savings-ends): Default to nil if the locale + never has DST. + Sat May 22 19:37:01 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) * Version 19.7 released. *************** *** 12149,12151 **** --- 12240,12249 ---- * loaddefs.el (shell-prompt-pattern): Allow prompt enclosed in parens. * lisp-mode.el (calculate-lisp-indent): bug in lisp-indent-offset case. + + Local Variables: + mode: indented-text + left-margin: 8 + fill-column: 74 + version-control: never + End: diff -rcP emacs-19.7/lisp/ange-ftp.el emacs-19.8/lisp/ange-ftp.el *** emacs-19.7/lisp/ange-ftp.el Thu Apr 22 18:57:10 1993 --- emacs-19.8/lisp/ange-ftp.el Sun May 23 20:12:13 1993 *************** *** 859,865 **** ;;;; Internal variables. ;;;; ------------------------------------------------------------ ! (defconst ange-ftp-version "$Revision: 1.17 $") (defvar ange-ftp-data-buffer-name " *ftp data*" "Buffer name to hold directory listing data received from ftp process.") --- 859,865 ---- ;;;; Internal variables. ;;;; ------------------------------------------------------------ ! (defconst ange-ftp-version "$Revision: 1.18 $") (defvar ange-ftp-data-buffer-name " *ftp data*" "Buffer name to hold directory listing data received from ftp process.") *************** *** 1682,1688 **** (save-excursion (set-buffer (process-buffer proc)) (while ange-ftp-process-busy ! (accept-process-output)) (setq ange-ftp-process-string "" ange-ftp-process-result-line "" ange-ftp-process-busy t --- 1682,1696 ---- (save-excursion (set-buffer (process-buffer proc)) (while ange-ftp-process-busy ! ;; This is a kludge to let user quit in case ftp gets hung. ! ;; It matters because this function can be called from the filter. ! ;; It is bad to allow quitting in a filter, but getting hung ! ;; is worse. By binding quit-flag to nil, we might avoid ! ;; most of the probability of getting screwed because the user ! ;; wants to quit some command. ! (let ((quit-flag nil) ! (inhibit-quit nil)) ! (accept-process-output))) (setq ange-ftp-process-string "" ange-ftp-process-result-line "" ange-ftp-process-busy t *************** *** 1708,1714 **** nil ;; hang around for command to complete (while ange-ftp-process-busy ! (accept-process-output proc)) (if cont nil ;cont has already been called (cons ange-ftp-process-result ange-ftp-process-result-line)))))) --- 1716,1726 ---- nil ;; hang around for command to complete (while ange-ftp-process-busy ! ;; This is a kludge to let user quit in case ftp gets hung. ! ;; It matters because this function can be called from the filter. ! (let ((quit-flag nil) ! (inhibit-quit nil)) ! (accept-process-output proc))) (if cont nil ;cont has already been called (cons ange-ftp-process-result ange-ftp-process-result-line)))))) diff -rcP emacs-19.7/lisp/calendar.el emacs-19.8/lisp/calendar.el *** emacs-19.7/lisp/calendar.el Thu May 20 02:16:16 1993 --- emacs-19.8/lisp/calendar.el Sun May 23 19:58:22 1993 *************** *** 489,495 **** Greenwich. This describes the standard time; if daylight savings time is in effect, it does not affect this value. SAVINGS-FLAG is non-nil iff daylight savings time or some other sort ! of seasonal time adjustment is in effect. STANDARD is a string giving the name of the time zone when no seasonal time adjustment is in effect. SAVINGS is a string giving the name of the time zone when there is a --- 489,495 ---- Greenwich. This describes the standard time; if daylight savings time is in effect, it does not affect this value. SAVINGS-FLAG is non-nil iff daylight savings time or some other sort ! of seasonal time adjustment is ever in effect. STANDARD is a string giving the name of the time zone when no seasonal time adjustment is in effect. SAVINGS is a string giving the name of the time zone when there is a *************** *** 498,504 **** SAVINGS-FLAG is always nil, and STANDARD and SAVINGS are equal. Some operating systems cannot provide all this information to Emacs; ! in this case, calendar-current-time-zone returns a list containing nil for the data it can't find." (let* ((quarter-year-seconds 7889238.0) ; # number of seconds in 1/4 year (current-time-arithmetic-base 65536.0) --- 498,504 ---- SAVINGS-FLAG is always nil, and STANDARD and SAVINGS are equal. Some operating systems cannot provide all this information to Emacs; ! in this case, `calendar-current-time-zone' returns a list containing nil for the data it can't find." (let* ((quarter-year-seconds 7889238.0) ; # number of seconds in 1/4 year (current-time-arithmetic-base 65536.0) *************** *** 573,585 **** (car (nthcdr 3 (calendar-current-time-zone))))) ;;;###autoload ! (defvar calendar-daylight-savings-starts ! '(calendar-nth-named-day 1 0 4 year) "*A sexp in the variable `year' that gives the Gregorian date, in the form of a list (month day year), on which daylight savings time starts. This is used to determine the starting date of daylight savings time for the holiday ! list and for correcting times of day in the solar and lunar calculations. The ! default value is the American rule of the first Sunday in April. For example, if daylight savings time is mandated to start on October 1, you would set `calendar-daylight-savings-starts' to --- 573,583 ---- (car (nthcdr 3 (calendar-current-time-zone))))) ;;;###autoload ! (defvar calendar-daylight-savings-starts nil "*A sexp in the variable `year' that gives the Gregorian date, in the form of a list (month day year), on which daylight savings time starts. This is used to determine the starting date of daylight savings time for the holiday ! list and for correcting times of day in the solar and lunar calculations. For example, if daylight savings time is mandated to start on October 1, you would set `calendar-daylight-savings-starts' to *************** *** 594,611 **** (calendar-absolute-from-hebrew (list 1 1 (+ year 3760)))) ! because Nisan is the first month in the Hebrew calendar.") ;;;###autoload ! (defvar calendar-daylight-savings-ends ! '(calendar-nth-named-day -1 0 10 year) "*An expression in the variable `year' that gives the Gregorian date, in the form of a list (month day year), on which daylight savings time ends. This is used to determine the ending date of daylight savings time for the holiday list and for correcting times of day in the solar and lunar calculations. ! The default value is the American rule of the last Sunday in October. See the documentation for `calendar-daylight-savings-starts' for other examples.") (defun european-calendar () "Set the interpretation and display of dates to the European style." --- 592,623 ---- (calendar-absolute-from-hebrew (list 1 1 (+ year 3760)))) ! because Nisan is the first month in the Hebrew calendar. ! ! If this is nil and the locale ever uses daylight savings time, ! it will be set to the American rule of the first Sunday in April ! when the calendar package loads.") ! ;;; If the user has given this a value, don't wipe it out. ! (or calendar-daylight-savings-starts ! (setq calendar-daylight-savings-starts ! (and (car (cdr (calendar-current-time-zone))) ! '(calendar-nth-named-day 1 0 4 year)))) ;;;###autoload ! (defvar calendar-daylight-savings-ends nil "*An expression in the variable `year' that gives the Gregorian date, in the form of a list (month day year), on which daylight savings time ends. This is used to determine the ending date of daylight savings time for the holiday list and for correcting times of day in the solar and lunar calculations. ! The default value is the American rule of the last Sunday in October ! if the locale ever uses daylight savings time, otherwise nil. See the documentation for `calendar-daylight-savings-starts' for other examples.") + ;;; If the user has given this a value, don't wipe it out. + (or calendar-daylight-savings-ends + (setq calendar-daylight-savings-ends + (and (car (cdr (calendar-current-time-zone))) + '(calendar-nth-named-day -1 0 10 year)))) (defun european-calendar () "Set the interpretation and display of dates to the European style." diff -rcP emacs-19.7/lisp/dired.el emacs-19.8/lisp/dired.el *** emacs-19.7/lisp/dired.el Fri Apr 23 02:44:37 1993 --- emacs-19.8/lisp/dired.el Mon May 24 19:02:58 1993 *************** *** 1709,1719 **** (interactive "P") (let ((dired-marker-char (if unflag-p ?\040 dired-del-marker))) (dired-mark-if ! (and (not (looking-at dired-re-dir)) ! (let ((fn (dired-get-filename t t))) ! (if fn (auto-save-file-name-p ! (file-name-nondirectory fn))))) ! "auto save file"))) (defun dired-flag-backup-files (&optional unflag-p) "Flag all backup files (names ending with `~') for deletion. --- 1709,1723 ---- (interactive "P") (let ((dired-marker-char (if unflag-p ?\040 dired-del-marker))) (dired-mark-if ! ;; It is less than general to check for ~ here, ! ;; but it's the only way this runs fast enough. ! (and (save-excursion (end-of-line) ! (eq (preceding-char) ?#)) ! (not (looking-at dired-re-dir)) ! (let ((fn (dired-get-filename t t))) ! (if fn (auto-save-file-name-p ! (file-name-nondirectory fn))))) ! "auto save file"))) (defun dired-flag-backup-files (&optional unflag-p) "Flag all backup files (names ending with `~') for deletion. *************** *** 1721,1727 **** (interactive "P") (let ((dired-marker-char (if unflag-p ?\040 dired-del-marker))) (dired-mark-if ! (and (not (looking-at dired-re-dir)) (let ((fn (dired-get-filename t t))) (if fn (backup-file-name-p fn)))) "backup file"))) --- 1725,1735 ---- (interactive "P") (let ((dired-marker-char (if unflag-p ?\040 dired-del-marker))) (dired-mark-if ! ;; It is less than general to check for ~ here, ! ;; but it's the only way this runs fast enough. ! (and (save-excursion (end-of-line) ! (eq (preceding-char) ?~)) ! (not (looking-at dired-re-dir)) (let ((fn (dired-get-filename t t))) (if fn (backup-file-name-p fn)))) "backup file"))) diff -rcP emacs-19.7/lisp/disp-table.el emacs-19.8/lisp/disp-table.el *** emacs-19.7/lisp/disp-table.el Tue May 11 10:16:03 1993 --- emacs-19.8/lisp/disp-table.el Mon May 24 21:08:04 1993 *************** *** 4,10 **** ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i14n ;; This file is part of GNU Emacs. --- 4,10 ---- ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i18n ;; This file is part of GNU Emacs. *************** *** 72,77 **** --- 72,88 ---- (setq l (1+ l)))) ;;;###autoload + (defun standard-display-default (l h) + "Display characters in the range L to H using the default notation." + (while (<= l h) + (if (and (>= l ?\ ) (< l 127)) + (if standard-display-table (aset standard-display-table l nil)) + (or standard-display-table + (setq standard-display-table (make-vector 261 nil))) + (aset standard-display-table l nil)) + (setq l (1+ l)))) + + ;;;###autoload (defun standard-display-ascii (c s) "Display character C using string S." (or standard-display-table *************** *** 109,114 **** --- 120,140 ---- (error "No free glyph codes remain")) (setq glyph-table (vconcat glyph-table (list string))) (1- (length glyph-table))) + + ;;;###autoload + (defun standard-display-european (arg) + "Toggle display of European characters encoded with ISO 8859. + When enabled, characters in the range of 160 to 255 display not + as octal escapes, but as accented characters. + With prefix argument, enable European character display iff arg is positive." + (interactive "P") + (if (or (< (prefix-numeric-value arg) 0) + (and (null arg) + (vectorp standard-display-table) + (>= (length standard-display-table) 161) + (equal (aref standard-display-table 160) [160]))) + (standard-display-default 160 255) + (standard-display-8bit 160 255))) (provide 'disp-table) diff -rcP emacs-19.7/lisp/faces.el emacs-19.8/lisp/faces.el *** emacs-19.7/lisp/faces.el Wed May 19 15:48:18 1993 --- emacs-19.8/lisp/faces.el Tue May 25 07:59:34 1993 *************** *** 85,91 **** If the optional FRAME argument is provided, change only in that frame; otherwise change each frame." (interactive (internal-face-interactive "font")) ! (internal-set-face-1 face 'font font 3 frame)) (defsubst set-face-foreground (face color &optional frame) "Change the foreground color of face FACE to COLOR (a string). --- 85,92 ---- If the optional FRAME argument is provided, change only in that frame; otherwise change each frame." (interactive (internal-face-interactive "font")) ! (internal-set-face-1 face 'font (x-resolve-font-name font face frame) ! 3 frame)) (defsubst set-face-foreground (face color &optional frame) "Change the foreground color of face FACE to COLOR (a string). *************** *** 201,207 **** "Define a new FACE on all frames. You can modify the font, color, etc of this face with the set-face- functions. If the face already exists, it is unmodified." ! (interactive "sMake face: ") (or (internal-find-face name) (let ((face (make-vector 8 nil))) (aset face 0 'face) --- 202,208 ---- "Define a new FACE on all frames. You can modify the font, color, etc of this face with the set-face- functions. If the face already exists, it is unmodified." ! (interactive "SMake face: ") (or (internal-find-face name) (let ((face (make-vector 8 nil))) (aset face 0 'face) *************** *** 412,417 **** --- 413,431 ---- (setq x-font-regexp-weight (concat - weight -)) nil) + (defun x-resolve-font-name (pattern &optional face frame) + "Return a font name matching PATTERN. + All wildcards in PATTERN become substantiated. + Given optional arguments FACE and FRAME, try to return a font which is + also the same size as FACE on FRAME," + (let ((fonts (x-list-fonts pattern face frame))) + (or fonts + (if face + (error "no fonts match `%S'." pattern) + (error "no fonts matching pattern are the same size as `%s'." + pattern face))) + (car fonts))) + (defun x-frob-font-weight (font which) (if (or (string-match x-font-regexp font) (string-match x-font-regexp-head font) *************** *** 723,728 **** --- 737,753 ---- (faces (copy-alist global-face-data)) (rest faces)) (set-frame-face-alist frame faces) + + (if (cdr (or (assq 'reverse parameters) + (assq 'reverse default-frame-alist))) + (let ((params (frame-parameters frame))) + (modify-frame-parameters + frame + (list (cons 'foreground-color (cdr (assq 'background-color params))) + (cons 'background-color (cdr (assq 'foreground-color params))) + (cons 'mouse-color (cdr (assq 'background-color params))) + (cons 'cursor-color (cdr (assq 'background-color params))) + (cons 'border-color (cdr (assq 'background-color params))))))) ;; Copy the vectors that represent the faces. ;; Also fill them in from X resources. diff -rcP emacs-19.7/lisp/files.el emacs-19.8/lisp/files.el *** emacs-19.7/lisp/files.el Wed May 19 02:00:08 1993 --- emacs-19.8/lisp/files.el Mon May 24 23:37:48 1993 *************** *** 246,252 **** (setq cd-path (concat cd-path ":")) (while (setq cd-colon (string-match ":" cd-path cd-start)) (setq cd-list ! (nconc cd-list (list (substitute-in-file-name (file-name-as-directory (substring cd-path cd-start cd-colon)))))) (setq cd-start (+ cd-colon 1))) cd-list))) --- 246,255 ---- (setq cd-path (concat cd-path ":")) (while (setq cd-colon (string-match ":" cd-path cd-start)) (setq cd-list ! (nconc cd-list ! (list (substitute-in-file-name ! (file-name-as-directory ! (substring cd-path cd-start cd-colon)))))) (setq cd-start (+ cd-colon 1))) cd-list))) *************** *** 260,267 **** (error "%s is not a directory" dir) (if (file-executable-p dir) (setq default-directory dir) ! (error "Cannot cd to %s: Permission denied" dir))) ! ) (defun cd (dir) "Make DIR become the current buffer's default directory. --- 263,269 ---- (error "%s is not a directory" dir) (if (file-executable-p dir) (setq default-directory dir) ! (error "Cannot cd to %s: Permission denied" dir)))) (defun cd (dir) "Make DIR become the current buffer's default directory. *************** *** 273,279 **** (cd-absolute (expand-file-name dir)) (if (null cd-path) (let ((trypath (parse-colon-path (getenv "CDPATH")))) ! (setq cd-path (or trypath "./")))) (if (not (catch 'found (mapcar (function (lambda (x) --- 275,281 ---- (cd-absolute (expand-file-name dir)) (if (null cd-path) (let ((trypath (parse-colon-path (getenv "CDPATH")))) ! (setq cd-path (or trypath (list "./"))))) (if (not (catch 'found (mapcar (function (lambda (x) *************** *** 388,394 **** Like \\[find-file-other-window] but marks buffer as read-only. Use \\[toggle-read-only] to permit editing." (interactive "fFind file read-only other window: ") ! (find-file filename) (setq buffer-read-only t)) (defun find-file-read-only-other-frame (filename) --- 390,396 ---- Like \\[find-file-other-window] but marks buffer as read-only. Use \\[toggle-read-only] to permit editing." (interactive "fFind file read-only other window: ") ! (find-file-other-window filename) (setq buffer-read-only t)) (defun find-file-read-only-other-frame (filename) diff -rcP emacs-19.7/lisp/frame.el emacs-19.8/lisp/frame.el *** emacs-19.7/lisp/frame.el Tue May 18 18:37:57 1993 --- emacs-19.8/lisp/frame.el Mon May 24 21:59:07 1993 *************** *** 94,102 **** ;; it has a minibuffer, but let initial-frame-alist omit the ;; minibuffer spec. (or (delq terminal-frame (minibuffer-frame-list)) ! (setq default-minibuffer-frame ! (setq frame-initial-frame ! (new-frame initial-frame-alist)))) ;; At this point, we know that we have a frame open, so we ;; can delete the terminal frame. --- 94,114 ---- ;; it has a minibuffer, but let initial-frame-alist omit the ;; minibuffer spec. (or (delq terminal-frame (minibuffer-frame-list)) ! (progn ! (setq default-minibuffer-frame ! (setq frame-initial-frame ! (new-frame initial-frame-alist))) ! ;; Handle `reverse' as a parameter. ! (if (cdr (or (assq 'reverse initial-frame-alist) ! (assq 'reverse default-frame-alist))) ! (let ((params (frame-parameters frame-initial-frame))) ! (modify-frame-parameters ! frame-initial-frame ! (list (cons 'foreground-color (cdr (assq 'background-color params))) ! (cons 'background-color (cdr (assq 'foreground-color params))) ! (cons 'mouse-color (cdr (assq 'background-color params))) ! (cons 'cursor-color (cdr (assq 'background-color params))) ! (cons 'border-color (cdr (assq 'background-color params))))))))) ;; At this point, we know that we have a frame open, so we ;; can delete the terminal frame. diff -rcP emacs-19.7/lisp/info.el emacs-19.8/lisp/info.el *** emacs-19.7/lisp/info.el Thu Apr 22 22:18:12 1993 --- emacs-19.8/lisp/info.el Mon May 24 22:03:12 1993 *************** *** 77,83 **** (".z" . "gunzip") (".info.Z" . "uncompress") (".info.Y" . "unyabba") ! (".z" . "gunzip")) "List of file name suffixes and associated decoding commands. Each entry should be (SUFFIX . STRING); the file is given to the command as standard input. If STRING is nil, no decoding is done.") --- 77,83 ---- (".z" . "gunzip") (".info.Z" . "uncompress") (".info.Y" . "unyabba") ! (".info.z" . "gunzip")) "List of file name suffixes and associated decoding commands. Each entry should be (SUFFIX . STRING); the file is given to the command as standard input. If STRING is nil, no decoding is done.") diff -rcP emacs-19.7/lisp/iso-ascii.el emacs-19.8/lisp/iso-ascii.el *** emacs-19.7/lisp/iso-ascii.el Mon Sep 21 06:58:01 1992 --- emacs-19.8/lisp/iso-ascii.el Mon May 24 03:53:41 1993 *************** *** 4,10 **** ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i14n ;; This file is part of GNU Emacs. --- 4,10 ---- ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i18n ;; This file is part of GNU Emacs. diff -rcP emacs-19.7/lisp/iso-insert.el emacs-19.8/lisp/iso-insert.el *** emacs-19.7/lisp/iso-insert.el Mon Mar 22 09:41:48 1993 --- emacs-19.8/lisp/iso-insert.el Mon May 24 03:53:42 1993 *************** *** 4,10 **** ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i14n ;; This file is part of GNU Emacs. --- 4,10 ---- ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i18n ;; This file is part of GNU Emacs. diff -rcP emacs-19.7/lisp/iso-swed.el emacs-19.8/lisp/iso-swed.el *** emacs-19.7/lisp/iso-swed.el Mon Mar 22 09:41:48 1993 --- emacs-19.8/lisp/iso-swed.el Mon May 24 03:53:43 1993 *************** *** 4,10 **** ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i14n ;; This file is part of GNU Emacs. --- 4,10 ---- ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i18n ;; This file is part of GNU Emacs. diff -rcP emacs-19.7/lisp/iso-syntax.el emacs-19.8/lisp/iso-syntax.el *** emacs-19.7/lisp/iso-syntax.el Mon Mar 22 09:41:49 1993 --- emacs-19.8/lisp/iso-syntax.el Tue May 25 09:04:57 1993 *************** *** 4,10 **** ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i14n ;; This file is part of GNU Emacs. --- 4,10 ---- ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i18n ;; This file is part of GNU Emacs. *************** *** 97,103 **** (set-case-syntax 223 "w" downcase) ; small sharp s, German (set-case-syntax 247 "_" downcase) ; division sign (set-case-syntax 255 "w" downcase) ; small y with diaeresis or umlaut mark ! (set-standard-case-table downcase)) (provide 'iso-syntax) --- 97,103 ---- (set-case-syntax 223 "w" downcase) ; small sharp s, German (set-case-syntax 247 "_" downcase) ; division sign (set-case-syntax 255 "w" downcase) ; small y with diaeresis or umlaut mark ! (set-standard-case-table (list downcase nil nil nil))) (provide 'iso-syntax) diff -rcP emacs-19.7/lisp/iso8859-1.el emacs-19.8/lisp/iso8859-1.el *** emacs-19.7/lisp/iso8859-1.el Mon Mar 22 09:41:50 1993 --- emacs-19.8/lisp/iso8859-1.el Mon May 24 03:53:45 1993 *************** *** 4,10 **** ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i14n ;; This file is part of GNU Emacs. --- 4,10 ---- ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i18n ;; This file is part of GNU Emacs. *************** *** 31,102 **** (require 'case-table) (let ((table (standard-case-table))) ! (standard-case-syntax 160 " " table) ; NBSP (no-break space) ! (standard-case-syntax 161 "." table) ; inverted exclamation mark ! (standard-case-syntax 162 "w" table) ; cent sign ! (standard-case-syntax 163 "w" table) ; pound sign ! (standard-case-syntax 164 "w" table) ; general currency sign ! (standard-case-syntax 165 "w" table) ; yen sign ! (standard-case-syntax 166 "_" table) ; broken vertical line ! (standard-case-syntax 167 "w" table) ; section sign ! (standard-case-syntax 168 "w" table) ; diaeresis ! (standard-case-syntax 169 "_" table) ; copyright sign ! (standard-case-syntax 170 "w" table) ; ordinal indicator, feminine ! (standard-case-syntax-delims 171 187 table) ; angle quotation marks ! (standard-case-syntax 172 "_" table) ; not sign ! (standard-case-syntax 173 "_" table) ; soft hyphen ! (standard-case-syntax 174 "_" table) ; registered sign ! (standard-case-syntax 175 "w" table) ; macron ! (standard-case-syntax 176 "_" table) ; degree sign ! (standard-case-syntax 177 "_" table) ; plus or minus sign ! (standard-case-syntax 178 "w" table) ; superscript two ! (standard-case-syntax 179 "w" table) ; superscript three ! (standard-case-syntax 180 "w" table) ; acute accent ! (standard-case-syntax 181 "_" table) ; micro sign ! (standard-case-syntax 182 "w" table) ; pilcrow ! (standard-case-syntax 183 "_" table) ; middle dot ! (standard-case-syntax 184 "w" table) ; cedilla ! (standard-case-syntax 185 "w" table) ; superscript one ! (standard-case-syntax 186 "w" table) ; ordinal indicator, masculine ;; 187 ; See 171 above. ! (standard-case-syntax 188 "_" table) ; fraction one-quarter ! (standard-case-syntax 189 "_" table) ; fraction one-half ! (standard-case-syntax 190 "_" table) ; fraction three-quarters ! (standard-case-syntax 191 "." table) ; inverted question mark ! (standard-case-syntax-pair 192 224 table) ; A with grave accent ! (standard-case-syntax-pair 193 225 table) ; A with acute accent ! (standard-case-syntax-pair 194 226 table) ; A with circumflex accent ! (standard-case-syntax-pair 195 227 table) ; A with tilde ! (standard-case-syntax-pair 196 228 table) ; A with diaeresis or umlaut mark ! (standard-case-syntax-pair 197 229 table) ; A with ring ! (standard-case-syntax-pair 198 230 table) ; AE diphthong ! (standard-case-syntax-pair 199 231 table) ; C with cedilla ! (standard-case-syntax-pair 200 232 table) ; E with grave accent ! (standard-case-syntax-pair 201 233 table) ; E with acute accent ! (standard-case-syntax-pair 202 234 table) ; E with circumflex accent ! (standard-case-syntax-pair 203 235 table) ; E with diaeresis or umlaut mark ! (standard-case-syntax-pair 204 236 table) ; I with grave accent ! (standard-case-syntax-pair 205 237 table) ; I with acute accent ! (standard-case-syntax-pair 206 238 table) ; I with circumflex accent ! (standard-case-syntax-pair 207 239 table) ; I with diaeresis or umlaut mark ! (standard-case-syntax-pair 208 240 table) ; D with stroke, Icelandic eth ! (standard-case-syntax-pair 209 241 table) ; N with tilde ! (standard-case-syntax-pair 210 242 table) ; O with grave accent ! (standard-case-syntax-pair 211 243 table) ; O with acute accent ! (standard-case-syntax-pair 212 244 table) ; O with circumflex accent ! (standard-case-syntax-pair 213 245 table) ; O with tilde ! (standard-case-syntax-pair 214 246 table) ; O with diaeresis or umlaut mark ! (standard-case-syntax 215 "_" table) ; multiplication sign ! (standard-case-syntax-pair 216 248 table) ; O with slash ! (standard-case-syntax-pair 217 249 table) ; U with grave accent ! (standard-case-syntax-pair 218 250 table) ; U with acute accent ! (standard-case-syntax-pair 219 251 table) ; U with circumflex accent ! (standard-case-syntax-pair 220 252 table) ; U with diaeresis or umlaut mark ! (standard-case-syntax-pair 221 253 table) ; Y with acute accent ! (standard-case-syntax-pair 222 254 table) ; thorn, Icelandic ! (standard-case-syntax 223 "w" table) ; small sharp s, German ! (standard-case-syntax 247 "_" table) ; division sign ! (standard-case-syntax 255 "w" table) ; small y with diaeresis or umlaut mark (set-standard-case-table (list (car table)))) (provide 'iso8859-1) --- 31,102 ---- (require 'case-table) (let ((table (standard-case-table))) ! (set-case-syntax 160 " " table) ; NBSP (no-break space) ! (set-case-syntax 161 "." table) ; inverted exclamation mark ! (set-case-syntax 162 "w" table) ; cent sign ! (set-case-syntax 163 "w" table) ; pound sign ! (set-case-syntax 164 "w" table) ; general currency sign ! (set-case-syntax 165 "w" table) ; yen sign ! (set-case-syntax 166 "_" table) ; broken vertical line ! (set-case-syntax 167 "w" table) ; section sign ! (set-case-syntax 168 "w" table) ; diaeresis ! (set-case-syntax 169 "_" table) ; copyright sign ! (set-case-syntax 170 "w" table) ; ordinal indicator, feminine ! (set-case-syntax-delims 171 187 table) ; angle quotation marks ! (set-case-syntax 172 "_" table) ; not sign ! (set-case-syntax 173 "_" table) ; soft hyphen ! (set-case-syntax 174 "_" table) ; registered sign ! (set-case-syntax 175 "w" table) ; macron ! (set-case-syntax 176 "_" table) ; degree sign ! (set-case-syntax 177 "_" table) ; plus or minus sign ! (set-case-syntax 178 "w" table) ; superscript two ! (set-case-syntax 179 "w" table) ; superscript three ! (set-case-syntax 180 "w" table) ; acute accent ! (set-case-syntax 181 "_" table) ; micro sign ! (set-case-syntax 182 "w" table) ; pilcrow ! (set-case-syntax 183 "_" table) ; middle dot ! (set-case-syntax 184 "w" table) ; cedilla ! (set-case-syntax 185 "w" table) ; superscript one ! (set-case-syntax 186 "w" table) ; ordinal indicator, masculine ;; 187 ; See 171 above. ! (set-case-syntax 188 "_" table) ; fraction one-quarter ! (set-case-syntax 189 "_" table) ; fraction one-half ! (set-case-syntax 190 "_" table) ; fraction three-quarters ! (set-case-syntax 191 "." table) ; inverted question mark ! (set-case-syntax-pair 192 224 table) ; A with grave accent ! (set-case-syntax-pair 193 225 table) ; A with acute accent ! (set-case-syntax-pair 194 226 table) ; A with circumflex accent ! (set-case-syntax-pair 195 227 table) ; A with tilde ! (set-case-syntax-pair 196 228 table) ; A with diaeresis or umlaut mark ! (set-case-syntax-pair 197 229 table) ; A with ring ! (set-case-syntax-pair 198 230 table) ; AE diphthong ! (set-case-syntax-pair 199 231 table) ; C with cedilla ! (set-case-syntax-pair 200 232 table) ; E with grave accent ! (set-case-syntax-pair 201 233 table) ; E with acute accent ! (set-case-syntax-pair 202 234 table) ; E with circumflex accent ! (set-case-syntax-pair 203 235 table) ; E with diaeresis or umlaut mark ! (set-case-syntax-pair 204 236 table) ; I with grave accent ! (set-case-syntax-pair 205 237 table) ; I with acute accent ! (set-case-syntax-pair 206 238 table) ; I with circumflex accent ! (set-case-syntax-pair 207 239 table) ; I with diaeresis or umlaut mark ! (set-case-syntax-pair 208 240 table) ; D with stroke, Icelandic eth ! (set-case-syntax-pair 209 241 table) ; N with tilde ! (set-case-syntax-pair 210 242 table) ; O with grave accent ! (set-case-syntax-pair 211 243 table) ; O with acute accent ! (set-case-syntax-pair 212 244 table) ; O with circumflex accent ! (set-case-syntax-pair 213 245 table) ; O with tilde ! (set-case-syntax-pair 214 246 table) ; O with diaeresis or umlaut mark ! (set-case-syntax 215 "_" table) ; multiplication sign ! (set-case-syntax-pair 216 248 table) ; O with slash ! (set-case-syntax-pair 217 249 table) ; U with grave accent ! (set-case-syntax-pair 218 250 table) ; U with acute accent ! (set-case-syntax-pair 219 251 table) ; U with circumflex accent ! (set-case-syntax-pair 220 252 table) ; U with diaeresis or umlaut mark ! (set-case-syntax-pair 221 253 table) ; Y with acute accent ! (set-case-syntax-pair 222 254 table) ; thorn, Icelandic ! (set-case-syntax 223 "w" table) ; small sharp s, German ! (set-case-syntax 247 "_" table) ; division sign ! (set-case-syntax 255 "w" table) ; small y with diaeresis or umlaut mark (set-standard-case-table (list (car table)))) (provide 'iso8859-1) diff -rcP emacs-19.7/lisp/loaddefs.el emacs-19.8/lisp/loaddefs.el *** emacs-19.7/lisp/loaddefs.el Sat May 22 14:33:28 1993 --- emacs-19.8/lisp/loaddefs.el Mon May 24 21:57:01 1993 *************** *** 341,346 **** --- 341,347 ---- (define-key esc-map "\C-b" 'backward-sexp) (define-key esc-map "\C-u" 'backward-up-list) (define-key esc-map "\C-@" 'mark-sexp) + (define-key esc-map [?\C-\ ] 'mark-sexp) (define-key esc-map "\C-d" 'down-list) (define-key esc-map "\C-k" 'kill-sexp) (define-key esc-map "\C-n" 'forward-list) *************** *** 985,992 **** ;;;*** ! ;;;### (autoloads (list-yahrzeit-dates calendar) "calendar" "calendar.el" (11259 8752)) ! ;;; Generated autoloads from calendar.el (defvar view-diary-entries-initially nil "\ *If t, the diary entries for the current date will be displayed on entry. --- 986,993 ---- ;;;*** ! ;;;### (autoloads (list-yahrzeit-dates calendar) "calendar" "/home/fsf/rms/e19/lisp/calendar.el" (11264 3998)) ! ;;; Generated autoloads from /home/fsf/rms/e19/lisp/calendar.el (defvar view-diary-entries-initially nil "\ *If t, the diary entries for the current date will be displayed on entry. *************** *** 1332,1343 **** If this is nil, it will be set for the local time zone when the calendar package loads.") ! (defvar calendar-daylight-savings-starts (quote (calendar-nth-named-day 1 0 4 year)) "\ *A sexp in the variable `year' that gives the Gregorian date, in the form of a list (month day year), on which daylight savings time starts. This is used to determine the starting date of daylight savings time for the holiday ! list and for correcting times of day in the solar and lunar calculations. The ! default value is the American rule of the first Sunday in April. For example, if daylight savings time is mandated to start on October 1, you would set `calendar-daylight-savings-starts' to --- 1333,1343 ---- If this is nil, it will be set for the local time zone when the calendar package loads.") ! (defvar calendar-daylight-savings-starts nil "\ *A sexp in the variable `year' that gives the Gregorian date, in the form of a list (month day year), on which daylight savings time starts. This is used to determine the starting date of daylight savings time for the holiday ! list and for correcting times of day in the solar and lunar calculations. For example, if daylight savings time is mandated to start on October 1, you would set `calendar-daylight-savings-starts' to *************** *** 1352,1365 **** (calendar-absolute-from-hebrew (list 1 1 (+ year 3760)))) ! because Nisan is the first month in the Hebrew calendar.") ! (defvar calendar-daylight-savings-ends (quote (calendar-nth-named-day -1 0 10 year)) "\ *An expression in the variable `year' that gives the Gregorian date, in the form of a list (month day year), on which daylight savings time ends. This is used to determine the ending date of daylight savings time for the holiday list and for correcting times of day in the solar and lunar calculations. ! The default value is the American rule of the last Sunday in October. See the documentation for `calendar-daylight-savings-starts' for other examples.") --- 1352,1370 ---- (calendar-absolute-from-hebrew (list 1 1 (+ year 3760)))) ! because Nisan is the first month in the Hebrew calendar. ! ! If this is nil and the locale ever uses daylight savings time, ! it will be set to the American rule of the first Sunday in April ! when the calendar package loads.") ! (defvar calendar-daylight-savings-ends nil "\ *An expression in the variable `year' that gives the Gregorian date, in the form of a list (month day year), on which daylight savings time ends. This is used to determine the ending date of daylight savings time for the holiday list and for correcting times of day in the solar and lunar calculations. ! The default value is the American rule of the last Sunday in October ! if the locale ever uses daylight savings time, otherwise nil. See the documentation for `calendar-daylight-savings-starts' for other examples.") *************** *** 2167,2173 **** ;;;*** ! ;;;### (autoloads (create-glyph standard-display-underline standard-display-graphic standard-display-g1 standard-display-ascii standard-display-8bit make-display-table describe-current-display-table) "disp-table" "disp-table.el" (11247 46371)) ;;; Generated autoloads from disp-table.el (autoload (quote describe-current-display-table) "disp-table" "\ --- 2172,2178 ---- ;;;*** ! ;;;### (autoloads (standard-display-european create-glyph standard-display-underline standard-display-graphic standard-display-g1 standard-display-ascii standard-display-default standard-display-8bit make-display-table describe-current-display-table) "disp-table" "disp-table.el" (11265 29044)) ;;; Generated autoloads from disp-table.el (autoload (quote describe-current-display-table) "disp-table" "\ *************** *** 2179,2184 **** --- 2184,2192 ---- (autoload (quote standard-display-8bit) "disp-table" "\ Display characters in the range L to H literally." nil nil) + (autoload (quote standard-display-default) "disp-table" "\ + Display characters in the range L to H using the default notation." nil nil) + (autoload (quote standard-display-ascii) "disp-table" "\ Display character C using string S." nil nil) *************** *** 2192,2197 **** --- 2200,2211 ---- Display character C as character UC plus underlining." nil nil) (autoload (quote create-glyph) "disp-table" nil nil nil) + + (autoload (quote standard-display-european) "disp-table" "\ + Toggle display of European characters encoded with ISO 8859. + When enabled, characters in the range of 160 to 255 display not + as octal escapes, but as accented characters. + With prefix argument, enable European character display iff arg is positive." t nil) ;;;*** diff -rcP emacs-19.7/lisp/lucid.el emacs-19.8/lisp/lucid.el *** emacs-19.7/lisp/lucid.el Sun May 2 23:25:19 1993 --- emacs-19.8/lisp/lucid.el Sun May 23 22:03:33 1993 *************** *** 121,130 **** (apply 'nconc (mapcar (lambda (buf) ! (if (= (string-to-char (buffer-name (car (cdr tail)))) ! ?\ ) nil ! (list buf))))))))) (defalias 'find-face 'internal-find-face) (defalias 'get-face 'internal-get-face) --- 121,130 ---- (apply 'nconc (mapcar (lambda (buf) ! (if (= ?\ (string-to-char (buffer-name buf))) nil ! (list buf))) ! (buffer-list))))))) (defalias 'find-face 'internal-find-face) (defalias 'get-face 'internal-get-face) diff -rcP emacs-19.7/lisp/menu-bar.el emacs-19.8/lisp/menu-bar.el *** emacs-19.7/lisp/menu-bar.el Mon May 17 00:42:51 1993 --- emacs-19.8/lisp/menu-bar.el Mon May 24 01:05:54 1993 *************** *** 200,210 **** (defvar menu-bar-mode nil) (defun menu-bar-mode (flag) ! "Toggle display of vertical scroll bars on each frame. This command applies to all frames that exist and frames to be created in the future. With a numeric argument, if the argument is negative, ! turn off scroll bars; otherwise, turn on scroll bars." (interactive "P") (setq menu-bar-mode (if (null flag) (not menu-bar-mode) (or (not (numberp flag)) (>= flag 0)))) --- 200,210 ---- (defvar menu-bar-mode nil) (defun menu-bar-mode (flag) ! "Toggle display of a menu bar on each frame. This command applies to all frames that exist and frames to be created in the future. With a numeric argument, if the argument is negative, ! turn off menu bars; otherwise, turn on menu bars." (interactive "P") (setq menu-bar-mode (if (null flag) (not menu-bar-mode) (or (not (numberp flag)) (>= flag 0)))) diff -rcP emacs-19.7/lisp/paths.el emacs-19.8/lisp/paths.el *** emacs-19.7/lisp/paths.el Thu Jan 28 01:09:25 1993 --- emacs-19.8/lisp/paths.el Tue May 25 05:56:57 1993 *************** *** 34,40 **** (defvar Info-default-directory-list (list "/usr/local/info/" "/usr/local/lib/info/" ! (expand-file-name "../info/" data-directory)) "List of directories to search for Info documentation files.") (defvar news-path "/usr/spool/news/" --- 34,42 ---- (defvar Info-default-directory-list (list "/usr/local/info/" "/usr/local/lib/info/" ! configure-info-directory ! (expand-file-name "../info/" data-directory) ! (expand-file-name "../../info/" data-directory)) "List of directories to search for Info documentation files.") (defvar news-path "/usr/spool/news/" diff -rcP emacs-19.7/lisp/register.el emacs-19.8/lisp/register.el *** emacs-19.7/lisp/register.el Sat May 8 20:57:56 1993 --- emacs-19.8/lisp/register.el Mon May 24 18:11:48 1993 *************** *** 84,90 **** (interactive "cJump to register: ") (let ((val (get-register char))) (cond ! ((frame-configuration-p val) (set-frame-configuration val)) ((window-configuration-p val) (set-window-configuration val)) --- 84,91 ---- (interactive "cJump to register: ") (let ((val (get-register char))) (cond ! ((and (fboundp 'frame-configuration-p) ! (frame-configuration-p val)) (set-frame-configuration val)) ((window-configuration-p val) (set-window-configuration val)) diff -rcP emacs-19.7/lisp/select.el emacs-19.8/lisp/select.el *** emacs-19.7/lisp/select.el Tue May 18 19:21:52 1993 --- emacs-19.8/lisp/select.el Mon May 24 17:16:34 1993 *************** *** 102,115 **** which-one) 'CUT_BUFFER0))) ! (defun x-set-cut-buffer (string) "Store STRING into the X server's primary cut buffer. ! The previous value of the primary cut buffer is rotated to the secondary 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." ;; Check the data type of STRING. (substring string 0 0) ! (x-rotate-cut-buffers-internal 1) (x-store-cut-buffer-internal 'CUT_BUFFER0 string)) --- 102,117 ---- which-one) 'CUT_BUFFER0))) ! (defun x-set-cut-buffer (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 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." ;; Check the data type of STRING. (substring string 0 0) ! (if push ! (x-rotate-cut-buffers-internal 1)) (x-store-cut-buffer-internal 'CUT_BUFFER0 string)) diff -rcP emacs-19.7/lisp/simple.el emacs-19.8/lisp/simple.el *** emacs-19.7/lisp/simple.el Sat May 22 00:21:16 1993 --- emacs-19.8/lisp/simple.el Mon May 24 17:18:57 1993 *************** *** 648,654 **** ;; aliases for shell commands then they can still have them. (call-process shell-file-name nil t nil "-c" command) ! (exchange-point-and-mark)) ;; Preserve the match data in case called from a program. (let ((data (match-data))) (unwind-protect --- 648,659 ---- ;; aliases for shell commands then they can still have them. (call-process shell-file-name nil t nil "-c" command) ! ;; This is like exchange-point-and-mark, but doesn't activate the mark. ! ;; It is cleaner to avoid activation, even though the command ! ;; loop would deactivate the mark because we inserted text. ! (goto-char (prog1 (mark t) ! (set-marker (mark-marker) (point) ! (current-buffer))))) ;; Preserve the match data in case called from a program. (let ((data (match-data))) (unwind-protect *************** *** 895,914 **** "Function to call to make a killed region available to other programs. Most window systems provide some sort of facility for cutting and ! pasting text between the windows of different programs. On startup, ! this variable is set to a function which emacs will call whenever text ! is put in the kill ring to make the new kill available to other programs. ! The function takes one argument, TEXT, which is a string containing ! the text which should be made available.") (defvar interprogram-paste-function nil "Function to call to get text cut from other programs. Most window systems provide some sort of facility for cutting and ! pasting text between the windows of different programs. On startup, ! this variable is set to a function which emacs will call to obtain text that other programs have provided for pasting. The function should be called with no arguments. If the function --- 900,922 ---- "Function to call to make a killed region available to other programs. Most window systems provide some sort of facility for cutting and ! pasting text between the windows of different programs. ! This variable holds a function that Emacs calls whenever text ! is put in the kill ring, to make the new kill available to other programs. ! The function takes one or two arguments. ! The first argument, TEXT, is a string containing ! the text which should be made available. ! The second, PUSH, if non-nil means this is a \"new\" kill; ! nil means appending to an \"old\" kill.") (defvar interprogram-paste-function nil "Function to call to get text cut from other programs. Most window systems provide some sort of facility for cutting and ! pasting text between the windows of different programs. ! This variable holds a function that Emacs calls to obtain text that other programs have provided for pasting. The function should be called with no arguments. If the function *************** *** 952,958 **** (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)) (setq kill-ring-yank-pointer kill-ring) (if interprogram-cut-function ! (funcall interprogram-cut-function string))) (defun kill-append (string before-p) "Append STRING to the end of the latest kill in the kill ring. --- 960,966 ---- (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)) (setq kill-ring-yank-pointer kill-ring) (if interprogram-cut-function ! (funcall interprogram-cut-function string t))) (defun kill-append (string before-p) "Append STRING to the end of the latest kill in the kill ring. diff -rcP emacs-19.7/lisp/startup.el emacs-19.8/lisp/startup.el *** emacs-19.7/lisp/startup.el Tue May 18 18:38:02 1993 --- emacs-19.8/lisp/startup.el Tue May 25 06:20:30 1993 *************** *** 47,53 **** ; -funcall function same ; -l file load file ; -load file same - ; -i file insert file into buffer ; -insert file same ; file visit file ; -kill kill (exit) emacs --- 47,52 ---- *************** *** 371,380 **** (setq file (expand-file-name file))) (load file nil t)) (setq command-line-args-left (cdr command-line-args-left))) ! ((or (string-equal argi "-i") ! (string-equal argi "-insert")) (or (stringp (car command-line-args-left)) ! (error "filename omitted from `-i' option")) (insert-file-contents (car command-line-args-left)) (setq command-line-args-left (cdr command-line-args-left))) ((string-equal argi "-kill") --- 370,378 ---- (setq file (expand-file-name file))) (load file nil t)) (setq command-line-args-left (cdr command-line-args-left))) ! ((string-equal argi "-insert") (or (stringp (car command-line-args-left)) ! (error "filename omitted from `-insert' option")) (insert-file-contents (car command-line-args-left)) (setq command-line-args-left (cdr command-line-args-left))) ((string-equal argi "-kill") diff -rcP emacs-19.7/lisp/swedish.el emacs-19.8/lisp/swedish.el *** emacs-19.7/lisp/swedish.el Mon Sep 21 07:26:42 1992 --- emacs-19.8/lisp/swedish.el Mon May 24 03:53:46 1993 *************** *** 4,10 **** ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i14n ;; This file is part of GNU Emacs. --- 4,10 ---- ;; Author: Howard Gayle ;; Maintainer: FSF ! ;; Keywords: i18n ;; This file is part of GNU Emacs. diff -rcP emacs-19.7/lisp/term/ChangeLog emacs-19.8/lisp/term/ChangeLog *** emacs-19.7/lisp/term/ChangeLog Sat May 22 19:39:22 1993 --- emacs-19.8/lisp/term/ChangeLog Tue May 25 10:51:28 1993 *************** *** 1,3 **** --- 1,17 ---- + Tue May 25 05:15:14 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + + Tue May 25 06:26:51 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * x-win.el (command-switch-alist, x-switch-definitions): Treat + `-i' like `-itype', as in Emacs 18. + + Mon May 24 17:17:02 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * x-win.el (x-select-text): New arg PUSH. + (x-switch-definitions): Represent -r as `reverse' option. + Sat May 22 19:37:01 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) * Version 19.7 released. diff -rcP emacs-19.7/lisp/term/x-win.el emacs-19.8/lisp/term/x-win.el *** emacs-19.7/lisp/term/x-win.el Wed May 12 18:57:34 1993 --- emacs-19.8/lisp/term/x-win.el Tue May 25 06:26:44 1993 *************** *** 53,58 **** --- 53,60 ---- ;; -font *font ;; -foreground *foreground ;; -geometry .geometry + ;; -i .iconType + ;; -itype .iconType ;; -iconic .iconic ;; -name .name ;; -reverse *reverseVideo *************** *** 94,99 **** --- 96,102 ---- ("-background". x-handle-switch) ("-ms" . x-handle-switch) ("-itype" . x-handle-switch) + ("-i" . x-handle-switch) ("-iconic" . x-handle-switch) ("-cr" . x-handle-switch) ("-vb" . x-handle-switch) *************** *** 104,112 **** (defconst x-switch-definitions '(("-name" name) ("-T" name) ! ("-r" lose) ! ("-rv" lose) ! ("-reverse" lose) ("-fn" font) ("-font" font) ("-ib" internal-border-width) --- 107,115 ---- (defconst x-switch-definitions '(("-name" name) ("-T" name) ! ("-r" reverse t) ! ("-rv" reverse t) ! ("-reverse" reverse t) ("-fn" font) ("-font" font) ("-ib" internal-border-width) *************** *** 117,122 **** --- 120,126 ---- ("-ms" mouse-color) ("-cr" cursor-color) ("-itype" icon-type t) + ("-i" icon-type t) ("-iconic" iconic-startup t) ("-vb" vertical-scroll-bars t) ("-hb" horizontal-scroll-bars t) *************** *** 469,476 **** ;;; have a window on a copy of the kill-ring. ;;; Also, set the value of X cut buffer 0, for backward compatibility ;;; with older X applications. ! (defun x-select-text (text) ! (x-set-cut-buffer text) (x-set-selection 'CLIPBOARD text) (x-set-selection 'PRIMARY text) (setq x-last-selected-text text)) --- 473,480 ---- ;;; have a window on a copy of the kill-ring. ;;; Also, set the value of X cut buffer 0, for backward compatibility ;;; with older X applications. ! (defun x-select-text (text &optional push) ! (x-set-cut-buffer text push) (x-set-selection 'CLIPBOARD text) (x-set-selection 'PRIMARY text) (setq x-last-selected-text text)) diff -rcP emacs-19.7/lisp/version.el emacs-19.8/lisp/version.el *** emacs-19.7/lisp/version.el Sat May 22 19:51:20 1993 --- emacs-19.8/lisp/version.el Tue May 25 10:50:31 1993 *************** *** 25,31 **** ;; The following line is modified automatically ;; by loading inc-version.el, each time a new Emacs is dumped. ! (defconst emacs-version "19.7.0" "\ Version numbers of this version of Emacs.") (defconst emacs-build-time (current-time-string) "\ --- 25,31 ---- ;; The following line is modified automatically ;; by loading inc-version.el, each time a new Emacs is dumped. ! (defconst emacs-version "19.8.0" "\ Version numbers of this version of Emacs.") (defconst emacs-build-time (current-time-string) "\ diff -rcP emacs-19.7/make-dist emacs-19.8/make-dist *** emacs-19.7/make-dist Sat May 22 20:15:06 1993 --- emacs-19.8/make-dist Mon May 24 12:13:03 1993 *************** *** 276,281 **** --- 276,289 ---- cp etc/COPYING ${tempdir}/${subdir} done + #### Make sure that there aren't any hard links between files in the + #### distribution; people with afs can't deal with that. Okay, + #### actually we just re-copy anything with a link count greater + #### than two. + echo "Breaking intra-tree links." + find ${tempdir} ! -type d -links +2 \ + -exec cp {} $$ \; -exec rm -f {} \; -exec mv $$ {} \; + if [ "${newer}" ]; then echo "Removing files older than $newer." ## We remove .elc files unconditionally, on the theory that anyone picking diff -rcP emacs-19.7/man/ChangeLog emacs-19.8/man/ChangeLog *** emacs-19.7/man/ChangeLog Sat May 22 19:39:43 1993 --- emacs-19.8/man/ChangeLog Tue May 25 10:52:54 1993 *************** *** 1,3 **** --- 1,18 ---- + Tue May 25 05:15:14 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + + Tue May 25 01:51:29 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * cmdargs.texi: Document the -i, -itype, and -iconic options. + + * trouble.texi: It's `enable-flow-control-on', not + `evade-flow-control-on'. + + Mon May 24 12:14:41 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * display.texi: Document standard-display-european. + Sat May 22 17:41:18 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) * Version 19.7 released. diff -rcP emacs-19.7/man/cmdargs.texi emacs-19.8/man/cmdargs.texi *** emacs-19.7/man/cmdargs.texi Thu May 20 23:44:25 1993 --- emacs-19.8/man/cmdargs.texi Tue May 25 10:57:49 1993 *************** *** 40,45 **** --- 40,46 ---- * Colors X:: Choosing colors, under X. * Window Size X:: Start-up window size, under X. * Borders X:: Internal and external borders, under X. + * Icons X:: Choosing what sort of icon to use, under X. * Resources X:: Advanced use of classes and resources, under X. @end menu *************** *** 65,71 **** @itemx -funcall @var{function} Call Lisp function @var{function} with no arguments. - @item -i @var{file} @itemx -insert @var{file} Insert the contents of @var{file} into the current buffer. This is like what @kbd{M-x insert-buffer} does; @xref{Misc File Ops}. --- 66,71 ---- *************** *** 411,416 **** --- 411,437 ---- add to this on certain edges). The default width of the external border is 2. + @node Icons X + @appendixsec Icons + @cindex icons (X Windows) + + Most window managers allow the user to ``iconify'' a frame, removing + it from sight, and leaving a small, distinctive ``icon'' window in its + place. Clicking on the icon window will make the original frame visible + again. If a user has many clients running at once, they can avoid + cluttering up their screen by iconifying all but the clients currently + in use. + + The @samp{-i} and @samp{-itype} option tells Emacs to use an icon + window containing a picture of the GNU gnu. If omitted, Emacs lets the + window manager choose what sort of icon to use --- usually just a small + rectangle containing the frame's title. + + The @samp{-iconic} option tells Emacs to begin running as an icon, + rather than opening a frame right away. In this situation, the icon + window provides only indication that Emacs has started; the usual text + frame doesn't appear until you de-iconify it. + @node Resources X @appendixsec X Resources *************** *** 503,514 **** @item @code{font} (class @code{Font}) Font name for text. - @item @code{PaneFont} (class @code{Font}) - Font name for menu pane titles. - - @item @code{SelectionFont} (class @code{Font}) - Font name for menu items. - @item @code{foreground} (class @code{Foreground}) Color name for text. --- 524,529 ---- *************** *** 521,526 **** --- 536,546 ---- @item @code{internalBorder} (class @code{BorderWidth}) Width in pixels of internal border. + @ignore + @item @code{PaneFont} (class is not usable) + Font name for menu pane titles. + @end ignore + @item @code{pointerColor} (class @code{Foreground}) Color of mouse cursor. *************** *** 527,532 **** --- 547,557 ---- @item @code{reverseVideo} (class @code{ReverseVideo}) Switch foreground and background default colors if @samp{on}, use colors as specified if @samp{off}. + + @ignore + @item @code{SelectionFont} (class is not usable) + Font name for menu items. + @end ignore @item @code{title} (class @code{Title}) Name to display in title bar of initial Emacs frame. diff -rcP emacs-19.7/man/display.texi emacs-19.8/man/display.texi *** emacs-19.7/man/display.texi Wed May 19 16:06:05 1993 --- emacs-19.8/man/display.texi Mon May 24 21:06:15 1993 *************** *** 206,211 **** --- 206,227 ---- @node Optional Display @section Optional Display Features + @cindex European character sets + @cindex accented characters + @cindex ISO Latin-1 character sets + @findex standard-display-european + + Emacs can display accented characters, assuming the font in use + supports them. The @kbd{M-x standard-display-european} command toggles + European character display. When enabled, Emacs displays characters + according to the ISO 8859 Latin-1 encoding for European languages; when + disabled, Emacs uses octal notation for all characters not specified by + the ordinary ASCII standard. + + With a prefix argument, @kbd{M-x standard-display-european} enables + European character display iff the argument is positive. + + @cindex Line Number mode @cindex mode, Line Number @findex line-number-mode diff -rcP emacs-19.7/man/emacs.texi emacs-19.8/man/emacs.texi *** emacs-19.7/man/emacs.texi Sat May 22 17:09:18 1993 --- emacs-19.8/man/emacs.texi Mon May 24 12:04:04 1993 *************** *** 75,81 **** Emacs is the extensible, customizable, self-documenting real-time display editor. This Info file describes how to edit with Emacs and some of how to customize it, but not how to extend it. It ! corresponds to GNU Emacs version 19.7. @end ifinfo @menu --- 75,81 ---- Emacs is the extensible, customizable, self-documenting real-time display editor. This Info file describes how to edit with Emacs and some of how to customize it, but not how to extend it. It ! corresponds to GNU Emacs version 19.8. @end ifinfo @menu diff -rcP emacs-19.7/man/help.texi emacs-19.8/man/help.texi *** emacs-19.7/man/help.texi Wed May 19 16:07:02 1993 --- emacs-19.8/man/help.texi Mon May 24 03:40:31 1993 *************** *** 250,256 **** Support for interfacing with exotic hardware. @item help Support for on-line help systems. ! @item i14n Internationalization and alternate character-set support. @item internal Code for Emacs internals, build process, defaults. --- 250,256 ---- Support for interfacing with exotic hardware. @item help Support for on-line help systems. ! @item i18n Internationalization and alternate character-set support. @item internal Code for Emacs internals, build process, defaults. *************** *** 275,281 **** @item tools Programming tools. @item unix ! Front-ends/assistants for, or emulators of, UNIX features. @item vms Support code for VMS. @item wp --- 275,281 ---- @item tools Programming tools. @item unix ! Front-ends/assistants for, or emulators of, Unix features. @item vms Support code for VMS. @item wp diff -rcP emacs-19.7/man/trouble.texi emacs-19.8/man/trouble.texi *** emacs-19.7/man/trouble.texi Fri May 21 13:19:24 1993 --- emacs-19.8/man/trouble.texi Tue May 25 01:51:28 1993 *************** *** 184,199 **** is to tell Emacs to cope with it. To do this, call the function @code{enable-flow-control}. ! @findex evade-flow-control-on Typically there are particular terminal types with which you must use flow control. You can conveniently ask for flow control on those ! terminal types only, using @code{evade-flow-control-on}. For example, if you find you must use flow control on VT-100 and H19 terminals, put the following in your @file{.emacs} file: ! @findex evade-flow-control-on @example ! (evade-flow-control-on "vt100" "h19") @end example When flow control is enabled, you must type @kbd{C-\} to get the --- 184,199 ---- is to tell Emacs to cope with it. To do this, call the function @code{enable-flow-control}. ! @findex enable-flow-control-on Typically there are particular terminal types with which you must use flow control. You can conveniently ask for flow control on those ! terminal types only, using @code{enable-flow-control-on}. For example, if you find you must use flow control on VT-100 and H19 terminals, put the following in your @file{.emacs} file: ! @findex enable-flow-control-on @example ! (enable-flow-control-on "vt100" "h19") @end example When flow control is enabled, you must type @kbd{C-\} to get the diff -rcP emacs-19.7/oldXMenu/ChangeLog emacs-19.8/oldXMenu/ChangeLog *** emacs-19.7/oldXMenu/ChangeLog Sat May 22 19:40:11 1993 --- emacs-19.8/oldXMenu/ChangeLog Mon May 24 12:17:34 1993 *************** *** 1,3 **** --- 1,18 ---- + Mon May 24 12:14:41 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + + Sun May 23 17:47:43 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * Makefile.in (C_SWITCH_X_SITE): New variable, so that the + configuration process can correctly implement the --x-includes + option. + + Sat May 22 23:48:24 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * Create.c (XMenuCreate): Initialize the menu's pixmaps to None, + not NULL. + Sat May 22 19:37:01 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) * Version 19.7 released. diff -rcP emacs-19.7/oldXMenu/Create.c emacs-19.8/oldXMenu/Create.c *** emacs-19.7/oldXMenu/Create.c Wed Mar 24 21:02:24 1993 --- emacs-19.8/oldXMenu/Create.c Sat May 22 23:48:11 1993 *************** *** 712,722 **** menu->s_frg_color = s_frg_color.pixel; menu->bkgnd_color = bkgnd_color.pixel; /* -------------------- Pixmap data -------------------- */ ! menu->p_bdr_pixmap = NULL; ! menu->s_bdr_pixmap = NULL; ! menu->p_frg_pixmap = NULL; ! menu->s_frg_pixmap = NULL; ! menu->bkgnd_pixmap = NULL; menu->inact_pixmap = inact_bitmap; /* --- 712,722 ---- menu->s_frg_color = s_frg_color.pixel; menu->bkgnd_color = bkgnd_color.pixel; /* -------------------- Pixmap data -------------------- */ ! menu->p_bdr_pixmap = None; ! menu->s_bdr_pixmap = None; ! menu->p_frg_pixmap = None; ! menu->s_frg_pixmap = None; ! menu->bkgnd_pixmap = None; menu->inact_pixmap = inact_bitmap; /* diff -rcP emacs-19.7/oldXMenu/Makefile.in emacs-19.8/oldXMenu/Makefile.in *** emacs-19.7/oldXMenu/Makefile.in Sat May 15 17:51:53 1993 --- emacs-19.8/oldXMenu/Makefile.in Sun May 23 17:39:32 1993 *************** *** 1,5 **** --- 1,6 ---- srcdir=@srcdir@/oldXmenu VPATH=@srcdir@/oldXMenu + C_SWITCH_X_SITE= # Uncomment following line if linking temacs complains about missing insque. # EXTRA=insque.o *************** *** 78,85 **** SetSel.o \ XDelAssoc.o XLookAssoc.o XCrAssoc.o XDestAssoc.o XMakeAssoc.o .c.o: ! $(CC) -c $(CFLAGS) $(C_SWITCH_SITE) $(C_SWITCH_SYSTEM) ${srcdir}/$*.c all:: libXMenu11.a --- 79,87 ---- SetSel.o \ XDelAssoc.o XLookAssoc.o XCrAssoc.o XDestAssoc.o XMakeAssoc.o + ALL_CFLAGS=$(CFLAGS) $(C_SWITCH_SITE) $(C_SWITCH_SYSTEM) $(C_SWITCH_X_SITE) .c.o: ! $(CC) -c ${ALL_CFLAGS} ${srcdir}/$*.c all:: libXMenu11.a diff -rcP emacs-19.7/src/ChangeLog emacs-19.8/src/ChangeLog *** emacs-19.7/src/ChangeLog Sat May 22 19:36:46 1993 --- emacs-19.8/src/ChangeLog Tue May 25 10:54:02 1993 *************** *** 1,3 **** --- 1,252 ---- + Tue May 25 05:15:14 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + + Tue May 25 00:52:36 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * xfns.c: Clear out the old face stuff. + (x_face_table, n_faces, x_set_face, x_set_glyph, Fx_set_face_font, + Fx_set_face, Fx_get_face): Removed. + (syms_of_xfns): Remove defsubr for Fx_set_face. + + Arrange for font names to get fully resolved - no wildcards. + * xfns.c (x_set_frame_parameters): Store the value in the frame + parameter alist before we call the setter function, so the setter + function can touch up the value if it chooses. + (x_set_foreground_color, x_set_background_color): Call + recompute_basic_faces, so their GC's will reflect the changes. + (x_new_font): Add extern declaration - this returns a Lisp_Object + now, the fully resolved font name. + (x_set_font): Accept the fully resolved name from x_new_font, and + put it in the frame's parameter alist. Call recompute_basic_faces. + * xterm.c (x_new_font): Return the fully resolved font name, Qnil + (if no match), or Qt (match, but unacceptable metrics). + * xterm.c (x_new_font): Don't call init_frame_faces. + + * xterm.h: New section for declarations for xfaces.c. + (init_frame_faces, free_frame_faces, intern_face, + face_name_id_number, same_size_fonts, recompute_basic_faces, + compute_char_face, compute_glyph_face): Declare these here. + * xfaces.c (same_size_fonts): We can now remove this extern + declaration. + * xfns.c (face_name_id_number): Likewise. + * xterm.c (intern_face): Likewise. + + * xterm.c (dumpglyphs): Remember that the default faces can have + null fonts, too. + + * xfns.c (Fx_list_fonts): Remember that FACE may not have a font + specified. Don't specify 30000 as the maximum limit on the number + of fontns returned - 2000 is more reasonable. + + * xfaces.c (build_face, unload_font, free_frame_faces): Don't + forget to block input while making X calls. + + Treat faces as structures specifying modifications to the frame's + parameters, rather than things which need to specify a complete + set of parameters by themselves. + * xfaces.c (init_frame_faces): Don't set up the two frame display + faces by querying the GC - just leave all their fields blank, and + call recompute_basic_faces, letting build_face do the work of + consulting the frame when necessary. + (recompute_basic_faces): New function. + (compute_base_faces): New function for obtaining the "identity" + for compute_char_face and compute_glyph_face. + (compute_char_face, compute_glyph_face): Call it, instead of copying + FRAME_DEFAULT_FACE. + * xfns.c (x_make_gc): No need to call init_frame_faces here. + + * xfaces.c (intern_frame_face): This can be static. + + * dispextern.h (struct face): New field - `copy', to help us with + resource allocation. + * xfaces.c (free_frame_faces): Do free the first two faces; don't + free anything from a face that's a copy. + (intern_frame_face): Mark every face we intern as a copy; its + resources are actually a combination of the real faces. + (Fset_face_attribute_internal): No need to check if we're trying + to free one of the frame's GC's; they never enter into the + picture. + + * casetab.c: Fix formatting, so as not to confuse etags. + + * xfns.c (Fx_list_fonts): New function. + (face_name_id_number): Add extern declaration for this. + * xfaces.c (face_name_id_number): Make this externally visible, + and make the FRAME argument a FRAME_PTR, not a Lisp_Object. + (compute_char_face): Call face_name_id_number properly. + + * xfaces.c (unload_color): Don't free the pixel for now. + + * xfaces.c (merge_faces): You can't tell if a font is a + character-cell font or not by testing whether or not it has a + per_char table. They all do. + * xterm.c (x_new_font): Same deal. + * xfns.c (Fx_list_fonts): Same deal. + + * m/iris4d.h: Dyke out the section which specifies how to get the + load average. + + * paths.h (PATH_INFO): New path, to edited by the configuration + process. + * callproc.c (Vconfigure_info_directory): New variable, used + internally by build process. + (syms_of_callproc): DEFVAR it and initialize it. + + * keyboard.c (Fcurrent_input_mode): Use XFASTINT to build the last + element of the return value, not XSETINT. + + Mon May 24 12:14:41 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + Changes for OSF/1: + * mem-limits.h [__osf__ && (__mips || mips)]: #include + and . + (get_lim_data): OSF wants a definition like BSD4_2's. + * s/osf1.h: #include "bsd4-3.h", not "s-bsd4-3.h". + + * ymakefile (LIBX): Put LD_SWITCH_X_SITE before the libraries, so + it actually has an effect. + + Some makes can't handle form feed characters in their makefiles. + * s/usg5-3.h: Remove form feed. + * s/template.h, m/template.h: Remove form feeds. + + * xfns.c (select_visual): Include the screen number in the + template of things XGetVisualInfo must match. + + Mon May 24 17:41:19 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * s/dgux.h (NO_GET_LOAD_AVG): Test _M88KBCS_TARGET, not __GNUC__. + + * xterm.c (XTread_socket, ConfigureNotify case): + Convert from parent window, not Emacs window. + (XTread_socket): Handle ReparentNotify events. + + * m/i860.h: New file. + + * keyboard.c (lispy_function_keys): Add kp-numlock. Fix kp-backspace. + + Mon May 24 15:15:41 1993 Thorsten Ohl (ohl@chico.harvard.edu) + + * m/next.h (C_SWITCH_MACHINE): Definition deleted. + + * lread.c: Don't #undef NULL. + + Mon May 24 16:50:42 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * buffer.c (Fmake_overlay): Put beg and end in the + right order. + (Fmove_overlay): If beg and end are markers, make sure they're in + the right buffer. + + Mon May 24 15:21:10 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * keyboard.c (modify_event_symbol): If a name_table elt is null, + generate a name to use. Don't crash. + + * fileio.c (Fread_file_name): If input is empty, do return the default + even if !insert_default_directory. + + * xterm.c (XTread_socket): For ConfigureNotify event, + translate coordinates if send_event field is false + provided the x-coord value is not large. + + Mon May 24 13:42:24 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * s/irix4-0.h (NO_MATHERR): Defined. + * floatfns.c [NO_MATHERR]: Undef HAVE_MATHERR. + + Mon May 24 04:05:22 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * fileio.c (Ffile_writable_p): Pass XSTRING (foo)->data to + ro_fsys, not XSTRING (foo). + + * xterm.c (x_new_font): Reject fonts with varying spacing. We + don't support them yet. + * xfns.c (x_set_font): Report the error message properly. + + * xfns.c (Fx_parse_geometry): No need to call check_x here; it + doesn't interact with the server at all, and we need it in order + to create our first frame. + + Mon May 24 02:14:58 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * s/linux.h (HAVE_SETSID): Defined. + (HAVE_SOCKETS): Defined. + + * process.c (create_process): Ignore retval from TIOCSTTY. + (sys_siglist) [LINUX]: Don't even declare it. + + Mon May 24 01:11:23 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * syssignal.h (sys_signal): Declare the second argument to have + type signal_handler_t. We're told this is necessary for Linux. + + Mon May 24 01:01:43 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * s/dgux.h (NO_GET_LOAD_AVG): Define, if __GNUC__. + + Sun May 23 23:39:35 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * s/hpux8.h (NO_SIOCTL_H): Defined. + + Sun May 23 23:29:31 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * s/linux.h (HAVE_DUP2, HAVE_ALLOCA_H): Deleted. + + Sun May 23 22:27:33 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * syssignal.h: Don't #include + * alloc.c: #include , but before "config.h". + + Sun May 23 18:38:26 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * xfaces.c (Fset_face_attribute_internal): Don't call unload_font + for the frame's own font. + + * xfns.c (check_x): New function. + Call it in almost every Lisp function in this file. + (x_set_menu_bar_lines_1): Pass both args in recursive call. + + Sun May 23 21:44:35 1993 Paul Eggert (eggert@twinsun.com) + + * editfns.c (Fcurrent_time_zone): Make `am' an int, not long. + + Sun May 23 15:23:05 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + Changes for SGI from Matthew J Brown . + * m/iris4d.h, m/iris5d.h: Don't use the --cckr CC switch if we're + using GCC. + * m/iris4d.h (NEED_SIOCTL): Move this to... + * s/irix3-3.h (NEED_SIOCTL): ... here; apparently it's not + necessary in irix4-0.h. + * s/irix4-0.h: Remove declaration of getpty; apparently Irix 4.0 + already declares this elsewhere. + (PTY_TTY_NAME_SPRINTF): #undef this before re-#defining it. + * m/ibmps2-aix.h, m/pfa50.h, s/hpux.h, s/isc2-2.h, s/linux.h, + s/sco4.h, s/usg5-4.h: Remove HAVE_RENAME; configure guesses that now. + + * config.h.in (LD_SWITCH_X_SITE, C_SWITCH_X_SITE): Change the + #defines to #undef's, so ../configure knows it should tweak them. + + * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not + the mouse is over a scroll bar. + + * xfaces.c (Fset_face_attribute_internal): Don't free the frame's + normal_gc or reverse_gc. + + * keyboard.c (make_lispy_movement): Deal properly with mouse + motion outside of all windows. + + * lisp.h (GLYPH_FACE): Remember that the face portion of a glyph + can be 24 bits, not just eight. + + Sun May 23 14:03:48 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * xterm.c: Move signal.h and stdio.h before config.h. + + * editfns.c (Fcurrent_time_zone): Assign gmt, instead of init. + Sat May 22 17:44:54 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) * Version 19.7 released. *************** *** 15992,15994 **** --- 16241,16250 ---- too-complex expression. * fileio.c (Fdo_auto_save): No "file has shrunk" msg if < 5000 chars. + + Local Variables: + mode: indented-text + left-margin: 8 + fill-column: 74 + version-control: never + End: diff -rcP emacs-19.7/src/alloc.c emacs-19.8/src/alloc.c *** emacs-19.7/src/alloc.c Sat May 22 18:48:25 1993 --- emacs-19.8/src/alloc.c Sun May 23 22:30:13 1993 *************** *** 17,22 **** --- 17,23 ---- along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + #include #include "config.h" #include "lisp.h" diff -rcP emacs-19.7/src/alloca.c emacs-19.8/src/alloca.c *** emacs-19.7/src/alloca.c Sun May 23 15:12:33 1993 --- emacs-19.8/src/alloca.c Tue May 25 11:05:12 1993 *************** *** 60,68 **** #define NULL 0 ! #ifdef emacs ! #define xmalloc malloc ! #else extern pointer xmalloc (); #endif --- 60,77 ---- #define NULL 0 ! /* Different portions of Emacs need to call different versions of ! malloc. The Emacs executable needs alloca to call xmalloc, because ! ordinary malloc isn't protected from input signals. On the other ! hand, the utilities in lib-src need alloca to call malloc; some of ! them are very simple, and don't have an xmalloc routine. ! ! Non-Emacs programs expect this to call use xmalloc. ! ! Callers below should use malloc. */ ! ! #ifndef emacs ! #define malloc xmalloc extern pointer xmalloc (); #endif *************** *** 181,187 **** /* Allocate combined header + user data storage. */ { ! register pointer new = xmalloc (sizeof (header) + size); /* Address of header. */ ((header *) new)->h.next = last_alloca_header; --- 190,196 ---- /* Allocate combined header + user data storage. */ { ! register pointer new = malloc (sizeof (header) + size); /* Address of header. */ ((header *) new)->h.next = last_alloca_header; diff -rcP emacs-19.7/src/buffer.c emacs-19.8/src/buffer.c *** emacs-19.7/src/buffer.c Sat May 22 14:40:24 1993 --- emacs-19.8/src/buffer.c Mon May 24 16:55:07 1993 *************** *** 1489,1517 **** if (NILP (buffer)) XSET (buffer, Lisp_Buffer, current_buffer); ! CHECK_BUFFER (buffer, 2); ! b = XBUFFER (buffer); ! if (MARKERP (beg)) ! { ! if (! EQ (Fmarker_buffer (beg), buffer)) ! error ("Marker points into wrong buffer"); ! else ! beg = Fcopy_marker (beg); ! } ! else ! beg = Fset_marker (Fmake_marker (), beg, buffer); ! if (MARKERP (end)) { ! if (! EQ (Fmarker_buffer (end), buffer)) ! error ("Marker points into wrong buffer"); ! else ! end = Fcopy_marker (end); } - else - end = Fset_marker (Fmake_marker (), end, buffer); overlay = Fcons (Fcons (beg, end), Qnil); XSETTYPE (overlay, Lisp_Overlay); --- 1489,1517 ---- if (NILP (buffer)) XSET (buffer, Lisp_Buffer, current_buffer); ! else ! CHECK_BUFFER (buffer, 2); ! if (MARKERP (beg) ! && ! EQ (Fmarker_buffer (beg), buffer)) ! error ("Marker points into wrong buffer"); ! if (MARKERP (end) ! && ! EQ (Fmarker_buffer (end), buffer)) ! error ("Marker points into wrong buffer"); ! CHECK_NUMBER_COERCE_MARKER (beg, 1); ! CHECK_NUMBER_COERCE_MARKER (end, 1); ! if (XINT (beg) > XINT (end)) { ! Lisp_Object temp = beg; ! beg = end; end = temp; } + b = XBUFFER (buffer); + + beg = Fset_marker (Fmake_marker (), beg, buffer); + end = Fset_marker (Fmake_marker (), end, buffer); + overlay = Fcons (Fcons (beg, end), Qnil); XSETTYPE (overlay, Lisp_Overlay); *************** *** 1547,1552 **** --- 1547,1560 ---- if (NILP (buffer)) XSET (buffer, Lisp_Buffer, current_buffer); CHECK_BUFFER (buffer, 3); + + if (MARKERP (beg) + && ! EQ (Fmarker_buffer (beg), buffer)) + error ("Marker points into wrong buffer"); + if (MARKERP (end) + && ! EQ (Fmarker_buffer (end), buffer)) + error ("Marker points into wrong buffer"); + CHECK_NUMBER_COERCE_MARKER (beg, 1); CHECK_NUMBER_COERCE_MARKER (end, 1); diff -rcP emacs-19.7/src/callproc.c emacs-19.8/src/callproc.c *** emacs-19.7/src/callproc.c Sat May 22 14:41:47 1993 --- emacs-19.8/src/callproc.c Tue May 25 02:38:06 1993 *************** *** 65,70 **** --- 65,71 ---- #define max(a, b) ((a) > (b) ? (a) : (b)) Lisp_Object Vexec_path, Vexec_directory, Vdata_directory; + Lisp_Object Vconfigure_info_directory; Lisp_Object Vshell_file_name; *************** *** 703,708 **** --- 704,716 ---- DEFVAR_LISP ("data-directory", &Vdata_directory, "Directory of architecture-independent files that come with GNU Emacs,\n\ intended for Emacs to use."); + + DEFVAR_LISP ("configure-info-directory", &Vconfigure_info_directory, + "For internal use by the build procedure only.\n\ + This is the name of the directory in which the build procedure installed\n\ + Emacs's info files; the default value for Info-default-directory-list\n\ + includes this."); + Vconfigure_info_directory = build_string (PATH_INFO); DEFVAR_LISP ("process-environment", &Vprocess_environment, "List of environment variables for subprocesses to inherit.\n\ diff -rcP emacs-19.7/src/casetab.c emacs-19.8/src/casetab.c *** emacs-19.7/src/casetab.c Sat May 22 14:46:57 1993 --- emacs-19.8/src/casetab.c Tue May 25 09:03:18 1993 *************** *** 76,83 **** return Fcons (down, Fcons (up, Fcons (canon, Fcons (eqv, Qnil)))); } ! DEFUN ("standard-case-table", Fstandard_case_table, ! Sstandard_case_table, 0, 0, 0, "Return the standard case table.\n\ This is the one used for new buffers.") () --- 76,82 ---- return Fcons (down, Fcons (up, Fcons (canon, Fcons (eqv, Qnil)))); } ! DEFUN ("standard-case-table", Fstandard_case_table, Sstandard_case_table, 0, 0, 0, "Return the standard case table.\n\ This is the one used for new buffers.") () *************** *** 111,118 **** return set_case_table (table, 0); } ! DEFUN ("set-standard-case-table", ! Fset_standard_case_table, Sset_standard_case_table, 1, 1, 0, "Select a new standard case table for new buffers.\n\ See `set-case-table' for more info on case tables.") (table) --- 110,116 ---- return set_case_table (table, 0); } ! DEFUN ("set-standard-case-table", Fset_standard_case_table, Sset_standard_case_table, 1, 1, 0, "Select a new standard case table for new buffers.\n\ See `set-case-table' for more info on case tables.") (table) diff -rcP emacs-19.7/src/config.h.in emacs-19.8/src/config.h.in *** emacs-19.7/src/config.h.in Sat May 22 16:54:09 1993 --- emacs-19.8/src/config.h.in Sun May 23 17:24:18 1993 *************** *** 157,163 **** HAVE_X_WINDOWS above and your X libraries aren't in a place that your loader can find on its own, you might want to add "-L/..." or something similar. */ ! #define LD_SWITCH_X_SITE /* Define C_SWITCH_X_SITE to contain any special flags your compiler may need to deal with X Windows. For instance, if you've defined --- 157,163 ---- HAVE_X_WINDOWS above and your X libraries aren't in a place that your loader can find on its own, you might want to add "-L/..." or something similar. */ ! #undef LD_SWITCH_X_SITE /* Define C_SWITCH_X_SITE to contain any special flags your compiler may need to deal with X Windows. For instance, if you've defined *************** *** 164,170 **** HAVE_X_WINDOWS above and your X include files aren't in a place that your compiler can find on its own, you might want to add "-I/..." or something similar. */ ! #define C_SWITCH_X_SITE /* Define the return type of signal handlers if the s-xxx file did not already do so. */ --- 164,170 ---- HAVE_X_WINDOWS above and your X include files aren't in a place that your compiler can find on its own, you might want to add "-I/..." or something similar. */ ! #undef C_SWITCH_X_SITE /* Define the return type of signal handlers if the s-xxx file did not already do so. */ diff -rcP emacs-19.7/src/dispextern.h emacs-19.8/src/dispextern.h *** emacs-19.7/src/dispextern.h Sat May 22 14:49:13 1993 --- emacs-19.8/src/dispextern.h Tue May 25 08:35:03 1993 *************** *** 54,59 **** --- 54,68 ---- /* Whether or not to underline text in this face. */ char underline; + + /* Does this face own its resources? (color, font, etcetera) + If this is a face which we computed by combining other faces, + then this is true, and we shouldn't free any of the resources + it refers to; the faces from which it was constructed own it. + On the other hand, if this is a face the user created and + filled in directly, then this is false, and we should free the + resources when we free it. */ + char copy; }; /* Let's stop using this and get rid of it. */ diff -rcP emacs-19.7/src/editfns.c emacs-19.8/src/editfns.c *** emacs-19.7/src/editfns.c Sat May 22 17:39:08 1993 --- emacs-19.8/src/editfns.c Sun May 23 18:41:25 1993 *************** *** 634,640 **** and from `file-attributes'.\n\ \n\ Some operating systems cannot provide all this information to Emacs;\n\ ! in this case, current-time-zone will return a list containing nil for\n\ the data it can't find.") (specified_time) Lisp_Object specified_time; --- 634,640 ---- and from `file-attributes'.\n\ \n\ Some operating systems cannot provide all this information to Emacs;\n\ ! in this case, `current-time-zone' returns a list containing nil for\n\ the data it can't find.") (specified_time) Lisp_Object specified_time; *************** *** 643,655 **** struct tm *t; if (lisp_time_argument (specified_time, &value) ! && (t = gmtime(&value)) != 0) { ! struct tm gmt = *t; /* Make a copy, in case localtime modifies *t. */ long offset; char *s, buf[6]; ! t = localtime(&value); ! offset = difftm(t, &gmt); s = 0; #ifdef HAVE_TM_ZONE if (t->tm_zone) --- 643,657 ---- struct tm *t; if (lisp_time_argument (specified_time, &value) ! && (t = gmtime (&value)) != 0) { ! struct tm gmt; long offset; char *s, buf[6]; ! ! gmt = *t; /* Make a copy, in case localtime modifies *t. */ ! t = localtime (&value); ! offset = difftm (t, &gmt); s = 0; #ifdef HAVE_TM_ZONE if (t->tm_zone) *************** *** 658,664 **** if (!s) { /* No local time zone name is available; use "+-NNNN" instead. */ ! long am = (offset < 0 ? -offset : offset) / 60; sprintf (buf, "%c%02d%02d", (offset < 0 ? '-' : '+'), am/60, am%60); s = buf; } --- 660,666 ---- if (!s) { /* No local time zone name is available; use "+-NNNN" instead. */ ! int am = (offset < 0 ? -offset : offset) / 60; sprintf (buf, "%c%02d%02d", (offset < 0 ? '-' : '+'), am/60, am%60); s = buf; } diff -rcP emacs-19.7/src/fileio.c emacs-19.8/src/fileio.c *** emacs-19.7/src/fileio.c Sat May 22 14:51:42 1993 --- emacs-19.8/src/fileio.c Mon May 24 18:58:29 1993 *************** *** 2112,2118 **** if (access (XSTRING (abspath)->data, 0) >= 0) return ((access (XSTRING (abspath)->data, 2) >= 0 ! && ! ro_fsys (XSTRING (abspath))) ? Qt : Qnil); dir = Ffile_name_directory (abspath); #ifdef VMS --- 2112,2118 ---- if (access (XSTRING (abspath)->data, 0) >= 0) return ((access (XSTRING (abspath)->data, 2) >= 0 ! && ! ro_fsys ((char *) XSTRING (abspath)->data)) ? Qt : Qnil); dir = Ffile_name_directory (abspath); #ifdef VMS *************** *** 2120,2126 **** dir = Fdirectory_file_name (dir); #endif /* VMS */ return ((access (!NILP (dir) ? (char *) XSTRING (dir)->data : "", 2) >= 0 ! && ! ro_fsys ((char *) XSTRING (dir))) ? Qt : Qnil); } --- 2120,2126 ---- dir = Fdirectory_file_name (dir); #endif /* VMS */ return ((access (!NILP (dir) ? (char *) XSTRING (dir)->data : "", 2) >= 0 ! && ! ro_fsys ((char *) XSTRING (dir)->data)) ? Qt : Qnil); } *************** *** 3231,3236 **** --- 3231,3238 ---- error ("No file name specified"); tem = Fstring_equal (val, insdef); if (!NILP (tem) && !NILP (defalt)) + return defalt; + if (XSTRING (val)->size == 0 && NILP (insdef)) return defalt; return Fsubstitute_in_file_name (val); } diff -rcP emacs-19.7/src/floatfns.c emacs-19.8/src/floatfns.c *** emacs-19.7/src/floatfns.c Sat May 22 14:53:38 1993 --- emacs-19.8/src/floatfns.c Mon May 24 13:44:54 1993 *************** *** 65,70 **** --- 65,74 ---- # endif #endif + #ifdef NO_MATHERR + #undef HAVE_MATHERR + #endif + #ifdef HAVE_MATHERR # ifdef FLOAT_CHECK_ERRNO # undef FLOAT_CHECK_ERRNO diff -rcP emacs-19.7/src/getloadavg.c emacs-19.8/src/getloadavg.c *** emacs-19.7/src/getloadavg.c Thu May 20 16:22:34 1993 --- emacs-19.8/src/getloadavg.c Mon May 24 17:41:18 1993 *************** *** 355,360 **** --- 355,368 ---- { int elem = 0; /* Return value. */ + #ifdef NO_GET_LOAD_AVG + #define LDAV_DONE + /* Set errno to zero to indicate that there was no particular error; + this function just can't work at all on this system. */ + errno = 0; + elem = -1; + #endif + #if !defined (LDAV_DONE) && defined (LINUX) #define LDAV_DONE #undef LOAD_AVE_TYPE *************** *** 540,552 **** #if !defined (LDAV_DONE) && defined (OSF_MIPS) #define LDAV_DONE - #define LDAV_PRIVILEGED struct tbl_loadavg load_ave; table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); ! loadavg[elem++] = (load_ave.tl_lscale == 0 ! ? load_ave.tl_avenrun.d[0] ! : (load_ave.tl_avenrun.l[0] / load_ave.tl_lscale)); #endif /* OSF_MIPS */ #if !defined (LDAV_DONE) && defined (VMS) --- 548,560 ---- #if !defined (LDAV_DONE) && defined (OSF_MIPS) #define LDAV_DONE struct tbl_loadavg load_ave; table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); ! loadavg[elem++] ! = (load_ave.tl_lscale == 0 ! ? load_ave.tl_avenrun.d[0] ! : (load_ave.tl_avenrun.l[0] / (double) load_ave.tl_lscale)); #endif /* OSF_MIPS */ #if !defined (LDAV_DONE) && defined (VMS) diff -rcP emacs-19.7/src/keyboard.c emacs-19.8/src/keyboard.c *** emacs-19.7/src/keyboard.c Sat May 22 13:59:26 1993 --- emacs-19.8/src/keyboard.c Tue May 25 05:26:38 1993 *************** *** 2026,2034 **** "insertchar", "deletechar", "backtab", ! "kp_backtab", /* 0x1000ff75 */ 0, /* 0xff76 */ ! 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff7f */ "kp-space", /* 0xff80 */ /* IsKeypadKey */ 0, 0, 0, 0, 0, 0, 0, 0, "kp-tab", /* 0xff89 */ --- 2026,2034 ---- "insertchar", "deletechar", "backtab", ! "kp-backtab", /* 0x1000ff75 */ 0, /* 0xff76 */ ! 0, 0, 0, 0, 0, 0, 0, 0, "kp-numlock", /* 0xff7f */ "kp-space", /* 0xff80 */ /* IsKeypadKey */ 0, 0, 0, 0, 0, 0, 0, 0, "kp-tab", /* 0xff89 */ *************** *** 2354,2359 **** --- 2354,2361 ---- { window = Qnil; posn = Qnil; + XFASTINT (x) = 0; + XFASTINT (y) = 0; } return Fcons (Qmouse_movement, *************** *** 2737,2743 **** if (NILP (*slot)) { /* No; let's create it. */ ! *slot = intern (name_table[symbol_num]); /* Fill in the cache entries for this symbol; this also builds the Qevent_symbol_elements property, which the user --- 2739,2752 ---- if (NILP (*slot)) { /* No; let's create it. */ ! if (name_table[symbol_num]) ! *slot = intern (name_table[symbol_num]); ! else ! { ! char buf[20]; ! sprintf (buf, "key-%d", symbol_num); ! *slot = intern (buf); ! } /* Fill in the cache entries for this symbol; this also builds the Qevent_symbol_elements property, which the user *************** *** 4569,4575 **** val[0] = interrupt_input ? Qt : Qnil; val[1] = flow_control ? Qt : Qnil; val[2] = meta_key == 2 ? make_number (0) : meta_key == 1 ? Qt : Qnil; ! XSETINT (val[3], quit_char); return Flist (val, sizeof (val) / sizeof (val[0])); } --- 4578,4584 ---- val[0] = interrupt_input ? Qt : Qnil; val[1] = flow_control ? Qt : Qnil; val[2] = meta_key == 2 ? make_number (0) : meta_key == 1 ? Qt : Qnil; ! XFASTINT (val[3]) = quit_char; return Flist (val, sizeof (val) / sizeof (val[0])); } diff -rcP emacs-19.7/src/lisp.h emacs-19.8/src/lisp.h *** emacs-19.7/src/lisp.h Sat May 22 14:59:27 1993 --- emacs-19.8/src/lisp.h Sun May 23 15:22:58 1993 *************** *** 606,612 **** #define GLYPH_CHAR(glyph) ((glyph) & 0xff) /* Return a glyph's face ID. */ ! #define GLYPH_FACE(glyph) (((glyph) >> 8) & 0xff) /* Data type checking */ --- 606,612 ---- #define GLYPH_CHAR(glyph) ((glyph) & 0xff) /* Return a glyph's face ID. */ ! #define GLYPH_FACE(glyph) (((glyph) >> 8) & ((1 << 24) - 1)) /* Data type checking */ diff -rcP emacs-19.7/src/lread.c emacs-19.8/src/lread.c *** emacs-19.7/src/lread.c Sat May 22 15:00:16 1993 --- emacs-19.8/src/lread.c Mon May 24 18:33:14 1993 *************** *** 24,30 **** #include #include #include - #undef NULL #include "config.h" #include "lisp.h" --- 24,29 ---- diff -rcP emacs-19.7/src/m/i860.h emacs-19.8/src/m/i860.h *** emacs-19.7/src/m/i860.h --- emacs-19.8/src/m/i860.h Mon May 24 17:53:28 1993 *************** *** 0 **** --- 1,109 ---- + /* machine description file for i860. + Copyright (C) 1985, 1986 Free Software Foundation, Inc. + + 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; either version 1, or (at your option) + any later version. + + 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 GNU Emacs; see the file COPYING. If not, write to + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + + /* The following line tells the configuration script what sort of + operating system this machine is likely to run. + USUAL-OPSYS="" */ + + /* The following three symbols give information on + the size of various data types. */ + + #define SHORTBITS 16 /* Number of bits in a short */ + + #define INTBITS 32 /* Number of bits in an int */ + + #define LONGBITS 32 /* Number of bits in a long */ + + /* Define BIG_ENDIAN iff lowest-numbered byte in a word + is the most significant byte. */ + + /* i860 is not big-endian: lowest numbered byte is least significant. */ + + #undef BIG_ENDIAN + + /* Define NO_ARG_ARRAY if you cannot take the address of the first of a + * group of arguments and treat it as an array of the arguments. */ + + #define NO_ARG_ARRAY + + /* Define WORD_MACHINE if addresses and such have + * to be corrected before they can be used as byte counts. */ + + /* #define WORD_MACHINE */ + + /* Now define a symbol for the cpu type, if your compiler + does not define it automatically: + Ones defined so far include vax, m68000, ns16000, pyramid, + orion, tahoe, APOLLO and many others */ + + #define INTEL860 + + /* Use type int rather than a union, to represent Lisp_Object */ + /* This is desirable for most machines. */ + + #define NO_UNION_TYPE + + /* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend + the 24-bit bit field into an int. In other words, if bit fields + are always unsigned. + + If you use NO_UNION_TYPE, this flag does not matter. */ + + #define EXPLICIT_SIGN_EXTEND + + /* Data type of load average, as read out of kmem. */ + + #define LOAD_AVE_TYPE long + + /* Convert that into an integer that is 100 for a load average of 1.0 */ + + #define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / FSCALE) + + /* Define CANNOT_DUMP on machines where unexec does not work. + Then the function dump-emacs will not be defined + and temacs will do (load "loadup") automatically unless told otherwise. */ + + /* #define CANNOT_DUMP */ + + /* Define VIRT_ADDR_VARIES if the virtual addresses of + pure and impure space as loaded can vary, and even their + relative order cannot be relied on. + + Otherwise Emacs assumes that text space precedes data space, + numerically. */ + + /* #define VIRT_ADDR_VARIES */ + + /* Define C_ALLOCA if this machine does not support a true alloca + and the one written in C should be used instead. + Define HAVE_ALLOCA to say that the system provides a properly + working alloca function and it should be used. + Define neither one if an assembler-language alloca + in the file alloca.s should be used. */ + + #define C_ALLOCA + /* #define HAVE_ALLOCA */ + + /* Define NO_REMAP if memory segmentation makes it not work well + to change the boundary between the text section and data section + when Emacs is dumped. If you define this, the preloaded Lisp + code will not be sharable; but that's better than failing completely. */ + + #define NO_REMAP diff -rcP emacs-19.7/src/m/ibmps2-aix.h emacs-19.8/src/m/ibmps2-aix.h *** emacs-19.7/src/m/ibmps2-aix.h Mon May 3 20:19:48 1993 --- emacs-19.8/src/m/ibmps2-aix.h Sun May 23 18:00:27 1993 *************** *** 222,228 **** #ifdef USG5_3 #define XICCC #define HAVE_GETWD - #define HAVE_RENAME #undef LD_SWITCH_MACHINE #define LD_SWITCH_MACHINE -T0x0 -K -e start --- 222,227 ---- diff -rcP emacs-19.7/src/m/iris4d.h emacs-19.8/src/m/iris4d.h *** emacs-19.7/src/m/iris4d.h Tue Jul 7 15:52:26 1992 --- emacs-19.8/src/m/iris4d.h Mon May 24 15:41:29 1993 *************** *** 1,4 **** ! /* machine description file for Iris-4D machines. Use with s-iris3-6.h Copyright (C) 1987 Free Software Foundation, Inc. This file is part of GNU Emacs. --- 1,4 ---- ! /* machine description file for Iris-4D machines. Use with s/iris[45]-*.h. Copyright (C) 1987 Free Software Foundation, Inc. This file is part of GNU Emacs. *************** *** 18,27 **** the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - /* The following line tells the configuration script what sort of - operating system this machine is likely to run. - USUAL-OPSYS="irix3-3" */ - /* The following three symbols give information on the size of various data types. */ --- 18,23 ---- *************** *** 72,77 **** --- 68,75 ---- #define EXPLICIT_SIGN_EXTEND + /* jg@genmagic.genmagic.com (John Giannandrea) says this is unnecessary. */ + #if 0 /* Data type of load average, as read out of kmem. */ #define LOAD_AVE_TYPE long /* This doesn't quite work on the 4D */ *************** *** 84,89 **** --- 82,88 ---- #undef KERNEL_FILE #define KERNEL_FILE "/unix" + #endif /* Define CANNOT_DUMP on machines where unexec does not work. Then the function dump-emacs will not be defined *************** *** 157,166 **** #define TERMINFO - /* sioctl.h should be included where appropriate. */ - - #define NEED_SIOCTL - /* Letter to use in finding device name of first pty, if system supports pty's. 'a' means it is /dev/ptya0 */ --- 156,161 ---- *************** *** 187,192 **** --- 182,189 ---- #define XSETMARKBIT(a,b) ((a) = ((a) & ~MARKBIT) | ((b) ? MARKBIT : 0)) #define XUNMARK(a) ((a) = (((unsigned)(a) << INTBITS-GCTYPEBITS-VALBITS) >> INTBITS-GCTYPEBITS-VALBITS)) + #ifndef __GNUC__ /* Turn off some "helpful" error checks for type mismatches that we can't fix without breaking other machines. */ #define C_SWITCH_MACHINE -cckr + #endif diff -rcP emacs-19.7/src/m/iris5d.h emacs-19.8/src/m/iris5d.h *** emacs-19.7/src/m/iris5d.h Wed May 19 00:49:30 1993 --- emacs-19.8/src/m/iris5d.h Sun May 23 18:31:04 1993 *************** *** 190,195 **** --- 190,197 ---- #define XSETMARKBIT(a,b) ((a) = ((a) & ~MARKBIT) | ((b) ? MARKBIT : 0)) #define XUNMARK(a) ((a) = (((unsigned)(a) << INTBITS-GCTYPEBITS-VALBITS) >> INTBITS-GCTYPEBITS-VALBITS)) + #ifndef __GNUC__ /* Turn off some "helpful" error checks for type mismatches that we can't fix without breaking other machines. */ #define C_SWITCH_MACHINE -cckr + #endif diff -rcP emacs-19.7/src/m/next.h emacs-19.8/src/m/next.h *** emacs-19.7/src/m/next.h Thu Nov 26 13:20:36 1992 --- emacs-19.8/src/m/next.h Mon May 24 18:33:47 1993 *************** *** 99,107 **** --- 99,109 ---- #define LIB_GCC + #if 0 /* ohl@chico.harvard.edu says to do this. */ /* Compile "strict bsd" to avoid warnings from include files */ #define C_SWITCH_MACHINE -bsd + #endif /* Link this program just by running cc. */ #define ORDINARY_LINK diff -rcP emacs-19.7/src/m/pfa50.h emacs-19.8/src/m/pfa50.h *** emacs-19.7/src/m/pfa50.h Tue Jul 7 15:52:16 1992 --- emacs-19.8/src/m/pfa50.h Sun May 23 18:00:36 1993 *************** *** 93,99 **** #define HAVE_SELECT #define HAVE_PTYS #define HAVE_SOCKETS - #define HAVE_RENAME /* SX/A use SystemV style getdents/readdir. */ #define HAVE_CLOSEDIR --- 93,98 ---- diff -rcP emacs-19.7/src/m/template.h emacs-19.8/src/m/template.h *** emacs-19.7/src/m/template.h Thu Mar 11 01:40:56 1993 --- emacs-19.8/src/m/template.h Mon May 24 22:41:08 1993 *************** *** 118,124 **** #define NO_SOCK_SIGIO ! /* After adding support for a new system, modify the large case statement in the `configure' script to recognize reasonable configuration names, and add a description of the system to --- 118,124 ---- #define NO_SOCK_SIGIO ! /* After adding support for a new system, modify the large case statement in the `configure' script to recognize reasonable configuration names, and add a description of the system to diff -rcP emacs-19.7/src/mem-limits.h emacs-19.8/src/mem-limits.h *** emacs-19.7/src/mem-limits.h Sat May 22 15:04:33 1993 --- emacs-19.8/src/mem-limits.h Mon May 24 23:02:03 1993 *************** *** 17,22 **** --- 17,27 ---- along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + #if defined(__osf__) && (defined(__mips) || defined(mips)) + #include + #include + #endif + #ifndef BSD4_2 #ifndef USG #include *************** *** 95,101 **** } #else /* not USG */ ! #ifndef BSD4_2 static void get_lim_data () --- 100,106 ---- } #else /* not USG */ ! #if !defined(BSD4_2) && !defined(__osf__) static void get_lim_data () diff -rcP emacs-19.7/src/paths.h.in emacs-19.8/src/paths.h.in *** emacs-19.7/src/paths.h.in Mon Sep 21 09:00:06 1992 --- emacs-19.8/src/paths.h.in Tue May 25 02:34:58 1993 *************** *** 27,29 **** --- 27,35 ---- should be writable by everyone. THE STRING MUST END WITH A SLASH!!! */ #define PATH_LOCK "/usr/local/lib/emacs/lock/" + + /* Where the configuration process believes the info tree lives. The + lisp variable configure-info-directory gets its value from this + macro, and is then used to set the Info-default-directory-list. */ + #define PATH_INFO "/usr/local/info" + diff -rcP emacs-19.7/src/process.c emacs-19.8/src/process.c *** emacs-19.7/src/process.c Sat May 22 15:10:01 1993 --- emacs-19.8/src/process.c Mon May 24 02:16:45 1993 *************** *** 179,185 **** --- 179,187 ---- #ifndef VMS #ifndef BSD4_1 + #ifndef LINUX extern char *sys_siglist[]; + #endif #else char *sys_siglist[] = { *************** *** 1253,1260 **** setsid (); #ifdef TIOCSCTTY /* Make the pty's terminal the controlling terminal. */ ! if (pty_flag && (ioctl (xforkin, TIOCSCTTY, 0) < 0)) ! abort (); #endif #else /* not HAVE_SETSID */ #ifdef USG --- 1255,1264 ---- setsid (); #ifdef TIOCSCTTY /* Make the pty's terminal the controlling terminal. */ ! if (pty_flag) ! /* We ignore the return value ! because faith@cs.unc.edu says that is necessary on Linux. */ ! ioctl (xforkin, TIOCSCTTY, 0); #endif #else /* not HAVE_SETSID */ #ifdef USG diff -rcP emacs-19.7/src/s/dgux.h emacs-19.8/src/s/dgux.h *** emacs-19.7/src/s/dgux.h Mon Mar 22 14:49:52 1993 --- emacs-19.8/src/s/dgux.h Mon May 24 21:04:21 1993 *************** *** 289,294 **** --- 289,301 ---- /* force gcc to be used */ CC=gcc #endif /* not MAKING_MAKEFILE */ + + #ifdef _M88KBCS_TARGET + /* Karl Berry says: the environment + recommended by gcc (88/open, a.k.a. m88kbcs) doesn't support some system + functions, and gcc doesn't make it easy to switch environments. */ + #define NO_GET_LOAD_AVG + #endif /* definitions for xmakefile production */ #ifdef COFF diff -rcP emacs-19.7/src/s/hpux.h emacs-19.8/src/s/hpux.h *** emacs-19.7/src/s/hpux.h Mon May 3 20:19:16 1993 --- emacs-19.8/src/s/hpux.h Sun May 23 23:30:41 1993 *************** *** 228,234 **** #define HAVE_VFORK #define HAVE_PERROR /* Delete this line for version 6. */ - #define HAVE_RENAME /* The following maps shared exec file to demand loaded exec. Don't do this as demand loaded exec is broken in hpux. */ --- 228,233 ---- diff -rcP emacs-19.7/src/s/hpux8.h emacs-19.8/src/s/hpux8.h *** emacs-19.7/src/s/hpux8.h Sat Mar 20 15:54:27 1993 --- emacs-19.8/src/s/hpux8.h Sun May 23 23:39:18 1993 *************** *** 25,27 **** --- 25,31 ---- /* Specify compiler options for compiling oldXMenu. */ #define OLDXMENU_OPTIONS CFLAGS=-I/usr/include/X11R4 + + /* Some hpux 8 machines seem to have TIOCGWINSZ, + and none have sioctl.h, so might as well define this. */ + #define NO_SIOCTL_H diff -rcP emacs-19.7/src/s/irix3-3.h emacs-19.8/src/s/irix3-3.h *** emacs-19.7/src/s/irix3-3.h Mon May 3 20:19:20 1993 --- emacs-19.8/src/s/irix3-3.h Sun May 23 18:06:59 1993 *************** *** 179,181 **** --- 179,185 ---- /* Use setsid to handle terminals for subprocesses. */ #define HAVE_SETSID + + /* sioctl.h should be included where appropriate. */ + + #define NEED_SIOCTL diff -rcP emacs-19.7/src/s/irix4-0.h emacs-19.8/src/s/irix4-0.h *** emacs-19.7/src/s/irix4-0.h Wed Mar 17 04:21:55 1993 --- emacs-19.8/src/s/irix4-0.h Mon May 24 13:42:23 1993 *************** *** 21,32 **** #define WNOHANG 0x1 /* No need to use sprintf to get the tty name--we get that from _getpty. */ #define PTY_TTY_NAME_SPRINTF /* No need to get the pty name at all. */ #define PTY_NAME_SPRINTF - #ifdef emacs - char *_getpty(); - #endif /* We need only try once to open a pty. */ #define PTY_ITERATION /* Here is how to do it. */ --- 21,30 ---- #define WNOHANG 0x1 /* No need to use sprintf to get the tty name--we get that from _getpty. */ + #undef PTY_TTY_NAME_SPRINTF #define PTY_TTY_NAME_SPRINTF /* No need to get the pty name at all. */ #define PTY_NAME_SPRINTF /* We need only try once to open a pty. */ #define PTY_ITERATION /* Here is how to do it. */ *************** *** 45,47 **** --- 43,49 ---- return -1; \ strcpy (pty_name, name); \ } + + /* jpff@maths.bath.ac.uk reports `struct exception' is not defined + on this system, so inhibit use of matherr. */ + #define NO_MATHERR diff -rcP emacs-19.7/src/s/isc2-2.h emacs-19.8/src/s/isc2-2.h *** emacs-19.7/src/s/isc2-2.h Tue Mar 2 17:17:37 1993 --- emacs-19.8/src/s/isc2-2.h Sun May 23 18:01:17 1993 *************** *** 23,29 **** #define NO_FCHMOD #define HAVE_PTYS - #define HAVE_RENAME #define HAVE_CLOSEDIR #define MAXNAMLEN 512 #define O_NDELAY O_NONBLOCK --- 23,28 ---- diff -rcP emacs-19.7/src/s/linux.h emacs-19.8/src/s/linux.h *** emacs-19.7/src/s/linux.h Fri May 21 18:51:37 1993 --- emacs-19.8/src/s/linux.h Mon May 24 10:59:41 1993 *************** *** 93,99 **** /* Uncomment this later when other problems are dealt with -mkj */ ! /* #define HAVE_SOCKETS */ /* Define this symbol if your system has the functions bcopy, etc. */ --- 93,99 ---- /* Uncomment this later when other problems are dealt with -mkj */ ! #define HAVE_SOCKETS /* Define this symbol if your system has the functions bcopy, etc. */ *************** *** 154,167 **** #undef SIGIO #endif /* This is needed for sysdep.c */ - #define HAVE_RENAME #define HAVE_UNISTD_H /* for getpagesize.h */ - #define HAVE_ALLOCA_H /* for getdate.y */ #define NO_SIOCTL_H /* don't have sioctl.h */ - #define HAVE_DUP2 /* is builtin */ #define HAVE_RANDOM /* is builtin */ #define HAVE_CLOSEDIR #define HAVE_GETPAGESIZE --- 154,166 ---- #undef SIGIO #endif + #define HAVE_SETSID + /* This is needed for sysdep.c */ #define HAVE_UNISTD_H /* for getpagesize.h */ #define NO_SIOCTL_H /* don't have sioctl.h */ #define HAVE_RANDOM /* is builtin */ #define HAVE_CLOSEDIR #define HAVE_GETPAGESIZE diff -rcP emacs-19.7/src/s/osf1.h emacs-19.8/src/s/osf1.h *** emacs-19.7/src/s/osf1.h Sun Sep 13 06:53:30 1992 --- emacs-19.8/src/s/osf1.h Mon May 24 23:04:50 1993 *************** *** 1,4 **** ! #include "s-bsd4-3.h" /* Identify OSF1 for the m- files. */ --- 1,4 ---- ! #include "bsd4-3.h" /* Identify OSF1 for the m- files. */ diff -rcP emacs-19.7/src/s/sco4.h emacs-19.8/src/s/sco4.h *** emacs-19.7/src/s/sco4.h Fri May 21 19:03:41 1993 --- emacs-19.8/src/s/sco4.h Sun May 23 18:01:53 1993 *************** *** 62,71 **** #undef BROKEN_TIOCGWINSZ #define NEED_PTEM_H - /* SCO has rename, but some people say it is broken. Try this for - now. */ - #define HAVE_RENAME - /* We need to link with crt1.o and crtn.o. */ #define START_FILES pre-crt0.o /lib/crt1.o #define LIB_STANDARD -lc /lib/crtn.o --- 62,67 ---- diff -rcP emacs-19.7/src/s/template.h emacs-19.8/src/s/template.h *** emacs-19.7/src/s/template.h Wed May 19 20:27:03 1993 --- emacs-19.8/src/s/template.h Mon May 24 22:40:52 1993 *************** *** 159,171 **** is not ':', #define this to be the appropriate character constant. */ /* #define SEPCHAR ':' */ ! /* Here, on a separate page, add any special hacks needed to make Emacs work on this system. For example, you might define certain system call names that don't exist on your system, or that do different things on your system and must be used only through an encapsulation (Which you should place, by convention, in sysdep.c). */ ! /* Some compilers tend to put everything declared static into the initialized data area, which becomes pure after dumping Emacs. On these systems, you must #define static as nothing to foil this. --- 159,173 ---- is not ':', #define this to be the appropriate character constant. */ /* #define SEPCHAR ':' */ ! /* ============================================================ */ ! ! /* Here, add any special hacks needed to make Emacs work on this system. For example, you might define certain system call names that don't exist on your system, or that do different things on your system and must be used only through an encapsulation (Which you should place, by convention, in sysdep.c). */ ! /* Some compilers tend to put everything declared static into the initialized data area, which becomes pure after dumping Emacs. On these systems, you must #define static as nothing to foil this. *************** *** 173,179 **** /* #define static */ ! /* After adding support for a new system, modify the large case statement in the `configure' script to recognize reasonable --- 175,181 ---- /* #define static */ ! /* ============================================================ */ /* After adding support for a new system, modify the large case statement in the `configure' script to recognize reasonable diff -rcP emacs-19.7/src/s/usg5-3.h emacs-19.8/src/s/usg5-3.h *** emacs-19.7/src/s/usg5-3.h Thu Mar 11 01:41:07 1993 --- emacs-19.8/src/s/usg5-3.h Mon May 24 22:39:39 1993 *************** *** 149,155 **** /* Define this if system V IPC is available. */ #define HAVE_SYSVIPC ! /* Special hacks needed to make Emacs run on this system. */ /* --- 149,155 ---- /* Define this if system V IPC is available. */ #define HAVE_SYSVIPC ! /* Special hacks needed to make Emacs run on this system. */ /* diff -rcP emacs-19.7/src/s/usg5-4.h emacs-19.8/src/s/usg5-4.h *** emacs-19.7/src/s/usg5-4.h Mon May 3 20:19:27 1993 --- emacs-19.8/src/s/usg5-4.h Sun May 23 18:02:09 1993 *************** *** 85,91 **** /* libc has this stuff, but not utimes. */ - #define HAVE_RENAME #define HAVE_SELECT #define HAVE_TIMEVAL #define HAVE_CLOSEDIR --- 85,90 ---- diff -rcP emacs-19.7/src/syssignal.h emacs-19.8/src/syssignal.h *** emacs-19.7/src/syssignal.h Sat May 22 15:15:52 1993 --- emacs-19.8/src/syssignal.h Mon May 24 01:10:43 1993 *************** *** 19,25 **** #ifdef POSIX_SIGNALS ! #include #define SIGMASKTYPE sigset_t --- 19,29 ---- #ifdef POSIX_SIGNALS ! /* Don't #include . That header shouldalways be #included ! before "config.h", because some configuration files (like s/hpux.h) ! indicate that SIGIO doesn't work by #undef-ing SIGIO. If this file ! #includes , then that will re-#define SIGIO and confuse ! things. */ #define SIGMASKTYPE sigset_t *************** *** 54,60 **** appears to be assumed in the source, for example data.c:arith_error() */ typedef RETSIGTYPE (*signal_handler_t) (int); ! signal_handler_t sys_signal (int signal_number, int (*action)()); int sys_sigpause (sigset_t new_mask); sigset_t sys_sigblock (sigset_t new_mask); sigset_t sys_sigunblock (sigset_t new_mask); --- 58,64 ---- appears to be assumed in the source, for example data.c:arith_error() */ typedef RETSIGTYPE (*signal_handler_t) (int); ! signal_handler_t sys_signal (int signal_number, signal_handler_t action); int sys_sigpause (sigset_t new_mask); sigset_t sys_sigblock (sigset_t new_mask); sigset_t sys_sigunblock (sigset_t new_mask); diff -rcP emacs-19.7/src/xfaces.c emacs-19.8/src/xfaces.c *** emacs-19.7/src/xfaces.c Sat May 22 16:50:54 1993 --- emacs-19.8/src/xfaces.c Tue May 25 08:42:35 1993 *************** *** 61,66 **** --- 61,68 ---- BACKGROUND-PIXMAP is the name of an x bitmap filename, which we don't use right now, and UNDERLINE-P is non-nil if the face should be underlined. + If any of these elements are nil, that allows the frame's parameters to + show through. (lisp/faces.el maintains these association lists.) The frames' private alists hold the frame-local definitions for the *************** *** 143,149 **** Lisp_Object Qface, Qwindow, Qpriority; static void build_face (); ! static Lisp_Object face_name_id_number (); struct face *intern_face (); static void ensure_face_ready (); --- 145,151 ---- Lisp_Object Qface, Qwindow, Qpriority; static void build_face (); ! int face_name_id_number (); struct face *intern_face (); static void ensure_face_ready (); *************** *** 314,340 **** XGCValues xgcv; unsigned long mask; if (face->foreground != FACE_DEFAULT) xgcv.foreground = face->foreground; else ! xgcv. foreground = f->display.x->foreground_pixel; if (face->background != FACE_DEFAULT) xgcv.background = face->background; else ! xgcv. background = f->display.x->background_pixel; if (face->font && (int) face->font != FACE_DEFAULT) xgcv.font = face->font->fid; else xgcv.font = f->display.x->font->fid; xgcv.graphics_exposures = 0; mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; gc = XCreateGC (x_current_display, FRAME_X_WINDOW (f), mask, &xgcv); #if 0 if (face->stipple && face->stipple != FACE_DEFAULT) XSetStipple (x_current_display, gc, face->stipple); #endif face->gc = gc; } /* Allocating, freeing, and duplicating fonts, colors, and pixmaps. */ --- 316,352 ---- XGCValues xgcv; unsigned long mask; + BLOCK_INPUT; + if (face->foreground != FACE_DEFAULT) xgcv.foreground = face->foreground; else ! xgcv.foreground = f->display.x->foreground_pixel; ! if (face->background != FACE_DEFAULT) xgcv.background = face->background; else ! xgcv.background = f->display.x->background_pixel; ! if (face->font && (int) face->font != FACE_DEFAULT) xgcv.font = face->font->fid; else xgcv.font = f->display.x->font->fid; + xgcv.graphics_exposures = 0; + mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; gc = XCreateGC (x_current_display, FRAME_X_WINDOW (f), mask, &xgcv); + #if 0 if (face->stipple && face->stipple != FACE_DEFAULT) XSetStipple (x_current_display, gc, face->stipple); #endif + face->gc = gc; + + UNBLOCK_INPUT; } /* Allocating, freeing, and duplicating fonts, colors, and pixmaps. */ *************** *** 367,373 **** --- 379,388 ---- { if (!font || font == ((XFontStruct *) FACE_DEFAULT)) return; + + BLOCK_INPUT; XFreeFont (x_current_display, font); + UNBLOCK_INPUT; } static unsigned long *************** *** 406,411 **** --- 421,433 ---- struct frame *f; Pixel pixel; { + /* Since faces get built by copying parameters from other faces, the + allocation counts for the colors get all screwed up. I don't see + any solution that will take less than 10 minutes, and it's better + to have a color leak than a crash, so I'm just dyking this out. + This isn't really a color leak, anyway - if we ask for it again, + we'll get the same pixel. */ + #if 0 Colormap cmap; Display *dpy = x_current_display; if (pixel == FACE_DEFAULT *************** *** 416,466 **** BLOCK_INPUT; XFreeColors (dpy, cmap, &pixel, 1, 0); UNBLOCK_INPUT; } /* Initializing face arrays for frames. */ - /* Set up faces 0 and 1 based on the normal text and modeline GC's. - This gets called whenever the parameters stored in the frame itself - (i.e. font, background color, etcetera) change. - - Note that the first two faces just contain references to the - frame's own resources. We shouldn't free them. */ void init_frame_faces (f) ! struct frame *f; { ensure_face_ready (f, 0); - { - XGCValues gcv; - struct face *face = FRAME_FACES (f) [0]; - - XGetGCValues (x_current_display, f->display.x->normal_gc, - GCForeground | GCBackground | GCFont, &gcv); - face->gc = f->display.x->normal_gc; - face->foreground = gcv.foreground; - face->background = gcv.background; - face->font = f->display.x->font; - face->stipple = 0; - face->underline = 0; - } - ensure_face_ready (f, 1); - { - XGCValues gcv; - struct face *face = FRAME_FACES (f) [1]; ! XGetGCValues (x_current_display, f->display.x->reverse_gc, ! GCForeground | GCBackground | GCFont, &gcv); ! face->gc = f->display.x->reverse_gc; ! face->foreground = gcv.foreground; ! face->background = gcv.background; ! face->font = f->display.x->font; ! face->stipple = 0; ! face->underline = 0; ! } } /* Called from Fdelete_frame. */ void free_frame_faces (f) --- 438,459 ---- BLOCK_INPUT; XFreeColors (dpy, cmap, &pixel, 1, 0); UNBLOCK_INPUT; + #endif } /* Initializing face arrays for frames. */ void init_frame_faces (f) ! FRAME_PTR f; { ensure_face_ready (f, 0); ensure_face_ready (f, 1); ! recompute_basic_faces (f); } + /* Called from Fdelete_frame. */ void free_frame_faces (f) *************** *** 469,495 **** Display *dpy = x_current_display; int i; ! /* The first two faces on the frame are just made of resources which ! we borrowed from the frame's GC's, so don't free them. Let ! them get freed by the x_destroy_window code. */ ! for (i = 2; i < FRAME_N_FACES (f); i++) { struct face *face = FRAME_FACES (f) [i]; ! if (! face) ! continue; ! if (face->gc) ! XFreeGC (dpy, face->gc); ! unload_font (f, face->font); ! unload_color (f, face->foreground); ! unload_color (f, face->background); #if 0 ! unload_pixmap (f, face->stipple); #endif ! xfree (face); } xfree (FRAME_FACES (f)); FRAME_FACES (f) = 0; FRAME_N_FACES (f) = 0; } /* Interning faces in a frame's face array. */ --- 462,493 ---- Display *dpy = x_current_display; int i; ! BLOCK_INPUT; ! ! for (i = 0; i < FRAME_N_FACES (f); i++) { struct face *face = FRAME_FACES (f) [i]; ! if (face) ! { ! if (face->gc) ! XFreeGC (dpy, face->gc); ! if (! face->copy) ! { ! unload_font (f, face->font); ! unload_color (f, face->foreground); ! unload_color (f, face->background); #if 0 ! unload_pixmap (f, face->stipple); #endif ! } ! xfree (face); ! } } xfree (FRAME_FACES (f)); FRAME_FACES (f) = 0; FRAME_N_FACES (f) = 0; + + UNBLOCK_INPUT; } /* Interning faces in a frame's face array. */ *************** *** 496,502 **** /* Find a match for NEW_FACE in a FRAME's face array, and add it if we don't find one. */ ! int intern_frame_face (frame, new_face) struct frame *frame; struct face *new_face; --- 494,500 ---- /* Find a match for NEW_FACE in a FRAME's face array, and add it if we don't find one. */ ! static int intern_frame_face (frame, new_face) struct frame *frame; struct face *new_face; *************** *** 518,523 **** --- 516,522 ---- ensure_face_ready (frame, i); bcopy (new_face, FRAME_FACES (frame)[i], sizeof (*new_face)); + FRAME_FACES (frame)[i]->copy = 1; return i; } *************** *** 554,560 **** /* Return non-zero if FONT1 and FONT2 have the same size bounding box. We assume that they're both character-cell fonts. */ ! static int same_size_fonts (font1, font2) XFontStruct *font1, *font2; { --- 553,559 ---- /* Return non-zero if FONT1 and FONT2 have the same size bounding box. We assume that they're both character-cell fonts. */ ! int same_size_fonts (font1, font2) XFontStruct *font1, *font2; { *************** *** 566,572 **** && bounds1->descent == bounds2->descent); } - /* Modify face TO by copying from FROM all properties which have nondefault settings. */ static void --- 565,570 ---- *************** *** 575,581 **** { /* Only merge the font if it's the same size as the base font. */ if (from->font != (XFontStruct *) FACE_DEFAULT - && ! from->font->per_char && same_size_fonts (from->font, to->font)) to->font = from->font; if (from->foreground != FACE_DEFAULT) --- 573,578 ---- *************** *** 588,593 **** --- 585,607 ---- to->underline = from->underline; } + /* Set up the basic set of facial parameters, based on the frame's + data; all faces are deltas applied to this. */ + static void + compute_base_face (f, face) + FRAME_PTR f; + struct face *face; + { + struct x_display *d = f->display.x; + + face->gc = 0; + face->foreground = d->foreground_pixel; + face->background = d->background_pixel; + face->font = d->font; + face->underline = 0; + } + + struct sortvec { Lisp_Object overlay; *************** *** 684,695 **** && !(pos >= region_beg && pos < region_end)) return 0; ! bcopy (FRAME_DEFAULT_FACE (f), &face, sizeof (struct face)); ! face.gc = 0; if (!NILP (prop)) { ! facecode = face_name_id_number (frame, prop); if (facecode >= 0 && facecode < FRAME_N_FACES (f) && FRAME_FACES (f) [facecode] != 0) merge_faces (FRAME_FACES (f) [facecode], &face); --- 698,708 ---- && !(pos >= region_beg && pos < region_end)) return 0; ! compute_base_face (f, &face); if (!NILP (prop)) { ! facecode = face_name_id_number (f, prop); if (facecode >= 0 && facecode < FRAME_N_FACES (f) && FRAME_FACES (f) [facecode] != 0) merge_faces (FRAME_FACES (f) [facecode], &face); *************** *** 746,752 **** Lisp_Object oend; int oendpos; ! facecode = face_name_id_number (frame, prop); if (facecode >= 0 && facecode < FRAME_N_FACES (f) && FRAME_FACES (f) [facecode] != 0) merge_faces (FRAME_FACES (f) [facecode], &face); --- 759,765 ---- Lisp_Object oend; int oendpos; ! facecode = face_name_id_number (f, prop); if (facecode >= 0 && facecode < FRAME_N_FACES (f) && FRAME_FACES (f) [facecode] != 0) merge_faces (FRAME_FACES (f) [facecode], &face); *************** *** 781,788 **** { struct face face; ! bcopy (FRAME_DEFAULT_FACE (f), &face, sizeof (face)); ! face.gc = 0; if (face_code >= 0 && face_code < FRAME_N_FACES (f) && FRAME_FACES (f) [face_code] != 0) --- 794,800 ---- { struct face face; ! compute_base_face (f, &face); if (face_code >= 0 && face_code < FRAME_N_FACES (f) && FRAME_FACES (f) [face_code] != 0) *************** *** 790,795 **** --- 802,835 ---- return intern_frame_face (f, &face); } + + + /* Recompute the GC's for the default and modeline faces. + We call this after changing frame parameters on which those GC's + depend. */ + void + recompute_basic_faces (f) + FRAME_PTR f; + { + /* If the frame's faces haven't been initialized yet, don't worry about + this stuff. */ + if (FRAME_N_FACES (f) < 2) + return; + + BLOCK_INPUT; + + if (FRAME_DEFAULT_FACE (f)->gc) + XFreeGC (x_current_display, FRAME_DEFAULT_FACE (f)->gc); + build_face (f, FRAME_DEFAULT_FACE (f)); + + if (FRAME_MODE_LINE_FACE (f)->gc) + XFreeGC (x_current_display, FRAME_MODE_LINE_FACE (f)->gc); + build_face (f, FRAME_MODE_LINE_FACE (f)); + + UNBLOCK_INPUT; + } + + /* Lisp interface. */ *************** *** 863,869 **** if (EQ (attr_name, intern ("font"))) { XFontStruct *font = load_font (f, attr_value); ! unload_font (f, face->font); face->font = font; } else if (EQ (attr_name, intern ("foreground"))) --- 903,910 ---- if (EQ (attr_name, intern ("font"))) { XFontStruct *font = load_font (f, attr_value); ! if (face->font != f->display.x->font) ! unload_font (f, face->font); face->font = font; } else if (EQ (attr_name, intern ("foreground"))) *************** *** 944,957 **** but it's as easy to use the "right" frame to look it up as to use any other one.) */ ! static Lisp_Object ! face_name_id_number (frame, name) ! Lisp_Object frame, name; { Lisp_Object tem; ! CHECK_FRAME (frame, 0); ! tem = Fcdr (Fassq (name, XFRAME (frame)->face_alist)); if (NILP (tem)) return 0; CHECK_VECTOR (tem, 0); --- 985,998 ---- but it's as easy to use the "right" frame to look it up as to use any other one.) */ ! int ! face_name_id_number (f, name) ! FRAME_PTR f; ! Lisp_Object name; { Lisp_Object tem; ! tem = Fcdr (Fassq (name, f->face_alist)); if (NILP (tem)) return 0; CHECK_VECTOR (tem, 0); diff -rcP emacs-19.7/src/xfns.c emacs-19.8/src/xfns.c *** emacs-19.7/src/xfns.c Fri May 21 23:16:57 1993 --- emacs-19.8/src/xfns.c Tue May 25 07:55:51 1993 *************** *** 192,200 **** /* Mouse map for clicks in windows. */ extern Lisp_Object Vglobal_mouse_map; - /* Points to table of defined typefaces. */ - struct face *x_face_table[MAX_FACES_AND_GLYPHS]; /* Return the Emacs frame-object corresponding to an X window. It could be the frame's main window or an icon window. */ --- 192,206 ---- /* Mouse map for clicks in windows. */ extern Lisp_Object Vglobal_mouse_map; + /* Error if we are not connected to X. */ + static void + check_x () + { + if (x_current_display == 0) + error ("X windows are not in use or not initialized"); + } + /* Return the Emacs frame-object corresponding to an X window. It could be the frame's main window or an icon window. */ *************** *** 347,360 **** left = val; else { ! register Lisp_Object tem; ! tem = Fget (prop, Qx_frame_parameter); ! if (XTYPE (tem) == Lisp_Int ! && XINT (tem) >= 0 ! && XINT (tem) < sizeof (x_frame_parms)/sizeof (x_frame_parms[0])) ! (*x_frame_parms[XINT (tem)].setter)(f, val, ! get_frame_param (f, prop)); store_frame_param (f, prop, val); } } --- 353,367 ---- left = val; else { ! register Lisp_Object param_index = Fget (prop, Qx_frame_parameter); ! register Lisp_Object old_value = get_frame_param (f, prop); ! store_frame_param (f, prop, val); + if (XTYPE (param_index) == Lisp_Int + && XINT (param_index) >= 0 + && (XINT (param_index) + < sizeof (x_frame_parms)/sizeof (x_frame_parms[0]))) + (*x_frame_parms[XINT (param_index)].setter)(f, val, old_value); } } *************** *** 485,490 **** --- 492,498 ---- f->display.x->foreground_pixel); UNBLOCK_INPUT; #endif /* HAVE_X11 */ + recompute_basic_faces (f); if (FRAME_VISIBLE_P (f)) redraw_frame (f); } *************** *** 519,524 **** --- 527,534 ---- #endif /* not HAVE_X11 */ UNBLOCK_INPUT; + recompute_basic_faces (f); + if (FRAME_VISIBLE_P (f)) redraw_frame (f); } *************** *** 791,813 **** UNBLOCK_INPUT; } void x_set_font (f, arg, oldval) struct frame *f; Lisp_Object arg, oldval; { ! unsigned char *name; ! int result; CHECK_STRING (arg, 1); - name = XSTRING (arg)->data; BLOCK_INPUT; ! result = x_new_font (f, name); UNBLOCK_INPUT; ! if (result) ! error ("Font \"%s\" is not defined", name); } void --- 801,832 ---- UNBLOCK_INPUT; } + extern Lisp_Object x_new_font (); + void x_set_font (f, arg, oldval) struct frame *f; Lisp_Object arg, oldval; { ! Lisp_Object result; CHECK_STRING (arg, 1); BLOCK_INPUT; ! result = x_new_font (f, XSTRING (arg)->data); UNBLOCK_INPUT; ! if (EQ (result, Qnil)) ! error ("Font \"%s\" is not defined", XSTRING (arg)->data); ! else if (EQ (result, Qt)) ! error ("the characters of the given font have varying widths"); ! else if (STRINGP (result)) ! { ! recompute_basic_faces (f); ! store_frame_param (f, Qfont, result); ! } ! else ! abort (); } void *************** *** 880,892 **** { struct window *w = XWINDOW (window); ! w->top += n; if (!NILP (w->vchild)) ! x_set_menu_bar_lines_1 (w->vchild); if (!NILP (w->hchild)) ! x_set_menu_bar_lines_1 (w->hchild); } } --- 899,911 ---- { struct window *w = XWINDOW (window); ! XFASTINT (w->top) += n; if (!NILP (w->vchild)) ! x_set_menu_bar_lines_1 (w->vchild, n); if (!NILP (w->hchild)) ! x_set_menu_bar_lines_1 (w->hchild, n); } } *************** *** 1040,1279 **** } } - #ifdef HAVE_X11 - int n_faces; - - #if 0 - /* I believe this function is obsolete with respect to the new face display - changes. */ - x_set_face (scr, font, background, foreground, stipple) - struct frame *scr; - XFontStruct *font; - unsigned long background, foreground; - Pixmap stipple; - { - XGCValues gc_values; - GC temp_gc; - unsigned long gc_mask; - struct face *new_face; - unsigned int width = 16; - unsigned int height = 16; - - if (n_faces == MAX_FACES_AND_GLYPHS) - return 1; - - /* Create the Graphics Context. */ - gc_values.font = font->fid; - gc_values.foreground = foreground; - gc_values.background = background; - gc_values.line_width = 0; - gc_mask = GCLineWidth | GCFont | GCForeground | GCBackground; - if (stipple) - { - gc_values.stipple - = XCreateBitmapFromData (x_current_display, ROOT_WINDOW, - (char *) stipple, width, height); - gc_mask |= GCStipple; - } - - temp_gc = XCreateGC (x_current_display, FRAME_X_WINDOW (scr), - gc_mask, &gc_values); - if (!temp_gc) - return 1; - new_face = (struct face *) xmalloc (sizeof (struct face)); - if (!new_face) - { - XFreeGC (x_current_display, temp_gc); - return 1; - } - - new_face->font = font; - new_face->foreground = foreground; - new_face->background = background; - new_face->face_gc = temp_gc; - if (stipple) - new_face->stipple = gc_values.stipple; - - x_face_table[++n_faces] = new_face; - return 1; - } - #endif - - x_set_glyph (scr, glyph) - { - } - - #if 0 - DEFUN ("x-set-face-font", Fx_set_face_font, Sx_set_face_font, 4, 2, 0, - "Specify face table entry FACE-CODE to be the font named by FONT,\n\ - in colors FOREGROUND and BACKGROUND.") - (face_code, font_name, foreground, background) - Lisp_Object face_code; - Lisp_Object font_name; - Lisp_Object foreground; - Lisp_Object background; - { - register struct face *fp; /* Current face info. */ - register int fn; /* Face number. */ - register FONT_TYPE *f; /* Font data structure. */ - unsigned char *newname; - int fg, bg; - GC temp_gc; - XGCValues gc_values; - - /* Need to do something about this. */ - Drawable drawable = FRAME_X_WINDOW (selected_frame); - - CHECK_NUMBER (face_code, 1); - CHECK_STRING (font_name, 2); - - if (EQ (foreground, Qnil) || EQ (background, Qnil)) - { - fg = selected_frame->display.x->foreground_pixel; - bg = selected_frame->display.x->background_pixel; - } - else - { - CHECK_NUMBER (foreground, 0); - CHECK_NUMBER (background, 1); - - fg = x_decode_color (XINT (foreground), BLACK_PIX_DEFAULT); - bg = x_decode_color (XINT (background), WHITE_PIX_DEFAULT); - } - - fn = XINT (face_code); - if ((fn < 1) || (fn > 255)) - error ("Invalid face code, %d", fn); - - newname = XSTRING (font_name)->data; - BLOCK_INPUT; - f = (*newname == 0 ? 0 : XGetFont (newname)); - UNBLOCK_INPUT; - if (f == 0) - error ("Font \"%s\" is not defined", newname); - - fp = x_face_table[fn]; - if (fp == 0) - { - x_face_table[fn] = fp = (struct face *) xmalloc (sizeof (struct face)); - bzero (fp, sizeof (struct face)); - fp->face_type = x_pixmap; - } - else if (FACE_IS_FONT (fn)) - { - BLOCK_INPUT; - XFreeGC (FACE_FONT (fn)); - UNBLOCK_INPUT; - } - else if (FACE_IS_IMAGE (fn)) /* This should not happen... */ - { - BLOCK_INPUT; - XFreePixmap (x_current_display, FACE_IMAGE (fn)); - fp->face_type = x_font; - UNBLOCK_INPUT; - } - else - abort (); - - fp->face_GLYPH.font_desc.font = f; - gc_values.font = f->fid; - gc_values.foreground = fg; - gc_values.background = bg; - fp->face_GLYPH.font_desc.face_gc = XCreateGC (x_current_display, - drawable, GCFont | GCForeground - | GCBackground, &gc_values); - fp->face_GLYPH.font_desc.font_width = FONT_WIDTH (f); - fp->face_GLYPH.font_desc.font_height = FONT_HEIGHT (f); - - return face_code; - } - #endif - #else /* X10 */ - DEFUN ("x-set-face", Fx_set_face, Sx_set_face, 4, 4, 0, - "Specify face table entry FACE-CODE to be the font named by FONT,\n\ - in colors FOREGROUND and BACKGROUND.") - (face_code, font_name, foreground, background) - Lisp_Object face_code; - Lisp_Object font_name; - Lisp_Object foreground; - Lisp_Object background; - { - register struct face *fp; /* Current face info. */ - register int fn; /* Face number. */ - register FONT_TYPE *f; /* Font data structure. */ - unsigned char *newname; - - CHECK_NUMBER (face_code, 1); - CHECK_STRING (font_name, 2); - - fn = XINT (face_code); - if ((fn < 1) || (fn > 255)) - error ("Invalid face code, %d", fn); - - /* Ask the server to find the specified font. */ - newname = XSTRING (font_name)->data; - BLOCK_INPUT; - f = (*newname == 0 ? 0 : XGetFont (newname)); - UNBLOCK_INPUT; - if (f == 0) - error ("Font \"%s\" is not defined", newname); - - /* Get the face structure for face_code in the face table. - Make sure it exists. */ - fp = x_face_table[fn]; - if (fp == 0) - { - x_face_table[fn] = fp = (struct face *) xmalloc (sizeof (struct face)); - bzero (fp, sizeof (struct face)); - } - - /* If this face code already exists, get rid of the old font. */ - if (fp->font != 0 && fp->font != f) - { - BLOCK_INPUT; - XLoseFont (fp->font); - UNBLOCK_INPUT; - } - - /* Store the specified information in FP. */ - fp->fg = x_decode_color (foreground, BLACK_PIX_DEFAULT); - fp->bg = x_decode_color (background, WHITE_PIX_DEFAULT); - fp->font = f; - - return face_code; - } - #endif /* X10 */ - - #if 0 - /* This is excluded because there is no painless way - to get or to remember the name of the font. */ - - DEFUN ("x-get-face", Fx_get_face, Sx_get_face, 1, 1, 0, - "Get data defining face code FACE. FACE is an integer.\n\ - The value is a list (FONT FG-COLOR BG-COLOR).") - (face) - Lisp_Object face; - { - register struct face *fp; /* Current face info. */ - register int fn; /* Face number. */ - - CHECK_NUMBER (face, 1); - fn = XINT (face); - if ((fn < 1) || (fn > 255)) - error ("Invalid face code, %d", fn); - - /* Make sure the face table exists and this face code is defined. */ - if (x_face_table == 0 || x_face_table[fn] == 0) - return Qnil; - - fp = x_face_table[fn]; - - return Fcons (build_string (fp->name), - Fcons (make_number (fp->fg), - Fcons (make_number (fp->bg), Qnil))); - } - #endif /* 0 */ - /* Subroutines of creating an X frame. */ #ifdef HAVE_X11 --- 1059,1064 ---- *************** *** 1296,1301 **** --- 1081,1088 ---- char *name_key; char *class_key; + check_x (); + CHECK_STRING (attribute, 0); CHECK_STRING (class, 0); *************** *** 1807,1814 **** f->display.x->background_pixel, DefaultDepth (x_current_display, XDefaultScreen (x_current_display)))); - init_frame_faces (f); - UNBLOCK_INPUT; } #endif /* HAVE_X11 */ --- 1594,1599 ---- *************** *** 1833,1840 **** long window_prompting = 0; int width, height; ! if (x_current_display == 0) ! error ("X windows are not in use or not initialized"); name = x_get_arg (parms, Qname, "title", "Title", string); if (XTYPE (name) != Lisp_String --- 1618,1624 ---- long window_prompting = 0; int width, height; ! check_x (); name = x_get_arg (parms, Qname, "title", "Title", string); if (XTYPE (name) != Lisp_String *************** *** 1914,1919 **** --- 1698,1704 ---- x_window (f); x_icon (f, parms); x_make_gc (f); + init_frame_faces (f); /* We need to do this after creating the X window, so that the icon-creation functions can say whose icon they're describing. */ *************** *** 2314,2319 **** --- 2099,2178 ---- } #endif /* not HAVE_X11 */ + DEFUN ("x-list-fonts", Fx_list_fonts, Sx_list_fonts, 1, 3, 0, + "Return a list of the names of available fonts matching PATTERN.\n\ + If optional arguments FACE and FRAME are specified, return only fonts\n\ + the same size as FACE on FRAME.\n\ + \n\ + PATTERN is a string, perhaps with wildcard characters;\n\ + the * character matches any substring, and\n\ + the ? character matches any single character.\n\ + PATTERN is case-insensitive.\n\ + FACE is a face name - a symbol.\n\ + \n\ + The return value is a list of strings, suitable as arguments to\n\ + set-face-font.\n\ + \n\ + The list does not include fonts Emacs can't use (i.e. proportional\n\ + fonts), even if they match PATTERN and FACE.") + (pattern, face, frame) + Lisp_Object pattern, face, frame; + { + int num_fonts; + char **names; + XFontStruct *info; + XFontStruct *size_ref; + Lisp_Object list; + + CHECK_STRING (pattern, 0); + if (!NILP (face)) + CHECK_SYMBOL (face, 1); + if (!NILP (frame)) + CHECK_SYMBOL (frame, 2); + + if (NILP (face)) + size_ref = 0; + else + { + FRAME_PTR f = NILP (frame) ? selected_frame : XFRAME (frame); + int face_id = face_name_id_number (f, face); + + if (face_id < 0 || face_id > FRAME_N_FACES (f)) + face_id = 0; + size_ref = FRAME_FACES (f) [face_id]->font; + if (size_ref == (XFontStruct *) (~0)) + size_ref = f->display.x->font; + } + + BLOCK_INPUT; + names = XListFontsWithInfo (x_current_display, + XSTRING (pattern)->data, + 2000, /* maxnames */ + &num_fonts, /* count_return */ + &info); /* info_return */ + UNBLOCK_INPUT; + + { + Lisp_Object *tail; + int i; + + list = Qnil; + tail = &list; + for (i = 0; i < num_fonts; i++) + if (! size_ref + || same_size_fonts (&info[i], size_ref)) + { + *tail = Fcons (build_string (names[i]), Qnil); + tail = &XCONS (*tail)->cdr; + } + + XFreeFontInfo (names, info, num_fonts); + } + + return list; + } + + DEFUN ("x-color-defined-p", Fx_color_defined_p, Sx_color_defined_p, 1, 1, 0, "Return t if the current X display supports the color named COLOR.") (color) *************** *** 2321,2326 **** --- 2180,2186 ---- { Color foo; + check_x (); CHECK_STRING (color, 0); if (defined_color (XSTRING (color)->data, &foo)) *************** *** 2333,2338 **** --- 2193,2200 ---- "Return t if the X screen currently in use supports color.") () { + check_x (); + if (x_screen_planes <= 2) return Qnil; *************** *** 2356,2361 **** --- 2218,2224 ---- Lisp_Object frame; { Display *dpy = x_current_display; + check_x (); return make_number (DisplayWidth (dpy, DefaultScreen (dpy))); } *************** *** 2366,2371 **** --- 2229,2235 ---- Lisp_Object frame; { Display *dpy = x_current_display; + check_x (); return make_number (DisplayHeight (dpy, DefaultScreen (dpy))); } *************** *** 2376,2381 **** --- 2240,2246 ---- Lisp_Object frame; { Display *dpy = x_current_display; + check_x (); return make_number (DisplayPlanes (dpy, DefaultScreen (dpy))); } *************** *** 2386,2391 **** --- 2251,2257 ---- Lisp_Object frame; { Display *dpy = x_current_display; + check_x (); return make_number (DisplayCells (dpy, DefaultScreen (dpy))); } *************** *** 2396,2401 **** --- 2262,2268 ---- { Display *dpy = x_current_display; char *vendor; + check_x (); vendor = ServerVendor (dpy); if (! vendor) vendor = ""; return build_string (vendor); *************** *** 2410,2415 **** --- 2277,2284 ---- Lisp_Object frame; { Display *dpy = x_current_display; + + check_x (); return Fcons (make_number (ProtocolVersion (dpy)), Fcons (make_number (ProtocolRevision (dpy)), Fcons (make_number (VendorRelease (dpy)), Qnil))); *************** *** 2420,2425 **** --- 2289,2295 ---- (frame) Lisp_Object frame; { + check_x (); return make_number (ScreenCount (x_current_display)); } *************** *** 2428,2433 **** --- 2298,2304 ---- (frame) Lisp_Object frame; { + check_x (); return make_number (HeightMMOfScreen (x_screen)); } *************** *** 2436,2441 **** --- 2307,2313 ---- (frame) Lisp_Object frame; { + check_x (); return make_number (WidthMMOfScreen (x_screen)); } *************** *** 2446,2451 **** --- 2318,2325 ---- (frame) Lisp_Object frame; { + check_x (); + switch (DoesBackingStore (x_screen)) { case Always: *************** *** 2470,2475 **** --- 2344,2351 ---- (screen) Lisp_Object screen; { + check_x (); + switch (screen_visual->class) { case StaticGray: return (intern ("static-gray")); *************** *** 2489,2494 **** --- 2365,2372 ---- (frame) Lisp_Object frame; { + check_x (); + if (DoesSaveUnders (x_screen) == True) return Qt; else *************** *** 3374,3379 **** --- 3252,3258 ---- register KeySym keysym; KeySym modifier_list[16]; + check_x (); CHECK_STRING (x_keysym, 1); CHECK_STRING (newstring, 3); *************** *** 3425,3430 **** --- 3304,3310 ---- int strsize; register unsigned i; + check_x (); CHECK_NUMBER (keycode, 1); CHECK_CONS (strings, 2); rawkey = (KeySym) ((unsigned) (XINT (keycode))) & 255; *************** *** 3545,3551 **** vinfo_template.visualid = v->visualid; #endif ! vinfo = XGetVisualInfo (x_current_display, VisualIDMask, &vinfo_template, &n_visuals); if (n_visuals != 1) fatal ("Can't get proper X visual info"); --- 3425,3434 ---- vinfo_template.visualid = v->visualid; #endif ! vinfo_template.screen = XScreenNumberOfScreen (screen); ! ! vinfo = XGetVisualInfo (x_current_display, ! VisualIDMask | VisualScreenMask, &vinfo_template, &n_visuals); if (n_visuals != 1) fatal ("Can't get proper X visual info"); *************** *** 3665,3670 **** --- 3548,3555 ---- (on) Lisp_Object on; { + check_x (); + XSynchronize (x_current_display, !EQ (on, Qnil)); return Qnil; *************** *** 3786,3791 **** --- 3671,3677 ---- defsubr (&Sx_uncontour_region); #endif defsubr (&Sx_display_color_p); + defsubr (&Sx_list_fonts); defsubr (&Sx_color_defined_p); defsubr (&Sx_server_vendor); defsubr (&Sx_server_version); *************** *** 3808,3814 **** defsubr (&Sx_get_default); defsubr (&Sx_store_cut_buffer); defsubr (&Sx_get_cut_buffer); - defsubr (&Sx_set_face); #endif defsubr (&Sx_parse_geometry); defsubr (&Sx_create_frame); --- 3694,3699 ---- diff -rcP emacs-19.7/src/xterm.c emacs-19.8/src/xterm.c *** emacs-19.7/src/xterm.c Sat May 22 16:53:39 1993 --- emacs-19.8/src/xterm.c Tue May 25 06:49:27 1993 *************** *** 27,32 **** --- 27,38 ---- #define NEW_SELECTIONS + /* On 4.3 these lose if they come after xterm.h. */ + /* On HP-UX 8.0 signal.h loses if it comes after config.h. */ + /* Putting these at the beginning seems to be standard for other .c files. */ + #include + #include + #include "config.h" #ifdef HAVE_X_WINDOWS *************** *** 34,43 **** #include "lisp.h" #include "blockinput.h" - /* On 4.3 these lose if they come after xterm.h. */ - #include - #include - /* This may include sys/types.h, and that somehow loses if this is not done before the other system files. */ #include "xterm.h" --- 40,45 ---- *************** *** 421,428 **** register Lisp_Object *tbase = GLYPH_TABLE_BASE; Window window = FRAME_X_WINDOW (f); - extern struct face *intern_face (/* FRAME_PTR, struct face * */); - while (n > 0) { /* Get the face-code of the next GLYPH. */ --- 423,428 ---- *************** *** 490,520 **** #define FACE_DEFAULT (~0) /* Now override that if the cursor's on this character. */ ! if (hl == 2 && (defaulted ! || !(face->font && (int) face->font != FACE_DEFAULT))) ! { ! gc = f->display.x->cursor_gc; ! } ! /* Cursor on non-default face: must merge. */ ! else if (hl == 2) { ! XGCValues xgcv; ! unsigned long mask; ! xgcv.background = f->display.x->cursor_pixel; ! xgcv.foreground = f->display.x->cursor_foreground_pixel; ! xgcv.font = face->font->fid; ! xgcv.graphics_exposures = 0; ! mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; ! gc = XCreateGC (x_current_display, FRAME_X_WINDOW (f), ! mask, &xgcv); #if 0 ! if (face->stipple && face->stipple != FACE_DEFAULT) ! XSetStipple (x_current_display, gc, face->stipple); #endif ! gc_temporary = 1; } XDrawImageString (x_current_display, window, gc, left, top + FONT_BASE (font), buf, len); --- 490,527 ---- #define FACE_DEFAULT (~0) /* Now override that if the cursor's on this character. */ ! if (hl == 2) { ! if (defaulted ! || !face->font ! || (int) face->font == FACE_DEFAULT) ! { ! gc = f->display.x->cursor_gc; ! } ! /* Cursor on non-default face: must merge. */ ! else ! { ! XGCValues xgcv; ! unsigned long mask; ! xgcv.background = f->display.x->cursor_pixel; ! xgcv.foreground = f->display.x->cursor_foreground_pixel; ! xgcv.font = face->font->fid; ! xgcv.graphics_exposures = 0; ! mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; ! gc = XCreateGC (x_current_display, FRAME_X_WINDOW (f), ! mask, &xgcv); #if 0 ! if (face->stipple && face->stipple != FACE_DEFAULT) ! XSetStipple (x_current_display, gc, face->stipple); #endif ! gc_temporary = 1; ! } } + if ((int) font == FACE_DEFAULT) + font = f->display.x->font; + XDrawImageString (x_current_display, window, gc, left, top + FONT_BASE (font), buf, len); *************** *** 2386,2454 **** { struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); int win_x, win_y; BLOCK_INPUT; /* Get the mouse's position relative to the scroll bar window, and report that. */ ! { ! Window dummy_window; ! int dummy_coord; ! unsigned int dummy_mask; ! ! if (! XQueryPointer (x_current_display, ! SCROLL_BAR_X_WINDOW (bar), ! ! /* Root, child, root x and root y. */ ! &dummy_window, &dummy_window, ! &dummy_coord, &dummy_coord, ! ! /* Position relative to scroll bar. */ ! &win_x, &win_y, ! ! /* Mouse buttons and modifier keys. */ ! &dummy_mask)) ! { ! *f = 0; ! goto done; ! } ! } ! ! { ! int inside_height = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (XINT (bar->height)); ! int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)); ! win_y -= VERTICAL_SCROLL_BAR_TOP_BORDER; ! ! if (! NILP (bar->dragging)) ! win_y -= XINT (bar->dragging); ! if (win_y < 0) ! win_y = 0; ! if (win_y > top_range) ! win_y = top_range; ! ! *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); ! *bar_window = bar->window; ! ! if (! NILP (bar->dragging)) ! *part = scroll_bar_handle; ! else if (win_y < XINT (bar->start)) ! *part = scroll_bar_above_handle; ! else if (win_y < XINT (bar->end) + VERTICAL_SCROLL_BAR_MIN_HANDLE) ! *part = scroll_bar_handle; ! else ! *part = scroll_bar_below_handle; ! XSET (*x, Lisp_Int, win_y); ! XSET (*y, Lisp_Int, top_range); ! *time = last_mouse_movement_time; ! } ! mouse_moved = 0; ! last_mouse_scroll_bar = Qnil; - done: UNBLOCK_INPUT; } --- 2393,2457 ---- { struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); int win_x, win_y; + Window dummy_window; + int dummy_coord; + unsigned int dummy_mask; BLOCK_INPUT; /* Get the mouse's position relative to the scroll bar window, and report that. */ ! if (! XQueryPointer (x_current_display, ! SCROLL_BAR_X_WINDOW (bar), ! /* Root, child, root x and root y. */ ! &dummy_window, &dummy_window, ! &dummy_coord, &dummy_coord, ! ! /* Position relative to scroll bar. */ ! &win_x, &win_y, ! ! /* Mouse buttons and modifier keys. */ ! &dummy_mask)) ! *f = 0; ! else ! { ! int inside_height ! = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (XINT (bar->height)); ! int top_range ! = VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)); ! ! win_y -= VERTICAL_SCROLL_BAR_TOP_BORDER; ! ! if (! NILP (bar->dragging)) ! win_y -= XINT (bar->dragging); ! ! if (win_y < 0) ! win_y = 0; ! if (win_y > top_range) ! win_y = top_range; ! ! *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); ! *bar_window = bar->window; ! ! if (! NILP (bar->dragging)) ! *part = scroll_bar_handle; ! else if (win_y < XINT (bar->start)) ! *part = scroll_bar_above_handle; ! else if (win_y < XINT (bar->end) + VERTICAL_SCROLL_BAR_MIN_HANDLE) ! *part = scroll_bar_handle; ! else ! *part = scroll_bar_below_handle; ! XSET (*x, Lisp_Int, win_y); ! XSET (*y, Lisp_Int, top_range); ! mouse_moved = 0; ! last_mouse_scroll_bar = Qnil; ! } ! *time = last_mouse_movement_time; UNBLOCK_INPUT; } *************** *** 2699,2704 **** --- 2702,2713 ---- #endif break; + case ReparentNotify: + f = x_window_to_frame (event.xreparent.window); + if (f) + f->display.x->parent_desc = event.xreparent.parent; + break; + case Expose: f = x_window_to_frame (event.xexpose.window); if (f) *************** *** 3092,3097 **** --- 3101,3130 ---- SET_FRAME_GARBAGED (f); } + if (! event.xconfigure.send_event) + { + Window win, child; + int win_x, win_y; + + /* Coords are relative to the parent. + Convert them to root-relative. */ + XTranslateCoordinates (x_current_display, + + /* From-window, to-window. */ + f->display.x->parent_desc, + ROOT_WINDOW, + + /* From-position, to-position. */ + event.xconfigure.x, + event.xconfigure.y, + &win_x, &win_y, + + /* Child of win. */ + &child); + event.xconfigure.x = win_x; + event.xconfigure.y = win_y; + } + f->display.x->pixel_width = event.xconfigure.width; f->display.x->pixel_height = event.xconfigure.height; f->display.x->left_pos = event.xconfigure.x; *************** *** 3863,3873 **** 0 <= n_fonts <= x_font_table_size. */ static int n_fonts; x_new_font (f, fontname) struct frame *f; register char *fontname; { - XFontStruct *temp; int already_loaded; int n_matching_fonts; XFontStruct *font_info; --- 3896,3906 ---- 0 <= n_fonts <= x_font_table_size. */ static int n_fonts; + Lisp_Object x_new_font (f, fontname) struct frame *f; register char *fontname; { int already_loaded; int n_matching_fonts; XFontStruct *font_info; *************** *** 3879,3888 **** font_names = (char **) XListFontsWithInfo (x_current_display, fontname, 1024, &n_matching_fonts, &font_info); /* If the server couldn't find any fonts whose named matched fontname, return an error code. */ if (n_matching_fonts == 0) ! return 1; /* See if we've already loaded a matching font. */ { --- 3912,3922 ---- font_names = (char **) XListFontsWithInfo (x_current_display, fontname, 1024, &n_matching_fonts, &font_info); + /* If the server couldn't find any fonts whose named matched fontname, return an error code. */ if (n_matching_fonts == 0) ! return Qnil; /* See if we've already loaded a matching font. */ { *************** *** 3894,3899 **** --- 3928,3934 ---- if (x_font_table[i]->fid == font_info[j].fid) { already_loaded = i; + fontname = font_names[j]; goto found_font; } } *************** *** 3906,3916 **** /* Otherwise, load the font and add it to the table. */ else { XFontStruct *font; font = (XFontStruct *) XLoadQueryFont (x_current_display, fontname); if (! font) ! return 1; /* Do we need to create the table? */ if (x_font_table_size == 0) --- 3941,3967 ---- /* Otherwise, load the font and add it to the table. */ else { + int i; XFontStruct *font; + /* Try to find a character-cell font in the list. */ + #if 0 + /* A laudable goal, but this isn't how to do it. */ + for (i = 0; i < n_matching_fonts; i++) + if (! font_info[i].per_char) + break; + #else + i = 0; + #endif + + if (i >= n_matching_fonts) + return Qt; + else + fontname = font_names[i]; + font = (XFontStruct *) XLoadQueryFont (x_current_display, fontname); if (! font) ! return Qnil; /* Do we need to create the table? */ if (x_font_table_size == 0) *************** *** 3933,3942 **** f->display.x->font = x_font_table[n_fonts++] = font; } - /* Free the information from XListFontsWithInfo. The data - we actually retain comes from XLoadQueryFont. */ - XFreeFontInfo (font_names, font_info, n_matching_fonts); - /* Now make the frame display the given font. */ if (FRAME_X_WINDOW (f) != 0) { --- 3984,3989 ---- *************** *** 3946,3957 **** f->display.x->font->fid); XSetFont (x_current_display, f->display.x->cursor_gc, f->display.x->font->fid); - init_frame_faces (f); x_set_window_size (f, f->width, f->height); } ! return 0; } #else /* ! defined (HAVE_X11) */ x_new_font (f, newname) --- 3993,4012 ---- f->display.x->font->fid); XSetFont (x_current_display, f->display.x->cursor_gc, f->display.x->font->fid); x_set_window_size (f, f->width, f->height); } ! { ! Lisp_Object lispy_name = build_string (fontname); ! ! ! /* Free the information from XListFontsWithInfo. The data ! we actually retain comes from XLoadQueryFont. */ ! XFreeFontInfo (font_names, font_info, n_matching_fonts); ! ! return lispy_name; ! } } #else /* ! defined (HAVE_X11) */ x_new_font (f, newname) diff -rcP emacs-19.7/src/xterm.h emacs-19.8/src/xterm.h *** emacs-19.7/src/xterm.h Sun May 16 11:01:14 1993 --- emacs-19.8/src/xterm.h Tue May 25 05:20:28 1993 *************** *** 570,572 **** --- 570,615 ---- (((struct selection_input_event *) (eventp))->property) #define SELECTION_EVENT_TIME(eventp) \ (((struct selection_input_event *) (eventp))->time) + + + /* Interface to the face code functions. */ + + /* Create the first two faces for a frame -- the ones that have GC's. */ + extern void init_frame_faces (/* FRAME_PTR */); + + /* Free the resources for the faces associated with a frame. */ + extern void free_frame_faces (/* FRAME_PTR */); + + /* Given a non-display face, find or make an equivalent display face + in face_vector, and return a pointer to it. */ + extern struct face *intern_face (/* FRAME_PTR, struct face * */); + + /* Given a frame and a face name, return the face's ID number, or + zero if it isn't a recognized face name. */ + extern int face_name_id_number (/* FRAME_PTR, Lisp_Object */); + + /* Return non-zero if FONT1 and FONT2 have the same size bounding box. + We assume that they're both character-cell fonts. */ + extern int same_size_fonts (/* XFontStruct *, XFontStruct * */); + + /* Recompute the GC's for the default and modeline faces. + We call this after changing frame parameters on which those GC's + depend. */ + extern void recompute_basic_faces (/* FRAME_PTR */); + + /* Return the face ID associated with a buffer position POS. + Store into *ENDPTR the position at which a different face is needed. + This does not take account of glyphs that specify their own face codes. + F is the frame in use for display, and W is a window displaying + the current buffer. + + REGION_BEG, REGION_END delimit the region, so it can be highlighted. */ + extern int compute_char_face (/* FRAME_PTR frame, + struct window *w, + int pos, + int region_beg, int region_end, + int *endptr */); + /* Return the face ID to use to display a special glyph which selects + FACE_CODE as the face ID, assuming that ordinarily the face would + be BASIC_FACE. F is the frame. */ + extern int compute_glyph_face (/* FRAME_PTR, int */); diff -rcP emacs-19.7/src/ymakefile emacs-19.8/src/ymakefile *** emacs-19.7/src/ymakefile Sat May 22 16:54:29 1993 --- emacs-19.8/src/ymakefile Mon May 24 22:47:45 1993 *************** *** 277,285 **** #endif /* ! defined (HAVE_X_MENU) */ #ifdef HAVE_X11 ! LIBX= $(LIBXMENU) LIB_X11_LIB LIBX11_MACHINE LIBX11_SYSTEM LD_SWITCH_X_SITE #else /* ! defined (HAVE_X11) */ ! LIBX= $(LIBXMENU) -lX10 LIBX10_MACHINE LIBX10_SYSTEM LD_SWITCH_X_SITE #endif /* ! defined (HAVE_X11) */ #endif /* ! defined (HAVE_X_WINDOWS) */ --- 277,285 ---- #endif /* ! defined (HAVE_X_MENU) */ #ifdef HAVE_X11 ! LIBX= $(LIBXMENU) LD_SWITCH_X_SITE LIB_X11_LIB LIBX11_MACHINE LIBX11_SYSTEM #else /* ! defined (HAVE_X11) */ ! LIBX= $(LIBXMENU) LD_SWITCH_X_SITE -lX10 LIBX10_MACHINE LIBX10_SYSTEM #endif /* ! defined (HAVE_X11) */ #endif /* ! defined (HAVE_X_WINDOWS) */ diff -rcP emacs-19.7/vms/ChangeLog emacs-19.8/vms/ChangeLog *** emacs-19.7/vms/ChangeLog Sat May 22 19:40:49 1993 --- emacs-19.8/vms/ChangeLog Mon May 24 12:17:32 1993 *************** *** 1,3 **** --- 1,7 ---- + Mon May 24 12:14:41 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Version 19.8 released. + Sat May 22 19:37:01 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) * Version 19.7 released.