77
88libtmux.server 
99~~~~~~~~~~~~~~ 
10+ 
11+ Examples 
12+ -------- 
13+ >>> server.is_alive()  # Check if tmux server is running 
14+ True 
15+ >>> # Clean up any existing test session first 
16+ >>> if server.has_session("test_session"): 
17+ ...     server.kill_session("test_session") 
18+ >>> new_session = server.new_session(session_name="test_session") 
19+ >>> new_session.name 
20+ 'test_session' 
21+ >>> server.has_session("test_session") 
22+ True 
23+ >>> server.kill_session("test_session")  # Clean up 
24+ Server(socket_name=libtmux_test...) 
1025""" 
1126
1227from  __future__ import  annotations 
@@ -361,25 +376,33 @@ def attached_sessions(self) -> list[Session]:
361376        return  self .sessions .filter (session_attached__noeq = "1" )
362377
363378    def  has_session (self , target_session : str , exact : bool  =  True ) ->  bool :
364-         """Check  if a  session with the given name (or pattern)  exists. 
379+         """Return True  if session exists. 
365380
366381        Parameters 
367382        ---------- 
368-         target_session 
369-             The session name or pattern to check. 
370-         exact 
371-             Whether to require an exact match (tmux 2.1+). If True, prepends 
372-             ``=`` to the session name for an exact match. 
373- 
374-         Raises 
375-         ------ 
376-         exc.BadSessionName 
377-             If the `target_session` is invalid. 
383+         target_session : str 
384+             Target session name to check 
385+         exact : bool, optional 
386+             If True, match the name exactly. Otherwise, match as a pattern. 
378387
379-         Returns 
380-         ------- 
381-         bool 
382-             True if the session exists, False otherwise. 
388+         Examples 
389+         -------- 
390+         >>> # Clean up any existing test session 
391+         >>> if server.has_session("test_session"): 
392+         ...     server.kill_session("test_session") 
393+         >>> server.new_session(session_name="test_session") 
394+         Session($... test_session) 
395+         >>> server.has_session("test_session") 
396+         True 
397+         >>> server.has_session("nonexistent") 
398+         False 
399+         >>> server.has_session("test_session", exact=True)  # Exact match 
400+         True 
401+         >>> # Pattern matching (using tmux's pattern matching) 
402+         >>> server.has_session("test_sess*", exact=False)  # Pattern match 
403+         True 
404+         >>> server.kill_session("test_session")  # Clean up 
405+         Server(socket_name=libtmux_test...) 
383406        """ 
384407        session_check_name (target_session )
385408
@@ -396,38 +419,38 @@ def kill(self) -> None:
396419
397420        Examples 
398421        -------- 
399-         >>> svr = Server(socket_name="testing") 
400-         >>> svr.new_session() 
422+         >>> # Create a new server for testing kill() 
423+         >>> test_server = Server(socket_name="testing") 
424+         >>> test_server.new_session() 
401425        Session(...) 
402- 
403-         >>> svr.is_alive() 
426+         >>> test_server.is_alive() 
404427        True 
405- 
406-         >>> svr.kill() 
407- 
408-         >>> svr.is_alive() 
428+         >>> test_server.kill() 
429+         >>> test_server.is_alive() 
409430        False 
410431        """ 
411432        self .cmd ("kill-server" )
412433
413434    def  kill_session (self , target_session : str  |  int ) ->  Server :
414-         """Kill a specific  session on this server . 
435+         """Kill a session by name . 
415436
416437        Parameters 
417438        ---------- 
418-         target_session 
419-             The session name or ID to kill. Note that tmux uses fnmatch(3), 
420-             so 'asdf' might also match 'asdfasd'. 
421- 
422-         Returns 
423-         ------- 
424-         Server 
425-             This server object (for chaining). 
439+         target_session : str or int 
440+             Name of the session or session ID to kill 
426441
427-         Raises 
428-         ------ 
429-         exc.LibTmuxException 
430-             If tmux reports an error (stderr output). 
442+         Examples 
443+         -------- 
444+         >>> # Clean up any existing session first 
445+         >>> if server.has_session("temp"): 
446+         ...     server.kill_session("temp") 
447+         >>> session = server.new_session(session_name="temp") 
448+         >>> server.has_session("temp") 
449+         True 
450+         >>> server.kill_session("temp") 
451+         Server(socket_name=libtmux_test...) 
452+         >>> server.has_session("temp") 
453+         False 
431454        """ 
432455        proc  =  self .cmd ("kill-session" , target = target_session )
433456        if  proc .stderr :
@@ -442,6 +465,22 @@ def switch_client(self, target_session: str) -> None:
442465        target_session 
443466            The name or pattern of the target session. 
444467
468+         Examples 
469+         -------- 
470+         >>> # Create two test sessions 
471+         >>> for name in ["session1", "session2"]: 
472+         ...     if server.has_session(name): 
473+         ...         server.kill_session(name) 
474+         >>> session1 = server.new_session(session_name="session1") 
475+         >>> session2 = server.new_session(session_name="session2") 
476+         >>> # Note: switch_client() requires an interactive terminal 
477+         >>> # so we can't demonstrate it in doctests 
478+         >>> # Clean up 
479+         >>> server.kill_session("session1") 
480+         Server(socket_name=libtmux_test...) 
481+         >>> server.kill_session("session2") 
482+         Server(socket_name=libtmux_test...) 
483+ 
445484        Raises 
446485        ------ 
447486        exc.BadSessionName 
@@ -463,6 +502,18 @@ def attach_session(self, target_session: str | None = None) -> None:
463502            The name or pattern of the target session. If None, attaches to 
464503            the most recently used session. 
465504
505+         Examples 
506+         -------- 
507+         >>> # Create a test session 
508+         >>> if server.has_session("test_attach"): 
509+         ...     server.kill_session("test_attach") 
510+         >>> session = server.new_session(session_name="test_attach") 
511+         >>> # Note: attach_session() requires an interactive terminal 
512+         >>> # so we can't demonstrate it in doctests 
513+         >>> # Clean up 
514+         >>> server.kill_session("test_attach") 
515+         Server(socket_name=libtmux_test...) 
516+ 
466517        Raises 
467518        ------ 
468519        exc.BadSessionName 
@@ -489,58 +540,62 @@ def new_session(
489540        * args : t .Any ,
490541        ** kwargs : t .Any ,
491542    ) ->  Session :
492-         """Create a new tmux session and return the associated :class:`Session`. 
493- 
494-         Uses ``-P -F#{session_id}`` to capture the session ID in the output. 
543+         """Create a new session. 
495544
496545        Parameters 
497546        ---------- 
498547        session_name : str, optional 
499-             The name to assign to  the new  session (``-s`` flag).  
548+             Name of  the session 
500549        kill_session : bool, optional 
501-             If True, kills any existing  session with the same name.  
550+             Kill  session if it exists  
502551        attach : bool, optional 
503-             If True, creates the new  session in the foreground (no ``-d`` flag).  
552+             Attach to  session after creating it  
504553        start_directory : str, optional 
505-             Working directory for the new  session (``-c`` flag).  
554+             Working directory for the session 
506555        window_name : str, optional 
507-             If given, creates  the session's first  window with this name (``-n``).  
556+             Name of  the initial  window 
508557        window_command : str, optional 
509-             A shell command to run immediately in the new window; the window 
510-             closes when the command exits. 
558+             Command to run in the initial window 
511559        x : int or "-", optional 
512-             Forces the specified width for the  new session if detached (``-x``).  
560+             Width of  new window  
513561        y : int or "-", optional 
514-             Forces the specified height for the new session if detached (``-y``). 
515-         environment : dict of str to str, optional 
516-             Environment variables to set for the session (tmux 3.2+). 
517- 
518-         Returns 
519-         ------- 
520-         Session 
521-             The newly created :class:`Session`. 
522- 
523-         Raises 
524-         ------ 
525-         exc.TmuxSessionExists 
526-             If a session with the given `session_name` already exists and 
527-             `kill_session` is False. 
528-         exc.BadSessionName 
529-             If `session_name` is invalid. 
530-         exc.LibTmuxException 
531-             If tmux reports an error (stderr output). 
562+             Height of new window 
563+         environment : dict, optional 
564+             Dictionary of environment variables to set 
532565
533566        Examples 
534567        -------- 
535-         Sessions can be created without a session name: 
536- 
537-         >>> server.new_session() 
538-         Session($2 2) 
539- 
540-         With a session name: 
568+         >>> # Clean up any existing sessions first 
569+         >>> for name in ["basic", "custom", "env_test"]: 
570+         ...     if server.has_session(name): 
571+         ...         server.kill_session(name) 
572+         >>> # Create a basic session 
573+         >>> session1 = server.new_session(session_name="basic") 
574+         >>> session1.name 
575+         'basic' 
576+ 
577+         >>> # Create session with custom window name 
578+         >>> session2 = server.new_session( 
579+         ...     session_name="custom", 
580+         ...     window_name="editor" 
581+         ... ) 
582+         >>> session2.windows[0].name 
583+         'editor' 
541584
542-         >>> server.new_session(session_name='my session') 
543-         Session($3 my session) 
585+         >>> # Create session with environment variables 
586+         >>> session3 = server.new_session( 
587+         ...     session_name="env_test", 
588+         ...     environment={"TEST_VAR": "test_value"} 
589+         ... ) 
590+         >>> session3.name 
591+         'env_test' 
592+ 
593+         >>> # Clean up 
594+         >>> for name in ["basic", "custom", "env_test"]: 
595+         ...     server.kill_session(name) 
596+         Server(socket_name=libtmux_test...) 
597+         Server(socket_name=libtmux_test...) 
598+         Server(socket_name=libtmux_test...) 
544599        """ 
545600        if  session_name  is  not None :
546601            session_check_name (session_name )
@@ -600,11 +655,26 @@ def new_session(
600655
601656    @property  
602657    def  sessions (self ) ->  QueryList [Session ]:
603-         """Return a :class:`QueryList`  of all :class:`Session` objects in this server . 
658+         """Return list  of sessions . 
604659
605-         Access advanced filtering and retrieval with: 
606-         :meth:`.sessions.get() <libtmux._internal.query_list.QueryList.get()>` and 
607-         :meth:`.sessions.filter() <libtmux._internal.query_list.QueryList.filter()>` 
660+         Examples 
661+         -------- 
662+         >>> # Clean up any existing test sessions first 
663+         >>> for name in ["test1", "test2"]: 
664+         ...     if server.has_session(name): 
665+         ...         server.kill_session(name) 
666+         >>> # Create some test sessions 
667+         >>> session1 = server.new_session(session_name="test1") 
668+         >>> session2 = server.new_session(session_name="test2") 
669+         >>> len(server.sessions) >= 2  # May have other sessions 
670+         True 
671+         >>> sorted([s.name for s in server.sessions if s.name in ["test1", "test2"]]) 
672+         ['test1', 'test2'] 
673+         >>> # Clean up 
674+         >>> server.kill_session("test1") 
675+         Server(socket_name=libtmux_test...) 
676+         >>> server.kill_session("test2") 
677+         Server(socket_name=libtmux_test...) 
608678        """ 
609679        sessions : list [Session ] =  []
610680        with  contextlib .suppress (Exception ):
@@ -623,6 +693,36 @@ def windows(self) -> QueryList[Window]:
623693
624694        This includes windows in all sessions. 
625695
696+         Examples 
697+         -------- 
698+         >>> # Clean up any existing test sessions 
699+         >>> for name in ["test_windows1", "test_windows2"]: 
700+         ...     if server.has_session(name): 
701+         ...         server.kill_session(name) 
702+         >>> # Create sessions with windows 
703+         >>> session1 = server.new_session(session_name="test_windows1") 
704+         >>> session2 = server.new_session(session_name="test_windows2") 
705+         >>> # Create additional windows 
706+         >>> _ = session1.new_window(window_name="win1")  # Create window 
707+         >>> _ = session2.new_window(window_name="win2")  # Create window 
708+         >>> # Each session should have 2 windows (default + new) 
709+         >>> len([w for w in server.windows if w.session.name == "test_windows1"]) 
710+         2 
711+         >>> len([w for w in server.windows if w.session.name == "test_windows2"]) 
712+         2 
713+         >>> # Verify window names 
714+         >>> wins1 = [w for w in server.windows if w.session.name == "test_windows1"] 
715+         >>> wins2 = [w for w in server.windows if w.session.name == "test_windows2"] 
716+         >>> sorted(w.name for w in wins1) 
717+         ['win1', ...] 
718+         >>> sorted(w.name for w in wins2) 
719+         ['win2', ...] 
720+         >>> # Clean up 
721+         >>> server.kill_session("test_windows1") 
722+         Server(socket_name=libtmux_test...) 
723+         >>> server.kill_session("test_windows2") 
724+         Server(socket_name=libtmux_test...) 
725+ 
626726        Access advanced filtering and retrieval with: 
627727        :meth:`.windows.get() <libtmux._internal.query_list.QueryList.get()>` and 
628728        :meth:`.windows.filter() <libtmux._internal.query_list.QueryList.filter()>` 
@@ -643,6 +743,24 @@ def panes(self) -> QueryList[Pane]:
643743
644744        This includes panes from all windows in all sessions. 
645745
746+         Examples 
747+         -------- 
748+         >>> # Clean up any existing test session 
749+         >>> if server.has_session("test_panes"): 
750+         ...     server.kill_session("test_panes") 
751+         >>> # Create a session and split some panes 
752+         >>> session = server.new_session(session_name="test_panes") 
753+         >>> window = session.attached_window 
754+         >>> # Split into two panes 
755+         >>> window.split_window() 
756+         Pane(%... Window(@... 1:..., Session($... test_panes))) 
757+         >>> # Each window starts with 1 pane, split creates another 
758+         >>> len([p for p in server.panes if p.window.session.name == "test_panes"]) 
759+         2 
760+         >>> # Clean up 
761+         >>> server.kill_session("test_panes") 
762+         Server(socket_name=libtmux_test...) 
763+ 
646764        Access advanced filtering and retrieval with: 
647765        :meth:`.panes.get() <libtmux._internal.query_list.QueryList.get()>` and 
648766        :meth:`.panes.filter() <libtmux._internal.query_list.QueryList.filter()>` 
0 commit comments