Annotation of src/usr.bin/tmux/cmd-unbind-key.c, Revision 1.31
1.31 ! nicm 1: /* $OpenBSD: cmd-unbind-key.c,v 1.30 2017/01/24 21:50:22 nicm Exp $ */
1.1 nicm 2:
3: /*
1.25 nicm 4: * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
1.1 nicm 5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
15: * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
16: * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17: */
18:
19: #include <sys/types.h>
20:
1.14 nicm 21: #include <stdlib.h>
22:
1.1 nicm 23: #include "tmux.h"
24:
25: /*
26: * Unbind key from command.
27: */
28:
1.29 nicm 29: static enum cmd_retval cmd_unbind_key_exec(struct cmd *, struct cmdq_item *);
30:
1.1 nicm 31: const struct cmd_entry cmd_unbind_key_entry = {
1.24 nicm 32: .name = "unbind-key",
33: .alias = "unbind",
34:
1.30 nicm 35: .args = { "anT:", 0, 1 },
36: .usage = "[-an] [-T key-table] key",
1.24 nicm 37:
1.28 nicm 38: .flags = CMD_AFTERHOOK,
1.24 nicm 39: .exec = cmd_unbind_key_exec
1.1 nicm 40: };
41:
1.26 nicm 42: static enum cmd_retval
1.29 nicm 43: cmd_unbind_key_exec(struct cmd *self, struct cmdq_item *item)
1.1 nicm 44: {
1.31 ! nicm 45: struct args *args = cmd_get_args(self);
1.22 nicm 46: key_code key;
1.21 nicm 47: const char *tablename;
1.1 nicm 48:
1.13 nicm 49: if (!args_has(args, 'a')) {
1.17 nicm 50: if (args->argc != 1) {
1.29 nicm 51: cmdq_error(item, "missing key");
1.17 nicm 52: return (CMD_RETURN_ERROR);
53: }
1.13 nicm 54: key = key_string_lookup_string(args->argv[0]);
1.23 nicm 55: if (key == KEYC_NONE || key == KEYC_UNKNOWN) {
1.29 nicm 56: cmdq_error(item, "unknown key: %s", args->argv[0]);
1.15 nicm 57: return (CMD_RETURN_ERROR);
1.13 nicm 58: }
1.17 nicm 59: } else {
60: if (args->argc != 0) {
1.29 nicm 61: cmdq_error(item, "key given with -a");
1.17 nicm 62: return (CMD_RETURN_ERROR);
63: }
1.23 nicm 64: key = KEYC_UNKNOWN;
1.17 nicm 65: }
1.13 nicm 66:
1.23 nicm 67: if (key == KEYC_UNKNOWN) {
1.21 nicm 68: tablename = args_get(args, 'T');
69: if (tablename == NULL) {
70: key_bindings_remove_table("root");
71: key_bindings_remove_table("prefix");
72: return (CMD_RETURN_NORMAL);
1.8 nicm 73: }
1.21 nicm 74: if (key_bindings_get_table(tablename, 0) == NULL) {
1.29 nicm 75: cmdq_error(item, "table %s doesn't exist", tablename);
1.21 nicm 76: return (CMD_RETURN_ERROR);
77: }
78: key_bindings_remove_table(tablename);
1.15 nicm 79: return (CMD_RETURN_NORMAL);
1.9 nicm 80: }
1.1 nicm 81:
1.21 nicm 82: if (args_has(args, 'T')) {
83: tablename = args_get(args, 'T');
84: if (key_bindings_get_table(tablename, 0) == NULL) {
1.29 nicm 85: cmdq_error(item, "table %s doesn't exist", tablename);
1.21 nicm 86: return (CMD_RETURN_ERROR);
87: }
88: } else if (args_has(args, 'n'))
89: tablename = "root";
90: else
91: tablename = "prefix";
92: key_bindings_remove(tablename, key);
1.15 nicm 93: return (CMD_RETURN_NORMAL);
1.1 nicm 94: }