aboutsummaryrefslogtreecommitdiffstats
path: root/src/buffer.h
diff options
context:
space:
mode:
authorGerd Moellmann2000-04-24 13:54:35 +0000
committerGerd Moellmann2000-04-24 13:54:35 +0000
commit82b911fda555d98b7c5339574fad4c69976b839e (patch)
treeb7f3c1132fcd27304c42137e618cfadd51342349 /src/buffer.h
parentd365f5bb0b02c5dbc4576ef149d127f4d8573c3d (diff)
downloademacs-82b911fda555d98b7c5339574fad4c69976b839e.tar.gz
emacs-82b911fda555d98b7c5339574fad4c69976b839e.zip
(struct buffer): Add extra_line_spacing, remove extra2
and extra3.
Diffstat (limited to 'src/buffer.h')
-rw-r--r--src/buffer.h585
1 files changed, 294 insertions, 291 deletions
diff --git a/src/buffer.h b/src/buffer.h
index 7c17e9899ef..bc15a0632e5 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -436,306 +436,309 @@ struct buffer_text
436/* This is the structure that the buffer Lisp object points to. */ 436/* This is the structure that the buffer Lisp object points to. */
437 437
438struct buffer 438struct buffer
439 { 439{
440 /* Everything before the `name' slot must be of a non-Lisp_Object type, 440 /* Everything before the `name' slot must be of a non-Lisp_Object type,
441 and every slot after `name' must be a Lisp_Object. 441 and every slot after `name' must be a Lisp_Object.
442 442
443 Check out mark_buffer (alloc.c) to see why. */ 443 Check out mark_buffer (alloc.c) to see why. */
444 444
445 EMACS_INT size; 445 EMACS_INT size;
446 446
447 /* Next buffer, in chain of all buffers including killed buffers. 447 /* Next buffer, in chain of all buffers including killed buffers.
448 This chain is used only for garbage collection, in order to 448 This chain is used only for garbage collection, in order to
449 collect killed buffers properly. 449 collect killed buffers properly.
450 Note that vectors and most pseudovectors are all on one chain, 450 Note that vectors and most pseudovectors are all on one chain,
451 but buffers are on a separate chain of their own. */ 451 but buffers are on a separate chain of their own. */
452 struct buffer *next; 452 struct buffer *next;
453 453
454 /* This structure holds the coordinates of the buffer contents 454 /* This structure holds the coordinates of the buffer contents
455 in ordinary buffers. In indirect buffers, this is not used. */ 455 in ordinary buffers. In indirect buffers, this is not used. */
456 struct buffer_text own_text; 456 struct buffer_text own_text;
457 457
458 /* This points to the `struct buffer_text' that used for this buffer. 458 /* This points to the `struct buffer_text' that used for this buffer.
459 In an ordinary buffer, this is the own_text field above. 459 In an ordinary buffer, this is the own_text field above.
460 In an indirect buffer, this is the own_text field of another buffer. */ 460 In an indirect buffer, this is the own_text field of another buffer. */
461 struct buffer_text *text; 461 struct buffer_text *text;
462 462
463 /* Char position of point in buffer. */ 463 /* Char position of point in buffer. */
464 int pt; 464 int pt;
465 /* Byte position of point in buffer. */ 465 /* Byte position of point in buffer. */
466 int pt_byte; 466 int pt_byte;
467 /* Char position of beginning of accessible range. */ 467 /* Char position of beginning of accessible range. */
468 int begv; 468 int begv;
469 /* Byte position of beginning of accessible range. */ 469 /* Byte position of beginning of accessible range. */
470 int begv_byte; 470 int begv_byte;
471 /* Char position of end of accessible range. */ 471 /* Char position of end of accessible range. */
472 int zv; 472 int zv;
473 /* Byte position of end of accessible range. */ 473 /* Byte position of end of accessible range. */
474 int zv_byte; 474 int zv_byte;
475 475
476 /* In an indirect buffer, this points to the base buffer. 476 /* In an indirect buffer, this points to the base buffer.
477 In an ordinary buffer, it is 0. */ 477 In an ordinary buffer, it is 0. */
478 struct buffer *base_buffer; 478 struct buffer *base_buffer;
479 479
480 /* A non-zero value in slot IDX means that per-buffer variable 480 /* A non-zero value in slot IDX means that per-buffer variable
481 with index IDX has a local value in this buffer. The index IDX 481 with index IDX has a local value in this buffer. The index IDX
482 for a buffer-local variable is stored in that variable's slot 482 for a buffer-local variable is stored in that variable's slot
483 in buffer_local_flags as a Lisp integer. If the index is -1, 483 in buffer_local_flags as a Lisp integer. If the index is -1,
484 this means the variable is always local in all buffers. */ 484 this means the variable is always local in all buffers. */
485#define MAX_PER_BUFFER_VARS 50 485#define MAX_PER_BUFFER_VARS 50
486 char local_flags[MAX_PER_BUFFER_VARS]; 486 char local_flags[MAX_PER_BUFFER_VARS];
487 487
488 /* Set to the modtime of the visited file when read or written. 488 /* Set to the modtime of the visited file when read or written.
489 -1 means visited file was nonexistent. 489 -1 means visited file was nonexistent.
490 0 means visited file modtime unknown; in no case complain 490 0 means visited file modtime unknown; in no case complain
491 about any mismatch on next save attempt. */ 491 about any mismatch on next save attempt. */
492 int modtime; 492 int modtime;
493 /* the value of text->modiff at the last auto-save. */ 493 /* the value of text->modiff at the last auto-save. */
494 int auto_save_modified; 494 int auto_save_modified;
495 /* The time at which we detected a failure to auto-save, 495 /* The time at which we detected a failure to auto-save,
496 Or -1 if we didn't have a failure. */ 496 Or -1 if we didn't have a failure. */
497 int auto_save_failure_time; 497 int auto_save_failure_time;
498 /* Position in buffer at which display started 498 /* Position in buffer at which display started
499 the last time this buffer was displayed. */ 499 the last time this buffer was displayed. */
500 int last_window_start; 500 int last_window_start;
501 501
502 /* Set nonzero whenever the narrowing is changed in this buffer. */ 502 /* Set nonzero whenever the narrowing is changed in this buffer. */
503 int clip_changed; 503 int clip_changed;
504 504
505 /* If the long line scan cache is enabled (i.e. the buffer-local 505 /* If the long line scan cache is enabled (i.e. the buffer-local
506 variable cache-long-line-scans is non-nil), newline_cache 506 variable cache-long-line-scans is non-nil), newline_cache
507 points to the newline cache, and width_run_cache points to the 507 points to the newline cache, and width_run_cache points to the
508 width run cache. 508 width run cache.
509 509
510 The newline cache records which stretches of the buffer are 510 The newline cache records which stretches of the buffer are
511 known *not* to contain newlines, so that they can be skipped 511 known *not* to contain newlines, so that they can be skipped
512 quickly when we search for newlines. 512 quickly when we search for newlines.
513 513
514 The width run cache records which stretches of the buffer are 514 The width run cache records which stretches of the buffer are
515 known to contain characters whose widths are all the same. If 515 known to contain characters whose widths are all the same. If
516 the width run cache maps a character to a value > 0, that value is 516 the width run cache maps a character to a value > 0, that value is
517 the character's width; if it maps a character to zero, we don't 517 the character's width; if it maps a character to zero, we don't
518 know what its width is. This allows compute_motion to process 518 know what its width is. This allows compute_motion to process
519 such regions very quickly, using algebra instead of inspecting 519 such regions very quickly, using algebra instead of inspecting
520 each character. See also width_table, below. */ 520 each character. See also width_table, below. */
521 struct region_cache *newline_cache; 521 struct region_cache *newline_cache;
522 struct region_cache *width_run_cache; 522 struct region_cache *width_run_cache;
523 523
524 /* Non-zero means don't use redisplay optimizations for 524 /* Non-zero means don't use redisplay optimizations for
525 displaying this buffer. */ 525 displaying this buffer. */
526 unsigned prevent_redisplay_optimizations_p : 1; 526 unsigned prevent_redisplay_optimizations_p : 1;
527 527
528 /* Changes in the buffer are recorded here for undo. 528 /* Changes in the buffer are recorded here for undo.
529 t means don't record anything. 529 t means don't record anything.
530 This information belongs to the base buffer of an indirect buffer, 530 This information belongs to the base buffer of an indirect buffer,
531 But we can't store it in the struct buffer_text 531 But we can't store it in the struct buffer_text
532 because local variables have to be right in the struct buffer. 532 because local variables have to be right in the struct buffer.
533 So we copy it around in set_buffer_internal. 533 So we copy it around in set_buffer_internal.
534 This comes before `name' because it is marked in a special way. */ 534 This comes before `name' because it is marked in a special way. */
535 Lisp_Object undo_list; 535 Lisp_Object undo_list;
536 536
537 /* Everything from here down must be a Lisp_Object */ 537 /* Everything from here down must be a Lisp_Object */
538 538
539 /* The name of this buffer. */ 539 /* The name of this buffer. */
540 Lisp_Object name; 540 Lisp_Object name;
541 541
542 /* The name of the file visited in this buffer, or nil. */ 542 /* The name of the file visited in this buffer, or nil. */
543 Lisp_Object filename; 543 Lisp_Object filename;
544 /* Dir for expanding relative file names. */ 544 /* Dir for expanding relative file names. */
545 Lisp_Object directory; 545 Lisp_Object directory;
546 /* True iff this buffer has been backed up (if you write to the 546 /* True iff this buffer has been backed up (if you write to the
547 visited file and it hasn't been backed up, then a backup will 547 visited file and it hasn't been backed up, then a backup will
548 be made). */ 548 be made). */
549 /* This isn't really used by the C code, so could be deleted. */ 549 /* This isn't really used by the C code, so could be deleted. */
550 Lisp_Object backed_up; 550 Lisp_Object backed_up;
551 /* Length of file when last read or saved. 551 /* Length of file when last read or saved.
552 This is not in the struct buffer_text 552 This is not in the struct buffer_text
553 because it's not used in indirect buffers at all. */ 553 because it's not used in indirect buffers at all. */
554 Lisp_Object save_length; 554 Lisp_Object save_length;
555 /* File name used for auto-saving this buffer. 555 /* File name used for auto-saving this buffer.
556 This is not in the struct buffer_text 556 This is not in the struct buffer_text
557 because it's not used in indirect buffers at all. */ 557 because it's not used in indirect buffers at all. */
558 Lisp_Object auto_save_file_name; 558 Lisp_Object auto_save_file_name;
559 559
560 /* Non-nil if buffer read-only. */ 560 /* Non-nil if buffer read-only. */
561 Lisp_Object read_only; 561 Lisp_Object read_only;
562 /* "The mark". This is a marker which may 562 /* "The mark". This is a marker which may
563 point into this buffer or may point nowhere. */ 563 point into this buffer or may point nowhere. */
564 Lisp_Object mark; 564 Lisp_Object mark;
565 565
566 /* Alist of elements (SYMBOL . VALUE-IN-THIS-BUFFER) 566 /* Alist of elements (SYMBOL . VALUE-IN-THIS-BUFFER)
567 for all per-buffer variables of this buffer. */ 567 for all per-buffer variables of this buffer. */
568 Lisp_Object local_var_alist; 568 Lisp_Object local_var_alist;
569 569
570 /* Symbol naming major mode (eg, lisp-mode). */ 570 /* Symbol naming major mode (eg, lisp-mode). */
571 Lisp_Object major_mode; 571 Lisp_Object major_mode;
572 /* Pretty name of major mode (eg, "Lisp"). */ 572 /* Pretty name of major mode (eg, "Lisp"). */
573 Lisp_Object mode_name; 573 Lisp_Object mode_name;
574 /* Mode line element that controls format of mode line. */ 574 /* Mode line element that controls format of mode line. */
575 Lisp_Object mode_line_format; 575 Lisp_Object mode_line_format;
576 576
577 /* Analogous to mode_line_format for the line displayed at the top 577 /* Analogous to mode_line_format for the line displayed at the top
578 of windows. Nil means don't display that line. */ 578 of windows. Nil means don't display that line. */
579 Lisp_Object header_line_format; 579 Lisp_Object header_line_format;
580 580
581 /* Keys that are bound local to this buffer. */ 581 /* Keys that are bound local to this buffer. */
582 Lisp_Object keymap; 582 Lisp_Object keymap;
583 /* This buffer's local abbrev table. */ 583 /* This buffer's local abbrev table. */
584 Lisp_Object abbrev_table; 584 Lisp_Object abbrev_table;
585 /* This buffer's syntax table. */ 585 /* This buffer's syntax table. */
586 Lisp_Object syntax_table; 586 Lisp_Object syntax_table;
587 /* This buffer's category table. */ 587 /* This buffer's category table. */
588 Lisp_Object category_table; 588 Lisp_Object category_table;
589 589
590 /* Values of several buffer-local variables */ 590 /* Values of several buffer-local variables */
591 /* tab-width is buffer-local so that redisplay can find it 591 /* tab-width is buffer-local so that redisplay can find it
592 in buffers that are not current */ 592 in buffers that are not current */
593 Lisp_Object case_fold_search; 593 Lisp_Object case_fold_search;
594 Lisp_Object tab_width; 594 Lisp_Object tab_width;
595 Lisp_Object fill_column; 595 Lisp_Object fill_column;
596 Lisp_Object left_margin; 596 Lisp_Object left_margin;
597 /* Function to call when insert space past fill column. */ 597 /* Function to call when insert space past fill column. */
598 Lisp_Object auto_fill_function; 598 Lisp_Object auto_fill_function;
599 /* nil: text, t: binary. 599 /* nil: text, t: binary.
600 This value is meaningful only on certain operating systems. */ 600 This value is meaningful only on certain operating systems. */
601 /* Actually, we don't need this flag any more because end-of-line 601 /* Actually, we don't need this flag any more because end-of-line
602 is handled correctly according to the buffer-file-coding-system 602 is handled correctly according to the buffer-file-coding-system
603 of the buffer. Just keeping it for backward compatibility. */ 603 of the buffer. Just keeping it for backward compatibility. */
604 Lisp_Object buffer_file_type; 604 Lisp_Object buffer_file_type;
605 605
606 /* Case table for case-conversion in this buffer. 606 /* Case table for case-conversion in this buffer.
607 This char-table maps each char into its lower-case version. */ 607 This char-table maps each char into its lower-case version. */
608 Lisp_Object downcase_table; 608 Lisp_Object downcase_table;
609 /* Char-table mapping each char to its upper-case version. */ 609 /* Char-table mapping each char to its upper-case version. */
610 Lisp_Object upcase_table; 610 Lisp_Object upcase_table;
611 /* Char-table for conversion for case-folding search. */ 611 /* Char-table for conversion for case-folding search. */
612 Lisp_Object case_canon_table; 612 Lisp_Object case_canon_table;
613 /* Char-table of equivalences for case-folding search. */ 613 /* Char-table of equivalences for case-folding search. */
614 Lisp_Object case_eqv_table; 614 Lisp_Object case_eqv_table;
615 615
616 /* Non-nil means do not display continuation lines. */ 616 /* Non-nil means do not display continuation lines. */
617 Lisp_Object truncate_lines; 617 Lisp_Object truncate_lines;
618 /* Non-nil means display ctl chars with uparrow. */ 618 /* Non-nil means display ctl chars with uparrow. */
619 Lisp_Object ctl_arrow; 619 Lisp_Object ctl_arrow;
620 /* Non-nil means display text from right to left. */ 620 /* Non-nil means display text from right to left. */
621 Lisp_Object direction_reversed; 621 Lisp_Object direction_reversed;
622 /* Non-nil means do selective display; 622 /* Non-nil means do selective display;
623 see doc string in syms_of_buffer (buffer.c) for details. */ 623 see doc string in syms_of_buffer (buffer.c) for details. */
624 Lisp_Object selective_display; 624 Lisp_Object selective_display;
625#ifndef old 625#ifndef old
626 /* Non-nil means show ... at end of line followed by invisible lines. */ 626 /* Non-nil means show ... at end of line followed by invisible lines. */
627 Lisp_Object selective_display_ellipses; 627 Lisp_Object selective_display_ellipses;
628#endif 628#endif
629 /* Alist of (FUNCTION . STRING) for each minor mode enabled in buffer. */ 629 /* Alist of (FUNCTION . STRING) for each minor mode enabled in buffer. */
630 Lisp_Object minor_modes; 630 Lisp_Object minor_modes;
631 /* t if "self-insertion" should overwrite; `binary' if it should also 631 /* t if "self-insertion" should overwrite; `binary' if it should also
632 overwrite newlines and tabs - for editing executables and the like. */ 632 overwrite newlines and tabs - for editing executables and the like. */
633 Lisp_Object overwrite_mode; 633 Lisp_Object overwrite_mode;
634 /* non-nil means abbrev mode is on. Expand abbrevs automatically. */ 634 /* non-nil means abbrev mode is on. Expand abbrevs automatically. */
635 Lisp_Object abbrev_mode; 635 Lisp_Object abbrev_mode;
636 /* Display table to use for text in this buffer. */ 636 /* Display table to use for text in this buffer. */
637 Lisp_Object display_table; 637 Lisp_Object display_table;
638 /* t means the mark and region are currently active. */ 638 /* t means the mark and region are currently active. */
639 Lisp_Object mark_active; 639 Lisp_Object mark_active;
640 640
641 /* List of overlays that end at or before the current center, 641 /* List of overlays that end at or before the current center,
642 in order of end-position. */ 642 in order of end-position. */
643 Lisp_Object overlays_before; 643 Lisp_Object overlays_before;
644 644
645 /* List of overlays that end after the current center, 645 /* List of overlays that end after the current center,
646 in order of start-position. */ 646 in order of start-position. */
647 Lisp_Object overlays_after; 647 Lisp_Object overlays_after;
648 648
649 /* Position where the overlay lists are centered. */ 649 /* Position where the overlay lists are centered. */
650 Lisp_Object overlay_center; 650 Lisp_Object overlay_center;
651 651
652 /* Non-nil means the buffer contents are regarded as multi-byte 652 /* Non-nil means the buffer contents are regarded as multi-byte
653 form of characters, not a binary code. */ 653 form of characters, not a binary code. */
654 Lisp_Object enable_multibyte_characters; 654 Lisp_Object enable_multibyte_characters;
655 655
656 /* Coding system to be used for encoding the buffer contents on 656 /* Coding system to be used for encoding the buffer contents on
657 saving. */ 657 saving. */
658 Lisp_Object buffer_file_coding_system; 658 Lisp_Object buffer_file_coding_system;
659 659
660 /* List of symbols naming the file format used for visited file. */ 660 /* List of symbols naming the file format used for visited file. */
661 Lisp_Object file_format; 661 Lisp_Object file_format;
662 662
663 /* True if the newline position cache and width run cache are 663 /* True if the newline position cache and width run cache are
664 enabled. See search.c and indent.c. */ 664 enabled. See search.c and indent.c. */
665 Lisp_Object cache_long_line_scans; 665 Lisp_Object cache_long_line_scans;
666 666
667 /* If the width run cache is enabled, this table contains the 667 /* If the width run cache is enabled, this table contains the
668 character widths width_run_cache (see above) assumes. When we 668 character widths width_run_cache (see above) assumes. When we
669 do a thorough redisplay, we compare this against the buffer's 669 do a thorough redisplay, we compare this against the buffer's
670 current display table to see whether the display table has 670 current display table to see whether the display table has
671 affected the widths of any characters. If it has, we 671 affected the widths of any characters. If it has, we
672 invalidate the width run cache, and re-initialize width_table. */ 672 invalidate the width run cache, and re-initialize width_table. */
673 Lisp_Object width_table; 673 Lisp_Object width_table;
674 674
675 /* In an indirect buffer, or a buffer that is the base of an 675 /* In an indirect buffer, or a buffer that is the base of an
676 indirect buffer, this holds a marker that records 676 indirect buffer, this holds a marker that records
677 PT for this buffer when the buffer is not current. */ 677 PT for this buffer when the buffer is not current. */
678 Lisp_Object pt_marker; 678 Lisp_Object pt_marker;
679 679
680 /* In an indirect buffer, or a buffer that is the base of an 680 /* In an indirect buffer, or a buffer that is the base of an
681 indirect buffer, this holds a marker that records 681 indirect buffer, this holds a marker that records
682 BEGV for this buffer when the buffer is not current. */ 682 BEGV for this buffer when the buffer is not current. */
683 Lisp_Object begv_marker; 683 Lisp_Object begv_marker;
684 684
685 /* In an indirect buffer, or a buffer that is the base of an 685 /* In an indirect buffer, or a buffer that is the base of an
686 indirect buffer, this holds a marker that records 686 indirect buffer, this holds a marker that records
687 ZV for this buffer when the buffer is not current. */ 687 ZV for this buffer when the buffer is not current. */
688 Lisp_Object zv_marker; 688 Lisp_Object zv_marker;
689 689
690 /* This holds the point value before the last scroll operation. 690 /* This holds the point value before the last scroll operation.
691 Explicitly setting point sets this to nil. */ 691 Explicitly setting point sets this to nil. */
692 Lisp_Object point_before_scroll; 692 Lisp_Object point_before_scroll;
693 693
694 /* Truename of the visited file, or nil. */ 694 /* Truename of the visited file, or nil. */
695 Lisp_Object file_truename; 695 Lisp_Object file_truename;
696 696
697 /* Invisibility spec of this buffer. 697 /* Invisibility spec of this buffer.
698 t => any non-nil `invisible' property means invisible. 698 t => any non-nil `invisible' property means invisible.
699 A list => `invisible' property means invisible 699 A list => `invisible' property means invisible
700 if it is memq in that list. */ 700 if it is memq in that list. */
701 Lisp_Object invisibility_spec; 701 Lisp_Object invisibility_spec;
702 702
703 /* This is the last window that was selected with this buffer in it, 703 /* This is the last window that was selected with this buffer in it,
704 or nil if that window no longer displays this buffer. */ 704 or nil if that window no longer displays this buffer. */
705 Lisp_Object last_selected_window; 705 Lisp_Object last_selected_window;
706 706
707 /* Incremented each time the buffer is displayed in a window. */ 707 /* Incremented each time the buffer is displayed in a window. */
708 Lisp_Object display_count; 708 Lisp_Object display_count;
709 709
710 /* Widths of left and right marginal areas for windows displaying 710 /* Widths of left and right marginal areas for windows displaying
711 this buffer. */ 711 this buffer. */
712 Lisp_Object left_margin_width, right_margin_width; 712 Lisp_Object left_margin_width, right_margin_width;
713 713
714 /* Non-nil means indicate lines not displaying text (in a style 714 /* Non-nil means indicate lines not displaying text (in a style
715 like vi). */ 715 like vi). */
716 Lisp_Object indicate_empty_lines; 716 Lisp_Object indicate_empty_lines;
717 717
718 /* Time stamp updated each time this buffer is displayed in a window. */ 718 /* Time stamp updated each time this buffer is displayed in a window. */
719 Lisp_Object display_time; 719 Lisp_Object display_time;
720 720
721 /* If scrolling the display because point is below the bottom of a 721 /* If scrolling the display because point is below the bottom of a
722 window showing this buffer, try to choose a window start so 722 window showing this buffer, try to choose a window start so
723 that point ends up this number of lines from the top of the 723 that point ends up this number of lines from the top of the
724 window. Nil means that scrolling method isn't used. */ 724 window. Nil means that scrolling method isn't used. */
725 Lisp_Object scroll_up_aggressively; 725 Lisp_Object scroll_up_aggressively;
726 726
727 /* If scrolling the display because point is above the top of a 727 /* If scrolling the display because point is above the top of a
728 window showing this buffer, try to choose a window start so 728 window showing this buffer, try to choose a window start so
729 that point ends up this number of lines from the bottom of the 729 that point ends up this number of lines from the bottom of the
730 window. Nil means that scrolling method isn't used. */ 730 window. Nil means that scrolling method isn't used. */
731 Lisp_Object scroll_down_aggressively; 731 Lisp_Object scroll_down_aggressively;
732 732
733 Lisp_Object cursor_type; 733 /* Desired cursor type in this buffer. See the doc string of
734 per-buffer variable `cursor-type'. */
735 Lisp_Object cursor_type;
736
737 /* An integer > 0 means put that number of pixels below text lines
738 in the display of this buffer. */
739 Lisp_Object extra_line_spacing;
740};
734 741
735 /* These are so we don't have to recompile everything
736 the next few times we add a new slot. */
737 Lisp_Object extra2, extra3;
738 };
739 742
740/* This points to the current buffer. */ 743/* This points to the current buffer. */
741 744