^[control-codes
live in libghostty-vt

Operating system commands

OSC 7 Report Working Directory

View as Markdown

Tell the terminal which directory the shell is in.

OSC 7 ; Pt ST
ECMA-48
§8.3.89 OSC – Operating System Command, p. 51

A shell sends OSC 7 ; Pt ST from its prompt, with its working directory as a file: URL, file://host/path, with the host name so that the terminal can tell a directory on another machine from its own. A terminal uses it to open a new tab or window in the same directory, and to show it in a title.

Apple’s Terminal, VTE and many others use it, but it is not xterm’s, and a default xterm ignores it (the OSC numbers it knows). The cases follow xterm.

libghostty-vt keeps the last one it was sent, as it was sent, and tells its host through the PWD_CHANGED callback. It takes two other ways of saying the same thing as well: iTerm2’s OSC 1337 ; CurrentDir=path ST and ConEmu’s OSC 9 ; 9 ; path ST (see OSC 9 ; 9). The pwd line in a case checks what it kept, and the case that checks for nothing is a known difference.

Support

TerminalVersionSupportNotes
VT220manual, 2nd ed., 1984NoOSC is not among the controls it recognizes (§4.2)
VT510manual, 1st ed., 1993Noignores an OSC string (chapter 4)
xtermpatch 412, xterm-411aNo
libghostty-vt0f171f6YesOSC7-2: keeps it and tells the host through PWD_CHANGED
Konsole26.11.70, a24c3d71Yes
ConEmubuild 230724, its documentationNonot in ConEmu’s list, which has OSC 9 ; 9 instead, ANSI escape codes

Validation

OSC7-1: Nothing changes on screen

A
\e]7;file://host/home/user\a
B
|AB____|
cursor 1,3
reply none

OSC7-2: A default xterm keeps nothing

\e]7;file://host/home/user\a
|______|
pwd ""

OSC7-3: An empty one clears it

\e]7;file://host/home/user\a
\e]7;\a
|______|
pwd ""
Every example on these pages runs in your browser, in libghostty-vt compiled to WebAssembly.