which included commits to RCS files with non-trunk default branches.
This file describes various problems that have been encountered
in compiling, installing and running XEmacs. It has been updated for
-XEmacs 21.0.
+XEmacs 21.4.
This file is rather large, but we have tried to sort the entries by
their respective relevance for XEmacs, but may have not succeeded
* Problems with running XEmacs
==============================
** General
+*** gnuserv is running, some clients can connect, but others cannot.
+
+The code in gnuslib.c respects the value of TMPDIR. If the server and
+the client have different values in their environment, you lose.
+One program known to set TMPDIR and manifest this problem is exmh.
+You can defeat the use of TMPDIR by unsetting USE_TMPDIR at the top of
+gnuserv.h at build time.
+
*** C-z just refreshes the screen instead of suspending Emacs.
You are probably using a shell that doesn't support job control, even
--pdump New, experimental, non-working, don't-sue-me-if-
your-house-collapses-and-your-wife-leaves-you,
portable dumper.
+--with-file-coding Allows transparent use of "foreign" line break
+ conventions in text files (such as LF-delimited text
+ imported from a Unix system to a Windows environment),
+ optionally including autodetection. Defaults to ON
+ on Windows, OFF on Unix.
Internationalization options:
* N.B. The above commentary is not quite correct in the flags have been hardwired
* to RTLD_SAVREL.
*/
-#pragma ident "@(#) $Id: dynodump.c,v 1.6.2.2 2000/09/20 02:39:17 martinb Exp $ - SMI"
+#pragma ident "@(#) $Id: dynodump.c,v 1.8 2001/04/12 18:20:43 michaels Exp $ - SMI"
#define __EXTENSIONS__ 1
* Introduction
==============
-This file presents some general information about XEmacs. It is
-primarily about the changes in recent XEmacs versions and its release
-history.
+This file presents the changes in recent XEmacs versions. It
+primarily documents user-visible (interface) changes, but also
+includes internal changes of possible interest to the users. When
+describing new features, we try to also document ways of reverting to
+the old behavior, where applicable. If you dislike a recent change in
+how XEmacs behaves, this file might contain a remedy.
Use `C-c C-f' to move to the next equal level of outline, and
`C-c C-b' to move to previous equal level. `C-h m' will give more
Starting with version 20.0, XEmacs includes ChangeLogs, which can be
consulted for a more detailed list of changes.
-Users interested in some of the details of how XEmacs differs from GNU
-Emacs should read the section "What's Different?" near the end of this
-file.
-
N.B. The term "GNU Emacs" refers to any release of Emacs Version
19 from the Free Software Foundation's GNU Project. (We do not
say just "Emacs" as Richard M. Stallman ["RMS"] prefers, because
it is clearly a more generic term.) The term "XEmacs" refers to
- this program or to its predecessors "Era" and "Lucid Emacs". The
- predecessor of all these program is called "Emacs 18". When no
- particular version is implied, "Emacs" will be used.
+ this program or sometimes to its predecessors "Era" and "Lucid
+ Emacs". The predecessor of all these program is called "Emacs
+ 18". When no particular version is implied, "Emacs" will be used.
\f
-* Changes in XEmacs 21.2
+* Changes in XEmacs 21.4
========================
-** The modeline's text is now scrollable. Please refer to the variable
-`modeline-scrolling-method' for more information.
-
** The delete key now deletes forward by default.
This is regulated by the variable `delete-key-deletes-forward', which
Delete key to delete backwards, despite the presence (according to
Xlib) of a BackSpace key on the keyboard.
+** You can now build XEmacs with support for GTK+ widget set.
+
+XEmacs built that way uses GTK+ to draw menubars, scrollbars, and
+other GUI components, as well GDK for drawing text, choosing fonts,
+allocating colors, etc. Additionally, GTK-XEmacs supports Lisp
+functions for writing your own GTK programs in Emacs Lisp!
+
+To use this, build XEmacs with the `--with-gtk' configure flag. (Of
+course, you'll need to have the GTK+ libraries and header files on the
+system.) Gnome widgets and functionality are supported where
+available, and can be turned off.
+
** Shifted motion keys now select text by default. You can turn this
off by setting `shifted-motion-keys-select-region' to nil.
-** You can now set the variable `kill-whole-line' to `always', which
-makes `kill-line' (C-k) delete the entire line always, not just when
-the cursor is at the beginning of the line. This behavior, as well as
-the existing kill-whole-line behavior, now only take effect when
-kill-line is called interactively, although this is a departure from a
-previous behavior in the case of setting this variable kill-whole-line
-to t. It is almost certainly what has always been intended, and most
-likely the old way of doing things introduced bugs.
-
-The new function `historical-kill-line' ignores the `kill-whole-line'
-setting and always gives the historical behavior of only killing to
-the end of the line. This function is bound to Sh-C-k, so that the
-kill to end of line behavior is available, even when `kill-whole-line'
-has been customized.
+** There is a new command `kill-entire-line' that always kills the
+entire line at point, regardless of whether the point is at the
+beginning of line, and regardless of the setting of `kill-whole-line'.
+
+** The variable `kill-whole-line' now only takes effect when kill-line
+is called interactively. Although this is a departure from a previous
+behavior in the case of setting this variable kill-whole-line to t,
+it is almost certainly what has always been intended, and most likely
+the old way of doing things introduced bugs.
+
+** The help buffers created by the plethora of C-h commands now
+contain hyperlinks.
+
+** The modeline's text is now scrollable. This is controlled by the
+variable `modeline-scrolling-method', which you need to set to a
+non-nil value. You can also choose scrolling types; see the docstring
+of `modeline-scrolling-method' for more information.
** XEmacs menus now have accelerators by default. If a menu item does
not have an accelerator specified, one is created dynamically, using
point. If you want to disable the feature, set
`isearch-highlight-all-matches' to nil.
+** The "coding systems" feature now works even in an XEmacs compiled
+without international (Mule) support. This means that for example
+XEmacs can recognize newline convention used by the file you are
+editing.
+
** You can now use the buffer tabs to switch between buffers. The
tabs are located between the toolbar and the uppermost window, in a
location called "gutter". If you dislike the buffer tabs, you can
accessing the logical "future" value. Not all minibuffer prompts have
yet been converted to support this feature.
+** International keysyms are now supported under X. This means that
+XEmacs running under Mule will automatically recognize the keysym
+`scaron' to be the lower-case `s' with caron in the Latin 2 character
+set. (Specifically, it will bind the keysym to `self-insert' and
+augment its `ascii-character' property.) This is very useful with
+XFree under European locales as shipped by recent Linux distributions.
+If XEmacs is compiled without Mule support, the feature still works,
+but it is unaware of different character sets -- it unconditionally
+sets the `ascii-character' property to values in the [160, 256) range.
+
** The rectangle functions have been almost completely rewritten in
order to avoid inserting undesirable spaces, notably at the end of
lines. Two typical examples of the old behavior were
It will try NAS first, then ESD, then playing native sound directly.
** X-Face support is now available under MS-Windows.
-If an X-Face libary built under MS-Windows is available then XEmacs
+If an X-Face library built under MS-Windows is available then XEmacs
will use this at build time.
** The font-menu is now available under MS-Windows.
as this would break the MS-Windows model. If you want this behavior
then set `selection-sets-clipboard' to t.
+** Motif selection support is now more correct (but slower) in its behaviour.
+
+Changes have been made to allow correct operation of cut/copy/paste
+operations between native widgets and XEmacs buffers. However, this
+can lead to a lot of X traffic which slows down the performance of
+`C-k'. If you want the old behaviour then set
+`x-selection-strict-motif-ownership' to nil.
+
** Mail spool locking now works correctly.
XEmacs has always come with a little auxiliary program, movemail,
which moves mail out of the system's spool area into user storage. To
binary kit, set the `mail-lock-method' variable at startup, or the
EMACSLOCKMETHOD environment variable.
-** Init file will move to ~/.xemacs/init.el.
+** Indentation no longer indents comments that begin at column zero.
+This makes it easy to deal with commented out regions of code.
-If `~/.xemacs/init.el' exists, XEmacs will prefer it over `~/.emacs'
-as an init file. The file may be byte-compiled as
-`~/.xemacs/init.elc'.
+** Init file changes.
-Future versions of XEmacs will stop supporting `~/.emacs' as an init
-file. XEmacs offers automatic migration upon startup.
+*** XEmacs now supports a `~/.xemacs/init.el' startup file. If
+it exists, XEmacs will prefer it over `.emacs' and `.emacs.el'. The
+file may be byte-compiled as `~/.xemacs/init.elc'.
-** Custom file will move to ~/.xemacs/custom.el.
+If present, the `~/.xemacs/' directory may contain startup files for
+XEmacs packages that support it.
-Whereas customize settings were formerly stored in the regular init
-file, XEmacs now prefers them to be in a separate file
-`~/.xemacs/custom.el', completely under automatic control. This
-change goes with the migration of the init file, and XEmacs offers
-automatic migration upon startup.
+*** Init file in your home directory may be called `.emacs.el'.
-** Init file may be called .emacs.el.
-
-For the time being, like in GNU Emacs 20.4 and on, you can now name
-the XEmacs init file `.emacs.el'. Formerly the name had to be
-`.emacs'. If you use the name `.emacs.el', you can byte-compile the
-file in the usual way.
+Like in GNU Emacs 20.4 and on, you can now name the XEmacs init file
+located in your home directory `.emacs.el'. Formerly the name had to
+be `.emacs'. If you use the name `.emacs.el', you can byte-compile
+the file in the usual way.
If both `.emacs' and `.emacs.el' exist, the latter file is the one
that is used.
-** New command-line switches -user-init-file and -user-init-directory.
+*** New command-line switches -user-init-file and -user-init-directory.
These can be used to specify alternate locations for what is normally
~/.emacs and ~/.xemacs.
-Moreover, -user <user> (which used to only work in unpredictable ways)
-is now equivalent to -user-init-file ~<user>/.xemacs/init.el
--user-init-directory ~<user>/.xemacs. or -user-init-file
-~<user>/.emacs -user-init-directory ~<user>/.xemacs, whichever init
-file comes first.
+Moreover, the `-user <user>' command-line option (which used to only
+work in unpredictable ways) is now equivalent to `-user-init-file
+~<user>/.xemacs/init.el -user-init-directory ~<user>/.xemacs', or
+`-user-init-file ~<user>/.emacs -user-init-directory ~<user>/.xemacs',
+whichever init file comes first.
+
+*** Custom file will move to ~/.xemacs/custom.el.
+
+Whereas customize settings were formerly stored in the regular init
+file, XEmacs now prefers them to be in a separate file
+`~/.xemacs/custom.el', completely under automatic control. This
+change goes with the migration of the init file, and XEmacs offers
+automatic migration upon startup.
** New variable `mswindows-alt-by-itself-activates-menu'.
If you set this variable to nil then pressing and releasing the Alt
Supported versions of PostgreSQL are 6.5.3 (earlier versions may work,
but have not been tested) and 7.0-beta1.
+** Help functions (e.g. `C-h f') now know how to print macro argument
+lists. If your macro definition included an argument list for the
+sake of help output, you no longer need to do that.
+
+** Mule changes.
+
+*** Windows 1251 code page is now supported as coding system
+`windows-1251'.
+
+*** Czech, Thai, Cyrillic-KOI8, Vietnamese, Ethiopic support now
+available.
+
+*** The appropriate characters in Latin 3 and Latin 4 character sets
+are correctly defined as words.
+
+*** The default coding-priority-list is now safer. This means that if
+you have no language environment set, Mule no longer automatically
+recognizes ISO 2022 escapes in your files. This makes editing binary
+files safe.
+
** Etags changes.
*** In DOS, etags looks for file.cgz if it cannot find file.c.
*** New language Ada: tags are functions, procedures, packages, tasks, and
types.
-*** In Fortran, procedure is no more tagged.
+*** In Fortran, procedure is no longer tagged.
*** In Java, tags are created for "interface".
for PSWrap.
\f
-* Lisp and internal changes in XEmacs 21.2
+* Lisp and internal changes in XEmacs 21.4
==========================================
** A new portable dumper is available for beta testing.
Olivier Galibert has written a portable dumper for XEmacs, based on
-initial work by Kyle Jones. Normally, XEmacs C sources link into an
-executable called `temacs', which loads the Lisp code and "unexecs"
-into a proper `xemacs' executable. The unexec() process is hard to
+initial work by Kyle Jones. To perform even the most basic editor,
+XEmacs requires some amount of Lisp code to be loaded. To avoid
+repeating the expensive loading process at every startup, XEmacs is
+built in a special way. Its C sources link into an executable called
+`temacs', which loads the bootstrap Lisp code and uses a special
+"unexec" call to dump the resulting memory image into a proper
+`xemacs' executable on disk. The unexec() process is hard to
implement correctly and makes XEmacs very hard to port to new
operating systems, or even to new releases of old systems.
-A portable dumper is a different approach to dumping: instead of
-dumping full-fledged executable, it only dumps out the initialized
+The new portable dumper uses a different approach to dumping: instead
+of dumping full-fledged executable, it only dumps out the initialized
data structures (both Lisp and C) into an external file. A normally
-running XEmacs only needs to mmap() that file and relocate a bit to
-get to the initialized data. In that scheme, there is no difference
+running XEmacs only needs to mmap that file and relocate a bit to get
+to the initialized data. In that scheme, there is no difference
between `temacs' and `xemacs'.
-This is all very experimental, though. Configure with `--pdump' to
-try testing it.
+Unfortunately, the portable dumper has not been completely finished
+for this release, and will not be used by default. However, if you
+wish to experiment with it, or if you need to compile XEmacs on a new
+and unsupported platform, you can test it by configuring XEmacs with
+`--pdump' flag.
** Much effort has been invested to make XEmacs Lisp faster:
This is especially the case when running a Mule-enabled XEmacs.
A general overhaul of the lisp engine should produce a speedup of 1.4
-in a Latin-1 XEmacs, and 2.1 in a Mule XEmacs. These numbers were
+in a non-Mule XEmacs, and 2.1 in a Mule XEmacs. These numbers were
obtained running `(byte-compile "simple.el")', which should be a
pretty typical test of "pure" Lisp.
*** The garbage collector has been tuned, leading to a speedup of
1.16.
+*** The byte-compiler and the byte-optimizer have been tuned to
+produce better code in many small ways.
+
*** The family of functions that iterate over lists, like `memq', and
`rassq', have been made a little faster (typically 1.3).
The buffers-tab functionality and progress gauge have been implemented
using this feature.
-** `user-init-file' and `user-init-directory' are now absolute
-file/directory names. Previously, both variables used to be relative
-to (concat "~" init-file-user). This turned out to be too complicated
-for most packages (and some core Lisp files) to use correctly. Also,
-the `init-file-user' variable has been obsoleted in the process.
+** A new Windows installer, netinstall ported from Cygwin.
+
+Nearly complete automation of the XEmacs install process from
+ftp.xemacs.org. Includes selection of Lisp packages to install, etc.
+
+** Syntax tables may now be specified for a part of a buffer by
+attaching the `syntax-table' property to an extent. For compatibility
+with GNU Emacs, you may use the text-property interface to achieve the
+same result.
+
+** Case translation now supports international characters.
+
+*** Instead of being lists of 256-character strings, case tables are
+now opaque objects. The interface to access them is almost the same,
+except it now works for international characters, and you can set the
+case pairs using `put-case-table-pair'. `set-case-table' and friends
+still support the old list/string based interface for backward
+compatibility.
+
+*** As a consequence of this change, functions `downcase' and `upcase'
+as well as all the case-transformation commands now work with
+non-ASCII characters. Built-in tables cover all the Latin character
+sets that we support. If your language has a distinction between
+upper and lower case that is not handled by XEmacs/Mule, please let us
+know.
+
+*** The code that implements case-insensitive search has been modified
+to respect the case table settings. This also applies to regexp
+search.
+
+** Values of variables `user-init-file' and `user-init-directory' are
+now absolute file/directory names. Previously, both variables used to
+be relative to `(concat "~" init-file-user)'. This turned out to be
+too complicated for most packages (and some core Lisp files) to use
+correctly. Also, the `init-file-user' variable has been obsoleted in
+the process.
The user-visible options like `-u' have not changed their behavior.
this argument is non-nil, it should be a string; that string is used
in two ways:
- It is returned if the user enters empty input.
- It is available through the history command M-n.
+ * It is returned if the user enters empty input.
+ * It is available as the logical "future" entry, by pressing the down
+ arrow.
** LDAP changes.
** `translate-region' has been improved in several ways. Its TABLE
argument used to be a 256-character string. In addition to this, it
can now also be a vector or a char-table, which makes the function
-useful for Mule, which it wasn't. If TABLE a vector or a generic
+useful for Mule, which it wasn't. If TABLE is a vector or a generic
char-table, you can map characters to strings instead of to other
characters. For instance:
This behavior is compatible with other code which treats symbols
beginning with colon as keywords only if they are interned in the
-global obarray. `keywordp' used to wrongly return t in both cases
-above.
+global obarray. `keywordp' used to wrongly return t in both above
+cases.
+
+** The function `replace-in-string' has been rewritten to use
+`replace-match'. This not only makes it much faster, but adds all the
+features of `replace-match'.
** New variables `this-command-properties' and
`last-command-properties' are now available for communication between
has run.
** The descriptor that specifies the text of a menu item can now be an
-evaluated expression. This makes this descriptor parallel with
-others, which can also be expressions.
+evaluated expression. This makes it parallel with other descriptors,
+which can also be expressions.
\f
* Changes in XEmacs 21.0
*** `Info-default-directory-list' is now obsolete. If you want to
change the path which XEmacs uses to search for info files, set
`Info-directory-list' instead.
+
+\f
+* For older news, see the file ONEWS.
A Unix-domain socket is used to communicate between \fIgnuclient\fP
and \fIgnuserv\fP if the symbol UNIX_DOMAIN_SOCKETS is defined at the
top of gnuserv.h. A file called /tmp/gsrvdir????/gsrv is created for
-communication and if deleted will cause communication between server
-and client to fail. Only the user running gnuserv will be able to
-connect to the socket.
+communication. If the symbol USE_TMPDIR is set at the top of gnuserv.h,
+$TMPDIR, when set, is used instead of /tmp. If that file is deleted,
+or TMPDIR has different values for the server and the client, communication
+between server and client will fail. Only the user running gnuserv will be
+able to connect to the socket.
.SH INTERNET-DOMAIN SOCKETS
Internet-domain sockets are used to communicate between
\fIgnuclient\fP and \fIgnuserv\fP if the symbol
+2001-04-14 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.2.47 "Zephir" is released.
+
+2000-08-01 Jon Schewe <jpschewe@eggplant.mtu.net>
+
+ * gnuclient.c (filename_expand): Let Cygwin convert Windows path
+ to Unix.
+
+2001-03-23 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * gnuserv.h: Document TMPDIR lossage if client/server values differ.
+
2001-03-21 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.46 "Urania" is released.
* ../etc/gnuserv.README relative to the directory containing this file)
*/
+#ifdef CYGWIN
+extern void cygwin_conv_to_posix_path(const char *path, char *posix_path);
+#endif
+
#include "gnuserv.h"
char gnuserv_version[] = "gnuclient version " GNUSERV_VERSION;
/* fullpath - returned full pathname */
/* filename - filename to expand */
{
- int len;
+#ifdef CYGWIN
+ char cygwinFilename[MAXPATHLEN+1];
+#endif
+ int len;
fullpath[0] = '\0';
+#ifdef CYGWIN
+ /*
+ If we're in cygwin, just convert it and let the unix stuff handle it.
+ */
+ cygwin_conv_to_posix_path(filename, cygwinFilename);
+ filename = cygwinFilename;
+#endif
+
if (filename[0] && filename[0] == '/')
{
/* Absolute (unix-style) pathname. Do nothing */
strcat (fullpath, filename);
}
-#ifdef CYGWIN
- else if (filename[0] && filename[0] == '\\' &&
- filename[1] && filename[1] == '\\')
- {
- /* This path includes the server name (something like
- "\\server\path"), so we assume it's absolute. Do nothing to
- it. */
- strcat (fullpath, filename);
- }
- else if (filename[0] &&
- filename[1] && filename[1] == ':' &&
- filename[2] && filename[2] == '\\')
- {
- /* Absolute pathname with drive letter. Convert "<drive>:"
- to "//<drive>/". */
- strcat (fullpath, "//");
- strncat (fullpath, filename, 1);
- strcat (fullpath, &filename[2]);
- }
-#endif
else
{
/* Assume relative Unix style path. Get the current directory
#define GNUSERV_VERSION "3.12"
+/* Note: this setting can cause client-server connection failure if the
+ * value of TMPDIR is not shared by client and server at run-time.
+ */
#define USE_TMPDIR
#define PATCHLEVEL 2
;; Copyright (C) 1997 Free Software Foundation, Inc.
;; Copyright (C) 1992 by Sebastian Kremer <sk@thp.uni-koeln.de>
+;; Copyright (C) 2001 Ben Wing.
;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
;; Maintainer: XEmacs Development Team
;; disk, in case NFS is slow. The auto-save file used for
;; /usr/foo/bar/baz.txt
;; will be
-;; AUTOSAVE/#\!usr\!foo\!bar\!baz.txt#
+;; AUTOSAVE/#=2Fusr=2Ffoo=2Fbar=2Fbaz.txt#"
;; assuming AUTOSAVE is the non-nil value of the variable
;; `auto-save-directory'.
-;; Takes care that autosave files for non-file-buffers (e.g. *mail*)
-;; from two simultaneous Emacses don't collide.
-
;; Autosaves even if the current directory is not writable.
;; Can limit autosave names to 14 characters using a hash function,
;; (concat "/tmp/" (user-login-name) "-autosave/"))
;; If you don't want to save in /tmp (e.g., because it is swap
-;; mounted) but rather in ~/autosave/
+;; mounted) but rather in ~/.autosave/
;; (setq auto-save-directory (expand-file-name "~/.autosave/"))
;; If you want to save each file in its own directory (the default)
will have a longish filename like
- AUTO-SAVE-DIRECTORY/#\\!home\\!sk\\!lib\\!emacs\\!lisp\\!auto-save.el#
+ AUTO-SAVE-DIRECTORY/#=2Fhome=2Fsk=2Flib=2Femacs=2Flisp=2Fauto-save.el#
as auto save file.
\f
;;; Computing an autosave name for a file and vice versa
-;; #### Now that this file is dumped, we should turn off the routine
-;; from files.el. But it would make it harder to remove it!
-
-(defun make-auto-save-file-name (&optional file-name);; redefines files.el
- ;; auto-save-file-name-p need not be redefined.
-
+(defun make-auto-save-file-name (&optional file-name)
"Return file name to use for auto-saves of current buffer.
Does not consider `auto-save-visited-file-name'; that is checked
before calling this function.
(save-name (or file-name
;; Prevent autosave errors. Buffername
;; (to become non-dir part of filename) will
- ;; be unslashified twice. Don't care.
- (auto-save-unslashify-name (buffer-name))))
+ ;; be escaped twice. Don't care.
+ (auto-save-escape-name (buffer-name))))
(remote-p (and (stringp file-name)
(fboundp 'efs-ftp-path)
(efs-ftp-path file-name))))
(error (warn "Error caught in `make-auto-save-file-name':\n%s"
(error-message-string error-data))
- (if buffer-file-name
- (concat (file-name-directory buffer-file-name)
- "#"
- (file-name-nondirectory buffer-file-name)
- "#")
- (expand-file-name (concat "#%" (buffer-name) "#"))))))
+ (let ((fname
+ (if file-name
+ (concat (file-name-directory file-name)
+ "#"
+ (file-name-nondirectory file-name)
+ "#")
+ (expand-file-name
+ (concat "#%" (auto-save-escape-name (buffer-name))
+ "#")))))
+ (if (or (file-writable-p fname)
+ (file-exists-p fname))
+ fname
+ (expand-file-name (concat "~/"
+ (file-name-nondirectory fname))))))))
+
+(defun auto-save-file-name-p (filename)
+ "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
+FILENAME should lack slashes.
+You can redefine this for customization."
+ (string-match "\\`#.*#\\'" filename))
(defun auto-save-original-name (savename)
"Reverse of `make-auto-save-file-name'.
(equal savedir
(expand-file-name auto-save-directory-fallback)))
;; it is of the `-fixed-directory' type
- (auto-save-slashify-name (substring basename 1 -1)))
+ (auto-save-unescape-name (substring basename 1 -1)))
(t
;; else it is of `-same-directory' type
(concat savedir (substring basename 1 -1))))))
(defun auto-save-name-in-fixed-directory (filename &optional prefix)
- ;; Unslashify and enclose the whole FILENAME in `#' to make an auto
+ ;; Escape and enclose the whole FILENAME in `#' to make an auto
;; save file in the auto-save-directory, or if that is nil, in
;; auto-save-directory-fallback (which must be the name of an
;; existing directory). If the results would be too long for 14
;; into a shorter name.
;; Optional PREFIX is string to use instead of "#" to prefix name.
(let ((base-name (concat (or prefix "#")
- (auto-save-unslashify-name filename)
+ (auto-save-escape-name filename)
"#")))
(if (and auto-save-hash-p
auto-save-hash-directory
(file-name-nondirectory filename)
"#")))
-;; #### The following two should probably use `replace-in-string'.
-
-(defun auto-save-unslashify-name (s)
- ;; "Quote any slashes in string S by replacing them with the two
- ;;characters `\\!'.
- ;;Also, replace any backslash by double backslash, to make it one-to-one."
- (let ((limit 0))
- (while (string-match "[/\\]" s limit)
- (setq s (concat (substring s 0 (match-beginning 0))
- (if (string= (substring s
- (match-beginning 0)
- (match-end 0))
- "/")
- "\\!"
- "\\\\")
- (substring s (match-end 0))))
- (setq limit (1+ (match-end 0)))))
- s)
-
-(defun auto-save-slashify-name (s)
- ;;"Reverse of `auto-save-unslashify-name'."
- (let (pos)
- (while (setq pos (string-match "\\\\[\\!]" s pos))
- (setq s (concat (substring s 0 pos)
- (if (eq ?! (aref s (1+ pos))) "/" "\\")
- (substring s (+ pos 2)))
- pos (1+ pos))))
- s)
+(defconst auto-save-reserved-chars
+ '(
+ ?\0 ?\1 ?\2 ?\3 ?\4 ?\5 ?\6 ?\7 ?\10 ?\11 ?\12 ?\13 ?\14 ?\15 ?\16
+ ?\17 ?\20 ?\21 ?\22 ?\23 ?\24 ?\25 ?\26 ?\27 ?\30 ?\31 ?\32 ?\33
+ ?\34 ?\35 ?\36 ?\37 ?\40 ?? ?* ?: ?< ?> ?| ?/ ?\\ ?& ?^ ?% ?= ?\")
+ "List of characters disallowed (or potentially disallowed) in filenames.
+Includes everything that can get us into trouble under MS Windows or Unix.")
+
+;; This code based on code in Bill Perry's url.el.
+
+(defun auto-save-escape-name (str)
+ "Escape any evil nasty characters in a potential filename.
+Uses quoted-printable-style escaping -- e.g. the dreaded =3D.
+Does not use URL escaping (with %) because filenames beginning with #% are
+a special signal for non-file buffers."
+ (mapconcat
+ (function
+ (lambda (char)
+ (if (memq char auto-save-reserved-chars)
+ (if (< char 16)
+ (upcase (format "=0%x" char))
+ (upcase (format "=%x" char)))
+ (char-to-string char))))
+ str ""))
+
+(defun auto-save-unhex (x)
+ (if (> x ?9)
+ (if (>= x ?a)
+ (+ 10 (- x ?a))
+ (+ 10 (- x ?A)))
+ (- x ?0)))
+
+(defun auto-save-unescape-name (str)
+ "Undo any escaping of evil nasty characters in a file name.
+See `auto-save-escape-name'."
+ (setq str (or str ""))
+ (let ((tmp "")
+ (case-fold-search t))
+ (while (string-match "=[0-9a-f][0-9a-f]" str)
+ (let* ((start (match-beginning 0))
+ (ch1 (auto-save-unhex (elt str (+ start 1))))
+ (code (+ (* 16 ch1)
+ (auto-save-unhex (elt str (+ start 2))))))
+ (setq tmp (concat tmp (substring str 0 start)
+ (char-to-string code))
+ str (substring str (match-end 0)))))
+ (setq tmp (concat tmp str))
+ tmp))
+
+;; The old versions are below.
+
+;(defun auto-save-escape-name (s)
+; ;; "Quote any slashes in string S by replacing them with the two
+; ;;characters `\\!'.
+; ;;Also, replace any backslash by double backslash, to make it one-to-one."
+; (let ((limit 0))
+; (while (string-match "[/\\]" s limit)
+; (setq s (concat (substring s 0 (match-beginning 0))
+; (if (string= (substring s
+; (match-beginning 0)
+; (match-end 0))
+; "/")
+; "\\!"
+; "\\\\")
+; (substring s (match-end 0))))
+; (setq limit (1+ (match-end 0)))))
+; s)
+
+;(defun auto-save-unescape-name (s)
+; ;;"Reverse of `auto-save-escape-name'."
+; (let (pos)
+; (while (setq pos (string-match "\\\\[\\!]" s pos))
+; (setq s (concat (substring s 0 pos)
+; (if (eq ?! (aref s (1+ pos))) "/" "\\")
+; (substring s (+ pos 2)))
+; pos (1+ pos))))
+; s)
\f
;;; Hashing for autosave names
;; This leaves two characters that could be used to wrap it in `#' or
;; make two filenames from it: one for autosaving, and another for a
-;; file containing the name of the autosaved filed, to make hashing
+;; file containing the name of the autosaved file, to make hashing
;; reversible.
;(defun auto-save-cyclic-hash-12 (s)
; "Outputs the 12-characters ascii hex representation of a 6-bytes
(t
(incf total)
(with-output-to-temp-buffer "*Directory*"
- (apply 'call-process "ls" nil standard-output nil
- "-l" afile (if file (list file))))
+ (buffer-disable-undo standard-output)
+ (save-excursion
+ (set-buffer "*Directory*")
+ (setq default-directory (file-name-directory afile))
+ (insert-directory afile "-l")
+ (when file
+ (setq default-directory (file-name-directory file))
+ (insert-directory file "-l"))))
(if (yes-or-no-p (format "Recover %s from auto save file? "
(or file "non-file buffer")))
(let* ((obuf (current-buffer)))
;; Author: Adrian Aichner <adrian@xemacs.org>
;; Date: Sun., Apr. 20, 1997-2000.
-;; Version: $Revision: 1.5.2.9 $
+;; Version: $Revision: 1.8 $
;; Keywords: internal
;; This file is part of XEmacs.
(decf (nth 1 form) last)
(butlast form))
- ;; (- 0 x ...) --> (- (- x) ...)
- ((and (eq 0 (nth 1 form)) (>= (length form) 3))
- `(- (- ,(nth 2 form)) ,@(nthcdr 3 form)))
+ ;; (- 0 ...) -->
+ ((eq 0 (nth 1 form))
+ (case (length form)
+ ;; (- 0) --> 0
+ (2 0)
+ ;; (- 0 x) --> (- x)
+ (3 `(- ,(nth 2 form)))
+ ;; (- 0 x y ...) --> (- (- x) y ...)
+ (t `(- (- ,(nth 2 form)) ,@(nthcdr 3 form)))))
(t (byte-optimize-predicate form)))))
(set-buffer-dedicated-frame newbuf frame)
(set-frame-property frame 'dialog-box-buffer newbuf)
(with-current-buffer newbuf
- (setq frame-title-format cl-title)
+ ;; Should be frame specific, so
+ ;; we don't do this for now.
+ ;; (setq frame-title-format cl-title)
(make-local-hook 'delete-frame-hook)
(add-hook 'delete-frame-hook
#'(lambda (frame)
(string-match "[\n\t ]*\narguments: ?(\\(.*\\))\n?\\'" doc))
(setq doc (substring doc 0 (match-beginning 0))))
doc))
-; (let ((name-char "[-+a-zA-Z0-9_*]") (sym-char "[-+a-zA-Z0-9_:*]"))
-; (list
-; ;;
-; ;; The symbol itself.
-; (list (concat "\\`\\(" name-char "+\\)\\(:\\)?")
-; '(1 (if (match-beginning 2)
-; 'font-lock-function-name-face
-; 'font-lock-variable-name-face)
-; nil t))
-; ;;
-; ;; Words inside `' which tend to be symbol names.
-; (list (concat "`\\(" sym-char sym-char "+\\)'")
-; 1 '(prog1
-; 'font-lock-reference-face
-; (add-list-mode-item (match-beginning 1)
-; (match-end 1)
-; nil
-; 'help-follow-reference))
-; t)
-; ;;
-; ;; CLisp `:' keywords as references.
-; (list (concat "\\<:" sym-char "+\\>") 0 'font-lock-reference-face t)))
;; replacement for `princ' that puts the text in the specified face,
;; if possible
(defun Help-princ-face (object face)
(cond ((bufferp standard-output)
- (let ((opoint (point standard-output)))
- (princ object)
- (put-nonduplicable-text-property opoint (point standard-output)
- 'face face standard-output)))
- ((markerp standard-output)
- (let ((buf (marker-buffer standard-output))
- (pos (marker-position standard-output)))
- (princ object)
- (put-nonduplicable-text-property
- pos (marker-position standard-output) 'face face buf)))
- (t princ object)))
+ (let ((opoint (point standard-output)))
+ (princ object)
+ (put-nonduplicable-text-property opoint (point standard-output)
+ 'face face standard-output)))
+ ((markerp standard-output)
+ (let ((buf (marker-buffer standard-output))
+ (pos (marker-position standard-output)))
+ (princ object)
+ (put-nonduplicable-text-property
+ pos (marker-position standard-output) 'face face buf)))
+ (t princ object)))
;; replacement for `prin1' that puts the text in the specified face,
;; if possible
(defun Help-prin1-face (object face)
(cond ((bufferp standard-output)
- (let ((opoint (point standard-output)))
- (prin1 object)
- (put-nonduplicable-text-property opoint (point standard-output)
- 'face face standard-output)))
- ((markerp standard-output)
- (let ((buf (marker-buffer standard-output))
- (pos (marker-position standard-output)))
- (prin1 object)
- (put-nonduplicable-text-property
- pos (marker-position standard-output) 'face face buf)))
- (t prin1 object)))
+ (let ((opoint (point standard-output)))
+ (prin1 object)
+ (put-nonduplicable-text-property opoint (point standard-output)
+ 'face face standard-output)))
+ ((markerp standard-output)
+ (let ((buf (marker-buffer standard-output))
+ (pos (marker-position standard-output)))
+ (prin1 object)
+ (put-nonduplicable-text-property
+ pos (marker-position standard-output) 'face face buf)))
+ (t prin1 object)))
(defvar help-symbol-regexp
(let ((sym-char "[+a-zA-Z0-9_:*]")
;; properties:
;; 1. mouse-face is 'highlight (so the extent gets highlighted on mouse over)
;; 2. help-symbol is the name of the symbol.
- ;; 3. face is 'font-lock-reference-face.
+ ;; 3. face is 'hyper-apropos-hyperlink.
;; 4. context-menu is a list of context menu items, specific to whether
;; the symbol is a function, variable, or both.
;; 5. activate-function will cause the function or variable to be described,
(let ((ex (make-extent b e)))
(set-extent-property ex 'mouse-face 'highlight)
(set-extent-property ex 'help-symbol sym)
- (set-extent-property ex 'face 'font-lock-reference-face)
+ (set-extent-property ex 'face 'hyper-apropos-hyperlink)
(set-extent-property
ex 'context-menu
(cond ((and var fun)
(if describe-function-show-arglist
(let ((arglist (function-arglist function)))
(when arglist
- (Help-princ-face arglist 'font-lock-comment-face)
+ (require 'hyper-apropos)
+ (Help-princ-face arglist 'hyper-apropos-documentation)
(terpri))))
(terpri)
(cond (kbd-macro-p
(let ((print-escape-newlines t))
(princ "`")
;; (Help-princ-face (symbol-name variable)
- ;; 'font-lock-variable-name-face) overkill
+ ;; 'font-lock-variable-name-face) overkill
(princ (symbol-name variable))
(princ "' is ")
(while (variable-alias variable)
(if file-name
(princ (format " -- loaded from \"%s\"\n" file-name))))
(princ "\nValue: ")
- (if (not (boundp variable))
- (Help-princ-face "void\n" 'font-lock-comment-face)
- (Help-prin1-face (symbol-value variable) 'font-lock-comment-face)
+ (require 'hyper-apropos)
+ (if (not (boundp variable))
+ (Help-princ-face "void\n" 'hyper-apropos-documentation)
+ (Help-prin1-face (symbol-value variable)
+ 'hyper-apropos-documentation)
(terpri))
(terpri)
(cond ((local-variable-p variable (current-buffer))
;; Author: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
;; Maintainer: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
;; Created: Jan 1998
-;; Version: $Revision: 1.7.2.11 $
+;; Version: $Revision: 1.10 $
;; Keywords: help comm
;; This file is part of XEmacs
;; are ignored in completion,
;; making it more likely you will get a unique match.
(setq completion-ignored-extensions
- ;; this is way way way bogus.
- ;; completely wtf?
- ;; the only things that should be here are those that are
- ;; (a) universally recognizable, and
- ;; (b) obvious backup files, or
- ;; (c) obvious binary files that are generated on a
- ;; PER-SOURCE-FILE basis, so that they will actually
- ;; cause annoyance. This includes .exe files, e.g.
+ ;; this is way way way bogus.
+ ;; completely wtf?
+ ;; the only things that should be here are those that are
+ ;; (a) universally recognizable, and
+ ;; (b) obvious backup files, or
+ ;; (c) obvious binary files that are generated on a
+ ;; PER-SOURCE-FILE basis, so that they will actually
+ ;; cause annoyance. This excludes executables (.exe, .com)
+ ;; and libraries (.a, .lib, .dll).
; '(".o" ".elc" "~" ".bin" ".lbin" ".fasl"
; ".dvi" ".toc" ;".log"
; ".aux" ".a" ".ln"
; ".diff" ".oi" ".class")))
'(".o" ".obj" ".elc" "~"
".bin" ".lbin" ;; #### these are doubtful, esp. the latter.
- ".dvi";; possibly doubtful, too.
+ ".dvi" ;; possibly doubtful, too.
".class"))
\f
;;; Code:
-(defun menu-truncate-list (list n)
- (if (<= (length list) n)
- list
- (butlast list (- (length list) n))))
+(defun Menubar-items-truncate-list (list n)
+ (mapcar #'(lambda (x)
+ (if (<= (length x) 50) x (concat "..." (substring x -50))))
+ (if (<= (length list) n)
+ list
+ (butlast list (- (length list) n)))))
(defun submenu-generate-accelerator-spec (list &optional omit-chars-list)
"Add auto-generated accelerator specifications to a submenu.
(mapcar #'(lambda (string)
(vector string
(list 'grep string)))
- (menu-truncate-list grep-history 10)))))
+ (Menubar-items-truncate-list grep-history 10)))))
(append menu '("---") items))))
["%_Grep..." grep :active (fboundp 'grep)]
["%_Kill Grep" kill-compilation
(mapcar #'(lambda (string)
(vector string
(list 'compile string)))
- (menu-truncate-list compile-history 10)))))
+ (Menubar-items-truncate-list compile-history 10)))))
(append menu '("---") items))))
["%_Compile..." compile :active (fboundp 'compile)]
["%_Repeat Compilation" recompile :active (fboundp 'recompile)]
+2001-04-14 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.2.47 "Zephir" is released.
+
+2001-03-30 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * ChangeLog: Restore logs lost in the GTK merge.
+
2001-03-21 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.46 "Urania" is released.
+2001-03-15 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * xlwradio.c: Revert gratuitous whitespace changes from GTK merge.
+
+2001-02-23 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.45 "Thelxepeia" is released.
+
+2001-02-16 Raymond Toy <toy@rtp.ericsson.se>
+
+ * lwlib-Xaw.c: Always include ATHENA_AsciiText_h_ to get the
+ text-field widget.
+ (xaw_creation_table): Always include the text-field widget
+
+2001-02-08 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.44 "Thalia" is released.
+
+2001-02-06 Martin Buchholz <martin@xemacs.org>
+
+ * xlwgauge.c:
+ * xlwgcs.c:
+ * xlwgcs.c (XtAllocateGC): Fix typo for X11R4.
+ * xlwgcs.h:
+ * xlwradio.c (RadioExpose):
+ * xlwcheckbox.c:
+ Remove use of BSD-specific types.
+ s/u_(char|short|int_long)/unsigned $1/g
+
+2001-02-05 Martin Buchholz <martin@xemacs.org>
+
+ * lwlib-Xm.c (xm_update_one_value):
+ Obey the man page; use XtFree instead of free.
+
+2001-02-02 Martin Buchholz <martin@xemacs.org>
+
+ * config.h.in: Use "..." to include config.h
+
+2001-01-26 Martin Buchholz <martin@xemacs.org>
+
+ * XEmacs 21.2.43 "Terspichore" is released.
+
2001-01-20 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.42 "Poseidon" is released.
+2001-04-14 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.2.47 "Zephir" is released.
+
+2001-03-30 Ben Wing <ben@xemacs.org>
+
+ * internals\internals.texi:
+ * internals\internals.texi (Top):
+ * internals\internals.texi (Lucid Emacs):
+ * internals\internals.texi (XEmacs):
+ * internals\internals.texi (XEmacs From the Outside):
+ Bump version to 1.4 and fix this everywhere. Document all
+ XEmacs releases up through 21.2.46.
+
+2001-03-16 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * lispref/postgresql.texi (libpq Lisp Symbols and DataTypes): Save
+ result of INSERT in R in pq-cmd-status example.
+
2001-03-21 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.46 "Urania" is released.
@setfilename ../info/info.info
@settitle Info
@comment %**end of header
-@comment $Id: info.texi,v 1.4.2.6 2000/11/29 08:27:28 stephent Exp $
+@comment $Id: info.texi,v 1.8 2001/04/12 18:22:00 michaels Exp $
@dircategory Texinfo documentation system
@direntry
@titlepage
@title XEmacs Internals Manual
-@subtitle Version 1.3, August 1999
+@subtitle Version 1.4, March 2001
@author Ben Wing
@author Martin Buchholz
@vskip 0pt plus 1fill
@noindent
-Copyright @copyright{} 1992 - 1996 Ben Wing. @*
+Copyright @copyright{} 1992 - 1996, 2001 Ben Wing. @*
Copyright @copyright{} 1996, 1997 Sun Microsystems, Inc. @*
Copyright @copyright{} 1994 - 1998 Free Software Foundation. @*
Copyright @copyright{} 1994, 1995 Board of Trustees, University of Illinois.
@sp 2
-Version 1.3 @*
-August 1999.@*
+Version 1.4 @*
+March 2001.@*
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@node Top, A History of Emacs, (dir), (dir)
@ifinfo
-This Info file contains v1.3 of the XEmacs Internals Manual, August 1999.
+This Info file contains v1.4 of the XEmacs Internals Manual, March 2001.
@end ifinfo
@menu
and Eric Benson, and the work was later taken over by Jamie Zawinski,
who became ``Mr. Lucid Emacs'' for many releases.
- A time line for Lucid Emacs/XEmacs is
+ A time line for Lucid Emacs is
@itemize @bullet
@item
@item
version 20.3 (the first stable version of XEmacs 20.x) released November 30,
1997.
+@item
version 20.4 released February 28, 1998.
+@item
+version 21.1.2 released May 14, 1999. (The version naming scheme was
+changed at this point: [a] the second version number is odd for stable
+versions, even for beta versions; [b] a third version number is added,
+replacing the "beta xxx" ending for beta versions and allowing for
+periodic maintenance releases for stable versions. Therefore, 21.0 was
+never "officially" released; similarly for 21.2, etc.)
+@item
+version 21.1.3 released June 26, 1999.
+@item
+version 21.1.4 released July 8, 1999.
+@item
+version 21.1.6 released August 14, 1999. (There was no 21.1.5.)
+@item
+version 21.1.7 released September 26, 1999.
+@item
+version 21.1.8 released November 2, 1999.
+@item
+version 21.1.9 released February 13, 2000.
+@item
+version 21.1.10 released May 7, 2000.
+@item
+version 21.1.10a released June 24, 2000.
+@item
+version 21.1.11 released July 18, 2000.
+@item
+version 21.1.12 released August 5, 2000.
+@item
+version 21.1.13 released January 7, 2001.
+@item
+version 21.1.14 released January 27, 2001.
@end itemize
@node GNU Emacs 19
A more detailed history is contained in the XEmacs About page.
+ A time line for XEmacs is
+
+@itemize @bullet
+@item
+version 19.11 (first XEmacs) released September 13, 1994.
+@item
+version 19.12 released June 23, 1995.
+@item
+version 19.13 released September 1, 1995.
+@item
+version 19.14 released June 23, 1996.
+@item
+version 20.0 released February 9, 1997.
+@item
+version 19.15 released March 28, 1997.
+@item
+version 20.1 (not released to the net) April 15, 1997.
+@item
+version 20.2 released May 16, 1997.
+@item
+version 19.16 released October 31, 1997.
+@item
+version 20.3 (the first stable version of XEmacs 20.x) released November 30,
+1997.
+@item
+version 20.4 released February 28, 1998.
+@item
+version 21.0.60 released December 10, 1998. (The version naming scheme was
+changed at this point: [a] the second version number is odd for stable
+versions, even for beta versions; [b] a third version number is added,
+replacing the "beta xxx" ending for beta versions and allowing for
+periodic maintenance releases for stable versions. Therefore, 21.0 was
+never "officially" released; similarly for 21.2, etc.)
+@item
+version 21.0.61 released January 4, 1999.
+@item
+version 21.0.63 released February 3, 1999.
+@item
+version 21.0.64 released March 1, 1999.
+@item
+version 21.0.65 released March 5, 1999.
+@item
+version 21.0.66 released March 12, 1999.
+@item
+version 21.0.67 released March 25, 1999.
+@item
+version 21.1.2 released May 14, 1999. (This is the followup to 21.0.67.
+The second version number was bumped to indicate the beginning of the
+"stable" series.)
+@item
+version 21.1.3 released June 26, 1999.
+@item
+version 21.1.4 released July 8, 1999.
+@item
+version 21.1.6 released August 14, 1999. (There was no 21.1.5.)
+@item
+version 21.1.7 released September 26, 1999.
+@item
+version 21.1.8 released November 2, 1999.
+@item
+version 21.1.9 released February 13, 2000.
+@item
+version 21.1.10 released May 7, 2000.
+@item
+version 21.1.10a released June 24, 2000.
+@item
+version 21.1.11 released July 18, 2000.
+@item
+version 21.1.12 released August 5, 2000.
+@item
+version 21.1.13 released January 7, 2001.
+@item
+version 21.1.14 released January 27, 2001.
+@item
+version 21.2.9 released February 3, 1999.
+@item
+version 21.2.10 released February 5, 1999.
+@item
+version 21.2.11 released March 1, 1999.
+@item
+version 21.2.12 released March 5, 1999.
+@item
+version 21.2.13 released March 12, 1999.
+@item
+version 21.2.14 released May 14, 1999.
+@item
+version 21.2.15 released June 4, 1999.
+@item
+version 21.2.16 released June 11, 1999.
+@item
+version 21.2.17 released June 22, 1999.
+@item
+version 21.2.18 released July 14, 1999.
+@item
+version 21.2.19 released July 30, 1999.
+@item
+version 21.2.20 released November 10, 1999.
+@item
+version 21.2.21 released November 28, 1999.
+@item
+version 21.2.22 released November 29, 1999.
+@item
+version 21.2.23 released December 7, 1999.
+@item
+version 21.2.24 released December 14, 1999.
+@item
+version 21.2.25 released December 24, 1999.
+@item
+version 21.2.26 released December 31, 1999.
+@item
+version 21.2.27 released January 18, 2000.
+@item
+version 21.2.28 released February 7, 2000.
+@item
+version 21.2.29 released February 16, 2000.
+@item
+version 21.2.30 released February 21, 2000.
+@item
+version 21.2.31 released February 23, 2000.
+@item
+version 21.2.32 released March 20, 2000.
+@item
+version 21.2.33 released May 1, 2000.
+@item
+version 21.2.34 released May 28, 2000.
+@item
+version 21.2.35 released July 19, 2000.
+@item
+version 21.2.36 released October 4, 2000.
+@item
+version 21.2.37 released November 14, 2000.
+@item
+version 21.2.38 released December 5, 2000.
+@item
+version 21.2.39 released December 31, 2000.
+@item
+version 21.2.40 released January 8, 2001.
+@item
+version 21.2.41 released January 17, 2001.
+@item
+version 21.2.42 released January 20, 2001.
+@item
+version 21.2.43 released January 26, 2001.
+@item
+version 21.2.44 released February 8, 2001.
+@item
+version 21.2.45 released February 23, 2001.
+@item
+version 21.2.46 released March 21, 2001.
+@end itemize
+
@node XEmacs From the Outside, The Lisp Language, A History of Emacs, Top
@chapter XEmacs From the Outside
@cindex XEmacs from the outside
\input texinfo.tex @c -*-texinfo-*-
-@c $Id: texinfo.texi,v 1.8.2.7 2001/01/09 20:52:53 adrian Exp $
+@c $Id: texinfo.texi,v 1.14 2001/04/12 18:22:02 michaels Exp $
@c %**start of header
@c All text is ignored before the setfilename.
@finalout
@titlepage
@title XEmacs FAQ
-@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2001/03/08 08:19:10 $
+@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2001/04/12 18:22:04 $
@sp 1
@author Tony Rossini <rossini@@biostat.washington.edu>
@author Ben Wing <ben@@xemacs.org>
+2001-04-14 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.2.47 "Zephir" is released.
+
+2001-03-14 Craig Lanning <CraigL@Knology.net>
+
+ * minitar.c: Clean up some compiler warnings.
+
2001-03-21 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.46 "Urania" is released.
#include <stdio.h>
#include <errno.h>
+#include <string.h>
+#include <io.h>
#include <zlib.h>
+static int
Usage(char *name)
{
fprintf(stderr,"Usage: %s file.tar.gz [base-dir]\n",name);
#define BLOCKSIZE 512
#define MAXNAMELEN 1024
-int octal(char *str)
+static int
+octal(char *str)
{
int ret = -1;
sscanf(str,"%o",&ret);
the final component is assumed to be a file, rather than a
path component, so it is not created as a directory */
-int makepath(char *path)
+static int
+makepath(char *path)
{
char tmp[MAXNAMELEN];
char *cp;
tmp[cp-path] = '\0';
if (strlen(tmp) == 0)
continue;
+#ifdef WIN32_NATIVE
+ if (mkdir(tmp)){
+#else
if (mkdir(tmp,0777)){
+#endif
if (errno == EEXIST)
continue;
else
+int
main(int argc, char **argv)
{
char fullname[MAXNAMELEN];
char *basedir = ".";
char *tarfile;
- char *cp;
int size;
char osize[13];
char name[101];
return Qnil;
}
+/* #### If the Lisp function being called does a puthash and this
+ #### causes the hash table to be resized, the results will be quite
+ #### random and we will likely crash. To fix this, either set a
+ #### flag in the hash table while we're mapping and signal an error
+ #### when new entries are added, or fix things to make this
+ #### operation work properly, like this: Store two hash tables in
+ #### each hash table object -- the second one is written to when
+ #### you do a puthash inside of a mapping operation, and the
+ #### various operations need to check both hash tables for entries.
+ #### As soon as the last maphash over a particular hash table
+ #### object terminates, the entries in the second table are added
+ #### to the first (using an unwind-protect). --ben */
+
/* Map *C* function FUNCTION over the elements of a lisp hash table. */
void
elisp_maphash (maphash_function_t function,
int delta = (short) HIWORD (wParam); /* Wheel rotation amount */
struct gcpro gcpro1, gcpro2;
- if (mswindows_handle_mousewheel_event (mswindows_find_frame (hwnd), keys, delta))
+ if (mswindows_handle_mousewheel_event (mswindows_find_frame (hwnd),
+ keys, delta,
+ MAKEPOINTS (lParam)))
{
GCPRO2 (emacs_event, fobj);
mswindows_pump_outstanding_events (); /* Can GC */
hwnd = CreateWindowEx (exstyle,
XEMACS_CLASS,
- STRINGP(f->name) ? XSTRING_DATA(f->name) :
- (STRINGP(name) ?
- (const Extbyte*)XSTRING_DATA(name) :
- (const Extbyte*)XEMACS_CLASS),
+ STRINGP (f->name) ? (LPCTSTR) XSTRING_DATA (f->name) :
+ (STRINGP (name) ? (LPCTSTR) XSTRING_DATA (name) :
+ XEMACS_CLASS),
style,
rect_default.left, rect_default.top,
rect_default.width, rect_default.height,
(function, keymap, sort_first))
{
/* This function can GC */
- struct gcpro gcpro1, gcpro2;
+ struct gcpro gcpro1, gcpro2, gcpro3;
+ Lisp_Object table = Qnil;
/* tolerate obviously transposed args */
if (!NILP (Fkeymapp (function)))
function = keymap;
keymap = tmp;
}
- GCPRO2 (function, keymap);
+
+ GCPRO3 (function, keymap, table);
keymap = get_keymap (keymap, 1, 1);
- map_keymap (XKEYMAP (keymap)->table, !NILP (sort_first),
+
+ /* elisp_maphash does not allow mapping functions to modify the hash
+ table being mapped over. Since map-keymap explicitly allows a
+ mapping function to modify KEYMAP, we map over a copy of the hash
+ table instead. */
+ table = Fcopy_hash_table (XKEYMAP (keymap)->table);
+
+ map_keymap (table, !NILP (sort_first),
map_keymap_mapper, LISP_TO_VOID (function));
UNGCPRO;
return Qnil;
*/ );
Fprovide (intern ("menubar"));
+ Fprovide (intern ("menu-accelerator-support"));
}
void
# endif /* CYGWIN_VERSION_DLL_MAJOR <= 20 */
/* Still left out of 1.1! */
-double logb (double);
+double logb (double);
+int killpg (int pgrp, int sig);
#endif
}
static int
-can_scroll(struct scrollbar_instance* scrollbar)
+can_scroll (struct scrollbar_instance* scrollbar)
{
return scrollbar != NULL
&& IsWindowVisible (SCROLLBAR_MSW_HANDLE (scrollbar))
}
int
-mswindows_handle_mousewheel_event (Lisp_Object frame, int keys, int delta)
+mswindows_handle_mousewheel_event (Lisp_Object frame, int keys, int delta,
+ POINTS where)
{
int hasVertBar, hasHorzBar; /* Indicates presence of scroll bars */
unsigned wheelScrollLines = 0; /* Number of lines per wheel notch */
+ Lisp_Object win;
+ struct window_mirror *mirror;
+ POINT donde_esta;
- /* Find the currently selected window */
- Lisp_Object win = FRAME_SELECTED_WINDOW (XFRAME (frame));
- struct window* w = XWINDOW (win);
- struct window_mirror* mirror = find_window_mirror (w);
+ donde_esta.x = where.x;
+ donde_esta.y = where.y;
+
+ ScreenToClient (FRAME_MSWINDOWS_HANDLE (XFRAME (frame)), &donde_esta);
+
+ /* Find the window to scroll */
+ {
+ int mene, _mene, tekel, upharsin;
+ Bufpos mens, sana;
+ Charcount in;
+ Lisp_Object corpore, sano;
+ struct window *needle_in_haystack;
+
+ // stderr_out ("donde_esta: %d %d\n", donde_esta.x, donde_esta.y);
+ pixel_to_glyph_translation (XFRAME (frame), donde_esta.x, donde_esta.y,
+ &mene, &_mene, &tekel, &upharsin,
+ &needle_in_haystack,
+ &mens, &sana, &in, &corpore, &sano);
+
+ if (needle_in_haystack)
+ {
+ XSETWINDOW (win, needle_in_haystack);
+ // stderr_out ("found needle\n");
+ // debug_print (win);
+ }
+ else
+ {
+ win = FRAME_SELECTED_WINDOW (XFRAME (frame));
+ needle_in_haystack = XWINDOW (win);
+ }
+
+ mirror = find_window_mirror (needle_in_haystack);
+ }
/* Check that there is something to scroll */
hasVertBar = can_scroll (mirror->scrollbar_vertical_instance);
*/
void mswindows_handle_scrollbar_event (HWND hwnd, int code, int pos);
-int mswindows_handle_mousewheel_event (Lisp_Object frame, int keys, int delta);
+int mswindows_handle_mousewheel_event (Lisp_Object frame, int keys, int delta,
+ POINTS where);
#endif /* HAVE_MS_WINDOWS and HAVE_SCROLLBARS */
#endif /* INCLUDED_scrollbar_msw_h_ */
+2001-04-14 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.2.47 "Zephir" is released.
+
+2001-03-23 Martin Buchholz <martin@xemacs.org>
+
+ * automated/lisp-tests.el:
+ Add test for mis-byte-compilation of (- 0 x).
+
2001-03-21 Martin Buchholz <martin@xemacs.org>
* XEmacs 21.2.46 "Urania" is released.
(Assert (= (- one) -1))
(Assert (= (- one one) 0))
(Assert (= (- one one one) -1))
+ (Assert (= (- 0 one) -1))
+ (Assert (= (- 0 one one) -2))
(Assert (= (+ one 1) 2))
(dolist (zero '(0 0.0 ?\0))
(Assert (= (+ 1 zero) 1))
#!/bin/sh
-emacs_is_beta=t
+emacs_is_beta=
emacs_major_version=21
emacs_minor_version=2
-emacs_beta_version=46
-xemacs_codename="Urania"
+emacs_beta_version=47
+xemacs_codename="Zephir"
infodock_major_version=4
infodock_minor_version=0
infodock_build_version=8