1.2 to 1.3 --------- o No longer remove `commands.C' on `make clean'. o Fixed typo in MANIFEST. o Added `SHELL = /bin/sh' to Makefile. o Added list of machines on which `dired' has been successfully built and tested to INSTALL. o Added a `#ifndef __GNUG__ ... #endif' around the prototypes of the termcap(3) functions to get around some inconsistencies in the way early versions of g++ declared the termcap(3) functions. As g++ is set up, the termcap funnctions are in std.h, which seems to be always included by the compiler, so we don't need to declare them for g++ anyhow. o Found and fixed a problem with doing a popen(ls -al dirname) where dirname is a symbolic link. The solution is to instead do a popen(ls -al -L dirname) - force `ls' to follow symbolic links. o made `v' and 'm' edit directories if the given file is a directory, instead of insisting that it can only page through regular files. That is, we edit if a directory and page if a regular file. o removed the `-?' option. o added `-u' and `-c' options to sort by access time and inode-change time to the already present `-t' option to sort by modification time. o added the `O' command to query for and set a sorting order. o Removed THANKS file. o Added a command `E' to edit a prompted-for directory. This command interprets a `~' as the first character in the directory as the home directory of the user. o Simplified the README. 1.3 to 1.4 ---------- o Fixed the problem of the cursor position not being updated when we do a forward search from the last line. o Documented that a response of either `y' or `Y' to the `d' command is considered affirmative. o The screen is now cleared and the cursor positioned in the bottom left-hand corner of the screen, when a file is edited. Most fullscreen editors handle this themselves. This fix is so that non-fullscreen editors such as `ed' will work. o Ctl-G now properly aborts out of the `E' command. o Added a bit more documentation on the `M' command. o Modified the copy command `c' so that if the first character of the file to which we are copying is a `~', the full pathname of the user's home directory will be substituted for the `~'. o Fixed a problem with how the `!' command echos the command and then prints the output of the command. The intent is that the command line we're executing is echoed and then the following lines contain the output of the command, as `vi' does it. o Am now tracking CWD and PWD, if either are defined, so that commands which depend on these variables will work correctly. In particular, this means that using emacs as ones editor works correctly. Personally, I feel the fact that emacs will use CWD or PWD, instead of using getcwd(), is an error. o Corrected a problem with the cursor not being properly positioned when the last file in the window is deleted. 1.4 to 1.5 --------- o Fixed a glitch in dired.h which was tickled when compiling with g++ on a machine for which -DNO_STRSTR was defined. Found this when I got dired working on an old MicroVax running Ultrix. o Closed a small memory leak in dired.C relating to not reclaiming space previously passed to putenv() when tracking CWD and PWD in dired(). o Am no longer appending `-L' to the `ls' commands when the system supports symbolic links. This way, when you're editing a directory containing symbolic links, you actually see the `link -> file'. Users seem to prefer this to accessing the linked file transparently. o Closed memory leak in command1.C relating to not releasing the response from prompt() in edit_prompted_for_directory(). o I've come up with an easier way to deal with symbolic links which has lead to a little simplification of the code. In particular, I've been able to remove edit_directory() and in_same_directory() from command1.C and full_path_name() from utilities.C. o Added a compile-time define NEED_LG, which when defined in the Makefile, informs `dired' that `ls' needs the `-lg' flags in a long listing in order to display both owner and group of the files. This way all users should be able to see both the owner and group of the listed files. Modified INSTALL to NEED_LG also. o Closed a tiny memory leak due to my use of putenv(). The putenv() documentation says that the memory used by strings "NAME=value1" is not recovered when a new "NAME=value2" is added; consequenty, I've started deleting the old string if I added it. This all arises since I'm now tracking CWD and PWD. o Beefed up the login in the `c' command so that we don't get more than one file with the same name displayed on the screen. o Modified the `g' command to update directories in a "smart" manner. It now places the cursor back on the file it started out on if that file still exists; otherwise it tries to place it "close" to where it was. o Modified `dired.1' and `dired.lpr' to reflect the changes to the `g' and `c' commands. o Now mention in the manpage that searches without a search string, repeat the previous search in that direction. 1.5 to 1.6 --------- o Am now ringing the terminal's bell when an unknown key sequence is input. o The UP and DOWN arrow keys now work as expected. o Removed the `D' command. It has proven to be too easy to abuse. o The `E' and `c' commands now support filename completion when the TAB key is pressed from within the prompt asking for the file to copy to or the directory to edit. o Am now updating the display when I do a `c' command which overwrites another file in the window. o Am now appending the string "(C-g to Abort)" to all prompts, so that those users who don't RTFM can get out of prompts :-). o The help screen now scrolls forward (SPACE) and backward (BACKSPACE). o Replaced printf()s with fputs()s wherever possible. o Added a second `const char *' argument to message(), which defaults to 0. This allows me to treat message() as either printing a simple string, or as a simple printf() mechanism where it replaces the `%' in the first string, with the second string. o The modeline algorithm now updates the modeline in a "smart" manner intended to minimize the total number of characters output to the screen. o Replaced getchar() with read(). o The `L', `S' and `r' commands now expand a `~' to the user's home directory, if the `~' is the first character of the new filename. o Removed all possible system()s and instead do my own fork()ing and exec()ing where it makes sense. o Modified reread_current_directory() to take a reference to a pointer instead of a pointer to a pointer. o Modified get_current_directory() to return new'd storage. Also changed it's name to current_directory(). Modified get_file_name() to use its own volatile storage instead of forcing its clients to delete memory. Made prompt(), completion() and expand_tilde also return volatile storage. o Plugged a memory leak in get_directory_listing() in utilities.C. o Added class specific operators new() and delete() for the DirLine class. This is both a speed and space efficiency when directories have many files in them. o Put all the globals into one file for easy reference. o Fixed a problem with deleting the last line on the screen, which has more lines following it. 1.6 to 1.7 --------- o Developed and integrated in a simple reference counted string package. o Fixed a problem with the directory name in the modeline not being updated in certain cases. o Added -DSIGINTERRUPT to Makefile and INSTALL as well as adding the appropriate code to dired.C to call siginterrupt(2) when needed. I rely on read(2) being interrupted by signals to deal appropriately with SIGTSTP and SIGWINCH. o Added LINES and COLUMNS to the list of environment variables in the manpage which dired consults. o Now update the listing line after paging through a file. This way, if we're viewing files based on access or inode-modification time, the directory listing will reflect our reality, though it won't be ordered properly. o Purify'd the code. Purify is a really nice product. o Inlined those member functions which didn't significantly bloat the code. 1.7 to 1.8 --------- o removed setbuf for setvbuf -- stdout is still fully buffered, but now I let the standard I/O choose the buffer and the buffer size. o added a bit more information to some of the error messages in command[12].C. o added a define OLDDELETE to Makefile and INSTALL which means that your compiler doesn't understand the 'delete []' syntax. I then integrated this into the source code. o according to POSIX.1 the second argument to the execv() functions is a (char *const *); my code is now cognizant of this fact. o forced the cursor to return to its previous position when aborting out of a shell command. o ran c++-tame-comments from the latest c++-mode.el on each .C file. This is where all the backslashes in the comments come from. o added 1992 to Copyright notice. o did some reformatting to meet new formatting requirements I've imposed on myself. o got rid of function error() by overloading error for the specific cases I needed. o added workaround to bug in g++ 2.2.2 o changed "clean" target in Makefile to not delete files ending in '~'. A new target "realclean" does though remove them as well as removing comand.C, forcing it to be regenerated at next make. o am now conditionally compiling code which depends on SIGTSTP for those poor souls who don't have job control.