This Info file contains v21.5 of the XEmacs Internals Manual, October 2004.
| 1. Introduction | | Overview of this manual. |
| 2. Authorship of XEmacs | | |
| 3. A History of Emacs | | Times, dates, important events. |
| 4. The XEmacs Split | | |
| 5. XEmacs from the Outside | | A broad conceptual overview. |
| 6. The Lisp Language | | An overview. |
| 7. XEmacs from the Perspective of Building | | |
| 8. Build-Time Dependencies | | |
| 9. The Modules of XEmacs | | |
| 10. The Build Configuration System | | |
| 11. Rules When Writing New C Code | | |
| 12. Regression Testing XEmacs | | |
| 13. Mercurial Techniques | | |
| 14. CVS Techniques | | |
| 15. XEmacs from the Inside | | |
| 16. Basic Types | | |
| 17. Low-Level Allocation | | |
| 18. The XEmacs Object System (Abstractly Speaking) | | |
| 19. How Lisp Objects Are Represented in C | | |
| 20. Allocation of Objects in XEmacs Lisp | | |
| 21. The Lisp Reader and Compiler | | |
| 22. Evaluation; Stack Frames; Bindings | | |
| 23. Symbols and Variables | | |
| 24. Buffers | | |
| 25. Text | | |
| 26. Multilingual Support | | |
| 27. Consoles; Devices; Frames; Windows | | |
| 28. Window-System Support | | |
| 29. Window and Frame Geometry | | |
| 30. The Redisplay Mechanism | | |
| 31. Extents | | |
| 32. Faces | | |
| 33. Glyphs | | |
| 34. Specifiers | | |
| 35. Menus | | |
| 36. Events and the Event Loop | | |
| 37. Asynchronous Events; Quit Checking | | |
| 38. Lstreams | | |
| 39. Subprocesses | | |
| 40. Interface to MS Windows | | |
| 41. Interface to the X Window System | | |
| 42. Dumping | | |
| 43. Future Work | | |
| 44. Future Work Discussion | | |
| 45. Old Future Work | | |
| Index | | |
|
|
| -- The Detailed Node Listing ---
|
|
|
| A History of Emacs
|
|
|
| 3.1 Through Version 18 | | Unification prevails. |
| 3.2 Epoch | | An early graphical split of GNU Emacs. |
| 3.3 Lucid Emacs | | One version 19 Emacs. |
| 3.4 GNU Emacs 19 | | The other version 19 Emacs. |
| 3.5 GNU Emacs 20 | | The other version 20 Emacs. |
| 3.6 XEmacs | | The continuation of Lucid Emacs. |
|
|
| The Modules of XEmacs
|
|
|
| 9.1 A Summary of the Various XEmacs Modules | | |
| 9.2 Modules for Building XEmacs | | |
| 9.3 Low-Level Modules | | |
| 9.4 Basic Lisp Modules | | |
| 9.5 Modules for Standard Editing Operations | | |
| 9.6 Modules for Interfacing with the File System | | |
| 9.7 Modules for Other Aspects of the Lisp Interpreter and Object System | | |
| 9.8 Modules for Interfacing with the Operating System | | |
|
|
| Modules for Building XEmacs
|
|
|
| 9.2.1 Modules for Build Configuration | | |
| 9.2.2 Modules for Compiling XEmacs | | |
| 9.2.3 Modules for Preloading Lisp | | |
|
|
| The Build Configuration System
|
|
|
| 10.1 The version.sh Script | | |
| 10.2 Adding Configurable Features | | |
| 10.3 The configure Script | | |
| 10.4 The Makefile Precursors | | |
|
|
| Rules When Writing New C Code
|
|
|
| 11.1 Introduction to Writing C Code | | |
| 11.2 Writing New Modules | | |
| 11.3 Working with Lisp Objects | | |
| 11.4 Writing Lisp Primitives | | |
| 11.5 Writing Good Comments | | |
| 11.6 Adding Global Lisp Variables | | |
| 11.7 Writing Macros | | |
| 11.8 Proper Use of Unsigned Types | | |
| 11.9 Major Textual Changes | | |
| 11.10 Debugging and Testing | | |
|
|
| Major Textual Changes
|
|
|
| 11.9.1 Great Integral Type Renaming | | |
| 11.9.2 Text/Char Type Renaming | | |
|
|
| Regression Testing XEmacs
|
|
|
| 12.1 How to Regression-Test | | |
| 12.2 Modules for Regression Testing | | |
|
|
| Mercurial Techniques
|
|
|
| Installing Mercurial | | |
| 13.1 Preserving Existing Changes with Mercurial Queues | | |
|
|
| CVS Techniques
|
|
|
| 14.1 Creating a Branch | | |
| 14.2 Merging a Branch into the Trunk | | |
|
|
| Low-Level Allocation
|
|
|
| 17.1 Basic Heap Allocation | | |
| 17.2 Stack Allocation | | |
| 17.3 Dynamic Arrays | | |
| 17.4 Allocation by Blocks | | |
| 17.5 Modules for Allocation | | |
|
|
| Allocation of Objects in XEmacs Lisp
|
|
|
| 20.1 Introduction to Allocation | | |
| 20.2 Garbage Collection | | |
20.3 GCPROing | | |
| 20.4 Garbage Collection - Step by Step | | |
| 20.5 Fixnums and Characters | | |
| 20.6 Allocation from Frob Blocks | | |
| 20.7 lrecords | | |
| 20.8 Low-level allocation | | |
| 20.9 Cons | | |
| 20.10 Vector | | |
| 20.11 Bit Vector | | |
| 20.12 Symbol | | |
| 20.13 Marker | | |
| 20.14 String | | |
| 20.15 Compiled Function | | |
|
|
| Garbage Collection - Step by Step
|
|
|
| 20.4.1 Invocation | | |
20.4.2 garbage_collect_1 | | |
20.4.3 mark_object | | |
20.4.4 gc_sweep | | |
20.4.5 sweep_lcrecords_1 | | |
20.4.6 compact_string_chars | | |
20.4.7 sweep_strings | | |
20.4.8 sweep_bit_vectors_1 | | |
|
|
| Evaluation; Stack Frames; Bindings
|
|
|
| 22.1 Evaluation | | |
| 22.2 Dynamic Binding; The specbinding Stack; Unwind-Protects | | |
| 22.3 Simple Special Operators | | |
| 22.4 Catch and Throw | | |
| 22.5 Error Trapping | | |
|
|
| Symbols and Variables
|
|
|
| 23.1 Introduction to Symbols | | |
| 23.2 Obarrays | | |
| 23.3 Symbol Values | | |
|
|
| Buffers
|
|
|
| 24.1 Introduction to Buffers | | A buffer holds a block of text such as a file. |
| 24.2 Buffer Lists | | Keeping track of all buffers. |
| 24.3 Markers and Extents | | Tagging locations within a buffer. |
| 24.4 The Buffer Object | | The Lisp object corresponding to a buffer. |
|
|
| Text
|
|
|
| 25.1 The Text in a Buffer | | Representation of the text in a buffer. |
| 25.2 Ibytes and Ichars | | Representation of individual characters. |
| 25.3 Byte-Char Position Conversion | | |
| 25.4 Searching and Matching | | Higher-level algorithms. |
|
|
| Multilingual Support
|
|
|
| 26.1 Introduction to Multilingual Issues #1 | | |
| 26.2 Introduction to Multilingual Issues #2 | | |
| 26.3 Introduction to Multilingual Issues #3 | | |
| 26.4 Introduction to Multilingual Issues #4 | | |
| 26.5 Character Sets | | |
| 26.6 Encodings | | |
| 26.7 Internal Mule Encodings | | |
| 26.8 Byte/Character Types; Buffer Positions; Other Typedefs | | |
| 26.9 Internal Text APIs | | |
| 26.10 Coding for Mule | | |
| 26.11 CCL | | |
| 26.12 Microsoft Windows-Related Multilingual Issues | | |
| 26.13 Modules for Internationalization | | |
| 26.14 The Great Mule Merge of March 2002 | | |
|
|
| Encodings
|
|
|
| 26.6.1 Japanese EUC (Extended Unix Code) | | |
| 26.6.2 JIS7 | | |
|
|
| Internal Mule Encodings
|
|
|
| 26.7.1 Internal String Encoding | | |
| 26.7.2 Internal Character Encoding | | |
|
|
| Byte/Character Types; Buffer Positions; Other Typedefs
|
|
|
| 26.8.1 Byte Types | | |
| 26.8.2 Different Ways of Seeing Internal Text | | |
| 26.8.3 Buffer Positions | | |
| 26.8.4 Other Typedefs | | |
| 26.8.5 Usage of the Various Representations | | |
| 26.8.6 Working With the Various Representations | | |
|
|
| Internal Text APIs
|
|
|
| 26.9.1 Basic internal-format APIs | | |
| 26.9.2 The DFC API | | |
| 26.9.3 The Eistring API | | |
|
|
| Coding for Mule
|
|
|
| 26.10.1 Character-Related Data Types | | |
| 26.10.2 Working With Character and Byte Positions | | |
| 26.10.3 Conversion to and from External Data | | |
| 26.10.4 General Guidelines for Writing Mule-Aware Code | | |
| 26.10.5 An Example of Mule-Aware Code | | |
| 26.10.6 Mule-izing Code | | |
|
|
| Microsoft Windows-Related Multilingual Issues
|
|
|
| 26.12.1 Microsoft Documentation | | |
| 26.12.2 Locales, code pages, and other concepts of "language" | | |
| 26.12.3 More about code pages | | |
| 26.12.4 More about locales | | |
| 26.12.5 Unicode support under Windows | | |
| 26.12.6 The golden rules of writing Unicode-safe code | | |
| 26.12.7 The format of the locale in setlocale() | | |
| 26.12.8 Random other Windows I18N docs | | |
|
|
| The Great Mule Merge of March 2002
|
|
|
| 26.14.1 List of changed files in new Mule workspace | | |
| 26.14.2 Changes to the MULE subsystems | | |
| 26.14.3 Pervasive changes throughout XEmacs sources | | |
| 26.14.4 Changes to specific subsystems | | |
| 26.14.5 Mule changes by theme | | |
| 26.14.6 File-coding rewrite | | |
| 26.14.7 General User-Visible Changes | | |
| 26.14.8 General Lisp-Visible Changes | | |
| 26.14.9 User documentation | | |
| 26.14.10 General internal changes | | |
| 26.14.11 Ben's TODO list (probably obsolete) | | Probably obsolete. |
| 26.14.12 Ben's README (probably obsolete) | | Probably obsolete. |
|
|
| Consoles; Devices; Frames; Windows
|
|
|
| 27.1 Introduction to Consoles; Devices; Frames; Windows | | |
| 27.2 Point | | |
| 27.3 Window Hierarchy | | |
| 27.4 The Window Object | | |
| 27.5 Modules for the Basic Displayable Lisp Objects | | |
|
|
| Window-System Support
|
|
|
| 28.1 Creating a Window-System Type | | |
|
|
| Window and Frame Geometry
|
|
|
| 29.1 Intro to Window and Frame Geometry | | |
| 29.2 The Frame | | |
| 29.3 The Non-Client Area | | |
| 29.4 The Client Area | | |
| 29.5 The Paned Area | | |
| 29.6 Text Areas, Fringes, Margins | | |
| 29.7 The Displayable Area | | |
| 29.8 Which Functions Use Which? | | |
|
|
| The Redisplay Mechanism
|
|
|
| 30.1 Critical Redisplay Sections | | |
| 30.2 Line Start Cache | | |
| 30.3 Redisplay Piece by Piece | | |
| 30.4 Modules for the Redisplay Mechanism | | |
| 30.5 Modules for other Display-Related Lisp Objects | | |
|
|
| Extents
|
|
|
| 31.1 Introduction to Extents | | Extents are ranges over text, with properties. |
| 31.2 Extent Ordering | | How extents are ordered internally. |
| 31.3 Format of the Extent Info | | The extent information in a buffer or string. |
| 31.4 Zero-Length Extents | | A weird special case. |
| 31.5 Mathematics of Extent Ordering | | A rigorous foundation. |
| 31.6 Extent Fragments | | Cached information useful for redisplay. |
|
|
| Events and the Event Loop
|
|
|
| 36.1 Introduction to Events | | |
| 36.2 Main Loop | | |
| 36.3 Specifics of the Event Gathering Mechanism | | |
| 36.4 Specifics About the Emacs Event | | |
| 36.5 Event Queues | | |
| 36.6 Event Stream Callback Routines | | |
| 36.7 Other Event Loop Functions | | |
| 36.8 Stream Pairs | | |
| 36.9 Converting Events | | |
| 36.10 Dispatching Events; The Command Builder | | |
| 36.11 Focus Handling | | |
| 36.12 Editor-Level Control Flow Modules | | |
|
|
| Asynchronous Events; Quit Checking
|
|
|
| 37.1 Signal Handling | | |
| 37.2 Control-G (Quit) Checking | | |
| 37.3 Profiling | | |
| 37.4 Asynchronous Timeouts | | |
| 37.5 Exiting | | |
|
|
| Lstreams
|
|
|
| 38.1 Creating an Lstream | | Creating an lstream object. |
| 38.2 Lstream Types | | Different sorts of things that are streamed. |
| 38.3 Lstream Functions | | Functions for working with lstreams. |
| 38.4 Lstream Methods | | Creating new lstream types. |
|
|
| Subprocesses
|
|
|
| 39.0.1 Ben's separate stderr notes (probably obsolete) | | Probably obsolete. |
|
|
| Interface to MS Windows
|
|
|
| 40.1 Different kinds of Windows environments | | |
| 40.2 Windows Build Flags | | |
| 40.3 Windows I18N Introduction | | |
| 40.4 Modules for Interfacing with MS Windows | | |
| 40.5 CHANGES from 21.4-windows branch (probably obsolete) | | Probably obsolete. |
|
|
| Interface to the X Window System
|
|
|
| 41.1 Lucid Widget Library | | An interface to various widget sets. |
| 41.2 Modules for Interfacing with X Windows | | |
|
|
| Lucid Widget Library
|
|
|
| 41.1.1 Generic Widget Interface | | The lwlib generic widget interface. |
| 41.1.2 Scrollbars | | |
| 41.1.3 Menubars | | |
| 41.1.4 Checkboxes and Radio Buttons | | |
| 41.1.5 Progress Bars | | |
| 41.1.6 Tab Controls | | |
|
|
| Dumping
|
|
|
| 42.1 Dumping Justification | | |
| 42.2 Overview | | |
| 42.3 Data descriptions | | |
| 42.4 Dumping phase | | |
| 42.5 Reloading phase | | |
| 42.6 Remaining issues | | |
|
|
| Dumping phase
|
|
|
| 42.4.1 Object inventory | | |
| 42.4.2 Address allocation | | |
| 42.4.3 The header | | |
| 42.4.4 Data dumping | | |
| 42.4.5 Pointers dumping | | |
|
|
| Future Work
|
|
|
| 43.1 Future Work -- General Suggestions | | |
| 43.2 Future Work -- Elisp Compatibility Package | | |
| 43.3 Future Work -- Drag-n-Drop | | |
| 43.4 Future Work -- Standard Interface for Enabling Extensions | | |
| 43.5 Future Work -- Better Initialization File Scheme | | |
| 43.6 Future Work -- Keyword Parameters | | |
| 43.7 Future Work -- Property Interface Changes | | |
| 43.8 Future Work -- Toolbars | | |
| 43.9 Future Work -- Menu API Changes | | |
| 43.10 Future Work -- Removal of Misc-User Event Type | | |
| 43.11 Future Work -- Mouse Pointer | | |
| 43.12 Future Work -- Extents | | |
| 43.13 Future Work -- Version Number and Development Tree Organization | | |
43.14 Future Work -- Improvements to the xemacs.org Website | | |
| 43.15 Future Work -- Keybindings | | |
| 43.16 Future Work -- Byte Code Snippets | | |
| 43.17 Future Work -- Lisp Stream API | | |
| 43.18 Future Work -- Multiple Values | | |
| 43.19 Future Work -- Macros | | |
| 43.20 Future Work -- Specifiers | | |
| 43.21 Future Work -- Display Tables | | |
| 43.22 Future Work -- Making Elisp Function Calls Faster | | |
| 43.23 Future Work -- Lisp Engine Replacement | | |
| 43.24 Future Work -- Better Rendering Support | | |
|
|
| Future Work -- Toolbars
|
|
|
| 43.8.1 Future Work -- Easier Toolbar Customization | | |
| 43.8.2 Future Work -- Toolbar Interface Changes | | |
|
|
| Future Work -- Mouse Pointer
|
|
|
| 43.11.1 Future Work -- Abstracted Mouse Pointer Interface | | |
| 43.11.2 Future Work -- Busy Pointer | | |
|
|
| Future Work -- Extents
|
|
|
| 43.12.1 Future Work -- Everything should obey duplicable extents | | |
|
|
| Future Work -- Keybindings
|
|
|
| 43.15.1 Future Work -- Keybinding Schemes | | |
| 43.15.2 Future Work -- Better Support for Windows Style Key Bindings | | |
| 43.15.3 Future Work -- Misc Key Binding Ideas | | |
|
|
| Future Work -- Byte Code Snippets
|
|
|
| 43.16.1 Future Work -- Autodetection | | |
| 43.16.2 Future Work -- Conversion Error Detection | | |
| 43.16.3 Future Work -- Unicode | | |
| 43.16.4 Future Work -- BIDI Support | | |
| 43.16.5 Future Work -- Localized Text/Messages | | |
|
|
| Future Work -- Lisp Engine Replacement
|
|
|
| 43.23.1 Future Work -- Lisp Engine Discussion | | |
| 43.23.2 Future Work -- Lisp Engine Replacement -- Implementation | | |
| 43.23.3 Future Work -- Startup File Modification by Packages | | |
|
|
| Future Work -- Better Rendering Support
|
|
|
| 43.24.1 Better Rendering Support -- Review Criteria | | |
| 43.24.2 Better Rendering Support -- Implementation | | |
| 43.24.3 Better Rendering Support -- Current Status | | |
| 43.24.4 Better Rendering Support -- Configuration with the Interim Patches | | |
| 43.24.5 Better Rendering Support -- Modern Font Support | | |
|
|
| Better Rendering Support -- Modern Font Support
|
|
|
| 43.24.5.1 Modern Font Support -- Font Concepts | | GUI devices, fonts, glyphs, rendering. |
| 43.24.5.2 Modern Font Support -- fontconfig | | Querying and selecting fonts. |
| 43.24.5.3 Modern Font Support -- fontconfig | | Rendering fonts on X11. |
|
|
| Future Work Discussion
|
|
|
| 44.1 Discussion -- Garbage Collection | | |
| 44.2 Discussion -- Glyphs | | |
| 44.3 Discussion -- Dialog Boxes | | |
| 44.4 Discussion -- Multilingual Issues | | |
| 44.5 Discussion -- Instantiators and Generic Property Accessors | | |
| 44.6 Discussion -- Switching to C++ | | |
| 44.7 Discussion -- Windows External Widget | | |
| 44.8 Discussion -- Packages | | |
| 44.9 Discussion -- Distribution Layout | | |
|
|
| Discussion -- Garbage Collection
|
|
|
| 44.1.1 Discussion -- KKCC | | |
| 44.1.2 Discussion -- Incremental Collector | | |
| 44.1.3 Discussion -- Pure Space | | |
| 44.1.4 Discussion -- Hashtable-Based Marking and Cleanup | | |
| 44.1.5 Discussion -- The Anti-Cons | | |
|
|
| Old Future Work
|
|
|
| 45.1 Old Future Work -- A Portable Unexec Replacement | | |
| 45.2 Old Future Work -- Indirect Buffers | | |
| 45.3 Old Future Work -- Improvements in support for non-ASCII (European) keysyms under X | | |
| 45.4 Old Future Work -- RTF Clipboard Support | | |
| 45.5 Old Future Work -- xemacs.org Mailing Address Changes | | |
| 45.6 Old Future Work -- Lisp callbacks from critical areas of the C code | | |
|
|