text.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:78k
- '"
- '" Copyright (c) 1992 The Regents of the University of California.
- '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
- '"
- '" See the file "license.terms" for information on usage and redistribution
- '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- '"
- '" RCS: @(#) $Id: text.n,v 1.15.2.5 2006/04/12 02:20:47 das Exp $
- '"
- .so man.macros
- .TH text n 8.4 Tk "Tk Built-In Commands"
- .BS
- '" Note: do not modify the .SH NAME line immediately below!
- .SH NAME
- text, tk_textCopy, tk_textCut, tk_textPaste - Create and manipulate text widgets
- .SH SYNOPSIS
- .nf
- fBtextfR fIpathName fR?fIoptionsfR?
- .VS 8.4
- fBtk_textCopyfR fIpathNamefR
- fBtk_textCutfR fIpathNamefR
- fBtk_textPastefR fIpathNamefR
- .VE 8.4
- .SO
- -background -highlightthickness -relief
- -borderwidth -insertbackground -selectbackground
- -cursor -insertborderwidth -selectborderwidth
- -exportselection -insertofftime -selectforeground
- -font -insertontime -setgrid
- -foreground -insertwidth -takefocus
- -highlightbackground -padx -xscrollcommand
- -highlightcolor -pady -yscrollcommand
- .SE
- .SH "WIDGET-SPECIFIC OPTIONS"
- .OP -autoseparators autoSeparators AutoSeparators
- .VS 8.4
- Specifies a boolean that says whether separators are automatically
- inserted in the undo stack. Only meaningful when the fB-undofR
- option is true.
- .VE 8.4
- .OP -height height Height
- Specifies the desired height for the window, in units of characters
- in the font given by the fB-fontfR option.
- Must be at least one.
- .OP -maxundo maxUndo MaxUndo
- .VS 8.4
- Specifies the maximum number of compound undo actions on the undo
- stack. A zero or a negative value imply an unlimited undo stack.
- .VE 8.4
- .OP -spacing1 spacing1 Spacing1
- Requests additional space above each text line in the widget,
- using any of the standard forms for screen distances.
- If a line wraps, this option only applies to the first line
- on the display.
- This option may be overridden with fB-spacing1fR options in
- tags.
- .OP -spacing2 spacing2 Spacing2
- For lines that wrap (so that they cover more than one line on the
- display) this option specifies additional space to provide between
- the display lines that represent a single line of text.
- The value may have any of the standard forms for screen distances.
- This option may be overridden with fB-spacing2fR options in
- tags.
- .OP -spacing3 spacing3 Spacing3
- Requests additional space below each text line in the widget,
- using any of the standard forms for screen distances.
- If a line wraps, this option only applies to the last line
- on the display.
- This option may be overridden with fB-spacing3fR options in
- tags.
- .OP -state state State
- Specifies one of two states for the text: fBnormalfR or fBdisabledfR.
- 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.
- .OP -tabs tabs Tabs
- Specifies a set of tab stops for the window. The option's value consists
- of a list of screen distances giving the positions of the tab stops,
- each of which is a distance relative to the left edge of the widget
- (excluding borders, padding, etc). Each
- position may optionally be followed in the next list element
- by one of the keywords fBleftfR, fBrightfR, fBcenterfR,
- or fBnumericfR, which specifies how to justify
- text relative to the tab stop. fBLeftfR is the default; it causes
- the text following the tab character to be positioned with its left edge
- at the tab position. fBRightfR means that the right edge of the text
- following the tab character is positioned at the tab position, and
- fBcenterfR means that the text is centered at the tab position.
- fBNumericfR means that the decimal point in the text is positioned
- at the tab position; if there is no decimal point then the least
- significant digit of the number is positioned just to the left of the
- tab position; if there is no number in the text then the text is
- right-justified at the tab position.
- For example, fB-tabs {2c left 4c 6c center}fR creates three
- tab stops at two-centimeter intervals; the first two use left
- justification and the third uses center justification.
- If the list of tab stops does not have enough elements to cover all
- of the tabs in a text line, then Tk extrapolates new tab stops using
- the spacing and alignment from the last tab stop in the list. Tab
- distances must be strictly positive, and must always increase from one
- tab stop to the next (if not, an error is thrown).
- The value of the fBtabsfR option may be overridden by fB-tabsfR
- options in tags.
- If no fB-tabsfR option is specified, or if it is specified as
- an empty list, then Tk uses default tabs spaced every eight
- (average size) characters.
- .OP -undo undo Undo
- .VS 8.4
- Specifies a boolean that says whether the undo mechanism is active or
- not.
- .VE 8.4
- .OP -width width Width
- Specifies the desired width for the window in units of characters
- in the font given by the fB-fontfR option.
- 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.
- .OP -wrap wrap Wrap
- 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 fBnonefR or fBcharfR or fBwordfR.
- A wrap mode of fBnonefR means that each line of text appears 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 fBcharfR mode a screen line break may occur after any character;
- in fBwordfR mode a line break will only be made at word boundaries.
- .BE
- .SH DESCRIPTION
- .PP
- The fBtextfR command creates a new window (given by the
- fIpathNamefR 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 fBtextfR command returns the
- path name of the new window.
- .PP
- A text widget displays one or more lines of text and allows that
- text to be edited.
- Text widgets support four different kinds of annotations on the
- text, called tags, marks, embedded windows or embedded images.
- 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 scripts are invoked when particular actions such as keystrokes
- and mouse button presses occur in particular ranges of the text.
- See fBTAGSfR below for more details.
- .PP
- The second form of annotation consists of floating markers in the text
- called "marks".
- Marks are used to keep track of various interesting positions in the
- text as it is edited.
- See fBMARKSfR below for more details.
- .PP
- The third form of annotation allows arbitrary windows to be
- embedded in a text widget.
- See fBEMBEDDED WINDOWSfR below for more details.
- .PP
- The fourth form of annotation allows Tk images to be embedded in a text
- widget.
- See fBEMBEDDED IMAGESfR below for more details.
- .PP
- .VS 8.4
- The text widget also has a built-in undo/redo mechanism.
- See fBTHE UNDO MECHANISMfR below for more details.
- .VE 8.4
- .SH INDICES
- .PP
- 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
- .CS
- fIbase modifier modifier modifier ...fR
- .CE
- Where fIbasefR gives a starting point and the fImodifierfRs
- adjust the index from the starting point (e.g. move forward or
- backward one character). Every index must contain a fIbasefR,
- but the fImodifierfRs are optional.
- .PP
- The fIbasefR for an index must have one of the following forms:
- .TP 12
- fIlinefB.fIcharfR
- Indicates fIcharfR'th character on line fIlinefR.
- Lines are numbered from 1 for consistency with other UNIX programs
- that use this numbering scheme.
- Within a line, characters are numbered from 0.
- If fIcharfR is fBendfR then it refers to the newline character
- that ends the line.
- .TP 12
- fB@fIxfB,fIyfR
- Indicates the character that covers the pixel whose x and y coordinates
- within the text's window are fIxfR and fIyfR.
- .TP 12
- fBendfR
- Indicates the end of the text (the character just after the last
- newline).
- .TP 12
- fImarkfR
- Indicates the character just after the mark whose name is fImarkfR.
- .TP 12
- fItagfB.firstfR
- Indicates the first character in the text that has been tagged with
- fItagfR.
- This form generates an error if no characters are currently tagged
- with fItagfR.
- .TP 12
- fItagfB.lastfR
- Indicates the character just after the last one in the text that has
- been tagged with fItagfR.
- This form generates an error if no characters are currently tagged
- with fItagfR.
- .TP 12
- fIpathNamefR
- Indicates the position of the embedded window whose name is
- fIpathNamefR.
- This form generates an error if there is no embedded window
- by the given name.
- .TP 12
- fIimageNamefR
- Indicates the position of the embedded image whose name is
- fIimageNamefR.
- This form generates an error if there is no embedded image
- by the given name.
- .PP
- If the fIbasefP could match more than one of the above forms, such
- as a fImarkfP and fIimageNamefP both having the same value, then
- the form earlier in the above list takes precedence.
- If modifiers follow the base index, each one of them must have one
- of the forms listed below. Keywords such as fBcharsfR and fBwordendfR
- may be abbreviated as long as the abbreviation is unambiguous.
- .TP
- fB+ fIcountfB charsfR
- Adjust the index forward by fIcountfR characters, moving to later
- lines in the text if necessary. If there are fewer than fIcountfR
- characters in the text after the current index, then set the index
- to the last character in the text.
- Spaces on either side of fIcountfR are optional.
- .TP
- fB- fIcountfB charsfR
- Adjust the index backward by fIcountfR characters, moving to earlier
- lines in the text if necessary. If there are fewer than fIcountfR
- characters in the text before the current index, then set the index
- to the first character in the text.
- Spaces on either side of fIcountfR are optional.
- .TP
- fB+ fIcountfB linesfR
- Adjust the index forward by fIcountfR lines, retaining the same
- character position within the line. If there are fewer than fIcountfR
- lines after the line containing the 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 fIcountfR are optional.
- .TP
- fB- fIcountfB linesfR
- Adjust the index backward by fIcountfR lines, retaining the same
- character position within the line. If there are fewer than fIcountfR
- 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 fIcountfR are optional.
- .TP
- fBlinestartfR
- Adjust the index to refer to the first character on the line.
- .TP
- fBlineendfR
- Adjust the index to refer to the last character on the line (the newline).
- .TP
- fBwordstartfR
- 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.
- .TP
- fBwordendfR
- 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.
- .PP
- If more than one modifier is present then they are applied in
- left-to-right order. For example, the index ``fBend - 1 charsfR''
- refers to the next-to-last character in the text and
- ``fBinsert wordstart - 1 cfR'' refers to the character just before
- the first one in the word containing the insertion cursor. Modifiers
- are applied one by one in this left to right order, and after each step
- the resulting index is constrained to be a valid index in the text
- widget. So, for example, the index ``fB1.0 -1c +1cfR'' refers to the
- index ``fB2.0fR''.
- .SH TAGS
- .PP
- The first form of annotation in text widgets is a tag.
- A tag is a textual string that is associated with some of the characters
- in a text.
- Tags may contain arbitrary characters, but it is probably best to
- avoid using the characters `` '' (space), fB+fR, or fB-fR:
- these characters have special meaning in indices, so tags containing
- them can't be used as indices.
- 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.
- .PP
- 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
- ``fIpathName fBtag raisefR'' and ``fIpathName fBtag lowerfR''
- widget commands.
- .PP
- 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
- fBbackgroundfR, fBfontfR, and fBforegroundfR options for the
- text widget.
- However, display options may be associated with individual tags
- using the ``fIpathName fBtag configurefR'' 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:
- .TP
- fB-background fIcolorfR
- fIColorfR specifies the background color to use for characters
- associated with the tag.
- It may have any of the forms accepted by fBTk_GetColorfR.
- .TP
- fB-bgstipple fIbitmapfR
- fIBitmapfR specifies a bitmap that is used as a stipple pattern
- for the background.
- It may have any of the forms accepted by fBTk_GetBitmapfR.
- If fIbitmapfR hasn't been specified, or if it is specified
- as an empty string, then a solid fill will be used for the
- background.
- .TP
- fB-borderwidth fIpixelsfR
- fIPixelsfR specifies the width of a 3-D border to draw around
- the background.
- It may have any of the forms accepted by fBTk_GetPixelsfR.
- This option is used in conjunction with the fB-relieffR
- option to give a 3-D appearance to the background for characters;
- it is ignored unless the fB-backgroundfR option
- has been set for the tag.
- .TP
- fB-elide fIbooleanfR
- fIElidefR specifies whether the data should be elided.
- Elided data is not displayed and takes no space on screen, but further
- on behaves just as normal data.
- .TP
- fB-fgstipple fIbitmapfR
- fIBitmapfR 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 fBTk_GetBitmapfR.
- If fIbitmapfR hasn't been specified, or if it is specified
- as an empty string, then a solid fill will be used.
- .TP
- fB-font fIfontNamefR
- fIFontNamefR is the name of a font to use for drawing characters.
- It may have any of the forms accepted by fBTk_GetFontfR.
- .TP
- fB-foreground fIcolorfR
- fIColorfR specifies the color to use when drawing text and other
- foreground information such as underlines.
- It may have any of the forms accepted by fBTk_GetColorfR.
- .TP
- fB-justify fIjustifyfR
- If the first character of a display line has a tag for which this
- option has been specified, then fIjustifyfR determines how to
- justify the line.
- It must be one of fBleftfR, fBrightfR, or fBcenterfR.
- If a line wraps, then the justification for each line on the
- display is determined by the first character of that display line.
- .TP
- fB-lmargin1 fIpixelsfR
- If the first character of a text line has a tag for which this
- option has been specified, then fIpixelsfR specifies how
- much the line should be indented from the left edge of the
- window.
- fIPixelsfR may have any of the standard forms for screen
- distances.
- If a line of text wraps, this option only applies to the
- first line on the display; the fB-lmargin2fR option controls
- the indentation for subsequent lines.
- .TP
- fB-lmargin2 fIpixelsfR
- If the first character of a display line has a tag for which this
- option has been specified, and if the display line is not the
- first for its text line (i.e., the text line has wrapped), then
- fIpixelsfR specifies how much the line should be indented from
- the left edge of the window.
- fIPixelsfR may have any of the standard forms for screen
- distances.
- This option is only used when wrapping is enabled, and it only
- applies to the second and later display lines for a text line.
- .TP
- fB-offset fIpixelsfR
- fIPixelsfR specifies an amount by which the text's baseline
- should be offset vertically from the baseline of the overall
- line, in pixels.
- For example, a positive offset can be used for superscripts
- and a negative offset can be used for subscripts.
- fIPixelsfR may have any of the standard forms for screen
- distances.
- .TP
- fB-overstrike fIbooleanfR
- Specifies whether or not to draw a horizontal rule through
- the middle of characters.
- fIBooleanfR may have any of the forms accepted by fBTcl_GetBooleanfR.
- .TP
- fB-relief fIrelieffR
- fIRelieffR specifies the 3-D relief to use for drawing backgrounds,
- in any of the forms accepted by fBTk_GetRelieffR.
- This option is used in conjunction with the fB-borderwidthfR
- option to give a 3-D appearance to the background for characters;
- it is ignored unless the fB-backgroundfR option
- has been set for the tag.
- .TP
- fB-rmargin fIpixelsfR
- If the first character of a display line has a tag for which this
- option has been specified, then fIpixelsfR specifies how wide
- a margin to leave between the end of the line and the right
- edge of the window.
- fIPixelsfR may have any of the standard forms for screen
- distances.
- This option is only used when wrapping is enabled.
- If a text line wraps, the right margin for each line on the
- display is determined by the first character of that display
- line.
- .TP
- fB-spacing1 fIpixelsfR
- fIPixelsfR specifies how much additional space should be
- left above each text line, using any of the standard forms for
- screen distances.
- If a line wraps, this option only applies to the first
- line on the display.
- .TP
- fB-spacing2 fIpixelsfR
- For lines that wrap, this option specifies how much additional
- space to leave between the display lines for a single text line.
- fIPixelsfR may have any of the standard forms for screen
- distances.
- .TP
- fB-spacing3 fIpixelsfR
- fIPixelsfR specifies how much additional space should be
- left below each text line, using any of the standard forms for
- screen distances.
- If a line wraps, this option only applies to the last
- line on the display.
- .TP
- fB-tabs fItabListfR
- fITabListfR specifies a set of tab stops in the same form
- as for the fB-tabsfR option for the text widget. This
- option only applies to a display line if it applies to the
- first character on that display line.
- If this option is specified as an empty string, it cancels
- the option, leaving it unspecified for the tag (the default).
- If the option is specified as a non-empty string that is
- an empty list, such as fB-tags { }fR, then it requests
- default 8-character tabs as described for the fBtagsfR
- widget option.
- .TP
- fB-underline fIbooleanfR
- fIBooleanfR specifies whether or not to draw an underline underneath
- characters.
- It may have any of the forms accepted by fBTcl_GetBooleanfR.
- .TP
- fB-wrap fImodefR
- fIModefR specifies how to handle lines that are wider than the
- text's window.
- It has the same legal values as the fB-wrapfR option
- for the text widget: fBnonefR, fBcharfR, or fBwordfR.
- If this tag option is specified, it overrides the fB-wrapfR option
- for the text widget.
- .PP
- 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 option, then the default
- style for the widget will be used.
- .PP
- 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 fBtag bindfR widget
- command below.
- .PP
- The third use for tags is in managing the selection.
- See fBTHE SELECTIONfR below.
- .SH MARKS
- .PP
- The second form of annotation in text widgets is a mark.
- Marks are used for remembering particular places in a text.
- 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 ``fIpathName fBmarkfR'' widget
- command, and their current locations may be determined by using the
- mark name as an index in widget commands.
- .PP
- Each mark also has a "gravity", which is either fBleftfR or
- fBrightfR.
- The gravity for a mark specifies what happens to the mark when
- text is inserted at the point of the mark.
- If a mark has left gravity, then the mark is treated as if it
- were attached to the character on its left, so the mark will
- remain to the left of any text inserted at the mark position.
- If the mark has right gravity, new text inserted at the mark
- position will appear to the left of the mark (so that the mark
- remains rightmost). The gravity for a mark defaults to fBrightfR.
- .PP
- 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.
- .PP
- Two marks have special significance.
- First, the mark fBinsertfR is associated with the insertion cursor,
- as described under fBTHE INSERTION CURSORfR below.
- Second, the mark fBcurrentfR 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: fBcurrentfR 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 deleted.
- .SH "EMBEDDED WINDOWS"
- .PP
- The third form of annotation in text widgets is an embedded window.
- Each embedded window annotation causes a window to be displayed
- at a particular point in the text.
- There may be any number of embedded windows in a text widget,
- and any widget may be used as an embedded window (subject to the
- usual rules for geometry management, which require the text window
- to be the parent of the embedded window or a descendant of its
- parent).
- The embedded window's position on the screen will be updated as the
- text is modified or scrolled, and it will be mapped and unmapped as
- it moves into and out of the visible area of the text widget.
- Each embedded window occupies one character's worth of index space
- in the text widget, and it may be referred to either by the name
- of its embedded window or by its position in the widget's
- index space.
- If the range of text containing the embedded window is deleted then
- the window is destroyed.
- .PP
- When an embedded window is added to a text widget with the
- fBwindow createfR widget command, several configuration
- options may be associated with it.
- These options may be modified later with the fBwindow configurefR
- widget command.
- The following options are currently supported:
- .TP
- fB-align fIwherefR
- If the window is not as tall as the line in which it is displayed,
- this option determines where the window is displayed in the line.
- fIWherefR must have one of the values fBtopfR (align the top of the window
- with the top of the line), fBcenterfR (center the window
- within the range of the line), fBbottomfR (align the bottom of the
- window with the bottom of the line's area),
- or fBbaselinefR (align the bottom of the window with the baseline
- of the line).
- .TP
- fB-create fIscriptfR
- Specifies a Tcl script that may be evaluated to create the window
- for the annotation.
- If no fB-windowfR option has been specified for the annotation
- this script will be evaluated when the annotation is about to
- be displayed on the screen.
- fIScriptfR must create a window for the annotation and return
- the name of that window as its result.
- If the annotation's window should ever be deleted, fIscriptfR
- will be evaluated again the next time the annotation is displayed.
- .TP
- fB-padx fIpixelsfR
- fIPixelsfR specifies the amount of extra space to leave on
- each side of the embedded window.
- It may have any of the usual forms defined for a screen distance.
- .TP
- fB-pady fIpixelsfR
- fIPixelsfR specifies the amount of extra space to leave on
- the top and on the bottom of the embedded window.
- It may have any of the usual forms defined for a screen distance.
- .TP
- fB-stretch fIbooleanfR
- If the requested height of the embedded window is less than the
- height of the line in which it is displayed, this option can be
- used to specify whether the window should be stretched vertically
- to fill its line.
- If the fB-padyfR option has been specified as well, then the
- requested padding will be retained even if the window is
- stretched.
- .TP
- fB-window fIpathNamefR
- Specifies the name of a window to display in the annotation.
- .SH "EMBEDDED IMAGES"
- .PP
- The final form of annotation in text widgets is an embedded image.
- Each embedded image annotation causes an image to be displayed
- at a particular point in the text.
- There may be any number of embedded images in a text widget,
- and a particular image may be embedded in multiple places in the same
- text widget.
- The embedded image's position on the screen will be updated as the
- text is modified or scrolled.
- Each embedded image occupies one character's worth of index space
- in the text widget, and it may be referred to either by
- its position in the widget's index space, or the name it is assigned
- when the image is inserted into the text widget with fBimage createfP.
- If the range of text containing the embedded image is deleted then
- that copy of the image is removed from the screen.
- .PP
- When an embedded image is added to a text widget with the fBimage
- createfR widget command, a name unique to this instance of the image
- is returned. This name may then be used to refer to this image
- instance. The name is taken to be the value of the fB-namefP option
- (described below). If the fB-namefP option is not provided, the
- fB-imagefP name is used instead. If the fIimageNamefP is already
- in use in the text widget, then fB#fInnfR is added to the end of the
- fIimageNamefP, where fInnfP is an arbitrary integer. This insures
- the fIimageNamefP is unique.
- Once this name is assigned to this instance of the image, it does not
- change, even though the fB-imagefP or fB-namefP values can be changed
- with fBimage configurefP.
- .PP
- When an embedded image is added to a text widget with the
- fBimage createfR widget command, several configuration
- options may be associated with it.
- These options may be modified later with the fBimage configurefR
- widget command.
- The following options are currently supported:
- .TP
- fB-align fIwherefR
- If the image is not as tall as the line in which it is displayed,
- this option determines where the image is displayed in the line.
- fIWherefR must have one of the values fBtopfR (align the top of the image
- with the top of the line), fBcenterfR (center the image
- within the range of the line), fBbottomfR (align the bottom of the
- image with the bottom of the line's area),
- or fBbaselinefR (align the bottom of the image with the baseline
- of the line).
- .TP
- fB-image fIimagefR
- Specifies the name of the Tk image to display in the annotation.
- If fIimagefP is not a valid Tk image, then an error is returned.
- .TP
- fB-name fIImageNamefR
- Specifies the name by which this image instance may be referenced in
- the text widget. If fIImageNamefP is not supplied, then the
- name of the Tk image is used instead.
- If the fIimageNamefP is already in use, fI#nnfP is appended to
- the end of the name as described above.
- .TP
- fB-padx fIpixelsfR
- fIPixelsfR specifies the amount of extra space to leave on
- each side of the embedded image.
- It may have any of the usual forms defined for a screen distance.
- .TP
- fB-pady fIpixelsfR
- fIPixelsfR specifies the amount of extra space to leave on
- the top and on the bottom of the embedded image.
- It may have any of the usual forms defined for a screen distance.
- .SH "THE SELECTION"
- .PP
- Selection support is implemented via tags.
- If the fBexportSelectionfR option for the text widget is true
- then the fBselfR tag will be associated with the selection:
- .IP [1]
- Whenever characters are tagged with fBselfR the text widget
- will claim ownership of the selection.
- .IP [2]
- Attempts to retrieve the
- selection will be serviced by the text widget, returning all the
- characters with the fBselfR tag.
- .IP [3]
- If the selection is claimed away by another application or by another
- window within this application, then the fBselfR tag will be removed
- from all characters in the text.
- .IP [4]
- Whenever the fBselfR tag range changes a virtual event
- fB<<Selection>>fR is generated.
- .PP
- The fBselfR tag is automatically defined when a text widget is
- created, and it may not be deleted with the ``fIpathName fBtag deletefR''
- widget command. Furthermore, the fBselectBackgroundfR,
- fBselectBorderWidthfR, and fBselectForegroundfR options for
- the text widget are tied to the fB-backgroundfR,
- fB-borderwidthfR, and fB-foregroundfR options for the fBselfR
- tag: changes in either will automatically be reflected in the
- other.
- .SH "THE INSERTION CURSOR"
- .PP
- The mark named fBinsertfR has special significance in text widgets.
- It is defined automatically when a text widget is created and it
- may not be unset with the ``fIpathName fBmark unsetfR'' widget
- command.
- The fBinsertfR 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.
- .SH "THE MODIFIED FLAG"
- The text widget can keep track of changes to the content of the widget
- by means of the modified flag. Inserting or deleting text will set
- this flag. The flag can be queried, set and cleared programmatically
- as well. Whenever the flag changes state a fB<<Modified>>fR virtual
- event is generated. See the fBedit modifiedfR widget command for
- more details.
- .SH "THE UNDO MECHANISM"
- .PP
- .VS 8.4
- The text widget has an unlimited undo and redo mechanism (when the
- fB-undofR widget option is true) which records every insert and
- delete action on a stack.
- .PP
- Boundaries (called "separators") are inserted between edit actions. The
- purpose of these separators is to group inserts, deletes and replaces
- into one compound edit action. When undoing a change everything between
- two separators will be undone. The undone changes are then moved to the
- redo stack, so that an undone edit can be redone again. The redo stack
- is cleared whenever new edit actions are recorded on the undo stack. The
- undo and redo stacks can be cleared to keep their depth under control.
- .PP
- Separators are inserted automatically when the fB-autoseparatorsfR
- widget option is true. You can insert separators programmatically as
- well. If a separator is already present at the top of the undo stack
- no other will be inserted. That means that two separators on the undo
- stack are always separated by at least one insert or delete action.
- .PP
- The undo mechanism is also linked to the modified flag. This means
- that undoing or redoing changes can take a modified text widget back
- to the unmodified state or vice versa. The modified flag will be set
- automatically to the appropriate state. This automatic coupling
- does not work when the modified flag has been set by the user, until
- the flag has been reset again.
- .PP
- See below for the fBeditfR widget command that controls the undo
- mechanism.
- .VE 8.4
- .SH "WIDGET COMMAND"
- .PP
- The fBtextfR 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:
- .CS
- fIpathName option fR?fIarg arg ...fR?
- .CE
- fIPathNamefR is the name of the command, which is the same as
- the text widget's path name. fIOptionfR and the fIargfRs
- determine the exact behavior of the command. The following
- commands are possible for text widgets:
- .TP
- fIpathName fBbbox fIindexfR
- Returns a list of four elements describing the screen area
- of the character given by fIindexfR.
- The first two elements of the list give the x and y coordinates
- of the upper-left corner of the area occupied by the
- character, and the last two elements give the width and height
- of the area.
- If the character is only partially visible on the screen, then
- the return value reflects just the visible part.
- If the character is not visible on the screen then the return
- value is an empty list.
- .TP
- fIpathName fBcgetfR fIoptionfR
- Returns the current value of the configuration option given
- by fIoptionfR.
- fIOptionfR may have any of the values accepted by the fBtextfR
- command.
- .TP
- fIpathName fBcomparefR fIindex1 op index2fR
- Compares the indices given by fIindex1fR and fIindex2fR according
- to the relational operator given by fIopfR, and returns 1 if
- the relationship is satisfied and 0 if it isn't.
- fIOpfR must be one of the operators <, <=, ==, >=, >, or !=.
- If fIopfR is == then 1 is returned if the two indices refer to
- the same character, if fIopfR is < then 1 is returned if fIindex1fR
- refers to an earlier character in the text than fIindex2fR, and
- so on.
- .TP
- fIpathName fBconfigurefR ?fIoptionfR? fI?value option value ...fR?
- Query or modify the configuration options of the widget.
- If no fIoptionfR is specified, returns a list describing all of
- the available options for fIpathNamefR (see fBTk_ConfigureInfofR for
- information on the format of this list). If fIoptionfR is specified
- with no fIvaluefR, 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 fIoptionfR is specified). If
- one or more fIoption-valuefR 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.
- fIOptionfR may have any of the values accepted by the fBtextfR
- command.
- .TP
- fIpathName fBdebug fR?fIbooleanfR?
- If fIbooleanfR 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 fIbooleanfR has a false value then the debugging checks will
- be turned off.
- In either case the command returns an empty string.
- If fIbooleanfR is not specified then the command returns fBonfR
- or fBofffR 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.
- .PP
- .VS 8.4
- When debugging is turned on, the drawing routines of the text widget
- set the global variables fBtk_textRedrawfR and fBtk_textRelayoutfR
- to the lists of indices that are redrawn. The values of these variables
- are tested by Tk's test suite.
- .VE 8.4
- .TP
- fIpathName fBdelete fIindex1 fR?fIindex2 ...fR?
- Delete a range of characters from the text.
- If both fIindex1fR and fIindex2fR are specified, then delete
- all the characters starting with the one given by fIindex1fR
- and stopping just before fIindex2fR (i.e. the character at
- fIindex2fR is not deleted).
- If fIindex2fR doesn't specify a position later in the text
- than fIindex1fR then no characters are deleted.
- If fIindex2fR isn't specified then the single character at
- fIindex1fR 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.
- .VS 8.4
- If more indices are given, multiple ranges of text will be deleted.
- All indices are first checked for validity before any deletions are made.
- They are sorted and the text is removed from the last range to the
- first range to deleted text does not cause an undesired index shifting
- side-effects. If multiple ranges with the same start index are given,
- then the longest range is used. If overlapping ranges are given, then
- they will be merged into spans that do not cause deletion of text
- outside the given ranges due to text shifted during deletion.
- .VE 8.4
- .TP
- fIpathName fBdlineinfo fIindexfR
- Returns a list with five elements describing the area occupied
- by the display line containing fIindexfR.
- The first two elements of the list give the x and y coordinates
- of the upper-left corner of the area occupied by the
- line, the third and fourth elements give the width and height
- of the area, and the fifth element gives the position of the baseline
- for the line, measured down from the top of the area.
- All of this information is measured in pixels.
- If the current wrap mode is fBnonefR and the line extends beyond
- the boundaries of the window,
- the area returned reflects the entire area of the line, including the
- portions that are out of the window.
- If the line is shorter than the full width of the window then the
- area returned reflects just the portion of the line that is occupied
- by characters and embedded windows.
- If the display line containing fIindexfR is not visible on
- the screen then the return value is an empty list.
- .TP
- fIpathName fBdump fR?fIswitchesfR? fIindex1 fR?fIindex2fR?
- Return the contents of the text widget from fIindex1fR up to,
- but not including fIindex2fR,
- including the text and
- information about marks, tags, and embedded windows.
- If fIindex2fR is not specified, then it defaults to
- one character past fIindex1fR. The information is returned
- in the following format:
- .LP
- .RS
- fIkey1 value1 index1 key2 value2 index2fR ...
- .LP
- The possible fIkeyfP values are fBtextfP, fBmarkfP,
- fBtagonfP, fBtagofffP, fBimagefP, and fBwindowfP. The corresponding
- fIvaluefP is the text, mark name, tag name, image name, or window name.
- The fIindexfP information is the index of the
- start of the text, mark, tag transition, image or window.
- One or more of the following switches (or abbreviations thereof)
- may be specified to control the dump:
- .TP
- fB-allfR
- Return information about all elements: text, marks, tags, images and windows.
- This is the default.
- .TP
- fB-command fIcommandfR
- Instead of returning the information as the result of the dump operation,
- invoke the fIcommandfR on each element of the text widget within the range.
- The command has three arguments appended to it before it is evaluated:
- the fIkeyfP, fIvaluefP, and fIindexfP.
- .TP
- fB-imagefR
- Include information about images in the dump results.
- .TP
- fB-markfR
- Include information about marks in the dump results.
- .TP
- fB-tagfR
- Include information about tag transitions in the dump results. Tag
- information is returned as fBtagonfP and fBtagofffP elements that
- indicate the begin and end of each range of each tag, respectively.
- .TP
- fB-textfR
- Include information about text in the dump results. The value is the
- text up to the next element or the end of range indicated by fIindex2fR.
- A text element does not span newlines. A multi-line block of text that
- contains no marks or tag transitions will still be dumped as a set
- of text segments that each end with a newline. The newline is part
- of the value.
- .TP
- fB-windowfR
- Include information about embedded windows in the dump results.
- The value of a window is its Tk pathname, unless the window
- has not been created yet. (It must have a create script.)
- In this case an empty string is returned, and you must query the
- window by its index position to get more information.
- .RE
- .TP
- fIpathName fBedit fIoption fR?fIarg arg ...fR?
- .VS 8.4
- This command controls the undo mechanism and the modified flag. The
- exact behavior of the command depends on the fIoptionfR argument
- that follows the fBeditfR argument. The following forms of the
- command are currently supported:
- .RS
- .TP
- fIpathName fBedit modified ?fIbooleanfR?
- If fIbooleanfR is not specified, returns the modified flag of the
- widget. The insert, delete, edit undo and edit redo commands or the
- user can set or clear the modified flag. If fIbooleanfR is
- specified, sets the modified flag of the widget to fIbooleanfR.
- .TP
- fIpathName fBedit redofR
- When the fB-undofR option is true, reapplies the last undone edits
- provided no other edits were done since then. Generates an error when
- the redo stack is empty. Does nothing when the fB-undofR option is
- false.
- .TP
- fIpathName fBedit resetfR
- Clears the undo and redo stacks.
- .TP
- fIpathName fBedit separatorfR
- Inserts a separator (boundary) on the undo stack. Does nothing when
- the fB-undofR option is false.
- .TP
- fIpathName fBedit undofR
- Undoes the last edit action when the fB-undofR option is true. An
- edit action is defined as all the insert and delete commands that are
- recorded on the undo stack in between two separators. Generates an
- error when the undo stack is empty. Does nothing when the fB-undofR
- option is false.
- .RE
- .VE 8.4
- .TP
- fIpathName fBget fIindex1 fR?fIindex2 ...fR?
- 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 fIindex1fR and ending just before
- the one whose index is fIindex2fR (the character at fIindex2fR
- will not be returned).
- If fIindex2fR is omitted then the single character at fIindex1fR
- is returned.
- If there are no characters in the specified range (e.g. fIindex1fR
- is past the end of the file or fIindex2fR is less than or equal
- to fIindex1fR) then an empty string is returned.
- If the specified range contains embedded windows, no information
- about them is included in the returned string.
- .VS 8.4
- If multiple index pairs are given, multiple ranges of text will be returned
- in a list. Invalid ranges will not be represented with empty strings in
- the list. The ranges are returned in the order passed to fBgetfR.
- .VE 8.4
- .TP
- fIpathName fBimage fIoption fR?fIarg arg ...fR?
- This command is used to manipulate embedded images.
- The behavior of the command depends on the fIoptionfR argument
- that follows the fBtagfR argument.
- The following forms of the command are currently supported:
- .RS
- .TP
- fIpathName fBimage cgetfR fIindex optionfR
- Returns the value of a configuration option for an embedded image.
- fIIndexfR identifies the embedded image, and fIoptionfR
- specifies a particular configuration option, which must be one of
- the ones listed in the section fBEMBEDDED IMAGESfR.
- .TP
- fIpathName fBimage configure fIindexfR ?fIoption value ...fR?
- Query or modify the configuration options for an embedded image.
- If no fIoptionfR is specified, returns a list describing all of
- the available options for the embedded image at fIindexfR
- (see fBTk_ConfigureInfofR for information on the format of this list).
- If fIoptionfR is specified with no fIvaluefR, 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
- fIoptionfR is specified).
- If one or more fIoption-valuefR pairs are specified, then the command
- modifies the given option(s) to have the given value(s); in
- this case the command returns an empty string.
- See fBEMBEDDED IMAGESfR for information on the options that
- are supported.
- .TP
- fIpathName fBimage create fIindexfR ?fIoption value ...fR?
- This command creates a new image annotation, which will appear
- in the text at the position given by fIindexfR.
- Any number of fIoption-valuefR pairs may be specified to
- configure the annotation.
- Returns a unique identifier that may be used as an index to refer to
- this image.
- See fBEMBEDDED IMAGESfR for information on the options that
- are supported, and a description of the identifier returned.
- .TP
- fIpathName fBimage namesfR
- Returns a list whose elements are the names of all image instances currently
- embedded in fIwindowfR.
- .RE
- .TP
- fIpathName fBindex fIindexfR
- Returns the position corresponding to fIindexfR in the form
- fIline.charfR where fIlinefR is the line number and fIcharfR
- is the character number.
- fIIndexfR may have any of the forms described under fBINDICESfR above.
- .TP
- fIpathName fBinsert fIindex chars fR?fItagList chars tagList ...fR?
- Inserts all of the fIcharsfR arguments just before the character at
- fIindexfR.
- If fIindexfR refers to the end of the text (the character after
- the last newline) then the new text is inserted just before the
- last newline instead.
- If there is a single fIcharsfR argument and no fItagListfR, then
- the new text will receive any tags that are present on both the
- character before and the character after the insertion point; if a tag
- is present on only one of these characters then it will not be
- applied to the new text.
- If fItagListfR is specified then it consists of a list of
- tag names; the new characters will receive all of the tags in
- this list and no others, regardless of the tags present around
- the insertion point.
- If multiple fIcharsfR-fItagListfR argument pairs are present,
- they produce the same effect as if a separate fBinsertfR widget
- command had been issued for each pair, in order.
- The last fItagListfR argument may be omitted.
- .TP
- fIpathName fBmark fIoption fR?fIarg arg ...fR?
- This command is used to manipulate marks. The exact behavior of
- the command depends on the fIoptionfR argument that follows
- the fBmarkfR argument. The following forms of the command
- are currently supported:
- .RS
- .TP
- fIpathName fBmark gravity fImarkNamefR ?fIdirectionfR?
- If fIdirectionfR is not specified, returns fBleftfR or fBrightfR
- to indicate which of its adjacent characters fImarkNamefR is attached
- to.
- If fIdirectionfR is specified, it must be fBleftfR or fBrightfR;
- the gravity of fImarkNamefR is set to the given value.
- .TP
- fIpathName fBmark namesfR
- Returns a list whose elements are the names of all the marks that
- are currently set.
- .TP
- fIpathName fBmark next fIindexfR
- Returns the name of the next mark at or after fIindexfR.
- If fIindexfR is specified in numerical form, then the search for
- the next mark begins at that index.
- If fIindexfR is the name of a mark, then the search for
- the next mark begins immediately after that mark.
- This can still return a mark at the same position if
- there are multiple marks at the same index.
- These semantics mean that the fBmark nextfP operation can be used to
- step through all the marks in a text widget in the same order
- as the mark information returned by the fBdumpfP operation.
- If a mark has been set to the special fBendfP index,
- then it appears to be fIafterfP fBendfP with respect to the fBmark nextfP operation.
- An empty string is returned if there are no marks after fIindexfR.
- .TP
- fIpathName fBmark previous fIindexfR
- Returns the name of the mark at or before fIindexfR.
- If fIindexfR is specified in numerical form, then the search for
- the previous mark begins with the character just before that index.
- If fIindexfR is the name of a mark, then the search for
- the next mark begins immediately before that mark.
- This can still return a mark at the same position if
- there are multiple marks at the same index.
- These semantics mean that the fBmark previousfP operation can be used to
- step through all the marks in a text widget in the reverse order
- as the mark information returned by the fBdumpfP operation.
- An empty string is returned if there are no marks before fIindexfR.
- .TP
- fIpathName fBmark set fImarkName indexfR
- Sets the mark named fImarkNamefR to a position just before the
- character at fIindexfR.
- If fImarkNamefR 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.
- .TP
- fIpathName fBmark unset fImarkName fR?fImarkName markName ...fR?
- Remove the mark corresponding to each of the fImarkNamefR arguments.
- The removed marks will not be usable in indices and will not be
- returned by future calls to ``fIpathName fBmark namesfR''.
- This command returns an empty string.
- .RE
- .TP
- fIpathName fBscanfR fIoption argsfR
- This command is used to implement scanning on texts. It has
- two forms, depending on fIoptionfR:
- .RS
- .TP
- fIpathName fBscan mark fIx yfR
- Records fIxfR and fIyfR and the current view in the text window,
- for use in conjunction with later fBscan dragtofR commands.
- Typically this command is associated with a mouse button press in
- the widget. It returns an empty string.
- .TP
- fIpathName fBscan dragto fIx yfR
- This command computes the difference between its fIxfR and fIyfR
- arguments and the fIxfR and fIyfR arguments to the last
- fBscan markfR command for the widget.
- It then adjusts the view by 10 times the difference in 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 string.
- .RE
- .TP
- fIpathName fBsearch fR?fIswitchesfR? fIpattern index fR?fIstopIndexfR?
- Searches the text in fIpathNamefR starting at fIindexfR for a range
- of characters that matches fIpatternfR.
- If a match is found, the index of the first character in the match is
- returned as result; otherwise an empty string is returned.
- One or more of the following switches (or abbreviations thereof)
- may be specified to control the search:
- .RS
- .TP
- fB-forwardsfR
- The search will proceed forward through the text, finding the first
- matching range starting at or after the position given by fIindexfR.
- This is the default.
- .TP
- fB-backwardsfR
- The search will proceed backward through the text, finding the
- matching range closest to fIindexfR whose first character
- is before fIindexfR.
- .TP
- fB-exactfR
- Use exact matching: the characters in the matching range must be
- identical to those in fIpatternfR.
- This is the default.
- .TP
- fB-regexpfR
- Treat fIpatternfR as a regular expression and match it against
- the text using the rules for regular expressions (see the fBregexpfR
- command for details).
- .TP
- fB-nocasefR
- Ignore case differences between the pattern and the text.
- .TP
- fB-countfI varNamefR
- The argument following fB-countfR gives the name of a variable;
- if a match is found, the number of index positions between beginning and
- end of the matching range will be stored in the variable. If there are no
- embedded images or windows in the matching range (and there are no
- elided characters if fB-elidefR is not given), this is equivalent to the
- number of characters matched. In either case, the range fImatchIdxfR to
- fImatchIdx + $count charsfR will return the entire matched text.
- .TP
- fB-elidefR
- Find elided (hidden) text as well. By default only displayed text is
- searched.
- .TP
- fB-|-fR
- This switch has no effect except to terminate the list of switches:
- the next argument will be treated as fIpatternfR even if it starts
- with fB-fR.
- .LP
- The matching range must be entirely within a single line of text.
- For regular expression matching the newlines are removed from the ends
- of the lines before matching: use the fB$fR feature in regular
- expressions to match the end of a line.
- For exact matching the newlines are retained.
- If fIstopIndexfR is specified, the search stops at that index:
- for forward searches, no match at or after fIstopIndexfR will
- be considered; for backward searches, no match earlier in the
- text than fIstopIndexfR will be considered.
- If fIstopIndexfR is omitted, the entire text will be searched:
- when the beginning or end of the text is reached, the search
- continues at the other end until the starting location is reached
- again; if fIstopIndexfR is specified, no wrap-around will occur.
- .RE
- .TP
- fIpathName fBsee fIindexfR
- Adjusts the view in the window so that the character given by fIindexfR
- is completely visible.
- If fIindexfR is already visible then the command does nothing.
- If fIindexfR is a short distance out of view, the command
- adjusts the view just enough to make fIindexfR visible at the
- edge of the window.
- If fIindexfR is far out of view, then the command centers
- fIindexfR in the window.
- .TP
- fIpathName fBtag fIoption fR?fIarg arg ...fR?
- This command is used to manipulate tags. The exact behavior of the
- command depends on the fIoptionfR argument that follows the
- fBtagfR argument. The following forms of the command are currently
- supported:
- .RS
- .TP
- fIpathName fBtag add fItagName index1 fR?fIindex2 index1 index2 ...fR?
- Associate the tag fItagNamefR with all of the characters starting
- with fIindex1fR and ending just before
- fIindex2fR (the character at fIindex2fR isn't tagged).
- A single command may contain any number of fIindex1fR-fIindex2fR
- pairs.
- If the last fIindex2fR is omitted then the single character at
- fIindex1fR is tagged.
- If there are no characters in the specified range (e.g. fIindex1fR
- is past the end of the file or fIindex2fR is less than or equal
- to fIindex1fR) then the command has no effect.
- .TP
- fIpathName fBtag bind fItagNamefR ?fIsequencefR? ?fIscriptfR?
- This command associates fIscriptfR with the tag given by
- fItagNamefR.
- Whenever the event sequence given by fIsequencefR occurs for a
- character that has been tagged with fItagNamefR,
- the script will be invoked.
- This widget command is similar to the fBbindfR command except that
- it operates on characters in a text rather than entire widgets.
- See the fBbindfR manual entry for complete details
- on the syntax of fIsequencefR and the substitutions performed
- on fIscriptfR before invoking it.
- If all arguments are specified then a new binding is created, replacing
- any existing binding for the same fIsequencefR and fItagNamefR
- (if the first character of fIscriptfR is ``+'' then fIscriptfR
- augments an existing binding rather than replacing it).
- In this case the return value is an empty string.
- If fIscriptfR is omitted then the command returns the fIscriptfR
- associated with fItagNamefR and fIsequencefR (an error occurs
- if there is no such binding).
- If both fIscriptfR and fIsequencefR are omitted then the command
- returns a list of all the sequences for which bindings have been
- defined for fItagNamefR.
- .RS
- .PP
- .VS
- The only events for which bindings may be specified are those related
- to the mouse and keyboard (such as fBEnterfR, fBLeavefR,
- fBButtonPressfR, fBMotionfR, and fBKeyPressfR) or virtual events.
- Event bindings for a text widget use the fBcurrentfR mark described
- under fBMARKSfR above. An fBEnterfR event triggers for a tag when the tag
- first becomes present on the current character, and a fBLeavefR event
- triggers for a tag when it ceases to be present on the current character.
- fBEnterfR and fBLeavefR events can happen either because the
- fBcurrentfR mark moved or because the character at that position
- changed. Note that these events are different than fBEnterfR and
- fBLeavefR events for windows. Mouse and keyboard events are directed
- to the current character. If a virtual event is used in a binding, that
- binding can trigger only if the virtual event is defined by an underlying
- mouse-related or keyboard-related event.
- .VE
- .PP
- 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, one binding is invoked for each tag, in order
- from lowest-priority to highest priority.
- If there are multiple matching bindings for a single tag, then
- the most specific binding is chosen (see the manual entry for
- the fBbindfR command for details).
- fBcontinuefR and fBbreakfR commands within binding scripts
- are processed in the same way as for bindings created with
- the fBbindfR command.
- .PP
- If bindings are created for the widget as a whole using the
- fBbindfR command, then those bindings will supplement the
- tag bindings.
- The tag bindings will be invoked first, followed by bindings
- for the window as a whole.
- .RE
- .TP
- fIpathName fBtag cgetfR fItagName optionfR
- This command returns the current value of the option named fIoptionfR
- associated with the tag given by fItagNamefR.
- fIOptionfR may have any of the values accepted by the fBtag configurefR
- widget command.
- .TP
- fIpathName fBtag configure fItagNamefR ?fIoptionfR? ?fIvaluefR? ?fIoption value ...fR?
- This command is similar to the fBconfigurefR widget command except
- that it modifies options associated with the tag given by fItagNamefR
- instead of modifying options for the overall text widget.
- If no fIoptionfR is specified, the command returns a list describing
- all of the available options for fItagNamefR (see fBTk_ConfigureInfofR
- for information on the format of this list).
- If fIoptionfR is specified with no fIvaluefR, 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 fIoptionfR
- is specified).
- If one or more fIoption-valuefR pairs are specified, then the command
- modifies the given option(s) to have the given value(s) in fItagNamefR;
- in this case the command returns an empty string.
- See fBTAGSfR above for details on the options available for tags.
- .TP
- fIpathName fBtag delete fItagName fR?fItagName ...fR?
- Deletes all tag information for each of the fItagNamefR
- 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.
- .TP
- fIpathNamefB tag lower fItagName fR?fIbelowThisfR?
- Changes the priority of tag fItagNamefR so that it is just lower
- in priority than the tag whose name is fIbelowThisfR.
- If fIbelowThisfR is omitted, then fItagNamefR's priority
- is changed to make it lowest priority of all tags.
- .TP
- fIpathName fBtag names fR?fIindexfR?
- Returns a list whose elements are the names of all the tags that
- are active at the character position given by fIindexfR.
- If fIindexfR 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 ``fIpathName fBtagfR'' widget
- command but haven't been deleted by a ``fIpathName fBtag deletefR''
- 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.
- .TP
- fIpathName fBtag nextrange fItagName index1 fR?fIindex2fR?
- This command searches the text for a range of characters tagged
- with fItagNamefR where the first character of the range is
- no earlier than the character at fIindex1fR and no later than
- the character just before fIindex2fR (a range starting at
- fIindex2fR 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 fIindex2fR is not given then it defaults to the end of the text.
- .TP
- fIpathName fBtag prevrange fItagName index1 fR?fIindex2fR?
- This command searches the text for a range of characters tagged
- with fItagNamefR where the first character of the range is
- before the character at fIindex1fR and no earlier than
- the character at fIindex2fR (a range starting at
- fIindex2fR will be considered).
- If several matching ranges exist, the one closest to fIindex1fR 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 fIindex2fR is not given then it defaults to the beginning of the text.
- .TP
- fIpathNamefB tag raise fItagName fR?fIaboveThisfR?
- Changes the priority of tag fItagNamefR so that it is just higher
- in priority than the tag whose name is fIaboveThisfR.
- If fIaboveThisfR is omitted, then fItagNamefR's priority
- is changed to make it highest priority of all tags.
- .TP
- fIpathName fBtag ranges fItagNamefR
- Returns a list describing all of the ranges of text that have been
- tagged with fItagNamefR.
- 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.
- If there are no characters tagged with fItagfR then an
- empty string is returned.
- .TP
- fIpathName fBtag remove fItagName index1 fR?fIindex2 index1 index2 ...fR?
- Remove the tag fItagNamefR from all of the characters starting
- at fIindex1fR and ending just before
- fIindex2fR (the character at fIindex2fR isn't affected).
- A single command may contain any number of fIindex1fR-fIindex2fR
- pairs.
- If the last fIindex2fR is omitted then the single character at
- fIindex1fR is tagged.
- If there are no characters in the specified range (e.g. fIindex1fR
- is past the end of the file or fIindex2fR is less than or equal
- to fIindex1fR) then the command has no effect.
- This command returns an empty string.
- .RE
- .TP
- fIpathName fBwindow fIoption fR?fIarg arg ...fR?
- This command is used to manipulate embedded windows.
- The behavior of the command depends on the fIoptionfR argument
- that follows the fBtagfR argument.
- The following forms of the command are currently supported:
- .RS
- .TP
- fIpathName fBwindow cgetfR fIindex optionfR
- Returns the value of a configuration option for an embedded window.
- fIIndexfR identifies the embedded window, and fIoptionfR
- specifies a particular configuration option, which must be one of
- the ones listed in the section fBEMBEDDED WINDOWSfR.
- .TP
- fIpathName fBwindow configure fIindexfR ?fIoption value ...fR?
- Query or modify the configuration options for an embedded window.
- If no fIoptionfR is specified, returns a list describing all of
- the available options for the embedded window at fIindexfR
- (see fBTk_ConfigureInfofR for information on the format of this list).
- If fIoptionfR is specified with no fIvaluefR, 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
- fIoptionfR is specified).
- If one or more fIoption-valuefR pairs are specified, then the command
- modifies the given option(s) to have the given value(s); in
- this case the command returns an empty string.
- See fBEMBEDDED WINDOWSfR for information on the options that
- are supported.
- .TP
- fIpathName fBwindow create fIindexfR ?fIoption value ...fR?
- This command creates a new window annotation, which will appear
- in the text at the position given by fIindexfR.
- Any number of fIoption-valuefR pairs may be specified to
- configure the annotation.
- See fBEMBEDDED WINDOWSfR for information on the options that
- are supported.
- Returns an empty string.
- .TP
- fIpathName fBwindow namesfR
- Returns a list whose elements are the names of all windows currently
- embedded in fIwindowfR.
- .RE
- .TP
- fIpathName fBxview fIoption argsfR
- This command is used to query and change the horizontal position of the
- text in the widget's window. It can take any of the following
- forms:
- .RS
- .TP
- fIpathName fBxviewfR
- Returns a list containing two elements.
- Each element is a real fraction between 0 and 1; together they describe
- the portion of the document's horizontal span that is visible in
- the window.
- For example, if the first element is .2 and the second element is .6,
- 20% of the text is off-screen to the left, the middle 40% is visible
- in the window, and 40% of the text is off-screen to the right.
- The fractions refer only to the lines that are actually visible in the
- window: if the lines in the window are all very short, so that they
- are entirely visible, the returned fractions will be 0 and 1,
- even if there are other lines in the text that are
- much wider than the window.
- These are the same values passed to scrollbars via the fB-xscrollcommandfR
- option.
- .TP
- fIpathName fBxview movetofI fractionfR
- Adjusts the view in the window so that fIfractionfR of the horizontal
- span of the text is off-screen to the left.
- fIFractionfR is a fraction between 0 and 1.
- .TP
- fIpathName fBxview scroll fInumber whatfR
- This command shifts the view in the window left or right according to
- fInumberfR and fIwhatfR.
- fINumberfR must be an integer.
- fIWhatfR must be either fBunitsfR or fBpagesfR or an abbreviation
- of one of these.
- If fIwhatfR is fBunitsfR, the view adjusts left or right by
- fInumberfR average-width characters on the display; if it is
- fBpagesfR then the view adjusts by fInumberfR screenfuls.
- If fInumberfR is negative then characters farther to the left
- become visible; if it is positive then characters farther to the right
- become visible.
- .RE
- .TP
- fIpathName fByview fI?argsfR?
- This command is used to query and change the vertical position of the
- text in the widget's window.
- It can take any of the following forms:
- .RS
- .TP
- fIpathName fByviewfR
- Returns a list containing two elements, both of which are real fractions
- between 0 and 1.
- The first element gives the position of the first character in the
- top line in the window, relative to the text as a whole (0.5 means
- it is halfway through the text, for example).
- The second element gives the position of the character just after
- the last one in the bottom line of the window,
- relative to the text as a whole.
- These are the same values passed to scrollbars via the fB-yscrollcommandfR
- option.
- .TP
- fIpathName fByview movetofI fractionfR
- Adjusts the view in the window so that the character given by fIfractionfR
- appears on the top line of the window.
- fIFractionfR is a fraction between 0 and 1; 0 indicates the first
- character in the text, 0.33 indicates the character one-third the
- way through the text, and so on.
- .TP
- fIpathName fByview scroll fInumber whatfR
- This command adjust the view in the window up or down according to
- fInumberfR and fIwhatfR.
- fINumberfR must be an integer.
- fIWhatfR must be either fBunitsfR or fBpagesfR.
- If fIwhatfR is fBunitsfR, the view adjusts up or down by
- fInumberfR lines on the display; if it is fBpagesfR then
- the view adjusts by fInumberfR screenfuls.
- If fInumberfR is negative then earlier positions in the text
- become visible; if it is positive then later positions in the text
- become visible.
- .TP
- fIpathName fByview fR?fB-pickplacefR? fIindexfR
- Changes the view in the widget's window to make fIindexfR visible.
- If the fB-pickplacefR option isn't specified then fIindexfR will
- appear at the top of the window.
- If fB-pickplacefR is specified then the widget chooses where
- fIindexfR appears in the window:
- .RS
- .IP [1]
- If fIindexfR is already visible somewhere in the window then the
- command does nothing.
- .IP [2]
- If fIindexfR is only a few lines off-screen above the window then
- it will be positioned at the top of the window.
- .IP [3]
- If fIindexfR is only a few lines off-screen below the window then
- it will be positioned at the bottom of the window.
- .IP [4]
- Otherwise, fIindexfR will be centered in the window.
- .LP
- The fB-pickplacefR option has been obsoleted by the fBseefR widget
- command (fBseefR handles both x- and y-motion to make a location
- visible, whereas fB-pickplacefR only handles motion in y).
- .RE
- .TP
- fIpathName fByview fInumberfR
- This command makes the first character on the line after
- the one given by fInumberfR visible at the top of the window.
- fINumberfR must be an integer.
- This command used to be used for scrolling, but now it is obsolete.
- .RE
- .SH BINDINGS
- .PP
- Tk automatically creates class bindings for texts that give them
- the following default behavior.
- In the descriptions below, ``word'' is dependent on the value of
- the fBtcl_wordcharsfR variable. See tclvars(n).
- .IP [1]
- Clicking mouse button 1 positions the insertion cursor
- just before the character underneath the mouse cursor, sets the
- input focus to this widget, and clears any selection in the widget.
- Dragging with mouse button 1 strokes out a selection between
- the insertion cursor and the character under the mouse.
- .IP [2]
- Double-clicking with mouse button 1 selects the word under the mouse
- and positions the insertion cursor at the end of the word.
- Dragging after a double click will stroke out a selection consisting
- of whole words.
- .IP [3]
- Triple-clicking with mouse button 1 selects the line under the mouse
- and positions the insertion cursor at the end of the line.
- Dragging after a triple click will stroke out a selection consisting
- of whole lines.
- .IP [4]
- 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 button is double-clicked before dragging then the selection
- will be adjusted in units of whole words; if it is triple-clicked
- then the selection will be adjusted in units of whole lines.
- .IP [5]
- Clicking mouse button 1 with the Control key down will reposition the
- insertion cursor without affecting the selection.
- .IP [6]
- If any normal printing characters are typed, they are
- inserted at the point of the insertion cursor.
- .IP [7]
- The view in the widget can be adjusted by dragging with mouse button 2.
- If mouse button 2 is clicked without moving the mouse, the selection
- is copied into the text at the position of the mouse cursor.
- The Insert key also inserts the selection, but at the position of
- the insertion cursor.
- .IP [8]
- If the mouse is dragged out of the widget
- while button 1 is pressed, the entry will automatically scroll to
- make more text visible (if there is more text off-screen on the side
- where the mouse left the window).
- .IP [9]
- The Left and Right keys move the insertion cursor one character to the
- left or right; they also clear any selection in the text.
- If Left or Right is typed with the Shift key down, then the insertion
- cursor moves and the selection is extended to include the new character.
- Control-Left and Control-Right move the insertion cursor by words, and
- Control-Shift-Left and Control-Shift-Right move the insertion cursor
- by words and also extend the selection.
- Control-b and Control-f behave the same as Left and Right, respectively.
- Meta-b and Meta-f behave the same as Control-Left and Control-Right,
- respectively.
- .IP [10]
- The Up and Down keys move the insertion cursor one line up or
- down and clear any selection in the text.
- If Up or Right is typed with the Shift key down, then the insertion
- cursor moves and the selection is extended to include the new character.
- Control-Up and Control-Down move the insertion cursor by paragraphs (groups
- of lines separated by blank lines), and
- Control-Shift-Up and Control-Shift-Down move the insertion cursor
- by paragraphs and also extend the selection.
- Control-p and Control-n behave the same as Up and Down, respectively.
- .IP [11]
- The Next and Prior keys move the insertion cursor forward or backwards
- by one screenful and clear any selection in the text.
- If the Shift key is held down while Next or Prior is typed, then
- the selection is extended to include the new character.
- Control-v moves the view down one screenful without moving the
- insertion cursor or adjusting the selection.
- .IP [12]
- Control-Next and Control-Prior scroll the view right or left by one page
- without moving the insertion cursor or affecting the selection.
- .IP [13]
- Home and Control-a move the insertion cursor to the
- beginning of its line and clear any selection in the widget.
- Shift-Home moves the insertion cursor to the beginning of the line
- and also extends the selection to that point.
- .IP [14]
- End and Control-e move the insertion cursor to the
- end of the line and clear any selection in the widget.
- Shift-End moves the cursor to the end of the line and extends the selection
- to that point.
- .IP [15]
- Control-Home and Meta-< move the insertion cursor to the beginning of
- the text and clear any selection in the widget.
- Control-Shift-Home moves the insertion cursor to the beginning of the text
- and also extends the selection to that point.
- .IP [16]
- Control-End and Meta-> move the insertion cursor to the end of the
- text and clear any selection in the widget.
- Control-Shift-End moves the cursor to the end of the text and extends
- the selection to that point.
- .IP [17]
- The Select key and Control-Space set the selection anchor to the position
- of the insertion cursor. They don't affect the current selection.
- Shift-Select and Control-Shift-Space adjust the selection to the
- current position of the insertion cursor, selecting from the anchor
- to the insertion cursor if there was not any selection previously.
- .IP [18]
- Control-/ selects the entire contents of the widget.
- .IP [19]
- Control-e clears any selection in the widget.
- .IP [20]
- The F16 key (labelled Copy on many Sun workstations) or Meta-w
- copies the selection in the widget to the clipboard, if there is a selection.
- .VS 8.4
- This action is carried out by the command fBtk_textCopyfR.
- .VE 8.4
- .IP [21]
- The F20 key (labelled Cut on many Sun workstations) or Control-w
- copies the selection in the widget to the clipboard and deletes
- the selection.
- .VS 8.4
- This action is carried out by the command fBtk_textCutfR.
- .VE 8.4
- If there is no selection in the widget then these keys have no effect.
- .IP [22]
- The F18 key (labelled Paste on many Sun workstations) or Control-y
- inserts the contents of the clipboard at the position of the
- insertion cursor.
- .VS 8.4
- This action is carried out by the command fBtk_textPastefR.
- .VE 8.4
- .IP [23]
- The Delete key deletes the selection, if there is one in the widget.
- If there is no selection, it deletes the character to the right of
- the insertion cursor.
- .IP [24]
- Backspace and Control-h delete the selection, if there is one
- in the widget.
- If there is no selection, they delete the character to the left of
- the insertion cursor.
- .IP [25]
- Control-d deletes the character to the right of the insertion cursor.
- .IP [26]
- Meta-d deletes the word to the right of the insertion cursor.
- .IP [27]
- Control-k deletes from the insertion cursor to the end of its line;
- if the insertion cursor is already at the end of a line, then
- Control-k deletes the newline character.
- .IP [28]
- Control-o opens a new line by inserting a newline character in
- front of the insertion cursor without moving the insertion cursor.
- .IP [29]
- Meta-backspace and Meta-Delete delete the word to the left of the
- insertion cursor.
- .IP [30]
- Control-x deletes whatever is selected in the text widget
- after copying it to the clipboard.
- .IP [31]
- Control-t reverses the order of the two characters to the right of
- the insertion cursor.
- .IP [32]
- .VS 8.4
- Control-z (and Control-underscore on UNIX when fBtk_strictMotiffR is
- true) undoes the last edit action if the fB-undofR option is true.
- Does nothing otherwise.
- .IP [33]
- Control-Z (or Control-y on Windows) reapplies the last undone edit
- action if the fB-undofR option is true. Does nothing otherwise.
- .VE 8.4
- .PP
- If the widget is disabled using the fB-statefR option, then its
- view can still be adjusted and text can still be selected,
- but no insertion cursor will be displayed and no text modifications will
- take place.
- .PP
- The behavior of texts can be changed by defining new bindings for
- individual widgets or by redefining the class bindings.
- .SH "PERFORMANCE ISSUES"
- .PP
- 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.
- In most cases it is fine to have large numbers of unique tags,
- or a tag that has many distinct ranges.
- .PP
- One performance problem can arise if you have hundreds or thousands
- of different tags that all have the following characteristics:
- the first and last ranges of each tag are near the beginning and
- end of the text, respectively,
- or a single tag range covers most of the text widget.
- The cost of adding and deleting tags like this is proportional
- to the number of other tags with the same properties.
- In contrast, there is no problem with having thousands of distinct
- tags if their overall ranges are localized and spread uniformly throughout
- the text.
- .PP
- Very long text lines can be expensive,
- especially if they have many marks and tags within them.
- .PP
- The display line with the insert cursor is redrawn each time the
- cursor blinks, which causes a steady stream of graphics traffic.
- Set the fBinsertOffTimefP attribute to 0 avoid this.
- .SH "SEE ALSO"
- entry(n), scrollbar(n)
- .SH KEYWORDS
- text, widget, tkvars