@@ -700,6 +700,10 @@ def startup(config_dir):
700700 help = 'Use vi-mode in ptpython/ptipython' ,
701701 default = False ,
702702)
703+ @click .option ('--yes' , '-y' , 'answer_yes' , help = 'yes' , is_flag = True )
704+ @click .option (
705+ '-d' , 'detached' , help = 'Load the session without attaching it' , is_flag = True
706+ )
703707def command_shell (
704708 session_name ,
705709 window_name ,
@@ -709,6 +713,8 @@ def command_shell(
709713 shell ,
710714 use_pythonrc ,
711715 use_vi_mode ,
716+ detached ,
717+ answer_yes ,
712718):
713719 """Launch python shell for tmux server, session, window and pane.
714720
@@ -718,15 +724,56 @@ def command_shell(
718724 session)
719725 - ``server.attached_session``, ``session.attached_window``, ``window.attached_pane``
720726 """
727+ print (f'detached: { detached } ' )
721728 server = Server (socket_name = socket_name , socket_path = socket_path )
722729
723730 util .raise_if_tmux_not_running (server = server )
724731
725732 current_pane = util .get_current_pane (server = server )
726733
727- session = util .get_session (
728- server = server , session_name = session_name , current_pane = current_pane
729- )
734+ try :
735+ current_session = session = util .get_session (
736+ server = server , current_pane = current_pane
737+ )
738+ except Exception :
739+ current_session = None
740+
741+ try :
742+ session = util .get_session (
743+ server = server , session_name = session_name , current_pane = current_pane
744+ )
745+ except exc .TmuxpException :
746+ if answer_yes or click .confirm (
747+ 'Session %s does not exist. Create?' % session_name
748+ if session_name is not None
749+ else 'Session does not exist. Create?'
750+ ):
751+ session = server .new_session (session_name = session_name )
752+ else :
753+ return
754+
755+ if current_session is not None and current_session .id != session .id :
756+ print ('in' )
757+ if not detached and (
758+ answer_yes
759+ or click .confirm (
760+ 'Switch / attach to %s and run shell from there?'
761+ % click .style (session_name , fg = 'green' ),
762+ default = True ,
763+ )
764+ ):
765+ if current_session .id != session .id :
766+ session .attached_window .attached_pane .send_keys (
767+ 'tmuxp shell' , enter = True
768+ )
769+ if 'TMUX' in os .environ :
770+ session .switch_client ()
771+ else :
772+ session .attach_session ()
773+ return
774+
775+ if current_pane ['session_id' ] != session .id :
776+ current_pane = None
730777
731778 window = util .get_window (
732779 session = session , window_name = window_name , current_pane = current_pane
0 commit comments