1ntextIndent(n)       ntext Indentation for the Text Widget      ntextIndent(n)
2
3
4
5______________________________________________________________________________
6

NAME

8       ntextIndent - ntext Indentation for the Text Widget
9

SYNOPSIS

11       package require Tcl  8.5
12
13       package require Tk  8.5
14
15       package require ntext  ?0.81?
16
17______________________________________________________________________________
18

DESCRIPTION

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

CONFIGURATION OPTIONS

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

INDENTING DISPLAY LINES

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

FUNCTIONS

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

EXAMPLES

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

SEE ALSO

185       bindtags, ntext, re_syntax, regexp, text
186

KEYWORDS

188       bindtags, re_syntax, regexp, text
189
190
191
192ntext                                0.81                       ntextIndent(n)
Impressum