xemacs-21.4.22/0000755000175000017500000000000011126557407011250 5ustar acsacsxemacs-21.4.22/BUGS0000644000175000017500000000157006316626253011737 0ustar acsacsIf you think you may have found a bug in XEmacs, please read the Bugs section of the XEmacs manual for advice on (1) how to tell when to report a bug, and (2) how to write a useful bug report and what information it needs to have. There are three ways to read the Bugs section. (1) In a printed copy of the XEmacs manual. (2) With Info. Start XEmacs, do C-h i to enter Info, then m XEmacs RET to get to the Emacs manual, then m Bugs RET to get to the section on bugs. Or use standalone Info in a like manner. (Standalone Info is part of the Texinfo distribution, not part of the XEmacs distribution.) (3) By hand. Do cat info/xemacs* | more "+/^File: xemacs.info, Node: Bugs," Part II of the XEmacs FAQ, available in a manner similar to the above, or via the world wide web, contains extensive information on how to track down and report bugs. http://www.xemacs.org/faq/ xemacs-21.4.22/CHANGES-msw0000644000175000017500000000562207530424316013050 0ustar acsacsCHANGES-msw This file briefly describes all mswindows-specific changes to XEmacs in the OXYMORON series of releases. The mswindows release branch contains additional changes on top of the mainline XEmacs release. These changes are deemed necessary for XEmacs to be fully functional under mswindows. It is not intended that these changes cause problems on UNIX systems, but they have not been tested on UNIX platforms. Caveat Emptor. See the file 'CHANGES-release' for a full list of mainline changes. to XEmacs 21.4.8 "Honest Recruiter (Windows)" - All changes from 21.4.6 and 21.4.7. - Make sure revert temporaries are not visiting files. Suggested by Mike Alexander. - File renaming fix from Mathias Grimmberger. - Fix printer metrics on windows 95 from Jonathan Harris. - Fix layout of widgets so that the search dialog works. - Fix focus capture of widgets under X. - Buffers tab doc fixes from John Palmieri. - Sync with FSF custom :set-after behavior. - Virtual window manager freeze fix from Rick Rankin. - Fix various printing problems. - Enable windows printing on cygwin. to XEmacs 21.4.7 "Economic Science (Windows)" - All changes from 21.4.6. - Fix problems with auto-revert with noconfirm. - Undo autoconf 2.5x changes. - Undo 21.4.7 process change. to XEmacs 21.4.6 "Common Lisp (Windows)" - Made native registry entries match the installer. - Fixed mousewheel lockups. - Frame iconifcation fix from Adrian Aichner. - Fixed some printing problems. - Netinstaller updated to support kit revisions. - Fixed customize popup menus. - Fixed problems with too many dialog popups. - Netinstaller fixed to correctly upgrade shortcuts when upgrading core XEmacs. - Fix for virtual window managers from Adrian Aichner. - Installer registers all C++ file types. - Short-filename fix from Peter Arius. - Fix for GC assertions from Adrian Aichner. - Winclient DDE client from Alastair Houghton. - Fix event assert from Mike Alexander. - Warning removal noticed by Ben Wing. - Redisplay glyph height fix from Ben Wing. - Printer margin fix from Jonathan Harris. - Error dialog fix suggested by Thomas Vogler. - Fixed revert-buffer to not revert in the case that there is nothing to be done. - Glyph-baseline fix from Nix. - Fixed clipping of wide glyphs in non-zero-length extents. - Windows build fixes. - Fixed :initial-focus so that it works. to XEmacs 21.4.5 "Civil Service (Windows)" - Fixed a scrollbar problem when selecting the frame with focus. - Fixed `mswindows-shell-execute' under cygwin. - Added a new function `mswindows-cygwin-to-win32-path' for JDE. - Added support for dialog-based directory selection. - The installer version has been updated to the 21.5 netinstaller. The 21.5 installer now does proper dde file association and adds uninstall capability. - Handle leak fix from Mike Alexander. - New release build script. xemacs-21.4.22/CHANGES-release0000644000175000017500000004354007611267551013671 0ustar acsacsCHANGES-release This file briefly describes all changes to XEmacs in the OXYMORON series of releases. In principle there should be no user interface changes listed here, since this is intended to be a stable series. In practice, some bugfixes do involve user-visible changes. In general users should be happy about them, but they may affect workarounds you have put in place. So those that do are noted here with (**). Also, the MS Windows platform support is not fully mature, and the GTK platform support is explicitly experimental. In those cases improvements that provably do not affect other platforms are accepted. The platform affected is noted, and the change is flagged (**). Fixing a critical bug is not considered a "user interface change" in the sense that there should be no way for it to interfere with you getting more work done. Where there are many changes, they will be grouped into run-time, build-time, and "documentation and data" changes. For more details, including developers involved and dates, see the ChangeLogs, or use CVS diff to view the patches. to 21.4.12 "Portable Code" -- Fix: Type typos (welcome back!) -- Martin Buchholz -- Fix: Cygwin link breakage with new binutils -- Sergey Okhapkin -- Fix: Cygwin: Bump stack size to 8MB for large regexps -- Andy Piper -- Fix: Cygwin build breakage from Ben's printing patch -- Rick Rankin -- Fix: Don't require GNOME for Mozilla -- Ville Skyttä -- Fix: nnimap hangs in process output -- Daiki Ueno -- Update: about.el information -- Ilya Golubev -- Update: More tests/automated/regexp-tests.el cases -- Stephen Turnbull to 21.4.11 "Native Windows TTY Support" -- (**) More menubar options for browse-url -- Ville Skyttä -- Fix: Can't find dumpfile of symlinked xemacs -- Vin Shelton -- Fix: Deadlock in Xt timers -- Stephen Turnbull -- Fix: mmap crash (glibc 2.3.x) in build -- Wolfram Gloger -- Fix: Restore layout patch -- Andy Piper -- Fix: Minor bugs -- Ben Wing -- New: Berkeley db 4.1 support -- Greg Allen -- New: Dynamic initialization of auto-mode-alist -- Ville Skyttä -- New: Print memory check results in crash -- Ben Wing -- Build: Default pdump on for Linux -- Stephen Turnbull -- Build: Native Windows utilities build right -- Ben Wing -- Build: Mule regexp tests -- Daiki Ueno, Stephen Turnbull -- Docs: regex/alloca PROBLEM -- Stephen Turnbull -- Docs: Lesstif PROBLEM -- Frank McIngvale -- Docs: Examples, corrections, and oxymorons -- Katsumi Yamaoka, John Paul Wallington, Stephen Turnbull, Giacomo Boffi, Ville Skyttä, Ilya Golubev, Andy Piper, Ben Wing to 21.4.10 "Military Intelligence" -- (**) C-x r d invokes delete-rectangle -- Katsumi Yamaoka -- (**) Check Mule coding cookie in 2d line, too -- Stephen Turnbull -- (**) Default lookup-syntax-properties to nil -- Andy Piper, Stephen Turnbull -- Fix: Always generate auto-autoloads.el -- Stephen Turnbull -- Fix: Code typos -- Stephen Turnbull, Katsumi Yamaoka -- Fix: Freeze in certain modal dialogs -- Andy Piper -- Fix: Layout geometry bug -- Andy Piper -- Fix: Resizing bug in layouts -- Andy Piper -- Fix: Stale match data bug -- Stephen Turnbull -- Fix: Ugly dialog layouts -- Andy Piper -- Fix: font-lock-syntax-keywords tromps font-lock-keywords -- Daiki Ueno -- Fix: revert-buffer bugs -- Andy Piper -- Fix: (Cygwin) Regex crashes; increase stack size -- Andy Piper -- Fix: (HP/UX) Don't use getaddrinfo -- Darryl Okahata, Stephen Turnbull -- Fix: (MS Windows) Handle leak -- Mike Alexander -- Fix: (Native Windows) Truename bug -- Stephen Turnbull -- Fix: (Unix) Subprocess problems -- Mike Sperber, Stephen Turnbull -- Fix: (X11) CPU-eating XEmacs process at gdm logout -- Ben Sigelman -- Fix: (X11) Crash in external widget -- I. N. Golubev -- New: NAS 1.6 support -- Raymond Toy -- Improve: (Build) New regression tests -- Stephen Turnbull -- Improve: Crash message -- Stephen Turnbull -- Improve: FontSet defaults -- Ville Skyttä, Stephen Turnbull -- Improve: GNU synchs: parse-sexp-lookup-properties -- Alan Mackenzie, Stephen Turnbull -- Improve: Optimize update_syntax_cache -- Stephen Turnbull -- Improve: Test suite more friendly, some docs -- Stephen Turnbull -- Docs: Improve PROBLEMS, INSTALL, etc/BETA -- Stephen Turnbull -- Docs: New FAQs -- Stephen Turnbull -- Docs: New PROBLEMs -- Stephen Turnbull -- Docs: New configure.usage -- Stephen Turnbull -- Docs: New oxymorons -- Stephen Turnbull, Christopher Sekiya -- Docs: Typo fixes -- Jerry James, Ville Skyttä, Stephen Turnbull, Norbert Koch, Juergen Stuber -- Docs: Update manuals on syntax functions, byte-compiler options -- Stephen Turnbull -- Docs: Update package sites and Texi docs -- Ville Skyttä -- Docs: (Native Windows) Remove redundant quoting in Installation -- Adrian Aichner to 21.4.9 "Informed Management" -- (**) (MS Windows) new winclient -- Andy Piper, others -- (**) Mule auto-decompresses in find-library -- Steve Youngs -- (**) PUI displays author and package versions, balloon-help -- Steve Youngs -- (**) autoload and bind `replace-rectangle -- Didier Verna -- Crash fix: (HP/UX) in Motif on updating non-labels -- Darryl Okahata, Andy Piper -- Crash fix: (MS Windows) on bogus time -- Nick Pakoulin, Stephen Turnbull -- Crash fix: in handling of dead consoles -- Ben Wing -- Crash fix: in process handling (several) -- Mike Sperber -- Crash fix: in skip-chars -- Ben Wing, Stephen Turnbull -- Crash fix: on finding non-existent XML file -- Stephen Turnbull, Ben Wing, Michael Sperber -- Fix: URL handling (Cygwin) -- Andy Piper -- Fix: bogus arguments in custom-theme-set-variables -- Andy Piper -- Fix: bogus reinitialization breaking ru-keys.el -- Dmitry Astapov -- Fix: call-process-region deletes region after use -- Mike Alexander -- Fix: case (in)sensitivity in replace-in-string -- Didier Verna -- Fix: completion refers to correct history -- Christoph Wedler -- Fix: don't use RTLD_GLOBAL in DSOs -- Jerry James -- Fix: failures to redisplay (MS Windows) -- Mike Alexander, Andy Piper, Adrian Aichner -- Fix: file renaming (MS Windows) -- Mathias Grimmberger -- Fix: find architecture directory correctly -- Jerry James -- Fix: freeze on virtual desktop switch (MS Windows) -- Rick Rankin -- Fix: glyph handling, especially baselines -- Andy Piper, Nix -- Fix: handle popup dialogs correlcty (MS Windows) -- Andy Piper -- Fix: mousewheel handling (MS Windows) -- Andy Piper -- Fix: short file name handling (MS Windows) -- Andy Piper, Peter Arius -- Fix: shrink to fit windows work -- Jerry James -- Fix: toolbar doesn't update if gutters move bug -- Andy Piper -- Fix: uneven horizontal window splits -- Jerry James -- Improve: GNU synchs in Lisp API: join-line, :set-after, add-to-list, custom-local-buffer, font-lock-doc-face, font-lock-builtin-face, font-lock-constant-face, custom-set-default -- Ville Skyttä, John Paul Wallington, Andy Piper -- Improve: revert-buffer omits expensive operations if no change -- Andy Piper -- Improve: change registry key to XEmacs (MS Windows) -- Andy Piper -- Improve: 2d arg of split-string-by-char is required -- Brian A Palmer -- Improve: printer handling on MS (native and Cygwin) -- Andy Piper -- Fix: (Build) allow disabling Internet sockets in gnuserv -- Gregory Steuck -- Fix: (Build) unsigned-signed compare warnings -- Stephen Turnbull -- Fix: (Build/Cygwin) X + Windows build gets widgets -- Andy Piper -- Fix: (Build/Unix) configure --usage -- Jerry James -- Fix: (Build/Unix) protect linker args for PPC -- Malcolm Purvis -- Improve: (Build) make-autoload supports define-derived-mode -- Stephen Turnbull and Didier Verna -- Improve: (Build/MS Windows) Maintainer build process -- Andy Piper -- Improve: (Build/MS Windows) default to pdump -- Jonathan Harris -- Improve: (Build/MS Windows) update documentation -- Jonathan Harris -- Improve: (Build/Unix) 64-bit ELF support -- Gregory Steuck -- Improve: (Build/Unix) OpenBSD support -- Gregory Steuck -- Docs: "vanity" updates -- Andy Piper -- Docs: Info minor updates -- Simon Josefsson, Ville Skyttä, Adrian Aichner, Steve Youngs, Jerry James -- Docs: Info new nodes: Regression Testing XEmacs -- Stephen Turnbull -- Docs: Info typo fixes -- Adrian Aichner (many!) -- Docs: docstring typo fixes -- John Paul Wallington, Stephen Turnbull, Ville Skyttä, Andy Piper, Jerry James, Adrian Aichner -- Docs: new FAQs: Killing is slow, Q2.0.15 -- Stephen Turnbull, Adrian Aichner -- Docs: new PROBLEMS -- Stephen Turnbull to XEmacs 21.4.8 "Honest Recruiter" -- Fix: "yank-pop twice" bug -- Jerry James, Stephen J. Turnbull -- Fix: broken process input from race condition patch -- Nix to XEmacs 21.4.7 "Economic Science" -- Fix: prevent migration code from trashing .emacs -- Stephen J. Turnbull -- Fix: XmProcessTraversal crash -- Stephen J. Turnbull -- Fix: crash in GTK popup menu -- William M. Perry -- Fix: dll_load to avoid incorrect symbol binding -- Andrew Begel -- Fix: emodules_load to avoid multiple loading of same module -- Jerry James -- Fix: recover gracefully from XOpenDevice failure -- Mike Sperber -- (**) Fix: write-region-pre-hook obeys coding-system argument -- Stephen J. Turnbull -- (**) Improve: GTK selection handling -- Eric Gillespie, Jr. -- (**) New: auto-modes: .siv, .sieve, GNUmakefile, Xdefaults -- Ville Skyttä, Simon Josefsson -- Fix: race condition detecting dead process -- Nix -- Fix: default Info-auto-generate-directory to 'if-outdated. -- Adrian Aichner -- Fix: generic-print-region passes correct arguments Nevin Kapur, Björn Torkelsson, Adrian Aichner -- Fix: regenerate info dir when missing -- Mike Sperber -- Fix: truncate menu item to width -- Adrian Aichner -- Update: GNU synchs: assq-delete-all, function-interactive, describe-mode -- John Paul Wallington -- Fix: "--with-widgets" means "=yes", and autodetect athena. -- Jan Vroonhof -- Fix: add -Wno-shadow for GTK -- William M. Perry -- Fix: make moduledir option work -- Mike Fabian -- Fix: native Windows build dependencies with pdump -- Adrian Aichner -- Fix: clean up name space after automated tests -- Stephen J. Turnbull -- Improve: native Windows build -- Jonathan Harris -- Fix: typo in macro definition -- Martin Buchholz -- Fix: typos -- Adrian Aichner, Steve Youngs, Charles Waldman -- Improve: Packages node -- Stephen J. Turnbull -- Improve: comments and docstrings -- Stephen J. Turnbull, Christoph Wedler, Valdis Kletnieks, John H. Palmieri -- Improve: etc/BETA -- Stephen J. Turnbull, Jarl Friis -- New: External Client Widget Internals node -- Stephen J. Turnbull -- New: FAQ: Unicode support via Mule-UCS. -- Stephen J. Turnbull -- New: FAQ: remote files -- Stephen J. Turnbull -- New: Glyph, graphics examples node -- Darryl Okahata -- New: TUTORIAL.se -- Mats Lidell -- New: The User's View [of packages] node -- Stephen J. Turnbull -- New: autoconfiscate MacOS/X "Darwin" -- Greg Parker, Martin Buchholz -- New: s/linux.h for 64-bit libs -- Andreas Jaeger -- Update: photos -- Hrvoje Niksic -- Update: Files node: remote file editing, EFS, TRAMP -- Stephen J. Turnbull -- Update: URLs in FAQ -- Adrian Aichner, Stephen J. Turnbull -- Update: package-index.LATEST.pgp -- Steve Youngs to XEmacs 21.4.6 "Common Lisp" -- Changing coding system marks buffer as modified. -- More file/directory dialogs available on Windows. -- In replace-regexp, subexpression replacement supported. -- Motif bug causes intermittent crashes. Patch Motif: see PROBLEMS. -- Common subexpression optimization caused an illegal pointer reference in regexp replace; fixed. -- Autosave files are now saved in current coding system (where file coding supported). This resolves the "doubled escape" bug common in Japanese mail files, but increases the chance that autosave files will contain garbage (because the buffer contents cannot be saved correctly in the current coding system). -- Failure to save certain customizations fixed. -- Ability to customize fonts improved, especially the "cannot customize italic" bug -- Window loop now properly iterates over multiple devices; some problems with wrong window being selected (eg, with gnuclient) resolved. -- Certain infloops in password prompts, etc, fixed. -- Make space for symbols defined in modules in Lisp symbol tables -- Errors due to failure to conform to pop-up menu API in GTK fixed. -- Cygwin URL handling in shell calls fixed. -- Inability to select directories fixed. -- Initial VC.NET support. -- New node on "packaging" for library developers in Lispref. -- Fix incorrect ctime to Lisp conversion. -- HP-UX LDFLAGS fix. -- Many typo fixes and small documentation enhancements. -- New section of examples of glyph usage in Lispref. -- Make `truncate-partial-width-windows' effect buffer-local. -- Suppress bogus focus changes. -- Fix custom's handling of font size and family. -- Fix comboreloc crash (common on Linux when making first frame). -- Default --with-ipv6-cname=no. -- From 21.4.5 "Civil Service (Windows)": -- Fixed a scrollbar problem when selecting the frame with focus. -- Fixed `mswindows-shell-execute' under cygwin. -- Added a new function `mswindows-cygwin-to-win32-path' for JDE. -- Added support for dialog-based directory selection. -- The installer version has been updated to the 21.5 netinstaller. The 21.5 installer now does proper dde file association and adds uninstall capability. -- Handle leak fix from Mike Alexander. -- New release build script. to XEmacs 21.4.5 "Civil Service" -- Now installs arch-specific files relative to $execdir, not $prefix. -- New configure.ac guards against autoconf 2.5x, not yet supported. -- (**) configure.ac added to auto-mode-alist. -- Synch configure.usage with configure.in. -- Add GTK defaults in several places. -- Fix Lisp syntax in several files. -- call-process-internal reads files as 'binary, now writes 'binary too. -- FAQ corrections. -- Many typo fixes. -- Correct case for XEmacs file names under msw (Cygwin is pedantic). -- Fix progress gauge flashing under OpenMotif. -- Texinfo syntax corrections in Info sources. -- Bug reporting now politically correct. -- Now detects xpm-nox on Cygwin. -- Conditionalize `-msw.c against Cygwin and MSVC5 deficiencies. -- .9 files now recognized as manpages (shadowed by ChangeLog and .scm). -- Fix "gc in window proc" and "setitimer" crashes on msw. -- Quote null arguments correctly on msw. -- Fix pty allocation on SCO Unix. -- Eliminate a few warnings. to XEmacs 21.4.4 "Artificial Intelligence" -- (**) There is a bug in "window procedures" under MS Windows only. Non-debug builds print a warning on stderr, and you may want to consider XEmacs unstable (save and restart) if you see it (debug builds assert here). -- Printing the selection is implemented for MS Windows -- C-g now works on MS Windows -- Kinsoku (text wrapping for Asian scripts) fixes -- "Scrolling with no scrollbar" crash on MS Windows fixed -- Case conversion works for Cyrillic -- Help is available with C-x s -- M-x locate-library completes library names -- (**) `replace-match' supports FSF-style match subexpressions -- `compose-mail' is supported in about.el -- (**) Renaming custom.el to inhibit loading it works -- (**) "Reset to standard" works with "set" and "saved" Custom buffers -- `Unbalanced parentheses' bug when dealing with mixed comment styles in c++/java/etc. mode fixed -- Byte-compiler optimization fixes -- Dired can handle directory names with unusual characters -- Popup menus work with popup-menu-titles turned off -- (**) M-? now invokes Help -- Data corruption in network streams on MS Windows fixed -- A few improvements and bug fixes in GTK support. -- (**) EsounD support is no longer autodetected; you must explicitly request it. EsounD does evil things with signals and XEmacs cannot protect itself from the race conditions created. -- (**) The "excessively long startup when not networked" (often on Red Hat Linux) problem is addressed with a configure option that defeats IPv6 host name canonicalization, `--with-ipv6-cname=no'. See also the discussion in PROBLEMS. -- Better detection of Cygwin Perl -- Support for old Cygwin betas dropped -- Better support for Windows Millenium Edition -- --with-widgets=no no longer autodetects Athena -- Self tests work if directory is a symlink -- Use ld reported by gcc, not gcc itself, to link -- TAR define added to src/Makefile -- Many small and medium documentation fixes, including an improved etc/sample.init.el, German tutorial, CCL fonts documentation -- etc/xemacs-ja.1 replaced with new translation -- much improved FAQ to XEmacs 21.4.3 "Academic Rigor" -- Restore include of src/events-mod.h. -- Detect Windows native sound under Cygwin -- Restore patch for building --with-scrollbars=no -- Update package docs -- More photos -- Misc comment fixes in source to XEmacs 21.4.2 "Developer-Friendly Unix APIs" -- (**) Stop shifted motion from making active region persist if no motion. -- (**) MS Windows: Printer support now (optionally) adds headers/footers. -- (**) MS Windows: Critical-quit works. -- (**) GTK: Face editor changes can apply to GTK too. -- Fix hang in Customize menu on Windows platforms. -- Fix crash with xlc -O3 on AIX. -- make-charset handles short-name correctly. -- Trivial sign-compare warning fix. -- MS Windows: nt/*.mak version string fix and assorted build cleanups. -- GCC 3.0 link error from cruft fixed. -- make-stds.info builds again with makeinfo 3.12 -- Remove CVS keywords from build-report.el. -- Miscellaneous documentation fixes. -- Add photos, update descriptions in about.el. -- Update copyright notice on splash screen. -- FTP mirror site updates to XEmacs 21.4.1 "Copyleft" -- Temporary fix to crash in map-keymap applied. -- Crash in Motif builds on closing frame fixed. -- Descriptions of workarounds for crashes and hangs related to ESD (don't configure it) and Athena3d (how to configure it properly) added to PROBLEMS. -- about.el overhauled, a few new hackers' entries or photos added, and old ones updated. -- More etc\NEWS. -- Typo fix in etc\sample.init.el. -- Typos fixed in a number of documents. to XEmacs 21.4.0 "Solid Vapor" -- Initial release of 21.4 series. See NEWS for changes since the last stable release, 21.1. xemacs-21.4.22/COPYING0000644000175000017500000004321706256071506012311 0ustar acsacs GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA 02111-1307, USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. xemacs-21.4.22/ChangeLog0000644000175000017500000050707011126031612013014 0ustar acsacs2008-12-28 Vin Shelton * XEmacs 21.4.22 is released 2007-11-22 Vin Shelton * etc/photos/vin.png: * etc/photos/vinm.png: Updated. 2007-10-07 Vin Shelton * XEmacs 21.4.21 is released 2007-08-18 Vin Shelton * modules/ldap/eldap.c: Declare that we use deprecated API. Thanks to Mats Lidell for the report & patch: <871wgnqunm.fsf@spencer.lidell.homelinux.net>. 2006-12-09 Vin Shelton * XEmacs 21.4.20 is released 2006-12-07 Vin Shelton * configure.in: Find relocated xpm library under cygwin. Patch lifted from Rick Rankin's 21.5 version of the patch. 2006-05-17 Stephen J. Turnbull * PROBLEMS: X11R7 loses x11/bitmaps/gray. 2006-01-28 Vin Shelton * configure.in: Simplify cygwin include and nox/Xpm handling. As of cygwin-1.5.19, 'gcc -print-file-name=libc.a' (effectively) returns '/lib' instead of '/usr/lib', so we'll use 'gcc -print-search-dirs' instead. 2006-01-28 Vin Shelton * XEmacs 21.4.19 is released 2006-01-28 Vin Shelton * etc/package-index.LATEST.gpg: Updated with latest package data. 2005-12-18 Ilya N. Golubev Merge from 21.5. * configure.in: Fixed `LDAP_OPT_ON' libraries configuration introduced in local 2005-03-13 change of `configure.in'. However, do not check for internal `-lber' `ber_pvt_opt_on' symbol as done in upstream. This symbol is not part of any published interface, it may exist or not exist, depending on openldap version. Cryptic comment before using it in upstream 21.5 source did not state precisely under which circumstances checking for it was useful, which sort of user code tried to link the symbol. So in local 21.5 dismissed both the code and the comment without writing a cleaner equivalent. * etc/NEWS: Document. 2005-12-13 Vin Shelton * etc/package-index.LATEST.gpg: Updated with latest package data. 2005-12-04 Vin Shelton * etc/OXYMORONS: insert 'Social Property' for 21.4.18. * etc/NEWS: document motif deprecation and defaulting --with-widgets to off. 2005-12-04 Ville Skyttä * etc/PACKAGES: Fix description of xetla. 2005-12-03 Vin Shelton * XEmacs 21.4.18 is released 2005-12-01 Vin Shelton * etc/TUTORIAL.cs: copied from 21.5. * etc/TUTORIAL.sl: copied from 21.5. 2005-11-29 Ilya Golubev * configure.in: Merge revision 1.19 change: fix ldap libraries configuration lossage when `-lldap -llber' links and but `-lldap' does not; allow `ldap_libs' to be empty or overridden by builder. The lossage was introduced in upstream revision 1.151.2.31 (2005/01/31 02:54:47 vins) by (extremely hasty and unwise) merge of revision 1.232 change. * etc/NEWS: Document it. 2005-03-12 Aidan Kehoe * configure.in (XE_COMPUTE_RUNPATH): Check XtRegisterDrawable availability. 2005-04-11 Norbert Koch * etc/PACKAGES: etc/PACKAGES: Announce re-builder, xetla. 2005-11-15 Dr. Volker Zell * configure.in: Avoid using Motif also for cygwin 2005-11-15 Dr. Volker Zell * configure.in: Check for u_int*_t typedefs and use them in Berkeley DB detection. 2005-04-11 Norbert Koch * etc/PACKAGES: etc/PACKAGES: Announce re-builder, xetla. 2005-03-23 Vin Shelton * configure.in: Remove -fno-gnu-linker option from Solaris dynodump builds; it doesn't do anything. Don't use 'head -1' - it's deprecated by coreutils-5.3.0 on some platforms. 2005-02-19 Norbert Koch * etc/PACKAGES: Announce latin-euro-standards, update mule-base. 2005-02-12 Vin Shelton * etc/OXYMORONS: New list. 2005-02-06 Vin Shelton * XEmacs 21.4.17 is released 2005-01-29 Ben Wing * configure.in (AC_INIT_NOTICE): * configure.in (XE_COMPUTE_RUNPATH): Copy LDAP fixes from 21.5. Port Marcus Crestani's patches of 2004-11-12: * Makefile.in.in (install-arch-dep): Fix installation for Cygwin. * configure: * configure.in: Make pdump default for Cygwin. 2005-01-30 Malcolm Purvis * Makefile.in.in (dump-elc): Depend on ${PROGNAME} to fix parallel builds. 2004-11-22 Adrian Aichner * etc/TUTORIAL: Typo fixes, courtesy of Andreas Eder . 2004-05-20 Stephen J. Turnbull * configure.in (HAVE_GPM): Die if GPM requested but not found. 2005-01-23 Vin Shelton * Makefile.in.in (finder): Force removal of lisp/finder-inf.el. 2005-01-10 Vin Shelton * Makefile.in.in (RECURSIVE_MAKE_ARGS): Remove last few. 2004-11-21 Malcolm Purvis * INSTALL: A POSIX compatible Make is no longer required for builds. * Makefile.in.in (RECURSIVE_MAKE): Removed. * Makefile.in.in (RECURSIVE_MAKE_ARGS): New. * configure.in (RECURSIVE_MAKE): Removed. * configure.in (RECURSIVE_MAKE_ARGS): New. Always refer to make as $(MAKE) and use $(RECURSIVE_MAKE_ARGS) for other parameters. This allows -j to work in GNU Make while removing need for POSIX compatible make on all systems. 2004-09-08 Malcolm Purvis * INSTALL: A POSIX compatible Make is required for builds. * Makefile.in.in: Enable support for parallel builds. 2004-12-05 Vin Shelton * XEmacs 21.4.16 is released 2004-08-12 "Johann 'Myrkraverk' Oskarsson" * config.guess: Detect PlayStation 2. 2004-08-10 Jerry James * etc/SERVICE: Update to latest version from www.gnu.org. 2004-07-06 Steve Youngs * etc/NEWS: Document the major user visible changes to PUI. 2003-07-21 Malcolm Purvis * etc/gtkrc: New file. This is the GTK equivalent of the app-default file. 2004-03-30 Norbert Koch * PACKAGES: Introduce new packages escreen, xlib, and xwem. 2004-03-23 Malcolm Purvis * configure (GTK_CONFIG): Check GTK version validity only when the right instance of gtk-config is found. 2004-03-20 Adrian Aichner * etc/sample.init.el: Sync typo and copycat fix from 21.5. * etc/sample.init.el ((console-on-window-system-p)): Sync "\C-x\C-c" definition from 21.5. 2004-03-20 Vin Shelton * configure.usage (--use-regex-malloc): Correct warning about disabling regex-malloc. 2004-03-04 Malcolm Purvis * configure.in (src/Makefile): No longer include a special linker script for PowerPC Linux. Thanks to Stefan Bruda for reporting this bug. 2004-02-10 Vin Shelton * etc/OXYMORONS: Added Jumbo Shrimp for 21.4.17. 2004-02-03 Vin Shelton * configure.in (XE_COMPUTE_RUNPATH): lucid_prefers_motif is a variable, not a command. 2004-02-02 Vin Shelton * XEmacs 21.4.15 is released 2004-01-30 Vin Shelton * etc/OXYMORONS: Inserted "Corporate Culture" for 21.4.15. 2004-01-25 Steve Youngs * etc/package-index.LATEST.gpg: New, replaces `package-index.LATEST.pgp'. * etc/package-index.LATEST.pgp: Removed, replaced with `package-index.LATEST.gpg'. 2004-01-20 Jerry James * configure.in: The icc compiler pretends to be gcc. It isn't. 2003-11-28 Norbert Koch * etc/PACKAGES (ERC): new. 2003-11-19 Vin Shelton * configure.usage (--with-widgets): widgets now defaults to --with-widgets=no. Patch inspired by Jim Schumacher. 2003-10-25 Norbert Koch * etc/PACKAGES (riece): New package. * etc/PACKAGES (liece): Mark as deprecated. 2003-10-26 Vin Shelton * configure.in: Add Intel C++ compiler detection to compiler version reporting. 2003-10-16 Valdis Kletnieks * configure.in: record additional info about compiler and libc versions, to assist in debugging. 2003-08-28 Stephen J. Turnbull * configure.in (line 3573): (Mule input methods): Deprecate Motif for Linux. (Installation): Report when LessTif is used. 2003-10-11 Jerry James * configure.in: installexe.sh is under srcdir, not blddir. 2003-10-16 Jerry James * aclocal.m4: Add icc (Intel compiler) support. * configure.in: Ditto. 2003-09-13 Martin Buchholz * configure.in (OS_RELEASE): Add support for SunOS 5.10. On current OSes produced by Sun, `uname -r' prints "5.9". It seems likely that on future OSes, `uname -r' will print "5.10". We need to accept multi-digit release numbers. 2003-09-12 Rodney Sparapani * PROBLEMS: Propose bash as an alternative to buggy Solaris /bin/sh. 2003-09-10 Martin Buchholz * configure.in: XEmacs failed to build on Solaris9. Solaris9 comes with /usr/demo/SOUND, but no headers or libraries therein. 2003-09-03 Vin Shelton * XEmacs 21.4.14 is released 2003-08-15 Stephen J. Turnbull * configure.in (line 3593): Default widgets OFF for Athena/Motif. 2003-08-15 Stephen J. Turnbull * configure.in (regex_malloc): New option. configure.usage (--use-regex-malloc): Document it. 2003-08-14 Andrew Begel * configure.in: Add code to detect Darwin/MacOSX dynamic linking API. 2003-08-12 Stephen J. Turnbull * configure.usage (GUI component): Improve lucid option doc. 2003-08-12 Stephen J. Turnbull * configure.in (CFLAGS): Add -fno-strict-aliasing for GCC. * PROBLEMS (Running): Strict aliasing crashes. 2003-08-04 Norbert Koch Stephen J. Turnbull * PACKAGES: Sync with package-tree contents. Style conformance. 2003-07-03 Stephen J. Turnbull * etc/README.HYPERBOLE: * etc/README.OO-BROWSER: Update. 2003-05-23 Stephen J. Turnbull * etc/sample.Xdefaults (menubar and popup fonts): Use X Font Sets. 2003-07-29 Stephen J. Turnbull * PROBLEMS (Motif): Explain why Motif loses XtExposeCompressMaximal. * configure.in (Installation): Bitch bitterly about Motif. 2003-06-17 Vin Shelton * PROBLEMS: Sync up with latest version from 21.5 2003-04-28 Stephen J. Turnbull * PROBLEMS (Windows): New: auxiliary programs for Windows. 2003-05-24 Norbert Koch * etc/package-index.LATEST.pgp: Official package release. 2003-05-25 XEmacs Build Bot * XEmacs 21.4.13 is released 2003-03-20 Stephen J. Turnbull * configure.in (INTPTR_T_IN_CYGWIN_TYPES_H): Cygwin defines these types in . Detect and don't duplicate the definition. 2003-03-18 Stephen J. Turnbull * configure.usage (Usage): Use an autodetected feature as an example of how to disable features. A Martin Buchholz Suggestion. 2003-03-18 Stephen J. Turnbull * INSTALL: Give location of Darwin X11 downloads. 2003-01-28 Stephen J. Turnbull * INSTALL (--with-scrollbars): (--with-dialogs): (--with-widgets): (--with-athena): Update to current reality. 2003-01-18 Stephen J. Turnbull * INSTALL: * PROBLEMS: Mention --site-includes and subdirectories for helping configure to find 3rd-party add-ons. 2003-01-28 Martin Buchholz * configure.in (opsys): (AIX specific) Use opsys=aix4-2 for AIX 5 and all future versions. 2003-01-28 Martin Buchholz * configure.in (-mthreads): (AIX specific) Use either -mthreads or -pthread, depending on gcc versions. gcc changed the name of the `-mthreads' option to `-pthread' on 2000-06-12. Be more careful when appending "_r" to various names of xlc, so that users can specify --compiler=/absolute/path/to/xlc 2003-01-27 Martin Buchholz * configure.in: Don't disable athena just because the user specified --with-widgets=no. 2003-01-27 Martin Buchholz * configure.in (athena_3d): AC_CHECK_LIB must always take a function as argument, never a global variable. Some linkers can tell the difference. So change: threeDClassRec ==> Xaw3dComputeBottomShadowRGB 2003-03-02 Vin Shelton * etc/BETA: synced up with 21.5. Original patch from Chris Palmer . 2003-03-02 Robert Pluim * configure.in : Don't use the u_int8_t etc typedefs on FreeBSD when detecting Berkeley DB, as they conflict with . 2003-02-01 Martin Buchholz * configure.in: Don't look for Motif if it's already present in $x_includes and $x_libraries. 2003-02-23 Stephen J. Turnbull * configure.in: Fix darwin regexp for pdump. 2003-02-10 Stephen J. Turnbull * INSTALL: Recommend Mule, deprecate stripped binaries. 2003-01-15 Stephen J. Turnbull * XEmacs 21.4.12 "Portable Code" is released. 2003-01-13 Ilya Golubev * etc/photos/golubev.png, etc/photos/golubevm.png: New. 2003-01-05 Rick Rankin * configure.in: Add -lkernel32 to the list of system libraries linked under Cygwin. Needed for IsBadReadPtr(). 2003-01-03 Stephen J. Turnbull * XEmacs 21.4.11 "Native Windows TTY Support" is released. 2003-01-02 Stephen J. Turnbull * configure.in (Generate Installation): * configure.usage (--use-union-type): * PROBLEMS (XEmacs crashes mysteriously): Deprecate --use-union-type for production builds. 2002-12-16 Stephen J. Turnbull * PROBLEMS (Running): Document general regex.c/alloca crash. 2002-12-05 Stephen J. Turnbull * etc/OXYMORONS (21.4.11): Inadvertant contrib from Andy. 2002-12-04 Stephen J. Turnbull * configure.in: Move pdump default for Darwin to opsys default area. 2002-11-15 Stephen J. Turnbull * configure.in (getaddrinfo): Disable for hpux11*, not hpux11. 2002-11-12 Stephen J. Turnbull * configure.in: Default pdump on for Linux. Improve "broken compiler" panic message per V. Kletnieks. 2002-11-12 Stephen J. Turnbull * PROBLEMS (Running/Linux): Lesstif 0.93.36 info, from F. McIngvale. 2002-10-30 Katsumi Yamaoka * etc/TUTORIAL.ja: Typo fix. 2002-10-31 John Paul Wallington * info/dir (File): button1 on a highlighted word doesn't follow that cross-reference. 2002-11-11 Stephen J. Turnbull * etc/Emacs.ad (Emacs.bold-italic.attributeFont): Per G. Boffi. 2002-11-04 Giacomo Boffi * etc/sample.Xdefaults (Emacs.bold-italic.attributeFont): New. 2002-11-02 Stephen J. Turnbull * XEmacs 21.4.10 "Military Intelligence" is released. 2002-11-01 Stephen J. Turnbull * Makefile.in.in (lisp/custom-load.el): Depend on auto-autoloads.el. 2002-10-31 Christopher Sekiya * etc/OXYMORONS: "Too much Mozart" is an oxymoron. 2002-10-25 Steve Youngs * etc/TUTORIAL.fr (suivante): Typo fix. From juergen stuber . 2002-10-23 Stephen J. Turnbull * Makefile.in.in (lisp/auto-autoloads.el): (lisp/custom-load.el): Use -no-autoloads for these targets; can't load 'em if they ain't. 2002-10-18 Stephen J. Turnbull * PROBLEMS (Running/Cygwin): "No cygXpm-noX" fatal error. 2002-10-17 Stephen J. Turnbull * PROBLEMS (Missing charsets): Remove ambiguity. 2002-10-10 Stephen J. Turnbull * INSTALL (PREREQUISITES): Recommend Texinfo 4.2. 2002-10-09 Stephen J. Turnbull * etc/BETA: Improve descriptions of XEmacs Patches; mention Design. 2002-10-08 Stephen J. Turnbull * PROBLEMS (MacOS/X): Describe stack limitation. (Digital Unix): Generalize to all regexp-using applications. * INSTALL (PREQUISITES): Mention MacOS/X stack limitation. (PROBLEMS): Point to PROBLEMS file for build notes. Thanks to Skip Montanaro for the report. 2002-10-07 Stephen J. Turnbull * Makefile.in.in (all-elcs): Depend on autoloads. (autoloads): Depend on lib-src, lwlib, and src. 2002-10-04 Stephen J. Turnbull * configure.in (Check for POSIX functions): New section head. getaddrinfo is detected on HP-UX 11.XX, but appears to be non-functional. Disable it. Based on work by Darryl Okahata. 2002-09-27 Stephen J. Turnbull * PROBLEMS (Running, General): Missing charset in FontSet warnings. * Emacs.ad: Add charsets to *menubar*FontSet and *popup*FontSet. 2002-08-29 Ville Skyttä * Emacs.ad: Add *menubar*FontSet and *popup*FontSet entries, (self-)obtained from Red Hat. 2002-09-25 Stephen J. Turnbull * etc/OXYMORONS: A couple new ones. 2002-09-03 Stephen J. Turnbull * configure.usage: Complete rewrite and reorganization. 2002-08-23 Stephen J. Turnbull * XEmacs 21.4.9 "Informed Management" is released. 2002-05-22 Andy Piper * build-msw-release.sh (TMPINSTALL): install to a tmpdir so that xemacs can be running while we build a dist. 2002-04-26 Andy Piper * configure.in: make sure that a combined X and windows build gets widgets. 2002-08-10 Stephen J. Turnbull * etc/package-index.LATEST.pgp: Update. 2002-08-10 Stephen J. Turnbull * PROBLEMS (General advice): Define runtime and build problems. 2002-07-24 Stephen J. Turnbull * PROBLEMS (Running, Linux): Rewrite "Hannibal Lecter" ld stuff. 2002-07-12 Stephen J. Turnbull * etc/BETA (Large contributions): Typo fix per JPW. 2002-07-12 Stephen J. Turnbull * etc/BETA (Large contributions): New section. Reorganize file. 2002-06-04 Jerry James * configure.usage: Identify --with-modules as autodetecting. 2002-07-04 Stephen J. Turnbull * PROBLEMS: Add two basic configuration questions. 2002-05-17 Stephen J. Turnbull * PROBLEMS: Describe "Hannibal Lecter" crash on Linux. Reorder Linux runtime issues section. * INSTALL: Improve description of mail locking. 2002-05-10 Stephen J. Turnbull * etc/OXYMORONS (21.4.15): New. Not a reference to Vin. * build-msw-release.sh: Synch to Andy. 2002-03-18 Gregory Steuck * configure.in: Improve OpenBSD support: correct check for socklen_t, check for libtermcap is libncurses. 2002-02-28 Malcolm Purvis * configure.in: Protect nocomboreloc linker arguments to avoid problem on the ppc. 2002-05-09 Stephen J. Turnbull * XEmacs 21.4.8 "Honest Recruiter" is released. 2002-05-09 Stephen J. Turnbull * info/.cvsignore: New file from 21.5. 2002-05-04 Stephen J. Turnbull * XEmacs 21.4.7 "Economic Science" is released. 2002-05-04 Stephen J. Turnbull * etc/sample.init.el: Fix comment typo about resize-minibuffer. * etc/sample.init.el: Add description of initialization process, the custom.el file, and code to load custom.el early instead of late. 2002-05-04 Stephen J. Turnbull * PROBLEMS (General): Decribe failed AUTH with EFS. 2002-04-22 Hrvoje Niksic * etc/photos/hniksic.png, etc/photos/hniksic.png: Update. 2002-04-25 Mike Fabian * configure.in: add option moduledir as mentioned in ./configure --help 2001-04-21 Martin Buchholz * configure.in: Detect MacOS/X "Darwin". Thanks to Greg Parker . 2002-03-30 Steve Youngs * etc/package-index.LATEST.pgp: Update to current reality. 2002-02-28 Stephen J. Turnbull * etc/TUTORIAL.se: New from Mats Lidell. 2002-01-07 Jan Vroonhof * configure.in: Make explicit "--with-widgets" mean "=yes". If "--with-widgets=yes" autodetect athena. 2001-12-29 Steve Youngs * etc/package-index.LATEST.pgp: Update. 2001-12-13 William M. Perry * configure.in (GTK): add -Wno-shadow. 2002-02-04 Stephen J. Turnbull * etc/BETA: Synch to 21.5. 2002-01-23 Jarl Friis * etc/BETA (http): Informing of xemacs-patches mailing list. Added note on patch etiquette. 2001-12-17 Stephen J. Turnbull * XEmacs 21.4.6 "Common Lisp" is released. 2001-12-04 Jan Vroonhof * etc/photos/jan.png: New photo. 2001-11-21 Robert Pluim * PROBLEMS (Sun/Solaris): Document fix for Motif related crashes 2001-12-15 Stephen J. Turnbull * configure.in (Miscellaneous Flags): test for -z nocombreloc, instead of -z combreloc, to avoid confusing Solaris. 2001-11-24 Stephen J. Turnbull * configure.usage: Makefile.in -> Makefile.in.in. 2001-11-21 Stephen J. Turnbull * Makefile.in.in: HP-UX needs LDFLAGS. From Lutz Jaenicke . 2001-11-17 Stephen J. Turnbull * configure.in: Fix typos in comments. * (Miscellaneous flags): Use -z nocombreloc if supported and !pdump. * (Installation): Suggest pdump instead of -z nocomboreloc. * configure.usage: Document --quick-build. 2001-10-30 Stephen J. Turnbull * configure.in: Typo in reference to with_ipv6_cname. 2001-10-30 Stephen J. Turnbull * configure.in: Initialize with_ipv6_cname=no. * configure.usage: Document it. 2001-10-23 Stephen J. Turnbull * XEmacs 21.4.5 "Civil Service" is released. 2001-10-05 Stephen J. Turnbull * configure.in: Document that autoconf 2.5x is unsupported. 2001-10-02 Stephen J. Turnbull * PROBLEMS: configure doesn't support --with-{ld,as}, use environment variables. Suggested by Goran Koruga . 2001-09-17 Ben Wing * configure.in (TAB): * configure.in (XE_COMPUTE_RUNPATH): Don't use -Wshadow when compiling with g++ or you get buried in silly warnings. This patch was already applied but somehow got unapplied. Stephen? 2001-08-19 Charles Wilson * configure.in (for graphics libraries): Detect Cygwin xpm-nox. 2001-08-02 Peter Brown Synch options documentation with those in configure.in: * configure.usage (--with-dialogs): added lucid to list of options * configure.usage (--with-widgets): added lucid to list of options * configure.usage (--with-dragndrop): added GTK to list of protocols * configure.usage (--mail-locking): added `locking' or `mmdf'. to list of options 2001-09-25 Didier Verna * configure.ac: new. Autoconf 2.5x guard. 2001-08-29 Jered Floyd * configure.in (moduledir,sitemoduledir,archlibdir): Place arch-specific files under ${libdir}, not under ${datadir}. 2001-07-28 Stephen J. Turnbull * XEmacs 21.4.4 "Artificial Intelligence" is released. 2001-07-22 Stephen J. Turnbull * configure.in (with_esd_sound): Default to no. * configure.usage: Various documentation improvements. * configure.in (--with-ipv6-cname): New Boolean option. Defaults on. * configure.usage: * PROBLEMS (IPv6 CNAME lookup): Document it. 2001-07-18 Adrian Aichner * etc\TUTORIAL: Fix minor typo. * etc\TUTORIAL.de: Sync with TUTORIAL. 2001-05-23 Ben Wing * etc\sample.init.el: * etc\sample.init.el (Init-safe-require): New. * etc\sample.init.el ((fboundp 'pending-delete-mode)): * etc\sample.init.el ((eq system-type 'windows-nt)): * etc\sample.init.el (dired): * etc\sample.init.el ((Init-safe-require 'efs-auto)): * etc\sample.init.el (completer): * etc\sample.init.el (crypt): * etc\sample.init.el (filladapt): * etc\sample.init.el ((fboundp 'turn-on-lazy-lock)): * etc\sample.init.el ((fboundp 'resize-minibuffer-mode)): * etc\sample.init.el ((Init-safe-require 'scroll-in-place)): Rewrite to be much more careful about loading features -- now it decays gracefully even in the complete absence of packages. Also avoid doing obnoxious things when loading efs. 2001-04-14 Gordon Sadler * configure.in: Add GTK_CFLAGS to CPPFLAGS for glade.h check. 2001-07-01 Alexey Mahotkin * configure.in (option processing): with_widgets=m is ambiguous; don't allow it. (AC_CHECKING for the Athena widgets): Don't check for Athena when with_widgets=no. 2001-05-29 Martin Buchholz * configure.in: Remove stray backslash. 2001-05-27 Kazuo Oishi * etc/xemacs-ja.1: Replace with new translation. 2001-05-17 Andrew Begel * aclocal.m4 (LTLD): Don't use "gcc", use the ld reported by gcc. 2001-05-17 Stephen J. Turnbull * XEmacs 21.4.3 "Academic Rigor" is released. 2001-05-10 Paul Stodghill * configure.in: Reverse the order of Windows and Linux sound tests so that Cygwin will find Windows first. 2001-05-15 Steve Youngs * etc/photos/{youngs,youngsm}.png: New photos. 2001-05-15 Steve Youngs * etc/PACKAGES: Update to reflect new package dir tree. 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. 2001-04-17 Ben Wing * etc\NEWS: More changes. * etc\sample.init.el (grep-all-files-in-current-directory-and-below): Missing argument. * etc\photos\fabrice.png: * etc\photos\fabricem.png: * etc\photos\juhp.png: * etc\photos\juhpm.png: Add photos. * etc\photos\jwz.png: * etc\photos\jwzm.png: Update photos. 2001-04-17 Stephen J. Turnbull * README: * etc/README: * etc/MACHINES: * etc/PACKAGES: * etc/TUTORIAL.ja: Fixup 21.2 -> 21.4. * configure: Regenerate. * PROBLEMS (Running/Linux): Add entries for ESD interrupts and Debian Athena3d workarounds. * PROBLEMS: s/xemacs@xemacs.org/xemacs-beta@xemacs.org/ in requests for developer volunteers. 2001-04-16 Stephen J. Turnbull * XEmacs 21.4.0 "Solid Vapor" is released. 2001-04-16 Stephen J. Turnbull * etc/photos/wing*.png: Rename to ben*.png. 2001-04-14 Stephen J. Turnbull * XEmacs 21.2.47 "Zephir" is released. 2001-03-26 Paul Stodghill * configure.in: Don't #define __STDC__ in confdefs.h 2001-03-30 Ben Wing * etc\sample.init.el: * etc\sample.init.el (Init-kill-entire-line): * etc\sample.init.el (describe-foo-at-point): * etc\sample.init.el (kill-current-buffer): * etc\sample.init.el (kill-current-buffer-and-window): * etc\sample.init.el (grep-c-files): Removed. * etc\sample.init.el (grep-all-files-history): New. * etc\sample.init.el (grep-all-files-omitted-expressions): New. * etc\sample.init.el (grep-all-files-omitted-directories): New. * etc\sample.init.el (construct-grep-all-files-command): New. * etc\sample.init.el (grep-all-files-in-current-directory): New. * etc\sample.init.el (grep-lisp-files): Removed. * etc\sample.init.el (grep-all-files-in-current-directory-and-below): New. * etc\sample.init.el (clear-select): * etc\sample.init.el ((control kp-add)): * etc\sample.init.el (pause): * etc\sample.init.el ((eq system-type 'windows-nt)): Add documentation for defined functions. Change grep functions to be more generally useful. Document more specifically what the `menu-force' setting actually does -- what commands are overridden and how to access them. 2001-03-30 Stephen J. Turnbull * configure.usage: Document --with-file-coding. * etc/OXYMORONS: Add 2 oxymorons, clean up numbering, close RFC. * etc/NEWS: Fix typo. * configure.in: * configure: Fix typo, add -Wsign-compare if GCC, run autoconf. 2001-03-23 Stephen J. Turnbull * etc/gnuserv.1 (UNIX_DOMAIN_SOCKETS: * PROBLEMS (Problems with running XEmacs): Document TMPDIR lossage in gnuserv/gnuclient. 2001-03-06 Ben Wing * etc\sample.init.el: * etc\sample.init.el (Init-kill-entire-line): New. Fix to take into account the removed kill-whole-line changes. 2001-03-21 Martin Buchholz * XEmacs 21.2.46 "Urania" is released. 2001-03-19 Andy Piper * configure.in: default rel-alloc to off under cygwin 2001-03-15 Stephen J. Turnbull * ChangeLog: Fix CVS commit breakage from GTK merge, log GTK merge. * CHANGES-beta: * configure.in: Fix gratuitous whitespace changes from GTK merge. * configure.usage: Untabify --with-{gtk,gnome}. 2001-03-15 Stephen J. Turnbull * etc/OXYMORONS: New file of 21.4 codenames. 2001-03-12 Andy Piper * configure.in: only pick up mingw directory. 2001-03-02 Ben Wing * info\dir: Update to 21.4; clean up descriptions of manuals; replace misnomer "Local Packages" with more correct "Other Documentation". 2001-03-02 Ben Wing * etc\README: sample.emacs -> sample.init.el. 2001-03-09 William M. Perry * CHANGES-beta: * configure.in: * configure.usage: The Great GTK Merge. 2001-02-23 Andy Piper * configure.usage (--with-netinstall): add docs. * configure.in: with_netinstall is a new option. Default to off. 2001-02-23 Martin Buchholz * XEmacs 21.2.45 "Thelxepeia" is released. 2001-02-13 Martin Buchholz * aclocal.m4: Fix module support for AIX cc. Support possible future OSes irix7, aix5, osf[56]. 2001-02-12 Martin Buchholz * configure.in: No need for NON_GNU_CPP on SCO. 2001-02-10 Martin Buchholz * etc/MACHINES: Rewritten. Bitrot discarded. 2001-02-09 Martin Buchholz * configure.in: Prefer utime to utimes - it's more standard. Remove explicit checking for struct utimbuf. Remove explicit checking for . Combined into one simpler test for utime. Add explicit check for utimes, if utime not found. 2001-02-08 Martin Buchholz * XEmacs 21.2.44 "Thalia" is released. 2001-01-16 Mike Sperber * configure.in: Remove bogus path variable definitions. Reflect the fact that specifying --datadir also affects docdir and archlibdir. 2001-02-06 Martin Buchholz * configure.in: Only use -Wpointer-arith on non-glibc systems. 2001-02-02 Martin Buchholz * configure.in (wnn): Make sure wnn/commonhd.h can be #included, for the sake of gcc 2.97 fixincludes, which breaks it. 2001-01-27 Martin Buchholz * configure.in: Check for util.h for NetBSD's openpty. 2001-01-28 Martin Buchholz * config.sub: Upgrade to offical version 2001-01-12. * config.guess: Upgrade to offical version 2001-01-17. 2001-01-26 Martin Buchholz * XEmacs 21.2.43 "Terspichore" is released. 2001-01-21 Steve Youngs * ./etc/PACKAGES: Doc fix. * README.packages: Doc fix. 2001-01-17 Steve Youngs * README.packages: Update. * ./etc/PACKAGES: Update. 2001-01-20 Martin Buchholz * XEmacs 21.2.42 "Poseidon" is released. 2001-01-18 Martin Buchholz * PROBLEMS (Sun/Solaris): Yet another microimprovement. 2001-01-17 Martin Buchholz * PROBLEMS (Sun/Solaris): Replace --with-gnu-ld=no with --with-ld=/usr/ccs/bin/ld 2001-01-16 Robert Pluim * PROBLEMS (SunOS/Solaris): Document workaround for GNU ld bug on Solaris. Half mine, half Raymond Toy, half Martin Buchholz. 2001-01-16 Didier Verna * NEWS: document the modeline horizontal scrolling feature. 2001-01-17 Martin Buchholz * XEmacs 21.2.41 "Polyhymnia" is released. 2001-01-16 Martin Buchholz * PROBLEMS: Document MIPSpro ICE problem workaround. 2001-01-06 Golubev I. N. * configure.in: check for dlopen by linking program with . 2001-01-08 Andy Piper * configure.in: add extra_includes and populate appropriately for cygwin and mingw. 2000-12-28 Andy Piper * configure.in: allow --with-widgets=msw 2001-01-08 Martin Buchholz * XEmacs 21.2.40 is released. 2000-12-26 Stephen J. Turnbull * PROBLEMS (Running/Linux): Rehabilitate Mandrake; tip for color-gcc. 2000-12-20 Stephen J. Turnbull * PROBLEMS (Linux): document Mandrake policy, how to get Meta on Alt, and getaddrinfo() blocking trying to get localhost's CNAME. 2000-07-20 Kazuyuki IENAGA * configure.in: use input-method-xlib.o for USE_XFONTSET instead of input-method-xfs.o. * configure: ditto 2000-12-31 Martin Buchholz * XEmacs 21.2.39 is released. 2000-02-02 Daiki Ueno * configure.in: Added check if the berkdb has db_create or not. 2000-10-11 Yoshiki Hayashi * configure.in: Fix broken gcc detection for 2.7.2. 2000-12-11 Andy Piper * configure.in (XE_COMPUTE_RUNPATH): add netinstall as a subdirectory. * netinstall: new net installer for MS-Windows. 2000-12-05 Martin Buchholz * XEmacs 21.2.38 is released. 2000-11-26 Bjrn Torkelsson * configure.in: Only show message about DnD API if compiling with DnD 2000-11-09 Martin Buchholz * configure.in: Autodetect elf.h. 2000-11-14 Martin Buchholz * XEmacs 21.2.37 is released. 2000-10-19 Stephen J. Turnbull * README.packages: Add "uninstalled package" FAQ. * etc/PACKAGES: Add details on os-utils contents. 2000-11-01 Martin Buchholz * configure.in: Handle alloca with Compaq C on Alpha Linux. 2000-10-27 Martin Buchholz * configure.in: Oops, _getpt ==> _getpty 2000-10-23 Yoshiki Hayashi * Makefile.in.in: Remove lockdir related things. 2000-10-11 Martin Buchholz * configure.in: Remove checking for XFree86. Use feature tests instead! Add check for XRegisterIMInstantiateCallback. Add check for XRegisterIMInstantiateCallback's prototype. 2000-10-04 Yoshiki Hayashi * etc/NEWS: Change lprogress-display to progress-feedback. 2000-10-08 Karl M. Hegbloom * configure.in: Typo - missing paren. 2000-10-10 Martin Buchholz * configure.in: Use stropts.h, not sys/stropts.h. Use strtio.h, not sys/strtio.h. 2000-10-06 Martin Buchholz * configure.in: Pretend that DEC OSF >= 5 is really DEC OSF 4. 2000-10-04 Martin Buchholz * XEmacs 21.2.36 is released. 2000-08-29 Robert Pluim * etc/NEWS: fix reference to progress-feedback-use-echo-area 2000-09-27 Martin Buchholz * configure.in: Big signal/process handling overhaul. Autoconfiscate lots of functions and headers: getpt _getpt grantpt unlockpt ptsname killpg tcgetpgrp openpty pty.h libutil.h sys/stropts.h sys/strtio.h isastream 2000-09-20 Martin Buchholz * etc/xemacs.1: Spelling fixes. Remove stuff that doesn't belong. 2000-09-19 Martin Buchholz * *: Spelling mega-patch 2000-09-16 Martin Buchholz * configure.in: Remove strcasecmp. * etc/Emacs.ad: Remove Energize from comments. 2000-09-16 Martin Buchholz * configure.in: Add -Kalloca to $c_switch_system when using Unixware native compiler (if necessary). 2000-09-15 Martin Buchholz * configure.in: Prevent spurious "No" in configure output when not using gcc. Oh, and it's "no", not "No". Oh, and it's "yes", not "Yes". 2000-09-14 Martin Buchholz * configure.in: Save 2 sed process invocations per Makefile. 2000-08-22 SL Baur * configure.in (after_morecore_hook_exists): Don't add /usr/shlib to link path if compiling on Alpha/Linux. 2000-09-01 Martin Buchholz * Makefile.in.in (depend): cd to the correct directory. 2000-08-31 Martin Buchholz * configure.in: with_widgets is incompatible with X11 R4. * configure.in: Make Balloon Help conditional on finding shape.h 2000-08-02 Stephen J. Turnbull * etc/Emacs.ad: Document usage of FontSet resource for menubar. 2000-08-09 Vin Shelton * configure.in: Check for UNIX98 PTYs. Patch from Florian Weimer . 2000-07-31 Yoshiki Hayashi * configure.usage: Remove lockdir document. 2000-07-31 Martin Buchholz * configure.in: Make knowledge of machine and opsys optional. Make existence of s&m files optional. Rely on configure alone if s&m files not found. * configure.in: Use only configure-time tests to detect getloadavg(). Don't check for kstat.h if we have getloadavg(). Check for sys/loadavg.h if we have getloadavg(). 2000-07-15 Ben Wing * Makefile.in.in (configure): all-elcs target now uses update-elc-2.el not update-elc.sh 2000-07-19 Martin Buchholz * XEmacs 21.2.35 is released. 2000-07-13 Martin Buchholz * configure.in: --with-menubars=yes should not be an error. * configure.in: "compiling in support for Athena" message was sometimes lying. 2000-07-12 Martin Buchholz * configure.in: Rewrite xmkmf symbol detection to avoid redefinition of symbols we've already defined. Also, handle xmkmf symbols with values other than 1. 2000-07-12 Martin Buchholz * configure.in: Make sure Unix98 socklen_t is defined. Use ANSI C mode `-std1' with DEC C instead of `-std'. 2000-07-09 Martin Buchholz * configure.in: Replace SMART_INCLUDE with a dumber, but more reliable method. 2000-07-10 Martin Buchholz * modules/zlib/Makefile: * modules/sample/Makefile: * modules/ldap/Makefile: * modules/base64/Makefile: * Makefile.in.in: rm -f ==> $(RM) define SHELL=/bin/sh 2000-07-09 Martin Buchholz * configure.in: PostgreSQL rewrite. - Don't look for postgreSQL in /usr/local. - Simplify detection code. - Don't use SMART_INCLUDE. - Don't autodetect if --with-postgresql=no. 2000-07-08 Ben Wing * configure.usage: addl doc for graphics libs, with-msw. 2000-07-09 Martin Buchholz * configure.in: sh builtin `test' uses `=', not `=='. 2000-07-08 Ben Wing * configure.in: add -lcomdlg32 for cygwin. 2000-07-05 Craig Lanning * aclocal.m4 (can_build_shared): First pass at module support for cygwin and mingw. * configure: * configure (xe_check_libs): * configure (acfindx): * configure (ac_x_includes): * configure (ac_x_libraries): * configure (ac_cv_lib_dnet_dnet_ntoa): * configure (xe_msg_checking): * configure (xe_runpath_dir): * configure (xetest): * configure (ac_err): * configure (ac_safe): * configure (with_xmu): * configure (bitmapdir): * configure (with_xauth): * configure (libs_xauth): * configure (with_cde): * configure (with_ldap): * configure (with_ldap_krbdes): * configure (save_c_switch_site): * configure (with_postgresql): * configure (with_xface): * configure (with_jpeg): * configure (with_png): * configure (with_tiff): * configure (athena_lib): * configure (have_motif): * configure (all_widgets): * configure (with_xim): * configure (with_xfs): * configure (with_wnn): * configure (with_canna): * configure (extra_objs): * configure (ac_cv_c_inline): * configure (have_esd_config): * configure (c_switch_site): * configure (with_ncurses): * configure (with_gpm): * configure (xealias): * configure (xehost_os): * configure (can_build_shared): * configure (xcldf): * configure (LTLD): * configure (ld_dynamic_link_flags): * configure (Mail): * configure.in: * configure.in (after_morecore_hook_exists): * configure.in (xetest): * configure.in (emacs_cv_localtime_cache): * configure.in (Mail): * configure.in: Clean up configure support for cygwin and mingw. 2000-06-27 Darryl Okahata * PROBLEMS: Document broken native audio for recent patches and releases of HP-UX. 2000-06-10 Ben Wing * Makefile.in.in (install-arch-dep): WINDOWSNT -> WIN32_NATIVE. __CYGWIN32__ -> CYGWIN. 2000-06-01 Andreas Jaeger * configure.in: Recognize s390. * config.guess: New version from GNU config archive. * config.sub: Likewise. 2000-05-28 Martin Buchholz * XEmacs 21.2.34 is released. 2000-05-15 Yoshiki Hayashi * configure.in: Do not define DOUG_LEA_MALLOC when using other malloc scheme. Remove unused variable use_minimal_tagbits. 2000-05-02 Yoshiki Hayashi * configure.in: Remove lockdir. 2000-04-15 Andy Piper * etc/Emacs.ad: add select-start() back into text translations. 2000-05-01 Martin Buchholz * XEmacs 21.2.33 is released. 2000-04-27 Katsumi Yamaoka * configure.in: Use ORDINARY_LD instead of "\$(ORDINARY_LD)" for the value of LD. 2000-04-26 Ben Wing * configure.in: add support for --quick-build. Remove --no-doc-file, subsumed. 2000-04-19 Martin Buchholz * configure.in: * src/config.h.in: Rewrite SMART_INCLUDE implementation to actually work. Be paranoid - Avoid use of spaces in these macro definitions. Leave alloca() definition at start of compilation unit, as AIX requests. Rename SMART_INCLUDE_MACRO to SMART_INCLUDE_INDIRECTIONS. 2000-04-13 Yoshiki Hayashi * configure.in: Enable clash-detection by default. * configure.usage: Update documentation. 2000-04-06 Andy Piper * configure.in: fix typo. 2000-04-12 Andy Piper * etc/Emacs.ad: give the gui-element face the same font as the menubar and popups. Add translations for text widgets. 2000-04-03 Yoshiki Hayashi * configure.in : Fix printing error check warning even if it is not compiled in. 2000-02-19 Jan Vroonhof * xemacs/configure.in: Do a normal link when compiling with --pdump. Don't try compiling an unexec object file. 2000-03-27 Didier Verna * configure.in: reorganize the output by topic. New configure test to define the proper SMART_INCLUDE macro. * configure.usage: slightly rearanged some options. 2000-03-25 Didier Verna * configure.in: rename `foo_h_path' to `foo_h_file' for variables representing real headers and not directories. This applies to `db_h_path', `curses_h_path', `term_h_path', `tt_c_h_path' and `soundcard_h_path'. 2000-03-21 Didier Verna * configure.in: try to find postgresql headers at different places and define POSTGRES_H_PATH as appropriate. 2000-03-22 Andy Piper * config.h.in: add ERROR_CHECK_GLYPHS. * configure.in: add error_check_glyphs. 2000-03-20 Martin Buchholz * XEmacs 21.2.32 is released. 2000-03-15 Olivier Galibert * configure.in: Add dumper.o object when pdumping. 2000-02-20 Olivier Galibert * Makefile.in.in: Add pdump install support * configure.in: Add EMACS_PROGNAME config.h variable. 2000-03-10 SL Baur * configure.usage: document --with-postgresql flag. 2000-03-06 SL Baur * configure.in: add autodetection of PostgreSQL runtime libraries 2000-03-09 Yoshiki Hayashi * aclocal.m4 (XE_SHLIB_STUFF): Define ld_shlibs to yes when C compiler can produce shared libraries. 2000-03-01 Didier Verna * etc/NEWS: update the rect.el entry. 2000-02-26 Martin Buchholz * configure.in: Unconditionally define SHELL, to allow working with (unreleased) autoconf 2.14.1, found on Mandrake 7.0 systems. 2000-02-23 Martin Buchholz * XEmacs 21.2.31 is released. 2000-02-21 Martin Buchholz * XEmacs 21.2.30 is released. 2000-02-20 Martin Buchholz * configure.in: Enforce use of autoconf version >= 2.13. * configure.in: Fix OS release test on Solaris. 2000-02-19 Marcus Thiessel * PROBLEMS: Update email address. Describe more HP Motif errors. 2000-02-19 Jan Vroonhof * configure.in: Split Solaris version test in two parts. In the Bourne shell the "-a" operator does NOT short-circuit. 1999-12-15 Jan Vroonhof * (configure.in): Autodetect broken gcc versions. Patch from WM Perry with tiny tweaks by Yoshiki Hayashi and yours truly. 2000-02-17 Martin Buchholz * configure.in: Autodetect sys/param.h. Reorganize AC_CHECK_HEADERS call. * src/config.h.in: Add HAVE_SYS_PARAM_H. 2000-02-16 Martin Buchholz * configure.in: Test for arm simply using arm* instead of arm-* 2000-01-05 Yoshiki Hayashi * etc/TUTORIAL.ja: Synch with English version. 2000-02-16 Martin Buchholz * XEmacs 21.2.29 is released. 2000-02-16 Martin Buchholz * configure.in: Don't use rel_alloc if malloc() calls mmap(). Discover this by looking for M_MMAP_THRESHOLD. * configure.in: Don't define POSIX_C_SOURCE on Solaris, due to bugs in (at least) Solaris 2.5 headers. 2000-01-29 Craig Lanning * configure.in: Fix detection of XPM on systems without X11. 2000-02-11 Martin Buchholz * configure.in: * src/config.h.in: Define _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, but only on tested Operating systems - Linux && SunOS >= 5.5. 2000-02-09 Valdis Kletnieks * aclocal.m4: Support dlls on aix[34]. 2000-02-09 Martin Buchholz * .cvsignore: Ignore gmon.out 2000-02-08 Martin Buchholz * configure.in: Sync Berkeley db autodetection with src/database.c 2000-02-07 Martin Buchholz * configure.in: check for XConvertCase. 2000-02-07 Martin Buchholz * XEmacs 21.2.28 is released. 2000-01-27 URA Hiroshi * configure.in: added getaddrinfo and getnameinfo to AC_FUNC. 2000-01-26 Martin Buchholz * configure.in: Backout the /etc/ld.so.conf patch of 2000-01-18. 2000-01-24 Martin Buchholz * configure.in: Always use our own realpath(), not the system one. 2000-01-25 Martin Buchholz * configure.in: Default Drag-N-Drop to "no" 1999-12-28 Max Matveev * configure.in: add new machine type for IRIX 6.[2-5] to switch from using unexelf.o to unexelfsgi.o for just those versions of IRIX. In the ideal world it would be handled by the s/irix6-0.h but since machine config is included AFTER OS config, I had to add a new machine type. 2000-01-22 Andy Piper * configure.in: add winspool to windows libraries. 2000-01-22 Martin Buchholz * configure.in: Add more warnings to default gcc flags. 2000-01-20 Daniel Pittman * configure.in: Find Athena headers hidden in even more obscure places. That is, search Xaw3D/ as well as X11/Xaw3D/. 2000-01-19 Martin Buchholz * configure.in: Add support for NetWinders. Patch by Sean MacLennan 2000-01-18 Martin Buchholz * configure.in: Use /etc/ld.so.conf at link-time, if available. 2000-01-18 Martin Buchholz * XEmacs 21.2.27 is released. 2000-01-15 Adrian Aichner * etc/TUTORIAL.de: Update copyright and fix typo. 2000-01-14 Martin Buchholz * configure.in: Create a .dbxrc in the src directory, like .gdbinit. * configure.in: Add `tests' symlink to make it easier to find automated tests directory. 2000-01-14 Andy Piper * configure.in: for cygwin 1.0 we must pick up the mingw32 headers before the cygwin headers. 2000-01-08 Martin Buchholz * configure.in: - Allow find-tag to work in the build directory. - rename src/gdbinit to src/.gdbinit, so that gdb can find it. - Less verbose messages when creating .sbinit, .gdbinit, TAGS. 2000-01-07 Marcus Thiessel * config.sub: Upgrade to 1.169, imported from autoconf's CVS * config.guess: Upgrade to 1.158, imported from autoconf's CVS 2000-01-03 Michael Sperber [Mr. Preprocessor] * etc/NEWS: Document mail spool locking overhaul. * configure.usage (--mail-locking): * configure.in: Handle --mail-locking option correctly in preparation for the movemail locking overhaul. 2000-01-05 Daniel Pittman * configure.in (Installation): Report which Athena header/library combo is being used. 1999-12-31 Martin Buchholz * XEmacs 21.2.26 is released. 1999-12-24 Martin Buchholz * XEmacs 21.2.25 is released. 1999-12-17 Yoshiki Hayashi * README: Remove msdos part. 1999-12-17 Martin Buchholz * configure.in: Oops. xpm doesn't actually depend on X11. I got confused by the name (like others get confused by `xemacs'?) 1999-12-14 Martin Buchholz * XEmacs 21.2.24 is released. 1999-12-13 Martin Buchholz * configure.in: * configure.usage: - Autodetect NAS. Change Docs accordingly. * configure.in: Warn if configure --with-xpm --without-x11. 1999-12-09 Martin Buchholz * configure.in: Clean up sound support. - variable `old_nas' was used but never set. - change `with_esd' to `with_esd_sound' for consistency. - Don't trust the output of `esd-config --libs`; test it. - Add `esd-config --cflags` to c_switch_site. - Die if ESD sound requested, but not available. - ESD is not dependent on X, therefore use LIBS, not libs_x. 1999-12-07 Martin Buchholz * configure.in (--with-sound): Variable with_esd was mispelled. 1999-12-07 Martin Buchholz * XEmacs 21.2.23 is released. 1999-11-30 Martin Buchholz * configure.in: Fix module support. --with-modules=yes was completely broken. AC_DEFINE(HAVE_DLFCN_H) was invoked twice. Remove linking test for _dlopen - seems totally bogus. Die if --with-modules=yes but no module support found. Do nothing, not even msg, if --with-modules=no. 1999-11-17 Isaac Hollander * Makefile.in.in: add and use TAR macro. Sometimes tar only copies symlinks instead of the actual files 1999-11-30 Martin Buchholz * aclocal.m4: Shared library support for hpux >= version 11 1999-11-29 Martin Buchholz * Makefile.in.in (beta): `make beta' should rebuild info. 1999-11-29 XEmacs Build Bot * XEmacs 21.2.22 is released 1999-11-28 Martin Buchholz * XEmacs 21.2.21 is released. 1999-11-26 Martin Buchholz * configure.in: Add configure support for Unix 98 type ssize_t. 1999-11-27 Martin Buchholz * Makefile.in.in: Make sure config.values.sh is up to date. Use $(SHELL) instead of sh or /bin/sh consistently. Delegate `depend' target to src/Makefile.in.in. 1999-10-27 Yoshiki Hayashi * INSTALL: Update configure option. 1999-10-12 Alexandre Oliva * configure.in (native_sound_lib, *-sgi-*): Check for audio.h. (LIBS): Check for libCsup. * etc/sample.Xdefaults: adds a reference to beNiceToColormap, so that the user can guess what to do if xemacs' dialogs are butt ugly. 1999-10-24 Jan Vroonhof * config.h.in: define HAVE_ESD_SOUND * configure.in: Add support for esd sound. --with-sound now accepts a list of options. * configure.usage (--native-sound-lib): ditto. 1999-11-17 Martin Buchholz * Makefile.in.in (install-arch-dep): Fix `make install' if prefix != exec_prefix. 1999-11-15 Martin Buchholz * configure.in: - Accept --with-database=gdbm as an alias for --with-database=gnudbm. - rename with_database_gnudbm to with_database_gdbm. * aclocal.m4 (ld_dynamic_link_flags): Just use empty value for ld_dynamic_link_flags on Solaris. Else CC gives us: CC: Warning: Option -Wl,-Bdynamic passed to ld, if ld is invoked, ignored otherwise /usr/ccs/bin/ld: illegal option -- W 1999-11-13 Jason R Mastaler * etc/FTP: Updated FTP mirrors list. Replaced GNU FTP document with a URL. 1999-11-13 Jason R Mastaler * etc/MAILINGLISTS: Updated mailing list subscription information. Replaced GNU MAILINGLISTS document with a URL. 1999-11-10 XEmacs Build Bot * XEmacs 21.2.20 is released 1999-09-21 Martin Buchholz * configure.in: Autodetect Unix98 PTY 1999-08-30 Robert Pluim * README.packages: Add description of package-get-provider 1999-10-22 Vin Shelton * INSTALL: Added more information about README.packages, and re-numbered some bullets. 1999-10-24 Jan Vroonhof * INSTALL: Update disk requirements. Refer to README.packages 1999-10-21 Andy Piper * configure.in (all_widgets): Only use xaw3d if we really have it. 1999-10-06 Andy Piper * Makefile.in.in: use WINDOWSNT for mingw install. 1999-08-01 Adrian Aichner * etc/DISTRIB: Update IP address of ftp.xemacs.org. * etc/NEWS: Fix typo 1999-09-25 Andy Piper * configure.in: check for Xaw3d and use in preference to Xaw 1999-09-21 Martin Buchholz * Makefile.in.in: All Makefiles should #include config.h 1999-09-19 Michael Sperber [Mr. Preprocessor] * configure.in (EMACS_CONFIGURATION): Use $configuration, not $canonical, so that installation paths and dynamic path setup will stay in synch. 1999-09-20 Andy Piper * Makefile.in.in: use __CYGWIN32__ and __MINGW32__ to predicate installation linkage. 1999-08-29 Andreas Jaeger * configure.in (machine): Recognize MIPS/Linux. 1999-08-27 Jan Vroonhof * modules/zlib/Makefile (distclean): * modules/ldap/Makefile (distclean): * modules/sample/Makefile (distclean): * modules/base64/Makefile (distclean): new target * Makefile.in.in (top_distclean): Add package directories (SUBDIR_DISTCLEAN): New variable, add module directories 1999-09-01 Martin Buchholz * configure.in: Warn, but otherwise ignore, obsolete arguments. 1999-08-20 Olivier Galibert * configure.in: Add --pdump option. * configure.usage: Ditto. 1999-08-04 Andy Piper * configure.in: report widget usage correctly. beef up setting. * Makefile.in.in: fix install-arch-dep for mingw32. 1999-07-28 Andy Piper * config.h.in: add new LWLIB defines. * configure.in: fix definitions of widget defines with various toolkit options. 1999-07-30 XEmacs Build Bot * XEmacs 21.2.19 is released 1999-07-28 Michael Sperber [Mr. Preprocessor] * configure.in: Removed superfluous call to AC_FUNC_MMAP. 1999-03-07 Gregory Neil Shapiro * configure.in: Check for Kerberos and the need for the DES library before checking for LDAP in case LDAP requires these libraries. 1999-07-26 SL Baur * configure.in: Rename --with-shlib to --with-modules for consistency with the other two options that use that name. * configure.usage (--with-modules): Document it. 1999-07-23 Jan Vroonhof * etc/custom/example-themes/example-theme.el: * etc/custom/example-themes/europe-theme.el: * etc/custom/example-themes/ex-custom-file: Some simple examples illustrating the custom theme support. 1999-07-17 MORIOKA Tomohiko * etc/HELLO (Thai): Modify for new font. 1999-07-22 SL Baur * configure.in: add sco7 support From Bob Weiner 1999-07-22 SL Baur * Makefile.in.in (install-arch-dep): Install config.values into docdir. From Karl M. Hegbloom 1999-07-21 SL Baur * Makefile.in.in (inststaticdir): New variable. (instvardir): Ditto. (install-arch-dep): Use them. * configure.in (sitelispdir): Need to use ${PROGNAME}. (sitemoduledir): Ditto. (inststaticdir): New variable. (instvardir): Ditto. (infodir): Use them. (lispdir): Ditto. (moduledir): Ditto. (pkgdir): Ditto. (etcdir): Ditto. (lockdir): Ditto. (archlibdir): Ditto. 1999-07-14 SL Baur * InfoDock 4.0.8 is released 1999-07-13 XEmacs Build Bot * XEmacs 21.2.18 is released 1999-07-06 SL Baur * config.guess (main): Synch with newer config.guess for HP support. From Marcus Thiessel 1999-06-25 Michael Sperber [Mr. Preprocessor] * configure.in (with_prefix): Added --with-prefix, defaults to yes, to control whether the value of --prefix is compiled into the binary. 1999-07-03 Andy Piper * configure.usage (--with-widgets): add. 1999-07-02 Andy Piper * configure.in: Make sure we get motif in lwlib if we have widgets and motif. 1999-06-25 SL Baur * configure.in (version): Fix --with-infodock test. 1999-06-15 Michael Sperber [Mr. Preprocessor] * configure.in: --prefix and --exec-prefix are now only compiled into the binary if user-defined. 1999-03-23 Michael Sperber [Mr. Preprocessor] * configure.in: Made docdir configurable. * Makefile.in (docdir): Added variable for custom DOC directory. 1999-06-22 XEmacs Build Bot * XEmacs 21.2.17 is released 1999-06-13 Oscar Figueiredo * configure.in (with_ldap): Check libldap independently of liblber Do not test alternate library names such as libldap10 Test the presence of a variety of LDAP API functions which were formerly assumed to be present according to dubious heuristics 1999-06-11 XEmacs Build Bot * XEmacs 21.2.16 is released 1999-06-04 SL Baur * configure.in (CPP): Correct test for locating $site_prefix include directories. 1999-06-04 XEmacs Build Bot * XEmacs 21.2.15 is released 1999-06-01 Gunnar Evermann * README.packages: fix typos: user pacakge hierarchy is ~/.xemacs From: Eric Veldhuyzen 1999-05-25 Jan Vroonhof * configure.in: For non-beta's use x.y.z format for version strings. 1999-06-03 SL Baur * version.sh: add emacs_is_beta initialization * configure.in: Implement patch levels in version number From Jan Vroonhof * configure.in: * configure.usage: * config.h.in: Rename session option to wmcommand. From Oliver Graf 1999-05-16 Mike McEwan * info/dir: Add `emodules.info' entry to the top info dir. 1999-05-31 SL Baur * configure.in (CPP): Don't check for include subdirectories in site-prefix directories. This check loses in valid configurations like /usr/jp in TurboLinux. Conditionally add include directory to site switches. 1999-05-14 Hrvoje Niksic * configure.in (quoted_arguments): Support --error-checking=byte-code. 1999-05-14 XEmacs Build Bot * XEmacs 21.2.14 is released 1999-05-11 SL Baur * version.sh (infodock_build_version): Synch InfoDock version. 1999-05-06 Hrvoje Niksic * aclocal.m4 (ld_dynamic_link_flags): Change -Bexport to -Bdynamic for Solaris. 1999-05-03 Hrvoje Niksic * configure.in (xemacs_betaname): Don't generate Installation.el. * Makefile.in.in (top_distclean): Don't remove Installation.el. 1999-04-29 Andy Piper * configure.in: add mingw32 as a target platform. add nt process support options. 1999-03-30 MORIOKA Tomohiko * etc/HELLO (Amharic): New language. (Slovak): Likewise. (Thai): Likewise (by Virach Sornlertlamvanich). (Greek): Fixed (by Yannis Haralambous). 1998-09-04 MORIOKA Tomohiko * configure.in: Delete mule-coding.o. 1999-04-22 Gunnar Evermann * lwlib/xlwmenu.c (string_width_u): Initialise chars before calling XmStringGetLtoR (string_draw_u): ditto and check return value of XmStringGetLtoR() 1999-04-05 Olivier Galibert * Makefile.in.in (GENERATED_HEADERS): Don't generate puresize-adjust.h anymore * configure.usage: Remove everything gung-ho or purespace related * configure.in: Ditto 1999-04-17 Hrvoje Niksic * configure.in: Check for getloadavg(). 1999-03-12 XEmacs Build Bot * XEmacs 21.2.13 is released 1999-03-09 SL Baur * Makefile.in.in (LC_ALL): Try very, very hard to build in C locale. 1999-03-05 XEmacs Build Bot * XEmacs 21.2.12 is released 1999-03-04 Martin Buchholz * Makefile.in.in (top_distclean): Remove confdefs.h as well. 1999-03-03 Martin Buchholz * configure.in: `uname -v` -> "`uname -v`": backquoted expressions need additional double quotes to be a single token. Use separate if's to avoid extra process invocations. 1999-01-05 Gunnar Evermann * PROBLEMS: Document crashes on SPARC with gcc 2.8.1. 1999-03-01 XEmacs Build Bot * XEmacs 21.2.11 is released 1999-02-16 Andy Piper * PROBLEMS: add entries for building under Cygwin. 1999-02-14 Jan Vroonhof * README.packages: Clear up that mule-sumo packages is used _in addition_ to the normal sumo. 1999-02-16 Martin Buchholz * configure.usage: Move quantify/purify into debug flags section 1999-02-10 Martin Buchholz * configure.in: - Fixup xfs comments and redundant option checking * configure.in: * INSTALL: * lisp/paths.el: - improved automounter tmp directory support. - support 4 (!) empirically discovered automounter conventions 1999-02-10 Martin Buchholz * lwlib/lwlib.h: - redo CONST hacking to deal with X11 R4, which was broken in a previous patch. 1999-02-10 Martin Buchholz * configure.in: - irix uses -rpath 1999-02-10 Martin Buchholz * configure.in: - Check for XOpenIM before using xim=xlib - only use XmIm if $have_motif = yes 1999-02-10 Martin Buchholz * configure.in. Port to BSDI BSD/OS 4.0. 1999-01-07 Michael Sperber [Mr. Preprocessor] * configure.in: Warn if using Motif dialog boxes on AIX 4.3. 1999-02-05 XEmacs Build Bot * XEmacs 21.2.10 is released 1999-02-02 XEmacs Build Bot * XEmacs 21.2.9 is released 1999-02-01 Glynn Clements * etc/recycle.xpm: Fix colours so that they work on TrueColor and DirectColor displays 1999-01-21 Andy Piper * configure.in: make xface detection specifc to a window system in general rather than just X. 1999-18-10 Andy Piper * configure.in: remove -O3 prevention on cygwin - current versions cope ok now. remove dll prevention on cygwin - the new module code checks correctly. 1999-01-10 J. Kean Johnston * configure.in: Added moduledir as the path where loadable modules are stored. Added --with-site-modules and --moduledir options. - Ensure the SCO OpenServer compiles with --dynamic by default - Check for dlfcn.h for dynamic loader - Renamed dll.o to emodules.o and changed dynamic loader tests - Renabled code that deals with site-lisp so that it is handled correctly when a user specifies --with-site-lisp. * aclocal.m4: Replaced entire file with more complete DLL tests by way of libtool. * config.usage: Removed TAB characters which caused it to be displayed incorrectly on terminals where TAB != 8. - Added help text to describe --with-site-modules and --moduledir. * INSTALL: Updated documentation to describe module directories * Makefile.in.in: Added moduledir, sitemoduledir macros. - Make those directories at install time. 1998-12-28 Martin Buchholz * XEmacs 21.2.8 is released. 1998-12-28 Martin Buchholz * PROBLEMS: Document Linux GNU Libc 2.0 I18N crashes. 1998-12-24 Martin Buchholz * XEmacs 21.2.7 is released. 1998-12-20 Martin Buchholz * configure.in: Redo DBM support - die if dbm support requested, but not provided. - properly check for libgdbm, then libc, then libdbm - properly check for ndbm.h - comments improved - XE_DIE should always prefix messages with Error: for clarity 1998-12-07 Martin Buchholz * xemacs.mak (TEMACS_OBJS): (DOC_SRC4): - Remove pure.c, pure.obj 1998-12-06 Martin Buchholz * Makefile.in.in (distclean): * dynodump/Makefile.in.in (distclean): * src/Makefile.in.in (distclean): * lib-src/Makefile.in.in (distclean): * lwlib/Makefile.in.in (distclean): - Make sure GNUmakefile is deleted. 1998-12-17 Andy Piper * configure.in (all_widgets): remove gui.o addition - its always in the makefile now. * configure.in: add gui-msw.o to msw objects. 1998-12-16 Andy Piper * XEmacs 21.2.6 is released 1998-12-05 XEmacs Build Bot * XEmacs 21.2.5 is released 1998-11-28 SL Baur * XEmacs 21.2-beta4 is released. 1998-11-27 SL Baur * configure.in: Linux/Arm Support. From James LewisMoss 1998-11-27 Takeshi Hagiwara * configure.in: Fix the realpath() problem of UnixWare2.1.3. Patches for NEC's sysv4.2 machine. 1998-11-09 Kazuyuki IENAGA * configure.in: Check if there's wnn4.2 or wnn6 specific library installed. The Wnn library will be checked if the --with-wnn and/or --with-wnn6 was specified compulsory. 1998-07-28 Jan Vroonhof * configure.in (CPP): Too many spaces im run-patch flag detection. 1998-10-15 SL Baur * XEmacs 21.2-beta3 is released. 1998-10-13 Andy Piper * configure.in: enable drag and drop support by default if mswindows is detected. 1998-10-09 Kevin Oberman * config.sub: Fix for Alpha architecture 1998-10-05 Andy Piper * configure.in: don't enable shared lib support for cygwin unless explititly told to. 1998-10-02 Andreas Jaeger * etc/xemacs.1: Remove misplace "\". 1998-09-29 SL Baur * XEmacs 21.2-beta2 is released. 1998-09-09 Gunnar Evermann * lwlib/xlwmenu.c: * lwlib/xlwscrollbar: fix for Motif >=2.0 Patch provided by Glenn Barry * PROBLEMS: XEmacs 21.0 now works on HP-UX 11.0 1998-09-02 Andy Piper * configure.in: check for cygwin32/version.h. 1998-08-31 Michael Sperber [Mr. Preprocessor] * PROBLEMS: Added AIX 4.3 note. * configure.in: Better detection of AIX 4.3. AIX xlc can do -g and -Ox at the same time. 1998-09-05 SL Baur * etc/check_cygwin_setup.sh: grammar fix. 1998-09-02 Andy Piper * etc/check_cygwin_setup.sh: fix a couple of buglets. 1998-08-23 Adrian Aichner * etc/sample.emacs: Enable sound support on mswindows devices. 1998-08-17 P. E. Jareth Hein * configure.in: Alter configure so that it checks for mismatched PNG header/libs, screams a little louder on old/mismatched library conditions for both PNG and XPM, stop screaming if png is not found and no window-system is selected, and fixed a bug in the XPM checking. 1998-08-06 Adrian Aichner * etc/TUTORIAL.de: Fixing typos and grammatical errors. Fixing inconsistent usage of RET, , and (only using now). Changing TUTORIAL to TUTORIAL.de throughout itself. Adding english equivalent to german translation of all concepts used in TUTORIAL.de. 1998-08-07 P. E. Jareth Hein * configure.usage (--without-gif): Modify text to reflect status of GIF support 1998-08-04 P. E. Jareth Hein * configure.in: add back in the support for the in-core GIF code, change the required PNG library version to 1.0.2, and add a warning if PNG not found, since PNG images are now distributed as part of the core. Also minor wording changes in things reported to the user. 1998-07-28 Kai Haberzettl * BETA: Update mailing-list address for build-reports 1998-08-01 SL Baur * Makefile.in (TAGS tags): Add variable `tagslisp' so a TAGS file can built that includes package lisp. 1998-07-23 Martin Buchholz * configure.in: - support multiple flavors of alpha, (XEmacs treats them identically) - Fix AC_TRY_RUN so that actions have access to $? - Identify DEC C compilers. Add default optimization CFLAGS and always use -std. - Use an extensible method for adding support for future compilers. - Have SunPro C use that same extensible method. - Make sol2 always use `-R', Linux and DEC OSF always use `-rpath' 1998-07-19 SL Baur * XEmacs 21.2-beta1 is released. 1998-07-18 SL Baur * config.guess: Synched with latest FSF version. 1998-07-12 Bjrn Torkelsson * Makefile.in: added LDFLAGS. 1998-07-12 SL Baur * etc/GOATS: Removed. * README: Bump version numbers. * info/dir: Ditto. * etc/README: Ditto. * etc/NEWS: Ditto and purge pre-21.0 stuff. * version.sh: Ditto. * XEmacs 21.0-pre5 is released. 1998-07-10 SL Baur * configure.in (with_offix): Default --with-offix to off. 1998-07-09 SL Baur * configure.in: Handle multiple database libraries. From Gregory Neil Shapiro * XEmacs 21.0-pre4 is released. * configure.in: Fix test for InfoDock sources. * etc/BETA (writing): Update patch creation instructions. * etc/FTP: Update FTP mirror list. * etc/DISTRIB: Remove duplicated FTP mirror list. * etc/xemacs.1 (ftp): Ditto. 1998-07-09 Oliver Graf * configure.usage: added warning to --with-offix 1998-06-29 SL Baur * etc/gnuserv.1 (this): Email address for Ben Wing is ben@xemacs.org. * etc/gnuserv.README (README): Ditto. * etc/xemacs-ja.1: Ditto. 1998-06-28 SL Baur * configure.in: Berkeley DB autodetection fixes From Martin Buchholz * etc/BABYL: Moved to rmail package * etc/enriched.doc: Moved to xemacs-base package * etc/MSDOS: * etc/GNUS-NEWS: deleted 1998-06-21 Michael Sperber [Mr. Preprocessor] * etc/NEWS: Added references to documentation about packages and path setup. * etc/README: Synched. 1998-06-19 SL Baur * XEmacs 21.0-pre3 is released. 1998-06-20 Michael Sperber [Mr. Preprocessor] * etc/PACKAGES: * etc/BETA: Moved some package stuff into Texinfo docs. Other nitpicks 1998-06-20 Kazuyuki IENAGA * configure.in: Added check if the berkdb has db_open or not. (With fixes from Martin Buchholz) 1998-06-19 SL Baur * XEmacs 21.0-pre2 is released. 1998-06-18 Michael Sperber [Mr. Preprocessor] * configure.in: Added -lC for static linking under AIX 4.2. 1998-06-14 SL Baur * XEmacs 21.0-pre1 is released. 1998-06-14 Oscar Figueiredo * etc/NEWS: Updated information about customization of the automatic info dir file generation using `Info-auto-generate-directory' and `Info-save-auto-generated-dir' 1998-06-11 SL Baur * XEmacs 21.0-beta43 is released. 1998-06-04 Oliver Graf * tests/Dnd/README: a step-by-step test run * tests/Dnd/droptest.el: some clarifications * tests/Dnd/droptest.sh: created, creates test files 1998-06-01 Oliver Graf * configure.in (summary): added experimental to dragndrop option * configure.usage: added experimental note to --with-dragndrop * tests/Dnd/droptest.el: extra start-drag-region function changed the experimental- stuff 1998-06-02 Andy Piper * etc/check_cygwin_setup.sh: set more intelligent defaults for windows 95. 1998-06-07 SL Baur * lwlib/xlwmenu.c: Add room for the 0 byte sentinel. 1998-06-05 Colin Rafferty * lwlib/xlwmenu.c: Made newchars be as large as it needs to be. 1998-06-01 SL Baur * XEmacs 21.0-beta42 is released. * etc/sounds: Removed, now in the sounds-au package. 1998-05-29 Andy Piper * configure.in: don't use -O3 for cygwin. * etc/check_cygwin_setup.sh: new file to check that cygwin is setup correctly for XEmacs operation. 1998-05-28 P. E. Jareth Hein * configure.in: Switch from giflib to gifreader for our GIF image support (no other mods needed) 1998-05-28 Oliver Graf * configure.in: only one DnD protocol, CDE has priority over OffiX * tests/Dnd/README: some changes reflecting recent modifications * tests/Dnd/dragtest.el: removed * tests/Dnd/droptest.el: cosmetics and comments 1998-05-26 Oliver Graf * tests/Dnd/droptest.el: adapted to CDE extensions 1998-05-25 Hans Guenter Weigand * configure.in: * config.sub: add initial OpenBSD support 1998-05-21 Andy Piper * configure.in: check for msw dialogs. 1998-05-23 SL Baur * XEmacs 21.0-beta41 is released. 1998-05-17 SL Baur * configure.in (CPP): Change -O2 to -O3. Suggested by Martin Buchholz 1998-05-15 SL Baur * XEmacs 21.0-beta40 is released. 1998-05-13 SL Baur * configure.in (ZSH_VERSION): zsh-3.1.2 (and zsh-3.0.4) drops core on the `unset CDPATH' if running as sh. 1998-05-12 Oliver Graf * tests/Dnd/droptest.el: some CDE adaptions (untested) 1998-05-11 Martin Buchholz * configure.in: Add some more comments. If using bash, use Posix mode and unset CDPATH. Be more careful checking feature dependencies. Introduce XE_CHECK_FEATURE_DEPENDENCY. Undo the gross hack of multiple `echo >> $tempcname' by using here documents instead. (Might break mswindows, tho...) Be more careful autodetecting tooltalk. * PROBLEMS: Document problems with Solaris 2.6 + XSUNTRANSPORT * Makefile.in: * lwlib/Makefile.in.in: * modules/Makefile.in: - Adjust for luser's CDPATH being set to something weird. - Take into account bash 2.02's tendency to print the cwd when using CDPATH. Always use `cd ./foo' instead of `cd foo'. - fix the run-temacs target to use $(DUMPENV) - fix the run-puremacs target to use $(DUMPENV) - fix the `depend' target to properly $(RM) the right files - Generate a better TAGS file for XEmacs' lisp code using hand-crafted regexps. - Use standard coding conventions for modules/Makefile.in 1998-05-12 Kazuyuki IENAGA * configure.in: some people claimed that they can't stop linking wnn6 library if they set --with-wnn6=no. 1998-05-11 Oliver Graf * tests/Dnd/droptest.el: adapted to new calling conventions also showing the new possibilities * tests/Dnd/README: changed to new protocol 1998-05-11 SAKIYAMA Nobuo * Fix for HAVE_MULTICAST check. 1998-05-09 SL Baur * XEmacs 21.0-beta39 is released. 1998-05-06 Oliver Graf * configure.in: added autodetection for the Drag'n'Drop API if some DnD protocol is found, HAVE_DRAGNDROP will be defined and dragdrop.o is added to extra_objs * configure.usage: added with-dragndrop, added (*) to with-offix * tests/Dnd/droptest.el: complete overhaul, no it's a real test 1998-05-04 Oliver Graf * tests/Dnd/droptest.el: changed to test new protocol * tests/Dnd/README.OffiX: removed * tests/Dnd/README: created, info about new protocol * tests/Dnd/dragtest.el: comment change 1998-05-07 SL Baur * etc/altrasoft-logo.xpm: Removed. 1998-05-02 SL Baur * XEmacs 21.0-beta38 is released. 1998-04-29 SL Baur * configure.in: Use `PROGNAME' for all generated paths. * Makefile.in: Change `progname' to `PROGNAME' for consistency. 1998-04-27 SL Baur * configure.in (progname): Parameterize program name on `progname' and add --with-infodock. 1998-04-26 SL Baur * Makefile.in: Religiously use ${progname} instead of hardcoded `xemacs'. CPPFLAGS was being set correctly in ${subdir}/Makefiles and overridden by the empty one set in the toplevel Makefile. 1998-04-26 Jason R Mastaler * etc/BETA: Replaced SmartList references in favor of Majordomo. 1998-04-25 SL Baur * XEmacs-21.0-beta37 is released. 1998-04-25 Michael Sperber [Mr. Preprocessor] * configure.in: Sychronized ..._USER_DEFINED variables with datadir setting. * Makefile.in (mkdir): No longer create sitelispdir. Sat Apr 24 1998 Andy Piper * configure.in: make graphic libraries tests be dependant on a window system not X11 only. Fri Apr 24 19:38:19 1998 Andy Piper * configure.in: check for our special select in msw. 1998-04-22 Marcus Thiessel * PROBLEMS: add answers to some FAQ concerning hpux. Wed Apr 22 12:59:35 1998 Andy Piper * configure.in: enable checking for special mswindows select() 1998-04-21 Martin Buchholz * configure.in: Isolate incomprehensible cma_open/pthreads checking to decosf* 1998-04-21 Marcus Thiessel * configure.in: /usr/{include,lib}/Motif2.1 added to search path for X11 libs and includes. 1998-04-22 Itay Ben-Yaacov * configure.in: check for xpm does not depend anymore on having X. if libXpm exists, and is of the FOR_MSW flavor, define FOR_MSW. 1998-04-19 Oscar Figueiredo * etc/NEWS: Documented info dir rebuilding and LDAP support. * info/dir: Fixed the explanatory notes for `Info-default-directory-list' removal and the new automatic dir rebuilding facility. Reindented the menu. Added an entry for term.info 1998-04-20 SL Baur * configure.in (LISPDIR): Removed configuration option for site-lisp. 1998-04-19 SL Baur * configure.in (version): snarf InfoDock version number. 1998-04-18 SL Baur * XEmacs-21.0-beta36 is released. Fri Apr 17 12:59:35 1998 Andy Piper * configure.in: enable install pre-processing for mswindows Fri Apr 17 12:59:35 1998 Andy Piper * Makefile.in.in: add install_pp to install incantation. * installexe.sh: new file. Add .exe to install targets if the result is executable. Fri Apr 17 12:59:35 1998 Andy Piper * Makefile.in: add install_pp to install incantation. 1998-04-14 Itay Ben-Yaacov * configure.in: Large echo split into a few smaller ones, so the cygnus sh.exe does not crash. Thu Apr 16 12:59:35 1998 Andy Piper * configure.in: enable toolbar checking for mswindows build 1998-04-06 Martin Buchholz * config.h.in: Add _SVID_SOURCE to list of xmkmf #defines. Used (at least) by RedHat 4.2. 1998-04-11 Michael Sperber [Mr. Preprocessor] * etc/xemacs.1: -no-packages -> -no-early-packages. * etc/NEWS: Clarified site-lisp status. * configure.in: Re-instated src/paths.h generation from src/paths.h.in. * Makefile.in (top_distclean): Remove site-lisp on `make distclean'. 1998-04-10 SL Baur * XEmacs 21.0-beta35 is released. 1998-04-10 Michael Sperber [Mr. Preprocessor] * etc/NEWS: Documented that Info-default-directory-list and site-directory are gone. * configure.usage: Clarified --package-path documentation. 1998-04-07 Michael Sperber [Mr. Preprocessor] * configure.in: Now generates src/paths.h from src/paths.h.in.in. Removed defaults for infopath and package-path. * Makefile.in (src/paths.h): ... is now generated from src/paths.h.in.in. Moved generation of paths.h to configure. * paths.h.in: Removed. * paths.h.in.in: Created. 1998-04-06 Martin Buchholz * configure.in: png was still being used if png_version < 0.96 * configure.in: Fixed magic to handle AIX, X11R6, and gcc. 1998-04-05 Amir J. Katz * INSTALL (Rationale): Offix support comment is wrong. To disable, one must use --with-offix=no and not --without-offix 1998-04-05 SL Baur * configure.in (CPP): ppc.ldscript sits in $srcdir/src not $srcdir. 1998-04-04 SL Baur * XEmacs 21.0-beta34 is released. 1998-04-03 Martin Buchholz * configure.in: checking whether gettimeofday accepts one or two arguments... two 1998-04-03 Michael Sperber [Mr. Preprocessor] * configure.in: Fixed magic to handle AIX and MIT X11R6. 1998-04-02 Martin Buchholz * configure.in: Add magic -T $srcdir/ppc.ldscript on Linux powerpc 1998-04-01 Martin Buchholz * tests/database.el (test-database): Temporary files (the databases that were created) should be deleted. * Makefile.in (testdir): Remove gnumake-specific syntax. (src/Makefile): src/Makefile depends on src/depend. 1998-03-29 Martin Buchholz * configure.in: Check for -lz, -lgz unconditionally. Too many system linkers don't properly die when there are cascaded link dependencies, so we can't rely on the linker for that. The only downside is that we might link with an extra unneeded library. If you really really care about this, you can go fix it. * configure.in: Enhance PANIC msg to make it clear that --with-FEATURE is going to die if FEATURE is not installed. 1998-03-27 Martin Buchholz * configure.in: $debug was not properly dependent on $beta * configure.in: Move offix configuration out of src/Makefile.in.in into configure.in. * configure.in: Reorganize xpm detection code. * configure.in: XIM default to ON if Motif which is not Lesstif is found. * configure.in: Keep auto-generated makefile dependencies out of src/Makefile.in.in by using AC_OUTPUT file concatenation support. 1998-03-26 Martin Buchholz * configure.in: Fix up cflags handling. Specifically, configure --cflags='' would fail to be recognized. * configure.in: Fix up png detection. Link with png_read_image to make sure -lz is required. Test for png >- 0.96 via header file. 1998-03-21 Martin Buchholz * configure.in (XE_GCC_WRAP_LDFLAGS) Rename to XE_PROTECT_LINKER_FLAGS. Rewrite. * configure.in: Make sure BSD always links in libz.a BSD's stupid linker can't detect cascaded lib dependencies * configure.in: Autodetect lesstif. define have_lesstif. Don't use motif-xim with lesstif, at least by default. 1998-03-30 SL Baur * version.sh: Add InfoDock version number variables. 1998-03-30 Amir J. Katz * info/dir: Replaced string '20.5' with '21.0' 1998-03-24 SL Baur * XEmacs 21.0-beta33 is released. 1998-03-26 Didier Verna * configure.in, Makefile.in: Removed infopath_user_defined---we always want to propagate it. * configure.usage: Synched with configure.in. 1998-03-25 Michael Sperber [Mr. Preprocessor] * configure.usage, INSTALL: Synched with the new path layout. * Makefile.in (src/paths.h): Replaced packagepath with package_path to make configure happy. * configure.in: Made default setting for packagepath conform to what packages.el builds at run-time: XEmacs-version-specific paths before site-specific ones. Added default setting for pkgdir. Changed --packagepath back to --package-path. 1998-03-24 SL Baur * XEmacs 21.0-beta32 is released. 1998-03-23 Michael Sperber [Mr. Preprocessor] * configure.in: Extended package path by version-specific hierarchies. Changed allow-site-lisp to inhibit-site-lisp. 1998-03-22 SL Baur * Makefile.in (distclean): Remove packages and mule-packages if they have been linked into place. 1998-03-22 Michael Sperber [Mr. Preprocessor] * : The Big Path Searching Overhaul. * Makefile.in, configure.in: Now pass all configure-specified paths into the binary in a uniform way. 1998-03-20 SL Baur * configure.in (have_libmcheck): Add test for glibc's malloc checker. - Fix HP/UX dynamic linking flag. 1998-03-19 SL Baur * configure.in (quoted_arguments): Fix unquoted variable in error-checking test. - fix bogus substitution. 1998-03-17 SL Baur * configure.in: In -lpng test, look for png_set_strip_alpha. Suggested by William M. Perry 1998-03-16 SL Baur * XEmacs 21.0 beta31 is released. 1998-03-16 P. E. Jareth Hein * configure.usage (Usage): Correct information about gif, tiff and WNN entries 1998-03-13 SL Baur * configure.in: typo fix in sed command. From P. E. Jareth Hein * configure.in (all_widgets): Check for snprintf(). 1998-03-11 P. E. Jareth Hein * configure.in: New gif support 1998-03-10 SL Baur * configure.in (have_glibc): Don't define _GNU_SOURCE for glibc. Mon Mar 09 13:00:55 1998 Andy Piper * configure.in: don't add libc to link list for dlopen ordinary link takes care of this. check for dlfcn.h 1998-03-10 SL Baur * configure.in: Examine each directory of X11 include path for inclusion into BITMAPDIR. 1998-03-09 SL Baur * aclocal.m4: Add legalese. Mon Mar 09 13:00:55 1998 Andy Piper * configure.in: make sure we have ndbm.h as well as libgdbm.a for database support. * configure.in: move msw checking after x checking so that auto-detection works. 1998-03-09 SL Baur * configure.in: New DLL support. * aclocal.m4: New file. From William M. Perry 1998-03-08 SL Baur * configure.in (xemacs_betaname): Align messages for minimal tagbits and indexed lrecords. Suggested by Andreas Jaeger 1998-03-09 Kyle Jones * etc/Emacs.ad: Example using leading dot resources to initalize faces changes to use Emacs.foo since the leading dot syntax doesn't work. Initialization of text-cursor face moved to faces.el. 1998-03-07 SL Baur * XEmacs 20.5-beta30 is released. 1998-03-05 SL Baur * PROBLEMS: Update wording of x86 GCC 2.7 problems. Wed Mar 04 08:55:12 1998 Andy Piper * configure.in: add a --with-msw option. Make X and msw work together if the user asks. 1998-03-02 SL Baur * PROBLEMS: Update documentation of gcc bugs that impact XEmacs. 1998-03-01 SL Baur * configure.in: Add substitutable variable ld_dynamic_link_flags for special required linker flags for building DLL capable binaries. * etc/Emacs.ad: Remove explicit `Emacs' application resource name. 1998-02-28 SL Baur * Makefile.in (top_distclean): Remove Installation.el. (xemacs): New target. Formerly it was `all:'. (all): New default, dist: is now superfluous. 1998-02-27 SL Baur * configure.in (GNU_MALLOC): add --with-dlmalloc to allow selective use of Doug Lea malloc in Linux C Library and GNU C Library. (Installation): Add XEmacs version and generate `Installation.el'. 1998-02-26 SL Baur * configure.in (with_ldap: Fix -lldap autodection. Suggested by Oscar Figueiredo (Installation): Only keep the last configuration. 1998-02-25 SL Baur * XEmacs 20.5-beta28 is released. * configure.in (with_session): Fix reporting of the setting. (with_database_gnudbm): Correctly report setting. 1998-02-24 SL Baur * configure.usage: Restore documentation of graphics library flags. From Karl M. Hegbloom 1998-02-19 Karl M. Hegbloom * PROBLEMS: Tell of the `gpm' SIGTSTP bug and `C-z' on the Linux console. 1998-02-23 SL Baur * XEmacs 20.4 is released to the beta testers. 1998-02-21 SL Baur * configure.in (after_morecore_hook_exists): Modify dlmalloc tests to also test for Linux libc5. 1998-02-19 SL Baur * XEmacs 20.5-beta27 is released. * XEmacs-20.4-pre4 is released. * configure.in (doug_lea_malloc): Requires USE_MINIMAL_TAGBITS. (--with-gung): Implement it. * configure.usage (--with-gung): Document. Turns on USE_MINIMAL_TAGBITS and USE_INDEXED_LRECORD_IMPLEMENTATION. (--with-term): Remove. * XEmacs-20.5-beta26 is released. 1998-02-18 SL Baur * XEmacs-20.4-pre3 is released. * Makefile.in: use better feedback while rebuilding finder database. Suggested by Stephen J. Turnbull 1998-02-15 SL Baur * configure.in (doug_lea_malloc): Add checking for Doug Lea Malloc. 1998-02-14 SL Baur * configure.in (OFFIX_O): Don't use OffiX if no real Xmu support. Suggested by Pekka Marjola * XEmacs-20.4-pre2 is released. * XEmacs-20.5-beta25 is released. 1998-02-13 SL Baur * INSTALL: Update for Cygwin and Microsoft Windows. * README: Update for Microsoft Windows. 1998-02-09 SL Baur * XEmacs 20.4-pre1 is released. * XEmacs 20.5-beta24 is released. Wed Jan 28 13:41:22 1998 Andy Piper * configure.in: add mule-coding target which defines MULE_CODING, nothing uses it as yet. add gif objects to msw support. define const_is_losing=no for msw. make msw not selected if tty selected. add -lshell32 for dnd support. check for a.out.h rather than coff.h * lib-src/make-docfile.c: add cygwin support and generalise the remaining open calls. IMHO this should really include sysfile.h. 1998-02-03 SL Baur * XEmacs 20.5-beta23 is released. 1998-02-01 SL Baur * etc/aliases.ksh: igrep from the shell command line. From Karl M. Hegbloom 1998-01-31 SL Baur * etc/aliases.ksh: Add `mak' function to create beta.err for build-report. From Adrian Aichner Suggested by Karl M. Hegbloom 1998-01-27 SL Baur * XEmacs 20.5-beta22 is released. 1998-01-26 SL Baur * etc/aliases.ksh: New file. Start tracking useful Maintainer XEmacs commands. 1998-01-25 SL Baur * XEmacs 20.5-beta21 is released. Wed Jan 21 10:49:47 1998 Andy Piper * configure.in: check for coff.h 1998-01-21 Hrvoje Niksic * configure.in: Added support for `--with-shlib'. 1998-01-18 SL Baur * XEmacs 20.5-beta20 is released. 1998-01-13 Martin Buchholz * configure.usage: * etc/NEWS: Remove doc for configure-time INFOPATH, no longer used. * etc/BETA: Update ftp addresses. * etc/INSTALL: Update ftp addresses. * etc/MAILINGLISTS: Sync with Emacs 20.2. Update ftp addresses. * configure.in: * src/config.h.in: Define HAVE_INVERSE_HYPERBOLIC using 1 configure test, not 3. * lwlib/lwlib.h: * lwlib/lwlib.c: * lwlib/lwlib-config.c: * lwlib/lwlib-Xm.c: * lwlib/lwlib-Xaw.c: * lwlib/lwlib-Xlw.c: * lwlib/config.h.in: * src/menubar-x.c: Prepend LWLIB_ to (SCROLLBARS|MENUBARS|DIALOGS)_(MOTIF|LUCID|ATHENA). Maintain only one set of variables. * etc/xemacs.1: Update author list. * Makefile.in (install-arch-dep): Simplify. Replace construct `test -d $dir && foo' with `if test -d $dir; then foo; fi' * lwlib/xlwmenu.c: * lwlib/xlwscrollbar.c: * lwlib/lwlib-Xlw.c: * lwlib/lwlib-Xm.c: Always assume presence of limits.h (ANSI). 1998-01-12 SL Baur * INSTALL: Updated for recent Mule/package changes. * XEmacs 20.5-beta19 is released. 1998-01-12 Damon Lipparelli * Makefile.in: Yow! Fixed paths to install dirs when --prefix != --exec-prefix. 1998-01-10 SL Baur * XEmacs 20.5-beta18 is released. * etc/FTP: Update address of what was formerly ftp.ibp.fr. 1998-01-08 Didier Verna * configure.in: Get rid of INFOPATH for configure time. * configure.usage (Usage): Ditto. 1998-01-09 SL Baur * Makefine.in: Correct reported amount of disk savings from compression. From Markus Linnala Thu Jan 08 09:42:36 1998 * configure.in: detect and set scrollbars and menubars with MS-Windows more appropriately. Check for sys/un.h to use in gnuserv. 1998-01-07 SL Baur * Makefile.in (progname): Cleanly parameterize XEmacs-specific naming. 1998-01-05 Glynn Clements * lwlib/xlwmenu.c (push_button_draw): use inactive_gc instead of inactive_button_gc for menu entries. (remap_menubar): ignore the enabled status 1998-01-04 SL Baur * XEmacs 20.5-beta17 is released. * Makefile.in (finder): Use -vanilla. (lisp/finder-inf.el): Ditto. (check-features): New target. Do a sanity check prior to installation. 1997-01-03 SL Baur * XEmacs 20.5-beta16 is released. 1997-12-30 SL Baur * XEmacs 20.5-beta15 is released. 1997-12-29 SL Baur * Makefile.in (${SUBDIR}): Remove bogus .RECURSIVE dependency. 1997-12-27 SL Baur * XEmacs 20.5-beta14 is released. 1997-12-23 Andy Piper * configure.in: support for *-pc-cygwin32 config 1997-12-25 SL Baur * XEmacs 20.5-beta13 is released. 1997-12-21 SL Baur * etc/BETA (Prerequisite): Add cookbook procedures for maintaining package lisp directories. 1997-12-20 SL Baur * XEmacs 20.5-beta 12 is released. 1997-12-19 SL Baur * configure.in (bitmapdir): Reenable --with-session by default for testing. 1997-12-18 Kyle Jones * etc/Emacs.ad: Don't specify a default toolbar specific background color. 1997-12-18 Kyle Jones * etc/toolbar: Added support for foregroundToolBarColor symbol to most icons. 1997-12-17 SL Baur * info/dir (File): Skk and Gnats are packaged. * PROBLEMS (Note): Update version numbers. * etc/BETA: Update version numbers. * etc/NEWS: Update version number. * info/dir (File): Update version number. 1997-12-16 SL Baur * XEmacs 20.5-beta11 is released. 1997-12-14 SL Baur * configure.in: Don't bypass graphics library detection if the `--with-imagick' option is given to configure. : Print autodetected graphics libraries to be linked with Imagick. * Makefile.in (lisp/finder-inf.el): Reverse previous change. 1997-12-14 Olivier Galibert * Makefile.in (install-arch-indep): Build info files if needed. 1997-12-13 SL Baur * Makefile.in (lisp/finder-inf.el): Add dependency on src/. * XEmacs 20.5-beta10 is released. 1997-12-12 SL Baur * configure.in (CPP): Don't add special CFLAGS for ix86/Linux. 1997-12-10 Karl M. Hegbloom * configure.in (autodetect ImageMagick): also look for "X11/magick/magick.h", and if present, define MAGICK_HEADERS_ARE_UNDER_X11 1997-12-11 SL Baur * configure.in (imagick_libs): Add autodetection for freetype -lttf library. 1997-12-09 SL Baur * XEmacs 20.5-beta9 is released. 1997-12-06 SL Baur * XEmacs 20.5-beta8 is released. * info/dir: update for further packaging. * configure.in: remove `tree-x' from XEmacs build. 1997-11-29 Jeff Miller * configure.in: motif menubars need xlwmenu.o * updated files in src/ to allow an XEmacs configured for motif menubars to at least compile. Motif menubars are still very broken. 1997-12-05 Aki Vehtari * etc/refcard.tex: Updated for 20.3 1997-12-02 P E Jareth Hein * lwlib/xlwscrollbar.c: fixed colormap/visual handling to work properly with the information in the core. * lwlib/xlwmenu.c: fixed colormap/visual handling to work properly with the information in the core, and fixed a potental problem with parentage. 1997-12-02 SL Baur * etc/skk/SKK.tut.E (Hint): Fix typos. 1997-12-01 SL Baur * configure.in (with_session): Properly display flag in configure status report. 1997-11-29 SL Baur * configure.usage: Remove documentation of obsolete option --with-gif. 1997-11-27 SL Baur * XEmacs 20.5-beta7 is released. * configure.in: When testing for -ltiff, fall back on the extra libraries -ljpeg, and -lz since some -ltiff's need them. 1997-11-26 SL Baur * lwlib/xlwmenu.c (display_menu): Defer incremental menus properly. From Glynn Clements 1997-11-25 Kazuyuki IENAGA * configure.in: Improve auto detect of libraries ImageMagick rely on. 1997-11-23 Jeff Miller * Energize is dead. Removed ENERGIZE ifdef's from code in lwlib and src. Configure.in modified. --with-energize is no longer a valid configure option. * lwlib/Makefile.in.in removed energize support * lwlib/lwlib-Xm.c removed energize support * lwlib/lwlib-config.c removed energize support * lwlib/energize/* removed 1997-11-23 SL Baur * Makefile.in: Change references of lisp/utils/finder-inf.el to lisp/finder-inf.el. 1997-11-20 SL Baur * XEmacs 20.5-beta6 is released. 1997-11-21 Stephen Turnbull * configure.usage: Use `--' convention in "usage:" line. 1997-11-20 Stephen Turnbull * configure.in: added `with_xfs' to list of boolean features. 1997-11-20 SL Baur * XEmacs 20.3 is released for binary kit building. 1997-11-19 Tor Arntsen * PROBLEMS: Removed IRIX entry about xemacs core dumps when using xemacs dumped on one machine on another. Problem was fixed by 20.3. 1997-11-19 SL Baur * etc/xemacs.1: Document -no-packages, -vanilla. Document -h. 1997-11-18 SL Baur * configure.usage: New file. * configure.in: Use it instead of monster 10k shell variable. 1997-11-17 SL Baur * XEmacs 20.3-pre4 is released. 1997-11-17 Jens-Ulrik Holger Petersen * configure.in (infopath): List "/usr/local/" dirs before "/usr/" dirs. 1997-11-17 SL Baur * configure.in: Initialize infodir off of datadir. * Makefile.in: Force LANG = C for building. 1997-11-15 SL Baur * XEmacs 20.3-pre3 is released. * XEmacs 20.5-beta5 is released. 1997-11-13 Marc Paquette * nt/Todo: added a task for support of lisp packages through the registry. 1997-11-13 Jonathan Harris * Renamed files *w32* to *msw* * Changed 'w32' and 'win32' to 'mswindows', and HAVE_W32GUI to HAVE_MS_WINDOWS. Changed files: cus-edit.el, device.el, faces.el, frame.el, msw-faces.el, msw.init.el, igrep.el, dumped-lisp.el, font.el, hippie-exp.el, sysdep.el, console-msw.c, console-msw.h, console.c, device-msw.c, emacs.c, event-msw.c, event-msw.h, event-stream.c, events.c, events.h, faces.c, frame-msw.c, frame.c, general.c, msw-proc.c, objects-msw.c, objects-msw.h, redisplay-msw.c, redisplay.c, symsinit.h, * Didn't change 'win32' in nt.c, nt.h, ntproc.c * Deleted w32 build directory since nt build directory now handles X and native mswindows builds. 1997-11-11 SL Baur * XEmacs 20.5-beta4 is released. 1997-11-10 SL Baur * info/dir: remove packaged entries. From Glynn Clements * configure.in: Puke and die if NAS sound is selected without X. 1997-11-08 SL Baur * XEmacs 20.5-beta3 is released. * XEmacs 20.3-pre2 is released. Wed November 05 23:40:00 1997 * w32/xemacs.mak: moved building the DOC file to after the .elcs. Sun November 01 12:00:00 1997 * Files split from nt to new w32 directory: ChangeLog, README, Todo, paths.h, config.h, inc/*, runemacs.c, xemacs.mak. 1997-11-05 Didier Verna * configure.in: Added the --site-prefixes options for the configure script. You give a colon or space separated list of prefixes, and subdirectories include/ and lib/ will be added with -I and -L. 1997-11-05 Martin Buchholz > * configure.in: AIX + gcc fixes. - Don't wrap -B. aixflags changed to start_flags. 1997-11-04 SL Baur * lwlib/lwlib-Xm.c(update_one_menu_entry): Add missing variable. From Skip Montanaro 1997-11-04 Adrian Aichner * etc/TUTORIAL.de: Updated copyright information. Translated most of the COPYING section. Translated the <<.*>> didactic line. 1997-10-22 Adrian Aichner * etc/TUTORIAL.de: Fixed two issues reported by Achim Oppelt * etc/TUTORIAL.de: Manually applied rejected patch hunks from Marc Aurel's patch. Some more fixes. * etc/TUTORIAL.de: Applied patches supplied by Marc Aurel <4-tea-2@bong.saar.de>. They fix yet more typos and quite a few awkward sentences. 1997-10-21 Adrian Aichner * etc/TUTORIAL.de: Manually merged a few more corrections by Carsten Leonhardt 1997-10-20 Adrian Aichner * etc/TUTORIAL.de: Applied patches from Andreas Jaeger to 1.2, then merged them with 1.3 via ediff-buffers. Andreas found some quite nasty typos still and added many missing commas. * etc/TUTORIAL.de: Re-fill-ed paragraphs after patching. * etc/TUTORIAL.de: Applied the excellent patches courtesy of Carsten Leonhardt . 1997-11-03 MORIOKA Tomohiko * Delete etc/TUTORIAL.th because Thai is not supported yet. 1997-11-02 MORIOKA Tomohiko * etc/TUTORIAL.ko: Renamed from etc/TUTORIAL.kr to fit with ISO 639 (two letter language code). * etc/TUTORIAL.ja: Renamed from etc/TUTORIAL.jp to fit with ISO 639 (two letter language code). 1997-11-02 SL Baur * etc/CHARSETS: New file imported from Emacs 20.1. 1997-11-02 Kyle Jones * lwlib/lwlib-Xaw.c (xaw_pop_instance): Don't use parent window's coordinates and dimensions to center the dialog box unless its mapped_when_managed property is true. This should avoid the top level widget that the HAVE_SESSION code creates, which is unmapped and useless for this purpose. 1997-11-01 SL Baur * XEmacs 20.3-pre1 is released. 1997-10-31 SL Baur * XEmacs 19.16 is released. 1997-10-31 SL Baur * XEmacs 20.5-beta2 is released. 1997-10-30 SL Baur * configure.in (xetest): Eliminate tests for PNG, JPEG, TIFF(broken) and replace with test for ImageMagick. 1997-10-30 Kyle Jones * etc/Emacs.ad: Added *XlwMenu*highlightForeground entry. Added *XlwMenu*titleForeground entry. * lwlib/xlwmenu.h: Added string macro declarations for titleForeground and highlightForeground properties. * lwlib/xlwmenuP.h: Added struct fields for title and highlight colors. * lwlib/xlwmenu.c: Added initialization and usage code for the new titleForeground and highlightForeground properties. 1997-10-29 MORIOKA Tomohiko * etc/HELLO: Add Czech. * etc/HELLO: Delete Amharic, Thai and Tigrigna. 1997-10-28 SL Baur * XEmacs 20.3-beta94 is released. 1997-10-28 Andreas Jaeger * configure.in: Correct last patch for berkdb. 1997-10-28 SL Baur * XEmacs 20.3-beta93 is released. 1997-10-27 Martin Buchholz * lib-src/make-path.c: * lib-src/digest-doc.c: * lib-src/gnuslib.c: Always include config.h before system headers * configure.in: Improve AIX configure support - NON_GNU_CC defaults to `xlc' - CFLAGS defaults to "-O3 -qstrict -qlibansi -qinfo -qro -qmaxmem=20000" - check for sin instead of sqrt in -lm to avoid xlc internal error - Detect -li18n for use with Motif - Move weird AIX static linking flags from s&m files to configure.in - use #pragma instead of -ma flag to avoid compiler warnings 1997-10-25 Kyle Jones * lwlib/xlwmenu.c: Use XtRDimension in place of XmRHorizontalDimension in shadowThickness resource declaration. * lwlib/xlwmenu.c (label_button_draw): Use the button_gc color as the foreground for selected entries. * lwlib/xlwmenu.c (push_button_draw): Use the button_gc color as the foreground for selected entries. * lwlib/xlwmenu.c (toggle_decoration_height): Force height to be minimum of 2x the shadow thickness. 1997-10-24 Andreas Jaeger * configure.in: Don't choke on Berkeley DB 2.x. 1997-10-24 SL Baur * XEmacs 20.3-beta92 is released. 1997-10-21 SL Baur * Makefile.in (lisp/utils/finder-inf.el): Don't force rebuild if it already exists (use `make finder' to force rebuild). 1997-10-18 SL Baur * XEmacs 20.3-beta91 is released. 1997-10-16 Hrvoje Niksic * etc/NEWS: document changed package load semantics. 1997-10-15 Olivier Galibert * configure.in: Removed -Olimit=2000 from cc for IRIX. 1997-10-12 Karl M. Hegbloom * configure.in (null_string): Added AC_SUBST(infodir_user_defined) and removed backquoted echo statement from the infopath report line. 1997-10-15 Olivier Galibert * configure.in: Added detection of the declaration of the timezone variable in system files. Defines HAVE_TIMEZONE_DECL if yes. 1997-10-15 Olivier Galibert * config.h.in: Add HAVE_TIMEZONE_DECL for detection of declaration of the timezone variable in system headers. * systime.h: Use HAVE_TIMEZONE_DECL. 1997-10-14 SL Baur * configure.in (all_widgets): Don't allow configuration of --with-mule if Mule lisp hasn't been installed. 1997-10-13 SL Baur * configure.in: Remove `site-lisp' from list of directories to make symbolic links for. * XEmacs 20.3-beta90 is released. 1997-10-12 Glynn Clements * info/dir: Cosmetic changes to info/dir 1997-10-13 Hrvoje Niksic * etc/NEWS: Updates 1997-10-12 SL Baur * XEmacs 20.5-beta1 is released. * XEmacs 19.16-pre9 is released. * XEmacs 19.16-pre8 is released. 1997-10-11 SL Baur * XEmacs 20.3-beta28 is released. * Makefile.in (src/paths.h): Update PATH_INFOPATH (infopath): New shell variable. (infopath_user_defined): Ditto. * configure.in (infodir_user_defined): Spelling fixes. 1997-10-10 Karl M. Hegbloom * configure.in: added options and option help docs for infopath and lockdir * '' added a line to the report for infopath and lockdir * etc/NEWS: Draft entry for the info changes. 1997-10-10 Karl M. Hegbloom * Makefile.in.in (INFOPATH): Added variable and put it into DUMPENV. 1997-10-11 SL Baur * packages/info/localdir: New directory and file. * packages/README: New directory & file. 1997-10-10 Martin Buchholz * Makefile.in: Add `make configure' target * etc/BETA: - remove Chuck as contact name - random small improvements - remove I/me references - the message should be that XEmacs maintenance is an inclusive community effort. 1997-10-10 SL Baur * etc/BETA (Prerequisite): Add further documentation for package installation. 1997-10-07 SL Baur * XEmacs 19.16-pre7 is released. 1997-10-05 Damon Lipparelli * Makefile.in (install-arch-dep, install-arch-indep): Move the commands for symlink'ing the system-independent bits into the system-dependent directory structure from "install-arch-indep" to "install-arch-dep". 1997-10-06 Jens-Ulrik Holger Petersen * Makefile.in (blddir): variable from "configure". (finder): use it. 1997-10-05 SL Baur * Makefile.in (GENERATED_LISP): New variable. (all): Force dependency on finder-inf.el. (lisp/utils/finder-inf.el): new rule. 1997-10-04 SL Baur * XEmacs 19.16-pre6 is released. 1997-10-04 SL Baur * XEmacs 20.3-beta27 is released. 1997-10-03 Damon Lipparelli * Makefile.in (install-arch-indep): When --prefix != --exec-prefix, symlink the system-independent bits into the system-dependent directory structure (rather than the other way around). 1997-10-03 Martin Buchholz * lib-src/etags.c: etags 12.28 + prototypization * INSTALL: Better document --site-runtime-libraries * src/scrollbar-x.c (x_update_scrollbar_instance_status): FIX: M-x scroll-left; horizontal scrollbar appears; drag it left; scrollbar disappears; keyboard inoperative. * configure.in: Remove left-over references to *_switch_x_* - NAS libaudio is part of $libs_x, not $LIBS 1997-10-02 SL Baur * XEmacs 20.3-beta26 is released. 1997-09-30 SL Baur * XEmacs 20.3-beta25 is released. * Makefile.in (install-arch-dep): Install the `Installation' for future reference. * etc/BETA: Document existence of `Installation' file. - Document requirement of rebuilding finder-inf.el when building from the full tarball. * Makefile.in (top_distclean): Remove finder-inf.el*. * configure.in (use_union_type): Default to "yes". 1997-09-29 Martin Buchholz * configure.in: Add tiff autodetection 1997-09-29 SL Baur * lwlib/xlwmenu.c: Add bounds checking. Check error return on XmStringGetLtoR. 1997-09-27 SL Baur * XEmacs 20.3-beta24 is released. 1997-09-27 Hrvoje Niksic * Makefile.in (custom-loads): New target. 1997-09-24 SL Baur * etc/BETA (XEmacs 20.3 packages): Added explanation of package hierarchy. 1997-09-23 SL Baur * lwlib/xlwmenu.c: Fix compilation problem with USE_XFONTSET. From Kazuyuki IENAGA 1997-09-22 SL Baur * XEmacs 19.16-pre4 is released. 1997-09-20 SL Baur * XEmacs 20.3-beta23 is released. 1997-09-19 SL Baur * XEmacs 19.16-pre3 is released. 1997-09-18 Colin Rafferty * etc/NEWS: Various spelling corrections and some grammar corrections (which/that). 1997-09-19 Martin Buchholz * src/redisplay-tty.c: Fix crashes with non-7bit tty escape sequences (needs more testing). * */Makefile*: - Cleanup man/*/Makefile for consistency. - use $(MAKEFINFO), $(TEXI2DVI), etc... - Make combination --with-srcdir + Sun make work properly. - Change construct: test -d $${dir} || mkdir $${dir} --> if test ! -d $${dir}; then mkdir $${dir}; fi * lisp/x11/x-win-sun.el: Fix remaining glitches with re-mappings of Sun function keys. * configure.in: Detect libXaw AFTER libXpm to support libXawXpm. * man/internals/internals.texi: Fix makeinfo compilation error. 1997-09-17 SL Baur * XEmacs 20.3-beta22 is released. 1997-09-16 SL Baur * XEmacs 20.3-beta21 is released. * XEmacs 19.16-pre2 is released. 1997-09-13 SL Baur * XEmacs 20.3-beta20 is released. 1997-09-11 Martin Buchholz * configure.in: Use `PATH' for options that take multiple dirs. - Fix test for $PWD == `pwd` - Prefer autodetected X11R6 to X11 so that broken HP and Linux systems can work. (untested) * lisp/cl/cl.el: Fix `loop' indentation to be same as `defun'. * lisp/prim/dumped-lisp.el: cl-extra and cl-seq always end up being autoloaded - let's make them part of the core. * lisp/x11/x-compose.el: * lisp/x11/x-init.el: * lisp/x11/x-win-sun.el: * lisp/x11/x-winxfree86.el: * src/device-x.c: * src/event-Xt.c: - Yet another rewrite of key handling (not the last, though) - x-keysym-on-keyboard-p is much faster. - x-keysym-on-keyboard-sans-modifiers-p introduced. - x-keysym-hashtable introduced. - allow X11R4 libs to guess keysyms on X11R5 servers. - A better workaround for the bug that some Xlibs generate Multi_key a adiaeresis when pressing Multi_key a " * src/dgif_lib.c: Make sure size_t is defined before using it. 1997-09-12 SL Baur XEmacs 19.16-pre1 "Queens" is released. 1997-09-08 SL Baur * configure.in: Reverse package-path. From Colin Rafferty 1997-09-02 SL Baur * XEmacs 20.3-beta19 is released. * Makefile.in (finder): New target. 1997-08-29 SL Baur * XEmacs 19.16-beta91 is released. 1997-08-25 MORIOKA Tomohiko * lisp/apel/emu-x20.el (mime-charset-coding-system-alist): iso-2022-jp-2 is defined as coding-system. * lisp/mule/mule-coding.el: Rename `iso-2022-ss2-{7|8}' -> `iso-2022-{7|8}bit-ss2' to sync with Emacs 20.0.96. (iso-2022-jp-2): New coding system. 1997-08-23 MORIOKA Tomohiko * lisp/prim/about.el (about-maintainer-glyph): Fix problem with jka-compr.el. 1997-08-20 SL Baur * XEmacs 19.16-beta90 is released. 1997-08-16 SL Baur * XEmacs 20.3-beta18 is released. 1997-08-11 Karl M. Hegbloom * etc/NEWS: add a section telling about the Info changes. 1997-08-09 SL Baur * XEmacs 20.3-beta17 is released. 1997-08-07 Jan Vroonhof * etc/gnuserv.1: Described Hrvoje's mods in manpage 1997-08-09 Martin Buchholz * configure.in: - use-system-malloc renamed to with-system-malloc. - config.el reimplemented for improved accuracy. - new variable `blddir' introduced for informational purposes. * lib-src/config.values.in: new config.el implementation * lib-src/config.values.sh: new config.el implementation * lisp/modes/pascal.el: Sync with GNU Emacs, fix infloop problem (thanks to Espen Skoglund, pascal.el maintainer) * src/chartab.c: maintainability improvements. * src/mule-coding.c: FIX for: editing DOS files with ISO2022* coding systems results in extra CR's inserted into file on saving. 1997-08-06 SL Baur * configure.in: Crash & burn if db-2 is detected. From Soren Dayton 1997-07-31 SL Baur * XEmacs 20.3-beta16 is released. 1997-07-31 Martin Buchholz * configure.in: --with-x11=no --> --with-xface=no * lisp/efs/dired-xemacs.el: Rationalize mouse file functions * src/input-method-xlib.c: Allow xemacs to connect to kinput2 * event-Xt.c: Fix crashes when no input context available. * src/mule-coding.c: Use enum eol_type instead of int consistently * regex.c: Use (void *) 0 instead of NULL in varargs function calls * src/s/freebsd.h: Wrap #include X11/Xlocale.h inside #ifndef NOT_C_CODE 1997-07-27 SL Baur * etc/BETA: Update patching instructions. 1997-07-26 SL Baur * XEmacs 20.3-beta15 is released. 1997-07-25 SL Baur * lwlib/xlwscrollbar.c: Add debug malloc support. * lwlib/xlwmenu.c: Ditto. * lwlib/lwlib-utils.h: Ditto. * configure.in (null_string): Add --use-debug-malloc option. 1997-07-21 SL Baur * info/dir (Packages): Remove AUCTeX, Gnus and Message manuals. 1997-07-20 SL Baur * Makefile.in (install-arch-indep): Create required links when prefixdir != execdir. 1997-07-19 SL Baur * XEmacs 20.3-beta14 is released. 1997-07-19 Martin Buchholz * src/fns.c (require): Print messages when loading a file as a result of require. * configure.in: * lisp/utils/config.el: * lib-src/config.values: - new file created and installed by building. - Allow configuration time values to be queried by the lisp code. * configure.in: - check for alloca in libPW on hpux. - Redo --with-clash-detection - need to check for termios and friends even if with-tty=no. - Always define SIGNALS_VIA_CHARACTERS if HAVE_TERMIOS - better quoting for AIX_SMT_EXP (untested) - gcc flags now default to "-g -O2 -Wall -Wno-switch" * *.[ch]: more warning elimination * src/input-method*.c: * src/s/freebsd.h: - remove freebsd ifdefs from C code. * src/specifier.c: - fix Fdisplay-table-specifier-p 1997-07-13 Steven L Baur * XEmacs 20.3-beta13 is released. * info/dir (Packages): Integrate texinfo manual for PH. 1997-07-10 Hrvoje Niksic * extents.c (print_extent): Print correctly. 1997-07-13 Steven L Baur * configure.in (CPP): Add -Wall to default gcc CFLAGS. 1997-07-11 Martin Buchholz * *Makefile*: More cleanup. - MAKE CFLAGS=-foo now works with recursive invocations on old makes - Nuke ld_call_shared from s&m files - Nuke src/s/*-static.h - Nuke Solaris and DEC OSF static build support. - Nuke SHORTNAMES - Nuke libmld - CLASH_DETECTION configurable, off by default. * *.[ch]: Warning elimination, code cleanup, some 64-bit safeguarding. * sol2.h: More bullet-proofing for Sun bugs in header files. * lib-src/etags.c: etags version 12.19. * lisp/x11/x-select.el: * src/xselect.c: Try STRING if selection owner couldn't convert COMPOUND_TEXT. * src/*.c: Change defalt to default_, and in general allow doc-snarfing functions to recognize and ignore trailing `_' * src/*.[ch]: Introduce XVECTOR_DATA and XVECTOR_LENGTH macros and convert source code to use them consistently. 1997-07-08 Steven L Baur * XEmacs 20.3-beta12 is released. 1997-07-08 Martin Buchholz * configure.in: Set options differently, depending on beta-ness of build tree. * *Makefile*: Clean up *clean: targets, esp. Steven's beloved distclean. 1997-07-08 Steven L Baur * pkg-src/tree-x/Makefile.in.in (xoobr): Pass CFLAGS to the linker. From Olivier Galibert 1997-07-07 Steven L Baur * pkg-src/tree-x/Makefile.in.in (distclean): Add target. 1997-07-06 Steven L Baur * lwlib/lwlib-Xm.c (xm_update_one_value): Hand application of mrb fix. Restoration of lossage from beta10->beta11 upgrade. * XEmacs 20.3-beta11 is released. 1997-07-08 MORIOKA Tomohiko * lisp/language/english.el: Add quail-british for British. * lisp/language/european.el: Register input-method for various non quail-latin-1 methods. 1997-07-05 Martin Buchholz * lib-src/getopt*.c: Don't redefine const - let configure do that. * configure.in: Better behavior for `configure --with-gcc=no' - Autodetect ulimit.h - Remove broken SunOS4 kludge for libXmu - Autodetect usleep * src/s/sol2.h: Support gcc on various Solaris releases. * lib-src/*.c: Ansify prototypes. * lisp/prim/files.el: Optimize auto-mode-alist. * pkg-src/tree-x/Makefile.in.in: `make distclean' now works - `make install' now works. - dependencies updated. * pkg-src/tree-x/*.[ch]: Fix compile warnings. - Replace uses of XtVa* with non-varargs variants. 1997-07-01 MORIOKA Tomohiko * lisp/modes/image-mode.el: Add `image-maybe-restore' to `change-major-mode-hook'. * lisp/modes/image-mode.el (image-maybe-restore): New function. * src/glyphs.c (make_string_from_file): must protect from `format-alist'. 1997-06-30 Steven L Baur * pkg-src/tree-x/Makefile.in.in (INSTALL): Add configure written variable. 1997-06-29 Steven L Baur * configure.in (CPP): Correct typo `print-lib-gcc-file-name' should be `print-libgcc-file-name' From Katsumi Yamaoka * XEmacs 20.3-beta10 is released. 1997-06-29 MORIOKA Tomohiko * lisp/language/chinese.el: Add chinese-isoir165 (CCITT Extended GB). * lisp/language/chinese.el: Modify charset DOC-strings for CNS 11643 to be more detailed. * lisp/language/arabic.el: Rename `arabic-0', `arabic-1' and `arabic-2' to `arabic-digit', `arabic-1-column' and `arabic-2-column' to sync with Emacs/mule-19.34.94-zeta. * src/mule-charset.c: Modify charset DOC-strings to be more detailed. Use BOX DRAWINGS characters of JIS X0208. 1997-06-28 MORIOKA Tomohiko * lisp/apel/richtext.el: Add autoload comments for `richtext-encode' and `richtext-decode'. * lisp/prim/format.el (format-alist): Add `text/richtext'. * lisp/tl/chartblxmas.el: New file. * lisp/x11/x-menubar.el (default-menubar): Add "Show character table" for MULE menu. * lisp/apel/emu.el: Check richtext.el is bundled. * lisp/tl/char-table.el (view-charset): New command. * lisp/tl/char-table.el: Rename some functions. * lisp/packages/hexl.el (hexl-mode-exit): Run `hexl-mode-exit-hook'. * lisp/x11/x-menubar.el (default-menubar): Fix "Describe language support" and "Set language environment" of mule menu. * lisp/apel/file-detect.el: Add autoload comments for function `add-path', `add-latest-path', `get-latest-path', `file-installed-p', `exec-installed-p', `module-installed-p' and variable `exec-suffix-list'. * lisp/prim/format.el (format-alist): Add image/jpeg, image/gif, image/png and image/x-xpm. * lisp/modes/image-mode.el: New file. 1997-06-27 MORIOKA Tomohiko * lisp/tm/tm-ew-e.el (tm-eword::encode-string-1): avoid infinite loop caused by long non-encoded-word element. (cf. [tm-en:1356]) (mime/field-encoding-method-alist): Add "Message-ID" as ignored. 1997-06-25 Steven L Baur * XEmacs 20.3-beta9 is released. * Makefile.in (dist): Make `make dist' work for me. 1997-06-25 Martin Buchholz * configure.in: - Change "t" to tabs in sed commands - Add /g to sed substitition commands when appropriate - Change XtVa[SG]etValue to Xt[SG]etValue - Make version variables into Lisp_Objects. 1997-06-19 Martin Buchholz * src/config.h.in: * configure.in: - Autodetect X defines using xmkmf. - Compute rpath on *bsd* systems as well. - rewrite PRINT_VAR m4 macro. - detect sizes of void* and long long for future use by unex*.c * regex.c: _GNU_SOURCE may be defined by config.h; don't redefine. 1997-06-24 MORIOKA Tomohiko * lisp/language/arabic.el: moved from lisp/mule/arabic-hooks.el. * lisp/mh-e/mh-e.el (mh-get-new-mail): Decode output as `mh-folder-coding-system'. 1997-06-24 MORIOKA Tomohiko * lisp/language/ethio-util.el: imported from Emacs/mule-19.34.94-zeta. * lisp/language/arabic-util.el: moved from lisp/mule/arabic.el; repair Arabic characters. 1997-06-24 MORIOKA Tomohiko * lib-src/update-autoloads.sh: Search lisp/mule/. * etc/HELLO: final byte for ethiopic was changed to sync with Emacs/mule-19.34.94-zeta. * lisp/x11/x-menubar.el: Fix "Describe language support" and "Set language environment" of Mule menu. * lisp/language/visual-mode.el: moved from mule/. * lisp/language/ethiopic.el: Modify for XEmacs. * lisp/language/cyrillic.el: Modify DOC-string of koi8-r; Fixed problem of setting for `language-info-alist' about koi8-r. * lisp/mule/auto-autoloads.el: Enable auto-autoloads.el for mule/. * lisp/mule/mule-util.el: New file (imported from Emacs/mule-19.34.94-zeta). * lisp/mule/mule-misc.el: Function `truncate-string-to-width' was moved to mule-util.el. * lisp/prim/dumped-lisp.el, lisp/mule/mule-load.el: lisp/mule/arabic-hooks.el was moved to lisp/language/arabic.el; lisp/mule/arabic.el was moved to lisp/language/arabic-util.el; Use lisp/language/ethiopic.el instead of lisp/mule/ethiopic-hooks.el; Use lisp/language/ethio-util.el instead of lisp/mule/ethiopic.el. * lisp/mule/mule-coding.el (coding-system-docstring): New alias to emulate Emacs/mule-19.34.94-zeta function. * lisp/mule/mule-cmds.el: modified to sync with Emacs/mule-19.34.94-zeta (mule-prefix was changed to "C-x C-m") (set-language-info): Add to "Describe Language Support" and "Set Language Environment" menu. * lisp/mule/mule-charset.el: Function `compose-region' and `decompose-region' were moved to mule-util.el. * lisp/leim/quail.el: modify to sync with latest quail.el of Emacs/mule in ETL. (quail-toggle-mode-temporarily): check `quail-conv-overlay'. (quail-map-p): Use `characterp' instead of `integerp'. 1997-06-23 Steven L Baur * etc/NEWS (Commands): Various updates by Hrvoje Niksic. 1997-06-21 Steven L Baur * Makefile.in: Missing FRC.info. (install-arch-dep): Add missing backslash. From Glynn Clements * XEmacs 20.3-beta8 is released. 1997-06-20 Olivier Galibert * lwlib/lwlib-Xaw.c, lwlib/lwlib-Xlw.c, lwlib/lwlib-Xm.c, lwlib/lwlib.c: Make 64 bit clean. 1997-06-20 Steven L Baur * etc/gnuserv.1: Updates and cleanup. From Hrvoje Niksic 1997-06-19 Martin Buchholz * configure.in: - Autodetect X defines using xmkmf. - Compute rpath on *bsd* systems as well. - rewrite PRINT_VAR m4 macro. - detect sizes of void* and long long for future use by unex*.c 1997-06-18 Martin Buchholz * */Makefile.in.in: Another rewrite Make makefiles immune from being mangled by various cpp implementations by quoting non-preprocessor directive lines. - random cleanup - Use $(RM) and $(pwd) macros consistently - Add dependencies for balloon-help source files - Use getcwd by default instead of getwd. * lwlib/config.h: Now includes src/config.h * lwlib/*.c: Use config.h, but DON'T use Xos.h * lib-src/*.c: Fix compiler warnings * lisp/version.el: - Put version information in version.sh instead of version.el Wed Jun 18 16:41:43 1997 Steven L Baur * configure.in (CPP): Remove hardcoding of -L/usr/local/lib -I/usr/local/include. 1997-06-14 Steven L Baur * XEmacs 20.3-beta7 is released. 1997-06-12 Steven L Baur * etc/TUTORIAL (things): Synched by Hrvoje Niksic with previous XEmacs version. 1997-06-13 MORIOKA Tomohiko * lisp/gnus/smiley.el (smiley-deformed-regexp-alist): Modify regexp for horizontal smiley faces. (smiley-nosey-regexp-alist): Add horizontal smiley faces. * lisp/leim/quail.el (quail-get-translation): Don't use `string-to-vector' for XEmacs. 1997-06-13 Gary D. Foster * lisp/modes/*.el: Removed all "\177" bindings that were previously commented out and normalized everything vis a vis 'backspace and 'delete keysyms. * lisp/packages/*.el: Normalized all the "\177" bindings * lisp/modes/cperl-mode.el: Created cperl-electric-delete function which is a "smart" version of the cperl-electric-backspace function (it honors the desired delete direction). Bound it to 'delete and the electric-backspace to 'backspace. * lisp/packages/pending-del.el: Added cperl-electric-backspace and cperl-electric-delete to the 'supersede list. 1997-06-11 Steven L Baur * XEmacs 20.3-b6 is released. * configure.in (GNU_MALLOC): Check for (-l)PW instead of (-l)-lPW. Suggested by Martin Buchholz 1997-06-11 Martin Buchholz * src/Makefile.in: * lwlib/Makefile.in: * lib-src/Makefile.in: * Makefile.in: More Makefile cleanup - add .PHONY targets where necessary - remove most builtin rules using .SUFFIXES - -lXau only gets used for linking gnuserv binaries - No VPATH for root Makefile - remove gcc v1 support * configure.in: - A new test to autodetect need to define NARROWPROTO, needed by XFree86 - Consistently use idiom foo=`echo '' $foo | sed -s 's:^ ::' -e ...` - Immediately exit if SIZEOF_* tests fail. - Check for libPW - Use more sophisticated Xpm test that confirms xpm.h and libXpm are in sync. * src/s/linux.h: * src/m/intel386.h: Yet another attempt to clean up linux defines. 1997-06-10 Steven L Baur * lib-src/pop.c: Correct incantation for pop.h. From Martin Buchholz Tue Jun 10 15:11:16 1997 Steven L Baur * configure.in (beta): Correct test looking for Beta number. 1997-06-11 MORIOKA Tomohiko * src/Makefile.in.in, mule/language/misc-lang.el, mule/mule-load.el, mule/ipa-hooks.el: Use lisp/mule/language/misc-lang.el instead of lisp/mule/ipa-hooks.el; mule/ipa-hooks.el was deleted. 1997-06-10 MORIOKA Tomohiko * Use lisp/mule/language/thai-util.el instead of lisp/mule/thai.el. * lisp/custom/wid-edit.el: Add widget `coding-system' for mule. * lisp/mule/thai-hooks.el, lisp/mule/mule-load.el: Use lisp/mule/language/thai.el instead of lisp/mule/thai-hooks.el. * lisp/mule/language/thai.el: modified for XEmacs. 1997-06-09 MORIOKA Tomohiko * lisp/mule/mule-load.el, src/Makefile.in.in: Use lisp/mule/language/chinese.el, lisp/mule/language/cyrillic.el, lisp/mule/language/european.el, lisp/mule/language/greek.el, lisp/mule/language/japanese.el and lisp/mule/language/korean.el instead of lisp/mule/chinese-hooks.el, lisp/mule/cyrillic-hooks.el, lisp/mule/european-hooks.el, lisp/mule/greek-hooks.el, lisp/mule/japanese-hooks.el and lisp/mule/korean-hooks.el. * lisp/mule/language/*.el was imported from Emacs/mule-19.34.94-zeta. * Use lisp/mule/language/china-util.el instead of lisp/mule/chinese.el. 1997-06-08 MORIOKA Tomohiko * lisp/apel/emu-x20.el (mime-charset-coding-system-alist): iso-8859-1, hz-gb-2312, cn-gb-2312, gb2312, cn-big5 and koi8-r were defined as coding-system. 1997-06-08 MORIOKA Tomohiko * etc/smilies/Face_smile.xbm, etc/smilies/Face_weep.xbm, etc/smilies/Face_ase2.xbm, etc/smilies/Face_ase3.xbm, etc/smilies/Face_ase.xbm: Add Japanese smiley faces. 1997-06-07 MORIOKA Tomohiko * lisp/gnus/smiley.el (smiley-deformed-regexp-alist): Add Japanese smiley faces. 1997-06-10 Gary D. Foster * lisp/modes/view-less.el: Changed \177 bindings to 'delete * lisp/modes/help.el: Changed \177 bindings to 'delete 1997-06-10 Gary D. Foster * lisp/prim/keydefs.el: Changed all 'delete key bindings to point to the `backward-or-forward-foo' functions. * lisp/prim/simple.el: - Renamed `delete-erases-forward' to `delete-key-deletes-forward'. - Removed `backspace-or-delete-hook' - Renamed `backspace-or-delete' to `backward-or-forward-delete-char' - Added functions: `backward-or-forward-kill-word' `backward-or-forward-kill-sentence' `backward-or-forward-kill-sexp' - Removed the zmacs hacks from all the `b-or-f-foo' functions and began playing nicely with pending-del. * lisp/modes/cc-mode.el: * lisp/modes/cperl-mode.el: Fixed references to delete functions to use the new names. 1997-06-09 Steven L Baur * XEmacs 20.3-b5 is released. 1997-06-08 Steven L Baur * etc/NEWS: Updates for early beta20.3 stuffs. From Hrvoje Niksic 1997-06-05 Steven L Baur * XEmacs 20.3-b4 is released. 1997-06-04 Martin Buchholz * src/*/*.h: Remove definitions of HAVE_UNION_WAIT, in accordance with new Autoconf 2 mechanisms. * src/syswait.h: * src/sysdep.c: * src/process.c: Use only Posix.1 sys/wait.h-defined symbols * src/s/netbsd.h: complete rewrite, use ORDINARY_LINK, #ifdef out old cruft that can be obtained from system header files. * lib-src/getopt*: Synch with FSF, remove compiler warnings. * lib-src/b2m.c: * src/gifalloc.c: * lib-src/gnuslib.c: * lib-src/profile.c: * lib-src/movemail.c: Fix compiler warnings * lib-src/Makefile.in.in: Remove unused -DCONFIG_BROKETS flag - Fix up compile flags for new etags version * etc/NEWS: * etc/etags.1: * man/xemacs/programs.texi: * lib-src/etags.c: Upgraded to etags 12.11 * src/config.h.in: Fix inline keyword support * configure.in: Use a different mechanism for removing extra white space. Avoid using foo=`echo $bar`, which loses with various echos. - new M4 macro XE_SPACE(var, words...) - Use autoconf 2's AC_HEADER_SYS_WAIT - Check for Xpm-XpmFree instead of Xpm-XpmReadFileToData to avoid linking with losing Xpm implementations - Check for correct wnn4 lib symbols - Only link with inline.o when using gcc - Support inline keywords inline, __inline, __inline__ - Ultrix now implies have_mmap=no - Sun sound in non-standard dirs now works - --native-sound-lib no longer ignored on HP & SGI - gpm configure tests moved after curses configure tests 1997-06-04 Gary D. Foster * lisp/modes/cc-mode.el: Modified `c-electric-delete' to honor the desired delete direction in both normal and "hungry" modes. * lisp/modes/cperl-mode.el: Modified `cperl-electric-backspace' to honor the desired delete direction. 1997-05-30 Martin Buchholz * configure.in: Automagically compute -R path for gcc 1997-05-30 Gary D. Foster * lisp/vm/vm-vars.el: Fixed delete key binding to call `vm-scroll-down' Thu May 29 15:35:07 1997 Martin Buchholz * configure.in: Add support for Solaris2.6 -z ignore linker flags 1997-05-29 Martin Buchholz * configure.in: Replace standard Autoconf MMAP test with Neal Becker's replacement, hacked somewhat. 1997-05-16 Gary D. Foster * lisp/prim/simple.el: Created `backspace-or-delete' function and `backspace-or-delete-hook' * lisp/prim/keydefs.el: Changed \177 bindings to point to new delete function. * lisp/modes/*.el: Removed conflicting \177 bindings. * lisp/modes/cc-mode.el: Modified `c-electric-delete' to use new delete bindings. * lisp/modes/cperl-mode.el: Modified `cperl-electric-backspace' to use new delete bindings. 1997-06-03 MORIOKA Tomohiko * lisp/x11/x-menubar.el (default-menubar): Add menu for Mule. * lisp/mule/mule-cmds.el: Menu for XEmacs were moved to x11/x-menubar.el. 1997-06-03 MORIOKA Tomohiko * lisp/leim/quail.el: to avoid compiling warnings about overlay.el. 1997-06-03 MORIOKA Tomohiko * lisp/leim/quail.el: to sync with quail.el of Emacs-19.34.94-zeta. * lisp/leim/quail/ziranma.el, lisp/leim/quail/tonepy.el, lisp/leim/quail/py.el, lisp/leim/quail/qj.el, lisp/leim/quail/sw.el, lisp/leim/quail/ccdospy.el, lisp/leim/quail/punct.el, lisp/leim/quail/4corner.el, lisp/leim/quail/symbol-ksc.el, lisp/leim/quail/ethiopic.el, lisp/leim/quail/hanja.el, lisp/leim/quail/quick-cns.el, lisp/leim/quail/tsangchi-cns.el, lisp/leim/quail/lrt.el, lisp/leim/quail/tsangchi-b5.el, lisp/leim/quail/devanagari.el, lisp/leim/quail/japanese.el, lisp/leim/quail/quick-b5.el, lisp/leim/quail/punct-b5.el, lisp/leim/quail/qj-b5.el, lisp/leim/quail/py-b5.el, lisp/leim/quail/ctlau.el, lisp/leim/quail/ctlaub.el, lisp/leim/quail/ecdict.el, lisp/leim/quail/array30.el, lisp/leim/quail/hangul3.el, lisp/leim/quail/hanja-jis.el, lisp/leim/quail/cyrillic.el, lisp/leim/quail/etzy.el, lisp/leim/quail/greek.el, lisp/leim/quail/ipa.el, lisp/leim/quail/lao.el, lisp/leim/quail/zozy.el, lisp/leim/quail/viqr.el, lisp/leim/quail/latin.el, lisp/leim/quail/thai.el, lisp/leim/quail/hangul.el: quail of LEIM for Emacs-19.34.94-zeta. 1997-06-02 MORIOKA Tomohiko * mule/korean.el was abolished because it seems not to be used. * mule/japanese.el was abolished because it seems not to be used. 1997-06-01 MORIOKA Tomohiko * lisp/tm/gnus-mime-old.el was abolished because XEmacs 20.3 has Gnus 5.4. * lisp/tm/tm-edit.el: updated to 7.108. * lisp/tm/tm-view.el: updated to 7.83. * lisp/leim/quail.el: modified for XEmacs. * lisp/mule/mule-load.el, lisp/mule/mule-process.el: delete mule-process.el because it is not used. * lisp/mule/european.el was abolished because it seems not to be used. * lisp/mule/mule-load.el: must load mule-cmds before setting for language-environment. * lisp/mule/european-hooks.el: Modified for LEIM. * lisp/mule/mule-cmds.el: Uncomment key definition for `toggle-input-method'. * lisp/mule/mule-init.el: Comment out about `mule-keymap' (moved to mule-cmds.el). * lisp/mule/mule-cmds.el: Uncomment about `mule-keymap' (moved from mule-init.el). * lisp/tl/tl-atype.el: Don't require tl-str. * lisp/tl/tl-atype.el: Use atype.el of APEL. * lisp/tl/tl-list.el: Use alist.el of APEL. 1997-05-31 MORIOKA Tomohiko * lisp/tl/richtext.el, lisp/tl/emu-x20.el, lisp/tl/emu-xemacs.el, lisp/tl/emu.el, lisp/tl/emu-e19.el: moved to apel/. * lisp/tl/file-detect.el, lisp/tl/filename.el: replaced by APEL's. * lisp/mu/std11-parse.el, lisp/mu/std11.el: moved to apel/. * lisp/leim/quail.el: Add new quail.el (imported from Emacs 19.34.94-epsilon). * lisp/leim/skk/skkdic.el: delete skkdic.el temporary because XEmacs can not compile it. * lisp/leim/skk/skkdic.el, lisp/leim/quail/zozy.el, lisp/leim/quail/ziranma.el, lisp/leim/quail/viqr.el, lisp/leim/quail/tsangchi-cns.el, lisp/leim/quail/tsangchi-b5.el, lisp/leim/quail/symbol-ksc.el, lisp/leim/quail/thai.el, lisp/leim/quail/tonepy.el, lisp/leim/quail/quick-cns.el, lisp/leim/quail/sw.el, lisp/leim/quail/qj-b5.el, lisp/leim/quail/qj.el, lisp/leim/quail/quick-b5.el, lisp/leim/quail/py-b5.el, lisp/leim/quail/py.el, lisp/leim/quail/lao.el, lisp/leim/quail/latin.el, lisp/leim/quail/lrt.el, lisp/leim/quail/punct-b5.el, lisp/leim/quail/punct.el, lisp/leim/quail/hanja-jis.el, lisp/leim/quail/hanja.el, lisp/leim/quail/ipa.el, lisp/leim/quail/japanese.el, lisp/leim/quail/hangul3.el, lisp/leim/quail/etzy.el, lisp/leim/quail/greek.el, lisp/leim/quail/hangul.el, lisp/leim/quail/ethiopic.el, lisp/leim/quail/devanagari.el, lisp/leim/quail/ecdict.el, lisp/leim/quail/ctlau.el, lisp/leim/quail/ctlaub.el, lisp/leim/quail/cyrillic.el, lisp/leim/quail/array30.el, lisp/leim/quail/ccdospy.el, lisp/leim/quail/4corner.el: Add LEIM elisp files; old lisp/quail was abolished. * src/Makefile.in.in: Add mule-cmds.elc. * lisp/mule/mule-load.el, lisp/mule/mule-cmds.el: Add mule-cmds.el (imported from Emacs-19.34.94-epsilon and comment out a lot to avoid conflict with mule-init.el or other XEmacs/mule files). * lisp/prim/simple.el (assoc-ignore-case): New function; imported from Emacs-19.34.94-epsilon. 1997-05-29 Steven L Baur * XEmacs 20.3-beta3 is released. * INSTALL: Delete documentation of mocklisp support. * configure.in: Delete mocklisp support. * etc/FTP: Update mirror info. * etc/DISTRIB: Update mirror info. 1997-05-29 Martin Buchholz * configure.in: Replace standard Autoconf MMAP test with Neal Becker's replacement, hacked somewhat. 1997-05-28 Martin Buchholz * lisp/prim/files.el (auto-mode-alist): Reorg auto-mode-alist again. * lib-src/etags.c: Version 12.7 from Francesco. * configure.in: Juggle link order of X libraries. Add support for using zsh to run configure. Document --with-tty=no. Fix -no-recursion option. Recognize and ignore --cache-file option. Recognize null values for preprocessor symbols converted to shell variables. This maybe fixes the "-ltermcap" problem. Remove spurious blanks from various SUBST-ituted variables. Fix conditional creation of gdbinit. Conditionally create .sbinit for Sunpro C. 1997-05-26 Steven L Baur * etc/FTP: Correct typo in ftp.cenatls.cena.dgac.fr. * etc/DISTRIB: Ditto. 1997-05-22 Steven L Baur * XEmacs 20.3-beta2 is released. Thu May 22 04:19:09 1997 Martin Buchholz * configure.in: Try to fix all reported bugs with 20.3-b1. Change HAVE_WNN6 to WNN6. WNN6 correctly autodetected. extra-verbose now default on beta builds. extra-verbose now much more verbose. Don't set libs_termcap to " ". Detect -lXm AFTER detecting -lXpm. Use runtime paths before running tests, since AC_TRY_RUN may depend on it. with-xim=motif only default on Solaris. realpath moved from s&m to configure.in. xemacs-version.h removed. main_1 now contains $canonical as well, for even more useful backtraces. termcap handling rewritten. Create .sbinit for Sun's source browser. Warn user if no XPM support present. Warn user if compiling in error checking. * Makefile.in: use MAKE_SUBDIR consistently. Remove references to dynodump. Remove core when cleaning. Remove config.log. make distclean now functional. Tue Jun 4 10:15:54 1996 Per Bothner * etc/e/eterm.ti: Add kcub1, kcuf1, kcuu1, kcud1 capabilities. Sun May 18 13:03:20 1997 Steven L Baur * lwlib/Makefile.in.in (distclean): Clean up config.h. * Makefile.in (distclean): Remve config.log. remove broken dynodump stuffs. Sat May 17 20:30:54 1997 Steven L Baur * XEmacs 20.3-b1 is released. Fri May 16 20:38:19 1997 Steven L Baur * info/dir (Packages): Update minor version number. * etc/README: Update minor version number. * README: Update minor version number. Tue May 13 20:35:52 1997 Steven L Baur * XEmacs-20.2 is released. Sat May 10 16:14:30 1997 Steven L Baur * XEmacs 20.2-b6 is released. Thu May 8 20:22:34 1997 Steven L Baur * XEmacs 20.2-b5 is released. Fri May 2 16:50:02 1997 Steven L Baur * XEmacs 20.2-b4 is released. Thu May 1 18:13:38 1997 Steven L Baur * configure.in (--with-xim): Don't default it to Motif since it causes crashes at startup on some systems. Sun Apr 27 12:25:55 1997 Steven L Baur * XEmacs 20.2-b3 is released. Wed Apr 23 10:33:58 1997 Steven L Baur * XEmacs 20.2-b2 is released. * configure.in (beta): OPENWINHOME misspelled. Mon Apr 21 14:48:29 1997 Steven L Baur * etc/BETA (writing): Update with information about how to create patches. Sat Apr 19 16:13:16 1997 Steven L Baur * XEmacs 20.2-b1 is released. Thu Apr 17 21:33:59 1997 Steven L Baur * configure.in (beta): SONY NEWS-OS has /etc/osversion and not uname. Wed Apr 16 17:44:05 1997 Steven L Baur * XEmacs 20.1 is re-released. Tue Apr 15 21:03:22 1997 Steven L Baur * XEmacs 20.1 is released. Sat Apr 12 20:11:08 1997 Steven L Baur * XEmacs 20.1-b15 is released. Sat Apr 12 09:01:32 1997 Hrvoje Niksic * PROBLEMS: I have cleaned up a bit the PROBLEMS file, by: 1) changing it into sections -- there is now a section for building, running and compatibility problems 2) removing some obviously obsolete entries -- e.g. those pertaining to Emacs 18, etc. --> size is off by 20K 3) Rearranging the entries by relevance. I have tried to put the most relevant entries in front. Thu Apr 10 19:07:26 1997 Steven L Baur * XEmacs 20.1-b14 is released. (Beta 13 was skipped). Wed Apr 9 22:52:06 1997 Steven L Baur * XEmacs 20.1-b12 is released. Sun Apr 6 22:31:00 1997 Tatsuya Ichikawa * configure.in: Cosmetic change to summary print of POP/Kerberos/ Hesiod options. Sat Apr 5 09:11:36 1997 Steven L Baur * XEmacs 20.1-b11 is released. Wed Apr 2 15:27:35 1997 Steven L Baur * Makefile.in (install-only): New target. Functionality suggested by Larry Schwimmer, correct way of doing it suggested by Chuck Thompson. * configure.in: Default to "-Olimit 2000" as suggested by Jamie Zawinski for SGI cc and Irix 6. Tue Apr 1 12:23:13 1997 Steven L Baur * configure.in: Add configuration parameters for Emacs 19.34 movemail.c (--with-pop, --with-kerberos, --with-hesiod). Fri Mar 28 19:58:41 1997 Steven L Baur * configure.in: Remove garbage if [ ... ] constructs and a mispatch. Thu Mar 27 18:24:19 1997 Steven L Baur * XEmacs 20.1-b10 is released. Wed Mar 26 22:31:10 1997 Steven L Baur * Remove vms top-level directory. * XEmacs 19.15 final released to beta testers. Tue Mar 25 19:13:27 1997 Steven L Baur * XEmacs 19.15 prefinal released to beta testers. Mon Mar 24 12:28:17 1997 Steven L Baur * configure.in (--debug): Correct documentation. Sun Mar 23 17:24:38 1997 Steven L Baur * XEmacs 19.15-b104 is released. Sat Mar 22 19:56:36 1997 Steven L Baur * etc/sgml/CATALOG: Default to html-3.2final. Sat Mar 22 17:55:15 1997 Darrell Kindred * configure.in (beta): Add configure support for the -rpath flag for IRIX analogous to the Solaris "-R". Sat Mar 22 16:47:08 1997 Steven L Baur * info/dir (Packages): Add HM-HTML-Mode to menu. Sat Mar 22 21:27:41 1997 Tomasz J. Cholewo * configure.in: Echo only current configuration using 'tee -a'. Fri Mar 21 21:26:01 1997 Steven L Baur * XEmacs-19.15-b103 is released. * XEmacs-20.0-b9 is released. * Makefile.in (top_distclean): Add `Installation' to distclean rule. Fri Mar 21 20:05:29 1997 Darrell Kindred * Makefile.in (autoloads): Pass $(MAKE) to update-elc.sh and update-autoloads.sh. Thu Mar 20 20:14:16 1997 Steven L Baur * XEmacs-19.15-b102 is released. Tue Mar 18 21:52:36 1997 Steven L Baur * XEmacs-19.15-b101 is released. Mon Mar 17 19:09:29 1997 Steven L Baur * XEmacs-20.1-b8 is released. * XEmacs-19.15-b100 is released. Sat Mar 15 17:15:18 1997 Steven L Baur * XEmacs-20.1-b7 is released. * XEmacs-19.15-b99 is released. * etc/sgml/CATALOG: Added IE3 DTDs and htmlpro DTD. Thu Mar 13 10:40:11 1997 Steven L Baur * configure.in: Add sunos4-1-4 header files. Wed Mar 12 18:53:08 1997 Steven L Baur * configure.in: Use new file bsdos3.h with BSDI 3.0. Sat Mar 8 15:19:33 1997 Steven L Baur * XEmacs-20.1-b6 is released. * XEmacs-19.15-b98 is released. Wed Mar 5 18:55:36 1997 Steven L Baur * Makefile.in (install-arch-indep): Offer to compress lisp sources. (gzip-el): New targe for compressed installed lisp sources. Tue Mar 4 23:28:37 1997 Martin Buchholz * lib-src/update-elc.sh: VM is compiled after the byte-compiler, but before anything else. More flexible about finding an xemacs to use for byte-compilation (default src/xemacs). Other minor fixes. Mon Mar 3 23:57:56 1997 Steven L Baur * XEmacs 20.1-b5 is released. Mon Mar 3 18:09:17 1997 Steven L Baur * XEmacs 20.1-b4 is released. Sat Mar 1 15:38:30 1997 Steven L Baur * Makefile.in (distclean): Correct typos. * XEmacs 19.15-b96 is released. * configure.in: Symlink site-lisp when using --srcdir. Add special handling of lisp directory to allow for multiple site-packages files. Fri Feb 28 20:38:46 1997 Steven L Baur * Makefile.in (distclean): Create lock and site-lisp directories when they don't exist (after being pruned by CVS). Tue Mar 4 00:41:38 1997 Hrvoje Niksic * etc/sample.Xdefaults: Added customization of foreground and background colors for the `default' face. Wed Feb 26 22:12:12 1997 Steven L Baur * Makefile.in (top_distclean): Reset src/PURESIZE.h for distribution. * XEmacs 20.1-b3 is released. Sun Feb 23 17:10:09 1997 Steven L Baur * XEmacs 20.1-b2 is released. Sat Feb 22 14:29:44 1997 Steven L Baur * XEmacs 19-15-b'95 is released. Fri Feb 21 22:29:51 1997 Martin Buchholz * etc/toolbar/workshop-cap-up.xpm: Moved caption up one pixel. * lwlib/xlwscrollbar.c : Fix many scrollbar bugs: - "knob" renamed to "slider" - leftmost pixel wasn't sensitive to button clicks, while righmost pixel was. - many glitches fixed if Emacs*XlwScrollBar.ArrowPosition:same: - goobers on top of up-arrow removed. - up-arrow would not always be redrawn when necessary - slider drag would be `off' by size of up-arrow - horizontal and vertical scrollbars didn't use exactly the same dimensions. - slider was never drawn if XlwScrollBar.shadowThickness was 0. - Now up- and down-arrows actually work near beginning/end of buffer! Thu Feb 20 12:40:57 1997 Jan Vroonhof * configure.in (with_xauth): Attempted correction of test for libXmu on SunOS. Sat Feb 15 14:11:03 1997 Steven L Baur * XEmacs 20.1-b1 is released. * XEmacs 19.15-b94 is released. Fri Feb 14 23:23:03 1997 Steven L Baur * README: ``This directory tree holds version 19.13 ...'' ??? Sun Feb 9 16:15:55 1997 Steven L Baur * XEmacs 19.15-b93 is released. XEmacs 20.0 is released to the 'net. Fri Feb 7 19:21:34 1997 Steven L Baur * XEmacs 20.0try3 is released. Wed Feb 5 18:03:06 1997 Steven L Baur * XEmacs 20.0try2 is released. Mon Feb 3 19:39:08 1997 Steven L Baur * XEmacs 19.15-b92 is released. Sat Feb 1 18:17:38 1997 Steven L Baur * XEmacs 20.0try1 is released. * XEmacs 19.15-b91 AKA XEmacs '97 NOT! is released. Sat Feb 1 00:00:48 1997 Steven L Baur * PROBLEMS: Updated from beta test bug reports. Put in outline-mode/outl-mouse-minor-mode by default. Wed Jan 29 19:59:41 1997 Steven L Baur * CHANGES-beta: XEmacs 20.0-b93 is released. Sat Jan 25 15:43:59 1997 Steven L Baur * CHANGES-beta: XEmacs 20.0-b92 is released. Fri Jan 24 09:54:01 1997 Steven L Baur * lwlib/xlwmenu.c (massage_resource_name): Changed comparison of char and pointer. Thu Jan 23 10:39:34 1997 Martin Buchholz * lib-src/update-elc.sh (ignore_dirs): Quoting portability. Wed Jan 22 21:07:17 1997 Steven L Baur * XEmacs 20.0-b91 (prerelease 2) is released. * configure.in (--with-scrollbars): Add Athena3d as a toolkit type. * lwlib/lwlib-Xaw.c (xaw_update_one_widget): Let Athena 3d have 0 borderwidth. (xaw_scrollbar_scroll): Use SCROLLBAR_LINE_UP and SCROLLBAR_LINE_DOWN since that's current the only to get to the bottom of the buffer. :-( Tue Jan 21 20:01:19 1997 Steven L. Baur * configure.in (beta): Add LWLIB_USES_ATHENA for odd configurations that use both Motif and Athena. * etc/sgml/HTML32.dtd: html-3.2 final dtd added. Wed Jan 15 12:55:19 1997 Steven L Baur * info/dir (Gnus): Updated spelling and info. Mon Jan 13 13:37:27 1997 Steven L Baur * configure.in: Remove assignment of NON_GNU_CPP for irix-6.0. Mon Jan 13 00:36:01 1997 Martin Buchholz * lib-src/make-docfile.c (scan_lisp_file): eliminate doc-string warnings for ccl-read-* Sat Jan 11 12:05:31 1997 Steven L Baur * etc/sample.emacs: Remove code snippet that wipes out the cycle buffer modeline feature. * XEmacs 20.0 beta90 (prerelease 1) is released. * XEmacs 19.15 beta90 (prerelease 1) is released. Tue Jan 7 08:45:16 1997 Steven L Baur * configure.in (LIBS): Revise test for XFree86 (look for XF86Config). Sat Jan 4 14:52:57 1997 Steven L Baur * XEmacs 20.0 beta 34 is released. * XEmacs 19.15 beta 7 is released. Fri Jan 3 15:18:59 1997 Jeff Miller * lwlib/Makefile.in.in: lwlib is required if X11 is used. Wed Jan 1 08:30:48 1997 Martin Buchholz * src/emacs.c: Make sure `./temacs -batch -l loadup.el run-temacs ' works properly * src/Makefile.in.in (rtcmacs): Add support for RTC, Sun's competitor to Purify. * man/lispref/symbols.texi: Fix up bit vector documentation * man/lispref/sequences.texi: Fix up bit vector documentation * lisp/sunpro/sunpro-load.el: Only preload mime-setup for Sun. * lisp/prim/update-elc.el: Don't rely on autoloads. Tue Dec 31 09:46:13 1996 Martin Buchholz * lisp/prim/auto-autoloads.el: New, completely program-generated, file * lib-src/update-autoloads.sh: Rewritten to use auto-autoloads.el. * lisp/utils/autoload.el: Reorganization of autoload mechanism: Errors during autoload generation are just that - errors. Generated autoloads are now in a separate file of their own. Reliability of autoload generation greatly increased. Distribution smaller by about 100k. `make autoloads' is still the preferred mechanism for update. Autoloads are always regenerated completely from scratch. This avoids errors with obsolete or corrupted autoload entries. Caching of autoload entries using timestamps has been eliminated. Files that have no autoloads no longer have a comment placed into the generated autoloads file. There was a bug where autoload entries would sometimes end up being inserted into the *middle* of other autoload entries, thereby corrupting them. * src/event-Xt.c: Remove SUNOS_GCC_L0_BUG kludge. Sun Dec 29 05:37:43 1996 Martin Buchholz * lib-src/update-autoloads.sh: Make sure that `make autoloads' doesn't use the autoload facility to load `autoload'; load it explicity instead. * lib-src/update-elc.sh (ignore_dirs): ignore SCCS, CVS, RCS dirs * man/Makefile: Reinstate hyperbole & oo-browser manuals * lisp/modes/mail-abbrevs.el: Apply patch originated from Noah Friedman * src/mule-charset.c: Use lower case for charset registry, to match XLFD. * Makefile.in: replace list of info files with *.info* - one less maintenance headache * etc/sample.emacs: Add sample code to highlight continuation glyph * man/oo-browser.texi: Fix TeXability * man/hyperbole.texi: Fix TeXability * man/vhdl-mode.texi: Fix TeXability * lisp/prim/loaddefs.el: Wholesale housecleaning `make autoloads' should finally work. * lib-src/emacsclient.c (main): ANSIfication, compiler warning removal * lisp/mule/mule-files.el: Add support for multi-lingual info files. * lib-src/update-elc.sh: `make all-elc' was updating files in `special' directories without using the Makefiles designed for that purpose. - make sure ilisp isn't remade every time through `make all-elc'. * info/dir (Packages): Add Japanese TM info files * src/inline.c: Allow compilation with `gcc -g' * src/syntax.c (word_constituent_p): Allow compilation with `gcc -g' * src/lread.c: Don't put `...' immediately after a filename, so that various tools can recognize the filename as such. * src/event-Xt.c (x_to_emacs_keysym): Fix crash when --with-xim=xlib and key event on window frame. Change return foo to return (foo) when return is a macro. * src/editfns.c (Ffollowing_char): docstring fixes. * man/tm/Makefile: Add support for Japanese TM info (but not dvi) files. This Makefile is no longer officially broken. * info/dir: Add Japanese tm documents. * man/tm/tm-vm-en.texi: Make document TeX-friendly. * lib-src/update-autoloads.sh (EMACS): Don't rely on non-portable xargs -i flag. * lisp/mule/mule-files.el (file-coding-system-alist): Make sure the `binary' coding system is used for .gz and .Z extensions. * man/viper.texi: Viper version 2.90 * man/ediff.texi: Ediff Version 2.62 * lisp/packages/ispell.el (ispell-word): Avoid using strings with define-key, for compatibility with loaddefs.el * lisp/modes/eiffel3.el: Make compatible with update-autoloads. * lisp/ilisp/Makefile (elc): Add target to avoid re-compilation. * lib-src/update-elc.sh: XEmacs sometimes re-byte-compiled elisp files in dirs that have their own Makefiles. Sun Dec 29 17:02:49 1996 Steven L Baur * Makefile.in (install-arch-indep): Force compression with `gzip -f'. * lib-src/update-elc.sh (NUMTOCOMPILE): Ignore CVS directories. * Makefile.in (install-arch-indep): Catch .info-[0-9]* files for installation. Sat Dec 28 15:33:27 1996 Steven L Baur * XEmacs 20.0 beta 33 is released. * XEmacs 19.15 beta 6 is released. Fri Dec 27 20:34:58 1996 Richard Mlynarik * etc/yow.lines: 20k of new zippy quotes. Fri Dec 27 01:02:41 1996 Martin Buchholz * Makefile.in (install-arch-indep): Simplify installation of info pages. Sat Dec 21 15:20:20 1996 Steven L Baur * XEmacs 20.0-b32 released. * XEmacs 19.15-b5 released. Wed Dec 18 20:22:08 1996 Martin Buchholz * configure.in: Reformat. Fix shared include file rename problem. * configure: Reformat. Fix shared include file rename problem. * dynodump/dynodump.c (__EXTENSIONS__): Define it. Thu Dec 12 13:19:00 1996 Joseph J Nuspl * Makefile.in (install-arch-indep): Install infofiles gzipped by default. Tue Dec 10 19:25:25 1996 Steven L Baur * CHANGES-beta: XEmacs 20.0-b31 is released. Tue Dec 10 18:33:19 1996 Rod Whitby * info/vhdl-mode.info: New file. * info/dir (Packages): Add vhdl-mode documentation. Tue Dec 10 18:27:02 1996 Martin Buchholz * configure: Make shared/dynamic flags work much more logically. Tue Dec 10 09:17:22 1996 David Worenklein * configure.in (machine): Patch to make newly renamed shared link include files work. Sat Dec 7 16:28:10 1996 Martin Buchholz * configure.in: Configure for POSIX getcwd if available. Thu Dec 5 20:42:35 1996 Steven L Baur * etc/edt-user.doc (File): New file from Emacs 19.34. Thu Dec 5 11:56:05 1996 Joseph J Nuspl * configure.in (LIBS): Fix typo in dialog box test. xemacs-21.4.22/GETTING.GNU.SOFTWARE0000644000175000017500000001140406256071506014154 0ustar acsacs-*- text -*- For information on getting XEmacs, see the files DISTRIB and MAILINGLISTS in the .../etc/ directory of the XEmacs distribution. Getting GNU Software, 14 May 94 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1992, 1993, 1994 Free Software Foundation, Inc. Permission is granted to anyone to make or distribute verbatim copies of this document provided that the copyright notice and this permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. * GNU and the Free Software Foundation Project GNU is organized as part of the Free Software Foundation, Inc. The Free Software Foundation has the following goals: 1) to create GNU as a full development/operating system. 2) to distribute GNU and other useful software with source code and permission to copy and redistribute. Further information on the rationale for GNU is in file `/pub/gnu/GNUinfo/GNU' (all files referred to are on the Internet host prep.ai.mit.edu). Information on GNU Internet mailing lists and gnUSENET newsgroups can be found in `/pub/gnu/GNUinfo/MAILINGLISTS'. * How To Get The Software The easiest way to get a copy of the distribution is from someone else who has it. You need not ask for permission to do so, or tell any one else; just copy it. The second easiest is to ftp it over the Internet. The third easiest way is to uucp it. Ftp and uucp information is in `/pub/gnu/GNUinfo/FTP'. If you cannot get a copy any of these ways, or if you would feel more confident getting copies straight from us, or if you would like to get some funds to us to help in our efforts, you can order one from the Free Software Foundation. See `/pub/gnu/GNUinfo/DISTRIB' and `/pub/gnu/GNUinfo/ORDERS'. * What format are the *.gz files in? Because the unix `compress' utility is patented (by two separate patents, in fact), we cannot use it; it's not free software. Therefore, the GNU Project has chosen a new compression utility, `gzip', which is free of any known software patents and which tends to compress better anyway. As of March 1993, all compressed files in the GNU anonymous FTP area, `prep.ai.mit.edu:/pub/gnu', have been converted to the new format. Files compressed with this new compression program end in `.gz' (as opposed to `compress'-compressed files, which end in `.Z'). Gzip can uncompress `compress'-compressed files and `pack'-compressed files (which end in `.z'). This is possible because the various decompression algorithms are not patented---only compression is. The gzip program is available from any GNU mirror site (see `/pub/gnu/GNUinfo/FTP' for a list of mirror sites) in shar, tar, or gzipped tar format (for those who already have a prior version of gzip and want faster data transmission). It works on virtually every unix system, MSDOS, OS/2, and VMS. * Available Software ** GNU Emacs The GNU Emacs distribution includes: - manual source in TeX format. - an enhanced regex (regular expression) library. See files `/pub/gnu/GNUinfo/MACHINES*' for the status of porting Emacs to various machines and operating systems. ** C Scheme - a block structured dialect of LISP. The Free Software Foundation distributes C Scheme for the MIT Scheme Project on its Scheme tapes. The full ftp distribution can be gotten via anonymous FTP from altdorf.ai.mit.edu in directory /archive. Problems with the C Scheme distribution and its ftp distribution should be referred to: . There are two general mailing lists: and . Send requests to join either list to: or . ** Other GNU Software A full list of available software are in `/pub/gnu/GNUinfo/ORDERS' and `/pub/gnu/DESCRIPTIONS'. * No Warranties We distribute software in the hope that it will be useful, but without any warranty. No author or distributor of this software accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing. * If You Like The Software If you like the software developed and distributed by the Free Software Foundation, please express your satisfaction with a donation. Your donations will help to support the foundation and make our future efforts successful, including a complete development and operating system, called GNU (Gnu's Not Un*x), which will run Un*x user programs. Please note that donations and funds raised by selling tapes, CD-ROMs, and floppy diskettes are the major source of funding for our work. For more information on GNU and the Foundation, contact us at Internet address or the foundation's US Mail address found in file `/pub/gnu/GNUinfo/ORDERS'. xemacs-21.4.22/INSTALL0000644000175000017500000010431410170631235012272 0ustar acsacsXEmacs Installation Guide Copyright (c) 1994, 1995, 1996 Board of Trustees, University of Illinois Copyright (c) 1994-1999 Free Software Foundation, Inc. Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them, and that any new or changed statements about the activities of the Free Software Foundation are approved by the Foundation. BUILDING AND INSTALLATION FOR UNIX AND CYGWIN (for Microsoft Windows, see nt/README also.) PREREQUISITES ============= Make sure your system has enough swapping space allocated to handle a program whose pure code is 900k bytes and whose data area is at least 400k and can reach 8Mb or more. Note that a typical XEmacs build is much bigger. If the swapping space is insufficient, you will get an error in the command `temacs -batch -l loadup dump', found in `./src/Makefile.in.in', or possibly when running the final dumped XEmacs. Verify that your users have a high enough stack limit. On some systems such as OpenBSD and OSF/Tru64 the default is 2MB which is too low. On MacOS/X (Darwin), it's 512kB. See 'PROBLEMS' for details. Building XEmacs requires about 100 Mb of disk space (including the XEmacs sources). Once installed, XEmacs occupies between 20 and 100 Mb in the file system where it is installed; this includes the executable files, Lisp libraries, miscellaneous data files, and on-line documentation. The exact amount depends greatly on the number of extra lisp packages that are installed XEmacs requires an ANSI C compiler, such as GCC. If you wish to build the documentation yourself, you will need at least version 1.68 of makeinfo (GNU texinfo-3.11). GNU Texinfo 4.2 is recommended; it is necessary for building Lisp packages, and we may move to it for the core. ADD-ON LIBRARIES ================ Decide which libraries you would like to use with XEmacs, but are not yet available on your system. On some systems, X11, Motif and CDE are optional additions. On MacOS/X systems, you may download X11R6 for Mac OS X from http://www.apple.com/macosx/x11/download/. You need both the runtime libraries and the SDK (in a sidebar of that page at the time of writing). There is also a 3rd-party implementation of X11R6 for the Mac at http://www.xdarwin.org/. On Solaris, the SUNWaudmo package enables native sound support. There are also a number of free software applications that XEmacs can use. If these are not yet available on your system, obtain, build and install those external libraries before building XEmacs. The libraries XEmacs can use are: Xaw3d, XPM, JPEG, compface, PNG, zlib, GNU DBM, Berkeley DB, socks, term, NAS, Canna, Kinput2, SJ3, Wnn. You can get (most of) them from the XEmacs ftp site at ftp://ftp.xemacs.org/pub/xemacs/aux If you want users on other systems to be able to use the XEmacs you have built, try to build those packages so that the generated libraries are statically linked. Use the --site-includes and --site-libraries options when building XEmacs to allow configure to find the external software packages. Note that for X11 includes, you should put the files in the X11 subdirectory of the --site-includes directory. Eg, XEmacs sources #include . In that case, you should omit the trailing "/X11" from --site-includes, or the trailing "/includes/X11" from --site-prefixes. The latter is convenient if your libraries are installed under "includes/../lib". The directories specified with --site-includes or --site-libraries take precedence over those specified with --site-prefixes, and those take precedence over the standard search paths. If you link with dynamic (``.so'') external package libraries, you will also need to add the runtime library directories to the --site-runtime-libraries option. PACKAGE SYSTEM ============== The file README.packages contain information vital to have a fully working XEmacs. This information was not included in this file only because it is too large for this terse INSTALL. Please read README.packages now! CONFIGURATION OPTIONS ===================== In the top level directory of the XEmacs distribution, run the program `configure' as follows: ./configure [CONFIGURATION-NAME] [--OPTION[=VALUE]] ... Almost always, you should let `configure' (actually the shell script `config.guess') guess your host type, by omitting the CONFIGURATION-NAME argument. If you like to experiment, specify a configuration name in the form MACHINE-VENDOR-OPSYS, for example: sparc-sun-solaris2.6 See config.guess and configure.in for valid values for MACHINE, VENDOR, and OPSYS. Also check `./etc/MACHINES' for advice on building on particular machines. If you don't want X support, specify `--without-x'. If you omit this option, `configure' will try to autodetect whether your system has X, and arrange to use it if present. The `--x-includes=DIR' and `--x-libraries=DIR' options tell the build process where the compiler should look for the include files and object libraries used with the X Window System. Normally, `configure' is able to find them; these options are necessary if you have your X Window System files installed in unusual places. The `--site-includes=DIR' and `--site-libraries=DIR' options allow you to specify additional places the compiler should look for include files and object libraries. You may specify multiple DIR's by enclosing the list in quotes. All the external packages you want to use with XEmacs (e.g. xpm, wnn, ...) described later should have their include and library directories defined using these options. The `--site-runtime-libraries=DIR' option specifies directories to search for shared libraries at run time. This may be necessary if you link with dynamic libraries that are installed in non-standard directories, or if you expect some of the libraries used to build XEmacs to be in a different directory at run time than at build time. Usually this will add a `-R' to each directory specified and use that when linking XEmacs. If you use this option, you must specify ALL of the directories containing shared libraries at run time, including system directories. Rationale: Some people think that directories in --site-libraries should be automatically used to update --site-runtime-libraries. Here's a real-life scenario that explains why this is not done: You build binaries for your company using static libs in /net/toy/hack/lib. XEmacs adds /net/toy/hack/lib to the runpath of the executable you've built. Since there are only static libs there, the system runtime loader will look in this dir, and ignore it, causing only a .01 second delay in starting XEmacs. You leave the company for a job at a small Silicon Valley startup. Time passes. The next guy who inherits your machine objects to working on a machine named `toy', and gets the sysadmin to rename the machine `godzilla'. The SA forgets to remove the old entry for `toy' from the hosts file. Now the system loader will still try to access /net/toy/, and the automounter will hang trying to access /net/toy. XEmacs suddenly takes 30 seconds longer to start up, no one can figure out why, and everyone at your old company curses your name, thinking that you've put a time bomb into XEmacs. And they're right! The `--with-gcc' option specifies that the build process should compile XEmacs using GCC. The `--compiler' option allows you to specify some other compiler to be used to compile XEmacs. If neither option is specified, the environment variable CC is used instead. Otherwise the compiler will then default to 'cc'. The `--cflags' option specifies the CFLAGS the build process should use when compiling XEmacs. Otherwise the value of the environment variable CFLAGS is consulted. If that is also undefined, CFLAGS defaults to "-g -O" for gcc and "-g" for all other compilers. The `--dynamic' option specifies that configure should try to link emacs dynamically rather than statically. You can build XEmacs for several different machine types from a single source directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. Create separate build directories for the different configuration types, and in each one, run the XEmacs `configure' script. `configure' looks for the Emacs source code in the directory that `configure' is in. The `--prefix=PREFIXDIR' option specifies where the installation process should put XEmacs and its data files. This defaults to `/usr/local'. - XEmacs (and the other utilities users run) go in PREFIXDIR/bin (unless the `--exec-prefix' option says otherwise). - The architecture-independent files go in PREFIXDIR/lib/xemacs-VERSION (where VERSION is the version number of XEmacs, like `21.0'). - The architecture-dependent files go in PREFIXDIR/lib/xemacs-VERSION/CONFIGURATION-NAME (where CONFIGURATION-NAME is the host type, like mips-dec-ultrix4.2), unless the `--exec-prefix' option says otherwise. The `--exec-prefix=EXECDIR' option allows you to specify a separate portion of the directory tree for installing architecture-specific files, like executables and utility programs. If specified, - XEmacs (and the other utilities users run) go in EXECDIR/bin, and - The architecture-dependent files go in EXECDIR/lib/xemacs-VERSION/CONFIGURATION-NAME. EXECDIR/bin should be a directory that is normally in users' PATHs. If you specify --prefix (or any of the other installation directory options), they will get compiled into the xemacs executable so it will be able to find its various associated file. However, XEmacs has quite elaborate logic to find out the locations of these directories dynamically. Sometimes, it is desirable *not* to compile these directories into the executable so you can move the XEmacs installation around (as whole) at will. This is true for binary kits, for instance. Therefore, you can specify --without-prefix on the configure command line to prevent the installation prefix to become part of the generated executable; everything else will continue to work as usual. The `--with-menubars=TYPE' option allows you to specify which X toolkit you wish to use for the menubar. The valid options are `lucid', `motif' and `no'. The default is `lucid' which is a Motif-lookalike menubar. We highly recommend its usage over the real Motif menubar. (In fact, the Motif menubar is currently broken.) If `no' is specified then support for menubars will not be compiled in. The `--with-scrollbars=TYPE' option allows you to specify which X toolkit you wish to use for the scrollbars. The `--with-dialogs=TYPE' option allows you to specify which X toolkit you wish to use for the dialog boxes. The `--with-widgets=TYPE' option allows you to specify which X toolkit you wish to use for native widgets. The valid options for TYPE in the `--with-scrollbars', `--with-dialogs', and `--with-widgets' options are `lucid', `motif', `athena', `msw', `gtk', and `no'. The `gtk' and `msw' options are only available on the GTK and MS Windows platforms, respectively. When available, `gtk' or `msw' and `no' are the only options. Otherwise, for dialogs and widgets, if the Motif toolkit can be found the default is `motif'. If not, the default is `athena'. `lucid' is an alias for `athena'. If `no' is specified then support for these GUI components will not be compiled in. For scrollbars, the default is `lucid' which is a Motif-lookalike scrollbar. Otherwise, if the Motif toolkit can be found the default is `motif'. If not, the default is `athena'. If `no' is specified then support for scrollbars will not be compiled in. If `athena' (or `lucid', for dialogs and widgets) is specified for any component (even by default), the type of Athena library must be specified using the following option if more than one is available. It is not always possible to distinguish them, and mixing and matching Athena libraries will result in crashes. The `--with-athena=TYPE' option specifies the kind of Athena library being used. Valid values include `xaw', `3d', `xpm', `95', and `next'. There is no default. The `--with-toolbars' option allows you to enable or disable toolbar support. The default is `yes' as long as support for a windowing system is included. The `--with-xpm' option specifies that XEmacs should support X11 Pixmaps. `configure' will attempt to detect if you have the Xpm libraries and define `--with-xpm' for you. The `--with-xface' option specifies that XEmacs should support X-Faces. `configure' will attempt to detect if you have the compface library and define `--with-xface' for you. The `--with-database' option specifies that XEmacs should be built with additional database support. The valid options are `no' or a comma-separated list of one or more of `dbm', `gnudbm' or `berkdb'. `configure' will attempt to detect the necessary libraries and header files and define `--with-database' for you. The `--with-socks' option specifies that XEmacs should be built with SOCKS support. This requires the libsocks library. The `--with-tooltalk' option specifies that XEmacs should be built with ToolTalk support for interconnecting with other applications. ToolTalk is not yet supported on all architectures. If you use this option, you should have the tooltalk package (see etc/PACKAGES) installed prior to building XEmacs. The `--with-sparcworks' option specifies that XEmacs should be built with support for Sun Sparcworks 3.0.1 and up (including Sun WorkShop). This functionality is only of use on SunOS 4.1.x and Solaris 2.x systems. If you use this option, you should have the Sun package (see etc/PACKAGES) installed prior to building XEmacs. The `--with-cde' option allows you to enable or disable CDE drag and drop support. `configure' will attempt to detect this option and define `--with-cde' for you. The `--with-offix' option allows you to enable or disable OffiX drag and drop support. This requires no external library support, so if X11 support is available, then this option defaults to `yes'. OffiX support can be explicitly disabled via the `--with-offix=no' option. The `--external-widget' option specifies that XEmacs should be built with support for being used as a widget by other X11 applications. This functionality should be considered beta. The `--without-xmu' option can be used if your vendor doesn't ship the Xmu library. The `--puresize' option can be used to change the amount of purespace allocated for the dumped XEmacs. As of XEmacs 20.1 usage of this parameter is deprecated and will be ignored. The `--with-sound=TYPE' option specifies that XEmacs should be built with sound support. Native (`--with-sound=native') sound support is currently available only on Sun SparcStations, SGI's, HP9000s, and systems (such as Linux) with soundcard.h. Network Audio Support (NAS) (`--with-sound=nas' or `--with-sound=both') is an extension to X that you may or may not have for your system. For NAS, you will probably need to provide the paths to the nas include and library directories to configure. If `--with-sound' is not specified, `configure' will attempt to determine if your configuration supports native sound and define --with-sound for you. If your native sound library is not in a standard location you can specify it with the `--native-sound-lib=LIB' flag. For Linux, `/dev/audio' is required for SunAudio files and `/dev/dsp' is required for raw data and WAVE format files. The `--rel-alloc' option can be used to either enable or disable use of the relocating allocator. Turning on --rel-alloc will allow XEmacs to return unused memory to the operating system, thereby reducing its memory footprint. However, it may make XEmacs runs more slowly, especially if your system's `mmap' implementation is missing or inefficient. Generally, it's best to go with the default configuration for your system. You can tweak this based on how you use XEmacs, and the memory and cpu resources available on your system. The `--with-system-malloc' option can be use to either enable or disable use of the system malloc. Generally, it's best to go with the default configuration for your system. Note that on many systems using the system malloc disables the use of the relocating allocator. The `--with-debug-malloc' option can be used to link a special debugging version of malloc. Debug Malloc is not included with XEmacs, is intended for use only by the developers and may be obtained from . The `--debug' and `--error-checking' options are primarily useful to the developers. `--debug' incorporates code for performing various tests, but does not impose a speed penalty. `--error-checking' adds additional tests to many of the commonly used macros, and imposes a speed penalty. Neither is especially useful in most common debugging situations. The `--verbose' and `--extra-verbose' options are intended for use only by the developers. `--verbose' causes the results of all configure tests to be displayed. `--extra-verbose' displays additional information, useful for debugging. Another help for determining configure failures is the file `config.log', which contains the results of the compile and link tests used by configure. The `--with-mule' option enables (MUlti-Lingual Emacs) support, needed to support non-Latin-1 (including Asian) languages. Mule support is required for Asian language and Unicode (multibyte and wide character) support. With the advent of the Euro and European Community expansion, Mule support is also recommended for Western Europeans. Enabling Mule support requires the mule-base package installed prior to building XEmacs. The mule-ucs package is required for Unicode support (but may be added at any time). For Europeans using Latin alphabets, and for support for the Euro symbol, the latin-unity package is recommended. The following options require Mule support: The `--with-xim' option enables use of the X11 XIM mechanism to allow an input method to input text into XEmacs. The input method is shared among all the X applications sharing an X display and using the same language. The XIM support comes in two flavors: `motif' and `xlib'. The Motif support (the XmIm* functions) is preferred when available. The xlib XIM support works reasonably well so long as the X11 libraries are recent enough. It has been fairly well tested on Linux with glibc 2.0.5 and 2.0.6 and Kinput2 as an XIM server. In this configuration X11 must be recompiled with X_LOCALE defined because glibc is lacking localization for Japanese. The XIM support defaults to `no' except when Motif is detected where it is stable with OSF libraries. The XIM support in Lesstif (a Free Motif replacement) does not work as of v0.82. If you enable this option, you will probably wish to install the `locale' package which contains localized Splash screens and Menubars. The `--with-xfs' option enables use of a multilingual Menubar. At the present time, only Japanese and French locales are supported. In order to use a multilingual Menubar you must have the `locale' package installed. The `locale' package does not have to be installed when building XEmacs. The `--with-canna' option enables the use of the Canna Japanese input method. This is stable code and fairly well tested. In order to use it, you will have to have the Canna server installed and running. Canna versions 3.2pl2 and 3.5b2 are known to work. Version 3.2pl2 is considered most stable than version 3.5b2. If Canna is already installed, configure will autodetect it, so you never need to explicitly use this option unless your Canna libraries are somewhere strange. Canna run time support is currently bundled with the `mule-base' package so there is nothing additional to install in order to use it. The `--with-wnn' and `--with-wnn6' options are for compiling with the Wnn multi-language input method. `--with-wnn' is for compiling with Wnn-4.2, the Free version of WNN. `--with-wnn6' is for compiling against WNN6, the commercial version of WNN available from OMRON Corporation. This is stable code and fairly well tested. In order to build with this option, you will need to have the `egg-its' lisp package already installed. Please note that it is safe to build with as many of the options `--with-xim', `--with-canna' and `--with-wnn' as your system supports. MAIL LOCKING ============ For most platforms, configure or the src/s file have the preferred method for locking mail spool files preconfigured. Otherwise you must find out for youself. Do not choose a locking protocol "on the objective merits." XEmacs must use the same method as other mail utilities on your system, or you will lose mail. Presently, XEmacs supports lockf, flock, and dot locking. Specify the locking method via the --mail-locking=METHOD option to configure. Valid values for METHOD are --mail-locking are `lockf', `flock', and `dot'. RUNNING CONFIGURE ================= `configure' doesn't do any compilation or installation itself. It just creates the files that influence those things: `./src/config.h', and all the Makefile's in the build tree. When it is done, `configure' prints a description of what it did and creates a shell script `config.status' which, when run, recreates the same configuration. If `configure' exits with an error after disturbing the status quo, it removes `config.status'. AUXILIARY PATHS =============== Look at `./lisp/paths.el'; if some of those values are not right for your system, set up the file `./lisp/site-init.el' with XEmacs Lisp code to override them; it is not a good idea to edit paths.el itself. YOU MUST USE THE LISP FUNCTION `setq' TO ASSIGN VALUES, rather than `defvar', as used by `./lisp/paths.el'. For example, (setq news-inews-program "/usr/bin/inews") is how you would override the default value of the variable news-inews-program (which is "/usr/local/inews"). Before you override a variable this way, *look at the value* that the variable gets by default! Make sure you know what kind of value the variable should have. If you don't pay attention to what you are doing, you'll make a mistake. Things may malfunction if the variable `directory-abbrev-alist' is not set up to translate "temporary" automounter mount points into the canonical form. XEmacs tries to detect how your automounter is configured. If you have an unusual automounter configuration that XEmacs cannot detect, you may need to change the value of `directory-abbrev-alist'. SITE-SPECIFIC STARTUP CODE ========================== Put into `./lisp/site-init.el' or `./lisp/site-load.el' any Emacs Lisp code you want XEmacs to load before it is dumped out. Use site-load.el for additional libraries if you arrange for their documentation strings to be in the lib-src/DOC file (see src/Makefile.in.in if you wish to figure out how to do that). For all else, use site-init.el. Note that, on some systems, the code you place in site-init.el must not use expand-file-name or any other function which may look something up in the system's password and user information database. See `./PROBLEMS' for more details on which systems this affects. The `site-*.el' files are nonexistent in the distribution. You do not need to create them if you have nothing to put in them. TERMCAP CONFIGURATION ===================== Refer to the file `./etc/TERMS' for information on fields you may wish to add to various termcap entries. The files `./etc/termcap.ucb' and `./etc/termcap.dat' may already contain appropriately-modified entries. RUNNING MAKE ============ Run `make' in the top directory of the XEmacs distribution to finish building XEmacs in the standard way. The final executable file is named `src/emacs'. You can execute this file "in place" without copying it, if you wish; then it automatically uses the sibling directories ../lisp, ../lib-src, ../info. Or you can "install" the executable and the other XEmacs into their installed locations, with `make install'. By default, XEmacs's files are installed in the following directories: By default, XEmacs installs its files in the following directories: `/usr/local/bin' holds the executable programs users normally run - `xemacs', `etags', `ctags', `b2m', `emacsclient', `ellcc', `gnuclient', `gnudoit', `gnuattach', and `rcs-checkin'. `/usr/local/lib/xemacs-VERSION/lisp' holds the Emacs Lisp libraries; `VERSION' stands for the number of the XEmacs version you are installing, like `18.59' or `19.14'. Since the lisp libraries change from one version of XEmacs to another, including the version number in the path allows you to have several versions of XEmacs installed at the same time; this means that you don't have to make XEmacs unavailable while installing a new version. XEmacs searches for its lisp files in these directories, and then in `/usr/local/lib/xemacs/site-lisp/*'. `/usr/local/lib/xemacs-VERSION/etc' holds the XEmacs tutorial, the `yow' database, and other architecture-independent files XEmacs might need while running. VERSION is as specified for `.../lisp'. `/usr/local/lib/xemacs/lock' contains files indicating who is editing what, so XEmacs can detect editing clashes between users. `/usr/local/lib/xemacs-VERSION/CONFIGURATION-NAME' contains executable programs used by XEmacs that users are not expected to run themselves, and the DOC file. `VERSION' is the number of the XEmacs version you are installing, and `CONFIGURATION-NAME' is the host type of your system. Since these files are specific to the version of XEmacs, operating system, and architecture in use, including the configuration name in the path allows you to have several versions of XEmacs for any mix of machines and operating systems installed at the same time; this is useful for sites at which different kinds of machines share the file system XEmacs is installed on. `/usr/local/lib/xemacs-VERSION/CONFIGURATION-NAME/modules' holds the Emacs dynamically loadable modules. These are special programs typically written in C that can be loaded in much the same way that Lisp packages are. Not all systems support dynamic modules, so do not be alarmed if this directory does not exist or is empty. XEmacs searches for modules in this directory, or any sub-directory of it, and then in `/usr/local/lib/xemacs/site-modules/*'. `/usr/local/lib/xemacs-VERSION/info' holds the on-line documentation for XEmacs, known as "info files". `/usr/local/man/man1' holds the man pages for the programs installed in `/usr/local/bin'. If these directories are not what you want, you can specify where to install XEmacs's libraries and data files or where XEmacs should search for its lisp files by giving values for `make' variables as part of the command. You can change where the build process installs XEmacs and its data files by specifying values for `make' variables as part of the `make' command line. For example, if you type make install bindir=/usr/local/gnubin the `bindir=/usr/local/gnubin' argument indicates that the XEmacs executable files should go in `/usr/local/gnubin', not `/usr/local/bin'. Here is a complete list of the variables you may want to set. `bindir' indicates where to put executable programs that users can run. This defaults to /usr/local/bin. `datadir' indicates where to put the architecture-independent read-only data files that XEmacs refers to while it runs; it defaults to /usr/local/lib. We create the following subdirectories under `datadir': - `xemacs-VERSION/lisp', containing the XEmacs lisp libraries, and - `xemacs-VERSION/etc', containing the XEmacs tutorial and the `yow' database. `VERSION' is the number of the XEmacs version you are installing, like `18.59' or `19.14'. Since these files vary from one version of XEmacs to another, including the version number in the path allows you to have several versions of XEmacs installed at the same time; this means that you don't have to make XEmacs unavailable while installing a new version. `statedir' indicates where to put architecture-independent data files that XEmacs modifies while it runs; it defaults to /usr/local/lib as well. We create the following subdirectories under `statedir': - `xemacs/lock', containing files indicating who is editing what, so XEmacs can detect editing clashes between users. `libdir' indicates where to put architecture-specific data files that XEmacs refers to as it runs; it too defaults to `/usr/local/lib'. We create the following subdirectories under `libdir': - `xemacs-VERSION/CONFIGURATION-NAME', containing executable programs used by XEmacs that users are not expected to run themselves and the DOC file. `VERSION' is the number of the XEmacs version you are installing, and `CONFIGURATION-NAME' is the host type of your system. Since these files are specific to the version of XEmacs, operating system, and architecture in use, including the configuration name in the path allows you to have several versions of XEmacs for any mix of machines and operating systems installed at the same time; this is useful for sites at which different kinds of machines share the file system XEmacs is installed on. `infodir' indicates where to put the info files distributed with XEmacs; it defaults to `/usr/local/lib/xemacs-VERSION/info'. `mandir' indicates where to put the man pages for XEmacs and its utilities (like `etags'); it defaults to `/usr/local/man/man1'. `prefix' doesn't give a path for any specific part of XEmacs; instead, its value is used to determine the defaults for all the architecture-independent path variables - `datadir', `statedir', `infodir', and `mandir'. Its default value is `/usr/local'; the other variables add on `lib' or `man' to it by default. For example, suppose your site generally places GNU software under `/usr/users/software/gnusoft' instead of `/usr/local'. By including `prefix=/usr/users/software/gnusoft' in the arguments to `make', you can instruct the build process to place all of the XEmacs data files in the appropriate directories under that path. `exec_prefix' serves the same purpose as `prefix', but instead determines the default values for the architecture-dependent path variables - `bindir' and `libdir'. The above variables serve analogous purposes in the makefiles for all GNU software; here are some variables specific to XEmacs. `lispdir' indicates where XEmacs installs and expects its lisp libraries. Its default value, based on `datadir' (see above), is `/usr/local/lib/xemacs-VERSION/lisp' (where `VERSION' is as described above). `sitelispdir' indicates where XEmacs should search for lisp libraries specific to your site. XEmacs checks them in order before checking `lispdir'. Its default value, based on `datadir' (see above), is `/usr/local/lib/xemacs/site-lisp'. `etcdir' indicates where XEmacs should install and expect the rest of its architecture-independent data, like the tutorial and yow database. Its default value, based on `datadir' (see above), is `/usr/local/lib/xemacs-VERSION/etc' (where `VERSION' is as described above). `lockdir' indicates the directory where XEmacs keeps track of its locking information. Its default value, based on `statedir' (see above), is `/usr/local/lib/xemacs/lock'. `archlibdir' indicates where XEmacs installs and expects the executable files and other architecture-dependent data it uses while running. Its default value, based on `libdir' (see above), is `/usr/local/lib/xemacs-VERSION/CONFIGURATION-NAME' (where VERSION and CONFIGURATION-NAME are as described above). `docdir' indicates where to put Lisp documentation strings that XEmacs refers to as it runs. It defaults to the value of `archlibdir' (see above). `moduledir' indicates where XEmacs installs and expects to find any dynamic modules. Its default value, based on `archlibdir' (see above) is `/usr/local/lib/xemacs-VERSION/CONFIGURATION-NAME/modules' (where VERSION and CONFIGURATION-NAME are as described above). By their very nature, dynamic loadable modules are architecture- dependent, and care should be taken not to set this directory to a system- or architecture-independent directory. Remember that you must specify any variable values you need each time you run `make' in the top directory. If you run `make' once to build xemacs, test it, and then run `make' again to install the files, you must provide the same variable settings each time. To make the settings persist, you can edit them into the `Makefile' in the top directory, but be aware that running the `configure' program erases `Makefile' and rebuilds it from `Makefile.in'. The top-level Makefile stores the variable settings it used in the Makefiles for the subdirectories, so you don't have to specify them when running make in the subdirectories. Using GNU Make allows for simultaneous builds with and without the --srcdir option. STRIPPING BINARIES ================== This saves nothing but a small (by modern standards) amount of disk space; the symbol table is not loaded into memory at execution time. If you do encounter a crash or other serious bug, the first thing the developers will do is ask you to build an XEmacs with a full symbol table, anyway. Don't strip the XEmacs binary. MAIL-LOCKING POST-INSTALLATION ============================== If your system uses dot-locking to interlock access to mailer inbox files, then you might need to make the movemail program setuid or setgid to enable it to write the lock files. We believe this is safe. The setuid/setgid bits need not be set on any other XEmacs-related executables. CLEANING UP ========== You are done with the hard part! You can remove executables and object files from the build directory by typing `make clean'. To also remove the files that `configure' created (so you can compile XEmacs for a different configuration), type `make distclean'. READ README.packages ==================== Do it! PROBLEMS ======== The most likely problem is that you forgot to read and follow the directions in README.packages. You can not have a working XEmacs without downloading some additional packages. See the file PROBLEMS in this directory for a list of various problems sometimes encountered, and what to do about them. PROBLEMS is also the place where platform-specific build notes can be found. xemacs-21.4.22/Makefile.in.in0000644000175000017500000006176410177316767013747 0ustar acsacs## DIST: This is the distribution Makefile for XEmacs. configure can ## DIST: make most of the changes to this file you might want, so try ## DIST: that first. ## This file is part of XEmacs. ## XEmacs is free software; you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by the ## Free Software Foundation; either version 2, or (at your option) any ## later version. ## XEmacs is distributed in the hope that it will be useful, but WITHOUT ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## for more details. ## You should have received a copy of the GNU General Public License ## along with XEmacs; see the file COPYING. If not, write to ## the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ## Boston, MA 02111-1307, USA. ## make all to compile and build XEmacs. ## make install to build and install it. ## make install-only to install after a previous complete build ## make TAGS to update tags tables. ## make clean or make mostlyclean ## Delete all files from the current directory that are normally ## created by building the program. Don't delete the files that ## record the configuration. Also preserve files that could be made ## by building, but normally aren't because the distribution comes ## with them. ## Delete `.dvi' files here if they are not part of the distribution. ## make distclean ## Delete all files from the current directory that are created by ## configuring or building the program. If you have unpacked the ## source and built the program without creating any other files, ## `make distclean' should leave only the files that were in the ## distribution. ## make realclean ## Delete everything from the current directory that can be ## reconstructed with this Makefile. This typically includes ## everything deleted by distclean, plus more: C source files ## produced by Bison, tags tables, info files, and so on. ## make extraclean ## Still more severe - delete backup and autosave files, too. #define NOT_C_CODE #include "src/config.h" #ifdef USE_GNU_MAKE RECURSIVE_MAKE_ARGS= #else @SET_MAKE@ RECURSIVE_MAKE_ARGS=@RECURSIVE_MAKE_ARGS@ #endif SHELL = /bin/sh LANG = C LC_ALL = C RM = rm -f MAKEPATH=./lib-src/make-path pwd = /bin/pwd TAR = tar ## ==================== Things `configure' Might Edit ==================== CC=@CC@ CPP=@CPP@ LN_S=@LN_S@ CFLAGS=@CFLAGS@ CPPFLAGS=@CPPFLAGS@ LDFLAGS=@LDFLAGS@ ## These help us choose version- and architecture-specific directories ## to install files in. ## This should be the number of the XEmacs version we're building, ## like `19.12' or `19.13'. version=@version@ ## This should be the name of the configuration we're building XEmacs ## for, like `mips-dec-ultrix' or `sparc-sun-sunos'. configuration=@configuration@ ## This will be the name of the generated binary and is set automatically ## by configure. PROGNAME=@PROGNAME@ ## ==================== Where To Install Things ==================== ## The default location for installation. Everything is placed in ## subdirectories of this directory. The default values for many of ## the variables below are expressed in terms of this one, so you may ## not need to change them. This defaults to /usr/local. prefix=@prefix@ ## Variable data (as per each program update) goes here ## The default is ${PROGNAME} inststaticdir=@inststaticdir@ ## Static data (constant across program updates) goes here ## The default is ${PROGNAME}-${version} instvardir=@instvardir@ ## Like `prefix', but used for architecture-specific files. exec_prefix=@exec_prefix@ ## Where to install XEmacs and other binaries that people will want to ## run directly (like etags). bindir=@bindir@ ## Where to install architecture-independent data files. ## ${lispdir} and ${etcdir} are subdirectories of this. datadir=@datadir@ ## Where to find XEmacs packages. pkgdir=@pkgdir@ ## Where to install and expect the files that XEmacs modifies as it runs. ## These files are all architecture-independent. Right now, the ## only such data is the locking directory; statedir=@statedir@ ## Where to install and expect executable files to be run by XEmacs ## rather than directly by users, and other architecture-dependent data ## ${archlibdir} is a subdirectory of this. libdir=@libdir@ ## Where to install XEmacs's man pages, and what extension they should have. mandir=@mandir@ manext=.1 ## Where to install and expect the info files describing XEmacs. In the ## past, this defaulted to a subdirectory of ${prefix}/lib/xemacs, but ## since there are now many packages documented with the texinfo ## system, it is inappropriate to imply that it is part of XEmacs. infodir=@infodir@ ## Document me. ## See callproc.c for code which references this. infopath=@infopath@ ## Where to find the source code. The source code for XEmacs's C kernel is ## expected to be in ${srcdir}/src, and the source code for XEmacs's ## utility programs is expected to be in ${srcdir}/lib-src. This is ## set by the configure script's `--srcdir' option. srcdir=@srcdir@ ## Where the build is done. blddir=@blddir@ ## ==================== XEmacs-specific directories ==================== ## These variables hold the values XEmacs will actually use. They are ## based on the values of the standard Make variables above. ## Where to install the lisp files distributed with ## XEmacs. This includes the XEmacs version, so that the ## lisp files for different versions of XEmacs will install ## themselves in separate directories. lispdir=@lispdir@ ## Where to install the module files distributed with ## XEmacs. This includes the XEmacs version, so that the ## module files for different versions of XEmacs will install ## themselves in separate directories. moduledir=@moduledir@ ## Directory XEmacs should search for lisp files specific ## to this site (i.e. customizations), before consulting ## ${lispdir}. sitelispdir=@sitelispdir@ ## Directory XEmacs should search for module files specific ## to this site (i.e. customizations), before consulting ## ${moduledir}. sitemoduledir=@sitemoduledir@ ## Where XEmacs will search for its lisp files while ## building. This is only used during the process of ## compiling XEmacs, to help XEmacs find its lisp files ## before they've been installed in their final location. ## It's usually identical to lispdir, except that the ## entry for the directory containing the installed lisp ## files has been replaced with ../lisp. This should be a ## colon-separated list of directories. buildlispdir=${srcdir}/lisp ## Where to install the other architecture-independent ## data files distributed with XEmacs (like the tutorial, ## the cookie recipes and the Zippy database). This path ## usually contains the XEmacs version number, so the data ## files for multiple versions of XEmacs may be installed ## at once. etcdir=@etcdir@ ## Where to put the DOC file. docdir=@docdir@ ## Where to put executables to be run by XEmacs rather than ## the user. This path usually includes the XEmacs version ## and configuration name, so that multiple configurations ## for multiple versions of XEmacs may be installed at ## once. archlibdir=@archlibdir@ ## ==================== Utility Programs for the Build ==================== ## Allow the user to specify the install program. INSTALL = @install_pp@ @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ ## ============================= Targets ============================== ## Subdirectories to make recursively. `lisp' is not included ## because the compiled lisp files are part of the distribution ## and you cannot remake them without installing XEmacs first. MAKE_SUBDIR = @MAKE_SUBDIR@ ## Subdirectories that can be made recursively. SUBDIR = ${MAKE_SUBDIR} man ## Subdirectories that must be cleaned on distclean SUBDIR_DISTCLEAN = ${SUBDIR} modules/sample modules/ldap modules/zlib modules/base64 ## The makefiles of the directories in ${MAKE_SUBDIR}. SUBDIR_MAKEFILES = @SUBDIR_MAKEFILES@ ## Subdirectories to `make install-arch-dep' recursively INSTALL_ARCH_DEP_SUBDIR = @INSTALL_ARCH_DEP_SUBDIR@ ## Subdirectories to install, and where they'll go. ## lib-src's makefile knows how to install it, so we don't do that here. ## When installing the info files, we need to do special things to ## avoid nuking an existing dir file, so we don't do that here; ## instead, we have written out explicit code in the `install' targets. COPYDIR = ${srcdir}/etc ${srcdir}/lisp COPYDESTS = ${etcdir} ${lispdir} GENERATED_HEADERS = src/paths.h src/Emacs.ad.h src/config.h lwlib/config.h src/sheap-adjust.h GENERATED_LISP = lisp/finder-inf.el all: ${PROGNAME} all-elc info ${PROGNAME}: ${GENERATED_HEADERS} ${MAKE_SUBDIR} ${GENERATED_LISP} ## For performance and consistency, no built-in rules .SUFFIXES: .NO_PARALLEL: ${GENERATED_HEADERS} ${MAKE_SUBDIR} dump-elcs .PHONY: ${SUBDIR} all beta all-elc all-elcs dump-elc dump-elcs autoloads finder ## Convenience target for XEmacs beta testers beta: clean all-elc finder info ## Convenience target for XEmacs maintainers ## This would run `make-xemacsdist' if I were really confident that everything ## was turnkey. dist: all-elc info ## Convenience target for XEmacs maintainers ## Updates some rarely generated files: ## - configure from configure.in ## - config.values.in from configure ## - src/depend from src/*.[ch] .PHONY: config configure depend config: configure depend configure: ${srcdir}/configure ${srcdir}/lib-src/config.values.in ${srcdir}/configure : ${srcdir}/configure.in cd ${srcdir} && autoconf ${srcdir}/lib-src/config.values.in : ${srcdir}/configure cd ${srcdir} && $(SHELL) lib-src/config.values.sh depend ${srcdir}/src/depend: cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) depend ## Build XEmacs and recompile out-of-date and missing .elc files along ## the way. all-elc all-elcs: ${PROGNAME} autoloads dump-elcs ${blddir}/src/${PROGNAME} -batch -vanilla \ -l update-elc-2.el -f batch-update-elc-2 lisp ## Sub-target for all-elc. dump-elc dump-elcs: ${PROGNAME} ${GENERATED_HEADERS} FRC.dump-elcs cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) dump-elcs autoloads: lib-src lwlib src lisp/auto-autoloads.el lisp/custom-load.el FRC.lisp.auto.autoloads.el: lisp/auto-autoloads.el: ${PROGNAME} FRC.lisp.auto.autoloads.el $(RM) lisp/auto-autoloads.el ${blddir}/src/${PROGNAME} -batch -no-autoloads \ -l autoload -f batch-update-directory lisp ${blddir}/src/${PROGNAME} -batch -vanilla \ -f batch-byte-compile lisp/auto-autoloads.el @$(RM) lisp/auto-autoloads.el~ FRC.lisp.custom.load.el: lisp/custom-load.el: ${PROGNAME} FRC.lisp.custom.load.el lisp/auto-autoloads.el ${blddir}/src/${PROGNAME} -batch -vanilla -l cus-dep \ -f Custom-make-dependencies lisp finder: src @echo "Building finder database ..." $(RM) lisp/finder-inf.el @(cd ./lisp; \ ${blddir}/src/${PROGNAME} -batch -vanilla \ -eval '(setq finder-compile-keywords-quiet t)' \ -l finder -f finder-compile-keywords ) @echo "Building finder database ...(done)" lisp/finder-inf.el: src @echo "Building finder database ..." @(cd ./lisp; \ ${blddir}/src/${PROGNAME} -batch -vanilla \ -eval '(setq finder-compile-keywords-quiet t)' \ -l finder -f finder-compile-keywords ) @echo "Building finder database ...(done)" ## We have to force the building of Emacs.ad.h as well in order to get it ## updated correctly when VPATH is being used. Since we use move-if-change, ## it will only actually change if the user modified ${etcdir}/Emacs.ad. src/Emacs.ad.h: ${srcdir}/etc/Emacs.ad @echo "Producing \`src/Emacs.ad.h' from \`etc/Emacs.ad'." @$(RM) src/Emacs.ad.h @(echo "/* Do not edit this file!" ; \ echo " Automatically generated from ${srcdir}/etc/Emacs.ad" ; \ echo " */" ; \ $(SHELL) ${srcdir}/lib-src/ad2c ${srcdir}/etc/Emacs.ad ) > \ src/Emacs.ad.h src/sheap-adjust.h: @echo "Resetting \`src/sheap-adjust.h'."; \ (echo "/* Do not edit this file!" ; \ echo " Automatically generated by XEmacs */" ; \ echo "#define SHEAP_ADJUSTMENT 0") > $@ src: @SRC_SUBDIR_DEPS@ FRC.src pkg-src/tree-x: pkg-src/FRC.tree-x lib-src: FRC.lib-src lwlib: FRC.lwlib dynodump: FRC.dynodump FRC.src FRC.lib-src FRC.lwlib FRC.dynodump pkg-src/FRC.tree-x: FRC.lisp.finder-inf.el: ${SUBDIR}: ${SUBDIR_MAKEFILES} ${GENERATED_HEADERS} FRC cd ./$@ && $(MAKE) $(RECURSIVE_MAKE_ARGS) all ## Building modules depends on ellcc, found in lib-src. modules/sample modules/ldap modules/zlib modules/base64: lib-src Makefile: ${srcdir}/Makefile.in.in config.status ./config.status src/Makefile: ${srcdir}/src/Makefile.in.in ${srcdir}/src/depend config.status ./config.status lib-src/Makefile: ${srcdir}/lib-src/Makefile.in.in config.status ./config.status lwlib/Makefile: ${srcdir}/lwlib/Makefile.in.in config.status ./config.status pkg-src/tree-x/Makefile: ${srcdir}/pkg-src/tree-x/Makefile.in.in config.status ./config.status src/config.h: ${srcdir}/src/config.h.in ./config.status && touch $@ src/paths.h: ${srcdir}/src/paths.h.in ./config.status && touch $@ lwlib/config.h: ${srcdir}/lwlib/config.h.in ./config.status && touch $@ ## ==================== Installation ==================== ## If we let lib-src do its own installation, that means we ## don't have to duplicate the list of utilities to install in ## this Makefile as well. ## On AIX, use tar xBf. ## On Xenix, use tar xpf. .PHONY: install-only install install-arch-dep install-arch-indep gzip.el mkdir .PHONY: check-features ## We delete each directory in ${COPYDESTS} before we copy into it; ## that way, we can reinstall over directories that have been put in ## place with their files read-only (perhaps because they are checked ## into RCS). In order to make this safe, we make sure that the ## source exists and is distinct from the destination. ## FSF doesn't depend on `all', but rather on ${MAKE_SUBDIR}, so that ## they "won't ever modify src/paths.h". But that means you can't do ## 'make install' right off the bat because src/paths.h won't exist. ## And, in XEmacs case, src/Emacs.ad.h won't exist either. I also ## don't see the point in avoiding modifying paths.h. It creates an ## inconsistency in the build process. So we go ahead and depend on ## all. --cet check-features: all ${blddir}/src/${PROGNAME} -batch -l check-features.el install-only: ${MAKE_SUBDIR} check-features install-arch-dep install-arch-indep install: all check-features install-arch-dep install-arch-indep install-arch-dep: mkdir for subdir in ${INSTALL_ARCH_DEP_SUBDIR}; do \ (cd ./$${subdir} && $(MAKE) $(RECURSIVE_MAKE_ARGS) install prefix=${prefix} \ exec_prefix=${exec_prefix} bindir=${bindir} libdir=${libdir} \ archlibdir=${archlibdir}) ; done if test "`(cd ${archlibdir} && $(pwd))`" != \ "`(cd ./lib-src && $(pwd))`"; then \ if test -f ../Installation; then \ ${INSTALL_DATA} ../Installation ${archlibdir}/Installation; \ fi; \ ${INSTALL_DATA} lib-src/config.values ${docdir}/config.values; \ ${INSTALL_DATA} lib-src/DOC ${docdir}/DOC; \ for subdir in `find ${archlibdir} -type d ! -name RCS ! -name SCCS ! -name CVS -print` ; \ do (cd $${subdir} && $(RM) -r RCS CVS SCCS \#* *~) ; done ; \ else true; fi #ifdef PDUMP ${INSTALL_DATA} src/${PROGNAME}.dmp ${bindir}/${PROGNAME}-${version}-`src/${PROGNAME} -sd`.dmp #endif #ifdef WIN32_NATIVE ${INSTALL_PROGRAM} src/${PROGNAME} ${bindir}/${PROGNAME} -chmod 0755 ${bindir}/${PROGNAME} #else # ifdef CYGWIN ${INSTALL_PROGRAM} src/${PROGNAME} ${bindir}/${PROGNAME}-${version}.exe -chmod 0755 ${bindir}/${PROGNAME}-${version}.exe cd ${bindir} && $(RM) ./${PROGNAME} && ${LN_S} ${PROGNAME}-${version}.exe ./${PROGNAME} # else ${INSTALL_PROGRAM} src/${PROGNAME} ${bindir}/${PROGNAME}-${version} -chmod 0755 ${bindir}/${PROGNAME}-${version} cd ${bindir} && $(RM) ./${PROGNAME} && ${LN_S} ${PROGNAME}-${version} ./${PROGNAME} # endif /* CYGWIN */ #endif /* WIN32_NATIVE */ if test "${prefix}" != "${exec_prefix}"; then \ $(MAKEPATH) ${exec_prefix}/lib/${instvardir}; \ for dir in \ lib/${inststaticdir} \ lib/${instvardir}/etc \ lib/${instvardir}/info \ lib/${instvardir}/lisp; do \ if test ! -d ${exec_prefix}/$${dir}; then \ $(LN_S) ${prefix}/$${dir} ${exec_prefix}/$${dir}; fi; \ done; \ fi install-arch-indep: mkdir info -@set ${COPYDESTS} ; \ for dir in ${COPYDIR} ; do \ if test "`(cd $$1 && $(pwd))`" != \ "`(cd $${dir} && $(pwd))`"; then \ : do nothing - echo "rm -rf $$1" ; \ fi ; \ shift ; \ done -set ${COPYDESTS} ; \ for dir in ${COPYDESTS} ; do \ if test ! -d $${dir} ; then mkdir $${dir} ; fi ; \ done ; \ for dir in ${COPYDIR} ; do \ dest=$$1 ; shift ; \ test -d $${dir} \ -a "`(cd $${dir} && $(pwd))`" != \ "`(cd $${dest} && $(pwd))`" \ && (echo "Copying $${dir}..." ; \ (cd $${dir} && $(TAR) -cf - . ) | \ (cd $${dest} && umask 022 && $(TAR) -xf - );\ chmod 0755 $${dest}; \ for subdir in `find $${dest} -type d ! -name RCS ! -name SCCS ! -name CVS -print` ; do \ (cd $${subdir} && $(RM) -r RCS CVS SCCS \#* *~) ; \ done) ; \ done if test "`(cd ${srcdir}/info && $(pwd))`" != \ "`(cd ${infodir} && $(pwd))`" && cd ${srcdir}/info; then \ if test ! -f ${infodir}/dir -a -f dir ; then \ ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir ; \ fi ; \ for file in *.info* ; do \ ${INSTALL_DATA} $${file} ${infodir}/$${file} ; \ chmod 0644 ${infodir}/$${file}; \ done ; \ fi cd ${srcdir}/etc && \ for page in xemacs etags ctags gnuserv gnuclient gnuattach gnudoit; do \ ${INSTALL_DATA} ${srcdir}/etc/$${page}.1 ${mandir}/$${page}${manext} ; \ chmod 0644 ${mandir}/$${page}${manext} ; \ done @echo "If you would like to save approximately 2M of disk space, do" @echo "make gzip-el" @echo "or you may run " @echo ${srcdir}/lib-src/gzip-el.sh lispdir " from the command line." @echo "Where lispdir is where the lisp files were installed, i.e.," @echo "${lispdir}" gzip-el: $(SHELL) ${srcdir}/lib-src/gzip-el.sh ${lispdir} ## Build all the directories to install XEmacs in. ## Since we may be creating several layers of directories, ## (e.g. /usr/local/lib/${PROGNAME}-20.5/sparc-sun-solaris2.6), we use ## make-path instead of mkdir. Not all mkdirs have the `-p' flag. mkdir: FRC.mkdir ${MAKEPATH} ${COPYDESTS} ${docdir} ${infodir} ${archlibdir} \ ${mandir} ${bindir} ${datadir} ${libdir} ${pkgdir} \ ${sitelispdir} ${moduledir} ${sitemoduledir} ## Delete all the installed files that the `install' target would ## create (but not the noninstalled files such as `make all' would ## create). #### Don't delete the lisp and etc directories if they're in the source tree. #### This target has not been updated in sometime and until it is it #### would be extremely dangerous for anyone to use it. ##uninstall: ## (cd ./lib-src; \ ## $(MAKE) $(RECURSIVE_MAKE_ARGS) uninstall \ ## prefix=${prefix} exec_prefix=${exec_prefix} \ ## bindir=${bindir} libdir=${libdir} archlibdir=${archlibdir}) ## for dir in ${lispdir} ${etcdir} ; do \ ## case `(cd $${dir} ; $(pwd))` in \ ## `(cd ${srcdir} ; $(pwd))`* ) ;; \ ## * ) $(RM) $${dir} ;; \ ## esac ; \ ## case $${dir} in \ ## ${datadir}/${PROGNAME}/${version}/* ) \ ## $(RM) -r ${datadir}/${PROGNAME}/${version} \ ## ;; \ ## esac ; \ ## done ## cd ${infodir} && $(RM) cl* ${PROGNAME}* forms* info* vip* ## cd ${mandir} && $(RM) xemacs.1 etags.1 ctags.1 gnuserv.1 ## cd ${bindir} && $(RM) ${PROGNAME}-${version} ${PROGNAME} ## Some makes seem to remember that they've built something called FRC, ## so you can only use a given FRC once per makefile. FRC FRC.src.paths.h FRC.mkdir FRC.dump-elcs FRC.info: FRC.mostlyclean FRC.clean FRC.distclean FRC.realclean FRC.tags: ## ==================== Cleaning up and miscellanea ==================== .PHONY: mostlyclean clean distclean realclean extraclean ## `mostlyclean' ## Like `clean', but may refrain from deleting a few files that people ## normally don't want to recompile. For example, the `mostlyclean' ## target for GCC does not delete `libgcc.a', because recompiling it ## is rarely necessary and takes a lot of time. mostlyclean: FRC.mostlyclean for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done ## `clean' ## Delete all files from the current directory that are normally ## created by building the program. Don't delete the files that ## record the configuration. Also preserve files that could be made ## by building, but normally aren't because the distribution comes ## with them. ## Delete `.dvi' files here if they are not part of the distribution. clean: FRC.clean for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done $(RM) core ## `distclean' ## Delete all files from the current directory that are created by ## configuring or building the program. If you have unpacked the ## source and built the program without creating any other files, ## `make distclean' should leave only the files that were in the ## distribution. top_distclean=\ $(RM) config.status config.log confdefs.h config-tmp-* build-install Installation ; \ $(RM) core .sbinit lock/* GNUmakefile Makefile Makefile.in ; \ $(RM) lisp/finder-inf.el* Installation.el Installation.elc ; \ $(RM) -r site-packages xemacs-packages mule-packages site-lisp distclean: FRC.distclean for d in $(SUBDIR_DISTCLEAN); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done -${top_distclean} ## `realclean' ## Delete everything from the current directory that can be ## reconstructed with this Makefile. This typically includes ## everything deleted by distclean, plus more: C source files ## produced by Bison, tags tables, info files, and so on. ## One exception, however: `make realclean' should not delete ## `configure' even if `configure' can be remade using a rule in the ## Makefile. More generally, `make realclean' should not delete ## anything that needs to exist in order to run `configure' and then ## begin to build the program. realclean: FRC.realclean for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done -${top_distclean} $(RM) TAGS ## This doesn't actually appear in the coding standards, but Karl ## says GCC supports it, and that's where the configuration part of ## the coding standards seem to come from. It's like distclean, but ## it deletes backup and autosave files too. extraclean: for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done $(RM) *~ \#* -${top_distclean} ## Unlocking and relocking. The idea of these productions is to reduce ## hassles when installing an incremental tar of XEmacs. Do `make unlock' ## before unlocking the file to take the write locks off all sources so ## that tar xvof will overwrite them without fuss. Then do `make relock' ## afterward so that VC mode will know which files should be checked in ## if you want to mung them. ## Note: it's no disaster if these productions miss a file or two; tar ## and VC will swiftly let you know if this happens, and it is easily ## corrected. SOURCES = ChangeLog GETTING.GNU.SOFTWARE INSTALL Makefile.in PROBLEMS \ README build-install.in configure make-dist move-if-change .PHONY: unlock relock TAGS tags check dist info dvi mcs unlock: chmod u+w $(SOURCES) cpp/* -cd ./elisp && chmod u+w Makefile README *.texi for d in src etc lib-src lisp; do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done cd ./lisp/term && chmod u+w README *.el cd ./man && chmod u+w *texi* ChangeLog split-man cd ./lwlib && chmod u+w *.[ch] Makefile.in.in relock: chmod u-w $(SOURCES) cpp/* -cd ./elisp && chmod u-w Makefile README *.texi for d in src etc lib-src lisp; do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done cd ./lisp/term && chmod u+w README *.el cd ./man && chmod u+w *texi* ChangeLog split-man cd ./lwlib && chmod u+w *.[ch] Makefile.in.in PRUNE_VC = -name SCCS -prune -o -name RCS -prune -o -name CVS -prune -o tagslisp = lisp TAGS tags: FRC.tags @echo "If you don't have a copy of etags around, then do 'make lib-src' first." $(RM) ${srcdir}/TAGS @PATH=`$(pwd)`/lib-src:$$PATH HOME=/-=-; export PATH HOME; \ echo "Using etags from `which etags`." PATH=`$(pwd)`/lib-src:$$PATH ; export PATH; cd ${srcdir} && \ find src lwlib lib-src ${PRUNE_VC} -name '*.[ch]' -print | \ xargs etags -a -r '/[ ]*DEF\(VAR\|INE\)_[A-Z_]+[ ]*([ ]*"\([^"]+\)"/\2/'; \ find ${tagslisp} ${PRUNE_VC} -name '*.el' ! -name 'auto-autoloads.el' -print | \ xargs etags -a -l none -r "/^(def\\(var\\|un\\|alias\\|const\\|macro\\|subst\\|struct\\|face\\|group\\|custom\\|ine-\\(function\\|compiler-macro\\|[a-z-]+alias\\)\\)[ ]+'?\\([^ ]+\\)/\\3/" check: cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@ info: FRC.info cd ${srcdir}/man && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@ dvi: cd ${srcdir}/man && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@ ## Fix up version information in executables (Solaris-only) mcs: date=`LANG=C LC_ALL=C date -u '+%e %b %Y'`; \ ident="@(#)RELEASE VERSION XEmacs ${version} $${date}"; \ for f in `file lib-src/* src/${PROGNAME} | grep ELF | sed -e 's/:.*//'`; do \ mcs -da "$${ident} `echo $${f} | sed 's/.*\///'`" $${f}; \ done xemacs-21.4.22/PROBLEMS0000644000175000017500000026702410451402751012420 0ustar acsacs -*- mode:outline -*- This file describes various problems that have been encountered in compiling, installing and running XEmacs. It has been updated for XEmacs 21.5. This file is rather large, but we have tried to sort the entries by their respective relevance for XEmacs, but may have not succeeded completely in that task. The file is divided into four parts: - Problems with building XEmacs - Problems with running XEmacs - Compatibility problems - Mule issues Use `C-c C-f' to move to the next equal level of outline, and `C-c C-b' to move to previous equal level. `C-h m' will give more info about the Outline mode. Also, Try finding the things you need using one of the search commands XEmacs provides (e.g. `C-s'). 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. Note that most of the problems described here manifest at RUN time, even those described as BUILD problems. It is quite unusual for a released XEmacs to fail to build. So a "build problem" requires you to tweak the build environment, then rebuild XEmacs. A "runtime problem" is one that can be fixed by proper configuration of the existing build. Compatibility problems and Mule issues are generally runtime problems, but are treated separately for convenience. * Problems with building XEmacs =============================== ** General Much general information is in INSTALL. If it's covered in INSTALL, we don't repeat it here. *** X11/bitmaps/gray (or other X11-related file) not found. The X11R6 distribution was monolithic, but the X11R7 distribution is much more modular. Many OS distributions omit these bitmaps (assuming nobody uses them, evidently). Your OS distribution should have a developer's package containing these files, probably with a name containing the string "bitmap". Known package names (you may need to add an extension such as .deb or .rpm) include x11/xbitmaps (Ubuntu) and xorg-x11-xbitmaps (Fedora Core 5). *** How do I configure to get the buffer tabs/progress bars? These features depend on support for "native widgets". Use the --with-widgets option to configure. Configuration of widgets is automatic for "modern" toolkits (MS Windows, GTK, and Motif), but if you are using Xt and the Athena widgets, you will probably want to specify a "3d" widget set. See configure --usage, and don't forget to install the corresponding development libraries. *** I know I have libfoo installed, but configure doesn't find it. Typical of Linux systems with package managers. To link with a shared library, you only need the shared library. To compile objects that link with it, you need the headers---and distros don't provide them with the libraries. You need the additional "development" package, too. *** When using gcc, you get the error message "undefined symbol __fixunsdfsi". When using gcc, you get the error message "undefined symbol __main". This means that you need to link with the gcc library. It may be called "gcc-gnulib" or "libgcc.a"; figure out where it is, and define LIB_GCC in config.h to point to it. It may also work to use the GCC version of `ld' instead of the standard one. *** Excessive optimization with pgcc can break XEmacs It has been reported on some systems that compiling with -O6 can lead to XEmacs failures. The workaround is to use a lower optimization level. -O2 and -O4 have been tested extensively. All of this depends heavily on the version of pgcc and the version of libc. Snapshots near the release of pgcc-1.0 have been tested extensively and no sign of breakage has been seen on systems using glibc-2. *** src/Makefile and lib-src/Makefile are truncated--most of the file missing. This can happen if configure uses GNU sed version 2.03. That version had a bug. GNU sed version 2.05 works properly. *** When compiling with X11, you get "undefined symbol _XtStrings". This means that you are trying to link emacs against the X11r4 version of libXt.a, but you have compiled either Emacs or the code in the lwlib subdirectory with the X11r5 header files. That doesn't work. Remember, you can't compile lwlib for r4 and emacs for r5, or vice versa. They must be in sync. *** test-distrib says that the distribution has been clobbered or, temacs prints "Command key out of range 0-127" or, temacs runs and dumps xemacs, but xemacs totally fails to work. or, temacs gets errors dumping xemacs This can be because the .elc files have been garbled. Do not be fooled by the fact that most of a .elc file is text: these are binary files and can contain all 256 byte values. In particular `shar' cannot be used for transmitting GNU Emacs. It typically truncates "lines". (this does not apply to GNU shar, which uses uuencode to encode binary files.) If you have a copy of Emacs that has been damaged in its nonprinting characters, you can fix them by running: make all-elc This will rebuild all the needed .elc files. ** Intel Architecture General *** Don't use -O2 or -O3 with Cygwin 1.0, CodeFusion-99070 or gcc 2.7.2 on x86 without also using `-fno-strength-reduce'. gcc will generate incorrect code otherwise. This bug is present in at least 2.6.x and 2.7.[0-2]. This bug has been fixed in GCC 2.7.2.1 and later. This bug is O/S independent, but is limited to x86 architectures. This problem is known to be fixed in egcs (or pgcc) 1.0 or later. Unfortunately, later releases of Cygnus-released compilers (not the Net-released ones) have a bug with the same `problem signature'. If you're lucky, you'll get an error while compiling that looks like: event-stream.c:3189: internal error--unrecognizable insn: (insn 256 14 15 (set (reg/v:SI 24) (minus:SI (reg/v:SI 25) (const_int 2))) -1 (insn_list 11 (nil)) (nil)) 0 0 [main] If you're unlucky, your code will simply execute incorrectly. *** Don't use -O2 with gcc 2.7.2 under Intel architectures without also using `-fno-caller-saves'. gcc will generate incorrect code otherwise. This bug is still present in gcc 2.7.2.3. There have been no reports to indicate the bug is present in egcs 1.0 (or pgcc 1.0) or later. This bug is O/S independent, but limited to x86 architectures. This problem is known to be fixed in egcs (or pgcc) 1.0 or later. *** `compress' and `uncompress' not found and XFree86 XFree86 installs a very old version of libz.a by default ahead of where more modern version of libz might be installed. This will cause problems when attempting to link against libMagick. The fix is to remove the old libz.a in the X11 binary directory. ** Motif Motif is the X11 version of the Gnus torture test: if there's a way to crash, Motif will find it. With the open source release of Motif, it seems like a good idea to collect all Motif-related issues in one place. You should also look in your OS's section, as it may not be Motif's fault. *** XEmacs visibly repaints itty-bitty rectangles very slowly. This should only be visible on a slow X connection (ISDN, maybe T1). At least some versions of Motif apparently do not implement XtExposeCompressMaximal properly, so it is disabled. If you wish to experiment, you can remove the #ifdef LWLIB_NEEDS_MOTIF at line 238 (or so) of src/EmacsFrame.c, leaving only the line /* compress_exposure */ XtExposeCompressMaximal | XtExposeNoRegion, and recompile. This enables exposure compression, giving a 10:1 or better speedup for some users. However, on some Motif platforms (Red Hat Linux 9.0 and Solaris 2.8, at least), this causes XEmacs to hang while displaying the progress bar (eg, in font-lock). A workaround for that problem is to setq `progress-feedback-use-echo-area' to `t'. *** XEmacs crashes on exit (#1). The backtrace is something like: (gdb) where #0 0xfeb9a480 in _libc_kill () from /usr/lib/libc.so.1 #1 0x000b0388 in fatal_error_signal () #2 #3 YowIter (ht=0xb, id=0x0, v=0x74682074, client=0x47e3c0) at ImageCache.c:1159 #4 0xff26cc5c in _LTHashTableForEachItem (ht=0x4725e8, iter=0xff26dda0 , ClientData=0x47e3c0) at Hash.c:671 #5 0xff2a4664 in destroy (w=0x496550) at Screen.c:352 #6 0xfef92118 in Phase2Destroy () from /usr/openwin/lib/libXt.so.4 #7 0xfef91940 in Recursive () from /usr/openwin/lib/libXt.so.4 #8 0xfef91e44 in XtPhase2Destroy () from /usr/openwin/lib/libXt.so.4 #9 0xfef91ae8 in _XtDoPhase2Destroy () from /usr/openwin/lib/libXt.so.4 #10 0xfef918cc in XtDestroyWidget () from /usr/openwin/lib/libXt.so.4 #11 0xfef91438 in CloseDisplay () from /usr/openwin/lib/libXt.so.4 #12 0xfef91394 in XtCloseDisplay () from /usr/openwin/lib/libXt.so.4 #13 0x0025b8b0 in x_delete_device () #14 0x000940b0 in delete_device_internal () #15 0x000806a0 in delete_console_internal () This is known to happen with Lesstif version 0.93.36. Similar backtraces have also been observed on HP/UX and Solaris. There is a patch for Lesstif. (This is not a solution; it just stops the crash. It may or may not be harmless, but "it works for the author".) Note that this backtrace looks a lot like the one in the next item. However, this one is invulnerable to the Solaris patches mentioned there. Frank McIngvale says: Ok, 0.93.34 works, and I tracked down the crash to a section marked "experimental" in 0.93.36. Patch attached, "works for me". diff -u -r lesstif-0.93.36/lib/Xm/ImageCache.c lesstif-0.93.36-mod/lib/Xm/ImageCache.c --- lesstif-0.93.36/lib/Xm/ImageCache.c 2002-08-05 14:53:24.000000000 -0500 +++ lesstif-0.93.36-mod/lib/Xm/ImageCache.c 2002-11-11 11:13:12.000000000 -0600 @@ -1166,5 +1166,4 @@ DEBUGOUT(_LtDebug0(__FILE__, NULL, "_LtImageCacheScreenDestroy (XmGetPixmapByDepth) %p\n", s)); - (void) _LTHashTableForEachItem(PixmapCache, YowIter, (XtPointer)s); } *** XEmacs crashes on exit (#2) Especially frequent with multiple frames. Crashes that produce C backtraces like this: #0 0xfec9a118 in _libc_kill () from /usr/lib/libc.so.1 #1 0x77f48 in fatal_error_signal (sig=11) at /codes/rpluim/xemacs-21.4/src/emacs.c:539 #2 #3 0xfee929f4 in XFindContext () from /usr/openwin/lib/libX11.so.4 #4 0xfee92930 in XFindContext () from /usr/openwin/lib/libX11.so.4 #5 0xff297e54 in DisplayDestroy () from /usr/dt/lib/libXm.so.4 #6 0xfefbece0 in XtCallCallbackList () from /usr/openwin/lib/libXt.so.4 #7 0xfefc486c in XtPhase2Destroy () from /usr/openwin/lib/libXt.so.4 #8 0xfefc45d0 in _XtDoPhase2Destroy () from /usr/openwin/lib/libXt.so.4 #9 0xfefc43b4 in XtDestroyWidget () from /usr/openwin/lib/libXt.so.4 #10 0x15cf9c in x_delete_device (d=0x523f00) are caused by buggy Motif libraries. Installing the following patches has been reported to solve the problem on Solaris 2.7: 107081-40 107656-07 For information (although they have not been confirmed to work), the equivalent patches for Solaris 2.8 are: 108940-33 108652-25 *** On HP-UX 11.0 XEmacs causes excessive X11 errors when running. (also appears on AIX as reported in comp.emacs.xemacs) Marcus Thiessel Unfortunately, XEmacs releases prior to 21.0 don't work with Motif2.1. It will compile but you will get excessive X11 errors like xemacs: X Error of failed request: BadGC (invalid GC parameter) and finally XEmacs gets killed. A workaround is to use the Motif1.2_R6 libraries. You can the following line to your call to configure: --x-libraries="/usr/lib/Motif1.2_R6 -L/usr/lib/X11R6" Make sure /usr/lib/Motif1.2_R6/libXm.sl is a link to /usr/lib/Motif1.2_R6/libXm.3. *** On HP-UX 11.0: Object "" does not have windowed ancestor Marcus Thiessel XEmacs dies without core file and reports: Error: Object "" does not have windowed ancestor. This is a bug. Please apply the patch PHSS_19964 (check if superseded). The other alternative is to link with Motif1.2_R6 (see previous item). *** Motif dialog boxes lose on Irix. Larry Auton writes: Beware of not specifying --with-dialogs=athena if it builds with the motif dialogs [boom!] you're a dead man. ** AIX *** IBM compiler fails: "The character # is not a valid C source character." Most recently observed in 21.5.9, due to USE_KKCC ifdefs (they just happen to tickle the implementation). Valdis Kletnieks says: The problem is that IBM defines a *MACRO* called 'memcpy', and we have stuck a #ifdef/#endif inside the macro call. As a workaround, try adding '-U__STR__' to your CFLAGS - this will cause string.h to not do a #define for strcpy() to __strcpy() - it uses this for automatic inlining support. (For the record, the same issue affects a number of other functions defined in string.h - basically anything the compiler knows how to inline.) *** On AIX 4.3, you must specify --with-dialogs=athena with configure *** The libXt shipped with AIX 4.3 up to 4.3.2 is broken. This causes xemacs -nw to fail in various ways. The official APAR is this: APAR NUMBER: RESOLVED AS: PROGRAM ERROR ABSTRACT: : LIBXT.A INCORRECT HANDLING OF EXCEPTIONS IN XTAPPADDINPUT The solution is to install X11.base.lib at version >=4.3.2.5. *** On AIX, you get this compiler error message: Processing include file ./XMenuInt.h 1501-106: (S) Include file X11/Xlib.h not found. This means your system was installed with only the X11 runtime i.d libraries. You have to find your sipo (bootable tape) and install X11Dev... with smit. *** On AIX 4.1.2, linker error messages such as ld: 0711-212 SEVERE ERROR: Symbol .__quous, found in the global symbol table of archive /usr/lib/libIM.a, was not defined in archive member shr.o. This is a problem in libIM.a. You can work around it by executing these shell commands in the src subdirectory of the directory where you build Emacs: cp /usr/lib/libIM.a . chmod 664 libIM.a ranlib libIM.a Then change -lIM to ./libIM.a in the command to link temacs (in Makefile). *** Excessive optimization on AIX 4.2 can lead to compiler failure. Valdis.Kletnieks@vt.edu writes: At least at the b34 level, and the latest-and-greatest IBM xlc (3.1.4.4), there are problems with -O3. I haven't investigated further. ** SunOS/Solaris *** Don't use -O2 with gcc 2.8.1 and egcs 1.0 under SPARC architectures without also using `-fno-schedule-insns'. gcc will generate incorrect code otherwise, typically resulting in crashes in the function skip-syntax-backward. *** Don't use gcc-2.95.2 with -mcpu=ultrasparc on Solaris 2.6. gcc will assume a 64-bit operating system, even though you've merely told it to assume a 64-bit instruction set. *** Dumping error when using GNU binutils / GNU ld on a Sun. Errors similar to the following: Dumping under the name xemacs unexec(): dldump(/space/rpluim/xemacs-obj/src/xemacs): ld.so.1: ./temacs: fatal: /space/rpluim/xemacs-obj/src/xemacs: unknown dynamic entry: 1879048176 are caused by using GNU ld. There are several workarounds available: In XEmacs 21.2 or later, configure using the new portable dumper (--pdump). Alternatively, you can link using the Sun version of ld, which is normally held in /usr/ccs/bin. This can be done by one of: - building gcc with these configure flags: configure --with-ld=/usr/ccs/bin/ld --with-as=/usr/ccs/bin/as - adding -B/usr/ccs/bin/ to CFLAGS used to configure XEmacs (Note: The trailing '/' there is significant.) - uninstalling GNU ld. The Solaris2 FAQ claims: When you install gcc, don't make the mistake of installing GNU binutils or GNU libc, they are not as capable as their counterparts you get with Solaris 2.x. *** Link failure when using acc on a Sun. To use acc, you need additional options just before the libraries, such as /usr/lang/SC2.0.1/values-Xt.o -L/usr/lang/SC2.0.1/cg87 -L/usr/lang/SC2.0.1 and you need to add -lansi just before -lc. The precise file names depend on the compiler version, so we cannot easily arrange to supply them. *** Problems finding X11 libraries on Solaris with Openwindows Some users have reported problems in this area. The reported solution is to define the environment variable OPENWINHOME, even if you must set it to `/usr/openwin'. *** Sed problems on Solaris 2.5 There have been reports of Sun sed truncating very lines in the Makefile during configuration. The workaround is to use GNU sed or, even better, think of a better way to generate Makefile, and send us a patch. :-) *** On Solaris 2 I get undefined symbols from libcurses.a. You probably have /usr/ucblib/ on your LD_LIBRARY_PATH. Do the link with LD_LIBRARY_PATH unset. Generally, avoid using any ucb* stuff when building XEmacs. *** On Solaris 2 I cannot make alloc.o, glyphs.o or process.o. The SparcWorks C compiler may have difficulty building those modules with optimization level -xO4. Try using only "-fast" optimization for just those modules. (Or use gcc). *** Solaris 2.3 /bin/sh coredumps during configuration. This only occurs if you have LANG != C. This is a known bug with /bin/sh fixed by installing Patch-ID# 101613-01. Or, you can use bash by setting the environment variable CONFIG_SHELL to /bin/bash *** Solaris 2.x configure fails: ./config.status: test: argument expected This is a known bug with /bin/sh and /bin/test, i.e. they do not support the XPG4 standard. You can use bash as a workaround or an XPG4-compliant Bourne shell such as the Sun-supplied /usr/xpg4/bin/sh by setting the environment variable CONFIG_SHELL to /usr/xpg4/bin/sh *** On SunOS, you get linker errors ld: Undefined symbol _get_wmShellWidgetClass _get_applicationShellWidgetClass The fix to this is to install patch 100573 for OpenWindows 3.0 or link libXmu statically. *** On Sunos 4, you get the error ld: Undefined symbol __lib_version. This is the result of using cc or gcc with the shared library meant for acc (the Sunpro compiler). Check your LD_LIBRARY_PATH and delete /usr/lang/SC2.0.1 or some similar directory. *** Undefined symbols when linking on Sunos 4.1. If you get the undefined symbols _atowc _wcslen, _iswprint, _iswspace, _iswcntrl, _wcscpy, and _wcsncpy, then you need to add -lXwchar after -lXaw in the command that links temacs. This problem seems to arise only when the international language extensions to X11R5 are installed. *** On a Sun running SunOS 4.1.1, you get this error message from GNU ld: /lib/libc.a(_Q_sub.o): Undefined symbol __Q_get_rp_rd referenced from text segment The problem is in the Sun shared C library, not in GNU ld. The solution is to install Patch-ID# 100267-03 from Sun. *** SunOS 4.1.2: undefined symbol _get_wmShellWidgetClass Apparently the version of libXmu.so.a that Sun ships is hosed: it's missing some stuff that is in libXmu.a (the static version). Sun has a patch for this, but a workaround is to use the static version of libXmu, by changing the link command from "-lXmu" to "-Bstatic -lXmu -Bdynamic". If you have OpenWindows 3.0, ask Sun for these patches: 100512-02 4.1.x OpenWindows 3.0 libXt Jumbo patch 100573-03 4.1.x OpenWindows 3.0 undefined symbols with shared libXmu *** Random other SunOS 4.1.[12] link errors. The X headers and libraries that Sun ships in /usr/{include,lib}/X11 are broken. Use the ones in /usr/openwin/{include,lib} instead. ** Linux See also Intel Architecture General, above. *** egcs-1.1 on Alpha Linux There have been reports of egcs-1.1 not compiling XEmacs correctly on Alpha Linux. There have also been reports that egcs-1.0.3a is O.K. *** Under Linux, you get "too many arguments to function `getpgrp'". You have probably installed LessTiff under `/usr/local' and `libXm.so' could not be found when linking `getpgrp()' test program, making XEmacs think that `getpgrp()' takes an argument. Try adding `/usr/local/lib' in `/etc/ld.so.conf' and run `ldconfig'. Then run XEmacs's `configure' again. As with all problems of this type, reading the config.log file generated from configure and seeing the log of how the test failed can prove enlightening. *** `Error: No ExtNode to pop!' on Linux systems with Lesstif. This error message has been observed with lesstif-0.75a. It does not appear to cause any harm. *** xemacs: can't resolve symbol '__malloc_hook' This is a Linux problem where you've compiled the XEmacs binary on a libc 5.4 with version higher than 5.4.19 and attempted to run the binary against an earlier version. The solution is to upgrade your old library. ** IRIX *** More coredumping in Irix (6.5 known to be vulnerable) No fix is known yet. Here's the best information we have: Valdis Kletnieks writes: Were xemacs and [any 3rd party, locally-compiled] libraries [you use] all compiled with the same ABI ( -o32, -n32, -64) and mips2/mips3/mips4 flags, and are they appropriate for the machine in question? I know the IP30 implies an Octane, so it should be an R10K chipset and above such nonsense, but I've seen the most astoundingly bizzare crashes when somebody managed to compile with -mips4 and get it to run on an R4400 or R5K system. ;) Also, since you're using gcc, try re-running fixincludes and *then* rebuilding xemacs and [any] libraries - mismatched headers can do that sort of thing to you with little or no clue what's wrong (often you get screwed when one routine does an malloc(sizeof(foo_struct)) and passes the result to something that things foo_struct is a bit bigger, trashing memory.... Here's typical crash backtrace. With --pdump, this occurs usually at startup under X windows and xemacs -nw at least starts, while without --pdump a similar crash is observed during build. #0 0x0fa460b8 in kill () at regcomp.c:637 637 regcomp.c: No such file or directory. in regcomp.c (gdb) where #0 0x0fa460b8 in kill () at regcomp.c:637 #1 0x10087f34 in fatal_error_signal () (gdb) quit This is confusing because there is no such file in the XEmacs distribution. This is seen on (at least) the following configurations: uname -a: IRIX64 oct202 6.5 01091821 IP30 XEmacs 21.4.9 "Informed Management" configured for `mips-sgi-irix6.5'. XEmacs 21.5-b9 "brussels sprouts" configured for `mips-sgi-irix6.5'. *** On Irix 6.5, the MIPSpro compiler gets an internal compiler error The MIPSpro Compiler (at least version 7.2.1) can't seem to handle the union type properly, and fails to compile src/glyphs.c. To avoid this problem, always build ---use-union-type=no (but that's the default, so you should only see this problem if you're an XEmacs maintainer). *** Linking with -rpath on IRIX. Darrell Kindred writes: There are a couple of problems [with use of -rpath with Irix ld], though: 1. The ld in IRIX 5.3 ignores all but the last -rpath spec, so the patched configure spits out a warning if --x-libraries or --site-runtime-libraries are specified under irix 5.x, and it only adds -rpath entries for the --site-runtime-libraries. This bug was fixed sometime between 5.3 and 6.2. 2. IRIX gcc 2.7.2 doesn't accept -rpath directly, so it would have to be prefixed by -Xlinker or "-Wl,". This would be fine, except that configure compiles with ${CC-cc} $CFLAGS $LDFLAGS ... rather than quoting $LDFLAGS with prefix-args, like src/Makefile does. So if you specify --x-libraries or --site-runtime-libraries, you must use --use-gcc=no, or configure will fail. *** On Irix 6.3, the SGI ld quits with segmentation fault when linking temacs This occurs if you use the SGI linker version 7.1. Installing the patch SG0001872 fixes this problem. *** On Irix 6.0, make tries (and fails) to build a program named unexelfsgi A compiler bug inserts spaces into the string "unexelfsgi . o" in src/Makefile. Edit src/Makefile, after configure is run, find that string, and take out the spaces. Compiler fixes in Irix 6.0.1 should eliminate this problem. *** On Irix 5.2, unexelfsgi.c can't find cmplrs/stsupport.h. The file cmplrs/stsupport.h was included in the wrong file set in the Irix 5.2 distribution. You can find it in the optional fileset compiler_dev, or copy it from some other Irix 5.2 system. A kludgy workaround is to change unexelfsgi.c to include sym.h instead of syms.h. *** Coredumping in Irix 6.2 Pete Forman writes: A problem noted by myself and others (I've lost the references) was that XEmacs coredumped when the cut or copy toolbar buttons were pressed. This has been fixed by loading the SGI patchset (Feb 98) without having to recompile XEmacs. My versions are XEmacs 20.3 (problem first noted in 19.15) and IRIX 6.2, compiled using -n32. I'd guess that the relevant individual patch was "SG0002580: multiple fixes for X libraries". SGI recommends that the complete patch set be installed rather than parts of it. ** Digital UNIX/OSF/VMS *** On Digital UNIX, the DEC C compiler might have a problem compiling some files. In particular, src/extents.c and src/faces.c might cause the DEC C compiler to abort. When this happens: cd src, compile the files by hand, cd .., and redo the "make" command. When recompiling the files by hand, use the old C compiler for the following versions of Digital UNIX: - V3.n: Remove "-migrate" from the compile command. - V4.n: Add "-oldc" to the compile command. A related compiler bug has been fixed by the DEC compiler team. The new versions of the compiler should run fine. *** Under some versions of OSF XEmacs runs fine if built without optimization but will crash randomly if built with optimization. Using 'cc -g' is not sufficient to eliminate all optimization. Try 'cc -g -O0' instead. *** Compilation errors on VMS. Sorry, XEmacs does not work under VMS. You might consider working on the port if you really want to have XEmacs work under VMS. ** HP-UX *** On HPUX, the HP C compiler might have a problem compiling some files with optimization. Richard Cognot writes: Had to drop once again to level 2 optimization, at least to compile lstream.c. Otherwise, I get a "variable is void: \if" problem while dumping (this is a problem I already reported with vanilla hpux 10.01 and 9.07, which went away after applying patches for the C compiler). Trouble is I still haven't found the same patch for hpux 10.10, and I don't remember the patch numbers. I think potential XEmacs builders on HP should be warned about this. *** I don't have `xmkmf' and `imake' on my HP. You can get these standard X tools by anonymous FTP to hpcvaaz.cv.hp.com. Essentially all X programs need these. *** On HP-UX, problems with make Marcus Thiessel Some releases of XEmacs (e.g. 20.4) require GNU make to build successfully. You don't need GNU make when building 21.x. *** On HP-UX 9.05 XEmacs won't compile or coredump during the build. Marcus Thiessel This might be a sed problem. For your own safety make sure to use GNU sed while dumping XEmacs. ** SCO OpenServer *** Native cc on SCO OpenServer 5 is now OK. Icc may still throw you a curve. Here is what Robert Lipe says: Unlike XEmacs 19.13, building with the native cc on SCO OpenServer 5 now produces a functional binary. I will typically build this configuration for COFF with: /path_to_xemacs_source/configure --with-gcc=no \ --site-includes=/usr/local/include --site-libraries=/usr/local/lib \ --with-xpm --with-xface --with-sound=nas This version now supports ELF builds. I highly recommend this to reduce the in-core footprint of XEmacs. This is now how I compile all my test releases. Build it like this: /path_to_XEmacs_source/configure --with-gcc=no \ --site-includes=/usr/local/include --site-libraries=/usr/local/lib \ --with-xpm --with-xface --with-sound=nas --dynamic The compiler known as icc [ supplied with the OpenServer 5 Development System ] generates a working binary, but it takes forever to generate XEmacs. ICC also whines more about the code than /bin/cc does. I do believe all its whining is legitimate, however. Note that you do have to 'cd src ; make LD=icc' to avoid linker errors. The way I handle the build procedure is: /path_to_XEmacs_source/configure --with-gcc=no \ --site-includes=/usr/local/include --site-libraries=/usr/local/lib \ --with-xpm --with-xface --with-sound=nas --dynamic --compiler="icc" NOTE I have the xpm, xface, and audio libraries and includes in /usr/local/lib, /usr/local/include. If you don't have these, don't include the "--with-*" arguments in any of my examples. In previous versions of XEmacs, you had to override the defaults while compiling font-lock.o and extents.o when building with icc. This seems to no longer be true, but I'm including this old information in case it resurfaces. The process I used was: make -k [ procure pizza, beer, repeat ] cd src make CC="icc -W0,-mP1COPT_max_tree_size=3000" font-lock.o extents.o make LD=icc If you want sound support, get the tls566 supplement from ftp.sco.com:/TLS or any of its mirrors. It works just groovy with XEmacs. The M-x manual-entry is known not to work. If you know Lisp and would like help in making it work, e-mail me at . (UNCHECKED for 19.15 -- it might work). In earlier releases, gnuserv/gnuclient/gnudoit would open a frame just fine, but the client would lock up and the server would terminate when you used C-x # to close the frame. This is now fixed in XEmacs. In etc/ there are two files of note. emacskeys.sco and emacsstrs.sco. The comments at the top of emacskeys.sco describe its function, and the emacstrs.sco is a suitable candidate for /usr/lib/keyboard/strings to take advantage of the keyboard map in emacskeys.sco. Note: Much of the above entry is probably not valid for XEmacs 21.0 and later. ** Windows *** XEmacs complains "No such file or directory, diff" or "ispell" or other commands that seem related to whatever you just tried to do. There are a large number of common (in the sense that "everyone has these, really") Unix utilities that are not provided with XEmacs. The GNU Project's implementations are available for Windows in the the Cygwin distribution (http://www.cygwin.com/), which also provides a complete Unix emulation environment (and thus makes ports of Unix utilities nearly trivial). Another implementation is that from MinGW (http://www.mingw.org/msys.shtml). *** Weird crashes in pdump load or shortly after pdump load. This can happen with incremental linking. Check if you have set SUPPORT_EDIT_AND_CONTINUE to non-zero in config.inc, which must allow incremental linking to be enabled (otherwise it's disabled). Either turn this off, execute `nmake -f xemacs.mak clean', or manually remove `temacs.exe' and `xemacs.exe'. ** Cygwin See also Intel Architecture General, above. *** Signal 11 when building or running a dumped XEmacs. This appears to happen when using the traditional dumping mechanism and the system malloc. Andy Piper writes: Traditional dumping on Cygwin relies on using gmalloc (there are specific hacks in our version of gmalloc to support this), I suspect using sysmalloc is the problem. Try configuring with pdump or without system malloc. *** 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, under old versions of Cygwin. The default Cygwin shell (/bin/sh.exe) is ash, which appears to work in most circumstances but has some weird failure modes. You may need to replace the symlink with bash.exe. ]] This doesn't appear to affect Cygwin any longer, and /bin/sh.exe is no longer a symlink in any case. *** 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). *** The info files will not build. makeinfo that ships with old versions of Cygwin doesn't work. Upgrade to the latest Cygwin version. *** XEmacs hangs while attempting to rebuild the .elc files. Check to make sure you're not configuring with rel-alloc. The relocating allocator does not currently work under Cygwin due to bugs in Cygwin's mmap(). *** Trying to build with X, but X11 not detected. This is usually because xmkmf is not in your path or because you are using the default Cygwin shell. (See above.) * Problems with running XEmacs ============================== ** General *** XEmacs consistently crashes in a particular strange place. One known case is on Red Hat Linux, compiled with GCC, attempting to render PNG images. The problem is that XEmacs code is not compliant with ANSI rules about aliasing. Adding -fno-strict-aliasing to CFLAGS may help (or the equivalent for your compiler). (Some versions of XEmacs may already do this automatically, but if you specify CFLAGS or --cflags yourself, you will have to add this flag by hand.) If you diagnose this bug for some other symptoms or systems, please let us know (if you can send mail from the affected system, use M-x report-xemacs-bug) so we can update this entry. *** Changes made to .el files do not take effect. You may have forgotten to recompile them into .elc files. Then the old .elc files will be loaded, and your changes will not be seen. To fix this, do `M-x byte-recompile-directory' and specify the directory that contains the Lisp files. Note that you will get a warning when loading a .elc file that is older than the corresponding .el file. *** VM appears to hang in large folders. This is normal (trust us) when upgrading to VM-6.22 from earlier versions. Let VM finish what it is doing and all will be well. *** Starting with 21.4.x, killing text is absurdly slow. See FAQ Q3.10.6. Should be available on the web near http://www.xemacs.org/faq/xemacs-faq.html#SEC160. *** Whenever I try to retrieve a remote file, I have problems. A typical error: FTP Error: USER request failed; 500 AUTH not understood. Thanks to giacomo boffi on comp.emacs.xemacs: tell your ftp client to not attempt AUTH authentication (or do not use FTP servers that don't understand AUTH) and notes that you need to add an element (often "-u") to `efs-ftp-program-args'. Use M-x customize-variable, and verify the needed flag with `man ftp' or other local documentation. *** gnuserv is running, some clients can connect, but others cannot. The code in gnuslib.c respects the value of TMPDIR. If the server and the client have different values in their environment, you lose. One program known to set TMPDIR and manifest this problem is exmh. You can defeat the use of TMPDIR by unsetting USE_TMPDIR at the top of gnuserv.h at build time. ** General Unix *** You type Control-H (Backspace) expecting to delete characters. Emacs has traditionally used Control-H for help; unfortunately this interferes with its use as Backspace on TTY's. As of XEmacs 21, XEmacs looks at the "erase" setting of TTY structures and maps C-h to backspace when erase is set to C-h. This is sort of a special hack, but it makes it possible for you to use the standard: stty erase ^H to get your backspace key to erase characters. The erase setting is recorded in the Lisp variable `tty-erase-char', which you can use to tune the settings in your .emacs. A major drawback of this is that when C-h becomes backspace, it no longer invokes help. In that case, you need to use f1 for help, or bind another key. An example of the latter is the following code, which moves help to Meta-? (ESC ?): (global-set-key "\M-?" 'help-command) *** At startup I get a warning on stderr about missing charsets: Warning: Missing charsets in String to FontSet conversion You need to specify appropriate charsets for your locale (usually the value of the LANG environment variable) in .Xresources. See etc/Emacs.ad for the relevant resources (mostly menubar fonts and fontsets). Do not edit this file, it's purely informative. If you have no satisfactory fonts for iso-8859-1, XEmacs will crash. It looks like XFree86 4.x (the usual server on Linux and *BSD) has some braindamage where .UTF-8 locales will always generate this message, because the XFree86 (font)server doesn't know that UTF-8 will use the ISO10646-1 font registry (or a Cmap or something). If you are not using a .UTF-8 locale and see this warning for a character set not listed in the default in Emacs.ad, please let xemacs-beta@xemacs.org know about it, so we can add fonts to the appropriate fontsets and stifle this warning. (Unfortunately it's buried in Xlib, so we can't easily get rid of it otherwise.) *** Mail agents (VM, Gnus, rmail) cannot get new mail rmail and VM get new mail from /usr/spool/mail/$USER using a program called `movemail'. This program interlocks with /bin/mail using the protocol defined by /bin/mail. There are two different protocols in general use. One of them uses the `flock' system call. The other involves creating a lock file; `movemail' must be able to write in /usr/spool/mail in order to do this. You control which one is used by defining, or not defining, the macro MAIL_USE_FLOCK in config.h or the m- or s- file it includes. IF YOU DON'T USE THE FORM OF INTERLOCKING THAT IS NORMAL ON YOUR SYSTEM, YOU CAN LOSE MAIL! If your system uses the lock file protocol, and fascist restrictions prevent ordinary users from writing the lock files in /usr/spool/mail, you may need to make `movemail' setgid to a suitable group such as `mail'. To do this, use the following commands (as root) after doing the make install. chgrp mail movemail chmod 2755 movemail Installation normally copies movemail from the build directory to an installation directory which is usually under /usr/local/lib. The installed copy of movemail is usually in the directory /usr/local/lib/emacs/VERSION/TARGET. You must change the group and mode of the installed copy; changing the group and mode of the build directory copy is ineffective. *** Things which should be bold or italic (such as the initial copyright notice) are not. The fonts of the "bold" and "italic" faces are generated from the font of the "default" face; in this way, your bold and italic fonts will have the appropriate size and family. However, emacs can only be clever in this way if you have specified the default font using the XLFD (X Logical Font Description) format, which looks like *-courier-medium-r-*-*-*-120-*-*-*-*-*-* if you use any of the other, less strict font name formats, some of which look like: lucidasanstypewriter-12 and fixed and 9x13 then emacs won't be able to guess the names of the "bold" and "italic" versions. All X fonts can be referred to via XLFD-style names, so you should use those forms. See the man pages for X(1), xlsfonts(1), and xfontsel(1). *** The dumped Emacs crashes when run, trying to write pure data. Two causes have been seen for such problems. 1) On a system where getpagesize is not a system call, it is defined as a macro. If the definition (in both unexec.c and malloc.c) is wrong, it can cause problems like this. You might be able to find the correct value in the man page for a.out (5). 2) Some systems allocate variables declared static among the initialized variables. Emacs makes all initialized variables in most of its files pure after dumping, but the variables declared static and not initialized are not supposed to be pure. On these systems you may need to add "#define static" to the m- or the s- file. *** Reading and writing files is very very slow. Try evaluating the form (setq lock-directory nil) and see if that helps. There is a problem with file-locking on some systems (possibly related to NFS) that I don't understand. Please send mail to the address xemacs-beta@xemacs.org if you figure this one out. *** When emacs starts up, I get lots of warnings about unknown keysyms. If you are running the prebuilt binaries, the Motif library expects to find certain thing in the XKeysymDB file. This file is normally in /usr/lib/X11/ or in /usr/openwin/lib/. If you keep yours in a different place, set the environment variable $XKEYSYMDB to point to it before starting emacs. If you still have the problem after doing that, perhaps your version of X is too old. There is a copy of the MIT X11R5 XKeysymDB file in the emacs `etc' directory. Try using that one. *** My X resources used to work, and now some of them are being ignored. Check the resources in .../etc/Emacs.ad (which is the same as the file sample.Xresources). Perhaps some of the default resources built in to emacs are now overriding your existing resources. Copy and edit the resources in Emacs.ad as necessary. *** I have focus problems when I use `M-o' to switch to another screen without using the mouse. The focus issues with a program like XEmacs, which has multiple homogeneous top-level windows, are very complicated, and as a result, most window managers don't implement them correctly. The R4/R5 version of twm (and all of its descendants) had buggy focus handling. Sufficiently recent versions of tvtwm have been fixed. In addition, if you're using twm, make sure you have not specified "NoTitleFocus" in your .tvtwmrc file. The very nature of this option makes twm do some illegal focus tricks, even with the patch. It is known that olwm and olvwm are buggy, and in different ways. If you're using click-to-type mode, try using point-to-type, or vice versa. In older versions of NCDwm, one could not even type at XEmacs windows. This has been fixed in newer versions (2.4.3, and possibly earlier). (Many people suggest that XEmacs should warp the mouse when focusing on another screen in point-to-type mode. This is not ICCCM-compliant behavior. Implementing such policy is the responsibility of the window manager itself, it is not legal for a client to do this.) *** Emacs spontaneously displays "I-search: " at the bottom of the screen. This means that Control-S/Control-Q (XON/XOFF) "flow control" is being used. C-s/C-q flow control is bad for Emacs editors because it takes away C-s and C-q as user commands. Since editors do not output long streams of text without user commands, there is no need for a user-issuable "stop output" command in an editor; therefore, a properly designed flow control mechanism would transmit all possible input characters without interference. Designing such a mechanism is easy, for a person with at least half a brain. There are three possible reasons why flow control could be taking place: 1) Terminal has not been told to disable flow control 2) Insufficient padding for the terminal in use 3) Some sort of terminal concentrator or line switch is responsible First of all, many terminals have a set-up mode which controls whether they generate XON/XOFF flow control characters. This must be set to "no XON/XOFF" in order for Emacs to work. Sometimes there is an escape sequence that the computer can send to turn flow control off and on. If so, perhaps the termcap `ti' string should turn flow control off, and the `te' string should turn it on. Once the terminal has been told "no flow control", you may find it needs more padding. The amount of padding Emacs sends is controlled by the termcap entry for the terminal in use, and by the output baud rate as known by the kernel. The shell command `stty' will print your output baud rate; `stty' with suitable arguments will set it if it is wrong. Setting to a higher speed causes increased padding. If the results are wrong for the correct speed, there is probably a problem in the termcap entry. You must speak to a local Unix wizard to fix this. Perhaps you are just using the wrong terminal type. For terminals that lack a "no flow control" mode, sometimes just giving lots of padding will prevent actual generation of flow control codes. You might as well try it. If you are really unlucky, your terminal is connected to the computer through a concentrator which sends XON/XOFF flow control to the computer, or it insists on sending flow control itself no matter how much padding you give it. Unless you can figure out how to turn flow control off on this concentrator (again, refer to your local wizard), you are screwed! You should have the terminal or concentrator replaced with a properly designed one. In the mean time, some drastic measures can make Emacs semi-work. You can make Emacs ignore C-s and C-q and let the operating system handle them. To do this on a per-session basis, just type M-x enable-flow-control RET. You will see a message that C-\ and C-^ are now translated to C-s and C-q. (Use the same command M-x enable-flow-control to turn *off* this special mode. It toggles flow control handling.) If C-\ and C-^ are inconvenient for you (for example, if one of them is the escape character of your terminal concentrator), you can choose other characters by setting the variables flow-control-c-s-replacement and flow-control-c-q-replacement. But choose carefully, since all other control characters are already used by emacs. IMPORTANT: if you type C-s by accident while flow control is enabled, Emacs output will freeze, and you will have to remember to type C-q in order to continue. If you work in an environment where a majority of terminals of a certain type are flow control hobbled, you can use the function `enable-flow-control-on' to turn on this flow control avoidance scheme automatically. Here is an example: (enable-flow-control-on "vt200" "vt300" "vt101" "vt131") If this isn't quite correct (e.g. you have a mixture of flow-control hobbled and good vt200 terminals), you can still run enable-flow-control manually. I have no intention of ever redesigning the Emacs command set for the assumption that terminals use C-s/C-q flow control. XON/XOFF flow control technique is a bad design, and terminals that need it are bad merchandise and should not be purchased. Now that X is becoming widespread, XON/XOFF seems to be on the way out. If you can get some use out of GNU Emacs on inferior terminals, more power to you, but I will not make Emacs worse for properly designed systems for the sake of inferior systems. *** Control-S and Control-Q commands are ignored completely. For some reason, your system is using brain-damaged C-s/C-q flow control despite Emacs's attempts to turn it off. Perhaps your terminal is connected to the computer through a concentrator that wants to use flow control. You should first try to tell the concentrator not to use flow control. If you succeed in this, try making the terminal work without flow control, as described in the preceding section. If that line of approach is not successful, map some other characters into C-s and C-q using keyboard-translate-table. The example above shows how to do this with C-^ and C-\. *** Control-S and Control-Q commands are ignored completely on a net connection. Some versions of rlogin (and possibly telnet) do not pass flow control characters to the remote system to which they connect. On such systems, emacs on the remote system cannot disable flow control on the local system. One way to cure this is to disable flow control on the local host (the one running rlogin, not the one running rlogind) using the stty command, before starting the rlogin process. On many systems, `stty start u stop u' will do this. Some versions of tcsh will prevent even this from working. One way around this is to start another shell before starting rlogin, and issue the stty command to disable flow control from that shell. If none of these methods work, the best solution is to type `M-x enable-flow-control' at the beginning of your emacs session, or if you expect the problem to continue, add a line such as the following to your .emacs (on the host running rlogind): (enable-flow-control-on "vt200" "vt300" "vt101" "vt131") See the entry about spontaneous display of I-search (above) for more info. *** TTY redisplay is slow. XEmacs has fairly new TTY redisplay support (beginning from 19.12), which doesn't include some basic TTY optimizations -- like using scrolling regions to move around blocks of text. This is why redisplay on the traditional terminals, or over slow lines can be very slow. If you are interested in fixing this, please let us know at . *** Screen is updated wrong, but only on one kind of terminal. This could mean that the termcap entry you are using for that terminal is wrong, or it could mean that Emacs has a bug handing the combination of features specified for that terminal. The first step in tracking this down is to record what characters Emacs is sending to the terminal. Execute the Lisp expression (open-termscript "./emacs-script") to make Emacs write all terminal output into the file ~/emacs-script as well; then do what makes the screen update wrong, and look at the file and decode the characters using the manual for the terminal. There are several possibilities: 1) The characters sent are correct, according to the terminal manual. In this case, there is no obvious bug in Emacs, and most likely you need more padding, or possibly the terminal manual is wrong. 2) The characters sent are incorrect, due to an obscure aspect of the terminal behavior not described in an obvious way by termcap. This case is hard. It will be necessary to think of a way for Emacs to distinguish between terminals with this kind of behavior and other terminals that behave subtly differently but are classified the same by termcap; or else find an algorithm for Emacs to use that avoids the difference. Such changes must be tested on many kinds of terminals. 3) The termcap entry is wrong. See the file etc/TERMS for information on changes that are known to be needed in commonly used termcap entries for certain terminals. 4) The characters sent are incorrect, and clearly cannot be right for any terminal with the termcap entry you were using. This is unambiguously an Emacs bug, and can probably be fixed in termcap.c, terminfo.c, tparam.c, cm.c, redisplay-tty.c, redisplay-output.c, or redisplay.c. *** My buffers are full of \000 characters or otherwise corrupt. Some compilers have trouble with gmalloc.c and ralloc.c; try recompiling without optimization. If that doesn't work, try recompiling with SYSTEM_MALLOC defined, and/or with REL_ALLOC undefined. *** A position you specified in .Xresources is ignored, using twm. twm normally ignores "program-specified" positions. You can tell it to obey them with this command in your `.twmrc' file: UsePPosition "on" #allow clents to request a position *** With M-x enable-flow-control, you need to type C-\ twice to do incremental search--a single C-\ gets no response. This has been traced to communicating with your machine via kermit, with C-\ as the kermit escape character. One solution is to use another escape character in kermit. One user did set escape-character 17 in his .kermrc file, to make C-q the kermit escape character. *** The Motif version of Emacs paints the screen a solid color. This has been observed to result from the following X resource: Emacs*default.attributeFont: -*-courier-medium-r-*-*-*-140-*-*-*-*-iso8859-* That the resource has this effect indicates a bug in something, but we do not yet know what. If it is an Emacs bug, we hope someone can explain what the bug is so we can fix it. In the mean time, removing the resource prevents the problem. *** After running emacs once, subsequent invocations crash. Some versions of SVR4 have a serious bug in the implementation of the mmap () system call in the kernel; this causes emacs to run correctly the first time, and then crash when run a second time. Contact your vendor and ask for the mmap bug fix; in the mean time, you may be able to work around the problem by adding a line to your operating system description file (whose name is reported by the configure script) that reads: #define SYSTEM_MALLOC This makes Emacs use memory less efficiently, but seems to work around the kernel bug. *** Inability to send an Alt-modified key, when Emacs is communicating directly with an X server. If you have tried to bind an Alt-modified key as a command, and it does not work to type the command, the first thing you should check is whether the key is getting through to Emacs. To do this, type C-h c followed by the Alt-modified key. C-h c should say what kind of event it read. If it says it read an Alt-modified key, then make sure you have made the key binding correctly. If C-h c reports an event that doesn't have the Alt modifier, it may be because your X server has no key for the Alt modifier. The X server that comes from MIT does not set up the Alt modifier by default. If your keyboard has keys named Alt, you can enable them as follows: xmodmap -e 'add mod2 = Alt_L' xmodmap -e 'add mod2 = Alt_R' If the keyboard has just one key named Alt, then only one of those commands is needed. The modifier `mod2' is a reasonable choice if you are using an unmodified MIT version of X. Otherwise, choose any modifier bit not otherwise used. If your keyboard does not have keys named Alt, you can use some other keys. Use the keysym command in xmodmap to turn a function key (or some other 'spare' key) into Alt_L or into Alt_R, and then use the commands show above to make them modifier keys. Note that if you have Alt keys but no Meta keys, Emacs translates Alt into Meta. This is because of the great importance of Meta in Emacs. *** In Shell mode, you get a ^M at the end of every line. This happens to people who use tcsh, because it is trying to be too smart. It sees that the Shell uses terminal type `unknown' and turns on the flag to output ^M at the end of each line. You can fix the problem by adding this to your .cshrc file: if ($?EMACS) then if ($EMACS == "t") then unset edit stty -icrnl -onlcr -echo susp ^Z endif endif *** An error message such as `X protocol error: BadMatch (invalid parameter attributes) on protocol request 93'. This comes from having an invalid X resource, such as emacs*Cursor: black (which is invalid because it specifies a color name for something that isn't a color.) The fix is to correct your X resources. *** Once you pull down a menu from the menubar, it won't go away. It has been claimed that this is caused by a bug in certain very old (1990?) versions of the twm window manager. It doesn't happen with recent vintages, or with other window managers. *** Emacs ignores the "help" key when running OLWM. OLWM grabs the help key, and retransmits it to the appropriate client using XSendEvent. Allowing emacs to react to synthetic events is a security hole, so this is turned off by default. You can enable it by setting the variable x-allow-sendevents to t. You can also cause fix this by telling OLWM to not grab the help key, with the null binding "OpenWindows.KeyboardCommand.Help:". *** Programs running under terminal emulator do not recognize `emacs' terminal type. The cause of this is a shell startup file that sets the TERMCAP environment variable. The terminal emulator uses that variable to provide the information on the special terminal type that Emacs emulates. Rewrite your shell startup file so that it does not change TERMCAP in such a case. You could use the following conditional which sets it only if it is undefined. if ( ! ${?TERMCAP} ) setenv TERMCAP ~/my-termcap-file Or you could set TERMCAP only when you set TERM--which should not happen in a non-login shell. *** The popup menu appears at the bottom/right of my screen. You probably have something like the following in your ~/.Xresources Emacs.geometry: 81x56--9--1 Use the following instead Emacs*EmacsFrame.geometry: 81x56--9--1 *** When I try to use the PostgreSQL functions, I get a message about undefined symbols. The only known case in which this happens is if you are using gcc, you configured with --error-checking=all and --with-modules, and you compiled with no optimization. If you encounter this problem in any other situation, please inform xemacs-beta@xemacs.org. This problem stems from a gcc bug. With no optimization, functions declared `extern inline' sometimes are not completely compiled away. An undefined symbol with the function's name is put into the resulting object file. In this case, when the postgresql module is loaded, the linker is unable to resolve that symbol, so the module load fails. The workaround is to recompile the module with optimization turned on. Any optimization level, including -Os, appears to work. *** C-z just refreshes the screen instead of suspending Emacs. You are probably using a shell that doesn't support job control, even though the system itself is capable of it. Try using a different shell. ** MacOS/X, Darwin *** XEmacs crashes on MacOS within font-lock, or when dealing with large compilation buffers, or in other regex applications. The default stack size under MacOS/X is rather small (512k as opposed to Solaris 8M), hosing the regexp code, which uses alloca() extensively, overflowing the stack when complex regexps are used. Workarounds: 1) Increase your stack size, using `ulimit -s 8192' or a (t)csh equivalent; 2) Recompile regex.c with REGEX_MALLOC defined. ** AIX *** Your Delete key sends a Backspace to the terminal, using an AIXterm. The solution is to include in your .Xresources the lines: *aixterm.Translations: #override BackSpace: string(0x7f) aixterm*ttyModes: erase ^? This makes your Backspace key send DEL (ASCII 127). *** On AIX 4, some programs fail when run in a Shell buffer with an error message like No terminfo entry for "unknown". On AIX, many terminal type definitions are not installed by default. `unknown' is one of them. Install the "Special Generic Terminal Definitions" to make them defined. *** On AIX, you get this message when running Emacs: Could not load program emacs Symbol smtcheckinit in csh is undefined Error was: Exec format error or this one: Could not load program .emacs Symbol _system_con in csh is undefined Symbol _fp_trapsta in csh is undefined Error was: Exec format error These can happen when you try to run on AIX 3.2.5 a program that was compiled with 3.2.4. The fix is to recompile. *** Trouble using ptys on AIX. People often install the pty devices on AIX incorrectly. Use `smit pty' to reinstall them properly. ** SunOS/Solaris *** The Emacs window disappears when you type M-q. Some versions of the Open Look window manager interpret M-q as a quit command for whatever window you are typing at. If you want to use Emacs with that window manager, you should try to configure the window manager to use some other command. You can disable the shortcut keys entirely by adding this line to ~/.OWdefaults: OpenWindows.WindowMenuAccelerators: False *** When Emacs tries to ring the bell, you get an error like audio: sst_open: SETQSIZE" Invalid argument audio: sst_close: SETREG MMR2, Invalid argument you have probably compiled using an ANSI C compiler, but with non-ANSI include files. In particular, on Suns, the file /usr/include/sun/audioio.h uses the _IOW macro to define the constant AUDIOSETQSIZE. _IOW in turn uses a K&R preprocessor feature that is now explicitly forbidden in ANSI preprocessors, namely substitution inside character constants. All ANSI C compilers must provide a workaround for this problem. Lucid's C compiler is shipped with a new set of system include files. If you are using GCC, there is a script called fixincludes that creates new versions of some system include files that use this obsolete feature. *** On Solaris 2.6, XEmacs dumps core when exiting. This happens if you're XEmacs is running on the same machine as the X server, and the optimized memory transport has been turned on by setting the environment variable XSUNTRANSPORT. The crash occurs during the call to XCloseDisplay. If this describes your situation, you need to undefine the XSUNTRANSPORT environment variable. *** On Solaris, C-x doesn't get through to Emacs when you use the console. This is a Solaris feature (at least on Intel x86 cpus). Type C-r C-r C-t, to toggle whether C-x gets through to Emacs. *** On Solaris 2.4, Dired hangs and C-g does not work. Or Emacs hangs forever waiting for termination of a subprocess that is a zombie. casper@fwi.uva.nl says the problem is in X11R6. Rebuild libX11.so after changing the file xc/config/cf/sunLib.tmpl. Change the lines #if ThreadedX #define SharedX11Reqs -lthread #endif to: #if OSMinorVersion < 4 #if ThreadedX #define SharedX11Reqs -lthread #endif #endif Be sure also to edit x/config/cf/sun.cf so that OSMinorVersion is 4 (as it should be for Solaris 2.4). The file has three definitions for OSMinorVersion: the first is for x86, the second for SPARC under Solaris, and the third for SunOS 4. Make sure to update the definition for your type of machine and system. Then do `make Everything' in the top directory of X11R6, to rebuild the makefiles and rebuild X. The X built this way work only on Solaris 2.4, not on 2.3. For multithreaded X to work it necessary to install patch 101925-02 to fix problems in header files [2.4]. You need to reinstall gcc or re-run just-fixinc after installing that patch. However, Frank Rust used a simpler solution: he changed #define ThreadedX YES to #define ThreadedX NO in sun.cf and did `make World' to rebuild X11R6. Removing all `-DXTHREAD*' flags and `-lthread' entries from lib/X11/Makefile and typing 'make install' in that directory also seemed to work. *** On SunOS 4.1.3, Emacs unpredictably crashes in _yp_dobind_soft. This happens if you configure Emacs specifying just `sparc-sun-sunos4' on a system that is version 4.1.3. You must specify the precise version number (or let configure figure out the configuration, which it can do perfectly well for SunOS). *** Mail is lost when sent to local aliases. Many emacs mail user agents (VM and rmail, for instance) use the sendmail.el library. This library can arrange for mail to be delivered by passing messages to the /usr/lib/sendmail (usually) program . In doing so, it passes the '-t' flag to sendmail, which means that the name of the recipient of the message is not on the command line and, therefore, that sendmail must parse the message to obtain the destination address. There is a bug in the SunOS4.1.1 and SunOS4.1.3 versions of sendmail. In short, when given the -t flag, the SunOS sendmail won't recognize non-local (i.e. NIS) aliases. It has been reported that the Solaris 2.x versions of sendmail do not have this bug. For those using SunOS 4.1, the best fix is to install sendmail V8 or IDA sendmail (which have other advantages over the regular sendmail as well). At the time of this writing, these official versions are available: Sendmail V8 on ftp.cs.berkeley.edu in /ucb/sendmail: sendmail.8.6.9.base.tar.Z (the base system source & documentation) sendmail.8.6.9.cf.tar.Z (configuration files) sendmail.8.6.9.misc.tar.Z (miscellaneous support programs) sendmail.8.6.9.xdoc.tar.Z (extended documentation, with postscript) IDA sendmail on vixen.cso.uiuc.edu in /pub: sendmail-5.67b+IDA-1.5.tar.gz *** Emacs fails to understand most Internet host names, even though the names work properly with other programs on the same system. Emacs won't work with X-windows if the value of DISPLAY is HOSTNAME:0. Gnus can't make contact with the specified host for nntp. This typically happens on Suns and other systems that use shared libraries. The cause is that the site has installed a version of the shared library which uses a name server--but has not installed a similar version of the unshared library which Emacs uses. The result is that most programs, using the shared library, work with the nameserver, but Emacs does not. The fix is to install an unshared library that corresponds to what you installed in the shared library, and then relink Emacs. On SunOS 4.1, simply define HAVE_RES_INIT. If you have already installed the name resolver in the file libresolv.a, then you need to compile Emacs to use that library. The easiest way to do this is to add to config.h a definition of LIBS_SYSTEM, LIBS_MACHINE or LIB_STANDARD which uses -lresolv. Watch out! If you redefine a macro that is already in use in your configuration to supply some other libraries, be careful not to lose the others. Thus, you could start by adding this to config.h: #define LIBS_SYSTEM -lresolv Then if this gives you an error for redefining a macro, and you see that the s- file defines LIBS_SYSTEM as -lfoo -lbar, you could change config.h again to say this: #define LIBS_SYSTEM -lresolv -lfoo -lbar *** With process-connection-type set to t, each line of subprocess output is terminated with a ^M, making ange-ftp and GNUS not work. On SunOS systems, this problem has been seen to be a result of an incomplete installation of gcc 2.2 which allowed some non-ANSI compatible include files into the compilation. In particular this affected virtually all ioctl() calls. ** Linux *** XEmacs crashes on startup, in make-frame. Typically the Lisp backtrace includes make-frame(nil #) somewhere near the top. The problem is due to an improvement in GNU ld that sorts the ELF reloc sections in the executable, giving dramatic speedups in startup for large executables. It also confuses the traditional unexec code in XEmacs, leading to the core dump. The solution is to use the --pdump or --ldflags='-z nocombreloc' options to configure. Recent 21.4 and 12.5 autodetect this in configure. Red Hat and SuSE (at least) distributed a prerelease version of ld (versions around 2.11.90.x.y) where autodetection is impossible. The recommended procedure is to upgrade to binutils >= 2.12 and rerun configure. Otherwise you must apply the flags by hand. --pdump is recommended. *** I want XEmacs to use the Alt key, not the XXX key, for Meta commands For historical reasons, XEmacs looks for a Meta key, then an Alt key. It binds Meta commands to the X11 modifier bit attached to the first of these it finds. On PCs, the Windows key is often assigned the Meta bit, but many desktop environments go to great lengths to get all apps to use the Alt key, and reserve the Windows key to (sensibly enough) the window manager. One correct way to implement this was suggested on comp.emacs.xemacs (by Kilian Foth and in more detail by Michael Piotrowski): unmap the Meta modifier using xmodmap or xkb, and then map the Meta/Windows key to the Super or Hyper keysym and an appropriate mod bit. XEmacs will not find the Meta keysym, and default to using the Alt key for Meta keybindings. Typically few applications use the (X11) Meta modifier; it is tedious but not too much so to teach the ones you need to use Super instead of Meta. There may be further useful hints in the discussion of keymapping on non-Linux platforms. *** The color-gcc wrapper This wrapper colorizes the error messages from gcc. By default XEmacs does not interpret the escape sequences used to generate colors, resulting in a cluttered, hard-to-read buffer. You can remove the wrapper, or defeat the wrapper colorization in Emacs process buffers by editing the "nocolor" attribute in /etc/colorgccrc: $ diff -u /etc/colorgccrc.old /etc/colorgccrc --- /etc/colorgccrc.old Tue Dec 26 02:17:46 2000 +++ /etc/colorgccrc Tue Dec 26 02:15:48 2000 @@ -34,1 +34,1 @@ -nocolor: dumb +nocolor: dumb emacs If you want colorization in your Emacs buffers, you may get good results from the ansi-color.el library: http://www.geocities.com/kensanata/color-emacs.html#ansicolors This is written for the mainline GNU Emacs but the author has made efforts to adapt it to XEmacs. YMMV. *** Slow startup on Linux. People using systems based on the Linux kernel sometimes report that startup takes 10 to 15 seconds longer than `usual'. There are two problems, one older, one newer. **** Old problem: IPv4 host lookup On older systems, this is because Emacs looks up the host name when it starts. Normally, this takes negligible time; the extra delay is due to improper system configuration. (Recent Linux distros usually have this configuration correct "out of the box".) This problem can occur for both networked and non-networked machines. Here is how to fix the configuration. It requires being root. ***** Networked Case First, make sure the files `/etc/hosts' and `/etc/host.conf' both exist. The first line in the `/etc/hosts' file should look like this (replace HOSTNAME with your host name): 127.0.0.1 localhost HOSTNAME Also make sure that the `/etc/host.conf' files contains the following lines: order hosts, bind multi on Any changes, permanent and temporary, to the host name should be indicated in the `/etc/hosts' file, since it acts a limited local database of addresses and names (e.g., some SLIP connections dynamically allocate ip addresses). ***** Non-Networked Case The solution described in the networked case applies here as well. However, if you never intend to network your machine, you can use a simpler solution: create an empty `/etc/host.conf' file. The command `touch /etc/host.conf' suffices to create the file. The `/etc/hosts' file is not necessary with this approach. **** New problem: IPv6 CNAME lookup A newer problem is due to XEmacs changing to use the modern getaddrinfo() interface from the older gethostbyname() interface. The solution above is insufficient, because getaddrinfo() by default tries to get IPv6 information for localhost. This always involves a dns lookup to get the CNAME, and the strategies above don't work. It then falls back to IPv4 behavior. This is good[tm] according the people at WIDE who know about IPv6. ***** Robust network case Configure your network so that there are no nameservers configured until the network is actually running. getaddrinfo() will not try to access a nameserver that isn't configured. ***** Flaky network case If you have a flaky modem or DSL connection that can be relied on only to go down whenever you want to bring XEmacs up, you need to force IPv4 behavior. Explicitly setting DISPLAY=127.0.0.1:0.0 (or whatever is appropriate) works in most cases. If you cannot or do not want to do that, you can hard code IPv4 behavior in src/process-unix.c. This is bad[tm], on your own head be it. Use the configure option `--with-ipv6-cname=no'. *** Mandrake The Mandrake Linux distribution is attempting to comprehensively update the user interface, and make it consistent across applications. This is very difficult, and will occasionally cause conflicts with applications like Emacs with their own long-established interfaces. Known issues specific to Mandrake or especially common: Some versions of XEmacs (21.1.9 is known) distributed with Mandrake were patched to make the Meta and Alt keysyms synonymous. These normally work as expected in the Mandrake environment. However, custom-built XEmacsen (including all 21.2 betas) will "inexplicably" not respect the "Alt-invokes-Meta-commands" convention. See "I want XEmacs to use the Alt key" below. The color-gcc wrapper (see below) is in common use on the Mandrake platform. *** You get crashes in a non-C locale with Linux GNU Libc 2.0. Internationalization was not the top priority for GNU Libc 2.0. As of this writing (1998-12-28) you may get crashes while running XEmacs in a non-C locale. For example, `LC_ALL=en_US xemacs' crashes while `LC_ALL=C xemacs' runs fine. This happens for example with GNU libc 2.0.7. Installing libintl.a and libintl.h built from gettext 0.10.35 and re-building XEmacs solves the crashes. Presumably soon everyone will upgrade to GNU Libc 2.1 and this problem will go away. *** `C-z', or `M-x suspend-emacs' hangs instead of suspending. If you build with `gpm' support on Linux, you cannot suspend XEmacs because gpm installs a buggy SIGTSTP handler. Either compile with `--with-gpm=no', or don't suspend XEmacs on the Linux console until this bug is fixed. *** With certain fonts, when the cursor appears on a character, the character doesn't appear--you get a solid box instead. One user on a Linux system reported that this problem went away with installation of a new X server. The failing server was XFree86 3.1.1. XFree86 3.1.2 works. ** IRIX *** On Irix, I don't see the toolbar icons and I'm getting lots of entries in the warnings buffer. SGI ships a really old Xpm library in /usr/lib which does not work at all well with XEmacs. The solution is to install your own copy of the latest version of Xpm somewhere and then use the --site-includes and --site-libraries flags to tell configure where to find it. *** Trouble using ptys on IRIX, or running out of ptys. The program mkpts (which may be in `/usr/adm' or `/usr/sbin') needs to be set-UID to root, or non-root programs like Emacs will not be able to allocate ptys reliably. *** Beware of the default image & graphics library on Irix Richard Cognot writes: You *have* to compile your own jpeg lib. The one delivered with SGI systems is a C++ lib, which apparently XEmacs cannot cope with. ** Digital UNIX/OSF/VMS/Ultrix *** XEmacs crashes on Digital Unix within font-lock, or when dealing with large compilation buffers, or in other regex applications. The default stack size under Digital Unix is rather small (2M as opposed to Solaris 8M), hosing the regexp code, which uses alloca() extensively, overflowing the stack when complex regexps are used. Workarounds: 1) Increase your stack size, using `ulimit -s 8192' or a (t)csh equivalent; 2) Recompile regex.c with REGEX_MALLOC defined. *** The `Alt' key doesn't behave as `Meta' when running DECwindows. The default DEC keyboard mapping has the Alt keys set up to generate the keysym `Multi_key', which has a meaning to xemacs which is distinct from that of the `Meta_L' and `Meta-R' keysyms. A second problem is that certain keys have the Mod2 modifier attached to them for no adequately explored reason. The correct fix is to pass this file to xmodmap upon starting X: clear mod2 keysym Multi_key = Alt_L add mod1 = Alt_L add mod1 = Alt_R *** The Compose key on a DEC keyboard does not work as Meta key. This shell command should fix it: xmodmap -e 'keycode 0xb1 = Meta_L' *** `expand-file-name' fails to work on any but the machine you dumped Emacs on. On Ultrix, if you use any of the functions which look up information in the passwd database before dumping Emacs (say, by using expand-file-name in site-init.el), then those functions will not work in the dumped Emacs on any host but the one Emacs was dumped on. The solution? Don't use expand-file-name in site-init.el, or in anything it loads. Yuck - some solution. I'm not sure why this happens; if you can find out exactly what is going on, and perhaps find a fix or a workaround, please let us know. Perhaps the YP functions cache some information, the cache is included in the dumped Emacs, and is then inaccurate on any other host. ** HP-UX *** I get complaints about the mapping of my HP keyboard at startup, but I haven't changed anything. The default HP keymap is set up to have Mod1 assigned to two different keys: Meta_L and Mode_switch (even though there is not actually a Mode_switch key on the keyboard -- it uses an "imaginary" keycode.) There actually is a reason for this, but it's not a good one. The correct fix is to execute this command upon starting X: xmodmap -e 'remove mod1 = Mode_switch' *** On HP-UX, you get "poll: Interrupted system call" message in the window where XEmacs was launched. Richard Cognot writes: I get a very strange problem when linking libc.a dynamically: every event (mouse, keyboard, expose...) results in a "poll: Interrupted system call" message in the window where XEmacs was launched. Forcing a static link of libc.a alone by adding /usr/lib/libc.a at the end of the link line solves this. Note that my 9.07 build of 19.14b17 and my (old) build of 19.13 both exhibit the same behavior. I've tried various hpux patches to no avail. If this problem cannot be solved before the release date, binary kits for HP *must* be linked statically against libc, otherwise this problem will show up. (This is directed at whoever will volunteer for this kit, as I won't be available to do it, unless 19.14 gets delayed until mid-june ;-). I think this problem will be an FAQ soon after the release otherwise. Note: The above entry is probably not valid for XEmacs 21.0 and later. *** The right Alt key works wrong on German HP keyboards (and perhaps other non-English HP keyboards too). This is because HP-UX defines the modifiers wrong in X. Here is a shell script to fix the problem; be sure that it is run after VUE configures the X server. xmodmap 2> /dev/null - << EOF keysym Alt_L = Meta_L keysym Alt_R = Meta_R EOF xmodmap - << EOF clear mod1 keysym Mode_switch = NoSymbol add mod1 = Meta_L keysym Meta_R = Mode_switch add mod2 = Mode_switch EOF *** XEmacs dumps core at startup when native audio is used. Native audio does not work with recent versions of HP-UX. Under HP-UX 10.20 and later (e.g., HP-UX 11.XX), with native audio enabled, the dumped XEmacs binary ("xemacs") core dumps at startup if recent versions of the libAlib.sl audio shared library is used. Note that "temacs" will run, but "xemacs" will dump core. This, of course, causes the XEmacs build to fail. If GNU malloc is enabled, a stack trace will show XEmacs to have crashed in the "first" call to malloc(). This bug currently exists in all versions of XEmacs, when the undump mechanism is used. It is not known if using the experimental portable dumper will allow native audio to work. **** Cause: Recent versions of the HP-UX 10.20 (and later) audio shared library (in /opt/audio/lib), pulls in the libdce shared library, which pulls in a thread (libcma) library. This prevents the HP-UX undump() routine (in unexhp9k800.c) from properly working. What's happening is that some initialization routines are being called in the libcma library, *BEFORE* main() is called, and these initialization routines are calling malloc(). Unfortunately, in order for the undumper to work, XEmacs must adjust (move upwards) the sbrk() value *BEFORE* the first call to malloc(); if malloc() is called before XEmacs has properly adjusted sbrk (which is what is happening), dumped memory that is being used by XEmacs, is improperly re-allocated for use by malloc() and the dumped memory is corrupted. This causes XEmacs to die an horrible death. It is believed that versions of the audio library past December 1998 will trigger this problem. Under HP-UX 10.20, you probably have to install audio library patches to encounter this. It's probable that recent "fresh, out-of-the-box" HP-UX 11.XX workstations also have this problem. For HP-UX 10.20, it's believed that audio patch PHSS_17121 (or a superceeding one, like PHSS_17554, PHSS_17971, PHSS_18777, PHSS_21481, or PHSS_21662, etc.) will trigger this. To check if your audio library will cause problems for XEmacs, run "chatr /opt/audio/lib/libAlib.sl". If "libdce" appears in the displayed shared library list, XEmacs will probably encounter problems if audio is enabled. **** Workaround: Don't enable native audio. Re-run configure without native audio support. If your site supports it, try using NAS (Network Audio Support). Try using the experimental portable dumper. It may work, or it may not. *** `Pid xxx killed due to text modification or page I/O error' On HP-UX, you can get that error when the Emacs executable is on an NFS file system. HP-UX responds this way if it tries to swap in a page and does not get a response from the server within a timeout whose default value is just ten seconds. If this happens to you, extend the timeout period. *** Shell mode on HP-UX gives the message, "`tty`: Ambiguous". christos@theory.tn.cornell.edu says: The problem is that in your .cshrc you have something that tries to execute `tty`. If you are not running the shell on a real tty then tty will print "not a tty". Csh expects one word in some places, but tty is giving it back 3. The solution is to add a pair of quotes around `tty` to make it a single word: if (`tty` == "/dev/console") should be changed to: if ("`tty`" == "/dev/console") Even better, move things that set up terminal sections out of .cshrc and into .login. ** SCO *** Regular expressions matching bugs on SCO systems. On SCO, there are problems in regexp matching when Emacs is compiled with the system compiler. The compiler version is "Microsoft C version 6", SCO 4.2.0h Dev Sys Maintenance Supplement 01/06/93; Quick C Compiler Version 1.00.46 (Beta). The solution is to compile with GCC. ** Windows *** Conflicts with FSF NTEmacs Depending on how it is installed, FSF NTEmacs may setup various EMACS* variables in your environment. The presence of these variables may cause XEmacs to fail at startup, cause you to see corrupted doc-strings, or cause other random problems. You should remove these variables from your environment. These variables are not required to run FSF NTEmacs if you start it by running emacs.bat. *** XEmacs can't find my init file XEmacs looks for your init in your "home" directory -- either in `~/.xemacs/init.el' or `~/.emacs'. XEmacs decides that your "home" directory is, in order of preference: - The value of the HOME environment variable, if the variable exists. - The value of the registry entry SOFTWARE\XEmacs\XEmacs\HOME, if it exists. - The value of the HOMEDRIVE and HOMEPATH environment variables, if these variables both exist. - C:\. To determine what XEmacs thinks your home directory is, try opening a file in the `~' directory, and you should see its expansion in the modeline. If this doesn't work, type ESC : (user-home-directory). *** XEmacs can't find any packages XEmacs looks for your packages in subdirectories of a directory which is set at compile-time (see `config.inc'), and whose default is `C:\Program Files\XEmacs'. XEmacs also looks in `~/.xemacs', where `~' refers to your home directory (see previous entry). The variable `configure-package-path' holds the actual path that was compiled into your copy of XEmacs. The compile-time default location can be overridden by the EMACSPACKAGEPATH environment variable or by the SOFTWARE\XEmacs\XEmacs\EMACSPACKAGEPATH registry entry. You should check that these variables, if they exist, point to the actual location of your package tree. *** XEmacs doesn't die when shutting down Windows 95 or 98 When shutting down Windows 95 or 98 you may see a dialog that says "xemacs / You must quit this program before you quit Windows". It is safe to "Click OK to quit the program and Windows", but you won't be offered a chance to save any modified XEmacs buffers. *** Key bindings The C-z, C-x, C-c, and C-v keystrokes have traditional uses in both emacs and Windows programs. XEmacs binds these keys to their traditional emacs uses, and provides Windows 3.x style bindings for the Cut, Copy and Paste functions. Function XEmacs binding -------- -------------- Undo C-_ Cut Sh-Del Copy C-Insert Paste Sh-Insert You can rebind keys to make XEmacs more Windows-compatible; for example, to bind C-z to undo: (global-set-key [(control z)] 'undo) Rebindind C-x and C-c is trickier because by default these are prefix keys in XEmacs. See the "Key Bindings" node in the XEmacs manual. *** Behavior of selected regions Use the pending-del package to enable the standard Windows behavior of self-inserting deletes region. *** Limitations on the use of the AltGr key. In some locale and OS combinations you can't generate M-AltGr-key or C-M-AltGr-key sequences at all. To generate C-AltGr-key or C-M-AltGr-key sequences you must use the right-hand Control key and you must press it *after* AltGr. These limitations arise from fundamental problems in the way that the win32 API reports AltGr key events. There isn't anything that XEmacs can do to work round these problems that it isn't already doing. You may want to create alternative bindings if any of the standard XEmacs bindings require you to use some combination of Control or Meta and AltGr. *** Limited support for subprocesses under Windows 9x Attempting to use call-process to run a 16bit program gives a "Spawning child process: Exec format error". For example shell-command fails under Windows 95 and 98 if you use command.com or any other 16bit program as your shell. XEmacs may incorrectly quote your call-process command if it contains double quotes, backslashes or spaces. start-process and functions that rely on it are supported under Windows 95, 98 and NT. However, starting a 16bit program that requires keyboard input may cause XEmacs to hang or crash under Windows 95 and 98, and will leave the orphaned 16bit program consuming all available CPU time. Sending signals to subprocesses started by call-process or by start-process fails with a "Cannot send signal to process" error under Windows 95 and 98. As a side effect of this, quitting XEmacs while it is still running subprocesses causes it to crash under Windows 95 and 98. ** Cygwin *** Signal 11 when building or running a dumped XEmacs. See the section on Cygwin above, under building. *** XEmacs fails to start because cygXpm-noX4.dll was not found. Andy Piper sez: cygXpm-noX4 is part of the cygwin distribution under libraries or graphics, but is not installed by default. You need to run the cygwin setup again and select this package. *** Subprocesses do not work. 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. This is a known problem. It can be remedied by defining BROKEN_SIGIO in src/s/cygwin.h, however this currently leads to instability in XEmacs. (#### is this still true?) *** Errors from make like `/c:not found' when running `M-x compile'. Make sure you set the environment variable MAKE_MODE to UNIX in your init file (.xemacs/init.el), Control Panel (Windows 2000/NT), or AUTOEXEC.BAT (Windows 98/95). *** There are no images in the toolbar buttons. You need version 4.71 of commctrl.dll which does not ship with windows 95. You can get this by installing IE 4.0 or downloading it from the microsoft website. * Compatibility problems (with Emacs 18, GNU Emacs, or previous XEmacs/lemacs) ============================================================================== *** "Symbol's value as variable is void: unread-command-char". "Wrong type argument: arrayp, #" "Wrong type argument: stringp, [#]" There are a few incompatible changes in XEmacs, and these are the symptoms. Some of the emacs-lisp code you are running needs to be updated to be compatible with XEmacs. The code should not treat keymaps as arrays (use `define-key', etc.), should not use obsolete variables like `unread-command-char' (use `unread-command-events'). Many (most) of the new ways of doing things are compatible in GNU Emacs and XEmacs. Modern Emacs packages (Gnus, VM, W3, efs, etc) are written to support GNU Emacs and XEmacs. We have provided modified versions of several popular emacs packages (dired, etc) which are compatible with this version of emacs. Check to make sure you have not set your load-path so that your private copies of these packages are being found before the versions in the lisp directory. Make sure that your load-path and your $EMACSLOADPATH environment variable are not pointing at an Emacs18 lisp directory. This will cripple emacs. ** Some packages that worked before now cause the error Wrong type argument: arrayp, # Code which uses the `face' accessor functions must be recompiled with xemacs 19.9 or later. The functions whose callers must be recompiled are: face-font, face-foreground, face-background, face-background-pixmap, and face-underline-p. The .elc files generated by version 19.9 will work in 19.6 and 19.8, but older .elc files which contain calls to these functions will not work in 19.9. ** Signaling: (error "Byte code stack underflow (byte compiler bug), pc 38") This error is given when XEmacs 20 is compiled without MULE support but is attempting to load a .elc which requires MULE support. The fix is to rebytecompile the offending file. ** Signaling: (wrong-type-argument ...) when loading mail-abbrevs The is seen when installing the Insidious Big Brother Data Base (bbdb) which includes an outdated copy of mail-abbrevs.el. Remove the copy that comes with bbdb and use the one that comes with XEmacs. * MULE issues ============= ** A reminder: XEmacs/Mule work does not currently receive *any* funding, and all work is done by volunteers. If you think you can help, please contact the XEmacs maintainers. ** XEmacs/Mule doesn't support TTY's satisfactorily. This is a major problem, which we plan to address in a future release of XEmacs. Basically, XEmacs should have primitives to be told whether the terminal can handle international output, and which locale. Also, it should be able to do approximations of characters to the nearest supported by the locale. ** Internationalized (Asian) Isearch doesn't work. Currently, Isearch doesn't directly support any of the input methods that are not XIM based (like egg, canna and quail) (and there are potential problems with XIM version too...). If you're using egg there is a workaround. Hitting right after C-s to invoke Isearch will put Isearch in string mode, where a complete string can be typed into the minibuffer and then processed by Isearch afterwards. Since egg is now supported in the minibuffer using string mode you can now use egg to input your Japanese, Korean or Chinese string, then hit return to send that to Isearch and then use standard Isearch commands from there. ** Using egg and mousing around while in 'fence' mode screws up my buffer. Don't do this. The fence modes of egg and canna are currently very modal, and messing with where they expect point to be and what they think is the current buffer is just asking for trouble. If you're lucky they will realize that something is awry, and simply delete the fence, but worst case can trash other buffers too. We've tried to protect against this where we can, but there still are many ways to shoot yourself in the foot. So just finish what you are typing into the fence before reaching for the mouse. ** Not all languages in Quail are supported like Devanagari and Indian languages, Lao and Tibetan. Quail requires more work and testing. Although it has been ported to XEmacs, it works really well for Japanese and for the European languages. ** Right-to-left mode is not yet implemented, so languages like Arabic, Hebrew and Thai don't work. Getting this right requires more work. It may be implemented in a future XEmacs version, but don't hold your breath. If you know someone who is ready to implement this, please let us know. ** We need more developers and native language testers. It's extremely difficult (and not particularly productive) to address languages that nobody is using and testing. ** The kWnn and cWnn support for Chinese and Korean needs developers and testers. It probably doesn't work. ** There are no `native XEmacs' TUTORIALs for any Asian languages, including Japanese. FSF Emacs and XEmacs tutorials are quite similar, so it should be sufficient to skim through the differences and apply them to the Japanese version. ** We only have localized menus translated for Japanese, and the Japanese menus are developing bitrot (the Mule menu appears in English). ** XIM is untested for any language other than Japanese. xemacs-21.4.22/README0000644000175000017500000000556107267512533012141 0ustar acsacsThis directory tree holds version 21.4 of XEmacs, the extensible, customizable, self-documenting real-time display editor. This version of XEmacs also runs on various Microsoft Windows platforms including MS Windows '95 and MS Windows NT and Cygwin. See the file `etc/NEWS' for information on new features and other user-visible changes since the last version of XEmacs. The file `INSTALL' in this directory says how to bring up XEmacs on Unix and Cygwin, once you have loaded the entire subtree of this directory. The file `PROBLEMS' contains information on many common problems that occur in building, installing and running XEmacs. See the file `nt/README' for instructions on building XEmacs for Microsoft Windows. The file 'README.packages' will guide you in the installation of (essential) add on packages. Reports of bugs in XEmacs should be posted to the newsgroup comp.emacs.xemacs or sent to the mailing list xemacs@xemacs.org. See the "Bugs" section of the XEmacs manual for more information on how to report bugs. (The file `BUGS' in this directory explains how you can find and read that section using the Info files that come with XEmacs.) See `etc/MAILINGLISTS' for more information on mailing lists relating to XEmacs and other GNU products. The file `configure' is a shell script to acclimate XEmacs to the oddities of your processor and operating system. It will create a file named `Makefile' (a script for the `make' program), which helps automate the process of building and installing emacs. See INSTALL for more detailed information. The file `configure.in' is the input used by the autoconf program to construct the `configure' script. Since XEmacs has configuration requirements that autoconf can't meet, `configure.in' uses an unholy marriage of custom-baked configuration code and autoconf macros; it may be wise to avoid rebuilding `configure' from `configure.in' when possible. The file `Makefile.in' is a template used by `configure' to create `Makefile'. There are several subdirectories: `src' holds the C code for Emacs (the XEmacs Lisp interpreter and its primitives, the redisplay code, and some basic editing functions). `lisp' holds the Emacs Lisp code for XEmacs (most everything else). `lib-src' holds the source code for some utility programs for use by or with XEmacs, like movemail and etags. `etc' holds miscellaneous architecture-independent data files XEmacs uses, like the tutorial text and the Zippy the Pinhead quote database. The contents of the `lisp', `info' and `man' subdirectories are architecture-independent too. `lwlib' holds the C code for the toolkit objects used by XEmacs. `info' holds the Info documentation tree for XEmacs. `man' holds the source code for the XEmacs info documentation tree. `nt' holds configuration files for compiling XEmacs under Microsoft Windows NT. The support for NT is very tentative right now. xemacs-21.4.22/README.packages0000644000175000017500000002577410072657446013727 0ustar acsacs -*- Outline -*- This file is in Outline mode. It is best viewed under XEmacs. Press C-c C-o (Ctrl+c Ctrl+o) now to see a list of headings. To expand a heading: Put the cursor on the heading and press C-c C-s To collapse a heading: Press C-c C-d For general XEmacs navigation tips: Press C-h t The XEmacs Packages Quick Start Guide ------------------------------------- This text is intended to help you get started installing a new XEmacs and its packages. For more details see the 'Startup Paths' and 'Packages' sections of the XEmacs info manual. * Real Real Quickstart FAQ -------------------------- Q. Do I need to have the packages to compile XEmacs? A. Theoretically, no -- XEmacs will build and install just fine without any packages installed. However, only the most basic editing functions will be available with no packages installed, so installing packages is an essential part of making your installed XEmacs _useful_. Q. I really liked the old way that packages were bundled and do not want to mess with packages at all. A. You can grab all the packages at once like you used to with old XEmacs versions, skip to the 'Sumo Tarball' section below. Q. How do I tell XEmacs where to find the packages? A. Normally, you put the packages under $prefix/lib/packages, where $prefix is specified using the `--prefix' parameter to `configure'. (See `Package hierarchies' below). However, if you have the packages somewhere else (e.g. you're a developer and are compiling the packages yourself, and want your own private copy of everything), use the `--package-path' parameter, something like this: configure --package-path="~/.xemacs::/src/xemacs/site-packages:/src/xemacs/xemacs-packages:/src/xemacs/mule-packages" ... Q. After installing, I want XEmacs to do `foo', but when I invoke it (or click the toolbar button or select the menu item), nothing (or an error) happens, and it used to work. A. See the first FAQ; you may be missing a package that is essential to you. You can either track it down and install it, or install the `Sumo Tarball' (see the second FAQ). * A note of caution ------------------- The XEmacs package system is still in its infancy. Please expect a few minor hurdles on the way. Also neither the interface nor the structure is set in stone. The XEmacs maintainers reserve the right to sacrifice backwards compatibility as quirks are worked out over the coming releases. * Some package theory --------------------- In order to reduce the size and increase the maintainability of XEmacs, the majority of the Elisp packages that came with previous releases have been unbundled. They have been replaced by the package system. Each elisp add-on (or groups of them when they are small) now comes in its own tarball that contains a small search hierarchy. You select just the ones you need. Install them by untarring them into the right place. On startup XEmacs will find them, set up the load path correctly, install autoloads, etc, etc. * Package hierarchies --------------------- On Startup XEmacs looks for packages in so-called package hierarchies. Normally, there are three system wide hierarchies, like this: $prefix/lib/xemacs/xemacs-packages/ Normal packages go here. $prefix/lib/xemacs/mule-packages/ Mule packages go here and are only searched by MULE-enabled XEmacsen. $prefix/lib/xemacs/site-packages/ Local and 3rd party packages go here. This is what you get when you untar the SUMO tarballs under $prefix/lib/xemacs. $prefix is specified using the `--prefix' parameter to `configure', and defaults to `usr/local'. If your packages are located in the above directories, XEmacs will automatically find them at startup; however, if you have your packages somewhere else (e.g. you're a developer and are compiling the packages yourself, and want your own private copy of everything), you can tell XEmacs specifically where to look for the packages by using the `--package-path' parameter to the 'configure' script. Normally, it looks like this: configure --package-path="~/.xemacs::/src/xemacs/site-packages:/src/xemacs/xemacs-packages:/src/xemacs/mule-packages" ... See `configure.usage' for more info about the format of this parameter. * Where to get the packages --------------------------- Packages are available from ftp://ftp.xemacs.org/pub/xemacs/packages and its mirrors. * How to install the packages ----------------------------- There are a few different ways to install packages: 1. Automatically, using the package tools from XEmacs. 2. Manually, using individual package tarballs. 3. Manually, all at once, using the 'Sumo Tarball'. ** Automatically, using the package tools from XEmacs ----------------------------------------------------- XEmacs comes with some tools to make the periodic updating and installing easier. It will notice if new packages or versions are available and will fetch them from the FTP site. Unfortunately this requires that a few packages are already in place. You will have to install them by hand as above or use a SUMO tarball. This requirement will hopefully go away in the future. The packages you need are: efs - To fetch the files from the FTP site or mirrors. xemacs-base - Needed by efs. and optionally: mailcrypt - For PGP verification of the package-index file. After installing these by hand, fire up XEmacs and follow these steps. (1) Choose a download site. - via menu: Tools -> Packages -> Set Download Site - via keyb: M-x customize-variable RET package-get-remote RET (put in the details of remote host and directory) If the package tarballs _AND_ the package-index file are in a local directory, you can: M-x pui-set-local-package-get-directory RET (2) Obtain a list of packages and display the list in a buffer named "*Packages*". - menu: Tools -> Packages -> List & Install - keyb: M-x pui-list-packages RET XEmacs will now connect to the remote site and download the latest package-index file. The resulting buffer, "*Packages*" has brief instructions at the end of the buffer. (3) Choose the packages you wish to install. - mouse: Click button 2 on the package name. - keyb: RET on the package name (4) Make sure you have everything you need. - menu: Packages -> Add Required - keyb: r XEmacs will now search for packages that are required by the ones that you have chosen to install and offer to select those packages also. For novices and gurus alike, this step can save your bacon. It's easy to forget to install a critical package. (5) Download and install the packages. - menu: Packages -> Install/Remove Selected - keyb: x ** Manually, using individual package tarballs ---------------------------------------------- Fetch the packages from the FTP site, CD-ROM whatever. The filenames have the form name--pkg.tar.gz and are gzipped tar files. For a fresh install it is sufficient to untar the file at the top of the package hierarchy. Note: If you are upgrading packages already installed, it's best to remove the old package first (see 'Upgrading/Removing Packages' below). For example if we are installing the 'xemacs-base' package (version 1.48): mkdir $prefix/lib/xemacs/xemacs-packages RET # if it does not exist yet cd $prefix/lib/xemacs/xemacs-packages RET gunzip -c /path/to/xemacs-base-1.48-pkg.tar.gz | tar xvf - RET Or if you have GNU tar, the last step can be: tar zxvf /path/to/xemacs-base-1.48-pkg.tar.gz RET For MULE related packages, it is best to untar into the mule-packages hierarchy, i.e. for the mule-base package, version 1.37: mkdir $prefix/lib/xemacs/mule-packages RET # if it does not exist yet cd $prefix/lib/xemacs/mule-packages RET gunzip -c /path/to/mule-base-1.37-pkg.tar.gz | tar xvf - RET Or if you have GNU tar, the last step can be: tar zxvf /path/to/mule-base-1.37-pkg.tar.gz RET ** Manually, all at once, using the 'Sumo Tarball' -------------------------------------------------- Those with little time, cheap connections and plenty of disk space can install all the packages at once using the sumo tarballs. Download the file: xemacs-sumo.tar.gz For an XEmacs compiled with Mule you also need: xemacs-mule-sumo.tar.gz N.B. They are called 'Sumo Tarballs' for good reason. They are currently about 19MB and 4.5MB (gzipped) respectively. Install them by: cd $prefix/lib/xemacs ; gunzip -c | tar xvf - RET Or, if you have GNU tar: cd $prefix/lib/xemacs ; tar zxvf /path/to/ RET As the Sumo tarballs are not regenerated as often as the individual packages, it is recommended that you use the automatic package tools afterwards to pick up any recent updates. * After Installation -------------------- Updated packages can only be used by XEmacs after a restart. * Which Packages to install? ---------------------------- This is difficult to say. When in doubt install a package. If you administrate a big site it might be a good idea to just install everything. A good minimal set of packages for XEmacs-latin1 would be xemacs-base, xemacs-devel, c-support, cc-mode, debug, dired, efs, edit-utils, fsf-compat, mail-lib, net-utils, os-utils, prog-modes, text-modes, time, mailcrypt If you are using the XEmacs package tools, don't forget to do: Packages -> Add Required To make sure you have everything that the packages you have chosen to install need. See also '.../etc/PACKAGES' for further descriptions of the individual packages. * Upgrading/Removing Packages ----------------------------- As the exact files and their locations contained in a package may change it is recommended to remove a package first before installing a new version. In order to facilitate removal each package contains an pgkinfo/MANIFEST.pkgname file which list all the files belong to the package. M-x package-admin-delete-binary-package RET can be used to remove a package using this file. Note that the interactive package tools included with XEmacs already do this for you. * User Package directories -------------------------- In addition to the system wide packages, each user can have his own packages installed under "~/.xemacs/". If you want to install packages there using the interactive tools, you need to set 'package-get-install-to-user-init-directory' to 't' * Site lisp/Site start ---------------------- The site-packages hierarchy replaces the old 'site-lisp' directory. XEmacs no longer looks into a 'site-lisp' directly by default. A good place to put 'site-start.el' would be in $prefix/lib/xemacs/site-packages/lisp/ * Finding the right packages ---------------------------- If you want to find out which package contains the functionality you are looking for, use M-x package-get-package-provider, and give it a symbol that is likely to be in that package. For example, if some code you want to use has a (require 'thingatpt) in it: M-x package-get-package-provider RET thingatpt RET which will return something like: (fsf-compat "1.08"). xemacs-21.4.22/aclocal.m40000644000175000017500000003676407745076140013132 0ustar acsacsdnl aclocal.m4 --- Dynamically linked library support for XEmacs dnl Copyright (C) 1998, 1999 J. Kean Johnston. dnl Author: J. Kean Johnston , based on work in libtool. dnl This file is part of XEmacs. dnl dnl There are several things we care about here. First, we need to find dnl out how we create an executable that has its symbols exported, so dnl that dynamically loaded modules have access to the internal XEmacs dnl symbols. This is stored in ``ld_dynamic_link_flags'' and is used dnl in the main Makefile. dnl Next, we need to know how we compile actual shared libraries, and dnl the objects in them. For these purposes, we need to determine the dnl C compiler flags used to produce shared objects (``dll_cflags''), dnl what linker to use to create the final shared object that will be dnl loaded (``dll_ld'') and the flags to pass to that linker dnl (``dll_ldflags''). This information is used by ellcc to build up dnl the command line when compiling modules. We build up two other commands dnl for extremely weird systems where special things need to be done. dnl The first is ``dll_ldo'', which is the flag used to specify the output dnl file name, and the second is ``dll_post'' which is inserted after the dnl list of objects. dnl After all of this, we should be able to: dnl $(CC) $(CFLAGS) $(dll_cflags) -c module.c dnl to produce a single shared object dnl And then: dnl $(dll_ld) $(dll_ldflags) $(dll_ldo) module.ell module.o $(dll_post) dnl to create the loadable shared library. dnl dnl NOTE: In the code below, where I have modified things to work with dnl XEmacs, we use $canonical instead of libtool's $host, and we use dnl $internal_configuration instead of $host_alias. To make typing dnl shorter we assign these to $xehost and $xealias AC_DEFUN(XE_SHLIB_STUFF,[ dll_ld= dll_ldflags= dll_cflags= dll_post= dll_ldo="-o" ld_dynamic_link_flags= xehost=$canonical xealias=$internal_configuration AC_CHECKING([how to build dynamic libraries for ${xehost}]) # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts. case "$xehost" in *-*-linux-gnu*) ;; *-*-linux*) xehost=`echo $xehost | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` esac changequote(<<, >>)dnl xehost_cpu=`echo $xehost | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` xehost_vendor=`echo $xehost | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` xehost_os=`echo $xehost | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` changequote([, ])dnl case "$xehost_os" in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "${COLLECT_NAMES+set}" != set; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Now see if the compiler is really GCC. if test "$GCC" = "yes"; then XEGCC=yes else AC_MSG_CHECKING(checking whether we are using GNU C) AC_EGREP_CPP(yes,[ #ifdef __GNUC__ yes; #endif ],XEGCC=yes, XEGCC=no) AC_MSG_RESULT([${XEGCC}]) fi AC_MSG_CHECKING(how to produce PIC code) wl= can_build_shared=yes if test "$XEGCC" = yes -o "$__ICC" = yes; then wl='-Wl,' case "$xehost_os" in aix[[3-9]]* | irix[[5-9]]* | osf[[3-9]]) # PIC is the default for these OSes. ;; os2*) # We can build DLLs from non-PIC. ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. dll_cflags='-m68020 -resident32 -malways-restore-a4' ;; *cygwin* | *mingw* ) # PIC is the default ;; *) dll_cflags='-fPIC' ;; esac else # PORTME Check for PIC flags for the system compiler. case "$xehost_os" in hpux9* | hpux1[[0-9]]*) # Is there a better link_static_flag that works with the bundled CC? wl='-Wl,' dll_cflags='+Z' ;; irix[[5-9]]*) wl='-Wl,' # PIC (with -KPIC) is the default. ;; os2*) # We can build DLLs from non-PIC. ;; osf[[3-9]]*) # All OSF/1 code is PIC. wl='-Wl,' ;; aix[[3-9]]*) # All AIX code is PIC. wl='-Wl,' ;; sco3.2v5*) dll_cflags='-belf -Kpic' wl='-Wl,' ;; unixware*) dll_cflags="-KPIC" wl="-Wl," ;; sysv4*) dll_cflags="-KPIC" wl="-Wl," ;; sysv5*) dll_cflags="-KPIC" wl="-Wl," ;; solaris2*) dll_cflags='-KPIC' wl='-Wl,' ;; sunos4*) dll_cflags='-PIC' wl='-Qoption ld ' ;; uts4*) dll_cflags='-pic' ;; *) can_build_shared=no ;; esac fi if test -n "$dll_cflags"; then AC_MSG_RESULT([${dll_cflags}]) # Check to make sure the dll_cflags actually works. AC_MSG_CHECKING([if PIC flag ${dll_cflags} really works]) save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $dll_cflags -DPIC" AC_TRY_COMPILE(,[int x=0;],[ # On HP-UX, the stripped-down bundled CC doesn't accept +Z, but also # reports no error. So, we need to grep stderr for (Bundled). if grep '(Bundled)' config.log >/dev/null; then AC_MSG_RESULT(no) can_build_shared=no dll_cflags= else AC_MSG_RESULT(yes) fi], [AC_MSG_RESULT(no) can_build_shared=no dll_cflags=]) CFLAGS="$save_CFLAGS" else AC_MSG_RESULT(none) fi dnl dnl Now comes the LD trickery. We do things differently to libtool here. dnl I believe that libtool is incorrect in trying to drive the linker dnl directly. This can cause considerable problems if the module you are dnl compiling has C++ or other static initializers. If we use ld directly, dnl we don't end up with the crt stuff being linked in, and we don't end up dnl with any .init or .fini sections (or the moral equivalent thereof). dnl gcc takes great care to do this properly when invoked in -shared dnl mode, and we really do want this behavior. Perhaps the libtool folks dnl are not aware that any SVR4 based dynamic loader will automatically dnl execute code in the .init section before dlopen() returns. This is dnl vital, as the module may have been compiled to rely on that behavior. dnl dnl So, having said all of that, we diverge from libtool significantly dnl here. We want to try and use the C compiler as much as possible. Only dnl if the C compiler itself cannot create shared libraries to we try to dnl find the linker. dnl dnl The other advantage to my scheme is that it removes the dependancy dnl on a given compiler version remaining static with relation to the dnl version of XEmacs. With the libtool way, it picks up the linker that dnl gcc uses, which can be the internal collect2 that comes with gcc. dnl If the user ever changes their compiler version, the paths will no dnl longer be correct, and ellcc will break. This is clearly unacceptable. dnl By using the compiler driver on the path, we don't have this problem. dnl If that is not clear, consider that gcc -print-prog-name=ld can dnl produce something along the lines of: dnl /usr/local/lib/gcc-lib/OS-NAME/GCC-VERSION/ld dnl If you ever change GCC versions, then that path no longer exists. dnl dnl So, we change the check order here. We first check to see if we are dnl using GCC, and if so, we see if -shared works. If it does, great. dnl If we are not using gcc, but the system C compiler can produce dnl shared objects, we try that. Only if all of that fails do we revert dnl back to the libtool ld trickery. dnl dnl We don't do ANY of this if we can't produce shared objects. dnl if test "$can_build_shared" = "yes"; then cc_produces_so=no xldf= xcldf= AC_MSG_CHECKING(if C compiler can produce shared libraries) if test "$XEGCC" = yes -o "$__ICC" = yes; then xcldf="-shared" xldf="-shared" else # Not using GCC case "$xehost_os" in aix[[3-9]]*) xldf="-bE:ELLSONAME.exp -H512 -T512 -bhalt:4 -bM:SRE -bnoentry -lc" xcldf="${wl}-bE:ELLSONAME.exp ${wl}-H512 ${wl}-T512 ${wl}-bhalt:4 ${wl}-bM:SRE ${wl}-bnoentry ${wl}-lc" ;; freebsd2* | netbsd* | openbsd*) xldf="-Bshareable" xcldf="${wl}-Bshareable" ;; freebsd3*) xcldf="-shared" ;; hpux*) xldf="-b +s" xcldf="${wl}-b ${wl}+s" ;; irix[[5-9]]* | osf[[3-9]]*) xcldf="${wl}-shared" xldf="-shared" ;; sco3.2v5* | unixware* | sysv5* | sysv4* | solaris2* | solaris7* | uts4*) xcldf="-G" xldf="-G" ;; sunos4*) xcldf="${wl}-assert ${wl}pure-text ${wl}-Bstatic" xldf="-assert pure-text -Bstatic" ;; esac fi # End if if we are using gcc if test -n "$xcldf"; then save_LDFLAGS=$LDFLAGS save_LIBS=$LIBS save_xe_libs=$xe_libs LDFLAGS="$xcldf $LDFLAGS" LIBS= xe_libs= ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&AC_FD_CC' AC_TRY_LINK(,[int x=0;],cc_produces_so=yes,cc_produces_so=no) LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS xe_libs=$save_xe_libs ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&AC_FD_CC' else cc_produces_so=no fi AC_MSG_RESULT([${cc_produces_so}]) LTLD=$LD if test -z "$LTLD"; then ac_prog=ld if test "$XEGCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING(for ld used by GCC) ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. /*) if test -z "$LTLD"; then # case "$ac_prog" in # *gcc-lib*) LTLD="$CC" # ;; # *) LTLD="$ac_prog" # ;; # esac fi ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac else AC_MSG_CHECKING(for GNU ld) fi if test -z "$LTLD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog"; then LTLD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$LTLD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then xe_gnu_ld=yes else xe_gnu_ld=no fi fi done IFS="$ac_save_ifs" fi if test -n "$LTLD"; then AC_MSG_RESULT([${LTLD}]) else AC_MSG_RESULT(no) fi if test -z "$LTLD" -a "$cc_produces_so" = no; then AC_MSG_ERROR(no acceptable linker found in \$PATH) exit 1 fi fi dnl dnl Order of the tests changed somewhat to prevent repetition dnl ld_dynamic_link_flags= # Check to see if it really is or isn't GNU ld. AC_MSG_CHECKING(if the linker is GNU ld) # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LTLD -v 2>&1 &5; then xe_gnu_ld=yes else xe_gnu_ld=no fi AC_MSG_RESULT([${xe_gnu_ld}]) case "$xehost_os" in amigaos* | sunos4*) # On these operating systems, we should treat GNU ld like the system ld. gnu_ld_acts_native=yes ;; *) gnu_ld_acts_native=no ;; esac if test "$cc_produces_so" = "yes"; then dll_ld=$CC dll_ldflags=$xcldf can_build_shared=yes ld_shlibs=yes else # OK - only NOW do we futz about with ld. # See if the linker supports building shared libraries. AC_MSG_CHECKING(whether the linker supports shared libraries) dll_ld=$CC dll_ldflags=$LDFLAGS ld_shlibs=yes can_build_shared=yes if test "$xe_gnu_ld" = yes && test "$gnu_ld_acts_native" != yes; then # See if GNU ld supports shared libraries. if $LTLD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then dll_ld=$CC dll_ldflags="-shared" ld_shlibs=yes else ld_shlibs=no fi else # PORTME fill in a description of your system's linker (not GNU ld) case "$xehost_os" in aix3*) dll_ld=$LTLD dll_ldflags=$xldf ;; aix[[4-9]]*) dll_ldflags=$xcldf ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # doesn't break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) dll_ld=$LTLD dll_ldflags=$xldf dll_post="/usr/lib/c++rt0.o" ;; # Unfortunately, older versions of FreeBSD 2 don't have this feature. freebsd2*) dll_ld=$LTLD dll_ldflags="-Bshareable" ;; # FreeBSD 3, at last, uses gcc -shared to do shared libraries. freebsd3*) dll_ldflags="-shared" ;; hpux*) dll_ld=$LTLD dll_ldflags=$xldf ;; irix[[5-9]]*) dll_ld=$LTLD dll_ldflags=$xldf ;; netbsd*) # Tested with NetBSD 1.2 ld dll_ld=$LTLD dll_ldflags=$xldf ;; openbsd*) dll_ld=$LTLD dll_ldflags=$xldf ;; osf3* | osf4*) dll_ld=$LTLD dll_ldflags=$xldf ;; # For both SCO and Solaris we MAY want to have LDFLAGS include -z text sco3.2v5* | unixware* | sysv5* | sysv4* | solaris2* | solaris7*) dll_ld=$LTLD case "$dll_ld" in *gcc*) dll_ldflags="-shared" dll_ld=$CC ;; *) dll_ldflags="-G" ;; esac ;; sunos4*) if test "$XEGCC" = yes; then dll_ld=$CC else dll_ld=$LTLD fi dll_ldflags=$xldf ;; uts4*) dll_ld=$LTLD dll_ldflags="-G" ;; bsdi*) dll_ldflags="-r" dll_ld="shlicc2" ;; *) ld_shlibs=no can_build_shared=no ;; esac fi AC_MSG_RESULT([${ld_shlibs}]) if test "$ld_shlibs" = "no"; then can_build_shared=no fi fi # End of if cc_produces_so = no dnl dnl Last thing, check how to get a linked executable to have its symbols dnl exported, so that the modules have access to them. dnl dnl XEmacs FIXME - we need to set ld_dynamic_link_flags properly for dnl most of these systems, which was missing from libtool. I know they dnl all have a way of doing this, but someone needs to look at this dnl for each OS and make sure it is correct. Remember that the arguments dnl are passed when temacs is linked, this is NOT for modules. The sole dnl purpose of the argument is to get the internal XEmacs symbols exposed dnl for modules to use. This means that the COMPILER (and NOT the linker) dnl is most often used to create temacs, so arguments to the linker will dnl usually need to be prefix with ${wl} or some other such thing. dnl if test "$xe_gnu_ld" = yes; then if test "$ld_shlibs" = yes; then ld_dynamic_link_flags="${wl}-export-dynamic" fi fi if test -z "$ld_dynamic_link_flags"; then case "$xehost_os" in aix[[3-9]]*) ld_dynamic_link_flags= ;; freebsd2.2*) ld_dynamic_link_flags= ;; freebsd2*) ld_dynamic_link_flags= ;; freebsd3*) ld_dynamic_link_flags= ;; hpux*) ld_dynamic_link_flags="${wl}-E" ;; irix[[5-9]]*) ld_dynamic_link_flags= ;; netbsd*) ld_dynamic_link_flags= ;; openbsd*) ld_dynamic_link_flags= ;; osf3* | osf4*) ld_dynamic_link_flags= ;; solaris2* | solaris7*) ld_dynamic_link_flags= ;; sco3.2v5* | unixware* | sysv5* | sysv4*) ld_dynamic_link_flags="${wl}-Bexport" ;; sunos4*) ld_dynamic_link_flags= ;; uts4*) ld_dynamic_link_flags= ;; bsdi*) ld_dynamic_link_flags= ;; esac fi # End of if -z ld_dynamic_link_flags fi # End of if test "$can_build_shared" = "yes" AC_SUBST(dll_ld) AC_SUBST(dll_cflags) AC_SUBST(dll_ldflags) AC_SUBST(dll_post) AC_SUBST(dll_ldo) AC_SUBST(ld_dynamic_link_flags) ])dnl xemacs-21.4.22/build-msw-release.sh0000644000175000017500000000630007530424326015121 0ustar acsacs#!/bin/sh # This file builds the release kits for both cygwin and win32. You # must have both environments configured for it to work properly. In # particular you must provide a suitable value for NATIVE_ZLIB_DIR. # configuration NATIVE_ZLIB_DIR=/usr/local/mingw/lib PROGRAM_FILES='c:/Program Files/XEmacs' TMPINSTALL=/tmp/local # no configuration past this point INSTALL= FILES= BUILD=1 for OPT in $* do case $OPT in --install) INSTALL=1;; --installonly) INSTALL=1; BUILD='';; --help) echo "usage: build-msw-release.sh [--install]" && exit;; --*) ;; *) FILES="$FILES $OPT";; esac done # pick up version info . version.sh # decide on names emacs_ver=${emacs_major_version}.${emacs_minor_version}.${emacs_beta_version} cygwin_tarball=xemacs-i686-pc-cygwin-${emacs_ver}${emacs_kit_version}.tar.gz win32_tarball=xemacs-i586-pc-win32-${emacs_ver}${emacs_kit_version}.tar.gz DISTDIR=`pwd`/windows # check to see if we should build if test "$BUILD" = "1" then echo "Building the mswindows ${emacs_ver} release" # cleanup everything first if [ -f Makefile ] ; then make distclean fi # nuke the dist dir. rm -rf windows # create a dist directory mkdir -p windows/cygwin32 mkdir -p windows/win32 mkdir -p /usr/local mkdir -p ${TMPINSTALL} # first build win32 (cd nt; nmake -f xemacs.mak clean; nmake -f xemacs.mak) (cd "${PROGRAM_FILES}"; rm -rf ./XEmacs-${emacs_ver}) (cd nt; nmake -f xemacs.mak install; nmake -f xemacs.mak clean) # now build cygwin ./configure --with-dragndrop --with-postgresql=no --with-x=no \ --bindir=/usr/local/bin/i686-pc-cygwin --with-site-lisp=yes \ --with-ipv6-cname=no --with-netinstall make CFLAGS=-O3 MINGW_ZLIB_DIR=${NATIVE_ZLIB_DIR} beta # deal with the netinstaller (cd netinstall; strip setup.exe) cp netinstall/setup.exe windows # the win32 tar ball needs setup.exe cp netinstall/setup.exe \ "${PROGRAM_FILES}"/XEmacs-${emacs_ver}/i586-pc-win32 # make the win32 tarball (cd "${PROGRAM_FILES}"; tar czvf ${DISTDIR}/win32/${win32_tarball} \ ./XEmacs-${emacs_ver}) # make the tarball make prefix=${TMPINSTALL} bindir=${TMPINSTALL}/bin/i686-pc-cygwin install (cd ${TMPINSTALL}; tar czvf ${DISTDIR}/cygwin32/${cygwin_tarball} \ ./bin/i686-pc-cygwin \ ./lib/xemacs-${emacs_ver} \ ./lib/xemacs/lock \ ./man/man1/ctags.1 \ ./man/man1/etags.1 \ ./man/man1/gnuattach.1 \ ./man/man1/gnuclient.1 \ ./man/man1/gnudoit.1 \ ./man/man1/gnuserv.1 \ ./man/man1/xemacs.1; rm -rf bin lib man) # figure out the ini file. cygwin_tarball_size=`ls -l windows/cygwin32/${cygwin_tarball} | awk '{ print $5; }'` win32_tarball_size=`ls -l windows/win32/${win32_tarball} | awk '{ print $5; }'` (cd netinstall; make CYGWIN_SIZE=${cygwin_tarball_size} \ WIN32_SIZE=${win32_tarball_size} \ KIT_VERSION=${emacs_kit_version} setup-bin.ini ) cp netinstall/setup-bin.ini windows # tidy up make distclean fi # end of build # optionally install to the ftp site if test "$INSTALL" != "" then echo "Installing the mswindows ${emacs_ver} release" scp -r -oUser=slb -oProtocol=1 windows/* \ ftp.xemacs.org:/pub/xemacs/windows # update setup.ini ssh -1 -l slb ftp.xemacs.org 'cd /pub/xemacs/windows; sh makeini.sh' fi xemacs-21.4.22/config.guess0000644000175000017500000011546710107032044013562 0ustar acsacs#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. timestamp='2004-08-12' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Written by Per Bothner . # Please send patches to . # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. # # Only a few systems have been added to this list; please add others # (but try to keep the structure clean). # me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi dummy=dummy-$$ trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int dummy(){}" > $dummy.c for c in cc gcc c89 ; do ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 if test $? = 0 ; then CC_FOR_BUILD="$c"; break fi done rm -f $dummy.c $dummy.o $dummy.rel if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 8/24/94.) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # Netbsd (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # Determine the machine/vendor (is the vendor relevant). case "${UNAME_MACHINE}" in amiga) machine=m68k-unknown ;; arm32) machine=arm-unknown ;; atari*) machine=m68k-atari ;; sun3*) machine=m68k-sun ;; mac68k) machine=m68k-apple ;; macppc) machine=powerpc-apple ;; hp3[0-9][05]) machine=m68k-hp ;; ibmrt|romp-ibm) machine=romp-ibm ;; *) machine=${UNAME_MACHINE}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE}" in i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; esac fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; arc64:OpenBSD:*:*) echo mips64el-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hkmips:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; sun3*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i?86:AIX:*:*) echo i386-ibm-aix exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:4) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=4.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:5) case "`lsattr -El proc0 -a type -F value`" in PowerPC*) IBM_ARCH=powerpc IBM_MANUF=ibm ;; Itanium) IBM_ARCH=ia64 IBM_MANUF=unknown ;; POWER*) IBM_ARCH=power IBM_MANUF=ibm ;; *) IBM_ARCH=powerpc IBM_MANUF=ibm ;; esac echo ${IBM_ARCH}-${IBM_MANUF}-aix${UNAME_VERSION}.${UNAME_RELEASE} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) case "${HPUX_REV}" in 11.[0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; esac ;; esac fi ;; esac if [ "${HP_ARCH}" = "" ]; then sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi rm -f $dummy.c $dummy fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i?86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; hppa*:OpenBSD:*:*) echo hppa-unknown-openbsd exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3D:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i386-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; *:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. ld_supported_emulations=`cd /; ld --help 2>&1 \ | sed -ne '/supported emulations:/!d s/[ ][ ]*/ /g s/.*supported emulations: *// s/ .*// p'` case "$ld_supported_emulations" in *ia64) echo "${UNAME_MACHINE}-unknown-linux" exit 0 ;; i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; elf_i?86) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; elf32_sparc) echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; elf32arm*) echo "${UNAME_MACHINE}-unknown-linux-gnuoldld" exit 0 ;; armelf_linux*) echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" exit 0 ;; elf32ppc | elf32ppclinux) # Determine Lib Version cat >$dummy.c < #if defined(__GLIBC__) extern char __libc_version[]; extern char __libc_release[]; #endif main(argc, argv) int argc; char *argv[]; { #if defined(__GLIBC__) printf("%s %s\n", __libc_version, __libc_release); #else printf("unkown\n"); #endif return 0; } EOF LIBC="" $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null if test "$?" = 0 ; then ./$dummy | grep 1\.99 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi rm -f $dummy.c $dummy echo powerpc-unknown-linux-gnu${LIBC} exit 0 ;; shelf_linux) echo "${UNAME_MACHINE}-unknown-linux-gnu" exit 0 ;; esac if test "${UNAME_MACHINE}" = "alpha" ; then cat <$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF LIBC="" $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; esac objdump --private-headers $dummy | \ grep ld.so.1 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 elif test "${UNAME_MACHINE}" = "mips" ; then cat >$dummy.c < /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #ifdef __MIPSEB__ printf ("%s-unknown-linux-gnu\n", argv[1]); #endif #ifdef __MIPSEL__ #ifdef __R5900 /* Little Endian R5900 running Linux, this *must* be Sony PlayStation 2 */ printf ("%sel-PlayStation2-linux-gnu\n", argv[1]); #else printf ("%sel-unknown-linux-gnu\n", argv[1]); #endif #endif return 0; } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy elif test "${UNAME_MACHINE}" = "s390"; then echo s390-ibm-linux && exit 0 elif test "${UNAME_MACHINE}" = "x86_64"; then echo x86_64-unknown-linux-gnu && exit 0 elif test "${UNAME_MACHINE}" = "parisc" -o "${UNAME_MACHINE}" = "hppa"; then # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 else # Either a pre-BFD a.out linker (linux-gnuoldld) # or one that does not give us useful --help. # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. # If ld does not provide *any* "supported emulations:" # that means it is gnuoldld. test -z "$ld_supported_emulations" \ && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 case "${UNAME_MACHINE}" in i?86) VENDOR=pc; ;; *) VENDOR=unknown; ;; esac # Determine whether the default compiler is a.out or elf cat >$dummy.c < #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif # else printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif #else printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); #endif return 0; } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 fi ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. i?86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; i?86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i?86:*:5:7*) # Fixed at (any) Pentium or better UNAME_MACHINE=i586 if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} fi exit 0 ;; i?86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; i?86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) if test "${UNAME_MACHINE}" = "x86pc"; then UNAME_MACHINE=pc fi echo `uname -p`-${UNAME_MACHINE}-nto-qnx exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[KW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; i?86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) printf ("vax-dec-bsd\n"); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xemacs-21.4.22/config.sub0000644000175000017500000006543407265370761013251 0ustar acsacs#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. timestamp='2001-01-12' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \ | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \ | pyramid | mn10200 | mn10300 | tron | a29k \ | 580 | i960 | h8300 \ | x86 | ppcbe | mipsbe | mipsle | shbe | shle \ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ | hppa64 \ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ | alphaev6[78] \ | we32k | ns16k | clipper | i370 | sh | sh[34] \ | powerpc | powerpcle \ | 1750a | dsp16xx | pdp10 | pdp11 \ | mips16 | mips64 | mipsel | mips64el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ | mips64vr5000 | miprs64vr5000el | mcore \ | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ | thumb | d10v | d30v | fr30 | avr | openrisc) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i[234567]86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. # FIXME: clean up the formatting here. vax-* | tahoe-* | i[234567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \ | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ | xmp-* | ymp-* \ | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ | hppa2.0n-* | hppa64-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ | alphaev6[78]-* \ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | clipper-* | orion-* \ | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mipstx39-* | mipstx39el-* | mcore-* \ | f30[01]-* | f700-* | s390-* | sv1-* | t3e-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \ | bs2000-* | tic54x-* | c54x-* | x86_64-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | ymp) basic_machine=ymp-cray os=-unicos ;; cray2) basic_machine=cray2-cray os=-unicos ;; [ctj]90-cray) basic_machine=c90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i[34567]86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i[34567]86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i[34567]86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i[34567]86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsel*-linux*) basic_machine=mipsel-unknown os=-linux-gnu ;; mips*-linux*) basic_machine=mips-unknown os=-linux-gnu ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i686-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=t3e-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xmp) basic_machine=xmp-cray os=-unicos ;; xps | xps100) basic_machine=xps100-honeywell ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; mips) if [ x$os = x-linux-gnu ]; then basic_machine=mips-unknown else basic_machine=mips-mips fi ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4) basic_machine=sh-unknown ;; sparc | sparcv9) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; c4x*) basic_machine=c4x-none os=-coff ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i[34567]86-*) ;; *) os=-nto$os ;; esac ;; -nto*) os=-nto-qnx ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xemacs-21.4.22/configure0000755000175000017500000165261310536156205013170 0ustar acsacs#! /bin/sh #### Configuration script for XEmacs. Largely divergent from FSF. #### Guess values for system-dependent variables and create Makefiles. #### Generated automatically using autoconf version 2.13 #### Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. #### Copyright (C) 1993-1995 Board of Trustees, University of Illinois. #### Copyright (C) 1996, 1997 Sun Microsystems, Inc. #### Copyright (C) 1995, 1996, 2005 Ben Wing. #### Copyright (C) 2000, 2001 Martin Buchholz. #### Copyright (C) 1998, 1999 J. Kean Johnston. ### Don't edit this script! ### This script was automatically generated by the `autoconf' program ### from the file `./configure.in'. ### To rebuild it, execute the command ### autoconf ### in the this directory. You must have autoconf version 2.13 or later. ### Note: this script has not yet been ported to autoconf version 2.5x. ### This file is part of XEmacs. ### XEmacs is free software; you can redistribute it and/or modify it ### under the terms of the GNU General Public License as published by ### the Free Software Foundation; either version 2, or (at your ### option) any later version. ### XEmacs is distributed in the hope that it will be useful, but ### WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ### General Public License for more details. ### You should have received a copy of the GNU General Public License ### along with XEmacs; see the file COPYING. If not, write to the Free ### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ### 02111-1307, USA. ### For usage, run `./configure --help' ### For more detailed information on building and installing XEmacs, ### read the file `INSTALL'. ### ### If configure succeeds, it leaves its status in config.status. ### A log of configuration tests can be found in config.log. ### If configure fails after disturbing the status quo, ### config.status is removed. ac_help="$ac_help --with-x use the X Window System" if test -n "$ZSH_VERSION"; then setopt NO_BAD_PATTERN NO_BANG_HIST NO_BG_NICE NO_EQUALS NO_FUNCTION_ARGZERO setopt GLOB_SUBST NO_HUP INTERACTIVE_COMMENTS KSH_ARRAYS NO_MULTIOS NO_NOMATCH setopt RM_STAR_SILENT POSIX_BUILTINS SH_FILE_EXPANSION SH_GLOB SH_OPTION_LETTERS setopt SH_WORD_SPLIT BSD_ECHO IGNORE_BRACES if test -n "$CDPATH"; then CDPATH="."; export CDPATH; fi elif test -n "$BASH_VERSION"; then set -o posix unset CDPATH else if test -n "$CDPATH"; then CDPATH="."; export CDPATH; fi fi exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} ac_max_here_lines=12 trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=src/lisp.h # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' xe_ldflags='$LDFLAGS $ld_switch_site $ld_switch_machine $ld_switch_system $ld_switch_x_site $ld_switch_run' xe_libs='$ld_call_shared $xe_check_libs $X_EXTRA_LIBS $libs_x $libs_gtk $X_PRE_LIBS $LIBS $libs_machine $libs_system $libs_standard' ac_cpp='$CPP '"$xe_cppflags" ac_compile='${CC-cc} -c $CFLAGS '"$xe_cppflags"' conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cross_compiling=no ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi progname="`echo $0 | sed 's:^\./\./:\./:'`" MAKE_SUBDIR="$MAKE_SUBDIR lib-src" && if test "$extra_verbose" = "yes"; then echo " Appending \"lib-src\" to \$MAKE_SUBDIR"; fi INSTALL_ARCH_DEP_SUBDIR="$INSTALL_ARCH_DEP_SUBDIR lib-src" && if test "$extra_verbose" = "yes"; then echo " Appending \"lib-src\" to \$INSTALL_ARCH_DEP_SUBDIR"; fi prefix='/usr/local' exec_prefix='${prefix}' bindir='${exec_prefix}/bin' datadir='${prefix}/lib' statedir='${prefix}/lib' libdir='${exec_prefix}/lib' mandir='${prefix}/man/man1' inststaticdir='${PROGNAME}' instvardir='${PROGNAME}-${version}' infodir='${datadir}/${instvardir}/info' infopath='' install_pp='' lispdir='${datadir}/${instvardir}/lisp' moduledir='${libdir}/${instvardir}/${configuration}/modules' sitelispdir='${datadir}/${inststaticdir}/site-lisp' sitemoduledir='${libdir}/${inststaticdir}/site-modules' pkgdir='${datadir}/${instvardir}/lisp' package_path='' etcdir='${datadir}/${instvardir}/etc' archlibdir='${libdir}/${instvardir}/${configuration}' docdir='${archlibdir}' with_netinstall="no" with_prefix='yes' with_site_lisp='no' with_site_modules='yes' with_menubars='' with_scrollbars='' with_widgets='' with_dialogs='' with_file_coding='' cpp='' cppflags='' libs='' ldflags='' extra_includes='' dynamic='' with_x11='' with_msw='' rel_alloc='default' with_system_malloc='default' with_dlmalloc='default' use_regex_malloc='yes' with_esd_sound='no' native_sound_lib='' with_gtk='no' with_gnome='no' use_assertions="yes" with_toolbars="" with_tty="" use_union_type="no" with_dnet="" pdump='' with_dragndrop="no" with_ipv6_cname="no" arguments="$@" quoted_sed_magic=s/"'"/"'"'"'"'"'"'"'"/g quoted_arguments= for i in "$@"; do case "$i" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *) quoted_i="`echo '' $i | sed -e 's:^ ::' -e $quoted_sed_magic`" quoted_arguments="$quoted_arguments '$quoted_i'" ;; esac done while test $# != 0; do arg="$1"; shift case "$arg" in --no-create|--no-recursion) ;; -* ) case "$arg" in -*=*) opt=`echo '' $arg | sed -e 's:^ ::' -e 's:^-*\([^=]*\)=.*$:\1:'` val=`echo '' $arg | sed -e 's:^ ::' -e 's:^-*[^=]*=\(.*\)$:\1:'` valomitted=no ;; -*) opt=`echo '' $arg | sed -e 's:^ ::' -e 's:^-*\(.*\)$:\1:'` val="yes" valomitted=yes ;; esac optname="$opt" opt="`echo '' $opt | sed -e 's:^ ::' | tr - _`" case "${valomitted}-${opt}" in yes-without_* ) opt=`echo $opt | sed 's/without/with/'` valomitted="no" val="no" ;; esac case "$opt" in with_site_lisp | \ with_prefix | \ with_site_modules | \ with_x | \ with_x11 | \ with_gtk | \ with_gnome | \ with_msw | \ with_gcc | \ dynamic | \ with_ncurses | \ with_dnet | \ with_socks | \ with_dragndrop | \ with_cde | \ with_offix | \ with_gpm | \ with_xpm | \ with_xface | \ with_gif | \ with_jpeg | \ with_png | \ with_tiff | \ with_wmcommand | \ with_xmu | \ with_purify | \ with_quantify | \ with_toolbars | \ with_tty | \ with_xfs | \ with_i18n3 | \ with_mule | \ with_file_coding| \ with_canna | \ with_wnn | \ with_wnn6 | \ with_workshop | \ with_sparcworks | \ with_tooltalk | \ with_ldap | \ with_postgresql | \ with_pop | \ with_kerberos | \ with_hesiod | \ with_dnet | \ with_infodock | \ with_netinstall | \ with_ipv6_cname | \ external_widget | \ verbose | \ extra_verbose | \ usage_tracking | \ use_union_type | \ pdump | \ debug | \ use_assertions | \ use_regex_malloc | \ memory_usage_stats | \ with_clash_detection | \ with_modules | \ quick_build ) case "$val" in y | ye | yes ) val=yes ;; n | no ) val=no ;; * ) (echo "$progname: Usage error:" echo " " "The \`--$optname' option requires a boolean value: \`yes' or \`no'." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac eval "$opt=\"$val\"" ;; srcdir | \ compiler | \ cflags | \ cpp | \ cppflags | \ libs | \ ldflags | \ cache_file | \ native_sound_lib| \ site_lisp | \ x_includes | \ x_libraries | \ site_includes | \ site_libraries | \ site_prefixes | \ site_runtime_libraries ) if test "$valomitted" = "yes" ; then if test "$#" = 0 ; then (echo "$progname: Usage error:" echo " " "The \`--$optname' option requires a value." echo " Use \`$progname --help' to show usage.") >&2 && exit 1; fi val="$1"; shift fi eval "$opt=\"$val\"" ;; rel_alloc | \ with_dlmalloc | \ with_debug_malloc | use_debug_malloc | \ with_system_malloc | use_system_malloc ) case "$val" in y | ye | yes ) val=yes ;; n | no ) val=no ;; d | de | def | defa | defau | defaul | default ) val=default ;; * ) (echo "$progname: Usage error:" echo " " "The \`--$optname' option requires one of these values: \`yes', \`no', or \`default'." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac case "$opt" in use_* ) opt="`echo $opt | sed s/use/with/`" ;; esac eval "$opt=\"$val\"" ;; "with_database" ) with_database_berkdb=no with_database_dbm=no with_database_gdbm=no for x in `echo "$val" | sed -e 's/,/ /g'` ; do case "$x" in no ) ;; b | be | ber | berk | berkd | berkdb ) with_database_berkdb=yes ;; d | db | dbm ) with_database_dbm=yes ;; g | gn | gnu | gnud | gnudb | gnudbm | gdbm) with_database_gdbm=yes ;; * ) (echo "$progname: Usage error:" echo " " "The \`--$optname' option value must be either \`no' or a comma-separated list of one or more of \`berkdb' and either \`dbm' or \`gnudbm'." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac done if test "$with_database_dbm" = "yes" -a \ "$with_database_gdbm" = "yes"; then (echo "$progname: Usage error:" echo " " "Only one of \`dbm' and \`gnudbm' may be specified with the \`--$optname' option." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 fi ;; "with_sound" ) for x in `echo "$val" | sed -e 's/,/ /g'` ; do case "$x" in n | no | non | none ) new_sdefault=no ;; a | al | all | both ) new_sdefault=yes ;; native ) with_native_sound=yes ;; nonative ) with_native_sound=no ;; nas ) with_nas_sound=yes ;; nonas ) with_nas_sound=no ;; esd ) with_esd_sound=yes ;; noesd ) with_esd_sound=no ;; * ) bogus_sound=yes ;; esac if test "$bogus_sound" -o \ \( -n "$new_sdefault" -a -n "$sound_notfirst" \) ; then types="\`all', \`none', \`(no)native', \`no(nas)', \`(no)esd'." (echo "$progname: Usage error:" echo " " "Valid types for the \`--$optname' option are: $types. Option \`all' or \`none' must be first in the list. The default is to autodetect native and NAS sound support." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 elif test -n "$new_sdefault" ; then with_native_sound=$new_sdefault with_nas_sound=$new_sdefault with_esd_sound=$new_sdefault new_sdefault= # reset this fi sound_notfirst=true done ;; "with_athena" ) case "$val" in xa | xaw ) val=xaw ;; 3 | 3d | xaw3d ) val=3d ;; ne | nex | next | naxtaw) val=next ;; 9 | 95 | xaw95 ) val=95 ;; xp | xpm | xawxpm ) val=xpm ;; * ) (echo "$progname: Usage error:" echo " " "The \`--$optname' option must have one of these values: \`xaw', \`3d', \`next', \`95', or \`xpm'." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac eval "$opt=\"$val\"" ;; "with_xim" ) case "$val" in y | ye | yes ) val=yes ;; n | no | non | none ) val=no ;; x | xl | xli | xlib ) val=xlib ;; m | mo | mot | moti | motif ) val=motif ;; * ) (echo "$progname: Usage error:" echo " " "The \`--$optname' option must have one of these values: \`motif', \`xlib', \`yes', or \`no'." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac eval "$opt=\"$val\"" ;; "mail_locking" ) case "$val" in lockf ) val=lockf ;; flock ) val=flock ;; file | dot ) val=file ;; locking ) val=locking ;; * ) (echo "$progname: Usage error:" echo " " "The \`--$optname' option must have one of these values: \`lockf', \`flock', \`file', \`locking', or \`mmdf'." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac eval "$opt=\"$val\"" ;; "error_checking" ) for x in `echo "$val" | sed -e 's/,/ /g'` ; do case "$x" in n | no | non | none ) new_default=no ;; a | al | all ) new_default=yes ;; extents ) error_check_extents=yes ;; noextents ) error_check_extents=no ;; typecheck ) error_check_typecheck=yes ;; notypecheck ) error_check_typecheck=no ;; bufpos ) error_check_bufpos=yes ;; nobufpos ) error_check_bufpos=no ;; gc ) error_check_gc=yes ;; nogc ) error_check_gc=no ;; malloc ) error_check_malloc=yes ;; nomalloc ) error_check_malloc=no ;; byte_code ) error_check_byte_code=yes ;; nobyte_code ) error_check_byte_code=no ;; glyphs ) error_check_glyphs=yes ;; noglyphs ) error_check_glyphs=no ;; * ) bogus_error_check=yes ;; esac if test "$bogus_error_check" -o \ \( -n "$new_default" -a -n "$echeck_notfirst" \) ; then if test "$error_check_default" = yes ; then types="\`all' (default), \`none', \`noextents', \`notypecheck', \`nobufpos', \`nogc', \`nomalloc', \`noglyphs' and \`nobyte-code'." else types="\`all', \`none' (default), \`extents', \`typecheck', \`bufpos', \`gc', \`malloc', \`glyphs' and \`byte-code'." fi (echo "$progname: Usage error:" echo " " "Valid types for the \`--$optname' option are: $types." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 elif test -n "$new_default" ; then error_check_extents=$new_default error_check_typecheck=$new_default error_check_bufpos=$new_default error_check_gc=$new_default error_check_malloc=$new_default error_check_byte_code=$new_default error_check_glyphs=$new_default new_default= # reset this fi echeck_notfirst=true done ;; prefix | exec_prefix | bindir | datadir | statedir | libdir | \ mandir | infodir | infopath | lispdir | etcdir | pkgdir | \ archlibdir | docdir | package_path | moduledir ) if test "$valomitted" = "yes"; then if test "$#" = 0; then (echo "$progname: Usage error:" echo " " "The \`--$optname' option requires a value." echo " Use \`$progname --help' to show usage.") >&2 && exit 1; fi val="$1"; shift fi eval "$opt=\"$val\"" case "$opt" in exec_prefix ) { test "$extra_verbose" = "yes" && cat << \EOF Defining EXEC_PREFIX_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define EXEC_PREFIX_USER_DEFINED 1 EOF } ;; lispdir ) { test "$extra_verbose" = "yes" && cat << \EOF Defining LISPDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define LISPDIR_USER_DEFINED 1 EOF } ;; sitelispdir ) { test "$extra_verbose" = "yes" && cat << \EOF Defining SITELISPDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define SITELISPDIR_USER_DEFINED 1 EOF } ;; moduledir ) { test "$extra_verbose" = "yes" && cat << \EOF Defining MODULEDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define MODULEDIR_USER_DEFINED 1 EOF } ;; etcdir ) { test "$extra_verbose" = "yes" && cat << \EOF Defining ETCDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define ETCDIR_USER_DEFINED 1 EOF } ;; infodir ) { test "$extra_verbose" = "yes" && cat << \EOF Defining INFODIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define INFODIR_USER_DEFINED 1 EOF } ;; infopath ) { test "$extra_verbose" = "yes" && cat << \EOF Defining INFOPATH_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define INFOPATH_USER_DEFINED 1 EOF } ;; package_path ) { test "$extra_verbose" = "yes" && cat << \EOF Defining PACKAGE_PATH_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define PACKAGE_PATH_USER_DEFINED 1 EOF } ;; datadir ) { test "$extra_verbose" = "yes" && cat << \EOF Defining INFODIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define INFODIR_USER_DEFINED 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining LISPDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define LISPDIR_USER_DEFINED 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining MODULEDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define MODULEDIR_USER_DEFINED 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining ETCDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define ETCDIR_USER_DEFINED 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining DOCDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define DOCDIR_USER_DEFINED 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining ARCHLIBDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define ARCHLIBDIR_USER_DEFINED 1 EOF } ;; docdir ) { test "$extra_verbose" = "yes" && cat << \EOF Defining DOCDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define DOCDIR_USER_DEFINED 1 EOF } ;; exec_prefix | libdir | archlibdir ) { test "$extra_verbose" = "yes" && cat << \EOF Defining ARCHLIBDIR_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define ARCHLIBDIR_USER_DEFINED 1 EOF } ;; esac ;; "no_create" ) ;; "usage" | "help" ) ${PAGER-more} ${srcdir}/configure.usage; exit 0 ;; "with_menubars" | \ "with_scrollbars" | \ "with_dialogs" | \ "with_widgets" ) case "$val" in l | lu | luc | luci | lucid ) val=lucid ;; mo | mot | moti | motif ) val=motif ;; a | at | ath | athe | athen | athena ) val=athena ;; n | no | non | none ) val=no ;; y | ye | yes ) val=yes ;; "") val=yes ;; g | gt | gtk ) val=gtk ;; ms | msw ) val=msw ;; * ) (echo "$progname: Usage error:" echo " " "The \`--$optname' option must have one of these values: \`gtk', \`lucid', \`motif', \`athena', \`yes', or \`no'." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac eval "$opt=\"$val\"" ;; "use_minimal_tagbits" | \ "use_indexed_lrecord_implementation" | \ "run_in_place" | \ "const_is_losing" | \ "with_gnu_make" ) echo "configure: warning: Obsolete option \`--$optname' ignored." 1>&2 ;; * ) (echo "$progname: Usage error:" echo " " "Unrecognized option: $arg" echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac ;; *-*-*) configuration="$arg" ;; *) (echo "$progname: Usage error:" echo " " "Unrecognized argument: $arg" echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac done test -n "$cpp" && CPP="$cpp" test -n "$cppflags" && CPPFLAGS="$cppflags" test -n "$libs" && LIBS="$libs" test -n "$ldflags" && LDFLAGS="$ldflags" eval set x "$quoted_arguments"; shift test "$extra_verbose" = "yes" && verbose=yes test -n "$with_x" && with_x11="$with_x" if test "$with_purify" = "yes" -o "$with_quantify" = "yes"; then test "$with_system_malloc" = "default" && with_system_malloc=yes fi if test "$with_cde $with_tooltalk" = "yes no"; then (echo "$progname: Usage error:" echo " " "--with-cde requires --with-tooltalk" echo " Use \`$progname --help' to show usage.") >&2 && exit 1 elif test "$with_tooltalk" = "no" ; then with_cde=no elif test "$with_cde" = "yes"; then with_tooltalk=yes fi case "$srcdir" in "" ) for dir in "`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'`" "." ".." ; do if test -f "$dir/src/lisp.h" -a \ -f "$dir/lisp/version.el" ; then srcdir="$dir" break fi done if test -z "$srcdir" ; then (echo "$progname: Usage error:" echo " " "Neither the current directory nor its parent seem to contain the XEmacs sources. If you do not want to build XEmacs in its source tree, you should run \`$progname' in the directory in which you wish to build XEmacs, using the \`--srcdir' option to say where the sources may be found." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 fi ;; * ) if test ! -f "$srcdir/src/lisp.h" -o \ ! -f "$srcdir/lisp/version.el" ; then (echo "$progname: Usage error:" echo " " "The directory specified with the \`--srcdir' option, \`$srcdir', doesn't seem to contain the XEmacs sources. You should either run the \`$progname' script at the top of the XEmacs source tree, or use the \`--srcdir' option to specify the XEmacs source directory." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 fi ;; esac if test -z "$configuration"; then configuration=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess` if test -z "$configuration"; then (echo "$progname: Usage error:" echo " " "XEmacs has not been ported to this host type. Try explicitly specifying the CONFIGURATION when rerunning configure." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 fi fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo "configure:855: checking whether ln -s works" >&5 rm -f conftestdata if ln -s X conftestdata 2>/dev/null then rm -f conftestdata ac_cv_prog_LN_S="ln -s" else ac_cv_prog_LN_S=ln fi LN_S="$ac_cv_prog_LN_S" if test "$ac_cv_prog_LN_S" = "ln -s"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi for dir in lisp etc man info tests; do if test ! -d "$dir" ; then echo Making symbolic link to "$srcdir/$dir" ${LN_S} "$srcdir/$dir" "$dir" fi done absolute_pwd="`pwd`"; if test -n "$PWD" -a "`cd $PWD && pwd`" = "$absolute_pwd" then blddir="$PWD" else blddir="$absolute_pwd"; if test -d "/net"; then if test -d "/tmp_mnt/net"; then tdir="tmp_mnt/net"; else tdir="tmp_mnt"; fi blddir=`echo "$blddir" | \ sed -e "s|^${tdir}/|/net/|" -e "s|^/a/|/net/|" -e "s|^/amd/|/net/|"` fi fi case "$srcdir" in /* ) ;; . ) srcdir="$blddir" ;; * ) srcdir="`cd $srcdir && pwd`"; if test -d "/net"; then if test -d "/tmp_mnt/net"; then tdir="tmp_mnt/net"; else tdir="tmp_mnt"; fi srcdir=`echo "$srcdir" | \ sed -e "s|^${tdir}/|/net/|" -e "s|^/a/|/net/|" -e "s|^/amd/|/net/|"` fi ;; esac if test `pwd` != `sh -c cd $srcdir && pwd` \ && test -f "$srcdir/src/config.h"; then (echo "$progname: WARNING: The directory tree \`$srcdir' is being used" echo " as a build directory right now; it has been configured in its own" echo " right. To configure in another directory as well, you MUST" echo " use GNU make. If you do not have GNU make, then you must" echo " now do \`make distclean' in $srcdir," echo " and then run $progname again.") >&2 extrasub='/^VPATH[ ]*=/c\ vpath %.c $(srcdir)\ vpath %.h $(srcdir)\ vpath %.y $(srcdir)\ vpath %.l $(srcdir)\ vpath %.s $(srcdir)\ vpath %.in $(srcdir)' fi . "$srcdir/version.sh" || exit 1; if test -n "$emacs_is_beta"; then beta=yes; else beta=no; fi : "${extra_verbose=$beta}" version="${emacs_major_version}.${emacs_minor_version}" { test "$extra_verbose" = "yes" && cat << EOF Defining EMACS_MAJOR_VERSION = $emacs_major_version EOF cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <<\EOF #define ERROR_CHECK_EXTENTS 1 EOF } test "${error_check_typecheck=$beta}" = yes && { test "$extra_verbose" = "yes" && cat << \EOF Defining ERROR_CHECK_TYPECHECK EOF cat >> confdefs.h <<\EOF #define ERROR_CHECK_TYPECHECK 1 EOF } test "${error_check_bufpos=$beta}" = yes && { test "$extra_verbose" = "yes" && cat << \EOF Defining ERROR_CHECK_BUFPOS EOF cat >> confdefs.h <<\EOF #define ERROR_CHECK_BUFPOS 1 EOF } test "${error_check_gc=$beta}" = yes && { test "$extra_verbose" = "yes" && cat << \EOF Defining ERROR_CHECK_GC EOF cat >> confdefs.h <<\EOF #define ERROR_CHECK_GC 1 EOF } test "${error_check_malloc=$beta}" = yes && { test "$extra_verbose" = "yes" && cat << \EOF Defining ERROR_CHECK_MALLOC EOF cat >> confdefs.h <<\EOF #define ERROR_CHECK_MALLOC 1 EOF } test "${error_check_byte_code=$beta}" = yes && { test "$extra_verbose" = "yes" && cat << \EOF Defining ERROR_CHECK_BYTE_CODE EOF cat >> confdefs.h <<\EOF #define ERROR_CHECK_BYTE_CODE 1 EOF } test "${error_check_glyphs=$beta}" = yes && { test "$extra_verbose" = "yes" && cat << \EOF Defining ERROR_CHECK_GLYPHS EOF cat >> confdefs.h <<\EOF #define ERROR_CHECK_GLYPHS 1 EOF } if test "${debug:=$beta}" = "yes"; then use_assertions=yes memory_usage_stats=yes extra_objs="$extra_objs debug.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"debug.o\"" fi extra_objs="$extra_objs tests.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"tests.o\"" fi { test "$extra_verbose" = "yes" && cat << \EOF Defining DEBUG_XEMACS EOF cat >> confdefs.h <<\EOF #define DEBUG_XEMACS 1 EOF } fi test "$use_assertions" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining USE_ASSERTIONS EOF cat >> confdefs.h <<\EOF #define USE_ASSERTIONS 1 EOF } test "$memory_usage_stats" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining MEMORY_USAGE_STATS EOF cat >> confdefs.h <<\EOF #define MEMORY_USAGE_STATS 1 EOF } echo $ac_n "checking "host system type"""... $ac_c" 1>&6 echo "configure:1120: checking "host system type"" >&5 internal_configuration=`echo $configuration | sed 's/-\(workshop\)//'` canonical=`${CONFIG_SHELL-/bin/sh} $srcdir/config.sub "$internal_configuration"` configuration=`echo "$configuration" | sed 's/^\([^-][^-]*-[^-][^-]*-[^-][^-]*\)-.*$/\1/'` canonical=`echo "$canonical" | sed 's/^\([^-][^-]*-[^-][^-]*-[^-][^-]*\)-.*$/\1/'` echo "$ac_t""$configuration" 1>&6 machine='' opsys='' case "$canonical" in sparc-*-* ) machine=sparc ;; alpha*-*-* ) machine=alpha ;; vax-*-* ) machine=vax ;; mips-dec-* ) machine=pmax ;; mips-sgi-irix6* ) machine=iris6d ;; mips-sgi-* ) machine=iris4d ;; mips*-linux ) machine=mips ;; romp-ibm-* ) machine=ibmrt ;; rs6000-ibm-aix* ) machine=ibmrs6000 ;; powerpc-ibm-aix* ) machine=ibmrs6000 ;; powerpc*-* ) machine=powerpc ;; hppa-*-* ) machine=hp800 ;; m88k-dg-* ) machine=aviion ;; m68*-sony-* ) machine=news ;; mips-sony-* ) machine=news-risc ;; clipper-* ) machine=clipper ;; arm* ) machine=arm ;; ns32k-* ) machine=ns32000 ;; esac case "$canonical" in *-*-linux* ) opsys=linux ;; *-*-netbsd* ) opsys=netbsd ;; *-*-openbsd* ) opsys=openbsd ;; *-*-nextstep* ) opsys=nextstep ;; *-*-vms ) opsys=vms ;; *-dec-osf1.3 | *-dec-osf2* ) opsys=decosf1-3 ;; *-dec-osf1.2 | *-dec-osf1* ) opsys=decosf1-2 ;; *-dec-osf3.[2-9] ) opsys=decosf3-2 ;; *-dec-osf3* ) opsys=decosf3-1 ;; *-dec-osf[4-9]* ) opsys=decosf4-0 ;; *-*-ultrix[0-3].* | *-*-ultrix4.0* ) opsys=bsd4-2 ;; *-*-ultrix4.[12]* ) opsys=bsd4-3 ;; *-*-ultrix* ) opsys=ultrix4-3 ;; *-*-aix3.1* ) opsys=aix3-1 ;; *-*-aix3.2.5 ) opsys=aix3-2-5 ;; *-*-aix3* ) opsys=aix3-2 ;; *-*-aix4.0* ) opsys=aix4 ;; *-*-aix4.1* ) opsys=aix4-1 ;; *-*-aix[4-9]* ) opsys=aix4-2 ;; *-gnu* ) opsys=gnu ;; *-*-bsd4.[01] ) opsys=bsd4-1 ;; *-*-bsd4.2 ) opsys=bsd4-2 ;; *-*-bsd4.3 ) opsys=bsd4-3 ;; *-*-aos4.2 ) opsys=bsd4-2 ;; *-*-aos* ) opsys=bsd4-3 ;; *-*-sysv0 | *-*-sysvr0 ) opsys=usg5-0 ;; *-*-sysv2 | *-*-sysvr2 ) opsys=usg5-2 ;; *-*-sysv2.2 | *-*-sysvr2.2 ) opsys=usg5-2-2 ;; *-*-sysv3* | *-*-sysvr3* ) opsys=usg5-3 ;; *-*-sysv4.1* | *-*-sysvr4.1* )opsys=usg5-4 NON_GNU_CPP=/usr/lib/cpp ;; *-*-sysv4.[2-9]* | *-sysvr4.[2-9]* ) if test -z "$NON_GNU_CPP" ; then for prog in "/usr/ccs/lib/cpp" "/lib/cpp"; do if test -f "$prog"; then NON_GNU_CPP="$prog"; break; fi done fi opsys=usg5-4-2 ;; *-sysv4* | *-sysvr4* ) opsys=usg5-4 ;; *-*-mach_bsd4.3* ) opsys=mach-bsd4-3 ;; esac case "$canonical" in *-*-netbsd* ) case "$canonical" in i[3-9]86-*-netbsd*) machine=intel386 ;; hp300-*-netbsd* | amiga-*-netbsd* | sun3-*-netbsd* | mac68k-*-netbsd* | da30-*-netbsd* | m68k-*-netbsd* ) machine=hp9000s300 ;; pc532-*-netbsd* | ns32k-*-netbsd* ) machine=ns32000 ;; pmax-*-netbsd* | mips-*-netbsd* ) machine=pmax ;; esac ;; *-*-openbsd* ) case "${canonical}" in i386-*-openbsd*) machine=intel386 ;; m68k-*-openbsd*) machine=hp9000s300 ;; mipsel-*-openbsd*) machine=pmax ;; esac ;; arm-acorn-riscix1.1* ) machine=acorn opsys=riscix1-1 ;; arm-acorn-riscix1.2* | arm-acorn-riscix ) machine=acorn opsys=riscix1-2 ;; fx80-alliant-* ) machine=alliant4 opsys=bsd4-2 ;; i860-alliant-* ) machine=alliant-2800 opsys=bsd4-3 ;; m68*-altos-sysv* ) machine=altos opsys=usg5-2 ;; 580-amdahl-sysv* ) machine=amdahl opsys=usg5-2-2 ;; m68*-apollo-* ) machine=apollo opsys=bsd4-3 ;; we32k-att-sysv* ) machine=att3b opsys=usg5-2-2 ;; m68*-att-sysv* ) machine=7300 opsys=usg5-2-2 ;; rs6000-bull-bosx* ) machine=ibmrs6000 opsys=aix3-2 ;; # dpx20 m68*-bull-sysv3* ) machine=dpx2 opsys=usg5-3 ;; # dpx2 m68*-bull-sysv2* ) machine=sps7 opsys=usg5-2 ;; # sps7 celerity-celerity-bsd* ) machine=celerity opsys=bsd4-2 ;; *-convex-bsd* | *-convex-convexos* ) machine=convex opsys=bsd4-3 NON_GNU_CPP="cc -E -P" ;; i[3-9]86-cubix-sysv* ) machine=intel386 opsys=usg5-3 ;; *-*-darwin*) opsys=darwin RANLIB="ranlib -c" ;; i586-dg-dgux*R4* | i586-dg-dgux5.4.4* ) machine=aviion opsys=dgux5-4r4 ;; m88k-dg-dgux5.4R3* | m88k-dg-dgux5.4.3* ) opsys=dgux5-4r3 ;; m88k-dg-dgux5.4R2* | m88k-dg-dgux5.4.2* ) opsys=dgux5-4r2 ;; m88k-dg-dgux* ) opsys=dgux ;; m68k-motorola-sysv* | m68000-motorola-sysv* ) machine=delta opsys=usg5-3 ;; m88k-motorola-sysv4* ) machine=delta88k opsys=usg5-4-2 ;; m88k-motorola-sysv* | m88k-motorola-m88kbcs* ) machine=delta88k opsys=usg5-3 ;; m68*-dual-sysv* ) machine=dual opsys=usg5-2 ;; m68*-dual-uniplus* ) machine=dual opsys=unipl5-2 ;; ns16k-encore-bsd* ) machine=ns16000 opsys=umax ;; pn-gould-bsd4.2* ) machine=gould opsys=bsd4-2 ;; pn-gould-bsd4.3* ) machine=gould opsys=bsd4-3 ;; np1-gould-bsd* ) machine=gould-np1 opsys=bsd4-3 ;; m88k-harris-cxux* ) case "`uname -r`" in [56].[0-9] ) machine=nh4000 opsys=cxux ;; [7].[0-9] ) machine=nh4000 opsys=cxux7 ;; esac NON_GNU_CPP="/lib/cpp" ;; m68k-harris-cxux* ) machine=nh3000 opsys=cxux ;; powerpc-harris-powerunix ) machine=nh6000 opsys=powerunix NON_GNU_CPP="cc -Xo -E -P" ;; xps*-honeywell-sysv* ) machine=xps100 opsys=usg5-2 ;; m68*-hp-bsd* ) machine=hp9000s300 opsys=bsd4-3 ;; *-hp-hpux* ) case "$canonical" in m68* ) machine=hp9000s300 ;; hppa* ) machine=hp800 ;; esac case "$canonical" in *-hp-hpux7* ) opsys=hpux ;; *-hp-hpux8* ) opsys=hpux8 ;; *-hp-hpux9* ) opsys=hpux9 ;; *-hp-hpux10* ) opsys=hpux10 ;; *-hp-hpux11* ) opsys=hpux11 ;; * ) opsys=hpux ;; esac case "$opsys" in hpux9 | hpux10 ) extra_objs="$extra_objs strcat.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"strcat.o\"" fi ;; esac if test "$opsys" = "hpux10" -o "$opsys" = "hpux11"; then \ ansi_flag="-Ae"; else ansi_flag="-Aa"; fi NON_GNU_CC="cc $ansi_flag" NON_GNU_CPP="cc $ansi_flag -E" case "$canonical" in *-hp-hpux*shr* ) opsys="${opsys}-shr" ;; esac ;; orion-orion-bsd* ) machine=orion opsys=bsd4-2 ;; clipper-orion-bsd* ) machine=orion105 opsys=bsd4-2 ;; i[3-9]86-ibm-aix1.1* ) machine=ibmps2-aix opsys=usg5-2-2 ;; i[3-9]86-ibm-aix1.[23]* | i[3-9]86-ibm-aix* ) machine=ibmps2-aix opsys=usg5-3 ;; i370-ibm-aix*) machine=ibm370aix opsys=usg5-3 ;; romp-ibm-aos* ) opsys=bsd4-3 ;; romp-ibm-bsd* ) opsys=bsd4-3 ;; romp-ibm-mach* ) opsys=mach-bsd4-3 ;; m68*-isi-bsd4.2* ) machine=isi-ov opsys=bsd4-2 ;; m68*-isi-bsd4.3* ) machine=isi-ov opsys=bsd4-3 ;; i[3-9]86-intsys-sysv* ) machine=is386 opsys=usg5-2-2 ;; i[3-9]86-prime-sysv* ) machine=i386 opsys=usg5-3 ;; i[3-9]86-sequent-bsd* ) machine=symmetry opsys=bsd4-3 ;; i[3-9]86-sequent-ptx* ) machine=sequent-ptx opsys=ptx NON_GNU_CPP="/lib/cpp" ;; i[3-9]86-ncr-sysv* ) machine=ncr386 opsys=usg5-4-2 ;; i860-intel-osf1* ) machine=paragon opsys=osf1 NON_GNU_CPP=/usr/mach/lib/cpp ;; i860-*-sysv4* ) machine=i860 opsys=usg5-4 NON_GNU_CC="/bin/cc" NON_GNU_CPP="/usr/ccs/lib/cpp" ;; m68*-masscomp-rtu* ) machine=masscomp opsys=rtu ;; m68*-megatest-bsd* ) machine=mega68 opsys=bsd4-2 ;; mips-mips-usg* ) machine=mips4 ;; mips-mips-riscos4 ) machine=mips4 NON_GNU_CC="cc -systype bsd43" NON_GNU_CPP="cc -systype bsd43 -E" case "$canonical" in mips-mips-riscos4* ) opsys=bsd4-3 ;; mips-mips-riscos5* ) opsys=riscos5 ;; esac ;; mips-mips-bsd* ) machine=mips opsys=bsd4-3 ;; mips-mips-* ) machine=mips opsys=usg5-2-2 ;; m68*-next-* | m68k-*-nextstep* ) machine=m68k opsys=nextstep ;; ns32k-ns-genix* ) machine=ns32000 opsys=usg5-2 ;; m68*-ncr-sysv2* | m68*-ncr-sysvr2* ) machine=tower32 opsys=usg5-2-2 ;; m68*-ncr-sysv3* | m68*-ncr-sysvr3* ) machine=tower32v3 opsys=usg5-3 ;; m68*-nixdorf-sysv* ) machine=targon31 opsys=usg5-2-2 ;; m68*-nu-sysv* ) machine=nu opsys=usg5-2 ;; m68*-plexus-sysv* ) machine=plexus opsys=usg5-2 ;; pyramid-pyramid-bsd* ) machine=pyramid opsys=bsd4-2 ;; ns32k-sequent-bsd4.2* ) machine=sequent opsys=bsd4-2 ;; ns32k-sequent-bsd4.3* ) machine=sequent opsys=bsd4-3 ;; mips-siemens-sysv* | mips-sni-sysv*) machine=mips-siemens opsys=usg5-4 NON_GNU_CC=/usr/ccs/bin/cc NON_GNU_CPP=/usr/ccs/lib/cpp ;; mips-nec-sysv*) machine=mips-nec NON_GNU_CC=/usr/ccs/bin/cc NON_GNU_CPP=/usr/ccs/lib/cpp ;; m68*-sgi-iris3.5* ) machine=irist opsys=iris3-5 ;; m68*-sgi-iris3.6* | m68*-sgi-iris*) machine=irist opsys=iris3-6 ;; mips-sgi-irix3.* ) opsys=irix3-3 ;; mips-sgi-irix4.* ) opsys=irix4-0 ;; mips-sgi-irix6* ) opsys=irix6-0 ;; mips-sgi-irix5.1* ) opsys=irix5-1 ;; mips-sgi-irix5.2* ) opsys=irix5-2 ;; mips-sgi-irix5.* ) opsys=irix5-3 ;; mips-sgi-irix* ) opsys=irix5-0 ;; *-sony-newsos[34]* | *-sony-news[34]* ) opsys=bsd4-3 ;; *-sony-news* ) opsys=newsos5 ;; m68*-stride-sysv* ) machine=stride opsys=usg5-2 ;; *-*-solaris* | *-*-sunos* | *-sun-mach* | *-sun-bsd* ) case "$canonical" in m68*-sunos1* ) machine=sun1 ;; m68*-sunos2* ) machine=sun2 ;; m68* ) machine=sun3 ;; i*86*-sun-sunos[34]* ) machine=sun386 ;; i*86-*-* ) machine=intel386 ;; rs6000* ) machine=rs6000 ;; esac case "$canonical" in *-sunos5*) canonical=`echo $canonical | sed -e s/sunos5/solaris2/`;; esac case "$canonical" in *-sunos4* ) #test -f /usr/lib/cpp && NON_GNU_CPP=/usr/lib/cpp ;; : ;; *-solaris2* ) #test -f /usr/ccs/lib/cpp && NON_GNU_CPP=/usr/ccs/lib/cpp RANLIB=':' ;; esac case "$canonical" in *-solaris* ) opsys=sol2 os_release_major=`uname -r | sed -e 's/^\([0-9]\{1,\}\)\.\([0-9]\{1,\}\).*/\1/'` os_release_minor=`uname -r | sed -e 's/^\([0-9]\{1,\}\)\.\([0-9]\{1,\}\).*/\2/'` case "$os_release_minor" in [0-9]) os_release_minor="0${os_release_minor}";; esac os_release="${os_release_major}${os_release_minor}" { test "$extra_verbose" = "yes" && cat << EOF Defining OS_RELEASE = $os_release EOF cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <<\EOF #define DLSYM_NEEDS_UNDERSCORE 1 EOF } ;; esac else case "$opsys" in sol2 ) echo "Static linking is not supported on Solaris 2." echo "Rerun configure without specifying --dynamic=no." exit 1 ;; linux ) ld_call_shared="-Bstatic" ;; decosf* ) ld_call_shared="-non_shared" ;; esac fi case "$opsys" in aix*) NON_GNU_CC=xlc ;; esac stack_trace_eye_catcher=`echo ${PROGNAME}_${version}_${canonical} | sed 'y/.-/__/'` { test "$extra_verbose" = "yes" && cat << EOF Defining STACK_TRACE_EYE_CATCHER = $stack_trace_eye_catcher EOF cat >> confdefs.h <&2 && exit 1 elif test "$with_tooltalk" = "no" ; then with_workshop=no elif test "$with_workshop" = "yes"; then with_tooltalk=yes fi if test "$with_workshop" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining SUNPRO EOF cat >> confdefs.h <<\EOF #define SUNPRO 1 EOF } extra_objs="$extra_objs sunpro.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"sunpro.o\"" fi fi if test "$with_clash_detection" != "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining CLASH_DETECTION EOF cat >> confdefs.h <<\EOF #define CLASH_DETECTION 1 EOF } extra_objs="$extra_objs filelock.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"filelock.o\"" fi fi test -n "$compiler" && CC="$compiler" if test "$with_gcc" = "no"; then case "$CC" in "" | *gcc* ) CC="${NON_GNU_CC-cc}" ;; esac fi test "${cflags-unset}" != unset && CFLAGS="$cflags" if test "${CFLAGS-unset}" != unset then cflags_specified=yes; else cflags_specified=no; fi xe_save_CFLAGS="$CFLAGS" # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1658: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1685: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1733: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:1762: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' xe_ldflags='$LDFLAGS $ld_switch_site $ld_switch_machine $ld_switch_system $ld_switch_x_site $ld_switch_run' xe_libs='$ld_call_shared $xe_check_libs $X_EXTRA_LIBS $libs_x $libs_gtk $X_PRE_LIBS $LIBS $libs_machine $libs_system $libs_standard' ac_cpp='$CPP '"$xe_cppflags" ac_compile='${CC-cc} -c $CFLAGS '"$xe_cppflags"' conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cross_compiling=no cat > conftest.$ac_ext << EOF #line 1775 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:1780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' xe_ldflags='$LDFLAGS $ld_switch_site $ld_switch_machine $ld_switch_system $ld_switch_x_site $ld_switch_run' xe_libs='$ld_call_shared $xe_check_libs $X_EXTRA_LIBS $libs_x $libs_gtk $X_PRE_LIBS $LIBS $libs_machine $libs_system $libs_standard' ac_cpp='$CPP '"$xe_cppflags" ac_compile='${CC-cc} -c $CFLAGS '"$xe_cppflags"' conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cross_compiling=no echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:1808: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:1813: checking whether we are using GNU C" >&5 cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:1838: checking whether ${CC-cc} accepts -g" >&5 echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi if test "$with_gcc" = "no" -a "$GCC" = "yes"; then CC=${NON_GNU_CC-cc} # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1871: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1898: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1946: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:1975: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' xe_ldflags='$LDFLAGS $ld_switch_site $ld_switch_machine $ld_switch_system $ld_switch_x_site $ld_switch_run' xe_libs='$ld_call_shared $xe_check_libs $X_EXTRA_LIBS $libs_x $libs_gtk $X_PRE_LIBS $LIBS $libs_machine $libs_system $libs_standard' ac_cpp='$CPP '"$xe_cppflags" ac_compile='${CC-cc} -c $CFLAGS '"$xe_cppflags"' conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cross_compiling=no cat > conftest.$ac_ext << EOF #line 1988 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:1993: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' xe_ldflags='$LDFLAGS $ld_switch_site $ld_switch_machine $ld_switch_system $ld_switch_x_site $ld_switch_run' xe_libs='$ld_call_shared $xe_check_libs $X_EXTRA_LIBS $libs_x $libs_gtk $X_PRE_LIBS $LIBS $libs_machine $libs_system $libs_standard' ac_cpp='$CPP '"$xe_cppflags" ac_compile='${CC-cc} -c $CFLAGS '"$xe_cppflags"' conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cross_compiling=no echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:2021: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:2026: checking whether we are using GNU C" >&5 cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:2051: checking whether ${CC-cc} accepts -g" >&5 echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi elif test "$with_gcc" = "yes" -a "$GCC" != "yes" ; then CC=gcc # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2084: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2111: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2159: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:2188: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' xe_ldflags='$LDFLAGS $ld_switch_site $ld_switch_machine $ld_switch_system $ld_switch_x_site $ld_switch_run' xe_libs='$ld_call_shared $xe_check_libs $X_EXTRA_LIBS $libs_x $libs_gtk $X_PRE_LIBS $LIBS $libs_machine $libs_system $libs_standard' ac_cpp='$CPP '"$xe_cppflags" ac_compile='${CC-cc} -c $CFLAGS '"$xe_cppflags"' conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cross_compiling=no cat > conftest.$ac_ext << EOF #line 2201 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:2206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' xe_ldflags='$LDFLAGS $ld_switch_site $ld_switch_machine $ld_switch_system $ld_switch_x_site $ld_switch_run' xe_libs='$ld_call_shared $xe_check_libs $X_EXTRA_LIBS $libs_x $libs_gtk $X_PRE_LIBS $LIBS $libs_machine $libs_system $libs_standard' ac_cpp='$CPP '"$xe_cppflags" ac_compile='${CC-cc} -c $CFLAGS '"$xe_cppflags"' conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cross_compiling=no echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:2234: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:2239: checking whether we are using GNU C" >&5 cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:2264: checking whether ${CC-cc} accepts -g" >&5 echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi fi CFLAGS="$xe_save_CFLAGS" test -n "$CPP" -a -d "$CPP" && CPP= test -n "$NON_GNU_CPP" -a "$GCC" != "yes" -a -z "$CPP" && CPP="$NON_GNU_CPP" echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:2301: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then # This must be in double quotes, not single quotes, because CPP may get # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* ac_cv_prog_CPP="$CPP" CPP="$ac_cv_prog_CPP" else ac_cv_prog_CPP="$CPP" fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for AIX""... $ac_c" 1>&6 echo "configure:2380: checking for AIX" >&5 cat > conftest.$ac_ext <&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF Defining _ALL_SOURCE EOF cat >> confdefs.h <<\EOF #define _ALL_SOURCE 1 EOF } else rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* echo $ac_n "checking for GNU libc""... $ac_c" 1>&6 echo "configure:2409: checking for GNU libc" >&5 cat > conftest.$ac_ext < int main() { #if ! (defined __GLIBC__ || defined __GNU_LIBRARY__) #error Not a GNU libc system :-( ******* ======= ******** &&&&&&&& #endif ; return 0; } EOF if { (eval echo configure:2423: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* have_glibc=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* have_glibc=no fi rm -f conftest* echo "$ac_t""$have_glibc" 1>&6 test "$have_glibc" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining _GNU_SOURCE EOF cat >> confdefs.h <<\EOF #define _GNU_SOURCE 1 EOF } case "$opsys" in sol2) { test "$extra_verbose" = "yes" && cat << \EOF Defining __EXTENSIONS__ EOF cat >> confdefs.h <<\EOF #define __EXTENSIONS__ 1 EOF } if test "$os_release" -ge 505; then { test "$extra_verbose" = "yes" && cat << \EOF Defining _XOPEN_SOURCE = 500 EOF cat >> confdefs.h <<\EOF #define _XOPEN_SOURCE 500 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining _XOPEN_SOURCE_EXTENDED EOF cat >> confdefs.h <<\EOF #define _XOPEN_SOURCE_EXTENDED 1 EOF } fi ;; linux) { test "$extra_verbose" = "yes" && cat << \EOF Defining _POSIX_C_SOURCE = 199506L EOF cat >> confdefs.h <<\EOF #define _POSIX_C_SOURCE 199506L EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining _XOPEN_SOURCE = 500 EOF cat >> confdefs.h <<\EOF #define _XOPEN_SOURCE 500 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining _XOPEN_SOURCE_EXTENDED EOF cat >> confdefs.h <<\EOF #define _XOPEN_SOURCE_EXTENDED 1 EOF } ;; esac cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* case "$conftest_rc" in 11) echo "You appear to be using the SunPro C compiler." ; __SUNPRO_C=yes ;; 12) echo "You appear to be using the DEC C compiler." ; __DECC=yes ;; 13) echo "You appear to be using the SCO C compiler." ; __USLC__=yes ;; 14) echo "You appear to be using the Intel C++ compiler."; __ICC=yes GCC=no ;; esac fi rm -fr conftest* echo "Extracting information from the machine- and system-dependent headers..." tempcname="conftest.c" cat > $tempcname < confdefs.h cat >> $tempcname <&6 echo "configure:2752: checking for whether the -Kalloca compiler flag is needed" >&5 need_kalloca=no cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* xe_save_c_switch_system="$c_switch_system" c_switch_system="$c_switch_system -Kalloca" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* need_kalloca=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* c_switch_system="$xe_save_c_switch_system" fi rm -f conftest* echo "$ac_t""$need_kalloca" 1>&6 test "$need_kalloca" = "yes" && c_switch_system="$c_switch_system -Kalloca" && if test "$extra_verbose" = "yes"; then echo " Appending \"-Kalloca\" to \$c_switch_system"; fi fi if test "$cflags_specified" = "no"; then if test "$GCC" = "yes"; then CFLAGS="-g -O3 -Wall -Wno-switch -Winline -Wmissing-prototypes" CFLAGS="$CFLAGS -Wsign-compare" case "`gcc -v --help 2>&1`" in *-fstrict-aliasing* ) CFLAGS="$CFLAGS -fno-strict-aliasing" ;; esac if test "$xemacs_compiler" != "g++"; then CFLAGS="$CFLAGS -Wshadow" fi test "$have_glibc" != "yes" && CFLAGS="$CFLAGS -Wpointer-arith" elif test "$__SUNPRO_C" = "yes"; then case "$opsys" in sol2 ) CFLAGS="-v -xO4" ;; sunos4* ) CFLAGS="-xO2";; esac elif test "$__DECC" = "yes"; then CFLAGS="-O3" elif test "$CC" = "xlc"; then CFLAGS="-g -O3 -qstrict -qnoansialias -qlibansi -qinfo -qro -qmaxmem=20000" elif test "$__ICC" = "yes"; then CFLAGS="-g -O3 -Ob2 -Wall -W1" else CFLAGS="-O" ; fi fi if test "$GCC" = "yes"; then echo $ac_n "checking for buggy gcc versions""... $ac_c" 1>&6 echo "configure:2823: checking for buggy gcc versions" >&5 GCC_VERSION=`$CC --version` case `uname -s`:`uname -m`:$GCC_VERSION in *:sun4*:2.8.1|*:sun4*:egcs-2.90.*) case "$CFLAGS" in *-O2*|*-O3*) case "$CFLAGS" in *-fno-schedule-insns*) ;; *) echo "$ac_t""yes" 1>&6 echo "configure: warning: Don't use -O2 with gcc 2.8.1 and egcs 1.0 under SPARC architectures" 1>&2 echo "configure: warning: without also using -fno-schedule-insns." 1>&2 { echo "configure: error: Aborting due to known problem" 1>&2; exit 1; } ;; esac ;; esac ;; Linux:alpha:egcs-2.91.*) echo "$ac_t""yes" 1>&6 echo "configure: warning: There have been reports of egcs-1.1 not compiling XEmacs correctly on" 1>&2 echo "configure: warning: Alpha Linux. There have also been reports that egcs-1.0.3a is O.K." 1>&2 { echo "configure: error: Aborting due to known problem" 1>&2; exit 1; } ;; *:i*86*:2.7.2*) case "$CFLAGS" in *-O2*|*-O3*) case "$GCC_VERSION" in 2.7.2) case "$CFLAGS" in *-fno-strength-reduce*) ;; *) echo "$ac_t""yes" 1>&6 echo "configure: warning: Don't use -O2 with gcc 2.7.2 under Intel/XXX without also using" 1>&2 echo "configure: warning: -fno-strength-reduce." 1>&2 { echo "configure: error: Aborting due to known problem" 1>&2; exit 1; } ;; esac ;; esac case "$CFLAGS" in *-fno-caller-saves*) ;; *) echo "$ac_t""yes" 1>&6 echo "configure: warning: Don't use -O2 with gcc 2.7.2 under Intel/XXX without also using" 1>&2 echo "configure: warning: -fno-caller-saves." 1>&2 { echo "configure: error: Aborting due to known problem" 1>&2; exit 1; } ;; esac ;; esac ;; esac echo "$ac_t""no" 1>&6 fi if test "$pdump" != "yes"; then echo $ac_n "checking for \"-z nocombreloc\" linker flag""... $ac_c" 1>&6 echo "configure:2881: checking for \"-z nocombreloc\" linker flag" >&5 case "`ld --help 2>&1`" in *-z\ nocombreloc* ) echo "$ac_t""yes" 1>&6 ld_switch_site="-z nocombreloc $ld_switch_site" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-z nocombreloc\" to \$ld_switch_site"; fi ;; *) echo "$ac_t""no" 1>&6 ;; esac fi if test "$GCC" = "yes"; then set x $ld_switch_system; shift; ld_switch_system="" while test -n "$1"; do case $1 in -L | -l | -u ) ld_switch_system="$ld_switch_system $1 $2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) ld_switch_system="$ld_switch_system $1" ;; -Xlinker* ) ;; * ) ld_switch_system="$ld_switch_system -Xlinker $1" ;; esac shift done fi if test "$GCC" = "yes"; then set x $ld_switch_machine; shift; ld_switch_machine="" while test -n "$1"; do case $1 in -L | -l | -u ) ld_switch_machine="$ld_switch_machine $1 $2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) ld_switch_machine="$ld_switch_machine $1" ;; -Xlinker* ) ;; * ) ld_switch_machine="$ld_switch_machine -Xlinker $1" ;; esac shift done fi if test "$GCC" = "yes"; then set x $ld_switch_site; shift; ld_switch_site="" while test -n "$1"; do case $1 in -L | -l | -u ) ld_switch_site="$ld_switch_site $1 $2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) ld_switch_site="$ld_switch_site $1" ;; -Xlinker* ) ;; * ) ld_switch_site="$ld_switch_site -Xlinker $1" ;; esac shift done fi if test "$GCC" = "yes"; then set x $LDFLAGS; shift; LDFLAGS="" while test -n "$1"; do case $1 in -L | -l | -u ) LDFLAGS="$LDFLAGS $1 $2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) LDFLAGS="$LDFLAGS $1" ;; -Xlinker* ) ;; * ) LDFLAGS="$LDFLAGS -Xlinker $1" ;; esac shift done fi if test "$GCC" = "yes"; then set x $ld_call_shared; shift; ld_call_shared="" while test -n "$1"; do case $1 in -L | -l | -u ) ld_call_shared="$ld_call_shared $1 $2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) ld_call_shared="$ld_call_shared $1" ;; -Xlinker* ) ;; * ) ld_call_shared="$ld_call_shared -Xlinker $1" ;; esac shift done fi test -n "$objects_machine" && extra_objs="$extra_objs $objects_machine" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"$objects_machine\"" fi test -n "$objects_system" && extra_objs="$extra_objs $objects_system" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"$objects_system\"" fi test -n "$unexec" && test ! "$pdump" = "yes" && extra_objs="$extra_objs $unexec" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"$unexec\"" fi test "$pdump" = "yes" && extra_objs="$extra_objs dumper.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"dumper.o\"" fi echo $ac_n "checking for dynodump""... $ac_c" 1>&6 echo "configure:2970: checking for dynodump" >&5 if test "$unexec" != "unexsol2.o"; then echo "$ac_t""no" 1>&6 else echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining DYNODUMP EOF cat >> confdefs.h <<\EOF #define DYNODUMP 1 EOF } MAKE_SUBDIR="$MAKE_SUBDIR dynodump" && if test "$extra_verbose" = "yes"; then echo " Appending \"dynodump\" to \$MAKE_SUBDIR"; fi SRC_SUBDIR_DEPS="$SRC_SUBDIR_DEPS dynodump" && if test "$extra_verbose" = "yes"; then echo " Appending \"dynodump\" to \$SRC_SUBDIR_DEPS"; fi case "$machine" in sparc ) dynodump_arch=sparc ;; *86* ) dynodump_arch=i386 ;; powerpc ) dynodump_arch=ppc ;; esac fi if test "$unexec" = "unexaix.o"; then if test "$dynamic" = "no"; then start_flags="-Wl,-bnso,-bnodelcsect" test "$GCC" = "yes" && start_flags="-B/bin/ ${start_flags}" for f in "/lib/syscalls.exp" "/lib/threads.exp"; do if test -r "$f"; then start_flags="${start_flags},-bI:${f}"; fi done for f in "/usr/lpp/X11/bin/smt.exp" "/usr/bin/X11/smt.exp"; do if test -r "$f"; then start_flags="${start_flags},-bI:${f}"; break; fi done echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6 echo "configure:3006: checking for terminateAndUnload in -lC" >&5 ac_lib_var=`echo C'_'terminateAndUnload | sed 'y%./+-%__p_%'` xe_check_libs=" -lC " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_system="$libs_system -lC" && if test "$extra_verbose" = "yes"; then echo " Appending \"-lC\" to \$libs_system"; fi else echo "$ac_t""no" 1>&6 fi fi elif test -n "$ld_text_start_addr"; then start_flags="-T $ld_text_start_addr -e __start" fi if test "$ordinary_link" = "no" -a "$GCC" = "yes"; then test -z "$linker" && linker='$(CC) -nostdlib' test -z "$lib_gcc" && lib_gcc='`$(CC) -print-libgcc-file-name`' fi test "$GCC" != "yes" && lib_gcc= case "$site_libraries" in *:* ) site_libraries="`echo '' $site_libraries | sed -e 's/^ //' -e 's/:/ /g'`";; esac if test -n "$site_libraries"; then for arg in $site_libraries; do case "$arg" in -* ) ;; * ) test -d "$arg" || \ { echo "Error:" "Invalid site library \`$arg': no such directory" >&2; exit 1; } arg="-L${arg}" ;; esac ld_switch_site="$ld_switch_site $arg" && if test "$extra_verbose" = "yes"; then echo " Appending \"$arg\" to \$ld_switch_site"; fi done fi case "$site_includes" in *:* ) site_includes="`echo '' $site_includes | sed -e 's/^ //' -e 's/:/ /g'`";; esac if test -n "$site_includes"; then for arg in $site_includes; do case "$arg" in -* ) ;; * ) test -d "$arg" || \ { echo "Error:" "Invalid site include \`$arg': no such directory" >&2; exit 1; } arg="-I${arg}" ;; esac c_switch_site="$c_switch_site $arg" && if test "$extra_verbose" = "yes"; then echo " Appending \"$arg\" to \$c_switch_site"; fi done fi case "$site_prefixes" in *:* ) site_prefixes="`echo '' $site_prefixes | sed -e 's/^ //' -e 's/:/ /g'`";; esac if test -n "$site_prefixes"; then for dir in $site_prefixes; do lib_dir="${dir}/lib" inc_dir="${dir}/include" if test ! -d "$dir"; then { echo "Error:" "Invalid site prefix \`$dir': no such directory" >&2; exit 1; } elif test ! -d "$lib_dir"; then { echo "Error:" "Invalid site prefix \`$dir': no such directory \`$lib_dir'" >&2; exit 1; } else if test -d "$inc_dir"; then c_switch_site="$c_switch_site "-I$inc_dir"" && if test "$extra_verbose" = "yes"; then echo " Appending \""-I$inc_dir"\" to \$c_switch_site"; fi fi ld_switch_site="$ld_switch_site "-L$lib_dir"" && if test "$extra_verbose" = "yes"; then echo " Appending \""-L$lib_dir"\" to \$ld_switch_site"; fi fi done fi for dir in "/usr/ccs/lib"; do test -d "$dir" && ld_switch_system="$ld_switch_system -L${dir}" && if test "$extra_verbose" = "yes"; then echo " Appending \"-L${dir}\" to \$ld_switch_system"; fi done case "$site_runtime_libraries" in *:* ) site_runtime_libraries="`echo '' $site_runtime_libraries | sed -e 's/^ //' -e 's/:/ /g'`";; esac if test -n "$site_runtime_libraries"; then LD_RUN_PATH="`echo $site_runtime_libraries | sed -e 's/ */:/g'`" export LD_RUN_PATH fi if test -n "$add_runtime_path"; then :; elif test "$dynamic" = "no"; then add_runtime_path=no elif test -n "$LD_RUN_PATH"; then add_runtime_path=yes else case "$opsys" in sol2 | irix* | *bsd* | decosf* ) add_runtime_path=yes ;; * ) add_runtime_path=no ;; esac fi if test "$add_runtime_path" = "yes"; then echo $ac_n "checking "for runtime libraries flag"""... $ac_c" 1>&6 echo "configure:3130: checking "for runtime libraries flag"" >&5 case "$opsys" in sol2 ) dash_r="-R" ;; decosf* | linux* | irix*) dash_r="-rpath " ;; *) dash_r="" for try_dash_r in "-R" "-R " "-rpath "; do xe_check_libs="${try_dash_r}/no/such/file-or-directory" if test "$GCC" = "yes"; then set x $xe_check_libs; shift; xe_check_libs="" while test -n "$1"; do case $1 in -L | -l | -u ) xe_check_libs="$xe_check_libs $1 $2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) xe_check_libs="$xe_check_libs $1" ;; -Xlinker* ) ;; * ) xe_check_libs="$xe_check_libs -Xlinker $1" ;; esac shift done fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* dash_r="$try_dash_r" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* xe_check_libs="" test -n "$dash_r" && break done ;; esac if test -n "$dash_r"; then echo "$ac_t"""\"${dash_r}\""" 1>&6 else echo "$ac_t""NONE" 1>&6 fi fi xe_add_unique_runpath_dir=' xe_add_p=yes for xe_dir in $runpath_dirs; do test "$xe_dir" = "$xe_runpath_dir" && xe_add_p=no done if test "$xe_add_p" = "yes"; then test -n "$runpath" && runpath="${runpath}:" runpath="${runpath}${xe_runpath_dir}" runpath_dirs="$runpath_dirs $xe_runpath_dir" fi' if test "$add_runtime_path" = "yes" -a -n "$dash_r"; then ld_switch_site=`echo '' $ld_switch_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` ld_switch_x_site=`echo '' $ld_switch_x_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` runpath="" runpath_dirs="" if test -n "$LD_RUN_PATH"; then runpath="$LD_RUN_PATH" elif test "$GCC" = "yes"; then ld_switch_run_save="$ld_switch_run"; ld_switch_run="" echo "int main(int argc, char *argv[]) {return 0;}" > conftest.c xe_runpath_link='${CC-cc} -o conftest -v $CFLAGS '"$xe_ldflags"' conftest.$ac_ext 2>&1 1>/dev/null' for arg in `eval "$xe_runpath_link" | grep ' -L'`; do case "$arg" in P,* | -L* | -R* ) for dir in `echo '' "$arg" | sed -e 's:^ ::' -e 's/^..//' -e 'y/:/ /'`; do { xe_runpath_dir="$dir" test "$xe_runpath_dir" != "/lib" -a \ "$xe_runpath_dir" != "/usr/lib" -a \ -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ eval "$xe_add_unique_runpath_dir" } done ;; esac done ld_switch_run="$ld_switch_run_save" rm -f conftest* else for arg in $ld_switch_site $ld_switch_x_site; do case "$arg" in -L*) { xe_runpath_dir=`echo '' "$arg" | sed -e 's:^ ::' -e 's/^-L//'` test "$xe_runpath_dir" != "/lib" -a \ "$xe_runpath_dir" != "/usr/lib" -a \ -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ eval "$xe_add_unique_runpath_dir" };; esac done if test "$opsys $need_motif" = "sol2 yes"; then xe_runpath_dir="/opt/SUNWdt/lib"; eval "$xe_add_unique_runpath_dir"; fi fi if test -n "$runpath"; then ld_switch_run="${dash_r}${runpath}" if test "$GCC" = "yes"; then set x $ld_switch_run; shift; ld_switch_run="" while test -n "$1"; do case $1 in -L | -l | -u ) ld_switch_run="$ld_switch_run $1 $2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) ld_switch_run="$ld_switch_run $1" ;; -Xlinker* ) ;; * ) ld_switch_run="$ld_switch_run -Xlinker $1" ;; esac shift done fi test "$extra_verbose" = "yes" && echo "Setting runpath to $runpath" fi fi GNU_MALLOC=yes if test "$with_dlmalloc" != "no"; then doug_lea_malloc=yes else doug_lea_malloc=no fi after_morecore_hook_exists=yes echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6 echo "configure:3260: checking for malloc_set_state" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char malloc_set_state(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_malloc_set_state) || defined (__stub___malloc_set_state) choke me #else malloc_set_state(); #endif ; return 0; } EOF if { (eval echo configure:3286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_malloc_set_state=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_malloc_set_state=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'malloc_set_state`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 doug_lea_malloc=no fi echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6 echo "configure:3306: checking whether __after_morecore_hook exists" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 after_morecore_hook_exists=no fi rm -f conftest* if test "$system_malloc" = "yes" ; then GNU_MALLOC=no GNU_MALLOC_reason=" - The GNU allocators don't work with this system configuration." elif test "$with_system_malloc" = "yes" ; then GNU_MALLOC=no GNU_MALLOC_reason=" - User chose not to use GNU allocators." elif test "$with_debug_malloc" = "yes" ; then GNU_MALLOC=no GNU_MALLOC_reason=" - User chose to use Debugging Malloc." fi if test "$doug_lea_malloc" = "yes" -a "$GNU_MALLOC" = "yes" ; then GNU_MALLOC_reason=" - Using Doug Lea's new malloc from the GNU C Library." { test "$extra_verbose" = "yes" && cat << \EOF Defining DOUG_LEA_MALLOC EOF cat >> confdefs.h <<\EOF #define DOUG_LEA_MALLOC 1 EOF } if test "$after_morecore_hook_exists" = "no" ; then GNU_MALLOC_reason=" - Using Doug Lea's new malloc from the Linux C Library." { test "$extra_verbose" = "yes" && cat << \EOF Defining _NO_MALLOC_WARNING_ EOF cat >> confdefs.h <<\EOF #define _NO_MALLOC_WARNING_ 1 EOF } fi fi # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:3371: checking for $ac_word" >&5 if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:3426: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:3480: checking for $ac_word" >&5 if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_YACC="$ac_prog" break fi done IFS="$ac_save_ifs" fi YACC="$ac_cv_prog_YACC" if test -n "$YACC"; then echo "$ac_t""$YACC" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" for ac_hdr in a.out.h elf.h cygwin/version.h fcntl.h inttypes.h libgen.h locale.h mach/mach.h sys/param.h sys/pstat.h sys/time.h sys/timeb.h sys/un.h ulimit.h unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3512: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_hdr EOF cat >> confdefs.h <&6 fi done echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 echo "configure:3550: checking for sys/wait.h that is POSIX.1 compatible" >&5 cat > conftest.$ac_ext < #include #ifndef WEXITSTATUS #define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) #endif #ifndef WIFEXITED #define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main() { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF if { (eval echo configure:3569: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_sys_wait_h=no fi rm -f conftest* echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6 if test $ac_cv_header_sys_wait_h = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SYS_WAIT_H EOF cat >> confdefs.h <<\EOF #define HAVE_SYS_WAIT_H 1 EOF } fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:3593: checking for ANSI C header files" >&5 cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3604: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:3668: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining STDC_HEADERS EOF cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF } fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 echo "configure:3694: checking whether time.h and sys/time.h may both be included" >&5 cat > conftest.$ac_ext < #include #include int main() { struct tm *tp; ; return 0; } EOF if { (eval echo configure:3706: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_time=no fi rm -f conftest* echo "$ac_t""$ac_cv_header_time" 1>&6 if test $ac_cv_header_time = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining TIME_WITH_SYS_TIME EOF cat >> confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF } fi echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6 echo "configure:3730: checking for sys_siglist declaration in signal.h or unistd.h" >&5 cat > conftest.$ac_ext < #include /* NetBSD declares sys_siglist in unistd.h. */ #ifdef HAVE_UNISTD_H #include #endif int main() { char *msg = *(sys_siglist + 1); ; return 0; } EOF if { (eval echo configure:3745: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_decl_sys_siglist=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_decl_sys_siglist=no fi rm -f conftest* echo "$ac_t""$ac_cv_decl_sys_siglist" 1>&6 if test $ac_cv_decl_sys_siglist = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining SYS_SIGLIST_DECLARED EOF cat >> confdefs.h <<\EOF #define SYS_SIGLIST_DECLARED 1 EOF } fi echo $ac_n "checking for utime""... $ac_c" 1>&6 echo "configure:3771: checking for utime" >&5 cat > conftest.$ac_ext < #include int main() { struct utimbuf x; x.actime = x.modtime = 0; utime ("/", &x); ; return 0; } EOF if { (eval echo configure:3781: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_UTIME EOF cat >> confdefs.h <<\EOF #define HAVE_UTIME 1 EOF } else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 for ac_func in utimes do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3800: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done fi rm -f conftest* echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 echo "configure:3858: checking return type of signal handlers" >&5 cat > conftest.$ac_ext < #include #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main() { int i; ; return 0; } EOF if { (eval echo configure:3878: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_type_signal=int fi rm -f conftest* echo "$ac_t""$ac_cv_type_signal" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining RETSIGTYPE = $ac_cv_type_signal EOF cat >> confdefs.h <&6 echo "configure:3900: checking for size_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining size_t = unsigned EOF cat >> confdefs.h <<\EOF #define size_t unsigned EOF } fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 echo "configure:3934: checking for pid_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_pid_t=yes else rm -rf conftest* ac_cv_type_pid_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_pid_t" 1>&6 if test $ac_cv_type_pid_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining pid_t = int EOF cat >> confdefs.h <<\EOF #define pid_t int EOF } fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 echo "configure:3968: checking for uid_t in sys/types.h" >&5 cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "uid_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_uid_t=yes else rm -rf conftest* ac_cv_type_uid_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_uid_t" 1>&6 if test $ac_cv_type_uid_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining uid_t = int EOF cat >> confdefs.h <<\EOF #define uid_t int EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining gid_t = int EOF cat >> confdefs.h <<\EOF #define gid_t int EOF } fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 echo "configure:4007: checking for mode_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_mode_t=yes else rm -rf conftest* ac_cv_type_mode_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_mode_t" 1>&6 if test $ac_cv_type_mode_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining mode_t = int EOF cat >> confdefs.h <<\EOF #define mode_t int EOF } fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 echo "configure:4041: checking for off_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_off_t=yes else rm -rf conftest* ac_cv_type_off_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_off_t" 1>&6 if test $ac_cv_type_off_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining off_t = long EOF cat >> confdefs.h <<\EOF #define off_t long EOF } fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 echo "configure:4075: checking for ssize_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])ssize_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_ssize_t=yes else rm -rf conftest* ac_cv_type_ssize_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_ssize_t" 1>&6 if test $ac_cv_type_ssize_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining ssize_t = int EOF cat >> confdefs.h <<\EOF #define ssize_t int EOF } fi echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 echo "configure:4110: checking for socklen_t" >&5 cat > conftest.$ac_ext < #include socklen_t x; int main() { ; return 0; } EOF if { (eval echo configure:4122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat > conftest.$ac_ext < #include int accept (int, struct sockaddr *, size_t *); int main() { ; return 0; } EOF if { (eval echo configure:4141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""size_t" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining socklen_t = size_t EOF cat >> confdefs.h <<\EOF #define socklen_t size_t EOF } else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""int" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining socklen_t = int EOF cat >> confdefs.h <<\EOF #define socklen_t int EOF } fi rm -f conftest* fi rm -f conftest* echo $ac_n "checking for struct timeval""... $ac_c" 1>&6 echo "configure:4173: checking for struct timeval" >&5 cat > conftest.$ac_ext < #include #else #ifdef HAVE_SYS_TIME_H #include #else #include #endif #endif int main() { static struct timeval x; x.tv_sec = x.tv_usec; ; return 0; } EOF if { (eval echo configure:4191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 HAVE_TIMEVAL=yes { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TIMEVAL EOF cat >> confdefs.h <<\EOF #define HAVE_TIMEVAL 1 EOF } else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 HAVE_TIMEVAL=no fi rm -f conftest* echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 echo "configure:4213: checking whether struct tm is in sys/time.h or time.h" >&5 cat > conftest.$ac_ext < #include int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF if { (eval echo configure:4224: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_tm=sys/time.h fi rm -f conftest* echo "$ac_t""$ac_cv_struct_tm" 1>&6 if test $ac_cv_struct_tm = sys/time.h; then { test "$extra_verbose" = "yes" && cat << \EOF Defining TM_IN_SYS_TIME EOF cat >> confdefs.h <<\EOF #define TM_IN_SYS_TIME 1 EOF } fi echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 echo "configure:4248: checking for tm_zone in struct tm" >&5 cat > conftest.$ac_ext < #include <$ac_cv_struct_tm> int main() { struct tm tm; tm.tm_zone; ; return 0; } EOF if { (eval echo configure:4259: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_tm_zone=no fi rm -f conftest* echo "$ac_t""$ac_cv_struct_tm_zone" 1>&6 if test "$ac_cv_struct_tm_zone" = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TM_ZONE EOF cat >> confdefs.h <<\EOF #define HAVE_TM_ZONE 1 EOF } else echo $ac_n "checking for tzname""... $ac_c" 1>&6 echo "configure:4282: checking for tzname" >&5 cat > conftest.$ac_ext < #ifndef tzname /* For SGI. */ extern char *tzname[]; /* RS6000 and others reject char **tzname. */ #endif int main() { atoi(*tzname); ; return 0; } EOF if { (eval echo configure:4295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_var_tzname=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_var_tzname=no fi rm -f conftest* echo "$ac_t""$ac_cv_var_tzname" 1>&6 if test $ac_cv_var_tzname = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TZNAME EOF cat >> confdefs.h <<\EOF #define HAVE_TZNAME 1 EOF } fi fi echo $ac_n "checking for working const""... $ac_c" 1>&6 echo "configure:4321: checking for working const" >&5 cat > conftest.$ac_ext <j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } ; return 0; } EOF if { (eval echo configure:4373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_const=no fi rm -f conftest* echo "$ac_t""$ac_cv_c_const" 1>&6 if test $ac_cv_c_const = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining const = EOF cat >> confdefs.h <<\EOF #define const EOF } fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:4398: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 echo "configure:4423: checking whether byte ordering is bigendian" >&5 ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include int main() { #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif ; return 0; } EOF if { (eval echo configure:4439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include int main() { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } EOF if { (eval echo configure:4454: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_bigendian=no fi rm -f conftest* else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* if test $ac_cv_c_bigendian = unknown; then cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_c_bigendian=no else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_bigendian=yes fi rm -fr conftest* fi echo "$ac_t""$ac_cv_c_bigendian" 1>&6 if test $ac_cv_c_bigendian = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining WORDS_BIGENDIAN EOF cat >> confdefs.h <<\EOF #define WORDS_BIGENDIAN 1 EOF } fi echo $ac_n "checking size of short""... $ac_c" 1>&6 echo "configure:4511: checking size of short" >&5 cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); exit(0); } EOF if { (eval echo configure:4525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_short=`cat conftestval` else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_short=0 fi rm -fr conftest* echo "$ac_t""$ac_cv_sizeof_short" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining SIZEOF_SHORT = $ac_cv_sizeof_short EOF cat >> confdefs.h <&6 echo "configure:4553: checking size of int" >&5 cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); exit(0); } EOF if { (eval echo configure:4567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_int=`cat conftestval` else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_int=0 fi rm -fr conftest* echo "$ac_t""$ac_cv_sizeof_int" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining SIZEOF_INT = $ac_cv_sizeof_int EOF cat >> confdefs.h <&6 echo "configure:4589: checking size of long" >&5 cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); exit(0); } EOF if { (eval echo configure:4603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_long=`cat conftestval` else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long=0 fi rm -fr conftest* echo "$ac_t""$ac_cv_sizeof_long" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining SIZEOF_LONG = $ac_cv_sizeof_long EOF cat >> confdefs.h <&6 echo "configure:4625: checking size of long long" >&5 cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long long)); exit(0); } EOF if { (eval echo configure:4639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_long_long=`cat conftestval` else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long_long=0 fi rm -fr conftest* echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining SIZEOF_LONG_LONG = $ac_cv_sizeof_long_long EOF cat >> confdefs.h <&6 echo "configure:4661: checking size of void *" >&5 cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(void *)); exit(0); } EOF if { (eval echo configure:4675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_void_p=`cat conftestval` else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_void_p=0 fi rm -fr conftest* echo "$ac_t""$ac_cv_sizeof_void_p" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining SIZEOF_VOID_P = $ac_cv_sizeof_void_p EOF cat >> confdefs.h < conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "typedef.*intptr_t;" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining INTPTR_T_IN_CYGWIN_TYPES_H = 1 EOF cat >> confdefs.h <<\EOF #define INTPTR_T_IN_CYGWIN_TYPES_H 1 EOF } else rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* ;; esac echo $ac_n "checking for long file names""... $ac_c" 1>&6 echo "configure:4724: checking for long file names" >&5 ac_cv_sys_long_file_names=yes # Test for long file names in all the places we know might matter: # . the current directory, where building will happen # $prefix/lib where we will be installing things # $exec_prefix/lib likewise # eval it to expand exec_prefix. # $TMPDIR if set, where it might want to write temporary files # if $TMPDIR is not set: # /tmp where it might want to write temporary files # /var/tmp likewise # /usr/tmp likewise if test -n "$TMPDIR" && test -d "$TMPDIR" && test -w "$TMPDIR"; then ac_tmpdirs="$TMPDIR" else ac_tmpdirs='/tmp /var/tmp /usr/tmp' fi for ac_dir in . $ac_tmpdirs `eval echo $prefix/lib $exec_prefix/lib` ; do test -d $ac_dir || continue test -w $ac_dir || continue # It is less confusing to not echo anything here. (echo 1 > $ac_dir/conftest9012345) 2>/dev/null (echo 2 > $ac_dir/conftest9012346) 2>/dev/null val=`cat $ac_dir/conftest9012345 2>/dev/null` if test ! -f $ac_dir/conftest9012345 || test "$val" != 1; then ac_cv_sys_long_file_names=no rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null break fi rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null done echo "$ac_t""$ac_cv_sys_long_file_names" 1>&6 if test $ac_cv_sys_long_file_names = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_LONG_FILE_NAMES EOF cat >> confdefs.h <<\EOF #define HAVE_LONG_FILE_NAMES 1 EOF } fi echo $ac_n "checking for sin""... $ac_c" 1>&6 echo "configure:4770: checking for sin" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char sin(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_sin) || defined (__stub___sin) choke me #else sin(); #endif ; return 0; } EOF if { (eval echo configure:4796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_sin=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_sin=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'sin`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6 echo "configure:4814: checking for sin in -lm" >&5 ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'` xe_check_libs=" -lm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo m | sed -e 's/^a-zA-Z0-9_/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_lib EOF cat >> confdefs.h <&6 fi fi { test "$extra_verbose" = "yes" && cat << \EOF Defining LISP_FLOAT_TYPE EOF cat >> confdefs.h <<\EOF #define LISP_FLOAT_TYPE 1 EOF } cat > conftest.$ac_ext < int main() { return atanh(1.0) + asinh(1.0) + acosh(1.0); ; return 0; } EOF if { (eval echo configure:4881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_INVERSE_HYPERBOLIC EOF cat >> confdefs.h <<\EOF #define HAVE_INVERSE_HYPERBOLIC 1 EOF } else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* echo "checking type of mail spool file locking" 1>&6 echo "configure:4898: checking type of mail spool file locking" >&5 for ac_func in lockf flock do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:4902: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:4928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done test -z "$mail_locking" -a "$mail_use_flock" = "yes" && mail_locking=flock test -z "$mail_locking" -a "$mail_use_lockf" = "yes" && mail_locking=lockf test -z "$mail_locking" -a "$mail_use_locking" = "yes" && mail_locking=locking if test -z "$mail_locking"; then case "$opsys" in cygwin* | mingw*) mail_locking=pop ;; esac fi if test "$mail_locking" = "lockf"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining MAIL_LOCK_LOCKF EOF cat >> confdefs.h <<\EOF #define MAIL_LOCK_LOCKF 1 EOF } elif test "$mail_locking" = "flock"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining MAIL_LOCK_FLOCK EOF cat >> confdefs.h <<\EOF #define MAIL_LOCK_FLOCK 1 EOF } elif test "$mail_locking" = "locking"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining MAIL_LOCK_LOCKING EOF cat >> confdefs.h <<\EOF #define MAIL_LOCK_LOCKING 1 EOF } elif test "$mail_locking" = "pop"; then with_pop=yes mail_locking= else mail_locking="dot-locking"; { test "$extra_verbose" = "yes" && cat << \EOF Defining MAIL_LOCK_DOT EOF cat >> confdefs.h <<\EOF #define MAIL_LOCK_DOT 1 EOF } fi test "$mail_locking" = "lockf" -a "$ac_cv_func_lockf" != "yes" && \ { echo "Error:" "lockf mail locking requested but not available." >&2; exit 1; } test "$mail_locking" = "flock" -a "$ac_cv_func_flock" != "yes" && \ { echo "Error:" "flock mail locking requested but not available." >&2; exit 1; } test "$mail_locking" = "locking" -a "$ac_cv_func_locking" != "yes" && \ { echo "Error:" "locking mail locking requested but not available." >&2; exit 1; } case "$opsys" in decosf*) echo $ac_n "checking for cma_open in -lpthreads""... $ac_c" 1>&6 echo "configure:5010: checking for cma_open in -lpthreads" >&5 ac_lib_var=`echo pthreads'_'cma_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lpthreads " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo pthreads | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_lib EOF cat >> confdefs.h <&6 fi test "$ac_cv_lib_pthreads_cma_open" = "yes" && \ c_switch_site="$c_switch_site -threads" ;; esac echo $ac_n "checking whether the -xildoff compiler flag is required""... $ac_c" 1>&6 echo "configure:5063: checking whether the -xildoff compiler flag is required" >&5 if ${CC-cc} '-###' -xildon no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ; then if ${CC-cc} '-###' -xildoff no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ; then echo "$ac_t""no" 1>&6; else echo "$ac_t""yes" 1>&6; ld_switch_site="$ld_switch_site -xildoff" && if test "$extra_verbose" = "yes"; then echo " Appending \"-xildoff\" to \$ld_switch_site"; fi fi else echo "$ac_t""no" 1>&6 fi if test "$opsys" = "sol2"; then if test "$os_release" -ge 506; then echo $ac_n "checking for \"-z ignore\" linker flag""... $ac_c" 1>&6 echo "configure:5075: checking for \"-z ignore\" linker flag" >&5 case "`ld -h 2>&1`" in *-z\ ignore\|record* ) echo "$ac_t""yes" 1>&6 ld_switch_site="-z ignore $ld_switch_site" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-z ignore\" to \$ld_switch_site"; fi ;; *) echo "$ac_t""no" 1>&6 ;; esac fi fi echo "checking "for specified window system"" 1>&6 echo "configure:5086: checking "for specified window system"" >&5 GNOME_CONFIG=no GTK_CONFIG=no if test "$with_gnome" != "no"; then echo $ac_n "checking for GNOME configuration script""... $ac_c" 1>&6 echo "configure:5094: checking for GNOME configuration script" >&5 for possible in gnome-config do possible_version=`${possible} --version 2> /dev/null` if test "x${possible_version}" != "x"; then GNOME_CONFIG="${possible}" with_gnome=yes with_gtk=yes break fi done echo "$ac_t""${GNOME_CONFIG}" 1>&6 fi if test "${GNOME_CONFIG}" != "no"; then GNOME_LIBS=`${GNOME_CONFIG} --libs gnomeui` GNOME_CFLAGS=`${GNOME_CONFIG} --cflags gnomeui` { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_GNOME EOF cat >> confdefs.h <<\EOF #define HAVE_GNOME 1 EOF } libs_gtk="$libs_gtk ${GNOME_LIBS}" && if test "$extra_verbose" = "yes"; then echo " Appending \"${GNOME_LIBS}\" to \$libs_gtk"; fi c_switch_gtk="$c_switch_gtk ${GNOME_CFLAGS}" && if test "$extra_verbose" = "yes"; then echo " Appending \"${GNOME_CFLAGS}\" to \$c_switch_gtk"; fi fi if test "$with_gtk" != "no";then echo $ac_n "checking for GTK configuration script""... $ac_c" 1>&6 echo "configure:5125: checking for GTK configuration script" >&5 for possible in gtk12-config gtk14-config gtk-config do possible_version=`${possible} --version 2> /dev/null` if test "x${possible_version}" != "x"; then GTK_CONFIG="${possible}" case "${possible_version}" in 1.0.*) echo "configure: warning: GTK 1.2 is required, please upgrade your version of GTK." 1>&2; with_gtk=no;; 1.3.*) echo "configure: warning: GTK 1.3 is not supported right now" 1>&2; with_gtk=no;; 1.2.*) with_gtk=yes break ;; *) echo "configure: warning: Found unsupported version of GTK: $possible_version" 1>&2;; esac fi done echo "$ac_t""${GTK_CONFIG}" 1>&6 fi if test "${GTK_CONFIG}" != "no"; then echo $ac_n "checking gtk version""... $ac_c" 1>&6 echo "configure:5147: checking gtk version" >&5 GTK_VERSION=`${GTK_CONFIG} --version` echo "$ac_t""${GTK_VERSION}" 1>&6 echo $ac_n "checking gtk libs""... $ac_c" 1>&6 echo "configure:5152: checking gtk libs" >&5 GTK_LIBS=`${GTK_CONFIG} --libs` libs_gtk="$libs_gtk ${GTK_LIBS}" && if test "$extra_verbose" = "yes"; then echo " Appending \"${GTK_LIBS}\" to \$libs_gtk"; fi echo "$ac_t""${GTK_LIBS}" 1>&6 echo $ac_n "checking gtk cflags""... $ac_c" 1>&6 echo "configure:5158: checking gtk cflags" >&5 GTK_CFLAGS=`${GTK_CONFIG} --cflags` if test "$GCC" = "yes"; then GTK_CFLAGS="${GTK_CFLAGS} -Wno-shadow" fi c_switch_gtk="$c_switch_gtk ${GTK_CFLAGS}" && if test "$extra_verbose" = "yes"; then echo " Appending \"${GTK_CFLAGS}\" to \$c_switch_gtk"; fi echo "$ac_t""${GTK_CFLAGS}" 1>&6 echo $ac_n "checking for main in -lgdk_imlib""... $ac_c" 1>&6 echo "configure:5168: checking for main in -lgdk_imlib" >&5 ac_lib_var=`echo gdk_imlib'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdk_imlib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_gtk="-lgdk_imlib $libs_gtk" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lgdk_imlib\" to \$libs_gtk"; fi else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for Imlib_init in -lImlib""... $ac_c" 1>&6 echo "configure:5202: checking for Imlib_init in -lImlib" >&5 ac_lib_var=`echo Imlib'_'Imlib_init | sed 'y%./+-%__p_%'` xe_check_libs=" -lImlib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_gtk="$libs_gtk -lImlib" && if test "$extra_verbose" = "yes"; then echo " Appending \"-lImlib\" to \$libs_gtk"; fi else echo "$ac_t""no" 1>&6 fi for ac_func in gdk_imlib_init do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:5241: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:5267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_XPM EOF cat >> confdefs.h <<\EOF #define HAVE_XPM 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_GTK EOF cat >> confdefs.h <<\EOF #define HAVE_GTK 1 EOF } window_system=gtk with_gtk=yes with_x11=no test "${with_scrollbars}" != "no" && with_scrollbars=gtk test "${with_toolbars}" != no && with_toolbars=gtk test "${with_menubars}" != "no" && with_menubars=gtk test "${with_dialogs}" != "no" && with_dialogs=gtk test "${with_widgets}" != "no" && with_widgets=gtk extra_objs="$extra_objs console-gtk.o device-gtk.o event-gtk.o frame-gtk.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"console-gtk.o device-gtk.o event-gtk.o frame-gtk.o\"" fi extra_objs="$extra_objs objects-gtk.o redisplay-gtk.o glyphs-gtk.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"objects-gtk.o redisplay-gtk.o glyphs-gtk.o\"" fi extra_objs="$extra_objs select-gtk.o gccache-gtk.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"select-gtk.o gccache-gtk.o\"" fi extra_objs="$extra_objs gtk-xemacs.o ui-gtk.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"gtk-xemacs.o ui-gtk.o\"" fi OLD_CFLAGS="${CFLAGS}" OLD_CPPFLAGS="${CPPFLAGS}" OLD_LDFLAGS="${LDFLAGS}" CFLAGS="${GTK_CFLAGS} ${CFLAGS}" CPPFLAGS="${GTK_CFLAGS} ${CFLAGS}" LDFLAGS="${LDFLAGS} ${GTK_LIBS}" for ac_hdr in glade/glade.h glade.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:5346: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:5354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_hdr EOF cat >> confdefs.h <&6 fi done echo $ac_n "checking for main in -lxml""... $ac_c" 1>&6 echo "configure:5385: checking for main in -lxml" >&5 ac_lib_var=`echo xml'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lxml " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_gtk="-lxml $libs_gtk" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lxml\" to \$libs_gtk"; fi else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for main in -lglade""... $ac_c" 1>&6 echo "configure:5419: checking for main in -lglade" >&5 ac_lib_var=`echo glade'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lglade " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_gtk="-lglade $libs_gtk" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lglade\" to \$libs_gtk"; fi else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for main in -lglade-gnome""... $ac_c" 1>&6 echo "configure:5453: checking for main in -lglade-gnome" >&5 ac_lib_var=`echo glade-gnome'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lglade-gnome " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_gtk="-lglade-gnome $libs_gtk" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lglade-gnome\" to \$libs_gtk"; fi else echo "$ac_t""no" 1>&6 fi cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "char \*txtdomain;" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining LIBGLADE_XML_TXTDOMAIN = 1 EOF cat >> confdefs.h <<\EOF #define LIBGLADE_XML_TXTDOMAIN 1 EOF } else rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* CFLAGS="${OLD_CFLAGS}" CPPFLAGS="${OLD_CPPFLAGS}" LDFLAGS="${OLD_LDFLAGS}" fi if test "$with_x11" != "no"; then test "$x_includes $x_libraries" != "NONE NONE" && \ window_system=x11 with_x11=yes if test "$x_includes $x_libraries" = "NONE NONE" \ -a -n "$OPENWINHOME" \ -a "$OPENWINHOME" != "/usr/openwin" \ -a -d "$OPENWINHOME"; then test -d "$OPENWINHOME/lib" && x_libraries="$OPENWINHOME/lib" test -d "$OPENWINHOME/include" && x_includes="$OPENWINHOME/include" test -d "$OPENWINHOME/share/include" && x_includes="$OPENWINHOME/share/include" fi if test "$x_includes" = "NONE"; then for dir in "/usr/X11" "/usr/X11R6"; do if test -d "$dir/include/X11"; then x_includes="$dir/include"; break; fi done fi if test "$x_libraries" = "NONE"; then for dir in "/usr/X11/lib" "/usr/X11R6/lib" "/usr/lib/X11R6"; do if test -r "$dir/libX11.a"; then x_libraries="$dir"; break; fi done fi # If we find X, set shell vars x_includes and x_libraries to the # paths, otherwise set no_x=yes. # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 echo "configure:5545: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" : fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then # Both variables are already set. have_x=yes else # One or both of the vars are not set, and there is no cached value. ac_x_includes=NO ac_x_libraries=NO rm -fr conftestdir if mkdir conftestdir; then cd conftestdir # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat > Imakefile <<'EOF' acfindx: @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' EOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl; do if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && test -f $ac_im_libdir/libX11.$ac_extension; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case "$ac_im_incroot" in /usr/include) ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;; esac case "$ac_im_usrlibdir" in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;; esac fi cd .. rm -fr conftestdir fi if test "$ac_x_includes" = NO; then # Guess where to find include files, by looking for this one X11 .h file. test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h # First, try using that file with no special directory specified. cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:5610: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* # We can compile using X headers with no special include directory. ac_x_includes= else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* # Look for the header file in a standard set of common directories. # Check X11 before X11Rn because it is often a symlink to the current release. for ac_dir in \ /usr/X11/include \ /usr/X11R6/include \ /usr/X11R5/include \ /usr/X11R4/include \ \ /usr/include/X11 \ /usr/include/X11R6 \ /usr/include/X11R5 \ /usr/include/X11R4 \ \ /usr/local/X11/include \ /usr/local/X11R6/include \ /usr/local/X11R5/include \ /usr/local/X11R4/include \ \ /usr/local/include/X11 \ /usr/local/include/X11R6 \ /usr/local/include/X11R5 \ /usr/local/include/X11R4 \ \ /usr/X386/include \ /usr/x386/include \ /usr/XFree86/include/X11 \ \ /usr/include \ /usr/local/include \ /usr/unsupported/include \ /usr/athena/include \ /usr/local/x11r5/include \ /usr/lpp/Xamples/include \ \ /usr/openwin/include \ /usr/openwin/share/include \ ; \ do if test -r "$ac_dir/$x_direct_test_include"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest* fi # $ac_x_includes = NO if test "$ac_x_libraries" = NO; then # Check for the libraries. test -z "$x_direct_test_library" && x_direct_test_library=Xt test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBS="$ac_save_LIBS" # We can link X programs with no special library path. ac_x_libraries= else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="$ac_save_LIBS" # First see if replacing the include by lib works. # Check X11 before X11Rn because it is often a symlink to the current release. for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \ /usr/X11/lib \ /usr/X11R6/lib \ /usr/X11R5/lib \ /usr/X11R4/lib \ \ /usr/lib/X11 \ /usr/lib/X11R6 \ /usr/lib/X11R5 \ /usr/lib/X11R4 \ \ /usr/local/X11/lib \ /usr/local/X11R6/lib \ /usr/local/X11R5/lib \ /usr/local/X11R4/lib \ \ /usr/local/lib/X11 \ /usr/local/lib/X11R6 \ /usr/local/lib/X11R5 \ /usr/local/lib/X11R4 \ \ /usr/X386/lib \ /usr/x386/lib \ /usr/XFree86/lib/X11 \ \ /usr/lib \ /usr/local/lib \ /usr/unsupported/lib \ /usr/athena/lib \ /usr/local/x11r5/lib \ /usr/lpp/Xamples/lib \ /lib/usr/lib/X11 \ \ /usr/openwin/lib \ /usr/openwin/share/lib \ ; \ do for ac_extension in a so sl; do if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f conftest* fi # $ac_x_libraries = NO if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then # Didn't find X anywhere. Cache the known absence of X. ac_cv_have_x="have_x=no" else # Record where we found X for the cache. ac_cv_have_x="have_x=yes \ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" fi fi eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then echo "$ac_t""$have_x" 1>&6 no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6 fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. { test "$extra_verbose" = "yes" && cat << \EOF Defining X_DISPLAY_MISSING EOF cat >> confdefs.h <<\EOF #define X_DISPLAY_MISSING 1 EOF } X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . case "`(uname -sr) 2>/dev/null`" in "SunOS 5"*) echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 echo "configure:5795: checking whether -R must be followed by a space" >&5 ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_nospace=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_R_nospace=no fi rm -f conftest* if test $ac_R_nospace = yes; then echo "$ac_t""no" 1>&6 X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_space=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_R_space=no fi rm -f conftest* if test $ac_R_space = yes; then echo "$ac_t""yes" 1>&6 X_LIBS="$X_LIBS -R $x_libraries" else echo "$ac_t""neither works" 1>&6 fi fi LIBS="$ac_xsave_LIBS" esac fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X # libraries were built with DECnet support. And karl@cs.umb.edu says # the Alpha needs dnet_stub (dnet does not exist). if test "$with_dnet" = "no" ; then ac_cv_lib_dnet_dnet_ntoa=no else echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 echo "configure:5864: checking for dnet_ntoa in -ldnet" >&5 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` xe_check_libs=" -ldnet " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" else echo "$ac_t""no" 1>&6 fi fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 echo "configure:5904: checking for dnet_ntoa in -ldnet_stub" >&5 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` xe_check_libs=" -ldnet_stub " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" else echo "$ac_t""no" 1>&6 fi fi # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # chad@anasazi.com says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to dickey@clark.net. echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 echo "configure:5949: checking for gethostbyname" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) choke me #else gethostbyname(); #endif ; return 0; } EOF if { (eval echo configure:5975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_gethostbyname=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_gethostbyname=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 fi if test $ac_cv_func_gethostbyname = no; then echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 echo "configure:5996: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` xe_check_libs=" -lnsl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" else echo "$ac_t""no" 1>&6 fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says simon@lia.di.epfl.ch: it contains # gethostby* variants that don't use the nameserver (or something). # -lsocket must be given before -lnsl if both are needed. # We assume that if connect needs -lnsl, so does gethostbyname. echo $ac_n "checking for connect""... $ac_c" 1>&6 echo "configure:6042: checking for connect" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_connect) || defined (__stub___connect) choke me #else connect(); #endif ; return 0; } EOF if { (eval echo configure:6068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_connect=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_connect=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 fi if test $ac_cv_func_connect = no; then xe_msg_checking="for connect in -lsocket" test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 echo "configure:6091: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` xe_check_libs=" -lsocket $X_EXTRA_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" else echo "$ac_t""no" 1>&6 fi fi # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. echo $ac_n "checking for remove""... $ac_c" 1>&6 echo "configure:6131: checking for remove" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_remove) || defined (__stub___remove) choke me #else remove(); #endif ; return 0; } EOF if { (eval echo configure:6157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_remove=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_remove=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 fi if test $ac_cv_func_remove = no; then echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 echo "configure:6178: checking for remove in -lposix" >&5 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` xe_check_libs=" -lposix " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" else echo "$ac_t""no" 1>&6 fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo $ac_n "checking for shmat""... $ac_c" 1>&6 echo "configure:6218: checking for shmat" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shmat) || defined (__stub___shmat) choke me #else shmat(); #endif ; return 0; } EOF if { (eval echo configure:6244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_shmat=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_shmat=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'shmat`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 fi if test $ac_cv_func_shmat = no; then echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 echo "configure:6265: checking for shmat in -lipc" >&5 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` xe_check_libs=" -lipc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" else echo "$ac_t""no" 1>&6 fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS="$LDFLAGS" test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. xe_msg_checking="for IceConnectionNumber in -lICE" test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 echo "configure:6317: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` xe_check_libs=" -lICE $X_EXTRA_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" else echo "$ac_t""no" 1>&6 fi LDFLAGS="$ac_save_LDFLAGS" fi # Autoconf claims to find X library and include dirs for us. if test "$no_x" = "yes" then with_x11=no window_system=none HAVE_X_WINDOWS=no else with_x11=yes window_system=x11 HAVE_X_WINDOWS=yes fi fi if test "$with_x11" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_X_WINDOWS EOF cat >> confdefs.h <<\EOF #define HAVE_X_WINDOWS 1 EOF } MAKE_SUBDIR="$MAKE_SUBDIR lwlib" && if test "$extra_verbose" = "yes"; then echo " Appending \"lwlib\" to \$MAKE_SUBDIR"; fi SRC_SUBDIR_DEPS="$SRC_SUBDIR_DEPS lwlib" && if test "$extra_verbose" = "yes"; then echo " Appending \"lwlib\" to \$SRC_SUBDIR_DEPS"; fi ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6 echo "configure:6379: checking for Xm/Xm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:6387: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6 echo "configure:6404: checking for XmStringFree in -lXm" >&5 ac_lib_var=`echo Xm'_'XmStringFree | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 got_motif=yes else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi if test "$got_motif" != "yes"; then for lib_dir in "/usr/dt/lib" "/usr/lib/Motif2.1" \ "/usr/lib/Motif1.2" "/usr/lib/Motif1.1"; do inc_dir=`echo $lib_dir | sed -e 's/lib/include/'` if test -d "$lib_dir" -a -d "$inc_dir"; then case "$x_libraries" in *"$lib_dir"* ) ;; *) x_libraries="$lib_dir $x_libraries" X_LIBS="-L${lib_dir} $X_LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-L${lib_dir}\" to \$X_LIBS"; fi ;; esac case "$x_includes" in "$inc_dir"* ) ;; *) x_includes="$inc_dir $x_includes" X_CFLAGS="-I${inc_dir} $X_CFLAGS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-I${inc_dir}\" to \$X_CFLAGS"; fi ;; esac break; fi done fi for rel in "X11R6" "X11R5" "X11R4"; do lib_dir="/usr/contrib/$rel/lib" inc_dir="/usr/contrib/$rel/include" if test -d "$lib_dir" -a -d "$inc_dir"; then case "$x_libraries" in *"$lib_dir"* ) ;; *) x_libraries="$x_libraries $lib_dir" X_LIBS="$X_LIBS -L${lib_dir}" && if test "$extra_verbose" = "yes"; then echo " Appending \"-L${lib_dir}\" to \$X_LIBS"; fi esac case "$x_includes" in "$inc_dir"* ) ;; *) x_includes="$x_includes $inc_dir" X_CFLAGS="$X_CFLAGS -I${inc_dir}" && if test "$extra_verbose" = "yes"; then echo " Appending \"-I${inc_dir}\" to \$X_CFLAGS"; fi esac break; fi done case "$opsys" in decosf*) if test "$GCC" = yes -a -d /usr/shlib; then X_LIBS="$X_LIBS -L/usr/shlib" && if test "$extra_verbose" = "yes"; then echo " Appending \"-L/usr/shlib\" to \$X_LIBS"; fi; fi ;; esac ld_switch_x_site="$X_LIBS" if test "$add_runtime_path" = "yes" -a -n "$dash_r"; then ld_switch_site=`echo '' $ld_switch_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` ld_switch_x_site=`echo '' $ld_switch_x_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` runpath="" runpath_dirs="" if test -n "$LD_RUN_PATH"; then runpath="$LD_RUN_PATH" elif test "$GCC" = "yes"; then ld_switch_run_save="$ld_switch_run"; ld_switch_run="" echo "int main(int argc, char *argv[]) {return 0;}" > conftest.c xe_runpath_link='${CC-cc} -o conftest -v $CFLAGS '"$xe_ldflags"' conftest.$ac_ext 2>&1 1>/dev/null' for arg in `eval "$xe_runpath_link" | grep ' -L'`; do case "$arg" in P,* | -L* | -R* ) for dir in `echo '' "$arg" | sed -e 's:^ ::' -e 's/^..//' -e 'y/:/ /'`; do { xe_runpath_dir="$dir" test "$xe_runpath_dir" != "/lib" -a \ "$xe_runpath_dir" != "/usr/lib" -a \ -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ eval "$xe_add_unique_runpath_dir" } done ;; esac done ld_switch_run="$ld_switch_run_save" rm -f conftest* else for arg in $ld_switch_site $ld_switch_x_site; do case "$arg" in -L*) { xe_runpath_dir=`echo '' "$arg" | sed -e 's:^ ::' -e 's/^-L//'` test "$xe_runpath_dir" != "/lib" -a \ "$xe_runpath_dir" != "/usr/lib" -a \ -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ eval "$xe_add_unique_runpath_dir" };; esac done if test "$opsys $need_motif" = "sol2 yes"; then xe_runpath_dir="/opt/SUNWdt/lib"; eval "$xe_add_unique_runpath_dir"; fi fi if test -n "$runpath"; then ld_switch_run="${dash_r}${runpath}" if test "$GCC" = "yes"; then set x $ld_switch_run; shift; ld_switch_run="" while test -n "$1"; do case $1 in -L | -l | -u ) ld_switch_run="$ld_switch_run $1 $2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) ld_switch_run="$ld_switch_run $1" ;; -Xlinker* ) ;; * ) ld_switch_run="$ld_switch_run -Xlinker $1" ;; esac shift done fi test "$extra_verbose" = "yes" && echo "Setting runpath to $runpath" fi fi if test "$extra_verbose" = "yes"; then echo; echo "X11 compilation variables:" for var in x_libraries x_includes X_CFLAGS X_LIBS X_PRE_LIBS X_EXTRA_LIBS; do eval "echo \"$var = '\$$var'\""; done echo fi bitmapdirs= if test "$x_includes" != NONE; then for i in $x_includes; do if test -d "$i/bitmaps"; then bitmapdirs="$i/bitmaps:$bitmapdirs" fi if test -d "$i/X11/bitmaps"; then bitmapdirs="$i/X11/bitmaps:$bitmapdirs" fi done bitmapdirs=`echo "$bitmapdirs" | sed s/.$//` fi test ! -z "$bitmapdirs" && { test "$extra_verbose" = "yes" && cat << EOF Defining BITMAPDIR = "$bitmapdirs" EOF cat >> confdefs.h <&6 echo "configure:6572: checking for X defines extracted by xmkmf" >&5 rm -fr conftestdir if mkdir conftestdir; then cd conftestdir cat > Imakefile <<'EOF' xetest: @echo ${PROTO_DEFINES} ${STD_DEFINES} EOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. xmkmf_defines=`${MAKE-make} xetest 2>/dev/null | grep -v make` fi cd .. rm -fr conftestdir for word in $xmkmf_defines; do case "$word" in -D__STDC__*) ;; -D* ) sym=`echo '' $word | sed -e 's:^ *-D::' -e 's:=.*::'` case "$word" in -D*=* ) val=`echo '' $word | sed -e 's:^.*=::'` ;; * ) val=1 ;; esac if grep "^#define $sym " confdefs.h >/dev/null; then :; else if test "$val" = "1" then { test "$extra_verbose" = "yes" && cat << EOF Defining $sym EOF cat >> confdefs.h <> confdefs.h <&6 echo "configure:6621: checking for X11/Intrinsic.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:6629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 { echo "configure: error: "Unable to find X11 header files."" 1>&2; exit 1; } fi echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6 echo "configure:6653: checking for XOpenDisplay in -lX11" >&5 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 have_lib_x11=yes else echo "$ac_t""no" 1>&6 fi if test "$have_lib_x11" != "yes"; then xe_msg_checking="for XGetFontProperty in -lX11" test -n "-b i486-linuxaout" && xe_msg_checking="$xe_msg_checking using extra libs -b i486-linuxaout" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 echo "configure:6694: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo X11'_'XGetFontProperty | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 -b i486-linuxaout" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 ld_switch_x_site="-b i486-linuxaout $ld_switch_x_site" else echo "$ac_t""no" 1>&6 { echo "configure: error: "Unable to find X11 libraries."" 1>&2; exit 1; } fi fi libs_x="-lX11" test "$extra_verbose" = "yes" && echo " Setting libs_x to \"-lX11\"" echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6 echo "configure:6737: checking for XShapeSelectInput in -lXext" >&5 ac_lib_var=`echo Xext'_'XShapeSelectInput | sed 'y%./+-%__p_%'` xe_check_libs=" -lXext " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_x="-lXext $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXext\" to \$libs_x"; fi else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6 echo "configure:6776: checking for XtOpenDisplay in -lXt" >&5 ac_lib_var=`echo Xt'_'XtOpenDisplay | sed 'y%./+-%__p_%'` xe_check_libs=" -lXt " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_x="-lXt $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXt\" to \$libs_x"; fi else echo "$ac_t""no" 1>&6 { echo "configure: error: "Unable to find X11 libraries."" 1>&2; exit 1; } fi echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6 echo "configure:6815: checking the version of X11 being used" >&5 cat > conftest.$ac_ext < int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; } EOF if { (eval echo configure:6822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ./conftest foobar; x11_release=$? else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* x11_release=4 fi rm -fr conftest* echo "$ac_t""R${x11_release}" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining THIS_IS_X11R${x11_release} EOF cat >> confdefs.h <&2; exit 1; } ;; esac fi for ac_func in XConvertCase XtRegisterDrawable do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:6853: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:6879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done for ac_hdr in X11/Xlocale.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:6911: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:6919: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_hdr EOF cat >> confdefs.h <&6 fi done for ac_func in XRegisterIMInstantiateCallback do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:6952: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:6978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done echo $ac_n "checking for standard XRegisterIMInstantiateCallback prototype""... $ac_c" 1>&6 echo "configure:7006: checking for standard XRegisterIMInstantiateCallback prototype" >&5 cat > conftest.$ac_ext < extern Bool XRegisterIMInstantiateCallback( Display*, struct _XrmHashBucketRec*, char*, char*, XIMProc, XPointer*); int main() { ; return 0; } EOF if { (eval echo configure:7020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE EOF cat >> confdefs.h <<\EOF #define XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE 1 EOF } fi rm -f conftest* test -z "$with_xmu" && { echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6 echo "configure:7041: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 ac_lib_var=`echo Xmu'_'XmuReadBitmapDataFromFile | sed 'y%./+-%__p_%'` xe_check_libs=" -lXmu " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_xmu=yes else echo "$ac_t""no" 1>&6 with_xmu=no fi } if test "$with_xmu" = "no"; then extra_objs="$extra_objs xmu.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"xmu.o\"" fi else libs_x="-lXmu $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXmu\" to \$libs_x"; fi { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_XMU EOF cat >> confdefs.h <<\EOF #define HAVE_XMU 1 EOF } fi echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6 echo "configure:7096: checking for main in -lXbsd" >&5 ac_lib_var=`echo Xbsd'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lXbsd " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_x="-lXbsd $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXbsd\" to \$libs_x"; fi else echo "$ac_t""no" 1>&6 fi if test "$unexec" = "unexaix.o" -a "$x11_release" = "6"; then if test "$GCC" = "yes"; then echo $ac_n "checking for name of AIX gcc threads option""... $ac_c" 1>&6 echo "configure:7132: checking for name of AIX gcc threads option" >&5 case `$CC -v --help 2>&1` in *-mthreads*) aix_threads=-mthreads ;; *) aix_threads=-pthread ;; esac echo "$ac_t""$aix_threads" 1>&6 X_CFLAGS="$aix_threads $X_CFLAGS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"$aix_threads\" to \$X_CFLAGS"; fi libs_x="$aix_threads $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"$aix_threads\" to \$libs_x"; fi else case "$CC" in *_r) : ;; *) xe_save_CC="$CC" CC="${CC}_r" echo $ac_n "checking size of short""... $ac_c" 1>&6 echo "configure:7146: checking size of short" >&5 cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); exit(0); } EOF if { (eval echo configure:7160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_short=`cat conftestval` else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_short=0 fi rm -fr conftest* echo "$ac_t""$ac_cv_sizeof_short" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining SIZEOF_SHORT = $ac_cv_sizeof_short EOF cat >> confdefs.h <&6 echo "configure:7189: checking for MS-Windows" >&5 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6 echo "configure:7192: checking for main in -lgdi32" >&5 ac_lib_var=`echo gdi32'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdi32 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_msw=yes else echo "$ac_t""no" 1>&6 fi if test "$with_msw" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_MS_WINDOWS EOF cat >> confdefs.h <<\EOF #define HAVE_MS_WINDOWS 1 EOF } if test "$with_netinstall" = "yes"; then MAKE_SUBDIR="$MAKE_SUBDIR netinstall" && if test "$extra_verbose" = "yes"; then echo " Appending \"netinstall\" to \$MAKE_SUBDIR"; fi SRC_SUBDIR_DEPS="$SRC_SUBDIR_DEPS netinstall" && if test "$extra_verbose" = "yes"; then echo " Appending \"netinstall\" to \$SRC_SUBDIR_DEPS"; fi INSTALL_ARCH_DEP_SUBDIR="$INSTALL_ARCH_DEP_SUBDIR netinstall" && if test "$extra_verbose" = "yes"; then echo " Appending \"netinstall\" to \$INSTALL_ARCH_DEP_SUBDIR"; fi fi install_pp="$srcdir/lib-src/installexe.sh" libs_system="$libs_system -lshell32 -lgdi32 -luser32 -lcomdlg32 -lcomctl32 -lkernel32 -lwinspool" && if test "$extra_verbose" = "yes"; then echo " Appending \"-lshell32 -lgdi32 -luser32 -lcomdlg32 -lcomctl32 -lkernel32 -lwinspool\" to \$libs_system"; fi test "$with_dragndrop" != no && dragndrop_proto="$dragndrop_proto msw" && if test "$extra_verbose" = "yes"; then echo " Appending \"msw\" to \$dragndrop_proto"; fi if test "$window_system" != x11; then window_system=msw test "$with_scrollbars" != "no" && with_scrollbars=msw \ && extra_objs="$extra_objs scrollbar-msw.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"scrollbar-msw.o\"" fi test "$with_menubars" != "no" && with_menubars=msw \ && extra_objs="$extra_objs menubar-msw.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"menubar-msw.o\"" fi test "$with_toolbars" != "no" && with_toolbars=msw \ && extra_objs="$extra_objs toolbar-msw.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"toolbar-msw.o\"" fi test "$with_dialogs" != "no" && with_dialogs=msw \ && extra_objs="$extra_objs dialog-msw.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"dialog-msw.o\"" fi test "$with_widgets" != "no" && with_widgets=msw else test "$with_scrollbars" != "no" && extra_objs="$extra_objs scrollbar-msw.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"scrollbar-msw.o\"" fi test "$with_menubars" != "no" && extra_objs="$extra_objs menubar-msw.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"menubar-msw.o\"" fi test "$with_toolbars" != "no" && extra_objs="$extra_objs toolbar-msw.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"toolbar-msw.o\"" fi test "$with_dialogs" != "no" && extra_objs="$extra_objs dialog-msw.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"dialog-msw.o\"" fi fi cat > conftest.$ac_ext < int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; } EOF if { (eval echo configure:7282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then need_event_unixoid=yes; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_MSG_SELECT EOF cat >> confdefs.h <<\EOF #define HAVE_MSG_SELECT 1 EOF } else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -fr conftest* with_file_coding=yes extra_objs="$extra_objs console-msw.o device-msw.o event-msw.o frame-msw.o objects-msw.o select-msw.o redisplay-msw.o glyphs-msw.o gui-msw.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"console-msw.o device-msw.o event-msw.o frame-msw.o objects-msw.o select-msw.o redisplay-msw.o glyphs-msw.o gui-msw.o\"" fi fi fi test -z "$window_system" && window_system="none" if test "$window_system" = "none"; then for feature in menubars scrollbars toolbars dialogs dragndrop xface do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then echo "configure: warning: --with-$feature ignored: Not valid without window system support" 1>&2 fi eval "with_${feature}=no" done else test -z "$with_toolbars" && with_toolbars=yes fi if test "$with_msw" != "yes"; then for feature in MARTIN_IS_CLUELESS_ABOUT_MSW_FEATURES do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then echo "configure: warning: --with-$feature ignored: Not valid without MS-Windows support" 1>&2 fi eval "with_${feature}=no" done else : fi if test "$with_x11" != "yes"; then for feature in tooltalk cde offix wmcommand xim xmu nas_sound do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then echo "configure: warning: --with-$feature ignored: Not valid without X support" 1>&2 fi eval "with_${feature}=no" done fi if test "$with_x11" = "yes"; then ac_safe=`echo "X11/extensions/shape.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/extensions/shape.h""... $ac_c" 1>&6 echo "configure:7346: checking for X11/extensions/shape.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:7354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_BALLOON_HELP EOF cat >> confdefs.h <<\EOF #define HAVE_BALLOON_HELP 1 EOF } extra_objs="$extra_objs balloon_help.o balloon-x.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"balloon_help.o balloon-x.o\"" fi else echo "$ac_t""no" 1>&6 fi fi bitmapdir= case "$window_system" in x11 ) HAVE_X_WINDOWS=yes; echo " Using X11." ;; msw ) HAVE_X_WINDOWS=no ; echo " Using MS-Windows." ;; gtk ) HAVE_X_WINDOWS=no test "$with_gnome" = "yes" && echo " Using GNOME." test "$with_gnome" = "no" && echo " Using GTK." ;; none ) HAVE_X_WINDOWS=no ; echo " Using no window system." ;; esac case "$x_libraries" in *X11R4* ) test "$opsys" = "hpux9" && opsysfile="s/hpux9-x11r4.h" test "$opsys" = "hpux9-shr" && opsysfile="s/hpux9shxr4.h" esac echo "checking for WM_COMMAND option" 1>&6 echo "configure:7406: checking for WM_COMMAND option" >&5; if test "$with_wmcommand" != "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_WMCOMMAND EOF cat >> confdefs.h <<\EOF #define HAVE_WMCOMMAND 1 EOF } fi test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no test -z "$with_xauth" && { ac_safe=`echo "X11/Xauth.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xauth.h""... $ac_c" 1>&6 echo "configure:7421: checking for X11/Xauth.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:7429: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_xauth=no fi } test -z "$with_xauth" && { echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6 echo "configure:7452: checking for XauGetAuthByAddr in -lXau" >&5 ac_lib_var=`echo Xau'_'XauGetAuthByAddr | sed 'y%./+-%__p_%'` xe_check_libs=" -lXau " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_xauth=no fi } test -z "$with_xauth" && with_xauth=yes if test "$with_xauth" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_XAUTH EOF cat >> confdefs.h <<\EOF #define HAVE_XAUTH 1 EOF } T="" for W in $GTK_LIBS $X_EXTRA_LIBS -lXau $libs_x $X_PRE_LIBS; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done libs_xauth="$T" fi if test "$with_tooltalk" != "no" ; then for dir in "" "Tt/" "desktop/" ; do ac_safe=`echo "${dir}tt_c.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${dir}tt_c.h""... $ac_c" 1>&6 echo "configure:7513: checking for ${dir}tt_c.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:7521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 tt_c_h_file="${dir}tt_c.h"; break else echo "$ac_t""no" 1>&6 fi done if test -z "$tt_c_h_file"; then if test "$with_tooltalk" = "yes"; then (echo "$progname: Usage error:" echo " " "Unable to find required tooltalk header files." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 fi with_tooltalk=no fi fi if test "$with_tooltalk" != "no" ; then for extra_libs in "" "-lI18N -lce" "-lcxx"; do xe_msg_checking="for tt_message_create in -ltt" test -n "$extra_libs" && xe_msg_checking="$xe_msg_checking using extra libs $extra_libs" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 echo "configure:7557: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo tt'_'tt_message_create | sed 'y%./+-%__p_%'` xe_check_libs=" -ltt $extra_libs" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 tt_libs="-ltt $extra_libs"; break else echo "$ac_t""no" 1>&6 : fi done if test -z "$tt_libs"; then if test "$with_tooltalk" = "yes"; then (echo "$progname: Usage error:" echo " " "Unable to find required tooltalk libraries." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 fi with_tooltalk=no fi fi test -z "$with_tooltalk" && with_tooltalk=yes if test "$with_tooltalk" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining TOOLTALK EOF cat >> confdefs.h <<\EOF #define TOOLTALK 1 EOF } { test "$extra_verbose" = "yes" && cat << EOF Defining TT_C_H_FILE = "$tt_c_h_file" EOF cat >> confdefs.h <&6 echo "configure:7630: checking for Dt/Dt.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:7638: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_cde=no fi } test -z "$with_cde" && { echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6 echo "configure:7661: checking for DtDndDragStart in -lDtSvc" >&5 ac_lib_var=`echo DtSvc'_'DtDndDragStart | sed 'y%./+-%__p_%'` xe_check_libs=" -lDtSvc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_cde=no fi } test -z "$with_cde" && with_cde=yes if test "$with_dragndrop" = no; then echo "configure: warning: No CDE without generic Drag'n'Drop support" 1>&2 with_cde=no fi if test "$with_cde" = "yes" ; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_CDE EOF cat >> confdefs.h <<\EOF #define HAVE_CDE 1 EOF } libs_x="-lDtSvc $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lDtSvc\" to \$libs_x"; fi dragndrop_proto="$dragndrop_proto CDE" && if test "$extra_verbose" = "yes"; then echo " Appending \"CDE\" to \$dragndrop_proto"; fi with_tooltalk=yes # CDE requires Tooltalk need_motif=yes # CDE requires Motif fi test "$window_system" != "x11" && with_offix=no if test "$with_xmu" != yes -a "$with_x11" = yes; then echo "configure: warning: No OffiX without real Xmu support" 1>&2 with_offix=no fi if test "$with_dragndrop" = no; then echo "configure: warning: No OffiX without generic Drag'n'Drop support" 1>&2 with_offix=no fi if test "$with_cde" = yes; then echo "configure: warning: CDE already found, disabling OffiX support" 1>&2 with_offix=no fi test -z "$with_offix" && with_offix=no if test "$with_offix" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_OFFIX_DND EOF cat >> confdefs.h <<\EOF #define HAVE_OFFIX_DND 1 EOF } dnd_objs="$dnd_objs offix.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"offix.o\" to \$dnd_objs"; fi dragndrop_proto="$dragndrop_proto OffiX" && if test "$extra_verbose" = "yes"; then echo " Appending \"OffiX\" to \$dragndrop_proto"; fi fi if test "$with_gtk" = "yes"; then dragndrop_proto="$dragndrop_proto GTK" && if test "$extra_verbose" = "yes"; then echo " Appending \"GTK\" to \$dragndrop_proto"; fi fi if test "$with_dragndrop" != "no" ; then echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6 echo "configure:7750: checking if drag and drop API is needed" >&5 if test -n "$dragndrop_proto" ; then with_dragndrop=yes echo "$ac_t""yes (${dragndrop_proto} )" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_DRAGNDROP EOF cat >> confdefs.h <<\EOF #define HAVE_DRAGNDROP 1 EOF } extra_objs="$extra_objs dragdrop.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"dragdrop.o\" to \$extra_objs"; fi else with_dragndrop=no echo "$ac_t""no" 1>&6 fi fi echo "checking for LDAP" 1>&6 echo "configure:7770: checking for LDAP" >&5 test -z "$with_ldap" && { ac_safe=`echo "ldap.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ldap.h""... $ac_c" 1>&6 echo "configure:7773: checking for ldap.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:7781: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_ldap=no fi } test -z "$with_ldap" && { ac_safe=`echo "lber.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for lber.h""... $ac_c" 1>&6 echo "configure:7804: checking for lber.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:7812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_ldap=no fi } if test no != "$with_ldap";then if test . != "${ldap_libs+.}";then ldap_libs= echo $ac_n "checking for ldap_open""... $ac_c" 1>&6 echo "configure:7837: checking for ldap_open" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char ldap_open(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_ldap_open) || defined (__stub___ldap_open) choke me #else ldap_open(); #endif ; return 0; } EOF if { (eval echo configure:7863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_ldap_open=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_ldap_open=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'ldap_open`\" = yes"; then echo "$ac_t""yes" 1>&6 with_ldap=yes test yes = "$extra_verbose" && echo "Setting ldap_libs to $ldap_libs" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for ldap_open in -lldap""... $ac_c" 1>&6 echo "configure:7883: checking for ldap_open in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_ldap=yes else echo "$ac_t""no" 1>&6 ldap_needs_lber=yes ldap_other_libs=-llber xe_msg_checking="for ldap_open in -lldap" test -n "$ldap_other_libs" && xe_msg_checking="$xe_msg_checking using extra libs $ldap_other_libs" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 echo "configure:7921: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap $ldap_other_libs" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_ldap=yes else echo "$ac_t""no" 1>&6 ldap_needs_krb=yes ldap_other_libs="$ldap_other_libs -lkrb" xe_msg_checking="for ldap_open in -lldap" test -n "$ldap_other_libs" && xe_msg_checking="$xe_msg_checking using extra libs $ldap_other_libs" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 echo "configure:7959: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap $ldap_other_libs" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_ldap=yes else echo "$ac_t""no" 1>&6 ldap_needs_des=yes ldap_other_libs="$ldap_other_libs -ldes" xe_msg_checking="for ldap_open in -lldap" test -n "$ldap_other_libs" && xe_msg_checking="$xe_msg_checking using extra libs $ldap_other_libs" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 echo "configure:7997: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap $ldap_other_libs" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_ldap=yes else echo "$ac_t""no" 1>&6 with_ldap=no fi fi fi fi if test yes = "$with_ldap" -a yes != "$ldap_needs_lber";then echo $ac_n "checking for LDAP_OPT_ON definition""... $ac_c" 1>&6 echo "configure:8045: checking for LDAP_OPT_ON definition" >&5 cat > conftest.$ac_ext < #include #ifdef LDAP_OPT_ON /* Relying on const defined by ac_c_const (upper case). */ const void *const v = LDAP_OPT_ON; #else /* !defined (LDAP_OPT_ON) */ choke me #endif /* !defined (LDAP_OPT_ON) */ int main() { ; return 0; } EOF if { (eval echo configure:8062: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* xe_cv_have_LDAP_OPT_ON=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* xe_cv_have_LDAP_OPT_ON=no fi rm -f conftest* echo "$ac_t""$xe_cv_have_LDAP_OPT_ON" 1>&6 if test yes = "$xe_cv_have_LDAP_OPT_ON";then echo $ac_n "checking LDAP_OPT_ON linking""... $ac_c" 1>&6 echo "configure:8076: checking LDAP_OPT_ON linking" >&5 xe_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext < #include const void *const v = LDAP_OPT_ON; int main() { ; return 0; } EOF if { (eval echo configure:8090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xe_cv_LDAP_OPT_ON_links=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* xe_cv_LDAP_OPT_ON_links=no fi rm -f conftest* LIBS="$xe_save_LIBS" echo "$ac_t""$xe_cv_LDAP_OPT_ON_links" 1>&6 if test yes != "$xe_cv_LDAP_OPT_ON_links";then ldap_needs_lber=yes ldap_other_libs=-llber echo $ac_n "checking LDAP_OPT_ON linking with -llber""... $ac_c" 1>&6 echo "configure:8106: checking LDAP_OPT_ON linking with -llber" >&5 xe_save_LIBS="$LIBS" LIBS="-lldap $ldap_other_libs $LIBS" cat > conftest.$ac_ext < #include const void *const v = LDAP_OPT_ON; int main() { ; return 0; } EOF if { (eval echo configure:8120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xe_cv_LDAP_OPT_ON_links_w_lber=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* xe_cv_LDAP_OPT_ON_links_w_lber=no fi rm -f conftest* LIBS="$xe_save_LIBS" echo "$ac_t""$xe_cv_LDAP_OPT_ON_links_w_lber" 1>&6 if test yes != "$xe_cv_LDAP_OPT_ON_links_w_lber";then with_ldap=no fi fi fi fi if test yes = "$with_ldap";then if test yes = "$ldap_needs_des";then ldap_libs="-ldes $ldap_libs" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-ldes\" to \$ldap_libs"; fi fi if test yes = "$ldap_needs_krb";then ldap_libs="-lkrb $ldap_libs" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lkrb\" to \$ldap_libs"; fi fi if test yes = "$ldap_needs_lber";then ldap_libs="-llber $ldap_libs" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-llber\" to \$ldap_libs"; fi fi ldap_libs="-lldap $ldap_libs" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lldap\" to \$ldap_libs"; fi fi fi else save_LIBS="$LIBS" LIBS="$ldap_libs $LIBS" echo $ac_n "checking for ldap_open""... $ac_c" 1>&6 echo "configure:8156: checking for ldap_open" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char ldap_open(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_ldap_open) || defined (__stub___ldap_open) choke me #else ldap_open(); #endif ; return 0; } EOF if { (eval echo configure:8182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_ldap_open=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_ldap_open=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'ldap_open`\" = yes"; then echo "$ac_t""yes" 1>&6 with_ldap=yes test yes = "$extra_verbose" && echo "Setting ldap_libs to $ldap_libs" else echo "$ac_t""no" 1>&6 with_ldap=no fi LIBS="$save_LIBS" fi fi if test "$with_ldap" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_LDAP EOF cat >> confdefs.h <<\EOF #define HAVE_LDAP 1 EOF } extra_objs="$extra_objs eldap.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"eldap.o\"" fi LIBS="$ldap_libs $LIBS" for ac_func in ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:8222: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:8248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done fi if test "$with_postgresql" != "no"; then echo "checking for PostgreSQL" 1>&6 echo "configure:8279: checking for PostgreSQL" >&5 for header_dir in "" "pgsql/" "postgresql/"; do ac_safe=`echo "${header_dir}libpq-fe.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${header_dir}libpq-fe.h""... $ac_c" 1>&6 echo "configure:8284: checking for ${header_dir}libpq-fe.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:8292: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 libpq_fe_h_file=${header_dir}libpq-fe.h; break else echo "$ac_t""no" 1>&6 fi done test -n "$libpq_fe_h_file" && { echo $ac_n "checking for PQconnectdb in -lpq""... $ac_c" 1>&6 echo "configure:8316: checking for PQconnectdb in -lpq" >&5 ac_lib_var=`echo pq'_'PQconnectdb | sed 'y%./+-%__p_%'` xe_check_libs=" -lpq " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 have_libpq=yes else echo "$ac_t""no" 1>&6 fi } if test -n "$libpq_fe_h_file" -a "$have_libpq" = "yes"; then with_postgresql=yes { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_POSTGRESQL EOF cat >> confdefs.h <<\EOF #define HAVE_POSTGRESQL 1 EOF } echo $ac_n "checking for PQconnectStart in -lpq""... $ac_c" 1>&6 echo "configure:8365: checking for PQconnectStart in -lpq" >&5 ac_lib_var=`echo pq'_'PQconnectStart | sed 'y%./+-%__p_%'` xe_check_libs=" -lpq " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_postgresqlv7=yes; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_POSTGRESQLV7 EOF cat >> confdefs.h <<\EOF #define HAVE_POSTGRESQLV7 1 EOF } else echo "$ac_t""no" 1>&6 fi { test "$extra_verbose" = "yes" && cat << EOF Defining LIBPQ_FE_H_FILE = "$libpq_fe_h_file" EOF cat >> confdefs.h <&2; exit 1; } fi fi if test "$window_system" != "none"; then echo "checking for graphics libraries" 1>&6 echo "configure:8429: checking for graphics libraries" >&5 libpath_xpm= incpath_xpm= libname_xpm="-lXpm" case "$opsys" in cygwin*) cygwin_top=`eval gcc -print-search-dirs | sed -ne s'/install: //p'` cygwin_top=`eval "cd $cygwin_top/../../../..; pwd"` case "$window_system" in x11) ;; msw) libpath_xpm="-L${cygwin_top}/lib/noX" incpath_xpm="-I${cygwin_top}/include/noX" libname_xpm="-lXpm-noX" ;; gtk) ;; none) ;; *) ;; esac ;; *) ;; esac xpm_problem="" if test -z "$with_xpm"; then CFLAGS=""$incpath_xpm" $CFLAGS" && if test "$extra_verbose" = "yes"; then echo " Prepending \""$incpath_xpm"\" to \$CFLAGS"; fi LDFLAGS=""$libpath_xpm" $LDFLAGS" && if test "$extra_verbose" = "yes"; then echo " Prepending \""$libpath_xpm"\" to \$LDFLAGS"; fi echo $ac_n "checking for Xpm - no older than 3.4f""... $ac_c" 1>&6 echo "configure:8456: checking for Xpm - no older than 3.4f" >&5 xe_check_libs="$libname_xpm" cat > conftest.$ac_ext < int main(int c, char **v) { return c == 1 ? 0 : XpmIncludeVersion != XpmLibraryVersion() ? 1 : XpmIncludeVersion < 30406 ? 2 : 0 ;} EOF if { (eval echo configure:8468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ./conftest dummy_arg; xpm_status=$?; if test "$xpm_status" = "0"; then with_xpm=yes; else with_xpm=no; if test "$xpm_status" = "1"; then xpm_problem="Xpm library version and header file version don't match!" elif test "$xpm_status" = "2"; then xpm_problem="Xpm library version is too old!" else xpm_problem="Internal xpm detection logic error!" fi echo " *** WARNING *** $xpm_problem I'm not touching that with a 10-foot pole! If you really want to use the installed version of Xpm, rerun configure and add '--with-xpm=yes', but don't blame me if XEmacs crashes!" fi else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* with_xpm=no fi rm -fr conftest* xe_check_libs= echo "$ac_t""$with_xpm" 1>&6 fi if test "$with_xpm" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_XPM EOF cat >> confdefs.h <<\EOF #define HAVE_XPM 1 EOF } LDFLAGS=""$libpath_xpm" $LDFLAGS" && if test "$extra_verbose" = "yes"; then echo " Prepending \""$libpath_xpm"\" to \$LDFLAGS"; fi libs_x=""$libname_xpm" $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \""$libname_xpm"\" to \$libs_x"; fi CFLAGS=""$incpath_xpm" $CFLAGS" && if test "$extra_verbose" = "yes"; then echo " Prepending \""$incpath_xpm"\" to \$CFLAGS"; fi echo $ac_n "checking for \"FOR_MSW\" xpm""... $ac_c" 1>&6 echo "configure:8512: checking for \"FOR_MSW\" xpm" >&5 xe_check_libs="$libname_xpm" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xpm_for_msw=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* xpm_for_msw=yes fi rm -f conftest* xe_check_libs= echo "$ac_t""$xpm_for_msw" 1>&6 if test "$xpm_for_msw" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining FOR_MSW EOF cat >> confdefs.h <<\EOF #define FOR_MSW 1 EOF } fi fi test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for compface.h""... $ac_c" 1>&6 echo "configure:8548: checking for compface.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:8556: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_xface=no fi } test -z "$with_xface" && { echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6 echo "configure:8579: checking for UnGenFace in -lcompface" >&5 ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'` xe_check_libs=" -lcompface " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_xface=no fi } test -z "$with_xface" && with_xface=yes if test "$with_xface" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_XFACE EOF cat >> confdefs.h <<\EOF #define HAVE_XFACE 1 EOF } libs_x="-lcompface $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lcompface\" to \$libs_x"; fi fi if test "$with_gif" != "no"; then with_gif="yes" { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_GIF EOF cat >> confdefs.h <<\EOF #define HAVE_GIF 1 EOF } extra_objs="$extra_objs dgif_lib.o gif_io.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"dgif_lib.o gif_io.o\"" fi fi if test "$with_png $with_tiff" != "no no"; then echo $ac_n "checking for inflate in -lc""... $ac_c" 1>&6 echo "configure:8647: checking for inflate in -lc" >&5 ac_lib_var=`echo c'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6 echo "configure:8682: checking for inflate in -lz" >&5 ac_lib_var=`echo z'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lz " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_x="-lz $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lz\" to \$libs_x"; fi else echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6 echo "configure:8717: checking for inflate in -lgz" >&5 ac_lib_var=`echo gz'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lgz " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_x="-lgz $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lgz\" to \$libs_x"; fi else echo "$ac_t""no" 1>&6 fi fi fi fi test -z "$with_jpeg" && { ac_safe=`echo "jpeglib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for jpeglib.h""... $ac_c" 1>&6 echo "configure:8763: checking for jpeglib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:8771: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_jpeg=no fi } test -z "$with_jpeg" && { echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6 echo "configure:8794: checking for jpeg_destroy_decompress in -ljpeg" >&5 ac_lib_var=`echo jpeg'_'jpeg_destroy_decompress | sed 'y%./+-%__p_%'` xe_check_libs=" -ljpeg " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_jpeg=no fi } test -z "$with_jpeg" && with_jpeg=yes if test "$with_jpeg" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_JPEG EOF cat >> confdefs.h <<\EOF #define HAVE_JPEG 1 EOF } libs_x="-ljpeg $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-ljpeg\" to \$libs_x"; fi fi png_problem="" test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6 echo "configure:8846: checking for pow" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pow(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_pow) || defined (__stub___pow) choke me #else pow(); #endif ; return 0; } EOF if { (eval echo configure:8872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_pow=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_pow=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'pow`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_png=no fi } test -z "$with_png" && { ac_safe=`echo "png.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for png.h""... $ac_c" 1>&6 echo "configure:8893: checking for png.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:8901: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_png=no fi } test -z "$with_png" && { echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6 echo "configure:8924: checking for png_read_image in -lpng" >&5 ac_lib_var=`echo png'_'png_read_image | sed 'y%./+-%__p_%'` xe_check_libs=" -lpng " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_png=no fi } if test -z "$with_png"; then echo $ac_n "checking for workable png version information""... $ac_c" 1>&6 echo "configure:8963: checking for workable png version information" >&5 xe_check_libs="-lpng -lz" cat > conftest.$ac_ext < int main(int c, char **v) { if (c == 1) return 0; if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0) return 1; return (PNG_LIBPNG_VER < 10002) ? 2 : 0 ;} EOF if { (eval echo configure:8974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ./conftest dummy_arg; png_status=$?; if test "$png_status" = "0"; then with_png=yes; else with_png=no; if test "$png_status" = "1"; then png_problem="PNG library version and header file don't match!" elif test "$png_status" = "2"; then png_problem="PNG library version too old (pre 1.0.2)!" fi echo " *** WARNING *** $png_problem I'm not touching that with a 10-foot pole! If you really want to use the installed version of libPNG, rerun configure and add '--with-png=yes', but don't blame me if XEmacs crashes!" fi else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* with_png=no fi rm -fr conftest* xe_check_libs= echo "$ac_t""$with_png" 1>&6 fi if test "$with_png" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_PNG EOF cat >> confdefs.h <<\EOF #define HAVE_PNG 1 EOF } libs_x="-lpng $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lpng\" to \$libs_x"; fi fi test -z "$with_tiff" && { ac_safe=`echo "tiffio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for tiffio.h""... $ac_c" 1>&6 echo "configure:9017: checking for tiffio.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9025: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_tiff=no fi } test -z "$with_tiff" && { echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6 echo "configure:9048: checking for TIFFClientOpen in -ltiff" >&5 ac_lib_var=`echo tiff'_'TIFFClientOpen | sed 'y%./+-%__p_%'` xe_check_libs=" -ltiff " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_tiff=no fi } test -z "$with_tiff" && with_tiff=yes if test "$with_tiff" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TIFF EOF cat >> confdefs.h <<\EOF #define HAVE_TIFF 1 EOF } libs_x="-ltiff $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-ltiff\" to \$libs_x"; fi fi fi if test "$with_gtk" = "yes"; then test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for compface.h""... $ac_c" 1>&6 echo "configure:9103: checking for compface.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9111: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_xface=no fi } test -z "$with_xface" && { echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6 echo "configure:9134: checking for UnGenFace in -lcompface" >&5 ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'` xe_check_libs=" -lcompface " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_xface=no fi } test -z "$with_xface" && with_xface=yes if test "$with_xface" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_XFACE EOF cat >> confdefs.h <<\EOF #define HAVE_XFACE 1 EOF } libs_gtk="-lcompface $libs_gtk" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lcompface\" to \$libs_gtk"; fi fi fi if test "$with_x11" = "yes"; then echo "checking for X11 graphics libraries" 1>&6 echo "configure:9189: checking for X11 graphics libraries" >&5 fi if test "$with_x11" = "yes"; then echo "checking for the Athena widgets" 1>&6 echo "configure:9194: checking for the Athena widgets" >&5 case "$with_athena" in "xaw" | "") athena_variant=Xaw athena_3d=no ;; "3d") athena_variant=Xaw3d athena_3d=yes ;; "next") athena_variant=neXtaw athena_3d=yes ;; "95") athena_variant=Xaw95 athena_3d=yes ;; "xpm") athena_variant=XawXpm athena_3d=yes ;; *) { echo "Error:" "Unknown Athena widget set \`$with_athena'. This should not happen." >&2; exit 1; } ;; esac athena_3d_function=Xaw3dComputeBottomShadowRGB if test "$athena_3d" = "no"; then echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6 echo "configure:9210: checking for XawScrollbarSetThumb in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for $athena_3d_function in -l$athena_variant""... $ac_c" 1>&6 echo "configure:9242: checking for $athena_3d_function in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'$athena_3d_function | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 echo "configure: warning: "Could not find a non-3d Athena widget library."" 1>&2 else echo "$ac_t""no" 1>&6 athena_lib=$athena_variant fi else echo "$ac_t""no" 1>&6 echo "configure: warning: "Could not find an Athena widget library."" 1>&2 fi else echo $ac_n "checking for $athena_3d_function in -l$athena_variant""... $ac_c" 1>&6 echo "configure:9289: checking for $athena_3d_function in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'$athena_3d_function | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 athena_lib=$athena_variant else echo "$ac_t""no" 1>&6 echo $ac_n "checking for $athena_3d_function in -lXaw""... $ac_c" 1>&6 echo "configure:9323: checking for $athena_3d_function in -lXaw" >&5 ac_lib_var=`echo Xaw'_'$athena_3d_function | sed 'y%./+-%__p_%'` xe_check_libs=" -lXaw " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 athena_lib=Xaw; echo "configure: warning: "Assuming that libXaw is actually $athena_variant."" 1>&2; else echo "$ac_t""no" 1>&6 echo "configure: warning: "Could not find a 3d Athena widget library that looked like $athena_variant."" 1>&2 fi fi fi if test "$athena_3d" = "no"; then ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6 echo "configure:9370: checking for X11/Xaw/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9378: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo "configure: warning: "Could not find a non-3d Athena header set."" 1>&2 else echo "$ac_t""no" 1>&6 ac_safe=`echo "X11/Xaw/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/XawInit.h""... $ac_c" 1>&6 echo "configure:9398: checking for X11/Xaw/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9406: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 athena_h_path=X11/Xaw else echo "$ac_t""no" 1>&6 echo "configure: warning: "Could not find a non-3d Athena header set."" 1>&2 fi fi else ac_safe=`echo "X11/$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/$athena_variant/XawInit.h""... $ac_c" 1>&6 echo "configure:9432: checking for X11/$athena_variant/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "X11/$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/$athena_variant/ThreeD.h""... $ac_c" 1>&6 echo "configure:9457: checking for X11/$athena_variant/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9465: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 athena_h_path=X11/$athena_variant else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi if test -z "$athena_h_path"; then ac_safe=`echo "$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $athena_variant/XawInit.h""... $ac_c" 1>&6 echo "configure:9493: checking for $athena_variant/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9501: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $athena_variant/ThreeD.h""... $ac_c" 1>&6 echo "configure:9518: checking for $athena_variant/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 athena_h_path=$athena_variant else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then ac_safe=`echo "X11/Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw3d/XawInit.h""... $ac_c" 1>&6 echo "configure:9555: checking for X11/Xaw3d/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "X11/Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw3d/ThreeD.h""... $ac_c" 1>&6 echo "configure:9580: checking for X11/Xaw3d/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9588: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo "configure: warning: "Assuming that X11/Xaw3d headers are suitable for $athena_variant."" 1>&2 athena_h_path=X11/Xaw3d else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then ac_safe=`echo "Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xaw3d/XawInit.h""... $ac_c" 1>&6 echo "configure:9620: checking for Xaw3d/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9628: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xaw3d/ThreeD.h""... $ac_c" 1>&6 echo "configure:9645: checking for Xaw3d/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9653: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo "configure: warning: "Assuming that Xaw3d headers are suitable for $athena_variant."" 1>&2 athena_h_path=Xaw3d else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$athena_h_path"; then ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6 echo "configure:9685: checking for X11/Xaw/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9693: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo "configure: warning: "Assuming that X11/Xaw headers are suitable for $athena_variant."" 1>&2 athena_h_path=X11/Xaw else echo "$ac_t""no" 1>&6 echo "configure: warning: "Could not find a suitable 3d Athena header set."" 1>&2 fi fi fi if test -n "$athena_lib" -a -n "$athena_h_path"; then have_xaw=yes else have_xaw=no fi else have_xaw=no fi if test "$with_x11" = "yes"; then ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6 echo "configure:9732: checking for Xm/Xm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:9740: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6 echo "configure:9757: checking for XmStringFree in -lXm" >&5 ac_lib_var=`echo Xm'_'XmStringFree | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 have_motif=yes else echo "$ac_t""no" 1>&6 have_motif=no fi else echo "$ac_t""no" 1>&6 have_motif=no fi if test "$have_motif" = "yes"; then echo $ac_n "checking for Lesstif""... $ac_c" 1>&6 echo "configure:9802: checking for Lesstif" >&5 cat > conftest.$ac_ext < #ifdef LESSTIF_VERSION yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* have_lesstif=yes else rm -rf conftest* have_lesstif=no fi rm -f conftest* echo "$ac_t""$have_lesstif" 1>&6 fi fi case "$opsys" in *linux* | cygwin* ) lucid_prefers_motif="no" ;; * ) lucid_prefers_motif="yes" ;; esac case "$with_menubars" in "" | "yes" | "athena" ) with_menubars="lucid" ;; esac case "$with_dialogs" in "" | "yes" | "lucid" ) if test "$lucid_prefers_motif" = "yes"; then if test "$have_motif" = "yes"; then with_dialogs="motif" elif test "$have_xaw" = "yes"; then with_dialogs="athena" else with_dialogs=no fi else if test "$have_xaw" = "yes"; then with_dialogs="athena" elif test "$have_motif" = "yes"; then with_dialogs="motif" else with_dialogs=no fi fi ;; esac case "$with_scrollbars" in "" | "yes" ) with_scrollbars="lucid" ;; esac case "$with_widgets" in "yes" | "lucid") if test "$lucid_prefers_motif" = "yes"; then if test "$have_motif" = "yes"; then with_widgets="motif" elif test "$have_xaw" = "yes"; then with_widgets="athena" else with_widgets=no fi else if test "$have_xaw" = "yes"; then with_widgets="athena" elif test "$have_motif" = "yes"; then with_widgets="motif" else with_widgets=no fi fi ;; "" ) with_widgets=no ;; esac all_widgets="$with_menubars $with_scrollbars $with_dialogs $with_toolbars $with_widgets" case "$all_widgets" in *athena* ) if test "$have_xaw" != "yes"; then { echo "Error:" "Could not find a suitable Athena library to build with." >&2; exit 1; } fi lwlib_objs="$lwlib_objs lwlib-Xaw.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"lwlib-Xaw.o\" to \$lwlib_objs"; fi libs_x="-l$athena_lib $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-l$athena_lib\" to \$libs_x"; fi { test "$extra_verbose" = "yes" && cat << EOF Defining ATHENA_Scrollbar_h_ = "$athena_h_path/Scrollbar.h" EOF cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <<\EOF #define LWLIB_USES_ATHENA 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining NEED_ATHENA EOF cat >> confdefs.h <<\EOF #define NEED_ATHENA 1 EOF } need_athena="yes" if test "$athena_3d" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_ATHENA_3D EOF cat >> confdefs.h <<\EOF #define HAVE_ATHENA_3D 1 EOF } fi ;; esac case "$all_widgets" in *motif* ) { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_USES_MOTIF EOF cat >> confdefs.h <<\EOF #define LWLIB_USES_MOTIF 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining NEED_MOTIF EOF cat >> confdefs.h <<\EOF #define NEED_MOTIF 1 EOF } lwlib_objs="$lwlib_objs lwlib-Xm.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"lwlib-Xm.o\" to \$lwlib_objs"; fi need_motif=yes ;; esac test "$with_menubars" = "lucid" && lwlib_objs="$lwlib_objs xlwmenu.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"xlwmenu.o\" to \$lwlib_objs"; fi test "$with_menubars" = "motif" && lwlib_objs="$lwlib_objs xlwmenu.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"xlwmenu.o\" to \$lwlib_objs"; fi test "$with_scrollbars" = "lucid" && lwlib_objs="$lwlib_objs xlwscrollbar.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"xlwscrollbar.o\" to \$lwlib_objs"; fi test "$with_widgets" != "no" && test "$with_widgets" != "msw" && \ lwlib_objs="$lwlib_objs xlwtabs.o xlwgcs.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"xlwtabs.o xlwgcs.o\" to \$lwlib_objs"; fi case "$with_widgets" in athena* ) lwlib_objs="$lwlib_objs xlwradio.o xlwcheckbox.o xlwgauge.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"xlwradio.o xlwcheckbox.o xlwgauge.o\" to \$lwlib_objs"; fi;; esac case "$all_widgets" in *lucid* ) { test "$extra_verbose" = "yes" && cat << \EOF Defining NEED_LUCID EOF cat >> confdefs.h <<\EOF #define NEED_LUCID 1 EOF } lwlib_objs="$lwlib_objs lwlib-Xlw.o" && if test "$extra_verbose" = "yes"; then echo " Appending \"lwlib-Xlw.o\" to \$lwlib_objs"; fi ;; esac test "$with_scrollbars" = "athena" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_SCROLLBARS_ATHENA EOF cat >> confdefs.h <<\EOF #define LWLIB_SCROLLBARS_ATHENA 1 EOF } test "$with_dialogs" = "athena" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_DIALOGS_ATHENA EOF cat >> confdefs.h <<\EOF #define LWLIB_DIALOGS_ATHENA 1 EOF } if test "$athena_3d" = "yes"; then test "$with_scrollbars" = "athena" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_SCROLLBARS_ATHENA3D EOF cat >> confdefs.h <<\EOF #define LWLIB_SCROLLBARS_ATHENA3D 1 EOF } test "$with_dialogs" = "athena" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_DIALOGS_ATHENA3D EOF cat >> confdefs.h <<\EOF #define LWLIB_DIALOGS_ATHENA3D 1 EOF } fi case "$with_widgets" in athena* ) { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_WIDGETS_ATHENA EOF cat >> confdefs.h <<\EOF #define LWLIB_WIDGETS_ATHENA 1 EOF } ;; esac test "$with_widgets" != "no" && test "$with_widgets" != "msw" && \ { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_TABS_LUCID EOF cat >> confdefs.h <<\EOF #define LWLIB_TABS_LUCID 1 EOF } test "$with_menubars" != "no" && { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_MENUBARS EOF cat >> confdefs.h <<\EOF #define HAVE_MENUBARS 1 EOF } test "$with_scrollbars" != "no" && { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SCROLLBARS EOF cat >> confdefs.h <<\EOF #define HAVE_SCROLLBARS 1 EOF } test "$with_dialogs" != "no" && { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_DIALOGS EOF cat >> confdefs.h <<\EOF #define HAVE_DIALOGS 1 EOF } test "$with_toolbars" != "no" && { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TOOLBARS EOF cat >> confdefs.h <<\EOF #define HAVE_TOOLBARS 1 EOF } test "$with_widgets" != "no" && { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_WIDGETS EOF cat >> confdefs.h <<\EOF #define HAVE_WIDGETS 1 EOF } test "$with_menubars" = "lucid" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_MENUBARS_LUCID EOF cat >> confdefs.h <<\EOF #define LWLIB_MENUBARS_LUCID 1 EOF } test "$with_scrollbars" = "lucid" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_SCROLLBARS_LUCID EOF cat >> confdefs.h <<\EOF #define LWLIB_SCROLLBARS_LUCID 1 EOF } test "$with_menubars" = "motif" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_MENUBARS_MOTIF EOF cat >> confdefs.h <<\EOF #define LWLIB_MENUBARS_MOTIF 1 EOF } test "$with_scrollbars" = "motif" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_SCROLLBARS_MOTIF EOF cat >> confdefs.h <<\EOF #define LWLIB_SCROLLBARS_MOTIF 1 EOF } test "$with_dialogs" = "motif" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_DIALOGS_MOTIF EOF cat >> confdefs.h <<\EOF #define LWLIB_DIALOGS_MOTIF 1 EOF } test "$with_widgets" = "motif" && { test "$extra_verbose" = "yes" && cat << \EOF Defining LWLIB_WIDGETS_MOTIF EOF cat >> confdefs.h <<\EOF #define LWLIB_WIDGETS_MOTIF 1 EOF } test "$with_menubars" != "no" && extra_objs="$extra_objs menubar.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"menubar.o\"" fi test "$with_scrollbars" != "no" && extra_objs="$extra_objs scrollbar.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"scrollbar.o\"" fi test "$with_dialogs" != "no" && extra_objs="$extra_objs dialog.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"dialog.o\"" fi test "$with_toolbars" != "no" && extra_objs="$extra_objs toolbar.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"toolbar.o\"" fi if test "$with_gtk" = "yes"; then test "$with_menubars" != "no" && extra_objs="$extra_objs menubar-gtk.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"menubar-gtk.o\"" fi test "$with_scrollbars" != "no" && extra_objs="$extra_objs scrollbar-gtk.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"scrollbar-gtk.o\"" fi test "$with_dialogs" != "no" && extra_objs="$extra_objs dialog-gtk.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"dialog-gtk.o\"" fi test "$with_toolbars" != "no" && extra_objs="$extra_objs toolbar-gtk.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"toolbar-gtk.o\"" fi test "$all_widgets" != "no no no no no" && extra_objs="$extra_objs gui-gtk.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"gui-gtk.o\"" fi fi if test "$with_x11" = "yes"; then test "$with_menubars" != "no" && extra_objs="$extra_objs menubar-x.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"menubar-x.o\"" fi test "$with_scrollbars" != "no" && extra_objs="$extra_objs scrollbar-x.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"scrollbar-x.o\"" fi test "$with_dialogs" != "no" && extra_objs="$extra_objs dialog-x.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"dialog-x.o\"" fi test "$with_toolbars" != "no" && extra_objs="$extra_objs toolbar-x.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"toolbar-x.o\"" fi test "$all_widgets" != "no no no no no" && extra_objs="$extra_objs gui-x.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"gui-x.o\"" fi fi test -z "$with_mule" && with_mule=no test -z "$with_file_coding" && with_file_coding=no if test "$with_file_coding" = "yes" && test "$with_mule" = "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining FILE_CODING EOF cat >> confdefs.h <<\EOF #define FILE_CODING 1 EOF } extra_objs="$extra_objs file-coding.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"file-coding.o\"" fi fi if test "$with_mule" = "yes" ; then echo "checking for Mule-related features" 1>&6 echo "configure:10250: checking for Mule-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining MULE EOF cat >> confdefs.h <<\EOF #define MULE 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining FILE_CODING EOF cat >> confdefs.h <<\EOF #define FILE_CODING 1 EOF } extra_objs="$extra_objs mule.o mule-ccl.o mule-charset.o file-coding.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"mule.o mule-ccl.o mule-charset.o file-coding.o\"" fi for ac_hdr in libintl.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:10275: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:10283: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_hdr EOF cat >> confdefs.h <&6 fi done echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6 echo "configure:10314: checking for strerror in -lintl" >&5 ac_lib_var=`echo intl'_'strerror | sed 'y%./+-%__p_%'` xe_check_libs=" -lintl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo intl | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_lib EOF cat >> confdefs.h <&6 fi echo "checking for Mule input methods" 1>&6 echo "configure:10363: checking for Mule input methods" >&5 case "$with_xim" in "" | "yes" ) echo "checking for XIM" 1>&6 echo "configure:10366: checking for XIM" >&5 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6 echo "configure:10369: checking for XOpenIM in -lX11" >&5 ac_lib_var=`echo X11'_'XOpenIM | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_xim=xlib else echo "$ac_t""no" 1>&6 with_xim=no fi if test "$need_motif $have_lesstif" = "yes no"; then echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6 echo "configure:10409: checking for XmImMbLookupString in -lXm" >&5 ac_lib_var=`echo Xm'_'XmImMbLookupString | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_xim=motif else echo "$ac_t""no" 1>&6 fi elif test "$have_motif $have_lesstif $with_xim" = "yes no no"; then echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6 echo "configure:10448: checking for XmImMbLookupString in -lXm" >&5 ac_lib_var=`echo Xm'_'XmImMbLookupString | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_xim=motif else echo "$ac_t""no" 1>&6 fi fi ;; esac if test "$with_xim" != "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_XIM EOF cat >> confdefs.h <<\EOF #define HAVE_XIM 1 EOF } if test "$with_xim" = "xlib"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining XIM_XLIB EOF cat >> confdefs.h <<\EOF #define XIM_XLIB 1 EOF } extra_objs="$extra_objs input-method-xlib.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"input-method-xlib.o\"" fi fi if test "$with_xim" = "motif"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining XIM_MOTIF EOF cat >> confdefs.h <<\EOF #define XIM_MOTIF 1 EOF } need_motif=yes extra_objs="$extra_objs input-method-motif.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"input-method-motif.o\"" fi fi if test "$with_xim" = "motif"; then with_xfs=no fi fi if test "$with_xfs" = "yes" ; then echo "checking for XFontSet" 1>&6 echo "configure:10529: checking for XFontSet" >&5 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6 echo "configure:10532: checking for XmbDrawString in -lX11" >&5 ac_lib_var=`echo X11'_'XmbDrawString | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_xfs=no fi if test "$with_xfs" = "yes" && test "$with_menubars" = "lucid"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining USE_XFONTSET EOF cat >> confdefs.h <<\EOF #define USE_XFONTSET 1 EOF } if test "$with_xim" = "no" ; then extra_objs="$extra_objs input-method-xlib.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"input-method-xlib.o\"" fi fi fi fi test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support test -z "$with_wnn" && { ac_safe=`echo "wnn/jllib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wnn/jllib.h""... $ac_c" 1>&6 echo "configure:10588: checking for wnn/jllib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:10596: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_wnn=no fi } test -z "$with_wnn" && { ac_safe=`echo "wnn/commonhd.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wnn/commonhd.h""... $ac_c" 1>&6 echo "configure:10619: checking for wnn/commonhd.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:10627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_wnn=no fi } if test "$with_wnn" != "no"; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:10652: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:10678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done test "$ac_cv_func_crypt" != "yes" && { echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 echo "configure:10707: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` xe_check_libs=" -lcrypt " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo crypt | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_lib EOF cat >> confdefs.h <&6 fi } fi if test -z "$with_wnn" -o "$with_wnn" = "yes"; then echo $ac_n "checking for jl_dic_list_e in -lwnn""... $ac_c" 1>&6 echo "configure:10758: checking for jl_dic_list_e in -lwnn" >&5 ac_lib_var=`echo wnn'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libwnn=wnn else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn4""... $ac_c" 1>&6 echo "configure:10792: checking for jl_dic_list_e in -lwnn4" >&5 ac_lib_var=`echo wnn4'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn4 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libwnn=wnn4 else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn6""... $ac_c" 1>&6 echo "configure:10826: checking for jl_dic_list_e in -lwnn6" >&5 ac_lib_var=`echo wnn6'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn6 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libwnn=wnn6 else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dic_list_e in -lwnn6_fromsrc""... $ac_c" 1>&6 echo "configure:10860: checking for dic_list_e in -lwnn6_fromsrc" >&5 ac_lib_var=`echo wnn6_fromsrc'_'dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn6_fromsrc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libwnn=wnn6_fromsrc else echo "$ac_t""no" 1>&6 with_wnn=no fi fi fi fi fi test -z "$with_wnn" && with_wnn=yes if test "$with_wnn" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_WNN EOF cat >> confdefs.h <<\EOF #define HAVE_WNN 1 EOF } libs_x="-l$libwnn $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-l$libwnn\" to \$libs_x"; fi extra_objs="$extra_objs mule-wnnfns.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"mule-wnnfns.o\"" fi if test "$with_wnn6" != "no"; then echo $ac_n "checking for jl_fi_dic_list in -l$libwnn""... $ac_c" 1>&6 echo "configure:10924: checking for jl_fi_dic_list in -l$libwnn" >&5 ac_lib_var=`echo $libwnn'_'jl_fi_dic_list | sed 'y%./+-%__p_%'` xe_check_libs=" -l$libwnn " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_wnn6=yes else echo "$ac_t""no" 1>&6 fi test "$with_wnn6" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining WNN6 EOF cat >> confdefs.h <<\EOF #define WNN6 1 EOF } fi fi canna_includes_found=no if test "$with_canna" != "no"; then ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6 echo "configure:10975: checking for canna/jrkanji.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:10983: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 canna_includes_found=yes else echo "$ac_t""no" 1>&6 fi fi if test "$canna_includes_found" = "no" -a "$with_canna" != "no" -a \ -d "/usr/local/canna/include"; then save_c_switch_site="$c_switch_site" c_switch_site="$c_switch_site -I/usr/local/canna/include" ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6 echo "configure:11010: checking for canna/jrkanji.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:11018: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 canna_includes_found=yes else echo "$ac_t""no" 1>&6 fi if test "$canna_includes_found" != "yes"; then c_switch_site="$save_c_switch_site" with_canna="no" fi fi test -z "$with_canna" && { ac_safe=`echo "canna/RK.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/RK.h""... $ac_c" 1>&6 echo "configure:11046: checking for canna/RK.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:11054: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_canna=no fi } test -z "$with_canna" && { echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6 echo "configure:11077: checking for RkBgnBun in -lRKC" >&5 ac_lib_var=`echo RKC'_'RkBgnBun | sed 'y%./+-%__p_%'` xe_check_libs=" -lRKC " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_canna=no fi } test -z "$with_canna" && { echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6 echo "configure:11116: checking for jrKanjiControl in -lcanna" >&5 ac_lib_var=`echo canna'_'jrKanjiControl | sed 'y%./+-%__p_%'` xe_check_libs=" -lcanna " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 with_canna=no fi } test -z "$with_canna" && with_canna=yes if test "$with_canna" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_CANNA EOF cat >> confdefs.h <<\EOF #define HAVE_CANNA 1 EOF } libs_x="-lcanna -lRKC $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lcanna -lRKC\" to \$libs_x"; fi extra_objs="$extra_objs mule-canna.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"mule-canna.o\"" fi fi else for feature in xim canna wnn; do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then echo "configure: warning: "--with-${feature} ignored: Not valid without Mule support"" 1>&2 fi eval "with_${feature}=no" done fi if test "$need_motif" = "yes" ; then libs_x="-lXm $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXm\" to \$libs_x"; fi echo $ac_n "checking for layout_object_getvalue in -li18n""... $ac_c" 1>&6 echo "configure:11181: checking for layout_object_getvalue in -li18n" >&5 ac_lib_var=`echo i18n'_'layout_object_getvalue | sed 'y%./+-%__p_%'` xe_check_libs=" -li18n " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libs_x="-li18n $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-li18n\" to \$libs_x"; fi else echo "$ac_t""no" 1>&6 fi if test "$add_runtime_path" = "yes" -a -n "$dash_r"; then ld_switch_site=`echo '' $ld_switch_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` ld_switch_x_site=`echo '' $ld_switch_x_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` runpath="" runpath_dirs="" if test -n "$LD_RUN_PATH"; then runpath="$LD_RUN_PATH" elif test "$GCC" = "yes"; then ld_switch_run_save="$ld_switch_run"; ld_switch_run="" echo "int main(int argc, char *argv[]) {return 0;}" > conftest.c xe_runpath_link='${CC-cc} -o conftest -v $CFLAGS '"$xe_ldflags"' conftest.$ac_ext 2>&1 1>/dev/null' for arg in `eval "$xe_runpath_link" | grep ' -L'`; do case "$arg" in P,* | -L* | -R* ) for dir in `echo '' "$arg" | sed -e 's:^ ::' -e 's/^..//' -e 'y/:/ /'`; do { xe_runpath_dir="$dir" test "$xe_runpath_dir" != "/lib" -a \ "$xe_runpath_dir" != "/usr/lib" -a \ -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ eval "$xe_add_unique_runpath_dir" } done ;; esac done ld_switch_run="$ld_switch_run_save" rm -f conftest* else for arg in $ld_switch_site $ld_switch_x_site; do case "$arg" in -L*) { xe_runpath_dir=`echo '' "$arg" | sed -e 's:^ ::' -e 's/^-L//'` test "$xe_runpath_dir" != "/lib" -a \ "$xe_runpath_dir" != "/usr/lib" -a \ -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ eval "$xe_add_unique_runpath_dir" };; esac done if test "$opsys $need_motif" = "sol2 yes"; then xe_runpath_dir="/opt/SUNWdt/lib"; eval "$xe_add_unique_runpath_dir"; fi fi if test -n "$runpath"; then ld_switch_run="${dash_r}${runpath}" if test "$GCC" = "yes"; then set x $ld_switch_run; shift; ld_switch_run="" while test -n "$1"; do case $1 in -L | -l | -u ) ld_switch_run="$ld_switch_run $1 $2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) ld_switch_run="$ld_switch_run $1" ;; -Xlinker* ) ;; * ) ld_switch_run="$ld_switch_run -Xlinker $1" ;; esac shift done fi test "$extra_verbose" = "yes" && echo "Setting runpath to $runpath" fi fi fi for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime getaddrinfo gethostname getnameinfo getpagesize gettimeofday getcwd getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strerror tzset ulimit usleep waitpid vsnprintf fsync ftruncate umask do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:11284: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:11310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done if test "$ac_cv_func_getaddrinfo" != "no" ; then case "$opsys" in hpux11* ) echo "configure: warning: Use of getaddrinfo is disabled for HP-UX 11.XX." 1>&2 ac_cv_func_getaddrinfo=no ;; esac fi for ac_func in getpt _getpty grantpt unlockpt ptsname killpg tcgetpgrp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:11351: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:11377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done echo $ac_n "checking for openpty""... $ac_c" 1>&6 echo "configure:11406: checking for openpty" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char openpty(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_openpty) || defined (__stub___openpty) choke me #else openpty(); #endif ; return 0; } EOF if { (eval echo configure:11432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_openpty=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_openpty=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'openpty`\" = yes"; then echo "$ac_t""yes" 1>&6 have_openpty=yes else echo "$ac_t""no" 1>&6 echo $ac_n "checking for openpty in -lutil""... $ac_c" 1>&6 echo "configure:11451: checking for openpty in -lutil" >&5 ac_lib_var=`echo util'_'openpty | sed 'y%./+-%__p_%'` xe_check_libs=" -lutil " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 have_openpty=yes need_libutil=yes else echo "$ac_t""no" 1>&6 fi fi if test "$have_openpty" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_OPENPTY EOF cat >> confdefs.h <<\EOF #define HAVE_OPENPTY 1 EOF } for ac_hdr in pty.h libutil.h util.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:11502: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:11510: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_hdr EOF cat >> confdefs.h <&6 fi done test "$need_libutil" = "yes" && libs_system="$libs_system -lutil" && if test "$extra_verbose" = "yes"; then echo " Appending \"-lutil\" to \$libs_system"; fi fi for ac_hdr in stropts.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:11546: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:11554: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_hdr EOF cat >> confdefs.h <&6 fi done if test "$ac_cv_header_stropts_h" = "yes"; then for ac_func in isastream do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:11587: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:11613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done for ac_hdr in strtio.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:11644: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:11652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_hdr EOF cat >> confdefs.h <&6 fi done fi extra_objs="$extra_objs realpath.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"realpath.o\"" fi for ac_func in getloadavg do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:11689: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:11715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done if test "$ac_cv_func_getloadavg" = "yes"; then for ac_hdr in sys/loadavg.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:11748: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:11756: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_hdr EOF cat >> confdefs.h <&6 fi done else extra_objs="$extra_objs getloadavg.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"getloadavg.o\"" fi echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6 echo "configure:11792: checking for kstat_open in -lkstat" >&5 ac_lib_var=`echo kstat'_'kstat_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lkstat " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo kstat | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_lib EOF cat >> confdefs.h <&6 fi for ac_hdr in kstat.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:11843: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:11851: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_hdr EOF cat >> confdefs.h <&6 fi done echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6 echo "configure:11883: checking for kvm_read in -lkvm" >&5 ac_lib_var=`echo kvm'_'kvm_read | sed 'y%./+-%__p_%'` xe_check_libs=" -lkvm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo kvm | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_lib EOF cat >> confdefs.h <&6 fi fi echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6 echo "configure:11933: checking whether netdb declares h_errno" >&5 cat > conftest.$ac_ext < int main() { return h_errno; ; return 0; } EOF if { (eval echo configure:11942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_H_ERRNO EOF cat >> confdefs.h <<\EOF #define HAVE_H_ERRNO 1 EOF } else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6 echo "configure:11962: checking for sigsetjmp" >&5 cat > conftest.$ac_ext < int main() { sigjmp_buf bar; sigsetjmp (bar, 0); ; return 0; } EOF if { (eval echo configure:11971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SIGSETJMP EOF cat >> confdefs.h <<\EOF #define HAVE_SIGSETJMP 1 EOF } else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6 echo "configure:11991: checking whether localtime caches TZ" >&5 if test "$ac_cv_func_tzset" = "yes"; then cat > conftest.$ac_ext < #if STDC_HEADERS # include #endif extern char **environ; unset_TZ () { char **from, **to; for (to = from = environ; (*to = *from); from++) if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '=')) to++; } char TZ_GMT0[] = "TZ=GMT0"; char TZ_PST8[] = "TZ=PST8"; main() { time_t now = time ((time_t *) 0); int hour_GMT0, hour_unset; if (putenv (TZ_GMT0) != 0) exit (1); hour_GMT0 = localtime (&now)->tm_hour; unset_TZ (); hour_unset = localtime (&now)->tm_hour; if (putenv (TZ_PST8) != 0) exit (1); if (localtime (&now)->tm_hour == hour_GMT0) exit (1); unset_TZ (); if (localtime (&now)->tm_hour != hour_unset) exit (1); exit (0); } EOF if { (eval echo configure:12030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then emacs_cv_localtime_cache=no else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* emacs_cv_localtime_cache=yes fi rm -fr conftest* else # If we lack tzset, report that localtime does not cache TZ, # since we can't invalidate the cache if we don't have tzset. emacs_cv_localtime_cache=no fi echo "$ac_t""$emacs_cv_localtime_cache" 1>&6 if test $emacs_cv_localtime_cache = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining LOCALTIME_CACHE EOF cat >> confdefs.h <<\EOF #define LOCALTIME_CACHE 1 EOF } fi if test "$HAVE_TIMEVAL" = "yes"; then echo $ac_n "checking whether gettimeofday accepts one or two arguments""... $ac_c" 1>&6 echo "configure:12060: checking whether gettimeofday accepts one or two arguments" >&5 cat > conftest.$ac_ext < #include #else #ifdef HAVE_SYS_TIME_H #include #else #include #endif #endif int main() { struct timeval time; gettimeofday (&time, 0); ; return 0; } EOF if { (eval echo configure:12083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""two" 1>&6 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""one" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining GETTIMEOFDAY_ONE_ARGUMENT EOF cat >> confdefs.h <<\EOF #define GETTIMEOFDAY_ONE_ARGUMENT 1 EOF } fi rm -f conftest* fi echo $ac_n "checking for inline""... $ac_c" 1>&6 echo "configure:12105: checking for inline" >&5 ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done echo "$ac_t""$ac_cv_c_inline" 1>&6 case "$ac_cv_c_inline" in inline | yes) ;; no) { test "$extra_verbose" = "yes" && cat << \EOF Defining inline = EOF cat >> confdefs.h <<\EOF #define inline EOF } ;; *) { test "$extra_verbose" = "yes" && cat << EOF Defining inline = $ac_cv_c_inline EOF cat >> confdefs.h <&6 echo "configure:12158: checking for working alloca.h" >&5 cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF if { (eval echo configure:12168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_alloca_h=no fi rm -f conftest* echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 if test $ac_cv_header_alloca_h = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_ALLOCA_H EOF cat >> confdefs.h <<\EOF #define HAVE_ALLOCA_H 1 EOF } fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 echo "configure:12192: checking for alloca" >&5 cat > conftest.$ac_ext < # define alloca _alloca # else # if HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main() { char *p = (char *) alloca(1); ; return 0; } EOF if { (eval echo configure:12223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_func_alloca_works=no fi rm -f conftest* echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 if test $ac_cv_func_alloca_works = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_ALLOCA EOF cat >> confdefs.h <<\EOF #define HAVE_ALLOCA 1 EOF } fi if test $ac_cv_func_alloca_works = no; then # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=alloca.${ac_objext} { test "$extra_verbose" = "yes" && cat << \EOF Defining C_ALLOCA EOF cat >> confdefs.h <<\EOF #define C_ALLOCA 1 EOF } echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 echo "configure:12262: checking whether alloca needs Cray hooks" >&5 cat > conftest.$ac_ext <&5 | egrep "webecray" >/dev/null 2>&1; then rm -rf conftest* ac_cv_os_cray=yes else rm -rf conftest* ac_cv_os_cray=no fi rm -f conftest* echo "$ac_t""$ac_cv_os_cray" 1>&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:12289: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:12315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining CRAY_STACKSEG_END = $ac_func EOF cat >> confdefs.h <&6 fi done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 echo "configure:12345: checking stack direction for C alloca" >&5 cat > conftest.$ac_ext < addr) ? 1 : -1; } main () { exit (find_stack_direction() < 0); } EOF if { (eval echo configure:12367: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_c_stack_direction=1 else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_stack_direction=-1 fi rm -fr conftest* echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 { test "$extra_verbose" = "yes" && cat << EOF Defining STACK_DIRECTION = $ac_cv_c_stack_direction EOF cat >> confdefs.h <&6 echo "configure:12397: checking for vfork.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:12405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_VFORK_H EOF cat >> confdefs.h <<\EOF #define HAVE_VFORK_H 1 EOF } else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 echo "configure:12433: checking for working vfork" >&5 cat > conftest.$ac_ext < #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_VFORK_H #include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static #ifdef __cplusplus sparc_address_test (int arg) #else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } main() { pid_t parent = getpid (); pid_t child; sparc_address_test (); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; exit( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } EOF if { (eval echo configure:12531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_vfork_works=yes else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_func_vfork_works=no fi rm -fr conftest* echo "$ac_t""$ac_cv_func_vfork_works" 1>&6 if test $ac_cv_func_vfork_works = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining vfork = fork EOF cat >> confdefs.h <<\EOF #define vfork fork EOF } fi echo $ac_n "checking for working strcoll""... $ac_c" 1>&6 echo "configure:12557: checking for working strcoll" >&5 cat > conftest.$ac_ext < main () { exit (strcoll ("abc", "def") >= 0 || strcoll ("ABC", "DEF") >= 0 || strcoll ("123", "456") >= 0); } EOF if { (eval echo configure:12570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_strcoll_works=yes else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_func_strcoll_works=no fi rm -fr conftest* echo "$ac_t""$ac_cv_func_strcoll_works" 1>&6 if test $ac_cv_func_strcoll_works = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_STRCOLL EOF cat >> confdefs.h <<\EOF #define HAVE_STRCOLL 1 EOF } fi for ac_func in getpgrp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:12598: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:12624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6 echo "configure:12652: checking whether getpgrp takes no argument" >&5 cat > conftest.$ac_ext < #include int pid; int pg1, pg2, pg3, pg4; int ng, np, s, child; main() { pid = getpid(); pg1 = getpgrp(0); pg2 = getpgrp(); pg3 = getpgrp(pid); pg4 = getpgrp(1); /* * If all of these values are the same, it's pretty sure that * we're on a system that ignores getpgrp's first argument. */ if (pg2 == pg4 && pg1 == pg3 && pg2 == pg3) exit(0); child = fork(); if (child < 0) exit(1); else if (child == 0) { np = getpid(); /* * If this is Sys V, this will not work; pgrp will be * set to np because setpgrp just changes a pgrp to be * the same as the pid. */ setpgrp(np, pg1); ng = getpgrp(0); /* Same result for Sys V and BSD */ if (ng == pg1) { exit(1); } else { exit(0); } } else { wait(&s); exit(s>>8); } } EOF if { (eval echo configure:12710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_getpgrp_void=yes else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_func_getpgrp_void=no fi rm -fr conftest* echo "$ac_t""$ac_cv_func_getpgrp_void" 1>&6 if test $ac_cv_func_getpgrp_void = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining GETPGRP_VOID EOF cat >> confdefs.h <<\EOF #define GETPGRP_VOID 1 EOF } fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 echo "configure:12737: checking for working mmap" >&5 case "$opsys" in ultrix* ) have_mmap=no ;; *) cat > conftest.$ac_ext < #include #include #include #ifndef MAP_VARIABLE #define MAP_VARIABLE 0 #endif #ifndef MAP_FAILED #define MAP_FAILED -1 #endif int main (int argc, char *argv[]) { int fd = -1; caddr_t p; #ifndef MAP_ANONYMOUS fd = open ("/dev/zero", O_RDWR); if (fd < 0) return 1; #define MAP_ANONYMOUS 0 #endif if (mmap(0, 1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_VARIABLE | MAP_ANONYMOUS, fd, 0) != (void *) MAP_FAILED) return 0; perror ("conftest: mmap failed"); return 1; } EOF if { (eval echo configure:12773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then have_mmap=yes else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* have_mmap=no fi rm -fr conftest* ;; esac echo "$ac_t""$have_mmap" 1>&6 test "$have_mmap" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_MMAP EOF cat >> confdefs.h <<\EOF #define HAVE_MMAP 1 EOF } case "$opsys" in cygwin*) test "$rel_alloc" = "default" && rel_alloc=no ;; esac test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no if test "$rel_alloc $have_mmap" = "default yes"; then if test "$doug_lea_malloc" = "yes"; then echo $ac_n "checking for M_MMAP_THRESHOLD""... $ac_c" 1>&6 echo "configure:12802: checking for M_MMAP_THRESHOLD" >&5 cat > conftest.$ac_ext < int main() { #ifndef M_MMAP_THRESHOLD #error No M_MMAP_THRESHOLD :-( !@+$%^&*_)(_ - unlikely to compile... #endif ; return 0; } EOF if { (eval echo configure:12816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rel_alloc=no; echo "$ac_t""yes" 1>&6; else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* rel_alloc=yes; echo "$ac_t""no" 1>&6; fi rm -f conftest* else rel_alloc=yes fi fi test "$rel_alloc" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining REL_ALLOC EOF cat >> confdefs.h <<\EOF #define REL_ALLOC 1 EOF } ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for termios.h""... $ac_c" 1>&6 echo "configure:12841: checking for termios.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:12849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TERMIOS EOF cat >> confdefs.h <<\EOF #define HAVE_TERMIOS 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining SIGNALS_VIA_CHARACTERS EOF cat >> confdefs.h <<\EOF #define SIGNALS_VIA_CHARACTERS 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining NO_TERMIO EOF cat >> confdefs.h <<\EOF #define NO_TERMIO 1 EOF } else echo "$ac_t""no" 1>&6 ac_safe=`echo "termio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for termio.h""... $ac_c" 1>&6 echo "configure:12892: checking for termio.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:12900: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TERMIO EOF cat >> confdefs.h <<\EOF #define HAVE_TERMIO 1 EOF } else echo "$ac_t""no" 1>&6 fi fi echo $ac_n "checking for socket""... $ac_c" 1>&6 echo "configure:12932: checking for socket" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char socket(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_socket) || defined (__stub___socket) choke me #else socket(); #endif ; return 0; } EOF if { (eval echo configure:12958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_socket=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_socket=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'socket`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "netinet/in.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for netinet/in.h""... $ac_c" 1>&6 echo "configure:12973: checking for netinet/in.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:12981: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "arpa/inet.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for arpa/inet.h""... $ac_c" 1>&6 echo "configure:12998: checking for arpa/inet.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13006: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SOCKETS EOF cat >> confdefs.h <<\EOF #define HAVE_SOCKETS 1 EOF } echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6 echo "configure:13031: checking "for sun_len member in struct sockaddr_un"" >&5 cat > conftest.$ac_ext < #include #include int main() { static struct sockaddr_un x; x.sun_len = 1; ; return 0; } EOF if { (eval echo configure:13044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SOCKADDR_SUN_LEN EOF cat >> confdefs.h <<\EOF #define HAVE_SOCKADDR_SUN_LEN 1 EOF } else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6 echo "configure:13062: checking "for ip_mreq struct in netinet/in.h"" >&5 cat > conftest.$ac_ext < #include int main() { static struct ip_mreq x; ; return 0; } EOF if { (eval echo configure:13074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_MULTICAST EOF cat >> confdefs.h <<\EOF #define HAVE_MULTICAST 1 EOF } else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for msgget""... $ac_c" 1>&6 echo "configure:13105: checking for msgget" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char msgget(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_msgget) || defined (__stub___msgget) choke me #else msgget(); #endif ; return 0; } EOF if { (eval echo configure:13131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_msgget=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_msgget=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'msgget`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6 echo "configure:13146: checking for sys/ipc.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13154: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6 echo "configure:13171: checking for sys/msg.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SYSVIPC EOF cat >> confdefs.h <<\EOF #define HAVE_SYSVIPC 1 EOF } else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi ac_safe=`echo "dirent.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dirent.h""... $ac_c" 1>&6 echo "configure:13217: checking for dirent.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining SYSV_SYSTEM_DIR EOF cat >> confdefs.h <<\EOF #define SYSV_SYSTEM_DIR 1 EOF } else echo "$ac_t""no" 1>&6 ac_safe=`echo "sys/dir.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/dir.h""... $ac_c" 1>&6 echo "configure:13252: checking for sys/dir.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13260: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining NONSYSTEM_DIR_LIBRARY EOF cat >> confdefs.h <<\EOF #define NONSYSTEM_DIR_LIBRARY 1 EOF } fi fi ac_safe=`echo "nlist.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for nlist.h""... $ac_c" 1>&6 echo "configure:13293: checking for nlist.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13301: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF Defining NLIST_STRUCT EOF cat >> confdefs.h <<\EOF #define NLIST_STRUCT 1 EOF } else echo "$ac_t""no" 1>&6 fi echo "checking "for sound support"" 1>&6 echo "configure:13331: checking "for sound support"" >&5 test -z "$with_native_sound" -a -n "$native_sound_lib" && with_native_sound=yes if test "$with_native_sound" != "no"; then if test -n "$native_sound_lib"; then ac_safe=`echo "multimedia/audio_device.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for multimedia/audio_device.h""... $ac_c" 1>&6 echo "configure:13338: checking for multimedia/audio_device.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13346: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 sound_found=yes sound_cflags="" extra_objs="$extra_objs sunplay.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"sunplay.o\"" fi else echo "$ac_t""no" 1>&6 fi fi if test -z "$sound_found" -a -d "/usr/demo/SOUND"; then if test -d "/usr/demo/SOUND/include/multimedia"; then sun_sound_cflags="-I/usr/demo/SOUND/include" elif test -d "/usr/demo/SOUND/multimedia"; then sun_sound_cflags="-I/usr/demo/SOUND" fi if test -n "$native_sound_lib"; then sun_sound_lib="$native_sound_lib" elif test -r "/usr/demo/SOUND/lib/libaudio.a"; then sun_sound_lib="/usr/demo/SOUND/lib/libaudio.a" elif test -r "/usr/demo/SOUND/libaudio.a"; then sun_sound_lib="/usr/demo/SOUND/libaudio.a" fi if test -n "$sun_sound_cflags" -a -n "$sun_sound_lib"; then native_sound_lib="$sun_sound_lib" sound_cflags="$sun_sound_cflags" sound_found=yes extra_objs="$extra_objs sunplay.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"sunplay.o\"" fi fi fi if test -z "$sound_found"; then case "$canonical" in *-sgi-* ) if test -z "$native_sound_lib"; then echo $ac_n "checking for ALopenport in -laudio""... $ac_c" 1>&6 echo "configure:13402: checking for ALopenport in -laudio" >&5 ac_lib_var=`echo audio'_'ALopenport | sed 'y%./+-%__p_%'` xe_check_libs=" -laudio " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 native_sound_lib="-laudio" else echo "$ac_t""no" 1>&6 fi fi if test -n "$native_sound_lib"; then sound_found=yes sound_cflags="" extra_objs="$extra_objs sgiplay.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"sgiplay.o\"" fi fi ;; hppa*-hp-hpux* ) if test -z "$native_sound_lib"; then echo $ac_n "checking for AOpenAudio in -lAlib""... $ac_c" 1>&6 echo "configure:13449: checking for AOpenAudio in -lAlib" >&5 ac_lib_var=`echo Alib'_'AOpenAudio | sed 'y%./+-%__p_%'` xe_check_libs=" -lAlib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 native_sound_lib="-lAlib" else echo "$ac_t""no" 1>&6 fi fi if test -n "$native_sound_lib"; then sound_found=yes extra_objs="$extra_objs hpplay.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"hpplay.o\"" fi if test "$GCC" = "yes" # Kludge city then sound_cflags="-Dconst= -Dvolatile= -I/usr/audio/examples" else sound_cflags="+e -I/usr/audio/examples" fi fi ;; esac fi if test -z "$sound_found"; then if test "$with_msw" = "yes"; then sound_found=yes native_sound_lib= fi fi if test -z "$sound_found"; then for dir in "machine" "sys" "linux"; do ac_safe=`echo "${dir}/soundcard.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${dir}/soundcard.h""... $ac_c" 1>&6 echo "configure:13510: checking for ${dir}/soundcard.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13518: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 sound_found=yes need_miscplay=yes extra_objs="$extra_objs linuxplay.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"linuxplay.o\"" fi { test "$extra_verbose" = "yes" && cat << EOF Defining SOUNDCARD_H_FILE = "${dir}/soundcard.h" EOF cat >> confdefs.h <&6 fi done fi test "$sound_found" = "yes" && with_native_sound=yes fi if test "$with_native_sound" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_NATIVE_SOUND EOF cat >> confdefs.h <<\EOF #define HAVE_NATIVE_SOUND 1 EOF } test -n "$native_sound_lib" && LIBS="$native_sound_lib $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"$native_sound_lib\" to \$LIBS"; fi fi if test "$with_nas_sound" != "no"; then ac_safe=`echo "audio/audiolib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for audio/audiolib.h""... $ac_c" 1>&6 echo "configure:13572: checking for audio/audiolib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13580: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for AuOpenServer in -laudio""... $ac_c" 1>&6 echo "configure:13598: checking for AuOpenServer in -laudio" >&5 ac_lib_var=`echo audio'_'AuOpenServer | sed 'y%./+-%__p_%'` xe_check_libs=" -laudio " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 have_nas_sound=yes else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi if test "$have_nas_sound" = "yes"; then with_nas_sound=yes { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_NAS_SOUND EOF cat >> confdefs.h <<\EOF #define HAVE_NAS_SOUND 1 EOF } extra_objs="$extra_objs nas.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"nas.o\"" fi libs_x="-laudio $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-laudio\" to \$libs_x"; fi cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "AuXtErrorJump" >/dev/null 2>&1; then : else rm -rf conftest* old_nas=yes; { test "$extra_verbose" = "yes" && cat << \EOF Defining NAS_NO_ERROR_JUMP EOF cat >> confdefs.h <<\EOF #define NAS_NO_ERROR_JUMP 1 EOF } fi rm -f conftest* else test "$with_nas_sound" = "yes" && \ { echo "Error:" "Required NAS sound support cannot be provided." >&2; exit 1; } with_nas_sound=no fi fi if test "$with_esd_sound" != "no"; then # Extract the first word of "esd-config", so it can be a program name with args. set dummy esd-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:13684: checking for $ac_word" >&5 if test -n "$have_esd_config"; then ac_cv_prog_have_esd_config="$have_esd_config" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_have_esd_config="yes" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_have_esd_config" && ac_cv_prog_have_esd_config="no" fi have_esd_config="$ac_cv_prog_have_esd_config" if test -n "$have_esd_config"; then echo "$ac_t""$have_esd_config" 1>&6 else echo "$ac_t""no" 1>&6 fi if test "$have_esd_config" = "yes"; then save_c_switch_site="$c_switch_site" save_LIBS="$LIBS" c_switch_site="$c_switch_site `esd-config --cflags`" && if test "$extra_verbose" = "yes"; then echo " Appending \"`esd-config --cflags`\" to \$c_switch_site"; fi LIBS="`esd-config --libs` $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"`esd-config --libs`\" to \$LIBS"; fi echo $ac_n "checking for esd_play_stream""... $ac_c" 1>&6 echo "configure:13713: checking for esd_play_stream" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char esd_play_stream(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_esd_play_stream) || defined (__stub___esd_play_stream) choke me #else esd_play_stream(); #endif ; return 0; } EOF if { (eval echo configure:13739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_esd_play_stream=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_esd_play_stream=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'esd_play_stream`\" = yes"; then echo "$ac_t""yes" 1>&6 have_esd_sound=yes else echo "$ac_t""no" 1>&6 c_switch_site="$save_c_switch_site" LIBS="$save_LIBS" fi fi if test "$have_esd_sound" = "yes"; then with_esd_sound=yes need_miscplay=yes extra_objs="$extra_objs esd.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"esd.o\"" fi { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_ESD_SOUND EOF cat >> confdefs.h <<\EOF #define HAVE_ESD_SOUND 1 EOF } else test "$with_esd_sound" = "yes" && \ { echo "Error:" "Required ESD sound support cannot be provided." >&2; exit 1; } with_esd_sound=no fi fi test "$need_miscplay" = "yes" && extra_objs="$extra_objs miscplay.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"miscplay.o\"" fi test -z "$with_tty" && with_tty=yes if test "$with_tty" = "yes" ; then echo "checking for TTY-related features" 1>&6 echo "configure:13790: checking for TTY-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TTY EOF cat >> confdefs.h <<\EOF #define HAVE_TTY 1 EOF } extra_objs="$extra_objs console-tty.o device-tty.o event-tty.o frame-tty.o objects-tty.o redisplay-tty.o cm.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"console-tty.o device-tty.o event-tty.o frame-tty.o objects-tty.o redisplay-tty.o cm.o\"" fi if test -z "$with_ncurses"; then echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 echo "configure:13806: checking for tgetent in -lncurses" >&5 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -lncurses " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_ncurses=yes else echo "$ac_t""no" 1>&6 with_ncurses=no fi fi if test "$with_ncurses" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_NCURSES EOF cat >> confdefs.h <<\EOF #define HAVE_NCURSES 1 EOF } ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6 echo "configure:13855: checking for ncurses/curses.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13863: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 curses_h_file=ncurses/curses.h else echo "$ac_t""no" 1>&6 fi ac_safe=`echo "ncurses/term.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/term.h""... $ac_c" 1>&6 echo "configure:13885: checking for ncurses/term.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13893: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 term_h_file=ncurses/term.h else echo "$ac_t""no" 1>&6 fi extra_objs="$extra_objs terminfo.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"terminfo.o\"" fi LIBS="-lncurses $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lncurses\" to \$LIBS"; fi if test "$ac_cv_header_ncurses_curses_h" != "yes" ; then save_c_switch_site="$c_switch_site" c_switch_site="$c_switch_site -I/usr/include/ncurses" ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6 echo "configure:13923: checking for ncurses/curses.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:13931: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 curses_h_file=ncurses/curses.h else echo "$ac_t""no" 1>&6 fi if test "$ac_cv_header_ncurses_curses_h" = "yes" then echo "configure: warning: "Your system has the bogus ncurses include bug."" 1>&2 else c_switch_site="$save_c_switch_site" fi fi else if test "$have_terminfo" = "yes"; then extra_objs="$extra_objs terminfo.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"terminfo.o\"" fi if test -n "$libs_termcap"; then LIBS="$libs_termcap $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"$libs_termcap\" to \$LIBS"; fi else for lib in curses termlib termcap; do echo $ac_n "checking for tgetent in -l$lib""... $ac_c" 1>&6 echo "configure:13966: checking for tgetent in -l$lib" >&5 ac_lib_var=`echo $lib'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -l$lib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 LIBS="-l${lib} $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-l${lib}\" to \$LIBS"; fi; break else echo "$ac_t""no" 1>&6 fi done fi else if test -n "$libs_termcap" -a "$opsys" = "openbsd"; then echo $ac_n "checking for tgoto in -ltermcap""... $ac_c" 1>&6 echo "configure:14007: checking for tgoto in -ltermcap" >&5 ac_lib_var=`echo termcap'_'tgoto | sed 'y%./+-%__p_%'` xe_check_libs=" -ltermcap " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo termcap | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_lib EOF cat >> confdefs.h <&6 extra_objs="$extra_objs tparam.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"tparam.o\"" fi fi else extra_objs="$extra_objs tparam.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"tparam.o\"" fi fi case "$opsys" in *-hp-hpux* ) libs_termcap="-ltermcap" ;; esac if test -n "$libs_termcap"; then LIBS="$libs_termcap $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"$libs_termcap\" to \$LIBS"; fi else echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6 echo "configure:14068: checking for tgetent in -lcurses" >&5 ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -lcurses " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 LIBS="-lcurses $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lcurses\" to \$LIBS"; fi else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 echo "configure:14102: checking for tgetent in -ltermcap" >&5 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -ltermcap " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 LIBS="-ltermcap $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-ltermcap\" to \$LIBS"; fi else echo "$ac_t""no" 1>&6 extra_objs="$extra_objs termcap.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"termcap.o\"" fi fi fi fi fi fi { test "$extra_verbose" = "yes" && cat << EOF Defining CURSES_H_FILE = "${curses_h_file-curses.h}" EOF cat >> confdefs.h <> confdefs.h <&6 echo "configure:14167: checking for gpm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:14175: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6 echo "configure:14193: checking for Gpm_Open in -lgpm" >&5 ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'` xe_check_libs=" -lgpm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 have_gpm=yes else echo "$ac_t""no" 1>&6 fi else echo "$ac_t""no" 1>&6 fi if test "$have_gpm" = "yes"; then with_gpm=yes { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_GPM EOF cat >> confdefs.h <<\EOF #define HAVE_GPM 1 EOF } extra_objs="$extra_objs gpmevent.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"gpmevent.o\"" fi LIBS="-lgpm $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lgpm\" to \$LIBS"; fi elif test "$with_gpm" = "yes"; then { echo "Error:" "GPM requested, but gpm.h or libgpm seems to be missing." >&2; exit 1; } else with_gpm=no fi fi else for feature in ncurses gpm; do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then echo "configure: warning: "--with-${feature} ignored: Not valid without TTY support"" 1>&2 fi eval "with_${feature}=no" done fi test "$with_x11" = "yes" -o "$with_tty" = "yes" -o "$need_event_unixoid" = "yes" && extra_objs="$extra_objs event-unixoid.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"event-unixoid.o\"" fi test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \ != "no no no" && echo "checking for database support" 1>&6 echo "configure:14268: checking for database support" >&5 if test "$with_database_gdbm $with_database_dbm" != "no no"; then ac_safe=`echo "ndbm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ndbm.h""... $ac_c" 1>&6 echo "configure:14273: checking for ndbm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:14281: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 test "$with_database_gdbm" = "yes" -o \ "$with_database_dbm" = "yes" && \ { echo "Error:" "Required DBM support cannot be provided." >&2; exit 1; } with_database_gdbm=no with_database_dbm=no fi fi if test "$with_database_gdbm" != "no"; then echo $ac_n "checking for dbm_open in -lgdbm""... $ac_c" 1>&6 echo "configure:14311: checking for dbm_open in -lgdbm" >&5 ac_lib_var=`echo gdbm'_'dbm_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdbm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_database_gdbm=yes with_database_dbm=no libdbm=-lgdbm else echo "$ac_t""no" 1>&6 if test "$with_database_gdbm" = "yes"; then { echo "Error:" "Required GNU DBM support cannot be provided." >&2; exit 1; } fi with_database_gdbm=no fi fi if test "$with_database_dbm" != "no"; then echo $ac_n "checking for dbm_open""... $ac_c" 1>&6 echo "configure:14355: checking for dbm_open" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dbm_open(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dbm_open) || defined (__stub___dbm_open) choke me #else dbm_open(); #endif ; return 0; } EOF if { (eval echo configure:14381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dbm_open=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_dbm_open=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'dbm_open`\" = yes"; then echo "$ac_t""yes" 1>&6 with_database_dbm=yes libdbm= else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6 echo "configure:14400: checking for dbm_open in -ldbm" >&5 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'` xe_check_libs=" -ldbm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_database_dbm=yes libdbm=-ldbm else echo "$ac_t""no" 1>&6 test "$with_database_dbm" = "yes" && \ { echo "Error:" "Required DBM support cannot be provided." >&2; exit 1; } with_database_dbm=no fi fi fi test -n "$libdbm" && LIBS=""$libdbm" $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \""$libdbm"\" to \$LIBS"; fi test "$with_database_gdbm" = "yes" -o \ "$with_database_dbm" = "yes" && \ { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_DBM EOF cat >> confdefs.h <<\EOF #define HAVE_DBM 1 EOF } echo $ac_n "checking for u_int8_t""... $ac_c" 1>&6 echo "configure:14456: checking for u_int8_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])u_int8_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_u_int8_t=yes else rm -rf conftest* ac_cv_type_u_int8_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_u_int8_t" 1>&6 if test $ac_cv_type_u_int8_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining u_int8_t = uint8_t EOF cat >> confdefs.h <<\EOF #define u_int8_t uint8_t EOF } fi if test $ac_cv_type_u_int8_t = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_U_INT8_T = 1 EOF cat >> confdefs.h <<\EOF #define HAVE_U_INT8_T 1 EOF } fi echo $ac_n "checking for u_int16_t""... $ac_c" 1>&6 echo "configure:14500: checking for u_int16_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])u_int16_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_u_int16_t=yes else rm -rf conftest* ac_cv_type_u_int16_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_u_int16_t" 1>&6 if test $ac_cv_type_u_int16_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining u_int16_t = uint16_t EOF cat >> confdefs.h <<\EOF #define u_int16_t uint16_t EOF } fi if test $ac_cv_type_u_int16_t = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_U_INT16_T = 1 EOF cat >> confdefs.h <<\EOF #define HAVE_U_INT16_T 1 EOF } fi echo $ac_n "checking for u_int32_t""... $ac_c" 1>&6 echo "configure:14544: checking for u_int32_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])u_int32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_u_int32_t=yes else rm -rf conftest* ac_cv_type_u_int32_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_u_int32_t" 1>&6 if test $ac_cv_type_u_int32_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining u_int32_t = uint32_t EOF cat >> confdefs.h <<\EOF #define u_int32_t uint32_t EOF } fi if test $ac_cv_type_u_int32_t = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_U_INT32_T = 1 EOF cat >> confdefs.h <<\EOF #define HAVE_U_INT32_T 1 EOF } fi echo $ac_n "checking for u_int64_t""... $ac_c" 1>&6 echo "configure:14588: checking for u_int64_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])u_int64_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_u_int64_t=yes else rm -rf conftest* ac_cv_type_u_int64_t=no fi rm -f conftest* echo "$ac_t""$ac_cv_type_u_int64_t" 1>&6 if test $ac_cv_type_u_int64_t = no; then { test "$extra_verbose" = "yes" && cat << \EOF Defining u_int64_t = uint64_t EOF cat >> confdefs.h <<\EOF #define u_int64_t uint64_t EOF } fi if test $ac_cv_type_u_int64_t = yes; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_U_INT64_T = 1 EOF cat >> confdefs.h <<\EOF #define HAVE_U_INT64_T 1 EOF } fi if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6 echo "configure:14634: checking for Berkeley db.h" >&5 for header in "db/db.h" "db.h"; do case "$opsys" in *freebsd*) cat > conftest.$ac_ext < #if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1) #ifdef HAVE_INTTYPES_H #define __BIT_TYPES_DEFINED__ #include #endif #endif #include <$header> int main() { ; return 0; } EOF if { (eval echo configure:14655: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* db_h_file="$header"; break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* ;; *) cat > conftest.$ac_ext < #if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1) #ifdef HAVE_INTTYPES_H #define __BIT_TYPES_DEFINED__ #include #if !HAVE_U_INT8_T typedef uint8_t u_int8_t; #endif #if !HAVE_U_INT16_T typedef uint16_t u_int16_t; #endif #if !HAVE_U_INT32_T typedef uint32_t u_int32_t; #endif #ifdef WE_DONT_NEED_QUADS #if !HAVE_U_INT64_T typedef uint64_t u_int64_t; #endif #endif #endif #endif #include <$header> int main() { ; return 0; } EOF if { (eval echo configure:14696: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* db_h_file="$header"; break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* ;; esac done if test -z "$db_h_file" then echo "$ac_t""no" 1>&6; with_database_berkdb=no else echo "$ac_t""$db_h_file" 1>&6 fi if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley DB version""... $ac_c" 1>&6 echo "configure:14714: checking for Berkeley DB version" >&5 cat > conftest.$ac_ext < #if DB_VERSION_MAJOR > 1 yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* cat > conftest.$ac_ext < #if DB_VERSION_MAJOR > 2 yes #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t""3" 1>&6; dbfunc=db_create else rm -rf conftest* echo "$ac_t""2" 1>&6; dbfunc=db_open fi rm -f conftest* else rm -rf conftest* echo "$ac_t""1" 1>&6; dbfunc=dbopen fi rm -f conftest* echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6 echo "configure:14755: checking for $dbfunc" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $dbfunc(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$dbfunc) || defined (__stub___$dbfunc) choke me #else $dbfunc(); #endif ; return 0; } EOF if { (eval echo configure:14781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$dbfunc=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$dbfunc=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$dbfunc`\" = yes"; then echo "$ac_t""yes" 1>&6 with_database_berkdb=yes need_libdb=no else echo "$ac_t""no" 1>&6 echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6 echo "configure:14800: checking for $dbfunc in -ldb" >&5 ac_lib_var=`echo db'_'$dbfunc | sed 'y%./+-%__p_%'` xe_check_libs=" -ldb " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 with_database_berkdb=yes need_libdb=yes else echo "$ac_t""no" 1>&6 fi fi fi if test "$with_database_berkdb" = "yes"; then { test "$extra_verbose" = "yes" && cat << EOF Defining DB_H_FILE = "$db_h_file" EOF cat >> confdefs.h <> confdefs.h <<\EOF #define HAVE_BERKELEY_DB 1 EOF } test "$need_libdb" = "yes" && LIBS="-ldb $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-ldb\" to \$LIBS"; fi else with_database_berkdb=no fi fi if test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \ != "no no no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_DATABASE EOF cat >> confdefs.h <<\EOF #define HAVE_DATABASE 1 EOF } extra_objs="$extra_objs database.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"database.o\"" fi fi if test "$with_socks" = "yes"; then echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6 echo "configure:14880: checking for SOCKSinit in -lsocks" >&5 ac_lib_var=`echo socks'_'SOCKSinit | sed 'y%./+-%__p_%'` xe_check_libs=" -lsocks " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo socks | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_lib EOF cat >> confdefs.h <&6 fi test -n "$ac_cv_lib_socks_SOCKSinit" && { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SOCKS EOF cat >> confdefs.h <<\EOF #define HAVE_SOCKS 1 EOF } fi if test "$usage_tracking" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining USAGE_TRACKING EOF cat >> confdefs.h <<\EOF #define USAGE_TRACKING 1 EOF } LIBS="-Bstatic -lut -Bdynamic $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-Bstatic -lut -Bdynamic\" to \$LIBS"; fi fi if test "$with_modules" != "no"; then echo "checking for module support" 1>&6 echo "configure:14951: checking for module support" >&5 if test "$with_msw" = "yes"; then have_dl=yes; else case "$opsys" in darwin) have_dl=yes; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_DYLD EOF cat >> confdefs.h <<\EOF #define HAVE_DYLD 1 EOF } ;; *) ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 echo "configure:14967: checking for dlfcn.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:14975: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6 echo "configure:14992: checking for dlopen in -lc" >&5 cat > conftest.$ac_ext < int main() { dlopen ("", 0); ; return 0; } EOF if { (eval echo configure:15001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* have_dl=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 echo "configure:15010: checking for dlopen in -ldl" >&5 ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext < int main() { dlopen ("", 0); ; return 0; } EOF if { (eval echo configure:15021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* have_dl=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="$ac_save_LIBS" fi rm -f conftest* ac_save_LIBS= fi rm -f conftest* else echo "$ac_t""no" 1>&6 fi if test -n "$have_dl"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_DLOPEN EOF cat >> confdefs.h <<\EOF #define HAVE_DLOPEN 1 EOF } else echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 echo "configure:15050: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libdl=dld have_dl=yes; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SHL_LOAD EOF cat >> confdefs.h <<\EOF #define HAVE_SHL_LOAD 1 EOF } else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6 echo "configure:15093: checking for dld_init in -ldld" >&5 ac_lib_var=`echo dld'_'dld_init | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 libdl=dld have_dl=yes; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_DLD_INIT EOF cat >> confdefs.h <<\EOF #define HAVE_DLD_INIT 1 EOF } else echo "$ac_t""no" 1>&6 fi fi fi ;; esac fi if test -n "$have_dl"; then dll_ld= dll_ldflags= dll_cflags= dll_post= dll_ldo="-o" ld_dynamic_link_flags= xehost=$canonical xealias=$internal_configuration echo "checking how to build dynamic libraries for ${xehost}" 1>&6 echo "configure:15156: checking how to build dynamic libraries for ${xehost}" >&5 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts. case "$xehost" in *-*-linux-gnu*) ;; *-*-linux*) xehost=`echo $xehost | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` esac xehost_cpu=`echo $xehost | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` xehost_vendor=`echo $xehost | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` xehost_os=`echo $xehost | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` case "$xehost_os" in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "${COLLECT_NAMES+set}" != set; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Now see if the compiler is really GCC. if test "$GCC" = "yes"; then XEGCC=yes else echo $ac_n "checking checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:15184: checking checking whether we are using GNU C" >&5 cat > conftest.$ac_ext <&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* XEGCC=yes else rm -rf conftest* XEGCC=no fi rm -f conftest* echo "$ac_t""${XEGCC}" 1>&6 fi echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&6 echo "configure:15208: checking how to produce PIC code" >&5 wl= can_build_shared=yes if test "$XEGCC" = yes -o "$__ICC" = yes; then wl='-Wl,' case "$xehost_os" in aix[3-9]* | irix[5-9]* | osf[3-9]) # PIC is the default for these OSes. ;; os2*) # We can build DLLs from non-PIC. ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. dll_cflags='-m68020 -resident32 -malways-restore-a4' ;; *cygwin* | *mingw* ) # PIC is the default ;; *) dll_cflags='-fPIC' ;; esac else # PORTME Check for PIC flags for the system compiler. case "$xehost_os" in hpux9* | hpux1[0-9]*) # Is there a better link_static_flag that works with the bundled CC? wl='-Wl,' dll_cflags='+Z' ;; irix[5-9]*) wl='-Wl,' # PIC (with -KPIC) is the default. ;; os2*) # We can build DLLs from non-PIC. ;; osf[3-9]*) # All OSF/1 code is PIC. wl='-Wl,' ;; aix[3-9]*) # All AIX code is PIC. wl='-Wl,' ;; sco3.2v5*) dll_cflags='-belf -Kpic' wl='-Wl,' ;; unixware*) dll_cflags="-KPIC" wl="-Wl," ;; sysv4*) dll_cflags="-KPIC" wl="-Wl," ;; sysv5*) dll_cflags="-KPIC" wl="-Wl," ;; solaris2*) dll_cflags='-KPIC' wl='-Wl,' ;; sunos4*) dll_cflags='-PIC' wl='-Qoption ld ' ;; uts4*) dll_cflags='-pic' ;; *) can_build_shared=no ;; esac fi if test -n "$dll_cflags"; then echo "$ac_t""${dll_cflags}" 1>&6 # Check to make sure the dll_cflags actually works. echo $ac_n "checking if PIC flag ${dll_cflags} really works""... $ac_c" 1>&6 echo "configure:15309: checking if PIC flag ${dll_cflags} really works" >&5 save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $dll_cflags -DPIC" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # On HP-UX, the stripped-down bundled CC doesn't accept +Z, but also # reports no error. So, we need to grep stderr for (Bundled). if grep '(Bundled)' config.log >/dev/null; then echo "$ac_t""no" 1>&6 can_build_shared=no dll_cflags= else echo "$ac_t""yes" 1>&6 fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* echo "$ac_t""no" 1>&6 can_build_shared=no dll_cflags= fi rm -f conftest* CFLAGS="$save_CFLAGS" else echo "$ac_t""none" 1>&6 fi if test "$can_build_shared" = "yes"; then cc_produces_so=no xldf= xcldf= echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6 echo "configure:15351: checking if C compiler can produce shared libraries" >&5 if test "$XEGCC" = yes -o "$__ICC" = yes; then xcldf="-shared" xldf="-shared" else # Not using GCC case "$xehost_os" in aix[3-9]*) xldf="-bE:ELLSONAME.exp -H512 -T512 -bhalt:4 -bM:SRE -bnoentry -lc" xcldf="${wl}-bE:ELLSONAME.exp ${wl}-H512 ${wl}-T512 ${wl}-bhalt:4 ${wl}-bM:SRE ${wl}-bnoentry ${wl}-lc" ;; freebsd2* | netbsd* | openbsd*) xldf="-Bshareable" xcldf="${wl}-Bshareable" ;; freebsd3*) xcldf="-shared" ;; hpux*) xldf="-b +s" xcldf="${wl}-b ${wl}+s" ;; irix[5-9]* | osf[3-9]*) xcldf="${wl}-shared" xldf="-shared" ;; sco3.2v5* | unixware* | sysv5* | sysv4* | solaris2* | solaris7* | uts4*) xcldf="-G" xldf="-G" ;; sunos4*) xcldf="${wl}-assert ${wl}pure-text ${wl}-Bstatic" xldf="-assert pure-text -Bstatic" ;; esac fi # End if if we are using gcc if test -n "$xcldf"; then save_LDFLAGS=$LDFLAGS save_LIBS=$LIBS save_xe_libs=$xe_libs LDFLAGS="$xcldf $LDFLAGS" LIBS= xe_libs= ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* cc_produces_so=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cc_produces_so=no fi rm -f conftest* LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS xe_libs=$save_xe_libs ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' else cc_produces_so=no fi echo "$ac_t""${cc_produces_so}" 1>&6 LTLD=$LD if test -z "$LTLD"; then ac_prog=ld if test "$XEGCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 echo "configure:15434: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. /*) if test -z "$LTLD"; then # case "$ac_prog" in # *gcc-lib*) LTLD="$CC" # ;; # *) LTLD="$ac_prog" # ;; # esac fi ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac else echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 echo "configure:15460: checking for GNU ld" >&5 fi if test -z "$LTLD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog"; then LTLD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$LTLD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then xe_gnu_ld=yes else xe_gnu_ld=no fi fi done IFS="$ac_save_ifs" fi if test -n "$LTLD"; then echo "$ac_t""${LTLD}" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$LTLD" -a "$cc_produces_so" = no; then { echo "configure: error: no acceptable linker found in \$PATH" 1>&2; exit 1; } exit 1 fi fi ld_dynamic_link_flags= # Check to see if it really is or isn't GNU ld. echo $ac_n "checking if the linker is GNU ld""... $ac_c" 1>&6 echo "configure:15498: checking if the linker is GNU ld" >&5 # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LTLD -v 2>&1 &5; then xe_gnu_ld=yes else xe_gnu_ld=no fi echo "$ac_t""${xe_gnu_ld}" 1>&6 case "$xehost_os" in amigaos* | sunos4*) # On these operating systems, we should treat GNU ld like the system ld. gnu_ld_acts_native=yes ;; *) gnu_ld_acts_native=no ;; esac if test "$cc_produces_so" = "yes"; then dll_ld=$CC dll_ldflags=$xcldf can_build_shared=yes ld_shlibs=yes else # OK - only NOW do we futz about with ld. # See if the linker supports building shared libraries. echo $ac_n "checking whether the linker supports shared libraries""... $ac_c" 1>&6 echo "configure:15526: checking whether the linker supports shared libraries" >&5 dll_ld=$CC dll_ldflags=$LDFLAGS ld_shlibs=yes can_build_shared=yes if test "$xe_gnu_ld" = yes && test "$gnu_ld_acts_native" != yes; then # See if GNU ld supports shared libraries. if $LTLD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then dll_ld=$CC dll_ldflags="-shared" ld_shlibs=yes else ld_shlibs=no fi else # PORTME fill in a description of your system's linker (not GNU ld) case "$xehost_os" in aix3*) dll_ld=$LTLD dll_ldflags=$xldf ;; aix[4-9]*) dll_ldflags=$xcldf ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # doesn't break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) dll_ld=$LTLD dll_ldflags=$xldf dll_post="/usr/lib/c++rt0.o" ;; # Unfortunately, older versions of FreeBSD 2 don't have this feature. freebsd2*) dll_ld=$LTLD dll_ldflags="-Bshareable" ;; # FreeBSD 3, at last, uses gcc -shared to do shared libraries. freebsd3*) dll_ldflags="-shared" ;; hpux*) dll_ld=$LTLD dll_ldflags=$xldf ;; irix[5-9]*) dll_ld=$LTLD dll_ldflags=$xldf ;; netbsd*) # Tested with NetBSD 1.2 ld dll_ld=$LTLD dll_ldflags=$xldf ;; openbsd*) dll_ld=$LTLD dll_ldflags=$xldf ;; osf3* | osf4*) dll_ld=$LTLD dll_ldflags=$xldf ;; # For both SCO and Solaris we MAY want to have LDFLAGS include -z text sco3.2v5* | unixware* | sysv5* | sysv4* | solaris2* | solaris7*) dll_ld=$LTLD case "$dll_ld" in *gcc*) dll_ldflags="-shared" dll_ld=$CC ;; *) dll_ldflags="-G" ;; esac ;; sunos4*) if test "$XEGCC" = yes; then dll_ld=$CC else dll_ld=$LTLD fi dll_ldflags=$xldf ;; uts4*) dll_ld=$LTLD dll_ldflags="-G" ;; bsdi*) dll_ldflags="-r" dll_ld="shlicc2" ;; *) ld_shlibs=no can_build_shared=no ;; esac fi echo "$ac_t""${ld_shlibs}" 1>&6 if test "$ld_shlibs" = "no"; then can_build_shared=no fi fi # End of if cc_produces_so = no if test "$xe_gnu_ld" = yes; then if test "$ld_shlibs" = yes; then ld_dynamic_link_flags="${wl}-export-dynamic" fi fi if test -z "$ld_dynamic_link_flags"; then case "$xehost_os" in aix[3-9]*) ld_dynamic_link_flags= ;; freebsd2.2*) ld_dynamic_link_flags= ;; freebsd2*) ld_dynamic_link_flags= ;; freebsd3*) ld_dynamic_link_flags= ;; hpux*) ld_dynamic_link_flags="${wl}-E" ;; irix[5-9]*) ld_dynamic_link_flags= ;; netbsd*) ld_dynamic_link_flags= ;; openbsd*) ld_dynamic_link_flags= ;; osf3* | osf4*) ld_dynamic_link_flags= ;; solaris2* | solaris7*) ld_dynamic_link_flags= ;; sco3.2v5* | unixware* | sysv5* | sysv4*) ld_dynamic_link_flags="${wl}-Bexport" ;; sunos4*) ld_dynamic_link_flags= ;; uts4*) ld_dynamic_link_flags= ;; bsdi*) ld_dynamic_link_flags= ;; esac fi # End of if -z ld_dynamic_link_flags fi # End of if test "$can_build_shared" = "yes" fi if test "$can_build_shared" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SHLIB EOF cat >> confdefs.h <<\EOF #define HAVE_SHLIB 1 EOF } extra_objs="$extra_objs sysdll.o emodules.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"sysdll.o emodules.o\"" fi INSTALL_ARCH_DEP_SUBDIR="$INSTALL_ARCH_DEP_SUBDIR src" && if test "$extra_verbose" = "yes"; then echo " Appending \"src\" to \$INSTALL_ARCH_DEP_SUBDIR"; fi test -n "$libdl" && LIBS="-l${libdl} $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-l${libdl}\" to \$LIBS"; fi for ac_func in dlerror _dlerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:15737: checking for $ac_func" >&5 cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:15763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` { test "$extra_verbose" = "yes" && cat << EOF Defining $ac_tr_func EOF cat >> confdefs.h <&6 fi done with_modules=yes else if test "$with_modules" = "yes"; then { echo "Error:" "Required module support cannot be provided." >&2; exit 1; } else echo "configure: warning: "Module support cannot be provided."" 1>&2 fi with_modules=no fi fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else conftest_rc="$?" echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* echo "" echo "*** PANIC *** configure forgot how to build working executables!" echo "" echo "*** This is most commonly due to an unforeseen environment, causing" echo "*** configure to incorrectly compute the sequence of libraries to link." echo "*** Please examine the tail of config.log for runtime errors." echo "*** Pay special attention to the -l flags, and perhaps -I and -L." echo "*** Often adding or removing explicit options in the configure" echo "*** invocation can work around this kind of problem. If so, please" echo "*** report it as a bug to xemacs-beta@xemacs.org." echo "***" echo "*** Other possible causes are inability to write to the file system" echo "*** (bogus permissions or disk full) or a misconfiguration of the dynamic" echo "*** linker. On Linux, check /etc/ld.conf and rerun ldconfig if" echo "*** necessary. On other systems, try telling configure where to find" echo "*** the shared libraries using the --site-runtime-libraries option." echo "***" echo "*** Another way to shoot yourself in the foot is to specify" echo "*** --with-FEATURE when FEATURE is not actually installed on your" echo "*** system. Don't do that." exit 1 fi rm -fr conftest* if test "$win32_processes" = "yes"; then extra_objs="$extra_objs process-nt.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"process-nt.o\"" fi else { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_UNIX_PROCESSES EOF cat >> confdefs.h <<\EOF #define HAVE_UNIX_PROCESSES 1 EOF } extra_objs="$extra_objs process-unix.o" && if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"process-unix.o\"" fi fi T="" for W in $CFLAGS; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done CFLAGS="$T" T="" for W in $extra_objs; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done extra_objs="$T" T="" for W in -DHAVE_CONFIG_H $c_switch_site $c_switch_machine $c_switch_system; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done c_switch_general="$T" T="" for W in $c_switch_x_site $c_switch_gtk $X_CFLAGS; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done c_switch_window_system="$T" T="" for W in $c_switch_general $c_switch_window_system; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done c_switch_all="$T" T="" for W in $ld_switch_site $ld_switch_machine $ld_switch_system $ld_switch_run; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done ld_switch_general="$T" T="" for W in $ld_switch_x_site; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done ld_switch_window_system="$T" T="" for W in $ld_switch_general $ld_switch_window_system; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done ld_switch_all="$T" T="" for W in $LIBS $libs_machine $libs_system $libs_standard; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done ld_libs_general="$T" T="" for W in $X_EXTRA_LIBS $libs_x $libs_gtk $X_PRE_LIBS; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done ld_libs_window_system="$T" T="" for W in $ld_libs_window_system $ld_libs_general; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done ld_libs_all="$T" MAKE_SUBDIR="$MAKE_SUBDIR src" && if test "$extra_verbose" = "yes"; then echo " Appending \"src\" to \$MAKE_SUBDIR"; fi internal_makefile_list="Makefile.in" SUBDIR_MAKEFILES='' test -d lock || mkdir lock for dir in $MAKE_SUBDIR; do case "$dir" in */* ) ( for d in `echo $dir | sed 's:/: :g'` ; do test -d "$d" || mkdir "$d"; cd "$d" done ) ;; * ) test -d "$dir" || mkdir "$dir" ;; esac T="" for W in $SUBDIR_MAKEFILES $dir/Makefile $dir/GNUmakefile; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done SUBDIR_MAKEFILES="$T" T="" for W in $internal_makefile_list $dir/Makefile.in; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done internal_makefile_list="$T" done for dir in src/s src/m; do if test ! -d "$dir" ; then echo Making symbolic link to "$srcdir/$dir" ${LN_S} "$srcdir/$dir" "$dir" fi done if test "$extra_verbose" = "yes"; then echo "" for var in extra_objs c_switch_general c_switch_window_system c_switch_all ld_switch_general ld_switch_window_system ld_switch_all ld_libs_general ld_libs_window_system ld_libs_all; do eval "echo \"$var = '\$$var'\""; done echo "" fi if test -f "$srcdir/src/.gdbinit" -a ! -f "src/.gdbinit"; then test "$extra_verbose" = "yes" && echo "creating src/.gdbinit" echo "source $srcdir/src/.gdbinit" > "src/.gdbinit" fi if test -f "$srcdir/src/.dbxrc" -a ! -f "src/.dbxrc"; then test "$extra_verbose" = "yes" && echo "creating src/.dbxrc" echo ". $srcdir/src/.dbxrc" > "src/.dbxrc" fi if test -f "$srcdir/TAGS" -a ! -f "TAGS"; then test "$extra_verbose" = "yes" && echo "creating TAGS" echo " $srcdir/TAGS,include" > "TAGS" fi if test "$__SUNPRO_C" = "yes"; then test "$extra_verbose" = "yes" && echo "creating .sbinit" ( echo "# For use with Sun WorkShop's Source browser." echo "# See sbquery(1) and sbinit(4) for more information" for dir in $MAKE_SUBDIR; do echo "import $dir"; done ) > .sbinit fi rm -f core PREFIX=$prefix while true; do case "$PREFIX" in *\$* ) eval "PREFIX=$PREFIX" ;; *) break ;; esac done EXEC_PREFIX=$exec_prefix while true; do case "$EXEC_PREFIX" in *\$* ) eval "EXEC_PREFIX=$EXEC_PREFIX" ;; *) break ;; esac done INFODIR=$infodir while true; do case "$INFODIR" in *\$* ) eval "INFODIR=$INFODIR" ;; *) break ;; esac done INFOPATH=$infopath while true; do case "$INFOPATH" in *\$* ) eval "INFOPATH=$INFOPATH" ;; *) break ;; esac done PACKAGE_PATH=$package_path while true; do case "$PACKAGE_PATH" in *\$* ) eval "PACKAGE_PATH=$PACKAGE_PATH" ;; *) break ;; esac done LISPDIR=$lispdir while true; do case "$LISPDIR" in *\$* ) eval "LISPDIR=$LISPDIR" ;; *) break ;; esac done MODULEDIR=$moduledir while true; do case "$MODULEDIR" in *\$* ) eval "MODULEDIR=$MODULEDIR" ;; *) break ;; esac done SITELISPDIR=$sitelispdir while true; do case "$SITELISPDIR" in *\$* ) eval "SITELISPDIR=$SITELISPDIR" ;; *) break ;; esac done SITEMODULEDIR=$sitemoduledir while true; do case "$SITEMODULEDIR" in *\$* ) eval "SITEMODULEDIR=$SITEMODULEDIR" ;; *) break ;; esac done ETCDIR=$etcdir while true; do case "$ETCDIR" in *\$* ) eval "ETCDIR=$ETCDIR" ;; *) break ;; esac done DOCDIR=$docdir while true; do case "$DOCDIR" in *\$* ) eval "DOCDIR=$DOCDIR" ;; *) break ;; esac done ARCHLIBDIR=$archlibdir while true; do case "$ARCHLIBDIR" in *\$* ) eval "ARCHLIBDIR=$ARCHLIBDIR" ;; *) break ;; esac done RECURSIVE_MAKE_ARGS="\$(MFLAGS) CC='\$(CC)' CFLAGS='\$(CFLAGS)' LDFLAGS='\$(LDFLAGS)' CPPFLAGS='\$(CPPFLAGS)'" : ${XEMACS_CC:=$CC} if test "$with_prefix" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining PREFIX_USER_DEFINED EOF cat >> confdefs.h <<\EOF #define PREFIX_USER_DEFINED 1 EOF } fi if test "$with_site_lisp" = "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining INHIBIT_SITE_LISP EOF cat >> confdefs.h <<\EOF #define INHIBIT_SITE_LISP 1 EOF } fi if test "$with_site_modules" = "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining INHIBIT_SITE_MODULES EOF cat >> confdefs.h <<\EOF #define INHIBIT_SITE_MODULES 1 EOF } fi T="" for W in $ac_configure_args; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done ac_configure_args="$T" { test "$extra_verbose" = "yes" && cat << EOF Defining EMACS_CONFIGURATION = "$configuration" EOF cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <<\EOF #define GNU_MALLOC 1 EOF } elif test "$with_system_malloc" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining USE_SYSTEM_MALLOC EOF cat >> confdefs.h <<\EOF #define USE_SYSTEM_MALLOC 1 EOF } elif test "$with_debug_malloc" = "yes"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining USE_DEBUG_MALLOC EOF cat >> confdefs.h <<\EOF #define USE_DEBUG_MALLOC 1 EOF } { test "$extra_verbose" = "yes" && cat << \EOF Defining USE_SYSTEM_MALLOC EOF cat >> confdefs.h <<\EOF #define USE_SYSTEM_MALLOC 1 EOF } fi test "$with_i18n3" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining I18N3 EOF cat >> confdefs.h <<\EOF #define I18N3 1 EOF } test "$GCC" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining USE_GCC EOF cat >> confdefs.h <<\EOF #define USE_GCC 1 EOF } test "$external_widget" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining EXTERNAL_WIDGET EOF cat >> confdefs.h <<\EOF #define EXTERNAL_WIDGET 1 EOF } test "$quick_build" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining QUICK_BUILD EOF cat >> confdefs.h <<\EOF #define QUICK_BUILD 1 EOF } test "$with_purify" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining PURIFY EOF cat >> confdefs.h <<\EOF #define PURIFY 1 EOF } test "$with_quantify" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining QUANTIFY EOF cat >> confdefs.h <<\EOF #define QUANTIFY 1 EOF } test "$with_pop" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining MAIL_USE_POP EOF cat >> confdefs.h <<\EOF #define MAIL_USE_POP 1 EOF } test "$with_kerberos" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining KERBEROS EOF cat >> confdefs.h <<\EOF #define KERBEROS 1 EOF } test "$with_hesiod" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining HESIOD EOF cat >> confdefs.h <<\EOF #define HESIOD 1 EOF } test "$use_union_type" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining USE_UNION_TYPE EOF cat >> confdefs.h <<\EOF #define USE_UNION_TYPE 1 EOF } test "$use_regex_malloc" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining REGEX_MALLOC EOF cat >> confdefs.h <<\EOF #define REGEX_MALLOC 1 EOF } test "$pdump" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining PDUMP EOF cat >> confdefs.h <<\EOF #define PDUMP 1 EOF } test "$with_ipv6_cname" = "yes" && { test "$extra_verbose" = "yes" && cat << \EOF Defining IPV6_CANONICALIZE EOF cat >> confdefs.h <<\EOF #define IPV6_CANONICALIZE 1 EOF } ( if test -f /etc/osversion; then echo "osversion: `cat /etc/osversion`" else echo "uname -a: `uname -a`" fi echo "" echo "$0 $quoted_arguments" ) > Installation if test ! -z ${emacs_beta_version} ; then if test -z "${emacs_is_beta}" ; then xemacs_betaname=".${emacs_beta_version}" else xemacs_betaname="-b${emacs_beta_version}" fi else xemacs_betaname="" fi ( echo " XEmacs ${emacs_major_version}.${emacs_minor_version}${xemacs_betaname} \"$xemacs_codename\" configured for \`$canonical'. " echo " Compilation / Installation:" echo " Source code location: $srcdir" echo " Installation prefix: $prefix" if test -n "$site_includes"; then echo " Additional header files: $site_includes" fi if test -n "$site_libraries"; then echo " Additional libraries: $site_libraries" fi if test -n "$site_prefixes"; then echo " Additional prefixes: $site_prefixes" fi if test -n "$runpath"; then echo " Runtime library search path: $runpath" fi if test -n "$opsysfile" then echo " Operating system description file: \`$opsysfile'" else echo " Not using any operating system description file" fi if test -n "$machfile" then echo " Machine description file: \`$machfile'" else echo " Not using any machine description file" fi echo " Compiler: $CC $CFLAGS" case "$CC" in gcc*) echo " Compiler version: `$CC --version | sed 1q`" echo " Compiler specs file: `$CC -v 2>&1 | sed 's/.* \([^ ]\)/\1/' | sed 1q`" ;; *) case "$canonical" in *-*-aix* ) realcc=`which $CC` if test -L $realcc ; then ccdir=`dirname $realcc` ccprog=`/bin/ls -l $realcc | sed 's/.* \([^ ]\)/\1/'` case $ccprog in */*) realcc=$ccprog;; *) realcc=$ccdir/$ccprog;; esac fi lpp=`lslpp -wqc $realcc | cut -f2 -d:` if test ! -z "$lpp" ; then lppstr=`lslpp -Lqc $lpp` lpplev=`echo "$lppstr" | cut -f3 -d:` lppdesc=`echo "$lppstr" | cut -f8 -d:` fi if test ! -z "$lpplev" ; then echo " Compiler version: $lpp $lpplev - $lppdesc" else echo " Compiler version: (unknown version)" fi ;; *-*-solaris*) ccvers=`$CC -V 2>&1 | sed 1q` if test ! -z "$ccvers" ; then echo " Compiler version: $ccvers" fi ;; alpha*-dec-osf*) ccvers=`$CC -V | tr '\n' ' '` if test ! -z "$ccvers" ; then echo " Compiler version: $ccvers" fi ;; mips-sgi-irix*) ccvers=`$CC -version` if test ! -z "$ccvers" ; then echo " Compiler version: $ccvers" fi ;; i[3-9]86-pc-linux) ccvers=`$CC -V 2>&1 | sed -n 's@^Intel.*Version @@'p` if test ! -z "$ccvers" ; then echo " Compiler version: $ccvers" fi ;; *) echo " Compiler version: $CC on $canonical";; esac esac echo " Relocating allocator for buffers: $rel_alloc" echo " GNU version of malloc: ${GNU_MALLOC}${GNU_MALLOC_reason}" case "$ld_switch_site" in *nocombreloc*) echo " Linking with \`-z nocombreloc'. - Consider configuring with --pdump." ;; esac case "$canonical" in *-*-linux*) if test -f /etc/redhat-release ; then echo " libc: `rpm -q glibc`"; else echo "Need to guess glibc1/2/etc here"; fi ;; *-*-aix*) echo " libc: bos.rte.libc `lslpp -Lqc bos.rte.libc | cut -f3 -d:`" ;; *-*-solaris*) libc=`pkginfo -l SUNWcsl | grep VERSION: | awk '{print $2}'` echo " libc: SUNWcsl $libc" ;; mips-sgi-irix*) echo " IRIX version: `uname -sRm`'" ;; alpha*-dec-osf*) (cd /usr/.smdb.; libc=` grep -h libc.so *.inv | awk '$9 == "f" {print $12}' | tr '\n' ','` echo " libc: $libc" ) ;; *) echo " libc: system-provided libc on $canonical" ;; esac echo " Window System:" if test "$with_msw" = "yes"; then echo " Compiling in support for the Microsoft window system." fi if test "$with_x11" = "yes"; then echo " Compiling in support for the X window system:" echo " - X Windows headers location: $x_includes" echo " - X Windows libraries location: $x_libraries" if test "$with_xauth" != yes; then echo " - Xau (X authority) not available." fi if test "$with_xmu" != yes; then echo " - Xmu library not available; substituting equivalent routines." fi if test "$with_wmcommand" != no; then echo " - Handling WM_COMMAND properly." fi fi if test "$need_motif" = "yes" ; then echo " Compiling in support for Motif." if test "$have_lesstif" = "yes"; then echo " - Using LessTif implementation." fi echo " *WARNING* Many versions of Motif are buggy, requiring workarounds." echo " You are likely to experience slow redisplay." echo " You may need to install vendor patches to Motif." echo " See PROBLEMS for more information." fi if test "$need_athena" = "yes"; then echo " Compiling in support for the Athena widget set:" echo " - Athena headers location: $athena_h_path" echo " - Athena library to link: $athena_lib" fi case "$with_menubars" in gtk ) echo " Using GTK menubars." ;; lucid ) echo " Using Lucid menubars." ;; motif ) echo " Using Motif menubars." echo " *WARNING* The Motif menubar implementation is currently buggy." echo " We recommend using the Lucid menubar instead." echo " Re-run configure with --with-menubars='lucid'." ;; msw ) echo " Using MS-Windows menubars." ;; esac case "$with_scrollbars" in gtk ) echo " Using GTK scrollbars." ;; lucid ) echo " Using Lucid scrollbars." ;; motif ) echo " Using Motif scrollbars." ;; athena ) echo " Using Athena scrollbars." ;; msw ) echo " Using MS-Windows scrollbars." ;; esac case "$with_dialogs" in gtk ) echo " Using GTK dialog boxes." ;; motif ) echo " Using Motif dialog boxes." if test "$unexec" = "unexaix.o"; then if test "`uname -v`" = 4 -a "`uname -r`" -ge 3; then echo " *WARNING* The Motif dialog boxes cause problems on AIX 4.3 and higher." echo " We recommend using the Athena dialog boxes instead." echo " Install libXaw and re-run configure with --with-dialogs='athena'." echo " Read the PROBLEMS file for more information." fi; fi ;; athena ) echo " Using Athena dialog boxes." ;; msw ) echo " Using MS-Windows dialog boxes." ;; esac case "$with_widgets" in gtk ) echo " Using GTK native widgets." ;; motif ) echo " Using Motif native widgets." ;; athena ) echo " Using Athena native widgets." ;; msw ) echo " Using MS-Windows native widgets." ;; esac if test "$with_dragndrop" = yes; then echo " Compiling in support for Drag'n'Drop (EXPERIMENTAL)." echo " - Drag'n'Drop prototype: $dragndrop_proto." fi echo " TTY:" test "$with_ncurses" = yes && echo " Compiling in support for ncurses." test "$with_gpm" = yes && echo " Compiling in support for GPM (General Purpose Mouse)." echo " Images:" test "$with_gif" = yes && echo " Compiling in support for GIF images (builtin)." if test "$with_xpm" = yes; then echo " Compiling in support for XPM images." elif test "$with_x11" = yes; then echo " WARNING: -----------------------------------------------------------" echo " WARNING: Compiling without XPM image support." if test "$xpm_problem" != ""; then echo " Reason: $xpm_problem" fi echo " WARNING: You should strongly consider installing XPM." echo " WARNING: Otherwise toolbars and other graphics will look suboptimal." echo " WARNING: (a copy may be found in ftp://ftp.xemacs.org/pub/xemacs/aux)" echo " WARNING: -----------------------------------------------------------" fi if test "$with_png" = yes; then echo " Compiling in support for PNG images." elif test "$window_system" != "none"; then echo " WARNING: -----------------------------------------------------------" echo " WARNING: Compiling without PNG image support." if test "$png_problem" != ""; then echo " Reason: $png_problem" fi echo " WARNING: You should strongly consider installing the PNG libraries." echo " WARNING: Otherwise certain images and glyphs may not display." echo " WARNING: (a copy may be found in ftp://ftp.xemacs.org/pub/xemacs/aux)" echo " WARNING: -----------------------------------------------------------" fi test "$with_jpeg" = yes && echo " Compiling in support for JPEG images." test "$with_tiff" = yes && echo " Compiling in support for TIFF images." test "$with_xface" = yes && echo " Compiling in support for X-Face message headers." echo " Sound:" test "$with_native_sound" = yes && echo " Compiling in support for sound (native)." test "$with_nas_sound" = yes && echo " Compiling in support for NAS (network audio system)." test "$old_nas" = yes && echo " - NAS library lacks error trapping; will play synchronously." test "$with_esd_sound" = yes && echo " Compiling in support for ESD (Enlightened Sound Daemon)." echo " Databases:" test "$with_database_berkdb" = yes && echo " Compiling in support for Berkeley database." test "$with_database_dbm" = yes && echo " Compiling in support for DBM." test "$with_database_gdbm" = yes && echo " Compiling in support for GNU DBM." test "$with_ldap" = yes && echo " Compiling in support for LDAP." if test "$with_postgresql" = yes; then echo " Compiling in support for PostgreSQL." echo " - Using PostgreSQL header file: $libpq_fe_h_file" test "$with_postgresqlv7" = yes && echo " - Using PostgreSQL V7 bindings." fi echo " Internationalization:" test "$with_mule" = yes && echo " Compiling in support for Mule (multi-lingual Emacs)." test "$with_file_coding" = yes && echo " Compiling in support for file coding." test "$with_xim" != no && echo " Compiling in support for XIM (X11R5+ I18N input method)." test "$with_xim" = motif && echo " - Using Motif to provide XIM support." test "$with_xim" = xlib && echo " - Using raw Xlib to provide XIM support." test "$with_xfs" = yes && echo " - Using XFontSet to provide bilingual menubar." test "$with_canna" = yes && echo " Compiling in support for Canna on Mule." if test "$with_wnn" = yes; then echo " Compiling in support for the WNN input method on Mule." test "$with_wnn6" = yes && echo " - Using WNN version 6." fi test "$with_i18n3" = yes && echo " Compiling in support for I18N level 3 (doesn't currently work)." echo " Mail:" test "$with_pop" = yes && echo " Compiling in support for POP mail retrieval." test "$with_kerberos" = yes && echo " Compiling in support for Kerberos POP authentication." test "$with_hesiod" = yes && echo " Compiling in support for Hesiod POP server access." test -n "$mail_locking" && echo " Compiling in support for \"$mail_locking\" mail spool file locking method." echo " Other Features:" test "$with_ipv6_cname" = no && echo " Inhibiting IPv6 canonicalization at startup." test "$with_tooltalk" = yes && echo " Compiling in support for ToolTalk." test "$with_workshop" = yes && echo " Compiling in support for Sun WorkShop." test "$with_socks" = yes && echo " Compiling in support for SOCKS." test "$with_dnet" = yes && echo " Compiling in support for DNET." test "$with_modules" = "yes" && echo " Compiling in support for dynamic shared object modules." if test "$use_union_type" = yes; then echo " WARNING: ---------------------------------------------------------" echo " Using the union type for Lisp_Objects." echo " Union type has been implicated in hard-to-debug runtime crashes." echo " Do NOT use this build of XEmacs for ordinary work. See PROBLEMS." echo " WARNING: ---------------------------------------------------------" fi if test "$use_regex_malloc" = no; then echo " WARNING: -----------------------------------------------------------" echo " Using alloca to allocate the failure stack." echo " It may be impossible to detect stack exhaustion, and you will crash." echo " Do NOT use this build of XEmacs for ordinary work." echo " WARNING: -----------------------------------------------------------" fi test "$pdump" = yes && echo " Using the new portable dumper." test "$debug" = yes && echo " Compiling in support for extra debugging code." test "$usage_tracking" = yes && echo " Compiling in support for active usage tracking (Sun internal)." if test "$error_check_extents $error_check_typecheck $error_check_bufpos $error_check_gc $error_check_malloc $error_check_glyphs" \ != "no no no no no no"; then echo " WARNING: ---------------------------------------------------------" echo " WARNING: Compiling in support for runtime error checking." echo " WARNING: XEmacs will run noticeably more slowly as a result." echo " WARNING: Error checking is on by default for XEmacs beta releases." echo " WARNING: ---------------------------------------------------------" fi echo "" ) | tee -a Installation echo "" # Remove any trailing slashes in these variables. test -n "$prefix" && prefix=`echo '' "$prefix" | sed -e 's:^ ::' -e 's,\([^/]\)/*$,\1,'` test -n "$exec_prefix" && exec_prefix=`echo '' "$exec_prefix" | sed -e 's:^ ::' -e 's,\([^/]\)/*$,\1,'` for file in $internal_makefile_list; do test "$file" = src/Makefile.in && \ file="src/Makefile.in:src/Makefile.in.in:src/depend" ac_output_files="$ac_output_files $file" && if test "$extra_verbose" = "yes"; then echo " Appending \"$file\" to \$ac_output_files"; fi done ac_output_files="$ac_output_files src/paths.h lib-src/config.values" test "$with_modules" = "yes" && ac_output_files="$ac_output_files lib-src/ellcc.h" && if test "$extra_verbose" = "yes"; then echo " Appending \"lib-src/ellcc.h\" to \$ac_output_files"; fi trap '' 1 2 15 trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 DEFS=-DHAVE_CONFIG_H # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "$ac_output_files src/config.h lwlib/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@LN_S@%$LN_S%g s%@blddir@%$blddir%g s%@CC@%$CC%g s%@CPP@%$CPP%g s%@start_flags@%$start_flags%g s%@ld_switch_shared@%$ld_switch_shared%g s%@start_files@%$start_files%g s%@ld@%$ld%g s%@lib_gcc@%$lib_gcc%g s%@RANLIB@%$RANLIB%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@YACC@%$YACC%g s%@SET_MAKE@%$SET_MAKE%g s%@GTK_CONFIG@%$GTK_CONFIG%g s%@X_CFLAGS@%$X_CFLAGS%g s%@X_PRE_LIBS@%$X_PRE_LIBS%g s%@X_LIBS@%$X_LIBS%g s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g s%@install_pp@%$install_pp%g s%@libs_xauth@%$libs_xauth%g s%@dnd_objs@%$dnd_objs%g s%@lwlib_objs@%$lwlib_objs%g s%@ALLOCA@%$ALLOCA%g s%@have_esd_config@%$have_esd_config%g s%@dll_ld@%$dll_ld%g s%@dll_cflags@%$dll_cflags%g s%@dll_ldflags@%$dll_ldflags%g s%@dll_post@%$dll_post%g s%@dll_ldo@%$dll_ldo%g s%@ld_dynamic_link_flags@%$ld_dynamic_link_flags%g s%@SRC_SUBDIR_DEPS@%$SRC_SUBDIR_DEPS%g s%@INSTALL_ARCH_DEP_SUBDIR@%$INSTALL_ARCH_DEP_SUBDIR%g s%@MAKE_SUBDIR@%$MAKE_SUBDIR%g s%@SUBDIR_MAKEFILES@%$SUBDIR_MAKEFILES%g s%@PROGNAME@%$PROGNAME%g s%@version@%$version%g s%@configuration@%$configuration%g s%@canonical@%$canonical%g s%@inststaticdir@%$inststaticdir%g s%@instvardir@%$instvardir%g s%@srcdir@%$srcdir%g s%@pkgdir@%$pkgdir%g s%@statedir@%$statedir%g s%@extra_includes@%$extra_includes%g s%@PREFIX_USER_DEFINED@%$PREFIX_USER_DEFINED%g s%@PREFIX@%$PREFIX%g s%@EXEC_PREFIX_USER_DEFINED@%$EXEC_PREFIX_USER_DEFINED%g s%@EXEC_PREFIX@%$EXEC_PREFIX%g s%@INFODIR_USER_DEFINED@%$INFODIR_USER_DEFINED%g s%@INFODIR@%$INFODIR%g s%@infopath@%$infopath%g s%@INFOPATH_USER_DEFINED@%$INFOPATH_USER_DEFINED%g s%@INFOPATH@%$INFOPATH%g s%@package_path@%$package_path%g s%@PACKAGE_PATH_USER_DEFINED@%$PACKAGE_PATH_USER_DEFINED%g s%@PACKAGE_PATH@%$PACKAGE_PATH%g s%@lispdir@%$lispdir%g s%@LISPDIR_USER_DEFINED@%$LISPDIR_USER_DEFINED%g s%@LISPDIR@%$LISPDIR%g s%@moduledir@%$moduledir%g s%@MODULEDIR_USER_DEFINED@%$MODULEDIR_USER_DEFINED%g s%@MODULEDIR@%$MODULEDIR%g s%@sitelispdir@%$sitelispdir%g s%@SITELISPDIR_USER_DEFINED@%$SITELISPDIR_USER_DEFINED%g s%@SITELISPDIR@%$SITELISPDIR%g s%@sitemoduledir@%$sitemoduledir%g s%@SITEMODULEDIR_USER_DEFINED@%$SITEMODULEDIR_USER_DEFINED%g s%@SITEMODULEDIR@%$SITEMODULEDIR%g s%@etcdir@%$etcdir%g s%@ETCDIR_USER_DEFINED@%$ETCDIR_USER_DEFINED%g s%@ETCDIR@%$ETCDIR%g s%@docdir@%$docdir%g s%@DOCDIR_USER_DEFINED@%$DOCDIR_USER_DEFINED%g s%@DOCDIR@%$DOCDIR%g s%@archlibdir@%$archlibdir%g s%@ARCHLIBDIR_USER_DEFINED@%$ARCHLIBDIR_USER_DEFINED%g s%@ARCHLIBDIR@%$ARCHLIBDIR%g s%@bitmapdir@%$bitmapdir%g s%@extra_objs@%$extra_objs%g s%@machfile@%$machfile%g s%@opsysfile@%$opsysfile%g s%@c_switch_general@%$c_switch_general%g s%@c_switch_window_system@%$c_switch_window_system%g s%@c_switch_all@%$c_switch_all%g s%@ld_switch_general@%$ld_switch_general%g s%@ld_switch_window_system@%$ld_switch_window_system%g s%@ld_switch_all@%$ld_switch_all%g s%@ld_libs_general@%$ld_libs_general%g s%@ld_libs_window_system@%$ld_libs_window_system%g s%@ld_libs_all@%$ld_libs_all%g s%@RECURSIVE_MAKE_ARGS@%$RECURSIVE_MAKE_ARGS%g s%@native_sound_lib@%$native_sound_lib%g s%@sound_cflags@%$sound_cflags%g s%@dynodump_arch@%$dynodump_arch%g s%@XEMACS_CC@%$XEMACS_CC%g s%@internal_makefile_list@%$internal_makefile_list%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ac_dC='\3' ac_dD='%g' # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='\([ ]\)%\1#\2define\3' ac_uC=' ' ac_uD='\4%g' # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_eB='$%\1#\2define\3' ac_eC=' ' ac_eD='%g' if test "${CONFIG_HEADERS+set}" != set; then EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF fi for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac echo creating $ac_file rm -f conftest.frag conftest.in conftest.out ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` cat $ac_file_inputs > conftest.in EOF # Transform confdefs.h into a sed script conftest.vals that substitutes # the proper values into config.h.in to produce config.h. And first: # Protect against being on the right side of a sed subst in config.status. # Protect against being in an unquoted here document in config.status. rm -f conftest.vals cat > conftest.hdr <<\EOF s/[\\&%]/\\&/g s%[\\$`]%\\&%g s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp s%ac_d%ac_u%gp s%ac_u%ac_e%gp EOF sed -n -f conftest.hdr confdefs.h > conftest.vals rm -f conftest.hdr # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >> conftest.vals <<\EOF s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% EOF # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail while : do ac_lines=`grep -c . conftest.vals` # grep -c gives empty output for an empty file on some AIX systems. if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi # Write a limited-size here document to conftest.frag. echo ' cat > conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS echo 'CEOF sed -f conftest.frag conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in ' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals cat >> $CONFIG_STATUS <<\EOF rm -f conftest.frag conftest.h echo "/* $ac_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $ac_file conftest.h 2>/dev/null; then echo "$ac_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" fi rm -f $ac_file mv conftest.h $ac_file fi fi; done EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for dir in . $MAKE_SUBDIR; do ( cd $dir rm -f junk.c < Makefile.in \ sed -e '/^# Generated/d' \ -e 's%/\*\*/#.*%%' \ -e 's/^ *# */#/' \ -e '/^##/d' \ -e '/^#/ { p d }' \ -e '/./ { s/\([\"]\)/\\\1/g s/^/"/ s/$/"/ }' > junk.c; echo creating $dir/Makefile $CPP -I. -I${top_srcdir}/src junk.c \ | sed -e 's/^\#.*//' \ -e 's/^[ ][ ]*$//'\ -e 's/^ / /' \ -e '/^[ ]*$/d' \ -e '/^\"/ { s/\\\([\"]\)/\1/g s/^[ ]*\"// s/\"[ ]*$// }' > Makefile.new chmod 444 Makefile.new mv -f Makefile.new Makefile echo creating $dir/GNUmakefile $CPP -I. -I${top_srcdir}/src -DUSE_GNU_MAKE junk.c \ | sed -e 's/^\#.*//' \ -e 's/^[ ][ ]*$//'\ -e 's/^ / /' \ -e '/^[ ]*$/d' \ -e '/^\"/ { s/\\\([\"]\)/\1/g s/^[ ]*\"// s/\"[ ]*$// }' > Makefile.new chmod 444 Makefile.new mv -f Makefile.new GNUmakefile rm -f junk.c ) done sed < config.status >> lib-src/config.values \ -e '/{ac_dA}.*{ac_dB}.*{ac_dC}.*{ac_dD}$/!d' \ -e 's/\${ac_dA}\(.*\)\${ac_dB}.*\${ac_dC}\(.*\)\${ac_dD}/\1 \2/' \ -e 's/^\([^ ]*\) $/\1 ""/' \ -e 's/ 1$/ t/' exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 xemacs-21.4.22/configure.ac0000644000175000017500000000030607365227575013547 0ustar acsacsAC_FATAL([ #### Autoconf 2.5x is not yet supported by XEmacs. #### Our configure script is known *not* to work with these versions of #### Autoconf. Please continue using Autoconf 2.13 for now. ]) xemacs-21.4.22/configure.in0000644000175000017500000055311710536156204013567 0ustar acsacsdnl Define our own header notice with own copyright define([AC_INIT_NOTICE], [#### Configuration script for XEmacs. Largely divergent from FSF. #### Guess values for system-dependent variables and create Makefiles. #### Generated automatically using autoconf version] AC_ACVERSION [ #### Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. #### Copyright (C) 1993-1995 Board of Trustees, University of Illinois. #### Copyright (C) 1996, 1997 Sun Microsystems, Inc. #### Copyright (C) 1995, 1996, 2005 Ben Wing. #### Copyright (C) 2000, 2001 Martin Buchholz. #### Copyright (C) 1998, 1999 J. Kean Johnston. ### Don't edit this script! ### This script was automatically generated by the `autoconf' program ### from the file `./configure.in'. ### To rebuild it, execute the command ### autoconf ### in the this directory. You must have autoconf version 2.13 or later. ### Note: this script has not yet been ported to autoconf version 2.5x. ### This file is part of XEmacs. ### XEmacs is free software; you can redistribute it and/or modify it ### under the terms of the GNU General Public License as published by ### the Free Software Foundation; either version 2, or (at your ### option) any later version. ### XEmacs is distributed in the hope that it will be useful, but ### WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ### General Public License for more details. ### You should have received a copy of the GNU General Public License ### along with XEmacs; see the file COPYING. If not, write to the Free ### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ### 02111-1307, USA. ### For usage, run `./configure --help' ### For more detailed information on building and installing XEmacs, ### read the file `INSTALL'. ### ### If configure succeeds, it leaves its status in config.status. ### A log of configuration tests can be found in config.log. ### If configure fails after disturbing the status quo, ### config.status is removed. ]) dnl Since XEmacs has configuration requirements that autoconf cannot dnl meet, this file is an unholy marriage of custom-baked dnl configuration code and autoconf macros. dnl We use the m4 quoting characters [ ] (as established by the dnl autoconf system), so quote them like this: [[foo]] AC_PREREQ(2.13)dnl dnl Redefine some standard autoconf macros dnl here is how XEmacs is different: dnl - no cache file dnl - non-standard options dnl - support for extra-verbosity dnl - ordinary libs are handled separately from X libs (might be a mistake) dnl - various random kludges (e.g. -with-dnet=no) dnl PRINT_VAR(var var ...) prints values of shell variables define([PRINT_VAR],[for var in patsubst([$1],[[ ]+],[ ]); do eval "echo \"$var = '\$$var'\""; done]) dnl Disable cache files: dnl This is controversial, but I am convinced this is the right way to go, dnl at least by default. Otherwise there are too many surprises. define([AC_CACHE_LOAD], )dnl define([AC_CACHE_SAVE], )dnl define([AC_CACHE_VAL], [ $2 ])dnl dnl Redefine AC_TRY_RUN_NATIVE to not throw away stderr while running dnl AC_TRY_RUN_NATIVE(PROGRAM, [ACTION-IF-TRUE [, ACTION-IF-FALSE]]) define([AC_TRY_RUN_NATIVE], [cat > conftest.$ac_ext <&AC_FD_CC then dnl Do not remove the temporary files here, so they can be examined. ifelse([$2], , :, [$2]) else conftest_rc="$?" echo "configure: failed program was:" >&AC_FD_CC cat conftest.$ac_ext >&AC_FD_CC ifelse([$3], , , [ rm -fr conftest* $3 ])dnl fi rm -fr conftest*])dnl AC_TRY_RUN_NATIVE dnl Avoid spurious cross-compiling warnings from AC_TRY_RUN dnl XEmacs is unlikely to ever cross-compile define([AC_TRY_RUN],[AC_TRY_RUN_NATIVE([$1], [$2], [$3])])dnl dnl Redefine AC_DEFINE* to provide more output if extra_verbose dnl Set VARIABLE to VALUE, verbatim, or 1. dnl AC_DEFINE(VARIABLE [, VALUE]) define([AC_DEFINE], [{ test "$extra_verbose" = "yes" && cat << \EOF Defining $1[]ifelse($#, 2, [ = $2],) EOF cat >> confdefs.h <<\EOF [#define] $1 ifelse($#, 2, [$2], 1) EOF } ])dnl AC_DEFINE define([AC_DEFINE_UNQUOTED], [{ test "$extra_verbose" = "yes" && cat << EOF Defining $1[]ifelse($#, 2, [ = $2],) EOF cat >> confdefs.h <&AC_FD_CC' ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&AC_FD_CC' cross_compiling=no ]) dnl AC_LANG_C dnl The construct foo=`echo $w1 $w2 $w3` fails on some systems if $w1 = -e or -n dnl So we use the following instead. dnl XE_SPACE(var, words) define([XE_SPACE],[ T="" for W in $2; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done $1="$T" ])dnl XE_SPACE dnl XE_ADD_OBJS(foo.o ...) define([XE_ADD_OBJS], [extra_objs="$extra_objs [$1]" && dnl if test "$extra_verbose" = "yes"; then echo " xemacs will be linked with \"[$1]\"" fi])dnl XE_ADD_OBJS dnl XE_APPEND(value, varname) define([XE_APPEND], [[$2]="$[$2] [$1]" && dnl if test "$extra_verbose" = "yes"; then echo " Appending \"[$1]\" to \$[$2]"; fi]) dnl XE_PREPEND(value, varname) define([XE_PREPEND], [[$2]="[$1] $[$2]" && dnl if test "$extra_verbose" = "yes"; then echo " Prepending \"[$1]\" to \$[$2]"; fi]) dnl XE_DIE(message) define([XE_DIE], [{ echo "Error:" $1 >&2; exit 1; }]) dnl XE_STRIP_4TH_COMPONENT(var) dnl Changes i986-pc-linux-gnu to i986-pc-linux, as God (not RMS) intended. define([XE_STRIP_4TH_COMPONENT], [$1=`echo "$$1" | sed '[s/^\([^-][^-]*-[^-][^-]*-[^-][^-]*\)-.*$/\1/]'`]) dnl Initialize some variables set by options. dnl The variables have the same names as the options, with dnl dashes changed to underlines. define([AC_INIT_PARSE_ARGS],[ dnl Get sane consistent behavior from various shells dnl Avoid losing with weird user CDPATHs if test -n "$ZSH_VERSION"; then dnl zsh's Bourne shell emulation options setopt NO_BAD_PATTERN NO_BANG_HIST NO_BG_NICE NO_EQUALS NO_FUNCTION_ARGZERO setopt GLOB_SUBST NO_HUP INTERACTIVE_COMMENTS KSH_ARRAYS NO_MULTIOS NO_NOMATCH setopt RM_STAR_SILENT POSIX_BUILTINS SH_FILE_EXPANSION SH_GLOB SH_OPTION_LETTERS setopt SH_WORD_SPLIT BSD_ECHO IGNORE_BRACES dnl zsh-3.1-beta drops core on the following dnl unset CDPATH if test -n "$CDPATH"; then CDPATH="."; export CDPATH; fi elif test -n "$BASH_VERSION"; then dnl Use Posix mode with bash set -o posix unset CDPATH else if test -n "$CDPATH"; then CDPATH="."; export CDPATH; fi fi dnl Initialize some variables set by options. dnl The variables have the same names as the options, with dnl dashes changed to underlines. exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE dnl Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} dnl Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ])dnl AC_INIT_PARSE_ARGS AC_INIT(src/lisp.h)dnl AC_CONFIG_HEADER(src/config.h lwlib/config.h) dnl Remove any more than one leading "." element from the path name. dnl If we do not remove them, then another "./" will be prepended to dnl the file name each time we use config.status, and the program name dnl will get larger and larger. This would not be a problem, except dnl that since progname gets recorded in all the Makefiles this script dnl produces, move-if-change thinks they're different when they're dnl not. dnl dnl It would be nice if we could put the ./ in a \( \) group and then dnl apply the * operator to that, so we remove as many leading './././'s dnl as are present, but some seds (like Ultrix's sed) don't allow you to dnl apply * to a \( \) group. Bleah. progname="`echo $0 | sed 's:^\./\./:\./:'`" dnl ----------------------------- dnl Establish some default values dnl ----------------------------- XE_APPEND(lib-src, MAKE_SUBDIR) XE_APPEND(lib-src, INSTALL_ARCH_DEP_SUBDIR) prefix='/usr/local' exec_prefix='${prefix}' bindir='${exec_prefix}/bin' dnl FSF 19.29 changes to: dnl datadir='${prefix}/share' dnl sharedstatedir='${prefix}/com' dnl libexecdir='${exec_prefix}/libexec' datadir='${prefix}/lib' statedir='${prefix}/lib' libdir='${exec_prefix}/lib' mandir='${prefix}/man/man1' inststaticdir='${PROGNAME}' instvardir='${PROGNAME}-${version}' infodir='${datadir}/${instvardir}/info' infopath='' install_pp='' lispdir='${datadir}/${instvardir}/lisp' moduledir='${libdir}/${instvardir}/${configuration}/modules' sitelispdir='${datadir}/${inststaticdir}/site-lisp' sitemoduledir='${libdir}/${inststaticdir}/site-modules' pkgdir='${datadir}/${instvardir}/lisp' package_path='' etcdir='${datadir}/${instvardir}/etc' archlibdir='${libdir}/${instvardir}/${configuration}' docdir='${archlibdir}' with_netinstall="no" with_prefix='yes' with_site_lisp='no' with_site_modules='yes' with_menubars='' with_scrollbars='' dnl can't turn off widgets here because of systems where they are demanded with_widgets='' with_dialogs='' with_file_coding='' cpp='' cppflags='' libs='' ldflags='' extra_includes='' dynamic='' with_x11='' with_msw='' rel_alloc='default' with_system_malloc='default' with_dlmalloc='default' use_regex_malloc='yes' dnl ESD is associated with crashes and lockups due to incorrect signal use. with_esd_sound='no' native_sound_lib='' dnl These should be set to the empty string when we want gtk / gnome to dnl be auto-detected instead of manually specified. with_gtk='no' with_gnome='no' dnl use_assertions should be 'yes' by default. Too many people in this dnl world have core dumps turned off by default or \"cannot find where the dnl core file went\". At least we should get some useful output ... use_assertions="yes" dnl the following is set to yes or no later. with_toolbars="" with_tty="" use_union_type="no" with_dnet="" dnl pdump now defaults by opsys pdump='' dnl dragndrop is still experimental. When it is stable, comment out the following line: with_dragndrop="no" dnl Too annoying, even if mandated by IPv6 (and I'm not even sure of that) with_ipv6_cname="no" dnl ------------------ dnl Options Processing dnl ------------------ define([USAGE_ERROR], [(echo "$progname: Usage error:" echo " " $1 echo " Use \`$progname --help' to show usage.") >&2 && exit 1]) dnl Record all the arguments, so we can save them in config.status. arguments="$@" dnl Shell Magic: Quote the quoted arguments in ARGUMENTS. At a later date, dnl in order to get the arguments back in $@, we have to do an dnl 'eval set x "$quoted_arguments"; shift' dnl # We use sed to turn embedded ' into '"'"'. I truly hate sh quoting. quoted_sed_magic=s/"'"/"'"'"'"'"'"'"'"/g quoted_arguments= for i in "$@"; do case "$i" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *) quoted_i="`echo '' $i | sed -e 's:^ ::' -e $quoted_sed_magic`" quoted_arguments="$quoted_arguments '$quoted_i'" ;; esac done dnl Do not use shift -- that destroys the argument list, which autoconf needs dnl to produce config.status. It turns out that "set - $arguments" does not dnl work portably. dnl However, it also turns out that many shells cannot expand ${10} at all. dnl So using an index variable does not work either. It is possible to use dnl some shell magic to make 'set x "$arguments"; shift' work portably. while test $# != 0; do arg="$1"; shift case "$arg" in --no-create|--no-recursion) ;; dnl Anything starting with a hyphen we assume is an option. -* ) dnl Separate the switch name from the value it is being given. case "$arg" in -*=*) opt=`echo '' $arg | sed -e 's:^ ::' -e 's:^-*\([[^=]]*\)=.*$:\1:'` val=`echo '' $arg | sed -e 's:^ ::' -e 's:^-*[[^=]]*=\(.*\)$:\1:'` valomitted=no ;; dnl special case these strings since echo may silently eat them: dnl --help ) opt=help val=yes valomitted=yes ;; dnl --version ) opt=version val=yes valomitted=yes ;; dnl -e ) opt=e val=yes valomitted=yes ;; dnl -E ) opt=E val=yes valomitted=yes ;; dnl -n ) opt=n val=yes valomitted=yes ;; -*) dnl If FOO is a boolean argument, --FOO is equivalent to dnl --FOO=yes. Otherwise, the value comes from the next dnl argument - see below. opt=`echo '' $arg | sed -e 's:^ ::' -e 's:^-*\(.*\)$:\1:'` val="yes" valomitted=yes ;; esac dnl translate "-" in option string to "_" optname="$opt" opt="`echo '' $opt | sed -e 's:^ ::' | tr - _`" dnl Support --without-FOO as a synonym for --with-FOO=no case "${valomitted}-${opt}" in yes-without_* ) opt=`echo $opt | sed 's/without/with/'` valomitted="no" val="no" ;; esac dnl Process the option. case "$opt" in dnl Process (many) boolean options with_site_lisp | \ with_prefix | \ with_site_modules | \ with_x | \ with_x11 | \ with_gtk | \ with_gnome | \ with_msw | \ with_gcc | \ dynamic | \ with_ncurses | \ with_dnet | \ with_socks | \ with_dragndrop | \ with_cde | \ with_offix | \ with_gpm | \ with_xpm | \ with_xface | \ with_gif | \ with_jpeg | \ with_png | \ with_tiff | \ with_wmcommand | \ with_xmu | \ with_purify | \ with_quantify | \ with_toolbars | \ with_tty | \ with_xfs | \ with_i18n3 | \ with_mule | \ with_file_coding| \ with_canna | \ with_wnn | \ with_wnn6 | \ with_workshop | \ with_sparcworks | \ with_tooltalk | \ with_ldap | \ with_postgresql | \ with_pop | \ with_kerberos | \ with_hesiod | \ with_dnet | \ with_infodock | \ with_netinstall | \ with_ipv6_cname | \ external_widget | \ verbose | \ extra_verbose | \ usage_tracking | \ use_union_type | \ pdump | \ debug | \ use_assertions | \ use_regex_malloc | \ memory_usage_stats | \ with_clash_detection | \ with_modules | \ quick_build ) dnl Make sure the value given was either "yes" or "no". case "$val" in y | ye | yes ) val=yes ;; n | no ) val=no ;; * ) USAGE_ERROR("The \`--$optname' option requires a boolean value: \`yes' or \`no'.") ;; esac eval "$opt=\"$val\"" ;; dnl Options that take a user-supplied value, as in --x-includes=/usr/X11R6/include dnl The cache-file option is ignored (for compatibility with other configures) srcdir | \ compiler | \ cflags | \ cpp | \ cppflags | \ libs | \ ldflags | \ cache_file | \ native_sound_lib| \ site_lisp | \ x_includes | \ x_libraries | \ site_includes | \ site_libraries | \ site_prefixes | \ site_runtime_libraries ) dnl If the value was omitted, get it from the next argument. if test "$valomitted" = "yes" ; then dnl Get the next argument from the argument list, if there is one. if test "$#" = 0 ; then USAGE_ERROR("The \`--$optname' option requires a value."); fi val="$1"; shift fi eval "$opt=\"$val\"" ;; dnl Options that take "yes", "no", or "default" values rel_alloc | \ with_dlmalloc | \ with_debug_malloc | use_debug_malloc | \ with_system_malloc | use_system_malloc ) case "$val" in y | ye | yes ) val=yes ;; n | no ) val=no ;; d | de | def | defa | defau | defaul | default ) val=default ;; * ) USAGE_ERROR(["The \`--$optname' option requires one of these values: \`yes', \`no', or \`default'."]) ;; esac case "$opt" in use_* ) opt="`echo $opt | sed s/use/with/`" ;; esac eval "$opt=\"$val\"" ;; dnl Has the user requested database support? "with_database" ) with_database_berkdb=no with_database_dbm=no with_database_gdbm=no for x in `echo "$val" | sed -e 's/,/ /g'` ; do case "$x" in no ) ;; b | be | ber | berk | berkd | berkdb ) with_database_berkdb=yes ;; d | db | dbm ) with_database_dbm=yes ;; g | gn | gnu | gnud | gnudb | gnudbm | gdbm) with_database_gdbm=yes ;; * ) USAGE_ERROR(["The \`--$optname' option value must be either \`no' or a comma-separated list of one or more of \`berkdb' and either \`dbm' or \`gnudbm'."]) ;; esac done if test "$with_database_dbm" = "yes" -a \ "$with_database_gdbm" = "yes"; then USAGE_ERROR("Only one of \`dbm' and \`gnudbm' may be specified with the \`--$optname' option.") fi ;; dnl Has the user requested sound support? "with_sound" ) dnl values is a subset of all,native,nas,esd dnl or their negatives: none,nonative,nonas,noesd for x in `echo "$val" | sed -e 's/,/ /g'` ; do case "$x" in dnl all and none are only permitted as the first in the list. n | no | non | none ) new_sdefault=no ;; a | al | all | both ) new_sdefault=yes ;; native ) with_native_sound=yes ;; nonative ) with_native_sound=no ;; nas ) with_nas_sound=yes ;; nonas ) with_nas_sound=no ;; esd ) with_esd_sound=yes ;; noesd ) with_esd_sound=no ;; * ) bogus_sound=yes ;; esac if test "$bogus_sound" -o \ \( -n "$new_sdefault" -a -n "$sound_notfirst" \) ; then types="\`all', \`none', \`(no)native', \`no(nas)', \`(no)esd'." USAGE_ERROR(["Valid types for the \`--$optname' option are: $types. Option \`all' or \`none' must be first in the list. The default is to autodetect native and NAS sound support."]) elif test -n "$new_sdefault" ; then with_native_sound=$new_sdefault with_nas_sound=$new_sdefault with_esd_sound=$new_sdefault new_sdefault= # reset this fi sound_notfirst=true done ;; dnl Has the user specified a preferred Athena widget set? dnl This bit expands any alias names out for us... "with_athena" ) case "$val" in xa | xaw ) val=xaw ;; 3 | 3d | xaw3d ) val=3d ;; dnl No `n' for next, someone may try `no' ne | nex | next | naxtaw) val=next ;; dnl Have not tested the next two... 9 | 95 | xaw95 ) val=95 ;; xp | xpm | xawxpm ) val=xpm ;; * ) USAGE_ERROR(["The \`--$optname' option must have one of these values: \`xaw', \`3d', \`next', \`95', or \`xpm'."]) ;; esac eval "$opt=\"$val\"" ;; dnl Has the user requested XIM support? "with_xim" ) case "$val" in y | ye | yes ) val=yes ;; n | no | non | none ) val=no ;; x | xl | xli | xlib ) val=xlib ;; m | mo | mot | moti | motif ) val=motif ;; * ) USAGE_ERROR(["The \`--$optname' option must have one of these values: \`motif', \`xlib', \`yes', or \`no'."]) ;; esac eval "$opt=\"$val\"" ;; dnl Mail locking specification "mail_locking" ) case "$val" in lockf ) val=lockf ;; flock ) val=flock ;; file | dot ) val=file ;; locking ) val=locking ;; * ) USAGE_ERROR(["The \`--$optname' option must have one of these values: \`lockf', \`flock', \`file', \`locking', or \`mmdf'."]) ;; esac eval "$opt=\"$val\"" ;; dnl Has the user requested error-checking? "error_checking" ) dnl value can be all, none, and/or a list of categories to check. dnl Example: --error-checking=all,noextents,nobufpos dnl Example: --error-checking=none,malloc,gc for x in `echo "$val" | sed -e 's/,/ /g'` ; do case "$x" in dnl all and none are only permitted as the first in the list. n | no | non | none ) new_default=no ;; a | al | all ) new_default=yes ;; extents ) error_check_extents=yes ;; noextents ) error_check_extents=no ;; typecheck ) error_check_typecheck=yes ;; notypecheck ) error_check_typecheck=no ;; bufpos ) error_check_bufpos=yes ;; nobufpos ) error_check_bufpos=no ;; gc ) error_check_gc=yes ;; nogc ) error_check_gc=no ;; malloc ) error_check_malloc=yes ;; nomalloc ) error_check_malloc=no ;; byte_code ) error_check_byte_code=yes ;; nobyte_code ) error_check_byte_code=no ;; glyphs ) error_check_glyphs=yes ;; noglyphs ) error_check_glyphs=no ;; * ) bogus_error_check=yes ;; esac if test "$bogus_error_check" -o \ \( -n "$new_default" -a -n "$echeck_notfirst" \) ; then if test "$error_check_default" = yes ; then types="\`all' (default), \`none', \`noextents', \`notypecheck', \`nobufpos', \`nogc', \`nomalloc', \`noglyphs' and \`nobyte-code'." else types="\`all', \`none' (default), \`extents', \`typecheck', \`bufpos', \`gc', \`malloc', \`glyphs' and \`byte-code'." fi USAGE_ERROR(["Valid types for the \`--$optname' option are: $types."]) elif test -n "$new_default" ; then error_check_extents=$new_default error_check_typecheck=$new_default error_check_bufpos=$new_default error_check_gc=$new_default error_check_malloc=$new_default error_check_byte_code=$new_default error_check_glyphs=$new_default new_default= # reset this fi echeck_notfirst=true done ;; dnl Has the user tried to tell us where the X files are? dnl I think these are dopey, but no less than three alpha dnl testers, at large sites, have said they have their X files dnl installed in odd places. dnl Has the user specified one of the path options? prefix | exec_prefix | bindir | datadir | statedir | libdir | \ mandir | infodir | infopath | lispdir | etcdir | pkgdir | \ archlibdir | docdir | package_path | moduledir ) dnl If the value was omitted, get it from the next argument. if test "$valomitted" = "yes"; then if test "$#" = 0; then USAGE_ERROR("The \`--$optname' option requires a value."); fi val="$1"; shift fi eval "$opt=\"$val\"" dnl You need to synchronize this with the way the dnl default values are built. case "$opt" in dnl prefix is taken care of by --with-prefix exec_prefix ) AC_DEFINE(EXEC_PREFIX_USER_DEFINED) ;; lispdir ) AC_DEFINE(LISPDIR_USER_DEFINED) ;; sitelispdir ) AC_DEFINE(SITELISPDIR_USER_DEFINED) ;; moduledir ) AC_DEFINE(MODULEDIR_USER_DEFINED) ;; etcdir ) AC_DEFINE(ETCDIR_USER_DEFINED) ;; infodir ) AC_DEFINE(INFODIR_USER_DEFINED) ;; infopath ) AC_DEFINE(INFOPATH_USER_DEFINED) ;; package_path ) AC_DEFINE(PACKAGE_PATH_USER_DEFINED) ;; datadir ) AC_DEFINE(INFODIR_USER_DEFINED) AC_DEFINE(LISPDIR_USER_DEFINED) AC_DEFINE(MODULEDIR_USER_DEFINED) AC_DEFINE(ETCDIR_USER_DEFINED) AC_DEFINE(DOCDIR_USER_DEFINED) AC_DEFINE(ARCHLIBDIR_USER_DEFINED) ;; docdir ) AC_DEFINE(DOCDIR_USER_DEFINED) ;; exec_prefix | libdir | archlibdir ) AC_DEFINE(ARCHLIBDIR_USER_DEFINED) ;; esac ;; dnl --no-create added by autoconf for use by config.status "no_create" ) ;; dnl Has the user asked for some help? "usage" | "help" ) ${PAGER-more} ${srcdir}/configure.usage; exit 0 ;; dnl Has the user specified the toolkit(s) to use for GUI elements? "with_menubars" | \ "with_scrollbars" | \ "with_dialogs" | \ "with_widgets" ) case "$val" in l | lu | luc | luci | lucid ) val=lucid ;; mo | mot | moti | motif ) val=motif ;; a | at | ath | athe | athen | athena ) val=athena ;; n | no | non | none ) val=no ;; y | ye | yes ) val=yes ;; dnl Explicit --with-widgets on command line means yes. "") val=yes ;; g | gt | gtk ) val=gtk ;; ms | msw ) val=msw ;; * ) USAGE_ERROR(["The \`--$optname' option must have one of these values: \`gtk', \`lucid', \`motif', \`athena', \`yes', or \`no'."]) ;; esac eval "$opt=\"$val\"" ;; dnl Obsolete legacy argument? Warn, but otherwise ignore. "use_minimal_tagbits" | \ "use_indexed_lrecord_implementation" | \ "run_in_place" | \ "const_is_losing" | \ "with_gnu_make" ) AC_MSG_WARN([Obsolete option \`--$optname' ignored.]) ;; dnl Unrecognized option? No mercy for user errors. * ) USAGE_ERROR("Unrecognized option: $arg") ;; esac ;; dnl Assume anything with multiple hyphens is a configuration name. *-*-*) configuration="$arg" ;; dnl Unrecognized argument? No mercy for user errors. *) USAGE_ERROR("Unrecognized argument: $arg") ;; esac done dnl ------------------------- dnl Finish options processing dnl ------------------------- dnl Several options are equivalent to, and override, environment variables. test -n "$cpp" && CPP="$cpp" test -n "$cppflags" && CPPFLAGS="$cppflags" test -n "$libs" && LIBS="$libs" test -n "$ldflags" && LDFLAGS="$ldflags" dnl Get the arguments back. See the diatribe on Shell Magic above. eval set x "$quoted_arguments"; shift dnl --extra-verbose implies --verbose test "$extra_verbose" = "yes" && verbose=yes dnl with_x is an obsolete synonym for with_x11 test -n "$with_x" && with_x11="$with_x" dnl --with-quantify or --with-purify imply --use-system-malloc if test "$with_purify" = "yes" -o "$with_quantify" = "yes"; then test "$with_system_malloc" = "default" && with_system_malloc=yes fi dnl XE_CHECK_FEATURE_DEPENDENCY(feature1, feature2) define([XE_CHECK_FEATURE_DEPENDENCY], [if test "$with_$1 $with_$2" = "yes no"; then USAGE_ERROR("--with-$1 requires --with-$2") elif test "$with_$2" = "no" ; then with_$1=no elif test "$with_$1" = "yes"; then with_$2=yes fi ]) dnl CDE requires tooltalk XE_CHECK_FEATURE_DEPENDENCY(cde, tooltalk) dnl Find the source directory. case "$srcdir" in dnl If srcdir is not specified, see if "." or ".." might work. "" ) for dir in "`echo $0 | sed 's|//|/|' | sed 's|/[[^/]]*$||'`" "." ".." ; do if test -f "$dir/src/lisp.h" -a \ -f "$dir/lisp/version.el" ; then srcdir="$dir" break fi done if test -z "$srcdir" ; then USAGE_ERROR(["Neither the current directory nor its parent seem to contain the XEmacs sources. If you do not want to build XEmacs in its source tree, you should run \`$progname' in the directory in which you wish to build XEmacs, using the \`--srcdir' option to say where the sources may be found."]) fi ;; dnl Otherwise, check if the directory they specified is okay. * ) if test ! -f "$srcdir/src/lisp.h" -o \ ! -f "$srcdir/lisp/version.el" ; then USAGE_ERROR(["The directory specified with the \`--srcdir' option, \`$srcdir', doesn't seem to contain the XEmacs sources. You should either run the \`$progname' script at the top of the XEmacs source tree, or use the \`--srcdir' option to specify the XEmacs source directory."]) fi ;; esac dnl ########################################################################### if test -z "$configuration"; then dnl Guess the configuration configuration=`${CONFIG_SHELL-/bin/sh} $srcdir/config.guess` if test -z "$configuration"; then USAGE_ERROR(["XEmacs has not been ported to this host type. Try explicitly specifying the CONFIGURATION when rerunning configure."]) fi fi AC_PROG_LN_S dnl Make symlinks for etc, lisp, and info directories while the path dnl is still relative. We do not symlink lock because someone may dnl have stuck the source on a read-only partition. Instead we dnl create it as an actual directory later on if it does not already dnl exist. for dir in lisp etc man info tests; do if test ! -d "$dir" ; then echo Making symbolic link to "$srcdir/$dir" ${LN_S} "$srcdir/$dir" "$dir" fi done dnl Do our best to deal with automounter brokenness dnl CANONICALIZE_PATH(varname) define([CANONICALIZE_PATH], [if test -d "/net"; then if test -d "/tmp_mnt/net"; then tdir="tmp_mnt/net"; else tdir="tmp_mnt"; fi $1=`echo "[$]$1" | \ sed -e "s|^${tdir}/|/net/|" -e "s|^/a/|/net/|" -e "s|^/amd/|/net/|"` fi])dnl dnl Calculate canonical name for blddir (i.e. current directory). dnl PWD may already be the preferable absolute name for ".", dnl but we can't trust it - it is sometimes inaccurate. absolute_pwd="`pwd`"; if test -n "$PWD" -a "`cd $PWD && pwd`" = "$absolute_pwd" then blddir="$PWD" else blddir="$absolute_pwd"; CANONICALIZE_PATH(blddir) fi AC_SUBST(blddir) dnl Make srcdir absolute, if not already. It is important to dnl avoid running the path through pwd unnecessary, since pwd can dnl give you automounter prefixes, which can go away. case "$srcdir" in /* ) ;; . ) srcdir="$blddir" ;; * ) srcdir="`cd $srcdir && pwd`"; CANONICALIZE_PATH(srcdir) ;; esac dnl Check if the source directory already has a configured system in it. if test `pwd` != `sh -c cd $srcdir && pwd` \ && test -f "$srcdir/src/config.h"; then (echo "$progname: WARNING: The directory tree \`$srcdir' is being used" echo " as a build directory right now; it has been configured in its own" echo " right. To configure in another directory as well, you MUST" echo " use GNU make. If you do not have GNU make, then you must" echo " now do \`make distclean' in $srcdir," echo " and then run $progname again.") >&2 extrasub='/^VPATH[[ ]]*=/c\ vpath %.c $(srcdir)\ vpath %.h $(srcdir)\ vpath %.y $(srcdir)\ vpath %.l $(srcdir)\ vpath %.s $(srcdir)\ vpath %.in $(srcdir)' fi dnl ---------------------------------------- dnl Find out which version of XEmacs this is dnl ---------------------------------------- . "$srcdir/version.sh" || exit 1; dnl Must do the following first to determine verbosity for AC_DEFINE if test -n "$emacs_is_beta"; then beta=yes; else beta=no; fi : "${extra_verbose=$beta}" version="${emacs_major_version}.${emacs_minor_version}" AC_DEFINE_UNQUOTED(EMACS_MAJOR_VERSION, $emacs_major_version) AC_DEFINE_UNQUOTED(EMACS_MINOR_VERSION, $emacs_minor_version) if test -n "$emacs_beta_version" ; then if test "$beta" = "yes"; then version="${version}-b${emacs_beta_version}" AC_DEFINE_UNQUOTED(EMACS_BETA_VERSION, $emacs_beta_version) else version="${version}.${emacs_beta_version}" AC_DEFINE_UNQUOTED(EMACS_PATCH_LEVEL, $emacs_beta_version) fi fi AC_DEFINE_UNQUOTED(XEMACS_CODENAME, "$xemacs_codename") AC_DEFINE_UNQUOTED(EMACS_VERSION, "$version") if test "$with_infodock" = "yes"; then if test ! -f ../../ID-INSTALL; then echo "Cannot build InfoDock without InfoDock sources" with_infodock=no fi fi if test "$with_infodock" = "yes"; then dnl InfoDock version numbers. XEmacs will use the same style of numbering dnl after the release of XEmacs 21.0. AC_DEFINE_UNQUOTED(INFODOCK_MAJOR_VERSION, $infodock_major_version) AC_DEFINE_UNQUOTED(INFODOCK_MINOR_VERSION, $infodock_minor_version) AC_DEFINE_UNQUOTED(INFODOCK_BUILD_VERSION, $infodock_build_version) version=${infodock_major_version}.${infodock_minor_version}.${infodock_build_version} PROGNAME=infodock CPPFLAGS="$CPPFLAGS -DINFODOCK" else PROGNAME=xemacs fi AC_DEFINE_UNQUOTED(EMACS_PROGNAME, "$PROGNAME") dnl ---------------------------------- dnl Error checking and debugging flags dnl ---------------------------------- dnl Error checking default to "yes" in beta versions, to "no" in releases. dnl Same goes for --debug and --extra-verbosity. if test -n "$emacs_is_beta"; then beta=yes; else beta=no; fi test "${error_check_extents=$beta}" = yes && AC_DEFINE(ERROR_CHECK_EXTENTS) test "${error_check_typecheck=$beta}" = yes && AC_DEFINE(ERROR_CHECK_TYPECHECK) test "${error_check_bufpos=$beta}" = yes && AC_DEFINE(ERROR_CHECK_BUFPOS) test "${error_check_gc=$beta}" = yes && AC_DEFINE(ERROR_CHECK_GC) test "${error_check_malloc=$beta}" = yes && AC_DEFINE(ERROR_CHECK_MALLOC) test "${error_check_byte_code=$beta}" = yes && AC_DEFINE(ERROR_CHECK_BYTE_CODE) test "${error_check_glyphs=$beta}" = yes && AC_DEFINE(ERROR_CHECK_GLYPHS) dnl debug=yes must be set when error checking is present. This should be dnl fixed up. dnl debug implies other options if test "${debug:=$beta}" = "yes"; then use_assertions=yes memory_usage_stats=yes XE_ADD_OBJS(debug.o) XE_ADD_OBJS(tests.o) AC_DEFINE(DEBUG_XEMACS) fi test "$use_assertions" = "yes" && AC_DEFINE(USE_ASSERTIONS) test "$memory_usage_stats" = "yes" && AC_DEFINE(MEMORY_USAGE_STATS) dnl ------------------------------ dnl Determine the s&m files to use dnl ------------------------------ dnl Given the configuration name, set machfile and opsysfile to the dnl names of the m/*.h and s/*.h files we should use. dnl Canonicalize the configuration name. AC_MSG_CHECKING("host system type") dnl allow -workshop suffix on configuration name internal_configuration=`echo $configuration | sed 's/-\(workshop\)//'` canonical=`${CONFIG_SHELL-/bin/sh} $srcdir/config.sub "$internal_configuration"` XE_STRIP_4TH_COMPONENT(configuration) XE_STRIP_4TH_COMPONENT(canonical) AC_MSG_RESULT($configuration) dnl If you add support for a new configuration, add code to this dnl switch statement to recognize your configuration name and select dnl the appropriate operating system and machine description files. dnl You would hope that you could choose an m/*.h file pretty much dnl based on the machine portion of the configuration name, and an s- dnl file based on the operating system portion. However, it turns out dnl that each m/*.h file is pretty manufacturer-specific - for dnl example, apollo.h, hp9000s300.h, mega68k, news.h, and tad68k are dnl all 68000 machines; mips.h, pmax.h, and news-risc are all MIPS dnl machines. So we basically have to have a special case for each dnl configuration name. dnl As far as handling version numbers on operating systems is dnl concerned, make sure things will fail in a fixable way. If dnl /etc/MACHINES says nothing about version numbers, be dnl prepared to handle anything reasonably. If version numbers dnl matter, be sure /etc/MACHINES says something about it. dnl Eric Raymond says we should accept strings like "sysvr4" to mean dnl "System V Release 4"; he writes, "The old convention encouraged" dnl "confusion between `system' and `release' levels'." machine='' opsys='' dnl Straightforward machine determination case "$canonical" in sparc-*-* ) machine=sparc ;; alpha*-*-* ) machine=alpha ;; vax-*-* ) machine=vax ;; mips-dec-* ) machine=pmax ;; mips-sgi-irix6* ) machine=iris6d ;; mips-sgi-* ) machine=iris4d ;; mips*-linux ) machine=mips ;; romp-ibm-* ) machine=ibmrt ;; rs6000-ibm-aix* ) machine=ibmrs6000 ;; powerpc-ibm-aix* ) machine=ibmrs6000 ;; powerpc*-* ) machine=powerpc ;; hppa-*-* ) machine=hp800 ;; m88k-dg-* ) machine=aviion ;; m68*-sony-* ) machine=news ;; mips-sony-* ) machine=news-risc ;; clipper-* ) machine=clipper ;; arm* ) machine=arm ;; ns32k-* ) machine=ns32000 ;; esac dnl Straightforward OS determination case "$canonical" in *-*-linux* ) opsys=linux ;; *-*-netbsd* ) opsys=netbsd ;; *-*-openbsd* ) opsys=openbsd ;; *-*-nextstep* ) opsys=nextstep ;; *-*-vms ) opsys=vms ;; dnl DEC OSF *-dec-osf1.3 | *-dec-osf2* ) opsys=decosf1-3 ;; *-dec-osf1.2 | *-dec-osf1* ) opsys=decosf1-2 ;; *-dec-osf3.[[2-9]] ) opsys=decosf3-2 ;; *-dec-osf3* ) opsys=decosf3-1 ;; *-dec-osf[[4-9]]* ) opsys=decosf4-0 ;; dnl DEC Ultrix *-*-ultrix[[0-3]].* | *-*-ultrix4.0* ) opsys=bsd4-2 ;; *-*-ultrix4.[[12]]* ) opsys=bsd4-3 ;; *-*-ultrix* ) opsys=ultrix4-3 ;; dnl AIX *-*-aix3.1* ) opsys=aix3-1 ;; *-*-aix3.2.5 ) opsys=aix3-2-5 ;; *-*-aix3* ) opsys=aix3-2 ;; *-*-aix4.0* ) opsys=aix4 ;; *-*-aix4.1* ) opsys=aix4-1 ;; *-*-aix[[4-9]]* ) opsys=aix4-2 ;; dnl Other generic OSes *-gnu* ) opsys=gnu ;; *-*-bsd4.[[01]] ) opsys=bsd4-1 ;; *-*-bsd4.2 ) opsys=bsd4-2 ;; *-*-bsd4.3 ) opsys=bsd4-3 ;; *-*-aos4.2 ) opsys=bsd4-2 ;; *-*-aos* ) opsys=bsd4-3 ;; *-*-sysv0 | *-*-sysvr0 ) opsys=usg5-0 ;; *-*-sysv2 | *-*-sysvr2 ) opsys=usg5-2 ;; *-*-sysv2.2 | *-*-sysvr2.2 ) opsys=usg5-2-2 ;; *-*-sysv3* | *-*-sysvr3* ) opsys=usg5-3 ;; *-*-sysv4.1* | *-*-sysvr4.1* )opsys=usg5-4 NON_GNU_CPP=/usr/lib/cpp ;; *-*-sysv4.[[2-9]]* | *-sysvr4.[[2-9]]* ) if test -z "$NON_GNU_CPP" ; then for prog in "/usr/ccs/lib/cpp" "/lib/cpp"; do if test -f "$prog"; then NON_GNU_CPP="$prog"; break; fi done fi opsys=usg5-4-2 ;; *-sysv4* | *-sysvr4* ) opsys=usg5-4 ;; *-*-mach_bsd4.3* ) opsys=mach-bsd4-3 ;; esac case "$canonical" in dnl NetBSD ports *-*-netbsd* ) case "$canonical" in i[[3-9]]86-*-netbsd*) machine=intel386 ;; hp300-*-netbsd* | amiga-*-netbsd* | sun3-*-netbsd* | mac68k-*-netbsd* | da30-*-netbsd* | m68k-*-netbsd* ) dnl Yes, this is somewhat bogus. machine=hp9000s300 ;; pc532-*-netbsd* | ns32k-*-netbsd* ) machine=ns32000 ;; pmax-*-netbsd* | mips-*-netbsd* ) machine=pmax ;; esac ;; dnl OpenBSD ports *-*-openbsd* ) case "${canonical}" in i386-*-openbsd*) machine=intel386 ;; m68k-*-openbsd*) machine=hp9000s300 ;; mipsel-*-openbsd*) machine=pmax ;; esac ;; dnl Acorn RISCiX: arm-acorn-riscix1.1* ) machine=acorn opsys=riscix1-1 ;; arm-acorn-riscix1.2* | arm-acorn-riscix ) machine=acorn opsys=riscix1-2 ;; dnl Alliant machines fx80-alliant-* ) machine=alliant4 opsys=bsd4-2 ;; i860-alliant-* ) machine=alliant-2800 opsys=bsd4-3 ;; dnl Altos 3068 m68*-altos-sysv* ) machine=altos opsys=usg5-2 ;; dnl Amdahl UTS 580-amdahl-sysv* ) machine=amdahl opsys=usg5-2-2 ;; dnl Apollo, Domain/OS m68*-apollo-* ) machine=apollo opsys=bsd4-3 ;; dnl AT&T 3b2, 3b5, 3b15, 3b20 we32k-att-sysv* ) machine=att3b opsys=usg5-2-2 ;; dnl AT&T 3b1 - The Mighty Unix PC! m68*-att-sysv* ) machine=7300 opsys=usg5-2-2 ;; dnl Bull machines rs6000-bull-bosx* ) machine=ibmrs6000 opsys=aix3-2 ;; # dpx20 m68*-bull-sysv3* ) machine=dpx2 opsys=usg5-3 ;; # dpx2 m68*-bull-sysv2* ) machine=sps7 opsys=usg5-2 ;; # sps7 dnl CCI 5/32, 6/32 -- see "Tahoe". dnl Celerity celerity-celerity-bsd* ) machine=celerity opsys=bsd4-2 ;; dnl Convex *-convex-bsd* | *-convex-convexos* ) machine=convex opsys=bsd4-3 NON_GNU_CPP="cc -E -P" ;; dnl Cubix QBx/386 i[[3-9]]86-cubix-sysv* ) machine=intel386 opsys=usg5-3 ;; dnl Darwin, a.k.a. MacOS X (based on Mach and Freebsd) *-*-darwin*) opsys=darwin RANLIB="ranlib -c" dnl Avoids a link error with lwlib-config.c ;; dnl Data General AViiON Machines i586-dg-dgux*R4* | i586-dg-dgux5.4.4* ) machine=aviion opsys=dgux5-4r4 ;; m88k-dg-dgux5.4R3* | m88k-dg-dgux5.4.3* ) opsys=dgux5-4r3 ;; m88k-dg-dgux5.4R2* | m88k-dg-dgux5.4.2* ) opsys=dgux5-4r2 ;; m88k-dg-dgux* ) opsys=dgux ;; dnl Motorola Delta machines m68k-motorola-sysv* | m68000-motorola-sysv* ) machine=delta opsys=usg5-3 ;; m88k-motorola-sysv4* ) dnl jbotte@bnr.ca says that UNIX_System_V 4.0 R40V4.3 m88k mc88110 dnl needs POSIX_SIGNALS and therefore needs usg5-4-2. dnl I hope there are not other 4.0 versions for this machine dnl which really need usg5-4 instead. machine=delta88k opsys=usg5-4-2 ;; m88k-motorola-sysv* | m88k-motorola-m88kbcs* ) machine=delta88k opsys=usg5-3 ;; dnl Dual machines m68*-dual-sysv* ) machine=dual opsys=usg5-2 ;; m68*-dual-uniplus* ) machine=dual opsys=unipl5-2 ;; dnl Encore machines ns16k-encore-bsd* ) machine=ns16000 opsys=umax ;; dnl Gould Power Node and NP1 pn-gould-bsd4.2* ) machine=gould opsys=bsd4-2 ;; pn-gould-bsd4.3* ) machine=gould opsys=bsd4-3 ;; np1-gould-bsd* ) machine=gould-np1 opsys=bsd4-3 ;; dnl Harris Night Hawk machines running CX/UX (a 5000 looks just like a 4000 dnl as far as XEmacs is concerned). m88k-harris-cxux* ) dnl Build needs to be different on 7.0 and later releases case "`uname -r`" in [[56]].[[0-9]] ) machine=nh4000 opsys=cxux ;; [[7]].[[0-9]] ) machine=nh4000 opsys=cxux7 ;; esac NON_GNU_CPP="/lib/cpp" ;; dnl Harris ecx or gcx running CX/UX (Series 1200, Series 3000) m68k-harris-cxux* ) machine=nh3000 opsys=cxux ;; dnl Harris power pc NightHawk running Power UNIX (Series 6000) powerpc-harris-powerunix ) machine=nh6000 opsys=powerunix NON_GNU_CPP="cc -Xo -E -P" ;; dnl Honeywell XPS100 xps*-honeywell-sysv* ) machine=xps100 opsys=usg5-2 ;; dnl HP 9000 series 200 or 300 m68*-hp-bsd* ) machine=hp9000s300 opsys=bsd4-3 ;; dnl HP-UX *-hp-hpux* ) dnl Figure out machine and opsys orthogonally case "$canonical" in m68* ) machine=hp9000s300 ;; hppa* ) machine=hp800 ;; esac case "$canonical" in *-hp-hpux7* ) opsys=hpux ;; *-hp-hpux8* ) opsys=hpux8 ;; *-hp-hpux9* ) opsys=hpux9 ;; *-hp-hpux10* ) opsys=hpux10 ;; *-hp-hpux11* ) opsys=hpux11 ;; * ) opsys=hpux ;; esac dnl HP has a broken "strcat" case "$opsys" in hpux9 | hpux10 ) XE_ADD_OBJS(strcat.o) ;; esac if test "$opsys" = "hpux10" -o "$opsys" = "hpux11"; then \ ansi_flag="-Ae"; else ansi_flag="-Aa"; fi NON_GNU_CC="cc $ansi_flag" NON_GNU_CPP="cc $ansi_flag -E" case "$canonical" in *-hp-hpux*shr* ) opsys="${opsys}-shr" ;; esac ;; dnl Orion machines orion-orion-bsd* ) machine=orion opsys=bsd4-2 ;; clipper-orion-bsd* ) machine=orion105 opsys=bsd4-2 ;; dnl IBM machines i[[3-9]]86-ibm-aix1.1* ) machine=ibmps2-aix opsys=usg5-2-2 ;; i[[3-9]]86-ibm-aix1.[[23]]* | i[[3-9]]86-ibm-aix* ) machine=ibmps2-aix opsys=usg5-3 ;; i370-ibm-aix*) machine=ibm370aix opsys=usg5-3 ;; romp-ibm-aos* ) opsys=bsd4-3 ;; romp-ibm-bsd* ) opsys=bsd4-3 ;; romp-ibm-mach* ) opsys=mach-bsd4-3 ;; dnl Integrated Solutions "Optimum V" m68*-isi-bsd4.2* ) machine=isi-ov opsys=bsd4-2 ;; m68*-isi-bsd4.3* ) machine=isi-ov opsys=bsd4-3 ;; dnl Intel 386 machines where we do care about the manufacturer i[[3-9]]86-intsys-sysv* ) machine=is386 opsys=usg5-2-2 ;; dnl Prime EXL i[[3-9]]86-prime-sysv* ) machine=i386 opsys=usg5-3 ;; dnl Sequent Symmetry running Dynix i[[3-9]]86-sequent-bsd* ) machine=symmetry opsys=bsd4-3 ;; dnl Sequent Symmetry running DYNIX/ptx i[[3-9]]86-sequent-ptx* ) machine=sequent-ptx opsys=ptx NON_GNU_CPP="/lib/cpp" ;; dnl Unspecified sysv on an ncr machine defaults to svr4.2. dnl (Plain usg5-4 does not turn on POSIX signals, which we need.) i[[3-9]]86-ncr-sysv* ) machine=ncr386 opsys=usg5-4-2 ;; dnl Intel Paragon OSF/1 i860-intel-osf1* ) machine=paragon opsys=osf1 NON_GNU_CPP=/usr/mach/lib/cpp ;; dnl Intel 860 i860-*-sysv4* ) machine=i860 opsys=usg5-4 NON_GNU_CC="/bin/cc" NON_GNU_CPP="/usr/ccs/lib/cpp" ;; dnl Masscomp machines m68*-masscomp-rtu* ) machine=masscomp opsys=rtu ;; dnl Megatest machines m68*-megatest-bsd* ) machine=mega68 opsys=bsd4-2 ;; dnl Workstations sold by MIPS dnl This is not necessarily all workstations using the MIPS processor - dnl Irises are produced by SGI, and DECstations by DEC. mips-mips-usg* ) machine=mips4 ;; mips-mips-riscos4 ) machine=mips4 NON_GNU_CC="cc -systype bsd43" NON_GNU_CPP="cc -systype bsd43 -E" case "$canonical" in mips-mips-riscos4* ) opsys=bsd4-3 ;; mips-mips-riscos5* ) opsys=riscos5 ;; esac ;; mips-mips-bsd* ) machine=mips opsys=bsd4-3 ;; mips-mips-* ) machine=mips opsys=usg5-2-2 ;; dnl NeXT m68*-next-* | m68k-*-nextstep* ) machine=m68k opsys=nextstep ;; dnl The complete machine from National Semiconductor ns32k-ns-genix* ) machine=ns32000 opsys=usg5-2 ;; dnl NCR machines m68*-ncr-sysv2* | m68*-ncr-sysvr2* ) machine=tower32 opsys=usg5-2-2 ;; m68*-ncr-sysv3* | m68*-ncr-sysvr3* ) machine=tower32v3 opsys=usg5-3 ;; dnl Nixdorf Targon 31 m68*-nixdorf-sysv* ) machine=targon31 opsys=usg5-2-2 ;; dnl Nu (TI or LMI) m68*-nu-sysv* ) machine=nu opsys=usg5-2 ;; dnl Plexus m68*-plexus-sysv* ) machine=plexus opsys=usg5-2 ;; dnl Pyramid machines pyramid-pyramid-bsd* ) machine=pyramid opsys=bsd4-2 ;; dnl Sequent Balance ns32k-sequent-bsd4.2* ) machine=sequent opsys=bsd4-2 ;; ns32k-sequent-bsd4.3* ) machine=sequent opsys=bsd4-3 ;; dnl Siemens Nixdorf mips-siemens-sysv* | mips-sni-sysv*) machine=mips-siemens opsys=usg5-4 NON_GNU_CC=/usr/ccs/bin/cc NON_GNU_CPP=/usr/ccs/lib/cpp ;; dnl NEC mips-nec-sysv*) machine=mips-nec NON_GNU_CC=/usr/ccs/bin/cc NON_GNU_CPP=/usr/ccs/lib/cpp ;; dnl Silicon Graphics machines dnl Iris 2500 and Iris 2500 Turbo (aka the Iris 3030) m68*-sgi-iris3.5* ) machine=irist opsys=iris3-5 ;; m68*-sgi-iris3.6* | m68*-sgi-iris*) machine=irist opsys=iris3-6 ;; dnl Iris 4D mips-sgi-irix3.* ) opsys=irix3-3 ;; mips-sgi-irix4.* ) opsys=irix4-0 ;; mips-sgi-irix6* ) opsys=irix6-0 ;; mips-sgi-irix5.1* ) opsys=irix5-1 ;; mips-sgi-irix5.2* ) opsys=irix5-2 ;; mips-sgi-irix5.* ) opsys=irix5-3 ;; mips-sgi-irix* ) opsys=irix5-0 ;; dnl SONY machines *-sony-newsos[[34]]* | *-sony-news[[34]]* ) opsys=bsd4-3 ;; *-sony-news* ) opsys=newsos5 ;; dnl Stride m68*-stride-sysv* ) machine=stride opsys=usg5-2 ;; dnl Suns *-*-solaris* | *-*-sunos* | *-sun-mach* | *-sun-bsd* ) dnl Hardware type case "$canonical" in m68*-sunos1* ) machine=sun1 ;; m68*-sunos2* ) machine=sun2 ;; m68* ) machine=sun3 ;; i*86*-sun-sunos[[34]]* ) machine=sun386 ;; i*86-*-* ) machine=intel386 ;; rs6000* ) machine=rs6000 ;; esac dnl Make $canonical even more so. case "$canonical" in *-sunos5*) canonical=`echo $canonical | sed -e s/sunos5/solaris2/`;; esac dnl On SunOS 4, use /usr/lib/cpp, sans dynodump, /bin/ranlib dnl On SunOS 5, use cc -E, need dynodump, RANLIB not needed dnl But, SunOS 5.6 no longer needs dynodump because it has a similar dnl function integrated. case "$canonical" in *-sunos4* ) #test -f /usr/lib/cpp && NON_GNU_CPP=/usr/lib/cpp ;; : ;; *-solaris2* ) #test -f /usr/ccs/lib/cpp && NON_GNU_CPP=/usr/ccs/lib/cpp RANLIB=':' ;; esac case "$canonical" in *-solaris* ) opsys=sol2 os_release_major=`uname -r | sed -e 's/^\([[0-9]]\{1,\}\)\.\([[0-9]]\{1,\}\).*/\1/'` os_release_minor=`uname -r | sed -e 's/^\([[0-9]]\{1,\}\)\.\([[0-9]]\{1,\}\).*/\2/'` case "$os_release_minor" in [[0-9]]) os_release_minor="0${os_release_minor}";; esac os_release="${os_release_major}${os_release_minor}" AC_DEFINE_UNQUOTED(OS_RELEASE, $os_release) ;; dnl The last Sun386 ran 4.0. i*86-*-sunos4* ) opsys=sunos4-0 ;; *-sunos4.0* ) opsys=sunos4-0 ;; *-sunos4.1.2* ) opsys=sunos4-1-2 ;; *-sunos4.1.3* ) opsys=sunos4-1-3 ;; *-sunos4.1.[[4-9]]* ) opsys=sunos4-1-4 ;; *-sunos4* | *-sunos ) opsys=sunos4-1 ;; *-mach* ) opsys=mach-bsd4-3 ;; * ) opsys=bsd4-2 ;; esac case "$canonical" in *-sunos4*shr* ) opsys="${opsys}-shr" ;; esac dnl Watch out for a compiler guaranteed not to work. test "$opsys $CC" = "sol2 /usr/ucb/cc" && CC="" ;; dnl Tadpole 68k m68*-tadpole-sysv* ) machine=tad68k opsys=usg5-3 ;; dnl Tahoe machines tahoe-tahoe-bsd4.2* ) machine=tahoe opsys=bsd4-2 ;; tahoe-tahoe-bsd4.3* ) machine=tahoe opsys=bsd4-3 ;; dnl Tandem Integrity S2 mips-tandem-sysv* ) machine=tandem-s2 opsys=usg5-3 ;; dnl Tektronix XD88 m88k-tektronix-sysv3* ) machine=tekxd88 opsys=usg5-3 ;; dnl Tektronix 16000 box (6130?) ns16k-tektronix-bsd* ) machine=ns16000 opsys=bsd4-2 ;; dnl Tektronix 4300 dnl src/m/tek4300.h hints that this is a m68k machine. m68*-tektronix-bsd* ) machine=tek4300 opsys=bsd4-3 ;; dnl Titan P2 or P3 titan-titan-sysv* ) machine=titan opsys=usg5-3 ;; dnl Ustation E30 (SS5E) m68*-unisys-uniplus* ) machine=ustation opsystem=unipl5-2 ;; dnl Vaxen. vax-dec-* ) case "$canonical" in *-sysv[[01]]* | *-sysvr[[01]]* ) opsys=usg5-0 ;; *-sysv2* | *-sysvr2* ) opsys=usg5-2 ;; *-mach* ) opsys=mach-bsd4-3 ;; esac ;; dnl Whitechapel MG1 ns16k-whitechapel-* ) machine=mg1 ;; dnl Wicat m68*-wicat-sysv* ) machine=wicat opsys=usg5-2 ;; dnl Intel 386 machines where we do not care about the manufacturer i[[3-9]]86-*-* ) machine=intel386 case "$canonical" in *-isc1.* | *-isc2.[[01]]* ) opsys=386-ix ;; *-isc2.2* ) opsys=isc2-2 ;; *-isc4.0* ) opsys=isc4-0 ;; *-isc4.* ) opsys=isc4-1 GCC_TEST_OPTIONS=-posix NON_GCC_TEST_OPTIONS=-Xp ;; *-isc* ) opsys=isc3-0 ;; *-esix5* ) opsys=esix5r4 NON_GNU_CPP=/usr/lib/cpp ;; *-esix* ) opsys=esix ;; *-mach* ) opsys=mach-bsd4-3 ;; *-xenix* ) opsys=xenix ;; *-sco3.2v4* ) opsys=sco4 NON_GNU_CPP=/lib/cpp ;; *-bsd386* | *-bsdi1* ) opsys=bsd386 ;; *-bsdi4* ) opsys=bsdos4 ;; *-bsdi3* ) opsys=bsdos3 ;; *-bsdi2.1* ) opsys=bsdos2-1 ;; *-bsdi2* ) opsys=bsdos2 ;; *-sco3.2v5* ) opsys=sco5 ;; *-sysv5* ) opsys=sco7 ;; *-386bsd* ) opsys=386bsd ;; *-freebsd* ) opsys=freebsd ;; *-nextstep* ) opsys=nextstep ;; *-pc-cygwin* ) opsys=cygwin32 ;; *-pc-mingw* ) opsys=mingw32 ; test -z "$with_tty" && with_tty="no";; dnl Otherwise, we fall through to the generic opsys code at the bottom. esac ;; dnl Linux/68k m68k-*-linux* ) machine=m68k opsys=linux ;; esac dnl Initialize machine from $canonical if not in our database above. test -z "$machine" && machine=`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 machfile="m/${machine}.h" AC_DEFINE_UNQUOTED(config_machfile, "$machfile") else echo "XEmacs has no builtin knowledge of \`$machine' machines." echo "Using configure-time autodetection only." fi if test -r "${srcdir}/src/s/${opsys}.h"; then opsysfile="s/${opsys}.h" AC_DEFINE_UNQUOTED(config_opsysfile, "$opsysfile") else echo "XEmacs has no builtin knowledge of \`$opsys' operating systems." echo "Using configure-time autodetection only." fi dnl -------------------------------------------------------------- dnl $opsys detection complete; defaults depending on $opsys follow dnl -------------------------------------------------------------- if test -z "$pdump"; then case "$opsys" in linux* ) pdump=yes ;; dnl glibc 2.3.1 seems to hose unexec darwin ) pdump=yes ;; dnl No "native" working dumper available cygwin* ) pdump=yes ;; dnl unexec is broken *) pdump=no ;; esac fi if test -z "$dynamic"; then case "$opsys" in hpux* | sunos4* ) dynamic=no ;; *) dynamic=yes ;; esac fi if test "$dynamic" = "yes"; then case "$opsys" in hpux* | sunos4* | sco5 ) opsys="${opsys}-shr" ;; decosf* ) ld_call_shared="-call_shared" ;; darwin ) AC_DEFINE(DLSYM_NEEDS_UNDERSCORE) ;; esac else dnl "$dynamic" = "no" case "$opsys" in sol2 ) echo "Static linking is not supported on Solaris 2." echo "Rerun configure without specifying --dynamic=no." exit 1 ;; linux ) ld_call_shared="-Bstatic" ;; decosf* ) ld_call_shared="-non_shared" ;; esac fi dnl Use xlc by default on AIX case "$opsys" in aix*) NON_GNU_CC=xlc ;; esac stack_trace_eye_catcher=`echo ${PROGNAME}_${version}_${canonical} | sed 'y/.-/__/'` AC_DEFINE_UNQUOTED(STACK_TRACE_EYE_CATCHER, $stack_trace_eye_catcher) dnl -------------------------------------------------- dnl Determine the compiler, set up for feature testing dnl -------------------------------------------------- dnl Sun Development environment support test "$with_sparcworks" = "yes" && with_workshop=yes # compatibility alias XE_CHECK_FEATURE_DEPENDENCY(workshop, tooltalk) if test "$with_workshop" = "yes"; then AC_DEFINE(SUNPRO) XE_ADD_OBJS(sunpro.o) fi if test "$with_clash_detection" != "no"; then AC_DEFINE(CLASH_DETECTION) XE_ADD_OBJS(filelock.o) fi dnl Choose a compiler from (in order) dnl --compiler, env var CC, with_gcc=no && ${NON_GNU_CC:-cc}, AC_PROG_CC test -n "$compiler" && CC="$compiler" if test "$with_gcc" = "no"; then dnl Try to find a non-gcc compiler case "$CC" in "" | *gcc* ) CC="${NON_GNU_CC-cc}" ;; esac fi dnl If we don't set CFLAGS here, AC_PROG_CC will set it. dnl But we know better what's good for us, so we do our own dnl computation of real CFLAGS later. dnl --cflags overrides environment variable CFLAGS test "${cflags-unset}" != unset && CFLAGS="$cflags" if test "${CFLAGS-unset}" != unset then cflags_specified=yes; else cflags_specified=no; fi xe_save_CFLAGS="$CFLAGS" AC_PROG_CC dnl Autoconf has its own magic for compiler autodetection dnl Retry using random guesswork if AC_PROG_CC got it wrong... if test "$with_gcc" = "no" -a "$GCC" = "yes"; then CC=${NON_GNU_CC-cc} AC_PROG_CC elif test "$with_gcc" = "yes" -a "$GCC" != "yes" ; then CC=gcc AC_PROG_CC fi CFLAGS="$xe_save_CFLAGS" dnl Figure out what C preprocessor to use. dnl On Sun systems, people sometimes set up the variable CPP dnl with a value that is a directory, not an executable at all. dnl Detect that case, and ignore that value. test -n "$CPP" -a -d "$CPP" && CPP= test -n "$NON_GNU_CPP" -a "$GCC" != "yes" -a -z "$CPP" && CPP="$NON_GNU_CPP" AC_PROG_CPP dnl -------------------------------------------------------------------- dnl Compiler feature macros dnl -------------------------------------------------------------------- AC_AIX dnl Defines _ALL_SOURCE on AIX. dnl We want feature macros defined here *and* in config.h.in, so that dnl the compilation environment at configure time and compile time agree. AC_MSG_CHECKING(for GNU libc) AC_TRY_COMPILE([#include ],[ #if ! (defined __GLIBC__ || defined __GNU_LIBRARY__) #error Not a GNU libc system :-( ******* ======= ******** &&&&&&&& #endif ], have_glibc=yes, have_glibc=no) AC_MSG_RESULT($have_glibc) dnl I'm tired of pop being broken with GLIBC -slb dnl Well. then why not fix fucking pop? test "$have_glibc" = "yes" && AC_DEFINE(_GNU_SOURCE) dnl We'd like to use vendor extensions, where available. dnl We'd like to use functions from the latest Unix98 standards. dnl See http://www.opengroup.org/onlinepubs/007908799/xsh/compilation.html case "$opsys" in sol2) AC_DEFINE(__EXTENSIONS__) dnl Solaris 2 before 2.5 had some bugs with feature test macro interaction. if test "$os_release" -ge 505; then AC_DEFINE(_XOPEN_SOURCE,500) AC_DEFINE(_XOPEN_SOURCE_EXTENDED) fi ;; linux) AC_DEFINE(_POSIX_C_SOURCE,199506L) AC_DEFINE(_XOPEN_SOURCE,500) AC_DEFINE(_XOPEN_SOURCE_EXTENDED) ;; esac dnl Identify compilers to enable compiler-specific hacks. dnl Add support for other compilers HERE! dnl GCC is already identified elsewhere. AC_TRY_RUN([int main () { #if defined __SUNPRO_C return 11; #elif defined __DECC return 12; #elif defined __USLC__ && defined __SCO_VERSION__ return 13; #elif defined __INTEL_COMPILER return 14; #else return 0; #endif }], [], [case "$conftest_rc" in 11) echo "You appear to be using the SunPro C compiler." ; __SUNPRO_C=yes ;; 12) echo "You appear to be using the DEC C compiler." ; __DECC=yes ;; 13) echo "You appear to be using the SCO C compiler." ; __USLC__=yes ;; 14) echo "You appear to be using the Intel C++ compiler."; __ICC=yes dnl Newer versions of icc claim to be GCC GCC=no ;; esac]) dnl case "$canonical" in dnl *-sun-sunos* ) test "$CPP" = "acc -E" && CPP="acc -E -Xs" ;; dnl esac dnl -------------------------------------------------------------------- dnl Extract some information from the operating system and machine files dnl -------------------------------------------------------------------- echo "Extracting information from the machine- and system-dependent headers..." dnl It is not important that this name contain the PID; you cannot run dnl two configures in the same directory and have anything work dnl anyway. tempcname="conftest.c" dnl CPP_to_sh(CPP_SYMBOL, SH_VAR, DEFAULT_VALUE) define([CPP_to_sh], [[#]ifndef [$1] [#]define [$1]ifelse([$3],,, [ "$3"]) [#]endif configure___ [$2]=[$1] ])dnl CPP_to_sh dnl CPP_boolean_to_sh(CPP_SYMBOL, SH_VAR) define([CPP_boolean_to_sh], [[#]ifdef [$1] configure___ [$2]=yes [#]else configure___ [$2]=no [#]endif ])dnl CPP_boolean_to_sh cat > $tempcname < confdefs.h cat >> $tempcname <&1`" in *-fstrict-aliasing* ) CFLAGS="$CFLAGS -fno-strict-aliasing" ;; esac dnl You get five zillion shadowing warnings with g++. dnl Even with gcc, -Wshadow is questionable because of its complaints dnl about parameters with the same names as global functions. if test "$xemacs_compiler" != "g++"; then CFLAGS="$CFLAGS -Wshadow" fi dnl glibc is intentionally not `-Wpointer-arith'-clean. dnl Ulrich Drepper has rejected patches to fix the glibc header files. test "$have_glibc" != "yes" && CFLAGS="$CFLAGS -Wpointer-arith" dnl I'm not convinced this is a good idea any more. -sb dnl test "$opsys $machine" = "linux intel386" && \ dnl CFLAGS="$CFLAGS -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2" elif test "$__SUNPRO_C" = "yes"; then case "$opsys" in sol2 ) CFLAGS="-v -xO4" ;; sunos4* ) CFLAGS="-xO2";; esac elif test "$__DECC" = "yes"; then CFLAGS="-O3" elif test "$CC" = "xlc"; then CFLAGS="-g -O3 -qstrict -qnoansialias -qlibansi -qinfo -qro -qmaxmem=20000" elif test "$__ICC" = "yes"; then CFLAGS="-g -O3 -Ob2 -Wall -W1" dnl ### Add optimal CFLAGS support for other compilers HERE! else CFLAGS="-O" ;dnl The only POSIX-approved flag fi fi dnl Search for GCC specific build problems we know about if test "$GCC" = "yes"; then AC_MSG_CHECKING(for buggy gcc versions) GCC_VERSION=`$CC --version` case `uname -s`:`uname -m`:$GCC_VERSION in dnl egcs 2.90.21 (egcs-1.00 release) dnl egcs 2.90.29 (egcs-1.0.3 release) *:sun4*:2.8.1|*:sun4*:egcs-2.90.*) dnl Don't use -O2 with gcc 2.8.1 and egcs 1.0 under SPARC architectures dnl without also using `-fno-schedule-insns'. case "$CFLAGS" in *-O2*|*-O3*) case "$CFLAGS" in *-fno-schedule-insns*) ;; *) AC_MSG_RESULT(yes) AC_MSG_WARN(Don't use -O2 with gcc 2.8.1 and egcs 1.0 under SPARC architectures) AC_MSG_WARN(without also using -fno-schedule-insns.) AC_MSG_ERROR(Aborting due to known problem) ;; esac ;; esac ;; dnl egcs-2.91.57 (egcs-1.1 release) dnl egcs-2.91.66 (egcs-1.1.2 release) Linux:alpha:egcs-2.91.*) AC_MSG_RESULT(yes) AC_MSG_WARN(There have been reports of egcs-1.1 not compiling XEmacs correctly on) AC_MSG_WARN(Alpha Linux. There have also been reports that egcs-1.0.3a is O.K.) AC_MSG_ERROR(Aborting due to known problem) ;; *:i*86*:2.7.2*) case "$CFLAGS" in *-O2*|*-O3*) case "$GCC_VERSION" in 2.7.2) case "$CFLAGS" in *-fno-strength-reduce*) ;; *) AC_MSG_RESULT(yes) AC_MSG_WARN(Don't use -O2 with gcc 2.7.2 under Intel/XXX without also using) AC_MSG_WARN(-fno-strength-reduce.) AC_MSG_ERROR(Aborting due to known problem) ;; esac ;; esac case "$CFLAGS" in *-fno-caller-saves*) ;; *) AC_MSG_RESULT(yes) AC_MSG_WARN(Don't use -O2 with gcc 2.7.2 under Intel/XXX without also using) AC_MSG_WARN(-fno-caller-saves.) AC_MSG_ERROR(Aborting due to known problem) ;; esac ;; esac ;; esac AC_MSG_RESULT(no) fi dnl GNU ld now defaults to combreloc, which screws up unexec, but not pdump. dnl Note that it's OK if the GNU style long option causes non-GNU ld to barf dnl a usage message, that's often good enough. Please report it, though. dnl #### Should make this Solaris-friendly. dnl Link with -z nocombreloc for now. if test "$pdump" != "yes"; then AC_MSG_CHECKING(for \"-z nocombreloc\" linker flag) case "`ld --help 2>&1`" in *-z\ nocombreloc* ) AC_MSG_RESULT(yes) XE_PREPEND(-z nocombreloc, ld_switch_site) ;; *) AC_MSG_RESULT(no) ;; esac fi dnl Inform compiler that certain flags are meant for the linker dnl XE_PROTECT_LINKER_FLAGS(shell_var) define([XE_PROTECT_LINKER_FLAGS], [ if test "$GCC" = "yes"; then set x $[$1]; shift; [$1]="" while test -n "[$]1"; do case [$]1 in -L | -l | -u ) [$1]="$[$1] [$]1 [$]2"; shift ;; -L* | -l* | -u* | -Wl* | -pg ) [$1]="$[$1] [$]1" ;; -Xlinker* ) ;; * ) [$1]="$[$1] -Xlinker [$]1" ;; esac shift done fi])dnl XE_PROTECT_LINKER_FLAGS(ld_switch_system) XE_PROTECT_LINKER_FLAGS(ld_switch_machine) XE_PROTECT_LINKER_FLAGS(ld_switch_site) XE_PROTECT_LINKER_FLAGS(LDFLAGS) XE_PROTECT_LINKER_FLAGS(ld_call_shared) dnl Add s&m-determined objects (including unexec) to link line test -n "$objects_machine" && XE_ADD_OBJS($objects_machine) test -n "$objects_system" && XE_ADD_OBJS($objects_system) test -n "$unexec" && test ! "$pdump" = "yes" && XE_ADD_OBJS($unexec) test "$pdump" = "yes" && XE_ADD_OBJS(dumper.o) dnl Dynodump (Solaris 2.x, x<6) AC_MSG_CHECKING(for dynodump) if test "$unexec" != "unexsol2.o"; then AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) AC_DEFINE(DYNODUMP) XE_APPEND(dynodump, MAKE_SUBDIR) XE_APPEND(dynodump, SRC_SUBDIR_DEPS) case "$machine" in sparc ) dynodump_arch=sparc ;; *86* ) dynodump_arch=i386 ;; powerpc ) dynodump_arch=ppc ;; esac fi dnl Feed s&m crud to src/Makefile dnl Linux/powerpc needs the following magic for some reason dnl [Not needed with YellowDog 2.3 and causes link problems with YellowDog 3.0, dnl the two most popular PowerPC distributions.] dnl test "$machine$opsys" = "powerpclinux" && start_flags="-T $srcdir/src/ppc.ldscript" if test "$unexec" = "unexaix.o"; then dnl AIX needs various hacks to make static linking work. if test "$dynamic" = "no"; then start_flags="-Wl,-bnso,-bnodelcsect" test "$GCC" = "yes" && start_flags="-B/bin/ ${start_flags}" for f in "/lib/syscalls.exp" "/lib/threads.exp"; do if test -r "$f"; then start_flags="${start_flags},-bI:${f}"; fi done for f in "/usr/lpp/X11/bin/smt.exp" "/usr/bin/X11/smt.exp"; do if test -r "$f"; then start_flags="${start_flags},-bI:${f}"; break; fi done AC_CHECK_LIB(C, terminateAndUnload, XE_APPEND(-lC, libs_system)) fi elif test -n "$ld_text_start_addr"; then start_flags="-T $ld_text_start_addr -e __start" fi AC_SUBST(start_flags) AC_SUBST(ld_switch_shared) AC_SUBST(start_files) if test "$ordinary_link" = "no" -a "$GCC" = "yes"; then test -z "$linker" && linker='$(CC) -nostdlib' test -z "$lib_gcc" && lib_gcc='`$(CC) -print-libgcc-file-name`' fi test "$GCC" != "yes" && lib_gcc= AC_SUBST(ld) AC_SUBST(lib_gcc) dnl --------------------------------------------------------------- dnl Add site and system specific flags to compile and link commands dnl --------------------------------------------------------------- dnl Allow use of either ":" or spaces for lists of directories define(COLON_TO_SPACE, [case "$[$1]" in *:* [)] [$1]="`echo '' $[$1] | sed -e 's/^ //' -e 's/:/ /g'`";; esac])dnl dnl --site-libraries (multiple dirs) COLON_TO_SPACE(site_libraries) if test -n "$site_libraries"; then for arg in $site_libraries; do case "$arg" in -* ) ;; * ) test -d "$arg" || \ XE_DIE("Invalid site library \`$arg': no such directory") arg="-L${arg}" ;; esac XE_APPEND($arg, ld_switch_site) done fi dnl --site-includes (multiple dirs) COLON_TO_SPACE(site_includes) if test -n "$site_includes"; then for arg in $site_includes; do case "$arg" in -* ) ;; * ) test -d "$arg" || \ XE_DIE("Invalid site include \`$arg': no such directory") arg="-I${arg}" ;; esac XE_APPEND($arg, c_switch_site) done fi dnl --site-prefixes (multiple dirs) dnl --site-prefixes=dir1:dir2 is a convenient shorthand for dnl --site-libraries=dir1/lib:dir2/lib --site-includes=dir1/include:dir2/include dnl Site prefixes take precedence over the standard places, but not over dnl site-includes and site-libraries. COLON_TO_SPACE(site_prefixes) if test -n "$site_prefixes"; then for dir in $site_prefixes; do lib_dir="${dir}/lib" inc_dir="${dir}/include" if test ! -d "$dir"; then XE_DIE("Invalid site prefix \`$dir': no such directory") elif test ! -d "$lib_dir"; then XE_DIE("Invalid site prefix \`$dir': no such directory \`$lib_dir'") else if test -d "$inc_dir"; then XE_APPEND("-I$inc_dir", c_switch_site) fi XE_APPEND("-L$lib_dir", ld_switch_site) fi done fi dnl GNU software installs by default into /usr/local/{include,lib} dnl if test -d "/usr/local/include" -a -d "/usr/local/lib"; then dnl XE_APPEND("-L/usr/local/lib", ld_switch_site) dnl XE_APPEND("-I/usr/local/include", c_switch_site) dnl fi dnl Extra system-specific library directories - please add to list for dir in "/usr/ccs/lib"; do test -d "$dir" && XE_APPEND(-L${dir}, ld_switch_system) done dnl --site-runtime-libraries (multiple dirs) COLON_TO_SPACE(site_runtime_libraries) if test -n "$site_runtime_libraries"; then LD_RUN_PATH="`echo $site_runtime_libraries | sed -e 's/ */:/g'`" export LD_RUN_PATH fi dnl Linux systems have dynamic runtime library directories listed in dnl /etc/ld.so.conf. Since those are used at run time, it seems pretty dnl safe to use them at link time, and less controversial than forcing dnl the run-time to use the link-time libraries. This also helps avoid dnl mismatches between the link-time and run-time libraries. dnl #### Unfortunately, there are horrible libc4 and libc5 libraries dnl listed in /etc/ld.so.conf on some systems, and including them on dnl the link path leads to linking in utterly broken libc's. dnl There are many clever ways of approaching this problem, dnl but finding one that actually works... dnl if test -z "$LD_RUN_PATH" -a -r "/etc/ld.so.conf"; then dnl for dir in `cat /etc/ld.so.conf`; do dnl test -d "$dir" && XE_APPEND(-L${dir}, ld_switch_system) dnl done dnl add_runtime_path=no dnl fi dnl ------------------------------------- dnl Compute runtime library path dnl ------------------------------------- if test -n "$add_runtime_path"; then :; elif test "$dynamic" = "no"; then add_runtime_path=no elif test -n "$LD_RUN_PATH"; then add_runtime_path=yes else case "$opsys" in sol2 | irix* | *bsd* | decosf* ) add_runtime_path=yes ;; * ) add_runtime_path=no ;; esac fi if test "$add_runtime_path" = "yes"; then dnl Try to autodetect runtime library flag (usually -R), dnl and whether it works (or at least does no harm) AC_MSG_CHECKING("for runtime libraries flag") case "$opsys" in sol2 ) dash_r="-R" ;; decosf* | linux* | irix*) dash_r="-rpath " ;; *) dash_r="" for try_dash_r in "-R" "-R " "-rpath "; do xe_check_libs="${try_dash_r}/no/such/file-or-directory" XE_PROTECT_LINKER_FLAGS(xe_check_libs) AC_TRY_LINK(, , dash_r="$try_dash_r") xe_check_libs="" test -n "$dash_r" && break done ;; esac if test -n "$dash_r"; then AC_MSG_RESULT("\"${dash_r}\"") else AC_MSG_RESULT(NONE) fi fi xe_add_unique_runpath_dir=' xe_add_p=yes for xe_dir in $runpath_dirs; do dnl Uniquify test "$xe_dir" = "$xe_runpath_dir" && xe_add_p=no done if test "$xe_add_p" = "yes"; then test -n "$runpath" && runpath="${runpath}:" runpath="${runpath}${xe_runpath_dir}" runpath_dirs="$runpath_dirs $xe_runpath_dir" fi' dnl XE_ADD_RUNPATH_DIR(directory) define([XE_ADD_RUNPATH_DIR],[{ xe_runpath_dir=$1 dnl PRINT_VAR(ld_switch_site ld_switch_x_site runpath xe_runpath_dir LD_RUN_PATH xe_ldflags) test "$xe_runpath_dir" != "/lib" -a \ "$xe_runpath_dir" != "/usr/lib" -a \ -n "`ls ${xe_runpath_dir}/*.s[[ol]] 2>/dev/null`" && \ eval "$xe_add_unique_runpath_dir" }])dnl dnl XE_COMPUTE_RUNPATH() define([XE_COMPUTE_RUNPATH],[ if test "$add_runtime_path" = "yes" -a -n "$dash_r"; then dnl Remove runtime paths from current ld switches ld_switch_site=`echo '' $ld_switch_site | sed -e 's:^ ::' -e "s/$dash_r[[^ ]]*//g"` ld_switch_x_site=`echo '' $ld_switch_x_site | sed -e 's:^ ::' -e "s/$dash_r[[^ ]]*//g"` dnl PRINT_VAR(ld_switch_site ld_switch_x_site) dnl Fix up Runtime path dnl If LD_RUN_PATH is set in environment, use that. dnl In this case, assume user has set the right value. runpath="" runpath_dirs="" if test -n "$LD_RUN_PATH"; then runpath="$LD_RUN_PATH" elif test "$GCC" = "yes"; then dnl Compute runpath from gcc's -v output ld_switch_run_save="$ld_switch_run"; ld_switch_run="" echo "int main(int argc, char *argv[[]]) {return 0;}" > conftest.c xe_runpath_link='${CC-cc} -o conftest -v $CFLAGS '"$xe_ldflags"' conftest.$ac_ext 2>&1 1>/dev/null' for arg in `eval "$xe_runpath_link" | grep ' -L'`; do case "$arg" in P,* | -L* | -R* ) for dir in `echo '' "$arg" | sed -e 's:^ ::' -e 's/^..//' -e 'y/:/ /'`; do XE_ADD_RUNPATH_DIR("$dir") done ;; esac done ld_switch_run="$ld_switch_run_save" rm -f conftest* else dnl Add all directories with .so files to runpath for arg in $ld_switch_site $ld_switch_x_site; do case "$arg" in -L*) XE_ADD_RUNPATH_DIR(`echo '' "$arg" | sed -e 's:^ ::' -e 's/^-L//'`);; esac done dnl Sometimes /opt/SUNWdt/lib is the only installed Motif available dnl #### this test always fails here as need_motif is null if test "$opsys $need_motif" = "sol2 yes"; then xe_runpath_dir="/opt/SUNWdt/lib"; eval "$xe_add_unique_runpath_dir"; fi fi dnl Compute $runpath if test -n "$runpath"; then ld_switch_run="${dash_r}${runpath}" XE_PROTECT_LINKER_FLAGS(ld_switch_run) test "$extra_verbose" = "yes" && echo "Setting runpath to $runpath" fi fi ])dnl XE_COMPUTE_RUNPATH() dnl ----------------------------------- dnl Do some misc autoconf-special tests dnl ----------------------------------- dnl Do the opsystem or machine files prohibit the use of the GNU malloc? dnl Assume not, until told otherwise. GNU_MALLOC=yes if test "$with_dlmalloc" != "no"; then doug_lea_malloc=yes else doug_lea_malloc=no fi after_morecore_hook_exists=yes AC_CHECK_FUNC(malloc_set_state, ,doug_lea_malloc=no) AC_MSG_CHECKING(whether __after_morecore_hook exists) AC_TRY_LINK([extern void (* __after_morecore_hook)();],[__after_morecore_hook = 0], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) after_morecore_hook_exists=no]) if test "$system_malloc" = "yes" ; then GNU_MALLOC=no GNU_MALLOC_reason=" - The GNU allocators don't work with this system configuration." elif test "$with_system_malloc" = "yes" ; then GNU_MALLOC=no GNU_MALLOC_reason=" - User chose not to use GNU allocators." elif test "$with_debug_malloc" = "yes" ; then GNU_MALLOC=no GNU_MALLOC_reason=" - User chose to use Debugging Malloc." fi if test "$doug_lea_malloc" = "yes" -a "$GNU_MALLOC" = "yes" ; then GNU_MALLOC_reason=" - Using Doug Lea's new malloc from the GNU C Library." AC_DEFINE(DOUG_LEA_MALLOC) if test "$after_morecore_hook_exists" = "no" ; then GNU_MALLOC_reason=" - Using Doug Lea's new malloc from the Linux C Library." AC_DEFINE(_NO_MALLOC_WARNING_) fi fi dnl #### mcheck is broken in all versions of Linux libc and glibc. dnl Try this again when 2.1 hits the streets. dnl Avoid using free-hook.c if support exists for malloc debugging in libc dnl have_libmcheck=no dnl if test "$error_check_malloc" = "yes" -a \ dnl "$have_glibc" = "yes" -a \ dnl "$doug_lea_malloc" = "yes"; then dnl AC_CHECK_HEADERS(mcheck.h) dnl AC_CHECK_LIB(mcheck, mcheck, have_libmcheck=yes, have_libmcheck=no) dnl fi dnl if test "$have_libmcheck" = "yes"; then dnl AC_DEFINE(HAVE_LIBMCHECK) dnl libmcheck=-lmcheck dnl AC_SUBST(libmcheck) dnl fi dnl Some other nice autoconf tests. If you add a test here which dnl should make an entry in src/config.h, do not forget to add an dnl #undef clause to src/config.h.in for autoconf to modify. AC_PROG_RANLIB AC_PROG_INSTALL AC_PROG_YACC dnl checks for header files AC_CHECK_HEADERS(dnl a.out.h dnl elf.h dnl cygwin/version.h dnl fcntl.h dnl inttypes.h dnl libgen.h dnl locale.h dnl mach/mach.h dnl sys/param.h dnl sys/pstat.h dnl sys/time.h dnl sys/timeb.h dnl sys/un.h dnl ulimit.h dnl unistd.h dnl ) AC_HEADER_SYS_WAIT AC_HEADER_STDC AC_HEADER_TIME AC_DECL_SYS_SIGLIST dnl ---------------------------------------------------------------- dnl Checking for utime() or utimes(). dnl We prefer utime, since it is more standard. dnl Some systems have utime.h but do not declare the struct anyplace, dnl so we use a more sophisticated test for utime than AC_CHECK_FUNCS. dnl ---------------------------------------------------------------- AC_MSG_CHECKING(for utime) AC_TRY_COMPILE([#include #include ], [struct utimbuf x; x.actime = x.modtime = 0; utime ("/", &x);], [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_UTIME)], [AC_MSG_RESULT(no) dnl We don't have utime(); how about utimes()? AC_CHECK_FUNCS(utimes)]) dnl checks for typedefs AC_TYPE_SIGNAL AC_TYPE_SIZE_T AC_TYPE_PID_T AC_TYPE_UID_T AC_TYPE_MODE_T AC_TYPE_OFF_T AC_CHECK_TYPE(ssize_t, int) dnl check for Unix98 socklen_t AC_MSG_CHECKING(for socklen_t) AC_TRY_COMPILE([#include #include socklen_t x; ],[],[AC_MSG_RESULT(yes)],[ AC_TRY_COMPILE([#include #include int accept (int, struct sockaddr *, size_t *); ],[],[ AC_MSG_RESULT(size_t) AC_DEFINE(socklen_t,size_t)], [ AC_MSG_RESULT(int) AC_DEFINE(socklen_t,int)])]) AC_MSG_CHECKING(for struct timeval) AC_TRY_COMPILE([#ifdef TIME_WITH_SYS_TIME #include #include #else #ifdef HAVE_SYS_TIME_H #include #else #include #endif #endif], [static struct timeval x; x.tv_sec = x.tv_usec;], [AC_MSG_RESULT(yes) HAVE_TIMEVAL=yes AC_DEFINE(HAVE_TIMEVAL)], [AC_MSG_RESULT(no) HAVE_TIMEVAL=no]) dnl checks for structure members AC_STRUCT_TM AC_STRUCT_TIMEZONE dnl checks for compiler characteristics AC_C_CONST dnl check for Make feature AC_PROG_MAKE_SET dnl check byte order AC_C_BIGENDIAN dnl define SIZEOF_TYPE AC_CHECK_SIZEOF(short) if test "$ac_cv_sizeof_short" = 0; then echo "" echo "*** PANIC *** Configure tests are not working - compiler is broken." echo "*** PANIC *** Please examine config.log for compilation errors." exit 1 fi AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) AC_CHECK_SIZEOF(void *) dnl Cygwin from 1003022 has intptr_t, uintptr_t in case $opsys in cygwin* ) AC_EGREP_HEADER([typedef.*intptr_t;], [cygwin/types.h], [AC_MSG_RESULT(yes) AC_DEFINE(INTPTR_T_IN_CYGWIN_TYPES_H,1)], [AC_MSG_RESULT(no)]) ;; esac dnl check for long file names AC_SYS_LONG_FILE_NAMES dnl -lm is required by LISP_FLOAT_TYPE, among other things AC_CHECK_FUNC(sin, ,AC_CHECK_LIB(m, sin)) dnl Floating operation support is now unconditional AC_DEFINE(LISP_FLOAT_TYPE) AC_TRY_LINK([#include ], [return atanh(1.0) + asinh(1.0) + acosh(1.0); ], AC_DEFINE(HAVE_INVERSE_HYPERBOLIC)) dnl Determine type of mail locking from configure args and s&m headers AC_CHECKING(type of mail spool file locking) AC_CHECK_FUNCS(lockf flock) dnl The mail_use_xxx variables are set according to the s&m headers. test -z "$mail_locking" -a "$mail_use_flock" = "yes" && mail_locking=flock test -z "$mail_locking" -a "$mail_use_lockf" = "yes" && mail_locking=lockf test -z "$mail_locking" -a "$mail_use_locking" = "yes" && mail_locking=locking if test -z "$mail_locking"; then case "$opsys" in cygwin* | mingw*) mail_locking=pop ;; esac fi if test "$mail_locking" = "lockf"; then AC_DEFINE(MAIL_LOCK_LOCKF) elif test "$mail_locking" = "flock"; then AC_DEFINE(MAIL_LOCK_FLOCK) elif test "$mail_locking" = "locking"; then AC_DEFINE(MAIL_LOCK_LOCKING) elif test "$mail_locking" = "pop"; then with_pop=yes mail_locking= else mail_locking="dot-locking"; AC_DEFINE(MAIL_LOCK_DOT) fi test "$mail_locking" = "lockf" -a "$ac_cv_func_lockf" != "yes" && \ XE_DIE("lockf mail locking requested but not available.") test "$mail_locking" = "flock" -a "$ac_cv_func_flock" != "yes" && \ XE_DIE("flock mail locking requested but not available.") test "$mail_locking" = "locking" -a "$ac_cv_func_locking" != "yes" && \ XE_DIE("locking mail locking requested but not available.") case "$opsys" in decosf*) AC_CHECK_LIB(pthreads, cma_open) test "$ac_cv_lib_pthreads_cma_open" = "yes" && \ c_switch_site="$c_switch_site -threads" ;; esac dnl ---------------------------------------------------------------- dnl Miscellaneous flags dnl ---------------------------------------------------------------- AC_MSG_CHECKING(whether the -xildoff compiler flag is required) if ${CC-cc} '-###' -xildon no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ; then if ${CC-cc} '-###' -xildoff no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ; then AC_MSG_RESULT(no); else AC_MSG_RESULT(yes); XE_APPEND(-xildoff, ld_switch_site) fi else AC_MSG_RESULT(no) fi dnl Link with "-z ignore" on Solaris if supported if test "$opsys" = "sol2"; then if test "$os_release" -ge 506; then AC_MSG_CHECKING(for \"-z ignore\" linker flag) case "`ld -h 2>&1`" in *-z\ ignore\|record* ) AC_MSG_RESULT(yes) XE_PREPEND(-z ignore, ld_switch_site) ;; *) AC_MSG_RESULT(no) ;; esac fi fi dnl ---------------------- dnl Choose a window system dnl ---------------------- AC_CHECKING("for specified window system") dnl Autodetection of Gdk libraries and includes dnl ------------------------------------------- dnl On some systems (FreeBSD springs to mind), they use dnl versions on the utility routines, so instead of gtk-config dnl you must use gtk12-config, etc, etc. GNOME_CONFIG=no GTK_CONFIG=no if test "$with_gnome" != "no"; then AC_MSG_CHECKING(for GNOME configuration script) for possible in gnome-config do possible_version=`${possible} --version 2> /dev/null` if test "x${possible_version}" != "x"; then GNOME_CONFIG="${possible}" with_gnome=yes with_gtk=yes break fi done AC_MSG_RESULT([${GNOME_CONFIG}]) fi if test "${GNOME_CONFIG}" != "no"; then GNOME_LIBS=`${GNOME_CONFIG} --libs gnomeui` GNOME_CFLAGS=`${GNOME_CONFIG} --cflags gnomeui` AC_DEFINE(HAVE_GNOME) XE_APPEND(${GNOME_LIBS}, libs_gtk) XE_APPEND(${GNOME_CFLAGS}, c_switch_gtk) fi if test "$with_gtk" != "no";then AC_MSG_CHECKING(for GTK configuration script) for possible in gtk12-config gtk14-config gtk-config do possible_version=`${possible} --version 2> /dev/null` if test "x${possible_version}" != "x"; then GTK_CONFIG="${possible}" case "${possible_version}" in 1.0.*) AC_MSG_WARN([GTK 1.2 is required, please upgrade your version of GTK.]); with_gtk=no;; 1.3.*) AC_MSG_WARN([GTK 1.3 is not supported right now]); with_gtk=no;; 1.2.*) with_gtk=yes break ;; *) AC_MSG_WARN([Found unsupported version of GTK: $possible_version]);; esac fi done AC_MSG_RESULT([${GTK_CONFIG}]) fi if test "${GTK_CONFIG}" != "no"; then AC_MSG_CHECKING(gtk version) GTK_VERSION=`${GTK_CONFIG} --version` AC_MSG_RESULT(${GTK_VERSION}) AC_MSG_CHECKING(gtk libs) GTK_LIBS=`${GTK_CONFIG} --libs` XE_APPEND(${GTK_LIBS}, libs_gtk) AC_MSG_RESULT(${GTK_LIBS}) AC_MSG_CHECKING(gtk cflags) GTK_CFLAGS=`${GTK_CONFIG} --cflags` if test "$GCC" = "yes"; then GTK_CFLAGS="${GTK_CFLAGS} -Wno-shadow" fi XE_APPEND(${GTK_CFLAGS}, c_switch_gtk) AC_MSG_RESULT(${GTK_CFLAGS}) AC_CHECK_LIB(gdk_imlib, main, XE_PREPEND(-lgdk_imlib, libs_gtk)) AC_CHECK_LIB(Imlib, Imlib_init, XE_APPEND(-lImlib, libs_gtk)) AC_CHECK_FUNCS(gdk_imlib_init) AC_DEFINE(HAVE_XPM) AC_DEFINE(HAVE_GTK) AC_SUBST(GTK_CONFIG) window_system=gtk with_gtk=yes with_x11=no test "${with_scrollbars}" != "no" && with_scrollbars=gtk test "${with_toolbars}" != no && with_toolbars=gtk test "${with_menubars}" != "no" && with_menubars=gtk test "${with_dialogs}" != "no" && with_dialogs=gtk test "${with_widgets}" != "no" && with_widgets=gtk XE_ADD_OBJS(console-gtk.o device-gtk.o event-gtk.o frame-gtk.o) XE_ADD_OBJS(objects-gtk.o redisplay-gtk.o glyphs-gtk.o) XE_ADD_OBJS(select-gtk.o gccache-gtk.o) XE_ADD_OBJS(gtk-xemacs.o ui-gtk.o) dnl Check for libglade support (it rocks) OLD_CFLAGS="${CFLAGS}" OLD_CPPFLAGS="${CPPFLAGS}" OLD_LDFLAGS="${LDFLAGS}" CFLAGS="${GTK_CFLAGS} ${CFLAGS}" CPPFLAGS="${GTK_CFLAGS} ${CFLAGS}" LDFLAGS="${LDFLAGS} ${GTK_LIBS}" AC_CHECK_HEADERS(glade/glade.h glade.h) AC_CHECK_LIB(xml, main, XE_PREPEND(-lxml, libs_gtk)) AC_CHECK_LIB(glade, main, XE_PREPEND(-lglade, libs_gtk)) AC_CHECK_LIB(glade-gnome, main, XE_PREPEND(-lglade-gnome, libs_gtk)) AC_EGREP_HEADER([char \*txtdomain;], [glade/glade-xml.h], [AC_MSG_RESULT(yes) AC_DEFINE(LIBGLADE_XML_TXTDOMAIN,1)], [AC_MSG_RESULT(no)]) CFLAGS="${OLD_CFLAGS}" CPPFLAGS="${OLD_CPPFLAGS}" LDFLAGS="${OLD_LDFLAGS}" fi dnl We may eventually prefer gtk/gdk over vanilla X11... if test "$with_x11" != "no"; then dnl User-specified --x-includes or --x-libraries implies --with-x11. test "$x_includes $x_libraries" != "NONE NONE" && \ window_system=x11 with_x11=yes dnl Autodetection of X11 libraries and includes dnl ------------------------------------------- dnl AC_PATH_XTRA thinks it can find our X headers and includes, but dnl it often gets it wrong, so we only use it as a last resort. dnl $OPENWINHOME implies --x-includes and --x-libraries dnl Not (yet) handled by autoconf2 if test "$x_includes $x_libraries" = "NONE NONE" \ -a -n "$OPENWINHOME" \ -a "$OPENWINHOME" != "/usr/openwin" \ -a -d "$OPENWINHOME"; then test -d "$OPENWINHOME/lib" && x_libraries="$OPENWINHOME/lib" test -d "$OPENWINHOME/include" && x_includes="$OPENWINHOME/include" test -d "$OPENWINHOME/share/include" && x_includes="$OPENWINHOME/share/include" fi if test "$x_includes" = "NONE"; then dnl AC_PATH_XTRA often guesses /usr/include, when some other dnl include directory is a MUCH better guess (Linux, HP-UX 10.20). dnl This is a workaround for idiot (esp. HP) system vendors, who dnl provide a /usr/include/X11, but DON'T FULLY POPULATE IT. for dir in "/usr/X11" "/usr/X11R6"; do if test -d "$dir/include/X11"; then x_includes="$dir/include"; break; fi done fi if test "$x_libraries" = "NONE"; then for dir in "/usr/X11/lib" "/usr/X11R6/lib" "/usr/lib/X11R6"; do if test -r "$dir/libX11.a"; then x_libraries="$dir"; break; fi done fi AC_PATH_XTRA # Autoconf claims to find X library and include dirs for us. if test "$no_x" = "yes" then with_x11=no window_system=none HAVE_X_WINDOWS=no else with_x11=yes window_system=x11 HAVE_X_WINDOWS=yes fi fi dnl #### wmperry:: !x11 != NONE dnl case "$with_x11" in dnl yes ) window_system=x11 HAVE_X_WINDOWS=yes ;; dnl no ) window_system=none HAVE_X_WINDOWS=no ;; dnl esac if test "$with_x11" = "yes"; then AC_DEFINE(HAVE_X_WINDOWS) XE_APPEND(lwlib, MAKE_SUBDIR) XE_APPEND(lwlib, SRC_SUBDIR_DEPS) dnl Look for Motif, but only if not found in $x_includes and $x_libraries AC_CHECK_HEADER(Xm/Xm.h, [AC_CHECK_LIB(Xm, XmStringFree, got_motif=yes)]) if test "$got_motif" != "yes"; then dnl Try to find Motif/CDE/Tooltalk dirs dnl These take precedence over other X libs/includes, so PRE-pend for lib_dir in "/usr/dt/lib" "/usr/lib/Motif2.1" \ "/usr/lib/Motif1.2" "/usr/lib/Motif1.1"; do inc_dir=`echo $lib_dir | sed -e 's/lib/include/'` if test -d "$lib_dir" -a -d "$inc_dir"; then case "$x_libraries" in *"$lib_dir"* ) ;; *) x_libraries="$lib_dir $x_libraries" XE_PREPEND(-L${lib_dir}, X_LIBS) ;; esac case "$x_includes" in "$inc_dir"* ) ;; *) x_includes="$inc_dir $x_includes" XE_PREPEND(-I${inc_dir}, X_CFLAGS) ;; esac break; dnl only need ONE Motif implementation! fi done fi dnl Contrib X libs/includes do NOT take precedence, so AP-pend for rel in "X11R6" "X11R5" "X11R4"; do lib_dir="/usr/contrib/$rel/lib" inc_dir="/usr/contrib/$rel/include" if test -d "$lib_dir" -a -d "$inc_dir"; then case "$x_libraries" in *"$lib_dir"* ) ;; *) x_libraries="$x_libraries $lib_dir" XE_APPEND(-L${lib_dir}, X_LIBS) esac case "$x_includes" in "$inc_dir"* ) ;; *) x_includes="$x_includes $inc_dir" XE_APPEND(-I${inc_dir}, X_CFLAGS) esac break; dnl Only need ONE X11 implementation ! fi done dnl Avoid version mismatch for shared library libXm.so on osf4 case "$opsys" in decosf*) if test "$GCC" = yes -a -d /usr/shlib; then XE_APPEND(-L/usr/shlib, X_LIBS); fi ;; esac ld_switch_x_site="$X_LIBS" XE_COMPUTE_RUNPATH() if test "$extra_verbose" = "yes"; then echo; echo "X11 compilation variables:" PRINT_VAR(x_libraries x_includes X_CFLAGS X_LIBS X_PRE_LIBS X_EXTRA_LIBS) echo fi dnl Set up bitmaps search path. dnl The original suggestion was to unconditionally to append X11/bitmaps dnl to each element of $x_includes, I'm pretty sure this is the wrong dnl thing to do. We test for bitmaps and X11/bitmaps directories on each dnl element and add them to BITMAPDIR if they exist. bitmapdirs= if test "$x_includes" != NONE; then for i in $x_includes; do if test -d "$i/bitmaps"; then bitmapdirs="$i/bitmaps:$bitmapdirs" fi if test -d "$i/X11/bitmaps"; then bitmapdirs="$i/X11/bitmaps:$bitmapdirs" fi done bitmapdirs=`echo "$bitmapdirs" | sed s/.$//` fi test ! -z "$bitmapdirs" && AC_DEFINE_UNQUOTED(BITMAPDIR, "$bitmapdirs") dnl Autodetect defines extracted from X config by xmkmf, e.g. NARROWPROTO AC_CHECKING(for X defines extracted by xmkmf) rm -fr conftestdir if mkdir conftestdir; then cd conftestdir cat > Imakefile <<'EOF' xetest: @echo ${PROTO_DEFINES} ${STD_DEFINES} EOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. xmkmf_defines=`${MAKE-make} xetest 2>/dev/null | grep -v make` fi cd .. rm -fr conftestdir for word in $xmkmf_defines; do case "$word" in -D__STDC__*) ;; -D* ) sym=`echo '' $word | sed -e 's:^ *-D::' -e 's:=.*::'` case "$word" in -D*=* ) val=`echo '' $word | sed -e 's:^.*=::'` ;; * ) val=1 ;; esac dnl Avoid re-AC_DEFINE-ing xmkmf symbols we've already defined above. if grep "^#define $sym " confdefs.h >/dev/null; then :; else if test "$val" = "1" then AC_DEFINE_UNQUOTED($sym) else AC_DEFINE_UNQUOTED($sym,$val) fi fi ;; esac done fi dnl make sure we can find Intrinsic.h AC_CHECK_HEADER(X11/Intrinsic.h, , [AC_MSG_ERROR("Unable to find X11 header files.")]) dnl -lXt and -lX11 are required dnl Some broken systems require the magic "-b i486-linuxaout" flag AC_CHECK_LIB(X11, XOpenDisplay, have_lib_x11=yes) if test "$have_lib_x11" != "yes"; then AC_CHECK_LIB(X11, XGetFontProperty, ld_switch_x_site="-b i486-linuxaout $ld_switch_x_site", [AC_MSG_ERROR("Unable to find X11 libraries.")], -b i486-linuxaout) fi libs_x="-lX11" test "$extra_verbose" = "yes" && echo " Setting libs_x to \"-lX11\"" dnl Autodetect -lXext AC_CHECK_LIB(Xext, XShapeSelectInput, XE_PREPEND(-lXext, libs_x)) dnl Require -lXt AC_CHECK_LIB(Xt, XtOpenDisplay, XE_PREPEND(-lXt, libs_x), AC_MSG_ERROR("Unable to find X11 libraries.")) AC_MSG_CHECKING(the version of X11 being used) AC_TRY_RUN([#include int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; }], [./conftest foobar; x11_release=$?],[x11_release=4],[x11_release=4]) AC_MSG_RESULT(R${x11_release}) AC_DEFINE_UNQUOTED(THIS_IS_X11R${x11_release}) if test "${x11_release}" = "4"; then case "$with_widgets" in "" | "no") with_widgets=no ;; *) XE_DIE("Widget support requires X11R5 or greater") ;; esac fi AC_CHECK_FUNCS(XConvertCase XtRegisterDrawable) AC_CHECK_HEADERS(X11/Xlocale.h) dnl XFree86 has a non-standard prototype for this X11R6 function AC_CHECK_FUNCS(XRegisterIMInstantiateCallback) AC_MSG_CHECKING(for standard XRegisterIMInstantiateCallback prototype) AC_TRY_COMPILE([ #define NeedFunctionPrototypes 1 #include extern Bool XRegisterIMInstantiateCallback( Display*, struct _XrmHashBucketRec*, char*, char*, XIMProc, XPointer*); ], [], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) AC_DEFINE(XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE)]) dnl autodetect -lXmu test -z "$with_xmu" && { AC_CHECK_LIB(Xmu, XmuReadBitmapDataFromFile, with_xmu=yes, with_xmu=no) } if test "$with_xmu" = "no"; then XE_ADD_OBJS(xmu.o) else XE_PREPEND(-lXmu, libs_x) AC_DEFINE(HAVE_XMU) fi dnl Autodetect -lXbsd dnl #### Someone, please add a better function than main AC_CHECK_LIB(Xbsd, main, XE_PREPEND(-lXbsd, libs_x)) dnl Problem with the MIT distribution of X on AIX if test "$unexec" = "unexaix.o" -a "$x11_release" = "6"; then dnl X11R6 requires thread-safe code on AIX for some reason if test "$GCC" = "yes"; then dnl gcc changed the name of the `-mthreads' option to `-pthread' dnl on 2000-06-12 AC_MSG_CHECKING(for name of AIX gcc threads option) case `$CC -v --help 2>&1` in *-mthreads*) aix_threads=-mthreads ;; *) aix_threads=-pthread ;; esac AC_MSG_RESULT($aix_threads) XE_PREPEND($aix_threads, X_CFLAGS) XE_PREPEND($aix_threads, libs_x) else dnl Try to use the thread-safe "_r" versions of xlc case "$CC" in *_r) : ;; *) xe_save_CC="$CC" CC="${CC}_r" AC_CHECK_SIZEOF(short) test "$ac_cv_sizeof_short" = 0 && CC="$xe_save_CC" ;; esac fi fi fi dnl $with_x11 = yes if test "$with_msw" != "no"; then AC_CHECKING(for MS-Windows) AC_CHECK_LIB(gdi32,main,with_msw=yes) if test "$with_msw" = "yes"; then AC_DEFINE(HAVE_MS_WINDOWS) dnl The net installer only works with MS-Windows currently if test "$with_netinstall" = "yes"; then XE_APPEND(netinstall, MAKE_SUBDIR) XE_APPEND(netinstall, SRC_SUBDIR_DEPS) XE_APPEND(netinstall, INSTALL_ARCH_DEP_SUBDIR) fi install_pp="$srcdir/lib-src/installexe.sh" XE_APPEND(-lshell32 -lgdi32 -luser32 -lcomdlg32 -lcomctl32 -lkernel32 -lwinspool, libs_system) test "$with_dragndrop" != no && XE_APPEND(msw, dragndrop_proto) if test "$window_system" != x11; then window_system=msw test "$with_scrollbars" != "no" && with_scrollbars=msw \ && XE_ADD_OBJS(scrollbar-msw.o) test "$with_menubars" != "no" && with_menubars=msw \ && XE_ADD_OBJS(menubar-msw.o) test "$with_toolbars" != "no" && with_toolbars=msw \ && XE_ADD_OBJS(toolbar-msw.o) test "$with_dialogs" != "no" && with_dialogs=msw \ && XE_ADD_OBJS(dialog-msw.o) test "$with_widgets" != "no" && with_widgets=msw else test "$with_scrollbars" != "no" && XE_ADD_OBJS(scrollbar-msw.o) test "$with_menubars" != "no" && XE_ADD_OBJS(menubar-msw.o) test "$with_toolbars" != "no" && XE_ADD_OBJS(toolbar-msw.o) test "$with_dialogs" != "no" && XE_ADD_OBJS(dialog-msw.o) fi dnl check for our special version of select AC_TRY_RUN([#include int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }], [need_event_unixoid=yes; AC_DEFINE(HAVE_MSG_SELECT)]) with_file_coding=yes XE_ADD_OBJS(console-msw.o device-msw.o event-msw.o frame-msw.o objects-msw.o select-msw.o redisplay-msw.o glyphs-msw.o gui-msw.o) fi fi AC_SUBST(install_pp) test -z "$window_system" && window_system="none" dnl Test for features that require a window system - ANY window system if test "$window_system" = "none"; then for feature in menubars scrollbars toolbars dialogs dragndrop xface do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then AC_MSG_WARN([--with-$feature ignored: Not valid without window system support]) fi eval "with_${feature}=no" done else test -z "$with_toolbars" && with_toolbars=yes fi dnl ### Test for features that require mswindows support - currently none dnl ### MS-Windows folks: add code here..... (martin) if test "$with_msw" != "yes"; then for feature in MARTIN_IS_CLUELESS_ABOUT_MSW_FEATURES do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then AC_MSG_WARN([--with-$feature ignored: Not valid without MS-Windows support]) fi eval "with_${feature}=no" done else : fi dnl Test for features that require X11 support if test "$with_x11" != "yes"; then dnl It ought to be reasonable to have no output device at all, and only use dnl XEmacs in --batch mode. dnl if test "$with_tty" = "no" ; then dnl AC_MSG_ERROR([No window system support and no TTY support - Unable to proceed.]) dnl fi for feature in tooltalk cde offix wmcommand xim xmu nas_sound do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then AC_MSG_WARN([--with-$feature ignored: Not valid without X support]) fi eval "with_${feature}=no" done fi dnl Balloon Help requires the Shape extension, not available everywhere, dnl for example not on AIX 4.3. if test "$with_x11" = "yes"; then AC_CHECK_HEADER(X11/extensions/shape.h, [ AC_DEFINE(HAVE_BALLOON_HELP) XE_ADD_OBJS(balloon_help.o balloon-x.o)]) fi dnl FSF 19.29 has some bitmapdir stuff here. bitmapdir= case "$window_system" in x11 ) HAVE_X_WINDOWS=yes; echo " Using X11." ;; msw ) HAVE_X_WINDOWS=no ; echo " Using MS-Windows." ;; gtk ) HAVE_X_WINDOWS=no test "$with_gnome" = "yes" && echo " Using GNOME." test "$with_gnome" = "no" && echo " Using GTK." ;; none ) HAVE_X_WINDOWS=no ; echo " Using no window system." ;; esac case "$x_libraries" in *X11R4* ) test "$opsys" = "hpux9" && opsysfile="s/hpux9-x11r4.h" test "$opsys" = "hpux9-shr" && opsysfile="s/hpux9shxr4.h" esac dnl Enable or disable proper handling of WM_COMMAND AC_CHECKING(for WM_COMMAND option); dnl if test "$with_wmcommand" = "yes"; then if test "$with_wmcommand" != "no"; then AC_DEFINE(HAVE_WMCOMMAND) fi dnl Autodetect Xauth dnl -lXau is only used by gnuclient, so use a special variable for Xauth X libs test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no test -z "$with_xauth" && { AC_CHECK_HEADER(X11/Xauth.h, ,with_xauth=no) } test -z "$with_xauth" && { AC_CHECK_LIB(Xau, XauGetAuthByAddr,[:],with_xauth=no) } test -z "$with_xauth" && with_xauth=yes if test "$with_xauth" = "yes"; then AC_DEFINE(HAVE_XAUTH) XE_SPACE(libs_xauth, $GTK_LIBS $X_EXTRA_LIBS -lXau $libs_x $X_PRE_LIBS) fi AC_SUBST(libs_xauth) dnl This one is for the static initializeds variables in dnl offix.c, so that the thing is dumped after lastfile.o AC_SUBST(dnd_objs) dnl Autodetect tooltalk if test "$with_tooltalk" != "no" ; then dnl autodetect the location of tt_c.h dnl tt_c.h might be in Tt or desktop include directories for dir in "" "Tt/" "desktop/" ; do AC_CHECK_HEADER(${dir}tt_c.h, tt_c_h_file="${dir}tt_c.h"; break) done if test -z "$tt_c_h_file"; then if test "$with_tooltalk" = "yes"; then USAGE_ERROR("Unable to find required tooltalk header files.") fi with_tooltalk=no fi fi if test "$with_tooltalk" != "no" ; then for extra_libs in "" "-lI18N -lce" "-lcxx"; do AC_CHECK_LIB(tt, tt_message_create, tt_libs="-ltt $extra_libs"; break, [:],$extra_libs) done if test -z "$tt_libs"; then if test "$with_tooltalk" = "yes"; then USAGE_ERROR("Unable to find required tooltalk libraries.") fi with_tooltalk=no fi fi test -z "$with_tooltalk" && with_tooltalk=yes if test "$with_tooltalk" = "yes"; then AC_DEFINE(TOOLTALK) AC_DEFINE_UNQUOTED(TT_C_H_FILE, "$tt_c_h_file") XE_PREPEND($tt_libs, libs_x) XE_ADD_OBJS(tooltalk.o) fi dnl Autodetect CDE test -z "$with_cde" && { AC_CHECK_HEADER(Dt/Dt.h, , with_cde=no) } test -z "$with_cde" && { AC_CHECK_LIB(DtSvc, DtDndDragStart, [:], with_cde=no) } test -z "$with_cde" && with_cde=yes if test "$with_dragndrop" = no; then AC_MSG_WARN([No CDE without generic Drag'n'Drop support]) with_cde=no fi if test "$with_cde" = "yes" ; then AC_DEFINE(HAVE_CDE) XE_PREPEND(-lDtSvc, libs_x) XE_APPEND(CDE, dragndrop_proto) with_tooltalk=yes # CDE requires Tooltalk need_motif=yes # CDE requires Motif fi dnl Always compile OffiX unless --without-offix is given, no dnl X11 support is compiled in, no standard Xmu is available, dnl or dragndrop support is disabled dnl Because OffiX support currently loses when more than one display dnl is in use, we now disable it by default -slb 07/10/1998. test "$window_system" != "x11" && with_offix=no if test "$with_xmu" != yes -a "$with_x11" = yes; then AC_MSG_WARN([No OffiX without real Xmu support]) with_offix=no fi if test "$with_dragndrop" = no; then AC_MSG_WARN([No OffiX without generic Drag'n'Drop support]) with_offix=no fi if test "$with_cde" = yes; then AC_MSG_WARN([CDE already found, disabling OffiX support]) with_offix=no fi test -z "$with_offix" && with_offix=no if test "$with_offix" = "yes"; then AC_DEFINE(HAVE_OFFIX_DND) XE_APPEND(offix.o, dnd_objs) XE_APPEND(OffiX, dragndrop_proto) fi if test "$with_gtk" = "yes"; then XE_APPEND(GTK, dragndrop_proto) fi dnl Autodetect Drag'n'Drop support dnl always included if CDE, Offix, or MSWindows are defined if test "$with_dragndrop" != "no" ; then AC_MSG_CHECKING(if drag and drop API is needed) if test -n "$dragndrop_proto" ; then with_dragndrop=yes AC_MSG_RESULT([yes (${dragndrop_proto} )]) AC_DEFINE(HAVE_DRAGNDROP) XE_APPEND(dragdrop.o, extra_objs) else with_dragndrop=no AC_MSG_RESULT(no) fi fi dnl Autodetect LDAP AC_CHECKING(for LDAP) test -z "$with_ldap" && { AC_CHECK_HEADER(ldap.h, ,with_ldap=no) } test -z "$with_ldap" && { AC_CHECK_HEADER(lber.h, ,with_ldap=no) } if test no != "$with_ldap";then if test . != "${ldap_libs+.}";then ldap_libs= AC_CHECK_FUNC(ldap_open,dnl Allow it to be in generic "$LIBS" [with_ldap=yes test yes = "$extra_verbose" && echo "Setting ldap_libs to $ldap_libs"],dnl [AC_CHECK_LIB(ldap, ldap_open,dnl [with_ldap=yes],dnl dnl If logic of setting these vars change, change it the same way below. [ldap_needs_lber=yes ldap_other_libs=-llber dnl This requires `AC_CACHE_VAL' (which is called by `AC_CHECK_LIB') dnl to be redefined to ignore cached (shell variable) value, as it is dnl done above, because the same variable is used in all dnl `AC_CHECK_LIB' expansions in macro invocation below. Worse, if it dnl is not done, there is no portable way to compensate for this dnl locally since `unset' command is not supported by all shells. The dnl other solution would be changing `AC_CHECK_LIB' so that cache dnl variable name depends on the macro OTHER-LIBRARIES argument. AC_CHECK_LIB(ldap, ldap_open,dnl [with_ldap=yes],dnl [ldap_needs_krb=yes ldap_other_libs="$ldap_other_libs -lkrb" AC_CHECK_LIB(ldap, ldap_open,dnl [with_ldap=yes],dnl [ldap_needs_des=yes ldap_other_libs="$ldap_other_libs -ldes" AC_CHECK_LIB(ldap, ldap_open,dnl [with_ldap=yes],dnl [with_ldap=no],dnl $ldap_other_libs)],dnl $ldap_other_libs)],dnl $ldap_other_libs)]) if test yes = "$with_ldap" -a yes != "$ldap_needs_lber";then dnl Need this check since `LDAP_OPT_ON' is (currently) used only with dnl `ldap_set_option', and the latter may not exist at all, for which dnl is testing later. So `LDAP_OPT_ON' is not necessarily defined. AC_CACHE_CHECK([for LDAP_OPT_ON definition],xe_cv_have_LDAP_OPT_ON, [AC_TRY_COMPILE( [#include #include #ifdef LDAP_OPT_ON /* Relying on const defined by ac_c_const (upper case). */ const void *const v = LDAP_OPT_ON; #else /* !defined (LDAP_OPT_ON) */ choke me #endif /* !defined (LDAP_OPT_ON) */],[], [xe_cv_have_LDAP_OPT_ON=yes], [xe_cv_have_LDAP_OPT_ON=no])]) if test yes = "$xe_cv_have_LDAP_OPT_ON";then AC_CACHE_CHECK([LDAP_OPT_ON linking], xe_cv_LDAP_OPT_ON_links, [xe_save_LIBS="$LIBS" LIBS="-lldap $LIBS" AC_TRY_LINK( [#include #include const void *const v = LDAP_OPT_ON;],[], xe_cv_LDAP_OPT_ON_links=yes, xe_cv_LDAP_OPT_ON_links=no) LIBS="$xe_save_LIBS"]) dnl In some openldap installations other `ldap_*' functions link with dnl `-lldap' alone, but `LDAP_OPT_ON' requires `-llber'. if test yes != "$xe_cv_LDAP_OPT_ON_links";then ldap_needs_lber=yes ldap_other_libs=-llber AC_CACHE_CHECK([LDAP_OPT_ON linking with -llber], xe_cv_LDAP_OPT_ON_links_w_lber, [xe_save_LIBS="$LIBS" LIBS="-lldap $ldap_other_libs $LIBS" AC_TRY_LINK( [#include #include const void *const v = LDAP_OPT_ON;],[], xe_cv_LDAP_OPT_ON_links_w_lber=yes, xe_cv_LDAP_OPT_ON_links_w_lber=no) LIBS="$xe_save_LIBS"]) if test yes != "$xe_cv_LDAP_OPT_ON_links_w_lber";then with_ldap=no fi fi fi fi if test yes = "$with_ldap";then if test yes = "$ldap_needs_des";then XE_PREPEND(-ldes, ldap_libs) fi if test yes = "$ldap_needs_krb";then XE_PREPEND(-lkrb, ldap_libs) fi if test yes = "$ldap_needs_lber";then XE_PREPEND(-llber, ldap_libs) fi XE_PREPEND(-lldap, ldap_libs) fi]) else dnl Allow builder to override "$ldap_libs". save_LIBS="$LIBS" LIBS="$ldap_libs $LIBS" AC_CHECK_FUNC(ldap_open,dnl [with_ldap=yes test yes = "$extra_verbose" && echo "Setting ldap_libs to $ldap_libs"],dnl [with_ldap=no]) LIBS="$save_LIBS" fi fi if test "$with_ldap" = "yes"; then AC_DEFINE(HAVE_LDAP) XE_ADD_OBJS(eldap.o) LIBS="$ldap_libs $LIBS" AC_CHECK_FUNCS(ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result) fi dnl Autodetect PostgreSQL dnl On many Linux systems, PostgreSQL is packaged to be installed in /usr; dnl in this case, configure will easily detect it there. dnl dnl If PostgreSQL is installed into a different prefix, dnl (such as the default /usr/local/pgsql when building from source), dnl that prefix must be specified using the --site-prefixes flag. if test "$with_postgresql" != "no"; then AC_CHECKING(for PostgreSQL) dnl Look for these standard header file locations, known to be used on Linux for header_dir in "" "pgsql/" "postgresql/"; do AC_CHECK_HEADER(${header_dir}libpq-fe.h, libpq_fe_h_file=${header_dir}libpq-fe.h; break) done test -n "$libpq_fe_h_file" && { AC_CHECK_LIB(pq,PQconnectdb,have_libpq=yes) } if test -n "$libpq_fe_h_file" -a "$have_libpq" = "yes"; then with_postgresql=yes AC_DEFINE(HAVE_POSTGRESQL) AC_CHECK_LIB(pq,PQconnectStart, [ with_postgresqlv7=yes; AC_DEFINE(HAVE_POSTGRESQLV7)]) AC_DEFINE_UNQUOTED(LIBPQ_FE_H_FILE, "$libpq_fe_h_file") XE_PREPEND(-lpq, LIBS) XE_ADD_OBJS(postgresql.o) elif test "$with_postgresql" = "yes"; then XE_DIE("Required PostgreSQL support cannot be provided. Check --site-prefixes.") fi fi dnl ---------------------- dnl Graphics libraries dnl ---------------------- if test "$window_system" != "none"; then AC_CHECKING(for graphics libraries) dnl add special code to handle xpm-nox on Cygwin (csw) dnl -- should only happen if CYGWIN && WITH_XPM && WITH_MSW && !WITH_X libpath_xpm= incpath_xpm= libname_xpm="-lXpm" case "$opsys" in cygwin*) cygwin_top=`eval gcc -print-search-dirs | sed -ne s'/install: //p'` cygwin_top=`eval "cd $cygwin_top/../../../..; pwd"` case "$window_system" in dnl use "standard" search pattern x11) ;; dnl hardcode "standard" non-X11 xpm lib/inc dirs msw) libpath_xpm="-L${cygwin_top}/lib/noX" incpath_xpm="-I${cygwin_top}/include/noX" libname_xpm="-lXpm-noX" ;; dnl not supported on cygwin (yet?) gtk) ;; dnl probably not reached... none) ;; dnl ditto *) ;; esac ;; dnl use "standard" search pattern for all other OS's *) ;; esac dnl Autodetect Xpm xpm_problem="" if test -z "$with_xpm"; then XE_PREPEND("$incpath_xpm", CFLAGS) XE_PREPEND("$libpath_xpm", LDFLAGS) AC_MSG_CHECKING(for Xpm - no older than 3.4f) xe_check_libs="$libname_xpm" AC_TRY_RUN([#define XPM_NUMBERS #include int main(int c, char **v) { return c == 1 ? 0 : XpmIncludeVersion != XpmLibraryVersion() ? 1 : XpmIncludeVersion < 30406 ? 2 : 0 ;}], [./conftest dummy_arg; xpm_status=$?; if test "$xpm_status" = "0"; then with_xpm=yes; else with_xpm=no; if test "$xpm_status" = "1"; then xpm_problem="Xpm library version and header file version don't match!" elif test "$xpm_status" = "2"; then xpm_problem="Xpm library version is too old!" else xpm_problem="Internal xpm detection logic error!" fi echo " *** WARNING *** $xpm_problem I'm not touching that with a 10-foot pole! If you really want to use the installed version of Xpm, rerun configure and add '--with-xpm=yes', but don't blame me if XEmacs crashes!" fi], [with_xpm=no]) xe_check_libs= AC_MSG_RESULT($with_xpm) fi if test "$with_xpm" = "yes"; then dnl #### This code assumes that if AC_CHECK_LIB fails, dnl #### then it will succeed if FOR_MSW is defined, dnl #### but doesn't actually verify this assumption. AC_DEFINE(HAVE_XPM) XE_PREPEND("$libpath_xpm", LDFLAGS) XE_PREPEND("$libname_xpm", libs_x) XE_PREPEND("$incpath_xpm", CFLAGS) AC_MSG_CHECKING(for \"FOR_MSW\" xpm) xe_check_libs="$libname_xpm" AC_TRY_LINK(, [XpmCreatePixmapFromData()], [xpm_for_msw=no], [xpm_for_msw=yes]) xe_check_libs= AC_MSG_RESULT($xpm_for_msw) if test "$xpm_for_msw" = "yes"; then AC_DEFINE(FOR_MSW) fi fi dnl Autodetect XFACE test -z "$with_xface" && { AC_CHECK_HEADER(compface.h, ,with_xface=no) } test -z "$with_xface" && { AC_CHECK_LIB(compface, UnGenFace,[:] ,with_xface=no) } test -z "$with_xface" && with_xface=yes if test "$with_xface" = "yes"; then AC_DEFINE(HAVE_XFACE) XE_PREPEND(-lcompface, libs_x) fi dnl For a brief period we had the GIF code split out into a separate library, dnl but patent problems, etc. sort of squashed that idea. dnl We default to building with builtin GIF decoding if test "$with_gif" != "no"; then with_gif="yes" AC_DEFINE(HAVE_GIF) XE_ADD_OBJS(dgif_lib.o gif_io.o) fi dnl Too many stupid linkers can't detect cascaded lib dependencies until runtime dnl So we always search for libz compression support. if test "$with_png $with_tiff" != "no no"; then AC_CHECK_LIB(c, inflate, [:], [ AC_CHECK_LIB(z, inflate, [XE_PREPEND(-lz, libs_x)],[ AC_CHECK_LIB(gz, inflate, [XE_PREPEND(-lgz, libs_x)])])]) fi dnl autodetect JPEG test -z "$with_jpeg" && { AC_CHECK_HEADER(jpeglib.h, ,with_jpeg=no) } test -z "$with_jpeg" && { AC_CHECK_LIB(jpeg, jpeg_destroy_decompress,[:],with_jpeg=no) } test -z "$with_jpeg" && with_jpeg=yes if test "$with_jpeg" = "yes"; then AC_DEFINE(HAVE_JPEG) XE_PREPEND(-ljpeg, libs_x) fi dnl autodetect PNG png_problem="" test -z "$with_png" && { AC_CHECK_FUNC(pow, ,with_png=no) } test -z "$with_png" && { AC_CHECK_HEADER(png.h, ,with_png=no) } test -z "$with_png" && { AC_CHECK_LIB(png, png_read_image,[:],with_png=no) } if test -z "$with_png"; then AC_MSG_CHECKING(for workable png version information) xe_check_libs="-lpng -lz" AC_TRY_RUN([#include int main(int c, char **v) { if (c == 1) return 0; if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0) return 1; return (PNG_LIBPNG_VER < 10002) ? 2 : 0 ;}], [./conftest dummy_arg; png_status=$?; if test "$png_status" = "0"; then with_png=yes; else with_png=no; if test "$png_status" = "1"; then png_problem="PNG library version and header file don't match!" elif test "$png_status" = "2"; then png_problem="PNG library version too old (pre 1.0.2)!" fi echo " *** WARNING *** $png_problem I'm not touching that with a 10-foot pole! If you really want to use the installed version of libPNG, rerun configure and add '--with-png=yes', but don't blame me if XEmacs crashes!" fi], [with_png=no]) xe_check_libs= AC_MSG_RESULT($with_png) fi if test "$with_png" = "yes"; then AC_DEFINE(HAVE_PNG) XE_PREPEND(-lpng, libs_x) fi dnl autodetect TIFF test -z "$with_tiff" && { AC_CHECK_HEADER(tiffio.h, ,with_tiff=no) } test -z "$with_tiff" && { AC_CHECK_LIB(tiff, TIFFClientOpen,[:],with_tiff=no) } test -z "$with_tiff" && with_tiff=yes if test "$with_tiff" = "yes"; then AC_DEFINE(HAVE_TIFF) XE_PREPEND(-ltiff, libs_x) fi fi dnl ---------------------- dnl GTK-Specific Graphics libraries dnl ---------------------- if test "$with_gtk" = "yes"; then dnl Autodetect XFACE test -z "$with_xface" && { AC_CHECK_HEADER(compface.h, ,with_xface=no) } test -z "$with_xface" && { AC_CHECK_LIB(compface, UnGenFace,[:] ,with_xface=no) } test -z "$with_xface" && with_xface=yes if test "$with_xface" = "yes"; then AC_DEFINE(HAVE_XFACE) XE_PREPEND(-lcompface, libs_gtk) fi fi dnl ---------------------- dnl X-Specific Graphics libraries dnl ---------------------- if test "$with_x11" = "yes"; then AC_CHECKING(for X11 graphics libraries) fi if test "$with_x11" = "yes"; then AC_CHECKING(for the Athena widgets) dnl What in heck did the user actually want? case "$with_athena" in dnl This is the default, old fashioned flat Athena. "xaw" | "") athena_variant=Xaw athena_3d=no ;; "3d") athena_variant=Xaw3d athena_3d=yes ;; "next") athena_variant=neXtaw athena_3d=yes ;; "95") athena_variant=Xaw95 athena_3d=yes ;; "xpm") athena_variant=XawXpm athena_3d=yes ;; *) XE_DIE("Unknown Athena widget set \`$with_athena'. This should not happen.") ;; esac athena_3d_function=Xaw3dComputeBottomShadowRGB dnl Search for the Athena library... if test "$athena_3d" = "no"; then AC_CHECK_LIB($athena_variant, XawScrollbarSetThumb, [ dnl Must not be a 3d library... AC_CHECK_LIB($athena_variant, $athena_3d_function, AC_MSG_WARN("Could not find a non-3d Athena widget library."), athena_lib=$athena_variant) ], AC_MSG_WARN("Could not find an Athena widget library.")) else dnl The real configuration, need 3d library AC_CHECK_LIB($athena_variant, $athena_3d_function, athena_lib=$athena_variant, dnl OK, couldn't find it with a proper name, try the standard Athena lib dnl If that is 3d, presume the user asked for what they have installed. AC_CHECK_LIB(Xaw, $athena_3d_function, [ athena_lib=Xaw; AC_MSG_WARN("Assuming that libXaw is actually $athena_variant."); ], AC_MSG_WARN("Could not find a 3d Athena widget library that looked like $athena_variant."))) fi dnl Now we locate the Athena headers that we need. if test "$athena_3d" = "no"; then AC_CHECK_HEADER(X11/Xaw/ThreeD.h, AC_MSG_WARN("Could not find a non-3d Athena header set."), AC_CHECK_HEADER(X11/Xaw/XawInit.h, athena_h_path=X11/Xaw, AC_MSG_WARN("Could not find a non-3d Athena header set."))) else dnl The three-d Athena headers are so much more slippery. dnl Curse this `Lets replace standard libraries' thing that they did. :/ AC_CHECK_HEADER(X11/$athena_variant/XawInit.h, AC_CHECK_HEADER(X11/$athena_variant/ThreeD.h, athena_h_path=X11/$athena_variant,)) dnl Is the variant specific header directory directly under include? if test -z "$athena_h_path"; then AC_CHECK_HEADER($athena_variant/XawInit.h, AC_CHECK_HEADER($athena_variant/ThreeD.h, athena_h_path=$athena_variant,)) fi dnl If we couldn't find the specific variant, try the generic Athena 3d headers if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then AC_CHECK_HEADER(X11/Xaw3d/XawInit.h, AC_CHECK_HEADER(X11/Xaw3d/ThreeD.h, [ AC_MSG_WARN("Assuming that X11/Xaw3d headers are suitable for $athena_variant.") athena_h_path=X11/Xaw3d ],)) fi dnl Also generic 3d headers directly under include dir if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then AC_CHECK_HEADER(Xaw3d/XawInit.h, AC_CHECK_HEADER(Xaw3d/ThreeD.h, [ AC_MSG_WARN("Assuming that Xaw3d headers are suitable for $athena_variant.") athena_h_path=Xaw3d ],)) fi dnl If nothing yet found, see if Xaw is a 3d header set... dnl We AC_MSG_WARN if we fail because I am all out of ideas... if test -z "$athena_h_path"; then AC_CHECK_HEADER(X11/Xaw/ThreeD.h, [ AC_MSG_WARN("Assuming that X11/Xaw headers are suitable for $athena_variant.") athena_h_path=X11/Xaw ], AC_MSG_WARN("Could not find a suitable 3d Athena header set.")) fi fi dnl Do we actually have a usable Athena widget set? Please? if test -n "$athena_lib" -a -n "$athena_h_path"; then have_xaw=yes else have_xaw=no fi else have_xaw=no fi dnl "$with_x11" = "yes" if test "$with_x11" = "yes"; then dnl autodetect Motif - but only add to libs_x later (if necessary) AC_CHECK_HEADER(Xm/Xm.h, [AC_CHECK_LIB(Xm, XmStringFree, have_motif=yes, have_motif=no)], have_motif=no) if test "$have_motif" = "yes"; then dnl autodetect lesstif AC_MSG_CHECKING(for Lesstif) AC_EGREP_CPP(yes, [#include #ifdef LESSTIF_VERSION yes #endif ], have_lesstif=yes, have_lesstif=no) AC_MSG_RESULT($have_lesstif) fi fi dnl "$with_x11" = "yes" dnl Finish ensuring that we have values for the various toolkit items. dnl Not all toolkits support all widgets dnl Avoid using Motif :-( case "$opsys" in *linux* | cygwin* ) lucid_prefers_motif="no" ;; * ) lucid_prefers_motif="yes" ;; esac case "$with_menubars" in "" | "yes" | "athena" ) with_menubars="lucid" ;; esac case "$with_dialogs" in "" | "yes" | "lucid" ) if test "$lucid_prefers_motif" = "yes"; then if test "$have_motif" = "yes"; then with_dialogs="motif" elif test "$have_xaw" = "yes"; then with_dialogs="athena" else with_dialogs=no fi else if test "$have_xaw" = "yes"; then with_dialogs="athena" elif test "$have_motif" = "yes"; then with_dialogs="motif" else with_dialogs=no fi fi ;; esac case "$with_scrollbars" in "" | "yes" ) with_scrollbars="lucid" ;; esac case "$with_widgets" in "yes" | "lucid") if test "$lucid_prefers_motif" = "yes"; then if test "$have_motif" = "yes"; then with_widgets="motif" elif test "$have_xaw" = "yes"; then with_widgets="athena" else with_widgets=no fi else if test "$have_xaw" = "yes"; then with_widgets="athena" elif test "$have_motif" = "yes"; then with_widgets="motif" else with_widgets=no fi fi ;; "" ) with_widgets=no ;; esac all_widgets="$with_menubars $with_scrollbars $with_dialogs $with_toolbars $with_widgets" case "$all_widgets" in *athena* ) if test "$have_xaw" != "yes"; then XE_DIE("Could not find a suitable Athena library to build with.") fi dnl Add the Lucid widget Athena code XE_APPEND(lwlib-Xaw.o, lwlib_objs) dnl Add the Athena widget library we located earlier XE_PREPEND(-l$athena_lib, libs_x) dnl Tell lwlib where to find the Athena header files. dnl Many people have tried to create a `smart' way of doing this, dnl but all have failed. Before changing the following ugly definitions, dnl consult the veterans of many a battle. AC_DEFINE_UNQUOTED(ATHENA_Scrollbar_h_,"$athena_h_path/Scrollbar.h") AC_DEFINE_UNQUOTED(ATHENA_Dialog_h_,"$athena_h_path/Dialog.h") AC_DEFINE_UNQUOTED(ATHENA_Form_h_,"$athena_h_path/Form.h") AC_DEFINE_UNQUOTED(ATHENA_Command_h_,"$athena_h_path/Command.h") AC_DEFINE_UNQUOTED(ATHENA_Label_h_,"$athena_h_path/Label.h") AC_DEFINE_UNQUOTED(ATHENA_LabelP_h_,"$athena_h_path/LabelP.h") AC_DEFINE_UNQUOTED(ATHENA_Toggle_h_,"$athena_h_path/Toggle.h") AC_DEFINE_UNQUOTED(ATHENA_ToggleP_h_,"$athena_h_path/ToggleP.h") AC_DEFINE_UNQUOTED(ATHENA_AsciiText_h_,"$athena_h_path/AsciiText.h") AC_DEFINE_UNQUOTED(ATHENA_XawInit_h_,"$athena_h_path/XawInit.h") AC_DEFINE(LWLIB_USES_ATHENA) AC_DEFINE(NEED_ATHENA) need_athena="yes" if test "$athena_3d" = "yes"; then AC_DEFINE(HAVE_ATHENA_3D) fi ;; esac case "$all_widgets" in *motif* ) AC_DEFINE(LWLIB_USES_MOTIF) AC_DEFINE(NEED_MOTIF) XE_APPEND(lwlib-Xm.o, lwlib_objs) need_motif=yes ;; esac test "$with_menubars" = "lucid" && XE_APPEND(xlwmenu.o, lwlib_objs) test "$with_menubars" = "motif" && XE_APPEND(xlwmenu.o, lwlib_objs) test "$with_scrollbars" = "lucid" && XE_APPEND(xlwscrollbar.o, lwlib_objs) test "$with_widgets" != "no" && test "$with_widgets" != "msw" && \ XE_APPEND(xlwtabs.o xlwgcs.o, lwlib_objs) case "$with_widgets" in athena* ) XE_APPEND(xlwradio.o xlwcheckbox.o xlwgauge.o, lwlib_objs);; esac case "$all_widgets" in *lucid* ) AC_DEFINE(NEED_LUCID) XE_APPEND(lwlib-Xlw.o, lwlib_objs) ;; esac AC_SUBST(lwlib_objs) test "$with_scrollbars" = "athena" && AC_DEFINE(LWLIB_SCROLLBARS_ATHENA) test "$with_dialogs" = "athena" && AC_DEFINE(LWLIB_DIALOGS_ATHENA) if test "$athena_3d" = "yes"; then test "$with_scrollbars" = "athena" && AC_DEFINE(LWLIB_SCROLLBARS_ATHENA3D) test "$with_dialogs" = "athena" && AC_DEFINE(LWLIB_DIALOGS_ATHENA3D) fi case "$with_widgets" in athena* ) AC_DEFINE(LWLIB_WIDGETS_ATHENA);; esac test "$with_widgets" != "no" && test "$with_widgets" != "msw" && \ AC_DEFINE(LWLIB_TABS_LUCID) test "$with_menubars" != "no" && AC_DEFINE(HAVE_MENUBARS) test "$with_scrollbars" != "no" && AC_DEFINE(HAVE_SCROLLBARS) test "$with_dialogs" != "no" && AC_DEFINE(HAVE_DIALOGS) test "$with_toolbars" != "no" && AC_DEFINE(HAVE_TOOLBARS) test "$with_widgets" != "no" && AC_DEFINE(HAVE_WIDGETS) test "$with_menubars" = "lucid" && AC_DEFINE(LWLIB_MENUBARS_LUCID) test "$with_scrollbars" = "lucid" && AC_DEFINE(LWLIB_SCROLLBARS_LUCID) test "$with_menubars" = "motif" && AC_DEFINE(LWLIB_MENUBARS_MOTIF) test "$with_scrollbars" = "motif" && AC_DEFINE(LWLIB_SCROLLBARS_MOTIF) test "$with_dialogs" = "motif" && AC_DEFINE(LWLIB_DIALOGS_MOTIF) test "$with_widgets" = "motif" && AC_DEFINE(LWLIB_WIDGETS_MOTIF) test "$with_menubars" != "no" && XE_ADD_OBJS(menubar.o) test "$with_scrollbars" != "no" && XE_ADD_OBJS(scrollbar.o) test "$with_dialogs" != "no" && XE_ADD_OBJS(dialog.o) test "$with_toolbars" != "no" && XE_ADD_OBJS(toolbar.o) if test "$with_gtk" = "yes"; then test "$with_menubars" != "no" && XE_ADD_OBJS(menubar-gtk.o) test "$with_scrollbars" != "no" && XE_ADD_OBJS(scrollbar-gtk.o) test "$with_dialogs" != "no" && XE_ADD_OBJS(dialog-gtk.o) test "$with_toolbars" != "no" && XE_ADD_OBJS(toolbar-gtk.o) test "$all_widgets" != "no no no no no" && XE_ADD_OBJS(gui-gtk.o) fi if test "$with_x11" = "yes"; then test "$with_menubars" != "no" && XE_ADD_OBJS(menubar-x.o) test "$with_scrollbars" != "no" && XE_ADD_OBJS(scrollbar-x.o) test "$with_dialogs" != "no" && XE_ADD_OBJS(dialog-x.o) test "$with_toolbars" != "no" && XE_ADD_OBJS(toolbar-x.o) test "$all_widgets" != "no no no no no" && XE_ADD_OBJS(gui-x.o) fi dnl ---------------------- dnl Mule-dependent options dnl ---------------------- test -z "$with_mule" && with_mule=no test -z "$with_file_coding" && with_file_coding=no dnl if test "$with_mule" = "yes" && test ! -d "$srcdir/lisp/mule"; then dnl echo "Attempt to Build with Mule without Mule/Lisp" dnl echo "Please install the XEmacs/Mule tarball or" dnl echo "rerun configure with --with-mule=no" dnl exit 1 dnl fi if test "$with_file_coding" = "yes" && test "$with_mule" = "no"; then AC_DEFINE(FILE_CODING) XE_ADD_OBJS(file-coding.o) fi if test "$with_mule" = "yes" ; then AC_CHECKING(for Mule-related features) AC_DEFINE(MULE) AC_DEFINE(FILE_CODING) XE_ADD_OBJS(mule.o mule-ccl.o mule-charset.o file-coding.o) dnl Use -lintl to get internationalized strerror for Mule AC_CHECK_HEADERS(libintl.h) AC_CHECK_LIB(intl, strerror) AC_CHECKING(for Mule input methods) dnl Do we have the XmIm* routines? And if so, do we want to use them? dnl XIM seems to be flaky except on Solaris... dnl test -z "$with_xim" -a "$opsys" != "sol2" && with_xim=no case "$with_xim" in "" | "yes" ) AC_CHECKING(for XIM) AC_CHECK_LIB(X11, XOpenIM, with_xim=xlib, with_xim=no) dnl XIM + Lesstif is not (yet?) usable dnl Only use Motif if linking Motif anyway, or don't have xlib XIM if test "$need_motif $have_lesstif" = "yes no"; then AC_CHECK_LIB(Xm, XmImMbLookupString, with_xim=motif) elif test "$have_motif $have_lesstif $with_xim" = "yes no no"; then AC_CHECK_LIB(Xm, XmImMbLookupString, with_xim=motif) fi ;; esac if test "$with_xim" != "no"; then AC_DEFINE(HAVE_XIM) if test "$with_xim" = "xlib"; then AC_DEFINE(XIM_XLIB) XE_ADD_OBJS(input-method-xlib.o) fi if test "$with_xim" = "motif"; then AC_DEFINE(XIM_MOTIF) need_motif=yes XE_ADD_OBJS(input-method-motif.o) fi if test "$with_xim" = "motif"; then with_xfs=no fi fi dnl "with_xfs" = "yes" if test "$with_xfs" = "yes" ; then AC_CHECKING(for XFontSet) AC_CHECK_LIB(X11, XmbDrawString, [:], with_xfs=no) if test "$with_xfs" = "yes" && test "$with_menubars" = "lucid"; then AC_DEFINE(USE_XFONTSET) if test "$with_xim" = "no" ; then XE_ADD_OBJS(input-method-xlib.o) fi fi fi dnl with_xfs dnl Autodetect WNN test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support test -z "$with_wnn" && { AC_CHECK_HEADER(wnn/jllib.h, ,with_wnn=no) } dnl gcc 2.97 fixincludes breaks inclusion of wnn/commonhd.h test -z "$with_wnn" && { AC_CHECK_HEADER(wnn/commonhd.h, ,with_wnn=no) } dnl Detour to find crypt if test "$with_wnn" != "no"; then AC_CHECK_FUNCS(crypt) test "$ac_cv_func_crypt" != "yes" && { AC_CHECK_LIB(crypt, crypt) } fi dnl Back to our regularly scheduled wnn hunting if test -z "$with_wnn" -o "$with_wnn" = "yes"; then AC_CHECK_LIB(wnn,jl_dic_list_e,libwnn=wnn, AC_CHECK_LIB(wnn4,jl_dic_list_e,libwnn=wnn4, AC_CHECK_LIB(wnn6,jl_dic_list_e,libwnn=wnn6, AC_CHECK_LIB(wnn6_fromsrc,dic_list_e,libwnn=wnn6_fromsrc,with_wnn=no)))) fi test -z "$with_wnn" && with_wnn=yes if test "$with_wnn" = "yes"; then AC_DEFINE(HAVE_WNN) XE_PREPEND(-l$libwnn, libs_x) XE_ADD_OBJS(mule-wnnfns.o) if test "$with_wnn6" != "no"; then AC_CHECK_LIB($libwnn, jl_fi_dic_list, with_wnn6=yes) test "$with_wnn6" = "yes" && AC_DEFINE(WNN6) fi fi dnl Autodetect canna canna_includes_found=no if test "$with_canna" != "no"; then AC_CHECK_HEADER(canna/jrkanji.h,canna_includes_found=yes) fi if test "$canna_includes_found" = "no" -a "$with_canna" != "no" -a \ -d "/usr/local/canna/include"; then save_c_switch_site="$c_switch_site" c_switch_site="$c_switch_site -I/usr/local/canna/include" AC_CHECK_HEADER(canna/jrkanji.h,canna_includes_found=yes) if test "$canna_includes_found" != "yes"; then c_switch_site="$save_c_switch_site" with_canna="no" fi fi test -z "$with_canna" && { AC_CHECK_HEADER(canna/RK.h, , with_canna=no) } test -z "$with_canna" && { AC_CHECK_LIB(RKC, RkBgnBun, [:],with_canna=no) } test -z "$with_canna" && { AC_CHECK_LIB(canna,jrKanjiControl,[:],with_canna=no) } test -z "$with_canna" && with_canna=yes if test "$with_canna" = "yes"; then AC_DEFINE(HAVE_CANNA) XE_PREPEND(-lcanna -lRKC, libs_x) XE_ADD_OBJS(mule-canna.o) fi else dnl "$with_mule" = "no" for feature in xim canna wnn; do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then AC_MSG_WARN("--with-${feature} ignored: Not valid without Mule support") fi eval "with_${feature}=no" done fi dnl with_mule dnl At this point, we know whether we need the motif lib or not. if test "$need_motif" = "yes" ; then XE_PREPEND(-lXm, libs_x) dnl AIX needs the following library for use with Motif AC_CHECK_LIB(i18n, layout_object_getvalue, [XE_PREPEND(-li18n, libs_x)]) XE_COMPUTE_RUNPATH() fi dnl ---------------------------------------------------------------- dnl Check for POSIX functions. dnl ---------------------------------------------------------------- AC_CHECK_FUNCS(cbrt closedir dup2 eaccess fmod fpathconf frexp ftime getaddrinfo gethostname getnameinfo getpagesize gettimeofday getcwd getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strerror tzset ulimit usleep waitpid vsnprintf fsync ftruncate umask) dnl getaddrinfo() is borked under hpux11 if test "$ac_cv_func_getaddrinfo" != "no" ; then case "$opsys" in hpux11* ) AC_MSG_WARN([Use of getaddrinfo is disabled for HP-UX 11.XX.]) ac_cv_func_getaddrinfo=no ;; esac fi dnl ---------------------------------------------------------------- dnl Check for PTY support functions. dnl ---------------------------------------------------------------- dnl There is no "standard" pty allocation method. Every system is different. dnl getpt() is the preferred pty allocation method on glibc systems. dnl _getpty() is the preferred pty allocation method on SGI systems. dnl grantpt(), unlockpt(), ptsname() are defined by Unix98. AC_CHECK_FUNCS(getpt _getpty grantpt unlockpt ptsname killpg tcgetpgrp) dnl openpty() is the preferred pty allocation method on BSD and Tru64 systems. dnl openpty() might be declared in: dnl - pty.h (Tru64 or Linux) dnl - libutil.h (FreeBSD) dnl - util.h (NetBSD) AC_CHECK_FUNC(openpty, have_openpty=yes, [ AC_CHECK_LIB(util, openpty, have_openpty=yes need_libutil=yes)]) if test "$have_openpty" = "yes"; then AC_DEFINE(HAVE_OPENPTY) AC_CHECK_HEADERS(pty.h libutil.h util.h, break) test "$need_libutil" = "yes" && XE_APPEND(-lutil, libs_system) fi dnl Check for STREAM support functions. dnl Confusingly, "str" means both "string" and "SysV Streams". AC_CHECK_HEADERS(stropts.h) if test "$ac_cv_header_stropts_h" = "yes"; then AC_CHECK_FUNCS(isastream) AC_CHECK_HEADERS(strtio.h) dnl TIOCSIGNAL fi dnl Use our own realpath always. XE_ADD_OBJS(realpath.o) dnl Check whether the system provides getloadavg(). AC_CHECK_FUNCS(getloadavg) if test "$ac_cv_func_getloadavg" = "yes"; then dnl Solaris 8 declares getloadavg() in . dnl glibc 2.2 declares getloadavg() in ... dnl ...if we #define _GNU_SOURCE, which we do. AC_CHECK_HEADERS(sys/loadavg.h) else dnl We define our own getloadavg() using lower level functions. XE_ADD_OBJS(getloadavg.o) dnl Used by getloadavg() - does not require root priveleges AC_CHECK_LIB(kstat, kstat_open) AC_CHECK_HEADERS(kstat.h) dnl Another way to get the load average AC_CHECK_LIB(kvm, kvm_read) fi dnl If netdb.h does not declare h_errno, we must declare it by hand. AC_MSG_CHECKING(whether netdb declares h_errno) AC_TRY_LINK([#include ], [return h_errno;], [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_H_ERRNO)], [AC_MSG_RESULT(no)]) AC_MSG_CHECKING(for sigsetjmp) AC_TRY_COMPILE([#include ], [sigjmp_buf bar; sigsetjmp (bar, 0);], [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_SIGSETJMP)], [AC_MSG_RESULT(no)]) AC_MSG_CHECKING(whether localtime caches TZ) AC_CACHE_VAL(emacs_cv_localtime_cache, [if test "$ac_cv_func_tzset" = "yes"; then AC_TRY_RUN([#include #if STDC_HEADERS # include #endif extern char **environ; unset_TZ () { char **from, **to; for (to = from = environ; (*to = *from); from++) if (! (to[0][0] == 'T' && to[0][1] == 'Z' && to[0][2] == '=')) to++; } char TZ_GMT0[] = "TZ=GMT0"; char TZ_PST8[] = "TZ=PST8"; main() { time_t now = time ((time_t *) 0); int hour_GMT0, hour_unset; if (putenv (TZ_GMT0) != 0) exit (1); hour_GMT0 = localtime (&now)->tm_hour; unset_TZ (); hour_unset = localtime (&now)->tm_hour; if (putenv (TZ_PST8) != 0) exit (1); if (localtime (&now)->tm_hour == hour_GMT0) exit (1); unset_TZ (); if (localtime (&now)->tm_hour != hour_unset) exit (1); exit (0); }], emacs_cv_localtime_cache=no, emacs_cv_localtime_cache=yes, [# If we have tzset, assume the worst when cross-compiling. emacs_cv_localtime_cache=yes]) else # If we lack tzset, report that localtime does not cache TZ, # since we can't invalidate the cache if we don't have tzset. emacs_cv_localtime_cache=no fi],[:])dnl AC_MSG_RESULT($emacs_cv_localtime_cache) if test $emacs_cv_localtime_cache = yes; then AC_DEFINE(LOCALTIME_CACHE) fi if test "$HAVE_TIMEVAL" = "yes"; then AC_MSG_CHECKING(whether gettimeofday accepts one or two arguments) AC_TRY_LINK([ #ifdef TIME_WITH_SYS_TIME #include #include #else #ifdef HAVE_SYS_TIME_H #include #else #include #endif #endif ], [ struct timeval time; gettimeofday (&time, 0); ], [AC_MSG_RESULT(two)], [AC_MSG_RESULT(one) AC_DEFINE(GETTIMEOFDAY_ONE_ARGUMENT)]) fi AC_C_INLINE test "$ac_cv_c_inline" != "no" -a "$GCC" = "yes" && XE_ADD_OBJS(inline.o) dnl HP-UX has a working alloca in libPW. dnl case "${GCC}${opsys}" in hpux* ) dnl AC_CHECK_FUNC(alloca, [:], [AC_CHECK_LIB(PW, alloca)]) dnl esac dnl AC_FUNC_ALLOCA doesn't know about DEC C's #pragma intrinsic(alloca) if test "$__DECC" != "yes"; then AC_FUNC_ALLOCA test -n "$ALLOCA" && XE_ADD_OBJS($ALLOCA) fi dnl Check whether vfork exists and works correctly. (This does more dnl than just check for its existence.) If so, it defines HAVE_VFORK_H. dnl If not, it defines vfork to be fork. AC_FUNC_VFORK dnl Check whether strcoll exists and works correctly. (This does more dnl than just check for its existence.) If so, it defines HAVE_STRCOLL. AC_FUNC_STRCOLL dnl If `getpgrp' takes no argument (the POSIX.1 version), define dnl `GETPGRP_VOID'. Otherwise, it is the BSD version, which takes a dnl process ID as an argument. AC_CHECK_FUNCS(getpgrp) AC_FUNC_GETPGRP dnl We used to call AC_FUNC_MMAP here dnl Instead we now use following, suggested by Neal Becker AC_MSG_CHECKING(for working mmap) case "$opsys" in ultrix* ) have_mmap=no ;; *) AC_TRY_RUN([#include #include #include #include #ifndef MAP_VARIABLE #define MAP_VARIABLE 0 #endif #ifndef MAP_FAILED #define MAP_FAILED -1 #endif int main (int argc, char *argv[]) { int fd = -1; caddr_t p; #ifndef MAP_ANONYMOUS fd = open ("/dev/zero", O_RDWR); if (fd < 0) return 1; #define MAP_ANONYMOUS 0 #endif if (mmap(0, 1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_VARIABLE | MAP_ANONYMOUS, fd, 0) != (void *) MAP_FAILED) return 0; perror ("conftest: mmap failed"); return 1; }], have_mmap=yes, have_mmap=no) ;; esac AC_MSG_RESULT($have_mmap) test "$have_mmap" = "yes" && AC_DEFINE(HAVE_MMAP) dnl By default we switch off rel-alloc on cygwin as it generally causes us grief case "$opsys" in cygwin*) test "$rel_alloc" = "default" && rel_alloc=no ;; esac dnl rel_alloc requires either GNU malloc or system malloc with mmap dnl We only turn rel_alloc on by default if mmap is available. test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no if test "$rel_alloc $have_mmap" = "default yes"; then if test "$doug_lea_malloc" = "yes"; then dnl Check if malloc() calls mmap(), making rel_alloc pointless. AC_MSG_CHECKING(for M_MMAP_THRESHOLD) AC_TRY_COMPILE([#include ],[ #ifndef M_MMAP_THRESHOLD #error No M_MMAP_THRESHOLD :-( !@+$%^&*_)(_ - unlikely to compile... #endif ], [rel_alloc=no; AC_MSG_RESULT(yes);], [rel_alloc=yes; AC_MSG_RESULT(no);]) else rel_alloc=yes fi fi test "$rel_alloc" = "yes" && AC_DEFINE(REL_ALLOC) dnl Check for terminal I/O variants dnl TERMIOS systems may have termio.h, but not vice-versa, I think. AC_CHECK_HEADER(termios.h, AC_DEFINE(HAVE_TERMIOS) AC_DEFINE(SIGNALS_VIA_CHARACTERS) AC_DEFINE(NO_TERMIO), [AC_CHECK_HEADER(termio.h, [AC_DEFINE(HAVE_TERMIO)])]) dnl Check for Internet sockets. AC_CHECK_FUNC(socket, [AC_CHECK_HEADER(netinet/in.h, [AC_CHECK_HEADER(arpa/inet.h, [ AC_DEFINE(HAVE_SOCKETS) AC_MSG_CHECKING("for sun_len member in struct sockaddr_un") AC_TRY_LINK([ #include #include #include ], [static struct sockaddr_un x; x.sun_len = 1;], [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOCKADDR_SUN_LEN)], [AC_MSG_RESULT(no)]) AC_MSG_CHECKING("for ip_mreq struct in netinet/in.h") AC_TRY_LINK([ #include #include ], [static struct ip_mreq x;], [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MULTICAST)], [AC_MSG_RESULT(no)])])])]) dnl Check for SYS V IPC. (Inferior to sockets.) AC_CHECK_FUNC(msgget, [AC_CHECK_HEADER(sys/ipc.h, [AC_CHECK_HEADER(sys/msg.h, [AC_DEFINE(HAVE_SYSVIPC)])])]) dnl Check for directory variants AC_CHECK_HEADER(dirent.h, [AC_DEFINE(SYSV_SYSTEM_DIR)], [AC_CHECK_HEADER(sys/dir.h, , [AC_DEFINE(NONSYSTEM_DIR_LIBRARY)])]) dnl Check for nlist.h AC_CHECK_HEADER(nlist.h, AC_DEFINE(NLIST_STRUCT), ) dnl Check for sound of various sorts. dnl Autodetect native sound AC_CHECKING("for sound support") test -z "$with_native_sound" -a -n "$native_sound_lib" && with_native_sound=yes if test "$with_native_sound" != "no"; then dnl Maybe sound is already on include path... if test -n "$native_sound_lib"; then AC_CHECK_HEADER(multimedia/audio_device.h, [sound_found=yes sound_cflags="" XE_ADD_OBJS(sunplay.o)]) fi dnl Autodetect Sun native sound from SUNWaudmo package if test -z "$sound_found" -a -d "/usr/demo/SOUND"; then if test -d "/usr/demo/SOUND/include/multimedia"; then sun_sound_cflags="-I/usr/demo/SOUND/include" elif test -d "/usr/demo/SOUND/multimedia"; then sun_sound_cflags="-I/usr/demo/SOUND" fi if test -n "$native_sound_lib"; then sun_sound_lib="$native_sound_lib" elif test -r "/usr/demo/SOUND/lib/libaudio.a"; then sun_sound_lib="/usr/demo/SOUND/lib/libaudio.a" elif test -r "/usr/demo/SOUND/libaudio.a"; then sun_sound_lib="/usr/demo/SOUND/libaudio.a" fi if test -n "$sun_sound_cflags" -a -n "$sun_sound_lib"; then native_sound_lib="$sun_sound_lib" sound_cflags="$sun_sound_cflags" sound_found=yes XE_ADD_OBJS(sunplay.o) fi fi dnl Check for SGI and HP native sound libs if test -z "$sound_found"; then case "$canonical" in *-sgi-* ) if test -z "$native_sound_lib"; then AC_CHECK_LIB(audio, ALopenport, native_sound_lib="-laudio") fi if test -n "$native_sound_lib"; then sound_found=yes sound_cflags="" XE_ADD_OBJS(sgiplay.o) fi ;; hppa*-hp-hpux* ) if test -z "$native_sound_lib"; then AC_CHECK_LIB(Alib, AOpenAudio, native_sound_lib="-lAlib") fi if test -n "$native_sound_lib"; then sound_found=yes XE_ADD_OBJS(hpplay.o) if test "$GCC" = "yes" # Kludge city then sound_cflags="-Dconst= -Dvolatile= -I/usr/audio/examples" else sound_cflags="+e -I/usr/audio/examples" fi fi ;; esac fi dnl Win32 Native uses native sound if test -z "$sound_found"; then if test "$with_msw" = "yes"; then sound_found=yes native_sound_lib= fi fi dnl Check for Linux/BSD native sound if test -z "$sound_found"; then for dir in "machine" "sys" "linux"; do AC_CHECK_HEADER(${dir}/soundcard.h, sound_found=yes need_miscplay=yes XE_ADD_OBJS(linuxplay.o) [AC_DEFINE_UNQUOTED(SOUNDCARD_H_FILE, "${dir}/soundcard.h")] break) done fi test "$sound_found" = "yes" && with_native_sound=yes fi if test "$with_native_sound" = "yes"; then AC_DEFINE(HAVE_NATIVE_SOUND) test -n "$native_sound_lib" && XE_PREPEND($native_sound_lib, LIBS) fi dnl NAS Sound support if test "$with_nas_sound" != "no"; then AC_CHECK_HEADER(audio/audiolib.h, [ AC_CHECK_LIB(audio, AuOpenServer, have_nas_sound=yes)]) if test "$have_nas_sound" = "yes"; then with_nas_sound=yes AC_DEFINE(HAVE_NAS_SOUND) XE_ADD_OBJS(nas.o) XE_PREPEND(-laudio, libs_x) dnl If the nas library does not contain the error jump point, dnl then we force safer behavior. AC_EGREP_HEADER(AuXtErrorJump,audio/Xtutil.h,,[old_nas=yes; AC_DEFINE(NAS_NO_ERROR_JUMP)]) else test "$with_nas_sound" = "yes" && \ XE_DIE("Required NAS sound support cannot be provided.") with_nas_sound=no fi fi dnl ESD Sound support if test "$with_esd_sound" != "no"; then AC_CHECK_PROG(have_esd_config, esd-config, yes, no) if test "$have_esd_config" = "yes"; then save_c_switch_site="$c_switch_site" save_LIBS="$LIBS" XE_APPEND(`esd-config --cflags`, c_switch_site) XE_PREPEND(`esd-config --libs`, LIBS) AC_CHECK_FUNC(esd_play_stream, have_esd_sound=yes, c_switch_site="$save_c_switch_site" LIBS="$save_LIBS") fi if test "$have_esd_sound" = "yes"; then with_esd_sound=yes need_miscplay=yes XE_ADD_OBJS(esd.o) AC_DEFINE(HAVE_ESD_SOUND) else test "$with_esd_sound" = "yes" && \ XE_DIE("Required ESD sound support cannot be provided.") with_esd_sound=no fi fi test "$need_miscplay" = "yes" && XE_ADD_OBJS(miscplay.o) dnl --------------------- dnl TTY-dependent options dnl --------------------- test -z "$with_tty" && with_tty=yes if test "$with_tty" = "yes" ; then AC_CHECKING(for TTY-related features) AC_DEFINE(HAVE_TTY) XE_ADD_OBJS(console-tty.o device-tty.o event-tty.o frame-tty.o objects-tty.o redisplay-tty.o cm.o) dnl Autodetect ncurses. if test -z "$with_ncurses"; then AC_CHECK_LIB(ncurses, tgetent, with_ncurses=yes, with_ncurses=no) fi if test "$with_ncurses" = "yes"; then AC_DEFINE(HAVE_NCURSES) AC_CHECK_HEADER(ncurses/curses.h, curses_h_file=ncurses/curses.h) AC_CHECK_HEADER(ncurses/term.h, term_h_file=ncurses/term.h) XE_ADD_OBJS(terminfo.o) XE_PREPEND(-lncurses, LIBS) if test "$ac_cv_header_ncurses_curses_h" != "yes" ; then dnl Try again, and check for the bogus ncurses/ include bug. dnl (i.e. ncurses/curses.h bogusly includes instead of dnl ) save_c_switch_site="$c_switch_site" c_switch_site="$c_switch_site -I/usr/include/ncurses" AC_CHECK_HEADER(ncurses/curses.h, curses_h_file=ncurses/curses.h) if test "$ac_cv_header_ncurses_curses_h" = "yes" then AC_MSG_WARN("Your system has the bogus ncurses include bug.") else c_switch_site="$save_c_switch_site" fi fi else dnl "$with_ncurses" = "no" dnl Autodetect terminfo/-lcurses/-ltermlib/-ltermcap if test "$have_terminfo" = "yes"; then XE_ADD_OBJS(terminfo.o) if test -n "$libs_termcap"; then XE_PREPEND($libs_termcap, LIBS) else for lib in curses termlib termcap; do AC_CHECK_LIB($lib, tgetent, XE_PREPEND(-l${lib}, LIBS); break) done fi else dnl "$have_terminfo" = "no" && "with_ncurses" = "no" if test -n "$libs_termcap" -a "$opsys" = "openbsd"; then dnl We need to check if tgoto does not exist in termcap yet dnl because on OpenBSD libtermcap is another name for libcurses dnl which provides the same tgoto as ncurses AC_CHECK_LIB(termcap, tgoto, , XE_ADD_OBJS(tparam.o)) else XE_ADD_OBJS(tparam.o) fi dnl The HP-UX curses library seems to have a badly broken version of select(2) dnl that makes "poll: interrupted system call" messages to appear and dnl Emacs subprocesses to hang (e.g. TeX compilation w/ AUCTeX) */ case "$opsys" in *-hp-hpux* ) libs_termcap="-ltermcap" ;; esac if test -n "$libs_termcap"; then XE_PREPEND($libs_termcap, LIBS) else AC_CHECK_LIB(curses, tgetent, XE_PREPEND(-lcurses, LIBS), AC_CHECK_LIB(termcap, tgetent, XE_PREPEND(-ltermcap, LIBS), XE_ADD_OBJS(termcap.o))) fi fi fi AC_DEFINE_UNQUOTED(CURSES_H_FILE, "${curses_h_file-curses.h}") AC_DEFINE_UNQUOTED(TERM_H_FILE, "${term_h_file-term.h}") dnl General Purpose Mouse (libgpm) support if test "$with_gpm" != "no"; then AC_CHECK_HEADER(gpm.h, [ AC_CHECK_LIB(gpm, Gpm_Open, have_gpm=yes)]) if test "$have_gpm" = "yes"; then with_gpm=yes AC_DEFINE(HAVE_GPM) XE_ADD_OBJS(gpmevent.o) XE_PREPEND(-lgpm, LIBS) elif test "$with_gpm" = "yes"; then XE_DIE(["GPM requested, but gpm.h or libgpm seems to be missing."]) else with_gpm=no fi fi else dnl "$with_tty" = "no" for feature in ncurses gpm; do if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then AC_MSG_WARN("--with-${feature} ignored: Not valid without TTY support") fi eval "with_${feature}=no" done fi dnl with_tty dnl Do we need event-unixoid.o ? dnl This is needed for X, or for TTY, or for MSWIN w/Cygwin select() dnl [but not Mingw MSWIN] test "$with_x11" = "yes" -o "$with_tty" = "yes" -o "$need_event_unixoid" = "yes" && XE_ADD_OBJS(event-unixoid.o) dnl Database support dnl We do not necessarily have to have libdb/lib(g)dbm for DB/(G)DBM support. dnl On FreeBSD, both DB and DBM are part of libc. dnl By default, we check for DBM support in libgdbm, then libc, then libdbm. test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \ != "no no no" && AC_CHECKING(for database support) dnl Check for ndbm.h, required for either kind of DBM support. if test "$with_database_gdbm $with_database_dbm" != "no no"; then AC_CHECK_HEADER(ndbm.h, [:], [ test "$with_database_gdbm" = "yes" -o \ "$with_database_dbm" = "yes" && \ XE_DIE("Required DBM support cannot be provided.") with_database_gdbm=no with_database_dbm=no]) fi dnl Check for DBM support in libgdbm. if test "$with_database_gdbm" != "no"; then AC_CHECK_LIB(gdbm, dbm_open, [ with_database_gdbm=yes with_database_dbm=no libdbm=-lgdbm], [ if test "$with_database_gdbm" = "yes"; then XE_DIE("Required GNU DBM support cannot be provided.") fi with_database_gdbm=no]) fi dnl Check for DBM support in libc and libdbm. if test "$with_database_dbm" != "no"; then AC_CHECK_FUNC(dbm_open, [with_database_dbm=yes libdbm=], [ AC_CHECK_LIB(dbm, dbm_open, [with_database_dbm=yes libdbm=-ldbm], [ test "$with_database_dbm" = "yes" && \ XE_DIE("Required DBM support cannot be provided.") with_database_dbm=no])]) fi dnl Tell make about the DBM support we detected. test -n "$libdbm" && XE_PREPEND("$libdbm", LIBS) test "$with_database_gdbm" = "yes" -o \ "$with_database_dbm" = "yes" && \ AC_DEFINE(HAVE_DBM) dnl Check for u_int*_t typedefs. AC_CHECK_TYPE(u_int8_t, uint8_t) if test $ac_cv_type_u_int8_t = yes; then AC_DEFINE(HAVE_U_INT8_T,1) fi AC_CHECK_TYPE(u_int16_t, uint16_t) if test $ac_cv_type_u_int16_t = yes; then AC_DEFINE(HAVE_U_INT16_T,1) fi AC_CHECK_TYPE(u_int32_t, uint32_t) if test $ac_cv_type_u_int32_t = yes; then AC_DEFINE(HAVE_U_INT32_T,1) fi AC_CHECK_TYPE(u_int64_t, uint64_t) if test $ac_cv_type_u_int64_t = yes; then AC_DEFINE(HAVE_U_INT64_T,1) fi dnl Check for Berkeley DB. if test "$with_database_berkdb" != "no"; then AC_MSG_CHECKING(for Berkeley db.h) for header in "db/db.h" "db.h"; do case "$opsys" in *freebsd*) AC_TRY_COMPILE([ #include #if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1) #ifdef HAVE_INTTYPES_H #define __BIT_TYPES_DEFINED__ #include #endif #endif #include <$header> ],[], db_h_file="$header"; break) ;; *) AC_TRY_COMPILE([ #include #if !(defined __GLIBC__ && __GLIBC_MINOR__ >= 1) #ifdef HAVE_INTTYPES_H #define __BIT_TYPES_DEFINED__ #include #if !HAVE_U_INT8_T typedef uint8_t u_int8_t; #endif #if !HAVE_U_INT16_T typedef uint16_t u_int16_t; #endif #if !HAVE_U_INT32_T typedef uint32_t u_int32_t; #endif #ifdef WE_DONT_NEED_QUADS #if !HAVE_U_INT64_T typedef uint64_t u_int64_t; #endif #endif #endif #endif #include <$header> ],[], db_h_file="$header"; break) ;; esac done if test -z "$db_h_file" then AC_MSG_RESULT(no); with_database_berkdb=no else AC_MSG_RESULT($db_h_file) fi if test "$with_database_berkdb" != "no"; then AC_MSG_CHECKING(for Berkeley DB version) AC_EGREP_CPP(yes, [#include <$db_h_file> #if DB_VERSION_MAJOR > 1 yes #endif ], [AC_EGREP_CPP(yes, [#include <$db_h_file> #if DB_VERSION_MAJOR > 2 yes #endif ], [AC_MSG_RESULT(3); dbfunc=db_create],[ AC_MSG_RESULT(2); dbfunc=db_open])],[ AC_MSG_RESULT(1); dbfunc=dbopen]) AC_CHECK_FUNC($dbfunc, with_database_berkdb=yes need_libdb=no, [ AC_CHECK_LIB(db, $dbfunc, with_database_berkdb=yes need_libdb=yes)]) fi if test "$with_database_berkdb" = "yes"; then AC_DEFINE_UNQUOTED(DB_H_FILE, "$db_h_file") AC_DEFINE(HAVE_BERKELEY_DB) test "$need_libdb" = "yes" && XE_PREPEND(-ldb, LIBS) else with_database_berkdb=no fi fi if test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \ != "no no no"; then AC_DEFINE(HAVE_DATABASE) XE_ADD_OBJS(database.o) fi dnl Socks support if test "$with_socks" = "yes"; then AC_CHECK_LIB(socks, SOCKSinit) test -n "$ac_cv_lib_socks_SOCKSinit" && AC_DEFINE(HAVE_SOCKS) fi dnl Usage tracking (undocumented and likely unused option) if test "$usage_tracking" = "yes"; then AC_DEFINE(USAGE_TRACKING) XE_PREPEND(-Bstatic -lut -Bdynamic, LIBS) fi dnl autodetect dll support if test "$with_modules" != "no"; then AC_CHECKING(for module support) dnl Check for MS-Windows if test "$with_msw" = "yes"; then have_dl=yes; else dnl Check for Darwin case "$opsys" in darwin) have_dl=yes; AC_DEFINE(HAVE_DYLD) ;; *) dnl Find headers and libraries AC_CHECK_HEADER(dlfcn.h, [ AC_MSG_CHECKING([for dlopen in -lc]) AC_TRY_LINK([#include ],dnl [dlopen ("", 0);], [ have_dl=yes ], [ AC_MSG_CHECKING([for dlopen in -ldl]) ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" AC_TRY_LINK([#include ],dnl [dlopen ("", 0);], [ have_dl=yes ], [LIBS="$ac_save_LIBS"]) ac_save_LIBS=])]) if test -n "$have_dl"; then AC_DEFINE(HAVE_DLOPEN) else AC_CHECK_LIB(dld, shl_load, [ libdl=dld have_dl=yes; AC_DEFINE(HAVE_SHL_LOAD)], [ AC_CHECK_LIB(dld, dld_init, [ libdl=dld have_dl=yes; AC_DEFINE(HAVE_DLD_INIT)])]) fi ;; esac fi dnl end !MS-Windows if test -n "$have_dl"; then dnl XE_SHLIB_STUFF (in aclocal.m4) defines $can_build_shared XE_SHLIB_STUFF fi if test "$can_build_shared" = "yes"; then AC_DEFINE(HAVE_SHLIB) XE_ADD_OBJS(sysdll.o emodules.o) XE_APPEND(src, INSTALL_ARCH_DEP_SUBDIR) test -n "$libdl" && XE_PREPEND(-l${libdl}, LIBS) AC_CHECK_FUNCS(dlerror _dlerror) with_modules=yes else if test "$with_modules" = "yes"; then XE_DIE("Required module support cannot be provided.") else AC_MSG_WARN("Module support cannot be provided.") fi with_modules=no fi fi dnl Unfortunately, just because we can link doesn't mean we can run. dnl One of the above link tests may have succeeded but caused resulting dnl executables to fail to run. Also any tests using AC_TRY_RUN will dnl have reported incorrect results. AC_TRY_RUN([int main(int c,char *v[]){return 0;}],[:],[ echo "" echo "*** PANIC *** configure forgot how to build working executables!" echo "" echo "*** This is most commonly due to an unforeseen environment, causing" echo "*** configure to incorrectly compute the sequence of libraries to link." echo "*** Please examine the tail of config.log for runtime errors." echo "*** Pay special attention to the -l flags, and perhaps -I and -L." echo "*** Often adding or removing explicit options in the configure" echo "*** invocation can work around this kind of problem. If so, please" echo "*** report it as a bug to xemacs-beta@xemacs.org." echo "***" echo "*** Other possible causes are inability to write to the file system" echo "*** (bogus permissions or disk full) or a misconfiguration of the dynamic" echo "*** linker. On Linux, check /etc/ld.conf and rerun ldconfig if" echo "*** necessary. On other systems, try telling configure where to find" echo "*** the shared libraries using the --site-runtime-libraries option." echo "***" echo "*** Another way to shoot yourself in the foot is to specify" echo "*** --with-FEATURE when FEATURE is not actually installed on your" echo "*** system. Don't do that." exit 1]) dnl Process support if test "$win32_processes" = "yes"; then XE_ADD_OBJS(process-nt.o) else AC_DEFINE(HAVE_UNIX_PROCESSES) XE_ADD_OBJS(process-unix.o) fi dnl -------------------------------- dnl Compute SUBST-itutable variables dnl -------------------------------- dnl We ignore (C|LD)_SWITCH_X_(MACHINE|SYSTEM) dnl Use XE_SPACE instead of plain assignment statements to remove extraneous blanks XE_SPACE(CFLAGS, $CFLAGS) XE_SPACE(extra_objs, $extra_objs) XE_SPACE(c_switch_general, -DHAVE_CONFIG_H $c_switch_site $c_switch_machine $c_switch_system) XE_SPACE(c_switch_window_system, $c_switch_x_site $c_switch_gtk $X_CFLAGS) XE_SPACE(c_switch_all, $c_switch_general $c_switch_window_system) XE_SPACE(ld_switch_general, $ld_switch_site $ld_switch_machine $ld_switch_system $ld_switch_run) XE_SPACE(ld_switch_window_system, $ld_switch_x_site) XE_SPACE(ld_switch_all, $ld_switch_general $ld_switch_window_system) XE_SPACE(ld_libs_general, $LIBS $libs_machine $libs_system $libs_standard) XE_SPACE(ld_libs_window_system, $X_EXTRA_LIBS $libs_x $libs_gtk $X_PRE_LIBS) XE_SPACE(ld_libs_all, $ld_libs_window_system $ld_libs_general) dnl Compute lists of Makefiles and subdirs AC_SUBST(SRC_SUBDIR_DEPS) XE_APPEND(src, MAKE_SUBDIR) internal_makefile_list="Makefile.in" SUBDIR_MAKEFILES='' test -d lock || mkdir lock for dir in $MAKE_SUBDIR; do case "$dir" in */* ) dnl Implement mkdir -p ( for d in `echo $dir | sed 's:/: :g'` ; do test -d "$d" || mkdir "$d"; cd "$d" done ) ;; * ) test -d "$dir" || mkdir "$dir" ;; esac XE_SPACE(SUBDIR_MAKEFILES, $SUBDIR_MAKEFILES $dir/Makefile $dir/GNUmakefile) XE_SPACE(internal_makefile_list, $internal_makefile_list $dir/Makefile.in) done AC_SUBST(INSTALL_ARCH_DEP_SUBDIR) AC_SUBST(MAKE_SUBDIR) AC_SUBST(SUBDIR_MAKEFILES) dnl Make s&m symlinks in the src directory, for config.h for dir in src/s src/m; do if test ! -d "$dir" ; then echo Making symbolic link to "$srcdir/$dir" ${LN_S} "$srcdir/$dir" "$dir" fi done if test "$extra_verbose" = "yes"; then echo "" PRINT_VAR(extra_objs c_switch_general c_switch_window_system c_switch_all ld_switch_general ld_switch_window_system ld_switch_all ld_libs_general ld_libs_window_system ld_libs_all) echo "" fi dnl ---------------------------------------------- dnl Create some auxiliary files for developers. dnl ---------------------------------------------- dnl Create a .gdbinit useful for debugging XEmacs if test -f "$srcdir/src/.gdbinit" -a ! -f "src/.gdbinit"; then test "$extra_verbose" = "yes" && echo "creating src/.gdbinit" echo "source $srcdir/src/.gdbinit" > "src/.gdbinit" fi dnl Create a .dbxrc useful for debugging XEmacs if test -f "$srcdir/src/.dbxrc" -a ! -f "src/.dbxrc"; then test "$extra_verbose" = "yes" && echo "creating src/.dbxrc" echo ". $srcdir/src/.dbxrc" > "src/.dbxrc" fi dnl Create a useful TAGS file if test -f "$srcdir/TAGS" -a ! -f "TAGS"; then test "$extra_verbose" = "yes" && echo "creating TAGS" echo " $srcdir/TAGS,include" > "TAGS" fi dnl Create top level .sbinit for Sun compilers if test "$__SUNPRO_C" = "yes"; then test "$extra_verbose" = "yes" && echo "creating .sbinit" ( echo "# For use with Sun WorkShop's Source browser." echo "# See sbquery(1) and sbinit(4) for more information" for dir in $MAKE_SUBDIR; do echo "import $dir"; done ) > .sbinit fi dnl There are no more compile tests; remove the core they created. rm -f core dnl ---------------------------------------------- dnl Substitute into Makefile, config.h and paths.h dnl ---------------------------------------------- dnl what sort of things to edit into Makefile, config.h and paths.h dnl configuration here uncanonicalized to avoid exceeding size limits. AC_SUBST(PROGNAME) AC_SUBST(version) AC_SUBST(configuration) AC_SUBST(canonical) AC_SUBST(inststaticdir) AC_SUBST(instvardir) AC_SUBST(srcdir) AC_SUBST(bindir) AC_SUBST(datadir) AC_SUBST(pkgdir) AC_SUBST(statedir) AC_SUBST(libdir) AC_SUBST(mandir) AC_SUBST(extra_includes) AC_SUBST(prefix) AC_SUBST(PREFIX_USER_DEFINED) dnl Yo, Stephen Bourne! I want to marry you! PREFIX=$prefix while true; do case "$PREFIX" in *\$* ) eval "PREFIX=$PREFIX" ;; *) break ;; esac done AC_SUBST(PREFIX) AC_SUBST(exec_prefix) AC_SUBST(EXEC_PREFIX_USER_DEFINED) EXEC_PREFIX=$exec_prefix while true; do case "$EXEC_PREFIX" in *\$* ) eval "EXEC_PREFIX=$EXEC_PREFIX" ;; *) break ;; esac done AC_SUBST(EXEC_PREFIX) AC_SUBST(infodir) AC_SUBST(INFODIR_USER_DEFINED) INFODIR=$infodir while true; do case "$INFODIR" in *\$* ) eval "INFODIR=$INFODIR" ;; *) break ;; esac done AC_SUBST(INFODIR) AC_SUBST(infopath) AC_SUBST(INFOPATH_USER_DEFINED) INFOPATH=$infopath while true; do case "$INFOPATH" in *\$* ) eval "INFOPATH=$INFOPATH" ;; *) break ;; esac done AC_SUBST(INFOPATH) AC_SUBST(package_path) AC_SUBST(PACKAGE_PATH_USER_DEFINED) PACKAGE_PATH=$package_path while true; do case "$PACKAGE_PATH" in *\$* ) eval "PACKAGE_PATH=$PACKAGE_PATH" ;; *) break ;; esac done AC_SUBST(PACKAGE_PATH) AC_SUBST(lispdir) AC_SUBST(LISPDIR_USER_DEFINED) LISPDIR=$lispdir while true; do case "$LISPDIR" in *\$* ) eval "LISPDIR=$LISPDIR" ;; *) break ;; esac done AC_SUBST(LISPDIR) AC_SUBST(moduledir) AC_SUBST(MODULEDIR_USER_DEFINED) MODULEDIR=$moduledir while true; do case "$MODULEDIR" in *\$* ) eval "MODULEDIR=$MODULEDIR" ;; *) break ;; esac done AC_SUBST(MODULEDIR) AC_SUBST(sitelispdir) AC_SUBST(SITELISPDIR_USER_DEFINED) SITELISPDIR=$sitelispdir while true; do case "$SITELISPDIR" in *\$* ) eval "SITELISPDIR=$SITELISPDIR" ;; *) break ;; esac done AC_SUBST(SITELISPDIR) AC_SUBST(sitemoduledir) AC_SUBST(SITEMODULEDIR_USER_DEFINED) SITEMODULEDIR=$sitemoduledir while true; do case "$SITEMODULEDIR" in *\$* ) eval "SITEMODULEDIR=$SITEMODULEDIR" ;; *) break ;; esac done AC_SUBST(SITEMODULEDIR) AC_SUBST(etcdir) AC_SUBST(ETCDIR_USER_DEFINED) ETCDIR=$etcdir while true; do case "$ETCDIR" in *\$* ) eval "ETCDIR=$ETCDIR" ;; *) break ;; esac done AC_SUBST(ETCDIR) AC_SUBST(docdir) AC_SUBST(DOCDIR_USER_DEFINED) DOCDIR=$docdir while true; do case "$DOCDIR" in *\$* ) eval "DOCDIR=$DOCDIR" ;; *) break ;; esac done AC_SUBST(DOCDIR) AC_SUBST(archlibdir) AC_SUBST(ARCHLIBDIR_USER_DEFINED) ARCHLIBDIR=$archlibdir while true; do case "$ARCHLIBDIR" in *\$* ) eval "ARCHLIBDIR=$ARCHLIBDIR" ;; *) break ;; esac done AC_SUBST(ARCHLIBDIR) AC_SUBST(docdir) AC_SUBST(bitmapdir) AC_SUBST(extra_objs) dnl The following flags combine all the information from: dnl - command line options (user always gets priority) dnl - user environment variables dnl - determined by configure dnl - the s&m header files (required for ellcc) AC_SUBST(machfile) AC_SUBST(opsysfile) AC_SUBST(c_switch_general) AC_SUBST(c_switch_window_system) AC_SUBST(c_switch_all) AC_SUBST(ld_switch_general) AC_SUBST(ld_switch_window_system) AC_SUBST(ld_switch_all) AC_SUBST(ld_libs_general) AC_SUBST(ld_libs_window_system) AC_SUBST(ld_libs_all) AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(LDFLAGS) RECURSIVE_MAKE_ARGS="\$(MFLAGS) CC='\$(CC)' CFLAGS='\$(CFLAGS)' LDFLAGS='\$(LDFLAGS)' CPPFLAGS='\$(CPPFLAGS)'" AC_SUBST(RECURSIVE_MAKE_ARGS) AC_SUBST(native_sound_lib) AC_SUBST(sound_cflags) AC_SUBST(RANLIB) AC_SUBST(dynodump_arch) dnl Preliminary support for using a different compiler for xemacs itself. dnl Useful for building XEmacs with a C++ or 64-bit compiler. : ${XEMACS_CC:=$CC} AC_SUBST(XEMACS_CC) dnl The default is yes if test "$with_prefix" = "yes"; then AC_DEFINE(PREFIX_USER_DEFINED) fi dnl The default is no if test "$with_site_lisp" = "no"; then AC_DEFINE(INHIBIT_SITE_LISP) fi dnl The default is yes if test "$with_site_modules" = "no"; then AC_DEFINE(INHIBIT_SITE_MODULES) fi XE_SPACE(ac_configure_args, $ac_configure_args) AC_DEFINE_UNQUOTED(EMACS_CONFIGURATION, "$configuration") AC_DEFINE_UNQUOTED(EMACS_CONFIG_OPTIONS, "$ac_configure_args") dnl Following are deprecated null_string="" AC_DEFINE_UNQUOTED(LD_SWITCH_X_SITE, $null_string) AC_DEFINE_UNQUOTED(LD_SWITCH_X_SITE_AUX, $null_string) AC_DEFINE_UNQUOTED(C_SWITCH_X_SITE, $null_string) AC_DEFINE_UNQUOTED(LD_SWITCH_SITE, $null_string) AC_DEFINE_UNQUOTED(C_SWITCH_SITE, $null_string) dnl Note: as a general rule, *only* define things here that are not dnl autodetected. For things that are autodetected, define them dnl at the point where the autodetection occurs or would occur, dnl so that the user gets immediate feedback on the results of the dnl autodetection. if test "$GNU_MALLOC" = "yes"; then AC_DEFINE(GNU_MALLOC) elif test "$with_system_malloc" = "yes"; then AC_DEFINE(USE_SYSTEM_MALLOC) elif test "$with_debug_malloc" = "yes"; then AC_DEFINE(USE_DEBUG_MALLOC) AC_DEFINE(USE_SYSTEM_MALLOC) fi test "$with_i18n3" = "yes" && AC_DEFINE(I18N3) test "$GCC" = "yes" && AC_DEFINE(USE_GCC) test "$external_widget" = "yes" && AC_DEFINE(EXTERNAL_WIDGET) test "$quick_build" = "yes" && AC_DEFINE(QUICK_BUILD) test "$with_purify" = "yes" && AC_DEFINE(PURIFY) test "$with_quantify" = "yes" && AC_DEFINE(QUANTIFY) test "$with_pop" = "yes" && AC_DEFINE(MAIL_USE_POP) test "$with_kerberos" = "yes" && AC_DEFINE(KERBEROS) test "$with_hesiod" = "yes" && AC_DEFINE(HESIOD) test "$use_union_type" = "yes" && AC_DEFINE(USE_UNION_TYPE) test "$use_regex_malloc" = "yes" && AC_DEFINE(REGEX_MALLOC) test "$pdump" = "yes" && AC_DEFINE(PDUMP) test "$with_ipv6_cname" = "yes" && AC_DEFINE(IPV6_CANONICALIZE) dnl ------------------------------- dnl Report on what we decided to do dnl ------------------------------- ( dnl /etc/osversion is on SONY NEWS-OS if test -f /etc/osversion; then dnl SONY NEWS-OS echo "osversion: `cat /etc/osversion`" else echo "uname -a: `uname -a`" fi echo "" echo "$0 $quoted_arguments" ) > Installation if test ! -z ${emacs_beta_version} ; then if test -z "${emacs_is_beta}" ; then xemacs_betaname=".${emacs_beta_version}" else xemacs_betaname="-b${emacs_beta_version}" fi else xemacs_betaname="" fi dnl Start stdout redirection to '| tee -a Installation' ( echo " XEmacs ${emacs_major_version}.${emacs_minor_version}${xemacs_betaname} \"$xemacs_codename\" configured for \`$canonical'. " echo " Compilation / Installation:" echo " Source code location: $srcdir" echo " Installation prefix: $prefix" if test -n "$site_includes"; then echo " Additional header files: $site_includes" fi if test -n "$site_libraries"; then echo " Additional libraries: $site_libraries" fi if test -n "$site_prefixes"; then echo " Additional prefixes: $site_prefixes" fi if test -n "$runpath"; then echo " Runtime library search path: $runpath" fi if test -n "$opsysfile" then echo " Operating system description file: \`$opsysfile'" else echo " Not using any operating system description file" fi if test -n "$machfile" then echo " Machine description file: \`$machfile'" else echo " Not using any machine description file" fi echo " Compiler: $CC $CFLAGS" dnl Let's save some helpful-for-debugging info like compiler and libc versions.. dnl First, see if it's gcc - the same check works everyplace... case "$CC" in gcc*) echo " Compiler version: `$CC --version | sed 1q`" echo " Compiler specs file: `$CC -v 2>&1 | sed 's/.* \([[^ ]]\)/\1/' | sed 1q`" ;; dnl non-gcc machine-specific magic - contributions welcome *) case "$canonical" in *-*-aix* ) dnl Yes, it's this ugly for AIX... realcc=`which $CC` dnl Might be a symlink created by replaceCset command if test -L $realcc ; then ccdir=`dirname $realcc` ccprog=`/bin/ls -l $realcc | sed 's/.* \([[^ ]]\)/\1/'` dnl This doesn't handle ../../xlc type stuff, but I've not seen one... case $ccprog in */*) realcc=$ccprog;; *) realcc=$ccdir/$ccprog;; esac fi lpp=`lslpp -wqc $realcc | cut -f2 -d:` if test ! -z "$lpp" ; then lppstr=`lslpp -Lqc $lpp` lpplev=`echo "$lppstr" | cut -f3 -d:` lppdesc=`echo "$lppstr" | cut -f8 -d:` fi if test ! -z "$lpplev" ; then echo " Compiler version: $lpp $lpplev - $lppdesc" else echo " Compiler version: (unknown version)" fi ;; *-*-solaris*) ccvers=`$CC -V 2>&1 | sed 1q` if test ! -z "$ccvers" ; then echo " Compiler version: $ccvers" fi ;; alpha*-dec-osf*) ccvers=`$CC -V | tr '\n' ' '` if test ! -z "$ccvers" ; then echo " Compiler version: $ccvers" fi ;; mips-sgi-irix*) ccvers=`$CC -version` if test ! -z "$ccvers" ; then echo " Compiler version: $ccvers" fi ;; dnl Intel C++ Compiler on Linux i[[3-9]]86-pc-linux) ccvers=`$CC -V 2>&1 | sed -n 's@^Intel.*Version @@'p` if test ! -z "$ccvers" ; then echo " Compiler version: $ccvers" fi ;; *) echo " Compiler version: $CC on $canonical";; esac esac echo " Relocating allocator for buffers: $rel_alloc" echo " GNU version of malloc: ${GNU_MALLOC}${GNU_MALLOC_reason}" case "$ld_switch_site" in *nocombreloc*) echo " Linking with \`-z nocombreloc'. - Consider configuring with --pdump." ;; esac dnl Now get the libc version - contributions welcome case "$canonical" in *-*-linux*) if test -f /etc/redhat-release ; then echo " libc: `rpm -q glibc`"; dnl need a Debian and Suse check here... else echo "Need to guess glibc1/2/etc here"; fi ;; *-*-aix*) echo " libc: bos.rte.libc `lslpp -Lqc bos.rte.libc | cut -f3 -d:`" ;; *-*-solaris*) libc=`pkginfo -l SUNWcsl | grep VERSION: | awk '{print $2}'` echo " libc: SUNWcsl $libc" ;; mips-sgi-irix*) echo " IRIX version: `uname -sRm`'" ;; alpha*-dec-osf*) dnl Another ugly case (cd /usr/.smdb.; libc=` grep -h libc.so *.inv | awk '$9 == "f" {print $12}' | tr '\n' ','` echo " libc: $libc" ) ;; *) echo " libc: system-provided libc on $canonical" ;; esac echo " Window System:" if test "$with_msw" = "yes"; then echo " Compiling in support for the Microsoft window system." fi if test "$with_x11" = "yes"; then echo " Compiling in support for the X window system:" echo " - X Windows headers location: $x_includes" echo " - X Windows libraries location: $x_libraries" if test "$with_xauth" != yes; then echo " - Xau (X authority) not available." fi if test "$with_xmu" != yes; then echo " - Xmu library not available; substituting equivalent routines." fi if test "$with_wmcommand" != no; then echo " - Handling WM_COMMAND properly." fi fi if test "$need_motif" = "yes" ; then echo " Compiling in support for Motif." if test "$have_lesstif" = "yes"; then echo " - Using LessTif implementation." fi echo " *WARNING* Many versions of Motif are buggy, requiring workarounds." echo " You are likely to experience slow redisplay." echo " You may need to install vendor patches to Motif." echo " See PROBLEMS for more information." fi if test "$need_athena" = "yes"; then echo " Compiling in support for the Athena widget set:" echo " - Athena headers location: $athena_h_path" echo " - Athena library to link: $athena_lib" fi case "$with_menubars" in gtk ) echo " Using GTK menubars." ;; lucid ) echo " Using Lucid menubars." ;; motif ) echo " Using Motif menubars." echo " *WARNING* The Motif menubar implementation is currently buggy." echo " We recommend using the Lucid menubar instead." echo " Re-run configure with --with-menubars='lucid'." ;; msw ) echo " Using MS-Windows menubars." ;; esac case "$with_scrollbars" in gtk ) echo " Using GTK scrollbars." ;; lucid ) echo " Using Lucid scrollbars." ;; motif ) echo " Using Motif scrollbars." ;; athena ) echo " Using Athena scrollbars." ;; msw ) echo " Using MS-Windows scrollbars." ;; esac case "$with_dialogs" in gtk ) echo " Using GTK dialog boxes." ;; motif ) echo " Using Motif dialog boxes." if test "$unexec" = "unexaix.o"; then if test "`uname -v`" = 4 -a "`uname -r`" -ge 3; then echo " *WARNING* The Motif dialog boxes cause problems on AIX 4.3 and higher." echo " We recommend using the Athena dialog boxes instead." echo " Install libXaw and re-run configure with --with-dialogs='athena'." echo " Read the PROBLEMS file for more information." fi; fi ;; athena ) echo " Using Athena dialog boxes." ;; msw ) echo " Using MS-Windows dialog boxes." ;; esac case "$with_widgets" in gtk ) echo " Using GTK native widgets." ;; motif ) echo " Using Motif native widgets." ;; athena ) echo " Using Athena native widgets." ;; msw ) echo " Using MS-Windows native widgets." ;; esac if test "$with_dragndrop" = yes; then echo " Compiling in support for Drag'n'Drop (EXPERIMENTAL)." echo " - Drag'n'Drop prototype: $dragndrop_proto." fi echo " TTY:" test "$with_ncurses" = yes && echo " Compiling in support for ncurses." test "$with_gpm" = yes && echo " Compiling in support for GPM (General Purpose Mouse)." echo " Images:" test "$with_gif" = yes && echo " Compiling in support for GIF images (builtin)." if test "$with_xpm" = yes; then echo " Compiling in support for XPM images." elif test "$with_x11" = yes; then echo " WARNING: -----------------------------------------------------------" echo " WARNING: Compiling without XPM image support." if test "$xpm_problem" != ""; then echo " Reason: $xpm_problem" fi echo " WARNING: You should strongly consider installing XPM." echo " WARNING: Otherwise toolbars and other graphics will look suboptimal." echo " WARNING: (a copy may be found in ftp://ftp.xemacs.org/pub/xemacs/aux)" echo " WARNING: -----------------------------------------------------------" fi if test "$with_png" = yes; then echo " Compiling in support for PNG images." elif test "$window_system" != "none"; then echo " WARNING: -----------------------------------------------------------" echo " WARNING: Compiling without PNG image support." if test "$png_problem" != ""; then echo " Reason: $png_problem" fi echo " WARNING: You should strongly consider installing the PNG libraries." echo " WARNING: Otherwise certain images and glyphs may not display." echo " WARNING: (a copy may be found in ftp://ftp.xemacs.org/pub/xemacs/aux)" echo " WARNING: -----------------------------------------------------------" fi test "$with_jpeg" = yes && echo " Compiling in support for JPEG images." test "$with_tiff" = yes && echo " Compiling in support for TIFF images." test "$with_xface" = yes && echo " Compiling in support for X-Face message headers." echo " Sound:" test "$with_native_sound" = yes && echo " Compiling in support for sound (native)." test "$with_nas_sound" = yes && echo " Compiling in support for NAS (network audio system)." test "$old_nas" = yes && echo " - NAS library lacks error trapping; will play synchronously." test "$with_esd_sound" = yes && echo " Compiling in support for ESD (Enlightened Sound Daemon)." echo " Databases:" test "$with_database_berkdb" = yes && echo " Compiling in support for Berkeley database." test "$with_database_dbm" = yes && echo " Compiling in support for DBM." test "$with_database_gdbm" = yes && echo " Compiling in support for GNU DBM." test "$with_ldap" = yes && echo " Compiling in support for LDAP." if test "$with_postgresql" = yes; then echo " Compiling in support for PostgreSQL." echo " - Using PostgreSQL header file: $libpq_fe_h_file" test "$with_postgresqlv7" = yes && echo " - Using PostgreSQL V7 bindings." fi echo " Internationalization:" test "$with_mule" = yes && echo " Compiling in support for Mule (multi-lingual Emacs)." test "$with_file_coding" = yes && echo " Compiling in support for file coding." test "$with_xim" != no && echo " Compiling in support for XIM (X11R5+ I18N input method)." test "$with_xim" = motif && echo " - Using Motif to provide XIM support." test "$with_xim" = xlib && echo " - Using raw Xlib to provide XIM support." test "$with_xfs" = yes && echo " - Using XFontSet to provide bilingual menubar." test "$with_canna" = yes && echo " Compiling in support for Canna on Mule." if test "$with_wnn" = yes; then echo " Compiling in support for the WNN input method on Mule." test "$with_wnn6" = yes && echo " - Using WNN version 6." fi test "$with_i18n3" = yes && echo " Compiling in support for I18N level 3 (doesn't currently work)." echo " Mail:" test "$with_pop" = yes && echo " Compiling in support for POP mail retrieval." test "$with_kerberos" = yes && echo " Compiling in support for Kerberos POP authentication." test "$with_hesiod" = yes && echo " Compiling in support for Hesiod POP server access." test -n "$mail_locking" && echo " Compiling in support for \"$mail_locking\" mail spool file locking method." echo " Other Features:" test "$with_ipv6_cname" = no && echo " Inhibiting IPv6 canonicalization at startup." test "$with_tooltalk" = yes && echo " Compiling in support for ToolTalk." test "$with_workshop" = yes && echo " Compiling in support for Sun WorkShop." test "$with_socks" = yes && echo " Compiling in support for SOCKS." test "$with_dnet" = yes && echo " Compiling in support for DNET." test "$with_modules" = "yes" && echo " Compiling in support for dynamic shared object modules." if test "$use_union_type" = yes; then echo " WARNING: ---------------------------------------------------------" echo " Using the union type for Lisp_Objects." echo " Union type has been implicated in hard-to-debug runtime crashes." echo " Do NOT use this build of XEmacs for ordinary work. See PROBLEMS." echo " WARNING: ---------------------------------------------------------" fi if test "$use_regex_malloc" = no; then echo " WARNING: -----------------------------------------------------------" echo " Using alloca to allocate the failure stack." echo " It may be impossible to detect stack exhaustion, and you will crash." echo " Do NOT use this build of XEmacs for ordinary work." echo " WARNING: -----------------------------------------------------------" fi test "$pdump" = yes && echo " Using the new portable dumper." test "$debug" = yes && echo " Compiling in support for extra debugging code." test "$usage_tracking" = yes && echo " Compiling in support for active usage tracking (Sun internal)." if test "$error_check_extents $error_check_typecheck $error_check_bufpos $error_check_gc $error_check_malloc $error_check_glyphs" \ != "no no no no no no"; then echo " WARNING: ---------------------------------------------------------" echo " WARNING: Compiling in support for runtime error checking." echo " WARNING: XEmacs will run noticeably more slowly as a result." echo " WARNING: Error checking is on by default for XEmacs beta releases." echo " WARNING: ---------------------------------------------------------" fi echo "" ) | tee -a Installation dnl echo "The above configure report is appended to \"Installation\" file." echo "" dnl ----------------------------------- dnl Now generate config.h and Makefiles dnl ----------------------------------- dnl This has to be called in order for this variable to get into config.status AC_SUBST(internal_makefile_list) # Remove any trailing slashes in these variables. test -n "$prefix" && prefix=`echo '' "$prefix" | sed -e 's:^ ::' -e 's,\([[^/]]\)/*$,\1,'` test -n "$exec_prefix" && exec_prefix=`echo '' "$exec_prefix" | sed -e 's:^ ::' -e 's,\([[^/]]\)/*$,\1,'` dnl Build Makefile.in's from Makefile.in.in's dnl except ./Makefile from $srcdir/Makefile.in for file in $internal_makefile_list; do test "$file" = src/Makefile.in && \ file="src/Makefile.in:src/Makefile.in.in:src/depend" XE_APPEND($file, ac_output_files) done ac_output_files="$ac_output_files src/paths.h lib-src/config.values" test "$with_modules" = "yes" && XE_APPEND(lib-src/ellcc.h, ac_output_files) AC_OUTPUT($ac_output_files, [for dir in . $MAKE_SUBDIR; do ( cd $dir rm -f junk.c < Makefile.in \ sed -e '/^# Generated/d' \ -e 's%/\*\*/#.*%%' \ -e 's/^ *# */#/' \ dnl Delete Makefile.in.in comment lines -e '/^##/d' \ dnl Pass through CPP directives unchanged -e '/^#/ { p d }' \ dnl Quote other lines to protect from CPP substitution -e '/./ { s/\([[\"]]\)/\\\1/g s/^/"/ s/$/"/ }' > junk.c; dnl Create a GNUmakefile and Makefile from Makefile.in. changequote(<<,>>)dnl dnl CPP_MAKEFILE(CPPFLAGS,filename) define(<>, echo creating $dir/<<$2>> $CPP -I. -I${top_srcdir}/src <<$1>> junk.c \ dnl Delete line directives inserted by $CPP | sed -e 's/^\#.*//' \ dnl Delete spurious blanks inserted by $CPP -e 's/^[ TAB][ TAB]*$//'\ -e 's/^ /TAB/' \ dnl Delete blank lines -e '/^[ ]*$/d' \ dnl Restore lines quoted above to original contents. -e '/^\"/ { s/\\\([\"]\)/\1/g s/^[ TAB]*\"// s/\"[ TAB]*$// }' > Makefile.new chmod 444 Makefile.new mv -f Makefile.new <<$2>> )dnl CPP_MAKEFILE CPP_MAKEFILE(,Makefile) CPP_MAKEFILE(-DUSE_GNU_MAKE,GNUmakefile) changequote([,])dnl rm -f junk.c ) done dnl Append AC_DEFINE information to lib-src/config.values dnl (AC_SUBST information is already there (see config.values.sh). sed < config.status >> lib-src/config.values \ -e '/{ac_dA}.*{ac_dB}.*{ac_dC}.*{ac_dD}$/!d' \ -e 's/\${ac_dA}\(.*\)\${ac_dB}.*\${ac_dC}\(.*\)\${ac_dD}/\1 \2/' \ -e 's/^\([[^ ]]*\) $/\1 ""/' \ -e 's/ 1$/ t/' ], [CPP="$CPP" top_srcdir="$srcdir" MAKE_SUBDIR="$MAKE_SUBDIR" ])dnl xemacs-21.4.22/configure.usage0000644000175000017500000003411010030645056014245 0ustar acsacsUsage: configure [--OPTION[=VALUE] ...] [CONFIGURATION] Set compilation and installation parameters for XEmacs, and report. CONFIGURATION is an optional architecture-vendor-os triple, such as `sparc-sun-solaris2.7'. When possible, omit it; configure will detect it. Conventions for options: - Boolean options may be explicitly enabled by using `--OPTION=yes' and explicitly disabled by using `--OPTION=no'. `--OPTION' (with no argument) is equivalent to `--OPTION=yes'. `--without-FEATURE' is a synonym for `--with-FEATURE=no'. Denoted `(Bool)' below. - Enumerated options accept one type from a specified list. These usually accept `--OPTION=no' to disable it entirely, and `--OPTION=yes' often has a useful default. Denoted `(Enum)'. - Set options accept one or more types from a list of implementations of the feature. All specified implementations will be included. Prefix a type with `no' to disable only that implementation (e.g., `--with-sound=nonas' to disable NAS). The special values `none' and `all' must be first in the list if used. They change the defaults for all types individually from autodetect to `no' or `yes' respectively. `--with-sound=none,native' and `--with-sound=noesd,nonas,native' have the same effect. Denoted `(Set)'. - Other options have special, option-specific formats. Options marked with a (*) are auto-detected. If auto-detected and not explicitly specified, normally - Boolean options default to `yes'. - Enumerated options default to the first detected type in an option-specific priority. Possible defaults are marked with (*) and listed in order. - Set options default to all detected types. Some options are provided mainly to disable features which are on by default. These are indicated by specifying `--OPTION=no'. Explicitly specifying an autodetected option which defaults to `yes' makes a failure to detect signal a fatal configure error. Use colons (or quoted spaces) to separate directory names in option values which are PATHs (i.e. lists of directories). Many features require external packages to be installed. configure will fail if an explicitly requested feature depends on an uninstalled package. On many Linux systems, you must install -devel versions of the package. The results of configure tests are saved in config.log, which is useful for diagnosing problems. Caching of configure results is disabled. If successful, configure leaves its status in config.status. If unsuccessful after disturbing the status quo, it removes config.status. General options: --help Issue this usage message. --verbose Accepted but ignored. --extra-verbose Display more information, useful for debugging. Compilation options: --compiler=PROG C compiler to use --with-gcc (*) (Bool) Use GCC to compile XEmacs. --cflags=FLAGS Compiler flags (such as `-O') --cpp=PROG Set C preprocessor (e.g. `/usr/ccs/lib/cpp', `cc -E') --cppflags=FLAGS C preprocessor flags (e.g. `-I/foo' or `-Dfoo=bar') --libs=LIBS Additional libraries (e.g. `-lfoo') --ldflags=FLAGS Additional linker flags (e.g. `-L/foo') --site-includes=PATH List of directories to search first for header files --site-libraries=PATH List of directories to search first for libraries --site-prefixes=PATH List of directories to search for include/ and lib/ subdirectories, just after 'site-includes' and 'site-libraries' --site-runtime-libraries=PATH List of ALL directories to search for dynamically linked libraries at run time --dynamic (*) (Bool) Link dynamically if supported by system. The default is system-dependent. --srcdir=DIR Use the XEmacs source files in DIR. Requires a Make with VPATH; GNU Make is recommended. Installation options: --prefix=DIR Install files below DIR. Defaults to `/usr/local'. --with-prefix=no (Bool) Compile the value of `--prefix' into XEmacs. --infodir=DIR Install XEmacs Info manuals and dir in DIR. --moduledir=DIR Install dynamic modules in DIR. You may also specify any of the `path' variables found in Makefile.in.in, including `--bindir', `--libdir', `--docdir', `--lispdir', `--sitelispdir', `--datadir', `--mandir' and so on. These options are DEPRECATED; see INSTALL. Runtime search path options: --with-site-modules=no (Bool) Search directories in the XEmacs hierarchy named `site-modules' before the installed module directories. --with-site-lisp (Bool) Search a site-lisp directory in the XEmacs hierarchy before the packaged Lisp. DEPRECATED. --package-path=PATH Directories to search for packages to dump with xemacs. PATH splits into three parts separated by double colons (::), an `early', a `late', and a `last' part, corresponding to their position in the various system paths: The `early' part is always first, the `late' part somewhere in the middle, and the `last' part at the very back. Only the `late' part gets seen at dump time. If PATH has only one component, it is `late'. With two components, the first is `early', the second is `late'. --infopath=PATH Directories to search for Info documents, info dir and localdir files if run-time searching fails. Window-system options: --with-gtk (Bool) Use GTK on the X Window System. (EXPERIMENTAL) --with-gnome (Bool) Use GNOME on the X Window System. (EXPERIMENTAL) --with-x11 (*) (Bool) Support the X Window System. --x-includes=DIR Search for X header files in DIR. --x-libraries=DIR Search for X libraries in DIR. --with-msw (*) (Bool) Support MS Windows as a window system (only under Cygwin and MinGW). `--with-msw=no' may be needed on *nix systems with Wine installed. --with-wmcommand=no (Bool) Compile without realized leader window which will keep the WM_COMMAND property. --with-xmu=no (*) (Bool) For systems whose vendors don't ship Xmu. GUI component options: Select the widget set used to implement components, Lucid, Motif, or Athena. If `--with-gtk', `--with-gnome', or `--with-msw' are used or implied, treat component options as Bool. The `lucid' widgets are a homebrew set, emulating Motif but faster. Lucid toolbars, menubars, and scrollbars are implemented in Xt. Lucid dialogs and misc widgets wrap and enhance Motif (or Athena if Motif is not found). Several enhanced (eg, 3d) Athena libraries may be used, but the default is the X11R6 `libXaw' (flat) widgets. Use `--with-athena' to explicitly specify which library to link against. --with-toolbars=no (Bool) Don't compile with any toolbar support. --with-menubars=TYPE (Enum) Types: `lucid'(*), `motif', or `no'. *WARNING* The Motif menubar is currently broken. --with-scrollbars=TYPE (Enum) Types: `lucid'(*), `motif', `athena', or `no'. --with-dialogs=TYPE (Enum) Types: `lucid'(*), `motif', `athena', or `no'. --with-widgets=TYPE (Enum) Types: `lucid', `motif', `athena', or `no'(*). --with-athena=TYPE (Enum) Link with the TYPE Athena library. Types: `xaw' [flat], `3d', `next', `95', or `xpm'. --with-dragndrop (*) Support generic drag and drop API. (EXPERIMENTAL) --with-cde Support CDE drag and drop API (requires dragndrop). --with-offix Support OffiX drag and drop API (requires dragndrop). *WARNING* OffiX support may interfere with use of multiple X displays. If the two servers are from different vendors, the results may be unpredictable. TTY (character terminal) options: --with-tty=no Don't support ttys. --with-ncurses (*) Use the ncurses library for tty support. --with-gpm (*) Support the GPM mouse library for ttys. Image options: --with-xpm (*) Support XPM images. Toolbars depend on it. --with-png (*) Support PNG images. Strongly recommended. --with-jpeg (*) Support JPEG images. --with-tiff (*) Support TIFF images. --with-xface (*) Support X-Face mail headers. Requires libcompface. --with-gif=no Omit the (builtin) support for GIF images. Sound options: --with-sound=TYPES (*) (Set) Compile with sound support. Types: `native', `nas' and `esd'. Defaults to `noesd', the others are autodetected. --native-sound-lib=LIB Native sound support library. Needed on Suns with `--with-sound=native,nas' because both sound libraries are called libaudio. Database options: --with-database=TYPES (*) (Set) Support key:value databases. Types: `berkdb', `dbm', or `gnudbm'. `dbm' and `gnudbm' are incompatible with each other. --with-ldap (*) (Bool) Support the LDAP protocol. --with-postgresql (*) (Bool) Support the PostgreSQL RDBMS. Mail options: --mail-locking=TYPE (*) (Enum) Specify the locking method used by movemail. Types: `lockf', `flock', `dot', `locking' or `mmdf'. --with-pop (Bool) Support POP for mail retrieval. --with-kerberos (Bool) Support Kerberos-authenticated POP. --with-hesiod (Bool) Support Hesiod to get the POP server host. Internationalization options: --with-mule (Bool) Support non-Latin-1 (including Asian) languages. --with-xim=TYPE (Enum) Support X Input Method protocol. Types: `motif'(*), `xlib', `no'. Requires Mule. --with-canna (*) (Bool) Support the Canna input method. Requires Mule. --with-wnn (*) (Bool) Support the Wnn input methods. Requires Mule. --with-wnn6 (*) (Bool) Support the commercial version of Wnn. --with-xfs (Bool) Support internationalized menubar via XFontSets. `--with-menubars=lucid' (the default) is desirable. Incompatible with `--with-xim=motif'. Additional features: --with-workshop (Bool) Support the Sun WorkShop (formerly Sparcworks) development environment. --with-tooltalk (*) (Bool) Support the ToolTalk IPC protocol. --with-socks (Bool) Support SOCKS (an Internet proxy). --with-dnet (*) (Bool) Support DECnet. --with-netinstall (Bool) Support installation over the internet. Only functional on MS Windows platforms. --with-ipv6-cname (Bool) IPv6-ly correct host name canonicalization. IPv6 is always supported if detected; this option prevents blocking and unwanted dialup for CNAME lookup. --external-widget (Bool) Export XEmacs as a text widget. (EXPERIMENTAL) --with-modules (*) (Bool) Support for dynamically loaded libraries (Dynamic Shared Objects). (EXPERIMENTAL) --pdump (Bool) Somewhat experimental portable dumper. --with-file-coding (Bool) Support detection and translation of newline conventions. Default: `yes' on Windows, `no' on Unix. --with-clash-detection=no (Bool) Detect other instances editing the same file. Memory allocation options: --rel-alloc (Bool) Use the relocating allocator (default for this option is system-dependent). --with-dlmalloc=no (Bool) Don't use Doug Lea malloc on systems that have it in the standard C library. --with-system-malloc (Bool) Use the system malloc, instead of GNU malloc. --with-debug-malloc (Bool) Use the debugging malloc package. --use-regex-malloc=no (Bool) Use malloc (not alloca) for regex fail stack. Setting this to 'no' allows crashes - it may be impossible to detect stack exhaustion, and your XEmacs will crash. Debugging options: --debug (Bool) Compile with support for debugging XEmacs. (Causes code-size increase and little loss of speed.) --memory-usage-stats (Bool) Compile with additional code to allow you to determine what XEmacs's memory is being used for. Causes a small code increase but no loss of speed. Normally enabled when `--debug' is given. --error-checking=TYPES (Set) Compile with internal error-checking added. Causes noticeable loss of speed. Types: `bufpos', `byte-code', `extents', `gc', `glyphs', `malloc', and `typecheck'. The default value is `none'. --use-union-type (Bool) Define Lisp_Object as a union, not an int. Use for strict _static_ type-checking. Implicated in system-dependent, hard-to-debug crashes. See PROBLEMS. Do NOT use in production builds. --no-doc-file (Bool) Don't rebuild the DOC file unless it's missing. Only use during development. --quick-build (Bool) Don't GC when dumping. Implies `--no-doc-file'. --with-quantify (Bool) Support performance debugging using Quantify. --with-purify (Bool) Support memory debugging using Purify. The configure script also recognizes some environment variables, each of which is equivalent to a corresponding configure flag. Configure flags take precedence over environment variables, if both are specified. environment corresponding variable configure flag ----------- -------------- CC --compiler CPP --cpp CFLAGS --cflags CPPFLAGS --cppflags LDFLAGS --ldflags LIBS --libs LD_RUN_PATH --site-runtime-libraries For more details on the install process, consult the INSTALL file. xemacs-21.4.22/install.sh0000755000175000017500000001106506256071507013260 0ustar acsacs#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" tranformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 xemacs-21.4.22/move-if-change0000644000175000017500000000020106256071507013751 0ustar acsacs#!/bin/sh if test -r $2 then if cmp $1 $2 > /dev/null then echo $2 is unchanged rm -f $1 else mv -f $1 $2 fi else mv -f $1 $2 fi xemacs-21.4.22/version.sh0000644000175000017500000000033411126031613013253 0ustar acsacs#!/bin/sh emacs_is_beta= emacs_major_version=21 emacs_minor_version=4 emacs_beta_version=22 xemacs_codename="Instant Classic" emacs_kit_version= infodock_major_version=4 infodock_minor_version=0 infodock_build_version=8 xemacs-21.4.22/dynodump/0000755000175000017500000000000011126557244013106 5ustar acsacsxemacs-21.4.22/dynodump/i386/0000755000175000017500000000000011126557244013577 5ustar acsacsxemacs-21.4.22/dynodump/i386/_relocate.c0000644000175000017500000000744106343202246015700 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ #pragma ident "@(#) $Id: _relocate.c,v 1.4 1995/06/26 20:12:41 georgn Exp $ - SMI" /* LINTLIBRARY */ #include #include #include #include "_dynodump.h" void update_reloc(Cache *ocache, Cache *_ocache, Cache *icache, Cache *_icache, Half shnum) { Shdr *shdr; Rel *rels; int reln, cnt; Cache *orcache, *ircache; /* * Set up to readh the output relocation table. */ shdr = _ocache->c_shdr; rels = (Rel *) _ocache->c_data->d_buf; reln = shdr->sh_size / shdr->sh_entsize; /* * Determine the section that is being relocated. */ orcache = &ocache[shdr->sh_info]; shdr = _icache->c_shdr; ircache = &icache[shdr->sh_info]; /* * Determine the section that is being relocated. Note that for this * stupid architecture the .rel.plt actually contains offsets into the * .got. */ if (strcmp(_ocache->c_name, ".rel.plt")) { orcache = &ocache[shdr->sh_info]; shdr = _icache->c_shdr; ircache = &icache[shdr->sh_info]; } else { Half ndx; Cache * __ocache = ocache; for (__ocache++, ndx = 1; ndx != shnum; ndx++, __ocache++) { if (strcmp(__ocache->c_name, ".got") == 0) { orcache = __ocache; ircache = &icache[ndx]; break; } } } /* * Loop through the relocation table. */ for (cnt = 0; cnt < reln; cnt++, rels++) { unsigned char *iaddr, *oaddr; Addr off; unsigned char type = ELF_R_TYPE(rels->r_info); /* * Ignore some relocations as these can be safely carried out * twice (they simply override any existing data). In fact, * some relocations like __iob's copy relocation must be carried * out each time the process restarts, otherwise stdio blows up. */ if ((type == R_386_COPY) || (type == R_386_NONE)) continue; /* * If we are required to restore the relocation location * to its value prior to relocation, then read the * location's original contents from the input image and * copy it to the output image. */ off = rels->r_offset - ircache->c_shdr->sh_addr; iaddr = (unsigned char *) ircache->c_data->d_buf + off; oaddr = (unsigned char *) orcache->c_data->d_buf + off; *(unsigned long *) oaddr = *(unsigned long *) iaddr; } } xemacs-21.4.22/dynodump/i386/machdep.h0000644000175000017500000000607006343202246015346 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ #pragma ident "@(#) $Id: machdep.h,v 1.2 1995/02/16 22:58:43 georgn Exp $ - SMI" /* * Global include file for all sgs Intel machine dependent macros, constants * and declarations. */ #ifndef MACHDEP_DOT_H #define MACHDEP_DOT_H #include #include /* * Make machine class dependent data types transparent to the common code */ #define Word Elf32_Word #define Sword Elf32_Sword #define Half Elf32_Half #define Addr Elf32_Addr #define Off Elf32_Off #define Byte unsigned char #define Ehdr Elf32_Ehdr #define Shdr Elf32_Shdr #define Sym Elf32_Sym #define Rel Elf32_Rel #define Phdr Elf32_Phdr #define Dyn Elf32_Dyn #define Boot Elf32_Boot #define Verdef Elf32_Verdef #define Verdaux Elf32_Verdaux #define Verneed Elf32_Verneed #define Vernaux Elf32_Vernaux #define Versym Elf32_Versym /* * Make machine class dependent functions transparent to the common code */ #define ELF_R_TYPE ELF32_R_TYPE #define ELF_R_INFO ELF32_R_INFO #define ELF_R_SYM ELF32_R_SYM #define ELF_ST_BIND ELF32_ST_BIND #define ELF_ST_TYPE ELF32_ST_TYPE #define ELF_ST_INFO ELF32_ST_INFO #define elf_fsize elf32_fsize #define elf_getehdr elf32_getehdr #define elf_getphdr elf32_getphdr #define elf_newehdr elf32_newehdr #define elf_newphdr elf32_newphdr #define elf_getshdr elf32_getshdr #define elf_xlatetof elf32_xlatetof #define elf_xlatetom elf32_xlatetom /* * Make relocation types transparent to the common code */ #define M_REL_SHT_TYPE SHT_REL /* section header type */ #endif xemacs-21.4.22/dynodump/i386/uninit.c0000644000175000017500000000337706343202246015255 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * This is where you put processor specific un-initialization things * to deal with "initialization idempotency issues". */ void dynodump_uninit(void) { return; } xemacs-21.4.22/dynodump/ppc/0000755000175000017500000000000011126557244013670 5ustar acsacsxemacs-21.4.22/dynodump/ppc/_relocate.c0000644000175000017500000001767706510246717016014 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ #pragma ident "@(#) $Id: _relocate.c,v 1.3 1995/06/26 20:16:39 georgn Exp $ - SMI" /* LINTLIBRARY */ #include #include #include "_dynodump.h" /* * NOTE: These macros will work reliably only on 32-bit 2's * complement machines. The type of P in all cases should * by unsigned char * */ #if defined(_BIG_ENDIAN) #define GET4(P) ((long)(((unsigned long)(P)[0] << 24) | \ ((unsigned long)(P)[1] << 16) | \ ((unsigned long)(P)[2] << 8) | \ (unsigned long)(P)[3])) #define PUT4(V, P) { \ (P)[0] = (unsigned char)((V) >> 24); \ (P)[1] = (unsigned char)((V) >> 16); \ (P)[2] = (unsigned char)((V) >> 8); \ (P)[3] = (unsigned char)(V); \ } #define GEThalf(P) ((long) (((unsigned long) (P)[0] << 8) | \ ((unsigned long) (P)[1]))) #define GETword(P) GET4(P) #define PUThalf(V, P) { \ (P)[0] = ((V) >> 8); \ (P)[1] = ((V)); \ } #define PUTword(V, P) PUT4(V, P) #elif defined(_LITTLE_ENDIAN) #define GET4(P) ((long)(((unsigned long)(P)[0]) | \ ((unsigned long)(P)[1] << 8) | \ ((unsigned long)(P)[2] << 16) | \ ((unsigned long)(P)[3]) << 24)) #define PUT4(V, P) { \ (P)[0] = (unsigned char)(V); \ (P)[1] = (unsigned char)((V) >> 8); \ (P)[2] = (unsigned char)((V) >> 16); \ (P)[3] = (unsigned char)((V) >> 24); \ } #define GEThalf(P) ((long) (((unsigned long) (P)[0]) | \ ((unsigned long) (P)[1] << 8))) #define GETword(P) GET4(P) #define PUThalf(V, P) { \ (P)[0] = (V); \ (P)[1] = ((V) >> 8); \ } #define PUTword(V, P) PUT4(V, P) #endif /* defined(_LITTLE_ENDIAN) */ /* * NAME VALUE FIELD CALCULATION * * R_PPC_NONE 0 none none * R_PPC_ADDR32 1 word32 S + A * R_PPC_ADDR24 2 low24 (S + A) >> 2 * R_PPC_ADDR16 3 half16 S + A * R_PPC_ADDR16_LO 4 half16 #lo(S + A) * R_PPC_ADDR16_HI 5 half16 #hi(S + A) * R_PPC_ADDR16_HA 6 half16 #ha(S + A) * R_PPC_ADDR14 7 low14 (S + A) >> 2 * R_PPC_ADDR14_BRTAKEN 8 low14 (S + A) >> 2 * R_PPC_ADDR14_BRNTAKEN 9 low14 (S + A) >> 2 * R_PPC_REL24 10 low24 (S + A - P) >> 2 * R_PPC_REL14 11 low14 (S + A - P) >> 2 * R_PPC_REL14_BRTAKEN 12 low14 (S + A - P) >> 2 * R_PPC_REL14_BRNTAKEN 13 low14 (S + A - P) >> 2 * R_PPC_GOT16 14 half16 G + A * R_PPC_GOT16_LO 15 half16 #lo(G + A) * R_PPC_GOT16_HI 16 half16 #hi(G + A) * R_PPC_GOT16_HA 17 half16 #ha(G + A) * R_PPC_PLT24 18 low24 (L + A - P) >> 2 * R_PPC_COPY 19 none none * R_PPC_GLOB_DAT 20 word32 S + A * R_PPC_JMP_SLOT 21 none see below * R_PPC_RELATIVE 22 word32 B + A * R_PPC_LOCAL24PC 23 low24 see below * R_PPC_UADDR32 24 word32 S + A * R_PPC_UADDR16 25 half16 S + A * * This is Figure 4-3: Relocation Types from the Draft Copy of * the ABI, Printed on 7/25/94. * * The field column specifies how much of the data * at the reference address is to be used. The data are assumed to be * right-justified with the least significant bit at the right. * In the case of plt24 addresses, the reference address is * assumed to be that of a 6-word PLT entry. The address is the right- * most 24 bits of the third word. */ static void move_reloc(unsigned char *iaddr, unsigned char *oaddr, unsigned char type) { switch(type) { case R_PPC_NONE: break; case R_PPC_ADDR32: case R_PPC_UADDR32: PUTword(GETword(iaddr), oaddr); break; case R_PPC_ADDR24: case R_PPC_REL24: case R_PPC_PLT24: case R_PPC_LOCAL24PC: /* XXX - big assumption here that the original contents were masked * properly. If this assumption proves correct, then these 24bit * cases can be folded into the above 32bit cases. */ PUTword(GETword(iaddr), oaddr); break; case R_PPC_ADDR16: case R_PPC_UADDR16: case R_PPC_GOT16: PUThalf(GEThalf(iaddr), oaddr); break; case R_PPC_ADDR16_LO: case R_PPC_GOT16_LO: /* XXX - more assumptions which if proved correct, we can * do some folding with above cases */ PUThalf(GEThalf(iaddr), oaddr); break; case R_PPC_ADDR16_HI: case R_PPC_GOT16_HI: /* XXX - more assumptions which if proved correct, we can * do some folding with above cases */ PUThalf(GEThalf(iaddr), oaddr); break; case R_PPC_ADDR16_HA: case R_PPC_GOT16_HA: /* XXX - more assumptions which if proved correct, we can * do some folding with above cases */ PUThalf(GEThalf(iaddr), oaddr); break; case R_PPC_ADDR14: case R_PPC_ADDR14_BRTAKEN: case R_PPC_ADDR14_BRNTAKEN: case R_PPC_REL14: case R_PPC_REL14_BRTAKEN: case R_PPC_REL14_BRNTAKEN: /* XXX - big assumption here that the original contents were masked * properly. If this assumption proves correct, then these 14bit * cases can be folded into the above 32bit cases. */ PUTword(GETword(iaddr), oaddr); break; case R_PPC_COPY: break; case R_PPC_GLOB_DAT: case R_PPC_RELATIVE: PUTword(GETword(iaddr), oaddr); break; case R_PPC_JMP_SLOT: break; default: break; } } void update_reloc(Cache *ocache, Cache *_ocache, Cache *icache, Cache *_icache, Half shnum) { Shdr *shdr; Rel *rels; int reln, cnt; Cache *orcache, * ircache; /* * Set up to read the output relocation table. */ shdr = _ocache->c_shdr; rels = (Rel *)_ocache->c_data->d_buf; reln = shdr->sh_size / shdr->sh_entsize; /* * Determine the section that is being relocated. */ orcache = &ocache[shdr->sh_info]; shdr = _icache->c_shdr; ircache = &icache[shdr->sh_info]; /* * Loop through the relocation table. */ for (cnt = 0; cnt < reln; cnt++, rels++) { unsigned char type = ELF_R_TYPE(rels->r_info); /* * Ignore some relocations as these can safely be carried out * twice (they simply override any existing data). In fact, * some relocations like __iob's copy relocation must be carried * out each time the process restarts otherwise stdio blows up. */ if ((type == R_PPC_COPY) || (type == R_PPC_JMP_SLOT) || (type == R_PPC_NONE)) continue; { unsigned char *iaddr, *oaddr; Addr off; /* * If we are required to restore the relocation location * to its value prior to relocation, then read the * locations original contents from the input image and * copy it to the output image. */ off = rels->r_offset - ircache->c_shdr->sh_addr; iaddr = (unsigned char *)ircache->c_data->d_buf + off; oaddr = (unsigned char *)orcache->c_data->d_buf + off; move_reloc(iaddr, oaddr, type); } } } xemacs-21.4.22/dynodump/ppc/machdep.h0000644000175000017500000000566406343202270015444 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ #pragma ident "@(#) $Id: machdep.h,v 1.2 1995/02/16 22:58:49 georgn Exp $ - SMI" /* * Global include file for all sgs PowerPC machine dependent macros, constants * and declarations. */ #ifndef MACHDEP_DOT_H #define MACHDEP_DOT_H #include #include /* * Make machine class dependent data types transparent to the common code */ #define Word Elf32_Word #define Sword Elf32_Sword #define Half Elf32_Half #define Addr Elf32_Addr #define Off Elf32_Off #define Byte unsigned char #define Ehdr Elf32_Ehdr #define Shdr Elf32_Shdr #define Sym Elf32_Sym #define Rel Elf32_Rela #define Phdr Elf32_Phdr #define Dyn Elf32_Dyn #define Boot Elf32_Boot #define Verdef Elf32_Verdef #define Verdaux Elf32_Verdaux #define Verneed Elf32_Verneed #define Vernaux Elf32_Vernaux #define Versym Elf32_Versym /* * Make machine class dependent functions transparent to the common code */ #define ELF_R_TYPE ELF32_R_TYPE #define ELF_R_INFO ELF32_R_INFO #define ELF_R_SYM ELF32_R_SYM #define ELF_ST_BIND ELF32_ST_BIND #define ELF_ST_TYPE ELF32_ST_TYPE #define ELF_ST_INFO ELF32_ST_INFO #define elf_fsize elf32_fsize #define elf_getehdr elf32_getehdr #define elf_getphdr elf32_getphdr #define elf_newehdr elf32_newehdr #define elf_newphdr elf32_newphdr #define elf_getshdr elf32_getshdr #define M_REL_SHT_TYPE SHT_RELA /* section header type */ #endif xemacs-21.4.22/dynodump/ppc/uninit.c0000644000175000017500000000407006343202270015332 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * This is where you put processor specific un-initialization things * to deal with "initialization idempotency issues". */ extern void __delete_all_module_tags(void); extern void __exithandle(void); void dynodump_uninit(void) { /* There are 2 possible ways to do this. It is not clear which way will be blessed by the Sun Gods. Both appear to work. */ /* _exithandle has recently been blessed. */ /* __delete_all_module_tags(); */ _exithandle(); return; } xemacs-21.4.22/dynodump/Makefile.in.in0000644000175000017500000000432307265370773015573 0ustar acsacs## Makefile for dynodump subdirectory in XEmacs ## Copyright (C) 1995 Board of Trustees, University of Illinois ## Copyright (C) 1996, 1997 Sun Microsystems, Inc. ## This file is part of XEmacs. ## XEmacs is free software; you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by the ## Free Software Foundation; either version 2, or (at your option) any ## later version. ## XEmacs is distributed in the hope that it will be useful, but WITHOUT ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## for more details. ## You should have received a copy of the GNU General Public License ## along with XEmacs; see the file COPYING. If not, write to ## the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ## Boston, MA 02111-1307, USA. ## Synched up with: Not synched with FSF. ## For performance and consistency, no built-in rules. .SUFFIXES: .SUFFIXES: .c .o .i .h @SET_MAKE@ SHELL = /bin/sh RM = rm -f ## ==================== Things "configure" will edit ==================== CC=@CC@ CFLAGS=@CFLAGS@ ARCH=@dynodump_arch@ srcdir=@srcdir@ ## ========================= start of cpp stuff ========================= #define NO_SHORTNAMES #define NOT_C_CODE #include "../src/config.h" #ifdef USE_GNU_MAKE vpath %.c @srcdir@ vpath %.h @srcdir@ #else VPATH=@srcdir@ #endif #ifdef USE_GCC pic_arg = -fpic #else pic_arg = -K pic #endif INCLUDES = -I${srcdir} -I${srcdir}/$(ARCH) ALL_CFLAGS = ${CFLAGS} ${pic_arg} ${INCLUDES} OBJS = _relocate.o dynodump.o syms.o uninit.o %.o : %.c $(CC) -c $(ALL_CFLAGS) $< all:: dynodump.so dynodump.so: ${srcdir}/_dynodump.h $(OBJS) PATH=/usr/ccs/bin:/bin:$$PATH ld -o dynodump.so -G $(OBJS) -lelf -lmapmalloc _relocate.o: ${srcdir}/$(ARCH)/_relocate.c $(CC) -c $(ALL_CFLAGS) ${srcdir}/$(ARCH)/_relocate.c uninit.o: ${srcdir}/$(ARCH)/uninit.c $(CC) -c $(ALL_CFLAGS) ${srcdir}/$(ARCH)/uninit.c .PHONY: mostlyclean clean distclean realclean extraclean mostlyclean: $(RM) *.o *.i core clean: mostlyclean $(RM) *.so *.so.1 distclean: clean $(RM) GNUmakefile Makefile Makefile.in TAGS realclean: distclean extraclean: realclean $(RM) *~ \#* xemacs-21.4.22/dynodump/README0000644000175000017500000000552706343202205013764 0ustar acsacs DYNODUMP -------- Dynodump, not to be confused with DinoTurd (as seen in Jurassic Park), is a shared object that provides one function: int dynodump(char *new_file); dynodump(), called from a running program will write a new executable in new_file a la unexec() in GNU Emacs. The difference lies in the relocations. dynodump() will create an image with any relocations (which were performed by the run-time dynamic linker) undone. This allows the new image to be run in a different environment. There is, however, one potentially major caveat. If a symbol reference gets updated during the running of the calling program, its updated value will be lost. An example (with additional blank lines for legibility): $ cat lib.c char _foo[] = "hello"; char _bar[] = "world"; $ cc -G -o lib.so lib.c $ cat prog.c extern char _foo, _bar; int beenhere = 0; char * foo = &_foo; char * bar = &_bar; int main(void) { (void) printf("%d: foo = %x\n", beenhere, foo); (void) printf("%d: bar = %x, ", beenhere, bar); if (!beenhere) { beenhere = 1; bar++; dynodump("newfile"); } (void) printf("%x\n", bar); } $ cc -o prog prog.c -R. lib.so dynodump.so $ ./prog 0: foo = ef7503cc 0: bar = ef7503d2, ef7503d3 $ ./newfile 1: foo = ef7503cc 1: bar = ef7503d2, ef7503d2 Notice that in the run of newfile, bar points at "world" instead of the perhaps expected "orld". Dynodump supports sparc, intel, and power pc architectures. Dynodump is buildable with GNU make and gcc. If it works for you with these tools, let me know. unexec() -------- Also supplied is an unexsol2.c which belongs in the XEmacs src directory with the other unex*.c files. The src/s/sol2.h should be have the following added to it: #ifdef UNEXEC #undef UNEXEC #endif #define UNEXEC unexsol2.o This unexec() will attempt to dlopen() the dynodump.so to find the dynodump function. The default is "../dynodump/dynodump.so" which should be appropriate for the typical XEmacs build (unless you used configure to set up separate build and source trees). You may change it by setting the DYNODUMP environment variable to the full path of the dynodump shared object. Other notes: If you're using the 4.0 C compiler from Sun, you should arrange to shut off the incremental linker. This is done with the -xildoff option to the compiler. The common.mk and testsuite/Makefile files have commentary and ready made lines for uncommenting for this purpose. If you're interested in playing with the UltraSPARC specific options to the aforementioned compiler, then the same makefiles have some commentary and flags settings to point you in that direction. Questions: dynodump() was developed by Rod.Evans@Eng.Sun.COM and Georg.Nikodym@Canada.Sun.COM. If you have questions, feel free to ask them but be aware that Rod, "don't know jack about emacs." xemacs-21.4.22/dynodump/_dynodump.h0000644000175000017500000000450606343202205015247 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ #pragma ident "@(#) $Id: _dynodump.h,v 1.5 1996/05/23 18:39:07 georgn Exp $ - SMI" #ifndef _DYNODUMP_DOT_H #define _DYNODUMP_DOT_H #include #include "machdep.h" /* General rounding macro */ #define S_ROUND(x, a) (((int)(x) + (((int)(a) ? (int)(a) : 1) - 1)) & \ ~(((int)(a) ? (int)(a) : 1) - 1)) /* * Define a cache structure that is used to retain all elf section information. */ typedef struct cache { Elf_Scn *c_scn; Shdr *c_shdr; Elf_Data *c_data; char *c_name; } Cache; /* * Define any local prototypes. */ extern void update_dynamic(Cache *); extern void update_reloc(Cache *, Cache *, Cache *, Cache *, Half shnum); extern void update_sym(Cache *, Cache *, Addr); extern void dynodump_uninit(void); #endif xemacs-21.4.22/dynodump/dynodump.c0000644000175000017500000004175007265370773015131 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * dynodump(3x) dumps a running executable into a specified ELF file. The new * file consists of the memory contents of the original file together with any * heap. This heap is assigned to a new `.heap' section within the new file. * * The new file may be re-executed, and will contain any data modifications * made to the original image up until the time dynodump(3x) was called. * * The original image may have undergone relocations (performed by ld.so.1) * prior to control being transferred to the image. These relocations will * reside as the data copied from the image. To prevent subsequent executions * of the new image from undergoing the same relocations, any relocation entries * (besides copy or jump slot relocations) are nulled out. Note that copy * relocations such as required for __iob must be reinitialized each time the * process starts, so it is not sufficient to simply null out the .dynamic * sections relocation information. The effect of this is that if the new * image was bound to definitions in any shared object dependencies, then these * dependencies *must* reside in the same location as when dynodump(3x) was * called. Any changes to the shared object dependencies of the new image, or * uses of such things as LD_PRELOAD, may result in the bindings encoded in the * image becoming invalid. * * The following flags modify the data of the image created: * * RTLD_SAVREL save the original relocation data. Under this option any * relocation offset is reset to contain the same data as was * found in the images original file. * * This option allows relocation information to be retained in the * new image so that it may be re-executed when the new image is * run. This allows far greater flexibility as the new image can * now take advantage of new shared objects. * * Note. under this mechanism, any data item that undergoes * relocation and is then further modified during the execution of * the image before dynodump(3x) is called will lose the * modification that occurred during the applications execution. * * N.B. The above commentary is not quite correct in the flags have been hardwired * to RTLD_SAVREL. */ #pragma ident "@(#) $Id: dynodump.c,v 1.6.2.2 2000/09/20 02:39:17 martinb Exp $ - SMI" #define __EXTENSIONS__ 1 #include #include #include #include #include #include #include #include #include #include #include #include "machdep.h" #include "_dynodump.h" /* * Generic elf error message generator */ static int elferr(const char * str) { fprintf(stderr, "%s: %s\n", str, elf_errmsg(elf_errno())); return (1); } int dynodump (const char * file); int dynodump(const char * file) { Elf *ielf, *oelf; Ehdr *iehdr, *oehdr; Phdr *iphdr, *ophdr, *data_phdr = 0; Cache *icache, *ocache, *_icache, *_ocache; Cache *data_cache = 0, *shstr_cache = 0; Cache *heap_cache = 0; Word heap_sz = 0; Elf_Scn *scn; Shdr *shdr; Elf_Data *data, rundata; Half ndx, _ndx; int fd, _fd; Addr edata, _addr; char *istrs, *ostrs, *_ostrs, proc[16]; const char heap[] = ".heap"; prstatus_t pstat; /* make a call to the processor specific un-init stuff */ dynodump_uninit(); /* * Obtain a file descriptor for this process, * for the executable and get a prstatus_t * structure. */ sprintf(proc, "/proc/%ld", getpid()); if (((_fd = open(proc, O_RDONLY, 0)) == -1) || ((fd = ioctl(_fd, PIOCOPENM, (void *)0)) == -1) || (ioctl(_fd, PIOCSTATUS, &pstat) == -1)) { fprintf(stderr, "/proc: initialization error: %s\n", strerror(errno)); close(_fd); return (1); } close(_fd); /* * Initialize with the ELF library and make sure this is an executable * ELF file we're dealing with. */ elf_version(EV_CURRENT); if ((ielf = elf_begin(fd, ELF_C_READ, NULL)) == NULL) { close(fd); return (elferr("elf_begin")); } close(fd); if ((elf_kind(ielf) != ELF_K_ELF) || ((iehdr = elf_getehdr(ielf)) == NULL) || (iehdr->e_type != ET_EXEC)) { fprintf(stderr, "image is not an ELF executable\n"); elf_end(ielf); return (1); } /* * Elf_elf_header(iehdr); */ /* * Create the new output file. */ if ((fd = open(file, O_RDWR | O_CREAT | O_TRUNC, 0777)) == -1) { fprintf(stderr, "%s: open failed: %s\n", file, strerror(errno)); elf_end(ielf); return (1); } if ((oelf = elf_begin(fd, ELF_C_WRITE, NULL)) == NULL) { elf_end(ielf); close(fd); return (elferr("elf_begin")); } /* * Obtain the input program headers. Remember the data segments * program header entry as this will be updated later to reflect the * new .heap sections size. */ if ((iphdr = elf_getphdr(ielf)) == NULL) return (elferr("elf_getphdr")); for (ndx = 0, ophdr = iphdr; ndx != iehdr->e_phnum; ndx++, ophdr++) { /* * Save the program header that contains the NOBITS section, or * the last loadable program header if no NOBITS exists. * A NOBITS section translates to a memory size requirement that * is greater than the file data it is mapped from. */ if (ophdr->p_type == PT_LOAD) { if (ophdr->p_filesz != ophdr->p_memsz) data_phdr = ophdr; else if (data_phdr) { if (data_phdr->p_vaddr < ophdr->p_vaddr) data_phdr = ophdr; } else data_phdr = ophdr; } } if (data_phdr == 0) { fprintf(stderr, "no data segment found!\n"); return (0); } /* * Obtain the input files section header string table. */ if ((scn = elf_getscn(ielf, iehdr->e_shstrndx)) == NULL) return (elferr("elf_getscn")); if ((data = elf_getdata(scn, NULL)) == NULL) return (elferr("elf_getdata")); istrs = (char *) data->d_buf; /* * Construct a cache to maintain the input files section information. */ if ((icache = (Cache *) malloc(iehdr->e_shnum * sizeof (Cache))) == 0) { fprintf(stderr, "malloc failed: %s\n", strerror(errno)); return (1); } _icache = icache; _icache++; /* * Traverse each section from the input file. */ for (ndx = 1, scn = 0; (_icache->c_scn = elf_nextscn(ielf, scn)); ndx++, scn = _icache->c_scn, _icache++) { if ((_icache->c_shdr = shdr = elf_getshdr(_icache->c_scn)) == NULL) return (elferr("elf_getshdr")); if ((_icache->c_data = elf_getdata(_icache->c_scn, NULL)) == NULL) return (elferr("elf_getdata")); _icache->c_name = istrs + (size_t)(shdr->sh_name); /* * For each section that has a virtual address reestablish the * data buffer to point to the memory image. * * if (shdr->sh_addr) * _icache->c_data->d_buf = (void *)shdr->sh_addr; */ /* * Remember the last section of the data segment, the new .heap * section will be added after this section. * If we already have one, then set data_cache to the previous * section and set heap_cache to this one. */ if ((shdr->sh_addr + shdr->sh_size) == (data_phdr->p_vaddr + data_phdr->p_memsz)) { if (strcmp(_icache->c_name, heap) == 0) { #ifdef DEBUG printf("Found a previous .heap section\n"); #endif data_cache = _icache - 1; heap_cache = _icache; heap_sz = shdr->sh_size; } else { data_cache = _icache; } } /* * Remember the section header string table as this will be * rewritten with the new .heap name. */ if ((shdr->sh_type == SHT_STRTAB) && ((strcmp(_icache->c_name, ".shstrtab")) == 0)) shstr_cache = _icache; } if (data_cache == 0) { fprintf(stderr, "final data section not found!\n"); return (0); } /* * Determine the new .heap section to create. */ rundata.d_buf = (void *)(data_cache->c_shdr->sh_addr + data_cache->c_shdr->sh_size); rundata.d_size = (int)sbrk(0) - (int)rundata.d_buf; rundata.d_type = ELF_T_BYTE; rundata.d_off = 0; rundata.d_align = 1; rundata.d_version = EV_CURRENT; /* * From the new data buffer determine the new value for _end and _edata. * This will also be used to update the data segment program header. * * If we had a .heap section, then its size is part of the program * headers notion of data size. Because we're only going to output one * heap section (ignoring the one in the running binary) we need to * subtract the size of that which we're ignoring. */ if (heap_cache) { edata = S_ROUND((data_phdr->p_vaddr + data_phdr->p_memsz - heap_sz), rundata.d_align) + rundata.d_size; } else { edata = S_ROUND((data_phdr->p_vaddr + data_phdr->p_memsz), rundata.d_align) + rundata.d_size; } /* * We're now ready to construct the new elf image. * * Obtain a new elf header and initialize it with any basic information * that isn't calculated as part of elf_update(). Bump the section * header string table index to account for the .heap section we'll be * adding. */ if ((oehdr = elf_newehdr(oelf)) == NULL) return (elferr("elf_newehdr")); oehdr->e_entry = iehdr->e_entry; oehdr->e_machine = iehdr->e_machine; oehdr->e_type = iehdr->e_type; oehdr->e_flags = iehdr->e_flags; /* * If we already have a heap section, we don't need any adjustment */ if (heap_cache) oehdr->e_shstrndx = iehdr->e_shstrndx; else oehdr->e_shstrndx = iehdr->e_shstrndx + 1; #ifdef DEBUG printf("iehdr->e_flags = %x\n", iehdr->e_flags); printf("iehdr->e_entry = %x\n", iehdr->e_entry); printf("iehdr->e_shstrndx= %d\n", iehdr->e_shstrndx); printf("iehdr->e_machine = %d\n", iehdr->e_machine); printf("iehdr->e_type = 0x%x\n", iehdr->e_type); printf("oehdr->e_machine = %d\n", oehdr->e_machine); printf("oehdr->e_type = 0x%x\n", oehdr->e_type); #endif /* * Obtain a new set of program headers. Initialize these with the same * information as the input program headers and update the data segment * to reflect the new .heap section. */ if ((ophdr = elf_newphdr(oelf, iehdr->e_phnum)) == NULL) return (elferr("elf_newphdr")); for (ndx = 0; ndx != iehdr->e_phnum; ndx++, iphdr++, ophdr++) { *ophdr = *iphdr; if (data_phdr == iphdr) ophdr->p_filesz = ophdr->p_memsz = edata - ophdr->p_vaddr; } /* * Obtain a new set of sections. */ _icache = icache; _icache++; for (ndx = 1; ndx != iehdr->e_shnum; ndx++, _icache++) { /* * Skip the heap section of the running executable */ if (_icache == heap_cache) continue; /* * Create a matching section header in the output file. */ if ((scn = elf_newscn(oelf)) == NULL) return (elferr("elf_newscn")); if ((shdr = elf_getshdr(scn)) == NULL) return (elferr("elf_getshdr")); *shdr = *_icache->c_shdr; /* * Create a matching data buffer for this section. */ if ((data = elf_newdata(scn)) == NULL) return (elferr("elf_newdata")); *data = *_icache->c_data; /* * For each section that has a virtual address reestablish the * data buffer to point to the memory image. Note, we skip * the plt section. */ if ((shdr->sh_addr) && (!((shdr->sh_type == SHT_PROGBITS) && (strcmp(_icache->c_name, ".plt") == 0)))) data->d_buf = (void *)shdr->sh_addr; /* * Update any NOBITS section to indicate that it now contains * data. */ if (shdr->sh_type == SHT_NOBITS) shdr->sh_type = SHT_PROGBITS; /* * Add the new .heap section after the last section of the * present data segment. If we had a heap section, then * this is the section preceding it. */ if (data_cache == _icache) { if ((scn = elf_newscn(oelf)) == NULL) return (elferr("elf_newscn")); if ((shdr = elf_getshdr(scn)) == NULL) return (elferr("elf_getshdr")); shdr->sh_type = SHT_PROGBITS; shdr->sh_flags = SHF_ALLOC | SHF_WRITE; if ((data = elf_newdata(scn)) == NULL) return (elferr("elf_newdata")); *data = rundata; } /* * Update the section header string table size to reflect the * new section name (only if we didn't already have a heap). */ if (!heap_cache) { if (shstr_cache && (shstr_cache == _icache)) { data->d_size += sizeof (heap); } } } /* * Write out the new image, and obtain a new elf descriptor that will * allow us to write to the new image. */ if (elf_update(oelf, ELF_C_WRITE) == -1) return (elferr("elf_update")); elf_end(oelf); if ((oelf = elf_begin(fd, ELF_C_RDWR, NULL)) == NULL) return (elferr("elf_begin")); if ((oehdr = elf_getehdr(oelf)) == NULL) return (elferr("elf_getehdr")); /* * Obtain the output files section header string table. */ if ((scn = elf_getscn(oelf, oehdr->e_shstrndx)) == NULL) return (elferr("elf_getscn")); if ((data = elf_getdata(scn, NULL)) == NULL) return (elferr("elf_getdata")); ostrs = _ostrs = (char *) data->d_buf; *_ostrs++ = '\0'; /* * Construct a cache to maintain the output files section information. */ if ((ocache = (Cache *)malloc(oehdr->e_shnum * sizeof (Cache))) == 0) { fprintf(stderr, "malloc failed: %s\n", strerror(errno)); return (1); } _ocache = ocache; _ocache++; _icache = icache; _icache++; /* * Traverse each section from the input file rebuilding the section * header string table as we go. */ _ndx = _addr = 0; for (ndx = 1, scn = 0; (_ocache->c_scn = elf_nextscn(oelf, scn)); ndx++, scn = _ocache->c_scn, _ocache++, _icache++) { const char *strs; if (_icache == heap_cache) { #ifdef DEBUG printf("ignoring .heap section in input\n"); #endif _icache++; } if ((_ocache->c_shdr = shdr = elf_getshdr(_ocache->c_scn)) == NULL) return (elferr("elf_getshdr")); if ((_ocache->c_data = elf_getdata(_ocache->c_scn, NULL)) == NULL) return (elferr("elf_getdata")); /* * If were inserting the new .heap section, insert the new * section name and initialize its virtual address. */ if (_addr) { strs = heap; shdr->sh_addr = S_ROUND(_addr, shdr->sh_addralign); _addr = 0; } else { strs = istrs + (size_t)(_icache->c_shdr->sh_name); } strcpy(_ostrs, strs); shdr->sh_name = _ostrs - ostrs; _ocache->c_name = _ostrs; _ostrs += strlen(strs) + 1; /* * If we've inserted a new section any later section may need * their sh_link fields updated. * If we already had a heap section, then this is not required. */ if (!heap_cache) { if (_ndx) { if (_ocache->c_shdr->sh_link >= _ndx) _ocache->c_shdr->sh_link++; } } /* * If this is the last section of the original data segment * determine sufficient information to initialize the new .heap * section which will be obtained next. */ if (data_cache == _icache) { _ndx = ndx + 1; _addr = shdr->sh_addr + shdr->sh_size; _icache--; data_cache = 0; } } /* * Now that we have a complete description of the new image update any * sections that are required. * * o update the value of _edata and _end. * * o reset any relocation entries if necessary. */ _ocache = &ocache[1]; _icache = &icache[1]; for (ndx = 1; ndx < oehdr->e_shnum; ndx++, _ocache++, _icache++) { if ((_ocache->c_shdr->sh_type == SHT_SYMTAB) || (_ocache->c_shdr->sh_type == SHT_DYNSYM)) update_sym(ocache, _ocache, edata); if (_ocache->c_shdr->sh_type == M_REL_SHT_TYPE) update_reloc(ocache, _ocache, icache, _icache, oehdr->e_shnum); } if (elf_update(oelf, ELF_C_WRITE) == -1) return (elferr("elf_update")); elf_end(oelf); elf_end(ielf); return (0); } xemacs-21.4.22/dynodump/syms.c0000644000175000017500000000470706343202206014243 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * Update the value of the `_edata' and `_end' symbols. */ #pragma ident "@(#) $Id: syms.c,v 1.2 1995/03/06 22:39:22 georgn Exp $ - SMI" #include #include #include "machdep.h" #include "_dynodump.h" void update_sym(Cache * cache, Cache * _cache, Addr edata) { char *strs; Sym *syms; Shdr *shdr; int symn, cnt; /* * Set up to read the symbol table and its associated string table. */ shdr = _cache->c_shdr; syms = (Sym *) _cache->c_data->d_buf; symn = shdr->sh_size / shdr->sh_entsize; strs = (char *) cache[shdr->sh_link].c_data->d_buf; /* * Loop through the symbol table looking for `_end' and `_edata'. */ for (cnt = 0; cnt < symn; cnt++, syms++) { char *name = strs + syms->st_name; if (strcmp(name, "_end") && strcmp(name, "_edata")) continue; syms->st_value = edata; } } xemacs-21.4.22/dynodump/sparc/0000755000175000017500000000000011126557244014216 5ustar acsacsxemacs-21.4.22/dynodump/sparc/_relocate.c0000644000175000017500000001747006510246717016331 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * Update the value of the `_edata' and `_end' symbols. */ #pragma ident "@(#) $Id: _relocate.c,v 1.4 1995/06/26 20:13:26 georgn Exp $ - SMI" #include #include #include "machdep.h" #include "_dynodump.h" #define GETbyte(P) ((long)((unsigned long)(P)[0])) #define GEThalf(P) ((long)(((unsigned long)(P)[0] << 8) | \ ((unsigned long)(P)[1]))) #define GETword(P) ((long)(((unsigned long)(P)[0] << 24) | \ ((unsigned long)(P)[1] << 16) | \ ((unsigned long)(P)[2] << 8) | \ (unsigned long)(P)[3])) #define GETdisp30(P) (GETword(P) & 0x3fffffff) #define GETdisp22(P) (GETword(P) & 0x3fffff) #define GETdisp16(P) (((GETword(P) & 0x300000) >> 6) | \ (GETword(P) & 0x3fff)) #define GETdisp19(P) (GETword(P) & 0x7ffff) #define GETimm22(P) (GETword(P) & 0x3fffff) #define GETimm5(P) (GEThalf((P)+2) & 0x1f) #define GETimm6(P) (GEThalf((P)+2) & 0x2f) #define GETimm7(P) (GEThalf((P)+2) & 0x3f) #define GETsimm13(P) (GEThalf((P)+2) & 0x1fff) #define GETsimm10(P) (GEThalf((P)+2) & 0x3ff) #define GETsimm11(P) (GEThalf((P)+2) & 0x7ff) #define GETplt22(P) (GETword((P)+8) & 0x3fffff) #define PUTbyte(V, P) (P)[0] = (V) #define PUThalf(V, P) (P)[0] = ((V) >> 8); \ (P)[1] = ((V)) #define PUTword(V, P) (P)[0] = (unsigned char)((V) >> 24); \ (P)[1] = (unsigned char)((V) >> 16); \ (P)[2] = (unsigned char)((V) >> 8); \ (P)[3] = (unsigned char)(V) #define PUTdisp30(V, P) { \ unsigned long int temp; \ temp = GETword(P) & ~0x3fffffff; \ temp |= ((V) & 0x3fffffff); \ PUTword(temp, P); \ } #define PUTdisp22(V, P) { \ unsigned long int temp; \ temp = GETword(P) & ~0x3fffff; \ temp |= ((V) & 0x3fffff); \ PUTword(temp, P); \ } #define PUTimm22(V, P) { \ unsigned long int temp; \ temp = GETword(P) & ~0x3fffff; \ temp |= ((V) & 0x3fffff); \ PUTword(temp, P); \ } #define PUTimm5(V, P) { \ unsigned long int temp; \ temp = GEThalf(P+2) & ~0x1f; \ temp |= ((V) & 0x1f); \ PUThalf(temp, (P+2)); \ } #define PUTimm6(V, P) { \ unsigned long int temp; \ temp = GEThalf(P+2) & ~0x2f; \ temp |= ((V) & 0x2f); \ PUThalf(temp, (P+2)); \ } #define PUTimm7(V, P) { \ unsigned long int temp; \ temp = GEThalf(P+2) & ~0x3f; \ temp |= ((V) & 0x3f); \ PUThalf(temp, (P+2)); \ } #define PUTsimm13(V, P) { \ unsigned long int temp; \ temp = GEThalf(P+2) & ~0x1fff; \ temp |= ((V) & 0x1fff); \ PUThalf(temp, (P+2)); \ } #define PUTplt22(V, P) { \ unsigned long int temp; \ temp = GETword((P)+8) & ~0x3fffff; \ temp |= ((V) & 0x3fffff); \ PUTword(temp, ((P)+8)); \ } #define PUTsimm10(V, P) { \ unsigned long int temp; \ temp = GEThalf(P+2) & ~0x3ff; \ temp |= ((V) & 0x3ff); \ PUThalf(temp, (P+2)); \ } #define PUTsimm11(V, P) { \ unsigned long int temp; \ temp = GEThalf(P+2) & ~0x7ff; \ temp |= ((V) & 0x7ff); \ PUThalf(temp, (P+2)); \ } #define PUTdisp16(V, P) { \ unsigned long int temp; \ temp = GETword(P) & ~0x303fff; \ temp |= ((V) & 0xc000) << 6; \ temp |= ((V) & 0x3fff); \ PUTword(temp, P); \ } #define PUTdisp19(V, P) { \ unsigned long int temp; \ temp = GETword(P) & ~0x7ffff; \ temp |= ((V) & 0x7ffff); \ PUTword(temp, P); \ } static void move_reloc(unsigned char * iaddr, unsigned char * oaddr, unsigned char type) { switch (type) { case R_SPARC_8: case R_SPARC_DISP8: PUTbyte(GETbyte(iaddr), oaddr); break; case R_SPARC_16: case R_SPARC_DISP16: PUThalf(GEThalf(iaddr), oaddr); break; case R_SPARC_32: case R_SPARC_DISP32: case R_SPARC_GLOB_DAT: case R_SPARC_RELATIVE: case R_SPARC_UA32: PUTword(GETword(iaddr), oaddr); break; case R_SPARC_WDISP30: case R_SPARC_WPLT30: PUTdisp30(GETdisp30(iaddr), oaddr); break; case R_SPARC_WDISP22: case R_SPARC_PC22: PUTdisp22(GETdisp22(iaddr), oaddr); break; case R_SPARC_HI22: case R_SPARC_GOT22: case R_SPARC_22: PUTimm22(GETimm22(iaddr), oaddr); break; case R_SPARC_13: case R_SPARC_GOT13: PUTsimm13(GETsimm13(iaddr), oaddr); break; case R_SPARC_LO10: case R_SPARC_GOT10: case R_SPARC_PC10: #ifdef R_SPARC_10 case R_SPARC_10: #endif PUTsimm10(GETsimm10(iaddr), oaddr); break; #ifdef R_SPARC_11 case R_SPARC_11: PUTsimm11(GETsimm11(iaddr), oaddr); break; #endif #ifdef R_SPARC_WDISP16 case R_SPARC_WDISP16: PUTdisp16(GETdisp16(iaddr), oaddr); break; #endif #ifdef R_SPARC_WDISP19 case R_SPARC_WDISP19: PUTdisp19(GETdisp19(iaddr), oaddr); break; #endif #ifdef R_SPARC_5 case R_SPARC_5: PUTimm5(GETimm5(iaddr), oaddr); break; #endif #ifdef R_SPARC_6 case R_SPARC_6: PUTimm6(GETimm6(iaddr), oaddr); break; #endif #ifdef R_SPARC_7 case R_SPARC_7: PUTimm7(GETimm7(iaddr), oaddr); break; #endif default: break; } } void update_reloc(Cache *ocache, Cache *_ocache, Cache *icache, Cache *_icache, Half shnum) { Shdr *shdr; Rel *rels; int reln, cnt; Cache *orcache, *ircache; /* * Set up to read the output relocation table. */ shdr = _ocache->c_shdr; rels = (Rel *)_ocache->c_data->d_buf; reln = shdr->sh_size / shdr->sh_entsize; /* * Determine the section that is being relocated. */ orcache = &ocache[shdr->sh_info]; shdr = _icache->c_shdr; ircache = &icache[shdr->sh_info]; /* * Loop through the relocation table. */ for (cnt = 0; cnt < reln; cnt++, rels++) { unsigned char *iaddr, *oaddr; Addr off; unsigned char type = ELF_R_TYPE(rels->r_info); /* * Ignore some relocations as these can safely be carried out * twice (they simply override any existing data). In fact, * some relocations like __iob's copy relocation must be carried * out each time the process restarts otherwise stdio blows up. */ if ((type == R_SPARC_COPY) || (type == R_SPARC_JMP_SLOT) || (type == R_SPARC_NONE)) continue; /* * If we are required to restore the relocation location * to its value prior to relocation, then read the * locations original contents from the input image and * copy it to the output image. */ off = rels->r_offset - ircache->c_shdr->sh_addr; iaddr = (unsigned char *)ircache->c_data->d_buf + off; oaddr = (unsigned char *)orcache->c_data->d_buf + off; move_reloc(iaddr, oaddr, type); } } xemacs-21.4.22/dynodump/sparc/machdep.h0000644000175000017500000000576306343202276016000 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ #pragma ident "@(#) $Id: machdep.h,v 1.2 1995/02/16 22:58:55 georgn Exp $ - SMI" /* * Global include file for all sgs SPARC machine dependent macros, constants * and declarations. */ #ifndef MACHDEP_DOT_H #define MACHDEP_DOT_H #include #include /* * Make machine class dependent data types transparent to the common code */ #define Word Elf32_Word #define Sword Elf32_Sword #define Half Elf32_Half #define Addr Elf32_Addr #define Off Elf32_Off #define Byte unsigned char #define Ehdr Elf32_Ehdr #define Shdr Elf32_Shdr #define Sym Elf32_Sym #define Rel Elf32_Rela #define Phdr Elf32_Phdr #define Dyn Elf32_Dyn #define Boot Elf32_Boot #define Verdef Elf32_Verdef #define Verdaux Elf32_Verdaux #define Verneed Elf32_Verneed #define Vernaux Elf32_Vernaux #define Versym Elf32_Versym /* * Make machine class dependent functions transparent to the common code */ #define ELF_R_TYPE ELF32_R_TYPE #define ELF_R_INFO ELF32_R_INFO #define ELF_R_SYM ELF32_R_SYM #define ELF_ST_BIND ELF32_ST_BIND #define ELF_ST_TYPE ELF32_ST_TYPE #define ELF_ST_INFO ELF32_ST_INFO #define elf_fsize elf32_fsize #define elf_getehdr elf32_getehdr #define elf_getphdr elf32_getphdr #define elf_newehdr elf32_newehdr #define elf_newphdr elf32_newphdr #define elf_getshdr elf32_getshdr /* * Make relocation types transparent to the common code */ #define M_REL_SHT_TYPE SHT_RELA /* section header type */ #endif xemacs-21.4.22/dynodump/sparc/uninit.c0000644000175000017500000000343306343202277015671 0ustar acsacs/* * Copyright (c) 1995 by Sun Microsystems, Inc. * All rights reserved. * * This source code is a product of Sun Microsystems, Inc. and is provided * for unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify this source code without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. * SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY * OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT * EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS * ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN * NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. * * This source code is provided with no support and without any obligation on * the part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS * SOURCE CODE OR ANY PART THEREOF. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ /* * This is where you put processor specific un-initialization things * to deal with "initialization idempotency issues". */ void dynodump_uninit(void); void dynodump_uninit(void) { return; } xemacs-21.4.22/etc/0000755000175000017500000000000011126557407012023 5ustar acsacsxemacs-21.4.22/etc/CHARSETS0000644000175000017500000000636307265370774013203 0ustar acsacs######################### ## LIST OF CHARSETS ## Each line corresponds to one charset. ## The following attributes are listed in this order ## separated by a colon `:' in one line. ## CHARSET-SYMBOL-NAME, ## CHARSET-ID, ## DIMENSION (1 or 2) ## CHARS (94 or 96) ## BYTES (of multibyte form: 1, 2, 3, or 4), ## WIDTH (occupied column numbers: 1 or 2), ## DIRECTION (0:left-to-right, 1:right-to-left), ## ISO-FINAL-CHAR (character code of ISO-2022's final character) ## ISO-GRAPHIC-PLANE (ISO-2022's graphic plane, 0:GL, 1:GR) ## DESCRIPTION (describing string of the charset) tibetan-1-column:241:2:94:4:1:0:56:0:Tibetan 1 column glyph tibetan:252:2:94:4:2:0:55:0:Tibetan characters lao:167:1:94:3:1:0:49:0:Lao characters (ISO10646 0E80..0EDF) indian-1-column:240:2:94:4:1:0:54:0:Indian charset for 2-column width glyphs indian-2-column:251:2:94:4:2:0:53:0:Indian charset for 2-column width glyphs indian-is13194:225:1:94:3:2:0:53:1:Generic Indian charset for data exchange with IS 13194 ascii-right-to-left:166:1:94:3:1:1:66:0:ASCII (left half of ISO8859-1) with right-to-left direction chinese-cns11643-7:250:2:94:4:2:0:77:0:CNS11643 Plane 7 Chinese Traditional chinese-cns11643-6:249:2:94:4:2:0:76:0:CNS11643 Plane 6 Chinese Traditional chinese-cns11643-5:248:2:94:4:2:0:75:0:CNS11643 Plane 5 Chinese Traditional chinese-cns11643-4:247:2:94:4:2:0:74:0:CNS11643 Plane 4 Chinese Traditional chinese-cns11643-3:246:2:94:4:2:0:73:0:CNS11643 Plane 3 Chinese Traditional ethiopic:245:2:94:4:2:0:51:0:Ethiopic characters arabic-2-column:224:1:94:3:2:1:52:0:Arabic 2-column arabic-1-column:165:1:94:3:1:1:51:0:Arabic 1-column arabic-digit:164:1:94:3:1:0:50:0:Arabic digit vietnamese-viscii-upper:163:1:96:3:1:0:50:1:VISCII1.1 upper-case vietnamese-viscii-lower:162:1:96:3:1:0:49:1:VISCII1.1 lower-case ipa:161:1:96:3:1:0:48:1:IPA (International Phonetic Association) chinese-sisheng:160:1:94:3:1:0:48:0:SiSheng characters for PinYin/ZhuYin chinese-big5-2:153:2:94:3:2:0:49:0:Big5 Level-2 Chinese traditional chinese-big5-1:152:2:94:3:2:0:48:0:Big5 Level-1 Chinese traditional chinese-cns11643-2:150:2:94:3:2:0:72:0:CNS11643 Plane 2 Chinese traditional chinese-cns11643-1:149:2:94:3:2:0:71:0:CNS11643 Plane 1 Chinese traditional japanese-jisx0212:148:2:94:3:2:0:68:0:JISX0212 Japanese supplement korean-ksc5601:147:2:94:3:2:0:67:0:KSC5601 Korean Hangul and Hanja japanese-jisx0208:146:2:94:3:2:0:66:0:JISX0208.1983/1990 Japanese Kanji chinese-gb2312:145:2:94:3:2:0:65:0:GB2312 Chinese simplified japanese-jisx0208-1978:144:2:94:3:2:0:64:0:JISX0208.1978 Japanese Kanji (so called "old JIS") latin-iso8859-9:141:1:96:2:1:0:77:1:ISO8859-9 (Latin-5) cyrillic-iso8859-5:140:1:96:2:1:0:76:1:ISO8859-5 (Cyrillic) latin-jisx0201:138:1:94:2:1:0:74:0:JISX0201.1976 Japanese Roman katakana-jisx0201:137:1:94:2:1:0:73:1:JISX0201.1976 Japanese Kana hebrew-iso8859-8:136:1:96:2:1:1:72:1:ISO8859-8 (Hebrew) arabic-iso8859-6:135:1:96:2:1:1:71:1:ISO8859-6 (Arabic) greek-iso8859-7:134:1:96:2:1:0:70:1:ISO8859-7 (Greek) thai-tis620:133:1:96:2:1:0:84:1:TIS620.2529 (Thai) latin-iso8859-4:132:1:96:2:1:0:68:1:ISO8859-4 (Latin-4) latin-iso8859-3:131:1:96:2:1:0:67:1:ISO8859-3 (Latin-3) latin-iso8859-2:130:1:96:2:1:0:66:1:ISO8859-2 (Latin-2) latin-iso8859-1:129:1:96:2:1:0:65:1:ISO8859-1 (Latin-1) ascii:000:1:94:1:1:0:66:0:ASCII (ISO646 IRV) xemacs-21.4.22/etc/BETA0000644000175000017500000006167707631267334012505 0ustar acsacs -*- mode:outline -*- * Introduction ============== You are running a potentially unstable version of XEmacs. Please do not report problems with Beta XEmacs to comp.emacs.xemacs. Report them to , preferably with 'M-x report-xemacs-bug RET'. ** Mailing Lists ================ *** XEmacs Beta Mailing List ---------------------------- If you are not subscribed to the XEmacs beta list you should be. Currently all discussion of development issues, including bug reports and coding discussion, takes place on the XEmacs Beta mailing list. Only patches and administrative actions regarding patches are sent elsewhere (to the XEmacs Patches list). *** XEmacs Patches Mailing List ------------------------------- XEmacs Patches records proposed changes to XEmacs, and their disposition. It is open subscription, and all patches that are seriously proposed for inclusion in XEmacs should be posted here. You can follow progress of your patch by subscribing to the mailing list or in the archives. Besides patches, only actions by members of the XEmacs Review Board should be posted to this list. All discussion should be redirected to XEmacs Beta or XEmacs Design. *** XEmacs Design Mailing List ------------------------------ XEmacs Design is for design discussions such as adding major features or whole modules, or reimplementation of existing functions, to XEmacs. *** List Administrivia ---------------------- In the descriptions below, the word LIST (all uppercase) is a variable. Substitute "beta", "design", or "patches" as appropriate (to get "xemacs-beta" as the mailbox for the XEmacs Beta mailing list, or for its URL). The XEmacs mailing lists are managed by the Mailman mailing list package, and the usual Mailman commands work. Do not send mailing list requests to the main address (), always send them to . If you have problems with the list itself, they should be brought to the attention of the XEmacs Mailing List manager (the same mailbox, "list-manager", for all lists). All public mailing lists have searchable archives. The URL is http://list-archive.xemacs.org/xemacs-LIST Note that the xemacs-LIST-admin address is used internally by the Mailman software; it is NOT a synonym for xemacs-LIST-request. *** Managing your subscription via the Web ------------------------------------------ Subscription, unsubscription, and options (such as digests and temporarily suspending delivery) can be accomplished via the web interface at . *** Subscribing by e-mail ------------------------- Send an email message to with `subscribe' (without the quotes) as the BODY of the message. *** Unsubscribing by e-mail --------------------------- Send an email message to with `unsubscribe' (without the quotes) as the BODY of the message. ** Beta Release Schedule ======================== We would like to achieve a weekly or fortnightly release cycle (you know the Open Source model: release early, release often), and in a perfect world that would indeed be the case. There are at least three things that often get in the way of that goal: 1) The Release Manager has a life outside of XEmacs (hard to believe, I know, but true), 2) we like to make releases that will build (at least on the Release Manager's box), and 3) Murphy likes to throw a spanner in the works right when you least expect it (Murphy's Law: Whatever can go wrong, will go wrong). If you'd like to keep right up to date and ride the bleeding edge, use CVS (see ). If you can't use CVS for some reason and must use FTP, please let us know. it will make it more likely that we release betas more often. ** Reporting Problems ===================== The best way to get problems fixed in XEmacs is to submit good problem reports, 'M-x report-xemacs-bug RET' will help you do this (assuming you have a usable XEmacs). Since this is beta software, problems are certain to exist. Please read through all of part II of the XEmacs FAQ for an overview of problem reporting. Other items which are most important are: 1. Do not submit C stack backtraces without line numbers. Since it is possible to compile optimized with debug information with GCC it is never a good idea to compile XEmacs without the -g flag. XEmacs runs on a variety of platforms, and often it is not possible to recreate problems which afflict a specific platform. The line numbers in the C stack backtrace help isolate where the problem is actually occurring. 2. Attempt to recreate the problem starting with an invocation of XEmacs with `xemacs -no-autoloads'. Quite often, problems are due to package interdependencies, and the like. An actual bug in XEmacs should be reproducible in a default configuration without loading any special packages (or the one or two specific packages that cause the bug to appear). If you have trouble getting anything to work at all with the above invocation, use `xemacs -vanilla' instead. If you need to load your user init file or the site file to get the problem to occur, then it has something to do with them, and you should try to isolate the issue in those files. 3. A picture can be worth a thousand words. When reporting an unusual display, it is generally best to capture the problem in a screen dump and include that with the problem report. The easiest way to get a screen dump is to use the xv program and its grab function. Save the image as a GIF to keep bandwidth requirements down without loss of information. MIME is the preferred method for making the image attachments. ** Getting the Source ===================== In addition to the normal tar distribution, XEmacs source is now available via CVS. Please see http://www.xemacs.org/Develop/cvsaccess.html * Compiling Beta XEmacs ======================= ** Building an XEmacs from patches ================================== All beta releases of XEmacs are included with patches from the previous version in an attempt to keep bandwidth requirements down. Patches should be applied with the GNU patch program in something like the following. Let's say you're upgrading XEmacs 21.5-beta9 to XEmacs 21.5-beta10 and you have a full unmodified XEmacs 21.5-beta9 source tree to work with. Change to the top level directory and issue the shell command: $ gunzip -c /tmp/xemacs-21.5.9-21.5.10.patch.gz | patch -p1 After patching, check to see that no patches were missed by doing $ find . -name \*.rej -print Any rejections should be treated as serious problems to be resolved before building XEmacs. After seeing that there were no rejections, issue the commands $ ./config.status --recheck $ make beta > ./beta.err 2>&1 $ make check > ./xemacs-make-check.err 2>&1 Redirect the output from make to those files because you'll use them later when you send off a build report with 'M-x build-report RET' ** Building XEmacs from a full distribution =========================================== Locate a convenient place where you have at least 100MB of free space and issue the command $ gunzip -c /tmp/xemacs-21.5.10.tar.gz | tar xvf - (or simply `tar zxvf /tmp/xemacs-21.5.10.tar.gz' if you use GNU tar). cd to the top level directory and issue an appropriate configure command. One maintainer uses the following at the time of this writing: ./configure \ --extra-verbose \ --site-prefixes=/usr/local/pgsql:/usr/local/BerkeleyDB.4.1 \ --dynamic=yes --with-gtk=no --with-gnome=no --with-toolbars \ --with-wmcommand --with-athena=next --with-menubars=lucid \ --with-scrollbars=athena --with-dialogs=athena --with-widgets=athena \ --with-gif --with-sound=native,noesd --with-site-lisp=no \ --with-site-modules --pdump --with-mule --with-xfs --debug \ --error-checking=all --memory-usage-stats --use-kkcc \ --with-clash-detection Part of the configure output is a summary that looks something like the following. (this summary is also available as the file 'Installation' in the top directory of your build tree, and via the command 'M-x describe-installation RET'). uname -a: Linux eicq 2.4.20 #1 Wed Dec 18 02:14:29 EST 2002 i586 unknown ./configure '--extra-verbose' '--site-prefixes=/usr/local/pgsql:/usr/local/BerkeleyDB.4.1' '--dynamic=yes' '--with-gtk=no' '--with-gnome=no' '--with-toolbars' '--with-wmcommand' '--with-athena=next' '--with-menubars=lucid' '--with-scrollbars=athena' '--with-dialogs=athena' '--with-widgets=athena' '--with-gif' '--with-sound=native,noesd' '--with-site-lisp=no' '--with-site-modules' '--pdump' '--with-mule' '--with-xfs' '--debug' '--error-checking=all' '--memory-usage-stats' '--use-kkcc' '--with-clash-detection' XEmacs 21.5-b10 "burdock" (+CVS-20030131) configured for `i586-pc-linux'. Compilation / Installation: Source code location: /usr/local/src/xemacs Installation prefix: /usr/local Additional prefixes: /usr/local/pgsql /usr/local/BerkeleyDB.4.1 Operating system description file: `s/linux.h' Machine description file: `m/intel386.h' Compiler: gcc -Wall -Wno-switch -Winline -Wmissing-prototypes -Wsign-compare -Wundef -Wstrict-prototypes -Wshadow -Wmissing-declarations -O1 -ggdb3 -Wall -Wchar-subscripts -Wunused -Wundef -Wshadow -Wsign-compare -Wmissing-declarations -march=k6 Relocating allocator for buffers: no GNU version of malloc: yes - Using Doug Lea's new malloc from the GNU C Library. Window System: Compiling in support for the X window system: - X Windows headers location: /usr/X11/include - X Windows libraries location: /usr/X11/lib - Handling WM_COMMAND properly. Compiling in support for the Athena widget set: - Athena headers location: X11/neXtaw - Athena library to link: neXtaw Using Lucid menubars. Using Athena scrollbars. Using Athena dialog boxes. Using Athena native widgets. TTY: Compiling in support for ncurses. Compiling in support for GPM (General Purpose Mouse). Images: Compiling in support for GIF images (builtin). Compiling in support for XPM images. Compiling in support for PNG images. Compiling in support for JPEG images. Compiling in support for TIFF images. Compiling in support for X-Face message headers. Sound: Compiling in support for sound (native). Databases: Compiling in support for Berkeley database. Compiling in support for PostgreSQL. - Using PostgreSQL header file: libpq-fe.h - Using PostgreSQL V7 bindings. Internationalization: Compiling in support for Mule (multi-lingual Emacs). Compiling in support for XIM (X11R5+ I18N input method). - Using raw Xlib to provide XIM support. - Using XFontSet to provide bilingual menubar. Mail: Compiling in support for "dot-locking" mail spool file locking method. Other Features: Inhibiting IPv6 canonicalization at startup. Compiling in support for dynamic shared object modules. Using the new GC algorithms. Using the new portable dumper. Compiling in support for extra debugging code. WARNING: --------------------------------------------------------- WARNING: Compiling in support for runtime error checking. WARNING: XEmacs will run noticeably more slowly as a result. WARNING: Error checking is on by default for XEmacs beta releases. WARNING: --------------------------------------------------------- Then... $ make > ./beta.err 2>&1 $ make check > ./xemacs-make-check.err 2>&1 ...and you should have a working XEmacs. After you have verified that you have a functional editor, fire up your favorite mail program and send a build report to . Preferably this is best done from XEmacs, following these simple steps: M-x customize-group RET build-report RET M-x build-report RET See also If you create the report manually by other means, here is what the build report should include: 1. Your hardware configuration (OS version, etc.) 2. Version numbers of software in use (X11 version, system library versions if appropriate, graphics library versions if appropriate). If you're on a system like Linux, include all the version numbers you can because chances are it makes a difference. 3. The options given to configure 4. The configuration report illustrated above For convenience all of the above items are placed in a file called `Installation' in the top level build directory. They are also available by performing M-x describe-installation inside XEmacs. 5. Any other unusual items you feel should be brought to the attention of the developers. * Packages ========== [Note: these instructions have been partly updated, but not carefully reviewed in some time. Caveat tester.] Starting with XEmacs 21.1, much of the functionality of XEmacs has been unbundled into "the packages." For more information about the package system, see the Info nodes on Packages (in the XEmacs User Manual) and on Packaging (in the Lisp Reference). When bootstrapping XEmacs, you may need to manually install some packages (at least xemacs-base and efs). These packages are available by FTP at . ** Binary package installation ============================== Prerequisite: XEmacs 21.0-b1. Binary packages are complete entities that can be untarred at the top level of an XEmacs package hierarchy and work at runtime. To install files in this directory, run the command `M-x package-admin-add-binary-package' and fill in appropriate values to the prompts. ** Manual procedures for package management =========================================== Prerequisite: XEmacs 21.0 When adding and deleting files from a lisp directory the auto-autoloads.el (global symbols) and custom-load.el (Customization groups) must be kept in synch. Assuming one is manipulating a directory called `lisp-utils', the command to rebuild the auto-autoloads.el file is: xemacs -vanilla -batch \ -eval \("setq autoload-package-name \"lisp-utils\""\) \ -f batch-update-directory lisp-utils The command to rebuild the custom-load.el file is: xemacs -vanilla -batch -f Custom-make-dependencies lisp-utils To byte-compile both of these files the command is: xemacs -vanilla -batch -f batch-byte-compile \ lisp-utils/auto-autoloads.el lisp-utils/custom-load.el Of course, being a beta tester, you'd be aware that it is much easier to manage your XEmacs packages with PUI. ** Building XEmacs and XEmacs packages from scratch =================================================== To build everything completely from scratch isn't hard, just time consuming. *** Step 1 - grab the sources (core and packages) $ cvs -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs login [password: "cvs" (sans quotes)] $ cvs -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs co -d xemacs-21.5 xemacs $ cvs -d :pserver:cvs@cvs.xemacs.org:/pack/xemacscvs co packages *** Step 2 - build XEmacs $ cd xemacs-21.5 $ ./configure [options...] $ make > ./beta.err 2>&1 $ make check > ./xemacs-make-check.err 2>&1 And optionally: $ make install > ./xemacs-make-install.err 2>&1 *** Step 3 - build and install the packages $ cd packages $ cp Local.rules.template Local.rules Then edit Local.rules to suit your needs/environment see: (Info-goto-node "(xemacs)Local.rules file") for details about this file. And then: $ make install * Improving XEmacs ================= ** Creating patches for submission ================================== All patches to XEmacs that are seriously proposed for inclusion (eg, bug fixes) should be mailed to . Each patch will be reviewed by the patches review board, and will be acknowledged and added to the distribution, or rejected with an explanation. Progress of the patch is tracked on the XEmacs Patches mailing list, which is open subscription. (If a patch is simply intended to facilitate discussion, "I mean something that works like this but this is really rough", a Cc to XEmacs Patches is optional, but doesn't hurt.) Patches to XEmacs Lisp packages should be sent to the maintainer of the package. If the maintainer is listed as `XEmacs Development Team' patches should be sent to . Emailed patches should preferably be sent in MIME format and quoted printable encoding (if necessary). The simplest way to create well-formed patches is to use CVS and Didier Verna's Patcher library (available as patcher.el in the xemacs-devel package). Patcher is new and requires some setup, but most of the core developers are now using it for their own patches. Patcher also can be configured to create patches for several projects, and recognize the project from the directory it is invoked in. This makes it a useful general tool (as long as XEmacs-style patches are accepted at your other projects, which is likely since they conform to the GNU standards). When making patches by hand, please use the `-u' option, or if your diff doesn't support it, `-c'. Using ordinary (context-free) diffs are notoriously prone to error, since line numbers tend to change when others make changes to the same source file. An example of the `diff' usage: $ diff -u OLDFILE NEWFILE -or- $ diff -c OLDFILE NEWFILE Also, it is helpful if you create the patch in the top level of the XEmacs source directory: $ cp -p lwlib/xlwmenu.c lwlib/xlwmenu.c.orig hack, hack, hack.... $ diff -u lwlib/xlwmenu.c.orig lwlib/xlwmenu.c Also note that if you cut & paste from an xterm to an XEmacs mail buffer you will probably lose due to tab expansion. The best thing to do is to use an XEmacs shell buffer to run the diff commands, or ... M-x cd to the appropriate directory, and issue the command `C-u M-!' from within XEmacs. Patches should be as single-minded as possible. Mammoth patches can be very difficult to place into the right slot. They are much easier to deal with when broken down into functional or conceptual chunks. The patches submitted by Kyle Jones and Hrvoje Niksic are stellar examples of how to "Do The Right Thing". Each patch should be accompanied by an update to the appropriate ChangeLog file. Guidelines for writing ChangeLog entries is governed by the GNU coding standards. Please see [Change Logs section] for details. Do not submit context diffs (either -c or -u) of ChangeLogs. Because of the "stack" nature of ChangeLogs (new entries are always pushed on the top), context diffs will fail to apply more often than they succeed. Simply cutting and pasting the entry from an Emacs buffer to the mail buffer (beware of tab expansion!) is probably easiest. The Patcher library also will set up your ChangeLogs for you, and copy them to the mail. Context-less unified diffs (-U 0) are also acceptable. *** Patch discussion etiquette ------------------------------- If you intend a patch for _application_ to the sources as is, _always_ post it to xemacs-patches, even if there are minor points you would like to have discussed by others. Not doing so will resulting in patches getting "lost". If you expect that the patch will not be acceptable, but are using it to stimulate discussion, then don't post to xemacs-patches. Intermediate cases are up to your judgment; unless you're sure you'll follow up with a "real" patch, better to err on the side of posting to xemacs-patches. Discussion of the _content_ of the patch (ie responses to reviewer comments beyond "that's right, ok, I'll do it your way") should _always_ be posted to xemacs-beta or to xemacs-design. If you're not sure which is more appropriate, send it to xemacs-beta. That is the most widely read channel. If discussion results in a bright idea and you come up with a new patch, normally you should post it to both mailing lists. The people discussing on XEmacs Beta will want to know the outcome of the thread, and you need to submit to XEmacs Patches as the "list of record." If the old patch has been applied to CVS, then just submit the new one as usual. If it has not been applied, then it is best to submit a new patch against CVS. If possible do this as a reply to the original patch post, or something following it in the thread. (The point is to get the original patch post's Message-ID in your References header.) In this case, also use the keyword SUPERSEDES in the Subject header to indicate that the old patch is no longer valid, and that this one replaces it. These rules will result in a fair number of cross posts, but we don't yet have a better way to handle that. Note: Developers should never post to xemacs-patches unless there is a patch in the post. We plan to enforce this with an automatic filter. The exceptions are administrative. If you have commit authorization, then post a short COMMIT notice to xemacs-patches when you commit to CVS. Members of the Review Board will also post short notices of administrative action (APPROVE, VETO, QUERY, etc) to xemacs-patches. ** Large contributions ====================== Perhaps you have a whole new mode, or a major synchronization with upstream for a neglected package, or a synchronization with GNU Emacs you would like to contribute. We welcome such contributions, but they are likely to be relatively controversial, generate more comments and requests for revision, and take longer to integrate. Please be patient with the process. *** Updates to existing packages -------------------------------- If a package has gotten a bit out of date, or even started to bitrot, we welcome patches to synchronize it with upstream/GNU Emacs versions. Most packages end up varying somewhat from their GNU origins. See "Syncing with GNU Emacs" for hints. Note that if you do a reasonably large amount of syncing with GNU Emacs, you should log this in the file itself as well as in the ChangeLog. If the package is important to you, please consider becoming the maintainer. (See "New packages", below.) *** New packages ---------------- If you have a new mode or other large addition that does not require changes to the core, please consider submitting it as a package, and becoming the maintainer. You get direct commit privileges to the repository for your package, "approval" privileges for your own patches as well as third party patches to your package, and some degree of veto power over patches you don't like. In return, you are expected to maintain friendly liaison with the upstream developer (if you aren't the upstream developer), keep watch on the XEmacs Patches list for relevant patches, and be available by email to other developers for discussion of changes that impact your package. It's also a pretty standard route to the "core" development group, where we have plenty of extra work waiting for volunteers. You don't have to become the maintainer, but it virtually ensures rapid acceptance of the package. For help in creating new packages, see the (rather sparse) discussions in the XEmacs User's Guide and the Lisp Reference Manual. The XEmacs Package Release Engineer (Ville Skyttä is currently serving with Norbert Koch assisting; Steve Youngs and Stephen Turnbull also can help) are the most likely sources of advice. *** Syncing with GNU Emacs -------------------------- Syncing with GNU Emacs is an important activity. Although each version has its advantages and areas of concentration, it is very desirable that common functionality share specifications and APIs. When porting GNU code to XEmacs, the following points should be given special attention: o Recent GNU Emacsen cannot be built without Mule, but XEmacs can. Make sure your changes do not assume the presence of Mule. o GNU Emacs nomenclature often differs from that of XEmacs. Sometimes syncing the names is desirable, other times not. o GNU Emacs functionality often differs from that of XEmacs. Syncing functionality is often controversial. It is important that you let other developers know that synchronization has taken place, to what degree, and when. For this purpose, we use comments of the form /* Synched up with: FSF 21.3 by Stephen Turnbull */ in the source file itself, as the last element of the prefatory material (copyright notice and commentary). Obviously the comment marker needs to be changed to leading semicolons for Lisp, but otherwise the format is the same. Of course you should note syncing as the purpose in the ChangeLog, too. But entries get buried deep in the ChangeLog file, and may even get moved to a separate ChangeLog.OLD file for rarely synched files. Rather than dates we use the version of GNU Emacs to sync to. If the synchronization is partial, add a new comment describing what has actually been synched, leaving the description of the last full sync in place. At each full sync, remove all previous synchronization comments. This applies to Lisp that we have broken out into packages, but remains in the GNU Emacs core, as well to core Lisp in XEmacs. xemacs-21.4.22/etc/CODING-STANDARDS0000644000175000017500000000654206256071512014235 0ustar acsacs XEMACS CODING STANDARDS by Ben Wing Copyright (c) 1996 Ben Wing. This file documents the coding standards used in the XEmacs source code. Note that XEmacs follows the GNU coding standards, which are documented separately in ../man/standards.texi. This file only documents standards that are not included in that document; typically this consists of standards that are specifically relevant to the XEmacs code itself. First, a recap of the GNU standards: -- Put a space after every comma. -- Put a space before the parenthesis that begins a function call, macro call, function declaration or definition, or control statement (if, while, switch, for). (DO NOT do this for macro definitions; this is invalid preprocessor syntax.) -- The brace that begins a control statement (if, while, for, switch, do) or a function definition should go on a line by itself. -- In function definitions, put the return type and all other qualifiers on a line before the function name. Thus, the function name is always at the beginning of a line. -- Indentation level is two spaces. (However, the first and following statements of a while/for/if/etc. block are indented four spaces from the while/for/if keyword. The opening and closing braces are indented two spaces.) -- Variable and function names should be all lowercase, with underscores separating words, except for a prefixing tag, which may be in uppercase. Do not use the mixed-case convention (e.g. SetVariableToValue ()) and *especially* do not use Microsoft Hungarian notation (char **rgszRedundantTag). -- preprocessor and enum constants should be all uppercase, and should be prefixed with a tag that groups related constants together. Now, the XEmacs coding standards: **** Specially-prefixed functions/variables: -- All global C variables whose value is constant and is a symbol begin with a capital Q, e.g. Qkey_press_event. (The type will always be Lisp_Object.) -- All other global C variables whose value is a Lisp_Object (this includes variables that forward into Lisp variables plus others like Vselected_console) begin with a capital V. -- No C variables whose value is other than a Lisp_Object should begin with a capital V. (This includes C variables that forward into integer or boolean Lisp variables.) -- All global C variables whose value is a struct Lisp_Subr begin with a capital S. (This only occurs in connection with DEFUN ()). -- All C functions that are Lisp primitives begin with a capital F, and no others should begin this way. **** Functions for manipulating Lisp types: -- Any function that creates an empty or mostly empty Lisp object should begin allocate_(). (*Not* make_().) (Except, of course, for Lisp primitives, which usually begin Fmake_()). -- Any function that converts a pointer into an equivalent Lisp_Object should begin make_(). -- Any function that converts a Lisp_Object into its equivalent pointer and checks the type and validity of the object (e.g. making sure it's not dead) should begin decode_(). -- Any function that looks up a Lisp object (e.g. buffer, face) given a symbol or string should begin get_(). (Except, of course, for Lisp primitives, which usually begin Fget_()). **** Other: -- Any header-file declarations of the sort struct foobar; go into the "types" section of lisp.h. xemacs-21.4.22/etc/CODINGS0000644000175000017500000003077206431260355013041 0ustar acsacs######################### ## LIST OF CODING SYSTEMS ## Each line corresponds to one coding system ## Format of a line is: ## NAME:TYPE:MNEMONIC:EOL:FLAGS:DOCSTRING, ## where ## TYPE = nil (no conversion), t (auto conversion), ## 0 (Mule internal), 1 (SJIS), 2 (ISO2022), 3 (BIG5), or 4 (CCL) ## EOL = 0 (LF), 1 (CRLF), 2 (CR), or 3 (Automatic detection) ## FLAGS = ## if TYPE = 2 then ## comma (`,') separated data of the followings: ## G0, G1, G2, G3, SHORT-FORM, ASCII-EOL, ASCII-CNTL, SEVEN, ## LOCKING-SHIFT, SINGLE-SHIFT, USE-ROMAN, USE-OLDJIS, NO-ISO6429 ## else if TYPE = 4 then ## comma (`,') separated CCL programs for read and write ## else ## 0 ## no-conversion:nil:=:0:0:Do no conversion undecided:t:+:3:0:Detect coding-system automatically hz:0:z:3:0:Codins-system of Hz/ZW used for Chinese (GB). emacs-mule:0:=:3:0:Internal coding system used in a buffer. shift_jis:1:S:3:0:Coding-system of Shift-JIS used in Japan. sjis:1:S:3:0:Coding-system of Shift-JIS used in Japan. euc-japan-1990:2:E:3:ascii,japanese-jisx0208,katakana-jisx0201,japanese-jisx0212,1,1,1,0,0,1,0,0,0:Coding-system of Japanese EUC (Extended Unix Code). iso-2022-lock:2:i:3:(ascii,t),-2,-1,-1,0,1,1,1,0,0,0,0,0:ISO-2022 coding system using Locking-Shift for 96-charset. iso-2022-ss2-7:2:I:3:(ascii,t),-1,-2,-1,1,1,1,1,0,1,0,0,0:ISO-2022 coding system using SS2 for 96-charset in 7-bit code. iso-2022-ss2-8:2:I:3:(ascii,t),-1,-2,-1,0,1,1,0,0,1,0,0,0:ISO-2022 coding system using SS2 for 96-charset in 8-bit code. iso-2022-cjk:2:I:3:(ascii,t),(nil,korean-ksc5601,chinese-gb2312,chinese-cns11643-1,t),(nil,chinese-cns11643-2),(nil,chinese-cns11643-3,chinese-cns11643-4,chinese-cns11643-5,chinese-cns11643-6,chinese-cns11643-7),1,1,1,1,1,1,0,0,0:Mixture of ISO-2022-JP, ISO-2022-KR, and ISO-2022-CN cn-gb-2312:2:C:3:(ascii,t),chinese-gb2312,chinese-sisheng,-1,0,1,1,0,0,1,0,0,0:Coding-system of Chinese EUC (so called GB Encoding). lao:2:T:3:(ascii,t),(lao,t),-1,-1,0,1,0,0,0,0,0,0,0:Coding-system used for ASCII(MSB=0) & LAO(MSB=1). iso-2022-jp-1978-irv:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,1,1,0:Coding-system used for old jis terminal. junet:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,0,0,0:Coding system based on ISO2022 7-bit encoding. tis620:2:T:3:(ascii,t),(thai-tis620,t),-1,-1,0,1,0,0,0,0,0,0,0:Coding-system used for ASCII(MSB=0) & TIS620(MSB=1). euc-japan:2:E:3:ascii,japanese-jisx0208,katakana-jisx0201,japanese-jisx0212,1,1,1,0,0,1,0,0,0:Coding-system of Japanese EUC (Extended Unix Code). iso-2022-int-1:2:I:3:(ascii,t),(korean-ksc5601,t),-1,-1,1,1,1,1,1,0,0,0,0:ISO-2022-INT-1 euc-china:2:C:3:(ascii,t),chinese-gb2312,chinese-sisheng,-1,0,1,1,0,0,1,0,0,0:Coding-system of Chinese EUC (so called GB Encoding). old-jis:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,1,1,0:Coding-system used for old jis terminal. iso-2022-7:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,0,0,0:Coding system based on ISO2022 7-bit encoding. iso-2022-cn:2:C:3:ascii,(nil,chinese-gb2312,chinese-cns11643-1),(nil,chinese-cns11643-2),(nil,chinese-cns11643-3,chinese-cns11643-4,chinese-cns11643-5,chinese-cns11643-6,chinese-cns11643-7),0,1,1,1,1,1,0,0,0:Coding system ISO-2022-CN for Chinese (GB and CNS character sets). ctext:2:X:3:(ascii,t),(latin-iso8859-1,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-1 Compound Text Encoding. iso-2022-jp:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,0,0,0:Coding system based on ISO2022 7-bit encoding. iso-2022-kr:2:k:3:ascii,(nil,korean-ksc5601),-1,-1,0,1,1,1,1,0,0,0,0:MIME ISO-2022-KR iso-2022-cn-ext:2:C:3:ascii,(nil,chinese-gb2312,chinese-cns11643-1),(nil,chinese-cns11643-2),(nil,chinese-cns11643-3,chinese-cns11643-4,chinese-cns11643-5,chinese-cns11643-6,chinese-cns11643-7),0,1,1,1,1,1,0,0,0:Coding system ISO-2022-CN for Chinese (GB and CNS character sets). iso-8859-1:2:X:3:(ascii,t),(latin-iso8859-1,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-1 Compound Text Encoding. iso-8859-2:2:2:3:(ascii,t),(latin-iso8859-2,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-2 iso-8859-3:2:3:3:(ascii,t),(latin-iso8859-3,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-3 iso-8859-4:2:4:3:(ascii,t),(latin-iso8859-4,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-4 iso-8859-5:2:5:3:(ascii,t),(cyrillic-iso8859-5,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-5 iso-8859-7:2:7:3:(ascii,t),(greek-iso8859-7,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-7 iso-8859-8:2:8:3:(ascii,t),(hebrew-iso8859-8,t),-1,-1,0,1,1,0,0,0,0,0,1:MIME ISO-8859-8 iso-8859-9:2:9:3:(ascii,t),(latin-iso8859-9,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-9 euc-kr:2:K:3:(ascii,t),korean-ksc5601,-1,-1,0,1,1,0,0,0,0,0,0:Coding-system of Korean EUC (Extended Unix Code). euc-korea:2:K:3:(ascii,t),korean-ksc5601,-1,-1,0,1,1,0,0,0,0,0,0:Coding-system of Korean EUC (Extended Unix Code). cn-big5:3:B:3:0:Coding-system of BIG5. big5:3:B:3:0:Coding-system of BIG5. viscii:4:V:3: 3 106 e ffffff0b 100 0 1 19c6 3 4 19c7 19e7 7 8 9 a b c d e f 10 11 12 13 19d6 15 16 17 18 19db 1a 1b 1c 1d 19dc 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 19d5 19a1 19a2 19a3 19a4 19a5 19a6 19a7 19a8 19a9 19aa 19ab 19ac 19ad 19ae 19af 19b0 19b1 19b2 19b5 19fe 19be 19b6 19b7 19b8 19f6 19f7 19ef 19fc 19fb 19f8 19cf 19f5 1921 1922 1923 1924 1925 1926 1927 1928 1929 192a 192b 192c 192d 192e 192f 1930 1931 1932 19de 19bd 1935 1936 1937 1938 19f1 19d1 19d7 19d8 193d 193e 19df 19e0 19e1 19e2 19e3 19e4 19e5 1946 1947 19e8 19e9 19ea 19eb 19ec 19ed 19ee 194f 19f0 1951 19f2 19f3 19f4 1955 1956 1957 1958 19f9 19fa 195b 195c 19fd 195e 195f 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 196a 196b 196c 196d 196e 196f 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 197a 197b 197c 197d 197e 19e6 fffefd0c 16, 1 121 e 41b 10 80 fffffc07 fffffb0c 41b 15 9a fffff707 fffff60c 881d 12 a2 e 4017 80 ffffef0b 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 0 0 b5 b6 b7 b8 0 0 0 0 bd be 0 0 0 0 0 0 0 c6 c7 0 0 0 0 0 0 0 cf 0 d1 0 0 0 d5 d6 d7 d8 0 0 db dc 0 de df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe 0 ffff6d0c 881b 12 a3 e 4017 80 ffff660b 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 0 0 93 96 97 98 0 0 0 0 b4 95 0 0 0 0 0 0 0 2 5 0 0 0 0 0 0 0 9f 0 ba 0 0 0 80 14 bb bc 0 0 19 1e 0 b3 bf c0 c1 c2 c3 c4 c5 ff 6 c8 c9 ca cb cc cd ce 9b d0 b9 d2 d3 d4 a0 99 9a 9e d9 da 9d 9c dd 94 0 fffee40c fffee307 fffee20c 16:Coding-system used for VISCII 1.1. koi8:4:K:3: 3 106 e ffffff0b 100 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f 20 20 20 e71 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e21 20 20 20 20 20 20 20 20 20 20 20 20 e6e e50 e51 e66 e54 e55 e64 e53 e65 e58 e59 e5a e5b e5c e5d e5e e5f e6f e60 e61 e62 e63 e56 e52 e6c e6b e57 e68 e6d e69 e67 e6a e4e e30 e31 e46 e34 e35 e44 e33 e45 e38 e39 e3a e3b e3c e3d e3e e3f e4f e40 e41 e42 e43 e36 e32 e4c e4b e37 e48 e4d e49 e47 e4a fffefd0c 16, 1 6e e 41b 15 8c fffffc07 fffffb0c e 4017 a0 fffff70b 60 20 b3 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e1 e2 f7 e7 e4 e5 f6 fa e9 ea eb ec ed ee ef f0 f2 f3 f4 f5 e6 e8 e3 fe fb fd ff f9 f8 fc e0 f1 c1 c2 d7 c7 c4 c5 d6 da c9 ca cb cc cd ce cf d0 d2 d3 d4 d5 c6 c8 c3 de db dd df d9 d8 dc c0 d1 20 a3 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ffff950c 16:Coding-system used for KOI8. koi8-r:4:K:3: 3 106 e ffffff0b 100 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f 20 20 20 e71 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e21 20 20 20 20 20 20 20 20 20 20 20 20 e6e e50 e51 e66 e54 e55 e64 e53 e65 e58 e59 e5a e5b e5c e5d e5e e5f e6f e60 e61 e62 e63 e56 e52 e6c e6b e57 e68 e6d e69 e67 e6a e4e e30 e31 e46 e34 e35 e44 e33 e45 e38 e39 e3a e3b e3c e3d e3e e3f e4f e40 e41 e42 e43 e36 e32 e4c e4b e37 e48 e4d e49 e47 e4a fffefd0c 16, 1 6e e 41b 15 8c fffffc07 fffffb0c e 4017 a0 fffff70b 60 20 b3 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e1 e2 f7 e7 e4 e5 f6 fa e9 ea eb ec ed ee ef f0 f2 f3 f4 f5 e6 e8 e3 fe fb fd ff f9 f8 fc e0 f1 c1 c2 d7 c7 c4 c5 d6 da c9 ca cb cc cd ce cf d0 d2 d3 d4 d5 c6 c8 c3 de db dd df d9 d8 dc c0 d1 20 a3 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ffff950c 16:Coding-system used for KOI8. alternativnyj:4:A:3: 3 106 e ffffff0b 100 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f e30 e31 e32 e33 e34 e35 e36 e37 e38 e39 e3a e3b e3c e3d e3e e3f e40 e41 e42 e43 e44 e45 e46 e47 e48 e49 e4a e4b e4c e4d e4e e4f e50 e51 e52 e53 e54 e55 e56 e57 e58 e59 e5a e5b e5c e5d e5e e5f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e60 e61 e62 e63 e64 e65 e66 e67 e68 e69 e6a e6b e6c e6d e6e e6f e21 e71 20 20 20 20 20 20 20 20 20 20 20 20 20 e70 fffefd0c 16, 1 6e e 41b 15 8c fffffc07 fffffb0c e 4017 a0 fffff70b 60 20 f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef ff f1 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ffff950c 16:Coding-system used for Alternativnyj vscii:4:V:3: 3 106 e ffffff0b 100 0 19fa 19f8 3 19d7 19d8 19e6 7 8 9 a b c d e f 10 19d1 19df 19cf 19d6 19db 19fd 19dc 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 19e0 19e4 19e3 19e1 19d5 19a3 19a7 19e8 19eb 19a8 19e9 19a9 19ae 19ec 19ef 19ee 19ed 19b8 19f2 19f6 19f5 19f3 19f7 19b5 19b6 19b7 19de 19be 19fe 19f9 19fc 19fb a0 19e5 19e2 19ea 19f4 19bd 19df 19f0 1965 1962 196a 1974 193e 1979 1970 19a2 c0 c1 c2 c3 c4 1960 1964 1963 1961 1955 19c6 1922 1946 1947 1921 19c7 19a1 19a5 19a6 19e7 19a5 19ab 1923 1925 1926 1967 1924 1927 1968 19ac 196b 1928 1969 1929 192b 192c 192d 192a 192e 196c 196f 19ad 19aa 19b0 196e 196d 1938 1972 19b1 1976 1975 1973 1977 1930 1931 1932 192f 1935 1936 1937 195e 193e 197e 1979 19b2 197c 197b 197a 1978 1957 1958 1966 1951 1971 194f 1956 195b 197d 195c 19af fffefd0c 16, 1 121 e 41b 10 80 fffffc07 fffffb0c 41b 15 9a fffff707 fffff60c 881d 12 a2 e 4017 80 ffffef0b 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 be bb c6 ca c7 c8 cb cf d1 d5 d2 d3 d4 d6 e8 e5 e6 e7 0 0 e9 ea eb de 0 0 0 0 0 ed 0 0 0 0 0 0 0 bc bd 0 0 0 0 0 0 0 fa 0 f8 0 0 0 b9 fb f5 f6 0 0 fc fe 0 ec 0 b5 b8 a9 b7 b6 a8 f7 c9 cc d0 aa ce d7 dd dc d8 ae f9 df e3 ab e2 e1 e4 f4 ef f3 f2 f1 fd ee 0 ffff6d0c 881b 12 a3 e 4017 80 ffff660b 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 0 0 93 96 97 98 0 0 0 0 b4 95 0 0 0 0 0 0 0 2 5 0 0 0 0 0 0 0 9f 0 ba 0 0 0 80 14 bb bc 0 0 19 1e 0 b3 bf c0 c1 c2 c3 c4 c5 ff 6 c8 c9 ca cb cc cd ce 9b d0 b9 d2 d3 d4 a0 99 9a 9e d9 da 9d 9c dd 94 0 fffee40c fffee307 fffee20c 16:Coding-system used for VSCII-1. ############################ ## LIST OF CODING CATEGORIES (ordered by priority) ## CATEGORY:CODING-SYSTEM ## coding-category-iso-7:iso-2022-7 coding-category-iso-8-1:iso-8859-1 coding-category-iso-8-2:iso-8859-1 coding-category-iso-else:iso-2022-lock coding-category-emacs-mule:emacs-mule coding-category-sjis:sjis coding-category-big5:big5 coding-category-binary:no-conversion xemacs-21.4.22/etc/COPYING0000644000175000017500000004321706256071507013065 0ustar acsacs GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA 02111-1307, USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. xemacs-21.4.22/etc/COPYING.LIB0000644000175000017500000006137206256071512013470 0ustar acsacs GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA 02111-1307, USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU General Public License along with this library; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! xemacs-21.4.22/etc/DEBUG0000644000175000017500000001273306256071510012574 0ustar acsacsDebugging GNU Emacs Copyright (c) 1985 Richard M. Stallman. Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. On 4.2 you will probably find that dbx does not work for debugging GNU Emacs. For one thing, dbx does not keep the inferior process's terminal modes separate from its own. For another, dbx does not put the inferior in a separate process group, which makes trouble when an inferior uses interrupt input, which GNU Emacs must do on 4.2. dbx has also been observed to have other problems, such as getting incorrect values for register variables in stack frames other than the innermost one. The Emacs distribution now contains GDB, the new source-level debugger for the GNU system. GDB works for debugging Emacs. GDB currently runs on vaxes under 4.2 and on Sun 2 and Sun 3 systems. ** Some useful techniques `Fsignal' is a very useful place to stop in. All Lisp errors go through there. It is useful, when debugging, to have a guaranteed way to return to the debugger at any time. If you are using interrupt-driven input, which is the default, then Emacs is using RAW mode and the only way you can do it is to store the code for some character into the variable stop_character: set stop_character = 29 makes Control-] (decimal code 29) the stop character. Typing Control-] will cause immediate stop. You cannot use the set command until the inferior process has been started. Put a breakpoint early in `main', or suspend the Emacs, to get an opportunity to do the set command. If you are using cbreak input (see the Lisp function set-input-mode), then typing Control-g will cause a SIGINT, which will return control to the debugger immediately unless you have done ignore 3 (in dbx) or handle 3 nostop noprint (in gdb) You will note that most of GNU Emacs is written to avoid declaring a local variable in an inner block, even in cases where using one would be the cleanest thing to do. This is because dbx cannot access any of the variables in a function which has even one variable defined in an inner block. A few functions in GNU Emacs do have variables in inner blocks, only because I wrote them before realizing that dbx had this problem and never rewrote them to avoid it. I believe that GDB does not have such a problem. ** Examining Lisp object values. When you have a live process to debug, and it has not encountered a fatal error, you can use the GDB command `pr'. First print the value in the ordinary way, with the `p' command. Then type `pr' with no arguments. This calls a subroutine which uses the Lisp printer. If you can't use this command, either because the process can't run a subroutine or because the data is invalid, you can fall back on lower-level commands. Use the `xtype' command to print out the data type of the last data value. Once you know the data type, use the command that corresponds to that type. Here are these commands: xint xptr xwindow xmarker xoverlay xmiscfree xintfwd xboolfwd xobjfwd xbufobjfwd xkbobjfwd xbuflocal xbuffer xsymbol xstring xvector xframe xwinconfig xcompiled xcons xcar xcdr xsubr xprocess xfloat xscrollbar Each one of them applies to a certain type or class of types. (Some of these types are not visible in Lisp, because they exist only internally.) Each x... command prints some information about the value, and produces a GDB value (subsequently available in $) through which you can get at the rest of the contents. In general, most of the rest of the contents will be addition Lisp objects which you can examine in turn with the x... commands. ** If GDB does not run and your debuggers can't load Emacs. On some systems, no debugger can load Emacs with a symbol table, perhaps because they all have fixed limits on the number of symbols and Emacs exceeds the limits. Here is a method that can be used in such an extremity. Do nm -n temacs > nmout strip temacs adb temacs 0xd:i 0xe:i 14:i 17:i :r -l loadup (or whatever) It is necessary to refer to the file `nmout' to convert numeric addresses into symbols and vice versa. It is useful to be running under a window system. Then, if Emacs becomes hopelessly wedged, you can create another window to do kill -9 in. kill -ILL is often useful too, since that may make Emacs dump core or return to adb. ** Debugging incorrect screen updating. To debug Emacs problems that update the screen wrong, it is useful to have a record of what input you typed and what Emacs sent to the screen. To make these records, do (open-dribble-file "~/.dribble") (open-termscript "~/.termscript") The dribble file contains all characters read by Emacs from the terminal, and the termscript file contains all characters it sent to the terminal. The use of the directory `~/' prevents interference with any other user. If you have irreproducible display problems, put those two expressions in your ~/.emacs file. When the problem happens, exit the Emacs that you were running, kill it, and rename the two files. Then you can start another Emacs without clobbering those files, and use it to examine them. xemacs-21.4.22/etc/DISTRIB0000644000175000017500000001472407265370775013070 0ustar acsacs -*- text -*- XEmacs availability information. Last Modified: 18-Jul-99. XEmacs is available via anonymous FTP from ftp.xemacs.org (207.96.122.8) in the directory /pub/xemacs/. ftp.xemacs.org is the primary distribution point, but you may find copies of it at other sites as well. Please see the file FTP for mirrors. 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. There are mailing lists and newsgroups specifically for discussing and reporting bugs in XEmacs; see the file MAILINGLISTS in this directory. The FTP and ordering information in the remainder of this file applies to the versions of GNU Emacs distributed by the Free Software Foundation, not to XEmacs. ----------------------------------------------------------------------- For an order form for all Emacs and FSF distributions deliverable from the USA, see the file `ORDERS' in this directory (etc/ in the GNU Emacs distribution or /pub/gnu/GNUinfo on prep.ai.mit.edu). For a European order form, see `ORDERS.EUROPE'. For a Japan order form, see `ORDERS.JAPAN'. GNU Emacs availability information, June 1995 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995 Free Software Foundation, Inc. Permission is granted to anyone to make or distribute verbatim copies of this document provided that the copyright notice and this permission notice are preserved. GNU Emacs is legally owned by the Free Software Foundation, but we regard the foundation more as its custodian on behalf of the public. In the GNU project, when we speak of "free software", this refers to liberty, not price. Specifically, it refers to the users' freedom to study, copy, change and improve the software. Sometimes users pay money for copies of GNU software, and sometimes they get copies at no charge. But regardless of how they got the software, or whether it was modified by anyone else along the way, they have the freedom to copy and change it--those freedoms are what "free software" means. The precise conditions for copying and modification are stated in the document "GNU General Public License," a copy of which is required to be distributed with every copy of GNU Emacs. It is usually in a file named `COPYING' in the same directory as this file. These conditions are designed to make sure that everyone who has a copy of GNU Emacs (including modified versions) has the freedom to redistribute and change it. If you do not know anyone to get a copy of GNU Emacs from, you can order a tape, cd-rom, or floppy diskette from the Free Software Foundation. We distribute Emacs version 18 and 19 in different formats for many machines. We also distribute nicely typeset copies of the Emacs user manual, Emacs Lisp Reference Manual, the Emacs reference card, etc. See file `ORDERS'. If you have Internet access, you can copy the latest Emacs distribution from hosts, such as prep.ai.mit.edu. There are several ways to do this; see the file `FTP' for more information. Even better, get the latest version of the file from `/pub/gnu/GNUinfo/FTP' on prep.ai.mit.edu for the most current arrangements. It may also be possible to copy Emacs via uucp; the file `FTP' contains information on that too. Emacs has been run on both Berkeley Unix and System V Unix, on a variety of types of cpu. It also works on VMS and on Apollo computers, though with some deficiencies that reflect problems in these operating systems. See the file `MACHINES' in this directory (see above) for a full list of machines that GNU Emacs has been tested on, with machine-specific installation notes and warnings. There is also Demacs that works on newer MS-DOS machines (see file `ORDERS'). Note that there is significant variation between Unix systems supposedly running the same version of Unix; it is possible that what works in GNU Emacs for me does not work on your system due to such an incompatibility. Since I must avoid reading Unix source code, I cannot even guess what such problems may exist. GNU Emacs is distributed with no warranty (see the General Public License for full details, in the file `COPYING' in this directory (see above)), and neither I nor the Free Software Foundation promises any kind of support or assistance to users. The foundation keeps a list of people who are willing to offer support and assistance for hire. See the file `SERVICE'. You can get the latest version from prep.ai.mit.edu in file `/pub/gnu/GNUinfo/SERVICE'. However, we plan to continue to improve GNU Emacs and keep it reliable, so please send me any complaints and suggestions you have. I will probably fix anything that I consider a malfunction. I may make improvements that are suggested, but I may choose not to. Improving Emacs is not my highest priority now. If you are on the Internet, report bugs to bug-gnu-emacs@prep.ai.mit.edu; on UUCP, use the address ...!uunet!prep.ai.mit.edu!bug-gnu-emacs. Otherwise, phone or write the foundation at: Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 Voice: +1-617-542-5942 Fax: +1-617-542-2652 General questions about the GNU Project can be asked of gnu@prep.ai.mit.edu. If you are a computer manufacturer, I encourage you to ship a copy of GNU Emacs with every computer you deliver. The same copying permission terms apply to computer manufacturers as to everyone else. You should consider making a donation to help support the GNU project; if you estimate what it would cost to distribute some commercial product and divide it by five, that is a good amount. If you like GNU Emacs, please express your satisfaction with a donation: send me or the Foundation what you feel Emacs has been worth to you. If you are glad that I developed GNU Emacs and distribute it as freeware, rather than following the obstructive and antisocial practices typical of software developers, reward me. If you would like the Foundation to develop more free software, contribute. Your donations will help to support the development of more useful software to be distributed on the same basis as GNU Emacs. Eventually we will have a complete imitation of the Unix operating system, called GNU (Gnu's Not Unix), which will run Unix user programs. For more information on GNU, see the file `GNU' in this directory (see above). Richard M Stallman Chief GNUisance, President of the Free Software Foundation xemacs-21.4.22/etc/ETAGS.ChangeLog0000644000175000017500000010136610662405023014434 0ustar acsacs2007-05-18 Francesco Potortì * etags.c: Extern definitions of some more pointer functions for standalone compilation, especially important for 64bit platforms. (main, print_help): --members is now the default for etags. (C_entries): Parse start of C comment as a space == end of token. This is not necessary for C++ comment, already parsed as newline. 2007-02-05 Francesco Potortì * etags.c (default_C_help, Cplusplus_help, PHP_help, print_help) (main): Now --members is the default for etags, not for ctags yet. 2007-01-02 Francesco Potortì * etags.c (longopts): New undocumented option --no-duplicates. (no_duplicates): Static variables for the above option. (print_help): Do not print help for --no-warn, now undocumented. (add_node): Allow duplicate tags in ctags mode unless --no-duplicates. (main): Pass the -u option to sort in ctags mode. 2006-12-28 Francesco Potortì * etags.c (readline): When creating a relative file name from a #line directive, leave the file name alone. The previous behaviour was to make it relative to the tags file directory, under the hypothesis that the #line directive file name was relative to the directory of the tagged file. That hypothesis is wrong with Cpp and Lex. 2006-12-20 Francesco Potortì * etags.c (C_entries): DEFUN names were longer by one: corrected. (Makefile_targets): Do not include spaces in tag names. 2006-08-12 Kevin Ryde * etags.c (readline): Check for double quote after #line. 2006-08-12 Jan Djärv * etags.c (readline): sscanf could in principle return 2. 2006-08-12 Francesco Potortì * etags.c (readline): lno is unsigned. (TeX_commands): Use p++ (rather than *p++) to increment p. (Lua_functions): Explicitely discard LOOKING_AT's return value. 2006-08-07 Masatake YAMATO * etags.c (TEX_mode): Check getc retruns EOF. File ended without newline causes infinite loop. 2002-07-14 Adrian Aichner (tiny change) * etags.c: It's XEmacs, not Xemacs: change all the occurences. 2006-07-10 Francesco Potortì * etags.c [ETAGS_REGEXPS]: #ifdef's deleted, define unconditionally. [LONG_OPTIONS]: Changed to NO_LONG_OPTIONS, now normally undefined. (Objc_suffixes): Suggest using --lang=c for full help. (C_entries): Initialise savetoken to 0 to shut up the compiler. 2006-07-10 Francesco Potortì * etags.c (absolute_filename): Free unused space (cosmetic change). (in_word_set): In C, also tag #undef symbols. 2006-05-02 Francesco Potortì * etags.c (Perl_functions): Free space allocated for var package. (Erlang_functions): Possibly free space allocated for var last. (Prolog_functions): Possibly free space allocated for var last. 2005-11-18 Hideki IWAMOTO (tiny change) * etags.c (main): Cxref mode writes to stdout: do not close tagf, which was never opened. 2005-09-27 Francesco Potortì * etags.c: Preliminary Forth support. (prolog_pr): Cast strlen to int before comparison. (LOOKING_AT, LOOKING_AT_NOCASE): Let the preprocessor check that the second argument is indeed a literal string. (main): In append mode, sort the tags file after writing it. 2005-09-27 Emanuele Giaquinta (tiny change) * etags.c (longopts, print_help, main): The -a (--append) option can be used in ctags also; for one, the Linux make file uses it. 2004-09-13 Francesco Potortì * etags.c (main): When relative file names are given as argument, make them relative to the current working dir, rather than relative to the output tags file, if the latter is in /dev. 2004-09-13 David A. Capello (tiny change) * etags.c: (Lua_suffixes, Lua_help, lang_names, Lua_functions): Support the Lua scripting language . 2004-09-13 Francesco Potortì * etags.c [EXIT_SUCCESS, EXIT_FAILURE]: Define them when no is available. (enum sym_type): New st_C_attribute value for parsing gcc's __attribute__. Deleted st_C_typespec value. (gperf, in_word_set): Use gperf 3, options changed. Added the __attribute__ keyword, removed all the st_C_typespec keywords, changed attribute for Java to (C_JAVA & !C_PLPL). (inattribute): New global bool, part of the C state machine. (cblev): Identifier renamed to bracelev throughout. (consider_token, C_entries): Numerous changes for making the parser more robust and adding support for __attribute__. 2004-09-08 Francesco Potortì * etags.c: Add arch taglines [LONG_OPTIONS]: make it TRUE (ifdef) or FALSE for ease of use. [GOOD, BAD]: renamed to EXIT_SUCCESS, EXIT_FAILURE. (suggest_asking_for_help): Fix having macros in a printf statement. (consider_token): check C++ `operator' only when the token len is long enough. 2003-01-09 Francesco Potortì * etags.c: changes for language-sepcific help by Philippe Waroquiers applied and largely revised. (language): Added a `help' member. (arg_type): Added an at_end constant. (plain_C_suffixes): Some items removed from here. (Objc_suffixes): And put here (new constant). (Ada_help, Asm_help, default_C_help, Cplusplus_help, Cjava_help, Cobol_help, Erlang_help, Fortran_help, HTML_help, Lisp_help, Makefile_help, Objc_help, Pascal_help, Perl_help, PHP_help, PS_help, Prolog_help, Python_help, Scheme_help, TeX_help, Texinfo_help, Yacc_help, auto_help, none-help, no_lang_help): New constants. (PS_functions, PS_suffixes): Renamed from Postscript_functions and Postscript_suffixes. (lang_names): Adapted to the new language structure, new language "objc" added (was previously merged with "proc"). (print_language_names): Some help strings corrected. (print_help): Now takes an argument and possibly prints lang help. (print_help): Some help strings corrected. Documents language-specific help. (main): Only print help after having parsed all the arguments. 2002-09-03 Francesco Potorti` * etags.c (regex_tag_multiline, readline): Never pass pfnote a string that cannot be freed. 2002-08-30 Francesco Potorti` * etags.c (consider_token, C_entries): Switch to C++ parsing when auto-detection is enabled and the `::' qualifier is met. (consider_token, C_entries): Several bugs corrected that tagged some declarations even though --declarations was not used. (plainc): New macro. (C_entries): Use it. (C_entries): Several cosmetic changes. (C_entries): Invalidate the token is some cases. 2002-08-29 Francesco Potorti` * etags.c (C_entries): Corrected a problem with const C++ funcs. (ignoreindent): Renamed from noindentypedefs. (cjava, cplpl): They are now macros instead of local vars. 2002-08-28 Francesco Potorti` * etags.c (HTML_labels): Tag ID= also. 2002-08-27 Francesco Potorti` * etags.c (Ada_funcs): Do not tag "use type Xxxx;". 2002-06-25 Francesco Potorti` * etags.c: New language HTML. (make_tag): Never generate null length tag names. (linebuffer_init): Renamed from initbuffer. All callers changed. (pattern): Structure renamed to `regexp', member regex renamed to pattern. (node_st): Member pat renamed to regex. (pattern); New member force_explicit_name, for future use. Now always set to true, cannot be reset. (add_regex, regex_tag_multiline, readline): Use it. (main): Free some global structures. 2002-06-21 Francesco Potorti` * etags.c (fdesc): New member `written'. (readline, process_file): Initialise it. (put_entries): Set it. (main): Use it to create entries for files without tags. (total_size_of_entries): Do not count invalid tags. (etags_strcasecmp): Like BSD's, for compatibility. (strcaseeq): Make it into a macro. 2002-06-21 Francesco Potorti` * etags.c: (F_getit, Fortran_functions, Ada_getit, Asm_labels) (Python_functions, PHP_functions, PHP_functions, PHP_functions) (PHP_functions, PHP_functions, Cobol_paragraphs) (Makefile_targets, Postscript_functions, Texinfo_nodes) (prolog_pr, erlang_func, erlang_attribute) (Perl_functions, Perl_functions, Pascal_functions) (TeX_commands, get_tag): Use make_tag instead of pfnote. (get_tag): Prototype changed, all callers changed. 2002-06-20 Francesco Potorti` * etags.c: Use, together with etags.el, an optimised form of tags, which are almost always unnamed. etags.el looks for an explicit tag name, then for an implicit one. See make_tag for details. The change is both forwards and backwards compatible. (make_tag): New function (was the disabled function new_pfnote). (make_C_tag): Use it. 2002-06-19 Francesco Potorti` * etags.c (add_regex): Invalid regexp modifiers are ignored. (Makefile_targets): Tag variables unless --no-globals. (LOOP_ON_INPUT_LINES): Serious bug corrected. 2002-06-13 Francesco Potorti` * etags.c (erlang_atom, erlang_attribute): Bugs corrected. (invalidate_nodes): Bug corrected. (print_help): Better help for regexps. 2002-06-12 Francesco Potorti` * etags.c (arg_type): at_icregexp label removed (obsolete). (pattern): New member multi_line for multi-line regexps. (filebuf): A global buffer containing the whole file as a string for multi-line regexp matching. (need_filebuf): Global flag raised if multi-line regexps used. (print_help): Document new regexp modifiers, remove references to obsolete option --ignore-case-regexp. (main): Do not set regexp syntax and translation table here. (main): Treat -c option as a backward compatibility hack. (main, find_entries): Init and free filebuf. (find_entries): Call regex_tag_multiline after the regular parser. (scan_separators): Check for untermintaed regexp and return NULL. (analyse_regex, add_regex): Remove the ignore_case argument, which is now a modifier to the regexp. All callers changed. (add_regex): Manage the regexp modifiers. (regex_tag_multiline): New function. Reads from filebuf. (readline_internal): If necessary, copy the whole file into filebuf. (readline): Skip multi-line regexps, leave them to regex_tag_multiline. 2002-06-11 Francesco Potorti` * etags.c (add_regex): Better check for null regexps. (readline): Check for regex matching null string. 2002-06-07 Francesco Potorti` * etags.c (find_entries): Reorganisation. 2002-06-07 Francesco Potorti` * etags.c (scan_separators): Support all character escape sequences supported by gcc. (find_entries): rewind unconditionally. (find_entries): Do not call language functions directly, now calls itself. (find_entries): Do general initialisations here. (CNL_SAVE_DEFINEDEF, C_entries, LOOP_ON_INPUT_LINES, F_getit) (Ada_getit, Pascal_functions, Pascal_functions) (prolog_skip_comment): Do not do them here. (readline_internal): Increment lineno here. (readline): Conditionally undo readline_internal increment. (readline): Do not return a value. 2002-06-06 Francesco Potorti` * etags.c (enum arg_type): New label at_stdin. (STDIN): New constant. (parsing_stdin): New flag. (longopts): New option --parse-stdin=NAME. (print_help): Document it. (main): Handle it. (process_file): Split into process_file and process_file_name. (process_file_name): New function. 2002-06-06 Francesco Potorti` * etags.c (main): Avoid a buffer overrun with sprintf. (TEX_cmt): Make it a static char and move it before TeX_commands. (TeX_commands): Skip comments. (TEX_defenv): Now contains more contructs. (TeX_commands): Shorten the tag to the brace after the name. (TeX_commands): Allow for names with embedded spaces. (TeX_commands): Names now include the initial backslash. (TeX_commands): Names do not include numeric args #n. (TeX_commands): Correct line char number in tags. (TEX_tabent, TEX_token): Deleted. (TeX_commands, TEX_decode_env): Streamlined. 2002-05-31 Paul Eggert * etags.c (main): Use `sort -o TAGFILE TAGFILE' instead of `sort TAGFILE -o TAGFILE', as POSIX 1003.1-2001 disallows the latter usage. 2002-04-22 Francesco Potorti` * etags.c: (last_node): Make it a global variable. (process_file): Print the tags from the nodes as soon as possible, and delete the nodes. This brings down the memory occupancy as etags to almost the same level as when the #line directives were not parsed. (free_fdesc): New function. (find_entries): Use it. (invalidate_nodes): In etags mode, do not just mark the nodes as invalid, do delete them. 2002-04-16 Francesco Potorti` * etags.c (find_entries): Bug fix in list management. 2002-04-15 Francesco Potorti` * etags.c (get_language_from_filename): Add one argument. (strcaseeq): New function. (get_language_from_filename): Use it to do a case insenstitive comparison if called with appropriate args. (find_entries): Try with case insensitive match. (process_file): Bug fixed. 2002-04-13 Francesco Potorti` * etags.c (find_entries): Delete tags previously obtained from file xxx.c's #line directives when parsing file xxx.y. This is generally done for automatically generated files containing #line directives. This handles the case when xxx.y is tagged before xxx.c, and the entries of xxx.c pointing to xxx.y should be discarded. (language): Added the metasource member. Initializers changed. (invalidate_nodes): New function. 2002-03-21 Francesco Potorti` * etags.c (readline): Discard lines after having found a #line directive pointing to an already tagged file. This handles the case when xxx.y is tagged before xxx.c, and the entries of xxx.c pointing to xxx.y should be discarded. 2002-03-15 Francesco Potorti` * etags.c (fdesc): New structure for keeping track of input files. (fdesc): Remove `file' member (a string) and use instead a pointer to a file description structure. (curfile, curfiledir, curtagfname, curlang, nocharno, forced_lang): Global variables removed in favor of fdhead and curfdp, pointers to file description strucures. (longopts, main, print_help): Use the CTAGS conditional to include or exclude options that work on etags or ctags only. (process_file, find_entries, pfnote, add_node, put_entries, readline): Use fdhead and curfdp. (process_file, find_entries): Do not take an arg string, all callers changed. 2002-03-13 Francesco Potorti` * etags.c (longopts, print_help, main): Test CTAGS to disallow options that are not right for either etags or ctags. 2002-03-12 Francesco Potorti` * etags.c (number_len, total_size_of_entries): Define them also in CTAGS mode, because gcc does not compile all refs away. (Python_functions, PHP_functions): Name tags, for ctags' sake. (TeX_commands): Name tags. Correction of old disabled code. 2002-03-06 Francesco Potorti` * etags.c (Python_functions): Consider indented "def" and "class". 2002-03-05 Francesco Potorti` * etags.c (curfiledir, curtagfname): New global variables. (process_file): Initialise them. (readline): Canonicalize the name found in #line directive. 2002-03-05 Francesco Potorti` * etags.c: Honour #line directives. (no_line_directive): New global var; set it for old behaviour. (main): Remove some #ifdef in the getopt switch. (add_node, put_entries): Code added to merge different chunks of nodes referring to the same file. Currently the tags are just appended, without any check for duplicates. (Perl_functions): Do not special case ctags. (readline): Identify #line directives and do the right thing. (nocharno, invalidcharno): New global vars. (process_file): Reset nocharno. (readline): Set nocharno. (pfnote): Read nocharno and maybe put invalidcharno in node. (total_size_of_entries, put_entries): Use invalidcharno. 2002-03-04 Francesco Potorti` * etags.c: Keep the whole tag table in memory, even in etags mode. (main): Call put_entries here even in CTAGS mode. (main, process_file): Check the return values of fclose and pclose. (process_file): Do not call put_entries after parsing each file. (process_file): Canonicalise file names even for ctags. (process_file): Set curfile here... (find_entries): ... not here any more. (add_node): In etags mode, build a linked list of entries (on right pointer) for each file, and link the first entry of each file on left nodes. (put_entries): Print here the name of the file. (put_entries): Print the entries starting from the first file. (number_len, total_size_of_entries): Define these only iin etags mode, make the second work only on the right nodes. 2002-01-03 Francesco Potorti` * etags.c: Make all global variables static. 2001-12-21 Francesco Potorti` * etags.c (Perl_functions): Tag packages and use them in sub tags. (get_tag): Return a pointer to the tag that is found. 2001-12-21 Francesco Potorti` * etags.c (LOOKING_AT): Use !intoken instead of iswhite. (F_takeprec): Renamed from takeprec. All callers changed. (F_getit): Renamed from getit. All callers changed. (nocase_tail): Renamed from tail. All callers changed. (Ada_getit): Renamed from adagetit. All callers changed. (L_getit): Simplified by using get_tag. (Perl_functions, Postscript_functions, erlang_attribute): Use the modified LOOKING_AT. (notinname): Removed '[' and added ')' to the recognised chars. (LOOKING_AT, get_tag, PHP_functions): Use notinname. (Ada_getit, Ada_funcs, Python_functions, Scheme_functions): Clarified, using strneq or notinname. (L_isdef, L_isquote): Removed. (Lisp_functions, L_getit): Clarified. 2001-12-17 Francesco Potorti` * etags.c: [P_]: Renamed to __P for consistency with config.h. [HAVE_CONFIG_H]: Let config.h deal with __P. [__STDC__] [!HAVE_CONFIG_H]: Define PTR as in config.h. [!__STDC__] [!HAVE_CONFIG_H]: Do not undefine static, because gperf code needs it. [HAVE_CONFIG_H] [!PTR]: Define PTR (for use with Xemacs). [HAVE_CONFIG_H] [!__P]: Define __P (for use with Xemacs). (xmalloc, xrealloc): Use PTR instead of long *. (bool): Make it a define, not a typedef, for C++ compilers. (pattern): Members renamed to avoid name clash in some C++ compilers. (get_language_from_langname): Use const argument. 2001-12-12 Francesco Potorti` * etags.c (PHP_functions): New function by Diez B. Roggisch, heavily adapted by me, for parsing PHP. (LOOKING_AT): New macro. (Perl_functions, Python_functions, PHP_functions) (Scheme_functions, Texinfo_nodes): Use it. (Perl_functions): Use strneq. (prolog_pred): Renamed to prolog_pr. (prolog_pr): Recognise Prolog rules (thanks to Geert Kloosterman) in addition to predicates. [ETAGS_REGEXPS] [!HAVE_CONFIG_H] [__CYGWIN__]: Prevent unmodified compile, as Cygwin's regex.h is incompatible with us (thanks to Markus Hoenicka). [!HAVE_CONFIG_H] [!__STDC__]: #define const as the empty string. 2001-05-11 Francesco Potorti` * etags.c (add_regex): Reset the whole newly allocated pattern buffer instead of the individual members. It's safer and works with Xemacs. 2001-02-23 Francesco Potorti` * etags.c (enum sym_type): New label st_C_template. (gperf input): Use it for switching to C++ from C. (consider_token): Do it. 2001-02-16 Francesco Potorti` * etags.c (C_entries): Initialise typdefcblev to quiet compilers. 2001-02-06 Francesco Potorti` * etags.c [!HAVE_CONFIG_H] [!__STDC__]: #define static as nothing. 2001-01-31 Francesco Potorti` * etags.c: [NDEBUG] #undef assert and #define it as ((void)0), for the sake of some buggy assert.h (e.g. in MinGW and sunos4 pcc). (C_entries): Tag token renamed to still_in_token because sunos4 pcc wants to expand it as the token() macro even though it has no arguments. 2001-01-30 Francesco Potorti` * etags.c: [WIN32-NATIVE]: #undef MSDOS, #undef WINDOWSNT and #define it for the sake of Xemacs. [WINDOWSNT]: #undef HAVE_NTGUI even if built without HAVE_CONFIG_H. This change only affects a standalone etags. [WINDOWSNT]: #undef DOS_NT and #define it even if built with HAVE_CONFIG_H. This change does nothing in Emacs, as DOS_NT is always defined when HAVE_CONFIG_H and WINDOWS are both defined. [!HAVE_UNISTD_H]: use defined(WINDOWSNT) instead of the bare WINDOWSNT, as this is the correct way to use it. 2001-01-28 Francesco Potorti` * etags.c: Be capable to parse nested struct-like structures. (structdef, structtag): Struct state machine revisited. (struct tok): Revisited. (cstack, nestlev, instruct): New struct and macros. (pushclass_above, popclass_above, write_classname): New functions for dealing with nested class names, inspired by Mykola Dzyuba. (consider_token, make_C_tag, C_entries): Many changes for dealing with arbitrarily nested structures. (etags_getcwd): #if MSDOS, not #ifdef MSDOS! (C_entries): Consider templates in C++. (sym_type): New constant st_C_class for detecting "class" also in C mode. (C_AUTO): New macro for automatic detection of C++. (consider_token): Automatic set C++ mode. (C_entries): New security check for yacc. (print_language_names, print_help): Mention the autodetect feature, do not show help for the -C option, now mostly useless. (C_entries): Tag C++ forward declarations if --declarations. (C_entries): Don't be fooled by things like XDEFUN. (consider_token): Discard asm pseudo function. 2001-01-25 Francesco Potorti` * etags.c (struct tok): Renamed from struct token. (token): Renamed from tok. (structtype): Make it a local variable. [DEBUG]: Use assert. (xrnew): Change the synopsis. (typedefs_or_cplusplus): Renamed from typedefs_and_cplusplus. (grow_linebuffer): Don't call xrnew when not needed. (token): buffer renamed to line. (C_entries): Three calls to inibuffer moved here from main. (C_entries): Removed all references to var methodlen, delete it. (linebuffer_setlen): Was grow_buffer, now also sets len. (consider_token, C_entries, Pascal_functions): Use it. (C_entries): Preventing problems relative to extern "C". (C_entries): Can tag more than one variable or func separated by comma when --declarations is used. (C_entries): More accurate tagging of members and declarations. (yacc_rules): Was global, made local to C_entries. (next_token_is_func): Removed. (fvdef): New constants fdefunkey, fdefunname. (consider_token, C_entries): Use them. (C_entries): Build proper lisp names for Emacs DEFUNs. 2001-01-15 Francesco Potorti` * etags.c (print_language_names): Print filenames in addition to suffixes. 2001-01-12 Francesco Potorti` * etags.c (get_language_from_langname): Renamed from get_language_from_name. (get_language_from_filename): Renamed from get_language_from_suffix. Now first looks for the complete file name. (language): New member char **filenames. (Makefile_filenames): List of possible filenames for makefiles. (lang_names): Added a NULL member for every entry, added an entry for makefiles. (Makefile_targets): New function, inspired by Assar Westerlund . 2000-11-07 Francesco Potortì * etags.c (Texinfo_nodes): Renamed from Texinfo_fuctions and made it conformant to the style of the rest of the code. 2000-02-10 Francesco Potorti` * etags.c (iswhite): Redefined not to consider '\0' as white space, and use it throughout in place of isspace, thus preventing a potential signed char to int conversion problem. (MSDOS): #undefine befere redefining 2000-02-04 Francesco Potorti` * etags.c (many functions): Add prototypes. 2000-01-31 Francesco Potorti` * etags.c [MSDOS]: Set MSDOS to 1 if #defined, 0 otherwise. (get_compressor_from_suffix, process_file): Use MSDOS in if clause. (etags_strchr, etags_strrchr): Use const char * and int as arguments. (getenv, getcwd): Only declare them if necessary. (EMACS_NAME): New constant macro. (print_version): Use it. (P_) [__STDC__]: Macro for defining function prototypes. 2000-01-18 Fabrice Popineau * etags.c [WINDOWSNT]: #include 2000-01-18 Martin Buchholz * etags.c (all functions): Made them static. (all functions): Write prototypes. 1999-11-19 Francesco Potorti` * etags.c (_GNU_SOURCE): Define only if undefined. (get_scheme): Declaration deleted. (main): error was called with an integer as second arg, instead of a char pointer. (canonicalize_filename): Bug removed. 1999-11-18 Dave Love * etags.c (C_entries): Rename label `intoken', avoiding K&R lossage from name clash with macro. 1999-09-14 Francesco Potorti` * etags.c: Add suffix psw for PSWrap. (L_getit): Generalize a "cp!=' '" into "!isspace(*cp)". (Postscript_functions): Add code for PSWrap. (Scheme_functions): Use local pointer and new get_tag function. (get_tag): New name for old get_scheme. (process_file): Do not free NULL when file does not exist. (typdef): ttypedefseen renamed to tkeyseen, new label ttypeseen. (C_entries): Modifications that make --members tag even inside typedefs and C nested structs (one level only). (consider_token): Corrected a bug which prevented tagging of enum constants. (C_stab_entry): Added if, for, while, switch, return as st_C_ignore. This makes it simpler to work when cblev!=0. 1999-04-21 Francesco Potorti` * etags.c (C_entries): tag member function declarations when --declarations is used. 1999-04-20 Francesco Potorti` * etags.c (C_entries, consider_token): C++ `operator' now is tagged in most cases. As before, :: is not recognised if surrounded by spaces. 1999-01-14 Francesco Potorti` * etags.c (relative_filename): Account for DOS file names such that is impossible to make one relative to another. 1998-10-09 Francesco Potorti` * etags.c (sym_type): New st_C_extern tag. (gperf input): Use it for spotting external declarations. (print_help): Document the new behaviour of --declarations. (fvextern): New global variable. (consider_token, C_entries): Use it. 1998-06-19 Francesco Potorti` * etags.c (HAVE_GETCWD) [WINDOWSNT]: Define if undefined. (etags_getcwd): Remove test for WINDOWSNT. 1998-06-16 Eli Zaretskii * etags.c (process_file) [MSDOS]: If foo.c.gz is not found, try foo.cgz, foo.cz, etc. 1998-06-15 Francesco Potorti` * etags.c (declarations): New global switch. (longopts): Describe it. (print_help): Document it. (C_entries): Use it. (process_file): Don't process a file twice. 1998-06-02 Francesco Potorti` * etags.c (Fortran_functions): No tags for "procedure". 1998-05-29 Eli Zaretskii * etags.c (get_compressor_from_suffix): Second argument EXTPTR, if non-zero, returns a pointer to where the extension begins; callers changed. [MSDOS]: Support DOS file names by handling e.g. foo.cgz as if it were foo.c.gz. 1998-05-18 Francesco Potorti` * etags.c (sym_type, C_stab_entry): New constant st_C_operator. (fvdev): New constant foperator. (consider_token): Use it to get "operator" in C++. (C_entries): Extend length of operator@ function name. (C_entries): Use foperator when necessary. 1998-05-13 Francesco Potorti` * etags.c (main) [!ETAGS_REGEXPS]: Do not call free_patterns. 1998-05-12 Francesco Potorti` * etags.c (compressor): New struct for compressed files. (get_compressor_from_suffix): New function. (get_language_from_suffix): Use it. Also, semantics changed. (process_file): Consider compressed files, close file. (find_entries): Use different call arg for get_language_from_suffix, don't close file. 1998-05-11 Francesco Potorti` * etags.c (main): Call free_tree. (find_entries): Do not free curfile. (pfnote): Cosmetic change: NULL and '\0' where appropriate. (prolog_pred, erlang_func, substitute): Cast strlen to int when comparing. (canonicalize_filename): Shut up compiler warning. (Perl_functions): Make tag significant. 1997-11-27 Dave Love * etags.c (longopts, optstring): New option --ignore-case-regex (-c). (argument_type): New member at_icregexp. (lc_trans): New global. (main): Fill lc_trans. Process -c args. (add_regex): New arg determining whether to use translation table. (analyse_regex): New arg. Use it for add_regex. 1997-09-30 Francesco Potorti` * etags.c (init): Cosmetic change: NULL --> '\0'. (erlang_attribute): Bug corrected (uninitialized variable). (filename_is_absolute): New function replaces absolutefn macro and corrects a bug. All callers changed. (canonicalize_filename): New function. (process_file, etags_getcwd, absolute_dirname): Use it. (relative_filename, absolute_filename): Removed var shadowing. (C_entries, Pascal_functions): Add fake initializations to keep compilers quiet. (TeX_functions, Prolog_functions, Erlang_functions): Cleanup. 1997-09-20 Francesco Potorti` * etags.c (xrnew): New macro. All callers of xrealloc changed. (language): New typedef (was struct lang_entry). (curlang): New global variable. (node): typedef renamed from NODE. (linebuffer): New typedef (was struct linebuffer). (pattern): New typedef (was struct pattern). Some members added. Now used as element of a linked list. (patterns, num_patterns): Global variables deleted. (p_head): New global variable. (forced_lang): New global variable (replaces lang_func). (get_language_from_name, get_language_from_interpreter, get_language_from_suffix): Semantics changed. All callers changed. (last_node): New global variable. (free_tree, add_node, put_entries, total_size_of_entries): Change name of local vars to avoid clashes with typedef node. (number_len): Rewritten for elegance. (token): New typedef replaces TOKEN. (analyse_regex, add_regex): Rewritten for new functionality. (free_patterns): New function called from main and add_regex. (initbuffer, readline_internal, readline, grow_linebuffer): Change name of local vars to avoid clashes with typedef linebuffer. (readline): Rewritten for new functionality. 1997-09-04 Francesco Potorti` * etags.c: (Scheme_suffixes): New suffix ".ss". (print_help): --globals is now used for more than C-type languages. (Perl_functions): Tag global variables ("my" and "local"). 1997-08-22 Francesco Potorti` * etags.c (print_help): Some messages clarified. (LOOP_ON_INPUT_LINES): New macro. (just_read_file, Fortran_functions, Asm_labels, Perl_functions, Python_functions, Cobol_paragraphs, Pascal_functions, Lisp_functions, Postscript_functions, Scheme_functions, TeX_functions, Prolog_functions, Erlang_functions): Use it. (Cobol_paragraphs, Postscript_functions, TeX_functions, Prolog_functions, Erlang_functions): Use a local variable instead of the global variable dbp. (Pascal_functions, L_isquote, Scheme_functions): Use GNU coding standard indentation. 1997-08-21 Francesco Potorti` * etags.c (Python_suffixes, lang_names, Python_functions): Python support. (skip_spaces, skip_non_spaces): Utility functions. (find_entries, takeprec, getit, Fortran_functions, Perl_functions, Python_functions, L_getit, Lisp_functions, Scheme_functions, prolog_pred, erlanf_func, erlang_attribute): Use them. (eat_white): Deleted. 1997-08-20 Francesco Potorti` * etags.c (CHAR, init): Keep into account non US-ASCII characters and compilers with default signed chars. (L_getit): Tag "(defstruct (foo", "(defun (operator" and similar constructs. 1997-07-04 Francesco Potorti` * (C_stab_entry): "interface" in Java behaves like "class". 1997-06-23 Francesco Potorti` * etags.c: (HAVE_NTGUI) [WINDOWSNT]: #undef if HAVE_CONFIG_H. (main): Put interval syntax here. (add_regex): And remove it from here. 1997-06-17 Francesco Potorti` * etags.c (suggest_asking_for_help): Provide a meaningful help message with and without LONG_OPTIONS. 1997-06-09 Francesco Potorti` * etags.c: [MSDOS]: Include it, don't include string.h. : Don't test MSDOS when including them. (white, nonam, endtk): Like elsewhere, use \r instead of \013. (put_entries): Correctly use %ld instead of %d in printf. 1997-06-04 Francesco Potorti` * etags.c: [HAVE_UNISTD_H]: Include conditionally, else declare getcwd if HAVE_GETCWD. (consider_token): Dead break instruction removed. xemacs-21.4.22/etc/ETAGS.EBNF0000644000175000017500000001016510662405023013313 0ustar acsacs-*- indented-text -*- See the end of this file for copyright information. This file contains two sections: 1) An EBNF (Extended Backus-Naur Form) description of the format of the tags file created by etags.c and interpreted by etags.el; 2) A discussion of tag names and implicit tag names. ====================== 1) EBNF tag file description ===================== Productions created from current behaviour to aid extensions Francesco Potorti` 2002 ---------------- FF ::= #x0c /* tag section starter */ LF ::= #x0a /* line terminator */ DEL ::= #x7f /* pattern terminator */ SOH ::= #x01 /* name terminator */ regchar ::= [^#x0a#x0c#x7f] /* regular character */ regstring ::= { regchar } /* regular string */ unsint ::= [0-9] { [0-9] } /* non-negative integer */ tagfile ::= { tagsection } /* a tags file */ tagsection ::= FF LF ( includesec | regularsec ) LF includesec ::= filename ",include" [ LF fileprop ] regularsec ::= filename "," [ unsint ] [ LF fileprop ] { LF tag } filename ::= regchar regstring /* a file name */ fileprop ::= "(" regstring ")" /* an elisp alist */ tag ::= directtag | patterntag directtag ::= DEL realposition /* no pattern */ patterntag ::= pattern DEL [ tagname SOH ] position pattern ::= regstring /* a tag pattern */ tagname ::= regchar regstring /* a tag name */ position ::= realposition | "," /* charpos,linepos */ realposition ::= "," unsint | unsint "," | unsint "," unsint ==================== end of EBNF tag file description ==================== ======================= 2) discussion of tag names ======================= - WHAT ARE TAG NAMES Tag lines in a tags file are usually made from the above defined pattern and by an optional tag name. The pattern is a string that is searched in the source file to find the tagged line. - WHY TAG NAMES ARE GOOD When a user looks for a tag, Emacs first compares the tag with the tag names contained in the tags file. If no match is found, Emacs compares the tag with the patterns. The tag name is then the preferred way to look for tags in the tags file, because when the tag name is present Emacs can find a tag faster and more accurately. These tag names are part of tag lines in the tags file, so we call them "explicit". - WHY IMPLICIT TAG NAMES ARE EVEN BETTER When a tag line has no name, but a name can be deduced from the pattern, we say that the tag line has an implicit tag name. Often tag names are redundant; this happens when the name of a tag is an easily guessable substring of the tag pattern. We define a set of rules to decide whether it is possible to deduce the tag name from the pattern, and make an unnamed tag in those cases. The name deduced from the pattern of an unnamed tag is the implicit name of that tag. When the user looks for a tag, and Emacs finds no explicit tag names that match it, Emacs then looks for an tag whose implicit tag name matches the request. etags.c uses implicit tag names when possible, in order to reduce the size of the tags file. An implicit tag name is deduced from the pattern by discarding the last character if it is one of ` \f\t\n\r()=,;', then taking all the rightmost consecutive characters in the pattern which are not one of those. ===================== end of discussion of tag names ===================== Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. COPYING PERMISSIONS: This document is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA xemacs-21.4.22/etc/ETAGS.README0000644000175000017500000000456510662405023013545 0ustar acsacsetags is distributed under the following conditions: Copyright (C) 1984 The Regents of the University of California Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright (C) 1984, 1987, 1988, 1989, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is not considered part of GNU Emacs. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. xemacs-21.4.22/etc/Emacs.ad0000644000175000017500000002637007576025330013370 0ustar acsacs! This is the app-defaults file for XEmacs. ! ! This used to be identical to sample.Xdefaults, but the resources ! below have been rewritten to be as general as possible to avoid ! overriding user resources. Other than the form rewriting, both ! files should be kept in sync. ! ! The resources below are loaded into the XEmacs executable at compile-time: ! changes to .../etc/Emacs.ad made after XEmacs has been built will have no ! effect. ! ! However, you may copy .../etc/Emacs.ad to /usr/lib/X11/app-defaults/Emacs ! (or whatever the standard app-defaults directory is at your site) to cause ! it to be consulted at run-time. (Do this only for site-wide customizations: ! personal customizations should be put into ~/.Xdefaults instead.) ! Note that the file must be named Emacs, not XEmacs. ! ! See the NEWS file (C-h n) or XEmacs manual (C-h i) for a description of ! the various resources and the syntax for setting them. ! Colors and backgrounds. ! ====================== ! The contrasts of these colors will cause them to map to the appropriate ! one of "black" or "white" on monochrome systems. ! ! The valid color names on your system can be found by looking in the file ! `rgb.txt', usually found in /usr/lib/X11/ or /usr/openwin/lib/X11/. ! Set the modeline colors. !Emacs.modeline*attributeForeground: Black !Emacs.modeline*attributeBackground: Gray75 ! Set the color of the text cursor. !Emacs.text-cursor*attributeBackground: Red3 ! If you want to set the color of the mouse pointer, do this: ! Emacs.pointer*attributeForeground: Black ! If you want to set the background of the mouse pointer, do this: ! Emacs.pointer*attributeBackground: White ! Note that by default, the pointer foreground and background are the same ! as the default face. ! Set the menubar colors. This overrides the default foreground and ! background colors specified above. *menubar*Foreground: Gray30 *menubar*Background: Gray80 ! This is for buttons in the menubar. ! Yellow would be better, but that would map to white on monochrome. *menubar*buttonForeground: Blue *XlwMenu*highlightForeground: Red *XlwMenu*titleForeground: Maroon *XlwMenu*selectColor: ForestGreen *XmToggleButton*selectColor: ForestGreen ! Specify the colors of popup menus. *popup*Foreground: Black *popup*Background: Gray80 ! Specify the colors of the various sub-widgets of the dialog boxes. *dialog*Foreground: Black ! #A5C0C1 is a shade of blue *dialog*Background: #A5C0C1 ! The following three are for Motif dialog boxes ... *dialog*XmTextField*Background: WhiteSmoke *dialog*XmText*Background: WhiteSmoke *dialog*XmList*Background: WhiteSmoke ! While this one is for Athena dialog boxes. *dialog*Command*Background: WhiteSmoke ! Xlw Scrollbar colors *XlwScrollBar*Foreground: Gray30 *XlwScrollBar*Background: Gray80 *XmScrollBar*Foreground: Gray30 *XmScrollBar*Background: Gray80 ! ! The Lucid Scrollbar supports two added resources, SliderStyle is either ! "plain" (default) or "dimple". Dimple puts a small dimple in the middle ! of the slider that depresses when the slider is clicked on. ArrowPosition is ! either "opposite" (default) or "same". Opposite puts the arrows at opposite ! of the scrollbar, same puts both arrows at the same end, like the Amiga. ! ! Emacs*XlwScrollBar.SliderStyle: dimple ! Emacs*XlwScrollBar.ArrowPosition: opposite ! ! If you want to turn off a toolbar, set its height or width to 0. ! The correct size value is not really arbitrary. We only control it ! this way in order to avoid excess frame resizing when turning the ! toolbars on and off. ! ! To change the heights and widths of the toolbars: ! ! Emacs.topToolBarHeight: 37 ! Emacs.bottomToolBarHeight: 0 ! Emacs.leftToolBarWidth: 0 ! Emacs.rightToolBarWidth: 0 !*topToolBarShadowColor: Gray90 !*bottomToolBarShadowColor: Gray40 !*backgroundToolBarColor: Gray80 *toolBarShadowThickness: 2 ! If you want to turn off vertical scrollbars, or change the default ! pixel width of the vertical scrollbars, do it like this (0 width ! means no vertical scrollbars): ! ! Emacs.scrollBarWidth: 0 ! ! To change it for a particular frame, do this: ! ! Emacs*FRAME-NAME.scrollBarWidth: 0 ! If you want to turn off horizontal scrollbars, or change the default ! pixel height of the horizontal scrollbars, do it like this (0 height ! means no horizontal scrollbars): ! ! Emacs.scrollBarHeight: 0 ! ! To change it for a particular frame, do this: ! ! Emacs*FRAME-NAME.scrollBarHeight: 0 ! To dynamically change the labels used for menubar buttons... ! ! Emacs*XlwMenu.resourceLabels: True ! Emacs*XlwMenu.newFrame.labelString: Open Another Window ! To have the Motif scrollbars on the left instead of the right, do this: ! ! Emacs*scrollBarPlacement: BOTTOM_LEFT ! ! To have the Athena scrollbars on the right, use `BOTTOM_RIGHT' instead ! To have Motif scrollbars act more like Xt scrollbars... ! ! Emacs*XmScrollBar.translations: #override \n\ ! : PageDownOrRight(0) \n\ ! : PageUpOrLeft(0) ! Fonts. ! ====== ! XEmacs requires the use of XLFD (X Logical Font Description) format font ! names, which look like ! ! *-courier-medium-r-*-*-*-120-*-*-*-*-*-* ! ! if you use any of the other, less strict font name formats, some of which ! look like ! lucidasanstypewriter-12 ! and fixed ! and 9x13 ! ! then XEmacs won't be able to guess the names of the bold and italic versions. ! All X fonts can be referred to via XLFD-style names, so you should use those ! forms. See the man pages for X(1), xlsfonts(1), and xfontsel(1). ! The default font for the text area of XEmacs is chosen at run-time ! by lisp code which tries a number of different possibilities in order ! of preference. If you wish to override it, use this: ! ! Emacs.default.attributeFont: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* ! If you choose a font which does not have an italic version, you can specify ! some other font to use for it here: ! ! Emacs.italic.attributeFont: -*-courier-medium-o-*-*-*-120-*-*-*-*-iso8859-* ! ! If you choose a font which does not have a bold-italic version, ! you can specify some other font to use for it here: ! ! Emacs.bold-italic.attributeFont: -*-courier-bold-o-*-*-*-120-*-*-*-*-iso8859-* ! ! And here is how you would set the background color of the `highlight' face, ! but only on the screen named `debugger': ! ! Emacs*debugger.highlight.attributeBackground: PaleTurquoise ! ! See the NEWS file (C-h n) for a more complete description of the resource ! syntax of faces. ! Font of the modeline, menubar and pop-up menus. ! Note that the menubar resources do not use the `face' syntax, since they ! are X toolkit widgets and thus outside the domain of XEmacs proper. ! ! When X Font Sets are enabled with ./configure --with-xfs (eg, for ! multilingual menubars and XIM), some .font resources (those specific to ! the Lucid widget set) are ignored in favor of .fontSet resources. This ! example shows how to add fonts for Japanese menubars: ! ! *menubar*FontSet: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*, \ ! -*-*-*-*-*-*-*-120-*-jisx0208.1983-0 ! *menubar*Font: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-* *popup*Font: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-* *menubar*FontSet: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*, \ -*-*-*-*-*-*-*-120-*-iso10646-1, \ -*-*-*-*-*-*-*-120-*-jisx0208.1983-0, \ -*-*-*-*-*-*-*-120-*-jisx0201.1976-0 *popup*FontSet: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*, \ -*-*-*-*-*-*-*-120-*-iso10646-1, \ -*-*-*-*-*-*-*-120-*-jisx0208.1983-0, \ -*-*-*-*-*-*-*-120-*-jisx0201.1976-0 ! Gui elements share this font ! Emacs.gui-element.attributeFont: -*-helvetica-medium-r-*-*-*-120-*-*-*-*-iso8859-* ! Font in the Motif dialog boxes. ! (Motif uses `fontList' while most other things use `font' - if you don't ! know why you probably don't want to.) ! *XmDialogShell*FontList: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-* *XmTextField*FontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* *XmText*FontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* *XmList*FontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* ! Font in the Athena dialog boxes. ! I think 14-point looks nicer than 12-point. ! Some people use 12-point anyway because you get more text, but ! there's no purpose at all in doing this for dialog boxes. *Dialog*Font: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-* ! Dialog box translations. ! ======================= ! This accelerator binds in a dialog box to on button1 *dialog*button1.accelerators:#override\ Return: ArmAndActivate()\n\ KP_Enter: ArmAndActivate()\n\ Ctrlm: ArmAndActivate()\n ! Translations to make the TextField widget behave more like XEmacs *XmTextField*translations: #override\n\ !osfBackSpace: delete-previous-character()\n\ !osfDelete: delete-previous-character()\n\ !Ctrlh: delete-previous-character()\n\ !Ctrld: delete-next-character()\n\ !MetaosfDelete: delete-previous-word()\n\ !MetaosfBackSpace: delete-previous-word()\n\ !Metad: delete-next-word()\n\ !Ctrlk: delete-to-end-of-line()\n\ !Ctrlg: process-cancel()\n\ !Ctrlb: backward-character()\n\ !osfLeft: backward-character()\n\ !Ctrlf: forward-character()\n\ !osfRight: forward-character()\n\ !Metab: backward-word()\n\ !MetaosfLeft: backward-word()\n\ !Metaf: forward-word()\n\ !MetaosfRight: forward-word()\n\ !Ctrle: end-of-line()\n\ !Ctrla: beginning-of-line()\n\ !Ctrlw: cut-clipboard()\n\ !Metaw: copy-clipboard()\n\ : copy-primary()\n ! With the XEmacs typeahead it's better to not have space be bound to ! ArmAndActivate() for buttons that appear in dialog boxes. This is ! not 100% Motif compliant but the benefits far outweight the ! compliancy problem. *dialog*XmPushButton*translations:#override\n\ : Arm()\n\ ,: Activate()\ Disarm()\n\ (2+): MultiArm()\n\ (2+): MultiActivate()\n\ : Activate()\ Disarm()\n\ osfSelect: ArmAndActivate()\n\ osfActivate: ArmAndActivate()\n\ osfHelp: Help()\n\ ~Shift ~Meta ~Alt Return: ArmAndActivate()\n\ : Enter()\n\ : Leave()\n ! Native Widget translations ! ======================= Emacs*Text*translations: #override\n\ : widget-focus-in() select-start()\n ! XIM input method style ! ======================= ! ximStyles is a (whitespace or comma-separated) list of XIMStyles in ! order of user's preference. ! Choose a subset of the following styles or reorder to taste *ximStyles: XIMPreeditPosition|XIMStatusArea\ XIMPreeditPosition|XIMStatusNothing\ XIMPreeditPosition|XIMStatusNone\ XIMPreeditNothing|XIMStatusArea\ XIMPreeditNothing|XIMStatusNothing\ XIMPreeditNothing|XIMStatusNone\ XIMPreeditNone|XIMStatusArea\ XIMPreeditNone|XIMStatusNothing\ XIMPreeditNone|XIMStatusNone ! XIM Preedit and Status foreground and background *EmacsFrame.ximForeground: black *EmacsFrame.ximBackground: white ! XIM fontset (defaults to system fontset default) ! *EmacsFrame.FontSet: -dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-* xemacs-21.4.22/etc/FTP0000644000175000017500000001120407276211647012401 0ustar acsacs XEmacs availability information. Last Modified: 2001-02-01 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: * 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 + ftp.kr.xemacs.org (FTP) 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.at.xemacs.org (FTP) + ftp.at.xemacs.org (HTTP) o Belgium + ftp.be.xemacs.org (FTP) + ftp.be.xemacs.org (HTTP) o Denmark + ftp.dk.xemacs.org (FTP) + ftp.dk.xemacs.org (HTTP) o Finland + ftp.fi.xemacs.org (FTP) + ftp.fi.xemacs.org (HTTP) o France + ftp.fr.xemacs.org (FTP) + ftp.fr.xemacs.org (HTTP) Secondary Mirrors + ftp://ftp.pasteur.fr/pub/computing/xemacs/ o Germany + ftp.de.xemacs.org (FTP) + ftp.de.xemacs.org (HTTP) Secondary Mirrors + ftp://ftp.tu-darmstadt.de/pub/editors/xemacs/ o Hungary + ftp.hu.xemacs.org (FTP) + ftp.hu.xemacs.org (HTTP) o Ireland + ftp.ie.xemacs.org (FTP) + ftp.ie.xemacs.org (HTTP) o Italy + ftp.it.xemacs.org (FTP) + ftp.it.xemacs.org (HTTP) o Norway + ftp.no.xemacs.org (FTP) + ftp.no.xemacs.org (HTTP) o Poland + ftp.pl.xemacs.org (FTP) + ftp.pl.xemacs.org (HTTP) o Russia + 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.se.xemacs.org (FTP) + ftp.se.xemacs.org (HTTP) o Switzerland + ftp.ch.xemacs.org (FTP) + ftp.ch.xemacs.org (HTTP) o United Kingdom + ftp.uk.xemacs.org (FTP) + ftp.uk.xemacs.org (HTTP) Secondary Mirrors + ftp://sunsite.doc.ic.ac.uk/packages/xemacs/ + http://sunsite.doc.ic.ac.uk/packages/xemacs/ * Middle East o Saudi Arabia + 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 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. ----------------------------------------------------------------------- How to get GNU Software by Internet FTP or by UUCP: The XEmacs project is separate from and not managed by the GNU project. The latest GNU project FTP and UUCP availability information can be found at ftp://ftp.gnu.org/gnu/GNUinfo/FTP xemacs-21.4.22/etc/GNU0000644000175000017500000006334206256071510012401 0ustar acsacsCopyright (C) 1985, 1993 Free Software Foundation, Inc. Permission is granted to anyone to make or distribute verbatim copies of this document, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Modified versions may not be made. The GNU Manifesto ***************** The GNU Manifesto which appears below was written by Richard Stallman at the beginning of the GNU project, to ask for participation and support. For the first few years, it was updated in minor ways to account for developments, but now it seems best to leave it unchanged as most people have seen it. Since that time, we have learned about certain common misunderstandings that different wording could help avoid. Footnotes added in 1993 help clarify these points. For up-to-date information about the available GNU software, please see the latest issue of the GNU's Bulletin. The list is much too long to include here. What's GNU? Gnu's Not Unix! ============================ GNU, which stands for Gnu's Not Unix, is the name for the complete Unix-compatible software system which I am writing so that I can give it away free to everyone who can use it.(1) Several other volunteers are helping me. Contributions of time, money, programs and equipment are greatly needed. So far we have an Emacs text editor with Lisp for writing editor commands, a source level debugger, a yacc-compatible parser generator, a linker, and around 35 utilities. A shell (command interpreter) is nearly completed. A new portable optimizing C compiler has compiled itself and may be released this year. An initial kernel exists but many more features are needed to emulate Unix. When the kernel and compiler are finished, it will be possible to distribute a GNU system suitable for program development. We will use TeX as our text formatter, but an nroff is being worked on. We will use the free, portable X window system as well. After this we will add a portable Common Lisp, an Empire game, a spreadsheet, and hundreds of other things, plus on-line documentation. We hope to supply, eventually, everything useful that normally comes with a Unix system, and more. GNU will be able to run Unix programs, but will not be identical to Unix. We will make all improvements that are convenient, based on our experience with other operating systems. In particular, we plan to have longer file names, file version numbers, a crashproof file system, file name completion perhaps, terminal-independent display support, and perhaps eventually a Lisp-based window system through which several Lisp programs and ordinary Unix programs can share a screen. Both C and Lisp will be available as system programming languages. We will try to support UUCP, MIT Chaosnet, and Internet protocols for communication. GNU is aimed initially at machines in the 68000/16000 class with virtual memory, because they are the easiest machines to make it run on. The extra effort to make it run on smaller machines will be left to someone who wants to use it on them. To avoid horrible confusion, please pronounce the `G' in the word `GNU' when it is the name of this project. Why I Must Write GNU ==================== I consider that the golden rule requires that if I like a program I must share it with other people who like it. Software sellers want to divide the users and conquer them, making each user agree not to share with others. I refuse to break solidarity with other users in this way. I cannot in good conscience sign a nondisclosure agreement or a software license agreement. For years I worked within the Artificial Intelligence Lab to resist such tendencies and other inhospitalities, but eventually they had gone too far: I could not remain in an institution where such things are done for me against my will. So that I can continue to use computers without dishonor, I have decided to put together a sufficient body of free software so that I will be able to get along without any software that is not free. I have resigned from the AI lab to deny MIT any legal excuse to prevent me from giving GNU away. Why GNU Will Be Compatible with Unix ==================================== Unix is not my ideal system, but it is not too bad. The essential features of Unix seem to be good ones, and I think I can fill in what Unix lacks without spoiling them. And a system compatible with Unix would be convenient for many other people to adopt. How GNU Will Be Available ========================= GNU is not in the public domain. Everyone will be permitted to modify and redistribute GNU, but no distributor will be allowed to restrict its further redistribution. That is to say, proprietary modifications will not be allowed. I want to make sure that all versions of GNU remain free. Why Many Other Programmers Want to Help ======================================= I have found many other programmers who are excited about GNU and want to help. Many programmers are unhappy about the commercialization of system software. It may enable them to make more money, but it requires them to feel in conflict with other programmers in general rather than feel as comrades. The fundamental act of friendship among programmers is the sharing of programs; marketing arrangements now typically used essentially forbid programmers to treat others as friends. The purchaser of software must choose between friendship and obeying the law. Naturally, many decide that friendship is more important. But those who believe in law often do not feel at ease with either choice. They become cynical and think that programming is just a way of making money. By working on and using GNU rather than proprietary programs, we can be hospitable to everyone and obey the law. In addition, GNU serves as an example to inspire and a banner to rally others to join us in sharing. This can give us a feeling of harmony which is impossible if we use software that is not free. For about half the programmers I talk to, this is an important happiness that money cannot replace. How You Can Contribute ====================== I am asking computer manufacturers for donations of machines and money. I'm asking individuals for donations of programs and work. One consequence you can expect if you donate machines is that GNU will run on them at an early date. The machines should be complete, ready to use systems, approved for use in a residential area, and not in need of sophisticated cooling or power. I have found very many programmers eager to contribute part-time work for GNU. For most projects, such part-time distributed work would be very hard to coordinate; the independently-written parts would not work together. But for the particular task of replacing Unix, this problem is absent. A complete Unix system contains hundreds of utility programs, each of which is documented separately. Most interface specifications are fixed by Unix compatibility. If each contributor can write a compatible replacement for a single Unix utility, and make it work properly in place of the original on a Unix system, then these utilities will work right when put together. Even allowing for Murphy to create a few unexpected problems, assembling these components will be a feasible task. (The kernel will require closer communication and will be worked on by a small, tight group.) If I get donations of money, I may be able to hire a few people full or part time. The salary won't be high by programmers' standards, but I'm looking for people for whom building community spirit is as important as making money. I view this as a way of enabling dedicated people to devote their full energies to working on GNU by sparing them the need to make a living in another way. Why All Computer Users Will Benefit =================================== Once GNU is written, everyone will be able to obtain good system software free, just like air.(2) This means much more than just saving everyone the price of a Unix license. It means that much wasteful duplication of system programming effort will be avoided. This effort can go instead into advancing the state of the art. Complete system sources will be available to everyone. As a result, a user who needs changes in the system will always be free to make them himself, or hire any available programmer or company to make them for him. Users will no longer be at the mercy of one programmer or company which owns the sources and is in sole position to make changes. Schools will be able to provide a much more educational environment by encouraging all students to study and improve the system code. Harvard's computer lab used to have the policy that no program could be installed on the system if its sources were not on public display, and upheld it by actually refusing to install certain programs. I was very much inspired by this. Finally, the overhead of considering who owns the system software and what one is or is not entitled to do with it will be lifted. Arrangements to make people pay for using a program, including licensing of copies, always incur a tremendous cost to society through the cumbersome mechanisms necessary to figure out how much (that is, which programs) a person must pay for. And only a police state can force everyone to obey them. Consider a space station where air must be manufactured at great cost: charging each breather per liter of air may be fair, but wearing the metered gas mask all day and all night is intolerable even if everyone can afford to pay the air bill. And the TV cameras everywhere to see if you ever take the mask off are outrageous. It's better to support the air plant with a head tax and chuck the masks. Copying all or parts of a program is as natural to a programmer as breathing, and as productive. It ought to be as free. Some Easily Rebutted Objections to GNU's Goals ============================================== "Nobody will use it if it is free, because that means they can't rely on any support." "You have to charge for the program to pay for providing the support." If people would rather pay for GNU plus service than get GNU free without service, a company to provide just service to people who have obtained GNU free ought to be profitable.(3) We must distinguish between support in the form of real programming work and mere handholding. The former is something one cannot rely on from a software vendor. If your problem is not shared by enough people, the vendor will tell you to get lost. If your business needs to be able to rely on support, the only way is to have all the necessary sources and tools. Then you can hire any available person to fix your problem; you are not at the mercy of any individual. With Unix, the price of sources puts this out of consideration for most businesses. With GNU this will be easy. It is still possible for there to be no available competent person, but this problem cannot be blamed on distribution arrangements. GNU does not eliminate all the world's problems, only some of them. Meanwhile, the users who know nothing about computers need handholding: doing things for them which they could easily do themselves but don't know how. Such services could be provided by companies that sell just hand-holding and repair service. If it is true that users would rather spend money and get a product with service, they will also be willing to buy the service having got the product free. The service companies will compete in quality and price; users will not be tied to any particular one. Meanwhile, those of us who don't need the service should be able to use the program without paying for the service. "You cannot reach many people without advertising, and you must charge for the program to support that." "It's no use advertising a program people can get free." There are various forms of free or very cheap publicity that can be used to inform numbers of computer users about something like GNU. But it may be true that one can reach more microcomputer users with advertising. If this is really so, a business which advertises the service of copying and mailing GNU for a fee ought to be successful enough to pay for its advertising and more. This way, only the users who benefit from the advertising pay for it. On the other hand, if many people get GNU from their friends, and such companies don't succeed, this will show that advertising was not really necessary to spread GNU. Why is it that free market advocates don't want to let the free market decide this?(4) "My company needs a proprietary operating system to get a competitive edge." GNU will remove operating system software from the realm of competition. You will not be able to get an edge in this area, but neither will your competitors be able to get an edge over you. You and they will compete in other areas, while benefiting mutually in this one. If your business is selling an operating system, you will not like GNU, but that's tough on you. If your business is something else, GNU can save you from being pushed into the expensive business of selling operating systems. I would like to see GNU development supported by gifts from many manufacturers and users, reducing the cost to each.(5) "Don't programmers deserve a reward for their creativity?" If anything deserves a reward, it is social contribution. Creativity can be a social contribution, but only in so far as society is free to use the results. If programmers deserve to be rewarded for creating innovative programs, by the same token they deserve to be punished if they restrict the use of these programs. "Shouldn't a programmer be able to ask for a reward for his creativity?" There is nothing wrong with wanting pay for work, or seeking to maximize one's income, as long as one does not use means that are destructive. But the means customary in the field of software today are based on destruction. Extracting money from users of a program by restricting their use of it is destructive because the restrictions reduce the amount and the ways that the program can be used. This reduces the amount of wealth that humanity derives from the program. When there is a deliberate choice to restrict, the harmful consequences are deliberate destruction. The reason a good citizen does not use such destructive means to become wealthier is that, if everyone did so, we would all become poorer from the mutual destructiveness. This is Kantian ethics; or, the Golden Rule. Since I do not like the consequences that result if everyone hoards information, I am required to consider it wrong for one to do so. Specifically, the desire to be rewarded for one's creativity does not justify depriving the world in general of all or part of that creativity. "Won't programmers starve?" I could answer that nobody is forced to be a programmer. Most of us cannot manage to get any money for standing on the street and making faces. But we are not, as a result, condemned to spend our lives standing on the street making faces, and starving. We do something else. But that is the wrong answer because it accepts the questioner's implicit assumption: that without ownership of software, programmers cannot possibly be paid a cent. Supposedly it is all or nothing. The real reason programmers will not starve is that it will still be possible for them to get paid for programming; just not paid as much as now. Restricting copying is not the only basis for business in software. It is the most common basis because it brings in the most money. If it were prohibited, or rejected by the customer, software business would move to other bases of organization which are now used less often. There are always numerous ways to organize any kind of business. Probably programming will not be as lucrative on the new basis as it is now. But that is not an argument against the change. It is not considered an injustice that sales clerks make the salaries that they now do. If programmers made the same, that would not be an injustice either. (In practice they would still make considerably more than that.) "Don't people have a right to control how their creativity is used?" "Control over the use of one's ideas" really constitutes control over other people's lives; and it is usually used to make their lives more difficult. People who have studied the issue of intellectual property rights carefully (such as lawyers) say that there is no intrinsic right to intellectual property. The kinds of supposed intellectual property rights that the government recognizes were created by specific acts of legislation for specific purposes. For example, the patent system was established to encourage inventors to disclose the details of their inventions. Its purpose was to help society rather than to help inventors. At the time, the life span of 17 years for a patent was short compared with the rate of advance of the state of the art. Since patents are an issue only among manufacturers, for whom the cost and effort of a license agreement are small compared with setting up production, the patents often do not do much harm. They do not obstruct most individuals who use patented products. The idea of copyright did not exist in ancient times, when authors frequently copied other authors at length in works of non-fiction. This practice was useful, and is the only way many authors' works have survived even in part. The copyright system was created expressly for the purpose of encouraging authorship. In the domain for which it was invented--books, which could be copied economically only on a printing press--it did little harm, and did not obstruct most of the individuals who read the books. All intellectual property rights are just licenses granted by society because it was thought, rightly or wrongly, that society as a whole would benefit by granting them. But in any particular situation, we have to ask: are we really better off granting such license? What kind of act are we licensing a person to do? The case of programs today is very different from that of books a hundred years ago. The fact that the easiest way to copy a program is from one neighbor to another, the fact that a program has both source code and object code which are distinct, and the fact that a program is used rather than read and enjoyed, combine to create a situation in which a person who enforces a copyright is harming society as a whole both materially and spiritually; in which a person should not do so regardless of whether the law enables him to. "Competition makes things get done better." The paradigm of competition is a race: by rewarding the winner, we encourage everyone to run faster. When capitalism really works this way, it does a good job; but its defenders are wrong in assuming it always works this way. If the runners forget why the reward is offered and become intent on winning, no matter how, they may find other strategies--such as, attacking other runners. If the runners get into a fist fight, they will all finish late. Proprietary and secret software is the moral equivalent of runners in a fist fight. Sad to say, the only referee we've got does not seem to object to fights; he just regulates them ("For every ten yards you run, you can fire one shot"). He really ought to break them up, and penalize runners for even trying to fight. "Won't everyone stop programming without a monetary incentive?" Actually, many people will program with absolutely no monetary incentive. Programming has an irresistible fascination for some people, usually the people who are best at it. There is no shortage of professional musicians who keep at it even though they have no hope of making a living that way. But really this question, though commonly asked, is not appropriate to the situation. Pay for programmers will not disappear, only become less. So the right question is, will anyone program with a reduced monetary incentive? My experience shows that they will. For more than ten years, many of the world's best programmers worked at the Artificial Intelligence Lab for far less money than they could have had anywhere else. They got many kinds of non-monetary rewards: fame and appreciation, for example. And creativity is also fun, a reward in itself. Then most of them left when offered a chance to do the same interesting work for a lot of money. What the facts show is that people will program for reasons other than riches; but if given a chance to make a lot of money as well, they will come to expect and demand it. Low-paying organizations do poorly in competition with high-paying ones, but they do not have to do badly if the high-paying ones are banned. "We need the programmers desperately. If they demand that we stop helping our neighbors, we have to obey." You're never so desperate that you have to obey this sort of demand. Remember: millions for defense, but not a cent for tribute! "Programmers need to make a living somehow." In the short run, this is true. However, there are plenty of ways that programmers could make a living without selling the right to use a program. This way is customary now because it brings programmers and businessmen the most money, not because it is the only way to make a living. It is easy to find other ways if you want to find them. Here are a number of examples. A manufacturer introducing a new computer will pay for the porting of operating systems onto the new hardware. The sale of teaching, hand-holding and maintenance services could also employ programmers. People with new ideas could distribute programs as freeware, asking for donations from satisfied users, or selling hand-holding services. I have met people who are already working this way successfully. Users with related needs can form users' groups, and pay dues. A group would contract with programming companies to write programs that the group's members would like to use. All sorts of development can be funded with a Software Tax: Suppose everyone who buys a computer has to pay x percent of the price as a software tax. The government gives this to an agency like the NSF to spend on software development. But if the computer buyer makes a donation to software development himself, he can take a credit against the tax. He can donate to the project of his own choosing--often, chosen because he hopes to use the results when it is done. He can take a credit for any amount of donation up to the total tax he had to pay. The total tax rate could be decided by a vote of the payers of the tax, weighted according to the amount they will be taxed on. The consequences: * The computer-using community supports software development. * This community decides what level of support is needed. * Users who care which projects their share is spent on can choose this for themselves. In the long run, making programs free is a step toward the post-scarcity world, where nobody will have to work very hard just to make a living. People will be free to devote themselves to activities that are fun, such as programming, after spending the necessary ten hours a week on required tasks such as legislation, family counseling, robot repair and asteroid prospecting. There will be no need to be able to make a living from programming. We have already greatly reduced the amount of work that the whole society must do for its actual productivity, but only a little of this has translated itself into leisure for workers because much nonproductive activity is required to accompany productive activity. The main causes of this are bureaucracy and isometric struggles against competition. Free software will greatly reduce these drains in the area of software production. We must do this, in order for technical gains in productivity to translate into less work for us. ---------- Footnotes ---------- (1) The wording here was careless. The intention was that nobody would have to pay for *permission* to use the GNU system. But the words don't make this clear, and people often interpret them as saying that copies of GNU should always be distributed at little or no charge. That was never the intent; later on, the manifesto mentions the possibility of companies providing the service of distribution for a profit. Subsequently I have learned to distinguish carefully between "free" in the sense of freedom and "free" in the sense of price. Free software is software that users have the freedom to distribute and change. Some users may obtain copies at no charge, while others pay to obtain copies--and if the funds help support improving the software, so much the better. The important thing is that everyone who has a copy has the freedom to cooperate with others in using it. (2) This is another place I failed to distinguish carefully between the two different meanings of "free". The statement as it stands is not false--you can get copies of GNU software at no charge, from your friends or over the net. But it does suggest the wrong idea. (3) Several such companies now exist. (4) The Free Software Foundation raises most of its funds from a distribution service, although it is a charity rather than a company. If *no one* chooses to obtain copies by ordering the from the FSF, it will be unable to do its work. But this does not mean that proprietary restrictions are justified to force every user to pay. If a small fraction of all the users order copies from the FSF, that is sufficient to keep the FSF afloat. So we ask users to choose to support us in this way. Have you done your part? (5) A group of computer companies recently pooled funds to support maintenance of the GNU C Compiler. xemacs-21.4.22/etc/HELLO0000644000175000017500000000305107265370775012622 0ustar acsacsYou need many fonts to read all. Please correct this incomplete list and add more! --------------------------------------------------------- Amharic ($(3"c!(B Arabic [2](38R(47d(3T!JSa(4W(3W[0](B Croatian (Hrvatski) Bog (Bok), Dobar dan Czech (.BNhesky) DobrN} den Danish (Dansk) Hej, Goddag English Hello Esperanto Saluton Estonian Tere, Tervist FORTRAN PROGRAM Finnish (Suomi) Hei French (Fran.ANgais) Bonjour, Salut German (Deutsch Nord) Guten Tag German (Deutsch S.AN|d) GrN|N_ Gott Greek (.FNENkNkNgNmNiNjN\) NCNeNiN\ NsNaNr Hebrew [2].HNyNlNeNm[0] Italiano Ciao, Buon giorno Maltese Ciao Nederlands, Vlaams Hallo, Hoi, Goedendag Norwegian (Norsk) Hei, God dag Polish Cze.BN6Nf! Russian (.LN@NcNaNaNZNXNY) N7NTN`NPNRNaNbNRNcNYNbNU! Slovak Dobr.BN} deNr Spanish (Espa.ANqol) N!Hola! Swedish (Svenska) Hej, Goddag Thai ($(?@0R0I0R0d070B0(B) $(?J0G8J04H$0C8:0(B, $(?J0G8J04H$2P0(B Tigrigna ($(3"8#r!N"^(B) $(3!Q!,!<"8(B Turkish (T.AN|rkNge) Merhaba Vietnamese (Ti.1N*ng ViN.t) ChN`o bNUn Japanese ($BF|K\8l(B) $B$3$s$K$A$O(B, *IN:N]NFNANJ, $BqV$(DiQ(B Chinese ($AVPND(B,$AFUM(;0(B,$A::So(B) $ADc:C(B Cantonese ($(0GnM$(B,$(0N]0*Hd(B) $(0*/=((B, $(0+$)p(B Hangul ($(CGQ1[(B) $(C>H3gGO<H3gGO=J4O1n(B Difference among chinese characters in GB, JIS, KSC, BIG5: GB -- $AT*Fx(B $A?*7"(B JIS -- $B855$(B $B3+H/(B KSC -- $(Cj*Q((B $(CKR[!(B BIG5 -- $(0&x86(B $(0DeBv(B xemacs-21.4.22/etc/InstallGuide0000644000175000017500000000721206370253652014334 0ustar acsacsIntroduction Thank you for downloading XEmacs. We of the XEmacs development team believe user satisfaction is our number one priority, and we hope that you will be pleased with the power of our editor. Please follow all of the instructions in order to enjoy a quick and easy installation. Getting Started In this guide, information which you will need to supply will be enclosed in angle brackets, . Commands which you will have to enter will be indented, like this. You will need to provide a loading directory, in which to load the material from tape (/tmp/xemacs is recommended), and a permanent installation directory (/usr/local/xemacs is recommended). Loading From Tape First create and change directory to the loading directory: mkdir cd Now you are ready to load the software from tape. The specific device name needed to load the tape varies with hardware vendors, and may be found in Appendix A, "Vendors and Device Names". Load the software from tape: tar xvf /dev/ You have now loaded all of the software from tape, and are ready to compile and install the XEmacs Text Editor. Compiling and Installing the XEmacs Editor Compiling and installing the libraries is handled by a user-friendly shell script. You will need to provide some information to the script, such as your organization name and registration number. To run the script, type /bin/sh xemacs/xemacs.install -d Follow the script's directions, and provide the information which it prompts for. When the script prompts you for the directory in which the distribution files are located, you will find that you are unable to provide it with any directory which the script will deem satisfactory. That is because it is necessary to order the following additional parts which are necessary to continue with the installation: Part Number Qty Name Price GM-96-3026 1 Goat, male 1000.00 CB-13-2395 1 Candle, black 50.00 CG-63-6376 1 Chalk dust container 10.00 IB-89-3335 5 Incense sticks 5.00 DE-44-8846 1 Dagger, ebon, curved 500.00 AS-87-2319 1 Altar, silver 10000.00 Wait until the additional parts arrive; you will be ready to continue the installation the next Friday the 13th at midnight. Ritual for Successfully Completing Installation Stand in front of the computer. Pour out the chalk dust in an inscribed pentagram around you; be sure that it is without breaks. Set an incense stick at each of the five corners, the altar in front of the computer, and the candle in front of the altar. Light each of the incense sticks and the candles, chanting in a low voice: Daemons and spirits of the netherworld Forces of all that is chaotic and mysterious Essence of Netscape and MicroSoft I am coming here to appease you I offer you this goat That my software may work I bind you here Do not make my system crash Let the software install as advertised Place the goat on the altar, and slaughter it with the dagger. May this goat feed you Sate your lust for blood Into it may your mischief fly Not my computer Make the software work For this is the only way Then spit into the computer's ventilation slots. This will complete different circuits inside the computer, causing its motherboard and cards to function in ways that the engineers never intended, thereby making your system compatible with our libraries. Reboot your computer. The installation is now complete. [This has undergone a minor rewrite for XEmacs. It originally appeared on rec.humor.funny courtesy of jonathan seth hayward , and is included by permission of the author]. xemacs-21.4.22/etc/LPF0000644000175000017500000001161706256071510012367 0ustar acsacs Protect Your Freedom to Write Programs Join the League for Programming Freedom (Version of February 3, 1994) Ten years ago, programmers were allowed to write programs using all the techniques they knew, and providing whatever features they felt were useful. This is no longer the case. New monopolies, known as software patents and interface copyrights, have taken away our freedom of expression and our ability to do a good job. "Look and feel" lawsuits attempt to monopolize well-known command languages; some have succeeded. Copyrights on command languages enforce gratuitous incompatibility, close opportunities for competition, and stifle incremental improvements. Software patents are even more dangerous; they make every design decision in the development of a program carry a risk of a lawsuit, with draconian pretrial seizure. It is difficult and expensive to find out whether the techniques you consider using are patented; it is impossible to find out whether they will be patented in the future. The League for Programming Freedom is a grass-roots organization of professors, students, businessmen, programmers and users dedicated to bringing back the freedom to write programs. The League is not opposed to the legal system that Congress expressly established for software--copyright on individual programs. Our aim is to reverse the recent changes that prevent programmers from doing their work. The League works to abolish the new monopolies by publishing articles, talking with public officials, denouncing egregious offenders, and filing amicus curiae briefs, most notably against Lotus in its suit against Borland. We testified twice at the recent Patent Office hearings on software patents. We welcome suggestions for other activities, as well as help in carrying them out. Membership dues in the League are $42 per year for programmers, managers and professionals; $10.50 for students; $21 for others. Please give more if you can. The League's funds will be used for filing briefs; for printing handouts, buttons and signs; whatever will persuade the courts, the legislators, and the people. You may not get anything personally for your dues--except for the freedom to write programs. The League is a non-profit corporation, but not considered a tax-exempt charity. However, for those self-employed in software, the dues can be a business expense. The League needs both activist members and members who only pay their dues. We also greatly need additional corporate members; contact us for information. If you have any questions, please write to the League, phone +1 617 621 7084, or send Internet mail to lpf@uunet.uu.net. Chris Hofstader, President Dean Anderson, Secretary Aubrey Jaffer, Treasurer Chris Hofstader can be reached at (617) 492-0023; FAX (617) 497-1632. To join, please send a check and the following information to: League for Programming Freedom 1 Kendall Square #143 P.O.Box 9171 Cambridge, Massachusetts 02139 (Outside the US, please send a check in US dollars on a bank having a US correspondent bank, to save us check cashing fees.) Your name: The address for League mailings, a few each year; please indicate whether it is your home address or your work address: The company you work for, and your position: Your phone numbers (home, work or both): Your email address, so we can contact you for demonstrations or for writing letters. (If you don't want us to contact you for these things, please say so, but please give us your email address anyway so we can save paper and postage by sending you the newsletter by email.) Is there anything about you which would enable your endorsement of the LPF to impress the public? For example, if you are or have been a professor or an executive, or have written software that has a good reputation, please tell us. Would you like to help with LPF activities? The corporate charter of the League for Programming Freedom states: The purpose of the corporation is to engage in the following activities: 1. To determine the existence of, and warn the public about restrictions and monopolies on classes of computer programs where such monopolies prevent or restrict the right to develop certain types of computer programs. 2. To develop countermeasures and initiatives, in the public interest, effective to block or otherwise prevent or restrain such monopolistic activities including education, research, publications, public assembly, legislative testimony, and intervention in court proceedings involving public interest issues (as a friend of the court). 3. To engage in any business or other activity in service of and related to the foregoing paragraphs that lawfully may be carried on by a corporation organized under Chapter 180 of the Massachusetts General Laws. The officers and directors of the League will be elected annually by the members. xemacs-21.4.22/etc/MACHINES0000644000175000017500000000344407267512040013135 0ustar acsacsThis is a list of the status of XEmacs on various machines and systems. See PROBLEMS for particular problems and possible workarounds. Much effort has gone into making XEmacs work on as many different machines, configurations, and compilers as possible. Much effort has gone into making XEmacs 64-bit clean. Much effort has gone into removing system-specific code, and replacing such code with autodetection at configure time. The XEmacs core should build "out of the box" on most Unix-like systems. XEmacs 21.2 (the development branch that is the base for the 21.4 release series) was tested and `make check' succeeded on these Unix configurations as of 2001-02-10: alphaev56-dec-osf4.0e (both Compaq C and gcc) i386-unknown-freebsd4.2 i386-unknown-netbsdelf1.5 i586-sco-sysv5uw7.0.1 (both SCO's cc and gcc) i686-pc-linux-gnu hppa2.0-hp-hpux10.20 (both HP's ANSI cc and gcc) mips-sgi-irix6.5 (both MIPSpro cc and gcc) rs6000-ibm-aix4.3.0.0 (both IBM's xlc and gcc) sparc-sun-solaris2.6 (both Sun's Forte C and gcc) sparc-sun-solaris2.7 (both Sun's Forte C and gcc) sparc-sun-sunos4.1.4 (gcc) Some systems have a dual mode 32-bit/64-bit compiler. On most of these, XEmacs requires the --pdump configure option to build correctly with the 64-bit version of the compiler. mips-sgi-irix6.5, CC="gcc -mabi=64" mips-sgi-irix6.5, CC="cc -64" rs6000-ibm-aix4.3.0.0, CC="cc -q64" On most of these systems, XEmacs also builds with a C++ compiler, but not "out of the box". This feature is only for use by the maintainers. XEmacs 21.2 (and therefore 21.4) is known _not_ to work on any machines with m680x0 processors. Sorry, all you sun3 and Unix PC nostalgia buffs out there. VMS has never been supported by XEmacs. In fact, all the old VMS code inherited from Emacs has been removed. Sorry, all you VMS fans out there. xemacs-21.4.22/etc/MAILINGLISTS0000644000175000017500000001057707013323644013651 0ustar acsacs XEmacs Electronic Mailing Lists. Last Modified: 1999-11-08 XEmacs has its own mailing lists and newsgroup which are distinct from the FSF GNU Emacs mailing lists and newsgroups. The mailing lists are: xemacs@xemacs.org comp.emacs.xemacs bi-directional gateway. xemacs is an open list for discussion and bug reporting for XEmacs. This mailing list is bi-directionally gatewayed with the USENET newsgroup comp.emacs.xemacs. xemacs-announce@xemacs.org XEmacs Announcements. xemacs-announce is a read-only, low volume list for announcements concerning the XEmacs project and new releases of the XEmacs software. xemacs-beta@xemacs.org XEmacs Beta Testers. xemacs-beta is an open list for bug reports and general communication about beta versions of XEmacs. xemacs-build-reports@xemacs.org XEmacs Build Report Submissions. xemacs-build-reports is an open list for submission of build-reports on beta versions of XEmacs. For information on what the build-reports should contain, please see the `etc/BETA' file which is included in each beta distribution. xemacs-cvs@xemacs.org XEmacs CVS Commit Notices. xemacs-cvs is a read-only list for notices and information on what has been committed to the XEmacs CVS trees, by whom, and for what. (For more information on the XEmacs CVS Archive: http://cvs.xemacs.org/.) xemacs-mule@xemacs.org XEmacs International Extensions. xemacs-mule is an open mailing list for discussion of International extensions to XEmacs including Mule, XIM, I18n issues, etc, and is not confined to developmental issues. This list is not restricted to English, postings in all languages are welcome. xemacs-nt@xemacs.org XEmacs on Windows NT/98/95. xemacs-nt is a developer's only mailing list and is intended for people who wish to work actively on the porting of XEmacs to Microsoft Windows NT and Microsoft Windows 98/95. xemacs-patches@xemacs.org XEmacs Patch Submissions. xemacs-patches is an open, moderated list for submission of patches to the XEmacs distribution and its packages. Anyone may subscribe or submit to xemacs-patches, but all submissions are reviewed by the list moderator before they are distributed to the list. Discussion is not appropriate on xemacs-patches. xemacs-users-ja@xemacs.org XEmacs (Japanese). xemacs-users-ja is an open list for discussion and bug reporting for XEmacs. Japanese is the preferred language of discussion. It is not gated to comp.emacs.xemacs or the xemacs list. For fastest response, bugs not specifically related to Japanese or Mule features should be reported on xemacs (in English). xemacs-beta-ja@xemacs.org XEmacs Beta (Japanese). xemacs-beta-ja is an open list for bug reports and general communication about beta versions of XEmacs, especially features related to Mule and Japanese-handling. Japanese is the preferred language of discussion. Bugs not specifically related to Japanese or Mule features should be reported on xemacs-beta (in English). Please consider sending bug reports on Mule to xemacs-mule, in English. The most up to date information on the mailing lists can always be found at http://www.xemacs.org/. Subscriptions: Subscription to all the lists is accomplished by sending an e-mail message to LISTNAME-request@xemacs.org with `subscribe' (without the quotes) as the BODY of the message. To unsubscribe, send an e-mail to LISTNAME-request@xemacs.org with `unsubscribe' (without the quotes) as the BODY of the message. List Archives: A browsable and searchable archive of these lists is available at http://www.xemacs.org/list-archives/. Problems: Any comments, questions, or complaints about the lists should be brought to the attention of the XEmacs Mailing List Manager . ----------------------------------------------------------------------- GNU Project Electronic Mailing Lists and gnUSENET Newsgroups: The XEmacs project is separate from and not managed by the GNU project. The latest information about the GNU project mailing lists can be found at ftp://ftp.gnu.org/gnu/GNUinfo/MAILINGLISTS Please do NOT send messages about problems with XEmacs to the FSF GNU Emacs newsgroups and mailing lists unless you are sure that the problem you are reporting is a problem with both versions of GNU Emacs. People who aren't subscribed to the XEmacs mailing list most likely are not interested in hearing about problems with it. xemacs-21.4.22/etc/MORE.STUFF0000644000175000017500000000314106256071512013371 0ustar acsacsMore Neat Stuff for your Emacs -*-Outline-*- This file describes GNU Emacs programs and resources that are maintained by other people. Some of these may become part of the Emacs distribution in the future. * The LCD archive There is a large collection of Emacs Lisp code available for FTP at archive.cis.ohio-state.edu; it is actively maintained by Dave Brennan and Dave Sill . To get started using this archive, do: ftp archive.cis.ohio-state.edu Once you're in FTP, do cd pub/gnu/emacs/elisp-archive bin get lispdir.el.Z get LCD-datafile.Z and exit. Then do: compress -d *.Z The lispdir.el package will help you search for useful packages in the LCD-datafile, which is a list of the archive constants. It will even fetch them for you on command. * Eric Ludlam's etalk system Eric Ludlam has written a C program and Emacs Lisp code to do Internet talk through an Emacs window. The package also includes Emacs Lisp code which assists you in using talk to play a number of different interactive games. This system seems to be quite nicely put together and is well documented with a texinfo file that you can integrate into Emacs's own on-line help. It's too large and specialized to include in the Emacs distribution, though. Sources of this system are available for FTP at nic.umass.edu 128.119.166.14 Look under pub/contrib. As of March 23 1993, there are two relevant files: pub/contrib/etalk0.6B.tar.Z --- sources of the talk system pub/contrib/egames0.6B.tar.Z --- more game-support files We don't know whether this can use the additional features in GNU talk. xemacs-21.4.22/etc/MOTIVATION0000644000175000017500000002113107265370776013450 0ustar acsacsSTUDIES FIND REWARD OFTEN NO MOTIVATOR Creativity and intrinsic interest diminish if task is done for gain By Alfie Kohn Special to the Boston Globe [reprinted with permission of the author from the Monday 19 January 1987 Boston Globe] In the laboratory, rats get Rice Krispies. In the classroom the top students get A's, and in the factory or office the best workers get raises. It's an article of faith for most of us that rewards promote better performance. But a growing body of research suggests that this law is not nearly as ironclad as was once thought. Psychologists have been finding that rewards can lower performance levels, especially when the performance involves creativity. A related series of studies shows that intrinsic interest in a task - the sense that something is worth doing for its own sake - typically declines when someone is rewarded for doing it. If a reward - money, awards, praise, or winning a contest - comes to be seen as the reason one is engaging in an activity, that activity will be viewed as less enjoyable in its own right. With the exception of some behaviorists who doubt the very existence of intrinsic motivation, these conclusions are now widely accepted among psychologists. Taken together, they suggest we may unwittingly be squelching interest and discouraging innovation among workers, students and artists. The recognition that rewards can have counter-productive effects is based on a variety of studies, which have come up with such findings as these: Young children who are rewarded for drawing are less likely to draw on their own that are children who draw just for the fun of it. Teenagers offered rewards for playing word games enjoy the games less and do not do as well as those who play with no rewards. Employees who are praised for meeting a manager's expectations suffer a drop in motivation. Much of the research on creativity and motivation has been performed by Theresa Amabile, associate professor of psychology at Brandeis University. In a paper published early last year on her most recent study, she reported on experiments involving elementary school and college students. Both groups were asked to make "silly" collages. The young children were also asked to invent stories. The least-creative projects, as rated by several teachers, were done by those students who had contracted for rewards. "It may be that commissioned work will, in general, be less creative than work that is done out of pure interest," Amabile said. In 1985, Amabile asked 72 creative writers at Brandeis and at Boston University to write poetry. Some students then were given a list of extrinsic (external) reasons for writing, such as impressing teachers, making money and getting into graduate school, and were asked to think about their own writing with respect to these reasons. Others were given a list of intrinsic reasons: the enjoyment of playing with words, satisfaction from self-expression, and so forth. A third group was not given any list. All were then asked to do more writing. The results were clear. Students given the extrinsic reasons not only wrote less creatively than the others, as judged by 12 independent poets, but the quality of their work dropped significantly. Rewards, Amabile says, have this destructive effect primarily with creative tasks, including higher-level problem-solving. "The more complex the activity, the more it's hurt by extrinsic reward," she said. But other research shows that artists are by no means the only ones affected. In one study, girls in the fifth and sixth grades tutored younger children much less effectively if they were promised free movie tickets for teaching well. The study, by James Gabarino, now president of Chicago's Erikson Institute for Advanced Studies in Child Development, showed that tutors working for the reward took longer to communicate ideas, got frustrated more easily, and did a poorer job in the end than those who were not rewarded. Such findings call into question the widespread belief that money is an effective and even necessary way to motivate people. They also challenge the behaviorist assumption that any activity is more likely to occur if it is rewarded. Amabile says her research "definitely refutes the notion that creativity can be operantly conditioned." But Kenneth McGraw, associate professor of psychology at the University of Mississippi, cautions that this does not mean behaviorism itself has been invalidated. "The basic principles of reinforcement and rewards certainly work, but in a restricted context" - restricted, that is, to tasks that are not especially interesting. Researchers offer several explanations for their surprising findings about rewards and performance. First, rewards encourage people to focus narrowly on a task, to do it as quickly as possible and to take few risks. "If they feel that 'this is something I have to get through to get the prize,' they're going to be less creative," Amabile said. Second, people come to see themselves as being controlled by the reward. They feel less autonomous, and this may interfere with performance. "To the extent one's experience of being self-determined is limited," said Richard Ryan, associate psychology professor at the University of Rochester, "one's creativity will be reduced as well." Finally, extrinsic rewards can erode intrinsic interest. People who see themselves as working for money, approval or competitive success find their tasks less pleasurable, and therefore do not do them as well. The last explanation reflects 15 years of work by Ryan's mentor at the University of Rochester, Edward Deci. In 1971, Deci showed that "money may work to buy off one's intrinsic motivation for an activity" on a long-term basis. Ten years later, Deci and his colleagues demonstrated that trying to best others has the same effect. Students who competed to solve a puzzle quickly were less likely than those who were not competing to keep working at it once the experiment was over. Control plays role There is general agreement, however, that not all rewards have the same effect. Offering a flat fee for participating in an experiment - similar to an hourly wage in the workplace - usually does not reduce intrinsic motivation. It is only when the rewards are based on performing a given task or doing a good job at it - analogous to piece-rate payment and bonuses, respectively - that the problem develops. The key, then, lies in how a reward is experienced. If we come to view ourselves as working to get something, we will no longer find that activity worth doing in its own right. There is an old joke that nicely illustrates the principle. An elderly man, harassed by the taunts of neighborhood children, finally devises a scheme. He offered to pay each child a dollar if they would all return Tuesday and yell their insults again. They did so eagerly and received the money, but he told them he could only pay 25 cents on Wednesday. When they returned, insulted him again and collected their quarters, he informed them that Thursday's rate would be just a penny. "Forget it," they said - and never taunted him again. Means to and end In a 1982 study, Stanford psychologist Mark L. Lepper showed that any task, no matter how enjoyable it once seemed, would be devalued if it were presented as a means rather than an end. He told a group of preschoolers they could not engage in one activity they liked until they first took part in another. Although they had enjoyed both activities equally, the children came to dislike the task that was a prerequisite for the other. It should not be surprising that when verbal feedback is experienced as controlling, the effect on motivation can be similar to that of payment. In a study of corporate employees, Ryan found that those who were told, "Good, you're doing as you /should/" were "significantly less intrinsically motivated than those who received feedback informationally." There's a difference, Ryan says, between saying, "I'm giving you this reward because I recognize the value of your work" and "You're getting this reward because you've lived up to my standards." A different but related set of problems exists in the case of creativity. Artists must make a living, of course, but Amabile emphasizes that "the negative impact on creativity of working for rewards can be minimized" by playing down the significance of these rewards and trying not to use them in a controlling way. Creative work, the research suggests, cannot be forced, but only allowed to happen. /Alfie Kohn, a Cambridge, MA writer, is the author of "No Contest: The Case Against Competition," recently published by Houghton Mifflin Co., Boston, MA. ISBN 0-395-39387-6. / xemacs-21.4.22/etc/NEWS0000644000175000017500000016475510353115712012532 0ustar acsacs-*- mode:outline -*- * Introduction ============== This file presents the changes in recent XEmacs versions. It primarily documents user-visible (interface) changes, but also includes internal changes of possible interest to the users. When describing new features, we try to also document ways of reverting to the old behavior, where applicable. If you dislike a recent change in how XEmacs behaves, this file might contain a remedy. Use `C-c C-f' to move to the next equal level of outline, and `C-c C-b' to move to previous equal level. `C-h m' will give more info about the Outline mode. Many commands are also available through the menubar. Users who would like to know which capabilities have been introduced in each release should look at the appropriate section of this file. Starting with version 20.0, XEmacs includes ChangeLogs, which can be consulted for a more detailed list of changes. N.B. The term "GNU Emacs" refers to any release of Emacs Version 19 from the Free Software Foundation's GNU Project. (We do not say just "Emacs" as Richard M. Stallman ["RMS"] prefers, because it is clearly a more generic term.) The term "XEmacs" refers to this program or sometimes to its predecessors "Era" and "Lucid Emacs". The predecessor of all these program is called "Emacs 18". When no particular version is implied, "Emacs" will be used. * Changes in XEmacs 21.4 ======================== ** Summary of user-visible changes: -- Motif is now deprecated on linux and cygwin. -- On UNIX and linux, '--with-widgets=no' is now the default. If you want buffer tabs or the progress bar, you must run configure with the option '--with-widgets=lucid' or a different toolkit. -- PUI related changes (Package User Interface) - A minor rearrangement of the "Tools -> Packages" menu. - Only a single package download site can be selected. - Managing packages via the `customize' interface is no longer supported. - Non-Mule XEmacsen can not install Mule packages. - The "mule-base" package is not needed to "bootstrap" PUI for Mule enabled XEmacsen. - The default for PGP verifying the package-index file is "off" in 21.4. - The default package-index filename has changed to `package-index.LATEST.gpg'. - The location of the local index file is customisable. See `package-get-package-index-file-location'. - `pui-add-install-directory' has been obsoleted and replaced by `pui-set-local-package-get-directory'. -- The delete key now deletes forward by default. -- Shifted motion keys now select text by default. -- You can now build XEmacs with support for GTK+ widget set. -- ~/.xemacs/init.el is now the preferred location for the init file. - XEmacs now supports a `~/.xemacs/init.el' startup file. - Custom file will move to ~/.xemacs/custom.el. -- Much-improved sample init.el, showing how to use many useful features. -- XEmacs support for menu accelerators has been much improved. -- Default menubar improvements. - Default menubar has many new commands and better organization. - The font-menu is now available under MS Windows. -- Dialog box improvements, including a real file dialog box. - XEmacs now has a proper file dialog box under MS Windows (and GTK)! - The old clunky file dialog box is improved. - Keyboard traversal now works correctly in MS Windows dialog boxes. - There is a Search dialog box available from Edit->Find... -- New buffer tabs. -- There is a new MS Windows installer, netinstall, ported from Cygwin. -- The subprocess quote-handling mechanism under Windows is much improved. -- Printing support now available under MS Windows. -- Selection improvements. - Kill and yank now interact with the clipboard under Windows. - MS Windows support for selection is now much more robust. - Motif selection support is now more correct (but slower). -- Mail spool locking now works correctly. -- International support changes. - The default coding-priority-list is now safer. - International keysyms are now supported under X. - MS Windows 1251 code page now supported. - Czech, Thai, Cyrillic-KOI8, Vietnamese, Ethiopic now supported. - Proper support for words in Latin 3 and Latin 4. -- Help buffers contain hyperlinks, and other changes. -- The modeline's text is now scrollable. -- The mouse wheel under MS Windows now functions correctly. -- Interactive searching and matching case improvements. - Incremental search will now highlight all visible matches. - Interactive searches always respect uppercase characters. -- Rectangle functions rewritten to avoid inserting extra spaces. -- New command `kill-entire-line' that always kills the entire line. -- Default values correctly stored in minibuffer histories. -- You can now create "indirect buffers", like in GNU Emacs. -- Pixel-based scrolling has been implemented. -- Operation progress can be displayed using graphical widgets. -- User names following a tilde can now be completed at file name prompts. -- XEmacs can now play sound using Enlightenment Sound Daemon (ESD). -- X-Face support is now available under MS Windows. -- The PostgreSQL Relational Database Management System is now supported. -- Indentation no longer indents comments that begin at column zero. -- Face and variable settings can have comments in Customize. -- New locations for early package hierarchies. -- The `auto-save' library has been greatly improved. -- New variable `mswindows-alt-by-itself-activates-menu'. -- 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. -- Etags changes. - In DOS, etags looks for file.cgz if it cannot find file.c. - New option --ignore-case-regex is an alternative to --regex. - New option --declarations, for C-type languages. - In C++, tags are created for "operator". - Ada now supported. - In Fortran, procedure is no longer tagged. - In Java, tags are created for "interface". - In Lisp, def-type constructs are now tagged. - In Perl, the --globals option tags global variables. - Python now supported. - New file extensions recognized: .ss, .pdb, .psw. -- Fixed ldap libraries configuration. -- Fixed `LDAP_OPT_ON' libraries configuration. ** The delete key now deletes forward by default. This is regulated by the variable `delete-key-deletes-forward', which now defaults to t. `delete-key-deletes-forward' takes effect only on the systems that offer both a backspace and a delete key. If set to nil, the key labeled "Delete" will always delete backward. If set to non-nil, the "Delete" key will delete forward, except on keyboards where a "Backspace" key is not provided (e.g. old DEC keyboards). Unless our implementation has bugs, the only reason why you would want to set `delete-key-deletes-forward' to nil is if you want to use the Delete key to delete backwards, despite the presence (according to Xlib) of a BackSpace key on the keyboard. ** Shifted motion keys now select text by default. You can turn this off by setting `shifted-motion-keys-select-region' to nil. This works based off of particular keys, not particular commands: Thus, the arrow keys will normally trigger selection when the Shift key is held down regardless of their bindings, and non-arrow keys with the same bindings (e.g. C-f) will not work this way. You can control which keys trigger shifted motion using `motion-keys-for-shifted-motion'. See also `unshifted-motion-keys-deselect-region'. ** You can now build XEmacs with support for GTK+ widget set. XEmacs built that way uses GTK+ to draw menubars, scrollbars, and other GUI components, as well GDK for drawing text, choosing fonts, allocating colors, etc. Additionally, GTK-XEmacs supports Lisp functions for writing your own GTK programs in Emacs Lisp! To use this, build XEmacs with the `--with-gtk' configure flag. (Of course, you'll need to have the GTK+ libraries and header files on the system.) Gnome widgets and functionality are supported where available, and can be turned off. ** ~/.xemacs/init.el is now the preferred location for the init file. *** XEmacs now supports a `~/.xemacs/init.el' startup file. If it exists, XEmacs will prefer it over `.emacs' and `.emacs.el'. The file may be byte-compiled as `~/.xemacs/init.elc'. If present, the `~/.xemacs/' directory may contain startup files for XEmacs packages that support it. The first time you start up XEmacs, it will ask you if you would like to migrate your `.emacs' to the new location. (Your custom settings will also be moved, to `~/.xemacs/custom.el' -- see below.) If so, you will also be asked whether you would like to create a compatibility `.emacs' for backward compatibility with previous versions of XEmacs and with GNU Emacs. (This compatibility `.emacs' simply loads the new init and custom files.) Doing this is generally a good idea -- new versions of XEmacs will prefer `~/.xemacs/init.el' over `~/.emacs' in any case. You can manually migrate at any time with `migrate-user-init-file', and undo any migration with `unmigrate-user-init-file'. The function `create-compatibility-dot-emacs' also lets you manually create a compatibility `.emacs'. NOTE: Under MS Windows, your home directory (i.e. the directory named `~') is specified by the HOME environment variable, and defaults to C:\. To set this variable, modify AUTOEXEC.BAT under Windows 95/98, or select Control Panel->System->Advanced->Environment Variables... under Windows NT/2000. *** Custom file will move to ~/.xemacs/custom.el. Whereas customize settings were formerly stored in the regular init file, XEmacs now prefers them to be in a separate file `~/.xemacs/custom.el', completely under automatic control. This change goes with the migration of the init file, and XEmacs offers automatic migration upon startup. ** Much-improved sample init.el, showing how to use many useful features. The sample init file, located in the `etc/' directory of the XEmacs installation, has been renamed from `sample.emacs' to `sample.init.el', and pretty much rewritten from scratch. (You can view it by selecting the menu item Help->Samples->Sample init.el.) Many of the most-useful optional features in XEmacs have been enabled, and other features that are useful but may be annoying to some are present but commented out. There is also extensive documentation on how to add your own improvements to the init file and where to find more documentation elsewhere in XEmacs. The file has been specifically designed so that most people can simply make it their own init file by copying it to ~/.xemacs/init.el, and they will be satisfied with the results. ** XEmacs support for menu accelerators has been much improved. It now works properly under MS Windows, for example. To enable accelerators, set `menu-accelerator-enabled' to `menu-force'. Menus now have accelerators by default, currently on the first letter of the menu item unless another letter was indicated as the accelerator using %_ in the menu string. These %_ specifications are automatically removed when displaying the menu item, and are handled correctly in functions such as `normalize-menu-item-name'. Some auto-generated menus will have accelerators added dynamically, using numbers 1-9 and letters; to add this feature yourself, use the Lisp command `submenu-generate-accelerator-spec' in a menu filter. The feature `menu-accelerator-support' has been added so that packages can check whether this support exists. ** Default menubar improvements. *** Default menubar has many new commands and better organization. The default menubar has been extensively reorganized. Many more commands are available, and they are more logically organized. The Options menu, in particular, has been significantly expanded, and almost everything on the new Cmds menu is new. (Much of the useful functionality from the `big-menubar' package has been imported.) *** The font-menu is now available under MS Windows. ** Dialog box improvements, including a real file dialog box. *** XEmacs now has a proper file dialog box under MS Windows (and GTK)! This will appear whenever you select a menu item that requires a file as an argument. *** The old clunky file dialog box is improved. The in-buffer file dialog box (visible on non-MS-Windows, non-GTK systems) is still clunky but has had many improvements to make it work significantly better. *** Keyboard traversal now works correctly in MS Windows dialog boxes. *** There is a Search dialog box available from Edit->Find... However, it's very experimental and needs a lot of work. ** New buffer tabs. You can now use buffer tabs to switch between buffers. The tabs are located between the toolbar and the uppermost window, in a location called the "gutter". If you dislike the buffer tabs, you can disable them using the menu item `Options->Display->Buffers Tab Visible' by customizing `gutter-buffers-tab-visible-p', or by placing this in your .xemacs/init.el: (custom-set-variables '(gutter-buffers-tab-visible-p nil)) You can change the location of the gutter using the menu item `Options->Display->Default Gutter Location' or with (e.g.) (custom-set-variables '(default-gutter-position 'left)) However, currently only MS Windows supports tab widgets with orientations other than vertical, and it doesn't currently support gutters on the bottom of the frame. ** There is a new MS Windows installer, netinstall, ported from Cygwin. Nearly complete automation of the XEmacs install process from ftp.xemacs.org. Includes selection of Lisp packages to install, etc. ** The subprocess quote-handling mechanism under Windows is much improved. Specifically, the quote-handling mechanism has been completely rewritten, and you should now be able to use single or double quotes to quote arguments just like under Unix, and expect to get correct results regardless of the shell you are using (e.g. CMD.EXE, bash from Cygwin, etc.). For example, the following command: M-x grep '<<<<<<<' *.c should work as intended. ** Printing support now available under MS Windows. The File->Print... menu item pretty-prints using the standard MS Windows printing facilities. Unfortunately it's still rather experimental. There is a separate `msprinter' device tag for MS Windows printers, and so you can control the way that faces appear on the printer by using this tag to specify device-specific face settings. ** Selection improvements. *** Kill and yank now interact with the clipboard under Windows. This was done by changing the default value of `interprogram-cut-function' and `interprogram-paste-function'. You can get the old behavior by setting these to nil, and there is an option on the options menu to do this. *** MS Windows support for selection is now much more robust. Generally selection should now do what you would expect under MS Windows: the middle mouse button will paste your current selection or the clipboard; conversions from different types of selection to the clipboard can be made; the kill-ring and friends will be updated as per X. The only thing selection doesn't do is set the clipboard automatically as this would break the MS Windows model. If you want this behavior then set `selection-sets-clipboard' to t. *** Motif selection support is now more correct (but slower). Changes have been made to allow correct operation of cut/copy/paste operations between native widgets and XEmacs buffers. However, this can lead to a lot of X traffic which slows down the performance of `C-k'. If you want the old behaviour then set `x-selection-strict-motif-ownership' to nil. ** Mail spool locking now works correctly. XEmacs has always come with a little auxiliary program, movemail, which moves mail out of the system's spool area into user storage. To coordinate between XEmacs, the mail delivery agent, and other mail user agents, movemail needs to properly lock the spool file before moving it. Movemail now correctly respects the --mail-locking option to configure. Moreover, movemail's locking behavior can be specified at run-time, via a new command-line option -m to movemail, or through the environment variable EMACSLOCKMETHOD. When installing XEmacs, make sure you configure it according to your environment's mail spool locking conventions. When you're using a binary kit, set the `mail-lock-method' variable at startup, or the EMACSLOCKMETHOD environment variable. ** International support changes. *** The default coding-priority-list is now safer. This means that if you have no language environment set, Mule no longer automatically recognizes ISO 2022 escapes in your files. This makes editing binary files safe. *** International keysyms are now supported under X. This means that XEmacs running under Mule will automatically recognize the keysym `scaron' to be the lower-case `s' with caron in the Latin 2 character set. (Specifically, it will bind the keysym to `self-insert' and augment its `ascii-character' property.) This is very useful with XFree under European locales as shipped by recent Linux distributions. If XEmacs is compiled without Mule support, the feature still works, but it is unaware of different character sets -- it unconditionally sets the `ascii-character' property to values in the [160, 256) range. *** MS Windows 1251 code page now supported. It's available as coding system `windows-1251'. *** Czech, Thai, Cyrillic-KOI8, Vietnamese, Ethiopic now supported. *** Proper support for words in Latin 3 and Latin 4. The appropriate characters in Latin 3 and Latin 4 character sets are correctly defined as words. ** Help buffers contain hyperlinks, and other changes. The help buffers created by C-h commands now contain hyperlinks to other commands, functions and variables mentioned in the documentation. Use button2 to follow a link. Use button3 to bring up a context menu that lets you follow the link, find the source for the item, do a tag search, etc. The buffers are also syntax-highlighted. Help functions (e.g. `C-h f') now know how to print macro argument lists. If your macro definition included an argument list for the sake of help output, you no longer need to do that. ** The modeline's text is now scrollable. This is controlled by the variable `modeline-scrolling-method', which you need to set to a non-nil value. You can also choose scrolling types; see the docstring of `modeline-scrolling-method' for more information. ** The mouse wheel under MS Windows now functions correctly. It scrolls the XEmacs window under the pointer, not the selected window. ** Interactive searching and matching case improvements. *** Incremental search will now highlight all visible matches. This makes it easier to anticipate where consecutive C-s or C-r will place the point. If you want to disable the feature, set `isearch-highlight-all-matches' to nil. *** Interactive searches always respect uppercase characters. Case sensitiveness in searching operations is normally controlled by the variable `case-fold-search' (if non-nil, case is ignored while searching). This mechanism has now been slightly improved for interactive searches: if the search string (or regexp) contains uppercase characters, the searching is forced to be case-sensitive, `case-fold-search'. The new behavior affects all functions performing interactive searches, like `zap-to-char', `list-matching-lines', `tags-search' etc. The incremental search facility has always behaved that way. ** Rectangle functions rewritten to avoid inserting extra spaces. The rectangle functions have been almost completely rewritten in order to avoid inserting undesirable spaces, notably at the end of lines. Two typical examples of the old behavior were `string-rectangle', which filled all lines up to the right side of the rectangle, and `clear-rectangle', which filled even empty lines up to the left side. All functions have been rewritten to avoid inserting unwanted spaces, and an optional prefix now allows them to behave the old way. Also, the behavior of `string-rectangle' is now compliant with `pending-delete-mode': if this mode is active, then the string replaces the region rectangle. Otherwise, the command does not delete or overwrite any existing text. For those who want that feature but do not use pending-delete-mode, a new function, `replace-rectangle', is available. As a side effect, the FORCE argument to `move-to-column' now understands the special value `coerce', which means that the line should not be filled if it is too short to reach the desired column. ** New command `kill-entire-line' that always kills the entire line. This kills the entire line at point, regardless of whether the point is at the beginning of line, and regardless of the setting of `kill-whole-line'. ** Default values correctly stored in minibuffer histories. When you press RET at a minibuffer prompt that provides a default value, the value is stored in history instead of an empty line. Also, you can now edit the default value by pressing the down arrow, accessing the logical "future" value. Not all minibuffer prompts have yet been converted to support this feature. ** You can now create "indirect buffers", like in GNU Emacs. An indirect buffer shares its text with another buffer ("base buffer"), but has its own major mode, local variables, extents, and narrowing. An indirect buffer has a name of its own, distinct from those of the base buffer and all other buffers. An indirect buffer cannot itself be visiting a file (though its base buffer can be). The base buffer cannot itself be indirect. Use (make-indirect-buffer BASE-BUFFER NAME) to make an indirect buffer named NAME whose base is BASE-BUFFER. If BASE-BUFFER is itself an indirect buffer, its base buffer is used as the base for the new buffer. You can make an indirect buffer current, or switch to it in a window, just as you would a non-indirect buffer. The function `buffer-base-buffer' returns a buffer's base buffer or nil, if given an ordinary (non-indirect) buffer. The function `buffer-indirect-children' returns a list of the indirect children of a base buffer. ** Pixel-based scrolling has been implemented. By default this will attempt to scroll in increments equal to the height of the default face. Set `window-pixel-scroll-increment' to modify this behavior. ** Operation progress can be displayed using graphical widgets. See `progress-feedback' for details. This support has been switched on by default for font-lock and some web browsing functions. If you do not like this behavior, set `progress-feedback-use-echo-area' to nil. ** User names following a tilde can now be completed at file name prompts. e.g. `C-x C-f ~hni' will complete to `~hniksic/'. To make this operation faster, a cache of user names is maintained internally. The new primitives available for this purpose are functions named `user-name-completion' and `user-name-all-completions'. ** XEmacs can now play sound using Enlightenment Sound Daemon (ESD). It will try NAS first, then ESD, then playing native sound directly. ** X-Face support is now available under MS Windows. If an X-Face library built under MS Windows is available then XEmacs will use this at build time. ** The PostgreSQL Relational Database Management System is now supported. It is now possible to build XEmacs so that the programming interface to the PostgreSQL RDBMS (libpq) is available in XEmacs Lisp. Supported versions of PostgreSQL are 6.5.3 (earlier versions may work, but have not been tested) and 7.0-beta1. ** Indentation no longer indents comments that begin at column zero. This makes it easy to deal with commented out regions of code. ** Face and variable settings can have comments in Customize. Customize now supports adding comments about your face and variable settings using a new menu entry. Comments for variables can also be assigned by calling `customize-set-(value|variable)' with a prefix argument. ** New locations for early package hierarchies. XEmacs now locates the early package hierarchies at ~/.xemacs/mule-packages/ and ~/.xemacs/xemacs-packages/. Previously, the early packages were located in ~/.xemacs/. ** The `auto-save' library has been greatly improved. (This lets you group all your auto-save files into one directory, and is provided standardly with XEmacs. See `etc/sample.init.el', available on the Help menu, for more info on how to set it up.) Specifically, it now works under MS Windows, and it uses a completely reversible encoding (basically quoted-printable), so that all filenames (as well as non-filename buffers) are successfully handled regardless of any special characters in their names. ** New variable `mswindows-alt-by-itself-activates-menu'. If you set this variable to nil then pressing and releasing the Alt key under MS Windows will no longer activate the menubar. The default is t. This is not to be confused with `menu-accelerator-enabled', which enables the use of Alt+ accelerators to invoke the menus. ** Other init-file-related changes. *** Init file in your home directory may be called `.emacs.el'. Like in GNU Emacs 20.4 and on, you can now name the XEmacs init file located in your home directory `.emacs.el'. Formerly the name had to be `.emacs'. If you use the name `.emacs.el', you can byte-compile the file in the usual way. If both `.emacs' and `.emacs.el' exist, the latter file is the one that is used. *** New command-line switches -user-init-file and -user-init-directory. These can be used to specify alternate locations for what is normally ~/.emacs and ~/.xemacs. Moreover, the `-user ' command-line option (which used to only work in unpredictable ways) is now equivalent to `-user-init-file ~/.xemacs/init.el -user-init-directory ~/.xemacs', or `-user-init-file ~/.emacs -user-init-directory ~/.xemacs', whichever init file comes first. ** Etags changes. *** In DOS, etags looks for file.cgz if it cannot find file.c. *** New option --ignore-case-regex is an alternative to --regex. It is now possible to bind a regexp to a language, by prepending the regexp with {lang}, where lang is one of the languages that `etags --help' prints out. This feature is useful especially for regex files, where each line contains a regular expression. The manual contains details. *** New option --declarations, for C-type languages. In C and derived languages, etags creates tags for function declarations when given the --declarations option. *** In C++, tags are created for "operator". The tags have the form "operator+", without spaces between the keyword and the operator. *** Ada now supported. Tags are functions, procedures, packages, tasks, and types. *** In Fortran, procedure is no longer tagged. *** In Java, tags are created for "interface". *** In Lisp, def-type constructs are now tagged. This includes "(defstruct (foo", "(defun (operator" and similar constructs. *** In Perl, the --globals option tags global variables. my and local variables are tagged. *** Python now supported. def and class at the beginning of a line are tags. *** New file extensions recognized: .ss, .pdb, .psw. .ss files are Scheme files, .pdb is Postscript with C syntax, .psw is for PSWrap. ** Fixed ldap libraries configuration. It used to fail when `-lldap' requires `-llber'. Introduced in upstream `configure.in' revision 1.151.2.31 (2005/01/31 02:54:47 +0). *** Fixed `LDAP_OPT_ON' libraries configuration. The original fix of local `configure.in' revision 1.19 (2004/12/19 21:10:02 +0) introduced lossage on another class of systems. In some openldap versions `ldap_*' functions may link successfully without `-lber', but compiling and linking program with `LDAP_OPT_ON' may require `-lber'. When configuring ldap libraries, check for such systems, and in a cleaner way than in upstream. * Lisp and internal changes in XEmacs 21.4 ========================================== ** A new portable dumper is available. Olivier Galibert has written a portable dumper for XEmacs, based on initial work by Kyle Jones. To perform even the most basic editor functions, XEmacs requires some amount of Lisp code to be loaded. To avoid repeating the expensive loading process at every startup, XEmacs is built in a special way. Its C sources link into an executable called `temacs', which loads the bootstrap Lisp code and uses a special "unexec" call to dump the resulting memory image into a proper `xemacs' executable on disk. The unexec() process is hard to implement correctly and makes XEmacs very hard to port to new operating systems, or even to new releases of old systems. The new portable dumper uses a different approach to dumping: instead of dumping full-fledged executable, it only dumps out the initialized data structures (both Lisp and C) into an external file. A normally running XEmacs only needs to mmap that file and relocate a bit to get to the initialized data. In that scheme, there is no difference between `temacs' and `xemacs'. The portable dumper will not be used by default in this release, however, if you wish to experiment with it, or if you need to compile XEmacs on a new and unsupported platform, you can test it by configuring XEmacs using the `--pdump' flag. ** Much effort has been invested to make XEmacs Lisp faster: *** Many basic lisp operations are now faster. This is especially the case when running a Mule-enabled XEmacs. A general overhaul of the lisp engine should produce a speedup of 1.4 in a non-Mule XEmacs, and 2.1 in a Mule XEmacs. These numbers were obtained running `(byte-compile "simple.el")', which should be a pretty typical test of "pure" Lisp. *** Lisp hash tables have been re-implemented. The Common Lisp style hash table interface has been made standard, and moved from cl.el into fast C code (See the section on hash tables in the XEmacs Lisp Reference). A speedup factor of 3 can be expected with code that makes intensive use of hash tables. *** The garbage collector has been tuned, leading to a speedup of 1.16. *** The byte-compiler and the byte-optimizer have been tuned to produce better code in many small ways. *** The family of functions that iterate over lists, like `memq', and `rassq', have been made a little faster (typically 1.3). *** Lisp function calls are faster, by approximately a factor of two. However, defining inline functions (via defsubst) still makes sense for tight loops. *** Finally, a few functions have had dramatic performance improvements. For example, `(last long-list)' is now 30 times faster. Of course, your mileage will vary. Many operations do not see any improvement. Surprisingly, running (font-lock-fontify-buffer) does not use the Lisp engine much at all. Speeding up your favorite slow operation is an excellent project to improve XEmacs. Don't forget to profile! ** Native widgets can be displayed in buffers. The glyph system has been extended to allow the display of glyphs that are implemented as native window-system widgets. Thus you can embed buttons, scrollbars, combo boxes, edit fields and progress gauges in a buffer. As a side effect subwindow support now works once again. All of this is still fairly experimental and there is no documentation. The current APIs might change in a future version of XEmacs. Some widgets are only available under MS Windows. See the file glyphs-test.el in the XEmacs src distribution for examples of usage. The buffers-tab functionality and progress gauge have been implemented using this feature. ** Case translation now supports international characters. *** Instead of being lists of 256-character strings, case tables are now opaque objects. The interface to access them is almost the same, except it now works for international characters, and you can set the case pairs using `put-case-table-pair'. `set-case-table' and friends still support the old list/string based interface for backward compatibility. *** As a consequence of this change, functions `downcase' and `upcase' as well as all the case-transformation commands now work with non-ASCII characters. Built-in tables cover all the Latin character sets that we support. If your language has a distinction between upper and lower case that is not handled by XEmacs/Mule, please let us know. *** The code that implements case-insensitive search has been modified to respect the case table settings. This also applies to regexp search. ** Syntax tables may now be specified for a part of a buffer by attaching the `syntax-table' property to an extent. For compatibility with GNU Emacs, you may use the text-property interface to achieve the same result. ** Values of variables `user-init-file' and `user-init-directory' are now absolute file/directory names. Previously, both variables used to be relative to `(concat "~" init-file-user)'. This turned out to be too complicated for most packages (and some core Lisp files) to use correctly. Also, the `init-file-user' variable has been obsoleted in the process. The user-visible options like `-u' have not changed their behavior. ** XEmacs finally has an automated test suite! Although this is not yet very sophisticated, it is already responsible for several important bug fixes in XEmacs. To try it out, simply use the makefile target `make check' after building XEmacs. ** Hash tables have been reimplemented. As was pointed out above, the standard interface to hash tables is now the Common Lisp interface, as described in Common Lisp, the Language (CLtL2, by Steele). The older interface (functions with names containing the phrase `hashtable') will continue to work, but the preferred interface now has names containing the phrase `hash-table'. Here's the executive overview: create hash tables using make-hash-table, and use gethash, puthash, remhash, maphash and clrhash to manipulate entries in the hash table. See the (updated) Lisp Reference Manual for details. ** Lisp code handles circular lists much more robustly. Many basic lisp functions used to loop forever when given a circular list, expecting you to C-g (quit) out of the loop. Now this is more likely to trigger a `circular-list' error. Printing a circular list now results in something like this: (let ((x (cons 'foo 'foo))) (setcdr x x) x) => (foo ... ) An extra bonus is that checking for circularities is not just friendlier, but actually faster than checking for C-g. ** Functions for decoding base64 encoding are now available; see `base64-encode-region', `base64-encode-string', `base64-decode-region' and `base64-decode-string'. ** The functions `read-string', `read-expression', `eval-minibuffer', `read-variable', `read-command', `read-function', `read-number', `read-shell-command', `read-from-minibuffer', and `completing-read' now take an additional argument which specifies the default value. If this argument is non-nil, it should be a string; that string is used in two ways: * It is returned if the user enters empty input. * It is available as the logical "future" entry, by pressing the down arrow. ** LDAP changes. *** The LDAP interface now consists of two layers, a low-level layer that closely matches the LDAP C API, and a more convenient higher-level set of functions. *** The low-level functions that used to be named *-internal are now named more simply: `ldap-open', `ldap-close', `ldap-search-basic', `ldap-add', and `ldap-modify'. They should be used directly for very specific purposes (such as multiple operations on a connection) only. *** The higher-level functions provide a more convenient way to access LDAP directories hiding the subtleties of handling the connection, translating arguments and ensuring compliance with LDAP internationalization rules and formats (currently partly implemented only.) This layer provides atomic operations for searches, modification, addition and deletion of multiple entries at once: `ldap-search-entries', `ldap-add-entries', `ldap-delete-entries', and `ldap-modify-entries'. *** To maintain compatibility with previous code, the now obsolete function `ldap-search' is now merely a wrapper that calls either `ldap-search-basic' or `ldap-search-entries'. Please don't use the `ldap-search' function in your new programs -- a direct call to one of the two replacements is more efficient and unambiguous. ** The arguments to `locate-file' are now more Lisp-like. As before, the usage is: (locate-file FILENAME PATH-LIST &optional SUFFIXES MODE) Except that SUFFIXES are now a list of strings instead of a single, colon-separated string. MODE is now a symbol or a list of symbols (symbols `exists', `executable', `writable', and `readable' are supported) instead of an integer code. See the documentation for details. Of course, the old form is still accepted for backward compatibility. Several bugs in locate-file have been fixed, most notably its failure to call expand-file-name on elements of PATH-LIST. Because of that elements of load-path of the form "~/..." used to not work. locate-file is now guaranteed to expand files during its course of operation. ** `translate-region' has been improved in several ways. Its TABLE argument used to be a 256-character string. In addition to this, it can now also be a vector or a char-table, which makes the function useful for Mule, which it wasn't. If TABLE is a vector or a generic char-table, you can map characters to strings instead of to other characters. For instance: (let ((table (make-char-table 'generic))) (put-char-table ?a "the letter a" table) (put-char-table ?b "" table) (put-char-table ?c ?\n table) (translate-region (point-min) (point-max) table)) ** The new form `ignore-file-errors', similar to `ignore-errors' may be used as a short-hand for condition-case when you wish to ignore file-related error. For example: (ignore-file-errors (delete-file "foo")) ** The first argument to `intern-soft' may now also be a symbol, like with `unintern'. If given a symbol, `intern-soft' will look for that exact symbol rather than for any string. This is useful when you want to check whether a specific symbol is interned in an obarray, e.g.: (intern "foo") (intern-soft "foo") => foo (intern-soft (make-symbol "foo")) => nil ** The `keywordp' function now returns non-nil only on symbols interned in the global obarray. For example: (keywordp (intern ":foo" [0])) => nil (keywordp (intern ":foo")) ; The same as (keywordp :foo) => t This behavior is compatible with other code which treats symbols beginning with colon as keywords only if they are interned in the global obarray. `keywordp' used to wrongly return t in both above cases. ** The function `replace-in-string' has been rewritten to use `replace-match'. This not only makes it much faster, but adds all the features of `replace-match'. ** New variables `this-command-properties' and `last-command-properties' are now available for communication between consecutive commands. Commands should use these to communicate with the pre/post-command hooks, subsequent commands, wrapping commands, etc. in preference to looking at and/or setting `this-command'. ** New functions `add-one-shot-hook' and `add-local-one-shot-hook' make it possible to add a "one-shot" hook, which is to say a hook that runs only once, and automatically removes itself after the first time it has run. ** The descriptor that specifies the text of a menu item can now be an evaluated expression. This makes it parallel with other descriptors, which can also be expressions. * Changes in XEmacs 21.0 ======================== ** XEmacs has been unbundled into constituent installable packages. See the Info documentation under "Packages" for more information. See the file `etc/PACKAGES' in the distribution for a partial list of packages available at the time of the 21.0 release. ** XEmacs is now supported under Microsoft Windows 95/98 and Windows NT operating systems. For starters, look at the XEmacs on Windows FAQ at . To discuss Windows-specific issues, subscribe to the mailing list at . ** XEmacs will now use `XEmacs' as its application class if it finds any `XEmacs' resources in the resource database. Otherwise, it will continue to use the `Emacs' class. ** The options menu has been ported to Custom. This means that each entry in the options menu acts as if you had customized the corresponding variable by hand. ### WARNING: there is currently no upgrading function to help you port your old options settings to the new format. Consequently, if you want to modify the options for XEmacs 21, you will have to set them all again through the menu, and remove the code loading .xemacs-options from your .emacs. ** When the Zmacs region is active, `M-x query-replace' and the other replace commands now operate on the region contents only. ** XEmacs now is able to choose X visuals and use private colormaps. The '-visual ' command line option or the '.EmacsVisual' Xresource controls which visual XEmacs will use, and '-privateColormap' or '.privateColormap' will force XEmacs to create a private colormap for use. The syntax for the visual string is "" where is one of 'StaticColor', 'TrueColor', 'GrayScale', 'PseudoColor' or 'DirectColor' and is the appropriate number of bits per pixel. If an invalid or non-supported combination is entered, XEmacs attempts to find a happy medium. The X creation mechanism will then determine if it needs to create a colormap for use, or the presence of the private flags will force it to create it. ** The `imenu' package has been ported to XEmacs and is available as a package. ** `echo-keystrokes' can now be a floating-point number, so that you can set it to intervals shorter than one second. (setq echo-keystrokes 0.1) ** The new command `center-to-window-line' works like `recenter' (bound to `C-l'), only it does not redisplay the whole display area. ** The M-. command will now first search through exact tags matches, and then through inexact matches, as one would expect. ** The new variable `user-full-name' can be used to customize one's name when using the Emacs mail and news reading facilities. Normally, `user-full-name' is a function that returns the full name of a user or UID, as specified by the system -- for instance, (user-full-name "root") returns something like "Super-User". However, when the function is called without arguments, it will return the value of the `user-full-name' variable. The `user-full-name' variable is initialized using the environment variable NAME and (failing that) the user's system name. The behavior of the `user-full-name' function with an argument specified is unchanged. ** The new command `M-x customize-changed-options' lets you customize all the options whose default values have changed in recent Emacs versions. You specify a previous Emacs version number as argument, and the command creates a customization buffer showing all the customizable options whose default values were changed since that version. If you don't specify a particular version number argument, then the customization buffer shows all the customizable options for which Emacs versions of changes are recorded. ** The new command `add-log-convert' can be used to convert the old-style (pre-20.3) ChangeLog buffers to new style, for consistency. A reminder: if you wish to revert to old-style ChangeLogs instead, customize the value of `add-log-time-format' variable. ** The new command `zap-up-to-char' is now available. It is similar to `zap-to-char', except that it does not delete the searched-for character. It is not bound to a key by default. ** You can now store a number into a register with `C-u NUMBER C-x r n' REG, increment it by INC with `C-u INC C-x r + REG' (to increment by one, omit C-u INC), and insert it in the buffer with `C-x r g REG'. This is useful for writing keyboard macros. ** The M-: command, when given a prefix argument, will now insert its result to the current buffer. ** The `C-h c' command, when given a prefix argument, will now insert the message into the current buffer. ** Horizontally split windows may now be dragged using the mouse. Because of this, the dividers between vertical windows are always visible. To turn it off, set `vertical-divider-always-visible-p' to nil. ** XEmacs/Mule (internationalization) changes. *** Mule support now works on TTY's. Use `set-terminal-coding-system' and `set-keyboard-coding-system' to specify the coding system of your display and keyboard. *** Egg/SJ3 input method is now officially supported. Quail and Egg/Skk have been available through the generalized Leim since 20.3. *** Localized Japanese menubars are available if XEmacs is built with XFONTSET and either the X11 libraries are built with X_LOCALE defined or the native C libraries support Japanese localization. This has been available since 20.3, only it hasn't been announced before. ** Jamie Zawinski's `gdb-highlight' extension is now distributed with the `debug' package. gdb-highlight makes most objects printed in a gdb buffer be mouse-sensitive: as text shows up in the buffer, it is parsed, and objects which are recognized have context-sensitive commands attached to them. To use it, add the following to `.emacs': (add-hook 'gdb-mode-hook (lambda () (require 'gdb-highlight))) ** The package popper.el is now included in the edit-utils package. It has been greatly enhanced with respect to the one once included with the ilisp package and should work well under XEmacs 21.0. ** Gnuserv changes *** Like the old 'gnudoit' program. Gnuclient -batch now can read from stdin. *** Gnuclient -batch no longer breaks off the output at the first LF. ** C mode changes *** Multiline macros are now handled, both as they affect indentation, and as recognized syntax. New syntactic symbol cpp-macro-cont is assigned to second and subsequent lines of a multiline macro definition. *** A new style "user" which captures all non-hook-ified (i.e. top-level) .emacs file variable setings and customizations. Style "cc-mode" is an alias for "user" and is deprecated. "gnu" style is still the default however. *** "java" style now conforms to Sun's JDK coding style. *** There are new commands c-beginning-of-defun, c-end-of-defun which are alternatives which you could bind to C-M-a and C-M-e if you prefer them. They do not have key bindings by default. *** New and improved implementations of M-a (c-beginning-of-statement) and M-e (c-end-of-statement). *** C++ namespace blocks are supported, with new syntactic symbols namespace-open, namespace-close, and innamespace. *** File local variable settings of c-file-style and c-file-offsets makes the style variables local to that buffer only. *** New indentation functions c-lineup-close-paren, c-indent-one-line-block, c-lineup-dont-change. *** Improvements (hopefully!) to the way CC Mode is loaded. You should now be able to do a (require 'cc-mode) to get the entire package loaded properly for customization in your .emacs file. A new variable c-initialize-on-load controls this and is t by default. ** In Text mode, now only blank lines separate paragraphs. This makes it possible to get the full benefit of Adaptive Fill mode in Text mode, and other modes derived from it (such as Mail mode). TAB in Text mode now runs the command indent-relative; this makes a practical difference only when you use indented paragraphs. As a result, the old Indented Text mode is now identical to Text mode, and is an alias for it. If you want spaces at the beginning of a line to start a paragraph, use the new mode, Paragraph Indent Text mode. ** Changes to Gnus, the XEmacs newsreader. *** New functionality for using Gnus as an offline newsreader has been added. A plethora of new commands and modes have been added. See the Gnus manual for the full story. *** The nndraft backend has returned, but works differently than before. All Message buffers are now also articles in the nndraft group, which is created automatically. *** `gnus-alter-header-function' can now be used to alter header values. *** `gnus-summary-goto-article' now accept Message-ID's. *** A new Message command for deleting text in the body of a message outside the region: `C-c C-v'. *** You can now post to component group in nnvirtual groups with `C-u C-c C-c'. *** `nntp-rlogin-program' -- new variable to ease customization. *** `C-u C-c C-c' in `gnus-article-edit-mode' will now inhibit re-highlighting of the article buffer. *** New element in `gnus-boring-article-headers' -- `long-to'. *** `M-i' symbolic prefix command. See the section "Symbolic Prefixes" in the Gnus manual for details. *** `L' and `I' in the summary buffer now take the symbolic prefix `a' to add the score rule to the "all.SCORE" file. *** `gnus-simplify-subject-functions' variable to allow greater control over simplification. *** `A T' -- new command for fetching the current thread. *** `/ T' -- new command for including the current thread in the limit. *** `M-RET' is a new Message command for breaking cited text. *** \\1-expressions are now valid in `nnmail-split-methods'. *** The `custom-face-lookup' function has been removed. If you used this function in your initialization files, you must rewrite them to use `face-spec-set' instead. *** Cancelling now uses the current select method. Symbolic prefix `a' forces normal posting method. *** New command to translate M******** sm*rtq**t*s into proper text -- `W d'. *** For easier debugging of nntp, you can set `nntp-record-commands' to a non-nil value. *** nntp now uses ~/.authinfo, a .netrc-like file, for controlling where and how to send AUTHINFO to NNTP servers. *** A command for editing group parameters from the summary buffer has been added. *** A history of where mails have been split is available. *** A new article date command has been added -- `article-date-iso8601'. *** Subjects can be simplified when threading by setting `gnus-score-thread-simplify'. *** A new function for citing in Message has been added -- `message-cite-original-without-signature'. *** `article-strip-all-blank-lines' -- new article command. *** A new Message command to kill to the end of the article has been added. *** A minimum adaptive score can be specified by using the `gnus-adaptive-word-minimum' variable. *** The "lapsed date" article header can be kept continually updated by the `gnus-start-date-timer' command. *** Web listserv archives can be read with the nnlistserv backend. *** Old dejanews archives can now be read by nnweb. *** Byte-compilation of user-specs now works under XEmacs. ** The `dir' files are no longer essential for functioning of the Info subsystem. If the `dir' file does not exist in an Info directory, the relevant information will be generated on-the-fly. This behavior can be customized, look for `Info-auto-generate-directory' and `Info-save-auto-generated-dir' in the `info' customization group. * Lisp and internal changes in XEmacs 21.0 ========================================== ** It is now possible to build XEmacs with support for 31-bit Lisp integers (normally, Lisp integers are only 28 bits wide on 32-bit machines.) Configure with --use-minimal-tagbits to test. With this change, the maximum buffer size on 32-bit machines is increased from 128M to 1G. This setting will be made default in a future XEmacs version. ** Specifier changes. *** When instantiating a specifier, the window locale now has a higher precedence than the buffer locale. This is because the window locale is more specific than the buffer locale. *** The new macro `let-specifier' can be used to temporarily add specifications to specifiers. See the documentation for details. *** The new specifiers `vertical-scrollbar-visible-p' and `horizontal-scrollbar-visible-p' may be used to control scrollbar visibility. Previously, the only way to remove a scrollbar was to set its size to 0. This method is still supported for backward compatibility. *** The new specifiers `scrollbar-on-left-p' and `scrollbar-on-top-p' may be used to control the position of the vertical and horizontal toolbar. Previously, their position could be changed only through the use of X resources. *** The new draggable vertical dividers between windows may be turned off using the `vertical-divider-always-visible-p' specifier. When this is set to nil, the vertical dividers between windows are shown only when needed, and they are not draggable. Other properties of the vertical dividers may be controlled using `vertical-divider-shadow-thickness', `vertical-divider-line-width' and `vertical-divider-spacing' specifiers, which see. ** Frame focus management changes. *** When the variable focus-follows-mouse is non-nil, `select-frame' no longer permanently selects a different frame. The frame selection is temporary and is reverted when the current command terminates, much like the buffer selected by `set-buffer'. This is the same as in FSF Emacs. *** The new function `focus-frame' sets the window system focus to FRAME (and selects it), regardless of the value of `focus-follows-mouse'. Doing this is not well behaved, so be absolutely sure that you want this. The code that uses `select-frame' only to get the window manager focus should be changed to use `set-frame-focus' instead, so that they keep working when `focus-follows-mouse' is non-nil. *** The special forms `save-selected-frame' and `with-selected-frame' can now be used to temporarily change selected frame. *** The behavior of `other-frame' command (`C-x 5 o') is unaffected by these changes. ** The function `select-window' now has an optional second argument NORECORD which if non-nil inhibits the recording of a buffer change. ** The function `vertical-motion' now correctly handles the second, optional WINDOW argument. A new third argument PIXELS, if non-nil, indicates that the returned motion should be in pixels. ** The new function `vertical-motion-pixels' is similar to vertical-motion but takes as input a vertical motion in pixels. ** The new functions window-text-area-pixel-{width,height,edges} can be used to obtain information about the text-displaying area of a window. ** The new functions `shrink-window-pixels' and `enlarge-window-pixels' can be used to adjust the size of a window by a pixel amount. ** The new function `window-displayed-text-pixel-height' can be used to determine the height of the text actually displayed in a window. ** The arithmetic comparison functions <, >, =, /= now accept a variable number of arguments. This means that if you want to test whether A < B < C, you can write it as (< A B C) instead of (and (< A B) (< B C)). Likewise, (apply #'> LIST) now tests if LIST is monotonously increasing -- and so on. ** The XEmacs hashtables now have a consistent read/print syntax. This means that a hashtable will be readably printed in a structure-like form: #s(hashtable size 2 data (key1 value1 key2 value2)) When XEmacs reads this form, it will create a new hashtable according to description. This allows you to easily dump hashtables to files using `prin1', and read them back in using `read'. If `print-readably' is non-nil, a more relaxed syntax is used; for instance: # ** It is now possible to build XEmacs with LDAP support. You will need to install a LDAP library first. The following have been tested: - LDAP 3.3 from the University of Michigan (get it from ) - OpenLDAP 1.0.3 from the OpenLDAP Foundation (get it from ) - LDAP SDK 1.0 from Netscape Corp. (get it from ) ** When profiling is in effect, a call-count of all recorded functions is now calculated. This information is stored in `call-count-profile-table', and is utilized by `profile-results' as well as the new command `profile-call-count-results'. ** It is now an error to change the value of a symbol whose name starts with a colon, if it is interned in the standard obarray. However, setting such a symbol to its proper value, which is that symbol itself, is not an error. This is for the sake of programs that support pre-19.12 XEmacs and pre-20 GNU Emacs by explicitly setting these variables to themselves. ** The `concat' function no longer accepts integer arguments. ** The new function `string' concatenates all its argument characters and returns the resulting string. This is consistent with other functions, like `list', `vector', etc. ** The function `temp-directory' is now available to return the directory to store temporary files. On Unix this will be obtained from TMPDIR, defaulting to `/tmp'. ** The function load-average now accepts an optional argument USE-FLOATS. If it is non-nil, the load average values are returned as floating point numbers, rather than as integers to be divided by 100. ** The `make-event' function now supports the TYPE and PLIST arguments, which can be used to create various events from Lisp. See the documentation for details. ** `function-interactive' is a new function that returns the interactive specification of a funcallable object. ** The new `lmessage' function allows printing of a formatted message with a particular label. (lmessage 'progress "Processing... %d" counter) This function is more convenient than `display-message' because it automatically applies `format' to its arguments. ** The new `lwarn' function, analogous to `lmessage', allows printing a formatted warning, with a non-default CLASS or LABEL. ** The new function `split-path' can now be used to explode the components of a colon-separated search path into a list. (split-path "foo:bar") => ("foo" "bar") ** Specifiers and symbols whose value is a specifier are now allowed as modeline specifications. ** defcustom now accepts the keyword `:version'. Use this to specify in which version of Emacs a certain variable's default value changed. For example, (defcustom foo-max 34 "*Maximum number of foo's allowed." :type 'integer :group 'foo :version "21.0") This information is used to control the customize-changed-options command. ** The line number tracking in modeline is now efficient, even for very large buffers. This is achieved by caching the line numbers of recent buffer positions, and reusing them. This cache is used only in the buffers where `line-number-mode' is in effect. ** When the new GNU Malloc aka Doug Lea Malloc is available, it will be used. This should result in better performance on Linux systems with libc6. ** The code XEmacs uses to assemble its various paths into the directory hierarchy has been rewritten to support the package system. Look under "Startup Paths" in the Info documentation for more information. *** site-lisp is no longer part of the load-path by default. Its use is deprecated, but you can specify --with-site-lisp=yes at the configure command line to get it back. *** `Info-default-directory-list' is now obsolete. If you want to change the path which XEmacs uses to search for info files, set `Info-directory-list' instead. * For older news, see the file ONEWS. xemacs-21.4.22/etc/ONEWS0000644000175000017500000012155407265370777012665 0ustar acsacs-*- mode:outline -*- * Changes in XEmacs 20.4 ======================== ** XEmacs 20.4 is a bugfix release with no user-visible changes. * Changes in XEmacs 20.3 ======================== ** Quail input method is now available. Quail is a simple key-translation system that allows users to input any multilingual text from normal ASCII keyboard. This means that XEmacs with Mule now supports a number of European languages. ** More Windows NT support. Thanks to efforts of many people, coordinated by David Hobley and Marc Paquette , beta versions of XEmacs now run on 32-bit Windows platforms (Windows NT and Windows 95). The current betas require having an X server to run XEmacs; however, a native NT/95 port is in alpha, thanks to Jonathan Harris . The NT development is now coordinated by a mailing list at . Mail to to subscribe. ** Multiple TTY frames are now available. On consoles that display only one frame at a time (e.g. TTY consoles), creating a new frame with `C-x 5 2' also raises and selects that frame. The behavior of window system frames is unchanged. ** Package starting changes. State of Emacs should never be changed with loading a package. The following XEmacs packages that used to break this have been changed. *** Loading `paren' no longer enables paren-blinking. Use `paren-set-mode' explicitly, or customize `paren-mode'. *** Loading `uniquify' no longer enables uniquify. Set `uniquify-buffer-name-style' to a legal value. *** Loading `time' no longer enables display time. Invoke `display-time' explicitly. *** Loading `jka-compr' no longer enables on-the-fly compression. Use `toggle-auto-compression' instead. *** Loading `id-select' no longer enables its behaviour. Use `id-select-install' instead. ** Zmacs region is not deactivated when an error is signaled. The behavior of the zmacs region can now be controlled in the event of a signaled error. The new variable `errors-deactivate-region' may be set to nil to revert to the old behaviour. As before, typing C-g deactivates the region. ** Multiple Info `dir' functionality has been merged with GNU Emacs 19.34. XEmacs will now correctly merge all the `dir' files in `Info-directory-list' (initialized from either the `INFOPATH' env. variable or `Info-default-directory-list'.) These files may be full-fledged info files containing subnodes or menus. Previously supported `localdir' files are looked for also, secondary to `dir's. See the manual for details. ** Abbreviations can now contain non-word characters. This means that it is finally possible to do such simple things as define `#in' to expand to `#include' in C mode, `s-c-b' to `save-current-buffer' in Lisp mode, `call/cc' to `call-with-current-continuation' in Scheme mode, etc. ** `C-x n d' now runs the new command `narrow-to-defun', which narrows the accessible parts of the buffer to just the current defun. ** The new command `C-x 4 0' (kill-buffer-and-window) kills the current buffer and deletes the selected window. It asks for confirmation first. ** `ESC ESC ESC' (keyboard-escape-quit) will now correctly abort recursive edits (as documented.) ** arc-mode has a new function called `archive-quit' bound to q, which quits archive mode in the same fashion dired-quit works. ** A `tetris' clone is now available within XEmacs, written by Glynn Clements. Try it out with `M-x tetris'. ** The feature to teach the key bindings of extended commands now prints the message after the command finishes. After some time, the previous echo area contents are restored (in case the command prints something useful). ** If you set scroll-conservatively to a small number, then when you move point a short distance off the screen, XEmacs will scroll the screen just far enough to bring point back on screen, provided that does not exceed `scroll-conservatively' lines. ** Face background colors now take precedence over the default face background pixmap, which means that background pixmaps no longer clash with zmacs-regions, or clickable buttons. ** Regexps can now contain additional Perl-like constructs. ** Modifiers can be added to a keystroke by preceding it with a `C-x @ ' sequence where is one of letters `S', `c', `m', `a', `h', `s' corresponding to shift, control, meta, alt, hyper, and super modifiers, respectively. It is possible to add several modifiers by repeating this sequence. This feature is especially useful on text terminals where it allows one to enter keystrokes like, e.g., `M-home'. ** An arbitrary keystroke can be generated by entering `C-x @ k RET'. For example a sequence: C-x @ c C-x @ k b a c k s p a c e RET will result in a `C-backspace' keystroke even on text terminals. ** Customize changes. *** Customize has undergone a massive speedup, and should now operate acceptably fast. Slowness of the interface used to be the biggest gripe. *** Many more packages have been modified to use the facility, so almost all of XEmacs options can now be examined through the Customize groups. *** There is a new `browser' mode of traversing customizations, in many ways easier to follow than the standard one. Try it out with `M-x customize-browse'. ** Pending-delete changes. *** Pending-delete is now a minor mode, with the normal minor-mode semantics and toggle functions. Old functions are left for compatibility. *** Loading pending-del no longer turns on pending-delete mode. In fact, it is no longer necessary to explicitly load pending-del. All you need to do to turn on pending-delete is run the pending-delete function: Within XEmacs: Type M-x pending-delete not M-x load-library pending-delete In .emacs: Use (turn-on-pending-delete) not (load "pending-del") ** XEmacs can now save the minibuffer histories from various minibuffers. To use this feature, add the line: (savehist-load) to your .emacs. This will load the minibuffer histories (if any) at startup, as well as instruct XEmacs to save them before exiting. You can use Customize to add or remove the histories being saved. ** The default format for ChangeLog entries (as created by `C-x 4 a') is now the international ISO 8601 format. To revert to the old behaviour, use: (setq add-log-time-format 'current-time-string) Or `M-x customize RET add-log RET'. ** In ChangeLog mode, you can now press `C-c C-c' to save the file and restore old window configuration, or `C-c C-k' to abandon the changes. ** The key `C-x m' no longer runs the `mail' command directly. Instead, it runs the command `compose-mail', which invokes the mail composition mechanism you have selected with the variable `mail-user-agent'. The default choice of user agent is `sendmail-user-agent', which gives behavior compatible with the old behavior. C-x 4 m now runs compose-mail-other-window, and C-x 5 m runs compose-mail-other-frame. ** When you kill a buffer that visits a file, if there are any registers that save positions in the file, these register values no longer become completely useless. If you try to go to such a register with `C-x j', then you are asked whether to visit the file again. If you say yes, it visits the file and then goes to the same position. ** When you visit a file that changes frequently outside Emacs--for example, a log of output from a process that continues to run--it may be useful for Emacs to revert the file without querying you whenever you visit the file afresh with `C-x C-f'. You can request this behavior for certain files by setting the variable revert-without-query to a list of regular expressions. If a file's name matches any of these regular expressions, find-file and revert-buffer revert the buffer without asking for permission--but only if you have not edited the buffer text yourself. ** Gnuserv changes *** The Lisp part of gnuserv has been rewritten to allow for more flexibility and features. *** Many new options and variables are now customizable. Try `M-x customize RET gnuserv RET'. *** The functionality of `gnuattach' and `gnudoit' programs is provided by `gnuclient', which now accepts the standard `-nw', `-display', `-eval' and `-f' options. ** Etags changes. *** In C, C++, Objective C and Java, Etags tags global variables by default. The resulting tags files are inflated by 30% on average. Use --no-globals to turn this feature off. Etags can also tag variables that are members of structure-like constructs, but it does not by default. Use --members to turn this feature on. *** C++ member functions are now recognized as tags. *** Java is tagged like C++. In addition, "extends" and "implements" constructs are tagged. Files are recognised by the extension .java. *** Etags can now handle programs written in Postscript. Files are recognised by the extensions .ps and .pdb (Postscript with C syntax). In Postscript, tags are lines that start with a slash. *** Etags now handles Objective C and Objective C++ code. The usual C and C++ tags are recognized in these languages; in addition, etags recognizes special Objective C syntax for classes, class categories, methods and protocols. *** Etags also handles Cobol. Files are recognised by the extension .cobol. The tagged lines are those containing a word that begins in column 8 and ends in a full stop, i.e. anything that could be a paragraph name. *** Regexps in Etags now support intervals, as in ed or grep. The syntax of an interval is \{M,N\}, and it means to match the preceding expression at least M times and as many as N times. ** Ada mode changes. *** There is now better support for using find-file.el with Ada mode. If you switch between spec and body, the cursor stays in the same procedure (modulo overloading). If a spec has no body file yet, but you try to switch to its body file, Ada mode now generates procedure stubs. *** There are two new commands: - `ada-make-local' : invokes gnatmake on the current buffer - `ada-check-syntax' : check syntax of current buffer. The user options `ada-compiler-make', `ada-make-options', `ada-language-version', `ada-compiler-syntax-check', and `ada-compile-options' are used within these commands. *** Ada mode can now work with Outline minor mode. The outline level is calculated from the indenting, not from syntactic constructs. Outlining does not work if your code is not correctly indented. *** The new function `ada-gnat-style' converts the buffer to the style of formatting used in GNAT. It places two blanks after a comment start, places one blank between a word end and an opening '(', and puts one space between a comma and the beginning of a word. ** New demand based locking implementation A faster, but experimental replacement for lazy-lock (called lazy-shot) is provided. Like lazy-lock it provides demand based and idle time font-lock-ing. However the lazy-lock versions that came with previous versions slowed down XEmacs (possibly quite a lot). Lazy-shot solves this problem by relying on new support from the C code part of XEmacs. The support however is experimental and will cause some flashing as parts of the buffer are colored. This likely to change in the future as the C support is completed. The current lazy-shot implementation is mostly interface compatible with lazy-lock v2.06 (the version shipped with XEmacs is v1.x). *** To enable: 1. Despite the flashing, lazy-shot was deemed such an improvement by the majority of beta testers that it is now the standard method provided by the options menu. Alternatively add (add-hook 'font-lock-mode-hook 'turn-on-lazy-shot) to '.emacs'. 2. If you were using lazy-lock before, just replace all occurrences of "lazy-lock" by "lazy-shot" in your '.emacs' file. *** To disable: If prefer to use lazy-lock in stead of lazy-shot, put (remove-hook 'font-lock-mode-hook 'turn-on-lazy-shot) (add-hook 'font-lock-mode-hook 'turn-on-lazy-lock) at the END of `.emacs'. ** RefTeX mode RefTeX mode is a new minor mode with special support for \label{}, \ref{} and \cite{} macros in LaTeX documents. RefTeX distinguishes labels of different environments (equation, figure, ...) and has full support for multifile documents. To use it, select a buffer with a LaTeX document and turn the mode on with M-x reftex-mode. Here are the main user commands: C-c ( reftex-label Creates a label semi-automatically. RefTeX is context sensitive and knows which kind of label is needed. C-c ) reftex-reference Offers in a menu all labels in the document, along with context of the label definition. The selected label is referenced as \ref{LABEL}. C-c [ reftex-citation Prompts for a regular expression and displays a list of matching BibTeX database entries. The selected entry is cited with a \cite{KEY} macro. C-c & reftex-view-crossref Views the cross reference of a \ref{} or \cite{} command near point. C-c = reftex-toc Shows a table of contents of the (multifile) document. From there you can quickly jump to every section. Under X, RefTeX installs a "Ref" menu in the menu bar, with additional commands. Full documentation and customization examples are in the file reftex.el. You can use the finder to view this information: C-h p --> tex --> reftex.el * Lisp and internal changes in XEmacs 20.3 ========================================== ** Autoconf 2 is supported, making XEmacs more conforming to conventions used by other free software. ** `tty-erase-char' is a new variable that reports which character was set up as the terminal's erase character at the time Emacs was started. ** It is now possible to attach the menubar accelerator keys to menu entries. Look at the Lispref under Menus->Menu Accelerators for details. ** `insert-file-contents' can now read from a special file, as long as the arguments VISIT and REPLACE are nil. ** `string-to-number' now accepts an optional BASE argument that specifies which base to use. The default base is 10. ** The TIME argument to `format-time-string' is now optional and defaults to the current time. ** The PATTERN argument to `split-string' is now optional and defaults to whitespace ("[ \f\t\n\r\v]+"). ** `set-extent-properties' is a new function that can be used to change properties of an extent at once, and is analogous to `set-frame-properties'. ** If a format field width is specified as `*', the field width is now assumed to have been specified as an argument (as in C.) (format "%*s" 10 "abc") => " abc" ** The new macro `with-current-buffer' lets you evaluate an expression conveniently with a different current buffer. It looks like this: (with-current-buffer BUFFER BODY-FORMS...) BUFFER is the expression that says which buffer to use. BODY-FORMS say what to do in that buffer. The old `eval-in-buffer' macro is obsoleted by `with-current-buffer'. ** The new primitive `save-current-buffer' saves and restores the choice of current buffer, like `save-excursion', but without saving or restoring the value of point or the mark. `with-current-buffer' works using `save-current-buffer'. ** The new macro `with-temp-file' lets you do some work in a new buffer and write the output to a specified file. Like `progn', it returns the value of the last form. ** The variable `debug-ignored-errors' now works in XEmacs. It allows one to ignore the debugger for some common errors, even when `debug-on-error' is t. It has no effect when `debug-on-signal' is non-nil. ** The new function `current-message' returns the message currently displayed in the echo area, or nil if there is none. ** File-access primitive functions no longer discard an extra redundant directory name from the beginning of the file name. In other words, they no longer do anything special with // or /~. The same goes for `expand-file-name'. That conversion is now done only in `substitute-in-file-name'. This makes it possible for a Lisp program to open a file whose name begins with ~. ** The regexp matcher has been extended to recognize the following constructs, borrowed from Perl: *** Additional quantifiers. In addition to `*', `+' and `?', XEmacs now recognizes the following quantifiers: \{n\} Match exactly n times \{n,\} Match at least n times \{n,m\} Match at least n but not more than m times *** Non-greedy quantifiers. Any of the standard quantifiers (`*', `+' and others) can now be followed by an optional `?', which will make them become "non-greedy", i.e. they will match as little text as possible. Note that the meanings don't change, just the "gravity." *** Shy groups. The \(?: ... \) groups things like \( ... \), but doesn't record the context for backreferences or future use. This is useful when you need a lot of groups for the sake of priorities, but actually want to record only one or two. ** The new function `regexp-opt' returns an efficient regexp to match a string. The arguments are STRINGS and (optionally) PAREN. This function can be used where regexp matching or searching is intensively used and speed is important, e.g., in Font Lock mode. ** The featurep syntax has been extended to resemble the Common Lisp one, as suggested by Erik Naggum. *** The `xemacs' feature is defined in XEmacs by default. *** The expression `#+fexp form' is equivalent to (when (featurep fexp) form), only it is evaluated at read-time. Also, `#-fexp form' is equivalent to (unless (featurep fexp) form). *** In addition to symbols, a FEXP can also be a number, or a logical operator. Here are some examples: ;; evaluates to non-nil on XEmacs: (featurep 'xemacs) ;; evaluates to non-nil on XEmacs 20.3 or later: (featurep '(and xemacs 20.03)) ;; evaluates to non-nil either on Emacs, or on XEmacs built without ;; X support: (featurep '(or emacs (and xemacs (not x)))) * Changes in XEmacs 20.2 ======================== ** Why XEmacs 20.1 is called 20.2 Testing of XEmacs 20.1 revealed a number of showstopping bugs at the very final moment. Instead of confusing the version numbers further, the `20.1' designation was abandoned, and the release was renamed to `20.2'. ** Delete/backspace keysyms have been separated The Delete and Backspace keysyms are now no longer identical. A better version of delbackspace.el has been added called delbs.el. ** XEmacs 20.0 MULE API supported for backwards compatibility XEmacs 20.2 primarily supports the MULE 3 API. It now also supports the XEmacs 20.0 MULE API. ** The logo has been changed, and the default background color is now a shade of gray instead of the eye-burning white. The sample .Xdefaults and .emacs files contain examples of how to revert to the old background color. ** Default modeline colors are now less of a color-salad. ** The `C-z' key now iconifies only the current X frame. You can use `C-x C-z' to get the old behavior. On the tty frames `C-z' behaves as before. ** The command `display-time' now draws a pretty image in the modeline when new mail arrives. It also supports balloon-help messages. ** Various commands that were previously disabled are now enabled, like eval-expression (`M-:') and upcase-region (`C-x C-u')/downcase-region (`C-x C-l'). ** It is now possible to customize the functions called by XEmacs toolbar. Type `M-x customize RET toolbar RET' to customize it. Customizations include the choice of functions for the buttons to invoke, as well as a wide choice of mailers and newsreaders to invoked by the respective functions. ** `temp-buffer-shrink-to-fit' now defaults to nil. There are unresolved issues regarding this feature, which is why the XEmacs developers decided to disable it by default. ** `ps-print-color-p' now defaults to nil. This is because the new default background color is non-white. The `Printing Options' in the `Options' menu now include an item that enables color printing, and sets the white background. ** `line-number-mode' should be used to get line numbers in the modeline, and `column-number-mode' to get column numbers. Line numbers now number from 1 by default. ** font-lock-mode will now correctly fontify `int a, b, c;' expressions in C mode. ** The blinking cursor is always "on" during movement. ** The XEmacs build process has been changed to make site administration easier. See lisp/site-load.el for details. ** Numerous causes of crashes have been fixed. XEmacs should now be even more stable than before. ** configure no longer defaults to using --with-xim=motif if Motif libraries are linked. There are many bugs in the Xlib XIM support in X11R6.3. ** A number of new packages are added, and many packages were updated. ** Gnus-5.4.52, courtesy of Lars Magne Ingebrigtsen *** nntp.el has been totally rewritten in an asynchronous fashion. *** Article prefetching functionality has been moved up into Gnus. *** Scoring can now be performed with logical operators like `and', `or', `not', and parent redirection. *** Article washing status can be displayed in the article mode line. *** gnus.el has been split into many smaller files. *** Suppression of duplicate articles based on Message-ID. (setq gnus-suppress-duplicates t) *** New variables for specifying what score and adapt files are to be considered home score and adapt files. See `gnus-home-score-file' and `gnus-home-adapt-files'. *** Groups can inherit group parameters from parent topics. *** Article editing has been revamped and is now usable. *** Signatures can be recognized in more intelligent fashions. See `gnus-signature-separator' and `gnus-signature-limit'. *** Summary pick mode has been made to look more nn-like. Line numbers are displayed and the `.' command can be used to pick articles. *** Commands for moving the .newsrc.eld from one server to another have been added. `M-x gnus-change-server' *** A way to specify that "uninteresting" fields be suppressed when generating lines in buffers. *** Several commands in the group buffer can be undone with `M-C-_'. *** Scoring can be done on words using the new score type `w'. *** Adaptive scoring can be done on a Subject word-by-word basis: (setq gnus-use-adaptive-scoring '(word)) *** Scores can be decayed. (setq gnus-decay-scores t) *** Scoring can be performed using a regexp on the Date header. The Date is normalized to compact ISO 8601 format first. *** A new command has been added to remove all data on articles from the native server. `M-x gnus-group-clear-data-on-native-groups' *** A new command for reading collections of documents (nndoc with nnvirtual on top) has been added -- `M-C-d'. *** Process mark sets can be pushed and popped. *** A new mail-to-news backend makes it possible to post even when the NNTP server doesn't allow posting. *** A new backend for reading searches from Web search engines (DejaNews, Alta Vista, InReference) has been added. Use the `G w' command in the group buffer to create such a group. *** Groups inside topics can now be sorted using the standard sorting functions, and each topic can be sorted independently. See the commands under the `T S' submap. *** Subsets of the groups can be sorted independently. See the commands under the `G P' submap. *** Cached articles can be pulled into the groups. Use the `Y c' command. *** Score files are now applied in a more reliable order. *** Reports on where mail messages end up can be generated. `M-x nnmail-split-history' *** More hooks and functions have been added to remove junk from incoming mail before saving the mail. See `nnmail-prepare-incoming-header-hook'. *** The nnml mail backend now understands compressed article files. ** Custom 1.86, courtesy of Per Abrahamsen The Customize library enables Emacs Lisp programmers to specify types of their variables, so that the users can customize them. Invoke the customizations buffer using the menus (Customize is at the top of the Options menu), or using commands `M-x customize', `M-x customize-variable' and `M-x customize-face'. Customize can save the changed settings to your `.emacs' file. Customize is now the preferred way to change XEmacs settings. Tens of packages have been converted to take advantage of the Customize features, including Gnus, Message, Supercite, Psgml, Comint, W3, cc-mode (and many other programming language modes), ispell.el, ps-print.el, id-select.el, most of the programming language modes, and many many more. See the "Lisp Changes" section later for a short description of why and how to add custom support to your Lisp packages. Custom is also documented in the XEmacs info manuals. ** W3-3.0.86, courtesy of William Perry Version 3 of Emacs/W3, the Emacs World Wide Web browser, has been included. It is significantly faster than any of the previous versions, and contains numerous new features. ** AUCTeX-9.7k, courtesy of Per Abrahamsen AUC TeX is a comprehensive customizable integrated environment for writing input files for LaTeX using Emacs. AUC TeX lets you run TeX/LaTeX and other LaTeX-related tools, such as a output filters or post processor from inside Emacs. Especially `running LaTeX' is interesting, as AUC TeX lets you browse through the errors TeX reported, while it moves the cursor directly to the reported error, and displays some documentation for that particular error. This will even work when the document is spread over several files. AUC TeX automatically indents your `LaTeX-source', not only as you write it -- you can also let it indent and format an entire document. It has a special outline feature, which can greatly help you `getting an overview' of a document. Apart from these special features, AUC TeX provides an large range of handy Emacs macros, which in several different ways can help you write your LaTeX documents fast and painless. ** redo.el-1.01, courtesy of Kyle Jones redo.el is a package that implements true redo mechanism in XEmacs buffers. Once you load it from your `.emacs', you can bind the `redo' command to a convenient key to use it. Emacs' normal undo system allows you to undo an arbitrary number of buffer changes. These undos are recorded as ordinary buffer changes themselves. So when you break the chain of undos by issuing some other command, you can then undo all the undos. The chain of recorded buffer modifications therefore grows without bound, truncated only at garbage collection time. The redo/undo system is different in two ways: *** The undo/redo command chain is only broken by a buffer modification. You can move around the buffer or switch buffers and still come back and do more undos or redos. *** The `redo' command rescinds the most recent undo without recording the change as a _new_ buffer change. It completely reverses the effect of the undo, which includes making the chain of buffer modification records shorter by one, to counteract the effect of the undo command making the record list longer by one. ** edmacro.el-3.10, courtesy of Dave Gillespie, ported to XEmacs by Hrvoje Niksic. Edmacro is a utility that provides easy editing of keyboard macros. Originally written by Dave Gillespie, it has been mostly rewritten by Hrvoje Niksic, in order to make it distinguish characters and integer, as well as to adapt it to XEmacs keysyms. Press `C-x C-k' to invoke the `edit-kbd-macro' command that lets you edit old as well as define new keyboard macros. You can also edit the last 100 keystrokes and insert them into a macro to be bound to a key or named as a command. The recorded/edited macros can be dumped to `.emacs' file. ** xmine.el-1.8, courtesy of Jens Lautenbacher XEmacs now includes a minesweeper game with a full-featured graphics and mouse interface. Invoke with `M-x xmine'. ** efs-1.15-x5 courtesy of Andy Norman and Michael Sperber EFS is now integrated with XEmacs, and replaces the old ange-ftp. It has many more features, including info documentation, support for many different FTP servers, and integration with dired. ** mic-paren.el-1.3.1, courtesy of Mikael Sjödin ** hyperbole-4.022, courtesy of Bob Weiner ** hm--html-menus-5.3, courtesy of Heiko Muenkel ** python-mode.el-2.90, courtesy of Barry Warsaw ** balloon-help-1.06, courtesy of Kyle Jones ** xrdb-mode.el-1.21, courtesy of Barry Warsaw ** igrep.el-2.56, courtesy of Kevin Rodgers ** frame-icon.el, courtesy of Michael Lamoureux and Bob Weiner ** itimer.el-1.05, courtesy of Kyle Jones ** VM-6.30, courtesy of Kyle Jones ** OO-Browser-2.10, courtesy of Bob Weiner ** viper-2.93, courtesy of Michael Kifer ** ediff-2.65, courtesy of Michael Kifer ** detached-minibuf-1.1, courtesy of Alvin Shelton ** whitespace-mode.el, courtesy of Heiko Muenkel ** winmgr-mode.el, courtesy of David Konerding, Stefan Strobel & Barry Warsaw ** fast-lock.el-3.11.01, courtesy of Simon Marshall ** lazy-lock.el-1.16, courtesy of Simon Marshall ** browse-cltl2.el-1.1, courtesy of Holger Schauer ** eldoc.el-1.10, courtesy of Noah Friedman ** tm-7.105, courtesy of MORIOKA Tomohiko ** verilog-mode.el-2.25, courtesy of Michael McNamara & Adrian Aichner ** overlay.el, courtesy of Joseph Nuspl ** live-icon.el-1.3, fixes courtesy of Karl Hegbloom ** tpu-edt.el, fixes courtesy of R. Kevin Oberman ** etags.c-11.86 Courtesy of F. Potortì * Lisp and internal changes in XEmacs 20.2 ========================================== ** `defcustom' and `defgroup' can now be used to specify types and placement of the user-settable variables. You can now specify the types of user-settable variables in your Lisp packages to be customized by users. To do so, use `defcustom' as a replacement for `defvar'. For example, the old declaration: (defvar foo-blurgoze nil "*non-nil means that foo will act very blurgozely.") can be rewritten as: (defcustom foo-blurgoze nil "*non-nil means that foo will act very blurgozely." :type 'boolean :group 'foo) From a package writer's point of view, nothing has been changed However, the user can now type `M-x customize RET foo-blurgoze RET' to customize the variable. Other, more complex data structures can be described with `defcustom' too, for instance: (defcustom foo-hairy-alist '((somekey . "somestring") (otherkey . (foo-doit)) (thirdkey . [1 2 3])) "*Alist describing the hairy options of the foo package. The CAR of each element is a symbol, whereas the CDR can be either a string, a form to evaluate, or a vector of integers. New Emacs users simply adore alists like this one." :type '(repeat (cons (symbol :tag "Key") (choice string (vector (repeat :inline t integer)) sexp))) :group 'foo) The user will be able to add and remove the entries to the list in a visually appealing way, as well as save the settings to his/her `.emacs'. Note that `defcustom' will also be included in GNU Emacs 19.35, and that both XEmacs and GNU Emacs will be using it in the future. Although the user-interface of customize may change, the Lisp interface will remain the same. This is why we recommend that you use `defcustom' for user-settable variables in your new Lisp packages. ** The `read-kbd-macro' function is now available. The `read-kbd-macro' function (as well as the read-time evaluated `kbd' macro) from the edmacro package is now available in XEmacs. For example: (define-key foo-mode-map (kbd "C-c ") 'foo-up) is completely equivalent to (define-key foo-mode-map [(control ?c) up] 'foo-up) The `kbd' macro is preferred over `read-kbd-macro' function , as it evaluates before compiling, thus having no loading overhead. Using `kbd' is not necessary for GNU Emacs compatibility (GNU Emacs supports the XEmacs-style keysyms), but adds to clarity. For example, (kbd "C-?") is usually easier to read than [(control ??)]. The full description of the syntax of keybindings accepted by `read-kbd-macro' is documented in the docstring of `edmacro-mode'. ** Overlay compatibility is implemented. The overlay support in XEmacs is now functional. Written by Joe Nuspl, the overlay compatibility library overlay.el is implemented on top of the native XEmacs extents, and can be used as a GNU Emacs-compatible way of changing display properties. ** You should use keysyms kp-* (kp-1, kp-2, ..., kp-enter etc.) rather than the old form kp_*. The new form is also compatible with GNU Emacs. ** The keysyms mouse-1, mouse-2, mouse-3 and down-mouse-1, down-mouse-2, and down-mouse-3 have been added for GNU Emacs compatibility. ** A new user variable `signal-error-on-buffer-boundary' has been added. Set this to variable to nil to avoid XEmacs usual lossage of zmacs region when moving up against a buffer boundary. ** lib-complete.el was MULE-ized. The commands `find-library', `find-library-other-window' and `find-library-other-frame' now take an optional coding system argument. ** Experimental support for Lisp reader macros #-, #+. The Common Lisp reader macros for feature test are now supported. This feature is present for evaluation purposes and is subject to change. ** `values' now has a setf method ** The `eval-after-load' and `eval-next-after-load' functions are now available. ** A bug that prevented `current-display-table' to be correctly set with `set-specifier' has been fixed. ** The bug in easymenu which prevented multiple menus from being accessible through button3 has been fixed. You can now safely use easymenu to define multiple menu entries in a compatible way, with the added menus accessible via button3 as local submenus. ** Many bugs in the scrollbar code have been fixed. ** First alpha level support of MS Windows NT is available, courtesy of David Hobley and Marc Paquette. ** Wnn/egg now has initial support Courtesy of Jareth Hein. ** Some old non-working code has been removed until someone chooses to work on it. This includes much of the NeXTStep stuff. The VMS support is also likely to be removed in the future. ** Many files have been purged out of the etc/ directory. If you still need the purged files, look for them in the GNU Emacs distribution. * Major Differences Between 19.14 and 20.0 =========================================== XEmacs 20.0 is the first public release to have support for MULE (Multi-Lingual Emacs). The --with-mule configuration flag must be used to enable Mule support. Many bugs have been fixed. An effort has been made to eradicate all XEmacs crashes, although we are not quite done yet. The overall quality of XEmacs should be higher than any previous release. XEmacs now compiles with nary a warning with some compilers. -- Multiple character sets can be displayed in a buffer. The file mule-doc/demo in the distribution contains a greeting in many different languages. -- Although the Mule work is for all languages, particular effort has been invested in Japanese, with particular focus on Japanese users of Sun WorkShop. Many menubar labels have been translated into Japanese. Martin Buchholz, the maintainer of MULE features within XEmacs normally runs XEmacs in a Japanese language environment. Some of the other contributors are Japanese, most importantly Morioka Tomohiko, author of the TM package, providing MIME support for Mail and News. -- Input for complex Asian languages is supported via XIM, a mechanism introduced in X11R5 to allow applications to get localized input without knowledge of the language. The way XIM works is that when the locale has a complex character set, such as Japanese, and extra minibuffer-like status window appears attached to various application windows, and indicates the status of the input method. Composed input in XEmacs should work the same as with other applications. If Motif and Mule support is configured into XEmacs, then XIM support is automatically configured in as well. -- TM (Tools for Mime) now comes with XEmacs. This provides MIME (Multipurpose Internet Mail Extensions) support for Mail and News. The primary author is Morioka Tomohiko. -- Japanese input can also be input using the `canna' input method. This support was contributed by Morioka Tomohiko. Setting up canna usually requires more user effort (and better knowledge of Japanese!) than XIM, but provides a better-integrated input method. -- A mini-tutorial on using Mule: -- Every time data passes between XEmacs and the rest of the environment, via file or process input or output, XEmacs must convert between its internal multi-character representation and the external representation (`coding system'). Many difficulties with Mule are related to controlling these coding system conversions. -- file-coding-system, file-coding-system-for-read, overriding-file-coding-system, and file-coding-system-alist are used to determine the coding systems used on file input and output. -- For each process, (set-process-input-coding-system) and (set-process-output-coding-system) determine the coding system used for I/O from the process. -- Many other things are encoded using pathname-coding-system: -- file and directory names -- window manager properties: window title, icon name -- process names and process arguments -- XIM input. -- In many cases, you will want to have the same values for all the above variables in many cases. For example, in a Japanese environment, you will want to use the 'euc-japan coding system consistently, except when running certain processes that do byte-oriented, rather than character-oriented I/O, such as gzip, or when processing Mail or News, where ISO2022-based coding systems are the norm, since they support multiple character sets. -- To add support for a new language or character set, start by trying to copy code in japanese-hooks.el. -- The traditional pre-Mule data conversion is equivalent to the 'binary coding system under Mule. In this case all characters are treated as iso8859-1 (i.e. characters for English + Western European languages). -- many fileio-related commands such as find-file and write-file take an extra argument, coding-system, which specifies the encoding to be used with the file on disk. For example, here is a command that converts from the Japanese EUC to ISO2022 format: xemacs -batch -eval '(progn (find-file "locale-start.el.euc" (quote euc-japan)) (write-file "locale-start.el" nil (quote iso-2022-8-unix)))' Interactively, you can be prompted for a coding system by providing a prefix argument to the fileio command. In particular, C-u C-x C-f is a useful sequence to edit a file using a particular coding system. -- In an Asian locale (i.e. if $LANG is set to ja, ko, or zh), XEmacs automatically sets up a language environment assuming that the operating system encodes information in the national version of EUC, which supports English and the national language, but typically no other character sets. -- Command line processing should work much better now - no more order dependencies. -- Many many package upgraded (thanks go to countless maintainers): -- ediff 2.64 (Michael Kifer) -- Gnus 5.2.40 (Lars Magne Ingebrigtsen) -- w3 3.0.51 (Bill Perry) -- ilisp 5.8 (Chris McConnell, Ivan Vasquez, Marco Antoniotti, Rick Campbell) -- VM 5.97 (Kyle Jones) -- etags 11.78 (Francesco Potorti`) -- ksh-mode.el 2.9 -- vhdl-mode.el 2.73 (Rod Whitby) -- id-select.el (Bob Weiner) -- EDT/TPU emulation modes should work now for the first time. -- viper 2.92 (Michael Kifer) is now the `official' vi emulator for XEmacs. -- big-menubar should work much better now. -- mode-motion+.el 3.16 -- backup-dir 2.0 (Greg Klanderman) -- ps-print.el-3.05 (Jacques Duthen Prestataire) -- lazy-lock-1.15 (Simon Marshall) -- reporter 3.3 (Barry Warsaw) -- hm--html-menus 5.0 (Heiko Muenkel) -- cc-mode 4.322 (Barry Warsaw) -- elp 2.37 (Barry Warsaw) -- Many new packages have been added: -- m4-mode 1.8 (Andrew Csillag) -- crisp.el - crisp/brief emulation (Gary D. Foster) -- Johan Vroman's iso-acc.el has been ported to XEmacs by Alexandre Oliva -- psgml-1.01 (Lennart Staflin, James Clark) -- python-mode.el 2.83 (Barry Warsaw) -- vrml-mode.el (Ben Wing) -- enriched.el, face-menu.el (Boris Goldowsky, Michael Sperber) -- sh-script.el (Daniel Pfeiffer) -- decipher.el (Christopher J. Madsen) -- New function x-keysym-on-keyboard-p helps determine keyboard characteristics for key rebinding: x-keysym-on-keyboard-p: (KEYSYM &optional DEVICE) -- a built-in function. Return true if KEYSYM names a key on the keyboard of DEVICE. More precisely, return true if pressing a physical key on the keyboard of DEVICE without any modifier keys generates KEYSYM. Valid keysyms are listed in the files /usr/include/X11/keysymdef.h and in /usr/lib/X11/XKeysymDB, or whatever the equivalents are on your system. -- Installed info files are now compressed (support courtesy of Joseph J Nuspl) -- (load-average) works on Solaris, even if you're not root. Thanks to Hrvoje Niksic. -- OffiX drag-and-drop support added -- lots of syncing with 19.34 elisp files, most by Steven Baur * For older news and for alternate news (the ones dealing with XEmacs 19.15 and 19.16), see the file ONEWS. xemacs-21.4.22/etc/OONEWS0000644000175000017500000065434707265370777013017 0ustar acsacs-*- mode:outline; minor-mode:outl-mouse -*- C-c TAB This shows subheadings (if any) of current heading. C-c C-s Show _all_ the text and headings under current heading * Introduction ============== This file presents some general information about XEmacs. It is primarily about the evolution of XEmacs and its release history. There are five sections. Introduction................(this section) provides an introduction Using Outline Mode..........briefly explains how to use outline mode XEmacs Release Notes........detailed changes to this release Future Plans for XEmacs.....what's next The History of XEmacs.......some historical notes A Long List of Packages.....all the stuff in XEmacs What Changed................between versions and also FSF GNU Emacs New users should look at the next section on "Using Outline Mode". You will be more efficient when you can navigate quickly through this file. Users who want to know which capabilities have been introduced in this release should look at the "XEmacs Release Notes." Users interested in some of the details of how XEmacs differs from GNU Emacs should read the section "What Changed?". N.B. The term "FSF GNU Emacs" refers to any release of Emacs Version 19 from the Free Software Foundation's GNU Project. (We do not say just "GNU Emacs" because Richard M. Stallman ["RMS"] thinks that this term is too generic; although we sometimes say e.g. "GNU Emacs 19.30" to refer to a specific version of FSF GNU Emacs. The term "XEmacs" refers to this program or to its predecessors "Era", "Epoch", and "Lucid Emacs". The predecessor of all these program is called "Emacs 18". When no particular version is implied, "Emacs" will be used. * Using Outline Mode ==================== This file is in outline mode, a major mode for viewing (or editing) outlines. It allows you to make parts of the text temporarily invisible so that you can see just the overall structure of the outline. There are two ways of using outline mode: with keys or with menus. Using outline mode with menus is the simplest and is just as effective as using keystrokes. There are menus for outline mode on the menubar as well as in popup menus activated by pressing mouse button 3. Try the following to help you read this file. C-c C-q This hides everything but the very top level headings You can then move to an interesting section C-c TAB This shows subheadings (if any) of current heading. C-c C-s Show _all_ the text and headings under current heading C-c C-d Hide _all_ the text and headings under current heading It's then easy to navigate through the file alternating between showing, C-C C-s, and hiding, C-c C-d, the text. Also, use the "Show" and "Hide" menus displayed to get access to the same commands. You may at any time press `C-h m' to get a listing of the outline mode key bindings. * XEmacs Release Notes ====================== ** Major Differences Between 19.15 and 19.16 ============================================ Many bugs have been fixed. XEmacs 19.16 is a bug-fix release only. No new features have been added. -- shell-command did not respect its output-buffer argument. -- When using CVS in conjunction with frame-icon, an error would occur when a frame was iconified. -- dired did not properly protect its data structures during garbage collection. -- y-or-n-p-minibuf could crash XEmacs 19.15. -- overlay-lists did not always return a pair of lists. -- Starting with the -nw option did not prevent XEmacs 19.15 from attempting to connect to a tooltalk server. -- XEmacs 19.15 could not be built on a DUNIX4.0 system. -- appt.el did not respect the user's hooks. -- outline-mode did not work in a tty-only XEmacs 19.15. -- MD5 checksum generation did not work on a 64-bit machine. -- XEmacs 19.15 ignored the user's mail path. -- The rcompile package checked for ange-ftp instead of efs. -- vc-directory did not work. -- Sometimes clicking on a modeline did not advance to the next or previous buffer as it should have. -- The variable enable-local-variables was sometimes ignored. -- pending-del did not respect the user's hooks. -- CRiSP mode was synchronized with FSF emacs. -- The performance of font-lock was improved. -- There were numerous holes in the garbage collection. -- There were 2 minor bugs with using XEmacs 19.15 on a tty. -- XEmacs 19.15 ignored certain dead_key events. -- XEmacs 19.15 had minor fontification problems with java. -- mark-pop did not always restore the mark properly. -- smtpmail.el had a couple of minor bugs. -- telnet-mode did not always respond to the telnet prompt. -- gomoku was broken in XEmacs 19.15. -- recover-all files did not work in XEmacs 19.15. -- transient-mark-mode and skeleton.el did not work together. -- Footnotes were not properly formatted in info. -- Configuration of XEmacs 19.15 did not work on Sequent computers, because they do not have a working version of alloca. -- In XEmacs 19.15 it was impossible to compile with Lucid scrollbars without Motif. -- XEmacs 19.15 would erroneously report an internal error on certain types of minibuffer input. -- When using virtual screens with your X server, sometimes iconify-frame would cause XEmacs 19.15 to lose one of the frames. -- server-kill-buffer always returned nil. -- The :filter keyword on a menubar could crash XEmacs 19.15. -- psgml-mode did not respect the user's hooks. -- Many bugs in efs mode were fixed. -- sh-script.el could hang XEmacs. -- Options could not be saved after fonts were changed in XEmacs 19.15. -- read-from-string could not read "1.". -- dired was confused about where chown lives on Linux. -- Edebug did not work on floating point numbers. -- first-change-hook saved the wrong buffer, so unwinding the stack could result in the wrong buffer's being restored. -- pcl-cvs was incompatible with live-icon. -- save-buffer deactivated the zmacs region. -- When running a sub-process, if the standard error could not be opened, the error was reported incorectly. -- shell-command-on-region had a bogus test for the active region. -- get-frame-for-buffer ignored relevant properties. -- make-database did not correctly expand its filename argument. -- A few minor improvements were made to the optimizer in the byte-compiler. -- kill-region could get confused when the beginning of the region was after the end of the region. -- movemail was upgraded to the same version which shipped with XEmacs 20.2; this version understands Linux file locking. -- The regexp cache size was too small. -- The "save as" dialog was buggy. -- Minor bugs in sendmail mode. -- tm did not understand the png image format. -- set-text-properties only removed the first text property. -- add-log.el has been upgraded to the version supported by FSF emacs 20.1. -- When tags-loop-continue was called inappropriately, the wrong error message resulted. -- Frame creation was buggy, and could crash XEmacs. -- PNG support did not work on Linux. -- Asynchronous process output did not always work. -- x-compose.el did not support the degree sign or the grave keysym. -- mh-invisible-headers did not work. -- Creating a tty frame could crash XEmacs 19.15. -- detach-extent could crash XEmacs. -- The minibuffer could get the read-only attribute. -- When the mouse was in the right side of the frame, its position could be reported incorrectly. -- lib-complete didn't work with compressed files. -- getloadavg.c was brought into sync with the XEmacs 20.2 version. ** Major Differences Between 19.14 and 19.15 ============================================ Many bugs have been fixed. An effort has been made to eradicate all XEmacs crashes, although we are not quite done yet. The overall quality of XEmacs should be higher than any previous release. XEmacs now compiles with nary a warning with some compilers. User visible changes: -- EFS replaces ange-ftp for remote file manipulation capability. -- TM (Tools for Mime) now comes with XEmacs. This provides MIME (Multi-purpose Internet Multi-media Extensions?) support for Mail and News. The primary author is Morioka Tomohiko. -- There is a new way to customize faces and (some) variables. Try it with `M-x customize RET', or from the Options->Customize menu. Documented in . -- The AUC TeX environment for editing and running TeX is now bundled. (Per Abrahamsen.) Enable with (require 'tex-site) in your .emacs file. Documented in . -- New user option `init-face-from-resources'. If you don't set faces with X resources, you can speed up the initialization of new faces by setting this to nil. -- `column.el' removed, use `column-number-mode' instead. -- Command line processing should work much better now - no more order dependencies. -- html mode now defaults to using HTML-3.2 -- VM now has a native MIME mode -- The traditional time.el package now has optional modeline graphics -- The XEmacs Logo has been changed courtesy of Jens Lautenbacher -- Default background changed to gray80 -- The XEmacs build procedure has been changed to make it easier than ever to include new packages to be dumped with the binary -- cc-mode is no longer auto-loaded. (require 'cc-mode) is now needed before you customize cc-mode in your .emacs. -- blink-cursor-mode is somewhat more useable now that the cursor stops blinking during keyboard activity. -- Dired is now part of efs and went from version 6.X to 7.9. Keybindings have been synced with FSF Emacs, there are more menus and items in menus are sometimes grouped differently. Any personnal customization to dired will probably have to be checked. If you are a 19.14 user and use its dired a lot, expect to get mad at 'c', 'r' and '^' keybindings." ** New Packages ------------ Noteworthy new packages: redo igrep uniquify auctex -- Many new packages have been added: *** auctex (Per Abrahamsen) *** customize (Per Abrahamsen)) *** m4-mode 1.8 (Andrew Csillag) *** crisp.el - crisp/brief emulation (Gary D. Foster) Minor mode emulation for Borland's Brief/Crisp editor *** Johan Vroman's iso-acc.el has been ported to XEmacs by Alexandre Oliva *** psgml-1.01 (Lennart Staflin, James Clark) *** python-mode.el 2.90 (Barry Warsaw) *** vrml-mode.el (Ben Wing) *** enriched.el, face-menu.el (Boris Goldowsky, Michael Sperber) *** sh-script.el (Daniel Pfeiffer) *** decipher.el (Christopher J. Madsen) *** mic-paren.el (Mikael Sjödin) *** xrdb-mode.el 1.21 (Barry Warsaw) *** redo.el 1.01 (Kyle Jones) *** edmacro.el (ported by Hrvoje Niksic) *** verilog-mode.el (Michael McNamara) *** webjump.el-1.4 (Neil W. Van Dyke) *** overlay.el (Joseph Nuspl support for Emacs overlay API) *** browse-cltl2.el 1.1 (Holger Schauer) *** mine.el 1.17 (Jacques Duthen) *** igrep.el 2.56 (Kevin Rodgers) *** speedbar.el (Eric Ludlam) *** frame-icon.el (Michael Lamoureux) *** winmgr-mode.el (David Konerding, Stefan Strobel & Barry Warsaw) *** whitespace-mode.el (Heiko Muenkel) *** detached-minibuf.el (Alvin Shelton) ** Updated Packages ------------ Most packages have been updated to the latest available versions. (thanks go to countless maintainers): *** ediff 2.64 (Michael Kifer) *** Gnus Gnus 5.4.36 (Lars Magne Ingebrigtsen) **** nntp.el has been totally rewritten in an asynchronous fashion. **** Article prefetching functionality has been moved up into Gnus. **** Scoring can now be performed with logical operators like `and', `or', `not', and parent redirection. **** Article washing status can be displayed in the article mode line. **** gnus.el has been split into many smaller files. **** Suppression of duplicate articles based on Message-ID. (setq gnus-suppress-duplicates t) **** New variables for specifying what score and adapt files are to be considered home score and adapt files. See `gnus-home-score-file' and `gnus-home-adapt-files'. **** Groups can inherit group parameters from parent topics. **** Article editing has been revamped and is now usable. **** Signatures can be recognized in more intelligent fashions. See `gnus-signature-separator' and `gnus-signature-limit'. **** Summary pick mode has been made to look more nn-like. Line numbers are displayed and the `.' command can be used to pick articles. **** Commands for moving the .newsrc.eld from one server to another have been added. `M-x gnus-change-server' **** A way to specify that "uninteresting" fields be suppressed when generating lines in buffers. **** Several commands in the group buffer can be undone with `M-C-_'. **** Scoring can be done on words using the new score type `w'. **** Adaptive scoring can be done on a Subject word-by-word basis: (setq gnus-use-adaptive-scoring '(word)) **** Scores can be decayed. (setq gnus-decay-scores t) **** Scoring can be performed using a regexp on the Date header. The Date is normalized to compact ISO 8601 format first. **** A new command has been added to remove all data on articles from the native server. `M-x gnus-group-clear-data-on-native-groups' **** A new command for reading collections of documents (nndoc with nnvirtual on top) has been added -- `M-C-d'. **** Process mark sets can be pushed and popped. **** A new mail-to-news backend makes it possible to post even when the NNTP server doesn't allow posting. **** A new backend for reading searches from Web search engines (DejaNews, Alta Vista, InReference) has been added. Use the `G w' command in the group buffer to create such a group. **** Groups inside topics can now be sorted using the standard sorting functions, and each topic can be sorted independently. See the commands under the `T S' submap. **** Subsets of the groups can be sorted independently. See the commands under the `G P' submap. **** Cached articles can be pulled into the groups. Use the `Y c' command. **** Score files are now applied in a more reliable order. **** Reports on where mail messages end up can be generated. `M-x nnmail-split-history' **** More hooks and functions have been added to remove junk from incoming mail before saving the mail. See `nnmail-prepare-incoming-header-hook'. **** The nnml mail backend now understands compressed article files. *** w3 3.0.71 (Bill Perry) - Major upgrade to Emacs/W3, including - Much fuller stylesheet support - Tables support - Frames support - better asynchronous downloads - now uses the widget library for consistent look of form elements - Much much much faster *** ilisp 5.8 (Chris McConnell, Ivan Vasquez, Marco Antoniotti, Rick Campbell) *** VM 6.22 (Kyle Jones) *** etags 11.78 (Francesco Potorti`) *** ksh-mode.el 2.9 *** vhdl-mode.el 2.73 (Rod Whitby) *** id-select.el 1.4.5 (Bob Weiner) *** EDT/TPU emulation modes should work now for the first time. *** viper 2.93 (Michael Kifer) is now the `official' vi emulator for XEmacs. *** big-menubar should work much better now. *** mode-motion+.el 3.16 *** backup-dir 2.0 (Greg Klanderman) *** ps-print.el-3.05 (Jacques Duthen Prestataire) *** lazy-lock-1.16 (Simon Marshall) *** fast-lock.el 3.10.2 (Simon Marshall) *** reporter 3.3 (Barry Warsaw) *** hm--html-menus 5.4 (Heiko Muenkel) *** cc-mode 4.387 (Barry Warsaw) *** elp 2.37 (Barry Warsaw) *** itimer.el-1.05 (Kyle Jones) *** floating-toolbar.el-1.02 (Kyle Jones) *** balloon-help.el-1.05 (Kyle Jones) *** hyperbole-4.023 (Bob Weiner) *** cperl-mode-1.31+ *** OO-Browser 2.10 (Bob Weiner) ** Changes at Lisp level ------------ -- New `widget' library for inserting UI components in buffers. Documented in . -- New `custom' library for declaring user options and faces. Documented in . -- New function `make-empty-face'. Like `make-face', but doesn't query the resource database. -- New function x-keysym-on-keyboard-p helps determine keyboard characteristics for key rebinding: x-keysym-on-keyboard-p: (KEYSYM &optional DEVICE) -- a built-in function. Return true if KEYSYM names a key on the keyboard of DEVICE. More precisely, return true if pressing a physical key on the keyboard of DEVICE without any modifier keys generates KEYSYM. Valid keysyms are listed in the files /usr/include/X11/keysymdef.h and in /usr/lib/X11/XKeysymDB, or whatever the equivalents are on your system. -- Usage of keysyms of the form kp_0 is deprecated and one should use the Emacs compatible kp-0 instead. -- preceding-char and following-char have been obsoleted. Use the much safer and correct functions char-after and char-before instead. -- Many symbols present for compatibility with GNU Emacs no longer generate bytecompiler warning messages -- Installed info files are now compressed (support courtesy of Joseph J Nuspl) -- (load-average) works on Solaris, even if you're not root. Thanks to Hrvoje Niksic. -- OffiX drag-and-drop support added -- lots of syncing with 19.34 elisp files, most by Steven Baur -- M-: (eval-expression) is now enabled by default since it is much more difficult to type. -- new variables: signal-error-on-buffer-boundary * Future Plans for XEmacs ========================== This is the end of the line for XEmacs v19. No new development is planned on this source tree. XEmacs 20.1 will contain the functionality in 19.15, and development will continue with XEmacs 20.2. The major new `feature' planned in 20.2 will be the introduction of separable packages and the capability to download and use an XEmacs lite distribution. * The History of XEmacs ======================= This product is an extension of GNU Emacs, previously known to some as "Lucid Emacs" or "ERA". It was initially based on an early version of Emacs Version 19 from the Free Software Foundation and has since been kept up-to-date with recent versions of that product. It stems from a collaboration of Lucid, Inc. with SunSoft DevPro (a division of Sun Microsystems, Inc.; formerly called SunPro) and the University of Illinois. NOTE: Lucid, Inc. is currently out of business but development on XEmacs continues strong. Recently, Amdahl Corporation and INS Engineering have both contributed significantly to the development of XEmacs. * A Long List of Packages ======================= This section gives a detailed list of packages included with XEmacs. It's long! Of particular interest are: games, gnus, modes, packages, and utils. ** auctex - Super TeX *** auctex/auc-old.el This file contains an alternative keymapping, compatible with older versions of AUC TeX. You are strongly suggested to try the new keyboard layout, as we would like this file to go away eventually. *** auctex/bib-cite.el Commentary: This package is used in various TeX modes to display or edit references associated with \cite commands, or matching \ref and \label commands. *** auctex/font-latex.el Commentary: *** auctex/style/german.el Commentary: `german.sty' use `"' to give next character an umlaut. *** auctex/style/harvard.el Commentary: Harvard citation style is from Peter Williams available on the CTAN servers *** auctex/style/plfonts.el Commentary: `plfonts.sty' use `"' to make next character Polish. `plfonts.sty' L. Holenderski, IIUW, lhol@mimuw.edu.pl *** auctex/style/plhb.el Commentary: `plhb.sty' use `"' to make next character Polish. `plhb.sty' J. S. Bie\'n, IIUW, jsbien@mimuw.edu.pl ** bytecomp - Byte compile Emacs Lisp files *** bytecomp/byte-optimize.el Commentary: ======================================================================== "No matter how hard you try, you can't make a racehorse out of a pig. You can, however, make a faster pig." Or, to put it another way, the emacs byte compiler is a VW Bug. This code makes it be a VW Bug with fuel injection and a turbocharger... You're still not going to make it go faster than 70 mph, but it might be easier to get it there. *** bytecomp/bytecomp-runtime.el Commentary: interface to selectively inlining functions. This only happens when source-code optimization is turned on. *** bytecomp/bytecomp.el Commentary: The Emacs Lisp byte compiler. This crunches lisp source into a sort of p-code which takes up less space and can be interpreted faster. The user entry points are byte-compile-file and byte-recompile-directory. *** bytecomp/disass.el Commentary: The single entry point, `disassemble', disassembles a code object generated by the Emacs Lisp byte-compiler. This doesn't invert the compilation operation, not by a long shot, but it's useful for debugging. ** calendar - Calendars, diaries and appointments *** calendar/calendar.el Commentary: This collection of functions implements a calendar window. It generates a calendar for the current month, together with the previous and coming months, or for any other three-month period. The calendar can be scrolled forward and backward in the window to show months in the past or future; the cursor can move forward and backward by days, weeks, or months, making it possible, for instance, to jump to the date a specified number of days, weeks, or months from the date under the cursor. The user can display a list of holidays and other notable days for the period shown; the notable days can be marked on the calendar, if desired. The user can also specify that dates having corresponding diary entries (in a file that the user specifies) be marked; the diary entries for any date can be viewed in a separate window. The diary and the notable days can be viewed independently of the calendar. Dates can be translated from the (usual) Gregorian calendar to the day of the year/days remaining in year, to the ISO commercial calendar, to the Julian (old style) calendar, to the Hebrew calendar, to the Islamic calendar, to the French Revolutionary calendar, to the Mayan calendar, and to the astronomical (Julian) day number. When floating point is available, times of sunrise/sunset can be displayed, as can the phases of the moon. Appointment notification for diary entries is available. *** calendar/cal-dst.el Commentary: This collection of functions implements the features of calendar.el and holiday.el that deal with daylight savings time. *** calendar/cal-french.el Commentary: This collection of functions implements the features of calendar.el and diary.el that deal with the French Revolutionary calendar. *** calendar/cal-mayan.el Commentary: This collection of functions implements the features of calendar.el and diary.el that deal with the Mayan calendar. It was written jointly by *** calendar/cal-x.el Commentary: This collection of functions implements dedicated frames in x-windows for calendar.el. *** calendar/cal-xemacs.el Commentary: This collection of functions implements menu bar and popup menu support for calendar.el. *** calendar/diary-ins.el Commentary: This collection of functions implements the diary insertion features as described in calendar.el. *** calendar/solar.el Commentary: This collection of functions implements the features of calendar.el, diary.el, and holiday.el that deal with times of day, sunrise/sunset, and eqinoxes/solstices. ** cl - Common Lisp compatibility with Emacs Lisp *** cl/cl-compat.el Commentary: These are extensions to Emacs Lisp that provide a degree of Common Lisp compatibility, beyond what is already built-in in Emacs Lisp. ** comint - For running shells, telnet, rsh, gdb, dbx under Emacs *** comint/comint-xemacs.el Commentary: Declare customizable faces for comint outside the main code so it can be dumped with XEmacs. *** comint/comint.el Commentary: This file defines a general command-interpreter-in-a-buffer package (comint mode). The idea is that you can build specific process-in-a-buffer modes on top of comint mode -- e.g., lisp, shell, scheme, T, soar, .... This way, all these specific packages share a common base functionality, and a common set of bindings, which makes them easier to use (and saves code, implementation time, etc., etc.). Several packages are already defined using comint mode: - shell.el defines a shell-in-a-buffer mode. - cmulisp.el defines a simple lisp-in-a-buffer mode. - The file cmuscheme.el defines a scheme-in-a-buffer mode. - The file tea.el tunes scheme and inferior-scheme modes for T. - The file soar.el tunes lisp and inferior-lisp modes for Soar. - cmutex.el defines tex and latex modes that invoke tex, latex, bibtex, previewers, and printers from within emacs. - background.el allows csh-like job control inside emacs. *** comint/gdb.el Commentary: A facility is provided for the simultaneous display of the source code in one window, while using gdb to step through a function in the other. A small arrow in the source window, indicates the current line. *** comint/gud.el Commentary: *** comint/history.el Commentary: suggested generic history stuff -- tale This is intended to provided easy access to a list of elements being kept as a history ring. *** comint/inf-lisp.el Commentary: This file defines a a lisp-in-a-buffer package (inferior-lisp mode) built on top of comint mode. This version is more featureful, robust, and uniform than the Emacs 18 version. The key bindings are also more compatible with the bindings of Hemlock and Zwei (the Lisp Machine emacs). *** comint/kermit.el Commentary: I'm not sure, but I think somebody asked about running kermit under shell mode a while ago. Anyway, here is some code that I find useful. The result is that I can log onto machines with primitive operating systems (VMS and ATT system V :-), and still have the features of shell-mode available for command history, etc. It's also handy to be able to run a file transfer in an emacs window. The transfer is in the "background", but you can also monitor or stop it easily. *** comint/rlogin.el Commentary: Support for remote logins using `rlogin'. This program is layered on top of shell.el; the code here only accounts for the variations needed to handle a remote process, e.g. directory tracking and the sending of some special characters. *** comint/shell.el Commentary: This file defines a a shell-in-a-buffer package (shell mode) built on top of comint mode. This is actually cmushell with things renamed to replace its counterpart in Emacs 18. cmushell is more featureful, robust, and uniform than the Emacs 18 version. *** comint/telnet.el Commentary: This mode is intended to be used for telnet or rsh to a remode host; `telnet' and `rsh' are the two entry points. Multiple telnet or rsh sessions are supported. ** custom - Allow's user to customize Emacs *** custom/custom.el Commentary: This file only contain the code needed to declare and initialize user options. The code to customize options is autoloaded from `cus-edit.el'. The code implementing face declarations is in `cus-face.el' ** edebug - Emacs Lisp debugger *** edebug/cl-read.el Commentary: Please send bugs and comments to the author. This package replaces the standard Emacs Lisp reader (implemented as a set of built-in Lisp function in C) by a flexible and customizable Common Lisp like one (implemented entirely in Emacs Lisp). During reading of Emacs Lisp source files, it is about 40% slower than the built-in reader, but there is no difference in loading byte compiled files - they don't contain any syntactic sugar and are loaded with the built in subroutine `load'. ** ediff - Compare and merge files with graphical difference display *** ediff/ediff.el Commentary: Never read that diff output again! Apply patch interactively! Merge with ease! This package provides a convenient way of simultaneous browsing through the differences between a pair (or a triple) of files or buffers. The files being compared, file-A, file-B, and file-C (if applicable) are shown in separate windows (side by side, one above the another, or in separate frames), and the differences are highlighted as you step through them. You can also copy difference regions from one buffer to another (and recover old differences if you change your mind). Ediff also supports merging operations on files and buffers, including merging using ancestor versions. Both comparison and merging operations can be performed on directories, i.e., by pairwise comparison of files in those directories. ** efs - Remote file access (replaces ange-ftp) See online manual. ** electric - The "electric" commands; these implement temporary windows for help, list-buffers, etc. *** electric/ehelp.el Commentary: This package provides a pre-packaged `Electric Help Mode' for browsing on-line help screens. There is one entry point, `with-electric-help'; all you have to give it is a no-argument function that generates the actual text of the help into the current buffer. ** emulators - Various emulations: mocklisp, teco, TPU/EDT, WordStar *** emulators/mlconvert.el Commentary: This package converts Mocklisp code written under a Gosling or UniPress Emacs for use with GNU Emacs. The translated code will require runtime support from the mlsupport.el equivalent. *** emulators/mlsupport.el Commentary: This package provides equivalents of certain primitives from Gosling Emacs (including the commercial UniPress versions). These have an ml- prefix to distinguish them from native GNU Emacs functions with similar names. The package mlconvert.el translates Mocklisp code to use these names. *** emulators/teco.el Commentary: This code has been tested some, but no doubt contains a zillion bugs. You have been warned. Written by Dale R. Worley based on a C implementation by Matt Fichtenbaum. Please send comments, bug fixes, enhancements, etc. to drw@math.mit.edu. *** emulators/tpu-edt.el Commentary: %% TPU-edt -- Emacs emulating TPU emulating EDT %% Introduction TPU-edt emulates the popular DEC VMS editor EDT (actually, it emulates DEC TPU's EDT emulation, hence the name TPU-edt). *** emulators/tpu-extras.el Commentary: Use the functions defined here to customize TPU-edt to your tastes by setting scroll margins and/or turning on free cursor mode. Here's an example for your .emacs file. *** emulators/ws-mode.el Commentary: This emulates WordStar, with a major mode. ** energize - Interface to now-defunct Lucid's C/C++ integrated environment XEmacs (nee Lucid Emacs) saw birth explicitly to serve Energize. ** eos - SPARCworks ** eterm - Full terminal emulation under Emacs *** eterm/term.el Commentary: This file defines a general command-interpreter-in-a-buffer package (term mode). The idea is that you can build specific process-in-a-buffer modes on top of term mode -- e.g., lisp, shell, scheme, T, soar, .... This way, all these specific packages share a common base functionality, and a common set of bindings, which makes them easier to use (and saves code, implementation time, etc., etc.). *** eterm/tgud.el Commentary: The ancestral gdb.el was by W. Schelter It was later rewritten by rms. Some ideas were due to Masanobu. Grand Unification (sdb/dbx support) by Eric S. Raymond The overloading code was then rewritten by Barry Warsaw , who also hacked the mode to use comint.el. Shane Hartman added support for xdb (HPUX debugger). Rick Sladkey wrote the GDB command completion code. Dave Love added the IRIX kluge and re-implemented the Mips-ish variant. Then hacked by Per Bothner to use term.el. *** eterm/tshell.el Commentary: This file defines a a shell-in-a-buffer package (shell mode) built on top of term mode. This is actually cmushell with things renamed to replace its counterpart in Emacs 18. cmushell is more featureful, robust, and uniform than the Emacs 18 version. ** games - blackbox, mines, decipher, doctor, ... *** games/blackbox.el Commentary: The object of the game is to find four hidden balls by shooting rays into the black box. There are four possibilities: 1) the ray will pass thru the box undisturbed, 2) it will hit a ball and be absorbed, 3) it will be deflected and exit the box, or 4) be deflected immediately, not even being allowed entry into the box. *** games/conx.el Commentary: conx.el: Yet Another Dissociator. Select a buffer with a lot of text in it. Say M-x conx-buffer or M-x conx-region. Repeat on as many other bodies of text as you like. M-x conx will use the word-frequency tree the above generated to produce random sentences in a popped-up buffer. It will pause at the end of each paragraph for two seconds; type ^G to stop it. *** games/cookie1.el Commentary: Support for random cookie fetches from phrase files, used for such critical applications as emulating Zippy the Pinhead and confounding the NSA Trunk Trawler. *** games/decipher.el Commentary: This package is designed to help you crack simple substitution ciphers where one letter stands for another. It works for ciphers with or without word divisions. (You must set the variable decipher-ignore-spaces for ciphers without word divisions.) *** games/dissociate.el Commentary: The single entry point, `dissociated-press', applies a travesty generator to the current buffer. The results can be quite amusing. *** games/doctor.el Commentary: The single entry point `doctor', simulates a Rogerian analyst using phrase-production techniques similar to the classic ELIZA demonstration of pseudo-AI. *** games/flame.el Commentary: "Flame" program. This has a chequered past. *** games/gomoku.el Gomoku is a game played between two players on a rectangular board. Each player, in turn, marks a free square of its choice. The winner is the first one to mark five contiguous squares in any direction (horizontally, vertically or diagonally). *** games/hanoi.el Commentary: Solves the Towers of Hanoi puzzle while-U-wait. The puzzle: Start with N rings, decreasing in sizes from bottom to top, stacked around a post. There are two other posts. Your mission, should you choose to accept it, is to shift the pile, stacked in its original order, to another post. *** games/life.el Commentary: A demonstrator for John Horton Conway's "Life" cellular automaton in Emacs Lisp. Picks a random one of a set of interesting Life patterns and evolves it according to the familiar rules. *** games/mine.el Commentary: The object of this classical game is to locate the hidden mines. To do this, you hit the squares on the game board that do not contain mines, and you mark the squares that do contain mines. *** games/mpuz.el Commentary: When this package is loaded, `M-x mpuz' generates a random multiplication puzzle. This is a multiplication example in which each digit has been consistently replaced with some letter. Your job is to reconstruct the original digits. Type `?' while the mode is active for detailed help. *** games/spook.el Commentary: Just before sending mail, do M-x spook. A number of phrases will be inserted into your buffer, to help give your message that extra bit of attractiveness for automated keyword scanners. *** games/studly.el Commentary: Functions to studlycapsify a region, word, or buffer. Possibly the esoteric significance of studlycapsification escapes you; that is, you suffer from autostudlycapsifibogotification. Too bad. *** games/yow.el Commentary: Important pinheadery for GNU Emacs. See cookie1.el for implementation. Note --- the `n' argument of yow from the 18.xx implementation is no longer; we only support *random* random access now. ** gnus - The ultimate News and Mail reader See online manual *** gnus/gnus-audio.el Commentary: This file provides access to sound effects in Gnus. Prerelease: This file is partially stripped to support earcons.el You can safely ignore most of it until Red Gnus. **Evil Laugh** *** gnus/gnus-gl.el Commentary: *** gnus/gnus-undo.el Commentary: This package allows arbitrary undoing in Gnus buffers. As all the Gnus buffers aren't very text-oriented (what is in the buffers is just some random representation of the actual data), normal Emacs undoing doesn't work at all for Gnus. *** gnus/mailheader.el Commentary: This package provides an abstraction to RFC822-style messages, used in mail news, and some other systems. The simple syntactic rules for such headers, such as quoting and line folding, are routinely reimplemented in many individual packages. This package removes the need for this redundancy by representing message headers as association lists, offering functions to extract the set of headers from a message, to parse individual headers, to merge sets of headers, and to format a set of headers. *** gnus/message.el Commentary: This mode provides mail-sending facilities from within Emacs. It consists mainly of large chunks of code from the sendmail.el, gnus-msg.el and rnewspost.el files. *** gnus/nnheader.el Commentary: These macros may look very much like the ones in GNUS 4.1. They are, in a way, but you should note that the indices they use have been changed from the internal GNUS format to the NOV format. The makes it possible to read headers from XOVER much faster. ** hm--html-menus - Menus and popups for writing/viewing html documents ** hyperbole - Personal database ** ilisp - A comint-based package for interacting with inferior lisp processes. ** iso - Implement various ISO character standards *** iso/iso-acc.el Commentary: Function `iso-accents-mode' activates a minor mode in which typewriter "dead keys" are emulated. The purpose of this emulation is to provide a simple means for inserting accented characters according to the ISO-8859-1 character set. *** iso/iso-ascii.el Commentary: This code sets up to display ISO 8859/1 characters on plain ASCII terminals. The display strings for the characters are more-or-less based on TeX. *** iso/iso-cvt.el Commentary: This lisp code serves two purposes, both of which involve the translation of various conventions for representing European character sets to ISO 8859-1. ** mailcrypt - Encrypting/decrypting of mail messages ** mel - MIME encoding library (see also TM) ** mh-e - Emacs interface to MH mail reader *** mh-e/mh-e.el Commentary: mh-e is an Emacs interface to the MH mail system. ** modes - How to edit files: Ada, asm, awk, bib, cperl, eiffel, ... *** modes/arc-mode.el Commentary: NAMING: "arc" is short for "archive" and does not refer specifically to files whose name end in ".arc" ARCHIVE TYPES: Currently only the archives below are handled, but the structure for handling just about anything is in place. Arc Lzh Zip Zoo -------------------------------- View listing Intern Intern Intern Intern Extract member Y Y Y Y Save changed member Y Y Y Y Add new member N N N N Delete member Y Y Y Y Rename member Y Y N N Chmod - Y Y - Chown - Y - - Chgrp - Y - - *** modes/asm-mode.el Commentary: This minor mode is based on text mode. It defines a private abbrev table that can be used to save abbrevs for assembler mnemonics. *** modes/auto-show.el Commentary: This file provides functions that automatically scroll the window horizontally when the point moves off the left or right side of the window. *** modes/awk-mode.el Commentary: Sets up C-mode with support for awk-style #-comments and a lightly hacked syntax table. *** modes/bib-mode.el Commentary: GNU Emacs code to help maintain databases compatible with (troff) refer and lookbib. The file bib-file should be set to your bibliography file. Keys are automagically inserted as you type, and appropriate keys are presented for various kinds of entries. *** modes/bibtex.el *** modes/cc-compat.el Commentary: Boring old c-mode.el (BOCM) is confusion and brain melt. cc-mode.el is clarity of thought and purity of chi. If you are still unwilling to accept enlightenment, this might help, or it may prolong your agony. *** modes/cc-guess.el Commentary: This file contains routines that help guess the cc-mode style in a particular region of C, C++, or Objective-C code. It is provided for example and experimentation only. It is not supported in anyway. Some folks have asked for a style guesser and the best way to show my thoughts on the subject is with this sample code. Feel free to improve upon it in anyway you'd like. Please send me the results. Note that style guessing is lossy! *** modes/cc-lobotomy.el Commentary: Every effort has been made to improve the performance of cc-mode. However, due to the nature of the C, C++, and Objective-C language definitions, a trade-off is often required between accuracy of construct recognition and speed. I believe it is always best to be correct, and that the mode is currently fast enough for most normal usage. Others disagree. I have no intention of including these hacks in the main distribution. When cc-mode version 5 comes out, it will include a rewritten indentation engine so that performance will be greatly improved automatically. This was not included in this release of version 4 so that Emacs 18 could still be supported. Note that this implies that cc-mode version 5 will *not* work on Emacs 18! *** modes/cc-mode.el Commentary: This package provides modes in GNU Emacs for editing C, C++, Objective-C, and Java code. It is intended to be a replacement for c-mode.el (a.k.a. BOCM -- Boring Old C-Mode), c++-mode.el, cplus-md.el, and cplus-md1.el, all of which are in some way ancestors of this file. A number of important improvements have been made, briefly: complete K&R C, ANSI C, `ARM' C++, Objective-C, and Java support with consistent indentation across all modes, more intuitive indentation controlling variables, compatibility across all known Emacsen, nice new features, and tons of bug fixes. This package is called "CC Mode" to distinguish it from its ancestors, but there is no cc-mode command. Usage and programming details are contained in an accompanying texinfo manual. *** modes/cl-indent.el Commentary: This package supplies a single entry point, common-lisp-indent-function, which performs indentation in the preferred style for Common Lisp code. *** modes/cperl-mode.el Can't find any Commentary section *** modes/eiffel3.el Can't find any Commentary section *** modes/enriched.el Can't find any Commentary section *** modes/executable.el Commentary: executable.el is used by certain major modes to insert a suitable #! line at the beginning of the file, if the file does not already have one. *** modes/f90.el Commentary: Smart mode for editing F90 programs in FREE FORMAT. Knows about continuation lines, named structured statements, and other new features in F90 including HPF (High Performance Fortran) structures. The basic feature is to provide an accurate indentation of F90 programs. In addition, there are many more features like automatic matching of all end statements, an auto-fill function to break long lines, a join-lines function which joins continued lines etc etc. To facilitate typing, a fairly complete list of abbreviations is provided. For example, `i is short-hand for integer (if abbrev-mode is on). *** modes/follow.el Commentary: `Follow mode' is a minor mode for Emacs 19 and XEmacs which combines windows into one tall virtual window. The feeling of a "virtual window" has been accomplished by the use of two major techniques: * The windows always displays adjacent sections of the buffer. This means that whenever one window is moved, all the others will follow. (Hence the name Follow Mode.) * Should the point (cursor) end up outside a window, another window displaying that point is selected, if possible. This makes it possible to walk between windows using normal cursor movement commands. *** modes/fortran.el Commentary: Fortran mode has been upgraded and is now maintained by Stephen A. Wood (saw@cebaf.gov). It now will use either fixed format continuation line markers (character in 6th column), or tab format continuation line style (digit after a TAB character.) A auto-fill mode has been added to automatically wrap fortran lines that get too long. We acknowledge many contributions and valuable suggestions by Lawrence R. Dodd, Ralf Fassel, Ralph Finch, Stephen Gildea, Dr. Anil Gokhale, Ulrich Mueller, Mark Neale, Eric Prestemon, Gary Sabot and Richard Stallman. *** modes/hideif.el Commentary: Hide-ifdef suppresses the display of code that the preprocessor wouldn't pass through. The support of constant expressions in #if lines is limited to identifiers, parens, and the operators: &&, ||, !, and "defined". Please extend this. *** modes/hideshow.el Commentary: This file provides `hs-minor-mode'. When active, six commands: hs-{hide,show}-{all,block}, hs-show-region and hs-minor-mode are available. They implement block hiding and showing. Blocks are defined in mode-specific way. In c-mode or c++-mode, they are simply curly braces, while in lisp-ish modes they are parens. Multi-line comments (c-mode) can also be hidden. The command M-x hs-minor-mode toggles the minor mode or sets it (similar to outline minor mode). See documentation for each command for more info. *** modes/icon.el Commentary: A major mode for editing the Icon programming language. *** modes/ksh-mode.el Description: sh, ksh, and bash script editing commands for emacs. This major mode assists shell script writers with indentation control and control structure construct matching in much the same fashion as other programming language modes. Invoke describe-mode for more information. *** modes/lisp-mnt.el Commentary: This minor mode adds some services to Emacs-Lisp editing mode. First, it knows about the header conventions for library packages. One entry point supports generating synopses from a library directory. Another can be used to check for missing headers in library files. *** modes/lisp-mode.el Commentary: The base major mode for editing Lisp code (used also for Emacs Lisp). This mode is documented in the Emacs manual *** modes/m4-mode.el Commentary: A smart editing mode for m4 macro definitions. It seems to have most of the syntax right (sexp motion commands work, but function motion commands don't). It also sets the font-lock syntax stuff for colorization *** modes/mail-abbrevs.el Can't find any Commentary section *** modes/make-mode.el Commentary: A major mode for editing makefiles. The mode knows about Makefile syntax and defines M-n and M-p to move to next and previous productions. *** modes/modula2.el Commentary: A major mode for editing Modula-2 code. It provides convenient abbrevs for Modula-2 keywords, knows about the standard layout rules, and supports a native compile command. *** modes/nroff-mode.el Commentary: This package is a major mode for editing nroff source code. It knows about various nroff constructs, ms, mm, and me macros, and will fill and indent paragraphs properly in their presence. It also includes a command to count text lines (excluding nroff constructs), a command to center a line, and movement commands that know how to skip macros. *** modes/old-c-mode.el Commentary: A smart editing mode for C code. It knows a lot about C syntax and tries to position the cursor according to C layout conventions. You can change the details of the layout style with option variables. Load it and do M-x describe-mode for details. *** modes/outl-mouse.el Can't find any Commentary section *** modes/outline.el Commentary: This package is a major mode for editing outline-format documents. An outline can be `abstracted' to show headers at any given level, with all stuff below hidden. See the Emacs manual for details. *** modes/pascal.el Emacs should enter Pascal mode when you find a Pascal source file. When you have entered Pascal mode, you may get more info by pressing C-h m. You may also get online help describing various functions by: C-h f *** modes/perl-mode.el *** modes/picture.el Commentary: This code provides the picture-mode commands documented in the Emacs manual. The screen is treated as a semi-infinite quarter-plane with support for rectangle operations and `etch-a-sketch' character insertion in any of eight directions. *** modes/postscript.el Can't find any Commentary section modes/prolog.el Commentary: This package provides a major mode for editing Prolog. It knows about Prolog syntax and comments, and can send regions to an inferior Prolog interpreter process. *** modes/python-mode.el Commentary: This is a major mode for editing Python programs. It was developed by Tim Peters after an original idea by Michael A. Guravage. Tim subsequently left the net; in 1995, Barry Warsaw inherited the mode and is the current maintainer. *** modes/rexx-mode.el Can't find any Commentary section *** modes/rsz-minibuf.el Commentary: This package allows the entire contents (or as much as possible) of the minibuffer to be visible at once when typing. As the end of a line is reached, the minibuffer will resize itself. When the user is done typing, the minibuffer will return to its original size. *** modes/scheme.el Commentary: Adapted from Lisp mode by Bill Rozas, jinx@prep. Initially a query replace of Lisp mode, except for the indentation of special forms. Probably the code should be merged at some point so that there is sharing between both libraries. *** modes/scribe.el Can't find any Commentary section *** modes/sendmail.el Commentary: This mode provides mail-sending facilities from within Emacs. It is documented in the Emacs user's manual. *** modes/sh-script.el Commentary: Major mode for editing shell scripts. Bourne, C and rc shells as well as various derivatives are supported and easily derived from. Structured statements can be inserted with one command or abbrev. Completion is available for filenames, variables known from the script, the shell and the environment as well as commands. *** modes/simula.el Commentary: A major mode for editing the Simula language. It knows about Simula syntax and standard indentation commands. It also provides convenient abbrevs for Simula keywords. *** modes/tcl.el Commentary: Major mode for editing Tcl *** modes/texinfo.el Can't find any Commentary section *** modes/text-mode.el Commentary: This package provides the fundamental text mode documented in the Emacs user's manual. *** modes/two-column.el Can't find any Commentary section *** modes/verilog-mode.el Commentary: A major mode for editing Verilog HDL source code. When you have entered Verilog mode, you may get more info by pressing C-h m. You may also get online help describing various functions by: C-h f *** modes/view-less.el Commentary: This mode is for browsing files without changing them. Keybindings similar to those used by the less(1) program are used. *** modes/view.el Commentary: This package provides the `view' minor mode documented in the Emacs user's manual. XEmacs: We don't autoload this because we use `view-less' instead. *** modes/vrml-mode.el Commentary: Mostly bastardized from tcl.el. *** modes/whitespace-mode.el Commentary: This is a minor mode, which highlights whitespaces (blanks and tabs) with different faces, so that it is easier to distinguish between them. Toggle the mode with: M-x whitespace-mode or with: M-x whitespace-incremental-mode The second one should be used in big files. *** modes/winmgr-mode.el Commentary: This package is a major mode for editing window configuration files and also defines font-lock keywords for such files. *** modes/xpm-mode.el Can't find any Commentary section modes/xrdb-mode.el Can't find any Commentary section ** mu - Message Utilities library (part of the Tools for MIME). ** ns - NeXTstep ** oobr - Browser for Object Oriented languages *** oobr/br-c++-ft.el Can't find any Commentary section ** packages - Lot's of stuff: array, baloon help, version control, ... *** packages/add-log.el Commentary: This facility is documented in the Emacs Manual. *** packages/apropos.el Commentary: The ideas for this package were derived from the C code in src/keymap.c and elsewhere. The functions in this file should always be byte-compiled for speed. Someone should rewrite this in C (as part of src/keymap.c) for speed. *** packages/array.el Commentary: Commands for editing a buffer interpreted as a rectangular array or matrix of whitespace-separated strings. You specify the array dimensions and some other parameters at startup time. *** packages/auto-save.el Can't find any Commentary section packages/autoinsert.el Commentary: The following defines an association list for text to be automatically inserted when a new file is created, and a function which automatically inserts these files; the idea is to insert default text much as the mode is automatically set using auto-mode-alist. *** packages/avoid.el Commentary: For those who are annoyed by the mouse pointer obscuring text, this mode moves the mouse pointer - either just a little out of the way, or all the way to the corner of the frame. To use, load or evaluate this file and type M-x mouse-avoidance-mode . To set up permanently, put this file on your .emacs: *** packages/backup-dir.el Can't find any Commentary section *** packages/balloon-help.el Can't find any Commentary section *** packages/big-menubar.el Can't find any Commentary section *** packages/blink-cursor.el *** packages/blink-paren.el Can't find any Commentary section *** packages/bookmark.el Can't find any Commentary section *** packages/buff-menu.el Commentary: Edit, delete, or change attributes of all currently active Emacs buffers from a list summarizing their state. A good way to browse any special or scratch buffers you have loaded, since you can't find them by filename. The single entry point is `Buffer-menu-mode', normally bound to C-x C-b. *** packages/chistory.el Commentary: This really has nothing to do with list-command-history per se, but its a nice alternative to C-x ESC ESC (repeat-complex-command) and functions as a lister if given no pattern. It's not important enough to warrant a file of its own. *** packages/cmuscheme.el Commentary: This is a customisation of comint-mode (see comint.el) *** packages/crypt.el Commentary: NOTE: Apparently not being maintained by the author, who now uses jka-compr.el. --ben (1/26/96) Included patch (1/26/96) Code for handling all sorts of compressed and encrypted files.| *** packages/cu-edit-faces.el Can't find any Commentary section *** packages/dabbrev.el Commentary: The purpose with this package is to let you write just a few characters of words you've written earlier to be able to expand them. *** packages/desktop.el Commentary: Save the Desktop, i.e., - some global variables - the list of buffers with associated files. For each buffer also - the major mode - the default directory - the point - the mark & mark-active - buffer-read-only - some local variables *** packages/fast-lock.el Commentary: Lazy Lock mode is a Font Lock support mode. It makes visiting a file in Font Lock mode faster by restoring its face text properties from automatically saved associated Font Lock cache files. *** packages/font-lock.el Font-lock-mode is a minor mode that causes your comments to be displayed in one face, strings in another, reserved words in another, documentation strings in another, and so on. *** packages/func-menu.el Can't find any Commentary section *** packages/generic-sc.el Can't find any Commentary section *** packages/gnuserv.el Can't find any Commentary section *** packages/gopher.el Commentary: OPERATING INSTRUCTIONS To use, `M-x gopher'. To specify a different root server, use `C-u M-x gopher'. If you want to use bookmarks, set the variable gopher-support-bookmarks appropriately. *** packages/hexl.el Commentary: This package implements a major mode for editing binary files. It uses a program called hexl, supplied with the GNU Emacs distribution, that can filter a binary into an editable format or from the format back into binary. For full instructions, invoke `hexl-mode' on an empty buffer and do `M-x describe-mode'. *** packages/hyper-apropos.el Commentary: Rather than run apropos and print all the documentation at once, I find it easier to view a "table of contents" first, then get the details for symbols as you need them. *** packages/icomplete.el Commentary: Loading this package implements a more fine-grained minibuffer completion feedback scheme. Prospective completions are concisely indicated within the minibuffer itself, with each successive keystroke. *** packages/igrep.el Can't find any Commentary section *** packages/info.el Can't find any Commentary section *** packages/informat.el Can't find any Commentary section *** packages/ispell.el Commentary: *** packages/jka-compr.el Commentary: This package implements low-level support for reading, writing, and loading compressed files. It hooks into the low-level file I/O functions (including write-region and insert-file-contents) so that they automatically compress or uncompress a file if the file appears to need it (based on the extension of the file name). Packages like Rmail, VM, GNUS, and Info should be able to work with compressed files without modification. *** packages/lazy-lock.el Commentary: Purpose: To make visiting buffers in `font-lock-mode' faster by making fontification be demand-driven and stealthy. Fontification only occurs when, and where, necessary. *** packages/ledit.el Commentary: This is a major mode for editing Liszt. See etc/LEDIT for details. *** packages/lispm-fonts.el Can't find any Commentary section *** packages/lpr.el Commentary: Commands to send the region or a buffer your printer. Entry points are `lpr-buffer', `print-buffer', lpr-region', or `print-region'; option variables include `lpr-switches' and `lpr-command'. *** packages/makeinfo.el Commentary: The Texinfo mode `makeinfo' related commands are: *** packages/makesum.el Commentary: Displays a nice human-readable summary of all keybindings in a two-column format. *** packages/man.el Can't find any Commentary section *** packages/metamail.el Commentary: Note: Metamail does not have all options which is compatible with the environment variables. For that reason, matamail.el have to hack the environment variables. In addition, there is no way to display all header fields without extra informative body messages which are suppressed by "-q" option. The idea of using metamail to process MIME messages is from gnus-mime.el by Spike . *** packages/mic-paren.el Can't find any Commentary section *** packages/mime-compose.el Can't find any Commentary section *** packages/mode-motion+.el Can't find any Commentary section *** packages/netunam.el Commentary: Use the Remote File Access (RFA) facility of HP-UX from Emacs. *** packages/page-ext.el Commentary: You may use these commands to handle an address list or other small data base. *** packages/paren.el Commentary: Purpose of this package: This package highlights matching parens (or whole sexps) for easier editing of source code, particularly lisp source code. *** packages/pending-del.el Can't find any Commentary section *** packages/ps-print.el Commentary: This package provides printing of Emacs buffers on PostScript printers; the buffer's bold and italic text attributes are preserved in the printer output. Ps-print is intended for use with Emacs 19 or Lucid Emacs, together with a fontifying package such as font-lock or hilit. *** packages/rcompile.el Commentary: This package is for running a remote compilation and using emacs to parse the error messages. It works by rsh'ing the compilation to a remote host and parsing the output. If the file visited at the time remote-compile was called was loaded remotely (ange-ftp), the host and user name are obtained by the calling ange-ftp-ftp-name on the current directory. In this case the next-error command will also ange-ftp the files over. This is achieved automatically because the compilation-parse-errors function uses default-directory to build it's file names. If however the file visited was loaded locally, remote-compile prompts for a host and user and assumes the files mounted locally (otherwise, how was the visited file loaded). *** packages/recent-files.el Can't find any Commentary section *** packages/refbib.el Commentary: Use: from a buffer containing the refer-style bibliography, M-x r2b-convert-buffer Program will prompt for an output buffer name, and will log warnings during the conversion process in the buffer *Log*. *** packages/remote.el Can't find any Commentary section *** packages/reportmail.el Can't find any Commentary section *** packages/resume.el Commentary: The purpose of this library is to handle command line arguments when you resume an existing Emacs job. You can't get the benefit of this library by using the `emacs' command, since that always starts a new Emacs job. Instead you must use a command called `edit' which knows how to resume an existing Emacs job if you have one, or start a new Emacs job if you don't have one. To define the `edit' command, run the script etc/emacs.csh (if you use CSH), or etc/emacs.bash if you use BASH. You would normally do this in your login script. *** packages/saveconf.el Can't find any Commentary section *** packages/saveplace.el Commentary: Automatically save place in files, so that visiting them later (even during a different Emacs session) automatically moves point to the saved position, when the file is first found. Uses the value of buffer-local variable save-place to determine whether to save position or not. *** packages/sccs.el Can't find any Commentary section *** packages/scroll-in-place.el Can't find any Commentary section *** packages/server.el Commentary: This Lisp code is run in Emacs when it is to operate as a server for other processes. *** packages/shell-font.el Can't find any Commentary section *** packages/spell.el Commentary: This mode provides an Emacs interface to the UNIX spell(1) program. Entry points are `spell-buffer', `spell-word', `spell-region' and `spell-string'. These facilities are documented in the Emacs user's manual. *** packages/supercite.el Can't find any Commentary section *** packages/tar-mode.el Can't find any Commentary section *** packages/terminal.el Can't find any Commentary section *** packages/tex-latin1.el Can't find any Commentary section *** packages/texinfmt.el Can't find any Commentary section *** packages/texnfo-tex.el Can't find any Commentary section *** packages/texnfo-upd.el Commentary: *** packages/time-stamp.el Commentary: If you put a time stamp template anywhere in the first 8 lines of a file, it can be updated every time you save the file. See the top of time-stamp.el for a sample. The template looks like one of the following: Time-stamp: <> Time-stamp: " " The time stamp is written between the brackets or quotes, resulting in Time-stamp: <95/01/18 10:20:51 gildea> *** packages/time.el Commentary: Facilities to display current time/date and a new-mail indicator in the Emacs mode line. The single entry point is `display-time'. *** packages/uncompress.el Commentary: This package can be used to arrange for automatic uncompress of files packed with the UNIX compress(1) utility when they are visited. All that's necessary is to load it. This can conveniently be done from your .emacs file. *** packages/underline.el Commentary: This package deals with the primitive form of underlining consisting of prefixing each character with "_\^h". The entry point `underline-region' performs such underlining on a region. The entry point `ununderline-region' removes it. *** packages/upd-copyr.el Can't find any Commentary section *** packages/vc.el Commentary: This mode is fully documented in the Emacs user's manual. Supported version-control systems presently include SCCS, RCS, and CVS. The RCS lock-stealing code doesn't work right unless you use RCS 5.6.2 or newer. Currently (January 1994) that is only a beta test release. Even initial checkins will fail if your RCS version is so old that ci doesn't understand -t-; this has been known to happen to people running NExTSTEP 3.0. *** packages/webjump.el Change Log: *** packages/webster-ucb.el Can't find any Commentary section *** packages/webster.el Can't find any Commentary section *** packages/xscheme.el Can't find any Commentary section ** pcl-cvs - Front end to CVS (see also vc -- version control) *** pcl-cvs/cookie.el Commentary: Introduction ============ Cookie is a package that implements a connection between an dll (a doubly linked list) and the contents of a buffer. Possible uses are dired (have all files in a list, and show them), buffer-list, kom-prioritize (in the LysKOM elisp client) and others. pcl-cvs.el uses cookie.el. *** pcl-cvs/dll-debug.el Commentary: This is a plug-in replacement for dll.el. It is dreadfully slow, but it facilitates debugging. Don't trust the comments in this file too much. (provide 'dll) *** pcl-cvs/dll.el Commentary: A doubly linked list consists of one cons cell which holds the tag 'DL-LIST in the car cell and a pointer to a dummy node in the cdr cell. The doubly linked list is implemented as a circular list with the dummy node first and last. The dummy node is recognized by comparing it to the node which the cdr of the cons cell points to. *** pcl-cvs/elib-node.el Commentary: A node is implemented as an array with three elements, using (elt node 0) as the left pointer (elt node 1) as the right pointer (elt node 2) as the data *** pcl-cvs/pcl-cvs-startup.el Can't find any Commentary section *** pcl-cvs/pcl-cvs-xemacs.el Can't find any Commentary section *** pcl-cvs/pcl-cvs.el Can't find any Commentary section *** pcl-cvs/string.el Commentary: This file is part of the elisp library Elib. It implements simple generic string functions for use in other elisp code: replace regexps in strings, split strings on regexps. ** prim - Lots of XEmacs primitives (see Emacs-Lisp manual). *** prim/about.el Can't find any Commentary section *** prim/advocacy.el Can't find any Commentary section *** prim/auto-autoloads.el Can't find any Commentary section *** prim/backquote.el Can't find any Commentary section *** prim/buffer.el Can't find any Commentary section *** prim/case-table.el Can't find any Commentary section *** prim/cleantree.el Commentary: This code is derived from Gnus based on a suggestion by David Moore *** prim/cmdloop.el Can't find any Commentary section *** prim/cmdloop1.el Can't find any Commentary section *** prim/console.el Can't find any Commentary section *** prim/custom-load.el Can't find any Commentary section *** prim/debug.el Commentary: This is a major mode documented in the Emacs manual. *** prim/device.el Can't find any Commentary section *** prim/dialog.el Can't find any Commentary section *** prim/disp-table.el Can't find any Commentary section *** prim/env.el Commentary: UNIX processes inherit a list of name-to-string associations from their parents called their `environment'; these are commonly used to control program options. This package permits you to set environment variables to be passed to any sub-process run under XEmacs. *** prim/events.el Can't find any Commentary section *** prim/extents.el Can't find any Commentary section *** prim/faces.el Can't find any Commentary section *** prim/files.el Commentary: Defines most of XEmacs's file- and directory-handling functions, including basic file visiting, backup generation, link handling, ITS-id version control, load- and write-hook handling, and the like. *** prim/fill.el Commentary: All the commands for filling text. These are documented in the XEmacs Reference Manual. *** prim/float-sup.el Can't find any Commentary section *** prim/format.el Commentary: This file defines a unified mechanism for saving & loading files stored in different formats. `format-alist' contains information that directs Emacs to call an encoding or decoding function when reading or writing files that match certain conditions. *** prim/frame.el Can't find any Commentary section *** prim/glyphs.el Can't find any Commentary section *** prim/gui.el Can't find any Commentary section *** prim/help.el Commentary: This code implements XEmacs's on-line help system, the one invoked by `M-x help-for-help'. *** prim/inc-vers.el Can't find any Commentary section *** prim/indent.el Commentary: Commands for making and changing indentation in text. These are described in the XEmacs Reference Manual. *** prim/isearch-mode.el Can't find any Commentary section *** prim/itimer-autosave.el Commentary: itimer-driven auto-saves *** prim/itimer.el Can't find any Commentary section *** prim/keydefs.el Can't find any Commentary section *** prim/keymap.el Can't find any Commentary section *** prim/lisp.el Commentary: Lisp editing commands to go with Lisp major mode. *** prim/loaddefs.el Commentary: You should never need to write autoloads by hand and put them here. It is no longer necessary. Instead use autoload.el to maintain them for you. Just insert ";;;###autoload" before defuns or defmacros you want to be autoloaded, or other forms you want copied into loaddefs.el (defvars, key definitions, etc.). *** prim/loadup-el.el Can't find any Commentary section *** prim/loadup.el Commentary: This is loaded into a bare Emacs to make a dumpable one. *** prim/macros.el Commentary: Extension commands for keyboard macros. These permit you to assign a name to the last-defined keyboard macro, expand and insert the lisp corresponding to a macro, query the user from within a macro, or apply a macro to each line in the reason. This file is largely superseded by edmacro.el as of XEmacs 20.1. -sb *** prim/menubar.el Can't find any Commentary section *** prim/minibuf.el Commentary: Written by Richard Mlynarik 2-Oct-92 *** prim/misc.el Can't find any Commentary section *** prim/mode-motion.el Can't find any Commentary section *** prim/modeline.el Can't find any Commentary section *** prim/mouse.el Can't find any Commentary section *** prim/novice.el Commentary: This mode provides a hook which is, by default, attached to various putatively dangerous commands in a (probably futile) attempt to prevent lusers from shooting themselves in the feet. *** prim/objects.el Can't find any Commentary section *** prim/obsolete.el Can't find any Commentary section *** prim/options.el Commentary: This code provides functions to list and edit the values of all global option variables known to loaded Emacs Lisp code. There are two entry points, `list-options' and `edit' options'. The latter enters a major mode specifically for editing option values. Do `M-x describe-mode' in that context for more details. *** prim/overlay.el Can't find any Commentary section *** prim/page.el Commentary: This code provides the page-oriented movement and selection commands documented in the XEmacs Reference Manual. *** prim/paragraphs.el Commentary: This package provides the paragraph-oriented commands documented in the XEmacs Reference Manual. *** prim/process.el Can't find any Commentary section *** prim/profile.el Can't find any Commentary section *** prim/rect.el Commentary: This package provides the operations on rectangles that are ocumented in the XEmacs Reference Manual. *** prim/register.el Commentary: This package of functions emulates and somewhat extends the venerable TECO's `register' feature, which permits you to save various useful pieces of buffer state to named variables. The entry points are documented in the XEmacs Reference Manual. *** prim/replace.el Commentary: This package supplies the string and regular-expression replace functions documented in the XEmacs Reference Manual. All the gettext calls are for XEmacs I18N3 message catalog support. *** prim/reposition.el Commentary: Reposition-window makes an entire function definition or comment visible, or, if it is already visible, places it at the top of the window; additional invocations toggle the visibility of comments preceding the code. For the gory details, see the documentation for reposition-window; rather than reading that, you may just want to play with it. This tries pretty hard to do the recentering correctly; the precise action depends on what the buffer looks like. If you find a situation where it doesn't behave well, let me know. This function is modeled after one of the same name in ZMACS, but the code is all-new and the behavior in some situations differs. *** prim/scrollbar.el Can't find any Commentary section *** prim/simple.el Commentary: A grab-bag of basic XEmacs commands not specifically related to some major mode or to file-handling. *** prim/sort.el Commentary: This package provides the sorting facilities documented in the XEmacs Reference Manual. *** prim/sound.el Can't find any Commentary section *** prim/specifier.el Can't find any Commentary section *** prim/startup.el Can't find any Commentary section *** prim/subr.el Commentary: There's not a whole lot in common now with the FSF version, be wary when applying differences. I've left in a number of lines of commentary just to give diff(1) something to synch itself with to provide useful context diffs. -sb *** prim/symbols.el Commentary: The idea behind magic variables is that you can specify arbitrary behavior to happen when setting or retrieving a variable's value. The purpose of this is to make it possible to cleanly provide support for obsolete variables (e.g. unread-command-event, which is obsolete for unread-command-events) and variable compatibility (e.g. suggest-key-bindings, the FSF equivalent of teach-extended-commands-p and teach-extended-commands-timeout). *** prim/syntax.el Can't find any Commentary section *** prim/tabify.el Commentary: Commands to optimize spaces to tabs or expand tabs to spaces in a region (`tabify' and `untabify'). The variable tab-width does the obvious. *** prim/toolbar.el Can't find any Commentary section *** prim/undo-stack.el Can't find any Commentary section *** prim/update-elc.el Can't find any Commentary section *** prim/userlock.el Commentary: This file is autoloaded to handle certain conditions detected by the file-locking code within XEmacs. The two entry points are `ask-user-about-lock' and `ask-user-about-supersession-threat'. *** prim/window.el Can't find any Commentary section ** psgml - SGML/HTML editing mode *** psgml/iso-sgml.el Can't find any Commentary section *** psgml/psgml-api.el Commentary: Provides some extra functions for the API to PSGML. *** psgml/psgml-charent.el Commentary: Functions to convert character entities into displayable characters and displayable characters back into character entities. *** psgml/psgml-debug.el Can't find any Commentary section *** psgml/psgml-dtd.el Commentary: Part of major mode for editing the SGML document-markup language. *** psgml/psgml-edit.el Commentary: Part of major mode for editing the SGML document-markup language. *** psgml/psgml-fs.el Commentary: The function `style-format' formats the SGML-file in the current buffer according to the style defined in the file `psgml-style.fs' (or the file given by the variable `fs-style'). To try it load this file and open the test file example.sgml. Then run the emacs command `M-x style-format'. The style file should contain a single Lisp list. The elements of this list, are them self lists, describe the style for an element type. The sublists begin with the generic identifier for the element types and the rest of the list are characteristic/value pairs. E.g. ("p" block t left 4 top 2) Defines the style for p-elements to be blocks with left margin 4 and at least to blank lines before the block. *** psgml/psgml-html.el Commentary: Parts were taken from html-helper-mode and from code by Alastair Burt. Feb 18 1997, Heiko Muenkel: Added the hook variable html-mode-hook. ; With that you can now use the hm--html-minor-mode together ; with this mode. For that you've to add the following line ; to your ~/.emacs: ; (add-hook 'html-mode-hook 'hm--html-minor-mode) *** psgml/psgml-info.el Commentary: This file is an addon to the PSGML package. This file contains some commands to print out information about the current DTD. *** psgml/psgml-other.el Commentary: Part of psgml.el. Code not compatible with XEmacs. *** psgml/psgml-parse.el Commentary: Part of major mode for editing the SGML document-markup language. *** psgml/psgml-xemacs.el Commentary: Part of psgml.el Menus for use with XEmacs *** psgml/psgml.el Commentary: Major mode for editing the SGML document-markup language. *** psgml/tempo.el Commentary: This file provides a simple way to define powerful templates, or macros, if you wish. It is mainly intended for, but not limited to, other programmers to be used for creating shortcuts for editing certain kind of documents. It was originally written to be used by a HTML editing mode written by Nelson Minar , and his html-helper-mode.el is probably the best example of how to use this program. ** rmail - Reading Mail (see also VM and GNUS) *** rmail/rmail-kill.el Commentary: *** rmail/rmail-xemacs.el Commentary: Right button pops up a menu of commands in Rmail and Rmail summary buffers. Middle button selects indicated mail message in Rmail summary buffer *** rmail/rmail.el Can't find any Commentary section *** rmail/rmailedit.el Can't find any Commentary section *** rmail/rmailkwd.el Can't find any Commentary section *** rmail/rmailmsc.el Can't find any Commentary section *** rmail/rmailout.el Can't find any Commentary section *** rmail/rmailsort.el Can't find any Commentary section *** rmail/rmailsum.el Commentary: Provided all commands from rmail-mode in rmail-summary-mode and made key bindings in both modes wholly compatible. *** rmail/undigest.el Commentary: See Internet RFC 934 *** rmail/unrmail.el Can't find any Commentary section ** sunpro - Additional code for interfacing with SunPro products. *** sunpro/sunpro-init.el Can't find any Commentary section *** sunpro/sunpro-keys.el Can't find any Commentary section *** sunpro/sunpro-load.el Can't find any Commentary section *** sunpro/sunpro-menubar.el Commentary: Creates the default SunPro menubars. *** sunpro/sunpro-sparcworks.el Commentary: Called from the SPARCworks Manager with the command: xemacs -q -l sunpro-sparcworks $SUNPRO_SWM_TT_ARGS $SUNPRO_SWM_GUI_ARGS ** term - Terminal specific initialization: vt100, wyse, ... *** term/AT386.el Commentary: Uses the Emacs 19 terminal initialization features --- won't work with 18. *** term/apollo.el Can't find any Commentary section *** term/bg-mouse.el Can't find any Commentary section *** term/bobcat.el Can't find any Commentary section *** term/internal.el Can't find any Commentary section *** term/keyswap.el Commentary: This package is meant to be called by other terminal packages. *** term/linux.el Can't find any Commentary section *** term/lk201.el Can't find any Commentary section *** term/news.el Commentary: Uses the Emacs 19 terminal initialization features --- won't work with 18. *** term/pc-win.el Can't find any Commentary section *** term/scoansi.el Can't find any Commentary section *** term/sun-mouse.el Commentary: *** term/sun.el Commentary: The function key sequences for the console have been converted for use with function-key-map, but the *tool stuff hasn't been touched. *** term/sup-mouse.el Can't find any Commentary section *** term/tty-init.el Commentary: *** term/tvi970.el Commentary: Uses the Emacs 19 terminal initialization features --- won't work with 18. *** term/vt-control.el Commentary: The functions contained in this file send various VT control codes to the terminal where emacs is running. The following functions are available. *** term/vt100-led.el Can't find any Commentary section *** term/vt100.el Commentary: Uses the Emacs 19 terminal initialization features --- won't work with 18. Handles all VT100 clones, including the Apollo terminal. Also handles the VT200 --- its PF- and arrow- keys are different, but all those are really set up by the terminal initialization code, which mines them out of termcap. This package is here to define the keypad comma, dash and period (which aren't in termcap's repertoire) and the function for changing from 80 to 132 columns & vv. *** term/vt102.el Can't find any Commentary section *** term/vt125.el Can't find any Commentary section *** term/vt200.el Can't find any Commentary section *** term/vt201.el Can't find any Commentary section *** term/vt220.el Can't find any Commentary section *** term/vt240.el Can't find any Commentary section *** term/vt300.el Can't find any Commentary section *** term/vt320.el Can't find any Commentary section *** term/vt400.el Can't find any Commentary section *** term/vt420.el Can't find any Commentary section *** term/win32-win.el Commentary: win32-win.el: this file is loaded from ../lisp/startup.el when it recognizes that win32 windows are to be used. Command line switches are parsed and those pertaining to win32 are processed and removed from the command line. The win32 display is opened and hooks are set for popping up the initial window. startup.el will then examine startup files, and eventually call the hooks which create the first window (s). *** term/wyse50.el Commentary: The Wyse50 is ergonomically wonderful, but its escape-sequence design sucks rocks. The left-arrow key emits a backspace (!) and the down-arrow a line feed (!!). Thus, you have to unbind some commonly-used Emacs keys to enable the arrows. *** term/xterm.el Can't find any Commentary section ** tl - Tiny Library (Part of the Tools for MIME). *** tl/bitmap.el Can't find any Commentary section *** tl/cless.el Can't find any Commentary section *** tl/emu-e19.el Can't find any Commentary section *** tl/emu-orig.el Can't find any Commentary section *** tl/emu-xemacs.el Can't find any Commentary section *** tl/emu.el Can't find any Commentary section *** tl/file-detect.el Can't find any Commentary section *** tl/filename.el Can't find any Commentary section *** tl/mu-cite.el Commentary: *** tl/mu-comment.el Commentary: type `C-c C-q' at the beginning of S-expression you want to comment out. *** tl/mu-replace.el Commentary: *** tl/range.el Can't find any Commentary section *** tl/richtext.el Can't find any Commentary section *** tl/std11-parse.el Can't find any Commentary section *** tl/std11.el Can't find any Commentary section *** tl/texi-util.el Can't find any Commentary section *** tl/tinyrich.el Can't find any Commentary section *** tl/tl-822.el Can't find any Commentary section *** tl/tl-atype.el Can't find any Commentary section *** tl/tl-list.el Can't find any Commentary section *** tl/tl-misc.el Can't find any Commentary section *** tl/tl-num.el Can't find any Commentary section *** tl/tl-seq.el Can't find any Commentary section *** tl/tl-str.el Can't find any Commentary section *** tl/tu-comment.el Commentary: *** tl/tu-replace.el Commentary: ** tm - Tools for MIME -- integrates in VM, RMAIL, GNUS *** tm/gnus-art-mime.el Can't find any Commentary section *** tm/gnus-charset.el Can't find any Commentary section *** tm/gnus-mime-old.el Can't find any Commentary section *** tm/gnus-mime.el Can't find any Commentary section *** tm/gnus-msg-mime.el Can't find any Commentary section *** tm/gnus-sum-mime.el Can't find any Commentary section *** tm/message-mime.el Can't find any Commentary section *** tm/mime-setup.el Can't find any Commentary section *** tm/sc-setup.el Can't find any Commentary section *** tm/signature.el Can't find any Commentary section *** tm/tm-bbdb.el Can't find any Commentary section *** tm/tm-def.el Can't find any Commentary section *** tm/tm-edit-mc.el Can't find any Commentary section *** tm/tm-edit.el Commentary: This is an Emacs minor mode for editing Internet multimedia messages formatted in MIME (RFC 2045, 2046, 2047, 2048 and 2049). All messages in this mode are composed in the tagged MIME format, that are described in the following examples. The messages composed in the tagged MIME format are automatically translated into a MIME compliant message when exiting the mode. *** tm/tm-ew-d.el Can't find any Commentary section *** tm/tm-ew-e.el Can't find any Commentary section *** tm/tm-file.el Can't find any Commentary section *** tm/tm-ftp.el Can't find any Commentary section *** tm/tm-gd3.el Can't find any Commentary section *** tm/tm-gnus.el Can't find any Commentary section *** tm/tm-gnus4.el Can't find any Commentary section *** tm/tm-gnus5.el Can't find any Commentary section *** tm/tm-html.el Can't find any Commentary section *** tm/tm-image.el Commentary: If you use this program with MULE, please install etl8x16-bitmap.bdf font included in tl package. *** tm/tm-latex.el Can't find any Commentary section *** tm/tm-mail.el Can't find any Commentary section *** tm/tm-mh-e.el Can't find any Commentary section *** tm/tm-orig.el Can't find any Commentary section *** tm/tm-parse.el Can't find any Commentary section *** tm/tm-partial.el Can't find any Commentary section *** tm/tm-pgp.el Commentary: This module is based on 2 drafts about PGP MIME integration: *** tm/tm-play.el Can't find any Commentary section *** tm/tm-rmail.el Can't find any Commentary section *** tm/tm-setup.el Can't find any Commentary section *** tm/tm-sgnus.el Can't find any Commentary section *** tm/tm-tar.el Can't find any Commentary section *** tm/tm-text.el Can't find any Commentary section *** tm/tm-view.el Can't find any Commentary section *** tm/tm-vm.el Commentary: Plese insert `(require 'tm-vm)' in your ~/.vm file. *** tm/tmh-comp.el Can't find any Commentary section ** tooltalk - Support for Tooltalk protocol *** tooltalk/tooltalk-init.el Can't find any Commentary section *** tooltalk/tooltalk-load.el Can't find any Commentary section *** tooltalk/tooltalk-macros.el Can't find any Commentary section *** tooltalk/tooltalk-util.el Can't find any Commentary section ** utils - Lots of stuff *** utils/abbrevlist.el Can't find any Commentary section *** utils/advice.el Commentary: This package implements a full-fledged Lisp-style advice mechanism for Emacs Lisp. Advice is a clean and efficient way to modify the behavior of Emacs Lisp functions without having to keep personal modified copies of such functions around. A great number of such modifications can be achieved by treating the original function as a black box and specifying a different execution environment for it with a piece of advice. Think of a piece of advice as a kind of fancy hook that you can attach to any function/macro/subr. *** utils/annotations.el Can't find any Commentary section *** utils/assoc.el Commentary: Association list utilities providing insertion, deletion, sorting fetching off key-value pairs in association lists. *** utils/atomic-extents.el Can't find any Commentary section *** utils/autoload.el Commentary: This code helps GNU Emacs maintainers keep the loaddefs.el file up to date. It interprets magic cookies of the form ";;;###autoload" in lisp source files in various useful ways. To learn more, read the source; if you're going to use this, you'd better be able to. *** utils/bench.el Commentary: Adapted from Shane Holder's bench.el by steve@xemacs.org. To run Extract the shar file in /tmp, or modify bench-lisp-file to point to the gnus.el file. At the shell prompt emacs -q --no-site-file <= don't load users .emacs or site- file M-x byte-compile-file "/tmp/bench.el" M-x load-file "/tmp/bench.elc" In the scratch buffer (bench 1) All bench marks must be named bench-mark- Results are put in bench-mark- *** utils/blessmail.el Commentary: This is loaded into a bare Emacs to create the blessmail script, which (on systems that need it) is used during installation to give appropriate permissions to movemail. It has to be done from lisp in order to be sure of getting the correct value of rmail-spool-directory. *** utils/browse-cltl2.el Can't find any Commentary section *** utils/browse-url.el Commentary: This package provides functions which read a URL (Uniform Resource Locator) from the minibuffer, defaulting to the URL around point, and ask a World-Wide Web browser to load it. It can also load the URL associated with the current buffer. Different browsers use different methods of remote control so there is one function for each supported browser. If the chosen browser is not running, it is started. Currently there is support for: *** utils/crontab.el Can't find any Commentary section *** utils/delbackspace.el Can't find any Commentary section *** utils/derived.el Commentary: GNU Emacs is already, in a sense, object oriented -- each object (buffer) belongs to a class (major mode), and that class defines the relationship between messages (input events) and methods (commands) by means of a keymap. In the mean time, this package offers most of the advantages of full inheritance with the existing major modes. The macro `define-derived-mode' allows the user to make a variant of an existing major mode, with its own keymap. The new mode will inherit the key bindings of its parent, and will, in fact, run its parent first every time it is called. For example, the commands *** utils/detached-minibuf.el Commentary: WARNING. DANGER. This file reportedly crashes 19.14, use it only with a recent XEmacs. Version: 1.1 *** utils/docref.el Commentary: This package allows you to use a simple form of cross references in your Emacs Lisp documentation strings. Cross-references look like \\(type@[label@]data), where type defines a method for retrieving reference informatin, data is used by a method routine as an argument, and label "represents" the reference in text. If label is absent, data is used instead. *** utils/easymenu.el Can't find any Commentary section *** utils/edmacro.el Commentary: Usage: The `C-x C-k' (`edit-kbd-macro') command edits a keyboard macro in a special buffer. It prompts you to type a key sequence, which should be one of: *** utils/eldoc.el Commentary: This program was inspired by the behavior of the "mouse documentation window" on many Lisp Machine systems; as you type a function's symbol name as part of a sexp, it will print the argument list for that function. Behavior is not identical; for example, you need not actually type the function name, you need only move point around in a sexp that calls it. Also, if point is over a documented variable, it will print the one-line documentation for that variable instead, to remind you of that variable's meaning. *** utils/elp.el Commentary: If you want to profile a bunch of functions, set elp-function-list to the list of symbols, then do a M-x elp-instrument-list. This hacks those functions so that profiling information is recorded whenever they are called. To print out the current results, use M-x elp-results. If you want output to go to standard-output instead of a separate buffer, setq elp-use-standard-output to non-nil. With elp-reset-after-results set to non-nil, profiling information will be reset whenever the results are displayed. You can also reset all profiling info at any time with M-x elp-reset-all. *** utils/facemenu.el Commentary: This file defines a menu of faces (bold, italic, etc) which allows you to set the face used for a region of the buffer. Some faces also have keybindings, which are shown in the menu. Faces with names beginning with "fg:" or "bg:", as in "fg:red", are treated specially. Such faces are assumed to consist only of a foreground (if "fg:") or background (if "bg:") color. They are thus put into the color submenus rather than the general Face submenu. These faces can also be automatically created by selecting the "Other..." menu items in the "Foreground" and "Background" submenus. *** utils/find-gc.el Commentary: Produce in unsafe-list the set of all functions that may invoke GC. This expects the Emacs sources to live in emacs-source-directory. It creates a temporary working directory /tmp/esrc. *** utils/finder.el Commentary: This mode uses the Keywords library header to provide code-finding services by keyword. *** utils/floating-toolbar.el Commentary: The command `floating-toolbar' pops up a small frame containing a toolbar. The command should be bound to a button-press event. If the mouse press happens over an extent that has a non-nil 'floating-toolbar property, the value of that property is the toolbar instantiator that will be displayed. Otherwise the toolbar displayed is taken from the variable `floating-toolbar'. This variable can be made buffer local to produce buffer local floating toolbars. *** utils/flow-ctrl.el Commentary: Terminals that use XON/XOFF flow control can cause problems with GNU Emacs users. This file contains Emacs Lisp code that makes it easy for a user to deal with this problem, when using such a terminal. *** utils/foldout.el Commentary: This file provides folding editor extensions for outline-mode and outline-minor-mode buffers. What's a "folding editor"? Read on... Imagine you're in an outline-mode buffer and you've hidden all the text and subheadings under your level-1 headings. You now want to look at the stuff hidden under one of these headings. Normally you'd do C-c C-e (show-entry) to expose the body or C-c C-i to expose the child (level-2) headings. With foldout, you do C-c C-z (foldout-zoom-subtree). This exposes the body and child subheadings and narrows the buffer so that only the level-1 heading, the body and the level-2 headings are visible. If you now want to look under one of the level-2 headings, position the cursor on it and do C-c C-z again. This exposes the level-2 body and its level-3 child subheadings and narrows the buffer again. You can keep on zooming in on successive subheadings as much as you like. A string in the modeline tells you how deep you've gone. *** utils/forms-d2.el Can't find any Commentary section *** utils/forms-pass.el Can't find any Commentary section *** utils/forms.el Commentary: Visit a file using a form. Forms mode means visiting a data file which is supposed to consist of records each containing a number of fields. The records are separated by a newline, the fields are separated by a user-defined field separator (default: TAB). When shown, a record is transferred to an Emacs buffer and presented using a user-defined form. One record is shown at a time. *** utils/frame-icon.el Commentary: *** utils/hide-copyleft.el Can't find any Commentary section *** utils/highlight-headers.el Can't find any Commentary section *** utils/id-select.el Can't find any Commentary section *** utils/lib-complete.el Can't find any Commentary section *** utils/live-icon.el Can't find any Commentary section *** utils/loadhist.el Commentary: These functions exploit the load-history system variable. *** utils/mail-extr.el Commentary: mail-extract-address-components: (address) Given an RFC-822 ADDRESS, extract full name and canonical address. Returns a list of the form (FULL-NAME CANONICAL-ADDRESS). If no name can be extracted, FULL-NAME will be nil. ADDRESS may be a string or a buffer. If it is a buffer, the visible (narrowed) portion of the buffer will be interpreted as the address. (This feature exists so that the clever caller might be able to avoid consing a string.) If ADDRESS contains more than one RFC-822 address, only the first is returned. *** utils/mail-utils.el Commentary: Utility functions for mail and netnews handling. These handle fine points of header parsing. *** utils/mailpost.el Commentary: Yet another mail interface. this for the rmail system to provide the missing sendmail interface on systems without /usr/lib/sendmail, but with /usr/uci/post. *** utils/map-ynp.el Commentary: map-y-or-n-p is a general-purpose question-asking function. It asks a series of y/n questions (a la y-or-n-p), and decides to applies an action to each element of a list based on the answer. The nice thing is that you also get some other possible answers to use, reminiscent of query-replace: ! to answer y to all remaining questions; ESC or q to answer n to all remaining questions; . to answer y once and then n for the remainder; and you can get help with C-h. *** utils/meese.el Commentary: This file is grossly misnamed. It should be called reno.el. *** utils/passwd.el Can't find any Commentary section *** utils/pp.el Can't find any Commentary section *** utils/pretty-print.el Can't find any Commentary section *** utils/redo.el Commentary: Emacs' normal undo system allows you to undo an arbitrary number of buffer changes. These undos are recorded as ordinary buffer changes themselves. So when you break the chain of undos by issuing some other command, you can then undo all the undos. The chain of recorded buffer modifications therefore grows without bound, truncated only at garbage collection time. *** utils/regi.el Can't find any Commentary section *** utils/reporter.el Commentary: Lisp Package Authors ==================== Reporter was written primarily for Emacs Lisp package authors so that their users can easily report bugs. When invoked, reporter-submit-bug-report will set up an outgoing mail buffer with the appropriate bug report address, including a lisp expression the maintainer of the package can eval to completely reproduce the environment in which the bug was observed (e.g. by using eval-last-sexp). This package proved especially useful during my development of cc-mode, which is highly dependent on its configuration variables. *** utils/rfc822.el Can't find any Commentary section *** utils/ring.el Commentary: This code defines a ring data structure. A ring is a (hd-index length . vector) list. You can insert to, remove from, and rotate a ring. When the ring fills up, insertions cause the oldest elts to be quietly dropped. *** utils/shadowfile.el Can't find any Commentary section *** utils/skeleton.el Commentary: A very concise language extension for writing structured statement skeleton insertion commands for programming language modes. This originated in shell-script mode and was applied to ada-mode's commands which shrunk to one third. And these commands are now user configurable. *** utils/smtpmail.el Commentary: Send Mail to smtp host from smtpmail temp buffer. *** utils/soundex.el Commentary: The Soundex algorithm maps English words into representations of how they sound. Words with vaguely similar sound map to the same string. *** utils/speedbar.el Commentary: The speedbar provides a frame in which files, and locations in files are displayed. These items can be clicked on with mouse-2 in order to make the last active frame display that file location. *** utils/symbol-syntax.el Can't find any Commentary section *** utils/sysdep.el Can't find any Commentary section *** utils/text-props.el Commentary: This is a nearly complete implementation of the FSF19 text properties API. Please let me know if you notice any differences in behavior between this implementation and the FSF implementation. *** utils/thing.el Can't find any Commentary section *** utils/timezone.el Can't find any Commentary section *** utils/tq.el Commentary: manages receiving a stream asynchronously, parsing it into transactions, and then calling handler functions Our basic structure is the queue/process/buffer triple. Each entry of the queue is a regexp/closure/function triple. We buffer bytes from the process until we see the regexp at the head of the queue. Then we call the function with the closure and the collected bytes. *** utils/trace.el Commentary: A simple trace package that utilizes advice.el. It generates trace information in a Lisp-style fashion and inserts it into a trace output buffer. Tracing can be done in the background (or silently) so that generation of trace output won't interfere with what you are currently doing. *** utils/tree-menu.el Can't find any Commentary section *** utils/uniquify.el Commentary: Emacs's standard method for making buffer names unique adds <2>, <3>, etc. to the end of (all but one of) the buffers. This file replaces that behavior, for buffers visiting files and dired buffers, with a uniquification that adds parts of the file name until the buffer names are unique. For instance, buffers visiting /u/mernst/tmp/Makefile and /usr/projects/zaphod/Makefile would be named Makefile|tmp and Makefile|zaphod, respectively (instead of Makefile and Makefile<2>). Other buffer name styles are also available. *** utils/xbm-button.el Can't find any Commentary section *** utils/xpm-button.el Can't find any Commentary section ** viper - VI emulator *** viper/viper-ex.el Can't find any Commentary section *** viper/viper-init.el Can't find any Commentary section *** viper/viper-keym.el Can't find any Commentary section *** viper/viper-macs.el Can't find any Commentary section *** viper/viper-mous.el Can't find any Commentary section *** viper/viper-util.el Can't find any Commentary section *** viper/viper.el Can't find any Commentary section ** vm - Mail reader See the online documentation. ** vms - Stuff for Emacs under VMS vms/vms-patch.el Can't find any Commentary section *** vms/vmsproc.el Can't find any Commentary section *** vms/vmsx.el Can't find any Commentary section ** w3 - World Wide Web browser under Emacs See the online documentation. ** x11 - X11 specific stuff: compose keys, menubars, toolbar, ... *** x11/x-compose.el Can't find any Commentary section *** x11/x-faces.el Can't find any Commentary section *** x11/x-font-menu.el Commentary: Creates three menus, "Font", "Size", and "Weight", and puts them on the "Options" menu. The contents of these menus are the superset of those properties available on any fonts, but only the intersection of the three sets is selectable at one time. *** x11/x-init.el Commentary: *** x11/x-iso8859-1.el Can't find any Commentary section *** x11/x-menubar.el Commentary: *** x11/x-misc.el Can't find any Commentary section *** x11/x-mouse.el Can't find any Commentary section *** x11/x-scrollbar.el Can't find any Commentary section *** x11/x-select.el Can't find any Commentary section *** x11/x-toolbar.el Can't find any Commentary section *** x11/x-win-sun.el Commentary: This file is loaded by x-win.el at run-time when we are sure that XEmacs is running on the display of a Sun. The Sun X server (both the MIT and OpenWindows varieties) have extremely stupid names for their keypad and function keys. For example, the key labeled 3 / PgDn, with R15 written on the front, is actually called F35. *** x11/x-win-xfree86.el Can't find any Commentary section * What Changed =================== ** Differences between XEmacs and GNU Emacs 19 ================================================== In XEmacs, events are first-class objects. FSF 19 represents them as integers, which obscures the differences between a key gesture and the ancient ASCII code used to represent a particular overlapping subset of them. In XEmacs, keymaps are first-class opaque objects. FSF 19 represents them as complicated combinations of association lists and vectors. If you use the advertised functional interface to manipulation of keymaps, the same code will work in XEmacs, Emacs 18, and GNU Emacs 19; if your code depends on the underlying implementation of keymaps, it will not. XEmacs uses "extents" to represent all non-textual aspects of buffers; FSF 19 uses two distinct objects, "text properties" and "overlays", which divide up the functionality between them. Extents are a superset of the functionality of the two FSF data types. The full FSF 19 interface to text properties is supported in XEmacs (with extents being the underlying representation). Extents can be made to be copied into strings, and thus restored by kill and yank. Thus, one can specify this behavior on either "extents" or "text properties", whereas in FSF 19 text properties always have this behavior and overlays never do. Many more packages are provided standard with XEmacs than with FSF 19. Pixmaps of arbitrary size can be embedded in a buffer. Variable width fonts work. The height of a line is the height of the tallest font on that line, instead of all lines having the same height. XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which makes it be a more well-behaved X citizen (and also improves portability). A result of this is that it is possible to include other Xt "Widgets" in the XEmacs window. Also, XEmacs understands the standard Xt command-line arguments. XEmacs provides support for ToolTalk on systems that have it. XEmacs can ask questions using popup dialog boxes. Any command executed from a menu will ask yes/no questions with dialog boxes, while commands executed via the keyboard will use the minibuffer. XEmacs has a built-in toolbar. Four toolbars can actually be configured: top, bottom, left, and right toolbars. XEmacs has vertical and horizontal scrollbars. Unlike in FSF 19 (which provides a primitive form of vertical scrollbar), these are true toolkit scrollbars. A look-alike Motif scrollbar is provided for those who don't have Motif. (Even for those who do, the look-alike may be preferable as it is faster.) If you're running on a machine with audio hardware, you can specify sound files for XEmacs to play instead of the default X beep. See the documentation of the function load-sound-file and the variable sound-alist. An XEmacs frame can be placed within an "external client widget" managed by another application. This allows an application to use an XEmacs frame as its text pane rather than the standard Text widget that is provided with Motif or Athena. XEmacs supports Motif applications, generic Xt (e.g. Athena) applications, and raw Xlib applications. Here are some more specifics about the XEmacs implementation: *** The Input Model ------------------- The fundamental unit of input is an "event" instead of a character. An event is a new data type that contains several pieces of information. There are several kinds of event, and corresponding accessor and utility functions. We tried to abstract them so that they would apply equally well to a number of window systems. NOTE: All timestamps are measured as milliseconds since Emacs started. key_press_event event_channel A token representing which keyboard generated it. For this kind of event, this is a frame object. (This is for eventual support of multiple displays.) timestamp When it happened key What keysym this is; an integer or a symbol. If this is an integer, it will be in the printing ASCII range: >32 and <127. modifiers Bucky-bits on that key: control, meta, etc. For most keys, Shift is not a bit; that is implicit in the keyboard layout. button_press_event button_release_event event_channel A token representing which mouse generated it. For this kind of event, this is a frame object. timestamp When it happened button What button went down or up. modifiers Bucky-bits on that button: shift, control, meta, etc. x, y Where it was at the button-state-change (in pixels). pointer_motion_event event_channel A token representing which mouse generated it. For this kind of event, this is a frame object. timestamp When it happened x, y Where it was after it moved (in pixels). modifiers Bucky-bits down when the motion was detected. (Possibly not all window systems will provide this?) process_event timestamp When it happened process the emacs "process" object in question timeout_event timestamp Now (really, when the timeout was signaled) interval_id The ID returned when the associated call to add_timeout_cb() was made ------ the rest of the fields are filled in by Emacs ----- id_number The Emacs timeout ID for this timeout (more than one timeout event can have the same value here, since Emacs timeouts, as opposed to add_timeout_cb() timeouts, can resignal themselves) function An elisp function to call when this timeout is processed. object The object passed to that function. eval_event timestamp When it happened function An elisp function to call with this event object. object Anything. This kind of event is used internally; sometimes the window system interface would like to inform emacs of some user action (such as focusing on another frame) but needs that to happen synchronously with the other user input, like keypresses. This is useful when events are reported through callbacks rather than in the standard event stream. misc_user_event timestamp When it happened function An elisp function to call with this event object. object Anything. This is similar to an eval_event, except that it is generated by user actions: selections in the menubar or scrollbar actions. It is a "command" event, like key and mouse presses (and unlike mouse motion, process output, and enter and leave window hooks). In many ways, eval_events are not the same as keypresses or misc_user_events. magic_event No user-serviceable parts within. This is for things like KeymapNotify and ExposeRegion events and so on that emacs itself doesn't care about, but which it must do something with for proper interaction with the window system. Magic_events are handled somewhat asynchronously, just like subprocess filters. However, occasionally a magic_event needs to be handled synchronously; in that case, the asynchronous handling of the magic_event will push an eval_event back onto the queue, which will be handled synchronously later. This is one of the reasons why eval_events exist; I'm not entirely happy with this aspect of this event model. The function `next-event' blocks and returns one of the above-described event objects. The function `dispatch-event' takes an event and processes it in the appropriate way. For a process-event, dispatch-event calls the process's handler; for a mouse-motion event, the mouse-motion-handler hook is called, and so on. For magic-events, dispatch-event does window-system-dependent things, including calling some non-window-system-dependent hooks: map-frame-hook, unmap-frame-hook, mouse-enter-frame-hook, and mouse-leave-frame-hook. The function `next-command-event' calls `next-event' until it gets a key or button from the user (that is, not a process, motion, timeout, or magic event). If it gets an event that is not a key or button, it calls `dispatch-event' on it immediately and reads another one. The next-command-event function could be implemented in Emacs Lisp, though it isn't. Generally one should call `next-command-event' instead of `next-event'. read-char calls next-command-event; if it doesn't get an event that can be converted to an ASCII character, it signals an error. Otherwise it returns an integer. The variable `last-command-char' always contains an integer, or nil (if the last read event has no ASCII equivalent, as when it is a mouse-click or a non-ASCII character chord.) The new variable `last-command-event' holds an event object, that could be a non-ASCII character, a button click, a menu selection, etc. The variable `unread-command-char' no longer exists, and has been replaced by `unread-command-events'. With the new event model, it is incorrect for code to do (setq unread-command-char (read-char)), because all user-input can't be represented as ASCII characters. *** This is an incompatible change. Code which sets `unread-command-char' must be updated to use the combination of `next-command-event' and `unread-command-events' instead. The functions `this-command-keys' and `recent-keys' return a vector of event objects, instead of a string of ASCII characters. *** This also is an incompatible change. Almost nothing happens at interrupt level; the SIGIO handler simply sets a flag, and later, the X event queue is scanned for KeyPress events which map to ^G. All redisplay happens in the main thread of the process. *** Keymaps ----------- Instead of keymaps being alists or obarrays, they are a new primary data type. The only user access to the contents of a keymap is through the existing keymap-manipulation functions, and a new function, map-keymap. This means that existing code that manipulates keymaps may need to be changed. One of our goals with the new input and keymap code was to make more character combinations available for binding, besides just ASCII and function keys. We want to be able bind different commands to Control-a and Control-Shift-a; we also want it to be possible for the keys Control-h and Backspace (and Control-M and Return, and Control-I and Tab, etc) to be distinct. One of the most common complaints that new Emacs users have is that backspace is help. The answer is to play around with the keyboard-translate-table, or be lucky enough to have a system administrator who has done this for you already; but if it were possible to bind backspace and C-h to different things, then (under a window manager at least) both backspace and delete would delete a character, and ^H would be help. There's no need to deal with xmodmap, kbd-translate-table, etc. Here are some more examples: suppose you want to bind one function to Tab, and another to Control-Tab. This can't be done if Tab and Control-I are the same thing. What about control keys that have no ASCII equivalent, like Control-< ? One might want that to be bound to set-mark-at-point-min. We want M-C-Backspace to be kill-backward-sexp. But we want M-Backspace to be kill-backward-word. Again, this can't be done if Backspace and C-h are indistinguishable. The user represents keys as a string of ASCII characters (when possible and convenient), or as a vector of event objects, or as a vector of "key description lists", that looks like (control a), or (control meta delete) or (shift f1). The order of the modifier-names is not significant, so (meta control x) and (control meta x) are the same. `define-key' knows how to take any of the above representations and store them into a keymap. When Emacs wants to return a key sequence (this-command-keys, recent-keys, keyboard-macros, and read-key-sequence, for example) it returns a vector of event objects. Keyboard macros can also be represented as ASCII strings or as vectors of key description lists. This is an incompatible change: code which calls `this-command-keys', `recent-keys', `read-key-sequence', or manipulates keyboard-macros probably needs to be changed so that it no longer assumes that the returned value is a string. Control-Shift-a is specified as (control A), not (control shift a), since A is a two-case character. But for keys that don't have an upper case version, like F1, Backspace, and Escape, you use the (shift backspace) syntax. See the doc string for our version of define-key, reproduced below in the `Changed Functions' section. Note that when the KEYS argument is a string, it has the same semantics as the v18 define-key. *** Xt Integration ------------------ The heart of the event loop is implemented in terms of the Xt event functions (specifically XtAppProcessEvent), and uses Xt's concept of timeouts and file-descriptor callbacks, eliminating a large amount of system-dependent code (Xt does it for you.) If Emacs is compiled with support for X, it uses the Xt event loop even when Emacs is not running on an X display (the Xt event loop supports this). This makes it possible to run Emacs on a dumb TTY, and later connect it to one or more X servers. It should also be possible to later connect an existing Emacs process to additional TTY's, although this code is still experimental. (Our intent at this point is not to have an Emacs that is being used by multiple people at the same time: it is to make it possible for someone to go home, log in on a dialup line, and connect to the same Emacs process that is running under X in their office without having to recreate their buffer state and so on.) If Emacs is not compiled with support for X, then it instead uses more general code, something like what v18 does; but this way of doing things is a lot more modular. (Linking Emacs with Xt seems to only add about 300k to the executable size, compared with an Emacs linked with Xlib only.) *** Region Highlighting ----------------------- If the variable `zmacs-regions' is true, then the region between point and mark will be highlighted when "active". Those commands which push a mark (such as C-SPC, and C-x C-x) make the region become "active" and thus highlighted. Most commands (all non-motion commands, basically) cause it to become non-highlighted (non-"active"). Commands that operate on the region (such as C-w, C-x C-l, etc.) only work if the region is in the highlighted state. zmacs-activate-region-hook and zmacs-deactivate-region-hook are run at the appropriate times; under X, zmacs-activate-region-hook makes the X selection be the region between point and mark, thus doing two things at once: making the region and the X selection be the same; and making the region highlight in the same way as the X selection. If `zmacs-regions' is true, then the `mark-marker' command returns nil unless the region is currently in the active (highlighted) state. With an argument of t, this returns the mark (if there is one) regardless of the active-region state. You should *generally* not use the mark unless the region is active, if the user has expressed a preference for the active-region model. Watch out! Moving this marker changes the mark position. If you set the marker not to point anywhere, the buffer will have no mark. In this way, the primary selection is a fairly transitory entity; but when something is copied to the kill ring, it is made the Clipboard selection. It is also stored into CUT_BUFFER0, for compatibility with X applications that don't understand selections (like Emacs18). Compatibility note: if you have code which uses (mark) or (mark-marker), then you need to either: change those calls to (mark t) or (mark-marker t); or simply bind `zmacs-regions' to nil around the call to mark or mark-marker. This is probably the best solution, since it will work in Emacs 18 as well. *** Menubars and Dialog Boxes ----------------------------- Here is an example of a menubar definition: (defvar default-menubar '(("File" ["Open File..." find-file t] ["Save Buffer" save-buffer t] ["Save Buffer As..." write-file t] ["Revert Buffer" revert-buffer t] "-----" ["Print Buffer" lpr-buffer t] "-----" ["Delete Frame" delete-frame t] ["Kill Buffer..." kill-buffer t] ["Exit Emacs" save-buffers-kill-emacs t] ) ("Edit" ["Undo" advertised-undo t] ["Cut" kill-primary-selection t] ["Copy" copy-primary-selection t] ["Paste" yank-clipboard-selection t] ["Clear" delete-primary-selection t] ) ...)) The first element of each menu item is the string to print on the menu. The second element is the callback function; if it is a symbol, it is invoked with `call-interactively.' If it is a list, it is invoked with `eval'. If the second element is a symbol, then the menu also displays the key that is bound to that command (if any). The third element of the menu items determines whether the item is selectable. It may be t, nil, or a form to evaluate. Also, a hook is run just before a menu is exposed, which can be used to change the value of these slots. For example, there is a hook that makes the "undo" menu item be selectable only in the cases when `advertised-undo' would not signal an error. Menus may have other menus nested within them; they will cascade. There are utility functions for adding items to menus, deleting items, disabling them, etc. The function `popup-menu' takes a menu description and pops it up. The function `popup-dialog-box' takes a dialog-box description and pops it up. Dialog box descriptions look a lot like menu descriptions. The menubar, menu, and dialog-box code is implemented as a library, with an interface which hides the toolkit that implements it. *** Isearch Changes ------------------- Isearch has been reimplemented in a different way, adding some new features, and causing a few incompatible changes. - the old isearch-*-char variables are no longer supported. In the old system, one could make ^A mean "repeat the search" by doing something like (setq search-repeat-char ?C-a). In the new system, this is accomplished with (define-key isearch-mode-map "\C-a" 'isearch-repeat-forward) - The advantage of using the normal keymap mechanism for this is that you can bind more than one key to an isearch command: for example, both C-a and C-s could do the same thing inside isearch mode. You can also bind multi-key sequences inside of isearch mode, and bind non-ASCII keys. For example, to use the F1 key to terminate a search: (define-key isearch-mode-map 'f1 'isearch-exit) or to make ``C-c C-c'' terminate a search: (define-key isearch-mode-map "\C-c\C-c" 'isearch-exit) - If isearch is behaving case-insensitively (the default) and you type an upper case character, then the search will become case-sensitive. This can be disabled by setting `search-caps-disable-folding' to nil. - There is a history ring of the strings previously searched for; typing M-p or M-n while searching will cycle through this ring. Typing M-TAB will do completion across the set of items in the history ring. - The ESC key is no longer used to terminate an incremental search. The RET key should be used instead. This change is necessary for it to be possible to bind "meta" characters to isearch commands. *** Startup Code Changes ------------------------ The initial X frame is mapped before the user's .emacs file is executed. Without this, there is no way for the user to see any error messages generated by their .emacs file, any windows created by the .emacs file don't show up, and the copyleft notice isn't shown. The default values for load-path, exec-path, lock-directory, and Info-directory-list are not (necessarily) built into Emacs, but are computed at startup time. First, Emacs looks at the directory in which its executable file resides: o If that directory contains subdirectories named "lisp" and "lib-src", then those directories are used as the lisp library and exec directory. o If the parent of the directory in which the emacs executable is located contains "lisp" and "lib-src" subdirectories, then those are used. o If ../lib/xemacs- (starting from the directory in which the emacs executable is located) contains a "lisp" subdirectory and either a "lib-src" subdirectory or a subdirectory, then those are used. o If the emacs executable that was run is a symbolic link, then the link is chased, and the resultant directory is checked as above. (Actually, it doesn't just look for "lisp/", it looks for "lisp/prim/", which reduces the chances of a false positive.) If the lisp directory contains subdirectories, they are added to the default load-path as well. If the site-lisp directory exists and contains subdirectories, they are then added. Subdirectories whose names begin with a dot or a hyphen are not added to the load-path. These heuristics fail if the Emacs binary was copied from the main Emacs tree to some other directory, and links for the lisp directory were not put in. This isn't much of a restriction: either make there be subdirectories (or symbolic links) of the directory of the emacs executable, or make the "installed" emacs executable be a symbolic link to an executable in a more appropriate directory structure. For example, this setup works: /usr/local/xemacs/xemacs* ; The executable. /usr/local/xemacs/lisp/ ; The associated directories. /usr/local/xemacs/etc/ ; Any of the files in this list /usr/local/xemacs/lock/ ; could be symbolic links as well. /usr/local/xemacs/info/ As does this: /usr/local/bin/xemacs -> ../xemacs/src/xemacs-19.14 ; A link... /usr/local/xemacs/src/xemacs-19.14* ; The executable, /usr/local/xemacs/lisp/ ; and the rest of /usr/local/xemacs/etc/ ; the source tree /usr/local/xemacs/lock/ /usr/local/xemacs/info/ This configuration might be used for a multi-architecture installation; assume that $LOCAL refers to a directory which contains only files specific to a particular architecture (i.e., executables) and $SHARED refers to those files which are not machine specific (i.e., lisp code and documentation.) $LOCAL/bin/xemacs@ -> $LOCAL/xemacs-19.14/xemacs* $LOCAL/xemacs-19.14/lisp@ -> $SHARED/xemacs-19.14/lisp/ $LOCAL/xemacs-19.14/etc@ -> $SHARED/xemacs-19.14/etc/ $LOCAL/xemacs-19.14/info@ -> $SHARED/xemacs-19.14/info/ The following would also work, but the above is probably more attractive: $LOCAL/bin/xemacs* $LOCAL/bin/lisp@ -> $SHARED/xemacs-19.14/lisp/ $LOCAL/bin/etc@ -> $SHARED/xemacs-19.14/etc/ $LOCAL/bin/info@ -> $SHARED/xemacs-19.14/info/ If Emacs can't find the requisite directories, it writes a message like this (or some appropriate subset of it) to stderr: WARNING: couldn't find an obvious default for load-path, exec-directory, and lock-directory, and there were no defaults specified in paths.h when Emacs was built. Perhaps some directories don't exist, or the Emacs executable, /cadillac-th/jwz/somewhere/xemacs is in a strange place? Without both exec-directory and load-path, Emacs will be very broken. Consider making a symbolic link from /cadillac-th/jwz/somewhere/etc to wherever the appropriate Emacs etc/ directory is, and from /cadillac-th/jwz/somewhere/lisp/ to wherever the appropriate Emacs lisp library is. Without lock-directory set, file locking won't work. Consider creating /cadillac-th/jwz/somewhere/lock as a directory or symbolic link for use as the lock directory. The default installation tree is the following: /usr/local/bin/b2m ; ctags ; executables that emacsclient ; should be in etags ; user's path xemacs -> xemacs- ; xemacs ; /usr/local/lib/xemacs/site-lisp /usr/local/lib/xemacs/lock /usr/local/lib/xemacs-/etc ; architecture ind. files /usr/local/lib/xemacs-/info /usr/local/lib/xemacs-/lisp /usr/local/lib/xemacs-/ ; binaries emacs may run *** X Resources --------------- (Note: This section is copied verbatim from the XEmacs Reference Manual.) The Emacs resources are generally set per-frame. Each Emacs frame can have its own name or the same name as another, depending on the name passed to the `make-frame' function. You can specify resources for all frames with the syntax: Emacs*parameter: value or Emacs*EmacsFrame.parameter:value You can specify resources for a particular frame with the syntax: Emacs*FRAME-NAME.parameter: value **** Geometry Resources ----------------------- To make the default size of all Emacs frames be 80 columns by 55 lines, do this: Emacs*EmacsFrame.geometry: 80x55 To set the geometry of a particular frame named `fred', do this: Emacs*fred.geometry: 80x55 Important! Do not use the following syntax: Emacs*geometry: 80x55 You should never use `*geometry' with any X application. It does not say "make the geometry of Emacs be 80 columns by 55 lines." It really says, "make Emacs and all subwindows thereof be 80x55 in whatever units they care to measure in." In particular, that is both telling the Emacs text pane to be 80x55 in characters, and telling the menubar pane to be 80x55 pixels, which is surely not what you want. As a special case, this geometry specification also works (and sets the default size of all Emacs frames to 80 columns by 55 lines): Emacs.geometry: 80x55 since that is the syntax used with most other applications (since most other applications have only one top-level window, unlike Emacs). In general, however, the top-level shell (the unmapped ApplicationShell widget named `Emacs' that is the parent of the shell widgets that actually manage the individual frames) does not have any interesting resources on it, and you should set the resources on the frames instead. The `-geometry' command-line argument sets only the geometry of the initial frame created by Emacs. A more complete explanation of geometry-handling is * The `-geometry' command-line option sets the `Emacs.geometry' resource, that is, the geometry of the ApplicationShell. * For the first frame created, the size of the frame is taken from the ApplicationShell if it is specified, otherwise from the geometry of the frame. * For subsequent frames, the order is reversed: First the frame, and then the ApplicationShell. * For the first frame created, the position of the frame is taken from the ApplicationShell (`Emacs.geometry') if it is specified, otherwise from the geometry of the frame. * For subsequent frames, the position is taken only from the frame, and never from the ApplicationShell. This is rather complicated, but it does seem to provide the most intuitive behavior with respect to the default sizes and positions of frames created in various ways. **** Iconic Resources --------------------- Analogous to `-geometry', the `-iconic' command-line option sets the iconic flag of the ApplicationShell (`Emacs.iconic') and always applies to the first frame created regardless of its name. However, it is possible to set the iconic flag on particular frames (by name) by using the `Emacs*FRAME-NAME.iconic' resource. **** Resource List ------------------ Emacs frames accept the following resources: `geometry' (class `Geometry'): string Initial geometry for the frame. *Note Geometry Resources:: for a complete discussion of how this works. `iconic' (class `Iconic'): boolean Whether this frame should appear in the iconified state. `internalBorderWidth' (class `InternalBorderWidth'): int How many blank pixels to leave between the text and the edge of the window. `interline' (class `Interline'): int How many pixels to leave between each line (may not be implemented). `menubar' (class `Menubar'): boolean Whether newly-created frames should initially have a menubar. Set to true by default. `initiallyUnmapped' (class `InitiallyUnmapped'): boolean Whether XEmacs should leave the initial frame unmapped when it starts up. This is useful if you are starting XEmacs as a server (e.g. in conjunction with gnuserv or the external client widget). You can also control this with the `-unmapped' command-line option. `barCursor' (class `BarColor'): boolean Whether the cursor should be displayed as a bar, or the traditional box. `textPointer' (class `Cursor'): cursor-name The cursor to use when the mouse is over text. This resource is used to initialize the variable `x-pointer-shape'. `selectionPointer' (class `Cursor'): cursor-name The cursor to use when the mouse is over a selectable text region (an extent with the `highlight' property; for example, an Info cross-reference). This resource is used to initialize the variable `x-selection-pointer-shape'. `spacePointer' (class `Cursor'): cursor-name The cursor to use when the mouse is over a blank space in a buffer (that is, after the end of a line or after the end-of-file). This resource is used to initialize the variable `x-nontext-pointer-shape'. `modeLinePointer' (class `Cursor'): cursor-name The cursor to use when the mouse is over a mode line. This resource is used to initialize the variable `x-mode-pointer-shape'. `gcPointer' (class `Cursor'): cursor-name The cursor to display when a garbage-collection is in progress. This resource is used to initialize the variable `x-gc-pointer-shape'. `scrollbarPointer' (class `Cursor'): cursor-name The cursor to use when the mouse is over the scrollbar. This resource is used to initialize the variable `x-scrollbar-pointer-shape'. `pointerColor' (class `Foreground'): color-name `pointerBackground' (class `Background'): color-name The foreground and background colors of the mouse cursor. These resources are used to initialize the variables `x-pointer-foreground-color' and `x-pointer-background-color'. `scrollBarWidth' (class `ScrollBarWidth'): integer How wide the vertical scrollbars should be, in pixels; 0 means no vertical scrollbars. You can also use a resource specification of the form `*scrollbar.width', or the usual toolkit scrollbar resources: `*XmScrollBar.width' (Motif), `*XlwScrollBar.width' (Lucid), or `*Scrollbar.thickness' (Athena). We don't recommend that you use the toolkit resources, though, because they're dependent on how exactly your particular build of XEmacs was configured. `scrollBarHeight' (class `ScrollBarHeight'): integer How high the horizontal scrollbars should be, in pixels; 0 means no horizontal scrollbars. You can also use a resource specification of the form `*scrollbar.height', or the usual toolkit scrollbar resources: `*XmScrollBar.height' (Motif), `*XlwScrollBar.height' (Lucid), or `*Scrollbar.thickness' (Athena). We don't recommend that you use the toolkit resources, though, because they're dependent on how exactly your particular build of XEmacs was configured. `scrollBarPlacement' (class `ScrollBarPlacement'): string Where the horizontal and vertical scrollbars should be positioned. This should be one of the four strings `bottom-left', `bottom-right', `top-left', and `top-right'. Default is `bottom-right' for the Motif and Lucid scrollbars and `bottom-left' for the Athena scrollbars. `topToolBarHeight' (class `TopToolBarHeight'): integer `bottomToolBarHeight' (class `BottomToolBarHeight'): integer `leftToolBarWidth' (class `LeftToolBarWidth'): integer `rightToolBarWidth' (class `RightToolBarWidth'): integer Height and width of the four possible toolbars. `topToolBarShadowColor' (class `TopToolBarShadowColor'): color-name `bottomToolBarShadowColor' (class `BottomToolBarShadowColor'): color-name Color of the top and bottom shadows for the toolbars. NOTE: These resources do *not* have anything to do with the top and bottom toolbars (i.e. the toolbars at the top and bottom of the frame)! Rather, they affect the top and bottom shadows around the edges of all four kinds of toolbars. `topToolBarShadowPixmap' (class `TopToolBarShadowPixmap'): pixmap-name `bottomToolBarShadowPixmap' (class `BottomToolBarShadowPixmap'): pixmap-name Pixmap of the top and bottom shadows for the toolbars. If set, these resources override the corresponding color resources. NOTE: These resources do *not* have anything to do with the top and bottom toolbars (i.e. the toolbars at the top and bottom of the frame)! Rather, they affect the top and bottom shadows around the edges of all four kinds of toolbars. `toolBarShadowThickness' (class `ToolBarShadowThickness'): integer Thickness of the shadows around the toolbars, in pixels. `visualBell' (class `VisualBell'): boolean Whether XEmacs should flash the screen rather than making an audible beep. `bellVolume' (class `BellVolume'): integer Volume of the audible beep. `useBackingStore' (class `UseBackingStore'): boolean Whether XEmacs should set the backing-store attribute of the X windows it creates. This increases the memory usage of the X server but decreases the amount of X traffic necessary to update the screen, and is useful when the connection to the X server goes over a low-bandwidth line such as a modem connection. **** Face Resources ------------------- The attributes of faces are also per-frame. They can be specified as: Emacs.FACE_NAME.parameter: value (*do not* use `Emacs*FACE_NAME...') or Emacs*FRAME_NAME.FACE_NAME.parameter: value Faces accept the following resources: `attributeFont' (class `AttributeFont'): font-name The font of this face. `attributeForeground' (class `AttributeForeground'): color-name `attributeBackground' (class `AttributeBackground'): color-name The foreground and background colors of this face. `attributeBackgroundPixmap' (class `AttributeBackgroundPixmap'): file-name The name of an XBM file (or XPM file, if your version of Emacs supports XPM), to use as a background stipple. `attributeUnderline' (class `AttributeUnderline'): boolean Whether text in this face should be underlined. All text is displayed in some face, defaulting to the face named `default'. To set the font of normal text, use `Emacs*default.attributeFont'. To set it in the frame named `fred', use `Emacs*fred.default.attributeFont'. These are the names of the predefined faces: `default' Everything inherits from this. `bold' If this is not specified in the resource database, Emacs tries to find a bold version of the font of the default face. `italic' If this is not specified in the resource database, Emacs tries to find an italic version of the font of the default face. `bold-italic' If this is not specified in the resource database, Emacs tries to find a bold-italic version of the font of the default face. `modeline' This is the face that the modeline is displayed in. If not specified in the resource database, it is determined from the default face by reversing the foreground and background colors. `highlight' This is the face that highlighted extents (for example, Info cross-references and possible completions, when the mouse passes over them) are displayed in. `left-margin' `right-margin' These are the faces that the left and right annotation margins are displayed in. `zmacs-region' This is the face that mouse selections are displayed in. `text-cursor' This is the face that the cursor is displayed in. `isearch' This is the face that the matched text being searched for is displayed in. `info-node' This is the face of info menu items. If unspecified, it is copied from `bold-italic'. `info-xref' This is the face of info cross-references. If unspecified, it is copied from `bold'. (Note that, when the mouse passes over a cross-reference, the cross-reference's face is determined from a combination of the `info-xref' and `highlight' faces.) Other packages might define their own faces; to see a list of all faces, use any of the interactive face-manipulation commands such as `set-face-font' and type `?' when you are prompted for the name of a face. If the `bold', `italic', and `bold-italic' faces are not specified in the resource database, then XEmacs attempts to derive them from the font of the default face. It can only succeed at this if you have specified the default font using the XLFD (X Logical Font Description) format, which looks like *-courier-medium-r-*-*-*-120-*-*-*-*-*-* If you use any of the other, less strict font name formats, some of which look like lucidasanstypewriter-12 fixed 9x13 then XEmacs won't be able to guess the names of the bold and italic versions. All X fonts can be referred to via XLFD-style names, so you should use those forms. See the man pages for `X(1)', `xlsfonts(1)', and `xfontsel(1)'. **** Widgets ------------ There are several structural widgets between the terminal EmacsFrame widget and the top level ApplicationShell; the exact names and types of these widgets change from release to release (for example, they changed in 19.9, 19.10, 19.12, and 19.13) and are subject to further change in the future, so you should avoid mentioning them in your resource database. The above-mentioned syntaxes should be forward-compatible. As of 19.14, the exact widget hierarchy is as follows: INVOCATION-NAME "shell" "container" FRAME-NAME x-emacs-application-class "TopLevelEmacsShell" "EmacsManager" "EmacsFrame" (for normal frames) or INVOCATION-NAME "shell" "container" FRAME-NAME x-emacs-application-class "TransientEmacsShell" "EmacsManager" "EmacsFrame" (for popup/dialog-box frames) where INVOCATION-NAME is the terminal component of the name of the XEmacs executable (usually `xemacs'), and `x-emacs-application-class' is generally `Emacs'. **** Menubar Resources ---------------------- As the menubar is implemented as a widget which is not a part of XEmacs proper, it does not use the face mechanism for specifying fonts and colors: It uses whatever resources are appropriate to the type of widget which is used to implement it. If Emacs was compiled to use only the Motif-lookalike menu widgets, then one way to specify the font of the menubar would be Emacs*menubar*font: *-courier-medium-r-*-*-*-120-*-*-*-*-*-* If the Motif library is being used, then one would have to use Emacs*menubar*fontList: *-courier-medium-r-*-*-*-120-*-*-*-*-*-* because the Motif library uses the `fontList' resource name instead of `font', which has subtly different semantics. The same is true of the scrollbars: They accept whichever resources are appropriate for the toolkit in use. *** Source Code Highlighting ---------------------------- It's possible to have your buffers "decorated" with fonts or colors indicating syntactic structures (such as strings, comments, function names, "reserved words", etc.). In XEmacs, the preferred way to do this is with font-lock-mode; activate it by adding the following code to your .emacs file: (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock) (add-hook 'c-mode-hook 'turn-on-font-lock) (add-hook 'c++-mode-hook 'turn-on-font-lock) (add-hook 'dired-mode-hook 'turn-on-font-lock) ...etc... To customize it, see the descriptions of the function `font-lock-mode' and the variables `font-lock-keywords', `c-font-lock-keywords', etc. There exist several other source code highlighting packages, but font-lock does one thing that most others don't do: highlights as you type new text; and one thing that no others do: bases part of its decoration on the syntax table of the major mode. Font-lock has C-level support to do this efficiently, so it should also be significantly faster than the others. If there's something that another highlighting package does that you can't make font-lock do, let us know. We would prefer to consolidate all of the desired functionality into one package rather than ship several different packages which do essentially the same thing in different ways. ** Differences Between XEmacs and Emacs 18 ========================================== Auto-configure support has been added, so it should be fairly easy to compile XEmacs on different systems. If you have any problems or feedback about compiling on your system, please let us know. We have reimplemented the basic input model in a more general way; instead of X input being a special-case of the normal ASCII input stream, XEmacs has a concept of "input events", and ASCII characters are a subset of that. The events that XEmacs knows about are not X events, but are a generalization of them, so that XEmacs can eventually be ported to different window systems. We have reimplemented keymaps so that sequences of events can be stored into them instead of just ASCII codes; it is possible to, for example, bind different commands to each of the chords Control-h, Control-H, Backspace, Control-Backspace, and Super-Shift-Backspace. Key bindings, function key bindings, and mouse bindings live in the same keymaps. Input and display of all ISO-8859-1 characters is supported. You can have multiple X windows ("frames" in XEmacs terminology). XEmacs has objects called "extents" and "faces", which are roughly analogous to Epoch's "buttons," "zones," and "styles." An extent is a region of text (a start position and an end position) and a face is a collection of textual attributes like fonts and colors. Every extent is displayed in some "face", so changing the properties of a face immediately updates the display of all associated extents. Faces can be frame-local: you can have a region of text which displays with completely different attributes when its buffer is viewed from a different X window. The display attributes of faces may be specified either in lisp or through the X resource manager. Pixmaps of arbitrary size can be embedded in a buffer. Variable width fonts work. The height of a line is the height of the tallest font on that line, instead of all lines having the same height. XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which makes it be a more well-behaved X citizen (and also improves portability). A result of this is that it is possible to include other Xt "Widgets" in the XEmacs window. Also, XEmacs understands the standard Xt command-line arguments. XEmacs understands the X11 "Selection" mechanism; it's possible to define and customize selection converter functions and new selection types from Emacs Lisp, without having to recompile XEmacs. XEmacs provides support for ToolTalk on systems that have it. XEmacs supports the Zmacs/Lispm style of region highlighting, where the region between the point and mark is highlighted when in its "active" state. XEmacs has a menubar, whose contents are customizable from emacs-lisp. This menubar looks Motif-ish, but does not require Motif. If you already own Motif, however, you can configure XEmacs to use a *real* Motif menubar instead. XEmacs can ask questions using popup dialog boxes. Any command executed from a menu will ask yes/no questions with dialog boxes, while commands executed via the keyboard will use the minibuffer. XEmacs has vertical and horizontal scrollbars. The initial load-path is computed at run-time, instead of at compile-time. This means that if you move the XEmacs executable and associated directories to somewhere else, you don't have to recompile anything. You can specify what the title of the XEmacs windows and icons should be with the variables `frame-title-format' and `frame-icon-title-format', which have the same syntax as `mode-line-format'. XEmacs now supports floating-point numbers. XEmacs now knows about timers directly, instead of them being simulated by a subprocess. XEmacs understands truenames, and can be configured to notice when you are visiting two names of the same file. See the variables find-file-use-truenames and find-file-compare-truenames. If you're running on a machine with audio hardware, you can specify sound files for XEmacs to play instead of the default X beep. See the documentation of the function load-sound-file and the variable sound-alist. An XEmacs frame can be placed within an "external client widget" managed by another application. This allows an application to use an XEmacs frame as its text pane rather than the standard Text widget that is provided with Motif or Athena. XEmacs supports Motif applications, generic Xt (e.g. Athena) applications, and raw Xlib applications. Random changes to the emacs-lisp library: (some of this was not written by us, but is included because it's free software and we think it's good stuff) - there is a new optimizing byte-compiler - there is a new abbrev-based mail-alias mechanism - the -*- line can contain local-variable settings - there is a new TAGS package - there is a new VI-emulation mode (viper) - there is a new implementation of Dired - there is a new implementation of Isearch - the VM package for reading mail is provided - the W3 package for browsing the World Wide Web hypertext information system is provided - the Hyperbole package, a programmable information management and hypertext system - the OO-Browser package, a multi-language object-oriented browser There are many more specifics in the "Miscellaneous Changes" section, below. The online Emacs Manual and Emacs-Lisp Manual are now both relatively up-to-date. ** Major Differences Between 19.13 and 19.14 ============================================ XEmacs has a new address! The canonical ftp site is now ftp.xemacs.org:/pub/xemacs and the Web page is now at http://www.xemacs.org/. All mailing lists now have @xemacs.org addresses. For the time being the @cs.uiuc.edu addresses will continue to function. This is a major new release. Many features have been added, as well as many bugs fixed. The Motif menubar has still _NOT_ been fixed for 19.14. You should use the Lucid menubar instead. Major user-visible changes: --------------------------- -- Color support in TTY mode is provided. You have to have a TTY capable of displaying them, such as color xterm or the console under Linux. If your terminal type supports colors (e.g. `xterm-color'), XEmacs will automatically notice this and start using color. -- blink-cursor-mode enables a blinking text cursor. There is a menubar option for this also. -- auto-show-mode is turned on by default; this means that XEmacs will automatically scroll a window horizontally as necessary to keep point in view. -- a file dialog box is provided and will be used whenever you are prompted for a filename as a result of a menubar selection. -- XEmacs can be compiled with built-in GIF, JPEG, and PNG support. The GIF libraries are supplied with XEmacs; for JPEG and PNG, you have to obtain the appropriate libraries (this is well- documented). This makes image display much easier and faster under W3 (the web browser) and TM (adds MIME support to VM and GNUS; not yet included with XEmacs but will be in 19.15). -- XEmacs provides a really nice mode (PSGML with "Wing improvements") for editing HTML and other SGML documents. It parses the document, and as a result it does proper indentation, can show you the context you're in, the allowed tags at a particular position, etc. -- XEmacs comes standard with modes for editing Java and VRML code, including font-lock support. -- GNUS 5.2 comes standard with XEmacs. -- You can now embed colors in the modeline, with different sections of the modeline responding appropriately to various mouse gestures: For example, clicking on the "read-only" indicator toggles the read-only status of a buffer, and clicking on the buffer name cycles to the next buffer. Pressing button3 on these areas brings up a popup menu of appropriate commands. -- There is a much nicer mode for completion lists and such. At the minibuffer prompt, if you hit page-up or Meta-V, the completion buffer will be displayed (if it wasn't already), you're moved into it, and can move around and select filenames using the arrow keys and the return key. Rather than a cursor, a filename is highlighted, and the arrow keys change which filename is highlighted. -- The edit-faces subsystem has also been much improved, in somewhat similar ways to the completion list improvements. -- Many improvements were made to the multi-device support. We now provide an auxiliary utility called "gnuattach" that lets you connect to an existing XEmacs process and display a TTY frame on the current TTY connection, and commands `make-frame-on-display' (with a corresponding menubar entry) and `make-frame-on-tty' for more easily creating frames on new TTY or X connections. -- We have incorporated nearly all of the functionality of GNU Emacs 19.30 into XEmacs. This includes support for lazy-loaded byte code and documentation strings, improved paragraph filling, better support for margins within documents, v19 regular expression routines (including caching of compiled regexps), etc. -- In accordance with GNU Emacs 19.30, the following key binding changes have been made: C-x ESC -> C-x ESC ESC ESC ESC -> ESC : ESC ESC ESC is "abort anything" (keyboard-escape-quit). -- All major packages have been updated to their latest-released versions. -- XEmacs now gracefully handles a full colormap (such as typically results when running Netscape). The nearest available color is automatically substituted. -- Many bug fixes to the subprocess/PTY code, ps-print, menubar functions, `set-text-properties', DEC Alpha support, toolbar resizing (the "phantom VM toolbar" bug), and lots and lots of other things were made. -- The ncurses library (a replacement for curses, found especially under Linux) is supported, and will be automatically used if it can be found. -- You can now undo in the minibuffer. -- Surrogate minibuffers now work. These are also sometimes referred to as "global" minibuffers. -- font-lock has been merged with GNU Emacs 19.30, improved defaults have been added, and changes have been made to the way it is configured. -- Many, many modes have menubar entries for them. -- `recover-session' lets you recover whatever files can be recovered after your XEmacs process has died unexpectedly. -- C-h k followed by a toolbar button press correctly reports the binding of the toolbar button. -- `function-key-map', `key-translation-map', and `keyboard-translate-table' are now correctly implemented. -- `show-message-log' (and its menubar entry under Edit) have been removed; instead use `view-lossage' (and its menubar entry under Help). -- There is a standard menubar entry for specifying which browser (Netscape, W3, Mosaic, etc.) to use when dispatching URL's in mail, Usenet news, etc. -- Improved native sound support under Linux. -- Lots of other things we forgot to mention. Significant Lisp-level changes: ------------------------------- -- Many improvements to the E-Lisp documentation have been made; it should now be up-to-date and complete in nearly all cases. -- XEmacs has extensive documentation on its internals, for would-be C hackers. -- Common-Lisp support (the CL package) is now dumped standard into XEmacs. No more need for (require 'cl) or anything like that. -- Full support for extents and text properties over strings is provided. -- The extent properties `start-open', `end-open', `start-closed', and `end-closed' now work correctly w.r.t. text properties. -- The `face' property of extents and text properties can now be a list. -- The `mouse-face' property from GNU Emacs is now supported. It supersedes the `highlight' property. -- `enriched' and `facemenu' packages from GNU Emacs have been ported. -- New functions for easier creation of dialog boxes: `get-dialog-box-response', `message-box', and `message-or-box'. -- `function-min-args' and `function-max-args' allow you to determine the minimum and maximum allowed arguments for any type of function (i.e. subr, lambda expression, byte-compiled function, etc.). -- Some C-level support for doing E-Lisp profiling is provided. See `start-profiling', `stop-profiling', and `pretty-print-profiling-info'. -- `current-process-time' reports the user, system, and real times for the currently running XEmacs process. -- `next-window', `previous-window', `next-frame', `previous-frame', `other-window', `get-lru-window', etc. have an extra device argument that allows you to restrict which devices it includes (normally all devices). Some functions that incorrectly ignored frames on different devices (e.g. C-x 0) are fixed. -- new functions `run-hook-with-args-until-success', `run-hook-with-args-until-failure'. -- generalized facility for local vs. global hooks. See `make-local-hook', `add-hook'. -- New functions for querying the window tree: `frame-leftmost-window', `frame-rightmost-window', `window-first-hchild', `window-first-vchild', `window-next-child', `window-previous-child', and `window-parent'. -- Epoch support works. This gets you direct access to some X events and objects (e.g. properties and property-notify events). -- The multi-device support has been majorly revamped. There is now a new concept of "consoles" (devices grouped together under a common keyboard/mouse), console-local variables, and a generalized concept of device/console connection. -- `display-buffer' synched with GNU Emacs 19.30, giving you lots of wondrous cruft such as -- unsplittable frames -- pop-up-frames, pop-up-frame-function -- special-display-buffer-names, special-display-regexps, special-display-function -- same-window-buffer-names, same-window-regexps -- XEmacs has support for accessing DBM- and/or DB-format databases, provided that you have the appropriate libraries on your system. -- There is a new font style: "strikethru" fonts. -- New data type "weak list", which is a list with special garbage-collection properties, similar to weak hash tables. -- `set-face-parent' makes one face inherit all properties from another. -- The junky frame parameters mechanism has been revamped as frame properties, which a standard property-list interface. -- Lots and lots of functions for working with property lists have been added. -- New functions `push-window-configuration', `pop-window-configuration', `unpop-window-configuration' for maintain a stack of window configurations. -- Many fixups to the glyph code; icons and mouse pointers are now properly merged into the glyph mechanism. -- `set-specifier' works more sensibly, like `set-face-property'. -- Many new specifiers for individually controlling toolbar height/width and visibility and text cursor visibility. -- New face `text-cursor' controls the colors of the text cursor. -- Many new variables for turning on debug information about the inner workings of XEmacs. -- Hash tables can now compare their keys using `equal' or `eql' as well as `eq'. -- Other things too numerous to mention. Significant configuration/build changes: ---------------------------------------- -- You can disable TTY support, toolbar support, scrollbar support, menubar support, and/or dialog box support at configure time to save memory. -- New configure option `--extra-verbose' shows the diagnostic output from feature testing; this should help track down problems with incorrect feature detection. -- `dont-have-xmu' is now `with-xmu', with the reversed sense. (It defaults to `yes'.) -- `with-mocklisp' lets you add Mocklisp support if you really need this. -- `with-term' for adding TERM support for Linux users. ** Major Differences Between 19.12 and 19.13 ============================================ This is primarily a bug-fix release. Lots of bugs have been fixed. Hopefully only a few have been introduced. The most noteworthy bug fixes are: -- There should be no more problems connecting XEmacs to an X server over SLIP or other slow connections. -- Periodic crashes when using the Buffers menu should be gone. -- etags would sometimes erase the current buffer; it doesn't any more. -- XEmacs will correctly exit if the X server dies. -- uniconified frames are displayed properly under TVTWM. -- Breakage in `add-menu-item' / `add-menu-button' is fixed. The Motif menubar has _NOT_ been fixed for 19.13. You should use the Lucid menubar instead. Multi-device support should now be working properly. You can now open an X device after having started out on a TTY device. Background pixmaps now work. See `set-face-background-pixmap'. Echo area messages are now saved to a buffer, " *Message Log*". To see this buffer, use the command `show-message-log'. It is possible to filter the message which are actually included by modifying the variables `log-message-ignore-regexps' and `log-message-ignore-labels'. You can now control which warnings you want to see. See `display-warning-suppressed-classes' and friends. You can now set the default location of an "other window" from the Options menu. "Save Options" now saves the state of all faces. You can choose which file "Save Options" writes into; see `save-options-file'. XPM support is no longer required for the toolbar. The relocating allocator is now enabled by default whenever possible. This allows buffer memory to be returned to the system when no longer in use which helps keep XEmacs process size down. The ability to have captioned toolbars has been added. Currently only the default toolbar actually has a captioned version provided. A new specifier variable, `toolbar-buttons-captioned-p' controls whether the toolbar is captioned. A copy of the XEmacs FAQ is now included and is available through info. The on-line E-Lisp reference manual has been significantly updated. There is now audio support under Linux. Modifier keys can now be sticky. This is controlled by the variable `modifier-keys-are-sticky'. manual-entry should now work correctly under Irix with the penalty of a longer startup time the first time it is invoked. If you are having problems with this on another system try setting `Manual-use-subdirectory-list' to t. make-tty-device no longer automatically creates the first frame. Rectangular regions now work correctly. ediff no longer sets synchronize-minibuffers to t unless you first set ediff-synchronize-minibuffers keyboard-translate-table has been implemented. This means that the `enable-flow-control' command for dealing with TTY connections that filter out ^S and ^Q now works. You can now create frames that are initially unmapped and frames that are "transient for another frame", meaning that they behave more like dialog-box frames. Other E-Lisp changes: -- Specifier `menubar-visible-p' for controlling menubar visibility -- Local command hooks should be set using `local-pre-command-hook' and `local-post-command-hook' instead of making the global equivalents be buffer-local. -- `quit-char', `help-char', `meta-prefix-char' can be any key specifier instead of just an integer. -- new functions `add-async-timeout' and `disable-async-timeout'. These let you create asynchronous timeouts, which are like normal timeouts except that they're executed even during running Lisp code. Use this with care! -- `debug-on-error' and `stack-trace-on-error' now enter the debugger only when an *unhandled* error occurs. If you want the old behavior, use `debug-on-signal' and `stack-trace-on-signal'. -- \U, \L, \u, \l, \E recognized specially in `replace-match'. These are standard ex/perl commands for changing the case of replaced text. -- New function event-matches-key-specifier-p. This provides a clean way of comparing keypress events with key specifiers such as 65, (shift home), etc. without having to resort to ugly `character-to-event' / `event-to-character' hacks. -- New function `add-to-list' -- New Common-Lisp functions `some', `every', `notevery', `notany', `adjoin', `union', `intersection', `set-difference', `set-exclusive-or', `subsetp' -- `remove-face-property' provides a clean way of removing a face property. Many of the Emacs Lisp packages have been updated. Some of the new Emacs Lisp packages --- ada-mode: major mode for editing Ada source arc-mode: simple editing of archives auto-show-mode: automatically scrolls horizontally to keep point on-screen completion: dynamic word completion mode dabbrev: the dynamic abbrev package has been rewritten and is much more powerful -- e.g. it searches in other buffers as well as the current one easymenu: menu support package live-icon: makes frame icons represent the current frame contents mailcrypt 3.2: mail encryption with PGP; included but v2.4 is still the default two-column: for editing two-column text ** Major Differences Between 19.11 and 19.12 ============================================ This is a huge new release. Almost every aspect of XEmacs has been changed at least somewhat. The highlights are: -- TTY support (includes face support) -- new redisplay engine; should be faster, less buggy, and more powerful -- terminology change from "screen" to "frame" -- built-in toolbar -- toolbar support added to many packages -- multiple device support (still in beta; improvements to come in 19.13) -- Purify used to ensure that there are no memory leaks or memory corruption problems -- horizontal and vertical scrollbars in all windows -- new Lucid (i.e. look-alike Motif) scrollbar widget -- stay-up menus in the Lucid (look-alike Motif) menubar widget -- 3-d modeline -- new extents engine; should be faster, less buggy, and more powerful -- much more powerful control over faces -- expanded menubar -- more work on synching with GNU Emacs 19.28 -- new packages: Hyperbole, OOBR (object browser), hm--html-menus, viper, lazy-lock.el, ksh-mode.el, rsz-minibuf.el -- package updates for all major packages -- dynodump package for Solaris: provides proper undumping and portable binaries across different OS versions and machine types -- Greatly expanded concept of "glyphs" (pixmaps etc. in a buffer) -- built-in support for displaying X-Faces, if the X-Face library is available -- built-in support for SOCKS if the SOCKS library is available -- graceful behavior when the colormap is full (e.g. Netscape ate all the colors) -- built-in MD5 (secure hashing function) support More specific information: *** TTY Support --------------- The long-awaited TTY support is now available. XEmacs will start up in TTY mode (using the tty you started XEmacs from) if the DISPLAY environment variable is not set or if you use the `-nw' option. Faces are available on TTY's. For a demonstration, try editing a C file and turning on font-lock-mode. You can also connect to additional TTY's using `make-tty-device', whether your first frame was a TTY or an X window. This ability is not yet completely finished. The full event-loop capabilities (processes, timeouts, etc.) are available on TTY's. *** New Redisplay Engine ------------------------ The redisplay engine has been rewritten to improve its efficiency and to increase its functionality. It should also be significantly more bug-free than the previous redisplay engine. A line that is not big enough to display at the bottom of the window will normally be clipped (so that it is partially visible) rather than not displayed at all. The variable `pixel-vertical-clip-threshold' can be used to control the minimum space that must be available for a line to be clipped rather than not displayed at all. Tabs are displayed in such a way that things line up fairly well even in the presence of variable-width fonts and/or lines with multiply-sized fonts. Display tables are implemented, through the specifier variable `current-display-table'. They can be buffer-local, window-local, frame-local, or device-local. See below for info about specifiers. *** Toolbar ----------- There is now built-in support for a toolbar. A sample toolbar is visible by default at the top of the frame. Four separate toolbars can be configured (at the top, bottom, left, and right of the frame). The toolbar specification is similar to the menubar specification. The up, down, and disabled glyphs of a toolbar button can be separately controlled. Explanatory text can be echoed in the echo area when the mouse passes over a toolbar button. The size, contents, and visibility of the various toolbars can be controlled on a per-buffer, per-window, per-frame, and per-device basis through the use of specifiers. See the chapter on toolbars in the Lisp Reference Manual (included with XEmacs) for more information. The toolbar color and shadow thicknesses are currently controlled only through `modify-frame-parameters' and through X resources. We are planning on making these controllable through specifiers as well. (Our hope is to make `modify-frame-parameters' obsolete, as it is a clunky and not very powerful mechanism.) Info, GNUS, VM, W3, and various other packages include custom toolbars with them. *** Menubar ----------- Stay-up menus are implemented in the look-alike Motif menubar. The default menubar has been expanded to include most commonly-used functions in XEmacs. The options menu has been greatly expanded to include many more options. The menubar specification format has been greatly expanded. Per-menu activation hooks can be specified through the :filter keyword (thus obsoleting `activate-menubar-hook'); this allows for fast response time when you have a large and complex menu. You can dynamically control whether menu items are present through the :included and :config keywords. (The latter keyword implements a simple menubar configuration scheme, in conjunction with the variable `menubar-configuration'.) Many different menu-item separators (single or double line; solid or dashed; flat, etched-in, or etched-out) are available. See the chapter on menus in the Lisp Reference Manual for more information about all of this. New functions `add-submenu' and `add-menu-button' are available. These supersede the older `add-menu' and `add-menu-item' functions, and provide a more powerful and consistent interface. New convenience functions for popping up the part or all of the menubar in a pop-up menu are available: `popup-menubar-menu' and `popup-buffer-menu'. Menus are now incrementally constructed greatly improving menubar response time. *** Scrollbars -------------- A look-alike Motif scrollbar is now included with XEmacs. No longer will you have to suffer with ugly Athena scrollbars. Windows can now have horizontal scrollbars. Normally they are visible when the window's buffer is set to truncate lines rather than wrap them (e.g. `(setq truncate-lines t)'). All windows, not only the right-most ones, can have vertical scrollbars. The functions to change a scrollbar's width have been superseded by the specifier variables `scrollbar-width' and `scrollbar-height'. This allows their values to be controlled on a buffer-local, window-local, frame-local, and device-local basis. See below. The scrollbars interact better with the event loop (for example, you can type `C-h k', do a scrollbar action, and see a description of this scrollbar action printed as if you had pressed a key sequence or selected a menu item). The scrollbar behavior can be reprogrammed, by advising the `scrollbar-*' functions. *** Key Bindings ---------------- The oft-used function `goto-line' now has its own binding: M-g. New bindings are available for scrolling the "other" window: M-next, M-prior, M-home, M-end. (On many keyboards, `next' and `prior' labelled `PgUp' and `PgDn'.) You can reactivate a deactivated Zmacs region, without having any other effects, with the binding M-C-z. The bindings `M-u', `M-l', and `M-c' now work on the region (if a region is active) or work on a word, as before. Shift-Control-G forces a "critical quit", which drops immediately into the debugger; see below. *** Modeline ------------ The modeline can now have a 3-d look; this is enabled by default. The specifier variable `modeline-shadow-thickness' controls the size. The modeline can now be turned off on a per-buffer, per-window, per-frame, or per-device basis. The specifier variable `has-modeline-p' controls whether the modeline is visible. See below for details about the vastly powerful specifier mechanism. The modeline functions and variables have been renamed to be `*-modeline-*' rather than `*-mode-line-*'. Aliases are provided for all the old names. Variable width fonts now work correctly when used in the modeline. *** Minibuffer, Echo Area ------------------------- The minibuffer is no longer constrained to be one line high. The package rsz-minibuf.el is included to automatically resize the minibuffer when its contents are too big; enable this with `resize-minibuffer-mode'. The echo area is now a true buffer, called " *Echo Area*". This allows you to customize the echo area behavior through before-change-functions and after-change-functions. *** Specifiers -------------- XEmacs has a new concept called "specifiers", used to configure most display options (toolbar size and contents, scrollbar size, face properties, modeline visibility and shadow-thickness, glyphs, display tables, etc.). We are planning on converting all display characteristics to use specifiers, and obsoleting the clunky functions `frame-parameters' and `modify-frame-parameters'. Specifically: -- You can specify values (called "instantiators") for particular "locales" (i.e. buffers, windows, frames, devices, or a global value). When determining what the actual value (or "instance") of a specifier is, the specifications that are provided are searched from most specific (i.e. buffer-local) to most general (i.e. global), looking for a matching one. -- You can specify multiple instantiators for a particular locale. For example, when specifying what the foreground color of a face is in a particular buffer, you could specify two instantiators: "dark sea green" and "green". The color would then be dark sea green on devices that recognize that color, and green on other devices. You have effectively provided a fallback value to make sure you get reasonable behavior on all devices. -- You can add one or more tags to an instantiator, where a tag is a symbol that has been previously registered with XEmacs. This allows you to identify your instantiators for later removal in a way that won't interfere with other applications using the same specifier. Furthermore, particular tags can be restricted to match only particular sorts of devices. Any tagged instantiator will be ignored if the device over which it is being instanced does not match any of its tags. This allows you, for example, to restrict an instantiator to a particular device type (X or TTY) and/or class (color, grayscale, or mono). (You might want to specify, for example, that a particular face is displayed in green on color devices and is underlined on mono devices.) -- A full API is provided for manipulating specifiers, and full documentation is provided in the Lisp Reference Manual. *** Basic Lisp Stuff -------------------- Common-Lisp backquote syntax is recognized. For example, the old expression (` (a b (, c))) can now be written `(a b ,c) The old backquote syntax is still accepted. The new function `type-of' returns a symbol describing the type of a Lisp object (`integer', `string', `symbol', etc.) Symbols beginning with a colon (called "keywords") are treated specially in that they are automatically made self-evaluating when they are interned into `obarray'. The new function `keywordp' returns whether a symbol begins with a colon. `get', `put', and `remprop' have been generalized to allow you to set and retrieve properties on many different kinds of objects: symbols, strings, faces, glyphs, and extents (for extents, however, this is not yet implemented). They are joined by a new function `object-plist' that returns all of the properties that have been set on an object. New functions `plists-eq' and `plists-equal' are provided for comparing property lists (a property list is an alternating list of keys and values). The Common-Lisp functions `caar', `cadr', `cdar', `cddr', `caaar', etc. (up to four a's and/or d's), `first', `second', `third', etc. (up to `tenth'), `last', `rest', and `endp' have been added, for more convenient manipulation of lists. New function `mapvector' maps over a sequence and returns a vector of the results, analogous to `mapcar'. New functions `rassoc', `remassoc', `remassq', `remrassoc', and `remrassq' are provided for working with alists. New functions `defvaralias', `variable-alias' and `indirect-variable' are provided for creating variable aliases. Strings have a modified-tick that is bumped every time a string is modified in-place with `aset' or `fillarray'. This is retrieved with the new function `string-modified-tick'. New macro `push' destructively adds an element to the beginning of a list. New macro `pop' destructively removes and returns the first element of a list. *** Buffers ----------- Most functions that operate on buffer text now take an optional BUFFER argument, specifying which buffer they operate on. (Previously, they always operated on the current buffer.) The new function `transpose-regions' is provided, ported from GNU Emacs. The new function `save-current-buffer' works like `save-excursion' but only saves the current buffer, not the location of point in that buffer. *** Devices ----------- XEmacs has a new concept of "device", which is represents a particular X display or TTY connection. `make-frame' has a new, optional device parameter that allows you to specify which device the frame is to be created on. Multiple simultaneous TTY and/or X connections may be made. The specifier mechanism provides reasonable behavior of glyphs, faces, etc. over heterogeneous device types and over devices whose individual capabilities may vary. There is also a device type called "stream" that represents a STDIO device that has no redisplay or cursor-motion capabilities, such as the "glass terminal" that XEmacs uses when it is run noninteractively. There is not all that much you can do with stream devices currently; please let us know if there are good uses you can think of for this capability. (For example, log files?) A new device API is provided. Functions are provided such as `device-name' (the name of the device, which generally is based on the X display or TTY file name), `device-type' (X, TTY, or stream), `device-class' (color, grayscale, or mono), etc. See the Lisp Reference Manual. Many functions have been extended to contain an additional, optional device argument, where such an extension makes sense. In general, if the argument is omitted, it is equivalent to specifying `(selected-device)'. Many previous functions and variables are obsoleted in favor of the device API. For example, `window-system' is obsoleted by `device-type', and `x-color-display-p' and friends are obsoleted by `device-class'. *** NOTE **: The obsolete variable `window-system' is going to be deleted soon, probably in 19.14. Please correct all your code to use `device-type'. *** INCOMPATIBLE CHANGE **: The function `x-display-visual-class' returns different values from previous versions of XEmacs. *** Errors, Warnings, C-g ------------------------- There is a new warnings system implemented. Many warnings that were formerly displayed in various ad-hoc ways (e.g. warnings about screwy modifier mappings, messages about failures handling the mouse cursor and errors in a gc-hook) have been regularized through this system. The new function `warn' displays a warning before the next redisplay (the actually display of the warning messages is accomplished through `display-warning-buffer'). Both `warn' and `display-warning-buffer' are Lisp functions (the C code calls out to them as necessary), and thus you can customize the warning system. Under an X display, you can press Shift-Control-G to force a "critical quit". This will immediately display a backtrace and pop you into the debugger, regardless of the settings of `inhibit-quit' and `debug-on-quit'. C-g now works properly even on systems that don't implement SIGIO or for which SIGIO is broken (e.g. IRIX 5.3 and older versions of Linux). In addition, the SIGIO support has been fixed for many systems on which it didn't always work properly before (e.g. HPUX and Solaris). *** Events ---------- *** INCOMPATIBLE CHANGE **: Many event functions have been changed to accept and return windows instead of frames. New function: `event-live-p', specifying whether `deallocate-event' has been called on an event. The "menu event" type has been renamed to "misc-user event", and encompasses scrollbar events as well as menu events. We are planning on making it also encompass toolbar events in a future release. New functions are provided for determining whether an particular sections of a frame: `event-over-border-p', `event-over-glyph-p', `event-over-modeline-p', `event-over-text-area-p', and `event-over-toolbar-p'. The old, kludgey methods of checking the window-height, the internal-border-width, etc. are unreliable and should not be used. New functions `event-window-x-pixel' and `event-window-y-pixel' are provided for determining where in a particular window an event happened. New functions `event-glyph-x-pixel' and `event-glyph-y-pixel' are provided for determining where in a particular glyph an event happened. New function `event-closest-point', which returns the closest buffer position to the event even if the event did not occur over any text. New variable `unread-command-events', superseding the older `unread-command-event'. Many event-loop bugs have been fixed. *** Extents ----------- The extent code has been largely rewritten. It should be faster and more reliable. The text-property implementation has been greatly improved. Some new extent primitives are provided to return the position of the next or previous property change in a buffer. Extents can now have a parent specified; then all of its properties (except for the buffer it's in and its position in that buffer) come from that extent. Hierarchies of such extents can be created. Extents now have a `detachable' property that controls what happens (they either get detached or shrink down to zero-length) when their text is deleted. Previously, such extents would always be detached. The `invisible' property on extents now works. `map-extents' has three additional parameters that provide more control over which extents are mapped. `map-extents' deals better with changes made to extents in the buffer being mapped over. A new function `mapcar-extents' (an alternative to `map-extents') has been provided and should be easier to use than `map-extents'. *** Faces --------- Faces can now be buffer-local, window-local, and device-local as well as frame-local, and can be further restricted to a particular device type or class. The way in which faces can be controlled is now based on the general and powerful specifier mechanism; see above. The new function `set-face-property' generalizes `set-face-font', `set-face-foreground', etc. and takes many new optional arguments, in accordance with the new specifier mechanism. The new functions `face-property' and `face-property-instance' generalize `face-font', `face-foreground', etc. and take many new optional arguments, in accordance with the new specifier mechanism. (`face-property' returns the value, if any, that was specified for a particular locale, and `face-property-instance' returns the actual value that will be used for display. See the section on specifiers.) The functions `face-font', `face-foreground', `face-background', `set-face-font', `set-face-foreground', `set-face-background', etc. are now convenience functions, trivially implemented using `face-property' and `set-face-property' and take new optioanl arguments in accordance with those functions. New convenience functions `face-font-instance', `face-foreground-instance', `face-background-instance', etc. are provided and are trivially implemented using `face-property-instance'. Inheritance of face properties can now be specified. Each individual face property can inherit differently from other properties, or not inherit at all. You can set user-defined properties on faces using `set-face-property'. You can create "temporary" faces, which are faces that disappear when they are no longer in use. This is as opposed to normal faces, which stay around forever. The function `make-face' takes a new optional argument specifying whether a face should be permanent or temporary, and returns the actual face object rather than the face symbol, as in previous versions of XEmacs. The function `face-list' takes a new optional argument specifying whether permanent, temporary, or both kinds of faces should be returned. Faces have new TTY-specific properties: `highlight', `reverse', `alternate', `blinking', and `dim'. Redisplay is smarter about dealing with face changes: changes to a particular face no longer cause all frames to be cleared and redisplayed. The Edit-Faces package is provided for interactively changing faces. A menu item on the options menu is provided for this. New functions are provided for retrieving the ascent, descent, height, and width of a character in a particular face. *** Fonts, Colors ----------------- *** INCOMPATIBLE CHANGE **: The old "font" and "pixel" objects are gone. In place are new objects "font specifier", "font instance", "color specifier", and "color instance". Functions `font-name', `pixel-name' (an obsolete alias for `color-name'), etc. are now convenience functions for working with font and color specifiers. Old code that is not too sophisticated about working with font and pixel objects may still work, though. (For example, the idiom `(font-name (face-font 'default))' still works.) You can now extract the RGB components of a color-instance object (similar to the old pixel object) with the function `color-instance-rgb-components'. There is also a convenience function `color-rgb-components' for working with color specifiers. If there are no more colors available in the colormap, the nearest existing color will be used when allocating a new color. *** Frames ---------- What used to be called "screens" are now called "frames", for clarity and consistency with GNU Emacs. Aliases are provided for all the old screen functions and variables, to avoid introducing a huge E-Lisp incompatibility. The frame code has been merged with GNU Emacs 19.28, providing improved functionality for many functions. *** Glyphs, Images, and Pixmaps ------------------------------- Glyphs (used in various places, i.e. as begin-glyphs and end-glyphs attached to extents and appearing in a buffer or in marginal annotations; as the truncator and continuor glyphs marking line wrap or truncation; as an overlay at the beginning of a line; as the displayable element in a toolbar button; etc.) can now be buffer-local, window-local, frame-local, and device-local, and can be further restricted to a particular device type or class. The way in which faces can be controlled is now based on the general and powerful specifier mechanism; see above. *** INCOMPATIBLE CHANGE **: The glyph and pixmap API has been completely overhauled. A new Lisp object "glyph" is provided and should be used where the old "pixmap" object would have been used. The pixmap object exists no longer. There are also new Lisp objects "image specifier" and "image instance" (an image-instance is the closest equivalent to what a pixmap object was). More work on glyphs and images is slated for 19.13. The glyph and image docs in the Lisp Reference Manual are incomplete and will be finished in 19.13. The new function `set-glyph-property' allows setting of all the glyph properties (`baseline', `contrib-p', etc.). Convenience functions for particular properties are also provided, just like for faces. You can set user-defined properties on glyphs using the new function `set-glyph-property'. When displaying pixmaps, existing, closest-matching colors will be used if the colormap is full. If the compface library is compiled into XEmacs, there is built-in support for displaying X-Face bitmaps. (These are typically small pictures of people's faces, included in a mail message through the X-Face: header.) VM and highlight-headers will automatically use the built-in X-Face support if it is available. Annotations in the right margin (as well as the left margin) are now implemented. The left and right margin width functions have been superseded by the specifier variables `left-margin-width' and `right-margin-width', allowing much more flexible control through the specifier mechanism. *** INCOMPATIBLE CHANGE **: The variable `use-left-overflow', for controlling annotations in the left margin, is now a specifier variable instead of a buffer-local variable. (There is also a new variable `use-right-overflow', that is complementary.) *** Hashing ----------- Two new types of weak hashtables can be created: key-weak and value-weak. In a key-weak hashtable, an entry remains around if its key is referenced elsewhere, regardless of whether this is also the case for the value. Value-weak hashtables are complementary. (This is as opposed to the traditional weak hashtables, where an entry remains around only if both the key and value are referenced elsewhere.) New functions `make-key-weak-hashtable' and `make-value-weak-hashtable' are provided for creating these hashtables. The new function `md5' is provided for performing an MD5 hash of an object. MD5 is a secure message digest algorithm developed by RSA, inc. *** Keymaps ----------- The GNU Emacs concept of `function-key-map' is now partially implemented. This allows conversion of function-key escape sequences such as `ESC [ 1 1 ~' into an equivalent human-readable keysym such as `F1'. This work will be completed in 19.14. The function-key map is device-local and controllable through the functions `device-function-key-map' and `set-device-function-key-map'. `where-is-internal' now correctly searches minor-mode keymaps, extent-local keymaps, etc. As a side effect of this, menu items will now correctly show the keyboard equivalent for commands that are available through a minor-mode keymap, extent-local keymap, etc. *** INCOMPATIBLE CHANGE **: The modifier key "Symbol" has been renamed to "Alt", for compatibility with the rest of the world. Keep in mind that on many keyboards, the key labelled "Alt" actually generates the "Meta" modifier. (On Sun keyboards, however, the key labelled "Alt" does indeed generate the "Alt" modifier, and the key labelled with a diamond generates the "Meta" modifier.) *** Mouse, Active Region ------------------------ The mouse internals in mouse.el have been rewritten. Hooks have been provided for easier customization of mouse behavior. For example, you can now easily specify an action to be invoked on single-click (i.e. down-up without appreciable motion), double-click, drag-up, etc. Some code from GNU Emacs has been ported over, generalizing some of the X-specific mouse stuff. *** INCOMPATIBLE CHANGE **: The function `set-mouse-position' accepts a window instead of a frame. New function `mouse-position' that obsoletes and is more powerful than `read-mouse-position'. New functions `mouse-pixel-positon' and `set-mouse-pixel-position' for working with pixels instead of characters. The active (Zmacs) region is now highlighted using the `zmacs-region-face' instead of the `primary-selection-face'; this generalizes what used to be X-specific. New functions `region-active-p', `region-exists-p', and `activate-region' provide a uniform API for dealing with the region irrespective of whether the variable `zmacs-regions' is set. XEmacs is now a better X citizen with respect to the primary selection: it does not stomp on the primary selection quite so much. This makes things more manageable if you set `zmacs-regions' to nil. *** Processes ------------- Various process race conditions and bugs have been fixed. Problems with process termination not getting noticed until much later (if at all) should be gone now, as well as problems with zombie processes under some systems. SOCKS support is now included. SOCKS is a package that allows hosts behind a firewall to gain full access to the Internet without requiring direct IP reachability. *** Windows ----------- Windows 95 is still not out yet. *** INCOMPATIBLE CHANGE **: The functions `locate-window-from-coordinates' and `window-edges' have been eliminated. It no longer makes sense to work with windows in terms of character positions, because windows can (and often do) have many differently-sized fonts in them, because the 3-D modeline is not exactly one line high, etc. The new functions `window-pixel-edges', `window-highest-p', `window-lowest-p', `frame-highest-window', and `frame-lowest-window' are provided as substitutes for the above-mentioned, deleted functions. The function `window-end' now takes an optional GUARANTEE argument that will ensure that the value is actually correct as of the next redisplay. The window code has been merged with GNU Emacs 19.28, providing improved functionality for many functions. *** System-Specific Information ------------------------------- Georg Nikodym's dynodump package is provided, for proper unexec()ing on Solaris systems. Executables built on Solaris 2.3 can now run on Solaris 2.4 without crashing; similarly with executables built on one type of Sun machine and run on another. AIX 4.x is supported. The NeXTstep operating system is supported in TTY mode (this is still in beta). There are plans to port XEmacs to the NeXTstep window system, but it may be awhile before this is complete. Problems with the `round' function causing arithmetic errors on HPUX 9 have been fixed. You can now build XEmacs as an ELF executable on Linux systems that support ELF. Various other new system configurations are supported. ** Major Differences Between 19.10 and 19.11 ============================================ The name has changed from "Lucid Emacs" to "XEmacs". Along with this is a new canonical ftp site: cs.uiuc.edu:/pub/xemacs. XEmacs now has its very own World Wide Web page! It contains a complete list of the FTP distribution sites, the most recent FAQ, pointers to Emacs Lisp packages not included with the distribution, and other useful stuff. Check it out at http://xemacs.cs.uiuc.edu/. A preliminary New Users Guide. cc-mode.el now provides the default C, C++ and Objective-C modes. The primary goal of this release is stability. Very few new features have been introduced but lots of bugs have been fixed. Many of the Emacs Lisp packages have been updated. Some of the new Emacs Lisp packages --- tcl-mode.el: major mode for editing TCL code fast-lock.el: saves and restores font-lock highlighting, greatly reducing the time necessary for loading a font-lock'ed file ps-print.el: prints buffers to Postscript printers preserving the buffer's bold and italic text attributes toolbar.el: provides a "fake" toolbar for use with XEmacs (an integrated one will be included with 19.12) ** Major Differences Between 19.9 and 19.10 =========================================== The GNU `configure' system is now used to build lemacs. The Emacs Manual and Emacs Lisp Reference Manual now document version 19.10. If you notice any errors, please let us know. When pixmaps are displayed in a buffer, they contribute to the line height - that is, if the glyph is taller than the rest of the text on the line, the line will be as tall as necessary to display the glyph. In addition to using arbitrary sound files as emacs beeps, one can control the pitch and duration of the standard X beep, on X servers which allow that (Note: most don't.) There is support for playing sounds on systems with NetAudio servers. Minor modes may have mode-specific key bindings; keymaps may have an arbitrary number of parent maps. Menus can have toggle and radio buttons in them. There is a font selection menu. Some default key bindings have changed to match FSF19; the new bindings are Screen-related commands: C-x 5 2 make-screen C-x 5 0 delete-screen C-x 5 b switch-to-buffer-other-screen C-x 5 f find-file-other-screen C-x 5 C-f find-file-other-screen C-x 5 m mail-other-screen C-x 5 o other-screen C-x 5 r find-file-read-only-other-screen Abbrev-related commands: C-x a l add-mode-abbrev C-x a C-a add-mode-abbrev C-x a g add-global-abbrev C-x a + add-mode-abbrev C-x a i g inverse-add-global-abbrev C-x a i l inverse-add-mode-abbrev C-x a - inverse-add-global-abbrev C-x a e expand-abbrev C-x a ' expand-abbrev Register-related commands: C-x r C-SPC point-to-register C-x r SPC point-to-register C-x r j jump-to-register C-x r s copy-to-register C-x r x copy-to-register C-x r i insert-register C-x r g insert-register C-x r r copy-rectangle-to-register C-x r c clear-rectangle C-x r k kill-rectangle C-x r y yank-rectangle C-x r o open-rectangle C-x r t string-rectangle C-x r w window-configuration-to-register Narrowing-related commands: C-x n n narrow-to-region C-x n w widen Other changes: C-x 3 split-window-horizontally (was undefined) C-x - shrink-window-if-larger-than-buffer C-x + balance-windows The variable allow-deletion-of-last-visible-screen has been removed, since it was widely hated. You can now always delete the last visible screen if there are other iconified screens in existence. ToolTalk support is provided. An Emacs screen can be placed within an "external client widget" managed by another application. This allows an application to use an Emacs screen as its text pane rather than the standard Text widget that is provided with Motif or Athena. Additional compatibility with Epoch is provided (though this is not yet complete.) ** Major Differences Between 19.8 and 19.9 ========================================== Scrollbars! If you have Motif, these are real Motif scrollbars; otherwise, Athena scrollbars are used. They obey all the usual resources of their respective toolkits. There is now an implementation of dialog boxes based on the Athena widgets, as well as the existing Motif implementation. This release works with Motif 1.2 as well as 1.1. If you link with Motif, you do not also need to link with Athena. If you compile lwlib with both USE_MOTIF and USE_LUCID defined (which is the recommended configuration) then the Lucid menus will draw text using the Motif string-drawing library, instead of the Xlib one. The reason for this is that one can take advantage of the XmString facilities for including non-Latin1 characters in resource specifications. However, this is a user-visible change in that, in this configuration, the menubar will use the "*fontList" resource in preference to the "*font" resource, if it is set. It's possible to make extents which are copied/pasted by kill and undo. There is an implementation of FSF19-style text properties based on this. There is a new variable, minibuffer-max-depth, which is intended to circumvent a common source of confusion among new Emacs users. Since, under a window system, it's easy to jump out of the minibuffer (by doing M-x, then getting distracted, and clicking elsewhere) many, many novice users have had the problem of having multiple minibuffers build up, even to the point of exhausting the lisp stack. So the default behavior is to disallow the minibuffer to ever be reinvoked while active; if you attempt to do so, you will be prompted about it. There is a new variable, teach-extended-commands-p, which if set, will cause `M-x' to remind you of any key bindings of the command you just invoked the "long way." There are menus in Dired, Tar, Comint, Compile, and Grep modes. There is a menu of window management commands on the right mouse button over the modelines. Popup menus now have titles at the top; this is controlled by the new variable `popup-menu-titles'. The `Find' key on Sun keyboards will search for the next (or previous) occurrence of the selected text, as in OpenWindows programs. The `timer' package has been renamed to `itimer' to avoid a conflict with a different package called `timer'. VM 5.40 is included. W3, the emacs interface to the World Wide Web, is included. Felix Lee's GNUS speedups have been installed, including his new version of nntp.el which makes GNUS efficiently utilize the NNTP XOVER command if available (which is much faster.) GNUS should also be much friendlier to new users: it starts up much faster, and doesn't (necessarily) subscribe you to every single newsgroup. The byte-compiler issues a new class of warnings: variables which are bound but not used. This is merely an advisory, and does not mean the code is incorrect; you can disable these warnings in the usual way with the `byte-compiler-options' macro. the `start-open' and `end-open' extent properties, for specifying whether characters inserted exactly at a boundary of an extent should go into the extent or out of it, now work correctly. The `extent-data' slot has been generalized/replaced with a property list, so it's easier to attach arbitrary data to extent objects. The `event-modifiers' and `event-modifier-bits' functions work on motion events as well as other mouse and keyboard events. Forms-mode uses fonts and read-only regions. The behavior of the -geometry command line option should be correct now. The `iconic' screen parameter works when passed to x-create-screen. The user's manual now documents Lucid Emacs 19.9. The relocating buffer allocator is turned on by default; this means that when buffers are killed, their storage will be returned to the operating system, and the size of the emacs process will shrink. CAVEAT: code which contains calls to certain `face' accessor functions will need to be recompiled by version 19.9 before it will work. The functions whose callers must be recompiled are: face-font, face-foreground, face-background, face-background-pixmap, and face-underline-p. The symptom of this problem is the error "Wrong type argument, arrayp, #". The .elc files generated by version 19.9 will work in 19.6 and 19.8, but older .elc files which contain calls to these functions will not work in 19.9. Work In Progress: - We have been in the process of internationalizing Lucid Emacs. This code is ***not*** ready for general use yet. However, the code is included (and turned off by default) in this release. - If you define I18N2 at compile-time, then sorting/collation will be done according to the locale returned by setlocale(). - If you define I18N3 at compile-time, then all messages printed by lemacs will be filtered through the gettext() library routine, to enable the use of locale-specific translation catalogues. The current implementation of this is quite dependent on Solaris 2, and has a very large impact on existing code, therefore we are going to be making major changes soon. (You'll notice calls to `gettext' and `GETTEXT' scattered around much of the lisp and C code; ignore it, this will be going away.) - If you define I18N4 at compile-time, then lemacs will internally use a wide representation of characters, enabling the use of large character sets such as Kanji. This code is very OS dependent: it requires X11R5, and several OS-supplied library routines for reading and writing wide characters (getwc(), putwc(), and a few others.) Performance is also a problem. This code is also scheduled for a major overhaul, with the intent of improving performance and portability. Our eventual goal is to merge with MULE, or at least provide the same base level of functionality. If you would like to help out with this, let us know. - Other work-in-progress includes Motif drag-and-drop support, ToolTalk support, and support for embedding an Emacs widget inside another application (where it can function as that other application's text-entry area). This code has not been extensively tested, and may (or may not) have portability problems, but it's there for the adventurous. Comments, suggestions, bug reports, and especially fixes are welcome. But have no expectations that this experimental code will work at all. ** Major Differences Between 19.6 and 19.8 ========================================== There were almost no differences between versions 19.6 and 19.7; version 19.7 was a bug-fix release that was distributed with Energize 2.1. Lucid Emacs 19.8 represents the first stage of the Lucid Emacs/Epoch merger. The redisplay engine now in lemacs is an improved descendant of the Epoch redisplay. As a result, many bugs have been eliminated, and several disabled features have been re-enabled. Notably: Selective display (and outline-mode) work. Horizontally split windows work. The height of a line is the height of the tallest font displayed on that line; it is possible for a screen to display lines of differing heights. (Previously, the height of all lines was the height of the tallest font loaded.) There is lisp code to scale fonts up and down, for example, to load the next- taller version of a font. There is a new internal representation for lisp objects, giving emacs-lisp 28 bit integers and a 28 bit address space, up from the previous maximum of 26. We expect eventually to increase this to 30 bit integers and a 32 bit address space, eliminating the need for DATA_SEG_BITS on some architectures. (On 64 bit machines, add 32 to all of these numbers.) GC performance is improved. Various X objects (fonts, colors, cursors, pixmaps) are accessible as first- class lisp objects, with finalization. An alternate interface to embedding images in the text is provided, called "annotations." You may create an "annotation margin" which is whitespace at the left side of the screen that contains only annotations, not buffer text. When using XPM files, one can specify the values of logical color names to be used when loading the files. It is possible to resize windows by dragging their modelines up and down. More generally, it is possible to add bindings for mouse gestures on the modelines. There is support for playing sound files on HP machines. ILISP version 5.5 is included. The Common Lisp #' read syntax is supported (#' is to "function" as ' is to "quote".) The `active-p' slot of menu items is now evaluated, so one can put arbitrary lisp code in a menu to decide whether that item should be selectable, rather than doing this with an `activate-menubar-hook'. The X resource hierarchy has changed slightly, to be more consistent. It used to be argv[0] SCREEN-NAME pane screen ApplicationShell EmacsShell Paned EmacsFrame now it is argv[0] shell pane SCREEN-NAME ApplicationShell EmacsShell Paned EmacsFrame The Lucid Emacs sources have been largely merged with FSF version 19; this means that the lisp library contains the most recent releases of various packages, and many new features of FSF 19 have been incorporated. Because of this, the lemacs sources should also be substantially more portable. ** Major Differences Between 19.4 and 19.6 ========================================== There were almost no differences between versions 19.4 and 19.5; we fixed a few minor bugs and repacked 19.4 as 19.5 for a CD-ROM that we gave away as a trade show promotion. The primary goal of the 19.6 release is stability, rather than improved functionality, so there aren't many user-visible changes. The most notable changes are: - The -geometry command-line option now correctly overrides geometry specifications in the resource database. - The `width' and `height' screen-parameters work. - Font-lock-mode considers the comment start and end characters to be a part of the comment. - The lhilit package has been removed. Use font-lock-mode instead. - vm-isearch has been fixed to work with isearch-mode. - new versions of ispell and calendar. - sccs.el has menus. Lots of bugs were fixed, including the problem that lemacs occasionally grabbed the keyboard focus. Also, as of Lucid Emacs 19.6 and Energize 2.0 (shipping now) it is possible to compile the public release of Lucid Emacs with support for Energize; so now Energize users will be able to build their own Energize-aware versions of lemacs, and will be able to use newer versions of lemacs as they are released to the net. (Of course, this is not behavior covered by your Energize support contract; you do it at your own risk.) I have not incorporated all portability patches that I have been sent since 19.4; I will try to get to them soon. However, if you need to make any changes to lemacs to get it to compile on your system, it would be quite helpful if you would send me context diffs (diff -c) against version 19.6. ** Major Differences Between 19.3 and 19.4 ========================================== Prototypes have been added for all functions. Emacs compiles in the strict ANSI modes of lcc and gcc, so portability should be vastly improved. Many many many many core leaks have been plugged, especially in screen creation and deletion. The float support reworked to be more portable and ANSI conformant. This resulted in these new configuration parameters: HAVE_INVERSE_HYPERBOLIC, HAVE_CBRT, HAVE_RINT, FLOAT_CHECK_ERRNO, FLOAT_CATCH_SIGILL, FLOAT_CHECK_DOMAIN. Let us know if you had to change the defaults on your architecture. The SunOS unexec has been rewritten, and now works with either static or dynamic libraries, depending on whether -Bstatic or -Bdynamic were specified at link-time. Small (character-sized) bitmaps can be mixed in with buffer text via the new functions set-extent-begin-glyph and set-extent-end-glyph. (This is actually a piece of functionality that Energize has been using for a while, but we've just gotten around to making it possible to use it without Energize. See how nice we are? Go buy our product.) If compiled with Motif support, one can pop up dialog boxes from emacs lisp. We encourage someone to contribute Athena an version of this code; it shouldn't be much work. If dialog boxes are available, then y-or-n-p and yes-or-no-p use dialog boxes instead of the minibuffer if invoked as a result of a command that was executed from a menu instead of from the keyboard. Multiple screen support works better; check out doc of get-screen-for-buffer. The default binding of backspace is the same as delete. (C-h is still help.) A middle click while the minibuffer is active does completion if you click on a highlighted completion, otherwise it executes the global binding of button2. New versions of Barry Warsaw's c++-mode and syntax.c. Font-lock-mode works with C++ mode now. The semantics of activate-menubar-hook has changed; the functions are called with no arguments now. `truename' no longer hacks the automounter; use directory-abbrev-alist instead. Most minibuffer handling has been reimplemented in emacs-lisp. There is now a builtin minibuffer history mechanism which replaces gmhist. ** Major Differences Between 19.2 and 19.3 ========================================== The ISO characters have correct case and syntax tables now, so the word-motion and case-converting commands work sensibly on them. If you set ctl-arrow to an integer, you can control exactly which characters are printable. (There will be a less crufty way to do this eventually.) Menubars can now be buffer local; the function set-screen-menubar no longer exists. Look at GNUS and VM for examples of how to do this, or read menubar.el. When emacs is reading from the minibuffer with completions, any completions which are visible on the screen will highlight when the mouse moves over them; clicking middle on a completion is the same as typing it at the minibuffer. Some implications of this: The *Completions* buffer is always mousable. If you're using the completion feature of find-tag, your source code will be mousable when you type M-. Dired buffers will be mousable as soon as you type ^X^F. And so on. The old isearch code has been replaced with a descendant of Dan LaLiberte's excellent isearch-mode; it is more customizable, and generally less bogus. You can search for "composed" characters. There are new commands, too; see the doc for ^S, or the NEWS file. A patched GNUS 3.14 is included. The user's manual now documents Lucid Emacs 19.3. A few more modes have mouse and menu support. The startup code should be a little more robust, and give you more reasonable error messages when things aren't installed quite right (instead of the ubiquitous "cannot open DISPLAY"...) Subdirectories of the lisp directory whose names begin with a hyphen or dot are not automatically added to the load-path, so you can use this to avoid accidentally inflicting experimental software on your users. I've tried to incorporate all of the portability patches that were sent to me; I tried to solve some of the problems in different ways than the patches did, so let me know if I missed something. Some systems will need to define NEED_STRDUP, NEED_REALPATH, HAVE_DREM, or HAVE_REMAINDER in config.h. Really this should be done in the appropriate s- or m- files, but I don't know which systems need these and which don't. If yours does, let me know which file it should be in. Check out these new packages: blink-paren.el: causes the matching parenthesis to flash on and off whenever the cursor is sitting on a paren-syntax character. pending-del.el: Certain commands implicitly delete the highlighted region: Typing a character when there is a highlighted region replaces that region with the typed character. font-lock.el: A code-highlighting package, driven off of syntax tables, so that it understands block comments, strings, etc. The insertion hook is used to fontify text as you type it in. shell-font.el: Displays your shell-buffer prompt in boldface. xemacs-21.4.22/etc/ORDERS0000644000175000017500000041750106256071510012746 0ustar acsacs Note: this file describes how you order software from the Free Software Foundation directly. Information on getting XEmacs can be found in the file DISTRIB. The actual order form follows the descriptions of media contents. Most of this file is excerpted from the January 1996 GNU's Bulletin. Please send suggestions for improvements to gnu@prep.ai.mit.edu or the postal address at the end of the order form. Thank You. ----------------------------------------------------------------------------- FSF Order Form with Descriptions January, 1996 Free Software Foundation, Inc. Telephone: +1-617-542-5942 59 Temple Place - Suite 330 Fax: (including Japan) +1-617-542-2652 Boston, MA 02111-1307 USA Electronic mail: `gnu@prep.ai.mit.edu' ----------------------------------------------------------------------------- There are some sections (e.g. ``Forthcoming GNUs'' and ``How to Get GNU Software'') which are not in this Order Form file. If you wish to see them, ask gnu@prep.ai.mit.edu for the complete June, 1995 GNU's Bulletin. Table of Contents ----------------- Donations Translate Into Free Software Cygnus Matches Donations! Free Software Redistributors Donate Help from Free Software Companies Major Changes in GNU Software and Documentation The Deluxe Distribution GNU Documentation GNU Software Program/Package Cross Reference Tapes Languages Tape Lisps and Emacs Tape Utilities Tape Scheme Tape X11 Tapes Berkeley 4.4BSD-Lite Tape VMS Emacs and VMS Compiler Tapes CD-ROMs Pricing of the GNU CD-ROMs December 1995 Compiler Tools Binaries CD-ROM December 1994 Compiler Tools Binaries CD-ROM December 1993 Compiler Tools Binaries CD-ROM Source Code CD-ROMs December 1995 Source Code CD-ROMs June 1995 Source Code CD-ROM May 1994 Source Code CD-ROM November 1993 Source Code CD-ROM MS-DOS Book with CD-ROM Debian GNU/Linux Book with CD-ROM MS-DOS Diskettes DJGPP Diskettes Emacs Diskettes Selected Utilities Diskettes Windows Diskette Tape & CD-ROM Subscription Service FSF T-shirt Free Software Foundation Order Form ----------------------------------------------------------------------------- Donations Translate Into Free Software ************************************** If you appreciate Emacs, GNU CC, Ghostscript, and other free software, you may wish to help us make sure there is more in the future--remember, *donations translate into more free software!* Your donation to us is tax-deductible in the United States. We gladly accept *any* currency, although the U.S. dollar is the most convenient. If your employer has a matching gifts program for charitable donations, please arrange to: add the FSF to the list of organizations for your employer's matching gifts program; and have your donation matched (note *Note Cygnus Matches Donations!::). If you do not know, please ask your personnel department. Circle amount you are donating, cut out this form, and send it with your donation to: Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA $500 $250 $100 $50 Other $________ Other currency:________ You can charge a donation to any of Carte Blanche, Diner's Club, JCB, MasterCard, Visa, or American Express. Charges may also be faxed to +1-617-542-2652. Card type: __________________ Expiration Date: _____________ Account Number: _____________________________________________ Cardholder's Signature: _____________________________________ Name: _______________________________________________________ Street Address: _____________________________________________ City/State/Province: ________________________________________ Zip Code/Postal Code/Country: _______________________________ Cygnus Matches Donations! ************************* To encourage cash donations to the Free Software Foundation, Cygnus Support will continue to contribute corporate funds to the FSF to accompany gifts by its employees, and by its customers and their employees. Donations payable to the Free Software Foundation should be sent by eligible persons to Cygnus Support, which will add its gifts and forward the total to the FSF each quarter. The FSF will provide the contributor with a receipt to recognize the contribution (which is tax-deductible on U.S. tax returns). For more information, please contact Cygnus: Cygnus Support 1937 Landings Drive Mountain View, CA 94043 USA Telephone: 415-903-1400 +1-800-Cygnus1 (-294-6871) Fax: 415-903-0122 Electronic-Mail: `info@cygnus.com' FTP: `ftp.cygnus.com' WWW: `http://www.cygnus.com/' Free Software Redistributors Donate *********************************** The SNOW 2.1 CD producers added the words "Includes $5 donation to the FSF" to the front of their CD. Potential buyers will know just how much of the price is for the FSF & how much is for the redistributor. The Sun Users Group Deutschland & ASCII Corporation (Japan) have added donations to the FSF to the price of their next GNU software CD-ROMs. Austin Code Works, a free software redistributor, supports free software development by giving the FSF 20% of the selling price for the GNU software CDs they produce & sell. Walnut Creek CDROM & Info Magic, free software redistributors, are also giving us part of their selling price. TOHDO-SHA is donating 400 yen to the FSF for each copy of `The GNU Emacs Lisp Reference Manual, Japanese Edition' sold at bookstores in Japan. CQ Publishing made a large donation from the sales of their GAWK book in Japanese. In the long run, the success of free software depends on how much new free software people develop. Free software distribution offers an opportunity to raise funds for such development in an ethical way. These redistributors have made use of the opportunity. Many others let it go to waste. You can help promote free software development by convincing for-a-fee redistributors to contribute--either by doing development themselves or by donating to development organizations (the FSF and others). The way to convince distributors to contribute is to demand and expect this of them. This means choosing among distributors partly by how much they give to free software development. Then you can show distributors they must compete to be the one who gives the most. To make this work, you must insist on numbers that you can compare, such as, "We will give ten dollars to the Foobar project for each disk sold." A vague commitment, such as "A portion of the profits is donated," doesn't give you a basis for comparison. Even a precise fraction "of the profits from this disk" is not very meaningful, since creative accounting and unrelated business decisions can greatly alter what fraction of the sales price counts as profit. Also, press developers for firm information about what kind of development they do or support. Some kinds make much more long-term difference than others. For example, maintaining a separate version of a GNU program contributes very little; maintaining a program on behalf of the GNU Project contributes much. Easy new ports contribute little, since someone else would surely do them; difficult ports such as adding a new CPU to the GNU compiler or Mach contribute more; major new features and programs contribute the most. By establishing the idea that supporting further development is "the proper thing to do" when distributing free software for a fee, we can assure a steady flow of resources for making more free software. Help from Free Software Companies ********************************* When choosing a free software business, ask those you are considering how much they do to assist free software development, e.g., by contributing money to free software development or by writing free software improvements themselves for general use. By basing your decision partially on this factor, you can help encourage those who profit from free software to contribute to its growth. Wingnut (SRA's special GNU support group) regularly donates a part of its income to the FSF to support the development of new GNU programs. Listing them here is our way of thanking them. Wingnut has made a pledge to donate 10% of their income to the FSF, and has purchased several Deluxe Distribution packages in Japan. Also see *Note Cygnus Matches Donations!::. Wingnut Project Software Research Associates, Inc. 1-1-1 Hirakawa-cho, Chiyoda-ku Tokyo 102, Japan Phone: (+81-3)3234-2611 Fax: (+81-3)3942-5174 E-mail: `info-wingnut@sra.co.jp' WWW: `http://www.sra.co.jp/public/sra/product/wingnut/' Major Changes in GNU Software and Documentation *********************************************** * A New FSF T-shirt! (*Note FSF T-shirt::) We have a new T-shirt. This design was inspired by the cover of the `GNU Emacs Lisp Reference Manual'. * GNU Emacs 19.30 (*Note GNU Software::) We have just released Emacs 19.30. New features include support for menu bars on text-only terminals, a total rewrite of GNUS, multiple frames on Windows NT and Windows 95, & many others. * New Programs on the Tapes (*Note GNU Software::) `gettext' is now on the *Note Languages Tape::. Termutils & Midnight Commander have been added to the *Note Utilities Tape::. CLX has been added to the *Note Lisps/Emacs Tape::. Newer versions of many of our programs & manuals have been placed on all the media we distribute. * New Source Code CD! We have just released the December 1995 Source Code CD-ROMs (Edition 7). Due to increasing amounts of GNU Software, the Source Code CD is now a two disc set--the price remains unchanged! The new programs included are: apache, CLX, Elisp archive, `ffcall', `gettext', GN, Gnans, `gnuserv', Hyperbole, Midnight Commander, Oaklisp, SIPP, SNePS, Spinner, W3, and `xgrabsc'. *Note GNU Software::, for more information about these packages. Also on the CD-ROMs are full distributions of MIT X11R6 (both our Required & Optional distributions), MIT Scheme 7.3, Emacs 19.30, GCC 2.7.1, and current versions of all other GNU Software. For more information, see *Note December 1995 Source Code CD-ROMs::. * New Compiler Tools CD-ROM We have a new edition of the Compiler Tools Binaries CD-ROM with updated versions of much of its software. It contains executables of the GNU compiler tools for some systems that don't normally come with a compiler. This allows users of those systems to compile their own software without having to buy a proprietary compiler. We hope to include more systems with each update of this CD-ROM. If you can help build binaries for new systems or have one to suggest, please contact us at either address on page 1. For more information, see *Note Compiler Tools Binaries CD-ROM::. * New/Updated Manuals since Last Bulletin (*Note Documentation::) We have a new manual: `The GNU Emacs Lisp Reference Manual, Japanese Edition' - the FSF would like to thank the team of over 30 Japanese who did the translation. These new editions include bug fixes and additional information: `The GNU Emacs Lisp Reference Manual', `GNU Make', `Bison', `Programming in Emacs Lisp: An Introduction', and `The Termcap Manual'. * Older FSF CD-ROMs Available at a Reduced Price While supplies last, older versions of our CD-ROMs are available at a reduced price. Note that the newest version has bug fixes and improvements that the older versions do not. See the *note Free Software Foundation Order Form::.. * GNU Software Works on MS-DOS (Also *note GNU Software::.) GNU Emacs 19 and many other GNU programs have been ported to MS-DOS for i386/i486/Pentium machines. We ship binaries & sources on the *Note DJGPP Diskettes::; *Note Emacs Diskettes::; *Note Selected Utilities Diskettes::; & the *Note Compiler Tools Binaries CD-ROM::. We will ship binaries & sources on the *Note MS-DOS Book with CD-ROM::, when it is available. * The FSF Takes Credit Cards We take these credit cards: Carte Blanche, Diner's Club, MasterCard, JCB, Visa, and American Express. Please note that we are charged about 5% of an order's total amount in credit card processing fees. Please consider paying by check instead or adding on a 5% donation to make up the difference. The Deluxe Distribution *********************** The Free Software Foundation has been asked repeatedly to create a package that provides executables for all of our software. Normally we offer only sources. In addition to providing binaries with the source code, the Deluxe Distribution includes a complete set of our printed manuals and reference cards. The FSF Deluxe Distribution contains the binaries and sources to hundreds of different programs including GNU Emacs, the GNU C Compiler, the GNU Debugger, the complete X Window System, and all the GNU utilities. We will make a Deluxe Distribution for most machines/operating systems. We may be able to send someone to your office to do the compilation, if we can't find a suitable machine close to us. However, we can only compile the programs that already support your chosen machine/system - porting is a separate matter (to commission a port, consult the GNU Service Directory; details in *Note Free Software Support::). Compiling all these programs takes time; a Deluxe Distribution for an unusual machine will take longer to produce than one for a common machine. Please contact the FSF Office with any questions. We supply the software in one of these tape formats in Unix `tar' format: 1600 or 6250bpi 1/2in reel, Sun DC300XLP 1/4in cartridge - QIC24, IBM RS/6000 1/4in c.t. - QIC 150, Exabyte 8mm c.t., or DAT 4mm c.t. If your computer cannot read any of these, please contact us to see if we can handle your format. The manuals included are one each of the `Bison', `Calc', `GAWK', `GNU C Compiler', `GNU C Library', `GDB', `Flex', `GNU Emacs Lisp Reference', `Programming in Emacs Lisp: An Introduction', `Make', `Texinfo', & `Termcap' manuals; six copies of the `GNU Emacs' manual; and a packet of ten reference cards each for Emacs, Bison, Calc, Flex, & GDB. Every Deluxe Distribution also has a copy of the latest editions of our CD-ROMs that have sources of our software & compiler tool binaries for some systems. The MS-DOS CD is in ISO 9660 format. The other CDs are in ISO 9660 format with Rock Ridge extensions. The price of the Deluxe Distribution is $5000 (shipping included). These sales provide enormous financial assistance to help the FSF develop more free software. To order, please fill out the "Deluxe Distribution" section on the *note Free Software Foundation Order Form::. and send it to: Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA Telephone: +1-617-542-5942 Fax (including Japan): +1-617-542-2652 Electronic mail: gnu@prep.ai.mit.edu GNU Documentation ***************** GNU is dedicated to having quality, easy-to-use online & printed documentation. GNU manuals are intended to explain underlying concepts, describe how to use all the features of each program, & give examples of command use. GNU manuals are distributed as Texinfo source files, which yield both typeset hardcopy via the TeX document formatting system and online hypertext display via the menu-driven Info system. Source for these manuals comes with our software; here are the manuals that we publish as printed books. See the *note Free Software Foundation Order Form::., to order them. Most GNU manuals are bound as soft cover books with "lay-flat" bindings. This allows you to open them so they lie flat on a table without creasing the binding. They have an inner cloth spine and an outer cardboard cover that will not break or crease as an ordinary paperback will. Currently, the `GDB', `Emacs', `Emacs Lisp Reference', `Programming in Emacs Lisp: An Introduction', `GAWK', `Make', `Bison', & `Texinfo' manuals have this binding. The other GNU manuals also lie flat when opened, using a GBC or Wire-O binding. All our manuals are 7in by 9.25in except the 8.5in by 11in `Calc' manual. The edition number of the manual and version number of the program listed after each manual's name were current at the time this Bulletin was published. `Debugging with GDB' (Edition 4.12 for Version 4.14) tells how to run your program under GNU Debugger control, examine and alter data, modify a program's flow of control, and use GDB through GNU Emacs. The `GNU Emacs Manual' (11th Edition for Version 19.29) describes editing with GNU Emacs. It explains advanced features, including outline mode and regular expression search; how to use special programming modes to write languages like C++ and TeX; how to use the `tags' utility; how to compile and correct code; how to make your own keybindings; and other elementary customizations. `Programming in Emacs Lisp: An Introduction' (Edition 1.04) is for people who are not necessarily interested in programming, but who do want to customize or extend their computing environment. If you read it in Emacs under Info mode, you can run the sample programs directly. `The GNU Emacs Lisp Reference Manual' (Edition 2.4 for Version 19.29) and `The GNU Emacs Lisp Reference, Japanese Edition' (Japanese DRAFT Revision 1.0, from English Edition 2.4 for Version 19.29) covers this programming language in depth, including data types, control structures, functions, macros, syntax tables, searching/matching, modes, windows, keymaps, byte compilation, and the operating system interface. `The GAWK Manual' (Edition 0.16 for Version 2.16) tells how to use the GNU implementation of `awk'. It is written for those who have never used `awk' and describes the features of this powerful string and record manipulation language. The `Make Manual' (Edition 0.49 for Version 3.74) describes GNU `make', a program used to rebuild parts of other programs. The manual tells how to write "makefiles", which specify how a program is to be compiled and how its files depend on each other. Included are an introductory chapter for novice users and a section about automatically generated dependencies. The `Flex' manual (Edition 1.03 for Version 2.3.7) teaches you to write a lexical scanner definition for the `flex' program to create a C++ or C-coded scanner that recognizes the patterns defined. You need no prior knowledge of scanners. The `Bison' manual (December 1993 Edition for Version 1.23) teaches you how to write context-free grammars for the Bison program that convert into C-coded parsers. You need no prior knowledge of parser generators. `Using and Porting GNU CC' (September 1994 Edition for Version 2.6) tells how to run, install, and port the GNU C Compiler to new systems. It lists new features and incompatibilities of GCC, but people not familiar with C will still need a good reference on the C programming language. It also covers G++. We are doing limited copier runs of this manual until it becomes more stable. The `Texinfo' manual (Edition 2.21 for Version 3) explains the markup language that produces our online Info documentation & typeset hardcopies. It tells you how to make tables, lists, chapters, nodes, indexes, cross references, & how to catch mistakes. This second edition describes over 50 new commands. `The Termcap Manual' (2nd Edition for Version 1.2), often described as "twice as much as you ever wanted to know about termcap," details the format of the termcap database, the definitions of terminal capabilities, and the process of interrogating a terminal description. This manual is primarily for programmers. The `C Library Reference Manual' (Edition 0.06 for Version 1.09) describes the library's facilities, including both what Unix calls "library functions" & "system calls." We are doing small copier runs of this manual until it becomes more stable. Please send fixes to `bug-glibc-manual@prep.ai.mit.edu'. The `Emacs Calc Manual' (Edition 2.02 for Version 2.02) is both a tutorial and a reference manual. It tells how to do ordinary arithmetic, how to use Calc for algebra, calculus, and other forms of mathematics, and how to extend Calc. GNU Software ************ All our software is available via FTP; see *Note How to Get GNU Software::. We also offer software on various media and printed documentation: * *Note CD-ROMs::. * *Note Tapes::. * *Note MS-DOS Diskettes::. * *Note Documentation::, which includes manuals and reference cards. In these articles describing the contents of each medium, the version number listed after each program name was current when we published this Bulletin. When you order a distribution tape, diskette, or newer CD-ROM, some of the programs may be newer and therefore the version number higher. See the *note Free Software Foundation Order Form::., for ordering information. Some of the contents of our tape and FTP distributions are compressed. We have software on our tapes and FTP sites to uncompress these files. Due to patent troubles with `compress', we use another compression program, `gzip'. (Such prohibitions on software development are fought by the League for Programming Freedom; *note What Is the LPF::., for details.) GNU `make' is on several of our tapes because some system vendors supply no `make' utility at all and some native `make' programs lack the `VPATH' feature essential for using the GNU configure system to its full extent. The GNU `make' sources have a shell script to build `make' itself on such systems. We welcome all bug reports and enhancements sent to the appropriate electronic mailing list (*note Free Software Support::.). Configuring GNU Software ------------------------ We are using, Autoconf, a uniform scheme for configuring GNU software packages in order to compile them (see "Autoconf" below, in this article). The goal is to have all GNU software support the same alternatives for naming machine and system types. Ultimately, it will be possible to configure and build the entire system all at once, eliminating the need to configure each individual package separately. You can also specify both the host and target system to build cross-compilation tools. Most GNU programs now use Autoconf-generated configure scripts. GNU Software currently available -------------------------------- For future programs and features, see *Note Forthcoming GNUs::. Key to cross reference: BinCD December 1994 Binaries CD-ROM DjgpD Djgpp Diskettes DosBC MS-DOS Book with CD-ROM EmcsD Emacs Diskettes LangT Languages Tape LiteT 4.4BSD-Lite Tape LspEmcT Lisps/Emacs Tape SchmT Scheme Tape SrcCD December 1995 Source CD-ROMs UtilD Selected Utilities Diskettes UtilT Utilities Tape VMSCmpT VMS Compiler Tape VMSEmcsT VMS Emacs Tape WdwsD Windows Diskette X11OptT X11 Optional Tape X11ReqT X11 Required Tape [FSFman] shows that we sell a manual for that package. [FSFrc] shows we sell a reference card for that package. To order them, see the *note Free Software Foundation Order Form::.. *Note Documentation::, for more information on the manuals. Source code for each manual or reference card is included with each package. * `acm' (SrcCD, UtilT) `acm' is a LAN-oriented, multiplayer aerial combat simulation that runs under the X Window System. Players engage in air to air combat against one another using heat seeking missiles and cannons. We are working on a more accurate simulation of real airplane flight characteristics. * apache (SrcCD) Apache is an HTTP server designed as a plug-in replacement for version 1.3 or 1.4 of the NCSA server. It fixes numerous bugs in the NCSA server and includes many frequently requested new features, and has an API which allows it to be extended to meet users' needs more easily. * Autoconf (SrcCD, UtilT) Autoconf produces shell scripts which automatically configure source code packages. These scripts adapt the packages to many kinds of Unix-like systems without manual user intervention. Autoconf creates a script for a package from a template file which lists the operating system features which the package can use, in the form of `m4' macro calls. Autoconf requires GNU `m4' to operate, but the resulting configure scripts it generates do not. * BASH (SrcCD, UtilT) GNU's shell, BASH (Bourne Again SHell), is compatible with the Unix `sh' and offers many extensions found in `csh' and `ksh'. BASH has job control, `csh'-style command history, command-line editing (with Emacs and `vi' modes built-in, and the ability to rebind keys) via the `readline' library. BASH conforms to the POSIX 1003.2-1992 standard. * `bc' (DosBC, SrcCD, UtilT) `bc' is an interactive algebraic language with arbitrary precision numbers. GNU `bc' follows the POSIX 1003.2-1992 standard, with several extensions including multi-character variable names, an `else' statement, and full Boolean expressions. The RPN calculator `dc' is now distributed as part of the same package, but GNU `bc' is not implemented as a `dc' preprocessor. * BFD (BinCD, DjgpD, DosBC, LangT, SrcCD) The Binary File Descriptor library allows a program which operates on object files (e.g., `ld' or GDB) to support many different formats in a clean way. BFD provides a portable interface, so that only BFD needs to know the details of a particular format. One result is that all programs using BFD will support formats such as a.out, COFF, and ELF. BFD comes with Texinfo source for a manual (not yet published on paper). At present, BFD is not distributed separately; it is included with packages that use it. * Binutils (BinCD, DjgpD, DosBC, LangT, SrcCD; `gas' only on VMSCmpT) Binutils includes these programs: `ar', `c++filt', `demangle', `gas', `gprof', `ld', `nlmconv', `nm', `objcopy', `objdump', `ranlib', `size', `strings', & `strip'. Binutils version 2 uses the BFD library. The GNU assembler, `gas', supports the a29k, Alpha, H8/300, H8/500, HP-PA, i386, i960, m68k, m88k, MIPS, NS32K, SH, SPARC, Tahoe, Vax and Z8000 CPUs, and attempts to be compatible with many other assemblers for UNIX and embedded systems. It can produce mixed C-and-assembly listings, and includes a macro facility similar to that in some other assemblers. GNU's linker `ld' emits source-line numbered error messages for multiply-defined symbols and undefined references, and interprets a superset of AT&T's Linker Command Language, which gives control over where segments are placed in memory. `nlmconv' converts object files into Novell NetWare Loadable Modules. `objdump' can disassemble code for most of the CPUs listed above, and can display other data (e.g., symbols and relocations) from any file format read by BFD. * Bison (BinCD,DjgpD,DosBC,LangT,SrcCD,VMSCmpT)[FSFman,FSFrc] Bison is an upwardly compatible replacement for the parser generator `yacc'. Texinfo source for the `Bison Manual' and reference card are included. *Note Documentation::. A recent policy change allows non-free programs to use Bison-generated parsers. *Note Conditions for Using Bison::. * C Library (BinCD, LangT, SrcCD) [FSFman] The GNU C library supports ANSI C-1989, POSIX 1003.1-1990 and most of the functions in POSIX 1003.2-1992. It is upwardly compatible with 4.4BSD and includes many System V functions, plus GNU extensions. The C Library performs many functions of the Unix system calls in the GNU/Hurd. Mike Haertel has written a fast `malloc' which wastes less memory than the old GNU version. The GNU regular-expression functions (`regex' and `rx') now nearly conform to the POSIX 1003.2 standard. GNU `stdio' lets you define new kinds of streams, just by writing a few C functions. The `fmemopen' function uses this to open a stream on a string, which can grow as necessary. You can define your own `printf' formats to use a C function you have written. For example, you can safely use format strings from user input to implement a `printf'-like function for another programming language. Extended `getopt' functions are already used to parse options, including long options, in many GNU utilities. The C Library runs on Sun-3 (SunOS 4.1), Sun-4 (SunOS 4.1 or Solaris 2), HP 9000/300 (4.3BSD), SONY News 800 (NewsOS 3 or 4), MIPS DECstation (Ultrix 4), DEC Alpha (OSF/1), i386/i486/Pentium (System V, SVR4, BSD, SCO 3.2, & SCO ODT 2.0), Sequent Symmetry i386 (Dynix 3), & SGI (Irix 4). *Note Forthcoming GNUs::. Texinfo source for the `GNU C Library Reference Manual' is included (*note Documentation::.. * C++ Library (BinCD, DjgpD, DosBC, LangT, SrcCD) The GNU C++ library (libg++) contains an extensive collection of C++ "forest" classes, an IOStream library for input/output routines, and support tools for use with G++. Supported classes include: Obstacks, multiple-precision Integers and Rationals, Complex numbers, arbitrary length Strings, BitSets, and BitStrings. The distribution also includes the libstdc++ library. This implements library facilities defined by the forthcoming ANSI/ISO C++ standard, including a port of the Standard Template Library. * Calc (DosBC, LspEmcT, SrcCD) [FSFman, FSFrc] Calc (written by Dave Gillespie in Emacs Lisp) is an extensible, advanced desk calculator & mathematical tool that runs as part of GNU Emacs. You can use Calc just as a simple four-function calculator, but it has many more features including: choice of algebraic or RPN (stack-based) entry; logarithmic, trigonometric, & financial functions; arbitrary precision; complex numbers; vectors; matrices; dates; times; infinities; sets; algebraic simplification; differentiation & integration. It outputs to `gnuplot', & comes with source for a manual & reference card (*note Documentation::.). * `cfengine' (SrcCD, UtilT) `cfengine' is used for maintaining site-wide configuration of a heterogeneous Unix network using a simple high level language. Its appearance is similar to `rdist', but also allows many more operations to be performed automatically. See Mark Burgess, "A Site Configuration Engine", `Computing Systems', Vol. 8, No. 3 (ask `office@usenix.org' how to get a copy). * Chess (SrcCD, UtilT, WdwsD) GNU Chess enables most modern computers to play a full game of chess. It supports a plain terminal interface, a curses interface, and a spiffy X Window interface via `xboard'. Improvements this past year include fixes to the game analyzer, book, & hash table; smartening up draw and mate; improved thinking on opponent's time; Autoconf installation; a makefile for Windows NT compilation; forward pruning; unlimited quiescence captures; improved evaluation; improved null & time control logic; & repetition-detection. GNU Chess was originated by Stuart Cracraft. Improvements & rewrites are from John Stanback, Cha Kong Sian, Mike McGann, and many others. Send bugs to `bug-gnu-chess@prep.ai.mit.edu' & general comments to `info-gnu-chess@prep.ai.mit.edu'. * CLISP (LspEmcT, SrcCD) CLISP is a Common Lisp implementation by Bruno Haible and Michael Stoll. It mostly supports the Lisp described by `Common LISP: The Language (2nd edition)' and the ANSI Common Lisp standard. CLISP includes an interpreter, a byte-compiler, a large subset of CLOS, a foreign language interface, and, for some machines, a screen editor. The user interface language (English, German, French) is choosable at run time. Major packages that run in CLISP include CLX & Garnet. CLISP needs only 2 MB of memory & runs on many microcomputers (including MS-DOS systems, OS/2, Windows NT, Amiga 500-4000, Acorn RISC PC) & Unix-like systems (GNU/Linux, Sun4, SVR4, SGI, HP-UX, DEC Alpha, NeXTStep, & others). * Common Lisp **Note Forthcoming GNUs::* (LspEmcT, SrcCD) GNU Common Lisp (GCL, formerly known as Kyoto Common Lisp) is a compiler & interpreter for Common Lisp. GCL is very portable & extremely efficient on a wide class of applications, & compares favorably in performance with commercial Lisps on several large theorem-prover & symbolic algebra systems. GCL supports the CLtL1 specification but is moving towards the proposed ANSI standard. GCL compiles to C & then uses the native optimizing C compiler (e.g., GCC). A function with a fixed number of args & one value turns into a C function of the same number of args, returning one value--so GCL is maximally efficient on such calls. Its conservative garbage collector gives great freedom to the C compiler to put Lisp values in registers. It has a source level Lisp debugger for interpreted code & displays source code in an Emacs window. Its profiler (based on the C profiling tools) counts function calls & the time spent in each function. There is now a built-in interface to the Tk widget system. It runs in a separate process, so users may monitor progress on Lisp computations or interact with running computations via a windowing interface. There is also an Xlib interface via C (xgcl-2). CLX runs with GCL, as does PCL (see "PCL" later in this article). *Note Forthcoming GNUs::, for plans regarding GCL or for recent developments. GCL version 2.2 is released under the GNU Library General Public License. * CLX (LspEmcT, SrcCD) CLX is an X Window interface library for GCL. * `cpio' (DosBC, SrcCD, UtilD, UtilT) `cpio' is an archive program with all the features of SVR4 `cpio', including support for the final POSIX 1003.1 `ustar' standard. `mt', a program to position magnetic tapes, is included with `cpio'. * CVS (SrcCD, UtilT) CVS, the Concurrent Version System, manages software revision & release control at a multi-developer, multi-directory, multi-group site. It works best with RCS versions 4 and above, but will parse older RCS formats, losing some of CVS's fancier features. (See Berliner, Brian, "CVS-II: Parallelizing Software Development," `Proceedings of the Winter 1990 USENIX Association Conference'; ask `office@usenix.org' how to get a copy.) * DejaGnu (LangT, SrcCD) DejaGnu is a framework to test programs with a single front end for all tests. The framework's flexibility & consistency makes it easy to write tests. DejaGnu comes with `expect', which runs scripts to conduct dialogs with programs. * Diffutils (DjgpD, DosBC, SrcCD, UtilT) GNU `diff' compares files showing line-by-line changes in several flexible formats. It is much faster than traditional Unix versions. The Diffutils package contains `diff', `diff3', `sdiff', & `cmp'. Recent improvements include more consistent handling of character sets and a new `diff' option to do all input/output in binary; this is useful on some non-POSIX hosts. Plans for the Diffutils package include support for internationalization (e.g., error messages in Chinese) and for some non-Unix PC environments. * DJGPP (BinCD, DjgpD, DosBC) DJ Delorie has ported GCC/G++ (see "GCC" in this article) to i386s running MS-DOS. DJGPP has a 32-bit i386 DOS extender with a symbolic debugger; development libraries; & ports of Bison, `flex', & Binutils. Full source code is provided. It needs at least 5MB of hard disk space to install & 512K of RAM to use. It supports SVGA (up to 1024x768), XMS & VDISK memory allocation, `himem.sys', VCPI (e.g., QEMM, DESQview, & 386MAX), & DPMI (e.g., Windows 3.x, OS/2, QEMM, & QDPMI). The FSF offers it on the *Note Compiler Tools Binaries CD-ROM::, and on the *Note DJGPP Diskettes::. FTP from `oak.oakland.edu' in `/simtel/vendors/djgpp/' (or another SimTel mirror site). To join a DJGPP users mailing list, ask `djgpp-request@sun.soe.clarkson.edu'. * `dld' (LangT, SrcCD) `dld' is a dynamic linker written by W. Wilson Ho. Linking your program with the `dld' library allows you to dynamically load object files into the running binary. Currently supported are VAX (Ultrix), Sun 3 (SunOS 3.4 & 4.0), SPARC (SunOS 4.0), Sequent Symmetry (Dynix), & Atari ST. * `doschk' (DosBC, SrcCD, UtilT) This program is a utility to help software developers ensure that their source file names are distinguishable on System V platforms with 14-character filenames and on MS-DOS systems with 8+3 character filenames. * `ecc' (LangT, SrcCD) `ecc' is a Reed-Solomon error correction checking program, which can correct three byte errors in a block of 255 bytes and detect more severe errors. Contact `paulf@stanford.edu' for more information. * `ed' (SrcCD, UtilT) `ed' is the standard text editor. It is line-oriented and can be used interactively or in scripts. * Elib (DosBC, LspEmcT, SrcCD) Elib is a small library of Emacs Lisp functions, including routines for using AVL trees and doubly-linked lists. * Elisp archive (SrcCD) This is a snapshot of Ohio State's GNU Emacs Lisp FTP Archive. FTP it from `archive.cis.ohio-state.edu' in `/pub/gnu/emacs/elisp-archive'. * Emacs **Note Forthcoming GNUs:: for future plans.* In 1975, Richard Stallman developed the first Emacs, an extensible, customizable real-time display editor & computing environment. GNU Emacs is his second implementation. It offers true Lisp--smoothly integrated into the editor--for writing extensions & provides an interface to the X Window System. It runs on Unix, MS-DOS, & Windows NT. In addition to its powerful native command set, Emacs has extensions which emulate the editors vi & EDT (Digital's VMS editor). Emacs has many other features which make it a full computing support environment. Source for the `GNU Emacs Manual' & a reference card comes with the software. Sources for the `GNU Emacs Lisp Reference Manual' & `Programming in Emacs Lisp: An Introduction' are distributed in separate packages. *Note Documentation::. * Emacs 18 (LspEmcT, SrcCD, VMSEmcsT) [FSFrc] Emacs 18.59 is the last release of version 18 from the FSF. We no longer maintain it. It supports these Unix systems that Emacs 19 doesn't support (please help port Emacs 19 to these systems): Alliant FX/80, Altos 3068, Amdahl (UTS), AT&T (3Bs & 7300 PC), CCI 5/32 & 6/32, Celerity, Digital (VAX VMS), Dual, Encore (APC, DPC, & XPC), HLH Orion (original & 1/05), ISI (Optimum V, 80386), Masscomp, NCR Tower 32 (SVR2 & SVR3), Nixdorf Targon 31, Nu (TI & LMI), pfa50, Plexus, Prime EXL, Stride (system rel. 2), Tahoe, Tandem Integrity S2, Tektronix 16000, Triton 88, Ustation E30 (SS5E), Whitechapel (MG1), & Wicat. * Emacs 19 (DosBC, EmcsD, LspEmcT, SrcCD) [FSFman(s), FSFrc] Emacs 19 works with character-only terminals & with the X Window System (with or without an X toolkit). New features in Emacs 19 include: multiple X windows ("frames" to Emacs), with a separate X window for the minibuffer or a minibuffer attached to each X window; property lists associated with regions of text in a buffer; multiple fonts & colors defined by those properties; simplified/improved processing of function keys, mouse clicks, and mouse movement; X selection processing, including clipboard selections; hooks to be run if the point or mouse moves outside a certain range; menu bars and popup menus defined by keymaps; scrollbars; before- and after-change hooks; a source-level debugger for Emacs Lisp programs; floating point numbers; improved buffer allocation, including returning storage to the system when a buffer is killed; interfacing with the X resource manager; many updated libraries; integrated support for version control systems (RCS, CVS, & SCCS); Autoconf based configuration; and support for European character sets. Recent features include the ability to open frames on more than one X display from a single Emacs job, operation on MS-DOS, MS Windows, and Windows NT, displaying multiple views of an outline at the same time, support for the Athena & Motif widgets, version control support for CVS and for multiple branches, text properties for formatting text, commands to edit text properties and save them in files, and GNU-standard long-named command line options. Emacs 19.30 works on: Acorn RISC (RISCiX); Alliant FX/2800 (BSD); Alpha (OSF/1); Apollo (DomainOS); Bull DPX/2 2nn & 3nn (SysV.3) & sps7 (SysV.2); Clipper; Convex (BSD); Cubix QBx (SysV); Data General Aviion (DGUX); DEC MIPS (Ultrix 4.2, OSF/1, not VMS); Elxsi 6400 (SysV); Gould Power Node & NP1 (4.2 & 4.3BSD); Harris Night Hawk 1200, 3000, 4000 & 5000 (cxux); Honeywell XPS100 (SysV); HP 9000 series 200, 300, 700, 800 (but not 500) (4.3BSD; HP-UX 7, 8, 9); Intel i386/i486/Pentium (GNU/Linux, 386BSD, AIX, BSDI/386, FreeBSD, Esix, ISC, MS-DOS (*note MS-DOS Diskettes::., & *Note MS-DOS Book with CD-ROM::), NetBSD, SCO3.2v4, Solaris, SysV, Xenix, WindowsNT); IBM RS/6000 (AIX 3.2) & RT/PC (AIX, BSD); Motorola Delta 147 & 187 (SysV.3, SysV.4, m88kbcs); National Semiconductor 32K (Genix); NeXT (BSD, Mach 2 w/ NeXTStep 3.0); Paragon (OSF/1); Prime EXL (SysV); Pyramid (BSD); Sequent Symmetry (BSD, ptx); Siemens RM400 & RM600 (SysV); SGI Iris 4D (Irix 4.x & 5.x); Sony News/RISC (NewsOS); Stardent i860 (SysV); Sun 3 & 4, SPARC 1, 1+, 2, 10, Classic (SunOS 4.0, 4.1, Solaris 2.0-2.3); Tadpole 68k (SysV); Tektronix XD88 (SysV.3) & 4300 (BSD); & Titan P2 & P3 (SysV). Other configurations supported by Emacs 18 should work with few changes in Emacs 19; as users tell us more about their experiences with different systems, we will augment the list. Also see *Note Forthcoming GNUs::. * `es' (SrcCD, UtilT) `es' is an extensible shell (based on `rc') with first class functions, lexical scope, exceptions and rich return values (i.e., functions can return values other than just numbers). `es''s extensibility comes from the ability to modify and extend the shell's built-in services, such as path searching and redirection. Like `rc', it is great for both interactive use and scripting, particularly since its quoting rules are much less baroque than the C and Bourne shells. * `f2c' (LangT, SrcCD) `f2c' converts Fortran-77 source into C or C++, which can be compiled with GCC or G++. Get bug fixes by FTP from site `netlib.att.com' or by email from `netlib@research.att.com'. See the file `/netlib/f2c/readme.Z' for a summary. Also see the GNU Fortran item later in this article, and in *Note Forthcoming GNUs::. * `ffcall' (SrcCD) `ffcall' is a C library for implementing foreign function calls in embedded interpreters by Bill Triggs and Bruno Haible. It allows C functions with arbitrary argument lists and return types to be called or emulated (callbacks). * Fileutils (DosBC, SrcCD, UtilT) The Fileutils work on files: `chgrp', `chmod', `chown', `cp', `dd', `df', `dir', `du', `install', `ln', `ls', `mkdir', `mkfifo', `mknod', `mv', `rm', `rmdir', `sync', `touch', & `vdir'. * Findutils (DosBC, SrcCD, UtilT) `find' is frequently used both interactively and in shell scripts to find files which match certain criteria and perform arbitrary operations on them. Also included are `locate', which scans a database for file names that match a pattern, and `xargs', which applies a command to a list of files. * Finger (SrcCD, UtilT) GNU Finger has more features than other finger programs. For sites with many hosts, a single host may be designated as the finger "server" host and other hosts at that site configured as finger "clients". The server host collects information about who is logged in on the clients. To finger a user at a GNU Finger site, a query to any of its client hosts gets useful information. GNU Finger supports many customization features, including user output filters and site programmable output for special target names. * `flex' (BinCD, DjgpD, DosBC, LangT, SrcCD, UtilD) [FSFman, FSFrc] `flex' is a replacement for the `lex' scanner generator. `flex' was written by Vern Paxson of the Lawrence Berkeley Laboratory and generates far more efficient scanners than `lex' does. Sources for the `Flex Manual' and reference card are included (*note Documentation::.). * Fortran (`g77') **Note Forthcoming GNUs::* (LangT, SrcCD) GNU Fortran (`g77'), developed by Craig Burley, is available for public beta testing on the Internet. For now, `g77' produces code that is mostly object-compatible with `f2c' & uses the same run-time library (`libf2c'). * Fontutils (SrcCD, UtilT) The Fontutils convert between font formats, create fonts for use with Ghostscript or TeX (starting with a scanned type image & converting the bitmaps to outlines), et al. It includes: `bpltobzr', `bzrto', `charspace', `fontconvert', `gsrenderfont', `imageto', `imgrotate', `limn', & `xbfe'. * GAWK (DosBC, LangT, SrcCD) [FSFman] GAWK is upwardly compatible with the latest POSIX specification of `awk'. It also provides several useful extensions not found in other `awk' implementations. Texinfo source for the `GAWK Manual' comes with the software (*note Documentation::.). * GCC (BinCD, DjgpD, DosBC, LangT, SrcCD, VMSCmpT) [FSFman] Version 2 of the GNU C Compiler supports the languages C, C++, and Objective-C; the source file name suffix or a compiler option selects the language. Objective-C support was donated by NeXT. The runtime support needed to run Objective-C programs is now distributed with GCC (this does not include any Objective-C classes aside from `object', but see "GNUStep" in *Note Forthcoming GNUs::). As much as possible, G++ is kept compatible with the evolving draft ANSI standard, but not with `cfront' (AT&T's compiler), which has been diverging from ANSI. The GNU C Compiler is a fairly portable optimizing compiler which performs automatic register allocation, common sub-expression elimination, invariant code motion from loops, induction variable optimizations, constant propagation and copy propagation, delayed popping of function call arguments, tail recursion elimination, integration of inline functions and frame pointer elimination, instruction scheduling, loop unrolling, filling of delay slots, leaf function optimization, optimized multiplication by constants, a certain amount of common subexpression elimination (CSE) between basic blocks (though not all of the supported machine descriptions provide for scheduling or delay slots), a feature for assigning attributes to instructions, and many local optimizations that are automatically deduced from the machine description. GCC can open-code most arithmetic on 64-bit values (type `long long int'). It supports extended floating point (type `long double') on the 68k; other machines will follow. GCC supports full ANSI C, traditional C, & GNU C extensions (including: nested functions support, nonlocal gotos, & taking the address of a label). GCC can generate a.out, COFF, ELF, & OSF-Rose files when used with a suitable assembler. It can produce debugging information in these formats: BSD stabs, COFF, ECOFF, ECOFF with stabs, & DWARF. GCC generates code for many CPUs, including the a29k, Alpha ARM AT&T DSP1610 Clipper Convex cN Elxsi Fujitsu Gmicro i370, i860, i960, MIL-STD-1750a, MIPS, ns32k, PDP-11, Pyramid, ROMP, RS/6000, SH, SPUR, Tahoe, VAX, & we32k. Position-independent code is generated for the Clipper, Hitachi H8/300, HP-PA (1.0 & 1.1), i386/i486/Pentium, m68k, m88k, SPARC, & SPARClite. Operating systems supported include: GNU/Hurd, GNU/Linux, ACIS, AIX, AOS, BSD, Clix, Concentrix, Ctix, DG/UX, Dynix, FreeBSD, Genix, HP-UX, Irix, ISC, Luna, LynxOS, Minix, NetBSD, NewsOS, NeXTStep, OS/2, OSF, OSF-Rose, RISCOS, SCO, Solaris 2, SunOS 4, System/370, SysV, Ultrix, Unos, VMS, & Windows/NT. Using the configuration scheme for GCC, building a cross-compiler is as easy as building a native compiler. Version 1 of GCC, G++, & libg++ are no longer maintained. Texinfo source for the `Using and Porting GNU CC' manual, is included with GCC (*note Documentation::.). *Note Forthcoming GNUs::, for plans for later releases of GCC. * GDB (BinCD, DjgpD, DosBC, LangT, SrcCD) [FSFman, FSFrc] GDB, the GNU DeBugger, is a source-level debugger for C, C++, & Fortran. GDB can debug both C and C++ programs, and will work with executables produced by many different compilers; however, C++ debugging will have some limitations if you do not use GCC. GDB has a command line user interface, and Emacs has a GDB mode. Two X interfaces (not distributed or maintained by the FSF) are: `gdbtk' (FTP it from `ftp.cygnus.com' in directory `/pub/gdb'); and `xxgdb' (FTP it from `ftp.x.org' in directory `/contrib/utilities'). Executable files and symbol tables are read via the BFD library, which allows a single copy of GDB to debug programs with multiple object file formats (e.g., a.out, COFF, ELF). Other features include a rich command language, remote debugging over serial lines or TCP/IP, and watchpoints (breakpoints triggered when the value of an expression changes). GDB uses a standard remote interface to a simulator library which (so far) has simulators for the Hitachi H8/300, H8/500, Super-H, & Zilog Z8001/2. GDB can perform cross-debugging. To say that GDB "targets" a platform means it can perform native or cross-debugging for it. To say that GDB can "host" a given platform means that it can be built on it, but cannot necessarily debug native programs. GDB can: * "target" & "host": Amiga 3000 (Amix), DEC Alpha (OSF/1), DECstation 3100 & 5000 (Ultrix), HP 9000/300 (BSD, HP-UX), HP 9000/700 (HP-UX 9, 10), i386 (GNU/Hurd, GNU/Linux, BSD, FreeBSD, LynxOS, NetBSD, SCO), IBM RS/6000 (AIX, LynxOS), Motorola Delta m88k (System V, CX/UX), PC532 (NetBSD), Motorola m68k MVME-167 (LynxOS), NCR 3000 (SVR4), SGI (Irix V3, V4, V5), SONY News (NewsOS 3.x), SPARC (LynxOS, NetBSD, Solaris, & SunOS 4.1 ) Sun-3 (SunOS 4.1), & Ultracomputer (a29k running Sym1). * "target", but not "host": AMD 29000 (COFF & a.out), Hitachi H8/300, Hitachi SH, i386 (a.out, COFF, OS/9000), i960 (Nindy, VxWorks), m68k/m68332 (a.out, COFF, VxWorks), MIPS (ELF, IDT ecoff), Fujitsu SPARClite (a.out, COFF), & Z8000. * "host", but not "target": IBM RT/PC (AIX), HP/Apollo 68k (BSD), & Apple Macintosh (MacOS). Sources for the manual, `Debugging with GDB', and a reference card are included (*note Documentation::.). * `gdbm' (LangT, SrcCD, UtilD) `gdbm' is the GNU replacement for the traditional `dbm' and `ndbm' libraries. It implements a database using quick lookup by hashing. `gdbm' does not ordinarily make sparse files (unlike its Unix and BSD counterparts). * `gettext' (LangT, SrcCD) The GNU `gettext' tool set contains everything maintainers need to internationalize a package for messages, tools that help translators localize messages to their native language, once a package has been internationalized. *Note Help the GNU Translation Project::. * Ghostscript (DosBC, SrcCD, UtilT) The GNU release of Ghostscript is an interpreter for the Postscript graphics language (*note Forthcoming GNUs::., for future plans). The current version of GNU Ghostscript is 2.6.2. Features include the ability to use the fonts provided by the platform on which Ghostscript runs (X Window System & Microsoft (MS) Windows), resulting in much better-looking screen displays; improved text file printing (like `enscript'); a utility to extract the text from a Postscript language document; a much more reliable (and faster) MS Windows implementation; support for MS C/C++ 7.0; drivers for many new printers ( e.g. the SPARCprinter), & for TIFF/F (Fax) file format; many more Postscript Level 2 facilities, including most of the color space facilities (but not patterns); & the ability to switch between Level 1 & Level 2 dynamically. Version 2.6.2 adds a LaserJet 4 driver & several important bug fixes to version 2.6.1. Ghostscript executes commands in the Postscript language by writing directly to a printer, drawing on an X window, or writing to files for printing later or manipulating with other graphics programs. Ghostscript includes a C-callable graphics library (for client programs that do not want to deal with the Postscript language). It also supports i386/i486/Pentiums running MS-DOS with EGA, VGA or SuperVGA graphics (but please do *not* ask the FSF staff any questions about this; we do not use MS-DOS). * Ghostview (DosBC, SrcCD, UtilT) Tim Theisen, `ghostview@cs.wisc.edu', created Ghostview, a previewer for multi-page files with an X Window interface. Ghostview & Ghostscript work together; Ghostview creates a viewing window & Ghostscript draws in it. * GIT (SrcCD, UtilT) GIT is a set of interactive tools: an extensible file system browser, an ASCII/hex file viewer, a process viewer/killer, & other related utilities & shell scripts. It can be used to increase the speed & efficiency of many daily tasks, such as copying & moving files & directories, invoking editors, compressing/uncompressing files, creating & expanding archives, compiling programs, sending mail, etc. It looks nice, has colors (if the standard ANSI color sequences are supported), & is user-friendly. * `gmp' **Note Forthcoming GNUs::* (LangT, SrcCD) GNU `mp' is a library for arbitrary precision arithmetic on signed integers and rational numbers. It has a rich set of functions with a regular interface. * GN (SrcCD) GN is a gopher/HTTP server. It recognizes whether the request came from an HTTP (World Wide Web) or gopher client and responds accordingly. * Gnans (SrcCD) Gnans is a program (and language) for the numerical study of deterministic and stochastic dynamical systems. The dynamical systems may evolve in continuous or discrete time. Gnans has graphical & command line interfaces. * GNATS (SrcCD, UtilT) GNATS (GNats: A Tracking System, not to be confused with GNAT, The GNU Ada Translator) is a bug-tracking system. It is based upon the paradigm of a central site or organization which receives problem reports and negotiates their resolution by electronic mail. Although it has been used primarily as a software bug-tracking system so far, it is sufficiently generalized that it could be used for handling system administration issues, project management, or any number of other applications. * `gnuplot' (SrcCD, UtilT, WdwsD) `gnuplot' is an interactive program for plotting mathematical expressions and data. It plots both curves (2 dimensions) & surfaces (3 dimensions). Curiously, it was neither written nor named for the GNU Project; the name is a coincidence. Various GNU programs use `gnuplot'. * `gnuserv' (LspEmcT, SrcCD) `gnuserv' is a enhanced version of Emacs' `emacsclient' program. It lets the user direct a running Emacs to edit files or evaluate arbitrary Emacs Lisp constructs from another process. * GnuGo (SrcCD, UtilT) GnuGo plays the game of Go (Wei-Chi); version 1.2 was released with minor changes for portability, but it is not yet very sophisticated. * `gperf' (LangT, SrcCD) `gperf' generates perfect hash tables. The C version is in package cperf. The C++ version is in libg++. Both produce hash functions in either C or C++. * Graphics (SrcCD, UtilT) GNU Graphics produces x-y plots from ASCII or binary data. It outputs in Postscript, Tektronix 4010 compatible, and Unix device-independent "plot" formats. It has a previewer for the X Window System. Features include a `spline' interpolation program; examples of shell scripts using `graph' and `plot'; a statistics toolkit; and output in TekniCAD TDA and ln03 file formats. Email bugs or queries to Rich Murphey, `Rich@lamprey.utmb.edu'. * grep (DosBC, SrcCD, UtilT) This package has GNU `grep', `egrep', and `fgrep', which find lines that match entered patterns. They are much faster than the traditional Unix versions. * Groff (DjgpD, DosBC, SrcCD, UtilT) Groff is a document formatting system based on a device-independent version of `troff' & includes: `eqn', `nroff', `pic', `refer', `tbl', `troff'; the `man', `ms', & `mm' macros; & drivers for Postscript, TeX `dvi' format, and typewriter-like devices. Groff's `mm' macro package is almost compatible with the DWB `mm' macros with several extensions. Also included is a modified version of the Berkeley `me' macros and an enhanced version of the X11 `xditview' previewer. A driver for the LaserJet 4 series of printers is currently in test. Written in C++, these programs can be compiled with GNU C++ Version 2.5 or later. Groff users are encouraged to contribute enhancements. Most needed are complete Texinfo documentation, a `grap' emulation (a `pic' preprocessor for typesetting graphs), a page-makeup postprocessor similar to `pm' (see `Computing Systems', Vol. 2, No. 2; ask `office@usenix.org' how to get a copy), and an ASCII output class for `pic' to integrate `pic' with Texinfo. Questions and bug reports from users who have read the documentation provided with Groff can be sent to `bug-groff@prep.ai.mit.edu'. * `gzip' (DjgpD, DosBC, LangT, LspEmcT, SrcCD, UtilT) `gzip' can expand LZW-compressed files but uses another, unpatented algorithm for compression which generally produces better results. It also expands files compressed with System V's `pack' program. * `hello' (DosBC, SrcCD, UtilT) The GNU `hello' program produces a familiar, friendly greeting. It allows non-programmers to use a classic computer science tool which would otherwise be unavailable to them. Because it is protected by the GNU General Public License, users are free to share and change it. `hello' is also a good example of a program that meets the GNU coding standards. Like any truly useful program, `hello' contains a built-in mail reader. * `hp2xx' (SrcCD, UtilT) GNU `hp2xx' reads HP-GL files, decomposes all drawing commands into elementary vectors, and converts them into a variety of vector and raster output formats. It is also an HP-GL previewer. Currently supported vector formats include encapsulated Postscript, Uniplex RGIP, Metafont, various special TeX-related formats, and simplified HP-GL (line drawing only) for imports. Raster formats supported include IMG, PBM, PCX, & HP-PCL (including Deskjet & DJ5xxC support). Previewers work under X11 (Unix), OS/2 (PM & full screen), & MS-DOS (SVGA, VGA, & HGC). * HylaFAX (SrcCD, UtilT) HylaFAX (once named FlexFAX) is a facsimile system for Unix systems. It supports sending, receiving, & polled retrieval of facsimile, as well as transparent shared data use of the modem. Details are available on the World Wide Web at: `http://www.vix.com/hylafax/'. * Hyperbole (LspEmcT, SrcCD) Hyperbole, written by Bob Weiner in Emacs Lisp, is an open, efficient, programmable information management & hypertext system, intended for everyday work on any platform supported by Emacs. * `indent' (DosBC, LangT, SrcCD, UtilD) GNU `indent' formats C source code into the GNU indentation style. It also has options to output BSD, K&R, or your own special style. GNU `indent' is more robust & provides more functionality than other such programs, including handling C++ comments. It runs on a number of systems, including DOS & VMS. The next version will also format C++ source code. * Ispell (DosBC, SrcCD, UtilT) Ispell is an interactive spell checker that suggests "near misses" to replace unrecognized words. System & user-maintained dictionaries for multiple languages can be used. Standalone & Emacs interfaces are available. Previously, the FSF had its own version of Ispell ("Ispell 4.0"), but has dropped it for a parallel branch that has had more development ("Ispell 3.1"). (Ispell 3 was an earlier release by the original Ispell author, but others have since made it more sophisticated.) * JACAL *Not available from the FSF except by FTP* JACAL is a symbolic mathematics system for the manipulation and simplification of algebraic equations and expressions. New in JACAL is multivariate factoring from Michael Thomas `(mjt@octavia.anu.edu.au)'. See JACAL's documentation at `http://www-swiss.ai.mit.edu/~jaffer/'. JACAL is written in Scheme using the SLIB portable Scheme Library. It comes with SCM, an IEEE P1178 & R4RS compliant version of Scheme written in C. SCM runs on Amiga, Atari-ST, MS-DOS, OS/2, NOS/VE, Unicos, VMS, Unix, & similar systems. The FSF is not distributing JACAL on any physical media. To get an IBM PC floppy disk with the freely redistributable source & executable files, send $99.00 to: Aubrey Jaffer 84 Pleasant Street Wakefield, MA 01880-1846 USA * `less' (DosBC, SrcCD, UtilD, UtilT) `less' is a display paginator similar to `more' and `pg', but with various features (such as the ability to scroll backwards) that most pagers lack. * `m4' (DosBC, SrcCD, UtilD, UtilT) GNU `m4' is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible, although it has some extensions (e.g., handling more than 9 positional parameters to macros). `m4' also has built-in functions for including files, running shell commands, doing arithmetic, etc. * `make' (BinCD,DjgpD,DosBC,LangT,LspEmcT,SrcCD,UtilD,UtilT)[FSFman] GNU `make' supports POSIX 1003.2 and has all but a few obscure features of the BSD and System V versions of `make'. GNU extensions include long options, parallel compilation, flexible implicit pattern rules, conditional execution, & powerful text manipulation functions. Texinfo source for the `Make Manual' comes with the program (*note Documentation::.). * MandelSpawn (SrcCD, UtilT) A parallel Mandelbrot generation program for the X Window System. * Midnight Commander (`mc') (SrcCD, UtilT) The Midnight Commander is a user friendly and colorful Unix file manager and shell, useful to novice and guru alike. It has a built-in virtual file system that allows the user to manipulate files inside tar files (both regular and compressed) or files on remote machines using the FTP protocol. * `mkisofs' (SrcCD, UtilT) `mkisofs' is a pre-mastering program to generate an ISO 9660 file system. It takes a snapshot of a directory tree, and makes a binary image which corresponds to an ISO 9660 file system when written to a block device. It can also generate the System Use Sharing Protocol records of the Rock Ridge Interchange Protocol (used to further describe the files in an ISO 9660 file system to a Unix host; it provides information such as longer filenames, uid/gid, permissions, and device nodes). Also included is `cdwrite', which can take an image from `mkisofs' and write it to a Phillips CD recorder system attached to a GNU/Linux system. * mtools (SrcCD, UtilT) mtools is a set of public domain programs to allow Unix systems to read, write, and manipulate files on an MS-DOS file system (usually a diskette). * MULE (DosBC, EmcsD, LspEmcT, SrcCD) MULE is a MULtilingual Enhancement to GNU Emacs. MULE text buffers can contain a mix of characters from many languages including: Japanese, Chinese, Korean, Vietnamese, Thai, modern European languages (including Greek & Russian), Arabic, & Hebrew. MULE also provides input methods for all of them. MULE is being merged into GNU Emacs. *Note GNU & Other Free Software in Japan::, for more information about MULE. * `ncurses' (LangT, SrcCD) `ncurses' is an implementation of the Unix `curses' library for developing screen based programs that are terminal independent. * NetHack (SrcCD, UtilT) NetHack is a Rogue-like adventure game supporting character & X displays. * NIH Class Library (LangT, SrcCD) The NIH Class Library (once known as "OOPS", Object-Oriented Program Support) is a portable collection of C++ classes (similar to those in Smalltalk-80) written in C++ by Keith Gorlen of the National Institutes of Health (NIH). * `nvi' (SrcCD, UtilT) `nvi' is a free implementation of the `vi'/`ex' Unix editor. It has most of the functionality of the original `vi'/`ex', except "open" mode & the `lisp' option, which will be added. Enhancements over `vi'/`ex' include split screens with multiple buffers, handling 8-bit data, infinite file & line lengths, tag stacks, infinite undo, & extended regular expressions. It runs under GNU/Linux, BSD, NetBSD, FreeBSD, BSDI, AIX, HP-UX, DGUX, IRIX, PSF, PTX, Solaris, SunOS, Ultrix, and Unixware, & should port easily to other systems. * Oaklisp (SrcCD) Oaklisp is a fast, portable, object-oriented Scheme with first class types. * Objective-C Library **Note Forthcoming GNUs::* (LangT, SrcCD) Our Objective-C Class Library (`libobjects') has general-purpose, non-graphical Objective-C objects written by Andrew McCallum & other volunteers. It includes collection classes for using groups of objects & C types, I/O streams, coders for formatting objects & C types to streams, ports for network packet transmission, distributed objects (remote object messaging), string classes, exceptions, pseudo-random number generators, & time handling facilities. It also includes the foundation classes for the GNUStep project; over 70 of them have already been implemented. The library is known to work on i386/i486/Pentiums, m68k, SPARC, MIPS, HPPA, & RS/6000. Send queries & bug reports to `mccallum@gnu.ai.mit.edu'. * OBST (LangT, SrcCD) OBST is a persistent object management system with bindings to C++. OBST supports incremental loading of methods. Its graphical tools require the X Window System. It features a hands-on tutorial including sample programs. It compiles with G++, and should install easily on most Unix platforms. * Octave (LangT, SrcCD) Octave is a high-level language similar to MATLAB, primarily intended for numerical computations. It has a convenient command line interface for solving linear & nonlinear problems numerically. Octave does arithmetic for real and complex scalars and matrices, solves sets of nonlinear algebraic equations, integrates systems of ordinary differential & differential-algebraic equations, and integrates functions over finite & infinite intervals. Two- & three-dimensional plotting is available using `gnuplot'. Send queries and bug reports to: `bug-octave@bevo.che.wisc.edu'. Texinfo source is included for a 220+ page Octave manual, not yet published by the FSF. * Oleo (SrcCD, UtilT) Oleo is a spreadsheet program (better for you than the more expensive spreadsheets). It supports the X Window System and character-based terminals, and can output Embedded Postscript renditions of spreadsheets. Keybindings should be familiar to Emacs users and are configurable. Oleo supports multiple variable-width fonts when used under the X Window System or outputting to Postscript devices. * `p2c' (LangT, SrcCD) `p2c' is Dave Gillespie's Pascal-to-C translator. It inputs many different dialects (HP, ISO, Turbo, VAX, et al.) and generates readable, maintainable, portable C. * `patch' (DosBC, SrcCD, UtilT) `patch' is our version of Larry Wall's program to take `diff''s output and apply those differences to an original file to generate the modified version. * PCL (LspEmcT, SrcCD) PCL is a free implementation of a large subset of CLOS, the Common Lisp Object System. It runs under both GCL and CLISP, mentioned above. * `perl' (DosBC, LangT, SrcCD) Larry Wall's `perl' combines the features and capabilities of `sed', `awk', `sh', and C. It also provides interfaces to the Unix system calls and many C library routines. * `pine' (SrcCD, UtilT) `pine' is a friendly menu-driven electronic mail manager and user interface . * `ptx' **Note Forthcoming GNUs::* (SrcCD, UtilD, UtilT) GNU `ptx' is our version of the traditional permuted index generator. It handles multiple input files at once, produces TeX compatible output, and generates readable "KWIC" (KeyWords In Context) indexes without using `nroff'. It does not yet handle input files that do not fit in memory all at once. * `rc' (SrcCD, UtilT) `rc' is a shell that features a C-like syntax (much more so than `csh') and far cleaner quoting rules than the C or Bourne shells. It's intended to be used interactively, but is also great for writing scripts. It inspired the shell `es'. * RCS (SrcCD, UtilD, UtilT) RCS, the Revision Control System, is used for version control & management of software projects. Used with GNU `diff', RCS can handle binary files (executables, object files, 8-bit data, etc). RCS now conforms to GNU configuration standards and to POSIX 1003.1b-1993. Also see the CVS item above. * `recode' **Note Forthcoming GNUs::* (SrcCD, UtilT) GNU `recode' converts files between character sets and usages. When exact transliterations are not possible, it may delete the offending characters or fall back on approximations. This program recognizes or outputs nearly 150 different character sets and is able to transliterate files between almost any pair. Most RFC 1345 character sets are supported. * `regex' (LangT, SrcCD) The GNU regular expression library supports POSIX.2, except for internationalization features. It is included in many GNU programs which do regular expression matching & is available separately. An alternate regular expression package, `rx', is faster than `regex' in most cases & will replace `regex' over time. * `rx' (LangT, SrcCD) Tom Lord has written `rx', a new regular expression library which is faster than the older GNU `regex' library. It is now being distributed with `sed' and `tar'. `rx' will be used in the next releases of `m4' and `ptx'. * SAOimage (SrcCD, UtilT) SAOimage is an X-based astronomical image viewer. It reads data images and displays them with a pseudocolor colormap. There is full interactive control of the colormap, reading, and writing of colormaps, etc. * Scheme *For more information, see *Note Scheme Tape::* (SrcCD, SchmT) * `screen' (SrcCD, UtilT) `screen' is a terminal multiplexer that runs several separate "screens" (ttys) on a single character-based terminal. Each virtual terminal emulates a DEC VT100 plus several ISO 2022 and ISO 6429 (ECMA 48, ANSI X3.64) functions, including color. Arbitrary keyboard input translation is also supported. `screen' sessions can be detached and resumed later on a different terminal type. Output in detached sessions is saved for later viewing. * `sed' (DjgpD, DosBC, SrcCD, UtilD, UtilT) `sed' is a stream-oriented version of `ed'. It comes with the `rx' library. * Sharutils (SrcCD, UtilT) `shar' makes so-called shell archives out of many files, preparing them for transmission by electronic mail services; `unshar' helps unpack these shell archives after reception. `uuencode' and `uudecode' are POSIX compliant implementations of a pair of programs to transform files into a format that can be safely transmitted across a 7-bit ASCII link. * Shellutils (DosBC, SrcCD, UtilT) They are: `basename', `date', `dirname', `echo', `env', `expr', `false', `groups', `hostname', `id', `logname', `nice', `nohup', `pathchk', `printenv', `printf', `pwd', `sleep', `stty', `su', `tee', `test', `true', `tty', `uname', `users', `who', `whoami', & `yes'. * Shogi (SrcCD, UtilT) Shogi is a Japanese game similar to Chess; a major difference is that captured pieces can be returned into play. GNU Shogi is a variant of GNU Chess; it implements the same features & similar heuristics. As a new feature, sequences of partial board patterns can be introduced to help the program play toward specific opening patterns. It has both character and X display interfaces. It is primarily supported by Matthias Mutz on behalf of the FSF. * SIPP (SrcCD) SIPP is a library for creating photorealistic renderings of 3D scenes. A scene is built up of objects which can be transformed with rotation, translation, and scaling. The objects form hierarchies where each object can have arbitrarily many subobjects and subsurfaces. A surface is a number of connected polygons which are rendered with either Phong, Gouraud, or flat shading. The library supports programmable shaders and texture mapping with textures in up to 3 dimensions and automatic interpolation of texture coordinates. A scene can be illuminated by an arbitrary number of light sources. The lights from some of them are capable of casting shadows of objects. * Smalltalk *Also see *Note Forthcoming GNUs::* (LangT,SrcCD) GNU Smalltalk is an interpreted object-oriented programming language system written in highly portable C. It has been ported to many Unix, DOS, & other OSes. Features include a binary image save capability, the ability to call user-written C code with parameters, an Emacs editing mode, a version of the X protocol invocable from Smalltalk, optional byte-code compilation and/or execution tracing, & automatically loaded per-user initialization files. It implements all of the classes & protocol in the book "Smalltalk-80: The Language", except for the graphic user interface (GUI) related classes. * SNePS (SrcCD) SNePS is the Semantic Network Processing System. It is an implementation of a fully intensional theory of propositional knowledge representation and reasoning. SNePS runs under CLISP or GCL. * Spinner (SrcCD) Spinner is a modularized, object oriented, non-forking World Wide Web server with high performance and throughput. * Superopt (LangT, SrcCD) Superopt is a function sequence generator that uses an exhaustive generate-and-test approach to find the shortest instruction sequence for a given function. You provide a function as input, a CPU to generate code for, and how many instructions you want. Its use in GCC is described in the `ACM SIGPLAN PLDI'92 Proceedings'. It supports: SPARC, m68k, m68020, m88k, IBM POWER and PowerPC, AMD 29k, Intel x86 and 960, Pyramid, DEC Alpha, Hitachi SH, & HP-PA. * `tar' (DosBC, SrcCD, UtilT) GNU `tar' includes multi-volume support, the ability to archive sparse files, compression/decompression, remote archives, and special features that allow `tar' to be used for incremental and full backups. GNU `tar' uses an early draft of the POSIX 1003.1 `ustar' format which is different from the final version. This will be corrected in the future. * Termcap Library (SrcCD, UtilT) [FSFman] The GNU Termcap library is a drop-in replacement for `libtermcap.a' on any system. It does not place an arbitrary limit on the size of Termcap entries, unlike most other Termcap libraries. Included is source for the `Termcap Manual' in Texinfo format (*note Documentation::.). * Termutils (SrcCD, UtilT) The Termutils package contains programs for controlling terminals. `tput' is a portable way for shell scripts to use special terminal capabilities. `tabs' is a program to set hardware terminal tab settings. * TeX (DosBC, SrcCD) TeX is a document formatting system that handles complicated typesetting, including mathematics. It is GNU's standard text formatter. The University of Washington maintains & supports a tape distribution of TeX for Unix systems. The core material is Karl Berry's `web2c' TeX package. Sources are available via anonymous ftp; retrieval instructions are in `/pub/tex/unixtex.ftp' on `ftp.cs.umb.edu'. If you receive any installation support from the University of Washington, consider sending them a donation. To order a full distribution written in `tar' on either a 1/4inch 4-track QIC-24 cartridge or a 4mm DAT cartridge, send $210.00 to: Pierre A. MacKay Department of Classics DH-10, Denny Hall 218 University of Washington Seattle, WA 98195 USA Electronic-Mail: `mackay@cs.washington.edu' Telephone: +1-206-543-2268 Please make checks payable to: `University of Washington'. Do not specify any other payee. That causes accounting problems. Checks must be in U.S. dollars, drawn on a U.S. bank. Only prepaid orders can be handled. Overseas sites: please add to the base cost $20.00 to ship via air parcel post or $30.00 to ship via courier. Please check with the above for current prices & formats. * Texinfo (DjgpD,DosBC,LangT,LspEmcT,SrcCD,UtilD,UtilT)[FSFman] Texinfo is a set of utilities (`makeinfo', `info', `texi2dvi', `texindex', `tex2patch', & `fixfonts') which generate both printed manuals & online hypertext documentation (called "Info"), & can read online Info documents. Version 3 has both Emacs Lisp & standalone programs written in C or shell script. Texinfo mode for Emacs enables easy editing & updating of Texinfo files. Source for the `Texinfo Manual' is included (*note Documentation::.). * Textutils (DosBC, SrcCD, UtilT) The Textutils programs manipulate textual data. They include: `cat', `cksum', `comm', `csplit', `cut', `expand', `fmt', `fold', `head', `join', `md5sum', `nl', `od', `paste', `pr', `sort', `split', `sum', `tac', `tail', `tr', `unexpand', `uniq', and `wc'. * Tile Forth (LangT, SrcCD) Tile Forth is a 32-bit implementation of the Forth-83 standard written in C, allowing it to be easily ported to new systems and extended with any C-function (graphics, windowing, etc). Many documented Forth libraries are available, including ones for top-down parsing, multi-threads, & object oriented programming. * `time' (SrcCD, UtilT) `time' reports (usually from a shell) the user, system, & real time used by a process. On some systems it also reports memory usage, page faults, etc. * `ucblogo' (LangT, SrcCD) `ucblogo' implements the classic teaching language, Logo. * UUCP (SrcCD, UtilT) GNU's UUCP system (written by Ian Lance Taylor) supports the `f', `g', `v' (all window & packet sizes), `G', `t', `e', Zmodem, & two new bidirectional (`i' & `j') protocols. With a BSD sockets library, it can make TCP connections. With TLI libraries, it can make TLI connections. Source is included for a manual (not yet published by the FSF). * W3 (LspEmcT, SrcCD) W3 (written by William Perry in Emacs Lisp) is an extensible, advanced World Wide Web browser that runs as part of GNU Emacs. It understands many protocols: FTP, gopher, HTML, SMTP, Telnet, WAIS, et al. * `wdiff' (DosBC, SrcCD, UtilT) `wdiff' is a front-end to GNU `diff'. It compares two files, finding the words deleted or added to the first to make the second. It has many output formats and works well with terminals and pagers. `wdiff' is very useful when two texts differ only by a few words and paragraphs have been refilled. * X11 *For details, see *Note X11 Tapes::* (SrcCD, X11OptT, X11ReqT) * `xboard', `xshogi' (SrcCD, UtilT) `xboard' is an X Window interface to GNU Chess. `xshogi' is an X Window interface to GNU Shogi. They use the R4 Athena widgets and Xt Intrinsics to provide an interactive referee for managing a game between a user & a computer opponent, or between two computers. You can also use `xboard' without GNU Chess to play through games in files or to play through games manually (force mode); in this case, moves aren't validated. * `xgrabsc' (SrcCD) `xgrabsc' is a screen capture program similar to `xwd' but providing more ways of selecting the part of the screen to capture and different types of output: Postscript, color Postscript, xwd, bitmap, pixmap, and puzzle. * `Ygl' (SrcCD, UtilT) `Ygl' emulates a subset of SGI's GL (Graphics Language) library under X11 on GNU/Linux with XFree, AIX 3.2, ConvexOS, HP-UX, SunOS, et al. It has most two-dimensional graphics routines, the queue device & query routines, double buffering, RGB mode with dithering, FORTRAN bindings, at al. Program/Package Cross Reference ******************************* Here is a list of what package each GNU program or library is in. You can FTP the current list in the file `/pub/gnu/ProgramIndex' from a GNU FTP host (listed in *Note How to Get GNU Software::). * a2p perl * a2x xopt * ac bsd44 * accton bsd44 * ackpfd phttpd * acl bsd44 * acm acm * acms acm * addftinfo Groff * adventure bsd44 * afm2tfm TeX * amd bsd44 * ansitape bsd44 * AnswerGarden xopt * apply bsd44 * appres xreq * apropos bsd44 * ar Binutils * arithmetic bsd44 * arp bsd44 * atc bsd44 * autoconf Autoconf * autoheader Autoconf * autoreconf Autoconf * autoscan Autoconf * autoupdate Autoconf * auto_box xopt * auto_box xreq * b2m Emacs * backgammon bsd44 * bad144 bsd44 * badsect bsd44 * banner bsd44 * basename Shellutils * bash BASH * battlestar bsd44 * bc bc * bcd bsd44 * bdes bsd44 * bdftops Ghostscript * beach_ball xopt * beach_ball xreq * beach_ball2 xopt * bibtex TeX * biff bsd44 * bison Bison * bitmap xreq * boggle bsd44 * bpltobzr Fontutils * bugfiler bsd44 * buildhash Ispell * bzrto Fontutils * c++ GCC * c++filt Binutils * c2ph perl * ca100 xopt * caesar bsd44 * cal bsd44 * calendar bsd44 * canfield bsd44 * cat Textutils * cbars wdiff * cc GCC * cc1 GCC * cc1obj GCC * cc1plus GCC * cccp GCC * cdwrite mkisofs * cfengine cfengine * cgi Spinner * charspace Fontutils * checknr bsd44 * chess bsd44 * chflags bsd44 * chgrp Fileutils * ching bsd44 * chmod Fileutils * chown Fileutils * chpass bsd44 * chroot bsd44 * ci RCS * cksum Textutils * cktyps g77 * clisp CLISP * clri bsd44 * cmail xboard * cmmf TeX * cmodext xopt * cmp Diffutils * co RCS * col bsd44 * colcrt bsd44 * colrm bsd44 * column bsd44 * comm Textutils * compress bsd44 * comsat bsd44 * connectd bsd44 * cp Fileutils * cpicker xopt * cpio cpio * cpp GCC * cppstdin perl * cribbage bsd44 * crock xopt * csh bsd44 * csplit Textutils * ctags Emacs * ctwm xopt * cu UUCP * cut Textutils * cvs CVS * cvscheck CVS * cvtmail Emacs * cxterm xopt * d Fileutils * date Shellutils * dc bc * dd Fileutils * ddd DDD * delatex TeX * demangle Binutils * descend CVS * detex TeX * df Fileutils * dhtppd phttpd * diff Diffutils * diff3 Diffutils * digest-doc Emacs * dipress bsd44 * dir Fileutils * dirname Shellutils * dish xopt * disklabel bsd44 * diskpart bsd44 * dld dld * dm bsd44 * dmesg bsd44 * doschk doschk * dox xopt * du Fileutils * dump bsd44 * dump mkisofs * dumpfs bsd44 * dvi2tty TeX * dvicopy TeX * dvips TeX * dvitype TeX * ecc ecc * echo Shellutils * ed ed * edit-pr GNATS * editres xreq * edquota bsd44 * eeprom bsd44 * egrep grep * emacs Emacs * emacsclient Emacs * emacsserver Emacs * emacstool Emacs * emu xopt * env Shellutils * eqn Groff * error bsd44 * es es * esdebug es * etags Emacs * ex nvi * expand Textutils * expect DejaGnu * expr Shellutils * exterm xopt * f2c f2c * factor bsd44 * fakemail Emacs * false Shellutils * fastboot bsd44 * fax2ps HylaFAX * faxalter HylaFAX * faxanswer HylaFAX * faxcover HylaFAX * faxd HylaFAX * faxd.recv HylaFAX * faxmail HylaFAX * faxquit HylaFAX * faxrcvd HylaFAX * faxrm HylaFAX * faxstat HylaFAX * fc f2c * fdraw xopt * ffe g77 * fgrep grep * file bsd44 * find Findutils * find2perl perl * finger Finger * fingerd Finger * fish bsd44 * fixfonts Texinfo * fixinc.svr4 GCC * fixincludes GCC * flex flex * flex++ flex * fmt bsd44 * fold Textutils * font2c Ghostscript * fontconvert Fontutils * forth Tile Forth * forthicon Tile Forth * forthtool Tile Forth * fortune bsd44 * fpr bsd44 * freq Ispell * freqtbl Ispell * from bsd44 * fsck bsd44 * fsplit bsd44 * fstat bsd44 * ftp bsd44 * ftpd bsd44 * g++ GCC * gas Binutils * gawk GAWK * gcc GCC * gcore bsd44 * gdb GDB * genclass libg++ * gettext gettext * getty bsd44 * gftodvi TeX * gftopk TeX * gftype TeX * ghostview Ghostview * git GIT * gitaction GIT * gitcmp GIT * gitkeys GIT * gitmatch GIT * gitmount GIT * gitps GIT * gitredir GIT * gitrgrep GIT * gitview GIT * gitwipe GIT * gn GN * gnans Gnans * gnanslator Gnans * gnats GNATS * gnuchess Chess * gnuchessc Chess * gnuchessn Chess * gnuchessr Chess * gnuchessx Chess * gnuclient gnuserv * gnudoit gnuserv * gnupdisp Shogi * gnuplot gnuplot * gnuplot_x11 gnuplot * gnuserv gnuserv * gnushogi Shogi * gnushogir Shogi * gnushogix Shogi * go GnuGo * gpc xopt * gpc xreq * gperf cperf * gperf libg++ * gprof Binutils * graph Graphics * grep grep * grodvi Groff * groff Groff * grops Groff * grotty Groff * groups Shellutils * gs Ghostscript * gsbj Ghostscript * gsdj Ghostscript * gslj Ghostscript * gslp Ghostscript * gsnd Ghostscript * gsrenderfont Fontutils * gunzip gzip * gwm xopt * gzexe gzip * gzip gzip * h2ph perl * h2pl perl * hack bsd44 * hangman bsd44 * head Textutils * hello hello * hexdump bsd44 * hexl Emacs * hostname Shellutils * hp2xx hp2xx * hterm xopt * htmlencode phttpd * httpd apache * httpdecode phttpd * i18nOlwmV2 xopt * i2mif xopt * ico xopt * ico xreq * id Shellutils * ident RCS * ifconfig bsd44 * ifnames Autoconf * ImageMagick xopt * imageto Fontutils * iman xopt * imgrotate Fontutils * indent indent * indxbib Groff * inetd bsd44 * info Texinfo * inimf TeX * init bsd44 * initex TeX * inn bsd44 * install Fileutils * iostat bsd44 * isodiag mkisofs * isodump mkisofs * ispell Ispell * ixterm xopt * ixx xopt * join Textutils * jot bsd44 * jove bsd44 * kdestroy bsd44 * kdump bsd44 * kermit bsd44 * kgames xopt * kgmon bsd44 * kill bsd44 * kinit bsd44 * kinput2 xopt * klist bsd44 * kpasswdd bsd44 * ksrvtgt bsd44 * kterm xopt * ktrace bsd44 * lam bsd44 * larn bsd44 * lasergnu gnuplot * last bsd44 * lastcomm bsd44 * latex TeX * lclock xopt * ld Binutils * leave bsd44 * less less * lesskey less * libavcall.a ffcall * libbfd.a Binutils * libbfd.a GDB * libbzr.a Fontutils * libc.a C Library * libcompat.a bsd44 * libcurses.a bsd44 * libcurses.a ncurses * libdcurses.a ncurses * libedit.a bsd44 * libF77.a f2c * libF77.a g77 * libg++.a libg++ * libgdbm.a gdbm * libgf.a Fontutils * libgmp.a gmp * libgnanslib Gnans * libI77.a f2c * libI77.a g77 * libkvm.a bsd44 * libm.a bsd44 * libncurses.a ncurses * libnihcl.a NIHCL * libnihclmi.a NIHCL * libnihclvec.a NIHCL * libnls.a xreq * libobjects.a libobjects * liboctave.a Octave * liboldX.a xreq * libpbm.a Fontutils * libPEXt.a xopt * libpk.a Fontutils * libresolv.a bsd44 * librpc.a bsd44 * libsipp.a SIPP * libtcl.a DejaGnu * libtelnet.a bsd44 * libterm.a bsd44 * libtermcap.a Termcap * libtfm.a Fontutils * libutil.a bsd44 * libvacall.a ffcall * libWc.a xopt * libwidgets.a Fontutils * libX.a xreq * libXau.a xreq * libXaw.a xreq * libXcp.a xopt * libXcu.a xopt * libXdmcp.a xreq * libXmp.a xopt * libXmu.a xreq * libXO.a xopt * libXop.a xopt * libXp.a xopt * libXpex.a xopt * libXt.a xopt * libXt.a xreq * libXwchar.a xopt * liby.a bsd44 * libYgl.a Ygl * limn Fontutils * listres xopt * listres xreq * lkbib Groff * ln Fileutils * locate Findutils * lock bsd44 * logcvt-ip2n phttpd * logger bsd44 * login bsd44 * logname Shellutils * logo ucblogo * lookbib Groff * lorder bsd44 * lpr bsd44 * ls Fileutils * m4 m4 * mail bsd44 * mail-files Sharutils * mailshar Sharutils * make make * make-docfile Emacs * make-path Emacs * makeindex TeX * makeinfo Texinfo * MakeTeXPK TeX * man bsd44 * man-macros Groff * mattrib mtools * maze xopt * maze xreq * mazewar xopt * mc mc * mcd mtools * mcopy mtools * mcserv mc * mdel mtools * mdir mtools * me-macros Groff * merge RCS * mesg bsd44 * mf TeX * mformat mtools * mft TeX * mgdiff xopt * mh bsd44 * mille bsd44 * mkcache GN * mkdep bsd44 * mkdir Fileutils * mkfifo Fileutils * mkisofs mkisofs * mklocale bsd44 * mkmanifest mtools * mkmf bsd44 * mkmodules CVS * mknod Fileutils * mkstr bsd44 * mlabel mtools * mm-macros Groff * mmd mtools * monop bsd44 * more bsd44 * morse bsd44 * mount bsd44 * mountd bsd44 * movemail Emacs * mprof bsd44 * mrd mtools * mread mtools * mren mtools * ms-macros Groff * msgcmp gettext * msgfmt gettext * msgmerge gettext * msgs bsd44 * msgunfmt gettext * mst Smalltalk * mt cpio * mterm xopt * mtree bsd44 * mtype mtools * mule MULE * muncher xopt * mv Fileutils * mvdir Fileutils * mwrite mtools * nethack NetHack * netstat bsd44 * newfs bsd44 * nfsd bsd44 * nfsiod bsd44 * nfsstat bsd44 * nice Shellutils * nl Textutils * nlmconv Binutils * nm Binutils * nohup Shellutils * notify HylaFAX * nroff Groff * number bsd44 * objc GCC * objcopy Binutils * objdump Binutils * objective-c GCC * obst-boot OBST * obst-CC OBST * obst-cct OBST * obst-cgc OBST * obst-cmp OBST * obst-cnt OBST * obst-cpcnt OBST * obst-csz OBST * obst-dir OBST * obst-dmp OBST * obst-gen OBST * obst-gsh OBST * obst-init OBST * obst-scp OBST * obst-sil OBST * obst-stf OBST * oclock xreq * octave Octave * od Textutils * oleo Oleo * ora-examples xopt * p2c p2c * pagesize bsd44 * palette xopt * pascal bsd44 * passwd bsd44 * paste Textutils * patch patch * patgen TeX * pathalias bsd44 * pathchk Shellutils * pax bsd44 * pbmplus xopt * perl perl * pfbtops Groff * phantasia bsd44 * phttpd phttpd * pic Groff * pico pine * pig bsd44 * pine pine * ping bsd44 * pixedit xopt * pixmap xopt * pktogf TeX * pktype TeX * plaid xopt * plot2fig Graphics * plot2plot Graphics * plot2ps Graphics * plot2tek Graphics * pltotf TeX * pollrcvd HylaFAX * pom bsd44 * pooltype TeX * portmap bsd44 * ppt bsd44 * pr Textutils * pr-addr GNATS * pr-edit GNATS * primes bsd44 * printenv Shellutils * printf Shellutils * protoize GCC * proxygarb Spinner * ps bsd44 * ps2ascii Ghostscript * ps2epsi Ghostscript * ps2fax HylaFAX * psbb Groff * pstat bsd44 * psycho xopt * ptester phttpd * ptx ptx * pubdic+ xopt * puzzle xopt * puzzle xreq * pwd Shellutils * pyramid xopt * query-pr GNATS * quiz bsd44 * quot bsd44 * quota bsd44 * quotacheck bsd44 * quotaon bsd44 * rain bsd44 * random bsd44 * ranlib Binutils * rbootd bsd44 * rc rc * rcp bsd44 * rcs RCS * rcs-to-cvs CVS * rcs2log Emacs * rcsdiff RCS * rcsfreeze RCS * rcsmerge RCS * rdist bsd44 * reboot bsd44 * recode recode * recvstats HylaFAX * red ed * refer Groff * remsync Sharutils * renice bsd44 * repquota bsd44 * restore bsd44 * rev bsd44 * rexecd bsd44 * rlog RCS * rlogin bsd44 * rlogind bsd44 * rm Fileutils * rmail bsd44 * rmdir Fileutils * rmt cpio * rmt tar * robots bsd44 * rogue bsd44 * route bsd44 * routed bsd44 * rr xopt * rs bsd44 * rsh bsd44 * rshd bsd44 * runtest DejaGnu * runtest.exp DejaGnu * ruptime bsd44 * rwho bsd44 * rwhod bsd44 * s2p perl * sail bsd44 * saoimage SAOimage * savecore bsd44 * sc bsd44 * sccs bsd44 * sccs2rcs CVS * scdisp xopt * screen screen * script bsd44 * scsiformat bsd44 * sctext xopt * sdiff Diffutils * sed sed * send-pr GNATS * sendfax HylaFAX * sendmail bsd44 * sgi2fax HylaFAX * sgn GN * sh bsd44 * shar Sharutils * shinbun xopt * shogi Shogi * showfont xopt * showmount bsd44 * shutdown bsd44 * size Binutils * sj3 xopt * sjxa xopt * slattach bsd44 * sleep Shellutils * sliplogin bsd44 * snake bsd44 * snftobdf xopt * soelim Groff * sort Textutils * sos2obst OBST * spider xopt * split Textutils * startslip bsd44 * stf OBST * strings Binutils * strip Binutils * stty Shellutils * su Shellutils * sum Textutils * superopt Superopt * swapon bsd44 * sync bsd44 * sysctl bsd44 * syslogd bsd44 * systat bsd44 * tabs Termutils * tac Textutils * tail Textutils * taintperl perl * talk bsd44 * talkd bsd44 * tangle TeX * tar tar * tbl Groff * tcl DejaGnu * tclsh DejaGnu * tcopy bsd44 * tcp Emacs * tee Shellutils * tek2plot Graphics * telnet bsd44 * telnetd bsd44 * test Shellutils * test-g++ DejaGnu * test-tool DejaGnu * tetris bsd44 * tex TeX * tex3patch Texinfo * texi2dvi Texinfo * texindex Texinfo * texspell TeX * textfmt HylaFAX * tfmtodit Groff * tftopl TeX * tftp bsd44 * tftpd bsd44 * tgrind TeX * time time * timed bsd44 * timer Emacs * timex xopt * tip bsd44 * tkpostage xopt * tn3270 bsd44 * touch Fileutils * tput Termutils * tr Textutils * traceroute bsd44 * transcript HylaFAX * transfig xopt * trek bsd44 * trn3 bsd44 * troff Groff * trpt bsd44 * trsp bsd44 * true Shellutils * tset bsd44 * tsort bsd44 * tty Shellutils * ttygnans Gnans * tunefs bsd44 * tupdate gettext * tvtwm xopt * twm xreq * ul bsd44 * ulpc Spinner * umount bsd44 * uname Shellutils * uncompress gzip * unexpand Textutils * unifdef bsd44 * unify wdiff * uniq Textutils * unprotoize GCC * unshar Sharutils * unvis bsd44 * update bsd44 * updatedb Findutils * users Shellutils * uuchk UUCP * uucico UUCP * uuconv UUCP * uucp UUCP * uucpd bsd44 * uudecode Sharutils * uudir UUCP * uuencode Sharutils * uulog UUCP * uuname UUCP * uupick UUCP * uurate UUCP * uusched UUCP * uustat UUCP * uuto UUCP * uux UUCP * uuxqt UUCP * v Fileutils * vacation bsd44 * vandal xopt * vcdiff Emacs * vdir Fileutils * vftovp TeX * vgrind bsd44 * vi nvi * viewres xopt * viewres xreq * vine xopt * vipw bsd44 * virmf TeX * virtex TeX * vis bsd44 * vmstat bsd44 * vptovf TeX * w bsd44 * waisgn GN * wakeup Emacs * wall bsd44 * wargames bsd44 * wc Textutils * wdiff wdiff * weave TeX * what bsd44 * whatis bsd44 * whereis bsd44 * who Shellutils * whoami Shellutils * whois bsd44 * window bsd44 * winterp xopt * wish DejaGnu * worm bsd44 * worms bsd44 * write bsd44 * wump bsd44 * x11perf xreq * x2p perl * xalarm xopt * xancur xopt * xargs Findutils * xauth xreq * xbfe Fontutils * xbiff xopt * xbiff xreq * xboard xboard * xboing xopt * xbuffy3 xopt * xcalc xopt * xcalc xreq * xcalendar xopt * xcdplayer xopt * xcell xopt * xclipboard xreq * xclock xreq * xcmdmenu xopt * xcms xopt * xcmsdb xreq * xcmstest xreq * xco xopt * xcolorize xopt * xcolors xopt * xconsole xreq * xcrtca xopt * xdaliclock xopt * xdiary xopt * xditview Groff * xditview xopt * xditview xreq * xdm xreq * xdpyinfo xreq * xdu xopt * xdvi TeX * xdvi xopt * xdvorak xopt * xearth xopt * xed xopt * xedit xopt * xedit xreq * xev xopt * xev xreq * xexit xopt * xeyes xopt * xeyes xreq * xfd xreq * xfed xopt * xfedor xopt * xfeoak xopt * xferstats HylaFAX * xfig xopt * xfontsel xopt * xfontsel xreq * xforecast xopt * xgas xopt * xgas xreq * xgc xopt * xgc xreq * xgettext gettext * xhearts xopt * xhelp xopt * xhost xreq * xinit xreq * xkeycaps xopt * xkill xreq * xlax xopt * xlayout xopt * xlbiff xopt * xless xopt * xload xopt * xload xreq * xlogin xopt * xlogo xreq * xlsatoms xreq * xlsclients xreq * xlsfonts xreq * xmag xreq * xmail xopt * xmailbox xopt * xmailwatcher xopt * xman xopt * xman xreq * xmandel xopt * xmessage xopt * xmeter xopt * xmh xreq * xmh-icons xopt * xmh.editor xopt * xmodmap xreq * xmon xopt * xmove xopt * xmphone xopt * xpd xopt * xphoon xopt * xpipeman xopt * xplot Graphics * xpostit xopt * xpr xopt * xpr xreq * xprompt xopt * xproof xopt * xprop xreq * xpserv xopt * xrdb xreq * xrefresh xreq * xrsh xopt * xrubik xopt * xrunclient xopt * xscope xopt * xscreensaver xopt * xsession xopt * xset xreq * xsetroot xreq * xshogi xshogi * xstdcmap xreq * xstr bsd44 * xtalk xopt * xterm xreq * xterm_color xopt * xtetris xopt * xTeXcad.13 xopt * xtiff xopt * xtree xopt * xtv xopt * xwd xreq * xwininfo xreq * xwud xreq * yacc bsd44 * yes Shellutils * youbin xopt * yow Emacs * zcat gzip * zcmp gzip * zdiff gzip * zforce gzip * zgrep gzip * zmore gzip * znew gzip * [ Shellutils Tapes ***** We offer Unix source code on tapes in `tar' format on these media: * 4mm DAT cartridge tape. * 8mm Exabyte cartridge tape. * Sun DC300XLP QIC-24 1/4in cartridge (readable on some other systems). * Hewlett-Packard 16-track DC600HC 1/4in cartridge tape. * IBM RS/6000 QIC-150 1/4in cartridge (readable on some other systems). * 1600bpi 9-track 1/2in reel tape. The contents of the various tapes for Unix systems are the same; only the media are different. For prices, see the *note Free Software Foundation Order Form::.. Source code for the manuals & reference cards is included (*note Documentation::.). Some of the files on the tapes are compressed with `gzip' to allow more files on each tape. Refer to the top-level `README' file at the beginning of each tape for instructions on uncompressing them. `uncompress' and `unpack' *do not work*! Languages Tape -------------- This tape contains programming tools: compilers, interpreters and, related programs (parsers, translators, debuggers, linkers, etc.). * Binutils 2.6 * Bison 1.24 * C Library 1.09 * cperf 2.1a * DejaGnu 1.2 * dld 3.2.3 * ecc 1.2.1 * f2c 1995.02.24 * flex 2.5.2 * g77 0.5.17 * GAWK 2.15.6 * GCC/G++/Objective-C 2.7.2 * GDB 4.15.1 * gdbm 1.7.3 * gettext 0.10 * gmp 1.3.2 * gzip 1.2.4 * indent 1.9.1 * libg++ 2.7.1 * libobjects 0.1.3 * make 3.74 * ncurses 1.9.4 * NIHCL 3.1.4 * OBST 3.4.3 * Octave 1.1.1 * p2c 1.20 * perl 4.036 * perl 5.001 * regex 0.12 * rx 0.05 * Smalltalk 1.1.1 * Superopt 2.5 * Texinfo 3.6 * Tile Forth 2.1 * ucblogo 3.3 Lisps/Emacs Tape ---------------- This tape has Common Lisp systems and libraries, GNU Emacs, assorted extensions that work with Emacs, manuals, & a few other important utilities. * Calc 2.02c * CLISP 1995.12.04 * CLX 5.02 * Common Lisp 2.2 * Elib 0.06 * Emacs 18.59 * Emacs 19.28 * Emacs 19.30 * GNU Emacs Lisp Reference Manual Ed. 1.03 for Version 18 * GNU Emacs Lisp Reference Manual Ed. 2.4 for Version 19.29 * gnuserv 2.1alpha * gzip 1.2.4 * Hyperbole 4.01 * make 3.74 * MULE 2.3 * PCL 2.2 * Programming in Emacs Lisp: An Introduction Ed. 1.04 * Texinfo 3.6 * W3 2.2.25 Utilities Tape -------------- This tape consists mostly of smaller utilities and miscellaneous applications. * acm 4.7 * Autoconf 2.7 * BASH 1.14.5 * bc 1.03 * cfengine 1.2.14 * cfengine 1.2.22 * Chess 4.0.pl75 * cpio 2.3 * CVS 1.6 * Diffutils 2.7 * doschk 1.1 * ed 0.2 * es 0.84 * Fileutils 3.12 * Findutils 4.1 * Finger 1.37 * Fontutils 0.6 * Ghostscript 2.6.2 * Ghostview 1.5 * Ghostview for Windows 1.0 * GIT 4.3.6 * GNATS 3.2 * GnuGo 1.2 * gnuplot 3.5 * Graphics 0.17 * grep 2.0 * Groff 1.10 * gzip 1.2.4 * hello 1.3 * hp2xx 3.1.4 * HylaFAX 3.0.0 * Ispell 3.1.20 * less 2.9.0 * m4 1.4 * make 3.74 * MandelSpawn 0.07 * mc 3.0 * mkisofs 1.04 * mm 1.07 * mtools 2.0.7 * NetHack 3.1.3 * nvi 1.34 * Oleo 1.6 * patch 2.1 * pine 3.91 * ptx 0.4 * rc 1.4 * RCS 5.7 * readline 2.0 * recode 3.4 * SAOimage 1.16 * screen 3.7.1 * sed 2.05 * Sharutils 4.2 * Shellutils 1.12 * Shogi 1.2.3 * tar 1.11.8 * Termcap 1.3 * Termutils 2.0 * Texinfo 3.6 * Textutils 1.13 * time 1.6 * UUCP 1.06.1 * wdiff 0.5 * xboard 3.4.pl0 * xshogi 1.2.03 * Ygl 3.0.3 Scheme Tape ----------- Scheme is a simplified, lexically-scoped dialect of Lisp. It was designed at MIT and other universities to teach students the art of programming and to research new parallel programming constructs and compilation techniques. This tape now has MIT Scheme 7.3, which conforms to the "Revised^4 Report On the Algorithmic Language Scheme" (MIT AI Lab Memo 848b), for which TeX source is included. It is written partly in C, but is presently hard to bootstrap. Binaries that can be used to bootstrap it exist for: HP 9000 series 300, 400, 700, & 800 (running HP-UX 9.0), NeXT (NeXT OS 2 or 3.2), DEC Alpha (OSF/1), IBM RS/6000 (AIX), Sun-3 or Sun-4 (SunOS 4.1), DECstation 3100/5100 (Ultrix 4.0), Sony NeWS-3250 (NEWS OS 5.01), & Intel i386 (MS-DOS, Windows 3.1 or NT). If your system is not on this list & you don't enjoy the bootstrap challenge, see "JACAL" in *Note GNU Software::. X11 Tapes --------- The two X11 tapes contain Version 11, Release 6 of the X Window System. The first tape has all of the core software, documentation, & some contributed clients. We call this the "required" X tape since it is necessary for running X or Emacs under X. The second, "optional" tape has contributed libraries & toolkits, the Andrew User Interface System, games, etc. The X11 Required tape also contains all fixes and patches released to date. We update this tape as new fixes and patches are released for programs on both tapes. *Note Tape & CD-ROM Subscription Service::. While supplies last, we will distribute X11R5 on the *Note November 1993 Source Code CD-ROM::. Berkeley 4.4BSD-Lite Tape ------------------------- The "4.4BSD-Lite" release is the last from the Computer Systems Research Group at the University of California at Berkeley. It has most of the BSD software system, except for a few files that remain proprietary. It is much more complete than the previous "Net2" release. VMS Emacs and VMS Compiler Tapes -------------------------------- We offer two VMS tapes. One has just GNU Emacs 18.59 (none of the other software on the *Note Lisps/Emacs Tape::, is included). The other has GCC 2.3.3, Bison 1.19 (to compile GCC), `gas' 1.38 (to assemble GCC's output), and some library and include files (none of the other software on the *Note Languages Tape::, is included). We are not aware of a GDB port for VMS. Both VMS tapes have DEC VAX executables from which you can bootstrap, as the DEC VMS C compiler cannot compile GCC. We do not have executables for DEC Alpha VMS systems. Please do not ask us to devote effort to VMS support, because it is peripheral to the GNU Project. CD-ROMs ******* We offer these CD-ROMs: * Several editions of our *Note Source Code CD-ROMs::. * *Note December 1995 Compiler Tools Binaries CD-ROM::. * *Note December 1994 Compiler Tools Binaries CD-ROM::. * *Note December 1993 Compiler Tools Binaries CD-ROM::. * *Note MS-DOS Book with CD-ROM::. * *Note Debian GNU/Linux Book with CD-ROM::. Our CD-ROMs are in ISO 9660 format & can be mounted as a read-only file system on most computers. If your driver supports it you can mount each CD with "Rock Ridge" extensions (the MS-DOS CD-ROM is only in ISO 9660 format), & it will look just like an ordinary Unix file system, rather than one full of truncated & otherwise mangled names that fit vanilla ISO 9660. You can build most of the software without copying the sources off the CD. You only need enough disk space for object files and intermediate build targets. Pricing of the GNU CD-ROMs -------------------------- If a business or organization is ultimately paying, the December 1995 Source CDs costs $240. It costs $60 if you, an individual, are paying out of your own pocket. The December 1995 Compiler Tools Binaries CD-ROM costs $220 for a business or organization, and $55 for an individual. What do the individual and company prices mean? ............................................... The software on our disks is free; anyone can copy it and anyone can run it. What we charge for is the physical disk and the service of distribution. We charge two different prices depending on who is buying. When a company or other organization buys the December 1995 Source CD-ROMs, we charge $240. When an individual buys the same CD-ROM, we charge just $60. This distinction is not a matter of who is allowed to use the software. In either case, once you have a copy, you can distribute as many copies as you wish and there's no restriction on who can have or run them. The price distinction is entirely a matter of what kind of entity pays for the CD. You, the reader, are certainly an individual, not a company. If you are buying a disk "in person", then you are probably doing so as an individual. But if you expect to be reimbursed by your employer, then the disk is really for the company; so please pay the company price and get reimbursed for it. We won't try to check up on you--we use the honor system--so please cooperate. Buying CDs at the company price is very helpful for GNU; just 140 Source CDs at that price support an FSF programmer or tech writer for a year. Why is there an individual price? ................................. In the past, our distribution tapes have been ordered mainly by companies. The CD at the price of $240 provides them with all of our software for a much lower price than they would previously have paid for six different tapes. To lower the price more would cut into the FSF's funds very badly and decrease the software development we can do. However, for individuals, $240 is too high a price; hardly anyone could afford that. So we decided to make CDs available to individuals at the lower price of $60. Is there a maximum price? ......................... Our stated prices are minimum prices. Feel free to pay a higher price if you wish to support GNU development more. The sky's the limit; we will accept as high a price as you can offer. Or simply give a donation (tax-deductible in the U.S.) to the Free Software Foundation, a tax-exempt public charity. December 1995 Compiler Tools Binaries CD-ROM -------------------------------------------- We now have the third edition of our CD-ROM that has binaries and complete sources for GNU compiler tools for some systems which lack a compiler. This enables the people who use these systems to compile GNU and other free software without having to buy a proprietary compiler. You can also use these GNU tools to compile your own C/C++/Objective-C programs. Older editions of this CD are available while supplies last at a reduced price; see the *note Free Software Foundation Order Form::.. We hope to have more systems on each update of this CD. If you can help build binaries for new systems (especially those that don't come with a C compiler), or have one to suggest, please contact us at the addresses on page 1. These packages: * DJGPP 1.12m4 from GCC 2.6.3 * GCC/G++/Objective-C 2.7.1 * GNU C Library 1.09 * GDB 4.15.1 * Binutils 2.6 * Bison 1.24 * Emacs 19.29 (MS-DOS only) * Flex 2.5.2 * Make 3.74 * libg++ 2.7.1 On these platforms: * `i386-msdos' * `hppa1.0-hp-hpux9' * `sparc-sun-solaris2' * `sparc-sun-sunos4.1' December 1994 Compiler Tools Binaries CD-ROM -------------------------------------------- We still have the 2nd edition of our CD-ROM that contains executables for GNU compiler tools for some systems which lack a compiler. This enables the people who use these systems to compile GNU and other free software without having to buy a proprietary compiler. You can also use the GNU compilation system to compile your own C/C++/Objective-C programs. We hope to have more systems on each update of this CD. If you can help build binaries for new systems (especially those that don't come with a C compiler), or have one to suggest, please contact us at the addresses on page 1. These packages: *DJGPP 1.12.m2 from GCC 2.6.0 *GCC/G++/Objective-C 2.6.2 *GNU C Library 1.09 *GDB 4.13 *Binutils 2.5.2 *Bison 1.22 *Emacs 19.26 (MS-DOS only) *Flex 2.4.7 *Make 3.72.1 *libg++ 2.6.1 On these platforms: *`i386-msdos' *`hppa1.1-hp-hpux9' *`sparc-sun-solaris2' *`sparc-sun-sunos4.1' December 1993 Compiler Tools Binaries CD-ROM --------------------------------------------- We still have the 1st edition of our CD-ROM that contains executables for GNU compiler tools for some systems which lack a compiler. This will allow users of those systems to compile GNU and other free software without having to buy a proprietary compiler. The CD-ROM is in ISO 9660 format and can be mounted as a read-only file system on most operating systems. If your driver supports it you can mount the CD-ROM with "Rock Ridge" extensions and it will look just like an ordinary Unix file system, rather than one full of truncated and otherwise mangled names that fit the vanilla ISO 9660 specifications. We hope to have more systems included with each update of this CD-ROM. If you can help build binaries for new systems (especially for systems that don't come with a C compiler), or have a system to suggest, please contact us at either address on the front cover. These programs: * DJGPP 1.11.m1 * GCC/G++/Objective C 2.5.7 * GDB 4.11 * GAS 2.2 * Binutils 2.3 * Bison 1.22 * Flex 2.4.5 * Make 3.70 * libg++ 2.5.3 For these platforms: * `i386-msdos' * `hppa1.1-hp-hpux9' * `sparc-sun-solaris2' * `sparc-sun-sunos4.1' Source Code CD-ROMs ------------------- We have several versions of our Source Code CD-ROMs available, including: * *Note December 1995 Source Code CD-ROMs::, the newest release, has programs, bug fixes, & improvements not on the other CDs. * *Note June 1995 Source Code CD-ROM::. * *Note May 1994 Source Code CD-ROM::.. * *Note November 1993 Source Code CD-ROM::. * May 1993 Source Code CD-ROM, see the *note Free Software Foundation Order Form::.. * October 1992 Source Code CD-ROM, see the *note Free Software Foundation Order Form::.. The older Source CDs are available while supplies last at a reduced price (please note that the December 1994 Source CD is permanently out of stock). All the Source CDs have Texinfo source for the GNU manuals listed in *Note Documentation::. The VMS tapes' contents are *not* included. Many programs that are only on MS-DOS diskettes & not on the tapes are also *not* included. The MIT Scheme & X11 Optional tapes' contents are *not* on the older Source CDs. *Note Tapes:: & *Note MS-DOS Diskettes::. There are no precompiled programs on these Source CDs. You will need a C compiler (programs which need some other interpreter or compiler normally provide the C source for a bootstrapping program). We ship C compiler binaries for some systems on the *Note Compiler Tools Binaries CD-ROM::. December 1995 Source Code CD-ROMs ................................. The 7th edition of our Source CD is out! Due to increasing amounts of GNU Software, the Source Code CD is now a two disc set--the price remains unchanged! It contains these packages, & some manuals that are not part of packages: * acm 4.7 * apache 0.8.8 * Autoconf 2.7 * BASH 1.14.5 * bc 1.03 * Binutils 2.5.2 * Binutils 2.6 * Bison 1.24 * C Library 1.09 * Calc 2.02c * cfengine 1.2.21 * Chess 4.0.pl75 * CLISP 1995.08.12 * Common Lisp 2.2 * cperf 2.1a * cpio 2.3 * CVS 1.6 * DDD 1.3b * DejaGnu 1.2.9 * Diffutils 2.7 * dld 3.2.3 * doschk 1.1 * ecc 1.2.1 * ed 0.2 * Elib 0.07 * Elisp archive * Emacs 18.59 * Emacs 19.28 * Emacs 19.29 * Emacs 19.30 * es 0.84 * f2c 1995.11.18 * ffcall 1.0 * Fileutils 3.12 * Findutils 4.1 * Finger 1.37 * flex 2.5.2 * Fontutils 0.6 * g77 0.5.17 * GAWK 2.15.6 * GCC/G++/Objective C 2.7.1 * GDB 4.15.1 * gdbm 1.7.3 * gettext 0.9a * Ghostscript 2.6.2 * Ghostview 1.5 * Ghostview for Windows 1.0 * GIT 4.3.7 * gmp 1.3.2 * GN 2.23 * Gnans 1.5 * GNATS 3.2 * GNU Emacs Lisp Reference Manual, Ed. 1.03 for Version 18.59 * GNU Emacs Lisp Reference Manual, Ed. 2.4 for Version 19.29 * GnuGo 1.2 * gnuplot 3.5 * gnuserv 2.1alpha * Graphics 0.17 * grep 2.0 * Groff 1.09 * gzip 1.2.4 * hello 1.3 * hp2xx 3.1.4 * HylaFAX v3.0pl0 * Hyperbole 4.01 * indent 1.9.1 * Ispell 3.1.20 * less 290 * libg++ 2.7.1 * libobjects 0.1.3 * m4 1.4 * make 3.74 * mc 3.0 * MIT Scheme 7.3 * mkisofs 1.04GNU * mtools 2.0.7 * MULE 2.3 * ncurses 1.9.7a * NetHack 3.1.3 * NIHCL 3.1.4 * nvi 1.34 * Oaklisp 93.07.23 * OBST 3.4.3 * Octave 1.1.1 * Oleo 1.6 * p2c 1.20 * patch 2.1 * perl 4.036 * perl 5.001 * phttpd 0.99.68 * pine 3.91 * Programming in Emacs Lisp: An Introduction, Ed. 1.04 * ptx 0.4 * rc 1.4 * RCS 5.7 * recode 3.4 * regex 0.12 * rx 0.05 * SAOimage 1.08 * screen 3.7.1 * sed 2.05 * Sharutils 4.1 * Shellutils 1.12 * Shogi 1.2p03 * SIPP 3.1 * Smalltalk 1.1.1 * SNePS 2.3.1 * Spinner 1.0b11 * Superopt 2.5 * tar 1.11.8 * Termcap 1.3 * TeX 3.145 * Texinfo 3.6 * Textutils 1.13 * Tile Forth 2.1 * time 1.6 * tput 1.0 * ucblogo 3.3 * UUCP 1.06.1 * W3 2.2.25 * wdiff 0.5 * X11R6 * xboard 3.3.pl3 * xgrabsc 2.41 * xshogi 1.2p03 * Ygl 3.0.2 June 1995 Source Code CD-ROM ............................ We still have the 6th edition of our Source CD at a reduced price while supplies last. Not all FSF distributed software is included (*note Source Code CD-ROMs::.). It contains these packages, and some manuals that are not part of packages: * acm 4.7 * Autoconf 2.4 * BASH 1.14.5 * bc 1.03 * Binutils 2.5.2 * Bison 1.24 * C Library 1.09 * Calc 2.02c * cfengine 1.0.4 * Chess 4.0.pl74 * CLISP 1995.04.25 * Common Lisp 2.1 * cperf 2.1a * cpio 2.3 * CVS 1.3 * DejaGnu 1.2 * Diffutils 2.7 * dld 3.2.3 * doschk 1.1 * ecc 1.2.1 * ed 0.2 * elib 0.06 * Emacs 18.59 * Emacs 19.28 * Emacs 19.29 * GNU Emacs Lisp Reference Manual Ed. 1.03 for Version 18 * GNU Emacs Lisp Reference Manual Ed. 2.4 for Version 19.29 * es 0.84 * f2c 1995.02.24 * Fileutils 3.12 * Findutils 4.1 * Finger 1.37 * flex 2.5.2 * Fontutils 0.6 * g77 0.5.15 * GAWK 2.15.6 * GCC/G++/Objective C 2.6.3 * GCC/G++/Objective C 2.7.0 * GDB 4.14 * gdbm 1.7.3 * Ghostscript 2.6.2 * Ghostview 1.5 * Ghostview for Windows 1.0 * GIT 4.3.6 * gmp 1.3.2 * GNATS 3.2 * GnuGo 1.1 * gnuplot 3.5 * Graphics 0.17 * grep 2.0 * Groff 1.09 * gzip 1.2.4 * hello 1.3 * hp2xx 3.1.4 * HylaFAX 3.0.pl0 * indent 1.9.1 * Ispell 3.1.18 * less 2.90 * libg++ 2.6.2 * libg++ 2.7.0 * libobjects 0.1.3 * m4 1.4 * make 3.74 * MandelSpawn 0.07 * mkisofs 1.03GNU * mtools 2.0.7 * MULE 2.2 * ncurses 1.9.1 * NetHack 3.1.3 * NIHCL 3.1.4 * nvi 1.34 * OBST 3.4.3 * Octave 1.1.1 * Oleo 1.6 * p2c 1.20 * patch 2.1 * PCL 2.1 * perl 4.036 * perl 5.001 * pine 3.91 * Programming in Emacs Lisp: An Introduction Ed. 1.03 for Version 19 * ptx 0.4 * rc 1.4 * RCS 5.7 * recode 3.4 * regex 0.12 * rx 0.05 * screen 3.6.2 * sed 2.05 * Sharutils 4.1 * Shellutils 1.12 * Shogi 1.2p03 * Smalltalk 1.1.1 * Superopt 2.5 * tar 1.11.8 * Termcap 1.2 * TeX 3.1415 * Texinfo 3.6 * Textutils 1.12 * Tile Forth 2.1 * time 1.6 * tput 1.0 * ucblogo * UUCP 1.05 * wdiff 0.5 * X11R6 * xboard 3.2.pl2 * xshogi 1.2p03 * Ygl 2.9.5 May 1994 Source Code CD-ROM ........................... We still have the 4th edition of our Source CD, at a reduced price. This CD has Edition 2.3 for version 19 of the `GNU Emacs Lisp Reference Manual' & some additional software; not all FSF distributed software is included (see ``Source Code CD-ROMs''). It contains the following packages: *acm 4.5 *Autoconf 1.10 *BASH 1.13.5 *bc 1.02 *Binutils 2.3 *Bison 1.22 *C Library 1.08 *Calc 2.02c *Chess 4.0.69 *CLISP 1994.01.08 *Common Lisp 1.0 *cpio 2.3 *CVS 1.3 *dc 0.2 *DejaGnu 1.2 *Diffutils 2.6 *dld 3.2.3 *doschk 1.1 *ecc 1.2.1 *ed 0.1 *elib 0.06 *Emacs 18.59 *Emacs 19.23 *es 0.84 *f2c 1994.04.14 *Fileutils 3.9 *find 3.8 *finger 1.37 *flex 2.4.6 *Fontutils 0.6 *GAS 1.36.utah *GAS 2.2 *Gawk 2.15.4 *GCC 2.5.8 *GDB 4.12 *gdbm 1.7.1 *Ghostscript 2.6.1 *Ghostview 1.5 *Ghostview for Windows 1.0 *gmp 1.3.2 *GNATS 3.2 *GnuGo 1.1 *gnuplot 3.5 *gperf 2.1a *Graphics 0.17 *grep 2.0 *Groff 1.09 *gzip 1.2.4 *hello 1.3 *hp2xx 3.1.4 *indent 1.9.1 *ispell 4.0 *libg++ 2.5.3 *m4 1.1 *Make 3.71 *MandelSpawn 0.07 *mtools 2.0.7 *MULE 1.0 *NetFax 3.2.1 *Nethack 3.1.3 *NIHCL 3.0 *nvi 1.11 *Octave 1.0 *Oleo 1.5 *p2c 1.20 *patch 2.1 *PCL 1993.03.18 *perl 4.036 *ptx 0.3 *rc 1.4 *RCS 5.6.0.1 *recode 3.3 *regex 0.12 *screen 3.5.2 *sed 2.05 *shellutils 1.9.4 *Shogi 1.1.02 *Smalltalk 1.1.1 *Superopt 2.3 *tar 1.11.2 *Termcap 1.2 *TeX 3.1 *Texinfo 3.1 *Textutils 1.9.1 *Tile Forth 2.1 *time 1.6 *tput 1.0 *UUCP 1.05 *uuencode 1.0 *wdiff 0.04 *X11R6 *xboard 3.0.9 *xshogi 1.2.02 November 1993 Source Code CD-ROM ................................ We still have the 3rd edition of our Source CD, at a reduced price, while supplies last. It was the last Source Code CD to contain X11R5. This CD has Edition 2.2 for version 19 of the `GNU Emacs Lisp Reference Manual' & some additional software; not all FSF distributed software is included (*note Source Code CD-ROMs::.). It contains these packages: * acm 3.1 * Autoconf 1.7 * BASH 1.13.4 * bc 1.02 * Binutils 1.9 2.3 * Bison 1.22 * C Library 1.06.7 * Calc 2.02b * Chess 4.0p62 * CLISP 93.11.08 * cpio 2.3 * CVS 1.3 * dc 0.2 * DejaGnu 1.0.1 * Diffutils 2.6 * dld 3.2.3 * doschk 1.1 * ecc 1.2.1 * elib 0.06 * Emacs 18.59 * Emacs 19.21 * es 0.84 * f2c 1993.04.28 * Fileutils 3.9 * find 3.8 * Finger 1.37 * flex 2.3.8 * Fontutils 0.6 * GAS 1.36.utah * GAS 1.38.1 * GAS 2.2 * GAWK 2.15.3 * GCC/G++/Objective C 2.5.4 * GDB 4.11 * gdbm 1.7.1 * Ghostscript 2.6.1 * Ghostview 1.5 * Ghostview for Windows 1.0 * gmp 1.3.2 * GNATS 3.01 * GnuGo 1.1 * gnuplot 3.5 * cperf 2.1a * Graphics 0.17 * grep 2.0 * Groff 1.08 * gzip 1.2.4 * hello 1.3 * hp2xx 3.1.3a * indent 1.8 * Ispell 4.0 * less 177 * libg++ 2.5.1 * m4 1.1 * make 3.69.1 * MandelSpawn 0.06 * mtools 2.0.7 * MULE 1.0 * NetFax 3.2.1 * NetHack 3.1.3 * NIHCL 3.0 * Oleo 1.5 * p2c 1.20 * patch 2.1 * PCL 93.03.18 * perl 4.036 * ptx 0.3 * rc 1.4 * RCS 5.6.0.1 * recode 3.2.4 * regex 0.12 * screen 3.5.2 * sed 1.18 2.03 * Shellutils 1.9.1 * Shogi 1.1p02 * Smalltalk 1.1.1 * Superopt 2.3 * tar 1.11.2 * Termcap 1.2 * TeX 3.1 * Texinfo 3.1 * Tile Forth 2.1 * time 1.6 * time 1.6 * tput 1.0 * UUCP 1.04 * uuencode 1.0 * wdiff 0.04 * X11R5 MS-DOS Book with CD-ROM ----------------------- We are working on our first book describing GNU Software for MS-DOS, but we do not know when it will be finished. It will include a CD-ROM with all the sources & binaries on the MS-DOS Diskettes and more. Please do NOT contact us about this book until we announce it on our mailing lists (to subscribe, ask `info-gnu-request@prep.ai.mit.edu'), because it just slows us down. Debian GNU/Linux Book with CD-ROM --------------------------------- We are working on our first book describing Debian GNU/Linux but we do not know when it will be finished. Please do NOT contact us about this book until we announce it on our mailing lists (ask `info-gnu-request@prep.ai.mit.edu' to subscribe), because it just slows us down. A CD will be inside the book with sources & binaries for Debian GNU/Linux, which is a complete operating system for i386/i486/Pentium. It is a GNU/Linux system--that is to say, a variant GNU system which uses Linux as the kernel. (All the systems now available that use the Linux kernel are GNU/Linux systems, see item "Linux" in *Note Free Software for Microcomputers::.) Debian is being developed by Ian Murdock and the Debian Association in conjunction with the Free Software Foundation. We are distributing it as an interim measure until the GNU kernel (the Hurd) is ready for users. For details on Debian & how to help, see URL: `http://www.debian.org/' or FTP, `/pub/gnu/GNUinfo/DEBIAN' from a GNU FTP host (*note How to Get GNU Software::.). FTP Debian under `/debian' from `ftp.debian.org'. MS-DOS Diskettes **************** The FSF distributes some of the GNU software ported to MS-DOS, on 3.5inch 1.44MB diskettes. These disks have both sources and executables. DJGPP Diskettes --------------- We offer DJGPP on 30 diskettes. For further details, see *Note GNU Software::. The DJGPP diskettes contain the following: * Binutils 2.5.2 * Bison 1.22 * Diffutils 2.6 * DJGPP 1.12m4 * flex 2.4.7 * GCC/G++ 2.6.3 * GDB 4.12 * Groff 1.09 * gzip 1.24 * libg++ 2.6.2 * make 3.71 * patch 2.1 * sed 1.18 * Texinfo 3.1 Emacs Diskettes --------------- Two versions of GNU Emacs are included on the Emacs diskettes we distribute: GNU Emacs version 19.29 handles 8-bit character sets; the other, MULE version 2.2, handles 16-bit character sets including Kanji. Selected Utilities Diskettes ---------------------------- The GNUish MS-DOS Project ported GNU software to PC compatibles. Though GNUish is no longer active, users still ask for these ports done some years ago. We offer these ports on five diskettes. In general, the ports run on 8086/80286-based 16-bit machines; an 80386 is not required. Some are necessarily missing features. Included are: `cpio', `diff', `find', `flex', `gdbm', `grep', `indent', `less', `m4', `make', `ptx', RCS, `sed', `shar', `sort', & Texinfo. Windows Diskette ---------------- We offer GNU Chess and `gnuplot' for Microsoft Windows on a single diskette. Tape & CD-ROM Subscription Service ********************************** If you do not have net access, our subscription service enables you to stay current with the latest GNU developments. For a one-time cost equivalent to three tapes or CD-ROMs (plus shipping in some cases), we will ship you four new versions of the tape of your choice or the Source Code CD-ROM. The tapes are sent each quarter; the CD-ROMs are sent as they are issued (currently twice a year, but we hope to make it more frequent). Regularly, we will send you a new version of a Lisps/Emacs, Languages, Utilities, or X Window System (X11R6) Required tape, or the Source CD-ROM. The MIT Scheme and X Window System Optional tapes are not changed often enough to warrant quarterly updates. We do not yet know if we will be offering subscriptions to the Compiler Tools Binaries or our new Books with CD-ROM. Since Emacs 19 is on the Lisps/Emacs Tape and the Source CD-ROM, a subscription to either is an easy way to keep current with Emacs 19 as it evolves. A subscription is an easy way to keep up with the regular bug fixes to the X Window System. We update the X11R6 Required tape as fixes and patches are issued throughout the year. Each edition of the *Note Source Code CD-ROMs::, also has updated sources for the required part of the X Window System. Please note: In two cases, you must pay 4 times the normal shipping required for a single order when you pay for each subscription. If you're in Alaska, Hawaii, or Puerto Rico you must add $20.00 for shipping for each subscription. If you're outside of U.S., Canada, and Puerto Rico, you must add $80.00 for each subscription. See "Unix and VMS Software" and "Shipping Instructions" on the *note Free Software Foundation Order Form::.. FSF T-shirt *********** There is a GNU & improved T-shirt. The front has the GNU Emacs Lisp code `(USE 'GNU)' with "`()'" being the dancing parentheses from the cover of our `GNU Emacs Lisp Reference Manual' (drawn by Berkeley, CA artist Etienne Suvasa). The back of the shirt is still imprinted with the Preamble to the GNU General Public License. These shirts come in two colors, Natural & Black. Natural is an off-white, unbleached, undyed, environment-friendly cotton, printed with black ink, & is great for tye-dyeing or displaying as is. Black is printed with white ink & is perfect for late night hacking. All shirts are thick 100% cotton, & come in sizes M, L, XL, & XXL. GNU shirts often create spontaneous friendships at technical conferences and on major university campuses! (They also make great gifts!) Free Software Foundation Order Form *********************************** All items are distributed with permission to copy and to redistribute. Texinfo source for each manual and source for each reference card is on the appropriate tape, diskette, or CD-ROM; the prices for these magnetic media do not include printed documentation. All items are provided on an ``as is'' basis, with no warranty of any kind. Please allow six weeks for delivery (though it won't usually take that long). PRICE AND CONTENTS MAY CHANGE WITHOUT NOTICE AFTER June 30, 1996. Unix and VMS Software --------------------- These tapes in the formats indicated (*note Tapes::., for contents): Please circle the dollar amount for each tape you order. Reel to Sun (1) HP IBM (2) Exabyte DAT reel RS/6000 Unix tar Unix tar Unix tar Unix tar Unix tar Unix tar 9-track QIC-24 16-track QIC-150 1600 bpi DC300XLP DC600HC DC600A 1/2" reel 1/4" c.t. 1/4" c.t. 1/4" c.t. 8mm c.t. 4mm c.t. (c.t. = cartridge tape) Lisps/Emacs $200 $210 $230 $215 $205 $225 Languages $200 $210 $230 $215 $205 $225 Utilities $200 $210 $230 $215 $205 $225 4.4BSD-Lite $200 $210 $230 $215 $205 $225 Scheme $200 $210 $230 $215 $205 $225 X11R6-Required $200 $210 $230 $215 $205 $225 X11R6-Optional $200 $210 $230 $215 $205 $225 (1) Sun tapes can be read on some other Unix systems. (2) IBM RS/6000 tapes can be read on some other Unix systems. Subscriptions, 4 updates for one year (*note Tape & CD-ROM Subscription Service::.): Emacs $600 $630 $690 $645 $615 $675 Languages $600 $630 $690 $645 $615 $675 Utilities $600 $630 $690 $645 $615 $675 X11R6-Required $600 $630 $690 $645 $615 $675 Subtotal $ ______ Please put total of the above circled amounts here. These 1600 bpi reel-to-reel 9 track 1/2" tapes, in VMS BACKUP format (aka interchange format) (*note VMS Emacs and VMS Compiler Tapes::.): ____ @ $195 = $ ______ VMS Emacs, GNU Emacs source & executables only. ____ @ $195 = $ ______ VMS Compiler, GCC, GAS, and Bison source and executables only. FSF Deluxe Distribution ....................... (Please call with any questions. *note Deluxe Distribution::. for machine, operating system, and media types.): ____ @ $5000 = $ ______ The Deluxe Distribution, with manuals, etc. Machine: _____________________________________________________________________ Operating system: ____________________________________________________________ Media type: __________________________________________________________________ Version of X Windows System to build: _______________________________________ CD-ROMs, in ISO 9660 format (*note CD-ROMs::.): .............................................. GNU Source Code CD-ROMs, Version 7 with X11R6 (*note December 1995 Source Code CD-ROMs::.): ____ @ $240 = $ ______ for corporations and other organizations. ____ @ $ 60 = $ ______ for individuals. Subscriptions, next 4 updates, of the Source Code CD-ROM, in ISO 9660 format (*note Tape & CD-ROM Subscription Service::.): ____ @ $720 = $ ______ for corporations and other organizations. ____ @ $180 = $ ______ for individuals. GNU Compiler Tools Binaries CD-ROM, Version 3, December 1995 Edition (*note Compiler Tools Binaries CD-ROM::.): ____ @ $220 = $ ______ for corporations and other organizations. ____ @ $55 = $ ______ for individuals. MS-DOS Software --------------- The following sources and executables for MS-DOS, on 3.5" 1.44MB diskettes (*note MS-DOS Diskettes::.): ____ @ $ 90 = $ ______ Emacs diskettes, GNU Emacs, for 80386 and up. ____ @ $ 80 = $ ______ DJGPP diskettes, GCC version 2, and other tools for 80386 and up (also on the *note Compiler Tools Binaries CD-ROM::.). ____ @ $ 85 = $ ______ Selected Utilities diskettes, 8086 and up. ____ @ $ 40 = $ ______ Windows diskette: GNU Chess and gnuplot for Microsoft Windows. Manuals ------- These manuals (*note Documentation::.). The latest version of each manual will be shipped. Please call if you want a specific version. ____ @ $ 25 = $ ______ GNU Emacs version manual, with a reference card. ____ @ $ 50 = $ ______ GNU Emacs Lisp Reference manual, in two volumes. ____ @ $ 60 = $ ______ GNU Emacs Lisp Reference, Japanese Edition. ____ @ $ 50 = $ ______ Using and Porting GNU CC. ____ @ $ 50 = $ ______ GNU C Library Reference Manual. ____ @ $ 50 = $ ______ GNU Emacs Calc manual, with a reference card. ____ @ $ 20 = $ ______ Programming in Emacs Lisp: An Introduction. ____ @ $ 20 = $ ______ Debugging with GDB, with a reference card. ____ @ $ 25 = $ ______ GAWK manual. ____ @ $ 20 = $ ______ Make manual. ____ @ $ 20 = $ ______ Bison manual, with a reference card. ____ @ $ 20 = $ ______ Flex manual, with a reference card. ____ @ $ 20 = $ ______ Texinfo manual. ____ @ $ 15 = $ ______ Termcap manual. Reference Cards --------------- The following reference cards, in packets of ten. For single copies please call. ____ @ $ 10 = $ ______ GNU Emacs version 19 reference cards. ____ @ $ 10 = $ ______ GNU Emacs Calc reference cards. ____ @ $ 10 = $ ______ GDB reference cards. ____ @ $ 10 = $ ______ Bison reference cards. ____ @ $ 10 = $ ______ Flex reference cards. T-shirts -------- GNU/FSF T-shirts, thick 100% cotton (*note FSF T-shirt::.): ____ @ $ 15 = $ ______ Size M ____ natural ____ black. ____ @ $ 15 = $ ______ Size L ____ natural ____ black. ____ @ $ 15 = $ ______ Size XL ____ natural ____ black. ____ @ $ 15 = $ ______ Size XXL ____ natural ____ black. Older Items ----------- Older items are only available while supplies last. ____ @ $ 5 = $ ______ GNU Emacs version 18 reference cards, in packets of ten. Please fill in the number of each older CD-ROM you order: for for corporations individuals: and other organizations: GNU Compiler Tools Binaries CD-ROM December 1994 Edition (Version 2) ____________ ____________ GNU Compiler Tools Binaries CD-ROM December 1993 Edition (Version 1) ____________ ____________ Please note that the December 1994 Source CD is permanently out of stock. GNU Source Code CD-ROM June 1995 edition with X11R6 ____________ ____________ GNU Source Code CD-ROM May 1994 edition with X11R6 ____________ ____________ GNU Source Code CD-ROM November 1993 edition with X11R5 ____________ ____________ GNU Source Code CD-ROM May 1993 edition with X11R5 ____________ ____________ GNU Source Code CD-ROM October 1992 edition with X11R5 ____________ ____________ Please put the total count and cost of the above older CD-ROMs here: ____ @ $ 80 = $ ______ for corporations and other organizations. ____ @ $ 20 = $ ______ for individuals. ====== Subtotal $ ______ Tax and Shipping Costs ---------------------- + $ ______ For addresses in Massachusetts: add 5% sales tax or give tax exempt number. There is no sales tax on T-shirts. + $ ______ Shipping fee for addresses in Alaska, Hawaii, or Puerto Rico: $ 5.00 base charge; + $ 5.00 for *each* Emacs Calc or Emacs Lisp Reference manual ($ 5.00 * #ofMans); + $ 20.00 for *each* tape subscription or CD subscription ($20.00 * #ofSubs); + $ 1.00 for *each* item other then the above (shipping for all other items = $ 1.00 * #ofOtherItems). + $ ______ Shipping fee for most Foreign Destinations: (Please do *not* use this formula for addresses in China, Guam, Indonesia, Israel, Malaysia, New Zealand, Philippines, and Thailand. Please fax, or call for an exact shipping quote.) $ 20.00 base charge for orders to other addresses outside of U.S., Canada, & Puerto Rico: + $ 80.00 for *each* tape subscription or CD subscription ($ 80.00 * #ofSubs); + $ 10.00 for *each* of the other items in the order ($ 10.00 * #ofItems). + $ ______ Optional (tax-deductible in the U.S.) donation. ------ We suggest 5% if paying by credit card. TOTAL $ ______ We pay for shipping via UPS ground transportation in the contiguous 48 states and Canada. For very large orders, ask about actual shipping costs for that order. Shipping Information -------------------- Name: ________________________________________________________________________ Mail Stop/Dept. Name: ________________________________________________________ Organization: ________________________________________________________________ Street Address: ______________________________________________________________ City/State/Province: _________________________________________________________ Zip Code/Postal Code/Country: ________________________________________________ Telephone number in case of a problem with your order. For international orders, please include a Fax number. _______________________ ------------------------------------------------------------------------------ | | | Orders filled only upon receipt of check, money order, or credit card | | order in U.S. dollars. Unpaid orders will be returned to the sender. | | We do not have the staff to handle the billing of unpaid orders. Please | | help keep our lives simple by including your payment with your order. | | | ------------------------------------------------------------------------------ For orders from outside the U.S.: --------------------------------- You are responsible for paying all duties, tariffs, and taxes. If you refuse to pay the charges, the shipper will return or abandon the order. --------------------------------------------------------------------------- | | | Please make checks payable to the ``Free Software Foundation''. | | | --------------------------------------------------------------------------- For Credit Card Orders: ----------------------- The Free Software Foundation takes these credit cards: Carte Blanche, Diner's Club, JCB, MasterCard, Visa, or American Express. Please note that we are charged about 5% of an order's total amount in credit card processing fees. Please consider paying by check instead, or adding on a 5% donation to make up the difference. To place a credit card order, please give us this information: Card type: ___________________________________________________________________ Account Number: ______________________________________________________________ Expiration Date: _____________________________________________________________ Cardholder's Signature: ______________________________________________________ ------------------------------------------------------------------------------ | | | If you wish to pay by wire transfer or you are a reseller, please | | call or write us for details. | | | ------------------------------------------------------------------------------ Please mail orders to: Free Software Foundation 59 Temple Place -- Suite 330 Boston, MA 02111 PRICES AND CONTENTS MAY CHANGE +1-617-542-5942 WITHOUT NOTICE AFTER June 30, 1996. Fax (including Japan): +1-617-542-2652 Version: January 1996 ASCII etc/ORDERS ----------------------------------------------------------------------------- local variables: mode: text fill-column: 78 end: xemacs-21.4.22/etc/ORDERS.EUROPE0000644000175000017500000000036406256071510013737 0ustar acsacsThe Free Software Foundation does not currently have a distributor in Europe. Please use the file etc/ORDERS in the GNU Emacs distribution or the ftpable file prep.ai.mit.edu:/pub/gnu/GNUinfo/ORDERS to order from the FSF in the United States. xemacs-21.4.22/etc/ORDERS.JAPAN0000644000175000017500000002223506256071510013572 0ustar acsacs Note: this file describes how you order software from the Free Software Foundation directly. Information on getting XEmacs can be found in the file DISTRIB. GNU ORDER FORM FOR JAPAN Prices and contents may change without notice after June 30, 1996. Item Unit Price Quantity Item Price ---------------------------------------- ---------- -------- ---------- * indicates New or Substantially Updated items. * Compiler Tools Binaries CD-ROM December '95 Y32,000 ________ __________ Edition, Version 3, if a corporation or other organization is ultimately paying. * Compiler Tools Binaries CD-ROM December '95 Y8,000 ________ __________ Edition, Version 3, if an individual is ultimately paying. * Source Code CD-ROM December '95 Edition, Y40,000 ________ __________ Version 7, with X11R6, if a corporation or other organization is ultimately paying. * Source Code CD-ROM December '95 Edition, Y10,000 ________ __________ Version 7, with X11R6, if an individual is ultimately paying. Source Code CD-ROM November '93 Edition, Y40,000 ________ __________ Version 3, with X11R5, if a corporation or other organization is ultimately paying (while supplies last). Source Code CD-ROM November '93 Edition, Y10,000 ________ __________ Version 3, with X11R5, if an individual is ultimately paying (while supplies last). Subscription to next four editions of the Y125,000 ________ __________ Source Code CD-ROMs. (There is no subscription yet to the Compiler Tools Binaries CD-ROM.) * Source Code on Tape Y30,000 ________ __________ (per tape; see the next page for more details.) Emacs manual, with reference card Y3,700 ________ __________ (Eleventh Edition for Version 19.29) * Programming in Emacs Lisp, An Introduction Y3,100 ________ __________ (Edition 1.04) * Emacs Lisp Reference manual, in two volumes Y7,100 ________ __________ (Edition 2.4 for Version 19.29) * Emacs Lisp Reference, Japanese Edition manual Y8,000 ________ __________ (Japanese DRAFT Revision 1.0, Dec 1995, from English Edition 2.4 for Version 19.29) Emacs Calc manual, with reference card Y7,400 ________ __________ (Edition 2.02 for Version 2.02) Using and Porting GNU CC manual Y7,100 ________ __________ (September 1994 Edition for Version 2.6) GNU C Library Reference manual Y7,400 ________ __________ (Edition 0.06 for Version 1.09) Debugging with GDB manual, with reference card Y3,100 ________ __________ (Edition 4.12 for Version 4.14) Texinfo manual (Edition 2.21 for Version 3) Y2,800 ________ __________ Termcap manual (Second Edition for Version 1.2) Y2,100 ________ __________ Bison manual, with reference card Y2,100 ________ __________ (December 1993 Edition for Version 1.23) * Gawk manual (Edition 1.0 for Version 3.0) Y3,700 ________ __________ * Make manual (Edition 0.49 for Version 3.74) Y2,800 ________ __________ Flex manual, with reference card Y2,100 ________ __________ (Edition 1.03 for Version 2.3.7) Packet of ten Emacs 19 reference cards Y1,500 ________ __________ Packet of ten Emacs 18 reference cards Y1,500 ________ __________ (while supplies last) Packet of ten GDB reference cards Y1,500 ________ __________ Packet of ten Emacs Calc reference cards Y1,500 ________ __________ Packet of ten Bison reference cards Y1,500 ________ __________ Packet of ten Flex reference cards Y1,500 ________ __________ FSF T-shirt (size M) Y5,000 ________ __________ Color: Natural or Black (circle) FSF T-shirt (size L) Y5,000 ________ __________ Color: Natural or Black (circle) FSF T-shirt (size XL) Y5,000 ________ __________ Color: Natural or Black (circle) FSF T-shirt (size XXL) Y5,000 ________ __________ Color: Natural or Black (circle) Shipping Y1,500 Optional donation--help the FSF write more free software! __________ Total __________ The following is your shipping label. Please write clearly using Romaji. All orders must be prepaid. See the next page for payment instructions. Name: ___________________________________________________________________ Company: ________________________________________________________________ Address: ________________________________________________________________ Please also provide the following information in case there is a problem with your order. Telephone: ________________ Fax: ________________ E-Mail: _________________ ____ Please add my name to the mailing list for future FSF events in Japan. I prefer to be notified by: ______ fax _____ e-mail ____ Please send me information regarding the GNU corporate deluxe software and documentation package. ____ My company is interested in becoming a corporate sponsor of the FSF. ____ I am interested in working as a volunteer for the FSF. Prices and contents may change without notice after June 30, 1996. Version: January 1996 ASCII etc/ORDERS.JAPAN Free Software Foundation FAX 001-1-617-542-2652 59 Temple Place - Suite 330 Voice 001-1-617-542-5942 Boston, MA 02111-1307 E-mail gnu@prep.ai.mit.edu U.S.A. GNU ORDER FORM ADDITIONAL INSTRUCTIONS You can fax your order directly to 001-1-617-542-2652. Inquires may be made to gnu@prep.ai.mit.edu. Orders may also be sent by ordinary mail to: Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 U.S.A. Orders may be prepaid either by credit card or by bank transfer. The credit cards we accept are JCB, Visa, MasterCard, Diner's Club, Carte Blanche, and American Express. Please provide your card type, expiration date, account number, and your signature. Bank transfer payments should be made to the following account: Bank: Sanwa Bank Branch: Azabu Branch (#620) Account name: Free Software Foundation Account number: 3683216 Prices and contents may change without notice after June 30, 1996. All software and publications are distributed with permission to copy and to redistribute. Texinfo source for each manual is on the Source Code CD-ROM and/or on the appropriate tape. We will ship the latest version of each manual, unless you instruct us otherwise. The minimum order amount (before postage) is Y5,000. The FSF regrets that it cannot fill orders for smaller amounts. Please contact the FSF directly by telephone at 001-1-617-542-5942 or by fax at 001-1-617-542-2652 prior to placing any orders for greater than Y500,000. The FSF offers a deluxe package to Japanese corporations which consists of source code in your preferred format, a set of custom binaries for your preferred architecture and operating system, and a complete documentation set with reference cards. Purchasers of the corporate deluxe package will also receive invitations to future private presentations conducted by Richard Stallman in Japan. The price for the corporate deluxe package is Y1,000,000. For more information, contact the FSF directly. Software may also be ordered on magnetic tape. The following tape titles are available: * Lisps/Emacs * Languages * Utilities * Scheme * 4.4BSD-Lite * X11R6-Required X11R6-Optional X11R5-Required X11R5-Optional The following tape formats are available: Generic Unix tar 9-track 1600bpi 1/2" reel tape Generic Unix tar DAT 4mm cartridge tape Generic Unix tar Exabyte 8mm cartridge tape Sun Unix tar QIC-24 DC300XLP 1/4" cartridge tape (may also be read on other systems) HP Unix tar 16-track DC600HC 1/4" cartridge tape IBM RS/6000 Unix tar QIC-150 DC600A 1/4" cartridge tape (may also be read on other systems) VMS backup 9-track 1600bpi 1/2" reel tape (only two titles: GNU Emacs and GCC/GAS/Bison) Please indicate your desired tape titles and formats on a separate sheet of paper and fax that along with your order. If you need information regarding which programs are on which tapes, please consult the Japanese edition of the January 1996 GNU Bulletin. If you do not have a copy of the Japanese edition of the GNU Bulletin, please contact the FSF. For T-shirt orders, please circle desired color. Richard Stallman regrets that he cannot autograph items ordered by mail. If time permits, he will autograph items purchased at or brought to speaking engagements. All sales are final. Prices and contents may change without notice after June 30, 1996. Please do not fax this page. For use in Japan only. Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 U.S.A. xemacs-21.4.22/etc/OXYMORONS0000644000175000017500000000302510344402535013353 0ustar acsacsThe theme of the gamma series of 21.4 releases is "oxymoron", that is, contradiction in terms. Each patchlevel will be assigned a unique codename from the list below. The rationale for the first should be obvious. The second and third are my tributes to Richard Stallman and the early developers of Lucid Emacs/XEmacs (primarily Jamie Zawinski, but it also fits Ben Wing which is appropriate to the Mule theme), in chronological order. I cannot list all the debts this release owes for individual contributions, but I must credit the fundamental excellence of the design of [X]Emacs for inspiring the audacious proposal to add both GTK and Windows/MULE to XEmacs over a period of two months, and for the success of the GTK merge. Without the prospect of such a big win, I could not have justified trying to coordinate a release myself. 21.4.0: Solid Vapor 21.4.1: Copyleft 21.4.2: Developer-Friendly Unix APIs 21.4.3: Academic Rigor 21.4.4: Artificial Intelligence 21.4.5: Civil Service 21.4.6: Common Lisp 21.4.7: Economic Science 21.4.8: Honest Recruiter 21.4.9: Informed Management 21.4.10: Military Intelligence 21.4.11: Native Windows TTY Support 21.4.12: Portable Code 21.4.13: Rational FORTRAN 21.4.14: Reasonable Discussion 21.4.15: Security Through Obscurity 21.4.16: Corporate Culture 21.4.17: Jumbo Shrimp 21.4.18: Social Property 21.4.19: Constant Variable 21.4.20: Double Solitaire 21.4.21: Educational Television 21.4.22: Instant Classic 21.4.23: Moral Majority 21.4.24: Standard C 21.4.25: Too Much Mozart 21.4.26: Working Vacation xemacs-21.4.22/etc/PACKAGES0000644000175000017500000001627210344716017013127 0ustar acsacs -*- Outline -*- This file is in Outline mode. It is best viewed under XEmacs. Press C-c C-o (Ctrl+c Ctrl+o) now to see a list of headings. To expand a heading: Put the cursor on the heading and press C-c C-s To collapse a heading: Press C-c C-d For general XEmacs navigation tips: Press C-h t Description of available packages ================================= Up-to-date as of Jul 31, 2003. ** Normal Packages ================== A very broad collection of elisp packages. *** Sun Support for Sparcworks. *** ada Ada language support. *** apel A Portable Emacs Library. Used by XEmacs MIME support. *** auctex Basic TeX/LaTeX support. *** bbdb The Big Brother Data Base. *** build Build XEmacs from within (UNIX, Windows). *** c-support Basic single-file add-ons for editing C code. *** calc Emacs calculator. *** calendar Calendar and diary support. *** cc-mode C, C++, Objective-C, Java, CORBA IDL, Pike and AWK language support. *** clearcase New Clearcase Version Control for XEmacs (UNIX, Windows). *** cookie Spook and Yow (Zippy quotes). *** crisp Crisp/Brief emulation. *** debug GUD, gdb, dbx debugging support. *** dictionary Interface to RFC2229 dictionary servers. *** dired The DIRectory EDitor is for manipulating, and running commands on files in a directory. *** docbookide DocBook editing support. *** ecb Emacs source code browser. *** ecrypto Crypto functionality in Emacs Lisp. *** edebug An Emacs Lisp debugger. *** ediff Interface over GNU patch. *** edit-utils Miscellaneous editor extensions, you probably need this. *** edt DEC EDIT/EDT emulation. *** efs Treat files on remote systems the same as local files. *** eieio Enhanced Implementation of Emacs Interpreted Objects. *** elib Portable Emacs Lisp utilities library. *** emerge Another interface over GNU patch. *** erc ERC is an Emacs InternetRelayChat client. *** escreen Multiple editing sessions withing a single frame (like screen). *** eshell Command shell implemented entirely in Emacs Lisp. *** ess ESS: Emacs Speaks Statistics. *** eterm Terminal emulation. *** eudc Emacs Unified Directory Client (LDAP, PH). *** footnote Footnoting in mail message editing modes. *** forms Forms editing support (obsolete, use Widget instead). *** fortran-modes Fortran support. *** frame-icon Set up mode-specific icons for each frame under XEmacs. *** fsf-compat FSF Emacs compatibility files. *** games Tetris, Sokoban, and Snake. *** gnats XEmacs bug reports. *** gnus The Gnus Newsreader and Mailreader. *** haskell-mode Haskell editing support. *** hm--html-menus HTML editing. *** hyperbole Hyperbole: The Everyday Info Manager. *** ibuffer Advanced replacement for buffer-menu. *** idlwave Editing and Shell mode for the Interactive Data Language. *** igrep Enhanced front-end for Grep. *** ilisp Front-end for Inferior Lisp. *** ispell Spell-checking with GNU ispell. *** jde Integrated Development Environment for Java. *** liece IRC (Internet Relay Chat) client for Emacs. Note, this package is deprecated and will be removed, use riece instead. *** mail-lib Fundamental lisp files for providing email support. *** mailcrypt Support for messaging encryption with PGP. *** mew Messaging in an Emacs World. *** mh-e The XEmacs Interface to the MH Mail System. *** mine Minehunt Game. *** misc-games Other amusements and diversions. *** mmm-mode Multiple major modes in a single buffer. *** net-utils Miscellaneous Networking Utilities. *** ocaml Objective Caml editing support. *** oo-browser OO-Browser: The Multi-Language Object-Oriented Code Browser. *** os-utils Miscellaneous single-file O/S utilities, for printing, archiving, compression, remote shells, etc. *** pc PC style interface emulation. *** pcl-cvs CVS frontend. *** pcomplete Provides programmatic completion. *** perl-modes Perl support. *** pgg Emacs interface to various PGP implementations. *** prog-modes Support for various programming languages. *** ps-print Printing functions and utilities. *** psgml Validated HTML/SGML editing. *** psgml-dtds Deprecated collection of DTDs for psgml. *** python-modes Python support. *** re-builder Interactive development tool for regular expressions. *** reftex Emacs support for LaTeX cross-references, citations. *** riece IRC (Internet Relay Chat) client for Emacs. *** rmail An obsolete Emacs mailer. If you do not already use it don't start. *** ruby-modes Ruby support. *** sasl Simple Authentication and Security Layer (SASL) library. *** scheme Front-end support for Inferior Scheme. *** semantic Semantic bovinator (Yacc/Lex for XEmacs). Includes Senator. *** sgml SGML/Linuxdoc-SGML editing. *** sh-script Support for editing shell scripts. *** sieve Manage Sieve email filtering scripts. *** slider User interface tool. *** sml-mode SML editing support. *** sounds-au XEmacs Sun sound files. *** sounds-wav XEmacs Microsoft sound files. *** speedbar Provides a separate frame with convenient references. *** strokes Mouse enhancement utility. *** supercite An Emacs citation tool for News & Mail messages. *** texinfo XEmacs TeXinfo support. *** text-modes Miscellaneous support for editing text files. *** textools Miscellaneous TeX support. *** time Display time & date on the modeline. *** tm Emacs MIME support. Not needed for gnus >= 5.8.0. *** tooltalk Support for building with Tooltalk. *** tpu DEC EDIT/TPU support. *** tramp Remote shell-based file editing. *** vc Version Control for Free systems. *** vc-cc Version Control for ClearCase (UnFree) systems. *** vhdl Support for VHDL. *** view-process A Unix process browsing tool. *** viper VI emulation support. *** vm An Emacs mailer. *** w3 A Web browser. *** x-symbol Semi WYSIWYG for LaTeX, HTML, etc, using additional fonts. *** xemacs-base Fundamental XEmacs support, you almost certainly need this. *** xemacs-devel XEmacs Lisp developer support. This package contains utilities for supporting Lisp development. It is a single-file package so it may be tailored. *** xetla Frontend to GNU/arch (tla). *** xlib Emacs interface to X server. *** xslide XSL editing support. *** xslt-process A minor mode for (X)Emacs which allows running an XSLT processor on a buffer. *** xwem X Emacs Window Manager. *** zenirc ZENIRC IRC Client. ** Mule Support (mule) ====================== MULti-lingual Enhancement. Support for world scripts such as Latin, Arabic, Cyrillic, Chinese, Japanese, Greek, Hebrew etc. To use these packages your XEmacs must be compiled with Mule support. *** edict MULE: Lisp Interface to EDICT, Kanji Dictionary. *** egg-its MULE: Wnn (4.2 and 6) support. SJ3 support. *** latin-euro-standards MULE: Support for the Latin{7,8,9,10} character sets & coding systems. *** latin-unity MULE: find single ISO 8859 character set to encode a buffer. *** leim MULE: Quail. All non-English and non-Japanese language support. *** locale MULE: Localized menubars and localized splash screens. *** lookup MULE: Dictionary support. *** mule-base MULE: Basic Mule support. *** mule-ucs MULE: Extended coding systems (including Unicode) for XEmacs. *** skk MULE: Another Japanese Language Input Method. Can be used without a separate process running as a dictionary server. xemacs-21.4.22/etc/README0000644000175000017500000000561007267512041012701 0ustar acsacs This directory contains some text files of documentation for XEmacs or of interest to XEmacs users, some programs used by or with XEmacs, and the file of on-line documentation for XEmacs. BETA Information about Beta versions CHARSETS Character set descriptions CODING-STANDARDS XEmacs C & Lisp coding standards CODINGS Character set codings COOKIES Urban Legend, or True Story? :-) COPYING GNU Public License COPYING.LIB Library GNU Public License DEBUG Hints on how to debug XEmacs DISTRIB How to obtain copies of XEmacs and Emacs Emacs.ad Sample Resource file FTP XEmacs FTP Mirrors GNU GNU Manifesto GOATS Complete XEmacs internals documentation InstallGuide Fast track to installation LPF Information about the League for Programming Freedom MACHINES List of known machines configurations (OLD) MAILINGLISTS List of available Mailing lists MORE.STUFF List of useful unbundled packages NEWS XEmacs 21.4 release information ORDERS ORDERS.EUROPE ORDERS.JAPAN Order forms for GNU software PACKAGES List of packages available for 21.4 release README This file README.HYPERBOLE README.OO-BROWSER How to obtain Hyperbole and the OO-Browser SERVICE How to obtain paid support for free software TERMS Information about termcap entries TUTORIAL Tutorial for first time users (English version) TUTORIAL.* Tutorials in non-English languages XKeysymDB X Keysym Database with Motif bindings aliases.sh Useful shell aliases cbx.png "Created by XEmacs" logo check_cygwin_setup.sh Script to check for presence of Cygwin ctags.1 Ctags man page custom/ Images used in Custom mode editclient.sh Either start up XEmacs or connect to a running one emacskeys.sco emacsstrs.sco Special files for running on an SCO console eos/ Images for EOS support (GUD) etags.1 Etags man page gnu.xbm gnu.xpm Image of a Gnu. gnuattach.1 Gnuattach man page gnuclient.1 Gnuclient man page gnudoit.1 Gnudoit man page gnuserv.1 Gnuserv man page gnuserv.README Original README file from gnuserv gnusref.tex Gnus reference card gray1.xbm Gray bitmap ms-kermit ms-kermit-7bit Files for running XEmacs through kermit photos/*.Z Various pictures of XEmacs developers recycle.xpm recycle2.xpm Two versions of oversized Recycle cursor refcard.ps.gz Postscript version of XEmacs reference card refcard.tex XEmacs reference card sample.Xdefaults Example ~/.Xdefaults file sample.init.el Example ~/.xemacs/init.el file sink.xbm A Gnu icon sparcworks/ Support files for Sparcworks tests/ Testcases for external widget time/ Image files for display-time toolbar/ Image files for the toolbar trash.xpm Garbage can icon xemacs-beta.xpm XEmacs Beta logo xemacs-fe.sh XEmacs frontend driver xemacs-icon.xpm xemacs-icon2.xbm xemacs-icon2.xpm xemacs-icon3.xpm Various versions of an XEmacs WM icon xemacs-ja.1 Japanese XEmacs man page xemacs.1 XEmacs man page xemacs.xbm xemacs.xpm XEmacs logo used on the splash screen xemacs-21.4.22/etc/README.HYPERBOLE0000644000175000017500000000114107713624723014233 0ustar acsacsHyperbole is a suite of tools for enhancing productivity. Hyperbole has been packaged as of 2003-07-01, and is available in an XEmacs package archive mirror near you. If this file has not been updated recently, please ask about status on xemacs-beta@xemacs.org, and remind us to update this file. The most recent upstream version of this package is available from SourceForge, http://projects.sourceforge.net/hyperbole/. There apparently is no longer any commercial support, but you might query the owner of the SourceForge project (at the time of this writing, Bob Weiner ). xemacs-21.4.22/etc/README.OO-BROWSER0000644000175000017500000000120007713624723014334 0ustar acsacsThe OO-Browser is a tool for examining object oriented code. The OO-Browser is a candidate for XEmacs packaging as of 2003-07-01, and may be available in an XEmacs package archive mirror near you. If this file has not been updated recently, please ask about status on xemacs-beta@xemacs.org, and remind us to update this file. The most recent upstream version of this package is available from SourceForge, http://projects.sourceforge.net/oo-browser/. There apparently is no longer any commercial support, but you might query the owner of the SourceForge project (at the time of this writing, Bob Weiner ). xemacs-21.4.22/etc/SERVICE0000644000175000017500000013711110107032047013034 0ustar acsacs-*- text -*- GNU Service Directory --------------------- This is a list of people who have asked to be listed as offering support services for GNU software, including GNU Emacs, for a fee or in some cases at no charge. The information comes from the people who asked to be listed; we do not include any information we know to be false, but we cannot check out any of the information; we are transmitting it to you as it was given to us and do not promise it is correct. Also, this is not an endorsement of the people listed here. We have no opinions and usually no information about the abilities of any specific person. We provide this list to enable you to contact service providers and decide for yourself whether to hire one. Before FSF will list your name in the GNU Service Directory, we ask that you agree informally to the following terms: 1. You will not restrict (except by copyleft) the use or distribution of any software, documentation, or other technical information you supply anyone in the course of modifying, extending, or supporting GNU software. This includes any information specifically designed to ameliorate the use of GNU software. 2. You will not take advantage of contact made through the Service Directory to advertise an unrelated business (e.g., sales of non-GNU-related proprietary information). You may spontaneously mention your availability for general consulting, but you should not promote a specific unrelated business unless the client asks. Please include some indication of your rates, because otherwise users have nothing to go by. Please put each e-mail address inside "<>". Please put nothing else inside "<>". Thanks! For a current copy of this directory, or to have yourself listed, ask: service@gnu.org ** Please keep the entries in this file alphabetical **  Aaronsen Group, Ltd. 600 Grant St. Suite 5345 Pittsburgh, PA 15219 US +1 412 391 6000 voice +1 412 391 6006 fax http://www.aaronsen.com/gnu The Aaronsen Group provides several levels of service in the free software arena, from simple configuration and installation to large extensions and new development. We specialize in unique applications, but have the experience to handle all manner of prospects, from database-backed web-sites to high-end multiprocessor clusters. Our service area covers the US, with key offices in Pittsburgh, PA; San Jose, CA; and New York, NY. We are available for both hourly work (at $450 per hour, some qualified discounts are available) and fixed-price projects. Work is done on the client site, at our offices, or remote via Internet or telephone connection. Updated: 2002-04-18  ACT Europe 8 rue de Milan 75009 Paris +33 1 49 70 67 16 +33 1 49 70 05 52 fax www.act-europe.com ACT Europe, developer and maintainer of the Ada 95 GNAT Pro Development Environment, specializes in project support and consulting for users of GNAT Pro. GNAT Pro, based on GNU/GCC technology, is the most widely used Ada 95 development environment, and the ideal solution in environments where efficient and reliable code is critical. GNAT Pro is available on the widest number of platforms, from Unix workstations and PCs to bare boards and embedded systems. ACT Europe offers full Ada 95 solutions and is continuously enhancing and developing programming tools, debuggers and integrated development environments. We believe the Ada market and your project will best benefit from an open, non-proprietary technology, we have made all our products Open Source software by adopting the licensing policy of the Free Software Foundation. This means that all components of the GNAT technology, including the run-time, come with sources. Highest-quality, responsive support is a key ingredient in complex and reliable Ada software products. GNAT Pro, the leading Ada 95 development system, is the only Ada solution that comes with outstanding support. Please visit www.act-europe.com for further details of our products and services or contact us at UPDATED: 2004-02-13  Ada Core Technologies 104 Fifth Avenue, 15th Fl. New York, NY 10011 +1 212 620 7300 +1 212 807 0162 fax www.gnat.com Ada Core Technologies, developer and maintainer of the Ada 95 GNAT Pro Development Environment, specializes in project support and consulting for users of GNAT Pro. GNAT Pro, based on GNU/GCC technology, is the most widely used Ada 95 development environment, and the ideal solution in environments where efficient and reliable code is critical. GNAT Pro is available on the widest number of platforms, from Unix workstations and PCs to bare boards and embedded systems. Ada Core Technologies offers full Ada 95 solutions and is continuously enhancing and developing programming tools, debuggers and integrated development environments. We believe the Ada market and your project will best benefit from an open, non-proprietary technology, we have made all our products Open Source software by adopting the licensing policy of the Free Software Foundation. This means that all components of the GNAT technology, including the run-time, come with sources. Highest-quality, responsive support is a key ingredient in complex and reliable Ada software products. GNAT Pro, the leading Ada 95 development system, is the only Ada solution that comes with outstanding support. Please visit www.gnat.com for further details of our products and services or contact us at UPDATED: 2004-02-13  Alcôve ------ Alcôve, Centre Paris Pleyel, 153 bld Anatole France 93200 Saint-Denis France Email: Web: http://www.alcove.com Tél.: +33 1 49 22 68 00 Fax: +33 1 49 22 68 01 Founded in 1996, Alcôve's main purpose is to promote and support the use of GNU/Linux and OSS on the European market. Expertise in OSS innovation is the foundation of all Alcôve's activities. We provide key accounts and leading businesses in the field of IT with : Consultancy Engineering Training Support Technical watching brief OSS Certification - Validation - Guarantee Drivers for the linux kernel Company directory and unified messaging Linux Firewall Security Package Keys: support services, consulting, open source software, GNU/Linux, Apache, Perl, GNU, Samba, Zope, Imp, OpenLDAP Average daily rate, depending on the job : 1000 euros. Updated: 2002-06-12  Allegro Consultants, Inc. 1072 De Anza Blvd., Suite B101 San Jose, CA 95129-3532 USA +1 408 252-2330 voice +1 408 252-2334 fax http://www.gccsupport.com Allegro Consultants, Inc, in association with DIS International, is now offering annual support contracts covering the GNU Compiler Collection and related tools, including the GCC C and C++ compilers for MPE/iX. The free GCC C and C++ compilers have been available on MPE/iX for several years now, and are used for mission-critical applications by many organizations including Hewlett-Packard. Until now, assistance was available only from Mark Klein of DIS on a limited, voluntary basis. Mark is the person who originally ported GCC to the HP e3000, and he continues to maintain the software and port new versions. Support contracts start at $1,995.00/year for an organization (unlimited number of HP e3000 computer systems) with two designated callers. Additional options are available for large organizations who need to designate more than two authorized callers, or who want the additional security of 24x7 coverage. Updated: 2002-04-18  Amazonia Computing http://www.efn.com/~rick 5050 Donald St Eugene, OR 97405 541-485-7264 I provide development and technical support for free software and open source systems including embedded programming, GNU/Linux, the GNU development suite... I have over 10 years experience building and maintaining systems ranging from medical patient monitoring systems to Linux device drivers for custom PCI plug in cards. Rates range from $85.00/hr to $90/hr USD. Will work for a lower rate if in involves working in either Brazil, Vietnam, Indonesia, or Cuba. I am also willing to work on fixed price contracts. Updated: 2002-04-22  Dipl.-Inform. Gerd Aschemann Martinstr. 81f D-64285 Darmstadt Tel.: +49 173 3264070 http://www.aschemann.net/ - Consultant + Unix Network and System Administration + Distributed Systems and Middleware Infrastructures - former System Administrator (UNIX and NT) at CS Department, TU Darmstadt, Germany - 22 years working in the CS field, System administration on different platforms - 15 years with UNIX/Networking/FreeWare/GNU/X11 - 12 years courses on Operating Systems and Distributed Systems - Lectures on System and Network Administration - Platforms: Solaris, GNU/Linux, SunOS, Ultrix, HP-UX, Digital Unix, AIX, SCO, FreeBSDs - Distributed Platforms and Information Systems (CORBA, WWW, Java, SOAP) Rates are at 100,-- EUR (~90 US$) per hour minimum, depending on the job. I am willing to travel for sufficiently large jobs. Updated: 2002-04-23  Baker Research, Ltd. P. O. Box 4057, Leesburg, VA 20177 Phone: (703) 999-6719 (Voice) Web: http://www.baker-research.com email: Rate: $75.00/hr to $150.00/hr, or fixed-price projects. Services: --Full-lifecycle software development --Database design and migration --Programming (C/C++, tcl/tk, bash, perl) --Custom backup and archival systems --GNU/Linux system installation, configuration, and management --Customization of systems for user needs --Software product evaluation and recommendation --Cluster systems support -Installation, configuration, and management -MPI and Myrinet support --Data acquisition, management, visualization, and archival Updated: 2004-05-13  Don Barry, Ph.D. Ithaca, NY Astrophysicist with extensive and varied hacker background. Substantial expertise in mathematical modeling, instrument interface, low-level and high-level hardware control, statistical analysis, automated/mathematical typesetting. Also fluent in opto/electro/mechanical design. I try to find solutions using free software when possible and specialize in GNU/Linux platforms. Degrees also in chemistry and mathematics. Speak: C, APL, Fortran, J, Perl, Emacs Lisp, IDL, variety of machine languages from CDC CYBER (!) to x86 families, TeX/LaTeX, sendmail, and quite a few others. Experience on platforms from PDP to present. Rates: $75--$150 per hour + travel (if required) depending on the needs of the project, the level of support and availability required, and its interest to me. Services: consulting, design, porting, lecturing, support, project definition, system implementation. Updated: 2002-04-18  James Craig Burley 97 Arrowhead Circle Ashland, MA 01721 Email: Web: http://world.std.com/~burley/ Expertise (mainly Development and Maintenance): Compilers for Imperative Languages (author of GNU Fortran, aka g77) Operating System Kernels Tools/Utilities Microcode (mainly VLIW) and Assembler Software-Development-System Architecture (including APIs, IDEs) Debugging Documentation Authoring and Project Management Experience: Programming Languages such as C, Fortran Operating Systems such as Unix, GNU/Linux, Solaris, HP-UX Assembler/Microcode Languages -- RISC (such as SPARC), CISC, VLIW Scripting Languages API Design, Documentation, and Use Rate: $200/hour Updated: 2002-04-18  C2V Michel Delval 82 bd Haussmann Jean-Alain Le Borgne 75008 Paris France Tel (33 1) 40.08.07.07 Fax (33 1) 43.87.35.99 http://www.c2v.com/freesoft.htm e-mail: Services: we offer source or source+binary distribution, installation, training, maintenance, technical support, consulting, specific development and followup on the GNU software development environment: Emacs, gcc/g++, binutils, gas, gdb. Porting on new platforms, and professionally developing software with the GNU tools in the Unix/X11 environment since they were first available. Experience: GNU C Compilation toolchain for the SGS-Thomson D950 and ST20 DSP chips. GNU C compilation toolchain (cross-compiler, compiler, linker, assembler, debugger) for SparcV7 ERC32 based space systems (Sextant Avionique / Alcatel Espace). Feasability study, analysis and prototyping of a complete compilation toolchain based on the GNU programming tools for the CSEM RISC microprocessor family. Rates: from 800 Euros/day to 120 000 Euros/year, 40% discount for educational institutions, add taxes and expenses. Ask for list. Updated: 2002-04-25  Cendio Systems AB Teknikringen 3 SE-583 30 Linkoping SWEDEN +46 13 21 46 00 voice +46 13 21 47 00 fax http://www.cendio.com/ Cendio Systems develops, implements and integrates solutions based on Open Source Software. We also develop and market the Fuego Firewall(TM), an award winning and easy-to-use firewall, based on GNU/Linux. We offer professional services, including support, maintenance, integration and development in the following areas: * Embedded Linux * Client/Server Solutions GNU/Linux/BSD * Professional Training GNU/Linux, certifications from SAIR Linux/GNU * Open Source Strategy * Development/Adaptation of free software Cendio Systems have deep roots in Linkoping University, and was founded 1992 as Signum Support. Our headquarters resides in Mjardevi Science Park in Linkoping and we have an office in Stockholm. We are currently about fifty employees at both locations. Cendio Systems won the Lotus 'Tux Award' at LotusSphere 2000 for "the partner who best exemplifies a unique dedication to Lotus and Linux technologies and has successfully executed their vision in the marketplace." Cendio Systems have the following certifications and memberships: Association of Computing Machinery, Professional Membership COMPAQ System Specialist (Intel and Alpha Systems) Embedded Linux Consortium, Founding Member IBM Value Added Reseller (Netfinity) IBM Solution Provider (RS/6000) SAIR GNU/Linux, Accredited Center for education SGI Systems Integrator Rates: Please request our price list. Updated: 2001-05-09  CodeSourcery, LLC 9978 Granite Point Ct Granite Bay, CA 95746 (916) 791-8304 http://www.codesourcery.com CodeSourcery specializes in customization of, enhancements to, and support for all GNU software. We have particular experience in the field of programming tools, and have been responsible for many features in the GNU C and C++ compilers including the implementation of member templates and type-based alias analysis. Mark Mitchell, one of our co-founders, is a co-maintainer of the GNU Compiler Collection. We also have experience with GNU tools ranging from emacs to binutils to gdb to autoconf, and are willing to work on any and all free software projects. Please see our web page at www.codesourcery.com for more information about our products, services, and prices. Updated: 2002-04-19  Stuart Cracraft 25682 Cresta Loma Laguna Niguel, CA, 92607, USA Phone: 949-347-8106 Rate: negotiable Consultation topics: Entire GNU suite - porting, compilation, installation, user-training, administrator-training Method: via any combination of telephone, dialup, Internet, in-person, email. Experience: supporting GNU since project inception, original port of GNU Emacs to Sun Solaris, original author of GNU Emacs online tutorial. Expertise in C, Emacs Lisp, Perl, Expect, Oracle, Informix, SunOS, Solaris, NIS, NFS, system-monitoring via paging. Unix System and Database administration or development. Updated: 2002-04-20  Bruce Dawson - CodeMeta, Inc. London, NH USA 800-354-2209 Specializing in GNU tools such as CVS, gnats, bash, gawk, fileutils... Services: o 800 phone support. o Modification and development. o Training. Rate: Fixed rate deliverables or $110/hour for hourly work. http://www.codemeta.com Updated: 2002-04-23  DSS Distributed Systems Software, Inc. 3253 Georgia St. Richmond, British Columbia V7E 2R4 http://www.dss.bc.ca CANADA (604) 270-9559 GNU-related services: We specialize in support for GCC (mainly C and C++), including porting, retargeting, and customizing. Also, GNU and other free software that falls within our areas of expertise. Expertise: DSS provides software design, implementation, and consulting services for: o Client/Server architectures Including web-based systems, Apache web server customization, CGI, server-side processing, JavaScript, automatic web page generation o E-Security, including PKI and SSL o Directory systems, including X.500 and LDAP o High-performance and special-purpose distributed systems and databases o Computer networking and communication protocols Internet protocols such as TCP/IP and UDP, development of custom protocols o Creating and customizing "small", embedded, and special-purpose programming languages Rates: Consulting rates are $65-$200 USD per hour, plus applicable taxes. Fixed-cost projects are also possible. Updated: 2002-06-27  Gord Eagle Box 325 http://fig.org/gord/ Lumsden, SK S0G 3C0 Voice: (306) 731-3011 CANADA I will gladly help novice and intermediate computer users to install, understand, and use free software, whether or not I have prior experience with that software. I know my limitations well, and will freely give other contacts if I cannot solve your problem myself. I have over 5 years of experience with several of the major free OSes: GNU/Linux (Debian, Red Hat), NetBSD, FreeBSD, and GNU/Hurd. Some of my specialties are networking, Emacs, Automake, Autoconf, C, Perl, and shell script programming. My rates are negotiable depending on the task: usually $40-$60 (Canadian) per hour. Flat rates preferred. Updated: 2002-04-18  John W. Eaton , Experience: Original author and current maintainer of GNU Octave (http://www.octave.org). Derivatives of the Unix man utility that I wrote in 1990 are currently distributed with several GNU/Linux systems. Improved GNU Make's support for VPATH and object libraries on VMS systems. Various other enhancements and bug fixes for other free software tools. I have more than 19 years experience programming various languages and systems, more than 14 years as a user and system mangler of Unix systems, including Ultrix, SunOS, AIX, HP/UX, BSD, IRIX, Digital Unix, and GNU/Linux. Long-time user of GNU tools on all these platforms. Programming: Octave, Matlab, C++, C, Fortran, Emacs Lisp, TeX/LaTeX, AWK, M4, Autoconf, Make, Lex & YACC, Unix shell programming, etc. Services: Anything related to programming and extending Octave. Porting, installation, and customization of GNU/Linux and GNU tools. Unix system administration. Rates: $100/hour + travel and expenses (if required). Will consider travel for short periods and/or sufficiently interesting jobs, but prefer to work via the net or email. Lower rates for non-profits. Updated: 2002-04-19  Noah Friedman 6114 La Salle Ave. #739 Oakland, CA 94611-2802 Author of several Emacs Lisp packages and parts of Emacs, as well as numerous network and unix system utilities. Co-maintained GNU Texinfo and Autoconf for a couple of years. Experienced unix systems engineer. FSF employee Feb 1991--Sep 1994. I can design and implement relational database services; perform installation, porting, and enhancement of all GNU software and any other free software, especially for linux- and unix-derived systems; design high-capacity hardware-redundant servers for production environments; provide consulting on the use of version control management. Fees negotiable, averaging $100-$150/hour. I can work in the California bay area or anywhere accessible on the Internet. For larger jobs I may be willing to travel. Updated: 2002-04-19  Ronald F. Guilmette RG Consulting 1751 East Roseville Pkwy. #1828 Roseville, CA 95661 Tel: +1 916 786 7945 FAX: +1 916 786 5311 http://www.monkeys.com/ Services: Development & porting of GNU software development tools. GNU Contributions: Invented, designed, and implemented the protoize and unprotoize tools supplied with GCC2. Designed and developed all code to support the generation of Dwarf symbolic debugging information for System V Release 4 in GCC2. Performed original port of GNU compilers to SVr4 system. Finished port of GNU compilers to Intel i860 RISC processor. Experience: 15+ years UNIX systems experience; 15+ years working on compilers and related tools. 10+ years working professionally on GCC, G++, and GDB under contract to various firms including the Microelectronics and Computer Technology Corporation (MCC), Data General (DG), Network Computing Devices (NCD), and Intel Corp. Other qualifications: Developer of commercial C and C++ compiler test suites. Former vice-chairman of UNIX International Programming Languages Special Interest Group (UI/PLSIG). Bachelor's and a Master's degrees, both in Computer Science. Rates: Variable depending upon contract duration. Call for quote. Updated: 2002-05-04  IDEALX 15-17 avenue de ségur 75007 Paris France Tel - +33144420000 Fax - +33144420001 http://www.IDEALX.com, http://www.IDEALX.org IDEALX is involved in the development of Open Source solutions,and ensures their deployment and maintenance. IDEALX also contributes to the community, by producing its own Open Source components such as : IDX-PKI (a 100% Open Source Public Key Infrastructure) see :http://idx-pki.idealx.com Development Technical support Technology watch Consulting Engineering Training Rates - Variable Updated: 2002-07-22  Ehud Karni Israel Support of Emacs & Emacs lisp, GNU/Linux, Cygwin. Fee: $75/hour. Updated: 2002-04-20  Bradley M. Kuhn http://www.ebb.org/bkuhn I am available for part-time system administration, software development and training. I have extensive experience with system administration of GNU/Linux systems and Free Software development. I have also taught courses in C++ and Perl. As an employee of the FSF, I have a unique perspective on the free software community. Please visit my homepage for more information on my background and skills. My resume is also available there. I am available for both 1099 and W2 on-site contracting in the Boston, MA, USA metropolitan area, as well as remote consulting via dialup or Internet connection anywhere in the USA. I am not interested in relocation. However, temporary (two week maximum) jobs with paid expenses at other locations will be considered. My rate varies greatly (between $25-$60/hour) depending on the circumstances. Rates for non-profit organizations will be on the lower end of the spectrum if I support your cause. Updated: 2002-04-20  Greg Lehey LEMIS PO Box 460 Echunga SA 5153 Australia Phone: +61-8-8388-8286 Fax: +61-8-8388-8725 Mobile: +61-418-838-708 Mail Services: Supply, porting, installation, consultation on all GNU products. Experience: 30 years OS and compiler experience, ports of most GNU products. Author of ported software CD-ROM for UNIX System V.4.2, "Porting UNIX Software" (O'Reilly), "Installing and Running FreeBSD" and "The Complete FreeBSD" (both Walnut Creek). Rates: Choice of AUD 300 per hour or hotline rates AUD 6 per minute. Outside Australia, $US 180 per hour or $US 3.50 per minute. Quick, well prepared questions by mail may be free. Updated: 2002-04-21  Alan Lehotsky Quality Software Management 634 West St Carlisle, MA 01741 Phone: (978)287-0435 Fax: (978)287-0436 Services: - Support for GNU compilers, including rehost/retarget - GNU Binutils rehost/retarget. - cgen/sim - Perl internals hacking - General system software work (SW tools, O/S, device drivers) - runtime library (especially floating point) - project management - software process improvement Experience: 20+ years of design and implementation of optimizing compilers. "Mr. Bliss" at Digital in the 70's and early 80's. Experience with Motorola 68k, PowerPC, SPARC, Intel x86 and IA64 (Merced), MIPS, NS32K, ADI SHARC DSP, VAX, PDP-11, PDP-10. Wrote or maintained compilers for Ada, BLISS, C, C++, FORTRAN, Pascal, Modula/2, O/S experience includes Unix (OSF/1, SunOS, Solaris, AIX, HP/UX), VAX/VMS, Windows/NT, MacOS. 8 years experience with GCC internals, including major changes to support 8 bit bytes on word-address Analog Devices SHARC DSP and general support of PowerPC code generation. Retargetted gcc/binutils cross-tools to ASIC used in optical switch. Retargeted gcc to 8 bit "internet toaster" micro-computer. References available. Rates: $110/hr. fixed price possible for well-defined deliverables. Updated: 2002-04-18  Reuven M. Lerner Lerner Communications Consulting Ltd. PO Box 518 Modi'in 71700 Israel Phone: 08-973-2225 (within Israel) +972-8-973-2225 (outside of Israel) Fax: 08-973-0477 (within Israel) +972-8-973-0477 (outside of Israel) WWW: http://www.lerner.co.il We specialize in writing custom Web and Internet applications. In particular: - We create database-backed Web sites using Perl, Tcl, Python, Java, Apache, mod_perl, OpenACS, Zope, MySQL, and PostgreSQL. - We offer support and service for system administrators who need help with their GNU/Linux systems. - We offer training in a variety of programming languages (Perl, Tcl, Python, and Java) and in GNU/Linux administration. Consulting rates: $110/hour, or $85/hour for non-profits. (Our rates drop when we're hired on retainer or for projects that last longer than one week.) Updated: 2002-04-18  Richard Levitte Levitte Programming Spannvägen 38, I S-168 35 Bromma Sweden Tel.nr.: +46 (8) 26 52 47 (there is an answering machine) Cellular: +46 (708) 26 53 44 (there is an answering machine) e-mail: What I do: I work with various free software packages, mostly GNU ones, for Unix and VMS (the latter both on VAX and Alpha). I've been porting GNU Emacs to VMS between spring 1991 and somewhere in 1998. I've ported a bunch of other GNU programs as well. I maintain GNU vmslib. For further info, see http://www.lp.se/~levitte/prof/resume.html Programs supported: To a varying degree (ranging from extension and porting to installation and simple questions) at the time of updating this entry: - GNU vmslib, emacs, autoconf, zip, diffutils, m4, patch, texinfo, C/C++; on both VMS and Unix. - Other GNU programs to a small degree; on Unix. For further info, look at http://www.lp.se/products/gnu.html Experience: Fluent in TeX/LaTeX and many programming languages. Modified key elements in Emacs (e.g., memory and process management) to work transparently on VMS. I have very good knowledge in the VMS operating system. I'm also knowledged in the a few Unix flavors. Well knowledged in cryptography as well as the development of the PKIX standards (both based on X.500 and RFC 2459) and involved protocols (SSL, OCSP, CMS, ...) For further info, see http://www.lp.se/~levitte/prof/resume.html Your Rate: $75-$100/hour (750-1000 SEK in sweden), plus expenses. My rates are negotiable, depending on how interesting the project is to me. Updated: 2002-04-18  Moss - Card Consulting Inc 16360 Broadway Avenue Building A, Suite 103-104 Cleveland OH 44137 USA www.mosscard.com +1 216 587 4343 +1 216 587 4342 Fax This dynamic Cleveland company offers the following services: - installation and configuration for SGI machines - Cross-platform development using wxWindows under GNU\Linux - Programming (C/C++,tcsh) - Compiler development using CORBA and gcc - Real-time Cross-Platform Development - Consulting - Engineering - Staff Augmentation We are Cleveland's first GNU\Linux developers, and one of our company's members has just launched NASA's first cross development tool. Our rates vary from ($50 - $400) USD depending on the nature of the project. Updated 2004-2-23  NetGuide Scandinavia AB Tankeg=E5ngen 4 S-417 56 G=F6teborg, Sweden +46 31 50 79 00 voice +46 31 50 79 39 fax http://www.netg.se NetGuide Scandinavia AB is a company that does consultant jobs and holds courses in the fields of Unix software, TCP/IP networking and Internet applications. The people behind NetGuide Scandinavia AB have many years of general Unix experience, both as system administrators and as programmers, and also extensive experience in maintaining the GNU programs; in administration as well as finding and fixing bugs. Services offered: - Installation and customizing GNU and other free software. We will make free software as easy to install and use as shrink wrapped programs. - Service and support subscriptions. - Warranty protection. - Customization and porting. - Subscriptions to new versions which we will send monthly or with any other interval. - Finding, recommending and investigating free software in any area of the customers choice. - Regular consulting. - Support on Internet service software, especially the free - Support on GNU/Linux. - Freeware based courses in Unix usage, C, C++, or any GNU tools Rates: For courses, contact us for a quote, For consulting, $60-120/hour, depending on contract length. Updated: 2000-12-13  Network Theory Ltd 15 Royal Park Bristol United Kingdom Tel: +44 117 3179309 Fax: +44 117 9048108 http://www.network-theory.co.uk/gsl/ We provide software maintenance contracts for commercial users of the GNU Scientific Library. We can also provide general numerical consulting for all types of scientific and quantitative applications. Rate: $1495/year (950 ukp) for base maintenance contract. Updated: 2004-04-26  Thien-Thi Nguyen Solana Free Software ttn@glug.org San Diego, CA, USA Service: General Consulting and Hacking on all things GNU Resume: http://www.glug.org/people/ttn/resume.html Rates: no job too small, everything negotiable Updated: 2002-04-20  David Nicol Post office box 45163 Kansas City, Missouri 64171 http://www.tipjar.com/dnconsult Unix, GNU/Linux, Perl installation, C, C++, Lisp, Perl programming. CGI programming. Installation, porting. Specification development, design, implementation, documentation. Rate: $60/hour, or fixed contract. On-site support available in greater Kansas City area. Updated: 2002-04-23  Jonas Oberg (TeX: Jonas \"Oberg Rimfrostgatan 95 Rimfrostgatan 95 S-418 40 Goteborg S-418 40 G\"oteborg Sweden Sweden) Phone: +46-733-423962 E-mail: I offer support for most GNU software including the GNU Hurd and also do system administration on GNU systems. I can do free software development and have a good understanding of automake, autoconf, flex, bison, guile, texinfo and much more. Rates around USD$100. Updated: 2002-04-22  Francesco Potortì Via S.Stefano, 8 56123 Pisa, Italy Tel. (050)560671 Emacs: installation and maintenance, training and tutorials, customisation, extensions, troubleshooting. Author of some of the packages in the emacs distribution, has made the porting of emacs to the Motorola Delta architecture. Other: installation and maintenance of GNU software. Experience with hylafax, RCS, gperf, etags, smail, indent, diff, gawk, gcc, screen. Is the current maintainer of etags. Rates: 100 E/hour. Prefer e-mail communication to telephone. Qualifications: Electronic Engineering degree, Pisa. Full time researcher in CNUCE-CNR. Familiar with elisp programming, porting of C programs, low-level TCP/IP programming for embedded systems. Updated: 2002-06-28  Rodolphe Quiedeville 1 Quai Martin 56400 Auray France Tel (33 1) 613796341 http://rodolphe.quiedeville.org/ Experience: Original author and current maintainer of the Lolix project can be found at http://www.lolix.com I have more than 5 years experience on free software system administration. Programming: PHP, Perl, Unix shell Services: Anything related to free software network and system administration. Updated: 2002-07-01  Red Hat, Inc. 1325 Chesapeake Terrace Sunnyvale, CA 94089 USA Toll free: 866-2REDHAT ext. 3005 +1 408 542 9600 voice +1 408 542 9699 fax GNUPro Tools Red Hat provides supported and maintained versions of gcc, g++, gdb with GUI, GNU linker and GNU macro assembler. In addition, Red Hat provides these GNU software development tools for well over many popular host-target configurations. Support includes bug fixes and semi-annual releases of the toolset. Each release is regression tested and includes substantial improvements and additions to the current release. Support is available through Incident support packages, or Unlimited support for specific user groups. GNUPro is available with standard, custom, and vintage toolchains for both native and embedded application development. New target processors are being added regularly. Rates for support for standard products start at $12,500. Embedded Linux Red Hat offers Red Hat Embedded Linux to companies looking for an open source and royalty-free runtime solution. Red Hat Embedded Linux currently supports certain ARM, StrongARM, and MIPS families of processors. Embedded Linux supports multiple graphics APIs, is compliant with POSIX APIs and thread support, can be configured as low as 512k memory footprint including TCP/IP and NFS built into the kernel, and supports journaling and transparent compression in filesystems. Support for new processors is available via Red Hat Professional Services. Updated: 2001-05-16  Relogic AB Pipersgatan 26 Box 868 SE-112 28 Stockholm SWEDEN web http://www.relogic.se e-mail info@relogic.se phone +46 708 800 000 fax +46 708 800 580 Relogic provides experienced unix developers that know and love GNU products. We can take on anything from single contractor support to full scale projects. We know all programming languages and all Unix dialects. Updated: 2002-04-19  RON's Datacom Co., Ltd. 79, DongWu Ave., Wuhan, Hubei Province 430040 China P.R. Tel +1370-113-0868(mobile) +86-27-83222108(office), Fax +86-27-83222108 http://www.rons.net.cn info@mail.rons.net.cn Ron's Datacom publishes the truly free ( the "free" in freedom) monthly periodical --- FREE SOFTWARE Magazine(FSM), offering a series of free software training courses entitled "Hackerdom", including: - Working with GNU Emacs; - Programming in Emacs Lisp; - Using and Porting GNU CC; - Flex and Bison; - Debugging with GDB; - Device Driver Development with GNU AS and C; - Shell Programming with BASH; - GNU Building Tools: Make, Automake, Autoconf, M4; - Typesetting and Layout Designing in TeX and PostScript; - Parsing XML Documents. - Source Code Version Management with CVS; - GNU Awk and Sed; RON's Datacom Typesetting Workshop offers professional typesetting service for both academic and commericial publishers, and solutions for building the modern electronic publishing system with industrial strength. Hong Feng gives speeches to the public about the philosophy of free software, and importance of freedom, suggestions for curriculum reforms of computing science department in the universities and colleges. Please visit our website (www.rons.net.cn) for more details. Updated: 2002-05-12 Phillip Rulon 122 Blossom Rd. Westport, MA 02790 USA 508.672.3007 15 years experience with GNU systems and tools. Available for any free software project. Most useful for network design and construction or dynamic web development. Very good Debian, Perl, and Apache. Boston, travel OK. $100/hr, flat rate possible. Updated: 2002-06-28  Sankhya Technologies Private Limited, III FLoor, #30-15-58 "Silver Willow", Dabagardens, Visakhapatnam - 530 020 INDIA Tel: +91 891 5542665 Fax: +91 891 5542666 http://www.sankhya.com/info/services/gnu/gnu.html SANKHYA Development is a package of software engineering services structured around select technologies in the areas of Compilers, Assemblers and Linkers, Debuggers. Our rich experience with such technologies enables us to deliver competitive software development services to you, customized to your specific requirements. Sankhya offers competitive and cost-effective GNU maintenance and support services for gcc, binutils, libtools and gdb. GNU Development and Maintenance focuses on providing C, C++ compiler development, assembler and linker development, debugger development, and compiler optimizations. For semiconductor and chip design companies we offer annual maintenance packages, and for software developers we offer annual support packages. Following services are provided for gcc, binutils, libtools and gdb, * Retargeting gcc, binutils, libtools and gdb for new processor architectures, including RISC, CISC, VLIW or DSP architectures. * Implementing processor specific optimizations. * Annual Developer Support for developers. * Maintenance packages for CPU/SoC vendors. We offer variety of development/maintenance packages. UPDATED: 2004-02-13  Sparkle Computer Co Ltd email: web: www.sparkle-cc.co.uk Specialists in software development and networks in London and South-East England, primarily using open source tools. - Network security implementation using iptables, snort - Network security testing using nmap and nessus - Web services infrastruture with apache, tomcat, perl, jboss - Software development in C, C++, java, perl - Databases including MySQL and PostgreSQL. - Mail services with sendmaill, MailScanner, spamassassin and virus scanners - Windows file and print services with Samba Development, configuration and consultancy services at 600 (pounds)/day. Fixed price negotiable. Managed administration and monitoring negotiable. Updated: 2002-07-01  Andre Spiegel Dipl.-Inform. Berlin, Germany Maintainer of the GNU Emacs version control package (VC). I can provide consulting and practical help for the installation and administration of GNU/Linux systems, in particular Debian. Also knowledgeable on many other Unix derivates, and network technology. Installation, porting and customization of GNU software is possible; I have programming experience in C, C++, Java, and Emacs Lisp, among others. Expertise in version control using RCS or CVS. I also give seminars on the above subjects. Rates: 75 EUR/hr (US$ 70) Updated: 2002-04-22  Name: Julian Stacey Location: Muenchen, Deutschland (Munich, Germany). Qualifications: University Degree, BSc Hons Computers & Cybernetics, 1980. Resume: http://bim.bsn.com/~jhs/stacey/ (includes phone number). Rate: 80 - 100 Euros / Hour. Specialisation: Unix (Pref. BSD or Linux), C, X-Windows, FSF tools, firewalls, systems engineering, hardware interfacing, real time/embedded, custom design & porting. No { Emacs, Cobol, Microsoft }. Net Consulting: Link speed: DSL @ 768 K bit/s. Free Sources: BSD, X-Windows, XFree86, FSF; Personal sources on web. Free GCC-1.40: For Symmetric Computer Systems Model 375 (native cc is broken). Languages: I am English. Ich verstehe Deutsch. Je comprend Francais, (lentment!). Use Hoch Deutsch, not Bayerisch, Spell slowly & clearly, Use single digits, no inverted digit pairs etc. Contact: State aprox. amount of days/months you want to purchase professional consultancy .. OR .. Note I am NOT a free help desk ! Please post your questions to a newsgroup, for those with more time, knowledge, & inclination than I. Updated: 2002-04-19  Richard M. Stallman 545 Tech Sq, Rm 425 Cambridge, MA 02139 Emacs: anything whatever Is anyone interested in courses in using or extending GNU Emacs? Original inventor of Emacs and main author of GNU Emacs and GCC. Rates: $6/min or $250/hr. Updated: 2002-04-19  Static Free Software 4119 Alpine Road Portola Valley, Ca 94028 (650) 851-2927 http://www.staticfreesoft.com Static Free Software developed and supports the "Electric VLSI Design System". Steven Rubin, the founder of the company and author of Electric, is available for enhancements, support, and training. Please see our web page at www.staticfreesoft.com for more information about our products, services, and prices. Updated: 2002-04-19  Tommy Stiansen Skeielia 112 5238 Raadal Norway + 47 92 40 42 00 + 47 55 22 12 17 ts@pcias.no Special fields: Unix, GNU/Linux, Perl installation, C, C++, Lisp, Perl programming. CGI programming. Installation, porting. Specification development, design, implementation, documentation. Firewalls, security analysis. Porting Windows platforms to GNU/Linux. Teaching, preaching GNU/Linux / unix and Telecom. 15 years experience with GNU systems and tools. Most useful for network design and construction or dynamic web development. Expert in Apache, php, Mysql, Telecom related, C, Lisp, Perl. Updated: 2002-04-18  Swing Digital Ltd. 15-17 Middle Street Brighton BN1 1AL United Kingdom Tel +44 (0) 1273 20 11 66 Fax +44 (0) 1273 20 11 68 http://www.swingdigital.com Swing Digital actively supports the development of the GNU.FREE Internet Voting system. Through this support we have gained the unique expertise to support, install and run GUN.FREE-based Internet votes. We are also available in a consultancy basis to offer advice for organisations wishing to run GNU.FREE themselves. Our consultancy fees start at 900 Euro (550 UK pounds) per day. We are also able to securely host Internet Votes, prices on application. Updated: 2002-04-19  Kayvan A. Sylvan Sylvan Associates, Inc. 879 Lewiston Drive San Jose, CA 95136-1517 Phone: (408) 978-1407 Fax: (408) 978-0472 I will help you port, install and customize GNU Emacs, GCC, G++, GNUmake, bison, and other GNU tools on almost any architecture and operating system. Questions answered. GNU C/C++, Java and lisp hacking available. I will also do ongoing support and periodic upgrades if you get on my GNU software subscription list. Rates: $100-$125/hour, depending on type and quantity of work. Substantial discounts for long-term contracts and also for educational or non-profit institutions. Experience: Many different Unix systems (2.9BSD to 4.4BSD, Xenix, SVR3 and SVR4, Solaris, Linux, FreeBSD). Systems programming and system administration on all brands of Unix. Kernel hacking experience. Lots of porting experience. Updated: 2002-04-18  Alfredo Tomasini , GNU/Linux Intel desktop/laptop installation, setup, and networking. Installation of GNU tools on SunOS and GNU/Linux. Sed and Gawk script development. Languages: English and Italian. Fee: $50/hour. Updated: 2002-04-19  Tksoft Inc. Papinkatu 19 06100, Porvoo Finland +358 40 570 9900 http://www.tksoft.com/ Software development services for GNU programs. We can modify and fix GNU software. We will also develop new software under the GNU license. 10 years of experience in linux and other GNU software. We speak Finnish, Japanese and English. Updated: 2004-05-13  Leonard H. Tower Jr. 36 Porter Street Somerville, MA 02143-2313 USA +1-617-623-7739 Will work on most GNU, GPLed, and Open Source software. Installation, handholding, trouble shooting, extensions, teaching, etc. Rates: $ 250.00/hour + travel + expenses. Fixed fee quotes available. Negotiable for non-profits. Experience: Have hacked on over a dozen architectures in many languages. Have system mothered too many varieties of Unixes. Assisted rms with the front end of GCC and its back-end support. Installed and worked with many GNU programs including GNU Emacs. Resume available on request. Updated: 2002-04-18  Xetpoint Oy P.O. Box 43, FIN-33961 Pirkkala, Finland Email: Web: http://www.xetpoint.fi/ Services: - GNU/Linux system installation, configuration and maintenance - GNU/Linux system administration - GNU/Linux consultation and support - GNU/Linux and free software customization - Network administration - Free software development and integration - Training - Security analysis Rates: 80 EUR/hour or fixed contract. Updated: 2004-02-13  Wasabi Systems 500 E. Main St., Suite 1520 Norfolk, VA 23510 +1 757 248-9601 voice +1 509 461-7283 fax http://www.wasabisystems.com/ Wasabi Systems provides service and support for the popular GNU development tools, as service packages and as stand-alone software distributions. We provide cross-compilers and cross-debuggers to be used for developing all types of embedded systems. We specialize in optimizing the GNU tools for particular targets, and in providing support for standardized tools to be used on multiple types of hosts for multiple types of targets. We provide first- and/or second- tier support for you and/or your end-users. Support is available in a variety of packages, with a base rate of $200/hour. Updated: 2004-03-02  Jody Winston xprt Computer Consulting, Inc. 731 Voyager Houston, TX, 77062 (281) 480-UNIX, We have supported, installed, and used the entire GNU software suite for over 10 years on many different Unix platforms. We have written character device drivers and proc file systems for custom hardware running on GNU/Linux. We have developed extensions for tcl and Python. In addition, we have developed a custom X11 server and X input extensions. Our consulting rate is $150.00 US dollars per hour, negotiable, plus a per diem for out of town work. Updated: 2002-04-19  The Written Word Web: http://thewrittenword.com Email: info@thewrittenword.com Tel: (800) 372-7476 The Written Word provides CDs of pre-compiled Open Source applications on popular UNIX variants. Clients can purchase a one-time CD set ($149/set), or a subscription, which provides four quarterly releases. Two types of subscription are available: "media only" ($550/year), or "media and updates" ($1459/year). The "media and updates" subscription entitles the subscriber, via a web site, to patches, security fixes, new releases to existing packages, new packages, online documentation, and changelog information, between releases, and a central bug tracking system for all packages. Updated: 2000-11-27  For a current copy of this directory, or to have yourself listed, ask: service@gnu.org A current version should be available on our web site at: http://www.gnu.org/prep/service.html ** Please keep the entries in this file alphabetical ** xemacs-21.4.22/etc/TERMS0000644000175000017500000002206506256071510012637 0ustar acsacsThis file describes what you must or might want to do to termcap entries to make terminals work properly and efficiently with Emacs. Information on likely problems with specific types of terminals appears at the end of the file. *** What you want in a terminal *** Vital 1. Easy to compute suitable padding for. 2. Never ever sends ^S/^Q unless you type them, at least in one mode. Nice for speed 1. Supports insert/delete of multiple lines in one command. 2. Same for multiple characters, though doing them one by one is usually fast enough except on emulators running on machines with bitmap screens. Nice for usability 1. Considerably more than 24 lines. 2. Meta key (shift-like key that controls the 0200 bit in every character you type). *** New termcap strings *** Emacs supports certain termcap strings that are not described in the 4.2 manual but appear to be standard in system V. The one exception is `cS', which I invented. `AL' insert several lines. Takes one parameter, the number of lines to be inserted. You specify how to send this parameter using a %-construct, just like the cursor positions in the `cm' string. `DL' delete several lines. One parameter. `IC' insert several characters. One parameter. `DC' delete several characters. One parameter. `rp' repeat a character. Takes two parameters, the character to be repeated and the number of times to repeat it. Most likely you will use `%.' for sending the character to be repeated. Emacs interprets a padding spec with a * as giving the amount of padding per repetition. WARNING: Many terminals have a command to repeat the *last character output* N times. This means that the character will appear N+1 times in a row when the command argument is N. However, the `rp' string's parameter is the total number of times wanted, not one less. Therefore, such repeat commands may be used in an `rp' string only if you use Emacs's special termcap operator `%a-c\001' to subtract 1 from the repeat count before substituting it into the string. It is probably safe to use this even though the Unix termcap does not accept it because programs other than Emacs probably won't look for `rp' anyway. `cs' set scroll region. Takes two parameters, the vertical positions of the first line to include in the scroll region and the last line to include in the scroll region. Both parameters are origin-zero. The effect of this should be to cause a following insert-line or delete-line not to move lines below the bottom of the scroll region. This is not the same convention that Emacs version 16 used. That is because I was led astray by unclear documentation of the meaning of %i in termcap strings. Since the termcap documentation for `cs' is also unclear, I had to deduce the correct parameter conventions from what would make the VT-100's `cs' string work properly. From an incorrect assumption about %i, I reached an incorrect conclusion about `cs', but the result worked correctly on the VT100 and ANSII terminals. In Emacs version 17, both `cs' and %i work correctly. The version 16 convention was to pass, for the second parameter, the line number of the first line beyond the end of the scroll region. `cS' set scroll region. Differs from `cs' in taking parameters differently. There are four parameters: 1. Total number of lines on the screen. 2. Number of lines above desired scroll region. 3. Number of lines below (outside of) desired scroll region. 4. Total number of lines on the screen, like #1. This is because an Ambassador needs the parameters like this. `cr', `do', `le' Emacs will not attempt to use ^M, ^J or ^H for cursor motion unless these capabilities are present and say to use those characters. `km' Says the terminal has a Meta key. Defining these strings is important for getting maximum performance from your terminal. Make sure that the `ti' string sets all modes needed for editing in Emacs. For example, if your terminal has a mode that controls wrap at the end of the line, you must decide whether to specify the `am' flag in the termcap entry; whichever you decide, the `ti' string should contain commands to set the mode that way. (Emacs also sends the `vs' string after the `ti' string. You can put the mode-setting commands in either one of them.) *** Specific Terminal Types *** Watch out for termcap entries for Ann Arbor Ambassadors that give too little padding for clear-screen. 7.2 msec per line is right. These are the strings whose padding you probably should change: :al=1*\E[L:dl=1*\E[M:cd=7.2*\E[J:cl=7.2*\E[H\E[J: I have sometimes seen `\E[2J' at the front of the `ti' string; this is a clear-screen, very slow, and it can cause you to get Control-s sent by the terminal at startup. I recommend removing the `\E[2J' from the `ti' string. The `ti' or `vs' strings also usually need stuff added to them, such as \E[>33;52;54h\E[>30;37;38;39l You might want to add the following to the `te' or `ve' strings: \E[>52l\E[>37h The following additional capabilities will improve performance: :AL=1*\E[%dL:DL=1*\E[%dM:IC=4\E[%d@:DC=4\E[%dP:rp=1*%.\E[%a-c\001%db: If you find that the Meta key does not work, make sure that :km: is present in the termcap entry. Watch out for termcap entries for VT100's that fail to specify the `sf' string, or that omit the padding needed for the `sf' and `sr' strings (2msec per line affected). What you need is :sf=2*^J:sr=2*\EM:cs=\E[%i%d;%dr: The Concept-100 and Concept-108 have many modes that `ti' strings often fail to initialize. If you have problems on one of these terminals, that is probably the place to fix them. These terminals can support an `rp' string. Watch out on HP terminals for problems with standout disappearing on part of the mode line. These problems are due to the absence of :sg#0: which some HP terminals need. The vi55 is said to require `ip=2'. The Sun console should have these capabilities for good performance. :AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP: The vt220 needs to be set to vt220 mode, 7 bit, space parity in order to work fully with TERM=vt220. If you are using a LAT terminal concentrator, you need to issue these commands to turn off flow control: set port flow control disable define port flow control disable On System V, in the terminfo database, various terminals may have the `xt' flag that should not have it. `xt' should be present only for the Teleray 1061 or equivalent terminal. In particular, System V for the 386 often has `xt' for terminal type AT386 or AT386-M, which is used for the console. You should delete this flag. Here is how: You can get a copy of the terminfo "source" for at386 using the command: `infocmp at386 >at386.tic'. Edit the file at386.tic and remove the `xt' flag. Then compile the new entry with: `tic at386.tic'. It is also reported that these terminal types sometimes have the wrong reverse-scroll string. It should be \E[T, but sometimes is given as \E[S. Here is what watserv1!maytag!focsys!larry recommends for these terminals: # This copy of the terminfo description has been fixed. # The suggestions came from a number of usenet postings. # # Intel AT/386 for color card with monochrome display # AT386-M|at386-m|386AT-M|386at-m|at/386 console, am, bw, eo, xon, cols#80, lines#25, acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~, bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[2J\E[H, cr=\r, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%02d;%p2%02dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[1M, ech=\E[%p1%dX,ed=\E[J, el=\E[K, el1=\E[1K\E[X, flash=^G, home=\E[H, hpa=\E[%i%p1%dG, ich=\E[%p1%d@, ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L, ind=\E[S, indn=\E[%p1%dS, invis=\E[9m, is2=\E[0;10;38m, kbs=\b, kcbt=^], kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kend=\E[Y, kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, khome=\E[H, kich1=\E[@, knp=\E[U, kpp=\E[V, krmir=\E0, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT, rmacs=\E[10m, rmso=\E[m, rmul=\E[m, sgr=\E[10m\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;%?%p9%t;12%;%?%p7%t;9%;m, sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m, # # AT&T 386 color console # AT386|at386|386AT|386at|at/386 console, colors#8, ncv#3, pairs#64, is2=\E[0;10;39m, op=\E[0m, setb=\E[%?%p1%{0}%=%t40m %e%p1%{1}%=%t44m %e%p1%{2}%=%t42m %e%p1%{3}%=%t46m %e%p1%{4}%=%t41m %e%p1%{5}%=%t45m %e%p1%{6}%=%t43m %e%p1%{7}%=%t47m%;, setf=\E[%?%p1%{0}%=%t30m %e%p1%{1}%=%t34m %e%p1%{2}%=%t32m %e%p1%{3}%=%t36m %e%p1%{4}%=%t31m %e%p1%{5}%=%t35m %e%p1%{6}%=%t33m %e%p1%{6}%=%t33m %e%p1%{7}%=%t37m%;, use=at386-m, # # Color console version that supports underline but maps blue # foreground color to cyan. # AT386-UL|at386-ul|386AT-UL|386at-ul|at/386 console, is2=\E[0;10;38m, use=at386, xemacs-21.4.22/etc/TUTORIAL0000644000175000017500000013163110177316772013221 0ustar acsacsCopyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions. You are looking at the Emacs tutorial. Emacs commands generally involve the CONTROL key (sometimes labelled CTRL or CTL) or the META key. On some keyboards, the META key is labelled ALT or EDIT or something else (for example, on Sun keyboards, the diamond key to the left of the spacebar is META). If you have no META key, you can use ESC instead. Rather than write out META or CONTROL each time we want you to prefix a character, we'll use the following abbreviations: C- means hold the CONTROL key while typing the character Thus, C-f would be: hold the CONTROL key and type f. M- means hold the META key down while typing . If there is no META key, type , release it, then type the character . Important note: to end the Emacs session, type C-x C-c. (Two characters.) The characters ">>" at the left margin indicate directions for you to try using a command. For instance: <> >> Now type C-v (View next screen) to move to the next screen. (go ahead, do it by holding down the control key while typing v). From now on, you should do this again whenever you finish reading the screen. Note that there is an overlap of two lines when you move from screen to screen; this provides some continuity so you can continue reading the text. The first thing that you need to know is how to move around from place to place in the text. You already know how to move forward one screen, with C-v. To move backwards one screen, type M-v (hold down the META key and type v, or type v if you do not have a META, EDIT, or ALT key). >> Try typing M-v and then C-v, a few times. * SUMMARY --------- The following commands are useful for viewing screenfuls: C-v Move forward one screenful M-v Move backward one screenful C-l Clear screen and redisplay everything putting the text near the cursor at the center. (That's control-L, not control-1.) >> Find the cursor, and note what text is near it. Then type C-l. Find the cursor again and notice that the same text is near the cursor now. * BASIC CURSOR CONTROL ---------------------- Moving from screenful to screenful is useful, but how do you move to a specific place within the text on the screen? There are several ways you can do this. The most basic way is to use the commands C-p, C-b, C-f, and C-n. Each of these commands moves the cursor one row or column in a particular direction on the screen. Here is a table showing these four commands and shows the directions they move: Previous line, C-p : : Backward, C-b .... Current cursor position .... Forward, C-f : : Next line, C-n >> Move the cursor to the line in the middle of that diagram using C-n or C-p. Then type C-l to see the whole diagram centered in the screen. You'll probably find it easy to think of these by letter: P for previous, N for next, B for backward and F for forward. These are the basic cursor positioning commands, and you'll be using them ALL the time, so it would be of great benefit if you learn them now. >> Do a few C-n's to bring the cursor down to this line. >> Move into the line with C-f's and then up with C-p's. See what C-p does when the cursor is in the middle of the line. Each line of text ends with a Newline character, which serves to separate it from the following line. The last line in your file ought to have a Newline at the end (but Emacs does not require it to have one). >> Try to C-b at the beginning of a line. It should move to the end of the previous line. This is because it moves back across the Newline character. C-f can move across a Newline just like C-b. >> Do a few more C-b's, so you get a feel for where the cursor is. Then do C-f's to return to the end of the line. Then do one more C-f to move to the following line. When you move past the top or bottom of the screen, the text beyond the edge shifts onto the screen. This is called "scrolling". It enables Emacs to move the cursor to the specified place in the text without moving it off the screen. >> Try to move the cursor off the bottom of the screen with C-n, and see what happens. If moving by characters is too slow, you can move by words. M-f (Meta-f) moves forward a word and M-b moves back a word. >> Type a few M-f's and M-b's. When you are in the middle of a word, M-f moves to the end of the word. When you are in whitespace between words, M-f moves to the end of the following word. M-b works likewise in the opposite direction. >> Type M-f and M-b a few times, interspersed with C-f's and C-b's so that you can observe the action of M-f and M-b from various places inside and between words. Notice the parallel between C-f and C-b on the one hand, and M-f and M-b on the other hand. Very often Meta characters are used for operations related to the units defined by language (words, sentences, paragraphs), while Control characters operate on basic units that are independent of what you are editing (characters, lines, etc). This parallel applies between lines and sentences: C-a and C-e move to the beginning or end of a line, and M-a and M-e move to the beginning or end of a sentence. >> Try a couple of C-a's, and then a couple of C-e's. Try a couple of M-a's, and then a couple of M-e's. See how repeated C-a's do nothing, but repeated M-a's keep moving one more sentence. Although these are not quite analogous, each one seems natural. The location of the cursor in the text is also called "point". To paraphrase, the cursor shows on the screen where point is located in the text. Here is a summary of simple cursor-moving operations, including the word and sentence moving commands: C-f Move forward a character C-b Move backward a character M-f Move forward a word M-b Move backward a word C-n Move to next line C-p Move to previous line C-a Move to beginning of line C-e Move to end of line M-a Move back to beginning of sentence M-e Move forward to end of sentence >> Try all of these commands now a few times for practice. These are the most often used commands. Two other important cursor motion commands are M-< (Meta Less-than), which moves to the beginning of the whole text, and M-> (Meta Greater-than), which moves to the end of the whole text. On most terminals, the "<" is above the comma, so you must use the shift key to type it. On these terminals you must use the shift key to type M-< also; without the shift key, you would be typing M-comma. >> Try M-< now, to move to the beginning of the tutorial. Then use C-v repeatedly to move back here. >> Try M-> now, to move to the end of the tutorial. Then use M-v repeatedly to move back here. You can also move the cursor with the arrow keys, if your terminal has arrow keys. We recommend learning C-b, C-f, C-n and C-p for three reasons. First, they work on all kinds of terminals. Second, once you gain practice at using Emacs, you will find that typing these CTRL characters is faster than typing the arrow keys (because you do not have to move your hands away from touch-typing position). Third, once you form the habit of using these CTRL character commands, you can easily learn to use other advanced cursor motion commands as well. Most Emacs commands accept a numeric argument; for most commands, this serves as a repeat-count. The way you give a command a repeat count is by typing C-u and then the digits before you type the command. If you have a META (or EDIT or ALT) key, there is another alternative way to enter a numeric argument: type the digits while holding down the META key. We recommend learning the C-u method because it works on any terminal. For instance, C-u 8 C-f moves forward eight characters. >> Try using C-n or C-p with a numeric argument, to move the cursor to a line near this one with just one command. Most commands use the numeric argument as a repeat count. Certain exceptional commands use it differently. C-v and M-v are among the exceptions. When given an argument, they scroll the screen up or down by that many lines, rather than by a screenfuls. For example, C-u 4 C-v scrolls the screen by 4 lines. >> Try typing C-u 8 C-v now. This should have scrolled the screen up by 8 lines. If you would like to scroll it down again, you can give an argument to M-v. If you are using the X Window system, there is probably a rectangular area called a scroll bar at the right hand side of the Emacs window. You can scroll the text by manipulating the scroll bar with the mouse. >> Try pressing the middle button at the top of the highlighted area within the scroll bar. This should scroll the text to a position determined by how high or low you click. >> Move the mouse to a point in the scroll bar about three lines from the top, and click the left button a couple of times. * CURSOR CONTROL WITH AN X TERMINAL ----------------------------------- If you have an X terminal, you will probably find it easier to use the keys on the keypad to control the cursor. The left, right, up, and down arrow keys move in the expected direction; they function exactly like C-b, C-f, C-p, and C-n, but are easier to type and to remember. You can also use C-left and C-right to move by words, and C-up and C-down to move by blocks (e.g. paragraphs, if you're editing text). If you have keys labelled HOME (or BEGIN) and END, they will take you to the beginning and end of a line, respectively, and C-home and C-end will move to the beginning and end of the file. If your keyboard has PgUp and PgDn keys, you can use them to move up and down a screenful at a time, like M-v and C-v. All of these commands can take numeric arguments, as described above. You can use a shortcut to enter these arguments: just hold down the CONTROL or META key and type the number. For example, to move 12 words to the right, type C-1 C-2 C-right. Note that it is very easy to type this because you do not have to release the CONTROL key between keystrokes. * WHEN EMACS IS HUNG -------------------- If Emacs stops responding to your commands, you can stop it safely by typing C-g. You can use C-g to stop a command which is taking too long to execute. You can also use C-g to discard a numeric argument or the beginning of a command that you do not want to finish. >> Type C-u 100 to make a numeric arg of 100, then type C-g. Now type C-f. It should move just one character, because you canceled the argument with C-g. If you have typed an by mistake, you can get rid of it with a C-g. * DISABLED COMMANDS ------------------- Some Emacs commands are "disabled" so that beginning users cannot use them by accident. If you type one of the disabled commands, Emacs displays a message saying what the command was, and asking you whether you want to go ahead and execute the command. If you really want to try the command, type Space in answer to the question. Normally, if you do not want to execute the disabled command, answer the question with "n". >> Type `C-x n p' (which is a disabled command), then type n to answer the question. * WINDOWS --------- Emacs can have several windows, each displaying its own text. Note that "window" as used by Emacs does not refer to separate overlapping windows in the window system, but to separate panes within a single X window. (Emacs can also have multiple X windows, or "frames" in Emacs terminology. This is described later.) At this stage it is better not to go into the techniques of using multiple windows. But you do need to know how to get rid of extra windows that may appear to display help or output from certain commands. It is simple: C-x 1 One window (i.e., kill all other windows). That is Control-x followed by the digit 1. C-x 1 expands the window which contains the cursor, to occupy the full screen. It deletes all other windows. >> Move the cursor to this line and type C-u 0 C-l. (Remember that C-l redraws the screen. If you give a numeric argument to this command, it means "redraw the screen and put the current line that many lines from the top of the screen." So C-u 0 C-l means "redraw the screen, putting the current line at the top.") >> Type Control-x 2 See how this window shrinks, while a new one appears to display contents of this buffer. >> Type C-x 1 and see the new window disappear. * INSERTING AND DELETING ------------------------ If you want to insert text, just type the text. Characters which you can see, such as A, 7, *, etc. are taken by Emacs as text and inserted immediately. Type (the carriage-return key) to insert a Newline character. You can delete the last character you typed by typing . is a key on the keyboard, which may be labeled "Del". In some cases, the "Backspace" key serves as , but not always! More generally, deletes the character immediately before the current cursor position. >> Do this now--type a few characters, then delete them by typing a few times. Don't worry about this file being changed; you will not alter the master tutorial. This is your personal copy of it. When a line of text gets too big for one line on the screen, the line of text is "continued" onto a second screen line. A backslash ("\") at the right margin indicates a line which has been continued. >> Insert text until you reach the right margin, and keep on inserting. You'll see a continuation line appear. >> Use s to delete the text until the line fits on one screen line again. The continuation line goes away. You can delete a Newline character just like any other character. Deleting the Newline character between two lines merges them into one line. If the resulting combined line is too long to fit in the screen width, it will be displayed with a continuation line. >> Move the cursor to the beginning of a line and type . This merges that line with the previous line. >> Type to reinsert the Newline you deleted. Remember that most Emacs commands can be given a repeat count; this includes text characters. Repeating a text character inserts it several times. >> Try that now -- type C-u 8 * to insert ********. You've now learned the most basic way of typing something in Emacs and correcting errors. You can delete by words or lines as well. Here is a summary of the delete operations: delete the character just before the cursor C-d delete the next character after the cursor M- kill the word immediately before the cursor M-d kill the next word after the cursor C-k kill from the cursor position to end of line M-k kill to the end of the current sentence Notice that and C-d vs M- and M-d extend the parallel started by C-f and M-f (well, is not really a control character, but let's not worry about that). C-k and M-k are like C-e and M-e, sort of, in that lines are opposite sentences. When you delete more than one character at a time, Emacs saves the deleted text so that you can bring it back. Bringing back killed text is called "yanking". You can yank the killed text either at the same place where it was killed, or at some other place in the text. You can yank the text several times in order to make multiple copies of it. The command to yank is C-y. Note that the difference between "Killing" and "Deleting" something is that "Killed" things can be yanked back, and "Deleted" things cannot. Generally, the commands that can remove a lot of text save the text, while the commands that delete just one character, or just blank lines and spaces, do not save the deleted text. >> Move the cursor to the beginning of a line which is not empty. Then type C-k to kill the text on that line. >> Type C-k a second time. You'll see that it kills the Newline which follows that line. Note that a single C-k kills the contents of the line, and a second C-k kills the line itself, and make all the other lines move up. C-k treats a numeric argument specially: it kills that many lines AND their contents. This is not mere repetition. C-u 2 C-k kills two lines and their newlines; typing C-k twice would not do that. To retrieve the last killed text and put it where the cursor currently is, type C-y. >> Try it; type C-y to yank the text back. Think of C-y as if you were yanking something back that someone took away from you. Notice that if you do several C-k's in a row, all of the killed text is saved together, so that one C-y will yank all of the lines. >> Do this now, type C-k several times. Now to retrieve that killed text: >> Type C-y. Then move the cursor down a few lines and type C-y again. You now see how to copy some text. What do you do if you have some text you want to yank back, and then you kill something else? C-y would yank the more recent kill. But the previous text is not lost. You can get back to it using the M-y command. After you have done C-y to get the most recent kill, typing M-y replaces that yanked text with the previous kill. Typing M-y again and again brings in earlier and earlier kills. When you have reached the text you are looking for, you do not have to do anything to keep it. Just go on with your editing, leaving the yanked text where it is. If you M-y enough times, you come back to the starting point (the most recent kill). >> Kill a line, move around, kill another line. Then do C-y to get back the second killed line. Then do M-y and it will be replaced by the first killed line. Do more M-y's and see what you get. Keep doing them until the second kill line comes back, and then a few more. If you like, you can try giving M-y positive and negative arguments. * UNDO ------ If you make a change to the text, and then decide that it was a mistake, you can undo the change with the undo command, C-x u. Normally, C-x u undoes the changes made by one command; if you repeat the C-x u several times in a row, each repetition undoes one additional command. But there are two exceptions: commands that do not change the text do not count (this includes cursor motion commands and scrolling command), and self-inserting characters are usually handled in groups of up to 20. (This is to reduce the number of C-x u's you have to type to undo insertion of text.) >> Kill this line with C-k, then type C-x u and it should reappear. C-_ is an alternative undo command; it works just the same as C-x u, but it is easier to type several times in a row. The disadvantage of C-_ is that on some keyboards it is not obvious how to type it. That is why we provide C-x u as well. On some terminals, you can type C-_ by typing / while holding down CTRL. A numeric argument to C-_ or C-x u acts as a repeat count. * FILES ------- In order to make the text you edit permanent, you must put it in a file. Otherwise, it will go away when your invocation of Emacs goes away. You put your editing in a file by "finding" the file. (This is also called "visiting" the file.) Finding a file means that you see the contents of the file within Emacs. In many ways, it is as if you were editing the file itself. However, the changes you make using Emacs do not become permanent until you "save" the file. This is so you can avoid leaving a half-changed file on the system when you do not want to. Even when you save, Emacs leaves the original file under a changed name in case you later decide that your changes were a mistake. If you look near the bottom of the screen you will see a line that begins and ends with dashes, and contains the string "Emacs: TUTORIAL". This part of the screen always shows the name of the file that you are visiting. Right now, you are visiting a file called "TUTORIAL" which is your personal scratch copy of the Emacs tutorial. Whatever file you find, that file's name will appear in that precise spot. The commands for finding and saving files are unlike the other commands you have learned in that they consist of two characters. They both start with the character Control-x. There is a whole series of commands that start with Control-x; many of them have to do with files, buffers, and related things. These commands are two, three or four characters long. Another thing about the command for finding a file is that you have to say what file name you want. We say the command "reads an argument from the terminal" (in this case, the argument is the name of the file). After you type the command C-x C-f Find a file Emacs asks you to type the file name. The file name you type appears on the bottom line of the screen. The bottom line is called the minibuffer when it is used for this sort of input. You can use ordinary Emacs editing commands to edit the file name. While you are entering the file name (or any minibuffer input), you can cancel the command with C-g. >> Type C-x C-f, then type C-g. This cancels the minibuffer, and also cancels the C-x C-f command that was using the minibuffer. So you do not find any file. When you have finished entering the file name, type to terminate it. Then C-x C-f command goes to work, and finds the file you chose. The minibuffer disappears when the C-x C-f command is finished. In a little while the file contents appear on the screen, and you can edit the contents. When you wish to make your changes permanent, type the command C-x C-s Save the file This copies the text within Emacs into the file. The first time you do this, Emacs renames the original file to a new name so that it is not lost. The new name is made by adding "~" to the end of the original file's name. When saving is finished, Emacs prints the name of the file written. You should save fairly often, so that you will not lose very much work if the system should crash. >> Type C-x C-s, saving your copy of the tutorial. This should print "Wrote ...TUTORIAL" at the bottom of the screen. NOTE: On some systems, typing C-x C-s will freeze the screen and you will see no further output from Emacs. This indicates that an operating system "feature" called "flow control" is intercepting the C-s and not letting it get through to Emacs. To unfreeze the screen, type C-q. Then see the section "Spontaneous Entry to Incremental Search" in the Emacs manual for advice on dealing with this "feature". You can find an existing file, to view it or edit it. You can also find a file which does not already exist. This is the way to create a file with Emacs: find the file, which will start out empty, and then begin inserting the text for the file. When you ask to "save" the file, Emacs will really create the file with the text that you have inserted. From then on, you can consider yourself to be editing an already existing file. * BUFFERS --------- If you find a second file with C-x C-f, the first file remains inside Emacs. You can switch back to it by finding it again with C-x C-f. This way you can get quite a number of files inside Emacs. >> Create a file named "foo" by typing C-x C-f foo . Then insert some text, edit it, and save "foo" by typing C-x C-s. Finally, type C-x C-f TUTORIAL to come back to the tutorial. Emacs stores each file's text inside an object called a "buffer." Finding a file makes a new buffer inside Emacs. To see a list of the buffers that currently exist in your Emacs job, type C-x C-b List buffers >> Try C-x C-b now. See how each buffer has a name, and it may also have a file name for the file whose contents it holds. Some buffers do not correspond to files. For example, the buffer named "*Buffer List*" does not have any file. It is the buffer which contains the buffer list that was made by C-x C-b. ANY text you see in an Emacs window is always part of some buffer. >> Type C-x 1 to get rid of the buffer list. If you make changes to the text of one file, then find another file, this does not save the first file. Its changes remain inside Emacs, in that file's buffer. The creation or editing of the second file's buffer has no effect on the first file's buffer. This is very useful, but it also means that you need a convenient way to save the first file's buffer. It would be a nuisance to have to switch back to it with C-x C-f in order to save it with C-x C-s. So we have C-x s Save some buffers C-x s asks you about each buffer which contains changes that you have not saved. It asks you, for each such buffer, whether to save the buffer. >> Insert a line of text, then type C-x s. It should ask you whether to save the buffer named TUTORIAL. Answer yes to the question by typing "y". * USING THE MENU ---------------- If you are on an X terminal, you will notice a menubar at the top of the Emacs screen. You can use this menubar to access all the most common Emacs commands, such as "find file". You will find this easier at first, because you don't need to remember the keystrokes necessary to access any particular command. Once you are comfortable with Emacs, it will be easy to begin using the keyboard commands because each menu item with a corresponding keyboard command has the command listed next to it. Note that there are many items in the menubar that have no exact keyboard equivalents. For example, the Buffers menu lists all of the available buffers in most-recently used order. You can switch to any buffer by simply findings its name in the Buffers menu and selecting it. * USING THE MOUSE ----------------- When running under X, Emacs is fully integrated with the mouse. You can position the text cursor by clicking the left button at the desired location, and you can select text by dragging the left mouse button across the text you want to select. (Or alternatively, click the left mouse button at one end of the text, then move to the other end and use Shift-click to select the text.) To kill some selected text, you can use C-w or choose the Cut item from the Edit menu. Note that these are *not* equivalent: C-w only saves the text internally within Emacs (similar to C-k as described above), whereas Cut does this and also puts the text into the X clipboard, where it can be accessed by other applications. To retrieve text from the X clipboard, use the Paste item from the Edit menu. The middle mouse button is commonly used to choose items that are visible on the screen. For example, if you enter Info (the on-line Emacs documentation) using C-h i or the Help menu, you can follow a highlighted link by clicking the middle mouse button on it. Similarly, if you are typing a file name in (e.g. when prompted by "Find File") and you hit TAB to show the possible completions, you can click the middle mouse button on one of the completions to select it. The right mouse button brings up a popup menu. The contents of this menu vary depending on what mode you're in, and usually contain a few commonly used commands, so they're easier to access. >> Press the right mouse button now. You will have to hold the button down in order to keep the menu up. * EXTENDING THE COMMAND SET --------------------------- There are many, many more Emacs commands than could possibly be put on all the control and meta characters. Emacs gets around this with the X (eXtend) command. This comes in two flavors: C-x Character eXtend. Followed by one character. M-x Named command eXtend. Followed by a long name. These are commands that are generally useful but used less than the commands you have already learned about. You have already seen two of them: the file commands C-x C-f to Find and C-x C-s to Save. Another example is the command to end the Emacs session--this is the command C-x C-c. (Do not worry about losing changes you have made; C-x C-c offers to save each changed file before it kills the Emacs.) C-z is the command to exit Emacs *temporarily*--so that you can go back to the same Emacs session afterward. On systems which allow it, C-z "suspends" Emacs; that is, it returns to the shell but does not destroy the Emacs. In the most common shells, you can resume Emacs with the `fg' command or with `%emacs'. On systems which do not implement suspending, C-z creates a subshell running under Emacs to give you the chance to run other programs and return to Emacs afterward; it does not truly "exit" from Emacs. In this case, the shell command `exit' is the usual way to get back to Emacs from the subshell. The time to use C-x C-c is when you are about to log out. It's also the right thing to use to exit an Emacs invoked under mail handling programs and other miscellaneous utilities, since they may not know how to cope with suspension of Emacs. In ordinary circumstances, though, if you are not about to log out, it is better to suspend Emacs with C-z instead of exiting Emacs. There are many C-x commands. Here is a list of the ones you have learned: C-x C-f Find file. C-x C-s Save file. C-x C-b List buffers. C-x C-c Quit Emacs. C-x u Undo. Named eXtended commands are commands which are used even less frequently, or commands which are used only in certain modes. An example is the command replace-string, which globally replaces one string with another. When you type M-x, Emacs prompts you at the bottom of the screen with M-x and you should type the name of the command; in this case, "replace-string". Just type "repl s" and Emacs will complete the name. End the command name with . The replace-string command requires two arguments--the string to be replaced, and the string to replace it with. You must end each argument with . >> Move the cursor to the blank line two lines below this one. Then type M-x repl schangedaltered. Notice how this line has changed: you've replaced the word c-h-a-n-g-e-d with "altered" wherever it occurred, after the initial position of the cursor. * AUTO SAVE ----------- When you have made changes in a file, but you have not saved them yet, they could be lost if your computer crashes. To protect you from this, Emacs periodically writes an "auto save" file for each file that you are editing. The auto save file name has a # at the beginning and the end; for example, if your file is named "hello.c", its auto save file's name is "#hello.c#". When you save the file in the normal way, Emacs deletes its auto save file. If the computer crashes, you can recover your auto-saved editing by finding the file normally (the file you were editing, not the auto save file) and then typing M-x recover-file. When it asks for confirmation, type yes to go ahead and recover the auto-save data. * ECHO AREA ----------- If Emacs sees that you are typing commands slowly it shows them to you at the bottom of the screen in an area called the "echo area." The echo area contains the bottom line of the screen. * MODELINE ----------- The line immediately above the echo area it is called the "modeline". The mode line says something like this: --**-XEmacs: TUTORIAL (Fundamental)--L670--58%---------------- This line gives useful information about the status of Emacs and the text you are editing. You already know what the filename means--it is the file you have found. -NN%-- indicates your current position in the text; it means that NN percent of the text is above the top of the screen. If the top of the file is on the screen, it will say --Top-- instead of --00%--. If the bottom of the text is on the screen, it will say --Bot--. If you are looking at text so small that all of it fits on the screen, the mode line says --All--. The stars near the front mean that you have made changes to the text. Right after you visit or save a file, that part of the mode line shows no stars, just dashes. The part of the mode line inside the parentheses is to tell you what editing modes you are in. The default mode is Fundamental which is what you are using now. It is an example of a "major mode". Emacs has many different major modes. Some of them are meant for editing different languages and/or kinds of text, such as Lisp mode, Text mode, etc. At any time one and only one major mode is active, and its name can always be found in the mode line just where "Fundamental" is now. Each major mode makes a few commands behave differently. For example, there are commands for creating comments in a program, and since each programming language has a different idea of what a comment should look like, each major mode has to insert comments differently. Each major mode is the name of an extended command, which is how you can switch to that mode. For example, M-x fundamental-mode is a command to switch to Fundamental mode. If you are going to be editing English text, such as this file, you should probably use Text Mode. >> Type M-x text-mode. Don't worry, none of the commands you have learned changes Emacs in any great way. But you can observe that M-f and M-b now treat apostrophes as part of words. Previously, in Fundamental mode, M-f and M-b treated apostrophes as word-separators. Major modes usually make subtle changes like that one: most commands do "the same job" in each major mode, but they work a little bit differently. To view documentation on your current major mode, type C-h m. >> Use C-u C-v once or more to bring this line near the top of screen. >> Type C-h m, to see how Text mode differs from Fundamental mode. >> Type q to remove the documentation from the screen. Major modes are called major because there are also minor modes. Minor modes are alternatives not to the major modes, just minor modifications of them. Each minor mode can be turned on or off by itself, independent of all other minor modes, and independent of your major mode. So you can use no minor modes, or one minor mode, or any combination of several minor modes. One minor mode which is very useful, especially for editing English text, is Auto Fill mode. When this mode is on, Emacs breaks the line in between words automatically whenever you insert text and make a line that is too wide. You can turn Auto Fill mode on by doing M-x auto-fill-mode. When the mode is on, you can turn it off by doing M-x auto-fill-mode. If the mode is off, this command turns it on, and if the mode is on, this command turns it off. We say that the command "toggles the mode". >> Type M-x auto-fill-mode now. Then insert a line of "asdf " over again until you see it divide into two lines. You must put in spaces between them because Auto Fill breaks lines only at spaces. The margin is usually set at 70 characters, but you can change it with the C-x f command. You should give the margin setting you want as a numeric argument. >> Type C-x f with an argument of 20. (C-u 2 0 C-x f). Then type in some text and see Emacs fill lines of 20 characters with it. Then set the margin back to 70 using C-x f again. If you makes changes in the middle of a paragraph, Auto Fill mode does not re-fill it for you. To re-fill the paragraph, type M-q (Meta-q) with the cursor inside that paragraph. >> Move the cursor into the previous paragraph and type M-q. * SEARCHING ----------- Emacs can do searches for strings (these are groups of contiguous characters or words) either forward through the text or backward through it. Searching for a string is a cursor motion command; it moves the cursor to the next place where that string appears. The Emacs search command is different from the search commands of most editors, in that it is "incremental". This means that the search happens while you type in the string to search for. The command to initiate a search is C-s for forward search, and C-r for reverse search. BUT WAIT! Don't try them now. When you type C-s you'll notice that the string "I-search" appears as a prompt in the echo area. This tells you that Emacs is in what is called an incremental search waiting for you to type the thing that you want to search for. terminates a search. >> Now type C-s to start a search. SLOWLY, one letter at a time, type the word 'cursor', pausing after you type each character to notice what happens to the cursor. Now you have searched for "cursor", once. >> Type C-s again, to search for the next occurrence of "cursor". >> Now type four times and see how the cursor moves. >> Type to terminate the search. Did you see what happened? Emacs, in an incremental search, tries to go to the occurrence of the string that you've typed out so far, highlighting it for your convenience. To go to the next occurrence of 'cursor' just type C-s again. If no such occurrence exists Emacs beeps and tells you the search is currently "failing", C-g would also terminate the search. NOTE: On some systems, typing C-s will freeze the screen and you will see no further output from Emacs. This indicates that an operating system "feature" called "flow control" is intercepting the C-s and not letting it get through to Emacs. To unfreeze the screen, type C-q. Then see the section "Spontaneous Entry to Incremental Search" in the Emacs manual for advice on dealing with this "feature". If you are in the middle of an incremental search and type , you'll notice that the last character in the search string is erased and the search backs up to the last place of the search. For instance, suppose you have typed "c", to search for the first occurrence of "c". Now if you type "u", the cursor will move to the first occurrence of "cu". Now type . This erases the "u" from the search string, and the cursor moves back to the first occurrence of "c". If you are in the middle of a search and type a control or meta character (with a few exceptions--characters that are special in a search, such as C-s and C-r), the search is terminated. The C-s starts a search that looks for any occurrence of the search string AFTER the current cursor position. If you want to search for something earlier in the text, type C-r instead. Everything that we have said about C-s also applies to C-r, except that the direction of the search is reversed. * MULTIPLE WINDOWS ------------------ One of the nice features of Emacs is that you can display more than one window on the screen at the same time. >> Move the cursor to this line and type C-u 0 C-l. >> Now type C-x 2 which splits the screen into two windows. Both windows display this tutorial. The cursor stays in the top window. >> Type C-M-v to scroll the bottom window. (If you do not have a real Meta key, type ESC C-v.) >> Type C-x o ("o" for "other") to move the cursor to the bottom window. >> Use C-v and M-v in the bottom window to scroll it. Keep reading these directions in the top window. >> Type C-x o again to move the cursor back to the top window. The cursor in the top window is just where it was before. You can keep using C-x o to switch between the windows. Each window has its own cursor position, but only one window actually shows the cursor. All the ordinary editing commands apply to the window that the cursor is in. We call this the "selected window". The command C-M-v is very useful when you are editing text in one window and using the other window just for reference. You can keep the cursor always in the window where you are editing, and advance through the other window sequentially with C-M-v. C-M-v is an example of a CONTROL-META character. If you have a real META key, you can type C-M-v by holding down both CTRL and META while typing v. It does not matter whether CTRL or META "comes first," because both of these keys act by modifying the characters you type. If you do not have a real META key, and you use ESC instead, the order does matter: you must type ESC followed by CTRL-v; CTRL-ESC v will not work. This is because ESC is a character in its own right, not a modifier key. >> Type C-x 1 (in the top window) to get rid of the bottom window. (If you had typed C-x 1 in the bottom window, that would get rid of the top one. Think of this command as "Keep just one window--the window I am already in.") You do not have to display the same buffer in both windows. If you use C-x C-f to find a file in one window, the other window does not change. You can find a file in each window independently. Here is another way to use two windows to display two different things: >> Type C-x 4 C-f followed by the name of one of your files. End with . See the specified file appear in the bottom window. The cursor goes there, too. >> Type C-x o to go back to the top window, and C-x 1 to delete the bottom window. * RECURSIVE EDITING LEVELS -------------------------- Sometimes you will get into what is called a "recursive editing level". This is indicated by square brackets in the mode line, surrounding the parentheses around the major mode name. For example, you might see [(Fundamental)] instead of (Fundamental). To get out of the recursive editing level, type ESC ESC ESC. That is an all-purpose "get out" command. You can also use it for eliminating extra windows, and getting out of the minibuffer. >> Type M-x to get into a minibuffer; then type ESC ESC ESC to get out. You cannot use C-g to get out of a recursive editing level. This is because C-g is used for canceling commands and arguments WITHIN the recursive editing level. * GETTING MORE HELP ------------------- In this tutorial we have tried to supply just enough information to get you started using Emacs. There is so much available in Emacs that it would be impossible to explain it all here. However, you may want to learn more about Emacs since it has many other useful features. Emacs provides commands for reading documentation about Emacs commands. These "help" commands all start with the character Control-h, which is called "the Help character". To use the Help features, type the C-h character, and then a character saying what kind of help you want. If you are REALLY lost, type C-h ? and Emacs will tell you what kinds of help it can give. If you have typed C-h and decide you do not want any help, just type C-g to cancel it. (Some sites rebind the character C-h. They really should not do this as a blanket measure, so complain to the system administrator. Meanwhile, if C-h does not display a message about help at the bottom of the screen, try typing M-x help RET instead.) The most basic HELP feature is C-h c. Type C-h, a c, and a command character or sequence, and Emacs displays a very brief description of the command. >> Type C-h c Control-p. The message should be something like C-p runs the command previous-line This tells you the "name of the function". Function names are used mainly for customizing and extending Emacs. But since function names are chosen to indicate what the command does, they can serve also as very brief documentation--sufficient to remind you of commands you have already learned. Multi-character commands such as C-x C-s and (if you have no META or EDIT or ALT key) v are also allowed after C-h c. To get more information about a command, use C-h k instead of C-h c. >> Type C-h k Control-p. This displays the documentation of the function, as well as its name, in an Emacs window. When you are finished reading the output, type q to get rid of the help text. Here are some other useful C-h options: C-h f Describe a function. You type in the name of the function. >> Try typing C-h f previous-line. This prints all the information Emacs has about the function which implements the C-p command. C-h a Hyper Apropos. Type in a keyword and Emacs will list all the functions and variables whose names contain that keyword. The commands that can be invoked with Meta-x, an asterisk will be displayed to the left. >> Type C-h a newline. This displays a list of all functions and variables with "newline" in their names. Press or click the middle mouse button to find out more about a function or variable. Type `q' to exit hyper-apropos. * CONCLUSION ------------ Remember, to exit Emacs permanently use C-x C-c. To exit to a shell temporarily, so that you can come back in, use C-z. (under X, this iconifies the current Emacs frame.) This tutorial is meant to be understandable to all new users, so if you found something unclear, don't sit and blame yourself - complain! COPYING ------- This tutorial descends from a long line of Emacs tutorials starting with the one written by Stuart Cracraft for the original Emacs. Ben Wing updated the tutorial for X Windows. Martin Buchholz and Hrvoje Niksic added more corrections for XEmacs. This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: Copyright (c) 1985, 1996 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. The conditions for copying Emacs itself are more complex, but in the same spirit. Please read the file COPYING and then do give copies of GNU Emacs to your friends. Help stamp out software obstructionism ("ownership") by using, writing, and sharing free software! xemacs-21.4.22/etc/TUTORIAL.cs0000644000175000017500000012423510343736276013627 0ustar acsacsCopyright (c) 1985 Free Software Foundation, Inc; podmínky viz na konci. Do èe¹tiny pøelo¾il Milan Zamazal . Máte pøed sebou tutoriál k Emacsu. Pøíkazy Emacsu obecnì vyu¾ívají klávesu CONTROL (obèas oznaèovanou CTRL nebo CTL) nebo klávesu META (obèas oznaèovanou EDIT nebo ALT). Abychom tyto názvy nemuseli stále psát v plném znìní, budeme pou¾ívat následující zkratky: C- znamená pøidr¾et klávesu CONTROL a stisknout znak . Tedy C-f znamená: pøidr¾te klávesu CONTROL a stisknìte f. M- znamená pøidr¾et klávesu META, EDIT nebo ALT a stisknout . Pokud ¾ádnou z kláves META, EDIT ani ALT nemáte, tak místo toho stisknìte a pus»te klávesu ESC a poté . Klávesu ESC budeme znaèit . Dùle¾itá poznámka: práci s Emacsem ukonèíte stiskem C-x C-c (dva znaky). Znaky ">>" na levém okraji znaèí místa, kde si máte vyzkou¹et pøíkaz. Napøíklad: <> >> Nyní stisknìte C-v (view next screen) pro posun na dal¹í obrazovku. (Smìle do toho, proveïte to pøidr¾ením klávesy CONTROL a stiskem v.) Od této chvíle byste toto mìli provádìt kdykoliv doètete zobrazenou obrazovku. V¹imnìte si, ¾e pøi posuvu obrazovek v¾dy zùstávají zobrazeny dva øádky z pøedchozí obrazovky; to poskytuje urèitou návaznost pøi postupném ètení textu. První vìc, kterou potøebujete vìdìt, je jak se v textu pohybovat z jednoho místa na druhé. U¾ víte, jak se posunout o jednu obrazovku vpøed, pomocí C-v. K pøechodu o obrazovku zpìt pou¾ijte M-v (pøidr¾te klávesu META a stisknìte v nebo stisknìte v, jestli¾e nemáte ¾ádnou z kláves META, EDIT nebo ALT). >> Zkuste stisknout M-v a pak C-v, nìkolikrát to zopakujte. * SHRNUTÍ --------- K prohlí¾ení obrazovkových stránek jsou u¾iteèné následující pøíkazy: C-v Posun o obrazovku vpøed M-v Posun o obrazovku zpìt C-l Smazání obrazovky a znovuzobrazení celého textu, pøitom se text pod kurzorem pøesune ke støedu obrazovky. (Jedná se o CONTROL-L a ne CONTROL-1.) >> Najdìte kurzor a zapamatujte si, jaký text je kolem nìj. Pak stisknìte C-l. Najdìte kurzor znovu a v¹imnìte si, ¾e je kolem nìj tentý¾ text. * ZÁKLADNÍ OVLÁDÁNÍ KURZORU --------------------------- Pohyb mezi obrazovkami je u¾iteèný, ale jak se pøemístíte na konkrétní místo v textu na obrazovce? Je toho mo¾no dosáhnout nìkolika zpùsoby. Nejzákladnìj¹ím zpùsobem je pou¾ití pøíkazù C-p, C-b, C-f a C-n. Ka¾dý z tìchto pøíkazù pøesune kurzor na obrazovce o jeden øádek nebo sloupec v daném smìru. Zde je tabulka znázoròující smìr posuvu kurzoru vyvolaný tìmito ètyømi pøíkazy: Pøedchozí øádek, C-p : : Dozadu, C-b .... Momentální pozice kurzoru .... Dopøedu, C-f : : Následující øádek, C-n >> Pøesuòte kurzor na prostøední øádek tohoto diagramu pomocí C-n nebo C-p. Potom stisknìte C-l, abyste na obrazovce vidìli celý diagram vycentrován. Pravdìpodobnì se vám budou tyto pøíkazy snadno pamatovat podle poèáteèních písmen anglických názvù: P jako previous (pøedchozí), N jako next (následující), B jako backward (zpìt), F jako forward (vpøed). Jsou to základní pøíkazy pro pohyb kurzoru a budete je pou¾ívat neustále, tak¾e by bylo velmi vhodné, kdybyste se je teï nauèili. >> Proveïte nìkolikrát C-n, abyste kurzor pøesunuli na tento øádek. >> Posuòte kurzor dovnitø øádku pomocí nìkolika C-f a pak nahoru stiskem C-p. Pozorujte, co C-p dìlá, kdy¾ je kurzor uprostøed øádku. Ka¾dý øádek textu konèí znakem nového øádku, který jej oddìluje od øádku následujícího. Znakem nového øádku by mìl být ukonèen i poslední øádek souboru (pøesto¾e to Emacs nevy¾aduje). >> Vyzkou¹ejte C-b na zaèátku øádku. Kurzor by se mìl pøesunout na konec pøedchozího øádku, nebo» jej tím pøesunete pøes znak nového øádku. C-f funguje analogicky jako C-b, tj. na konci øádku dojde k pøesunu na dal¹í øádek. >> Proveïte nìkolik C-b, tak¾e uvidíte, kde se nachází kurzor. Pak provádìjte C-f, abyste se vrátili na konec øádku. Pak proveïte je¹tì jednou C-f, abyste se pøesunuli na následující øádek. Kdy¾ kurzorem pøejdete pøes horní nebo dolní okraj obrazovky, posune se text za pøíslu¹ným okrajem na obrazovku. Tato vlastnost se nazývá "scrollování". Umo¾òuje pøemístit kurzor na libovolné místo v textu, ani¾ by kurzor opustil obrazovku. >> Zkuste posunout kurzor pod dolní okraj obrazovky pomocí C-n a pozorujte, co se stane. Jestli¾e je posun po znacích pøíli¹ pomalý, mù¾ete se pohybovat po slovech. M-f (META-f) provádí posun o slovo vpøed a M-b provádí posun o slovo zpìt. >> Stisknìte nìkolikrát M-f a M-b. Pokud se kurzor nachází uprostøed slova, M-f provede pøesun na konec tohoto slova. Nachází-li se kurzor v mezeøe mezi slovy, M-f provede pøesun na konec následujícího slova. M-b pracuje analogicky v opaèném smìru. >> Stisknìte nìkolikrát M-f a M-b prolo¾enì s C-f a C-b, abyste vidìli výsledky pøíkazù M-f a M-b provádìných z rùzných míst uvnitø slov a mezi nimi. V¹imnìte si analogie mezi C-f a C-b na jedné stranì a M-f a M-b na stranì druhé. Znaky s klávesou META jsou velmi èasto vyu¾ívány pro operace vztahující se k entitám definovaným jazykem (slova, vìty, odstavce), zatímco znaky s klávesou CONTROL pracují na základních prvcích nezávislých na tom, co zrovna editujete (znaky, øádky, apod.). Tato analogie platí také pro øádky a vìty: C-a a C-e provádí pøesun na zaèátek a konec øádku, M-a a M-e provádí pøesun na zaèátek a konec vìty. >> Zkuste nìkolikrát C-a a poté nìkolikrát C-e. Zkuste nìkolikrát M-a a poté nìkolikrát M-e. V¹imnìte si, ¾e opakované C-a nedìlá nic, zatímco opakované M-a v¾dy provádí posun o dal¹í vìtu. Principu analogie to sice pøíli¹ neodpovídá, ale pøesto je toto chování mo¾no pova¾ovat za pøirozené. Pozice kurzoru v textu se také nazývá "bod" ("point"). Abychom to parafrázovali, kurzor je vidìt na obrazovce v místì, kde je bod umístìn v textu. Zde je pøehled jednoduchých operací pro pohyb kurzoru vèetnì pøíkazù pro pohyb mezi slovy a vìtami: C-f Pøesun o znak vpøed C-b Pøesun o znak zpìt M-f Pøesun o slovo vpøed M-b Pøesun o slovo zpìt C-n Pøesun na následující øádek C-p Pøesun na pøedchozí øádek C-a Pøesun na zaèátek øádku C-e Pøesun na konec øádku M-a Pøesun zpìt na zaèátek vìty M-e Pøesun vpøed na konec vìty >> Vyzkou¹ejte si teï nìkolikrát v¹echny tyto pøíkazy pro procvièení. Jsou to nejpou¾ívanìj¹í pøíkazy. Dal¹í dva dùle¾ité pøíkazy pro pohyb kurzoru jsou M-< (META men¹í-ne¾), který provede pøesun na zaèátek celého textu, a M-> (META vìt¹í-ne¾), který provede pøesun na konec celého textu. Na vìt¹inì terminálù je "<" nad èárkou, tak¾e pro vyvolání tohoto znaku musíte pou¾ít klávesu Shift. Na tìchto terminálech je tedy nutno pou¾ít klávesu Shift i v pøípadì pøíkazu M-<; bez klávesy Shift byste provedli M-èárka. >> Zkuste teï M-< pro pøesun na zaèátek tutoriálu. Pou¾ijte pak opakovanì C-v, abyste se opìt vrátili sem. >> Zkuste teï M-> pro pøesun na konec tutoriálu. Pou¾ijte pak opakovanì M-v, abyste se opìt vrátili sem. Kurzor mù¾ete pøesouvat také pomocí kurzorových kláves (klávesy se ¹ipkami), pokud je vá¹ terminál má. My v¹ak doporuèujeme nauèit se C-b, C-f, C-n a C-p, a to ze tøí dùvodù. Za prvé, tyto klávesy fungují na v¹ech typech terminálù. Za druhé, jakmile jednou získáte cvik v pou¾ívání Emacsu, zjistíte, ¾e pou¾ívání tìchto CTRL znakù je rychlej¹í ne¾ pou¾ívání kurzorových kláves (proto¾e nemusíte pøesouvat ruku z psací pozice). Za tøetí, zvyknete-li si pou¾ívat tyto CTRL-znak pøíkazy, snadno se nauèíte pou¾ívat jiné pokroèilé pøíkazy pro pohyb kurzoru. Vìt¹ina pøíkazù Emacsu akceptuje numerický argument; ten pro vìt¹inu pøíkazù slou¾í jako opakovaè. Poèet opakování pøíkazu zadáte prostøednictvím stisku C-u následovaného stiskem pøíslu¹ných èíslic pøed vyvoláním pøíkazu. Máte-li META (nebo EDIT èi ALT) klávesu, existuje alternativní mo¾nost zadání numerického argumentu: pøidr¾te klávesu META a stisknìte pøíslu¹né èíslice. Doporuèujeme nauèit se C-u metodu, proto¾e ta funguje na jakémkoliv terminálu. Napøíklad C-u 8 C-f provede pøesun o osm znakù vpøed. Vìt¹ina pøíkazù pou¾ívá numerický argument jako opakovaè. Jisté výjimeèné pøíkazy jej pou¾ívají jiným zpùsobem. Mezi tyto výjimky patøí C-v a M-v. Dostanou-li numerický argument, posunou obrazovku nahoru nebo dolù o odpovídající poèet øádkù místo obrazovek. Napøíklad C-u 4 C-v posune obrazovku o 4 øádky. >> Zkuste teï stisknout C-u 8 C-v. To by mìlo posunout obrazovku o 8 øádkù nahoru. Pokud byste ji chtìli posunout zpìt dolù, mù¾ete dát argument pøíkazu M-v. Pou¾íváte-li X Window, mìli byste mít na levé stranì emacsového okna vysokou obdélníkovou oblast, nazývanou scrollbar. Mù¾ete pak text posouvat klikáním my¹í na scrollbar. >> Zkuste stisknout prostøední tlaèítko na vrcholu zvýraznìné oblasti uvnitø scrollbaru. To by mìlo text posunout na pozici danou tím, jak vysoko nebo nízko jste kliknuli. >> Zkuste pøi stisknutém prostøedním tlaèítku posouvat my¹í nahoru a dolù. Uvidíte, jak se text posouvá nahoru a dolù podle toho, jak posouváte my¹í. * KDY® EMACS NEREAGUJE ---------------------- Jestli¾e Emacs pøestane reagovat na va¹e pøíkazy, mù¾ete probíhající èinnost bezpeènì zastavit pomocí C-g. Pomocí C-g mù¾ete zastavit pøíkaz, jeho¾ provádìní trvá pøíli¹ dlouho. C-g mù¾ete pou¾ít také pro odstranìní numerického argumentu pøíkazu, který nechcete dokonèit. >> Stisknìte C-u 100 pro vytvoøení numerického argumentu 100 a pak stisknìte C-g. Nyní stisknìte C-f. Mìl by být proveden posun o právì jeden znak, proto¾e jste argument zru¹ili prostøednictvím C-g. Pokud jste omylem stiskli , mù¾ete se jej zbavit pomocí C-g. * DEAKTIVOVANÉ PØÍKAZY ---------------------- Nìkteré pøíkazy Emacsu jsou "deaktivované" ("disabled"), aby je zaèínající u¾ivatelé nemohli vyvolat náhodnì. Pokud vyvoláte nìkterý z deaktivovaných pøíkazù, Emacs zobrazí hlá¹ení oznamující, který pøíkaz to byl, s dotazem, zda chcete tento pøíkaz provést. Pokud opravdu chcete pøíkaz vyzkou¹et, stisknìte mezerník jako odpovìï na tuto otázku. Obyèejnì, jestli¾e nechcete deaktivovaný pøíkaz provést, odpovìzte na tuto otázku pomocí "n". >> Stisknìte : (co¾ je deaktivovaný pøíkaz), pak na otázku odpovìzte n. * OKNA ------ Emacs mù¾e mít nìkolik oken (windows), z nich¾ ka¾dé zobrazuje svùj vlastní text. Jak více oken pou¾ívat, objasníme pozdìji. Nyní chceme objasnit, jak se zbavit nadbyteèných oken a vrátit se do základní jednookenní editace. Je to jednoduché: C-x 1 Jedno okno (tj. zru¹ení v¹ech ostatních oken) Tedy vlo¾ení CONTROL-x následované èíslicí 1. C-x 1 roz¹íøí okno obsahující kurzor pøes celou obrazovku. Zru¹í to v¹echna ostatní okna. >> Stisknìte C-h k C-f. Pozorujte, jak se aktuální okno zmen¹í a objeví se nové okno za úèelem zobrazení dokumentace k pøíkazu C-f. >> Stisknìte C-x 1 a pozorujte, jak okno s dokumentací zmizí. * VKLÁDÁNÍ A MAZÁNÍ ------------------- Chcete-li vlo¾it text, prostì jej napi¹te. Znaky, které vidíte, jako A, 7, *, atd., jsou Emacsem chápány jako text a vkládány okam¾itì. Pro vlo¾ení znaku nového øádku stisknìte (klávesu Enter). Poslední znak, který jste napsali, mù¾ete smazat stiskem . je klávesa, která mù¾e být na klávesnici oznaèena "Del". V nìkterých pøípadech jako slou¾í klávesa "Backspace", av¹ak ne v¾dy! Obecnìji, ma¾e znak bezprostøednì pøed momentální pozicí kurzoru. >> Proveïte to teï -- napi¹te nìkolik znakù a pak je sma¾te nìkolika stisky . Nebojte se zmìn v tomto souboru; originální tutoriál se nezmìní. Toto je va¹e osobní kopie. Kdy¾ se øádek textu zvìt¹í natolik, ¾e pøesáhne jeden øádek obrazovky, je zobrazen na více øádcích obrazovky. Øádek textu, který pokraèuje na dal¹ím øádku obrazovky, je indikován zpìtným lomítkem ("\") na pravém okraji obrazovky. >> Vkládejte text, a¾ dosáhnete pravého okraje, a pokraèujte ve vkládání. Objeví se vám pokraèovací øádek. >> Pou¾ijte pro smazání textu, a¾ se øádek textu opìt vejde na jeden øádek obrazovky. Pokraèovací øádek zmizí. Znak nového øádku mù¾ete smazat jako kterýkoliv jiný znak. Smazání znaku nového øádku mezi dvìma øádky zpùsobí jejich spojení do jediného øádku. Je-li výsledný øádek pøíli¹ dlouhý na to, aby se ve¹el na ¹íøku obrazovky, bude zobrazen pokraèovacím øádkem. >> Pøesuòte kurzor na zaèátek øádku a stisknìte . To tento øádek spojí s øádkem pøedchozím. >> Stisknìte pro znovuvlo¾ení smazaného znaku nového øádku. Vzpomeòte si, ¾e vìt¹ina pøíkazù Emacsu mù¾e dostat poèet opakování; vèetnì textových znakù. Opakování textových znakù je vlo¾í nìkolikrát. >> Vyzkou¹ejte si to teï -- stisknìte C-u 8 * pro vlo¾ení ********. Teï u¾ znáte nejzákladnìj¹í zpùsoby, jak nìco v Emacsu napsat a jak opravovat chyby. Mù¾ete ov¹em také mazat po slovech nebo po øádcích. Zde je shrnutí operací pro mazání textu: Smazání znaku bezprostøednì pøed kurzorem C-d Smazání znaku následujícího za kurzorem M- Zru¹ení slova bezprostøednì pøed kurzorem M-d Zru¹ení slova následujícího za kurzorem C-k Zru¹ení textu od pozice kurzoru do konce øádku M-k Zru¹ení textu do konce aktuální vìty V¹imnìte si, ¾e a C-d, resp. M- a M-d, roz¹iøují paralelu zapoèatou C-f a M-f (pravda, opravdu není CONTROL znak, ale netrapme se tím). C-k a M-k jsou jako C-e a M-e ve smyslu vztahu øádkù k vìtám. Libovolnou èást bufferu mù¾ete té¾ zru¹it následující metodou. Pøesuòte se na jeden konec této èásti a stisknìte C-@ nebo C-SPC (libovolnou z tìchto kombinací). (SPC oznaèuje mezerník.) Pøesuòte se na druhý konec této èásti a stisknìte C-w. Text mezi tìmito pozicemi bude zru¹en. >> Pøesuòte kurzor na písmeno L na zaèátku pøedchozího odstavce. >> Stisknìte C-SPC. Emacs by mìl ve spodním øádku obrazovky zobrazit zprávu "Mark set". >> Pøesuòte kurzor na písmeno c ve slovì "konec" na druhém øádku odstavce. >> Stisknìte C-w. Text zaèínající písmenem L a konèící pøed písmenem c bude zru¹en. Uvìdomte si, ¾e rozdíl mezi "ru¹ením" ("killing") a "mazáním" ("deleting") je ten, ¾e "zru¹ené" vìci mohou být zpìt vhozeny, zatímco "smazané" nikoliv. Obecnì pøíkazy, které mohou smazat vìt¹í mno¾ství textu, ukládají text, zatímco pøíkazy, které ma¾ou jediný znak nebo pouze prázdné øádky a mezery, mazaný text neukládají. >> Pøesuòte kurzor na zaèátek neprázdného øádku. Pak stisknìte C-k pro zru¹ení textu na tomto øádku. >> Stisknìte C-k podruhé. Uvidíte, ¾e to zru¹í znak nového øádku, který je za tímto øádkem. V¹imnìte si, ¾e jedno C-k zru¹í obsah øádku a druhé C-k zru¹í øádek samotný a posune v¹echny dal¹í øádky nahoru. C-k zpracovává numerický argument speciálnì: zru¹í odpovídající poèet øádkù VÈETNÌ jejich obsahu. To u¾ není opakování. C-u 2 C-k zru¹í dva øádky a jejich obsah; dvojitý stisk C-k by toto obvykle neudìlal. Vracení textu zpìt se nazývá "vhazování" ("yanking"). (Pøedstavte si opìtovné vhazování, vracení døíve odstranìného textu zpátky.) Zru¹ený text mù¾ete vhodit buï na stejné místo, kde byl zru¹en, nebo na jiné místo v bufferu, nebo dokonce i do jiného souboru. Text mù¾ete vhodit i vícekrát, vytváøíte tak jeho dal¹í kopie. Pøíkazem pro vhazování je C-y. Tento pøíkaz vlo¾í poslední smazaný text na pozici, na které se nachází kurzor. >> Zkuste to; stisknìte C-y pro vhození textu zpìt. Stisknete-li nìkolikrát C-k po sobì, v¹echen smazaný text je ulo¾en spoleènì tak, aby bylo mo¾né vhodit zpìt v¹echny øádky najednou. >> Stisknìte nìkolikrát C-k. Nyní obnovte poslednì zru¹ený text: >> Stisknìte C-y. Pak posuòte kurzor o nìkolik øádkù ní¾e a stisknìte C-y znova. Nyní vidíte, jak lze text kopírovat. Co kdy¾ máte nìjaký text, který byste rádi vhodili zpìt a pak zru¹íte nìco jiného? C-y by vlo¾ilo poslední zru¹ený text. Av¹ak pøedchozí text není ztracen. Mù¾ete jej získat zpìt pou¾itím pøíkazu M-y. Poté, co provedete C-y pro získání posledního zru¹eného textu, stisk M-y vymìní tento vhozený text za pøedchozí zru¹ený text. Dal¹ími a dal¹ími stisky M-y dostáváte pøedcházející a pøedcházející zru¹ené texty. Kdy¾ dosáhnete textu, který hledáte, nemusíte s ním pro jeho uchování nic dal¹ího provádìt. Jednodu¹e vhozený text ponechejte, kde je, a pokraèujte v editaci. Pokud opakujete M-y dostateènì dlouho, dostanete se zpátky k výchozímu bodu (poslednì zru¹enému textu). >> Zru¹te øádek, pøesuòte kurzor nìkam jinam a zru¹te jiný øádek. Pak proveïte C-y pro vrácení druhého zru¹eného øádku. Pak proveïte M-y a vhozený øádek bude nahrazen prvním zru¹eným øádkem. Opakujte M-y a pozorujte, co dostáváte. Pokraèujte v tom, dokud se znovu neobjeví druhý zru¹ený øádek a pak nìkolik dal¹ích. Chcete-li, mù¾ete zkusit pøedat M-y kladné a záporné argumenty. * UNDO ------ Jestli¾e provedete v textu zmìnu a pak zjistíte, ¾e to byl omyl, mù¾ete zmìnu vrátit pøíkazem undo, C-x u. C-x u obvykle vrátí zmìny provedené jedním pøíkazem; pokud C-x u zopakujete nìkolikrát za sebou, ka¾dé opakování vrátí jeden dal¹í pøíkaz. Jsou ale dvì výjimky: pøíkazy, které nemìní text, se nepoèítají (to zahrnuje pøíkazy pro pohyb kurzoru a scrollování) a znaky vkládající samy sebe jsou obvykle zpracovávány ve skupinách a¾ po 20. (To je kvùli tomu, aby se zredukoval poèet C-x u nutných pro vrácení vkládaného textu.) >> Zru¹te tento øádek pomocí C-k, stisknìte pak C-x u a øádek by se mìl znovu objevit. Alternativní undo pøíkaz je C-_; pracuje stejnì jako C-x u, je v¹ak ménì pracné jej aplikovat nìkolikrát za sebou. Nevýhodou C-_ je, ¾e na nìkterých klávesnicích není zøejmé, jak jej vyvolat. To je dùvod, proè nabízíme i C-x u. Na nìkterých terminálech mù¾ete C-_ vyvolat stiskem / pøi stisknutém CTRL. Numerický argument pro C-_ a C-x u funguje jako poèet opakování. Pomocí pøíkazu undo mù¾ete vrátit zru¹ený stejnì jako smazaný text. Rozdíl mezi mazáním a ru¹ením textu ovlivòuje mo¾nost vhození tohoto textu pomocí C-y, neovlivòuje mo¾nosti pøíkazu undo. * SOUBORY --------- Aby text, který editujete, zùstal trvale uchován, musíte jej ulo¾it do souboru. Jinak by byl po ukonèení Emacsu ztracen. Svoji editaci spojíte se souborem "vyhledáním" ("finding") souboru. (Také se to nazývá "nav¹tívení" ("visiting") souboru.) Vyhledání souboru znamená, ¾e vidíte jeho obsah v Emacsu. V mnoha ohledech je to, jako byste editovali pøímo ten soubor. Nicménì zmìny, které prostøednictvím Emacsu èiníte, se nestanou trvalými, dokud tyto zmìny do souboru "neulo¾íte" ("save"). Tím se zamezí nechtìnému ponechání èásteènì zmìnìného souboru v systému. Dokonce i kdy¾ soubor ulo¾íte, Emacs uchová pùvodní soubor pod zmìnìným názvem pro pøípad, ¾e byste zjistili, ¾e va¹e úpravy byly chybné. Kdy¾ se podíváte do dolní èásti obrazovky, uvidíte øádek, který zaèíná a konèí pomlèkami a na zaèátku má "2J:-- TUTORIAL.cs" nebo nìco podobného. Tato èást obrazovky obvykle obsahuje jméno souboru, který je právì nav¹tíven. Zrovna teï máte nav¹tíven soubor nazvaný "TUTORIAL.cs", který je va¹í osobní èmárací kopií tutoriálu Emacsu. Kdy¾ v Emacsu vyhledáte soubor, jeho jméno se objeví pøesnì na tom místì. Pøíkazy pro vyhledávání a ukládání souborù se na rozdíl od ostatních pøíkazù, které jste se zatím nauèili, skládají ze dvou znakù. Oba zaèínají znakem CONTROL-x. Existuje celá øada pøíkazù zaèínajících na CONTROL-x; mnoho z nich pracuje se soubory, buffery a podobnými vìcmi. Tyto pøíkazy jsou dlouhé dva, tøi nebo ètyøi znaky. Dal¹í vìcí ohlednì pøíkazu pro vyhledání souboru je to, ¾e musíte øíct, které jméno souboru chcete. Øíkáme, ¾e pøíkaz "ète argument z terminálu" (v tomto pøípadì je argumentem jméno souboru). Poté co vyvoláte pøíkaz C-x C-f Vyhledání souboru Emacs se vás zeptá na jméno souboru. Jméno souboru, které pí¹ete, se objevuje ve spodním øádku obrazovky, který se v této situaci nazývá minibuffer. Pro editaci jména souboru mù¾ete pou¾ívat obvyklé editaèní pøíkazy Emacsu. Zadávání jména souboru (obecnì kterýkoliv vstup z minibufferu) mù¾ete zru¹it pøíkazem C-g. >> Stisknìte C-x C-f a pak C-g. To minibuffer zru¹í a takté¾ to zru¹í pøíkaz C-x C-f, který minibuffer pou¾il. Tak¾e nevyhledáte ¾ádný soubor. Po napsání jména souboru stisknìte . Pøíkaz C-x C-f pak zaène pracovat a vyhledá soubor, který jste zvolili. Po skonèení pøíkazu C-x C-f minibuffer zmizí. Po malé chvilce se obsah souboru objeví na obrazovce a mù¾ete jej editovat. Kdy¾ chcete zmìny trvale ulo¾it, pou¾ijte pøíkaz C-x C-s Ulo¾ení souboru To zkopíruje text z Emacsu do souboru. Kdy¾ to provedete poprvé, Emacs pøejmenuje pùvodní soubor na soubor s novým jménem, aby nebyl ztracen. Nové jméno je vytvoøeno pøidáním "~" na konec pùvodního jména souboru. Kdy¾ je ukládání dokonèeno, Emacs zobrazí jméno zapsaného souboru. Mìli byste ukládat rozumnì èasto, abyste neztratili pøíli¹ mnoho práce v pøípadì pádu systému. >> Stisknìte C-x C-s pro ulo¾ení va¹í kopie tutoriálu. Mìlo by to zobrazit "Wrote ...TUTORIAL.cs" ve spodním øádku obrazovky. POZNÁMKA: Na nìkterých systémech zpùsobí stisk C-x C-s ztuhnutí obrazovky a nevidíte ¾ádný dal¹í výstup z Emacsu. To znamená, ¾e "vlastnost" operaèního systému zvaná "flow control" zachycuje C-s a nepropustí jej k Emacsu. Pro odtuhnutí obrazovky stisknìte C-q. Pak v sekci "Spontaneous Entry to Incremental Search" v manuálu Emacsu vyhledejte radu, jak se vypoøádat s touto "vlastností". Existující soubor mù¾ete vyhledat, abyste jej mohli prohlí¾et nebo editovat. Mù¾ete také vyhledat soubor, který je¹tì neexistuje. To je zpùsob, jakým lze vytvoøit soubor v Emacsu: vyhledejte soubor, který bude na zaèátku prázdný a pak zaènìte vkládat text urèený pro tento soubor. Kdy¾ po¾ádáte o ulo¾ení, Emacs skuteènì vytvoøí soubor s textem, který jste vlo¾ili. Od té chvíle se pak mù¾ete cítit, jako kdybyste editovali ji¾ existující soubor. * BUFFERY --------- Jestli¾e vyhledáte pomocí C-x C-f druhý soubor, první soubor v Emacsu zùstává. Mù¾ete se do nìj zpìt pøepnout jeho opìtovným vyhledáním pomocí C-x C-f. Tímto zpùsobem mù¾ete do Emacsu dostat pomìrnì hodnì souborù. >> Vytvoøte soubor pojmenovaný "foo" stiskem C-x C-f foo . Potom vlo¾te nìjaký text, zeditujte jej a ulo¾te "foo" stiskem C-x C-s. Nakonec stisknìte C-x C-f TUTORIAL.cs , èím¾ se vrátíte zpìt do tutoriálu. Emacs ukládá text ka¾dého souboru do objektu nazývaného "buffer". Vyhledání souboru vytvoøí v Emacsu nový buffer. Chcete-li vidìt seznam bufferù, které momentálnì existují ve va¹em procesu Emacs, stisknìte: C-x C-b Seznam bufferù >> Zkuste teï C-x C-b. Podívejte se, ¾e ka¾dý buffer má v seznamu jméno a mù¾e tam mít také jméno souboru, jeho¾ text obsahuje. Nìkteré buffery neodpovídají souborùm. Napøíklad buffer pojmenovaný "*Buffer List*" nemá ¾ádný soubor. Je to buffer, který obsahuje seznam bufferù vytvoøený pomocí C-x C-b. JAKÝKOLIV text, který vidíte v emacsovém oknì, je v¾dy souèástí nìjakého bufferu. >> Stisknìte C-x 1, abyste se zbavili seznamu bufferù. Pokud provedete zmìny textu jednoho souboru a pak vyhledáte jiný soubor, nezpùsobí to ulo¾ení prvního souboru. Jeho zmìny zùstávají v Emacsu uchovány v jemu odpovídajícím bufferu. Vytvoøení a editace druhého souboru nemá ¾ádný vliv na buffer prvního souboru. To je velmi u¾iteèné, ale také to znamená, ¾e potøebujete vhodný zpùsob, jak ulo¾it buffer prvního souboru. Nutnost pøepnout se zpátky pomocí C-x C-f, aby jej bylo mo¾no ulo¾it prostøednictvím C-x C-s, by byla nemístnì obtì¾ující. Tak¾e máme C-x s Ulo¾ení nìkterých bufferù C-x s se vás zeptá na ka¾dý buffer, který obsahuje zmìny, které jste neulo¾ili. Pro ka¾dý takový buffer se vás zeptá, zda jej má ulo¾it. >> Vlo¾te øádek textu a pak stisknìte C-x s. Mìli byste být dotázáni, zda má být ulo¾en buffer nazvaný TUTORIAL.cs. Odpovìzte na tuto otázku ano (yes) stiskem "y". * ROZ©IØOVÁNÍ SADY PØÍKAZÙ -------------------------- Existuje mnohem, mnohem více pøíkazù Emacsu, ne¾ které by vùbec mohly být rozmístìny na v¹echny CONTROL a META znaky. Emacs tento problém obchází prostøednictvím X (eXtend) pøíkazu. Ten vzniká dvìma zpùsoby: C-x Znakový eXtend. Následován jedním znakem. M-x Pojmenovaný pøíkaz eXtend. Následován dlouhým názvem. To jsou pøíkazy, které jsou obecnì u¾iteèné, av¹ak ménì èasto pou¾ívané ne¾ ty, které jste se ji¾ nauèili. U¾ jste vidìli dva z nich: souborové pøíkazy C-x C-f pro vyhledání a C-x C-s pro ulo¾ení. Jiný pøíklad je pøíkaz pro ukonèení Emacsu -- tj. pøíkaz C-x C-c. (Nemìjte obavy o ztrátu zmìn, které jste provedli; C-x C-c nabídne ulo¾ení ka¾dého zmìnìného souboru, ne¾ Emacs ukonèí.) C-z je pøíkaz na *doèasné* opu¹tìní Emacsu -- mù¾ete se po nìm do spu¹tìného Emacsu vrátit. Na systémech, které to umo¾òují, C-z Emacs "pozastaví"; tzn. vrátí vás do shellu, av¹ak Emacs neukonèí. V nejbì¾nìj¹ích shellech se mù¾ete do Emacsu vrátit pøíkazem `fg' nebo pomocí `%emacs'. Na systémech, které pozastavování procesù nemají implementováno, C-z vytvoøí subshell bì¾ící pod Emacsem, aby vám dal ¹anci spustit jiné programy a pak se do Emacsu vrátit; neprovede tedy pravé opu¹tìní Emacsu. V tom pøípadì je obvyklou cestou návratu ze subshellu do Emacsu shellovský pøíkaz `exit'. Chvíle pro pou¾ití C-x C-c nastane, kdy¾ se chystáte odhlásit ze systému. Správné je to také pøi ukonèování Emacsu vyvolaného po¹tovním programem a rùznými jinými utilitami, proto¾e ty nemusí vìdìt, jak si poradit s pozastavením Emacsu. Nicménì za normálních okolností, pokud se nechystáte odlogovat, je lépe Emacs pozastavit pomocí C-z ne¾ jej ukonèit. Existuje mnoho C-x pøíkazù. Zde je seznam tìch, které jste se ji¾ nauèili: C-x C-f Vyhledání souboru C-x C-s Ulo¾ení soubor C-x C-b Seznam bufferù C-x C-c Ukonèení Emacsu C-x u Undo Pojmenované eXtended pøíkazy jsou pøíkazy, které jsou pou¾ívány je¹tì ménì, nebo pøíkazy, které jsou pou¾ívány jenom v jistých módech. Pøíkladem je pøíkaz replace-string, který globálnì nahradí jeden øetìzec jiným. Kdy¾ stisknete M-x, vypí¹e se na spodním øádku obrazovky prompt M-x a vy byste mìli zadat jméno pøíkazu; v tomto pøípadì "replace-string". Jednodu¹e napi¹te "repl s" a Emacs název doplní. Dokonèete zadávání jména pøíkazu pomocí . Pøíkaz replace-string vy¾aduje dva argumenty -- øetìzec, který má být nahrazen, a øetìzec, který jej má nahradit. Ka¾dý argument musíte ukonèit pomocí . >> Pøesuòte kurzor na prázdný øádek dva øádky pod tímto. Pak napi¹te M-x repl szmìnilmodifikoval. V¹imnìte si, jak se tento øádek zmìnil: nahradili jste slovo z-m-ì-n-i-l slovem "modifikoval", kdekoliv se za aktuální pozicí kurzoru vyskytlo. * AUTOMATICKÉ UKLÁDÁNÍ ---------------------- Jestli¾e jste provedli zmìny v souboru, ale nemáte je je¹tì ulo¾eny, mohou být v pøípadì pádu systému ztraceny. Aby vás Emacs od toho uchránil, periodicky zapisuje "auto save" soubor pro ka¾dý soubor, který editujete. Jméno auto save souboru má na zaèátku a na konci #; napøíklad jestli¾e se vá¹ soubor jmenuje "hello.c", jeho auto save soubor se jmenuje "#hello.c#". Kdy¾ soubor ulo¾íte normálním zpùsobem, Emacs auto save soubor sma¾e. Jestli¾e dojde k pádu systému, mù¾ete svoji editaci obnovit z auto-save souboru, a to normálním vyhledáním souboru (toho, který jste editovali, ne auto save souboru) a následnou aplikací M-x recover file. Na ¾ádost o potvrzení odpovìzte zadáním yes pro pokraèování a obnovení auto-save dat. * ECHO OBLAST ------------- Kdy¾ Emacs vidí, ¾e pí¹ete pøíkazy pomalu, ukazuje vám je ve spodní èásti obrazovky v oblasti nazývané "echo oblast". Echo oblast obsahuje dolní øádek obrazovky. * STAVOVÝ ØÁDEK --------------- Øádek bezprostøednì nad echo oblastí se nazývá "stavový øádek" ("mode line"). Stavový øádek øíká nìco jako: 2J:** TUTORIAL.cs (Fundamental)--L670--58%---------------- Tento øádek podává u¾iteènou informaci o stavu Emacsu a textu, který editujete. U¾ víte, co znamená jméno souboru -- je to soubor, který jste vyhledali. -NN%-- oznaèuje va¹i aktuální pozici v textu; øíká, ¾e NN procent textu je nad horním okrajem obrazovky. Je-li zaèátek souboru na obrazovce, je zde --Top-- a ne --00%--. Je-li konec textu na obrazovce, je zde --Bot--. Jestli¾e se díváte na tak malý text, ¾e se celý vejde na obrazovku, stavový øádek øíká --All--. Hvìzdièky poblí¾ zaèátku znamenají, ¾e jste text zmìnili. Tìsnì po vyhledání nebo ulo¾ení souboru v této èásti stavového øádku nejsou ¾ádné hvìzdièky, pouze pomlèky. Èást stavového øádku v závorkách øíká, v jakých editaèních módech se nacházíte. Implicitní mód je Fundamental, co¾ je ten, který momentálnì pou¾íváte. Je pøíkladem hlavního módu ("major mode"). Emacs má celou øadu hlavních módù. Nìkteré z nich jsou urèeny pro editaci rùzných programovacích jazykù a/nebo textù jako tøeba Lisp mód, Text mód, atd. V libovolném okam¾iku je aktivní právì jeden hlavní mód a jeho jméno lze nalézt ve stavovém øádku na místì, kde je teï "Fundamental". Ka¾dý hlavní mód mìní chování nìkterých pøíkazù. Napøíklad existují pøíkazy pro vytváøení komentáøù v programu, a proto¾e ka¾dý programovací programovací jazyk má jinou pøedstavu o tom, jak má komentáø vypadat, musí ka¾dý hlavní mód vkládat komentáøe jinak. Ka¾dý hlavní mód je vlastnì jméno extended pøíkazu, kterým se do tohoto módu mù¾ete pøepnout. Napøíklad M-x fundamental-mode je pøíkaz pro pøepnutí se do Fundamental módu. Chystáte-li se editovat èeský text, jako tøeba tento soubor, pravdìpodobnì byste mìli pou¾ít Text mód. >> Napi¹te M-x text-mode. Nebojte se, ¾ádný z pøíkazù, které jste se nauèili, chování Emacsu nijak významnì nezmìní. Mù¾ete si ale v¹imnout, ¾e M-f a M-b nyní pracují s apostrofy jako se souèástmi slov. Pøedtím, ve Fundamental módu, M-f a M-b pracovaly s apostrofy coby oddìlovaèi slov. Hlavní módy obvykle dìlají men¹í zmìny, jako byla tato: pøíkazy vìt¹inou dìlají "toté¾", ale v ka¾dém hlavním módu pracují tro¹ku jinak. Dokumentaci k aktuálnímu hlavnímu módu si mù¾ete zobrazit stiskem C-h m. >> Jednou nebo nìkolikrát pou¾ijte C-u C-v, abyste tento øádek dostali k vrcholu obrazovky. >> Stisknìte C-h m, abyste vidìli, jak se Text mód li¹í od Fundamental módu. >> Stisknìte C-x 1 pro odstranìní dokumentace z obrazovky. Hlavní módy se nazývají hlavní proto, ¾e také existují vedlej¹í módy (minor modes). Vedlej¹í módy nejsou alternativou k hlavním módùm, nýbr¾ jejich malé modifikace. Ka¾dý vedlej¹í mód mù¾e být zapnut nebo vypnut sám o sobì nezávisle na v¹ech ostatních vedlej¹ích módech a nezávisle na hlavním módu. Tak¾e nemusíte pou¾ívat ¾ádný vedlej¹í mód nebo mù¾ete pou¾ívat jeden vedlej¹í mód nebo libovolnou kombinaci nìkolika vedlej¹ích módù. Jedním z velmi u¾iteèných vedlej¹ích módù, zejména pro editaci èeských textù, je Auto Fill mód. Kdy¾ je tento mód zapnut, Emacs zalomí øádek mezi dvìma slovy, kdykoliv vkládáte text a øádek se stane pøíli¹ dlouhým. Auto Fill mód mù¾ete zapnout provedením M-x auto-fill-mode. Je-li tento mód zapnut, mù¾ete jej vypnout provedením M-x auto-fill-mode. Je-li mód vypnut, tento pøíkaz jej zapíná, a je-li mód zapnut, tak jej tento pøíkaz vypíná. Øíkáme, ¾e tento pøíkaz pøepíná ("toggles") tento mód. >> Napi¹te teï M-x auto-fill-mode. Pak vkládejte "asdf " stále dokola tak dlouho, a¾ uvidíte, jak se vkládaný øádek rozdìlí na dva øádky. Do textu musíte vkládat mezery proto, ¾e Auto Fill mód zalamuje øádky pouze v mezerách. Okraj je obvykle nastaven na 70 znakù, ale mù¾ete to zmìnit pøíkazem C-x f. Hodnotu okraje, kterou si pøejete, byste mìli pøedat jako numerický argument. >> Napi¹te C-x f s argumentem 20. (C-u 2 0 C-x f). Pak pi¹te nìjaký text a pozorujte, jak Emacs vyplòuje øádky po 20 znacích. Pak nastavte okraj zpátky na 70 opìtovným pou¾itím C-x f. Jestli¾e provedete zmìny uprostøed odstavce, Auto Fill mód jej nepøeformátuje. Pro pøeformátování odstavce stisknìte M-q (META-q) s kurzorem uvnitø odstavce. >> Pøesuòte kurzor do pøedchozího odstavce a stisknìte M-q. * VYHLEDÁVÁNÍ ------------- Emacs umí v textu vyhledávat øetìzce (tj. skupiny spojených znakù nebo slov) smìrem vpøed nebo vzad. Hledání øetìzce je pøíkaz pøesunující kurzor; pøesune kurzor na nejbli¾¹í místo, kde se tento øetìzec nachází. Vyhledávací pøíkaz Emacsu se li¹í od vyhledávacích pøíkazù vìt¹iny editorù v tom smyslu, ¾e je "inkrementální". To znamená, ¾e vyhledávání se provádí u¾ v okam¾iku, kdy zadáváte vyhledávací øetìzec. Pøíkaz pro zahájení hledání vpøed je C-s a pro hledání vzad C-r. ALE POZOR! Nezkou¹ejte to je¹tì. Kdy¾ stisknete C-s, uvidíte v echo oblasti prompt "I-search". To vám øíká, ¾e Emacs se nachází ve stavu, který se nazývá inkrementální hledání, a èeká, a¾ mu zadáte, co chcete hledat. hledání ukonèí. >> Nyní zahajte hledání stiskem C-s. POMALU, písmeno po písmenu, pi¹te slovo 'kurzor'. Po ka¾dém písmenu si v¹imnìte, co se dìje s kurzorem. Teï jste vyhledali "kurzor" poprvé. >> Stisknìte C-s znovu, abyste nalezli dal¹í výskyt "kurzor". >> Nyní ètyøikrát stisknìte a pozorujte, jak se kurzor pøesunuje. >> Stisknìte pro ukonèení hledání. Vidìli jste, co se stalo? Emacs se v inkrementálním hledání pokou¹í pøejít na dal¹í výskyt øetìzce, který jste dosud napsali. Chcete-li pøejít na dal¹í výskyt 'kurzor', jednodu¹e stisknìte C-s znovu. Jestli¾e u¾ ¾ádný takový výskyt není, Emacs pípne a øekne vám, ¾e hledání momentálnì "selhává", C-g hledání ukonèí. POZNÁMKA: Na nìkterých systémech stisk C-s zpùsobí ztuhnutí obrazovky a nevidíte ¾ádný dal¹í výstup z Emacsu. To znamená, ¾e "vlastnost" operaèního systému zvaná "flow control" zachycuje C-s a nepropustí jej k Emacsu. Pro odtuhnutí obrazovky stisknìte C-q. Pak v sekci "Spontaneous Entry to Incremental Search" v manuálu Emacsu vyhledejte radu, jak se vypoøádat s touto "vlastností". Jestli¾e uprostøed inkrementálního hledání stisknete , uvidíte, ¾e poslední znak v hledaném øetìzci zmizí a hledání se vrací na poslední místo hledání. Pøedpokládejme napøíklad, ¾e jste napsali "c", abyste na¹li první výskyt "k". Jestli¾e nyní stisknete "u", kurzor se pøesune na první výskyt "ku". Teï stisknìte . To vyma¾e "u" z hledaného øetìzce a kurzor se pøesune zpìt na první výskyt "k". Jestli¾e uprostøed hledání stisknete CONTROL nebo META znak (s nìkolika výjimkami -- znaky, které jsou speciální v hledání, jako C-s a C-r), hledání se ukonèí. C-s zahajuje hledání, které hledá jakýkoliv výskyt hledaného øetìzce ZA aktuální pozicí kurzoru. Chcete-li nìco hledat v pøedcházejícím textu, stisknìte C-r místo C-s. V¹e, co jsme øekli o C-s, platí také o C-r kromì toho, ¾e smìr hledání je opaèný. * VÍCE OKEN ----------- Jednou z pìkných vlastností Emacsu je to, ¾e mù¾e na obrazovce zobrazit více oken souèasnì. >> Pøesuòte kurzor na tento øádek a stisknìte C-u 0 C-l. >> Teï stisknìte C-x 2, co¾ rozdìlí obrazovku na dvì okna. Obì okna zobrazují tento tutoriál. Kurzor zùstává navrchu okna. >> Tisknìte C-M-v pro scrollování spodního okna. (Nemáte-li skuteènou klávesu META, stisknìte ESC C-v.) >> Stisknìte C-x o ("o" jako "other") pro pøesun kurzoru do dolního okna. >> Pou¾ijte C-v a M-v ve spodním oknì pro jeho scrollování. Pokraèujte ve ètení tìchto instrukcí v horním oknì. >> Znovu stisknìte C-x o pro pøesun kurzoru zpìt do horního okna. Kurzor v horním oknì je pøesnì na místì, kde byl pùvodnì. Mù¾ete dále pou¾ívat C-x o pro pøepínání mezi okny. Ka¾dé okno má svoji vlastní pozici kurzoru, ale jenom jedno okno kurzor skuteènì zobrazuje. V¹echny obvyklé editaèní pøíkazy platí pro okno, ve kterém se nachází kurzor. Toto okno nazýváme "aktivní okno" ("selected window"). Pøíkaz C-M-v je velmi u¾iteèný, jestli¾e v jednom oknì editujete text a druhé okno pou¾íváte pouze pro pøehled. Mù¾ete kurzor nechávat stále v oknì, kde editujete, a postupovat po druhém oknì pomocí C-M-v. C-M-v je pøíkladem CONTROL-META znaku. Máte-li skuteènou META klávesu, mù¾ete vyvolat C-M-v pøidr¾ením obou kláves CTRL a META pøi stisku v. Nezále¾í na tom, zda je prvnì stisknuta CTRL nebo META, proto¾e obì tyto klávesy fungují jako modifikátory kláves, které tisknete. Pokud nemáte skuteènou META klávesu, mù¾ete místo ní pou¾ít ESC, na poøadí zále¾í: musíte stisknout ESC a následnì CTRL-v; CTRL-ESC v by nefungovalo. To proto, ¾e ESC je samostatný znak, nikoliv modifikátor. >> Stisknìte C-x 1 (v horním oknì), abyste se zbavili dolního okna. (Kdybyste C-x 1 stiskli v dolním oknì, odstranilo by to horní okno. Chápejte tento pøíkaz jako "ponechej právì jedno okno -- to, ve kterém zrovna jsem".) Nemusíte v obou oknech zobrazovat tentý¾ buffer. Jestli¾e pou¾ijete C-x C-f pro vyhledání souboru v jednom z oken, druhé okno se nezmìní. Mù¾ete vyhledávat soubory v obou oknech nezávisle. Zde je dal¹í zpùsob, jak vyu¾ít dvì okna ke zobrazení dvou rùzných vìcí: >> Stisknìte C-x 4 C-f následované jménem nìkterého z va¹ich souborù. Dokonèete to pomocí . Vidíte zadaný soubor v dolním oknì. Pøesunul se tam i kurzor. >> Stisknìte C-x o pro pøesun zpìt do horního okna a C-x 1 pro smazání dolního okna. * REKURZIVNÍ EDITAÈNÍ ÚROVNÌ ---------------------------- Obèas se dostanete do nìèeho, co se nazývá "rekurzivní editaèní úroveò" ("recursive editing level"). To je indikováno hranatými závorkami ve stavovém øádku obklopujícími závorky okolo jména hlavního módu. Napøíklad mù¾ete vidìt [(Fundamental)] místo (Fundamental). Abyste se dostali z rekurzivní editaèní úrovnì, stisknìte ESC ESC ESC. To je obecný "vyskakovací" pøíkaz. Mù¾ete jej pou¾ít té¾ pro odstranìní nìkterých oken a vyskoèení z minibufferu. >> Stisknìte M-x, abyste se dostali do minibufferu; pak stisknìte ESC ESC ESC, abyste se z nìj dostali ven. Z rekurzivní editaèní úrovnì nemù¾ete vyskoèit pomocí C-g. To proto, ¾e C-g je vyu¾íváno pro ru¹ení pøíkazù a argumentù UVNITØ rekurzivní editaèní vrstvy. * ZÍSKÁNÍ DAL©Í NÁPOVÌDY ------------------------ V tomto tutoriálu jsme se pokusili poskytnout vám dostatek informací, abyste mohli zaèít Emacs pou¾ívat. V Emacsu je toho tolik, ¾e by bylo nemo¾né to zde v¹echno objasnit. Nicménì se o Emacsu mù¾ete nauèit více, proto¾e má mnoho u¾iteèných vlastností. Emacs nabízí pøíkazy pro ètení dokumentace svých pøíkazù. V¹echny tyto "help" pøíkazy zaèínají znakem CONTROL-h, který se nazývá "help znak". Pro pou¾ití vlastností nápovìdy stisknìte znak C-h a pak znak øíkající, jaký druh nápovìdy ¾ádáte. Jste-li OPRAVDU ztraceni, stisknìte C-h ? a Emacs vám sdìlí, jaké druhy nápovìdy vám mù¾e poskytnout. Jestli¾e jste stiskli C-h a pak jste se rozhodli, ¾e ¾ádnou nápovìdu nechcete, jednodu¹e to zru¹te stiskem C-g. (Na nìkterých poèítaèích je význam znaku C-h zmìnìn. To by opravdu nemìlo být obecným nastavením pro v¹echny u¾ivatele, tak¾e máte právo stì¾ovat si systémovému administrátorovi. Do té doby, jestli¾e C-h nezobrazuje hlá¹ení o nápovìdì v dolní èásti obrazovky, zkuste místo toho pou¾ívat klávesu F1 nebo M-x help RET.) Nejzákladnìj¹í help pøíkaz je C-h c. Stisknìte C-h, znak c a klávesový pøíkaz; Emacs pak zobrazí velmi struèný popis pøíkazu. >> Stisknìte C-h c C-p. Hlá¹ení by mìlo vypadat asi takto C-p runs the command previous-line To vám sdìluje "jméno funkce". Jména funkcí jsou pou¾ívána zejména pro konfiguraci a roz¹iøování Emacsu. Ale proto¾e jména funkcí jsou volena tak, aby naznaèovala, co odpovídající pøíkaz dìlá, mohou slou¾it také jako velmi struèná dokumentace -- dostateèná k tomu, aby vám pøipomenula pøíkazy, které jste se ji¾ nauèili. Víceznakové pøíkazy jako C-x C-s a (pokud nemáte META, EDIT ani ALT klávesu) v jsou po C-h c povoleny také. K získání více informací o pøíkazu místo C-h c pou¾ijte C-h k. >> Stisknìte C-h k C-p. To zobrazí dokumentaci k funkci a její jméno v emacsovém oknì. A¾ výstup pøeètete, stisknìte C-x 1, abyste se textu nápovìdy zbavili. Nemusíte to dìlat hned. Mù¾ete chvíli editovat a nahlí¾et do textu nápovìdy a teprve pak stisknout C-x 1. Zde jsou dal¹í u¾iteèné C-h volby: C-h f Popis funkce. Zadáváte jméno funkce. >> Zkuste napsat C-h f previous-line. To vypí¹e ve¹keré informace, které Emacs má o funkci implementující pøíkaz C-p. Podobný pøíkaz C-h v zobrazí dokumentaci promìnné, její¾ hodnotu mù¾ete nastavit a zmìnit tím chování Emacsu. Jméno promìnné zadáte, a¾ se na nì Emacs zeptá. C-h a Pøíkazové apropos. Zadejte klíèové slovo a Emacs vypí¹e v¹echny pøíkazy, jejich¾ jména obsahují toto klíèové slovo. V¹echny tyto pøíkazy mohou být vyvolány pomocí META-x. Pro nìkteré pøíkazy pøíkazové apropos vypí¹e také jedno nebo dvouznakové sekvence, které provádìjí tentý¾ pøíkaz. >> Napi¹te C-h a file. To zobrazí v druhém oknì seznam v¹ech M-x pøíkazù obsahujících "file" ve svém názvu. Znakové pøíkazy jako C-x C-f uvidíte vypsané vedle odpovídajících jmen pøíkazù jako find-file. >> Stisknìte C-M-v pro posun okna s nápovìdou. Proveïte to nìkolikrát. >> Stisknìte C-x 1 pro smazání okna s nápovìdou. C-h i Ètení on-line manuálù (té¾ Info). Tento pøíkaz vás pøepne do speciálního bufferu s názvem `*info*', ve kterém mù¾ete èíst on-line manuály pro balíky nainstalované na va¹em systému. Pokud stisknete m emacs mù¾ete si napøíklad pøeèíst manuál k Emacsu. Pokud jste dosud nikdy nepou¾ívali Info, stisknìte ? a Emacs vám pøedstaví hlavní mo¾nosti módu pro Info. A¾ si tyto mo¾nosti prostudujete, mìli byste pou¾ívat Info manuál Emacsu jako svoji primární dokumentaci. * ZÁVÌR ------- Nezapomeòte, Emacs ukonèíte provedením pøíkazu C-x C-c. Pro doèasný odskok do shellu, ze kterého se do Emacsu mù¾ete opìt vrátit, pou¾ijte C-z. Zámìrem tohoto tutoriálu je být srozumitelný v¹em novým u¾ivatelùm, tak¾e narazíte-li na nìco nejasného, tak neusedejte a neklaïte to za vinu sobì -- stì¾ujte si! KOPÍROVÁNÍ ---------- Tento tutoriál vychází z dlouhé øady emacsových tutoriálù zahájené tutoriálem napsaným Stuartem Cracraftem pro pùvodní Emacs. Tato verze tutoriálu je, podobnì jako GNU Emacs, chránìna copyrightem a je ¹íøena se svolením distribuovat kopie za jistých podmínek: Copyright (c) 1985, 1996 Free Software Foundation Ka¾dému je zaruèeno právo vytváøet a distribuovat pøesné kopie tohoto dokumentu tak, jak jej obdr¾el, na jakémkoliv médiu, s tím, ¾e bude zachována tato poznámka o autorství a poznámka o svolení a ¾e distributor zaruèuje pøíjemci právo na dal¹í redistribuci povolenou touto poznámkou. Je zaruèeno právo distribuovat modifikované verze tohoto dokumentu nebo jeho èástí pod vý¹e uvedenými podmínkami za pøedpokladu, ¾e obsahuje jasné poznámky uvádìjící, kdo provedl poslední modifikace. Podmínky pro kopírování Emacsu samotného jsou slo¾itìj¹í, av¹ak ve stejném duchu. Pøeètìte si prosím soubor COPYING a pak pøedávejte kopie GNU Emacsu svým pøátelùm. Pomáhejte potírat softwarovou obstrukci ("vlastnictví") pou¾íváním, psaním a sdílením free softwaru! ;;; Local Variables: ;;; coding: iso-latin-2 ;;; End: xemacs-21.4.22/etc/TUTORIAL.de0000644000175000017500000013772007265371000013602 0ustar acsacsCopyright (c) 1997-2000, Adrian Aichner . Copyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions. Du betrachtest das Emacs Tutorial. Dies sind die einführenden Übungen für Emacs. Emacs-Befehle verwenden generell entweder die CONTROL- (manchmal mit CTRL oder CTL beschriftet, auf deutschen Tastaturen auch oft mit STRG) oder die META-Taste. Auf manchen Tastaturen ist die META-Taste mit ALT, EDIT oder sonstwie (z.B. ist auf einer Sun Tastatur die Raute-Taste links vom SPACE Balken die META-Taste) beschriftet. Statt jedesmal META oder CONTROL auszuschreiben, wenn wir wollen daß Du die Taste drückst, verwenden wir folgende Abkürzungen: C- bedeutet: Halte die CONTROL-Taste während der Betätigung der -Taste gedrückt. Also bedeutet C-f: Halte die CONTROL Taste, während Du den Buchstaben f drückst. M- bedeutet: Halte die META-Taste während der Betätigung der -Taste gedrückt. Falls es keine META-Taste gibt, tippe zuerst ESC (die ESCAPE-Taste) und danach die -Taste. Wichtig: Tippe C-x C-c, um die Emacs-Sitzung zu beenden (zwei Zeichen). Die ">>" am linken Seitenrand deuten auf Anweisungen, die Du probieren solltest. so z.B: <> >> Tippe nun C-v (Betrachte nächste Seite) um die nächste Seite zu betrachten. (Also, halte die CONTROL-Taste gedrückt während Du v tippst.) Von jetzt an tu das bitte jeweils nachdem Du eine Seite vollständig gelesen hast. Bitte beachte die Überlappung von zwei Zeilen wenn Du vorwärts blätterst; dies erlaubt es, den Text fließend weiter zu lesen. Zuerst solltest Du wissen, wie man sich im Text von Stelle zu Stelle bewegt. Du weißt bereits, wie man sich mit C-v eine Seite weiterbewegt. Um eine Seite zurück zu gehen, tippe M-v (halte die META-Taste gedrückt und tippe v oder tippe v wenn Deine Tastatur keine META-, EDIT- oder ALT-Taste besitzt). >> Versuche ein paarmal M-v und C-v zu tippen. * ZUSAMMENFASSUNG ----------------- Die folgenden Befehle sind nützlich um Text seitenweise zu betrachten: C-v Eine Seite vorwärts blättern M-v Eine Seite zurück blättern C-l Bewegt den Bildschirminhalt um den Textzeiger in die Bildmitte und baut den Bildschirm neu auf. (Dies ist CONTROL-, nicht CONTROL-1.) >> Finde den Textzeiger und merke Dir den Text der ihm nahe ist. Nun tippe C-l. Finde den Textzeiger abermals und achte darauf daß er sich, relativ zum Text, nicht bewegt hat. * EINFACHE TEXTZEIGER-STEUERUNG ------------------------------- Das Bewegen von Bildschirminhalt zum nächsten ist nützlich, aber wie bewegt man sich an eine bestimmte Stelle im Text? Dazu gibt es mehrere Möglichkeiten. Die einfachste ist die Befehle C-p, C-b, C-f und C-n zu verwenden. Jeder dieser Befehle bewegt den Textzeiger um eine Zeile bzw. Spalte in eine bestimmte Richtung. Hier ist eine Tabelle welche die Bewegungsrichtung der vier Befehle zeigt: Vorherige Zeile, C-p : : Rückwärts, C-b .... Jetzige Textzeiger-Position .... Vorwärts, C-f : : Nächste Zeile, C-n >> Bewege den Textzeiger mittels C-n oder C-p auf die mittlere Zeile der obigen Tabelle. Dann zentriere das Diagramm mittels C-l im Bildschirmfenster. Auf Englisch kann man sich diese Befehle leicht einprägen: P für previous, N für next, B für backward und F für forward. Dies sind die einfachen Befehle zur Bewegung des Textzeigers. Da Du sie ständig benutzen wirst, solltest Du sie jetzt erlernen. >> Verwende einige C-n's um den Textzeiger auf diese Zeile zu bringen. >> Bewege Dich mit C-f's in die Zeile und dann hinauf mit C-p's. Beobachte das Verhalten von C-p, wenn Du Dich mitten in einer Zeile befindest. Jede Textzeile endet mit einem Newline-Zeichen, welches sie von der nächsten trennt. Auch die letzte Zeile in Deiner Datei sollte ein Newline am Ende besitzen (obschon Emacs dieses nicht benötigt). >> Versuche C-b am Beginn einer Zeile. Es sollte Dich zum Ende der vorigen Zeile bringen. Dies deshalb, weil es Dich über das Newline-Zeichen zurückbewegt. C-f kann sich, wie C-b, über ein Newline hinwegbewegen. >> Tippe einige C-b's um ein Gefühl für die Position des Textzeigers zu bekommen. Dann verwende C-f um ans Ende der Zeile zu gelangen. Nun versuche ein weiteres C-f um in die nächste Zeile zu gelangen. Wenn Du Dich am Anfang oder Ende aus dem Bildschirm bewegst, schiebt sich der Text ins Blickfeld. Diesen Vorgang nennt man Rollen oder "scrolling". Er erlaubt Emacs den Textzeiger an die gewünschte Stelle zu bringen, ohne ihn aus dem Bildschirmfenster zu bewegen. >> Versuche den Textzeiger mittels C-n aus dem Blickfeld zu bewegen und beobachte was geschieht. Wenn Dir die zeichenweise Fortbewegung zu langsam ist, kannst Du Dich Wort für Wort bewegen. M-f (META-f) geht ein Wort weiter und M-b geht eins zurück. >> Tippe ein paar M-f's und M-b's. Wenn Du mitten in einem Wort bist, bringt Dich M-f an sein Ende. Wenn Du auf Leerzeichen zwischen Worten stehst, bewegt Dich M-f zum Ende des folgenden Wortes. M-b bewegt sich sinngemäß zurück. >> Versuche M-f und M-b einige Male, abgewechselt von C-f's und C-b's so daß Du das Verhalten von M-f und M-b an verschiedenen Stellen innerhalb und zwischen Wörtern beobachten kannst. Achte auf die Verwandtschaft von C-f und C-b auf der einen Seite und M-f und M-b auf der anderen. Sehr oft werden META-Befehle für Operationen mit Einheiten einer Sprache verwendet (Worte, Sätze, Absätze), während CONTROL-Befehle unverändert mit den einfachen Einheiten (Buchstaben, Zeilen, etc.) arbeiten. Diese Parallele ist auf Zeilen und Sätze anwendbar: C-a und C-e gehen zum Anfang und Ende einer Zeile, M-a und M-e zum Anfang bzw. Ende eines Satzes. >> Versuche ein paar C-a's und dann ein paar C-e's. Versuche ein paar M-a's und dann ein paar M-e's. Schau wie mehrere C-a's nichts bewirken, mehrere M-a's sich aber Satz für Satz weiterbewegen. Obwohl sich ihr Verhalten unterscheidet, erscheint es natürlich. Die Stelle des Textzeigers im Text wird auch Punkt oder "point" genannt. Der Textzeiger auf dem Bildschirm zeigt an welchem Punkt im Text sich dieser befindet. Hier ist eine Zusammenfassung der einfachen Befehle zur Bewegung des Textzeigers, inklusive der Befehle zur wort- und satzweisen Bewegung: C-f Gehe ein Zeichen weiter C-b Gehe ein Zeichen zurück M-f Gehe ein Wort weiter M-b Gehe ein Wort zurück C-n Gehe zur nächsten Zeile C-p Gehe zur vorherigen Zeile C-a Gehe an den Anfang der Zeile C-e Gehe an das Ende der Zeile M-a Gehe zurück zum Anfang des Satzes M-e Gehe weiter zum Ende des Satzes >> Übe jetzt alle diese Befehle einige Male. Es sind die am häufigsten benutzten. Zwei weitere wichtige Befehle zur Bewegung im Text sind M-< (META kleiner), welcher an den Anfang des gesamten Texts springt, und M-> (META größer), welcher an das Textende hüpft. Auf einigen deutschen Tastaturen ist ">" über "<", Du mußt also möglicherweise die Shift-Taste drücken, um ein > zu tippen. Auf solchen Tastaturen mußt Du auch für M-> die Shift-Taste drücken; ohne Shift-Taste würdest Du sonst M-< tippen. >> Versuche jetzt M-< um an den Beginn dieser einführenden Übungen zu gelangen. Dann verwende C-v wiederholt um hierher zurück zu kommen. >> Versuche jetzt M-> um ans Ende der Übungen zu springen. Benutzte M-v wiederholt um hierher zurück zu gelangen. Du kannst den Textzeiger auch mit den Pfeil-Tasten bewegen, falls Deine Tastatur solche besitzt. Wir empfehlen das Erlernen von C-b, C-f, C-n und C-p aus drei Gründen. Erstens funktionieren sie auf allen Tastaturen. Zweitens wirst Du herausfinden, wenn Du einige Übung mit Emacs bekommst, daß es schneller ist die CTRL-Tasten zu drücken als die Pfeil-Tasten (weil Du Deine Hände nicht aus dem normalen Fingersatz bringen mußt). Drittens: Hast Du die Verwendung der CTRL Befehle erst zu Deiner Gewohnheit gemacht, wird es ein Leichtes weitere Bewegungs-Befehle zu erlernen. Die meisten Emacs-Befehle akzeptieren ein numerisches Argument; meistens dient dieses als Wiederholzähler. Dieses Argument übergibt man mit C-u, gefolgt von einer Zahl, bevor man den jeweiligen Befehl eingibt. Steht Dir eine META- (oder EDIT- oder ALT)-Taste zur Verfügung, so kannst Du dieses Argument auch wie folgt eingeben: Tippe die Ziffern während Du die META-Taste gedrückt hältst. Wir empfehlen das Erlernen der C-u Methode, da sie überall funktioniert. z.B., C-u 8 C-f bewegt den Textzeiger um acht Zeichen weiter. >> Versuche C-n und C-p mit numerischem Argument um den Textzeiger mit nur einem Befehl nahe an diese Zeile heranzubringen. Die meisten Befehle verwenden ein Argument als Wiederholzähler. Einige ausgenommene Befehle verwenden es anders. C-v und M-v sind unter den Ausnahmen. Mit Argument rollen sie den Text um eben soviele Zeilen, anstelle von Bildschirmseiten. z.B. C-u 4 C-v rollt den Bildschirminhalt um 4 Zeilen. >> Versuche C-u 8 C-v nun aus. Dies sollte den Bildschirminhalt um acht Zeilen nach oben gerollt haben. Wenn Du ihn wieder zurückrollen willst, kannst Du M-v ein entsprechendes Argument geben. Verwendest Du das X Window System, so befindet sich wahrscheinlich ein rechteckiger Balken, Rollbalken oder "scrollbar" genannt, rechts neben dem Emacs-Fenster. Du kannst den Text auch durch Manipulieren dieses Rollbalkens mit der Maus rollen. >> Versuche die mittlere Maustaste in der hervorgehobenen Fläche innerhalb des Rollbalkens zu drücken. Dies sollte den Text mehr oder weniger rollen, je nachdem wie hoch oder tief der Mauszeiger auf dem Rollbalken positioniert ist. >> Bewege den Mauszeiger im Rollbalken etwa drei Zeilen unter das obere Ende und drücke die linke Maus-Taste einige Male. * TEXTZEIGER STEUERUNG MIT EINEM X-TERMINAL ------------------------------------------- An einem X-Terminal wirst Du es wahrscheinlich einfacher finden die Tasten des Tastenfeldes zur Textzeiger-Steuerung zu gebrauchen. Die Links, Rechts, Auf und Ab Pfeil-Tasten steuern in die erwartete Richtung; sie funktionieren exakt wie C-b, C-f, C-p und C-n, sind aber leichter zu tippen und zu merken. Du kannst auch C-Links und C-Rechts verwenden um wortweise zu springen. C-Auf und C-Ab bewegen den Textzeiger blockweise (z.B. Absätze, wenn Du Text bearbeitest). Die Tasten HOME (oder BEGIN, POS1) und END (oder ENDE) bringen Dich zum Anfang oder Ende einer Zeile und C-HOME bzw. C-END bringen Dich zum Anfang oder Ende der Datei. Hat Deine Tastatur PgUp (oder BILD AUF) und PgDn (oder BILD AB) kannst Du diese wie M-v und C-v zum seitenweisen Rollen verwenden. All diese Befehle nehmen numerische Argumente wie weiter oben beschrieben. Du kannst diese Argumente mittels einer Abkürzung eingeben: Drücke einfache die CONTROL- oder META-Taste während Du die Ziffern tippst. z.B. um 12 Worte nach rechts zu gehen, tippe C-1 C-2 C-Rechts. Beachte, daß dies ganz einfach, ohne Loslassen der CONTROL-Taste, getippt werden kann. * WENN EMACS HÄNGT ------------------ Wenn Emacs auf Deine Befehle nicht mehr reagiert, kannst Du den Befehl risikolos mit C-g unterbrechen. Mit C-g kann man Befehle abbrechen, die zu lange dauern. Du kannst mit C-g auch ein numerisches Argument oder einen teilweise eingegebenen Befehl, den Du nicht mehr ausführen willst, verwerfen. >> Tippe C-u 100 für ein numerisches Argument von 100, dann tippe C-g. Nun tippe C-f. Es wird nur eine Bewegung um ein Zeichen ausgeführt, da Du das Argument mit C-g verworfen hast. Hast Du fälschlich ein getippt, kannst Du es mit C-g loswerden. * GESPERRTE BEFEHLE ------------------- Einige Emacs-Befehle sind "gesperrt", damit sie von Anfängern nicht versehentlich benutzt werden können. Wenn Du einen der gesperrten Befehle tippst, zeigt Emacs die Befehlsdokumentation und fragt um Bestätigung, daß der Befehl tatsächlich ausgeführt werden soll. Wenn Du den Befehl wirklich probieren willst, tippe Space als Antwort auf die Frage. Normalerweise, wenn Du den gesperrten Befehl nicht ausführen willst, beantwortest Du die Frage mit "n". >> Tippe `C-x n p' (ein gesperrter Befehl), dann beantworte die Frage mit n. * FENSTER --------- Emacs unterstützt mehrere Fenster, jedes mit unterschiedlichem Text. Beachte, daß sich der Begriff "Fenster" in Emacs nicht auf verschiedene, überlappende Fenster im Fenstersystem bezieht, sondern auf verschiedene Teil-Fenster innerhalb eines X Fensters. (Emacs unterstützt auch mehrere X-Fenster, oder "Rahmen" ("frames") in Emacs-Terminologie. Dies wird später beschrieben.) C-x 1 Ein Fenster (d.h., Beende alle anderen Fenster). Dies ist CONTROL-x gefolgt von der Ziffer 1. C-x 1 erweitert das Fenster mit dem Textzeiger, so daß es das ganze Emacs-Fenster einnimmt. Alle anderen Fenster werden beendet. >> Bewege den Textzeiger auf diese Zeile und tippe C-u 0 C-l. (Denke daran, daß C-l den Bildschirminhalt neu aufbaut. Das numerische Argument bedeutet: "Baue den Bildschirminhalt neu auf und bewege die aktuelle Zeile ebensoviele Zeilen vom oberen Bildschirmrand." C-u 0 C-l bedeutet also "Bau den Bildschirm, mit der aktuellen Zeile ganz oben, neu auf.") >> Tippe CONTROL-x 2 Beachte wie das Fenster schrumpft, während ein neues mit Teilen derselben Datei erscheint. >> Tippe C-x 1 und sehe das neue Fenster verschwinden. * EINFÜGEN UND LÖSCHEN ---------------------- Willst Du Text einfügen, so tippe ihn. Sichtbare Zeichen, wie A, 7, *, etc., werden von Emacs als Text betrachtet und unmittelbar eingefügt. Tippe (die Rücklauf-Taste) um ein Newline einzufügen. Mit kannst Du das zuletzt getippte Zeichen löschen. ist eine Taste die möglicherweise mit "Del" oder "Entf" beschriftet ist. In einigen Fällen dient die Backspace (Rückschritt) Taste als , jedoch nicht immer! Allgemeiner ausgedrückt löscht das Zeichen unmittelbar vor dem Textzeiger. >> Tu dies nun -- tippe einige Buchstaben, lösche sie dann durch mehrmaliges Tippen von . Kein Grund zur Sorge diese Datei zu verändern. Es ist Deine persönliche Kopie der "Einführenden Übungen für Emacs". Wird eine Zeile zu lang für eine Bildschirm-Zeile, so wird die Zeile auf der nächsten Bildschirm-Zeile fortgesetzt. Ein umgekehrter Schrägstrich ("\") am rechten Rand zeigt an, daß die Zeile fortgesetzt wird. >> Füge Text ein bis Du den rechten Rand erreichst und tippe weiter. Du wirst bemerken, wie die Fortsetzungszeile erscheint. >> Verwende s bis die Zeile wieder auf eine Bildschirmzeile paßt. Die Fortsetzungszeile verschwindet. Ein Newline-Zeichen kann wie jedes andere gelöscht werden. Das Löschen des Newline-Zeichens fügt die umgebenden Zeilen zusammen. Ist die entstehende Zeile zu lang für den Bildschirm, erscheint wieder eine Fortsetzungszeile. >> Geh an den Anfang einer Zeile und tippe . Dies fügt die Zeile an die vorhergehende an. >> Tippe um das Newline-Zeichen wieder einzufügen. Denke daran, daß die meisten Emacs-Befehle mittels eines Arguments wiederholt werden können; Ein Textzeichen wird mittels Argument mehrfach eingefügt. >> Versuch's einfach -- Tippe C-u 8 * um ******** einzufügen. Du hast jetzt die einfachsten Befehle zum Einfügen und Korrigieren von Text gelernt. Du kannst auch ganze Worte oder Zeilen löschen. Hier ist eine Zusammenfassung der Lösch-Befehle: Lösche das Zeichen vor dem Textzeiger C-d Lösche das Zeichen nach dem Textzeiger M- Lösche das Wort vor dem Textzeiger M-d Lösche das Wort nach dem Textzeiger C-k Lösche vom Textzeiger bis ans Zeilenende M-k Lösche vom Textzeiger bis ans Satzende Beachte daß und C-d gegenüber M- und M-d die Verwandtschaft von C-f und M-f fortsetzen ( ist zwar keine CONTROL-Taste, aber das kümmert uns nicht). C-k und M-k verhalten sich zueinander wie C-e und M-e zu Zeilen und Sätzen. Wenn Du mehr als ein Zeichen auf einmal löschst, speichert sie Emacs, damit Du sie wieder abrufen kannst. Den gelöschten Text zurückzuholen nennt man "yanking". Du kannst den gelöschten Text an der selben oder an einer anderen Textstelle zurückholen. Der Text kann mehrere Male zurückgeholt werden um Mehrfachkopien anzulegen. Der Zurückhol-Befehl ist C-y. Beachte daß der Unterschied zwischen Entfernen ("Killing") und Löschen ("Deleting") darin besteht, daß gelöschte Teile zurückgeholt werden können, während dies für entfernte Teile nicht möglich ist. Allgemein speichern Befehle die viel Text löschen diesen auch, während Befehle, die nur einzelne Zeichen oder Leerzeilen entfernen, diese nicht speichern. >> Gehe zum Beginn einer nicht leeren Zeile. Dann lösche den gesamten Text der Zeile mit C-k. >> Tippe C-k ein zweites Mal. Du wirst sehen, daß dies das folgende Newline-Zeichen löscht. Beachte, daß ein einzelnes C-k den Inhalt einer Zeile löscht, ein zweites die Zeile selbst, so daß sich nachfolgende Zeilen nach oben bewegen. Ein numerisches Argument wird von C-k besonders behandelt: Es löscht ebensoviele Zeilen mitsamt Inhalt. Dies ist keine einfache Wiederholung. C-u 2 C-k löscht zwei Zeilen und deren Inhalt; zwei aufeinanderfolgende C-k würden dies nicht tun. Um den zuletzt gelöschten Text beim Textzeiger zurückzuholen, tippe C-y. >> Versuch's; Tippe C-y um den Text zurückzuholen. Denke so über C-y als ob Du etwas zurückholst, das man Dir genommen hat. Beachte, daß bei aufeinanderfolgenden C-k's der gelöschte Text in einem Stück gespeichert wird, so daß ein C-y alle Zeilen zurück bringt. >> Tu's jetzt, tippe C-k mehrere Male. Nun das Zurückholen des gelöschten Texts: >> Tippe C-y. Dann gehe einige Zeilen nach unten und tippe wieder C-y. Jetzt siehst Du, wie man Text kopiert. Was machst Du, wenn Du Text zum Zurückholen hast, dann aber etwas anderes löscht? C-y würde das zuletzt Gelöschte zurückbringen. Aber der zuvor gelöschte Text ist nicht verloren. Du kannst Ihn mit M-y zurückholen. Nachdem Du C-y getippt hast, kannst Du mit M-y den zurückgeholten Text durch früher gelöschten Text ersetzten. Tippst Du M-y wieder und wieder, holst Du früher und früher Gelöschtes zurück. Hast Du den gewünschten Text erreicht, brauchst Du nichts weiter zu tun um diesen zu behalten. Fahre mit Deiner Arbeit fort und laß den zurückgeholten Text wo er ist. Verwendest Du M-y oft genug, kehrst Du an den Anfang zurück (der letzte Löschvorgang). >> Lösche eine Zeile, bewege Dich im Text, lösche eine weitere Zeile. Dann tippe C-y um die zuletzt gelöschte Zeile zurückzuholen. Darauf verwende M-y und die zuerst gelöschte Zeile ersetzt den zuvor zurückgeholten Text. Verwende weitere M-y's und sieh was passiert. Fahre fort bis die zweite Zeile wiederkehrt und versuche noch einige M-y's. Wenn Du willst, kannst Du M-y positive und negative Argumente geben. * RÜCKGÄNGIG MACHEN ------------------- Veränderst Du Text und entscheidest Du dann, daß dies ein Fehler war, kannst Du die Änderungen mit C-x u rückgängig machen. Üblicherweise macht C-x u die Änderungen des letzten Befehls rückgängig; wenn Du C-x u mehrmals wiederholst, wird jeweils ein weiterer Befehl rückgängig gemacht. Aber es gibt zwei Ausnahmen: Befehle, die keinen Text verändern, zählen nicht (dies schließt Befehle zum Bewegen und Rollen des Textzeigers ein) und selbsteinfügende Befehle werden üblicherweise in Zwanziger-Gruppen behandelt. (Dies dient dazu, die Anzahl der C-x u's zu reduzieren die Du tippen mußt um eingetippten Text rückgängig zu machen.) >> Lösche diese Zeile mit C-k, dann tippe C-x u und sie sollte wiedererscheinen. C-_ ist ein alternativer rückgängig (undo) Befehl; er funktioniert wie C-x u, ist aber einfacher zu Wiederholen. Der Nachteil ist, daß C-_ auf einigen Tastaturen nicht direkt getippt werden kann. Deshalb gibt es C-x u. Auf einigen Tastaturen kann man C-_ als C-\ tippen. Ein numerisches Argument für C-_ oder C-x u dient als Wiederholwert. * DATEIEN --------- Um an einem Text bleibende Änderungen vorzunehmen, mußt Du ihn in einer Datei speichern. Sonst gehen Deine Änderungen mit dem Beenden von Emacs verloren. Du legst Deine Arbeit in einer Datei ab, indem Du eine Datei "findest". (Man nennt dies auch das "Besuchen" ("visiting") einer Datei.) Das Finden einer Datei bedeutet, daß Du ihren Inhalt mit Emacs betrachtest. In vielfacher Hinsicht ist es, als würdest Du die Datei selbst bearbeiten. Jedoch sind Deine Änderungen nicht permanent bis Du die Datei sicherst. Damit kannst Du verhindern halb-fertige Dateien auf dem System abzulegen, wenn Du dies nicht willst. Sogar beim Abspeichern hinterläßt Emacs die Originaldatei unter verändertem Namen falls Du später entscheiden solltest, daß die Änderungen ein Fehler waren. Nahe dem unteren Ende des Bildschirms siehst Du eine Zeile die mit Bindestrichen beginnt und endet und den Text "XEmacs: TUTORIAL.de" enthält. Dieser Teil des Bildschirms zeigt immer den Namen der besuchten Datei. Zur Zeit besuchst Du eine Datei namens "TUTORIAL.de", welche Deine persönliche Kopie des Emacs Tutorials ist. Was immer für eine Datei Du findest, ihr Name wird immer an dieser Stelle erscheinen. Die Befehle zum Finden und Sichern von Dateien sind anders als die bisher erlernten, da sie jeweils aus zwei Zeichen bestehen. Beide beginnen mit dem Zeichen CONTROL-x. Es gibt eine ganze Reihe von Befehlen, die mit CONTROL-x beginnen; viele haben mit Dateien, Buffern und verwandten Dingen zu tun. Diese Befehle sind zwei, drei oder vier Zeichen lang. Bei Befehlen zum Finden einer Datei mußt Du außerdem den Dateinamen angeben. Wir sagen: "Der Befehl liest ein Argument vom Terminal." (In diesem Fall ist das Argument der Dateiname). Nachdem Du folgenden Befehl tippst C-x C-f Finde eine Datei bittet Dich Emacs, einen Dateinamen einzugeben. Der Dateiname den Du tippst erscheint am unteren Ende des Emacs-Fensters. Diese unterste Zeile wird Minibuffer genannt, wenn sie für diese Art Eingabe verwendet wird. Du kannst die üblichen Emacs-Befehle zum Bearbeiten des Dateinamens verwenden. Während Du den Dateinamen eingibst (oder bei jeder anderen Minibuffer-Eingabe) kannst Du den Befehl mit C-g abbrechen. >> Tippe C-x C-f, dann tippe C-g. Dies beendet den Minibuffer und bricht den C-x C-f Befehl ab, der den Minibuffer benutzte. Du wirst also keine Datei finden. Wenn Du mit dem Bearbeiten des Dateinamens fertig bist, tippe um die Eingabe zu beenden. Der C-x C-f Befehl beginnt seine Arbeit und findet die Datei Deiner Wahl. Der Minibuffer verschwindet, wenn der C-x C-f Befehl beendet ist. Nach kurzer Zeit erscheint der Inhalt der Datei auf dem Bildschirm und Du kannst diesen bearbeiten. Wenn Du Deine Änderungen sichern willst, tippe den Befehl C-x C-s Sichere die Datei Das kopiert den Text von Emacs in die Datei. Geschieht dies das erste Mal so benennt Emacs die Originaldatei um, so daß sie nicht verloren geht. Der neue Name entsteht durch Anhängen von "~" am Ende des Originalnamens. Ist der Sicherungsvorgang beendet, gibt Emacs den Namen der Datei an. Du solltest recht oft sichern, damit Du nicht viel Arbeit verlierst, sollte das System abstürzen. >> Tippe C-x C-s um Deine Kopie des tutorials zu sichern. Dies sollte "Wrote ...TUTORIAL.de" am Fuß des Bildschirms ausgeben. ACHTUNG: Auf manchen Systemen wird C-x C-s den Bildschirm anhalten und Du wirst keine weitere Ausgabe von Emacs sehen. Dies bedeutet, daß auf Deinem System eine Betriebssystemeigenschaft ("feature") namens Flußsteuerung ("flow control") das C-s abfängt und nicht an Emacs weitergibt. Tippe C-q, um den Effekt aufzuheben, so daß der Bildschirm wieder reagiert. Schau dann unter "Spontaneous Entry to Incremental Search" im Emacs Manual nach, um Hilfe im Umgang mit diesem "Vorzug" ("feature") zu bekommen. Du kannst eine existierende Datei finden, um sie zu betrachten. Du kannst aber auch eine Datei "finden", die es noch nicht gibt. So erstellt man eine neue Datei mit Emacs: finde die Datei, welche anfänglich leer ist, dann tippe den Text für die Datei ein. Wenn Du danach sicherst, wird Emacs die Datei tatsächlich anlegen und Deinen eingetippten Text darin ablegen. Von da an arbeitest Du an einer existierenden Datei. * BUFFER -------- Findest Du eine weitere Datei mit C-x C-f, bleibt die erste in Emacs erhalten. Du kannst zu dieser mit C-x C-f zurückschalten. Auf diese Art kannst Du eine erhebliche Anzahl von Dateien in Emacs verfügbar haben. >> Erstelle eine Datei namens "foo" durch Eintippen von C-x C-f foo . Dann füge etwas Text ein, bearbeite ihn und sichere die Datei "foo" mit C-x C-s. Schließlich tippe C-x C-f TUTORIAL.de um zum Tutorial zurück zu gelangen. Emacs hält den Text jeder Datei in einem Objekt namens "buffer". Das Finden einer Datei legt in Emacs einen neuen Buffer an. Um eine Liste aller Buffer in Deiner Emacs-Sitzung zu erhalten tippst Du C-x C-b Liste alle Buffer >> Probiere C-x C-b jetzt aus. Beachte, daß jeder Buffer einen Namen hat. Wenn der Buffer einer Datei zugeordnet ist, wird auch der Dateiname angezeigt. Einige Buffer haben keine Entsprechung im Dateisystem. So hat z.B. der Buffer namens "*Buffer List*" keine zugeordnete Datei. Dieser Buffer enthält die Liste der Buffer, die mit C-x C-b erstellt wurde. JEDER Text in Emacs ist Teil irgendeines Buffers. >> Tippe C-x 1 um die Bufferliste loszuwerden. Wenn Du Änderungen in einer Datei vornimmst, dann eine andere findest, so wird der Inhalt der ersten nicht gesichert. Die Änderungen bleiben innerhalb von Emacs im zugeordneten Buffer erhalten. Das Bearbeiten einer weiteren Datei hat keinen Einfluß auf den Buffer der ersten. Dies ist sehr nützlich, man braucht aber auch eine angenehme Möglichkeit, den Buffer der ersten Datei zu sichern. Es wäre lästig, müßte man mit C-x C-f zur ersten Datei zurückgehen, um diese dann mit C-x C-s zu sichern. Darum haben wir C-x s Sichere mehrere Buffer C-x s befragt Dich zu jedem Buffer, der ungesicherte Änderungen enthält. Für jeden einzelnen wirst Du gefragt ob Du Ihn sichern willst. >> Füge eine Text-Zeile ein, dann tippe C-x s. Du wirst gefragt, ob Du den Buffer namens TUTORIAL.de speichern willst. * VERWENDUNG DES MENÜS ---------------------- An einem X-Terminal wirst Du eine Menüleiste am oberen Ende des Emacs- Fensters bemerken. Mit der Menüleiste kannst Du die allgemeinsten Emacs-Befehle, wie "Finde Datei" ("find file"), erreichen. Du wirst dies anfänglich einfacher finden, da Du Dir die notwendigen Tasten- kombinationen der Befehle nicht merken mußt. Bist Du einmal mit Emacs vertraut, wird es ein Leichtes sein die Kommandos zu benutzen, da jeder Menüeintrag, der einer Tastenkombination entspricht, diese auch anzeigt. Beachte, daß es viele Menüeinträge ohne entsprechende Tastensequenz gibt. So listet z.B. das Buffers-Menü die verfügbaren Buffer in letzt-benutzter Reihenfolge. Du kannst zu jedem Buffer über den Eintrag im Buffers-Menü gelangen. * VERWENDUNG DER MAUS --------------------- Unter X Windows hat Emacs volle Maus-Unterstützung. Der Textzeiger kann durch Drücken der linken Maustaste an der gewünschten Stelle des Mauszeigers dorthin gesetzt werden. Text kann durch Ziehen des Mauszeigers bei gedrückter linker Maustaste selektiert werden. (Oder man klickt die linke Maustaste an der einen Stelle im Text und verwendet SHIFT-Klick an der anderen um den dazwischenliegenden Text zu selektieren.) Um selektierten Text zu löschen kannst Du C-w benutzen, oder den Menüeintrag "Cut" im Edit-Menü verwenden. Beachte, daß diese Methoden nicht gleichbedeutend sind: C-w sichert den Text nur innerhalb von Emacs (ähnlich wie oben unter C-k beschrieben), während Cut den Text auch im X Clipboard ablegt, von wo ihn andere Programme abholen können. Verwende "Paste" im Edit-Menü um Text vom X Clipboard zurückzuholen. Die mittlere Maustaste wird häufig verwendet um sichtbare Objekte auf dem Bildschirm auszuwählen. Wenn Du z.B. "Info" (die Emacs Online Dokumentation) mit C-h i oder über das Help-Menü aufrufst, kannst Du einer hervorgehobenen Verknüpfung durch Klicken der mittleren Maustaste folgen. Ganz ähnlich, wenn Du einen Dateinamen eingibst (z.B. wenn von "Find File" gefragt) und TAB tippst um die möglichen Vervollständigungen zu erhalten, kannst Du mit der mittleren Maus die gewünschte Vervollständigung wählen. Die rechte Maustaste zeigt ein Popup-Menü. Der Inhalt des Menüs variiert abhängig vom gewählten Modus und zeigt für gewöhnlich einige häufig benutzte Befehle, die so einfacher benutzt werden können. >> Drücke jetzt die rechte Maustaste. Du mußt die Taste gedrückt halten, damit das Menü nicht gleich wieder verschwindet. * ERWEITERUNG DES BEFEHLSSATZES ------------------------------- Es gibt viel mehr Emacs-Befehle als man auf allen CONTROL- und META-Zeichen unterbringen könnte. Emacs löst dieses Problem mit dem X (eXtend) Befehl. Davon gibt es zwei Ausführungen: C-x Zeichenerweiterung eXtend. Gefolgt von einer Tastenkombination. M-x Namenserweiterung eXtend. Gefolgt von einer ausgeschriebenen Befehlsbezeichnung. Diese Befehle sind zwar im Allgemeinen nützlich, werden aber seltener verwendet als die bereits erlernten Befehle. Zwei von ihnen hast Du bereits kennengelernt: Die Befehle C-x C-f zum Finden und C-x C-s zum Sichern von Dateien. Ein anderes Beispiel ist der Befehl zum Beenden einer Emacs-Sitzung -- dieser Befehl ist C-x C-c. (Habe keine Angst, ungesicherte Änderungen zu verlieren; C-x C-c bietet die Möglichkeit zum Sichern einer jeden geänderten Datei bevor Emacs beendet wird.) Mit C-z kann man Emacs vorübergehend verlassen -- so daß Du später zur gleichen Sitzung zurückkehren kannst. Auf Systemen, die dies unterstützen, sendet C-z Emacs "in den Hintergrund"; man kehrt zur Shell zurück, ohne daß der Emacs-Prozeß beendet wird. In den gebräuchlichsten Shells kann man zu Emacs mit `fg' oder `%emacs' zurückkehren. Auf Systemen, die dieses Aussetzen von Emacs nicht unterstützen, startet C-z eine s.g. Sub-Shell von der aus Du Programme starten und danach zu Emacs zurückkehren kannst; Emacs wird in diesem Fall nicht wirklich verlassen. Der Shell-Befehl `exit' ist in diesem Fall der üblichste um zu Emacs zurückzukehren. C-x C-c verwendet man unmittelbar bevor man das System verlassen will. Es ist auch die richtige Methode um einen Emacs zu verlassen der für E-mail-Programme, oder andere Erweiterungen, die das Aussetzen von Emacs nicht korrekt handhaben können, benutzt wird. Normalerweise ist es besser Emacs mit C-z auszusetzen statt ihn zu beenden, wenn man das System nicht verlassen will. Es gibt viele C-x-Befehle. Hier ist eine Liste der bereits erlernten: C-x C-f Finde Datei. C-x C-s Sichere Datei. C-x C-b Liste alle Buffer. C-x C-c Beende Emacs. C-x u Rückgängig machen (Undo). Namenserweiterte Befehle (eXtended commands) sind solche, die weniger häufig oder nur in einem bestimmten Modus verwendet werden. Ein Beispiel ist der Befehl replace-string, der einen Text durch einen anderen ersetzt. Wenn Du M-x tippst, zeigt dies Emacs am unteren Ende des Emacs-Fensters mit M-x an und Du solltest den Namen des Befehls eintippen; in diesem Fall "replace-string". Tippe einfach "repl s" und Emacs wird den Namen vervollständigen. Beende den Befehlsnamen mit . Der replace-string Befehl braucht zwei Argumente -- den zu ersetzenden Text und den Ersatz-Text. Jedes Argument muß mit beendet werden. >> Gehe zur Leerzeile zwei Zeilen unter dieser. Dann tippe M-x repl sveraendertgeaendert. Beachte wie diese Zeile sich veraendert hat: Du hast das Wort v-e-r-a-e-n-d-e-r-t mit "geaendert" ersetzt wo immer es nach der anfänglichen Textzeiger-Position auftrat. * AUTOMATISCHE SICHERUNG ------------------------ Wenn Du Änderungen in einer Datei vornimmst, diese aber noch nicht gesichert hast, so können diese bei einem Computerabsturz verloren gehen. Um Dich davor zu schützen, schreibt Emacs regelmäßig eine Autosave-Datei für jede Datei, die Du bearbeitest. Autosave-Dateien beginnen und enden mit "#"; wenn Deine Datei z.B. "hello.c" heißt, so heißt ihre auto-save Datei "#hello.c#". Sicherst Du die Datei, so löscht Emacs die entsprechende auto-save Datei. Nach einem Computerabsturz kannst Du die automatisch gesicherten Änderungen nach dem normalen Finden der Datei (Deiner Datei, nicht der Autosave-Datei) durch Eintippen von M-x recover-file zurückholen. Wenn Du nach der Bestätigung gefragt wirst, tippst Du yes um die Änderungen in der Autosave-Datei wiederherzustellen. * ECHO BEREICH -------------- Wenn Emacs bemerkt, daß Du Befehle langsam tippst, werden Dir diese am Fuß des Emacs-Fensters in der s.g. "echo area" angezeigt. Die echo area nimmt die unterste Zeile im Emacs-Fenster ein. * MODUSZEILE ------------ Die Zeile über der echo area wird "mode line" genannt. Die Moduszeile zeigt etwa folgendes: --**-XEmacs: TUTORIAL.de (Fundamental)--L791--67%---------------- Diese Zeile gibt nützliche Information über den Zustand von Emacs und dem Text, den Du bearbeitest. Du kennst bereits die Bedeutung des Dateinamens -- es ist die Datei, die Du gefunden hast. -NN%-- zeigt Deine Position im Text; dies bedeutet daß NN Prozent des Texts oberhalb des sichtbaren Bereiches liegen. Bist Du am Beginn, so erscheint --Top-- anstelle von --00%--. Bist Du am Ende des Texts, so erscheint --Bot--. Ist der gesamte Text sichtbar, so erscheint --All--. Die Sterne nahe dem Beginn der Moduszeile bedeuten, daß der Text verändert wurde. Unmittelbar nach dem Besuchen oder Sichern einer Datei, zeigt dieser Bereich keine Sterne, sondern Bindestriche. Der Teil der Moduszeile innerhalb der Klammern gibt Auskunft über die Bearbeitungs-Modi, die Du derzeit verwendest. Der Ausgangsmodus ist Fundamental -- der, den Du jetzt gerade benutzt. Er ist ein Beispiel für einen Hauptmodus ("major mode"). Emacs besitzt viele verschiedene Hauptmodi. Einige von ihnen sind zum Bearbeiten von verschiedenen Computersprachen und/oder Textformaten, wie z.B. Lisp-Modus, Text-Modus, etc., gedacht. Es ist immer nur ein Hauptmodus aktiv und sein Name kann dort gefunden werden, wo jetzt "Fundamental" steht. Jeder Hauptmodus ändert das Verhalten einiger Befehle. So gibt es z.B. Befehle zum Erstellen von Kommentaren in Programmen. Da diese in jeder Programmiersprache unterschiedlich aussehen, muß jeder Hauptmodus diese Kommentare entsprechend vorbereiten. Jeder Hauptmodus trägt den Namen eines entsprechenden Erweiterungsbefehls, so kann man ihn wählen. So ist z.B. M-x fundamental-mode der Befehl, um in den Fundamental-Modus zu schalten. Wenn Du deutschen Text bearbeitest, wie in diesem Fall, solltest Du wahrscheinlich den Text-Modus verwenden. >> Tippe M-x text-mode. Keine Sorge, keiner der bis jetzt erlernten Befehle ändert Emacs grundlegend. Du kannst aber beobachten, daß M-f und M-b Gänsefüßchen jetzt als Teil von Worten betrachten. Zuvor, im Fundamental-Modus, haben M-f und M-b diese als Wort-Separatoren betrachtet. Hauptmodi machen im Allgemeinen kleine Änderungen wie diese: die meisten Befehle erfüllen den selben Zweck, aber sie funktionieren etwas anders. Um Dokumentation über den aktuellen Hauptmodus zu bekommen, kannst Du immer C-h m verwenden. >> Verwende C-u C-v ein- oder mehrmals um diese Zeile ans obere Ende des Emacs-Fensters zu bekommen. >> Tippe C-h m um den Unterschied zwischen Text- und Fundamental-Modus zu sehen. >> Tippe C-x 1 um die Dokumentation wieder verschwinden zu lassen. Hauptmodi heißen so, weil es auch Untermodi gibt. Untermodi sind keine Alternativen zu Hauptmodi, sondern bewirken kleine Veränderungen derselben. Jeder Untermodus kann für sich allein, unabhängig von allen Haupt- und Untermodi, ein und ausgeschaltet werden. Du kannst also jederzeit keinen, einen, oder beliebig viele Untermodi verwenden. Ein sehr nützlicher Untermodus, speziell für deutschen Text, ist der Automatische-Zeilenumbruch-Modus (auto fill). Ist dieser Modus aktiv, bricht Emacs überlange Zeilen automatisch zwischen zwei Worten um. Du kannst den Modus mit M-x auto-fill-mode einschalten. Ist der Modus aktiv, kannst Du ihn mit M-x auto-fill-mode wieder ausschalten. Wir sagen der Befehl "toggelt" den Modus. >> Tippe jetzt M-x auto-fill-mode. Dann füge "asdf " wiederholt ein, bis die Zeile, zu lang geworden, umgebrochen wird. Du mußt die Leerzeichen einfügen, weil Auto Fill Zeilen nur an diesen Zeichen umbricht. Die Umbruchspalte steht üblicherweise bei 70 Zeichen, aber Du kannst dies mit dem C-x f Befehl ändern. Die gewünschte Umbruchspalte wird als numerisches Argument übergeben. >> Tippe C-x f mit einem Argument von 20. (C-u 2 0 C-x f). Danach tippe etwas Text, um zu sehen wie Emacs die Zeilen jetzt bis Spalte 20 füllt. Dann setze den Zeilenumbruch zurück auf 70. Machst Du Änderungen mitten im Absatz, so wird der automatische Umbruch diesen nicht für Dich auffüllen. Um den Absatz aufzufüllen, tippe M-q (META-q) während der Textzeiger in diesem Absatz steht. >> Bewege den Textzeiger in den vorherigen Absatz und tippe M-q. * SUCHEN -------- Emacs kann nach Zeichenketten ("Strings", dies sind Gruppen von zusammenhängenden Buchstaben oder Worten) entweder vorwärts oder rückwärts durch den Text suchen. Suchen nach einem String ist ein Befehl, der den Textzeiger bewegt; er bewegt den Textzeiger zur nächsten Stelle an der ein bestimmter String vorkommt. Der Emacs Suchbefehl unterscheidet sich von denen der meisten anderen Editoren, da er "inkrementell" ist. Dies bedeutet, daß das Suchen während der Eingabe des Such-Strings passiert. Der Befehl um eine Suche auszulösen ist C-s für vorwärtiges und C-r für rückwärtiges Suchen. ABER WARTE! Versuche die Befehle noch nicht. Wenn Du C-s tippt, wirst Du den String "I-search" in der echo area bemerken. Dies bedeutet, daß Emacs im inkrementellen Suchmodus auf Deine Eingabe wartet. bricht die Suche ab. >> Nun tippe C-s um die Suche einzuleiten. LANGSAM, Buchstabe für Buchstabe, tippe das Wort 'Textzeiger', mit Pausen dazwischen, damit Du beobachten kannst, was mit dem Textzeiger basiert. Du hast jetzt einmal nach "Textzeiger" gesucht. >> Tippe erneut C-s, um nach dem nächsten Vorkommen von "Textzeiger" zu suchen. >> Nun tippe viermal und schau wie sich der Textzeiger bewegt. >> Tippe zum Abbrechen der Suche. Hast Du gesehen was passiert? Emacs, in der inkrementellen Suche, versucht zu dem String zu springen, den Du bisher getippt hast. Um zum nächsten Auftreten von "Textzeiger" zu gelangen, tippst Du einfach wieder C-s. Gibt es kein weiteres Vorkommen, so piepst Emacs und zeigt die Suche als fehlgeschlagen an. C-g bricht die Suche auch ab. ACHTUNG: Auf manchen Systemen wird C-s den Bildschirm anhalten und Du wirst keine weitere Ausgabe von Emacs sehen. Dies bedeutet, daß auf Deinem System eine Betriebssystemeigenschaft ("feature") namens Flußsteuerung ("flow control") das C-s abfängt und nicht an Emacs weitergibt. Tippe C-q, um den Effekt aufzuheben, so daß der Bildschirm wieder reagiert. Schau dann unter "Spontaneous Entry to Incremental Search" im Emacs Manual nach, um Hilfe im Umgang mit diesem "Vorzug" ("feature") zu bekommen. Wenn Du in der Mitte einer inkrementellen Suche tippst, wirst Du bemerken, wie der letzte Such-Buchstabe entfernt wird und die Suche an die letzte Stelle der Suche zurück springt. Nehmen wir z.B. an, Du hast "T" getippt, um nach dem ersten Auftreten von "T" zu suchen. Wenn Du jetzt "e" tippst, springt der Textzeiger zum ersten Auftreten von "Te". Tippe nun . Dies entfernt das "e" von Such-String und der Textzeiger springt zurück zum ersten Vorkommen von "T". Wenn Du mitten in einer Suche ein CONTROL- oder META-Zeichen tippst (mit wenigen Ausnahmen -- Buchstaben mit Sonderbedeutung bei der Suche, so wie C-s und C-r), wird die Suche abgebrochen. C-s startet eine Suche NACH der aktuellen Textzeiger Position. Willst Du etwas früher im Text finden, tippe stattdessen C-r. All das was wir über C-s gesagt haben gilt auch für C-r, nur daß die Suchrichtung umgedreht wird. * MEHRERE FENSTER ----------------- Einer der netten Vorzüge von Emacs ist es, daß Du mehr als jeweils ein Fenster am Bildschirm darstellen kannst. >> Bewege den Textzeiger auf diese Zeile und tippe C-u 0 C-l. >> Nun tippe C-x 2, was das Emacs-Fenster zweiteilen wird. Beide Fenster zeigen dieses Tutorial. Der Textzeiger bleibt im oberen Fenster. >> Tippe C-M-v um beide Fenster zu rollen. (Hast Du keine echte META-Taste, tippe Esc C-v.) >> Tippe C-x o ("o" für "other" oder anderes) um den Textzeiger ins andere (untere) Fenster zu bewegen. >> Verwende C-v und M-v im unteren Fenster um dieses zu rollen. Lies diese Anweisungen im oberen Fenster weiter. >> Tippe C-x o um wieder zurück ins obere Fenster zu gelangen. Der Textzeiger im oberen Fenster ist noch immer wo er vorher war. Du kannst weiterhin mit C-x o zwischen den Fenstern umschalten. Jedes Fenster hat seine eigene Textzeiger-Position, aber nur ein Fenster zeigt diese auch an. Alle üblichen Bearbeitungs-Befehle beziehen sich auf das Fenster mit dem Textzeiger. Wir nennen es das "selektierte Fenster". Der Befehl C-M-v ist sehr hilfreich wenn Du in einem Fenster Text bearbeitest und das andere als Referenz verwendest. Du kannst den Textzeiger immer im oberen Fenster lassen, und Dich mit C-M-v durch das andere Fenster bewegen. C-M-v ist ein Beispiel für einen CONTROL-META-Zeichen. Wenn Du eine echte META-Taste hast, kannst Du sowohl CTRL als auch META gedrückt halten, während Du v tippst. Es kommt nicht darauf an ob CTRL oder META zuerst gedrückt wird, weil beide dazu dienen um den gedrückten Buchstaben zu verändern. Hast Du keine echte META-Taste und Du verwendest stattdessen ESC, ist die Reihenfolge nicht egal: zuerst tippst Du ESC, gefolgt von CTRL-v; CTRL-ESC v wird nicht funktionieren. Dies ist so weil ESC ein eigenständiges Zeichen ist und keine Modifikations-Taste. >> Tippe C-x 1 (im oberen Fenster) um das untere Fenster loszuwerden. (Hättest Du C-x 1 im unteren Fenster getippt, wäre das obere Fenster verschwunden. Merke Dir den Befehl mit "Behalte nur ein Fenster -- das aktuelle Fenster.") Du mußt nicht denselben Buffer in beiden Fenstern anzeigen. Wenn Du C-x C-f zum Finden einer Datei in einem Fenster verwendest, verändert sich das andere Fenster nicht. Du kannst in jedem Fenster unabhängig eine Datei finden. Hier ist eine andere Möglichkeit zwei Fenster zum Anzeigen verschiedener Dinge zu nutzen: >> Tippe C-x 4 C-f gefolgt vom Namen einer Deiner Dateien. Beende mit . Schau wie die angegebene Datei im unteren Fenster erscheint. Auch der Textzeiger folgt dorthin. >> Tippe C-x o um ins obere Fenster zurückzukehren und beende das untere Fenster mit C-x 1. * REKURSIVE BEARBEITUNGSEBENEN ------------------------------ Manchmal wirst Du in sogenannte rekursive Bearbeitungsebenen gelangen. Dies wird durch eckige Klammern in der Moduszeile angezeigt, welche den Namen des Hauptmodus umgeben. Du könntest z.B. [(Fundamental)] anstelle von (Fundamental) sehen. Um aus der rekursiven Bearbeitungsebene zu gelangen, tippst Du ESC ESC ESC. Dies ist ein allgemeiner Ausstiegs- oder "get out"-Befehl. Du kannst ihn auch verwenden, um unnötige Fenster loszuwerden und um aus dem Minibuffer zu gelangen. >> Tippe M-x um in den Minibuffer zu gelangen; dann ESC ESC ESC um auszusteigen. Du kannst nicht mit C-g aus einer rekursiven Bearbeitungs-Ebene gelangen. Dies deshalb, weil C-g zum Beenden von Befehlen und Argumenten INNERHALB von rekursiven Bearbeitungs-Ebenen dient. * WEITERFÜHRENDE HILFE ---------------------- In diesen einführenden Übungen haben wir versucht, gerade genug Information zu liefern, damit Du beginnen kannst mit Emacs zu arbeiten. Emacs ist so umfangreich, daß es unmöglich wäre, alles hier zu erklären. Allerdings solltest Du versuchen, mehr über Emacs zu lernen, da er so viele nützliche Vorzüge besitzt. Emacs bietet Befehle zum Lesen der Emacs-Befehlsdokumentation. Diese Hilfe- oder "help" Befehle beginnen alle mit dem Buchstaben CONTROL-h, den wir auch das "Hilfe-Zeichen" nennen. Um die Hilfeeinrichtungen zu verwenden, tippe C-h, gefolgt von einem Buchstaben der angibt, welche Art von Hilfe Du willst. Wenn Du Dich WIRKLICH "verirrst", tippe C-h ? und Emacs wird Dir mitteilen, welche Art von Hilfe zur Verfügung steht. Hast Du C-h getippt, willst aber keine Hilfe mehr, dann tippe einfach C-g zum Abbrechen des Befehls. (Einige Administratoren verändern die Bedeutung von C-h. Sie sollten dies wirklich nicht tun, beschwere Dich also beim System Administrator. In der Zwischenzeit, wenn C-h keine Mitteilung bezüglich Hilfe am Fuß des Emacs-Fensters anzeigt, versuche M-x help zu tippen.) Die einfachste Hilfe-Einrichtung ist C-h c. Tippe C-h, ein c und einen Befehls-Buchstaben oder eine Sequenz davon und Emacs gibt Dir eine ganz kurze Beschreibung des Befehls. >> Tippe C-h c C-p. Die Mitteilung sollte etwa wie folgt aussehen C-p runs the command previous-line Dies teilt Dir den "Namen der Funktion" mit. Funktions-Namen werden hauptsächlich zum Spezialisieren und Erweitern von Emacs verwendet. Aber da die Funktions-Namen etwas darüber aussagen was der Befehl tut, können Sie auch als sehr kurze Dokumentation dienen -- genug um Dich an Befehle zu erinnern die Du bereits gelernt hast. Zeichenerweiterte Befehle so wie C-x C-s und (wenn Du keine META- oder EDIT- oder ALT-Taste hast) v sind nach C-h c auch erlaubt. Um mehr Hilfe zu einem Befehl zu bekommen verwende C-h k anstelle von C-h c. >> Tippe C-h k C-p. Dies zeigt sowohl die Dokumentation der Funktion, als auch ihren Namen, in einem eigenen Emacs-Fenster. Wenn Du mit dem Lesen fertig bist, tippe C-x 1 um den Hilfetext loszuwerden. Du mußt dies nicht gleich tun. Du kannst etwas bearbeiten, das sich auf den Hilfetext bezieht und dann C-x 1 tippen. Hier sind einige andere nützliche C-h Möglichkeiten: C-h f Beschreibe eine Funktion. Du tippst den Namen der Funktion >> Versuche C-h f previous-line. Dies gibt Dir all die Information die Emacs zu der Funktion hat, welche C-p implementiert. C-h a Befehls-Apropos. Tippe ein Schlüsselwort und Emacs listet alle Befehle die es enthalten. Diese Befehle können alle mit M-x aufgerufen werden. Für einige Befehle listet das Befehls-Apropos eine Buchstaben-Sequenz, die den Befehl ausführt. >> Tippe C-h a file. Dies zeigt in einem anderen Fenster eine Liste aller M-x Befehle die "file" in ihrem Namen haben. Du wirst Buchstaben-Sequenzen wie C-x C-f mit dem entsprechenden Befehl, wie etwa find-file, aufgelistet sehen. >> Tippe C-M-v um das Hilfe Fenster zu rollen. Mache dies ein paar mal. >> Tippe C-x 1 um das Fenster loszuwerden. * ZUM SCHLUß ------------ Merke Dir, daß Du Emacs mit C-x C-c endgültig beendest. Um vorübergehend in eine Shell auszusteigen, so daß Du später zurückkehren kannst, verwende C-z. (Unter X ikonifiziert dies den aktuellen Emacs-Rahmen.) Dieses Tutorial sollte für Anfänger verständlich sein, hast Du etwas Unklares gefunden, schiebe die Schuld nicht auf Dich -- beschwere Dich! ANFERTIGEN VON KOPIEN --------------------- Dieses Tutorial stammt, über eine lange Linie von Emacs Tutorials, von dem von Stuart Cracraft für den ursprünglichen Emacs geschriebenen ab. Ben Wing hat das Tutorial für X Windows erweitert. Martin Buchholz und Hrvoje Niksic haben weitere Korrekturen für XEmacs beigetragen. Ins Deutsche übertragen wurde es von Adrian Aichner . Diese Version des Tutorials ist, wie GNU Emacs selbst, urheberrechtlich geschützt und erlaubt die Verteilung von Kopien unter bestimmten Voraussetzungen: Copyright (c) 1997-2000, Adrian Aichner . Copyright (c) 1985, 1996 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. Die Bedingungen zum Kopieren von Emacs sind komplexer, entsprechen aber dem selben Geist. Bitte lies die Datei COPYING und gib doch Kopien von GNU Emacs an Freunde weiter. Hilf mit bei der Beseitigung von Software-Verhinderungspolitik ("Besitz") durch das Verwenden, Schreiben and Weitergeben von kostenloser Software! xemacs-21.4.22/etc/TUTORIAL.fr0000644000175000017500000012755407560243310013625 0ustar acsacsCopyright (c) 1997-2000, Didier Verna . Se reporter à la fin du document pour les conditions. Vous lisez actuellement la version française du tutoriel d'Emacs. Cette version a été produite à partir de la version anglaise, qui est Copyright (c) 1985, 1996 Free Software Foundation, Inc. Bienvenue dans le tutoriel d'Emacs en Français !! La plupart des commandes d'Emacs utilisent la touche (également notée ou ), ou la touche . Sur certains claviers, la touche s'appelle , ou autre chose (sur les claviers des stations Sun par exemple, il s'agit de la touche à gauche de la barre espace, celle avec un petit losange). Si vous ne disposez pas de la touche , il est possible d'utiliser la touche à la place. Afin de décrire les combinaisons de touches disponibles dans Emacs, les conventions suivantes sont utilisées: C- signifie maintenir la touche enfoncée tout en tapant le caractère . Ainsi, C-f signifie «maintenir la touche enfoncée, et taper 'f'». M- signifie maintenir la touche enfoncée tout en tapant le caractère . Si la touche n'est pas disponible, tapez d'abord , relâchez la, puis tapez . NOTE IMPORTANTE: pour quitter Emacs, tapez C-x C-c (deux caractères). Quand vous trouvez les caractères >> au début d'une ligne, cette ligne vous donne des directives pour essayer une commande. Par exemple: <> >> Maintenant, tapez C-v («view next screen») pour passer à l'écran suivant. (Faites le vraiment! Maintenez la touche enfoncée et tapez 'v'). À partir de maintenant, refaites la même chose quand vous avez fini de lire tout l'écran. Remarquez que quand vous changez d'écran, les deux dernières lignes de l'écran précédent sont conservées, ceci afin de conserver un minimum de continuité dans la lecture. Une des premières choses à savoir dans Emacs est comment se déplacer dans un texte. Vous savez déjà comment changer d'écran avec C-v. Pour revenir d'un écran en arrière, tapez M-v (maintenez la touche enfoncée tout en appuyant sur 'v', ou encore tapez -v si vous ne disposez pas de , ou ). >> Essayez de taper M-v puis C-v un certain nombre de fois. * RÉSUMÉ -------- Les commandes suivantes sont utiles pour voir des écrans entiers: C-v Passer à l'écran suivant M-v Revenir à l'écran précédent C-l Effacer l'écran et tout retracer, en mettant la ligne où se trouve le curseur au centre (C'est bien la touche 'L', pas la touche 'un' >> Trouvez le curseur et rappelez vous bien du texte qui l'entoure. Tapez C-l Trouvez le curseur à nouveau, et remarquez qu'il s'agit bien du même texte autour de lui. * MOUVEMENTS DE BASE DU CURSEUR ------------------------------- Passer d'un écran à l'autre, c'est bien ... mais comment faire pour se déplacer dans le texte d'un seul écran? Il existe plusieurs manières de faire. La plus simple est d'utiliser les commandes C-p, C-b, C-f et C-n. Chacune de ces commandes déplace le curseur d'une ligne ou d'une colonne dans une direction donnée, comme illustré sur le diagramme suivant: Ligne précédente, C-p : : En arrière, C-b .... Position courante .... En avant, C-f : : Ligne suivante, C-n >> Déplacez le curseur au centre de ce diagramme en utilisant C-n ou C-p, puis placez le au centre de l'écran avec C-l. Pour vous rappeler ces commandes, pensez à leur signification en anglais (et oui, pas en français ...): F pour Forward, B pour Backward, N pour Next, P pour Previous. Retenez bien ces commandes, car vous vous en servirez très souvent. >> Amenez le curseur sur cette ligne avec quelques C-n. >> Déplacez vous sur la ligne avec des C-f, puis vers le haut avec des C-p. Remarquez ce que fait C-p quand le curseur est au milieu de la ligne. Chaque ligne de texte se termine avec un caractère nommé Newline, qui sert à séparer les lignes entre elles. La dernière ligne du fichier est censée avoir un tel caractère à la fin (bien qu'Emacs n'ait pas particulièrement besoin de sa présence). >> Placez vous au début d'une ligne, et tapez C-b. Cela devrait vous placer à la fin de la ligne précédente. En fait, on a juste reculé d'un caractère, à travers le caractère Newline. C-f vous déplace à travers Newline, exactement comme C-b. >> Faites encore quelques C-b, pour bien sentir comment se déplace le curseur, puis des C-f pour retourner à la fin de la ligne, et pour finir encore un C-f pour aller au début de la ligne suivante. Si vous vous déplacez en dehors de l'écran, le texte se déplace de manière à ce que la position du curseur redevienne visible. Cette opération est appelée «scrolling». >> Déplacez le curseur jusqu'en bas de l'écran, et remarquez ce qu'il se passe. Si vous trouvez que le déplacement caractère par caractère est trop lent, vous pouvez vous déplacer mot par mot. M-f et M-b vous déplacent respectivement d'un mot en avant et en arrière. >> Tapez quelques M-f et M-b. Si vous êtes au milieu d'un mot, M-f vous déplace à la fin du mot. Si vous êtes entre deux mots, M-f vous déplace à la fin du mot suivant. M-b produit le même comportement, en sens inverse. >> Mélangez quelques M-f et M-b avec quelques C-f et C-b pour bien noter les différences de comportement suivant l'endroit où vous êtes. Remarquez le parallèle qui existe entre C-f et C-b d'un côté, et M-f et M-b de l'autre. Très souvent, les commandes Meta agissent sur des unités de langage (mots, phrases, paragraphes etc.) tandis que les commandes Control agissent sur des unités plus primaires (caractères, lignes etc.). Ce parallèle existe encore entre les lignes et les phrases: C-a et C-e vous positionnent au début ou à la fin d'une ligne, tandis que M-a et M-e vous déplacent au début ou à la fin d'une phrase. >> Tapez quelques C-a et quelques C-e. Puis tapez quelques M-a et quelques M-e. Remarquez que plusieurs C-a ne font rien, mais que plusieurs M-a n'arrêtent pas de vous faire remonter de phrase en phrase. La position du curseur sur dans le texte est aussi appelée le «point». En d'autres termes, le curseur à l'écran se trouve où le point est dans le texte. Voici un résumé des commandes simples de déplacement, y compris celles relatives aux mots et aux phrases: C-f En avant d'un caractère C-b En arrière d'un caractère M-f En avant d'un mot M-b En arrière d'un mot C-n Ligne suivante C-p Ligne précédente C-a Début de ligne C-e Fin de ligne M-a Début de phrase M-e Fin de phrase >> Entraînez vous un peu à la pratique de ces commandes. Elles sont très souvent utilisées. Deux autres commandes importantes pour le déplacement sont M-< (Meta-Inférieur) et M-> (Meta-Supérieur). Elles vous déplacent respectivement au début et à la fin de tout le texte. Sur la plupart des terminaux, '<' se trouve au dessus de la virgule. Il faut donc utiliser la touche pour l'obtenir, sans quoi vous obtiendrez M-'virgule'. >> Tapez M-< pour retourner au début du texte. Puis tapez plusieurs C-v pour revenir ici. >> Tapez M-> pour aller à la fin du texte. Puis tapez plusieurs M-v pour revenir ici. Vous pouvez aussi déplacer le curseur avec les flèches, si votre clavier en possède. Il est cependant préférable d'utiliser C-b C-f C-n et C-p pour trois raisons: premièrement, ces commandes fonctionnent sur tous les terminaux. Deuxièmement, quand vous vous serez habitué à Emacs, vous découvrirez que ces touches sont plus rapides car vous n'avez pas besoin de déplacer vos mains loin des lettres du clavier. Enfin, quand vous aurez l'habitude d'utiliser la touche , vous apprendrez plus facilement d'autres commandes de déplacement plus complexes. La plupart des commandes d'Emacs acceptent un argument numérique, qui sert souvent comme compteur de répétition. Pour donner un tel argument à une fonction, tapez C-u puis les chiffres, et enfin entrez la commande. Si vous disposez de la touche (ou ou ), vous pouvez aussi tapez directement les chiffres tout en maintenant la touche enfoncée. Il est préférable d'apprendre la méthode C-u car elle fonctionne sur tous les terminaux. Par exemple, C-u 8 C-f vous déplace de huit caractères en avant. >> Essayez d'utiliser C-n avec un argument numérique pour vous déplacer d'un seul coup sur une autre ligne. Certaines commandes n'interprètent pas leur argument numérique comme un compteur de répétition. C'est le cas de C-v et M-v qui déplacent le texte d'autant de lignes plutôt que d'écrans entiers. Par exemple, C-u 4 C-v déroulera l'écran de 4 lignes. >> Essayez C-u 8 C-v. Cela a du déplacer l'écran de 8 lignes. Pour faire la manoeuvre inverse, donnez le même argument a M-v. Si vous travaillez sous X Window, il y a sans doute une scrollbar sur le côté droit de la fenêtre d'Emacs. Vous pouvez aussi vous en servir avec la souris pour déplacer le texte. >> Essayer de cliquer avec le deuxième bouton au dessus du bouton de la scrollbar. Cela devrait dérouler le texte jusqu'à une position déterminée par l'endroit où vous avez cliqué. >> Cliquez maintenant avec le premier bouton à quelques lignes du sommet dans la scrollbar. * CONTRôLE DU CURSEUR AVEC UN TERMINAL X ---------------------------------------- Si vous travaillez sur un terminal X, vous trouverez surement plus facile d'utiliser les flèches du pavé numérique pour déplacer le curseur. Les quatre flèches fonctionnent exactement comme C-f C-b C-n et C-p mais sont plus faciles à retenir. Vous pouvez aussi les combiner avec la touche pour vous déplacer par bloc (par exemple par paragraphe dans un texte). Si votre pavé numérique dispose de touches (ou ) et , elles vous déplaceront respectivement en début et en fin de ligne. Combinées avec la touche , elles vous déplaceront respectivement en début et en fin de fichier. Si enfin votre pavé numérique dispose des touches et , celles-ci vous déplaceront d'écran en écran comme C-v et M-v. Toutes ces commandes acceptent des arguments numériques comme décrit précédemment. * QUAND EMACS EST BLOQUÉ ------------------------ Si jamais Emacs ne répond plus à vos ordres, vous pouvez l'arrêter en toute sécurité en tapant C-g. C-g peut aussi être utilisé pour stopper une commande qui met trop de temps à s'exécuter. C-g sert également à annuler un argument numérique, ou une commande que vous ne voulez plus mener à terme. >> Tapez C-u 1 0 0 pour produire un argument numérique de 100, puis tapez C-g. Maintenant, tapez C-f. Le curseur doit finalement ne bouger que d'un seul caractère, puisque vous avez annulé l'argument. Si vous avez tapé un par erreur, vous pourrez toujours l'annuler avec C-g. * COMMANDES DÉSACTIVÉES ----------------------- Quelques commandes sont «désactivées» pour empêcher les nouveaux utilisateurs de les appeler par accident. Si vous tapez une de ces commandes, Emacs ouvrira un message vous disant quelle était cette commande, et vous demandant si vous voulez vraiment poursuivre son exécution. Si vous souhaitez effectivement l'essayer, appuyez sur la barre espace. Sinon, répondez à la question en tapant 'n'. >> Tapez `C-x n p' (commande désactivée), puis répondez par 'n'. * FENÊTRES ---------- Emacs peut afficher plusieurs fenêtres, chacune avec un texte différent. Le terme «fenêtre» signifie ici une zone particulière dans la fenêtre d'Emacs; il ne s'agit pas de fenêtres pouvant se superposer dans votre système de multifenétrage. Emacs peut aussi ouvrir plusieurs fenêtres X (appelées «frames» en jargon Emacsien), mais ceci est décrit ultérieurement. Pour l'instant, mieux vaut ne pas trop s'occuper de plusieurs fenêtres simultanées, sauf peut-être pour savoir les éliminer toutes sauf une. Ceci est effectué par la commande C-x 1 ('un', pas 'L'). Cette commande tue toutes les fenêtres sauf celle dans laquelle vous vous trouvez, et s'arrange pour que la fenêtre restante occupe toute la place. >> Amenez le curseur ici, puis tapez C-u 0 C-l. (Rappelez vous que C-l recentre le curseur au milieu de la fenêtre. Avec un argument numérique, elle place la ligne courante à autant de lignes du sommet de la fenêtre. Avec 0 comme argument, on réaffiche donc le texte, en plaçant la ligne courante en haut.) >> Tapez Control-x 2 Notez que cette fenêtre diminue (de moitié), et qu'une nouvelle fenêtre apparaît (avec le même texte). >> Tapez C-x 1 pour faire à nouveau disparaître la deuxième fenêtre. * INSÉRER ET EFFACER -------------------- Pour insérer du texte, il suffit de le taper. Tous les caractères que vous pouvez voir à l'écran (A, %, - etc.) sont considérés comme du texte et sont insérés. Pour insérer le caractère Newline, tapez (retour chariot). Vous pouvez effacer le dernier caractère que vous avez tapé avec la touche parfois nommée «Del». La touche peut quelques fois être utilisée de la même manière, mais pas tout le temps! Plus généralement, efface le caractère situé juste avant le curseur. >> Maintenant, tapez quelques caractères, puis effacez-les avec . Ne vous inquiétez pas pour le contenu de ce tutoriel, ce que vous avez à l'écran n'est que votre copie personnelle du fichier, pas le fichier d'origine. Si une ligne de texte devient trop grande, elle se poursuit sur une seconde ligne. Un «Backslash» ('\') situé tout à fait à droite de la ligne indique que celle-ci continue sur la ligne suivante. >> Insérez des caractères jusqu'à ce que la ligne devienne trop grande, et notez l'apparition du '\'. >> Utilisez pour effacer des caractères jusqu'à ce que la ligne reprenne une taille raisonnable. Vous remarquerez que le '\' disparaît. Le caractère Newline s'efface exactement comme les autres. L'effacer revient à ne faire qu'une seule ligne à partir de deux. Si cette nouvelle ligne est trop grande, le '\' apparaîtra a nouveau. >> Déplacez le curseur au début d'une ligne et tapez . Le caractère Newline sera effacé et cette ligne sera ajoutée à la ligne précédente. >> Tapez pour réinsérer le Newline que vous avez effacé. Rappelez-vous bien que la plupart des commandes acceptent un argument numérique, y compris l'insertion de caractères: >> Tapez C-u 8 *, vous obtiendrez "********". Vous connaissez maintenant les commandes de base pour insérer du texte et corriger des erreurs. Toujours grâce aux touches et , vous pouvez aussi effacer du texte par mot ou par ligne: efface le caractère juste avant le curseur C-d efface le caractère juste après le curseur M- supprime le mot juste avant le curseur M-d supprime le mot juste après le curseur C-k supprime tout du curseur jusqu'à la fin de ligne M-k supprime tout du curseur jusqu'à la fin de phrase Quand vous supprimez plus d'un caractère à la fois, Emacs sauvegarde le texte pour vous donner la possibilité de le réintroduire. L'opération de réintroduction s'appelle le «yanking». Vous pouvez réintroduire le texte à la même place ou ailleurs. Vous pouvez même le réintroduire plusieurs fois, pourquoi pas à des endroits différents. La commande de «yanking» est C-y. Notez bien la différence entre «effacer» et «supprimer». Un texte «supprimé» est sauvegardé, tandis qu'un caractère «effacé» ne l'est pas. De même, les commandes effaçant juste des blancs ou des lignes vides ne sauvegardent rien. >> Placez le curseur au début d'une ligne non vide. Tapez C-k pour supprimer le texte sur cette ligne. >> Tapez C-k une deuxième fois. Vous remarquerez que cette fois-ci, la ligne elle-même est supprimée (le caractère Newline). C-k traite son argument numérique de manière spéciale: il supprime autant de lignes Y COMPRIS LE CARACTÈRE NEWLINE. Taper C-k deux fois de suite ne produirait pas le même résultat. >> Pour récupérer le texte dernièrement supprimé, tapez C-y. Celui-ci sera placé où se trouve le curseur. Notez également que si vous faites plusieurs C-k à la suite, tout les morceaux supprimés seront concaténés, et un seul C-y suffira à tout ramener. >> Faites-le. C-k plusieurs fois, puis C-y. >> Déplacez le curseur à un autre endroit puis tapez à nouveau C-y. Voilà comment on copie du texte! C-y restaure le dernier morceau de texte à avoir été supprimé, mais les suppressions précédentes ne sont pas perdues pour autant. Après avoir tapé C-y, la commande M-y remplace le texte restauré par l'avant dernière suppression. Tapez à nouveau M-y et vous obtiendrez l'avant-avant dernière suppression et ainsi de suite. Quand vous avez récupéré le texte que vous cherchiez, rien de plus à faire: continuez simplement votre édition. Si vous tapez M-y assez longtemps, vous retomberez sur la suppression la plus récente. >> Supprimez une ligne, déplacez vous et supprimez-en une autre. Tapez C-y pour récupérer la dernière ligne. Puis tapez M-y, ce qui restaurera la première ligne supprimée. Tapez encore M-y pour voir ce qu'il se passe, et continuez jusqu'à récupérer à nouveau la deuxième ligne. Si ça vous amuse, donnez des arguments positifs et négatifs à M-y. * ANNULATION ------------ Si vous changez du texte, et que finalement vous décidez que ce n'était pas une bonne idée, vous pouvez annuler les changements grâce à la commande C-x u. C-x u annule les changements produits par la dernière commande. Taper C-x u plusieurs fois annule de plus en plus de commandes précédentes. Il existe cependant quelques exceptions: les commandes qui ne changent pas le texte ne comptent pas (par exemple les commandes de déplacement). Les commandes qui insèrent juste un caractère sont souvent regroupées jusqu'à une vingtaine, ceci pour réduire le nombre de C-x u à taper ensuite. >> Supprimez cette ligne avec C-k, puis tapez C-x u. Elle devrait revenir ... Une alternative à C-x u est C-_. C-x u existe car c'est plus facile à taper sur certains claviers. Sur d'autres vous pouvez également obtenir C-_ en tapant C-/. Enfin, la commande d'annulation accepte les argument numériques. * FICHIERS ---------- Pour sauver votre texte, vous avez besoin de le mettre dans un fichier, sans quoi il disparaîtra quand vous quitterez Emacs. On dit «trouver» un fichier («finding»), ou encore «visiter» un fichier («visiting»), ou bien «ouvrir». Visiter un fichier revient à voir son contenu dans Emacs. Si vous modifiez le texte du fichier dans Emacs, ces changements ne deviennent pas permanent, sauf si vous «sauvez» le fichier. Cela permet de ne pas avoir des fichiers à moitié modifiés sur votre système, à moins que vous ne le souhaitiez vraiment. D'autre part, quand Emacs «sauve» un fichier, il commence par copier l'ancienne version sous un nouveau nom afin que vous puissiez toujours revenir en arrière. Regardez en bas de la fenêtre d'Emacs. Vous trouverez une ligne contenant des tirets '-', et la chaîne de caractères «Emacs: TUTORIAL.FRANCAIS». Cela vous donne le nom du fichier que vous êtes en train de visiter. En ce moment, vous visitez le fichier «TUTORIAL.FRANCAIS» qui correspond au Tutoriel d'Emacs, version française. Ceci est votre copie personnelle du fichier. Pour chaque fichier que vous visitez, son nom apparaît exactement à cet endroit. La plupart des commandes relatives aux fichiers sont des commandes à deux caractères, commençant par C-x. Il y a toute une série de commandes commençant par C-x, beaucoup concernant les fichiers et les buffers, et longues de 2 caractères ou plus. Une autre chose importante pour visiter un fichier est que vous devez spécifier le nom du fichier à visiter. On dit que cette commande «lis un argument depuis le terminal». Dans le cas présent, l'argument est le nom du fichier. Après avoir tapé la commande C-x C-f («find») Emacs vous demande son nom. Le nom que vous tapez apparaît tout en bas de la fenêtre. Quand cette ligne sert à entrer des données de cette manière, on l'appelle «minibuffer». Les commandes d'édition ordinaires peuvent être utilisées pour éditer le nom du fichier. Pendant que vous êtes en train de taper le nom du fichier, vous pouvez annuler la commande grâce à C-g. >> Tapez C-x C-f puis C-g. Cela annule le minibuffer ainsi que la commande C-x C-f. Vous n'allez finalement pas visiter de fichier. Quand le nom du fichier est correct, tapez . La commande prendra alors effet et ira chercher le fichier. Après avoir terminé la saisie du nom, le minibuffer disparaît. Au bout d'un petit moment, le contenu du fichier apparaît et vous pouvez commencer votre édition. Quand vous êtes satisfait des changements apportés au texte, tapez C-x C-s («save») Cette commande copie le texte contenu dans Emacs vers le fichier lui-même. La première fois que vous le faites, Emacs sauvegarde la version initiale du fichier sous un autre nom, en ajoutant un '~' à la fin du nom. Quand la sauvegarde est terminée, Emacs affiche le nom du fichier dans lequel on vient d'écrire. Il est fortement conseillé de sauver assez souvent les fichiers pour éviter de tout perdre en cas de crash système (non pas qu'Emacs ne puisse jamais crasher lui-même ...). >> Tapez C-x C-s pour sauver votre copie du tutoriel. Vous devriez voir apparaître «Wrote ...TUTORIAL.FRANCAIS" tout en bas de la fenêtre. NOTE: Sur certains systèmes, C-x C-s bloque l'écran et Emacs ne dit plus rien. Cela signifie qu'une «fonctionnalité» système que l'on appelle le «flow control» intercepte le C-s et l'empêche de parvenir à Emacs. Pour débloquer la situation, tapez C-q. Reportez-vous dans ce cas à la section «Spontaneous Entry to Incremental Search» du manuel d'Emacs pour plus d'information sur cette ... «particularité». Vous pouvez visiter des fichiers existant, mais aussi des fichiers qui n'existent pas. C'est en fait comme cela que l'on crée un nouveau fichier dans Emacs. Initialement, le fichier sera inexistant, et la première fois que vous demanderez à Emacs de le sauver, il créera effectivement le fichier correspondant. * BUFFERS --------- Si vous ouvrez un nouveau fichier avec C-x C-f, le précédent reste dans Emacs. Pour retravailler dessus, retapez simplement C-x C-f. De cette manière, vous pouvez avoir un nombre important de fichiers ouverts dans Emacs. >> Créez un fichier nommé «foo» en tapant C-x C-f foo. Insérez un peu de texte puis sauvez-le en tapant C-x C-s. Enfin, tapez C-x C-f TUTORIAL.FRANCAIS pour revenir ici. Emacs conserve le contenu de chaque fichier dans un objet appelé «buffer». Visiter un fichier revient à créer un nouveau buffer et y placer le contenu du fichier. Pour obtenir la liste des buffers qui existent actuellement dans votre session Emacs, tapez la commande suivante: >> Tapez C-x C-b pour obtenir la liste des buffers. Remarquez que chaque buffer a un nom, et qu'il peut aussi avoir un nom de fichier dans le cas où un fichier lui est associé. Il extsite des buffers non attachés à des fichiers, par exemple, le buffer nommé «*Buffer List*». C'est le buffer qui a été créé par la commande C-x C-b. Par contre, TOUT texte que vous pouvez voir dans Emacs appartient à un buffer. >> Tapez C-x 1 pour faire disparaître le buffer contenant la liste des buffers. Quand vous éditez un fichier, puis que vous en ouvrez un autre, le fichier précédent n'a pas été sauvé. Tous les changements effectués sont conservés dans le buffer associé au fichier, mais l'ouverture et l'édition d'un nouveau fichier n'ont aucun effet sur le premier. Vous constatez donc qu'il serait ennuyeux d'avoir à revenir au premier fichier pour le sauver avec C-x C-s. Pour éviter ce désagrément, il existe une autre commande: C-x s (Sauver certains buffers) C-x s vous demandera, pour chaque buffer contenant des modifications non sauvegardées, si vous désirez le sauver ou non. >> Insérez une ligne de texte, puis tapez C-x s Emacs vous demandera si vous désirez sauver le buffer nommé TUTORIAL.FRANCAIS. Répondez «oui» à la question en tapant 'y'. * UTILISATION DES MENU ---------------------- Si vous travaillez sur un terminal X, vous avez déjà remarqué une barre de menu en haut de la fenêtre d'Emacs. Cette barre de menu vous permet d'accéder à la plupart des commandes d'Emacs comme celles permettant d'ouvrir ou de sauver un fichier. L'utilisation de la barre de menu vous semblera plus facile au début, puis quand vous serez habitué à Emacs, il vous sera facile d'utiliser les commandes au clavier, car chaque commande figurant dans un menu affiche également son équivalent clavier sur le bouton. Remarquez qu'il existe des boutons n'ayant aucun équivalent clavier. Par exemple, le menu «Buffers» donne la liste de tous les buffers par ordre de plus récente utilisation. Vous pouvez passer d'un buffer à l'autre en les sélectionnant par leur nom dans ce menu. * UTILISATION DE LA SOURIS -------------------------- Quand vous travaillez sous X, Emacs utilise pleinement la souris. Vous pouvez vous positionner dans le texte en cliquant avec le bouton de gauche à l'endroit souhaité, vous pouvez sélectionner du texte en déplaçant la souris avec le bouton de gauche enfoncé, ou bien en cliquant le bouton de gauche au début de la portion à sélectionner, puis en Shift-cliquant à l'autre bout. Pour supprimer un morceau de texte, utilisez C-w ou le bouton «Cut» du menu «Edit». Notez bien que ces deux commandes ne sont pas équivalentes: C-w ne fait que supprimer le texte en le sauvegardant de manière interne (comme C-k), mais «Cut» sauvegarde en plus le texte dans le clipboard de X Window, où il pourra être accédé par d'autres applications. Pour récupérer du texte en provenance d'autres applications, utilisez «Paste» du menu «Edit». Le bouton du milieu sert principalement à choisir des objets visibles dans les fenêtres d'Emacs. Par exemple, si vous entrez dans «Info» (le système de documentation en ligne) en tapant C-h i ou en utilisant le menu «Help», vous pourrez suivre un lien surligné en cliquant dessus avec le bouton du milieu. De la même manière, si vous commencez à taper un nom de fichier après avoir fait C-x C-f, et que vous appuyez sur en cours de route, Emacs vous ouvrira une fenêtre avec toutes les complétions possibles, et vous pourrez en sélectionner une grâce au bouton du milieu. Le bouton droit fait apparaître un menu. Le contenu de ce menu varie en fonction du mode dans lequel vous vous trouvez, et contient en général quelques commandes fréquemment utilisées. >> Cliquez avec le bouton de droite pour voir le menu en question. Si vous relâchez le bouton, le menu disparaît. * EXTENSION DE L'ENSEMBLE DES COMMANDES --------------------------------------- Il existe bien plus de commandes dans Emacs que l'on ne pourrait en associer aux touches et . Pour remédier à cela, Emacs utilise la commande X (eXtension) qui se présente sous deux aspects: C-x Extension par caractère (suivit d'un caractère). M-x Extension par nom (suivit d'un nom de commande). Ces commandes, bien que très utiles, sont utilisées moins souvent que celles que vous avez déjà apprises. Vous en connaissez déjà deux: les commandes relatives aux fichiers (C-x C-f et C-x C-s). Un autre exemple est la commande pour quitter définitivement Emacs, C-x C-c (ne vous inquiétez pas des éventuels changements qui seraient perdus, C-x C-c vous propose de sauver ces changements avant de tuer Emacs). C-z est la commande qui vous permet de quitter Emacs «temporairement», pour que vous puissiez y revenir plus tard. Sur les systèmes le permettant, C-z «suspend» Emacs, ce qui signifie que l'on retourne au shell sans tuer Emacs. Dans la plupart des cas, vous pouvez revenir à Emacs en tapant 'fg' ou '%emacs'. Sur les systèmes ne permettant pas la suspension de processus, cette commande créé un sous-shell qui continue à exécuter Emacs, vous donnant ainsi la possibilité de faire tourner d'autres programmes et revenir à Emacs plus tard. Dans ce cas, la commande shell 'exit' est la manière habituelle de retourner au sous-shell d'Emacs. Vous utiliserez C-x C-c quand le moment sera venu de vous déloguer ou d'éteindre la machine. C'est aussi la bonne manière de sortir d'Emacs si celui-ci a été lancé depuis un maileur ou tout autre utilitaire, ceux-ci ne sachant pas forcément comment gérer les suspensions. Dans des circonstances où vous ne vous déloguez pas, mieux vaut suspendre par C-z au lieu de sortir véritablement d'Emacs. Il existe de nombreuses commandes sous C-x. Voici celles que vous avez apprises jusque là: C-x C-f Visiter un fichier (Find File). C-x C-s Sauver un fichier (Save File). C-x C-b Lister les buffers (List buffers). C-x C-c Quitter Emacs (Quit Emacs). C-x u Annuler Opération (Undo). Les commandes étendues par nom sont des commandes utilisées très peu souvent, ou disponibles seulement sous certains modes. Par exemple, la commande «replace-string» substitue globalement une chaîne de caractères par une autre. Si vous tapez M-x, Emacs vous affichera M-x en bas de la fenêtre et vous pourrez alors taper le nom d'une commande, ici replace-string. Tapez simplement 'repl s ' et Emacs complétera le nom pour vous. Terminez le nom avec La commande replace-string requiert deux arguments: la chaîne à remplacer et la chaîne de remplacement. Terminez chacune de ces chaînes par . >> Déplacez le curseur sur la ligne blanche en dessous de ce paragraphe, puis tapez M-x replsRemarquezNotez. Remarquez comme cette ligne a changé: le mot R-e-m-a-r-q-u-e-z a été remplacé par N-o-t-e-z partout où il est apparu après le curseur. * SAUVEGARDE AUTOMATIQUE ------------------------ Si votre système crashe alors que certaines modifications n'étaient pas sauvées, vous perdez des donnés. Pour remédier à ce problème, Emacs sauvegarde périodiquement tous vous fichiers, et cela de manière automatique. Ce fichier de sauvegarde est appelé «auto save». Son nom commence et se termine par un '#'. Par exemple, un fichier auto save de 'hello.c' a pour nom '#hello.c#'. Quand vous sauvez le fichier de manière normale, le fichier auto save est effacé. Si votre ordinateur crashe, vous pouvez restaurer la sauvegarde en ouvrant le fichier normalement (le VRAI fichier, pas l'auto save), puis en tapant M-x recover-file. Répondez 'yes' à la question. * ZONE D'ÉCHO ------------- Quand Emacs constate que vous tapez lentement, il vous montre ce que vous avez tapez en bas de la fenêtre, dans la zone d'écho («echo area»). Cette zone contient la dernière ligne de la fenêtre d'Emacs. * LIGNE DE MODE --------------- La ligne juste au dessus de la zone d'écho s'appelle ligne de mode («modeline»). Elle dit actuellement quelque chose comme ça: --**-XEmacs: TUTORIAL.FRANCAIS (Fundamental)--L752--67%--------- Cette ligne fournit des renseignements utiles sur le status d'Emacs et le texte que vous éditez. Vous connaissez déjà la signification du nom de fichier: c'est celui que vous êtes en train d'éditer. -xx%- indique le pourcentage de texte situé au dessus du curseur. Si vous pouvez voir le début du fichier à l'écran, --Top-- sera indiqué au lieu de --00%--. Si le bas du fichier est visible, il y aura --Bot-- à la place. Si votre texte est tout entier contenu dans la fenêtre, vous verrez --All--. Les étoiles '*' au début signifient que vous avez fait des changements au texte. Quand vous ouvrez le fichier, ou après l'avoir sauvé, il n'y aura plus d'étoiles, mais juste des tirets. La partie entre parenthèses vous indique dans quel mode d'édition vous vous trouvez. Le défaut (que vous utilisez en ce moment) est le mode «Fundamental». C'est un exemple de Mode Majeur («major mode»). Il existe de nombreux modes majeurs. Certains sont faits pour éditer différents langages, différentes sortes de texte, du Lisp, du C etc. Il ne peut y avoir qu'un mode majeur actif à la fois, et son nom se trouve sur la ligne de mode (là ou vous voyez «Fundamental» en ce moment). Chaque mode fait certaines commandes se comporter différemment. Par exemple, la commande pour créer des commentaires dans un programme tient compte des différents caractères de commentaire des langages. Chaque mode majeur est le nom d'une commande étendue. Par exemple la commande M-x fundamental-mode vous place en mode fondamental. Si vous voulez éditer du texte en français, vous devriez plutôt choisir le mode Text. >> Tapez M-x text-mode Pas d'inquiétude: les commandes que vous avez apprises jusqu'ici ne sont pas radicalement différentes d'un mode à l'autre. Mais vous pouvez constater par exemple que M-b et M-f traitent les apostrophes comme faisant partie des mots. Auparavant, ces caractères étaient considérés comme des séparateurs de mots. En général, les modes majeurs ne changent que très peu le comportement des commandes habituelles. Pour voir la documentation du mode majeur courant, tapez C-h m. >> Utilisez C-u C-v pour amener cette ligne vers le haut de l'écran. >> Tapez C-h m, pour voir les différences entre les mode Fundamental et Text. >> Tapez 'q' pour faire disparaître la documentation. Les modes majeurs sont appelés «majeurs» parce qu'il y en a aussi des «mineurs». Les modes mineurs n'altèrent que partiellement le comportement de tel ou tel mode majeur. Ils peuvent être activés ou désactivés indépendamment du mode majeur courant. Vous pouvez en utiliser autant que possible en même temps. Un mode mineur très utile pour éditer du texte est le mode «Auto Fill». Quand ce mode est activé, Emacs coupe lui-même les lignes si vous tapez du texte trop long pour être contenu sur une seule. Pour activer ce mode, tapez M-x auto-fill-mode. Cette commande sert à le désactiver ou à l'activer selon son status actuel; elle intervertit son état d'activation. >> Tapez M-x auto-fill-mode. Insérez maintenant une quantité de «aslidfhw» jusqu'à voir que votre ligne se divise automatiquement en deux, à un endroit où il y avait un espace. La marge est en général à 70 caractères, mais vous pouvez la changer grâce à la commande C-x f. Donner la marge requise comme argument numérique. >> Tapez C-x f avec un argument de 20 (C-u 2 0 C-x f). Tapez du texte jusqu'à ce que la ligne soit coupée, puis replacez la marge à 70. Si vous faites des changements au milieu d'un paragraphe, le mode Auto Fill ne recoupera pas les lignes tout seul. Pour réajuster les lignes d'un tel paragraphe, tapez M-q avec le curseur n'importe où dans le paragraphe. >> Déplacez le curseur dans le paragraphe précédent, et tapez M-q. * RECHERCHE ----------- Emacs est capable de rechercher des chaînes de caractères aussi bien en avant qu'en arrière dans un texte. Ces commandes sont en fait des commandes de déplacement du curseur. Elles déplacent le curseur au prochain (ou précédent) endroit ou la chaîne apparaît. La commande de recherche d'Emacs est un peu différente de celle des autres éditeurs de texte dans la mesure où elle est incrémentale: la recherche intervient au fur et à mesure que vous tapez la chaîne à rechercher. Pour démarrer une recherche, tapez C-s (en avant) ou C-r (en arrière). MAIS PAS TOUT DE SUITE !! Attendez un peu pour tester ... Après avoir tapé C-s, vous constaterez que la chaîne «I-search» apparaît comme prompt dans la zone d'écho. Cela vous indique qu'Emacs est en mode de recherche incrémentale, et qu'il attend que vous entriez la chaîne à rechercher. termine la chaîne. >> Tapez C-s, et entrez LENTEMENT, une lettre à la fois, le mot «curseur», en regardant bien ce qu'il se produit. À ce stade, vous avez cherché le mot «curseur» une fois. >> Tapez C-s à nouveau, pour chercher la prochaine occurrence du mot. >> Maintenant, tapez quatre fois et regardez comment le curseur se déplace. >> Tapez pour terminer la recherche. En mode incrémental, Emacs recherche ce que vous avez tapé jusqu'ici, en surlignant les occurrences trouvées. Si aucune (nouvelle) occurrence n'existe, C-s produira un «bip», et la zone d'écho affichera «failing». C-g terminerait aussi bien la recherche. NOTE: Sur certains systèmes, C-x C-s bloque l'écran et Emacs ne dit plus rien. Cela signifie qu'une «fonctionnalité» système que l'on appelle le «flow control» intercepte le C-s et l'empêche de parvenir à Emacs. Pour débloquer la situation, tapez C-q. Reportez-vous dans ce cas à la section «Spontaneous Entry to Incremental Search» du manuel d'Emacs pour plus d'information sur cette ... «particularité». Si vous êtes au milieu d'une recherche incrémentale et que vous tapez , vous constaterez que le dernier caractère de la chaîne est effacé, et que Emacs retourne à l'occurrence précédente. Si d'autre part vous tapez un caractère ou (mises à part quelques exceptions comme les caractères spéciaux pour la recherche, C-s et C-r), la recherche sera terminée. Rappelez vous que si C-s cherche une chaîne APRÈS le curseur, C-r la recherche AVANT. Tout ce que nous venons de dire sur C-s s'applique à C-r. * FENÊTRES MULTIPLES -------------------- Un des avantages d'Emacs est que vous pouvez afficher plusieurs fenêtres à la fois sur l'écran. >> Déplacez le curseur sur cette ligne, et tapez C-u 0 C-l ('L' pas '1') >> Maintenant tapez C-x 2 pour obtenir deux fenêtres. Les deux fenêtres affichent le tutoriel. Le curseur reste en haut. >> Tapez C-M-v (ou C-v) pour dérouler la fenêtre du bas. >> Tapez C-x o (o pour ôtre ...) pour placer le curseur dans la fenêtre du bas. >> Utilisez C-v et M-v pour dérouler la fenêtre. Continuez de lire dans celle du haut. >> Tapez C-x o pour retourner dans la fenêtre du haut. Le curseur est exactement à la même place que quand vous aviez quitté cette fenêtre. Vous pouvez continuer d'utiliser C-x o pour passer d'une fenêtre à l'autre. Chaque fenêtre a sa propre position du curseur, mais une seule fenêtre a la fois contient réellement le curseur. Toutes les commandes ordinaires d'édition prennent effet dans la fenêtre qui contient le curseur. On dit que cette fenêtre est «sélectionnée». La commande C-M-v est très utile quand vous éditez un texte dans une fenêtre et que vous vous servez d'une autre en guise de référence. Vous pouvez avancer dans l'autre grâce à C-M-v. C-M-v (ou C-v si vous n'avez pas de touche ) est un exemple de Control-Méta caractère. L'ordre dans lequel les touches et sont enfoncées n'a pas d'importance. Ce sont juste des modificateurs. Par contre, n'est pas un modificateur, donc vous êtes obligés de taper d'abord , et C-v ensuite. >> Tapez C-x 1 dans la fenêtre du haut pour éliminer celle du bas. C-x 1 élimine en fait toutes les fenêtres non sélectionnées. Les fenêtres peuvent bien entendu contenir des buffers différents. Si vous utilisez C-x C-f pour ouvrir un fichier dans l'une des fenêtres, l'autre ne change pas. Elles sont totalement indépendantes. Voici une autre manière d'ouvrir un fichier dans l'autre fenêtre: >> Tapez C-x 4 C-f suivit du nom d'un fichier, puis . Vous verrez le fichier apparaître dans l'autre fenêtre. Le curseur ira également dans cette fenêtre. >> Tapez C-x o pour remonter à la fenêtre du haut, puis C-x 1 pour éliminer celle du bas. * NIVEAUX D'ÉDITION RÉCURSIFS ----------------------------- De temps en temps, vous vous trouverez dans ce qu'on appelle des niveaux d'édition récursifs. Ceci est indiqué dans la ligne de mode par des crochets autour des parenthèses qui englobent le nom du mode majeur. Par exemple, vous pouvez voir [(Fundamental)] au lieu de (Fundamental). Pour sortir d'un niveau récursif d'édition, tapez . C'est un «siège éjectable» à usage multiple. Vous pouvez aussi l'utiliser pour sortir du minibuffer ou éliminer des fenêtres superflues. >> Tapez M-x pour vous rendre dans le minibuffer, puis tapez pour en sortir. Il n'est pas possible d'utiliser C-g pour sortir d'un niveau récursif d'édition. La raison en est que C-g sert à annuler des commandes au sein même d'un niveau récursif d'édition. * POUR OBTENIR PLUS D'AIDE -------------------------- Dans ce tutoriel, nous avons essayé de vous fournir assez de connaissance pour commencer à utiliser Emacs. Emacs est tellement riche en possibilités qu'il serait impossible de tout dire ici. Cependant, vous souhaiterez surement à un moment ou un autre avoir plus de renseignements sur ses énormes possibilités. Emacs comprend entre autres des commandes d'aide sur sa propre utilisation. Toutes ces commandes d'aide commencent par le préfixe C-h, le «caractère d'aide». Typiquement, vous tapez C-h, puis un caractère indiquant quelle aide vous souhaitez obtenir. Si vous êtes VRAIMENT perdu, tapez C-h ? et Emacs vous indiquera quelles sortes d'aide il peut vous fournir. Si vous ne désirez finalement pas d'aide après avoir tapé C-h, tapez simplement C-g. (Quelques sites redéfinissent la commande C-h. Cela ne devrait vraiment pas être fait, donc allez vous plaindre à votre administrateur système. Si C-h ne marche pas, tapez M-x help.) L'aide de base est C-h c. Tapez C-h c puis une commande (même une séquence comme C-x f), et Emacs vous donnera une brève description de la commande en question. >> Tapez C-h c C-p. Le message doit ressembler à quelque chose comme C-p runs the command previous-line Cela vous donne le «nom de la fonction». Les noms de fonctions sont principalement utilisés pour customiser Emacs, mais comme en général ils sont choisi de manière à indiquer ce que fait la commande, ils peuvent servir de courte documentation (au moins pour vous rappeler les commandes que vous avez déjà apprises). Pour de plus amples informations sur les commandes, utilisez C-h k au lieu de C-h c. >> Tapez C-h k C-p. Ceci affiche la documentation sur la fonction, ainsi que son nom dans une autre fenêtre. Quand vous avez fini de lire, tapez 'q' pour éliminer la fenêtre d'aide. Voici d'autres aides utiles: C-h f Décrire une fonction. Vous donnez son nom. >> Tapez C-h f previous-line. Cela vous donne toute l'information dont Emacs dispose sur la fonction appelée par la commande C-p. C-h a Hyper Apropos. Tapez un mot-clé et Emacs vous affichera toutes les fonctions ou variables contenant ce mot-clé. Les commandes que vous pouvez appeler grâce à M-x ont un astérisque à gauche de leur nom. >> Tapez C-h a newline. Tapez pour effacer l'à-propos, ou cliquez avec le bouton du milieu sur un nom pour obtenir l'aide sur cette fonction ou variable. * CONCLUSION ------------ Rappelez-vous bien, pour quitter définitivement Emacs, tapez C-x C-c. Pour quitter temporairement (et pour pouvoir revenir), tapez C-z (sous X Windows, C-z iconifie la fenêtre). Ce tutoriel est fait pour être compréhensible par tout nouvel utilisateur. Donc si quelque chose n'est pas clair, n'hésitez pas à vous plaindre !! Si vous avez plus particulièrement des remarques à faire sur la version française, vous pouvez aussi me contacter directement (Didier Verna ). COPIES / DISTRIBUTION --------------------- Un peu d'histoire ... * Le premier tutoriel pour l'Emacs d'origine fut écrit par Stuart Cracraft. * Ben Wing l'a mis à jour pour X Windows. * Martin Buchholz et Hrvoje Niksic y ont apporté des corrections pour XEmacs. * J'en (Didier Verna) ai fait une version française un beau jour de 1997. Cette version du tutoriel, tout comme Emacs, est copyrightée, et vous est fournie avec la permission d'en distribuer des copies sous certaines conditions (je laisse la notice du copyright en anglais): Copyright (c) 1997, Didier Verna. Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. Les conditions pour copier Emacs lui-même sont plus complexes, mais dans le même état d'esprit. Vous êtes conviés à lire le fichier COPYING et à distribuer Emacs à vos amis. Aidez-nous à tuer l'obstructionnisme logiciel en utilisant, écrivant et partageant du logiciel libre! xemacs-21.4.22/etc/TUTORIAL.hr0000644000175000017500000013122306431260356013620 0ustar acsacsCopyright (c) 1985, 1996 Free Software Foundation, Inc. Uvjeti kopiranja na kraju. Ovo su osnovne upute za Emacs. Opæenito, Emacsove naredbe sadr¾e tipku CONTROL (ponekad oznaèenu CTRL ili CTL) ili tipku META. Na nekim tipkovnicama tipka META je oznaèena kao ALT ili EDIT, ili ne¹to treæe (na primjer, na Sunovim tipkovnicama karo znak lijevo od razmaknice je META). Ako nemate tipku META, umjesto nje mo¾ete koristiti ESC. Da ne pi¹emo META ili CONTROL svaki put kad mislimo na prefiksnu tipku, koristit æemo sljedeæe skraæenice: C- znaèi dr¾eæi tipku CONTROL, stisnite znak . Tako bi C-f bilo: Dr¾eæi tipku CONTROL, napi¹ite f. M- znaèi dr¾eæi tipku META, pritisnite . Ako nema tipke META, pritisnite , otpustite ga, i napi¹ite znak . Napomena: za izlazak iz Emacsa, utipkajte C-x C-c. (Dva znaka.) Znakovi ">>" na lijevom rubu naznaèuju uputstva da poku¹ate koristiti neku naredbu. Na primjer: <> >> Sad utipkajte C-v za pomak na sljedeæi ekran. (samo naprijed, uèinite to tako da dr¾ite tipku control i pritisnite 'v'). Od sad, ovo trebate napraviti kad god zavr¹ite sa èitanjem stranice teksta. Uoèite dva reda koja se preklapaju kad se pomaknete s ekrana na ekran; preklapanje osigurava kontinuitet koji vam olak¹ava èitanje teksta. Prva stvar koju trebate znati jest kako se micati s mjesta na mjesto u tekstu. Veæ znate kako se pomaknuti ekran naprijed, pomoæu C-v. Da biste se pomakli ekran natrag, pritisnite M-v (dr¾ite tipku META i pritisnite v, ili upi¹ite v ako nemate tipke META, EDIT ili ALT). >> Poku¹ajte tipkati M-v, zatim C-v, nekoliko puta. * SA®ETAK --------- Sljedeæe naredbe su korisne za pregledavanje stranica teksta: C-v Pomièe stranicu naprijed M-v Pomièe stranicu natrag C-l Bri¹e ekran, i ponovno iscrtava sve, stavljajuæi tekst pokraj kursora u sredinu. (to je control-L, a ne control-1.) >> Naðite kursor, i pogledajte tekst pokraj njega. Sada stisnite C-l. Opet naðite kursor, i uoèite da se pokraj kursora nalazi isti tekst. * OSNOVE KONTROLE KURSORA ------------------------- Pomaci s ekrana na ekran su korisni, ali kako se pomaknuti na pojedino mjesto u tekstu na ekranu? To mo¾ete uèiniti na nekoliko naèina. Najosnovniji naèin je upotrijebiti naredbe C-p, C-b, C-f i C-n. Svaka od ovih naredbi pomièe kursor jedan redak ili stupac u pojedinom smjeru. Evo tablice koja pokazuje ove èetiri naredbe i smjerove u kojem pomièu. Prethodni red, C-p (eng. previous line) : : Natrag, C-b .... Trenutni polo¾aj kursora .... Naprijed, C-f (eng. backward) : (eng. forward) : Sljedeæi red, C-n (eng. next line) >> Pomaknite kursor do retka u sredini tablice koristeæi C-n i C-p. Tada stisnite C-l da vidite cijelu tablicu u sredi¹tu ekrana. Ove su naredbe temeljene na engleskim mnemonicima: P za previous, N za next, B za backward i F za forward. Ovo su osnovne naredbe za pomicanje kursora, i s vremenom æete ih SVE koristiti, pa bi bilo vrlo korisno da ih sada nauèite. >> Stisnite C-n nekoliko puta, tako da dovedete kursor do ovog retka. >> Pomaknite se na red s C-f-ovima, i onda gore do C-p-ova. Uoèite ¹to C-p radi kad je kursor na sredini reda. Svaki red teksta zavr¹ava znakom Newline (novi red), èime ga se odvaja od sljedeæeg reda. Zadnji red u datoteci bi trebao imati Newline na kraju (ali Emacs to ne zahtijeva). >> Poku¹ajte stisnuti C-b na poèetku reda. Trebalo bi vas pomaknuti na kraj prethodnog reda. To se dogaða zato ¹to ste se pomakli unatrag, preko znaka Newline. C-f se mièe preko Newline-a, ba¹ kao i C-b. >> Pritisnite jo¹ nekoliko puta C-b, da steknete osjeæaj za kursor. Tad sti¹æite C-f dok se ne vratite na kraj reda. Zatim se jo¹ jednim C-f-om pomaknite na poèetak sljedeæeg reda. Kad se pomaknete preko gornjeg ili donjeg ruba ekrana, tekst iza ruba se pomakne na ekran. Ovo se naziva "pomak" (eng. scrolling). Njime Emacs mo¾e pomaknuti kursor na neko mjesto u tekstu bez uklanjanja kursora s ekrana. >> Poku¹ajte pomaknuti kursor s donjeg ruba sa C-n, i pogledajte ¹to se dogaða. Ako je micanje po znakovima presporo, mo¾ete se micati po rijeèima. M-f (Meta-f) mièe rijeè naprijed, a M-b mièe rijeè natrag. >> Pritisnite nekoliko puta M-f i M-b. Kad se nalazite u sredini rijeèi, M-f pomièe na kraj rijeèi. Kad se nalazite u praznom prostoru izmeðu rijeèi, M-f pomièe na kraj sljedeæe rijeèi. M-b se pona¹a na isti naèin, ali u suprotnom smjeru. >> Pritisnite M-f i M-b nekoliko puta, izmije¹ano s C-f i C-b, tako da mo¾ete promotriti kako se M-f i M-b pona¹aju na razlièitim mjestima unutar i izmeðu rijeèi. Uoèite paralelu izmeðu C-f i C-b na jednoj strani, i M-f i M-b na drugoj. Meta znakovi se èesto koriste za operacije vezane uz jedinice definirane jezikom (rijeèi, reèenice, paragrafi), dok Control znakovi rade na osnovnim jedinicama, neovisno o onome ¹to editirate (znakovi, redovi, itd.) Analogija vrijedi i izmeðu redova i reèenica: C-a i C-e pomièu na poèetak, odnosno na kraj reda, dok M-a i M-e pomièu na poèetak, odnosno kraj reèenice. >> Isku¹ajte C-a nekoliko puta, potom C-e nekoliko puta. >> Iskupajte M-a nekoliko puta, potom M-e nekoliko puta. Uoèite kako ponovljeni C-a ne rade ni¹ta, dok ponovljeni M-a nastavljaju micati po reèenicama. Iako ovo nije sasvim analogno, svaka se naredba doima prirodnom. Polo¾aj kursora u tekstu se takoðer naziva "toèka" (eng. point). Drugaèije reèeno, kursor pokazuje na ekranu gdje se point nalazi u tekstu. Evo sa¾etka jednostavnih operacija za micanje kursora, ukljuèujuæi i naredbe za pomicanje preko rijeèi i reèenica: C-f Znak naprijed C-b Znak natrag M-f Rijeè naprijed M-b Rijeè natrag C-n Sljedeæi red C-p Prethodni red C-a Poèetak reda C-e Kraj reda M-a Poèetak reèenice M-e Kraj reèenice >> Isku¹ajte sve ove naredbe jo¹ nekoliko puta, za vje¾bu. To su najèe¹æe rabljene naredbe. Dvije druge va¾ne naredbe za pomicanje kursora su M-< (Meta Manje), koja pomièe na poèetak cijelog teksta, i M-> (Meta Veæe), koja pomièe na kraj cijelog teksta. Na veæini terminala, "<" je iznad zareza, tako da morate koristiti tipku shift da biste ga utipkali. Na tim terminalima morate koristiti tipku shift i da biste utipkali M-<; bez shifta, pisali biste M-zarez. >> Sada isku¹ajte M-<, da biste se pomaknuli na poèetak uputa. Potom upotrijebite C-v nekoliko puta da se vratite ovamo. >> Sada isku¹ajte M->, pomaknuv¹i se na kraj uputa. Potom upotrijebite M-v nekoliko puta da se vratite ovamo. Ako va¹ terminal ima kursorske tipke, mo¾ete kursor pomicati njima. Preporuèujemo da nauèite C-b, C-f, C-n i C-p iz tri razloga. Prvo, rade na svim vrstama terminala. Drugo, kad steknete rutinu kori¹tenja Emacsa, primijetit æete da je tipkanje ovih CTRL znakova br¾e od uporabe kursorskih tipki (jer ne morate odmicati prste od polo¾aja za tipkanje). Treæe, jednom kad se naviknete koristiti CTRL znakovne naredbe, lako æete nauèiti koristiti druge napredne naredbe za micanje kursora. Veæina Emacsovih naredbi prihvaæa numerièki argument; za veæinu njih ovo slu¾i kao brojaè ponavljanja. Brojaè ponavljanja zadajete tako da utipkate C-u i potom znamenke prije nego ¹to utipkate naredbu. Ako imate tipku META (ili EDIT ili ALT), postoji jo¹ jedan alternativan naèin uno¹enja numerièkog argumenta: tipkajte znamenke dr¾eæi svo vrijeme tipku META. Preporuèujemo uèenje metode pomoæu C-u, jer radi na svim terminalima. Primjerice, C-u 8 C-f pomièe osam znakova naprijed. >> Poku¹ajte koristiti C-n ili C-p s numerièkim argumentom, tako da pomaknete kursor na liniju blisku ovoj samo jednom naredbom. Veæina naredbi koristi numerièki argument kao brojaè ponavljanja. Neke ga naredbe, izunimno, koriste drugaèije. C-v i M-v su meðu iznimkama. Kad im se proslijedi argument, one pomaknu ekran gore ili dolje, za toliko redova, a ne stranica. Na primjer, C-u 4 C-v pomièe ekran za èetiri reda. >> Sada poku¹ajte upisati C-u 8 C-v. Ovo je trebalo pomaknuti ekran za 8 redova. Ako ga hoæete pomaknuti natrag, mo¾ete dati isti argument M-v. Ako koristite X Window sistem, vjerojatno se na desnoj strani Emacsova prozora nalazi pravokutno podruèje nazvano "vrpca za pomicanje" (eng. scroll-bar). Mo¾ete pomicati tekst mi¹em povlaèeæi klizaè unutar vrpce. >> Poku¹ajte pritisnuti srednju tipku mi¹a na vrh klizaèa unutar scroll-bara. Ovo bi trebalo pomaknuti tekst do polo¾aja odreðenog visinom toèke pritiska. >> Pomaknite mi¹a na toèku scroll-bara otprilike tri reda od vrha, i pritisnite lijevu tipku mi¹a nekoliko puta. * KONTROLA KURSORA NA X TERMINALU --------------------------------- Ako imate X terminal, vjerojatno æe vam biti lak¹e koristiti tipke kursorskog bloka. Lijeva, desna, gornja i donja strelica pomièu u oèekivanom smjeru; one funkcioniraju jednako kao i C-b, C-f, C-p i C-n, ali ih je lak¹e tipkati i zapamtiti. Takoðer mo¾ete koristiti C-lijevo i C-desno za pomake po rijeèima, a C-gore i C-dolje za pomake po blokovima (npr. paragrafima, ako editirate tekst). Ako imate tipke oznaèene s HOME (ili BEGIN) i END, one æe vas pomaknuti na poèetak odnosno kraj reda, a C-home i C-end æe vas pomaknuti na poèetak odnosno kraj datoteke. Ako va¹a tipkovnica ima tipke PgUp i PgDn, mo¾ete ih koristiti za pomicanje gore i dolje po stranicama, kao M-v i C-v. Sve ove naredbe mogu primiti numerièke argumente, kao ¹to je gore opisano. Mo¾ete taj argument unijeti kraæim putem: samo dr¾ite tipku CONTROL ili META, i upi¹ite broj. Na primjer, za pomak 12 rijeèi desno, tipkajte C-1 C-2 C-desno. Uoèite da je ovo jako lako utipkati, jer ne morate otpu¹tati tipku CONTROL izmeðu pritisaka tipki. * KAD EMACS BLOKIRA ------------------- Ako Emacs prestane odgovarati na va¹e naredbe, mo¾ete ga zaustaviti utipkav¹i C-g. Mo¾ete koristiti C-g da zaustavite naredbu koja predugo traje. Takoðer s C-g mo¾ete odbaciti numerièki argument, ili poèetak naredbe koju ne ¾elite zavr¹iti. >> Upi¹ite C-u 100 da napravite numerièki argument 100, zatim stisnite C-g. Sad upi¹ite C-f. Pomaknut æe se samo za jedan znak, jer ste argument odbacili s C-g. Ako gre¹kom stisnete , mo¾ete ga se rije¹iti s C-g. * ONEMOGUÆENE NAREDBE --------------------- Neke Emacsove naredbe su "onemoguæene", tako da ih poèetnici ne mogu pokrenuti gre¹kom. Ako utipkate jednu od onemoguæenih naredbi, Emacs æe vas porukom obavijestiti koju ste naredbu poku¹ali pokrenuti, i pitati vas ¾elite li je ipak izvr¹iti. Ako je zaista ¾elite isprobati, pritisnite razmaknicu kao odgovor na pitanje. Inaèe, ako ne ¾elite izvr¹iti onemoguæenu naredbu, odgovorite na pitanje s "n". >> Pritisnite `C-x n p' (¹to je onemoguæena naredba), zatim na pitanje odgovorite s "n". * PROZORI --------- Emacs mo¾e imati nekoliko prozora, svaki s vlastitim tekstom. Uoèite da se pojam "prozora" kako ga koristi Emacs ne odnosi na odvojene preklapajuæe prozore windowing sustava, veæ na razdvojene dijelove unutar jednog X prozora. (Emacs takoðer mo¾e prikazati vi¹e X prozora, odnosno "okvira", u Emacsovoj terminologiji. To je opisano kasnije.) Za sada je bolje ne ulaziti u tehnike kori¹tenja vi¹e prozora. Ono ¹to trebate znati jest kako se rije¹iti dodatnih prozora koji se mogu javiti za prikaz pomoæi, ili kao izlaz nekih naredbi. Jednostavno: C-x 1 Jedan prozor (tj. ubij sve druge prozore) To je Control-x praæen znamenkom 1. C-x 1 pro¹iruje prozor u kojem je kursor, tako da on zauzme cijeli ekran. Pobri¹e, takoðer, i ostale prozore. >> Pomaknite kursor na ovu liniju i upi¹ite C-u 0 C-l. (Sjetite se da C-l ponovno iscrtava ekran. Ako ovoj naredbi date numerièki argument, on znaèi "iscrtaj ekran i smjesti trenutni red toliko linija od vrha ekrana." Tako C-u 0 C-l znaèi "iscrtaj ekran, i stavi trenutni red na vrh.") >> Pritisnite Control-x 2 Uoèite kako se ovaj prozor smanjuje, dok se novi pojavljuje prikazujuæi sadr¾aj ovog spremnika (buffera). >> Upi¹ite C-x 1 i gledajte kako novi prozor nestaje. * UMETANJE I BRISANJE --------------------- ®elite li umetnuti tekst, samo ga utipkajte. Znakove koje vidite, kao ¹to su A, 7, *, itd. Emacs shvaæa kao tekst i umeæe trenutno. Pritisnite (znak za novi red) da umetnete znak Newline. Zadnji znak koji ste umetnuli mo¾ete izbrisati pritisnuv¹i . je tipka na tipkovnici koja mo¾e biti oznaèena kao "Del". U nekim sluèajevima, tipka "Backspace" slu¾i kao , ali ne uvijek! Opæenitije, bri¹e znak neposredno ispred trenutnog polo¾aja kursora. >> Uèinite sljedeæe: utipkajte nekoliko znakova, zatim ih izbri¹ite stisnuv¹i nekoliko puta. Ne brinite o promjeni ove datoteke; neæete izmijeniti glavnu verziju uputa. Ovo je va¹a osobna kopija. Kad red teksta postane prevelik za jedan red na ekranu, red se "nastavlja" na drugi ekranski red. Obrnuta kosa crta ("\") na desnom rubu ukazuje na red koji je nastavljen. >> Upisujte tekst dok ne doðete do desnog ruba, i nastavite pisati. Vidjet æete kako se pojavljuje nastavljeni red. >> Tipkom bri¹ite tekst dok red teksta opet ne stane na red ekrana. Kontinuacijski red tada nestaje. Mo¾ete izbrisati znak Newline kao i bilo koji drugi znak. Brisanje znaka Newline izmeðu dva reda ih spaja u jedan red. Ako je novonastali zajednièki red prevelik da stane na ekranski red, bit æe prikazan kontinuacijskim redom. >> Pomaknite kursor na poèetak reda i pritisnite . Red æe se spojiti s redom iznad. >> Pritisnite tako da ponovno umetnete Newline koji ste izbrisali. Upamtite da se veæini Emacsovih naredbi mo¾e zadati brojaè ponavljanja; ovo ukljuèuje znakove teksta. Ponavljanje znaka teksta unosi ga nekoliko puta. >> Isku¹ajte sad -- upi¹ite C-u 8 * da upi¹ete ********. Sada ste nauèili najosnovnije naèine upisivanja u Emacs i ispravljanja gre¹aka. Sada mo¾ete i brisati po rijeèima ili redovima. Evo sa¾etka operacija brisanja: bri¹i znak neposredno pred kursorom C-d bri¹i znak nakon kursora M- ubij rijeè prije kursora M-d ubij rijeè poslije kursora C-k ubij od pozicije kursora do kraja reda M-k ubij do kraja trenutne reèenice Uoèite da i C-d nasuprot M- i M-d pro¹iruju paralelu zaèetu s C-f i M-f (dobro, ba¹ i nije kontrolni znak, ali nemojmo brinuti o tome). C-k i M-k su na neki naèin slièni C-e i M-e, po operaciji na redovima, odnosno reèenicama. Kad bri¹ete vi¹e od jednog znaka istovremeno, Emacs sprema izbrisani tekst, tako da ga mo¾ete dobiti natrag. Vraæanje ubijenog teksta zove se "dobavljanje" (eng. yanking). Mo¾ete dobaviti ubijeni tekst bilo na isto mjesto gdje je bio ubijen, bilo na neko drugo mjesto u tekstu. Mo¾ete dobaviti tekst nekoliko puta, èime æete dobiti vi¹estruke kopije. Komanda za dobavljanje je C-y. Uoèite da je razlika izmeðu "ubijanja" i "brisanja" neèega u tome ¹to se ubijeni tekst mo¾e dobaviti natrag, a izbrisani ne mo¾e. Opæenito, naredbe koje uklanjaju puno teksta spreme izbrisani tekst, dok ga naredbe koje bri¹u samo jedan znak ili samo prazne linije i razmake ne spremaju. >> Pomaknite kursor na poèetak reda koji nije prazan. Zatim pritisnite C-k da ubijete tekst u tom redu. >> Stisnite C-k drugi put. Vidjet æete da ubija Newline koji prati taj red. Uoèite da jedan C-k ubija sadr¾aj reda, dok drugi C-k ubija sam red, i mièe sve druge redove prema gore. C-k tretira numerièki argument na specijalan naèin: ubija toliko redova, i njihov sadr¾aj. Ovo nije obièno ponavljanje. C-u 2 C-k ubija dva reda i njihove newline; pritiskanje C-k dvaput ne bi dalo taj rezultat. Da povratite zadnji ubijeni tekst i stavite ga gdje je kursor trenutno, pritisnite C-y. >> Poku¹ajte; pritisnite C-y da dobavite tekst. Gledajte na C-y kao da dobavljate natrag ne¹to ¹to vam je netko uzeo. Uoèite da ako ponovite C-k nekoliko puta, sav tekst bit æe spremljen zajedno, tako da æe ga C-y dobaviti odjednom. >> Uèinite to sad, pritisnite C-k nekoliko puta. Sad, da bi vratili ubijeni tekst: >> Stisnite C-y. Tad spustite kursor nekoliko linija ni¾e i opet stisnite C-y. Sada vidite kako se kopira tekst. ©to napraviti ako imate tekst koji ¾elite dobaviti, ali onda ubijete ne¹to drugo? C-y bi dobavio zadnji tekst. Ali prethodni tekst nije izgubljen. Mo¾ete ga povratiti koristeæi naredbu M-y. Nakon ¹to pritisnete C-y i dobijete zadnje ubijeni tekst, pritiskanje M-y ga zamjenjuje s prethodno ubijenim tekstom. Uzastopno pozivanje M-y dobavlja sve ranije i ranije tekstove. Kad doðete do teksta koji ste tra¾ili, ne morate uèiniti ni¹ta posebno da ga zadr¾ite. Samo nastavite s editiranjem, ostaviv¹i dobavljeni tekst gdje jest. Ako pritisnete M-y dovoljno puta, vratit æete se na polaznu toèku (zadnji ubijeni tekst). >> Ubijte jedan red, pomièite se po tekstu, ubijte drugi red. Zatim pritisnite C-y da biste dobili natrag drugi ubijeni red. Zatim napravite M-y pa æe taj tekst biti zamijenjen prvim ubijenim redom. Napravite jo¹ par puta M-y i pogledajte ¹to dobivate. Nastavite s M-y dok ne vratite drugi ubijeni red, a zatim M-y pritisnite jo¹ par puta. Ako ¾elite, mo¾ete poku¹ati proslijediti naredbi M-y pozitivne i negativne argumente. * PONI©TENJE ------------ Ako napravite izmjenu u tekstu, pa se zatim predomislite, mo¾ete poni¹titi (eng. "undo") promjenu naredbom undo, C-x u. Obièno, C-x u poni¹tava promjene koje su rezultat jedne naredbe; ako ponovite C-x u nekoliko puta uzastopce, svako novo ponavljanje poni¹tava uèinak jo¹ jedne naredbe. Ali, postoje dva izuzetka: naredbe koje ne mijenjaju tekst se ne raèunaju (ovo ukljuèuje naredbe koje mièu kursor i pomièu tekst), a samo-umeæuæi znakovi se obièno grupiraju u skupine od po 20 (da se umanji broj C-x u koje morate stisnuti da biste poni¹tili unos teksta). >> Ubijte ovu liniju s C-k, zatim utipkajte C-x u i trebala bi se ponovno pojaviti. C-_ je alternativna naredba za poni¹tenje; ona radi isto kao C-x u, ali ju je lak¹e utipkati nekoliko puta za redom. Mana C-_ je da na nekim tipkovnicama nije oèigledno kako je utipkati. Zato ostavljamo i C-x u. Na nekim terminalima mo¾ete dobiti C-_ kombinacijom CTRL i /. Numerièki argument naredbi C-_ ili C-x u slu¾i kao brojaè ponavljanja. * DATOTEKE ---------- Da biste za stalno spremili izmjene na tekstu koji editirate, morate ga spremiti u datoteku. Ako to ne uèinite, tekst æe nestati kada izaðete iz Emacsa. Svoje izmjene stavljate u datoteku tako ¹to je prvo "naðete" (ovo se jo¹ naziva i "posjeta" datoteci). Nala¾enje datoteke znaèi da vidite sadr¾aj datoteke unutar Emacsa. U neku ruku, ovo je kao da editirate samu datoteku. Meðutim, izmjene koje napravite koristeæi Emacs ne postaju trajne dok niste "snimili" datoteku. Tako mo¾ete izbjeæi ostavljanje poluzavr¹ene datoteke u sustavu, ako to ne ¾elite. Èak i kad snimate, Emacs ostavlja izvornu datoteku pod promijenjenim imenom, za sluèaj da se kasnije predomislite. Ako pogledate pri dnu ekrana, vidjet æete red koji poèinje i zavr¹ava s crticama, i sadr¾i niz "XEmacs: TUTORIAL.hr". Ovaj dio ekrana uvijek pokazuje naziv datoteke koju posjeæujete. U ovom trenutku vi posjeæujete datoteku koja se zove "TUTORIAL", a koja je va¹a osobna kopija Emacsovih uputa. Koju god datoteku na¹li, njen æe se naziv pojaviti na tom istom mjestu. Naredbe za pronala¾enje i spremanje datoteka se razlikuju od drugih naredbi koje ste dosad upoznali, po tome ¹to se sastoje od dva znaka. Obje poèinju znakom Control-x; mnoge od njih rade s datotekama, spremnicima i povezanim stvarima. Ove naredbe su dugaèke dva, tri ili èetiri znaka. Jo¹ jedna stvar u vezi naredbe za nala¾enje datoteke je da morate reæi koju datoteku ¾elite. Ka¾emo da naredba "èita argument s terminala" (u ovom sluèaju, argument je naziv datoteke). Kad utipkate naredbu C-x C-f Naði datoteku Emacs tra¾i od vas da upi¹ete naziv datoteke. Naziv datoteke koji upi¹ete pojavljuje se u donjem redu ekrana. Taj donji red naziva se minispremnik (minibuffer) kad se koristi za tu vrstu unosa. Mo¾ete koristiti uobièajene Emacsove naredbe da editirate naziv datoteke. Dok unosite naziv datoteke (ili za bilo kojeg unosa iz minispremnika), mo¾ete otkazati naredbu pomoæu C-g. >> Upi¹ite C-x C-f, potom C-g. Ovo otkazuje minispremnik, a takoðer otkazuje i naredbu C-x C-f koja je koristila minispremnik. Tako nijedna datoteka neæe biti pronaðena. Kad zavr¹ite s upisom imena datoteke, stisnite za kraj. Tad æe naredba C-x C-f otpoèeti svoj posao, i naæi datoteku koju ste izabrali. Minispremnik nestaje kad naredba C-x C-f zavr¹i. Ubrzo æe se sadr¾aj datoteke pojaviti na ekranu, i moæi æete editirati sadr¾aj. Kad po¾elite trajno saèuvati svoje izmjene, upi¹ite naredbu C-x C-s Spremi datoteku Ovo kopira tekst unutar Emacsa u datoteku na disku. Prvi put kad ovo uèinite, Emacs æe preimenovati izvornu datoteku u novo ime, tako da je ne izgubite. Novo se ime tvori dodavanjem znaka ~ na izvorno ime datoteke. Kad snimanje zavr¹i, Emacs ispi¹e ime snimljene datoteke. Trebali biste snimati relativno èesto, tako da ne izgubite puno ako sustav padne. >> Upisav¹i C-x C-s, spremite svoju kopiju uputa. Na dnu ekrana bi trebalo pisati "Wrote ...TUTORIAL.hr". Primjedba: Na nekim sustavima, tipkanje C-x C-s æe zamrznuti ekran, i neæete vi¹e vidjeti Emacsov output. To znaèi da "prednost" operativnog sustava zvana "kontrola toka" (eng. flow control) presreæe C-s i ne da mu da doðe do Emacsa. Odmrznite sustav tipkom C-q. Tada pogledajte odjeljak "Spontaneous Entry to Incremental Search" Emacsovog manuala za savjet kako se nositi s ovom "predno¹æu". Mo¾ete naæi postojeæu datoteku, da je pogledate ili editirate. Mo¾ete takoðer naæi i datoteku koja jo¹ ne postoji. Tako se stvaraju nove datoteke Emacsom: naðite datoteku, koja æe ispoèetka biti prazna, i poènite unositi tekst u datoteku. Kad zatra¾ite "snimanje" datoteke, Emacs æe zaista stvoriti datoteku s tekstom koji ste unijeli. Od tad pa nadalje, mo¾ete smatrati da editirate veæ postojeæu datoteku. * SPREMNICI ----------- Ako naðete jo¹ jednu datoteku s C-x C-f, ona prva ostaje unutar Emacsa. Mo¾ete se vratiti natrag na nju nalazeæi je opet s C-x C-f. Ovako mo¾ete otvoriti prilièan broj datoteka unutar Emacsa. >> Stvorite datoteku imena "foo" tipkajuæi C-x C-f foo . Tad unesite neki tekst, editirajte ga, i snimite "foo" utipkav¹i C-x C-s. Konaèno, upi¹ite C-x C-f TUTORIAL.hr da se vratite na upute. Emacs pohranjuje tekst svake datoteke u objektu zvanom "spremnik" (eng. buffer). Nala¾enje datoteke otvara novi spremnik unutar Emacsa. Popis spremnika koji se nalaze u trenutnom pozivu Emacsa mo¾ete dobiti sa C-x C-b Izlistaj spremnike >> Sada isku¹ajte C-x C-b. Uoèite kako svaki spremnik ima naziv, a mo¾e imati i ime datoteke koje se odnosi na datoteku èiji sadr¾aj je u njemu. Neki spremnici ne odgovaraju ni jednoj datoteci. Na primjer, spremnik "*Buffer List*" nema ni jednu datoteku. To je spremnik koji sadr¾i spisak spremnika koji je stvorila naredba C-x C-b. BILO KOJI tekst koji vidite u nekom Emacsovom prozoru uvijek je dio nekog spremnika. >> Pritisnite C-x 1 da se rije¹ite spiska spremnika. Ako promijenite tekst jedne datoteke, zatim naðete drugu datoteku, ova prva neæe biti snimljena. Njene promjene ostaju unutar Emacsa, u spremniku te datoteke. Ovo je korisno, ali to i znaèi da je potreban pogodan naèin snimanja datoteke prvog spremnika. Bilo bi nespretno prebacivati se natrag u spremnik s C-x C-f samo zato da ga se snimi s C-x C-s. Zato imamo C-x s Snimi neke spremnike. C-x s vas pita za svaki spremnik koji sadr¾i izmjene koje niste snimili. Za svaki takav spremnik pita vas da li ga ¾elite snimiti. >> Upi¹ite red teksta, potom upi¹ite C-x s. Pitat æe vas ¾elite li snimiti spremnik s nazivom TUTORIAL.hr. Odgovorite potvrdno na pitanje, tipkajuæi "y". * UPORABA IZBORNIKA ------------------- Ako ste na X terminalu, uoèit æete izbornik na vrhu Emacsovog prozora. Mo¾ete koristiti izbornik za pristup svim uobièajenim Emacsovim naredbama, kao ¹to su "find file". Ovo æe vam u poèetku biti lak¹e, jer neæete morati pamtiti tipke za neku naredbu. Jednom kad vam rad u Emacsu postane ugodan, lako æete poèeti koristiti naredbe s tipkovnice, jer svaka stavka izbornika sadr¾i i odgovarajuæu tipku za pokretanje naredbe. Uoèite da postoji puno stavki koje nemaju ekvivalent na tipkovnici. Na primjer, izbornik "Buffers" prikazuje sve raspolo¾ive spremnike redosljedom posljednje uporabe. Mo¾ete se prebaciti na bilo koji spremnik tako da jednostavno izaberete njegov naziv u izborniku "Buffers". * UPORABA MI©A -------------- Kad radite pod X-ima, Emacs je u potpunosti integriran s mi¹em. Mo¾ete pozicionirati tekstualni kursor pritisnuv¹i lijevu tipku mi¹a na ¾eljenom mjestu, mo¾ete izabrati tekst povlaèeæi lijevu tipku mi¹a po ¾eljenom tekstu. (Ili, na drugi naèin, pritisnuti lijevu tipku mi¹a s jedne strane, zatim se pomaknuti na drugu stranu, i koristiti Shift i tipku mi¹a za izbor teksta.) Ako ¾elite ubiti izabrani tekst, mo¾ete pritisnuti C-w, ili izabrati Cut u izborniku Edit. Uoèite da ovo dvoje *nije* isto: C-w samo sprema tekst unutar Emacsa (slièno C-k, kako je opisano gore), dok Cut radi ovo, i jo¹ sprema tekst u X clipboard, gdje do njega mogu pristupiti ostale aplikacije. Tekst s X clipboarda mo¾ete dobiti koristeæi stavku Paste izbornika Edit. Srednja tipka mi¹a se obièno koristi za izbor stvari koje su vidljive na ekranu. Na primjer, ako uðete u Info (Emacsovu on-line dokumentaciju) koristeæi C-h i ili izbornik Help, mo¾ete pratiti osvijetljeni link pritisnuv¹i srednju tipku mi¹a na njemu. Slièno, ako tipkate naziv datoteke (npr. na "Find File" promptu) i pritisnete TAB da vidite moguænosti, mo¾ete stisnuti srednju tipku mi¹a na neku od moguænosti, da je izaberete. Desna tipka mi¹a poziva "skoèni" izbornik. Sadr¾aj ovog izbornika ovisi o modu u kojem se trenutno nalazite, i obièno sadr¾i nekoliko èesto kori¹tenih naredbi, tako da se do njih lak¹e doðe. >> Sada pritisnite desnu tipku mi¹a. Morat æete dr¾ati tipku da zadr¾ite izbornik. * PRO©IRENJE SKUPA NAREDBI -------------------------- Emacsovih naredbi ima puno puno vi¹e nego ¹to bi ikad moglo stati na sve kontrolne i meta znakove. Emacs ovo zaobilazi pro¹irenim (eXtended) naredbama. One dolaze u dva oblika: C-x Pro¹iri znak. Praæena jednim znakom. M-x Pro¹irena naredba s imenom. Praæena dugim imenom. Postoje naredbe koje jesu korisne, ali ih se rabi manje nego naredbe o kojima smo dosad govorili. Veæ ste vidjeli dvije: naredbe s datotekama C-x C-f za nala¾enje i C-x C-s za snimanje. Jo¹ jedan primjer je naredba kojom se izlazi iz Emacsa -- to je naredba C-x C-c. (ne brinite o gubljenju izmjena koje ste napravili; C-x C-c vam nudi da snimite svaku izmijenjenu datoteku prije no ¹to izaðe iz Emacsa). Naredbom C-z *privremeno* izlazite iz Emacsa -- tako da se mo¾ete nakon nekog vremena opet vratiti u Emacs. Na sustavima koji to dozvoljavaju, C-z "suspendira" Emacs; to jest, vraæa se u ljusku, ali ne uni¹tava Emacs. U veæini ljuski, mo¾ete nastaviti rad Emacsa naredbom `fg', ili s `%emacs'. Na sustavima koji ne podr¾avaju suspendiranje, C-z stvara podljusku koja radi pod Emacsom, tako da mo¾ete pokrenuti druge programe i naknadno se vratiti u Emacs; ona neæe zaista "izaæi" iz Emacsa. U ovom sluèaju, ljuskina naredba `exit' je uobièajen naèin povratka iz podljuske u Emacs. Vrijeme za C-x C-c je onda kad se kanite odlogirati. Takoðer, to je ispravna stvar kad je Emacs pozvan iz èitaèa po¹te, ili nekog drugog programa, jer se oni ne moraju znati nositi sa suspendiranjem Emacsa. U normalnim okolnostima, meðutim, ako se ne kanite odlogirati, bolje je suspendirati Emacs s C-z nego izaæi iz njega. Postoji puno C-x naredbi. Evo spiska onih koje ste nauèili: C-x C-f Naði datoteku. C-x C-s Snimi datoteku. C-x C-b Popis spremnika. C-x C-c Izaði iz Emacsa. C-x u Poni¹ti zadnju naredbu. Imenovane pro¹irene naredbe su naredbe koje se jo¹ rjeðe koriste, ili se koriste samo unutar stanovitih modova. Primjer je naredba replace-string, koja globalno zamjenjuje jedan niz drugim. Kad napi¹ete M-x, Emacs æe vam dati prompt na dnu ekrana, a vi trebate samo napisati naziv naredbe. U ovom sluèaju, "replace-string". Samo napi¹ite "repl s", i Emacs æe dovr¹iti ime. Zavr¹ite naziv naredbe s . Naredba replace-string tra¾i dva argumenta -- niz koji se zamjenjuje, i niz kojim æe se zamijeniti. Zavr¹ite svaki argument s . >> Pomaknite kursor na prazan red dva reda ispod ovoga. Zatim napi¹ite M-x repl s promijenioizmijenio. Primijetite kako se ovaj red promijenio: zamijenili ste rijeè p-r-o-m-i-j-e-n-i-o s "izmijenio" gdje god se ova pojavila, nakon poèetnog polo¾aja kursora. * AUTOMATSKO SNIMANJE --------------------- Kada ste promijenili datoteku, ali je jo¹ niste snimili, va¹e bi izmjene mogle biti izgubljene ako raèunalo padne. Da vas za¹titi od ovoga, Emacs povremeno ispisuje "auto save" (automatsko snimanje) datoteku za svaku datoteku koju editirate. Auto-save datoteka ima # na poèetku i na kraju imena; na primjer, ako se va¹a datoteka zove "hello.c", njezina æe se auto-save datoteka zvati "#hello.c#". Kad snimite datoteku na normalan naèin, Emacs æe izbrisati njezinu auto-save datoteku. Ako raèunalo padne, mo¾ete obnoviti svoje automatski spremljene promjene tako ¹to normalno naðete datoteku, i napi¹ete M-x recover file . Kad vas pita za potvrdu, upi¹ite yes za nastavak i vratite automatski snimljene podatke. * PROSTOR ZA PORUKE ------------------- Ako Emacs vidi da pi¹ete naredbe polako, pokazat æe vam ih na dnu ekrana na mjestu koje se zove "prostor za poruke" (eng. echo area). Prostor za poruke je na najni¾em redu ekrana. * STATUSNI RED -------------- Red odmah iznad prostora za poruke se zove "statusni red" (eng. modeline). Statusni red izgleda otprilike ovako: --**-XEmacs: TUTORIAL.hr (Fundamental)--L670--58%---------------- Ovaj red pru¾a korisne informacije o statusu Emacsa i tekstu koji editirate. Veæ znate ¹to je ime datoteke -- to je datoteka koju ste na¹li. -NN%-- predstavlja va¹ trenutni polo¾aj u tekstu; to znaèi da je NN postotaka teksta iznad vrha ekrana. Ako je vrh teksta na ekranu, pisat æe --Top-- umjesto --00%--. Ako je kraj teksta na ekranu, pisat æe --Bot--. Ako gledate u tako kratak tekst da sav stane na ekran, u statusnoj liniji æe pisati --All--. Zvjezdice na poèetku znaèe da ste napravili izmjene na tekstu. Neposredno po posjeti ili snimanju datoteke, taj dio statusne linije nema zvjezdica, veæ samo crtice. Dio statusne linije u zagradama govori u kojem se modu editiranja nalazite. Podrazumijeva se Fundamentalni mod, koji trenutno koristite. On je primjer "glavnog moda". Emacs ima puno razlièitih glavnih modova. Neki od njih su predviðeni za editiranje razlièitih jezika i/ili vrsta teksta, kao ¹to je Lisp mod, tekst mod, itd. U bilo kojem trenutku jedan i samo jedan glavni mod je aktivan, i njegovo se ime nalazi na statusnom redu, gdje sada stoji "Fundamental". Svaki glavni mod èini da se nekoliko naredbi pona¹a razlièito. Na primjer, postoje naredbe za stvaranje komentara u programu, a buduæi da svaki programski jezik ima drugaèiju predod¾bu o tome kako komentar izgleda, svaki glavni mod razlièito unosi komentare. Svaki glavni mod je ime jedne pro¹irene naredbe, ¹to je i naèin kako se mo¾ete prebaciti u taj mod. Na primjer, M-x fundamental-mode je naredba koja vas prebacuje u Fundamental mod. Ako editirate tekst na hrvatskom, kao ¹to je ova datoteka, vjerojatno biste trebali koristiti tekstualni mod. >> Napi¹ite M-x text-mode. Ne brinite, nijedna od naredbi koje ste nauèili neæe promijeniti Emacs na znaèajan naèin. Ali mo¾ete uoèiti da M-f i M-b sad tretiraju apostrofe kao dio rijeèi. U fundamentalnom modu M-f i M-b su tretirali apostrofe kao separatore rijeèi. Glavni modovi obièno rade suptilne izmjene poput navedene: veæina naredbi rade "isti posao" u svakom glavnom modu, ali funkcioniraju s malom razlikom. Da biste vidjeli dokumentaciju trenutnog glavnog moda, pritisnite C-h m. >> Pritisnite jo¹ jednom C-u C-v da dovedete ovu liniju do vrha ekrana. >> Utipkajte C-h m, da vidite kako se tekstualni mod razlikuje od fundamentalnog moda. >> Pritisnite q da uklonite dokumentaciju s ekrana. Glavni modovi se nazivaju glavnima, jer postoje jo¹ i sporedni modovi. Sporedni su modovi nisu zamjena za glavne modove, veæ njihova usputna modifikacija. Svaki sporedni mod mo¾e biti ukljuèen ili iskljuèen za sebe, neovisno o ostalim sporednim modovima, i neovisno o glavnom modu. Tako mo¾ete ne biti niti u jednom sporednom modu, ili u jednom sporednom modu, ili u kombinaciji nekoliko sporednih modova. Jedan vrlo koristan sporedni mod, naroèito za editiranje hrvatskog teksta, jest mod za automatsko popunjavanje (Auto Fill mode). Kad je ovaj mod ukljuèen, Emacs automatski lomi linije izmeðu rijeèi kad god umetanjem teksta stvorite red koji je pre¹irok. Mo¾ete ukljuèiti Auto Fill mod pisanjem M-x auto-fill-mode. Kad je mod ukljuèen, iskljuèujete ga s M-x auto-fill-mode. Kad je mod iskljuèen, ova ga naredba ukljuèuje, kad je ukljuèen, ona ga iskljuèuje. >> Napi¹ite M-x auto-fill-mode sad. Potom umeæite tekst "asdf " dok god se red ne razdvoji na dva dijela. Morate stavljati razmake izmeðu, jer Auto Fill lomi redove samo na razmacima. Rub je obièno postavljen na 70 znakova, ali ga mo¾ete promijeniti naredbom C-x f. Rub koji ¾elite postaviti pode¹avate numerièkim argumentom. >> Utipkajte C-x f s argumentom 20. (C-u 2 0 C-x f). Potom upi¹ite neki tekst, i gledajte kako Emacs lomi redove dulje od 20 znakova. Tad postavite rub natrag na 70 ponovno upotrijebiv¹i C-x f. Ako napravite promjene u sredini paragrafa, Auto Fill mod ga neæe cijelog reformatirati. Za preoblikovanje paragrafa, utipkajte M-q (Meta-q) s kursorom unutar paragrafa. >> Pomaknite kursor na prethodni paragraf, i stisnite M-q. * TRA®ENJE ---------- Emacs mo¾e tra¾iti nizove (grupe uzastopnih znakova ili rijeèi) bilo prema naprijed ili prema natrag kroz tekst. Tra¾enje niza je naredba kojom se pomièe kursor; ona æe pomaknuti kursor do sljedeæeg mjesta na kom se niz pojavljuje. Emacsova naredba za tra¾enje se razlikuje od sliènih naredbi veæine editora po tome ¹to je "postupna" (eng. incremental). To znaèi da se pretra¾ivanje odvija dok upisujete niz koji tra¾ite. Naredba kojom poèinjete naredbu je C-s za tra¾enje prema naprijed, i C-r za tra¾enje unatrag. ALI ÈEKAJTE! Nemojte ih odmah isprobati. Kad utipkate C-s, primijetit æete da se tekst "I-search" pojavljuje kao prompt u prostoru za poruke. Ovo vam ka¾e da je Emacs u stanju postupnog tra¾enja, i da èeka da upi¹ete ¹to ¾elite tra¾iti. zaustavlja tra¾enje. >> Sad stisnite C-s da zapoènete pretra¾ivanje. POLAKO, znak po znak, utipkajte rijeè `kursor', radeæi stanku izmeðu znakova da uoèite ¹to se dogaða s kursorom. Sad ste na¹li "kursor", jednom. >> Stisnite C-s opet, da naðete sljedeæe pojavljivanje "kursora". >> Sad stisnite èetiri puta, i gledajte kako se kursor pomièe. >> Stisnite da prekinete tra¾enje. Jeste li vidjeli ¹to se dogodilo? Za vrijeme inkrementalnog tra¾enja, Emacs poku¹ava otiæi na mjesto gdje se pojavljuje niz kojeg ste do sad utipkali, osvjetljavajuæi ga zbog preglednosti. Za odlazak na sljedeæe mjesto gdje se "kursor" pojavljuje, samo opet stisnite C-s. Ako ni jedno takvo mjesto ne postoji, Emacs æe se oglasiti zvuènim signalom i reæi vam da pretraga niju uspjela ("failing"). Pretragu mo¾ete prekinuti i pomoæu C-g. PRIMJEDBA: Na nekim sustavima, tipkanje C-s æe smrznuti sustav i vi¹e neæete vidjeti daljnji Emacsov output. To pokazuje da "prednost" operativnog sustava zvana "kontrola toka" (eng. flow control) presreæe C-s i ne da mu da doðe do Emacsa. Pritisak na C-q æe odmrznuti ekran. Tad pogledajte odjeljak "Spontaneous Entry to Incremental Search" Emacsovog manuala za savjet kako se nositi s ovom "predno¹æu". Ako za vrijeme postupnog tra¾enja pritisnete , uoèit æete da je zadnji znak niza izbrisan i da se pretraga vratila na zadnje mjesto. Na primjer, pretpostavimo da ste stisnuli "k" ne bi li na¹li prvo pojavljivanje "k". Ako sad stisnete "u", kursor æe se pomaknuti na mjesto prvog pojavljivanja "ku". Sad stisnite . Ovo æe ukloniti "u" iz tra¾enog niza, i pomaknuti kursor natrag na prvu pojavu "k". Ako ste usred tra¾enja i stisnete kontrolni ili meta znak (s nekoliko iznimki -- znakova koji imaju posebno znaèenje pri tra¾enju, kao ¹to su C-s i C-r), tra¾enje se zaustavlja. C-s zapoèinje pretragu koja tra¾i bilo koju pojavu tra¾enog niza NAKON trenutnog polo¾aja kursora. Ako ¾elite tra¾iti ne¹to ¹to se pojavljuje ranije u tekstu, stisnite C-r. Sve ¹to smo rekli za C-s vrijedi i za C-r, jedino ¹to je smjer pretrage suprotan. * VI©ESTRUKI PROZORI -------------------- Jedna od lijepih stvari u Emacsu je ¹to mo¾ete prikazati vi¹e prozora na ekranu istovremeno. >> Dovedite kursor do ovog reda i stisnite C-u 0 C-l. >> Sad stisnite C-x 2, ¹to razdvaja ekran na dva prozora. Oba prozora prikazuju ove upute. Kursor ostaje u gornjem prozoru. >> Stisnite C-M-v da pomaknete donji prozor. (Ako nemate pravu tipku Meta, stisnite ESC C-v.) >> Stisnite C-x o ("o" kao eng. "other", drugi) da pomaknete kursor u donji prozor. >> U donjem se prozoru pomièite s C-v i M-v. Nastavite èitati ove upute u gornjem prozoru. >> Opet stisnite C-x o da pomaknete kursor natrag u gornji prozor. Kursor u gornjem prozoru je upravo gdje je prije bio. Mo¾ete stalno koristiti C-x o za pomicanje meðu prozorima. Svaki prozor ima vlastiti polo¾aj kursora, ali samo jedan prozor zapravo prikazuje kursor. Sve uobièajene naredbe za editiranja djeluju na prozoru u kojem je kursor. Taj prozor nazivamo "izabrani prozor" (eng. selected window). Naredba C-M-v korisna je kad editirate tekst u jednom prozoru, a drugi koristite za referencu. Tada mo¾ete dr¾ati kursor uvijek u prozoru gdje editirate, a napredovati kroz onaj drugi s C-M-v. C-M-v je primjer CONTROL-META znaka. Ako imate pravu tipku META, mo¾ete dobiti C-M-v dr¾eæi zajedno i CTRL i META, dok tipkate v. Nema veze da li je CTRL ili META "prvi", jer obje ove tipke rade mijenjajuæi znakove koji pi¹ete. Ako nemate pravu META tipku, a umjesto nje koristite ESC, tad je poredak va¾an: morate stisnuti ESC praæen s CTRL-v; CTRL-ESC v neæe raditi. Razlog za ovo je ¹to je ESC tipka za sebe, a ne modifikator. >> Pritisnite C-x 1 (u gornjem prozoru) da se rije¹ite donjeg prozora. (Da ste stisnuli C-x 1 u donjem prozoru, rije¹ili biste se gornjeg. Ovu naredbu mo¾ete shvatiti kao "Ostavi samo jedan prozor -- onaj u kojem veæ jesam.") Ne morate prikazivati isti spremnik u oba prozora. Ako pritisnete C-x C-f da naðete datoteku u jednom prozoru, drugi se prozor ne mijenja. Mo¾ete naæi datoteku u svakom prozoru neovisno o drugima. Evo jo¹ jednog naèina da upotrijebite dva prozora za prikaz dvije razlièite stvari: >> Utipkajte C-x 4 C-f, a zatim ime neke od va¹ih datoteka. Zavr¹ite s . Uoèite da se navedena datoteka pojavila u donjem prozoru, a takoðer i kursor. >> Pritisnite C-x o za povrat u gornji prozor, i C-x 1 da uklonite donji. * REKURZIVNE RAZINE EDITIRANJA ------------------------------ Ponekad æete po¾eljeti uæi u ono ¹to se zove "rekurzivna razina editiranja" (eng. recursive editing level). Ovo je naznaèeno uglatim zagradama u statusnom redu, koje okru¾uju okrugle zagrade oko naziva moda. Na primjer, vidjeli biste [(Fundamental)] umjesto (Fundamental). Za izlazak iz rekurzivnog editiranja, pritisnite ESC ESC ESC. To je vi¹enamjenska naredba za "izlazak". Mo¾ete je koristiti i za uklanjanje dodatnih prozora, kao i za izlazak iz minispremnika. >> Stisnite M-x za ulazak u minispremnik; potom utipkajte ESC ESC ESC za izlaz. Iz rekurzivne razine editiranja ne mo¾ete izaæi s C-g. To je zato ¹to se C-g koristi za otkazivanje naredbi i argumenata UNUTAR te razine editiranja. * DODATNA POMOÆ --------------- U ovim smo uputama poku¹ali dati upravo toliko informacija da mo¾ete poèeti koristiti Emacs. Toliko je toga prisutno u Emacsu da bi bilo nemoguæe sve to ovdje objasniti. Meðutim, mo¾da po¾elite nauèiti vi¹e o Emacsu, jer on ima jo¹ puno korisnih prednosti. Emacs ima naredbe za èitanje dokumentacije o Emacsovim naredbama. Ove naredbe "pomoæi" sve poèinju sa znakom Control-h, koji se zove "znak za pomoæ" (eng. the Help character). Za kori¹tenje naredbi pomoæi, stisnite znak C-h, praæen znakom koji ka¾e koju vrstu pomoæi ¾elite. Ako ste ZAISTA izgubljeni, stisnite C-h ? i Emacs æe vam reæi koje vrste pomoæi mo¾e dati. Ako stisnete C-h, ali se predomislite, samo pritisnite C-g za otkaz pomoæi. (Na nekim je sistemima promijenjeno znaèenje C-h. Ovo se zaista ne bi smjelo raditi, pa se po¾alite sistemskom administratoru. U meðuvremenu, ako C-h ne prikazuje poruku o pomoæi na dnu ekrana, poku¹ajte upisati M-x help RET umjesto toga.) Osnovna naredba pomoæi je C-h c. Napi¹ite C-h, potom c, i znak ili niz znakova, i Emacs æe pokazati vrlo kratak opis naredbe. >> Stisnite C-h c Control-p. Poruka bi trebala biti poput: C-p runs the command previous-line (C-p pokreæe naredbu previous-line) Ovo vam ka¾e "ime funkcije". Imena funkcija se koriste uglavnom za mijenjanje i pro¹irivanje Emacsa. Ali buduæi da se imena funkcija biraju tako da pokazuju ¹to naredba radi, ona mogu poslu¾iti i kao vrlo kratka dokumentacija -- dovoljna da vas podsjeti na naredbu koju veæ znate. Vi¹e-znakovne naredbe kao ¹to su C-x C-s i (ako nemate tipku META, EDIT ili ALT) v su takoðer dozvoljene nakon C-h c. Za vi¹e podataka o naredbi, pritisnite C-h k umjesto C-h c. >> Stisnite C-h k Control-p. Osim imena, sad vidite i dokumentaciju funkcije u Emacsovom prozoru. Kad zavr¹ite s èitanjem ispisa, stisnite q da se rije¹ite teksta. Evo nekoliko korisnih moguænosti C-h: C-h f Opi¹i funkciju. Upi¹ete ime funkcije. >> Poku¹ajte stisnuti C-h f previous-line. Ovo æe ispisati sve ¹to Emacs zna o funkciji koja implementira naredbu C-p. C-h a Hiper Apropos. Upi¹ite rijeè, i Emacs æe popisati sve funkcije i varijable èija imena sadr¾e rijeè. Naredbe koje se mogu izvr¹iti s Meta-x bit æe oznaèene zvjezdicom slijeva. >> Utipkajte C-h a newline. Ovo prikazuje hipertekstualni spisak svih funkcija i varijabli s "newline" u imenima. Stisnite , ili pritisnite srednju tipku mi¹a da saznate vi¹e o funkciji ili varijabli. Stisnite `q' za izlaz iz hiper-aproposa. * ZAKLJUÈAK ----------- Upamtite, za trajan izlaz iz Emacsa stisnite C-x C-c. Za privremeni izlaz u ljusku upotrijebite C-z. (pod X-ima, ovo ikonizira trenutni Emacsov okvir.) Ove upute su predviðene da budu razumljive svim novim korisnicima, pa ako vam je ne¹to ovdje nejasno, nemojte sjediti i kriviti sebe - ¾alite se! KOPIRANJE --------- Ove upute potjeèu iz duge loze Emacsovih uputa, poèev¹i od onih koje je napisao Stuart Cracraft za izvorni Emacs. Ben Wing je dopisao poglavlje o X Windowsima. Martin Buchholz i Hrvoje Nik¹iæ su dodali jo¹ ispravki vezanih uz XEmacs. Na Hrvatski preveo Hrvoje Nik¹iæ, uz dodatnu lekturu Denisa Pleiæa. Ova verzija uputa je, kao i GNU Emacs, pod autorskim pravima, i dolazi s dozvolom redistribuiranja uz sljedeæe uvjete: (c) 1985, 1996 Free Software Foundation, sva prava zadr¾ana. Svakome je dozvoljeno praviti ili distribuirati nepromijenjene kopije ovog dokumenta, na bilo kojem mediju, uz uvjet da su saèuvane poruka o autorskim pravima i dozvolama, i da distributer daje drugima prava za daljnju redistribuciju, kako ovdje pi¹e. Dozvoljena je distribucija izmijenjenih verzija ovog dokumenta ili njegovih djelova, pod gore navedenim uvjetima, uz dodatni uvjet da sadr¾i obavijest o zadnjoj promjeni. Uvjeti kopiranja samog Emacsa su slo¾eniji, ali u istom duhu. Molimo vas da proèitate datoteku COPYING, i da podijelite kopije GNU Emacsa svojim prijateljima. Pomozite nam zgaziti opstrukcionizam ("vlasni¹tvo") nad softverom koristeæi, pi¹uæi i dijeleæi slobodan softver! This tutorial descends from a long line of Emacs tutorials starting with the one written by Stuart Cracraft for the original Emacs. Ben Wing updated the tutorial for X Windows. Martin Buchholz and Hrvoje Niksic added more corrections for XEmacs. This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: Copyright (c) 1985, 1996 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. The conditions for copying Emacs itself are more complex, but in the same spirit. Please read the file COPYING and then do give copies of GNU Emacs to your friends. Help stamp out software obstructionism ("ownership") by using, writing, and sharing free software! xemacs-21.4.22/etc/TUTORIAL.ja0000644000175000017500000014404507576025331013612 0ustar acsacsCopyright (c) 1985, 1996 Free Software Foundation, Inc. $B;HMQ>r7o$O%U%!%$%k:G8e$r;2>H$N$3$H(B $B$"$J$?$,8=:_8+$F$$$k$N$O(B XEmacs $BF~Lg%,%$%I$G$9!#(B XEmacs $B$N%3%^%s%I$rF~NO$9$k$K$O!"0lHL$K%3%s%H%m!<%k%-!$N$b$N$G$"$C$?$j$7$^$9(B $B!JNc$($P!"(BSun $B$N%-!<%\!<%I$G$O!"%9%Z!<%9%P!<$N:8$N%@%$%"%b%s%I%-!<$,(B META $B$G$9!K!#(BMETA $B%-!<$,L5$$>l9g$O!"(BESC $B$rBe$o$j$K;H$&$3$H$,$G$-$^$9!#(B $B$=$3$G!"(BMETA $B$H$+(B CONTROL $B$H$+$r=q$/Be$o$j$K!" $B%3%s%H%m!<%k%-!<$r2!$7$?$^$^!"(B<$BJ8;z(B>$B%-!<$r2!$7$^$9!#Nc$($P!"(B C-f $B$O%3%s%H%m!<%k%-!<$r2!$7$J$,$i(B f $B$N%-!<$r2!$9$3$H$G$9!#(B M-<$BJ8;z(B> $B%a%?%-!<$r2!$7$?$^$^!"(B<$BJ8;z(B>$B%-!<$r2!$7$^$9!#$b$7%a%?%-!<$,$J(B $B$$>l9g$O!"%(%9%1!<%W%-!<$r2!$7$F$+$iN%$7!"$=$l$+$i(B<$BJ8;z(B>$B%-!<(B $B$r2!$7$^$9!#0J9_%(%9%1!<%W%-!<$N$3$H$r(B $B$H=q$-$^$9!#(B $B!*=EMW!*(B: XEmacs$B$r=*N;$9$k$K$O!"(BC-x C-c $B$r%?%$%W$7$^$9!#(B ">>" $B$G;O$^$k9T$O!"$=$N;~2?$r$9$Y$-$+$r;X<($7$F$$$^$9!#Nc$($P!"(B <> >> $B$G$O(B C-v $B!J $B$r2!$7$FN%$7$F(B v$B!K$G$9!#(B >> M-v $B$H(B C-v $B$r;H$C$F!"A08e$K0\F0$9$k$3$H$r2?2s$+;n$7$F2<$5$$!#(B $B!v$3$3$^$G$NMWLs(B ================ $B%U%!%$%k$r2hLLKh$K8+$F9T$/$K$O!"$9!#$3$N$H$-!"%+!<%=%k$N$"$k9T$,2hLL$NCf1{$K(B $B$/$k$h$&$K$9$k!#!J(BC-1 $B$8$c$J$/$C$F(B C-L $B$G$9$h!*!K(B >> $B%+!<%=%k$r8+$D$1!"$=$N6a$/$K$I$s$JJ8>O$,=q$+$l$F$$$k$+$r3P$(!"(B $B$=$l$+$i(B C-l $B$r%?%$%W$7$F2<$5$$!#(B $B%+!<%=%k$,$I$3$K0\F0$7$?$+!"$=$N6a$/$N%F%-%9%H$O$I$&$J$C$?$+$rD4$Y(B $B$F$_$^$7$g$&!#(B $B!v4pK\E*$J%+!<%=%k$N@)8f(B ======================== $B2hLLKh$N0\F0$O$G$-$k$h$&$K$J$j$^$7$?!#:#EY$O!"2hLL$NCf$G!"FCDj$N>l=j$K(B $B0\F0$9$k$?$a$NJ}K!$r21$($^$7$g$&!#(B $B$3$l$K$O$$$/$D$+$N$d$jJ}$,$"$j$^$9!#0lHV4pK\E*$JJ}K!$O(B C-p, C-b, C-f, C-n $B$r;H$&$3$H$G$9!#$3$l$i$O$=$l$>$l%+!<%=%k$rA0$N9T!"A0$NJ8;z!"> C-n $B$H(B C-p $B$G%+!<%=%k$r>e?^$N??Cf$N9T$KF0$+$7$F2<$5$$!#$=$l$+$i(B C-l $B$r%?%$%W$7$F?^$NA4BN$,2hLLCf1{$K$/$k$h$&$K$7$F$_$^$7$g$&!#(B $B$3$l$i$N%3%^%s%I$O$=$l$>$l!"(BPrevious, Next, Backward, Forward $B$NF,J8;z(B $B$K$J$C$F$$$k$N$G!"21$($d$9$$$G$7$g$&!#$3$l$i$O!"4pK\E*$J%+!<%=%k0\F0%3(B $B%^%s%I$G$"$j!"$$$D$G$b;H$&$b$N$G$9!#:#$3$3$G3P$($F2<$5$$!#(B >> C-n $B$r2?2s$+%?%$%W$7!"!J:#!"$"$J$?$,FI$s$G$$$k!K$3$N9T$^$G%+!<%=%k(B $B$r0\F0$5$;$^$7$g$&!#(B >> C-f $B$r;H$C$F9T$NCf$[$I$K0\F0$7!"(BC-p $B$G2?9T$+>e$K0\F0$5$;$^$7$g$&!#(B $B%+!<%=%k$N0LCV$NJQ2=$KCm0U$7$F2<$5$$!#(B $B3F9T$N:G8e$K$O!JL\$K$O8+$($J$$!K(B Newline $BJ8;z$,$"$j$^$9!#$3$l$O> $B9T$N@hF,$G(B C-b $B$r%?%$%W$7$F$_$^$7$g$&!#%+!<%=%k$OA0$N9T$NKvHx$K0\F0(B $B$9$k$O$:$G$9!#$3$l$O(B C-b $B$,A0$N(B Newline $BJ8;z$r1[$($FLa$C$?$+$i$G$9!#(B $BF1MM$K(B C-f $B$O%+!<%=%k$r(B Newline $BJ8;z$r1[$($F> $B$5$i$K$b$&>/$7(B C-b $B$r%?%$%W$7$F%+!<%=%k0\F0$N46$8$rGD$s$G2<$5$$!#(B $B:#EY$O(B C-f $B$G9TKv$^$G?J$s$G2<$5$$!#(B $B$5$i$K$b$&0lEY(B C-f $B$r%?%$%W$7$FO$,2hLL$NCf$K0\F0$7$FMh$F$^$9!#$3$l$r!V%9%/%m!<%k!W$H8F$S$^$9!#2hLL(B $B$,%9%/%m!<%k$9$k$3$H$K$h$C$F!"%+!<%=%k$r0\F0$5$;$F$b!"%+!<%=%k$O>o$K2h(B $BLLFb$K$"$k$h$&$K$5$l$^$9!#(B >> C-n $B$r;H$C$F!"%+!<%=%k$r2hLL$N2 f) $B$G0lC18l@h$X!"(BM-b ( b) $B$G0lC18lA0$X0\F0$7$^$9!#(B $BCm0U!'(B $BF|K\8l$K$D$$$F$O!"C18l$N@Z$lL\$rG'<1$9$k$3$H$O$G$-$^$;$s$,!"5?(B $B;wE*$JJ8@a$rC18l$N@Z$lL\$H$7$F$$$^$9!#(B >> M-f $B$d(B M-b $B$r2?2s$+;n$7$F$_$^$7$g$&!#(B $BC18l$NCfDx$K$$$k;~$O!"(BM-f $B$O$=$NC18l$N=*$o$j$^$G?J$_$^$9!#$b$76uGrJ8;z(B $B$K$$$k;~$K$O(B M-f $B$O> M-f $B$H(B M-b $B$r(B C-f $B$H(B C-b $B$r8r$($J$,$i?t2s;n$7!"C18l$NCf$KF~$k;~$H!"(B $BC18l$HC18l$N4V$K$$$k;~$NF0$-$rD4$Y$F2<$5$$!#(B C-f $B$H(B C-b $B$KBP$9$k!"(BM-f $B$H(B M-b $B$NN`;w@-$KCmL\$7$^$7$g$&!#B?$/$N>l9g!"(B $B%a%?%-!<$OJ8=q$r9=@.$9$k%f%K%C%H!JC18l!"J8!"CJMn!K$KBP$9$kA`:n$K;H$$!"(B $B%3%s%H%m!<%k%-!<$O$=$l$h$j$b$b$C$H4pK\E*$JBP>]!JJ8;z$H$+9TEy!K$KBP$9$k(B $BA`:n$K;H$$$^$9!#(B $B$3$NN`;w@-$O9T$HJ8$N4X78$K$b$"$j$^$9!#(BC-a $B$H(B C-e $B$O$=$l$>$l9TF,$H9TKv(B $B$K0\F0$7!"(BM-a $B$H(B M-e $B$O$=$l$>$lJ8F,$HJ8Kv$K0\F0$7$^$9!#(B >> C-a $B$r#22s!"$=$l$+$i(B C-e $B$r#22s;n$7$^$7$g$&!#(B M-a $B$r#22s!"$=$l$+$i(B M-e $B$r#22s;n$7$^$7$g$&!#(B C-a $B$d(B C-e $B$O7+JV$7$F$b$=$l0J>e0\F0$7$^$;$s$,!"(BM-a $B$r7+$jJV$9$H$I$s$I(B $B$sA0$NJ8F,$KLa$C$F$$$-$^$9!#$3$NItJ,$G$ON`;w@-$,GK$l$F$$$^$9$,!"$^$"$3(B $B$l$,<+A3$JF0:n$G$O$J$$$G$7$g$&$+!#(B $BJ8>OCf$G%+!<%=%k$,$"$k0LCV$r!V%]%$%s%H!W$H8F$S$^$9!#8@$$$+$($l$P!"%+!<(B $B%=%k$O!"J8>O$N$I$3$K%]%$%s%H$,$"$k$+$r2hLL>e$G<($7$F$$$k$N$G$9!#(B $B0J2<$KC1=c$J%+!<%=%k0\F0A`:n$K$D$$$FMWLs$7$^$9!#$3$N$J$+$K$O!"C18l$d9T(B $BC10L$G$N0\F0%3%^%s%I$b4^$^$l$F$$$^$9!#(B C-f $B0lJ8;z> $B$3$l$iA4It$r2?EY$+;n$7$FN}=,$7$^$7$g$&!#(B $B$I$l$bIQHK$K;H$&%3%^%s%I$G$9!#(B $B$"$HFs$D!"=EMW$J%+!<%=%k0\F0%3%^%s%I$,$"$j$^$9!#%U%!%$%k$N@hF,$K0\F0$9(B $B$k(B M-< $B$H!"%U%!%$%k$NKvHx$K0\F0$9$k(B M-> $B$G$9!#(B $BBgDq$NCe$K$"$j!"$=$l$r%?%$%W$9(B $B$k$K$O%7%U%H%-!<$r;H$&I,MW$,$"$j$^$9!#$7$?$,$C$F(B M-< $B$r%?%$%W$9$k$K$O!"(B $B%a%?%-!<$H%7%U%H%-!<$H%3%s%^%-!<$rF1;~$K2!$5$M$P$J$j$^$;$s!#(B >> M-< $B$r;n$7$F!"$3$NF~Lg%,%$%I$N@hF,$K0\F0$7$^$7$g$&!#(B $B$=$l$+$i!"(BC-v $B$r2?EY$+;H$C$F$3$3$^$G5"$C$F$-$F$/$@$5$$!#(B >> M-> $B$r;n$7$F!"$3$NF~Lg%,%$%I$NKvHx$K0\F0$7$^$7$g$&!#(B $B$=$l$+$i!"(BM-v $B$r2?EY$+;H$C$F$3$3$^$G5"$C$F$-$F$/$@$5$$!#(B $B$b$7CeC#$7(B $B$F$/$l$P!"$3$l$i$N%3%s%H%m!<%kJ8;z$rBG$DJ}$,!"Lp0u%-!<$rBG$D$h$j$:$C$H(B $BB.$$$3$H$,J,$k$G$7$g$&!Jo$N0LCV$+$iBg$-$/F0$+$5$J$$$G$h$$$N$G!K!#(B $B:G8e$K!"0lEY$3$l$i$N%3%s%H%m!<%kJ8;z$rBG$D=,47$rIU$1$?$i!"$b$C$H?J$s$@(B $B%+!<%=%k0\F0%3%^%s%I$b4JC1$K3P$($k$3$H$,$G$-$^$9!#(B XEmacs$B$NBgDq$N%3%^%s%I$K$O?tCM0z?t$rM?$($k$3$H$,$G$-$^$9!#BgDq$N>l9g$3(B $B$N?tCM$G7+$jJV$72s?t$r;X<($9$k$3$H$K$J$j$^$9!#?tCM0z?t$rM?$($k$K$O!"%3(B $B%^%s%I$rF~NO$9$kA0$K(B C-u $B$KB3$$$F?t;z2?7e$+%?%$%W$7$^$9!#$b$7%a%?%-!<(B $B$,;H$($k$J$i!"%a%?%-!<$r2!$7$J$,$i?t;z$r%?%$%W$9$k$3$H$b$G$-$^$9!#$G$b(B $B$d$O$j(B C-u $B$r3P$($k$3$H$r4+$a$^$9!#$=$l$O$I$s$JC> $BE,Ev$J?tCM0z?t$r(B C-n $B$"$k$$$O(B C-p $B$KM?$(!"0l2s$N%3%^%s%I$G$J$k$Y$/(B $B$3$N9T$N6a$/$KMh$k$h$&$K$7$F$_$^$7$g$&!#(B $BBgDq$N%3%^%s%I$O?tCM0z?t$r7+$jJV$72s?t$H2rl9g!";XDj$5$l$??t$N9T$@$12hLL$r%9%/(B $B%m!<%k$5$;$k$3$H$K$J$j$^$9!#Nc$($P(B C-u 4 C-v $B$O2hLL$r#49TJ,>e$K%9%/%m!<(B $B%k$5$;$^$9!#(B >> C-u 8 C-v $B$r;n$7$F$_$^$7$g$&!#(B $B2hLL$,>e$K#89T%9%/%m!<%k$7$?$O$:$G$9!#$^$?2hLL$r2<$K%9%/%m!<%k$5$;$k$K$O(B M-v $B$K0z?t$rM?$($l$P$h$$$N$G$9!#(B $B$b$7(B X $B%&%#%s%I%&$r;H$C$F$$$k$N$J$i!"%9%/%m!<%k%P!<$H8F$P$l$k=DD9$N;M(B $B3Q$$%(%j%"$,(B XEmacs $B$N%&%#%s%I%&$N1&C<$K$"$k$O$:$G$9!#$=$3$r%^%&%9$GA`(B $B:n$7$F2hLL$r%9%/%m!<%k$5$;$k$3$H$b$G$-$^$9!#(B >> $B%9%/%m!<%k%P!<$NCf$G%^%&%9$N??Cf$N%\%?%s$r2!$7$F$_$^$7$g$&!#%\%?%s(B $B$r2!$7$?0LCV$G7h$^$kJ8>O$N0LCV$^$G2hLL$,%9%/%m!<%k$7$^$9!#(B >> $B%9%/%m!<%k%P!<$N0lHV>e$+$i#39TL\$[$I$N$H$3$m$K%^%&%9$r0\F0$7$F!":8(B $B$N%\%?%s$r2?EY$+2!$7$F$_$^$7$g$&!#(B * X $BC$l9T$N:G=i$H:G8e$K0\F0$7!"(BC_home $B$H(B C-end $B$O%U%!%$%k$N:G=i$H:G8e$K0\F0$7$^$9!#%-!<%\!<%I$K(B PgUp $B$H(B PgDn $B%-!<(B $B$,$"$l$P!"(BM-v $B$H(B C-v $B$N$h$&$K!"0lEY$K0l2hLLKh!">e2<$K0\F0$9$k$?$a$K;H(B $B$&$3$H$,$G$-$^$9!#(B $B$3$l$iA4$F$N%3%^%s%I$O>e$G@bL@$5$l$F$$$k$h$&$K?tCM0z?t$ro$K4JC1$G$9!#(B $B!v(B XEmacs $B$,%O%s%0$7$?;~!JF0$+$J$/$J$C$?;~!K(B ========================================== $B$b$7(B XEmacs $B$,%3%^%s%I$KH?1~$7$J$/$J$C$?$i!"(BC-g $B$r%?%$%W$9$k$3$H$G(B XEmacs $B$r0BA4$K;_$a$k$3$H$,$G$-$^$9!#(BC-g $B$G$H$F$b;~4V$N$+$+$k%3%^%s%I(B $B$r;_$a$k$3$H$,$G$-$^$9!#(B C-g $B$O$^$?!"?tCM0z?t$re$N%-!> C-u 100 $B$H%?%$%W$7$F0z?t#1#0#0$r@_Dj$7$F$+$i(B C-g $B$rBG$C$F$_$^$7$g$&!#(B $B$=$l$+$i(B C-f $B$rBG$C$F2<$5$$!#0lJ8;z$7$+?J$^$J$$$O$:$G$9!#$J$<$J$i!"(B C-g $B$G?tCM0z?t$,%-%c%s%;%k$5$l$?$+$i$G$9!#(B $B4V0c$C$F(B $B$r%?%$%W$7$F$7$^$C$?;~$b!"(BC-g $B$G$=$l$rC$;$^$9!#(B $B!v;HMQIT2D(B (disabled) $B%3%^%s%I(B ================================== $B$$$/$D$+$N%3%^%s%I$O=i?4> `C-x n p' : $B$H%?%$%W$7$F$_$^$7$g$&!J$3$l$O;HMQIT2D%3%^%s%I$G$9!K!#(B $B$=$l$+$i(B n $B$H%?%$%W$7$^$7$g$&!#(B $B!v%&%#%s%I%&(B ============ XEmacs $B$O4v$D$b$N%&%#%s%I%&$K!"$=$l$>$l8DJL$NJ8>O$rI=<($9$k$3$H$,$G$-(B $B$^$9!#(BXEmacs $B$G;H$o$l$F$$$k!V%&%#%s%I%&!W$O%&%#%s%I%&%7%9%F%`$G$N=E$J$C(B $B$F$$$kJL$N%&%#%s%I%&$K8@5Z$7$F$$$k$N$G$O$J$/!"C10l$N(B X $B%&%#%s%I%&2<$G(B $B$NJL$NAk$N$3$H$r8@$C$F$$$k$3$H$KCm0U$7$F$/$@$5$$!#!J(BXEmacs $B$OJ#?t$N(B X $B$N%&%#%s%I%&!"(BXEmacs $B$NMQ8l$G$O!V%U%l!<%`!W$r;}$D$3$H$b$G$-$^$9!#$3$l(B $B$O8e$[$I@bL@$7$^$9!#!K(B $B$3$3$G$O!"J#?t$N%&%#%s%I%&$r;H$&5;=Q$K$O?($i$J$$$[$&$,8-L@$G$7$g$&!#$G(B $B$b!"%X%k%W$dFCDj$N%3%^%s%I$N=PNO$G8=$l$k$+$b$7$l$J$$M>J,$J%&%#%s%I%&$r(B $B>C$7$F!"$I$&$d$C$F85$N0l$D$N%&%#%s%I%&$N>uBV$KLa$k$+$r@bL@$9$k$3$H$OI,(B $BMW$G$7$g$&!#$=$l$O4JC1$G$9!#(B C-x 1 $B%&%#%s%I%&$r#1$D$K$9$k!J$D$^$jB>$N%&%#%s%I%&$rA4It>C$9!K(B $B$D$^$j(B C-x $B$rBG$C$F$+$i$5$i$K(B 1 $B$rBG$D$N$G$9!#$3$N%3%^%s%I$O%+!<%=%k$N(B $B$"$k%&%#%s%I%&$r2hLLA4BN$K9-$2$^$9!#B>$N%&%#%s%I%&$OA4It>C$($^$9!#(B >> $B%+!<%=%k$r$3$N9T$K;}$C$F$-$F!"(BC-u 0 C-l $B$H%?%$%W$7$F$_$F2<$5$$!#(B $B!J(BC-l $B$,2hLL$r:FIA2h$9$k$3$H$r;W$$=P$7$F$/$@$5$$!#$=$l$K?tCM0z?t$rM?$((B $B$k$H!"!V2hLL$r:FIA2h$7$F8=:_$N9T$r2hLL$N:G>eIt$+$i$=$N?t$@$1N%$l$?$H$3(B $B$m$K0\F0$7$J$5$$!W$H$$$&0UL#$K$J$j$^$9!#$G$9$+$i!"(BC-u 0 C-l $B$O!V2hLL$r(B $B:FIA2h$7$F!"8=:_$N9T$r:G>eIt$K$9$k!W$H$$$&0UL#$K$J$j$^$9!#!K(B >> $BB3$$$F(B Control-x 2 $B$H%?%$%W$7$F2<$5$$!#(B $B?7$7$$%&%#%s%I%&$,$3$N%P%C%U%!$NFbMF$rI=<($9$k$?$a$K8=$l$k$H$H$b$K!"(B $B$3$N%&%#%s%I%&$,$I$N$h$&$K=L$`$+$r8+$F2<$5$$!#(B >> C-x 1 $B$H%?%$%W$7$F!"?7$7$$%&%#%s%I%&$,>C$($k$N$r8+$F2<$5$$!#(B $B!vA^F~$H:o=|(B ============ $B%F%-%9%H$rF~NO$7$?$1$l$P!"C1$K$=$l$r%?%$%W$7$F2<$5$$!#(BXEmacs $B$O!"L\$K(B $B8+$($kJ8;z!J(BA, 7, * $BEy!K$r%F%-%9%H$G$"$k$H$_$J$9$N$G!"$=$l$i$O$=$N$^$^(B $BA^F~$5$l$^$9!#(B$B!J2~9T%-!A0$KF~NO$7$?J8;z$r:o=|$9$k$K$O!"(B $B$r%?%$%W$7$^$9!#(B $B$O!"(B $B%-!<%\!<%I>e$K!V(BDel$B!W$H=q$$$F$"$k%-!<$G$9!#;~$K$O(B $B%-!<$b(B $B$H$7$FF0:n$7$^$9$,!"$$$D$b$G$O$"$j$^$;$s!#(B $B$h$j0lHLE*$K$O!"(B $B$O8=:_%+!<%=%k$N$"$k0LCV$ND>A0$NJ8;z$r:o=|$7(B $B$^$9!#(B >> $BJ8;z$r$$$/$D$+%?%$%W$7!"$=$l$+$i$=$l$i$r(B $B$r;H$C$F:o=|$7(B $B$F2<$5$$!#$3$N%U%!%$%k$rJQ99$9$k$3$H$r5$$K$9$kI,MW$O$"$j$^$;$s!#%*(B $B%j%8%J%k$NF~Lg%,%$%I%U%!%$%k$OJQ99$5$l$^$;$s$+$i!#:#8+$F$$$k%U%!%$(B $B%k$O$"$J$?$N$?$a$N%3%T!<$G$9!#(B $BJ8>O$N0l9T$,2hLL$K<}$^$i$J$$DxD9$/$J$C$?>l9g!"$=$N9T$O2hLL>e$N> $B2hLL$N1&C<$^$GJ8>O$rF~NO$7!"$5$i$KF~NO$rB3$1$F2<$5$$!#(B $B7QB39T$,$G$-$k$N$,J,$k$G$7$g$&!#(B >> $B$r;H$C$F2hLL$K<}$^$k$H$3$m$^$G8=:_$N9T$rC;$/$7$F$_$F$/$@$5(B $B$$!#7QB39T$O>C$($^$9!#(B $B2~9TJ8;z$bB>$NJ8;z$HF1$8$h$&$K:o=|$G$-$^$9!##2$D$N9T$N4V$N2~9TJ8;z$r>C(B $B$9$H$=$l$i$N9T$,9g$o$5$j#1$D$N9T$K$J$j$^$9!#$b$7$=$N9g$o$5$C$?9T$,2hLL(B $B$NI}$h$j$bD9$$>l9g$O!"7QB39T$H$J$C$FI=<($5$l$^$9!#(B >> $B%+!<%=%k$r9T$N@hF,$K0\F0$7!"(B $B$r%?%$%W$7$F2<$5$$!#8=:_$N9T$,(B $B$=$NA0$N9T$H$D$J$,$j$^$9!#(B >> $B$r%?%$%W$7$F!":#:o=|$7$?2~9TJ8;z$r$^$?A^F~$7$F2<$5$$!#(B XEmacs $B$N$[$H$s$I$N%3%^%s%I$O!"7+$jJV$7$N2s?t;XDj$G$-$k$3$H$r;W$$=P$7(B $B$F2<$5$$!#$3$l$O!"J8;z$NA^F~$K$D$$$F$bEv$F$O$^$j$^$9!#(B >> C-u 8 * $B$H%?%$%W$9$k$H(B ******** $B$,A^F~$5$l$^$9!#;n$7$F$_$^$7$g$&!#(B $B$3$l$G!"(BXEmacs $B$G%F%-%9%H$rF~NO$7!"$^$?4V0c$$$r=$@5$9$k$b$C$H$b4pK\E*(B $B$JJ}K!$r3X$s$@$3$H$K$J$j$^$9!#J8;z$HF1$8MM$K!"C18l$d9T$b:o=|$9$k$3$H$,(B $B$G$-$^$9!#:o=|A`:n$K$D$$$FMWLs$9$k$H $B%+!<%=%k$ND>A0$NJ8;z$r:o=|!J(Bdelete$B!K(B C-d $B%+!<%=%k$N$"$kJ8;z$r:o=|!J(Bdelete$B!K(B M- $B%+!<%=%k$ND>A0$NC18l$r>C5n!J(Bkill$B!K(B M-d $B%+!<%=%k0LCV0J9_$K$"$kC18l$r>C5n!J(Bkill$B!K(B C-k $B%+!<%=%k0LCV$+$i9TKv$^$G$r>C5n!J(Bkill$B!K(B M-k $B%+!<%=%k0LCV$+$iJ8Kv$^$G$r>C5n!J(Bkill$B!K(B $B$H(B C-d $B$KBP$9$k(B M- $B$H(B M-d $B$O!"(BC-f $B$H(B M-f $B$G;O$^$C$?N`(B $B;w@-$r$^$?3HD%$7$^$9!#$3$3$G(B $B$O%3%s%H%m!<%kJ8;z$G$O$"$j$^$;$s(B $B$,!"$^$"!"$=$l$O5$$K$7$J$$$G2<$5$$!#(BC-k $B$H(B M-k $B$N4X78$O(B C-e $B$H(B M-e $B$N(B $B4X78!J9T$HJ8$NBPHf!K$HF1$8$G$9!#(B $B0lEY$K#2J8;z0J>e>C$7$?>l9g!"(BXEmacs $B$O$=$N>C$7$?%F%-%9%H$rJ]B8$7$F$*$$(B $B$F!"$^$?85$KLa$9$3$H$,$G$-$k$h$&$K$7$F$$$^$9!#$3$N!V85$KLa$9!W$H$$$&F0(B $B:n$r:FF~!J(Byanking$B!K$H8F$S$^$9!#>C$7$?%F%-%9%H$O!"85$HF1$8>l=j$K$G$b85(B $B$H$O0c$&>l=j$K$G$b:FF~$G$-$^$9!#$^$?!"2?EY$b:FF~$7$F%F%-%9%H$N%3%T!<$r(B $BJ#?t:n$k$3$H$b$G$-$^$9!#:FF~$N$?$a$N%3%^%s%I$O(B C-y $B$G$9!#(B $B!V>C5n!J(Bkill$B!K!W$H!V:o=|!J(Bdelete$B!K!W$N0c$$$K5$$r$D$1$F2<$5$$!#>C5n$7$?(B $B%F%-%9%H$O:FF~$G$-$^$9$,!":o=|$7$?$b$N$O:FF~$G$-$^$;$s!#0lHL$K!"BgNL$N(B $B%F%-%9%H$r>C$9%3%^%s%I$O$=$N%F%-%9%H$rJ]B8$7$F$*$-$^$9$,!"0lJ8;z$H$+6u(B $BGr9T$d6uGrJ8;z$r:o=|$9$k%3%^%s%I$O:o=|$7$?$b$N$rJ]B8$7$-$^$;$s!#(B >> $B6u9T$G$J$$9T$N@hF,$K%+!<%=%k$r0\F0$5$;$F2<$5$$!#(B $B$=$l$+$i(B C-k $B$G$=$N9T$N%F%-%9%H$r>C5n$7$F2<$5$$!#(B >> $B$b$&0lEY(B C-k $B$r%?%$%W$7$F$/$@$5$$!#$=$N9T$KB3$/2~9TJ8;z$,>C$5$l$k$N(B $B$,J,$j$^$7$?$+!#(B $B0l2sL\$N(B C-k $B$O$=$N9T$N%F%-%9%H$r>C$7!"#22sL\$N(B C-k $B$O$=$N9T<+?H$r>C$7(B $B$F$=$N@h$N9T$r>e$2$F$-$^$9!#(BC-k $B$N?tCM0z?t$N07$$$OFCC$7$^$9!#$3$l$OC1$J$k7+$jJV$7$G$O$"$j$^$;$s!#(B C-u 2 C-k $B$O#2$D$N9T$H$=$l$>$l$KB3$/2~9TJ8;z$r>C$7$^$9$,!"(BC-k $B$r#2EY%?(B $B%$%W$7$F$b$=$&$O$J$j$^$;$s!#(B $B:G8e$K>C5n$7$?%F%-%9%H$r8=:_%+!<%=%k$,$"$k0LCV$K:FF~$9$k$K$O(B C-y $B$r%?(B $B%$%W$7$^$9!#(B >> $B;n$7$F2<$5$$!#(BC-y $B$r%?%$%W$7$F:G8e$K>C5n$7$?%F%-%9%H$r:FF~$7$^$7$g$&!#(B C-y $B$O!"$"$J$?$,L5$/$7$?$b$N$rC5n$7$?3F9T$OA4It$^$H$a$FJ]B8$5$l$k$N$G!"0l2s$N(B C-y $B$G(B $B$=$l$i$N9T$,A4It:FF~$5$l$^$9!#(B >> C-k $B$r2?EY$+B3$1$F%?%$%W$7$F$_$F2<$5$$!#(B $B$5$"!">C5n$7$?%F%-%9%H$r:FF~$7$^$7$g$&!#(B >> C-y $B$r%?%$%W$7$F2<$5$$!#C5n$7$?%F%-%9%H$r:FF~$7$?$$$N$K!"JL$N%F%-%9%H$r$=$N8e>C5n$7$?;~(B $B$O$I$&$9$l$P$h$$$G$7$g$&!)(B C-y $B$O:G8e$K>C5n$7$?$b$N$r:FF~$7$^$9!#$G$b(B $B$=$l$G$h$j0JA0$K>C5n$7$?%F%-%9%H$,$J$/$J$k$o$1$G$O$"$j$^$;$s!#$=$&$$$&(B $B%F%-%9%H$O(B M-y $B$G:FF~$G$-$^$9!#(BC-y $B$G:G8e$K>C5n$7$?%F%-%9%H$r:FF~$7$?(B $BD>8e$K(BM-y $B$r%?%$%W$9$k$H!"$=$N:FF~$5$l$?%F%-%9%H$O$=$l0JA0$K>C5n$7$?$b(B $B$N$KJQ99$5$l$^$9!#2?EY$bB3$1$F(B M-y $B$r%?%$%W$9$k$H!"$5$i$KA0$K>C5n$7$?(B $B%F%-%9%H$r8F$SLa$;$^$9!#K>$_$N%F%-%9%H$K9T$-Ev$C$?$i!"$=$l$O$=$N$^$^$K(B $B$7$FJT=8:n6H$rB3$1$l$P$h$$$N$G$9!#(B $B$"$k2s?t$@$1(B M-y $B$r7+$jJV$7$?$i!"$^$?:G=i!J$D$^$j:G8e$K>C5n$7$?%F%-%9(B $B%H!K$KLa$j$^$9!#(B >> $B0l9T>C5n$7!"JL$N9T$K9T$C$F$=$N9T$r>C5n$7$F2<$5$$!#(B $B$=$l$+$i(B C-y $B$G#2HVL\!J:G8e!K$K>C5n$7$?9T$r:FF~$7$F2<$5$$!#(B $BB3$$$F(B M-y $B$G$=$N9T$r:G=i$K>C5n$7$?9T$KJQ$($F2<$5$$!#(B M-y $B$rB3$1$I$&$J$k$+8+$F$_$^$7$g$&!##2HVL\$K>C5n$7$?9T$,La$C$FMh$k(B $B$^$G(B M-y $B$r7+$jJV$7!"$5$i$K$b$&2?EY$+(B M-y $B$r$7$^$7$g$&!#(B $B$b$7K>$_$J$i(B M-y $B$K@5$b$7$/$OIi$N?tCM0z?t$rM?$($F$bNI$$$G$7$g$&!#(B $B!vC$7(B(UNDO) ================ $B$b$7!"J8>O$rJQ99$7$?8e$G$=$NJQ99$O4V0c$$$@$C$?$H;W$C$?$i!"C$7(B $B!J(Bundo$B!K%3%^%s%I(B C-x u $B$G$=$NJQ99$rC$9$3$H$,$G$-$^$9!#(B $BDL>o!"(BC-x u $B$O0l$D$N%3%^%s%I$K$h$kJQ99$rC$7$^$9!#B3$1$F2?EY$b(B C-x u $B$r9T$($P$=$N$?$S$K0l$DA0$N%3%^%s%I$,C$7$K$J$j$^$9!#(B $B$?$@$7$3$l$K$ONc30$,Fs$D$"$j$^$9!#$^$:!"J8>O$rJQ99$7$J$$%3%^%s%I$OC$7$K$J$j$^$;$s!#%+!<%=%k0\F0$d%9%/%m!<%k$N%3%^%s%I$,$=$l$KEv$?$j$^$9!#(B $B$=$l$+$i!"%F%-%9%HJ8;z$NA^F~!J<+8JA^F~%3%^%s%I!K$O(B 20 $B8D0l$^$H$a$G07$o(B $B$l$^$9!#$3$l$O%F%-%9%H$NA^F~$rC$9$?$a$N(B C-x u $B$N2s?t$r8:$i$9$?$a(B $B$G$9!#(B >> $B$3$N9T$r(BC-k$B$G>C$7$F2<$5$$!#$=$7$F!"(BC-x u $B$GLa$7$F2<$5$$!#(B C-_ $B$bC$7!J(Bundo$B!K$r9T$J$&%3%^%s%I$G$9!#5!G=$O!"(BC-x u $B$HF1$8$G$9$,!"(B $BB3$1$F2?EY$b%?%$%W$9$k>l9g$O$h$jJXMx$G$9!#(BC-_ $B$NLdBj$O!"%-!<%\!<%I$K$h$C(B $B$F$O$I$&$d$C$F%?%$%W$9$k$N$+J,$j$E$i$$;v$G$9!#$@$+$i(B C-x u $B$,$"$k$N$G(B $B$9!#CO$r915WE*$JJ*$K$9$k$K$O!"$=$l$r%U%!%$%k$KJ]B8$7$J$1$l$P(B $B$J$j$^$;$s!#$5$b$J$$$H!"(BXEmacs $B$N=*N;$HF1;~$K$=$l$O$J$/$J$C$F$7$^$$$^(B $B$9!#JT=8$7$?J*$r%U%!%$%k$KF~$l$k$K$O%U%!%$%k$r3+$$$F$+$i$7$^$9!#!J%U%!(B $B%$%k$r(B "visit" $B$9$k$H$b8@$$$^$9!K!#(B $B%U%!%$%k$r3+$/$H$O!"$=$N%U%!%$%k$NCf?H$r(B XEmacs $B$G8+$k$3$H$r0UL#$7$^$9!#(B $B?'!9$J0UL#$G!"$=$l$O$"$J$?$,%U%!%$%k<+?H$rJT=8$7$F$$$k$+$NMM$G$9!#$7$+(B $B$7!"(BXEmacs $B$G9T$&JQ99$O%U%!%$%k$r%;!<%V$9$kKx$O915WE*$J$b$N$H$J$j$^$;(B $B$s!#$3$l$O!"$=$l$rK>$^$J$$$N$K!"ESCf$^$GJQ99$7$?%U%!%$%k$,;D$k$N$rHr$1(B $B$k$?$a$G$9!#%;!<%V$7$?8e$G$5$(!"JQ99$7$?$b$N$,4V0c$C$F$$$?;~$N$?$a$K!"(B $B85$N%U%!%$%k$OL>A0$rJQ$($F;D$5$l$^$9!#(B $B2hLL$N0lHV2<6a$/$K!"(B"ISO7--%%-XEmacs: TUTORIAL.ja" $B$NMM$JJ8;zNs$G;O$^(B $B$j(B "----" $B$G=*$C$F$$$k9T$,$"$k$O$:$G$9!#2hLL$N$3$NItJ,$O>o$K8=:_3+$$$F(B $B$$$k%U%!%$%k$NL>A0$,I=<($5$l$F$$$^$9!#:#$O(B "TUTORIAL.ja" $B$H$$$&L>$N%U%!(B $B%$%k!J$3$l$O(B XEmacs $BF~Lg%,%$%I$N$"$J$?MQ$N%3%T!<$G$9!K$r3+$$$F$$$^$9!#(B XEmacs $B$G%U%!%$%k$r3+$/$H$=$N%U%!%$%k$NL>A0$,$3$NItJ,$K8=$l$^$9!#(B $B%U%!%$%k$r3+$$$?$jJ]B8$7$?$j$9$k%3%^%s%I$O!"#2$D$NJ8;z$+$i@.$k$H$$$&E@(B $B$G:#$^$G3X$s$@B>$N%3%^%s%I$H$O0c$$$^$9!#N>J}$H$b!"(BControl-x $B$H$$$&J8;z(B $B$G;O$^$j$^$9!#(BControl-x $B$G;O$^$k%3%^%s%I$O$?$/$5$s$"$j$^$9!#B?$/$O%U%!(B $B%$%k!"%P%C%U%!$d$=$l$i$K4XO"$7$?$b$N$K4X78$7$?$3$H$r$7$^$9!#$3$l$i$N%3(B $B%^%s%I$O#2!"#3!"#4J8;z$G$9!#(B $B%U%!%$%k$r3+$/$?$a$N%3%^%s%I$O$3$l$^$G3X$s$@$b$N$H$O0c$$!"%U%!%$%k$NL>(B $BA0$r;XDj$7$J$1$l$P$J$j$^$;$s!#$3$l$r!"%3%^%s%I$,!VCl9g$O0z?t$O%U%!%$%kL>$G$9!#$rJ9$$$F$-$^$9!#%?%$%W$7$?%U%!%$%k(B $BL>$O2hLL$N:G2<9T$KI=<($5$l$^$9!#$3$N:G2<9T$O!"$3$&$$$&F~NO$N$?$a$K;H$C(B $B$F$$$k;~$O!"%_%K%P%C%U%!$H8F$S$^$9!#DL>o$NJT=8%3%^%s%I$G%U%!%$%kL>$rJT(B $B=8$9$k$3$H$b$G$-$^$9!#(B $B%U%!%$%kL>$NF~NOCf!J$"$k$$$O$=$NB>$N%_%K%P%C%U%!F~NOCf!K$K(B C-g $B$K$h$C(B $B$F%3%^%s%I$r%-%c%s%;%k$G$-$^$9!#(B >> C-x C-f $B$r%?%$%W$7$F$+$i(B C-g $B$r%?%$%W$7$F$_$^$7$g$&!#%_%K%P%C%U%!$,(B $BC$5$l!"$=$l$r;H$C$F$$$?%3%^%s%I(B C-x C-f $B<+BN$bC$5$l$^$9!#(B $B$@$+$i!"%U%!%$%k$O2?$b3+$+$l$^$;$s!#(B $B%U%!%$%kL>$rF~NO$7$?$i!"(B$B%-!<$r%?%$%W$7F~NO$r40N;$5$;$^$9!#$=$&(B $B$9$k$H!"(BC-x C-f $B%3%^%s%I$,Av$j;O$a;XDj$7$?%U%!%$%k$r3+$-$^$9!#%_%K%P%C(B $B%U%!$O(B C-x C-f $B%3%^%s%I$N=*N;$H$H$b$K>C$($^$9!#(B $B%U%!%$%k$NFbMF$,2hLL$KI=<($5$l$k$H!"$=$NFbMF$rJQ99$9$k$3$H$,$G$-$^$9!#(B $B2C$($?JQ99$r915WE*$J$b$N$K$7$?$1$l$P!"O$r%U%!%$%k$K%3%T!<$7$^$9!#=i$a$F$3$l$r(B $BA0$KIU$1BX$($k$N$G!"$=$NFbMF$O<:(B $B$o$l$^$;$s!#$=$N?7$7$$L>A0$O85$N%U%!%$%k$NL>A0$N:G8e$K(B'~'$B$r$D$1$?$b$N(B $B$G$9!#(B $B%;!<%V$,=*$o$k$H!"%;!<%V$7$?%U%!%$%k$NL>A0$,I=<($5$l$^$9!#3d$HIQHK$K%;!<(B $B%V$7$?J}$,NI$$$G$7$g$&!#%7%9%F%`$,Mn$A$F$b$;$C$+$/$N:n6H$,%Q%"$K$J$i$J(B $B$$$h$&$K!#(B >> C-x C-s $B$H%?%$%W$7$F$3$NF~Lg%,%$%I$N%3%T!<$r%;!<%V$7$F2<$5$$!#(B $B2hLL:G2O$rF~NO$7$F$$$-$^$9!#(B $B%U%!%$%k$r%;!<%V$7$h$&$H$7$?;~$K=i$a$F?7$7$$%U%!%$%k$,:n$i$l!":#$^$GF~(B $BNO$7$?FbMF$,$=$l$K=q$-9~$^$l$^$9!#$=$l0J9_$O!"$"$J$?$O4{B8$N%U%!%$%k(B $B!J$?$C$?:#:n$i$l$?%U%!%$%k!K$rJT=8$7$F$$$k$H;W$C$F2<$5$$!#(B $B!v%P%C%U%!(B ========== $B#2$DL\$N%U%!%$%k$r(B C-x C-f $B$G3+$$$F$b!":G=i$N%U%!%$%k$O(B XEmacs $BFbIt$K(B $B;D$C$?$^$^$G$9!#$=$C$A$N%U%!%$%k$KLa$k$K$O$b$&0lEY(B C-x C-f $B$G$=$N%U%!(B $B%$%k$r3+$1$P$h$$$N$G$9!#$3$&$d$C$F!"4v$D$b$N%U%!%$%k$r(B XEmacs $B$G3+$/$3(B $B$H$,$G$-$^$9!#(B >> "foo" $B$H$$$&L>$N%U%!%$%k$r:n$j$^$7$g$&!#(BC-x C-f foo $B$G$9!#(B $B2?$+J8>O$rF~$l!"JT=8$7!"(BC-x C-s $B$G(B "foo" $B$r%;!<%V$7$F2<$5$$!#(B $B:G8e$K(B C-x C-f TUTORIAL.ja $B$H%?%$%W$7(B $BF~Lg%,%$%I$KLa$j$^$7$g$&!#(B XEmacs $B$O%U%!%$%k$NFbMF$r%P%C%U%!!J(Bbuffer$B!K$H8F$P$l$k$b$N$NCf$K3JG<$7(B $B$F$$$^$9!#%U%!%$%k$r3+$/$H?7$7$$%P%C%U%!$,$G$-$^$9!#(BXEmacs $B$,8=:_;}$C(B $B$F$$$k%P%C%U%!$N%j%9%H$r8+$k$K$O!"> C-x C-b $B$r;n$7$F$_$^$7$g$&!#(B $B3F%P%C%U%!$,$I$s$JIw$KL>A0$d$=$l$,3+$$$F$$$k%U%!%$%k$KBP$9$k%U%!%$%kL>(B $B$r;}$C$F$$$k$+8+$F2<$5$$!#%U%!%$%k$r3+$$$F$$$J$$%P%C%U%!$b$"$j$^$9!#$?(B $B$H$($P!"(B"*Buffer List*" $B$H$$$&L>$N%P%C%U%!$O$I$s$J%U%!%$%k$b3+$$$F$$$^(B $B$;$s!#$3$l$O%P%C%U%!$N%j%9%H$rFbMF$H$9$k%P%C%U%!$G!"(BC-x C-b $B$G:n$i$l$?(B $B$b$N$G$9!#(BXEmacs $B$N%&%#%s%I%&Fb$K$"$k%F%-%9%H$O$I$l$b!"$$$:$l$+$N%P%C(B $B%U%!$N0lIt$G$9!#(B >> C-x 1 $B$H%?%$%W$7$F%P%C%U%!%j%9%H$r>C$7$^$7$g$&!#(B $B$"$k%U%!%$%k$NFbMF$K$J$s$i$+$NJQ99$r2C$(!"$=$l$+$iB>$N%U%!%$%k$r3+$$$F(B $B$b!":G=i$N%U%!%$%k$O$^$@%;!<%V$5$l$^$;$s!#JQ99$O(B XEmacs $B$NFbIt!"$=$N%U%!(B $B%$%k$KBP1~$9$k%P%C%U%!$NCf$K;D$C$?$^$^$G$9!##2HVL\$N%U%!%$%k$N%P%C%U%!(B $B$r:n$C$?$j!"JT=8$7$?$j$7$F$b!":G=i$N%U%!%$%k$N%P%C%U%!$K$O2?$N1F6A$b$"(B $B$j$^$;$s!#$3$l$O$H$F$bLr$KN)$A$^$9$,!":G=i$N%U%!%$%k$N%P%C%U%!$r%;!<%V(B $B$9$k2?$+JXMx$JJ}K!$,I,MW$@$H$$$&$3$H$G$b$"$j$^$9!#(B C-x C-s $B$G%;!<%V$9(B $B$k$?$a$K(B C-x C-f $B$G85$N%P%C%U%!$KLa$k$N$O$OLq2p$G$9!#$=$3$G$l$K$D$$$F!"$=$l(B $B$r%;!<%V$9$k$+$I$&$+$rJ9$$$F$-$^$9!#(B >> $B0l9T%F%-%9%H$rF~NO$7$F$+$i(B C-x s $B$H%?%$%W$7$F2<$5$$!#(B TUTORIAL.ja $B$H$$$&%P%C%U%!$r%;!<%V$9$k$+$I$&$+J9$$$F$/$k$O$:$G$9!#(B $B!V$O$$!W$HEz$($k$?$a$K(B "y" $B$H%?%$%W$7$F2<$5$$!#(B $B!v%a%K%e!<$r;H$&(B ---------------- $B$b$7(B X $BCeIt$K%a%K%e!<%P!<$,$"$k$3(B $B$H$K5$IU$/$G$7$g$&!#$3$N%a%K%e!<%P!<$r;H$C$F!V%U%!%$%k$r3+$/!W$H$$$&$h(B $B$&$J$[$H$s$I$N$h$/;H$&(B XEmacs $B$N%3%^%s%I$r;HMQ$9$k$3$H$,$G$-$^$9!#FCDj(B $B$N%3%^%s%I$r;HMQ$9$k$?$a$NBG80$r3P$($J$/$F$h$$$N$G!":G=i$O$3$NJ}$,4JC1(B $B$K;W$($k$G$7$g$&!#(BXEmacs $B$K47$l$F$/$k$K$7$?$,$C$F!"%-!<%\!<%I$N%3%^%s(B $B%I$r;H$&$3$H$,4JC1$K$J$C$F$/$k$G$7$g$&!#BP1~$9$k%-!<%\!<%I%3%^%s%I$,%3(B $B%^%s%I$NA0$r8+$D$1$FA*Br$9$k$@$1$G(B $B$I$N%P%C%U%!$K$G$b0\F0$G$-$^$9!#(B $B!v%^%&%9$r;H$&(B -------------- X $B$N2<$G$_$N>l=j$G:8%\%?%s$r%/%j%C%/$9$k$3$H$G%F%-%9%H$N%+!<%=%k$r0\F0(B $B$9$k$3$H$,$G$-!"A*Br$7$?$$%F%-%9%H$r:8%^%&%9%\%?%s$G%I%i%C%0$9$k$3$H$G(B $B%F%-%9%H$rA*Br$9$k$3$H$,$G$-$^$9!#!J$b$7$/$O!"$=$NBe$o$j$K%F%-%9%H$rA*(B $BBr$9$k$?$a$K0lJ}$NC<$G:8%^%&%9%\%?%s$r%/%j%C%/$7!"B>$NC<$K0\F0$7$F(B Shift $B$r2!$7$J$,$i%/%j%C%/$9$k$3$H$,$G$-$^$9!#!K(B $BA*Br$7$?%F%-%9%H$r>C5n(B $B!J(Bkill$B!K(B $B$9$k$?$a$K$O!"(BC-w $B$+!"(BEdit $B%a%K%e!<$N(B Cut $B9`L\$r;H$($^$9!#$3$l$i$OEy2A$G$O(B*$BL5$$(B*$B$3$H$KCm0U$7$F$/$@$5$$(B: C-w $B$O(BXEmacs $B$NFbIt$N$_$K%F%-%9%H$rJ]B8$7$^$9$,!J>e$G@bL@$7$?(B C-k $B$H;w$F$$(B $B$^$9!K!"(BCut $B$O$3$l$H$H$b$K%F%-%9%H$rB>$N%"%W%j%1!<%7%g%s$,;HMQ2DG=$J(B X $B$N%/%j%C%W%\!<%I$K$bF~$l$^$9!#(B X $B$N%/%j%C%W%\!<%I$+$i%F%-%9%H$r$rF~NO$7$F$$$k$H$-$K!JNc$($P!"!V%U%!%$(B $B%k$r3+$/!W$GF~NO$rB%$5$l$?$H$-!K(B TAB $B$GJd408uJd$rI=<($5$;$k$H!"8uJd$N(B $B0l$D$rA*Br$9$k$?$a$K??Cf$N%\%?%s$G%/%j%C%/$9$k$3$H$,$G$-$^$9!#(B $B1&$N%^%&%9$N%\%?%s$O%]%C%W%"%C%W%a%K%e!<$rI=<($7$^$9$3$N%a%K%e!<$NFbMF(B $B$O:#$N%b!<%I$K0MB8$7!"IaDL$O;HMQ$70W$$$h$&$K#2!"#3$NNI$/;H$o$l$k%3%^%s(B $B%I$r4^$s$G$-$^$9!#(B >> $B1&%^%&%9%\%?%s$r2!$7$F$/$@$5$$!#(B $B%a%K%e!<$rI=<($5$;B3$1$k$?$a$K$O%\%?%s$r2!$7B3$1$kI,MW$,$"$j$^$9!#(B $B!v%3%^%s%I$N3HD%(B ================ XEmacs $B$K$O!"%3%s%H%m!<%kJ8;z$d%a%?J8;z$K3dEv$i$l$k$h$j$b$:$C$H$:$C$H(B $BB?$/$N%3%^%s%I$,$"$j$^$9!#$3$l$i$r07$&$?$a$K!"3HD%!J(BeXtend$B!K%3%^%s%I$r(B $B;H$$$^$9!#$=$l$K$O!"0J2<$N#2$D$NA0$K$h$k3HD%!#B3$1$F%3%^%s%I$NL>A0$rF~NO$7$^$9!#(B $B$3$l$i$O!"0lHLE*$K$OJXMx$@$1$l$I$b!"$3$l$^$G8+$F$-$?$b$N$[$I$OIQHK$KMQ(B $B$$$i$l$J$$%3%^%s%I$G$9!#(BC-x C-f $B!J%U%!%$%k$r3+$/!K$d(B C-x C-s$B!J%U%!%$%k(B $B$r%;!<%V!K$O$3$NCg4V$G$9!#B>$K!"(BC-x C-c$B!J(BXEmacs $B$r=*N;!K$b$=$&$G$9!#(B C-x C-c $B$K4X$7$F$O!"$=$l$^$G$K2C$($?JQ99$,L5$/$J$k$N$r?4G[$9$kI,MW$O$"(B $B$j$^$;$s!#(BXEmacs $B$r=*N;$5$;$kA0$KJQ99$5$l$?3F%U%!%$%k$r%;!<%V$9$k$+$I(B $B$&$+J9$$$F$-$^$9$+$i!#(B C-z $B$O!V0l;~E*$K!W(B XEmacs $B$rH4$1$k%3%^%s%I$G$9!#$^$?F1$8(B XEmacs $B%;%C%7%g(B $B%s$KLa$k$3$H$,$G$-$^$9!#(B $B$=$l$,$G$-$k%7%9%F%`>e$J$i!"(BC-z $B$O(B XEmacs $B$r!VCfCG!W$5$;$^$9!#$D$^$j(B XEmacs $B$r=*N;$9$k$3$H$J$/!"%3%^%s%I%7%'%k$KLa$k$3$H$,$G$-$^$9!#BgJ}$N(B $BI8=`E*$J%7%'%k$J$i!"(B`fg' $B%3%^%s%I$b$7$/$O(B `%emacs' $B$K$h$C$F(B XEmacs $B$r(B $B:F3+$G$-$^$9!#(B $B!VCfCG!W5!G=$r$N%W%m%0%i%`$rAv$i$;$F$+$i$^$?(B XEmacs $B$KLa$k$3$H$,$G$-(B $B$k$h$&$K$7$^$9!#$3$N>l9gK\Ev$K(B XEmacs $B$+$iH4$1=P$k$o$1$G$O$"$j$^$;$s$N(B $B$G!"%7%'%k%3%^%s%I$N(B `exit' $B$,$=$N%5%V%7%'%k$+$i(B XEmacs $B$KLa$kIaDL$N$d(B $B$jJ}$G$9!#(B C-x C-c $B$O%m%0%"%&%H$7$h$&$H;W$&;~$K;H$&$b$N$G$9!#%a!<%k%D!<%k!J(Bmail $B%3%^%s%IEy!K$d$=$NB>$NMM!9$J%"%W%j%1!<%7%g%s%W%m%0%i%`$,5/F0$7$?(B XEmacs $B$+$iH4$1=P$k>l9g$K;H$&$N$b@5$7$$;H$$J}$G$9!#$3$l$i$N%W%m%0%i%`(B $B$O(B XEmacs $B$NCfCG$K$I$&BP=h$7$FNI$$$+CN$i$J$$$G$7$g$&$+$i!#$7$+$7$J$,$i!"(B $BIaDL$N>l9g$O!"%m%0%"%&%H$7$h$&$7$J$$8B$j$O(B XEmacs $B$r=*N;$5$;$k$h$j$O(B C-z $B$GCfCG$5$;$kJ}$,NI$$$G$7$g$&!#(B C-x $B%3%^%s%I$O$?$/$5$s$"$j$^$9!#$3$l$^$G$K!"0J2<$r3X$S$^$7$?!#(B C-x C-f $B%U%!%$%k$r3+$/!J(BFind$B!K(B C-x C-s $B%U%!%$%k$N%;!<%V!J(BSave$B!K(B C-x C-b $B%P%C%U%!$N%j%9%H%"%C%W(B C-x C-c XEmacs $B$r=*N;(B C-x u $BC$7(B $BL>A0$K$h$k3HD%%3%^%s%I$K$O!"$"$^$j;H$o$J$$$b$N$d!"FCDj$N%b!<%I$G$7$+;H(B $B$o$J$$$b$N$,$"$j$^$9!#$?$H$($P(B replace-string $B$G$9$,!"$3$l$OJ8;zNs$rCV(B $B49$9$k$b$N$G$9!#(BM-x $B$r%?%$%W$9$k$H!"(BXEmacs $B$O2hLL$N:G2<9T$K(B M-x $B$HI=<((B $B$7F~NO$rB%$9$N$G!"$=$3$K%3%^%s%I$NL>A0!J$3$N>l9g(B "replace-string"$B!K$r(B $BF~$l$J$1$l$P$J$j$^$;$s!#(B"repl s" $B$H$@$1%?%$%W$9$k$H(B XEmacs $B$,%3%^(B $B%s%IL>$rJd40$7$F$/$l$^$9!#%3%^%s%IL>$rF~$l$?$i(B $B$rBG$C$F2<$5$$!#(B "Replace string" $B%3%^%s%I$K$O0z?t$,Fs$DI,MW$G$9!#$I$NJ8;zNs$r$I$&CV49(B $B$9$k$+$G$9!#3F0z?t$rF~NO$9$k$?$S$K(B $B$rBG$C$F2<$5$$!#(B >> $B%+!<%=%k$r$3$3$+$i#29T2<$N6u9T$K0\F0$5$;$F2<$5$$!#(B M-x repl schangedAltered $B$H%?%$%W$7$^$7$g$&!#(B $B$3$N9T$,$I$&JQ$o$k$+(B(changed)$B8+$^$7$g$&!#$"$J$?$O%+!<%=%k0J9_A4It$N(B c-h-a-n-g-e-d $B$H$$$&8l$r(B "altered" $B$KJQ$($?$N$G$9!#(B $B!v<+F0%;!<%V(B ============ $B%U%!%$%k$KJQ99$r2C$($F$^$@%;!<%V$7$F$$$J$$>l9g!"$=$l$i$NJQ99$O7W;;5!$,(B $B%/%i%C%7%e$9$k$H<:$o$l$F$7$^$&2DG=@-$,$"$j$^$9!#$=$&$$$&;vBV$rHr$1$k$?(B $B$a!"JT=8Cf$N3F%U%!%$%k$K$D$$$F<+F0%;!<%V%U%!%$%k$,Dj4|E*$K=q$+$l$^$9!#(B $B<+F0%;!<%V%U%!%$%k$OF,$H$*?,$K(B # $B$,IU$$$F$$$^$9!#Nc$($P(B "hello.c" $B$H$$(B $B$&%U%!%$%k$N<+F0%;!<%V%U%!%$%k$O(B "#hello.c#" $B$G$9!#DL>o$NJ}K!$G%U%!%$(B $B%k$r%;!<%V$7$?$H$-$K!"$=$&$$$&<+F0%;!<%V%U%!%$%k$O>C$5$l$^$9!#(B $B7W;;5!$,%/%i%C%7%e$7$?>l9g!"<+F0%;!<%V$5$l$?JT=8$r2sI|$5$;$k$3$H$,$G$-(B $B$^$9!#IaDL$K%U%!%$%k!JJT=8$7$F$$$?$b$N$G!"<+F0%;!<%V%U%!%$%k$8$c$"$j$^(B $B$;$s!K$r3+$-!"$=$l$+$i(B M-x recover file $B$H%?%$%W$9$k$N$G$9!#3N(B $BG'$r5a$a$F$-$^$9$N$G!"(Byes $B$H%?%$%W$7<+F0%;!<%V$5$l$?%G!<%?$r2s(B $BI|$7$^$9!#(B $B!v%(%3!<%(%j%"(B ============== $B$b$7$f$C$/$j$H%3%^%s%I$rBG$C$?$J$i$P!"2hLL$N2<$N%(%3!<%(%j%"$H8F$P$l(B $B$k>l=j$KBG$C$?$b$N$,I=<($5$l$^$9!#%(%3!<%(%j%"$O2hLL$N:G2<9T$G$9!#(B $B!v%b!<%I%i%$%s(B ============== $B%(%3!<%(%j%"$N$9$0>e$N9T$O!"%b!<%I%i%$%s$H8F$S$^$9!#%b!<%I%i%$%s$O$3$s$JIw$K8+$($k$G$7$g$&!#(B ISO7-----XEmacs: TUTORIAL.ja (Fundamental)--L670--58%---------------- $B$3$N9T$O(B XEmacs $B$N>uBV5Z$SJT=8Cf$NJ8>O$K$D$$$FM-1W$J>pJs$rM?$($F$/$l$^(B $B$9!#(B $B%U%!%$%kL>$K$D$$$F$O$b$&J,$C$F$$$^$9$M!#$=$l$O$"$J$?$,3+$$$?%U%!%$%k$G(B $B$9!#(B-NN%-- $B$OJ8>OCf$N8=:_0LCV$r<($7$F$$$^$9!#J8>O$N(B NN% $B$,2hLL:G>eCJ$h(B $B$jA0$K$"$k$H$$$&$3$H$G$9!#$b$7J8>O$N:G=i$N9T$,2hLL$K$"$k;~$K$O(B --00%-- $B$NBe$j$K(B --Top-- $B$HI=<($7$^$9!#$b$7J8>O$N:G8e$N9T$,2hLL$K$"$k;~$K$O(B --Bot-- $B$HI=<($7$^$9!#$b$72hLL$KA4It<}$^$C$F$7$^$&$h$&$JC;$$J8>O$r8+$F(B $B$$$k$H$-$K$O(B --All-- $B$HI=<($7$^$9!#(B $B3g8L$K0O$^$l$?ItJ,$O$I$&$JJT=8%b!<%I$K$$$k$+$r<($7$^$9!#%G%U%)%k%H$O(B "Fundamental" $B$H$$$&%b!<%I!"$3$l$,8=:_$N%b!<%I$G$9!#$3$l$O!V%a%8%c!<%b!<(B $B%I!J(Bmajor mode$B!K!W$N0lNc$G$9!#(B XEmacs $B$K$OB?$/$NO$rJT=8Cf$+$r0UL#$9$k$b(B $B$N$b$"$j$^$9!#$$$D$G$bI,$:$$$:$l$+$N%a%8%c!<%b!<%I$N>uBV$K$J$C$F$$$^$9!#(B $B$I$N%a%8%c!<%b!<%I$K$$$k$N$+$O!"%b!<%I%i%$%s$N8=:_$O(B "Fundamental" $B$H(B $BI=<($7$F$$$kItJ,$r8+$l$PJ,$j$^$9!#(B $B3F%a%8%c!<%b!<%I$O4v$D$+$N%3%^%s%I$K0[$J$k?6$kIq$$$r$5$;$^$9!#Nc$($P!"(B $B%W%m%0%i%`%j%9%HCf$K%3%a%s%H$rF~$l$k$?$a$N%3%^%s%I$,$"$j$^$9!#%3%a%s%H(B $B$N7A<0!J%7%s%?%C%/%9!K$O!"%W%m%0%i%`8@8l$K$h$C$F0[$J$j!"%a%8%c!<%b!<%I(B $B$O!"$=$l$KBP1~$9$k8@8l$K9g$C$?7A<0$G%3%a%s%H$rA^F~$7$^$9!#3F%a%8%c!<%b!<(B $B%I$O3HD%%3%^%s%I$NL>A0$K$J$C$F$$$^$9!#$D$^$j$=$N3HD%%3%^%s%I$r;H$C$F%a(B $B%8%c!<%b!<%I$r@Z$j49$($k$N$G$9!#Nc$($P!"(BM-x fundamental-mode $B$H$$$&$N(B $B$O(B Fundamental $B%b!<%I$K@Z$j49$($k$?$a$N%3%^%s%I$G$9!#(B $B$b$7!"DL>o$N1Q8l$dF|K\8l$NJ8>O!J$3$N%U%!%$%k$N$h$&$J!K$rJT=8$9$k$N$J$i(B $B$P!"(BText mode $B$r;H$$$^$7$g$&!#(B >> M-x text-mode $B$H%?%$%W$7$F$_$F2<$5$$!#(B $B?4G[$7$J$$$G!#$3$l$^$G3X$s$@%3%^%s%I$O$?$$$7$FJQ$o$j$^$;$s$+$i!#$@$1$I!"(B M-f $B$d(B M-b $B$,%"%]%9%H%m%U%#(B "'" $B$rC18l$N0lIt$@$H2r/$7$@$1$3$H$J$k$N$G$9!#(B $B8=:_$N%a%8%c!<%b!<%I$K$D$$$F$N@bL@J8$r8+$k$K$O(B C-h m $B$H%?%$%W$7$^$9!#(B >> C-u C-v $B$r0lFsEY$d$C$F$3$N9T$r2hLL$N>e$NJ}$K;}$C$F$$$-$^$7$g$&!#(B >> C-h m $B$H%?%$%W$7!"(BText mode $B$H(B Fundamental mode $B$N0c$$$r$_$^$7$g$&!#(B >> q $B$G(B Text mode $B$N@bL@J8$r2hLL$+$i>C$7$^$7$g$&!#(B $B%a%8%c!<%b!<%I$,!V%a%8%c!$N%^%$%J!<(B $B%b!<%I$K1F6A$rM?$($:$K!"$=$l$@$1$r%*%s%*%U$G$-$^$9!#$D$^$j!"%^%$%J!<%b!<(B $B%I$rA4$/;H$o$J$+$C$?$j!"0l8D$@$1;H$C$?$j!"$$$/$D$+$rF1;~$K;H$C$?$j$G$-(B $B$k$N$G$9!#(B $BDL>o$NJ8>O$rJT=8$7$F$$$k;~$K$H$F$bJXMx$J%^%$%J!<%b!<%I$N0l$D$K%*!<%H%U%#(B $B%k!J(BAuto Fill$B!K%b!<%I$H$$$&$N$,$"$j$^$9!#$3$N%b!<%I$,%*%s$N;~$KJ8>O$r(B $BF~NO$7$F$$$C$F9T$rD9$/$7$9$.$?>l9g!"<+F0E*$KC18l$HC18l$N4V$G9T$,J,3d$5(B $B$l$^$9!JF|K\8l$N>l9g$O$I$NJ8;z$N4V$G$b!K!#(B Auto Fill $B%b!<%I$O(B M-x auto-fill-mode $B$H$d$l$P%*%s$K$G$-$^$9!#(B $B$=$l$,%*%s$N>uBV$G(B M-x auto-fill-mode $B$H$d$l$,%*%U$K$G$-$^$9!#(B $B$3$N%3%^%s%I$O!"%b!<%I$,%*%U$J$i%*%s$K!"%*%s$J$i%*%U$K$9$k$N$G$9!#$3$&(B $B$$$&$N$r!V%b!<%I$r%H%0%k$9$k!W$H8@$$$^$9!#(B >> M-x auto-fill-mode $B$H%?%$%W$7$F!"(B "asdf " $B$G;O$^$k9T$rF~NO(B $B$7$F2<$5$$!#9T$,J,3d$5$l$k$^$G2?EY$b(B "asdf " $B$H%?%$%W$7$^$7$g$&!#%9(B $B%Z!<%9$rK:$l$:$K!#(BAuto Fill $B$O%9%Z!<%9$,F~NO$5$l$?;~$N$_F/$-$^$9!#(B $B1&%^!<%8%s$ODL>o(B 70 $BJ8;z!J%+%i%`!K$G$9$,!"(BC-x f $B%3%^%s%I$G$3$l$rJQ99$9(B $B$k$3$H$,$G$-$^$9!#;XDj$NJ8;z?t$r?tCM0z?t$H$7$FM?$($^$9!#(B >> $B?tCM0z?t(B 20 $B$G(B C-x f $B$r$d$j$^$7$g$&!#(B (C-u 2 0 C-x f)$B!#(B $B$=$l$+$iE,Ev$JJ8>O!J1Q8l!K$rF~NO$7!"(B20 $BJ8;z$G9T$,J,3d$5$l$k$N$r8+$F(B $B$_$^$7$g$&!#$=$l$+$i(B C-x f $B%3%^%s%I$G$^$?%^!<%8%s$r(B 70 $BJ8;z$KLa$7$F(B $B2<$5$$!#(B $B%Q%i%0%i%U$NESCf$rJQ99$7$F$b(B Auto Fill $B%b!<%I$O$=$l$r<+F0E*$K%U%#%k$7(B $BD>$7$O$7$^$;$s!#(B $B%Q%i%0%i%U$r%U%#%k$7D>$9$K$O%+!<%=%k$r$=$N%Q%i%0%i%U$NCf$KCV$$$F$+$i(B M-q $B$r%?%$%W$7$^$9!#(B >> $B%+!<%=%k$r$3$N9TD>A0$N%Q%i%0%i%U$K0\F0$5$;(B M-q $B$H%?%$%W$7$F2<$5$$!#(B $B!v8!:w(B ====== $BJ8>OCf$NFCDj$NJ8;zNs$r!"A08~$-$K$b8e8~$-$K$bC5$9;v$,$G$-$^$9!#J8;zNs$r(B $BC5$9$H$$$&$N$O%+!<%=%k0\F0%3%^%s%I$G$9!#$D$^$j!"l=j$^$G%+!<%=%k$r0\F0$5$;$k$N$G$9!#(B XEmacs $B$N8!:w%3%^%s%I$OB>$NBg35$N%(%G%#%?$N8!:w%3%^%s%I$H$O0[$j!V%$%s(B $B%/%j%a%s%?%k!W$G$9!#8!:w$9$kJ8;zNs$r%?%$%W$7$F$$$k$=$P$+$i8!:w$,5/$k$N(B $B$G$9!#(B $B8!:w$r;O$a$k$?$a$N%3%^%s%I$O!"A08~$-$K8!:w$9$k$J$i$P(B C-s$B!"8e8~$-$J$i(B C-r $B$G$9!#$^$@$G$9!*!*:#$O$^$@;n$5$J$$$G2<$5$$!#(B C-s $B$rBG$D$H(B "I-search" $B$H$$$&J8;zNs$,%(%3!<%(%j%"$KI=<($5$l$k$N$,8+$((B $B$k$G$7$g$&!#$3$l$O(B XEmacs $B$,%$%s%/%j%a%s%?%k8!:w$H$$$&>uBV$K$$$F!"$"$J(B $B$?$,C5$7$?$$J8;zNs$rF~NO$9$k$N$rBT$C$F$$$k$N$G$9!#(B $B$rBG$F$P8!(B $B:w$r=*$o$l$^$9!#(B >> $B$5$F(B C-s $B$H%?%$%W$7$F8!:w$r;O$a$^$7$g$&!#$f$C$/$j$H#1J8;z$:$D(B "cursor" $B$H$$$&C18l$rF~NO$7$^$9!##1J8;zBG$DKh$K%+!<%=%k$,$I$&F0$/$+(B $B8+$^$7$g$&!#(B $B$5$"!"(B"cursor" $B$,#12s8+$D$+$j$^$7$?!#(B >> $B$b$&0lEY(B C-s $B$HBG$C$F> $B:#EY$O(B $B$r#42sBG$C$F!"%+!<%=%k$NF0$-$r8+$F2<$5$$!#(B >> $B$HBG$C$F8!:w$r=*N;$7$^$7$g$&!#(B $B2?$,5/$C$?$+J,$j$^$9$+!)%$%s%/%j%a%s%?%k8!:w$G$O!"JXMx$J$?$a$K%O%$%i%$(B $B%H$r$7!"$"$J$?$,$=$l$^$G$KBG$C$?J8;zNs$,8=$l$k$H$3$m$K9T$3$&$H$7$^$9!#(B $B $B$rBG$D$H8!:wJ8;zNsCf$N#1HV8e$m$N(B $BJ8;z$,>C$($^$9!#$=$7$F!"%+!<%=%k$O!"A02s$N0LCV$KLa$j$^$9!#$?$H$($P!"(B "c" $B$H%?%$%W$7$F:G=i$N(B "c" $B$rC5$7$^$9!#$=$l$+$i(B "u" $B$rBG$D$H:G=i$N(B "cu" $B$N>l=j$K%+!<%=%k$,F0$-$^$9!#$=$3$G(B $B$rBG$D$H(B "u" $B$r8!:wJ8(B $B;zNs$+$i>C$7$F!"%+!<%9%k$O:G=i$K(B "c" $B$,8=$l$?>l=j$KLa$j$^$9!#(B C-s $B$O!"8=:_$N%+!<%=%k0LCV0J9_$K=P$F$/$k8!:wJ8;zNs$rC5$7;O$a$^$9!#$b$7!"(B $BJ8>O$NA0$NJ}$rC5$7$?$+$C$?$i!"(BC-r $B$r%?%$%W$7$^$9!#$3$l$^$G$N(B C-s $B$K$D(B $B$$$F$N@bL@$O$9$Y$F(B C-r $B$K$bEv$F$O$^$j$^$9!#8!:w$NJ}8~$,H?BP$J$@$1$G$9!#(B $B!vJ#?t$N%&%#%s%I%&(B ================== XEmacs $B$NAGE($J5!G=$N0l$D$H$7$F!"0l$D$N2hLL$KF1;~$K$$$/$D$b$N%&%#%s%I(B $B%&$rI=<($9$k$3$H$,$G$-$^$9!#(B >> $B%+!<%=%k$r$3$N9T$K;}$C$F$-$F(B C-u 0 C-l $B$H%?%$%W$7$F2<$5$$!#(B >> $B$=$l$+$i(B C-x 2 $B$H%?%$%W$72hLL$r#2$D$N%&%#%s%I%&$KJ,3d$7$^$7$g$&!#(B $B$I$A$i$N%&%#%s%I%&$b$3$NF~Lg%,%$%I$rI=<($7$F$$$^$9!#%+!<%=%k$O>e$N(B $B%&%#%s%I%&$K$"$j$^$9!#(B >> C-M-v $B$H%?%$%W$72<$N%&%#%s%I%&$r%9%/%m!<%k$5$;$^$7$g$&!#(B $B!J%a%?%-!<$,$J$$>l9g$O(B ESC C-v $B$H%?%$%W$7$^$9!#!K(B >> C-x o $B!J(B"o" $B$O(B "other$B!JB>J}!K(B" $B$r0UL#$7$^$9!K$r%?%$%W$72<$N%&%#%s%I(B $B%&$K%+!<%=%k$r0\$7$F2<$5$$!#(B >> $B2<$N%&%#%s%I%&$G(B C-v $B$d(B M-v $B$r;H$C$F%9%/%m!<%k$5$;$^$7$g$&!#(B $B$3$3$K=q$$$F$"$k;X<($O>e$N%&%#%s%I%&$GFI$_?J$s$G$/$@$5$$!#(B >> $B$b$&0lEY(B C-x o $B$H%?%$%W$7!"%+!<%=%k$r>e$N%&%#%s%I%&$KLa$7$^$9!#(B $B%+!<%=%k$O>e$N%&%#%s%I%&$N85$"$C$?0LCV$KLa$j$^$9!#(B C-x o $B$r;H$C$F%&%#%s%I%&4V$r9T$C$?$jMh$?$j$G$-$^$9!#3F%&%#%s%I%&$O$=$l(B $B<+?H$N%+!<%=%k0LCV$rJ];}$7$F$$$^$9$,!"0lEY$K$O0l$D$N%&%#%s%I%&$@$1$,%+!<(B $B%=%k$rI=<($7$^$9!#DL>o$NJT=8%3%^%s%I$O3'%+!<%=%k$,$"$k%&%#%s%I%&$KBP$7(B $B$FF/$-$^$9!#$=$N%&%#%s%I%&$r(B "selected window ($BA*BrCf$N%&%#%s%I%&(B)" $B$H(B $B8F$S$^$9!#(B C-M-v $B%3%^%s%I$O!"0l$D$N%&%#%s%I%&$GJ8>O$rJT=8Cf$KB>$N%&%#%s%I%&$r;2>H(B $B$7$F$$$k;~$KLrN)$A$^$9!#JT=8Cf$N>l=j$K%+!<%=%k$rJ]$C$?$^$^!"(BC-M-v $B$GB>(B $B$N%&%#%s%I%&$rFI$_?J$a$F9T$/$3$H$,$G$-$^$9!#(B C-M-v $B$O%3%s%H%m!<%k%a%?J8;z$N0lNc$G$9!#%a%?%-!<$,$"$k>l9g$O!"%3%s%H%m!<(B $B%k%-!<$H%a%?%-!<$r2!$7$J$,$i(B v $B$r%?%$%W$7$^$9!#%3%s%H%m!<%k%-!<$H%a%?(B $B%-!<$O$I$A$i$r@h$K2!$7$F$b9=$$$^$;$s!#$I$A$i$b$=$N8e$K%?%$%W$5$l$kJ8;z(B $B$KBP$9$k=$>~%-!<(B (modifier key) $B$H$7$FF/$/$+$i$G$9!#(B $B%a%?%-!<$,L5$$>l9g!"(BESC $B%-!<$r;H$$$^$9$,!"$3$N>l9g=gHV$,Bg;v$G$9!#$^$:(B ESC $B$r2!$7$F$+$iN%$7$F(B CTRL-v $B$rBG$A$^$9!#(BCTRL-ESC v $B$G$OBLL\$G$9!#$3(B $B$l$O(BESC $B$O$=$l<+BN$,0l$D$NJ8;z$G=$>~%-!<$G$O$J$$$+$i$G$9!#(B >> $B>e$N%&%#%s%I%&$G(B C-x 1 $B$H%?%$%W$72<$N%&%#%s%I%&$r>C$7$^$7$g$&(B $B!J$b$72<$N%&%#%s%I%&$G(B C-x 1 $B$H%?%$%W$9$k$H>e$N%&%#%s%I%&$,>C$($^$9!#(B $B$3$N%3%^%s%I$O!V8=:_<+J,$,$$$k%&%#%s%I%&$@$1$K$7$J$5$$!W$H$$$&$b$N$@$H(B $B;W$C$F2<$5$$!#!K(B $BF1$8%P%C%U%!$rN>J}$N%&%#%s%I%&$KI=<($9$kI,MW$O$"$j$^$;$s!#0lJ}$N%&%#%s(B $B%I%&$G(B C-x C-f $B$G%U%!%$%k$r3+$$$F$bB>J}$N%&%#%s%I%&$OJQ2=$7$^$;$s!#3F(B $B%&%#%s%I%&$K$*$$$FJL!9$N%U%!%$%k$r3+$/$3$H$,$G$-$k$N$G$9!#(B >> C-x 4 C-f $B$H%?%$%W$7B3$1$F2?$+<+J,$N%U%!%$%kL>$rF~NO$7$F2<$5$$!#(B $B$GF~NO$r=*$o$i$;$F2<$5$$!#:#;XDj$7$?%U%!%$%k$,2<$N%&%#%s%I(B $B%&$K8=$l$^$9!#%+!<%=%k$b$=$C$A$K0\$j$^$9!#(B >> C-x o $B$H%?%$%W$7>e$N%&%#%s%I%&$KLa$C$F2<$5$$!#$=$l$+$i(B C-x 1 $B$G2<$N(B $B%&%#%s%I%&$r>C$7$^$7$g$&!#(B $B!v:F5"JT=8%l%Y%k(B (RECURSIVE EDITING LEVELS) $B;~!9!JITK\0U$K!K:F5"JT=8%l%Y%k$H8F$P$l$k>uBV$KF~$k$3$H$,$"$j$^$9!#%b!<(B $B%I%i%$%s$N%a%8%c!<%b!<%IL>$r0O$`4]3g8L(B "()" $B$,$5$i$Knl3g8L(B "[]" $B$G0O$^(B $B$l$^$9!#Nc$($P!"(B(Fundamental) $B$HI=<($5$l$kBe$o$j$K(B [(Fundamental)] $B$N(B $B$h$&$K$J$j$^$9!#(B $B:F5"JT=8%l%Y%k$+$iH4$1=P$9$K$O(B ESC ESC ESC $B$H%?%$%W$7$^$9!#$3$l$OHFMQ(B $B!VH4$1=P$7!W%3%^%s%I$G$9!#M>J,$J%&%#%s%I%&$r>C$7$?$j!"%_%K%P%C%U%!$+$i(B $BH4$1$?$j$9$k$N$K$b;H$($^$9!#(B >> M-x $B$H%?%$%W$7%_%K%P%C%U%!$KF~$C$F2<$5$$!#$=$l$+$i(B ESC ESC ESC $B$H%?(B $B%$%W$7H4$1=P$7$F$_$^$7$g$&!#(B C-g $B$G$O:F5"JT=8%l%Y%k$+$i$OH4$1=P$;$^$;$s!#$3$l$O!"(BC-g $B$,:F5"JT=8%l%Y(B $B%kFb$G$N%3%^%s%I$d0z?t$rC$9$N$K;H$o$l$F$$$k$+$i$G$9!#(B $B!v$b$C$H$b$C$H%X%k%W(B ==================== $B$3$NF~Lg%,%$%I$G$O(B XEmacs $B$r;H$$;O$a$k$N$K==J,$J>pJs$rDs6!$7$?$D$b$j$G(B $B$9!#(BXEmacs $B$K$O$"$^$j$K$bB?$/$N5!G=$,$"$k$N$G!"$3$3$G$9$Y$F$r@bL@$9$k(B $B$N$OL5M}$G$9!#$=$l$G$bLr$KN)$D5!G=$r$b$C$HB?$/3X$S$?$$$H;W$&?M$N$?$a$K(B $B$O!"(BXEmacs $B$N%3%^%s%I$N@bL@$rFI$`$?$a$N%3%^%s%I$,$"$j$^$9!#$3$l$i$N(B $B!V%X%k%W!W%3%^%s%I$O3'(B Control-h $BJ8;z!J%X%k%WJ8;z$H8F$S$^$9!K$G;O$^$j(B $B$^$9!#(B $B%X%k%W5!G=$r;H$&$K$O!"(BC-h $B$KB3$$$F$I$s$Jl9g$O(B C-h ? $B$H%?%$%W$7$^$7$g$&!#(B $B$I$s$JC$9$3$H$,$G$-$^$9!#(B $B!J%5%$%H$K$h$C$F$O(B C-h $BJ8;z$r:FB+G{$7$^$9!#Am3gE*$Jl9g$O%7%9%F%`4IM}> C-h c Control-p $B$H%?%$%W$7$F$_$^$7$g$&!#(B $B0J2<$N$h$&$J%a%C%;!<%8$,I=<($5$l$k$O$:$G$9!#(B C-p runs the command previous-line $B$3$l$O!V%U%!%s%/%7%g%s$NL>A0!W$rI=<($7$?$N$G$9!#%U%!%s%/%7%g%sL>$O$O$=$N%3%^%s%I$,2?$r$9$k$b$N$J$N$+$,J,$k$h$&$KIU$1$i$l$^$9(B $B$N$G!"4JC1$J@bL@$H$7$F$b$=$N$^$^Lr$KN)$A$^$9!#0lEY3X$s$@%3%^%s%I$K$D$$(B $B$F;W$$=P$9$K$O==J,$G$9!#(B C-x C-s $B$d!J%a%?%-!<$d%"%k%H%-!<$,$J$$>l9g$N!K(B v $B$J$I$NJ#?tJ8;z(B $B$N%3%^%s%I$r(B C-h c $B$N8e$K%?%$%W$9$k$3$H$b$G$-$^$9!#(B $B%3%^%s%I$K$D$$$F$b$C$HB?$/$N>pJs$,M_$7$1$l$P(B C-h c $B$NBe$o$j$K(B C-h k $B$r(B $B;H$$$^$9!#(B >> C-h k Control-p $B$H%?%$%W$7$F$_$^$7$g$&!#(B XEmacs$B$N%&%#%s%I%&$K!"%3%^%s%I$NL>A0$HF1;~$K$=$N5!G=$N@bL@$,I=<($5$l$^(B $B$9!#FI$_=*$($?$i!"(Bq $B$H%?%$%W$7$F%X%k%W$N%F%-%9%H$r>C$7$^$7$g$&!#(B C-h $B$K$OB>$K$bLr$KN)$D%*%W%7%g%s$,$"$j$^$9!#(B C-h f $B%U%!%s%/%7%g%s$N@bL@!#%U%!%s%/%7%g%sL>$rF~NO$7$^$9!#(B >> C-h f previous-line $B$H%?%$%W$7$F$_$^$7$g$&!#(B C-p $B%3%^%s%I$rpJs$rI=<($7(B $B$^$9!#(B C-h a $B%O%$%Q!<%"%W%m%]%9!#%-!<%o!<%I$rF~NO$9$k$H!"$=$N%-!<%o!<(B $B%I$rL>A0$K4^$`A4$F$N4X?t$HJQ?t$r%j%9%H%"%C%W$7$^$9!#(B Meta-x $B$G5/F0$G$-$k%3%^%s%I$K$O:8B&$K%"%9%?%j%9%/$,IU(B $B$-$^$9!#(B >> C-h a newline $B$H%?%$%W$7$F$_$F2<$5$$!#(B "newline"$B$H$$$&J8;zNs$rL>A0$N0lIt$K;}$DA4$F$N4X?t$HJQ?t$rI=<($7$^$9!#(B $B4X?t$dJQ?t$r$h$j>\$7$/CN$k$?$a$K(B $B$+??Cf$N%^%&%9%\%?%s$r2!$7$F(B $B$/$@$5$$!#(Bhyper-apropos $B$r=*N;$9$k$?$a$K$O(B `q' $B$rF~NO$7$^$9!#(B $B!v$*$o$j$K(B ========== $BK:$l$J$$$G!*(BXEmacs $B$r=*N;$9$k$K$O!"(BC-x C-c $B$G$9!#$^$?(B XEmacs $B$KLa$C$F(B $BMh$i$l$k$h$&$K0l;~E*$K%7%'%k$KLa$k$@$1$J$i(B C-z $B$G$9!#!J(BX $B$G$O!"$3$l$O(B $B8=:_$N(B XEmacs $B$N%U%l!<%`$r%"%$%3%s2=$7$^$9!#!K(B $B$3$NF~Lg%,%$%I$O!"$^$C$?$/$N=i?4 $B$,(BNemacs/Mule $BMQ(B $B$KJQ99!"$5$i$K5HEDLP$$(B $B$^$9!#(B This tutorial descends from a long line of Emacs tutorials starting with the one written by Stuart Cracraft for the original Emacs. Ben Wing updated the tutorial for X Windows. Martin Buchholz and Hrvoje Niksic added more corrections for XEmacs. This version of the tutorial, like XEmacs, is copyrighted, and comes with permission to distribute copies on certain conditions: Copyright (c) 1985, 1996 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. The conditions for copying XEmacs itself are more complex, but in the same spirit. Please read the file COPYING and then do give copies of XEmacs to your friends. Help stamp out software obstructionism ("ownership") by using, writing, and sharing free software! xemacs-21.4.22/etc/TUTORIAL.ko0000644000175000017500000014603206431260357013625 0ustar acsacs ============================== $(C@O:;>n(B GNUEMACS(Mule) $(C@T9.Fm(B ============================== $(CAV@G(B: $(C@L(B $(C@T9.Fm@:(B, "$(C9h?l1b:84Y(B $(C@Mn(B $(C@V=@4O4Y(B. ">>" $(C7N:NEM(B $(C=C@[GO4B(B $(CG`@:(B, $(C1W(B $(C6'(B $(C9+>y@;(B $(CGX>_(B $(CGO4B0!8&(B $(CAv=CGO0m(B $(C@V=@4O4Y(B. Mule $(C@G(B $(C8m7I>n8&(B $(C@T7BGR(B $(C6'?!4B(B, $(C@O9]@{@87N(B $(CD\F.7Q(B*$(CE0(B($(CE0(B*$(CEi?!(B, CTRL $(C6G4B(B, CTL $(C6s0m(B $(C=a@V4Y(B)$(C3*(B $(C8^E8(B*$(CE0(B($(C:8Ek(B, $(C@L=:DI@LGA(B*$(CE08&(B $(C;g?kGQ4Y(B)$(C0!(B $(C;g?k5K4O4Y(B. $(C1W7!<-(B, CONTROL $(C@L6s5g0!(B META $(C6s0m(B $(C>24B(B $(C4k=E?!(B, $(C4Y@=0z00@:(B $(C1bH#8&(B $(C;g?kGO4B(B $(C0M@87N(B $(CGU4O4Y(B. C-<$(C9.@Z(B> $(CD\F.7Q(B*$(CE08&(B $(C4)8%C$(B, <$(C9.@Z(B>$(CE08&(B $(C4)8(4O4Y(B. $(C?98&(B $(C5i8i(B, C-f $(C4B(B, $(CD\F.7Q(B*$(CE08&(B $(C4)8#8i<-(B f $(CE08&(B $(C4)8#4B(B $(C0M@;(B $(C@G9LGU4O4Y(B. <> >> $(C1W7/8i(B, C-v (View Next Screen; $(C4Y@=@G(B $(CH-8i@;(B $(C:;4Y(B) $(C8&(B $(CE8@LGA(B $(CGO?)(B $(C:8< $(C@L=:DI@LGA(B*$(CE08&(B $(C4)8#0m3*<-(B, $(C1W(B $(C5Z(B <$(C9.@Z(B>$(CE08&(B $(C4)8(4O4Y(B. $(CAV@G(B: <$(C9.@Z(B>$(C4B(B, $(C4k9.@Z3*(B $(Cn7N<-4B(B $(C00@:(B $(C@G9L0!(B $(C5K4O4Y(B. $(C8^E8E08&(B $(C;g?kGR(B $(C $(C4k=E?!(B M- <$(C9.@Z(B> ($(C8^E8E08&(B $(C4)8%C$(B<$(C9.@Z(B>$(CE08&(B $(C4)8%4Y(B) $(C8&(B $(C;g?kGR(B $(C7a=CE00m(B $(C=M@;(B $(C6'4B(B, C-x C-c $(C8&(B $(CE8@LGAGU4O4Y(B. Emacs$(C8&(B csh$(C7N:NEM(B $(C1b5?GO0m(B $(C@V4B(B $(C0f?l(B, $(C<-=:Ff5eGO4B(B($(C@O=C(B $(C@{@87N(B $(CA_4\GQ4Y(B)$(CGR(B $(Cz@88i(B, C-v $(C8&(B $(C@T7BGO?)(B $(CAV<U@G(B $(CH-8i0z(B $(C4Y@=(B $(CH-8i?!4B(B, $(CG%=C5G4B(B $(C3;?k?!(B $(C8nG`@G(B $(C9.@L(B $(CA_:95G0m(B $(C@V=@4O4Y(B. $(CG%=C5G0m(B $(C@V4B(B $(C3;?k@L(B $(C?,n(B $(C@V4B(B $(C0M@;(B $(C>K(B $(CK(B $(CGJ?d0!(B $(C@V=@4O4Y(B. C-v $(C?!(B $(C@GGO?)(B $(C>U@87N(B $(CAxG`GO4B(B $(C0M@:(B $(C@L9L(B $(C>K>R=@4O4Y(B. $(C?x7!@G(B $(C@Z8.7N(B $(C5G59>F(B $(C0!4B5%4B(B, ESC v $(C8&(B $(CE8@LGAGU4O4Y(B. >> ESC v $(C?M(B C-v $(C8&(B $(C;g?kGO?)(B, $(C@|HD7N(B $(C@L5?GO4B(B $(C0M@;(B $(C8n9x(B $(C=C55GO?)(B $(C:8<`(B ==== $(CH-@O@;(B $(CH-8i4\@'7N(B $(C:80m(B $(C0!4B5%4B(B, $(C4Y@=@G(B $(C8m7I>n8&(B $(C;g?kGU4O4Y(B. C-v $(C>U@87N(B $(CGQ(B $(CH-8i:P(B $(CAxG`GQ4Y(B ESC v $(C5Z7N(B $(CGQ(B $(CH-8i:P(B $(C5G59>F0#4Y(B C-l $(CH-8i@;(B $(C4Y=C>44Y(B. $(C@L(B $(C6'(B, $(C?x7!(B $(CD?<-0!(B $(C@V>z4x(B $(CG`@L(B $(CH-8i@G(B $(CA_>S?!(B $(C?@557O(B $(CGQ4Y(B >> $(CAv1](B $(CD?<-0!(B $(C>n5p?!(B $(C@V4B0!(B, $(C1W(B $(C1YC3?!(B $(C>n62(B $(CEX=:F.0!(B $(C=aA.(B $(C@V4B(B $(C0!8&(B $(C1b>oGO<n5p7N(B $(C@L5?GO?44B(B $(C0!(B, $(C1W(B $(C1YC3@G(B $(CEX=:F.4B(B $(C>n6;0T(B $(C5G>z4B0!8&(B $(CA6;gGO?)(B $(C:8<n(B ====================== $(CH-8i4\@'@G(B $(C@L5?@:(B $(CGR(B $(Cz=@4O4Y(B. $(C@LA&4B(B, $(CH-8i(B $(C3;?!<-(B, $(CF/(B $(CA$@G(B $(C@eU(B(forward)$(C5Z(B(backward)$(C7N(B $(C@L5?GO4B(B $(C8m7I>n8&(B $(C;g?kGO4B(B $(C0M@T4O4Y(B. $(C@L5i@G(B $(C8m7I>n4B(B $(C0"0"(B, C-p, C-n, C-f, C-b $(C?!(B $(CGR4g5G>n(B $(C@V0m(B, $(CGv@g@G(B $(C@en(B $(C@V@89G7N(B, $(C?\?l1b(B $(C=,?o(B $(C0M@T4O4Y(B. $(C@L5i@:(B, $(C1b:;@{@N(B $(CD?<-@L5?(B $(C8m7I>n@L0m(B , $(C@ZAV(B $(C;g?kGO4B(B $(C0M@T4O4Y(B. >> C-n $(C@;(B $(C8nH8A$55(B $(CE8@LGAGO0m(B, ($(CAv1](B, $(C4g=E@L(B $(C@P0m(B $(C@V4B(B) $(C@L(B $(CG`1n(B $(CAv(B $(CD?<-8&(B $(C@L5?=CE0<> C-f $(C8&(B $(C;g?kGO?)(B $(CG`@G(B $(CA_0#A$557N(B $(C@L5?GO0m(B, C-p $(C@87N(B $(C8nG`A$55(B $(C@'7N(B $(C@L5?GO?)(B $(C:8<> $(CG`@G(B $(C<15N?!<-(B C-b $(C8&(B $(CE8@LGAGO?)(B $(C:8<n5p7N(B $(C@L5?GU(B $(C4O1n(B? $(C4Y=C(B $(CA61](B $(C4u(B C-b $(C8&(B $(CE8@LGAGO0m(B, $(C@L9x@:(B C-f $(C7N(B $(CG`3!(B $(CBJ(B $(C@87N(B $(C5G59>F0!<n6;0T(B $(C5K4O1n(B? $(CH-8i@G(B $(C<15N3*(B $(C8;9L8&(B $(C3Q>n<-(B $(CD?<-8&(B $(C@L5?=CE07A0m(B $(CGO8i(B, $(C1W(B $(C9fGb?!(B $(C@V4B(B $(CEX=:F.0!(B $(C@L5?GO?)(B $(C?@0m(B, $(CD?<-4B(B $(CGW;s(B $(CH-8i3;?!(B $(C@V557O(B $(C5K4O4Y(B. >> C-n $(C@;(B $(C;g?kGO?)(B, $(CD?<-8&(B $(CH-8i@G(B $(CGO4\:84Y(B $(C9X@87N(B $(C@L5?=CDQ(B $(C:8<<(B $(C?d(B. $(C9+>y@L(B $(C@O>n334O1n(B? $(CD?<-@G(B $(C@'D!4B(B $(C>n6;0T(B $(C:/GO?4=@4O1n(B? $(CGQ9.@Z(B $(C4\@'@G(B $(C@L5?@87N4B(B $(C9x0E7S4Y0m(B $(C;}0"5G8i(B, $(C4\>n4\@'7N(B $(C@L5?GR(B $(Cn:P(B $(C>U@87N(B $(CAxG`GO0m(B, ESC b $(C7N(B $(CGQ(B $(C4\>n:P(B $(C@L@|@87N(B $(C5G59>F0)4O4Y(B. $(CAV@G(B: $(C@O:;>n?!(B $(C4kGX<-4B(B, $(C4\>n@G(B $(C2w4B(B $(C4\@'@;(B $(C@N=DGR(B $(Cx=@4O(B $(C4Y88(B, $(C@G;g@{@N(B $(C9.@}@;(B $(C4\>n@G(B $(C2w4B(B $(C4\@'7N<-(B $(CGO0m(B $(C@V=@4O(B $(C4Y(B. >> ESC f $(C3*(B ESC b $(C8&(B $(C8nH8A$55(B $(CE8@LGAGO?)(B $(C:8<$(C4B(B $(C9.<-0|0h@G(B $(CC38.?!(B $(C;g?k5G0m(B, $(CGQFm(B C-<$(C9.@Z(B>$(C4B(B $(C1W0M(B $(C:84Y55(B $(C4u?m(B $(C1b:;@{@N(B $(C4k;s(B($(C9.@Z6s5g0!(B $(CG`@L6s5g0!(B)$(C?!(B $(C4kGQ(B $(CA6@[?!(B $(C;g?k5K(B $(C4O4Y(B. C-a $(C?M(B C-e $(C55(B $(C>K0m(B $(C@V@88i(B $(CFm8.GQ(B $(C8m7I>n@T4O4Y(B. C-a $(C4B(B $(CD?<-8&(B $(CG`@G(B $(C<15N7N(B $(C@L5?=CE00m(B, C-e $(C4B(B $(CG`@G(B $(C3!@87N(B $(C@L5?=CE54O4Y(B. >> C-a $(C8&(B 2$(CH8(B, $(C1W8.0m3*<-(B C-e $(C8&(B 2$(CH8(B $(C@T7BGO?)(B $(C:8<n8&(B 2$(CH8@L;s(B $(C9]:9GO4u6s55(B, $(CD?<-4B(B $(C1W(B $(C@L;s(B $(C@L5?GOAv(B $(C>J4B(B $(C0M(B $(C?!(B $(CAV@G(B. $(C5N0!Av(B $(C4u(B, $(C0#4\GQ(B $(CD?<-(B $(C@L5?(B $(C8m7I>n0!(B $(C@V=@4O4Y(B. $(CH-@O@G(B $(C<15N7N(B $(C@L5?(B $(CGO4B(B ESC < $(C?M(B, $(CH-@O@G(B $(C3!@87N(B $(C@L5?GO4B(B ESC > $(C@T4O4Y(B. $(CEX=:F.(B $(C3;?!<-(B, $(CD?<-0!(B $(CA8@gGO4B(B $(C@'D!8&(B "$(CFw@NF.(B"$(C6s0m(B $(C:N8(4O4Y(B. $(C9Y2Y(B $(C>n(B $(C8;GO8i(B, $(CD?<-4B(B, $(CEX=:F.@G(B $(C>n5p?!(B $(C@V4B0!8&(B $(CH-8i@'?!(B $(C3*E83;0m(B $(C@V4B(B $(C0M(B $(C@T4O4Y(B. $(C>F7!?!(B $(C4\`GU4O4Y(B. $(C@L(B $(CA_?!4B(B, $(C4\>n3*(B $(CG`(B $(C4\@'7N@G(B $(C@L5?8m7I>n55(B $(CFwGT5G>n(B $(C@V=@4O4Y(B. C-f $(CGQ(B $(C9.@Z(B $(C>U@87N(B $(CAxG`GQ4Y(B C-b $(CGQ(B $(C9.@Z(B $(C5Z7N(B $(C5G59>F0#4Y(B ESC f $(CGQ(B $(C4\>n(B $(C>U@87N(B $(CAxG`GQ4Y(B ESC b $(CGQ(B $(C4\>n(B $(C5Z7N(B $(C5G59>F0#4Y(B C-n $(C4Y@=(B $(CG`@87N(B $(C@L5?(B C-p $(C@L@|(B $(CG`@87N(B $(C@L5?(B ESC ] $(C4\6t@G(B $(C3!@87N(B $(C@L5?(B ESC [ $(C4\6t@G(B $(C<15N7N(B $(C@L5?(B C-a $(CG`@G(B $(CCVCJ7N(B $(C@L5?(B C-e $(CG`@G(B $(CCVHD7N(B $(C@L5?(B ESC < $(CH-@O@G(B $(CCVCJ7N(B $(C@L5?(B ESC > $(CH-@O@G(B $(CCVHD7N(B $(C@L5?(B >> $(C0"0"@G(B $(C8m7I>n8&(B $(C=C55GO?)(B $(C:8<n4B(B, $(C0!@e(B $(C@ZAV(B $(C;g?k5G4B(B $(C0M@T4O4Y(B. $(CCVHD@G(B $(C5N0!Av4B(B, $(C@L(B $(C@enAx(B $(C0w@8(B $(C7N(B $(C@L5?GO1b(B $(C6'9.?!(B, C-v $(C3*(B ESC v $(C8&(B $(C;g?kGO?)(B $(C?)1b7N(B $(C5G59>F(B $(C?@557O(B $(CGO<n?!4B(B, $(C9]:9H8n8&(B $(C@T7BGO1b(B $(C@|?!(B, C-u $(C?!(B $(C@L>n<-(B $(C9]:9GO4B(B $(CH8U@87N(B $(C@L5?GU4O4Y(B. >> C-n $(CH$@:(B C-p $(C?!(B $(C@{4gGQ(B $(C@N> C-u 3 C-v $(C6s0m(B $(C@T7BGO?)(B $(C:8<F0!4B5%4B(B, C-u 3 ESC v $(C8&(B $(C;g?kGO8i(B $(C5K4O4Y(B. $(CA_Av8m7I>n(B ========== C-g $(C6s4B(B $(C8m7I>n@L8g(B, $(C@T7B@;(B $(CGJ?d7N(B $(CGO4B(B $(C0M0z(B $(C00@:(B $(C8m7I>n8&(B $(CA_AvGR(B $(Cn8&(B $(CGQC"(B $(C@T7BGO0m(B $(C@V4B(B $(C55A_?!(B, $(C1W0M@;(B $(CA_AvGO0m(B $(C=M(B $(C@88i(B, C-g $(C8&;g?kGO8i(B $(C5K4O4Y(B. >> C-u 100 $(C8&(B $(CE8@LGAGO?)(B $(C@N`(B, $(C@_8xGO?)(B ESC $(C8&(B $(C@T7BGX(B $(C9v7H@;(B $(C6'55(B, C-g $(C8&(B $(C@T7BGO(B $(C8i(B $(CCkJ4B(B $(CA6@[@;(B $(CGX9v8.4B(B $(C@{@L(B $(C@V=@4O(B $(C4Y(B. $(C?98&(B $(C5i8i(B, $(C8m7I>n0!(B $(CA$@G5G>n(B $(C@VAv(B $(C>J4B(B $(CD\F.7Q(B*$(CE08&(B $(C@T7BGX(B $(C9v80(B $(C6'(B $(C?!4B(B, Emacs$(C4B(B $(C:'@;(B $(C?o8.0m(B, $(C1W8.0m(B, $(CH-8i@G(B $(CA&@O(B $(C9X?!(B, $(C9+>y@L(B $(C3*;&4B(B $(C0!(B $(C8&(B $(CG%=CGU4O4Y(B. Emacs $(C9vA/?!(B $(C5{6s<-4B(B, $(C@L(B $(C@T9.Fm?!(B $(C>2?)A.(B $(C@V4B(B $(C0M@;(B $(C=GG`GR(B $(Cx(B $(C4B(B $(C0f?l0!(B $(C@V@;(B $(Cn4@(B $(C0M@N0!(B $(C@L5?E08&(B $(C4)8#0m(B, $(C1W(B $(C4Y@=@G(B $(C:N:P@87N(B $(CAxG`GO?)(B $(CAV<n7N:NEM@G(B $(CCb7B@;(B $(CG%=CGO1b(B $(C@'GO(B $(C?)(B $(C3*E83-(B $(C?):P@G(B $(C@)55?l8&(B $(CAv?l1b(B $(C@'GO?)(B, $(C4Y@=@G(B $(C8m7I>n8&(B $(C>K(B $(CGJ?d0!(B $(C@V=@(B $(C4O4Y(B. C-x 1 $(C@)55?l8&(B 1$(C037N(B $(CGQ4Y(B. C-x 1 $(C4B(B, $(C4Y8%(B $(C@)55?l8&(B $(CAv?l0m(B, $(CD?<-0!(B $(C@V4B(B $(C@)55?l8&(B, $(CH-8i@|C<7N(B $(CH.@eGU4O4Y(B. >> $(CD?<-8&(B $(C@L(B $(CG`?!(B $(C0.0m(B $(C?M<-(B, C-u 0 C-l $(C@L6s0m(B $(CE8@LGAGU4O4Y(B. >> C-h k C-f $(C6s0m(B $(CE8@LGAGO<n@G(B $(C55(B $(CE%8UF.8&(B $(CG%=CGO1b(B $(C@'GO?)(B $(C3*E8320z(B $(C5?=C?!(B, $(C@L(B $(C@)55?l0!(B $(C>n6;0T(B $(CAY>n5e4B0!(B $(C0|B{GO<> C-x 1$(C@L6s0m(B $(CE8@LGAGO0m(B, $(C55E%8UF.0!(B $(C3*E8354x(B $(C@)55?l8&(B $(CAv?l<<(B $(C?d(B. $(C;p@T0z(B $(C;hA&(B =========== $(CEX=:F.8&(B $(CE8@LGAGO0m(B $(C=M@88i(B, $(C4\ $(C@;(B $(CE8@LGAGU4O4Y(B. $(CAw@|?!(B $(C@T7BGQ(B $(C9.@Z8&(B $(C;hA&GO4B5%4B(B, $(C8&(B $(C@T7BGU4O4Y(B. $(C4B(B,$(CE0:85e?!<-(B "Delete"$(C6s0m(B $(C=a@V4B(B $(CE08&(B $(C4-7/<-(B $(C@T7BGU4O4Y(B. "Delete" $(C4k=E?!(B"Rubout"$(C6s0m(B $(C=a@V@;(B $(CAv55(B $(C8p8(4O4Y(B. $(C:84Y(B $(C@O9]@{@87N(B, $(C4B(B, $(CGv@gD?<-0!(B $(C@V4B(B $(C@'D!@G(B $(CAw@|@G(B $(C9.@Z8&(B $(C;hA&GU4O4Y(B. >> $(C9.@Z8&(B $(C8n03A$55(B $(CE8@LGAGO0m(B, $(C1W8.0m3*<-(B $(C1W0M@;(B $(C8&(B $(C;g(B $(C?kGO?)(B $(C;hA&GO<> $(C?@8%BJ86Ax@;(B $(C3Q@;(B $(C6'1nAv(B $(CEX=:F.8&(B $(CE8@LGAGO<nA.3*?M(B "$(C0hFAw(B $(C@L>nAv0m(B $(C@V4B(B $(C0M@;(B $(C3*E83;0m(B $(C@V=@4O4Y(B. $(C@L0M@:(B, $(C1[7N(B $(C<38mGO4B(B $(C0M:84Y(B $(C=GA&7N(B $(CGX:84B(B $(CFm@L(B $(C@_(B $(C>K(B $(C> $(CA61]@|(B $(C@T7BGQ(B, $(C0hn0!557O(B $(CGX:8<> $(CD?<-8&(B $(CG`@G(B $(C<15N7N(B $(C@L5?GO0m(B, $(C8&(B $(C@T7BGO<U@G(B $(CG`0z(B $(C@L>nA.(B $(C9v834O4Y(B. $(C@L>nAx(B $(CG`@L(B $(CH-8i@G(B $(CFx:84Y(B $(C1f0T(B $(C5G8i(B, $(C0h> $(C8&(B $(C4)8#0m(B, $(CGQ9x(B $(C4u(B $(CG`4\6tAv@=@;(B $(C;p@TGO<n4B(B, $(C9]:9(B $(CH8> C-u 8 * $(C6s0m(B $(C@T7BGO?)(B $(C:8<n6;0T(B $(C5G>z=@4O1n(B? $(C5N03@G(B $(CG`(B $(C;g@L?!(B $(C0x9iG`@;(B $(C885i0m(B $(C=M@:(B $(C0f?l?!4B(B, $(C5N9xB0(B $(CG`@G(B $(C<15N(B $(C7N(B $(C0!<-(B, C-o $(C8&(B $(C@T7BGU4O4Y(B. >> $(C@{4gHw(B $(CG`@G(B $(C<15N?!(B $(C0!<-(B, $(C0E1b<-(B C-o $(C8&(B $(C@T7BGO?)(B $(C:8<z=@4O4Y(B. $(C9.@Z?M(B $(C00@L(B, $(C4\>n3*(B $(CG`55(B $(C;hA&GR(B $(C`GO8i(B $(C4Y@=0z(B $(C00=@4O4Y(B. $(CD?<-Aw@|@G(B $(C9.@Z8&(B $(C;hA&(B C-d $(CD?<-0!(B $(C@V4B(B $(C9.@Z8&(B $(C;hA&(B ESC $(CD?<-Aw@|@G(B $(C4\>n8&(B $(C;hA&(B ESC d $(CD?<-@'D!(B $(C@LHD?!(B $(C@V4B(B $(C4\>n8&(B $(C;hA&(B C-k $(CD?<-@'D!7N:NEM(B $(CG`3!1nAv8&(B $(C;hA&(B $(C9+>y@N0!8&(B $(C;hA&GQ(B $(CHD?!(B, $(C1W0M@;(B $(C?x7!4k7N(B $(C5G598.0m(B $(C=M@;(B $(C6'0!(B $(C@V=@4O(B $(C4Y(B. Emacs$(C4B(B, $(CGQ9.@Z:84Y(B $(CE+(B $(C4\@'7N(B $(C;hA&8&(B $(CG`GQ(B $(C6'?!4B(B, $(C;hA&GQ(B $(C3;?k@;(B $(C:8A8GO?)(B $(C5S4O4Y(B. $(C?x7!4k7N(B $(C5G598.4B5%4B(B, C-y $(C8&(B $(C;g?kGU4O4Y(B. $(CAV@GGX>_(B $(CGO4B(B $(C0M@:(B, C-y $(C8&(B $(C;hA&8&(B $(CG`GQ(B $(C@eF4O6s(B, $(C>n5p?!<-6s55(B $(CGR(B $(Cn@L9G7N(B, $(C@L0M@;(B $(C;g?kGO?)(B $(CEX=:F.8&(B $(C@L5?GR(B $(Cn?!4B(B, "Delete" $(C8m7I>n?M(B, "Kill" $(C8m7I>n0!(B $(C@V=@(B $(C4O4Y(B. "Kill" $(C8m7I>n?!<-4B(B $(C;hA&5H(B $(C0M@:(B $(C:8A85GAv88(B, "Delete"$(C?!<-4B(B $(C:8A8(B $(C5GAv(B $(C>J=@4O4Y(B. $(C4\(B, $(C9]:9H8nAv8i(B, $(C:8A85K4O4Y(B. >> C-n $(C@;(B 2$(CH8(B $(CA$55(B $(CE8@LGAGO0m(B, $(CH-8i@G(B $(C@{4gGQ(B $(C@e`(B, C-k $(C?!(B $(C9]:9H8(B $(C> C-y $(C8&(B $(C=CGhGO?)(B $(C:8<n(B $(C:8A85G(B $(C0m(B, C-y$(C7N(B, $(C1W(B $(C@|:N0!(B $(C2t3;>nA}4O4Y(B. >> C-k $(C8&(B $(C8n9x(B $(CE8@LGAGO?)(B $(C:8<> $(CEX=:F.8&(B $(C2t3;4B5%4B(B, C-y $(C@T4O4Y(B. $(CD?<-8&(B $(C8nG`(B $(C9X@87N(B $(C@L5?=CE0(B $(C0m(B, $(CGQ9x(B $(C4u(B C-y $(C8&(B $(CE8@LGAGO?)(B $(C:8<n62(B $(CEX=:F.0!(B $(C:8A85G>n(B $(C@V0m(B, $(C4u183*(B $(C4Y8%(B $(CEX=:F.8&(B $(C;hA&GO8i(B $(C>n6;0T(B $(C5G0Z=@4O1n(B? C-y$(C4B(B, $(C0!@e(B $(CCV1Y(B $(C;hA&5H(B $(C0M@;(B $(C2tA}>n3@4O4Y(B. >> $(CG`@;(B $(C;hA&GO0m(B, $(CD?<-8&(B $(C@L5?=CE00m(B, $(C4Y8%(B $(CG`@;(B $(C;hA&GO<pA&6s55(B, $(CEX=:F.8&(B $(C:/0fGO?4Av88(B, $(C1W0M@;(B $(C?x7!4k7N(B $(C5G598.0m(B $(C=M@;(B $(C6'(B $(C4B(B C-x u$(C7N(B $(C0mD(4O4Y(B. $(C:8Ek@:(B $(C@_8x5H(B $(C8m7I>n8&(B $(C9+H?7N(B $(CGO4B(B $(C@[5?@;(B $(CGU4O4Y(B. $(C9]:9GX<-(B UNDO$(C8&(B $(CG`GO7A0m(B $(CGR(B $(C6'4B(B, $(C8n9x@L3*(B $(C1W(B $(C8m7I>n8&(B $(CG`GO8i(B $(C5G557O(B $(C5G>n(B $(C@V=@4O4Y(B. >> $(C@L(B $(CG`@;(B C-k$(C7N(B $(CAv?l<n@T4O4Y(B. $(C1b4I@:(B, C-x u$(C?M(B $(C00(B $(C=@4O4Y(B. C-_$(C3*(B C-x u$(C?!(B UNDO$(C@G(B $(CH8_(B $(CGU4O4Y(B. $(C:8A8GOAv(B $(C>J@88i(B, $(CG`GQ(B $(C:/0f@:(B, Emacs$(C8&(B $(CA>7aGO8i(B $(C5?=C?!(B $(C@R>n(B $(C9v8.0T(B $(C5K4O4Y(B. $(CAv1](B $(C:80m(B $(C@V4B(B $(CH-@O?!(B $(C4kGX<-(B, $(C4g=E@L(B $(CFmA}@;(B $(CG`GQ(B $(C0M@;(B $(C=a3V=@4O4Y(B. $(CAv1](B, $(C:80m(B $(C@V4B(B $(CH-@O@L6u(B $(C0M@:(B, $(C0#4\Hw(B $(C8;GO8i(B $(CFmA}GO0m(B $(C@V4B(B $(CH-@O(B $(C@ZC<@T(B $(C4O4Y(B. $(C4g=E@L(B $(CH-@O@;(B $(C<<@L:j(B($(C:8A8GQ4Y(B)$(CGO1b(B $(C1nAv(B, $(CAv1]1nAv@G(B $(C:/0f@:(B $(CFmA}GO(B $(C0m@V4B(B $(CH-@O?!(B $(C=a3V4B(B $(C0M@:(B $(C>F4U4O4Y(B. $(C1W0M@:(B, $(C4g=E@L(B $(C@L?M(B $(C00@L(B $(C:/0fGO0m(B $(C=MAv(B $(C>J@:5%55(B, $(C55A_1nAv(B $(C:/0f@;(B $(C0!GQ(B $(C0M@L(B $(CA&8Z4k7N(B $(C=a3V>nAv4B(B $(C@O@L(B $(C>x55(B $(C7O(B $(CGO1b(B $(C@'GX<-(B $(C@T4O4Y(B. $(C<<@L:j@;(B $(CG`GQ(B $(C5ZA6Bw(B $(C:/0fGQ(B $(C0M@L(B $(C@_8x(B $(C5G>n(B $(C@V@;(B $(C6'8&(B $(C@'GO?)(B Emacs $(C4B(B $(C@L8'@;(B $(C:/0fGO?)(B $(C?x:;(B $(CH-@O@;(B $(C321i4O4Y(B. $(C:q0m(B: $(C6GGQ(B, Emacs$(C4B(B $(C?9CxGR(B $(Cx4B(B $(C;sEB?!(B $(C4k:qGO?)(B, $(C@OA$GQ(B $(C=C(B $(C0#0#0]@87N(B $(C@Z5?@{@87N(B $(CFmA}GO0m(B $(C@V4B(B $(CH-@O@G(B $(C3;?k@;(B $(C@L8'(B $(C@;(B $(C:/0fGQ(B $(CH-@O?!(B $(C<<@L:jGU4O4Y(B. $(C@L0M?!(B $(C@GGX(B, $(C88@O@G(B $(C0f?l(B $(C4B(B $(CG`GQ(B $(C:/0f?!(B $(C4kGO?)(B $(CCVF7!(B $(CBJ@;(B $(C:88i(B, $(C@L?M(B $(C00@:(B $(C6f@87N(B $(C8p5e6s@N@L(B $(CG%=C5G>n(B $(C@V4Y(B $(C0m(B $(C;}0"GU4O4Y(B. ($(C?9(B) [--]J:--**-Mule: MULE.tut (Fundamental) ---55%-------------- $(C@L(B Emacs$(CF)Ed8.>s@G(B $(C:9;g:;@:(B MULE.tut$(C@L6s0m(B $(C:R8.0m(B $(C@V=@4O4Y(B. $(CH-@O(B $(C@;(B $(CH-@N5e(B($(CH-@O@;(B $(CC#>F<-(B $(C9vF[?!(B $(C@P>n3V4B(B $(C0M(B)$(CGO8i(B, MULE.tut$(C@G(B $(C:N:P?!(B $(CG%=C(B $(C5K4O4Y(B. $(C?98&(B $(C5i8i(B, new-file$(C@L6s4B(B $(C@L8'@G(B $(CH-@O@;(B $(CH-@N5eGO?44Y8i(B, "Mule: new-file"$(C@L6s4B(B $(C8p5e6s@N@L(B $(C5G0ZAv?d(B. $(CAV@G(B: $(C8p5e6s@N?!(B $(C4kGX<-4B(B $(C3*A_?!(B $(C<38mGO0Z=@4O4Y(B. $(C@a1q(B $(C1b4Y8.=C(B $(C1b8&(B. $(CH-@O@;(B $(CH-@N5eGO0E3*(B, $(C<<@L:jGO4B(B $(C8m7I>n4B(B, $(CAv1]1nAv@G(B $(C0M0z4B(B $(C4^8.(B, 2$(C03@G(B $(C9.@Z7N(B $(C5G>n(B $(C@V=@4O4Y(B. C-x $(C?!(B $(C@L>n<-(B $(C@T7BGO4B(B $(C9.@Z0!(B, $(CH-@O?!(B $(C4kGX(B $(C<-(B $(CG`GO4B(B $(CA6@[@;(B $(C3*E83@4O4Y(B. $(CGQ0!Av(B $(C4u(B, $(CAv1]1nAv@G(B $(C0M0z(B $(C4Y8%(B $(CA!@:(B, $(CH-@N5e(B $(C=C(B, $(CH-@O8m@;(B Emacs$(C0!(B $(C90>n:>4O4Y(B. $(C@L0M@;(B, $(C4\8;7N:NEM(B $(C@Nn5i?)?@4B(B $(C8m7I>n6s0m(B $(C8;GO0m(B $(C@V=@4O4Y(B. $(CAV@G(B: $(C@L(B $(C0f?l4B(B $(CH-@O8m(B $(C@T4O4Y(B. C-x C-f $(CH-@O@;(B $(CC#4B4Y(B($(CH-@N5eGQ4Y(B) Emacs$(C4B(B $(CH-@O8m@;(B $(C90>n?I4O4Y(B. $(C@L0M@:(B, $(CH-8i9X@G(B $(CG`?!(B $(C3*E8334O4Y(B. $(CH-@O8m@;(B $(CAvA$GO0m(B $(C@V4B(B $(C:N:P@:(B, $(C9L4O9vF[6s0m(B $(C:R8.?l4B(B $(C0M@T4O4Y(B. $(C9L4O9v(B $(CF[4B(B $(C@L?M(B $(C00@L(B $(C;g?k5K4O4Y(B. $(CH-@O8m?!(B $(C@L>n<-(B, $(C8.4xE08&(B $(C4)8#8i(B, $(C9L4O9vF[(B $(C?!(B $(CG%=C5G>nAx(B $(C3;?k@:(B $(C4u(B $(CGJ?dGOAv(B $(C>J1b(B $(C6'9.?!(B $(CAv?vA.(B $(C9v834O4Y(B. >> C-x C-f$(C6s0m(B $(CE8@LGAGQ(B $(C5Z?!(B C-g$(C6s0m(B $(CE8@LGAGO<n55(B $(CCkn62(B $(CH-@O55(B $(CC#Av(B $(C>J=@4O4Y(B. $(C@L9x?!4B(B $(CH-@O@;(B $(C<<@L:jGO?)(B $(C:8<n8&(B $(C;g?kGU4O4Y(B. C-x C-s $(CH-@O@;(B $(C<<@L:jGQ4Y(B Emacs$(C@G(B $(C3;?k@:(B $(CH-@O?!(B $(C=a3;>nA}4O4Y(B. $(C<<@L:jGR(B $(C6'(B, $(C?x:;@G(B $(CH-@O@:(B $(C;u(B $(C7N?n(B $(C@L8'@;(B $(C:Y?)<-(B $(C320\Av1b(B $(C@V@89G7N(B $(C3;?k@:(B $(C>x>nAvAv(B $(C>J=@4O4Y(B. $(C@L(B $(C;u(B $(C7N?n(B $(C@L8'@:(B $(C?x:;@G(B $(CH-@O@G(B $(C@L8'?!(B '~'$(C8&(B $(C:Y@N(B $(C0M@T4O4Y(B. $(C%;<<@L:j0!(B $(C3!3*8i(B, Emacs$(C4B(B $(C<<@L:jGQ(B $(CH-@O@G(B $(C@L8'@;(B $(CG%=CGU4O4Y(B. >> C-x C-s$(C6s0m(B $(CE8@LGAGO0m(B $(CF)Ed8.>s@G(B $(C:9;g:;@;(B $(C<<@L:jGO<`(B, 2$(C9xB0@G(B $(CH-@O@;(B C-x C-f $(C7N(B $(C2(3;8i(B, 1$(C9xB0@G(B $(CH-@O@:(B Emacs$(C3;:N(B $(C?!(B $(C32=@4O4Y(B. Emacs$(C3;:N?!(B $(C@V4B(B $(CH-@O7N:NEM(B $(CEX=:F.8&(B $(C@P>n3V>n(B $(C:8A8GO0m@V(B $(C4B(B $(C0M@:(B $(C9vF[6s0m(B $(C:R8.?s4O4Y(B. $(CH-@O@;(B $(C2(3;4B(B $(C0M@:(B, Emacs$(C3;:N?!(B $(C;u7N?n(B $(C9vF[8&(B $(C885l4O4Y(B. Emacs $(C3;?!(B $(C:8A8GO0m(B $(C@V4B(B $(C9vF[@G(B $(C8.=:F.8&(B $(C:84B5%4B(B, $(C4Y@=0z(B $(C00@L(B $(CE8@LGAGU4O4Y(B. C-x C-b >> C-x C-b $(C6s0m(B $(CE8@LGAGO<n60GQ(B $(C@L8'@;(B $(C0.(B $(C0m(B $(C@V4B0!(B, $(C1W8.0m(B, $(C>n60GQ(B $(CH-@O8m@;(B $(C:Y@L0m(B $(C@V4B(B $(C0M@N0!(B $(C0|B{(B $(CGO<J4B(B $(C0M55(B $(C@V=@4O4Y(B. $(C?98&(B $(C5i8i(B, "*Buffer List*" $(C6s4B(B $(CH-@O@:(B $(C>x=@4O4Y(B. $(C@L0M@:(B C-x C-b $(C?!(B $(C@GGO?)(B $(C885i>nAx(B $(C9vF[8.(B $(C=:F.?!(B $(C4kGQ(B $(C9vF[@T4O4Y(B. $(C4g=E@L(B $(C:80m(B $(C@V4B(B Emacs$(C@)55?l3;?!(B $(C@V4B(B, $(C>n60GQ(B $(CEX=:F.6s55(B, $(C>n4@0M(B $(C@N0!@G(B $(C9vF[3;?!(B $(C@V=@4O4Y(B. >> $(C9vF[8.=:F.8&(B $(CAv?l1b(B $(C@'GX(B C-x 1 $(C6s0m(B $(CE8@LGAGO<`(B, $(C>n62(B $(CH-@O@G(B $(CEX=:F.?!(B $(C:/0f@;(B $(CG`GO0m3*<-(B, $(C4Y8%(B $(CH-@O@;(B $(C2(3;>z(B $(C4Y0m(B $(CG_4Y8i(B, $(CCVCJ@G(B $(CH-@O@:(B $(C<<@L:j5G>n(B $(C@VAv(B $(C>J=@4O4Y(B. $(C1W(B $(C:/0f@:(B Emacs $(C3;:N@G(B $(CH-@O0z(B $(C4k@@GO4B(B $(C9vF[(B $(C3;?!88(B $(CG`GO?)A.(B $(C@V=@4O4Y(B. 2$(C9xB0@G(B $(CH-@O?!(B $(C4k@@GO4B(B $(C9vF[8&(B $(C885i1b55GO0m(B, $(C?!5pF.GO4u6s55(B, 1$(C9x(B $(CB0@G(B $(CH-@O?!(B $(C4k@@GO4B(B $(C9vF[?!4B(B $(C>F9+71(B $(C?5Gb@;(B $(CAVAv(B $(C>J=@4O4Y(B. $(C@L0M@:(B $(C4k(B $(C4\Hw(B $(C;g?kGO1b(B $(C=10T(B, $(C6GGQ(B, 1$(C9xB0@G(B $(CH-@O?!(B $(C4k@@GO4B(B $(C9vF[8&(B $(CH.:8GO?)(B $(C5N(B $(C1b(B $(C@'GO?)(B $(C55?r@L(B $(C5G4B(B $(C9f9}@T4O4Y(B. C-x C-s $(C7N(B $(C9vF[8&(B $(C<<@L:jGO1b(B $(C@'GO?)(B C-x C-f $(C7N(B $(C9vF[8&(B $(C13CF7!@G(B $(C8m7I>n8&(B $(C;g?kGU4O4Y(B. C-x s $(CGv@g(B $(C@V4B(B $(C9vF[8&(B $(C<<@L:jGQ4Y(B. C-x s $(C4B(B $(C3;?k@;(B $(C9Y2[(B $(C9vF[(B $(C@|C<8&(B $(CH-@O?!(B $(C<<@L:jGU4O4Y(B. $(C@L(B $(C6'(B, $(CGO3*(B $(CGO3*@G(B ($(C<<@L:j5G>n>_(B $(CGR(B)$(C9vF[?!(B $(C4kGO?)(B, $(C<<@L:jGO4B0!(B, $(CGOAv(B $(C>J4B0!8&(B y$(C3*(B n$(C@87N(B $(C9/=@4O4Y(B. $(C@L(B $(CG%=C4B(B $(CH-8i(B $(C9X@G(B $(CG`?!(B $(CG%=C5K4O4Y(B. $(C?98&(B $(C5i8i(B, $(C>F7!?M(B $(C00=@4O4Y(B. Save file /usr/private/yours/MULE.tut? (y or n) $(C8m7I>n@G(B $(CH.@e(B ============= $(C?!5pEM?!4B(B, $(CD\F.7Q(B*$(CE03*(B $(C8^EM(B*$(CE07N(B $(C@T7BGR(B $(C@(B $(C89@:(B $(C8m7I>n0!(B $(C@V=@4O4Y(B. $(C@L0M5i@;(B $(C4Y7g1b(B $(C@'GO?)(B, $(CH.@e(B(eXtend) $(C8m7I>n8&(B $(C;g?kGU4O4Y(B. $(C@L0M?!4B(B, $(C>F7!@G(B 2$(C0!Av(B $(CA>7y0!(B $(C@V=@4O4Y(B. C-x $(C9.@Z?!(B $(C@GGQ(B $(CH.@e(B. $(C@L>n<-(B $(CGQ9.@Z8&(B $(C@T7BGU4O4Y(B. ESC x $(C@L8'?!(B $(C@GGQ(B $(CH.@e(B. $(C@L>n<-(B $(C8m7I>n@G(B $(C@L8'@;(B $(C@T7BGU4O4Y(B. $(C@L0M5i@:(B $(C@O9]@{@87N(B, $(CFm8.GOAv88(B, $(CAv1]1nAv(B $(C:8>F?B(B $(C0M0z(B $(CA61](B $(C:s9xGO(B $(C0T4B(B $(C;g?k5GAv(B $(C>J4B(B $(C8m7I>n8&(B $(C@'GQ(B $(C0M@T4O4Y(B. C-x C-f ($(CH-@N5e(B)$(C3*(B C-x C-s ($(C<<@L:j(B)$(C4B(B $(C@L(B $(C:N7y@T4O4Y(B. $(C@L?\?!(B, C-x C-c($(C?!5pEM@G(B $(CA>7a(B)$(C55(B $(C1W78=@4O4Y(B. C-z$(C4B(B Emacs$(C?!<-(B $(C:|A.3*?@4@5%?!(B $(C@ZAV(B $(C;g?k5G4B(B $(C9f9}@T4O4Y(B. Emacs$(C8&(B $(CA>7aGO4B(B $(C0M@L(B $(C>F4O6s(B, $(C@O4\(B, csh$(C@G(B $(C79:'?!(B $(C5G59>F0!4B5%?!4B(B $(CA&@O(B $(CAA@:(B $(C9f(B $(C9}@L6s0m(B $(C8;GR(B $(CF4U4O4Y(B. $(CAV@G(B: $(C4\(B, X-window$(C?!<-(B $(CG`GO0m(B $(C@V4B(B $(C0f?l(B, $(CH$@:(B $(C;g?kGO0m(B $(C@V4B(B $(C=)@L(B sh$(C@O(B $(C6'4B(B, $(C1W78Av(B $(C>J=@4O4Y(B. C-x $(C8m7I>n4B(B,$(C89@L(B $(C@V=@4O4Y(B. $(C@L9L(B $(C9h?n(B $(C0M@:(B $(C>F7!@G(B $(C0M@T4O4Y(B. C-x C-f $(CH-@O@G(B $(CFmA}(B(Find) C-x C-s $(CH-@O@G(B $(C:8A8(B(Save) C-x C-b $(C9vF[8.=:F.@G(B $(CG%=C(B C-x C-c $(C?!F7aGQ4Y(B. $(CH-@O@G(B $(C:8A8@:(B, $(C@Z5?@{@87N4B(B $(CG`GO?)(B $(CAvAv(B $(C>J4B4Y(B. $(C1W7/3*(B, $(CH-@O@L(B $(C:/0f5G>n(B $(C@V@88i(B, $(CH-@O@G(B $(C:8(B $(CA8@;(B $(CGO4B0!(B, $(C>F4Q0!8&(B $(C90>n?I4O4Y(B. $(C:8A8GO?)(B $(CA>7aGO4B(B $(C:8(B $(CEk@G(B $(C9f9}(B, C-x C-s C-x C-c $(C7N(B $(CGO4B(B $(C0M@T4O4Y(B. $(C@L8'?!(B $(C@GGQ(B $(CH.@e8m7I>n?!4B(B, $(C1W4YAv(B $(C;g?k5GAv(B $(C>J4B(B $(C0M@L3*(B, $(CF/A$@G(B $(C8p5e?!<-9[?!(B $(C;g?k5GAv(B $(C>J4B(B $(C0M5n@L(B $(C@V=@4O4Y(B. $(C?97N<-(B, "command-apropos" $(C8&(B $(C5l4O4Y(B. $(C@L(B $(C8m7I>n4B(B $(CE0?v5e8&(B $(C@T7B=CE00m(B, $(C1W0M?!(B $(C8ED!GO4B(B $(C8p5g(B $(C8m7I(B $(C>n@G(B $(C@L8'@;(B $(CG%=CGU4O4Y(B. ESC x $(C6s0m(B $(CE8@LGAGO8i(B, $(C=:E)80(B $(C9X?!(B "M-x" $(C0!(B $(CG%(B $(C=C5K4O4Y(B. $(C@L0M?!(B $(C4kGO?)(B, $(C=GG`GO4B(B $(C8m7I>n@G(B $(C@L8'(B($(CAv1]@G(B $(C0f?l(B, "command-apropos")$(C8&(B $(C@T7BGU4O4Y(B. "command-a" $(C1nAv(B $(C@T7BGQ(B $(C5Z(B $(C=:Fd@L=:(B $(C8&(B $(CD!8i(B, $(C5Z@G(B $(C:N:P@:(B $(C@Z5?@{@87N(B $(C8^?vA}4O4Y(B. $(C@L(B $(CHD(B, $(CE0?v5e8&(B $(C90@89G7N(B, $(C>K0m(B $(C=M@:(B $(C9.@Z?-@;(B $(CE8@LGAGU4O4Y(B. $(C6GGQ(B, $(CE0?v5e8&(B $(C@T7BGOAv(B $(C>J@88i(B, $(C8p5g(B $(C8m7I>n0!(B $(CG%=C5K4O4Y(B. >> ESC x $(C8&(B $(CE8@LGAGO0m(B, $(C@L>n<-(B, "command-apropos" $(CH$@:(B "command-a" $(C@L6s0m(B $(CE8@LGAGU4O4Y(B. $(C4Y@=?!(B, "kanji"$(C@L6s0m(B $(CE8@LGAGU4O4Y(B. $(C3*E83-(B "$(C@)55?l(B"$(C8&(B $(CAv?l4B5%4B(B, C-x 1 $(C@L6s0m(B $(CE8@LGAGU4O4Y(B. $(C8p5e6s@N(B ======== $(C88>`(B $(CC5C5Hw(B $(C8m7I>n8&(B $(CCF4Y8i(B, $(CH-8i@G(B $(C9XBJ@G(B $(C?!DZ?!8.>n6s0m(B $(C:R8.4B(B $(C@en4B(B $(CH-8i@G(B $(CA&@O(B $(C9X(B $(CG`@T4O4Y(B. $(C1W(B $(C9Y7N(B $(C@'@G(B $(CG`@:(B, $(C8p5e6s@N@L6s0m(B $(C:R8.0m(B $(C@V=@4O4Y(B. $(C8p5e6s@N@:(B $(C@L7/GQ(B $(C=D@8(B $(C7N(B $(CG%=C5G>n(B $(C@V0ZAv?d(B. [--]J:--**-Mule: MULE.tut (Fundamental) ---NN%-------------- $(CAV@G(B: NN%$(C@G(B NN$(C@:(B $(C<}@Z0!(B $(C5i>n(B $(C@V=@4O4Y(B. $(C4g=E@L(B $(C;g?kGO0m(B $(C@V4B(B Emacs$(C@G(B $(C8p5e6s@N0z(B $(C4Y8&(B $(CAv55(B $(C8p8#Av88(B, $(C4gH2GOAv(B $(C8;557O(B. $(C?98&(B $(C5i8i(B, $(C=C0#@L3*(B uptime$(C@L(B $(CG%=C5G0m(B $(C@V4B(B $(C0M@:(B, display-time$(C@L6s4B(B $(C1b4I@L(B $(C@[5?GO0m(B $(C@V1b(B $(C6'9.@T4O4Y(B. $(C@L(B $(CG`?!(B $(C@GGO?)(B $(C89@:(B $(C@/?kGQ(B $(CA$:80!(B $(C>r>nA}4O4Y(B. $(CAv1](B, $(C4g=E@L(B $(C:80m(B $(C@V4B(B $(CH-@O8m@;(B $(CG%=CGO0m(B $(C@V=@4O4Y(B. NN%$(C@:(B $(CGv@g(B $(C=:(B $(CE)80@'?!(B $(CH-@O@G(B $(CA&@O(B $(C@'?!<-:NEM(B $(C8n(B $(CF[<>F.B00!(B $(CG%=C5G0m(B $(C@V4B(B $(C0!8&(B $(C3*E8(B $(C3;0m(B $(C@V=@4O4Y(B. $(CH-@O@G(B $(C0!@e(B $(CCVCJ8&(B $(CG%=CGO0m(B $(C@V@88i(B, --Top--$(C6s0m(B $(CG%=C5K(B $(C4O4Y(B. $(CH-@O@G(B $(C0!@e(B $(CCVHD8&(B $(CG%=CGO0m(B $(C@V4Y8i(B, --Bot--$(C6s0m(B $(CG%=C5K4O4Y(B. $(CH-8i(B $(C3;?!(B $(CH-@O(B $(C@|:N0!(B $(CG%=C5G0m(B $(C@V4Y8i(B, --All--$(C6s0m(B $(CG%=C5K4O4Y(B. $(C8p5e6s@N@G(B $(Cn60GQ(B $(C8p5e?!(B $(C5i>n@V4B(B $(C0!8&(B $(C3*E8(B $(C3;0m(B $(C@V=@4O4Y(B. $(CGv@g4B(B, $(C5pFzF.@N(B Fundamental$(C?!(B $(C5i>n0!(B $(C@V=@4O4Y(B. $(C@L0M55(B $(C8^@LA.8p5e@G(B $(CGO3*@G(B $(C?9@T4O4Y(B. Emacs$(C4B(B Lisp mode$(C3*(B Text mode$(C?M(B $(C00@L(B, $(C4Y8%(B $(CGA7N1W7%>p>n3*(B $(CEX=:F.(B $(C?!(B $(C4kGO?)(B $(C?!5pF.8&(B $(CG`GO1b(B $(C@'GQ(B $(C8n0!Av@G(B $(C8^@LA.8p5e8&(B $(C0.0m(B $(C@V=@4O4Y(B. $(C>n62(B $(C6'6s55(B $(C9]5e=C(B $(C>n4@0M@N0!@G(B $(C8^@LA.8p5e@G(B $(C;sEB7N(B $(C5G>n(B $(C@V=@4O4Y(B. $(C0"0"@G(B $(C8^@LA.8p5e4B(B $(C8n0!Av@G(B $(C8m7I>n8&(B $(C@|Gt(B $(C4Y8%(B $(CG`5?@87N(B $(CGO?)(B $(C9v(B $(C834O4Y(B. $(C?98&(B $(C5i>n(B $(C:8=J4O4Y(B. $(CGA7N1W7%(B $(C3;?!(B $(C8m7I>n8&(B $(C885e4B(B $(C8m7I>n0!(B $(C@V(B $(C=@4O4Y(B. $(C8m7I>n8&(B $(C>n60GQ(B $(CG|=D@87N(B $(CGO4B0!4B(B, $(C0"(B $(CGA7N1W7%>p>n?!(B $(C5{6s<-(B $(C4Y8#Av88(B, $(C0"0"@G(B $(C8^@LA.8p5e4B(B, $(C9]5e=C(B $(C3V>nA]4O4Y(B. $(C0"0"@G(B $(C8^@LA.8p5e?!(B $(C5i>n0!1b(B $(C@'GQ(B $(C8m7I>n4B(B $(C8p5e8m@L(B $(CH.@e5H(B $(C0M@87N(B $(C5G>n(B $(C@V=@4O4Y(B. $(C?98&(B $(C5i8i(B, M-x fundamental-mode$(C4B(B Fundamental$(C7N(B $(C5i>n0!(B $(C1b(B $(C@'GQ(B $(C0M@T4O4Y(B. $(C88>`(B, $(C?5>n8&(B $(C?!5pF.GQ4Y8i(B, Text mode$(C7N(B $(C5i>n0)4O4Y(B. >> M-x text-mode $(C6s0m(B $(CE8@LGAGO<> C-h m $(C8&(B $(C;g?kGO?)(B Text mode$(C?M(B Fundamental mode$(C@G(B $(CBw@L8&(B $(C>K>F(B $(C:8<> C-x 1$(C7N(B $(C55E%8UF.8&(B $(CH-8i@87N:NEM(B $(CAv?l<n(B $(C>KFD:*@;(B $(C1W4k7N(B $(C@T7BGR(B $(Cs@;(B $(C:8<n(B $(C@V=@4O4Y(B. Mule $(C@:(B, $(CH-@O@TCb7B(B, $(C@T7B(B, $(CH-8iCb7B?!(B $(C4kGO?)(B, $(C0"(B $(C0"(B $(C5683@{@87N(B $(CDZ5eC<0h8&(B $(CAvA$=CE3(B $(C> $(C8p5e6s@N(B $(C@'?!(B "J:","S:", $(CH$@:(B "E:"$(C0!(B $(CG%=C5G>n(B $(C@V4B0!(B $(CH.@N(B $(CGO<n(B $(C@L?\(B $(C@G(B $(C9.@Z(B($(C@O:;>n(B, $(CGQ19>n5n(B)$(C55(B $(CG%=CGQ4Y4B(B $(C0M@;(B $(C3*E83;0m(B $(C@V=@4O4Y(B. J$(C4B(B JUNET$(C@87N(B $(C;g?k5G0m(B $(C@V4B(B JIS $(CDZ5e(B, S $(C4B(B Shift-JIS, E $(C4B(B $(C@O:;>n(BEUC $(C8&(B $(C3*(B $(CE83;0m(B $(C@V=@4O4Y(B. $(C4Y19>n(B $(CG%=C@G(B $(C@/9+4B(B C-x C-k t $(C7N(B ON/OFF$(C@G(B $(CEd1[@L(B $(C0!(B $(C4IGU4O4Y(B. $(C4Y@=@G(B $(C?94B(B, $(C@O4\(B $(C4Y19>nG%=C8&(B OFF$(CGO0m3*<-(B, $(C4Y=C(B $(CGQ9x(B ON$(C@;(B $(CG`GO?)(B $(C:>4O4Y(B. >> C-x C-k t$(C8&(B 2$(C9x(B $(CG`GO<n(B $(C@V@;(B $(C6'(B, $(C88>`(B $(C4g=E@L(B $(C;g?kGO0m(B $(C@V(B $(C4B(B $(C4\8;?!(B $(C8^EM(B*$(CE00!(B $(C:Y>n(B $(C@V@88i(B, $(C@L=:DI@LGA(B*$(CE0(B $(C4k=E?!(B $(C1W0M@;(B $(C;g?kGO4B(B $(C0M@L(B $(C0!4IGU4O4Y(B. $(C@L(B $(C6'(B, $(C8^EM(B*$(CE0@G(B $(C;g?k9f9}@:(B $(CD\F.7Q(B*$(CE0?M(B $(C00@L(B $(C4)8#8i<-(B $(C9.@Z8&(B $(CE8@LGAGU4O4Y(B. ESC <$(C9.@Z(B>$(C55(B M-<$(C9.@Z(B>$(C55(B $(C00@:(B $(C@[5?@;(B $(CGU4O4Y(B. $(CAv1](B $(C1nAv@G(B $(C<38m?!<-(B ESC <$(C9.@Z(B>$(C6s0m(B $(CG`GO0m(B $(C@V4x(B $(C0w@L(B, M-<$(C9.@Z(B>$(C7N(B $(C5K4O4Y(B. $(CAV(B $(C@GGX>_(B $(CGO4B(B $(C0M@:(B, $(C=,GAF.(BJIS$(C3*(B EUC$(CDZ5e(B $(C6'4B(B $(C;g?kGR(B $(Cx=@4O4Y(B. $(CDZ5eC<0h@G(B $(C13C<4B(B, $(C0"0"@G(B $(C9vF[?!(B $(C4kGX<-88(B $(C@/H?GU4O4Y(B. $(C0"0"@G(B, $(CDZ(B $(C5eC<0h(B $(CAvA$?!(B $(C4kGX<-4B(B, C-h a coding-system $(C@87N:<(B $(C> C-h a coding-system $(C@87N(B $(C3*?@4B(B $(C55E%8UF.(B $(C3;@G(B, set-display-coding-system, set-file-coding-system, set-process-coding-system $(C@G(B $(C<38m@;(B $(C@P>n:8<n4B(B, $(CD?<-@'D!(B $(C@LHD8&(B $(C0K;vGQ4Y8i(B, C-s, $(CD?<-@'D!(B $(C@L@|@L(B $(C6s8i(B C-r $(C@T4O4Y(B. C-s $(C8&(B $(CE8@LGAGO8i(B, $(C?!DZ?!8.>n?!(B "I-search:"$(C6s4B(B $(C9.@Z?-(B $(C@L(B $(CGA7RF.7N<-(B $(CG%=C5K4O4Y(B. ESC$(C8&(B $(C4)8#8i(B, $(CA>7a5K4O4Y(B. >> C-s$(C7N(B $(C0K;v@L(B $(C=C@[5K4O4Y(B. $(C1W8.0m(B, $(CC5C5Hw(B 1$(C9.@Z>?(B "cursor"$(C6s4B(B $(C4\>n8&(B $(C@T7BGU4O4Y(B. 1$(C9.@Z(B $(C@T7BGR(B $(C6'864Y(B, $(CD?<-4B(B, $(C>n6;0T(B $(C?rAw(B $(C@T4O1n(B? >> $(CGQ9x(B $(C4u(B C-s $(C8&(B $(CE8@LGAGO8i(B, $(C4Y@=@G(B "cursor"$(C8&(B $(CC#@;(B $(C> $(C8&(B 4$(CH8(B $(C@T7BGO0m(B, $(CD?<-@G(B $(C?rAw@S@;(B $(C:8<> ESC$(C8&(B $(C4)8#0m(B, $(CA>7aGU4O4Y(B. $(CC#0m(B $(C=M@:(B $(C9.@Z?-@;(B $(CE8@LGAA_?!55(B, $(CE8@LGAGQ(B $(C9.@Z:N:P88@87N(B, $(C0K;v@;(B $(C=C@[GU4O4Y(B. $(C4Y@=(B $(C9.@Z8&(B $(CC#4B5%4B(B, $(C4Y=C(B C-s$(C8&(B $(CE8@LGAGU4O4Y(B. $(C88>`(B, $(C9.@Z(B $(C?-@L(B $(CA8@gGOAv(B $(C>J@88i(B, $(C8^<7a5K4O4Y(B. $(C0K;v=GG`A_?!(B, $(C8&(B $(C@T7BGO8i(B, $(C0K;v9.@Z?-@G(B $(CA&@O(B $(C5Z@G(B $(C9.@Z0!(B $(CAv?vA}4O4Y(B. $(C1W8.0m3*<-(B, $(CD?<-4B(B, $(C@L@|9x@G(B $(C@'D!7N(B $(C5G59>F0)4O4Y(B. $(C?98&(B $(C5i(B $(C8i(B, "cu"$(C6s0m(B $(CE8@LGAGO0m(B, $(CCVCJ@G(B "cu"$(C@G(B $(C@'D!?!(B $(CD?<-0!(B $(C?rAw?44Y0m(B $(CGU=C4Y(B. $(C?)1b?!<-(B $(C8&(B $(C@T7BGO8i(B, $(C<-D!6s@N@G(B 'u'$(C0!(B $(CAv?vAv0m(B, $(CD?<-4B(B 'u'$(C8&(B $(CE8@LGAGO1b(B $(C@|?!(B, $(CD?<-0!(B $(C@V>z4x(B 'c'$(C@G(B $(C@'D!7N(B,$(C@L5?GU4O4Y(B. $(C0K;v=GG`A_?!(B, C-s $(C3*(B C-r $(C@L?\@G(B $(CD\F.7Q9.@Z8&(B $(CE8@LGAGO8i(B, $(C0K;v@:(B $(CA>7aGU4O4Y(B. C-s $(C4B(B, $(CGv@g@G(B $(CD?<-@'D!(B $(C@LHD?!(B $(C3*?@4B(B $(C0K;v9.@Z?-@;(B $(CC#=@4O4Y(B. $(C88>`(B, $(C@L@|(B $(CBJ@;(B $(CC#0m(B $(C=M@88i(B, C-r $(C@;(B $(CE8@LGAGO4B(B $(C0M@87N(B, $(C?*9fGb0K;v@L(B $(C0!4IGU4O(B $(C4Y(B. C-s $(C?M(BC-r $(C4B(B, $(C0K;v@G(B $(C9fGb@L(B $(C9]4k@O(B $(C;S(B, $(C@|:N(B $(C00@:(B $(C?rAw@S@;(B $(CGU4O4Y(B. $(C8.D?=C:j(B $(C?!5pFC(B $(C79:'(B $(C6'6'7N(B, ($(C:;@G(B $(C>F4O0T(B) $(C8.D?=C:j(B $(C?!5pFC(B $(C79:'@L6s0m(B $(C:R8.4B(B $(C;sEB?!(B $(C5i(B $(C>n0!4B(B $(C6'0!(B $(C@V=@4O4Y(B. $(C8^@LA.8p5e@G(B $(CJ=@4O4Y(B. $(C8.D?=C:j(B $(C?!5pFC(B $(C79:'7N:NEM(B $(C:|A.3*?@1b(B $(C@'GX<-4B(B, M-x top-level $(C@L6s0m(B $(CE8@LGAGU4O4Y(B. >> $(C=CGhGO?)(B $(C:8<z4x(B $(C0M@T4O(B $(C4Y(B. M-x top-level$(C@:(B, $(C>F9+71(B $(C?5Gb@;(B $(CAV0m(B $(C@VAv(B $(C>J=@4O4Y(B. $(C8.D?=C:j(B $(C?!5pFC(B $(C79:'7N:NEM(B $(C:|A.3*?@4B(B $(C0M?!(B $(C4kGX<-4B(B C-g$(C4B(B $(C5hAv(B $(C>J(B $(C=@4O4Y(B. $(CGoGA(B ==== Emacs$(C?!4B(B, $(C89@:(B $(C55?r1b4I@L(B $(C@V0m(B, $(C?)1b?!<-(B, $(C@|:N8&(B $(C<38mGO4B(B $(C0M@:(B $(C:R0!4IGU4O4Y(B. $(C1W7/3*(B, $(C>FAw(B $(C8p8#4B(B $(C89@:(B $(C1b4I@;(B $(C9h?l1b(B $(C@'GX<-4B(B, $(C6s0m(B $(C:R8.4B(B C-h $(C8&(B $(CE8@LGAGO4B(B $(C0M@87N(B, $(C89@:(B $(CA$:88&(B $(C@Tn<-(B $(CGJ?dGQ(B $(C?In62(B $(C?I`(B, C-h $(C8&(B $(CE8@LGAGO0m3*<-(B $(C86@=@L(B $(C:/G_4Y8i(B, C-g $(C8&(B $(CE8@LGAGO8i(B, $(CCkn<-(B $(CE08&(B $(C@T7BGO8i(B, $(C1W(B $(C8m7I>n?!(B $(C4kGQ(B $(CB*@:(B $(C<38m@;(B $(CG%=CGU4O4Y(B. >> C-h c C-p $(C6s0m(B $(CE8@LGAGO?)(B $(C:8<oGO0m(B $(C@VAv(B $(C>J@:(B $(C8m7I>n55(B $(C;}0"GX(B $(C3>(B $(Cn55(B C-h c $(C@G(B $(C5Z?!(B $(C@L>n(B $(CA}4O4Y(B. $(C4u?m(B $(C;s<K0m(B $(C=M@88i(B, c $(C4k=E?!(B k $(C8&(B $(CAvA$GU4O4Y(B. >> C-h k C-p $(C6s0m(B $(CE8@LGAGO?)(B $(C:8<n@G(B $(C@L8'0z(B $(C1b4I@L(B $(CG%=C5K4O4Y(B. $(C4Y(B $(C@P>z@88i(B, C-x 1 $(C6s0m(B $(CE8@LGAGO8i(B, $(C:|A.3*?I4O4Y(B. $(C@L?\?!55(B $(C55?r@L(B $(C5G4B(B $(C?I> C-h f previous-line $(C@;(B $(CE8@LGAGO0m(B, $(C@;(B $(C4)8#<n8&(B $(C=GG`GO4B(B $(CFcn8&(B $(CG%=CGU4O4Y(B. $(C@L(B $(C8m7I>n5i@:(B $(C8p5N(B ESC x $(C7N(B $(C=GG`GR(B $(C> C-h a file $(C>K0m(B $(CE8@LGAGO0m(B, $(C@;(B $(C4)8#<n8&(B $(CG%=CGU4O4Y(B. $(C6GGQ(B, find-file $(C@L3*(B write-file$(C6s4B(B $(C@L8'@G(B C-x C-f $(C3*(B C-x C-w $(C?M(B $(C00(B $(C@:(B $(C8m7I>n55(B $(CG%=C5K4O4Y(B. $(C3!@87N(B ====== $(C@XAv8;0m(B: $(CA>7aGO4B5%4B(B, C-x C-c $(C6s0m(B $(CGU4O4Y(B. $(C@L(B $(C@T9.Fm@:(B, $(CCJ=I@Z?!0T55(B $(C>K1b(B $(C=10T(B $(CGO557O(B $(C@G55GO0m(B $(C@V=@4O4Y(B. $(C1W7/9G7N(B, $(CH$=C(B $(C9+>y@N0!(B $(C@LGXGO1b(B $(C>n7A?n(B $(CA!@L(B $(C@V4Y8i(B, $(CH%@Z<-(B $(CG*3d(B $(CGOAv(B $(C8;0m(B, $(CF.A}@;(B $(C@b>F(B $(CAV<`(B, EMACS $(C8&(B $(C8n@OA$55(B $(C;g?kGO0m(B $(C:88i(B, $(C1W0M@;(B $(C1W885P4Y4B(B $(C0M@:(B $(C8xGO0T(B $(C5I(B $(C0M@T4O4Y(B. $(CCVCJ?!4B(B $(C>n8.5U@}GR(B $(CAv55(B $(C8p8#0Z=@4O4Y(B. $(C1W7/3*(B, $(C1W0M@:(B $(C>n60GQ(B $(C?!5pEM6s55(B $(C6H(B $(C00=@4O4Y(B. EMACS $(C?M(B $(C00@L(B, $(C4k4\Hw(B $(C89@:(B $(C0M@L(B $(C0!4IGQ(B $(C0f?l?!4B(B $(CF/Hw(B $(C1W780ZAv?d(B. $(C1W8.0m(B, EMACS $(C?!<-4B(B, $(C=GA&7N(B, $(C9+>y@L(B $(C3*(B $(CGR(B $(Cn(B MicroEMACS (kemacs) $(C@T9.Fm(B" $(C@;(B GNUE- macs (Nemacs)$(C@G(B Tutorial$(C?k@87N(B $(C0mCD>4(B $(C0M@T4O4Y(B. Jonathan Payne $(C?!(B $(C@GGQ(B "JOVE Tutorial" (19 January 86) $(C@;(B $(C:/0fGQ(B $(C0M@L0m(B, $(C1W0M@:(B $(C?x7!(B, CCA-UNIX$(C@G(B Steve Zimmerman $(C?!(B $(C@GGX<-(B $(C:/0f5H(B, MIT $(C@G(B "Teach-Emacs" $(C@T9.Fm(B (31 October 85) $(C@;(B ($(C4u?m(B) $(C:/0fGQ(B $(C0M@L(B $(C>z=@4O4Y(B. Update - February 1986 by Dana Hoggatt. Update - December 1986 by Kim Leburg. Update/Translate - July 1987 by SANETO Takanori $(CF/:0GQ(B $(C0(;g(B =========== $(CCVCJ?!(B $(C@L(B $(C@O:;>n9x?*@;(B $(C@[<:GQ(B, SANETO Takanori$(C>>(B. $(C@L(B $(C9.@e@:(B GMW + Wnn + Nemacs$(C@;(B $(C;g?kGO?)(B $(C@[<:G_=@4O4Y(B. $(C1W?M(B $(C00@:(B $(CHG8"GQ(B $(CGA7N1W7%@;(B $(C885g(B $(C8p5g(B $(C:P?!0T(B $(C0(;g@G(B $(C6f@;(B $(CG%GO0m(B $(C=M=@4O4Y(B. $(C9x?*@L6s5g0!(B, $(C@T7B(B $(C5n(B $(C?)7/8p7N(B $(C55?M(B $(CAX(B $(CHDAvGO6s>(B, $(C4k4\Hw(B $(C0(;gGU4O4Y(B. $(C?@?*(B, $(C0EA~(B, $(C@L(B $(C?\@G(B $(C9.C%@:(B $(C>F7!@G(B $(C;g6w?!0T(B $(C@V=@4O4Y(B. $BNkLZM5?.(B hironobu@sra.co.jp Update/Add - December 1987 by Hironobu Suzuki Update/Add - November 1989 by Ken'ichi Handa Update/Add - January 1990 by Shigeki Yoshida Update/Add - March 1992 by Kenichi HANDA $(C6G4Y8%(B $(C0(;g(B =========== $(C@L(B $(C9.<-4B(B "$(C@O:;>n(B GNUEMACS(Mule) $(C@T9.Fm(B"$(C@;(B $(CGQ19>n7N(B $(C9x?*GO?)(B, hemacs$(C7N(B $(C@[<:GQ(B $(C0M@T4O4Y(B. $(C@O:;>n9x?*@;(B $(C4c4gGQ(B $(C8p5g(B $(C:P(B, hemacs$(C8&(B $(C039_GO?)(B $(CAV=E(B $(C:P(B, $(CF/Hw(B Mule$(C0z(B hemacs$(C@G(B $(CH/0f18C`?!(B $(C89@:(B $(C55?r@;(B $(CAX(B $(C136G4kGP(B $(C3*0!?@?,18=G(B $(CA9>w;}@N(B Masashi SHIMBO$(C>>?M(B Katsuyoshi Yamagami$(C>>?!0T(B $(C0(;g@G(B $(C6f@;(B $(C@|GU4O4Y(B. 1993. 9. 25 $(C136G4kGP(B $(C0xGP:N(B $(C@|1b0xGP0z(B $(C3*0!?@?,18=G(B Dosam HWANG hwang@forest.kuee.kyoto-u.ac.jp xemacs-21.4.22/etc/TUTORIAL.no0000644000175000017500000013441106435215701013623 0ustar acsacsCopyright (c) 1997, Stig Bjørlykke Se i slutten av dokumentet for vilkår og betingelser. Dette dokumentet er basert på den engelske veiledningen, som er Copyright (c) 1985, 1996 Free Software Foundation, Inc. Dette er den norske brukerveiledningen til Emacs. Emacs-kommandoer inkluderer ofte bruk av CONTROL-tasten (noen ganger merket CTRL eller CTL) eller META-tasten. På noen tastaturer er META-tasten merket ALT eller EDIT eller noe annet (på Sun-tastaturer for eksempel, er det "ruter"-tasten til venstre for mellomromstasten). Hvis du ikke har noen META-tast kan du bruke ESC. Istedenfor å skrive META eller CONTROL vil vi her bruke følgende forkortelser: C- betyr at du skal holde nede CONTROL-tasten mens du trykker bokstaven . Dermed vil C-f bety: hold nede CONTROL-tasten og trykk f. M- betyr at du skal holde nede META-tasten mens du trykker . Hvis du ikke har noen META-tast kan du trykke , slippe tasten, og så trykke bokstaven . Viktig: for å avslutte Emacs trykker du C-x C-c. (To tegn.) Tegnene ">>" helt til venstre angir en veiledning slik at du kan prøve ut en kommando. For eksempel: <> >> Trykk C-v (View next screen) for å hoppe til neste skjermbilde. (kom igjen, hold ned control-tasten og trykk v). Fra nå av bør du gjøre dette hver gang du er ferdig med å lese et skjermbilde. Merk at det er en overlapping på to linjer når du skifter fra skjermbilde til skjermbilde. Dette er for at det skal bli en viss kontinuitet når du skal bevege deg gjennom filen. Det første du trenger å vite er hvordan du manøvrerer deg i fra plass til plass i teksten. Du har allerede lært hvordan du flytter deg ett skjermbilde framover, med C-v. For å flytte deg et skjermbilde bakover trykker du M-v (hold ned META-tasten og trykk v, eller trykk v hvis du ikke har META-, EDIT- eller ALT-tast). >> Prøv å trykke M-v og så C-v noen ganger. * OPPSUMMERING -------------- Følgende kommandoer er nyttige for å se hele skjermbilder: C-v Flytt ett skjermbilde framover. M-v Flytt ett skjermbilde bakover. C-l Rensker skjermen og plasser teksten der markøren står på midten av skjermbildet. (Det var control-(liten L), ikke control-1. Control-1 har en helt annen mening, som beskrevet nedenfor.) >> Finn markøren og se hva slags tekst som står der. Trykk C-l. Finn markøren igjen og se hva slags tekst som står der nå. * GRUNNLEGGENDE MARKØRBEVEGELSER -------------------------------- Det å flytte seg fra skjermbilde til skjermbilde er nyttig, men hvordan flytter man seg til en spesiell plass innenfor skjermbildet? Det er flere måter å gjøre dette på. Den vanligste måter er å bruke kommandoene C-p, C-b, C-f og C-n. Hver av disse kommandoene flytter markøren en rad eller kolonne i en bestemt retning på skjermen. Her vises disse fire kommandoene og i hvilken retning de flytter markøren: Forrige linje (previous), C-p : : Bakover, C-b .... Nåværende markørposisjon .... Framover, C-f : : Neste linje (next), C-n >> Flytt markøren til linjen midt i diagrammet ved å bruke C-n og C-p. Bruk så C-l for å sentrere diagrammet på skjermbildet. Dette er sikkert litt enklere å huske hvis du tenker på disse forkortelsene: P (engelsk previous) for forrige, N for neste, B for bakover og F for framover. Dette er de grunnleggende kommandoene for å flytte markøren, og du kommer sikkert til å bruke dem hele tiden, så det vil være en stor fordel om du lærer dem nå. >> Gjør noen C-n slik at du kommer ned til denne linjen. >> Flytt deg innover på linjen ved hjelp av noen C-f og så oppover med noen C-p. Legg merke til hva C-p gjør når markøren står midt i en linje. Tekstlinjer er atskilt med linjeskift-tegn. Den siste linjen i teksten avsluttes vanligvis med linjeskift, men Emacs krever ikke at du har det. >> Prøv en C-b i begynnelsen av en linje. Dette gjør at markøren flyttes til slutten av forrige linje. Dette er fordi den flytter markøren over linjeskiftet. C-f flytter også over linjeskift, akkurat som C-b. >> Utfør noen flere C-b slik at du får en følelse av hvor markøren er. Trykk så noen C-f til du kommer til slutten av linjen. Trykk da en C-f til slik at du flytter markøren til neste linje. Når du flytter markøren forbi toppen eller bunnen av skjermbildet vil teksten utenfor skjermen komme til syne. Dette kalles "scrolling" og gjør det mulig for Emacs å flytte markøren uten at den forsvinner ut av skjermbildet. >> Prøv å flytte markøren forbi bunnen av skjermbildet ved hjelp av C-n og se hva som skjer. Hvis det går for tregt å flytte markøren ett og ett tegn kan du flytte den ett og ett ord. M-f (Meta-f) flytter markøren ett ord framover, og M-b flytter den ett ord bakover. >> Utfør noen M-f og M-b. Hvis markøren står midt i et ord vil M-f flytte markøren til slutten av ordet. Hvis du står midt mellom to ord vil M-f flytte markøren til slutten av det kommende ordet. M-b fungerer på samme måte, bare i motsatt retning. >> Trykk M-f og M-b noen ganger og skift markørposisjon med noen C-f og C-b slik at du ser hvordan M-f og M-b oppfører seg ved forskjellig plassering av markøren både i og mellom ord. Legg merke til parallellen mellom C-f og C-b på en side, og M-f og M-b på den andre. Ofte er Meta-kommandoer brukt til operasjoner relatert til enheter definert av språket (ord, setninger, avsnitt), mens Control-kommandoer blir brukt på grunnleggende enheter som er uavhengig av hva man redigerer (bokstaver, linjer, etc.). Denne parallellen finnes også mellom linjer og setninger: C-a og C-e flytter markøren til begynnelsen av linjen, eller til slutten av linjen, mens M-a og M-e flytter den til begynnelsen eller slutten av setningen. >> Prøv noen C-a, og så noen C-e Prøv også noen M-a, og så noen M-e Se hvordan gjentatte C-a etter hverandre ikke gjør noe, mens flere M-a fortsetter å flytte markøren til neste setning. Selv om dette ikke virker selvfølgelig er det ganske naturlig. Her er en kort oppsummering av de enkleste markørforflyttnings- kommandoene, inkludert ord- og setningsforflyttnings-kommandoene: C-f Flytte markøren en plass framover C-b Flytte markøren en plass bakover M-f Flytte markøren ett ord framover M-b Flytte markøren ett ord bakover C-n Flytte markøren til neste linje C-p Flytte markøren til forrige linje C-a Flytte markøren til begynnelsen av linjen C-e Flytte markøren til slutten av linjen M-a Flytte markøren til begynnelsen av setningen M-e Flytte markøren til slutten av sentingen >> Prøv ut alle disse kommandoene noen ganger, bare for trening. Dette er de mest brukte kommandoene. To andre viktige markørbevegelses-kommandoer er M-< (Meta Mindre-enn), som flytter markøren til begynnelsen av teksten, og M-> (Meta større-enn), som flytter den til slutten av teksten. På noen tastaturer er ">" plassert over komma, så man må bruke shift for å få den fram. På disse tastaturene må man også bruke shift for å taste M-<. Uten shift-tasten vil det bli M-komma. >> Prøv M-< nå for å flytte markøren til begynnelsen av veiledningen. Bruk så C-v for å flytte markøren tilbake hit igjen. >> Prøv også M-> for å flytte markøren til slutten av veiledningen. Bruk så M-v for å flytte markøren tilbake hit igjen. Du kan også flytte markøren ved hjelp av piltastene, hvis terminalen har piltaster. Vi anbefaler at du lærer deg C-b, C-f, C-n og C-p av tre grunner. Først fordi de vil fungere på alle slags terminaler. Nummer to fordi når du først får litt trening i bruk av Emacs vil du finne ut at det går mye kjappere å bruke control-kombinasjoner enn piltastene (fordi du slipper å flytte hendene bort fra touch-plasseringen). Den tredje grunnen er at når du først har lært deg til å bruke control-tastene blir det lettere å lære seg de mer avanserte control-funksjonene. De fleste av kommandoene i Emacs tar også et numerisk argument. For de fleste av kommandoene vil dette si repetert utførelse. Måten du gir en kommando et slikt argument er at du trykker C-u og deretter tallet, før du taster kommandoen. Hvis du har en META- (eller EDIT- eller ALT-) tast så finnes det et annet alternativ for å gi numeriske argumenter: Trykk ned tallet mens du holder META-tasten nede. Vi anbefaler at du bruker C-u fordi det fungerer på alle slags terminaler. For eksempel: C-u 8 C-f flytter markøren åtte plasser framover. >> Prøv kommandoene C-n eller C-p med numerisk argument slik at du kommer nærmest mulig denne linjen med bare en kommando. De fleste kommandoene bruker det numeriske argumentet som en repetert utførelse. Men det finnes kommandoer som bruker den annerledes. C-v og M-v er blant disse unntakene. Hvis man gir et argument til en av disse kommandoene vil skjermbildet flytte seg opp eller ned så mange linjer som argumentet, isteden for så mange skjermbilder. For eksempel vil C-u 4 C-v flytte skjermbildet 4 linjer oppover. >> Prøv å taste C-u 8 C-v nå. Dette burde flyttet skjermbildet 8 linjer oppover. Hvis du ønsker å flytte det tilbake igjen er det bare å gi samme argument til M-v. Hvis du bruker Emacs under X er det sannsynligvis et firkantet område på høyresiden av Emacs-vinduene, også kalt rullefelt. Dette kan du også bruker for å forflytte deg innenfor teksten. >> Prøv å trykk på den midterste musknappen i det uthevete området på rullefeltet. Dette burde flyttet skjermbildet til en plass i teksten avhengig av hvor i rullefeltet du trykket. >> Flytt muspekeren til en plass i rullefeltet ca. 1/5 fra toppen og trykk på venstre musknapp noen ganger. * MARKØRBEVEGELSE PÅ EN X-TERMINAL ---------------------------------- Hvis du sitter på en X-terminal vil du sansynligvis finne det mye enklere å bruke piltastene for å bevege markøren. Venstre-, høyre-, opp- og ned-pilene beveger markøren i ønsket retning. De fungerer på samme måte som C-b, C-f, C-p og C-n, men er enklere å taste og huske. Du kan også bruke C-venstre og C-høyre for å bevege den innenfor ord, og C-opp og C-ned for å bevege den innenfor blokker (For eksempel avsnitt hvis du redigerer tekst). Hvis du har tastene merket HOME (eller BEGIN) og END kan du bruke disse for å gå til henholdsvis begynnelsen av linjen og slutten av linjen, og C-HOME og C-END vil gå til henholdsvis begynnelsen av filen og slutten av filen. Hvis tastaturet har PgUp- og PgDn-taster kan du bruker dem for å gå opp og ned et skjermbilde av gangen, på samme måte som M-v og C-v. Alle disse kan ta numeriske argumenter, som beskrevet ovenfor. Du kan også benytte en snarvei for å skrive inn disse argumentene: hold ned CONTROL eller META tasten og skriv inn nummeret. For eksempel for å gå 12 ord til høyre taster du C-1 C-2 C-høyre. Legg merke til at dette blir svært enkelt å taste fordi du ikke slipper CONTROL-tasten mellom tastetrykkene. * HVIS EMACS HENGER ------------------- Hvis Emacs slutter å reagere på kommandoer kan du trygt stoppe den ved å trykke C-g. Du kan også bruke C-g for å stoppe en kommando som tar for lang tid å utføre. Det er også mulig å bruke C-g for å avbryte et numerisk argument eller begynnelsen på en kommando du ikke ønsker å utføre. >> Tast C-u 100 for å lage et numerisk argument på 100 og trykk C-g. Trykk nå C-f. Markøren skal nå flytte seg bare ett steg, fordi du avbrøt argumentet med C-g. Hvis du ved en feiltakelse trykket blir du kvitt denne ved å trykke C-g. * UTILGJENGELIGE KOMMANDOER --------------------------- Enkelte av Emacs-kommandoene er "utilgjengelige" slik at nybegynnere ikke kan bruke dem uten at de ønsker det. Hvis du prøver en av disse utilgjengelige kommandoene vil Emacs komme med en melding som forteller hvilken kommando det er, og vil spørre om du virkelig vil fortsette å utføre denne kommandoen. Hvis du virkelig ønsker å prøve denne kommandoen trykker du mellomromstast som svar på spørsmålet. Normalt, hvis du ikke ønsker å kjøre denne kommandoen, svarer du "n" på spørsmålet. >> Tast `C-x n p' (som er en utilgjengelig kommando), tast n som svar på spørsmålet. * VINDUER --------- Emacs kan ha flere vinduer, og hver av dem kan vise sin egen tekst. Legg merke til at "vinduer" i Emacs ikke refererer til separate overlappende vinduer i vindus-systemet, men til separate buffer innenfor et enkelt X-vindu. (Emacs kan også ha flere X-vinduer, eller "rammer" i Emacs-terminologi. Dette blir beskrevet senere.) Akkurat nå er det best at vi ikke går inn på teknikker for å bruke flere vinduer, men du trenger å vite hvordan du blir kvitt ekstra vinduer som kan dukke opp for å vise hjelp, eller utskrift fra enkelte kommandoer. Det er enkelt: C-x 1 Ett vindu (dvs. gjem alle andre vinduer). Det er da Control-x etterfulgt av tallet 1. C-x 1 utvider vinduet der markøren står, slik at det fyller hele skjermbildet og gjemmer alle andre vinduer. >> Flytt markøren til denne linjen og trykk C-u 0 C-l. (Husk at C-l renser skjermen og midtstiller linjen der markøren står. Hvis du gir et numerisk argument til denne kommandoen betyr det "rensk skjermen og legg linjen der markøren står på linjen angitt av argumentet" Derfor betyr C-u 0 C-l at skjermen skal renskes og linjen der markøren står plasseres øverst.) >> Tast Control-x 2. Se hvordan vinduet krympes og et nytt dukker opp med samme innhold som dette. >> Tast C-x 1 for at vinduet skal forsvinne. * INNSETTING OG SLETTING ------------------------ Hvis du ønsker å sette inn tekst er det bare å skrive teksten. Tegn som du kan se, slik som A, 7, *, ol. blir tolket som tekst og blir satt rett inn. Tast (enter-tasten) for å sette inn et linjeskift. Du kan slette det siste tastete tegnet ved å trykke . er en tast på tastaturet, og kan også være merket "Del". I noen tilfeller fungerer også "Backspace" som , men ikke alltid! Mere generelt sletter tegnet rett foran der markøren er plassert. >> Gjør dette nå -- skriv inn noen tegn og slett dem ved å bruke . Ikke vær redd for å skrive i denne filen, du vil ikke kunne forandre på den originale veiledningen. Dette er bare en lokal kopi. Når en linje blir for lang til å passe inn på en skjermbredde så fortsetter den på linjen under. En backslash ("\") i enden av høyre marg indikerer at linjen fortsetter. Om du kjører Emacs under X vil du se en liten pil som peker ned til neste linje. >> Skriv inn litt tekst slik at du kommer til enden av linjen, og fortsett å skrive litt til. Du vil da se hvordan fortsettelseslinjen blir. >> Bruk for å slette teksten inntil linjen passer på en skjermbredde igjen. Fortsettelseslinjen vil da forsvinne. Du kan slette linjeskift akkurat som andre tegn. Ved å slette linjeskiftet mellom to linjer blir disse smeltet sammen til en. Hvis resultatet av denne sammensmeltingen blir for stor til å passe på en skjermbredde så vil den bli vist med en fortsettelseslinje. >> Flytt markøren til begynnelsen av en linje og trykk . Dette vil spleise sammen linjen med linjen over. >> Trykk for å sette inn linjeskiftet du slettet. Husk at de fleste Emacs-kommandoene kan ta numeriske argumenter. Dette gjelder også tekst-tegn. Ved å repetere et tekst-tegn vil det komme flere ganger. >> Prøv det nå: tast C-u 8 * for å sette inn ********. Du har nå lært de mest grunnleggende måtene å skrive noe inn i Emacs, og å rette feil. Du kan slette ord eller linjer også. Her er en oversikt over kommandoer for sletting: sletter tegnet som står rett foran markøren C-d sletter tegnet som står rett under markøren M- sletter ordet rett foran markøren M-d sletter ordet rett etter markøren C-k sletter fra markøren til slutten av linjen M-k sletter til slutten av setningen Legg merke til at og C-d kontra M- og M-d fortsetter parallellen som ble startet av C-f og M-f (vel, er ikke akkurat noe kontroll-tegn, men la oss ikke bry oss om det). C-k og M-k fungerer på samme måte som C-e og M-e (nesten). Når du sletter flere enn ett tegn om gangen vil Emacs lagre den slettete teksten slik at du han hente den tilbake igjen. Denne teksten blir kalt "killed text". Å bringe tilbake "killed text" blir kalt "yanking". Du kan enten hente tilbake "killed text" på samme plassen som den ble slettet, eller du kan sette den inn en annen plass i teksten. Du kan også hente den tilbake flere ganger etter hverandre slik at du får flere like forekomster av den. Kommandoen for å hente tilbake teksten er C-y. Legg merke til at forskjellen mellom "killed text" og "deleted text" er at "killed text" kan bli hentet tilbake, mens "deleted text" ikke kan det. Generelt kan man si at kommandoer som sletter flere enn ett tegn lagrer unna teksten slik at den kan bli hentet tilbake, og kommandoer som bare sletter ett tegn, eller tomme linjer og mellomrom ikke lagrer det. >> Flytt markøren til begynnelsen av en linje som ikke er tom. Trykk så C-k for å "kille" teksten på denne linjen. >> Trykk C-k en gang til. Du vil nå se at den sletter den tomme linjen som ble stående igjen etter teksten. Legg merke til at en enkel C-k bare sletter teksten på linjen, og at enda en C-k sletter selve linjen og flytter teksten på linjen under en linje opp. C-k takler numeriske argumenter litt spesielt. Den sletter så mange linjer OG innholdet i dem. Dette er ikke bare repetisjon av kommandoen. C-u 2 C-k sletter to linjer samt de tomme linjene, mens C-k to ganger ikke vil gjøre det. Trykk C-y for å hente tilbake teksten som sist ble "killet" der markøren står. >> Prøv dette. Trykk C-k etpar ganger. Og hent dem så tilbake igjen: >> Trykk C-y. Flytt markøren noen linjer ned og trykk C-y igjen. Dette er måten å kopiere tekst på. Men hva gjør du hvis du har en tekst du ønsker å hente tilbake, og så "killer" noe nytt? C-y vil hente tilbake den siste teksten som ble "killet". Men den forrige teksten er ikke fortapt. Du kan få den tilbake ved å bruke kommandoen M-y. Etter at du har brukt C-y for å hente tilbake den siste "killed text" vil M-y erstatte denne teksten med teksten fra den forrige "killed text". Når du har funnet fram til ønsket tekst trenger du ikke gjøre noe mere for å beholde den. Hvis du tastet M-y mange nok ganger vil du komme tilbake til starten igjen (teksten som sist ble "killet") >> "Kill" en linje, flytt markøren til en ny linje og "kill" denne også. Bruk så C-y for å hente tilbake den siste linjen. Trykk M-y for å bytte den med den forrige "killete" linjen. Trykk flere M-y og se hva du får. Fortsett med dette til du får tilbake den første linjen igjen, og så noen ganger til. Hvis du ønsker kan du prøve med positive og negative argumenter til M-y. * ANGRE ------- Hvis du gjør en forandring i teksten og finner ut at du angrer på det du har gjort kan du oppheve dette med kommandoen C-x u (undo). Normalt vil C-x u oppheve forandringene gjort av den siste utførte kommandoen. Hvis du repeterer C-x u flere ganger på rad vil hver repetisjon oppheve enda en utført kommando. Men det er to unntak her. Kommandoer som ikke forandrer i teksten teller ikke (dette inkluderer markørbevegelser og flytte-kommandoer), og inntastede enkeltbokstaver blir vanligvis gruppert i grupper på opp til 20 tegn. (Dette er for å redusere antall C-x u'er som trengs for å angre inntastet tekst.) >> "Kill" denne linjen med C-k. C-x u vil få den tilbake igjen. C-_ er en alternativ angre-kommando. Den fungerer på samme måte som C-x u, men er enklere å taste flere ganger på rad. Ulempen med C-_ er at den er vanskelig å finne fram til på enkelte tastaturer. Det er derfor vi i tillegg har C-x u. På enkelte terminaler kan du få fram C-_ ved å trykke / mens CTRL er holdt nede. Et numerisk argument til C-_ eller C-x u vil repetere antall angringer. * FILER ------- For at teksten du har forandret på skal lagres permanent må du legge den i en fil. Hvis ikke vil den forsvinne når du avslutter Emacs. Du legger teksten i en fil ved først å "finne" denne filen. (Dette blir også kalt å "besøke" filen.) Det å finne en fil betyr at du henter innholdet av filen inn i Emacs. På mange måter er det som om du forandrer på selve filen, men forandringene du gjør på filen mens du benytter Emacs vil ikke bli permanente får du lagrer filen. Dette er fordi du skal slippe å legge igjen halv-forandrete filer hvis du ikke ønsker det. Og selv når du lagrer vil Emacs legge igjen en backup-fil i tilfelle du senere bestemmer deg for at du ikke ønsker disse forandringene. Hvis du ser nesten nederst i skjermbildet så vil du se en linje som begynner og slutter med minustegn, og som inneholder teksten "XEmacs: TUTORIAL.no". Denne delen av skjermbildet vil alltid vise navnet på filen du er "inne i". Akkurat nå er du inne i en fil som heter "TUTORIAL.no" og som er en personlig kopi av Emacs- veiledningen. Samme hvilken fil du er inne i så vil filnavnet stå akkurat på denne plassen. Kommandoene for å finne filer og lagre filer er litt ulike de andre kommandoene du har lært fordi de består av to tegn. Begge starter med tegnet Control-x. Det er faktisk mange kommandoer som starter med Control-x, og mange av dem har med filer, skjermbilder og slike ting å gjøre. Disse kommandoene er to, tre eller fire tegn lange. En annen ting med kommandoen for å finne filer er at du må fortelle hvilket filnavn du ønsker. Vi sier at kommandoen "leser et argument fra terminalen" (i dette tilfellet vil argumentet være navnet på filen). Etter at du har trykket kommandoen C-x C-f Finn en fil vil Emacs spørre etter et filnavn. Filnavnet du skriver vil komme fram på den nederste linjen i skjermbildet. Denne linjen blir kalt minibuffer når det blir brukt slik. Du kan bruke vanlige Emacs-redigeringskommandoer for å forandre på filnavnet. Mens du holder på å skrive inn filnavnet (eller noe annet i minibuffret) kan du avbryte med kommandoen C-g. >> Tast C-x C-f og så C-g. Dette avbryter minibuffret og avbryter også C-x C-f kommandoen som brukte minibuffret. Når du er ferdig med å skrive filnavnet trykker du for å fullføre kommandoen. Da vil C-x C-f kommandoen begynne å lete fram filen. Minibuffret forsvinner når C-x C-f kommandoen er ferdig. Om en liten stund vil filen komme inn i skjermbildet og du kan begynne å redigere innholdet. Når du ønsker å lagre filen kan du bruke denne kommandoen C-x C-s Lagre fil Denne kopierer teksten i skjermbildet over til filen. Første gang dette gjøres vil Emacs døpe om det originale filnavnet til et nytt navn slik at den ikke går tapt. Det nye filnavnet blir laget ved at det blir lagt til en "~" i slutten av det originale filnavnet. Når lagringen er utført vil Emacs skrive ut navnet på filen som ble lagret. Du bør lagre ofte slik at du ikke mister så mye om det skulle oppstå en system-krasj. >> Trykk C-x C-s for å lagre en kopi av denne veiledningen. Dette skal føre til at "Wrote ...TUTORIAL.no" blir skrevet ut nederst i skjermbildet. NB: På noen systemer vil C-x C-s føre til at skjermen "fryses" og du vil ikke være istand til å utføre noen flere kommandoer. Dette indikerer at en operativsystem-egenskap kalt "flytkontroll" har fanget opp C-s'en og ikke sendt den videre til Emacs. For å fortsette må du trykke C-q. Se da i avsnittet "Spontaneous Entry to Incremental Search" i Emacs-manualen for råd om hvordan dette kan avverges. Du kan finne en eksisterende fil, enten for å forandre den eller for å se på den. Du kan også finne en fil som ikke eksisterer. Dette er måten du lager nye filer med Emacs: finn filen, som er tom til å begynne med, og start å skrive teksten som skal inn i denne filen. Først når du lagrer filen vil Emacs virkelig opprette filen med den teksten du har skrevet. Fra nå av kan du betrakte deg selv som om du skriver i en fil som allerede eksisterer. * BUFFER -------- Hvis du finner en ny fil med C-x C-f vil den første filen fortsatt være åpen i Emacs. Du kan bytte tilbake til den ved å finne den på nytt med C-x C-f. På denne måten kan du ha et stort antall åpne filer i Emacs. >> Lag en fil med navnet "foo" ved å trykke C-x C-f foo . Sett inn litt tekst, forandre litt på den, og lagre "foo" ved å bruke C-x C-s. Skriv tilslutt C-x C-f TUTORIAL.no for å komme tilbake til denne veiledningen. Emacs lagrer teksten i hver av filene i et objekt kalt "buffer". Når du finner en ny fil vil det opprettes et nytt buffer i Emacs. For å se en liste over eksisterende buffer i Emacs kan du trykke C-x C-b Utlisting av buffrene. >> Prøv C-x C-b nå. Se hvordan hvert av buffrene har hvert sitt navn, og at de også kan ha et filnavn på den filen der innholdet kommer fra. Noen buffre er ikke knyttet til noen fil, for eksempel bufferet "Buffer List". Det er det buffret som inneholder listen over buffre som ble generert med C-x C-b. All teksten du ser i et Emacs-vindu tilhører et buffer. >> Tast C-x 1 for å bli kvitt buffer-listen. Hvis du gjør forandringer i en av filene og åpner en ny fil så vil ikke den første filen bli lagret, men forandringene vil fortsatt være i buffret. Oppretting eller redigering av en ny fil vil ikke påvirke den første filens buffer. Dette er nyttig, men betyr også at du trenger en passende måte å lagre den første filens buffer. Det vil bli alt for omstendig å skifte tilbake til det forrige buffret med C-x C-f for så å lagre filen med C-x C-s. Derfor har vi kommandoen C-x s Lagre noen buffer C-x s spør for hvert enkelt buffer som har blitt forandret siden forrige lagring om du ønsker å lagre dette. >> Sett inn en linje med tekst og lagre med C-x s Du skal nå få et spørsmål om du ønsker å lagre buffret TUTORIAL.no. Svar ja på spørsmålet ved å taste "y" (yes). * BRUK AV MENYEN ---------------- Hvis du bruker en X-terminal vil du sikkert legge merke til menyen på toppen av skjermbildet. Via denne menyen får du tilgang til de mest brukte Emacs-kommandoene, slik som "find file". Dette er svært enkelt i begynnelsen, når du ikke husker alle tastetrykkene som skal til for hver av kommandoene. Men når du begynner å kjenne Emacs vil det være lettere å begynne å bruke tastekombinasjonene. Disse står rett ved siden av menynavnet i menyen. Legg merke til at det er mange menypunkter som ikke har en eksakt tastekombinasjon. For eksempel "Buffers"-menyen, som lister ut alle tilgjengelige buffre sortert i "sist brukt"-rekkefølge. Du kan enkelt skifte til et buffer ved å finne navnet på det i "Buffers"-menyen og velge det. * BRUK AV MUSA --------------- Når du kjører Emacs under X er det muligheter for å bruke musen. Du kan plassere markøren ved å trykke venstre mustast der du ønsker at den skal være, og du kan markere tekst ved å holde nede venstre mustast mens du beveger markøren over teksten du ønsker å markere. (Eller alternativt: klikk venstre mustast i den ene enden av teksten du ønsker å markere, flytt muspekeren til den andre enden og bruk Shift-klikk for å markere teksten.) For å "kille" den markerte teksten kan du bruke kommandoen C-w eller velge Cut fra "Edit"-menyen. Legg merke til at disse *ikke* er likeverdige. C-w lagrer bare teksten internt i Emacs (ala C-k, som beskrevet ovenfor), mens Cut legger også teksten i X sitt "clipboard", der den også blir tilgjengelig for andre applikasjoner. For å hente tekst fra X-clipboard'et kan du bruke "Paste" fra "Edit"- menyen. Den midterste musknappen blir vanligvis brukt for å velge "linker" som er tilgjengelig i skjermbildet. Hvis du for eksempel går inn i Info (on-line dokumentasjonen til Emacs) ved å bruke C-h i, eller "Help"- menyen, kan du følge linkene ved å trykke den midterste musknappen. Og hvis du skriver inn et filnavn (For eksempel "Find File"), og trykker TAB for å få fram en fillisting, så kan du komplettere filnavnet ved å trykke den midterste musknappen på filnavnet. Ved å trykke høyre musknapp vil du få fram en popup-meny. Innholdet i denne menyen er avhengig av hvilken modus du er inne i, og vanligvis inneholder den et par av de mest brukte kommandoene slik at de blir lett tilgjengelige. >> Trykk høyre mustast nå. Du er nødt til å holde knappen nede for at menyen skal vises. * UTVIDING AV KOMMANDOSETTET ---------------------------- Det finnes mange flere Emacs-kommandoer enn det som er mulig å tilegne control- eller meta-taster. For å komme rundt dette har Emacs en "X"- (eXtend) kommando. Denne kommer i to utgaver: C-x Tegn-utvidelse. Etterfulgt av et tegn. M-x Navngitt kommandoutvidelse. Etterfulgt av et kommandonavn. Dette er kommandoer som er generelt viktige, men som blir brukt mindre enn de kommandoene du allerede har lært. Du har allerede sett to av dem, C-x C-f for Find, og C-x C-x for Save. Et annet eksempel er kommandoen for å avslutte Emacs, som har kommandoen C-x C-c. (Ikke vær redd for å miste eventuelle forandringer du har gjort, C-x C-c vil sørge for at du får lagret de forandringene du ønsker før Emacs avslutter.) C-z er kommandoen for å avslutte Emacs *midlertidig* slik at du kan vende tilbake til samme Emacs senere. På systemer som tillater det vil C-z suspendere Emacs, dvs. returnere tilbake til skallet uten å drepe Emacs-prosessen. I de fleste skallene kan du få tilbake Emacs med kommandoen `fg', eller `%xemacs'. På systemer som ikke har implementert denne egenskapen vil C-z opprette et skall som kjører under Emacs, og som gir deg sjansen til å kjøre andre programmer og så returnere til Emacs etterpå. Den gir ingen eksakt avslutning av Emacs. I slike tilfeller vil vanligvis kommandoen `exit' returnere fra skallet og tilbake til Emacs. C-x C-c benyttes når du skal avslutte Emacs. Det er også fornuftig å avslutte Emacs hvis den har blitt startet opp av et mail-program, eller andre applikasjoner, siden det ikke er sikkert at de greier å håndtere suspendering av Emacs. Under normale omstendigheter, hvis du ikke har tenkt å logge ut, er det bedre å suspendere Emacs med C-z isteden for å avslutte. Det finnes mange C-x kommandoer. Her er en liste over dem du har lært: C-x C-f Finne fil. C-x C-s Lagre fil. C-x C-b Utlisting av buffrene. C-x C-c Avslutte Emacs. C-x u Angre. Navngitte kommandoer er kommandoer som blir brukt mye sjeldnere, eller kommandoer som bare brukes i bestemte modus. Et eksempel på en slik kommando er "replace-string", som globalt erstatter en tekststreng med en annen. Når du taster M-x vil Emacs komme med en prompt nederst i skjermbildet der du skal skrive inn kommandoen du ønsker å kjøre, i dette tilfellet "replace-string". Det er bare å skrive "repl s", Emacs vil da fullføre kommandonavnet. Avslutt kommandoen med . Kommandoen "replace-string" krever to argumenter, tekststrengen som skal erstattes og tekststrengen som denne skal erstattes med. Du må avslutte begge argumentene med . >> Flytt markøren til den blanke linjen to linjer under denne. Trykk M-x repl sforandretendret. Legg merke til hvordan denne linjen har blitt forandret, du har erstattet ordet f-o-r-a-n-d-r-e-t med "endret" alle plassene der ordet "forandret" forekommer, etter markørpossisjonen. * AUTOMATISK LAGRING -------------------- Når du har gjort forandringer i en fil, men ikke lagret den, vil det gå tapt hvis maskinen krasjer. Som en beskyttelse mot dette vil Emacs periodisk lagre en "autosave"-fil for hver av filene du redigerer. Denne filen har en # i begynnelsen og slutten av filnavnet. Hvis du for eksempel har en fil med navnet "hallo.c" så vil navnet på "autosave"-filen bli "#hallo.c#". Når du lagrer filen på vanlig måte vil Emacs slette unna "autosave"-filen. Hvis maskinen krasjer kan du gjenvinne "autosave"-filene ved å finne filen på vanlig måte (filen du redigerte på, ikke "auto-save"- filen) og trykke M-x recover file. Når Emacs vil ha bekreftelse svarer du yes for å gjenvinne "autosave"-filen. * ECHO-OMRÅDE ------------- Hvis Emacs ser at du skriver kommandoene langsomt så vil den vise dem på den nederste linjen i skjermbildet i et område som blir kalt "echo area". Dette området inneholder den nederste linjen i skjermbildet. * MODUSLINJEN ------------- Linjen like over echoområdet blir kalt "moduslinje". Denne ser omtrent slik ut: --**-XEmacs: TUTORIAL.no (Fundamental)--L773--68%-------- Denne linjen inneholder nyttig informasjon over statusen til Emacs og teksten du redigerer på. Du vet allerede hva filnavnet betyr, det er den filen du har funnet. -NN%-- forteller den aktuelle posisjonen i teksten, dvs. NN prosent av teksten befinner seg over toppen av skjermbildet. Hvis toppen av filen er i skjermbildet vil det stå --Top-- isteden for --00%--, og hvis slutten av filen er i skjermbildet vil det stå --Bot--. Hvis du ser på en fil der hele teksten passer inn på en side vil det stå --All--. Stjernene i begynnelsen av linjen forteller at det er blitt foretatt endringer i filen siden den sist ble lagret. Når du nettopp har åpnet en fil vil det ikke stå noe her, bare minustegn. Den delen av moduslinjen som står inne i parenteser forteller hvilken redigeringsmodus du bruker. Standardmodusen er "Fundamental", som er den du bruker nå. Det er et eksempel på en "hovedmodus". Emacs har mange forskjellige hovedmoduser. Noen av dem er tiltenkt redigering av forskjellige programmeringsspråk og/eller typer tekst, for eksempel Lisp mode, Text mode, ol. Det kan bare være en hovedmodus om gangen, og modusnavnet vil alltid stå der det står Fundamental nå. Hver hovedmodus gjør at endel kommandoer oppfører seg annerledes. Det finnes for eksempel kommandoer for å sette inn kommentarer i programkode, og siden hvert programmeringsspråk har forskjellige måter å angi kommentarer på må de ulike hovedmodusene sette inn disse kommentarene på forskjellige måter. Hver hovedmodus har en kommando som brukes for å skifte til denne modusen på. For eksempel M-x fundamental-mode er kommandoen for å skifte til Fundamental mode. Hvis du skal redigere engelsk (eller norsk) tekst, slik som denne filen, bør du bruke "Text Mode". >> Tast M-x text-mode. Ingen av kommandoene du har lært hittil vil forandre Emacs i noe særlig grad. Men du kan legge merke til at M-f og M-b nå behandler apostrofer som en del av ordet. Tidligere, i Fundamental mode, behandlet M-f og M-b apostrofene som ordskillere. Hver hovedmodus gjør vanligvis små forandringer slik som denne, og de fleste kommandoene gjør det samme i hver hovedmodus, de fungerer bare litt annerledes. For å få fram dokumentasjonen på den hovedmodusen du er inne i nå kan du trykke C-h m. >> Bruk C-u C-v slik at denne linjen kommer nær toppen av skjermbildet. >> Trykk C-h m, og se hvordan Text mode er forskjellig fra Fundamental mode. >> Trykk q for å fjerne dokumentasjonen fra skjermbildet. Hovedmodus blir kalt hovedmodus fordi det også finnes bimodus. Bimodus er ikke alternativer til hovedmodus, men de modifiserer dem. Hver bimodus kan bli slått av og på uavhenging av andre bimoduser, og uavhengig av hovedmodus. Derfor kan du bruke ingen bimodus, en bimodus, eller en kombinasjon av flere bimoduser. En bimodus som er nyttig, spesielt ved redigering av tekst, er "Auto Fill mode". Når denne er slått på vil Emacs dele linjene automatisk hvis linjen blir for lang for å passe inn på ett skjermbilde. Du kan slå på Auto Fill mode ved å utføre en M-x auto-fill-mode. Når denne modusen er på kan du slå den av igjen ved å utføre en ny M-x auto-fill-mode. Denne kommandoen bytter mellom av og på, også kalt "toggle the mode". >> Trykk M-x auto-fill-mode nå. Skriv så inn en linje med "aoeu " inntil linjen deler seg. Du er nødt til å putte inn ordskillere, fordi Auto Fill bare brekker linjen ved ordskillere. Margen er vanligvis satt til 70 tegn, men du kan endre dette ved å bruke kommandoen C-x f. Antall tegn blir gitt til kommandoen gjennom et numerisk argument. >> Tast C-x f med et argument på 20. (C-u 20 C-x f). Skriv så inn noe tekst og legg merke til at Emacs bryter linjer som er lengre enn 20 tegn. Sett margen tilbake til 70 tegn igjen, ved å bruke C-x f en gang til. Hvis du gjør forandringer midt i en linje så vil ikke Auto Fill mode kunne reformatere linjene for deg. For å gjøre dette kan du taste M-q (Meta-q) med markøren inne i det avsnittet du ønsker å reformatere. >> Flytt markøren inn i forrige avsnitt og trykk M-q. * SØKING -------- Emacs kan utføre søk etter tekststrenger (grupper med sammenhengende bokstaver eller ord) enten framover eller bakover i teksten. Når du søker etter tekst vil markøren flytte seg til den neste plassen der tekststrengen opptrer. Søkemetoden til Emacs er litt forskjellig fra andre søkemetoder implementert i de fleste andre redigeringsprogrammer på den måten at den er inkrementell. Dette betyr at søket foregår mens du taster inn tekststrengen du skal søke etter. Kommandoen for å innlede et søk er C-s for å søke framover, og C-r for å søke bakover. MEN VENT! Ikke prøv dem enda. Når du taster C-s vil du legge merke til at teksten "I-search" dukker opp i echoområdet. Dette forteller deg at Emacs er inne i det som kalles inkrementellt søk, og venter på at du skal skrive inn det du leter etter. avslutter søket. >> Trykk nå C-s for å starte et søk. Skriv så, en bokstav om gangen, ordet 'markør', og legg inn en pause etter hver gang du skriver en bokstav slik at du får med deg hva som skjer med markøren. Nå har du søkt etter ordet "markør" en gang. >> Tast C-s en gang til for å søke etter neste forekomst av ordet "markør". >> Trykk nå fire ganger og se hvordan markøren beveger seg >> Trykk for å avslutte søket. La du merke til hva som skjedde? I inkrementell søk prøver Emacs å gå til den forekomsten av teksten som du har skrevet så langt, og uthever det slik at du ser hvor den er. For å gå til neste forekomst av ordet 'markør' er det bare å taste C-s en gang til. Hvis det ikke er flere forekomster vil Emacs komme med et pip og en melding om at søket midlertidig har feilet. C-g vil også avbryte søket. NB: På noen systemer vil C-s føre til at skjermen "fryses" og du vil ikke være istand til å utføre noen flere kommandoer. Dette indikerer at en operativsystem-egenskap kalt "flytkontroll" har fanget opp C-s'en og ikke sendt den videre til Emacs. For å fortsette må trykke C-q. Se da i avsnittet "Spontaneous Entry to Incremental Search" i Emacs-manualen for råd om hvordan dette kan avverges. Hvis du er inne i et inkrementellt søk og trykker vil du legge merke til at den siste bokstaven i søkestrengen blir slettet og søket hopper tilbake til den forrige forekomsten fra søket. Hvis du for eksempel taster "m" for å søke etter den første forekomsten av "m", og så trykker "a" så vil markøren bevege seg til første forekomst av "ma". Trykk nå . Dette fjerner "a" fra søkestrengen, og markøren beveger seg tilbake til den første forekomsten av "m". Hvis du er midt i et søk og trykker en control- eller meta-kombinasjon (med et par unntak: tegn som blir brukt under søkingen, slik som C-s og C-r), vil søket avbrytes. C-s starter et søk som leter etter enhver forekomst av søkestrengen ETTER markørposisjonen. Hvis du skal søke etter en streng tidligere i teksten må du bruke C-r. Alt vi har fortalt om C-s fungerer også for C-r, bortsett fra at retningen på søket er i motsatt retning. * FLERE VINDUER --------------- En av egenskapene til Emacs er at du kan vise flere en et buffer på skjermen samtidig. >> Flytt markøren til denne linjen og trykk C-u 0 C-l >> Tast nå C-x 2, som vil føre til at skjermen deles i to vinduer. Begge vinduene viser denne veiledningen. Markøren står i det øverste vinduet. >> Tast C-M-v for å "scrolle" det nederste vinduet. (Hvis du ikke har Meta-tasten trykker du ESC C-v.) >> Tast C-x o ("o" for "other") for å flytte markøren til det nederste vinduet. >> Bruk C-v og M-v i det nederste vinduet for å flytte deg opp og ned i teksten. Fortsett å les denne anvisningen i det øverste vinduet. >> Tast C-x o igjen for å flytte markøren tilbake til det øverste vinduet. Markøren i det øverste vinduet står på samme plass som det gjorde før du forlot det. Du kan fortsette å bruke C-x o for å bytte mellom de to vinduene. Hvert av vinduene har sin egen plassering av markøren, men det er bare ett av vinduene som viser den. Alle redigeringskommandoer fungerer på det vinduet markøren er synlig i. Vi kaller dette vinduet det valgte vinduet, eller "selected window". Kommandoen C-M-v er nyttig når du redigerer tekst i et vindu og bruker det andre vinduet for referanser. Da kan du kan ha markøren i det samme vinduet hele tiden og du kan bruke C-M-v for å flytte deg i det andre vinduet. C-M-v er et eksempel på en CONTROL-META-kombinasjon. Hvis du har META-tast holder du både CTRL og META nedtrykt mens du trykker v. Det er ikke nøye hvilken av tastene CTRL og META som trykkes først, fordi begge fungerer slik at de "modifiserer" de andre tastene du trykker. Hvis du ikke har META-tasten, og bruker ESC isteden, er rekkefølgen viktig. Du må trykke ESC etterfulgt av CTRL-v, CTRL-ESC v vil ikke fungere. Dette er fordi ESC er et tegn for seg selv, og fungerer ikke som "modifikator". >> Tast C-x 1 (i det øverste vinduet) for å bli kvitt det nederste vinduet. (Hvis du hadde tastet C-x 1 i det nederste vinduet ville det øverste forsvunnet. Tenk på denne kommandoen som "Behold bare et vindu, det som markøren står i.") Du er ikke nødt til å ha samme buffer i begge vinduene. Du kan bruke C-x C-f for å finne en ny fil i et av vinduene, det andre vinduet forblir uforandret. Du vil merke at vinduene er helt uavhengige. Her er en annen måte å bruke to vinduer til å vise to forskjellige filer: >> Tast C-x 4 C-f etterfulgt av et filnavn. Avslutt med . Den nye filen vil da dukke opp i det nederste vinduet. Markøren blir også flyttet dit. >> Tast C-x o for å gå tilbake til det øverste vinduet, og C-x 1 for å bli kvitt det nederste igjen. * REKURSIVE REDIGERINGSNIVÅER ----------------------------- Noen ganger kommer du inn i noe som blir kalt "recursive editing level". Dette blir indikert med hakeparenteser i moduslinjen, og vil omringe parentesene rundt hovedmodusen. For eksempel vil det da stå [(Fundamental)] istedenfor (Fundamental). For å komme ut av "recursive editing mode" trykker du ESC ESC ESC. Dette er en generell "kom seg ut" kommando. Du kan også bruke den for å bli kvitt ekstra vinduer og for å komme deg ut av minibuffret. >> Tast M-x for å komme inn i minibuffren. Tast så ESC ESC ESC for å komme ut. Du kan ikke bruke C-g for å komme ut av "recursive editing mode". Dette er fordi C-g blir brukt for å avbryte kommandoer og argumenter INNENFOR "recursive editing level". * HVORDAN FINNE MERE HJELP -------------------------- I denne veiledningen har vi prøvd å inkludere akkurat nok informasjon til at du kan begynne å bruke Emacs. Det er så mange muligheter i Emacs at det ville vært umulig å forklare her. Men du ønsker sikkert å lære mer om Emacs siden den har mange nyttige egenskaper. Emacs tilbyr kommandoer for å lese dokumentasjonen om Emacs-kommandoer. Disse "hjelp"-kommandoene starter med tastekombinasjonen Control-h, som blir kalt "the Help character". For å bruke denne hjelpen taster du C-h etterfulgt av et tegn som forklarer hva du vil ha hjelp om. Hvis du virkelig har rotet deg bort kan du taste C-h ? for at Emacs skal vise hvilken hjelp som er tilgjengelig. Hvis du har tastet C-h og bestemmer deg for at du ikke vil ha noen hjelp så kan du taste C-g for å avbryte. (På noen servere er C-h rekonfigurert. Dette skal vanligvis ikke gjøres, og hvis det er det så klag til systemadministratoren. Imens kan du bruke M-x help istedenfor.) Den mest grunnleggende hjelp-funksjonen er C-h c. Tast C-h, en "c" og en kommandosekvens. Emacs vil da komme med en beskrivelse av denne kommandoen. >> Tast C-h c Control-p. Meldingen skal da bli noe slik som C-p runs the command previous-line Dette forteller navnet til funksjonen. Funksjonsnavn blir stort sett brukt for å spesialtilpasse og utvide Emacs. Men siden funksjonsnavnet er valgt for å indikere hvilken kommando den utfører kan de også fungere som en enkel dokumentasjon, nok for å minne deg på kommandoer du allerede har lært. Flertegnskommandoer, slik som C-x C-s og (hvis du ikke har META, EDIT eller ALT tast) v, er også tillatt etter C-h c. For å få mere informasjon om en kommando kan du bruke C-h k isteden for C-h c. >> Tast C-h k Control-p. Dette vil komme med en dokumentasjon på funksjonen og navnet i et eget vindu. For å avslutte hjelpvinduet kan du trykke q. Her er flere nyttige C-h opsjoner: C-h f Beskrive en funksjon. Du skriver inn funksjonsnavnet. >> Prøv å tast C-h f previous-line. Dette vil skrive ut informasjonen Emacs har om funksjonen som implementerer C-p kommandoen. C-h a Apropos. Vil liste ut alle funksjoner og variabler som søkestrengen angir. Kommandoer som kan bli utført med Meta-x blir markert med en stjerne (*) til venstre for funksjonsnavnet. >> Tast C-h a newline. Dette vil få fram en liste over alle funksjoner og variabler der "newline" inngår i navnet. Du kan trykke eller klikk den midterste musknappen for å finne ut mere om en funksjon eller variabel. Trykk `q' for å avslutte. * TIL SLUTT ----------- Husk at C-x C-c vil avslutte Emacs permanent. For å gå midlertidig til et skall, slik at du senere kan komme tilbake igjen, bruker du C-z. (Under X vil dette minimere Emacs.) Denne veiledningen er laget for at den skal være forståelig for nye brukere, så hvis det er noe som er uklart holder det ikke å synes synd på seg selv: send en mail og klag! KOPIERING / DISTRIBUSJON ------------------------ Denne veiledningen stammer fra en hel rekke Emacs-veiledninger, og den første ble skrevet av Stuart Cracraft for den originale Emacs. Ben Wing oppdaterte veiledningen for X Windows. Martin Buchholz og Hrvoje Niksic la til endringer for XEmacs, og Stig Bjørlykke oversatte den til norsk. This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: Copyright (c) 1997, Stig Bjørlykke. Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. The conditions for copying Emacs itself are more complex, but in the same spirit. Please read the file COPYING and then do give copies of GNU Emacs to your friends. Help stamp out software obstructionism ("ownership") by using, writing, and sharing free software! xemacs-21.4.22/etc/TUTORIAL.pl0000644000175000017500000014152106435215702013623 0ustar acsacsCopyright (c) 1985, 1994 Free Software Foundation, Inc. Szczegó³y na koñcu pliku. Czytasz w³a¶nie krótki podrêcznik Emacsa. Polecenia Emacsa ogólnie wymagaj± wci¶niêcia klawisza CONTROL (czasami oznaczanego CTRL lub CTL) lub klawisza META. Na niektórych klawiaturach klawisz META jest oznaczany ALT lub EDIT, albo jeszcze inaczej (na przyk³ad na klawiaturach firmy SUN klawisz ze znakiem karo na lewo od klawisza odstêpu to jest w³a¶nie META). Je¶li nie masz klawisza META, mo¿esz w jego zastêpstwie u¿ywaæ ESC. Zamiast pisaæ META czy CONTROL za ka¿dym razem, gdy masz przycisn±æ ten klawisz, u¿ywaæ bêdziemy nastêpuj±cych skrótów: C- oznacza trzymanie klawisza CONTROL podczas wciskania klawisza . Na przyk³ad C-f bêdzie odpowiada³o naci¶niêciu f, podczas gdy klawisz CONTROL by³ wci¶niêty. M- oznacza trzymanie klawisza META wci¶niêtego podczas wciskania klawisza . Je¶li nie masz klawisza META, naci¶nij i pu¶æ klawisz ESC, a potem naci¶nij klawisz . Uwaga: by zakoñczyæ sesje Emacsa naci¶nij C-x C-c (dwa znaki). Znaki ">>" na lewym marginesie w dalszej czê¶ci tego podrêcznika oznaczaj± æwiczenia dla Ciebie. Na przyk³ad: <> >> Teraz naci¶nij C-v (nastêpny ekran), by przej¶æ na nastêpny ekran podrêcznika (zrób to naciskaj±c jednocze¶nie klawisz CONTROL i v). Od tego momentu powiniene¶ robiæ to zawsze, gdy dojdziesz do koñca ekranu. Zwróæ uwagê na to, ze kilka linii powtarza siê, gdy przechodzisz z ekranu na ekran; zachowanie to ma zapewniæ pewna ci±g³o¶æ podczas przesuwania siê w obrêbie pliku. Pierwsza umiejêtno¶ci±, która powiniene¶ opanowaæ, jest sposób przesuwania siê z miejsca na miejsce. Ju¿ wiesz, jak przesuwaæ siê o jeden ekran do przodu. By przesun±æ siê o jeden ekran do tylu, wci¶nij M-v (wci¶nij META i naci¶nij v, lub naci¶nij v je¶li nie masz klawisza META lub EDIT). >> Spróbuj nacisn±æ M-v, a potem C-v by przesun±æ siê w przód i w ty³ kilka razy. PODSUMOWANIE ------------ Nastêpuj±ce polecenia s± u¿yteczne do przegl±dania po jednym ekranie: C-v Przesuñ siê o jeden ekran do przodu M-v Przesuñ siê o jeden ekran do tylu C-l Wyczy¶æ ekran i wy¶wietl go na nowo, umieszczaj±c tekst z okolic kursora w ¶rodku ekranu. (Ta kombinacja to CONTROL-L, a nie CONTROL-1.) >> Znajd¼ kursor i zapamiêtaj, jaki tekst jest w jego okolicy. Naci¶nij nastêpnie C-l. Znajd¼ kursor jeszcze raz i zwróæ uwagê, ¿e znajduje siê on w okolicy tego samego tekstu. PODSTAWY KIEROWANIA KURSOREM ---------------------------- Przesuwanie siê z ekranu na ekran jest u¿yteczne, ale jak przej¶æ do okre¶lonego miejsca w obrêbie jednego ekranu? Mo¿na to zrobiæ na kilka sposobów. Najprostszym jest u¿ycie poleceñ C-p, C-b, C-f oraz C-n. Ka¿de z tych poleceñ przesuwa kursor o jeden wiersz lub kolumnê w okre¶lonym kierunku. Oto schemat, który to obrazuje: Poprzednia linia, C-p (ang. previous line) : : Wstecz, C-b .... Kursor .... Do przodu, C-f (ang. back) : (ang. forward) : : Nastêpna linia, C-n (ang. next line) >> Przesuñ kursor na ¶rodek schematu za pomoc± C-n lub C-p. Naci¶nij potem C-l, by zobaczyæ ca³y diagram na ¶rodku ekranu. To s± podstawowe polecenia kieruj±ce po³o¿eniem kursora, których bêdziesz u¿ywaæ nieustannnie, warto wiêc je zapamiêtaæ. >> Naci¶nij kilka razy C-n, by przesun±æ kursor do tej linii. >> Przesuñ siê w g³±b linii za pomoc± C-f, a potem do góry za pomoc± C-p. Zwróæ uwagê na zachowanie siê C-p, gdy kursor jest w ¶rodku linii. Ka¿da linia tekstu koñczy siê znakiem nowej linii, który oddziela ja od nastêpnej. Ka¿dy Twój plik powinien koñczyæ siê znakiem nowej linii (ale Emacs nie zmusza Ciê do tego). >> Spróbuj nacisn±æ C-b na pocz±tku linii. Powinno to Ciê przenie¶æ na koniec poprzedniej linii. Dzieje siê tak dlatego, ¿e kursor przechodzi nad znakiem nowej linii. C-f przechodzi nad znakiem nowej linii tak samo jak C-b. >> Naci¶nij kilka razy C-b, by¶ dostrzeg³, gdzie jest kursor. Naci¶nij potem C-f, by wróciæ na koniec linii. W koñcu naci¶nij jeszcze raz C-f, by przej¶æ do nastêpnej linii. Gdy przesuwasz kursor poza dolna krawêd¼ ekranu, tekst za krawêdzi± przesuwa siê na ekran (ang. scrolling). Dziêki temu Emacs mo¿e przesun±æ kursor do okre¶lonego miejsca bez umieszczania go poza ekranem. >> Spróbuj przesun±æ kursor poza dolna granice ekranu za pomoc± C-n i zobacz co siê stanie. Je¶li przesuwanie siê o jeden znak na raz jest dla Ciebie za wolne, spróbuj przesuwaæ siê o s³owa. M-f (Meta-f) przesuwa kursor do przodu o s³owo, a M-b przesuwa go do tylu o jedno s³owo. >> Spróbuj nacisn±æ kilka M-f i M-b. Gdy jeste¶ w ¶rodku s³owa, M-f przesuwa kursor na koniec s³owa. Je¶li natomiast jeste¶ w przerwie miedzy s³owami, M-f przesuwa kursor na koniec nastêpnego s³owa. M-b zachowuje siê podobnie, jak chodzi o ruch do ty³u. >> Naci¶nij M-f i M-b kilka razy na przemian z C-f i C-b tak, by¶ móg³ zauwa¿yæ dzia³anie M-f i M-b naci¶nietych w ró¿nych miejscach wewn±trz i pomiêdzy s³owami. Zauwa¿ podobieñstwo pomiêdzy C-f i C-b oraz M-f i M-b. Bardzo czêsto kombinacje zawieraj±ce Meta opisuj± operacje zwi±zane z jednostkami jêzykowymi (s³owa, zdania, akapity), podczas gdy kombinacje oparte o Control dzia³aj± na podstawowych jednostkach niezale¿nych od tego, co edytujesz (znaki, linie, itd.). Ta zale¿no¶æ stosuje siê do linii i zdañ: C-a i C-e przesuwaj± kursor na pocz±tek i koniec linii, a M-a i M-e przesuwaj± go na pocz±tek i koniec zdania. >> Naci¶nij kilka razy C-a, a potem kilka razy C-e. Powtórz to z M-a, a potem z M-e. Czy zauwa¿y³e¶, ze powtarzanie C-a nic nie zmienia, natomiast powtórne M-a przesuwa Ciê o jedno zdanie? Chocia¿ nie jest to do koñca analogiczne, wydaje siê jednak naturalne. Po³o¿enie kursora w tek¶cie okre¶lane jest mianem "punktu". Oto podsumowanie prostych poleceñ s³u¿±cych do przesuwania kursora, w³±cznie z operacjami dotycz±cymi s³ów i zdañ: C-f Do przodu o jeden znak C-b W ty³ o jeden znak M-f Do przodu o s³owo M-b W ty³ o s³owo C-n Nastêpna linia C-p Poprzednia linia C-a Pocz±tek linii C-e Koniec linii M-a W ty³ na pocz±tek zdania M-e Do przodu na koniec zdania >> Przeæwicz kilka razy wszystkie powy¿sze polecenia dla wprawy. S± one najczê¶ciej u¿ywanymi poleceniami. Dwa inne wa¿ne polecenia przesuwaj±ce kursor to M-< (Meta i znak mniejszo¶ci), które przesuwa kursor na pocz±tek ca³ego tekstu i M-> (Meta i znak wiêkszo¶ci), które przesuwa kursor na koniec ca³ego tekstu. Na wiêkszo¶ci terminali "<" jest nad przecinkiem, tak wiec musisz u¿yæ klawisza Shift by nacisn±æ "<". Musisz wiec tak¿e u¿yæ Shift by nacisn±æ M-<. Bez Shift by³oby to M-przecinek. >> Naci¶nij M-< by przej¶æ na pocz±tek podrêcznika. U¿yj potem C-v kilkukrotnie, by wróciæ tutaj. >> Teraz naci¶nij M->, by przej¶æ na koniec podrêcznika. Wróæ do tego miejsca za pomoc± kilkukrotnego M-v. Je¶li Twój terminal ma klawisze strza³ek, to mo¿esz ich u¿yæ do przesuwania kursora. Zalecamy Ci nauczenie siê kombinacji C-b, C-f, C-n i C-p z trzech powodów. Po pierwsze, dzia³aj± one na wszystkich typach terminali. Po drugie, gdy ju¿ zdobêdziesz pewna praktykê w pos³ugiwaniu siê Emacsem, bêdzie Ci szybciej nacisn±æ te kombinacje ni¿ klawisze strza³ek (poniewa¿ nie wymaga to przenoszenia d³oni z miejsca, które zajmuj± podczas szybkiego pisania za pomoc± 10 palców). Po trzecie wreszcie, gdy ju¿ wyrobisz sobie zwyczaj pos³ugiwania siê tymi poleceniami z klawiszem Control, bêdziesz móg³ ³atwo nauczyæ siê innych zaawansowanych poleceñ przesuwaj±cych kursor. Wiêkszo¶æ poleceñ Emacsa akceptuje argument liczbowy; dla wiêkszo¶ci poleceñ s³u¿y on jako liczba powtórzeñ. Sposób, w jaki okre¶lasz liczbê powtórzeñ polecenia, to naci¶niecie C-u a potem cyfr, zanim naci¶niesz polecenie. Je¶li masz klawisz META (lub EDIT lub ALT), alternatywnym sposobem jest wciskanie klawiszy cyfr podczas wprowadzania argumentu liczbowego. Zalecamy nauczenie siê metody klawisza C-u, poniewa¿ dzia³a ona na wszystkich terminalach. Na przyk³ad C-u 8 C-f przesuwa kursor do przodu o osiem znaków. >> Spróbuj u¿yæ C-n i C-p z argumentem liczbowym, by przesun±æ kursor do jednej z linii w pobli¿u tego zdania za pomoc± tylko jednego polecenia. Wiêkszo¶æ poleceñ u¿ywa argumentu liczbowego jako liczba powtórzeñ. Jest kilka poleceñ, które u¿ywaj± go w inny sposób. C-v i M-v s± w¶ród tych wyj±tków. Je¶li poda siê im argument, przesuwaj± zawarto¶æ ekranu w gore lub w dó³ o podana liczbê linii zamiast o tyle¿ ekranów. Na przyk³ad C-u 4 C-v przewija ekran o 4 linie. >> Spróbuj nacisn±æ C-u 8 C-v. To powinno by³o przewin±æ ekran do góry o 8 linii. Je¶li chcia³by¶ przewin±æ go w dó³, mo¿esz podaæ argument przed poleceniem M-v. Je¶li u¿ywasz systemu X-Windows, prawdopodobnie po prawej stronie okna Emacsa znajduje siê prostok±tny obszar, nazywany po angielsku "scrollbar". Za jego pomoc± mo¿esz przewijaæ tekst, u¿ywaj±c do tego celu myszy. >> Spróbuj nacisn±æ ¶rodkowy klawisz myszy u góry pod¶wietlonego obszaru na scrollbarze. To powinno przewin±æ tekst do miejsca okre¶lonego wysoko¶ci±, na której nacisn±³e¶ klawisz myszy. >> Przesuñ mysz do miejsca oddalonego od górnego koñca scrollbaru mniej wiêcej o trzy linie i naci¶nij lewy klawisz myszy kilka razy. * KIEROWANIE KURSOREM Z X TERMINALA ----------------------------------- Je¶li masz X terminal, prawdopodobnie ³atwiej Ci bêdzie u¿ywaæ klawiszy strza³ek po prawej stronie klawiatury do kierowania kursorem. Klawisze strza³ek w lewo, w prawo, w górê i w dó³ dzia³aj± zgodnie z oczekiwaniem; odpowiadaj± one dok³adnie C-b, C-f, C-p i C-n, ale s± ³atwiejsze do zapamiêtania. Mo¿esz tak¿e u¿ywaæ C-lewo i C-prawo by przesuwaæ siê o s³owa oraz C-góra i C-dó³, by przesuwaæ siê o bloki (np. akapity, je¶li edytujesz tekst). Je¶li masz klawisze oznaczone HOME (lub BEGIN) oraz END, zanios± Ciê one na pocz±tek i koniec linii, a C-home i C-end na pocz±tek i koniec pliku. Je¶li Twoja klawiatura ma klawisze PgUp i PgDn, mo¿esz ich u¿yæ do przesuwania siê o jeden ekran za jednym razem, tak jak M-v i C-v. Wszystkie te polecenia akceptuj± argument liczbowy, jak to jest opisane powy¿ej. Mo¿esz stosowaæ pewne skróty w celu wpisania tych argumentów: naci¶nij i trzymaj CONTROL lub META i wpisz liczbê. Na przyk³ad, by przesun±æ kursor o 12 s³ów w prawo naci¶nij C-1 C-2 C-prawo. Zwróæ uwagê, ze jest to ³atwe do wpisania, poniewa¿ nie musisz puszczaæ klawisza CONTROL podczas wciskania klawiszy. * GDY EMACS JEST ZABLOKOWANY ---------------------------- Je¶li Emacs przestaje odpowiadaæ na Twoje polecenia, mo¿esz go bezpiecznie zatrzymaæ przyciskaj±c C-g. Mo¿esz u¿yæ C-g do przerwania polecenia, które zabiera zbyt wiele czasu. Mo¿esz u¿yæ C-g tak¿e, by anulowaæ argument liczbowy lub pocz±tek polecenia, którego nie chcesz dokañczaæ. >> Napisz C-u 100 jako argument liczbowy, po czym naci¶nij C-g. Teraz naci¶nij C-f. Powinno przesun±æ to kursor o tylko jeden znak, poniewa¿ anulowa³e¶ argument za pomoc± C-g. Je¶li nacisn±³e¶ przez pomy³kê, mo¿esz tego siê pozbyæ za pomoc± C-g. * ZABLOKOWANE POLECENIA ----------------------- Pewne polecenia Emacsa s± "zablokowane", tak by pocz±tkuj±cy u¿ytkownicy nie mogli ich wywo³aæ przez przypadek. Je¶li wywo³asz jedno z zablokowanych poleceñ, Emacs wypisze komunikat informuj±cy o tym, co to za polecenie, i zapyta Ciê, czy chcesz je wywo³aæ. Je¶li naprawdê chcesz wywo³aæ to polecenie, naci¶nij spacje w odpowiedzi na pytanie. Je¶li nie chcesz wywo³aæ zablokowanego polecenia, odpowiedz na pytanie naciskaj±c "n". >> Napisz `C-x n p' (co jest zablokowanym poleceniem) i odpowiedz "n" na zadane pytanie. * OKNA ------ Emacs mo¿e miêæ kilka okien, ka¿de wy¶wietlaj±ce w³asny tekst. Zwróæ uwagê, ze "okno" je¶li chodzi o Emacsa, nie odnosi siê do osobnego okienka systemu okienkowego, ale do pojedynczego panelu wewn±trz okienka systemu X-Windows. (Emacs mo¿e miêæ kilka X-okien, lub "ramek" w terminologii Emacsa. Opisane jest to poni¿ej.) Na tym etapie lepiej jest siê nie zag³êbiaæ w techniki wykorzystuj±ce kilka okien. Powiniene¶ jedynie wiedzieæ, w jaki sposób pozbyæ siê nadmiaru okien, które mog± pojawiæ siê jako sk³adniki systemu pomocy lub wynik pewnych poleceñ. Robi siê to w prosty sposób: C-x 1 Jedno okno (tzn. zabij wszystkie inne okna). Kombinacja ta to Control-x, po którym wystêpuje cyfra 1. C-x 1 powiêksza okno, w którym jest kursor tak, by zajê³o ca³y ekran. Kasuje to wszystkie inne okna Emacsa. >> Przesuñ kursor do tej linii i naci¶nij C-u 0 C-l. (C-l, jak pamiêtasz od¶wie¿a zawarto¶æ ekranu. Je¶li poda siê temu poleceniu argument liczbowy, bêdzie to oznacza³o "od¶wie¿ zawarto¶æ ekranu i umie¶æ bie¿±ca linie o tyle linii od góry ekranu". Tak wiec C-u 0 C-1 oznacza "od¶wie¿ ekran, umieszczaj±c bie¿±ca linie na samej górze".) >> Naci¶nij Control-x 2 Zauwa¿ jak okno siê kurczy, podczas gdy nowe okno pojawia siê, wy¶wietlaj±c zawarto¶æ tego bufora. >> Naci¶nij C-x 1 i nowe okno zniknie. * WSTAWIANIE I USUWANIE ----------------------- Je¶li chcesz wstawiaæ tekst, po prostu go napisz. Znaki, które da siê wy¶wietliæ, takie jak A, 7, *, itd, Emacs traktuje jako tekst i wstawia natychmiast do bufora. Naci¶nij (znak powrotu karetki), by wstawiæ znak nowej linii. Ostatni znak, który napisa³e¶ mo¿esz skasowaæ przez naci¶niecie klawisza . Klawisz ten mo¿e byæ oznaczony "Del". W pewnych wypadkach klawisz "Backspace" mo¿e s³u¿yæ za , ale nie jest to regu³±! Ogólniej, usuwa znak bezpo¶rednio przed bie¿±ca pozycj± kursora. >> Zrób to teraz: wstaw kilka znaków, po czym usuñ je za pomaca kilkukrotnego naci¶niêcia . Nie przejmuj siê tym, ¿e zmieniasz ten plik; nie zmienisz w ten sposób g³ównego pliku podrêcznika. To jest Twoja w³asna kopia. Gdy linia tekstu staje siê zbyt d³uga, by zmie¶ciæ siê w jednym wierszu na ekranie, jest ona "kontynuowana" w nastêpnym wierszu ekranu. Znak "backslash" (`\') na prawym marginesie pozwala Ci rozpoznaæ takie linie. >> Wpisuj jaki¶ tekst tak d³ugo, a¿ dojdziesz do prawego marginesu, i potem nie przestawaj. Zauwa¿ysz, ze pojawi siê linia kontynuacji. >> U¿yj by usun±æ tekst tak, by linia znowu mie¶ci³a siê na ekranie. Linia kontynuacji zniknie. Znak nowej linii mo¿e byæ kasowany tak, jak ka¿dy inny znak. Usuniecie znaku nowej linii ³±czy je w jedna. Je¶li powsta³a w wyniku tego linia jest zbyt d³uga, by zmie¶ciæ siê na szeroko¶æ ekranu, zostanie ona wy¶wietlona z lini± kontynuacji. >> Przesuñ kursor na pocz±tek linii i naci¶nij . Bie¿±ca linia zostanie po³±czona z poprzednia. >> Naci¶nij , by z powrotem wstawiæ znak nowej linii, który skasowa³e¶. Pamiêtaj, ze wiêkszo¶æ poleceñ Emacsa mo¿e zostaæ wywo³anych z parametrem liczby powtórzeñ; dotyczy to tak¿e znaków tekstu. Argument liczbowy powoduje wstawienie znaku kilkukrotnie. >> Spróbuj zrobiæ to teraz -- naci¶nij C-u 8 * by uzyskaæ ********. Nauczy³e¶ siê ju¿ wiêkszej czê¶ci podstawowych sposobów pisania oraz poprawiania b³êdów. W Emacsie mo¿esz usuwaæ równie¿ cale s³owa lub cale linie. Oto podsumowanie operacji usuwania znaków: usuñ znak bezpo¶rednio przed kursorem C-d usuñ znak bezpo¶rednio za kursorem M- wytnij s³owo bezpo¶rednio przed kursorem M-d wytnij nastêpne s³owo bezpo¶rednio za kursorem C-k wytnij zawarto¶æ linii od kursora do jej koñca M-k wytnij wszystkie znaki od kursora do koñca zdania Zauwa¿, ze i C-d w po³±czeniu z M- i M-d rozszerzaj± regule rozpoczêt± przez C-f i M-f (Có¿, tak naprawdê nie wymaga wci¶niêcia Control, ale pomiñmy to milczeniem). C-k i M-k s± podobne do C-e i M-e w sensie, ¿e linie s± odpowiednikami zdañ. Gdy usuwasz wiêcej ni¿ jeden znak naraz, Emacs zachowuje usuniêty tekst tak, by¶ móg³ go gdzie¶ wstawiæ z powrotem. Wstawianie usuniêtego tekstu to "wklejanie". Mo¿esz wklejaæ usuniêty tekst b±d¼ to w to samo miejsce, z którego zosta³ usuniêty, b±d¼ to w inne miejsca. Ten sam tekst mo¿esz wklejaæ kilkukrotnie, w celu uzyskania wielu kopii. Poleceniem, które wkleja tekst jest C-y. Zauwa¿ ró¿nicê pomiêdzy "wycinaniem" i "usuwaniem", polegaj±c± na tym, ze wyciête rzeczy mog± byæ wklejone na nowo, natomiast usuniête nie. W ogólno¶ci, polecenia, które kasuj± du¿o tekstu zachowuj± go, podczas gdy polecenia, które usuwaj± po prostu jeden znak lub puste linie i przerwy, nie zachowuj± usuniêtego tekstu. >> Przesuñ kursor na pocz±tek linii, która nie jest pusta. Naci¶nij C-k, by wyci±æ tekst z tej linii. >> Naci¶nij C-k jeszcze raz. Zauwa¿, ze wycina to znak nowej linii, który znajduje siê za ta linia. Zwróæ uwagê, ze pojedyncze C-k wycina zawarto¶æ linii, a powtórne C-k wycina sam± linie tak, ¿e pozosta³e linie przesuwaj± siê do góry. C-k traktuje argument liczbowy w specjalny sposób: wycina ono tyle linii ORAZ ich zawarto¶æ. To nie jest samo powtarzanie kilka razy C-k. C-u 2 C-k wycina dwie linie i ich znaki nowej linii; dwukrotne naci¶niecie C-k nie zrobi³oby tego. By odzyskaæ ostatnio wyciêty tekst i wstawiæ go w miejsce kursora, naci¶nij C-y. >> Twoja kolej. Naci¶nij C-y, by z powrotem wstawiæ tekst. Zwróæ uwagê, ze je¶li naci¶niesz C-k kilka razy pod rz±d, ca³y wyciêty tekst jest zachowywany w jednym kawa³ku tak, ¿e jedno C-y wklei wszystkie linie. >> Naci¶nij C-k kilka razy. By odzyskaæ ten wyciêty tekst... >> ...naci¶nij C-y. Przesuñ potem kursor o kilka linii w dó³ i naci¶nij C-y jeszcze raz. Widzisz, ze wstawia to ten sam tekst. Co zrobiæ, je¶li chcesz wstawiæ tekst, który wcze¶niej wyci±³e¶, a potem wycinasz cos innego? C-y wstawia tekst ostatnio wyciêty. Poprzedni fragment nie jest jednak stracony. Mo¿esz wróciæ do niego, u¿ywaj±c polecenia M-y. Po tym, jak naci¶niesz C-y, by wstawiæ ostatnio wyciêty tekst, naci¶niecie M-y zastêpuje wstawiony tekst poprzednio wyciêtym. Dalsze naciskanie M-y przywo³uje coraz wcze¶niejsze fragmenty tekstu. Gdy dojdziesz do tekstu, którego szuka³e¶, nie musisz robiæ nic, by zosta³ on we w³a¶ciwym miejscu. Po prostu kontynuuj edycjê tekstu, pozostawiaj±c wklejony tekst tam, gdzie siê znajduje. Je¶li bêdziesz naciska³ M-y wystarczaj±co wiele razy, dojdziesz do punktu, z którego wystartowa³e¶ (tekst ostatnio wyciêty). >> Wytnij jak±¶ line, zmieñ pozycjê kursora i wytnij inna. Naci¶nij potem C-y by wstawiæ druga z wyciêtych linii. Potem naci¶nij M-y, i linia ta zostanie zast±piona przez ta pierwsza. Naci¶nij M-y jeszcze kilka razy, by zobaczyæ co siê dzieje. Powtarzaj to tak d³ugo, a¿ druga z linii pojawi siê z powrotem. Je¶li chcesz, mo¿esz pod±æ M-y dodatnie i ujemne argumenty. * COFNIJ -------- Je¶li wprowadzisz zmiany do tekstu, a potem dojdziesz do wniosku, ¿e to by³a pomy³ka, mo¿esz cofn±æ te zmiany za pomoc± polecenia "cofnij" (ang. undo), C-x u. C-x u cofa zmiany wprowadzone przez jedno polecenie; je¶li powtórzysz C-x u kilka razy pod rz±d, ka¿de powtórzenie cofa koleje polecenie. Od tej regu³y s± dwa wyj±tki: polecenia, które nie zmieniaj± tekstu nie licz± siê jako polecenia, które mo¿na cofn±æ (zarówno przesuniêcia kursora, jak i przewijanie tekstu), oraz znaki wstawiane do tekstu (np. litery) ³±czone s± w grupy do 20. (Ma to na celu zredukowanie liczby naci¶niêæ C-x u, które musia³by¶ wykonaæ, by cofn±æ wstawianie tekstu.) >> Wytnij te linie za pomoc± C-k, a potem naci¶nij C-x u i linia powinna pojawiæ siê tu z powrotem. C-_ jest innym sposobem wywo³ania polecenia "cofnij"; dzia³a to dok³adnie tak samo jak C-x u, jest jedynie ³atwiejsze do naci¶niêcia kilka razy pod rz±d. Wada C-_ jest to, ze nie jest to oczywiste w jaki sposób nacisn±æ te kombinacje na niektórych klawiaturach. To w³a¶nie dlatego C-x u jest tak¿e dostêpne. Na niektórych terminalach mo¿esz nacisn±æ C-_ poprzez przytrzymanie CTRL i naci¶niecie /. Argument liczbowy podany przed C-_ lub C-x u okre¶la liczbê powtórzeñ tego polecenia. * PLIKI ------- Aby edytowny przez Ciebie tekst zosta³ nma trwa³e zachowany, musisz umie¶ciæ go w pliku. W przeciwnym wypadku zniknie on, gdy Emacs w którym go edytowa³e¶ zostanie zamkniêty. Zachowywanie Twojego tekstu w pliku nazywane bywa "odwiedzaniem" lub "znajdywaniem" pliku (ang. "visiting" lub "finding"). Odwiedzanie pliku oznacza, ¿e jego zawarto¶æ zostaje wy¶wietlona w Emacsie. Bardzo czêsto sprowadza siê to do edycji samego pliku. Jednak¿e zmiany, które wprowadzasz nie s± trwa³e do momentu, w którym "zachowasz" plik (ang. save). Zapobiega to sytuacji, w której zostawiasz w systemie plik, który zosta³ tylko w po³owie zmieniony, a tego nie chcesz zrobiæ. Nawet wtedy, gdy zachowujesz plik, Emacs zostawia orygina³ zachowany pod inna nazwa na wypadek, gdyby¶ doszed³ do wniosku, ¿e wprowadzone zmiany by³y b³êdne. Je¶li popatrzysz na dó³ ekranu, zauwa¿ysz linie, która zaczyna i koñczy siê my¶lnikami i zawiera tekst "XEmacs: TUTORIAL". W tej czê¶ci ekranu zawsze mo¿esz znale¼æ nazwê pliku, który w³a¶nie odwiedzasz. W tej chwili odwiedzasz plik o nazwie "TUTORIAL", który jest Twoja w³asn± kopi± podrêcznika Emacsa. Obojêtnie jaki plik odwiedzisz, jego nazwa pojawi siê dok³adnie w tym miejscu. Polecenia, które s³u¿± do odwiedzania i zachowywania plików ró¿ni± siê od innych poleceñ, które pozna³e¶ tym, ¿e sk³adaj± siê one z dwóch znaków. Obydwa zaczynaj± siê od znaku Control-x. Jest mnóstwo poleceñ, które zaczynaj± siê od tego w³a¶nie znaku; wiele z nich dotyczy plików, buforów i z tym zwi±zanych rzeczy. Polecenia te maj± d³ugo¶æ dwóch, trzech lub czterech znaków. Kolejn± nowa rzecz± odno¶nie polecenia odwiedzania pliku jest to, ¿e musisz mu pod±æ nazwê pliku, który chcesz znale¼æ. Mówimy o tym, ¿e polecenie "czyta argument z terminala" (w tym wypadku argument jest nazwa pliku). Po tym, gdy wpiszesz polecenie C-x C-f znajd¼ plik (ang. find a file) Emacs poprosi Ciê o wpisanie nazwy pliku. Nazwa ta pojawia siê w dolnej linii ekranu. Liniê tê nazywa siê "minibuforem" (ang. "minibuffer") wtedy, gdy jest u¿ywana do wprowadzania tego typu danych. Do edycji nazwy pliku u¿ywasz zwyk³ych poleceñ Emacsa. Wprowadzanie nazwy pliku (lub jakichkolwiek innych danych w minibuforze) mo¿e zostaæ anulowane za pomoc± C-g. >> Naci¶nij C-x C-f, po czym naci¶nij C-g. Na skutek tego zniknie minibufor oraz przerwane zostanie polecenie C-x C-f, które tego minibufora u¿ywa³o. W rezultacie wiêc nie odwiedzisz ¿adnego pliku. Gdy skoñczysz wpisywaæ nazwê pliku, naci¶nij , po czym polecenie C-x C-f zabierze siê do roboty i znajdzie plik, który wybra³e¶. Minibufor znika z chwil± zakoñczenia wykonywania polecenia C-x C-f. Po chwili zawarto¶æ pliku pojawia siê na ekranie i mo¿esz j± edytowaæ. Gdy chcesz zachowaæ zmiany, tak by je utrwaliæ, wydaj polecenie C-x C-s zachowaj plik (ang. save). Kopiuje to tekst z Emacsa do pliku. Za pierwszym razem gdy to robisz Emacs zmienia nazwê oryginalnego pliku poprzez dodanie "~" na koñcu jego nazwy. Gdy zachowywanie skoñczy siê, Emacs wypisuje nazwê zapisanego pliku. Pliki powiniene¶ zachowywaæ stosunkowo czêsto, tak by nie straciæ za du¿o w przypadku za³amania systemu. >> Naci¶nij C-x C-s by zachowaæ swoja kopie podrêcznika. Emacs powinien wypisaæ "Wrote ...TUTORIAL" na dole ekranu. UWAGA: W niektórych systemach naci¶niecie C-x C-s zamrozi ekran i nie zobaczysz ¿adnego tekstu z Emacsa. Oznacza to, ¿e sk³adowa systemu operacyjnego, zwana kontrol± przep³ywu (ang. flow control) przechwyci³a C-s i nie pozwoli³a mu doj¶æ do Emacsa. By odzyskaæ kontrole nad ekranem, naci¶nij C-q. Dodatkowej pomocy poszukaj w rozdziale "Spontaneous Entry to Incremental Search" w podrêczniku Emacsa. Mo¿esz odwiedziæ istniej±ce pliki w celu ich edycji lub czytania. Mo¿esz tak¿e odwiedziæ plik, który jeszcze nie istnieje. W ten w³a¶nie sposób tworzy siê w Emacsie nowe pliki: odwied¼ plik, co da Ci nowe puste miejsce, a potem zacznij wstawiaæ tekst. Gdy za¿±dasz zachowania pliku, wtedy Emacs naprawdê utworzy plik z tekstem, który wpisa³e¶. Od tego momentu mo¿esz uwa¿aæ, ¿e edytujesz istniej±cy plik. * BUFORY -------- Je¶li odwiedzisz inny plik za pomoc± C-x C-f, poprzedni plik pozostaje w Emacsie. Mo¿esz prze³±czyæ siê do niego, odwiedzaj±c go jeszcze raz za pomoc± C-x C-f. W ten sposób mo¿esz w Emacsie miêæ ca³kiem du¿o plików. >> Utwórz plik o nazwie "foo" za pomoc± C-x C-f foo . Wpisz w niego jaki¶ tekst i zachowaj "foo" za pomoc± C-x C-s. W koñcu napisz C-x C-f TUTORIAL , by wróciæ do podrêcznika. Emacs przechowuje tekst ka¿dego pliku w obiekcie, zwanym "buforem". Odwiedzenie pliku tworzy nowy bufor wewn±trz Emacsa. By zobaczyæ listê buforów, które istniej± w Twoim Emacsie, naci¶nij C-x C-b lista buforów (ang. list buffers). >> Naci¶nij C-x C-b. Zwróæ uwagê, ze ka¿dy bufor ma w³asn± nazwê, mo¿e tak¿e mieæ skojarzon± z sob± nazwê pliku, który zawiera. Pewne bufory nie odpowiadaj± ¿adnym plikom. Na przyk³ad bufor "*Buffer List*" nie odwiedza ¿adnego pliku. Jest to bufor, który zawiera listê buforów stworzona przez Twoje naci¶niecie C-x C-b. DOWOLNY tekst, który ogl±dasz w oknie Emacsa jest zawsze czê¶ci± jakiego¶ bufora. >> Naci¶nij C-x 1 by pozbyæ siê listy buforów. Je¶li dokonujesz zmian tekstu w jakim¶ pliku, a potem odwiedzisz inny plik, zawarto¶æ tego pierwszego NIE jest automatycznie zachowywana. Zmiany, które wprowadzi³e¶ pozostaj± w Emacsie, w buforze tego¿ pliku. Tworzenie czy edytowanie innego bufora nie ma ¿adnego wp³ywu na ten pierwszy. Jest to bardzo przydatne, ale oznacza tak¿e, ¿e potrzebny jest Ci wygodny sposób zachowywania zawarto¶ci Twoich buforów. Prze³±czanie siê z powrotem do pierwszego bufora zawsze przy wykonywaniu C-x C-f tylko po to, by nacisn±æ tam C-x C-s by³oby niewygodne. Dlatego istnieje polecenie: C-x s Zachowaj bufory (ang. save some buffers) C-x s pyta Ciê, czy chcesz zachowaæ ka¿dy z buforów, w którym dokona³e¶ pewnych nie zachowanych jeszcze zmian. >> Wstaw jak±¶ liniê tekstu, a potem naci¶nij C-x s. Powiniene¶ zostaæ zapytany o to, czy chcesz zachowaæ bufor TUTORIAL. Odpowiedz na to pytanie twierdz±co naciskaj±c "y". * U¯YWANIE MENU --------------- Je¶li siedzisz przy X-terminalu zauwa¿ysz u góry okna Emacsa pasek menu. Mo¿esz u¿ywaæ menu by dotrzeæ do najpopularniejszych poleceñ Emacsa, takich jak "find file". Na pocz±tku bêdziesz s±dzi³, ze jest to ³atwiejsze ni¿ klawiatura, poniewa¿ nie musisz uczyæ siê na pamiêæ kombinacji klawiszy uruchamiaj±cych jakie¶ polecenie. Gdy ju¿ zaznajomisz siê z Emacsem, bêdziesz móg³ zacz±æ uczyæ siê klawiszy --- elementy menu pokazuj± kombinacje klawiszy, która wywo³uje dane polecenie. Zwróæ uwagê, ze pewne polecenia w menu nie maja jednoznacznych odpowiedników klawiszowych. Na przyk³ad menu "Buffers" zawiera listê wszystkich dostêpnych buforów. Mo¿esz prze³±czyæ siê do dowolnego z nich wybieraj±c jego nazwê z menu Buffers. * U¯YWANIE MYSZY ---------------- Emacs potrafi w pe³ni wykorzystywaæ mysz, je¶li tylko jest uruchomiony pod X-Windows. Mo¿esz zmieniaæ pozycje kursora poprzez naci¶niecie lewego klawisza myszy w po¿±danym miejscu, mo¿esz tak¿e zaznaczaæ tekst przez przesuniecie myszy z wci¶niêtym lewym klawiszem nad tekstem, który chcesz zaznaczyæ. (Innym sposobem jest klikniêcie na jednym z koñców obszaru, przesuniêcie myszy na drugi koniec i klikniêcie tam z jednoczesnym wci¶niêciem klawisza Shift.) By wyci±æ zaznaczony tekst mo¿esz nacisn±æ C-w lub wybraæ Cut z menu Edit. Zwróæ uwagê na to, ze *nie* s± to równowa¿ne polecenia: C-w zapamiêtuje zaznaczony tekst tylko wewn±trz Emacsa (podobnie jak omówione powy¿ej C-k), natomiast Cut robi to oraz umieszcza ten tekst w schowku systemu X, sk±d mo¿e on zostaæ pobrany przez inne programy. By wkleiæ tekst ze schowka systemu X-Windows u¿yj polecenia Paste z menu Edit. ¦rodkowy klawisz myszy jest czêsto u¿ywany do wybierania elementów, które s± wy¶wietlone na ekranie. Na przyk³ad, je¶li uruchomisz Info (system dokumentacji Emacsa) naciskaj±c C-h i, lub wybieraj±c ten element z menu Help, przej¶cie pod¶wietlonym po³±czeniem (ang. link) odbywa siê poprzez naci¶niecie ¶rodkowego klawisza myszy. Podobnie, je¶li wpisujesz nazwê pliku (np. podczas wykonywania "Find File") i naci¶niesz TAB, by zobaczyæ wszystkie mo¿liwe dokoñczenia nazwy, mo¿esz wybraæ jedno z nich z wy¶wietlonej listy, w³a¶nie naciskaj±c ¶rodkowy klawisz myszy. Prawy klawisz myszy pokazuje lokalne menu. Zawarto¶æ tego menu zale¿y od trybu pracy Emacsa, w którym aktualnie jeste¶, i zawiera kilka czêsto u¿ywanych poleceñ, tak by by³y one ³atwiejsze w dostêpie. >> Naci¶nij prawy klawisz myszy Prawy klawisz myszy musi byæ trzymany, by menu nie znik³o automatycznie. * ROZSZERZANIE ZESTAWU POLECEN ------------------------------ Poleceñ Emacsa jest du¿o du¿o wiêcej, ni¿ mo¿na by skojarzyæ kombinacjami zwyk³ych klawiszy oraz META czy CTRL. Emacs radzi sobie z tym za pomoc± polecenia X (ang. eXtend). Istniej± jego dwa rodzaje: C-x Rozszerzenie o znak. Nastêpuje po nim jeden znak. M-x Rozszerzenie o nazwane polecenie. Nastêpuje po nim pe³na d³uga nazwa polecenia. Polecenia te w ogólno¶ci s± u¿yteczne, ale s± u¿ywane nie tak czêsto jak polecenia, których ju¿ siê nauczy³e¶. Mia³e¶ ju¿ okazje poznaæ dwa z nich: C-x C-f s³u¿±ce do odwiedzania plików oraz C-x C-s do ich zachowywania. Innym przyk³adem mo¿e byæ polecenie, które koñczy sesje Emacsa C-x C-c. (Nie martw siê, ze mo¿esz w ten sposób straciæ zmiany, które dokona³e¶; C-x C-c oferuje Ci mo¿liwo¶æ zachowania ka¿dego ze zmodyfikowanych plików przed zamkniêciem Emacsa.) C-z jest poleceniem, które wychodzi z Emacsa *na chwile*, tak by¶ móg³ wróciæ do tej samej sesji Emacsa po jakim¶ czasie. W systemach, w których jest to mo¿liwe, C-z zawiesza proces Emacsa; powoduje to powrót do pow³oki (ang. shell), ale nie niszczy Emacsa. W najpopularniejszych pow³okach mo¿esz wróciæ do Emacsa za pomoc± polecenia `fg' lub `%emacs'. W systemach, w których zawieszanie procesów nie dzia³a, C-z tworzy proces podpow³oki (ang. "subshell"), który dzia³a pod Emacsem i daje Ci szansê uruchamiania innych programów i powrotu do Emacsa po ich skoñczeniu; w tych systemach C-z nie wychodzi naprawdê z Emacsa. W tych wypadkach normalnym poleceniem powrotu do Emacsa jest wyj¶cie z podpow³oki za pomoc± "exit". Polecenia C-x C-c powiniene¶ u¿ywaæ, gdy masz siê wylogowaæ. Zalecane jest tak¿e wychodzenie z Emacsa wystartowanego przez np. programy obs³uguj±ce pocztê elektroniczna lub innego rodzaju narzêdzia, poniewa¿ mog± one nie wiedzieæ jak sobie poradziæ z zawieszeniem Emacsa. Jednak¿e w zwyk³ych okoliczno¶ciach, je¶li nie musisz wylogowywaæ siê z systemu, lepiej jest zawiesiæ Emacsa za pomoc± C-z ni¿ z niego wyj¶æ. Istnieje wiele poleceñ zaczynaj±cych siê od C-x. Oto lista tych, których siê ju¿ nauczy³e¶: C-x C-f odwied¼ plik C-x C-s zachowaj plik C-x C-b wy¶wietl listê buforów C-x C-c wyjd¼ z Emacsa C-x u cofnij Poleceñ podawanych za pomoc± nazwy u¿ywa siê jeszcze rzadziej lub u¿ywa siê tylko w pewnych trybach. Przyk³adem mo¿e byæ polecenie replace-string, które globalnie zastêpuje jeden ³añcuch innym. Gdy naciskasz M-x, Emacs czeka na ci±g dalszy, wy¶wietlaj±c "M-x" na dole ekranu. Powiniene¶ po tym wpisaæ nazwê polecenia, w tym wypadku "replace-string". Napisz tylko "repl s", a Emacs dokoñczy nazwê. Zakoñcz wprowadzanie nazwy przez naci¶niecie klawisza . Polecenie replace-string wymaga dwóch argumentów: ³añcucha, który ma zostaæ zastêpowany i ³añcucha, który ma byæ wstawiony w miejsce tego¿. Obydwa ³añcuchy musza byæ zakoñczone przyci¶niêciem . >> Przesuñ kursor do czystej linii, dwie linie poni¿ej tej. Naci¶nij M-x repl szmienizmodyfikuje. Zwróæ uwagê na to, jak ta linia siê zmieni: zast±pi³e¶ s³owem "zmodyfikuje" ka¿de wyst±pienie s³owa z-m-i-e-n-i poni¿ej pocz±tkowej pozycji kursora. * AUTOMATYCZNE ZACHOWYWANIE --------------------------- Gdy wprowadzisz zmiany do pliku i ich nie zachowasz, mog± one zostaæ stracone, je¶li Twój komputer przestanie dzia³aæ. By uchroniæ Ciê przed tym, Emacs okresowo zapisuje specjalny plik z wprowadzonymi zmianami. Plik ten ma znak # na pocz±tku i na koñcu swojej nazwy. Na przyk³ad, za³ó¿my, ze Twój plik nazywa siê "hello.c". Odpowiadaj±cy mu plik automatycznie zachowywany bêdzie nosi³ nazwê "#hello.c#". Gdy zachowujesz plik w zwyk³y sposób, Emacs kasuje plik automatycznie zachowany. Je¶li Twój komputer przestanie dzia³aæ, mo¿esz odzyskaæ Twoje dane z pliku automatycznie zachowanego przez zwykle odwiedzenie pliku (tego, który edytowa³e¶, a nie pliku automatycznie zachowanego) i napisanie M-x recover file. Gdy Emacs zapyta o potwierdzenie, napisz yes by odzyskaæ dane, które zosta³y automatycznie zachowane. * OBSZAR ECHA ------------- Je¶li polecenia dla Emacsa wpisujesz dostatecznie wolno, zostan± one pokazywane w specjalnym obszarze na dole ekranu, zwanym obszarem echa (ang. echo area). Obszar echa zawiera ostatnia dolna linie ekranu. * LINIA STANU ------------- Linia, która znajduje siê bezpo¶rednio nad obszarem echa, zwana jest "lini± trybu" (ang. modeline). Pokazuje ona tekst podobny do nastêpuj±cego: --**-XEmacs: TUTORIAL (Fundamental)--L670--58%---------------- Linia ta podaje u¿yteczne informacje o stanie Emacsa i tekstu, który edytujesz. Wiesz ju¿, jakie jest znaczenie nazwy pliku: jest to plik, który odwiedzi³e¶. --NN%-- opisuje Twoja bie¿±c± pozycje wewn±trz tekstu; oznacza to, ¿e NN procent tekstu znajduje siê ponad górnym brzegiem ekranu. Je¶li pocz±tek pliku znajduje siê na pocz±tku ekranu, zamiast liczby --00%-- zobaczysz w tym miejscu --Top--. Podobnie dla koñca tekstu pojawi siê tam napis --Bot-- (od ang. bottom). Je¶li wy¶wietlasz tekst na tyle krótki, ze mie¶ci siê w ca³o¶ci na ekranie, linia stanu poka¿e --All--. Gwiazdki blisko pocz±tku linii trybu oznaczaj±, ze wprowadzi³e¶ do tekstu jakie¶ zmiany. Bezpo¶rednio po odwiedzeniu lub po zachowaniu pliku nie bêdzie w tym miejscu ¿adnych gwiazdek, a tylko my¶lniki. Wewn±trz nawiasów znajdziesz informacje na temat trybu edycji, w którym w³a¶nie jest Emacs. Domy¶lnym trybem edycji jest tryb podstawowy (ang. fundamental), który jest trybem (w³a¶nie w tej chwili u¿ywanym--) u¿ywanym w³a¶nie w tej chwili. Jest to przyk³ad "trybu g³ównego" (ang. major mode). Emacs mo¿e dzia³aæ w wielu trybach g³ównych. Pewne z nich zosta³y zaprojektowane do edycji rozmaitych jêzyków i/lub rodzajów tekstu, takie jak tryb Lispu, tryb tekstowy, itd. W danej chwili mo¿e byæ aktywny tylko jeden g³ówny tryb pracy, i to jego nazwa jest wy¶wietlana w linii trybu w miejscu, w którym teraz jest "Fundamental". Ka¿dy z g³ównych trybów edycyjnych mo¿e zmieniæ zachowanie niektórych poleceñ. Na przyk³ad, w Emacsie istniej± polecenia s³u¿±ce do tworzenia komentarzy w programach. Ka¿dy jêzyk programowania na swój sposób okre¶la, jak powinien wygl±daæ komentarz, tak wiec ka¿dy z g³ównych trybów edycyjnych musi wstawiaæ komentarze w specyficzny sposób. Ka¿dy tryb edycyjny jest nazw± polecenia, które mo¿esz wykonaæ, by prze³±czyæ siê w ten tryb lub wy³±czyæ ten tryb. Przyk³adem mo¿e byæ M-x fundamental-mode, które jest poleceniem prze³±czaj±cym tryb podstawowy. Je¶li zamierzasz edytowaæ tekst w jêzyku angielskim, taki jak na przyk³ad oryginalna wersja tego podrêcznika, prawdopodobnie powiniene¶ u¿ywaæ trybu tekstowego (ang. text mode). >> Napisz M-x text-mode. Nie musisz siê martwiæ, ¿adne z poleceñ, które do tej pory pozna³e¶, nie zmienia Emacsa w powa¿ny sposób. Mo¿esz jednak zauwa¿yæ, ze teraz M-f i M-b traktuj± apostrofy jako czê¶ci s³ów. Poprzednio, w trybie podstawowym, polecenia te traktowa³y apostrofy jako separatory s³ów. G³ówne tryby edycji wprowadzaj± zwykle subtelne zmiany, takie jak opisana powy¿ej: wiêkszo¶æ poleceñ robi dalej "to samo", robi to jednak w sposób troszeczkê inny. By zobaczyæ dokumentacjê na temat bie¿±cego g³ównego trybu edycji, naci¶nij C-h m. >> Naci¶nij C-u C-v raz lub wiêcej razy tak, by ta linia znalaz³a siê blisko góry ekranu. >> Naci¶nij C-h m, by zobaczyæ jak tryb tekstowy ró¿ni siê od trybu podstawowego. >> Naci¶nij q, by usun±æ dokumentacje z ekranu. G³ówne tryby edycji nazywaj± siê "g³ównymi", poniewa¿ s± tak¿e podrzêdne tryby edycji (ang. minor modes). Podrzêdne tryby edycji nie s± alternatyw± dla g³ównych trybów edycji, a jedynie ich niewielk± modyfikacj±. Ka¿dy podrzêdny tryb edycji mo¿e zostaæ w³±czony lub wy³±czony niezale¿nie od pozosta³ych podrzêdnych trybów edycji oraz niezale¿nie od g³ównego trybu edycji. Mo¿esz wiec u¿ywaæ jednego, kombinacji dowolnych, lub nie u¿ywaæ ¿adnego trybu podrzêdnego. Jednym z podrzêdnych trybów edycji, który jest bardzo u¿yteczny szczególnie do edycji tekstu angielskiego, jest tryb automatycznego wype³niania (ang. auto fill mode). Je¶li ten tryb jest w³±czony, Emacs lamie linie pomiêdzy s³owami automatycznie, gdy wstawiasz tekst i linia robi siê za szeroka. Tryb automatycznego wstawiania w³±cza siê na przyk³ad poprzez wywo³anie polecenia M-x auto-fill-mode. Je¶li ten tryb jest w³±czony to samo polecenie wy³±cza go, i vice versa. Mówimy, ze polecenie to "prze³±cza ten tryb". >> Napisz M-x auto-fill-mode. Wstawiaj potem liniê pe³n± "asdf " tak d³ugo, a¿ zobaczysz, ¿e siê podzieli na dwie linie. Musisz wstawiæ spacje pomiêdzy znaki, poniewa¿ tryb automatycznego wype³niania ³amie linie tylko tam, gdzie s± spacje. Margines jest zazwyczaj ustawiony na 70 znaków, ale mo¿esz go zmieniæ za pomoc± polecenia C-x f. Powiniene¶ podaæ mu argument liczbowy mówi±cy, w której kolumnie ma zostaæ ustawiony margines. >> Wywo³aj C-x f z argumentem równym 20. (C-u 2 0 C-x f). Napisz potem jaki¶ tekst i zauwa¿, ze Emacs wype³nia linie do d³ugo¶ci co najwy¿ej 20 znaków. Ustaw margines z powrotem na 70 znaków, wywo³uj±c jeszcze raz C-x f. Je¶li dokonujesz zmian wewn±trz akapitu, tryb automatycznego wype³niania nie wyrówna marginesu sam z siebie. By wywo³aæ polecenie wyrównania marginesu, naci¶nij M-q (Meta-q), podczas gdy kursor znajduje siê wewn±trz akapitu. >> Przesuñ kursor do poprzedniego akapitu i naci¶nij M-q. * SZUKANIE ---------- Emacs potrafi szukaæ ³añcuchów (zwartych ci±gów znaków lub s³ów) zarówno wstecz jaki i do przodu. Szukanie ³añcucha jest poleceniem, które przesuwa kursor; przesuwa ono kursor do nastêpnego miejsca, w którym dany ³añcuch wystêpuje. Polecenie Emacsa "search" ró¿ni siê od podobnych poleceñ innych edytorów w tym sensie, ze jest ono przyrostowe. Znaczy to, ze szukanie odbywa siê w trakcie, gdy Ty wpisujesz kolejne znaki ³añcucha, który ma zostaæ odnaleziony. Poleceniami zapocz±tkowuj±cymi szukanie s±: C-s dla szukania w przód oraz C-r dla szukania wstecz. POCZEKAJ PROSZÊ! Nie próbuj ich w tej chwili. Gdy naci¶niesz C-s zauwa¿ysz, ze tekst "I-search" pojawi siê w obszarze echa. Informuje Ciê to, ¿e Emacs znajduje siê w trybie "incremental search", czekaj±c by¶ napisa³ tekst, który ma on znale¼æ. Naci¶niecie koñczy proces szukania. >> Teraz naci¶nij C-s, by rozpocz±æ szukanie. POWOLI, litera po literze, napisz s³owo "kursor", zatrzymuj±c siê po ka¿dym znaku i obserwuj±c, gdzie zatrzymuje siê kursor. Gdy naci¶niesz drugie "r", bêdzie mo¿na powiedzieæ, ¿e szuka³e¶ s³owa "kursor" jednokrotnie. Naci¶nij C-s jeszcze raz, by znale¼æ nastêpne wyst±pienie s³owa "kursor". Naci¶nij teraz cztery razy i zobacz, co siê dzieje z kursorem. Naci¶nij , by skoñczyæ szukanie. Widzia³e¶, co siê dzia³o? Emacs podczas szukania przyrostowego próbuje przej¶æ do miejsca wyst±pienia ³añcucha, który do tej pory wpisa³e¶, pod¶wietlaj±c go dla Twojej wygody. By znale¼æ nastêpne wyst±pienie s³owa "kursor", po prostu naci¶nij C-s jeszcze raz. Je¶li takiego nie ma, Emacs zapiszczy i powie Ci, ze szukanie "skoñczy³o siê pora¿k±". Naci¶niecie C-g tak¿e przerywa proces szukania. UWAGA: W niektórych systemach naci¶niecie C-s zamrozi ekran i nie zobaczysz ¿adnego tekstu z Emacsa. Oznacza to, ¿e sk³adowa systemu operacyjnego, zwana kontrol± przep³ywu (ang. "flow control") przechwyci³a C-s i nie pozwoli³a mu dojsæ do Emacsa. By odzyskaæ kontrole nad ekranem, nacisnij C-q. Dodatkowej pomocy poszukaj w rozdziale "Spontaneous Entry to Incremental Search" w podrêczniku Emacsa. Jesli podczas szukania przyrostowego naci¶niesz zauwa¿ysz, ze ostatni znak, który wcisn±³es znika i kursor wraca do poprzedniego miejsca. Na przyk³ad, za³ó¿my, ze nacisn±³es "k" i znalaz³es pierwsze wyst±pienie tej litery. Jesli teraz naci¶niesz "u", kursor przesunie siê do pierwszego wyst±pienia "ku". Teraz nacisnij . Skasuje to "u" z ³añcucha, którego poszukujesz, a kursor wróci do pierwszego wyst±pienia "k". Je¶li podczas szukania nacisniesz jaki¶ klawisz razem z META lub CTRL (z nielicznymi wyj±tkami --- znakami, które maj± specjalne znaczenie podczas szukania, takimi jak C-s i C-r) szukanie zostanie przerwane. C-s rozpoczyna proces szukania, który poszukuje ³añcucha, który znajduje siê ZA bie¿±c± pozycja kursora. Je¶li chcesz szukaæ czego¶ wcze¶niej w tek¶cie, naci¶nij C-r. Wszystko, co powiedzieli¶my o C-s stosuje siê do C-r, oczywi¶cie ze zmian± kierunku szukania na wstecz. * WIELE OKIEN ------------- Jedn± z przyjemnych cech Emacsa jest mo¿liwo¶æ wy¶wietlania wiêcej ni¿ jednego okna na raz. >> Przesuñ kursor do tej linii i naci¶nij C-u 0 C-l. >> Naci¶nij teraz C-x 2, co podzieli ekran na dwa okna. Obydwa okna wy¶wietlaj± ten podrêcznik. Kursor pozostaje w górnym oknie. >> Naci¶nij C-M-v by przewin±æ dolne okno. (Je¶li nie masz prawdziwego klawisza Meta, naci¶nij ESC C-v.) >> Naci¶nij C-x o ("o" jak angielskie "other") by przesun±æ kursor do dolnego okna. U¿yj C-v i M-v w dolnym oknie by przewin±æ jego zawarto¶æ. Polecenia, które masz wykonaæ czytaj w górnym oknie. >> Naci¶nij C-x o jeszcze raz tak, by kursor wróci³ do górnego okna. Kursor w górnym oknie nie zmieni³ po³o¿enia. Ka¿de okno pamiêta po³o¿enie swojego w³asnego kursora, lecz tylko jedno okno w danej chwili wy¶wietla kursor. Wszystkie polecenia edycyjne stosuj± siê do okna, w którym jest kursor. To okno nazywane jest "wybranym oknem". Polecenie C-M-v jest bardzo u¿yteczne gdy edytujesz tekst w jednym oknie, a drugiego u¿ywasz tylko jako punkt odniesienia. Dziêki temu kursor mo¿e zawsze znajdowaæ siê w oknie, zawarto¶æ którego edytujesz, a Ty mo¿esz przesuwaæ drugie okno za pomoc± C-M-v. C-M-v to przyk³ad znaku, który uzyskuje siê za pomoc± CONTROL-META. Je¶li masz prawdziwy klawisz META, C-M-v mo¿esz uzyskaæ przytrzymuj±c jednocze¶nie CTRL oraz META i naciskaj±c v. Nie jest wa¿ne, co zosta³o naci¶niete wcze¶niej, CTRL czy META, poniewa¿ obydwa te klawisze dzia³aj± jako modyfikatory znaczenia klawiszy, które naciskasz. Je¶li nie masz klawisza META i u¿ywasz w jego zastêpstwie ESC, kolejno¶æ naciskania klawiszy jest znacz±ca: musisz najpierw nacisn±æ i pu¶ciæ ESC, po czym nacisn±æ CTRL-v; CTRL-ESC v nie bêdzie dzia³aæ. Dzieje siê tak dlatego, ze ESC jest znakiem, a nie modyfikatorem. >> Naci¶nij C-x 1 (w górnym oknie), by pozbyæ siê dolnego okna. (Je¶li nacisn±³by¶ C-x 1 w dolnym oknie, to znik³oby górne. Mo¿esz sobie t³umaczyæ to polecenie jako "zatrzymaj tylko jedno okno --- to w którym w³a¶nie jestem".) Nie musisz wy¶wietlaæ tego samego bufora w obydwu oknach. Je¶li u¿yjesz C-x C-f by wy¶wietliæ plik w jednym z okien, zawarto¶æ drugiego nie zmieni siê. W ka¿dym oknie mo¿esz wy¶wietlaæ ró¿ne pliki niezale¿nie. Oto inny sposób u¿ywania dwóch okien do wy¶wietlania dwóch ró¿nych rzeczy: >> Naci¶nij C-x 4 C-f i nazwê jednego z Twoich plików. Zakoñcz wprowadzanie klawiszem . Podany plik pojawi siê w dolnym oknie razem z kursorem, który tam przeskakuje. >> Naci¶nij C-x o, by wróciæ do górnego okna, oraz C-x 1 by usun±æ dolne okno. * REKURSYWNE POZIOMY EDYCJI --------------------------- Czasami mo¿esz znale¼æ siê w czym¶, co nazywa siê "rekursywnym poziomem edycji". Mo¿esz to rozpoznaæ po nawiasach kwadratowych w linii trybu, obejmuj±cych nawiasy okr±g³e zawieraj±ce nazwê g³ównego trybu edycji. Na przyk³ad, móg³by¶ widzieæ [(Fundamental)] zamiast (Fundamental). By wyj¶æ z rekursywnego poziomu edycji naci¶nij ESC ESC ESC. Jest to ogólnego przeznaczenia "wychodzimy". Mo¿esz go u¿yæ tak¿e by pozbyæ siê nadmiaru okien lub wyj¶æ z minibufora. >> Naci¶nij M-x by wej¶æ do minibufora; naci¶nij potem ESC ESC ESC, by z niego wyj¶æ. Nie mo¿esz u¿yæ C-g, by wyj¶æ z rekursywnego poziomu edycji. Dzieje siê tak dlatego, ze C-g jest u¿ywane do anulowania poleceñ i argumentów WEWN¡TRZ rekursywnego poziomu edycji. SZUKANIE DODATKOWEJ POMOCY -------------------------- W tym podrêczniku spróbowali¶my dostarczyæ tylko tyle informacji, ile jest niezbêdne, by¶ móg³ zacz±æ u¿ywaæ Emacsa. Emacs jest istn± kopalni± najró¿niejszych rzeczy, których nie sposób tutaj opisaæ. Zapewne bêdziesz chcia³ dowiedzieæ siê wiêcej o Emacsie, poniewa¿ posiada on wiele po¿±danych cech, o których na razie nic nie wiesz. Jest w nim zaszyte mnóstwo wewnêtrznej dokumentacji, która mo¿e byæ osi±gniêta za pomoc± Control-h, które okre¶lamy mianem "znaku pomocy" z powodu spe³nianej przez niego roli. By uzyskaæ pomoc, naci¶nij C-h a potem znak, który okre¶la jakiego typu pomocy oczekujesz. Je¶li poczujesz siê NAPRAWDÊ zagubiony, napisz C-h ? i Emacs spróbuje powiedzieæ Ci, jakiego typu pomocy mo¿e Ci dostarczyæ. Je¶li naci¶niesz C-h a potem zadecydujesz, ¿e pomoc nie jest Ci jednak potrzebna, po prostu wci¶nij C-g by anulowaæ C-h. Najprostsz± pomoc mo¿esz uzyskaæ naciskaj±c C-h c. Naci¶nij C-h a potem c, po czym kombinacje klawiszy polecenia, i Emacs wy¶wietli bardzo krótki opis polecenia. >> Naci¶nij C-h c Control-p. Powinno to przywo³aæ komunikat, o tre¶ci podobnej do C-p runs the command previous-line W ten sposób mo¿esz uzyskaæ "nazwê funkcji". Przydaje siê to podczas pisania kodu w Lispie, który rozszerza Emacsa; wystarcza to tak¿e do przypomnienia Ci, co dane polecenie robi, je¶li widzia³e¶ je ju¿ wcze¶niej, ale nie zapamiêta³e¶ go. Polecenia wywo³ywane za pomoc± wieloznakowej kombinacji klawiszy, na przyk³ad C-x C-s oraz (je¶li nie masz klawisza META lub EDIT) v, s± tak¿e dopuszczalne po C-h c. By uzyskaæ wiêcej informacji na temat polecenia, naci¶nij C-h k zamiast C-h c. >> Naci¶nij C-h k Control-p. To polecenie wy¶wietla dokumentacjê na temat danej funkcji oraz jej nazwê w oknie Emacsa. Gdy skoñczysz ¶ledziæ wynik tego polecenia naci¶nij C-x 1, by pozbyæ siê tekstu pomocy. Nie musisz tego robiæ od razu. Mo¿esz wykonaæ pewne operacje w oparciu o tekst pomocy zanim naci¶niesz C-x 1. Oto kilka innych u¿ytecznych wariantów C-h: C-h f Opisz funkcje o podanej nazwie. >> Napisz C-h f previous-line. Wypisze to na ekranie ca³± informacje, jak± Emacs ma na temat funkcji, która implementuje polecenie C-p. C-h a Apropos. Wpisz s³owo kluczowe, a Emacs wypisze listê wszystkich poleceñ, których nazwa zawiera to s³owo. Polecenia te mog± zostaæ wywo³ane za pomoc± Meta-x. Dla niektórych poleceñ Apropos wypisze jedno- lub dwuznakowe sekwencje, które wywo³uj± dane polecenie. >> Napisz C-h a file. Zobaczysz listê wszystkich poleceñ, dostêpnych za pomoc± M-x, które maja s³owo "file" w swojej nazwie. Zauwa¿ysz tam tak¿e polecenia takie, jak C-x C-f oraz C-x C-w, umieszczone obok nazw poleceñ "find-file" i "write-file". PODSUMOWANIE ------------ Pamiêtaj, ¿e by wyj¶æ z Emacsa na sta³e, u¿ywaj C-x C-c. By wyj¶æ do pow³oki na chwilê tak, by¶ móg³ wróciæ, u¿yj C-z. (To nie dzia³a pod X-Windows, poniewa¿ tam nie ma prawdziwego konceptu przej¶cia na chwile do pow³oki. Zamiast tego C-z ikonizuje okno Emacsa.) Ten podrêcznik by³ pisany tak, by wszyscy nowi u¿ytkownicy mogli go zrozumieæ. Je¶li co¶ pozostawi³ niejasnym, nie sied¼ cicho i nie obwiniaj siebie, tylko daj nam znaæ! KOPIOWANIE ---------- Niniejszy podrêcznik jest potomkiem w d³ugiej linii podrêczników Emacsa, która rozpoczyna siê od tego, który zosta³ napisany przez Stuarta Cracrafta dla oryginalnego Emacsa. Zosta³ on zmodyfikowany we wrze¶niu 1994 przez Bena Winga, który zaktualizowa³ go, je¶li chodzi o X-Windows. T³umaczenia na jêzyk polski dokona³ Remek Trzaska z pomoc± Ryszarda Kubiaka. Jesli polskie znaki nie byly poprawnie wyswietlane w tym buforze, oznacza to, ze nie masz zainstalowanych polskich fontow. Pomoc w tym zakresie mozesz znalezc pod adresem: Ta wersja podrêcznika, podobnie jak GNU Emacs, jest zastrze¿ona, a pozwolenie na kopiowanie udzielone jest pod nastêpuj±cymi warunkami: Copyright (c) 1985, 1994 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. Warunki kopiowania samego Emacsa s± w pewnym stopniu inne, aczkolwiek zachowuj± te sama idee. Proszê, przeczytaj plik COPYING, po czym rozdaj swoim znajomym kopie Emacsa. Pomó¿ zwalczyæ przeszkody w rozpowszechnianiu oprogramowania przez tworzenie i dzielenie siê oprogramowaniem. xemacs-21.4.22/etc/TUTORIAL.ro0000644000175000017500000014541006546103440013627 0ustar acsacsCopyright (c) 1998 Tudor Hulubei Mulþumiri Aidei Hulubei pentru corecturi ºi sugestii. A se citi sfârºitul pentru condiþii. Aceastã versiune a fost produsã plecând de la versiunea în limba englezã, care este Copyright (c) 1985, 1996 Free Software Foundation, Inc. Citiþi acum versiunea româneascã a tutorialului de Emacs. Comenzile Emacs folosesc în general tasta CONTROL (uneori denumitã CTRL sau CTL) sau tasta META. Pe unele tastaturi, tasta META este etichetatã ALT, EDIT sau în alt fel (de exemplu, pe tastaturile Sun, tasta META este etichetatã cu un diamant ºi se gãseºte la stânga tastei spaþiu). Dacã nu aveþi o tastã META, puteþi folosi ESC în loc. În loc sã scriem META sau CONTROL de fiecare datã când vrem sã prefixãm un caracter, vom folosi urmãtoarele prescurtãri: C- înseamnã cã þineþi apãsatã tasta CONTROL în timp ce tastaþi caracterul . Astfel, C-f înseamnã: þineþi apãsatã tasta CONTROL ºi tastaþi f. M- înseamnã cã þineþi apãsatã tasta META în timp ce tastaþi . Dacã nu existã tasta META, tastaþi , ridicaþi ºi apoi tastaþi caracterul . Observaþie importantã: pentru a termina sesiunea Emacs, tastaþi C-x C-c. (Douã caractere.) Caracterele ">>" la marginea din stânga reprezintã instrucþiuni pentru a încerca o comandã. De exemplu: <> >> Acum tastaþi C-v (citirea urmãtorului ecran) pentru a vã muta la urmãtorul ecran. (Executaþi aceastã comandã acum, tinând apãsatã tasta CONTROL în timp ce tastaþi v). De acum înainte faceþi acest lucru din nou, de fiecare datã când terminaþi de citit ecranul. De remarcat cã existã o zonã de suprapunere de douã linii când vã mutaþi de la un ecran la altul; aveþi astfel o oarecare continuitate în citirea textului. Primul lucru pe care trebuie sã-l stiþi este cum sã vã deplasaþi din loc în loc în text. ªtiþi deja cum sã vã mutaþi la urmãtorul ecran cu C-v. Pentru a vã deplasa înapoi un ecran, tastaþi M-v (þineþi apãsatã tasta META ºi tastaþi v, sau v dacã nu aveþi o tastã META, EDIT, sau ALT). >> Încercaþi sã tastaþi M-v ºi apoi C-v de câteva ori. * SUMAR ------- Urmãtoarele comenzi sunt utile pentru a vedea ecrane: C-v avanseazã un ecran M-v înapoi un ecran C-l ºterge ecranul ºi reafiºeazã totul poziþionând textul de lângã cursor în centrul ecranului. (Este C-L, nu C-1.) >> Gãsiþi cursorul ºi þineþi minte ce text este în jurul lui. Apoi tastaþi C-l. Gãsiþi cursorul din nou ºi observaþi cã textul de lângã cursor este acelaºi. * COMENZI DE BAZà PENTRU CONTROLUL CURSORULUI --------------------------------------------- Mutatul ecran cu ecran este util, dar cum vã mutaþi la o anumitã poziþie în textul de pe ecran? Sunt mai multe modalitaþi în care puteþi face acest lucru. Cel mai simplu este sã folosiþi comenzile C-p, C-b, C-f ºi C-n. Fiecare din aceste comenzi mutã cursorul o linie sau coloanã într-o anumitã direcþie pe ecran. Diagrama urmãtoare prezintã aceste patru comenzi ºi aratã direcþiile în care ele mutã cursorul. Linia precedentã, C-p : : Înapoi, C-b .... Poziþia curentã a cursorului .... Înainte, C-f : : Linia urmãtoare, C-n >> Mutaþi cursorul la linia din mijlocul diagramei folosind C-n sau C-p. Tastaþi apoi C-l pentru a vedea întreaga diagramã centratã pe ecran. Vi se va pãrea probabil mai simplu sã vã amintiþi aceste comenzi gândindu-vã la semnificaþia lor în limba englezã: P pentru previous, N pentru next, B pentru backward ºi F pentru forward. Acestea sunt comenzile de bazã pentru poziþionarea cursorului ºi le veþi folosi tot timpul, deci ar fi foarte util sã le învãþaþi acum. >> Tastaþi câteva C-n-uri pentru a aduce cursorul la aceastã linie. >> Mutaþi-vã în interiorul liniei cu C-f-uri ºi apoi în sus cu C-p-uri. Urmãriþi ce face C-p atunci când cursorul este în mijlocul liniei. Fiecare linie se terminã cu un caracter NEWLINE care o separã de linia urmãtoare. Ultima linie în fiºierele dumneavoastrã ar trebui sã aibã un asemenea caracter la sfârºit (deºi Emacs-ul nu-l necesitã). >> Încercaþi sã tastaþi C-b la începutul unei linii. Cursorul ar trebui sã se mute la sfârºitul liniei precedente, din cauza trecerii peste caracterul NEWLINE. C-f poate sã treacã peste un caracter NEWLINE, la fel ca ºi C-b. >> Tastaþi câteva C-b-uri, pentru a vã familiariza cu poziþia cursorului. Tastaþi apoi câteva C-f-uri pentru a vã întoarce la sfârºitul liniei. Încã un C-f ºi vã veþi muta la linia urmãtoare. Când ajungeþi sã treceþi peste începutul sau sfârºitul ecranului, textul aflat dincolo de margine intrã în ecran, permiþându-i Emacs-ului sã mute cursorul la poziþia specificatã, fãrã a ieºi din zona vizibilã (ecran). Aceastã operaþiune se numeste în limba englezã "scrolling". >> Încercaþi sã mutaþi cursorul în afara pãrþii de jos a ecranului cu C-n ºi observaþi ce se întamplã. Dacã mutatul caracter cu caracter este lent, puteþi muta cursorul cuvânt cu cuvânt. M-f (META-f) avanseazã cursorul cu un cuvânt, iar M-b mutã cursorul un cuvânt înapoi. >> Tastaþi câteva M-f-uri ºi apoi câteva M-b-uri. Când cursorul este în mijlocul unui cuvânt, M-f îl mutã la sfârºitul cuvântului. Când cursorul este în spaþiul dintre cuvinte, M-f îl mutã la sfârºitul cuvântului urmãtor. M-b acþioneazã similar, dar în direcþia opusã. >> Tastaþi M-f ºi M-b de câteva ori, intercalate cu C-f-uri ºi C-b-uri, pentru a observa efectul comenzilor M-f ºi M-b din diverse poziþii în interiorul cuvintelor ºi între ele. Observaþi paralela între C-f ºi C-b pe de o parte, ºi M-f ºi M-b pe de cealaltã parte. De multe ori, caracterele META sunt folosite pentru operaþii referitoare la unitãþile definite de limbaj (cuvinte, fraze, paragrafe), în timp ce caracterele CONTROL opereazã pe unitãþi de bazã, care sunt independente de tipul textului editat (caractere, linii, etc). Aceastã paralelã se aplicã ºi între linii ºi fraze: C-a ºi C-e mutã cursorul la începutul ºi, respectiv sfârºitul unei linii, în timp ce M-a ºi M-e îl mutã la începutul ºi, respectiv sfârºitul unei fraze. >> Încercaþi câteva C-a-uri, apoi câteva C-e-uri. Încercaþi câteva M-a-uri, apoi câteva M-e-uri. Remarcaþi cum repetarea tastãrii lui C-a nu schimbã nimic, în timp ce repetarea tastãrii lui M-a mutã cursorul la fraza urmãtoare. Deºi aceste operaþii nu sunt tocmai analoage, fiecare pare naturalã. Poziþia cursorului în text mai este numitã ºi "punct" ("point" în limba englezã). Cursorul aratã pe ecran poziþia punctului în text. Operaþiile ce mutã cursorul (inclusiv comenzile ce mutã cursorul cuvânt cu cuvânt sau frazã cu frazã) sunt prezentate în sumarul urmãtor: C-f avanseazã un caracter C-b înapoi un caracter M-f avanseazã un cuvânt M-b înapoi un cuvânt C-n avanseazã o linie C-p înapoi o linie C-a înapoi la începutul liniei C-e avanseazã la sfârºitul liniei M-a înapoi la începutul frazei M-e avanseazã la sfârºitul frazei >> Exersaþi toate aceste comenzi acum, sunt comenzile cele mai des folosite. Douã alte comenzi importante legate de mutatul cursorului sunt M-< (META Mai-mic), care mutã cursorul la începutul textului, ºi M-> (META Mai-mare), care mutã cursorul la sfârºitul textului. Pe majoritatea terminalelor "<" este deasupra virgulei ºi deci este necesar sã apãsaþi tasta SHIFT în acelaºi timp. Pe aceste terminale este nevoie sã apãsaþi SHIFT ºi când tastaþi M-<; fãrã tasta SHIFT, aþi apãsa M-virgulã. >> Încercaþi M-< acum, pentru a vã muta la începutul tutorialului. Folosiþi apoi C-v în mod repetat pentru a ajunge înapoi aici. >> Încercaþi M-> acum, pentru a vã muta la sfârºitul tutorialului. Folosiþi apoi M-v repetat pentru a ajunge înapoi aici. Puteþi de asemenea sã mutaþi cursorul cu tastele sãgeþi, dacã terminalul are asemenea taste. Se recomandã însã acomodarea cu C-b, C-f, C-n ºi C-p din trei motive. În primul rând, aceste taste funcþioneazã pe toate tipurile de terminale. În al doilea rând, odatã ce vã obiºnuiþi cu Emacs-ul, veþi remarca faptul cã tastarea lor este mai rapidã decât cea a tastelor sãgeþi (pentru cã nu trebuie sã vã schimbaþi poziþia mâinilor pe tastaturã). În al treilea rând, odatã format obiceiul de a folosi aceste comenzi bazate pe CONTROL, comenzile avansate de mutat cursorul se învaþã foarte uºor. Majoritatea comenzilor Emacs acceptã un argument numeric; pentru majoritatea comenzilor, acest argument reprezintã un contor de repetiþie. Contorul de repetiþie se introduce tastând C-u, cifrele ce alcãtuiesc contorul ºi apoi comanda. Dacã aveþi tasta META (EDIT sau ALT), existã ºi o altã alternativã pentru a introduce un argument numeric: tastaþi cifrele în timp ce þineþi tasta META apãsatã. Se recomandã însã folosirea metodei cu C-u, deoarece funcþioneazã pe orice terminal. De exemplu, C-u 8 C-f avanseazã cursorul cu opt caractere. >> Încercaþi sã folosiþi C-n sau C-p cu un argument numeric pentru a muta cursorul dintr-o singurã comandã pe o linie apropiatã de aceasta. Majoritatea comenzilor utilizeazã argumentul numeric ca un contor de repetitie. Anumite comenzi speciale îl folosesc însa în mod diferit. C-v si M-v sunt printre aceste excepþii. Când li se dã un argument numeric, ele mutã ecranul mai sus sau mai jos cu numarul specificat de linii, nu de ecrane. De exemplu, C-u 4 C-v mutã ecranul cu 4 linii. >> Încercaþi sã tastaþi C-u 8 C-v acum. Aceastã comandã trebuie sã mute ecranul în sus cu 8 linii. Dacã doriti sã îl mutaþi înapoi, puteþi sã-i daþi lui M-v un argument numeric. Dacã folosiþi sistemul X Window, existã probabil o zonã rectangularã numita "scroll bar" la dreapta ferestrei Emacs-ului. Puteþi deplasa textul manipulând "scroll bar"-ul cu mouse-ul. >> Încercaþi sã apãsaþi butonul din mijloc al mouse-ului la mijlocul butonului din scroll bar. Aceasta ar trebui sã mute textul la o poziþie determinatã de cât de sus sau de jos aþi apãsat pe scroll bar. >> Mutaþi mouse-ul într-un punct în scroll bar la aproximativ trei linii de început ºi apãsaþi butonul din stânga de câteva ori. * CONTROLUL CURSORULUI ÎNTR-UN TERMINAL X ----------------------------------------- Dacã aveþi un terminal X, vi se va pãrea probabil mai uºor sã folosiþi tastele de pe keypad pentru a controla cursorul. Sãgeþile stânga, dreapta, sus ºi jos mutã cursorul în direcþia specificatã; funcþioneaza exact ca ºi C-b, C-f, C-p ºi C-n, dar sunt mai uºor de tastat ºi reþinut. Puteþi folosi de asemenea C-stânga ºi C-dreapta pentru a vã deplasa cuvânt cu cuvânt, ºi C-sus ºi C-jos, pentru a vã deplasa bloc cu bloc (de ex. paragraf cu paragraf, dacã editaþi text). Dacã tastatura are taste etichetate HOME (sau BEGIN) ºi END, acestea vã vor muta la începutul, respectiv sfârºitul liniei, iar C-home ºi C-end vã vor muta la începutul, respectiv sfârºitul fiºierului. Dacã tastatura are taste etichetate PgUp ºi PgDn, acestea vã vor muta ecran cu ecran, exact ca M-v ºi C-v. Toate aceste comenzi acceptã argument numeric, aºa cum am explicat mai sus. Puteþi folosi o modalitate mai simplã de a-l introduce: þineþi apãsatã tasta CONTROL sau tasta META ºi tastaþi numãrul. De exemplu, pentru a vã muta 12 cuvinte la dreapta, tastaþi C-1 C-2 C-dreapta. De remarcat faptul cã este foarte uºor sã tastaþi, pentru cã nu trebuie sã ridicaþi tasta CONTROL. * CÂND EMACS-ul ESTE BLOCAT --------------------------- Dacã Emacs-ul înceteazã sã vã raspundã la comenzi, îl puteþi opri, fãrã sã pierdeþi modificãrile fãcute pânã atunci, tastând C-g. Puteþi folosi C-g pentru a opri o comandã care dureazã prea mult. Puteþi de asemenea folosi C-g pentru a opri introducerea unui argument numeric sau începutul unei comenzi pe care nu doriþi sã o continuaþi. >> Tastaþi C-u 100 pentru a introduce 100 ca un argument numeric, apoi tastaþi C-g. Tastaþi apoi C-f. Cursorul ar trebui sã se mute un singur caracter, pentru cã aþi oprit introducerea argumentului numeric cu C-g. Dacã aþi tastat un din greºealã, puteþi sã-l anulaþi cu un C-g. * COMENZI DEZAFECTATE --------------------- Anumite comenzi sunt dezafectate în Emacs, în aºa fel încât utilizatorii sã nu le poatã folosi din neatenþie. Dacã tastaþi una din comenzile dezafectate, Emacs-ul va afiºa un mesaj spunând ce comandã aþi tastat ºi întrebându-vã dacã doriþi sã continuaþi. Dacã într-adevãr doriþi sã încercaþi comanda respectivã, tastaþi SPAÞIU. În mod normal, dacã nu doriþi sã executaþi comanda dezafectatã, rãspundeþi cu "n". >> Tastaþi `C-x n p' (care este o comandã dezafectatã), apoi tastaþi n ca rãspuns la întrebarea pusã de Emacs. * FERESTRE ---------- Emacs-ul poate avea mai multe ferestre, fiecare afiºând propriul sãu text. De remarcat cã "fereastrã" în sensul folosit de Emacs nu se referã la ferestrele ce se pot suprapune într-un sistem bazat pe ferestre (cum ar fi X Window System), ci la secþiuni separate într-o singurã fereastrã X. (Emacs-ul poate avea multiple ferestre X - "frame"-uri în terminologia Emacs. Acestea vor fi descrise mai târziu.) În acest moment este mai bine sã nu detaliem tehnicile de folosire a ferestrelor multiple, dar trebuie sã ºtiþi cum sã închideþi ferestrele care ar putea apare ca rezultat al afiºãrii unor documentaþii sau rezultate specifice anumitor comenzi. Este simplu: C-x 1 o singurã fereastrã (adicã închide toate celelalte ferestre). Asta înseamnã CONTROL-x urmat de cifra 1. C-x 1 mãreºte fereastra care conþine cursorul pânã când ocupã întregul ecran. Toate celelalte ferestre sunt distruse. >> Mutaþi cursorul la aceastã linie ºi tastaþi C-u 0 C-l. (Dupã cum vã amintiþi, C-l redeseneazã ecranul. Un argument numeric înseamnã "redeseneazã ecranul ºi pune linia curentã la o distanþã (în numãr de linii) de partea de sus a ecranului egalã cu argumentul numeric". În concluzie, C-u 0 C-l înseamnã "redeseneazã ecranul, poziþionând linia curentã la început.") >> Tastaþi C-x 2. Observaþi cum aceastã fereastrã se micºoreazã, în timp ce o nouã fereastrã apare, afiºând acelaºi text. >> Tastaþi C-x 1 ºi observaþi cum noua fereastrã dispare. * INTRODUCEREA ªI ªTERGEREA --------------------------- Dacã vreþi sã introduceþi text, pur ºi simplu tastaþi textul dorit. Caracterele pe care le puteþi vedea, cum ar fi A, 7, *, etc. sunt interpretate de Emacs ca text ºi introduse imediat. Tastaþi (tasta mai este etichetatã uneori) pentru a introduce un caracter NEWLINE. Puteþi ºterge ultimul caracter pe care l-aþi introdus tastând . este o tastã pe tastaturã etichetatã "Del" sau "Delete". În unele cazuri tasta "Backspace" poate acþiona ca , dar nu întotdeauna! Mai general, ºterge caracterul dinaintea poziþiei curente a cursorului. >> Executaþi urmãtoarele operaþii acum - tastaþi câteva caractere, apoi ºtergeþi-le tastând de câteva ori. Nu vã temeþi cã veþi schimba acest fiºier; nu veþi altera versiunea principalã a tutorialului. Aceasta este copia dumneavoastrã personalã. Când o linie de text devine prea mare pentru a putea fi reprezentatã pe o linie de ecran, linia de text este continuatã pe urmãtoarea linie de pe ecran. Un caracter backslash ("\") la marginea din dreapta indicã o linie care a fost continuatã. >> Introduceþi text pânã când depãºiþi cu câteva caractere marginea din dreapta a ecranului. Veþi observa apariþia liniei de continuare. >> Folosiþi -uri pentru a ºterge textul pânã când linia încape din nou pe o linie de ecran. Linia de continuare va dispãrea. Puteþi ºterge un caracter NEWLINE ca pe orice alt caracter. ªtergerea unui NEWLINE dintre douã linii concateneaza cele douã linii. Dacã linia rezultatã este prea lungã pentru a fi afiºatã pe ecran, va fi afiºatã cu o linie de continuare. >> Mutaþi cursorul la începutul unei linii ºi tastaþi . Aceasta concateneazã linia curentã cu cea precedentã. >> Tastaþi pentru a reintroduce caracterul NEWLINE ºters. Aºa cum vã reamintiþi, majoritatea comenzilor Emacs pot primi un argument numeric ce acþioneazã ca un contor de repetiþie; introducerea caracterelor ascultã aceleaºi reguli. Un argument numeric dat unui caracter duce la introducerea caracterului respectiv de numãrul specificat de ori. >> Încercaþi asta acum - tastaþi C-u 8 * pentru a introduce ********. Aþi învãþat acum metodele elementare de tastat ºi corectat erori în Emacs. Puteþi de asemenea ºterge cuvinte sau linii. Acesta este un sumar al operaþiilor de ºtergere. ºterge caracterul de dinaintea cursorului C-d ºterge caracterul de dupã cursor M- ºterge cuvântul de dinaintea cursorului M-d ºterge cuvântul de dupã cursor C-k ºterge de la poziþia curentã pânã la sfârºitul liniei M-k ºterge de la poziþia curentã pânã la sfârºitul frazei De remarcat cã ºi C-d versus M- ºi M-d extind paralela începutã de C-f ºi M-f ( nu este cu adevãrat un caracter bazat pe CONTROL, dar nu o sã ne ocupãm de asta acum). C-k ºi M-k sunt ca C-e ºi M-e, într-un fel, dacã facem o paralelã între linii ºi fraze. Când ºtergeþi mai mult de un caracter la un moment dat, Emacs-ul pãstreazã intern textul distrus în aºa fel încât îl puteþi restaura. Termenul folosit de Emacs pentru operaþiunea de restaurare a textului distrus este "yanking". Puteþi restaura textul distrus fie în acelaºi loc, fie în alt loc în fiºier. Puteþi de asemenea restaura textul de mai multe ori pentru a face mai multe copii. Comanda de restaurare este C-y. Diferenþa dintre "distrugerea" ºi "ºtergerea" unei porþiuni din text este aceea ca porþiunile de text "distruse" pot fi restaurate, în timp ce porþiunile de text "ºterse", nu. În general, comenzile care distrug porþiuni semnificative din text, pãstreazã intern textul respectiv, în timp ce comenzile care ºterg doar un caracter, linii goale sau spaþii, nu fac acest lucru. >> Mutaþi cursorul la începutul unei linii care nu este goalã. Tastaþi apoi C-k pentru a distruge textul de pe linia respectivã. >> Tastaþi C-k o a doua oarã. Veþi observa distrugerea caracterului NEWLINE de la sfârºitul liniei. Dupã cum vedeþi, un singur C-k distruge conþinutul liniei, iar un al doilea C-k distruge linia însãºi, facând toate celelalte linii sã se mute în sus. C-k trateazã un argument numeric în mod special: distruge numãrul specificat de linii ºi conþinutul lor. Aceastã comportare nu este doar o simplã repetiþie. C-u 2 C-k distruge douã linii ºi NEWLINE-urile de dupã ele; tastând C-k de douã ori nu obþineþi acelaºi rezultat. Pentru a extrage ultimul text distrus ºi a-l plasa la poziþia curentã a cursorului, tastaþi C-y. >> Tastaþi C-y pentru a restaura textul distrus anterior. Gânditi-vã la C-y ca ºi cum aþi recupera ceva ce v-a fost luat. Observaþi cã dacã executaþi mai multe C-k-uri la rând, tot textul distrus este stocat într-o singurã bucatã, în aºa fel încât un singur C-y va restaura toate liniile. >> Tastaþi acum C-k de câteva ori. Acum încercaþi sã restauraþi textul distrus: >> Tastaþi C-y. Mutaþi apoi cursorul câteva linii mai jos ºi tastaþi C-y din nou. Veþi vedea cum se copiazã porþiuni de text. Ce faceþi dacã aveþi porþiuni de text pe care vreþi sã le restauraþi, dar între timp distrugeþi o altã porþiune de text? C-y va restaura porþiunea de text care a fost distrusã cel mai recent. Cu toate acestea, textul distrus anterior nu este pierdut. Puteþi sã-l restauraþi folosind comanda M-y. Dupã ce aþi executat C-y pentru a obþine textul cel mai recent distrus, tastând M-y veþi înlocui textul ce tocmai a fost restaurat cu textul distrus înaintea lui. Tastând M-y de mai multe ori puteþi obþine porþiuni de text distrus din ce în ce mai vechi. Odatã ajunºi la textul care vã intereseazã, puteþi sã continuaþi editarea fãrã sã mai faceþi nimic special, lasând textul restaurat în poziþia în care se gãseºte. Dacã tastaþi M-y de suficient de multe ori, veþi ajunge în cele din urmã la punctul de plecare (textul distrus cel mai de curând). >> Distrugeþi o linie, mutaþi-vã puþin în jurul ei, distrugeþi o altã linie. Executaþi apoi C-y pentru a obþine înapoi cea de-a doua linie distrusã. Executaþi apoi M-y ºi veþi constata cã este înlocuitã de prima linie distrusã. Executaþi mai multe M-y-uri ºi observaþi ce obþineþi. Continuaþi sã le executaþi pânã când a doua linie apare din nou, etc. Dacã doriþi, puteþi încerca sã-i daþi comenzii M-y argumente numerice pozitive ºi negative. * ANULARE --------- Dacã faceþi o schimbare în text, ºi apoi constataþi cã aþi greºit, puteþi anula schimbarea cu comanda de anulare, C-x u. În mod normal, C-x u anuleazã schimbãrile fãcute de o comandã; dacã repetaþi C-x u de câteva ori la rând, fiecare nouã repetiþie anuleazã încã o comandã. Existã însã douã excepþii: comenzile care nu schimbã textul nu sunt luate în considerare (acestea includ comenzile de mutat cursorul ºi cele de "scrolling"), iar caracterele introduse individual sunt tratate în grupuri de maxim 20. (Motivaþia din spatele acestei abordãri este aceea de a reduce numãrul de C-x u-uri pe care trebuie sã le tastaþi pentru anularea inserãrilor de text). >> Distrugeþi linia aceasta cu C-k, apoi tastaþi C-x u; linia ar trebui sã reaparã. C-_ este o altã comandã de anulare; funcþioneazã exact ca ºi C-x u, dar este mai uºor de tastat de mai multe ori la rând. Dezavantajul lui C-_ este cã pe anumite tastaturi nu este clar cum trebuie tastat. Din acest motiv existã C-x u. Pe unele terminale se poate sã tastaþi C-_ tastând "/" în timp ce þineþi apãsatã tasta CONTROL. Un argument numeric la C-_ sau C-x u acþioneazã ca un contor de repetiþie. * FIªIERE --------- Pentru a face permanente modificãrile din textul pe care îl editaþi, trebuie sã-l stocaþi (salvaþi) într-un fiºier. Altminteri, modificãrile se vor pierde în momentul pãrãsirii Emacs-ului. Puneþi textul într-un fiºier "deschizând" (sau "vizitând") fiºierul. Deschiderea unui fiºier înseamnã cã puteþi vedea conþinutul fiºierului în Emacs. Este ca ºi cum aþi edita chiar fiºierul, singura diferenþã fiind aceea cã schimbãrile nu devin permanente pânã când nu îl "salvaþi" ("save" în limba englezã). Se evitã astfel existenþa în sistem a unor fiºiere incomplet modificate atunci când nu doriþi acest lucru. Chiar ºi când salvaþi fiºierul, Emacs-ul pãstreazã fiºierul iniþial (cu un nume schimbat) în aºa fel încât sã-l puteþi recupera în cazul în care decideþi cã modificãrile efectuate au fost greºite. Aproape de marginea de jos a ecranului veþi observa o linie care începe ºi se terminã cu minusuri, ºi conþine ºirul "Emacs: TUTORIAL.ro". Aceastã parte a ecranului aratã întotdeauna numele fiºierului pe care îl vizitaþi. Acum vizitaþi fiºierul "TUTORIAL.ro" care este copia dumneavoastrã de încercãri a tutorialului în limba românã. Orice fiºier aþi edita, numele acelui fiºier va apãrea în poziþia respectivã. Comenzile pentru gãsirea ºi salvarea fiºierelor sunt diferite de celelalte comenzi pe care le-aþi învãþat, în sensul cã sunt compuse din douã caractere. Amândouã încep cu caracterul C-x. Existã o întreagã serie de comenzi care încep cu C-x; multe dintre ele sunt legate de fiºiere, buffere ºi alte lucruri înrudite. Aceste comenzi sunt compuse din douã, trei sau patru caractere. Comenzii de deschidere a unui fiºier trebuie sã îi spuneþi numele fiºierului dorit. Spunem despre comandã ca "citeºte un argument de la terminal" (în acest caz, argumentul este numele fiºierului). Dupã ce tastaþi comanda C-x C-f (deschide un fiºier) Emacs-ul vã va cere sã introduceþi numele fiºierului. Numele pe care îl tastaþi apare pe ultima linie a ecranului. Aceastã linie se numeste "minibuffer" când este folositã pentru acest tip de introducere. Comenzile normale de editare în Emacs pot fi folosite ºi pentru editarea numelui fiºierului. În timp ce introduceþi numele fiºierului (sau orice alt tip de introducere de date în minibuffer), puteþi anula comanda cu C-g. >> Tastaþi C-x C-f, apoi tastaþi C-g. Aceasta anuleazã minibuffer-ul, ºi, de asemenea, anuleazã comanda C-x C-f care îl folosea. În concluzie, nu veþi mai deschide nici un fiºier. Când aþi terminat de introdus numele fiºierului, tastaþi pentru a-l încheia. Dupã aceasta, comanda C-x C-f începe sã lucreze ºi deschide fiºierul pe care l-aþi ales. Minibuffer-ul dispare când comanda C-x C-f se terminã. Dupã câteva momente, conþinutul fiºierului apare pe ecran ºi îl puteþi edita. Când doriti sã faceþi schimbãrile permanente, tastaþi comanda C-x C-s (salveazã fiºierul) Aceasta copiazã textul din Emacs într-un fiºier. Prima oarã când faceþi acest lucru, Emacs-ul redenumeºte fiºierul iniþial în aºa fel încât sã nu se piardã. Noul nume este creat prin adãugarea caracterului "~" la numele iniþial. Când operaþiunea de salvare este terminatã, Emacs-ul afiºeazã numele fiºierului salvat. Se recomandã salvarea la intervale relativ mici, pentru a nu pierde prea multã muncã în cazul unei eventuale blocãri a sistemului. >> Tastaþi C-x C-s, pentru a salva copia tutorialului. Aceasta ar trebui sã afiºeze "Wrote ...TUTORIAL.ro" la marginea de jos a ecranului. OBSERVAÞIE: În unele sisteme, tastarea comenzii C-x C-s va bloca ecranul ºi nu veþi mai primi nici un de rãspuns din partea Emacs-ului. Aceasta indicã faptul cã o facilitate a sistemului de operare numitã "controlul fluxului" ("flow control" în limba englezã) intercepteazã C-s, nelasându-l sã ajungã la Emacs. Pentru deblocarea ecranului, tastaþi C-q. Puteþi gãsi detalii referitoare la aceastã aºa-numitã "facilitate" în secþiunea "Spontaneous Entry to Incremental Search" din manualul Emacs-ului. Puteþi deschide un fiºier existent, pentru a-l vedea sau edita. Puteþi de asemenea deschide un fiºier care nu existã. Aceasta este modalitatea în care creaþi noi fiºiere cu Emacs-ul: deschideþi fiºierul (care va fi gol iniþial), apoi începeþi sã introduceþi text în el. Când îi veþi cere sã "salveze" fiºierul, Emacs-ul va crea fiºierul cu textul pe care l-aþi introdus. De acum înainte puteþi considera cã editaþi un fiºier existent. * BUFFERE --------- Dacã deschideþi un al doilea fiºier cu C-x C-f, primul va continua sã existe în Emacs. Puteþi sã vã mutaþi înapoi la el deschizându-l din nou cu C-x C-f. În acest fel puteþi avea un numãr destul de mare de fiºiere deschise în Emacs. >> Creaþi un fiºier numit "foo" tastând C-x C-f foo . Introduceþi un text oarecare, editaþi-l, apoi salvaþi "foo" tastând C-x C-s. În cele din urmã, tastaþi C-x C-f TUTORIAL.ro pentru a vã întoarce la tutorial. Emacs-ul stocheazã textul fiecãrui fiºier într-un obiect numit "buffer". Deschiderea unui fiºier creeazã un nou buffer în Emacs. Pentru a vedea o listã a bufferelor existente în Emacs, tastaþi C-x C-b (lista de buffere) >> Încercaþi C-x C-b acum. Observaþi cum fiecare buffer are un nume ºi, uneori, un nume de fiºier corespunzãtor fiºierului al cãrui conþinut este menþinut în buffer-ul respectiv. Unele buffere nu corespund nici unui fiºier. De exemplu, buffer-ul numit "*Buffer List*" nu are nici un fiºier asociat. Este buffer-ul care conþine lista de buffere ºi a fost creat de comanda C-x C-b. Orice text pe care îl vedeþi într-o fereastrã a Emacs-ului este întotdeauna parte dintr-un buffer. >> Tastaþi C-x 1 pentru a scãpa de lista de buffere. Dacã faceþi schimbãri în textul unui fiºier, apoi deschideþi un alt fiºier, primul fiºier nu este salvat. Schimbãrile efectuate rãmân în Emacs, în buffer-ul asociat acelui fiºier. Crearea sau editarea buffer-ului celui de-al doilea fiºier nu are nici un efect asupra buffer-ului primului fiºier. Acest lucru este foarte util, dar înseamnã cã aveþi nevoie de o modalitate convenabilã de a salva buffer-ul primului fiºier. Ar fi obositor sã fie necesar sã vã mutaþi înapoi la el cu C-x C-f pentru a-l putea salva cu C-x C-s. Din acest motiv existã comanda: C-x s salveazã niºte buffere C-x s vã întreabã despre fiecare buffer care conþine modificãri (ºi care nu a fost salvat) dacã doriþi sã-l salvaþi. >> Introduceþi o linie de text, apoi tastaþi C-x s. Ar trebui sã vã întrebe dacã sã salveze buffer-ul TUTORIAL.ro. Raspundeþi "da" la întrebare tastând "y". * FOLOSIREA MENIULUI -------------------- Dacã sunteþi la consola unui terminal X, veþi observa o barã de meniuri ("menubar" în limba englezã) la marginea de sus a ferestrei Emacs-ului. Puteþi folosi acest menubar pentru a accesa toate comenzile uzuale ale Emacs-ului, cum ar fi "deschide fiºier". Probabil cã vi se va pãrea mai uºor la început, pentru cã nu este nevoie sã vã amintiþi tastele necesare accesãrii comenzilor. Odatã acomodaþi cu Emacs-ul, va fi uºor sã începeþi sã folosiþi tastatura, deoarece fiecare element din meniu, care are o comandã asociatã, afiºeazã ºi tastele cu care acea comandã poate fi accesatã. Existã multe elemente în meniu care nu au nici un echivalent într-o secvenþã de taste. De exemplu, meniul Buffers listeazã toate buffer-ele existente în ordinea celei mai recente folosiri. Puteþi sã vã mutaþi la orice buffer gãsindu-i ºi selectându-i numele în meniul Buffers. * FOLOSIREA MOUSE-ului ---------------------- Când ruleazã sub X, Emacs-ul oferã suport integrat pentru mouse. Puteþi poziþiona cursorul în text apãsând butonul stâng deasupra poziþiei dorite; puteþi selecta text trãgând mouse-ul peste porþiunea doritã, în timp ce butonul stâng este apãsat. O metodã alternativã este sã apãsaþi butonul stâng al mouse-ului deasupra uneia dintre extremitãþile porþiunii de text dorite, apoi sã vã mutaþi la cealaltã extremitate ºi sã apãsaþi butonul stâng, þinând tasta SHIFT apãsatã pentru a selecta textul. Ca sã distrugeþi textul selectat, puteþi folosi C-w sau "Cut" în meniu de editare ("Edit"). Existã însã o diferenþã între cele douã modalitãþi. C-w nu face decât sã distrugã textul (pãstrând o copie internã), în timp ce "Cut" face acelaºi lucru, dar pune textul ºi în clipboard-ul X-ului, de unde poate fi accesat de cãtre alte aplicaþii. Dacã vreþi sã extrageþi textul din clipboard-ul X-ului, folosiþi "Paste" in meniul "Edit". Butonul din mijloc al mouse-ului este folosit pentru a alege elemente care sunt vizibile pe ecran. De exemplu, dacã intraþi în Info (documentaþia Emacs-ului) folosind C-h i sau meniul "Help", puteþi selecta o legaturã pusã în evidenþã apãsând butonul din mijloc al mouse-ului deasupra ei. În mod analog, dacã introduceþi un nume de fiºier (de exemplu când deschideþi un fiºier cu "Find File") ºi tastaþi TAB pentru a obþine completãrile posibile, puteþi apãsa butonul din mijloc al mouse-ului pe una din completãri, pentru a o selecta. Butonul din dreapta al mouse-ului invocã un meniu popup. Conþinutul acestui meniu variazã în funcþie de modul de editare curent ºi, în mod normal, conþine câteva comenzi uzuale, pentru a le face mai uºor accesibile. >> Apãsaþi butonul din dreapta al mouse-ului acum. Va trebui sã þineþi butonul apãsat pentru a menþine meniul vizibil. * EXTINDEREA SETULUI DE COMENZI ------------------------------- Existã mult mai multe comenzi Emacs decât combinaþii de taste bazate pe CONTROL ºi META. Soluþia în Emacs este folosirea comenzilor eXtinse. Acestea sunt de douã feluri: C-x eXtinde un caracter; urmatã de un caracter M-x eXtinde un nume; urmatã de un nume lung Acestea sunt comenzi care sunt utile în general, dar folosite mai rar decât comenzile despre care aþi învãþat pânã acum. Aþi vãzut deja douã dintre ele: comanda de deschis fiºiere (C-x C-f) ºi comanda de salvat fiºiere (C-x C-s). Un alt exemplu este comanda de pãrãsit Emacs-ul: C-x C-c. (Nu vã temeþi cã veþi pierde schimbãri fãcute în fiºiere; înainte de a termina sesiunea curentã Emacs, C-x C-c vã va întreba dacã doriþi sã salvaþi fiºierele modificate.) C-z este comanda cu care puteþi ieºi din Emacs *temporar* - astfel încât sã puteþi sã vã întoarceþi la aceeaºi sesiune Emacs mai târziu. Pe sistemele unde este posibil, C-z "suspendã" Emacs-ul; asta înseamnã cã, deºi vã veþi întoarce la prompt-ul shell-ului, Emacs-ul nu a fost distrus. În shell-urile (interpretoarele de comenzi Unix) cele mai uzuale puteþi reactiva Emacs-ul cu comanda `fg' sau `%emacs'. Pe sistemele care nu implementeazã mecanismele de suspendare, C-z creeazã un subshell care ruleazã sub Emacs pentru a vã oferi posibilitatea de a rula alte programe ºi de a vã întoarce la Emacs mai târziu; pe aceste sisteme C-z nu iese cu adevãrat din Emacs - comanda `exit' la promptul subshell-ului este modalitatea uzualã de a vã întoarce în Emacs. În general C-x C-c se foloseºte înainte de pãrãsirea sistemului. Puteþi folosi aceastã comandã ºi pentru a ieºi din instanþe de Emacs lansate de programe de citit mail sau alte utilitare, deoarece acestea s-ar putea sã nu fie capabile sã foloseascã facilitaþile de suspendare ale Emacs-ului. În mod normal însã, dacã nu sunteþi pe cale sã pãrãsiþi sistemul, este mai bine sã suspendaþi Emacs-ul cu C-z decât sã ieºiþi complet cu C-x C-c. Emacs-ul are multe comenzi prefixate cu C-x. Aceasta este lista celor pe care le-aþi învãþat pânã acum: C-x C-f deschide un fiºier C-x C-s salveazã fiºierul C-x C-b listeazã bufferele C-x C-c pãrãseºte Emacs-ul C-x u anuleazã Comenzile eXtinse cu nume sunt comenzile care sunt folosite ºi mai rar sau comenzile care sunt folosite numai în anumite moduri. Un exemplu este comanda replace-string (înlocuieºte-ºir) care înlocuieºte global toate apariþiile unui ºir de caractere cu alt ºir de caractere. Când tastaþi M-x, Emacs-ul afiºeazã pe ultima linie de pe ecran "M-x" ºi puteþi introduce numele comenzii - în cazul nostru "replace-string". Puteþi sã tastaþi doar "repl s" ºi Emacs-ul va completa numele. Terminaþi comanda cu . Comanda replace-string necesitã douã argumente - ºirul ce va fi înlocuit ºi ºirul înlocuitor. La sfârºitul introducerii fiecãrui argument trebuie sã tastaþi . >> Mutaþi cursorul pe linia goalã care se gãseste douã linii mai jos. Tastaþi apoi M-x repl smodificatalterat. Observaþi modul în care aceastã linie s-a modificat: aþi înlocuit toate apariþiile cuvântului s-c-h-i-m-b-a-t cu "alterat", dupã poziþia iniþialã a cursorului. * SALVARE AUTOMATà ------------------ Dacã aþi facut schimbãri într-un fiºier, dar nu le-aþi salvat, aceste schimbãri se pot pierde în cazul în care sistemul se blocheazã. Pentru a vã proteja munca, Emacs-ul salveazã periodic un fiºier de "autosalvare" pentru fiecare fiºier pe care îl editaþi. Acest fiºier are un "#" la început ºi unul la sfârºit; de exemplu, dacã fiºierul dumneavoastrã se numeste "hello.c", fiºierul de autosalvare corespunzãtor se va numi "#hello.c#". Când salvaþi fiºierul în mod normal, Emacs-ul ºterge fiºierul de autosalvare. În cazul unei cãderi a sistemului, puteþi sã vã recuperaþi fiºierul de autosalvare deschizând fiºierul în mod normal (fiºierul pe care îl editaþi, nu pe cel de autosalvare) ºi tastând dupã aceea M-x recover file. Când vi se cere confirmarea, tastaþi yes pentru a continua ºi a recupera fiºierul. * ZONA DE ECOU -------------- Dacã Emacs-ul observã cã tastaþi comenzile încet, vi le va arãta la marginea de jos a ecranului într-o zona numitã "zona de ecou". Zona de ecou conþine cea mai de jos linie a ecranului. * LINIA DE MOD -------------- Linia de deasupra zonei de ecou se numeºte "linia de mod" ("modeline" în limba englezã). Linia de mod conþine ceva de genul: --**-XEmacs: TUTORIAL (Fundamental)--L670--58%---------------- Aceastã linie prezintã informaþii utile despre starea Emacs-ului ºi despre textul pe care îl editaþi. Stiþi deja ce înseamnã numele fiºierului - este fiºierul pe care l-aþi deschis. -NN%-- indicã poziþia curentã a cursorului în text - NN la sutã din text este deasupra primei linii de pe ecran. Dacã începutul fiºierului este vizibil pe ecran, veþi vedea --Top-- în loc de --00%--. Dacã sfârºitul fiºierului este vizibil pe ecran, veþi vedea --Bot-- (de la "bottom" în limba englezã). Dacã fiºierul este atât de mic, încât încape în întregime pe ecran, pe linia de mod veþi vedea --All--. Stelele de la începutul liniei de mod semnalizeazã existenþa unor modificãri nesalvate în text. Imediat dupã deschiderea fiºierului, porþiunea respectivã din linia de mod nu conþine nici o stea, doar minusuri. Porþiunea dinãuntrul parantezelor vã spune modul de editare curent. Modul implicit este "Fundamental", modul pe care îl folosiþi chiar acum. Este un exemplu de "mod major". Emacs-ul are multe moduri majore. Unele dintre ele sunt destinate editãrii diferitelor limbaje ºi/sau tipuri de text, cum ar fi modul Lisp, modul Text, etc. Numai un mod major poate fi activ la un moment dat ºi numele sãu va fi întotdeauna acolo unde este "Fundamental" acum. Fiecare mod major schimbã comportamentul unor comenzi. De exemplu existã comenzi pentru crearea comentariilor într-un program, dar, cum fiecare limbaj de programare are o idee diferitã despre felul cum ar trebui sã arate un comentariu, fiecare mod major trebuie sã le introducã într-un alt fel. Existã câte o comandã asociatã fiecãrui mod major - aceasta este modalitatea de a schimba modul major. De exemplu, M-x fundamental-mode este comanda cu care poate fi ales modul "Fundamental". Dacã editaþi text în limba românã, cum ar fi de exemplu acest fiºier, ar trebui probabil sã folosiþi modul Text. >> Tastaþi M-x text-mode. Nu vã temeti, nici una din comenzile pe care le-aþi învãþat pânã acum nu schimbã Emacs-ul prea mult. Puteþi observa acum cã M-f ºi M-b trateazã apostrofurile ca parte din cuvinte. Înainte, în modul Fundamental, M-f ºi M-b tratau apostrofurile ca separatoare de cuvinte. Modurile majore opereazã schimbãri subtile, ca cea descrisã mai sus. Majoritatea comenzilor executã aceeaºi operaþie în fiecare mod major, dar funcþioneazã puþin diferit. Pentru a vedea documentaþia referitoare la modul major curent, tastaþi C-h m. >> Folosiþi C-u C-v o datã sau de mai multe ori pentru a aduce aceastã linie aproape de începutul ecranului. Tastaþi C-h m ca sã aflaþi diferenþele dintre modul Text ºi modul Fundamental. Tastaþi q pentru a ºterge documentaþia de pe ecran. Modurile majore se numesc "majore" pentru cã existã ºi moduri minore. Modurile minore sunt ajustãri minore ale modurilor majore. Fiecare mod minor poate fi activat sau dezactivat separat, independent de celelalte moduri minore ºi independent de modul major curent. Puteþi sã nu folosiþi nici un mod minor, un mod minor sau orice combinaþie de moduri minore. Un mod minor care este foarte util, în mod special când editaþi text, este modul "Auto Fill". Când acest mod este activat, Emacs-ul sparge automat liniile la spaþiul dintre cuvinte de fiecare datã când introducând text creaþi o linie care este prea lungã. Puteþi activa modul "Auto Fill" executând M-x auto-fill-mode. Când acest mod este activat, îl puteþi dezactiva executând aceeaºi comandã. Dacã modul este dezactivat, aceastã comandã îl activeazã, când este activat, comanda îl dezactiveazã. Se spune cã aceastã comandã inverseazã modul. >> Tastaþi M-x auto-fill-mode acum. Introduceþi apoi o linie conþinând "asdf " de mai multe ori, pânã când linia se sparge în douã. Trebuie sã puneþi spaþii între cuvinte pentru cã Auto Fill sparge linia numai la spaþii. Marginea este stabilitã în mod normal la 70 de caractere, dar puteþi schimba aceastã valoare cu comanda C-x f. Introduceþi valoarea doritã ca argument numeric pentru C-x f. >> Tastaþi C-x f cu 20 ca argument numeric. (C-u 2 0 C-x f). Introduceþi apoi un text oarecare ºi observaþi cum Emacs-ul umple linii de maximum 20 de caractere. Restauraþi marginea la 70 de caractere folosind din nou C-x f. Dacã faceþi schimbãri în mijlocul unui paragraf, modul Auto Fill nu rearanjeazã paragraful. Pentru a face acest lucru, trebuie sã tastaþi M-q (META-q) cu cursorul poziþionat înãuntrul paragrafului. >> Mutaþi cursorul în paragraful precedent ºi tastaþi M-q. * CÃUTARE --------- Emacs-ul poate cautã ºiruri (grupuri continue de caractere sau cuvinte) fie înainte, fie înapoi (faþã de poziþia curentã a cursorului în text). Cãutarea unui ºir este o operaþie ce mutã cursorul; cursorul este mutat în poziþia corespunzãtoare urmãtoarei apariþii a ºirului în text. Cãutarea este diferitã în Emacs faþã de majoritatea editoarelor, deoarece este "incrementalã". Asta înseamnã cã execuþia operaþiunii de cãutare se face în timp ce tastaþi ºirul de cãutat. Comanda ce iniþiazã cãutarea este C-s pentru cãutare înainte ºi C-r pentru cãutare înapoi. AªTEPTAÞI! Nu le încercaþi acum. Când tastaþi C-s veþi remarca faptul cã ºirul "I-search" apare ca prompt în zona de ecou. Aceasta vã spune cã Emacs-ul este în modul de cãutare incrementalã, aºteptând ca dumneavoastrã sã introduceþi ºirul pe care doriþi sã-l cãutaþi. Cãutarea poate fi terminatã cu . >> Tastaþi acum C-s pentru a porni o cãutare. ÎNCET, câte o singurã literã la un moment dat, tastaþi cuvântul "cursor", fãcând o pauzã dupã fiecare caracter tastat ca sã observaþi ce se întamplã cu cursorul. Acum aþi terminat de cãutat prima apariþie a cuvântului "cursor". >> Tastaþi C-s din nou, pentru a cãuta urmãtoarea apariþie a cuvântului "cursor". >> Tastaþi acum de patru ori ºi observaþi miºcarea cursorului. >> Tastaþi pentru a termina cãutarea. Aþi observat ce s-a întamplat? În timpul unei cãutãri incrementale Emacs-ul încearcã sã se poziþioneze pe prima apariþie a ºirului pe care l-aþi introdus pânã în momentul respectiv, punându-o în evidenþã pentru ca sã o puteþi identifica mai uºor. Dacã vreþi sã vã poziþionaþi pe urmãtoarea apariþie a cuvântului "cursor", nu trebuie decât sã tastaþi C-s încã o datã. Dacã nu mai existã o altã apariþie, Emacs-ul va emite un sunet ºi vã va anunþa cã operaþiunea de cãutare a eºuat ("failing" în limba englezã). C-g este o altã metodã de a termina cãutarea. OBSERVAÞIE: Pe unele sisteme, C-s va bloca ecranul ºi nu veþi mai primi nici un rãspuns de la Emacs. Aceasta indicã faptul cã o "facilitate" a sistemului de operare numitã "controlul fluxului" ("flow control" în limba englezã) intercepteazã caracterul C-s ºi acesta nu mai ajunge la Emacs. Pentru deblocarea ecranului, apãsaþi C-q. Puteþi gãsi detalii referitoare la aceastã aºa-numitã "facilitate" în secþiunea "Spontaneous Entry to Incremental Search" din manualul Emacs-ului. Dacã sunteþi în mijlocul unei cãutãri incrementale ºi tastaþi , veþi observa cã ultimul caracter în cãutarea incrementalã este ºters ºi cãutarea se întoarce la poziþia anterioarã. De exemplu, sã presupunem cã aþi tastat "c", pentru a cãuta prima apariþie a lui "c". Dacã tastaþi "u", cursorul se va muta la prima apariþie a lui "cu". Tastaþi acum . Aceasta va ºterge "u"-ul din ºirul de cãutare ºi cursorul se va muta înapoi la prima apariþie a lui "c". Cãutarea incrementalã poate fi terminatã prin tastarea unui caracter bazat pe CONTROL sau META (cu câteva excepþii - caracterele care sunt specifice cãutãrii, cum ar fi C-s ºi C-r). C-s începe o cãutare care inspecteazã textul de DUPà poziþia curentã a cursorului. Dacã doriþi sã cãutaþi în textul dinaintea poziþiei curente a cursorului, folosiþi C-r. Toatã discuþia referitoare la C-s se aplicã ºi comenzii C-r, cu menþiunea cã direcþia de cãutare este inversã. * FERESTRE MULTIPLE ------------------- Una dintre facilitãþile importante ale Emacs-ului este aceea de a afiºa pe ecran mai multe ferestre simultan. >> Mutaþi cursorul pe aceastã linie ºi tastaþi C-u 0 C-l. >> Tastaþi acum C-x 2 pentru a împãrþi ecranul în douã ferestre. Amândouã ferestrele vor afiºa acest tutorial. Cursorul va rãmane în fereastra din partea de sus a ecranului. >> Tastaþi C-M-v pentru a miºca textul din fereastra de jos. (Dacã nu aveþi o tastã META, tastaþi ESC C-v.) >> Tastaþi C-x o ("o" de la "other" - "cealaltã" în limba englezã) pentru a muta cursorul în fereastra de jos. >> Tastaþi C-v ºi M-v în fereastra de jos pentru a muta textul. Continuaþi sã citiþi aceste instrucþiuni în fereastra de sus. >> Tastaþi C-x o din nou pentru a muta cursorul înapoi în fereastra de sus. Cursorul va fi plasat în locul unde a fost anterior. Puteþi continua sã folosiþi C-x o pentru a vã muta între ferestre. Fiecare fereastrã are propria ei poziþie a cursorului, dar numai o fereastrã aratã cursorul la un moment dat. Toate operaþiile normale de editare au efect în fereastra în care se gãseºte cursorul - fereastra respectivã se numeºte "fereastra selectatã". Comanda C-M-v este foarte utilã când editaþi text într-o fereastrã ºi folosiþi cealaltã fereastrã pentru a citi documentaþii. Puteþi þine întotdeauna cursorul în fereastra în care editaþi, în timp ce avansaþi textul din cealaltã fereastrã cu C-M-v. C-M-v este un exemplu de caracter CONTROL-META. Dacã aveþi o tastã META, puteþi tasta C-M-v þinând apãsate ºi CONTROL ºi META când tastaþi v. Nu conteazã care dintre CONTROL sau META este apãsatã mai întâi, pentru cã amândouã acþioneazã prin modificarea caracterului pe care îl tastaþi. Dacã nu aveþi o tastã META ºi folosiþi ESC în loc, ordinea este importantã: trebuie sã tastaþi ESC urmat de CONTROL-v; CONTROL-ESC v nu va funcþiona, din cauza faptului cã ESC este un caracter de sine stãtãtor, nu un modificator. >> Tastaþi C-x 1 (în fereastra de sus) ca sã renunþaþi la fereastra de jos. (Dacã aþi tastat C-x 1 în fereastra de jos, aceastã comandã va închide fereastra de sus. Gândiþi-vã la ea aºa "Pãstreazã doar o fereastrã - cea în care sunt acum.") Nu este nevoie sã afisaþi acelaºi buffer în ambele ferestre. Dacã folosiþi C-x C-f pentru a deschide un fiºier într-o fereastrã, cealaltã fereastrã nu se schimbã. Puteþi deschide un fiºier diferit în fiecare fereastrã. O altã modalitate de a folosi douã ferestre ca sã afiºaþi lucruri diferite: >> Tastaþi C-x 4 C-f apoi numele unui fiºier. Terminaþi comanda cu Observaþi cã fiºierul specificat apare în fereastra de jos. Cursorul la fel. >> Tastaþi C-x o pentru a vã muta în fereastra de sus, apoi tastaþi C-x 1 pentru a ºterge fereastra de jos. * NIVELURI DE EDITARE RECURSIVà ------------------------------- Uneori veþi intra în ceea ce se numeste un "nivel de editare recursivã". Acesta este indicat de prezenþa unor paranteze drepte în linia de mod în jurul numelui modului major. De exemplu, s-ar putea sã vedeþi [(Fundamental)] în loc de (Fundamental). Pentru a ieºi din nivelul de editare recursivã, tastaþi ESC ESC ESC. Aceasta este o comandã de ieºire de uz general. O puteþi folosi ºi ca sã ieºiþi din minibuffer sau ca sã eliminaþi ferestrele în plus. >> Tastaþi M-x pentru a intra în minibuffer; tastaþi apoi ESC ESC ESC ca sã ieºiþi. Nu puteþi folosi C-g pentru a ieºi dintr-un nivel de editare recursivã deoarece comanda C-g este folositã pentru a anula comenzi ºi argumente înãuntrul unui nivel de editare recursivã. * CUM PUTEÞI OBÞINE MAI MULTE INFORMAÞII ---------------------------------------- În acest tutorial am încercat sã furnizãm suficiente informaþii pentru a face primii paºi în Emacs. Existã atât de multe comenzi în Emacs încât ar fi imposibil sã le explicãm pe toate aici. S-ar putea însã sã doriþi sã învaþaþi mai multe despre Emacs, deoarece oferã foarte multe facilitaþi interesante. Existã comenzi pentru a citi documentaþia despre comenzile Emacs-ului. Aceste comenzi ajutãtoare sunt prefixate cu caracterul C-h, denumit ºi "caracterul de ajutor". Pentru a folosi aceste facilitãþi de ajutor, tastaþi caracterul C-h, apoi un caracter ce specificã tipul de ajutor de care aveþi nevoie. În cazul în care sunteþi nelãmurit, tastaþi C-h ? ºi Emacs-ul vã va spune ce fel de ajutor vã poate oferi. Dacã aþi tastat C-h ºi vã rãzgândiþi (nu mai doriþi ajutor) puteþi tasta C-g pentru a anula comanda. (Anumite site-uri remapeazã caracterul C-h. Nu ar trebui sã facã asta orbeºte pentru toþi utilizatorii - aveþi motiv sã vã plângeþi administratorului de sistem. Între timp, dacã C-h nu afiºeazã un mesaj despre ajutor la marginea de jos a ecranului, încercaþi M-x help în loc.) Comanda elementarã de ajutor este C-h c. Tastaþi C-h, apoi caracterul c ºi o comandã alcãtuitã dintr-un caracter sau secvenþã de caractere ºi Emacs-ul va afiºa o scurtã descriere a comenzii. >> Tastaþi C-h c C-p. Mesajul ar trebui sã fie ceva de genul C-p runs the command previous-line Aceasta vã spune "numele funcþiei". Numele de funcþii sunt folosite în principal pentru a adapta ºi extinde Emacs-ul, dar, cum numele funcþiilor sunt alese în aºa fel încât sã indice actiunea comenzii respective, ele pot servi ca o documentaþie foarte scurtã, suficientã ca sã vã aminteascã de comenzi pe care le-aþi învãþat deja. Comenzile formate din mai multe caractere (cum ar fi C-x C-s) ºi (dacã nu aveþi o tasta META, EDIT sau ALT) v sunt de asemenea permise dupã C-h c. Pentru a obþine mai multe informaþii despre o comandã, folosiþi C-h k în loc de C-h c. >> Tastaþi C-h k C-p. Aceastã comandã afiºeazã documentaþia ºi numele funcþiei într-o fereastrã separatã. Când terminaþi de citit, tastaþi q pentru a o elimina. Câteva comenzi C-h utile: C-h f descrie o funcþie al cãrei nume trebuie sã-l introduceþi >> Încercaþi sã tastaþi C-h f previous-line. Aceasta afiºeazã toatã informaþia pe care o are Emacs-ul despre funcþia ce implementeazã comanda C-p. C-h a Hyper Apropos. Tastaþi un cuvânt cheie ºi Emacs-ul va lista toate funcþiile ºi variabilele ale cãror nume conþin acel cuvânt cheie. La stânga comenzilor care pot fi invocate cu M-x va fi afiºatã o steluþã. >> Tastaþi C-h a newline. Aceasta afiºeazã lista tuturor funcþiilor ºi variabilelor al cãror nume conþine "newline". Tastaþi sau apãsaþi butonul din mijloc al mouse-ului, pentru a afla mai multe despre o funcþie sau variabilã. Tastaþi q ca sã ieºiþi din hyper-apropos. * CONCLUZII ----------- Þineþi minte, pentru a ieºi permanent din Emacs, folosiþi C-x C-c. Pentru a ieºi temporar într-un shell (în aºa fel încât sã vã puteþi întoarce la Emacs mai târziu) folosiþi C-z. (sub X, aceastã comandã minimizeaza frame-ul curent al Emacs-ului.) Acest tutorial a fost organizat în aºa fel încât sã fie pe înþelesul noilor utilizatori - nu vã sfiiþi sã vã plângeþi autorilor dacã gasiþi ceva neclar! COPIERE ------- Acest tutorial este rezultatul prelucrãrii unei serii lungi de tutoriale pentru Emacs derivate din cel scris de Stuart Cracraft pentru versiunea iniþialã de Emacs. Ben Wing a adaptat tutorialul pentru X Windows. Martin Buchholz ºi Hrvoje Niksic au adãugat corecþii pentru XEmacs. Cu scopul evitãrii oricãror confuzii datorate traducerii, las în continuare noþita de copyright originalã în limba englezã. This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: Copyright (c) 1985, 1996 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. Condiþiile de copiere a Emacs-ului sunt mai complexe, dar în acelaºi spirit. Citiþi fiºierul COPYING ºi apoi distribuiþi prietenilor copii ale Emacs-ului. Contribuiþi la eliminarea obstrucþionismului software folosind, scriind ºi distribuind free software! xemacs-21.4.22/etc/TUTORIAL.ru0000644000175000017500000013427207265371001013640 0ustar acsacsCopyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions. ÷Ù ÞÉÔÁÅÔÅ ÕÞÅÂÎÉË Emacs. äÌÑ ÕÐÒÁ×ÌÅÎÉÑ Emacs ÏÂÙÞÎÏ ÉÓÐÏÌØÚÕÅÔÓÑ ËÌÁ×ÉÛÁ CONTROL (ÉÎÏÇÄÁ ÏÔÍÅÞÁÅÍÁÑ ËÁË CTRL ÉÌÉ CTL) ÉÌÉ ËÌÁ×ÉÛÁ META. îÁ ÎÅËÏÔÏÒÙÈ ËÌÁ×ÉÁÔÕÒÁÈ, ËÌÁ×ÉÛÁ META ÏÔÍÅÞÅÎÁ ALT ÉÌÉ EDIT ÉÌÉ ËÁË-ÎÉÂÕÄØ ÅÝÅ (ÎÁÐÒÉÍÅÒ, ÎÁ ËÌÁ×ÉÁÔÕÒÁÈ Sun, "the diamond key" ÓÌÅ×Á ÏÔ ÐÒÏÂÅÌÁ É ÅÓÔØ META). åÓÌÉ Õ ×ÁÓ ÎÅÔ ËÌÁ×ÉÛÉ META, ×Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ESC ×ÍÅÓÔÏ ÎÅÅ. äÁÌÅÅ ×ÍÅÓÔÏ META ÉÌÉ CONTROL ËÁÖÄÙÊ ÒÁÚ ÍÙ ÂÕÄÅÍ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÅÆÉËÓÎÙÊ ÓÉÍ×ÏÌ × ÓÌÅÄÕÀÝÉÈ ÓÏËÒÁÝÅÎÉÑÈ: C- ÓÌÅÄÕÅÔ ÕÄÅÒÖÉ×ÁÔØ ËÌÁ×ÉÛÕ CONTROL ÐÏËÁ ÎÁÂÉÒÁÅÔÓÑ ÓÉÍ×ÏÌ ôÁË, C-f ÄÏÌÖÎÏ ÏÚÎÁÞÁÔØ: ÎÁÖÁÔØ ËÌÁ×ÉÛÕ CONTROL É f. M- ÓÌÅÄÕÅÔ ÕÄÅÒÖÉ×ÁÔØ ËÌÁ×ÉÛÕ META ÐÏËÁ ÎÁÂÉÒÁÅÔÓÑ ÓÉÍ×ÏÌ . åÓÌÉ ÔÁËÏ×ÏÊ ÎÅÔ, ÎÁÖÍÉÔÅ , ÏÔÐÕÓÔÉÔÅ ÅÅ, ÐÏÔÏÍ ÓÉÍ×ÏÌ . ÷ÁÖÎÏÅ ÚÁÍÅÞÁÎÉÅ: ÄÌÑ ÚÁ×ÅÒÛÅÎÉÑ ÓÅÁÎÓÁ Emacs, ÎÁÂÅÒÉÔÅ C-x C-c. (ä×Á ÓÉÍ×ÏÌÁ). óÉÍ×ÏÌÙ ">>" Ó ÌÅ×ÏÊ ÓÔÏÒÏÎÙ ÕËÁÚÙ×ÁÀÔ, ÞÔÏ ×ÁÍ ÎÕÖÎÏ ÄÅÌÁÔØ, ÞÔÏ ÐÒÉÍÅÎÉÔØ ËÏÍÁÎÄÕ. îÁÐÒÉÍÅÒ: >> ôÅÐÅÒØ ÎÁÖÍÉÔÅ C-v (ðÒÏÓÍÏÔÒ ÓÌÅÄÕÀÝÅÇÏ ÜËÒÁÎÁ) ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ÎÁ ÓÌÅÄÕÀÝÉÊ ÜËÒÁÎ. (ÉÄÉÔÅ ×ÐÅÒÅÄ, ÕÄÅÒÖÉ×ÁÑ ËÌÁ×ÉÛÕ Control ÎÁÖÉÍÁÑ v). ôÅÐÅÒØ ×Ù ÄÏÌÖÎÙ ÜÔÏ ÓÄÅÌÁÔØ ÅÝÅ ÒÁÚ, ËÏÇÄÁ ÚÁËÏÎÞÉÔÅ ÞÉÔÁÔØ ÜËÒÁÎ. ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ ÎÁ ÔÏ, ÞÔÏ, ÐÏËÁ ×Ù Ä×ÉÖÅÔÅÓØ Ó ÜËÒÁÎÁ ÎÁ ÜËÒÁÎ, ÐÅÒÅËÒÙ×ÁÀÔÓÑ Ä×Å ÓÔÒÏÞËÉ; ÜÔÏ ÏÂÅÓÐÅÞÉ×ÁÅÔ ÎÅËÏÔÏÒÕÀ ÎÅÐÒÅÒÙ×ÎÏÓÔØ, ÔÁËÉÍ ÏÂÒÁÚÏÍ ×Ù ÍÏÖÅÔÅ ÐÒÏÄÏÌÖÁÔØ ÞÉÔÁÔØ ÔÅËÓÔ. ðÅÒ×ÏÅ ÞÔÏ ×ÁÍ ÎÅÏÂÈÏÄÉÍÏ ÚÎÁÔØ - ËÁË ÐÅÒÅÄ×ÉÇÁÔØÓÑ ÐÏ ÔÅËÓÔÕ ÉÚ ÏÄÎÏÇÏ ÍÅÓÔÁ × ÄÒÕÇÏÅ. ÷Ù ÕÖÅ ÚÎÁÅÔÅ, ËÁË ÐÅÒÅÄ×ÉÎÕÔØ ×ÐÅÒÅÄ ÏÄÉÎ ÜËÒÁÎ, ÉÓÐÏÌØÚÕÑ C-v. äÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ÎÁÚÁÄ ÏÄÎÏÇÏ ÜËÒÁÎÁ, ÎÁÖÍÉÔÅ M-v (ÕÄÅÒÖÉ×ÁÊÔÅ ËÌÁ×ÉÛÕ META É ÎÁÂÅÒÉÔÅ v, ÉÌÉ ÎÁÖÍÉÔÅ v ÅÓÌÉ Õ ×ÁÓ ÎÅÔ ËÌÁ×ÉÛÕ META, EDIT, ÉÌÉ ALT). >> ÐÏÐÒÏÂÕÊÔÅ ÎÁÂÒÁÔØ M-v É ÐÏÔÏÍ C-v, ÎÅÓËÏÌØËÏ ÒÁÚ. * ëòáôëï --------- óÌÅÄÕÀÝÉÅ ËÏÍÁÎÄÙ ÉÓÐÏÌØÚÕÀÔÓÑ ÄÌÑ ÐÒÏÓÍÏÔÒÁ: C-v ðÅÒÅÊÔÉ ÎÁ ÏÄÉÎ ÜËÒÁÎ ×ÐÅÒÅÄ M-v ðÅÒÅÊÔÉ ÎÁ ÏÄÉÎ ÜËÒÁÎ ÎÁÚÁÄ C-l ïÞÉÓÔÉÔØ ÜËÒÁÎ É ÏÔÏÂÒÁÚÉÔØ ×ÓÅ ÚÁÎÏ×Ï, ÒÁÚÍÅÓÔÉ× ÔÅËÓÔ, ÎÁÈÏÄÑÝÉÊÓÑ ×ÏÚÌÅ ËÕÒÓÏÒÁ, × ÃÅÎÔÒÅ ÜËÒÁÎÁ. (üÔÏ control-L, ÎÅ control-1.) >> îÁÊÄÉÔÅ ËÕÒÓÏÒ, É ÚÁÐÏÍÎÉÔÅ ÔÅËÓÔ ×ÏÚÌÅ ÎÅÇÏ. ðÏÔÏÍ ÎÁÖÍÉÔÅ C-l. îÁÊÄÉÔÅ ËÕÒÓÏÒ ÓÎÏ×Á É ÕÂÅÄÉÔÅÓØ, ÞÔÏ ×ÏÚÌÅ ÎÅÇÏ ×ÓÅ ÔÏÔ ÖÅ ÔÅËÓÔ. * âáúï÷ïå õðòá÷ìåîéå ëõòóïòïí ----------------------------- ä×ÉÖÅÎÉÅ ÏÔ ÜËÒÁÎÁ Ë ÜËÒÁÎÕ ÕÄÏÂÎÏ, ÎÏ ËÁË ÐÅÒÅÍÅÓÔÉÔØÓÑ × ÏÐÒÅÄÅÌÅÎÎÏÅ ÍÅÓÔÏ ÐÏ ÔÅËÓÔÕ ÎÁ ÜËÒÁÎÅ? åÓÔØ ÎÁÓËÏÌØËÏ ÐÕÔÅÊ, ÞÔÏÂÙ ÓÄÅÌÁÔØ ÜÔÏ. ïÓÎÏ×ÎÏÊ ÐÕÔØ - ÉÓÐÏÌØÚÏ×ÁÔØ ËÏÍÁÎÄÙ C-p, C-b, C-f, É C-n. ëÁÖÄÁÑ ÉÚ ÜÔÉÈ ËÏÍÁÎÄ ÐÅÒÅÄ×ÉÇÁÅÔ ËÕÒÓÏÒ ÎÁ ÏÄÎÕ ÓÔÒÏËÕ ÉÌÉ ËÏÌÏÎËÕ ÎÁ ÜËÒÁÎÅ × ÏÐÒÅÄÅÌÅÎÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ. üÔÁ ÔÁÂÌÉÃÁ ÐÏËÁÚÙ×ÁÅÔ ÞÅÔÙÒÅ ËÏÍÁÎÄÙ É ÞÅÔÙÒÅ ÎÁÐÒÁ×ÌÅÎÉÑ Ä×ÉÖÅÎÉÑ: ðÒÅÄÙÄÕÝÁÑ ÓÔÒÏËÁ, C-p : : îÁÚÁÄ, C-b .... ôÅËÕÝÁÑ ÐÏÚÉÃÉÑ ËÕÒÓÏÒÁ .... ÷ÐÅÒÅÄ, C-f : : óÌÅÄÕÀÝÁÑ ÓÔÒÏËÁ, C-n >> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÓÔÒÏËÕ ÒÑÄÏÍ Ó ÄÉÁÇÒÁÍÍÏÊ, ÉÓÐÏÌØÚÕÑ C-n ÉÌÉ C-p. ðÏÔÏÍ, ÎÁÖÍÉÔÅ C-l É ÐÏÓÍÏÔÒÉÔÅ ËÁË ÄÉÁÇÒÁÍÍÁ ÒÁÚÍÅÓÔÉÔÓÑ × ÃÅÎÔÒÅ ÜËÒÁÎÁ. ÷ÁÍ ÂÕÄÅÔ ÎÅÓÌÏÖÎÏ ÚÁÐÏÍÎÉÔØ ÐÏ ÂÕË×ÁÍ (// ÎÄÁ, ÚÎÁÑ ÁÎÇÌÉÊÓËÉÊ - ÓÏ×ÓÅÍ ÌÅÇËÏ ) : P-ÐÒÅÄÙÄÕÝÉÊ (previous), N-ÓÌÅÄÕÀÝÉÊ (next), B-ÎÁÚÁÄ (backward) É F-×ÐÅÒÅÄ (forward). üÔÏ ÏÓÎÏ×ÎÙÅ ËÏÍÁÎÄÙ ÐÏÚÉÃÉÏÎÉÒÏ×ÁÎÉÑ ËÕÒÓÏÒÁ, ËÏÔÏÒÙÍÉ ÷Ù ÂÕÄÅÔÅ ÐÏÌØÚÏ×ÁÔØÓÑ ÷óåçäá, ÔÁË ÞÔÏ ÂÕÄÅÔ ÎÅÐÌÏÈÏ ÉÈ ×ÙÕÞÉÔØ. >> îÁÖÍÉÔÅ ÎÅÓËÏÌØËÏ ÒÁÚ C-n ÞÔÏ ÏÐÕÓÔÉÔØ ËÕÒÓÏÒ ×ÎÉÚ ÎÁ ÜÔÕ ÓÔÒÏËÕ. >> ðÅÒÅÍÅÓÔÉÔÅÓØ ÐÏ ÓÔÒÏËÅ, ÉÓÐÏÌØÚÕÑ C-f É ÐÏÔÏÍ ÐÏÄÎÉÍÉÔÅÓØ ××ÅÒÈ Ó ÐÏÍÏÝØÀ C-p. ðÏÓÍÏÔÒÉÔÅ, ËÁË ÉÚÍÅÎÉÌÏÓØ ÐÏÌÏÖÅÎÉÅ ËÕÒÓÏÒÁ ÐÒÉ ÎÁÖÁÔÉÉ ó-Ò, ÅÓÌÉ ÏÎ ÎÁÈÏÄÉÌÓÑ × ÓÅÒÅÄÉÎÅ ÓÔÒÏËÉ. ëÁÖÄÁÑ ÓÔÒÏËÁ ÔÅËÓÔÁ ÚÁ×ÅÒÛÁÅÔÓÑ ÓÉÍ×ÏÌÏÍ îÏ×ÁÑóÔÒÏËÁ (Newline character), ËÏÔÏÒÙÊ ÏÔÄÅÌÑÅÔ ÅÅ ÏÔ ÓÌÅÄÕÀÝÅÊ ÓÔÒÏËÉ. ðÏÓÌÅÄÎÑÑ ÓÔÒÏËÁ × ×ÁÛÅÍ ÆÁÊÌÅ ÄÏÌÖÎÁ ÂÙ ÔÏÖÅ ÚÁ×ÅÒÛÁÔØÓÑ ÓÉÍ×ÏÌÏÍ îÏ×ÁÑóÔÒÏËÁ (ÎÏ Emacs ÎÅ ÔÒÅÂÕÅÔ ÜÔÏÇÏ). >> ðÏÐÒÏÂÕÊÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-b × ÎÁÞÁÌÅ ÓÔÒÏËÉ. ëÕÒÓÏÒ ÄÏÌÖÅÎ ÐÅÒÅÍÅÓÔÉÔØÓÑ ÎÁ ËÏÎÅà ÐÒÅÄÙÄÕÝÅÊ ÓÔÒÏËÉ. üÔÏ ÐÒÏÉÓÈÏÄÉÔ ÐÏÔÏÍÕ, ÞÔÏ ÏÎ Ä×ÉÖÅÔÓÑ ÎÁÚÁÄ ÞÅÒÅÚ ÓÉÍ×ÏÌ îÏ×ÁÑóÔÒÏËÁ. C-f ÍÏÖÅÔ ÐÅÒÅÍÅÝÁÔØ ËÕÒÓÏÒ ÞÅÒÅÚ îÏ×ÕÀóÔÒÏËÕ ÔÁË ÖÅ, ËÁË É C-b. >> ðÏÐÒÏÂÕÊÔÅ ÎÅÓËÏÌØËÏ ÒÁÚ ÐÒÉÍÅÎÉÔØ C-b, ÔÁË ÞÔÏÂÙ ÷Ù Õ×ÉÄÅÌÉ, ËÁË Ä×ÉÖÅÔÓÑ ËÕÒÓÏÒ. äÁÌÅÅ ÉÓÐÏÌØÚÕÊÔÅ C-f ÞÔÏÂÙ ×ÅÒÎÕÔØÓÑ ÎÁ ËÏÎÅà ÓÔÒÏËÉ. îÁÖÍÉÔÅ C-f ÅÝÅ ÒÁÚ, ÞÔÏÂÙ ÐÅÒÅÊÔÉ Ë ÎÁÞÁÌÕ ÓÌÅÄÕÀÝÅÊ ÓÔÒÏËÉ. ëÏÇÄÁ ×Ù ÐÅÒÅÍÅÝÁÅÔÅÓØ ÚÁ ×ÅÒÈÎÉÊ ÉÌÉ ÎÉÖÎÉÊ ËÒÁÊ ÜËÒÁÎÁ, ÔÅËÓÔ, ÎÁÈÏÄÑÝÉÊÓÑ ÚÁ ÜËÒÁÎÏÍ, ÓÄ×ÉÇÁÅÔÓÑ ×ÎÕÔÒØ ÜËÒÁÎÁ. üÔÏ ÎÁÚÙ×ÁÅÔÓÑ "ÓËÒÏÌÌÉÎÇ". óËÒÏÌÌÉÎÇ ÐÏÚ×ÏÌÑÅÔ Emacs`Õ ÐÅÒÅÍÅÝÁÔØ ËÕÒÓÏÒ × ÎÕÖÎÏÅ ÍÅÓÔÏ ÔÅËÓÔÁ ÂÅÚ ÐÅÒÅÍÅÝÅÎÉÑ ÅÇÏ ÚÁ ÐÒÅÄÅÌÙ ÜËÒÁÎÁ. >> ðÏÐÒÏÂÕÊÔÅ ÐÅÒÅÍÅÓÔÉÔØ ËÕÒÓÏÒ ÚÁ ÎÉÖÎÀÀ ÇÒÁÎÉÃÕ ÜËÒÁÎÁ, ÉÓÐÏÌØÚÕÑ C-n, É ÐÏÓÍÏÔÒÉÔÅ, ÞÔÏ ÉÚÍÅÎÉÔÓÑ. åÓÌÉ ÐÏÓÉÍ×ÏÌØÎÏÅ ÐÅÒÅÍÅÝÅÎÉÅ ÓÌÉÛËÏÍ ÍÅÄÌÅÎÎÏ, ÷Ù ÍÏÖÅÔÅ Ä×ÉÇÁÔØÓÑ ÐÏ ÓÌÏ×ÁÍ. M-f (Meta-f) ÐÅÒÅÍÅÝÁÅÔ ×ÐÅÒÅÄ ÎÁ ÓÌÏ×Ï, Á M-b ÎÁÚÁÄ ÎÁ ÓÌÏ×Ï. >> îÁÖÍÉÔÅ ÎÅÓËÏÌØËÏ ÒÁÚ M-f É M-b. åÓÌÉ ËÕÒÓÏÒ ÎÁÈ. × ÓÅÒÅÄÉÎÅ ÓÌÏ×Á, M-f ÐÅÒÅÍÅÓÔÉÔ ÅÇÏ × ËÏÎÅà ÓÌÏ×Á. åÓÌÉ ËÕÒÓÏÒ ÎÁÈ. ÍÅÖÄÕ ÓÌÏ×ÁÍÉ, M-f ÐÅÒÅÍÅÓÔÉÔ ÅÇÏ × ËÏÎÅà ÓÌÅÄÕÀÝÅÇÏ ÓÌÏ×Á. M-b ÒÁÂÏÔÁÅÔ ÔÏÞÎÏ ÔÁË ÖÅ × ÐÒÏÔÉ×ÏÐÏÌÏÖÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ. >> îÁÖÍÉÔÅ M-f É M-b ÎÅÓËÏÌØËÏ ÒÁÚ, ÐÅÒÅÍÅÖÁÑ Ó C-f É C-b - ÔÁË ×Ù ÓÍÏÖÅÔÅ ÚÁÍÅÔÉÔØ ÄÅÊÓÔ×ÉÑ M-f É M-b ÉÚ ÒÁÚÎÙÈ ÐÏÚÉÃÉÊ × ÓÌÏ×ÁÈ É ÍÅÖÄÕ ÎÉÍÉ. ïÔÍÅÔØÔÅ ÐÁÒÁÌÌÅÌØ ÍÅÖÄÕ C-f É C-b Ó ÏÄÎÏÊ ÓÔÏÒÏÎÙ, É M-f É M-b Ó ÄÒÕÇÏÊ. ïÞÅÎØ ÞÁÓÔÏ Meta-ÓÉÍ×ÏÌÙ ÉÓÐÏÌØÚÕÀÔÓÑ ÄÌÑ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ÏÐÅÒÁÃÉÊ ÎÁÄ ÅÄÉÎÉÃÁÍÉ, ÏÐÒÅÄÅÌÅÎÎÙÍÉ × ÑÚÙËÅ (ÓÌÏ×Á, ÐÒÅÄÌÏÖÅÎÉÑ, ÁÂÚÁÃÙ), ËÏÇÄÁ Control-ÓÉÍ×ÏÌÙ ÏÐÅÒÉÒÕÀÔ ÏÓÎÏ×ÎÙÍÉ ÅÄÉÎÉÃÁÍÉ, ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, ÞÔÏ ÷Ù ÒÅÄÁËÔÉÒÕÅÔÅ (ÓÉÍ×ÏÌÙ, ÓÔÒÏËÉ, É Ô.Ä.). üÔÁ ÐÁÒÁÌÌÅÌØ ÓÕÝÅÓÔ×ÕÅÔ ÍÅÖÄÕ ÓÔÒÏËÁÍÉ É ÐÒÅÄÌÏÖÅÎÉÑÍÉ: C-a É C-e ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ÎÁÞÁÌÏ É ËÏÎÅà ÓÔÒÏËÉ, Á M-a É M-e ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ÎÁÞÁÌÏ É ËÏÎÅà ÐÒÅÄÌÏÖÅÎÉÑ. >> ðÏÐÒÏÂÕÊÔÅ ÎÁÖÁÔØ ÐÁÒÕ ÒÁÚ C-a, É ÐÏÔÏÍ ÐÁÒÕ ÒÁÚ C-e. ðÏÐÒÏÂÕÊÔÅ ÐÁÒÕ ÒÁÚ ÎÁÖÁÔØ M-a, ÐÏÓÌÅ ÜÔÏÇÏ ÐÁÒÕ ÒÁÚ ÎÁÖÁÔØ M-e. ðÏÓÍÏÔÒÉÔÅ, ÞÔÏ ÐÏ×ÔÏÒ C-a ÎÉÞÅÇÏ ÎÅ ÉÚÍÅÎÑÅÔ, Á ÐÏ×ÔÏÒ M-a ÐÒÏÄÏÌÖÁÅÔ Ä×ÉÖÅÎÉÅ ËÕÒÓÏÒÁ Ë ÓÌÅÄÕÀÝÅÍÕ ÐÒÅÄÌÏÖÅÎÉÀ. üÔÏ ÎÅ ÓÏÈÒÁÎÑÅÔ ÁÎÁÌÏÇÉÀ, ÎÏ ×ÙÇÌÑÄÉÔ ÅÓÔÅÓÔ×ÅÎÎÏ. ðÏÌÏÖÅÎÉÅ ËÕÒÓÏÒÁ × ÔÅËÓÔÅ ÔÁËÖÅ ÎÁÚÙ×ÁÀÔ "ÔÏÞËÁ". óËÁÖÅÍ ÉÎÁÞÅ: ËÕÒÓÏÒ ÐÏËÁÚÙ×ÁÅÔ ÍÅÓÔÏ ÎÁ ÜËÒÁÎÅ × ËÁËÏÊ ÔÏÞËÅ ÂÕÄÅÔ ÒÁÓÐÏÌÏÖÅÎ ××ÏÄÉÍÙÊ ÔÅËÓÔ. úÄÅÓØ ÓÏÂÒÁÎÙ ÐÒÏÓÔÙÅ ËÏÍÁÎÄÙ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ, ×ËÌÀÞÁÑ Ä×ÉÖÅÎÉÅ ÐÏ ÓÌÏ×ÁÍ É ÐÒÅÄÌÏÖÅÎÉÑÍ: C-f îÁ ÓÉÍ×ÏÌ ×ÐÅÒÅÄ C-b îÁ ÓÉÍ×ÏÌ ÎÁÚÁÄ M-f îÁ ÓÌÏ×Ï ×ÐÅÒÅÄ M-b îÁ ÓÌÏ×Ï ÎÁÚÁÄ C-n îÁ ÓÌÅÄÕÀÝÕÀ ÓÔÒÏËÕ C-p îÁ ÐÒÅÄÙÄÕÝÕÀ ÓÔÒÏËÕ C-a ÷ ÎÁÞÁÌÏ ÓÔÒÏËÉ C-e ÷ ËÏÎÅà ÓÔÒÏËÉ M-a îÁÚÁÄ, × ÎÁÞÁÌÏ ÐÒÅÄÌÏÖÅÎÉÑ M-e ÷ÐÅÒÅÄ, × ËÏÎÅà ÐÒÅÄÌÏÖÅÎÉÑ >> ðÏÐÒÏÂÕÊÔÅ ÓÅÊÞÁÓ ÎÁ ÐÒÁËÔÉËÅ ÐÒÉÍÅÎÉÔØ ÎÅÓËÏÌØËÏ ÒÁÚ ×ÓÅ ÜÔÉ ËÏÍÁÎÄÙ. üÔÏ ÎÁÉÂÏÌÅÅ ÉÓÐÏÌØÚÕÅÍÙÅ ËÏÍÁÎÄÙ. ä×Å ÄÒÕÇÉÅ ×ÁÖÎÙÅ ËÏÍÁÎÄÙ Ä×ÉÖÅÎÉÑ ËÕÒÓÏÒÁ M-< (Meta Less-then {íÅÎØÛÅ-þÅÍ}), ËÏÔÏÒÁÑ ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ÎÁÞÁÌÏ ÔÅËÓÔÁ, É M-> (Meta Greater-than {âÏÌØÛÅ-þÅÍ}), ËÏÔÏÒÁÑ ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ËÏÎÅà ÔÅËÓÔÁ. îÁ ÂÏÌØÛÉÎÓÔ×Å ÔÅÒÍÉÎÁÌÏ× ÓÉÍ×ÏÌ "<" ÎÁÈÏÄÉÔÓÑ ÎÁÄ ÔÏÞËÏÊ, É ×Ù ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ ËÌÁ×ÉÛÕ Shift ÞÔÏ ÎÁÂÒÁÔØ ÅÇÏ. îÁ ÜÔÉÈ ÔÅÒÍÉÎÁÌÁÈ ×Ù ÔÁË ÖÅ ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ Shift ÞÔÏ ÎÁÂÒÁÔØ M-<; âÅÚ ÕÄÅÒÖÁÎÉÑ ËÌÁ×ÉÛÉ Shift ×Ù ÎÁÂÅÒÅÔÅ M-ÔÏÞËÁ. >> óÅÊÞÁÓ ÐÏÐÒÏÂÕÊÔÅ M-<, ÞÔÏ ÐÅÒÅÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÕÞÅÂÎÉËÁ. ðÏÔÏÍ ÉÓÐÏÌØÚÕÊÔÅ C-v ÞÔÏ ×ÅÒÎÕÔØÓÑ ÎÁÚÁÄ. >> óÅÊÞÁÓ ÐÏÐÒÏÂÕÊÔÅ M->, ÞÔÏ ÐÅÒÅÍÅÓÔÉÔØÓÑ Ë ËÏÎÃÕ ÕÞÅÂÎÉËÁ. éÓÐÏÌØÚÕÊÔÅ M-v ÞÔÏ ×ÅÒÎÕÔØÓÑ ÓÎÏ×Á. ëÕÒÓÏÒ ÍÏÖÎÏ ÐÅÒÅÍÅÝÁÔØ ÓÔÒÅÌÏÞËÁÍÉ, ÅÓÌÉ ÷ÁÛ ÔÅÒÍÉÎÁÌ ÉÍÅÅÔ ÉÈ. íÙ ÒÅËÏÍÅÎÄÕÅÍ ×ÙÕÞÉÔØ C-b, C-f, C-n É C-p ÐÏ ÔÒÅÍ ÐÒÉÞÉÎÁÍ. ðÅÒ×ÏÅ, ÏÎÉ ÒÁÂÏÔÁÀÔ ÎÁ ÌÀÂÙÈ ÔÅÒÍÉÎÁÌÁÈ. ÷ÔÏÒÏÅ, ÏÄÎÁÖÄÙ ÐÏÌÕÞÉ× ÐÒÁËÔÉËÕ ÉÓÐÏÌØÚÏ×ÁÎÉÑ Emacs, ×Ù ÐÏÊÍÅÔÅ, ÞÔÏ ÉÓÐÏÌØÚÏ×ÁÔØ CTRL-ÓÉÍ×ÏÌÙ ÕÄÏÂÎÅÅ É ÂÙÓÔÒÅÅ, ÞÅÍ ËÎÏÐËÉ ÓÏ ÓÔÒÅÌÏÞËÁÍÉ (ÐÏÔÏÍÕ ÞÔÏ ×Ù ÎÅ ÕÂÉÒÁÅÔÅ ÒÕËÉ Ó ÏÂÙÞÎÏÇÏ ÉÈ ÐÏÌÏÖÅÎÉÑ ÐÒÉ ÐÅÞÁÔÉ). ôÒÅÔØÅ, ËÁË ÔÏÌØËÏ ×Ù ÐÒÉ×ÙËÎÉÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ CTRL-ÓÉÍ×ÏÌÙ, ×Ù ÓÍÏÖÅÔÅ ÔÁË ÖÅ ÌÅÇËÏ ×ÙÕÞÉÔØ É ÉÓÐÏÌØÚÏ×ÁÔØ ÄÒÕÇÉÅ, ÂÏÌÅÅ ÓÐÅÃÉÁÌØÎÙÅ ËÏÍÁÎÄÙ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ. âÏÌØÛÉÎÓÔ×Ï ËÏÍÁÎÄ Emacs`Á ÄÏÐÕÓËÁÀÔ ÃÉÆÒÏ×ÏÊ ÁÒÇÕÍÅÎÔ; ÄÌÑ ÂÏÌØÛÉÎÓÔ×Á ËÏÍÁÎÄ, ÜÔÏ ÓÌÕÖÉÔ ÓÞÅÔÞÉËÏÍ ÐÏ×ÔÏÒÅÎÉÑ. þÔÏ ÚÁÄÁÔØ ÓÞÅÔÞÉË ÐÏ×ÔÏÒÅÎÉÑ ÄÌÑ ËÏÍÁÎÄÙ, ÎÁÖÍÉÔÅ C-u, ÐÏÔÏÍ ÞÉÓÌÏ ÐÏ×ÔÏÒÅÎÉÊ, ÕËÁÖÉÔÅ ËÏÍÁÎÄÕ. åÓÌÉ Õ ×ÁÓ ÅÓÔØ ËÌÁ×ÉÛÁ META (ÉÌÉ EDIT ÉÌÉ ALT), ÅÓÔØ ÄÒÕÇÏÊ ÓÐÏÓÏ ÚÁÄÁÔØ ÃÉÆÒÏ×ÏÊ ÁÒÇÕÍÅÎÔ: ÎÁÂÅÒÉÔÅ ÃÉÆÒÙ, ÕÄÅÒÖÉ×ÁÑ ËÎÏÐËÕ META. íÙ ÒÅËÏÍÅÎÄÕÅÍ ÏÓ×ÏÉÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÅ C-u, Ô.Ë ÜÔÁ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ËÌÁ×ÉÛ ÒÁÂÏÔÁÅÔ ÎÁ ÌÀÂÏÍ ÔÅÒÍÉÎÁÌÅ. îÁÐÒÉÍÅÒ, C-u 8 C-f ÐÅÒÅÍÅÓÔÉÔ ËÕÒÓÏÒ ÎÁ ×ÏÓÅÍØ ÓÉÍ×ÏÌÏ× ×ÐÅÒÅÄ. >> ðÏÐÒÏÂÕÊÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-n ÉÌÉ C-p Ó ÃÉÆÒÏ×ÙÍ ÁÒÇÕÍÅÎÔÏÍ, ÞÔÏÂÙ ÐÅÒÅÍÅÓÔÉÔØ ËÕÒÓÏÒ ÎÁ ÓÔÒÏËÕ ÒÑÄÏÍ Ó ÜÔÏÊ ËÏÍÁÎÄÏÊ. íÎÏÇÉÅ ËÏÍÁÎÄÙ ÉÓÐÏÌØÚÕÀÔ ÞÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ ËÁË ÓÞÅÔÞÉË ÐÏ×ÔÏÒÅÎÉÊ. îÏ ÅÓÔØ ÉÓËÌÀÞÅÎÉÑ. ôÁËÉÅ ÉÓËÌÀÞÅÎÉÑ - C-v É M-v . ðÒÉ ÐÏÌÕÞÅÎÉÉ ÞÉÓÌÏ×ÏÇÏ ÁÒÇÕÍÅÎÔÁ, ÏÎÉ ÓËÒÏÌÌÉÒÕÀÔ ÜËÒÁÎ ××ÅÒÈ ÉÌÉ ×ÎÉÚ ÎÁ ÕËÁÚÁÎÎÏÅ ÞÉÓÌÏ ÓÔÒÏË, ×ÍÅÓÔÏ ÔÁËÏÇÏ ÖÅ ÞÉÓÌÁ ÜËÒÁÎÏ×. îÁÐÒÉÍÅÒ, C-u 4 C-v ÐÒÏËÒÕÔÉÔ ÜËÒÁÎ ÎÁ 4 ÓÔÒÏËÉ. >> óÅÊÞÁÓ ÐÏÐÒÏÂÕÊÔÅ ËÏÍÂÉÎÁÃÉÀ C-u 8 C-v. üÔÁ ËÏÍÁÎÄÁ ÄÏÌÖÎÁ ÐÒÏËÒÕÔÉÔØ ÜËÒÁÎ ÎÁ 8 ÓÔÒÏË ××ÅÒÈ. åÓÌÉ ×Ù ÈÏÔÉÔÅ ÐÒÏËÒÕÔÉÔØ ÅÇÏ ×ÎÉÚ, ÍÏÖÅÔÅ ÚÁÄÁÔØ ÁÒÇÕÍÅÎÔ ÄÌÑ M-v. åÓÌÉ ×Ù ÉÓÐÏÌØÚÕÅÔÅ X Window, ×ÅÒÏÑÔÎÏ ÅÓÔØ ÐÒÑÍÏÕÇÏÌØÎÉË ÉÍÅÎÕÅÍÙÊ ÐÏÌÏÓÁ ÐÒÏËÒÕÔËÉ (scroll bar) Ó ÓÐÒÁ×ÏÊ ÓÔÏÒÏÎÙ ÏËÎÁ Emacs. ÷Ù ÍÏÖÅÔÅ ÓËÒÏÌÌÉÒÏ×ÁÔØ ÔÅËÓÔ, ÍÁÎÉÐÕÌÉÒÕÑ ÍÙÛØÀ. >> ðÏÐÒÏÂÕÊÔÅ ÎÁÖÁÔØ ÓÒÅÄÎÀÀ ËÎÏÐËÕ ÍÙÛËÉ ××ÅÒÈÕ ÐÏÄÓ×ÅÞÅÎÎÏÊ ÏÂÌÁÓÔÉ ×ÎÕÔÒÉ ÐÏÌÏÓÙ ÐÒÏËÒÕÔËÉ. ôÅËÓÔ ÄÏÌÖÅÎ ÐÒÏËÒÕÔÉÔØÓÑ ÄÏ ÐÏÚÉÃÉÉ, ÏÐÒÅÄÅÌÅÎÎÏÊ ÔÅÍ, ËÁË ×ÙÓÏËÏ ÉÌÉ ÎÉÚËÏ ×Ù ÎÁÖÍÅÔÅ. >> ðÅÒÍÅÓÔÉÔÅ ÍÙÛËÕ × ÔÏÞËÕ ÐÏÌÏÓÙ ÐÒÏËÒÕÔËÉ ×ÏÚÌÅ ÔÒÅÔÅÊ ÓÔÒÏËÉ Ó×ÅÒÈÕ É ÎÁÖÍÉÔÅ ÌÅ×ÕÀ ËÎÏÐËÕ ÐÁÒÕ ÒÁÚ. * õðòá÷ìåîéå ëõòóïòïí îá X-ôåòíéîáìå ------------------------------------ åÓÌÉ Õ ×ÁÓ X-ÔÅÒÍÉÎÁÌ, ×ÁÍ, ×ÅÒÏÑÔÎÏ, ÐÏËÁÖÅÔÓÑ ÂÏÌÅÅ ÌÅÇËÉÍ ÉÓÐÏÌØÚÏ×ÁÔØ ËÌÁ×ÉÛÉ ÎÁ keypad`Å ÄÌÑ ÕÐÒÁ×ÌÅÎÉÑ ËÕÒÓÏÒÏÍ. óÔÒÅÌËÉ ×ÌÅ×Ï, ×ÐÒÁ×Ï, ××ÅÒÈ É ×ÎÉÚ ÐÅÒÅÄ×ÉÇÁÀÔ ËÕÒÓÏÒ × ÏÖÉÄÁÅÍÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ; ÏÎÉ ÆÕÎËÃÉÏÎÉÒÕÀÔ ÔÏÞÎÏ ËÁË C-b, C-f, C-p, É C-n, ÎÏ ÌÅÇÞÅ × ÎÁÂÏÒÅ É ÚÁÐÏÍÉÎÁÎÉÉ. ÷Ù ÔÁË ÖÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-left É C-right ÄÌÑ ÐÅÒÅÄ×ÉÖÅÎÉÑ ÐÏ ÓÌÏ×ÁÍ, É C-up É C-down ÄÌÑ ÐÅÒÅÄ×ÉÖÅÎÉÑ ÐÏ ÂÌÏËÁÍ (Ô.Å. ÐÁÒÁÇÒÁÆÁÍ, ÅÓÌÉ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÔÅËÓÔ). åÓÌÉ Õ ×ÁÓ ÅÓÔØ ËÎÏÐËÁ ÐÏÍÅÞÅÎÎÁÑ HOME (ÉÌÉ BEGIN) É END, ÔÏ ÏÎÉ ÂÕÄÕÔ ÐÅÒÅÍÅÝÁÔØ ËÕÒÓÏÒ × ÎÁÞÁÌÏ É ËÏÎÅà ÓÔÒÏËÉ, ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ, É C-home É C-end ÂÕÄÕÔ ÐÅÒÅÍÅÝÁÔØ × ÎÁÞÁÌÏ É ËÏÎÅà ÆÁÊÌÁ. åÓÌÉ ÎÁ ×ÁÛÅÊ ËÌÁ×ÉÁÔÕÒÅ ÅÓÔØ ËÎÏÐËÉ PgUp É PgDn, ×Ù ÍÏÖÅÔÅ ÉÈ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ××ÅÒÈ É ×ÎÉÚ ÐÏÜËÒÁÎÎÏ, ËÁË M-v É C-v. ÷ÓÅ ÜÔÉ ËÏÍÁÎÄÙ ÍÏÇÕÔ ÐÏÌÕÞÁÔØ ÃÉÆÒÏ×ÏÊ ÁÒÇÕÍÅÎÔ, ËÁË ÒÁÓÓËÁÚÁÎÏ ×ÙÛÅ. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ shortcut ÄÌÑ ××ÏÄÁ ÜÔÏÇÏ ÁÒÇÕÍÅÎÔÁ: ÐÒÏÓÔÏ ÎÁÖÍÉÔÅ CONTROL ÉÌÉ META É ÎÁÂÅÒÉÔÅ ÞÉÓÌÏ. îÁÐÒÉÍÅÒ, ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ÎÁ 12 ÓÌÏ× ×ÐÒÁ×Ï, ÎÁÂÅÒÉÔÅ C-1 C-2 C-right. úÁÐÏÍÎÉÔÅ ÞÔÏ ÔÁË ÏÞÅÎØ ÌÅÇËÏ ÎÁÂÉÒÁÔØ, ÐÏÔÏÍÕ ÞÔÏ ×Ù ÎÅ ÏÔÐÕÓËÁÅÔÅ ËÎÏÐËÕ CONTROL ÍÅÖÄÕ ÎÁÖÁÔÉÑÍÉ. * åóìé EMACS úá÷éó ------------------ åÓÌÉ Emacs ÐÅÒÅÓÔÁÌ ÒÅÁÇÉÒÏ×ÁÔØ ÎÁ ×ÁÛÉ ËÏÍÁÎÄÙ, ×Ù ÍÏÖÅÔÅ ÏÓÔÁÎÏ×ÉÔØ ÜÔÏ ÐÒÏÓÔÏ ÎÁÖÁ× C-g. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-g ÞÔÏ ÏÓÔÁÎÏ×ÉÔØ ËÏÍÁÎÄÕ ËÏÔÏÒÁÑ ÓÌÉÛËÏÍ ÄÏÌÇÏ ×ÙÐÏÌÎÑÅÔÓÑ. ÷Ù ÔÁË ÖÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-g ÄÌÑ ÏÔÍÅÎÙ ÃÉÆÒÏ×ÏÇÏ ÁÒÇÕÍÅÎÔÁ ÉÌÉ ÎÁÞÁÔÏÊ ËÏÍÁÎÄÙ ËÏÔÏÒÕÀ ×Ù ÎÅ ÈÏÔÉÔÅ ÚÁ×ÅÒÛÁÔØ. >> îÁÂÅÒÉÔÅ C-u 100 ÄÌÑ ÚÁÄÁÎÉÑ ÁÒÇÕÍÅÎÔÁ 100, ÐÏÔÏÍ ÎÁÖÍÉÔÅ C-g. ôÅÐÅÒØ ÎÁÖÍÉÔÅ C-f. ëÕÒÓÏÒ ÄÏÌÖÅÎ ÐÅÒÅÍÅÓÔÉÔØÓÑ ×ÓÅÇÏ ÎÁ ÏÄÉÎ ÓÉÍ×ÏÌ, ÐÏÔÏÍÕ ÞÔÏ ×Ù ÏÔÍÅÎÉÌÉ ÁÒÇÕÍÅÎÔ ÎÁÖÁÔÉÅÍ C-g. åÓÌÉ ×Ù ÎÁÖÁÌÉ ÐÏ ÏÛÉÂËÅ, ×Ù ÔÁË ÖÅ ÍÏÖÅÔÅ ÉÚÂÁ×ÉÔØÓÑ ÏÔ ÜÔÏÇÏ ÎÁÖÁÔÉÅÍ C-g. * ÷ùëìàþåîîùå ëïíáîäù (DISABLED COMMANDS) ----------------------------------------- îÅËÏÔÏÒÙÅ ËÏÍÁÎÄÙ Emacs "×ÙËÌÀÞÅÎÙ" ÔÁË ËÁË ÎÁÞÉÎÁÀÝÉÅ ÐÏÌØÚÏ×ÁÔÅÌÉ ÍÏÇÕÔ ÉÈ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÌÕÞÁÊÎÏ. åÓÌÉ ×Ù ÎÁÂÒÁÌÉ ÏÄÎÕ ÉÚ ×ÙËÌÀÞÅÎÎÙÈ ËÏÍÁÎÄ, Emacs ÐÏËÁÖÅÔ ÓÏÏÂÝÅÎÉÅ ÇÏ×ÏÒÑÝÅÅ ËÁËÁÑ ËÏÍÁÎÄÁ ×ÙÚÙ×ÁÅÔÓÑ, É ÓÐÒÏÓÉÔ, ÈÏÔÉÔÅ ÌÉ ×Ù ÐÒÏÄÏÌÖÉÔØ É ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ. åÓÌÉ ×Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÐÏÐÒÏÂÏ×ÁÔØ ËÏÍÁÎÄÕ, ÎÁÖÍÉÔÅ ðÒÏÂÅÌ (Space) × ÏÔ×ÅÔ ÎÁ ÜÔÏÔ ×ÏÐÒÏÓ. ïÂÙÞÎÏ, ÅÓÌÉ ×Ù ÎÅ ÈÏÔÉÔÅ ×ÙÐÏÌÎÑÔØ ×ÙËÌÀÞÅÎÎÕÀ ËÏÍÁÎÄÕ, ÏÔ×ÅÞÁÊÔÅ ÎÁ ×ÏÐÒÏÓ "n". >> îÁÖÍÉÔÅ `C-x n p' (×ÙËÌÀÞÅÎÎÁÑ ËÏÍÁÎÄÁ), ÐÏÔÏÍ ÏÔ×ÅÔØÔÅ "n" ÎÁ ×ÏÐÒÏÓ. * ïëîá ------ Emacs ÍÏÖÅÔ ÉÍÅÔØ ÎÅÓËÏÌØËÏ ÏËÏÎ, ËÁÖÄÏÅ ÏÔÏÂÒÁÖÁÅÔ Ó×ÏÊ ÔÅËÓÔ. úÁÍÅÔØÔÅ, "ÏËÎÏ" ÉÓÐÏÌØÚÕÅÍÏÅ Emacs`ÏÍ ÜÔÏ ÎÅ ÏÔÄÅÌØÎÙÅ ÐÅÒÅËÒÙ×ÁÀÝÅÅÓÑ ÏËÎÁ × ÏËÏÎÎÏÊ ÓÉÓÔÅÍÙ, ÜÔÏ ÏÔÄÅÌØÎÙÅ ÏÂÌÁÓÔÉ × ÏÄÎÏÍ ÏËÎÅ X window. (Emacs ÔÁË ÖÅ ÍÏÖÅÔ ÉÍÅÔØ ÎÅÓËÏÌØËÏ ÏËÏÎ X windows, ÉÌÉ "ËÁÄÒÏ×" ("frames") × ÔÅÒÍÉÎÏÌÏÇÉÉ Emacs. üÔÏ ÂÕÄÅÔ ÏÐÉÓÁÎÏ ÐÏÚÖÅ.) îÁ ÜÔÏÊ ÓÔÁÄÉÉ ÌÕÞÛÅ ÎÅ ÐÏÇÒÕÖÁÔØÓÑ × ÔÅÈÎÏÌÏÇÉÀ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÍÎÏÖÅÓÔ×Á ÏËÏÎ. îÏ ×ÁÍ ÎÕÖÎÏ ÚÎÁÔØ, ËÁË ÉÚÂÁ×ÌÑÔØÓÑ ÏÔ ÌÉÛÎÉÈ ÏËÏÎ, ËÏÔÏÒÙÅ ÍÏÇÕÔ ÐÏÑ×ÌÑÔØÓÑ ÞÔÏ ÏÔÏÂÒÁÚÉÔØ ÐÏÍÏÝØ, ÉÌÉ ×Ù×ÏÄ ÏÐÒÅÄÅÌÅÎÎÙÈ ËÏÍÁÎÄ. üÔÏ ÐÒÏÓÔÏ: C-x 1 ïÄÎÏ ÏËÎÏ. (ÚÁËÒÙÔØ ×ÓÅ ÄÒÕÇÉÅ ÏËÎÁ). üÔÏ Control-x ÓÏ ÓÌÅÄÕÀÝÅÊ ÃÉÆÒÏÊ 1. C-x 1 ÒÁÚ×ÅÒÎÅÔ ÏËÎÏ ËÏÔÏÒÏÅ ÓÏÄÅÒÖÉÔ ËÕÒÓÏÒ, ÔÁË, ÞÔÏ ÏÎÏ ÚÁÎÑÌÏ ×ÅÓØ ÜËÒÁÎ. üÔÏ ÕÄÁÌÉÔ ×ÓÅ ÄÒÕÇÉÅ ÏËÎÁ. >> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÜÔÕ ÓÔÒÏËÕ É ÎÁÖÍÉÔÅ C-u 0 C-l. (úÁÐÏÍÎÉÔÅ ÞÔÏ C-l ÐÅÒÅÒÉÓÏ×Ù×ÁÅÔ ÜËÒÁÎ. åÓÌÉ ×Ù ÚÁÄÁÅÔÅ ÃÉÆÒÏ×ÏÊ ÁÒÇÕÍÅÎÔ ÄÌÑ ÜÔÏÊ ËÏÍÁÎÄÙ, ÜÔÏ ÚÎÁÞÉÔ "ÐÅÒÅÒÉÓÏ×ÁÔØ ÜËÒÁÎ É ÐÏÍÅÓÔÉÔØ ÔÅËÕÝÕÀ ÓÔÒÏËÕ ÎÁ ÓÔÏÌØËÏ-ÔÏ ÓÔÒÏË ÏÔ ÎÁÞÁÌÁ ÜËÒÁÎÁ." ôÁË C-u 0 C-l ÏÚÎÁÞÁÅÔ "ÐÅÒÅÒÉÓÏ×ÁÔØ ÜËÒÁÎ, ÐÏÍÅÓÔÉÔØ ÔÅËÕÝÕÀ ÓÔÒÏËÕ × ÎÁÞÁÌÅ.") >> îÁÂÅÒÉÔÅ Control-x 2 ðÏÓÍÏÔÒÉÔÅ, ËÁË ÔÅËÕÝÅÅ ÏËÎÏ ÓÏÖÍÅÔÓÑ, ËÏÇÄÁ ÎÏ×ÏÅ ÐÏÑ×ÉÔÓÑ É ÏÔÏÂÒÁÚÉÔ ÓÏÄÅÒÖÉÍÏÅ ÜÔÏÇÏ ÂÕÆÅÒÁ. >> îÁÂÅÒÉÔÅ C-x 1 É ÐÏÓÍÏÔÒÉÔÅ ËÁË ÏËÎÏ ÉÓÞÅÚÎÅÔ. * ÷óôá÷ëá é õäáìåîéå -------------------- åÓÌÉ ×Ù ÈÏÔÉÔÅ ×ÓÔÁ×ÉÔØ ÔÅËÓÔ, ÐÒÏÓÔÏ ÎÁÂÅÒÉÔÅ ÔÅËÓÔ. óÉÍ×ÏÌÙ, ËÏÔÏÒÙÅ ×Ù ÍÏÖÅÔÅ ×ÉÄÅÔØ, ÔÁËÉÅ ËÁË A, 7, *, É ÐÒ. ÐÏÎÉÍÁÀÔÓÑ Emacs`ÏÍ ËÁË ÔÅËÓÔ É ×ÓÔÁ×ÌÑÀÔÓÑ ÎÅÍÅÄÌÅÎÎÏ. îÁÖÍÉÔÅ (ËÎÏÐËÁ ÐÅÒÅ×ÏÄÁ ËÁÒÅÔËÉ) ÄÌÑ ×ÓÔÁ×ËÉ ÓÉÍ×ÏÌÁ îÏ×ÁÑóÔÒÏËÁ. ÷Ù ÍÏÖÅÔÅ ÕÄÁÌÉÔØ ÐÏÓÌÅÄÎÉÊ ÎÁÂÒÁÎÎÙÊ ÓÉÍ×ÏÌ ÎÁÖÉÍÁÑ . ëÌÁ×ÉÛÁ ÎÁ ËÌÁ×ÉÁÔÕÒÅ ÍÏÖÅÔ ÂÙÔØ ÏÂÏÚÎÁÞÅÎÁ ËÁË "Del". ÷ ÎÅËÏÔÏÒÙÈ ÓÌÕÞÁÑÈ, ËÌÁ×ÉÛÅ "Backspace" ÒÁÂÏÔÁÅÔ ËÁË , ÎÏ ÎÅ ×ÓÅÇÄÁ! ÷ ÏÓÎÏ×ÎÏÍ, ÕÄÁÌÑÅÔ ÓÉÍ×ÏÌ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÐÅÒÅÄ ÔÅËÕÝÅÊ ÐÏÚÉÃÉÅÊ ËÕÒÓÏÒÁ. >> ðÏÐÒÏÂÕÊÔÅ ÜÔÏ ÓÅÊÞÁÓ -- ÎÁÂÅÒÉÔÅ ÎÅÓËÏÌØËÏ ÓÉÍ×ÏÌÏ×, ÐÏÔÏÍ ÕÄÁÌÉÔÅ ÉÈ ÎÁÖÉÍÁÑ ÎÅÓËÏÌØËÏ ÒÁÚ. îÅ ×ÏÌÎÕÊÔÅÓØ Ï ÉÚÍÅÎÅÎÉÑÈ ÜÔÏÇÏ ÆÁÊÌÁ; ×Ù ÎÅ ÉÚÍÅÎÑÅÔÅ ÇÌÁ×ÎÙÊ ÕÞÅÂÎÉË. üÔÏ ×ÁÛÁ ÌÉÞÎÁÑ ËÏÐÉÑ ÕÞÅÂÎÉËÁ. ëÏÇÄÁ ÓÔÒÏËÁ ÔÅËÓÔÁ ÓÔÁÎÏ×ÉÔÓÑ ÓÌÉÛËÏÍ ÂÏÌØÛÏÊ ÄÌÑ ÓÔÒÏËÉ ÜËÒÁÎÁ, ÓÔÒÏËÁ ÔÅËÓÔÁ "ÐÒÏÄÏÌÖÁÅÔÓÑ" ÎÁ ÓÌÅÄÕÀÝÅÊ ÓÔÒÏËÅ ÜËÒÁÎÁ. óÉÍ×ÏÌ "ÏÂÒÁÔÎÏÅ ÄÅÌÅÎÉÅ" ("\") Ó ÐÒÁ×ÏÊ ÇÒÁÎÉÃÙ ÐÏËÁÚÙ×ÁÅÔ, ÞÔÏ ÓÔÒÏËÁ ÂÕÄÅÔ ÐÒÏÄÏÌÖÅÎÁ. >> ÷ÓÔÁ×ÌÑÊÔÅ ÔÅËÓÔ, ÐÏËÁ ÎÅ ÄÏÓÔÉÇÎÉÔÅ ÐÒÁ×ÏÊ ÇÒÁÎÉÃÙ, É ÐÒÏÄÏÌÖÁÊÔÅ ×ÓÔÁ×ËÕ. ÷Ù Õ×ÉÄÉÔÅ, ËÁË ÐÏÑ×ÉÔÓÑ ÓÉÍ×ÏÌ ÐÒÏÄÏÌÖÅÎÉÑ ÓÔÒÏËÉ. >> éÓÐÏÌØÚÕÊÔÅ ÄÌÑ ÕÄÁÌÅÎÉÑ ÔÅËÓÔÁ, ÐÏËÁ ÓÔÒÏËÁ ÎÅ ÐÏÍÅÓÔÉÔÓÑ × ÜËÒÁÎ ÓÎÏ×Á. óÉÍ×ÏÌ ÐÒÏÄÏÌÖÅÎÉÑ ÓÔÒÏËÉ ÉÓÞÅÚÎÅÔ. íÏÖÎÏ ÕÄÁÌÑÔØ ÓÉÍ×ÏÌ îÏ×ÁÑóÔÒÏËÁ ÔÁË ÖÅ, ËÁË É ÌÀÂÏÊ ÄÒÕÇÏÊ. õÄÁÌÅÎÉÅ ÓÉÍ×ÏÌÁ îÏ×ÁÑóÔÒÏËÁ ÍÅÖÄÕ Ä×ÕÍÑ ÓÔÒÏËÁÍÉ ÐÒÉ×ÅÄÅÔ Ë ÓËÌÅÊËÅ ÉÈ × ÏÄÎÕ. åÓÌÉ ÒÅÚÕÌØÔÉÒÕÀÝÁÑ ÓÔÒÏËÁ ÓÌÉÛËÏÍ ÄÌÉÎÎÁÑ, ÞÔÏÂÙ ×ÍÅÓÔÉÔØÓÑ × ÜËÒÁÎ, ÏÎÁ ÂÕÄÅÔ ÏÔÏÂÒÁÖÅÎÁ ËÁË ÐÒÏÄÏÌÖÅÎÎÁÑ ÓÔÒÏËÁ. >> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ × ÎÁÞÁÌÏ ÓÔÒÏËÉ É ÎÁÖÍÉÔÅ . üÔÏ ÓÏÅÄÉÎÉÔ ÔÅËÕÝÕÀ ÓÔÒÏËÕ É ÐÒÅÄÙÄÕÝÕÀ. >> îÁÖÍÉÔÅ ÄÌÑ ×ÓÔÁ×ËÉ ÓÉÍ×ÏÌÁ îÏ×ÁÑóÔÒÏËÁ ÓÎÏ×Á, ×ÍÅÓÔÏ ÕÄÁÌÅÎÎÏÇÏ ×ÁÍÉ. ðÏÍÎÉÔÅ, ÞÔÏ ÍÎÏÇÉÅ ËÏÍÁÎÄÙ Emacs ÍÏÇÕÔ ÐÏÌÕÞÁÔØ ÓÞÅÔÞÉË ÐÏ×ÔÏÒÅÎÉÑ; ÐÒÏÓÔÙÅ ÓÉÍ×ÏÌÙ ÎÅ ÉÓËÌÀÞÅÎÉÅ. îÅÂÅÒÁÊÔÅ ÐÒÏÓÔÙÅ ÓÉÍ×ÏÌÙ ×ÓÔÁ×ÌÑÑ ÉÈ ÐÏ ÎÅÓËÏÌØËÏ ÚÁ ÏÄÉÎ ÒÁÚ. >> ðÏÐÒÏÂÕÊÔÅ ÜÔÏ -- ÎÁÂÅÒÉÔÅ C-u 8 * ÄÌÑ ×ÓÔÁ×ËÉ ********. ôÅÐÅÒØ ×Ù ÎÁÕÞÉÌÉÓØ ÏÓÎÏ×ÎÏÍÕ ÓÐÏÓÏÂÕ ÎÁÂÒÉÔØ ÞÔÏ-ÎÉÂÕÄØ × Emacs É ÉÓÐÒÁ×ÌÑÔØ ÏÛÉÂËÉ. ôÁË ÖÅ ×Ù ÍÏÖÅÔÅ ÕÄÁÌÑÔØ ÓÌÏ×Á É ÓÔÒÏËÉ. úÄÅÓØ ÓÏÂÒÁÎÙ ÏÐÅÒÁÃÉÉ ÕÄÁÌÅÎÉÑ: ÕÄÁÌÉÔØ ÓÉÍ×ÏÌ ÐÅÒÅÄ ËÕÒÓÏÒÏÍ C-d ÕÄÁÌÉÔØ ÓÉÍ×ÏÌ ÓÌÅÄÕÀÝÉÊ ÚÁ (ÎÁÄ) ËÕÒÓÏÒÏÍ M- õÂÉÔØ ÓÔÒÏËÕ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÐÅÒÅÄ ËÕÒÓÏÒÏÍ M-d õÂÉÔØ ÓÌÏ×Ï ÓÌÅÄÕÀÝÅÅ ÚÁ ËÕÒÓÏÒÏÍ C-k õÂÉÔØ ×ÓÅ ÏÔ ËÕÒÓÏÒÁ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ M-k õÂÉÔØ ×ÓÅ ÄÏ ËÏÎÃÁ ÐÒÅÄÌÏÖÅÎÉÑ úÁÍÅÔØÔÅ, ÞÔÏ É C-d ÐÒÏÔÉ× M- É M-d ÒÁÓÛÉÒÑÀÔ ÐÁÒÁÌÌÅÌØ ÎÁÞÁÔÕÀ, C-f É M-f (ÄÁ, ÜÔÏ ÎÅ ÒÅÁÌØÎÙÊ control-ÓÉÍ×ÏÌ, ÎÏ ÎÅ ÎÕÖÎÏ ×ÏÌÎÏ×ÁÔØÓÑ Ï ÜÔÏÍ). C-k É M-k ËÁË É C-e É M-e, ÐÒÏ×ÏÄÑÔ ÐÁÒÁÌÌÅÌØ ÍÅÖÄÕ ÓÔÒÏËÁÍÉ É ÐÒÅÄÌÏÖÅÎÉÑÍÉ. ëÏÇÄÁ ×Ù ÕÄÁÌÑÅÔÅ ÂÏÌÅÅ ÞÅÍ ÏÄÉÎ ÓÉÍ×ÏÌ ÓÒÁÚÕ, Emacs ÓÏÈÒÁÎÑÅÔ ÕÄÁÌÅÎÎÙÊ ÔÅËÓÔ, ÞÔÏÂÙ ×Ù ÍÏÇÌÉ ×ÅÒÎÕÔØ ÅÇÏ ÏÂÒÁÔÎÏ. ÷ÏÚ×ÒÁÔ ÔÅËÓÔÁ, ÕÄÁÌÅÎÎÏÇÏ ÒÁÎÅÅ, ÎÁÚÙ×ÁÀÔ "×ÏÓÓÔÁÎÏ×ÌÅÎÉÅ" ("yanking"). ÷Ù ÍÏÖÅÔÅ ×ÏÓÓÔÁÎÏ×ÉÔØ ÕÄÁÌÅÎÎÙÊ ÔÅËÓÔ × ÔÏÍ ÖÅ ÍÅÓÔÅ, ÉÌÉ × ÌÀÂÏÍ ÄÒÕÇÏÍ. ÷Ù ÍÏÖÅÔÅ ×ÏÓÓÔÁÎÏ×ÉÔØ ÔÅËÓÔ ÎÅÓËÏÌØËÏ ÒÁÚ É ÐÏÌÕÞÉÔØ ÍÎÏÇÏ ËÏÐÉÊ. ëÏÍÁÎÄÁ "×ÏÓÓÔÁÎÏ×ÉÔØ" - C-y. úÁÍÅÔØÔÅ, ÞÔÏ ÅÓÔØ ÒÁÚÎÉÃÁ ÍÅÖÄÕ "ÕÄÁÌÉÔØ" É "ÕÂÉÔØ" ÞÔÏ-ÎÉÂÕÄØ. "õÂÉÔÏÅ" ÍÏÖÅÔ ÂÙÔØ ×ÏÓÓÔÁÎÏ×ÌÅÎÏ ÎÁÚÁÄ, Á ÕÄÁÌÅÎÎÏÅ - ÎÅÔ. ïÂÙÞÎÏ, ËÏÍÁÎÄÙ, ËÏÔÏÒÙÅ ÍÏÇÕÔ ÕÂÉÒÁÔØ ÍÎÏÇÏ ÔÅËÓÔÁ, ÓÏÈÒÁÎÑÀÔ ÅÇÏ, Á ËÏÍÁÎÄÙ, ÕÄÁÌÑÀÝÉÅ ÏÄÉÎ ÓÉÍ×ÏÌ ÉÌÉ ÐÒÏÓÔÏ ÐÕÓÔÕÀ ÓÔÒÏËÕ, ÎÅ ÓÏÈÒÁÎÑÀÔ ÕÄÁÌÅÎÎÏÅ. >> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÎÁÞÁÌÏ ÎÅÐÕÓÔÏÊ ÓÔÒÏËÉ. ôÅÐÅÒØ ÎÁÖÍÉÔÅ C-k ÞÔÏ ÕÂÉÔØ ÔÅËÓÔ × ÜÔÏÊ ÓÔÒÏËÅ. >> îÁÖÍÉÔÅ C-k ÅÝÅ ÒÁÚ. ÷Ù ×ÉÄÉÔÅ, ÞÔÏ ÜÔÏ ÕÂßÅÔ ÓÉÍ×ÏÌ îÏ×ÁÑóÔÒÏËÁ ÓÌÅÄÕÀÝÉÊ ÚÁ ÜÔÏÊ ÓÔÒÏËÏÊ. úÁÍÅÔØÔÅ ÞÔÏ ÐÅÒ×ÏÅ C-k ÕÂÉ×ÁÅÔ ÓÏÄÅÒÖÉÍÏÅ ÓÔÒÏËÉ, Á ×ÔÏÒÏÅ C-k ÕÂÉ×ÁÅÔ ÓÁÍÕ ÓÔÒÏËÕ É ÐÏÄÎÉÍÁÅÔ ÄÒÕÇÉÅ ÓÔÒÏËÉ ××ÅÒÈ. C-k ÏÂÒÁÂÁÔÙ×ÁÅÔ ÞÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ ÓÐÅÃÉÁÌØÎÙÍ ÏÂÒÁÚÏÍ: ÕÂÉ×ÁÅÔ ÍÎÏÇÏ ÓÔÒÏË _é_ ÉÈ ÓÏÄÅÒÖÉÍÏÅ. ÜÔÏ ÎÅ ÐÒÏÓÔÏ ÐÏ×ÔÏÒÅÎÉÅ. C-u 2 C-k ÕÂ`ÅÔ Ä×Å ÓÔÒÏÉ É ÚÁ×ÅÒÛÁÀÝÉÅ ÉÈ ÓÉÍ×ÏÌÙ îÏ×ÁÑóÔÒÏËÁ; ÷×ÏÄ C-k Ä×ÁÖÄÙ ÎÅ ÓÄÅÌÁÅÔ ÜÔÏÇÏ. äÌÑ ÔÏÇÏ ÞÔÏ ×ÅÒÎÕÔØ ÐÏÓÌÅÄÎÉÊ ÕÂÉÔÙÊ ÔÅËÓÔ × ÍÅÓÔÏ ÒÁÓÐÏÌÏÖÅÎÉÅ ËÕÒÓÏÒÁ ÎÁÂÅÒÉÔÅ C-y. >> ðÏÐÒÏÂÕÊÔÅ ÜÔÏ; ÎÁÂÅÒÉÔÅ C-y ÞÔÏ ×ÅÒÎÕÔØ ÔÅËÓÔ ÎÁÚÁÄ. äÕÍÁÊÔÅ Ï C-y ËÁË Ï ÓÐÏÓÏÂÅ ×ÅÒÎÕÔØ ÞÔÏ-ÔÏ ÎÁÚÁÄ, ÞÔÏ ×Ù ÐÏÔÅÒÑÌÉ. ðÏÍÎÉÔÅ, ÅÓÌÉ ×Ù ÉÓÐÏÌØÚÏ×ÁÌÉ ÎÅÓËÏÌØËÏ C-k' × ÓÔÒÏËÅ, ×ÓÅ ÕÂÉÔÙÅ ÓÔÒÏËÉ ÂÕÄÕÔ ÓÏÈÒÁÎÅÎÙ ×ÍÅÓÔÅ, ÔÁË, ÞÔÏ C-y ×ÏÓÓÔÁÎÏ×ÉÔ ÉÈ ×ÍÅÓÔÅ. >> ðÏÐÒÏÂÕÊÔÅ ÜÔÏ ÓÅÊÞÁÓ, ÎÁÖÍÉÔÅ C-k ÎÅÓËÏÌØËÏ ÒÁÚ. ôÅÐÅÒØ ×ÅÒÎÅÍ ÜÔÏÔ ÕÂÉÔÙÊ ÔÅËÓÔ: >> îÁÖÍÉÔÅ C-y. ôÅÐÅÒØ ÐÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÎÅÓËÏÌØËÏ ÓÔÒÏË ×ÎÉÚ, É ÓÎÏ×Á ÎÁÖÍÉÔÅ C-y. óÅÊÞÁÓ ×Ù ×ÉÄÉÔÅ ËÁË ÍÏÖÎÏ ÓËÏÐÉÒÏ×ÁÔØ ÎÅËÏÔÏÒÙÊ ÔÅËÓÔ. þÔÏ ÄÅÌÁÔØ ÅÓÌÉ ÅÓÔØ ÎÅËÏÔÏÒÙÊ ÔÅËÓÔ, ËÏÔÏÒÙÊ ×Ù ÈÏÔÉÔÅ ×ÅÒÎÕÔØ ÎÁÚÁÄ É ÐÏÔÏÍ ÕÂÉÔØ ÞÔÏ-ÔÏ ÅÝÅ? C-y ×ÅÒÎÅÔ ÎÅ ÂÏÌÅÅ ÞÅÍ ÐÏÓÌÅÄÎÉÊ ÕÄÁÌÅÎÎÙÊ ÔÅËÓÔ. îÏ ÐÒÅÄÙÄÕÝÉÊ ÔÅËÓÔ ÎÅ ÂÕÄÅÔ ÐÏÔÅÒÑÎ. ÷Ù ÓÍÏÖÅÔÅ ÅÇÏ ×ÅÒÎÕÔØ ÎÁÚÁÄ ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ M-y. ðÏÓÌÅ ÔÏÇÏ ËÁË ×Ù ×ÅÒÎÕÌÉ ÐÏÓÌÅÄÎÉÊ ÕÄÁÌÅÎÎÙÊ ÔÅËÓÔ, ÎÁÖÍÉÔÅ M-y, É ÚÁÍÅÎÉÔÅ ÜÔÏÔ ×ÏÓÓÔÁÎÏ×ÌÅÎÎÙÊ ÔÅËÓÔ ÔÅÍ, ËÏÔÏÒÙÊ ÂÙÌ ÕÂÉÔ ÒÁÎÅÅ. îÁÖÁÔÉÅ M-y ÓÎÏ×Á É ÓÎÏ×Á ÂÕÄÅÔ ×ÏÚ×ÒÁÝÁÔØ ×ÓÅ ÒÁÎÅÅ É ÒÁÎÅÅ ÕÂÉÔÙÊ ÔÅËÓÔ. ëÏÇÄÁ ×Ù ÄÏÓÔÉÇÎÉÔÅ ÉÓËÏÍÏÇÏ ÔÅËÓÔÁ, ×ÁÍ ÎÅ ÎÕÖÎÏ ÄÅÌÁÔØ ÎÉÞÅÇÏ ÂÏÌÅÅ ÞÔÏ ÓÏÈÒÁÎÉÔØ ÅÇÏ. ðÒÏÓÔÏ ÐÒÏÄÏÌÖÁÊÔÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ, ÏÓÔÁ×É× ×ÏÓÓÔÁÎÏ×ÌÅÎÎÙÊ ÔÅËÓÔ ÔÁÍ, ÇÄÅ ÏÎ ÅÓÔØ. îÁÖÉÍÁÑ M-y ÄÏÓÔÁÔÏÞÎÏÅ ÞÉÓÌÏ ÒÁÚ, ×Ù ÍÏÖÅÔÅ ×ÅÒÎÕÔØÓÑ × ÎÁÞÁÌØÎÕÀ ÔÏÞËÕ (ÎÁÉÂÏÌÅÅ ÒÁÎÎÅÅ ÕÄÁÌÅÎÉÅ). >> õÂÅÊÔÅ ÓÔÒÏËÕ, ÐÏËÒÕÔÉÔÅÓØ ËÕÒÓÏÒÏÍ ×ÏËÒÕÇ, ÐÏÔÏÍ ÕÄÁÌÉÔÅ ÅÝÅ ÏÄÎÕ ÓÔÒÏËÕ. úÁÔÅÍ ÉÓÐÏÌØÚÕÊÔÅ C-y ÄÌÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ ×ÔÏÒÏÊ ÕÂÉÔÏÊ ÓÔÒÏËÉ. úÁÔÅÍ ÉÓÐÏÌØÚÕÊÔÅ M-y É ÏÎÁ ÂÕÄÅÔ ÚÁÍÅÎÅÎÁ ÐÅÒ×ÏÊ ÕÂÉÔÏÊ ÓÔÒÏËÏÊ. îÁÖÍÉÔÅ ÅÝÅ ÎÅÓËÏÌØËÏ ÒÁÚ M-y ÞÔÏ Õ×ÉÄÅÔØ ÞÔÏ ÐÏÌÕÞÉÔÓÑ. ðÒÏÄÏÌÖÁÊÔÅ ÄÅÌÁÔØ ÜÔÏ ÐÏËÁ ×ÔÏÒÁÑ ÕÂÉÔÁÑ ÓÔÒÏËÁ ÎÅ ×ÅÒÎÅÔÓÑ, É ÅÝÅ ÞÕÔØ-ÞÕÔØ. åÓÌÉ ×ÁÍ ÈÏÞÅÔÓÑ, ×Ù ÍÏÖÅÔÅ ÚÁÄÁ×ÁÔØ ÄÌÑ M-y ÐÏÌÏÖÉÔÅÌØÎÙÅ É ÏÔÒÉÃÁÔÅÌØÎÙ ÁÒÇÕÍÅÎÔÙ. * ïôíåîá (UNDO) --------------- åÓÌÉ ×Ù ÓÄÅÌÁÌÉ ÉÚÍÅÎÅÎÉÑ × ÔÅËÓÔÅ, É ÒÅÛÉÌÉ, ÞÔÏ ÏÛÉÂÌÉÓØ, ÍÏÖÅÔÅ ÏÔÍÅÎÉÔØ ÉÚÍÅÎÅÎÉÑ ËÏÍÁÎÄÏÊ "ÏÔÍÅÎÁ", C-x u. ïÂÙÞÎÏ, C-x u ÏÔÍÅÎÑÅÔ ÉÚÍÅÎÅÎÉÑ, ÓÄÅÌÁÎÎÙÅ ÏÄÎÏÊ ËÏÍÁÎÄÏÊ; ÅÓÌÉ ÐÏ×ÔÏÒÉÔØ C-x u ÎÅÓËÏÌØËÏ ÒÁÚ ÐÏÄÒÑÄ, ËÁÖÄÙÊ ÒÁÚ ÂÕÄÅÔ ÏÔÍÅÎÑÔØÓÑ ÅÝÅ ÏÄÎÁ ËÏÍÁÎÄÁ. îÏ ÅÓÔØ Ä×Á ÉÓËÌÀÞÅÎÉÑ: ËÏÍÁÎÄÙ ËÏÔÏÒÙÅ ÎÅ ÉÚÍÅÎÑÀÔ ÔÅËÓÔ ÎÅ ÕÞÉÔÙ×ÁÀÔÓÑ (ÜÔÏ ×ËÌÀÞÁÅÔ ËÏÍÁÎÄÙ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ É ÐÒÏËÒÕÔËÉ), É ÓÁÍÏ×ÓÔÁ×ÌÑÀÝÉÅÓÑ (self-inserting) ÓÉÍ×ÏÌÙ ÏÂÒÁÂÁÔÙ×ÁÀÔÓÑ ÇÒÕÐÐÁÍÉ ÄÏ 20. (üÔÏ ÕÍÅÎØÛÁÅÔ ÞÉÓÌÏ C-x u ËÏÔÏÒÙÅ ×Ù ÍÏÖÅÔÅ ÎÁÂÒÁÔØ ÄÌÑ ÏÔÍÅÎÙ ××ÏÄÁ ÔÅËÓÔÁ.) >> õÂÅÊÔÅ ÜÔÕ ÓÔÒÏËÕ ÉÓÐÏÌØÚÕÑ C-k, ÚÁÔÅÍ ÎÁÂÅÒÉÔÅ C-x u É ÏÎÁ ÄÏÌÖÎÁ ×ÅÒÎÕÔØÓÑ ÎÁÚÁÄ. C-_ ÁÌØÔÅÒÎÁÔÉ×ÎÁÑ ËÏÍÁÎÄÁ ÏÔÍÅÎÙ; ÏÎÁ ÒÁÂÏÔÁÅÔ ÔÁËÖÅ ËÁË É C-x u, ÎÏ ÌÅÇÞÅ × ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÎÅÓËÏÌØËÏ ÒÁÚ ÐÏÄÒÑÄ. îÅÕÄÏÂÎÏÅ ÐÏÌÏÖÅÎÉÅ C-_ Á ÎÁ ÎÅËÏÔÏÒÙÈ ËÌÁ×ÉÁÔÕÒÁÈ ÄÅÌÁÅÔ ÎÅÏÞÅ×ÉÄÎÙÍ ÓÐÏÓÏ ÅÅ ÎÁÂÏÒÁ. ðÏÜÔÏÍÕ ÍÙ ÐÒÅÄÌÁÇÁÅÍ C-x u Ë ÉÓÐÏÌØÚÏ×ÁÎÉÀ. îÁ ÎÅËÏÔÏÒÙÈ ÔÅÒÍÉÎÁÌÁÈ, ×Ù ÍÏÖÅÔÅ ÎÁÂÉÒÁÔØ C-_ ÎÁÖÉÍÁÑ / É ÕÄÅÒÖÉ×ÁÑ ËÌÁ×ÉÛÕ CTRL. þÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ ÄÌÑ C-_ ÉÌÉ C-x u ÒÁÂÏÔÁÅÔ ËÁË ÓÞÅÔÞÉË ÐÏ×ÔÏÒÅÎÉÑ. * æáêìù ------- þÔÏÂÙ ÓÏÚÄÁÎÎÙÊ ÔÅËÓÔ ÍÏÖÎÏ ÂÙÌÏ ÒÅÄÁËÔÉÒÏ×ÁÔØ ÐÏÚÖÅ, ×Ù ÄÏÌÖÎÙ ÅÇÏ ÐÏÍÅÓÔÉÔØ × ÆÁÊÌ. éÎÁÞÅ, ÏÎ ÉÓÞÅÚÎÅÔ ËÏÇÄÁ ×Ù ×ÙÊÄÉÔÅ ÉÚ Emacs. ÷Ù ÐÏÍÅÝÁÅÔÅ ×ÁÛ ÔÅËÓÔ × ÆÁÊÌ "ÏÔËÒÙ×ÁÑ" ÆÁÊÌ. (åÝÅ ÜÔÏ ÎÁÚÙ×ÁÀÔ "ÐÒÉÊÔÉ" × ÆÁÊÌ.) (// × ÏÒÉÇÉÎÁÌÅ ÔÅÒÍÉÎÙ "finding", É "visiting") ïÔËÒÙÔØ ÆÁÊÌ ÏÚÎÁÞÁÅÔ ÐÏÓÍÏÔÒÅÔØ ÅÇÏ ÓÏÄÅÒÖÉÍÏÅ ÉÓÐÏÌØÚÕÑ Emacs. ÷Ï ÍÎÏÇÉÈ ÓÌÕÞÁÑÈ, ÜÔÏ ÐÒÏÉÓÈÏÄÉÔ ËÏÇÄÁ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÆÁÊÌ ÓÁÍÉ. ïÄÎÁËÏ ×ÁÛÉ ÉÚÍÅÎÅÎÉÑ, ÓÄÅÌÁÎÎÙÅ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ Emacs ÎÅ ÂÕÄÕÔ ÚÁÆÉËÓÉÒÏ×ÁÎÙ, ÐÏËÁ ×Ù ÎÅ "ÓÏÈÒÁÎÉÔÅ" ("save") ÆÁÊÌ. ôÁË ×Ù ÍÏÖÅÔÅ ÎÅ ÏÓÔÁ×ÌÑÔØ ÐÏÌÕÉÚÍÅÎÅÎÎÙÊ ÆÁÊÌ × ÓÉÓÔÅÍÅ, ÅÓÌÉ ×Ù ÎÅ ÈÏÔÉÔÅ ÜÔÏÇÏ. äÁÖÅ ËÏÇÄÁ ×Ù ÓÏÈÒÁÎÑÅÔÅ ÆÁÊÌ, Emacs ÏÓÔÁ×ÌÑÅÔ ÏÒÉÇÉÎÁÌØÎÙÊ ÆÁÊÌ Ó ÉÚÍÅÎÅÎÎÙÍ ÉÍÅÎÅÍ, ÞÔÏ ×Ù ÍÏÇÌÉ ÐÏÚÖÅ ÒÅÛÉÔØ ÞÔÏ ×ÁÛÉ ÉÚÍÅÎÅÎÉÑ ÂÙÌÉ ÏÛÉÂÏÞÎÙ. åÓÌÉ ÐÏÓÍÏÔÒÅÔØ × ÎÉÖÎÀÀ ÞÁÓÔØ ÜËÒÁÎÁ, ×Ù Õ×ÉÄÉÔÅ ÓÔÒÏËÕ ËÏÔÏÒÁÑ ÎÁÞÉÎÁÅÔÓÑ Ó ÔÉÒÅ É ÓÏÄÅÒÖÉÔ ÓÔÒÏËÕ "Emacs: TUTORIAL.ru". üÔÁ ÞÁÓÔØ ÜËÒÁÎÁ ×ÓÅÇÄÁ ÐÏËÁÚÙ×ÁÅÔ ÉÍÑ ÆÁÊÌÁ ËÏÔÏÒÙÊ ×Ù ÏÔËÒÙÌÉ. éÔÁË, ÓÅÊÞÁÓ ×Ù ÏÔËÒÙÌÉ ÆÁÊÌ Ó ÉÍÅÎÅÍ "TUTORIAL.ru" ËÏÔÏÒÙÊ Ñ×ÌÑÅÔÓÑ ×ÁÛÅÊ ÐÅÒÓÏÎÁÌØÎÏÊ ËÏÐÉÅÊ ÕÞÅÂÎÉËÁ Emacs. ìÀÂÏÊ ÆÁÊÌ ËÏÔÏÒÙÊ ×Ù ÏÔËÒÏÅÔÅ, ÜÔÏ ÉÍÑ ÆÁÊÌÁ Ó ÄÏÂÁ×ÌÅÎÎÏÊ ÍÁÌÅÎØËÏÊ ËÒÁÐÉÎËÏÊ. (Whatever file you find, that file's name will appear in that precise spot.) ëÏÍÁÎÄÙ ÄÌÑ ÏÔËÒÙÔÉÑ É ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ × ÏÔÌÉÞÉÉ ÏÔ ÄÒÕÇÉÈ ËÏÍÁÎÄ, ËÏÔÏÒÙÅ ×Ù ÕÖÅ ×ÙÕÞÉÌÉ, ÔÒÅÂÕÀÔ Ä×ÕÈ ÓÉÍ×ÏÌÏ×. ïÎÉ ÏÂÁ ÎÁÞÉÎÁÀÔÓÑ Ó ÓÉÍ×ÏÌÁ Control-x. âÏÌØÛÁÑ ÓÅÒÉÑ ËÏÍÁÎÄ ÎÁÞÉÎÁÅÔÓÑ Ó ÓÉÍ×ÏÌÁ Control-x; íÎÏÇÉÅ ÉÈ ÎÉÈ ÒÁÂÏÔÁÀÔ Ó ÆÁÊÌÁÍÉ, ÂÕÆÅÒÁÍÉ É ÐÏÈÏÖÉÍÉ ×ÅÝÁÍÉ. üÔÏ ËÏÍÁÎÄÙ × Ä×Á, ÔÒÉ ÉÌÉ ÞÅÔÙÒÅ ÓÉÍ×ÏÌÁ ÄÌÉÎÏÊ. óÌÅÄÕÀÝÅÅ, ÞÔÏ ×ÁÍ ÎÕÖÎÏ ÚÎÁÔØ Ï ËÏÍÁÎÄÅ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ - ÜÔÏ ÔÏ, ÞÔÏ ×Ù ÄÏÌÖÎÙ ××ÅÓÔÉ ÉÍÑ ÆÁÊÌÁ, ËÏÔÏÒÙÊ ÎÕÖÎÏ ÞÉÔÁÔØ. íÙ ÜÔÏ ÎÁÚÙ×ÁÅÍ ËÏÍÁÎÄÁ "ÞÉÔÁÀÝÁÑ ÁÒÇÕÍÅÎÔ Ó ÔÅÒÍÉÎÁÌÁ" (× ÜÔÏÍ ÓÌÕÞÁÅ, ÁÒÇÕÍÅÎÔ ÜÔÏ ÉÍÑ ÆÁÊÌÁ). ðÏÓÌÅ ××ÏÄÁ ËÏÍÁÎÄÙ C-x C-f ïÔËÒÙÔØ (ÎÁÊÔÉ) ÆÁÊÌ Emacs ÐÏÐÒÏÓÉÔ ×ÁÓ ××ÅÓÔÉ ÉÍÑ ÆÁÊÌÁ. éÍÑ ÆÁÊÌÁ ×Ù ÎÁÂÅÒÅÔÅ × ÎÉÖÎÅÊ ÓÔÒÏËÅ ÜËÒÁÎÁ. îÉÖÎÑÑ ÓÔÒÏËÁ ÎÁÚÙ×ÁÅÔÓÑ ÍÉÎÉÂÕÆÅÒ, ÏÎ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ËÏÒÏÔËÏÇÏ ××ÏÄÁ. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÏÂÙÞÎÙÅ ËÏÍÁÎÄÙ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ Emacs ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÉÍÅÎÉ. ëÏÇÄÁ ×Ù ××ÏÄÉÔÅ ÉÍÑ ÆÁÊÌÁ (ÉÌÉ ÌÀÂÕÀ ÉÎÆÏÒÍÁÃÉÀ × ÍÉÎÉÂÕÆÅÒ), ×Ù ÍÏÖÅÔÅ ÏÔÍÅÎÉÔØ ËÏÍÁÎÄÕ ÎÁÖÁ× C-g. >> îÁÖÍÉÔÅ C-x C-f, ÚÁÔÅÍ ÎÁÖÍÉÔÅ C-g. üÔÏ ÏÔÍÅÎÉÔ ÍÉÎÉÂÕÆÅÒ, É ËÏÍÁÎÄÕ C-x C-f ËÏÔÏÒÁÑ ÉÓÐÏÌØÚÏ×ÁÌÁ ÍÉÎÉÂÕÆÅÒ. ÷ ÉÔÏÇÅ, ×Ù ÎÅ ÏÔËÒÙÌÉ ÎÉ ÏÄÎÏÇÏ ÆÁÊÌÁ. ëÏÇÄÁ ×Ù ÚÁ×ÅÒÛÉÔÅ ××ÏÄ ÉÍÅÎÉ ÆÁÊÌÁ, ÎÁÖÍÉÔÅ . äÁÌÅÅ ÓÒÁÂÏÔÁÅÔ ËÏÍÁÎÄÁ C-x C-f, É ÏÔËÒÏÅÔ ÆÁÊÌ ×ÙÂÒÁÎÎÙÊ ×ÁÍÉ. íÉÎÉÂÕÆÅÒ ÉÓÞÅÚÎÅÔ ËÏÇÄÁ ËÏÍÁÎÄ C-x C-f ÚÁ×ÅÒÛÉÔÓÑ. é ÍÇÎÏ×ÅÎÉÅÍ ÐÏÚÖÅ ÓÏÄÅÒÖÉÍÏÅ ÆÁÊÌÁ ÐÏÑ×ÉÔÓÑ ÎÁ ÜËÒÁÎÅ, É ×Ù ÓÍÏÖÅÔÅ ÅÇÏ ÒÅÄÁËÔÉÒÏ×ÁÔØ. ëÏÇÄÁ ×Ù ÚÁËÏÎÞÉÔÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ, ÞÔÏÂÙ ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ ÎÁÂÅÒÉÔÅ ËÏÍÁÎÄÕ C-x C-s óÏÈÒÁÎÉÔØ ÆÁÊÌ üÔÏ ÓËÏÐÉÒÕÅÔ ÔÅËÓ ÉÚ Emacs × ÆÁÊÌ. ÷ ÐÅÒ×ÙÊ ÒÁÚ, ËÏÇÄÁ ×Ù ÜÔÏ ÓÄÅÌÁÅÔÅ, Emacs ÐÅÒÅÉÍÅÎÕÅÔ ÏÒÉÇÉÎÁÌØÎÙÊ ÆÁÊÌ Ó ÎÏ×ÙÍ ÉÍÅÎÅÍ, ÞÔÏÂÙ ÏÎ ÎÅ ÐÏÔÅÒÑÌÓÑ. îÏ×ÏÅ ÉÍÑ ÐÏÌÕÞÁÅÔÓÑ ÄÏÂÁ×ÌÅÎÉÅÍ ÓÉÍ×ÏÌÁ "~" Ë ÏÒÉÇÉÎÁÌØÎÏÍÕ ÉÍÅÎÉ ÆÁÊÌÁ. ëÏÇÄÁ ÓÏÈÒÁÎÅÎÉÅ ÚÁ×ÅÒÛÉÔÓÑ, Emacs ÎÁÐÅÞÁÔÁÅÔ ÉÍÑ ÚÁÐÉÓÁÎÎÏÇÏ ÆÁÊÌÁ. ÷Ù ÄÏÌÖÎÙ ÓÏÈÒÁÎÑÔØ ÉÚÍÅÎÅÎÉÑ ÄÏÓÔÁÔÏÞÎÏ ÞÁÓÔÏ, ÔÁË ÞÔÏÂÙ ÎÅ ÐÏÔÅÒÑÔØ ÍÎÏÇÏ ÒÁÂÏÔÙ ÅÓÌÉ ×ÄÒÕÇ ÓÉÓÔÅÍÁ ÐÏÇÉÂÎÅÔ. >> îÁÂÅÒÉÔÅ C-x C-s, ÓÏÈÒÁÎÉÔÅ ×ÁÛÕ ËÏÐÉÀ ÕÞÅÂÎÉËÁ. äÏÌÖÎÁ ÐÏÑ×ÉÔØÓÑ ÎÁÄÐÉÓØ "Wrote ...TUTORIAL.ru" × ÎÉÖÎÅÊ ÓÔÒÏËÅ ÜËÒÁÎÁ. úáíåþáîéå: îÁ ÎÅËÏÔÏÒÙÈ ÓÉÓÔÅÍÁÈ, ××ÏÄ C-x C-s ÚÁÍÏÒÏÚÉÔ ÜËÒÁÎ É ×Ù ÎÅ Õ×ÉÄÉÔÅ ÐÏÓÌÅÄÕÀÝÅÇÏ ×Ù×ÏÄÁ Emacs`Á. üÔÏ ÏÚÎÁÞÁÅÔ ÞÔÏ ÏÐÅÒÁÃÉÏÎÎÁÑ ÓÉÓÔÅÍÁ ÉÍÅÅÔ "ÏÓÏÂÅÎÎÏÓÔØ" ÉÍÅÎÕÅÍÕÀ "flow control" ÐÅÒÅÈ×ÁÔÙ×ÁÀÝÕÀ C-s É ÎÅ ÐÒÏÐÕÓËÁÀÝÕÀ ÜÔÏÔ ÓÉÍ×ÏÌ Ë Emacs`Õ. äÌÑ ÒÁÚÍÏÒÏÚËÉ ÜËÒÁÎÁ, ÎÁÖÍÉÔÅ C-q. óÍÏÔÒÉÔÅ ÒÁÚÄÅÌ "Spontaneous Entry to Incremental Search" ÒÕËÏ×ÏÄÓÔ×Á Emacs ÞÔÏÂÙ ÕÚÎÁÔØ ËÁË ÂÏÒÏÔØÓÑ Ó ÜÔÏÊ "ÏÓÏÂÅÎÎÏÓÔØÀ". ÷Ù ÍÏÖÅÔÅ ÏÔËÒÙÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÆÁÊÌ ÄÌÑ ÐÒÏÓÍÏÔÒÁ ÉÌÉ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ. ÷Ù ÔÁË-ÖÅ ÍÏÖÅÔÅ ÎÁÊÔÉ ÆÁÊÌ, ËÏÔÏÒÙÊ ÅÝÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ. äÒÕÇÉÍÉ ÓÌÏ×ÁÍÉ - ÓÏÚÄÁÔØ ÆÁÊÌ Ó ÐÏÍÏÝØÀ Emacs: ÎÁÊÔÉ ÆÁÊÌ, ÓÏÚÄÁÔØ ÎÏ×ÙÊ, É ÎÁÞÁÔØ ××ÏÄÉÔØ ÔÅËÓÔ. ëÏÇÄÁ ×Ù ÓËÁÖÉÔÅ "ÓÏÈÒÁÎÉ" ÆÁÊÌ, Emacs ÓÏÚÄÁÓÔ ÒÅÁÌØÎÙÊ ÆÁÊÌ Ó ÎÁÂÒÁÎÎÙÍ ×ÁÍÉ ÔÅËÓÔÏÍ. äÁÌÅÅ, ËÁË ×Ù ÐÏÎÑÌÉ, ×Ù ÂÕÄÉÔÅ ÒÅÄÁËÔÉÒÏ×ÁÔØ ÕÖÅ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÆÁÊÌ. * âõæåòá -------- åÓÌÉ ×Ù ÎÁÈÏÄÉÔÅ ×ÔÏÒÏÊ ÆÁÊÌ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ C-x C-f, ÐÅÒ×ÙÊ ÏÓÔÁÅÔÓÑ ×ÎÕÔÒÉ Emacs. ÷Ù ÍÏÖÅÔÅ ÐÅÒÅËÌÀÞÉÔØÓÑ ÎÁÚÁÄ ÎÁÊÄÑ ÅÇÏ ÓÎÏ×Á C-x C-f. üÔÏ ÓÐÏÓÏ ÚÁÇÒÕÚÉÔØ ÎÅÓËÏÌØËÏ ÆÁÊÌÏ× × Emacs. >> óÏÚÄÁÊÔÅ ÆÁÊÌ Ó ÉÍÅÎÅÍ "foo" ÎÁÂÉÒÁÑ C-x C-f foo . ÷ÓÔÁרÔÅ ËÁËÏÊ-ÎÉÂÕÄØ ÔÅËÓÔ, ÏÔÒÅÄÁËÔÉÒÕÊÔÅ ÅÇÏ, É ÓÏÈÒÁÎÉÔÅ "foo" ÎÁÂÒÁ× C-x C-s. îÁËÏÎÅÃ, ÎÁÂÅÒÉÔÅ C-x C-f TUTORIAL.ru ÞÔÏÂÙ ×ÅÒÎÕÔØÓÑ ÎÁÚÁÄ Ë ÕÞÅÂÎÉËÕ. Emacs ÓÏÈÒÁÎÑÅÔ ÔÅËÓÔ ËÁÖÄÏÇÏ ÆÁÊÌÁ ×ÎÕÔÒÉ × ÏÂßÅËÔÅ ÉÍÅÎÕÅÍÙÊ "ÂÕÆÅÒ" ("buffer"). ïÔËÒÙÔÉÅ ÆÁÊÌÁ ÓÏÚÄÁÅÔ ÎÏ×ÙÊ ÂÕÆÅÒ ×ÎÕÔÒÉ Emacs. ÞÔÏÂÙ Õ×ÉÄÅÔØ ÓÐÉÓÏË ÂÕÆÅÒÏ× ÓÏÚÄÁÎÎÙÈ × ÔÅËÕÝÅÍ Emacs ÎÁÂÅÒÉÔÅ C-x C-b óÐÉÓÏË ÂÕÆÅÒÏ× >> ðÏÐÒÏÂÕÊÔÅ C-x C-b ÓÅÊÞÁÓ. íÙ ×ÉÄÉÍ ÞÔÏ ËÁÖÄÙÊ ÂÕÆÅÒ ÉÍÅÅÔ ÉÍÑ, É ÍÏÖÅÔ ÉÍÅÔØ ÉÍÑ ÆÁÊÌÁ, ÓÏÄÅÒÖÉÍÏÅ ËÏÔÏÒÏÇÏ × ÎÅÍ ÈÒÁÎÉÔÓÑ. îÅËÏÔÏÒÙÅ ÂÕÆÅÒÁ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÀÔ ÆÁÊÌÁÍ. îÁÐÒÉÍÅÒ, ÂÕÆÅÒ ÎÁÚ×ÁÎÎÙÊ "*Buffer List*" ÎÅ ÓÏÄÅÒÖÉÔ ÎÉËÁËÏÇÏ ÆÁÊÌÁ. ÷ ÜÔÏÍ ÂÕÆÅÒÅ ÓÏÄÅÒÖÉÔÓÑ ÓÐÉÓÏË ÂÕÆÅÒÏ×, ËÏÔÏÒÙÊ ÂÙÌ ÓÏÚÄÁÎ ËÏÍÁÎÄÏÊ C-x C-b. ìàâïê ÔÅËÓÔ ËÏÔÏÒÙÊ ×É ×ÉÄÉÔÅ × ÏËÎÅ Emacs ×ÓÅÇÄÁ Ñ×ÌÑÅÔÓÑ ÞÁÓÔØÀ ËÁËÏÇÏ-ÌÉÂÏ ÂÕÆÅÒÁ. >> îÁÂÅÒÉÔÅ C-x 1 ÞÔÏÂÙ ÉÚÂÁ×ÉÔØÓÑ ÏÔ ÓÐÉÓËÁ ÂÕÆÅÒÏ×. åÓÌÉ ×Ù ÉÚÍÅÎÑÅÔÅ ÔÅËÓÔ ÏÄÎÏÇÏ ÆÁÊÌÁ, ÐÏÔÏÍ ÏÔËÒÙ×ÁÅÔÅ ÄÒÕÇÏÊ, ÔÏ ÐÅÒ×ÙÊ ÏÓÔÁÅÔÓÑ ÎÅ ÓÏÈÒÁÎÅÎÎÙÍ. éÚÍÅÎÅÎÉÑ ÏÓÔÁÎÕÔÓÑ ×ÎÕÔÒÉ Emacs, × ÆÁÊÌÏ×ÏÍ ÂÕÆÅÒÅ. óÏÚÄÁÎÉÅ ÉÌÉ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ ÓÌÅÄÕÀÝÅÇÏ ÆÁÊÌÏ×ÏÇÏ ÂÕÆÅÒÁ ÎÅ ÓËÁÚÙ×ÁÅÔÓÑ ÎÁ ÐÅÒ×ÏÍ ÂÕÆÅÒÅ. üÔÏ ÏÞÅÎØ ÕÄÏÂÎÏ, ÎÏ ÉÍÅÊÔÅ × ×ÉÄÕ ÞÔÏ ×ÁÍ ÎÕÖÎÏ ÉÍÅÔØ ÕÄÏÂÎÙÊ ÓÐÏÓÏ ÓÏÈÒÁÎÉÔØ ÐÅÒ×ÙÊ ÆÁÊÌÏ×ÙÊ ÂÕÆÅÒ. âÙÌÏ ÂÙ ÎÅÐÒÉÑÔÎÏ ËÁÖÄÙÊ ÒÁÚ ×ÏÚ×ÒÁÝÁÔØÓÑ ÎÁÚÁÄ Ó ÐÏÍÏÝØÀ C-x C-f É ÐÏÔÏÍ ÉÓÐÏÌØÚÏ×ÁÔØ C-x C-s. ðÏÜÔÏÍÕ ÓÕÝÅÓÔ×ÕÅÔ C-x s óÏÈÒÁÎÉÔØ ÎÅËÏÔÏÒÙÅ ÂÕÆÅÒÁ. (Save some buffers) C-x s ÓÐÒÁÛÉ×ÁÅÔ ×ÁÓ Ï ËÁÖÄÏÍ ÂÕÆÅÒÅ ËÏÔÏÒÙÊ ÓÏÄÅÒÖÉÔ ÎÅ ÓÏÈÒÁÎÅÎÎÙÅ ÉÚÍÅÎÅÎÉÑ. äÌÑ ËÁÖÄÏÇÏ ÔÁËÏÇÏ ÂÕÆÅÒÁ Õ ×ÁÓ ÓÐÒÁÛÉ×ÁÀÔ ÓÏÈÒÁÎÑÔØ ÉÌÉ ÎÅ ÓÏÈÒÁÎÑÔØ ÉÚÍÅÎÅÎÉÑ. >> ÷ÓÔÁרÔÅ ÓÔÒÏËÕ ÔÅËÓÔÁ, ÐÏÔÏÍ ÎÁÂÅÒÉÔÅ C-x s. õ ×ÁÓ ÄÏÌÖÎÙ ÓÐÒÏÓÉÔØ ÓÏÈÒÁÎÑÔØ ÌÉ ÂÕÆÅÒ Ó ÉÍÅÎÅÍ TUTORIAL.ru. ïÔ×ÅÔØÔÅ ÎÁ ×ÏÐÒÏÓ ÄÁ ÎÁÂÒÁ× "y". * éóðïìøúï÷áîéå íåîà -------------------- åÓÌÉ Õ ×ÁÓ X-ÔÅÒÍÉÎÁÌ, ×Ù ÚÁÍÅÔÉÔÅ ÐÏÌÏÓÙ ÍÅÎÀ ××ÅÒÈÕ ÜËÒÁÎÁ Emacs. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÜÔÏ ÍÅÎÀ ÄÌÑ ÄÏÓÔÕÐÁ ËÏ ×ÓÅÍ ÎÁÉÂÏÌÅÅ ÏÂÝÉÍ ËÏÍÁÎÄÁÍ Emacs, ÔÁËÉÅ ËÁË "ÏÔËÒÙÔØ ÆÁÊÌ" ("find file"). ÷Ù ÓÒÁÚÕ ÎÁÊÄÅÔÅ ÞÔÏ ÜÔÏ ÐÒÏÓÔÏ, ÐÏÔÏÍÕ ÞÔÏ ×ÁÍ ÎÅ ÎÕÖÎÏ ÚÁÐÏÍÉÎÁÔØ ÓÏÞÅÔÁÎÉÑ ËÌÁ×ÉÛ ÎÅÏÂÈÏÄÉÍÙÈ ÄÌÑ ÄÏÓÔÕÐÁ Ë ËÁÖÄÏÊ ËÏÍÁÎÄÙ. ëÏÇÄÁ ×Ù ÐÒÉ×ÙËÎÉÔÅ Ë Emacs, ×ÁÍ ÂÕÄÉÔÅ ÌÅÇËÏ ÉÓÐÏÌØÚÏ×ÁÔØ ËÌÁ×ÉÁÔÕÒÎÙÅ ËÏÍÁÎÄÙ, ÐÏÔÏÍÕ ÞÔÏ ËÁÖÄÏÍ ÐÕÎËÔÅ ÍÅÎÀ, Ë ËÏÔÏÒÏÍÕ ÐÒÉ×ÑÚÁÎÁ ÓÏÞÅÔÁÎÉÅ ËÌÁ×ÉÛ, ÎÁÐÉÓÁÎÏ ÜÔÏ ÓÏÞÅÔÁÎÉÅ. úÁÍÅÔÉÍ ÞÔÏ ÍÎÏÇÏ ÐÕÎËÔÏ× ÍÅÎÀ ÎÅ ÓÏÄÅÒÖÁÔ ËÌÁ×ÉÁÔÕÒÎÙÅ ÜË×É×ÁÌÅÎÔÙ. îÁÐÒÉÍÅÒ, ÓÐÉÓÏË ÍÅÎÀ ÓÏ ×ÓÅÍÉ ÄÏÓÔÕÐÎÙÍÉ ÂÕÆÅÒÁÍÉ. ÷Ù ÍÏÖÅÔÅ ÐÅÒÅËÌÀÞÉÔØ × ÌÀÂÏÊ ÂÕÆÅÒ ðÒÏÓÔÏ ÎÁÊÄÑ ÅÇÏ ÉÍÑ × ÍÅÎÀ ÂÕÆÅÒÏ× (Buffers menu) É ×ÙÂÒÁ× ÅÇÏ. * éóðïìøúï÷áîéå íùûé -------------------- ÷ÙÐÏÌÎÑÅÍÙÊ × X, Emacs ÐÏÌÎÏÓÔØÀ ÉÎÔÅÇÒÉÒÏ×ÁÎ Ó ÍÙÛØÀ. ÷Ù ÍÏÖÅÔÅ ÐÏÚÉÃÉÏÎÉÒÏ×ÁÔØ ËÕÒÓÏÒ ÎÁÖÁÔÉÅÍ ÌÅ×ÏÊ ËÎÏÐËÉ × ÖÅÌÁÅÍÏÍ ÍÅÓÔÅ, ×Ù ÍÏÖÅÔÅ ÏÔÍÅÞÁÔØ ÔÅËÓÔ ÐÏÔÑÎÕ× ÍÙÛËÕ Ó ÎÁÖÁÔÏÊ ÌÅ×ÏÊ ËÎÏÐËÏÊ ÞÅÒÅÚ ÔÕ ÞÁÓÔØ, ËÏÔÏÒÕÀ ÈÏÔÉÔÅ ÏÔÍÅÔÉÔØ. (éÌÉ ËÌÉËÎÕÔØ ÌÅ×ÏÊ ËÎÏÐËÏÊ ÍÙÛËÉ × ÏÄÎÏÍ ËÏÎÃÅ ÔÅËÓÔÁ, ÚÁÔÅÍ ÐÅÒÅÍÅÓÔÉÔØÓÑ × ÄÒÕÇÏÊ, É ËÌÉËÎÕÔØ ÅÝÅ ÒÁÚ, ÕÄÅÒÖÉ×ÁÑ Shift ÞÔÏÂÙ ÏÔÍÅÔÉÔØ ÔÅËÓÔ.) ÞÔÏÂÙ ÕÂÉÔØ ÎÅËÏÔÏÒÙÊ ×ÙÄÅÌÅÎÎÙÊ ÔÅËÓÔ, ×Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-w ÉÌÉ ×ÙÂÒÁÔØ ÐÕÎËÔ ÍÅÎÀ "÷ÙÒÅÚÁÔØ" ("Cut") ÉÚ ÍÅÎÀ "òÅÄÁËÔÉÒÏ×ÁÔØ" ("Edit"). úÁÍÅÔØÔÅ, ÞÔÏ ÜÔÏ *ÎÅ* ÏÄÎÏ É ÔÏ ÖÅ: C-w ÓÏÈÒÁÎÑÅÔ ÔÅËÓÔ ÔÏÌØËÏ ×ÎÕÔÒÉ Emacs (ÁÎÁÌÏÇÉÞÎÏ C-k ÏÐÉÓÁÎÎÏÇÏ ÒÁÎÅÅ), "÷ÙÒÅÚÁÔØ" ("Cut") ÄÅÌÁÅÔ ÜÔÏ ÖÅ, É ÐÏÍÅÝÁÅÔ ÔÅËÓÔ × ÂÕÆÅÒ ÏÂÍÅÎÁ X (X clipboard), ÇÄÅ ÏÎ ÍÏÖÅÔ ÂÙÔØ ÄÏÓÔÕÐÅÎ ÄÒÕÇÉÍ ÐÒÏÇÒÁÍÍÁÍ. ÞÔÏÂÙ ÐÏÌÕÞÉÔØ ÔÅËÓÔ ÉÚ ÂÕÆÅÒÁ ÏÂÍÅÎÁ X, ÉÓÐÏÌØÚÕÊÔÅ ËÏÍÁÎÄÕ "÷ÓÔÁ×ÉÔØ" ("Insert") ÉÚ ÍÅÎÀ "òÅÄÁËÔÉÒÏ×ÁÔØ" ("Edit"). óÒÅÄÎÑÑ ËÎÏÐËÁ ÍÙÛÉ ÏÂÙÞÎÏ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ×ÙÂÏÒÁ ÐÕÎËÔÏ× (items), ×ÉÄÉÍÙÈ ÎÁ ÜËÒÁÎÅ. îÁÐÒÉÍÅÒ, ÅÓÌÉ ×Ù ×ÏÛÌÉ × Info (on-line ÄÏËÕÍÅÎÔÁÃÉÑ Emacs) ÉÓÐÏÌØÚÕÑ C-h i ÉÌÉ ÍÅÎÀ ðÏÍÏÝØ (Help), ×Ù ÍÏÖÅÔÅ ÓÌÅÄÏ×ÁÔØ ÐÏÄÓ×ÅÞÅÎÎÙÍ ÓÓÙÌËÁÍ ÐÒÏÓÔÙÍ ÎÁÖÁÔÉÅÍ ÓÒÅÄÎÅÊ ËÎÏÐËÉ ÎÁ ÎÉÈ. áÎÁÌÏÇÉÞÎÏ, ÅÓÌÉ ×Ù ××ÏÄÉÔÅ ÉÍÑ ÆÁÊÌÁ (ÎÁÐÒÉÍÅÒ × ÐÒÉÇÌÁÛÅÎÉÉ "ÏÔËÒÙÔØ ÆÁÊÌ") É ×Ù ÎÁÖÉÍÁÅÔÅ TAB ÞÔÏÂÙ Õ×ÉÄÅÔØ ×ÏÚÍÏÖÎÙÅ ×ÁÒÉÁÎÔÙ (completions), ×Ù ÍÏÖÅÔÅ ËÌÉËÎÕÔØ ÓÒÅÄÎÀÀ ËÎÏÐËÕ ÍÙÛÉ ÎÁ ÏÄÎÏÍ ÉÚ ×ÁÒÉÁÎÔÏ×, ÞÔÏÂÙ ×ÙÂÒÁÔØ ÅÇÏ. ðÒÁ×ÁÑ ËÎÏÐËÁ ÍÙÛÉ ×ÙÚÙ×ÁÅÔ ×ÓÐÌÙ×ÁÀÝÅÅ ÍÅÎÀ (popup menu). óÏÄÅÒÖÉÍÏÅ ÜÔÏÇÏ ÍÅÎÀ ÉÚÍÅÎÑÅÔÓÑ × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔÏ ÔÏÇÏ ÇÄÅ ×Ù ÎÁÈÏÄÉÔÅÓØ, É ÏÂÙÞÎÏ ÓÏÄÅÒÖÉÔ ÎÅÓËÏÌØËÏ ÞÁÓÔÏ ÉÓÐÏÌØÚÕÅÍÙÈ ËÏÍÁÎÄ ÄÌÑ ÂÏÌÅÅ ÐÒÏÓÔÏÇÏ ÄÏÓÔÕÐÁ Ë ÎÉÍ. >> îÁÖÍÉÔÅ ÐÒÁ×ÕÀ ËÎÏÐËÕ ÍÙÛÉ ÓÅÊÞÁÓ. ÷ÁÍ ÎÕÖÎÏ ÕÄÅÒÖÉ×ÁÔØ ËÎÏÐËÕ ÎÁÖÁÔÏÊ, ÞÔÏÂÙ ÓÏÈÒÁÎÉÔØ ÍÅÎÀ ÏÔËÒÙÔÙÍ. (// You will have to hold the button down in order to keep the menu up.) * òáóûéòåîîùê îáâïò ëïíáîä -------------------------- õ Emacs ÏÞÅÎØ ÍÎÏÇÏ ËÏÍÁÎÄ, ÏÎÉ ÍÏÇÕÔ ÂÙÔØ ÎÁÚÎÁÞÅÎÙ ÎÁ ×ÓÅ control- É meta- ÓÉÍ×ÏÌÙ. Emacs ÏÂÈÏÄÉÔ ÜÔÏ, ÉÓÐÏÌØÚÕÑ X-ËÏÍÁÎÄÕ (eXtend). åÓÔØ Ä×Å ×ÏÚÍÏÖÎÏÓÔÉ: C-x óÉÍ×ÏÌ ÒÁÓÛÉÒÅÎÉÑ (Character eXtend). úÁ ÎÉÍ ÓÌÅÄÕÅÍ ÏÄÉÎ ÓÉÍ×ÏÌ. M-x éÍÅÎÎÏ×ÁÎÙÅ ÒÁÓÛÉÒÅÎÎÙÅ ËÏÍÁÎÄÙ (Named command eXtend). úÁ ÎÉÍ ÓÌÅÄÕÅÔ ÉÍÑ ËÏÍÁÎÄÙ. üÔÏ ËÏÍÁÎÄÙ ËÏÔÏÒÙÅ ÏÂÙÞÎÏ ÉÓÐÏÌØÚÕÀÔÓÑ, ÎÏ ×Ù ÕÖÅ ×ÙÕÞÉÌÉ ÎÅËÏÔÏÒÙÅ ÉÚ ÎÉÈ. ÷Ù ÕÖÅ ×ÉÄÅÌÉ: ËÏÍÁÎÄÙ ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ C-x C-f - ÏÔËÒÙÔØ, É C-x C-s ÓÏÈÒÁÎÉÔØ. äÒÕÇÏÊ ÐÒÉÍÅÒ - ÚÁ×ÅÒÛÅÎÉÑ ÒÁÂÏÔÙ Ó Emacs -- ÜÔÏ ËÏÍÁÎÄÁ C-x C-c. (ÎÅ ×ÏÌÎÕÊÔÅÓØ Ï ÔÏÍ, ÞÔÏ ×Ù ÐÏÔÅÒÑÅÔÅ ÓÄÅÌÁÎÎÙÅ ÉÚÍÅÎÅÎÉÑ, C-x C-c ÐÒÅÄÌÁÇÁÅÔ ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ ÐÅÒÅÄ ÔÅÍ ËÁË ÕÄÁÌÉÔ ÂÕÆÅÒ Emacs.) C-z ÜÔÏ ËÏÍÁÎÄÁ *×ÒÅÍÅÎÎÏÇÏ* ×ÙÈÏÄÁ ÉÚ Emacs -- ×Ù ÍÏÖÅÔÅ ×ÅÒÎÕÔØÓÑ × ÔÕÖÅ ÓÅÓÓÉÀ Emacs ÐÏÓÌÅ. îÁ ÓÉÓÔÅÍÁÈ, ËÏÔÏÒÙÅ ÄÏÐÕÓËÁÀÔ ÜÔÏÇÏ, C-z "ÐÒÉÏÓÔÁÎÁ×ÌÉ×ÁÀÔ" ("suspends") Emacs; ÷ÏÚ×ÒÁÝÁÀÔ × ÏÂÏÌÏÞËÕ (shell), ÎÏ ÎÅ ÚÁËÒÙ×ÁÀÔ Emacs. ÷ ÂÏÌØÛÉÎÓÔ×Å ÏÂÏÌÏÞÅË ×Ù ÍÏÖÅÔÅ ÐÒÏÄÏÌÖÉÔØ ÒÁÂÏÔÕ × Emacs ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ `fg' ÉÌÉ `%emacs'. ÷ ÓÉÓÔÅÍÁÈ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÝÉÈ ÐÒÉÏÓÔÁÎÏ×, C-z ÓÏÚÄÁÅÔ ÎÏ×ÕÀ ÏÂÏÌÏÞËÕ (subshell), ÚÁÐÕÝÅÎÎÕÀ ÉÚ-ÐÏÄ Emacs ÞÔÏÂÙ ÄÁÔØ ×ÁÍ ×ÏÚÍÏÖÎÏÓÔØ ×ÙÐÏÌÎÉÔØ ÄÒÕÇÕÀ ÐÒÏÇÒÁÍÍÕ, É ÐÏÔÏÍ ×ÅÒÎÕÔØÓÑ × Emacs; üÔÏ ÎÅ ÎÁÓÔÏÑÝÉÊ ×ÙÈÏÄ ÉÚ Emacs. ÷ ÜÔÏÍ ÓÌÕÞÁÅ, ËÏÍÁÎÄÁ `exit' ×ÅÒÎÅÔ ×ÁÓ × Emacs ÉÚ ÏÂÏÌÏÞËÉ. éÓÐÏÌØÚÕÊÔÅ C-x C-c ÅÓÌÉ ×Ù ÈÏÔÉÔÅ ×ÙÊÔÉ (log out) ÉÚ ÓÉÓÔÅÍÙ. üÔÏ ÔÁËÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ ÞÔÏÂÙ ×ÙÊÔÉ ÉÚ Emacs ×ÙÚ×ÁÎÎÏÇÏ ÉÚ ÐÏÞÔÏ×ÏÊ ÐÒÏÇÒÁÍÍÙ, ÉÌÉ ÄÒÕÇÏÊ ÕÔÉÌÉÔÙ, ËÏÔÏÒÁÑ ÍÏÖÅÔ ÎÅ ÚÎÁÅÔ ËÁË ÓÐÒÁ×ÉÔØÓÑ Ó ÐÒÉÏÓÔÁÎÏ×ÌÅÎÎÙÍ Emacs. ïÂÙÞÎÏ, ÔÁËÉ ÅÓÌÉ ×Ù ÎÅ ×ÙÈÏÄÉÔÅ ÉÚ ÓÉÓÔÅÍÙ, ÌÕÞÛÅ ÐÒÉÏÓÔÁÎÏ×ÉÔØ Emacs ÉÓÐÏÌØÚÕÑ C-z ×ÍÅÓÔÏ ×ÙÈÏÄÁ ÉÈ ÎÅÇÏ. ïÞÅÎØ ÍÎÏÇÏ C-x ËÏÍÁÎÄ. üÔÉ ×Ù ÕÖÅ ×ÙÕÞÉÌÉ: C-x C-f ïÔËÒÙÔØ ÆÁÊÌ. C-x C-s óÏÈÒÁÎÉÔØ ÆÁÊÌ. C-x C-b óÐÉÓÏË ÂÕÆÅÒÏ×. C-x C-c ÷ÙÈÏÄ ÉÚ Emacs. C-x u ïÔÍÅÎÁ. éÍÅÎÏ×ÁÎÎÙÅ ÒÁÓÛÉÒÅÎÎÙÅ ËÏÍÁÎÄÙ ÉÓÐÏÌØÚÕÀÔÓÑ ÇÏÒÁÚÄÏ ÒÅÖÅ, ÉÌÉ ÉÓÐÏÌØÚÕÀÔÓÑ ÔÏÌØËÏ × ÏÐÒÅÄÅÌÅÎÎÙÈ ÒÅÖÉÍÁÈ. ÷ ËÁÞÅÓÔ×Å ÐÒÉÍÅÒÁ ËÏÍÁÎÄÁ ÚÁÍÅÎÁ ÓÔÒÏËÉ, ËÏÔÏÒÁÑ ÚÁÍÅÎÑÅÔ ÏÄÎÕ ÓÔÒÏËÕ ÎÁ ÄÒÕÇÕÀ ×Ï ×ÓÅÍ ÔÅËÓÔÅ. ëÏÇÄÁ ×Ù ÎÁÂÅÒÅÔÅ M-x, Emacs ÐÒÅÄÌÏÖÉÔ ×ÁÍ ××ÅÓÔÉ ÉÍÑ ËÏÍÁÎÄÙ × ÎÉÖÎÅÊ ÓÔÒÏËÅ ÜËÒÁÎÁ; × ÎÁÛÅÍ ÓÌÕÞÁÅ, "replace-string". ôÏÌØËÏ ÎÁÂÅÒÉÔÅ "repl s" É Emacs ÄÏÐÏÌÎÉÔ ÉÍÑ. úÁ×ÅÒÛÉÔÅ ÉÍÑ ××ÏÄÏÍ . ëÏÍÁÎÄÁ ÚÁÍÅÎÙ ÓÔÒÏËÉ (replace-string) ÔÒÅÂÕÅÔ Ä×Á ÁÒÇÕÍÅÎÔÁ -- ÓÔÒÏËÕ ËÏÔÏÒÁÑ ÂÕÄÅÔ ÚÁÍÅÎÅÎÁ, É ÓÔÒÏËÁ ÎÁ ËÏÔÏÒÕÀ ÎÕÖÎÏ ÚÁÍÅÎÉÔØ. ÷Ù ÄÏÌÖÎÙ ÚÁ×ÅÒÛÁÔØ ËÁÖÄÙÊ ÁÒÇÕÍÅÎÔ ××ÏÄÏÍ . >> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ Ä×Å ÐÕÓÔÙÅ ÓÔÒÏËÉ ÎÉÖÅ ÜÔÏÊ. îÁÂÅÒÉÔÅ M-x repl schangedaltered. úÁÍÅÔØÔÅ ËÁË ÜÔÁ ÓÔÒÏËÁ ÉÚÍÅÎÉÔÓÑ: ×Ù ÚÁÍÅÎÉÔÅ ÓÌÏ×Ï c-h-a-n-g-e-d ÓÌÏ×ÏÍ "altered" ×ÅÚÄÅ, ÇÄÅ ÏÎÏ ×ÓÔÒÅÔÉÔÓÑ, ÎÉÖÅ ÐÏÚÉÃÉÉ ËÕÒÓÏÒÁ. * á÷ôïóïèòáîåîéå ---------------- ëÏÇÄÁ ×Ù ÍÏÄÉÆÉÃÉÒÕÅÔÅ ÆÁÊÌ, ÎÏ ÎÅ ÓÏÈÒÁÎÑÅÔÅ ÅÇÏ, ×Ù ÍÏÖÅÔÅ ÐÏÔÅÒÑÔØ ÉÎÆÏÒÍÁÃÉÀ × ÓÌÕÞÁÅ ËÒÁÈÁ ÓÉÓÔÅÍÙ. ÞÔÏÂÙ ÚÁÝÉÔÉÔØ ×ÁÓ ÏÔ ÜÔÏÇÏ, Emacs ÐÅÒÉÏÄÉÞÅÓËÉ ÚÁÐÉÓÙ×ÁÅÔ ËÁÖÄÙÊ ÆÁÊÌ, ËÏÔÏÒÙÊ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ. á×ÔÏÓÏÈÒÁÎÅÎÉÅ ÐÒÏÉÓÈÏÄÉÔ × ÆÁÊÌ, ÉÍÑ ËÏÔÏÒÏÇÏ ÔÁËÏÅ ÖÅ, ÎÏ ÎÁÞÉÎÁÅÔÓÑ É ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÓÉÍ×ÏÌÏÍ "#"; ÎÁÐÒÉÍÅÒ, ÅÓÌÉ ×ÁÛ ÆÁÊÌ ÎÁÚÙ×ÁÅÔÓÑ "hello.c", ÔÏ Á×ÔÏÓÏÈÒÁÎÅÎÎÙÊ ÆÁÊÌ ÂÕÄÅÔ ÎÁÚÙ×ÁÔØÓÑ "#hello.c#". ëÏÇÄÁ ×Ù ÓÏÈÒÁÎÉÔÅ ÆÁÊÌ ÏÂÙÞÎÙÍ ÓÐÏÓÏÂÏÍ. Emacs ÕÄÁÌÉÔ Á×ÔÏÓÏÈÒÁÎÅÎÎÙÊ ÆÁÊÌ. åÓÌÉ ÓÉÓÔÅÍÁ ÐÏÄ×ÉÓÁÅÔ, ×Ù ÍÏÖÅÔÅ ×ÏÓÓÔÁÎÏ×ÉÔØ ×ÁÛÉ ÉÚÍÅÎÅÎÉÑ ËÏÔÏÒÙÊ ÂÙÌÉ ÓÏÈÒÁÎÅÎÙ Á×ÔÏÍÁÔÉÞÅÓËÉ, ÐÕÔÅÍ ÏÔËÒÙÔÉÑ ÎÏÒÍÁÌØÎÏÇÏ ÆÁÊÌÁ (ÆÁÊÌÁ ËÏÔÏÒÙÊ ×Ù ÒÅÄÁËÔÉÒÏ×ÁÌÉ, ÎÅ Á×ÔÏÓÏÈÒÁÎÅÎÎÏÇÏ) É ÚÁÔÅÍ ÎÁÂÒÁÔØ M-x recover file. ëÏÇÄÁ Õ ×ÁÓ ÓÐÒÏÓÑÔ ÐÏÄÔ×ÅÒÖÄÅÎÉÅ, ÎÁÂÅÒÉÔÅ yes ÞÔÏÂÙ ×ÏÓÓÔÁÎÏ×ÉÔØ Á×ÔÏÓÏÈÒÁÎÅÎÎÙÅ ÄÁÎÎÙÅ. * ïâìáóôø üèï (ECHO AREA) ------------------------- åÓÌÉ Emacs ×ÉÄÉÔ ÞÔÏ ×Ù ÍÅÄÌÅÎÎÏ ÎÁÂÉÒÁÅÔÅ ËÏÍÁÎÄÙ, ÏÎ ÐÏËÁÚÙ×ÁÅÔ ÉÈ ×ÁÍ ×ÎÉÚÕ ÜËÒÁÎÁ, × ÏÂÌÁÓÔÉ ÎÁÚÙ×ÁÅÍÏÊ "ÏÂÌÁÓÔØ ÜÈÏ". ïÂÌÁÓÔØ ÜÈÏ ÜÔÏ ÎÉÖÎÑÑ ÓÔÒÏËÁ ÜËÒÁÎÁ. * óôòïëá óïóôïñîéñ ------------------ óÔÒÏËÁ ÓÒÁÚÕ ÎÁÄ ÏÂÌÁÓÔØÀ ÜÈÏ ÎÁÚÙ×ÁÅÔÓÑ "ÓÔÒÏËÁ ÓÏÓÔÏÑÎÉÑ". ÷ÙÇÌÑÄÉÔ ÜÔÁ ÓÔÒÏËÁ ÐÒÉÍÅÒÎÏ ÔÁË: --**-XEmacs: TUTORIAL.ru (Fundamental)--L670--66%---------------- üÔÁ ÓÔÒÏËÁ ÓÏÏÂÝÁÅÔ ÐÏÌÅÚÎÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÓÏÓÔÏÑÎÉÉ Emacs É ÔÅËÓÔÁ, ËÏÔÏÒÙÊ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ. ÷Ù ÕÖÅ ÚÎÁÅÔÅ ÞÔÏ ÏÚÎÁÞÁÅÔ ÉÍÑ ÆÁÊÌÁ - ÜÔÏ ÆÁÊÌ, ËÏÔÏÒÙÊ ×Ù ÏÔËÒÙÌÉ. -NN%-- ÐÏËÁÚÙ×ÁÅÔ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ËÕÒÓÏÒÁ × ÔÅËÓÔÅ; ÜÔÏ ÏÚÎÁÞÁÅÔ ÞÔÏ NN ÐÒÏÃÅÎÔÏ× ÔÅËÓÔÁ ×ÙÛÅ ÞÅÍ ÎÁÞÁÌÏ ÜËÒÁÎÁ. åÓÌÉ ÐÅÒ×ÁÑ ÓÔÒÏËÁ ÎÁÈÏÄÉÔÓÑ × ÐÅÒ×ÏÊ ÓÔÒÏËÅ ÜËÒÁÎÁ, ×Ù ÔÁÍ Õ×ÉÄÉÔÅ --Top-- ×ÍÅÓÔÏ --00%--. åÓÌÉ ÐÏÓÌÅÄÎÑÑ ÓÔÒÏËÁ ÏÔÏÂÒÁÖÁÅÔÓÑ ÎÁ ÜËÒÁÎÅ, ÔÁÍ ÂÕÄÅÔ --Bot--. åÓÌÉ ÔÅËÓÔ ÎÁÓÔÏÌØËÏ ÍÁÌ, ÞÔÏ ×ÅÓØ ×ÍÅÝÁÅÔÓÑ × ÜËÒÁÎ, ÓÔÒÏËÁ ÓÏÓÔÏÑÎÉÑ ÓÏÏÂÝÉÔ --All--. ú×ÅÚÄÏÞËÉ × ÎÁÞÁÌÅ ÓÔÒÏËÉ ÏÚÎÁÞÁÀÔ ÞÔÏ ×Ù ÉÚÍÅÎÑÌÉ ÔÅËÓÔ. ëÁË ÔÏÌØËÏ ×Ù ÏÔËÒÙÌÉ ÉÌÉ ÓÏÈÒÁÎÉÌÉ ÆÁÊÌ, ÜÔÁ ÞÁÓÔØ ÓÔÒÏËÉ ÂÕÄÅÔ ÓÏÄÅÒÖÁÔØ ÎÅ Ú×ÅÚÄÏÞËÉ, Á ÔÉÒÅ. þÁÓÔØ ÓÔÒÏËÉ ÓÔÁÔÕÓÁ ×ÎÕÔÒÉ ÓËÏÂÏÞÅË ÓÏÏÂÝÁÅÔ ×ÁÍ ÒÅÖÉÍ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ, ËÏÔÏÒÙÍ ×Ù ÐÏÌØÚÕÅÔÅÓØ. óÔÁÎÄÁÒÔÎÙÊ ÒÅÖÉÍ - Fundamental, ÅÇÏ ×Ù ÉÓÐÏÌØÚÕÅÔÅ É ÓÅÊÞÁÓ. üÔÏ ÐÒÉÍÅÒ "ÏÓÎÏ×ÎÏÇÏ ÒÅÖÉÍÁ" ("major mode"). Emacs ÉÍÅÅÔ ÍÎÏÇÏ ÒÁÚÌÉÞÎÙÈ ÏÓÎÏ×ÎÙÈ ÒÅÖÉÍÏ×. îÅËÏÔÏÒÙÅ ÉÚ ÒÅÖÉÍÏ× ÏÚÎÁÞÁÀÔ, ÞÔÏ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÔÅËÓÔ ÎÁ ÒÁÚÌÉÞÎÏÍ ÑÚÙËÅ É/ÉÌÉ ÒÁÚÌÉÞÎÙÅ ×ÉÄÙ ÔÅËÓÔÁ, ÔÁËÉÅ ËÁË Lisp-ÒÅÖÉÍ, Text-ÒÅÖÉÍ É ÐÒ. ÷ ÌÀÂÏÅ ×ÒÅÍÑ ÔÏÌØËÏ ÏÄÉÎ ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÁËÔÉ×ÉÒÏ×ÁÎ, É ÅÇÏ ÎÁÚ×ÁÎÉÅ ×Ù ÍÏÖÅÔÅ ÎÁÊÔÉ × ÓËÏÂÏÞËÁÈ, ÇÄÅ ÓÅÊÞÁÓ ÎÁÈÏÄÉÔÓÑ ÓÌÏ×Ï "Fundamental" (ÂÁÚÏ×ÙÊ). ëÁÖÄÙÊ ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÉÍÅÅÔ ÎÅÓËÏÌØËÏ ÏÔÌÉÞÉÔÅÌØÎÙÈ ËÏÍÁÎÄ. îÁÐÒÉÍÅÒ, ËÏÍÁÎÄÙ ÓÏÚÄÁÎÉÑ ËÏÍÍÅÎÔÁÒÉÑ × ÐÒÏÇÒÁÍÍÅ, É ÐÏÓËÏÌØËÕ × ËÁÖÄÏÍ ÑÚÙËÅ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ ËÏÍÍÅÎÔÁÒÉÉ ÚÁÐÉÓÙ×ÁÀÔÓÑ ÐÏ-Ó×ÏÅÍÕ, ËÁÖÄÙÊ ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ×ÓÔÁ×ÌÑÅÔ ÉÈ ÐÏ-ÒÁÚÎÏÍÕ. ëÁÖÄÙÊ ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÉÍÅÅÔ ÉÍÅÎÏ×ÁÎÎÕÀ ËÏÍÁÎÄÕ, ËÏÔÏÒÁÑ ×ËÌÀÞÁÅÔ ÅÇÏ. îÁÐÒÉÍÅÒ, M-x fundamental-mode - ËÏÍÁÎÄÁ, ËÏÔÏÒÁÑ ÐÅÒÅËÌÀÞÁÅÔ × ÂÁÚÏ×ÙÊ (Fundamental) ÒÅÖÉÍ. åÓÌÉ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÁÎÇÌÉÊÓËÉÊ ÔÅËÓÔ, ÎÁÐÒÉÍÅÒ ËÁË ÜÔÏÔ (//ËÏÎÅÞÎÏ ÎÅ ÉÍÅÎÎÏ ÜÔÏÔ, Á TUTORIAL) ÆÁÊÌ, ×Ù ×ÅÒÏÑÔÎÏ ÄÏÌÖÎÙ ÐÅÒÅËÌÀÞÉÔØÓÑ × Text-ÒÅÖÉÍ. >> îÁÂÅÒÉÔÅ M-x text-mode. îÅ ×ÏÌÎÕÊÔÅÓØ, ÎÉ ÏÄÎÁ ÉÚ ×ÙÕÞÅÎÎÙÈ ×ÁÍÉ ËÏÍÁÎÄ Emacs ÎÅ ÉÚÍÅÎÉÌÁÓØ. îÏ ×Ù ÍÏÖÉÔÅ ÚÁÍÅÔÉÔØ, ÞÔÏ M-f É M-b ÔÅÐÅÒØ ÒÁÚÌÉÞÁÔØ ÁÐÏÓÔÒÏÆÙ ËÁË ÞÁÓÔÉ ÓÌÏ×Á. òÁÎÅÅ, × ÂÁÚÏ×ÏÍ ÒÅÖÉÍÅ (Fundamental mode), M-f É M-b ÐÏÎÉÍÁÌÉ ÁÐÏÓÔÒÏÆÙ ËÁË ÒÁÚÄÅÌÉÔÅÌÉ ÓÌÏ×. ïÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÏÂÙÞÎÏ ÄÅÌÁÅÔ ÎÅÂÏÌØÛÉÅ ÉÚÍÅÎÅÎÉÑ, ÔÁËÉÅ ËÁË: ÂÏÌØÛÉÎÓÔ×Ï ËÏÍÁÎÄ ÄÅÌÁÀÔ "ÔÕÖÅ ÒÁÂÏÔÕ" × ËÁÖÄÏÍ ÉÚ ÒÅÖÉÍÏ×, ÎÏ ÉÈ ÒÁÂÏÔÁ ÏÔÌÉÞÁÅÔÓÑ ËÁËÏÊ-ÎÉÂÕÄØ ÍÅÌÏÞØÀ. äÌÑ ÐÒÏÓÍÏÔÒÁ ÄÏËÕÍÅÎÔÁÃÉÉ Ï ×ÁÛÅÍ ÔÅËÕÝÅÍ ÏÓÎÏ×ÎÏÍ ÒÅÖÉÍÅ, ÎÁÖÍÉÔÅ C-h m. >> éÓÐÏÌØÚÕÊÔÅ C-u C-v ÏÄÉÎ ÒÁÚ ÉÌÉ ÂÏÌÅÅ, ÞÔÏÂÙ ÒÁÓÐÏÌÏÖÉÔØ ÜÔÕ ÓÔÒÏËÕ ÂÌÉÖÅ Ë ×ÅÒÈÕ ÜËÒÁÎÁ. >> îÁÂÅÒÉÔÅ C-h m, ÞÔÏ ÐÏÓÍÏÔÒÅÔØ ÏÔÌÉÞÉÑ Text-ÒÅÖÉÍÁ ÏÔ ÂÁÚÏ×ÏÇÏ. >> îÁÂÅÒÉÔÅ q ÞÔÏÂÙ ÕÂÒÁÔØ ÄÏËÕÍÅÎÔÁÃÉÀ Ó ÇÌÁÚ ÄÏÌÏÊ :) ïÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÎÁÚÙ×ÁÅÔÓÑ ÏÓÎÏ×ÎÙÍ ÐÏÔÏÍÕ, ÞÔÏ ÅÓÔØ ÎÅÓËÏÌØËÏ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ (minor) ÒÅÖÉÍÏ×. äÏÐÏÌÎÉÔÅÌØÎÙÅ ÒÅÖÉÍÙ ÎÅ ÁÌØÔÅÒÎÁÔÉ×Ù Ë ÏÓÎÏ×ÎÙÍ, ÏÎÉ ÔÏÌØËÏ ÞÕÔØ-ÞÕÔØ ÍÏÄÉÆÉÃÉÒÕÀÔ ÉÈ. ëÁÖÄÙÊ ÄÏÐÏÌÎÉÔÅÌØÎÙÊ ÒÅÖÉÍ ×ËÌÀÞÁÅÔÓÑ/×ÙËÌÀÞÁÅÔÓÑ ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÄÒÕÇÉÈ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÒÅÖÉÍÏ×, É ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ×ÁÛÅÇÏ ÏÓÎÏ×ÎÏÇÏ ÒÅÖÉÍÁ. ÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÏÓÎÏ×ÎÏÊ ÒÅÖÉÍ ÂÅÚ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ, ÉÌÉ Ó ÌÀÂÏÊ ÉÈ ËÏÍÂÉÎÁÃÉÅÊ. ïÄÉÎ ÉÚ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÒÅÖÉÍÏ× ÏÞÅÎØ ÐÏÌÅÚÅÎ, ÏÓÏÂÅÎÎÏ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÁÎÇÌÉÊÓËÏÇÏ ÔÅËÓÔÁ - ÜÔÏ ÒÅÖÉÍ Á×ÔÏÚÁÐÏÌÎÅÎÉÑ (Auto Fill mode). ëÏÇÄÁ ÜÔÏÔ ÒÅÖÉÍ ×ËÌÀÞÅÎ, Emacs ÒÁÚÒÙ×ÁÅÔ ÓÔÒÏËÉ ÍÅÖÄÕ ÓÌÏ×ÁÍÉ Á×ÔÏÍÁÔÉÞÅÓËÉ, ËÏÇÄÁ ×Ù ×ÓÔÁ×ÌÑÅÔÅ ÔÅËÓÔ É ÄÅÌÁÅÔÅ ÓÔÒÏËÉ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÍÉ. ÷Ù ÍÏÖÅÔÅ ×ËÌÀÞÉÔØ ÒÅÖÉÍ Á×ÔÏÚÁÐÏÌÎÅÎÉÑ ÎÁÂÒÁ× M-x auto-fill-mode. ëÏÇÄÁ ÜÔÏÔ ÒÅÖÉÍ ×ËÌÀÞÅÎ, ÅÇÏ ÍÏÖÎÏ ×ÙËÌÀÞÉÔØ - M-x auto-fill-mode. åÓÌÉ ÒÅÖÉÍ ×ËÌÀÞÅÎ - ËÏÍÁÎÄÁ ÅÇÏ ×ÙËÌÀÞÉÔ, ÅÓÌÉ ×ÙËÌÀÞÅÎ - ×ËÌÀÞÉÔ. íÙ ÎÁÚÙ×ÁÅÍ ÜÔÏ ËÏÍÁÎÄÁ "ÐÅÒÅËÌÀÞÅÎÉÑ ÒÅÖÉÍÁ". >> îÁÂÅÒÉÔÅ M-x auto-fill-mode. úÁÔÅÍ ×ÓÔÁ×ÌÑÊÔÅ ÓÔÒÏËÕ ÉÚ "ÆÙ×Á " ÐÏËÁ ÎÅ Õ×ÉÄÉÔÅ ËÁË ÏÎÁ ÒÁÚÄÅÌÉÔÓÑ ÎÁ Ä×Å ÓÔÒÏËÉ. ÷Ù ÄÏÌÖÎÙ ÐÏÍÅÝÁÔØ ÐÒÏÂÅÌÙ ÍÅÖÄÕ ÓÌÏ×ÁÍÉ, ÐÏÔÏÍÕ ÞÔÏ ÒÅÖÉÍ Á×ÔÏÚÁÐÏÌÎÅÎÉÑ ÒÁÚÄÅÌÑÅÔ ÓÔÒÏËÉ ÔÏÌØËÏ ÐÏ ÐÒÏÂÅÌÁÍ. çÒÁÎÉÃÁ ÏÂÙÞÎÏ ×ÙÓÔÁ×ÌÅÎÁ ÎÁ 70-ÔÉ ÓÉÍ×ÏÌÁÈ, ÎÏ ×Ù ÍÏÖÅÔÅ ÉÚÍÅÎÉÔØ ÅÅ ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ C-x f. ÷Ù ÄÏÌÖÎÙ ÚÁÄÁÔØ ÇÒÁÎÉÃÕ × ×ÉÄÅ ÞÉÓÌÏ×ÏÇÏ ÁÒÇÕÍÅÎÔÁ ÄÌÑ ÜÔÏÊ ËÏÍÁÎÄÙ. >> ÷×ÅÄÉÔÅ C-x f Ó ÁÒÇÕÍÅÎÔÏÍ 20. (C-u 2 0 C-x f). ÚÁÔÅÍ ××ÏÄÉÔÅ ËÁËÏÊ-ÎÉÂÕÄØ ÔÅËÓÔ, É ÓÍÏÔÒÉÔÅ ËÁË Emacs ÚÁÐÏÌÎÑÅÔ ÌÉÎÉÉ ÐÏ 20 ÓÉÍ×ÏÌÏ× × ËÁÖÄÏÊ. ÷ÅÒÎÉÔÅ ÚÎÁÞÅÎÉÅ ÇÒÁÎÉÃÙ 70 ÎÁÚÁÄ, ÉÓÐÏÌØÚÕÑ C-x f ÓÎÏ×Á. åÓÌÉ ×Ù ÓÄÅÌÁÌÉ ÉÚÍÅÎÅÎÉÑ × ÓÅÒÅÄÉÎÅ ÐÁÒÁÇÒÁÆÁ, Á×ÔÏÚÁÐÏÌÎÅÎÉÅ ÎÅ ÐÅÒÅÓÔÒÏÉÔ ÔÅËÓÔ ÄÌÑ ×ÁÓ. þÔÏÂÙ ÐÅÒÅÓÔÒÏÉÔØ ÐÁÒÁÇÒÁÆ, ÎÁÂÅÒÉÔÅ M-q (Meta-q) × ÔÏ ×ÒÅÍÑ, ËÏÇÄÁ ËÕÒÓÏÒ ÂÕÄÅÔ ×ÎÕÔÒÉ ÐÁÒÁÇÒÁÆÁ. >> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ × ÐÒÅÄÙÄÕÝÉÊ ÐÁÒÁÇÒÁÆ, É ÎÁÖÍÉÔÅ M-q. * ðïéóë ------- Emacs ÕÍÅÅÔ ÉÓËÁÔØ ÓÔÒÏËÉ (ÜÔÏ ÎÅÐÒÅÒÙ×ÎÙÅ ÇÒÕÐÐÙ ÓÉÍ×ÏÌÏ× ÉÌÉ ÓÌÏ×Á) ×ÐÅÒÅÄ ÐÏ ÔÅËÓÔÕ, ÉÌÉ ÎÁÚÁÄ. ðÏÉÓË ÓÔÒÏËÉ ÜÔÏ ËÏÍÁÎÄÁ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ; ÏÎÁ ÐÅÒÅÍÅÝÁÅÔ ËÕÒÓÏÒ × ÓÌÅÄÕÀÝÕÀ ÔÏÞËÕ, ÇÄÅ ÎÁÊÄÅÎÁ ÉÓËÏÍÁÑ ÓÔÒÏËÁ. ëÏÍÁÎÄÁ ÐÏÉÓËÁ Emacs ÏÔÌÉÞÁÀÔÓÑ ÏÔ ÁÎÁÌÏÇÉÞÎÙÈ ËÏÍÁÎÄ ÂÏÌØÛÉÎÓÔ×Á ÄÒÕÇÉÈ ÒÅÄÁËÔÏÒÏ× ÔÅÍ, ÞÔÏ ÏÎÁ ÉÎËÒÅÍÅÎÔÁÌØÎÁÑ. üÔÏ ÏÚÎÁÞÁÅÔ ÞÔÏ ÐÏÉÓË ÐÒÏÉÓÈÏÄÉÔ ÐÏ ÍÅÒÅ ÔÏÇÏ ËÁË ×Ù ÎÁÂÉÒÁÅÔÅ ÉÓËÏÍÕÀ ÓÔÒÏËÕ. ëÏÍÁÎÄÁ, ÎÁÞÉÎÁÀÝÁÑ ÐÏÉÓË ×ÐÅÒÅÄ - C-s, É C-r ÉÝÅÔ ÎÁÚÁÄ. ðïäïöäéôå! îÅ ÎÕÖÎÏ ÐÒÏÂÏ×ÁÔØ ÜÔÏ ÐÒÑÍÏ ÓÅÊÞÁÓ. ëÏÇÄÁ ×Ù ÎÁÖÍÅÔÅ C-s ×Ù Õ×ÉÄÉÔÅ ÓÔÒÏËÕ "I-search", ÐÏÑ×É×ÛÕÀÓÑ × ÏÂÌÁÓÔÉ ÜÈÏ. ÷ÁÍ ÓÏÏÂÝÁÅÔÓÑ ÞÔÏ Emacs ÖÄÅÔ ××ÏÄÁ ÓÌÏ×Á, ËÏÔÏÒÏÅ ×Ù ÈÏÔÉÔÅ ÎÁÊÔÉ. ÚÁ×ÅÒÛÁÅÔ ÐÏÉÓË. >> ôÅÐÅÒØ, ÎÁÖÍÉÔÅ C-s ÄÌÑ ÎÁÞÁÌÁ ÐÏÉÓËÁ. íÅÄÌÅÎÎÏ, ÏÄÎÕ ÂÕË×Õ ÚÁ ÏÄÉÎ ÒÁÚ, ÎÁÂÉÒÁÊÔÅ ÓÌÏ×Ï, 'ËÕÒÓÏÒ', ÏÓÔÁÎÁ×ÌÉ×ÁÑÓØ ÐÏÓÌÅ ËÁÖÄÏÊ ××ÅÄÅÎÎÏÊ ÂÕË×Ù, ÚÁÍÅÞÁÑ ÞÔÏ ÐÒÏÉÓÈÏÄÉÔ Ó ËÕÒÓÏÒÏÍ. óÅÊÞÁÓ ×Ù ÎÁÛÌÉ ÐÅÒ×ÏÅ ×ÈÏÖÄÅÎÉÅ ÓÌÏ×Á "ËÕÒÓÏÒ". >> îÁÖÍÉÔÅ C-s ÓÎÏ×Á, ÞÔÏÂÙ ÎÁÊÔÉ ÓÌÅÄÕÀÝÅÅ ×ÈÏÖÄÅÎÉÅ ÓÌÏ×Á "ËÕÒÓÏÒ". >> ôÅÐÅÒØ ÎÁÖÍÉÔÅ ÞÅÔÙÒÅ ÒÁÚÁ É ÐÒÏÓÌÅÄÉÔÅ ÚÁ ÐÅÒÅÍÅÝÅÎÉÑÍÉ ËÕÒÓÏÒÁ. >> îÁÖÍÉÔÅ ÄÌÑ ÚÁ×ÅÒÛÅÎÉÑ ÐÏÉÓËÁ. ÷Ù ×ÉÄÅÌÉ ÞÔÏ ÐÒÏÉÓÈÏÄÉÌÏ? Emacs, × ÒÅÖÉÍÅ ÉÎËÒÅÍÅÎÔÁÌØÎÏÇÏ ÐÏÉÓËÁ, ÐÙÔÁÌÓÑ ÐÅÒÅÈÏÄÉÔØ Ë ÓÔÒÏËÁÍ ÓÏ×ÐÁÄÁÀÝÉÍ Ó ÎÁÂÉÒÁÅÍÏÊ ×ÁÍÉ, ÐÏÄÓ×ÅÞÉ×ÁÑ ÉÈ ÄÌÑ ×ÁÓ. ÞÔÏÂÙ ÐÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÍÕ ×ÈÏÖÄÅÎÉÑ ÓÌÏ×Á 'ËÕÒÓÏÒ' ÐÒÏÓÔÏ ÎÁÖÍÉÔÅ C-s ÓÎÏ×Á. åÓÌÉ ÂÏÌØÛÅ ÎÅÔ ×ÈÏÖÄÅÎÉÊ, Emacs ÉÚÄÁÓÔ Ú×ÕËÏ×ÏÊ ÓÉÇÎÁÌ, É ÓËÁÖÅÔ ÞÔÏ ×ÁÛ ÐÏÉÓË ÎÅ ÕÄÁÌÓÑ ("failing"), C-g ÔÏ ÖÅ ÔÏÌÖÅÎ ÏÔÍÅÎÉÔØ ÐÏÉÓË. úáíåþáîéå: îÁ ÎÅËÏÔÏÒÙÈ ÓÉÓÔÅÍÁÈ, ××ÏÄ C-x C-s ÚÁÍÏÒÏÚÉÔ ÜËÒÁÎ É ×Ù ÎÅ Õ×ÉÄÉÔÅ ÐÏÓÌÅÄÕÀÝÅÇÏ ×Ù×ÏÄÁ Emacs`Á. üÔÏ ÏÚÎÁÞÁÅÔ ÞÔÏ ÏÐÅÒÁÃÉÏÎÎÁÑ ÓÉÓÔÅÍÁ ÉÍÅÅÔ "ÏÓÏÂÅÎÎÏÓÔØ" ÉÍÅÎÕÅÍÕÀ "flow control" ÐÅÒÅÈ×ÁÔÙ×ÁÀÝÕÀ C-s É ÎÅ ÐÒÏÐÕÓËÁÀÝÕÀ ÜÔÏÔ ÓÉÍ×ÏÌ Ë Emacs`Õ. äÌÑ ÒÁÚÍÏÒÏÚËÉ ÜËÒÁÎÁ, ÎÁÖÍÉÔÅ C-q. óÍÏÔÒÉÔÅ ÒÁÚÄÅÌ "Spontaneous Entry to Incremental Search" ÒÕËÏ×ÏÄÓÔ×Á Emacs ÞÔÏÂÙ ÕÚÎÁÔØ ËÁË ÂÏÒÏÔØÓÑ Ó ÜÔÏÊ "ÏÓÏÂÅÎÎÏÓÔØÀ". åÓÌÉ ×Ù ×Ï ×ÒÅÍÑ ÉÎËÒÅÍÅÎÔÁÌØÎÏÇÏ ÐÏÉÓËÁ ÎÁÖÍÅÔÅ , ×Ù ÍÏÖÅÔÅ ÚÁÍÅÔÉÔØ ÞÔÏ ÐÏÓÌÅÄÎÉÊ ÓÉÍ×ÏÌ × ÉÓËÏÍÏÊ ÓÔÒÏËÅ ÕÄÁÌÉÌÓÑ, É ÐÏÉÓË ×ÅÒÎÕÌÓÑ Ë ÐÒÅÄÙÄÕÝÅÍÕ ÎÁÊÄÅÎÎÏÍÕ ÍÅÓÔÕ. îÁÐÒÉÍÅÒ, ÐÒÅÄÐÏÌÏÖÉÍ ×Ù ÎÁÂÒÁÌÉ "c", ÐÏÉÓË ÐÅÒÅÊÄÅÔ Ë ÐÅÒ×ÏÍÕ ×ÈÏÖÄÅÎÉÀ ÓÉÍ×ÏÌÁ "c". ôÅÐÅÒØ ÅÓÌÉ ×Ù ÎÁÂÅÒÅÔÅ "u", ËÕÒÓÏÒ ÐÅÒÅÊÄÅÔ Ë ÐÅÒ×ÏÍÕ ×ÈÏÖÄÅÎÉÀ "cu". îÁÖÁÔÉÅ ÕÄÁÌÉÔ ÓÉÍ×ÏÌ "u" ÉÈ ÓÔÒÏËÉ ÐÏÉÓËÁ, É ËÕÒÓÏÒ ×ÅÒÎÅÔÓÑ Ë ÐÅÒ×ÏÍÕ ×ÈÏÖÄÅÎÉÀ "c". åÓÌÉ ×Ù ×Ï ×ÒÅÍÑ ÐÏÉÓËÁ ××ÅÄÅÔÅ control- ÉÌÉ meta- ÓÉÍ×ÏÌ (ÚÁ ÎÅËÏÔÏÒÙÍÉ ÉÓËÌÀÞÅÎÉÑÍÉ -- ÓÉÍ×ÏÌÙ ×ÙÚÙ×ÁÀÝÉÅ ÐÏÉÓË, Á ÉÍÅÎÎÏ C-s É C-r), ÐÏÉÓË ÐÒÅËÒÁÔÉÔÓÑ. C-s ÎÁÞÉÎÁÅÔ ÐÏÉÓË É ÓÍÏÔÒÉÔ ÎÁ ÌÀÂÙÅ ×ÈÏÖÄÅÎÉÑ ÉÓËÏÍÏÊ ÓÔÒÏËÉ ðïóìå ÔÅËÕÝÅÊ ÐÏÚÉÃÉÉ ËÕÒÓÏÒÁ. åÓÌÉ ×Ù ÈÏÔÉÔÅ ÎÁÊÔÉ ÞÔÏ-ÔÏ ÒÁÎÅÅ × ÔÅËÓÔÅ, ÎÁÖÍÉÔÅ C-r. ÷ÓÅ ÞÔÏ ÍÙ ÇÏ×ÏÒÉÌÉ Ï C-s ÐÒÉÍÅÎÉÍÏ É Ë C-r, ÚÁ ÉÓËÌÀÞÅÎÉÅÍ ÐÒÏÔÉ×ÏÐÏÌÏÖÎÏÇÏ ÎÁÐÒÁ×ÌÅÎÉÑ ÐÏÉÓËÁ. * íîïçï ïëïî (MULTIPLE WINDOWS) ------------------------------- ïÄÎÁ ÉÚ ÐÒÉÑÔÎÙÈ ÏÓÏÂÅÎÎÏÓÔÅÊ Emacs ÜÔÏ ÔÏ, ÞÔÏ ×Ù ÍÏÖÅÔÅ ÏÔÏÂÒÁÖÁÔØ ÂÏÌÅÅ ÞÅÍ ÏÄÎÏ ÏËÎÏ ÎÁ ÜËÒÁÎÅ ÏÄÎÏ×ÒÅÍÅÎÎÏ. >> ðÅÒÅÍÅÓÔÉÔÅ ËÕÒÓÏÒ ÎÁ ÜÔÕ ÌÉÎÉÀ, É ÎÁÂÅÒÉÔÅ C-u 0 C-l. >> ôÅÐÅÒØ, ÎÁÂÅÒÉÔÅ C-x 2, ÞÔÏ ÒÁÚÄÅÌÉÔ ÜËÒÁÎ ÎÁ Ä×Á ÏËÎÁ. ïÂÁ ÏËÎÁ ÏÔÏÂÒÁÖÁÀÔ ÕÞÅÂÎÉË. ëÕÒÓÏÒ ÏÓÔÁÌÓÑ × ×ÅÒÈÎÅÍ ÏËÎÅ. >> îÁÖÍÉÔÅ C-M-v ÄÌÑ ÐÒÏËÒÕÔËÉ ÎÉÖÎÅÇÏ ÏËÎÁ. (ÅÓÌÉ Õ ×ÁÓ ÎÅÔ ÎÁÓÔÏÑÝÅÊ ËÎÏÐËÉ Meta (Alt), ÎÁÖÍÉÔÅ ESC C-v.) >> îÁÖÍÉÔÅ C-x o ("o" ÏÔ ÓÌÏ×Á "other" - ÄÒÕÇÏÅ) ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ËÕÒÓÏÒÁ × ÎÉÖÎÅÅ ÏËÎÏ. >> éÓÐÏÌØÚÕÊÔÅ C-v É M-v × ÎÉÖÎÅÍ ÏËÎÅ ÞÔÏ ÐÒÏËÒÕÞÉ×ÁÔØ ÅÇÏ. ðÒÏÄÏÌÖÉÔÅ ÞÔÅÎÉÅ ÜÔÉÈ ÉÎÓÔÒÕËÃÉÊ × ×ÅÒÈÎÅÍ ÏËÎÅ. >> îÁÖÍÉÔÅ C-x o ÓÎÏ×Á ÞÔÏÂÙ ÐÅÒÅÍÅÓÔÉÔØ ËÕÒÓÏÒ ÎÁÚÁÄ × ×ÅÒÈÎÅÅ ÏËÎÏ. ëÕÒÓÏÒ × ×ÅÒÈÎÅÍ ÏËÎÅ ÔÁÍ ÖÅ, ÇÄÅ É ÂÙÌ ÄÏ ÔÏÇÏ. ÷Ù ÍÏÖÅÔÅ ÐÒÏÄÏÌÖÁÔØ ÐÅÒÅËÌÀÞÁÔØÓÑ ÍÅÖÄÕ ÏËÎÁÍÉ, ÉÓÐÏÌØÚÕÑ C-x o. ëÁÖÄÏÅ ÏËÎÏ ÈÒÁÎÉÔ Ó×ÏÀ ÐÏÚÉÃÉÀ ËÕÒÓÏÒÁ, ÎÏ ÔÏÌØËÏ ÏÄÎÏ ÐÏËÁÚÙ×ÁÅÔ ËÕÒÓÏÒ. ÷ÓÅ ÏÂÙÞÎÙÅ ËÏÍÁÎÄÙ ÒÅÄÁËÃÉÉ ÐÒÉÍÅÎÑÀÔÓÑ Ë ÏËÎÕ, × ËÏÔÏÒÏÍ ÏÔÏÂÒÁÖÁÅÔÓÑ ËÕÒÓÏÒ. íÙ ÎÁÚÙ×ÁÅÍ ÅÇÏ "×ÙÂÒÁÎÎÏÅ ÏËÎÏ" ("selected window"). ëÏÍÁÎÄÁ C-M-v ÏÞÅÎØ ÕÄÏÂÎÁ, ËÏÇÄÁ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÔÅËÓÔ × ÏÄÎÏÍ ÏËÎÅ, É ÉÓÐÏÌØÚÕÅÔÅ ×ÔÏÒÏÅ × ËÁÞÅÓÔ×Å ÓÐÒÁ×ÏÞÎÉËÁ. ÷Ù ÍÏÖÅÔÅ ×ÓÅÇÄÁ ÓÏÈÒÁÎÑÔØ ËÕÒÓÏÒ × ÏËÎÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ É ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏ ÐÒÏÄ×ÉÇÁÔØÓÑ ×Ï ×ÔÏÒÏÍ, ÉÓÐÏÌØÚÕÑ C-M-v. C-M-v ÐÒÉÍÅÒ CONTROL-META ÓÉÍ×ÏÌÁ. åÓÌÉ Õ ×ÁÓ ÅÓÔØ ÎÁÓÔÏÑÝÁÑ ËÎÏÐËÁ META (Alt), ×Ù ÍÏÖÅÔÅ ÎÁÂÒÁÔØ C-M-v ÎÁÖÁ× ÏÄÎÏ×ÒÅÍÅÎÎÏ CTRL É META É ÎÅ ÏÔÐÕÓËÁÑ ÎÁÖÁÔØ v. é ÎÅ ×ÁÖÎÏ ËÔÏ ÂÕÄÅÔ ÎÁÖÁÔ ÐÅÒ×ÙÍ, CTRL ÉÌÉ META, ÐÏÔÏÍÕ ÞÔÏ ÜÔÉ ËÎÏÐËÉ ÍÏÄÉÆÉÃÉÒÕÀÔ ÔÉÐ ÓÉÍ×ÏÌÁ. åÓÌÉ Õ ×ÁÓ ÎÅÔ ÎÁÓÔÏÑÝÅÊ ËÎÏÐËÉ META, É ×Ù ÉÓÐÏÌØÚÕÅÔÅ ESC ×ÍÅÓÔÏ ÎÅÅ, ÐÏÒÑÄÏË ÄÏÌÖÅÎ ÂÙÔØ ÓÌÅÄÕÀÝÉÍ: ×Ù ÄÏÌÖÎÙ ÎÁÖÁÔØ ESC Á ÓÌÅÄÏÍ CTRL-v; CTRL-ESC v ÎÅ ÂÕÄÅÔ ÒÁÂÏÔÁÔØ. ðÏÔÏÍÕ, ÞÔÏ ESC ÉÍÅÅÔ Ó×ÏÊ ÓÏÂÓÔ×ÅÎÎÙÊ ÓÉÍ×ÏÌ, ÜÔÏ ÎÅ ÍÏÄÉÆÉÃÉÒÕÀÝÁÑ ËÎÏÐËÁ. >> îÁÖÍÉÔÅ C-x 1 (× ×ÅÒÈÎÅÍ ÏËÎÅ) ÞÔÏÂÙ ÉÚÂÁ×ÉÔØÓÑ ÏÔ ÎÉÖÎÅÇÏ. (åÓÌÉ ×Ù ÎÁÖÁÌÉ C-x 1 × ÎÉÖÎÅÍ ÏËÎÅ, ÔÏ ×Ù ÉÚÂÁ×ÉÌÉÓØ ÏÔ ×ÅÒÈÎÅÇÏ. ðÏÎÉÍÁÊÔÅ ÜÔÕ ËÏÍÁÎÄÕ ËÁË "ïÓÔÁ×ÉÔØ ÔÏÌØËÏ ÏÄÎÏ ÏËÎÏ, ÔÏ × ËÏÔÏÒÏÍ Ñ ÓÅÊÞÁÓ ÎÁÈÏÖÕÓØ"). ÷ÁÍ ÎÅ ÎÕÖÎÏ ÏÔÏÂÒÁÖÁÔØ ÏÄÉÎ É ÔÏÔ ÖÅ ÂÕÆÅÒ × ÏÂÏÉÈ ÏËÎÁÈ. åÓÌÉ ×Ù ÉÓÐÏÌØÚÕÅÔÅ C-x C-f ÞÔÏÂÙ ÏÔËÒÙÔØ ÆÁÊÌ × ÏÄÎÏÍ ÏËÎÅ, ÄÒÕÇÏÅ ÏÓÔÁÎÅÔÓÑ ÂÅÚ ÉÚÍÅÎÅÎÉÑ. ÷Ù ÍÏÖÅÔÅ ÏÔËÒÙ×ÁÔØ ÆÁÊÌÙ × ËÁÖÄÏÍ ÏËÎÅ ÎÅÚÁ×ÉÓÉÍÏ. åÓÔØ ÄÒÕÇÏÊ ÐÕÔØ ÉÓÐÏÌØÚÏ×ÁÔØ Ä×Á ÏËÎÁ ÏÔÏÂÒÁÖÁÀÝÉÈ ÒÁÚÎÙÅ ÆÁÊÌÙ: >> îÁÂÅÒÉÔÅ C-x 4 C-f ÚÁÔÅÍ ÉÍÑ ÏÄÎÏÇÏ É ×ÁÛÉÈ ÆÁÊÌÏ×. úÁ×ÅÒÛÉÔÅ . ðÏÓÍÏÔÒÉÔÅ ÞÔÏ ×ÙÂÒÁÎÎÙÊ ÆÁÊÌ ÐÏÑ×ÉÌÓÑ × ÎÉÖÎÅÍ ÏËÎÅ. ëÕÒÓÏÒ ÐÅÒÅÛÅÌ ÔÕÄÁ ÖÅ. >> îÁÂÅÒÉÔÅ C-x o ÞÔÏÂÙ ×ÅÒÎÕÔØÓÑ × ×ÅÒÈÎÅÅ ÏËÎÏ, É C-x 1 ÞÔÏÂÙ ÕÄÁÌÉÔØ ÎÉÖÎÅÅ ÏËÎÏ. * òåëõòóé÷îùå õòï÷îé òåäáëôéòï÷áîéñ (RECURSIVE EDITING LEVELS) -------------------------------------------------------------- éÎÏÇÄÁ ×Ù ÂÕÄÅÔÅ ×ËÌÀÞÁÔØ ÔÁË ÎÁÚÙ×ÁÅÍÙÅ "ÒÅËÕÒÓÉ×ÎÙÅ ÕÒÏ×ÎÉ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ". îÁ ÜÔÏ ÕËÁÚÙ×ÁÀÔ ÐÒÑÍÏÕÇÏÌØÎÙÅ ÓËÏÂÏÞËÉ × ÓÔÒÏËÅ ÓÏÓÔÏÑÎÉÑ, ÏËÒÕÖÁÀÝÉÅ ÏÂÙÞÎÙÅ ÓËÏÂËÉ ×ÏËÒÕÇ ÉÍÅÎÉ ÏÓÎÏ×ÎÏÇÏ ÒÅÖÉÍÁ. îÁÐÒÉÍÅÒ ×Ù ÍÏÖÅÔÅ Õ×ÉÄÅÔØ [(Fundamental)] ×ÍÅÓÔÏ (Fundamental). ÞÔÏÂÙ ×ÙÊÔÉ ÉÚ ÒÅËÕÒÓÉ×ÎÙÈ ÕÒÏ×ÎÅÊ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ, ÎÁÖÍÉÔÅ ESC ESC ESC. üÔÏ ÍÎÏÇÏÃÅÌÅ×ÁÑ ËÏÍÁÎÄÁ "×ÙÈÏÄ". ÷Ù ÔÁË ÖÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÅÅ ÄÌÑ ÕÎÉÞÔÏÖÅÎÉÑ ÌÉÛÎÉÈ ÏËÏÎ, É ×ÙÈÏÄÁ ÉÚ ÍÉÎÉÂÕÆÅÒÁ. >> îÁÖÍÉÔÅ M-x ÞÔÏÂÙ ÐÏÐÁÓÔØ × ÍÉÎÉÂÕÆÅÒ; ÚÁÔÅÍ ÎÁÖÍÉÔÅ ESC ESC ESC ÞÏ ×ÙÊÔÉ. ÷Ù ÎÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ C-g ÞÔÏÂÙ ÕÊÔÉ ÉÚ ÒÅËÕÒÓÉ×ÎÙÈ ÕÒÏ×ÎÅÊ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ. ðÏÔÏÍÕ ÞÔÏ C-g ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÏÔÍÅÎÙ ËÏÍÁÎÄÙ É ÁÒÇÕÍÅÎÔÏ× âåú ÒÅËÕÒÓÉ×ÎÙÈ ÕÒÏ×ÎÅÊ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ. * ëáë ðïìõþéôø ðïíïýø (GETTING MORE HELP) ----------------------------------------- ÷ ÜÔÏÍ ÕÞÅÂÎÉËÅ ÍÙ ÐÏÐÙÔÁÌÉÓØ ÓÎÁÂÄÉÔØ ×ÁÓ ÔÏÌØËÏ ÔÏÊ ÉÎÆÏÒÍÁÃÉÅÊ, ËÏÔÏÒÁÑ ÐÏÍÏÖÅÔ ÎÁÞÁÔØ ÉÓÐÏÌØÚÏ×ÁÔØ Emacs. ïÞÅÎØ ÍÎÏÇÏ ÉÎÆÏÒÍÁÃÉÉ ÄÏÓÔÕÐÎÏ × Emacs, É ÎÅ×ÏÚÍÏÖÎÏ ×ÓÀ ÅÅ ÐÒÅÄÓÔÁ×ÉÔØ ÚÄÅÓØ. ïÄÎÁËÏ, ×Ù ÍÏÖÅÔÅ ×ÙÕÞÉÔØ ÂÏÌØÛÅ ×ÏÚÍÏÖÎÏÓÔÅÊ Emacs, ÕÚÎÁÔØ ÄÒÕÇÉÅ ÐÏÌÅÚÎÙÅ ÏÓÏÂÅÎÎÏÓÔÉ. Emacs ÐÒÅÄÏÓÔÁ×ÌÑÅÔ ËÏÍÁÎÄÙ ÄÌÑ ÞÔÅÎÉÑ ÄÏËÕÍÅÎÔÁÃÉÉ Ï ËÏÍÁÎÄÁÈ Emacs. üÔÉ ËÏÍÁÎÄÙ "ÐÏÍÏÝÉ" ("help") ×ÓÅ ÎÁÞÉÎÁÀÔÓÑ Ó ÓÉÍ×ÏÌÁ Control-h, ËÏÔÏÒÙÊ Ñ×ÌÑÅÔÓÑ "ÓÉÍ×ÏÌÏÍ ÐÏÍÏÝÉ". ÞÔÏÂÙ ÉÓÐÏÌØÚÏ×ÁÔØ ÏÓÏÂÅÎÎÏÓÔÉ ðÏÍÏÝÉ, ÎÁÖÍÉÔÅ C-h, É ÚÁÔÅÍ ÓÉÍ×ÏÌ, ËÏÔÏÒÙÊ ÒÁÓÓËÁÖÅÔ ËÁËÏÊ ÉÍÅÎÎÏ ×ÉÄ ÐÏÍÏÝÉ ×Ù ÈÏÔÉÔÅ ÐÏÌÕÞÉÔØ. åÓÌÉ ×Ù äåêóô÷éôåìøîï ÒÁÓÔÅÒÑÌÉÓØ, ÎÁÂÅÒÉÔÅ C-h ? É Emacs ÒÁÓÓËÁÖÅÔ ×ÁÍ ËÁËÕÀ ÐÏÍÏÝØ ÏÎ ÍÏÖÅÔ ×ÁÍ ÐÒÅÄÏÓÔÁ×ÉÔØ. åÓÌÉ ×Ù ÎÁÖÁÌÉ C-h É ÐÅÒÅÄÕÍÁÌÉ ÏÂÒÁÝÁÔØÓÑ Ë ÐÏÍÏÝÉ, ÐÒÏÓÔÏ ÎÁÖÍÉÔÅ C-g ÞÔÏÂÙ ÏÔÍÅÎÉÔØ ÜÔÕ ËÏÍÁÎÄÕ. (ëÏÅ-ÇÄÅ ÐÅÒÅÎÁÚÎÁÞÁÀÔ ÓÉÍ×ÏÌ C-h. òÅÁÌØÎÏÊ ÎÅÏÂÈÏÄÉÍÏÓÔÉ × ÜÔÏÍ ÎÅÔ, ÓÏÏÂÝÉÔÅ Ï ÎÅÊ ÓÉÓÔÅÍÎÏÍÕ ÁÄÍÉÎÉÓÔÒÁÔÏÒÕ. ôÅÍ ×ÒÅÍÅÎÅÍ, ÅÓÌÉ C-h ÎÅ ×ÙÚÙ×ÁÅÔ ÓÏÏÂÝÅÎÉÅ ÐÏÍÏÝÉ ×ÎÉÚÕ ÜËÒÁÎÁ, ÐÏÐÒÏÂÕÊÔÅ ÎÁÂÒÁÔØ M-x help RET ×ÍÅÓÔÏ ÜÔÏÇÏ.) óÁÍÁÑ ÏÓÎÏ×ÎÁÑ ×ÏÚÍÏÖÎÏÓÔØ ðïíïýé - C-h c. îÁÖÍÉÔÅ C-h, ÚÁÔÅÍ c, É ÓÉÍ×ÏÌ ËÏÍÁÎÄÙ ÉÌÉ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ, É Emacs ÏÔÏÂÒÁÚÉÔ ÏÞÅÎØ ËÒÁÔËÏÅ ÏÐÉÓÁÎÉÅ ËÏÍÁÎÄÙ. >> îÁÖÍÉÔÅ C-h c Control-p. óÏÏÂÝÅÎÉÅ ÄÏÌÖÎÏ ×ÙÇÌÑÄÅÔØ ÐÒÉÍÅÒÎÏ ÔÁË C-p runs the command previous-line (C-p ×ÙÐÏÌÎÑÅÔ ËÏÍÁÎÄÕ previous-line {ÐÒÅÄÙÄÕÝÁÑ-ÌÉÎÉÑ}) ÷ÁÍ ÓÏÏÂÝÁÀÔ "ÉÍÑ ÆÕÎËÃÉÉ". éÍÅÎÁ ÆÕÎËÃÉÉ ÉÓÐÏÌØÚÕÀÔÓÑ × ÏÓÎÏ×ÎÏÍ ÄÌÑ ÎÁÓÔÒÏÊËÉ É ÒÁÓÛÉÒÅÎÉÑ Emacs. éÍÅÎÁ ÆÕÎËÃÉÊ ×ÙÂÒÁÎÙ ÔÁË, ÞÔÏÂÙ ÐÏËÁÚÁÔØ ÞÔÏ ÉÍÅÎÎÏ ËÏÍÁÎÄÁ ÄÅÌÁÅÔ, ÔÁË ÖÅ ÏÎÉ ÐÏÚ×ÏÌÑÀÔ Ó ÐÏÍÏÝØÀ ÜÔÏÊ ËÒÁÔËÏÊ ÉÎÆÏÒÍÁÃÉÉ ÌÅÇÞÅ ÚÁÐÏÍÎÉÔØ ÕÖÅ ×ÙÕÞÅÎÎÙÅ ËÏÍÁÎÄÙ. íÎÏÇÏÓÉÍ×ÏÌØÎÙÅ ËÏÍÁÎÄÙ, ÔÁËÉÅ ËÁË C-x C-s É (ÅÓÌÉ Õ ×ÁÓ ÎÅÔ ËÎÏÐËÉ META ÉÌÉ EDIT ÉÌÉ ALT) v ÔÁË ÖÅ ÂÕÄÕÔ ÄÏÓÔÕÐÎÙ ÐÏÓÌÅ C-h c. ðÏÌÕÞÉÔÅ ÂÏÌØÛÅ ÉÎÆÏÒÍÁÃÉÉ Ï ËÏÍÁÎÄÅ ÉÓÐÏÌØÚÕÑ C-h k ×ÍÅÓÔÏ C-h c. >> îÁÂÅÒÉÔÅ C-h k Control-p. ÷Ù Õ×ÉÄÉÔÅ ÏÐÉÓÁÎÉÅ ÆÕÎËÃÉÉ, Á ÔÁËÖÅ ÅÅ ÉÍÑ × ÏÔÄÅÌØÎÏÍ ÏËÎÅ Emacs. ëÏÇÄÁ ×Ù ÚÁ×ÅÒÛÉÔÅ ÞÔÅÎÉÅ, ÎÁÖÍÉÔÅ q ÞÔÏÂÙ ÉÚÂÁ×ÉÔØÓÑ ÏÔ ÔÅËÓÔÁ ÐÏÍÏÝÉ. åÓÔØ ÅÝÅ ÎÅÓËÏÌØËÏ ÐÏÌÅÚÎÙÈ ÏÐÃÉÊ C-h: C-h f ïÐÉÓÙ×ÁÅÔ ÆÕÎËÃÉÀ. ÷ÁÍ ÎÅÏÂÈÏÄÉÍÏ ÎÁÂÒÁÔØ ÉÍÑ ÆÕÎËÃÉÉ. >> ðÏÐÒÏÂÕÊÔÅ ÎÁÂÒÁÔØ C-h f previous-line. üÔÏ ÒÁÓÐÅÞÁÔÁÅÔ ÉÎÆÏÒÍÁÃÉÀ Emacs Ï ÜÔÏÊ ÆÕÎËÃÉÉ, ËÏÔÏÒÁÑ ×ÙÐÏÌÎÑÅÔÓÑ ËÏÍÁÎÄÏÊ C-p. C-h a Hyper Apropos. ÷×ÅÄÉÔÅ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï É Emacs ÐÏËÁÖÅÔ ×ÁÍ ÓÐÉÓÏË ×ÓÅÈ ÆÕÎËÃÉÊ É ÐÅÒÅÍÅÎÎÙÈ, ÉÍÅÎÁ ËÏÔÏÒÙÈ ÓÏÄÅÒÖÁÔ ÜÔÏ ÓÌÏ×Ï. ëÏÍÁÎÄÙ, ËÏÔÏÒÙÅ ÍÏÇÕÔ ÂÙÔØ ×ÙÚ×ÁÎÙ ÞÅÒÅÚ Meta-x, ÂÕÄÕÔ ÏÔÍÅÞÅÎÙ Ú×ÅÚÄÏÞËÏÊ ÓÌÅ×Á. >> îÁÂÅÒÉÔÅ C-h a newline. ÜÔÏ ÏÔÏÂÒÁÚÉÔ ÐÏÌÎÙÊ ÓÐÉÓÏË ÆÕÎËÃÉÊ É ÐÅÒÅÍÅÎÎÙÈ ÉÍÅÎÁ ËÏÔÏÒÙÈ ÎÁÞÉÎÁÀÔÓÑ Ó "newline". îÁÖÍÉÔÅ ÉÌÉ ËÌÉËÎÉÔÅ ÓÒÅÄÎÅÊ ËÎÏÐËÏÊ ÍÙÛËÉ ÞÔÏÂÙ ÐÏÌÕÞÉÔØ ÂÏÌØÛÅ Ï ÆÕÎËÃÉÉ ÉÌÉ ÐÅÒÅÍÅÎÎÏÊ. îÁÖÍÉÔÅ `q' ÞÏ ×ÙÊÔÉ ÉÚ hyper-apropos. * úáëìàþåîéå ------------ úÁÐÏÍÎÉÔÅ, ÞÔÏÂÙ ×ÙÊÔÉ ÉÚ Emacs ÎÁÓÏ×ÓÅÍ ÉÓÐÏÌØÚÕÊÔÅ C-x C-c. ÞÔÏÂÙ ×ÒÅÍÅÎÎÏ ×ÙÊÔÉ × ÏÂÏÌÏÞËÕ (shell) É ÐÏÔÏÍ ×ÅÒÎÕÔØÓÑ ÏÂÒÁÔÎÏ, ÉÓÐÏÌØÚÕÊÔÅ C-z. (× X, ÜÔÏ Ó×ÅÒÎÅÔ ÔÅËÕÝÅÅ ÏËÎÏ Emacs × ÉËÏÎËÕ.) üÔÏÔ ÕÞÅÂÎÉË ÄÏÌÖÅÎ ÂÙÔØ ÐÏÎÑÔÅÎ ×ÓÅÍ ÎÏ×ÙÍ ÐÏÌØÚÏ×ÁÔÅÌÑÍ, ÅÓÌÉ ×Ù ÎÁÊÄÅÔÅ ÞÔÏ-ÎÉÂÕÄØ ÎÅÑÓÎÏÅ, ÎÅ ÎÕÖÎÏ ÓÉÄÅÔØ É ÐÏÒÉÃÁÔØ ÓÅÂÑ - ÖÁÌÕÊÔÅÓØ! COPYING ------- üÔÏÔ ÕÞÅÂÎÉË ÐÒÏÉÚÏÛÅÌ ÉÚ ÄÌÉÎÎÏÊ ÓÅÒÉÉ ÕÞÅÂÎÉËÏ× Emacs, ÎÁÞÁÔÏÊ Ó ÏÄÎÁÖÄÙ ÎÁÐÉÓÁÎÎÏÇÏ by Stuart Cracraft ÄÌÑ ÏÒÉÇÉÎÁÌØÎÏÇÏ Emacs. Ben Wing ÐÏÄÐÒÁ×ÉÌ ÕÞÅÂÎÉË ÄÌÑ X Windows. Martin Buchholz É Hrvoje Niksic ÄÏÂÁ×ÉÌÉ ÍÎÏÇÏ ÉÓÐÒÁ×ÌÅÎÉÊ ÄÌÑ XEmacs. üÔÁ ×ÅÒÓÉÑ ÕÞÅÂÎÉËÁ, ËÁË É GNU Emacs, ÚÁÝÉÝÅÎÁ ÐÒÁ×ÁÍÉ ËÏÐÉÒÏ×ÁÎÉÑ (copyrighted), É ÐÒÉÈÏÄÉÔ Ó ÏÇÒÁÎÉÞÅÎÉÑÍÉ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ ËÏÐÉÊ ÓÏ ÓÌÅÄÕÀÝÉÍÉ ÓÏÇÌÁÛÅÎÉÑÍÉ: Copyright (c) 1985, 1996 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ ÓÁÍÏÇÏ Emacs ÂÏÌÅÅ ÓÌÏÖÎÙÅ, ÎÏ × ÔÏÍ ÖÅ ÄÕÈÅ. ðÏÖÁÌÕÊÓÔÁ, ÐÒÏÞÔÉÔÅ ÆÁÊÌ COPYING É ÚÁÔÅÍ ÄÁÊÔÅ ËÏÐÉÀ GNU Emacs ×ÁÛÉ ÄÒÕÚØÑÍ. Help stamp out software obstructionism ("ownership") by using, writing, and sharing free software! // ÚÁÍÅÞÁÎÉÑ, ÉÓÐÒÁ×ÌÅÎÉÑ ÏÛÉÂÏË Ó ÎÅÔÅÒÐÅÎÉÅÍ ÖÄÕ ÐÏ ÁÄÒÅÓÕ bor@vb.dn.ua // Vladimir Bormotov. xemacs-21.4.22/etc/TUTORIAL.se0000644000175000017500000014015307463540274013626 0ustar acsacsDetta dokument är baserat på den engelska handledningen, som har Copyright (c) 1985, 1996 Free Software Foundation, Inc. Se slutet av dokumentet för villkor och förutsättningar. Detta är den Svenska användarhandledningen till Emacs. Emacs-kommandon innebär ofta användning av kontrolltangenten (oftast märkt CTRL eller CTL) eller META-tangenten. På vissa tangentbord är META-tangenten märkt ALT eller EDIT eller något annat. På Suns tangentbord, till exempel, är det rutertangenten till vänster om mellanslagstangenten. Om du inte har någon META-tangent kan du använda ESC. Istället för att skriva META eller KONTROLL kommer vi här att använda följande förkortningar: C- betyder att du skall hålla ner kontrolltangenten samtidigt som du skriver bokstaven . Alltså betyder C-f: håll ner kontrolltangenten och tryck f. M- betyder att du skall hålla ned META-, EDIT- eller ALT-tangenten samtidigt som du skriver . Om du inte har någon META-, EDIT- eller ALT-tangent kan du trycka , släppa tangenten och sedan trycka bokstaven . När vi skriver avser vi ESC-tangenten. Viktigt: För att avsluta Emacs trycker du C-x C-c (två tecken). Tecknen ">>" i vänstermarginalen anger att du kan prova ett kommando. Till exempel: <> >> Tryck C-v (View next screen) för att hoppa till nästa skärmbild. Prova nu. Håll ned kontrolltangenten och tryck v. Från och med nu bör du göra detta när du är färdig med en skärmbild. Notera att det är ett överlapp på två rader när du byter från skärmbild till skärmbild. Detta är för att behålla sammanhanget när du bläddrar framåt i filen. Det första du behöver veta är hur du manövrerar från plats till plats i texten. Du har redan lärt dig hur du flyttar en skärmbild framåt, med C-v. För att flytta dig en skärmbild bakåt trycker du M-v. (Håll ned META-tangenten och tryck v eller tryck v om du inte har META-, EDIT- eller ALT-tangent.) >> Prova att trycka M-v och C-v några gånger. * SAMMANFATTNING ---------------- Följande kommandon är bra för att se hela skärmbilder: C-v Flytta en skärmbild framåt. M-v Flytta en skärmbild bakåt. C-l Rita om skärmen och placera texten där markören står mitt på skärmbilden. (Det är KONTROLL-L, inte KONTROLL-1.) >> Leta reda på markören och se vad som står där. Tryck sedan C-l. Hitta markören igen och notera att det är samma text som står kring markören nu. * GRUNDLÄGGANDE MARKÖRRÖRELSER ------------------------------ Att flytta sig från skärmbild till skärmbild kan vara bra, men hur förflyttar man sig till en speciell plats på skärmen? Det finns flera sätt att göra detta på. Det vanligaste är att använda kommandona C-p, C-b, C-f och C-n. Vart och ett av dessa kommandon flyttar markören en rad eller en kolumn i en bestämd riktning på skärmen. Här visas dessa fyra kommandon och i vilken riktning de flyttar markören: Föregående rad, C-p : : Bakåt, C-b .... Nuvarande markörposition .... Framåt, C-f : : Nästa rad, C-n >> Flytta markören till linjen mitt i diagrammet genom att använda C-n och C-p. Använd sedan C-l för att centrera diagrammet på skärmbilden. Detta är säkert lite enklare att förstå om du tänker på dessa förkortningar: P för föregående (previous), N för nästa (next), B för bakåt (backward) och F för framåt (forward). Detta är de grundläggande kommandona för att flytta markören och du kommer säkert att använda dem hela tiden, så det är en stor fördel om du lär dig dem nu. >> Gör några C-n så att du kommer ned till den här raden. >> Flytta dig in i raden med hjälp av några C-f och sedan uppåt med några C-p. Lägg märke till vad C-p gör när markören står mitt på en rad. Textrader är åtskilda med radslutstecken. Den sista raden i filen avslutas också vanligtvis med ett radslut men Emacs kräver inte att den gör det. >> Prova med C-b i början av en rad. Detta gör att markören flyttas till slutet av den tidigare raden. Detta är för att den flyttar markören över radslutstecknet. C-f flyttar också över radslut, precis som C-b. >> Gör några fler C-b så att du får en känsla för var markören är. Tryck sedan några C-f tills du kommer till slutet av raden. Tryck ytterligare en C-f så att du flyttar markören till nästa rad. När du flyttar markören förbi toppen eller botten av skärmbilden kommer texten utanför skärmen att komma fram. Detta kallas "rullning" och gör det möjligt för Emacs att flytta markören utan att den försvinner ut ur skärmbilden. >> Prova att flytta markören förbi skärmbildens nederkant med hjälp av C-n och se vad som händer. Om det går för sakta att flytta markören ett tecken i taget kan du flytta den ett ord. M-f flyttar markören ett ord framåt och M-b flyttar den ett ord bakåt. >> Prova några M-f och M-b. Om markören står mitt i ett ord kommer M-f att flytta markören till slutet av ordet. Om du står mitt emellan två ord kommer M-f att flytta markören till slutet av nästa ord. M-b fungerar på samma sätt men i motsatt riktning. >> Tryck M-f och M-b några gånger och skifta markörposition med några C-f och C-b så att du ser hur M-f och M-b uppför sig vid olika placeringar av markören både i och mellan ord. Lägg märke till likheten mellan C-f och C-b å ena sidan och M-f och M-b å den andra. Ofta används META-kommandon till språkrelaterade operationer (ord, stycken, avsnitt), medan kontrollkommandon används till grundläggande operationer som inte beror av vad man redigerar (bokstäver, rader, etc.). Denna likhet finns också mellan rader och stycken: C-a och C-e flyttar markören till början av en rad eller till slutet av en rad, medan M-a och M-e flyttar den till början respektive slutet av ett stycke. >> Prova några C-a och sedan några C-e. Prova också några M-a och sedan några M-e. Se hur efterföljande C-a efter varandra inte gör något, medan flera M-a fortsätter att flytta markören till nästa stycke. Även om detta inte verkar självklart är det ganska naturligt. Platsen där markören är i texten kallas också för "arbetspunkt" (point). Eller omskrivet: Markören visar på skärmen var arbetspunkten är i texten. Här är en kort sammanfattning av de enklaste markörförflyttnings- kommandona, inklusive ord- och styckesförflyttningskommandon: C-f Flytta markören ett steg framåt C-b Flytta markören ett steg bakåt M-f Flytta markören ett ord framåt M-b Flytta markören ett ord bakåt C-n Flytta markören till nästa rad C-p Flytta markören till föregående rad C-a Flytta markören till början av raden C-e Flytta markören till slutet av raden M-a Flytta markören till början av meningen M-e Flytta markören till slutet av meningen >> Prova alla dessa kommandon några gånger för tränings skull. Dessa är de kommandon som används mest. Två andra viktiga markörrörelsekommandon är M-< (META mindre-än), som flyttar markören till början av texten, och M-> (META större-än), som flyttar den till slutet av texten. På en del tangentbord är "<" placerad över komma, så att man måste använda skift för att få fram den. På dessa tangentbord måste man också använda skift för att skriva M-<. Utan skifttangenten skulle det bli M-komma. >> Prova M-< nu för att flytta markören till början av vägledningen. Använd sedan C-v för att flytta markören tillbaka hit igen. >> Prova också M-> för att flytta markören till slutet av vägledningen. Använd sedan M-v för att flytta markören tillbaka hit igen. Du kan också flytta markören med hjälp av piltangenterna, om terminalen har piltangenter. Vi föreslår att du lär dig C-b, C-f, C-n och C-p av tre skäl. För det första kommer de att fungera på alla slags terminaler. För det andra kommer du att finna, när du har fått lite träning i att använda Emacs, att det går mycket snabbare att använda kontrollfunktionerna än piltangenterna (för att du undviker att ändra fingersättningen). Den tredje anledningen är att när man har lärt sig att använda kontrolltangenten blir det lättare att lära sig de mer avancerade kontrollfunktionerna. De flesta kommandon i Emacs tar ett numeriskt argument och för de flesta kommandon leder detta till att de repeteras. Ett numeriskt argument anges genom att du skriver C-u och sedan talet, innan du skriver kommandot. Om du har en META- (eller EDIT- eller ALT-) tangent så finns det ett annat alternativ för att ge numeriska argument: skriv talet medan du håller ned META-tangenten. Vi föreslår att du använder C-u för det fungerar på alla slags terminaler. Det numeriska argumentet kallas också för "prefixargument" eftersom det skrivs före kommandot. Till exempel: C-u 8 C-f flyttar markören åtta steg framåt. >> Prova C-n eller C-p med ett numeriskt argument så att du kommer så nära den här raden som möjligt med ett enda kommando. De flesta kommandon använder det numeriska argumentet för ett repeterat utförande men det finns kommandon som använder det annorlunda. Flera kommandon, men inga av dem du lärt dig hittills, använder det som en flagga. Med ett prefixargument, och oberoende av dess värde, gör kommandot något annat. C-v och M-v finns med bland dessa undantag. Om man ger ett argument till ett av dessa kommandon kommer skärmbilden flytta sig upp eller ned så många rader som argumentet anger, istället för så många skärmbilder. Till exempel kommer C-u 8 C-v flytta skärmbilden 8 rader uppåt. >> Prova C-u 8 C-v nu. Detta borde ha flyttat skärmbilden 8 rader uppåt. Om du önskar flytta tillbaka igen är det bara att ge samma argument till M-v. Om du använder Emacs under ett fönstersystem, som X11 eller MS-Windows, finns det troligen ett rektangulärt område på vänster sida av Emacs-fönstret, en så kallad rullningslist. Genom att klicka i den med musen kan du rulla texten. >> Prova att trycka med den mellersta musknappen i det utvalda området på rullningslisten. Detta bör flytta skärmbilden till en plats i texten beroende på var i rullningslisten du trycker. >> Prova att flytta musen upp och ner medan du håller ner den mellersta musknappen. Du ser att texten rullar upp och ner beroende på hur du för musen. * MARKÖRFÖRFLYTTNINGAR PÅ EN X-TERMINAL --------------------------------------- Om du sitter vid en X-terminal kommer du antagligen finna det mycket enklare att använda piltangenterna för att flytta markören. Vänster-, höger-, upp- och nedåt-pilarna flyttar markören i önskad riktning. De fungerar på samma sätt som C-b, C-f, C-p och C-n men är enklare att slå och förstå. Du kan också använda C-vänsterpil och C-högerpil för att flytta markören över ord och C-uppåtpil och C-nedåtpil för att flytta den över textblock. (Till exempel för att flytta förbi ett stycke om du redigerar text.) Om du har tangenter märkta med HOME (eller BEGIN) och END kan du använda dessa för att gå till början respektive slutet av raden och C-HOME och C-END kommer att gå till början respektive slutet av filen. Om tangentbordet har PgUp- och PgDn-tangenter kan du använda dem för att gå upp och ner en skärmbild åt gången på samma sätt som med M-v och C-v. Alla dessa kan också ta numeriska argument, som beskrivits tidigare. Du kan också använda en genväg för att skriva in dessa argument: håll ned CONTROL eller META tangenten och skriv in numret. Till exempel för att gå 12 ord till höger trycker du C-1 C-2 C-högerpil. Lägg märke till att det är mycket enkelt att skriva eftersom du inte behöver släppa kontrolltangenten mellan tangenttryckningarna. * OM EMACS HÄNGER ----------------- Om Emacs slutar att reagera på kommandon kan du lugnt stoppa dem genom att trycka C-g. Du kan också använda C-g för att stoppa ett kommando som tar för lång tid att utföra. Det är också möjligt att använda C-g för att avbryta ett numeriskt argument eller början på ett kommando som du inte önskar att utföra. >> Skriv C-u 100 för att ge ett numeriskt argument på 100 och tryck C-g. Tryck nu C-f. Markören skall nu flytta sig bara ett steg, för att du avbröt argumentet med C-g. Om du av misstag slår blir du kvitt detta med ett C-g. * SPÄRRADE KOMMANDON -------------------- En del Emacs-kommandon är "spärrade" så att nybörjare inte skall använda dem av misstag. Om du provar ett av dessa spärrade kommandon kommer Emacs ge ett meddelande som berättar vilket kommando det är och kommer att fråga om du verkligen vill fortsätta och utföra detta kommando. Om du verkligen önskar att utföra kommandot trycker du mellanslag som svar på frågan. Normalt, om du inte önskar att utföra detta kommando, svarar du "n" på frågan. >> Skriv C-x n p (som är ett spärrat kommando). Skriv n som svar på frågan. * FÖNSTER --------- Emacs kan ha flera fönster och varje fönster kan visa sin egen text. Lägg märke till att "fönster" i Emacs inte refererar till separata överlappande fönster i fönstersystemet, utan till separata delar i ett enda X-fönster.(Emacs kan också ha flera X-fönster eller "ramar" i Emacs-terminologi. Detta beskrivs senare.) Vi kommer förklara senare hur man använder flera fönster. Här skall vi förklara hur man blir av med extra fönster för att komma tillbaka till det grundläggande läget med endast ett fönster. Det är enkelt: C-x 1 Ett fönster (dvs. ta bort alla andra fönster). Det är KONTROLL-x följt av siffran 1. C-x 1 utvidgar fönstret där markören står så att det fyller hela skärmbilden. Alla andra fönster tas bort. >> Flytta markören till den här raden och tryck C-u 0 C-l. (Kom ihåg att C-l rensar skärmen och mittställer raden där markören står. Om du ger ett numeriskt argument till detta kommando betyder det "rensa skärmen och placera raden där markören står på raden som argumentet anger". Därför betyder C-u 0 C-l att skärmen skall rensas och raden där markören står placeras överst.) >> Skriv C-x 2. Se hur det här fönstret krymper samtidigt som ett nytt uppträder med samma innehåll som detta. >> Slå C-x 1 och se hur det nya fönstret nu försvinner. * SKRIVA OCH TA BORT TEXT ------------------------- Om du önskar att sätta in text är det bara att skriva in texten. Tecken som du kan se, så som A, 7, *, etc. tolkas som text och sätts in direkt. Skriv (retur-tangenten) för att sätta in en radbrytning. Du kan radera det sista tecknet du skrev genom att trycka . är en tangent på tangentbordet, som kan vara märkt "Del". I några fall fungerar också "backsteg" som men inte alltid! Generellt raderar tecknet precis före den aktuella markörspositionen. >> Gör detta nu: Skriv in några tecken och ta bort dem genom att använda . Var inte rädd för att skriva i den här filen, du kommer inte att kunna förändra originalet till vägledningen. Detta är bara en lokal kopia. När en rad blir för lång för att rymmas på en skärmbredd så fortsätter den på raden under. Ett bakstreck ("\") (eller om du kör under ett fönstersystem, en liten böjd pil) i slutet av högermarginalen indikerar att raden fortsätter. >> Skriv in lite text så att du kommer till slutet av raden och fortsätt att skriva lite till. Du kommer då att se hur fortsättningstecknet ser ut. >> Använd för att radera texten tills raden ryms på en skärmbredd igen. Fortsättningstecknet kommer då att försvinna. Du kan radera radbrytning precis som andra tecken. Genom att radera radbrytningen mellan två rader slås dessa samman till en. Om resultatet av denna sammanslagning blir för stor för att passa inom en skärmbredd, så kommer den att visas med ett fortsättningstecken. >> Flytta markören till början av en rad och tryck . Detta kommer att klistra ihop raden med raden över. >> Tryck för att sätta in radbrytningen du tog bort. Tänk på att de flesta Emacs-kommandon kan ta numeriska argument. Detta gäller också texttecken. Genom att repetera ett texttecken kommer det skrivas flera gånger. >> Prova det nu: Skriv C-u 8 * för att sätta in ********. Du har nu lärt dig de mest grundläggande sätten att skriva något i Emacs och att rätta fel. Du kan radera ord och rader också. Här är en översikt över kommandon för radering: raderar tecknet som står precis före markören C-d raderar tecknet som står precis under markören M- raderar ordet precis före markören M-d raderar ordet precis efter markören C-k raderar från markören till slutet av raden M-k raderar till slutet av stycket Lägg märke till att och C-d kontra M- och M-d följer mönstret som började med C-f och M-f. ( är inte precis ett kontrolltecken men låt oss inte bry oss om det.) C-k och M-k fungerar på samma sätt som C-e och M-e (nästan). När du raderar mer än ett tecken åt gången kommer Emacs att spara den borttagna texten så att du han hämta tillbaka den igen. Denna text kallas borttagen (killed). Att få tillbaka borttagen text kallas att hämta den (yank). Du kan antingen hämta tillbaka borttagen text till samma plats som den blev raderad eller också kan du sätta in den på en annan plats i texten. Du kan också hämta tillbaka den flera gånger så att du får flera lika förekomster av den. Kommandot för att hämta tillbaka texten är C-y. Skillnaden mellan att "ta bort" (killing) och "radera" (deleting) text är att "borttagen" text kan hämtas tillbaka, medan raderad text inte kan det. Återinsättning av borttagen text kallas "återhämtning" (yanking). Generellt kan man säga att kommandon som tar bort fler än ett tecken sparar undan texten (så att den kan återhämtas) medan kommandon som bara raderar ett tecken eller tomma rader och mellanrum inte sparar någonting (och den texten kan alltså inte återhämtas). >> Flytta markören till början av en rad som inte är tom. Tryck C-k för att ta bort texten på raden. >> Tryck C-k en gång till. Du kommer nu se att den raderar den tomma raden som var kvar. Lägg märke till att ett enstaka C-k bara raderar texten på raden och att det andra C-k raderar själva raden och flyttar upp texten på raden under ett steg. C-k hanterar numeriska argument lite speciellt. Den raderar så många rader OCH innehållet i dem. Detta är alltså inte bara en repetition av kommandot. C-u 2 C-k raderar två rader samt de tomma raderna, medan C-k två gånger inte kommer att göra det. Kommandot för att hämta tillbaka text är C-y. Kommandot hämtar tillbaka den sist borttagna texten och placerar den där markören är. >> Prova: Gör C-y för att få tillbaka texten. Tänk på C-y som om du rycker, eller drar, tillbaka något som någon tagit ifrån dig. Notera att om du gör flera C-k i rad så kommer all bortagen text att sparas samlat så att ett C-y återhämtar alla raderna på en gång. >> Prova detta. Tryck C-k ett par gånger. Och hämta så tillbaka igen: >> Tryck C-y. Flytta markören några rader ned och tryck C-y igen. Så kopierar man text. Men vad gör du om du har en text du önskar att hämta tillbaka men du har redan tagit bort något nytt? C-y skulle hämta tillbaka den senaste texten som blev borttagen men tidigare bortagen text är inte förlorad. Du kan få tillbaka den med kommandot M-y. Efter att du har använt C-y för att hämta tillbaka den sist borttagna texten kommer M-y ersätta denna text med tidigare borttagen text. Genom att göra M-y om och om igen hämtas allt tidigare borttagen text tillbaka. När du har nått den önskade texten behöver du inte göra något ytterligare för att behålla den. Fortsätt bara med din redigeringen och lämna den återtagna texten där den är. Om du gör M-y tillräckligt många gånger kommer du att komma tillbaka till startpunkten (texten som sist blev borttagen). >> Ta bort en rad, flytta markören till en ny rad och ta bort även denna rad. Använd C-y för att hämta tillbaka den sista raden. Tryck M-y för att byta den mot den tidigare borttagna raden. Tryck flera M-y och se vad du får. Fortsätt med detta tills du får tillbaka den första raden igen och sedan några gånger till. Om du vill kan du prova med positiva och negativa argument till M-y. * ÅNGRA ------- Om du gör en förändring i texten och sedan ångrar dig, så kan du upphäva ändringen med kommandot C-x u (undo). Normalt kommer C-x u upphäva förändringen som gjordes av det sist utförda kommandot. Om du repeterar C-x u flera gånger kommer varje repetition upphäva ett kommando till. Det finns två undantag. Kommandon som inte förändrar texten räknas inte (detta inkluderar markörförflyttningar och bläddringskommandon), och inskrivna enkelbokstäver blir vanligtvis grupperade i grupper om upp till 20 tecken. Detta är för att reducera antalet C-x u som behövs för att ångra inskriven text. >> Ta bort den här raden med C-k. C-x u kommer att hämta tillbaka den igen. C-_ är ett alternativ till ångra-kommandot. Den fungerar på samma sätt som C-x u men är enklare att trycka flera gånger i följd. Det olämpliga med C-_ är att den är svår att hitta på en del tangentbord. Det är därför vi också har C-x u. På en del terminaler kan du få fram C-_ genom att trycka / samtidigt som Ctrl hålls nere. Ett numeriskt argument till C-_ eller C-x u medför repetering. Du kan ångra radering av text precis på samma sätt som du kan ångra att du tagit bort text. Skillnaden mellan att ta bort och att radera någonting påverkar endast om du kan hämta tillbaka det med C-y. För ångerfunktionen spelar det ingen roll hur texten försvunnit. * FILER ------- För att texten du har förändrat skall sparas permanent måste du lägga den i en fil. Om du inte gör det kommer texten att försvinna när du avslutar Emacs. Du lägger texten i en fil genom att först finna (find) denna fil. Detta kallas också för att besöka filen (visit). Att finna en fil innebär att du ser filens innehåll i Emacs. På många sätt är det som om du förändrar själva filen men förändringen du gör kommer inte bli permanent förrän filen sparas (save). Detta är för att undvika att halvförändrade filer sparas när du inte vill det. Till och med när du sparar filen kommer Emacs att behålla originalet under ett nytt namn, som backup, ifall du senare ångrar alltihop. Om du tittar nästan längst ner på skärmbilden så kommer du se en rad som börjar och slutar med minustecken, och som innehåller texten "--:-- TUTORIAL.se". Denna del av skärmbilden visar alltid namnet på filen du besöker. Just nu är du inne i en fil som heter "TUTORIAL.se" och som är en personlig kopia av vägledningen till Emacs. Vilken fil du än är inne i så kommer filnamnet stå där. Kommandot för att finna filer och spara filer skiljer sig lite från andra kommandon du har lärt dig eftersom de består av två tecken. Bägge startar med tecknet KONTROLL-x. Det är faktisk många kommandon som startar med KONTROLL-x och många av dem har med filer, skärmbilder och liknande saker att göra. Dessa kommandon är två, tre eller fyra tecken långa. En annan sak med kommandot för att finna filer är att du måste ange vilket filnamn du önskar. Vi säger att kommandot "läser ett argument från terminalen". I detta fall är argumentet namnet på filen. Efter att du gett kommandot C-x C-f Finn en fil kommer Emacs fråga efter ett filnamn. Filnamnet du skriver syns på den nedersta raden i skärmbilden. Denna sista rad kallas minibuffert när den används på det här sättet. Du kan använda vanliga Emacs-kommandon för att förändra filnamnet. När du skriver in filnamnet, eller något annat i minibufferten, kan du avbryta med kommandot C-g. >> Skriv C-x C-f och så C-g. Detta avbryter minibufferten och avbryter också C-x C-f kommandot som använde minibufferten. Så att du inte finner någon fil. När du är färdig med att skriva filnamnet trycker du för att utföra kommandot. Då kommer C-x C-f kommandot att börja leta fram filen. Minibufferten försvinner när C-x C-f kommandot är färdigt. Efter en liten stund kommer filen upp på skärmen och du kan börja redigera innehållet. När du vill spara filen kan du använda detta kommando C-x C-s Spara fil Detta sparar texten på skärmen till filen. Första gången detta görs kommer Emacs att ge originalfilen ett nytt namn så att den inte går förlorad. Det nya filnamnet bildas genom att lägga till ett "~" i slutet av det ursprungliga filnamnet. När lagringen är utförd kommer Emacs skriva ut namnet på filen som blev sparad. Du bör spara ofta så att du inte förlorar så mycket om systemet kraschar. >> Skriv C-x C-s för att spara en kopia av denna vägledning. Detta skall leda till att "Wrote ...TUTORIAL.se" skrivs ut nederst på skärmbilden. Observera: På vissa system leder C-x C-s till att skärmen låser sig. Detta tyder på att systemet har "flödeskontroll" och att denna har fångat C-s och inte skickat den vidare till Emacs. För att fortsätta måste du trycka C-q. Se i så fall i avsnittet "Spontaneous Entry to Incremental Search" i Emacs-manualen för att få tips på hur detta kan undvikas. Du kan finna en existerande fil, antingen för att förändra den eller för att titta på den. Du kan också finna en fil som inte existerar. Det är så man skapar nya filer med Emacs: finn filen, som är tom till att börja med, och sätt igång med att skriva texten som skall in i filen. Först när du sparar filen kommer Emacs att verkligen skapa filen med den text du har skrivit. Från och med detta editerar du en fil som existerar. * BUFFERTAR ----------- Om du finner en ny fil med C-x C-f kommer den första filen fortsätta att vara öppen i Emacs. Du kan byta tillbaka till den genom att finna den på nytt med C-x C-f. På så sätt kan du ha ett stort antal filer öppna i Emacs. >> Skapa en fil med namnet "foo" genom att trycka C-x C-f foo . Skriv in lite text, redigera den och spara "foo" genom att använda C-x C-s. Skriv till slut C-x C-f TUTORIAL.se för att komma tillbaka till den här vägledningen. Emacs sparar texten för varje fil i ett objekt kallat "buffert". När du finner en ny fil skapas en ny buffert i Emacs. För att se en lista över existerande buffertar i Emacs kan du skriva C-x C-b Listning av buffertar. >> Prova C-x C-b nu. Se hur varje buffert har ett namn och att de också kan ha namnet på den fil som innehållet kommer från. En del buffertar är inte knutna till någon fil, till exempel bufferten "*Buffer List*". Det är den buffert som innehåller buffertlistan som skapades med C-x C-b. Vilken text du än ser i ett Emacs-fönster så tillhör den alltid en buffert. >> Skriv C-x 1 för att bli kvitt buffertlistan. Om du ändrar texten till en fil och sedan öppnar en ny fil, så kommer inte den första filen sparas. Förändringen ligger kvar i bufferten. Skapande och redigering av den nya filen påverkar inte den första filens buffert. Detta kan vara bra men betyder också att du behöver ett lämpligt sätt att spara den första filens buffert. Det är omständligt att flytta tillbaka till den tidigare bufferten med C-x C-f för att sedan spara filen med C-x C-s. Därför finns kommandot C-x s Spara buffertar C-x s frågar för varje buffert med ändringar, som inte sparats, om du vill spara eller ej. >> Sätt in en rad med text och spara med C-x s Du skall nu få frågan om du önskar spara bufferten TUTORIAL.se. Svara ja på frågan genom att trycka "y" (yes). * ANVÄNDNING AV MENYER ---------------------- Om du använder en X-terminal kommer du säkert att lägga märke till menyerna på toppen av skärmbilden. Via dessa menyer får du tillgång till de mest använda Emacs-kommandona, till exempel find-file (Open...). Detta är enklast i början, när du inte känner till alla tangenttryckningar som skall till för varje kommando. När du lärt känna Emacs kommer det vara lättare att använda tangentbordet. Tangentbordskombinationen står precis efter respektive menykommando. Lägg märke till att det är många menykommandon som inte har någon tangentbordskombination. Ett exempel är buffertmenyn (Buffers), som listar alla tillgängliga buffertar. Du kan enkelt byta till en buffert genom att välja namnet på den i buffertmenyn. * ANVÄNDNING AV MUSEN --------------------- När du kör Emacs under X är det möjligt att använda musen. Du kan placera markören genom att trycka på den vänstra musknappen vid önskad position och du kan markera text genom att hålla ned vänstra musknappen samtidigt som du flyttar markören över texten du vill markera. Alternativt kan du klicka med vänster musknapp i den ena änden av texten du önskar att markera, flytta muspekaren till den andra änden och använd skiftklick (tryck med musknappen samtidigt som skifttangenten trycks ned) för att markera texten. För att ta bort den markerade texten kan du använda kommandot C-w eller välja "Klipp" (Cut) från redigeramenyn (Edit). Lägg märke till att dessa *inte* är likvärdiga. C-w sparar bara texten internt i Emacs (a`la C-k, som beskrivits tidigare), medan Klipp också lägger texten i X klippbord, där den är tillgänglig även för andra applikationer. För att hämta text från klippbordet kan du använda "Klistra in" (Paste) från redigeramenyn. Den mellersta musknappen används vanligen för att välja saker från skärmen. Om du till exempel går in i Info (on-line dokumentationen till Emacs) med C-h i eller via hjälpmenyn (Help), kan du följa länkarna genom att trycka med den mellersta musknappen. Om du skriver in ett filnamn (till exempel efter C-x C-f) och trycker TAB för att få fram en fillistning, så kan du avsluta filnamnet genom att trycka ned den mellersta musknappen på filnamnet. Genom att trycka med höger musknapp kan du få fram en popupmeny. Innehållet i den menyn är beroende av vilket läge du är i och vanligtvis innehåller den några av de mest använda kommandona så att de blir lätt tillgängliga. >> Tryck på höger musknapp nu. Du måste hålla knappen nere för att menyn skall visas. * UTVIDGNING AV KOMMANDOMÄNGDEN ------------------------------- Det finns mycket fler Emacs-kommandon än antalet KONTROLL- eller META-tangenter. För att komma förbi denna begränsning har Emacs ett "X"- (eXtend) kommando. Detta finns i två varianter: C-x Tecken-utvidgning. Följs av ett tecken. M-x Namngiven kommandoutvidgning. Följs av ett kommandonamn. Detta är kommandon som är bra att ha men används mer sällan än de kommandon du redan har lärt dig. Du har redan sett två av dem, C-x C-f för finn, och C-x C-s för spara. Ett annat exempel är kommandot för att avsluta Emacs som är C-x C-c. Var inte rädd för att förlora förändringar du har gjort. C-x C-c erbjuder dig att spara förändringar innan Emacs avslutas. C-z är kommandot för att avsluta Emacs *tillfälligt* så att du kan återvända till samma Emacs senare. På system som tillåter det kommer C-z suspendera Emacs, dvs. returnera till kommandoraden utan att avsluta Emacs. I de flesta system kan du få tillbaka Emacs med kommandot 'fg' eller '%emacs'. På system som saknar suspendering startar C-z ett skal som kör under Emacs och som ger dig chansen till att köra andra program och sedan återgå till Emacs efteråt. Den ger ingen riktig avslutning av Emacs. I detta fall återvänder man vanligtvis till Emacs med kommandot 'exit'. C-x C-c används när du skall avsluta Emacs. Det är klokt att avsluta Emacs om den har startats av ett mail-program eller andra applikationer eftersom det inte är säkert att de kan hantera suspendering av Emacs. Under normala omständigheter, om du inte har tänkt att logga ut, är det bättre att suspendera Emacs med C-z istället för att avsluta. Det finns många C-x kommandon. Här är en lista över de du har lärt dig hittills: C-x C-f Finn fil. C-x C-s Spara fil. C-x C-b Lista buffertar. C-x C-c Avsluta Emacs. C-x 1 Ta bort alla utom ett fönster. C-x u Ångra. Namngivna utvidgade kommandon är kommandon som används mycket sällan eller bara i vissa lägen. Ett exempel på ett sådant kommando är replace-string, som globalt ersätter en teckensträng med en annan. När du skriver M-x kommer Emacs visa en prompt nederst i skärmbilden med M-x där du skall skriva in kommandot du önskar att köra, i det här fallet "replace-string". Det är bara att skriva "repl s" och Emacs kommer då att fylla i kommandonamnet. ( är tabulatortangenten, som vanligtvis finns över CapsLock- eller skifttangenten nära den vänstra kanten på tangentbordet.) Avsluta kommandot med . Kommandot replace-string kräver två argument, teckensträngen som skall ersättas och teckensträngen som den skall ersättas med. Du måste avsluta bägge argumenten med . >> Flytta markören till den blanka raden två rader under denna rad. Skriv M-x repl sförändradändrad. Lägg märke till hur den här raden har blivit förändrad. Du har ersatt ordet f-ö-r-ä-n-d-r-a-d med "ändrad" på alla platser där ordet förekom, från markören och nedåt. * SPARAUTOMATIK --------------- När du har gjort förändringar i en fil men inte sparat den, så kommer ändringarna att gå förlorade om maskinen kraschar. Som ett skydd mot detta sparar Emacs periodiskt ändringarna i en autosparfil för varje fil du redigerar. Denna fil har ett # i början och slutet av filnamnet. Om du till exempel har en fil med namnet "hej.c" så kommer namnet på autosparfilen bli "#hej.c#". När du sparar filen på vanlig sätt kommer Emacs radera autosparfilen. Om maskinen kraschar kan du återfå dina automatiskt sparade ändringar genom att finna filen på vanlig sätt (filen du redigerade, inte autosparfilen) och skriva M-x recover-file. När Emacs vill ha bekräftelse svarar du yes för att återställa filen. * EKOOMRÅDE ----------- Om Emacs ser att du skriver kommandon långsamt så kommer de att visas på den nedersta raden i skärmbilden i ett område som kallas "ekoområde" (echo area). Detta område innehåller den nedersta raden på skärmbilden. * LÄGESRADEN ------------ Raden precis över ekoområdet kallas "lägesrad" (modeline). Den ser ungefär ut så här: --:** TUTORIAL (Fundamental)--L670--58%---------------- Raden innehåller information om Emacs och texten du redigerar. Du vet redan vad filnamnet betyder, det är den fil du har funnit. -NN%-- visar den aktuella positionen i texten, dvs. NN procent av texten befinner sig över toppen av skärmbilden. Om toppen av filen är i skärmbilden kommer det stå --Top-- istället för --00%-- och om slutet av filen är i skärmbilden kommer det stå --Bot--. Om du ser på en fil där hela texten passar in på en sida kommer det stå --All--. Bokstaven L följd av siffror anger positionen på ett annat sätt. Siffrorna visar vilken rad som markören befinner sig på. Stjärnorna nära början av raden visar att det har skett förändringar i filen sedan den sist blev sparad. När du precis har öppnat en fil kommer det inte stå något här, bara minustecken. Den del av lägesraden som står inom parentes visar vilket redigeringsläge (mode) du använder. Standardläget är "Fundamental", som du använder nu. Det är ett exempel på ett huvudläge (major mode). Emacs har många olika huvudlägen. Några av dem är gjorda för redigering av olika programmeringsspråk eller typer av text, till exempel Lisp mode och Text mode. Det kan bara vara ett huvudläge åt gången och lägesnamnet står alltid där det står Fundamental nu. Varje huvudläge gör att en del kommandon uppför sig annorlunda. Det finns till exempel kommandon för att sätta in kommentarer i programkod och eftersom varje programmeringsspråk har sitt sätt att skriva kommentarer på så måste de olika huvudlägena sätta in dessa kommentarer på olika sätt. Varje huvudläge namnger ett utvidgat kommando som används för att byte till det läget. Till exempel är M-x fundamental-mode kommandot för att byta till huvudläget Fundamental. Om du skall redigera text, såsom den här filen, bör du troligen använda Text-läge. >> Skriv M-x text mode. Inget av kommandona du har lärt dig hittills förändrar Emacs i någon högre grad. Men lägg märke till att M-f och M-b nu behandlar apostrofer som en del av ord. Tidigare, i Fundamental mode, behandlade M-f och M-b apostrofer som ordavskiljare. Varje huvudläge gör vanligtvis små förändringar som denna och de flesta kommandon gör samma sak i varje huvudläge, de fungerar bara lite annorlunda. För att få fram dokumentationen för det läge du är i nu kan du skriva C-h m. >> Använd C-u C-v så att denna rad kommer nära toppen av skärmbilden. >> Skriv C-h m och se hur Text-läget skiljer sig från Fundamental-läget. >> Tryck q för att ta bort dokumentationen från skärmbilden. Huvudläge kallas så för att det även finns sidolägen (minor mode). Ett sidoläge ersätter inte ett huvudläge, utan modifierar det. Varje sidoläge kan stängas av och på oberoende av andra sidolägen och oberoende av huvudläget. Därför kan du använda ett sidoläge, en kombination av flera sidolägen eller inget sidoläge alls. Ett bra sidoläge, speciellt för redigering av text, är radbrytningsläget (auto-fill-mode). När detta läge är på bryter Emacs rader mellan ord automatisk när du skriver in text så att en rad blir för lång. Du kan slå på radbrytningsläget genom att skriva M-x auto fill mode. När läget är påslaget kan du slå av det igen genom att upprepa M-x auto fill mode. Om läget är avslaget slår kommandot på det och vice versa. Vi säger att kommandot "växlar läget". >> Skriv M-x auto fill mode nu. Skriv så in en rad med "asdf " tills raden delar sig. Du måste sätta in blanktecken, för Auto Fill bryter bara raden mellan ord. Marginalen är vanligtvis satt till 70 tecken men du kan ändra detta genom att använda kommandot C-x f. Antalet tecken ges till kommandot genom ett numeriskt argument. >> Skriv C-x f med ett argument på 20. (C-u 2 0 C-x f). Skriv sedan in någon text och lägg märke till att Emacs bryter rader som är längre än 20 tecken. Sätt tillbaka marginalen till 70 tecken igen, genom att använda C-x f en gång till. Om du gör förändringar mitt i en rad så kommer inte sidoläget Auto Fill att kunna omformattera raderna för dig. För att göra detta kan du trycka M-q med markören inne i det avsnittet du önskar att omformatera. >> Flytta markören in i föregående stycke och tryck M-q. * SÖKNING --------- Emacs kan söka efter textsträngar (grupper med sammanhängande bokstäver eller ord) antingen framåt eller bakåt i texten. När du söker efter text kommer markören att flytta sig till nästa plats där teckensträngen uppträder. Sökmetoden i Emacs skiljer sig lite från sökmetoder i andra redigeringsprogram genom att den är inkrementell. Detta betyder att sökandet fortgår medan du skriver in teckensträngen du skall söka efter. Kommandot för att inleda en sökning är C-s för att söka framåt och C-r för att söka bakåt. MEN VÄNTA! Prova dem inte än. När du skriver C-s kommer du lägga märke till att texten "I-search" dyker upp i eko-området. Detta säger dig att Emacs är inne i sidoläget inkrementell sökning och väntar på att du skall skriva in det du letar efter. avslutar sökandet. >> Skriv nu C-s för att starta en sökning. Skriv nu långsamt, en bokstav i taget, ordet 'markör', och gör en paus efter varje gång du skriver en bokstav så att du ser vad som sker med markören. Nu har du sökt efter ordet "markör" en gång. >> Skriv C-s en gång till för att söka efter nästa förekomst av ordet "markör". >> Tryck nu på fyra gånger och se hur markören flyttar sig >> Tryck för att avsluta sökandet. Såg du vad som hände? Under inkrementell sökning försöker Emacs att gå till den första förekomsten av texten som du har skrivit så långt, och markerar träffen så att du ser var den är. För att gå till nästa förekomst av ordet 'markör' är det bara att trycka C-s en gång till. Om det inte finns flera förekomster kommer Emacs att pipa och meddela att sökandet har misslyckats. C-g avbryter också sökandet. Observera: På vissa system gör C-s att skärmen låser sig. Detta tyder på att systemets flödeskontroll har fångat upp C-s och inte skickat den vidare till Emacs. För att fortsätta måste du trycka C-q. Se i så fall avsnittet "Spontaneous Entry to Incremental Search" i Emacs-manualen för råd om hur detta kan undvikas. Om du är inne i en inkrementell sökning och trycker kommer du lägga märke till att den sista bokstaven i söksträngen blir raderad och sökandet hoppar tillbaka till en tidigare förekomst. Om du till exempel skriver "m" för att söka efter den första förekomsten av "m", och sedan trycker "a" så kommer markören flytta sig till första förekomsten av "ma". Tryck nu . Detta avlägsnar "a" från söksträngen, och markören flyttar sig tillbaka till den första förekomsten av "m". Om du är mitt i en sökning och trycker ett KONTROLL- eller META-tecken så avbryts sökandet. Undantag är tecken som används under sökningen, så som C-s och C-r. C-s startar en sökning som letar efter varje förekomst av söksträngen EFTER markörspositionen. Om du skall söka efter en sträng tidigare i texten måste du använda C-r. Allt vi har sagt om C-s gäller också för C-r, bortsett från att riktningen på sökningen är den omvända. * FLERA FÖNSTER --------------- En av egenskaperna hos Emacs är att den kan visa mera än en buffert på skärmen samtidig. >> Flytta markören till den här raden och tryck C-u 0 C-l (alltså KONTROLL-L, inte KONTROLL-1). >> Skriv nu C-x 2, som leder till att skärmen delas i två fönster. Bägge fönstren visar den här vägledningen. Markören står i det övre fönstret. >> Skriv C-M-v för att rulla det nedre fönstret. (Om du inte har META-tangenten trycker du ESC C-v.) >> Skriv C-x o (o för other) för att flytta markören till det nedre fönstret. >> Använd C-v och M-v i det nedre fönstret för att flytta upp och ned i texten. Fortsätt att läsa den här texten i det övre fönstret. >> Skriv C-x o igen för att flytta markören tillbaka till det övre fönstret. Markören i det övre fönstret står på samma plats som det gjorde när du lämnade det. Du kan fortsätta att använda C-x o för att byta mellan de två fönstren. Vart och ett av fönstren har sin egen markörposition men det är bara ett av fönstren som visar den. Alla redigeringskommandon fungerar i det fönster där markören är synlig. Vi kallar detta fönster för det valda fönstret (selected window). Kommandot C-M-v är bra när du redigerar text i ett fönster och använder det andra fönstret för referenser. Då kan du kan ha markören i samma fönster hela tiden och du kan använda C-M-v för att flytta dig i det andra fönstret. C-M-v är ett exempel på en KONTROLL-META-kombination. Om du har META-tangenten håller du både KONTROLL och META nedtryckt samtidigt som du trycker v. Det har ingen betydelse vilken av tangenterna KONTROLL och META som trycks först, för bägge fungerar så att de "modifierar" de andra tangenterna du trycker. Om du inte har META-tangenten och använder ESC istället är ordningsföljden viktig. Du måste trycka ESC följt av KONTROLL-v, KONTROLL-ESC v fungerar inte. Det är för att ESC är ett tecken i sig och inte en äkta "modifierare". >> Skriv C-x 1 i det övre fönstret för att bli kvitt det nedre fönstret. Om du hade skrivit C-x 1 i det nedre fönstret skulle det övre ha försvunnit. Tänk på detta kommando som "Behåll bara ett fönster, det som markören står i." Du måste inte ha samma buffert i bägge fönstren. Du kan använda C-x C-f för att finna en ny fil i ett av fönstren samtidigt som det andra fönstret förblir oförändrat. Du kommer att märka att fönstren är helt oberoende. Här är ett annat sätt att använda två fönster till att visa två olika filer: >> Skriv C-x 4 C-f följt av ett filnamn. Avsluta med . Den nya filen kommer då att dyka upp i det nedre fönstret. Markören flyttats också dit. >> Skriv C-x o för att gå tillbaka till det övre fönstret och C-x 1 för att bli kvitt det nedre igen. * REKURSIVA REDIGERINGSNIVÅER ----------------------------- Ibland kan du hamna i något som kallas "rekursiv redigering" (recursive editing level). Detta indikeras med hakparenteser runt huvudläget i lägesraden. Till exempel kan det stå [(Fundamental)] istället för (Fundamental). För att komma ur rekursiv redigering trycker du ESC ESC ESC. Detta är ett generellt brytkommando. Du kan också använda det för att bli kvitt extra fönster och för att komma ut ur minibufferten. >> Skriv M-x för att komma in i minibufferten. Skriv så ESC ESC ESC för att komma ut. Du kan inte använda C-g för att komma ut ur rekursiv redigering. Detta är för att C-g används för att avbryta kommandon och argument under rekursiv redigering. * MER HJÄLP ----------- I denna vägledning har vi försökt inkludera precis så mycket information att du kan börja använda Emacs. Det finns så många möjligheter i Emacs att det skulle vara omöjligt att förklara alla här. Men du VILL säkert lära dig mer om Emacs eftersom den har många goda egenskaper. Emacs tillhandahåller kommandon för att läsa all dokumentation. Dessa hjälpkommandon startas med teckenkombinationen C-h. För att använda hjälpen skriver du C-h följt av ett tecken för den hjälp du behöver. Om du verkligen är helt villrådig kan du trycka C-h ? för att Emacs skall visa vilken hjälp som finns tillgänglig. Om du har skrivit C-h och bestämmer dig för att du inte behöver ha någon hjälp kan du trycka C-g för att avbryta. (På vissa platser är C-h omkonfigurerad. Det är normalt ingen bra ide´, så du kan på goda grunder klaga hos systemadministratören. Under tiden, om C-h inte visar ett hjälpmeddelande längst ner på skärmen, kan du i stället försöka med funktionstangenten F1 eller M-x help.) Den mest grundläggande hjälp-funktionen är C-h c. Skriv C-h, ett "c" och en knappsekvens. Emacs ger då en beskrivning av kommandot. >> Skriv C-h c C-p. Meddelandet skall då bli något i stil med C-p runs the command previous-line Detta ger ett funktionsnamn. Funktionsnamnen används huvudsakligen för att specialanpassa och utvidga Emacs. Men eftersom funktionerna har beskrivande namn kan de också fungera som en enkel dokumentation, tillräckligt för att påminna dig om kommandon du redan lärt dig. Flerteckenskommandon, så som C-x C-s och (om du inte har META, EDIT eller ALT tangenten) v, är också tillåtna efter C-h c. För att få mer information om ett kommando kan du använda C-h k istället för C-h c. >> Skriv C-h k C-p. Detta kommer visa funktionens dokumentation och namn i ett eget fönster. För att avsluta hjälpfönstret kan du trycka q. Du behöver inte göra det omedelbart. Du kan editera med hjälptexten som stöd för att först senare ta bort fönstret med q. Här är fler varianter på C-h: C-h f Beskriv en funktion. Du skriver in funktionsnamnet. >> Prova att skriva C-h f previous-line. Detta ger den information Emacs har om funktionen som implementerar kommandot C-p. C-h a Apropos. Listar alla funktioner och variabler som innehåller söksträngen. Kommandon som startas med M-x markeras med en stjärna (*) till vänster om funktionsnamnet. >> Skriv C-h a newline. Detta ger en lista över alla funktioner och variabler där "newline" ingår i namnet. Du kan trycka eller klicka med den mellersta musknappen för att hitta mer information om en funktion eller variabel. Tryck q för att avsluta. * TILL SIST ----------- Tänk på att använda C-x C-c för att avsluta Emacs permanent. För att tillfälligt gå till ett skal, så att du senare kan komma tillbaka igen, använd C-z. (Under X kommer detta att minimera Emacs.) Denna vägledningen är avsedd för nya användare, om det är något som är oklart duger det inte att sitta och tycka synd om sig själv -- Skicka ett mail och klaga! * KOPIERING ----------- Denna vägledning härstammar från en hel rad Emacs-vägledningar och den första skrevs av Stuart Cracraft för den ursprungliga Emacs. Ben Wing uppdaterade vägledningen för X Windows. Martin Buchholz och Hrvoje Niksic lade till mer ändringar för XEmacs och Mats Lidell översatte den till Svenska. This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: Copyright (c) 1985, 1996 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them. The conditions for copying Emacs itself are more complex, but in the same spirit. Please read the file COPYING and then do give copies of GNU Emacs to your friends. Help stamp out software obstructionism ("ownership") by using, writing, and sharing free software! xemacs-21.4.22/etc/TUTORIAL.sl0000644000175000017500000012454010343736276013637 0ustar acsacsCopyright (c) 1985,96,97 Free Software Foundation, Inc; See end for conditions. Emacs. Prvo berilo. Ukazi v Emacsu v splo¹nem vkljuèujejo tipki CONTROL (vèasih oznaèeni CTRL ali CTL) in META (vèasih oznaèena EDIT ali ALT). Namesto, da bi ju vedno izpisali s celim imenom, bomo uporabili naslednji okraj¹avi: C- pomeni, da moramo dr¾ati pritisnjeno tipko CONTROL, ko vtipkamo znak . Oznaka C-f tako pomeni: dr¾imo pritisnjeno tipko CONTROL in pritisnemo tipko f. M- pomeni, da moramo dr¾ati pritisnjeno tipko META, EDIT ali ALT, ko vtipkamo znak . Èe na tipkovnici ni tipk META, EDIT ali ALT, pritisnemo tipko ESC, jo spustimo in zatem pritisnemo tipko . Tipko ESC bomo oznaèevali z . Pomembno: Emacs zapustimo z ukazom C-x C-c (dva znaka). V uèbeniku so vaje, s katerimi preskusite nove ukaze. Oznaèujeta jih znaka ,>>` ob levem robu. Primer: <> >> Vtipkajte zdaj ukaz C-v (View next screen, Prika¾i naslednji zaslon), da se premaknete na naslednji zaslon (kar poskusite, pritisnite hkrati kontrolno tipko in V). Od zdaj naprej boste morali to napraviti sami vsakiè, ko pridete do konca zaslona. Ste opazili, da sta se dve vrstici s prej¹njega zaslona ponovili? Ta kontinuiteta olaj¹a branje pri skakanju s strani na stran. Prva stvar, ki si jo morate zapomniti, je, kako se premikate po datoteki. Zdaj ¾e veste, da se premaknete za cel zaslon naprej z ukazom C-v. Za cel zaslon nazaj pa se premaknete z ukazom M-v (pritisnite tipko META in jo dr¾ite ter pritisnite tipko v, ali pa pritisnite in spustite ter zatem pritisnite tipko v, èe tipke META, EDIT ali ALT na va¹i tipkovnici ni). >> Nekajkrat pritisnite M-v in C-v, da vidite, kako ukaza delujeta. * POVZETEK ---------- Za pregled celega zaslona besedila so uporabni naslednji ukazi: C-v Premik se za cel zaslon naprej M-v Premik se za cel zaslon nazaj C-l Cel zaslon premaknemo tako, da je zdaj po vertikali centriran okoli besedila, kjer se nahaja kazalèek (znak v C-l je èrka L, ne ¹tevka 1) >> Poi¹èite kazalèek na zaslonu in si zapomnite besedilo okoli njega. Vtipkajte C-l. Ponovno poi¹èite kazalèek. Besedilo okoli njega je ostalo isto. * PREMIKANJE KAZALÈKA --------------------- Premiki za celo stran naprej in nazaj so sicer uporabni, ampak kako pa pridemo do izbranega mesta na zaslonu? Naèinov je veè. Najosnovnej¹i je uporaba ukazov C-p, C-b, C-f in C-n. Ti po vrsti premaknejo kazalèek v prej¹njo vrstico, znak nazaj, znak naprej, in v naslednjo vrstico. Grafièno prikazano: prej¹nja vrstica, C-p : : nazaj, C-b .... trenutni polo¾aj kazalèka .... naprej, C-f : : naslednja vrstica, C-n >> S pritiski na C-n ali C-p premaknite kazalèek v sredinsko vrstico na diagramu zgoraj. Zatem pritisnite C-l. S tem diagram postavite na sredino zaslona. V angle¹èini ima izbor tipk nazoren pomen. P kot ,previous` (prej¹nji), N kot ,next` (naslednji), B kot ,backward` (nazaj) in F kot ,forward` (naprej). To so osnovni ukazi za premikanje kazalèka in uporabljali jih boste VES ÈAS. Èim prej se jih nauèite, tem bolje. >> Nekajkrat pritisnite C-n, da pride kazalèek do te vrstice. >> Z nekaj C-f se pomaknite na desno na sredo vrstice, nato pa nekajkrat pritisnite C-p. Opazujte, kaj se dogaja s kazalèkom na sredini vrstice. Vsaka vrstice v besedilu je zakljuèena z znakom za novo vrstico (angl. Newline). Ta loèuje vrstico v besedilu od naslednje. Tudi zadnja vrstica v datoteki mora biti zaljuèena z znakom za novo vrstico (èeprav tega Emacs ne zahteva). >> Poskusite ukaz C-b, ko je kazalèek na zaèetku vrstice. Kazalèek se mora premakniti na konec prej¹nje vrstice. To je zato, ker se je ravnokar premaknil prek znaka za konec vrstice. Ukaz C-f premika kazalèek prek znaka za novo vrstico enako kot C-b. >> Poskusite ¹e nekajkrat pritisniti C-b, da dobite obèutek za premikanje kazalèka. Potem nekajkrat poskusite C-f, da pridete do konca vrstice. ©e enkrat pritisnite C-f, da skoèite v naslednjo vrstico. Ko s kazalèkom dose¾ete zgornji ali spodnji rob zaslona, se besedilo toliko premakne, da kazalèek ostane na zaslonu. V angle¹èini se temu pravi ,,scrolling``. To omogoèa, da lahko premaknemo kazalèek na katerokoli mesto v besedilu, a vseeno ostanemo na zaslonu. >> Poskusite kazalèek pripeljati s C-n èisto do dna zaslona in si oglejte, kaj se zgodi. Èe se vam zdi premikanje po en znak prepoèasno, se lahko premikate za celo besedo. M-f (Meta-f) premakne kazalèek za eno besedo naprej, M-b pa za besedo nazaj. >> Poskusite nekajkrat M-f in M-b. Èe je kazalèek sredi besede, ga M-f prestavi na konec besede. Èe je v belini med besedami, ga M-f premakne na konec naslednje besede. M-b deluje podobno, a v nasprotni smeri. >> Nekajkrat poskusite M-f in M-b, vmes pa ¹e nekaj C-f in C-b. Opazujte uèinke M-f in M-b, ko je kazalèek sredi besede ali med besedami. Ste opazili paralelo med C-f in C-b na eni strani ter M-f in M-b na drugi? V Emacsu se dostikrat ukazi Meta nana¹ajo na operacije nad enotami jezika (besede, stavki, odstavki), medtem ko se ukazi Control nana¹ajo na operacije, neodvisne od zvrsti besedila (znaki, vrstice ipd.). Podobna zveza je tudi med vrsticami in stavki: ukaza C-a in C-e premakneta kazalèek na zaèetek oz. konec vrstice, M-a in M-e pa na zaèetek oz. konec stavka. >> Poskusite nekaj ukazov C-a, potem pa nekaj ukazov C-e. Poskusite nekaj ukazov M-a, potem pa nekaj ukazov M-e. Ste opazili, da ponovljeni C-a ne napravijo niè, ponovljeni M-a pa se premikajo naprej? Èeprav se ne obna¹ata enako, pa je vendar obna¹anje enega in drugega po svoje naravno. Polo¾aju kazalèka na zaslonu pravimo tudi ,,point``, toèka. Parafrazirano: kazalèek ka¾e na zaslonu, kje je toèka v besedilu. Povzetek preprostih ukazov za premikanje kazalèka, vkljuèno s premiki po besedo in stavek: C-f Premik za znak naprej C-b Premik za znak nazaj M-f Premik za besedo naprej M-b Premik za besedo nazaj C-n Premik v naslednjo vrstico C-p Premik v prej¹njo vrstico C-a Premik na zaèetek vrstice C-e Premik na konec vrstice M-a Premik na zaèetek stavka M-e Premik na konec stavka >> Za vajo nekajkrat poskusite vsakega od teh ukazov. To so najpogosteje uporabljani ukazi. ©e dva pomembna ukaza za premikanje kazalèka sta M-< (Meta-manj¹i od), ki ga premakne na zaèetek datoteke, in M-> (Meta-veèji od), ki ga premakne na konec datoteke. Na ameri¹kih tipkovnicah najdete znak < nad vejico in morate pritisniti tipko Shift, da pridete do njega. Z ukazom M-< je enako - prav tako morate pritisniti tipko Shift, sicer moste izvedli drug ukaz, Meta-vejica. Na na¹ih tipkovnicah sta oba znaka na isti tipko, in za ukaz M-> morate pritisniti ¹e tipko Shift. >> Poskusite zdaj M-<, skok na zaèetek tega uèbenika. Potem se vrnite nazaj z zaporednimi C-v. >> Poskusite zdaj M->, skok na konec tega uèbenika. Potem se vrnite nazaj z zaporednimi M-v. Èe ima va¹a tipkovnica kurzorske tipke, lahko premikate kazalèek po zaslonu tudi z njimi. Vseeno priporoèamo, da se privadite ukazov C-b, C-f, C-n in C-p, in to iz treh razlogov. Prviè, delujejo na èisto vseh terminalih. Drugiè, z nekaj prakse v Emacsu boste opazili, da je tipkanje ukazov s Control hitrej¹e od tipkanja s kurzorskimi tipkami, ker ni treba ves èas premikati desnice s tipkovnice na kurzorske tipke in nazaj. In tretjiè, ko se enkrat navadite teh ukazov s Control, se boste enostavneje nauèili tudi bolj zapletenih ukazov za premikanje kazalèka. Veèini ukazov v Emacsu lahko podamo ¹tevilèni argument; najveèkrat ta pove, kolikokrat zapovrstjo naj se ukaz izvede. Veèkratno ponovitev ukaza izvedemo tako, da najprej vtipkamo C-u, zatem ¹tevilo, kolikokrat naj se ukaz ponovi, in nazadnje ¾eljeni ukaz. Èe ima va¹a tipkovnica tipko META (ali EDIT ali ALT), lahko izpustite ukaz C-u in namesto tega vtipkate ¹tevilo ponovitev, medtem ko dr¾ite pritisnjeno tipko META. Druga metoda je sicer kraj¹a, priporoèamo pa prvo, ker deluje na vseh terminalih. Tak¹en ¹tevilèni argument je ,,prefiksni`` argument, ker vnesemo argument pred ukazom, na katerega se nana¹a. Primer: C-u 8 C-f premakne kazalèek za osem znakov naprej. >> Poskusite s primernim argumentom za ¹tevilo ponovitev ukaza C-n ali C-p priti èim bli¾e tej vrstici v enem samem skoku. Veèina ukazov, ne pa vsi, uporablja ¹tevilèni argument kot ¹tevilo ponovitev ukaza. Nekateri ukazi (nobeden od tistih, ki smo si jih ogledali do zdaj) ga uporabljajo kot stikalo: s podanim prefiksnim argumentom napravi ukaz nekaj drugega kot obièajno. Ukaza C-v in M-v sta tudi izjemi, a drugaèni. Èe jima podamo argument, premakneta zaslon za navedeno ¹tevilo vrstic, ne pa zaslonov. Ukaz C-u 4 C-v, na primer, premakne zaslon navzgor za 4 vrstice. >> Poskusite zdaj C-u 8 C-v To bi moralo zaslon premakniti navzgor za osem vrstic. Èe bi ga radi premaknili nazaj, poskusite M-v z istim argumentom. Èe uporabljate X Windows, imate verjetno ob levem robu Emacsovega okna navpièno pravokotno ploskev, imenovano drsnik. Pogled na besedilo lahko premikate tudi tako, da z mi¹ko kliknete na drsnik. >> Postavite kazalec na vrh oznaèenega obmoèja na drsniku in pritisnite srednji gumb na mi¹ki. To bi moralo premakniti besedilo na mesto, doloèeno s tem, kako visoko ali nizko na drsnik ste kliknili. >> Medtem ko dr¾ite srednji gumb pritisnjen, premikajte mi¹ko gor in dol. Vidite, kako se premika besedilo v Emacsovem oknu, ko premikate mi¹ko? * ÈE SE EMACS OBESI ------------------- Èe se Emacs preneha odzivati na va¹e ukaze, ga lahko varno prekinete z ukazom C-g. Z njim lahko prekinete ukaze, za katere bi trajalo predolgo, da bi se izvedli. Isti ukaz, C-g, lahko uporabite tudi, da preklièete ¹tevilèni argument, ali pa zaèetek ukaza, ki ga ne ¾elite izvesti. >> Vtipkajte C-u 100, s èimer ste izbrali ¹tevilèni argument 100, zatem pa vtipkajte C-g. Vtipkajte zdaj C-f. Kazalèek se je premaknil le za en znak, ker ste ¹tevilèni argument vmes preklicali s C-g. Tudi èe ste po nesreèi vtipkali , se ga lahko znebite s C-g. * ONEMOGOÈENI UKAZI ------------------- Nekaj ukazov v Emacsu je namenoma ,,onemogoèenih``, da bi jih zaèetniki ne izvedli po nesreèi. Èe vtipkate tak onemogoèen ukaz, se bo na zaslonu pojavilo novo okno z obvestilom, kateri ukaz ste sku¹ali izvesti, in vas vpra¹alo, èe ga res ¾elite izvesti. Èe v resnici ¾elite poskusiti ukaz, pritisnite preslednico kot odgovor na vpra¹anje. Normalno verjetno ukaza ne ¾elite izvesti, zato na vpra¹anje odgovorite z ,n`. >> Vtipkajte : (ki je onemogoèen ukaz), zatem odgovorite n. * OKNA ------ Emacs lahko prika¾e veè oken in v vsakem svoje besedilo. Kasneje bomo razlo¾ili, kako uporabljamo veè oken hkrati. Zaenkrat bomo povedali le, kako se znebite dodatnih oken, ki jih lahko odpre vgrajena pomoè ali pa izpis kak¹nega drugega programa. Preprosto je: C-x 1 Eno okno (torej, zaprimo vsa ostala). To je Ctrl-x, ki mu sledi ¹tevka 1. Ukaz C-x 1 raztegne èez cel zaslon okno, v katerem se nahaja kazalèek, ostala pa zapre. >> Premaknite kazalèek do te vrstice in vtipkajte C-u 0 C-l >> Vtipkajte Ctrl-h k Ctrl-f. Vidite, kako se je to okno skrèilo in odstopilo prostor oknu, ki pojasnjuje ukaz Ctrl-f? >> Vtipkajte C-x 1 in spodnje okno se bo zaprlo. Za razliko od ukazov, ki smo se jih nauèili do zdaj, je ta ukaz sestavljen iz dveh znakov. Zaène se z znakom Control-x. Cela vrsta ukazov se zaène enako, in mnogi od njih zadevajo delo z datotekami, delovnimi podroèji in podobnim. Vsem tem ukazom je skupno, da se zaènejo s Control-x, ki mu sledi ¹e en, dva ali trije znaki. * VRIVANJE IN BRISANJE ---------------------- Èe ¾elite v obstojeèe besedilo vriniti novo, preprosto premaknite kazalèek na ¾eljeno mesto in zaènite tipkati. Znake, ki jih lahko vidite, na primer A, 7, * in podobno, razume Emacs kot del besedila in jih takoj vrine. S pritiskom na Return (ali Enter) vrinete znak za skok v novo vrstico. Zadnji vtipkani znak lahko izbri¹ete s pritiskom na tipko . Na nekaterih tipkovnicah je oznaèena z . Ponekod (ne pa povsod!) slu¾i za brisanje tipka . Splo¹no pobri¹e znak neposredno pred trenutnim polo¾ajem kazalèka. >> Vtipkajte zdaj nekaj znakov in jih zatem s tipko pobri¹ite. Niè naj vas ne skrbi, èe se je ta vrstica spremenila. Izvirnika tega uèbenika ne boste pokvarili -- tole je samo va¹a osebna kopija. Ko vrstica postane predolga za zaslon, se ,,nadaljuje`` v naslednji vrstici na zaslonu. Obrnjena po¹evnica (znak ,\`) ob desnem robu oznaèuje vrstico, ki se nadaljuje v naslednji zaslonski vrstici. >> Zdaj zaènite tipkati besedilo, dokler ne dose¾ete desnega roba, in ¹e naprej. Opazili boste, da se pojavi znak za nadaljevanje. >> S tipko pobri¹ite toliko znakov, da vrstica ne sega veè èez ¹irino zaslona. Znak za nadaljevanje v naslednji vrstici je izginil. Znak za novo vrstico lahko pobri¹emo enako kot vsak drug znak. S tem, ko pobri¹emo znak za novo vrstico, zdru¾imo vrstici v eno samo. Èe bo nova vrstica predolga, da bi cela pri¹la na zaslon, bo razdeljena v veè zaslonskih vrstic. >> Premaknite kazalèek na zaèetek vrstice in pritisnite . To zdru¾i vrstico s prej¹njo. >> Pritisnite . S tem ste ponovno vrinili znak za skok v novo vrstico, ki ste ga malo prej zbrisali. Spomnimo se, da lahko za veèino ukazov v Emacsu doloèimo, naj se izvedejo veèkrat zaporedoma; to vkljuèuje tudi vnos teksta. Ponovitev obièajnega znaka ga veèkrat vrine v besedilo. >> Poskusite zdaj tole: da vnesete osem zvezdic, vtipkajte C-u 8 * Zdaj ste se nauèili najpreprostej¹i naèin, da v Emacsu nekaj natipkate in popravite. Bri¹ete lahko tudi besede ali vrstice. Tu je povzetek ukazov za brisanje: pobri¹e znak tik pred kazalèkom (levo od oznake za kazalèek) C-d pobri¹e znak tik za kazalèkom (,pod` oznako za kazalèek) M- pobri¹e besedo tik pred kazalèkom M-d pobri¹e besedo tik za kazalèkom C-k zavr¾e besedilo desno od kazalèka do konca vrstice M-k zavr¾e besedilo od polo¾aja kazalèka do konca stavka Èrka ,d` je iz angle¹ke besede ,delete` (pobrisati), èrka ,k` pa iz besede ,kill` (pobiti). Ste opazili, da in C-d na eni, ter M- in M-d na drugi strani nadaljujeta paralelo, ki sta jo zaèela C-f in M-f ( pravzaprav ni kontrolni znak, kar pa naj nas ne moti). C-k in M-k sta v enakem sorodu s C-e in M-e: prvi deluje na vrstice, drugi na stavke. Kadarkoli pobri¹ete kaj veè kot en sam znak naenkrat, si Emacs za vsak primer zapomni, kaj ste zavrgli, in lahko zavr¾eno vrnete (angl. ,,yank`` -- potegniti). Besedilo, ki smo ga zavrgli, lahko vrinemo nazaj na isto mesto ali kam drugam. Lahko ga vrinemo tudi veèkrat, in tako napravimo veè kopij. Ukaz za vraèanje zavr¾enega besedila je C-y. Razlika med tem, èe zavr¾ete cel odstavek besedila (angl. ,,kill``, pobiti) ali pa èe pobri¹ete znak (angl. ,,delete``), je ta, da lahko prvega vrnete nazaj z ukazom C-y, drugega pa ne. Na splo¹no ukazi, ki lahko povzroèijo veliko ¹kode (pobri¹ejo veliko besedila), shranijo pobrisano besedilo; tisti, ki pobri¹ejo samo posamezni znak, ali samo prazne vrstice in presledke, pa ne. >> Postavite kazalèek na zaèetek neprazne vrstice. Pritisnite C-k, da pobri¹ete vsebino vrstice. >> ©e enkrat pritisnite C-k. To pobri¹e ¹e znak za novo vrstico. Ste opazili, da prvi C-k pobri¹e vsebino vrstice, naslednji C-k pa ¹e vrstici samo, s èimer se vse besedilo pod biv¹o vrstico premakne za eno vrstico navzgor? Ukaz C-k obravnava ¹tevilèni argument malo drugaèe: pobri¹e toliko in toliko vrstic z vsebinami vred. To ni zgolj ponovitev. C-u 2 C-k pobri¹e dve polni vrstici besedila, kar je nekaj drugega, kot èe dvakrat vtipkate C-k. Besedilo, ki ste ga prej pobrisali, je shranjeno, in ga lahko povrnete tja, kjer je trenutno kazalèek, z ukazom C-y. >> Poskusite z ukazom C-y povrniti pobrisano besedilo. Ukaz C-y si predstavljajte, kot da potegnete nazaj nekaj, kar vam je nekdo odnesel. Èe ste uporabili veè zaporednih ukazov C-k, je vse pobrisano besedilo shranjeno skupaj, in en sam C-y bo vrnil vse tako pobrisane vrstice. >> Poskusite, nekajkrat vtipkajte C-k. Zdaj pa vrnimo pobrisano besedilo: >> Vtipkajte C-y. Zdaj pa premaknite kazalèek za nekaj vrstic navzdol in ¹e enkrat vtipkajte C-y. Vidite zdaj, kako se kopira dele besedila? Kaj pa, èe ste pobrisali nekaj besedila, ki bi ga radi vrnili, vendar ste za iskanim odlomkom pobrisali ¹e nekaj? C-y vrne samo nazadnje pobrisan odlomek. Vendar tudi prej¹nje besedilo ni izgubljeno. Do njega lahko pridete z ukazom M-y. Ko ste vrnili nazadnje zbrisano besedilo s C-y, pritisnite M-y, ki ga zamenja s predzanje pobrisanim besedilom. Vsak naslednji M-y prika¾e ¹e eno prej. Ko ste konèno pri¹li do iskanega besedila, ni treba napraviti niè posebnega, da bi ga obdr¾ali. Preprosto nadaljujte z urejanjem, in vrnjeno besedilo bo ostalo, kamor ste ga odlo¾ili. Èe pritisnete M-y dovolj velikokrat, se boste vrnili na zaèete, torej spet na zadnje pobrisano besedilo. >> Pobri¹ite vrstico, premaknite se nekam drugam, in pobri¹ite ¹e eno vrstico. Z ukazom C-y dobite nazaj to drugo vrstico. Z ukazom M-y pa jo zamenjate s prvo vrstico. Ponovite ukaz M-y ¹e nekajkrat in si oglejte, kaj dobite na zaslon. Ponavljajte ga, dokler se ne prika¾e ponovno nazadnje pobrisana vrstica, in ¹e naprej. Èe ¾elite, lahko tudi ukazu M-y podate pozitivno ali negativno ¹tevilo ponovitev. * PREKLIC UKAZA (UNDO) ---------------------- Èe ste besedilo spremenili, a ste se kasneje premislili, lahko besedilo vrnete v prvotno stanje z ukazom Undo, C-x u. Normalno vrne C-x u zadnjo spremembo besedila; èe ukaz ponovimo, preklièemo ¹e predzadnjo spremembo, in vsaka nadaljnja ponovitev se¾e ¹e eno spremembo globlje v zgodovino. Emacs hrani bolj ali manj celotno zgodovino na¹ih ukazov, z dvema izjemama: ukazov, ki niso napravili nobene spremembe v besedilu (npr. premik kazalèka), ne shranjuje, in zaporedje do 20 vrinjenih znakov shrani kot en sam ukaz. Slednje prihrani nekaj ukazov C-x u, ki bi jih morali vtipkati. >> Pobri¹ite to vrstico z ukazom C-k, potem jo priklièite nazaj s C-x u. C-_ je alternativni ukaz za preklic zadnjega ukaza. Deluje enako kot s C-x u, ga je pa la¾je odtipkati, èe morate ukaz ponoviti veèkrat zaporedoma. Te¾ava z ukazom C-_ je, da na nekaterih tipkovnicah ni povsem oèitno, kako ga vtipkati, zato je podvojen ¹e kot C-x u. Na nekaterih terminalih moramo na primer vtipkati /, medtem ko dr¾imo pritisnjeno tipko CONTROL. Èe podamo ukazu C-_ ali C-x u numerièni argument, je to enako, kot èe bi ukaz roèno ponovili tolikokrat, kot pravi argument. * DATOTEKE ---------- Da bi bile spremembe v besedilu trajne, morate besedilo shraniti v datoteko. V nasprotnem primeru jih boste za vedno izgubili tisti hip, ko boste zapustili Emacs. Besedilo postavimo v datoteko tako, da na disku ,,poi¹èemo`` (angl. find) datoteko, preden zaènemo tipkati (pravimo tudi, da ,,obi¹èemo`` datoteko). Poiskati datoteko pomeni, da v Emacsu vidimo vsebino datoteke. To je bolj ali manj tako, kot da z Emacsom urejamo datoteko samo. Vendar pa spremembe ne postanejo trajne, dokler datoteke ne shranimo (angl. save) na disk. Tako imamo mo¾nost, da se izognemo temu, da bi nam na pol spremenjene datoteke le¾ale po disku, kadar tega ne ¾elimo. Ker pa Emacs ohrani izvorno datoteko pod spremenjenim imenom, lahko prvotno datoteko priklièemo nazaj celo ¹e potem, ko smo datoteko ¾e shranili na disk. V predzadnji vrstici na dnu zaslona vidite vrstico, ki se zaène in konèa z vezaji, in vsebuje niz znakov ,,--:-- TUTORIAL``. Ta del zaslona navadno vsebuje ime datoteke, ki smo jo obiskali. Zdajle je to ,,TUTORIAL``, va¹a delovna kopija uèbenika Emacsa. Ko boste poiskali kak¹no drugo datoteko, bo na tem mestu pisalo njeno ime. Posebnost ukaza za iskanje datoteke je, da moramo povedati, katero datoteko i¹èemo. Pravimo, da ukaz ,,prebere argument s terminala`` (v tem primeru je argument ime datoteke). Ko vtipkate ukaz C-x C-f (poi¹èi datoteko) vas Emacs povpra¹a po imenu datoteke. Kar vtipkate, se sproti vidi v vrstici na dnu zaslona. Temu delovnemu podroèju pravimo pogovorni vmesnik (minibuffer), kadar se uporablja za tovrstni vnos. Znotraj pogovornega vmesnika lahko uporabljate obièajne ukaze za urejanje, èe ste se na primer pri tipkanju zmotili. Sredi tipkanja imena datoteke (ali katerega koli drugega opravila v pogovornem vmesniku) lahko ukaz preklièete s C-g. >> Vtipkajte C-x C-f, zatem pa ¹e C-g. Zadnji ukaz od treh je zaprl pogovorni vmesnik in tudi preklical ukaz C-x C-f, ki je uporabljal pogovorni vmesnik. Konec z iskanjem datoteke. Ko ste dokonèali ime, ga vnesete s pritiskom na . S tem se po¾ene ukaz C-x C-f in poi¹èe iskano datoteko. Pogovorni vmesnik izgine, ko je ukaz izveden. Trenutek kasneje se vsebina datoteke pojavi na zaslonu. Zdaj lahko dopolnjujete, urejate ali kako drugaèe spreminjate vsebino. Ko ¾elite, da ostanejo spremembe trajne, izvedete ukaz: C-x C-s (shrani datoteko) Besedilo se s tem shrani iz pomnilnika raèunalnika na datoteko na disk. Ko prviè izvedete ta ukaz, se izvorna datoteka preimenuje, tako da ni izgubljena. Najdete jo pod novim imenom, ki se od starega razlikuje po tem, da ima na koncu pripet znak ,,~``. Ko je Emacs shranil datoteko, izpi¹e njeno ime. Shranjujte raje pogosteje kot ne, da v primeru, èe gre z raèunalnikom kaj narobe, ne izgubite veliko. >> Vtipkajte C-x C-s, s èimer boste shranili svojo kopijo tega uèbenika. Emacs bo v vrstici na dnu zaslona izpisal ,,Wrote ...TUTORIAL``. Opozorilo: na nekaterih sistemih bo ukaz C-x C-s zamrznil zaslon, in tako ne boste videli, da Emacs ¹e kaj izpi¹e. To je znak, da je operacijski sistem prestregel znak C-s in ga interpretiral kot znak za prekinitev toka podatkov, namesto da bi ga posredoval Emacsu. Zaslon ,,odmrznete`` z ukazom C-q. Èe je va¹ sistem eden takih, si za nasvet, kako re¹iti to nev¹eènost, oglejte razdelek ,,Spontaneous Entry to Incremental Search`` v priroèniku za Emacs. Poi¹èete lahko lahko ¾e obstojeèo datoteko, da si jo ogledate ali popravite, ali pa tudi datoteko, ki ¹e ne obstaja. To je naèin, kako z Emacsom ustvarimo novo datoteko: poi¹èite datoteko z izbranim imenom, ki bo sprva prazna, in zaènite pisati. Ko jo boste prviè shranili, bo Emacs ustvaril datoteko z vne¹enim besedilom. Od tod dalje delate na ¾e obstojeèi datoteki. * DELOVNA PODROÈJA ------------------ Tudi èe ste z ukazom C-x C-f poiskali in odprli drugo datoteko, prva ostane v Emacsu. Nanjo se vrnete tako, da jo ¹e enkrat ,,poi¹èete`` z ukazom C-x C-f. Tako imate lahko v Emacsu hkrati kar precej datotek. >> Ustvarite datoteko z imenom ,,foo`` tako, da vtipkate C-x C-f foo . Natipkajte nekaj besedila, ga po potrebi popravite, in shranite v datoteko ,,foo`` z ukazom C-x C-s. Ko ste konèali, se vrnite v uèbenik z ukazom C-x C-f TUTORIAL . Emacs hrani besedilo vsake datoteke v takoimenovanem ,,delovnem podroèju`` (angl. buffer). Ko poi¹èemo datoteko, Emacs ustvari zanjo novo delovno podroèje. Vsa obstojeèa delovna podroèja v Emacsu vidimo z ukazom: C-x C-b Seznam delovnih podroèij. >> Poskusite C-x C-b zdaj. Vidite, da ima vsako delovno podroèje svoje ime, pri nekaterih pa pi¹e tudi ime datoteke, katere vsebina se hrani v njem. Druga delovna podroèja pa ne pripadajo nobeni datoteki. Podroèje ,,*Buffer List*``, na primer, je ¾e eno takih. To delovno podroèje smo ustvarili ravnokar, ko smo pognali ukaz C-x C-b. VSAKO besedilo, ki ga vidite v katerem od Emacsovih oken, je vedno del kak¹nega delovnega podroèja. >> Z ukazom C-x 1 se znebite seznama delovnih podroèij. Èe ste spreminjali besedilo ene datoteke, potem pa poiskali drugo, to ne shrani spremeb v prvo datoteko. Te ostanejo znotraj Emacsa, na delovnem podroèju, ki pripada prvi datoteki. Ustvarjenje ali spreminjanje delovnega podroèja druge datoteke nima nobenega vpliva na podroèje prve. To je zelo uporabno, pomeni pa tudi, da potrebujemo udobno pot, da shranimo delovno podroèje prve datoteke. Nerodno bi bilo preklapljanje na prvo podroèje s C-x C-f, da bi shranili s C-x C-s. Namesto tega imamo: C-x s Shrani nekatera delovna podroèja Ukaz C-x poi¹èe delovna podroèja, katerih vsebina je bila spremenjena, odkar je bila zadnjiè shranjena na datoteko. Za vsako tako delovno podroèje C-x s vpra¹a, èe ga ¾elite shraniti. * RAZ©IRJEN NABOR UKAZOV ------------------------ ©e mnogo, mnogo je ukazov Emacsa, ki bi zaslu¾ili, da jih obesimo na razne kontrolne in meta znake. Emacs se temu izogne z ukazom X (iz angl. eXtend - raz¹iriti), ki uvede ukaz iz raz¹irjenega nabora. Dveh vrst je: C-x Znakovna raz¹iritev (angl. Character eXtend). Sledi mu en sam znak. M-x Raz¹iritev s poimenovanim ukazom. Sledi mu dolgo ime ukaza. Tudi ti ukazi so na splo¹no uporabni, ne uporabljamo pa jih tako pogosto kot tiste, ki ste se jih ¾e nauèili. Dva ukaza iz raz¹irjenega nabora ¾e poznamo: C-x C-f, s katerim poi¹èemo datoteko, in C-x C-s, s katerim datoteko shranimo. ©e en primer je ukaz, s katerim Emacsu povemo, da ¾elimo konèati z delom iz iziti iz Emacsa. Ta ukaz je C-x C-c (ne skrbite: preden konèa, Emacs ponudi, da shrani vse spremenjene datoteke). Z ukazom C-z Emacs zapustimo samo *zaèasno*, tako da lahko ob vrnitvi nadaljujemo z delom, kjer smo ostali. Na sistemih, ki to dopu¹èajo, ukaz C-z izide iz Emacsa v ukazno lupino, a ga ne konèa - èe uporabljate ukazno lupino C, se lahko vrnete z ukazom ,fg` ali splo¹neje z ukazom ,,%emacs``. Drugod ukaz C-z po¾ene sekundarno ukazno lupino, tako da lahko po¾enete kak¹en drug program in se kasneje vrnete v Emacs. V tem primeru pravzaprav Emacsa ne zapustimo. Ukaz ,,exit`` v ukazni lupini je navadno naèin, da zapremo sekundarno lupino in se vrnemo v Emacs. Ukaz C-x C-c uporabimo, èe se nameravamo odjaviti s sistema. To je tudi pravilen naèin za izhod iz Emacsa, èe je tega pognal program za delo s po¹to ali kak drug program, saj ta verjetno ne ve, kaj napraviti z zaèasno prekinjenim Emacsom. V vseh ostalih primerih pa, èe se ne nameravate odjaviti s sistema, uporabite C-z, in se vrnite v Emacs, ko bi radi spet urejali besedilo. Ukazov C-x je veliko. Zaenkrat smo spoznali naslednje: C-x C-f Poi¹èi datoteko. C-x C-s Shrani datoteko. C-x C-b Seznam delovnih podroèij. C-x C-c Konèaj Emacs. C-x u Preklic zadnjega ukaza. Poimenovani raz¹irjeni ukazi so ukazi, ki se uporabljajo ¹e bolj poredko, ali pa se uporabljajo samo v nekaterih naèinih dela. Eden takih je na primer ukaz replace-string, ki po vsem besedilu zamenja en niz znakov z drugim. Ko vtipkate M-x, se to izpi¹e v pogovornem vmesniku na dnu zaslona, Emacs pa èaka, da vtipkate ime ukaza, ki ga ¾elite priklicati; v tem primeru je to ,,replace-string``. Vtipkajte samo ,,repl s`` in Emacs bo dopolnil ime. Ukaz vnesete s pritiskom na . Ukaz replace-string potrebuje dva argumenta -- niz, ki ga ¾elite zamenjati, in niz, s katerim bi radi zamenjali prvega. Vsakega posebej vnesete in zakljuèite s pritiskom na tipko Return. >> Premaknite kazalèek na prazno vrstico dve vrstici pod to, zatem vtipkajte M-x repl szamenjalaspremenila. Opazite, kako se je ta vrstica zamenjala? Vse besede z-a-m-e-n-j-a-l-a od tod do konca besedila ste nadomestili z besedo ,,spremenila``. * AVTOMATIÈNO SHRANJEVANJE -------------------------- Spremembe v datoteki, ki jih ¹e niste shranili na disk, so izgubljene, èe medtem denimo zmanjka elektrike. Da bi vas zavaroval pred tem, Emacs periodièno avtomatièno shrani vse datoteke, ki jih urejate. Avtomatièno shranjena datoteka se od izvorne razlikuje po znaku ,#` na zaèetku in koncu imena: èe se je va¹a datoteka imenovala ,,hello.c``, se avtomatièno shranjena datoteka imenuje ,,#hello.c#``. Ko normalno shranite datoteko, avtomatièno shranjena datoteka ni veè potrebna, in Emacs jo pobri¹e. Èe res pride do izgube podatkov v pomnilniku, lahko povrnete avtomatièno shranjeno besedilo tako, da normalno poi¹èete datoteko (pravo ime datoteke, ne ime avtomatièno shranjene datoteke), zatem pa vtipkate M-x recover file. Ko vas vpra¹a za potrditev, vtipkajte yes za nadaljevanje in povrnitev avtomatièno shranjenenih podatkov. * ODZIVNO PODROÈJE ------------------ Kadar Emacs opazi, da poèasi vtipkavate ukaz, odpre v zadnji vrstici na dnu zaslona odzivno podroèje in v njem sproti prikazuje natipkano. * STATUSNA VRSTICA ------------------ Vrstica nad odzivnim podroèjem je statusna vrstica. Ta ka¾e verjetno nekaj podobnega kot: --:** TUTORIAL (Fundamental)--58%---------------------- V njej so izpisani pomembni podatki o stanju Emacsa in besedilu, ki ga urejate. Zdaj ¾e veste, kaj pomeni ime datoteke -- to je datoteka, ki ste jo poiskali. Oznaka --NN%-- pomeni, da je nad vrhom zaslona ¹e NN odstotkov celotne datoteke. Èe je zaèetek datoteke na zaslonu, bo namesto --00%-- pisalo --Top--. Podobno bo pisalo --Bot--, èe je zadnja vrstica datoteke na zaslonu. Èe je datoteka, ki jo ogledujete, tako kratka, da gre vsa na en zaslon, pa bo pisalo --All--. Zvezdice na zaèetku vrstice pomenijo, da ste datoteko ¾e spreminjali. Tik po tem, ko ste odprli ali shranili datoteko, ni nobenih zvezdic, so samo èrtice. Del statusne vrstice znotraj oklepajev vam pove, v kak¹nem naèinu dela Emacs. Privzeti naèin je osnovni naèin (Fundamental), v katerem ste sedaj. Fundamental je eden od glavnih naèinov (angl. major mode). Emacs pozna veliko razliènih glavnih naèinov. Nekateri od njih so namenjeni pisanju programov, kot na primer Lisp, ali pisanju besedil, kot npr. Text. Naenkrat je lahko aktiven le en glavni naèin, njegovo ime pa je vedno izpisano v statusni vrstici, kjer zdaj pi¹e Fundamental. Glavni naèini lahko spremenijo pomen nekaterim ukazom. Obstajajo, denimo, ukazi za pisanje komentarjev v programu, in ker ima vsak programski jezik svoje predstave o tem, kako mora komentar izgledati, mora vsak glavni naèin vnesti komentarje drugaèe. Ker je vsak glavni naèin ime raz¹irjenega ukaza, lahko tako tudi izbiramo glavni naèin. Na primer, M-x fundamental-mode vas postavi v naèin Fundamental. Èe nameravate popravljati slovensko (ali angle¹ko) besedilo, kot je na primer tole, boste verjetno izbrali tekstovni naèin (Text). >> Vtipkajte M-x text mode. Ne skrbite, noben od ukazov, ki ste se jih nauèili, se s tem ne spremeni kaj dosti. Lahko pa opazite, da Emacs zdaj jemlje opu¹èaje za dele besed, ko se premikate z M-f ali M-b. V osnovnem naèinu jih je obravnaval kot meje med besedami. Glavni naèini navadno poèenjajo majhne spremembe, kot je ta: veèina ukazov ,,opravi isti posel``, vendar pa to poènejo na razlièen naèin. Dokumentacijo o trenutno aktivnem glavnem naèinu dobite z ukazom C-h m. >> Uporabite C-u C-v enkrat ali veèkrat, toliko, da bo ta vrstica blizu vrha zaslona. >> Vtipkajte C-h m, da vidite, v èem se tekstovni naèin (Text) razlikuje od osnovnega (Fundamental). >> Vtipkajte C-x 1, da umaknete dokumentacijo z zaslona. Glavnim naèinom pravimo glavni naèini zato, ker obstajajo tudi podnaèini (angl. minor modes). Podnaèini ne nadome¹èajo glavnih naèinom, ampak le spreminjajo njihovo obna¹anje. Podnaèine lahko aktiviramo ali deaktiviramo neodvisno od glavnega naèina in neodvisno od ostalih podnaèinov. Tako lahko ne uporabljate nobenega podnaèina, en podnaèin, ali kombinacijo veèih podnaèinov. Podnaèin, ki je zelo uporaben, posebno za pisanje besedil, je Auto Fill. Ko je vklopljen, Emacs med pisanjem avtomatièno deli vrstice na presledkih med besedami, tako da vrstice niso predolge. Vklopite ga lahko z ukazom M-x auto fill mode. Ko je vklopljen, ga lahko izklopite z istim ukazom, M-x auto fill mode. Z istim ukazom torej preklapljamo (angl. toggle) med vklopljenim in izklopljenim stanjem. >> Vtipkajte zdaj M-x auto fill mode. Potem zaènite tipkati "asdf asdkl sdjf sdjkf"... dokler ne opazite, da je Emacs razbil vrstico na dve. Med tipkanjem mora biti dovolj presledkov, saj Auto Fill prelamlja vrstice samo na presledkih. ©irina besedila je navadno postavljena na 70 znakov, kar pa lahko spremenite z ukazom C-x f. Novo ¹irino morate podati kot ¹tevilèni argument. >> Vtipkajte C-x f in argument 20. (C-u 2 0 C-x f). Zatem vtipkajte nekaj besedila in poglejte, èe bo Emacs res delil vrstice pri 20 znakih. Potem z ukazom C-x f postavite mejo nazaj na 70. Auto Fill deluje le, kadar pi¹ete novo besedilo, ne pa, kadar popravljate ¾e napisan odstavek. Tak odstavek lahko poravnate tako, da kazalèek premaknete nekam znotraj odstavka in uka¾ete M-q (Meta-q). >> Premaknite kazalèek v prej¹nji odstavek in izvedite M-q. * ISKANJE --------- Emacs lahko v besedilu poi¹èe niz znakov (zaporedje znakov ali besed), naprej ali nazaj po besedilu. Iskanje spada v skupino ukazov za premikanje kazalèka, saj premakne kazalèek na kraj v besedilu, kjer je na¹el iskani niz. Iskanje v Emacsu je morda nekoliko drugaèno od tistega, ki ste ga navajeni, in sicer je ,,inkrementalno``. To pomeni, da se iskanje odvija hkrati s tem, ko tipkate iskani niz. Ukaza za iskanje sta C-s za iskanje naprej po datoteki in C-r za iskanje nazaj po datoteki. POÈAKAJTE! Ne preizku¹ajte jih ¹e ta hip! Ko boste natipkali C-s, boste opazili niz ,,I-search`` kot pozivnik v pogovornem vmesniku. To vam pove, da je Emacs v inkrementalnem iskanju in vas èaka, da zaènete tipkati, kar i¹èete. zakljuèi iskanje. >> Pritisnite zdaj C-s. POÈASI, èrko za èrko, vtipkajte besedo ,,kazalèek``. Za vsako vtipkano èrko se ustavite in si oglejte, kaj se je zgodilo s kazalèkom. >> ©e enkrat pritisnite C-s, da poi¹èete naslednji ,,kazalèek``. >> ©estkrat pritisnite in opazujte, kako se premika kazalèek. >> Konèajte iskanje s tipko . Ste videli, kaj se je zgodilo? Emacs pri inkrementalnem iskanju sku¹a poiskati niz, ki ste ga natipkali do tistega hipa. Da poi¹èete naslednje mesto, kjer se pojavi ,,kazalèek``, samo ¹e enkrat pritisnete C-s. Èe takega mesta ni, Emacs èivkne in vam sporoèi, da iskanje ni uspelo. Tudi C-g prekine iskanje. OPOZORILO: Na nekaterih sistemih bo s pritiskom na C-s ekran zmrznil. To je znak, da je operacijski sistem prestregel znak C-s in ga interpretiral kot znak za prekinitev toka podatkov, namesto da bi ga posredoval programu Emacs. Ekran ,,odtajate`` s pritiskom na C-q. Potem si oglejte razdelek ,,Spontaneous Entry to Incremental Search`` v priroèniku za nasvet, kako se spopasti s to nev¹eènostjo. Èe sredi inkrementalnega iskanja pritisnete , boste opazili, da to pobri¹e zadnji znak v iskanem nizu, kazalèek pa se premakne nazaj na mesto v besedilu, kjer je na¹el kraj¹i niz. Na primer, predpostavimo, da ste do zdaj natipkali ,,ka`` in je kazalèek na mestu, kjer se prviè pojavi ,,ka``. Èe zdaj pritisnete , boste s tem v pogovornem vmesniku izbrisali ,a`, hkrati pa se bo kazalèek postavil na mesto, kjer je prviè na¹el ,k`, preden ste natipkali ¹e ,a`. Èe sredi iskanja vtipkate katerikoli kontrolni znaki ali metaznak (razen tistih, ki imajo poseben pomen pri iskanju, to sta C-s in C-r), se iskanje prekine. C-s zaène iskati na mestu v datoteki, kjer trenutno stoji kazalèek, in i¹èe do konca datoteke. Èe bi radi iskali proti zaèetku datoteke, namesto C-s vtipkamo C-r. Vse, kar smo povedali o ukazu C-s, velja tudi za C-r, le smer iskanja je obrnjena. * VEÈ OKEN NA ZASLONU --------------------- Ena simpatiènih lastnosti Emacsa je, da zna hkrati prikazati veè oken na ekranu, tudi èe ne delamo v grafiènem naèinu. >> Premaknite kazalèek v to vrstico in vtipkajte C-u 0 C-l. >> Zdaj vtipkajte C-x 2, da razdelite zaslon na dve okni. V obeh oknih imate odprt ta priroènik. Kazalèek je ostal v zgornjem oknu. >> Pritisnite C-M-v za listanje v spodnjem oknu. (Èe nimate tipke Meta, tipkajte ESC C-v). >> Vtipkajte C-x o (o kot ,,other``, drugi), da preselite kazalèek v spodnje okno. >> S C-v in M-v se v spodnjem oknu premikate po vsebini datoteke. Zgornje okno ¹e vedno ka¾e ta navodila. >> Ponovni C-x o vas vrne v zgornje okno. Kazalèek se je vrnil na mesto, kjer je bil, preden smo skoèili v spodnje okno. Z ukazom C-x o lahko preklapljamo med okni. Vsako okno si zapomni, kje v oknu je ostal kazalèek, samo trenutno aktivno okno pa kazalèek tudi v resnici prika¾e. Vsi obièajni ukazi za urejanje, ki smo se jih nauèili, veljajo za aktivno okno. Ukaz C-M-v je zelo uporaben, kadar urejamo besedilo v enem oknu, drugega pa uporabljamo samo za pomoè. Kazalèek ostaja ves èas v oknu, v katerem urejamo, po vsebini spodnjega okna pa se vseeno lahko premikamo, ne da bi morali venomer skakati iz enega okna v drugega. C-M-v je primer znaka CONTROL-META. Èe imate v resnici tipko Meta (na PC navadno levi Alt), lahko vtipkate C-M-v tako, da dr¾ite pritisnjeni tako CONTROL kot META, medtem ko vtipkate v. Ni pomembno, katero od tipk, CONTROL ali META, pritisnete prvo, saj obe delujeta ¹ele, ko pritisnete znak, ki sledi (v zgornjem primeru ,v`). Nasprotno pa je vrstni red pritiskanja pomemben, èe nimate tipke META in namesto nje uporabljate ESC. V tem primeru morate najprej pritisniti ESC, potem pa Control-v. Obratna kombinacija, Control-ESC v ne deluje. To je zato, ker je ESC znak sam po sebi, ne pa modifikator, kot sta CONTROL in META. >> V zgornjem oknu vtipkajte C-x 1, da se znebite spodnjega okna. (Èe bi vtipkali C-x 1 v spodnjem oknu, bi se znebili zgornjega. Razmi¹ljajte o tem ukazu kot ,,Obdr¾i samo eno okno, in sicer tisto, v katerem sem zdaj.``) Seveda ni nujno, da obe okni ka¾eta isto delovno podroèje. Èe v enem oknu izvedete C-x C-f in poi¹èete novo datoteko, se vsebina drugega okna ne spremeni. V vsakem oknu lahko neodvisno obdelujete drugo datoteko. Pa ¹e ena pot, kako v dveh oknih prika¾ete dve razlièni datoteki: >> Vtipkajte C-x 4 C-f, in na pozivnik vtipkajte ime ene va¹ih datotek. Konèajte z . Odpre se ¹e eno okno in izbrana datoteka se pojavi v drugem oknu. Tudi kazalèek se preseli v drugo okno. >> Vtipkajte C-x o, da se vrnete nazaj v zgornje okno, in C-x 1, da zaprete spodnje okno. * REKURZIVNI NIVOJI UREJANJA ---------------------------- Vèasih boste pri¹li v nekaj, èemur se pravi ,,rekurzivni nivo urejanja``. To se vidi po tem, da v statusni vrstici oglati oklepaji oklepajo ime glavnega naèina. V osnovnem naèinu bi, na primer, videli [(Fundamental)] namesto (Fundamental). Iz rekurzivnega nivoja urejanja se re¹ite, èe vtipkate ESC ESC ESC. To zaporedje je vsenamenski ukaz ,,pojdi ven``. Uporabite ga lahko tudi za ukinjanje odveènih oken, ali vrnitev iz pogovornega vmesnika. >> Pritisnite M-x, da odprete pogovorni vmesnik, zatem pa vtipkajte ESC ESC ESC, da pridete ven iz njega. Z ukazom C-g ne morete iz rekurzivnega nivoja urejanja, ker C-g preklièe ukaze ali argumente ZNOTRAJ rekurzivnega nivoja. * DODATNA POMOÈ --------------- V tem uvodu smo posku¹ali zbrati dovolj informacij, da lahko zaènete Emacs uporabljati. Emacs ponuja toliko, da bi bilo nemogoèe vse to zbrati tukaj. Verjetno pa bi se vseeno radi nauèili kaj o ¹tevilnih koristnih mo¾nostih, ki jih ¹e ne poznate. Emacs ima ¾e vgrajene veliko dokumentacije, do katere lahko pridete s pritiskom na CTRL-h (h kot ,,help``, pomoè). Za pomoè pritisnete C-h, potem pa vtipkate znak, ki pove, kak¹no pomoè ¾elite. Èe ste poplnoma izgubljeni, vtipkajte C-h ? in Emacs vam bo povedal, kak¹na pomoè je sploh na voljo. Èe ste vtipkali C-h, pa ste si premislili, lahko ukaz preklièete s C-g. (Ponekod se znak C-h preslika v kaj drugega. To ni dobro, in v takem primeru se prito¾ite sistemskemu vzdr¾evalcu. Medtem pa, èe C-h ne prika¾e sporoèila o pomoèi na dnu zaslona, namesto tega poskusite pritisniti tipko F1 ali pa vtipkajte M-x help .) Najosnovnej¹i tip pomoèi prika¾e C-h c. Pritisnite C-h, tipko c, zatem pa ukazni znak ali zaporedje ukaznih znakov, in Emacs bo izpisal kratek opis ukaza. >> Vtipkajte C-h c Control-p. Izpi¹e se nekaj takega kot C-p runs the command previous-line Ukaz je izpisal ime funkcije, ki izvede ukaz. Imena funkcij uporabljamo, kadar pi¹emo prilagoditve in raz¹iritve Emacsa. Ker pa so navadno imena funkcij izbrana tako, da kaj povedo o tem, kaj funkcija poène, bo verjetno to tudi dovolj za kratko osve¾itev, èe ste se z ukazom ¾e kdaj sreèali. Ukazu C-h lahko sledi tudi zaporedje znakov, kot na primer C-x C-s, ali, èe nimate tipke META, v. Za veè informacij o ukazu vtipkajte C-h k namesto C-h c. >> Vtipkajte C-h k Control-p. To odpre novo okno in v njem prika¾e dokumentacijo o funkciji, obenem z njenim imenom. Ko ste opravili, vtipkajte C-x 1, da se znebite okna z pomoèjo. Tega seveda ni potrebno napraviti takoj, ampak lahko urejate, medtem ko imate odprto okno s pomoèjo, in ga zaprete, ko ste konèali. Sledi ¹e nekaj uporabnih mo¾nosti, ki jih ponuja pomoè: C-h f Opi¹i funkcijo. Kot argument morate podati ime funkcije. >> Poskusite C-h f previous-line. To izpi¹e vse podatke, ki jih ima Emacs o funkciji, ki izvede ukaz C-p. C-h a Apropos. Vtipkajte kljuèno besedo in Emacs bo izpisal vse ukaze, ki vsebujejo to kljuèno besedo. Vse te ukaze lahko priklièete z Meta-x. Pri nekaterih ukazih bo Apropos izpisal tudi eno ali dvoznakovno zaporedje, s katerim dose¾ete isti uèinek. >> Vtipkajte C-h a file. To odpre novo okno, v katerem so vsa dolga imena ukazov, ki vsebujejo ,,file`` v imenu. Izvedete jih lahko z M-x. Pri nekaterih se izpi¹e tudi kratek ukaz, npr. C-x C-f ali C-x C-w pri ukazih find-file in write-file. >> Pritisnite C-M-v, da se sprehajate po oknu s pomoèjo. Poskusite nekajkrat. >> Vtipkajte C-x 1, da zaprete okno s pomoèjo. * ZAKLJUÈEK ----------- Zapomnite si, da Emacs zapustite z ukazom C-x C-c. Èe bi radi samo zaèasno skoèili v ukazno lupino in se kasneje vrnili v Emacs, pa storite to z ukazom C-z. Ta uèbenik je napisan z namenom, da bi bil razumljiv vsem novincem v Emacsu. Èe se vam kaj ne zdi jasno napisano, ne valite krivde nase - prito¾ite se! RAZMNO®EVANJE IN RAZ©IRJANJE ---------------------------- Angle¹ki izvirnik tega uvoda v Emacs je naslednik dolge vrste tovrstnih besedil, zaèen¹i s tistim, ki ga je Stuart Cracraft napisal za izvorni Emacs. V sloven¹èino ga je prevedel Primo¾ Peterlin. To besedilo, kot sam GNU Emacs, je avtorsko delo, in njegovo razmno¾evanje in raz¹irjanje je dovoljeno pod naslednjimi pogoji: Copyright (c) 1985, 1996, 1997 Free Software Foundation Dovoljeno je izdelovati in raz¹irjati neokrnjene kopije tega spisa v kakr¹nikoli obliki pod pogojem, da je ohranjena navedba o avtorstvu in to dovoljenje, ter da distributer dovoljuje prejemniku nadaljnje raz¹irjanje pod pogoji, navedenimi v tem dovoljenju. Pod pogoji iz prej¹njega odstavka je dovoljeno raz¹irjati spremenjene verzije tega spisa ali njegovih delov, èe je jasno oznaèeno, kdo je nazadnje vnesel spremembe. Pogoji za razmno¾evanje in raz¹irjanje samega Emacsa so malo drugaèni, a v istem duhu. Prosimo, preberite datoteko COPYING in potem dajte kopijo programa GNU Emacs svojim prijateljem. Pomagajte zatreti obstrukcionizem (,,lastni¹tvo``) v programju tako, da uporabljate, pi¹ete in delite prosto programje! ;;; Local Variables: ;;; coding: iso-latin-2 ;;; End: xemacs-21.4.22/etc/TUTORIAL.th0000644000175000017500000007430607265371001013626 0ustar acsacs ============================== GNUEMACS ÀÒÉÒ­Õè»Øè¹ (Mule) àº×éͧµé¹ ============================== ËÁÒÂà˵Ø: àÍ¡ÊÒéºÑºàº×éͧµé¹¹Õé ¶Ù¡à¢Õ¹¢Öé¹â´ÂÂÖ´ËÅÑ¡·ÕèÇèÒ "ÅͧàÅè¹àÅ´աÇèÒàÃÕ¹ÃÙé" ºÃ÷Ѵ·ÕèàÃÔèÁµé¹´éÇ ">>" ¨ÐÁÕ¤ÓÊÑè§ÇèÒ µèÍ仨ÐãËé·ÓÍÐäà â´Â·ÑèÇä» ¡Òûé͹¤ÓÊÑè§ãËé¡Ñº Mule ·Óä´éâ´Âãªé »ØèÁ¤Í¹â·ÃÅ (»ØèÁ·Õ躹˹éÒÊÑÁ¼ÑÊ à¢Õ¹äÇé ÇèÒ CTRL ËÃ×Í CTL) ËÃ×Í »ØèÁ META (â´Â»¡µÔ ËÁÒ¶֧»ØèÁ ESC) ã¹·Õè¹Õé àÃÒ¨ÐãªéÊÑ­ÅѡɳìµèÍä» ¹Õé á·¹¡ÒÃà¢Õ¹àµçÁ æ ÇèÒ CONTROL ËÃ×Í META C-<µÑÇÍÑ¡ÉÃ> ËÁÒ¶֧ ãËé¡´»ØèÁ¤Í¹â·ÃŤéÒ§äÇé áÅéÇ¡´»ØèÁ <µÑÇÍÑ¡ÉÃ> µÑÇÍÂèÒ§àªè¹ C-f ËÁÒ¶֧ ãËé¡´»ØèÁ¤Í¹â·ÃŤéÒ§äÇé áÅéÇ¡´»ØèÁ f <> >> µÍ¹¹Õé¢ÍãËéÅͧ¡´ C-v (View Next Screen ´Ù˹éÒµèÍä») ´Ù à¾×èÍàÅ×è͹ä»Íèҹ˹éÒ µèÍä» µèͨҡ¹Õéà»ç¹µé¹ä» ·Ø¡¤ÃÑé§·ÕèÍèҹ˹éÒ˹Öè§ æ ¨º¢ÍãËé·Ó㹷ӹͧà´ÕÂǡѹ à¾×èÍàÅ×èÍ¹ä» ´Ù˹éÒµèÍä» ESC <µÑÇÍÑ¡ÉÃ> ËÁÒ¶֧ ãËé¡´»ØèÁ ESC áÅéÇ»ÅèÍ ËÅѧ¨Ò¡¹Ñ鹨֧¡´»ØèÁ <µÑÇÍÑ¡ÉÃ> µÒÁ ËÁÒÂà˵Ø: <µÑÇÍÑ¡ÉÃ> äÁèÇèÒà»ç¹µÑÇãË­èËÃ×͵ÑÇàÅç¡ ¨ÐãËé¤ÇÒÁËÁÒÂàËÁ×͹¡Ñ¹àÁ×èͶ١ãªéã¹ ¤ÓÊÑè§ ¶éÒËÒ¡ÁÕ»ØèÁ META ãËé¡´ ¡ç¨ÐÊÒÁÒöãªé¡Òá´ M-<µÑÇÍÑ¡ÉÃ> á·¹ ¡Òà ESC <µÑÇÍÑ¡ÉÃ> ä´é (¤×ÍãËé¡´»ØèÁ META ¤éÒ§äÇé áÅéǨ֧¡´ <µÑÇÍÑ¡ÉÃ>) ¢éÍÊӤѭ: àÇÅÒ¨ÐàÅÔ¡ãªé Emacs ãËé¡´ C-x C-c ËÃ×Í㹡óշÕèÊÑè§ Emacs ¨Ò¡ csh ¡çÊÒÁÒöãªé suspend (ËÂØ´ªÑèǤÃÒÇ) ä´é ¡Òà suspend Emacs ·Óä´éâ´Â ¡´ C-z µèͨҡ¹Õé ¢ÍãËé»é͹¤ÓÊÑè§ C-v ·Ø¡ æ ¤ÃÑé§·ÕèÍèÒ¹¨ºË¹Öè§Ë¹éÒ ÀÒÂã¹Ë¹éÒ·ÕèáÅéǡѺ˹éÒ¶Ñ´ä» ¨ÐÁÕà¹×éÍËÒ«éӡѹÍÂÙèºÒ§ºÃ÷Ѵ ·Õèà»ç¹àªè¹¹Õé ¡çà¾×èÍãËéÊÒÁÒöÃÙé ä´éÇèÒ à¹×éÍËÒ·ÕèáÊ´§ÍÂÙè¹Ñé¹ µèÍà¹×èͧ¡Ñ¹ÍÂÙè ¡è͹Í×è¹ ¨Óà»ç¹¨ÐµéͧÃÙéÇÔ¸Õ¡ÒÃâ¡ÂéÒµÓá˹è§ä»ÁÒ ÀÒÂã¹á¿éÁ¢éÍÁÙÅàÊÕ¡è͹ µÒÁ·ÕèºÍ¡ä» áÅéÇ ¡ç¤×Í C-v ãªéÊÓËÃѺàÅ×è͹仢éҧ˹éÒ ¶éÒ¨ÐàÅ×è͹¡ÅѺ·Õèà¡èÒ ¡çãËé¡´ ESC v >> Åͧãªé ESC v áÅÐ C-v à¾×èÍàÅ×è͹ä»ÁÒ´Ù ÊÑ¡ÊͧÊÒÁ¤ÃÑé§ ÊÃØ» === ¤ÓÊÑè§ ÊÓËÃѺàÅ×è͹ä»ÁÒ·ÕÅÐ˹éÒÀÒÂã¹á¿éÁ¢éÍÁÙÅ ¤×Í C-v àÅ×è͹仢éҧ˹éÒ Ë¹Öè§Ë¹éÒ¨Í ESC v àÅ×è͹仢éÒ§ËÅѧ ˹Öè§Ë¹éÒ¨Í C-l à¢Õ¹˹éÒ¨ÍãËÁè áÅÐã¹¢³Ðà´ÕÂǡѹ ¡çãËéàÅ×è͹µÓá˹觢ͧà¤ÍÃìà«ÍÃì (cursor) ä»ÍÂÙèµÃ§¡ÅÒ§¨Í >> ¢ÍãËéÊѧࡵ´ÙÇèÒ ã¹¢³Ð¹Õéà¤ÍÃìà«ÍÃìÍÂÙè·Õèä˹ ¾ÃéÍÁ·Ñ駨ӢéͤÇÒÁ·ÕèÍÂÙèÃͺ¢éÒ§¢Í§ à¤ÍÃìà«ÍÃì´éÇ áÅéÇÅͧ¡´ C-l ´Ù µÃǨÊͺ´ÙÇèÒ à¤ÍÃìà«ÍÃìàÅ×è͹ä»ÍÂÙè·Õèä˹ ¢éͤÇÒÁ·ÕèÍÂÙèÃͺ¢éÒ§à»ÅÕè¹ä»ÍÂèÒ§äà ÇÔ¸Õâ¡ÂéÒÂà¤ÍÃìà«ÍÃì¢Ñé¹¾×é¹°Ò¹ ======================= µÍ¹¹Õé àÃÒ¡çÃÙéÇÔ¸Õâ¡ÂéÒÂä»ÁÒẺ·ÕÅÐ˹éÒáÅéÇ µèÍä» ¡çÁÒàÃÕ¹ÃÙéÇÔ¸Õâ¡ÂéÒÂä»·ÕèµÓá˹è§ã´ µÓá˹è§Ë¹Öè§ÀÒÂã¹Ë¹éÒà´ÕÂǡѹ «Öè§ÊÒÁÒö·Óä´éËÅÒÂÇÔ¸Õ ÇÔ¸Õ˹Öè§¡ç¤×ÍãËéãªé¤ÓÊÑè§ ä»ºÃ÷Ѵ¡è͹˹éÒ (previous) 仺Ã÷ѴµèÍä» (next) ä»´éҹ˹éÒ (forward) ä»´éÒ¹ËÅѧ (backward) ¤ÓÊÑè§ àËÅèÒ¹Õé ¶Ù¡µÑé§äÇé·Õè C-p C-n C-f áÅÐ C-b µÒÁÅӴѺ «Ö觨зÓãËéâ¡ÂéÒÂä»ÁÒä´é â´Âà·Õº¡Ñº µÓá˹觻Ѩ¨ØºÑ¹ ÊÃØ»à¢Õ¹à»ç¹á¼¹ÀÒ¾ä´é´Ñ§¹Õé ºÃ÷Ѵ·ÕèáÅéÇ C-p : : µÑÇÍÑ¡ÉôéÒ¹ËÅѧ C-b .... µÓá˹è§à¤ÍÃìà«ÍÃì»Ñ¨¨ØºÑ¹ .... µÑÇÍÑ¡Éôéҹ˹éÒ C-f : : ºÃ÷ѴµèÍä» C-n ¤ÓÊÑè§àËÅèÒ¹Õé àÍÒÁÒ¨Ò¡µÑÇÍÑ¡ÉõÑÇáá¢Í§ ¤ÓÇèÒ Previous Next Backward Forward «Ö觨ЪèÇÂãËé¨Óä´éäÁèÂÒ¡ ¤ÓÊÑè§àËÅèÒ¹Õéà»ç¹¤ÓÊÑè§ÊÓËÃѺ¡ÒÃâ¡ÂéÒ¢Ñé¹¾×é¹°Ò¹ «Öè§µéͧãªéÍÂÙèàÊÁÍ >> Åͧ¡´ C-n ´ÙËÅÒÂ æ ¤ÃÑé§ à¾×èÍàÅ×è͹à¤ÍÃìà«ÍÃìÁÒÂѧºÃ÷Ѵ¹Õé (ºÃ÷Ѵ·Õè¡ÓÅѧÍèÒ¹ ÍÂÙè¹Õé) >> Åͧ¡´ C-f ´ÙËÅÒÂ æ ¤ÃÑé§ à¾×èÍàÅ×è͹à¤ÍÃìà«ÍÃìä»ÂѧµÃ§¡ÅÒ§¢Í§ºÃ÷Ѵ áÅéÇÅͧ ¡´ C-p àÅ×è͹¢Öé¹¢éÒ§º¹´Ù Êѧࡵ´Ù´éÇÂÇèÒ µÓá˹觢ͧà¤ÍÃìà«ÍÃìà»ÅÕè¹ä»ÍÂèÒ§äà >> Åͧ¡´ C-b ¢³Ð·ÕèÍÂÙè·ÕèµÓá˹è§Ë¹éÒÊØ´¢Í§ºÃ÷Ѵ´Ù Êѧࡵ´Ù´éÇÂÇèÒ à¤ÍÃìà«ÍÃìà¤Å×è͹ ä»ÍÂèÒ§äà ¨Ò¡¹Ñé¹ãËé¡´ C-b ÍÕ¡ÊͧÊÒÁ¤ÃÑé§ áÅéÇ¡´ C-f à¾×èÍàÅ×è͹ä»Âѧ·éÒÂÊØ´ ¢Í§ºÃ÷Ѵ´Ù à¤ÍÃìà«ÍÃì¨Ðà»ç¹ÍÂèÒ§äà ¶éÒ¡´¨¹àÅ·éÒºÃÃ·Ñ´ä» àÇÅÒ·ÕèàÅ×è͹à¤ÍÃìà«ÍÃì ¨¹àźÃ÷ѴáÃ¡ÊØ´ËÃ×ͺÃ÷Ѵ·éÒÂÊØ´¢Í§Ë¹éÒä» à¤ÍÃìà«ÍÃì¨Ð àÅ×è͹ä»ÂѧºÃ÷ѴµèÍä»ã¹·ÔÈ·Ò§¹Ñé¹ æ áÅлÃѺãËéà¤ÍÃìà«ÍÃì¡ÅѺÁÒÍÂÙ躹˹éÒ¨ÍàÊÁÍ >> Åͧ¡´ C-n à¾×èÍàÅ×è͹à¤ÍÃìà«ÍÃìãËéàźÃ÷ѴÅèÒ§ÊØ´¢Í§Ë¹éҨʹ٠áÅéÇÊѧࡵ´ÙÇèÒ à¡Ô´ÍÐäâÖé¹ áÅеÓá˹觢ͧà¤ÍÃìà«ÍÃìà»ÅÕè¹ä»ÍÂèÒ§äà ¶éÒÃÙéÊÖ¡ÇèÒ¡ÒâÂѺ价ÕÅеÑÇÍÑ¡ÉùÑé¹Í×´ÍÒ´Â×´ÂÒ´ ¡çÊÒÁÒöãªé¡ÒÃàÅ×è͹à¤ÍÃìà«ÍÃìä»·ÕÅÐ¤Ó ä´é ¡´ ESC f à¾×èÍãËéàÅ×è͹仢éҧ˹éÒ˹Öè§¤Ó áÅÐ ESC b à¾×èÍãËéàÅ×è͹仢éÒ§ËÅѧ˹Öè§¤Ó ËÁÒÂà˵Ø: ÊÓËÃѺÀÒÉÒä·Â ÂѧäÁèÊÒÁÒöáºè§á¡µÓá˹觢ͧ¤Óä´é¶Ù¡µéͧ ¨Ö§äÁè ÊÒÁÒöãªéÊͧ¤ÓÊÑè§¹Õéä´é >> Åͧ¡´ ESC f áÅÐ ESC b Åͧ´ÙËÅÒÂ æ ¤ÃÑé§ áÅÐÅͧãªéÃèÇÁ¡Ñº C-f ¡Ñº C-b ´Ù ´éÇ ¨ÐÊѧࡵàËç¹ä´éÇèÒ ESC f áÅÐ ESC b ÁÕÃٻẺ¤ÅéÒ¤ÅÖ§¡Ñº C-f áÅÐ C-b â´ÂÊèǹãË­è ESC <µÑÇÍÑ¡ÉÃ> ¨Ðãªéà¡ÕèÂǡѺ¡ÒèѴ¡ÒâéͤÇÒÁ Êèǹ C-<µÑÇÍÑ¡ÉÃ> ¨Ðãªé¡ÑºÊÔè§·Õèà»ç¹¾×é¹°Ò¹ÁÒ¡ ¡ÇèÒ (àªè¹ µÑÇÍÑ¡Éà ËÃ×Í ºÃ÷Ѵ) C-a ¡Ñº C-e à»ç¹¤ÓÊÑè§¹èÒ¨ÐÃÙéäÇé à¾ÃÒФè͹¢éÒ§Êдǡ´Õ·Õà´ÕÂÇ C-a ãªéÊÓËÃѺàÅ×è͹ à¤ÍÃìà«ÍÃìä»·ÕèµÓá˹è§Ë¹éÒÊØ´¢Í§ºÃ÷Ѵ C-e ÊÓËÃѺàÅ×è͹价ÕèµÓá˹觷éÒÂÊØ´¢Í§ºÃ÷Ѵ >> Åͧ¡´ C-a ´ÙÊͧ¤ÃÑé§ ËÅѧ¨Ò¡¹Ñé¹ãËé¡´ C-e ´ÙÊͧ¤ÃÑé§ áÅéÇÅͧÊѧࡵ´ÙÇèÒ ¡Òà ¡´¤ÓÊÑè§¹ÕéÁÒ¡¡ÇèÒÊͧ¤ÃÑé§ ¨ÐäÁèªèÇÂãËéàÅ×è͹à¤ÍÃìà«ÍÃìä»ä˹ä´éÁÒ¡¡ÇèÒ¹Ñé¹ÍÕ¡ ÂѧÁÕÍÕ¡Êͧ¤ÓÊÑè§ ÊÓËÃѺ¡ÒÃàÅ×è͹à¤ÍÃìà«ÍÃìẺ§èÒÂ æ ¤×Í ¤ÓÊÑè§ ESC < ÊÓËÃѺ¡ÒÃàÅ×è͹ à¤ÍÃìà«ÍÃìä»·ÕèµÓá˹è§áÃ¡ÊØ´¢Í§á¿éÁ¢éÍÁÙÅ áÅФÓÊÑè§ ESC > ÊÓËÃѺ¡ÒÃàÅ×è͹仵Óá˹觷éÒÂÊØ´ àÃÒàÃÕ¡µÓá˹觢ͧ¢éͤÇÒÁ ·ÕèÁÕà¤ÍÃìà«ÍÃìÍÂÙèÇèÒ "¨Ø´ (point)" ËÃ×;ٴÍÕ¡ÍÂèҧ˹Öè§ä´é ÇèÒ à¤ÍÃìà«ÍÃì à»ç¹ÊÔè§·ÕèºÍ¡ãËéàÃÒÃÙéÇèÒ ¨Ø´ ÍÂÙèµÃ§ä˹¢Í§Ë¹éÒ¨Í ÊÃØ»¤ÓÊÑè§ÊÓËÃѺ¡ÒÃà¤Å×è͹ä»ÁÒ «Öè§ÃÇÁ¡ÒÃà¤Å×è͹·Õèã¹Ë¹èÇ¢ͧ¤Ó ˹èÇ¢ͧºÃ÷ѴäÇé´éÇ ä´é´Ñ§¹Õé C-f 仢éҧ˹éÒ˹Öè§µÑÇÍÑ¡Éà C-b ¡ÅѺ¢éÒ§ËÅѧ˹Öè§µÑÇÍÑ¡Éà ESC f 仢éҧ˹éÒ˹Öè§¤Ó ESC b ¡ÅѺ¢éÒ§ËÅѧ˹Öè§¤Ó C-n àÅ×è͹仺Ã÷ѴµèÍä» C-p àÅ×è͹仺Ã÷Ѵ·ÕèáÅéÇ ESC ] àÅ×è͹仵Óá˹觷éÒÂÊØ´¢Í§ÂèÍ˹éÒ (paragraph) ESC [ àÅ×è͹仵Óá˹è§áÃ¡ÊØ´¢Í§ÂèÍ˹éÒ C-a àÅ×è͹仵Óá˹è§áÃ¡ÊØ´¢Í§ºÃ÷Ѵ C-e àÅ×è͹仵Óá˹觷éÒÂÊØ´¢Í§ºÃ÷Ѵ ESC < àÅ×è͹仵Óá˹è§áÃ¡ÊØ´¢Í§á¿éÁ¢éÍÁÙÅ ESC > àÅ×è͹仵Óá˹觷éÒÂÊØ´¢Í§á¿éÁ¢éÍÁÙÅ >> Åͧãªé¤ÓÊÑè§áµèÅФÓÊÑè§´Ù ¤ÓÊÑè§àËÅèÒ¹Õéà»ç¹¤ÓÊÑè§·Õèãªé¡Ñ¹ºèÍÂÊØ´ ¤ÓÊÑè§Êͧ¤ÓÊÑè§ËÅѧ ¨ÐàÅ×è͹à¤ÍÃìà«ÍÃì ä»Âѧ·Õè·Õè¤è͹¢éÒ§ä¡Å ãËéÅͧãªé¤ÓÊÑè§ C-v áÅÐ ESC v à¾×èÍ àÅ×è͹à¤ÍÃìà«ÍÃì¡ÅѺÁÒ·ÕèµÃ§¹Õé ÊÓËÃѺ¤ÓÊÑè§Í×è¹ æ ¢Í§ Emacs ¡çàªè¹¡Ñ¹ ¤ÓÊÑè§àËÅèÒ¹Õé¨ÐÊÒÁÒöà¾ÔèÁµÑÇàÅ×Í¡ (argument) à¾×èÍ¡Ó˹´ ¨Ó¹Ç¹¤ÃÑé§ ã¹¡Òû¯ÔºÑµÔ§Ò¹ä´é ¡ÒáÓ˹´¨Ó¹Ç¹¤ÃÑé§ ·Óä´éâ´Â¡´ C-u áÅéǵÒÁ ´éǨӹǹ¤ÃÑé§·Õèµéͧ¡Òáè͹ áÅéǨ֧¤èÍ¡´¤ÓÊÑè§µÒÁ µÑÇÍÂèÒ§àªè¹ ¤ÓÊÑè§ C-u 8 C-f ËÁÒ¶֧ ãËéàÅ×è͹仢éҧ˹éÒ 8 µÑÇÍÑ¡Éà >> ãËéÅͧ¡Ó˹´¨Ó¹Ç¹¤ÃÑé§·ÕèàËÁÒÐÊÁÊÓËÃѺ¤ÓÊÑè§ C-n ËÃ×Í C-p à¾×èÍàÅ×è͹à¤ÍÃìà«ÍÃì ãËéÁÒÍÂÙèã¡ÅéºÃ÷Ѵ¹ÕéãËéÁÒ¡·ÕèÊØ´à·èÒ·Õè¨Ð·Óä´é 㹡ÒÃàÅ×è͹à¤ÍÃìà«ÍÃì¤ÃÑé§à´ÕÂÇ ÊÓËÃѺ C-v áÅÐ ESC v ¨Ðä´é¼ÅᵡµèÒ§ä»ÊÑ¡àÅ硹éÍ 㹡óչÕé ¨Ðà»ç¹¡ÒÃàÅ×è͹˹éÒ¨Í ¢Öé¹Å§ µÒÁ¨Ó¹Ç¹ºÃ÷Ѵ᷹ >> Åͧ¡´ C-u 3 C-v ´Ù àÅ×è͹¡ÅѺ·Õèà¡èÒä´éâ´Â C-u 3 ESC v ¤ÓÊÑè§Â¡àÅÔ¡ ========= ¤ÓÊÑè§ C-g ãªéÊÓËÃѺÊÑè§Â¡àÅÔ¡¤ÓÊÑè§µèÒ§ æ ·Õèµéͧ¡ÒáÒûé͹¢éÍÁÙÅà¾ÔèÁàµÔÁ µÑÇÍÂèÒ§àªè¹ ÃÐËÇèÒ§·ÕèãÊèµÑÇàÅ×Í¡ (argument) ÍÂÙè ËÃ×ÍÃÐËÇèÒ§¤ÓÊÑè§·Õèµéͧ¡Òá´»ØèÁÁÒ¡¡ÇèÒ 2 »ØèÁ¢Öé¹ä» ¶éÒ ËÒ¡µéͧ¡ÒáàÅÔ¡ ¡çãËé¡´ C-g >> Åͧ¡Ó˹´¨Ó¹Ç¹¤ÃÑé§ãËéà»ç¹ 100 â´Â¡Òá´ C-u 100 áÅéÇ¡´ C-g ´Ù ËÅѧ¨Ò¡¹Ñé¹ ãËéÅͧ¡´ C-f ´Ù áÅéÇÊѧࡵ´ÙÇèÒà¤ÍÃìà«ÍÃìàÅ×è͹仡ÕèµÑÇÍÑ¡Éà ËÃ×͵͹·Õè¾ÅҴ仡´ ESC â´ÂäÁèµÑé§ã¨ ¡çÊÒÁÒö¡´ C-g ¡àÅÔ¡ä´é ¢éͼԴ¾ÅÒ´ (Error) ================ 㹺ҧ¤ÃÑé§ ÍÒ¨¨ÐÁÕ¡ÒÃÊÑè§»¯ÔºÑµÔ§Ò¹ºÒ§ÍÂèÒ§ ·Õè Emacs ÂÍÁÃѺäÁèä´éà¡Ô´¢Öé¹ µÑÇÍÂèÒ§àªè¹ ¡Òá´¤ÓÊÑ觤͹â·Ãźҧ¤ÓÊÑè§ ·ÕèäÁèä´é¡Ó˹´äÇéã¹ Emacs ¡ç¨Ð·ÓãËé Emacs Êè§àÊÕ§àµ×͹ áÅÐáÊ´§¼Å·ÕèºÃ÷ѴÅèÒ§ÊØ´¢Í§¨Í ºÍ¡ÇèÒ¼Ô´¾ÅÒ´ÍÂèÒ§äà ¤ÓÊÑ觺ҧ¤ÓÊÑè§·Õèà¢Õ¹äÇéã¹àÍ¡ÊÒéºÑº¹Õé ÍÒ¨ãªéäÁèä´é¡Ñº Emacs ºÒ§ÃØè¹ (version) «Ö觨Р·ÓãËéÁÕ¡ÒÃáÊ´§¼Å¢éͼԴ¾ÅÒ´ (error) ¢Öé¹ ã¹¡Ã³Õ¹Õé ¢ÍãËé¡´»ØèÁÍÐäáçä´é à¾×èÍàÅ×è͹ä»ÂѧÊèǹ µèÍä» ÇÔ¹â´Çì (Window) ============== Emacs ÊÒÁÒöà»Ô´ÇÔ¹â´Çìä´é¾ÃéÍÁ¡Ñ¹ËÅÒÂÇÔ¹â´Çì áÅÐãªéÇÔ¹â´ÇìàËÅèÒ¹Ñé¹áÊ´§¼Å¢éͤÇÒÁ µèÒ§ æ µÒÁµéͧ¡ÒÃä´é ¡è͹Í×è¹ ¡ç¤ÇèзӤÇÒÁÃÙé¨Ñ¡¡Ñº¤ÓÊÑè§ ·ÕèãªéÊÓËÃѺ¡ÒÃźÇÔ¹â´ÇìÊèǹà¡Ô¹ ã¹àÇÅÒ·ÕèáÊ´§¼ÅÅѾ¸ì¢Í§¤ÓÊÑ觺ҧ¤ÓÊÑè§ ËÃ×Í Help ÍÍ¡àÊÕ¡è͹ C-x 1 ·ÓãËéà»ç¹ÇÔ¹â´Çìà´ÕÂÇ ¤ÓÊÑè§ C-x 1 ãªéÊÓËÃѺźÇÔ¹â´ÇìÍ×è¹ áÅéÇ¢ÂÒÂÇÔ¹â´Çì·ÕèÁÕà¤ÍÃìà«ÍÃìÍÂÙè ãËéàµçÁ¨Íà»ç¹ ÇÔ¹â´Çìà´ÕÂÇ >> ãËéàÅ×è͹à¤ÍÃìà«ÍÃìÁÒ·ÕèºÃ÷Ѵ¹Õé áÅéÇ¡´ C-u 0 C-l >> Åͧ¡´ C-h k C-f ´Ù áÅéÇÊѧࡵ´ÙÇèÒÇÔ¹â´Çì¹Õéà»ÅÕè¹ä»ÍÂèÒ§äà àÁ×èÍÁÕÇÔ¹â´ÇìãËÁè«Öè§ Í¸ÔºÒÂÇÔ¸Õãªé¤ÓÊÑè§ C-f »ÃÒ¡¯¢Öé¹ >> Åͧ¡´ C-x 1 à¾×èÍźÇÔ¹â´Çì·Õèâ¼Åè¢Öé¹ÁÒãËÁè ÍÍ¡ ¡ÒÃá·Ã¡ (insert) áÅÐ ¡ÒÃź (delete) =================================== º¹ Emacs àÃÒ¨ÐÊÒÁÒö¾ÔÁ¾ìµÑÇÍÑ¡ÉÃà¢éÒä»ä´éàÅ àÁ×è͵éͧ¡ÒþÔÁ¾ì¢éͤÇÒÁ Emacs ¨Ð ¶×ÍÇèÒµÑÇ˹ѧÊ×Í·ÕèÁͧàËç¹ä´é·Ø¡µÑÇ (àªè¹ 'A' '7' '*' '¡' áÅÐÍ×è¹ æ) à»ç¹¢éͤÇÒÁ·Õèµéͧ¡ÒèРá·Ã¡ (insert) à¢éÒ仵ç æ àÁ×èͨШººÃ÷Ѵ ãËé¡´ à¾×èÍàµÔÁÍÑ¡ÉâÖ鹺Ã÷ѴãËÁè (linefeed character) á·Ã¡à¢éÒä» ãËé¡´ àÁ×è͵éͧ¡ÒèÐźµÑÇÍÑ¡É÷Õèà¾Ôè§¾ÔÁ¾ìà¢éÒä» ËÁÒ¶֧»ØèÁà¢Õ¹ º¹¼ÔÇ˹éÒäÇéÇèÒ "Delete" ËÃ×ͺҧ·ÕÍÒ¨¨Ðà¢Õ¹äÇé "Rubout" ¡çä´é â´Â·ÑèÇä» ãªéÊÓËÃѺźµÑÇÍÑ¡É÷ÕèÍÂÙè¡è͹˹éÒµÓá˹è§à¤ÍÃìà«ÍÃì»Ñ¨¨ØºÑ¹ >> Åͧ¾ÔÁ¾ìµÑÇÍÑ¡ÉÃà¢éÒä»ËÅÒÂ æ µÑÇ áÅéÇãªé źµÑÇÍÑ¡ÉÃàËÅèÒ¹Ñé¹·Ôé§ >> Åͧ¾ÔÁ¾ì¢éͤÇÒÁŧä»ãËéà¡Ô¹¢Íº¢ÇÒ (right margin) àÇÅÒ·Õè¾ÔÁ¾ì¢éͤÇÒÁà¢éÒä» ÂÒÇà¡Ô¹¤ÇÒÁ¡ÇéÒ§¢Í§Ë¹Ö觺Ã÷Ѵ ºÃ÷Ѵ¹Ñ鹡ç¨Ð "¶Ù¡µèÍ" ãËéÂÒÇà¡Ô¹Ë¹Öè§Ë¹éÒ¨Í â´ÂãÊèà¤Ã×èͧËÁÒ '\' äÇé·Õè¢Íº¢ÇÒÊØ´ à¾×èͺ͡ãËéÃÙéÇèÒºÃ÷Ѵ¹ÕéÂѧÁÕµèÍ Emacs ¨Ð àÅ×è͹ (scroll) ˹éÒ¨Íà¾×èÍãËéàËç¹µÓá˹觷Õè¡ÓÅѧá¡éä¢ÍÂÙèä´éÍÂèÒ§ªÑ´à¨¹ ¶éÒËÒ¡ ¢Íº¢ÇÒËÃ×͢ͺ«éÒ¢ͧÁÕà¤Ã×èͧËÁÒ '\' ÍÂÙè ¡çà»ç¹¡Òú͡ãËéÃÙéÇèÒ ºÃ÷Ѵ¹Ñé¹ÂѧÁÕµèÍ ä»ã¹·ÔÈ·Ò§¹Ñé¹ æ Åͧ»¯ÔºÑµÔ´ÙàÅ ¤§¨ÐªèÇÂãËéà¢éÒ㨧èÒ¡ÇèÒ¡ÒÃ͸ԺÒ´éǵÑÇ˹ѧÊ×Í >> ãËé¢ÂѺà¤ÍÃìà«ÍÃìä»äÇ麹ºÃ÷Ѵ«Öè§¶Ù¡µèÍãËéÂÒÇà¡Ô¹Ë¹Öè§Ë¹éÒ¨Í ·Õèà¾Ôè§»é͹à¢éÒä»àÁ×èÍ ÊÑ¡¤ÃÙè¹Õé áÅéÇãªé C-d ź¢éͤÇÒÁÍÍ¡ºÒ§Êèǹ ¨¹¤ÇÒÁÂÒǢͧ¢éͤÇÒÁÍÂÙèÀÒÂã¹Ë¹Öè§ ºÃ÷Ѵ Êѧࡵ´ÙÇèÒà¤Ã×èͧËÁÒ '\' ¨ÐËÒÂä» >> ãËéàÅ×è͹à¤ÍÃìà«ÍÃìä»äÇé·ÕèµÓá˹è§áÃ¡ÊØ´¢Í§ºÃ÷Ѵ áÅéÇ¡´ ´Ù ¡ÒÃ·Ó áºº¹Õé ¨Ð·ÓãËéÊÑ­Åѡɳì¤Ñè¹ÃÐËÇèÒ§ºÃ÷Ѵ¶Ù¡ÅºÍÍ¡ä» ºÃ÷Ѵ¹Ñ鹡ç¨Ð¶Ù¡àÍÒ仵è͡Ѻ ºÃ÷Ѵ¡è͹˹éÒ¹Ñé¹ ÃÇÁ¡Ñ¹à»ç¹ºÃ÷ѴÂÒǺÃ÷Ѵà´ÕÂÇ áÅÐÍÒ¨¨ÐÁÕÊÑ­ÅѡɳìµèͺÃ÷Ѵ »ÃÒ¡¯¢Öé¹ >> ãËé¡´ à¾×èÍà¾ÔèÁ µÑÇÍÑ¡ÉâÖ鹺Ã÷ѴãËÁè ¡ÅѺä»ÍÂèÒ§à´ÔÁ ¤ÓÊÑè§ÊèǹãË­è¢Í§ Emacs ¨ÐÊÒÁÒö¡Ó˹´¨Ó¹Ç¹¤ÃÑé§·Õèµéͧ¡ÒÃãË黯ԺѵÔä´é ÃÇÁ·Ñé§¡Òà á·Ã¡ (insert) µÑÇÍÑ¡ÉôéÇ >> Åͧ»é͹¤ÓÊÑè§ C-u 8 * ´Ù Êѧࡵ´ÙÇèÒà¡Ô´ÍÐäâÖé¹ ¶éÒµéͧ¡ÒèÐà¾ÔèÁºÃ÷ѴÇèÒ§ æ (blank line) ÃÐËÇèÒ§ÊͧºÃ÷Ѵ ãËéàÅ×è͹价ÕèµÓáË¹è§ áÃ¡ÊØ´¢Í§ºÃ÷Ѵ·ÕèÊͧ áÅéÇ¡´ C-o >> ãËéàÅ×è͹价ÕèµÓá˹è§áÃ¡ÊØ´¢Í§ºÃ÷Ѵ㴡çä´é áÅéÇÅͧ¡´ C-o ´Ù ¶Ö§µÃ§¹Õé àÃÒ¡çä´éàÃÕ¹ÇÔ¸Õ¾×é¹°Ò¹ÊÓËÃѺ¡Òûé͹¢éͤÇÒÁ áÅСÒÃá¡é·Õè¼Ô´áÅéÇ ¹Í¡¨Ò¡¨Ð źä´é·ÕÅеÑÇÍÑ¡ÉÃáÅéÇ ÂѧÁÕ¤ÓÊÑè§«Öè§ÊÒÁÒöãªéźä´éã¹à»ç¹¤Ó æ ËÃ×Íà»ç¹ºÃ÷Ѵ æ ÍÕ¡´éÇ ÊÃØ» ¤ÓÊÑè§ÊÓËÃѺ¡ÒÃźä´é´Ñ§¹Õé źµÑÇÍÑ¡É÷ÕèÍÂÙè˹éÒà¤ÍÃìà«ÍÃì C-d źµÑÇÍÑ¡É÷ÕèÍÂÙè·Õèà¤ÍÃìà«ÍÃì ESC ź¤Ó·ÕèÍÂÙè˹éÒà¤ÍÃìà«ÍÃì ESC d ź¤ÓµÑé§áµèµÓá˹觷Õèà¤ÍÃìà«ÍÃìÍÂÙè C-k źºÃ÷ѴµÑé§áµèµÓá˹觷Õèà¤ÍÃìà«ÍÃìÍÂÙè 㹺ҧ¤ÃÑé§ àÃÒÍÒ¨µéͧ¡ÒèÐàÍÒÊèǹ·Õèź仡ÅѺ¤×¹ÁÒ â»Ãá¡ÃÁ Emacs ¨Ð¨ÓÊèǹ·Õèź ÍÍ¡äÇé àÇÅÒ·Õèź¢éͤÇÒÁã¹Ë¹èÇ·ÕèÁÒ¡¡ÇèÒ˹Öè§µÑÇÍÑ¡Éà ãËéãªé¤ÓÊÑè§ C-y àÇÅÒ·Õèµéͧ¡ÒèÐàÍÒ ¢éͤÇÒÁ¡ÅѺ¤×¹ ÊÔè§·Õè¤ÇÃÃÐÇѧ¡ç¤×Í C-y äÁèãªèãªéä´éà¾Õ§á¤èµÓá˹觷Õèź¢éͤÇÒÁÍÍ¡à·èÒ¹Ñé¹ áµè¨Ð ãªé¡ÑºµÓá˹è§ã´¡çä´é C-y à»ç¹¤ÓÊÑè§ÊÓËÃѺá·Ã¡¢éͤÇÒÁ·Õèà¡çºäÇé ŧ㹵Óá˹觷ÕèÁÕà¤ÍÃìà«ÍÃìÍÂÙè àÃÒÊÒÁÒöãªé¤ÇÒÁÊÒÁÒö¹Õé㹡ÒÃà¤Å×è͹ÂéÒ¢éͤÇÒÁä´é ¤ÓÊÑè§ÊÓËÃѺ¡ÒÃźÁÕÍÂÙèÊͧẺ¤×Í ¤ÓÊÑè§ "Delete" ¡Ñº ¤ÓÊÑè§ "Kill" ¤ÓÊÑè§ "Kill" ¨Ðà¡çºÊèǹźÍÍ¡äÇé áµè¤ÓÊÑè§ "Delete" ¨ÐäÁèà¡çº áµè¶éÒËÒ¡ãªé¤ÓÊÑè§¹ÕéËÅÒÂ æ ¤ÃÑé§ ¡ç¨Ðà¡çº Êèǹ·ÕèźÍÍ¡äÇéãËé >> ãËé¡´ C-n ÊÑ¡ÊͧÊÒÁ¤ÃÑé§ à¾×èÍàÅ×è͹ä»Âѧ·Õè·ÕèàËÁÒÐÊÁº¹Ë¹éÒ¨Í áÅéÇÅͧ¡´ C-k à¾×èÍ ÅººÃ÷Ѵ¹Ñé¹ÍÍ¡´Ù àÁ×èÍ¡´ C-k ¤ÃÑé§áá ¢éͤÇÒÁ㹺Ã÷Ѵ¹Ñ鹨ж١źÍÍ¡ áÅÐàÁ×èÍ¡´ÍÕ¡ C-k ÍÕ¡¤ÃÑé§ ºÃ÷Ѵ ¹Ñé¹àͧ·Ñ駺Ã÷Ѵ¡ç¨Ð¶Ù¡ÅºÍ͡仴éÇ áµè¶éÒ¡Ó˹´¨Ó¹Ç¹¤ÃÑé§ãËé¡Ñº¤ÓÊÑè§ C-k ¡ç¨ÐËÁÒ¶֧ ãËéź ºÃ÷ѴÍÍ¡ (·Ñé§à¹×éÍËÒáÅеÑǺÃ÷Ѵ) à»ç¹¨Ó¹Ç¹ºÃ÷Ѵ à·èҡѺ¨Ó¹Ç¹¤ÃÑé§·Õè¡Ó˹´ ºÃ÷Ѵ·Õèà¾Ôè§ÅºÍÍ¡ä» ¨Ð¶Ù¡à¡çºäÇé áÅÐÊÒÁÒö¹Ó¡ÅѺ¤×¹ÁÒä´é â´Âãªé¤ÓÊÑè§ C-y >> Åͧ¡´ C-y ´Ù ¢éͤÇÒÁ·Õè¶Ù¡ÅºÍÍ¡ â´Â¡Òá´ C-k ËÅÒÂ æ ¤ÃÑé§ ¨Ð¶Ù¡à¡çºÃǺÃÇÁäÇé áÅÐÊÒÁÒö¹Ó ¡ÅѺÁÒ·Ñé§ËÁ´ä´é㹤ÃÑé§à´ÕÂÇ â´Â¡Òá´ C-y >> Åͧ¡´ C-k ´ÙËÅÒÂ æ ¤ÃÑé§ >> ¤ÓÊÑè§ÊÓËÃѺàÃÕ¡¢éͤÇÒÁ¡ÅѺÁÒ ¤×Í C-y ¡è͹Í×è¹ãËéàÅ×è͹à¤ÍÃìà«ÍÃìŧ仢éÒ§ÅèÒ§ ÊÑ¡ÊͧÊÒÁºÃ÷Ѵ áÅéÇÅͧ¡´ C-y ´Ù ¡ç¨ÐÊÒÁÒö¤Ñ´ÅÍ¡ (copy) ¢éͤÇÒÁä´é ¶éҵ͹¹Õéà¡çº¢éͤÇÒÁÍÐäúҧÍÂèÒ§äÇé áÅéÇź¢éͤÇÒÁÍ×è¹à¾ÔèÁà¢éÒä»ÍÕ¡ ¨Ðà¡Ô´ÍÐäâÖé¹ ¼ÅÅѾ¸ì¤×Í C-y ¨ÐàÃÕ¡¤×¹ä´éá¤èà¾Õ§¢éͤÇÒÁ·ÕèźÍÍ¡¤ÃÑé§ÅèÒÊØ´à·èÒ¹Ñé¹ >> ÅͧźºÃ÷Ѵ´Ù˹Ö觺Ã÷Ѵ áÅéÇàÅ×è͹à¤ÍÃìà«ÍÃìä»·ÕèÍ×è¹ áÅéÇźºÃ÷ѴÍÍ¡´ÙÍա˹Öè§ ºÃ÷Ѵ Åͧ¡´ C-y ´Ù áÅéÇÊѧࡵ´ÙÇèÒ¨Ðä´éá¤èà¾Õ§ºÃ÷Ѵ·ÕèÊͧ¤×¹à·èÒ¹Ñé¹ ¡ÒÃÍѹ´Ù (UNDO) ============= àÇÅÒ·Õèá¡é䢢éͤÇÒÁºÒ§ÍÂèÒ§ áÅéǵéͧ¡ÒèÐà»ÅÕ蹡ÅѺãËéà»ç¹ÍÂèÒ§à´ÔÁ ¡çÊÒÁÒö·Óä´é·Ø¡ àÁ×èÍ´éǤÓÊÑè§ C-x u â´Â»¡µÔ ¨ÐãªéÊÓËÃѺ¡àÅÔ¡¤ÓÊÑè§ ·Õè»é͹à¢éÒä»â´ÂäÁèµÑé§ã¨ ÊÒÁÒöãªé ¤ÓÊÑè§¹Õé¡Õè¤ÃÑé§¡çä´éµÒÁµéͧ¡Òà >> ÅͧźºÃ÷Ѵ¹ÕéÍÍ¡´Ù ´éǤÓÊÑè§ C-k áÅéÇàÃÕ¡¡ÅѺ¤×¹ÁÒ´éÇ C-x u ¤ÓÊÑè§ C-_ ¡çà»ç¹¤ÓÊÑè§Íѹ´ÙÍÕ¡Íѹ˹Öè§ ¤ÇÒÁÊÒÁÒöàËÁ×͹¡Ñº¤ÓÊÑè§ C-x u ÊÒÁÒö¡Ó˹´¨Ó¹Ç¹¤ÃÑé§ãËé¤ÓÊÑè§ C-_ áÅÐ C-x u ä´é á¿éÁ¢éÍÁÙÅ (File) ============== àÃÒ¨Óà»ç¹µéͧà¡çºÃÑ¡ÉÒ (save) ¢éͤÇÒÁ·Õèá¡éä¢äÇéã¹á¿éÁ¢éÍÁÙÅ ¶éÒµéͧ¡ÒèÐãËéÊÔè§·Õè á¡éä¢à»ÅÕè¹ä»ÍÂèÒ§¶ÒÇà äÁèàªè¹¹Ñé¹ ÊÔè§·Õèá¡éä¢ä»¡ç¨ÐËÒÂä» ·Ñ¹·Õ·ÕèàÅÔ¡¡ÒÃãªé Emacs á¿éÁ¢éÍÁÙÅ·ÕèÁͧàËç¹ÍÂÙè ¤×ÍÊÔè§·ÕèºÑ¹·Ö¡ÊÔè§·Õè¡ÓÅѧá¡éä¢ÍÂÙè ËÃ×;ٴ§èÒÂ æ ¡ç¤×Íá¿éÁ¢éÍÁÙÅ·ÕèÁͧàËç¹ ÍÂÙè¤×͵ÑÇá¿éÁ¢éÍÁÙÅ·Õè¡ÓÅѧá¡éä¢ÍÂÙè áµè¨¹¡ÇèÒá¿éÁ¢éÍÁÙŨж١à¡çºÃÑ¡ÉÒ (save) Å§ä» á¿éÁ¢éÍÁÙÅ·Õè¶Ù¡á¡éä¢ÍÂÙè ¨ÐäÁè¶Ù¡à¢Õ¹·Ñº ŧä»ÍÂèÒ§à´ç´¢Ò´ Íѹ¹Õéà¾×èÍà»ç¹¡Òûéͧ¡Ñ¹¡ÒÃà¢Õ¹·Ñºá¿éÁ¢éÍÁÙÅ·Õèá¡éä¢ä»áºº¤ÃÖè§ æ ¡ÅÒ§ æ â´ÂäÁèä´éµÑé§ã¨ ¹Í¡¨Ò¡¹Õé à¾×èÍà»ç¹¡Òûéͧ¡Ñ¹¡ÒÃà¡çºÃÑ¡ÉÒ (save) ÊÔè§·Õèá¡é䢼Դä»â´ÂäÁèµÑé§ã¨ Emacs ¨Ðà»ÅÕ蹪×èÍá¿éÁ¢éÍÁÙŵ鹩ºÑºà¡çºäÇéãËé ¡è͹¡ÒÃà¡çºÃÑ¡ÉÒ ËÁÒÂà˵Ø: Emacs ÂѧÁÕ¡Òûéͧ¡Ñ¹ÍغѵÔà˵طÕè¤Ò´äÁè¶Ö§ â´Â¡ÒÃà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ·Õè¡ÓÅѧ á¡éä¢ÍÂÙèà»ç¹ÃÐÂÐ æ â´Âãªéª×èÍá¿éÁ¢éÍÁÙŵèÒ§¡Ñ¹ ´éÇÂÇÔ¸Õ¹Õé ¨Ð·ÓãËéÊÒÁÒöŴ ¤ÇÒÁàÊÕÂËÒ·ÕèÍÒ¨à¡Ô´¢Öé¹ä´é ãËé¹éÍ·ÕèÊØ´à·èÒ·Õè¨Ð·Óä´é µÃ§ÊèǹÅèÒ§¢Í§¨Í ¨ÐÁÕºÃ÷ѴâËÁ´ (mode line) ã¹ÅѡɳТéÒ§ÅèÒ§áÊ´§ÍÂÙè (µÑÇÍÂèÒ§) [--]J:--**-Mule: TUTORIAL.th (Fundamental) ---55%-------------- ©ºÑºÊÓà¹Ò¢Í§ Tutorial ¢Í§ Emacs ·Õè¡ÓÅѧÍèÒ¹ÍÂÙè¹Õéª×èÍ TUTORIAL.th àÇÅÒ·ÕèÊÑè§ãËéËÒ á¿éÁ¢éÍÁÙÅËÃ×Í find-file (¤é¹ËÒá¿éÁ¢éÍÁÙÅ áÅéÇÍèÒ¹à¢éÒÁÒ㹺ѿà¿ÍÃì) ¡ç¨ÐáÊ´§ª×èÍá¿éÁ¢éÍÁÙÅäÇé µÃ§Êèǹ TUTORIAL.th µÑÇÍÂèÒ§àªè¹ ¶éÒÊÑè§ãËéËÒá¿éÁ¢éÍÁÙŪ×èÍ new-file ºÃ÷ѴâËÁ´¡ç¨ÐáÊ´§ ¼ÅÇèÒ "Mule: new-file" ËÁÒÂà˵Ø: ¨ÐÁÕ¤Ó͸ԺÒÂà¾ÔèÁàµÔÁà¡ÕèÂǡѺºÃ÷ѴâËÁ´ (mode line) 㹵͹ËÅѧ ¤ÓÊÑè§ãËéËÒá¿éÁ¢éÍÁÙÅ áÅФÓÊÑè§ãËéà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ ÁÕÅѡɳÐᵡµèÒ§¨Ò¡¤ÓÊÑè§·Õè¼èÒ¹ æ ÁÒ µÃ§·Õè »ÃСͺ仴éÇ 2 µÑÇÍÑ¡Éà ¤×͵éͧ¡´¤ÓÊÑ觺ҧÍÂèÒ§ µÒÁËÅѧ¤ÓÊÑè§ C-x «Öè§ËÁÒ¶֧¤ÓÊÑè§ à¡ÕèÂǡѺá¿éÁ¢éÍÁÙÅ áÅÐÍÕ¡¨Ø´Ë¹Öè§ áµèᵡµèÒ§¨Ò¡¤ÓÊÑè§·Õè¼èÒ¹ÁÒ¤×Í àÇÅÒÊÑè§ãËé¤é¹ËÒá¿éÁ¢éÍÁÙÅ àÃҨж١ Emacs ¶ÒÁª×èͧ͢á¿éÁ¢éÍÁÙŹÑé¹ æ àÃÒàÃÕ¡¤ÓÊÑè§àËÅèÒ¹Ñé¹ÇèÒ ¤ÓÊÑè§»ÃÐàÀ··Õè¶ÒÁµÑÇàÅ×Í¡ (argument) ¨Ò¡à·ÍÃìÁÔ¹ÑÅ ËÁÒÂà˵Ø: ã¹·Õè¹Õé µÑÇàÅ×Í¡ (argument) ¤×ͪ×èÍá¿éÁ¢éÍÁÙÅ C-x C-f ÊÑè§ãËéËÒ (find) á¿éÁ¢éÍÁÙÅ áÅéÇ Emacs ¨Ð¶ÒÁª×èͧ͢á¿éÁ¢éÍÁÙÅ â´Â»ÃÒ¡¯¢Öé¹·ÕèÊèǹÅèÒ§¢Í§¨Í àÃÒàÃÕ¡Êèǹ·ÕèãËé»é͹ ª×èÍá¿éÁ¢éÍÁÙŹÑé¹ÇèÒ ÁԹԺѿà¿ÍÃì (mini buffer) ÁԹԺѿà¿ÍÃì¨Ð¶Ù¡ãªé§Ò¹ã¹ÅѡɳйÕé ÁԹԺѿà¿ÍÃì ¨ÐËÁ´Ë¹éÒ·ÕèáÅÐËÒÂä» ËÅѧ¨Ò¡·Õè»é͹ª×èÍá¿éÁ¢éÍÁÙÅ áÅéÇ¡´»ØèÁ >> Åͧ¡´ C-x C-f áÅéǵÒÁ´éÇ C-g ´Ù à»ç¹¡ÒÃÊÑè§Â¡àÅÔ¡à¹×éÍËÒã¹ÁԹԺѿà¿ÍÃì ËÃ×Í Â¡àÅÔ¡¤ÓÊÑè§ C-x C-f ´Ñ§¹Ñé¹ Emacs ¨ÐäÁè¤é¹ËÒá¿éÁ¢éÍÁÙÅã´ æ ¤ÃÒǹÕé ÁÒÅͧà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ´Ù àÇÅÒ·Õèµéͧ¡ÒÃà¡çºÃÑ¡ÉÒÊÔè§·Õèá¡éä¢ÁÒ¨¹¶Ö§µÍ¹¹Õé ¡çãËéãªé ¤ÓÊÑ觴ѧ¹Õé C-x C-s à¡çºÃÑ¡ÉÒ (save) á¿éÁ¢éÍÁÙÅ áÅéÇà¹×éÍËÒ·ÕèÍÂÙèã¹ Emacs ¡ç¨Ð¶Ù¡à¢Õ¹ŧ价Õèá¿éÁ¢éÍÁÙÅ àÇÅÒà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ á¿éÁ¢éÍÁÙÅ µé¹©ºÑº¨ÐäÁèÊÙ­ËÒÂä» áµè¨Ð¶Ù¡à¡çºäÇé㹪×èÍãËÁè «Öè§ä´éÁÒ¨Ò¡ª×èÍà¡èÒ·ÕèµèÍ·éÒ´éÇ '~' ËÅѧ¨Ò¡·Õèà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅàÊÃç¨áÅéÇ Emacs ¡ç¨ÐáÊ´§ª×èÍá¿éÁ¢éÍÁÙÅ·Õèà¡çºãËé´Ù >> Åͧ¡´ C-x C-x à¾×èÍà¡çºÃÑ¡ÉÒÊÓà¹Ò¢Í§ Tutorial ¹Õé´Ù ¡ç¨ÐàËç¹ÇèÒ ·ÕèÊèǹÅèÒ§ ¢Í§¨Í ÁÕ¢éͤÇÒÁÇèÒ "Wrote ...../TUTORIAL.th" »ÃÒ¡¯¢Öé¹ àÇÅÒ·Õè¨ÐÊÃéÒ§á¿éÁ¢éÍÁÙÅãËÁè ¡çãËé·ÓÃÒǡѺÇèҨФé¹ËÒ (find-file) á¿éÁ¢éÍÁÙÅà¡èÒ«Öè§ÁÕ ÍÂÙè¡è͹˹éÒ¹ÕéáÅéÇ áÅéǾÔÁ¾ì¢éͤÇÒÁŧä»ã¹á¿éÁ¢éÍÁÙÅ·ÕèËÒà¨Í áÅÐàÇÅÒ·ÕèÊÑè§à¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅà·èÒ¹Ñé¹ ¤×͵͹·Õè Emacs ¨Ðà¡çºà¹×éÍËÒ·Õèá¡éä¢ÁÒ·Ñé§ËÁ´ ŧ ã¹á¿éÁ¢éÍÁÙÅà»ç¹¤ÃÑé§áá ºÑ¿à¿ÍÃì (Buffer) =============== ¶éÒËÒ¡ÊÑè§ãËéËÒá¿éÁ¢éÍÁÙÅÍѹ·ÕèÊͧ ´éǤÓÊÑè§ C-x C-f à¹×éÍËҢͧá¿éÁ¢éÍÁÙÅáá ¡ç¨ÐÂѧ¤§ ¶Ù¡à¡çºÃÑ¡ÉÒÍÂÙèã¹ Emacs ÊÔè§·Õèà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ·ÕèÍèÒ¹à¢éÒÁÒ «Öè§ÍÂÙèÀÒÂã¹ Emacs àÃÕ¡ÇèÒ ºÑ¿à¿ÍÃì (Buffer) àÇÅÒ·ÕèÍèÒ¹á¿éÁ¢éÍÁÙÅãËÁèà¢éÒÁÒ Emacs ¡ç¨ÐÊÃéÒ§ºÑ¿à¿ÍÃìãËÁè ¢Öé¹ÁÒÀÒÂã¹ ¶éÒµéͧ¡ÒèдÙÃÒ¡ÒâͧºÑ¿à¿ÍÃì ·Õè¶Ù¡à¡çºÃÑ¡ÉÒÍÂÙèÀÒÂã¹ Emacs ¡çãËé¡´¤ÓÊÑè§ C-x C-b >> Åͧ¡´ C-x C-b ´Ù Êѧࡵ´ÙÇèÒáµèÅкѿà¿ÍÃìÁÕª×èÍÇèÒÍÐäà áÅж١µÑ駪×èÍäÇéÇèÒ ÍÂèÒ§äà 㹠Emacs ÁÕºÒ§ºÑ¿à¿ÍÃì ·ÕèäÁèÁÕ¤Ùè¡Ñºá¿éÁ¢éÍÁÙŨÃÔ§ æ µÑÇÍÂèÒ§àªè¹ äÁèÁÕá¿éÁ¢éÍÁÙÅ·ÕèÁÕª×èÍÇèÒ "*Buffer List*" ÍÂÙè¨ÃÔ§ æ áµèà»ç¹ºÑ¿à¿ÍÃì·ÕèÊÃéÒ§¢Öé¹ÁÒà¾×èÍáÊ´§ÃÒ¡Òúѿà¿ÍÃì â´Â¤ÓÊÑè§ C-x C-b ¢éͤÇÒÁ·Ø¡¢éͤÇÒÁ·Õè»ÃÒ¡¯ÍÂÙèã¹ÇÔ¹â´Çì¢Í§ Emacs ¹Ñé¹ ¨ÐÍÂÙè㹺ѿà¿ÍÃì㴺ѿà¿ÍÃì˹Öè§àÊÁÍ >> Åͧ¡´ C-x 1 à¾×èÍźÃÒ¡Òúѿà¿ÍÃìÍÍ¡´Ù ¡ÒÃàÃÕ¡á¿éÁ¢éÍÁÙÅÍ×è¹¢Öé¹ÁÒá¡éä¢ µÍ¹·Õè¡ÓÅѧá¡éä¢á¿éÁ¢éÍÁÙÅ˹Öè§ÍÂÙè¹Ñé¹ ¨ÐäÁè·ÓãËéá¿éÁ¢éÍÁÙÅ áá¶Ù¡à¡çºÃÑ¡ÉÒ ÊÔè§·Õèá¡éä¢ä»ã¹á¿éÁ¢éÍÁÙÅáá¨Ð¶Ù¡ºÑ¹·Ö¡äÇé㹺ѿà¿ÍÃì¢Í§á¿éÁ¢éÍÁÙŹÑé¹ à·èÒ¹Ñé¹ ¡ÒÃÊÃéÒ§ºÑ¿à¿ÍÃìãËÁè¢Öé¹ ÊÓËÃѺá¡éä¢á¿éÁ¢éÍÁÙÅÍѹ·ÕèÊͧ áÅéÇá¡éÍÐäúҧÍÂèҧ㹺ѿà¿ÍÃì¹Ñé¹ ¨ÐäÁèÁÕ¼Åã´ æ µèͺѿà¿ÍÃì¢Í§á¿éÁ¢éÍÁÙÅÍѹ·Õè˹Öè§·Ñé§ÊÔé¹ ¨Ø´¹Õé·ÓãËéÊÒÁÒöà¡çºá¿éÁ¢éÍÁÙÅááäÇéà¾×èÍ á¡éä¢ã¹µÍ¹ËÅѧ áµèàÇÅÒ·Õèµéͧ¡ÒèÐà¡çºÃÑ¡ÉÒ (save) ºÑ¿à¿ÍÃìŧä»ã¹á¿éÁ¢éÍÁÙÅ ´éǤÓÊÑè§ C-x C-s ¹Ñé¹ ¨ÐµéͧÊÇÔ·«ìä»ÂѧºÑ¿à¿ÍÃì·Õèµéͧ¡ÒèÐà¡çº ´éǤÓÊÑè§ C-x C-f «Ö觤è͹¢éÒ§ÂØè§ÂÒ¡ àÃÒÁÕ¤ÓÊÑè§«Öè§ ãªéÊÓËÃѺ¡ÒùÕéâ´Â੾ÒÐ ¤×Í C-x s à¡çºÃÑ¡ÉÒ (save) ·Ø¡ºÑ¿à¿ÍÃì·ÕèÁÕÍÂÙè C-x s ¨Ðà¡çºÃÑ¡ÉÒ·Ø¡ºÑ¿à¿ÍÃì·Õè¶Ù¡á¡éä¢à¹×éÍËÒä» Å§ã¹á¿éÁ¢éÍÁÙÅ â´Â¨Ð¶ÒÁ¡è͹ÇèÒ¨ÐãËé à¡çººÑ¿à¿ÍÃì¹ÕéäËÁ y ËÃ×Í n ¡ÑººÑ¿à¿ÍÃìáµèÅкѿà¿ÍÃì ¤Ó¶ÒÁ¨Ð»ÃÒ¡¯ã¹ÊèǹÅèÒ§¢Í§Ë¹éÒ¨Í ´Ñ§ µÑÇÍÂèÒ§¹Õé Save file /usr/private/yours/TUTORIAL.th? (y or n) ¡ÒâÂÒ¤ÓÊÑè§ (extension) ======================= ã¹â»Ãá¡ÃÁ Editor ¹Õé Áըӹǹ¤ÓÊÑè§ÁÒ¡¡ÇèÒ ¨Ó¹Ç¹¤ÓÊÑè§«Öè§ÊÒÁÒö¡´ä´éâ´Â»ØèÁ¤Í¹â·ÃÅ ËÃ×Í»ØèÁ META ä´éËÁ´ ¤ÓÊÑè§¢ÂÒ (eXtend) ÁÕäÇéà¾×èÍãËéÊÒÁÒöãªé¤ÓÊÑè§àËÅèÒ¹Õéä´éËÁ´ ÁÕÍÂÙè 2 Ẻ ´Ñ§¹Õé C-x ¢ÂÒÂà¾ÔèÁ´éǵÑÇÍÑ¡Éà ÊÓËÃѺ¡´µÑÇÍÑ¡ÉõÒÁà¢éÒä» 1 µÑÇ ESC x ¢ÂÒÂà¾ÔèÁ´éǪ×èͤÓÊÑè§ ÊÓËÃѺ¡´ª×èͤÓÊÑè§µÒÁà¢éÒä»·Ñé§ËÁ´ ¤ÓÊÑè§»ÃÐàÀ·¹Õé ¡çà»ç¹¤ÓÊÑè§·ÕèÁÕ»ÃÐ⪹ì áµèÊèǹãË­è¨Ð¶Ù¡àÃÕ¡ãªé ¹éͤÃÑé§¡ÇèÒ¤ÓÊÑè§·ÑèÇä» µÑÇÍÂèÒ§àªè¹ ¤ÓÊÑè§ËÒá¿éÁ¢éÍÁÙÅ (find) C-x C-f ¤ÓÊÑè§à¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ (save) C-x C-s ¤ÓÊÑè§ C-x C-c (àÅÔ¡ Editor) µèÒ§¡çà»ç¹Ë¹Öè§ã¹¤ÓÊÑè§àËÅèÒ¹Õé ¤ÓÊÑè§ C-z à»ç¹¤ÓÊÑè§·Õèãªéã¹ã¹¡ÒÃÍÍ¡¨Ò¡ Emacs ¤è͹¢éÒ§ºèÍ ¤ÓÊÑè§¹Õé¨ÐäÁè¡àÅÔ¡ Emacs àÅ·Õà´ÕÂÇ áµè¨ÐËÂØ´ Emacs äÇéªÑèǤÃÒÇ à¾×èÍãËéÊÒÁÒö¡ÅѺä»ãªé csh ä´éÍÕ¡ ¡Òá´ C-z ¨Ö§à»ç¹¡ÒÃËÂØ´ Emacs äÇéªÑèǤÃÒÇà·èÒ¹Ñé¹ ¨ÐäÁè·Ó¤ÇÒÁàÊÕÂËÒÂãËé¡Ñºà¹×éÍËÒ·Õèá¡éä¢ä» ËÁÒÂà˵Ø: áµè·ÇèÒ ã¹¡Ã³Õ·Õèãªéº¹ X-window ËÃ×Íãªé sh ÍÂÙè ¡ç¨ÐäÁèÁÕ¤ÇÒÁÊÒÁÒö¹Õé ¤ÓÊÑè§»ÃÐàÀ· C-x ÁÕÁÒ¡ÁÒÂËÅÒ¤ÓÊÑè§ ¤ÓÊÑè§·Õè͸ԺÒÂä»áÅéÇÁմѧ¹Õé C-x C-f ËÒá¿éÁ¢éÍÁÙÅ (find) ÊÓËÃѺá¡éä¢ C-x C-s à¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅ (save) C-x C-b áÊ´§ÃÒ¡Òúѿà¿ÍÃì (buffer list) C-x C-c àÅÔ¡¡ÒÃãªé Editor áÅÐà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙÅâ´ÂÍѵâ¹ÁÑµÔ áµè¶éÒËÒ¡ÁÕá¿éÁ ¢éÍÁÙźҧÍѹ¶Ù¡á¡éä¢ ¡çãËé¶ÒÁÇèÒ¨Ðà¡çºÃÑ¡ÉÒá¿éÁ¢éÍÁÙŹÑé¹äËÁ â´Â·ÑèÇä» ¡ÒÃÍÍ¡¨Ò¡ Emacs ·Óä´éâ´Â¤ÓÊÑè§ C-x C-s C-x C-c ¤×ÍãËéà¡çºÃÑ¡ÉÒ ¡è͹áÅéǨ֧àÅÔ¡ ¤ÓÊÑè§¢ÂÒÂà¾ÔèÁẺª×è͹Ñé¹ ãªéÊÓËÃѺ¤ÓÊÑè§·ÕèäÁè¤èÍÂä´éãªé ËÃ×ͤÓÊÑè§·Õèãªé੾ÒСѺâËÁ´¾ÔàÈɺҧ âËÁ´ µÑÇÍÂèÒ§àªè¹ ¤ÓÊÑè§ "command-apropos" «Ö觨жÒÁ ¤ÕÂìàÇÔÃì´ (keyword) áÅéÇáÊ´§¼Å ¤ÓÊÑè§·Ø¡¤ÓÊÑè§·ÕèÁÕª×èÍà¡ÕèÂÇ¢éͧ¡Ñº¡Ñº¤ÕÂìàÇÔÃì´¹Ñé¹ àÇÅÒ¨ÐÊÑ觤ÓÊÑè§¹Õé ¡çãËé¡´ ESC x áÅéǨÐÁÕµÑÇÍÑ¡Éà "M-x" »ÃÒ¡¯¢Öé¹·ÕèÊèǹÅèÒ§¢Í§¨Í ¨Ò¡¹Ñ鹡çãËéãÊèª×èͤÓÊÑè§·Õèµéͧ¡Òà (㹡óչÕé¤×Í "command-apropos") àÁ×èÍ»é͹¢éÍÁÙÅä»¶Ö§ "command-a" áÅéÇ¡´ SPACE BAR Êèǹ·ÕèàËÅ×ͧ͢ ª×èͤÓÊÑè§¡ç¨Ð¶Ù¡àµÔÁàµçÁ (completion) ãËéàͧâ´ÂÍѵâ¹ÁÑµÔ ËÅѧ¨Ò¡¹Ñé¹ ¨Ð¶Ù¡¶ÒÁ¤ÕÂìàÇÔÃì´ ¡çãËé ¡´ÊÒÂÍÑ¡¢ÃÐ (string) ·Õèµéͧ¡ÒÃÃÙéÅ§ä» µéͧäÁèãÊè¤ÕÂìàÇÔÃì´ÍÐäÃàÅ ¡ç¨Ðä´é¤ÓÊÑè§·Ñé§ËÁ´·ÕèÁÕÍÂÙè >> Åͧ¡´ ESC x µÒÁ´éÇ "command-apropos" ËÃ×Í "command-a" ËÅѧ¨Ò¡¹Ñ鹡硴 "kanji" ´Ù ãËé¡´ C-x 1 àÇÅÒµéͧ¡ÒèÐź "ÇÔ¹â´Çì" ·Õèâ¼Åè¢Öé¹ÁÒãËÁè ºÃ÷ѴâËÁ´ (Mode Line) ===================== àÇÅÒ·Õè¾ÔÁ¾ì¤ÓÊÑè§à¢éÒ仪éÒ æ Emacs ¨ÐáÊ´§ÊÔè§·Õè¾ÔÁ¾ìŧ仵çºÃ÷ѴÅèÒ§ÊØ´¢Í§¨Í«Öè§àÃÕ¡ ÇèÒ echo area ºÃ÷Ѵ«Öè§ÍÂÙè¶Ñ´¢Öé¹ÁÒ˹Ö觺Ã÷Ѵ àÃÕ¡ÇèÒºÃ÷ѴâËÁ´ (mode line) ºÃ÷Ѵ âËÁ´ÁÕÅѡɳдѧ¹Õé [--]J:--**-Mule: TUTORIAL.th (Fundamental) ---NN%-------------- ËÁÒÂà˵Ø: µÃ§Êèǹ NN ¢Í§ NN% ¨ÐÁÕµÑÇàÅ¢ãÊèÍÂÙè ºÃ÷ѴâËÁ´·ÕèáÊ´§ÍÂÙèÍÒ¨¨ÐᵡµèÒ§ 仨ҡµÑÇÍÂèÒ§ºéÒ§ áµè¡çäÁèà»ç¹äà µÑÇÍÂèÒ§àªè¹ ÍÒ¨¨ÐÁÕàÇÅÒËÃ×Í uptime áÊ´§¼ÅÍÂÙè Íѹ¹Õéà»ç¹¤ÇÒÁÊÒÁÒö¢Í§â»Ãá¡ÃÁ display-time ºÃ÷Ѵ¹ÕéÁÕ¢éÍÁÙÅ·Õèà»ç¹»ÃÐ⪹ìÍÂÙèËÅÒÂÍÂèÒ§ ¢éÍÁÙÅáá¤×Í ª×èÍá¿éÁ¢éÍÁÙÅ·Õè¡ÓÅѧÍèÒ¹ÍÂÙè µÑÇàÅ¢ NN% ¨ÐáÊ´§ãËéÃÙéÇèÒ¡ÓÅѧáÊ´§¼ÅÊèǹä˹ ¢Í§á¿éÁ¢éÍÁÙÅÍÂÙè â´Â¤Ô´à»ç¹à»ÍÃìૹµì ¶éÒà»ç¹Êèǹº¹ÊØ´¢Í§á¿éÁ¢éÍÁÙÅÍÂÙè¡ç¨ÐÁÕ¢éͤÇÒÁÇèÒ --Top-- áÊ´§ÍÂÙè ¶éÒà»ç¹ÊèǹÅèÒ§ÊØ´¡ç¨ÐÁÕ¢éͤÇÒÁÇèÒ --Bot-- ¶éÒËÒ¡ÊÒÁÒöáÊ´§á¿éÁ¢éÍÁÙÅ ·Ñé§ËÁ´º¹Ë¹éÒ¨Íä´é ¡ç¨ÐÁÕ¢éͤÇÒÁÇèÒ --All-- áÊ´§ÍÂÙè ÀÒÂã¹Ç§àÅ红ͧºÃ÷ѴâËÁ´ ¨ÐáÊ´§ãËéÃÙéÇèҵ͹¹ÕéÍÂÙèã¹âËÁ´ (mode) ÍÐäà 㹵ÑÇÍÂèÒ§ ¢éÒ§º¹¤×Í ÍÂÙèã¹âËÁ´ Fundamental «Öè§à»ç¹âËÁ´àÃÔèÁµé¹ (default) âËÁ´¹Õéà»ç¹Ë¹Öè§ã¹âËÁ´ ËÅÑ¡ (Major Mode) Emacs ÁÕâËÁ´ËÅÑ¡ (Major Mode) ÊÓËÃѺ¡ÒÃâ»Ãá¡ÃÁÀÒÉÒ ËÃ×Í¡ÒÃá¡é¢éͤÇÒÁ àªè¹ Lisp mode Text mode áÅÐâËÁ´Í×è¹ æ ÍÕ¡ËÅÒÂâËÁ´ â´Â»¡µÔ Emacs ¨ÐÍÂÙèã¹âËÁ´ËÅÑ¡ âËÁ´ã´âËÁ´Ë¹Öè§àÊÁÍ ¤ÓÊÑ觺ҧ¤ÓÊÑ觨ÐÁվĵԡÃÃÁ·ÕèᵡµèÒ§¡Ñ¹â´ÂÊÔé¹àªÔ§ àÁ×èÍÍÂÙèã¹âËÁ´ËÅÑ¡·ÕèµèÒ§¡Ñ¹ µÑÇÍÂèÒ§ àªè¹ àÇÅÒâ»Ãá¡ÃÁÀÒÉÒ ¨ÐÁÕ¤ÓÊÑè§ÊÓËÃѺÊÃéÒ§ ËÁÒÂà赯 (comment) ÍÂÙè à¹×èͧ¨Ò¡ÇÔ¸ÕãÊè ËÁÒÂà˵آͧÀÒÉÒáµèÅÐÀÒÉÒᵡµèÒ§¡Ñ¹ ¤ÓÊÑè§¹Õé¡ç¨ÐᵡµèÒ§¡Ñ¹ä»ã¹áµèÅÐâËÁ´ËÅÑ¡ à¾×èÍãËé ÊÒÁÒöãÊèËÁÒÂà˵Øã¹áµèÅÐÀÒÉÒä´éÍÂèÒ§¶Ù¡µéͧ ¤ÓÊÑè§ÊÓËÃѺ¡ÒÃà»ÅÕè¹âËÁ´ãËéà»ç¹âËÁ´ËÅÑ¡Í×è¹ ¤×ͤÓÊÑè§¢ÂÒ (extend) «Ö觪×èͤÓÊÑè§à»ç¹ª×èÍ âËÁ´ µÑÇÍÂèÒ§àªè¹ ¤ÓÊÑè§ M-x fundamental-mode ¤×ͤÓÊÑè§ÊÓËÃѺà»ÅÕè¹âËÁ´à»ç¹âËÁ´ Fundamental àÇÅÒ·Õè¨Ðá¡éä¢á¿éÁ¢éÍÁÙÅÀÒÉÒÍѧ¡ÄÉ ¡çãËéãªé Text mode >> Åͧ»é͹¤ÓÊÑè§ M-x text-mode ¶éÒµéͧ¡ÒÃËÒ¢éÍÁÙÅà¾ÔèÁà¡ÕèÂǡѺâËÁ´ËÅÑ¡·ÕèãªéÍÂÙè㹻Ѩ¨ØºÑ¹ ¡çãËé»é͹¤ÓÊÑè§ C-h m >> ãËé¡´ C-h m à¾×èÍÈÖ¡ÉÒ¢éÍᵡµèÒ§ÃÐËÇèÒ§ Text mode ¡Ñº Fundamental mode >> ãËé¡´ C-x 1 à¾×èÍźàÍ¡ÊÒÃÍÍ¡¨Ò¡¨Í µÃ§Êèǹ«éÒ¢ͧºÃ÷ѴâËÁ´ ¨ÐÁÕÊÑ­Åѡɳì '[--]' à¾×èÍáÊ´§âËÁ´ÊÓËÃѺ¡Òûé͹¢éÍÁÙÅ (input mode) ÍÂÙè ÊÑ­Åѡɳì [--] ËÁÒ¶֧ÊÒÁÒö»é͹¢éÍÁÙÅä´é´éǵÑÇÍÑ¡ÉÃÀÒÉÒÍѧ¡ÄÉ (English alphabets) ¡ÃسÒÍèÒ¹¤ÙèÁ×ͧ͢ "Tamago" ÊÓËÃѺÃÒÂÅÐàÍÕ´¢Í§ÇÔ¸Õãªé áÅеç´éÒ¹¢ÇҢͧÊÑ­Åѡɳì¹Ñé¹ ¨ÐÁÕà¤Ã×èͧËÁÒÂáÊ´§Ê¶Ò¹Ð¢Í§ flag ¢Í§ÃкºÃËÑÊ (coding-system) ÍÂÙè Mule ÊÒÁÒö¡Ó˹´ÃкºÃËÑÊá¡੾ÒÐÊÓËÃѺ ¡ÒÃà¡çºÍèÒ¹á¿éÁ¢éÍÁÙÅ ¡Òûé͹¢éÍÁÙŨҡ¤ÕÂìºÍÃì´ ¡ÒÃáÊ´§¼ÅÍÍ¡·Ò§¨Í ä´éÍÔÊÃШҡ¡Ñ¹ áµèâ´Â»¡µÔ¨ÐáÊ´§à©¾ÒÐ ÊÑ­ÅѡɳìªèÇÂ¨Ó (mnemonic) ¢Í§ÃкºÃËÑÊÊÓËÃѺ¡ÒÃà¡çºÍèÒ¹á¿éÁ¢éÍÁÙÅ à·èÒ¹Ñé¹ >> µÃǨ´ÙÇèÒÁÕÊÑ­ÅÑ¡É³ì ¤ÅéÒ¤ÅÖ§¡Ñº "J:" "S:" "E:" áÊ´§ÍÂÙè·ÕèºÃ÷ѴâËÁ´ËÃ×ÍäÁè µÑÇÍÑ¡ÉõÑÇáá¤×Í ÊÑ­ÅѡɳìªèÇÂ¨Ó (mnemonic) ¢Í§ÃкºÃËÑÊ·ÕèãªéÍÂÙè µÑÇ ':' áÊ´§ãËéÃÙé ÇèÒÁÕµÑÇÍÑ¡ÉâͧÀÒÉÒÍ×è¹ ¹Í¡¨Ò¡ÀÒÉÒÍѧ¡ÄÉáÊ´§ÍÂÙè (àªè¹ ÀÒÉÒ¨Õ¹ ÀÒÉÒ­Õè»Øè¹ à»ç¹µé¹) µÑÇ J ËÁÒ¶֧ ÃËÑÊ·Õèãªé¡Ñº JUNET ¤×Í ÃËÑÊ JIS µÑÇ S ËÁÒ¶֧ Shift-JIS áÅÐ µÑÇ E ËÁÒ¶֧ ÃËÑÊ EUC ÀÒÉÒ­Õè»Øè¹ ¨ÐÊÅѺà»ÅÕè¹ (toggle) ¡ÒÃáÊ´§¼ÅÀÒÉÒ¹Ò¹ÒªÒµÔä´éâ´Â C-x C-k t µÑÇÍÂèÒ§¢éÒ§ÅèÒ§ ¤×Í¡ÒÃÊÅѺà»ÅÕè¹äÁèãËéáÊ´§ÀÒÉÒ¹Ò¹ÒªÒµÔ áÅéÇÊÅѺ¡ÅѺÍÕ¡¤ÃÑé§Ë¹Öè§ >> Åͧ»é͹¤ÓÊÑè§ C-x C-k t ´ÙÊͧ¤ÃÑé§ ¶éÒà·ÍÃìÁÔ¹ÑÅ·ÕèãªéÍÂÙèÁÕ»ØèÁ META áÅÐâËÁ´·ÕèãªéÍÂÙèà»ç¹ÃËÑÊ JIS àÃÒ¡ç¨ÐÊÒÁÒöãªé»ØèÁ META á·¹¡Òá´»ØèÁ ESCAPE ä´é ÇÔ¸Õãªé¨ÐàËÁ×͹¡Ñº¡ÒÃãªé»ØèÁ¤Í¹â·ÃÅ ¤×ÍãËé¡´»ØèÁ META ¤éÒ§äÇéáÅéǨ֧ ¡´µÑÇÍÑ¡ÉõÒÁ M-<µÑÇÍÑ¡ÉÃ> ¨Ð·Ó˹éÒ·ÕèàËÁ×͹¡Ñº ESC <µÑÇÍÑ¡ÉÃ> ¹Ñ蹤×Í ·Ø¡ÍÂèÒ§·Õè͸ԺÒÂÁÒ ¨¹¶Ö§¨Ø´¹Õé ¨ÐÂѧ¤§ÁÕ¼ÅàËÁ×͹à´ÔÁ ËÅѧ¨Ò¡à»ÅÕè¹ ESC <µÑÇÍÑ¡ÉÃ> ãËéà»ç¹ M-<µÑÇÍÑ¡ÉÃ> áµè¢éÍ ¤ÇÃÃÐÇѧ¡ç¤×Í »ØèÁ META ¨ÐäÁèÊÒÁÒöãªéä´é¡ÑºÃËÑÊ Shift-JIS áÅÐ EUC ¡ÒÃà»ÅÕè¹ÃкºÃËÑʨÐÁÕ¼Åá¤èà¾Õ§¡ÑºáµèÅкѿà¿ÍÃìà·èÒ¹Ñé¹ ÊÒÁÒö´Ù¤ÓÊÑè§à¡ÕèÂǡѺÃкºÃËÑÊ ä´éâ´Â¤ÓÊÑè§ C-h a coding-system >> ãËé»é͹¤ÓÊÑè§ C-h a coding-system áÅéÇÍèÒ¹ÃÒÂÅÐàÍÕ´¢Í§¤ÓÊÑè§ set-display-coding-system set-file-coding-system áÅÐ set-process-coding-system ¨Ò¡àÍ¡ÊÒ÷Õè»ÃÒ¡¯¢Öé¹ ¡Òäé¹ËÒ (search) ================ Emacs ÊÒÁÒö¤é¹ËÒÊÒÂÍÑ¡¢ÃÐ (string) ÀÒÂã¹á¿éÁ¢éÍÁÙÅä»·Ò§¢éҧ˹éÒËÃ×Í¢éÒ§ËÅѧä´é ¶éÒµéͧ¡Òäé¹ËÒä»·Ò§¢éҧ˹éҢͧµÓá˹è§à¤ÍÃìà«ÍÃì (cursor) ¡çãËé¡´ C-s ¶éÒµéͧ¡Òäé¹ËÒ ä»·Ò§¢éÒ§ËÅѧ¢Í§µÓá˹è§à¤ÍÃìà«ÍÃì ¡çãËé¡´ C-r ËÅѧ¨Ò¡¹Ñ鹨ÐÁÕ¢éͤÇÒÁÇèÒ "I-search:" »ÃÒ¡¯¢Ö鹵ç echo area ¡àÅÔ¡¡Òäé¹ËÒä´é´éÇ¡Òá´ ESC >> ¡´ C-s à¾×èÍàÃÔèÁ¡Òäé¹ËÒ áÅéÇ¡´µÑÇÍÑ¡Éâͧ¤ÓÇèÒ "cursor" ŧ价ÕÅеÑÇÍÂèÒ§ ªéÒ áÅéÇÊѧࡵ´ÙÇèÒà¤ÍÃìà«ÍÃì¢ÂѺä»ÍÂèÒ§äà >> Åͧ¡´ C-s ´ÙÍա˹Ö觤ÃÑé§à¾×èͤé¹ËÒ¤ÓÇèÒ "cursor" µÑǵèÍä» >> ¡´ ´Ù 4 ¤ÃÑé§ áÅéÇÊѧࡵ´ÙÇèÒ¡ÒÃà¤Å×è͹·Õè¢Í§à¤ÍÃìà«ÍÃì >> ¡´ ESC à¾×èÍ¡àÅÔ¡¡Òäé¹ËÒ ¡Òäé¹ËÒ¨ÐàÃÔèÁ¢Ö鹷ѹ·Õ ã¹ÃÐËÇèÒ§·Õè¾ÔÁ¾ìÊÒÂÍÑ¡¢ÃзÕèµéͧ¡ÒèФé¹ËÒ à¢éÒä»à¾Õ§ºÒ§Êèǹ ¶éÒµéͧ¡ÒèФé¹ËÒµÑǵèÍä» ¡çãËé¡´ C-s Íա˹Ö觤ÃÑé§ ¶éÒËÒ¡¤é¹ËÒÊÒÂÍÑ¡¢ÃзÕè»é͹à¢éÒä»äÁ辺 ¡ç ¨ÐÁÕ¢éͤÇÒÁ»ÃÒ¡¯¢Öé¹ ãËé¡´ C-g à¾×èÍ¡àÅÔ¡ ÃÐËÇèÒ§·Õè¤é¹ËÒÍÂÙè ¶éÒ¡´ µÑÇÍÑ¡ÉõÑÇÊØ´·éÒÂã¹ÊÒÂÍÑ¡¢ÃСç¨Ð¶Ù¡Åºä» áÅéÇ à¤ÍÃìà«ÍÃì¡ç¨Ð¡ÅѺ仵Óá˹觡è͹˹éÒ µÑÇÍÂèÒ§àªè¹ ¶éÒ¡´ "cu" ¡ç¨Ð¤é¹ËÒä»¶Ö§µÓá˹觷ÕèÁÕ¤ÓÇèÒ "cu" áµè¶éÒ¡´ 㹨ѧËÇйÕé µÑÇ 'u' ã¹ search line ¡ç¨ÐËÒÂä» áÅéÇà¤ÍÃìà«ÍÃì ¨Ð¢ÂѺ¡ÅѺ价ÕèµÓá˹觷ÕèÁÕµÑÇ 'c' ÍÂÙè ¶éÒ¡´µÑÇÍÑ¡Éä͹â·ÃÅ (control character) µÑÇÍ×è¹ ¹Í¡à˹×ͨҡ C-s ËÃ×Í C-r ¡Òäé¹ËÒ¡ç¨ÐÊÔé¹Êشŧ ¤ÓÊÑè§ C-s ¨Ð¤é¹ËÒÊÒÂÍÑ¡¢ÃзÕèµéͧ¡Òà 价ҧ¢éҧ˹éҢͧµÓá˹è§à¤ÍÃìà«ÍÃì ¶éÒµéͧ¡Òà ¤é¹ËÒä»·Ò§·ÔÈËÅѧ ¡çãËé¡´ C-r ¹Ñ蹤×Í ÊÒÁÒöãªé C-s áÅÐ C-r ÊÅѺ¡Ñ¹à¾×èͤé¹ËÒä»ä´éã¹·Ñé§ Êͧ·ÔÈ·Ò§ C-s áÅÐ C-r ·Ó˹éÒ·ÕèàËÁ×͹¡Ñ¹·Ø¡»ÃСÒà ¨ÐµèÒ§¡Ñ¹¡çµÃ§·ÔÈ·Ò§¡Òäé¹ËÒà·èÒ¹Ñé¹ Recursive Editing Level ºÒ§·Õ àÃÒÍÒ¨¨ÐËÅØ´à¢éÒä»ÍÂÙèã¹Ê¶Ò¹Ð·ÕèàÃÕ¡ÇèÒ Recursive Editing Level ä´éâ´Â äÁèµÑé§ã¨ ã¹âËÁ´¹Õé à¤Ã×èͧËÁÒÂǧàÅçº '()' ·ÕèáÊ´§ª×èÍâËÁ´ËÅÑ¡ (major mode) ÍÂÙè¨ÐÁÕǧàÅçº '[]' ÅéÍÁ à¾ÔèÁ¢Öé¹Íա˹Ö觪Ñé¹ µÑÇÍÂèÒ§àªè¹ ¶éÒà´ÔÁà»ç¹ (Fundamental) ÍÂÙè ¡ç¨Ðà»ÅÕè¹à»ç¹ [(Fundamental)] á·¹ ËÁÒÂà˵Ø: àÃÒ¨ÐäÁè͸ԺÒÂà¡ÕèÂǡѺ Recursive Editing Level ã¹·Õè¹Õé ãËé¡´ M-x top-level à¾×èÍ·Õè¨ÐÍÍ¡¨Ò¡ Recursive Editing Level >> Åͧ¡´´Ù µÃ§ÊèǹÅèÒ§¢Í§¨Í¨ÐÁÕ¢éͤÇÒÁÇèÒ "Back to top level" »ÃÒ¡¯¢Öé¹ à¹×èͧ¨Ò¡ àÃÒÍÂÙèã¹ÃдѺº¹ÊØ´ (top level) ÍÂÙèáÅéÇ ¤ÓÊÑè§¹Õé¨Ö§äÁèÁÕ¼Åã´ æ äÁèÊÒÁÒöãªé ¤ÓÊÑè§ C-g à¾×èÍ·Õè¨ÐÍÍ¡¨Ò¡ Recursive Editing Level ä´é Help ==== Emacs ÁÕ¤ÇÒÁÊÒÁÒö·ÕèÁÕ»ÃÐ⪹ì ÁÒ¡ÁÒÂËÅÒÂÍÂèÒ§ «Öè§äÁèÊÒÁÒö͸ԺÒÂä´éËÁ´ã¹·Õè¹Õé áµèàÃÒ¨ÐÊÒÁÒöàÃÕ¡ãªé à¾×èÍ·Õè¨ÐàÃÕ¹ÃÙé¤ÇÒÁÊÒÁÒöàËÅèÒ¹Õé ä´éâ´Â¡Òá´ C-h «Ö觨РªèÇÂãËéàÃÒä´éÃѺÃÙé¢éÍÁÙÅà¾ÔèÁàµÔÁËÅÒÂÍÂèÒ§ ÇÔ¸Õãªé¤×ÍãËé¡´ C-h áÅéǵÒÁ´éǵÑÇàÅ×Í¡ (option) Íա˹Öè§µÑÇÍÑ¡Éà ¶éÒäÁèÃÙéÇèҨеéͧãªé µÑÇàÅ×Í¡ÍÐäà ¡çãËé¡´ C-h ? áÅéǨÐÁÕ¤Ó͸ԺÒÂà¡ÕèÂǡѺµÑÇàÅ×Í¡»ÃÒ¡¯¢Öé¹ ä´éËÒ¡à»ÅÕè¹㨨РäÁèàÃÕ¡ HELP ËÅѧ¨Ò¡¡´ C-h ¡çãËé¡´ C-g à¾×èÍ¡àÅÔ¡ä´é ¤ÓÊÑè§ HELP ¾×é¹°Ò¹·ÕèÊØ´Íѹ˹Öè§¡ç¤×Í C-h c áÅéǵÒÁ´éÇ¡Òá´¤ÓÊÑ觺ҧ¤ÓÊÑè§ «Ö觨ÐãËé¤Ó ͸ԺÒÂÊÑé¹ æ à¡ÕèÂǡѺ¤ÓÊÑè§¹Ñé¹ >> Åͧ¡´ C-h c C-p ´Ù «Ö觨ÐãËé¢éͤÇÒÁÇèÒ "C-p runs the command previous-line" ¤ÓÊÑè§¹Õé¨ÐªèÇÂÃ×éÍ¿×鹤ÇÒÁ¨Ó à¡ÕèÂǡѺ¤ÓÊÑè§·Õèà¤Â¼èÒ¹µÒáÅéÇ áµè¨ÓäÁèä´é ä´éà»ç¹ÍÂèÒ§´Õ ¤ÓÊÑè§ ·ÕèÁÕÁÒ¡¡ÇèÒ˹Öè§µÑÇÍÑ¡Éà àªè¹ C-x C-s ¡çÊÒÁÒö¡´µÒÁËÅѧ C-h c ä´é ¶éÒËÒ¡µéͧ¡ÒÃÃÙéÃÒÂÅÐàÍÕ´ÁÒ¡¡ÇèÒ¹Õé ¡çãËéãªé k á·¹µÑÇ c >> Åͧ¡´ C-h k C-p ´Ù ¡ç¨ÐÁÕÇÔ¹â´Çìà¾ÔèÁã¹ Emacs Íա˹Öè§Íѹ à¾×èÍáÊ´§ÃÒÂÅÐàÍÕ´¢Í§¤ÓÊÑè§¹Ñé¹ àÁ×èÍÍèÒ¹¨ºáÅéÇ ¡çãËé¡´ C-x 1 à¾ÔèÁźÇÔ¹â´ÇìÍÍ¡ µÑÇàÅ×Í¡Í×è¹·ÕèÁÕ»ÃÐ⪹ì Áմѧ¹Õé C-h f ãËéãÊèª×èͧ͢¤ÓÊÑè§ à¾×èÍáÊ´§ÃÒÂÅÐàÍÕ´à¡ÕèÂǡѺ¤ÓÊÑè§¹Ñé¹ >> ãËé¡´ C-h f previous-line áÅéǵÒÁ´éÇ à¾×èÍáÊ´§ÃÒÂÅÐàÍÕ´à¡ÕèÂÇ ¡Ñº¤ÓÊÑè§«Öè§àÃÕ¡ãªéä´é¨Ò¡¡Òá´ C-p C-h a áÅéǵÒÁ´éǤÕÂìàÇÔÃì´ (keyword) à¾×èÍáÊ´§¤ÓÊÑè§·Ø¡¤ÓÊÑè§ ·ÕèÁÕ¤ÕÂìàÇÔÃì´ ÃÇÁÍÂÙè ¤ÓÊÑè§àËÅèÒ¹ÕéÊÒÁÒöàÃÕ¡ãªéä´éâ´Â¡Òá´ ESC x >> Åͧ¡´ C-h a file áÅéǵÒÁ´éÇ à¾×èÍáÊ´§ª×èͤÓÊÑè§·Ø¡¤ÓÊÑè§·ÕèÁÕ¤ÓÇèÒ "file" ÃÇÁÍÂÙè «Ö觨ÐÁÕ find-file áÅÐ write-file ·ÕèàÃÕ¡ãªéä´éâ´Â¡Òá´ C-x C-f áÅÐ C-x C-w ÃÇÁÍÂÙè´éÇ ·éÒÂÊØ´¹Õé ====== ÍÂèÒÅ×Á: ¤ÓÊÑè§ÊÓËÃѺ¡ÒÃàÅÔ¡ Emacs ¤×Í C-x C-c àÍ¡ÊÒéºÑºàº×éͧµé¹¹Õé µÑé§ã¨à¢Õ¹¢Öé¹ÊÓËÃѺ¼Ùé·ÕèàÃÔèÁËÑ´ãËÁè â´Â੾ÒÐ ¶éÒËÒ¡Áըشä˹·ÕèäÁè à¢éÒ㨠¡çÍÂèÒÁÑÇáµèâ·ÉµÑÇàͧ áµè¢ÍãËé⹤ÇÒÁ¼Ô´ÁÒÂѧ¼Ùéà¢Õ¹᷹ ËÅѧ¨Ò¡ãªé EMACS ´ÙÊÑ¡ÊͧÊÒÁÇѹ ¡ç¤§¨ÐªÔ¹ä»àͧ 㹵͹áá ÍÒ¨¨ÐÁըش·ÕèÃÙéÊÖ¡ÊѺʹáÅÐ äÁèà¢éÒã¨ÍÂÙèºéÒ§ áµèÊÔè§¹ÕéÂèÍÁà¡Ô´¢Öé¹àÊÁÍ àÇÅÒáµèàÃÔèÁãªé Editor ãËÁèã´ æ ¡çµÒÁ â´Â੾ÒÐ ÍÂèÒ§ÂÔ觡Ѻ EMACS à¹×èͧ¨Ò¡à»ç¹â»Ãá¡ÃÁ·ÕèÁÕ¤ÇÒÁÊÒÁÒöËÅÒ¡ËÅÒÂÁÒ¡ Íѹ·Õè¨ÃÔ§áÅéÇ EMACS ·Óä´é·Ø¡ÊÔè§·Ø¡ÍÂèÒ§ ¢Í¢Íº¤Ø³ ======= àÍ¡ÊÒéºÑº¹Õé ´Ñ´á»Å§ÁÒ¨Ò¡ "MicroEMACS (kemacs) ÀÒÉÒ­Õè»Øè¹ àº×éͧµé¹" «Öè§ä´éÁÒ¨Ò¡ JUNET à¾×èÍãËéãªéà»ç¹ Tutorial ÊÓËÃѺ GNUEmacs (Nemacs) àÍ¡ÊÒùÕé ´Ñ´á»Å§ÁÒ¨Ò¡ "JOVE Tutorial" (19 Á¡ÃÒ¤Á 86) ¢Í§ Jonathan Payne «Öè§´Ñ´á»Å§ÁÒ¨Ò¡àÍ¡ÊÒâͧ Steve Zimmerman áËè§ CCA-UNIX «Öè§´Ñ´á»Å§ (ÍÕ¡·Õ) ÁÒ ¨Ò¡àÍ¡ÊÒà "Teach-Emacs" ©ºÑºàº×éͧµé¹ (31 µØÅÒ¤Á 85) ¢Í§ MIT Update - February 1986 by Dana Hoggatt. Update - December 1986 by Kim Leburg. Update/Translate - July 1987 by SANETO Takanori ¢Í¢Íº¤Ø³à»ç¹¾ÔàÈÉ ============== ¤Ø³ SANETO Takanori («Òà¹âµÐ ·Ò¡Òâ¹ÃÔ) ¼Ùéá»ÅÀÒÉÒ­Õè»Øè¹©ºÑºáÃ¡ÊØ´ àÍ¡ÊÒéºÑº¹Õé à¢Õ¹´éÇ GMW + Wnn + Nemacs ¢ÍáÊ´§¤ÇÒÁ¢Íº¤Ø³ á´è¼Ùé·ÕèÊÃéÒ§â»Ãá¡ÃÁÊØ´ÇÔàÈÉàËÅèÒ¹Õé¢Öé¹ áÅТ͢ͺ¤Ø³ ¤Ø³ Fujiwara Shoko ·ÕèãËé¤ÇÒÁªèÇÂàËÅ×Í㹡ÒÃá»Å ¡Òûé͹¢éÍÁÙÅ áÅÐÍÂèÒ§Í×è¹ÍÕ¡ ËÅÒ æ ÍÂèÒ§ ¢ÍÃѺ¼Ô´ªÍº ¡ÒÃá»Å·Õè¼Ô´¾ÅÒ´ ¢éÍÁÙÅà·ç¨ áÅÐÍ×è¹ æ äÇéáµèà¾Õ§¼Ùéà´ÕÂÇ «Ø«Ù¡Ô ÎÔâÃ⹺Ø@sra.co.jp Update/Add - December 1987 by Hironobu Suzuki Update/Add - November 1989 by Ken'ichi Handa Update/Add - January 1990 by Shigeki Yoshida Update/Add - March 1992 by Kenichi HANDA Translated into Thai - September 1994 by Manop Wongsaisuwan xemacs-21.4.22/etc/XKeysymDB0000644000175000017500000001110206256071510013552 0ustar acsacs! $XConsortium: XKeysymDB,v 1.13 94/04/13 18:07:58 gildea Exp $ ! Copyright 1993 Massachusetts Institute of Technology ! ! Permission to use, copy, modify, distribute, and sell this software and ! its documentation for any purpose is hereby granted without fee, provided ! that the above copyright notice appear in all copies and that both that ! copyright notice and this permission notice appear in supporting ! documentation, and that the name of M.I.T. not be used in advertising or ! publicity pertaining to distribution of the software without specific, ! written prior permission. M.I.T. makes no representations about the ! suitability of this software for any purpose. It is provided "as is" ! without express or implied warranty. hpmute_acute :100000A8 hpmute_grave :100000A9 hpmute_asciicircum :100000AA hpmute_diaeresis :100000AB hpmute_asciitilde :100000AC hplira :100000AF hpguilder :100000BE hpYdiaeresis :100000EE hpIO :100000EE hplongminus :100000F6 hpblock :100000FC apLineDel :1000FF00 apCharDel :1000FF01 apCopy :1000FF02 apCut :1000FF03 apPaste :1000FF04 apMove :1000FF05 apGrow :1000FF06 apCmd :1000FF07 apShell :1000FF08 apLeftBar :1000FF09 apRightBar :1000FF0A apLeftBox :1000FF0B apRightBox :1000FF0C apUpBox :1000FF0D apDownBox :1000FF0E apPop :1000FF0F apRead :1000FF10 apEdit :1000FF11 apSave :1000FF12 apExit :1000FF13 apRepeat :1000FF14 hpModelock1 :1000FF48 hpModelock2 :1000FF49 hpReset :1000FF6C hpSystem :1000FF6D hpUser :1000FF6E hpClearLine :1000FF6F hpInsertLine :1000FF70 hpDeleteLine :1000FF71 hpInsertChar :1000FF72 hpDeleteChar :1000FF73 hpBackTab :1000FF74 hpKP_BackTab :1000FF75 apKP_parenleft :1000FFA8 apKP_parenright :1000FFA9 I2ND_FUNC_L :10004001 I2ND_FUNC_R :10004002 IREMOVE :10004003 IREPEAT :10004004 IA1 :10004101 IA2 :10004102 IA3 :10004103 IA4 :10004104 IA5 :10004105 IA6 :10004106 IA7 :10004107 IA8 :10004108 IA9 :10004109 IA10 :1000410A IA11 :1000410B IA12 :1000410C IA13 :1000410D IA14 :1000410E IA15 :1000410F IB1 :10004201 IB2 :10004202 IB3 :10004203 IB4 :10004204 IB5 :10004205 IB6 :10004206 IB7 :10004207 IB8 :10004208 IB9 :10004209 IB10 :1000420A IB11 :1000420B IB12 :1000420C IB13 :1000420D IB14 :1000420E IB15 :1000420F IB16 :10004210 DRemove :1000FF00 Dring_accent :1000FEB0 Dcircumflex_accent :1000FE5E Dcedilla_accent :1000FE2C Dacute_accent :1000FE27 Dgrave_accent :1000FE60 Dtilde :1000FE7E Ddiaeresis :1000FE22 osfCopy :1004FF02 osfCut :1004FF03 osfPaste :1004FF04 osfBackTab :1004FF07 osfBackSpace :1004FF08 osfClear :1004FF0B osfEscape :1004FF1B osfAddMode :1004FF31 osfPrimaryPaste :1004FF32 osfQuickPaste :1004FF33 osfPageLeft :1004FF40 osfPageUp :1004FF41 osfPageDown :1004FF42 osfPageRight :1004FF43 osfActivate :1004FF44 osfMenuBar :1004FF45 osfLeft :1004FF51 osfUp :1004FF52 osfRight :1004FF53 osfDown :1004FF54 osfPrior :1004FF55 osfNext :1004FF56 osfEndLine :1004FF57 osfBeginLine :1004FF58 osfEndData :1004FF59 osfBeginData :1004FF5A osfPrevMenu :1004FF5B osfNextMenu :1004FF5C osfPrevField :1004FF5D osfNextField :1004FF5E osfSelect :1004FF60 osfInsert :1004FF63 osfUndo :1004FF65 osfMenu :1004FF67 osfCancel :1004FF69 osfHelp :1004FF6A osfSelectAll :1004FF71 osfDeselectAll :1004FF72 osfReselect :1004FF73 osfExtend :1004FF74 osfRestore :1004FF78 osfSwitchDirection :1004FF7E osfPriorMinor :1004FFF5 osfNextMinor :1004FFF6 osfRightLine :1004FFF7 osfLeftLine :1004FFF8 osfDelete :1004FFFF SunFA_Grave :1005FF00 SunFA_Circum :1005FF01 SunFA_Tilde :1005FF02 SunFA_Acute :1005FF03 SunFA_Diaeresis :1005FF04 SunFA_Cedilla :1005FF05 SunF36 :1005FF10 SunF37 :1005FF11 SunSys_Req :1005FF60 SunProps :1005FF70 SunFront :1005FF71 SunCopy :1005FF72 SunOpen :1005FF73 SunPaste :1005FF74 SunCut :1005FF75 SunPowerSwitch :1005FF76 SunAudioLowerVolume :1005FF77 SunAudioMute :1005FF78 SunAudioRaiseVolume :1005FF79 SunVideoDegauss :1005FF7A SunVideoLowerBrightness :1005FF7B SunVideoRaiseBrightness :1005FF7C SunPowerSwitchShift :1005FF7D SunCompose :FF20 SunPageUp :FF55 SunPageDown :FF56 SunPrint_Screen :FF61 SunUndo :FF65 SunAgain :FF66 SunFind :FF68 SunStop :FF69 SunAltGraph :FF7E WYSetup :1006FF00 ncdSetup :1006FF00 XeroxPointerButton1 :10070001 XeroxPointerButton2 :10070002 XeroxPointerButton3 :10070003 XeroxPointerButton4 :10070004 XeroxPointerButton5 :10070005 usldead_acute :100000A8 usldead_grave :100000A9 usldead_diaeresis :100000AB usldead_asciicircum :100000AA usldead_asciitilde :100000AC usldead_cedilla :1000FE2C usldead_ring :1000FEB0 xemacs-21.4.22/etc/aliases.ksh0000644000175000017500000000306407265371002014150 0ustar acsacs### aliases.ksh --- Useful shortcuts for XEmacs source hackers # Copyright (C) 1998 Free Software Foundation, Inc. # Author: Steve Baur # Keywords: internal # This file is part of XEmacs. # XEmacs is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # XEmacs is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with XEmacs; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # Shortcuts for sh-derived Unix shells (ksh, zsh, bash) # From Steve Baur # Run temacs as XEmacs function runtemacs { if [ ! -x temacs ]; then echo "Must be in temacs source directory to run temacs." return 1; fi ./temacs -batch -l loadup.el run-temacs "$@" } # From Adrian Aichner # Convenience function for running build-report function mak { make "$@" 2>&1 | tee beta.err } # export -f mak # From Karl Hegbloom # igrep from the shell command line function listargs { for arg in "$@"; do echo " \"$arg\"" done } function igrep { exp="$1"; shift gnudoit -q "(igrep nil \"$exp\" '($(listargs "$@")))" } xemacs-21.4.22/etc/cbx.png0000644000175000017500000000652406522220424013302 0ustar acsacs‰PNG  IHDR–6Ã>gAMA± üaÀPLTE…ŠŠ‹EFoÈÈËœ¢FF¨©±eeg')lz&&£*(Ј‡èèé+/£ßªªGG…ii©Š‰Ø×ÖØ¸¸¿WWW••¨67i±ghtuCGÎÕãÇÇ6:Êcg×À««†‰ÞÐ+*×HHÜih}{~›Ì——™99«WWÜ56x77~YYàZZẺžžŸööö¯xyßyx|TXÖ¹把ö½óä–•z~ãºHHë**´88»))éDDq¿S8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I èIDATxÚÍYíZÛ<##‡V)ÁR”:“¶¢´”B‚ ´o{ÿwµgfdÇ@Øíî}ªò€,¤£™3rÆØ¿­)¥fý·SNÇ5kû‹šµÎÀ®'Íô~ÿoÍž>1ö×3V‡b`Y] H÷³û+ÁnLû“žúvíá¾ùxýt«ß÷_ÿ—õŰl·oÚµ]À¬Ó0µö÷ZzksõÁ¤yÏõý±iš7OÆ®›¦üö‡¸ŒÊv°ÖiÃuW§A³ÃG×Myf:õ=iךòöì‰Ù®šígÿ+XÝô‡OWWwïèÍÝÍ5¸wwǯ®îÞ‰ÐéÍï«!Î]Sþ8k7:}¸¹¹“ópõû°2ÝGéí÷w<õôîîzmÞÝ|:ýX×?n°ÍþÜÿ¼ÇÆPÅ'ýHRè–es…ÑýzÅ“øáä3)ñ7÷ËÛàUO]ïdí“·˜z¿§wycŒùO°®ï›mžçe“+óî“¶Ûm~aíUSæçÛ¦ü¹Oe~{Q6ÛÏÆÐʲÌÏ íYæÌ,y¼Ì·èÞV=Xƹhq0ÌÀÄù··M“_*»X[h¿›íÅqÞl^ÛϘ´Ê&—“ð½‹pÐ4ÛKeNËí—/è9û[ä·«•ÆÒ?›ü8N0pènšr09&#V™êù(´•oÊæÜÙÓ²TÇ ØÉ´~½_[æg9ˆ>„p4 ™Âùo'¡ UñŽÙœ”À²ŠVì‰næÌgˆU€­`Âòä ÞÞf_›üÈãå ÈTÒ”…ÞVÕä{³8þ¯.!B´æE|y ë¾<ÏB¦‹Ã:,Šuükηùv° ÇÉÛUí5o”yM°òüüûùù`•å—!d«XN›†¤?`®§Õ·x†D[ÉÃ÷k«) vúÉ9g1ñ|&=`‡i5™¼9/ÂRüä¤Ù¶°ÂñÙ)ñ&_àû7E…—GUËȈ¦Kk$Sй #g)°å—‘¼¢yöQž\øà ¾X{zOv9 I]üúN ÀNßR´ÿµ)¿cø½1 Ò÷‹_¿šò’DÊ_xW†ÕâúI þÂZ·d92û Ë2×f¾}°R|ù‚s ¾)Lƒ“Þ¤â·4Ü0AO0ŠWÛÁ¥·æ¦$ùü½µï~mEÄdz$MN¼bÊ'X§äØDP ‚Iì=iœ|Õt†~Å׿k¯Ï¾\ÞÞÞ^:¸™=¾ ·GÁgúì`08\àüõ·sˆy­­;8Ïá–“ú'ÏÁ±Õª:) k¨÷«V<„¯c*BW~T³RÖ{=Ê=¹ YÆDT±‚›ee¤ŠPexŠÊÓª(Š)FœV²ðÅóÅp¦ä—‹,T)§ðc[áw¨H–V±wâÎì‹§/`¡ÐÁF…"ë¢G‹(~œóÀ˜•Æ DÁ­ÑVû0-àŒFk_üô‹èUø‰X€œM ’çÞÜ“/á6R ì2ðþœhŒ½†KWe…(exM]Å5¤qŽÇX‚EDFº*ULôéÑðz<ü‘²C¾jm˜Š”ß3nuñ¼õF[²tcëvicÍþÉ/fûöàv%ÔZ·c=_| Ë-»F^bSWc’—îNàMõw[¿óV¿XRž¬¬û-'2¬ñ"µñx†Å6Ò9eêÞ«qÛ/h=ºØdIø =Ñ.Å/áQƶpQAà˜Ñg >iN®7ëÓ™l/`éµl”¢)n¾XŒ gqZ ”Q¦3_,•Y¸Aô`4HÉ_HC ëëi™è!…ðžÆ@G[Dt¾Öí ,ÇšžöÒö<ªìÚ]¨ú3Ö¯Æ-Ùç5éŠÊ/-HÔšQ5B\2zäcT}Eè5…1•,÷ïZË~U[ôVŒUw^bÇrqÄòö­+x}ÐHŸ ´ÖÎ{r[;À…—K×ÀœFÏüwƒJCÈ&ˆ$A,õêuXBíšQ!Fñ{P‰a¨’Œ^ ÕY\>Öõf>G¨àÐ2˜ÿHz­;Jk¶þRÏçóE–u=_ ømDÙ4u<ž×õbú·ÐØZðÁˆô)ÏÑÛá–Z) †Î‰ß.f4ÆÓ’à¢E`—ú†õœÀ% ZcMâ¤8Š5AÓ¹+Vä³ "™;é¥"ãµ…ZÒá"ø¨±Ñ˜"ï (¦n>îÅz<§aVò(S‚ÄÁP‘r¦ª¼‰ñ`/üÍ(콬 z†ˆV;T‰qsj´>EAæ)ǹqµÁ)X ËÎ".÷ŠyâèѧÃË TnàÛÎ< ²?»v ô…$ ¤;òù”yPóú9g MiÐ^üq<Õꑵ9 B³qXla€A^àCQ‰ÉG–(¨Xåí*ÔdzæžÂ¢Ý9U¸DÑ8³ËQ"Ná5g¥—äšÌ)µ€Éœ¬>šz½HL’}ŠéÔ{®ÌQ®F>Ïbî‰7=XRÎQY‚ÑGrC^„ ¯©žt*¹*}¯<`qMAb.p£ÓéëB«6ª]{§fZ(@¶¨çdâ¢èeaƒXÕVB¤J§kŽ!vfTêź’ôâRFŠIG„aÞBh•¥ú`‹=¶à¹`åº<¹SÍö2û‹fã aÓØÝã””; ,æ©-u»I`pøì‡›h”††Þ§A‡˜ÇsýÄ)jöI¸‹[k)¢ØdïÚÄ-e-W?àÀfhÚ2ˆöU=j'G!«`LQwšÅ]èÙ9™|¨Û·â|<*YzR­ÀPtAaÅÑÝæq1Ä •vñ…F¸Mº6¸NERª+„‡ªM7£9Ðó:•ÜÃ_À‘‡TTÊ&ðEª H žU˜«ZB9È0CX½ÆÚµÖ̤‡ØR<Ä£+šÚ äÀ%¬ÄãCm÷q T3ºg‚ˆ-“GÓ¶0 °Gì8¢{i"<§}=’Ášq)¼ ËEhÕ‹`lëq±&gâûÓ†ã®z ‹t5B®£øß–Κ`­mø8R éz1o•¸ì ÆH ØX4€´²\ÈØ’]KB¨EB°œRÝ’™|œ:žÀâT gkÔ)Ìð¶:È(„*/DC¢S]Ruçt²/ØÆ£Íb&s>Ò­â7¨lFHD¶9mY§ü¬:M%ʼ¦$°´¦Ç›ÝÓ¦ëãêUk¦¤6âtWòÓ’¨SÉ‘éÓãP9>ÙÆSUƒ0ó–‡ÃZ€Ñ†©è=ÑÀLh O/¦”§4ÈñÃTHu3”ðAô3E2U”FíºÇxTÐ…ár9Ò×å¨ýnµáà)ƒÊçþºR$OHmP ™‘r†÷ò™ØÑ'\U×Hpô銢Ö¡ªÈ:þ¢1nrt‹¤/SHªNóÝ,‹ìD,Œâ‰®—ª¹æŽhRdÑÿéEyäPÕ>i¾"}¤ÒIæx¡#½NE0@G‰y*fr6 Îø=}ÀV2£,Û~XJþ¿ìÓÜø+Pê§çÞS¯±œ¨"ÃS1(ÇQT}h†¨ä`Nµ£Þ³¸iR\잸UËÔìÿÝÂë¡ XÚ‡â¯jÓ)ÁŠ;WûÒÚùØh‘‡tIMEÎ& ›–X©IEND®B`‚xemacs-21.4.22/etc/check_cygwin_setup.sh0000644000175000017500000000771006574376505016252 0ustar acsacs#! bash yorn() { echo -n " [y/n] " read YN junk if [ "$YN" = "n" ] then return -1; else return 0; fi } echo -n "checking for cygwin..." if ! uname -v then echo "couldn't find uname please add cygwin to your path." exit -1 fi OSversion="`uname -v | sed 's/^\(.\).*$/\1/'`" shell=`type sh | sed 's/sh is //'` distdir=`dirname $shell | sed 's!^//\(.\)/\(.*\)!\1:/\2!'` echo "cygwin installed in $distdir" echo "checking paths ..." if [ ! -d "/bin" ]; then echo "You don't have a /bin directory. Would you like to mount cygwin as /bin ?" if yorn; then mkdir /bin mount -b $distdir /bin fi elif [ "$distdir" != "/bin" ]; then echo "Warning: you have /bin but it's not the cygwin installation." fi if [ ! -d "/tmp" ]; then echo -n "You don't have /tmp - create it?" if yorn; then mkdir /tmp fi else echo "you have /tmp" fi if [ ! -d "/etc" ]; then echo -n "You don't have /etc - create it?" if yorn; then mkdir /etc fi else echo "you have /etc" fi if [ -d "/etc" ] then if [ ! -f "/etc/termcap" ]; then echo -n "You don't have /etc/termcap - create it?" if yorn; then if [ ! -f "$distdir/../etc/termcap" ] then distdir=`mount | grep "$distdir" | sed -e "s/ .*$//"` echo "Retrieving termcap from $distdir/../etc" fi if [ -f "$distdir/../etc/termcap" ] then cp "$distdir/../etc/termcap" /etc else echo "Error: can't find termcap file" fi fi else echo "you have /etc/termcap" fi if [ ! -f "/etc/passwd" ]; then echo -n "You don't have /etc/passwd - create it?" if yorn; then if [ "$OS" = "Windows_NT" ] then echo -n "Running on NT, create domain or local password file [d/l] " read DL junk if [ "$DL" = "d" ] then mkpasswd -d > /etc/passwd else mkpasswd -l > /etc/passwd fi else echo "Please enter your userid e.g. andyp" read userid junk echo "Please enter your user name e.g. Andy Piper" read username junk echo "Administrator::500:513:::/bin/sh" > /etc/passwd echo "$userid::1000:513:$username::/bin/sh" >> /etc/passwd fi fi else echo "you have /etc/passwd" userid=`id | sed -e "s/[^(]*(\([^)]*\)).*/\1/"` fi echo "userid is $userid" if [ ! -f "/etc/group" ]; then echo -n "You don't have /etc/group - create it?" if yorn; then if [ "$OS" = "Windows_NT" ] then echo -n "Running on NT, create domain or local group file [d/l] " read DL junk if [ "$DL" = "d" ] then mkgroup -d > /etc/group else mkgroup -l > /etc/group fi else echo "None::513:" > /etc/group echo "Everyone::0:" >> /etc/group fi fi else echo "you have /etc/group" fi if [ ! -f "/etc/hosts" ]; then echo -n "You don't have /etc/hosts - create it?" if yorn; then mname=`uname -n` echo "Machine name is $mname" echo -n "Please enter your ip address " read mipaddr junk echo "$mname $mipaddr" > /etc/hosts echo "localhost 127.0.0.1" >> /etc/hosts fi else echo "you have /etc/hosts" fi else echo "Can't create /etc files because /etc does not exist" fi echo "checking environment ..." if [ "$HOME" = "" ]; then echo -n "HOME is not set, rectify?" if yorn; then if [ "$OS" = "Windows_NT" ] then echo "please enter your home path [/winnt/profiles/$userid]" read HOME junk if [ "$HOME" = "" ]; then HOME="/winnt/profiles/$userid" fi else echo "please enter your home path [/]" read HOME junk if [ "$HOME" = "" ]; then HOME="/" fi fi echo "HOME=$HOME; export HOME" >> $HOME/.bashrc fi else echo "HOME is $HOME" fi if [ "$TERM" != "ansi" -a "$TERM" != "linux" ]; then echo -n "TERM is not set to linux or ansi, rectify?" if yorn; then echo "TERM=linux; export TERM" >> $HOME/.bashrc fi else echo "TERM is $TERM" fi if echo $CYGWIN32 | grep -w tty; then echo "CYGWIN32 is $CYGWIN32" else echo "CYGWIN32 does not contain \"tty\" terminal may be deficient" fi xemacs-21.4.22/etc/chr.png0000644000175000017500000001624407265371002013306 0ustar acsacs‰PNG  IHDRŸÏ»$gAMA± üa0PLTEWWWLLLþþþøøøñññéééáááÕÕÕ<<<"""œœœ‰‰‰wwwfffÄÄݰ°»%1Å8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.IÈIDATxÚ\OlÛØ™—n)Ö¤›±;”œÜf IÎ^©Ü2‹X”2 G¢€l cK€»â›Ìí-¾í©ÈDlOÊ8s5¥åVÔ$ l pf©Ë6è-¹¿ï=J¢$:iç›ÉÈÒO¿÷ýÿ¿×„P˜®¢ˆ%cÕ¥!ËUyyU±¶„¯OÙì (É5*Š·$Q,| pF°Pf€¢Üh( ˆ~ð§(æ?Æp¾e,b(3†´kü•Öœ „ŸòGægË Y•çˆJCi4BvœßG)FeJQ ñ”–‚¿1‚5¹6¥(AŒ•a~Q-U™àšív«ò )NI–?ÂpIÍP ô ¼v[©…k&Dp¥múÓD>?W3×3}`+*ÂEñïb(…znI"+˵ˆ%’Åòßİ\9Ve&EÚt«jhjGòG4ýiBˆh™Ù"q$M·Ùj)Ñ’oÖ4çŽ2e(V‰#lGàÈ*9IQ,}ÔSŠÅ¹·ˆŠQÄÐ,eùfŠ_.Óš94‰‘àÆãq«Õš2T”©Sߤ—hp`$‹S¼³íNÇuÛ3~ü_ěΔ!û }1†éÙÅ€4•¢Â ³zæ£ ‹\Ç,à aˆI0!Šr^ÈVåxƒ10?³Är¨d¦e0lv‚ÀwÉVµL²¡(Sÿ–ã7Í#ÍL”bèË!C©ÙJ^?:°˜áˆ!ž]ìšé_jºÛn2йÚ4O/dƒ) éüÝ@5MS£ˆåõ› ‡á%Î{»~`ö:Ú™¡´¶æ©fƒ) ´Riv 6T‹è S¤æÁˆ1̬]µ”É~åÅ9ÂÎcž6jÓ X(… ø©x¥!üõûÄ€#–Æý±²w; ÞŽ@Vb¦X“«…ˆÙ„eMqÛÓ=Ó2YTÅ:£Tb xÆ0‘9Æ::?ïWÞ ÷ac÷Köé"Ï€ÕH¼a€Äps"„>8˜3$û£è¥ýÑh׌qu£UM«Ä)’N–¢ ¶LÕµ´§R°g€Ží¤ÈCçÜÐUu€M?±®ö…í‡Â#OU¯Ü}Nù¹š_$†RéÍd;†Þ‘pF¶S‚@´m»' w«Â}Td~'Tô¦Ìý8,ç)›È]|Ò <›¼šM¤`†hPÐÆ ·¿(lì „މÛÞá@<¥ä#Z.³ˆÔRíPUiÃC¡Yìðdí*Ï(™I[rBno¬t&nk¶Ëìœg˜¥P-£’±Ì=hÙ4øYðUÕé›ð%éôÚ_A. í«¥ãwBˆ|>¿ Ãb ‘Iº*³˜)ARqßd±qáöGÉdÂé!"”„/4½œÓÊÇQ„/—¨r•]u`Í4’I;62(m·çº¥>0L>r…mÍx/+®{0YdXÈÊrHc8Á„c;Z>g8% ãBȉÂFWÓgÝЗdH•E~×$Gs¸ŠS¶e0~TѸÌàñ:ܹ$ÀL:*e?×}#DЇY„kiû6h¾b*I¦ÉETÏóXÑ‚£ã˜þnô}ê`Æj9ÏJs†s‚Ÿî# #úK4Hø¶Õûo)n;}|“ÿ§U)’/gQÖHÍKs`õ‡!AP‡ùÒ &”°úôˉHX!_QMÔî4èd”"–XV&†V¸ãÛç&czðó5˜XfZ9(ɵ#¢σN¾eXÌs†¨¨©Œ¡Ûœ Ö„µ”Šôen=×tºTÎúäbf‰†ydù²´K€!ÁòŠ5~@IËÆû‚²¿MЇ£ã=;ÂÒ`!7eȳp25 •L¦‘>'‡ ”6ŠpŸÜÄ£ÝXÁä­°Ä‘Å*ì€\Çiæ#†þ˜†‚⪵SqÛ®‰R¶øgÜò! ÄŠëMbÈDÈv +tah&D·3A ÀÍr¬(âî¸L®ÍWIBpÎþ²Xæ Û¤å!é¤OM¼Ûâù6‡¦¯5+¡sȰRÏu±gÔŽIĹ¡uµÌ*meLŠ=‹S¬´§d9ãº(ÖK÷†ú)P¼mío.æ³¢,ÉÈ´PŠ*Huí:C¥ã*‘÷C¬¹\)7¡6ÓH’ÆÎ" ²;‹sÕ>2RðjÕCÀ†@, %áÿE*å¼NÛûìOË ‹’Tc ª"¼©E fïLܺ°²î"€½N¦FˆLCëý" Àú2(“P2 ï3b•à*0×v/û¨¾çÏóË€Ô¤´Ûp'™A:!ŠL¹w'ã%Àýqß½TµQb”†š{JÌ¥íøNÎФÐÇ)ޮؿK¥EÔŽ‹R4q;‘‚Ñî,Rb®)ˆ}’ «pPf£M$ŠQH¤,ý`P(ȵ d’H‘íeÒð*ãªU/ÍÓq{ •<>J§ÎÞþLŠð?2 [¿È¯‚c'xö‡ITü™õu”úX¹Ý7\t©ýÁïñrÂ6æ~³t!ð‘­ã…lÇ‘H§°ác¶ŽÒhÆ]Ó2|´ÞìkŽ>1®æ}¼m_£"_ÓÇ[q€Â£ÉËdí>zò”X¦,u Vp­áÕõcT½ˆM>ðÆÛ‹CG?޼ã¾BUýF,C€(þ©OÜ:~zį¿¡-Þ}‘å£Ô÷‹€»¯Îü@E¡÷âe(<ø]&C]¨Þ¬àÉ“o™¶þï $z”°üÀÏ_Ù½K­o¨žþø†ßeÒ H1{”a€¿ú–)á]ò˜©ýö÷ûÀÏ^¥¾4:Ðø9‘#ÔoØ–O¾î1ÀÃ×D†9P[À—‰³@£ý†-ÿ,™¹M½¨M§ ð«ç%.­u4²ÏÞ‹ó]ß}™¶u8„x߽ɤéÌ"™’à?ðúηˆàúɳO¾Ufˆwþ3“2´>% 8n=$†¸~°#Â;ù§0ÿð„,éÜ>mÍÂÍËÌm‹VAÜ–7jU0Ì >b÷ÕOÈlÎÂ*ÿîïžžEÀ´ùü}ê–ªœÃמ#g¡vˆ*ÍË7h³ãlýöiÄGe¡LdkoHg͈¬Õö~‡¬7d¡^Ð>î0·ú¸è³WoÒ`ðÚ1â”"5Ê_3¨HéÌÐD-›>ÿvgáó+€wµQz Å»ó‡X†hÞ%l*`T­ÿ:™L-Öiaa]—¯á+ÃsÇú)¤õ!‡æ€ŽF¬ç;‡Ww˜A”´Ì³8†Ô\4ßÑÁÀ"Æ:Vïc€Ÿ#ñ’QœÆ²¹ª~x…˜FÝpºÿÀG}*aç³  _ôLYþ‚êW"8J"£šã¾L$D°ÈAÁžØÖÁºQx-úÔyïDÇgæÙÛ˜xX@[_Á–‡ Fm)bí(µÜ /¯ÚÐÖ'ž± UPC›8\sih°Õ\7†aa kK´ °%Ó¯-ÿªt3à»SöëÝ·+€è¦Dz,ÿŽÙCÔ6™$…íc¤µØÎõi•‰òbpk eÎîì¤3,dÙOŸýñfŠ—gïé—÷V¶œÝ,6%¹V=Žˆ¡ófý˜•3·¿;9ùõonÖò+:Dî¬V[…5ÍubŽ„”˜¿2‘£ÿñfŠ=§„uïá2 =òÙ”jÄÌ8/aQ-˜ß==ùúÏBL¨aë[…7m+€[[œ!ÄBf~ÆJXs¸~ò+ªcs±4-Ím^ˆaÈæWª‡¯8 ’)«E¾6´ïž>ùžc òsC]è–g€å­-š©vûš^d+—ß=ù¯…xöNà&›’Sª{Äp„TÆSHõ?°ô+ĉÏPb3|ÊÃ/ˆaÉ9ÉúŠ'ö·Â‡WgÙ“æ€Ä°ô€R«‚*ñéqÚ:-}p£s!ÄŠ|Nåá]:k§d› fêhm¡À]Í_ÄæDFP)ÝE[’V¨w2ïÏœ)?,ÖÙD¥´AGÅ#”T)z:xÞsƒßß‛F€l!…®ù BËo_ö~`8¡”r×t˜ŠÊqÒ‰ÔÙó¶·T=ü­ k4ÔU#@$Š8¨©F¶êv.õ(Îzì¹-#‰ö{Ü~`±R¡GÅ¡‡”7`7çWb¥ë—~  $‡ ïÐÃB{ÈžŒÞ>¾#¶/þ|þFÀ»{ú8¢GqoR§û¹Šò£Ê|6·Uz`±ç·„K\ë](íð äCé4/,W™)Y)}Þgµ—“L&É×èÈ_%Ä;íÕcÉF ø”!SóAéUs«°3t.’J¡U¢"ì¾±²÷»Óc¦R°a …ÏÐ ¢p½9^gYï(“DW`ŒÅ=M_¡ø™:.ÝÄ•”îôQLYˆ`¼GbF„j[Õœ³}ßQõq£2¬A&¿4Uö”e=DÄ㌥·_B Gk½:‡¦î6bÃ烼óèy7›8¢sù¾AÛºÿâéɯÏVBã¡z¼ÍÇÒddHßvW 'fОø¬´¹óÃÓ“OÞ/áåÞizpϰ!WijlÁC Óq¦î~X+ý|ýÉ7Ë€—Fà¿ÌQÁ^QH†xªÃ$ÚÑ$ÿž>­³ß–óKîRfVÊ—ôÐI§Ó)zZ[þ>ïÉî_Gj}èé~¼ ‰¡T«°- _¼`»Q<%ÈÕ€[[n/Xܸ &AK¸-Ÿóy¤Ét:‘X‡žŬÓPŒIÍ9z°{pCYªpÀ.!Ø@1™ $9ÐCŠÍ%_Ù˜|ˆazf€ŸiýDŠžv1[<¢“Øðìz¹Ë¹¾ïÇ3¬Ñ xȆ8¢§]ììø˜N6õÆRy“븓±Rˆ,²9pQaBßðúÈ(Ðq†sLp5Ò°µëúÑç%-‹R¥Ìu×2мµ~œA3´âÃë£I0ÞŠäƒêìÛr]8sŠÎ­Óì€Ä± ÄÂXŠbHãþüÖÄÆ£k䔑CšvC¥Øz|u¸;qãipK¬Ê¬tÌ*1„¢é¡Jo\WÚì<$†ã®ëÆ3ÜdOÄa­KÝ(;¿1U·*ÜÔ ”`ìØj‘ÆèEQf$ ŽIõ³ $W…›×=׿ŠeXd“þS†Êö5ëøèØmâΞðÄ ÑóãeÈVÙg7ò%Õ7zÈìNLbWþ‘¹Ò«† «QÊ{/P‚ÑãB·ãÆ$¶ÙjlÜÄPdf(‡ ·½ 'à¸ãWNϬ²ã=}? Hsâ’Ä~·!Ë÷®Qß úíN° 8멲“ý;Ì.²ì¹ ·6/ûƒM2ìWËýwø6BñÞçw ~-’‹œá=EÞüB#ŠÈQoyÔ"7¿§‘½î•²…,ç—]bHù´¼µ}Í(ª4Åÿ~Q+r£>{áš=üžÅ/’%† +ò&Û3 ‘©/Œ`!NKhgÿñާ­l¸”B“Äœa¥.oÉ{4£ ËV–¥(*­Æ\Kïx1Á F²9ñbÈpS‘67·5vÞBYϘ>ú„ô¤Z»)~ÉJ!ǹÃ3‡ˆ %¤LÇY 2Ú†þžqiŽœ.ýDÙãyºi5£8;Y*Ne(É⦼M‡`4ú žªKÏ•7è®EÇu[‘hñK3dX QUa:RÆ0‹ØX–•NŸŸÙ`h½ñÁCQ‘µ"†n™ßZb83wÔŠ [ëháq ßUvÙ˜ë¶ùUÀl±PÈ„ÀÐÐ(ô(íkÞQ9Û–¸l\+ðÝV4þ½ ïØžó7‚!4ÔìÐ|М£ªüžJ4 çÞ…S\ˆÀld² •1¼fÓö|#=Séa@tǹëÙó–%@jÏÏÖ@ñ šòêÏ(öÙ¬¤ Àhø»«]ñO妉ö8ð.„óÊ`X¥wƒ3sÊÑæ§ï&6=^¨dþE ‹äJk‹¿[ý×ðüc”CE˜Kã=Õ=`£`ºÛZˆÏŒ°¾¾N³Åÿ*%Ïo䔹 Mô+›Û%Ÿf€È€ìFÀ|uÕðìu;¤Ëÿ>õ”ð&Ý ¨Þ¿¦Iyîò§à,ö$(±O™rØ•‹)ÃÙÅQt@Õ]öøý ø%úX°i¬{ÞôØ«Yg¿)Ògʇäg ‹ƒ|Éæî56›M'ïlx_Xˆ¬Gj¨ä,J[D÷jˆS@F‘‚"ݸf:U ƒf7ÑNÒE’ñzO€µÚ%CR§ˆtÛÌ]©asuZ†dEÒoƒ_JšÞ\˜Ý”’M!©áAºh¶\rT&êô™m®ZX §^˜å¥Ú®YšJÇŠ¼Tìçv½©)ÚKµ&» R-|:×2wI骋K‡J[ÑYW,©Z!^Íæ%™®ÝËs†S-Ó‹èbV ’qÄdŠÛ‹ß“%[k*tÒ(Ïlx§PnN¼%@F8§ÇÄ-µ•õ¡Ùé­¦R¥k[ ·áÃfDÙ=8·ü•½1›ÝÜîx|t K‹µ6ȉÒCÒr"ìРª• ¥º­ülêš¾WnO¾ã<;À¥!E™«Q-³+ ž¼)?~ß§UewJ§>/mãm³ª¬ÈnÕ¨¥Zcn6ü2ñ›DU6±;n±(…<¿¯™þ,ýIr“Ãj¹ðÓˆ Áo>áìq~»çÙR¨_ÙÛÐ2(éŽI#Û-*øF,æ Iuît~˜#ÞT†ì®L™ô‹¨Ötùé »{ÐŽÙ-¿r0›­„xœ!]¥ÿyLËìŠXÈ©ŒlvÜùPrN$ÀV•‚=HD†¿hëŽiˆ=º`†-þNÀîCdFÈ„*‘Ѝùí™–%Â%¶;sŽ!`»ÝlBŠb¹È|¢o…F],ÖjM&A‰ß+™n’ê oL.Rd ØãG7 hŠeê™à$­S »òéÿ‡/mÁ´tIMEÎ8嚦IEND®B`‚xemacs-21.4.22/etc/chrm.png0000644000175000017500000001624407265371002013463 0ustar acsacs‰PNG  IHDRŸÏ»$gAMA± üa0PLTEWWWLLLþþþøøøñññéééáááÕÕÕ<<<"""œœœ‰‰‰wwwfffÄÄݰ°»%1Å8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.IÈIDATxÚ\OlÛØ™—n)Ö¤›±;”œÜf IÎ^©Ü2‹X”2 G¢€l cK€»â›Ìí-¾í©ÈDlOÊ8s5¥åVÔ$ l pf©Ë6è-¹¿ï=J¢$:iç›ÉÈÒO¿÷ýÿ¿×„P˜®¢ˆ%cÕ¥!ËUyyU±¶„¯OÙì (É5*Š·$Q,| pF°Pf€¢Üh( ˆ~ð§(æ?Æp¾e,b(3†´kü•Öœ „ŸòGægË Y•çˆJCi4BvœßG)FeJQ ñ”–‚¿1‚5¹6¥(AŒ•a~Q-U™àšív«ò )NI–?ÂpIÍP ô ¼v[©…k&Dp¥múÓD>?W3×3}`+*ÂEñïb(…znI"+˵ˆ%’Åòßİ\9Ve&EÚt«jhjGòG4ýiBˆh™Ù"q$M·Ùj)Ñ’oÖ4çŽ2e(V‰#lGàÈ*9IQ,}ÔSŠÅ¹·ˆŠQÄÐ,eùfŠ_.Óš94‰‘àÆãq«Õš2T”©Sߤ—hp`$‹S¼³íNÇuÛ3~ü_ěΔ!û }1†éÙÅ€4•¢Â ³zæ£ ‹\Ç,à aˆI0!Šr^ÈVåxƒ10?³Är¨d¦e0lv‚ÀwÉVµL²¡(Sÿ–ã7Í#ÍL”bèË!C©ÙJ^?:°˜áˆ!ž]ìšé_jºÛn2йÚ4O/dƒ) éüÝ@5MS£ˆåõ› ‡á%Î{»~`ö:Ú™¡´¶æ©fƒ) ´Riv 6T‹è S¤æÁˆ1̬]µ”É~åÅ9ÂÎcž6jÓ X(… ø©x¥!üõûÄ€#–Æý±²w; ÞŽ@Vb¦X“«…ˆÙ„eMqÛÓ=Ó2YTÅ:£Tb xÆ0‘9Æ::?ïWÞ ÷ac÷Köé"Ï€ÕH¼a€Äps"„>8˜3$û£è¥ýÑh׌qu£UM«Ä)’N–¢ ¶LÕµ´§R°g€Ží¤ÈCçÜÐUu€M?±®ö…í‡Â#OU¯Ü}Nù¹š_$†RéÍd;†Þ‘pF¶S‚@´m»' w«Â}Td~'Tô¦Ìý8,ç)›È]|Ò <›¼šM¤`†hPÐÆ ·¿(lì „މÛÞá@<¥ä#Z.³ˆÔRíPUiÃC¡Yìðdí*Ï(™I[rBno¬t&nk¶Ëìœg˜¥P-£’±Ì=hÙ4øYðUÕé›ð%éôÚ_A. í«¥ãwBˆ|>¿ Ãb ‘Iº*³˜)ARqßd±qáöGÉdÂé!"”„/4½œÓÊÇQ„/—¨r•]u`Í4’I;62(m·çº¥>0L>r…mÍx/+®{0YdXÈÊrHc8Á„c;Z>g8% ãBȉÂFWÓgÝЗdH•E~×$Gs¸ŠS¶e0~TѸÌàñ:ܹ$ÀL:*e?×}#DЇY„kiû6h¾b*I¦ÉETÏóXÑ‚£ã˜þnô}ê`Æj9ÏJs†s‚Ÿî# #úK4Hø¶Õûo)n;}|“ÿ§U)’/gQÖHÍKs`õ‡!AP‡ùÒ &”°úôˉHX!_QMÔî4èd”"–XV&†V¸ãÛç&czðó5˜XfZ9(ɵ#¢σN¾eXÌs†¨¨©Œ¡Ûœ Ö„µ”Šôen=×tºTÎúäbf‰†ydù²´K€!ÁòŠ5~@IËÆû‚²¿MЇ£ã=;ÂÒ`!7eȳp25 •L¦‘>'‡ ”6ŠpŸÜÄ£ÝXÁä­°Ä‘Å*ì€\Çiæ#†þ˜†‚⪵SqÛ®‰R¶øgÜò! ÄŠëMbÈDÈv +tah&D·3A ÀÍr¬(âî¸L®ÍWIBpÎþ²Xæ Û¤å!é¤OM¼Ûâù6‡¦¯5+¡sȰRÏu±gÔŽIĹ¡uµÌ*meLŠ=‹S¬´§d9ãº(ÖK÷†ú)P¼mío.æ³¢,ÉÈ´PŠ*Huí:C¥ã*‘÷C¬¹\)7¡6ÓH’ÆÎ" ²;‹sÕ>2RðjÕCÀ†@, %áÿE*å¼NÛûìOË ‹’Tc ª"¼©E fïLܺ°²î"€½N¦FˆLCëý" Àú2(“P2 ï3b•à*0×v/û¨¾çÏóË€Ô¤´Ûp'™A:!ŠL¹w'ã%Àýqß½TµQb”†š{JÌ¥íøNÎФÐÇ)ޮؿK¥EÔŽ‹R4q;‘‚Ñî,Rb®)ˆ}’ «pPf£M$ŠQH¤,ý`P(ȵ d’H‘íeÒð*ãªU/ÍÓq{ •<>J§ÎÞþLŠð?2 [¿È¯‚c'xö‡ITü™õu”úX¹Ý7\t©ýÁïñrÂ6æ~³t!ð‘­ã…lÇ‘H§°ác¶ŽÒhÆ]Ó2|´ÞìkŽ>1®æ}¼m_£"_ÓÇ[q€Â£ÉËdí>zò”X¦,u Vp­áÕõcT½ˆM>ðÆÛ‹CG?޼ã¾BUýF,C€(þ©OÜ:~zį¿¡-Þ}‘å£Ô÷‹€»¯Îü@E¡÷âe(<ø]&C]¨Þ¬àÉ“o™¶þï $z”°üÀÏ_Ù½K­o¨žþø†ßeÒ H1{”a€¿ú–)á]ò˜©ýö÷ûÀÏ^¥¾4:Ðø9‘#ÔoØ–O¾î1ÀÃ×D†9P[À—‰³@£ý†-ÿ,™¹M½¨M§ ð«ç%.­u4²ÏÞ‹ó]ß}™¶u8„x߽ɤéÌ"™’à?ðúηˆàúɳO¾Ufˆwþ3“2´>% 8n=$†¸~°#Â;ù§0ÿð„,éÜ>mÍÂÍËÌm‹VAÜ–7jU0Ì >b÷ÕOÈlÎÂ*ÿîïžžEÀ´ùü}ê–ªœÃמ#g¡vˆ*ÍË7h³ãlýöiÄGe¡LdkoHg͈¬Õö~‡¬7d¡^Ð>î0·ú¸è³WoÒ`ðÚ1â”"5Ê_3¨HéÌÐD-›>ÿvgáó+€wµQz Å»ó‡X†hÞ%l*`T­ÿ:™L-Öiaa]—¯á+ÃsÇú)¤õ!‡æ€ŽF¬ç;‡Ww˜A”´Ì³8†Ô\4ßÑÁÀ"Æ:Vïc€Ÿ#ñ’QœÆ²¹ª~x…˜FÝpºÿÀG}*aç³  _ôLYþ‚êW"8J"£šã¾L$D°ÈAÁžØÖÁºQx-úÔyïDÇgæÙÛ˜xX@[_Á–‡ Fm)bí(µÜ /¯ÚÐÖ'ž± UPC›8\sih°Õ\7†aa kK´ °%Ó¯-ÿªt3à»SöëÝ·+€è¦Dz,ÿŽÙCÔ6™$…íc¤µØÎõi•‰òbpk eÎîì¤3,dÙOŸýñfŠ—gïé—÷V¶œÝ,6%¹V=Žˆ¡ófý˜•3·¿;9ùõonÖò+:Dî¬V[…5ÍubŽ„”˜¿2‘£ÿñfŠ=§„uïá2 =òÙ”jÄÌ8/aQ-˜ß==ùúÏBL¨aë[…7m+€[[œ!ÄBf~ÆJXs¸~ò+ªcs±4-Ím^ˆaÈæWª‡¯8 ’)«E¾6´ïž>ùžc òsC]è–g€å­-š©vûš^d+—ß=ù¯…xöNà&›’Sª{Äp„TÆSHõ?°ô+ĉÏPb3|ÊÃ/ˆaÉ9ÉúŠ'ö·Â‡WgÙ“æ€Ä°ô€R«‚*ñéqÚ:-}p£s!ÄŠ|Nåá]:k§d› fêhm¡À]Í_ÄæDFP)ÝE[’V¨w2ïÏœ)?,ÖÙD¥´AGÅ#”T)z:xÞsƒßß‛F€l!…®ù BËo_ö~`8¡”r×t˜ŠÊqÒ‰ÔÙó¶·T=ü­ k4ÔU#@$Š8¨©F¶êv.õ(Îzì¹-#‰ö{Ü~`±R¡GÅ¡‡”7`7çWb¥ë—~  $‡ ïÐÃB{ÈžŒÞ>¾#¶/þ|þFÀ»{ú8¢GqoR§û¹Šò£Ê|6·Uz`±ç·„K\ë](íð äCé4/,W™)Y)}Þgµ—“L&É×èÈ_%Ä;íÕcÉF ø”!SóAéUs«°3t.’J¡U¢"ì¾±²÷»Óc¦R°a …ÏÐ ¢p½9^gYï(“DW`ŒÅ=M_¡ø™:.ÝÄ•”îôQLYˆ`¼GbF„j[Õœ³}ßQõq£2¬A&¿4Uö”e=DÄ㌥·_B Gk½:‡¦î6bÃ烼óèy7›8¢sù¾AÛºÿâéɯÏVBã¡z¼ÍÇÒddHßvW 'fОø¬´¹óÃÓ“OÞ/áåÞizpϰ!WijlÁC Óq¦î~X+ý|ýÉ7Ë€—Fà¿ÌQÁ^QH†xªÃ$ÚÑ$ÿž>­³ß–óKîRfVÊ—ôÐI§Ó)zZ[þ>ïÉî_Gj}èé~¼ ‰¡T«°- _¼`»Q<%ÈÕ€[[n/Xܸ &AK¸-Ÿóy¤Ét:‘X‡žŬÓPŒIÍ9z°{pCYªpÀ.!Ø@1™ $9ÐCŠÍ%_Ù˜|ˆazf€ŸiýDŠžv1[<¢“Øðìz¹Ë¹¾ïÇ3¬Ñ xȆ8¢§]ììø˜N6õÆRy“븓±Rˆ,²9pQaBßðúÈ(Ðq†sLp5Ò°µëúÑç%-‹R¥Ìu×2мµ~œA3´âÃë£I0ÞŠäƒêìÛr]8sŠÎ­Óì€Ä± ÄÂXŠbHãþüÖÄÆ£k䔑CšvC¥Øz|u¸;qãipK¬Ê¬tÌ*1„¢é¡Jo\WÚì<$†ã®ëÆ3ÜdOÄa­KÝ(;¿1U·*ÜÔ ”`ìØj‘ÆèEQf$ ŽIõ³ $W…›×=׿ŠeXd“þS†Êö5ëøèØmâΞðÄ ÑóãeÈVÙg7ò%Õ7zÈìNLbWþ‘¹Ò«† «QÊ{/P‚ÑãB·ãÆ$¶ÙjlÜÄPdf(‡ ·½ 'à¸ãWNϬ²ã=}? Hsâ’Ä~·!Ë÷®Qß úíN° 8멲“ý;Ì.²ì¹ ·6/ûƒM2ìWËýwø6BñÞçw ~-’‹œá=EÞüB#ŠÈQoyÔ"7¿§‘½î•²…,ç—]bHù´¼µ}Í(ª4Åÿ~Q+r£>{áš=üžÅ/’%† +ò&Û3 ‘©/Œ`!NKhgÿñާ­l¸”B“Äœa¥.oÉ{4£ ËV–¥(*­Æ\Kïx1Á F²9ñbÈpS‘67·5vÞBYϘ>ú„ô¤Z»)~ÉJ!ǹÃ3‡ˆ %¤LÇY 2Ú†þžqiŽœ.ýDÙãyºi5£8;Y*Ne(É⦼M‡`4ú žªKÏ•7è®EÇu[‘hñK3dX QUa:RÆ0‹ØX–•NŸŸÙ`h½ñÁCQ‘µ"†n™ßZb83wÔŠ [ëháq ßUvÙ˜ë¶ùUÀl±PÈ„ÀÐÐ(ô(íkÞQ9Û–¸l\+ðÝV4þ½ ïØžó7‚!4ÔìÐ|М£ªüžJ4 çÞ…S\ˆÀld² •1¼fÓö|#=Séa@tǹëÙó–%@jÏÏÖ@ñ šòêÏ(öÙ¬¤ Àhø»«]ñO妉ö8ð.„óÊ`X¥wƒ3sÊÑæ§ï&6=^¨dþE ‹äJk‹¿[ý×ðüc”CE˜Kã=Õ=`£`ºÛZˆÏŒ°¾¾N³Åÿ*%Ïo䔹 Mô+›Û%Ÿf€È€ìFÀ|uÕðìu;¤Ëÿ>õ”ð&Ý ¨Þ¿¦Iyîò§à,ö$(±O™rØ•‹)ÃÙÅQt@Õ]öøý ø%úX°i¬{ÞôØ«Yg¿)Ògʇäg ‹ƒ|Éæî56›M'ïlx_Xˆ¬Gj¨ä,J[D÷jˆS@F‘‚"ݸf:U ƒf7ÑNÒE’ñzO€µÚ%CR§ˆtÛÌ]©asuZ†dEÒoƒ_JšÞ\˜Ý”’M!©áAºh¶\rT&êô™m®ZX §^˜å¥Ú®YšJÇŠ¼Tìçv½©)ÚKµ&» R-|:×2wI骋K‡J[ÑYW,©Z!^Íæ%™®ÝËs†S-Ó‹èbV ’qÄdŠÛ‹ß“%[k*tÒ(Ïlx§PnN¼%@F8§ÇÄ-µ•õ¡Ùé­¦R¥k[ ·áÃfDÙ=8·ü•½1›ÝÜîx|t K‹µ6ȉÒCÒr"ìРª• ¥º­ülêš¾WnO¾ã<;À¥!E™«Q-³+ ž¼)?~ß§UewJ§>/mãm³ª¬ÈnÕ¨¥Zcn6ü2ñ›DU6±;n±(…<¿¯™þ,ýIr“Ãj¹ðÓˆ Áo>áìq~»çÙR¨_ÙÛÐ2(éŽI#Û-*øF,æ Iuît~˜#ÞT†ì®L™ô‹¨Ötùé »{ÐŽÙ-¿r0›­„xœ!]¥ÿyLËìŠXÈ©ŒlvÜùPrN$ÀV•‚=HD†¿hëŽiˆ=º`†-þNÀîCdFÈ„*‘Ѝùí™–%Â%¶;sŽ!`»ÝlBŠb¹È|¢o…F],ÖjM&A‰ß+™n’ê oL.Rd ØãG7 hŠeê™à$­S »òéÿ‡/mÁ´tIMEÎ8嚦IEND®B`‚xemacs-21.4.22/etc/ctags.10000644000175000017500000000002106256071511013172 0ustar acsacs.so man1/etags.1 xemacs-21.4.22/etc/editclient.sh0000644000175000017500000000035307265371002014476 0ustar acsacs#!/bin/sh if gnuclient -batch -eval t >/dev/null 2>&1; then exec gnuclient ${1+"$@"} else xemacs -unmapped -f gnuserv-start & until gnuclient -batch -eval t >/dev/null 2>&1 do sleep 1 done exec gnuclient ${1+"$@"} fi xemacs-21.4.22/etc/emacskeys.sco0000644000175000017500000003220706256071513014516 0ustar acsacs# # SCO(tm) keyboard mapping file with Emacs meta-keys # Automatically generated using the emap utility # # Below is the uuencoded source for the emap utility. This program # will, when run on an SCO console, take the current keyboard # map and set the 'meta' bit for all keys. To make this usable # under Emacs, edit your termcap and terminfo entries for the # sco console (the ansi entries) and add the 'km' capability. # Usage: # emap [-o] [-f filename] # If you run the utility with no flags, it will simply modify the # current keyboard map in kernel memory for the multiscreen on # which it was invoked. Specifying -f and a filename will cause # a file suitable for input to the mapkey(M) utility to be generated. # Specifying -o will produce, on stdout, a file suitable for input # to the mapkey(M) utility but will NOT modify the in-memory # map. # I personally run this utility once, and replace /usr/lib/keyboard/keys # with the result. You may prefer to run it in your .profile or # via a shell-script which will in turn invoke emacs. # # begin 600 emap.c.gz # M'XL("'F'RC " V5M87 N8P"=5VUOXC@0_LZOF$W50KIT%^AM[U2V>Z*HW%9+ # MH2JL=*<6H6"<$A&27&RZ1;?][S=C.X&$%'H7(>S8\\R;QS.3 R]@_G+*X;.0 # M4R_\,/M2.DB7EH&'J]DUL1(?Y2KB8GMYSE>3T(D5H,2?)8\#8#,GAN,PDD[\ # MV$P6O4 "+GG!M$HCCV,UXJ]9*FF$(UC@++BX'\$%_%,"L(*E;U5I(L*9F'I))1F$ORM)PZ;Z\F$&_A$Z'%F2 .S_I2\1WID<2+.C)X>ISXW$U9/)HUD # MK()$UXGA[R0K"T.R-#M<,#UQC:J/9HS-& BK])*ZJH1^][V # M0X7\RJJ [PLG&DLXGB_L$CE/2$=Z3!]&_'3?^'0V:N*R>I>BKA:J.&ND6\1* # MSJO@H1C$1S$NN%!!XBI8AY^FJ$45F-U4S&,6K: 2/Q&+NJT0;ABC/GAVM29X # M\!EZWV_&@V%K>#7 ]_?O;20!=:[TR#D2DO;V?''R!=6_9Z,/:,*]-U+,Z/%0 # M^O5@/+B]:E^WNE!!VZIDK&?;AF+-CQ[QPY-LAAK/[8W5+ UZP!$;,(TQU\S6-\,?-9!CK_/A06@>"^J/>QN>5#&_AY1!:AX # M/ZSWYZ"]Y7B!&:48->6NL_3E>691ASS&+WRYH$-IWW5L.#JBB(;/9J5KVSG, # MUEU%J8=3O*L$.TGYO(>ZW.9XTGHCYZ.,K-0KE*0NH-[X=0<7:\I]JQAN # MG(I*;#BTWCC+>3-G>OE0'+(R>=+(+S^4RS;\_ GI^T/9MN%WL!X>+#@'2U6( # M@@?S8%ZO78)KSX>U!E;5+"YQ]@9Q@^K!R9F@>J"S_]HOCDRJ0L.LOZAJ8E)S # M92/;N_ZC@".H/==.[,?%E(?%E # MCIB\%'.YQ$X'"=!RM)KJZ<+Q EVDL1G"TJ7+]S&^/.DRK?NBBQIV0^Y%+:W0 # MQVZ ]1'[!(<)=)>@TFC1;N>Z>X6[-$UK/OXG]=NK,E4^?\P\'[N#>K;H,N3Y # MR*GI@HK6AQ1!4T71BBD_@JA6RZN # MW*&[":)'V9_TD&^^^$F,6M^%\\C/ ?T7P?U).,(_%UST"=WXT4.0N['/GB1G # MY26IT"6G>2&3/E3PE/ZX[H^_7?UUT[JMPA%R5QAMX#OL?++^CK#-I:;(6J/6 # M@K70S"TA/N0*]$66$;G'#2..L>0&>%X_LJ>E(!4=&G:MV,6I+NUPZ4\A"+%O # MQ".5',*EC)92>:?(+8V"9. FCG91F8--=V9W8-#N5^3"AN0[@6(U\H)')0TP # M*H_A:4@CG+&]7DOI>=[#G<@.I@+[_F(<"["OR+!9#V:/NK =O%F(GV(PH5P%JJ=,@>;-<"O< # MHV\$_A8_O:3]/=/]/X4]+@:V=4*$E!WRRH/;S;;1&V # ME,5R"/D?[.D@HWT&*5D%!NF-1-2&+,K8:<;)9-%#NHWJXU)_;#*3\S+))Y.P # MMH)H#XOBM.?B=PX&=,75'Y9K)6O;]6R=FF^+4O.ZH*W3\ZNI\;8@3>]*A/2O # .]VJJY/\+D-=?N%H1 #5 # # end # # The output below is the result of running emap on the default # SCO keymap as installed by SCO. It is the equivalent of the # at.ibm.usa key map file in /usr/lib/keyboard/keys, but with # the meta bits set properly. Note that for meta keys to work correctly # you MUST edit /etc/termcap and /usr/lib/terminfo/terminfo.src and add # the 'km' capability for the 'ansi' entry, and you must disable channel # mapping in /etc/default/mapchan for the console screens. Extra function # keys have been added, and the matching emacsstrs.sco is in this # directory to make a map which scoansi.el can use. So the sequence of # events should be: # a) Copy this file to /usr/lib/keyboard/keys # b) copy emacsstrs.sco to /usr/lib/keyboard/stings # c) run mapkey and mapstr and set MAPKEY=yes in /etc/default/boot # d) Add mapstr -f to your /etc/profile or your shell startup # e) Arrange to have scoansi.el loaded from your .emacs file. # # alt # scan cntrl alt alt cntrl lock # code base shift cntrl shift alt shift cntrl shift state # 0 nop nop nop nop nop nop nop nop O 1 esc esc esc esc 0x9b 0x9b 0x9b 0x9b O 2 '1' '!' nop nop 0xb1 0xa1 nop nop O 3 '2' '@' nul nul 0xb2 0xc0 0x80 0x80 O 4 '3' '#' nop nop 0xb3 0xa3 nop nop O 5 '4' '$' nop nop 0xb4 0xa4 nop nop O 6 '5' '%' nop nop 0xb5 0xa5 nop nop O 7 '6' '^' rs rs 0xb6 0xde 0x9e 0x9e O 8 '7' '&' nop nop 0xb7 0xa6 nop nop O 9 '8' '*' nop nop 0xb8 0xaa nop nop O 10 '9' '(' nop nop 0xb9 0xa8 nop nop O 11 '0' ')' nop nop 0xb0 0xa9 nop nop O 12 '-' '_' ns ns 0xad 0xdf 0x9f 0x9f O 13 '=' '+' nop nop 0xbd 0xab nop nop O 14 bs bs del del 0x88 0x88 0xff 0xff O 15 ht btab nop nop 0x89 btab nop nop O 16 'q' 'Q' dc1 dc1 0xf1 0xd1 0x91 0x91 C 17 'w' 'W' etb etb 0xf7 0xd7 0x97 0x97 C 18 'e' 'E' enq enq 0xe5 0xc5 0x85 0x85 C 19 'r' 'R' dc2 dc2 0xf2 0xd2 0x92 0x92 C 20 't' 'T' dc4 dc4 0xf4 0xd4 0x94 0x94 C 21 'y' 'Y' em em 0xf9 0xd9 0x99 0x99 C 22 'u' 'U' nak nak 0xf5 0xd5 0x95 0x95 C 23 'i' 'I' ht ht 0xe9 0xc9 0x89 0x89 C 24 'o' 'O' si si 0xef 0xcf 0x8f 0x8f C 25 'p' 'P' dle dle 0xf0 0xd0 0x90 0x90 C 26 '[' '{' esc esc 0xdb 0xfb 0x9b 0x9b O 27 ']' '}' gs gs 0xdd 0xfd 0x9d 0x9d O 28 cr cr nl nl 0x8d 0x8d 0x8a 0x8a O 29 ctrl ctrl ctrl ctrl ctrl ctrl ctrl ctrl O 30 'a' 'A' soh soh 0xe1 0xc1 0x81 0x81 C 31 's' 'S' dc3 dc3 0xf3 0xd3 0x93 0x93 C 32 'd' 'D' eot eot 0xe4 0xc4 0x84 0x84 C 33 'f' 'F' ack ack 0xe6 0xc6 0x86 0x86 C 34 'g' 'G' bel bel 0xe7 0xc7 0x87 0x87 C 35 'h' 'H' bs bs 0xe8 0xc8 0x88 0x88 C 36 'j' 'J' nl nl 0xea 0xca 0x8a 0x8a C 37 'k' 'K' vt vt 0xeb 0xcb 0x8b 0x8b C 38 'l' 'L' np np 0xec 0xcc 0x8c 0x8c C 39 ';' ':' nop nop 0xbb 0xba nop nop O 40 '\'' '"' nop nop 0xa7 0xa2 nop nop O 41 '`' '~' nop nop 0xe0 0xfe nop nop O 42 lshift lshift lshift lshift lshift lshift lshift lshift O 43 '\\' '|' fs fs 0xdc 0xfc 0x9c 0x9c O 44 'z' 'Z' sub sub 0xfa 0xda 0x9a 0x9a C 45 'x' 'X' can can 0xf8 0xd8 0x98 0x98 C 46 'c' 'C' etx etx 0xe3 0xc3 0x83 0x83 C 47 'v' 'V' syn syn 0xf6 0xd6 0x96 0x96 C 48 'b' 'B' stx stx 0xe2 0xc2 0x82 0x82 C 49 'n' 'N' so so 0xee 0xce 0x8e 0x8e C 50 'm' 'M' cr cr 0xed 0xcd 0x8d 0x8d C 51 ',' '<' nop nop 0xac 0xbc nop nop O 52 '.' '>' nop nop 0xae 0xbe nop nop O 53 '/' '?' nop nop 0xaf 0xbf nop nop O 54 rshift rshift rshift rshift rshift rshift rshift rshift O 55 '*' '*' nscr nscr 0xaa 0xaa nscr nscr O 56 alt alt alt alt alt alt alt alt O 57 ' ' ' ' ' ' ' ' 0xa0 0xa0 0xa0 0xa0 O 58 clock clock clock clock clock clock clock clock O 59 fkey1 fkey13 fkey25 fkey37 scr1 scr11 scr1 scr11 O 60 fkey2 fkey14 fkey26 fkey38 scr2 scr12 scr2 scr12 O 61 fkey3 fkey15 fkey27 fkey39 scr3 scr13 scr3 scr13 O 62 fkey4 fkey16 fkey28 fkey40 scr4 scr14 scr4 scr14 O 63 fkey5 fkey17 fkey29 fkey41 scr5 scr15 scr5 scr15 O 64 fkey6 fkey18 fkey30 fkey42 scr6 scr16 scr6 scr16 O 65 fkey7 fkey19 fkey31 fkey43 scr7 scr7 scr7 scr7 O 66 fkey8 fkey20 fkey32 fkey44 scr8 scr8 scr8 scr8 O 67 fkey9 fkey21 fkey33 fkey45 scr9 scr9 scr9 scr9 O 68 fkey10 fkey22 fkey34 fkey46 scr10 scr10 scr10 scr10 O 69 nlock nlock dc3 dc3 nlock nlock 0x93 0x93 O 70 slock slock del del slock slock 0xff 0xff O 71 fkey49 '7' '7' '7' '7' 0xb7 0xb7 0xb7 N 72 fkey50 '8' '8' '8' '8' 0xb8 0xb8 0xb8 N 73 fkey51 '9' '9' '9' '9' 0xb9 0xb9 0xb9 N 74 fkey52 '-' '-' '-' '-' 0xad 0xad 0xad N 75 fkey53 '4' '4' '4' '4' 0xb4 0xb4 0xb4 N 76 fkey54 '5' '5' '5' '5' 0xb5 0xb5 0xb5 N 77 fkey55 '6' '6' '6' '6' 0xb6 0xb6 0xb6 N 78 fkey56 '+' '+' '+' '+' 0xab 0xab 0xab N 79 fkey57 '1' '1' '1' '1' 0xb1 0xb1 0xb1 N 80 fkey58 '2' '2' '2' '2' 0xb2 0xb2 0xb2 N 81 fkey59 '3' '3' '3' '3' 0xb3 0xb3 0xb3 N 82 fkey60 '0' '0' '0' '0' 0xb0 0xb0 0xb0 N 83 del '.' del del 0xff 0xae 0xff 0xff N 84 ns ns ns ns 0x9f 0x9f 0x9f 0x9f O 85 nop nop nop nop nop nop nop nop O 86 nop nop nop nop nop nop nop nop O 87 fkey11 fkey23 fkey35 fkey47 scr11 scr11 scr11 scr11 O 88 fkey12 fkey24 fkey36 fkey48 scr12 scr12 scr12 scr12 O 89 nop nop nop nop nop nop nop nop O 90 nop nop nop nop nop nop nop nop O 91 nop nop nop nop nop nop nop nop O 92 nop nop nop nop nop nop nop nop O 93 nop nop nop nop nop nop nop nop O 94 nop nop nop nop nop nop nop nop O 95 nop nop nop nop nop nop nop nop O 96 fkey50 fkey62 fkey72 fkey50 fkey82 fkey62 fkey72 fkey50 N 97 fkey53 fkey64 fkey74 fkey53 fkey84 fkey64 fkey74 fkey53 N 98 fkey58 fkey67 fkey77 fkey58 fkey87 fkey67 fkey77 fkey58 N 99 fkey55 fkey65 fkey75 fkey55 fkey85 fkey65 fkey75 fkey55 N 100 fkey49 fkey61 fkey71 fkey49 fkey81 fkey61 fkey71 fkey49 N 101 nop nop nop nop nop nop nop nop O 102 fkey57 fkey66 fkey76 fkey57 fkey86 fkey66 fkey76 fkey57 N 103 fkey59 fkey68 fkey78 fkey59 fkey88 fkey68 fkey78 fkey59 N 104 fkey60 fkey69 fkey79 fkey60 fkey89 fkey69 fkey79 fkey60 N 105 del del del del 0xff 0xff 0xff 0xff N 106 fkey54 fkey54 fkey93 fkey54 fkey96 fkey54 fkey54 fkey54 N 107 nop nop nop nop nop nop nop nop O 108 nop nop nop nop nop nop nop nop O 109 nop nop nop nop nop nop nop nop O 110 nop nop nop nop nop nop nop nop O 111 nop nop nop nop nop nop nop nop O 112 nop nop nop nop nop nop nop nop O 113 nop nop nop nop nop nop nop nop O 114 nop nop nop nop nop nop nop nop O 115 nop nop nop nop nop nop nop nop O 116 nop nop nop nop nop nop nop nop O 117 nop nop nop nop nop nop nop nop O 118 nop nop nop nop nop nop nop nop O 119 nop nop nop nop nop nop nop nop O 120 nop nop nop nop nop nop nop nop O 121 nop nop nop nop nop nop nop nop O 122 nop nop nop nop nop nop nop nop O 123 nop nop nop nop nop nop nop nop O 124 nop nop nop nop nop nop nop nop O 125 nop nop nop nop nop nop nop nop O 126 nop nop nop nop nop nop nop nop O 127 nop nop nop nop nop nop nop nop O 128 rctrl rctrl rctrl rctrl rctrl rctrl rctrl rctrl O 129 ralt ralt ralt ralt ralt ralt ralt ralt O 130 fkey60 fkey69 fkey79 fkey60 fkey89 fkey69 fkey79 fkey60 O 131 del del del del 0xff 0xff 0xff 0xff N 132 fkey49 fkey61 fkey71 fkey49 fkey81 fkey61 fkey71 fkey49 N 133 fkey57 fkey66 fkey76 fkey57 fkey86 fkey66 fkey76 fkey57 N 134 fkey51 fkey63 fkey73 fkey51 fkey83 fkey63 fkey73 fkey51 N 135 fkey59 fkey68 fkey78 fkey59 fkey88 fkey68 fkey78 fkey59 N 136 fkey55 fkey65 fkey75 fkey55 fkey85 fkey65 fkey75 fkey55 N 137 fkey53 fkey64 fkey74 fkey53 fkey84 fkey64 fkey74 fkey53 N 138 fkey50 fkey62 fkey72 fkey50 fkey82 fkey62 fkey72 fkey50 N 139 fkey58 fkey67 fkey77 fkey58 fkey87 fkey67 fkey77 fkey58 N 140 '/' nop nop nop 0xaf nop nop nop O 141 cr cr nl nl 0x8d 0x8d 0x8a 0x8a O xemacs-21.4.22/etc/emacsstrs.sco0000644000175000017500000000475506256071513014545 0ustar acsacsString key values "\033[M" Function #1 "\033[N" Function #2 "\033[O" Function #3 "\033[P" Function #4 "\033[Q" Function #5 "\033[R" Function #6 "\033[S" Function #7 "\033[T" Function #8 "\033[U" Function #9 "\033[V" Function #10 "\033[W" Function #11 "\033[X" Function #12 "\033[Y" Shift Function #1 "\033[Z" Shift Function #2 "\033[a" Shift Function #3 "\033[b" Shift Function #4 "\033[c" Shift Function #5 "\033[d" Shift Function #6 "\033[e" Shift Function #7 "\033[f" Shift Function #8 "\033[g" Shift Function #9 "\033[h" Shift Function #10 "\033[i" Shift Function #11 "\033[j" Shift Function #12 "\033[k" Control Function #1 "\033[l" Control Function #2 "\033[m" Control Function #3 "\033[n" Control Function #4 "\033[o" Control Function #5 "\033[p" Control Function #6 "\033[q" Control Function #7 "\033[r" Control Function #8 "\033[s" Control Function #9 "\033[t" Control Function #10 "\033[u" Control Function #11 "\033[v" Control Function #12 "\033[w" Ctrl/Shft Function #1 "\033[x" Ctrl/Shft Function #2 "\033[y" Ctrl/Shft Function #3 "\033[z" Ctrl/Shft Function #4 "\033[@" Ctrl/Shft Function #5 "\033[[" Ctrl/Shft Function #6 "\033[\\" Ctrl/Shft Function #7 "\033[]" Ctrl/Shft Function #8 "\033[^" Ctrl/Shft Function #9 "\033[_" Ctrl/Shft Function #10 "\033[`" Ctrl/Shft Function #11 "\033[{" Ctrl/Shft Function #12 "\033[H" Home "\033[A" Up arrow "\033[I" Page up "\033[-" - "\033[D" Left arrow "\033[E" 5 "\033[C" Right arrow "\033[+" + "\033[F" End "\033[B" Down arrow "\033[G" Page down "\033[L" Insert "\033]A" Shift Home "\033]B" Shift Up "\033]C" Shift PgUp "\033]D" Shift Left "\033]E" Shift Right "\033]F" Shift End "\033]G" Shift Down "\033]H" Shift PgDn "\033]I" Shift Insert "\033]J" Shift Delete "\033]K" Ctrl Home "\033]L" Ctrl Up "\033]M" Ctrl PgUp "\033]N" Ctrl Left "\033]O" Ctrl Right "\033]P" Ctrl End "\033]Q" Ctrl Down "\033]R" Ctrl PgDn "\033]S" Ctrl Insert "\033]T" Ctrl Delete "\033]U" Alt Home "\033]V" Alt Up "\033]W" Alt PgUp "\033]X" Alt Left "\033]Y" Alt Right "\033]Z" Alt End "\033]a" Alt Down "\033]b" Alt PgDn "\033]c" Alt Insert "\033]d" Alt Delete "\033]e" Ctrl Keypad + "\033]f" Ctrl Keypad - "\033]g" Ctrl Keypad 5 "\033]h" Alt Keypad + "\033]i" Alt Keypad - "\033]j" Alt Keypad 5 xemacs-21.4.22/etc/etags.10000644000175000017500000002435707265371002013215 0ustar acsacs.\" Copyright (c) 1992 Free Software Foundation .\" See section COPYING for conditions for redistribution .TH etags 1 "14gen2001" "GNU Tools" "GNU Tools" .de BP .sp .ti -.2i \(** .. .SH NAME etags, ctags \- generate tag file for Emacs, vi .SH SYNOPSIS .hy 0 .na .B etags [\|\-aCDGImRVh\|] [\|\-i \fIfile\fP\|] [\|\-l \fIlanguage\fP\|] .if n .br .B [\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|] .br .B [\|\-\-append\|] [\|\-\-no\-defines\|] .B [\|\-\-no\-globals\|] [\|\-\-include=\fIfile\fP\|] .B [\|\-\-ignore\-indentation\|] [\|\-\-language=\fIlanguage\fP\|] .B [\|\-\-members\|] [\|\-\-output=\fItagfile\fP\|] .B [\|\-\-regex=\fIregexp\fP\|] [\|\-\-no\-regex\|] .B [\|\-\-ignore\-case\-regex=\fIregexp\fP\|] .B [\|\-\-help\|] [\|\-\-version\|] \fIfile\fP .\|.\|. .B ctags [\|\-aCdgImRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|] .if n .br .B [\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|] .br .B [\|\-\-append\|] [\|\-\-backward\-search\|] .B [\|\-\-cxref\|] [\|\-\-defines\|] [\|\-\-forward\-search\|] .B [\|\-\-globals\|] [\|\-\-ignore\-indentation\|] .B [\|\-\-language=\fIlanguage\fP\|] [\|\-\-members\|] .B [\|\-\-output=\fItagfile\fP\|] [\|\-\-regex=\fIregexp\fP\|] .B [\|\-\-ignore\-case\-regex=\fIregexp\fP\|] .B [\|\-\-typedefs\|] [\|\-\-typedefs\-and\-c++\|] .B [\|\-\-update\|] [\|\-\-no\-warn\|] .B [\|\-\-help\|] [\|\-\-version\|] \fIfile\fP .\|.\|. .ad b .hy 1 .SH DESCRIPTION The `\|\fBetags\fP\|' program is used to create a tag table file, in a format understood by .BR emacs ( 1 )\c \&; the `\|\fBctags\fP\|' program is used to create a similar table in a format understood by .BR vi ( 1 )\c \&. Both forms of the program understand the syntax of C, Objective C, C++, Java, Fortran, Ada, Cobol, Erlang, LaTeX, Emacs Lisp/Common Lisp, makefiles, Pascal, Perl, Postscript, Python, Prolog, Scheme and most assembler\-like syntaxes. Both forms read the files specified on the command line, and write a tag table (defaults: `\|TAGS\|' for \fBetags\fP, `\|tags\|' for \fBctags\fP) in the current working directory. Files specified with relative file names will be recorded in the tag table with file names relative to the directory where the tag table resides. Files specified with absolute file names will be recorded with absolute file names. The programs recognize the language used in an input file based on its file name and contents. The --language switch can be used to force parsing of the file names following the switch according to the given language, overriding guesses based on filename extensions. .SH OPTIONS Some options make sense only for the \fBvi\fP style tag files produced by ctags; \fBetags\fP does not recognize them. The programs accept unambiguous abbreviations for long option names. .TP .B \-a, \-\-append Append to existing tag file. (For vi-format tag files, see also \fB\-\-update\fP.) .TP .B \-B, \-\-backward\-search Tag files written in the format expected by \fBvi\fP contain regular expression search instructions; the \fB\-B\fP option writes them using the delimiter `\|\fB?\fP\|', to search \fIbackwards\fP through files. The default is to use the delimiter `\|\fB/\fP\|', to search \fIforwards\fP through files. Only \fBctags\fP accepts this option. .TP .B \-\-declarations In C and derived languages, create tags for function declarations, and create tags for extern variables unless \-\-no\-globals is used. .TP .B \-d, \-\-defines Create tag entries for C preprocessor constant definitions and enum constants, too. This is the default behavior for \fBetags\fP. .TP .B \-D, \-\-no\-defines Do not create tag entries for C preprocessor constant definitions and enum constants. This may make the tags file much smaller if many header files are tagged. This is the default behavior for \fBctags\fP. .TP .B \-g, \-\-globals Create tag entries for global variables in C, C++, Objective C, Java, and Perl. This is the default behavior for \fBetags\fP. .TP .B \-G, \-\-no\-globals Do not tag global variables. Typically this reduces the file size by one fourth. This is the default behavior for \fBctags\fP. .TP \fB\-i\fP \fIfile\fP, \fB\-\-include=\fIfile\fP Include a note in the tag file indicating that, when searching for a tag, one should also consult the tags file \fIfile\fP after checking the current file. This options is only accepted by \fBetags\fP. .TP .B \-I, \-\-ignore\-indentation Don't rely on indentation as much as we normally do. Currently, this means not to assume that a closing brace in the first column is the final brace of a function or structure definition in C and C++. .TP \fB\-l\fP \fIlanguage\fP, \fB\-\-language=\fIlanguage\fP Parse the following files according to the given language. More than one such options may be intermixed with filenames. Use \fB\-\-help\fP to get a list of the available languages and their default filename extensions. The `auto' language can be used to restore automatic detection of language based on the file name. The `none' language may be used to disable language parsing altogether; only regexp matching is done in this case (see the \fB\-\-regex\fP option). .TP .B \-m, \-\-members Create tag entries for variables that are members of structure-like constructs in C++, Objective C, Java. .TP .B \-M, \-\-no\-members Do not tag member variables. This is the default behavior. .TP .B \-\-packages\-only Only tag packages in Ada files. .TP \fB\-o\fP \fItagfile\fP, \fB\-\-output=\fItagfile\fP Explicit name of file for tag table; overrides default `\|TAGS\|' or `\|tags\|'. (But ignored with \fB\-v\fP or \fB\-x\fP.) .TP \fB\-r\fP \fIregexp\fP, \fB\-\-regex=\fIregexp\fP, \fB\-\-ignore\-case\-regex=\fIregexp\fP Make tags based on regexp matching for each line of the files following this option, in addition to the tags made with the standard parsing based on language. When using \-\-regex, case is significant, while it is not with \-\-ignore\-case\-regex. May be freely intermixed with filenames and the \fB\-R\fP option. The regexps are cumulative, i.e. each option will add to the previous ones. The regexps are of the form: .br \fB/\fP\fItagregexp\fP[\fB/\fP\fInameregexp\fP]\fB/\fP .br where \fItagregexp\fP is used to match the lines that must be tagged. It should not match useless characters. If the match is such that more characters than needed are unavoidably matched by \fItagregexp\fP, it may be useful to add a \fInameregexp\fP, to narrow down the tag scope. \fBctags\fP ignores regexps without a \fInameregexp\fP. The syntax of regexps is the same as in emacs, augmented with intervals of the form \\{m,n\\}, as in ed or grep. .br Here are some examples. All the regexps are quoted to protect them from shell interpretation. .br Tag the DEFVAR macros in the emacs source files: .br \fI\-\-regex\='/[ \\t]*DEFVAR_[A-Z_ \\t(]+"\\([^"]+\\)"\/'\fP .br Tag VHDL files (this example is a single long line, broken here for formatting reasons): .br \fI\-\-language\=none\ \-\-regex='/[\ \\t]*\\(ARCHITECTURE\\|\\ CONFIGURATION\\)\ +[^\ ]*\ +OF/'\ \-\-regex\='/[\ \\t]*\\ \\(ATTRIBUTE\\|ENTITY\\|FUNCTION\\|PACKAGE\\(\ BODY\\)?\\ \\|PROCEDURE\\|PROCESS\\|TYPE\\)[\ \\t]+\\([^\ \\t(]+\\)/\\3/'\fP .br Tag TCL files (this last example shows the usage of a \fItagregexp\fP): .br \fI\-\-lang\=none \-\-regex\='/proc[\ \\t]+\\([^\ \\t]+\\)/\\1/'\fP .br A regexp can be preceded by {lang}, thus restriciting it to match lines of files of the specified language. Use \fBetags --help\fP to obtain a list of the recognised languages. This feature is particularly useful inside \fBregex files\fP. A regex file contains one regex per line. Empty lines, and those lines beginning with space or tab are ignored. Lines beginning with @ are references to regex files whose name follows the @ sign. Other lines are considered regular expressions like those following \-\-regex. .br For example, the command .br etags \-\-regex=@regex.file *.c .br reads the regexes contained in the file regex.file. .TP .B \-R, \-\-no\-regex Don't do any more regexp matching on the following files. May be freely intermixed with filenames and the \fB\-\-regex\fP option. .TP .B \-t, \-\-typedefs Record typedefs in C code as tags. Since this is the default behaviour of \fBetags\fP, only \fBctags\fP accepts this option. .TP .B \-T, \-\-typedefs\-and\-c++ Generate tag entries for typedefs, struct, enum, and union tags, and C++ member functions. Since this is the default behaviour of \fBetags\fP, only \fBctags\fP accepts this option. .TP .B \-u, \-\-update Update tag entries for \fIfiles\fP specified on command line, leaving tag entries for other files in place. Currently, this is implemented by deleting the existing entries for the given files and then rewriting the new entries at the end of the tags file. It is often faster to simply rebuild the entire tag file than to use this. Only \fBctags\fP accepts this option. .TP .B \-v, \-\-vgrind Instead of generating a tag file, write index (in \fBvgrind\fP format) to standard output. Only \fBctags\fP accepts this option. .TP .B \-w, \-\-no\-warn Suppress warning messages about duplicate entries. The \fBetags\fP program does not check for duplicate entries, so this option is not allowed with it. .TP .B \-x, \-\-cxref Instead of generating a tag file, write a cross reference (in \fBcxref\fP format) to standard output. Only \fBctags\fP accepts this option. .TP .B \-h, \-H, \-\-help Print usage information. .TP .B \-V, \-\-version Print the current version of the program (same as the version of the emacs \fBetags\fP is shipped with). .SH "SEE ALSO" `\|\fBemacs\fP\|' entry in \fBinfo\fP; \fIGNU Emacs Manual\fP, Richard Stallman. .br .BR cxref ( 1 ), .BR emacs ( 1 ), .BR vgrind ( 1 ), .BR vi ( 1 ). .SH COPYING Copyright (c) 1999 Free Software Foundation, Inc. .PP Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. .PP Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. .PP Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English. xemacs-21.4.22/etc/gnu.xbm0000644000175000017500000000433606256071510013324 0ustar acsacs#define gnu_width 50 #define gnu_height 50 static unsigned char gnu_bits[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xf3, 0xff, 0x8f, 0xff, 0xe1, 0xff, 0xff, 0xf9, 0x3f, 0x22, 0xfe, 0xcb, 0xff, 0xff, 0xf8, 0xc3, 0xf8, 0xfc, 0xcb, 0xff, 0x7f, 0xfc, 0xe0, 0xf9, 0xf9, 0xdb, 0xff, 0x7f, 0xfc, 0xf0, 0xfb, 0xf3, 0xd9, 0xff, 0x3f, 0x7e, 0xf8, 0xff, 0xf7, 0xcc, 0xff, 0x9f, 0x3e, 0x1c, 0x7f, 0x44, 0xce, 0xff, 0xcf, 0x1e, 0xcc, 0x01, 0x00, 0xe7, 0xff, 0xef, 0x0e, 0xce, 0x38, 0x1c, 0xe0, 0xff, 0xef, 0x0e, 0x27, 0xfe, 0xfa, 0xc3, 0xff, 0xef, 0x7c, 0x93, 0xff, 0xe5, 0xbf, 0xff, 0xef, 0x99, 0xc9, 0xab, 0x2a, 0x00, 0xff, 0xcf, 0xc3, 0x24, 0x54, 0xc5, 0xd5, 0xff, 0x9f, 0x7f, 0x16, 0xab, 0xca, 0xff, 0xff, 0x1f, 0x1f, 0x93, 0x46, 0x95, 0xff, 0xff, 0x7f, 0xc8, 0x49, 0x99, 0x8a, 0xff, 0xff, 0xff, 0xf0, 0x49, 0x4b, 0x95, 0xff, 0xff, 0xff, 0xf9, 0x4c, 0x88, 0x8a, 0xff, 0xff, 0xff, 0x1e, 0xe6, 0x58, 0x95, 0xff, 0xff, 0x3f, 0x00, 0xe6, 0xb7, 0x0a, 0xff, 0xff, 0xbf, 0x8a, 0xea, 0x50, 0x15, 0xff, 0xff, 0xff, 0x8f, 0xca, 0x99, 0x2a, 0xff, 0xff, 0xff, 0xa7, 0x95, 0x7f, 0x15, 0xff, 0xff, 0xff, 0x23, 0x55, 0x7f, 0x2a, 0xfe, 0xff, 0xff, 0x63, 0xd8, 0xfc, 0x14, 0xfe, 0xff, 0xff, 0x43, 0x9a, 0xfb, 0x2b, 0xfe, 0xff, 0xff, 0xc3, 0xaa, 0x12, 0x94, 0xfc, 0xff, 0xff, 0xc1, 0x32, 0xd5, 0xc1, 0xfd, 0xff, 0xff, 0x81, 0x46, 0xd5, 0x47, 0xfc, 0xff, 0xff, 0x83, 0x6c, 0xc2, 0x6e, 0xfc, 0xff, 0xff, 0x83, 0x89, 0x88, 0x69, 0xfe, 0xff, 0xff, 0x07, 0x92, 0x09, 0x3b, 0xfe, 0xff, 0xff, 0x07, 0x22, 0x01, 0x3c, 0xfe, 0xff, 0xff, 0x0f, 0x4e, 0x02, 0x03, 0xfe, 0xff, 0xff, 0x2f, 0xd0, 0x18, 0x3e, 0xff, 0xff, 0xff, 0x3f, 0xb0, 0x19, 0x9e, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x09, 0x80, 0xff, 0xff, 0xff, 0x7f, 0x01, 0xe3, 0xc1, 0xff, 0xff, 0xff, 0xff, 0x05, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; xemacs-21.4.22/etc/gnu.xpm0000644000175000017500000000615606256071511013345 0ustar acsacs/* XPM */ /*****************************************************************************/ /* GNU Emacs bitmap conv. to pixmap by Przemek Klosowski (przemek@nist.gov) */ /*****************************************************************************/ static char * image_name [] = { /**/ "50 50 7 1", /**/ " s mask c none", "B c blue", "x c black", ": c sandy brown", "+ c saddle brown", "' c grey", ". c white", " ", " ", " x ", " :x ", " :::x ", " ::x ", " x ::x ", " x: xxx :::x ", " x: xxx xxx:xxx x::x ", " x:: xxxx::xxx:::::xx x::x ", " x:: x:::::::xx::::::xx x::x ", " x:: xx::::::::x:::::::xx xx::x ", " x:: xx::::::::::::::::::x xx::xx ", " x::x xx:::::xxx:::::::xxx:xxx xx:::xx ", " x:::x xx:::::xx...xxxxxxxxxxxxxxx:::xx ", " x:::x xx::::::xx..xxx...xxxx...xxxxxxxx ", " x:::x x::::::xx.xxx.......x.x.......xxxx ", " x:::xx x:::x::xx.xx..........x.xx.........x ", " x::::xx::xx:::x.xx....''''x'x'x''.xxx.....x ", " xx::::xxxx::xx.xx.xxxx.'''''''.xxx xxxx ", " xx::::::::xx..x.xxx..'''''''''.xx ", " xxx:::::xxx..xx.xx.xx.xxx.'''''.xx ", " xxx::xx...xx.xx.BBBB..xx''''''xx ", " xxxx.....xx.xxBB:BB.xx'''''''xx ", " xx.....xx...x.BBBx.xxx''''''xx ", " x....xxxx..xx...xxx''''''''''xx ", " x..xxxxxx..x.......x..''''''''xx ", " x.x xxx.x.x.x...xxxx.'''''''''xx ", " x xxx.x.x.xx...xx..'''''''''xx ", " xx.x..x.x.xx........''''''''x ", " xx'.xx.x.x.x.x.......'''''''''x ", " xx'..xxxx..x...x.......'''''''x ", " xx''.xx.x..xx...x.......'''.xxx ", " xx''..x.x.x.x.x.xx.xxxxx.'.xx+xx ", " xx''..x.xx..xx.x.x.x+++xxxxx+++x ", " xx'''.x..xxx.x.x.x.x+++++xxx+xxx ", " xx''.xx..x..xx.xxxx++x+++x++xxx ", " xx''..xx.xxx.xxx.xxx++xx+x++xx ", " xx'''.xx.xx..xx.xxxx++x+++xxx ", " xx'''.xxx.xx.xxxxxxxxx++++xxx ", " xx''...xx.xx.xxxxxx++xxxxxxx ", " xx''''..x..xxx..xxxx+++++xx ", " xx''''..x..xx..xxxx++++xx ", " xxx'''''x.xx.xxxxxxxxxxx ", " xxx'''''..xxx xxxxx ", " xxxx''''xxxx ", " xxx'''xxx ", " xxxxx ", " ", " " }; xemacs-21.4.22/etc/gnuattach.10000644000175000017500000000002306256071512014052 0ustar acsacs.so man1/gnuserv.1 xemacs-21.4.22/etc/gnuclient.10000644000175000017500000000002306256071512014064 0ustar acsacs.so man1/gnuserv.1 xemacs-21.4.22/etc/gnudoit.10000644000175000017500000000002306256071512013545 0ustar acsacs.so man1/gnuserv.1 xemacs-21.4.22/etc/gnuserv.10000644000175000017500000002666607265371002013610 0ustar acsacs.TH GNUSERV 1 "" "XEmacs Server" .UC 4 .SH NAME gnuserv, gnuclient \- Server and Clients for XEmacs .SH SYNOPSIS .B gnuclient [-nw] [-display display] [-q] [-v] [-l library] [-batch] [-f function] [-eval form] [-h hostname] [-p port] [-r remote-pathname] [[+line] file] ... .br .B gnudoit [-q] form .br .B gnuserv .br .B gnuattach Removed as of gnuserv 3.x .SH DESCRIPTION .PP \fIgnuclient\fP allows the user to request a running XEmacs process to edit the named files or directories and/or evaluate lisp forms. Depending on your environment, it can be an X frame or a TTY frame. One typical use for this is with a dialup connection to a machine on which an XEmacs process is currently running. .PP \fIgnudoit\fP is a shell script frontend to ``gnuclient -batch -eval form''. Its use is deprecated. Try to get used to calling gnuclient directly. .PP \fIgnuserv\fP is the server program that is set running by XEmacs to handle all incoming and outgoing requests. It is not usually invoked directly, but is started from XEmacs by loading the \fIgnuserv\fP package and evaluating the Lisp form (gnuserv-start). .PP \fIgnuattach\fP no longer exists. Its functionality has been replaced by \fIgnuclient -nw\fP. .SH OPTIONS .PP \fIgnuclient\fP supports as much of the command line options of Emacs as makes sense in this context. In addition it adds a few of its own. .br Options with long names can also be specified using a double hyphen instead of a single one. .TP 8 .BI \-nw This option makes \fIgnuclient\fP act as a frontend such that XEmacs can attach to the current TTY. XEmacs will then open a new TTY frame. The effect is similar to having started a new XEmacs on this TTY with the ``-nw'' option. It currently only works if XEmacs is running on the same machine as gnuclient. This is the default if the `DISPLAY' environment variable is not set. .TP 8 .BI \-display " display, " \--display " display" If this option is given or the `DISPLAY' environment variable is set then gnuclient will tell XEmacs to edit files in a frame on the specified X device. .TP 8 .BI \-q This option informs \fIgnuclient\fP to exit once connection has been made with the XEmacs process. Normally \fIgnuclient\fP waits until all of the files on the command line have been finished with (their buffers killed) by the XEmacs process, and all the forms have been evaluated. .TP 8 .BI \-v When this option is specified \fIgnuclient\fP will request for the specified files to be viewed instead of edited. .TP 8 .BI \-l " library" Tell Emacs to load the specified library. .TP 8 .BI \-batch Tell Emacs not to open any frames. Just load libraries and evaluate lisp code. If no files to execute, functions to call or forms to eval are given using the .BR \-l , .BR \-f , or .B \-eval options, then forms to eval are read from STDIN. .TP 8 .BI \-f " function," Make Emacs execute the lisp function. .TP 8 .BI \-eval " form" Make Emacs execute the lisp form. .TP 8 .BI \-h " hostname" Used only with Internet-domain sockets, this option specifies the host machine which should be running \fIgnuserv\fP. If this option is not specified then the value of the environment variable GNU_HOST is used if set. If no hostname is specified, and the GNU_HOST variable is not set, an internet connection will not be attempted. N\.B.: \fIgnuserv\fP does NOT allow internet connections unless XAUTH authentication is used or the GNU_SECURE variable has been specified and points at a file listing all trusted hosts. (See SECURITY below.) .br Note that an internet address may be specified instead of a hostname which can speed up connections to the server by quite a bit, especially if the client machine is running YP. .br Note also that a hostname of \fBunix\fP can be used to specify that the connection to the server should use a Unix-domain socket (if supported) rather than an Internet-domain socket. .TP 8 .BI \-p " port" Used only with Internet-domain sockets, this option specifies the service port used to communicate between server and clients. If this option is not specified, then the value of the environment variable GNU_PORT is used, if set, otherwise a service called ``gnuserv'' is looked up in the services database. Finally, if no other value can be found for the port, then a default port is used which is usually 21490 + uid. .br Note that since \fIgnuserv\fP doesn't allow command-line options, the port for it will have to be specified via one of the alternative methods. .TP 8 .BI \-r " pathname" Used only with Internet-domain sockets, the pathname argument may be needed to inform XEmacs how to reach the root directory of a remote machine. \fIgnuclient\fP prepends this string to each path argument given. For example, if you were trying to edit a file on a client machine called otter, whose root directory was accessible from the server machine via the path /net/otter, then this argument should be set to '/net/otter'. If this option is omitted, then the value is taken from the environment variable GNU_NODE, if set, or the empty string otherwise. .TP 8 .BI "[+n] file" This is the path of the file to be edited. If the file is a directory, then the directory browsers dired or monkey are usually invoked instead. The cursor is put at line number 'n' if specified. .SH SETUP \fIgnuserv\fP is packaged standardly with recent versions of XEmacs. Therefore, you should be able to start the server simply by evaluating the XEmacs Lisp form (gnuserv-start), or equivalently by typing `M-x gnuserv-start'. .SH CONFIGURATION The behavior of this suite of program is mostly controlled on the lisp side in Emacs and its behavior can be customized to a large extent. Type `M-x customize-group RET gnuserv RET' for easy access. More documentation can be found in the file `gnuserv.el' .SH EXAMPLE .RS 4 gnuclient -q -f mh-smail .br gnuclient -h cuckoo -r /ange@otter: /tmp/* .br gnuclient -nw ../src/listproc.c .RE .br .br More examples and sample wrapper scripts are provided in the etc/gnuserv directory of the Emacs installation. .SH SYSV IPC SysV IPC is used to communicate between \fIgnuclient\fP and \fIgnuserv\fP if the symbol SYSV_IPC is defined at the top of gnuserv.h. This is incompatible with both Unix-domain and Internet-domain socket communication as described below. A file called /tmp/gsrv??? is created as a key for the message queue, and if removed will cause the communication between server and client to fail until the server is restarted. .SH UNIX-DOMAIN SOCKETS A Unix-domain socket is used to communicate between \fIgnuclient\fP and \fIgnuserv\fP if the symbol UNIX_DOMAIN_SOCKETS is defined at the top of gnuserv.h. A file called /tmp/gsrvdir????/gsrv is created for communication. If the symbol USE_TMPDIR is set at the top of gnuserv.h, $TMPDIR, when set, is used instead of /tmp. If that file is deleted, or TMPDIR has different values for the server and the client, communication between server and client will fail. Only the user running gnuserv will be able to connect to the socket. .SH INTERNET-DOMAIN SOCKETS Internet-domain sockets are used to communicate between \fIgnuclient\fP and \fIgnuserv\fP if the symbol INTERNET_DOMAIN_SOCKETS is defined at the top of gnuserv.h. Both Internet-domain and Unix-domain sockets can be used at the same time. If a hostname is specified via -h or via the GNU_HOST environment variable, \fIgnuclient\fP establish connections using an internet domain socket. If not, a local connection is attempted via either a unix-domain socket or SYSV IPC. .SH SECURITY Using Internet-domain sockets, a more robust form of security is needed that wasn't necessary with either Unix-domain sockets or SysV IPC. Currently, two authentication protocols are supported to provide this: MIT-MAGIC-COOKIE-1 (based on the X11 xauth(1) program) and a simple host-based access control mechanism, hereafter called GNUSERV-1. The GNUSERV-1 protocol is always available, whereas support for MIT-MAGIC-COOKIE-1 may or may not have been enabled (via a #define at the top of gnuserv.h) at compile-time. .PP \fIgnuserv\fP, using GNUSERV-1, performs a limited form of access control at the machine level. By default no internet-domain socket is opened. If the variable GNU_SECURE can be found in \fIgnuserv\fP's environment, and it names a readable filename, then this file is opened and assumed to be a list of hosts, one per line, from which the server will allow requests. Connections from any other host will be rejected. Even the machine on which \fIgnuserv\fP is running is not permitted to make connections via the internet socket unless its hostname is explicitly specified in this file. Note that a host may be either a numeric IP address or a hostname, and that .I any user on an approved host may connect to your gnuserv and execute arbitrary elisp (e.g., delete all your files). If this file contains a lot of hostnames then the server may take quite a time to start up. .PP When the MIT-MAGIC-COOKIE-1 protocol is enabled, an internet socket \fIis\fP opened by default. \fIgnuserv\fP will accept a connection from any host, and will wait for a "magic cookie" (essentially, a password) to be presented by the client. If the client doesn't present the cookie, or if the cookie is wrong, the authentication of the client is considered to have failed. At this point. \fIgnuserv\fP falls back to the GNUSERV-1 protocol; If the client is calling from a host listed in the GNU_SECURE file, the connection will be accepted, otherwise it will be rejected. .TP 4 .I Using MIT-MAGIC-COOKIE-1 authentication When the \fIgnuserv\fP server is started, it looks for a cookie defined for display 999 on the machine where it is running. If the cookie is found, it will be stored for use as the authentication cookie. These cookies are defined in an authorization file (usually ~/.Xauthority) that is manipulated by the X11 xauth(1) program. For example, a machine "kali" which runs an emacs that invokes \fIgnuserv\fP should respond as follows (at the shell prompt) when set up correctly. .PP .RS 8 kali% xauth list .br GS65.SP.CS.CMU.EDU:0 MIT-MAGIC-COOKIE-1 11223344 .br KALI.FTM.CS.CMU.EDU:999 MIT-MAGIC-COOKIE-1 1234 .RE .PP .RS 4 In the above case, the authorization file defines two cookies. The second one, defined for screen 999 on the server machine, is used for gnuserv authentication. .PP On the client machine's side, the authorization file must contain an identical line, specifying the .I server's cookie. In other words, on a machine "foobar" which wishes to connect to "kali," the `xauth list' output should contain the line: .PP .RS 4 KALI.FTM.CS.CMU.EDU:999 MIT-MAGIC-COOKIE-1 1234 .RE .PP For more information on authorization files, take a look at the xauth(1X11) man page, or invoke xauth interactively (without any arguments) and type "help" at the prompt. Remember that case in the name of the authorization protocol (i.e.`MIT-MAGIC-COOKIE-1') .I is significant! .RE .SH ENVIRONMENT .PP .TP 8 .B DISPLAY Default X device to put edit frame. .SH FILES .PP .TP 8 .B /tmp/gsrv??? (SYSV_IPC only) .TP 8 .B /tmp/gsrvdir???/gsrv (unix domain sockets only) .TP 8 .B ~/.emacs XEmacs customization file, see xemacs(1). .SH SEE ALSO .PP .TP 8 xauth(1X11), Xsecurity(1X11), gnuserv.el .SH BUGS .PP NULs occurring in result strings don't get passed back to gnudoit properly. .SH AUTHOR. Andy Norman (ange@hplb.hpl.hp.com), based heavily upon etc/emacsclient.c, etc/server.c and lisp/server.el from the GNU Emacs 18.52 distribution. Various modifications from Bob Weiner (weiner@mot.com), Darrell Kindred (dkindred@cmu.edu), Arup Mukherjee (arup@cmu.edu), Ben Wing (ben@xemacs.org) and Hrvoje Niksic (hniksic@xemacs.org). xemacs-21.4.22/etc/gnuserv.README0000644000175000017500000001073706546103441014376 0ustar acsacsThis file is not meant to be proper documentation. See the file gnuserv.1 for more information. **** NOTE: This version of gnuserv has some enhancements over the original version distributed by Andy Norman. See the end of this file for more details. **** To install, copy gnuserv.el into a directory on your GNU Emacs load-path. Edit Makefile and change INCLUDES to point to the src directory underneath your emacs source tree (or make yourself a config.h file in this directory by hand, starting with config.h.proto as a first cut) and type: make This should compile the server and the two clients. Now put gnuserv, gnuclient and gnudoit in a directory that users have in their executable search paths. File : Description ---------------------------------------------------------------- Makefile : Makefile to build gnuserv LICENSE : GNU General License README : this file gnuclient.c : editor client C code gnudoit.c : eval client C code gnuserv.1 : gnuserv man page gnuserv.c : server C code gnuserv.el : server LISP code for GNU Emacs V18,V19, XEmacs/Lucid Emacs and Epoch V4 gnuserv.h : server/client C header file gnuslib.c : server/client C common code src.x11fns.diff : diffs to src/x11fns to raise window (for emacs18) config.h.proto : Use this file as the starting point for constructing a config.h if you don't have access to the one that was used when compiling your emacs. If you find *any* problems at all with gnuserv, or you can think of better ways of doing things (especially remote file access), please e-mail me at one of the addresses below. ange@hplb.hpl.hp.com ange@hpl.hp.co.uk ...!hplabs!hplb!ange ...!ukc!hplb!ange This version of gnuserv has been enhanced by a number of people, including Bob Weiner , Darrell Kindred , Arup Mukherjee , and Ben Wing . The modifications are basically as follows: Bob Weiner: Integrated support for several versions of emacs. New requests from gnuclient cause the creation of new frames. Removed the restriction on the length of the string passed to gnudoit. Later added a server-done-function variable to control what happens to a buffer after the user is done with it. Mods to each of the .c files as well as gnuserv.el. Darrell Kindred: Removed the restriction on the length of the string returned from a gnudoit request, for the purposes of unix/internet sockets. Allow the gnudoit request to be read from stdin if it's not specified on the command line. Internet sockets are not opened unless the GNU_SECURE variable is specified. Unix sockets are created in a protected ancestral directory, since many Unix variants don't enforce socket permissions properly. An internet socket accepting local connections is not opened by default because this would make it possibly to override all security on the unix socket. See the man page for details. Unless told to do otherwise by a command-line argument, gnuclient and gnudoit now try to open a unix socket by default if support for them was compiled in. Mods to each of the .c files and to gnuserv.el. Arup Mukherjee: Removed the restriction on the length of the string returned from a gnudoit request, for the purposes of sysv ipc. Added support for the "gnuserv-frame" variable allowing you to specify control whether or not new screens are created in response to each gnuclient request. Made a number of other bugfixes and changes to the lisp part of the code, allowing gnuserv to work properly with newer emacs versions. All the changes are listed in the changelog at the beginning of gnuserv.el. Also fixed up the man page to reflect the new gnuserv features. On HPs, stopped the "-r" parameter (in gnuclient) from defaulting to /net/. Not all installations want this, and it's much harder to debug when things stop working. Changed the man page to reflect this. Mods to each of the .c files, gnuserv.el and gnuserv.1 More recently - added Xauth(1X11)-style authentication to gnuserv (as of version 2.1). Although the code is completely new, credit is due to Richard Caley ... he wrote a prototype implementation from which I borrowed the basic mechanism for hooking Xauth into gnuserv. Ben Wing: Added gnuattach. xemacs-21.4.22/etc/gray1.xbm0000644000175000017500000000041506256071512013552 0ustar acsacs#define bg2_width 16 #define bg2_height 16 static char bg2_bits[] = { 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00}; xemacs-21.4.22/etc/gtkrc0000644000175000017500000000030410050036447013044 0ustar acsacs# Force the window background to be the same as the default face background: # white. style "default_background" { bg[NORMAL] = { 1.0, 1.0, 1.0 } } class "GtkXEmacs" style "default_background" xemacs-21.4.22/etc/ms-kermit0000644000175000017500000000753606256071512013665 0ustar acsacs;;; This file is designed for an 8-bit connection. ;;; Use the file ms-kermit-7bit if you have a 7-bit connection. ;; Meta key mappings for EMACS ;; By Robert Earl (rearl@watnxt3.ucr.edu) ;; May 13, 1990 ;; ;; WARNING: ;; requires an 8-bit path to host. many dialups and lans won't pass the ;; eighth bit by default and may require a special command to turn this ;; off. `screen' is known to mask the eighth bit of input as well. set term controls 8-bit set translation key off ;; control keys set key \3449 \128 ;; m-c-@ set key \3358 \129 ;; m-c-a set key \3376 \130 ;; m-c-b set key \3374 \131 ;; m-c-c set key \3360 \132 ;; m-c-d set key \3346 \133 ;; m-c-e set key \3361 \134 ;; m-c-f set key \3362 \135 ;; m-c-g set key \3342 \136 ;; m-bs set key \3363 \136 ;; m-c-h (sends same code as above) set key \2469 \137 ;; m-tab set key \3351 \137 ;; m-c-i (same as above) set key \3364 \138 ;; m-c-j set key \3365 \139 ;; m-c-k set key \3366 \140 ;; m-c-l ;set key \3378 \141 ;; m-c-m set key \2332 \141 ;; m-ret (sends same code as above) set key \3377 \142 ;; m-c-n set key \3352 \143 ;; m-c-o set key \3353 \144 ;; m-c-p set key \3344 \145 ;; m-c-q set key \3347 \146 ;; m-c-r set key \3359 \147 ;; m-c-s set key \3348 \148 ;; m-c-t set key \3350 \149 ;; m-c-u set key \3375 \150 ;; m-c-v set key \3345 \151 ;; m-c-w set key \3373 \152 ;; m-c-x set key \3349 \153 ;; m-c-y set key \3372 \154 ;; m-c-z ;; misc keys ;set key \3354 \155 ;; m-c-[ set key \2305 \155 ;; m-esc (sends same as above) set key \3371 \156 ;; m-c-\ set key \3355 \157 ;; m-c-] set key \3453 \158 ;; m-c-^ set key \3458 \159 ;; m-c-_ ;; \160 is conspicuously missing here-- ;; alt-spc doesn't generate a distinct scan code... ;; neither do shift-spc and ctrl-spc. ;; no idea why. set key \2936 \161 ;; m-! set key \2856 \162 ;; m-" set key \2938 \163 ;; m-# set key \2939 \164 ;; m-$ set key \2940 \165 ;; m-% set key \2942 \166 ;; m-& set key \2344 \167 ;; m-' set key \2944 \168 ;; m-( set key \2945 \169 ;; m-) set key \2943 \170 ;; m-* set key \2947 \171 ;; m-+ set key \2355 \172 ;; m-, set key \2434 \173 ;; m-- set key \2356 \174 ;; m-. set key \2357 \175 ;; m-/ ;; number keys set key \2433 \176 ;; m-0 set key \2424 \177 ;; m-1 set key \2425 \178 set key \2426 \179 set key \2427 \180 set key \2428 \181 set key \2429 \182 set key \2430 \183 set key \2431 \184 set key \2432 \185 ;; m-9 set key \2855 \186 ;; m-: set key \2343 \187 ;; m-; set key \2867 \188 ;; m-< set key \2435 \189 ;; m-= set key \2868 \190 ;; m-> set key \2869 \191 ;; m-? set key \2937 \192 ;; m-@ ;; shifted A-Z set key \2846 \193 ;; m-A set key \2864 \194 set key \2862 \195 set key \2848 \196 set key \2834 \197 set key \2849 \198 set key \2850 \199 set key \2851 \200 set key \2839 \201 set key \2852 \202 set key \2853 \203 set key \2854 \204 set key \2866 \205 set key \2865 \206 set key \2840 \207 set key \2841 \208 set key \2832 \209 set key \2835 \210 set key \2847 \211 set key \2836 \212 set key \2838 \213 set key \2863 \214 set key \2833 \215 set key \2861 \216 set key \2837 \217 set key \2860 \218 ;; m-Z set key \2330 \219 ;; m-[ set key \2347 \220 ;; m-\ set key \2331 \221 ;; m-] set key \2941 \222 ;; m-^ set key \2946 \223 ;; m-_ set key \2345 \224 ;; m-` ;; lowercase a-z set key \2334 \225 ;; m-a set key \2352 \226 set key \2350 \227 set key \2336 \228 set key \2322 \229 set key \2337 \230 set key \2338 \231 set key \2339 \232 set key \2327 \233 set key \2340 \234 set key \2341 \235 set key \2342 \236 set key \2354 \237 set key \2353 \238 set key \2328 \239 set key \2329 \240 set key \2320 \241 set key \2323 \242 set key \2335 \243 set key \2324 \244 set key \2326 \245 set key \2351 \246 set key \2321 \247 set key \2349 \248 set key \2325 \249 set key \2348 \250 ;; m-z ;; more shifted misc. keys set key \2842 \251 ;; m-{ set key \2859 \252 ;; m-| set key \2843 \253 ;; m-} set key \2857 \254 ;; m-~ set key \2318 \255 ;; m-del xemacs-21.4.22/etc/ms-kermit-7bit0000644000175000017500000002232206256071512014516 0ustar acsacs;;; This file is designed for 7-bit connections. ;;; Use the file ms-kermit if you have an 8-bit connection. ;;; This kermit script maps the IBM-PC keyboard for use with Gnu Emacs. ;;; The ALT key is used to generate Meta characters and, in conjunction ;;; with the CTRL key, Control-Meta characters. A few other useful ;;; mappings are also performed. ;;; Andy Lowry, May 1989 ;;; Exchange ESC and backquote... tilde stays put (shift-backquote) set key \27 ` set key ` \27 ;;; BACKSPACE deletes backward one character set key scan \270 \127 ;;; The following mappings affect certain special keys... all the keys ;;; are duplicated on the numeric keypad when NUM LOCK is off, but ;;; the keypad versions are NOT mapped (string definition space too small ;;; for that) ;;; INSERT toggles overwrite mode set key scan \4434 \27xoverwrite-mode\13 ;;; HOME moves point to beginning of buffer set key scan \4423 \27< ;;; PAGE-UP scrolls backward one screen set key scan \4425 \27v ;;; DELETE deletes one character *forward* set key scan \4435 \4 ;;; END moves point to end of buffer set key scan \4431 \27> ;;; PAGE-DOWN scrolls forward one screen set key scan \4433 \22 ;;; ARROW keys move in the appropriate directions set key scan \4424 \16 set key scan \4427 \2 set key scan \4432 \14 set key scan \4429 \6 ;;; META versions of all the printing characters except uppercase ;;; letters are generated by using the ALT key. The definition string ;;; consists of an ESC character followed by the META-ized character. ;;; The characters are listed roughly left-to-right and top-to-bottom ;;; as they appear on the keyboard set key scan \2345 \27` set key scan \2424 \27\o61 ; need to use char code, since digit set key scan \2425 \27\o62 ; would not terminate '\27' set key scan \2426 \27\o63 set key scan \2427 \27\o64 set key scan \2428 \27\o65 set key scan \2429 \27\o66 set key scan \2430 \27\o67 set key scan \2431 \27\o70 set key scan \2432 \27\o71 set key scan \2433 \27\o60 set key scan \2434 \27\45 set key scan \2435 \27= set key scan \2857 \27~ set key scan \2936 \27! set key scan \2937 \27@ set key scan \2938 \27# set key scan \2939 \27$ set key scan \2940 \27% set key scan \2941 \27^ set key scan \2942 \27& set key scan \2943 \27* set key scan \2944 \27( set key scan \2945 \27) set key scan \2946 \27_ set key scan \2947 \27+ set key scan \2469 \27\9 set key scan \2320 \27q set key scan \2321 \27w set key scan \2322 \27e set key scan \2323 \27r set key scan \2324 \27t set key scan \2325 \27y set key scan \2326 \27u set key scan \2327 \27i set key scan \2328 \27o set key scan \2329 \27p set key scan \2330 \27[ set key scan \2842 \27{ set key scan \2331 \27] set key scan \2843 \27} set key scan \2347 \27\ set key scan \2859 \27| set key scan \2334 \27a set key scan \2335 \27s set key scan \2336 \27d set key scan \2337 \27f set key scan \2338 \27g set key scan \2339 \27h set key scan \2340 \27j set key scan \2341 \27k set key scan \2342 \27l set key scan \2343 \27\59 set key scan \2855 \27: set key scan \2344 \27' set key scan \2856 \27" set key scan \2348 \27z set key scan \2349 \27x set key scan \2350 \27c set key scan \2351 \27v set key scan \2352 \27b set key scan \2353 \27n set key scan \2354 \27m set key scan \2355 \27, set key scan \2867 \27< set key scan \2356 \27. set key scan \2868 \27> set key scan \2357 \27/ set key scan \2869 \27? ;;; CONTROL-META characters are generated by using both the CTRL and ;;; ALT keys simultaneously. All the lowercase letters are included. ;;; The definition string consists of an ESC character followed by ;;; the control character corresponding to the letter. set key scan \3344 \27\17 set key scan \3345 \27\23 set key scan \3346 \27\5 set key scan \3347 \27\18 set key scan \3348 \27\20 set key scan \3349 \27\25 set key scan \3350 \27\21 set key scan \3351 \27\9 set key scan \3352 \27\15 set key scan \3353 \27\16 set key scan \3358 \27\1 set key scan \3359 \27\19 set key scan \3360 \27\4 set key scan \3361 \27\6 set key scan \3362 \27\7 set key scan \3363 \27\8 set key scan \3364 \27\10 set key scan \3365 \27\11 set key scan \3366 \27\12 set key scan \3372 \27\26 set key scan \3373 \27\24 set key scan \3374 \27\3 set key scan \3375 \27\22 set key scan \3376 \27\2 set key scan \3377 \27\14 set key scan \3378 \27\13 end of msiem2.ini ------------------ msiema.hlp ----------- Date: Wed, 14 Sep 88 05:20:08 GMT From: spolsky@YALE.ARPA Subject: Using MS kermit 2.31 with emacs Keywords: MS-DOS Kermit 2.31, EMACS, Meta Key If you are using kermit (version 2.31 only) with emacs on a mainframe, the following file may help you. It assigns all the Alt-keys so that the Alt key may be used as a "Meta" shift, e.g. Alt-x produces M-x, etc. Note that it will distinguish correctly between upper and lower case and accepts all printables. (If anybody has the patience to do the Meta-Ctrl combinations, please post them!) This actually sends "escapes" so you don't need 8 bits. This file also sets up the cursor keys to behave as expected. On extended keyboards (the ones with a separate cursor pad, like PS/2s) you also get assignments for Page Up/Down, Home, End, Insert, Delete, etc. Please let me know if you find any problems with this. Joel Spolsky bitnet: spolsky@yalecs uucp: ...!yale!spolsky Yale University arpa: spolsky@yale.edu voicenet: 203-436-1483 [Ed. - Thanks, Joel! Your key definitions file has been put in the kermit distribution area as msiema.ini ("ms" for MS-Kermit, "i" because it's an initialization file, "ema" for EMACS), along with this message as msiema.hlp.] end of msiema.hlp ----------------- msiema.ini ------------ ; Emacs keyboard layout for Kermit 2.31 ; by Joel Spolsky, Yale Univ. Save this in a file, then ; initialize it by issuing the kermit command ; take filename ; It will set up the keyboard to allow ALT to be used ; as a meta-key, and will allow cursor keys to be used ; with emacs. ; First, define all the ALT keys to send ESC+key ; to simulate "meta" set key \2320 \27q ;; letters: unshifted set key \2321 \27w set key \2322 \27e set key \2323 \27r set key \2324 \27t set key \2325 \27y set key \2326 \27u set key \2327 \27i set key \2328 \27o set key \2329 \27p set key \2334 \27a set key \2335 \27s set key \2336 \27d set key \2337 \27f set key \2338 \27g set key \2339 \27h set key \2340 \27j set key \2341 \27k set key \2342 \27l set key \2348 \27z set key \2349 \27x set key \2350 \27c set key \2351 \27v set key \2352 \27b set key \2353 \27n set key \2354 \27m set key \2832 \27Q ;; letters: shifted set key \2833 \27W set key \2834 \27E set key \2835 \27R set key \2836 \27T set key \2837 \27Y set key \2838 \27U set key \2839 \27I set key \2840 \27O set key \2841 \27P set key \2846 \27A set key \2847 \27S set key \2848 \27D set key \2849 \27F set key \2850 \27G set key \2851 \27H set key \2852 \27J set key \2853 \27K set key \2854 \27L set key \2860 \27Z set key \2861 \27X set key \2862 \27C set key \2863 \27V set key \2864 \27B set key \2865 \27N set key \2866 \27M set key \2857 \27\126 ; ALT + ~ ;; special symbols begin here set key \2345 \27\96 ; ALT + ` set key \2936 \27\33 ; ALT + ! set key \2937 \27\64 ; ALT + @ set key \2938 \27\35 ; ALT + # set key \2939 \27\36 ; ALT + $ set key \2940 \27\37 ; ALT + % set key \2941 \27\94 ; ALT + ^ set key \2942 \27\38 ; ALT + & set key \2943 \27\42 ; ALT + * set key \2944 \27\40 ; ALT + ( set key \2945 \27\41 ; ALT + ) set key \2946 \27\95 ; ALT + _ set key \2947 \27\43 ; ALT + + set key \2842 \27\123 ; ALT + { set key \2843 \27\125 ; ALT + } set key \2330 \27\91 ; ALT + [ set key \2331 \27\93 ; ALT + ] set key \2859 \27\124 ; ALT + : set key \2347 \27\92 ; ALT + \ set key \2867 \27< ; ALT + < set key \2868 \27> ; ALT + > set key \2343 \27\59 ; ALT + ; set key \2855 \27\58 ; ALT + : set key \2344 \27\39 ; ALT + ' set key \2856 \27\34 ; ALT + " set key \2355 \27\44 ; ALT + , set key \2356 \27\46 ; ALT + . set key \2357 \27\47 ; ALT + / set key \2869 \27\63 ; ALT + ? set key \2424 \27\49 ;; numbers set key \2425 \27\50 set key \2426 \27\51 set key \2427 \27\52 set key \2428 \27\53 set key \2429 \27\54 set key \2430 \27\55 set key \2431 \27\56 set key \2432 \27\57 set key \2433 \27\48 ;; These 6 special keys for extended (PS/2) keyboards: set key \4434 \25 ;; Insert is like ^Y - yank from kill ring set key \4435 \23 ;; Delete is like ^W - kill to ring set key \4423 \1 ;; Home is ^A set key \4431 \5 ;; End is ^E set key \4425 \27V ;; Page up is Esc-V set key \4433 \22 ;; Page dn is ^v set key \328 \16 ;; up cursor is ^P set key \331 \2 ;; left cursor is ^B set key \333 \6 ;; right cursor is ^F set key \336 \14 ;; down cursor is ^N set key \4427 \2 ;; left cursor on extended kbd set key \4432 \14 ;; down cursor on extended kbd set key \4424 \16 ;; up cursor on extended kbd set key \4429 \6 ;; right cursor on extended kbd set key \5491 \27b ;; ctrl-left cursor is M-b set key \5492 \27f ;; ctrl-right cursor is M-f ;; move kermit's screen scroll (playback) features to Alt- Home,End,PgUp,PgDn ;; (this is an issue for extended keyboards only) set key \2455 \khomscn set key \2463 \kendscn set key \2457 \kupscn set key \2465 \kdnscn xemacs-21.4.22/etc/package-index.LATEST.gpg0000644000175000017500000024061610366772157016234 0ustar acsacs-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 ;; Package Index file -- Do not edit manually. ;;;@@@ (package-get-update-base-entry (quote (xetla (standards-version 1.1 version "1.01" author-version "steve@eicq.org--2005/xetla--main--1.1--version-0" date "2005-12-29" build-date "2005-12-29" maintainer "Steve Youngs " distribution xemacs priority low category "standard" dump nil description "(S)XEmacs Frontend to GNU/arch (tla)." filename "xetla-1.01-pkg.tar.gz" md5sum "45c66a4429f53553fda1030e4f0d1e85" size 294912 provides (ewoc xetla-browse xetla-core xetla-defs xetla-tips xetla-version xetla) requires (ediff xemacs-base jde mail-lib dired prog-modes) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (re-builder (standards-version 1.1 version "1.05" author-version "1.20" date "2005-09-12" build-date "2005-09-12" maintainer "Aidan Kehoe " distribution xemacs priority medium category "standard" dump nil description "Interactive development tool for regular expressions." filename "re-builder-1.05-pkg.tar.gz" md5sum "da77f41112a0f92416ca74fd26b23aee" size 20729 provides (re-builder) requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (latin-euro-standards (standards-version 1.1 version "1.07" author-version "1.07" date "2005-06-29" build-date "2005-06-29" maintainer "Aidan Kehoe " distribution mule priority high category "mule" dump nil description "MULE: Support for the Latin{7,8,9,10} character sets & coding systems." filename "latin-euro-standards-1.07-pkg.tar.gz" md5sum "1557507199aa08bb8b292e02af543f9d" size 13887 provides () requires (mule-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (xwem (standards-version 1.1 version "1.21" author-version "lg@xwem.org--2005/xwem--main--2.1--versionfix-1" date "2005-04-09" build-date "2005-04-09" maintainer "Zajcev Evgeny " distribution xemacs priority low category "standard" dump nil description "X Emacs Window Manager." filename "xwem-1.21-pkg.tar.gz" md5sum "766dbbfba485e1ed1d7a6d289d73ff21" size 649651 provides (ixwem xwem-appcollect xwem-battery xwem-clgen xwem-clients xwem-clswi xwem-compat xwem-desktop xwem-diagram xwem-edmacro xwem-edprops xwem-events xwem-faces xwem-focus xwem-frame xwem-framei xwem-frametrans xwem-gamma xwem-help xwem-holer xwem-icons xwem-interactive xwem-keyboard xwem-keydefs xwem-keymacro xwem-keytt xwem-launcher xwem-load xwem-loaddefs xwem-macros xwem-main xwem-manage xwem-minibuffer xwem-misc xwem-modes xwem-mouse xwem-netwm xwem-osd xwem-pager xwem-ratanot xwem-recover xwem-register xwem-report xwem-root xwem-rooter xwem-rooticon xwem-selections xwem-smartmods xwem-sound xwem-special xwem-strokes xwem-struct xwem-tabbing xwem-theme xwem-time xwem-transient xwem-tray xwem-version xwem-vert xwem-weather xwem-win xwem-worklog xwem-xfig) requires (xwem xemacs-base xlib strokes edit-utils text-modes time slider elib ilisp mail-lib) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (escreen (standards-version 1.1 version "1.01" author-version "1.16" date "2004-03-15" build-date "2004-03-15" maintainer "Jan Rychter " distribution xemacs priority low category "standard" dump nil description "Multiple editing sessions withing a single frame (like screen)." filename "escreen-1.01-pkg.tar.gz" md5sum "2998cd0d7a90b89a3c3860549c43622a" size 14639 provides (escreen) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (xlib (standards-version 1.1 version "1.14" author-version "lg@xwem.org--2005/xlib--main--2.1--version-0" date "2005-04-05" build-date "2005-04-05" maintainer "Zajcev Evgeny " distribution xemacs priority low category "standard" dump nil description "Emacs interface to X server." filename "xlib-1.14-pkg.tar.gz" md5sum "0d3adfa462bebb9009d20b0623d23664" size 205806 provides (xlib-composer xlib-const xlib-hello xlib-img xlib-keysymdb xlib-math xlib-testing xlib-tray xlib-version xlib-vidmode xlib-xc xlib-xdpms xlib-xinerama xlib-xlib xlib-xpm xlib-xr xlib-xrecord xlib-xshape xlib-xtest xlib-xwin) requires (xlib xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (erc (standards-version 1.0 version "0.19" author-version "Version 5.0 Revision: 1.776" date "2005-10-21" build-date "2005-10-21" maintainer "Adrian Aichner " distribution stable priority low category "standard" dump nil description "ERC is an Emacs InternetRelayChat client." filename "erc-0.19-pkg.tar.gz" md5sum "3ec5279835c74460981e76b169aab269" size 461162 provides (erc) requires (edit-utils fsf-compat gnus pcomplete xemacs-base text-modes ispell viper) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (general-docs (standards-version 1.1 version "1.04" author-version "No-Upstream-Ver" date "2005-05-07" build-date "2005-05-07" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "General XEmacs documentation." filename "general-docs-1.04-pkg.tar.gz" md5sum "0d55fe74b8cc9a5a1d34e27e2d096ec1" size 43374 provides () requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (riece (standards-version 1.1 version "1.21" author-version "2.0.2" date "2005-11-21" build-date "2005-11-21" maintainer "Daiki Ueno " distribution xemacs priority high category "standard" dump nil description "IRC (Internet Relay Chat) client for Emacs." filename "riece-1.21-pkg.tar.gz" md5sum "69dad9e533297eb21313dde7b8ce0026" size 198929 provides (riece-compat riece-xemacs riece-globals riece-options riece-debug riece-version riece-coding riece-complete riece-addon-modules riece-addon riece-ruby riece-cache riece-mode riece-identity riece-channel riece-user riece-misc riece-signal riece-layout riece-display riece-server riece-naming riece-message riece-filter riece-handle riece-000 riece-200 riece-300 riece-400 riece-500 riece-commands riece-irc riece riece-alias riece-async riece-biff riece-button riece-ctcp riece-ctlseq riece-doctor riece-eval-ruby riece-eval riece-foolproof riece-google riece-guess riece-hangman riece-highlight riece-history riece-icon riece-ignore riece-kakasi riece-keepalive riece-keyword riece-log riece-lsdb riece-menu riece-mini riece-rdcc riece-shrink-buffer riece-skk-kakutei riece-toolbar riece-unread riece-url riece-xface riece-xfaceb riece-yank) requires (xemacs-base mail-lib bbdb) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (oo-browser (standards-version 1.1 version "1.04" author-version "4.08" date "2003-10-31" build-date "2003-10-31" maintainer "Jake Colman " distribution xemacs priority high category "standard" dump nil description "OO-Browser: The Multi-Language Object-Oriented Code Browser" filename "oo-browser-1.04-pkg.tar.gz" md5sum "72cb3bbfbe985d8989c564ca53cffe3c" size 515713 provides (c++-browse clos-browse eif-browse hasht hmouse-br info-browse java-brows objc-brows pyth-brows smt-browse) requires (xemacs-base hyperbole) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (hyperbole (standards-version 1.0 version "1.16" author-version "4.18" date "2004-06-13" build-date "2004-06-13" maintainer "Mats Lidell " distribution stable priority high category "standard" dump nil description "Hyperbole: The Everyday Info Manager" filename "hyperbole-1.16-pkg.tar.gz" md5sum "64be21a91b7ef00696b19478ccef90f6" size 636211 provides (hact hactypes hargs hbdata hbmap hbut hgnus hhist hib-doc-id hib-kbd hibtypes hinit hlvar hmail hmh hmoccur hmous-info hmouse-drv hmouse-key hmouse-mod hmouse-tag hpath hrmail hsite hsmail hsys-w3 hsys-wais htz hui-menu hui-mini hui-mouse hui-window hui-xe-but hui hvar hversion hvm hypb hyperbole set wconfig wrolo-logic wrolo-menu wrolo) requires (xemacs-base mail-lib calendar vm text-modes gnus mh-e rmail apel tm sh-script net-utils) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (ecb (standards-version 1.1 version "1.22" author-version "2.31" date "2004-12-22" build-date "2004-12-22" maintainer "Klaus Berndl " distribution xemacs priority low category "standard" dump nil description "Emacs source code browser." filename "ecb-1.22-pkg.tar.gz" md5sum "ebce6137e59c2792b3960bce293f0ec1" size 887270 provides (ecb-buffertab ecb-compilation ecb-create-layout ecb-cycle ecb ecb-eshell ecb-examples ecb-face ecb-file-browser ecb-help ecb-layout ecb-layout-defs ecb-method-browser ecb-mode-line ecb-navigate ecb-speedbar ecb-tod ecb-autogen ecb-jde ecb-upgrade ecb-util ecb-winman-support ecb-semantic-wrapper silentcomp tree-buffer ecb-compatibility ecb-common-browser) requires (xemacs-base semantic eieio fsf-compat edit-utils jde mail-lib eshell ediff xemacs-devel speedbar c-support) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (pgg (standards-version 1.1 version "1.06" author-version "0.1" date "2005-09-26" build-date "2005-09-26" maintainer "Simon Josefsson " distribution xemacs priority low category "standard" dump nil description "Emacs interface to various PGP implementations." filename "pgg-1.06-pkg.tar.gz" md5sum "6cb9d38dfe23cdd8ff62291be5a8b03a" size 33917 provides (pgg pgg-def pgg-parse pgg-gpg pgg-pgp pgg-pgp5) requires (xemacs-base fsf-compat edebug ecrypto) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (perl-modes (standards-version 1.1 version "1.08" author-version "No-Upstream-Ver" date "2005-04-27" build-date "2005-04-28" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Perl support." filename "perl-modes-1.08-pkg.tar.gz" md5sum "b35612e5ac120e2d875899f2314cfa85" size 165731 provides (cperl-mode perl-mode) requires (xemacs-base ispell ps-print edit-utils fsf-compat) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (python-modes (standards-version 1.1 version "1.07" author-version "No-Upstream-Ver" date "2005-12-19" build-date "2005-12-19" maintainer "Skip Montanaro " distribution xemacs priority low category "standard" dump nil description "Python support." filename "python-modes-1.07-pkg.tar.gz" md5sum "574cac0c86f8e19c684017989ea25801" size 92924 provides (pydoc python-mode) requires (xemacs-base mail-lib edit-utils fsf-compat) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (ruby-modes (standards-version 1.1 version "1.02" author-version "1.6.8" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Ruby support." filename "ruby-modes-1.02-pkg.tar.gz" md5sum "d2a1ca596592bafba72c76158d26747b" size 21889 provides (inf-ruby ruby-mode rubydb) requires (xemacs-base debug) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (fortran-modes (standards-version 1.1 version "1.05" author-version "No-Upstream-Ver" date "2005-12-20" build-date "2005-12-20" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Fortran support." filename "fortran-modes-1.05-pkg.tar.gz" md5sum "2c2545602482660ad0d811b0574a3eed" size 70602 provides (f90 fortran) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (psgml-dtds (standards-version 1.1 version "1.03" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Deprecated collection of DTDs for psgml." filename "psgml-dtds-1.03-pkg.tar.gz" md5sum "6d2d68e928a540581ef564d1111fcbf2" size 367476 provides () requires (xemacs-base psgml edit-utils mail-lib fsf-compat eterm sh-script) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (docbookide (standards-version 1.1 version "0.07" author-version "0.1" date "2003-10-28" build-date "2003-10-28" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "DocBook editing support." filename "docbookide-0.07-pkg.tar.gz" md5sum "2e83cb54d4c0d9fd4b22a81d8792e9e6" size 32091 provides (dbide-abbrev dbide-data dbide-font dbide-process docbookide) requires (xemacs-base ispell mail-lib) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (ecrypto (standards-version 1.1 version "0.20" author-version "2.0" date "2005-09-26" build-date "2005-09-26" maintainer "Simon Josefsson " distribution xemacs priority low category "standard" dump nil description "Crypto functionality in Emacs Lisp." filename "ecrypto-0.20-pkg.tar.gz" md5sum "eb94f451a4d279cd92f8f2bcb9b9b79b" size 76257 provides (ascii-armor blowfish des hex-util md4 md5-dl md5-el md5 paranoid rander rc16 rijndael sha1-dl sha1-el sha1) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (ocaml (standards-version 1.1 version "0.05" author-version "3.06" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Objective Caml editing support." filename "ocaml-0.05-pkg.tar.gz" md5sum "2ca033386cade4dbdb05abe2e6f324f4" size 64887 provides (caml-compat camldebug caml caml-font caml-help inf-caml) requires (xemacs-base fsf-compat) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (sasl (standards-version 1.1 version "1.16" author-version "1.14.4" date "2005-09-26" build-date "2005-09-26" maintainer "Simon Josefsson " distribution xemacs priority low category "standard" dump nil description "Simple Authentication and Security Layer (SASL) library." filename "sasl-1.16-pkg.tar.gz" md5sum "2799ab3b97e3d3cd2fd5ca0385b04931" size 27864 provides (hmac-def hmac-md5 hmac-sha1 ntlm sasl sasl-cram sasl-digest sasl-ntlm sasl-plain sasl-login sasl-anonymous) requires (ecrypto) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (sml-mode (standards-version 1.1 version "0.12" author-version "3.9.5" date "2005-07-27" build-date "2005-07-27" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "SML editing support." filename "sml-mode-0.12-pkg.tar.gz" md5sum "017614793fe793e401911c0824356a37" size 82366 provides (sml-compat sml-defs sml-mode sml-move sml-proc sml-util) requires (xemacs-base edebug fsf-compat) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (haskell-mode (standards-version 1.1 version "1.07" author-version "1.45" date "2004-06-16" build-date "2004-06-16" maintainer "Jerry James " distribution xemacs priority low category "standard" dump nil description "Haskell editing support." filename "haskell-mode-1.07-pkg.tar.gz" md5sum "20d1ff41a4b753a276affd60850b08e7" size 97642 provides (haskell-decl-scan haskell-doc haskell-font-lock haskell-indent haskell-mode haskell-simple-indent) requires (dired mail-lib xemacs-base edit-utils) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (xslide (standards-version 1.1 version "1.09" author-version "0.2.2" date "2003-10-28" build-date "2003-10-28" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "XSL editing support." filename "xslide-1.09-pkg.tar.gz" md5sum "998f787ea80d98cdd7ca06c25ae96647" size 39199 provides (xslide-abbrev xslide-data xslide-font xslide-process xslide) requires (ispell mail-lib xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (latin-unity (standards-version 1.1 version "1.16" author-version "1.16" date "2005-12-29" build-date "2005-12-29" maintainer "Stephen J. Turnbull " distribution mule priority high category "mule" dump nil description "MULE: find single ISO 8859 character set to encode a buffer." filename "latin-unity-1.16-pkg.tar.gz" md5sum "2591f33d4c1057c238efe124ff534c81" size 104739 provides (latin-unity latin-unity-tables latin-unity-utils) requires (mule-base latin-euro-standards mule-ucs leim fsf-compat dired) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (mmm-mode (standards-version 1.1 version "1.02" author-version "0.4.7" date "2004-03-02" build-date "2004-03-02" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Multiple major modes in a single buffer" filename "mmm-mode-1.02-pkg.tar.gz" md5sum "f68f90fb1b870f7a8e89c83e9b6c3973" size 176072 provides (mmm-auto mmm-class mmm-cmds mmm-compat mmm-mason mmm-mode mmm-region mmm-rpm mmm-sample mmm-univ mmm-utils mmm-vars) requires (xemacs-base fsf-compat ) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (ibuffer (standards-version 1.1 version "1.09" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "John Paul Wallington " distribution xemacs priority medium category "standard" dump nil description "Advanced replacement for buffer-menu" filename "ibuffer-1.09-pkg.tar.gz" md5sum "5132ee34ac4640fdb7a53706ee928e33" size 89926 provides (ibuf-ext ibuf-macs ibuffer) requires (ibuffer xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (xemacs-base (standards-version 1.1 version "2.01" author-version "No-Upstream-Ver" date "2005-12-31" build-date "2005-12-31" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "Fundamental XEmacs support, you almost certainly need this." filename "xemacs-base-2.01-pkg.tar.gz" md5sum "a378f0ed585ebb9d6d8ace534f7e5987" size 513382 provides (add-log advice-preload advice annotations assoc case-table chistory comint-xemacs comint compile debug ebuff-menu echistory edmacro ehelp electric enriched env facemenu ffap helper imenu iso-syntax macros novice outline passwd pp regexp-opt regi ring shell skeleton sort thing time-stamp timezone tq xbm-button xpm-button) requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (tramp (standards-version 1.1 version "1.28" author-version "2.0.51" date "2005-10-12" build-date "2005-10-12" maintainer "Kai Großjohann " distribution xemacs priority low category "standard" dump nil description "Remote shell-based file editing." filename "tramp-1.28-pkg.tar.gz" md5sum "5ac2f914804150d00cba64c717182c59" size 291435 provides (tramp tramp-efs tramp-ftp tramp-smb tramp-util tramp-uu tramp-vc trampcache) requires (tramp xemacs-base vc efs dired mail-lib gnus ediff sh-script) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (text-modes (standards-version 1.1 version "1.90" author-version "No-Upstream-Ver" date "2005-11-02" build-date "2005-11-02" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "Miscellaneous support for editing text files." filename "text-modes-1.90-pkg.tar.gz" md5sum "f2d5111f6e561b595aead30333b704cf" size 442526 provides (ansi-color autoinsert crontab-edit desktop-entry-mode filladapt flyspell folding fold-isearch hexl htmlize image-mode iso-acc iso-ascii iso-cvt iso-insert iso-swed rtf-support swedish tabify whitespace-mode whitespace-visual-mode winmgr-mode xpm-mode xrdb-mode apache-mode po-mode po-compat css-mode) requires (ispell fsf-compat xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (pcl-cvs (standards-version 1.1 version "1.66" author-version "R-2_9_9" date "2004-12-22" build-date "2004-12-22" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "CVS frontend." filename "pcl-cvs-1.66-pkg.tar.gz" md5sum "04101b03e5d8e929471875b30e1a2c31" size 161505 provides (cvs-compat cvs-edit cvs-log cvs-status pcl-cvs-defs pcl-cvs-info pcl-cvs-parse pcl-cvs-util pcl-cvs) requires (xemacs-base elib vc dired edebug ediff edit-utils mail-lib prog-modes) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (mail-lib (standards-version 1.1 version "1.75" author-version "No-Upstream-Ver" date "2005-10-28" build-date "2005-10-28" maintainer "Simon Josefsson " distribution xemacs priority medium category "standard" dump nil description "Fundamental lisp files for providing email support." filename "mail-lib-1.75-pkg.tar.gz" md5sum "a8417567fe05e5baf884e1993bf13a44" size 211214 provides (base64 browse-url-xemacs browse-url highlight-headers mail-abbrevs mail-extr mail-utils mailheader netrc pop3 reporter rfc2104 rfc822 rmail rmail-mini rmailout sendmail smtpmail starttls tls) requires (eterm xemacs-base fsf-compat sh-script ecrypto) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (jde (standards-version 1.1 version "1.48" author-version "2.3.2" date "2005-06-01" build-date "2005-06-01" maintainer "Andy Piper " distribution xemacs priority medium category "standard" dump nil description "Integrated Development Environment for Java." filename "jde-1.48-pkg.tar.gz" md5sum "26a98e47f6358b465f423dc9d597c6f6" size 2404962 provides (beanshell efc jde-ant jde-bug jde-checkstyle jde-compat jde-compile jde-complete jde-db jde-dbo jde-dbs jde-ejb jde-gen jde-help jde-imenu jde-import jde-java-font-lock jde-java-grammar jde-javadoc-gen jde-javadoc jde-jdb jde-make jde-open-source jde-package jde-parse-class jde-parse jde-run jde-setnu jde-stat jde-util jde-which-method jde-widgets jde-wiz jde-xref jde tree-widget) requires (jde cc-mode semantic debug speedbar edit-utils eterm mail-lib xemacs-base xemacs-devel eieio elib sh-script fsf-compat) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (fsf-compat (standards-version 1.1 version "1.15" author-version "No-Upstream-Ver" date "2004-10-22" build-date "2004-10-22" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "FSF Emacs compatibility files." filename "fsf-compat-1.15-pkg.tar.gz" md5sum "a68d000cf16b054b20a56e917d57e712" size 18912 provides (overlay thingatpt timer x-popup-menu goto-addr) requires (xemacs-base) type single )) )) ;;;@@@ (package-get-update-base-entry (quote (edit-utils (standards-version 1.1 version "2.32" author-version "No-Upstream-Ver" date "2005-12-05" build-date "2005-12-05" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "Miscellaneous editor extensions, you probably need this." filename "edit-utils-2.32-pkg.tar.gz" md5sum "c858e39c25478b3797a5859c991d7bc9" size 944596 provides (abbrevlist after-save-commands atomic-extents avoid backup-dir balloon-help big-menubar blink-cursor blink-paren bookmark compare-w completion dabbrev desktop detached-minibuf edit-toolbar fast-lock file-part floating-toolbar flow-ctrl foldout func-menu hippie-exp icomplete id-select info-look iswitchb lazy-lock lazy-shot live-icon makesum man mic-paren paren mode-motion+ outl-mouse outln-18 page-ext blink-paren paren permanent-buffers popper power-macros recent-files redo reportmail resume rsz-minibuf saveconf savehist saveplace scroll-in-place setnu shell-font tempo toolbar-utils tree-menu uniquify vertical-mode where-was-i-db winring autorevert align allout outline narrow-stack highline) requires (xemacs-base xemacs-devel fsf-compat dired mail-lib) type single )) )) ;;;@@@ (package-get-update-base-entry (quote (skk (standards-version 1.1 version "1.23" author-version "10.62a" date "2002-09-25" build-date "2002-09-25" maintainer "XEmacs Development Team " distribution mule priority medium category "mule" dump nil description "MULE: Japanese Language Input Method." filename "skk-1.23-pkg.tar.gz" md5sum "dc35f20896a56c8cf2e7ba16b15e453b" size 1506691 provides (skk-auto skk-comp skk-cursor skk-develop skk-foreword skk-gadget skk-isearch skk-kakasi skk-kcode skk-leim skk-look skk-num skk-obsolete skk-server skk-tut skk-vars skk-viper skk vip) requires (viper mule-base elib xemacs-base apel) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (ps-print (standards-version 1.1 version "1.11" author-version "6.5.6" date "2004-08-10" build-date "2004-08-10" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Printing functions and utilities" filename "ps-print-1.11-pkg.tar.gz" md5sum "a9460da8906bbbcbec37f28625b2bbad" size 156222 provides (lpr ps-bdf ps-mule ps-print) requires (text-modes) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (sieve (standards-version 1.1 version "1.18" author-version "No-Upstream-Ver" date "2005-09-26" build-date "2005-09-26" maintainer "Simon Josefsson " distribution xemacs priority low category "standard" dump nil description "Manage Sieve email filtering scripts." filename "sieve-1.18-pkg.tar.gz" md5sum "254bfbb81e4204ab8e57066baee8e78f" size 27387 provides (sieve sieve-mode sieve-manage) requires (xemacs-base mail-lib cc-mode sasl ecrypto sh-script) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (mule-ucs (standards-version 1.1 version "1.14" author-version "0.84" date "2005-06-21" build-date "2005-06-21" maintainer "Stephen J. Turnbull " distribution mule priority high category "mule" dump nil description "MULE: Extended coding systems (including Unicode) for XEmacs." filename "mule-ucs-1.14-pkg.tar.gz" md5sum "b1e0eb84dc1675400b867a57d38ffb36" size 1300714 provides (mccl-font mucs-ccl mucs-error mucs-type mucs mule-uni tae tbl-mg trans-util txt-tbl un-data un-define un-supple un-tools un-trbase unicode unidata utf u-cns-1 u-cns-2 u-cns-3 u-cns-4 u-cns-5 u-cns-6 u-cns-7 uascii ubig5 uetiopic ugb2312 uipa uiscii uiso8859-1 uiso8859-14 uiso8859-15 uiso8859-2 uiso8859-3 uiso8859-4 uiso8859-5 uiso8859-6 uiso8859-7 uiso8859-8 uiso8859-9 ujisx0201 ujisx0208 ujisx0212 uksc5601 usisheng usupple utibetan utis620 uviscii) requires (mule-base latin-euro-standards) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (clearcase (standards-version 1.0 version "1.10" author-version "/main/laptop/165" date "2005-06-04" build-date "2005-06-04" maintainer "Adrian Aichner " distribution xemacs priority low category "standard" dump nil description "New Clearcase Version Control for XEmacs (UNIX, Windows)." filename "clearcase-1.10-pkg.tar.gz" md5sum "956e445057c6c1afd48d898b9736bd22" size 105865 provides (clearcase) requires (dired mail-lib xemacs-base sh-script) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (dictionary (standards-version 1.1 version "1.16" author-version "1.8" date "2005-05-10" build-date "2005-05-10" maintainer "Torsten Hilbrich " distribution xemacs priority low category "standard" dump nil description "Interface to RFC2229 dictionary servers." filename "dictionary-1.16-pkg.tar.gz" md5sum "83011986c60b22aecb5c1246f66c7744" size 40085 provides (dictionary connection link) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (build (standards-version 1.0 version "1.14" author-version "2.02" date "2003-10-31" build-date "2003-10-31" maintainer "Adrian Aichner " distribution stable priority low category "standard" dump nil description "Build XEmacs from within (UNIX, Windows)." filename "build-1.14-pkg.tar.gz" md5sum "927263daa5b6d8097b916f0be5887a62" size 49484 provides (build) requires (xemacs-base pcl-cvs dired w3 prog-modes) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (xslt-process (standards-version 1.0 version "1.12" author-version "1.2.1" date "2005-07-27" build-date "2005-07-27" maintainer "Ovidiu Predescu " distribution xemacs priority medium category "standard" dump nil description "XSLT processing support." filename "xslt-process-1.12-pkg.tar.gz" md5sum "dde00a263877a3bb3a82c6fb96299aab" size 59594 provides (xslt-process) requires (jde cc-mode semantic debug speedbar edit-utils eterm mail-lib xemacs-base elib eieio sh-script fsf-compat xemacs-devel) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (eieio (standards-version 1.1 version "1.05" author-version "0.17" date "2003-10-31" build-date "2003-10-31" maintainer "Eric Ludlam " distribution xemacs priority low category "standard" dump nil description "Enhanced Implementation of Emacs Interpreted Objects" filename "eieio-1.05-pkg.tar.gz" md5sum "b31f8f71fc5afa41196954f04f955654" size 165803 provides (call-tree chart compare-strings eieio-base eieio-comp eieio-custom eieio-doc eieio-opt eieio-speedbar eieio-tests eieio linemark tree) requires (speedbar xemacs-base edebug) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (egg-its (standards-version 1.1 version "1.27" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution mule priority high category "mule" dump nil description "MULE: Wnn (4.2 and 6) support. SJ3 support." filename "egg-its-1.27-pkg.tar.gz" md5sum "6027d90327043f918d8a4ea3143ae7d2" size 261339 provides (egg-cnpinyin egg-cnzhuyin egg-cwnn-leim egg-jisx0201 egg-jsymbol egg-kwnn-leim egg-leim egg-sj3-client egg-sj3-leim egg-sj3 egg-wnn egg) requires (leim mule-base fsf-compat xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (edict (standards-version 1.1 version "1.16" author-version "0.9.9" date "2003-10-31" build-date "2003-10-31" maintainer "Stephen J. Turnbull " distribution mule priority high category "mule" dump nil description "MULE: Lisp Interface to EDICT, Kanji Dictionary." filename "edict-1.16-pkg.tar.gz" md5sum "406e55fda150ec0ea22b79580279be95" size 96111 provides (dui-registry dui edict-edit edict-english edict-japanese edict-morphology edict-test edict ts-mode) requires (mule-base xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (lookup (standards-version 1.1 version "1.15" author-version "1.0" date "2005-05-10" build-date "2005-05-10" maintainer "XEmacs Development Team " distribution mule priority high category "mule" dump nil description "MULE: Dictionary support" filename "lookup-1.15-pkg.tar.gz" md5sum "975f4d8435cae628e7c6338115a3a542" size 225952 provides (evi-mule evi lookup-content lookup-defs lookup-entry lookup-select lookup-package lookup-select lookup-types lookup-utils lookup-vars lookup-vse lookup ndcookie ndeb ndic ndict ndkks ndmisc ndnmz ndspell ndsrd ndtp sdicf stem) requires (mule-base cookie lookup) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (leim (standards-version 1.1 version "1.22" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution mule priority medium category "mule" dump nil description "MULE: Quail. All non-English and non-Japanese language support." filename "leim-1.22-pkg.tar.gz" md5sum "942fbcd4d56eb59529bbd15c3b6c0b3b" size 1708319 provides () requires (leim mule-base fsf-compat xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (locale (standards-version 1.1 version "1.22" author-version "No-Upstream-Ver" date "2004-12-07" build-date "2004-12-07" maintainer "XEmacs Development Team " distribution mule priority high category "mule" dump nil description "MULE: Localized menubars and localized splash screens." filename "locale-1.22-pkg.tar.gz" md5sum "2a3accb220d0c67b3e76762fb2872ab9" size 37968 provides () requires (mule-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (mule-base (standards-version 1.1 version "1.47" author-version "No-Upstream-Ver" date "2005-05-10" build-date "2005-05-10" maintainer "XEmacs Development Team " distribution mule priority high category "mule" dump nil description "MULE: Basic Mule support." filename "mule-base-1.47-pkg.tar.gz" md5sum "f6f85c610f6bd604edcb252b20f32108" size 444408 provides (canna-leim canna char-table china-util cyril-util isearch-ext japan-util ccl can-n-egg mule-help) requires (fsf-compat xemacs-base apel) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (strokes (standards-version 1.1 version "1.10" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Mouse enhancement utility." filename "strokes-1.10-pkg.tar.gz" md5sum "946a6e0bb3e9384a94a79ecdffdd85d8" size 43728 provides (strokes) requires (text-modes edit-utils mail-lib xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (time (standards-version 1.1 version "1.14" author-version "1.17" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Display time & date on the modeline." filename "time-1.14-pkg.tar.gz" md5sum "8956073a18694a8ad91a52c7374c3d66" size 20431 provides (time) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (slider (standards-version 1.1 version "1.15" author-version "0.3x1" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "User interface tool." filename "slider-1.15-pkg.tar.gz" md5sum "00bb43e4f3997c0c493cb7f29a75494b" size 12516 provides (slider color-selector) requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (sgml (standards-version 1.1 version "1.11" author-version "No-Upstream-Ver" date "2004-01-27" build-date "2004-01-27" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "SGML/Linuxdoc-SGML editing." filename "sgml-1.11-pkg.tar.gz" md5sum "8d1cec5b4b005210507b6fe57e2db9a8" size 27506 provides (sgml linuxdoc-sgml) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (psgml (standards-version 1.1 version "1.44" author-version "1.3.1" date "2005-04-05" build-date "2005-04-05" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Validated HTML/SGML editing." filename "psgml-1.44-pkg.tar.gz" md5sum "9edbc1b72754f45d23cf73b287b6a2aa" size 302065 provides (iso-sgml psgml-api psgml-charent psgml-debug psgml-dtd psgml-edit psgml-fs psgml-html psgml-info psgml-parse psgml-sysdep psgml-xemacs psgml sgml-mode) requires (xemacs-base edit-utils edebug xemacs-devel mail-lib fsf-compat eterm sh-script ps-print) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (pc (standards-version 1.1 version "1.28" author-version "No-Upstream-Ver" date "2005-04-26" build-date "2005-04-26" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "PC style interface emulation." filename "pc-1.28-pkg.tar.gz" md5sum "b3722c793e2f9b977fc0967ed0805efa" size 17720 provides (delbs fusion pc-select pending-del s-region) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (ispell (standards-version 1.1 version "1.32" author-version "3.6" date "2005-10-16" build-date "2005-10-16" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Spell-checking with GNU ispell." filename "ispell-1.32-pkg.tar.gz" md5sum "0eceb13fd90b388f744f04bbf83fe4a1" size 83587 provides (ispell) requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (hm--html-menus (standards-version 1.1 version "1.23" author-version "5.9" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "HTML editing." filename "hm--html-menus-1.23-pkg.tar.gz" md5sum "c625e8070a7abfed6fb1f13d04a38e51" size 179091 provides (adapt hm--date hm--html-configuration hm--html-drag-and-drop hm--html-indentation hm--html-keys hm--html-menu hm--html-mode hm--html-not-standard hm--html html-view internal-drag-and-drop tmpl-minor-mode) requires (dired xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (frame-icon (standards-version 1.1 version "1.11" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Set up mode-specific icons for each frame under XEmacs" filename "frame-icon-1.11-pkg.tar.gz" md5sum "6fbd58bc7f37328aaf31b420c9a2891f" size 33800 provides (forms forms-mode) requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (forms (standards-version 1.1 version "1.15" author-version "2.37" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Forms editing support (obsolete, use Widget instead)." filename "forms-1.15-pkg.tar.gz" md5sum "5f5cc842399040018bab20f776cf1cf8" size 48747 provides (forms forms-mode) requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (calendar (standards-version 1.1 version "1.23" author-version "No-Upstream-Ver" date "2004-01-27" build-date "2004-01-27" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Calendar and diary support." filename "calendar-1.23-pkg.tar.gz" md5sum "de5fd826168913232c48aa88ec0f1d5c" size 254025 provides (appt cal-china cal-coptic cal-dst cal-french cal-hebrew cal-islam cal-iso cal-japanese cal-julian cal-mayan cal-move cal-persia cal-tex cal-x cal-xemacs calendar diary-lib holidays lunar solar) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (calc (standards-version 1.1 version "1.26" author-version "2.02fX3" date "2004-09-07" build-date "2004-09-07" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Emacs calculator" filename "calc-1.26-pkg.tar.gz" md5sum "2ebbdf5c8cba89d50ab6300287697a6b" size 1600637 provides (calc-ext calc-macs calc) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (speedbar (standards-version 1.1 version "1.28" author-version "0.14beta4" date "2005-07-19" build-date "2005-07-19" maintainer "Eric M. Ludlam " distribution xemacs priority low category "standard" dump nil description "Provides a separate frame with convenient references." filename "speedbar-1.28-pkg.tar.gz" md5sum "1b82aee8431f3c8083689f7a6c3a6a33" size 163269 provides (bigclock dframe rpm sb-ant sb-gud sb-html sb-image sb-info sb-rmail sb-texinfo sb-w3 speedbar) requires (xemacs-base edebug) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (pcomplete (standards-version 1.1 version "1.04" author-version "1.1.6" date "2005-01-23" build-date "2005-01-23" maintainer "John Wiegley " distribution xemacs priority medium category "standard" dump nil description "Provides programmatic completion." filename "pcomplete-1.04-pkg.tar.gz" md5sum "f8631085f1355707234110c9ab043a53" size 37573 provides (pcomplete) requires (sh-script xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (eshell (standards-version 1.1 version "1.10" author-version "2.4.1" date "2005-06-27" build-date "2005-06-27" maintainer "John Wiegley " distribution xemacs priority medium category "standard" dump nil description "Command shell implemented entirely in Emacs Lisp" filename "eshell-1.10-pkg.tar.gz" md5sum "859fc15237a3d5177551614fecd88671" size 232616 provides (em-alias em-banner em-basic em-cmpl em-dirs em-glob em-hist em-ls em-pred em-prompt em-rebind em-script em-smart em-term em-unix em-xtra esh-arg esh-cmd esh-ext esh-io esh-maint esh-mode esh-module esh-opt esh-proc esh-test esh-toggle esh-util esh-var eshell) requires (xemacs-base eterm) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (view-process (standards-version 1.1 version "1.13" author-version "2.4" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "A Unix process browsing tool." filename "view-process-1.13-pkg.tar.gz" md5sum "05eca7ec61259b47f2a741fc30dcc65f" size 60814 provides (view-process-mode) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (os-utils (standards-version 1.1 version "1.36" author-version "No-Upstream-Ver" date "2005-01-31" build-date "2005-01-31" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Miscellaneous O/S utilities." filename "os-utils-1.36-pkg.tar.gz" md5sum "56d04bd914e392d03719206469964f20" size 225865 provides (archive-mode background crypt++ crypt ftelnet inf-lisp jka-compr mchat rlogin ssh tar-mode telnet terminal uncompress) requires (xemacs-base) type single )) )) ;;;@@@ (package-get-update-base-entry (quote (ilisp (standards-version 1.1 version "1.33" author-version "5.12.0" date "2003-10-31" build-date "2003-10-31" maintainer "ilisp Maintainers " distribution xemacs priority low category "standard" dump nil description "Front-end for Inferior Lisp." filename "ilisp-1.33-pkg.tar.gz" md5sum "a0edbe80726e199f3cfc7a367c3fd772" size 344245 provides (bridge comint-ipc completer ilcompat compat-fsf18 compat-fsf-19 compat-fsf-20 ilisp-chs ilisp-cl-easy-menu ilisp-ext ilisp-lw ilisp-key ilisp-menu ilisp-mnb ilisp-scheme-easy-menu ilisp il-luc19 il-luc19) requires (xemacs-base mail-lib fsf-compat eterm sh-script) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (igrep (standards-version 1.1 version "1.14" author-version "2.111" date "2005-12-05" build-date "2005-12-05" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Enhanced front-end for Grep." filename "igrep-1.14-pkg.tar.gz" md5sum "c67cfd9d4fbb5356784898a54cf957d1" size 20838 provides (igrep) requires (dired xemacs-base efs) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (eterm (standards-version 1.1 version "1.17" author-version "No-Upstream-Ver" date "2005-06-27" build-date "2005-06-27" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Terminal emulation." filename "eterm-1.17-pkg.tar.gz" md5sum "3f0508fad96213912261afdc934e5ce8" size 109229 provides (eterm) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (viper (standards-version 1.1 version "1.47" author-version "3.09" date "2005-11-25" build-date "2005-11-25" maintainer "Michael Kifer " distribution xemacs priority low category "standard" dump nil description "VI emulation support." filename "viper-1.47-pkg.tar.gz" md5sum "66e3556c2421cf81083406bc92ad9f88" size 335017 provides (viper-cmd viper-ex viper-init viper-keym viper-macs viper-mous viper-util viper) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (tpu (standards-version 1.1 version "1.14" author-version "4.2X" date "2003-10-31" build-date "2003-10-31" maintainer "Kevin Oberman " distribution xemacs priority medium category "standard" dump nil description "DEC EDIT/TPU support." filename "tpu-1.14-pkg.tar.gz" md5sum "f3f5ef913e958e5532a2a682288eac05" size 59529 provides (tpu) requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (textools (standards-version 1.1 version "1.15" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Miscellaneous TeX support." filename "textools-1.15-pkg.tar.gz" md5sum "43d33c2e35569a434e7787e7ded2eade" size 79966 provides (bib-mode bibtex refer-to-bibtex) requires (xemacs-base) type single )) )) ;;;@@@ (package-get-update-base-entry (quote (texinfo (standards-version 1.1 version "1.30" author-version "No-Upstream-Ver" date "2005-09-26" build-date "2005-09-26" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "XEmacs TeXinfo support." filename "texinfo-1.30-pkg.tar.gz" md5sum "afa4dfa82a93fc7d4b85096621b8acdf" size 145763 provides (makeinfo tex-mode texinfmt texinfo texnfo-tex texnfo-upd) requires (text-modes xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (reftex (standards-version 1.1 version "1.34" author-version "4.21" date "2004-03-15" build-date "2004-03-15" maintainer "Carsten Dominik " distribution xemacs priority medium category "standard" dump nil description "Emacs support for LaTeX cross-references, citations.." filename "reftex-1.34-pkg.tar.gz" md5sum "161d28002e1a7c80bdaf9facb3559fad" size 352338 provides (reftex-auc reftex-cite reftex-dcr reftex-vcr reftex-global reftex-index reftex-parse reftex-ref reftex-sel reftex-toc reftex-vars reftex) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (edt (standards-version 1.1 version "1.13" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "DEC EDIT/EDT emulation." filename "edt-1.13-pkg.tar.gz" md5sum "1ca337b8b41799394068717d8d716516" size 62754 provides (edt) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (crisp (standards-version 1.1 version "1.15" author-version "1.34" date "2005-04-26" build-date "2005-04-26" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Crisp/Brief emulation." filename "crisp-1.15-pkg.tar.gz" md5sum "0efd73abddf2e032f520ed60b493d463" size 10436 provides (crisp scroll-lock) requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (auctex (standards-version 1.1 version "1.46" author-version "11.55" date "2005-02-12" build-date "2005-12-08" maintainer "Uwe Brauer " distribution xemacs priority medium category "standard" dump nil description "Basic TeX/LaTeX support." filename "auctex-1.46-pkg.tar.gz" md5sum "0d7170230b9300fcef5eb57a7b4e6fbf" size 710140 provides (auc-old auc-tex bib-cite font-latex latex multi-prompt tex-buf tex-info tex-jp tex-mik tex-site tex texmathp hilit-LaTeX tex-font tex-fptex) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (vhdl (standards-version 1.1 version "1.20" author-version "3.33.2" date "2005-02-14" build-date "2005-02-14" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Support for VHDL." filename "vhdl-1.20-pkg.tar.gz" md5sum "f4f9381623e0c14957f2ea064e5044d5" size 300258 provides (vhdl-mode) requires (xemacs-base edit-utils c-support speedbar ps-print os-utils) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (x-symbol (standards-version 1.1 version "1.10" author-version "4.5.1" date "2004-02-16" build-date "2004-02-16" maintainer "Uwe Brauer " distribution xemacs priority high category "standard" dump nil description "Semi WYSIWYG for LaTeX, HTML, etc, using additional fonts." filename "x-symbol-1.10-pkg.tar.gz" md5sum "f213f93f156cc9eb511094292caf6f51" size 680100 provides (x-symbol-bib x-symbol-hooks x-symbol-image x-symbol-macs x-symbol-mule x-symbol-nomule x-symbol-sgml x-symbol-tex x-symbol-texi x-symbol-vars x-symbol-xmacs x-symbol) requires (x-symbol xemacs-base auctex mail-lib) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (vc (standards-version 1.1 version "1.41" author-version "No-Upstream-Ver" date "2005-06-05" build-date "2005-06-05" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Version Control for Free systems." filename "vc-1.41-pkg.tar.gz" md5sum "78b4e9fefebd73d45e0953f719268d67" size 94597 provides (vc vc-hooks) requires (dired xemacs-base vc mail-lib ediff) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (vc-cc (standards-version 1.1 version "1.22" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Version Control for ClearCase (UnFree) systems." filename "vc-cc-1.22-pkg.tar.gz" md5sum "ee4ce6853773d36dd92b53ce2513fd73" size 95028 provides (vc-cc vc-cc-hooks) requires (dired xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (sh-script (standards-version 1.1 version "1.21" author-version "2.0f" date "2005-10-18" build-date "2005-10-18" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Support for editing shell scripts." filename "sh-script-1.21-pkg.tar.gz" md5sum "c3cd67259af1073985af3d5ad83f4d2e" size 70351 provides (sh-script executable) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (scheme (standards-version 1.1 version "1.14" author-version "No-Upstream-Ver" date "2003-10-28" build-date "2003-10-28" maintainer "Karl M. Hegbloom " distribution xemacs priority low category "standard" dump nil description "Front-end support for Inferior Scheme." filename "scheme-1.14-pkg.tar.gz" md5sum "0d64efd541819d9ba12cdafa9036edc7" size 37770 provides (scheme xscheme cmuscheme cmuscheme48) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (prog-modes (standards-version 1.1 version "2.06" author-version "No-Upstream-Ver" date "2005-12-05" build-date "2005-12-05" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Support for various programming languages." filename "prog-modes-2.06-pkg.tar.gz" md5sum "bf0e6a8a0ba1ad529fd945bc358b00c1" size 777078 provides (autoconf-mode awk-mode c-mode cvs diff-mode eiffel-mode icon javascript-mode ksh-mode lua-mode m4-mode make-mode makefile mode-compile mode-compile-kill modula2 p4 php-mode postscript rexx-mode rpm-spec-mode simula-mode sql tcl teco uil-mode verilog-mode) requires (mail-lib xemacs-devel xemacs-base cc-mode fsf-compat edit-utils ediff emerge efs vc speedbar dired ilisp sh-script) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (idlwave (standards-version 1.1 version "1.32" author-version "5.1" date "2005-05-07" build-date "2005-05-07" maintainer "Carsten Dominik " distribution xemacs priority medium category "standard" dump nil description "Editing and Shell mode for the Interactive Data Language" filename "idlwave-1.32-pkg.tar.gz" md5sum "3669f4554b9d1a487a5f3a279e5821e9" size 520863 provides (idlw-rinfo idlwave-rinfo idlw-shell idlwave-shell idlw-toolbar idlwave-toolbar idlwave) requires (fsf-compat xemacs-base mail-lib) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (emerge (standards-version 1.1 version "1.11" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Another interface over GNU patch." filename "emerge-1.11-pkg.tar.gz" md5sum "f47b98cdf120c123bee14ff9d1ff0862" size 61367 provides (emerge) requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (ediff (standards-version 1.1 version "1.60" author-version "2.75" date "2005-12-05" build-date "2005-12-05" maintainer "Michael Kifer " distribution xemacs priority medium category "standard" dump nil description "Interface over GNU patch." filename "ediff-1.60-pkg.tar.gz" md5sum "1c33606ab5bce3bf0a8c5f8fe949e2ca" size 313973 provides (ediff-diff ediff-help ediff-hook ediff-init ediff-merg ediff-mult ediff-ptch ediff-tbar ediff-util ediff-vers ediff-wind ediff) requires (pcl-cvs elib dired xemacs-base edebug prog-modes) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (debug (standards-version 1.1 version "1.17" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "GUD, gdb, dbx debugging support." filename "debug-1.17-pkg.tar.gz" md5sum "e45715132f64e4dbc7f14a22128b9279" size 108073 provides (dbx debug-toolbar gdb-highlight gdb gdbsrc gud history) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (c-support (standards-version 1.1 version "1.22" author-version "No-Upstream-Ver" date "2005-07-27" build-date "2005-07-27" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Basic single-file add-ons for editing C code." filename "c-support-1.22-pkg.tar.gz" md5sum "972b0abd7158053f28a2c66c62ce0270" size 78027 provides (c-comment-edit cmacexp ctypes hideif hideshow) requires (cc-mode xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (ada (standards-version 1.1 version "1.14" author-version "2.27" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Ada language support." filename "ada-1.14-pkg.tar.gz" md5sum "f2635d2b432f2a7cd456df760d622e3c" size 55836 provides (ada-mode ada-stmt) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (cc-mode (standards-version 1.1 version "1.45" author-version "5.30.10" date "2005-05-24" build-date "2005-05-24" maintainer "Martin Stjernholm " distribution xemacs priority medium category "standard" dump nil description "C, C++, Objective-C, Java, CORBA IDL, Pike and AWK language support." filename "cc-mode-1.45-pkg.tar.gz" md5sum "e1a2e251e57f29ce6e082181c13c7f04" size 524116 provides (cc-align cc-awk cc-bytecomp cc-cmds cc-compat cc-defs cc-engine cc-fix cc-fonts cc-guess cc-langs cc-lobotomy cc-menus cc-mode cc-styles cc-vars) requires (xemacs-base mail-lib) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (semantic (standards-version 1.1 version "1.19" author-version "1.4.2" date "2004-10-31" build-date "2004-10-31" maintainer "Eric M. Ludlam " distribution xemacs priority low category "standard" dump nil description "Semantic bovinator (Yacc/Lex for XEmacs). Includes Senator." filename "semantic-1.19-pkg.tar.gz" md5sum "b7fdaa9ad2d2e9d9aaba5c88df8f2fd0" size 446114 provides (document-vars document semantic-analyze semantic-bnf semantic-c semantic-cb semantic-chart semantic-ctxt semantic-el semantic-example semantic-ia-sb semantic-ia semantic-imenu semantic-java semantic-load semantic-make semantic-sb semantic-scm semantic-skel semantic-texi semantic-util-modes semantic-util semantic semanticdb senator sformat working) requires (eieio xemacs-base xemacs-devel edit-utils speedbar texinfo fsf-compat cc-mode edebug) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (misc-games (standards-version 1.1 version "1.18" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Other amusements and diversions." filename "misc-games-1.18-pkg.tar.gz" md5sum "c68c91ee7eb296669388645c467fdede" size 166817 provides (decipher gomoku hanoi life morse rot13) requires (xemacs-base) type single )) )) ;;;@@@ (package-get-update-base-entry (quote (mine (standards-version 1.1 version "1.16" author-version "1.9" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Minehunt Game." filename "mine-1.16-pkg.tar.gz" md5sum "3875c5eb3c58306db3c875a18ba56ff6" size 67161 provides (xmine) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (games (standards-version 1.1 version "1.17" author-version "1.04" date "2005-11-14" build-date "2005-11-14" maintainer "Glynn Clements " distribution xemacs priority low category "standard" dump nil description "Tetris, Sokoban, and Snake." filename "games-1.17-pkg.tar.gz" md5sum "42032b4568b5b46e588a6ffc63efd487" size 37489 provides (gamegrid snake tetris sokoban) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (cookie (standards-version 1.1 version "1.15" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Spook and Yow (Zippy quotes)." filename "cookie-1.15-pkg.tar.gz" md5sum "70b4bde06580ec71df2a23aa95808bb7" size 35035 provides (cookie1 yow) requires (xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (bbdb (standards-version 1.1 version "1.29" author-version "2.34" date "2005-10-12" build-date "2005-10-12" maintainer "Ronan Waide " distribution xemacs priority medium category "standard" dump nil description "The Big Brother Data Base" filename "bbdb-1.29-pkg.tar.gz" md5sum "c8314f305d41335ac91bf5a2ff10d635" size 379982 provides (bbdb-com bbdb-ftp bbdb-gnus bbdb-gui bbdb-hooks bbdb-merge bbdb-mhe bbdb-migrate bbdb-print bbdb-reportmail bbdb-rmail bbdb-sc bbdb-snarf bbdb-srv bbdb-vm bbdb-w3 bbdb-whois bbdb-xemacs bbdb) requires (bbdb edit-utils gnus mh-e rmail supercite vm tm apel mail-lib xemacs-base w3 fsf-compat eterm sh-script net-utils os-utils ecrypto) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (zenirc (standards-version 1.1 version "1.16" author-version "2.112" date "2005-05-10" build-date "2005-05-10" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "ZENIRC IRC Client." filename "zenirc-1.16-pkg.tar.gz" md5sum "074e5d8aef2568e9e73bfb227faf61dd" size 277377 provides (zenirc-18 zenirc-8ball zenirc-away zenirc-bork zenirc-color zenirc-command-queue zenirc-complete zenirc-ctcp-flood zenirc-dcc zenirc-doto zenirc-fill zenirc-finnish zenirc-format zenirc-fortran zenirc-french zenirc-history zenirc-ignore zenirc-iwantop zenirc-klingon zenirc-latin zenirc-meditate zenirc-netsplit zenirc-notify zenirc-oink zenirc-ojnk zenirc-pjg zenirc-popup zenirc-random-away zenirc-random-nick zenirc-signal zenirc-stamp zenirc-swedish zenirc-trigger zenirc-yow-filter zenirc-yow zenirc) requires (zenirc) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (mew (standards-version 1.1 version "1.19" author-version "1.94.2" date "2005-05-10" build-date "2005-05-10" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Messaging in an Emacs World." filename "mew-1.19-pkg.tar.gz" md5sum "c3bad6f65dfc096c707ed238b138c940" size 745714 provides (mew-addrbook mew-attach mew-bq mew-cache mew-complete mew-decode mew-demo mew-draft mew-encode mew-env mew-ext mew-fib mew-func mew-header mew-highlight mew-lang-jp mew-mark mew-message mew-mime mew-minibuf mew-mule mew-mule0 mew-mule2 mew-mule3 mew-os2 mew-pgp mew-pick mew-refile mew-scan mew-sort mew-summary mew-syntax mew-temacs mew-unix mew-vars mew-virtual mew-win32 mew-xemacs mew) requires (mew w3 efs mail-lib xemacs-base fsf-compat) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (tm (standards-version 1.1 version "1.38" author-version "No-Upstream-Ver" date "2005-04-09" build-date "2005-04-09" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Emacs MIME support. Not needed for gnus >= 5.8.0" filename "tm-1.38-pkg.tar.gz" md5sum "dcf814b84cbe6cae01153ba702ccd704" size 333864 provides (char-util cless gnus-art-mime gnus-charset gnus-mime gnus-sum-mime latex-math-symbol mel-b mel-g mel-q mel-u mel message-mime mime-setup mu-bbdb mu-cite range sc-setup signature texi-util tl-atype tl-list tl-misc tl-num tl-seq tl-str tm-bbdb tm-def tm-edit-mc tm-edit tm-ew-d tm-ew-e tm-file tm-ftp tm-html tm-image tm-latex tm-mail tm-mh-e tm-parse tm-partial tm-pgp tm-play tm-rmail tm-setup tm-tar tm-text tm-view tm-vm tmh-comp) requires (gnus mh-e rmail vm mailcrypt mail-lib apel xemacs-base fsf-compat sh-script net-utils ecrypto) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (gnus (standards-version 1.1 version "1.89" author-version "5.10.7" date "2006-01-04" build-date "2006-01-04" maintainer "Steve Youngs " distribution xemacs priority medium category "standard" dump nil description "The Gnus Newsreader and Mailreader." filename "gnus-1.89-pkg.tar.gz" md5sum "e7707178416716eac643af29c437f619" size 3457913 provides (binhex canlock compface deuglify earcon flow-fill format-spec gnus-agent gnus-art gnus-async gnus-audio gnus-bcklg gnus-cache gnus-cite gnus-cus gnus-delay gnus-demon gnus-diary gnus-dired gnus-draft gnus-dup gnus-eform gnus-ems gnus-fun gnus-gl gnus-group gnus-int gnus-kill gnus-logic gnus-mh gnus-ml gnus-mlspl gnus-move gnus-msg gnus-nocem gnus-picon gnus-range gnus-registry gnus-salt gnus-score gnus-setup gnus-sieve gnus-soup gnus-spec gnus-srvr gnus-start gnus-sum gnus-topic gnus-undo gnus-util gnus-uu gnus-vm gnus-win gnus-xmas gnus ietf-drums imap mail-parse mail-prsvr mail-source mailcap message messagexmas messcompat mm-bodies mm-decode mm-encode mm-extern mm-partial mm-url mm-util mm-uu mm-view mml-sec mml-smime mml mml1991 mml2015 nnagent nnbabyl nndb nndiary nndir nndoc nndraft nneething nnfolder nngateway nnheader nnheaderxm nnimap nnkiboze nnlistserv nnmail nnmaildir nnmbox nnmh nnml nnnil nnoo nnrss nnslashdot nnsoup nnspool nntp nnultimate nnvirtual nnwarchive nnweb nnwfm parse-time qp rfc1843 rfc2045 rfc2047 rfc2231 score-mode smiley smime spam-report spam-stat spam time-date utf7 uudecode webmail yenc gnus-idna gpg-ring gpg hashcash vcard) requires (gnus mail-lib xemacs-base eterm sh-script net-utils os-utils dired mh-e sieve ps-print w3 pgg mailcrypt ecrypto sasl) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (rmail (standards-version 1.1 version "1.14" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "An obsolete Emacs mailer." filename "rmail-1.14-pkg.tar.gz" md5sum "4409fc7ff5134ff562ff1357a014a41b" size 96995 provides (rmail-kill rmail-xemacs rmail rmailsort) requires (tm apel mail-lib xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (mailcrypt (standards-version 1.1 version "2.14" author-version "3.5.8" date "2004-01-17" build-date "2004-01-17" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Support for messaging encryption with PGP." filename "mailcrypt-2.14-pkg.tar.gz" md5sum "df1654138b6a146868bb52addb33bf47" size 154180 provides (expect mailcrypt) requires (mail-lib fsf-compat xemacs-base cookie gnus mh-e rmail vm) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (supercite (standards-version 1.1 version "1.21" author-version "3.55x3" date "2005-10-29" build-date "2005-10-29" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "An Emacs citation tool for News & Mail messages." filename "supercite-1.21-pkg.tar.gz" md5sum "4fb516d03f2d95d9e0e092c994f79df7" size 100802 provides (supercite) requires (mail-lib xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (mh-e (standards-version 1.1 version "1.29" author-version "7.4.2" date "2005-03-14" build-date "2005-03-14" maintainer "XEmacs Beta " distribution xemacs priority low category "standard" dump nil description "The XEmacs Interface to the MH Mail System." filename "mh-e-1.29-pkg.tar.gz" md5sum "c4009dbf4aa47d505dd8cb025e326ca3" size 578385 provides (mh-alias mh-comp mh-customize mh-e mh-funcs mh-gnus mh-identity mh-inc mh-index mh-junk mh-loaddefs mh-mime mh-pick mh-seq mh-speed mh-unit mh-utils mh-xemacs-compat mh-xemacs-icons) requires (gnus mail-lib xemacs-base speedbar rmail tm apel sh-script fsf-compat xemacs-devel net-utils eterm os-utils ecrypto) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (gnats (standards-version 1.1 version "1.17" author-version "3.101" date "2005-04-09" build-date "2005-04-09" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "XEmacs bug reports." filename "gnats-1.17-pkg.tar.gz" md5sum "f048ff33f8b6f724613bd63173b9d9ef" size 188959 provides (gnats gnats-admin send-pr) requires (mail-lib xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (footnote (standards-version 1.1 version "1.16" author-version "0.18x" date "2003-10-31" build-date "2003-10-31" maintainer "SL Baur " distribution xemacs priority low category "standard" dump nil description "Footnoting in mail message editing modes." filename "footnote-1.16-pkg.tar.gz" md5sum "79dc557f3be890dc6f3e7793fef6f1b6" size 22152 provides (footnote-cyrillic footnote-greek footnote-han footnote-hebrew footnote-kana footnote) requires (mail-lib xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (eudc (standards-version 1.1 version "1.39" author-version "1.32" date "2003-10-31" build-date "2003-10-31" maintainer "Oscar Figueiredo " distribution xemacs priority low category "standard" dump nil description "Emacs Unified Directory Client (LDAP, PH)." filename "eudc-1.39-pkg.tar.gz" md5sum "1c725e74136dc51c02f4e7b7642140a7" size 79488 provides (eudc eudc-vars eudc-hotlist eudc-export eudc-bob eudcb-ldap eudcb-ph eudcb-bbdb) requires (fsf-compat xemacs-base bbdb mail-lib gnus rmail tm apel eterm sh-script net-utils) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (net-utils (standards-version 1.1 version "1.48" author-version "N/A" date "2005-10-12" build-date "2005-10-12" maintainer "Steve Youngs " distribution xemacs priority low category "standard" dump nil description "Miscellaneous Networking Utilities." filename "net-utils-1.48-pkg.tar.gz" md5sum "09cd58b37a72e17ff53c05ba1e67cf2f" size 155120 provides (ilisp-browse-cltl2 xemacsbug feedmail metamail net-utils rcompile shadowfile webjump webster-www dig dns dns-mode xml google-query mozmail) requires (bbdb w3 efs mail-lib xemacs-base eterm sh-script gnus rmail tm apel vm mh-e mew ecrypto) type single )) )) ;;;@@@ (package-get-update-base-entry (quote (w3 (standards-version 1.1 version "1.32" author-version "4.0pre47" date "2005-12-29" build-date "2005-12-29" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "A Web browser." filename "w3-1.32-pkg.tar.gz" md5sum "92a3dcd5c51317ab8317fe6059491213" size 695310 provides (css devices w3-auto dsssl-flow dsssl font images mm mule-sysdp socks ssl urlauth url-cache url-cookie url-file url-gopher url-gw url-http url-ldap url-mail url-misc url-news url-ns url-parse url-vars url w3-about w3-auto w3-cfg w3-cus w3-display w3-emacs19 w3-e19 w3-e20 w3-elisp w3-emulate w3-forms w3-hot w3-hotindex w3-imap w3-java w3-jscript w3-keyword w3-latex w3-menu w3-mouse w3-parse w3-print w3-props w3-script w3-structure w3-speak w3-style w3-sysdp w3-toolbar w3-vars w3-widget w3-xemacs w3-xemac w3) requires (w3 mail-lib xemacs-base ecrypto) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (vm (standards-version 1.1 version "7.22" author-version "7.17" date "2005-06-06" build-date "2005-06-06" maintainer "Kyle Jones " distribution xemacs priority medium category "standard" dump nil description "An Emacs mailer." filename "vm-7.22-pkg.tar.gz" md5sum "067b3cac6c8b6ee68a5fd2abf1e0acea" size 822094 provides (tapestry vm-byteopts vm-delete vm-digest vm-easymenu vm-edit vm-folder vm-imap vm-license vm-macro vm-mark vm-menu vm-message vm-mime vm-minibuf vm-misc vm-motion vm-mouse vm-page vm-pop vm-reply vm-save vm-search vm-sort vm-startup vm-summary vm-thread vm-toolbar vm-undo vm-user vm-vars vm vm-version vm-virtual vm-window) requires (mail-lib xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (sounds-wav (standards-version 1.1 version "1.12" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "XEmacs Microsoft sound files." filename "sounds-wav-1.12-pkg.tar.gz" md5sum "3045a90ca53b22ebb7aa52f611bafcd3" size 149624 provides () requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (sounds-au (standards-version 1.1 version "1.12" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "XEmacs Sun sound files." filename "sounds-au-1.12-pkg.tar.gz" md5sum "9bf0b5a2ac38a4fe2d710063ddcaadd3" size 126817 provides () requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (xemacs-devel (standards-version 1.1 version "1.72" author-version "No-Upstream-Ver" date "2005-10-12" build-date "2005-10-12" maintainer "XEmacs Development Team " distribution xemacs priority medium category "standard" dump nil description "Emacs Lisp developer support." filename "xemacs-devel-1.72-pkg.tar.gz" md5sum "b11f75c8ab895518f9324c668cb5fd84" size 243274 provides (checkdoc docref eldoc elp eval-expr find-func hide-copyleft ielm patcher pp trace patch-keywords) requires (xemacs-base ispell mail-lib gnus rmail tm apel sh-script net-utils eterm ecrypto) type single )) )) ;;;@@@ (package-get-update-base-entry (quote (tooltalk (standards-version 1.1 version "1.15" author-version "No-Upstream-Ver" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Support for building with Tooltalk." filename "tooltalk-1.15-pkg.tar.gz" md5sum "3d1a4ddbd0da23033a6dc8a8c90849e2" size 9749 provides () requires () type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (elib (standards-version 1.1 version "1.11" author-version "1.0" date "2003-10-31" build-date "2003-10-31" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "Portable Emacs Lisp utilities library." filename "elib-1.11-pkg.tar.gz" md5sum "914b735704c60f7d534398025ae725db" size 73387 provides (avltree bintree cookie dll elib-node queue-f queue-m read stack-f stack-m string) requires () type single )) )) ;;;@@@ (package-get-update-base-entry (quote (edebug (standards-version 1.1 version "1.21" author-version "No-Upstream-Ver" date "2004-07-05" build-date "2004-07-05" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "An Emacs Lisp debugger." filename "edebug-1.21-pkg.tar.gz" md5sum "c3807d0c7bf76758b81f4d1837861758" size 115585 provides (edebug cl-read cust-print eval-reg cl-specs) requires (xemacs-base xemacs-devel) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (Sun (standards-version 1.1 version "1.16" author-version "No-Upstream-Ver" date "2004-09-06" build-date "2004-09-06" maintainer "XEmacs Development Team " distribution xemacs priority low category "standard" dump nil description "Support for Sparcworks." filename "Sun-1.16-pkg.tar.gz" md5sum "e82c814a75cab21586f81c6aef7d6ea9" size 64431 provides (sccs eos-browser eos-common eos-debugger eos-debugger eos-editor eos-init eos-load eos-menubar eos-toolbar sunpro) requires (cc-mode xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (apel (standards-version 1.1 version "1.32" author-version "10.6" date "2005-12-06" build-date "2005-12-06" maintainer "XEmacs Development Team " distribution xemacs priority high category "standard" dump nil description "A Portable Emacs Library. Used by XEmacs MIME support." filename "apel-1.32-pkg.tar.gz" md5sum "0c3f9d60d3bdaf4a7f4eaf2bdf656e84" size 121589 provides (atype emu-20 emu-e19 emu-x20 emu-xemacs emu file-detect filename install mule-caesar path-util richtext std11-parse std11 tinyrich) requires (fsf-compat xemacs-base) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (efs (standards-version 1.0 version "1.33" author-version "1.23" date "2004-10-04" build-date "2004-10-04" maintainer "Mike Sperber " distribution stable priority medium category "standard" dump nil description "Treat files on remote systems the same as local files." filename "efs-1.33-pkg.tar.gz" md5sum "d0e7badb65439e1ac144aa4588be4db1" size 375842 provides (efs) requires (xemacs-base dired) type regular )) )) ;;;@@@ (package-get-update-base-entry (quote (dired (standards-version 1.0 version "1.17" author-version "7.13" date "2005-04-09" build-date "2005-04-09" maintainer "Mike Sperber " distribution stable priority medium category "standard" dump nil description "Manage file systems." filename "dired-1.17-pkg.tar.gz" md5sum "fc911843a2e768b657f61d4dc0137a6d" size 201027 provides (diff dired) requires (xemacs-base prog-modes) type regular )) )) ;;;@@@ ;; Package Index file ends here -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFDu3/3gu3ywdHdhM0RArnQAKC2oQEX2BRllTlQl4UiMYIZYEBeQQCeNTHj p3T7YxmbQDgZRUSOEEmtxs0= =EoNd -----END PGP SIGNATURE----- xemacs-21.4.22/etc/recycle.xpm0000644000175000017500000000611007265371003014170 0ustar acsacs/* XPM */ /* A recycle logo, artist unknown, converted to xpm by jwz */ static char *recycle[] = { /* width height ncolors chars_per_pixel x_hot y_hot */ " 51 51 4 1 26 23", /* colors */ " c None m None", "# c black m black", "- c chartreuse1 m #7fff0f", "@ c chartreuse4 m #4f8f0f", /* pixels */ " ", " ################### ", " ##------------##@@-@-## ", " #-------------#@@@-@----# ", " #-------------#@@@-@------# ", " #------------#@@@-@-------# ", " #-------------##@-@---------# ### ", " #------------# #-@----------# ##@## ", " #-------------# #@------------##-## ", " #------------# #---------------# ", " #-------------# #--------------# ", " #------------# #------------@# ", " #-------------# #------------# ", " ##----------# #----------# ", " ##--------# ##---------@# ", " ##-----# ###-----------# ", " ##---# ############## ### ", " ############## ### ##--# ", " #------------## # ##-----# ", " ##-----------# ##-------# ", " ##---------## ##----------# ", " #----------# #------------# ", " #------------# #-------------# ", " #------------## #------------# ", " #--------------# #-------------# ", " #---------------# #------------# ", " #------------#--## #------------# ", " #-----------####-# #-----------# ", " #-----------# ## ## #-----------# ", " #---------# ## #---------# ", " #---------# #-# #---------# ", " #-------# #-# #-------# ", " #-------# #--# #----@@## ", " #-----############# #--############### ", " #-----#@@@-@------# #----------------@# ", " #---#@@@-@-------# #---------------@# ", " #---#@@-@--------# #----------------@# ", " #-#@@-@---------# #---------------@# ", " #-#@@@----------# #----------------@# ", " #@@@-----------# #----------------# ", " #@@@-----------# #--------------@# ", " #@@-----------# #-------------@# ", " #------------# #-----------@# ", " ##----------# #---------@## ", " ########### #--####### ", " #--# ", " #-# ", " #-# ", " ## ", " ## ", " " }; xemacs-21.4.22/etc/recycle2.xpm0000644000175000017500000000255406256071512014263 0ustar acsacs/* XPM */ static char * recycle2_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "32 32 4 1 26 23", /* colors */ " s none m none c none", ". s iconColor1 m black c black", "X c #7F7FFFFF0000", "o c #45458B8B0000", /* pixels */ " ", " ............ ", " .XXXXXXXX.oooXX. ", " XXXXXXXX.ooXXXXX. ", " .XXXXXXXX.ooXXXXXX .. ", " .XXXXXXX..XXXXXXXX .o. ", " .XXXXXXXX .XXXXXXXXX. ", " XXXXXXXX. XXXXXXXX. ", " .XXXXXXXX. XXXXXXXX ", " .XXXXX. .XXXXXX. ", " ..XXX ..XXXXXXX ", " ......... .. .XX ", " .XXXXXXX. .XXXX. ", " .XXXXXX. ..XXXXXX. ", " .XXXXXXX. XXXXXXXXX ", " .XXXXXXX. .XXXXXXXX ", " .XXXXXXXXX. .XXXXXXX.", " .XXXXXXX..X. XXXXXXX.", " .XXXXXXX. .. . XXXXXXX.", " .XXXXX. .X .XXXXXX ", " XXXXX .X .XXXX. ", " .XXX........ XX......... ", " .X.ooXXXXXX .XXXXXXXXXo ", " .X.oXoXXXXX .XXXXXXXXXXo ", " XooXXXXXXX XXXXXXXXXXo. ", " .ooXXXXXXX XXXXXXXXXX. ", " ooXXXXXXX .XXXXXXXXo ", " .XXXXXXX .XXXXXo. ", " ....... XX.... ", " .X ", " .X ", " . "}; xemacs-21.4.22/etc/refcard.ps.gz0000644000175000017500000005317306447133403014421 0ustar acsacs‹pM˜4refcard.ps¤[ëoÛH’ÿÞ‡f€µÝMRìf3Æ¢ÈC€o6r‚|P$ÚÖ,i%9qŽðÿ~õ«ê¦HY~d.rWóѬ®®w?òËßÞ_M—_ë£øX«_~)Öõx»\¿‰¦ßf«ÍŸÑà8‹ÍyT,W?Ö³ë›mdr—ý`žEÆÓÙd<Êut±¼Ú~¯kÂñq¶×o¢u}5¯§Ç„‰¾_×›7Qæ/ÿ¹žÖÔËÙfR/¦ôl¸¼[Lg‹ëáòþM¤é—™8²yL¯¢Ñrrw[/¶ïÇ«z}1û_à™×Ûm½¦·åbZ,oñz£~}z÷þ·ãÅô³E퇢Dëè蟑þ»îÆŸ¼¯Ç·5!$ÌÓÕì?©±s±¼[OOô±¾Œ–wÛÕ8ÛcCl±oLªSP__Ïï×ËÉE½}mëûãÕz©~ù›:¡ÏF³É6Š:šâbZ_EááW|œ7ôð/N†Í×ÙbŠFçÑÉESßOnÎÕÉes? £“šíz¼ØÌÇÛMf›ù&ºÏ7uDwß6ÄÈ˜ÈÆÑíÝnø‘;Ð3åŸÍ‰=«ùÝ&× *}ÿNò-`l>ë¨ÓÈDGæ¡92‘yP³«ADúËd¹˜Œ·³+tø¡Þ,çwÛÙrA#ý†'Ÿö-êëhC S+î¤ÓC·%}ˆÆ2P¬#fCÓis$Ôͮу§ìãÐÓiÛÅ-Hýב‰ÆÓ)¾V?|¾o׳ûhr·^“2É]3½[E(k¨g´¹û¿n"}¬éŸ‰æÛ†_P‡êj¹Ïç¾%î\~ÙÔ#dö;N|XÕÈo»¾«!^uò;iîÝx~U×Óf³oï6¬4'»ÇÒ˜ÔÚðûd¹šÕ›æä?ä"º’êñö³aqõ…:­†ÃÏÚ‹n º¢ú])õd»–‹éÕÑv<›7 MœèìyD×^Y«åbûñǪŽ´ÆÝ¸«Åv}ž ÉŽ#ê2:Wz»¸ŽN¾ŽI8—Ñx½ÿ EŸÑwd™—ty7›O‹›ñºà»z >•‹É>!""ÏU »¸[5'WËeDü¼¢nb†OàúŸ/ÇS Q [ û vM¯hX›+’;azÁ+ºó£–F›ʆ—¾Ùgº먂ƒ‡ª÷QÙ¬–+ôÉ S_‘ï}-Ôdrsô}6ÝÞ4t1oÇhªæõâz{ Xµ®ëÐð¦†«í¶Œ|Ët¯åýòŠebhœ„ƨý?ðÁ¶1Ú(´5±í´ŸÞjmöȘݒO n¡#'"|¾^Ð{’z`¡ ˆžÃ~Ïl**¸þŽZ¬'r½ò:êëÿ’ŠeBuGkšÍø4Óí‘-^0EóÐo‘s­ïùúb§ƒr+„ù¡^FgkÌ¥#ÏðÈó1jEÅìè¼eIóà|SEš0Onêiým6©wmv(`Ø;³=:6-Bœñ3ë¿4é oÇ«×õ†Bw VŽš“É„Fñ”$¾À‘C_wÌ¡ö.ŒÏûÌÁ›‹ˆM‡¾ö^Qõ”ƒ…›Ô†_EµÖØ<‘ú®QÔµ<áÁ×媹ÛÔkñ|twt³\þý¹X~_4áO.ÞE,ðóHb—ïn—ßêí2:ùòèL¦aòp…ÈÁ¾Zw)Ðrœçpð'ÿúôМ|ø »ÄK(8ªš(&Z<ÿ£@¼Â‹.ñu‡øÍÍòû òC@ W¿ÞvÍ÷ÜTÉ—»ÌJèf7¬‘ŸêÝ OÌûJbH?¢KO2ï/ÏiÀ†î =¾€ÅKƒš HÄ‘M¾±#} ð¦²uæØf‚ZbéeÔ*ùÃZ5$®>ô#’â4-É$3ú†åßÍ©[.Èå·Æß]†—Ñ'hÊ'Õ úð)êÄJ§(›ÞÑí÷›z]³wæTçó¯£Ùf5ÿøí×óúòãoê׬ÿ{=£ì/2ÙI¦õo_šŽ« ˆüí¼>ðRyâŠi¶ lß(3®ÿÍ]sÌ®ïg0„<ñÚô IÃOÃBrE¡®i®Yµ?~`O@te (äO‘°A¸"ÙXÜ€¥„¥õ×Á%<Ä×Å"xÑãS;|‡ÐyB‰ùÿúä1/jÒgb §§4®[ÉÔ^*Ív ¼©©¯ç6é^{’jý3%m$ø†vW3òñׯ7n#‡ñzN~œõ‡óŽòð8v-ÿ ÜA¯`ø!¦åçánҥь¹QG‰\ÖÍQ,WWHùêºÑrqÓø'³Æ7úŸÆ÷gøÔÉ÷¦GʼYEÔÍw\ßâ:‘ë®c¹^âÚÈ5iW„KE×ëþ—oèÒ¹¥KðžúºèööƒÈ‰%R®¢1Èùº¤\òâÂ{U!=¡;&cº&Ó.?ßQýÙLªãK bç&ÍÄ%¾üÚ™|ý¦Äñù©EœÛñ Ù㛨G“ÛÛ™!/E”ÒŽiœƒœR®·™®èGfJS/[¸D§¢R¨=L‡PS,½ÝÔ9áþJe=1°WU¡CÑg:±#—ëê4D£·Ú”‰¶Æjzmœ®§é.-¥ËR›¢_’<”LÛ<1ù™)ua4åXEnÌà4·jô6©ˆEÖ—²_LÑ/Œí̸¤ÐPÐ'EK.öˆpÔ…peô+tB¤ ¯Ìˆˆ(Lrúî-Ý9j“R«TQ7¥q¦Hž¦*””äà2mèÛŒqVZrª€V[´”öb‡ æ4¥U@c@1žž8@0Ÿ ã´X2¶C0É•TB$„‚„‚n4œxž O,ñ¤Ð)õS)õ—‚ÓÎVÕAždž'Éaž«u,ÊAAxMr¤f‰Pè0D‚¦q–*©Hh ¡°à§ÍŸápÎÑ'ÌT~i¡ƒšfæÌ–L+ J_½RP¢'ªî Y ³‡ªâÆa“hÿ·ëD¹}g\NûgØš¡u[X".{1&x}…®G"¡a»L†­yؚǫ_7j%¤€èÛ:¶n`¦˜à^v¿jgÄû30gÄzÃVD‘ ˆ³4&½±¤3–Ô$s5W=­º ¨{ñ©1)GÔ œ¢0†Bzêwà†àçáy@»&˸2æhÂþËù€†¶°bÒyb1³6˜‰:½ªªü9SÓ,z*FsÉ2Ï®!yË"ÏuÉlóãr§Á»YŠMF §çÁ{µ¶)Ü“8Ò(SDA›²Wv}¸gõ¸ë=ˆLƒ°³UîÓo=<,‡c+ÔÉA9RzÅ?cRÓS²¾ŸIÕ&”ªm~ØÈrˆURÊÒ3›”ˆR:b­×éBB±ëRŨ‰PÃfíBÍt²6½®ÎQA·Ô¡ç@IKY 4PN#Qì†x“Øœšägx4%­Á¢¹ì”ªË¦,˜˜”,kh·Î)£¥Ìü4…ýUôÇI܉@ÉK|;2§J°3ñ hŠy÷îBk]@ëDŠ×éf_O%u‰[‹qóÍ k•ú(†KBœ9'÷^Æ2­6ÎuJáQ84yŒOtÄrÞ"þž'ybV¤´ãÉ‘‡½U‰Ÿ‚jïV|ĪÖE9^¦]{þeÕS/žƒZ`Éž2ãqÐloç*û‚Ç,©*dŽ˜èPC¾…`”ºDñÊCŠ˜ØÖ5³Š ¤SÓ”+dX,Kº5…oÄQÅÊÉÁÐ׺|l¯6¥K¹­³ìR%8F"R%SVÉ;\Ì)rÊ*ÆJI–EçË»Xœ„X,ñ·¼h{rß½…–°ÎÒ'Ìi+ÉYæsG*)JfÊ4)y’4²¥+(wà¥Ûʧ 1)IY Ö7²¥€ö;4ŒÁÕÊ“sÚSr …šqÊó8÷§O~„x§X; "±"ªür£OA—*w˜ØÅ¦ròëÔ1´CaU…kõäz… È;;MåŒéCêYf1Ë7Cþ/¿˜3F²Šj—ä·'ìW0òý¬Ô'¥sc»˜ÀúY™2ú.åùÚ³Ti[ÈWçÓ âL"Óil (ñØ“ ·…öæKc¦Ð…ˆ÷%»Ÿ „ùèÎt%%GJnÀqL-0ìç¡:ôœJ°Ãjd†‚ûYn«ýÂmATY´šº¯;MPb˜òÉÅc0=^2wJ¹aRgf?ž6ÒbÂ6rÒNcuXÌX‡ÞÌF~±-!Wš¿Ö¦„ãRd¯`‡á~%5Ì¡Ig-šR³¯ÕíÑjIâ^ ÇµÅŸæ&&½0ŒµâõÊä%¥ë†:²«x†idÓ…›Æâm …‰B¨Û•@XOvÎT¼ÒàñR.ÂNI¹ ir0³†,¼…fàq;X¡:Š©):k¢pÏP.ÞEËÄæ4l®GÝþøTà3ã‹¥`k€KÈ…J¯Y„Y½z•©Ž&·_ïeÓ4¨zÂBûN¨ì»’|#Á¦ƒÆ^òFZ[c¦…Ê£ÂÅẪdNê§Ú½ˆèõõ"[•<• 5å¶#ìI˜‚¬Š·Çü<¯äµïµ$¥Â÷È®9‘-9 Á––—g,³É†?é¯ Ë|T¬EÿŽÒO¶š¨ç숫Βý‹P~!‚+‘Žñ†'ž[˜Xî êÞô`ç `teÁ™^“9CZ‹Ï¦Œ¶’}^¿èɆQú“ uÊç…X€•µ–°Áɉ!‹ëå¥ßÑh™¶Ç:õ*> 4üc…¤½UÜsÅT"©ªW@Û‚BÐá˜CEZ”P?%3®l'b7ÓKDÓ\€¬ˆ;HÿTyqf~ÚÈ €lÒ¿*#*—1ßçX¦äÅNÞh¶Ž-ÕC<VZ¼š‚™£Ü½B¼/@µÿˆ'jb7˜·%×ÄÉòoj’‚&`ý)©º~›MN”¼’Tº¿bè!²^†HžyUÍð$•åêd« e鬯üĬ`™Ýç'~ξŸ€Xd¦!³}§èÞĨªC/h¬<4®cßì«~‘Yâ›ñÖïõ™WÕ°;¸cˆš|ÄÛr¯á¡z‘‰dr-”åõ„ŸÃuU¼ …ã@@d]»œR åµç¡óÎ_&Ѧ %zKâ#11évåçB¡¨Ÿý  ;C¥ç!Ï,-/!’&Ç­S¬W‰†óë¢wbhÿJzøW®Tÿ¡( Y Û]Å>\ÆÎ/“B~ÏÔ_±„CPíY‚¸MvØ&8ì°"‘𢄘¿@öŠPIuv?ÞwÈCqØ!GpŠGÍÉCÞ«Nx·O„÷}¨úáÝvÂ{å—>‘E¼ìŠÔnßS éúÙŽK ë«x9 ä…˜BKr*Ÿ_©ªsóJSùLPÑ]^¢nÙ3.Ùµ7‡`0d^:’ƒQ<•åMUÉëÌ¥C BÕB ÍÁa·)ZKÆK4åmÍ‘CÈÊü’ Jåça–W¹ ¶2Î6 ÙdÛ¬pdRö×bÒË™è–ö”R%«odN¢Û+ÝHÑ-ô=¬5wJyÎÝ"@Â`_ghêUÖTQDj Kvä8ÑMFÊ_pÒ+æÞÖ’lèp^)Ô¦ò~’'ÓØ &Æ(T˜s´y-xÒZŠaðU/›ðÛ§I9^XÅï3~ÏÖÈò.îqæ9™¨× åy™¨~î&;é¼ÝÅ»cXíÐXÅódçØxR_?q¾Âiã­LœmLgþ¿’&Îvg™Ÿþemn´;õlrK¦¤(O°‚U¡ŠÓÊÃůñÉ)=ÒC[äNry^ÄRR=9œyhe³Øú}œäÌXIÕ…¶ó±@Sð¼âYHÓ]b¨ÔOì=É<„Ýs"t „%S`âH¨W6ÀŠÏ3Ë¡ØÄ+o¥Ã¤Ü+ ŽgÒÈ3¦¦Dß” -¿¶ù¨ =Ë^¯?éÜ¥‘i'ç­yê–)>ìˆé©åY›À’·a[XîC#*ÏPŽ™¨GÇmÃ9ÛçNù…“ºrÀgnœBa’\ö Θtˆ5<#2 ŽÅ`<OÿT‚³{üéƊO\²Ž¬c1&9VJØÓ”»våãxʾ|ä¼Wºí9@XtZÈ9ry0Œ=óÔ?jSì£Vº2ð5ÛÚ‡Nâœ]pgü¢ÜgDÒГ´‘&Úe•ä%Ì)­b+;ñ²ïw]ñ‰È·¢ýãÏœØÄcßtŸjù$"2cœßH- [Z¤M¥aƒ¬äèê|YÊM”´èBctbK7â÷öÿªûÖæÆqìÐïøÎÞÜZi3¦R´ir“J&™;³{7UÛ»÷Ê%«[–<’<Ý=›ü÷༢d»{²•LI"^ç…ä‚AI«'zâJΦÙË/z¢«çÍŠžë¦½ìû“Ÿ«ß³;a¤ˆ´r5QŒ¬mœ5n~pÉÿõGÒ¡+dWeµ¨Ä¤Ò¨dªsÂ~Ýó•”µCØCÇ^,¢Â_ÝwŸ}ÆŸ’DChúÚy%E:æÇKbFÑ˹×ç†Ë™.žØœVúcúZE³3mS`ì;ãhÚ/G•T÷d8Ò$$ÚØÅ´¹dUbnz(p-ÒªBÆ3¸¿SaV„–°*%•Ä]9.á‹®q‘«ƫ3d… «9+À*"aè×àJ6àWÃã¬÷H­”à[oáçy|›‰ˆÈÎôMÂrÒo*áøtLS¦jšä3w‰F=„}—M|—àN-•~9`Õ‡üœfô[Q‘Më“‘áAÖµ¤ i¤(B±R_%|pó Ÿò̆%T·Jü¼Ë#:ÁbÄ®£ÖÚ^Á|B"7ÅÙ„Úd‡šÙýižsu¬Ã­‚v“?$N“F4«Ä&ÿ™¬SÉ:ÂÝ®âÕ¢Ó{çŠ-¥rêZËŸº+ͫԟ®`Žõ0¢”–é hùc½yï˜{hUÏ»‹T\`o‰ŸVg¼Å¢yH®ÔÒ«Ø•aÒš†ü0®JÖô“Æ“œÞû›XTÉ(^?ûÚ9 €àE%ˆ–•»[û>RödC¾ŒîToÔO{Õ&WÕq´íu"Û?iÎJ-Jd˜¼Ì+ ¦2{ÒÙJf.q¡¦JuW4öUïçítKÜ‘ø×“Î^4ÞépŸ`A­P£0F馻ã‰m2RhΕ”̵@=|RIgPƒ^·ZJ“;õRïÇákN€†zóx‰LëY(t%u¨¤ ÿÛ7(å•9{½‚ëôÊÒU¥pmp$êäzîÿX¼’TgÐຢ~ ìŸ×%nêK¯b&]U7ºxuGWK×i¼º^#Š_“ßjxp iýÁîèH>éΟI.dQ!y6ñŒE„&ÓKô_€4® ¼<§ré«®¬$nÑ2UGbôY/åK´ÇÙN ê¡5&^ /žt…þÃᴊƳN;³DvÃÕV2v’ ¡Ú “zlZæuRζéôcÆ–ÄÅ >Oê­Ê QöÞ‹ÿTúP¿hÑé^Õ“9¦3aêOìlJoz;¢{×!ü¤ÉÒLãU]ã ®Ú_Ëîõú4Ã×eÿÚ1G#ZLTr2;6Zþêgêcj颗eˆi¡ºR`^DÁxjžö·BŸ¾ŽøÞæ8‘A½8G’¡ì);Õî³þÔK3t{8èòKõ°zÃô¹nP} ûÄÀË-¨Oii\MgW+ÏŽ—.Lµ —V‚W´cµ!ÏvÕ MË•t™fÿÀ¶ÚzpÛ5ÿO¢>š«=M«É‰¥f'–Ô(Ð<±žƒdf®©|Å6xb<Òåã9|!1‘èàCl&­+[W®ìQ MfÛ š ŠG¡>:sE…ICƒë€CG 9B ½ ÷\_ÿK¢`r%%ç±fÂVäÞäqΊ ¨þnx¥6È'Úa„Œ;´e¹ºßtÕ„]P<ìÃpº³}ù»óP »(vaÃSÔ¿0êS§Æ\íºÇâæ‹d6þ=\OÆÅH®ê9‘`x—ŠW¹Ø?µUÈ.?ÚUÀÆ{^õG\P,¢x‹¤:§T)Ã˼8@EQ¶{evÂÿ[bÅ·+:Ýy¦.8=oÞ)žx%NŽÈÒÿL}š¥é_Õðhrõ×)^Ëæù˜kqìIÛwV"T£¿#ûÙ?…8Z¡Ò'(ʼnÙ/÷¨XÃŪ–{òOiއܯ!2+8n×l ¿Ø57ÈñÄŵƉչjŠÎ€è‚j"H‘xe±tv…cߘ~éš4% d6†´É;ì~<‡Å/—ä@ô² ‘&ˆ|/ì)épüJ‹D«f—fXÐBKW\3Ï_Õ©üjW6Ç+øaš{è4t-„E}ÎŒºª3*ñ=2h¡¡»¨§Lå­bÀJ¡:+=:¥^³Ðð¢å[^¿ûË7S«˜¡º;&ËÞÕ÷ÕUÚWhºCFú vš/ƒÍæyFú’½XÁ‹ƒÁhE~O¯Ct5¢hæu#x¨" ëÄ«ɇ£% ÷9œÜj9ÌÄe0hp»xÕÔ•¥hÈÿ8d5ï1~‚!%%:*šÌÛ`ž‚‡LˆË —ДC²úȀحSÕ?³ôÁ+Y€“+9\4ѱF3kâ|s Ѓ>½¾|¾¬‰'²ØÓ®AUNpJwÂØ 0§”âGªtÕñ€»q,šôáéuXk¥‚š ¯f 1 Ìôª½¾‚j_ãrôËM×(YõZí‹W F„ß:›4¥_{f ÙŒ@Q6 WÌjC‡žìoÅ¿KO÷ûÛõwjijS -C=}•l¥M¯ÃúÈUÆ]U˜ŽµPå ÂÿÒô_P\[N§ÿ‡6m0=<‚ª;œ(\]§ã_¥W厯êÔ/½þå7ÓD1pªjÄ%¿¤;ln\AuÂUÄÛDŠœ¬ â"PËrXÇ´eÂoiMü¡‰dÞÔ1-šÛTA‚‘0*ý„E‹LH OíÓ×µ iØŸ\IZèŽB¡ÎíAÈÕTHNÊ(öÒI¶"öE—i/‡xÇO‰ÕP§¸ù&š€êSéd(t Õ©õó9k¯zÉ"ý³¯úC)õ¼ë'S*`2÷uœ²)×O)ÖÜÚîE\„¢³P?•YæZh+ºŒ6b{è?,O·—„DxVòâŠÑß¹áç©0×'žUÉúêŠ_=?ó®Â ÖŸèSφ#txV¥fcùàø™]ø›ÀX =«øÂ’ÓÑÉgÚ"pê·ðîsÑê>õì[='5 nЧž «›Ÿq'a²³ÏvŸÙôZÑÒ)xÆgÞ bßYÉEmÕDÕ° Ä„ˆµ XÔš ]=_âžžÐMÓ$ _Z£êŽ4¯†8ÐȦV½tyT/ËnŠJ¿q±ø¼ô‹ª‘‹M«ôSŒ¶ô‹l€…‹Ë’ïSUh^(-Ä•(D‘ îz,ÃÐÂ_ÕKGM-‹Wµ!LšnbZ7¥©£XѤiY®“‡àfÒå°½"µiÔ:Bö!»²d÷ó×¥ ºôZëžÂ5UÄÈ’~j¹v'tlÝkÝM«S?<™®º«ãZ˜(š ^ëÒS^ªÃd%lŒí°1eºôÙ˜–æø‡¡ts&­’—èÌ\Â'¹¤ùÂÒX š ³Z G‹Èa5ó:9Åœ¦°-–·YšR0GÇs]9pލš˜JËwSëfèÎÑ›:wüEÑë‘`Å µ ­MdW©ã!$dïJ_vôÜO`BåC}âö’† |ì-ÒpSi©è(*`CXE]³²()+å¹Ùà"ÌÓi¢T¢D"¤S‡”ðÿ®Œ²€ Ré&‘Òtœ+”VéÃSé.GØM«S?¼4ý?K¨Æp:»ÊJψ:«™åÝ— ûŸÅý˜§ßt$>yJ½ùµI¼ýêèàqâMסÄé¾'¯Ó=‡O(ŸøM-Ö¢þ+#ú˜D.²Ó³oH×ç„Û ëTï GU-Eê¥xÄ·È¢vôJÓYŽøÌð†fX|SÑS'‚Ù·L" ½©‰Õ³U\^É&R·:~7—5úùoT\IëÄv÷ô›À³D@ýW½ÐÏ|Óß•¥óÜS»Æó¶Ž¶ &„—íF2AïŠÌ1¢Õ/Y¸,“êÝ‹.ÅAGed™üq)|oêówô lJŠ“{M@<¦#¯IùÅxb®\=}“ å\wÆMRêÈÃä3Sê³3^·vÂd7¥€§¹‰ŽrÔ§uˆb_w.$ñHJ¿,?+¥ú/õ™Tr©ϪnÅ`žš'xÂÒ<›ì'ÏÓLvT|¢E]ºš/*v‹HeäPË ·Æ{Ó¹«þ‹ÓwwtOÐÝ¨Š·;1kŠrnÍ;½$*`ðs¡eá a¨i¢§T}á ìKRêåY†S@ú㔾‘ÖÆð7<Ñ«°‰§I¼8Vö•ÁÆÜI5/J©S?»³©x‘*žPlª¢SöZA“mPmbê=kkòâÄå๚Q“ ie@Yš/|wrW¸¦÷ÔþZ?=U|AcWó$äÃQAS‹¶¥Ó¤Þ_W€žÊSPMøÉ=I^›Z™6¶óöv—üoëf‰¯*}è^=O}ù —]ÏrIü)ŽBUÒ ËYqÔeÀF9…!™‡¨(:3Çï­@Û½lBàíó*>Xv´!@ZÂ>k,¨  Ú,!]4¬2ÿ Zª:êP%£H˜Ñ“ƒcIJPõ¦a/mÕ°È(æÈÓwþŽ2’AiFáŽÜR Ó1r| L¸Ç.ò^œû‹¥úòeºïgúdÑ"ÕFL ž¥”M{uXј—‘Tôx½T}"¥Îÿüü”ú20‘Ãq2¦ú] õsBà*>Ý©fSÅ„õL4zãýÉ?õœºâ–J¤3»òUcr• \ÿ®_pW/Í wÚ@ïJ{¼&‰.œÒX³ó>E4×Mͧž×V’ïŒ×©Bî2È|g•)—y´‚V*#Ê¶ð‡½ kaÝ¿›†—Æ"ë+bºŸ?¾?ã¸? P9¯1¸¨yDãŒQdék b-¬w´Î7UAªgî9è1ŽÄ­›kÞ%ø“Ì3±~[a¬MPY¾øIý<`´Œû—‚¡C·;?6ˆ „)ZõÔ“…×Ó7– ûUˆóS…©U ÁU-„÷ºì¤z„W5_LZeÖÛŸ‡V«§ið0 ¦î ¨ª£Ù42 M•0žUË|%3:»âÀSš£ÆÖ=ȱ䒉_¨‰a]Btä£ks¥R!hÊj˜óTL¶î œQU=Éô¬{N$V/‘‹‹)jcŽåäД &×Áyº­¯'êçP^ô˜«hØJÁþ@—BbÊk j_Õ•ÓÏ?@$º6ŒT¤”7UhÑ“WõüOÓks´‡X™’EíŠÏêÃÕøgbD5Â'½"Ã4AåW‹`“³ˆø•Ū‚ °Â¨¼¨h/¢p&âÙoMiÐZXá¢a ®4yyžÒ™’êùsòü”TÏŸ“秤zþœµ~iuÜÓèŽAÃ5a¿¥¸û@èhG¸xöþ»‹Ûû›3™ª_ûçÉôÂd9mßw5Åu®ÌmM±•å}UFBhêä®ú/º÷à[ŸÿîI@Ï¿Ÿ„‚J…F:o6lU§€þtúzŽHR+ºiS>ž”Ûx2Z¡zQ¨ë“WXn†¡¢8åŸczÙÂÿÓÉ?£é_†‡³çøR_C˜W8 qòÚ_ŒÙCFú>Õÿa5õ¬©6SÒ1Õp2°px"}rŒ|zÖYÑû{q€Ó>€¸H5à V‰€ÿešA¸Ú€>Ìùƒ“¹ŠQZ¾èOu„ йĴÃ2®Ò¨vÍÕÖѱa­÷âsï=@}sÓgzéÝÏ M]¦ÕëÜ *bH§oKè!ŠpÈKtš¦Î<ÂNñ4M9ËKž‡Oqúâ1ßFއPVµ/½€?fþÔ©´“ÌH€B˜‚8OϾòó+/•Ÿ7Fö>R韔V=ïC>ã&î®ð)ë;ÒàÁæpz{ÝĘ‹è”ã´:#ó/=xÉEì¬-üÒþt†ÎŸÏ,)hP­ q°¹ýtz‹ŸaT7Œ»ZÃÝ¢[­ ç<Øì¼¨c5BHÖÆuÃE¢gQŽÀpKVØ88‘âÉai`¾Nâ‘-pª18‘o^3¼æx¥hŸx@‹¡ÞÁkÆAê Æ'· Ãó³ÃŽÂ¡=©ÚˆZ¸©Gá!¹röüñŸç¿²Êj>;ʒÈÏòW Ë¡ÂyBÈtús×ù‘Ñü¸ç€ñm‚µÃ‹7 6%Û“‘ºC„ÜÜêºÄƒ3Aã¡áŠÓÿà<8Twæ­»U(zgö¥ÿÅóû @a55~ÎOJŠ=sŠî4ÃwÃ\¥’„åMY™íÞsfvsÓ½Ë9 r—s8Œç Aºˆ­ÎDÐêÝsÞV&÷JN/e—?S§C5Ë£M71æŠlekd#6©Cu'°qçnY±¼aÍôïurWýϹ÷bA*)Ù•ÝqM 7ÛEKV«L¿.J¶€5ÒXÓ5O®^³p5|ÕñŠ:#ŠÖM [Jw?â«¡¶ô€òUqiE¬‹•Ý‹%SÆJöp–1޳!Œ W5ÐÃ×~•ÎV[u>Õ/¹²AAÕV¨• qÎý™ê¹J´™/ôÌIÓ ¬3ÒáæµË8jÿÏÜ´Ó¥Ÿj êñå…#¨^š¡‹„r5¥Š8jx]à‰‰çàòVå #ø›×®HΈ)ʼn‘tª¡5‘(îP ¶7d½,/9¥TLÆ”¿–§S^‚ÕÇ)%ISggRºÉS®LRêè¥%ÊnÌLãà¨hÇ:$"cbÒ+Yœä°8¬IsÝ#4 ïA&gþF4*¼ A6  ‡¢„€üÜ{Ô/AJ–šHÍÒÃ>‰ 4M<¯<+XO=ûñÚ|éd³‡ç–#ó÷<Üi Q™¦%ãø~z™º+ý /dbL‡Š—. ,õë2gÂb„¸ÈRh„ˆ˜/½ÿ—rÌvâ.5®v®å &-ê9ÿY¦:1* ‰*{â4|‚¶e·IS/¥„;òÛš39s9+!e·s™ÜyáKî¥a•pÆN“˜HùàÝÔe÷ö¦C­N ¹Ä¡I»Ú º^h—l´Æ NÅ<õ26ìe\JÎõå)sª×]-¬i‚i·§å» ,mÍfe# [j¡c4øNXÔšî†54ñtz&;‹g‰âoP*‘JôPòïÊÿÃ3hñ@Kú©7¨žšf>?ïô$—NZ.£ìÕ¢Âùšx “Æó AX•ÓãòεÀ1¶:¯ÑgÂiŠƒ ¡Î'¼ƒàç8ÒŒú"°ÇeÜ{Ž E¶ÂÁ 4%m´åƒÚ’ìÁ×U\Ö’ù!zdìôt9>ê4’kŸLâÞUvÜìJH¤bD×èõU¦A\É1†ž´OêhKßg>©/“ÖMéUÕÝØ4"íô“2ǤS]Ùñ›ÓÉ`ôžøÈ‚:†žŠÃ‘†aç=§‡;›ä|6ÚµÙ$Û¸MÓ sec¥Îîrë§»ºòŽ.œºŽñº›&‰,5ô$Ž—¶ó$qžâ¹eê£yîÉ <©ıóã¹'ánˆHÈ“ê>=%Þ¤îô“ÒÇS›<¥]|þ©âR±Œæ¹å÷jjKá™Â§žÂ‚SOêÌÍé'‰qŸT26]ç©IŸlúdX7¬’øK)ú=!׋×Å4Aãª3ñEÓ9Ú'lÒmÈU8˜"ÅïD¥ÓÙžëγmš@¾ªNÌ·ø\>ûY½4ÃpÝõ«ÜoR¯ÉÝ.QÝNÂû並K•ÒŸIÒq«:4ºéÑ®Q²¨|*_þ¬Î~P=ÿYÉ‹¼÷AÝÃø:íôþsÃ' …QjJ[é8Ò¸«Ug?T:Žö fŠòS¥~]fÁä&¡wÏ=…u5FfIN›“µÓUé ŸªÄúÀ“-]­•M(ñ''V©J×­€^†6¡Å§šÏ¿°6 ¿Ô$'N¹þj؉¦” äkÑ ó ½ÐŽ¡ÍÈ$ó@"q¥Õé‘ư¿ OŠNWŒplmÒ(¥•î>¹>o'¼í‰m’`¦óá¸*m³„ÍF&-»Ï˜ÈÔi›]•ö¤«’¾ 1ª]‚h̼œ{²Îãñ5¡1š˜bÍx*‹¸_§AÙd_\<ÜHA›5†iu!¤ÑI Î”èÀàÄØHØR©D(Ä„ “ñ`©xdê¸ç|ʆ̜C Ü{(<\éÂAʲcŒ.ÙÏl²’,_ɤNâ<Êa4¾Ë…cú*®%Ñ<%§ãùN[%r¾«žxó÷( ‰›lΨåØ3>>¾Íð>qŒôŒªSÚÀµö}ríûdòz:•3íâΩ8;©gÄžA–ç¤Ô—dNSJ71|.c$N¥kB‘šàÂQóv«N¢ñ[YÌê$¢ §— ¥š“)uþçS©ãBTú2Ö+¦LäÂDäàÍr®»ÆÅ {d*›zk#Ëþ•6ó$ÇdµFªúëG÷H+ŽóìmLçqAÙcÊ61R Äqä—SºL‹ÀÞ¤ÂÆÐÖ®ãÔQ¤yŽ®tzº˜ ' 4Á°W‡®Žø“j áåDpŠs[èv•PS<û€vX5¼Í¾ ‡Ê¡¡žUÎ$²Ü¥1ÊýwuüCGÖHî/ôy÷¿$ '§n÷îæÚã|}e ïW &ÊjBÁˆyo¼ðŒed>uÃÑ;™°Œ UË¡N5M]ðZèš" cbãîymô”Â*âq"Ň8Ð¥©â¹H6hdü£\*éê8­t÷HéÏNÿ·” ÉÉt6eN¥f{'® âmFÇôâ`Ó¹°õœø@Ç~[ßk¾W½³a¦•é~×Ϻ«/p( BžÞÍ5¯.™DÿÀ#¨9’G%”îì 6¼-W7"ï Ü+wyа1†{Æë”®Ê²hšžºÈcÅ›ò8²‹w±©&eð£njñgÇ$,Xi €N;ZSß0–˜“Öv3Wÿ~øv·]o—>}Õ.W›ïÛÃãƒhÚÙáq×~}ñ«ïÚývýxXm7~ÏVê·í¿]¯n7Áûíì¡Ý}¿úɽn‡v'ÀŽ¿CÁò«¢g)úÛÙÒg0F™ }q³}¸0“òâÒúbvѬFÿVßÏn÷ãÌ]ÜŒ¾kí®ÝܶãŨšíæã<›ªËivñ颹½-¶»±±þÃÇÛQ»ÛûVŒïF™~5ù›·ã±¾ÈJør9úþ0ÛV›å8³êfDè “è·ãûÑ–µÉ·a,ùjÜŽÞ=îîÁÿôéaüèß©Ñê°÷?mf÷í×ã÷Íbô±¸S›Â½íÚÙÜç_mÆËÑÌ7å­6ù¶þU;_¾ò÷}ëßšÕºÅRo ¤õÖúᕇjµ£Æüs;oF?5'×*vÿ¸ÇZnæc3¹|±#ß]ËÑêv»Y->ù;_{¨ÆãfNMö½f ç¡=ÕåOuÂPÛ«ÃØOÁ ÙÝÏ6Ði¾-ëOãÜ%gþ8ÎŒÿ¸º¼õP&NSå±uþEQàдÔ7Æ·ʘùösç,¡»¶ÐA .0Ÿê#Ø‹±ç¯ ƒÚÏ|ÄË#€7³[ÿã{ŸB¨óÕþý8w¥ê…ú¹Âqg&@sÚŽfëõx¡¼®ßjQGõZmöíÎ÷]vq¹|÷#Žáu?~7Ú.üXÌ6ÛÄÁ8Ü­öþ—›Gÿ›õ©¢_à ”:ïÚ‡õÌO}Ì»ˆP?¬w²¯”¼^Œ>ù²¶>ádíGÒèß̰ ãi§8ô£/pj¸À»Õú'ÖñŽªøNèx»‚ÂÚùø](ÖÓ£!ý3H[CøòOQÓïFÿЮüh“MyvÝq‘ø‹Ÿ>Ÿö‡öúmO«û‡uûÊ#õoã´m–u7^"rø ²ð4dM“Œ;åGŒ]{ qÿÊ?ýãKu¾Té$¤³ï@ß¼³Û.+˜M£G?Ú0r±”r³ F$ 'Ð/@Ò Éáñ°Ý­fëñüô JÍrO¡F?<ú™·¤fú¾^mæT߉ ÝH̦2ýo=É_û®Q¡k’<~:cžý`ˆÏg &§³‡Ýª»Ý=6~VŒöw”ç֣콟æóýx>ºŸ`ÝÁ @ó}Ovð`´üævÂXÎ|n¼@Ã!ƒŽ^Žìg$‹K?3ý,ûä§Öh÷¸Ù­+9à-, œ·¾¥+¤’cS((oAN&ýÜ È=1œ{Ù¨‹î·¼½L‘ôgŸßZf}™ 0ÈÀ Z@–£z·ó#ùίW·[ Íþ¯Ý}‚O\–˜AE·@˜Ö=À’„Sm‘ ÊèÁοj?¶·ˆúKéþ±›­Z"l— ½Ý •Ú%´oVšÑz»º‚ ‡0† s»›íï|oäÔÈod2ÜÛÝåÂm@Ç2³ç rèñz·½šæ1äa×þ¸Ú>”äuCù…nKõ¥9U¢|á[Y:.ôpØd¼Rl<ìÇ b”)ßy¾-€œ³Í²ç=P­Çñä…UÞÿ?\­3+dsïg Ó!S e+¢e°ä/•Ï¿òÜŸ¨mŸ–39joÎáòæqá9èé ¥Íw³8#–³Ý猠 ­[1ø¿ã>)fþqã?¸÷_lF_ ,çûv¶»õ/î€ë1¥|ë;Ä/¾ý¡±·<#U؉‡µ*Ëì@ ç´f†l:Üa6)i×.׳µ¥ýèG}ÏÜX˜ça­ý†Jµ6dgŽ{_Àµƒ°”fuX:¾¡ºäÚHÖž~Sýú-’Šøu‰–°„1€±i?ÂÜYÏ€/LáÜE8E!pi³‰Ô%rM+µ-ŽZ GåeFÙ¿«‹Ù¥„óØ§ˆŠ·À‡z~aákã'ô‚Ñ}7»…º);åQ½®ÿàRH}ÖíãnGéŒÏÄÚ”¾d…ð¿ƒa)#¾´<‹îš-gžcYÀTY äl†|ó]Ûí¶~×®áYÆõöÕX!ÛKîE总`¢+.ò@ûÃjÝé=ßý_ù‘àj/ j·3/2¬÷¾ÛÍ]dvâúœžÑîo»ñÜA‘ûKœ‘sß—~qôHUoœM ©ó‘™NKŸ¥ñìüyôï·‹ƒž]‹?)ÏêûÑÂõâ+`6·À||‹h}¿B Áãq+³êÕøýèÇì•ö¤†¥O<{Jjêyã™vŦì"S™ž@lÒ 4• 4-GßlD./…¯¦ñ]áÊ‚kŒË;Xí„]Œn'úx¶ç¦K4 Ä’*ÖÁ»ÉÔ rÜŒ³ŠYó iØùpZ¦ ~è‹ü?ôøÿ ph½Ú´ãb÷Uá´2oÉÒšoçY€¸¤F –nˆ_diÇKA^¨Éljf$²?¥Q<á™’{®¨0¡š³PÍ Ï'J³ånöà'Ëûçðí ì¾õ‹Q‰9¯ ðMÐØSüâÐa6Пã¢Ô‘Æùó¨qƒi`I­À,O¨6|2K>‡ªçYõû.áÖ‘‘’îk©ûî¸ûüª%üÛÐÈ×uZö˜N‚¼ ¢¹’µlbéÁa’»Ù½Yó¢²1ët ëºõóÑÙ¬·Þÿ-šCEùüÉŸÓyoX|«T1TF‡h2Îa•oƒÎE¹¹T\e6ÐÌG‘nÖ(Nh!ÿ'OÊV>/2yÀà­F×~ÝA®O«©)§òOå÷@óiñœy;-Šy‹«Û[Ïüú2[Yˆ4`˜3%¯õ°˜Èœ™£tf&'ç5~œM`}\ðÇØgXý·„|  ÀÕl?òÅåRÜ7—Zzëý¸,8á!x”Î\í ðPÌö g+&Csê›ËK‘eáÃ<»$SBi°“MF‚¿çJpžM§R$ «YÉßzù Ç('†DD„³!³—i)æ·G…ùk·}ô8º¢yä{ÉÏÎ[BÁÛ–zÍ ³+ý`ŽALd€?a\È/}Êòò'd”ßÓb º;b$– &ðU£Š¶€B`¢¼Û±nó¶ò(’YŒmÊŠ0¶mâ2šßÌvïÛ½0åDPl™ïº÷?úéä™?Ì“À›ü=71eA¾ÿ¶"i+¶+ÊÈú¢`K T¶æ!üÜk¬>"¬rª†ê}ë{v3ò"¯#¼ài°ß’ÜÅœâBž•Òô¿ÇõÆòp 4Á¬t=™ÊXÞ¡ÌUkÊÔUýô\õND§“5+4í ðãdQIøl”.´-{5 åÇéò™Ãª2™d½’|2aIæÿ<‚˜¼òr3!•—r² ÓÞSUOªVȤ¬ÃÄ¢Iip ùÁ|x6 ‹Å[OpÉÖ ðqjŠ</–‰x±gYÈ̵ýêwÉú»ïôíè#J –„ï»Ñÿõ\ál½šc× ‰¨¶ñ,â´ã¶ È7˜•€Š;lvž­éddQw\,Rç%”ƒPmŒ”Áf¼2à èÏ‹O(ÒLÍi­ Bö¹ç† ݘ°‡¶dìú %©ßþýê©8ð±+œúÛG˜]TŠE¹ŽòÔN%µ#Ai°v aûW÷^¢ ˆ¨|¯ÚÂP“ÿ …©˜P4”`¢r™û’ óSÆú'„5Õ¼â¢ÔÆjîØM„©¿¯PJÉ5“á°^¢yÜí qYÅøñƒâ¹tËCŒ+¡/VÜ"å(Ѻ©U¬ÐDÉB剌-S“E§Ô;*5`5¬V=ñ"ë‰öÂ*ë…Œ#ñâq}X=¬ÛqRÂïQ›¸}þ²,‰¯ uäñó¢+´ƒöqï™9ÝãÑ ÀŠ’Â` MT—Q Çy5®¾¼j<¬yÌ’,,iЬÈ@òÎau‹ª7[d=î!žñe0Õèn»[ý´eÑÀš>[i±ªù±†vËBpÒÎ|)î¸I>?ÇX7Ya¬·QѾ9eu_êØ±±…¨d=Ñ|O$1fZ€ªv•G9ˆ{œr\âÇPÈaÞj¹cín·³–Ø!¸低þŠ;“ó5ÙÌv ¥Ô¼èCù3@y²Vs¬CŸU9-B¢ò +Ø’F»×µ úÖÙ^ßæ(EPÄç+A³È¶'úDµU v•ŽXüju¹©IìN`܃ÞJ­E‹€`¿cµ|p’£Á 8°Ë]¢úd ïÔ¦f.¨ì¥.†½{ܲ^{î`~¦šG3@ÍQ¨æa¶ìºë4Ù¨cX`CuÄë,GÍø– Tð“¸uQ:­˜ñ˜³œw$÷ÁÚ€bÌœìÏb;˜·lpeK(ÐrÑOþöÍ`™¾€žH­: ’ NNìí[”ê¦êPdöO€´¶ˆÙH´›Õ3J3 ûžƒRMõù`Ö÷ÀHMûHL`´h[Ä$JêÕ,NÏİ”Yƈñw‹ÒœhHVyPÐÞ“¾ñ¼Kë—Àæ‚lºÊc[šã%èf R 9èg;PñU·†ÖNŽØð- ‘ ó|ŠbVŒm°w©mä-½ó<ínù«OPñb„%ý‰šÕ¤ÕöÃØ`ïØ°*ÛB]U¨lVX!éˆB^ødÄ|x<ˆöÞ³ÜhÞbeÀÃX-º-ÏKƘ ¾@GÖDö¢pSL‚äûI•}™óµŒKã"ï+uÐŒ—Oû}_BÞ Xž‰ž»ÛOpÿØ3 ªÎyx…2iÉZ™j¶~±"é$SQž<>ËÃílÏ&Ç 1¡'qÅ6œeW/Ê5Ise!×s‰¦âvö°ò çê'V˜Ä A‡¶Ð2sƒ5‹ˆ|ßtÿHf5wª†1w¡s¯Éfæ†kÊaQœFñC£@ë…úêLgÜí¿E“ð7žáË$œ¡‹žµ?ØëIOIFc\¤–~bà:ÑΣæ3ú{Ÿ~…B(hÊÁ´ú€3ÉS˜â÷Ü#¡¿!“ø~uã—EeEÑE-Ë‚>\à`/<>ˆFSHÆ/ϧQZƒìbaéf'õY€½Äa˜°qÈŠ×EÇ¢žVs)ðP¬Í3žt‡¹¥ÈExÉÔNv×é)/…­6@¬ ˜G†23†µUb*ë€j”²&ëËòè·²„e 10š‹–}õ¦—WE?¶y)á°Ý}"%EÙibú@Uh¢m¼»/ÓA§¶Dœè™ÒØ4ŸèÞÉv–±X”xŸ˜>Ã"ä¯Ô#wÑl|ÇÒÒYÒ–ì6Á;)úÖ¿ö¿¾Ç“9–í³á[ϵuñþΣ¶;‰nÃ$zÇ“ÈçE–/L¦WAÔíÈÑéð.B…줋+AŒEìÀn;‘ÜûfôdUÛ“Uó‹\å^b}¡¡V—û]qöl€ê Q¢Š -Û_;nR»ÔÚ#OaT÷Þ„ýe`nˆ„÷u¿à5 ,¦}^ö=úZ&šÄÇîf›ýÃxç ñ²¹vÄgè DÙ7Lmûñ$j¾wrÑ¿ f šÎI4œC®‰éÁ\Ä?æXÓŠy'çò#»¿ƒÈ°A&Äqtí„v·ë5jÿè] Žï‘Ý7‰Õ£eýœ‘”«žq™òùïÁ¶“@þÚ—ZÚA€ƒ B‘ÿ§’ÒDqáÛ?x—ü»GÉ—Ô>j`äÉʬ'¿sâŽâ9r]t0i¶Ü“©E÷„.ô¯Z¢àz,ðbê°‚e 8‘¿"» T©àƾ]srí·;7A!Ã63†–IÄOkÁêઠIÕ°ÜGŸ'ezøÇÕ~u¸„ÏüJ€ëžX'Ð`OcœÐ•—Ë#P&’.. ËAHwD#\*÷µË`ÓÙ gº7 õz.ýbxÀWõçÆºÀRJÀõ‘y'±õPÅSŒíôÝ™IPÿ|EL·Ì¹;Dˆ'àÄbV‚ïÔ¾ßEÒ½Ëþ êYˆ‹Kèô%Ä\qm›C§¬XƒË3#+‚ñïÈ5‹“ öj`»ö7^ÛÉ÷šë¥B™É.úGpƒ/ˆ¼$€4Á-[áp%j&ò+üõWcýnâpQd»ÑÓa ®‚/`7´™ºbЄÈß7Iª‚=jæò¾ÞrÇšÏPý%Â) 7ï=æs“¾°›ÕeEƒÉ8ë– ½ÚRéÝjŠel² Fø¬ì/ ;´xd©‰â(Cƒ‘á.©XnûNw·kÙ—ñ 0+Iƒœˆã)¢bP°džøµfyÖ›ØôC ßsònÒc TÚy,ò·£{Ï9ù*ë°zÞ<ÛAÖ|Z(œ_onn<“µ'ë ëcfs¦ Ëõö}gøUt@ ½´yIF›~fQ­‘§`ò²³&ÍÉ:xŠé×ìNRpfFÖý´lâx“€]ùž&6¹[C5XÃXˆxLcK)ÃäS5\Æš¬:S1 ?¬W·+ÐmÐ^€;uÍx4€ƒÃë„ûç<]™) x cú´™Ý³Ê)‹KЯûülÞãg'5ñ\mßöòÛ*Ñu¼NÌ•àì5!!ý_¹UÀ"Åè¸z I¼}@¹ÂSUѹe#Ï+?Ø‹w4ßp÷Ì%ø[Œ~jw[š,è—|²môïó¬ ¬|¿ÎT(Á†—tÂÂL‹N¦œé¿N‡í½¢HvŽž„à5€ªÀ¿Ãõ”3¥mï4ùPè9¯ 'Ê—ù‡1™ýf£¯Ç $|í‹ùm[ðë‘N÷¡«#èà,3GÝ8ËeP†›üþ„×Q!&’I:®WD㢽š@´PJµZÁAdþðC§yþ +ìeüÃãVvf Mcæi¶®Ò‚ èMâù/ÆØ·oaùÜÛ’¡Í`yÝÌØ Oö­ÿt»û…ǘIi$ ̄Ǚ f™ÇhšsðÛ·oGg»Ç˜SÁžmïÉN„!Ž]¿®À5O¤Ôšø&”’ûÿC>ic·k£ &Èóöí/ÁÀÑwm¤Í/»vö>úe¼}{¢Šˆx€0ôYZµEp´fs‘‹e““"{-»à–I¶‰³’íoQʆTŠåD*û%œìxZñ·—ûOdâüا.yjú!•\R ›íæòI@ÊÚ©Tç÷`áè\¿5v5Š –ŒÁb”zûvQxZ>bG8Êk§¡FßGx^@b¦ï˜'Û㆑ƒ{ÛÆ"7Š:ÉÀÇMôd€©¢Í‰"§¶’qÙßzàWÙ/Ö¦`>ÀZ­H±´xô« »WfëGt^ˆ”5þ ’|B5ì ?)ÆÙêðîñþýÚÀ7¼ PŠW£6l’Œðs=Pÿw$L‰“þÇÍbK²ˆòÄ ÚŒµ`ò\Å£¸áÓæ#…ÆNè­hl¸‹ÛêLáw¾A“S '€8+Ù¼´!¾åkp$4ÄÌßQ5¢Ì…>ÂOËž-qÝa;D!Û1Á…&‡£ ÄYb „ŠŒ'ÂÃÒ®zK»™¢v$tIÀ…u%Ðö_cÙSÙ‹ƒb|KDŠ+„ÕÙ@³¼Â_&‰3ÁÅ ”A¥g×2OëM}įìÙIõu4ª h†}M Þí´R¸Kwl¥À{áŽAt—šE€¸PR6Pù^†÷`,À>Ãm›#óç ˜ì&ï2/x0Aû Ê(»í~?~ï‡Z”+b×w p ¢ÌïÈ%wñ‰Ã$g"l,G1?ö´GpÞ¸¸¤ÙöT´j lv íÍ…8t#ÌE“7§ÜnÈ-Ÿiÿ"äºãÎò ã  $‹_係ΧQ6×½èB€s¸»Ur"âÅeå%+b%Ó2î`œˆ¢þï0G¡y“.n²5Û×Qì%ubÇq: CÛ ·±ìé/ ë%öÑû›ùå=ê(v[’Žý'þyå¹úÞx°í3ò™é)1‚€ÐíD,à2YîF×ílMøÄ‰7d­¨Xˆ Ò5ñ <Æì² Õb‹ºiYûúv ìè‡ñèòfGA«Â¼]<Â>_-ภ|ý`…‚E¼ìuEûã,Q»ƒ…'úõއ3¸@£ºÒ¾Or]ór€TŒBälè]†‚zµl A“¯©ÓÀeGßÊnø'ŒjYÞŸ›ÑîèNÜSµ¢÷øŠCB d¥î5}½Íy³ðE©ƒx ]Á  Y›9MѰ9.3fÒ·Y Ôõêf7Ã-ÕS’š—£ïq‡?Øõ÷‡íýê§ï3Ú²ùë`ë)nQ±ßÞ·¸·zY÷$py]mæ$бbk,¢jE©Ä¼€. ëEÛ[eºôâÿåûÖ·6¿üá-0èÏ҈㉡_ÿèáür¹=l/A`'> ¸…OÇ0ZÕ…ð!Ä7¾‚oÇô¯~ Z^F^€"H>Þ·Xþç=áÞÎpdU³ ~AÜáÈgîCd†ºÕzdñKò ~@–.ê³%öÙ×Drµô™ÏýPg·ï.o>]Þn>¡X°¼üà™v/l §ÀîÕ¢‘žº,/Ødõ{6~®(´ nàÊåÀ1G¸Ã H t›}t‰:ˆ„;riÛ÷0óÀª•{œâF¿ ÐõE–öýô!8äyP«l\ðè»ð8¯Göðà< ÞtãþÛ×ÍÿÍ?TUžÍ€ÏµçŒ&ž±æ¼^tY¬>^nüXïV·—?ëLr1e¥h] ½”Ј¿[Š” ˜ëÅ^¤´ºs`Zp{GblHÍ›D‘î‚#50Õµ‚ŒƒàÆ Ž iI{Z> ÷›ÃFž–öOƒbZqÁUµ»ÁæÞK‹0#:n+. ÅïÁýΗ S«‹åYÑõ½¬-U–“Rcî'*Ú¹‚ (÷}ža¬!T¹àC‘ìÃö¢ïÞ‡}Øïúû°[üéx¶}ÑàG Œúj <ç"ˆrßÚè±åè7«õ¼¾¾yØ­@rçq“¶€Ä³¤4^Öæ–YþßüËïâ:Ù Fe¦´éûnô»Íê#† ÀEÏCñ›MÀn4úô´¯t;RÄ¿ õD3´«½Ù=Âè)«¯ÖâS` Þ®ZÞß“ïGV€´»ñ|Œ˜æ—·]ˆ”Ñ*¨ûÙ{Þ-Bápæ+@Åà-V`\µ{ò1V—[bÐvèÿãjŽzR³°ùò’Ü a„Qÿ¹ºmyßÊJÀ¡{j¬éR>[°/<Úöé\ÈÙÈ©vH=è iôI7†õ敊&ŒQÆè;âq¶þ ÜB1|Q«âv¡»€d‹>’-ûH¶B$û «óbC±¿Z\/W£oiG×è°í‘Üt­Õàç{µõ¼ËPî›7À]ÃakæÒXí Øï¾óª/=Azüínæy­Æzƒ CsˆÚökÿty·Ý¾¿x¿Ù~ØüYÿcµ€8lÿÚ¨ÿ^>î±Ø,xemacs-21.4.22/etc/refcard.tex0000644000175000017500000004744406516233124014162 0ustar acsacs% Reference Card for XEmacs on Unix systems % Time-stamp: <95/02/18 Ben Wing> %**start of header \newcount\columnsperpage % This file can be printed with 1, 2, or 3 columns per page (see below). % Specify how many you want here. Nothing else needs to be changed. \columnsperpage=1 % Copyright (c) 1987, 1993, 1995 Free Software Foundation, Inc. % This file is part of XEmacs. % XEmacs is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 1, or (at your option) % any later version. % XEmacs is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % You should have received a copy of the GNU General Public License % along with XEmacs; see the file COPYING. If not, write to % the Free Software Foundation, 675 Mass Ave, Cambridge MA 02139, USA. % This file is intended to be processed by plain TeX (TeX82). % % The final reference card has six columns, three on each side. % This file can be used to produce it in any of three ways: % 1 column per page % produces six separate pages, each of which needs to be reduced to 80%. % This gives the best resolution. % 2 columns per page % produces three already-reduced pages. % You will still need to cut and paste. % 3 columns per page % produces two pages which must be printed sideways to make a % ready-to-use 8.5 x 11 inch reference card. % For this you need a dvi device driver that can print sideways. % Which mode to use is controlled by setting \columnsperpage above. % % Author: % Stephen Gildea % Internet: gildea@mit.edu % % Thanks to Paul Rubin, Bob Chassell, Len Tower, and Richard Mlynarik % for their many good ideas. % If there were room, it would be nice to see a section on Dired. \def\versionnumber{2.0 XEmacs} \def\year{1998} \def\version{April \year\ v\versionnumber} \def\shortcopyrightnotice{\vskip 1ex plus 2 fill \centerline{\small \copyright\ \year\ Free Software Foundation, Inc. Permissions on back. v\versionnumber}} \def\copyrightnotice{ \vskip 1ex plus 2 fill\begingroup\small \centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.} \centerline{designed by Stephen Gildea, \version} \centerline{for GNU Emacs version 19 on Unix systems} \centerline{Updated for XEmacs in February 1995 by Ben Wing} Permission is granted to make and distribute copies of this card provided the copyright notice and this permission notice are preserved on all copies. For copies of the GNU Emacs manual, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. \endgroup} % make \bye not \outer so that the \def\bye in the \else clause below % can be scanned without complaint. \def\bye{\par\vfill\supereject\end} \newdimen\intercolumnskip %horizontal space between columns \newbox\columna %boxes to hold columns already built \newbox\columnb \def\ncolumns{\the\columnsperpage} \message{[\ncolumns\space column\if 1\ncolumns\else s\fi\space per page]} \def\scaledmag#1{ scaled \magstep #1} % This multi-way format was designed by Stephen Gildea October 1986. % Note that the 1-column format is fontfamily-independent. \if 1\ncolumns %one-column format uses normal size \hsize 4in \vsize 10in \voffset -.7in \font\titlefont=\fontname\tenbf \scaledmag3 \font\headingfont=\fontname\tenbf \scaledmag2 \font\smallfont=\fontname\sevenrm \font\smallsy=\fontname\sevensy \footline{\hss\folio} \def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}} \else %2 or 3 columns uses prereduced size \hsize 3.2in \vsize 7.95in \hoffset -.75in \voffset -.745in \font\titlefont=cmbx10 \scaledmag2 \font\headingfont=cmbx10 \scaledmag1 \font\smallfont=cmr6 \font\smallsy=cmsy6 \font\eightrm=cmr8 \font\eightbf=cmbx8 \font\eightit=cmti8 \font\eighttt=cmtt8 \font\eightmi=cmmi8 \font\eightsy=cmsy8 \textfont0=\eightrm \textfont1=\eightmi \textfont2=\eightsy \def\rm{\eightrm} \def\bf{\eightbf} \def\it{\eightit} \def\tt{\eighttt} \normalbaselineskip=.8\normalbaselineskip \normallineskip=.8\normallineskip \normallineskiplimit=.8\normallineskiplimit \normalbaselines\rm %make definitions take effect \if 2\ncolumns \let\maxcolumn=b \footline{\hss\rm\folio\hss} \def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}} \else \if 3\ncolumns \let\maxcolumn=c \nopagenumbers \else \errhelp{You must set \columnsperpage equal to 1, 2, or 3.} \errmessage{Illegal number of columns per page} \fi\fi \intercolumnskip=.46in \def\abc{a} \output={% %see The TeXbook page 257 % This next line is useful when designing the layout. %\immediate\write16{Column \folio\abc\space starts with \firstmark} \if \maxcolumn\abc \multicolumnformat \global\def\abc{a} \else\if a\abc \global\setbox\columna\columnbox \global\def\abc{b} %% in case we never use \columnb (two-column mode) \global\setbox\columnb\hbox to -\intercolumnskip{} \else \global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi} \def\multicolumnformat{\shipout\vbox{\makeheadline \hbox{\box\columna\hskip\intercolumnskip \box\columnb\hskip\intercolumnskip\columnbox} \makefootline}\advancepageno} \def\columnbox{\leftline{\pagebody}} \def\bye{\par\vfill\supereject \if a\abc \else\null\vfill\eject\fi \if a\abc \else\null\vfill\eject\fi \end} \fi % we won't be using math mode much, so redefine some of the characters % we might want to talk about \catcode`\^=12 \catcode`\_=12 \chardef\\=`\\ \chardef\{=`\{ \chardef\}=`\} \hyphenation{mini-buf-fer} \parindent 0pt \parskip 1ex plus .5ex minus .5ex \def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip} % newcolumn - force a new column. Use sparingly, probably only for % the first column of a page, which should have a title anyway. \outer\def\newcolumn{\vfill\eject} % title - page title. Argument is title text. \outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex} % section - new major section. Argument is section name. \outer\def\section#1{\par\filbreak \vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}% \vskip 2ex plus 1ex minus 1.5ex} \newdimen\keyindent % beginindentedkeys...endindentedkeys - key definitions will be % indented, but running text, typically used as headings to group % definitions, will not. \def\beginindentedkeys{\keyindent=1em} \def\endindentedkeys{\keyindent=0em} \endindentedkeys % paralign - begin paragraph containing an alignment. % If an \halign is entered while in vertical mode, a parskip is never % inserted. Using \paralign instead of \halign solves this problem. \def\paralign{\vskip\parskip\halign} % \<...> - surrounds a variable name in a code example \def\<#1>{{\it #1\/}} % kbd - argument is characters typed literally. Like the Texinfo command. \def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows % beginexample...endexample - surrounds literal text, such a code example. % typeset in a typewriter font with line breaks preserved \def\beginexample{\par\leavevmode\begingroup \obeylines\obeyspaces\parskip0pt\tt} {\obeyspaces\global\let =\ } \def\endexample{\endgroup} % key - definition of a key. % \key{description of key}{key-name} % prints the description left-justified, and the key-name in a \kbd % form near the right margin. \def\key#1#2{\leavevmode\hbox to \hsize{\vtop {\hsize=.75\hsize\rightskip=1em \hskip\keyindent\relax#1}\kbd{#2}\hfil}} \newbox\metaxbox \setbox\metaxbox\hbox{\kbd{M-x }} \newdimen\metaxwidth \metaxwidth=\wd\metaxbox % metax - definition of a M-x command. % \metax{description of command}{M-x command-name} % Tries to justify the beginning of the command name at the same place % as \key starts the key name. (The "M-x " sticks out to the left.) \def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize {\hskip\keyindent\relax#1\hfil}% \hskip -\metaxwidth minus 1fil \kbd{#2}\hfil}} % threecol - like "key" but with two key names. % for example, one for doing the action backward, and one for forward. \def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\hfil\quad &\kbd{#3}\hfil\quad\cr} %**end of header \title{XEmacs Reference Card} \centerline{(for version 21.0+)} \section{Starting Emacs} To enter XEmacs, just type its name: \kbd{xemacs} To read in a file to edit, see Files, below. \section{Leaving Emacs} \key{suspend Emacs (or iconify frame under X)}{C-z} \key{exit Emacs permanently}{C-x C-c} \section{Files} \key{{\bf read} a file into Emacs}{C-x C-f} \key{{\bf save} a file back to disk}{C-x C-s} \key{save {\bf all} files}{C-x s} \key{{\bf insert} contents of another file into this buffer}{C-x i} \key{replace this file with the file you really want}{C-x C-v} \key{write buffer to a specified file}{C-x C-w} \section{Getting Help} The Help system is simple. Type \kbd{C-h} and follow the directions. If you are a first-time user, type \kbd{C-h t} for a {\bf tutorial}. \key{quit Help window}{q} \key{scroll Help window}{space} \key{apropos: show commands matching a string}{C-h a} \key{show the function a key runs}{C-h c} \key{describe a function}{C-h f} \key{get mode-specific information}{C-h m} \section{Error Recovery} \key{{\bf abort} partially typed or executing command}{C-g} \metax{{\bf recover} a file lost by a system crash}{M-x recover-file} \metax{{\bf recover} files from a previous Emacs session}{M-x recover-session} \key{{\bf undo} an unwanted change}{C-x u {\rm or} C-_} \metax{restore a buffer to its original contents}{M-x revert-buffer} \key{redraw garbaged screen}{C-l} \section{Incremental Search} \key{search forward}{C-s} \key{search backward}{C-r} \key{regular expression search}{C-M-s} \key{reverse regular expression search}{C-M-r} \key{select previous search string}{M-p} \key{select next later search string}{M-n} \key{exit incremental search}{RET} \key{undo effect of last character}{DEL} \key{abort current search}{C-g} Use \kbd{C-s} or \kbd{C-r} again to repeat the search in either direction. If Emacs is still searching, \kbd{C-g} cancels only the part not done. \shortcopyrightnotice \section{Motion} \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr \threecol{{\bf entity to move over}}{{\bf backward}}{{\bf forward}} \threecol{character}{C-b}{C-f} \threecol{word}{M-b}{M-f} \threecol{line}{C-p}{C-n} \threecol{go to line beginning (or end)}{C-a}{C-e} \threecol{sentence}{M-a}{M-e} \threecol{paragraph}{M-\{}{M-\}} \threecol{page}{C-x [}{C-x ]} \threecol{sexp}{C-M-b}{C-M-f} \threecol{function}{C-M-a}{C-M-e} \threecol{go to buffer beginning (or end)}{M-<}{M->} } \key{scroll to next screen}{C-v} \key{scroll to previous screen}{M-v} \key{scroll left}{C-x <} \key{scroll right}{C-x >} \key{scroll current line to center of screen}{C-u C-l} \section{Killing and Deleting} \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr \threecol{{\bf entity to kill}}{{\bf backward}}{{\bf forward}} \threecol{character (delete, not kill)}{DEL}{C-d} \threecol{word}{M-DEL}{M-d} \threecol{line (to end of)}{M-0 C-k}{C-k} \threecol{sentence}{C-x DEL}{M-k} \threecol{sexp}{M-- C-M-k}{C-M-k} } \key{kill {\bf region}}{C-w} \key{copy region to kill ring}{M-w} \key{kill through next occurrence of {\it char}}{M-z {\it char}} \key{yank back last thing killed}{C-y} \key{replace last yank with previous kill}{M-y} \section{Marking} \key{set mark here}{C-@ {\rm or} C-SPC} \key{exchange point and mark}{C-x C-x} \key{set mark {\it arg\/} {\bf words} away}{M-@} \key{mark {\bf paragraph}}{M-h} \key{mark {\bf page}}{C-x C-p} \key{mark {\bf sexp}}{C-M-@} \key{mark {\bf function}}{C-M-h} \key{mark entire {\bf buffer}}{C-x h} \section{Query Replace} \key{interactively replace a text string}{M-\%} \metax{using regular expressions}{M-x query-replace-regexp} Valid responses in query-replace mode are \key{{\bf replace} this one, go on to next}{SPC {\rm or} y} \key{replace this one, don't move}{,} \key{{\bf skip} to next without replacing}{DEL {\rm or} n} \key{replace all remaining matches}{!} \key{{\bf back up} to the previous match}{^} \key{{\bf exit} query-replace}{ESC} \key{enter recursive edit (\kbd{C-M-c} to exit)}{C-r} \key{delete match and enter recursive edit}{C-w} \section{Multiple Windows} \key{delete all other windows}{C-x 1} \key{delete this window}{C-x 0} \key{split window in two vertically}{C-x 2} \key{split window in two horizontally}{C-x 3} \key{scroll other window}{C-M-v} \key{switch cursor to another window}{C-x o} \metax{shrink window shorter}{M-x shrink-window} \key{grow window taller}{C-x ^} \key{shrink window narrower}{C-x \{} \key{grow window wider}{C-x \}} \key{select buffer in other window}{C-x 4 b} \key{display buffer in other window}{C-x 4 C-o} \key{find file in other window}{C-x 4 f} \key{find file read-only in other window}{C-x 4 r} \key{run Dired in other window}{C-x 4 d} \key{find tag in other window}{C-x 4 .} \section{Formatting} \key{indent current {\bf line} (mode-dependent)}{TAB} \key{indent {\bf region} (mode-dependent)}{C-M-\\} \key{indent {\bf sexp} (mode-dependent)}{C-M-q} \key{indent region rigidly {\it arg\/} columns}{C-x TAB} \key{insert newline after point}{C-o} \key{move rest of line vertically down}{C-M-o} \key{delete blank lines around point}{C-x C-o} \key{join line with previous (with arg, next)}{M-^} \key{delete all white space around point}{M-\\} \key{put exactly one space at point}{M-SPC} \key{fill paragraph}{M-q} \key{set fill column}{C-x f} \key{set prefix each line starts with}{C-x .} \section{Case Change} \key{uppercase word}{M-u} \key{lowercase word}{M-l} \key{capitalize word}{M-c} \key{uppercase region}{C-x C-u} \key{lowercase region}{C-x C-l} \metax{capitalize region}{M-x capitalize-region} \section{The Minibuffer} The following keys are defined in the minibuffer. \key{complete as much as possible}{TAB} \key{complete up to one word}{SPC} \key{complete and execute}{RET} \key{show possible completions}{?} \key{fetch previous minibuffer input}{M-p} \key{fetch next later minibuffer input}{M-n} \key{regexp search backward through history}{M-r} \key{regexp search forward through history}{M-s} \key{abort command}{C-g} Type \kbd{C-x ESC ESC} to edit and repeat the last command that used the minibuffer. The following keys are then defined. \key{previous minibuffer command}{M-p} \key{next minibuffer command}{M-n} \newcolumn \title{XEmacs Reference Card} \section{Buffers} \key{select another buffer}{C-x b} \key{list all buffers}{C-x C-b} \key{kill a buffer}{C-x k} \section{Transposing} \key{transpose {\bf characters}}{C-t} \key{transpose {\bf words}}{M-t} \key{transpose {\bf lines}}{C-x C-t} \key{transpose {\bf sexps}}{C-M-t} \section{Spelling Check} \key{check spelling of current word}{M-\$} \metax{check spelling of all words in region}{M-x ispell-region} \metax{check spelling of entire buffer}{M-x ispell-buffer} \section{Tags} \key{find a tag (a definition)}{M-.} \key{find next occurrence of tag}{C-u M-.} \metax{specify a new tags file}{M-x visit-tags-table} \metax{regexp search on all files in tags table}{M-x tags-search} \metax{run query-replace on all the files}{M-x tags-query-replace} \key{continue last tags search or query-replace}{M-,} \section{Shells} \key{execute a shell command}{M-!} \key{run a shell command on the region}{M-|} \key{filter region through a shell command}{C-u M-|} \metax{start a shell in window \kbd{*shell*}}{M-x shell} \section{Rectangles} \key{copy rectangle to register}{C-x r r} \key{kill rectangle}{C-x r k} \key{yank rectangle}{C-x r y} \key{open rectangle, shifting text right}{C-x r o} \metax{blank out rectangle}{M-x clear-rectangle} \metax{prefix each line with a string}{M-x string-rectangle} \key{select rectangle with mouse}{M-button1} \section{Abbrevs} \key{add global abbrev}{C-x a g} \key{add mode-local abbrev}{C-x a l} \key{add global expansion for this abbrev}{C-x a i g} \key{add mode-local expansion for this abbrev}{C-x a i l} \key{explicitly expand abbrev}{C-x a e} \key{expand previous word dynamically}{M-/} \section{Regular Expressions} \key{any single character except a newline}{. {\rm(dot)}} \key{zero or more repeats}{*} \key{one or more repeats}{+} \key{zero or one repeat}{?} \key{any character in the set}{[ {\rm$\ldots$} ]} \key{any character not in the set}{[^ {\rm$\ldots$} ]} \key{beginning of line}{^} \key{end of line}{\$} \key{quote a special character {\it c\/}}{\\{\it c}} \key{alternative (``or'')}{\\|} \key{grouping}{\\( {\rm$\ldots$} \\)} \key{{\it n\/}th group}{\\{\it n}} \key{beginning of buffer}{\\`} \key{end of buffer}{\\'} \key{word break}{\\b} \key{not beginning or end of word}{\\B} \key{beginning of word}{\\<} \key{end of word}{\\>} \key{any word-syntax character}{\\w} \key{any non-word-syntax character}{\\W} \key{character with syntax {\it c}}{\\s{\it c}} \key{character with syntax not {\it c}}{\\S{\it c}} \section{Registers} \key{save region in register}{C-x r s} \key{insert register contents into buffer}{C-x r i} \key{save value of point in register}{C-x r SPC} \key{jump to point saved in register}{C-x r j} \section{Info} \key{enter the Info documentation reader}{C-h i} \beginindentedkeys Moving within a node: \key{scroll forward}{SPC} \key{scroll reverse}{DEL} \key{beginning of node}{. {\rm (dot)}} Moving between nodes: \key{{\bf next} node}{n} \key{{\bf previous} node}{p} \key{move {\bf up}}{u} \key{select menu item by name}{m} \key{select {\it n\/}th menu item by number (1--5)}{{\it n}} \key{follow cross reference (return with \kbd{l})}{f} \key{return to last node you saw}{l} \key{return to directory node}{d} \key{go to any node by name}{g} Other: \key{run Info {\bf tutorial}}{h} \key{list Info commands}{?} \key{{\bf quit} Info}{q} \key{search nodes for regexp}{s} \endindentedkeys \section{Keyboard Macros} \key{{\bf start} defining a keyboard macro}{C-x (} \key{{\bf end} keyboard macro definition}{C-x )} \key{{\bf execute} last-defined keyboard macro}{C-x e} \key{{\bf edit} keyboard macro}{C-x C-k} \key{append to last keyboard macro}{C-u C-x (} \metax{name last keyboard macro}{M-x name-last-kbd-macro} \metax{insert Lisp definition in buffer}{M-x insert-kbd-macro} \section{Commands Dealing with Emacs Lisp} \key{eval {\bf sexp} before point}{C-x C-e} \key{eval current {\bf defun}}{C-M-x} \metax{eval {\bf region}}{M-x eval-region} \metax{eval entire {\bf buffer}}{M-x eval-current-buffer} \key{read and eval minibuffer}{M-ESC} \key{re-execute last minibuffer command}{C-x ESC ESC} \metax{read and eval Emacs Lisp file}{M-x load-file} \metax{load from standard system directory}{M-x load-library} \section{Simple Customization} % The intended audience here is the person who wants to make simple % customizations and knows Lisp syntax. Here are some examples of binding global keys in Emacs Lisp. \beginexample% (global-set-key [(control c) g] 'goto-line) (global-set-key [(control x) (control k)] 'kill-region) (global-set-key [(meta \#)] 'query-replace-regexp) \endexample An example of setting a variable in Emacs Lisp: \beginexample% (setq backup-by-copying-when-linked t) \endexample \section{Writing Commands} \beginexample% (defun \ (\) "\" (interactive "\