Skip to content

Commit 0cafde1

Browse files
committed
internal(constants[options]): GPT generated dataclasses
1 parent 589090d commit 0cafde1

File tree

1 file changed

+247
-0
lines changed

1 file changed

+247
-0
lines changed

src/libtmux/_internal/constants.py

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

0 commit comments

Comments
 (0)