[ekg2-commit] r3885 - in trunk: ekg plugins/ncurses plugins/readline: trunk/ekg/configfile.c trunk/ekg/stuff.c trunk/ekg/stuff.h trunk/plugins/ncurses/bindings.c trunk/plugins/ncurses/old.c trunk/plugins/readline/ui-readline.c
SVN commit
svn w toxygen.net
Pon, 10 Mar 2008, 19:44:30 CET
Author: peres
Date: 2008-03-10 19:44:29 +0100 (Mon, 10 Mar 2008)
New Revision: 3885
Modified:
trunk/ekg/configfile.c
trunk/ekg/stuff.c
trunk/ekg/stuff.h
trunk/plugins/ncurses/bindings.c
trunk/plugins/ncurses/old.c
trunk/plugins/readline/ui-readline.c
Log:
Bindings.
Modified: trunk/ekg/configfile.c
===================================================================
--- trunk/ekg/configfile.c 2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/ekg/configfile.c 2008-03-10 18:44:29 UTC (rev 3885)
@@ -381,8 +381,6 @@
*/
static void config_write_main(FILE *f)
{
- list_t l;
-
if (!f)
return;
@@ -414,20 +412,25 @@
}
}
- for (l = bindings; l; l = l->next) {
- struct binding *b = l->data;
+ {
+ struct binding *b;
- if (b->internal)
- continue;
+ for (b = bindings; b; b = b->next) {
+ if (b->internal)
+ continue;
- fprintf(f, "bind %s %s\n", b->key, b->action);
+ fprintf(f, "bind %s %s\n", b->key, b->action);
+ }
}
- for (l = bindings_added; l; l = l->next) {
- binding_added_t *d = l->data;
- fprintf(f, "bind-set %s %s\n", d->binding->key, d->sequence);
- }
+ {
+ binding_added_t *d;
+ for (d = bindings_added; d; d = d->next) {
+ fprintf(f, "bind-set %s %s\n", d->binding->key, d->sequence);
+ }
+ }
+
{
struct timer *t;
Modified: trunk/ekg/stuff.c
===================================================================
--- trunk/ekg/stuff.c 2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/ekg/stuff.c 2008-03-10 18:44:29 UTC (rev 3885)
@@ -85,7 +85,7 @@
child_t *children = NULL;
alias_t *aliases = NULL;
list_t autofinds = NULL;
-list_t bindings = NULL; /**< list_t struct timer <b>all</b> ekg2 timers */
+struct binding *bindings = NULL; /**< list_t struct timer <b>all</b> ekg2 timers */
struct timer *timers = NULL;
list_t conferences = NULL;
list_t newconferences = NULL;
@@ -96,7 +96,7 @@
list_t buffer_debug; /**< debug list_t struct buffer */
list_t buffer_speech; /**< speech list_t struct buffer */
-list_t bindings_added;
+binding_added_t *bindings_added;
int old_stderr;
char *config_subject_prefix;
char *config_subject_reply_prefix;
@@ -395,15 +395,13 @@
*/
void binding_list(int quiet, const char *name, int all)
{
- list_t l;
+ struct binding *b;
int found = 0;
if (!bindings)
printq("bind_seq_list_empty");
- for (l = bindings; l; l = l->next) {
- struct binding *b = l->data;
-
+ for (b = bindings; b; b = b->next) {
if (name) {
if (xstrcasestr(b->key, name)) {
printq("bind_seq_list", b->key, b->action);
@@ -417,15 +415,25 @@
}
if (name && !found) {
- for (l = bindings; l; l = l->next) {
- struct binding *b = l->data;
-
+ for (b = bindings; b; b = b->next) {
if (xstrcasestr(b->action, name))
printq("bind_seq_list", b->key, b->action);
}
}
}
+static LIST_FREE_ITEM(binding_free_item, struct binding *) {
+ xfree(data->key);
+ xfree(data->action);
+ xfree(data->arg);
+ xfree(data->default_action);
+ xfree(data->default_arg);
+}
+
+static LIST_FREE_ITEM(binding_added_free_item, binding_added_t *) {
+ xfree(data->sequence);
+}
+
/**
* binding_free()
*
@@ -433,29 +441,13 @@
*/
void binding_free() {
- list_t l;
-
if (bindings) {
- for (l = bindings; l; l = l->next) {
- struct binding *b = l->data;
-
- xfree(b->key);
- xfree(b->action);
- xfree(b->arg);
- xfree(b->default_action);
- xfree(b->default_arg);
- }
- list_destroy(bindings, 1);
+ LIST_DESTROY2(bindings, binding_free_item);
bindings = NULL;
}
if (bindings_added) {
- for (l = bindings_added; l; l = l->next) {
- binding_added_t *b = l->data;
-
- xfree(b->sequence);
- }
- list_destroy(bindings_added, 1);
+ LIST_DESTROY2(bindings_added, binding_added_free_item);
bindings_added = NULL;
}
}
Modified: trunk/ekg/stuff.h
===================================================================
--- trunk/ekg/stuff.h 2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/ekg/stuff.h 2008-03-10 18:44:29 UTC (rev 3885)
@@ -84,6 +84,8 @@
#define BINDING_FUNCTION(x) void x(const char *arg)
struct binding {
+ struct binding *next;
+
char *key;
char *action; /* akcja */
@@ -96,7 +98,9 @@
char *default_arg; /* domyślny argument */
};
-typedef struct {
+typedef struct binding_added {
+ struct binding_added *next;
+
char *sequence;
struct binding *binding;
} binding_added_t;
@@ -155,13 +159,13 @@
extern child_t *children;
extern alias_t *aliases;
extern list_t autofinds;
-extern list_t bindings;
+extern struct binding *bindings;
extern struct timer *timers;
extern list_t conferences;
extern list_t newconferences;
extern list_t buffer_debug;
extern list_t buffer_speech;
-extern list_t bindings_added;
+extern binding_added_t *bindings_added;
extern time_t last_save;
extern char *config_profile;
Modified: trunk/plugins/ncurses/bindings.c
===================================================================
--- trunk/plugins/ncurses/bindings.c 2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/plugins/ncurses/bindings.c 2008-03-10 18:44:29 UTC (rev 3885)
@@ -796,14 +796,14 @@
if (!xstrcasecmp(key + 4, ("Enter"))) {
b->key = xstrdup(("Alt-Enter"));
if (add)
- ncurses_binding_map_meta[13] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+ ncurses_binding_map_meta[13] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
return 0;
}
if (!xstrcasecmp(key + 4, ("Backspace"))) {
b->key = xstrdup(("Alt-Backspace"));
if (add) {
- ncurses_binding_map_meta[KEY_BACKSPACE] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+ ncurses_binding_map_meta[KEY_BACKSPACE] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
ncurses_binding_map_meta[127] = ncurses_binding_map_meta[KEY_BACKSPACE];
}
return 0;
@@ -817,7 +817,7 @@
b->key = saprintf(("Alt-%c"), ch);
if (add) {
- ncurses_binding_map_meta[ch] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+ ncurses_binding_map_meta[ch] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
if (xisalpha(ch))
ncurses_binding_map_meta[xtolower(ch)] = ncurses_binding_map_meta[ch];
}
@@ -834,7 +834,7 @@
if (!xstrcasecmp(key + 5, (x))) { \
b->key = xstrdup(key); \
if (add) { \
- ncurses_binding_map[y] = list_add(&bindings, xmemdup(b, sizeof(struct binding))); \
+ ncurses_binding_map[y] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding))); \
if (z) \
ncurses_binding_map[z] = ncurses_binding_map[y]; \
} \
@@ -856,7 +856,7 @@
if (add) {
if (xisalpha(ch))
- ncurses_binding_map[ch - 64] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+ ncurses_binding_map[ch - 64] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
else
return -1;
}
@@ -873,7 +873,7 @@
b->key = saprintf(("F%d"), f);
if (add)
- ncurses_binding_map[KEY_F(f)] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+ ncurses_binding_map[KEY_F(f)] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
return 0;
}
@@ -882,7 +882,7 @@
if (!xstrcasecmp(key, (x))) { \
b->key = xstrdup((x)); \
if (add) { \
- ncurses_binding_map[y] = list_add(&bindings, xmemdup(b, sizeof(struct binding))); \
+ ncurses_binding_map[y] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding))); \
if (z) \
ncurses_binding_map[z] = ncurses_binding_map[y]; \
} \
@@ -915,15 +915,13 @@
*/
void ncurses_binding_set(int quiet, const char *key, const char *sequence)
{
- list_t l;
+ struct binding *d;
binding_added_t *b;
struct binding *binding_orginal = NULL;
char *joined = NULL;
int count = 0;
- for (l = bindings; l; l = l->next) {
- struct binding *d = l->data;
-
+ for (d = bindings; d; d = d->next) {
if (!xstrcasecmp(key, d->key)) {
binding_orginal = d;
break;
@@ -950,20 +948,18 @@
} else
joined = xstrdup(sequence);
- for (l = bindings_added; l; l = l->next) {
- binding_added_t *d = l->data;
-
- if (!xstrcasecmp(d->sequence, joined)) {
- d->binding = binding_orginal;
+ for (b = bindings_added; b; b = b->next) {
+ if (!xstrcasecmp(b->sequence, joined)) {
+ b->binding = binding_orginal;
xfree(joined);
goto end;
}
}
- b = xmalloc(sizeof(binding_added_t));
+ b = xmalloc(sizeof(binding_added_t));
b->sequence = joined;
b->binding = binding_orginal;
- list_add(&bindings_added, b);
+ LIST_ADD2(&bindings_added, b);
end:
if (!in_autoexec)
config_changed = 1;
@@ -984,8 +980,7 @@
*/
void ncurses_binding_add(const char *key, const char *action, int internal, int quiet)
{
- struct binding b, *c = NULL;
- list_t l;
+ struct binding b, *c = NULL, *d;
if (!key || !action)
return;
@@ -994,9 +989,7 @@
b.internal = internal;
- for (l = bindings; l; l = l->next) {
- struct binding *d = l->data;
-
+ for (d = bindings; d; d = d->next) {
if (!xstrcasecmp(key, d->key)) {
if (d->internal) {
c = d;
@@ -1049,13 +1042,12 @@
*/
void ncurses_binding_delete(const char *key, int quiet)
{
- list_t l;
+ struct binding *b;
if (!key)
return;
- for (l = bindings; l; l = l->next) {
- struct binding *b = l->data;
+ for (b = bindings; b; b = b->next) {
int i;
if (!b->key || xstrcasecmp(key, b->key))
@@ -1084,7 +1076,7 @@
}
- list_remove(&bindings, b, 1);
+ LIST_REMOVE2(&bindings, b, NULL);
}
config_changed = 1;
Modified: trunk/plugins/ncurses/old.c
===================================================================
--- trunk/plugins/ncurses/old.c 2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/plugins/ncurses/old.c 2008-03-10 18:44:29 UTC (rev 3885)
@@ -2387,7 +2387,7 @@
if (bindings_added && ch != KEY_MOUSE) {
char **chars = NULL, *joined;
int i = 0, count = 0, success = 0;
- list_t l;
+ binding_added_t *d;
int c;
array_add(&chars, xstrdup(itoa(ch)));
@@ -2400,9 +2400,7 @@
joined = array_join(chars, (" "));
- for (l = bindings_added; l; l = l->next) {
- binding_added_t *d = l->data;
-
+ for (d = bindings_added; d; d = d->next) {
if (!xstrcasecmp(d->sequence, joined)) {
struct binding *b = d->binding;
Modified: trunk/plugins/readline/ui-readline.c
===================================================================
--- trunk/plugins/readline/ui-readline.c 2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/plugins/readline/ui-readline.c 2008-03-10 18:44:29 UTC (rev 3885)
@@ -524,14 +524,12 @@
*/
char *bind_find_command(const char *seq)
{
- list_t l;
+ struct binding *s;
if (!seq)
return NULL;
- for (l = bindings; l; l = l->next) {
- struct binding *s = l->data;
-
+ for (s = bindings; s; s = s->next) {
if (s->key && !xstrcasecmp(s->key, seq))
return s->action;
}
@@ -647,20 +645,18 @@
s->action = xstrdup(command);
s->internal = 0;
- list_add(&bindings, s);
+ LIST_ADD2(&bindings, s);
if (!quiet) {
print("bind_seq_add", s->key);
config_changed = 1;
}
} else {
- list_t l;
+ struct binding *s;
- for (l = bindings; l; l = l->next) {
- struct binding *s = l->data;
-
+ for (s = bindings; s; s = s->next) {
if (s->key && !xstrcasecmp(s->key, seq)) {
- list_remove(&bindings, s, 1);
+ LIST_REMOVE2(&bindings, s, NULL);
if (!quiet) {
print("bind_seq_remove", seq);
config_changed = 1;
Więcej informacji o liście dyskusyjnej ekg2-commit