comparison man/internals/internals.texi @ 3354:15fb91e3a115

[xemacs-hg @ 2006-04-23 16:11:16 by stephent] Xft/fontconfig refactoring, Part I. <87hd4ks29d.fsf@tleepslib.sk.tsukuba.ac.jp>
author stephent
date Sun, 23 Apr 2006 16:11:34 +0000
parents cf02a1da936a
children d08f0a2c8722
comparison
equal deleted inserted replaced
3353:521d94807505 3354:15fb91e3a115
309 * XEmacs from the Outside:: A broad conceptual overview. 309 * XEmacs from the Outside:: A broad conceptual overview.
310 * The Lisp Language:: An overview. 310 * The Lisp Language:: An overview.
311 * XEmacs from the Perspective of Building:: 311 * XEmacs from the Perspective of Building::
312 * Build-Time Dependencies:: 312 * Build-Time Dependencies::
313 * The Modules of XEmacs:: 313 * The Modules of XEmacs::
314 * The Build Configuration System:: 314 * The Build Configuration System::
315 * Rules When Writing New C Code:: 315 * Rules When Writing New C Code::
316 * Regression Testing XEmacs:: 316 * Regression Testing XEmacs::
317 * CVS Techniques:: 317 * CVS Techniques::
318 * XEmacs from the Inside:: 318 * XEmacs from the Inside::
319 * Basic Types:: 319 * Basic Types::
359 * XEmacs:: The continuation of Lucid Emacs. 359 * XEmacs:: The continuation of Lucid Emacs.
360 360
361 The Modules of XEmacs 361 The Modules of XEmacs
362 362
363 * A Summary of the Various XEmacs Modules:: 363 * A Summary of the Various XEmacs Modules::
364 * Modules for Building XEmacs::
364 * Low-Level Modules:: 365 * Low-Level Modules::
365 * Basic Lisp Modules:: 366 * Basic Lisp Modules::
366 * Modules for Standard Editing Operations:: 367 * Modules for Standard Editing Operations::
367 * Modules for Interfacing with the File System:: 368 * Modules for Interfacing with the File System::
368 * Modules for Other Aspects of the Lisp Interpreter and Object System:: 369 * Modules for Other Aspects of the Lisp Interpreter and Object System::
369 * Modules for Interfacing with the Operating System:: 370 * Modules for Interfacing with the Operating System::
371
372 Modules for Building XEmacs
373
374 * Modules for Build Configuration::
375 * Modules for Compiling XEmacs::
376 * Modules for Preloading Lisp::
377
378 The Build Configuration System
379
380 * The version.sh Script::
381 * Adding Configurable Features::
382 * The configure Script::
383 * The Makefile Precursors::
370 384
371 Rules When Writing New C Code 385 Rules When Writing New C Code
372 386
373 * Introduction to Writing C Code:: 387 * Introduction to Writing C Code::
374 * Writing New Modules:: 388 * Writing New Modules::
391 * How to Regression-Test:: 405 * How to Regression-Test::
392 * Modules for Regression Testing:: 406 * Modules for Regression Testing::
393 407
394 CVS Techniques 408 CVS Techniques
395 409
396 * Creating a Branch:: 410 * Creating a Branch::
397 * Merging a Branch into the Trunk:: 411 * Merging a Branch into the Trunk::
398 412
399 Low-Level Allocation 413 Low-Level Allocation
400 414
401 * Basic Heap Allocation:: 415 * Basic Heap Allocation::
469 * Introduction to Multilingual Issues #4:: 483 * Introduction to Multilingual Issues #4::
470 * Character Sets:: 484 * Character Sets::
471 * Encodings:: 485 * Encodings::
472 * Internal Mule Encodings:: 486 * Internal Mule Encodings::
473 * Byte/Character Types; Buffer Positions; Other Typedefs:: 487 * Byte/Character Types; Buffer Positions; Other Typedefs::
474 * Internal Text APIs:: 488 * Internal Text APIs::
475 * Coding for Mule:: 489 * Coding for Mule::
476 * CCL:: 490 * CCL::
477 * Microsoft Windows-Related Multilingual Issues:: 491 * Microsoft Windows-Related Multilingual Issues::
478 * Modules for Internationalization:: 492 * Modules for Internationalization::
479 * The Great Mule Merge of March 2002:: 493 * The Great Mule Merge of March 2002::
480 494
481 Encodings 495 Encodings
482 496
483 * Japanese EUC (Extended Unix Code):: 497 * Japanese EUC (Extended Unix Code)::
484 * JIS7:: 498 * JIS7::
523 * The format of the locale in setlocale():: 537 * The format of the locale in setlocale()::
524 * Random other Windows I18N docs:: 538 * Random other Windows I18N docs::
525 539
526 The Great Mule Merge of March 2002 540 The Great Mule Merge of March 2002
527 541
528 * List of changed files in new Mule workspace:: 542 * List of changed files in new Mule workspace::
529 * Changes to the MULE subsystems:: 543 * Changes to the MULE subsystems::
530 * Pervasive changes throughout XEmacs sources:: 544 * Pervasive changes throughout XEmacs sources::
531 * Changes to specific subsystems:: 545 * Changes to specific subsystems::
532 * Mule changes by theme:: 546 * Mule changes by theme::
533 * File-coding rewrite:: 547 * File-coding rewrite::
534 * General User-Visible Changes:: 548 * General User-Visible Changes::
535 * General Lisp-Visible Changes:: 549 * General Lisp-Visible Changes::
536 * User documentation:: 550 * User documentation::
537 * General internal changes:: 551 * General internal changes::
538 * Ben's TODO list:: Probably obsolete. 552 * Ben's TODO list:: Probably obsolete.
539 * Ben's README:: Probably obsolete. 553 * Ben's README:: Probably obsolete.
540 554
541 Consoles; Devices; Frames; Windows 555 Consoles; Devices; Frames; Windows
542 556
543 * Introduction to Consoles; Devices; Frames; Windows:: 557 * Introduction to Consoles; Devices; Frames; Windows::
544 * Point:: 558 * Point::
545 * Window Hierarchy:: 559 * Window Hierarchy::
546 * The Window Object:: 560 * The Window Object::
561 * Creating a New Console/Device/Frame Type::
547 * Modules for the Basic Displayable Lisp Objects:: 562 * Modules for the Basic Displayable Lisp Objects::
548 563
549 The Redisplay Mechanism 564 The Redisplay Mechanism
550 565
551 * Critical Redisplay Sections:: 566 * Critical Redisplay Sections::
593 * Lstream Functions:: Functions for working with lstreams. 608 * Lstream Functions:: Functions for working with lstreams.
594 * Lstream Methods:: Creating new lstream types. 609 * Lstream Methods:: Creating new lstream types.
595 610
596 Subprocesses 611 Subprocesses
597 612
598 * Ben's separate stderr notes:: Probably obsolete. 613 * Ben's separate stderr notes:: Probably obsolete.
599 614
600 Interface to MS Windows 615 Interface to MS Windows
601 616
602 * Different kinds of Windows environments:: 617 * Different kinds of Windows environments::
603 * Windows Build Flags:: 618 * Windows Build Flags::
604 * Windows I18N Introduction:: 619 * Windows I18N Introduction::
605 * Modules for Interfacing with MS Windows:: 620 * Modules for Interfacing with MS Windows::
606 * CHANGES from 21.4-windows branch:: Probably obsolete. 621 * CHANGES from 21.4-windows branch:: Probably obsolete.
607 622
608 Interface to the X Window System 623 Interface to the X Window System
609 624
610 * Lucid Widget Library:: An interface to various widget sets. 625 * Lucid Widget Library:: An interface to various widget sets.
611 * Modules for Interfacing with X Windows:: 626 * Modules for Interfacing with X Windows::
659 * Future Work -- Macros:: 674 * Future Work -- Macros::
660 * Future Work -- Specifiers:: 675 * Future Work -- Specifiers::
661 * Future Work -- Display Tables:: 676 * Future Work -- Display Tables::
662 * Future Work -- Making Elisp Function Calls Faster:: 677 * Future Work -- Making Elisp Function Calls Faster::
663 * Future Work -- Lisp Engine Replacement:: 678 * Future Work -- Lisp Engine Replacement::
664 * Future Work -- Better Rendering Support:: 679 * Future Work -- Better Rendering Support::
665 680
666 Future Work -- Toolbars 681 Future Work -- Toolbars
667 682
668 * Future Work -- Easier Toolbar Customization:: 683 * Future Work -- Easier Toolbar Customization::
669 * Future Work -- Toolbar Interface Changes:: 684 * Future Work -- Toolbar Interface Changes::
694 Future Work -- Lisp Engine Replacement 709 Future Work -- Lisp Engine Replacement
695 710
696 * Future Work -- Lisp Engine Discussion:: 711 * Future Work -- Lisp Engine Discussion::
697 * Future Work -- Lisp Engine Replacement -- Implementation:: 712 * Future Work -- Lisp Engine Replacement -- Implementation::
698 * Future Work -- Startup File Modification by Packages:: 713 * Future Work -- Startup File Modification by Packages::
714
715 Future Work -- Better Rendering Support
716
717 * Better Rendering Support -- Review Criteria::
718 * Better Rendering Support -- Implementation::
719 * Better Rendering Support -- Current Status::
720 * Better Rendering Support -- Configuration with the Interim Patches::
721 * Better Rendering Support -- Modern Font Support::
722
723 Better Rendering Support -- Modern Font Support
724
725 * Modern Font Support -- Font Concepts:: GUI devices, fonts, glyphs, rendering.
726 * Modern Font Support -- fontconfig:: Querying and selecting fonts.
727 * Modern Font Support -- Xft:: Rendering fonts on X11.
699 728
700 Future Work Discussion 729 Future Work Discussion
701 730
702 * Discussion -- Garbage Collection:: 731 * Discussion -- Garbage Collection::
703 * Discussion -- Glyphs:: 732 * Discussion -- Glyphs::
2735 @chapter The Modules of XEmacs 2764 @chapter The Modules of XEmacs
2736 @cindex modules of XEmacs 2765 @cindex modules of XEmacs
2737 2766
2738 @menu 2767 @menu
2739 * A Summary of the Various XEmacs Modules:: 2768 * A Summary of the Various XEmacs Modules::
2740 * Modules for Building XEmacs:: 2769 * Modules for Building XEmacs::
2741 * Low-Level Modules:: 2770 * Low-Level Modules::
2742 * Basic Lisp Modules:: 2771 * Basic Lisp Modules::
2743 * Modules for Standard Editing Operations:: 2772 * Modules for Standard Editing Operations::
2744 * Modules for Interfacing with the File System:: 2773 * Modules for Interfacing with the File System::
2745 * Modules for Other Aspects of the Lisp Interpreter and Object System:: 2774 * Modules for Other Aspects of the Lisp Interpreter and Object System::
3245 @section Modules for Building XEmacs 3274 @section Modules for Building XEmacs
3246 @cindex modules for building XEmacs 3275 @cindex modules for building XEmacs
3247 @cindex building XEmacs, modules for 3276 @cindex building XEmacs, modules for
3248 3277
3249 @menu 3278 @menu
3250 * Modules for Build Configuration:: 3279 * Modules for Build Configuration::
3251 * Modules for Compiling XEmacs:: 3280 * Modules for Compiling XEmacs::
3252 * Modules for Preloading Lisp:: 3281 * Modules for Preloading Lisp::
3253 @end menu 3282 @end menu
3254 3283
3255 3284
3256 3285
3257 @node Modules for Build Configuration, Modules for Compiling XEmacs, Modules for Building XEmacs, Modules for Building XEmacs 3286 @node Modules for Build Configuration, Modules for Compiling XEmacs, Modules for Building XEmacs, Modules for Building XEmacs
3286 This node should contain descriptions of files like the various 3315 This node should contain descriptions of files like the various
3287 Makefiles, and I guess cross-references to ellcc etc. 3316 Makefiles, and I guess cross-references to ellcc etc.
3288 3317
3289 3318
3290 3319
3291 @node Modules for Preloading Lisp, , Modules for Compiling XEmacs, Modules for Building XEmacs 3320 @node Modules for Preloading Lisp, , Modules for Compiling XEmacs, Modules for Building XEmacs
3292 @subsection Modules for Preloading Lisp 3321 @subsection Modules for Preloading Lisp
3293 @cindex modules for preloading lisp 3322 @cindex modules for preloading lisp
3294 @cindex preloading lisp, modules for 3323 @cindex preloading lisp, modules for
3295 3324
3296 @strong{Please write this node!} @c #### 3325 @strong{Please write this node!} @c ####
4355 system it is running on. Determining which features are present and 4384 system it is running on. Determining which features are present and
4356 where they are located is the responsibility of the build configuration 4385 where they are located is the responsibility of the build configuration
4357 system. 4386 system.
4358 4387
4359 @menu 4388 @menu
4360 * The version.sh Script:: 4389 * The version.sh Script::
4361 * Adding Configurable Features:: 4390 * Adding Configurable Features::
4362 * The configure Script:: 4391 * The configure Script::
4363 * The Makefile Precursors:: 4392 * The Makefile Precursors::
4364 @end menu 4393 @end menu
4365 4394
4366 4395
4367 4396
4368 @node The version.sh Script, Adding Configurable Features, The Build Configuration System, The Build Configuration System 4397 @node The version.sh Script, Adding Configurable Features, The Build Configuration System, The Build Configuration System
4834 4863
4835 @end table 4864 @end table
4836 4865
4837 4866
4838 4867
4839 @node The Makefile Precursors, , The configure Script, The Build Configuration System 4868 @node The Makefile Precursors, , The configure Script, The Build Configuration System
4840 @section The Makefile Precursors 4869 @section The Makefile Precursors
4841 @cindex Makefile precursors 4870 @cindex Makefile precursors
4842 @cindex precursors, Makefile 4871 @cindex precursors, Makefile
4843 4872
4844 As with other @code{autoconf} based programs, XEmacs's Makefiles are not 4873 As with other @code{autoconf} based programs, XEmacs's Makefiles are not
6601 @node CVS Techniques, XEmacs from the Inside, Regression Testing XEmacs, Top 6630 @node CVS Techniques, XEmacs from the Inside, Regression Testing XEmacs, Top
6602 @chapter CVS Techniques 6631 @chapter CVS Techniques
6603 @cindex CVS techniques 6632 @cindex CVS techniques
6604 6633
6605 @menu 6634 @menu
6606 * Creating a Branch:: 6635 * Creating a Branch::
6607 * Merging a Branch into the Trunk:: 6636 * Merging a Branch into the Trunk::
6608 @end menu 6637 @end menu
6609 6638
6610 @node Creating a Branch, Merging a Branch into the Trunk, CVS Techniques, CVS Techniques 6639 @node Creating a Branch, Merging a Branch into the Trunk, CVS Techniques, CVS Techniques
6611 @section Creating a Branch 6640 @section Creating a Branch
10387 * Introduction to Multilingual Issues #4:: 10416 * Introduction to Multilingual Issues #4::
10388 * Character Sets:: 10417 * Character Sets::
10389 * Encodings:: 10418 * Encodings::
10390 * Internal Mule Encodings:: 10419 * Internal Mule Encodings::
10391 * Byte/Character Types; Buffer Positions; Other Typedefs:: 10420 * Byte/Character Types; Buffer Positions; Other Typedefs::
10392 * Internal Text APIs:: 10421 * Internal Text APIs::
10393 * Coding for Mule:: 10422 * Coding for Mule::
10394 * CCL:: 10423 * CCL::
10395 * Microsoft Windows-Related Multilingual Issues:: 10424 * Microsoft Windows-Related Multilingual Issues::
10396 * Modules for Internationalization:: 10425 * Modules for Internationalization::
10397 * The Great Mule Merge of March 2002:: 10426 * The Great Mule Merge of March 2002::
10398 @end menu 10427 @end menu
10399 10428
10400 @node Introduction to Multilingual Issues #1, Introduction to Multilingual Issues #2, Multilingual Support, Multilingual Support 10429 @node Introduction to Multilingual Issues #1, Introduction to Multilingual Issues #2, Multilingual Support, Multilingual Support
10401 @section Introduction to Multilingual Issues #1 10430 @section Introduction to Multilingual Issues #1
10402 @cindex introduction to multilingual issues #1 10431 @cindex introduction to multilingual issues #1
14100 definition with a call to the macro XETEXT. This appropriately makes a 14129 definition with a call to the macro XETEXT. This appropriately makes a
14101 string of either regular or wide chars, which is to say this string may be 14130 string of either regular or wide chars, which is to say this string may be
14102 prepended with an L (causing it to be a wide string) depending on 14131 prepended with an L (causing it to be a wide string) depending on
14103 XEUNICODE_P. 14132 XEUNICODE_P.
14104 14133
14105 @node Modules for Internationalization, The Great Mule Merge of March 2002, Microsoft Windows-Related Multilingual Issues, Multilingual Support 14134 @node Modules for Internationalization, The Great Mule Merge of March 2002, Microsoft Windows-Related Multilingual Issues, Multilingual Support
14106 @section Modules for Internationalization 14135 @section Modules for Internationalization
14107 @cindex modules for internationalization 14136 @cindex modules for internationalization
14108 @cindex internationalization, modules for 14137 @cindex internationalization, modules for
14109 14138
14110 @example 14139 @example
14206 Some effort has been put into proper markup for code and file names, and 14235 Some effort has been put into proper markup for code and file names, and
14207 some reorganization according to themes of revision. However, much 14236 some reorganization according to themes of revision. However, much
14208 remains to be done. 14237 remains to be done.
14209 14238
14210 @menu 14239 @menu
14211 * List of changed files in new Mule workspace:: 14240 * List of changed files in new Mule workspace::
14212 * Changes to the MULE subsystems:: 14241 * Changes to the MULE subsystems::
14213 * Pervasive changes throughout XEmacs sources:: 14242 * Pervasive changes throughout XEmacs sources::
14214 * Changes to specific subsystems:: 14243 * Changes to specific subsystems::
14215 * Mule changes by theme:: 14244 * Mule changes by theme::
14216 * File-coding rewrite:: 14245 * File-coding rewrite::
14217 * General User-Visible Changes:: 14246 * General User-Visible Changes::
14218 * General Lisp-Visible Changes:: 14247 * General Lisp-Visible Changes::
14219 * User documentation:: 14248 * User documentation::
14220 * General internal changes:: 14249 * General internal changes::
14221 * Ben's TODO list:: Probably obsolete. 14250 * Ben's TODO list:: Probably obsolete.
14222 * Ben's README:: Probably obsolete. 14251 * Ben's README:: Probably obsolete.
14223 @end menu 14252 @end menu
14224 14253
14225 14254
14226 @node List of changed files in new Mule workspace, Changes to the MULE subsystems, , The Great Mule Merge of March 2002 14255 @node List of changed files in new Mule workspace, Changes to the MULE subsystems, The Great Mule Merge of March 2002, The Great Mule Merge of March 2002
14227 @subsection List of changed files in new Mule workspace 14256 @subsection List of changed files in new Mule workspace
14228 14257
14229 This node lists the files that were touched in the Great Mule Merge. 14258 This node lists the files that were touched in the Great Mule Merge.
14230 14259
14231 @heading Deleted files 14260 @heading Deleted files
15305 business of injecting code should be last resort. we should try 15334 business of injecting code should be last resort. we should try
15306 @kbd{C-c} first, and if that doesn't work, then the next time we try to 15335 @kbd{C-c} first, and if that doesn't work, then the next time we try to
15307 interrupt the same process, use the injection method. 15336 interrupt the same process, use the injection method.
15308 @end itemize 15337 @end itemize
15309 15338
15310 @node Ben's README, , Ben's TODO list, The Great Mule Merge of March 2002 15339 @node Ben's README, , Ben's TODO list, The Great Mule Merge of March 2002
15311 @subsection Ben's README (probably obsolete) 15340 @subsection Ben's README (probably obsolete)
15312 15341
15313 These notes substantially overlap those in @ref{Ben's TODO list}. They 15342 These notes substantially overlap those in @ref{Ben's TODO list}. They
15314 should probably be combined. 15343 should probably be combined.
15315 15344
17174 @menu 17203 @menu
17175 * Introduction to Consoles; Devices; Frames; Windows:: 17204 * Introduction to Consoles; Devices; Frames; Windows::
17176 * Point:: 17205 * Point::
17177 * Window Hierarchy:: 17206 * Window Hierarchy::
17178 * The Window Object:: 17207 * The Window Object::
17208 * Creating a New Console/Device/Frame Type::
17179 * Modules for the Basic Displayable Lisp Objects:: 17209 * Modules for the Basic Displayable Lisp Objects::
17180 @end menu 17210 @end menu
17181 17211
17182 @node Introduction to Consoles; Devices; Frames; Windows, Point, Consoles; Devices; Frames; Windows, Consoles; Devices; Frames; Windows 17212 @node Introduction to Consoles; Devices; Frames; Windows, Point, Consoles; Devices; Frames; Windows, Consoles; Devices; Frames; Windows
17183 @section Introduction to Consoles; Devices; Frames; Windows 17213 @section Introduction to Consoles; Devices; Frames; Windows
17343 frames have no root window, and the @code{next} of the minibuffer window 17373 frames have no root window, and the @code{next} of the minibuffer window
17344 is @code{nil} but the @code{prev} points to itself. (#### This is an 17374 is @code{nil} but the @code{prev} points to itself. (#### This is an
17345 artifact that should be fixed.) 17375 artifact that should be fixed.)
17346 @end enumerate 17376 @end enumerate
17347 17377
17348 @node The Window Object, Modules for the Basic Displayable Lisp Objects, Window Hierarchy, Consoles; Devices; Frames; Windows 17378 @node The Window Object, Creating a New Console/Device/Frame Type, Window Hierarchy, Consoles; Devices; Frames; Windows
17349 @section The Window Object 17379 @section The Window Object
17350 @cindex window object, the 17380 @cindex window object, the
17351 @cindex object, the window 17381 @cindex object, the window
17352 17382
17353 Windows have the following accessible fields: 17383 Windows have the following accessible fields:
17450 If the region (or part of it) is highlighted in this window, this field 17480 If the region (or part of it) is highlighted in this window, this field
17451 holds the mark position that made one end of that region. Otherwise, 17481 holds the mark position that made one end of that region. Otherwise,
17452 this field is @code{nil}. 17482 this field is @code{nil}.
17453 @end table 17483 @end table
17454 17484
17455 @node Modules for the Basic Displayable Lisp Objects, , The Window Object, Consoles; Devices; Frames; Windows 17485
17486 @node Creating a New Console/Device/Frame Type, Modules for the Basic Displayable Lisp Objects, The Window Object, Consoles; Devices; Frames; Windows
17487 @section Creating a New Console, Device, or Frame Type
17488 @cindex creating a new console type
17489 @cindex console type, creating a new
17490 @cindex creating a new device type
17491 @cindex device type, creating a new
17492 @cindex creating a new frame type
17493 @cindex frame type, creating a new
17494
17495 Unfortunately, at the present time, only the console abstraction is at
17496 all well-maintained. Device and frame internals are referred to from
17497 many places in the redisplay and console code. The best that can be
17498 done therefore is to create a whole new console type, even though much
17499 code will be shared. (Ben Wing has complained about the code
17500 duplication in the GTK+ v1 console, and probably would not be happy with
17501 the unpublished Qt console or Andrew Choi's Carbon console, but it's
17502 hard to see how those consoles could have been done better without
17503 fixing the abstractions in the X (actually Xt), MS Windows, and tty
17504 consoles as well as doing a complete refactoring of the console, device,
17505 and frame code.)
17506
17507 What is desireable is sharing console, device, and frame methods across
17508 platforms in a more general way, reducing the amount of duplicated code
17509 by pulling it back into the redisplay engine proper or the Lisp modules
17510 as appropriate. For example, we should be able to use
17511 @samp{make-frame-on-device} to share a single X connection among GTK, X,
17512 and Xft frames. Xft is partially implemented, but GTK would be much
17513 harder (impossible?) because it has its own event loop. (Xft shares the
17514 Xt event loop with the X console.)
17515
17516 The way all methods get added to the console type is uncool. A console
17517 should be a composite, which indicates a collection of I/O resources
17518 ``used together.'' It should indicate where operations that change
17519 ``focus'' search for targets, @emph{i.e.}, by default new frames are
17520 created on the selected device of the console where the input that
17521 invoked the command was received, @samp{pop-to-buffer-other-window} only
17522 considers existing windows on the same device of the same console,
17523 @emph{etc.} But it should be possible to assemble consoles out of
17524 component input channels, imaging devices, and multimedia (audio)
17525 channels.
17526
17527 The following notes may provide some guidance to those who wish to
17528 create new console types (@emph{i.e.}, port the redisplay code to a new
17529 platform). They are based on an unsuccessful attempt to refactor the
17530 Xft code into a new console type while sharing most routines with the X
17531 console. (For clarification or suggestions, feel free to write
17532 @email{stephen@@xemacs.org,Stephen Turnbull}.)
17533
17534 The first thing to realize is that the naming of many modules obscures
17535 their relationship to the console abstraction. For example, the
17536 @file{objects-@var{console-type}}, @file{redisplay-@var{console-type}},
17537 and @file{glyphs-@var{console-type}} series of modules have nothing to
17538 do with Lisp objects and little to do with redisplay, respectively.
17539 Rather they implement abstractions used for rendering on each console
17540 type, such as fonts and colors (@file{objects}) and string and graphics
17541 drawing primitives (@file{rendering}). These modules are conceptually
17542 part of the console implementations, not part of redisplay or Lisp.
17543
17544 Public methods of a console are implemented as C functions declared
17545 @code{static}, following a rigid naming convention:
17546 @samp{@var{console-type}_@var{method-name}}. Methods are bound to the
17547 console type in the @samp{console_type_create_@var{file}} functions for
17548 each console component (console, device, and frame) using the
17549 @samp{CONSOLE_HAS_METHOD} family of macros. Methods for displaying
17550 images are bound using the @samp{IIFORMAT_HAS_DEVMETHOD} family of
17551 macros. Methods are invoked using the @samp{CONMETH}, @samp{DEVMETH},
17552 and @samp{FRAMEMETH} families of macros, which look up the relevant
17553 methods in the object's table of methods.
17554
17555 @strong{N.B.} All of the object tables are actually references to
17556 console method tables. To create a variant of an existing console,
17557 there is a @samp{CONSOLE_INHERITS_METHOD} constructor, but this actually
17558 constructs the name of the parent's method pointer and stores in the
17559 derived console type's method table. Of course this is time-efficient,
17560 and since there are few console types it is a neglible waste of space.
17561 However in practice this may have contributed to breaking the various
17562 abstractions, and the variant console must be coded in the same file as
17563 the parent (because the methods are static). Another minor symptom of
17564 the incompleteness of the abstraction is the fact that the API for
17565 inheritance of device methods for image formats is named
17566 @samp{IIFORMAT_HAS_SHARED_METHOD}, although the semantics are identical.
17567
17568 One problem encountered in attempting to create an Xft console type as a
17569 derivative of the X console type was that there is no support for such
17570 union types in the consistency-checking code, whether for the
17571 fundamental Lisp consistency checks (the @samp{CHECK_SOMETHING} family
17572 of macros) or for the error-checking variants of many functions. These
17573 APIs all simply check for the apparent console type, which is a single
17574 symbol (or enumerator).
17575
17576 To create a new console with mostly new methods, it's probably best to
17577 copy all of the @file{@var{function}-@var{console-type}} files from a
17578 similar console (or several, if the new console type seems like a
17579 combination of several existing console types), renaming the files by
17580 substituting @var{new-console-type} for @var{console-type}. Then
17581 proceed in the obvious way by renaming methods from
17582 @samp{@var{console-type}_@var{method-name}} to
17583 @samp{@var{new-console-type}_@var{method-name}}, and implementing them.
17584
17585 Once you've done that, then the fun starts. Insert the initialization
17586 functions (@samp{syms_of_@var{file}}, @samp{vars_of_@var{file}},
17587 @samp{console_type_create_@var{file}}, @emph{etc.}) in @samp{main_1} in
17588 @file{emacs.c}.
17589
17590 Add a device creation function @samp{make-@var{console-type}-device} in
17591 @file{device.el}. Add the device type to the calls to
17592 @samp{Face-frob-property} in @file{faces.el}, as well as calls to the
17593 device initializer functions for devices and frames, and ``additional
17594 frobbing'' in that file.
17595
17596 You may wish to add an option to force the initial frame to that device
17597 type to @file{emacs.c}. Don't forget to document it in the command help
17598 function in @file{startup.el}.
17599
17600 You may need to add support for your console type in
17601 @samp{init_event_stream} in @file{event-stream.c}.
17602
17603 If your console has a different UI for fonts or colors, or adds new
17604 capability, you may need to add a @file{@var{console-type}-faces.el}
17605 file, or add code to the @file{@var{parent-type}-faces.el} file, to
17606 support new font or color capability. Probably initialization code in
17607 @file{faces.c} will be needed too.
17608
17609 A check for the console type is probably needed in @samp{init_redisplay}
17610 in @file{redisplay.c}.
17611
17612 Ditto for the @file{@var{console-type}-init.el} file.
17613
17614 Don't forget that Emacs windows are console-dependent, too. At least a
17615 @samp{WINDOW_@var{console-type}_P}-checking macro should be added in
17616 @file{window-impl.h}.
17617
17618 Note that this project failed; there are probably many other details to
17619 be implemented that I didn't get to. But don't let that stop you!
17620
17621
17622 @node Modules for the Basic Displayable Lisp Objects, , Creating a New Console/Device/Frame Type, Consoles; Devices; Frames; Windows
17456 @section Modules for the Basic Displayable Lisp Objects 17623 @section Modules for the Basic Displayable Lisp Objects
17457 @cindex modules for the basic displayable Lisp objects 17624 @cindex modules for the basic displayable Lisp objects
17458 @cindex displayable Lisp objects, modules for the basic 17625 @cindex displayable Lisp objects, modules for the basic
17459 @cindex Lisp objects, modules for the basic displayable 17626 @cindex Lisp objects, modules for the basic displayable
17460 @cindex objects, modules for the basic displayable Lisp 17627 @cindex objects, modules for the basic displayable Lisp
17599 associated resources in the window system (the window system knows only 17766 associated resources in the window system (the window system knows only
17600 about the frame; no child windows or anything are used for XEmacs 17767 about the frame; no child windows or anything are used for XEmacs
17601 windows), there is no device-type-specific code here; all of that code 17768 windows), there is no device-type-specific code here; all of that code
17602 is part of the redisplay mechanism or the code for particular object 17769 is part of the redisplay mechanism or the code for particular object
17603 types such as scrollbars. 17770 types such as scrollbars.
17771
17604 17772
17605 @node The Redisplay Mechanism, Extents, Consoles; Devices; Frames; Windows, Top 17773 @node The Redisplay Mechanism, Extents, Consoles; Devices; Frames; Windows, Top
17606 @chapter The Redisplay Mechanism 17774 @chapter The Redisplay Mechanism
17607 @cindex redisplay mechanism, the 17775 @cindex redisplay mechanism, the
17608 17776
20402 The name of the terminal that the subprocess is using, 20570 The name of the terminal that the subprocess is using,
20403 or @code{nil} if it is using pipes. 20571 or @code{nil} if it is using pipes.
20404 @end table 20572 @end table
20405 20573
20406 @menu 20574 @menu
20407 * Ben's separate stderr notes:: Probably obsolete. 20575 * Ben's separate stderr notes:: Probably obsolete.
20408 @end menu 20576 @end menu
20409 20577
20410 20578
20411 @node Ben's separate stderr notes, , , Subprocesses 20579 @node Ben's separate stderr notes, , Subprocesses, Subprocesses
20412 @subsection Ben's separate stderr notes (probably obsolete) 20580 @subsection Ben's separate stderr notes (probably obsolete)
20413 20581
20414 This node contains some notes that Ben kept on his separate subprocess 20582 This node contains some notes that Ben kept on his separate subprocess
20415 workspace. These notes probably describe changes and features that have 20583 workspace. These notes probably describe changes and features that have
20416 already been included in XEmacs 21.5; somebody should check and/or ask 20584 already been included in XEmacs 21.5; somebody should check and/or ask
20447 @menu 20615 @menu
20448 * Different kinds of Windows environments:: 20616 * Different kinds of Windows environments::
20449 * Windows Build Flags:: 20617 * Windows Build Flags::
20450 * Windows I18N Introduction:: 20618 * Windows I18N Introduction::
20451 * Modules for Interfacing with MS Windows:: 20619 * Modules for Interfacing with MS Windows::
20452 * CHANGES from 21.4-windows branch:: Probably obsolete. 20620 * CHANGES from 21.4-windows branch:: Probably obsolete.
20453 @end menu 20621 @end menu
20454 20622
20455 @node Different kinds of Windows environments, Windows Build Flags, Interface to MS Windows, Interface to MS Windows 20623 @node Different kinds of Windows environments, Windows Build Flags, Interface to MS Windows, Interface to MS Windows
20456 @section Different kinds of Windows environments 20624 @section Different kinds of Windows environments
20457 @cindex different kinds of Windows environments 20625 @cindex different kinds of Windows environments
20976 @item intl-auto-encap-win32.h 21144 @item intl-auto-encap-win32.h
20977 Auto-generated Unicode encapsulation headers 21145 Auto-generated Unicode encapsulation headers
20978 @end table 21146 @end table
20979 21147
20980 21148
20981 @node CHANGES from 21.4-windows branch, , Modules for Interfacing with MS Windows, Interface to MS Windows 21149 @node CHANGES from 21.4-windows branch, , Modules for Interfacing with MS Windows, Interface to MS Windows
20982 @section CHANGES from 21.4-windows branch (probably obsolete) 21150 @section CHANGES from 21.4-windows branch (probably obsolete)
20983 21151
20984 This node contains the @file{CHANGES-msw} log that Andy Piper kept while 21152 This node contains the @file{CHANGES-msw} log that Andy Piper kept while
20985 he was maintaining the Windows branch of 21.4. These changes have 21153 he was maintaining the Windows branch of 21.4. These changes have
20986 (presumably) long since been merged to both 21.4 and 21.5, but let's not 21154 (presumably) long since been merged to both 21.4 and 21.5, but let's not
26739 true and is false. (Note: the optimization detailed in this item is 26907 true and is false. (Note: the optimization detailed in this item is
26740 probably not worth doing on the first pass.) 26908 probably not worth doing on the first pass.)
26741 26909
26742 @end itemize 26910 @end itemize
26743 26911
26744 @node Future Work -- Lisp Engine Replacement, Future Work -- Better Rendering Support, Future Work -- Making Elisp Function Calls Faster, Future Work 26912 @node Future Work -- Lisp Engine Replacement, Future Work -- Better Rendering Support, Future Work -- Making Elisp Function Calls Faster, Future Work
26745 @section Future Work -- Lisp Engine Replacement 26913 @section Future Work -- Lisp Engine Replacement
26746 @cindex future work, lisp engine replacement 26914 @cindex future work, lisp engine replacement
26747 @cindex lisp engine replacement, future work 26915 @cindex lisp engine replacement, future work
26748 26916
26749 @menu 26917 @menu
27352 work properly so that it could be relied upon, and a lot of things 27520 work properly so that it could be relied upon, and a lot of things
27353 could "just work". 27521 could "just work".
27354 27522
27355 27523
27356 27524
27357 @node Future Work -- Better Rendering Support, , Future Work -- Lisp Engine Replacement, Future Work 27525 @node Future Work -- Better Rendering Support, , Future Work -- Lisp Engine Replacement, Future Work
27358 @section Future Work -- Better Rendering Support 27526 @section Future Work -- Better Rendering Support
27359 @cindex future work, better rendering support 27527 @cindex future work, better rendering support
27360 @cindex better rendering support, future work 27528 @cindex better rendering support, future work
27361 27529
27362 This section was written by Stephen Turnbull <stephen@@xemacs.org>, so 27530 This section was written by Stephen Turnbull <stephen@@xemacs.org>, so
27385 this point a (private) CVS branch is available for Stephen's patch 27553 this point a (private) CVS branch is available for Stephen's patch
27386 (branch point tag @samp{sjt-xft-bp}, branch tag @samp{sjt-xft}), and 27554 (branch point tag @samp{sjt-xft-bp}, branch tag @samp{sjt-xft}), and
27387 one may be made available for the Knauel-Matthias patch soon. 27555 one may be made available for the Knauel-Matthias patch soon.
27388 27556
27389 @menu 27557 @menu
27390 * Better Rendering Support -- Review Criteria:: 27558 * Better Rendering Support -- Review Criteria::
27391 * Better Rendering Support -- Implementation:: 27559 * Better Rendering Support -- Implementation::
27392 * Better Rendering Support -- Current Status:: 27560 * Better Rendering Support -- Current Status::
27393 * Better Rendering Support -- Configuration with the Interim Patches:: 27561 * Better Rendering Support -- Configuration with the Interim Patches::
27394 * Better Rendering Support -- Modern Font Support:: 27562 * Better Rendering Support -- Modern Font Support::
27395 @end menu 27563 @end menu
27396 27564
27397 27565
27398 @node Better Rendering Support -- Review Criteria, Better Rendering Support -- Implementation, , Future Work -- Better Rendering Support 27566 @node Better Rendering Support -- Review Criteria, Better Rendering Support -- Implementation, Future Work -- Better Rendering Support, Future Work -- Better Rendering Support
27399 @subsection Better Rendering Support -- Review Criteria 27567 @subsection Better Rendering Support -- Review Criteria
27400 @cindex better rendering support, issues 27568 @cindex better rendering support, issues
27401 @cindex issues, better rendering support 27569 @cindex issues, better rendering support
27402 27570
27403 Of course it's ``unfair'' to demand that the implementers of a nice 27571 Of course it's ``unfair'' to demand that the implementers of a nice
27736 rechecked on Linux, where it was observed.) 27904 rechecked on Linux, where it was observed.)
27737 @end itemize 27905 @end itemize
27738 27906
27739 27907
27740 27908
27741 @node Better Rendering Support -- Modern Font Support, , Better Rendering Support -- Configuration with the Interim Patches, Future Work -- Better Rendering Support 27909 @node Better Rendering Support -- Modern Font Support, , Better Rendering Support -- Configuration with the Interim Patches, Future Work -- Better Rendering Support
27742 @subsection Better Rendering Support -- Modern Font Support 27910 @subsection Better Rendering Support -- Modern Font Support
27743 27911
27744 @c Maybe eventually all these @cindexes should be spread about? 27912 @c Maybe eventually all these @cindexes should be spread about?
27745 @cindex fonts 27913 @cindex fonts
27746 @cindex fonts, scalable 27914 @cindex fonts, scalable
27782 minimal configuration} is defined that ensures that at least 27950 minimal configuration} is defined that ensures that at least
27783 @emph{serif}, @emph{sans-serif}, and @emph{monospace} fonts are 27951 @emph{serif}, @emph{sans-serif}, and @emph{monospace} fonts are
27784 available on all @file{fontconfig} systems. 27952 available on all @file{fontconfig} systems.
27785 27953
27786 @menu 27954 @menu
27787 * Modern Font Support -- Font Concepts:: GUI devices, fonts, glyphs, rendering. 27955 * Modern Font Support -- Font Concepts:: GUI devices, fonts, glyphs, rendering.
27788 * Modern Font Support -- fontconfig:: Querying and selecting fonts. 27956 * Modern Font Support -- fontconfig:: Querying and selecting fonts.
27789 * Modern Font Support -- Xft:: Rendering fonts on X11. 27957 * Modern Font Support -- Xft:: Rendering fonts on X11.
27790 @end menu 27958 @end menu
27791 27959
27792 @node Modern Font Support -- Font Concepts, Modern Font Support -- fontconfig, , Better Rendering Support -- Modern Font Support 27960 @node Modern Font Support -- Font Concepts, Modern Font Support -- fontconfig, Better Rendering Support -- Modern Font Support, Better Rendering Support -- Modern Font Support
27793 @subsubsection Modern Font Support -- Font Concepts 27961 @subsubsection Modern Font Support -- Font Concepts
27794 27962
27795 In modern systems, displays are invariably @dfn{raster graphic devices}, 27963 In modern systems, displays are invariably @dfn{raster graphic devices},
27796 which present an abstract interface of @dfn{pixel array} where each 27964 which present an abstract interface of @dfn{pixel array} where each
27797 @dfn{pixel value} is a color, and each pixel is individually mutable, 27965 @dfn{pixel value} is a color, and each pixel is individually mutable,
28199 Regular expression matching XLFD font names. 28367 Regular expression matching XLFD font names.
28200 @end defvar 28368 @end defvar
28201 28369
28202 28370
28203 28371
28204 @node Modern Font Support -- Xft, , Modern Font Support -- fontconfig, Better Rendering Support -- Modern Font Support 28372 @node Modern Font Support -- Xft, , Modern Font Support -- fontconfig, Better Rendering Support -- Modern Font Support
28205 @subsubsection Modern Font Support -- fontconfig 28373 @subsubsection Modern Font Support -- fontconfig
28206 28374
28207 IIRC, we don't really provide any @file{Xft} APIs at the LISP level yet. 28375 IIRC, we don't really provide any @file{Xft} APIs at the LISP level yet.
28208 28376
28209 28377