/* Registers cmds[0 .. len-1] keys specified tree. Returns non-zero on error, * otherwise zero is returned. */ static int add_list_of_keys(key_chunk_t *root, keys_add_info_t cmds[], size_t len) { int result = 0; size_t i; for(i = 0U; i < len; ++i) { key_chunk_t *const curr = add_keys_inner(root, cmds[i].keys); if(curr == NULL) { result = -1; continue; } curr->conf = cmds[i].info; if(curr->conf.nim) { curr->type = BUILTIN_NIM_KEYS; } else { curr->type = (curr->conf.followed == FOLLOWED_BY_NONE) ? BUILTIN_KEYS : BUILTIN_WAIT_POINT; } } return result; }
int add_user_keys(const wchar_t *keys, const wchar_t *cmd, int mode, int no_r) { key_chunk_t *curr; curr = add_keys_inner(&user_cmds_root[mode], keys); if(curr->conf.type == USER_CMD) { free((void*)curr->conf.data.cmd); } curr->conf.type = USER_CMD; curr->conf.data.cmd = vifm_wcsdup(cmd); curr->no_remap = no_r; return 0; }
int vle_keys_user_add(const wchar_t lhs[], const wchar_t rhs[], int mode, int flags) { key_chunk_t *curr = add_keys_inner(&user_cmds_root[mode], lhs); if(curr == NULL) { return -1; } if(curr->type == USER_CMD) { free(curr->conf.data.cmd); } curr->type = USER_CMD; curr->conf.data.cmd = vifm_wcsdup(rhs); curr->no_remap = ((flags & KEYS_FLAG_NOREMAP) != 0); curr->silent = ((flags & KEYS_FLAG_SILENT) != 0); return 0; }
TSTATIC key_conf_t * add_selector(const wchar_t keys[], int mode) { key_chunk_t *curr = add_keys_inner(&selectors_root[mode], keys); return &curr->conf; }
TSTATIC key_conf_t * add_cmd(const wchar_t keys[], int mode) { key_chunk_t *curr = add_keys_inner(&builtin_cmds_root[mode], keys); return &curr->conf; }