+2001-05-10 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released.
+
+2001-05-04 Martin Buchholz <martin@xemacs.org>
+
+ * configure.in (opsys):
+ Use lower-case `uname -s` as the default value for opsys.
+ The previous code effectively did the non-sensical
+ opsys=$canonical because [] magically disappear in configure.in.
+
+2001-01-31 Jason R. Mastaler <jason@xemacs.org>
+
+ * etc/FTP: Updated FTP mirrors list.
+
+2001-05-04 Ben Wing <ben@xemacs.org>
+
+ * etc\NEWS: Remove kill-whole-line changes.
+
+2001-04-25 Ben Wing <ben@xemacs.org>
+
+ * PROBLEMS:
+ * PROBLEMS (Note):
+ * PROBLEMS (ftp):
+ Correct general info about init file.
+ Fix up Cygwin section.
+
2001-04-19 Stephen J. Turnbull <stephen@xemacs.org>
* XEmacs 21.4.1 "Copyleft" is released.
Also, Try finding the things you need using one of the search commands
XEmacs provides (e.g. `C-s').
-A general advice:
- WATCH OUT for .emacs file! ~/.emacs is your Emacs init file. If
- you observe strange problems, invoke XEmacs with the `-q' option
- and see if you can repeat the problem.
+General advice:
+ WATCH OUT for your init file! (~/.xemacs/init.el or ~/.emacs) If
+ you observe strange problems, invoke XEmacs with the `-vanilla'
+ option and see if you can repeat the problem.
* Problems with building XEmacs
and later.
** Cygwin
+
*** In general use etc/check_cygwin_setup.sh to trap environment problems.
The script etc/check_cygwin_setup.sh will attempt to detect whether
you have a suitable environment for building. This script may not work
correctly if you are using ash instead of bash (see below).
+*** Syntax errors running configure scripts, make failing with exit code 127
+ in inexplicable situations, etc.
+
+This may be because you are using the default cygwin shell. The
+default cygwin shell (/bin/sh.exe) is ash which appears to work in
+most circumstances but has some weird failure modes. You need to
+replace the symlink with bash.exe.
+
+*** Lots of compile errors, esp. on lines containing macro definitions
+ terminated by backslashes.
+
+Your partition holding the source files is mounted binary. It needs
+to be mounted text. (This will not screw up any binary files because
+the Cygwin utilities specify explicitly whether they want binary or
+text mode when working with source vs. binary files, which overrides
+the mount type.) To fix this, you just need to run the appropriate
+mount command once -- afterwards, the settings are remembered in the
+registry.
+
+*** Errors from make like /c:not found.
+
+make sure you set the environment variable MAKE_MODE to UNIX in your
+.bashrc, Control Panel (Windows 2000/NT), or AUTOEXEC.BAT (Windows
+98/95).
+
*** X11 not detected.
This is usually because xmkmf is not in your path or because you are
*** Subprocesses do not work.
-You do not have "tty" in your CYGWIN32 (for b19) or CYGWIN (for b20)
-environment variable. This must be set in your autoexec.bat (win95) or
-the system properties (winnt) as it must be read before the cygwin dll
-initializes.
+You do not have "tty" in your CYGWIN environment variable. This must
+be set in your autoexec.bat (win95) or the system properties (winnt)
+as it must be read before the cygwin DLL initializes.
*** ^G does not work on hung subprocesses.
by defining BROKEN_SIGIO in src/s/cygwin32.h, however this currently
leads to instability in XEmacs.
-*** The XEmacs executable crashes at startup.
-
-This can be caused by many things.
-
-If you are running with X11 you need to have cygwin b19 or cygwin
-b20.1 or greater, cygwin b20 will not work.
-
-If you are running with cygwin b19 make sure you are using egcs 1.0.2
-rather than vanilla gcc. XEmacs builds by default with -O3 which does
-not work with the gcc that ships with b19. Alternatively use -O2.
-
*** The info files will not build.
makeinfo that ships with cygwin (all versions) is a noop. You need to
*** I have no graphics.
-You need to obtain the various graphics libraries. Pre-built versions
+You need to obtain the various graphics libraries. Pre-built versions
of these and the X libraries are located on the XEmacs website in
-ftp://ftp.xemacs.org/pub/aux/cygwin*.
+ftp://ftp.xemacs.org/pub/aux/cygwin/.
*** There are no images in the toolbar buttons.
esac
-dnl Initialize machine and opsys from $canonical if not in our database above.
+dnl Initialize machine from $canonical if not in our database above.
test -z "$machine" && machine=`echo $canonical | sed 's/-.*$//'`
-test -z "$opsys" && opsys=`echo $canonical | sed 's/^[^-]*-[^-]*-//'`
+
+dnl Initialize opsys from `uname -s` if not in our database above.
+test -z "$opsys" && opsys=`uname -s | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
dnl Use configure-time autodetection if s&m not available
if test -r "${srcdir}/src/m/${machine}.h"; then
- XEmacs availability information. Last Modified: 1999-11-08
+ XEmacs availability information. Last Modified: 2001-02-01
-XEmacs is available via anonymous FTP from ftp.xemacs.org (207.96.122.8)
-in the directory /pub/xemacs/.
+XEmacs is available via anonymous FTP at ftp://ftp.xemacs.org/pub/xemacs/
+and also via HTTP at http://ftp.xemacs.org/.
ftp.xemacs.org is the primary distribution point, but you may find
copies of it at other sites as well. Some sites to try include:
-
-* North America
- o Canada
- + ftp://ftp.crc.ca/pub/packages/editors/xemacs/
- + ftp://sunsite.ualberta.ca/pub/Mirror/xemacs/
- o United States
- + ftp://uiarchive.uiuc.edu/pub/packages/xemacs/
- + ftp://metalab.unc.edu/pub/packages/editors/xemacs/
- + ftp://ftp.sunsite.utk.edu/pub/xemacs/
+* Africa
+
+ o South Africa
+
+ + ftp.za.xemacs.org (FTP)
+ + ftp.za.xemacs.org (HTTP)
+
+* America
+
+ o North America
+
+ + Canada
+ + ftp.ca.xemacs.org (FTP)
+ + ftp.ca.xemacs.org (HTTP)
+
+ Secondary Mirrors
+ + ftp://ftp.crc.ca/pub/packages/editors/xemacs/
+
+ + United States
+
+ + ftp.us.xemacs.org (FTP)
+ + ftp.us.xemacs.org (HTTP)
+
+ Secondary Mirrors
+ + ftp://ftp.twoguys.org/pub/xemacs/
+ + ftp://ftp.stealth.net/pub/mirrors/ftp.xemacs.org/pub/xemacs/
+ + ftp://metalab.unc.edu/pub/packages/editors/xemacs/
+ + http://metalab.unc.edu/pub/packages/editors/xemacs/
+
+ o South America
+
+ + Brazil
+
+ + ftp.br.xemacs.org (FTP)
+
+* Asia
+
+ o Japan
+
+ + ftp.jp.xemacs.org (FTP)
+
+ Secondary Mirrors
+ + ftp://ftp.jaist.ac.jp/pub/GNU/xemacs/
+ + ftp://ring.aist.go.jp/pub/text/xemacs/
+ + ftp://ring.asahi-net.or.jp/pub/text/xemacs/
+ + ftp://sunsite.sut.ac.jp/pub/archives/packages/xemacs/
+ + ftp://ftp.dti.ad.jp/pub/unix/editor/xemacs/
+ + ftp://mirror.nucba.ac.jp/mirror/xemacs/
+
+ o Korea
-* South America
+ + ftp.kr.xemacs.org (FTP)
- o Brazil
- + ftp://ftp.unicamp.br/pub/xemacs/
+ o Taiwan
+
+ + ftp.tw.xemacs.org (FTP)
+ + ftp.tw.xemacs.org (HTTP)
+
+* Australia
+
+ o Queensland
+
+ + ftp.au.xemacs.org (FTP)
+ + ftp.au.xemacs.org (HTTP)
+
+ Secondary Mirrors
+ + ftp://mirror.aarnet.edu.au/pub/xemacs/
+ + http://mirror.aarnet.edu.au/pub/xemacs/
* Europe
o Austria
- + ftp://gd.tuwien.ac.at/editors/xemacs/
+
+ + ftp.at.xemacs.org (FTP)
+ + ftp.at.xemacs.org (HTTP)
+
+ o Belgium
+
+ + ftp.be.xemacs.org (FTP)
+ + ftp.be.xemacs.org (HTTP)
+
o Denmark
- + ftp://sunsite.auc.dk/pub/emacs/xemacs/
- o England
- + ftp://sunsite.doc.ic.ac.uk/packages/xemacs/
+
+ + ftp.dk.xemacs.org (FTP)
+ + ftp.dk.xemacs.org (HTTP)
+
o Finland
- + ftp://ftp.funet.fi/pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/
+
+ + ftp.fi.xemacs.org (FTP)
+ + ftp.fi.xemacs.org (HTTP)
+
o France
- + ftp://ftp.pasteur.fr/pub/computing/xemacs/
- + ftp://ftp.cenatls.cena.dgac.fr/Emacs/xemacs/
+
+ + ftp.fr.xemacs.org (FTP)
+ + ftp.fr.xemacs.org (HTTP)
+
+ Secondary Mirrors
+ + ftp://ftp.pasteur.fr/pub/computing/xemacs/
+
o Germany
- + ftp://ftp.tu-darmstadt.de/pub/editors/xemacs/
+
+ + ftp.de.xemacs.org (FTP)
+ + ftp.de.xemacs.org (HTTP)
+
+ Secondary Mirrors
+ + ftp://ftp.tu-darmstadt.de/pub/editors/xemacs/
+
o Hungary
- + ftp://ftp.kfki.hu/pub/packages/xemacs/
+
+ + ftp.hu.xemacs.org (FTP)
+ + ftp.hu.xemacs.org (HTTP)
+
o Ireland
- + ftp://ftp.eunet.ie/mirrors/ftp.xemacs.org/pub/xemacs/
+
+ + ftp.ie.xemacs.org (FTP)
+ + ftp.ie.xemacs.org (HTTP)
+
o Italy
- + ftp://ftp.uniroma2.it/unix/misc/dist/XEMACS/
+
+ + ftp.it.xemacs.org (FTP)
+ + ftp.it.xemacs.org (HTTP)
+
o Norway
- + ftp://sunsite.uio.no/pub/xemacs
+
+ + ftp.no.xemacs.org (FTP)
+ + ftp.no.xemacs.org (HTTP)
+
o Poland
- + ftp://ftp.icm.edu.pl/pub/unix/editors/xemacs/
+
+ + ftp.pl.xemacs.org (FTP)
+ + ftp.pl.xemacs.org (HTTP)
+
o Russia
- + ftp://ftp.srcc.msu.su/mirror/ftp.xemacs.org/
+
+ + ftp.ru.xemacs.org (FTP)
+ + ftp.ru.xemacs.org (HTTP)
+
+ o Slovakia
+
+ + ftp.sk.xemacs.org (FTP)
+ + ftp.sk.xemacs.org (HTTP)
+
o Sweden
- + ftp://ftp.sunet.se/pub/gnu/xemacs/
+
+ + ftp.se.xemacs.org (FTP)
+ + ftp.se.xemacs.org (HTTP)
+
o Switzerland
- + ftp://sunsite.cnlab-switch.ch/mirror/xemacs/
-* Asia
+ + ftp.ch.xemacs.org (FTP)
+ + ftp.ch.xemacs.org (HTTP)
- o Japan
- + ftp://ftp.netlab.is.tsukuba.ac.jp/pub/GNU/xemacs/
- + ftp://ftp.jaist.ac.jp/pub/GNU/xemacs/
- + ftp://ring.aist.go.jp/pub/text/xemacs/
- + ftp://ring.asahi-net.or.jp/pub/text/xemacs/
- + ftp://sunsite.sut.ac.jp/pub/archives/packages/xemacs/
- + ftp://ftp.dti.ad.jp/pub/unix/editor/xemacs/
- + ftp://mirror.nucba.ac.jp/mirror/xemacs/
- o Korea
- + ftp://ftp.kreonet.re.kr/pub/tools/emacs/xemacs/
- o Taiwan
- + ftp://coda.nctu.edu.tw/Editors/xemacs/
+ o United Kingdom
-* Africa
+ + ftp.uk.xemacs.org (FTP)
+ + ftp.uk.xemacs.org (HTTP)
- o South Africa
- + ftp://ftp.sun.ac.za/xemacs/
+ Secondary Mirrors
+ + ftp://sunsite.doc.ic.ac.uk/packages/xemacs/
+ + http://sunsite.doc.ic.ac.uk/packages/xemacs/
* Middle East
o Saudi Arabia
- + ftp://ftp.isu.net.sa/pub/mirrors/ftp.xemacs.org/
-
-* Australia
- o ftp://mirror.aarnet.edu.au/pub/xemacs
+ + ftp.sa.xemacs.org (FTP)
+ + ftp.sa.xemacs.org (HTTP)
The most up-to-date list of distribution sites can always be found on
-the XEmacs WWW page, http://www.xemacs.org/. Try to pick a site that
-is networkologically close to you. If you know of other mirrors of
-the XEmacs archives, please send us mail and we will list them here as
-well.
+the XEmacs WWW page at http://www.xemacs.org/Download/. Try to pick a
+site that is networkologically close to you. If you know of other
+mirrors of the XEmacs archives, please send e-mail to
+<webmaster@xemacs.org> and we will list them here as well.
There are mailing lists and newsgroups specifically for discussing and
reporting bugs in XEmacs; see the file MAILINGLISTS in this directory.
-- New locations for early package hierarchies.
-- The `auto-save' library has been greatly improved.
-- New variable `mswindows-alt-by-itself-activates-menu'.
- -- The variable `kill-whole-line' now only takes effect interactively.
-- Other init-file-related changes.
- Init file in your home directory may be called `.emacs.el'.
- New command-line switches -user-init-file and -user-init-directory.
which enables the use of Alt+<Letter> accelerators to invoke the
menus.
-** The variable `kill-whole-line' now only takes effect interactively.
-
-(This variable controls the behavior of `kill-line'.) 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.
-
** Other init-file-related changes.
*** Init file in your home directory may be called `.emacs.el'.
+2001-05-10 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released.
+
+2001-04-20 Ben Wing <ben@xemacs.org>
+
+ * .cvsignore: Added stuff for Windows.
+
2001-04-19 Stephen J. Turnbull <stephen@xemacs.org>
* XEmacs 21.4.1 "Copyleft" is released.
+2001-05-10 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released.
+
+2001-05-04 Ben Wing <ben@xemacs.org>
+
+ * printer.el (generic-print-buffer):
+ * printer.el (generic-print-region):
+ Enable dialog boxes. Apply workaround recommended by Kirill.
+ fix (fboundp 'lpr-buffer) -> (fboundp 'lpr-region).
+
+ * simple.el (kill-whole-line):
+ * simple.el (kill-line-1):
+ * simple.el (kill-entire-line):
+ * simple.el (kill-line):
+ * simple.el (backward-kill-line):
+ Take out interactive dependence of kill-whole-line.
+
+2001-04-22 Ben Wing <ben@xemacs.org>
+
+ * dialog.el (make-dialog-box):
+ Put dialog titles back in -- this time correctly. Fix various
+ other problems with leaks and such.
+
+ * simple.el (region-exists-p):
+ * simple.el (region-active-p):
+ Add comment about which one is correct to use in menu specs.
+
+2001-05-05 Ben Wing <ben@xemacs.org>
+
+ * dialog.el (make-dialog-box): fix doc string.
+ * menubar-items.el (default-menubar): Add Page Setup for Windows,
+ take out Pretty Print.
+ * printer.el:
+ * printer.el (printer-current-device): New.
+ * printer.el (Printer-get-device): New.
+ * printer.el (Printer-clear-device): New.
+ * printer.el (generic-page-setup): New.
+ * printer.el (generic-print-buffer):
+ * printer.el (generic-print-region):
+ Implement Page Setup. Handle errors properly.
+
+2001-05-05 Ben Wing <ben@xemacs.org>
+
+ * subr.el (error): Complete list of errors in doc string.
+
+2001-04-22 Ben Wing <ben@xemacs.org>
+
+ * bytecomp-runtime.el (byte-compiler-options): Correct doc string.
+
+2001-05-03 Adrian Aichner <adrian@xemacs.org>
+
+ * build-report.el: Remove CVS keywords since this file has been in
+ core lisp for a while now.
+ * build-report.el (build-report-make-output-files): Fix typo.
+
+2001-04-24 Hrvoje Niksic <hniksic@arsdigita.com>
+
+ * about.el (about-finish-buffer): Make sure the last change works
+ even if EVENT is nil.
+
+2001-04-24 Hrvoje Niksic <hniksic@arsdigita.com>
+
+ * about.el (about-finish-buffer): Kill/bury the buffer where the user
+ clicked, not the one that happens to be the current buffer at the
+ time.
+
+2001-03-19 Karl M. Hegbloom <karlheg@microsharp.com>
+
+ * cus-edit.el (custom-display): Support the GTK Window System also.
+
+2001-04-30 Ben Wing <ben@xemacs.org>
+
+ * printer.el:
+ * printer.el (printer-page-header):
+ * printer.el (Print-context): New.
+ * printer.el (printer-page-footer):
+ * printer.el (generate-header-element): New.
+ * printer.el (generate-header-line): New.
+ * printer.el (print-context-property):
+ * printer.el (generic-print-buffer):
+ * printer.el (generic-print-region):
+ Implement headers and footers. Implement calling Print dialog box
+ (#### but it doesn't quite work yet).
+
+2001-04-25 Ben Wing <ben@xemacs.org>
+
+ * about.el (xemacs-hackers):
+ * about.el (about-url-alist):
+ * about.el (about-personal-info):
+ * about.el (about-hacker-contribution):
+ More contributions.
+
+ * simple.el (handle-post-motion-command):
+ Fix spurious setting of zmacs-region-stays to t after a non-shift
+ motion command.
+
+2001-04-24 Hrvoje Niksic <hniksic@arsdigita.com>
+
+ * about.el (about-personal-info): Update my bio.
+ (about-hacker-contribution): Ditto.
+
+2001-04-23 Stephen J. Turnbull <turnbull@sk.tsukuba.ac.jp>
+
+ * startup.el (splash-frame-body): Update copyright notices: Ben, FSF.
+
+2001-04-19 Andy Piper <andy@xemacs.org>
+
+ * package-net.el (package-net-cygwin32-binary-size): new size.
+ (package-net-win32-binary-size): new size.
+ (package-net-convert-index-to-ini): Use new arch.
+ (package-net-batch-convert-index-to-ini): Removed.
+ (package-net-generate-bin-ini): New.
+ (package-net-batch-generate-bin-ini): New.
+
2001-04-19 Stephen J. Turnbull <stephen@xemacs.org>
* XEmacs 21.4.1 "Copyleft" is released.
(rose "John Rose" "rose@xemacs.org")
(rossini "Anthony Rossini" "rossini@xemacs.org")
(slb "Steve Baur" "steve@xemacs.org")
- (sperber "Michael Sperber" "sperber@xemacs.org")
+ (sperber "Michael Sperber" "mike@xemacs.org")
(stig "Jonathan Stigelman" "stig@xemacs.org")
(stigb "Stig Bjorlykke" "stigb@xemacs.org")
(thiessel "Marcus Thiessel" "marcus@xemacs.org")
;; to sort the stuff below, use M-x sort-regexp-fields RET
;; ^.*$ RET (\([a-z]*\) RET
'((ajc . "http://www-personal.monash.edu.au/~ajc/")
+ (alastair . "http://website.lineone.net/~ajhoughton/")
(baw . "http://barry.wooz.org/")
(ben . "http://www.666.com/ben/")
(ben-xemacs . "http://www.xemacs.org/Architecting-XEmacs/index.html")
(stigb . "http://www.tihlde.hist.no/~stigb/")
(vin . "http://www.upa.org/")
(vladimir . "http://www.leonora.org/~vladimir/")
- (wget . "http://www.wget.org/")
- (wget-ftp . "ftp://gnjilux.cc.fer.hr/pub/unix/util/wget/")
+ (wget . "http://sunsite.dk/wget/")
(xemacs . "http://www.xemacs.org/")
(youngs . "http://eicq.sourceforge.net/"))
"Some of the more important URLs.")
nil)))
;; Set up the stuff needed by widget. Allowed types are `bury' and
-;; `kill'.
+;; `kill'. The reason why we offer both types is performance: when a
+;; large buffer is merely buried, `about' will find it again when the
+;; user requests it, instead of recreating it. Small buffers can be
+;; killed because it is cheap to generate their contents.
+
(defun about-finish-buffer (&optional type)
(or type (setq type 'bury))
(widget-insert "\n")
(if (eq type 'bury)
- (widget-create 'link :help-echo "Bury buffer"
- :action (lambda (&rest ignore)
- (bury-buffer))
- "Remove")
- (widget-create 'link :help-echo "Kill buffer"
- :action (lambda (&rest ignore)
- (kill-buffer (current-buffer)))
- "Kill"))
+ (widget-create 'link
+ :help-echo "Bury this buffer"
+ :action (lambda (widget event)
+ (if event
+ ;; For some reason,
+ ;; (bury-buffer (event-buffer event))
+ ;; doesn't work.
+ (with-selected-window (event-window event)
+ (bury-buffer))
+ (bury-buffer)))
+ :tag "Bury")
+ (widget-create 'link
+ :help-echo "Kill this buffer"
+ :action (lambda (widget event)
+ (if event
+ (kill-buffer (event-buffer event))
+ (kill-buffer (current-buffer))))
+ :tag "Kill"))
(widget-insert " this buffer and return to previous.\n")
(use-local-map (make-sparse-keymap))
(set-keymap-parent (current-local-map) widget-keymap)
(alastair
(widget-insert
"\
-Sorry, no personal information available about me yet.\n"))
+Alastair, apart from being an all-round hacker, occasional contributor
+to free software projects and general good egg(!), currently works for
+Telsis, a manufacturer of telephony equipment on the south coast of
+England. He'd quite like to have his own company one day, but has yet
+to think of that killer product...
+
+See also ")
+ (about-url-link 'alastair nil "Visit Alastair's home page")
+ (widget-insert ".\n"))
(baw
(widget-insert "\
As of November 2000, I am a software engineer with the Pythonlabs at
Sorry, no personal information available about me yet.\n"))
(cthomp
(widget-insert "\
-Chuck, through being in the wrong place at the right time, got stuck
-with being Jamie's replacement as the primary maintainer of XEmacs.
-This caused his hair to begin falling out and quadrupled his daily
-coffee dosage. Though he works at and for the University of Illinois
-his funding for XEmacs work actually came from Sun Microsystems.
-
-He has worked on XEmacs since November 1992, which fact occasionally
-gives him nightmares. As of October 1995, he no longer works
-full-time on XEmacs, though he does continue as an active maintainer.
-His main contributions have been the greatly enhanced redisplay
-engine, scrollbar support, the toolbars, configure support and
-numerous other features and fixes.
-
-Rumors that Chuck is aka Black Francis aka Frank Black are completely
-unfounded.\n"))
+Chuck is a senior system and network administrator for the Computer
+Science department at the Unversity of Illinois. In one previous life
+he spent every waking hour working on XEmacs. In another he dabbled
+as a project manager for a streaming video startup (RIP). His current
+reason for not having time to contribute to XEmacs is the Thompson
+Twins.\n"))
(daiki
(about-url-link 'daiki nil "Visit Daiki's page"))
(dan
Sorry, no personal information available about me yet.\n"))
(hniksic
(widget-insert "\
-Hrvoje is a student at the Faculty of Electrical Engineering and
-Computing in Zagreb, Croatia, working part-time at system administration
-at SRCE. His hobby is hacking free software, particularly XEmacs and
-GNU Wget, the latter being his very own creation.
-
-For info on Wget, see ")
- (about-url-link 'wget nil "Visit the Wget web page")
- (widget-insert " or\n")
- (about-url-link 'wget-ftp nil "Visit the Wget ftp page")
- (widget-insert ".\n"))
+Hrvoje thinks he works in the server-side web business. In reality,
+he cranks out huge quantities of HTML, Tcl, and Java for the German
+branch of ")
+ (about-url-link "http://www.arsdigita.com/"
+ "ArsDigita, Inc." "www.arsdigita.com")
+ ;; Avoid literal I18N characters in strings. *Displaying* a
+ ;; Latin 1 character should always be safe, though, with or
+ ;; without Mule.
+ (let ((muenchen (format "M%cnchen" (make-char 'latin-iso8859-1 252))))
+ (widget-insert (format "\
+ He joined the ranks of Gastarbeiters only
+recently; he is trying to learn German and get attuned to %s
+and Bav^H^H^HGermany.\n" muenchen)))
+
+ (widget-insert "\
+
+Before ArsDigita, he worked as a programmer at ")
+ (about-url-link "http://www.iskon.hr/" "Iskon," "www.iskon.hr")
+ (widget-insert " a fast-growing
+Croatian ISP. Even before that, he worked part-time for academic
+institutions like ")
+ (about-url-link "http://www.srce.hr/" "SRCE" "www.srce.hr")
+ (widget-insert " and ")
+ (about-url-link "http://www.carnet.hr/" "CARNet," "www.carnet.hr")
+ (widget-insert " and tried to attend university.
+
+He takes perverse pleasure in building and maintaining free software
+in his free time. Apart from XEmacs, his major contribution is ")
+ (about-url-link 'wget "Wget," "Wget home page")
+ (widget-insert "
+his very own creation, now jointly maintained by a happy crew.
+
+He dreams of having a home page.\n"))
(hobley
(widget-insert "\
I used to do real work, but now I am a Project Manager for one of the
(widget-insert ".\n"))
(jens
(widget-insert "\
-I'm currently working at the University of Karlsruhe, Germany on
-getting my diploma thesis on Supersymmetry (uuh, that's physics) done.
-After that (and all the remaining exams) I'm looking forward to make a
-living out of my hobbies -- computers (and graphics). But because I
-have no deadline for the exams and XEmacs betas are released at a high
-rate this may take some time...\n"))
+I'm currently working for 1&1 Internet AG, a large Domain and Webspace
+Provider in Germany and Europe. I do mostly Java/XML/OO/Component
+stuff today. I'm interested EJB, Corba and other middleware or
+distributed Systems. Besides work, I occasionally hack on The Gimp
+and other gtk/gnome related projects. Maybe the advent of XEmacs/Gtk
+will get me back to spend some time again hacking on XEmacs in the
+near future.\n"))
(jmiller
(widget-insert "\
Jeff grew up in Indiana and is a country boy at heart. He currently
"\
Sorry, no personal information available about me yet.\n"))
(oscar
- (widget-insert
- "\
-Sorry, no personal information available about me yet.\n"))
+ (widget-insert "\
+Oscar heads the Computer Science department at CPE Lyon, a french
+engineering school in France. Besides his administrative tasks he
+teaches networking basics, Internet technologies (you know, all these
+xxML and hairy script languages !) and the Scheme language.\n"))
(pelegri
(widget-insert
"\
Sorry, no personal information available about me yet.\n"))
(rickc
(widget-insert "\
-The hacker formerly known as Rick Busdiecker develops and maintains
-libraries for financial applications at Lehman Brothers during
-daylight hours. In the evenings he maintains three children, and
-when he ought to be sleeping he co-maintains ILISP, builds XEmacs
-betas, and tinkers with various personal hacking projects.\n"))
+The hacker formerly known as Rick Busdiecker is a developer and
+technical manager at Deutsche Bank in New York during daylight hours.
+In the evenings he maintains three children, and when he ought to be
+sleeping he builds XEmacs betas, and tinkers with various personal
+hacking projects.\n"))
(rose
(widget-insert
"\
(widget-insert ".\n"))
(wmperry
(widget-insert "\
-Currently working at Aventail, Corp. on SOCKS v5 servers.\n"))
+Happily living in Indiana telecommuting for a company based in Seattle
+\(who I now prefer not to name), wishing I was in Ireland instead.\n"))
(yoshiki
(widget-insert
"\
(widget-insert
"\
Maintainer of XEmacs from mid-1994 through 1996. Author of the
-redisplay engine and some of the device-abstraction, TTY and glyph
-code. Creator of the xemacs.org domain.\n"))
+redisplay engine, the original toolbar and scrollbars and some of the
+device-abstraction, TTY and glyph code. Creator of the xemacs.org
+domain and comp.emacs.xemacs.\n"))
(daiki
(widget-insert
"\
(hniksic
(widget-insert
"\
-Hrvoje's contribution to XEmacs consists of a multitude of hours spent
-adding new features and bugs, and fixing old ones. He dreams of
-writing a home page.\n"))
+Hrvoje's contribution to XEmacs consists of many hours spent working
+on code and taking part in public discussions.
+
+He wrote `savehist' and `htmlize' packages, the latter having a pretty
+large gathering of users. He worked to improve many parts of XEmacs
+Lisp code, including isearch (FSF synch and new features), cl, edmacro
+\(FSF synch and an almost complete rewrite), profile, gnuserv,
+hyper-apropos, etags, about, and custom.
+
+He has worked on improving and optimizing the C core. He ported many
+FSF core features such as indirect buffers, tty-erase-char,
+save-current-buffer and friends, debug-ignored-errors, etc. He also
+wrote line numbering optimizations for large buffers, initial support
+for TTY frames, abbrev improvements, Lisp printer and reader
+improvements, support for extent modification functions, and lots of
+minor bugfixes, optimizations, and Muleifications.
+
+He contributed to Lispref and Internals documentation, including a
+section on writing Mule-compliant C code. Maintains NEWS. He
+participated on xemacs-beta since 1996 and on the Patch Review Board
+since its inception in 1998.\n"))
(hobley
(widget-insert
"\
kit manager. Also, originator and maintainer of the gnus.org domain.\n"))
(jens
(widget-insert "\
-Jens did the artwork for graphics added to XEmacs 20.2 and 19.15.\n"))
+Jens did the artwork for graphics added to XEmacs 20.2 and 19.15. He's
+also the author of \"XEmacs Mine\", a game similar to Minesweeper, but
+running in XEmacs\n"))
(jmiller
(widget-insert "\
Beta tester and last hacker of calendar.\n"))
"\
Author of the portable dumper.\n"))
(oscar
- (widget-insert
- "\
-Author of the LDAP support in XEmacs.\n"))
+ (widget-insert "\
+Oscar's major contributions to XEmacs are the internal LDAP support
+and the EUDC package, an interface to query various directory services
+in a uniform manner (when composing mail for instance).\n"))
(pelegri
(widget-insert "\
Author of EOS, a package included in the standard XEmacs distribution
;;; build-report.el --- Automatically formatted build reports for XEmacs
-;; Copyright (C) 1997 Adrian Aichner
+;; Copyright (C) 1997-2001 Adrian Aichner
;; Author: Adrian Aichner <adrian@xemacs.org>
-;; Date: Sun., Apr. 20, 1997-2000.
-;; Version: $Revision: 1.8 $
;; Keywords: internal
;; This file is part of XEmacs.
alias mk 'make \!* >>&\! \!$.err &'
-under csh, so that you get beta.err went you run `mk beta'."
+under csh, so that you get beta.err when you run `mk beta'."
:type '(repeat
:custom-show t
:documentation-shown t
:sibling-args (:help-echo "\
The X11 Window System")
x)
+ (const :format "GTK "
+ :sibling-args (:help-echo "\
+The GTK Window System")
+ gtk)
(const :format "PM "
:sibling-args (:help-echo "\
OS/2 Presentation Manager")
Exactly one of these keywords must be given.
The function brings up the Print dialog, where the user can
-select a different printer and/or change printer options. Connection
+select a different printer and/or change printer options. Connection
name can change as a result of selecting a different printer device. If
-a printer is specified, then changes are stored into the settings object
+a device is specified, then changes are stored into the settings object
currently selected into that printer. If a settings object is supplied,
then changes are recorded into it, and, it it is selected into a
printer, then changes are propagated to that printer
For type `page-setup':
This invokes the Windows standard Page Setup dialog.
-This dialog is usually invoked in response to the Page Setup command, and
-used to choose such parameters as page orientation, print margins etc.
-Note that this dialog contains the \"Printer\" button, which invokes
-the Printer Setup dialog (see `msprinter-print-setup-dialog') so that the
-user can update the printer options or even select a different printer
-as well.
+This dialog is usually invoked in response to the Page Setup command,
+and used to choose such parameters as page orientation, print margins
+etc. Note that this dialog contains the \"Printer\" button, which
+invokes the Printer Setup dialog so that the user can update the
+printer options or even select a different printer as well.
The keywords allowed are
The function brings up the Page Setup dialog, where the user
can select a different printer and/or change printer options.
Connection name can change as a result of selecting a different printer
-device. If a printer is specified, then changes are stored into the
+device. If a device is specified, then changes are stored into the
settings object currently selected into that printer. If a settings
object is supplied, then changes are recorded into it, and, it it is
selected into a printer, then changes are propagated to that printer
Return value is nil if the user has canceled the dialog. Otherwise,
it is a new plist, containing the new list of properties.
+NOTE: The margin properties (returned by this function) are *NOT* stored
+into the print-settings or device object.
+
The DEVICE is destroyed and an error is signaled in case of
initialization problem with the new printer.
(let ((newbuf (generate-new-buffer " *dialog box*")))
(set-buffer-dedicated-frame newbuf frame)
(set-frame-property frame 'dialog-box-buffer newbuf)
+ (set-window-buffer (frame-root-window frame) newbuf)
(with-current-buffer newbuf
- ;; 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)
- (kill-buffer
- (frame-property
- frame
- 'dialog-box-buffer))))))
+ (set (make-local-variable 'frame-title-format)
+ cl-title)
+ (add-local-hook 'delete-frame-hook
+ #'(lambda (frame)
+ (kill-buffer
+ (frame-property
+ frame
+ 'dialog-box-buffer))))))
frame)))
(if cl-modal
(dialog-box-modal-loop '(create-dialog-box-frame))
["Save %_As..." write-file]
["Save So%_me Buffers" save-some-buffers]
"-----"
+ ,@(if (eq system-type 'windows-nt)
+ '(["Page Set%_up..." generic-page-setup]))
["%_Print" generic-print-buffer
:active (or (valid-specifier-tag-p 'msprinter)
(and (not (eq system-type 'windows-nt))
- (fboundp 'lpr-buffer)))
+ (fboundp 'lpr-region)))
:suffix (if put-buffer-names-in-file-menu (concat (buffer-name) "...")
"...")]
- ["Prett%_y-Print" ps-print-buffer-with-faces
- :active (fboundp 'ps-print-buffer-with-faces)
- :suffix (if put-buffer-names-in-file-menu (buffer-name) "")]
+ ,@(unless (eq system-type 'windows-nt)
+ '(["Prett%_y-Print" ps-print-buffer-with-faces
+ :active (fboundp 'ps-print-buffer-with-faces)
+ :suffix (if put-buffer-names-in-file-menu (buffer-name) "")]))
"-----"
["%_Revert Buffer" revert-buffer
:active (or buffer-file-name revert-buffer-function)
;;
;; 2. Generating setup.ini should be more automatic.
-(defvar package-net-cygwin32-binary-size 6917126
+(defvar package-net-cygwin32-binary-size 7559692
"The size in bytes of the cygwin32 binary distribution.")
-(defvar package-net-win32-binary-size 6563941
+(defvar package-net-win32-binary-size 7421788
"The size in bytes of the win32 binary distribution.")
;;;###autoload
(insert (format "@ %s\n" "xemacs-i386-pc-win32"))
(insert (format "version: %s\n" emacs-program-version))
(insert "type: native\n")
- (insert (format "install: binaries/win32/%s %d\n\n"
+ (insert (format "install: win32/%s %d\n\n"
(concat emacs-program-name
"-i386-pc-win32-"
emacs-program-version ".tar.gz")
(insert (format "@ %s\n" "xemacs-i686-pc-cygwin32"))
(insert (format "version: %s\n" emacs-program-version))
(insert "type: cygwin\n")
- (insert (format "install: binaries/cygwin32/%s %d\n\n"
+ (insert (format "install: cygwin32/%s %d\n\n"
(concat emacs-program-name
"-i686-pc-cygwin32-"
emacs-program-version ".tar.gz")
(write-region (point-min) (point-max) (concat destdir "setup.ini")))
(kill-buffer buf))))
-(defun package-net-batch-convert-index-to-ini ()
+(defun package-net-generate-bin-ini (&optional destdir version)
+ "Convert the package index to ini file format in DESTDIR.
+DESTDIR defaults to the value of `data-directory'."
+
+ (setq destdir (file-name-as-directory (or destdir data-directory)))
+ (let ((buf (get-buffer-create "*setup-bin.ini*")))
+ (unwind-protect
+ (save-excursion
+ (set-buffer buf)
+ (erase-buffer buf)
+ (goto-char (point-min))
+ (insert "# This file is automatically generated. If you edit it, your\n")
+ (insert "# edits will be discarded next time the file is generated.\n")
+ (insert "#\n\n")
+ (insert (format "setup-timestamp: %d\n"
+ (+ (* (car (current-time)) 65536) (car (cdr (current-time))))))
+ (insert (format "setup-version: %s\n\n" (or version "1.0")))
+ ;; Native version
+ (insert (format "@ %s\n" "xemacs-i386-pc-win32"))
+ (insert (format "version: %s\n" emacs-program-version))
+ (insert "type: native\n")
+ (insert (format "install: win32/%s %d\n\n"
+ (concat emacs-program-name
+ "-i586-pc-win32-"
+ emacs-program-version ".tar.gz")
+ package-net-win32-binary-size))
+ ;; Cygwin version
+ (insert (format "@ %s\n" "xemacs-i686-pc-cygwin"))
+ (insert (format "version: %s\n" emacs-program-version))
+ (insert "type: cygwin\n")
+ (insert (format "install: cygwin32/%s %d\n\n"
+ (concat emacs-program-name
+ "-i686-pc-cygwin-"
+ emacs-program-version ".tar.gz")
+ package-net-cygwin32-binary-size))
+ (insert "# setup.ini file ends here\n")
+ (write-region (point-min) (point-max) (concat destdir "setup-bin.ini")))
+ (kill-buffer buf))))
+
+(defun package-net-batch-generate-bin-ini ()
"Convert the package index to ini file format."
(unless noninteractive
- (error "`package-net-batch-convert-index-to-ini' is to be used only with -batch"))
+ (error "`package-net-batch-generate-bin-ini' is to be used only with -batch"))
(let ((dir (car command-line-args-left))
- (version (car (cdr command-line-args-left)))
- (package-get-require-signed-base-updates nil))
- (package-net-convert-index-to-ini dir nil version)))
+ (version (car (cdr command-line-args-left))))
+ (package-net-generate-bin-ini dir version)))
;;;###autoload
(defun package-net-update-installed-db (&optional destdir)
;; hidden from the user and there is a consistent set of options to
;; control how to print, which works across all implementations.
;;
-;; The code here is just a start and needs a huge amount of work. Probably
-;; the interfaces below will change and the functions renamed.
+;; The code here currently only really supports Windows.
(defgroup printing nil
"Generic printing support."
:type 'string
:group 'printing)
-(defcustom printer-page-header '(date buffer-name)
-"*Controls printed page header.
+(defstruct Print-context pageno window start-time printer-name)
+
+(defvar printer-current-device nil)
-#### not yet implemented.
+(defun Printer-get-device ()
+ (or printer-current-device (setq printer-current-device
+ (make-device 'msprinter printer-name))))
+
+(defun Printer-clear-device ()
+ (setq printer-current-device nil))
+
+(defcustom printer-page-header '((face bold date) nil (face bold buffer-name))
+"*Controls printed page header.
This can be:
- nil. Header is not printed.
one parameter, a print-context object, every time the headers need
to be set up. It can use the function `print-context-property' to
query the properties of this object. The return value is treated as
- if it was literally specified: i.e. it will be reprocessed.
+ if it was literally specified: i.e. it will be reprocessed.
- A list of up to three elements, for left, center and right portions
of the header. Each of these can be
- nil, not to print the portion
- A string, which will be printed literally.
- A predefined symbol, on of the following:
+ printer-name Name of printer being printed to
short-file-name File name only, no path
long-file-name File name with its path
buffer-name Buffer name
page Current printout page number, 1-based
user-id User logon id
user-name User full name
+ - A list of three elements: (face FACE-NAME EXPR). EXPR is any of the
+ items given here. The item will be displayed in the given face.
- A cons of an extent and any of the items given here. The item will
be displayed using the extent's face, begin-glyph and end-glyph
properties.
:type 'sexp
:group 'printing)
-(defcustom printer-page-footer '(nil page)
+(defcustom printer-page-footer '(nil (face bold ("Page " page)))
"*Controls printed page footer.
-#### not yet implemented.
-
Format is the same as `printer-page-header'."
:type 'sexp
:group 'printing)
+(defun generate-header-element (element context)
+ (cond ((null element) nil)
+ ((stringp element) (insert element))
+ ((memq element '(printer-name
+ short-file-name long-file-name buffer-name
+ date time page user-id user-name))
+ (insert (print-context-property context element)))
+ ((and (consp element) (eq 'face (car element)))
+ (let ((p (point)))
+ (generate-header-element (third element) context)
+ (let ((x (make-extent p (point))))
+ (set-extent-face x (second element)))))
+ ((and (consp element) (extentp (car element)))
+ (let ((p (point)))
+ (generate-header-element (cdr element) context)
+ (let ((x (make-extent p (point))))
+ (set-extent-face x (extent-face (car element)))
+ (set-extent-begin-glyph x (extent-begin-glyph (car element)))
+ (set-extent-end-glyph x (extent-end-glyph (car element))))))
+ ((listp element)
+ (mapcar #'(lambda (el) (generate-header-element el context))
+ element))
+ ((functionp element)
+ (generate-header-element (funcall element context) context))
+ (t (error 'invalid-argument "Unknown header element" element))))
+
+(defun generate-header-line (spec context)
+ (let* ((left (first spec))
+ (middle (second spec))
+ (right (third spec))
+ (left-start (point))
+ (middle-start (progn (generate-header-element left context)
+ (point)))
+ (right-start (progn (generate-header-element middle context)
+ (point)))
+ (right-end (progn (generate-header-element right context)
+ (point)))
+ (left-width (- middle-start left-start))
+ (middle-width (- right-start middle-start))
+ (right-width (- right-end right-start))
+ (winwidth (- (window-width (Print-context-window context)) 1))
+ (spaces1 (max (- (/ (- winwidth middle-width) 2) left-width) 0))
+ (spaces2 (max (- (- winwidth right-width)
+ (+ left-width spaces1 middle-width))
+ 0)))
+ (goto-char right-start)
+ (insert-char ?\ spaces2)
+ (goto-char middle-start)
+ (insert-char ?\ spaces1)))
+
(defun print-context-property (print-context prop)
"Return property PROP of PRINT-CONTEXT.
Valid properties are
-print-buffer Buffer being printed.
-print-window Window on printer device containing print buffer.
-print-frame Frame on printer device corresponding to current page.
-print-device Device referring to printer.
-printer-name Name of printer being printed to.
+print-buffer Buffer being printed
+print-window Window on printer device containing print buffer
+print-frame Frame on printer device corresponding to current page
+print-device Device referring to printer
+print-start-time Time current when printing started (`current-time' format)
+print-page Current printout page number, 1-based
+printer-name Name of printer being printed to
short-file-name File name only, no path
long-file-name File name with its path
buffer-name Buffer name
-date Date current when printing started
-time Time current when printing started
-page Current printout page number, 1-based
-user-id User logon id
+date Date current when printing started (as a string)
+time Time current when printing started (as a string)
+page Current printout page number, 1-based (as a string)
+user-id User logon id (as a string)
user-name User full name"
- (error "not yet implemented"))
+ (let* ((window (Print-context-window print-context))
+ (pageno (Print-context-pageno print-context))
+ (start-time (Print-context-start-time print-context))
+ (printer-name (Print-context-printer-name print-context))
+ (buffer (window-buffer window)))
+ (case prop
+ (print-buffer buffer)
+ (print-window window)
+ (print-frame (window-frame window))
+ (print-device (frame-device (window-frame window)))
+ (print-start-time start-time)
+ (print-page pageno)
+ (printer-name printer-name)
+ (short-file-name (let ((name (buffer-file-name buffer)))
+ (if name (file-name-nondirectory name) "")))
+ (long-file-name (let ((name (buffer-file-name buffer)))
+ (or name "")))
+ (buffer-name (buffer-name buffer))
+ (date (format-time-string "%x" start-time))
+ (time (format-time-string "%X" start-time))
+ (page (format "%d" pageno))
+ (user-id (format "%d" (user-uid)))
+ (user-name (format "%d" (user-login-name)))
+ (t (error 'invalid-argument "Unrecognized print-context property"
+ prop)))))
+
+(defun generic-page-setup ()
+ "Display the Page Setup dialog box.
+Changes made are recorded internally."
+ (interactive)
+ (let* ((d (Printer-get-device))
+ (props
+ (condition-case err
+ (make-dialog-box 'page-setup :device d
+ :properties default-msprinter-frame-plist)
+ (error
+ (Printer-clear-device)
+ (signal (car err) (cdr err))))))
+ (while props
+ (setq default-msprinter-frame-plist
+ (plist-put default-msprinter-frame-plist (car props) (cadr props)))
+ (setq props (cddr props)))))
-(defun generic-print-buffer (&optional buffer)
+(defun generic-print-buffer (&optional buffer display-print-dialog)
"Print buffer BUFFER using a printing method appropriate to the O.S. being run.
Under Unix, `lpr' is normally used to spool out a no-frills version of the
buffer, or the `ps-print' package is used to pretty-print the buffer to a
PostScript printer. Under MS Windows, the built-in printing support is used.
+If DISPLAY-PRINT-DIALOG is t, the print dialog will first be
+displayed, allowing the user to select various printing settings
+\(e.g. which printer to print to, the range of pages, number of copies,
+modes such landscape/portrait/2-up/4-up [2 or 4 (small!) logical pages
+per physical page], etc.). At this point the user can cancel the printing
+operation using the dialog box, and `generic-print-buffer' will not print
+anything. When called interactively, use a prefix arg to suppress the
+display of the print dialog box.
+
If BUFFER is nil or omitted, the current buffer is used."
- (interactive)
- (generic-print-region (point-min buffer) (point-max buffer) buffer))
+ (interactive (list nil (not current-prefix-arg)))
+ (if (or (not (valid-specifier-tag-p 'msprinter))
+ (not display-print-dialog))
+ (generic-print-region (point-min buffer) (point-max buffer) buffer)
+ (let* ((d (Printer-get-device))
+ (props (condition-case err
+ (make-dialog-box 'print :device d)
+ (error
+ (Printer-clear-device)
+ (signal (car err) (cdr err))))))
+ (and props (generic-print-region (point-min buffer)
+ (point-max buffer) buffer
+ d props)))))
-(defun generic-print-region (start end &optional buffer)
+(defun generic-print-region (start end &optional buffer print-device props)
"Print region using a printing method appropriate to the O.S. being run.
The region between START and END of BUFFER (defaults to the current
buffer) is printed.
Under Unix, `lpr' is normally used to spool out a no-frills version of the
buffer, or the `ps-print' package is used to pretty-print the buffer to a
-PostScript printer. Under MS Windows, the built-in printing support is used."
+PostScript printer. Under MS Windows, the built-in printing support is used.
+
+Optional PRINT-DEVICE is a device, already created, to use to do the
+printing. This is typically used when this function was invoked from
+`generic-print-buffer' and it displayed a dialog box. That function created
+the device, and then the dialog box stuffed it with the user's selections
+of how the buffer should be printed.
+
+PROPS, if given, is typically the plist returned from the call to
+`make-dialog-box' that displayed the Print box. It contains properties
+relevant to us when we print.
+
+Recognized properties are the same as those in `make-dialog-box':
+
+ name Printer device name. If omitted, the current system-selected
+ printer will be used.
+ from-page First page to print, 1-based. If omitted, printing starts from
+ the beginning.
+ to-page Last page to print, inclusive, If omitted, printing ends at
+ the end.
+ copies Number of copies to print. If omitted, one copy is printed."
(cond ((valid-specifier-tag-p 'msprinter)
- (let (d f)
+ (let (d f header-buffer footer-buffer)
(setq buffer (decode-buffer buffer))
(unwind-protect
(progn
- (setq d (make-device 'msprinter printer-name))
+ (setq d (or print-device (Printer-get-device)))
(setq f (make-frame
- (list* 'name (concat (substitute ?_ ?.
- (buffer-name buffer))
- " - XEmacs")
- '(menubar-visible-p nil
+ (list* 'name (concat
+ (substitute ?_ ?. (buffer-name buffer))
+ " - XEmacs")
+ '(menubar-visible-p
+ nil
has-modeline-p nil
default-toolbar-visible-p nil
default-gutter-visible-p nil
(let* ((w (frame-root-window f))
(vertdpi (cdr (device-system-metric d 'device-dpi)))
(pixel-vertical-clip-threshold (/ vertdpi 2))
- (last-end 0)
- done)
- (set-window-buffer w (or buffer (current-buffer)))
- (set-window-start w start)
- (while (not done)
- (redisplay-frame f)
- (print-job-eject-page f)
- (let ((this-end (window-end w))
- (pixvis (window-last-line-visible-height w)))
- ;; in case we get stuck somewhere, bow out
- ;; rather than printing an infinite number of
- ;; pages. #### this will fail with an image
- ;; bigger than an entire page. but we really
- ;; need this check here. we should be more
- ;; clever in our check, to deal with this case.
- (if (or (= this-end last-end)
- ;; #### fuckme! window-end returns a value
- ;; outside of the valid range of buffer
- ;; positions!!!
- (>= this-end end))
- (setq done t)
- (setq last-end this-end)
- (set-window-start w this-end)
- (if pixvis
- (save-selected-window
- (select-window w)
- ;; #### scroll-down should take a window arg.
- (let ((window-pixel-scroll-increment pixvis))
- (scroll-down 1)))))))))
+ (from-page (plist-get props 'from-page 1))
+ (to-page (plist-get props 'to-page))
+ (copies (plist-get props 'copies 1))
+ (context (make-Print-context
+ :start-time (current-time)
+ ;; #### bogus! we need accessors for
+ ;; print-settings objects.
+ :printer-name
+ (or (plist-get props 'name)
+ printer-name
+ (mswindows-get-default-printer))))
+ header-window
+ footer-window)
+
+ (when printer-page-header
+ (let ((window-min-height 2))
+ (setq header-window w)
+ (setq w (split-window w 2)))
+ (setq header-buffer (generate-new-buffer " *header*"))
+ (set-window-buffer header-window header-buffer))
+
+ (when printer-page-footer
+ (let ((window-min-height 2))
+ (setq footer-window
+ (split-window w (- (window-height w) 2))))
+ (setq footer-buffer (generate-new-buffer " *footer*"))
+ (set-window-buffer footer-window footer-buffer))
+
+ (setf (Print-context-window context) w)
+
+ ;; loop, printing one copy of document per loop
+ (while (> copies 0)
+ (let ((last-end 0) ; bufpos at end of previous page
+ reached-end ; t if we've reached the end of the
+ ; text we're printing
+ (pageno 1))
+ (set-window-buffer w buffer)
+ (set-window-start w start)
+
+ ;; loop, printing one page per loop
+ (while (and (not reached-end)
+ ;; stop at end of region of text or
+ ;; outside of ranges of pages given
+ (or (not to-page) (<= pageno to-page)))
+
+ (setf (Print-context-pageno context) pageno)
+
+ ;; only actually print the page if it's in the
+ ;; range.
+ (when (>= pageno from-page)
+ (when printer-page-header
+ (with-current-buffer header-buffer
+ (erase-buffer)
+ (generate-header-line printer-page-header
+ context)
+ (goto-char (point-min))
+ (set-window-start header-window (point-min))))
+
+ (when printer-page-footer
+ (with-current-buffer footer-buffer
+ (erase-buffer)
+ (insert "\n")
+ (generate-header-line printer-page-footer
+ context)
+ (goto-char (point-min))
+ (set-window-start footer-window (point-min))))
+
+ (redisplay-frame f t)
+ (print-job-eject-page f)
+ )
+ ;; but use the GUARANTEE argument to `window-end'
+ ;; so that we get the right value even if we
+ ;; didn't do a redisplay.
+ (let ((this-end (window-end w t))
+ (pixvis (window-last-line-visible-height w)))
+ ;; in case we get stuck somewhere, bow out
+ ;; rather than printing an infinite number of
+ ;; pages. #### this will fail with an image
+ ;; bigger than an entire page. but we really
+ ;; need this check here. we should be more
+ ;; clever in our check, to deal with this case.
+ (if (or (= this-end last-end)
+ ;; #### fuckme! window-end returns a value
+ ;; outside of the valid range of buffer
+ ;; positions!!!
+ (>= this-end end))
+ (setq reached-end t)
+ (setq last-end this-end)
+ (set-window-start w this-end)
+ (if pixvis
+ (save-selected-window
+ (select-window w)
+ ;; #### scroll-down should take a
+ ;; window arg.
+ (let ((window-pixel-scroll-increment
+ pixvis))
+ (scroll-down 1))))))
+ (setq pageno (1+ pageno))))
+ (setq copies (1- copies)))))
(and f (delete-frame f))
- (and d (delete-device d))
+ (and header-buffer (kill-buffer header-buffer))
+ (and footer-buffer (kill-buffer footer-buffer))
)))
((and (not (eq system-type 'windows-nt))
- (fboundp 'lpr-buffer))
+ (fboundp 'lpr-region))
(lpr-region buffer))
(t (error "No print support available"))))
(defcustom kill-whole-line nil
"*If non-nil, kill the whole line if point is at the beginning.
Otherwise, `kill-line' kills only up to the end of the line, but not
-the terminating newline. Note: This only applies when `kill-line' is
-called interactively.
+the terminating newline.
WARNING: This is a misnamed variable! It should be called something
like `kill-whole-line-when-at-beginning'. If you simply want
:type 'boolean
:group 'killing)
-(defun kill-line-1 (arg entire-line interactive-p)
+(defun kill-line-1 (arg entire-line)
(kill-region (if entire-line
(save-excursion
(beginning-of-line)
(signal 'end-of-buffer nil))
(if (or (looking-at "[ \t]*$")
(or entire-line
- (and interactive-p
- (and kill-whole-line (bolp)))))
+ (and kill-whole-line (bolp))))
(forward-line 1)
(end-of-line)))
(point))))
When calling from a program, nil means \"no arg\",
a number counts as a prefix arg."
(interactive "*P")
- (kill-line-1 arg t (interactive-p)))
+ (kill-line-1 arg t))
(defun kill-line (&optional arg)
"Kill the rest of the current line, or the entire line.
When calling from a program, nil means \"no arg\",
a number counts as a prefix arg."
(interactive "*P")
- (kill-line-1 arg nil (interactive-p)))
+ (kill-line-1 arg nil))
;; XEmacs
(defun backward-kill-line nil
(setq zmacs-region-stays t))
((and (getf last-command-properties 'shifted-motion-command)
unshifted-motion-keys-deselect-region)
- (setq zmacs-region-stays nil))
- (t
- (setq zmacs-region-stays t)))))
+ (setq zmacs-region-stays nil)))))
(defun forward-char-command (&optional arg buffer)
"Move point right ARG characters (left if ARG negative) in BUFFER.
the region is active. Otherwise, this means that the user has pushed
a mark in this buffer at some point in the past.
The functions `region-beginning' and `region-end' can be used to find the
- limits of the region."
+ limits of the region.
+
+You should use this, *NOT* `region-active-p', in a menu item
+specification that you want grayed out when the region is not active:
+
+ [ ... ... :active (region-exists-p)]
+
+This correctly caters to the user's setting of `zmacs-regions'."
(not (null (mark))))
;; XEmacs
(defun region-active-p ()
"Return non-nil if the region is active.
If `zmacs-regions' is true, this is equivalent to `region-exists-p'.
-Otherwise, this function always returns false."
+Otherwise, this function always returns false.
+
+You should generally *NOT* use this in a menu item specification that you
+want grayed out when the region is not active. Instead, use this:
+
+ [ ... ... :active (region-exists-p)]
+
+Which correctly caters to the user's setting of `zmacs-regions'."
(and zmacs-regions zmacs-region-extent))
(defvar zmacs-activate-region-hook nil
": how to get the latest version\n")
"\n--\n"
(face italic "\
-Copyright (C) 1985-1999 Free Software Foundation, Inc.
+Copyright (C) 1985-2001 Free Software Foundation, Inc.
Copyright (C) 1990-1994 Lucid, Inc.
Copyright (C) 1993-1997 Sun Microsystems, Inc. All Rights Reserved.
Copyright (C) 1994-1996 Board of Trustees, University of Illinois
-Copyright (C) 1995-1996 Ben Wing\n"))
+Copyright (C) 1995-2001 Ben Wing\n"))
((face (blue bold underline) "\nInformation, on-line help:\n\n")
"XEmacs comes with plenty of documentation...\n\n"
malformed-property-list
circular-list
circular-property-list
+ invalid-regexp
+ specifier-syntax-error
+
invalid-argument
wrong-type-argument
wrong-number-of-arguments
invalid-function
no-catch
+ undefined-keystroke-sequence
+ specifier-argument-error
invalid-state
void-function
cyclic-function-indirection
void-variable
cyclic-variable-indirection
+ protected-field
+ invalid-byte-code
invalid-operation
invalid-change
setting-constant
+ specifier-change-error
editing-error
beginning-of-buffer
end-of-buffer
buffer-read-only
io-error
+ file-error
+ file-already-exists
+ file-locked
+ file-supersession
end-of-file
+ coding-system-error
+ image-conversion-error
+ tooltalk-error
arith-error
range-error
domain-error
singularity-error
overflow-error
underflow-error
+ dialog-box-error
+ search-failed
+ selection-conversion-error
+
+ unimplemented
+
+ internal-error
The five most common errors you will probably use or base your new
errors off of are `syntax-error', `invalid-argument', `invalid-state',
+2001-05-10 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released.
+
+2001-04-25 Ben Wing <ben@xemacs.org>
+
+ * lwlib-utils.c (destroy_all_children): fix warning reported by
+ Isaac Hollander <ysh@mindspring.com>.
+
2001-04-19 Stephen J. Turnbull <stephen@xemacs.org>
* XEmacs 21.4.1 "Copyleft" is released.
{
/* Unmanage all children and destroy them. They will only be
* really destroyed when we get out of DispatchEvent. */
- for (i = 0; i < number; i++)
+ for (i = 0; i < (int) number; i++)
{
Widget child = children [i];
if (!child->core.being_destroyed)
+2001-05-10 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released.
+
+2001-05-07 Martin Buchholz <martin@xemacs.org>
+
+ * make-stds.texi: Support makeinfo 3.12
+
+2001-04-26 John H. Palmieri <palmieri@math.washington.edu>
+
+ * xemacs/frame.texi (XEmacs under X): Document default-frame-plist
+ rather than default-frame-alist.
+
2001-04-19 Stephen J. Turnbull <stephen@xemacs.org>
* XEmacs 21.4.1 "Copyleft" is released.
@end smallexample
@noindent
-or, if you wish to support @env{DESTDIR},
+or, if you wish to support @code{DESTDIR},
@smallexample
# Make sure all installation directories (e.g. $(bindir))
in first. This is normally bound to @kbd{C-x 5 b}.
@vindex default-frame-alist
+@vindex default-frame-plist
You can specify a different default frame size other than the one provided.
-Use the variable @code{default-frame-alist}, which is an alist of default
+Use the variable @code{default-frame-plist}, which is a plist of default
values for frame creation other than the first one. These may be set in
your init file, like this:
@example
- (setq default-frame-alist '((width . 80) (height . 55)))
+ (setq default-frame-plist '(width 80 height 55))
@end example
+This variable has replaced @code{default-frame-alist}, which is
+considered obsolete.
+
@vindex x-frame-defaults
For values specific to the first XEmacs frame, you must use X resources.
The variable @code{x-frame-defaults} takes an alist of default frame
+2001-05-10 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released.
+
+2001-04-19 Andy Piper <andy@xemacs.org>
+
+ * Makefile.in.in (setup-bin.ini): new. Just calculate ini for the
+ binaries
+ (desktop.o): add correct dependency
+
+ * reginfo.h: Update arch to i586 and 21.4
+ * reginfo.h (XEMACS_NATIVE_ARCH_NAME): ditto
+
2001-04-19 Stephen J. Turnbull <stephen@xemacs.org>
* XEmacs 21.4.1 "Copyleft" is released.
* all: port from cygwin setup.
-%%% $Id: ChangeLog,v 1.2.2.4 2001/04/19 07:31:14 stephent Exp $
-$Revision: 1.2.2.4 $
+%%% $Id: ChangeLog,v 1.2.2.7 2001/05/10 10:39:06 stephent Exp $
+$Revision: 1.2.2.7 $
-L$(MINGW_ZLIB_DIR) -lz -lmingw32
@chmod a-x $@
-setup.ini: setup.exe
+setup-bin.ini: setup.exe
V=`grep '^\$$Revision.*' $(srcdir)/ChangeLog \
| sed -e 's/\$$Revision:* *//' \
-e 's/ *$$.*//'` ;\
$(XEMACS) -batch -vanilla -l ${srcdir}/../lisp/package-net.el \
- -f package-net-batch-convert-index-to-ini . $$V
+ -f package-net-batch-generate-bin-ini . $$V
install:
@echo; echo "Installing net setup."
msg.h log.h find.h reginfo.h
concat.o: concat.cc
desktop.o: desktop.cc win32.h resource.h ini.h msg.h state.h concat.h \
- mkdir.h dialog.h version.h port.h
+ mkdir.h dialog.h version.h port.h reginfo.h
dialog.o: dialog.cc win32.h dialog.h msg.h log.h
diskfull.o: diskfull.cc win32.h diskfull.h
download.o: download.cc win32.h resource.h msg.h ini.h dialog.h \
#define XEMACS_PACKAGE_DIR \
((char*)(install_type == IDC_INSTALL_NATIVE ? "\\xemacs-packages\\" \
: "/lib/xemacs/xemacs-packages/"))
-#define XEMACS_NATIVE_ARCH_NAME "i386-pc-win32"
-#define XEMACS_CYGWIN_ARCH_NAME "i686-pc-cygwin32"
+#define XEMACS_NATIVE_ARCH_NAME "i586-pc-win32"
+#define XEMACS_CYGWIN_ARCH_NAME "i686-pc-cygwin"
/*
* Installation hierarchy is:
* \site-packages
* \mule-packages
* \XEmacs-21.4
- * \i386-pc-win32
+ * \i586-pc-win32
* \etc
* \info
* \lisp
* /xemacs/site-packages
* /xemacs/mule-packages
* /xemacs-21.4
- * /i686-pc-cygwin32
+ * /i686-pc-cygwin
* /etc
* /info
* /lisp
- * /usr/local/bin/i686-pc-cygwin32
+ * /usr/local/bin/i686-pc-cygwin
*/
xemacs.ncb
xemacs.opt
xemacs.plg
+obj
+2001-05-10 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released.
+
+2001-05-09 Ben Wing <ben@xemacs.org>
+
+ * xemacs.mak (OS):
+ do not warn about gtk when we're not trying to compile with it.
+
+2001-04-20 Ben Wing <ben@xemacs.org>
+
+ * .cvsignore: Added stuff for Windows.
+
+2001-05-01 Ben Wing <ben@xemacs.org>
+
+ * config.inc.samp (MAKEINFO): point at more standard c: not f:.
+
+2001-05-01 Adrian Aichner <adrian@xemacs.org>
+
+ * xemacs.mak: Define EMACS_PATCH_LEVEL like configure.in does.
+ * xemacs.mak (XEMACS_VERSION_STRING): Build this more like
+ configure.in does.
+ * xemacs.mak (docfile): Use del instead of $(DEL) in shell
+ command.
+
+2001-04-27 Adrian Aichner <adrian@xemacs.org>
+
+ * compface.mak (clean): New target.
+ * xemacs.mak: Use $(DEL) everywhere, instead of some occurences of
+ del and @$(DEL). Add GTK supporting variables and document it as
+ currently unsupported on MSWindows.
+ * xemacs.mak (XEMACS_VERSION_STRING): Initialize according to
+ emacs_is_beta. Use emacs_beta_version as patch level for non-beta
+ version.
+ * xemacs.mak (HAVE_GTK): New.
+ * xemacs.mak (GTK_DIR): New.
+
+2001-04-19 Andy Piper <andy@xemacs.org>
+
+ * minitar.mak: Remove
+
+ * xemacs.mak (PROGRAM_DEFINES): Calculate release version
+ correctly.
+ (ETAGS_DEPS): Add mintar as a real target
+ (DOC): Do the right thing when non-beta
+
2001-04-19 Stephen J. Turnbull <stephen@xemacs.org>
* XEmacs 21.4.1 "Copyleft" is released.
libcompface.lib: $(OBJS)
link.exe -lib -nologo -out:$@ $(OBJS)
+
+clean: $(OBJS)
+ -rm -f $(OBJS) libcompface.lib
# Set this to specify the location of makeinfo. (If not set, XEmacs will
# attempt to use its built-in texinfo support when building info files.)
-MAKEINFO=f:\src\texinfo-4.0\makeinfo\makeinfo.exe
+MAKEINFO=c:\src\texinfo-4.0\makeinfo\makeinfo.exe
############################################################################
-DINFODOCK_MINOR_VERSION=$(infodock_minor_version) \
-DINFODOCK_BUILD_VERSION=$(infodock_build_version)
!else
+XEMACS_VERSION_STRING=$(emacs_major_version).$(emacs_minor_version)
!if "$(emacs_beta_version)" != ""
-XEMACS_VERSION_STRING=$(emacs_major_version).$(emacs_minor_version)-b$(emacs_beta_version)
+!if "$(emacs_is_beta)" != ""
+XEMACS_VERSION_STRING=$(XEMACS_VERSION_STRING)-b$(emacs_beta_version)
!else
-XEMACS_VERSION_STRING=$(emacs_major_version).$(emacs_minor_version)
+XEMACS_VERSION_STRING=$(XEMACS_VERSION_STRING).$(emacs_beta_version)
+!endif
!endif
PROGRAM_DEFINES= \
-DPATH_VERSION=\"$(XEMACS_VERSION_STRING)\" \
!if !defined(HAVE_GIF)
HAVE_GIF=1
!endif
+!if !defined(HAVE_GTK)
+HAVE_GTK=0
+!endif
!if !defined(HAVE_TOOLBARS)
HAVE_TOOLBARS=$(HAVE_XPM)
!endif
!message Specified X11 directory does not contain "$(X11_DIR)\LIB\X11.LIB"
CONFIG_ERROR=1
!endif
+!if $(HAVE_MS_WINDOWS) && $(HAVE_GTK) && !defined(GTK_DIR)
+!message Please specify root directory for your GTK installation: GTK_DIR=path
+CONFIG_ERROR=1
+!endif
!if $(HAVE_MS_WINDOWS) && $(HAVE_XPM) && !defined(XPM_DIR)
!message Please specify root directory for your XPM installation: XPM_DIR=path
CONFIG_ERROR=1
! if defined(_)
! if [perl -p -e "s/^\\x23if defined(.+)/!if defined$$1/; s/^\\x23e/!e/;" \
-e "s/([\\s=^])([\\w\\d\\.\\-^]+\\.[ch^])/$$1$(SRC:\=\\\\)\\\\$$2/g;" \
- -e "s/^(.+)\\.o:(.+)/$(OUTDIR:\=\\\\)\\\\$$1.obj:$$2 $(NT:\=\\\\)\\\\config.inc/;" \
+ -e "s/^(.+)\\.o:(.+)/$(OUTDIR:\=\\\\)\\\\$$1.obj:$$2/;" \
< $(SRC)\depend > $(OUTDIR)\depend.tmp]
! endif
! else
! if [perl -p -e "s/^\x23if defined(.+)/!if defined$$1/; s/^\x23e/!e/;" \
-e "s/([\s=^])([\w\d\.\-^]+\.[ch^])/$$1$(SRC:\=\\)\\$$2/g;" \
- -e "s/^(.+)\.o:(.+)/$(OUTDIR:\=\\)\\$$1.obj:$$2 $(NT:\=\\)\\config.inc/;" \
+ -e "s/^(.+)\.o:(.+)/$(OUTDIR:\=\\)\\$$1.obj:$$2/;" \
< $(SRC)\depend > $(OUTDIR)\depend.tmp]
! endif
! endif
cd $(LIB_SRC)
$(CCV) -I. -I$(XEMACS)/src -I$(XEMACS)/nt/inc $(LIB_SRC_DEFINES) $(CFLAGS) -Fe$@ $** wsock32.lib -link -incremental:no
cd $(NT)
-$(LIB_SRC)/minitar.exe : $(NT)/minitar.mak $(NT)/minitar.c
- nmake -nologo -f minitar.mak ZLIB="$(ZLIB_DIR)" NT="$(NT)" LIB_SRC="$(LIB_SRC)"
+
+$(LIB_SRC)/minitar.exe : $(NT)/minitar.c
+ $(CCV) $(CFLAGS) -I$(ZLIB_DIR) -Fe$@ $** $(ZLIB_DIR)\zlib.lib -link -incremental:no
LIB_SRC_TOOLS = \
$(LIB_SRC)/etags.exe \
# This may not exist
!if "$(emacs_beta_version)" != ""
+!if "$(emacs_is_beta)" != ""
EMACS_BETA_VERSION=-DEMACS_BETA_VERSION=$(emacs_beta_version)
-!ENDIF
+!else
+EMACS_PATCH_LEVEL=-DEMACS_PATCH_LEVEL=$(emacs_beta_version)
+!endif
+!endif
!if !$(USE_PORTABLE_DUMPER)
TEMACS_ENTRYPOINT=-entry:_start
!if $(DEBUG_XEMACS)
@dir /b/s $(OUTDIR)\*.sbr > bscmake.tmp
bscmake -nologo -o$(TEMACS_BROWSE) @bscmake.tmp
- @$(DEL) bscmake.tmp
+ $(DEL) bscmake.tmp
!endif
!if $(USE_PORTABLE_DUMPER)
@if exist $(SRC)\dump-id.c del $(SRC)\dump-id.c
# Make the resource section read/write since almost all of it is the dump
# data which needs to be writable. This avoids having to copy it.
editbin -nologo -section:.rsrc,rw xemacs.exe
- del $(TEMACS_DIR)\xemacs.dmp
+ $(DEL) $(TEMACS_DIR)\xemacs.dmp
!endif
cd $(NT)
@if not exist $(TEMACS_DIR)\SATISFIED nmake -nologo -f xemacs.mak $@
@echo PlaceHolder > PlaceHolder
@xcopy /q PROBLEMS "$(INSTALL_DIR)\"
@xcopy /q PlaceHolder "$(INSTALL_DIR)\lock\"
- @$(DEL) "$(INSTALL_DIR)\lock\PlaceHolder"
+ $(DEL) "$(INSTALL_DIR)\lock\PlaceHolder"
@xcopy /q $(LIB_SRC)\*.exe "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)\"
@copy $(LIB_SRC)\DOC "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)"
@copy $(CONFIG_VALUES) "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)"
@xcopy /e /q $(XEMACS)\lisp "$(INSTALL_DIR)\lisp\"
@echo Making skeleton package tree in $(PACKAGE_PREFIX) ...
@xcopy /q PlaceHolder "$(PACKAGE_PREFIX)\site-packages\"
- @$(DEL) "$(PACKAGE_PREFIX)\site-packages\PlaceHolder"
+ $(DEL) "$(PACKAGE_PREFIX)\site-packages\PlaceHolder"
@xcopy /q PlaceHolder "$(PACKAGE_PREFIX)\mule-packages\"
- @$(DEL) "$(PACKAGE_PREFIX)\mule-packages\PlaceHolder"
+ $(DEL) "$(PACKAGE_PREFIX)\mule-packages\PlaceHolder"
@xcopy /q PlaceHolder "$(PACKAGE_PREFIX)\xemacs-packages\"
- @$(DEL) "$(PACKAGE_PREFIX)\xemacs-packages\PlaceHolder"
- @$(DEL) PlaceHolder
+ $(DEL) "$(PACKAGE_PREFIX)\xemacs-packages\PlaceHolder"
+ $(DEL) PlaceHolder
mostlyclean:
$(DEL) $(XEMACS)\Installation
!if $(HAVE_MULE)
Compiling in MULE.
!endif
+!if $(HAVE_GTK)
+ --------------------------------------------------------------------
+ WARNING: You specified HAVE_GTK=1, but we are compiling WITHOUT GTK support.
+ WARNING: gtk-xemacs is not currently supported on MSWindows (mingw or msvc).
+ WARNING: Yes, we know that gtk has been ported to native MSWindows, but
+ WARNING: XEmacs is not yet ready to use that port.
+ --------------------------------------------------------------------
+!endif
!if $(HAVE_XPM)
Compiling in support for XPM images.
!else
update-auto-and-custom:
# Combine into one invocation to avoid repeated startup penalty.
$(XEMACS_BATCH) -l autoload -f batch-update-one-directory $(LISP) -f batch-byte-compile-one-file $(LISP)\auto-autoloads.el -l cus-dep -f Custom-make-one-dependency $(LISP) -f batch-byte-compile-one-file $(LISP)\custom-load.el
- @$(DEL) $(LISP)\auto-autoloads.el~
- @$(DEL) $(LISP)\custom-load.el~
+ $(DEL) $(LISP)\auto-autoloads.el~
+ $(DEL) $(LISP)\custom-load.el~
# DO NOT DELETE THIS LINE -- make depend depends on it.
update-elc.stamp
*.so.*
gmon.out
+NEEDTODUMP
+Xpm.dll
+temacs.bsc
+temacs.pdb
+temacs.map
+2001-05-10 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released.
+
+2001-05-08 Yoshiaki Kasahara <kasahara@nc.kyushu-u.ac.jp>
+
+ * mule-charset.c (Fmake_charset): Add missing else.
+
+2001-04-23 Ben Wing <ben@xemacs.org>
+
+ * event-msw.c (FAKE_MOD_QUIT):
+ * event-msw.c (mswindows_dequeue_dispatch_event):
+ * event-msw.c (mswindows_wnd_proc):
+ * event-msw.c (emacs_mswindows_quit_p):
+ Get critical quit working.
+
+2001-05-05 Ben Wing <ben@xemacs.org>
+
+ * console-msw.h:
+ * device-msw.c:
+ * device-msw.c (mswindows_get_default_margin):
+ * frame-msw.c (mswindows_size_frame_internal):
+ * frame-msw.c (msprinter_init_frame_1):
+ * frame-msw.c (vars_of_frame_mswindows):
+ Change top/bottom margin defaults to 0.5 inches.
+
+2001-05-01 Martin Buchholz <martin@xemacs.org>
+
+ Fix link error with gcc 3.0 on Linux.
+ * terminfo.c (UP): Remove.
+ * terminfo.c (BC): Remove.
+ * terminfo.c (PC): Remove.
+ They weren't used, and in any case, these symbols should be
+ defined in the *library*.
+
+2001-05-03 Martin Buchholz <martin@xemacs.org>
+
+ * s/aix4.h: Fix crash with xlc -O3.
+ Improve comment explaining how -O3 works.
+
+2001-04-22 zhaoway <zw@debian.org>
+
+ * event-stream.c (is_scrollbar_event): Noop returning 0 if
+ !HAVE_SCROLLBARS.
+
+2001-04-15 Ben Wing <ben@xemacs.org>
+
+ * event-stream.c:
+ * event-stream.c (Fnext_event):
+ * event-stream.c (is_scrollbar_event):
+ * event-stream.c (execute_command_event):
+ Better fix for Yoshiki's `C-x @ h <scrollbar-drag> x causes a
+ crash' problem. His fix introduces other problems. We filter
+ out scrollbar events specifically, making them somewhat invisible
+ to command-building, and not appearing in `this-command-keys'.
+ More work is still needed (see comments in event-stream.c), but
+ this fixes all the major problems.
+
+2001-04-20 Ben Wing <ben@xemacs.org>
+
+ * .cvsignore: Added stuff for Windows.
+
+2001-04-28 Ben Wing <ben@xemacs.org>
+
+ * buffer.c (Ferase_buffer):
+ * editfns.c (buffer_insert1):
+ * editfns.c (Finsert_before_markers):
+ * editfns.c (Finsert_string):
+ * editfns.c (Finsert_char):
+ * editfns.c (Fdelete_region):
+ * editfns.c (Fwiden):
+ * editfns.c (Fnarrow_to_region):
+ remove bogus lines setting zmacs_region_stays to 0.
+
+2001-04-15 Gunnar Evermann <ge204@eng.cam.ac.uk>
+
+ * process-unix.c (unix_open_network_stream): If connect() fails
+ invalidate file descriptor after closing it.
+
+2001-03-08 Mike Alexander <mta@arbortext.com>
+
+ * event-msw.c (mswindows_need_event_in_modal_loop):
+ Don't dispatch a message if we didn't get one.
+ (mswindows_need_event):
+ Terminate the correct process when one exits instead of the first
+ one on Vprocess_list and look for process termination when in
+ mswindows_protect_modal_loop.
+
2001-04-19 Stephen J. Turnbull <stephen@xemacs.org>
* XEmacs 21.4.1 "Copyleft" is released.
implies that the future text is not really related to the past text. */
b->saved_size = Qzero;
- zmacs_region_stays = 0;
return Qnil;
}
Lisp_Object keys);
Lisp_Object mswindows_handle_print_setup_dialog_box (struct frame *f,
Lisp_Object keys);
+int mswindows_get_default_margin (Lisp_Object prop);
void mswindows_register_popup_frame (Lisp_Object frame);
void mswindows_unregister_popup_frame (Lisp_Object frame);
return print_dialog_worker (!UNBOUNDP (device) ? device : settings, 1);
}
+int
+mswindows_get_default_margin (Lisp_Object prop)
+{
+ if (EQ (prop, Qleft_margin)) return 1440;
+ if (EQ (prop, Qright_margin)) return 1440;
+ if (EQ (prop, Qtop_margin)) return 720;
+ if (EQ (prop, Qbottom_margin)) return 720;
+ abort ();
+ return 0;
+}
+
static int
plist_get_margin (Lisp_Object plist, Lisp_Object prop)
{
- Lisp_Object val = Fplist_get (plist, prop, make_int (1440));
+ Lisp_Object val =
+ Fplist_get (plist, prop, make_int (mswindows_get_default_margin (prop)));
if (!INTP (val))
invalid_argument ("Margin value must be an integer", val);
arg = wrong_type_argument (Qchar_or_string_p, arg);
goto retry;
}
- zmacs_region_stays = 0;
UNGCPRO;
}
goto retry;
}
}
- zmacs_region_stays = 0;
return Qnil;
}
struct buffer *b = decode_buffer (buffer, 1);
CHECK_STRING (string);
buffer_insert_lisp_string (b, string);
- zmacs_region_stays = 0;
return Qnil;
}
buffer_insert_raw_string (b, string, n);
#endif
- zmacs_region_stays = 0;
return Qnil;
}
get_buffer_range_char (buf, start, end, &bp_start, &bp_end, 0);
buffer_delete_range (buf, bp_start, bp_end, 0);
- zmacs_region_stays = 0;
return Qnil;
}
\f
{
struct buffer *b = decode_buffer (buffer, 1);
widen_buffer (b, 0);
- zmacs_region_stays = 0;
return Qnil;
}
/* Changing the buffer bounds invalidates any recorded current column. */
invalidate_current_column ();
narrow_line_number_cache (buf);
- zmacs_region_stays = 0;
return Qnil;
}
#include "sysdep.h"
#include "objects-msw.h"
-#include "events-mod.h"
#ifdef HAVE_MSG_SELECT
#include "sysfile.h"
#include "console-tty.h"
/* Fake key modifier which is attached to a quit char event.
Removed upon dequeueing an event */
-#define FAKE_MOD_QUIT 0x80
+#define FAKE_MOD_QUIT (1 << 20)
+#define FAKE_MOD_QUIT_CRITICAL (1 << 21)
/* Timer ID used for button2 emulation */
#define BUTTON_2_TIMER_ID 1
if (sevt->event_type == key_press_event
&& (sevt->event.key.modifiers & FAKE_MOD_QUIT))
{
- sevt->event.key.modifiers &= ~FAKE_MOD_QUIT;
+ sevt->event.key.modifiers &=
+ ~(FAKE_MOD_QUIT | FAKE_MOD_QUIT_CRITICAL);
--mswindows_quit_chars_count;
}
* fetching WM_TIMER messages. Instead of trying to fetch a WM_TIMER
* which will never come when there are no pending timers, which leads
* to deadlock, we simply signal an error.
+ *
+ * It might be possible to combine this with mswindows_drain_windows_queue
+ * which fetches events when not in a modal loop. It's not clear
+ * whether the result would be more complex than is justified.
*/
static void
mswindows_need_event_in_modal_loop (int badly_p)
error ("Deadlock due to an attempt to call next-event in a wrong context");
/* Fetch and dispatch any pending timers */
- GetMessage (&msg, NULL, WM_TIMER, WM_TIMER);
- DispatchMessage (&msg);
+ if (GetMessage (&msg, NULL, WM_TIMER, WM_TIMER) > 0)
+ DispatchMessage (&msg);
}
}
{
int active;
- if (mswindows_in_modal_loop)
- {
- mswindows_need_event_in_modal_loop (badly_p);
- return;
- }
-
while (NILP (mswindows_u_dispatch_event_queue)
&& NILP (mswindows_s_dispatch_event_queue))
{
EMACS_SET_SECS_USECS (sometime, 0, 0);
EMACS_TIME_TO_SELECT_TIME (sometime, select_time_to_block);
pointer_to_this = &select_time_to_block;
+ if (mswindows_in_modal_loop)
+ /* In modal loop with badly_p false, don't care about
+ Windows events. */
+ FD_CLR (windows_fd, &temp_mask);
}
active = select (MAXDESC, &temp_mask, 0, 0, pointer_to_this);
{
if (FD_ISSET (windows_fd, &temp_mask))
{
- mswindows_drain_windows_queue ();
+ if (mswindows_in_modal_loop)
+ mswindows_need_event_in_modal_loop (badly_p);
+ else
+ mswindows_drain_windows_queue ();
}
else
{
}
#else
/* Now try getting a message or process event */
+ DWORD what_events;
+ if (mswindows_in_modal_loop)
+ /* In a modal loop, only look for timer events, and only if
+ we really need one. */
+ {
+ if (badly_p)
+ what_events = QS_TIMER;
+ else
+ what_events = 0;
+ }
+ else
+ /* Look for any event */
+ what_events = QS_ALLINPUT;
+
active = MsgWaitForMultipleObjects (mswindows_waitable_count,
mswindows_waitable_handles,
FALSE, badly_p ? INFINITE : 0,
- QS_ALLINPUT);
+ what_events);
/* This will assert if handle being waited for becomes abandoned.
Not the case currently tho */
else if (active == WAIT_OBJECT_0 + mswindows_waitable_count)
{
/* Got your message, thanks */
- mswindows_drain_windows_queue ();
+ if (mswindows_in_modal_loop)
+ mswindows_need_event_in_modal_loop (badly_p);
+ else
+ mswindows_drain_windows_queue ();
}
else
{
{
/* None. This means that the process handle itself has signaled.
Remove the handle from the wait vector, and make status_notify
- note the exited process */
+ note the exited process. First find the process object if
+ possible. */
+ LIST_LOOP_3 (vaffanculo, Vprocess_list, vproctail)
+ if (get_nt_process_handle (XPROCESS (vaffanculo)) ==
+ mswindows_waitable_handles [ix])
+ break;
mswindows_waitable_handles [ix] =
mswindows_waitable_handles [--mswindows_waitable_count];
kick_status_notify ();
process, and (2) status notifications will happen in
accept-process-output, sleep-for, and sit-for. */
/* #### horrible kludge till my real process fixes go in.
+ #### Replaced with a slightly less horrible kluge that
+ at least finds the right process instead of axing the
+ first one on the list.
*/
- if (!NILP (Vprocess_list))
+ if (!NILP (vproctail))
{
- Lisp_Object vaffanculo = XCAR (Vprocess_list);
mswindows_enqueue_process_event (XPROCESS (vaffanculo));
}
else /* trash me soon. */
BYTE keymap_orig[256];
BYTE keymap_sticky[256];
int has_AltGr = mswindows_current_layout_has_AltGr ();
- int mods = 0;
+ int mods = 0, mods_with_shift = 0;
int extendedp = lParam & 0x1000000;
Lisp_Object keysym;
int sticky_changed;
memcpy (keymap_sticky, keymap_orig, 256);
mods = mswindows_modifier_state (keymap_sticky, (DWORD) -1, has_AltGr);
+ mods_with_shift = mods;
/* Handle non-printables */
if (!NILP (keysym = mswindows_key_to_emacs_keysym (wParam, mods,
|| PeekMessage (&tranmsg, hwnd, WM_SYSCHAR, WM_SYSCHAR,
PM_REMOVE))
{
- int mods1 = mods;
+ int mods_with_quit = mods;
WPARAM ch = tranmsg.wParam;
/* If a quit char with no modifiers other than control and
shift, then mark it with a fake modifier, which is removed
upon dequeueing the event */
- /* #### This might also not withstand localization, if
- quit character is not a latin-1 symbol */
+ /* !!#### Fix this in my mule ws -- replace current_buffer
+ with 0 */
if (((quit_ch < ' ' && (mods & XEMACS_MOD_CONTROL)
- && quit_ch + 'a' - 1 == ch)
+ && DOWNCASE (current_buffer, quit_ch + 'a' - 1) ==
+ DOWNCASE (current_buffer, ch))
|| (quit_ch >= ' ' && !(mods & XEMACS_MOD_CONTROL)
- && quit_ch == ch))
- && ((mods & ~(XEMACS_MOD_CONTROL | XEMACS_MOD_SHIFT))
+ && DOWNCASE (current_buffer, quit_ch) ==
+ DOWNCASE (current_buffer, ch)))
+ && ((mods_with_shift &
+ ~(XEMACS_MOD_CONTROL | XEMACS_MOD_SHIFT))
== 0))
{
- mods1 |= FAKE_MOD_QUIT;
+ mods_with_quit |= FAKE_MOD_QUIT;
+ if (mods_with_shift & XEMACS_MOD_SHIFT)
+ mods_with_quit |= FAKE_MOD_QUIT_CRITICAL;
++mswindows_quit_chars_count;
}
else if (potential_accelerator && !got_accelerator &&
got_accelerator = 1;
break;
}
- mswindows_enqueue_keypress_event (hwnd, make_char (ch), mods1);
+ mswindows_enqueue_keypress_event (hwnd, make_char (ch),
+ mods_with_quit);
} /* while */
/* This generates WM_SYSCHAR messages, which are interpreted
if (mswindows_in_modal_loop)
return;
- /* Drain windows queue. This sets up number of quit characters in
- the queue */
+ /* Drain windows queue. This sets up number of quit characters in
+ the queue. */
mswindows_drain_windows_queue ();
if (mswindows_quit_chars_count > 0)
emacs_event = mswindows_cancel_dispatch_event (&match_against);
assert (!NILP (emacs_event));
- if (XEVENT(emacs_event)->event.key.modifiers & XEMACS_MOD_SHIFT)
+ if (XEVENT (emacs_event)->event.key.modifiers &
+ FAKE_MOD_QUIT_CRITICAL)
critical_p = 1;
- Fdeallocate_event(emacs_event);
+ Fdeallocate_event (emacs_event);
}
Vquit_flag = critical_p ? Qcritical : Qt;
{
init_slurp_stream ();
init_shove_stream ();
-#if defined (HAVE_SOCKETS) && !defined(HAVE_MSG_SELECT)
+#if defined (HAVE_SOCKETS) && !defined (HAVE_MSG_SELECT)
init_winsock_stream ();
#endif
}
static void push_recent_keys (Lisp_Object event);
static void dribble_out_event (Lisp_Object event);
static void execute_internal_event (Lisp_Object event);
+static int is_scrollbar_event (Lisp_Object event);
DEFUN ("next-event", Fnext_event, 0, 2, 0, /*
Return the next available event.
*/
if (store_this_key)
{
- push_this_command_keys (event);
+ if (!is_scrollbar_event (event)) /* #### not quite right, see
+ comment in execute_command_event */
+ push_this_command_keys (event);
if (!inhibit_input_event_recording)
push_recent_keys (event);
dribble_out_event (event);
}
}
+static int
+is_scrollbar_event (Lisp_Object event)
+{
+ Lisp_Object fun;
+
+ if (XEVENT (event)->event_type != misc_user_event)
+ return 0;
+ fun = XEVENT (event)->event.misc.function;
+
+ return (EQ (fun, Qscrollbar_line_up) ||
+ EQ (fun, Qscrollbar_line_down) ||
+ EQ (fun, Qscrollbar_page_up) ||
+ EQ (fun, Qscrollbar_page_down) ||
+ EQ (fun, Qscrollbar_to_top) ||
+ EQ (fun, Qscrollbar_to_bottom) ||
+ EQ (fun, Qscrollbar_vertical_drag) ||
+ EQ (fun, Qscrollbar_char_left) ||
+ EQ (fun, Qscrollbar_char_right) ||
+ EQ (fun, Qscrollbar_page_left) ||
+ EQ (fun, Qscrollbar_page_right) ||
+ EQ (fun, Qscrollbar_to_left) ||
+ EQ (fun, Qscrollbar_to_right) ||
+ EQ (fun, Qscrollbar_horizontal_drag));
+}
+
static void
execute_command_event (struct command_builder *command_builder,
Lisp_Object event)
GCPRO1 (event); /* event may be freshly created */
- /* To fix C-x @ h <scrollbar-drag> x crash. */
- if (XEVENT (event)->event_type != misc_user_event)
+ /* #### This call to is_scrollbar_event() isn't quite right, but
+ fixing properly it requires more work than can go into 21.4.
+ (We really need to split out menu, scrollbar, dialog, and other
+ types of events from misc-user, and put the remaining ones in a
+ new `user-eval' type that behaves like an eval event but is a
+ user event and thus has all of its semantics -- e.g. being
+ delayed during `accept-process-output' and similar wait states.)
+
+ The real issue here is that "user events" and "command events"
+ are not the same thing, but are very much confused in
+ event-stream.c. User events are, essentially, any event that
+ should be delayed by accept-process-output, should terminate a
+ sit-for, etc. -- basically, any event that needs to be processed
+ synchronously with key and mouse events. Command events are
+ those that participate in command building; scrollbar events
+ clearly don't belong because they should be transparent in a
+ sequence like C-x @ h <scrollbar-drag> x, which used to cause a
+ crash before checks similar to the is_scrollbar_event() call were
+ added. Do other events belong with scrollbar events? I'm not
+ sure; we need to categorize all misc-user events and see what
+ their semantics are.
+
+ (You might ask, why do scrollbar events need to be user events?
+ That's a good question. The answer seems to be that they can
+ change point, and having this happen asynchronously would be a
+ very bad idea. According to the "proper" functioning of
+ scrollbars, this should not happen, but XEmacs does not allow
+ point to go outside of the window.)
+
+ Scrollbar events and similar non-command events should obviously
+ not be recorded in this-command-keys, so we need to check for
+ this in next-event.
+
+ #### We call reset_current_events() twice in this function --
+ #### here, and later as a result of reset_this_command_keys().
+ #### This is almost certainly wrong; need to figure out what's
+ #### correct.
+
+ #### We need to figure out what's really correct w.r.t. scrollbar
+ #### events. With these new fixes in, it actually works to do
+ #### C-x <scrollbar-drag> 5 2, but the key echo gets messed up
+ #### (starts over at 5). We really need to be special-casing
+ #### scrollbar events at a lower level, and not really passing
+ #### them through the command builder at all. (e.g. do scrollbar
+ #### events belong in macros??? doubtful; probably only the
+ #### point movement, if any, belongs, special-cased as a
+ #### pseudo-issued M-x goto-char command). #### Need more work
+ #### here. Do this when separating out scrollbar events.
+ */
+
+ if (!is_scrollbar_event (event))
reset_current_events (command_builder);
switch (XEVENT (event)->event_type)
/* Emacs 18 doesn't unconditionally clear the echoed keystrokes,
so we don't either */
- if (XEVENT (event)->event_type != misc_user_event)
+
+ if (!is_scrollbar_event (event))
reset_this_command_keys (make_console (con), 0);
}
}
}
}
-void mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest)
+void
+mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest)
{
RECT rect, ws_rect;
int pixel_width, pixel_height;
int size_p = (dest->width >=0 || dest->height >=0);
int move_p = (dest->top >=0 || dest->left >=0);
- char_to_real_pixel_size (f, dest->width, dest->height, &pixel_width, &pixel_height);
+ char_to_real_pixel_size (f, dest->width, dest->height, &pixel_width,
+ &pixel_height);
if (dest->width < 0)
pixel_width = FRAME_PIXWIDTH (f);
f->frame_data = xnew_and_zero (struct msprinter_frame);
- /* Default margin size is 1" = 1440 twips */
- FRAME_MSPRINTER_TOP_MARGIN(f) = 1440;
- FRAME_MSPRINTER_BOTTOM_MARGIN(f) = 1440;
- FRAME_MSPRINTER_LEFT_MARGIN(f) = 1440;
- FRAME_MSPRINTER_RIGHT_MARGIN(f) = 1440;
+ FRAME_MSPRINTER_TOP_MARGIN (f) =
+ mswindows_get_default_margin (Qtop_margin);
+ FRAME_MSPRINTER_BOTTOM_MARGIN (f) =
+ mswindows_get_default_margin (Qbottom_margin);
+ FRAME_MSPRINTER_LEFT_MARGIN (f) =
+ mswindows_get_default_margin (Qleft_margin);
+ FRAME_MSPRINTER_RIGHT_MARGIN (f) =
+ mswindows_get_default_margin (Qright_margin);
/* Negative for "uinspecified" */
- FRAME_MSPRINTER_CHARWIDTH(f) = -1;
- FRAME_MSPRINTER_CHARHEIGHT(f) = -1;
+ FRAME_MSPRINTER_CHARWIDTH (f) = -1;
+ FRAME_MSPRINTER_CHARHEIGHT (f) = -1;
}
static void
top-margin typographical unit of measurement,
right-margin equal to 1/1440 of an inch, or 1/20 of a
bottom-margin point, and roughly equal to 7/400 of a
- millimeter. If not specified, each margin
- defaults to one inch (25.4 mm).
+ millimeter. If not specified, the left
+ and right margins default to 1 inch
+ (25.4 mm) and the top and bottom margins
+ to 0.5 inch (12.7 mm).
MARGINS NOTE. right-margin and bottom-margin are overridden by
the height and width properties. If you want to specify size
want to specify right/bottom margins, set height/width in this
plist to nil, as in this example:
- (setq default-frame-plist '(height 55 'width 80)
- default-msprinter-frame-plist '(height nil 'width nil))
+ (setq default-frame-plist '(height 55 width 80)
+ default-msprinter-frame-plist '(height nil width nil))
See also `default-frame-plist', which specifies properties which apply
to all frames, not just mswindows frames.
short_name = value;
}
- if (EQ (keyword, Qlong_name))
+ else if (EQ (keyword, Qlong_name))
{
CHECK_STRING (value);
long_name = value;
failed_connect = 1;
close (s);
+ s = -1;
speed_up_interrupts ();
#ifdef __xlC__ /* "eXceLlent C compiler" ?! */
#if __xlC__ >= 1200
-/* IBM's C compiler miscompiles bytecount_to_charcount at high levels
- of optimization. From IBM's docs:
+/* IBM's C compiler option `-O3' is too aggressive.
+ We recommend instead the combination `-O3 -qstrict', which seems safe.
- -qstrict turns off the following optimizations:
+ cc -O3 miscompiles at least two functions. From IBM's docs:
- Performing code motion and scheduling on computations such as loads
- and floating-point computations that may trigger an exception. */
+ IBM> -qstrict turns off the following optimizations:
+
+ IBM> Performing code motion and scheduling on computations such as loads
+ IBM> and floating-point computations that may trigger an exception.
+
+ Nevertheless, we try to work with these compiler options. */
#pragma option_override (bytecount_to_charcount, "opt(strict,yes)")
+#pragma option_override (Fexpand_file_name, "opt(strict,yes)")
#endif /* recent IBM C compiler */
#endif /* IBM's C compiler */
#include <string.h>
-/* Define these variables that serve as global parameters to termcap,
- so that we do not need to conditionalize the places in Emacs
- that set them. */
-
-char *UP, *BC, PC;
-
/* Every little bit of this God-damned file has caused all manner
of headaches due to inconsistent and incorrect header files
on one system or other, and we don't currently need anything here,
+2001-05-10 Stephen J. Turnbull <stephen@xemacs.org>
+
+ * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released.
+
2001-04-19 Stephen J. Turnbull <stephen@xemacs.org>
* XEmacs 21.4.1 "Copyleft" is released.
emacs_is_beta=
emacs_major_version=21
emacs_minor_version=4
-emacs_beta_version=1
-xemacs_codename="Copyleft"
+emacs_beta_version=2
+xemacs_codename="Developer-Friendly Unix APIs"
infodock_major_version=4
infodock_minor_version=0
infodock_build_version=8