Skip to content

Instantly share code, notes, and snippets.

@tony
Last active February 15, 2024 14:34
Show Gist options
  • Save tony/28e74f834a80c05c878ab63cb08ea825 to your computer and use it in GitHub Desktop.
Save tony/28e74f834a80c05c878ab63cb08ea825 to your computer and use it in GitHub Desktop.
libtmux / python: Schema of tmux options (tmux 3.4)
import enum
import typing as t
from dataclasses import dataclass, field
from libtmux._internal.dataclasses import SkipDefaultFieldsReprMixin
class ServerOptions(enum.Enum):
backspace = "backspace"
buffer_limit = "buffer-limit"
command_alias = "command-alias"
default_terminal = "default-terminal"
copy_command = "copy-command"
escape_time = "escape-time"
editor = "editor"
exit_empty = "exit-empty"
exit_unattached = "exit-unattached"
extended_keys = "extended-keys"
focus_events = "focus-events"
history_file = "history-file"
message_limit = "message-limit"
prompt_history_limit = "prompt-history-limit"
set_clipboard = "set-clipboard"
terminal_features = "terminal-features"
terminal_overrides = "terminal-overrides"
user_keys = "user-keys"
class SessionOptions(enum.Enum):
activity_action = "activity-action"
assume_paste_time = "assume-paste-time"
base_index = "base-index"
bell_action = "bell-action"
default_command = "default-command"
default_shell = "default-shell"
default_size = "default-size"
destroy_unattached = "destroy-unattached"
detach_on_destroy = "detach-on-destroy"
display_panes_active_colour = "display-panes-active-colour"
display_panes_colour = "display-panes-colour"
display_panes_time = "display-panes-time"
display_time = "display-time"
history_limit = "history-limit"
key_table = "key-table"
lock_after_time = "lock-after-time"
lock_command = "lock-command"
menu_style = "menu-style"
menu_selected_style = "menu-selected-style"
menu_border_style = "menu-border-style"
menu_border_lines = "menu-border-lines"
message_command_style = "message-command-style"
message_line = "message-line"
message_style = "message-style"
mouse = "mouse"
prefix = "prefix"
prefix2 = "prefix2"
renumber_windows = "renumber-windows"
repeat_time = "repeat-time"
set_titles = "set-titles"
set_titles_string = "set-titles-string"
silence_action = "silence-action"
status = "status"
status_format = "status-format[]"
status_interval = "status-interval"
status_justify = "status-justify"
status_keys = "status-keys"
status_left = "status-left"
status_left_length = "status-left-length"
status_left_style = "status-left-style"
status_position = "status-position"
status_right = "status-right"
status_right_length = "status-right-length"
status_right_style = "status-right-style"
status_style = "status-style"
update_environment = "update-environment[]"
visual_activity = "visual-activity"
visual_bell = "visual-bell"
visual_silence = "visual-silence"
word_separators = "word-separators"
class WindowOptions(enum.Enum):
aggressive_resize = "aggressive-resize"
automatic_rename = "automatic-rename"
automatic_rename_format = "automatic-rename-format"
clock_mode_colour = "clock-mode-colour"
clock_mode_style = "clock-mode-style"
fill_character = "fill-character"
main_pane_height = "main-pane-height"
main_pane_width = "main-pane-width"
copy_mode_match_style = "copy-mode-match-style"
copy_mode_mark_style = "copy-mode-mark-style"
copy_mode_current_match_style = "copy-mode-current-match-style"
mode_keys = "mode-keys"
mode_style = "mode-style"
monitor_activity = "monitor-activity"
monitor_bell = "monitor-bell"
monitor_silence = "monitor-silence"
other_pane_height = "other-pane-height"
other_pane_width = "other-pane-width"
pane_active_border_style = "pane-active-border-style"
pane_base_index = "pane-base-index"
pane_border_format = "pane-border-format"
pane_border_indicators = "pane-border-indicators"
pane_border_lines = "pane-border-lines"
pane_border_status = "pane-border-status"
pane_border_style = "pane-border-style"
popup_style = "popup-style"
popup_border_style = "popup-border-style"
popup_border_lines = "popup-border-lines"
window_status_activity_style = "window-status-activity-style"
window_status_bell_style = "window-status-bell-style"
window_status_current_format = "window-status-current-format"
window_status_current_style = "window-status-current-style"
window_status_format = "window-status-format"
window_status_last_style = "window-status-last-style"
window_status_separator = "window-status-separator"
window_status_style = "window-status-style"
window_size = "window-size"
wrap_search = "wrap-search"
class PaneOptions(enum.Enum):
allow_passthrough = "allow-passthrough"
allow_rename = "allow-rename"
alternate_screen = "alternate-screen"
cursor_colour = "cursor-colour"
pane_colours = "pane-colours[]"
cursor_style = "cursor-style"
remain_on_exit = "remain-on-exit"
remain_on_exit_format = "remain-on-exit-format"
scroll_on_clear = "scroll-on-clear"
synchronize_panes = "synchronize-panes"
window_active_style = "window-active-style"
window_style = "window-style"
class PaneOptionsDict(t.TypedDict, total=False):
allow_passthrough: t.Optional[t.Literal["on", "off", "all"]]
allow_rename: t.Optional[t.Literal["on", "off"]]
alternate_screen: t.Optional[t.Literal["on", "off"]]
cursor_colour: t.Optional[str] # Assuming colour is specified as a string
pane_colours: t.Optional[
t.List[str]
] # Assuming each colour in the palette is specified as a string
cursor_style: t.Optional[
t.Literal[
"default",
"blinking-block",
"block",
"blinking-underline",
"underline",
"blinking-bar",
"bar",
]
]
remain_on_exit: t.Optional[t.Literal["on", "off", "failed"]]
remain_on_exit_format: t.Optional[str]
scroll_on_clear: t.Optional[t.Literal["on", "off"]]
synchronize_panes: t.Optional[t.Literal["on", "off"]]
window_active_style: t.Optional[
str
] # Style specifications are assumed to be strings
window_style: t.Optional[str] # Style specifications are assumed to be strings
class WindowOptionsDict(t.TypedDict, total=False):
aggressive_resize: t.Optional[t.Literal["on", "off"]]
automatic_rename: t.Optional[t.Literal["on", "off"]]
automatic_rename_format: t.Optional[str]
clock_mode_colour: t.Optional[str] # Assuming colour is specified as a string
clock_mode_style: t.Optional[t.Literal["12", "24"]]
fill_character: t.Optional[str]
main_pane_height: t.Optional[
t.Union[int, str]
] # Int for fixed size, str for percentage
main_pane_width: t.Optional[
t.Union[int, str]
] # Int for fixed size, str for percentage
copy_mode_match_style: t.Optional[str]
copy_mode_mark_style: t.Optional[str]
copy_mode_current_match_style: t.Optional[str]
mode_keys: t.Optional[t.Literal["vi", "emacs"]]
mode_style: t.Optional[str]
monitor_activity: t.Optional[t.Literal["on", "off"]]
monitor_bell: t.Optional[t.Literal["on", "off"]]
monitor_silence: t.Optional[int] # Assuming seconds as int
other_pane_height: t.Optional[
t.Union[int, str]
] # Int for fixed size, str for percentage
other_pane_width: t.Optional[
t.Union[int, str]
] # Int for fixed size, str for percentage
pane_active_border_style: t.Optional[str]
pane_base_index: t.Optional[int]
pane_border_format: t.Optional[str]
pane_border_indicators: t.Optional[t.Literal["off", "colour", "arrows", "both"]]
pane_border_lines: t.Optional[
t.Literal["single", "double", "heavy", "simple", "number"]
]
pane_border_status: t.Optional[t.Literal["off", "top", "bottom"]]
pane_border_style: t.Optional[str]
popup_style: t.Optional[str]
popup_border_style: t.Optional[str]
popup_border_lines: t.Optional[
t.Literal["single", "rounded", "double", "heavy", "simple", "padded", "none"]
]
window_status_activity_style: t.Optional[str]
window_status_bell_style: t.Optional[str]
window_status_current_format: t.Optional[str]
window_status_current_style: t.Optional[str]
window_status_format: t.Optional[str]
window_status_last_style: t.Optional[str]
window_status_separator: t.Optional[str]
window_status_style: t.Optional[str]
window_size: t.Optional[t.Literal["largest", "smallest", "manual", "latest"]]
wrap_search: t.Optional[t.Literal["on", "off"]]
class SessionOptionsDict(t.TypedDict, total=False):
activity_action: t.Optional[t.Literal["any", "none", "current", "other"]]
assume_paste_time: t.Optional[int] # Milliseconds
base_index: t.Optional[int]
bell_action: t.Optional[t.Literal["any", "none", "current", "other"]]
default_command: t.Optional[str]
default_shell: t.Optional[str]
default_size: t.Optional[str] # Format "XxY"
destroy_unattached: t.Optional[t.Literal["on", "off"]]
detach_on_destroy: t.Optional[
t.Literal["off", "on", "no-detached", "previous", "next"]
]
display_panes_active_colour: t.Optional[
str
] # Assuming colour is specified as a string
display_panes_colour: t.Optional[str] # Assuming colour is specified as a string
display_panes_time: t.Optional[int] # Milliseconds
display_time: t.Optional[int] # Milliseconds
history_limit: t.Optional[int]
key_table: t.Optional[str]
lock_after_time: t.Optional[int] # Seconds
lock_command: t.Optional[str]
menu_style: t.Optional[str]
menu_selected_style: t.Optional[str]
menu_border_style: t.Optional[str]
menu_border_lines: t.Optional[
t.Literal["single", "rounded", "double", "heavy", "simple", "padded", "none"]
]
message_command_style: t.Optional[str]
message_line: t.Optional[t.Literal[0, 1, 2, 3, 4]]
message_style: t.Optional[str]
mouse: t.Optional[t.Literal["on", "off"]]
prefix: t.Optional[str] # Could be a key symbol or 'None'
prefix2: t.Optional[str] # Could be a key symbol or 'None'
renumber_windows: t.Optional[t.Literal["on", "off"]]
repeat_time: t.Optional[int] # Milliseconds
set_titles: t.Optional[t.Literal["on", "off"]]
set_titles_string: t.Optional[str]
silence_action: t.Optional[t.Literal["any", "none", "current", "other"]]
status: t.Optional[t.Literal["off", "on", 2, 3, 4, 5]]
status_format: t.Optional[t.List[str]]
status_interval: t.Optional[int] # Seconds
status_justify: t.Optional[t.Literal["left", "centre", "right", "absolute-centre"]]
status_keys: t.Optional[t.Literal["vi", "emacs"]]
status_left: t.Optional[str]
status_left_length: t.Optional[int]
status_left_style: t.Optional[str]
status_position: t.Optional[t.Literal["top", "bottom"]]
status_right: t.Optional[str]
status_right_length: t.Optional[int]
status_right_style: t.Optional[str]
status_style: t.Optional[str]
update_environment: t.Optional[t.List[str]]
visual_activity: t.Optional[t.Literal["on", "off", "both"]]
visual_bell: t.Optional[t.Literal["on", "off", "both"]]
visual_silence: t.Optional[t.Literal["on", "off", "both"]]
word_separators: t.Optional[str]
class ServerOptionsDict(t.TypedDict, total=False):
backspace: t.Optional[str]
buffer_limit: t.Optional[int]
command_alias: t.Optional[t.Dict[str, str]]
default_terminal: t.Optional[str]
copy_command: t.Optional[str]
escape_time: t.Optional[int] # Milliseconds
editor: t.Optional[str]
exit_empty: t.Optional[t.Literal["on", "off"]]
exit_unattached: t.Optional[t.Literal["on", "off"]]
extended_keys: t.Optional[t.Literal["on", "off", "always"]]
focus_events: t.Optional[t.Literal["on", "off"]]
history_file: t.Optional[str]
message_limit: t.Optional[int]
prompt_history_limit: t.Optional[int]
set_clipboard: t.Optional[t.Literal["on", "external", "off"]]
terminal_features: t.Optional[
t.Dict[str, t.List[str]]
] # terminal type pattern to features list
terminal_overrides: t.Optional[
t.Dict[str, str]
] # terminal type pattern to terminfo overrides
user_keys: t.Optional[t.Dict[int, str]] # User-defined key escape sequences
@dataclass(repr=False)
class ServerOptionsDataClass(
SkipDefaultFieldsReprMixin,
):
backspace: t.Optional[str] = field(default=None)
buffer_limit: t.Optional[int] = field(default=None)
command_alias: t.Optional[t.Dict[str, str]] = field(default=None)
default_terminal: t.Optional[str] = field(default=None)
copy_command: t.Optional[str] = field(default=None)
escape_time: t.Optional[int] = field(default=None)
editor: t.Optional[str] = field(default=None)
exit_empty: t.Optional[t.Literal["on", "off"]] = field(default=None)
exit_unattached: t.Optional[t.Literal["on", "off"]] = field(default=None)
extended_keys: t.Optional[t.Literal["on", "off", "always"]] = field(default=None)
focus_events: t.Optional[t.Literal["on", "off"]] = field(default=None)
history_file: t.Optional[str] = field(default=None)
message_limit: t.Optional[int] = field(default=None)
prompt_history_limit: t.Optional[int] = field(default=None)
set_clipboard: t.Optional[t.Literal["on", "external", "off"]] = field(default=None)
terminal_features: t.Optional[t.Dict[str, t.List[str]]] = field(default=None)
terminal_overrides: t.Optional[t.Dict[str, str]] = field(default=None)
user_keys: t.Optional[t.Dict[int, str]] = field(default=None)
def __init__(self, **kwargs: object) -> None:
# Convert hyphenated keys to underscored attribute names and assign values
for key, value in kwargs.items():
key_underscored = key.replace("-", "_")
setattr(self, key_underscored, value)
@dataclass(repr=False)
class SessionOptionsDataClass(
SkipDefaultFieldsReprMixin,
):
activity_action: t.Optional[t.Literal["any", "none", "current", "other"]] = field(
default=None
)
assume_paste_time: t.Optional[int] = field(default=None)
base_index: t.Optional[int] = field(default=None)
bell_action: t.Optional[t.Literal["any", "none", "current", "other"]] = field(
default=None
)
default_command: t.Optional[str] = field(default=None)
default_shell: t.Optional[str] = field(default=None)
default_size: t.Optional[str] = field(default=None) # Format "XxY"
destroy_unattached: t.Optional[t.Literal["on", "off"]] = field(default=None)
detach_on_destroy: t.Optional[
t.Literal["off", "on", "no-detached", "previous", "next"]
] = field(default=None)
display_panes_active_colour: t.Optional[str] = field(default=None)
display_panes_colour: t.Optional[str] = field(default=None)
display_panes_time: t.Optional[int] = field(default=None)
display_time: t.Optional[int] = field(default=None)
history_limit: t.Optional[int] = field(default=None)
key_table: t.Optional[str] = field(default=None)
lock_after_time: t.Optional[int] = field(default=None)
lock_command: t.Optional[str] = field(default=None)
menu_style: t.Optional[str] = field(default=None)
menu_selected_style: t.Optional[str] = field(default=None)
menu_border_style: t.Optional[str] = field(default=None)
menu_border_lines: t.Optional[
t.Literal["single", "rounded", "double", "heavy", "simple", "padded", "none"]
] = field(default=None)
message_command_style: t.Optional[str] = field(default=None)
message_line: t.Optional[int] = field(default=None)
message_style: t.Optional[str] = field(default=None)
mouse: t.Optional[t.Literal["on", "off"]] = field(default=None)
prefix: t.Optional[str] = field(default=None)
prefix2: t.Optional[str] = field(default=None)
renumber_windows: t.Optional[t.Literal["on", "off"]] = field(default=None)
repeat_time: t.Optional[int] = field(default=None)
set_titles: t.Optional[t.Literal["on", "off"]] = field(default=None)
set_titles_string: t.Optional[str] = field(default=None)
silence_action: t.Optional[t.Literal["any", "none", "current", "other"]] = field(
default=None
)
status: t.Optional[t.Union[t.Literal["off", "on"], int]] = field(default=None)
status_format: t.Optional[t.List[str]] = field(default=None)
status_interval: t.Optional[int] = field(default=None)
status_justify: t.Optional[
t.Literal["left", "centre", "right", "absolute-centre"]
] = field(default=None)
status_keys: t.Optional[t.Literal["vi", "emacs"]] = field(default=None)
status_left: t.Optional[str] = field(default=None)
status_left_length: t.Optional[int] = field(default=None)
status_left_style: t.Optional[str] = field(default=None)
status_position: t.Optional[t.Literal["top", "bottom"]] = field(default=None)
status_right: t.Optional[str] = field(default=None)
status_right_length: t.Optional[int] = field(default=None)
status_right_style: t.Optional[str] = field(default=None)
status_style: t.Optional[str] = field(default=None)
update_environment: t.Optional[t.List[str]] = field(default=None)
visual_activity: t.Optional[t.Literal["on", "off", "both"]] = field(default=None)
visual_bell: t.Optional[t.Literal["on", "off", "both"]] = field(default=None)
visual_silence: t.Optional[t.Literal["on", "off", "both"]] = field(default=None)
word_separators: t.Optional[str] = field(default=None)
def __init__(self, **kwargs: object) -> None:
# Convert hyphenated keys to underscored attribute names and assign values
for key, value in kwargs.items():
key_underscored = key.replace("-", "_")
setattr(self, key_underscored, value)
@dataclass(repr=False)
class WindowOptionsDataClass(
SkipDefaultFieldsReprMixin,
):
aggressive_resize: t.Optional[t.Literal["on", "off"]] = field(default=None)
automatic_rename: t.Optional[t.Literal["on", "off"]] = field(default=None)
automatic_rename_format: t.Optional[str] = field(default=None)
clock_mode_colour: t.Optional[str] = field(default=None)
clock_mode_style: t.Optional[t.Literal["12", "24"]] = field(default=None)
fill_character: t.Optional[str] = field(default=None)
main_pane_height: t.Optional[t.Union[int, str]] = field(default=None)
main_pane_width: t.Optional[t.Union[int, str]] = field(default=None)
copy_mode_match_style: t.Optional[str] = field(default=None)
copy_mode_mark_style: t.Optional[str] = field(default=None)
copy_mode_current_match_style: t.Optional[str] = field(default=None)
mode_keys: t.Optional[t.Literal["vi", "emacs"]] = field(default=None)
mode_style: t.Optional[str] = field(default=None)
monitor_activity: t.Optional[t.Literal["on", "off"]] = field(default=None)
monitor_bell: t.Optional[t.Literal["on", "off"]] = field(default=None)
monitor_silence: t.Optional[int] = field(default=None) # Assuming seconds as int
other_pane_height: t.Optional[t.Union[int, str]] = field(default=None)
other_pane_width: t.Optional[t.Union[int, str]] = field(default=None)
pane_active_border_style: t.Optional[str] = field(default=None)
pane_base_index: t.Optional[int] = field(default=None)
pane_border_format: t.Optional[str] = field(default=None)
pane_border_indicators: t.Optional[
t.Literal["off", "colour", "arrows", "both"]
] = field(default=None)
pane_border_lines: t.Optional[
t.Literal["single", "double", "heavy", "simple", "number"]
] = field(default=None)
pane_border_status: t.Optional[t.Literal["off", "top", "bottom"]] = field(
default=None
)
pane_border_style: t.Optional[str] = field(default=None)
popup_style: t.Optional[str] = field(default=None)
popup_border_style: t.Optional[str] = field(default=None)
popup_border_lines: t.Optional[
t.Literal["single", "rounded", "double", "heavy", "simple", "padded", "none"]
] = field(default=None)
window_status_activity_style: t.Optional[str] = field(default=None)
window_status_bell_style: t.Optional[str] = field(default=None)
window_status_current_format: t.Optional[str] = field(default=None)
window_status_current_style: t.Optional[str] = field(default=None)
window_status_format: t.Optional[str] = field(default=None)
window_status_last_style: t.Optional[str] = field(default=None)
window_status_separator: t.Optional[str] = field(default=None)
window_status_style: t.Optional[str] = field(default=None)
window_size: t.Optional[
t.Literal["largest", "smallest", "manual", "latest"]
] = field(default=None)
wrap_search: t.Optional[t.Literal["on", "off"]] = field(default=None)
def __init__(self, **kwargs: object) -> None:
# Convert hyphenated keys to underscored attribute names and assign values
for key, value in kwargs.items():
key_underscored = key.replace("-", "_")
setattr(self, key_underscored, value)
@dataclass(repr=False)
class PaneOptionsDataClass(
SkipDefaultFieldsReprMixin,
):
allow_passthrough: t.Optional[t.Literal["on", "off", "all"]] = field(default=None)
allow_rename: t.Optional[t.Literal["on", "off"]] = field(default=None)
alternate_screen: t.Optional[t.Literal["on", "off"]] = field(default=None)
cursor_colour: t.Optional[str] = field(default=None)
pane_colours: t.Optional[t.List[str]] = field(default=None)
cursor_style: t.Optional[
t.Literal[
"default",
"blinking-block",
"block",
"blinking-underline",
"underline",
"blinking-bar",
"bar",
]
] = field(default=None)
remain_on_exit: t.Optional[t.Literal["on", "off", "failed"]] = field(default=None)
remain_on_exit_format: t.Optional[str] = field(default=None)
scroll_on_clear: t.Optional[t.Literal["on", "off"]] = field(default=None)
synchronize_panes: t.Optional[t.Literal["on", "off"]] = field(default=None)
window_active_style: t.Optional[str] = field(default=None)
window_style: t.Optional[str] = field(default=None)
def __init__(self, **kwargs: object) -> None:
# Convert hyphenated keys to underscored attribute names and assign values
for key, value in kwargs.items():
key_underscored = key.replace("-", "_")
setattr(self, key_underscored, value)
@dataclass(repr=False)
class OptionsDataClass(
ServerOptionsDataClass,
SessionOptionsDataClass,
WindowOptionsDataClass,
PaneOptionsDataClass,
SkipDefaultFieldsReprMixin,
):
def __init__(self, **kwargs: object) -> None:
# Convert hyphenated keys to underscored attribute names and assign values
# Remove asaterisk from inherited options
for key, value in kwargs.items():
key_underscored = key.replace("-", "_")
key_asterisk_removed = key_underscored.rstrip("*")
setattr(self, key_asterisk_removed, value)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment