Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 104 lines (87 sloc) 2.695 kb
0f2e336 Romain Francoise Import upstream snapshot from SVN r2670
orebokech authored
1 /* $Id: cmd-unbind-key.c 2670 2012-01-21 19:38:26Z tcunha $ */
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
2
3 /*
4 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
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
21 #include "tmux.h"
22
23 /*
24 * Unbind key from command.
25 */
26
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
27 int cmd_unbind_key_check(struct args *);
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
28 int cmd_unbind_key_exec(struct cmd *, struct cmd_ctx *);
29
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
30 int cmd_unbind_key_table(struct cmd *, struct cmd_ctx *, int);
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
31
32 const struct cmd_entry cmd_unbind_key_entry = {
33 "unbind-key", "unbind",
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
34 "acnt:", 0, 1,
77c63de Romain Francoise Import upstream version 1.4
orebokech authored
35 "[-acn] [-t key-table] key",
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
36 0,
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
37 NULL,
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
38 cmd_unbind_key_check,
39 cmd_unbind_key_exec
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
40 };
41
42 int
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
43 cmd_unbind_key_check(struct args *args)
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
44 {
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
45 if (args_has(args, 'a') && (args->argc != 0 || args_has(args, 't')))
46 return (-1);
47 if (!args_has(args, 'a') && args->argc != 1)
48 return (-1);
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
49 return (0);
50 }
51
52 int
53 cmd_unbind_key_exec(struct cmd *self, unused struct cmd_ctx *ctx)
54 {
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
55 struct args *args = self->args;
56 struct key_binding *bd;
57 int key;
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
58
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
59 if (args_has(args, 'a')) {
0f2e336 Romain Francoise Import upstream snapshot from SVN r2670
orebokech authored
60 while (!RB_EMPTY(&key_bindings)) {
61 bd = RB_ROOT(&key_bindings);
b016948 Romain Francoise Import upstream snapshot from SVN r2608
orebokech authored
62 key_bindings_remove(bd->key);
77c63de Romain Francoise Import upstream version 1.4
orebokech authored
63 }
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
64 return (0);
65 }
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
66
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
67 key = key_string_lookup_string(args->argv[0]);
68 if (key == KEYC_NONE) {
69 ctx->error(ctx, "unknown key: %s", args->argv[0]);
70 return (-1);
77c63de Romain Francoise Import upstream version 1.4
orebokech authored
71 }
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
72
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
73 if (args_has(args, 't'))
74 return (cmd_unbind_key_table(self, ctx, key));
75
76 if (!args_has(args, 'n'))
77 key |= KEYC_PREFIX;
78 key_bindings_remove(key);
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
79 return (0);
80 }
81
82 int
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
83 cmd_unbind_key_table(struct cmd *self, struct cmd_ctx *ctx, int key)
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
84 {
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
85 struct args *args = self->args;
86 const char *tablename;
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
87 const struct mode_key_table *mtab;
88 struct mode_key_binding *mbind, mtmp;
89
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
90 tablename = args_get(args, 't');
91 if ((mtab = mode_key_findtable(tablename)) == NULL) {
92 ctx->error(ctx, "unknown key table: %s", tablename);
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
93 return (-1);
94 }
95
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
96 mtmp.key = key;
97 mtmp.mode = !!args_has(args, 'c');
0f2e336 Romain Francoise Import upstream snapshot from SVN r2670
orebokech authored
98 if ((mbind = RB_FIND(mode_key_tree, mtab->tree, &mtmp)) != NULL) {
99 RB_REMOVE(mode_key_tree, mtab->tree, mbind);
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
100 xfree(mbind);
101 }
102 return (0);
103 }
Something went wrong with that request. Please try again.