forked from microsoft/vscode
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request microsoft#157291 from zgracem/fish-shell-integration
add shell integration script for fish
- Loading branch information
Showing
7 changed files
with
94 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
85 changes: 85 additions & 0 deletions
85
src/vs/workbench/contrib/terminal/browser/media/shellIntegration.fish
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
# --------------------------------------------------------------------------------------------- | ||
# Copyright (c) Microsoft Corporation. All rights reserved. | ||
# Licensed under the MIT License. See License.txt in the project root for license information. | ||
# --------------------------------------------------------------------------------------------- | ||
# | ||
# Visual Studio Code terminal integration for fish | ||
# | ||
# Manual installation: | ||
# | ||
# (1) Add the following to the end of `$__fish_config_dir/config.fish`: | ||
# | ||
# string match -q "$TERM_PROGRAM" "vscode" | ||
# and . (code --locate-shell-integration-path fish) | ||
# | ||
# (2) Restart fish. | ||
|
||
# Don't run in scripts, other terminals, or more than once per session. | ||
status is-interactive | ||
and string match --quiet "$TERM_PROGRAM" "vscode" | ||
and ! set --query VSCODE_SHELL_INTEGRATION | ||
or exit | ||
|
||
set --global VSCODE_SHELL_INTEGRATION 1 | ||
|
||
# Helper function | ||
function __vsc_esc -d "Emit escape sequences for VS Code shell integration" | ||
builtin printf "\e]633;%s\007" (string join ";" $argv) | ||
end | ||
|
||
# Sent right before executing an interactive command. | ||
# Marks the beginning of command output. | ||
function __vsc_cmd_executed --on-event fish_preexec | ||
__vsc_esc C | ||
__vsc_esc E (__vsc_escape_cmd "$argv") | ||
end | ||
|
||
|
||
# Escapes backslashes, newlines, and semicolons to serialize the command line. | ||
function __vsc_escape_cmd | ||
set -l commandline "$argv" | ||
# `string replace` automatically breaks its input apart on any newlines. | ||
# Then `string join` at the end will bring it all back together. | ||
string replace --all '\\' '\\\\' $commandline \ | ||
| string replace --all ';' '\x3b' \ | ||
| string join '\x0a' | ||
end | ||
# Sent right after an interactive command has finished executing. | ||
# Marks the end of command output. | ||
function __vsc_cmd_finished --on-event fish_postexec | ||
__vsc_esc D $status | ||
end | ||
# Sent when a command line is cleared or reset, but no command was run. | ||
# Marks the cleared line with neither success nor failure. | ||
function __vsc_cmd_clear --on-event fish_cancel | ||
__vsc_esc D | ||
end | ||
# Sent whenever a new fish prompt is about to be displayed. | ||
# Updates the current working directory. | ||
function __vsc_update_cwd --on-event fish_prompt | ||
__vsc_esc P "Cwd=$PWD" | ||
end | ||
# Sent at the start of the prompt. | ||
# Marks the beginning of the prompt (and, implicitly, a new line). | ||
function __vsc_fish_prompt_start | ||
__vsc_esc A | ||
end | ||
# Sent at the end of the prompt. | ||
# Marks the beginning of the user's command input. | ||
function __vsc_fish_cmd_start | ||
__vsc_esc B | ||
end | ||
|
||
# Preserve the user's existing prompt, and wrap it in our escape sequences. | ||
functions --copy fish_prompt __vsc_fish_prompt | ||
|
||
function fish_prompt | ||
__vsc_fish_prompt_start | ||
__vsc_fish_prompt | ||
__vsc_fish_cmd_start | ||
end |