########################################################################## # This program is Copyright (C) 1986-2002 by Jonathan Payne. JOVE is # # provided by Jonathan and Jovehacks without charge and without # # warranty. You may copy, modify, and/or distribute JOVE, provided that # # this notice is included in all the source files and documentation. # ########################################################################## [Updated in 2001 December] Installation on a UNIX System. ------------------------------ Quick summary: - Configuration is not automatic, but it is simple for modern systems. - usually only SYSDEFS is critical; can be specified in make command - BSD, the first of the following that works: make SYSDEFS="-DBSDPOSIX -DUSE_OPENPTY" EXTRALIBS=-lutil install make SYSDEFS="-DBSDPOSIX -DUSE_OPENPTY -DHAS_LIBUTILS_H" EXTRALIBS=-lutil install make SYSDEFS="-DBSDPOSIX" install - Solaris: make SYSDEFS="SYSDEFS=-DSYSVR4" install - LINUX: make SYSDEFS="-DSYSVR4 -D_XOPEN_SOURCE=500" install To build RPMs on RedHat: rpm -ta tarfile.tgz - other systems: read comments about SYSDEFS in Makefile - if ld complains that there is no -ltermcap, add TERMCAPLIB=-lcurses. The curses library is much fatter than termcap, but will do. - when in doubt, read the rest of this document End of quick summary JOVE does not use any automatic configuring mechanism. Most configuring is done by editing definitions in Makefile (in some situations it is handier to override definitions by supplying them on the make command line). JOVE has been around for a long time, and a lot of care has been taken to make it work on many systems, new and old. For current systems, less configuring is require -- hurray for standards! Makefile specifies paths for installing jove components (JOVEHOME, SHAREDIR, LIBDIR, BINDIR, MANDIR, MANEXT), tempfiles (TMPDIR, RECDIR), and the default shell (DFLTSHELL). Although the defaults are reasonable, you may wish to change them. For many systems, you will need to change the definition of SYSDEFS. to the symbol that identifies your system's characteristics, using the notation for a macro-setting flag to the C compiler. For example, on a Sun running SunOS 4.0, use "SYSDEFS=-DSUNOS40". The Makefile describes suitable settings of SYSDEFS for many configurations. If yours isn't mentioned, use "grep System: sysdep.h" to find all currently supported system configurations. If there is no canned configuration for your system, you will have to define a new symbol and edit sysdep.h suitably. See "sysdep.doc" for the possible set of system-dependent aspects that you can select/tune. On some systems, you may need to change the flags passed to the compiler (OPTFLAGS) or the linker (TERMCAPLIB, EXTRALIBS, LDFLAGS). Next you may edit "tune.h" to select the compile time features you care about. See "tune.doc" for a description of all the compile time options. The default options are quite reasonable so, in most cases, you should leave them alone. If you are really short on space, or are porting JOVE to a new system, you may want to define -DBAREBONES in SYSDEFS to avoid some of the less-portable features of JOVE initially. You can type "make" to compile "jjove", "portsrv" (this is compiled on every system, but is only used if JOVE is compiled with the PIPEPROCS feature selection, typically on UNIX systems without pseudo ttys), "recover" and "teachjove". Test jjove to see if it works (remember that it won't be able to access its subsidiary files until they are installed, so you will need to call it with "./jjove -l . -s doc ..." -- assuming you are in the main JOVE directory). If it works, type "make install" to install everything where it belongs. Here are some things to consider when choosing a definition for TMPDIR, the directory where JOVE puts temporary files. The obvious place is /tmp, but many systems delete all files in /tmp when they are rebooting. If you hope to recover buffers from a system crash, TMPDIR lets you specify a safer place. If your system does not remove subdirectories of /tmp on reboot (lots do remove them these days) then it makes sense to make TMPDIR be /tmp/jove; otherwise, /var/tmp may be better. But if you use /tmp and want to recover buffers on system crashes, you should put the lines: (echo preserving JOVE files) >/dev/console (cd /tmp; /usr/local/lib/jovelib/recover -syscrash) >/dev/console in the /etc/rc file BEFORE /tmp is cleared, so that you can recover files after reboots (hint: look for the equivalent code to preserve vi tempfiles). You should then create a crontab entry to clear out old files in /usr/preserve. If you plan on using JOVE with a xterm, look at doc/XTermresource. This file contains resource declarations that allow JOVE to respond to more function keys and mouse gestures. For the pdp11 version there is the Ovmakefile. This has only been tested on 2.9bsd, and not recently. It worked pretty well, actually, and it was possible to turn on all the compile time options with this version. For LINUX, jove.spec is provided to specify how an RPM should be created. On RedHat 6.x and 7.x, "rpm -ta tarfile.tgz" will build source and binary RPMs -- rpm looks inside the .tgz to find jove.spec. Some features. -------------- "doc/jove.rc" and "doc/example.rc" are JOVE initialization files. "jove.rc" is the recommended "system" rc file (until you are ready to roll your own, that is). It gets read every time JOVE starts up FOR EVERYONE ("make install" should copy it to the right place automatically). After that JOVE reads the initialization file .joverc in the user's home directory. "example.rc" is my personal .joverc. The files intro.nr and cmds.nr in the doc directory are the official JOVE manual. I got permission from Richard Stallman to use his manual for the original EMACS, modifying it where necessary for JOVE. Lots of work was done by Brian Harvey on this manual. There are man pages for jove and teachjove. Teachjove is for people who have never used EMACS style editors. It is an interactive tutorial, THE tutorial written by Stallman for the original EMACS, only slightly modified for JOVE in the appropriate places. The man pages are completely up to date, thanks to me. Some acknowledgments. --------------------- Thanks to Jay (hack) Fenlason for writing the original pty code. Thanks to Dave Curry at Purdue for putting in tons of time and effort into getting JOVE ready. It just wouldn't be working without his help. Thanks to Jeff Mc Carrell at Berkeley for finding bugs and adding features, in particular, the comment formatter. Thanks to Karl Gegenfurtner for making the PC version. Thanks to Ken Mitchum for the Macintosh version. Thanks to Hugh Redelmeier for his input, his experience, countless bug fixes, and ... that's it, I guess. (Thanks to Brian Harvey for teaching me about linked lists ...) Good luck, have fun. Jonathan Payne (jpayne@starwave.com until further notice :-) Thanks to Charles Lindsey for the xjove/jovetool and xterm mouse support. Thanks to Jim Patterson for the Win 32 port. Thanks to the other JoveHacks for testing and for contributing numerous fixes, portability enhancements, and pieces of sage advice. D. Hugh Redelmeier (hugh@mimosa.com) Changes since 4.16 ------------------ - Portability fixes. Most important: work around a never-to-be-fixed bug in ncurses (the freely redistributable termcap/terminfo database). - Various minor bug fixes. Highlights: + use mkstemp to avoid a security loophole + avoid bad interaction between metakey and xterm mouse support in windows wider than 95 characters + handle symlinks better + obscure bug in text justification that could hang JOVE + misuse of stat that only misbehaved on LINUX Changes since 4.16beta ---------------------- - Added the variable paragraph-delimiter-pattern to customize paragraph recognition. - Ported to Win 32 (but not Win 32s) - Several variables have been renamed to more clearly indicate their function. The old name will still work, but eventually it will be eliminated. allow-bad-filenames => allow-bad-characters-in-filenames display-bad-filenames => display-filenames-with-bad-extensions internal-tabstop => tab-width - Several minor bugs fixed. Several portability improvements. + MSDOS: avoid date rollover problem + Borland C: support version 4 + Borland and Microsoft C: enable HIGHLIGHTING + NetBSD: dodge ssize_t redefinition + SCO UNIX: use + SunOS + Solaris: make charp effective + generic: Ensure screen is maintained during non-interactive processes, even if the user has typed ahead - The xterm mousing interface has been completely revamped. Some small ancillary consequences of this are + A next-line (prev-line) landing in the middle of a Tab selects the Tab character (rather than the following one) + A yank-pop is no longer permitted to follow a copy-region. Changes since version 4.14.6. ----------------------------- JOVE now works on many newer systems. For example, it compiles under Solaris 2.n (SYSDEFS=-DSYSVR4). The uninstalled binary in the JOVE directory is jjove instead of xjove (xjove is now something else). The new command line flag -J inhibits the reading of the global jove.rc file. Similarly, -j inhibits ~/.joverc. JOVE's auxiliary files are kept in two directories (actually, they can be the same directory). The sharedir holds the system jove.rc and cmds.doc, the data used to implement the describe-command and describe-variable commands; these files are meant to be machine-independent. The libdir holds portsrv and recover; these are compiled programs, and are machine-dependent. There are three ways JOVE uses to determine each of the directories, two of them new. If JOVE was invoked with -l dirname, dirname is taken as the LibDir; otherwise, if the environment contains JOVELIB, its value is taken as the LibDir; otherwise, the value of the make variable $(LIBDIR) when JOVE was compiled is used as LibDir. Similarly, -s dirname, JOVESHARE, and $(SHAREDIR) specify ShareDir. As a shortcut, -ls dirname specifies both directories. Now, a good way to test an uninstalled version of JOVE is to say, within the JOVE directory, jjove -s doc -l . other_parameters A new command "pushlibd" effectively does a pushd command with ShareDir as the operand. This is for use within startup files such as jove.rc. The global startup file is now in doc/jove.rc (was doc/system.rc), so the -s flag can find it as above. It contains lots of goodies (you might not want all of them), including an ability to call up additional TERMinal specific startup files depending on the $TERM environment variable. Among other things, these provide support for the many wacky keys that terminal makers provide. See doc/README. The old make-keymap and bind-keymap-to-key commands are no longer needed. Instead, bind-to-key can accept character strings of any length (they had better not be a prefix of any other binding). This enables, among other things, binding commands to the function keys on Sun keyboards. Buffer- specific bindings are now supported (local-bind-* commands). All system dependencies are now gathered together in the file sysdep.h, to make it easier to select the bits of code which should or should not be included for various flavors of UNIX. The position of the mark is now indicated by underlining it (the position of point is, of course, indicated by the cursor, so the extent of the region is now easily seen). The bad news is that, although this works well on terminals, underlining is broken in some environments (notably SunView and the versions of OpenWindows with SUNOS4.1.x and Solaris 2.0 -- Solaris 2.1+ is OK). For the broken OpenWindows versions, you can include the following in your .Xdefaults file term.boldStyle: Offset_X_and_Y term.underlineStyle: Same_as_Bold The stock X11 terminfo entry for xterm was broken until X11R6 in a way that will cause the screen to be scrambled when JOVE tries to use underlining. The following fixes to the entry solve this problem and more: replace "blink=@," with "blink@," replace "rs2=@" with "rs2@," [note the added comma!] add "kf1=\EOP," [if not already be present] delete "smul@," and "rmul@," [if present] add "smul=\E[4m, rmul=\E[m," [xterm does support underlining] The portion of the buffer visible in the window is now indicated by "uninverting" a part of the modeline in proportion. This feature is really intended for use with "xjove" (described next), and there is a variable "scroll-bar" to enable it. xjove is a complete front-end for JOVE which will be found in the directory xjove (see the README there). It enables setting of point and mark with the mouse, cutting and pasting of text via the region, and scrolling by pointing into the modeline. It is written using the XView library (supplied with Suns, or with the X-distribution from MIT); there is also a version for Sunview known as jovetool. See its man entry in doc/xjove.nr. An alternative way of using the mouse is provided in the form of commands designed to recognize the mouse events coded by Xterm. These facilities are not nearly as extensive or convenient as those provided via xjove or jovetool. Within SHELL windows, the TERM environment variable is now set to "emacs", mainly to discourage running programs which might have depended on something else. Some shells (tcsh, for example) have specific provisions for the emacs terminal type. By default, commands requiring a "y" or "n" response require a Return as well. When variable "one-key-confirmation" is set "on", a single character "y" or "n" is expected. Some features have been removed. Marks always float, so the variable "marks-should-float" is gone. The IBMPC-specific commands scroll-*-page are gone. JOVE is now 8-bit clean (the old behavior can be retained by setting NCHARS to 128 in sysdep.h, but no known system requires this setting). In operating systems with the necessary support (USE_CTYPE set in sysdep.h) it is possible to set the environment variable LC_CTYPE (or the JOVE variable lc-ctype) to a "locale" such as "iso_8859_1", whereupon characters with the 8th bit set sent from the keyboard (using the Alt Graph key, or the Compose key, or the Meta key, or whatever the particular hardware provides) will be displayed correctly, and will be treated as upper/lower case, etc in the correct manner. The default locale is "C", which reverts to 7-bit ASCII with the top 128 characters being displayed in octal. The format of the "jrec" file has changed. This means that previous versions of recover cannot deal with the files left by crashes of the new JOVE, and vice versa. Here is a list of reasons why your .joverc might no longer work. JOVE places diagnostics about the user and system .joverc files in the buffer "RC errors". - JOVE no longer ignores extra stuff on the end of binding commands. - All keymap creation is implicit. You no longer can or need to create new keymaps explicitly. - auto-execute-command no longer magically supplies a numeric argument for its command. If the command is intended to set a mode, you should supply the argument. If you don't set the numeric argument, the mode will be flipped. Here is an example from the system jove.rc: 1 auto-execute-command c-mode .*\.[chy]$ - Within regular expressions, alternatives are separated by "\|". Previously, alternatives within braces were separated by ",". For example, "/tmp/\{Re,article,rnmail,pn\}" must be changed to "/tmp/\{Re\|article\|rnmail\|pn\}". - auto-execute-command and auto-execute-macro both require explicit patterns. Previously, the pattern would default to match every filename. - Certain commands and variables have been eliminated or renamed: bind-keymap-to-key, make-keymap, process-bind-keymap-to-key -- no longer needed unbind-key -- bind the "unbound" command instead marks-should-float -- they always do now physical-tabstop -- now picked up from termcap scroll-next-page, scroll-previous-page -- IBM PC only, and useless background-color => background-attribute -- IBM PC only foreground-color => foreground-attribute mode-line-color => mode-line-attribute - On the IBM PC, the Delete key now generates the ASCII DEL character; Control-@ and Control-Space now generate the ASCII NUL character. Known problems -------------- In an interactive process buffer, JOVE sometimes fails to receive an end-of-file through the pseudo-tty. In this case, the process window will not be considered done, even though the child and all its ancestors are dead. The only consequences are that the status display continues to report that the process is not done and that another process may not be started up in that buffer. This only happens on certain systems, and we think that they are at fault. If a window-find command is issued while the current window's lines are numbered, the numbering may become wrong temporarily. We are working on this bug. JOVE can not handle lines longer than JBUFSIZ characters (usually 1024, but 512 on some small systems). Eliminating this limit is not easy. JOVE can not handle NUL characters in the buffer. In most cases, they are discarded silently, another dubious feature. Bug Reports and Maintenance. ---------------------------- Although Jonathan Payne still takes a fatherly interest in JOVE and retains overall control, the hassle of day-to-day bug-fixing, sifting of new features, and maintenance of general cleanliness is now co-ordinated by Hugh Redelmeier (hugh@mimosa.com). The mailing list jovehacks@cs.toronto.edu forwards mail to the group of people who develop and maintain JOVE. We welcome submissions to jovehacks, for example: - queries and suggestions about support for additional systems - bug reports (we may already have an explanation or fix) - suggestions for and implementations of improvements or additional features (we do try to keep JOVE small) The "official" FTP site and directory for JOVE is: ftp://ftp.cs.toronto.edu/pub/moraes/jove Look here for the most recent releases of JOVE. Development snapshots appear from time to time in ftp://ftp.cs.toronto.edu/pub/hugh/jove-dev