lundi 29 août 2016

i3 - executing multiple commands but only if instances don't yet exist

I am using i3 window manager and am trying to configure my desktop so that key combination Win+o would open Viber, Skype and Whatsapp. So this is what I put in ~/.config/i3/config file:

bindsym $mod+o exec "viber & chromium --app=http://ift.tt/1Dt3Tno & chromium --app=http://ift.tt/1BsJicG"

This works fine and all three windows open up fine, but if I close only Skype and again press Win+o I will have one instance of Skype and two instances of Viber / Whatsapp.

So I need to somehow first check if any instance of the programs is already running and prevent the ones that do to reload. I had an idea to start xprop and click on all of the windows to get their details which look like it is shown below.

Whatsapp:

WM_STATE(WM_STATE):
                window state: Normal
                icon window: 0x0
_NET_WM_DESKTOP(CARDINAL) = 1
_NET_WM_USER_TIME(CARDINAL) = 6425123
WM_NORMAL_HINTS(WM_SIZE_HINTS):
                program specified location: 0, 18
WM_NAME(UTF8_STRING) = "WhatsApp"
_NET_WM_NAME(UTF8_STRING) = "WhatsApp"
XdndAware(ATOM) = BITMAP
_MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x2, 0x0, 0x1, 0x0, 0x0
_NET_WM_ICON(CARDINAL) =        Icon (16 x 16):

               ░░       
            ░░▒▒▒▒░░    
           ░▒▒▒▒▒▒▒▒░   
          ░▒░ ▒▒▒▒▒▒▒░  
          ░▒  ░▒▒▒▒▒▒▒  
          ▒▒   ▒▒▒▒▒▒▒  
         ░▒▒  ░▒▒▒▒▒▒▒░ 
         ░▒▒░  ▒▒▒▒▒▒▒░ 
          ▒▒▒░  ░  ░▒▒  
          ▒▒▒▒░     ▒▒  
          ░▒▒▒▒▒░  ░▒░  
          ░▒▒▒▒▒▒▒▒▒░   
          ░░░░▒▒▒▒▒░    
               ░░       


        Icon (16 x 16):

               ░░       
            ░░▒▒▒▒░░    
           ░▒▒▒▒▒▒▒▒░   
          ░▒░ ▒▒▒▒▒▒▒░  
          ░▒  ░▒▒▒▒▒▒▒  
          ▒▒   ▒▒▒▒▒▒▒  
         ░▒▒  ░▒▒▒▒▒▒▒░ 
         ░▒▒░  ▒▒▒▒▒▒▒░ 
          ▒▒▒░  ░  ░▒▒  
          ▒▒▒▒░     ▒▒  
          ░▒▒▒▒▒░  ░▒░  
          ░▒▒▒▒▒▒▒▒▒░   
          ░░░░▒▒▒▒▒░    
               ░░       



WM_WINDOW_ROLE(STRING) = "pop-up"
WM_CLASS(STRING) = "web.whatsapp.com", "chromium"
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
_NET_WM_PID(CARDINAL) = 6987
WM_LOCALE_NAME(STRING) = "en_US.utf8"
WM_CLIENT_MACHINE(STRING) = "ziga-laptop"
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, _NET_WM_PING

Skype:

_NET_WM_DESKTOP(CARDINAL) = 1
WM_STATE(WM_STATE):
                window state: Normal
                icon window: 0x0
_NET_WM_USER_TIME(CARDINAL) = 6297395
WM_NORMAL_HINTS(WM_SIZE_HINTS):
                program specified location: 962, 18
