]> ncurses.scripts.mit.edu Git - ncurses.git/blob - doc/html/man/tabs.1.html
ncurses 6.4 - patch 20231217
[ncurses.git] / doc / html / man / tabs.1.html
1 <!--
2   ****************************************************************************
3   * Copyright 2018-2021,2023 Thomas E. Dickey                                *
4   * Copyright 2008-2016,2017 Free Software Foundation, Inc.                  *
5   *                                                                          *
6   * Permission is hereby granted, free of charge, to any person obtaining a  *
7   * copy of this software and associated documentation files (the            *
8   * "Software"), to deal in the Software without restriction, including      *
9   * without limitation the rights to use, copy, modify, merge, publish,      *
10   * distribute, distribute with modifications, sublicense, and/or sell       *
11   * copies of the Software, and to permit persons to whom the Software is    *
12   * furnished to do so, subject to the following conditions:                 *
13   *                                                                          *
14   * The above copyright notice and this permission notice shall be included  *
15   * in all copies or substantial portions of the Software.                   *
16   *                                                                          *
17   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
18   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
19   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
20   * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
21   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
22   * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
23   * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
24   *                                                                          *
25   * Except as contained in this notice, the name(s) of the above copyright   *
26   * holders shall not be used in advertising or otherwise to promote the     *
27   * sale, use or other dealings in this Software without prior written       *
28   * authorization.                                                           *
29   ****************************************************************************
30   * @Id: tabs.1,v 1.51 2023/12/17 00:13:57 tom Exp @
31   * https://minnie.tuhs.org/cgi-bin/utree.pl?file=PWB1/sys/source/s2/\
32   *   tabs.c
33   * https://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/tabs.c
34   * https://minnie.tuhs.org/cgi-bin/utree.pl?file=3BSD/usr/src/cmd/\
35   *   tabs.c
36   * https://minnie.tuhs.org/cgi-bin/utree.pl?file=SysVR4/cmd/tabs/tabs.c
37   * https://pubs.opengroup.org/onlinepubs/009604499/utilities/tabs.html
38 -->
39 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
40 <HTML>
41 <HEAD>
42 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
43 <meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
44 <TITLE>tabs 1 2023-12-16 ncurses 6.4 User commands</TITLE>
45 <link rel="author" href="mailto:bug-ncurses@gnu.org">
46
47 </HEAD>
48 <BODY>
49 <H1 class="no-header">tabs 1 2023-12-16 ncurses 6.4 User commands</H1>
50 <PRE>
51 <STRONG><A HREF="tabs.1.html">tabs(1)</A></STRONG>                          User commands                         <STRONG><A HREF="tabs.1.html">tabs(1)</A></STRONG>
52
53
54
55
56 </PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
57        <STRONG>tabs</STRONG> - set terminal tab stops
58
59
60 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
61        <STRONG>tabs</STRONG> [<EM>options</EM>] [<EM>tabstop-list</EM>]
62
63
64 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
65        The  <STRONG>tabs</STRONG> program clears and sets tab-stops on the terminal.  This uses
66        the terminfo <STRONG>clear_all_tabs</STRONG> and <STRONG>set_tab</STRONG>  capabilities.   If  either  is
67        absent,  <STRONG>tabs</STRONG> is unable to clear/set tab-stops.  The terminal should be
68        configured to use hard tabs, e.g.,
69
70            stty tab0
71
72        Like <STRONG><A HREF="clear.1.html">clear(1)</A></STRONG>, <STRONG>tabs</STRONG> writes to the standard output.   You  can  redirect
73        the  standard  output  to  a  file  (which  prevents <STRONG>tabs</STRONG> from actually
74        changing the tabstops), and later <STRONG>cat</STRONG> the file to the  screen,  setting
75        tabstops at that point.
76
77        These   are   hardware   tabs,  which  cannot  be  queried  rapidly  by
78        applications running in the terminal, if  at  all.   Curses  and  other
79        full-screen  applications  may  use  hardware  tabs in optimizing their
80        output to the terminal.  If  the  hardware  tabstops  differ  from  the
81        information  in  the  terminal  database,  the result is unpredictable.
82        Before running curses programs, you should either  reset  tab-stops  to
83        the standard interval
84
85            tabs -8
86
87        or  use the <STRONG>reset</STRONG> program, since the normal initialization sequences do
88        not ensure that tab-stops are reset.
89
90
91 </PRE><H2><a name="h2-OPTIONS">OPTIONS</a></H2><PRE>
92
93 </PRE><H3><a name="h3-General-Options">General Options</a></H3><PRE>
94        <STRONG>-T</STRONG><EM>name</EM>
95             Tell <STRONG>tabs</STRONG> which terminal type to  use.   If  this  option  is  not
96             given,  <STRONG>tabs</STRONG>  will use the <STRONG>$TERM</STRONG> environment variable.  If that is
97             not set, it will use the <EM>ansi+tabs</EM> entry.
98
99        <STRONG>-d</STRONG>   The debugging option shows a ruler  line,  followed  by  two  data
100             lines.   The  first  data line shows the expected tab-stops marked
101             with asterisks.  The second data line shows the actual  tab-stops,
102             marked with asterisks.
103
104        <STRONG>-n</STRONG>   This  option tells <STRONG>tabs</STRONG> to check the options and run any debugging
105             option, but not to modify the terminal settings.
106
107        <STRONG>-V</STRONG>   reports the version of <EM>ncurses</EM> which was used in this program, and
108             exits.
109
110        The <STRONG>tabs</STRONG> program processes a single list of tab stops.  The last option
111        to be processed which defines a list is the  one  that  determines  the
112        list to be processed.
113
114
115 </PRE><H3><a name="h3-Implicit-Lists">Implicit Lists</a></H3><PRE>
116        Use  a  single number as an option, e.g., "<STRONG>-5</STRONG>" to set tabs at the given
117        interval (in this case 1, 6, 11, 16, 21, etc.).  Tabs are  repeated  up
118        to the right margin of the screen.
119
120        Use "<STRONG>-0</STRONG>" to clear all tabs.
121
122        Use "<STRONG>-8</STRONG>" to set tabs to the standard interval.
123
124
125 </PRE><H3><a name="h3-Explicit-Lists">Explicit Lists</a></H3><PRE>
126        An  explicit list can be defined after the options (this does not use a
127        "-").  The values in the list must be in increasing numeric order,  and
128        greater  than  zero.   They  are  separated  by a comma or a blank, for
129        example,
130
131            tabs 1,6,11,16,21
132            tabs 1 6 11 16 21
133
134        Use a "+" to treat a number as an increment relative  to  the  previous
135        value, e.g.,
136
137            tabs 1,+5,+5,+5,+5
138
139        which is equivalent to the 1,6,11,16,21 example.
140
141
142 </PRE><H3><a name="h3-Predefined-Tab-Stops">Predefined Tab-Stops</a></H3><PRE>
143        POSIX defines several predefined lists of tab stops.
144
145        <STRONG>-a</STRONG>   Assembler, IBM S/370, first format
146             1,10,16,36,72
147
148        <STRONG>-a2</STRONG>  Assembler, IBM S/370, second format
149             1,10,16,40,72
150
151        <STRONG>-c</STRONG>   COBOL, normal format
152             1,8,12,16,20,55
153
154        <STRONG>-c2</STRONG>  COBOL compact format
155             1,6,10,14,49
156
157        <STRONG>-c3</STRONG>  COBOL compact format extended
158             1,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,67
159
160        <STRONG>-f</STRONG>   FORTRAN
161             1,7,11,15,19,23
162
163        <STRONG>-p</STRONG>   PL/I
164             1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61
165
166        <STRONG>-s</STRONG>   SNOBOL
167             1,10,55
168
169        <STRONG>-u</STRONG>   UNIVAC 1100 Assembler
170             1,12,20,44
171
172
173 </PRE><H3><a name="h3-Margins">Margins</a></H3><PRE>
174        A  few  terminals  provide the capability for changing their left/right
175        margins.  The tabs program has an option to use this feature:
176
177        <STRONG>+m</STRONG> <EM>margin</EM>
178             The  effect  depends  on  whether  the  terminal  has  the  margin
179             capabilities:
180
181             <STRONG>o</STRONG>   If  the  terminal provides the capability for setting the left
182                 margin, tabs uses this, and adjusts the  available  width  for
183                 tab-stops.
184
185             <STRONG>o</STRONG>   If the terminal does not provide the margin capabilities, tabs
186                 imitates the effect, putting the tab stops at the  appropriate
187                 place  on  each  line.   The  terminal's  left-margin  is  not
188                 modified.
189
190             If the <EM>margin</EM> parameter is omitted, the default is 10.  Use <STRONG>+m0</STRONG> to
191             reset  the  left  margin, i.e., to the left edge of the terminal's
192             display.  Before setting a left-margin, tabs resets the margin  to
193             reduce  problems which might arise on moving the cursor before the
194             current left-margin.
195
196        When setting or resetting the left-margin, tabs may  reset  the  right-
197        margin.
198
199
200 </PRE><H2><a name="h2-FILES">FILES</a></H2><PRE>
201        <EM>/usr/share/tabset</EM>
202               tab stop initialization database
203
204
205 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
206        <EM>IEEE</EM>   <EM>Std</EM>   <EM>1003.1/The</EM>   <EM>Open</EM>   <EM>Group</EM>   <EM>Base</EM>  <EM>Specifications</EM>  <EM>Issue</EM>  <EM>7</EM>
207        (POSIX.1-2008) describes a <STRONG>tabs</STRONG> utility.  However
208
209        <STRONG>o</STRONG>   This standard describes a <STRONG>+m</STRONG> option,  to  set  a  terminal's  left-
210            margin.   Very  few of the entries in the terminal database provide
211            the  <STRONG>smgl</STRONG>   (<STRONG>set_left_margin</STRONG>)   or   <STRONG>smglp</STRONG>   (<STRONG>set_left_margin_parm</STRONG>)
212            capability needed to support the feature.
213
214        <STRONG>o</STRONG>   There  is no counterpart in X/Open Curses Issue 7 for this utility,
215            unlike <STRONG><A HREF="tput.1.html">tput(1)</A></STRONG>.
216
217        The <STRONG>-d</STRONG> (debug) and <STRONG>-n</STRONG> (no-op) options are extensions  not  provided  by
218        other implementations.
219
220
221 </PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
222        A  <STRONG>tabs</STRONG>  utility  appeared  in  PWB/Unix 1.0 (1977).  A reduced version
223        shipped in Seventh Edition Unix (early 1979) and  in  3BSD  (later  the
224        same year); it supported a "-n" option to set the first tab stop at the
225        left margin.  That option is not documented by POSIX.
226
227        The PWB/Unix <STRONG>tabs</STRONG> utility returned  in  System  III  (1980),  and  used
228        built-in  tables  rather than the terminal database, to support a half-
229        dozen hardcopy terminal (printer) types.  It also had built-in logic to
230        support  setting  the left margin, as well as a feature for copying the
231        tab settings from a file.
232
233        Versions of the program in later releases of AT&amp;T Unix, such  as  SVr4,
234        added  support  for  the  terminal database, but retained the tables to
235        support the printers.  In an earlier development effort, the  tab  stop
236        initialization  provided  by  <STRONG><A HREF="tset.1.html">tset(1)</A></STRONG>  (1982),  and  incorporated  into
237        <STRONG><A HREF="tput.1.html">tput(1)</A></STRONG> uses the terminal database,
238
239        The <STRONG>+m</STRONG> option was documented in the POSIX Base Specifications  Issue  5
240        (Unix98,  1997), then omitted in Issue 6 (Unix03, 2004) without express
241        motivation, though an introductory comment <EM>"and</EM> <EM>optionally</EM> <EM>adjusts</EM>  <EM>the</EM>
242        <EM>margin"</EM>   remains,   overlooked  in  the  removal.   The  <STRONG>tabs</STRONG>  utility
243        documented in Issues 6 and later has no mechanism for setting  margins.
244        The  <STRONG>+m</STRONG>  option  in <EM>ncurses</EM> <STRONG>tabs</STRONG> differs from the SVr4 feature by using
245        terminal capabilities rather than built-in tables.
246
247        POSIX  documents  no  limit  on  the  number  of  tab   stops.    Other
248        implementations impose one; the limit is 20 in PWB/Unix's <STRONG>tabs</STRONG> utility.
249        While some terminals may not accept an arbitrary number of  tab  stops,
250        <EM>ncurses</EM>  <STRONG>tabs</STRONG>  attempts  to set tab stops up to the right margin if the
251        list thereof is sufficiently long.
252
253        The "Rationale" section of the Issue 6 <STRONG>tabs</STRONG> reference page details  how
254        the  committee  considered  redesigning  the  <STRONG>tabs</STRONG>  and <STRONG>tput</STRONG> utilities,
255        without settling on an improved solution.  It claims that
256
257             no known historical version of tabs  supports  the  capability  of
258             setting arbitrary tab stops.
259
260        Nevertheless,  the  feature  described  in  subsection "Explicit Lists"
261        above was implemented in PWB/Unix, and permits the setting of  abitrary
262        tab stops.
263
264
265 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
266        <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>, <STRONG><A HREF="tset.1.html">tset(1)</A></STRONG>, <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
267
268
269
270 ncurses 6.4                       2023-12-16                           <STRONG><A HREF="tabs.1.html">tabs(1)</A></STRONG>
271 </PRE>
272 <div class="nav">
273 <ul>
274 <li><a href="#h2-NAME">NAME</a></li>
275 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
276 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a></li>
277 <li><a href="#h2-OPTIONS">OPTIONS</a>
278 <ul>
279 <li><a href="#h3-General-Options">General Options</a></li>
280 <li><a href="#h3-Implicit-Lists">Implicit Lists</a></li>
281 <li><a href="#h3-Explicit-Lists">Explicit Lists</a></li>
282 <li><a href="#h3-Predefined-Tab-Stops">Predefined Tab-Stops</a></li>
283 <li><a href="#h3-Margins">Margins</a></li>
284 </ul>
285 </li>
286 <li><a href="#h2-FILES">FILES</a></li>
287 <li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
288 <li><a href="#h2-HISTORY">HISTORY</a></li>
289 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
290 </ul>
291 </div>
292 </BODY>
293 </HTML>