7
7
8
8
libtmux.server
9
9
~~~~~~~~~~~~~~
10
+
11
+ Examples
12
+ --------
13
+ >>> from libtmux import Server
14
+ >>> server = Server() # Create a new server instance
15
+ >>> server.is_alive() # Check if tmux server is running
16
+ True
17
+ >>> # Clean up any existing test session first
18
+ >>> if server.has_session("test_session"):
19
+ ... server.kill_session("test_session")
20
+ >>> new_session = server.new_session(session_name="test_session")
21
+ >>> new_session.name
22
+ 'test_session'
23
+ >>> server.has_session("test_session")
24
+ True
25
+ >>> server.kill_session("test_session") # Clean up
26
+ Server(socket_path=/tmp/tmux-.../default)
10
27
"""
11
28
12
29
from __future__ import annotations
@@ -359,25 +376,33 @@ def attached_sessions(self) -> list[Session]:
359
376
return self .sessions .filter (session_attached__noeq = "1" )
360
377
361
378
def has_session (self , target_session : str , exact : bool = True ) -> bool :
362
- """Check if a session with the given name (or pattern) exists.
379
+ """Return True if session exists.
363
380
364
381
Parameters
365
382
----------
366
- target_session
367
- The session name or pattern to check.
368
- exact
369
- Whether to require an exact match (tmux 2.1+). If True, prepends
370
- ``=`` to the session name for an exact match.
371
-
372
- Raises
373
- ------
374
- exc.BadSessionName
375
- 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.
376
387
377
- Returns
378
- -------
379
- bool
380
- True if the session exists, False otherwise.
388
+ Examples
389
+ --------
390
+ >>> server = Server()
391
+ >>> # Clean up any existing test session
392
+ >>> if server.has_session("test_session"):
393
+ ... server.kill_session("test_session")
394
+ >>> server.new_session(session_name="test_session")
395
+ Session($... test_session)
396
+ >>> server.has_session("test_session")
397
+ True
398
+ >>> server.has_session("nonexistent")
399
+ False
400
+ >>> server.has_session("test_session", exact=True) # Exact match
401
+ True
402
+ >>> server.has_session("test*", exact=False) # Pattern match
403
+ True
404
+ >>> server.kill_session("test_session") # Clean up
405
+ Server(socket_path=/tmp/tmux-.../default)
381
406
"""
382
407
session_check_name (target_session )
383
408
@@ -409,23 +434,26 @@ def kill(self) -> None:
409
434
self .cmd ("kill-server" )
410
435
411
436
def kill_session (self , target_session : str | int ) -> Server :
412
- """Kill a specific session on this server .
437
+ """Kill a session by name .
413
438
414
439
Parameters
415
440
----------
416
- target_session
417
- The session name or ID to kill. Note that tmux uses fnmatch(3),
418
- so 'asdf' might also match 'asdfasd'.
441
+ target_session : str or int
442
+ Name of the session or session ID to kill
419
443
420
- Returns
421
- -------
422
- Server
423
- This server object (for chaining).
424
-
425
- Raises
426
- ------
427
- exc.LibTmuxException
428
- If tmux reports an error (stderr output).
444
+ Examples
445
+ --------
446
+ >>> server = Server()
447
+ >>> # Clean up any existing session first
448
+ >>> if server.has_session("temp"):
449
+ ... server.kill_session("temp")
450
+ >>> session = server.new_session(session_name="temp")
451
+ >>> server.has_session("temp")
452
+ True
453
+ >>> server.kill_session("temp")
454
+ Server(socket_path=/tmp/tmux-.../default)
455
+ >>> server.has_session("temp")
456
+ False
429
457
"""
430
458
proc = self .cmd ("kill-session" , target = target_session )
431
459
if proc .stderr :
@@ -487,58 +515,63 @@ def new_session(
487
515
* args : t .Any ,
488
516
** kwargs : t .Any ,
489
517
) -> Session :
490
- """Create a new tmux session and return the associated :class:`Session`.
491
-
492
- Uses ``-P -F#{session_id}`` to capture the session ID in the output.
518
+ """Create a new session.
493
519
494
520
Parameters
495
521
----------
496
522
session_name : str, optional
497
- The name to assign to the new session (``-s`` flag).
523
+ Name of the session
498
524
kill_session : bool, optional
499
- If True, kills any existing session with the same name.
525
+ Kill session if it exists
500
526
attach : bool, optional
501
- If True, creates the new session in the foreground (no ``-d`` flag).
527
+ Attach to session after creating it
502
528
start_directory : str, optional
503
- Working directory for the new session (``-c`` flag).
529
+ Working directory for the session
504
530
window_name : str, optional
505
- If given, creates the session's first window with this name (``-n``).
531
+ Name of the initial window
506
532
window_command : str, optional
507
- A shell command to run immediately in the new window; the window
508
- closes when the command exits.
533
+ Command to run in the initial window
509
534
x : int or "-", optional
510
- Forces the specified width for the new session if detached (``-x``).
535
+ Width of new window
511
536
y : int or "-", optional
512
- Forces the specified height for the new session if detached (``-y``).
513
- environment : dict of str to str, optional
514
- Environment variables to set for the session (tmux 3.2+).
515
-
516
- Returns
517
- -------
518
- Session
519
- The newly created :class:`Session`.
520
-
521
- Raises
522
- ------
523
- exc.TmuxSessionExists
524
- If a session with the given `session_name` already exists and
525
- `kill_session` is False.
526
- exc.BadSessionName
527
- If `session_name` is invalid.
528
- exc.LibTmuxException
529
- If tmux reports an error (stderr output).
537
+ Height of new window
538
+ environment : dict, optional
539
+ Dictionary of environment variables to set
530
540
531
541
Examples
532
542
--------
533
- Sessions can be created without a session name:
534
-
535
- >>> server.new_session()
536
- Session($2 2)
537
-
538
- With a session name:
543
+ >>> server = Server()
544
+ >>> # Clean up any existing sessions first
545
+ >>> for name in ["basic", "custom", "env_test"]:
546
+ ... if server.has_session(name):
547
+ ... server.kill_session(name)
548
+ >>> # Create a basic session
549
+ >>> session1 = server.new_session(session_name="basic")
550
+ >>> session1.name
551
+ 'basic'
552
+
553
+ >>> # Create session with custom window name
554
+ >>> session2 = server.new_session(
555
+ ... session_name="custom",
556
+ ... window_name="editor"
557
+ ... )
558
+ >>> session2.windows[0].name
559
+ 'editor'
539
560
540
- >>> server.new_session(session_name='my session')
541
- Session($3 my session)
561
+ >>> # Create session with environment variables
562
+ >>> session3 = server.new_session(
563
+ ... session_name="env_test",
564
+ ... environment={"TEST_VAR": "test_value"}
565
+ ... )
566
+ >>> session3.name
567
+ 'env_test'
568
+
569
+ >>> # Clean up
570
+ >>> for name in ["basic", "custom", "env_test"]:
571
+ ... server.kill_session(name)
572
+ Server(socket_path=/tmp/tmux-.../default)
573
+ Server(socket_path=/tmp/tmux-.../default)
574
+ Server(socket_path=/tmp/tmux-.../default)
542
575
"""
543
576
if session_name is not None :
544
577
session_check_name (session_name )
@@ -598,11 +631,27 @@ def new_session(
598
631
599
632
@property
600
633
def sessions (self ) -> QueryList [Session ]:
601
- """Return a :class:`QueryList` of all :class:`Session` objects in this server .
634
+ """Return list of sessions .
602
635
603
- Access advanced filtering and retrieval with:
604
- :meth:`.sessions.get() <libtmux._internal.query_list.QueryList.get()>` and
605
- :meth:`.sessions.filter() <libtmux._internal.query_list.QueryList.filter()>`
636
+ Examples
637
+ --------
638
+ >>> server = Server()
639
+ >>> # Clean up any existing test sessions first
640
+ >>> for name in ["test1", "test2"]:
641
+ ... if server.has_session(name):
642
+ ... server.kill_session(name)
643
+ >>> # Create some test sessions
644
+ >>> session1 = server.new_session(session_name="test1")
645
+ >>> session2 = server.new_session(session_name="test2")
646
+ >>> len(server.sessions) >= 2 # May have other sessions
647
+ True
648
+ >>> sorted([s.name for s in server.sessions if s.name in ["test1", "test2"]])
649
+ ['test1', 'test2']
650
+ >>> # Clean up
651
+ >>> server.kill_session("test1")
652
+ Server(socket_path=/tmp/tmux-.../default)
653
+ >>> server.kill_session("test2")
654
+ Server(socket_path=/tmp/tmux-.../default)
606
655
"""
607
656
sessions : list [Session ] = []
608
657
with contextlib .suppress (Exception ):
0 commit comments