Code to serialize state

This commit is contained in:
Kovid Goyal
2020-04-17 08:42:45 +05:30
parent 0a6fb362f6
commit 63307cb1d8
2 changed files with 40 additions and 4 deletions

View File

@@ -7,8 +7,8 @@ from collections import deque
from contextlib import suppress
from functools import partial
from typing import (
Deque, Dict, Generator, Iterator, List, NamedTuple,
Optional, Pattern, Sequence, Tuple, cast
Any, Deque, Dict, Generator, Iterator, List, NamedTuple, Optional, Pattern,
Sequence, Tuple, cast
)
from .borders import Borders
@@ -25,9 +25,9 @@ from .layout import (
)
from .options_stub import Options
from .tab_bar import TabBar, TabBarData
from .typing import SessionTab, SessionType, TypedDict
from .utils import log_error, resolved_shell
from .window import Window, WindowDict, Watchers
from .typing import TypedDict, SessionTab, SessionType
from .window import Watchers, Window, WindowDict
class TabDict(TypedDict):
@@ -157,6 +157,18 @@ class Tab: # {{{
self.new_window(cmd=cmd)
self.set_active_window_idx(session_tab.active_window_idx)
def serialize_state(self) -> Dict[str, Any]:
return {
'version': 1,
'id': self.id,
'active_window_idx': self.active_window_idx,
'windows': [w.serialize_state() for w in self],
'current_layout': self._current_layout_name,
'last_used_layout': self._last_used_layout,
'active_window_history': list(self.active_window_history),
'name': self.name,
}
@property
def active_window_idx(self) -> int:
return self._active_window_idx
@@ -704,6 +716,14 @@ class TabManager: # {{{
'active_window_history': list(tab.active_window_history),
}
def serialize_state(self) -> Dict[str, Any]:
return {
'version': 1,
'id': self.os_window_id,
'tabs': [tab.serialize_state() for tab in self],
'active_tab_idx': self.active_tab_idx,
}
@property
def active_tab(self) -> Optional[Tab]:
return self.tabs[self.active_tab_idx] if self.tabs else None

View File

@@ -254,6 +254,22 @@ class Window:
foreground_processes=self.child.foreground_processes
)
def serialize_state(self) -> Dict[str, Any]:
return {
'version': 1,
'id': self.id,
'child_title': self.child_title,
'override_title': self.override_title,
'default_title': self.default_title,
'title_stack': list(self.title_stack),
'allow_remote_control': self.allow_remote_control,
'overlay_window_id': self.overlay_window_id,
'overlay_for': self.overlay_for,
'cwd': self.child.current_cwd or self.child.cwd,
'env': self.child.environ,
'cmdline': self.child.cmdline,
}
@property
def current_colors(self) -> Dict:
return self.screen.color_profile.as_dict()