[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. 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  



This document was generated by XEmacs Webmaster on August, 3 2012 using texi2html