Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 150 lines (123 sloc) 3.646 kb
0f2e336 Romain Francoise Import upstream snapshot from SVN r2670
orebokech authored
1 /* $Id: cmd-list-keys.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 <string.h>
22
23 #include "tmux.h"
24
25 /*
26 * List key bindings.
27 */
28
29 int cmd_list_keys_exec(struct cmd *, struct cmd_ctx *);
30
31 int cmd_list_keys_table(struct cmd *, struct cmd_ctx *);
32
33 const struct cmd_entry cmd_list_keys_entry = {
34 "list-keys", "lsk",
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
35 "t:", 0, 0,
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
36 "[-t key-table]",
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
37 0,
38 NULL,
39 NULL,
40 cmd_list_keys_exec
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
41 };
42
43 int
44 cmd_list_keys_exec(struct cmd *self, struct cmd_ctx *ctx)
45 {
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
46 struct args *args = self->args;
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
47 struct key_binding *bd;
48 const char *key;
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
49 char tmp[BUFSIZ], flags[8];
dda8e8e Karl Ferdinand Ebert Imported Upstream version 1.2
kfebert authored
50 size_t used;
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
51 int width, keywidth;
52
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
53 if (args_has(args, 't'))
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
54 return (cmd_list_keys_table(self, ctx));
55
56 width = 0;
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
57
0f2e336 Romain Francoise Import upstream snapshot from SVN r2670
orebokech authored
58 RB_FOREACH(bd, key_bindings, &key_bindings) {
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
59 key = key_string_lookup_key(bd->key & ~KEYC_PREFIX);
60 if (key == NULL)
61 continue;
62
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
63 keywidth = strlen(key);
64 if (!(bd->key & KEYC_PREFIX)) {
65 if (bd->can_repeat)
66 keywidth += 4;
67 else
68 keywidth += 3;
69 } else if (bd->can_repeat)
70 keywidth += 3;
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
71 if (keywidth > width)
72 width = keywidth;
73 }
74
0f2e336 Romain Francoise Import upstream snapshot from SVN r2670
orebokech authored
75 RB_FOREACH(bd, key_bindings, &key_bindings) {
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
76 key = key_string_lookup_key(bd->key & ~KEYC_PREFIX);
77 if (key == NULL)
78 continue;
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
79
0f2e336 Romain Francoise Import upstream snapshot from SVN r2670
orebokech authored
80 *flags = '\0';
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
81 if (!(bd->key & KEYC_PREFIX)) {
82 if (bd->can_repeat)
83 xsnprintf(flags, sizeof flags, "-rn ");
84 else
85 xsnprintf(flags, sizeof flags, "-n ");
86 } else if (bd->can_repeat)
87 xsnprintf(flags, sizeof flags, "-r ");
88
89 used = xsnprintf(tmp, sizeof tmp, "%s%*s ",
90 flags, (int) (width - strlen(flags)), key);
dda8e8e Karl Ferdinand Ebert Imported Upstream version 1.2
kfebert authored
91 if (used >= sizeof tmp)
92 continue;
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
93
dda8e8e Karl Ferdinand Ebert Imported Upstream version 1.2
kfebert authored
94 cmd_list_print(bd->cmdlist, tmp + used, (sizeof tmp) - used);
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
95 ctx->print(ctx, "bind-key %s", tmp);
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
96 }
97
98 return (0);
99 }
100
101 int
102 cmd_list_keys_table(struct cmd *self, struct cmd_ctx *ctx)
103 {
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
104 struct args *args = self->args;
105 const char *tablename;
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
106 const struct mode_key_table *mtab;
107 struct mode_key_binding *mbind;
108 const char *key, *cmdstr, *mode;
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
109 int width, keywidth, any_mode;
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
110
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
111 tablename = args_get(args, 't');
112 if ((mtab = mode_key_findtable(tablename)) == NULL) {
113 ctx->error(ctx, "unknown key table: %s", tablename);
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
114 return (-1);
115 }
116
117 width = 0;
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
118 any_mode = 0;
0f2e336 Romain Francoise Import upstream snapshot from SVN r2670
orebokech authored
119 RB_FOREACH(mbind, mode_key_tree, mtab->tree) {
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
120 key = key_string_lookup_key(mbind->key);
121 if (key == NULL)
122 continue;
123
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
124 if (mbind->mode != 0)
125 any_mode = 1;
126
127 keywidth = strlen(key);
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
128 if (keywidth > width)
129 width = keywidth;
130 }
131
0f2e336 Romain Francoise Import upstream snapshot from SVN r2670
orebokech authored
132 RB_FOREACH(mbind, mode_key_tree, mtab->tree) {
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
133 key = key_string_lookup_key(mbind->key);
134 if (key == NULL)
135 continue;
136
137 mode = "";
138 if (mbind->mode != 0)
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
139 mode = "c";
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
140 cmdstr = mode_key_tostring(mtab->cmdstr, mbind->cmd);
7216c39 Karl Ferdinand Ebert Imported Upstream version 1.5
kfebert authored
141 if (cmdstr != NULL) {
142 ctx->print(ctx, "bind-key -%st %s%s %*s %s",
143 mode, any_mode && *mode == '\0' ? " " : "",
144 mtab->name, (int) width, key, cmdstr);
145 }
8fade26 Imported Upstream version 1.1
Karl Ferdinand Ebert authored
146 }
147
148 return (0);
149 }
Something went wrong with that request. Please try again.