blob: a94e7c11c712be837cbb949105c4e72051627be9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# ---------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# ---------------------------------------------------------------------------------------------
builtin autoload -Uz add-zsh-hook
# Prevent the script recursing when setting up
if [ -n "$VSCODE_SHELL_INTEGRATION" ]; then
builtin return
fi
# This variable allows the shell to both detect that VS Code's shell integration is enabled as well
# as disable it by unsetting the variable.
VSCODE_SHELL_INTEGRATION=1
# Only fix up ZDOTDIR if shell integration was injected (not manually installed) and has not been called yet
if [[ "$VSCODE_INJECTION" == "1" ]]; then
if [[ $options[norcs] = off && -f $USER_ZDOTDIR/.zshrc ]]; then
VSCODE_ZDOTDIR=$ZDOTDIR
ZDOTDIR=$USER_ZDOTDIR
. $USER_ZDOTDIR/.zshrc
ZDOTDIR=$VSCODE_ZDOTDIR
fi
fi
# Shell integration was disabled by the shell, exit without warning assuming either the shell has
# explicitly disabled shell integration as it's incompatible or it implements the protocol.
if [ -z "$VSCODE_SHELL_INTEGRATION" ]; then
builtin return
fi
__vsc_initialized="0"
__vsc_in_command_execution="1"
__vsc_last_history_id=0
__vsc_prompt_start() {
builtin printf "\033]633;A\007"
}
__vsc_prompt_end() {
builtin printf "\033]633;B\007"
}
__vsc_update_cwd() {
builtin printf "\033]633;P;Cwd=%s\007" "$PWD"
}
__vsc_command_output_start() {
builtin printf "\033]633;C\007"
}
__vsc_continuation_start() {
builtin printf "\033]633;F\007"
}
__vsc_continuation_end() {
builtin printf "\033]633;G\007"
}
__vsc_right_prompt_start() {
builtin printf "\033]633;H\007"
}
__vsc_right_prompt_end() {
builtin printf "\033]633;I\007"
}
__vsc_command_complete() {
builtin local __vsc_history_id=$(builtin history | tail -n1 | awk '{print $1;}')
# Don't write the command complete sequence for the first prompt without an associated command
if [[ "$__vsc_initialized" == "1" ]]; then
if [[ "$__vsc_history_id" == "$__vsc_last_history_id" ]]; then
builtin printf "\033]633;D\007"
else
builtin printf "\033]633;D;%s\007" "$__vsc_status"
__vsc_last_history_id=$__vsc_history_id
fi
else
builtin printf "\033]633;D\007"
fi
__vsc_update_cwd
}
if [[ -o NOUNSET ]]; then
if [ -z "${RPROMPT-}" ]; then
RPROMPT=""
fi
if [ -z "${PREFIX-}" ]; then
PREFIX=""
fi
fi
__vsc_update_prompt() {
__vsc_prior_prompt="$PS1"
__vsc_in_command_execution=""
PS1="%{$(__vsc_prompt_start)%}$PREFIX$PS1%{$(__vsc_prompt_end)%}"
PS2="%{$(__vsc_continuation_start)%}$PS2%{$(__vsc_continuation_end)%}"
if [ -n "$RPROMPT" ]; then
__vsc_prior_rprompt="$RPROMPT"
RPROMPT="%{$(__vsc_right_prompt_start)%}$RPROMPT%{$(__vsc_right_prompt_end)%}"
fi
}
__vsc_precmd() {
local __vsc_status="$?"
if [ -z "${__vsc_in_command_execution-}" ]; then
# not in command execution
__vsc_command_output_start
fi
__vsc_command_complete "$__vsc_status"
# in command execution
if [ -n "$__vsc_in_command_execution" ]; then
# non null
__vsc_update_prompt
fi
}
__vsc_preexec() {
PS1="$__vsc_prior_prompt"
if [ -n "$RPROMPT" ]; then
RPROMPT="$__vsc_prior_rprompt"
fi
__vsc_initialized="1"
__vsc_in_command_execution="1"
__vsc_command_output_start
}
add-zsh-hook precmd __vsc_precmd
add-zsh-hook preexec __vsc_preexec
|