1ntextIndent(n) ntext Indentation for the Text Widget ntextIndent(n)
2
3
4
5______________________________________________________________________________
6
8 ntextIndent - ntext Indentation for the Text Widget
9
11 package require Tcl 8.5
12
13 package require Tk 8.5
14
15 package require ntext ?0.81?
16
17______________________________________________________________________________
18
20 The ntext package provides a binding tag named Ntext for use by text
21 widgets in place of the default Text binding tag.
22
23 Tk's text widget may be configured to wrap lines of text that are
24 longer than the width of the text area, a feature that is familiar from
25 text editors and word processors. A complete line of text (delimited
26 by newlines, or by the beginning or end of the document) is called a
27 "logical line". When a logical line is wrapped onto more than one line
28 of the display area, these fragments of the logical line are called
29 "display lines".
30
31 If a logical line begins with whitespace, then wrapped display lines
32 begin further to the left than the first display line, which can make
33 the text layout untidy and difficult to read. The Ntext binding tag
34 provides facilities so that a text widget in -wrap word mode will auto‐
35 matically indent display lines (other than the first) to match the ini‐
36 tial whitespace of the first display line.
37
38 This indentation is available to text widgets only in -wrap word mode.
39
41 The behavior of Ntext may be configured application-wide by setting the
42 values of a number of namespace variables:
43
44 ::ntext::classicWrap
45
46 · 0 - selects Ntext behaviour, i.e. display lines are indented to
47 match the initial whitespace of the first display line of a log‐
48 ical line.
49
50 No other action is required if this option, and the text wid‐
51 get's -wrap option, are set before any text is entered in the
52 widget, and if text is entered and edited only by the mouse and
53 keyboard. If, instead, text is manipulated by the script, or if
54 the text widget's -wrap option or the value of ::ntext::clas‐
55 sicWrap are changed while the widget holds text, then calls to
56 ntext functions are needed to alter the indentation. See the
57 section INDENTING DISPLAY LINES for detailed instructions.
58
59 · 1 - (default value) selects classic Text behaviour, i.e. no
60 indentation.
61
62 Advanced Use
63
64 ::ntext::newWrapRegexp
65
66 · the value is a regexp pattern that determines the character of a
67 logical line to which display lines other than the first will be
68 aligned. The default value, [^[:space:]], ensures alignment
69 with the first non-whitespace character.
70
72 To use Ntext 's display line indentation:
73
74 [1] Set the variable ::ntext::classicWrap to 0 (default value is 1).
75 This enables bindings that will preserve indentation whenever
76 the user modifies the widget contents using the keyboard and
77 mouse. If the widget already holds text, call ::ntext::wrapIn‐
78 dent to initialise indentation.
79
80 Further instructions apply if the program changes the widget's
81 contents, wrap configuration, or indent configuration.
82
83 [2] The program can change the text contents, e.g. by the .text
84 insert command. Such a change does not trigger a window bind‐
85 ing, so the program should explicitly call function
86 ::ntext::wrapIndent after inserting text.
87
88 [3] Auto-indentation occurs only if the widget is in -wrap word
89 mode. If the program changes to or from -wrap word when the
90 widget is not empty, it should call ::ntext::wrapIndent to for‐
91 mat the widget's text.
92
93 [4] If indentation is used, and then switched off by setting
94 ::ntext::classicWrap to 1, call ::ntext::wrapIndent to remove
95 indentation.
96
98 ::ntext::wrapIndent textWidget ?index1? ?index2?
99
100 · Adjust the indentation of a text widget. Different cases are
101 discussed below.
102
103 ::ntext::wrapIndent textWidget
104
105 · Adjust the indentation of all the text in text widget textWid‐
106 get.
107
108 ::ntext::wrapIndent textWidget index1
109
110 · Adjust the indentation of a single logical line of a text widget
111 - the line of textWidget that contains the index index1.
112
113 ::ntext::wrapIndent textWidget index1 index2
114
115 · Adjust the indentation of a range of logical lines of a text
116 widget - the lines of textWidget that contain indices index1 to
117 index2.
118
119 Usage
120
121 · ::ntext::wrapIndent should be called only if the script changes
122 the widget's contents or display properties. If the contents of
123 the widget have been modified by the keyboard or mouse, it is
124 not necessary for the script to call ::ntext::wrapIndent because
125 the appropriate calls are made automatically by the Ntext bind‐
126 ings.
127
128 · The script should normally call ::ntext::wrapIndent if, for
129 example, the script changes one of the following when the widget
130 is not empty: the value of ::ntext::classicWrap, or the widget's
131 -wrap status, or the widget's tab spacing, or the font size, or
132 the widget's contents.
133
134 · A call of the form ::ntext::wrapIndent textWidget will always
135 suffice, but if changes are needed only to certain lines, it is
136 more efficient to specify those lines with the optional argu‐
137 ments ?index1?, ?index2?.
138
139 · If the widget is in -word wrap mode, and if ::ntext::classicWrap
140 is set to 0, ::ntext::wrapIndent will apply indentation to the
141 logical lines within the range specified by the function's argu‐
142 ments.
143
144 · In other cases, i.e. if the widget is in -word char or -word
145 none mode, or if ::ntext::classicWrap is set to 1,
146 ::ntext::wrapIndent will remove the indentation of the logical
147 lines within the range specified by the function's arguments.
148
150 To switch on Ntext 's indentation and use it in widget .t:
151
152
153 package require ntext
154 set ::ntext::classicWrap 0
155 text .t -wrap word
156 bindtags .t {.t Ntext . all}
157
158 To decide later to switch off Ntext 's indentation:
159
160
161 set ::ntext::classicWrap 1
162 ::ntext::wrapIndent .t
163
164 To decide later to switch Ntext 's indentation back on:
165
166
167 set ::ntext::classicWrap 0
168 ::ntext::wrapIndent .t 1.0 end
169
170 To inject some text into the widget:
171
172
173 set foo [.t index end]
174 .t insert end {This line was added by the script, not the keyboard!}
175 ::ntext::wrapIndent .t $foo end
176
177 To switch to -wrap char mode:
178
179
180 .t configure -wrap char
181 ::ntext::wrapIndent .t
182
183
185 bindtags, ntext, re_syntax, regexp, text
186
188 bindtags, re_syntax, regexp, text
189
190
191
192ntext 0.81 ntextIndent(n)