Mini Shell
3
C��e� � @ s� d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl m
Z
ddlmZ ddl
mZ ee�Zejd �ZG d
d� de�ZG dd
� d
e�Zdd� Zddd�Zdd� Zddd�Zdd� Zdd� ZdS )zW
This module provides functions for dealing with keyboard layouts/keymaps in Anaconda.
� N)�conf)�localization)�DEFAULT_KEYBOARD)�
sync_run_task)�LOCALIZATION)�get_module_loggerz2^\s*([/\w]+)\s*(?:(?:\(\s*([-\w]+)\s*\))|(?:$))\s*c @ s e Zd ZdZdS )�KeyboardConfigErrorz;Exception class for keyboard configuration related problemsN)�__name__�
__module__�__qualname__�__doc__� r
r
� /usr/lib64/python3.6/keyboard.pyr + s r c @ s e Zd ZdZdS )�InvalidLayoutVariantSpeczb
Exception class for errors related to parsing layout and variant specification strings.
N)r r
r r r
r
r
r r 1 s r c C s6 t j| �}|sd| }t|��|j� \}}||p2dfS )a�
Parse layout and variant from the string that may look like 'layout' or
'layout (variant)'.
:param layout_variant_str: keyboard layout and variant string specification
:type layout_variant_str: str
:return: the (layout, variant) pair, where variant can be ""
:rtype: tuple
:raise InvalidLayoutVariantSpec: if the given string isn't a valid layout
and variant specification string
z='%s' is not a valid keyboard layout and variant specification� )�LAYOUT_VARIANT_RE�matchr �groups)Zlayout_variant_strr �msg�layout�variantr
r
r �parse_layout_variant: s
r r c C s |rd| |f S | S dS )z�
Join layout and variant to form the commonly used 'layout (variant)'
or 'layout' (if variant is missing) format.
:type layout: string
:type variant: string
:return: 'layout (variant)' or 'layout' string
:rtype: string
z%s (%s)Nr
)r r r
r
r �join_layout_variantS s r c C s t | �\}}t||�S )at
Normalize keyboard layout and variant specification given as a single
string. E.g. for a 'layout(variant) string missing the space between the
left parenthesis return 'layout (variant)' which is a proper layout and
variant specification we use.
:param layout_str: a string specifying keyboard layout and its variant
:type layout_str: string
)r r )Z
layout_strr r r
r
r �normalize_layout_variante s r c C s | j � }tj|�}t|� dS )a6
Function that populates virtual console keymap and X layouts if they
are missing. By invoking systemd-localed methods this function READS AND
WRITES CONFIGURATION FILES (but tries to keep their content unchanged).
:param localization_proxy: DBus proxy of the localization module or None
N)Z,PopulateMissingKeyboardConfigurationWithTaskr � get_proxyr )�localization_proxy� task_path�
task_proxyr
r
r �populate_missing_itemsu s
r c C s | j � }tj|�}t|� dS )z�
Try to setup VConsole keymap and X11 layouts as specified in kickstart.
:param localization_proxy: DBus proxy of the localization module or None
N)ZApplyKeyboardWithTaskr r r )r r r r
r
r �activate_keyboard� s
r c C s� | j }g }x |D ]}|j|�r|j|� qW | j|� |r>dS | j}tj|�}|rzt|d �g}tj |d �s�|jt
� ntjd|� t
g}| j|� t
jjr�|j|� t|�dkr�| j r�| jdg� t
jjr�|jdg� |j� dS )a�
Set default keyboard settings (layouts, layout switching).
:param localization_proxy: DBus proxy of the localization module or None
:type ksdata: object instance
:param xkl_wrapper: XklWrapper instance
:type xkl_wrapper: object instance
:raise InvalidLocaleSpec: if an invalid locale is given (see
localization.is_valid_langcode)
Nr z+Failed to get layout for chosen locale '%s'� zgrp:alt_shift_toggle)ZXLayoutsZis_valid_layout�appendZSetXLayoutsZLanguager Zget_locale_keyboardsr � langtableZsupports_asciir �log�errorr �systemZcan_configure_keyboardZreplace_layouts�lenZLayoutSwitchOptionsZSetLayoutSwitchOptionsZset_switching_optionsZactivate_default_layout)r Zxkl_wrapperZ x_layoutsZ
valid_layoutsr ZlocaleZlayoutsZnew_layoutsr
r
r �set_x_keyboard_defaults� s0
r'