annotate src/intervals.h @ 1785:19755499df90

* window.c (window_internal_width): New function, which accounts for scrollbars if present. * lisp.h (window_internal_height, window_internal_width): Add extern declarations for these. * dispnew.c (direct_output_for_insert, direct_output_forward_char, buffer_posn_from_coords): Use window_internal_width instead of writing out its definition. * indent.c (compute_motion): Doc fix; mention scrollbars and window_internal_width. (pos_tab_offset, Fvertical_motion): Use window_internal_width instead of writing it out. * window.c (Fpos_visible_in_window_p, Fwindow_width, Fscroll_left, Fscroll_right): Same. * xdisp.c (redisplay, try_window, try_window_id, display_text_line): Same. * xdisp.c (display_string): Add new variable `f', to be W's frame. Use it to set desired_glyphs, and to get the frame's width to decide whether or not to draw vertical bars. * xdisp.c (display_text_line): If we're using vertical scrollbars, don't draw the vertical bars separating side-by-side windows. (display_string): Same thing. Draw spaces to fill in the part of the mode line that is under the scrollbar in partial-width windows. * xdisp.c (display_text_line): Use the usable internal width of the window, as calculated above, as the limit on the length of the overlay arrow's image, rather than using the window's width field, less one. * xdisp.c (redisplay): Call condemn_scrollbars_hook and judge_scrollbars_hook whenever they are set, not just when the frame has vertical scrollbars. * termhooks.h (mouse_position_hook): Doc fix. (set_vertical_scrollbar_hook): This doesn't return anything any more, and doesn't take a struct scrollbar * argument any more. (condemn_scrollbars_hook, redeem_scrollbar_hook, judge_scrollbars_hook): Doc fixes. * term.c (mouse_position_hook): Doc fix. (set_vertical_scrollbar_hook): This doesn't return anything any more. Doc fixes. * keyboard.c (kbd_buffer_get_event): Receive the scrollbar's window from *mouse_position_hook and pass it to make_lispy_movement, instead of working with a pointer to a struct scrollbar. (make_lispy_event): We don't need a window_from_scrollbar function anymore; we are given the window directly in *EVENT. Unify the code which generates text-area mouse clicks and scrollbar clicks; use the same code to distinguish clicks from drags on the scrollbar as in the text area. Distinguish clicks from drags by storing a copy of the lispy position list returned as part of the event. (button_down_location): Make this a lisp vector, rather than an array of random structures. (struct mouse_position): Remove this; it's been replaced by a lisp list. (make_lispy_movement): Accept the scrollbar's window as a parameter, rather than the scrollbar itself. If FRAME is zero, assume that the other arguments are garbage. (syms_of_keyboard): No need to staticpro each window of button_down_location now; just initialize and staticpro it. * window.c (window_from_scrollbar): Function deleted; no longer needed. * xdisp.c (redisplay_window): Just pass the window to set_vertical_scrollbar hook; don't pass the scrollbar object too. * xterm.c (XTmouse_position): Don't return a pointer to the scrollbar for scrollbar motion; instead, return the scrollbar's window. * xdisp.c (echo_area_display): Move the assignment of f and the check for visibility out of the "#ifdef MULTI_FRAME" clause; they should work under any circumstances. * xdisp.c (redisplay_window): If we're not going to redisplay this window because it's a minibuffer whose contents have already been updated, go ahead and jump to the scrollbar refreshing code anyway; they still need to be updated. Initialize opoint, so it's known to be valid when we jump. Calculate the scrollbar settings properly for minibuffers, no matter what they are displaying at the time. * xdisp.c (redisplay_windows): Don't restore the current buffer and its point before refreshing the scrollbars; we need the buffer accurate.
author Jim Blandy <jimb@redhat.com>
date Thu, 14 Jan 1993 15:18:53 +0000
parents 4cbe6db1041e
children 64a07c3362f1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1 /* Definitions and global variables for intervals.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
2 Copyright (C) 1990, 1992 Free Software Foundation, Inc.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
3
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
5
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8 the Free Software Foundation; either version 1, or (at your option)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9 any later version.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19
1287
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
20 #ifdef USE_TEXT_PROPERTIES
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21 #include "dispextern.h"
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
22
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
23 #define NULL_INTERVAL 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
24 #define INTERVAL_DEFAULT NULL_INTERVAL
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
25
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
26 /* These are macros for dealing with the interval tree. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
27
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
28 /* Size of the structure used to represent an interval */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
29 #define INTERVAL_SIZE (sizeof (struct interval))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
30
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
31 /* Size of a pointer to an interval structure */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
32 #define INTERVAL_PTR_SIZE (sizeof (struct interval *))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
33
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
34 /* True if an interval pointer is null, or is a Lisp_Buffer or
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
35 Lisp_String pointer (meaning it points to the owner of this
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36 interval tree.) */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 #define NULL_INTERVAL_P(i) ((i) == NULL_INTERVAL || \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
38 XTYPE ((Lisp_Object)(i)) == Lisp_Buffer || \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
39 XTYPE ((Lisp_Object)(i)) == Lisp_String)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
40
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
41 /* True if this interval has no right child. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
42 #define NULL_RIGHT_CHILD(i) (NULL_INTERVAL_P((i)->right))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
43
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44 /* True if this interval has no left child. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
45 #define NULL_LEFT_CHILD(i) (NULL_INTERVAL_P((i)->left))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
46
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
47 /* True if this interval has no parent. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
48 #define NULL_PARENT(i) (NULL_INTERVAL_P((i)->parent))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
49
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
50 /* True if this interval is the left child of some other interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
51 #define AM_LEFT_CHILD(i) (! NULL_INTERVAL_P ((i)->parent) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
52 && (i)->parent->left == (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
53
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
54 /* True if this interval is the right ehild of some other interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
55 #define AM_RIGHT_CHILD(i) (! NULL_INTERVAL_P ((i)->parent) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
56 && (i)->parent->right == (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
57
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
58 /* True if this interval has no children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
59 #define LEAF_INTERVAL_P(i) ((i)->left == NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
60 && (i)->right == NULL_INTERVAL)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
61
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
62 /* True if this interval has no parent and is therefore the root. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
63 #define ROOT_INTERVAL_P(i) (NULL_PARENT (i))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
64
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
65 /* True if this interval is the only interval in the interval tree. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
66 #define ONLY_INTERVAL_P(i) (ROOT_INTERVAL_P((i)) && LEAF_INTERVAL_P ((i)))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
67
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
68 /* True if this interval has both left and right children. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
69 #define BOTH_KIDS_P(i) ((i)->left != NULL_INTERVAL \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
70 && (i)->right != NULL_INTERVAL)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
71
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
72 /* The total size of all text represented by this interval and all its
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
73 children in the tree. This is zero if the interval is null. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
74 #define TOTAL_LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (i)->total_length)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
75
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
76 /* The size of text represented by this interval alone. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
77 #define LENGTH(i) ((i) == NULL_INTERVAL ? 0 : (TOTAL_LENGTH ((i)) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
78 - TOTAL_LENGTH ((i)->right) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
79 - TOTAL_LENGTH ((i)->left)))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
80
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
81 /* The absolute index of the last character belonging to I. Note that
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
82 the position cache i->position must be valid for this to work. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
83 #define INTERVAL_LAST_POS(i) ((i)->position + LENGTH ((i)) - 1)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
84
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
85 /* The total size of the left subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
86 #define LEFT_TOTAL_LENGTH(i) ((i)->left ? (i)->left->total_length : 0)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
87
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
88 /* The total size of the right subtree of this interval. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
89 #define RIGHT_TOTAL_LENGTH(i) ((i)->right ? (i)->right->total_length : 0)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
90
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
91
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
92 /* These macros are for dealing with the interval properties. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
93
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
94 /* True if this is a default interval, which is the same as being null
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
95 or having no properties. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
96 #define DEFAULT_INTERVAL_P(i) (NULL_INTERVAL_P (i) || EQ ((i)->plist, Qnil))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
97
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
98 /* Reset this interval to its vanilla, or no-property state. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
99 #define RESET_INTERVAL(i) { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
100 (i)->total_length = (i)->position = 0; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
101 (i)->left = (i)->right = NULL_INTERVAL; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
102 (i)->parent = NULL_INTERVAL; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
103 (i)->write_protect = 0; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
104 (i)->visible = 0; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
105 (i)->front_sticky = (i)->rear_sticky = 0; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
106 (i)->plist = Qnil; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
107 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
108
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
109 /* Copy the cached property values of interval FROM to interval TO. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
110 #define COPY_INTERVAL_CACHE(from,to) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
111 { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
112 (to)->write_protect = (from)->write_protect; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
113 (to)->visible = (from)->visible; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
114 (to)->front_sticky = (from)->front_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
115 (to)->rear_sticky = (from)->rear_sticky; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
116 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
117
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
118 /* Copy only the set bits of FROM's cache. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
119 #define MERGE_INTERVAL_CACHE(from,to) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
120 { \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
121 if ((from)->write_protect) (to)->write_protect = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
122 if ((from)->visible) (to)->visible = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
123 if ((from)->front_sticky) (to)->front_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124 if ((from)->rear_sticky) (to)->rear_sticky = 1; \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
125 }
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
127 /* Macro determining whether the properties of an interval being
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
128 inserted should be merged with the properties of the text where
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
129 they are being inserted. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
130 #define MERGE_INSERTIONS(i) 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
131
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
132 /* Macro determining if an invisible interval should be displayed
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
133 as a special glyph, or not at all. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
134 #define DISPLAY_INVISIBLE_GLYPH(i) 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136 /* Is this interval visible? Replace later with cache access */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
137 #define INTERVAL_VISIBLE_P(i) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
138 (! NULL_INTERVAL_P (i) && ! NILP (Fmemq (Qinvisible, (i)->plist)))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
139
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
140 /* Is this interval writable? Replace later with cache access */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141 #define INTERVAL_WRITABLE_P(i) \
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
142 (! NULL_INTERVAL_P (i) && NILP (Fmemq (Qread_only, (i)->plist)))
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
143
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
144 /* Macros to tell whether insertions before or after this interval
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
145 should stick to it. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
146 #define FRONT_STICKY_P(i) ((i)->front_sticky != 0)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
147 #define END_STICKY_P(i) ((i)->rear_sticky != 0)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
149
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
150 /* Declared in alloc.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
151
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152 extern INTERVAL make_interval ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
153
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
154 /* Declared in intervals.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
155
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
156 extern Lisp_Object interval_balance_threshold;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
157
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
158 extern INTERVAL create_root_interval ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
159 extern void copy_properties ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
160 extern int intervals_equal ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
161 extern void traverse_intervals ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
162 extern INTERVAL split_interval_right (), split_interval_left ();
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
163 extern INLINE INTERVAL find_interval ();
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
164 extern INTERVAL next_interval (), previous_interval ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
165 extern INTERVAL merge_interval_left (), merge_interval_right ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
166 extern void delete_interval ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
167 extern INLINE void offset_intervals ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168 extern void graft_intervals_into_buffer ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
169 extern void set_point ();
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
170 extern INLINE void temp_set_point ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
171 extern void verify_interval_modification ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
172 extern INTERVAL balance_intervals ();
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
173 extern INLINE void copy_intervals_to_string ();
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
174 extern INTERVAL copy_intervals ();
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
175
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
176 /* Declared in textprop.c */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
177
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
178 /* Types of hooks. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
179 extern Lisp_Object Qmouse_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180 extern Lisp_Object Qmouse_entered;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 extern Lisp_Object Qpoint_left;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182 extern Lisp_Object Qpoint_entered;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 extern Lisp_Object Qmodification;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185 /* Visual properties text (including strings) may have. */
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 extern Lisp_Object Qforeground, Qbackground, Qfont, Qunderline, Qstipple;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187 extern Lisp_Object Qinvisible, Qread_only;
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
188
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
189 extern Lisp_Object Ftext_properties_at ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190 extern Lisp_Object Fnext_property_change (), Fprevious_property_change ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
191 extern Lisp_Object Fadd_text_properties (), Fset_text_properties ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
192 extern Lisp_Object Fremove_text_properties (), Ferase_text_properties ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
194 extern void syms_of_textprop ();
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
195
1287
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
196 #else /* don't support text properties */
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
198 #define NULL_INTERVAL_P(i) 1
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
199 #define INTERVAL_SIZE 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
200 #define INTERVAL_PTR_SIZE 0
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
201
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
202 #define copy_intervals_to_string(string,buffer,position,length)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 #define verify_interval_modification(buffer,start,end)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
204 #define insert_interval_copy(source,position,end,sink,at)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205 #define graft_intervals_into_buffer(tree,position,bufferptr)
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
206 #define offset_intervals(buffer,position,length)
1314
4cbe6db1041e * intervals.h: Declare `copy_intervals()'.
Joseph Arceneaux <jla@gnu.org>
parents: 1287
diff changeset
207 #define copy_intervals(tree,start,length)
1164
adfaeccad01d entered into RCS
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
208
1287
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
209 #define syms_of_textprop()
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
210
02bd1ea07b17 * intervals.h: Declare temp_set_point.
Joseph Arceneaux <jla@gnu.org>
parents: 1211
diff changeset
211 #endif /* don't support text properties */