index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
author | advaithm <advaith.madhukar@gmail.com> | 2021-04-22 19:11:30 +0530 |
---|---|---|
committer | advaithm <advaith.madhukar@gmail.com> | 2021-04-22 19:11:30 +0530 |
commit | fc53d145c89d1740127f0ac93b27b92ae41e9c54 (patch) | |
tree | 79e877f4a3ce7a004c4aff75beaa84e1af5eeb86 /archinstall | |
parent | 49e9c65a8e77a07a57103c00dd48844cdf02a042 (diff) | |
parent | 935b878c962699cb4dc2f4ad209022de2046c7d9 (diff) |
-rw-r--r-- | archinstall/lib/locale_helpers.py | 6 | ||||
-rw-r--r-- | archinstall/lib/user_interaction.py | 23 |
diff --git a/archinstall/lib/locale_helpers.py b/archinstall/lib/locale_helpers.py index 736bfc47..3c373bc6 100644 --- a/archinstall/lib/locale_helpers.py +++ b/archinstall/lib/locale_helpers.py @@ -16,6 +16,12 @@ def list_keyboard_languages(): if os.path.splitext(file)[1] == '.gz': yield file.strip('.gz').strip('.map') +def verify_keyboard_layout(layout): + for language in list_keyboard_languages(): + if layout.lower() == language.lower(): + return True + return False + def search_keyboard_layout(filter): for language in list_keyboard_languages(): if filter.lower() in language.lower(): diff --git a/archinstall/lib/user_interaction.py b/archinstall/lib/user_interaction.py index befcb6d1..7e0a62ba 100644 --- a/archinstall/lib/user_interaction.py +++ b/archinstall/lib/user_interaction.py @@ -2,7 +2,7 @@ import getpass, pathlib, os, shutil, re import sys, time, signal, ipaddress from .exceptions import * from .profiles import Profile -from .locale_helpers import search_keyboard_layout +from .locale_helpers import list_keyboard_languages, verify_keyboard_layout, search_keyboard_layout from .output import log, LOG_LEVELS from .storage import storage from .networking import list_interfaces @@ -372,10 +372,13 @@ def select_language(options, show_only_country_codes=True): """ Asks the user to select a language from the `options` dictionary parameter. Usually this is combined with :ref:`archinstall.list_keyboard_languages`. - :param options: A `dict` where keys are the language name, value should be a dict containing language information. - :type options: dict + + :param options: A `generator` or `list` where keys are the language name, value should be a dict containing language information. + :type options: generator or list + :param show_only_country_codes: Filters out languages that are not len(lang) == 2. This to limit the number of results from stuff like dvorak and x-latin1 alternatives. :type show_only_country_codes: bool + :return: The language/dictionary key of the selected language :rtype: str """ @@ -399,11 +402,17 @@ def select_language(options, show_only_country_codes=True): return DEFAULT_KEYBOARD_LANGUAGE elif selected_language.lower() in ('?', 'help'): while True: - filter_string = input('Search for layout containing (example: "sv-"): ') + filter_string = input("Search for layout containing (example: \"sv-\") or enter 'exit' to exit from search: ") + + if filter_string.lower() == 'exit': + return select_language(list_keyboard_languages()) + new_options = list(search_keyboard_layout(filter_string)) + if len(new_options) <= 0: - log(f"Search string '{filter_string}' yielded no results, please try another search or Ctrl+D to abort.", fg='yellow') + log(f"Search string '{filter_string}' yielded no results, please try another search.", fg='yellow') continue + return select_language(new_options, show_only_country_codes=False) elif selected_language.isnumeric(): selected_language = int(selected_language) @@ -411,11 +420,13 @@ def select_language(options, show_only_country_codes=True): log(' * Selected option is out of range * ', fg='red') continue return languages[selected_language] - elif search_keyboard_layout(selected_language): + elif verify_keyboard_layout(selected_language): return selected_language else: log(" * Given language wasn't found * ", fg='red') + raise RequirementError("Selecting languages require a least one language to be given as an option.") + def select_mirror_regions(mirrors, show_top_mirrors=True): """ Asks the user to select a mirror or region from the `mirrors` dictionary parameter. |