Mercurial > hg > xemacs-beta
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 |