home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1995-07-26 | 57.7 KB | 1,056 lines
tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) _________________________________________________________________ NNNNAAAAMMMMEEEE text - Create and manipulate text widgets SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS tttteeeexxxxtttt _p_a_t_h_N_a_m_e ?_o_p_t_i_o_n_s? SSSSTTTTAAAANNNNDDDDAAAARRRRDDDD OOOOPPPPTTTTIIIIOOOONNNNSSSS bbbbaaaacccckkkkggggrrrroooouuuunnnndddd ffffoooorrrreeeeggggrrrroooouuuunnnndddd iiiinnnnsssseeeerrrrttttWWWWiiiiddddtttthhhh sssseeeelllleeeeccccttttBBBBoooorrrrddddeeeerrrrWWWWiiiiddddtttthhhh bbbboooorrrrddddeeeerrrrWWWWiiiiddddtttthhhh iiiinnnnsssseeeerrrrttttBBBBaaaacccckkkkggggrrrroooouuuunnnndddd ppppaaaaddddXXXXsssseeeelllleeeeccccttttFFFFoooorrrreeeeggggrrrroooouuuunnnndddd ccccuuuurrrrssssoooorrrr iiiinnnnsssseeeerrrrttttBBBBoooorrrrddddeeeerrrrWWWWiiiiddddtttthhhh ppppaaaaddddYYYYsssseeeettttGGGGrrrriiiidddd eeeexxxxppppoooorrrrttttSSSSeeeelllleeeeccccttttiiiioooonnnn iiiinnnnsssseeeerrrrttttOOOOffffffffTTTTiiiimmmmeeee rrrreeeelllliiiieeeeffff yyyySSSSccccrrrroooollllllllCCCCoooommmmmmmmaaaannnndddd ffffoooonnnntttt iiiinnnnsssseeeerrrrttttOOOOnnnnTTTTiiiimmmmeeee sssseeeelllleeeeccccttttBBBBaaaacccckkkkggggrrrroooouuuunnnndddd See the ``options'' manual entry for details on the standard options. WWWWIIIIDDDDGGGGEEEETTTT----SSSSPPPPEEEECCCCIIIIFFFFIIIICCCC OOOOPPPPTTTTIIIIOOOONNNNSSSS Name: hhhheeeeiiiigggghhhhtttt Class: HHHHeeeeiiiigggghhhhtttt Command-Line Switch: ----hhhheeeeiiiigggghhhhtttt Specifies the desired height for the window, in units of characters. Must be at least one. Name: ssssttttaaaatttteeee Class: SSSSttttaaaatttteeee Command-Line Switch: ----ssssttttaaaatttteeee Specifies one of two states for the text: nnnnoooorrrrmmmmaaaallll or ddddiiiissssaaaabbbblllleeeedddd. If the text is disabled then characters may not be inserted or deleted and no insertion cursor will be displayed, even if the input focus is in the widget. Name: wwwwiiiiddddtttthhhh Class: WWWWiiiiddddtttthhhh Command-Line Switch: ----wwwwiiiiddddtttthhhh Specifies the desired width for the window in units of characters. If the font doesn't have a uniform width then the width of the character ``0'' is used in translating from character units to screen units. Name: wwwwrrrraaaapppp Class: WWWWrrrraaaapppp Command-Line Switch: ----wwwwrrrraaaapppp Specifies how to handle lines in the text that are too long to be displayed in a single line of the text's window. The value must be nnnnoooonnnneeee or cccchhhhaaaarrrr or wwwwoooorrrrdddd. A wrap mode of nnnnoooonnnneeee means that each line of text appears Page 1 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) as exactly one line on the screen; extra characters that don't fit on the screen are not displayed. In the other modes each line of text will be broken up into several screen lines if necessary to keep all the characters visible. In cccchhhhaaaarrrr mode a screen line break may occur after any character; in wwwwoooorrrrdddd mode a line break will only be made at word boundaries. _________________________________________________________________ DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN The tttteeeexxxxtttt command creates a new window (given by the _p_a_t_h_N_a_m_e argument) and makes it into a text widget. Additional options, described above, may be specified on the command line or in the option database to configure aspects of the text such as its default background color and relief. The tttteeeexxxxtttt command returns the path name of the new window. A text widget displays one or more lines of text and allows that text to be edited. Text widgets support three different kinds of annotations on the text, called tags, marks, and windows. Tags allow different portions of the text to be displayed with different fonts and colors. In addition, Tcl commands can be associated with tags so that commands are invoked when particular actions such as keystrokes and mouse button presses occur in particular ranges of the text. See TAGS below for more details. The second form of annotation consists of marks, which are floating markers in the text. Marks are used to keep track of various interesting positions in the text as it is edited. See MARKS below for more details. The third form of annotation allows arbitrary windows to be displayed in the text widget. See WINDOWS below for more details. IIIINNNNDDDDIIIICCCCEEEESSSS Many of the widget commands for texts take one or more indices as arguments. An index is a string used to indicate a particular place within a text, such as a place to insert characters or one endpoint of a range of characters to delete. Indices have the syntax _b_a_s_e _m_o_d_i_f_i_e_r _m_o_d_i_f_i_e_r _m_o_d_i_f_i_e_r ... Where _b_a_s_e gives a starting point and the _m_o_d_i_f_i_e_rs adjust the index from the starting point (e.g. move forward or backward one character). Every index must contain a _b_a_s_e, but the _m_o_d_i_f_i_e_rs are optional. Page 2 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) The _b_a_s_e for an index must have one of the following forms: _l_i_n_e...._c_h_a_r Indicates _c_h_a_r'th character on line _l_i_n_e. Lines are numbered from 1 for consistency with other UNIX programs that use this numbering scheme. Within a line, characters are numbered from 0. @@@@_x,,,,_y Indicates the character that covers the pixel whose x and y coordinates within the text's window are _x and _y. eeeennnndddd Indicates the last character in the text, which is always a newline character. _m_a_r_k Indicates the character just after the mark whose name is _m_a_r_k. _t_a_g....ffffiiiirrrrsssstttt Indicates the first character in the text that has been tagged with _t_a_g. This form generates an error if no characters are currently tagged with _t_a_g. _t_a_g....llllaaaasssstttt Indicates the character just after the last one in the text that has been tagged with _t_a_g. This form generates an error if no characters are currently tagged with _t_a_g. If modifiers follow the base index, each one of them must have one of the forms listed below. Keywords such as cccchhhhaaaarrrrssss and wwwwoooorrrrddddeeeennnndddd may be abbreviated as long as the abbreviation is unambiguous. ++++ _c_o_u_n_t cccchhhhaaaarrrrssss Adjust the index forward by _c_o_u_n_t characters, moving to later lines in the text if necessary. If there are fewer than _c_o_u_n_t characters in the text after the current index, then set the index to the last character in the text. Spaces on either side of _c_o_u_n_t are optional. ---- _c_o_u_n_t cccchhhhaaaarrrrssss Adjust the index backward by _c_o_u_n_t characters, moving to earlier lines in the text if necessary. If there are fewer than _c_o_u_n_t characters in the text before the current index, then set the index to the first character in the text. Spaces on either side of _c_o_u_n_t are optional. ++++ _c_o_u_n_t lllliiiinnnneeeessss Adjust the index forward by _c_o_u_n_t lines, retaining the same character position within the line. If there are fewer than _c_o_u_n_t lines after the line containing the Page 3 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) current index, then set the index to refer to the same character position on the last line of the text. Then, if the line is not long enough to contain a character at the indicated character position, adjust the character position to refer to the last character of the line (the newline). Spaces on either side of _c_o_u_n_t are optional. ---- _c_o_u_n_t lllliiiinnnneeeessss Adjust the index backward by _c_o_u_n_t lines, retaining the same character position within the line. If there are fewer than _c_o_u_n_t lines before the line containing the current index, then set the index to refer to the same character position on the first line of the text. Then, if the line is not long enough to contain a character at the indicated character position, adjust the character position to refer to the last character of the line (the newline). Spaces on either side of _c_o_u_n_t are optional. lllliiiinnnneeeessssttttaaaarrrrtttt Adjust the index to refer to the first character on the line. lllliiiinnnneeeeeeeennnndddd Adjust the index to refer to the last character on the line (the newline). wwwwoooorrrrddddssssttttaaaarrrrtttt Adjust the index to refer to the first character of the word containing the current index. A word consists of any number of adjacent characters that are letters, digits, or underscores, or a single character that is not one of these. wwwwoooorrrrddddeeeennnndddd Adjust the index to refer to the character just after the last one of the word containing the current index. If the current index refers to the last character of the text then it is not modified. If more than one modifier is present then they are applied in left-to-right order. For example, the index ``eeeennnndddd ---- 1111 cccchhhhaaaarrrrssss'' refers to the next-to-last character in the text and ``iiiinnnnsssseeeerrrrtttt wwwwoooorrrrddddssssttttaaaarrrrtttt ---- 1111 cccc'' refers to the character just before the first one in the word containing the insertion cursor. TTTTAAAAGGGGSSSS The first form of annotation in text widgets is a tag. A tag is a textual string that is associated with some of the Page 4 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) characters in a text. There may be any number of tags associated with characters in a text. Each tag may refer to a single character, a range of characters, or several ranges of characters. An individual character may have any number of tags associated with it. A priority order is defined among tags, and this order is used in implementing some of the tag-related functions described below. When a tag is defined (by associating it with characters or setting its display options or binding commands to it), it is given a priority higher than any existing tag. The priority order of tags may be redefined using the ``_p_a_t_h_N_a_m_e ttttaaaagggg rrrraaaaiiiisssseeee'' and ``_p_a_t_h_N_a_m_e ttttaaaagggg lllloooowwwweeeerrrr'' widget commands. Tags serve three purposes in text widgets. First, they control the way information is displayed on the screen. By default, characters are displayed as determined by the bbbbaaaacccckkkkggggrrrroooouuuunnnndddd, ffffoooonnnntttt, and ffffoooorrrreeeeggggrrrroooouuuunnnndddd options for the text widget. However, display options may be associated with individual tags using the ``_p_a_t_h_N_a_m_e ttttaaaagggg ccccoooonnnnffffiiiigggguuuurrrreeee'' widget command. If a character has been tagged, then the display options associated with the tag override the default display style. The following options are currently supported for tags: ----bbbbaaaacccckkkkggggrrrroooouuuunnnndddd _c_o_l_o_r _C_o_l_o_r specifies the background color to use for characters associated with the tag. It may have any of the forms accepted by TTTTkkkk____GGGGeeeettttCCCCoooolllloooorrrr. ----bbbbggggssssttttiiiipppppppplllleeee _b_i_t_m_a_p _B_i_t_m_a_p specifies a bitmap that is used as a stipple pattern for the background. It may have any of the forms accepted by TTTTkkkk____GGGGeeeettttBBBBiiiittttmmmmaaaapppp. If _b_i_t_m_a_p hasn't been specified, or if it is specified as an empty string, then a solid fill will be used for the background. ----bbbboooorrrrddddeeeerrrrwwwwiiiiddddtttthhhh _p_i_x_e_l_s _P_i_x_e_l_s specifies the width of a 3-D border to draw around the background. It may have any of the forms accepted by TTTTkkkk____GGGGeeeettttPPPPiiiixxxxeeeellllssss. This option is used in conjunction with the ----rrrreeeelllliiiieeeeffff option to give a 3-D appearance to the background for characters; it is ignored unless the ----bbbbaaaacccckkkkggggrrrroooouuuunnnndddd option has been set for the tag. ----ffffggggssssttttiiiipppppppplllleeee _b_i_t_m_a_p _B_i_t_m_a_p specifies a bitmap that is used as a stipple pattern when drawing text and other foreground information such as underlines. It may have any of the forms accepted by TTTTkkkk____GGGGeeeettttBBBBiiiittttmmmmaaaapppp. If _b_i_t_m_a_p hasn't been Page 5 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) specified, or if it is specified as an empty string, then a solid fill will be used. ----ffffoooonnnntttt _f_o_n_t_N_a_m_e _F_o_n_t_N_a_m_e is the name of a font to use for drawing characters. It may have any of the forms accepted by TTTTkkkk____GGGGeeeettttFFFFoooonnnnttttSSSSttttrrrruuuucccctttt. ----ffffoooorrrreeeeggggrrrroooouuuunnnndddd _c_o_l_o_r _C_o_l_o_r specifies the color to use when drawing text and other foreground information such as underlines. It may have any of the forms accepted by TTTTkkkk____GGGGeeeettttCCCCoooolllloooorrrr. ----rrrreeeelllliiiieeeeffff _r_e_l_i_e_f _R_e_l_i_e_f _s_p_e_c_i_f_i_e_s _t_h_e _3-_D _r_e_l_i_e_f _t_o _u_s_e _f_o_r _d_r_a_w_i_n_g _b_a_c_k_g_r_o_u_n_d_s, _i_n _a_n_y _o_f _t_h_e _f_o_r_m_s _a_c_c_e_p_t_e_d _b_y TTTTkkkk____GGGGeeeettttRRRReeeelllliiiieeeeffff. This option is used in conjunction with the ----bbbboooorrrrddddeeeerrrrwwwwiiiiddddtttthhhh option to give a 3-D appearance to the background for characters; it is ignored unless the ----bbbbaaaacccckkkkggggrrrroooouuuunnnndddd option has been set for the tag. ----uuuunnnnddddeeeerrrrlllliiiinnnneeee _b_o_o_l_e_a_n _B_o_o_l_e_a_n specifies whether or not to draw an underline underneath characters. It may have any of the forms accepted by TTTTkkkk____GGGGeeeettttBBBBoooooooolllleeeeaaaannnn. If a character has several tags associated with it, and if their display options conflict, then the options of the highest priority tag are used. If a particular display option hasn't been specified for a particular tag, or if it is specified as an empty string, then that option will never be used; the next-highest-priority tag's option will used instead. If no tag specifies a particular display optionl, then the default style for the widget will be used. The second purpose for tags is event bindings. You can associate bindings with a tag in much the same way you can associate bindings with a widget class: whenever particular X events occur on characters with the given tag, a given Tcl command will be executed. Tag bindings can be used to give behaviors to ranges of characters; among other things, this allows hypertext-like features to be implemented. For details, see the description of the ttttaaaagggg bbbbiiiinnnndddd widget command below. The third use for tags is in managing the selection. See THE SELECTION below. MMMMAAAARRRRKKKKSSSS The second form of annotation in text widgets is a mark. Marks are used for remembering particular places in a text. Page 6 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) They are something like tags, in that they have names and they refer to places in the file, but a mark isn't associated with particular characters. Instead, a mark is associated with the gap between two characters. Only a single position may be associated with a mark at any given time. If the characters around a mark are deleted the mark will still remain; it will just have new neighbor characters. In contrast, if the characters containing a tag are deleted then the tag will no longer have an association with characters in the file. Marks may be manipulated with the ``_p_a_t_h_N_a_m_e mmmmaaaarrrrkkkk'' widget command, and their current locations may be determined by using the mark name as an index in widget commands. The name space for marks is different from that for tags: the same name may be used for both a mark and a tag, but they will refer to different things. Two marks have special significance. First, the mark iiiinnnnsssseeeerrrrtttt is associated with the insertion cursor, as described under THE INSERTION CURSOR below. Second, the mark ccccuuuurrrrrrrreeeennnntttt is associated with the character closest to the mouse and is adjusted automatically to track the mouse position and any changes to the text in the widget (one exception: ccccuuuurrrrrrrreeeennnntttt is not updated in response to mouse motions if a mouse button is down; the update will be deferred until all mouse buttons have been released). Neither of these special marks may be unset. WWWWIIIINNNNDDDDOOOOWWWWSSSS The third form of annotation in text widgets is a window. Window support isn't implemented yet, but when it is it will be described here. TTTTHHHHEEEE SSSSEEEELLLLEEEECCCCTTTTIIIIOOOONNNN Text widgets support the standard X selection. Selection support is implemented via tags. If the eeeexxxxppppoooorrrrttttSSSSeeeelllleeeeccccttttiiiioooonnnn option for the text widget is true then the sssseeeellll tag will be associated with the selection: [1] Whenever characters are tagged with sssseeeellll the text widget will claim ownership of the selection. [2] Attempts to retrieve the selection will be serviced by the text widget, returning all the charaters with the sssseeeellll tag. [3] If the selection is claimed away by another application or by another window within this application, then the sssseeeellll tag will be removed from all characters in the Page 7 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) text. The sssseeeellll tag is automatically defined when a text widget is created, and it may not be deleted with the ``_p_a_t_h_N_a_m_e ttttaaaagggg ddddeeeelllleeeetttteeee'' widget command. Furthermore, the sssseeeelllleeeeccccttttBBBBaaaacccckkkkggggrrrroooouuuunnnndddd, sssseeeelllleeeeccccttttBBBBoooorrrrddddeeeerrrrWWWWiiiiddddtttthhhh, and sssseeeelllleeeeccccttttFFFFoooorrrreeeeggggrrrroooouuuunnnndddd options for the text widget are tied to the ----bbbbaaaacccckkkkggggrrrroooouuuunnnndddd, ----bbbboooorrrrddddeeeerrrrwwwwiiiiddddtttthhhh, and ----ffffoooorrrreeeeggggrrrroooouuuunnnndddd options for the sssseeeellll tag: changes in either will automatically be reflected in the other. TTTTHHHHEEEE IIIINNNNSSSSEEEERRRRTTTTIIIIOOOONNNN CCCCUUUURRRRSSSSOOOORRRR The mark named iiiinnnnsssseeeerrrrtttt has special significance in text widgets. It is defined automatically when a text widget is created and it may not be unset with the ``_p_a_t_h_N_a_m_e mmmmaaaarrrrkkkk uuuunnnnsssseeeetttt'' widget command. The iiiinnnnsssseeeerrrrtttt mark represents the position of the insertion cursor, and the insertion cursor will automatically be drawn at this point whenever the text widget has the input focus. WWWWIIIIDDDDGGGGEEEETTTT CCCCOOOOMMMMMMMMAAAANNNNDDDD The tttteeeexxxxtttt command creates a new Tcl command whose name is the same as the path name of the text's window. This command may be used to invoke various operations on the widget. It has the following general form: _p_a_t_h_N_a_m_e _o_p_t_i_o_n ?_a_r_g _a_r_g ...? _P_a_t_h_N_a_m_e is the name of the command, which is the same as the text widget's path name. _O_p_t_i_o_n and the _a_r_gs determine the exact behavior of the command. The following commands are possible for text widgets: _p_a_t_h_N_a_m_e ccccoooommmmppppaaaarrrreeee _i_n_d_e_x_1 _o_p _i_n_d_e_x_2 Compares the indices given by _i_n_d_e_x_1 and _i_n_d_e_x_2 according to the relational operator given by _o_p, and returns 1 if the relationship is satisfied and 0 if it isn't. _O_p must be one of the operators <, <=, ==, >=, >, or !=. If _o_p is == then 1 is returned if the two indices refer to the same character, if _o_p is < then 1 is returned if _i_n_d_e_x_1 refers to an earlier character in the text than _i_n_d_e_x_2, and so on. _p_a_t_h_N_a_m_e ccccoooonnnnffffiiiigggguuuurrrreeee ?_o_p_t_i_o_n? ?_v_a_l_u_e _o_p_t_i_o_n _v_a_l_u_e ...? Query or modify the configuration options of the widget. If no _o_p_t_i_o_n is specified, returns a list describing all of the available options for _p_a_t_h_N_a_m_e (see TTTTkkkk____CCCCoooonnnnffffiiiigggguuuurrrreeeeIIIInnnnffffoooo for information on the format of this list). If _o_p_t_i_o_n is specified with no _v_a_l_u_e, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no Page 8 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) _o_p_t_i_o_n is specified). If one or more _o_p_t_i_o_n-_v_a_l_u_e pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the command returns an empty string. _O_p_t_i_o_n may have any of the values accepted by the tttteeeexxxxtttt command. _p_a_t_h_N_a_m_e ddddeeeebbbbuuuugggg ?_b_o_o_l_e_a_n? If _b_o_o_l_e_a_n is specified, then it must have one of the true or false values accepted by Tcl_GetBoolean. If the value is a true one then internal consistency checks will be turned on in the B-tree code associated with text widgets. If _b_o_o_l_e_a_n has a false value then the debugging checks will be turned off. In either case the command returns an empty string. If _b_o_o_l_e_a_n is not specified then the command returns oooonnnn or ooooffffffff to indicate whether or not debugging is turned on. There is a single debugging switch shared by all text widgets: turning debugging on or off in any widget turns it on or off for all widgets. For widgets with large amounts of text, the consistency checks may cause a noticeable slow-down. _p_a_t_h_N_a_m_e ddddeeeelllleeeetttteeee _i_n_d_e_x_1 ?_i_n_d_e_x_2? Delete a range of characters from the text. If both _i_n_d_e_x_1 and _i_n_d_e_x_2 are specified, then delete all the characters starting with the one given by _i_n_d_e_x_1 and stopping just before _i_n_d_e_x_2 (i.e. the character at _i_n_d_e_x_2 is not deleted). If _i_n_d_e_x_2 doesn't specify a position later in the text than _i_n_d_e_x_1 then no characters are deleted. If _i_n_d_e_x_2 isn't specified then the single character at _i_n_d_e_x_1 is deleted. It is not allowable to delete characters in a way that would leave the text without a newline as the last character. The command returns an empty string. _p_a_t_h_N_a_m_e ggggeeeetttt _i_n_d_e_x_1 ?_i_n_d_e_x_2? Return a range of characters from the text. The return value will be all the characters in the text starting with the one whose index is _i_n_d_e_x_1 and ending just before the one whose index is _i_n_d_e_x_2 (the character at _i_n_d_e_x_2 will not be returned). If _i_n_d_e_x_2 is omitted then the single character at _i_n_d_e_x_1 is returned. If there are no characters in the specified range (e.g. _i_n_d_e_x_1 is past the end of the file or _i_n_d_e_x_2 is less than or equal to _i_n_d_e_x_1) then an empty string is returned. _p_a_t_h_N_a_m_e iiiinnnnddddeeeexxxx _i_n_d_e_x Returns the position corresponding to _i_n_d_e_x in the form _l_i_n_e._c_h_a_r where _l_i_n_e is the line number and _c_h_a_r is the character number. _I_n_d_e_x may have any of the forms Page 9 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) described under INDICES above. _p_a_t_h_N_a_m_e iiiinnnnsssseeeerrrrtttt _i_n_d_e_x _c_h_a_r_s Inserts _c_h_a_r_s into the text just before the character at _i_n_d_e_x and returns an empty string. It is not possible to insert characters after the last newline of the text. _p_a_t_h_N_a_m_e mmmmaaaarrrrkkkk _o_p_t_i_o_n ?_a_r_g _a_r_g ...? This command is used to manipulate marks. The exact behavior of the command depends on the _o_p_t_i_o_n argument that follows the mmmmaaaarrrrkkkk argument. The following forms of the command are currently supported: _p_a_t_h_N_a_m_e mmmmaaaarrrrkkkk nnnnaaaammmmeeeessss Returns a list whose elements are the names of all the marks that are currently set. _p_a_t_h_N_a_m_e mmmmaaaarrrrkkkk sssseeeetttt _m_a_r_k_N_a_m_e _i_n_d_e_x Sets the mark named _m_a_r_k_N_a_m_e to a position just before the character at _i_n_d_e_x. If _m_a_r_k_N_a_m_e already exists, it is moved from its old position; if it doesn't exist, a new mark is created. This command returns an empty string. _p_a_t_h_N_a_m_e mmmmaaaarrrrkkkk uuuunnnnsssseeeetttt _m_a_r_k_N_a_m_e ?_m_a_r_k_N_a_m_e _m_a_r_k_N_a_m_e ...? Remove the mark corresponding to each of the _m_a_r_k_N_a_m_e arguments. The removed marks will not be usable in indices and will not be returned by future calls to ``_p_a_t_h_N_a_m_e mmmmaaaarrrrkkkk nnnnaaaammmmeeeessss''. This command returns an empty string. _p_a_t_h_N_a_m_e ssssccccaaaannnn _o_p_t_i_o_n _a_r_g_s This command is used to implement scanning on texts. It has two forms, depending on _o_p_t_i_o_n: _p_a_t_h_N_a_m_e ssssccccaaaannnn mmmmaaaarrrrkkkk _y Records _y and the current view in the text window; used in conjunction with later ssssccccaaaannnn ddddrrrraaaaggggttttoooo commands. Typically this command is associated with a mouse button press in the widget. It returns an empty string. _p_a_t_h_N_a_m_e ssssccccaaaannnn ddddrrrraaaaggggttttoooo _y This command computes the difference between its _y argument and the _y argument to the last ssssccccaaaannnn mmmmaaaarrrrkkkk command for the widget. It then adjusts the view up or down by 10 times the difference in y- coordinates. This command is typically associated with mouse motion events in the widget, to produce the effect of dragging the text at high speed through the window. The return value is an empty Page 10 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) string. _p_a_t_h_N_a_m_e ttttaaaagggg _o_p_t_i_o_n ?_a_r_g _a_r_g ...? This command is used to manipulate tags. The exact behavior of the command depends on the _o_p_t_i_o_n argument that follows the ttttaaaagggg argument. The following forms of the command are currently supported: _p_a_t_h_N_a_m_e ttttaaaagggg aaaadddddddd _t_a_g_N_a_m_e _i_n_d_e_x_1 ?_i_n_d_e_x_2? Associate the tag _t_a_g_N_a_m_e with all of the characters starting with _i_n_d_e_x_1 and ending just before _i_n_d_e_x_2 (the character at _i_n_d_e_x_2 isn't tagged). If _i_n_d_e_x_2 is omitted then the single character at _i_n_d_e_x_1 is tagged. If there are no characters in the specified range (e.g. _i_n_d_e_x_1 is past the end of the file or _i_n_d_e_x_2 is less than or equal to _i_n_d_e_x_1) then the command has no effect. This command returns an empty string. _p_a_t_h_N_a_m_e ttttaaaagggg bbbbiiiinnnndddd _t_a_g_N_a_m_e ?_s_e_q_u_e_n_c_e? ?_c_o_m_m_a_n_d? This command associates _c_o_m_m_a_n_d with the tag given by _t_a_g_N_a_m_e. Whenever the event sequence given by _s_e_q_u_e_n_c_e occurs for a character that has been tagged with _t_a_g_N_a_m_e, the command will be invoked. This widget command is similar to the bbbbiiiinnnndddd command except that it operates on characters in a text rather than entire widgets. See the bbbbiiiinnnndddd manual entry for complete details on the syntax of _s_e_q_u_e_n_c_e and the substitutions performed on _c_o_m_m_a_n_d before invoking it. If all arguments are specified then a new binding is created, replacing any existing binding for the same _s_e_q_u_e_n_c_e and _t_a_g_N_a_m_e (if the first character of _c_o_m_m_a_n_d is ``+'' then _c_o_m_m_a_n_d augments an existing binding rather than replacing it). In this case the return value is an empty string. If _c_o_m_m_a_n_d is omitted then the command returns the _c_o_m_m_a_n_d associated with _t_a_g_N_a_m_e and _s_e_q_u_e_n_c_e (an error occurs if there is no such binding). If both _c_o_m_m_a_n_d and _s_e_q_u_e_n_c_e are omitted then the command returns a list of all the sequences for which bindings have been defined for _t_a_g_N_a_m_e. The only events for which bindings may be specified are those related to the mouse and keyboard, such as EEEEnnnntttteeeerrrr, LLLLeeeeaaaavvvveeee, BBBBuuuuttttttttoooonnnnPPPPrrrreeeessssssss, MMMMoooottttiiiioooonnnn, and KKKKeeeeyyyyPPPPrrrreeeessssssss. Event bindings for a text widget use the ccccuuuurrrrrrrreeeennnntttt mark described under MARKS above. EEEEnnnntttteeeerrrr events trigger for a character when it becomes the current character (i.e. the ccccuuuurrrrrrrreeeennnntttt mark moves to just in front of that character). LLLLeeeeaaaavvvveeee events trigger for a character when it Page 11 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) ceases to be the current item (i.e. the ccccuuuurrrrrrrreeeennnntttt mark moves away from that character, or the character is deleted). These events are different than EEEEnnnntttteeeerrrr and LLLLeeeeaaaavvvveeee events for windows. Mouse and keyboard events are directed to the current character. It is possible for the current character to have multiple tags, and for each of them to have a binding for a particular event sequence. When this occurs, the binding from the highest priority tag is used. If a particular tag doesn't have a binding that matches an event, then the tag is ignored and tags with lower priority will be checked. If bindings are created for the widget as a whole using the bbbbiiiinnnndddd command, then those bindings will supplement the tag bindings. This means that a single event can trigger two Tcl scripts, one for a widget-level binding and one for a tag-level binding. _v_a_l_u_e ...? _p_a_t_h_N_a_m_e ttttaaaagggg ccccoooonnnnffffiiiigggguuuurrrreeee _t_a_g_N_a_m_e ?_o_p_t_i_o_n? ?_v_a_l_u_e? ?_o_p_t_i_o_n This command is similar to the ccccoooonnnnffffiiiigggguuuurrrreeee widget command except that it modifies options associated with the tag given by _t_a_g_N_a_m_e instead of modifying options for the overall text widget. If no _o_p_t_i_o_n is specified, the command returns a list describing all of the available options for _t_a_g_N_a_m_e (see TTTTkkkk____CCCCoooonnnnffffiiiigggguuuurrrreeeeIIIInnnnffffoooo for information on the format of this list). If _o_p_t_i_o_n is specified with no _v_a_l_u_e, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no _o_p_t_i_o_n is specified). If one or more _o_p_t_i_o_n-_v_a_l_u_e pairs are specified, then the command modifies the given option(s) to have the given value(s) in _t_a_g_N_a_m_e; in this case the command returns an empty string. See TAGS above for details on the options available for tags. _p_a_t_h_N_a_m_e ttttaaaagggg ddddeeeelllleeeetttteeee _t_a_g_N_a_m_e ?_t_a_g_N_a_m_e ...? Deletes all tag information for each of the _t_a_g_N_a_m_e arguments. The command removes the tags from all characters in the file and also deletes any other information associated with the tags, such as bindings and display information. The command returns an empty string. _p_a_t_h_N_a_m_ettttaaaagggg lllloooowwwweeeerrrr _t_a_g_N_a_m_e ?_b_e_l_o_w_T_h_i_s? Page 12 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) Changes the priority of tag _t_a_g_N_a_m_e so that it is just lower in priority than the tag whose name is _b_e_l_o_w_T_h_i_s. If _b_e_l_o_w_T_h_i_s is omitted, then _t_a_g_N_a_m_e's priority is changed to make it lowest priority of all tags. _p_a_t_h_N_a_m_e ttttaaaagggg nnnnaaaammmmeeeessss ?_i_n_d_e_x? Returns a list whose elements are the names of all the tags that are active at the character position given by _i_n_d_e_x. If _i_n_d_e_x is omitted, then the return value will describe all of the tags that exist for the text (this includes all tags that have been named in a ``_p_a_t_h_N_a_m_e ttttaaaagggg'' widget command but haven't been deleted by a ``_p_a_t_h_N_a_m_e ttttaaaagggg ddddeeeelllleeeetttteeee'' widget command, even if no characters are currently marked with the tag). The list will be sorted in order from lowest priority to highest priority. _p_a_t_h_N_a_m_e ttttaaaagggg nnnneeeexxxxttttrrrraaaannnnggggeeee _t_a_g_N_a_m_e _i_n_d_e_x_1 ?_i_n_d_e_x_2? This command searches the text for a range of characters tagged with _t_a_g_N_a_m_e where the first character of the range is no earlier than the character at _i_n_d_e_x_1 and no later than the character just before _i_n_d_e_x_2 (a range starting at _i_n_d_e_x_2 will not be considered). If several matching ranges exist, the first one is chosen. The command's return value is a list containing two elements, which are the index of the first character of the range and the index of the character just after the last one in the range. If no matching range is found then the return value is an empty string. If _i_n_d_e_x_2 is not given then it defaults to the end of the text. _p_a_t_h_N_a_m_ettttaaaagggg rrrraaaaiiiisssseeee _t_a_g_N_a_m_e ?_a_b_o_v_e_T_h_i_s? Changes the priority of tag _t_a_g_N_a_m_e so that it is just higher in priority than the tag whose name is _a_b_o_v_e_T_h_i_s. If _a_b_o_v_e_T_h_i_s is omitted, then _t_a_g_N_a_m_e's priority is changed to make it highest priority of all tags. _p_a_t_h_N_a_m_e ttttaaaagggg rrrraaaannnnggggeeeessss _t_a_g_N_a_m_e Returns a list describing all of the ranges of text that have been tagged with _t_a_g_N_a_m_e. The first two elements of the list describe the first tagged range in the text, the next two elements describe the second range, and so on. The first element of each pair contains the index of the first character of the range, and the second element of the pair contains the index of the character just after the last one in the range. Page 13 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) If there are no characters tagged with _t_a_g then an empty string is returned. _p_a_t_h_N_a_m_e ttttaaaagggg rrrreeeemmmmoooovvvveeee _t_a_g_N_a_m_e _i_n_d_e_x_1 ?_i_n_d_e_x_2? Remove the tag _t_a_g_N_a_m_e from all of the characters starting at _i_n_d_e_x_1 and ending just before _i_n_d_e_x_2 (the character at _i_n_d_e_x_2 isn't affected). If _i_n_d_e_x_2 is omitted then the single character at _i_n_d_e_x_1 is untagged. If there are no characters in the specified range (e.g. _i_n_d_e_x_1 is past the end of the file or _i_n_d_e_x_2 is less than or equal to _i_n_d_e_x_1) then the command has no effect. This command returns an empty string. _p_a_t_h_N_a_m_e yyyyvvvviiiieeeewwww ?----ppppiiiicccckkkkppppllllaaaacccceeee? _w_h_a_t This command changes the view in the widget's window so that the line given by _w_h_a_t is visible in the window. _W_h_a_t may be either an absolute line number, where 0 corresponds to the first line of the file, or an index with any of the forms described under INDICES above. The first form (absolute line number) is used in the commands issued by scrollbars to control the widget's view. If the ----ppppiiiicccckkkkppppllllaaaacccceeee option isn't specified then _w_h_a_t will appear at the top of the window. If ----ppppiiiicccckkkkppppllllaaaacccceeee is specified then the widget chooses where _w_h_a_t appears in the window: [1] If _w_h_a_t is already visible somewhere in the window then the command does nothing. [2] If _w_h_a_t is only a few lines off-screen above the window then it will be positioned at the top of the window. [3] If _w_h_a_t is only a few lines off-screen below the window then it will be positioned at the bottom of the window. [4] Otherwise, _w_h_a_t will be centered in the window. The ----ppppiiiicccckkkkppppllllaaaacccceeee option is typically used after inserting text to make sure that the insertion cursor is still visible on the screen. This command returns an empty string. BBBBIIIINNNNDDDDIIIINNNNGGGGSSSS Tk automatically creates class bindings for texts that give them the following default behavior: [1] Pressing mouse button 1 in an text positions the insertion cursor just before the character underneath Page 14 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) the mouse cursor and sets the input focus to this widget. [2] Dragging with mouse button 1 strokes out a selection between the insertion cursor and the character under the mouse. [3] If you double-press mouse button 1 then the word under the mouse cursor will be selected, the insertion cursor will be positioned at the beginning of the word, and dragging the mouse will stroke out a selection whole words at a time. [4] If you triple-press mouse button 1 then the line under the mouse cursor will be selected, the insertion cursor will be positioned at the beginning of the line, and dragging the mouse will stroke out a selection whole line at a time. [5] The ends of the selection can be adjusted by dragging with mouse button 1 while the shift key is down; this will adjust the end of the selection that was nearest to the mouse cursor when button 1 was pressed. If the selection was made in word or line mode then it will be adjusted in this same mode. [6] The view in the text can be adjusted by dragging with mouse button 2. [7] If the input focus is in a text widget and characters are typed on the keyboard, the characters are inserted just before the insertion cursor. [8] Control+h and the Backspace and Delete keys erase the character just before the insertion cursor. [9] Control+v inserts the current selection just before the insertion cursor. [10] Control+d deletes the selected characters; an error occurs if the selection is not in this widget. If the text is disabled using the ssssttttaaaatttteeee option, then the text's view can still be adjusted and text in the text can still be selected, but no insertion cursor will be displayed and no text modifications will take place. The behavior of texts can be changed by defining new bindings for individual widgets or by redefining the class bindings. Page 15 (printed 7/23/95) tttteeeexxxxtttt((((nnnn)))) TTTTkkkk (((( )))) tttteeeexxxxtttt((((nnnn)))) PPPPEEEERRRRFFFFOOOORRRRMMMMAAAANNNNCCCCEEEE IIIISSSSSSSSUUUUEEEESSSS Text widgets should run efficiently under a variety of conditions. The text widget uses about 2-3 bytes of main memory for each byte of text, so texts containing a megabyte or more should be practical on most workstations. Text is represented internally with a modified B-tree structure that makes operations relatively efficient even with large texts. Tags are included in the B-tree structure in a way that allows tags to span large ranges or have many disjoint smaller ranges without loss of efficiency. Marks are also implemented in a way that allows large numbers of marks. The only known mode of operation where a text widget may not run efficiently is if it has a very large number of different tags. Hundreds of tags should be fine, or even a thousand, but tens of thousands of tags will make texts consume a lot of memory and run slowly. KKKKEEEEYYYYWWWWOOOORRRRDDDDSSSS text, widget Page 16 (printed 7/23/95)