4141
4242_RUST_BACKEND = os .getenv ("LIBTMUX_BACKEND" ) == "rust"
4343_RUST_SERVER_CACHE : dict [
44- tuple [str | None , str | None , int | None , str | None , str | None ], t .Any
44+ tuple [str | None , str | None , int | None , str | None , str | None , bool | None ],
45+ t .Any ,
4546] = {}
4647_RUST_SERVER_CONFIG : dict [
47- tuple [str | None , str | None , int | None , str | None , str | None ], set [str ]
48+ tuple [str | None , str | None , int | None , str | None , str | None , bool | None ],
49+ set [str ],
4850] = {}
4951
5052
@@ -67,6 +69,18 @@ def _resolve_rust_socket_path(socket_path: str | None, socket_name: str | None)
6769 return str (socket_dir / name )
6870
6971
72+ def _env_bool (name : str ) -> bool | None :
73+ value = os .getenv (name )
74+ if value is None :
75+ return None
76+ value = value .strip ().lower ()
77+ if value in {"1" , "true" , "yes" , "on" }:
78+ return True
79+ if value in {"0" , "false" , "no" , "off" }:
80+ return False
81+ return None
82+
83+
7084def _rust_run_with_config (
7185 socket_path : str | None ,
7286 socket_name : str | None ,
@@ -167,7 +181,15 @@ def _rust_server(
167181) -> t .Any :
168182 connection_kind = os .getenv ("LIBTMUX_RUST_CONNECTION_KIND" )
169183 server_kind = os .getenv ("LIBTMUX_RUST_SERVER_KIND" )
170- key = (socket_name , socket_path , colors , connection_kind , server_kind )
184+ control_autostart = _env_bool ("LIBTMUX_RUST_CONTROL_AUTOSTART" )
185+ key = (
186+ socket_name ,
187+ socket_path ,
188+ colors ,
189+ connection_kind ,
190+ server_kind ,
191+ control_autostart ,
192+ )
171193 server = _RUST_SERVER_CACHE .get (key )
172194 if server is None :
173195 from libtmux import _rust as rust_backend
@@ -177,13 +199,16 @@ def _rust_server(
177199 kwargs ["connection_kind" ] = connection_kind
178200 if server_kind :
179201 kwargs ["server_kind" ] = server_kind
202+ if control_autostart is not None :
203+ kwargs ["control_autostart" ] = control_autostart
180204 with libtmux_trace .span (
181205 "rust_server_init" ,
182206 layer = "python" ,
183207 socket_name = socket_name ,
184208 socket_path = socket_path ,
185209 connection_kind = connection_kind ,
186210 server_kind = server_kind ,
211+ control_autostart = control_autostart ,
187212 ):
188213 server = rust_backend .Server (
189214 socket_path = socket_path ,
@@ -223,6 +248,7 @@ def _rust_cmd_result(
223248
224249 connection_kind = os .getenv ("LIBTMUX_RUST_CONNECTION_KIND" )
225250 server_kind = os .getenv ("LIBTMUX_RUST_SERVER_KIND" )
251+ control_autostart = _env_bool ("LIBTMUX_RUST_CONTROL_AUTOSTART" )
226252 with libtmux_trace .span (
227253 "rust_cmd_result" ,
228254 layer = "python" ,
@@ -232,13 +258,21 @@ def _rust_cmd_result(
232258 config_file = config_file ,
233259 connection_kind = connection_kind ,
234260 server_kind = server_kind ,
261+ control_autostart = control_autostart ,
235262 ):
236263 if connection_kind in {"bin" , "tmux-bin" } and config_file :
237264 cmd_parts = ["-f" , config_file , * cmd_parts ]
238265 config_file = None
239266
240267 server = _rust_server (socket_name , socket_path , colors )
241- key = (socket_name , socket_path , colors , connection_kind , server_kind )
268+ key = (
269+ socket_name ,
270+ socket_path ,
271+ colors ,
272+ connection_kind ,
273+ server_kind ,
274+ control_autostart ,
275+ )
242276 if config_file :
243277 loaded = _RUST_SERVER_CONFIG .setdefault (key , set ())
244278 if config_file not in loaded :
0 commit comments