Skip to content

Commit 99701b9

Browse files
committed
Fixed terminal width errors, restored placeholder
1 parent f6b6d7c commit 99701b9

File tree

6 files changed

+123
-19
lines changed

6 files changed

+123
-19
lines changed

interpreter_1/cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import threading
2020
from typing import Any, Dict
2121

22-
from .misc.get_input import get_input
22+
from .misc.get_input import async_get_input
2323
from .misc.spinner import SimpleSpinner
2424
from .profiles import Profile
2525

@@ -214,7 +214,7 @@ def load_interpreter_thread(args):
214214
thread.start()
215215

216216
# Get user input
217-
message = await get_input()
217+
message = await async_get_input()
218218

219219
# Wait for the thread to finish
220220
thread.join()

interpreter_1/interpreter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,7 @@ def chat(self):
858858
try:
859859
message_count = 0
860860
while True:
861-
user_input = input("> ")
861+
user_input = get_input()
862862
print("")
863863

864864
message_count += 1 # Increment counter after each message

interpreter_1/misc/get_input.py

Lines changed: 103 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,106 @@
1-
import readline
1+
from typing import Optional
22

3+
from prompt_toolkit import PromptSession
4+
from prompt_toolkit.formatted_text import HTML
5+
from prompt_toolkit.history import InMemoryHistory
6+
from prompt_toolkit.key_binding import KeyBindings
37

4-
async def get_input(
5-
placeholder_text=None, placeholder_color: str = "gray", multiline_support=True
8+
9+
async def async_get_input(
10+
placeholder_text: Optional[str] = None,
11+
placeholder_color: str = "gray",
12+
multiline_support: bool = True,
13+
) -> str:
14+
placeholder_text = "Describe command"
15+
history = InMemoryHistory()
16+
session = PromptSession(
17+
history=history,
18+
enable_open_in_editor=False,
19+
enable_history_search=False,
20+
auto_suggest=None,
21+
multiline=True,
22+
)
23+
kb = KeyBindings()
24+
multiline = [False]
25+
26+
@kb.add("enter")
27+
def _(event):
28+
current_line = event.current_buffer.document.current_line.rstrip()
29+
30+
if current_line == '"""':
31+
multiline[0] = not multiline[0]
32+
event.current_buffer.insert_text("\n")
33+
if not multiline[0]: # If exiting multiline mode, submit
34+
event.current_buffer.validate_and_handle()
35+
return
36+
37+
if multiline[0]:
38+
event.current_buffer.insert_text("\n")
39+
else:
40+
event.current_buffer.validate_and_handle()
41+
42+
result = await session.prompt_async(
43+
"> ",
44+
placeholder=HTML(f'<style fg="{placeholder_color}">{placeholder_text}</style>')
45+
if placeholder_text
46+
else None,
47+
key_bindings=kb,
48+
complete_while_typing=False,
49+
enable_suspend=False,
50+
search_ignore_case=True,
51+
include_default_pygments_style=False,
52+
input_processors=[],
53+
enable_system_prompt=False,
54+
wrap_lines=False,
55+
)
56+
return result
57+
58+
59+
def get_input(
60+
placeholder_text: Optional[str] = None,
61+
placeholder_color: str = "gray",
62+
multiline_support: bool = True,
663
) -> str:
7-
return input("> ")
64+
placeholder_text = "Describe command"
65+
history = InMemoryHistory()
66+
session = PromptSession(
67+
history=history,
68+
enable_open_in_editor=False,
69+
enable_history_search=False,
70+
auto_suggest=None,
71+
multiline=True,
72+
)
73+
kb = KeyBindings()
74+
multiline = [False]
75+
76+
@kb.add("enter")
77+
def _(event):
78+
current_line = event.current_buffer.document.current_line.rstrip()
79+
80+
if current_line == '"""':
81+
multiline[0] = not multiline[0]
82+
event.current_buffer.insert_text("\n")
83+
if not multiline[0]: # If exiting multiline mode, submit
84+
event.current_buffer.validate_and_handle()
85+
return
86+
87+
if multiline[0]:
88+
event.current_buffer.insert_text("\n")
89+
else:
90+
event.current_buffer.validate_and_handle()
91+
92+
result = session.prompt(
93+
"> ",
94+
placeholder=HTML(f'<style fg="{placeholder_color}">{placeholder_text}</style>')
95+
if placeholder_text
96+
else None,
97+
key_bindings=kb,
98+
complete_while_typing=False,
99+
enable_suspend=False,
100+
search_ignore_case=True,
101+
include_default_pygments_style=False,
102+
input_processors=[],
103+
enable_system_prompt=False,
104+
wrap_lines=False,
105+
)
106+
return result

interpreter_1/misc/welcome copy.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@
77

88

99
def welcome_message(args):
10-
try:
11-
terminal_width = os.get_terminal_size().columns
12-
except:
13-
terminal_width = 80
1410
print()
1511
renderer = MarkdownRenderer()
1612

interpreter_1/ui/markdown.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,10 @@ def feed(self, text: str):
164164
# First newline after ``` - this line contains the language
165165
self.code_lang = self.current_code_line
166166
self.collecting_lang = False
167-
terminal_width = os.get_terminal_size().columns
167+
try:
168+
terminal_width = os.get_terminal_size().columns
169+
except:
170+
terminal_width = int(os.environ.get("TERMINAL_WIDTH", "50"))
168171
sys.stdout.write(
169172
"\033[38;5;240m\n────┬" + "─" * (terminal_width - 5) + "\n"
170173
) # Top line
@@ -188,7 +191,10 @@ def feed(self, text: str):
188191
style=os.getenv("INTERPRETER_CODE_STYLE", "monokai")
189192
)
190193

