| .\"*************************************************************************** |
| .\" Copyright 2018-2020,2021 Thomas E. Dickey * |
| .\" Copyright 2008-2016,2017 Free Software Foundation, Inc. * |
| .\" * |
| .\" Permission is hereby granted, free of charge, to any person obtaining a * |
| .\" copy of this software and associated documentation files (the * |
| .\" "Software"), to deal in the Software without restriction, including * |
| .\" without limitation the rights to use, copy, modify, merge, publish, * |
| .\" distribute, distribute with modifications, sublicense, and/or sell * |
| .\" copies of the Software, and to permit persons to whom the Software is * |
| .\" furnished to do so, subject to the following conditions: * |
| .\" * |
| .\" The above copyright notice and this permission notice shall be included * |
| .\" in all copies or substantial portions of the Software. * |
| .\" * |
| .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| .\" * |
| .\" Except as contained in this notice, the name(s) of the above copyright * |
| .\" holders shall not be used in advertising or otherwise to promote the * |
| .\" sale, use or other dealings in this Software without prior written * |
| .\" authorization. * |
| .\"*************************************************************************** |
| .\" |
| .\" $Id: tabs.1,v 1.35 2021/12/25 19:04:39 tom Exp $ |
| .TH @TABS@ 1 "" |
| .ds n 5 |
| .ie \n(.g .ds `` \(lq |
| .el .ds `` `` |
| .ie \n(.g .ds '' \(rq |
| .el .ds '' '' |
| .de bP |
| .ie n .IP \(bu 4 |
| .el .IP \(bu 2 |
| .. |
| .de NS |
| .ie n .sp |
| .el .sp .5 |
| .ie n .in +4 |
| .el .in +2 |
| .nf |
| .ft C \" Courier |
| .. |
| .de NE |
| .fi |
| .ft R |
| .ie n .in -4 |
| .el .in -2 |
| .. |
| .SH NAME |
| \fB@TABS@\fP \- set tabs on a terminal |
| .SH SYNOPSIS |
| \fB@TABS@\fP [\fIoptions\fP]] \fI[tabstop-list]\fP |
| .SH DESCRIPTION |
| .PP |
| The \fB@TABS@\fP program clears and sets tab-stops on the terminal. |
| This uses the terminfo \fBclear_all_tabs\fP and \fBset_tab\fP capabilities. |
| If either is absent, \fB@TABS@\fP is unable to clear/set tab-stops. |
| The terminal should be configured to use hard tabs, e.g., |
| .NS |
| stty tab0 |
| .NE |
| .PP |
| Like \fB@CLEAR@\fP(1), \fB@TABS@\fP writes to the standard output. |
| You can redirect the standard output to a file (which prevents |
| \fB@TABS@\fP from actually changing the tabstops), |
| and later \fBcat\fP the file to the screen, setting tabstops at that point. |
| .PP |
| These are hardware tabs, which cannot be queried rapidly by applications |
| running in the terminal, if at all. |
| Curses and other full-screen applications may use hardware tabs |
| in optimizing their output to the terminal. |
| If the hardware tabstops differ from the information in the terminal |
| database, the result is unpredictable. |
| Before running curses programs, |
| you should either reset tab-stops to the standard interval |
| .NS |
| tabs -8 |
| .NE |
| .PP |
| or use the \fB@RESET@\fP program, |
| since the normal initialization sequences do not ensure that tab-stops |
| are reset. |
| .SH OPTIONS |
| .SS General Options |
| .TP 5 |
| .BI \-T "name" |
| Tell \fB@TABS@\fP which terminal type to use. |
| If this option is not given, \fB@TABS@\fP will use the \fB$TERM\fP |
| environment variable. |
| If that is not set, it will use the \fIansi+tabs\fP entry. |
| .TP 5 |
| .B \-d |
| The debugging option shows a ruler line, followed by two data lines. |
| The first data line shows the expected tab-stops marked with asterisks. |
| The second data line shows the actual tab-stops, marked with asterisks. |
| .TP 5 |
| .B \-n |
| This option tells \fB@TABS@\fP to check the options and run any debugging |
| option, but not to modify the terminal settings. |
| .TP |
| \fB\-V\fP |
| reports the version of ncurses which was used in this program, and exits. |
| .PP |
| The \fB@TABS@\fP program processes a single list of tab stops. |
| The last option to be processed which defines a list is the one that |
| determines the list to be processed. |
| .SS Implicit Lists |
| Use a single number as an option, |
| e.g., \*(``\fB\-5\fP\*('' to set tabs at the given |
| interval (in this case 1, 6, 11, 16, 21, etc.). |
| Tabs are repeated up to the right margin of the screen. |
| .PP |
| Use \*(``\fB\-0\fP\*('' to clear all tabs. |
| .PP |
| Use \*(``\fB\-8\fP\*('' to set tabs to the standard interval. |
| .SS Explicit Lists |
| An explicit list can be defined after the options |
| (this does not use a \*(``\-\*(''). |
| The values in the list must be in increasing numeric order, |
| and greater than zero. |
| They are separated by a comma or a blank, for example, |
| .NS |
| tabs 1,6,11,16,21 |
| .br |
| tabs 1 6 11 16 21 |
| .NE |
| .PP |
| Use a \*(``+\*('' to treat a number |
| as an increment relative to the previous value, |
| e.g., |
| .NS |
| tabs 1,+5,+5,+5,+5 |
| .NE |
| .PP |
| which is equivalent to the 1,6,11,16,21 example. |
| .SS Predefined Tab-Stops |
| POSIX defines several predefined lists of tab stops. |
| .TP 5 |
| .B \-a |
| Assembler, IBM S/370, first format |
| .br |
| 1,10,16,36,72 |
| .TP 5 |
| .B \-a2 |
| Assembler, IBM S/370, second format |
| .br |
| 1,10,16,40,72 |
| .TP 5 |
| .B \-c |
| COBOL, normal format |
| .br |
| 1,8,12,16,20,55 |
| .TP 5 |
| .B \-c2 |
| COBOL compact format |
| .br |
| 1,6,10,14,49 |
| .TP 5 |
| .B \-c3 |
| COBOL compact format extended |
| .br |
| 1,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,67 |
| .TP 5 |
| .B \-f |
| FORTRAN |
| .br |
| 1,7,11,15,19,23 |
| .TP 5 |
| .B \-p |
| PL/I |
| .br |
| 1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61 |
| .TP 5 |
| .B \-s |
| SNOBOL |
| .br |
| 1,10,55 |
| .TP 5 |
| .B \-u |
| UNIVAC 1100 Assembler |
| .br |
| 1,12,20,44 |
| .SS Margins |
| A few terminals provide the capability for changing their left/right margins. |
| The @TABS@ program has an option to use this feature: |
| .TP 5 |
| .BI +m \ margin |
| The effect depends on whether the terminal has the margin capabilities: |
| .RS |
| .bP |
| If the terminal provides the capability for setting the left margin, |
| @TABS@ uses this, and adjusts the available width for tab-stops. |
| .bP |
| If the terminal does not provide the margin capabilities, |
| @TABS@ imitates the effect, putting the tab stops at the appropriate |
| place on each line. |
| The terminal's left-margin is not modified. |
| .RE |
| .IP |
| If the \fImargin\fP parameter is omitted, the default is 10. |
| Use \fB+m0\fP to reset the left margin, |
| i.e., to the left edge of the terminal's display. |
| Before setting a left-margin, |
| @TABS@ resets the margin to reduce problems which might arise |
| on moving the cursor before the current left-margin. |
| .PP |
| When setting or resetting the left-margin, |
| @TABS@ may reset the right-margin. |
| .SH PORTABILITY |
| .PP |
| \fIIEEE Std 1003.1/The Open Group Base Specifications Issue 7\fP (POSIX.1-2008) |
| describes a \fBtabs\fP utility. |
| However |
| .bP |
| This standard describes a \fB+m\fP option, to set a terminal's left-margin. |
| Very few of the entries in the terminal database provide the |
| \fBsmgl\fP (\fBset_left_margin\fP) or |
| \fBsmglp\fP (\fBset_left_margin_parm\fP) |
| capability needed to support the feature. |
| .bP |
| There is no counterpart in X/Open Curses Issue 7 for this utility, |
| unlike \fB@TPUT@\fP(1). |
| .PP |
| The \fB\-d\fP (debug) and \fB\-n\fP (no-op) options are extensions not provided |
| by other implementations. |
| .PP |
| A \fBtabs\fP utility appeared in PWB/Unix 1.0 (1977). |
| There was a reduced version of the \fBtabs\fP utility |
| in Unix 7th edition and in 3BSD (1979). |
| The latter supported a single \*(``\-n\*('' option |
| (to cause the first tab stop to be set on the left margin). |
| That option is not documented by POSIX. |
| .PP |
| The PWB/Unix \fBtabs\fP utility, which was included in System III (1980), |
| used built-in tables rather than the terminal database, |
| to support a half-dozen hardcopy terminal (printer) types. |
| It also had built-in logic to support the left-margin, |
| as well as a feature for copying the tab settings from a file. |
| .PP |
| Later versions of Unix, e.g., SVr4, |
| added support for the terminal database, |
| but kept the tables to support the printers. |
| In an earlier development effort, |
| the tab-stop initialization provided by \fBtset\fP (1982) |
| and incorporated into \fBtput\fP uses the terminal database, |
| .PP |
| The \fB+m\fP option was documented |
| in the Base Specifications Issue 5 (Unix98, 1997), |
| and omitted in Issue 6 (Unix03, 2004) without documenting the rationale, |
| though an introductory comment |
| \fI\*(``and optionally adjusts the margin\*(''\fP remains, |
| overlooked in the removal. |
| The documented \fBtabs\fP utility in Issues 6 and later has no mechanism |
| for setting margins. |
| The \fB+m\fP option in this implementation differs from the feature |
| in SVr4 by using terminal capabilities rather than built-in tables. |
| .PP |
| POSIX documents no limits on the number of tab stops. |
| Documentation for other implementations states that there is a limit on the |
| number of tab stops |
| (e.g., 20 in PWB/Unix's \fBtabs\fP utility). |
| While some terminals may not accept an arbitrary number |
| of tab stops, this implementation will attempt to set tab stops up to the |
| right margin of the screen, if the given list happens to be that long. |
| .PP |
| The \fIRationale\fP section of the POSIX documentation goes into some |
| detail about the ways the committee considered redesigning the |
| \fBtabs\fP and \fBtput\fP utilities, |
| without proposing an improved solution. |
| It comments that |
| .RS 5 |
| .PP |
| no known historical version of tabs supports the capability of setting |
| arbitrary tab stops. |
| .RE |
| .PP |
| However, the \fIExplicit Lists\fP described in this manual page |
| were implemented in PWB/Unix. |
| Those provide the capability of setting abitrary tab stops. |
| .SH SEE ALSO |
| \fB@INFOCMP@\fP(1M), |
| \fB@TSET@\fP(1), |
| \fBcurses\fP(3X), |
| \fBterminfo\fP(\*n). |
| .PP |
| This describes \fBncurses\fP |
| version @NCURSES_MAJOR@.@NCURSES_MINOR@ (patch @NCURSES_PATCH@). |