Skip to content

Commit 1ae7de2

Browse files
committed
internal(constants[options]): GPT generated dataclasses
1 parent 5c879b6 commit 1ae7de2

File tree

1 file changed

+242
-0
lines changed

1 file changed

+242
-0
lines changed

src/libtmux/_internal/constants.py

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
import typing as t
2+
from dataclasses import dataclass, field
3+
4+
from libtmux._internal.dataclasses import SkipDefaultFieldsReprMixin
5+
6+
TerminalFeatures = t.Dict[str, t.List[str]]
7+
8+
9+
T = t.TypeVar("T")
10+
11+
12+
class TmuxArray(t.Dict[int, T], t.Generic[T]):
13+
"""Support non-sequential indexes without raising IndexError."""
14+
15+
def add(self, index: int, value: T) -> None:
16+
self[index] = value
17+
18+
def append(self, value: T) -> None:
19+
index = max(self.keys()) + 1
20+
self[index] = value
21+
22+
def iter_values(self) -> t.Iterator[T]:
23+
for index in sorted(self.keys()):
24+
yield self[index]
25+
26+
def as_list(self) -> t.List[T]:
27+
return [self[index] for index in sorted(self.keys())]
28+
29+
30+
@dataclass(repr=False)
31+
class ServerOptions(
32+
SkipDefaultFieldsReprMixin,
33+
):
34+
backspace: t.Optional[str] = field(default=None)
35+
buffer_limit: t.Optional[int] = field(default=None)
36+
command_alias: TmuxArray[str] = field(default_factory=TmuxArray)
37+
default_terminal: t.Optional[str] = field(default=None)
38+
copy_command: t.Optional[str] = field(default=None)
39+
escape_time: t.Optional[int] = field(default=None)
40+
editor: t.Optional[str] = field(default=None)
41+
exit_empty: t.Optional[t.Literal["on", "off"]] = field(default=None)
42+
exit_unattached: t.Optional[t.Literal["on", "off"]] = field(default=None)
43+
extended_keys: t.Optional[t.Literal["on", "off", "always"]] = field(default=None)
44+
focus_events: t.Optional[t.Literal["on", "off"]] = field(default=None)
45+
history_file: t.Optional[str] = field(default=None)
46+
message_limit: t.Optional[int] = field(default=None)
47+
prompt_history_limit: t.Optional[int] = field(default=None)
48+
set_clipboard: t.Optional[t.Literal["on", "external", "off"]] = field(default=None)
49+
terminal_features: TerminalFeatures = field(default_factory=dict)
50+
terminal_overrides: TmuxArray[str] = field(default_factory=TmuxArray)
51+
user_keys: TmuxArray[str] = field(default_factory=TmuxArray)
52+
53+
def __init__(self, **kwargs: object) -> None:
54+
# Convert hyphenated keys to underscored attribute names and assign values
55+
for key, value in kwargs.items():
56+
key_underscored = key.replace("-", "_")
57+
setattr(self, key_underscored, value)
58+
59+
60+
@dataclass(repr=False)
61+
class SessionOptions(
62+
SkipDefaultFieldsReprMixin,
63+
):
64+
activity_action: t.Optional[t.Literal["any", "none", "current", "other"]] = field(
65+
default=None,
66+
)
67+
assume_paste_time: t.Optional[int] = field(default=None)
68+
base_index: t.Optional[int] = field(default=None)
69+
bell_action: t.Optional[t.Literal["any", "none", "current", "other"]] = field(
70+
default=None,
71+
)
72+
default_command: t.Optional[str] = field(default=None)
73+
default_shell: t.Optional[str] = field(default=None)
74+
default_size: t.Optional[str] = field(default=None) # Format "XxY"
75+
destroy_unattached: t.Optional[t.Literal["on", "off"]] = field(default=None)
76+
detach_on_destroy: t.Optional[
77+
t.Literal["off", "on", "no-detached", "previous", "next"]
78+
] = field(default=None)
79+
display_panes_active_colour: t.Optional[str] = field(default=None)
80+
display_panes_colour: t.Optional[str] = field(default=None)
81+
display_panes_time: t.Optional[int] = field(default=None)
82+
display_time: t.Optional[int] = field(default=None)
83+
history_limit: t.Optional[int] = field(default=None)
84+
key_table: t.Optional[str] = field(default=None)
85+
lock_after_time: t.Optional[int] = field(default=None)
86+
lock_command: t.Optional[str] = field(default=None)
87+
menu_style: t.Optional[str] = field(default=None)
88+
menu_selected_style: t.Optional[str] = field(default=None)
89+
menu_border_style: t.Optional[str] = field(default=None)
90+
menu_border_lines: t.Optional[
91+
t.Literal["single", "rounded", "double", "heavy", "simple", "padded", "none"]
92+
] = field(default=None)
93+
message_command_style: t.Optional[str] = field(default=None)
94+
message_line: t.Optional[int] = field(default=None)
95+
message_style: t.Optional[str] = field(default=None)
96+
mouse: t.Optional[t.Literal["on", "off"]] = field(default=None)
97+
prefix: t.Optional[str] = field(default=None)
98+
prefix2: t.Optional[str] = field(default=None)
99+
renumber_windows: t.Optional[t.Literal["on", "off"]] = field(default=None)
100+
repeat_time: t.Optional[int] = field(default=None)
101+
set_titles: t.Optional[t.Literal["on", "off"]] = field(default=None)
102+
set_titles_string: t.Optional[str] = field(default=None)
103+
silence_action: t.Optional[t.Literal["any", "none", "current", "other"]] = field(
104+
default=None,
105+
)
106+
status: t.Optional[t.Union[t.Literal["off", "on"], int]] = field(default=None)
107+
status_format: t.Optional[t.List[str]] = field(default=None)
108+
status_interval: t.Optional[int] = field(default=None)
109+
status_justify: t.Optional[
110+
t.Literal["left", "centre", "right", "absolute-centre"]
111+
] = field(default=None)
112+
status_keys: t.Optional[t.Literal["vi", "emacs"]] = field(default=None)
113+
status_left: t.Optional[str] = field(default=None)
114+
status_left_length: t.Optional[int] = field(default=None)
115+
status_left_style: t.Optional[str] = field(default=None)
116+
status_position: t.Optional[t.Literal["top", "bottom"]] = field(default=None)
117+
status_right: t.Optional[str] = field(default=None)
118+
status_right_length: t.Optional[int] = field(default=None)
119+
status_right_style: t.Optional[str] = field(default=None)
120+
status_style: t.Optional[str] = field(default=None)
121+
update_environment: t.Optional[t.List[str]] = field(default=None)
122+
visual_activity: t.Optional[t.Literal["on", "off", "both"]] = field(default=None)
123+
visual_bell: t.Optional[t.Literal["on", "off", "both"]] = field(default=None)
124+
visual_silence: t.Optional[t.Literal["on", "off", "both"]] = field(default=None)
125+
word_separators: t.Optional[str] = field(default=None)
126+
127+
def __init__(self, **kwargs: object) -> None:
128+
# Convert hyphenated keys to underscored attribute names and assign values
129+
for key, value in kwargs.items():
130+
key_underscored = key.replace("-", "_")
131+
setattr(self, key_underscored, value)
132+
133+
134+
@dataclass(repr=False)
135+
class WindowOptions(
136+
SkipDefaultFieldsReprMixin,
137+
):
138+
aggressive_resize: t.Optional[t.Literal["on", "off"]] = field(default=None)
139+
automatic_rename: t.Optional[t.Literal["on", "off"]] = field(default=None)
140+
automatic_rename_format: t.Optional[str] = field(default=None)
141+
clock_mode_colour: t.Optional[str] = field(default=None)
142+
clock_mode_style: t.Optional[t.Literal["12", "24"]] = field(default=None)
143+
fill_character: t.Optional[str] = field(default=None)
144+
main_pane_height: t.Optional[t.Union[int, str]] = field(default=None)
145+
main_pane_width: t.Optional[t.Union[int, str]] = field(default=None)
146+
copy_mode_match_style: t.Optional[str] = field(default=None)
147+
copy_mode_mark_style: t.Optional[str] = field(default=None)
148+
copy_mode_current_match_style: t.Optional[str] = field(default=None)
149+
mode_keys: t.Optional[t.Literal["vi", "emacs"]] = field(default=None)
150+
mode_style: t.Optional[str] = field(default=None)
151+
monitor_activity: t.Optional[t.Literal["on", "off"]] = field(default=None)
152+
monitor_bell: t.Optional[t.Literal["on", "off"]] = field(default=None)
153+
monitor_silence: t.Optional[int] = field(default=None) # Assuming seconds as int
154+
other_pane_height: t.Optional[t.Union[int, str]] = field(default=None)
155+
other_pane_width: t.Optional[t.Union[int, str]] = field(default=None)
156+
pane_active_border_style: t.Optional[str] = field(default=None)
157+
pane_base_index: t.Optional[int] = field(default=None)
158+
pane_border_format: t.Optional[str] = field(default=None)
159+
pane_border_indicators: t.Optional[t.Literal["off", "colour", "arrows", "both"]] = (
160+
field(default=None)
161+
)
162+
pane_border_lines: t.Optional[
163+
t.Literal["single", "double", "heavy", "simple", "number"]
164+
] = field(default=None)
165+
pane_border_status: t.Optional[t.Literal["off", "top", "bottom"]] = field(
166+
default=None,
167+
)
168+
pane_border_style: t.Optional[str] = field(default=None)
169+
popup_style: t.Optional[str] = field(default=None)
170+
popup_border_style: t.Optional[str] = field(default=None)
171+
popup_border_lines: t.Optional[
172+
t.Literal["single", "rounded", "double", "heavy", "simple", "padded", "none"]
173+
] = field(default=None)
174+
window_status_activity_style: t.Optional[str] = field(default=None)
175+
window_status_bell_style: t.Optional[str] = field(default=None)
176+
window_status_current_format: t.Optional[str] = field(default=None)
177+
window_status_current_style: t.Optional[str] = field(default=None)
178+
window_status_format: t.Optional[str] = field(default=None)
179+
window_status_last_style: t.Optional[str] = field(default=None)
180+
window_status_separator: t.Optional[str] = field(default=None)
181+
window_status_style: t.Optional[str] = field(default=None)
182+
window_size: t.Optional[t.Literal["largest", "smallest", "manual", "latest"]] = (
183+
field(default=None)
184+
)
185+
wrap_search: t.Optional[t.Literal["on", "off"]] = field(default=None)
186+
187+
def __init__(self, **kwargs: object) -> None:
188+
# Convert hyphenated keys to underscored attribute names and assign values
189+
for key, value in kwargs.items():
190+
key_underscored = key.replace("-", "_")
191+
setattr(self, key_underscored, value)
192+
193+
194+
@dataclass(repr=False)
195+
class PaneOptions(
196+
SkipDefaultFieldsReprMixin,
197+
):
198+
allow_passthrough: t.Optional[t.Literal["on", "off", "all"]] = field(default=None)
199+
allow_rename: t.Optional[t.Literal["on", "off"]] = field(default=None)
200+
alternate_screen: t.Optional[t.Literal["on", "off"]] = field(default=None)
201+
cursor_colour: t.Optional[str] = field(default=None)
202+
pane_colours: t.Optional[t.List[str]] = field(default=None)
203+
cursor_style: t.Optional[
204+
t.Literal[
205+
"default",
206+
"blinking-block",
207+
"block",
208+
"blinking-underline",
209+
"underline",
210+
"blinking-bar",
211+
"bar",
212+
]
213+
] = field(default=None)
214+
remain_on_exit: t.Optional[t.Literal["on", "off", "failed"]] = field(default=None)
215+
remain_on_exit_format: t.Optional[str] = field(default=None)
216+
scroll_on_clear: t.Optional[t.Literal["on", "off"]] = field(default=None)
217+
synchronize_panes: t.Optional[t.Literal["on", "off"]] = field(default=None)
218+
window_active_style: t.Optional[str] = field(default=None)
219+
window_style: t.Optional[str] = field(default=None)
220+
221+
def __init__(self, **kwargs: object) -> None:
222+
# Convert hyphenated keys to underscored attribute names and assign values
223+
for key, value in kwargs.items():
224+
key_underscored = key.replace("-", "_")
225+
setattr(self, key_underscored, value)
226+
227+
228+
@dataclass(repr=False)
229+
class Options(
230+
ServerOptions,
231+
SessionOptions,
232+
WindowOptions,
233+
PaneOptions,
234+
SkipDefaultFieldsReprMixin,
235+
):
236+
def __init__(self, **kwargs: object) -> None:
237+
# Convert hyphenated keys to underscored attribute names and assign values
238+
# Remove asaterisk from inherited options
239+
for key, value in kwargs.items():
240+
key_underscored = key.replace("-", "_")
241+
key_asterisk_removed = key_underscored.rstrip("*")
242+
setattr(self, key_asterisk_removed, value)

0 commit comments

Comments
 (0)