report the working directory to the terminal with OSC 7
Before each prompt gosh sends ESC ] 7 ; file://host/path BEL (host and path percent-encoded), so terminals like GNOME Terminal open new tabs and windows in the directory of the shell instead of the one gosh was started in. Nothing is sent if stdout is not a terminal or TERM=dumb. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1f507f6562
commit
af5281eed2
4 files changed
+80
No files matched your search
@@ -1133,6 +1133,31 @@ func TestBuildPrompt_ColorEscapesControlCharacters(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestOSC7Sequence(t *testing.T) {
|
||||
tests := []struct{ host, dir, want string }{
|
||||
{"host", "/home/flow", "\x1b]7;file://host/home/flow\a"},
|
||||
{"host", "/tmp/a b/ä", "\x1b]7;file://host/tmp/a%20b/%C3%A4\a"},
|
||||
{"host", "/x%y#z?", "\x1b]7;file://host/x%25y%23z%3F\a"},
|
||||
{"", "/", "\x1b]7;file:///\a"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if got := osc7Sequence(tt.host, tt.dir); got != tt.want {
|
||||
t.Errorf("osc7Sequence(%q, %q) = %q, want %q", tt.host, tt.dir, got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestOSC7Sequence_EscapesControlCharacters(t *testing.T) {
|
||||
got := osc7Sequence("ho/st\x07", "/evil\x07\x1b]0;title\x1b\\")
|
||||
body := strings.TrimSuffix(strings.TrimPrefix(got, "\x1b]7;"), "\a")
|
||||
if strings.ContainsAny(body, "\x07\x1b") {
|
||||
t.Errorf("sequence contains control characters: %q", got)
|
||||
}
|
||||
if !strings.HasPrefix(body, "file://ho%2Fst%07/evil%07%1B") {
|
||||
t.Errorf("unexpected encoding: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUseColor_NoColor(t *testing.T) {
|
||||
t.Setenv("NO_COLOR", "1")
|
||||
if useColor() {
|
||||
|
||||
Reference in new issue
Block a user