Uh oh!
There was an error while loading. Please reload this page.
forked from DonJayamanne/pythonVSCode
- Notifications
You must be signed in to change notification settings - Fork 1.4k
Expand file tree
/
Copy pathpythonrc.py
More file actions
Latest commit
88 lines (68 loc) · 2.86 KB
/
Copy pathpythonrc.py
File metadata and controls
88 lines (68 loc) · 2.86 KB
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
importplatform
importsys
ifsys.platform!="win32":
importreadline
original_ps1=">>> "
is_wsl="microsoft-standard-WSL"inplatform.release()
classREPLHooks:
def__init__(self):
self.global_exit=None
self.failure_flag=False
self.original_excepthook=sys.excepthook
self.original_displayhook=sys.displayhook
sys.excepthook=self.my_excepthook
sys.displayhook=self.my_displayhook
defmy_displayhook(self, value):
ifvalueisNone:
self.failure_flag=False
self.original_displayhook(value)
defmy_excepthook(self, type_, value, traceback):
self.global_exit=value
self.failure_flag=True
self.original_excepthook(type_, value, traceback)
defget_last_command():
# Get the last history item
last_command=""
ifsys.platform!="win32":
last_command=readline.get_history_item(readline.get_current_history_length())
returnlast_command
classPS1:
hooks=REPLHooks()
sys.excepthook=hooks.my_excepthook
sys.displayhook=hooks.my_displayhook
# str will get called for every prompt with exit code to show success/failure
def__str__(self):
exit_code=int(bool(self.hooks.failure_flag))
self.hooks.failure_flag=False
# Guide following official VS Code doc for shell integration sequence:
result=""
# For non-windows allow recent_command history.
ifsys.platform!="win32":
result="{soh}{command_executed}{command_line}{command_finished}{prompt_started}{stx}{prompt}{soh}{command_start}{stx}".format(
soh="\001",
stx="\002",
command_executed="\x1b]633;C\x07",
command_line="\x1b]633;E;"+str(get_last_command()) +"\x07",
command_finished="\x1b]633;D;"+str(exit_code) +"\x07",
prompt_started="\x1b]633;A\x07",
prompt=original_ps1,
command_start="\x1b]633;B\x07",
)
else:
result="{command_finished}{prompt_started}{prompt}{command_start}{command_executed}".format(
command_finished="\x1b]633;D;"+str(exit_code) +"\x07",
prompt_started="\x1b]633;A\x07",
prompt=original_ps1,
command_start="\x1b]633;B\x07",
command_executed="\x1b]633;C\x07",
)
# result = f"{chr(27)}]633;D;{exit_code}{chr(7)}{chr(27)}]633;A{chr(7)}{original_ps1}{chr(27)}]633;B{chr(7)}{chr(27)}]633;C{chr(7)}"
returnresult
def__repr__(self):
return"<Custom PS1 for VS Code Python Shell Integration>"
ifsys.platform!="win32"and (notis_wsl):
sys.ps1=PS1()
ifsys.platform=="darwin":
print("Cmd click to launch VS Code Native REPL")
else:
print("Ctrl click to launch VS Code Native REPL")