[Top] [Contents] [Index] [ ? ]

XEmacs Internals Manual

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. CVS Techniques  
14. XEmacs from the Inside  
15. Basic Types  
16. Low-Level Allocation  
17. The XEmacs Object System (Abstractly Speaking)  
18. How Lisp Objects Are Represented in C  
19. Allocation of Objects in XEmacs Lisp  
20. The Lisp Reader and Compiler  
21. Evaluation; Stack Frames; Bindings  
22. Symbols and Variables  
23. Buffers  
24. Text  
25. Multilingual Support  
26. Consoles; Devices; Frames; Windows  
27. The Redisplay Mechanism  
28. Extents  
29. Faces  
30. Glyphs  
31. Specifiers  
32. Menus  
33. Events and the Event Loop  
34. Asynchronous Events; Quit Checking  
35. Lstreams  
36. Subprocesses  
37. Interface to MS Windows  
38. Interface to the X Window System  
39. Dumping  
40. Future Work  
41. Future Work Discussion  
42. 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  
CVS Techniques
13.1 Creating a Branch  
13.2 Merging a Branch into the Trunk  
Low-Level Allocation
16.1 Basic Heap Allocation  
16.2 Stack Allocation  
16.3 Dynamic Arrays  
16.4 Allocation by Blocks  
16.5 Modules for Allocation  
Allocation of Objects in XEmacs Lisp
19.1 Introduction to Allocation  
19.2 Garbage Collection  
19.3 GCPROing  
19.4 Garbage Collection - Step by Step  
19.5 Integers and Characters  
19.6 Allocation from Frob Blocks  
19.7 lrecords  
19.8 Low-level allocation  
19.9 Cons  
19.10 Vector  
19.11 Bit Vector  
19.12 Symbol  
19.13 Marker  
19.14 String  
19.15 Compiled Function  
Garbage Collection - Step by Step
19.4.1 Invocation  
19.4.2 garbage_collect_1  
19.4.3 mark_object  
19.4.4 gc_sweep  
19.4.5 sweep_lcrecords_1  
19.4.6 compact_string_chars  
19.4.7 sweep_strings  
19.4.8 sweep_bit_vectors_1  
Evaluation; Stack Frames; Bindings
21.1 Evaluation  
21.2 Dynamic Binding; The specbinding Stack; Unwind-Protects  
21.3 Simple Special Forms  
21.4 Catch and Throw  
21.5 Error Trapping  
Symbols and Variables
22.1 Introduction to Symbols  
22.2 Obarrays  
22.3 Symbol Values  
Buffers
23.1 Introduction to Buffers  A buffer holds a block of text such as a file.
23.2 Buffer Lists  Keeping track of all buffers.
23.3 Markers and Extents  Tagging locations within a buffer.
23.4 The Buffer Object  The Lisp object corresponding to a buffer.
Text
24.1 The Text in a Buffer  Representation of the text in a buffer.
24.2 Ibytes and Ichars  Representation of individual characters.
24.3 Byte-Char Position Conversion  
24.4 Searching and Matching  Higher-level algorithms.
Multilingual Support
25.1 Introduction to Multilingual Issues #1  
25.2 Introduction to Multilingual Issues #2  
25.3 Introduction to Multilingual Issues #3  
25.4 Introduction to Multilingual Issues #4  
25.5 Character Sets  
25.6 Encodings  
25.7 Internal Mule Encodings  
25.8 Byte/Character Types; Buffer Positions; Other Typedefs  
25.9 Internal Text APIs  
25.10 Coding for Mule  
25.11 CCL  
25.12 Microsoft Windows-Related Multilingual Issues  
25.13 Modules for Internationalization  
25.14 The Great Mule Merge of March 2002  
Encodings
25.6.1 Japanese EUC (Extended Unix Code)  
25.6.2 JIS7  
Internal Mule Encodings
25.7.1 Internal String Encoding  
25.7.2 Internal Character Encoding  
Byte/Character Types; Buffer Positions; Other Typedefs
25.8.1 Byte Types  
25.8.2 Different Ways of Seeing Internal Text  
25.8.3 Buffer Positions  
25.8.4 Other Typedefs  
25.8.5 Usage of the Various Representations  
25.8.6 Working With the Various Representations  
Internal Text APIs
25.9.1 Basic internal-format APIs  
25.9.2 The DFC API  
25.9.3 The Eistring API  
Coding for Mule
25.10.1 Character-Related Data Types  
25.10.2 Working With Character and Byte Positions  
25.10.3 Conversion to and from External Data  
25.10.4 General Guidelines for Writing Mule-Aware Code  
25.10.5 An Example of Mule-Aware Code  
25.10.6 Mule-izing Code  
Microsoft Windows-Related Multilingual Issues
25.12.1 Microsoft Documentation  
25.12.2 Locales, code pages, and other concepts of "language"  
25.12.3 More about code pages  
25.12.4 More about locales  
25.12.5 Unicode support under Windows  
25.12.6 The golden rules of writing Unicode-safe code  
25.12.7 The format of the locale in setlocale()  
25.12.8 Random other Windows I18N docs  
The Great Mule Merge of March 2002
25.14.1 List of changed files in new Mule workspace  
25.14.2 Changes to the MULE subsystems  
25.14.3 Pervasive changes throughout XEmacs sources  
25.14.4 Changes to specific subsystems  
25.14.5 Mule changes by theme  
25.14.6 File-coding rewrite  
25.14.7 General User-Visible Changes  
25.14.8 General Lisp-Visible Changes  
25.14.9 User documentation  
25.14.10 General internal changes  
25.14.11 Ben's TODO list (probably obsolete)  Probably obsolete.
25.14.12 Ben's README (probably obsolete)  Probably obsolete.
Consoles; Devices; Frames; Windows
26.1 Introduction to Consoles; Devices; Frames; Windows  
26.2 Point  
26.3 Window Hierarchy  
26.4 The Window Object  
26.5 Creating a New Console, Device, or Frame Type  
26.6 Modules for the Basic Displayable Lisp Objects  
The Redisplay Mechanism
27.1 Critical Redisplay Sections  
27.2 Line Start Cache  
27.3 Redisplay Piece by Piece  
27.4 Modules for the Redisplay Mechanism  
27.5 Modules for other Display-Related Lisp Objects  
Extents
28.1 Introduction to Extents  Extents are ranges over text, with properties.
28.2 Extent Ordering  How extents are ordered internally.
28.3 Format of the Extent Info  The extent information in a buffer or string.
28.4 Zero-Length Extents  A weird special case.
28.5 Mathematics of Extent Ordering  A rigorous foundation.
28.6 Extent Fragments  Cached information useful for redisplay.
Events and the Event Loop
33.1 Introduction to Events  
33.2 Main Loop  
33.3 Specifics of the Event Gathering Mechanism  
33.4 Specifics About the Emacs Event  
33.5 Event Queues  
33.6 Event Stream Callback Routines  
33.7 Other Event Loop Functions  
33.8 Stream Pairs  
33.9 Converting Events  
33.10 Dispatching Events; The Command Builder  
33.11 Focus Handling  
33.12 Editor-Level Control Flow Modules  
Asynchronous Events; Quit Checking
34.1 Signal Handling  
34.2 Control-G (Quit) Checking  
34.3 Profiling  
34.4 Asynchronous Timeouts  
34.5 Exiting  
Lstreams
35.1 Creating an Lstream  Creating an lstream object.
35.2 Lstream Types  Different sorts of things that are streamed.
35.3 Lstream Functions  Functions for working with lstreams.
35.4 Lstream Methods  Creating new lstream types.
Subprocesses
36.0.1 Ben's separate stderr notes (probably obsolete)  Probably obsolete.
Interface to MS Windows
37.1 Different kinds of Windows environments  
37.2 Windows Build Flags  
37.3 Windows I18N Introduction  
37.4 Modules for Interfacing with MS Windows  
37.5 CHANGES from 21.4-windows branch (probably obsolete)  Probably obsolete.
Interface to the X Window System
38.1 Lucid Widget Library  An interface to various widget sets.
38.2 Modules for Interfacing with X Windows  
Lucid Widget Library
38.1.1 Generic Widget Interface  The lwlib generic widget interface.
38.1.2 Scrollbars  
38.1.3 Menubars  
38.1.4 Checkboxes and Radio Buttons  
38.1.5 Progress Bars  
38.1.6 Tab Controls  
Dumping
39.1 Dumping Justification  
39.2 Overview  
39.3 Data descriptions  
39.4 Dumping phase  
39.5 Reloading phase  
39.6 Remaining issues  
Dumping phase
39.4.1 Object inventory  
39.4.2 Address allocation  
39.4.3 The header  
39.4.4 Data dumping  
39.4.5 Pointers dumping  
Future Work
40.1 Future Work -- General Suggestions  
40.2 Future Work -- Elisp Compatibility Package  
40.3 Future Work -- Drag-n-Drop  
40.4 Future Work -- Standard Interface for Enabling Extensions  
40.5 Future Work -- Better Initialization File Scheme  
40.6 Future Work -- Keyword Parameters  
40.7 Future Work -- Property Interface Changes  
40.8 Future Work -- Toolbars  
40.9 Future Work -- Menu API Changes  
40.10 Future Work -- Removal of Misc-User Event Type  
40.11 Future Work -- Mouse Pointer  
40.12 Future Work -- Extents  
40.13 Future Work -- Version Number and Development Tree Organization  
40.14 Future Work -- Improvements to the xemacs.org Website  
40.15 Future Work -- Keybindings  
40.16 Future Work -- Byte Code Snippets  
40.17 Future Work -- Lisp Stream API  
40.18 Future Work -- Multiple Values  
40.19 Future Work -- Macros  
40.20 Future Work -- Specifiers  
40.21 Future Work -- Display Tables  
40.22 Future Work -- Making Elisp Function Calls Faster  
40.23 Future Work -- Lisp Engine Replacement  
40.24 Future Work -- Better Rendering Support  
Future Work -- Toolbars
40.8.1 Future Work -- Easier Toolbar Customization  
40.8.2 Future Work -- Toolbar Interface Changes  
Future Work -- Mouse Pointer
40.11.1 Future Work -- Abstracted Mouse Pointer Interface  
40.11.2 Future Work -- Busy Pointer  
Future Work -- Extents
40.12.1 Future Work -- Everything should obey duplicable extents  
Future Work -- Keybindings
40.15.1 Future Work -- Keybinding Schemes  
40.15.2 Future Work -- Better Support for Windows Style Key Bindings  
40.15.3 Future Work -- Misc Key Binding Ideas  
Future Work -- Byte Code Snippets
40.16.1 Future Work -- Autodetection  
40.16.2 Future Work -- Conversion Error Detection  
40.16.3 Future Work -- Unicode  
40.16.4 Future Work -- BIDI Support  
40.16.5 Future Work -- Localized Text/Messages  
Future Work -- Lisp Engine Replacement
40.23.1 Future Work -- Lisp Engine Discussion  
40.23.2 Future Work -- Lisp Engine Replacement -- Implementation  
40.23.3 Future Work -- Startup File Modification by Packages  
Future Work -- Better Rendering Support
40.24.1 Better Rendering Support -- Review Criteria  
40.24.2 Better Rendering Support -- Implementation  
40.24.3 Better Rendering Support -- Current Status  
40.24.4 Better Rendering Support -- Configuration with the Interim Patches  
40.24.5 Better Rendering Support -- Modern Font Support  
Better Rendering Support -- Modern Font Support
40.24.5.1 Modern Font Support -- Font Concepts  GUI devices, fonts, glyphs, rendering.
40.24.5.2 Modern Font Support -- fontconfig  Querying and selecting fonts.
40.24.5.3 Modern Font Support -- fontconfig  Rendering fonts on X11.
Future Work Discussion
41.1 Discussion -- Garbage Collection  
41.2 Discussion -- Glyphs  
41.3 Discussion -- Dialog Boxes  
41.4 Discussion -- Multilingual Issues  
41.5 Discussion -- Instantiators and Generic Property Accessors  
41.6 Discussion -- Switching to C++  
41.7 Discussion -- Windows External Widget  
41.8 Discussion -- Packages  
41.9 Discussion -- Distribution Layout  
Discussion -- Garbage Collection
41.1.1 Discussion -- Pure Space  
41.1.2 Discussion -- Hashtable-Based Marking and Cleanup  
41.1.3 Discussion -- The Anti-Cons  
Old Future Work
42.1 Old Future Work -- A Portable Unexec Replacement  
42.2 Old Future Work -- Indirect Buffers  
42.3 Old Future Work -- Improvements in support for non-ASCII (European) keysyms under X  
42.4 Old Future Work -- RTF Clipboard Support  
42.5 Old Future Work -- xemacs.org Mailing Address Changes  
42.6 Old Future Work -- Lisp callbacks from critical areas of the C code  



This document was generated by XEmacs Webmaster on October, 2 2007 using texi2html