U �Ww � @ sr d dl Z d dlZddlmZ ddlmZ ddlmZmZ dZ e� d�Zdd � Zd d� Z dd � Zdd� Zdd� ZdS )� N� )�echo)�split_arg_string)�MultiCommand�Optionz� %(complete_func)s() { COMPREPLY=( $( env COMP_WORDS="${COMP_WORDS[*]}" \ COMP_CWORD=$COMP_CWORD \ %(autocomplete_var)s=complete $1 ) ) return 0 } complete -F %(complete_func)s -o default %(script_names)s z [^a-zA-Z0-9_]c C s0 t �d| �dd��}td| | |d� �� d S )N� �-�_z_%s_completion)Z complete_funcZscript_namesZautocomplete_var�;)�_invalid_ident_char_re�sub�replace�COMPLETION_SCRIPT�strip)� prog_name�complete_varZcf_name� r �/_bashcomplete.py�get_completion_script s � �r c C sv | j ||dd�}|j|j rrt|jt�rr|j|j }|j�||d �}|d krRd S |j |d |dd � |dd�}q|S )NT)�resilient_parsingr r )�parentr )Zmake_context�argsZprotected_args� isinstance�commandr Zget_command)�clir r �ctx�a�cmdr r r �resolve_ctx s r c c s� t | ||�}|d krd S g }|rd|d d� �� sd|jjD ](}t|t�sHq8|�|j� |�|j� q8nt|jt �r�|�|j� |�� |D ]}|�|�r�|V q�d S )Nr )r �isalnumr Zparamsr r �extendZoptsZsecondary_optsr Z list_commands� startswith)r r r � incompleter �choicesZparam�itemr r r �get_choices* s r% c C sn t tjd �}ttjd �}|d|� }z|| }W n tk rL d}Y nX t| |||�D ]}t|� q\dS )NZ COMP_WORDSZ COMP_CWORDr r T)r �os�environ�int� IndexErrorr% r )r r ZcwordsZcwordr r"