doc::unibi\_run(3) unibilium doc::unibi\_run(3)

# [NAME](#NAME)

unibi\_format, unibi\_run - interpret a terminfo format string

# [SYNOPSIS](#SYNOPSIS)

```
  #include <unibilium.h>
  
  void unibi_format(
      unibi_var_t var_dyn[26],
      unibi_var_t var_static[26],
      const char *fmt,
      unibi_var_t param[9],
      void (*out)(void *, const char *, size_t),
      void *ctx1,
      void (*pad)(void *, size_t, int, int),
      void *ctx2
  );
  
  size_t unibi_run(const char *fmt, unibi_var_t param[9], char *p, size_t n);
```

# [DESCRIPTION](#DESCRIPTION)

"unibi\_format" takes a format string *fmt* and executes it. All output is done by (possibly repeated) calls to *out*. In the calls to *out* the first argument is always *ctx1*, the second argument is a pointer to a chunk of data, and the third argument is a count specifying the size of the chunk in bytes.

*pad* is used when the format string contains "$&lt;...&gt;" padding instructions. In the calls to *pad* the first argument is always *ctx2*, the second argument is the delay in tenths of milliseconds, the third argument is a boolean flag indicating whether "\*" (proportional delay) was specified in the format string, and the fourth argument is a boolean flag indicating whether "/" (forced padding) was specified in the format string. Thus a format string of "$&lt;5/&gt;" would translate into "pad(ctx2, 50, 0, 1)". You may pass a null pointer for *pad*; in that case padding instructions are silently skipped.

The values of *param* are used for the format codes %p1 .. %p9; the values of *var\_dyn* and *var\_static* are used for the so-called dynamic/static variables %Pa .. %Pz and %PA .. %PZ, respectively.

"unibi\_run" is a wrapper around "unibi\_format". It passes two arrays (each initialized to 26 zeroes) as *var\_dyn* and *var\_static*. *fmt* and *param* are passed on unchanged. It ignores padding and places all normal output in the buffer pointed to by *p*. *n* is the size of the buffer; at most *n* bytes will be written to *p*.

# [RETURN VALUE](#RETURN_VALUE)

"unibi\_run" returns the number of bytes that would have been written if the buffer was big enough. Thus the number of valid bytes in *p* after a call to "unibi\_run" is the minimum of *n* and the return value of "unibi\_run".

# [SEE ALSO](#SEE_ALSO)

[**unibi\_var\_from\_num**(3)](/man/os/unibilium/unibi_var_from_num.3), [**unibi\_var\_from\_str**(3)](/man/os/unibilium/unibi_var_from_str.3), [**unibilium.h**(3)](/man/os/unibilium/unibilium.h.3)

2026-08-30 unibilium-2.1.4

---

Document: unibi_run(3) from unibilium 2.1.4-r0 (Chainguard OS)
Source: https://github.com/neovim/unibilium