WM_NAME(UTF8_STRING) = "Skype"
_NET_WM_NAME(UTF8_STRING) = "Skype"
XdndAware(ATOM) = BITMAP
_MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x2, 0x0, 0x1, 0x0, 0x0
_NET_WM_ICON(CARDINAL) =        Icon (64 x 64):



                                 ░░▒▒▒▒▒▒▒▒▒▒░░                         
                              ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░                      
                           ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░                   
                         ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░                 
                        ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░                
                      ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░              
                     ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░             
                    ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░            
                   ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░           
                  ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░          
                 ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░         
                ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░        
                ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒        
               ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒       
              ░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░      
              ░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░      
             ░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░         ░░░░░░░░░░░░░░░░░░░░░      
             ░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░             ░░░░░░░░░░░░░░░░░░░░     
            ░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒░      ░░░░      ░░░░░░░░░░░░░░░░░░░     
            ░░░░░░░▒▒▒▒▒▒▒▒▒▒▒░    ░░░░░░░░░░    ░░░░░░░░░░░░░░░░░░     
            ░░░░░░░░▒▒▒▒▒▒▒▒▒░    ░░░░░░░░░░░░    ░░░░░░░░░░░░░░░░░░    
           ░░░░░░░░░▒▒▒▒▒▒▒▒▒   ░░░░░░░░░░░░░░░░   ░░░░░░░░░░░░░░░░░    
           ░░░░░░░░░░▒▒▒▒▒▒▒    ░░░░░░░░░░░░░░░░    ░░░░░░░░░░░░░░░░    
           ░░░░░░░░░░▒▒▒▒▒▒▒   ░░░░░░░░░░░░░░░░░░   ░░░░░░░░░░░░░░░░    
           ░░░░░░░░░░░▒▒▒▒▒░  ░░░░░░░░░░░░░░░░░░░░   ░░░░░░░░░░░░       
           ░░░░░░░░░░░▒▒▒▒▒   ░░░░░░░░░░░░░░░░░░░░   ░░░░░░             
           ░░░░░░░░░░░░▒▒▒▒   ░░░░░░░░░░░░░░░░░░░░    ░                 
           ░░░░░░░░░░░░░▒▒░  ░░░░░░░░░░░░░░░░░░░░░░                     
           ░░░░░░░░░░░░░▒▒░  ░░░░░░░░░░░░░░░░░░░░░░                 ░   
           ░░░░░░░░░░░░░░▒░  ░░░░░░░░░░░░░░░░░░░░░░                 ░   
           ░░░░░░░░░░░░░░▒░  ░░░░░░░░░░░░░░░░░░░░░░                 ░   
           ░░░░░░░░░░░░░░░▒   ░░░░░░░░░░░░░░░░░░░░                 ░░   
           ░░░░░░░░░░░░░░░░   ░░░░░░░░░░░░░░░░░░░░                 ░░   
           ░░░░░░░░░░░░░░░░░  ░░░░░░░░░░░░░░░░░░░░                ░░░   
           ░░░░░░░░░░░░░░░░░   ░░░░░░░░░░░░░░░░░░                ░░░    
           ░░░░░░░░░░░░░░░░░    ░░░░░░░░░░░░░░░░                 ░░░    
           ░░░░░░░░░░░░░░░░░░   ░░░░░░░░░░░░░░░░   ░            ░░░░    
            ░░░░░░░░░░░░░░░░░░    ░░░░░░░░░░░░                  ░░░░    
            ░░░░░░░░░░░░░░░░░░░    ░░░░░░░░░░    ░             ░░░░     
            ░░░░░░░░░░░░░░░░░░░░      ░░░░      ░░            ░░░░░     
             ░░░░░░░░░░░░░░░░░░░░              ░░            ░░░░░      
             ░░░░░░░░░░░░░░░░░░░░░░          ░░░             ░░░░░      
              ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░            ░░░░░░      
              ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░            ░░░░░░       
               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░           ░░░░░░        
                ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░           ░░░░░░░        
                ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░          ░░░░░░░         
                 ░░░░░░░░░░░░░░░░░░░░░░░░░░░░          ░░░░░░░          
                  ░░░░░░░░░░░░░░░░░░░░░░░░░░          ░░░░░░░           
                   ░░░░░░░░░░░░░░░░░░░░░░░░░        ░░░░░░░░            
                    ░░░░░░░░░░░░░░░░░░░░░░░        ░░░░░░░░             
                     ░░░░░░░░░░░░░░░░░░░░░░       ░░░░░░░░              
                      ░░░░░░░░░░░░░░░░░░░░      ░░░░░░░░░               
                        ░░░░░░░░░░░░░░░░░░     ░░░░░░░░                 
                         ░░░░░░░░░░░░░░░░    ░░░░░░░░░                  
                           ░░░░░░░░░░░░░   ░░░░░░░░░                    
                             ░░░░░░░░░░░ ░░░░░░░░                       
                                ░░░░░░░░░░░░░                           





WM_WINDOW_ROLE(STRING) = "pop-up"
WM_CLASS(STRING) = "web.skype.com__en", "chromium"
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
_NET_WM_PID(CARDINAL) = 6987
WM_LOCALE_NAME(STRING) = "en_US.utf8"
WM_CLIENT_MACHINE(STRING) = "ziga-laptop"
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, _NET_WM_PING

Viber:

WM_STATE(WM_STATE):
                window state: Normal
                icon window: 0x0
_NET_WM_DESKTOP(CARDINAL) = 1
_NET_WM_ICON(CARDINAL) = 
XdndAware(ATOM) = BITMAP
WM_NAME(STRING) = "Viber +38631790976"
_NET_WM_NAME(UTF8_STRING) = "Viber +38631790976"
_MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x3, 0x3e, 0x7e, 0x0, 0x0
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
_XEMBED_INFO(_XEMBED_INFO) = 0x0, 0x1
WM_CLIENT_LEADER(WINDOW): window id # 0x800008
WM_HINTS(WM_HINTS):
                Client accepts input or input focus: True
                Initial state is Normal State.
_NET_WM_PID(CARDINAL) = 28603
WM_CLASS(STRING) = "Viber", "ViberPC"
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING
WM_NORMAL_HINTS(WM_SIZE_HINTS):
                user specified location: -1, 20
                user specified size: 1921 by 1036
                program specified minimum size: 785 by 550
                window gravity: Static

Can anyone help me on how to check if these instances are already running?

Aucun commentaire:

Enregistrer un commentaire