blob: 30c7a7fb33e98ea2396aff8393e6c39a283ec773 (
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
|
#!/usr/bin/env python
"""
Mark the start and end of the prompt with Final term (iterm2) escape sequences.
See: https://iterm2.com/finalterm.html
"""
import sys
from prompt_toolkit import prompt
from prompt_toolkit.formatted_text import ANSI
BEFORE_PROMPT = "\033]133;A\a"
AFTER_PROMPT = "\033]133;B\a"
BEFORE_OUTPUT = "\033]133;C\a"
AFTER_OUTPUT = (
"\033]133;D;{command_status}\a" # command_status is the command status, 0-255
)
def get_prompt_text():
# Generate the text fragments for the prompt.
# Important: use the `ZeroWidthEscape` fragment only if you are sure that
# writing this as raw text to the output will not introduce any
# cursor movements.
return [
("[ZeroWidthEscape]", BEFORE_PROMPT),
("", "Say something: # "),
("[ZeroWidthEscape]", AFTER_PROMPT),
]
if __name__ == "__main__":
# Option 1: Using a `get_prompt_text` function:
answer = prompt(get_prompt_text)
# Option 2: Using ANSI escape sequences.
before = "\001" + BEFORE_PROMPT + "\002"
after = "\001" + AFTER_PROMPT + "\002"
answer = prompt(ANSI(f"{before}Say something: # {after}"))
# Output.
sys.stdout.write(BEFORE_OUTPUT)
print("You said: %s" % answer)
sys.stdout.write(AFTER_OUTPUT.format(command_status=0))
|