191-
terminal_width = os.get_terminal_size().columns
194+
try:
195+
terminal_width = os.get_terminal_size().columns
196+
except:
197+
terminal_width = int(os.environ.get("TERMINAL_WIDTH", "50"))
192198
line_prefix = (
193199
f"\033[38;5;240m{str(self.line_number).rjust(3)} │ "
194200
)
@@ -258,7 +264,10 @@ def feed(self, text: str):
258264
sys.stdout.write(
259265
f"{str(self.line_number).rjust(4)}{formatted}\n"
260266
)
261-
terminal_width = os.get_terminal_size().columns
267+
try:
268+
terminal_width = os.get_terminal_size().columns
269+
except:
270+
terminal_width = int(os.environ.get("TERMINAL_WIDTH", "50"))
262271
sys.stdout.write(
263272
"\033[38;5;240m────┴" + "─" * (terminal_width - 5) + "\033[0m\n"
264273
)

interpreter_1/ui/tool.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def __init__(self, style):
3737
try:
3838
self.terminal_width = os.get_terminal_size().columns
3939
except:
40-
self.terminal_width = 50
40+
self.terminal_width = int(os.environ.get("TERMINAL_WIDTH", "50"))
4141
self.safety_padding = 4 # Extra padding to prevent edge cases
4242
self.json_obj = None
4343

@@ -338,7 +338,7 @@ def __init__(self, style):
338338
try:
339339
self.terminal_width = os.get_terminal_size().columns
340340
except:
341-
self.terminal_width = 50
341+
self.terminal_width = int(os.environ.get("TERMINAL_WIDTH", "50"))
342342
self.prefix_width = 5 # "123 │ " = 6 characters
343343
self.safety_padding = 2 # Extra padding to prevent edge cases
344344
self.show_context = True
@@ -515,7 +515,7 @@ def __init__(self, style):
515515
try:
516516
self.terminal_width = os.get_terminal_size().columns
517517
except:
518-
self.terminal_width = 50
518+
self.terminal_width = int(os.environ.get("TERMINAL_WIDTH", "50"))
519519
self.prefix_width = 6
520520
self.safety_padding = 4
521521
self.buffer = "" # Add buffer for line-by-line processing
@@ -633,9 +633,9 @@ class SchemaRenderer:
633633
@staticmethod
634634
def print_separator(char="─", newline=True, line=True):
635635
try:
636-
terminal_width = os.get_terminal_size().columns
636+
self.terminal_width = os.get_terminal_size().columns
637637
except:
638-
terminal_width = 50
638+
self.terminal_width = int(os.environ.get("TERMINAL_WIDTH", "50"))
639639
if newline:
640640
sys.stdout.write("\n")
641641
if line:

0 commit comments

Comments
 (0)