static int prompt_keymap(void) { _cleanup_strv_free_ char **kmaps = NULL; int r; if (arg_keymap) return 0; if (!arg_prompt_keymap) return 0; r = get_keymaps(&kmaps); if (r == -ENOENT) /* no keymaps installed */ return r; if (r < 0) return log_error_errno(r, "Failed to read keymaps: %m"); print_welcome(); printf("\nAvailable keymaps:\n\n"); r = show_menu(kmaps, 3, 22, 60); if (r < 0) return r; putchar('\n'); return prompt_loop("Please enter system keymap name or number", kmaps, keymap_is_valid, &arg_keymap); }
static int list_vconsole_keymaps(int argc, char **argv, void *userdata) { _cleanup_strv_free_ char **l = NULL; int r; r = get_keymaps(&l); if (r < 0) return log_error_errno(r, "Failed to read list of keymaps: %m"); (void) pager_open(arg_no_pager, false); strv_print(l); return 0; }
static bool help_open(struct view *view, enum open_flags flags) { struct keymap *keymap; reset_view(view); add_line_text(view, "Quick reference for tig keybindings:", LINE_DEFAULT); add_line_text(view, "", LINE_DEFAULT); for (keymap = get_keymaps(); keymap; keymap = keymap->next) { struct help_request_iterator iterator = { view, keymap, TRUE }; if (foreach_request(help_open_keymap, &iterator)) help_open_keymap_run_requests(&iterator); } return TRUE; }