From: tomo Date: Thu, 29 Aug 2002 07:50:40 +0000 (+0000) Subject: XEmacs 21.4.2 "Developer-Friendly Unix APIs". X-Git-Tag: r21-4-2~1 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=3f6ecf401c01c83743af2c1e068f57e8d2e2e410;p=chise%2Fxemacs-chise.git.1 XEmacs 21.4.2 "Developer-Friendly Unix APIs". --- diff --git a/ChangeLog b/ChangeLog index 51b67ac..94b779f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,30 @@ +2001-05-10 Stephen J. Turnbull + + * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released. + +2001-05-04 Martin Buchholz + + * 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 + + * etc/FTP: Updated FTP mirrors list. + +2001-05-04 Ben Wing + + * etc\NEWS: Remove kill-whole-line changes. + +2001-04-25 Ben Wing + + * PROBLEMS: + * PROBLEMS (Note): + * PROBLEMS (ftp): + Correct general info about init file. + Fix up Cygwin section. + 2001-04-19 Stephen J. Turnbull * XEmacs 21.4.1 "Copyleft" is released. diff --git a/PROBLEMS b/PROBLEMS index d932df3..b7362e4 100644 --- a/PROBLEMS +++ b/PROBLEMS @@ -20,10 +20,10 @@ info about the Outline mode. 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 @@ -552,12 +552,38 @@ Note: Much of the above entry is probably not valid for XEmacs 21.0 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 @@ -568,10 +594,9 @@ mean configure is slower but more reliable. *** 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. @@ -579,17 +604,6 @@ This is a known problem. It can be remedied with cygwin b20 or greater 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 @@ -597,9 +611,9 @@ obtain makeinfo from somewhere or build it yourself. *** 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. diff --git a/configure.in b/configure.in index 4d845bf..cd2975f 100644 --- a/configure.in +++ b/configure.in @@ -1534,9 +1534,11 @@ case "$canonical" in 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 diff --git a/etc/FTP b/etc/FTP index 2074ec4..bdb2ce6 100644 --- a/etc/FTP +++ b/etc/FTP @@ -1,94 +1,186 @@ - 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 + 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. diff --git a/etc/NEWS b/etc/NEWS index 9140731..e405ebc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -86,7 +86,6 @@ consulted for a more detailed list of changes. -- 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. @@ -522,14 +521,6 @@ is t. This is not to be confused with `menu-accelerator-enabled', which enables the use of Alt+ 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'. diff --git a/lib-src/.cvsignore b/lib-src/.cvsignore index 8be3c26..d18aa8b 100644 --- a/lib-src/.cvsignore +++ b/lib-src/.cvsignore @@ -23,3 +23,4 @@ gnuclient ootags ellcc DOC +*.pdb diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 67bd392..5b6c1e0 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,11 @@ +2001-05-10 Stephen J. Turnbull + + * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released. + +2001-04-20 Ben Wing + + * .cvsignore: Added stuff for Windows. + 2001-04-19 Stephen J. Turnbull * XEmacs 21.4.1 "Copyleft" is released. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 955d63c..96b1589 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,118 @@ +2001-05-10 Stephen J. Turnbull + + * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released. + +2001-05-04 Ben Wing + + * 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 + + * 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 + + * 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 + + * subr.el (error): Complete list of errors in doc string. + +2001-04-22 Ben Wing + + * bytecomp-runtime.el (byte-compiler-options): Correct doc string. + +2001-05-03 Adrian Aichner + + * 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 + + * about.el (about-finish-buffer): Make sure the last change works + even if EVENT is nil. + +2001-04-24 Hrvoje Niksic + + * 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 + + * cus-edit.el (custom-display): Support the GTK Window System also. + +2001-04-30 Ben Wing + + * 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 + + * 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 + + * about.el (about-personal-info): Update my bio. + (about-hacker-contribution): Ditto. + +2001-04-23 Stephen J. Turnbull + + * startup.el (splash-frame-body): Update copyright notices: Ben, FSF. + +2001-04-19 Andy Piper + + * 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 * XEmacs 21.4.1 "Copyleft" is released. diff --git a/lisp/about.el b/lisp/about.el index 86aa143..f24468b 100644 --- a/lisp/about.el +++ b/lisp/about.el @@ -150,7 +150,7 @@ (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") @@ -188,6 +188,7 @@ ;; 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") @@ -214,8 +215,7 @@ (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.") @@ -292,19 +292,33 @@ 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) @@ -740,7 +754,15 @@ hair various colours (see ") (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 @@ -840,21 +862,12 @@ looking for a job involving lisp programming, French and Russian.\n")) 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 @@ -957,16 +970,39 @@ Sorry, no personal information available about me yet.\n")) 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 @@ -1010,12 +1046,13 @@ See: ") (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 @@ -1175,9 +1212,11 @@ To see some of these have a look at ") "\ 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 "\ @@ -1209,11 +1248,11 @@ MS Windows operating systems.\n")) 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 "\ @@ -1308,7 +1347,8 @@ See ") (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 "\ @@ -1416,8 +1456,9 @@ Sorry, no information about my XEmacs contributions yet.\n")) (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 "\ @@ -1498,9 +1539,27 @@ early client of the external Emacs widget.\n")) (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 "\ @@ -1521,7 +1580,9 @@ Beta tester, manager of the various XEmacs mailing lists and binary 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")) @@ -1601,9 +1662,10 @@ Author of the XEmacs Drag'n'Drop API.\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 diff --git a/lisp/build-report.el b/lisp/build-report.el index 51c8cc4..e209305 100644 --- a/lisp/build-report.el +++ b/lisp/build-report.el @@ -1,10 +1,8 @@ ;;; build-report.el --- Automatically formatted build reports for XEmacs -;; Copyright (C) 1997 Adrian Aichner +;; Copyright (C) 1997-2001 Adrian Aichner ;; Author: Adrian Aichner -;; Date: Sun., Apr. 20, 1997-2000. -;; Version: $Revision: 1.8 $ ;; Keywords: internal ;; This file is part of XEmacs. @@ -164,7 +162,7 @@ may use following alias 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 diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index b27db59..5de0795 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -2302,6 +2302,10 @@ Only match the specified window systems") :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") diff --git a/lisp/dialog.el b/lisp/dialog.el index b142d15..aae2d92 100644 --- a/lisp/dialog.el +++ b/lisp/dialog.el @@ -280,9 +280,9 @@ The keywords allowed are 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 @@ -307,12 +307,11 @@ See also the `page-setup' and `print-setup' dialog boxes. 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 @@ -328,7 +327,7 @@ Exactly one of these keywords must be given. 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 @@ -341,6 +340,9 @@ is used to initialize the dialog. 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. @@ -641,17 +643,16 @@ The keywords allowed are (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)) diff --git a/lisp/menubar-items.el b/lisp/menubar-items.el index 9749326..499d150 100644 --- a/lisp/menubar-items.el +++ b/lisp/menubar-items.el @@ -141,15 +141,18 @@ which will not be used as accelerators." ["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) diff --git a/lisp/package-net.el b/lisp/package-net.el index 015c990..4bc0fd8 100644 --- a/lisp/package-net.el +++ b/lisp/package-net.el @@ -99,10 +99,10 @@ ;; ;; 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 @@ -133,7 +133,7 @@ DESTDIR defaults to the value of `data-directory'." (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") @@ -142,7 +142,7 @@ DESTDIR defaults to the value of `data-directory'." (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") @@ -171,14 +171,52 @@ DESTDIR defaults to the value of `data-directory'." (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) diff --git a/lisp/printer.el b/lisp/printer.el index 2a9cc7b..8245398 100644 --- a/lisp/printer.el +++ b/lisp/printer.el @@ -53,8 +53,7 @@ ;; 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." @@ -68,10 +67,19 @@ printers." :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. @@ -79,12 +87,13 @@ This can be: 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 @@ -93,6 +102,8 @@ This can be: 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. @@ -105,64 +116,196 @@ This can be: :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 @@ -174,39 +317,110 @@ PostScript printer. Under MS Windows, the built-in printing support is used." (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")))) diff --git a/lisp/simple.el b/lisp/simple.el index 4ff4777..89afe34 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1115,8 +1115,7 @@ Repeating \\[universal-argument] without digits or minus sign (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 @@ -1125,7 +1124,7 @@ 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) @@ -1147,8 +1146,7 @@ like `kill-whole-line-when-at-beginning'. If you simply want (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)))) @@ -1161,7 +1159,7 @@ arguments kill lines backward. 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. @@ -1177,7 +1175,7 @@ current line, use `kill-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 @@ -2088,9 +2086,7 @@ either a character or a symbol, uppercase or lowercase." (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. @@ -3870,14 +3866,28 @@ If active regions are in use (i.e. `zmacs-regions' is true), this means that 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 diff --git a/lisp/startup.el b/lisp/startup.el index 394074c..d885baa 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -1124,11 +1124,11 @@ XEmacs, by either running the command `xemacs-mule', or by using the X resource ": 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" diff --git a/lisp/subr.el b/lisp/subr.el index bbde00d..dcaf367 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -633,6 +633,9 @@ error malformed-property-list circular-list circular-property-list + invalid-regexp + specifier-syntax-error + invalid-argument wrong-type-argument @@ -640,28 +643,47 @@ error 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', diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index 46c00c6..2f1020c 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -1,3 +1,12 @@ +2001-05-10 Stephen J. Turnbull + + * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released. + +2001-04-25 Ben Wing + + * lwlib-utils.c (destroy_all_children): fix warning reported by + Isaac Hollander . + 2001-04-19 Stephen J. Turnbull * XEmacs 21.4.1 "Copyleft" is released. diff --git a/lwlib/lwlib-utils.c b/lwlib/lwlib-utils.c index 9728c6a..bca952e 100644 --- a/lwlib/lwlib-utils.c +++ b/lwlib/lwlib-utils.c @@ -43,7 +43,7 @@ destroy_all_children (Widget widget) { /* 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) diff --git a/man/ChangeLog b/man/ChangeLog index a1b7180..eca2d09 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,16 @@ +2001-05-10 Stephen J. Turnbull + + * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released. + +2001-05-07 Martin Buchholz + + * make-stds.texi: Support makeinfo 3.12 + +2001-04-26 John H. Palmieri + + * xemacs/frame.texi (XEmacs under X): Document default-frame-plist + rather than default-frame-alist. + 2001-04-19 Stephen J. Turnbull * XEmacs 21.4.1 "Copyleft" is released. diff --git a/man/make-stds.texi b/man/make-stds.texi index 68faa8d..7466284 100644 --- a/man/make-stds.texi +++ b/man/make-stds.texi @@ -811,7 +811,7 @@ installdirs: mkinstalldirs @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)) diff --git a/man/xemacs/frame.texi b/man/xemacs/frame.texi index 35e4200..c12e49c 100644 --- a/man/xemacs/frame.texi +++ b/man/xemacs/frame.texi @@ -507,15 +507,19 @@ The function @code{switch-to-buffer-other-frame} is just like 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 diff --git a/netinstall/ChangeLog b/netinstall/ChangeLog index 705c00a..80296c0 100644 --- a/netinstall/ChangeLog +++ b/netinstall/ChangeLog @@ -1,3 +1,16 @@ +2001-05-10 Stephen J. Turnbull + + * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released. + +2001-04-19 Andy Piper + + * 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 * XEmacs 21.4.1 "Copyleft" is released. @@ -227,5 +240,5 @@ * 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 $ diff --git a/netinstall/Makefile.in.in b/netinstall/Makefile.in.in index 6edc13f..a290201 100644 --- a/netinstall/Makefile.in.in +++ b/netinstall/Makefile.in.in @@ -151,12 +151,12 @@ setup.exe: $(OBJS) -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." @@ -207,7 +207,7 @@ choose.o: choose.cc win32.h dialog.h resource.h state.h ini.h concat.h \ 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 \ diff --git a/netinstall/reginfo.h b/netinstall/reginfo.h index 38a5d4c..5c2c63d 100644 --- a/netinstall/reginfo.h +++ b/netinstall/reginfo.h @@ -20,8 +20,8 @@ Copyright (C) 2000 Andy Piper. */ #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: @@ -36,7 +36,7 @@ Copyright (C) 2000 Andy Piper. */ * \site-packages * \mule-packages * \XEmacs-21.4 - * \i386-pc-win32 + * \i586-pc-win32 * \etc * \info * \lisp @@ -46,11 +46,11 @@ Copyright (C) 2000 Andy Piper. */ * /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 */ diff --git a/nt/.cvsignore b/nt/.cvsignore index 8bd15e7..0f2069a 100644 --- a/nt/.cvsignore +++ b/nt/.cvsignore @@ -2,3 +2,4 @@ config.inc xemacs.ncb xemacs.opt xemacs.plg +obj diff --git a/nt/ChangeLog b/nt/ChangeLog index 20ed43f..0ebccc8 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,49 @@ +2001-05-10 Stephen J. Turnbull + + * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released. + +2001-05-09 Ben Wing + + * xemacs.mak (OS): + do not warn about gtk when we're not trying to compile with it. + +2001-04-20 Ben Wing + + * .cvsignore: Added stuff for Windows. + +2001-05-01 Ben Wing + + * config.inc.samp (MAKEINFO): point at more standard c: not f:. + +2001-05-01 Adrian Aichner + + * 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 + + * 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 + + * 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 * XEmacs 21.4.1 "Copyleft" is released. diff --git a/nt/compface.mak b/nt/compface.mak index 5ff065f..1fe4f5a 100644 --- a/nt/compface.mak +++ b/nt/compface.mak @@ -38,3 +38,6 @@ all: libcompface.lib libcompface.lib: $(OBJS) link.exe -lib -nologo -out:$@ $(OBJS) + +clean: $(OBJS) + -rm -f $(OBJS) libcompface.lib diff --git a/nt/config.inc.samp b/nt/config.inc.samp index 3268522..bbd4024 100644 --- a/nt/config.inc.samp +++ b/nt/config.inc.samp @@ -58,7 +58,7 @@ COMPFACE_DIR= # 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 ############################################################################ diff --git a/nt/xemacs.mak b/nt/xemacs.mak index e7ddf7a..a43c94c 100644 --- a/nt/xemacs.mak +++ b/nt/xemacs.mak @@ -69,10 +69,13 @@ PROGRAM_DEFINES=-DINFODOCK \ -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)\" \ @@ -129,6 +132,9 @@ HAVE_XFACE=0 !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 @@ -230,6 +236,10 @@ CONFIG_ERROR=1 !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 @@ -315,13 +325,13 @@ DEPEND=0 ! 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 @@ -543,8 +553,9 @@ $(LIB_SRC)/movemail.exe: $(LIB_SRC)/movemail.c $(LIB_SRC)/pop.c $(ETAGS_DEPS) 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 \ @@ -822,8 +833,12 @@ DOC_SRC11=\ # 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 @@ -1057,7 +1072,7 @@ $(TEMACS): $(TEMACS_INCLUDES) $(TEMACS_OBJS) $(OUTDIR)\xemacs.res !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 @@ -1377,7 +1392,7 @@ $(PROGNAME) : $(TEMACS) $(TEMACS_DIR)\NEEDTODUMP # 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 $@ @@ -1397,7 +1412,7 @@ install: all @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)" @@ -1407,12 +1422,12 @@ install: all @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 @@ -1484,6 +1499,14 @@ XEmacs $(XEMACS_VERSION_STRING) $(xemacs_codename:"=\") configured for `$(EMACS_ !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 @@ -1581,8 +1604,8 @@ update-elc-2: 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. diff --git a/src/.cvsignore b/src/.cvsignore index 86278de..54f7656 100644 --- a/src/.cvsignore +++ b/src/.cvsignore @@ -13,3 +13,8 @@ SATISFIED update-elc.stamp *.so.* gmon.out +NEEDTODUMP +Xpm.dll +temacs.bsc +temacs.pdb +temacs.map diff --git a/src/ChangeLog b/src/ChangeLog index 7e22874..91c0222 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,91 @@ +2001-05-10 Stephen J. Turnbull + + * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released. + +2001-05-08 Yoshiaki Kasahara + + * mule-charset.c (Fmake_charset): Add missing else. + +2001-04-23 Ben Wing + + * 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 + + * 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 + + 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 + + * s/aix4.h: Fix crash with xlc -O3. + Improve comment explaining how -O3 works. + +2001-04-22 zhaoway + + * event-stream.c (is_scrollbar_event): Noop returning 0 if + !HAVE_SCROLLBARS. + +2001-04-15 Ben Wing + + * 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 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 + + * .cvsignore: Added stuff for Windows. + +2001-04-28 Ben Wing + + * 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 + + * process-unix.c (unix_open_network_stream): If connect() fails + invalidate file descriptor after closing it. + +2001-03-08 Mike Alexander + + * 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 * XEmacs 21.4.1 "Copyleft" is released. diff --git a/src/buffer.c b/src/buffer.c index d2245f7..43eaac9 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1624,7 +1624,6 @@ BUFFER defaults to the current buffer if omitted. implies that the future text is not really related to the past text. */ b->saved_size = Qzero; - zmacs_region_stays = 0; return Qnil; } diff --git a/src/console-msw.h b/src/console-msw.h index ad6cca5..7d63746 100644 --- a/src/console-msw.h +++ b/src/console-msw.h @@ -378,6 +378,7 @@ Lisp_Object mswindows_handle_page_setup_dialog_box (struct frame *f, 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); diff --git a/src/device-msw.c b/src/device-msw.c index da2727c..17a2a25 100644 --- a/src/device-msw.c +++ b/src/device-msw.c @@ -792,10 +792,22 @@ mswindows_handle_print_dialog_box (struct frame *f, Lisp_Object keys) 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); diff --git a/src/editfns.c b/src/editfns.c index a8e04a0..36417c0 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1490,7 +1490,6 @@ buffer_insert1 (struct buffer *buf, Lisp_Object arg) arg = wrong_type_argument (Qchar_or_string_p, arg); goto retry; } - zmacs_region_stays = 0; UNGCPRO; } @@ -1551,7 +1550,6 @@ Any other markers at the point of insertion also end up after the text. goto retry; } } - zmacs_region_stays = 0; return Qnil; } @@ -1567,7 +1565,6 @@ BUFFER defaults to the current buffer. struct buffer *b = decode_buffer (buffer, 1); CHECK_STRING (string); buffer_insert_lisp_string (b, string); - zmacs_region_stays = 0; return Qnil; } @@ -1638,7 +1635,6 @@ text into. If BUFFER is nil, the current buffer is assumed. buffer_insert_raw_string (b, string, n); #endif - zmacs_region_stays = 0; return Qnil; } @@ -2004,7 +2000,6 @@ If optional third arg BUFFER is nil, the current buffer is assumed. 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; } @@ -2041,7 +2036,6 @@ If BUFFER is nil, the current buffer is assumed. { struct buffer *b = decode_buffer (buffer, 1); widen_buffer (b, 0); - zmacs_region_stays = 0; return Qnil; } @@ -2077,7 +2071,6 @@ or markers) bounding the text that should remain visible. /* Changing the buffer bounds invalidates any recorded current column. */ invalidate_current_column (); narrow_line_number_cache (buf); - zmacs_region_stays = 0; return Qnil; } diff --git a/src/event-msw.c b/src/event-msw.c index 1350d26..49be245 100644 --- a/src/event-msw.c +++ b/src/event-msw.c @@ -65,7 +65,6 @@ Boston, MA 02111-1307, USA. */ #include "sysdep.h" #include "objects-msw.h" -#include "events-mod.h" #ifdef HAVE_MSG_SELECT #include "sysfile.h" #include "console-tty.h" @@ -87,7 +86,8 @@ typedef unsigned int SOCKET; /* 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 @@ -1048,7 +1048,8 @@ mswindows_dequeue_dispatch_event (void) 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; } @@ -1340,6 +1341,10 @@ mswindows_drain_windows_queue (void) * 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) @@ -1363,8 +1368,8 @@ 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); } } @@ -1380,12 +1385,6 @@ mswindows_need_event (int badly_p) { 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)) { @@ -1402,6 +1401,10 @@ mswindows_need_event (int badly_p) 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); @@ -1415,7 +1418,10 @@ mswindows_need_event (int badly_p) { 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 { @@ -1480,10 +1486,24 @@ mswindows_need_event (int badly_p) } #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 */ @@ -1499,7 +1519,10 @@ mswindows_need_event (int badly_p) 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 { @@ -1516,7 +1539,12 @@ mswindows_need_event (int badly_p) { /* 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 (); @@ -1525,10 +1553,12 @@ mswindows_need_event (int badly_p) 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. */ @@ -2118,7 +2148,7 @@ mswindows_wnd_proc (HWND hwnd, UINT message_, WPARAM wParam, LPARAM lParam) 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; @@ -2153,6 +2183,7 @@ mswindows_wnd_proc (HWND hwnd, UINT message_, WPARAM wParam, LPARAM lParam) 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, @@ -2221,22 +2252,27 @@ mswindows_wnd_proc (HWND hwnd, UINT message_, WPARAM wParam, LPARAM lParam) || 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 && @@ -2245,7 +2281,8 @@ mswindows_wnd_proc (HWND hwnd, UINT message_, WPARAM wParam, LPARAM lParam) 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 @@ -3435,8 +3472,8 @@ emacs_mswindows_quit_p (void) 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) @@ -3454,10 +3491,11 @@ emacs_mswindows_quit_p (void) 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; @@ -3730,7 +3768,7 @@ lstream_type_create_mswindows_selectable (void) { 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 } diff --git a/src/event-stream.c b/src/event-stream.c index 8bd273f..00fd549 100644 --- a/src/event-stream.c +++ b/src/event-stream.c @@ -2010,6 +2010,7 @@ static void push_this_command_keys (Lisp_Object event); 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. @@ -2270,7 +2271,9 @@ The returned event will be one of the following types: */ 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); @@ -3757,6 +3760,31 @@ lookup_command_event (struct command_builder *command_builder, } } +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) @@ -3767,8 +3795,57 @@ execute_command_event (struct command_builder *command_builder, GCPRO1 (event); /* event may be freshly created */ - /* To fix C-x @ h 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 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 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) @@ -3863,7 +3940,8 @@ execute_command_event (struct command_builder *command_builder, /* 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); } } diff --git a/src/frame-msw.c b/src/frame-msw.c index 60e60e4..d66f6b7 100644 --- a/src/frame-msw.c +++ b/src/frame-msw.c @@ -642,13 +642,15 @@ mswindows_set_frame_properties (struct frame *f, Lisp_Object plist) } } -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); @@ -806,15 +808,18 @@ msprinter_init_frame_1 (struct frame *f, Lisp_Object props) 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 @@ -1182,8 +1187,10 @@ set at any time, except as otherwise noted): 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 @@ -1194,8 +1201,8 @@ set at any time, except as otherwise noted): 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. diff --git a/src/mule-charset.c b/src/mule-charset.c index a0ccd35..8c5b697 100644 --- a/src/mule-charset.c +++ b/src/mule-charset.c @@ -693,7 +693,7 @@ character set. Recognized properties are: short_name = value; } - if (EQ (keyword, Qlong_name)) + else if (EQ (keyword, Qlong_name)) { CHECK_STRING (value); long_name = value; diff --git a/src/process-unix.c b/src/process-unix.c index 462fb55..ec93385 100644 --- a/src/process-unix.c +++ b/src/process-unix.c @@ -1764,6 +1764,7 @@ unix_open_network_stream (Lisp_Object name, Lisp_Object host, Lisp_Object servic failed_connect = 1; close (s); + s = -1; speed_up_interrupts (); diff --git a/src/s/aix4.h b/src/s/aix4.h index fe19cda..56bd1a1 100644 --- a/src/s/aix4.h +++ b/src/s/aix4.h @@ -17,14 +17,19 @@ struct sockaddr_dl; #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 */ diff --git a/src/terminfo.c b/src/terminfo.c index 639f675..ff3d9d3 100644 --- a/src/terminfo.c +++ b/src/terminfo.c @@ -24,12 +24,6 @@ Boston, MA 02111-1307, USA. */ #include -/* 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, diff --git a/tests/ChangeLog b/tests/ChangeLog index b61d6c8..98833c2 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2001-05-10 Stephen J. Turnbull + + * XEmacs 21.4.2 "Developer-Friendly Unix APIs" is released. + 2001-04-19 Stephen J. Turnbull * XEmacs 21.4.1 "Copyleft" is released. diff --git a/version.sh b/version.sh index 0ab006d..e88c394 100644 --- a/version.sh +++ b/version.sh @@ -2,8 +2,8 @@ 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