| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -36,3 +36,56 @@ class Pointer(XInput): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def __init__(self, name, id, is_master: bool) -> None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        super().__init__(name, id, is_master) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					def get_short_pointer(id) -> Pointer: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    """Generates Pointer object corresponding to id (short attrs)  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    Args: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        id (int): pointer id | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    Returns: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Pointer: pointer object with name, id and is_master props | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    Rises: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ValueError: if id is not reistered with xinput | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ValueError: if id is not a pointer id | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    """ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    desc = com.get_list_short(id) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    name, props = desc.rsplit('id=', 1) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if "pointer" in props: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        is_master = "master" in props | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return Pointer( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            name.strip(),  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            props.split(maxsplit=1), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            is_master) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    else: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        raise TypeError(f'id[{id}] is not a pointer id') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					def get_pointers(is_short=True): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    """Wraps pointers in `xinput --list` in Pointer class | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    Creation of the pointer is done by getting the list description of | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    each id. if the is_short arg is True, then short list description will be | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    used which will provide the class `name`, `is_master` and `id` values. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    Getting this pointers is done by first calling `xinput --list --id-only` to | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    get ids and then execute `xinput --list {id}` to get the description with | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    less-complicated output compare to iterating over `xinput --list --short` | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    line by line (--short option has some special characters that cause overhead | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    to the system for processing them individually and per-case). | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    """ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    pointers = [] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ids = com.get_ids() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    for id in ids: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if is_short: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            try: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                pointers.append(get_short_pointer(id)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            except TypeError as e: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                # ignore if the id is not pointer | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                pass | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            except e: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                # TODO: logging | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                pass | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        else: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            pass | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return pointers | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
				 | 
				
					
  |