---
name: "tabify"
section: "3tcl"
platform: "linux"
package: "tcllib"
version: "2.0+dfsg-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/tabify"
---

# tabify(3tcl)

Procedures to (un)tabify strings

```

```

## NAME

textutil::tabify - Procedures to (un)tabify strings

## SYNOPSIS

package require **Tcl 8.5 9**

package require **textutil::tabify ?0.8?**

**::textutil::tabify::tabify** *string* ?*num*?

**::textutil::tabify::tabify2** *string* ?*num*?

**::textutil::tabify::untabify** *string* ?*num*?

**::textutil::tabify::untabify2** *string* ?*num*?

```

```

## DESCRIPTION

The package **textutil::tabify** provides commands that convert between tabulation and ordinary whitespace in strings.

The complete set of procedures is described below.

- **::textutil::tabify::tabify** *string* ?*num*?

  Tabify the *string* by replacing any substring of *num* space chars by a tabulation and return the result as a new string. *num* defaults to 8.

- **::textutil::tabify::tabify2** *string* ?*num*?

  Similar to **::textutil::tabify** this command tabifies the *string* and returns the result as a new string. A different algorithm is used however. Instead of replacing any substring of *num* spaces this command works more like an editor. *num* defaults to 8.

  Each line of the text in *string* is treated as if there are tabstops every *num* columns. Only sequences of space characters containing more than one space character and found immediately before a tabstop are replaced with tabs.

- **::textutil::tabify::untabify** *string* ?*num*?

  Untabify the *string* by replacing any tabulation char by a substring of *num* space chars and return the result as a new string. *num* defaults to 8.

- **::textutil::tabify::untabify2** *string* ?*num*?

  Untabify the *string* by replacing any tabulation char by a substring of at most *num* space chars and return the result as a new string. Unlike **textutil::tabify::untabify** each tab is not replaced by a fixed number of space characters.  The command overlays each line in the *string* with tabstops every *num* columns instead and replaces tabs with just enough space characters to reach the next tabstop. This is the complement of the actions taken by **::textutil::tabify::tabify2**. *num* defaults to 8.

  There is one asymmetry though: A tab can be replaced with a single space, but not the other way around.

## BUGS, IDEAS, FEEDBACK

This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category *textutil* of the *Tcllib Trackers* \[http://core.tcl.tk/tcllib/reportlist\]. Please also report any ideas for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of **diff -u**.

Note further that *attachments* are strongly preferred over inlined patches. Attachments can be made by going to the **Edit** form of the ticket immediately after its creation, and then using the left-most button in the secondary navigation bar.

## SEE ALSO

[regexp(3tcl)](/regexp/3tcl.md), [split(3tcl)](/split/3tcl.md), [string(3tcl)](/string/3tcl.md)

## KEYWORDS

formatting, string, tabstops

## CATEGORY

Text processing
