From 9f01a45b1f6b3a0b95efc7375188b5b7e04a2af0 Mon Sep 17 00:00:00 2001 From: matt Date: Mon, 28 Jul 2014 00:06:25 +0100 Subject: [PATCH 1/5] Keybind defaults moved to settings.c; conf keybinds not reading correctly yet --- src/groupchat.c | 4 ++-- src/line_info.c | 48 +++++++++++++++++--------------------------- src/settings.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++-- src/settings.h | 9 +++++++++ src/windows.c | 7 ++++--- 5 files changed, 84 insertions(+), 37 deletions(-) diff --git a/src/groupchat.c b/src/groupchat.c index dbb472f..e2df8ad 100644 --- a/src/groupchat.c +++ b/src/groupchat.c @@ -368,12 +368,12 @@ static void groupchat_onKey(ToxWindow *self, Tox *m, wint_t key, bool ltr) } else { beep(); } - } else if (key == T_KEY_C_RB) { /* Scroll peerlist up and down one position */ + } else if (key == user_settings_->key_peer_list_down) { /* Scroll peerlist up and down one position */ int L = y2 - CHATBOX_HEIGHT - SDBAR_OFST; if (groupchats[self->num].side_pos < groupchats[self->num].num_peers - L) ++groupchats[self->num].side_pos; - } else if (key == T_KEY_C_LB) { + } else if (key == user_settings_->key_peer_list_up) { if (groupchats[self->num].side_pos > 0) --groupchats[self->num].side_pos; } else if (key == '\n') { diff --git a/src/line_info.c b/src/line_info.c index 424edd4..c47b00e 100644 --- a/src/line_info.c +++ b/src/line_info.c @@ -453,36 +453,24 @@ bool line_info_onKey(ToxWindow *self, wint_t key) struct history *hst = self->chatwin->hst; bool match = true; - switch (key) { - /* TODO: Find good key bindings for all this stuff */ - case T_KEY_C_F: - line_info_page_up(self, hst); - break; - - case T_KEY_C_V: - line_info_page_down(self, hst); - break; - - case KEY_PPAGE: - line_info_scroll_up(hst); - break; - - case KEY_NPAGE: - line_info_scroll_down(hst); - break; - - /* case ?: - line_info_goto_root(hst); - break; */ - - case T_KEY_C_H: - line_info_reset_start(self, hst); - break; - - default: - match = false; - break; - } + if (key == user_settings_->key_half_page_up) { + line_info_page_up(self, hst); + } + else if(key == user_settings_->key_half_page_down) { + line_info_page_down(self, hst); + } + else if(key == user_settings_->key_scroll_line_up) { + line_info_scroll_up(hst); + } + else if(key == user_settings_->key_scroll_line_down) { + line_info_scroll_down(hst); + } + else if(key == user_settings_->key_page_bottom) { + line_info_reset_start(self, hst); + } + else { + match = false; + } return match; } diff --git a/src/settings.c b/src/settings.c index 4f7008d..6008814 100644 --- a/src/settings.c +++ b/src/settings.c @@ -23,7 +23,6 @@ #include #include #include - #include "toxic.h" #include "windows.h" #include "configdir.h" @@ -68,7 +67,43 @@ static void ui_defaults(struct user_settings* settings) settings->colour_theme = DFLT_COLS; settings->history_size = 700; } +const struct _keys_strings { + const char* self; + const char* keys; + const char* next_tab; + const char* prev_tab; + const char* scroll_line_up; + const char* scroll_line_down; + const char* half_page_up; + const char* half_page_down; + const char* page_bottom; + const char* peer_list_up; + const char* peer_list_down; +} key_strings = { + "keys", + "next_tab", + "prev_tab", + "scroll_line_up", + "scroll_line_down", + "half_page_up", + "half_page_down", + "page_bottom", + "peer_list_up", + "peer_list_down" +}; +static void key_defaults(struct user_settings* settings) +{ + settings->key_next_tab = 0x10; + settings->key_prev_tab = 0x0F; + settings->key_scroll_line_up = 0523; /* value from libncurses:curses.h */ + settings->key_scroll_line_down = 0522; + settings->key_half_page_up = 0x06; + settings->key_half_page_down = 0x16; + settings->key_page_bottom = 0x08; + settings->key_peer_list_up = 0x1B; + settings->key_peer_list_down = 0x1D; +} const struct _tox_strings { const char* self; const char* download_path; @@ -139,6 +174,7 @@ int settings_load(struct user_settings *s, const char *patharg) /* Load default settings */ ui_defaults(s); tox_defaults(s); + key_defaults(s); #ifdef _AUDIO audio_defaults(s); #endif @@ -155,7 +191,6 @@ int settings_load(struct user_settings *s, const char *patharg) /* make sure path exists or is created on first time running */ FILE *fp = fopen(path, "r"); - if (fp == NULL) { if ((fp = fopen(path, "w")) == NULL) return -1; @@ -167,6 +202,8 @@ int settings_load(struct user_settings *s, const char *patharg) } if (!config_read_file(cfg, path)) { + char* chk = config_error_text(cfg); + int lin = config_error_line(cfg); config_destroy(cfg); return -1; } @@ -188,6 +225,18 @@ int settings_load(struct user_settings *s, const char *patharg) strcpy(s->download_path, str); } } + /* keys */ + if((setting = config_lookup(cfg, key_strings.self)) != NULL) { + config_setting_lookup_int(setting, key_strings.next_tab, &s->key_next_tab); + config_setting_lookup_int(setting, key_strings.prev_tab, &s->key_prev_tab); + config_setting_lookup_int(setting, key_strings.scroll_line_up, &s->key_scroll_line_up); + config_setting_lookup_int(setting, key_strings.scroll_line_down, &s->key_scroll_line_down); + config_setting_lookup_int(setting, key_strings.half_page_up, &s->key_half_page_up); + config_setting_lookup_int(setting, key_strings.half_page_down, &s->key_half_page_down); + config_setting_lookup_int(setting, key_strings.page_bottom, &s->key_page_bottom); + config_setting_lookup_int(setting, key_strings.peer_list_up, &s->key_peer_list_up); + //config_setting_lookup_int(setting, key_strings.peer_list_down, &s->key_peer_list_down); + } #ifdef _AUDIO if ((setting = config_lookup(cfg, audio_strings.self)) != NULL) { diff --git a/src/settings.h b/src/settings.h index 0c585c7..1c7b46d 100644 --- a/src/settings.h +++ b/src/settings.h @@ -33,6 +33,15 @@ struct user_settings { int history_size; /* int between MIN_HISTORY and MAX_HISTORY */ char download_path[MAX_STR_SIZE]; + int key_next_tab; /* character code */ + int key_prev_tab; /* character code */ + int key_scroll_line_up; + int key_scroll_line_down; + int key_half_page_up; + int key_half_page_down; + int key_page_bottom; + int key_peer_list_up; + int key_peer_list_down; #ifdef _AUDIO int audio_in_dev; int audio_out_dev; diff --git a/src/windows.c b/src/windows.c index 37c3e3d..f073df8 100644 --- a/src/windows.c +++ b/src/windows.c @@ -33,15 +33,16 @@ #include "chat.h" #include "line_info.h" +#include "settings.h" extern char *DATA_FILE; extern struct _Winthread Winthread; static ToxWindow windows[MAX_WINDOWS_NUM]; static ToxWindow *active_window; extern ToxWindow *prompt; +extern struct user_settings *user_settings_; static int num_active_windows; - /* CALLBACKS START */ void on_request(Tox *m, const uint8_t *public_key, const uint8_t *data, uint16_t length, void *userdata) { @@ -267,7 +268,7 @@ void set_next_window(int ch) ToxWindow *inf = active_window; while (true) { - if (ch == T_KEY_NEXT) { + if (ch == user_settings_->key_next_tab) { if (++active_window > end) active_window = windows; } else if (--active_window < windows) @@ -452,7 +453,7 @@ void draw_active_window(Tox *m) ltr = isprint(ch); #endif /* HAVE_WIDECHAR */ - if (!ltr && (ch == T_KEY_NEXT || ch == T_KEY_PREV)) { + if (!ltr && (ch == user_settings_->key_next_tab || ch == user_settings_->key_prev_tab)) { set_next_window((int) ch); } else { pthread_mutex_lock(&Winthread.lock); From a7e6ab7758413d20d5ff25d306aae4598ff747fb Mon Sep 17 00:00:00 2001 From: matt Date: Mon, 28 Jul 2014 15:19:50 +0100 Subject: [PATCH 2/5] reads correctly from config file now, need to go through and check each one and then look at usability --- src/settings.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/settings.c b/src/settings.c index 6008814..38d4a8f 100644 --- a/src/settings.c +++ b/src/settings.c @@ -69,7 +69,6 @@ static void ui_defaults(struct user_settings* settings) } const struct _keys_strings { const char* self; - const char* keys; const char* next_tab; const char* prev_tab; const char* scroll_line_up; @@ -235,7 +234,7 @@ int settings_load(struct user_settings *s, const char *patharg) config_setting_lookup_int(setting, key_strings.half_page_down, &s->key_half_page_down); config_setting_lookup_int(setting, key_strings.page_bottom, &s->key_page_bottom); config_setting_lookup_int(setting, key_strings.peer_list_up, &s->key_peer_list_up); - //config_setting_lookup_int(setting, key_strings.peer_list_down, &s->key_peer_list_down); + config_setting_lookup_int(setting, key_strings.peer_list_down, &s->key_peer_list_down); } #ifdef _AUDIO From 18610668b8be4c90c7e5fdbb5c73808a5d20b499 Mon Sep 17 00:00:00 2001 From: matt Date: Mon, 28 Jul 2014 22:44:12 +0100 Subject: [PATCH 3/5] Human readable config parsing complete, few tests left to confirm --- toxic.conf.example | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 toxic.conf.example diff --git a/toxic.conf.example b/toxic.conf.example new file mode 100644 index 0000000..1454f22 --- /dev/null +++ b/toxic.conf.example @@ -0,0 +1,29 @@ + +ui = { + // true to enable timestamps, false to disable + timestamps:true; + + // true to enable terminal alerts on messages, false to disable + alerts:true; + + // true to use native terminal colours, false to use toxic default colour theme + native_colors:false; +time_format=24; +autolog:false; +}; + +//Only Ctrl modified keys and Tab supported right now +//All printable keys register as input anyway +keys = { + next_tab="Ctrl+P"; + //next_tab="Tab"; + prev_tab="Ctrl+O"; + scroll_line_up="PAGEUP"; + scroll_line_down="PAGEDOWN"; + half_page_up="Ctrl+F"; + half_page_down="Ctrl+V"; + page_bottom="Ctrl+H"; + peer_list_up="Ctrl+["; + peer_list_down="Ctrl+]"; +}; + From 8960eb98f497f822781651e4ff6d52e4c514de61 Mon Sep 17 00:00:00 2001 From: matt Date: Mon, 28 Jul 2014 22:47:33 +0100 Subject: [PATCH 4/5] Example conf updated --- build/Makefile | 1 + misc/toxic.conf.example | 53 ++++++++++++----------------------------- src/settings.c | 32 ++++++++++++++++--------- src/settings.h | 2 +- toxic.conf.example | 29 ---------------------- 5 files changed, 38 insertions(+), 79 deletions(-) delete mode 100644 toxic.conf.example diff --git a/build/Makefile b/build/Makefile index 99f0d22..5cdd568 100644 --- a/build/Makefile +++ b/build/Makefile @@ -22,6 +22,7 @@ LIBS = libtoxcore ncursesw libconfig CFLAGS = -std=gnu99 -pthread -Wall -g CFLAGS += -DTOXICVER="\"$(VERSION)\"" -DHAVE_WIDECHAR -D_XOPEN_SOURCE_EXTENDED CFLAGS += -DPACKAGE_DATADIR="\"$(abspath $(DATADIR))\"" +CFLAGS += -fdiagnostics-color CFLAGS += $(USER_CFLAGS) LDFLAGS = $(USER_LDFLAGS) diff --git a/misc/toxic.conf.example b/misc/toxic.conf.example index 889b139..1454f22 100644 --- a/misc/toxic.conf.example +++ b/misc/toxic.conf.example @@ -1,5 +1,3 @@ -// SAMPLE TOXIC CONFIGURATION -// USES LIBCONFIG-ACCEPTED SYNTAX ui = { // true to enable timestamps, false to disable @@ -10,43 +8,22 @@ ui = { // true to use native terminal colours, false to use toxic default colour theme native_colors:false; - - // true to enable autologging, false to disable - autolog:false; - - // 24 or 12 hour time - time_format=24; - - // maximum lines for chat window history - history_size=700; +time_format=24; +autolog:false; }; -audio = { - // preferred audio input device; numbers correspond to /lsdev in - input_device=2; - - // preferred audio output device; numbers correspond to /lsdev out - output_device=0; - - // default VAD treshold; float (recommended values are around 40) - VAD_treshold=40.0; +//Only Ctrl modified keys and Tab supported right now +//All printable keys register as input anyway +keys = { + next_tab="Ctrl+P"; + //next_tab="Tab"; + prev_tab="Ctrl+O"; + scroll_line_up="PAGEUP"; + scroll_line_down="PAGEDOWN"; + half_page_up="Ctrl+F"; + half_page_down="Ctrl+V"; + page_bottom="Ctrl+H"; + peer_list_up="Ctrl+["; + peer_list_down="Ctrl+]"; }; -tox = { - // where to store received files - // download_path="/home/USERNAME/Downloads/"; -}; - -// To disable a sound set the path to "silent" -sounds = { - error="__DATADIR__/sounds/Error.wav"; - self_log_in="__DATADIR__/sounds/LogIn.wav"; - self_log_out="__DATADIR__/sounds/LogOut.wav"; - user_log_in="__DATADIR__/sounds/ContactLogsIn.wav"; - user_log_out="__DATADIR__/sounds/ContactLogsOut.wav"; - call_incoming="__DATADIR__/sounds/IncomingCall.wav"; - call_outgoing="__DATADIR__/sounds/OutgoingCall.wav"; - generic_message="__DATADIR__/sounds/NewMessage.wav"; - transfer_pending="__DATADIR__/sounds/TransferPending.wav"; - transfer_completed="__DATADIR__/sounds/TransferComplete.wav"; -}; diff --git a/src/settings.c b/src/settings.c index 38d4a8f..16004c2 100644 --- a/src/settings.c +++ b/src/settings.c @@ -201,8 +201,6 @@ int settings_load(struct user_settings *s, const char *patharg) } if (!config_read_file(cfg, path)) { - char* chk = config_error_text(cfg); - int lin = config_error_line(cfg); config_destroy(cfg); return -1; } @@ -226,15 +224,16 @@ int settings_load(struct user_settings *s, const char *patharg) } /* keys */ if((setting = config_lookup(cfg, key_strings.self)) != NULL) { - config_setting_lookup_int(setting, key_strings.next_tab, &s->key_next_tab); - config_setting_lookup_int(setting, key_strings.prev_tab, &s->key_prev_tab); - config_setting_lookup_int(setting, key_strings.scroll_line_up, &s->key_scroll_line_up); - config_setting_lookup_int(setting, key_strings.scroll_line_down, &s->key_scroll_line_down); - config_setting_lookup_int(setting, key_strings.half_page_up, &s->key_half_page_up); - config_setting_lookup_int(setting, key_strings.half_page_down, &s->key_half_page_down); - config_setting_lookup_int(setting, key_strings.page_bottom, &s->key_page_bottom); - config_setting_lookup_int(setting, key_strings.peer_list_up, &s->key_peer_list_up); - config_setting_lookup_int(setting, key_strings.peer_list_down, &s->key_peer_list_down); + const char* tmp = NULL; + if(config_setting_lookup_string(setting, key_strings.next_tab, &tmp)) s->key_next_tab = key_parse(&tmp); + if(config_setting_lookup_string(setting, key_strings.prev_tab, &tmp)) s->key_prev_tab = key_parse(&tmp); + if(config_setting_lookup_string(setting, key_strings.scroll_line_up, &tmp)) s->key_scroll_line_up = key_parse(&tmp); + if(config_setting_lookup_string(setting, key_strings.scroll_line_down, &tmp)) s->key_scroll_line_down= key_parse(&tmp); + if(config_setting_lookup_string(setting, key_strings.half_page_up, &tmp)) s->key_half_page_up = key_parse(&tmp); + if(config_setting_lookup_string(setting, key_strings.half_page_down, &tmp)) s->key_half_page_down = key_parse(&tmp); + if(config_setting_lookup_string(setting, key_strings.page_bottom, &tmp)) s->key_page_bottom = key_parse(&tmp); + if(config_setting_lookup_string(setting, key_strings.peer_list_up, &tmp)) s->key_peer_list_up = key_parse(&tmp); + if(config_setting_lookup_string(setting, key_strings.peer_list_down, &tmp)) s->key_peer_list_down = key_parse(&tmp); } #ifdef _AUDIO @@ -328,3 +327,14 @@ int settings_load(struct user_settings *s, const char *patharg) config_destroy(cfg); return 0; } +int key_parse(const char** bind){ + if(strlen(*bind) > 5){ + if(strncmp(*bind,"Ctrl+", 5)==0) return bind[0][5]-'A'+1; + } + if(strncmp(*bind,"Tab",3)==0) return 9; + if(strncmp(*bind,"PAGE",4==0)) { + if(strlen(*bind) == 6) return 0523; + return 0522; + } + return -1; +} diff --git a/src/settings.h b/src/settings.h index 1c7b46d..79d8097 100644 --- a/src/settings.h +++ b/src/settings.h @@ -69,5 +69,5 @@ enum { } settings_values; int settings_load(struct user_settings *s, const char *patharg); - +int key_parse(const char** bind); #endif /* #define _settings_h */ diff --git a/toxic.conf.example b/toxic.conf.example deleted file mode 100644 index 1454f22..0000000 --- a/toxic.conf.example +++ /dev/null @@ -1,29 +0,0 @@ - -ui = { - // true to enable timestamps, false to disable - timestamps:true; - - // true to enable terminal alerts on messages, false to disable - alerts:true; - - // true to use native terminal colours, false to use toxic default colour theme - native_colors:false; -time_format=24; -autolog:false; -}; - -//Only Ctrl modified keys and Tab supported right now -//All printable keys register as input anyway -keys = { - next_tab="Ctrl+P"; - //next_tab="Tab"; - prev_tab="Ctrl+O"; - scroll_line_up="PAGEUP"; - scroll_line_down="PAGEDOWN"; - half_page_up="Ctrl+F"; - half_page_down="Ctrl+V"; - page_bottom="Ctrl+H"; - peer_list_up="Ctrl+["; - peer_list_down="Ctrl+]"; -}; - From e891b1281bb77827422e15534fa0a1cd4657cfaf Mon Sep 17 00:00:00 2001 From: matt Date: Tue, 29 Jul 2014 00:53:44 +0100 Subject: [PATCH 5/5] Configurable keybinds implemented and example conf updated --- src/settings.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings.c b/src/settings.c index 16004c2..65dbb3f 100644 --- a/src/settings.c +++ b/src/settings.c @@ -332,7 +332,7 @@ int key_parse(const char** bind){ if(strncmp(*bind,"Ctrl+", 5)==0) return bind[0][5]-'A'+1; } if(strncmp(*bind,"Tab",3)==0) return 9; - if(strncmp(*bind,"PAGE",4==0)) { + if(strncmp(*bind,"PAGE",4)==0) { if(strlen(*bind) == 6) return 0523; return 0522; }