about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config/color.c2
-rw-r--r--src/plugins/c_api.c2
-rw-r--r--src/plugins/profapi.c125
-rw-r--r--src/plugins/profapi.h142
-rw-r--r--src/ui/inputwin.c13
5 files changed, 145 insertions, 139 deletions
diff --git a/src/config/color.c b/src/config/color.c
index 7676253f..9c1998f5 100644
--- a/src/config/color.c
+++ b/src/config/color.c
@@ -59,7 +59,7 @@ static struct color_pair_cache
     struct
     {
         int16_t fg, bg;
-    } * pairs;
+    }* pairs;
     int size;
     int capacity;
 } cache = { 0 };
diff --git a/src/plugins/c_api.c b/src/plugins/c_api.c
index cda40c4d..8daf633d 100644
--- a/src/plugins/c_api.c
+++ b/src/plugins/c_api.c
@@ -455,7 +455,7 @@ void
 c_command_callback(PluginCommand* command, gchar** args)
 {
     CommandWrapper* wrapper = command->callback;
-    void (*f)(gchar * *args) = wrapper->func;
+    void (*f)(gchar** args) = wrapper->func;
     f(args);
 }
 
diff --git a/src/plugins/profapi.c b/src/plugins/profapi.c
index 9011f1a2..fe3393ab 100644
--- a/src/plugins/profapi.c
+++ b/src/plugins/profapi.c
@@ -41,80 +41,83 @@
 #include "plugins/callbacks.h"
 
 void (*prof_cons_alert)(void) = NULL;
-int (*prof_cons_show)(const char * const message) = NULL;
-int (*prof_cons_show_themed)(const char *const group, const char *const item, const char *const def, const char *const message) = NULL;
-int (*prof_cons_bad_cmd_usage)(const char *const cmd) = NULL;
+int (*prof_cons_show)(const char* const message) = NULL;
+int (*prof_cons_show_themed)(const char* const group, const char* const item, const char* const def, const char* const message) = NULL;
+int (*prof_cons_bad_cmd_usage)(const char* const cmd) = NULL;
 
-void (*_prof_register_command)(const char *filename, const char *command_name, int min_args, int max_args,
-    char **synopsis, const char *description, char *arguments[][2], char **examples,
-    CMD_CB callback) = NULL;
+void (*_prof_register_command)(const char* filename, const char* command_name, int min_args, int max_args,
+                               char** synopsis, const char* description, char* arguments[][2], char** examples,
+                               CMD_CB callback)
+    = NULL;
 
-void (*_prof_register_timed)(const char *filename, TIMED_CB callback, int interval_seconds) = NULL;
+void (*_prof_register_timed)(const char* filename, TIMED_CB callback, int interval_seconds) = NULL;
 
-void (*_prof_completer_add)(const char *filename, const char *key, char **items) = NULL;
-void (*_prof_completer_remove)(const char *filename, const char *key, char **items) = NULL;
-void (*_prof_completer_clear)(const char *filename, const char *key) = NULL;
-void (*_prof_filepath_completer_add)(const char *filename, const char *prefix) = NULL;
+void (*_prof_completer_add)(const char* filename, const char* key, char** items) = NULL;
+void (*_prof_completer_remove)(const char* filename, const char* key, char** items) = NULL;
+void (*_prof_completer_clear)(const char* filename, const char* key) = NULL;
+void (*_prof_filepath_completer_add)(const char* filename, const char* prefix) = NULL;
 
-void (*prof_notify)(const char *message, int timeout_ms, const char *category) = NULL;
+void (*prof_notify)(const char* message, int timeout_ms, const char* category) = NULL;
 
-void (*prof_send_line)(char *line) = NULL;
+void (*prof_send_line)(char* line) = NULL;
 
 char* (*prof_get_current_recipient)(void) = NULL;
 char* (*prof_get_current_muc)(void) = NULL;
 int (*prof_current_win_is_console)(void) = NULL;
 char* (*prof_get_current_nick)(void) = NULL;
-char* (*prof_get_name_from_roster)(const char *barejid) = NULL;
-char* (*prof_get_barejid_from_roster)(const char *name) = NULL;
+char* (*prof_get_name_from_roster)(const char* barejid) = NULL;
+char* (*prof_get_barejid_from_roster)(const char* name) = NULL;
 char** (*prof_get_current_occupants)(void) = NULL;
 
-char* (*prof_get_room_nick)(const char *barejid) = NULL;
+char* (*prof_get_room_nick)(const char* barejid) = NULL;
 
-void (*prof_log_debug)(const char *message) = NULL;
-void (*prof_log_info)(const char *message) = NULL;
-void (*prof_log_warning)(const char *message) = NULL;
-void (*prof_log_error)(const char *message) = NULL;
+void (*prof_log_debug)(const char* message) = NULL;
+void (*prof_log_info)(const char* message) = NULL;
+void (*prof_log_warning)(const char* message) = NULL;
+void (*prof_log_error)(const char* message) = NULL;
 
-void (*_prof_win_create)(const char *filename, PROF_WIN_TAG win, WINDOW_CB input_handler) = NULL;
+void (*_prof_win_create)(const char* filename, PROF_WIN_TAG win, WINDOW_CB input_handler) = NULL;
 int (*prof_win_exists)(PROF_WIN_TAG win) = NULL;
 int (*prof_win_focus)(PROF_WIN_TAG win) = NULL;
-int (*prof_win_show)(PROF_WIN_TAG win, char *line) = NULL;
-int (*prof_win_show_themed)(PROF_WIN_TAG tag, char *group, char *key, char *def, char *line) = NULL;
-
-int (*prof_send_stanza)(char *stanza) = NULL;
-
-int (*prof_settings_boolean_get)(char *group, char *key, int def) = NULL;
-void (*prof_settings_boolean_set)(char *group, char *key, int value) = NULL;
-char* (*prof_settings_string_get)(char *group, char *key, char *def) = NULL;
-void (*prof_settings_string_set)(char *group, char *key, char *value) = NULL;
-int (*prof_settings_int_get)(char *group, char *key, int def) = NULL;
-void (*prof_settings_int_set)(char *group, char *key, int value) = NULL;
-char** (*prof_settings_string_list_get)(char *group, char *key) = NULL;
-void (*prof_settings_string_list_add)(char *group, char *key, char *value) = NULL;
-int (*prof_settings_string_list_remove)(char *group, char *key, char *value) = NULL;
-int (*prof_settings_string_list_clear)(char *group, char *key) = NULL;
-
-void (*prof_incoming_message)(char *barejid, char *resource, char *message) = NULL;
-
-void (*_prof_disco_add_feature)(const char *filename, char *feature) = NULL;
-
-void (*prof_encryption_reset)(const char *barejid) = NULL;
-
-int (*prof_chat_set_titlebar_enctext)(const char *barejid, const char *enctext) = NULL;
-int (*prof_chat_unset_titlebar_enctext)(const char *barejid) = NULL;
-int (*prof_chat_set_incoming_char)(const char *barejid, const char *ch) = NULL;
-int (*prof_chat_unset_incoming_char)(const char *barejid) = NULL;
-int (*prof_chat_set_outgoing_char)(const char *barejid, const char *ch) = NULL;
-int (*prof_chat_unset_outgoing_char)(const char *barejid) = NULL;
-int (*prof_room_set_titlebar_enctext)(const char *roomjid, const char *enctext) = NULL;
-int (*prof_room_unset_titlebar_enctext)(const char *roomjid) = NULL;
-int (*prof_room_set_message_char)(const char *roomjid, const char *ch) = NULL;
-int (*prof_room_unset_message_char)(const char *roomjid) = NULL;
-
-int (*prof_chat_show)(const char *const barejid, const char *const message) = NULL;
-int (*prof_chat_show_themed)(const char *const barejid, const char *const group, const char *const item, const char *const def,
-    const char *const ch, const char *const message) = NULL;
-
-int (*prof_room_show)(const char *const roomjid, const char *const message) = NULL;
-int (*prof_room_show_themed)(const char *const roomjid, const char *const group, const char *const item, const char *const def,
-    const char *const ch, const char *const message) = NULL;
+int (*prof_win_show)(PROF_WIN_TAG win, char* line) = NULL;
+int (*prof_win_show_themed)(PROF_WIN_TAG tag, char* group, char* key, char* def, char* line) = NULL;
+
+int (*prof_send_stanza)(char* stanza) = NULL;
+
+int (*prof_settings_boolean_get)(char* group, char* key, int def) = NULL;
+void (*prof_settings_boolean_set)(char* group, char* key, int value) = NULL;
+char* (*prof_settings_string_get)(char* group, char* key, char* def) = NULL;
+void (*prof_settings_string_set)(char* group, char* key, char* value) = NULL;
+int (*prof_settings_int_get)(char* group, char* key, int def) = NULL;
+void (*prof_settings_int_set)(char* group, char* key, int value) = NULL;
+char** (*prof_settings_string_list_get)(char* group, char* key) = NULL;
+void (*prof_settings_string_list_add)(char* group, char* key, char* value) = NULL;
+int (*prof_settings_string_list_remove)(char* group, char* key, char* value) = NULL;
+int (*prof_settings_string_list_clear)(char* group, char* key) = NULL;
+
+void (*prof_incoming_message)(char* barejid, char* resource, char* message) = NULL;
+
+void (*_prof_disco_add_feature)(const char* filename, char* feature) = NULL;
+
+void (*prof_encryption_reset)(const char* barejid) = NULL;
+
+int (*prof_chat_set_titlebar_enctext)(const char* barejid, const char* enctext) = NULL;
+int (*prof_chat_unset_titlebar_enctext)(const char* barejid) = NULL;
+int (*prof_chat_set_incoming_char)(const char* barejid, const char* ch) = NULL;
+int (*prof_chat_unset_incoming_char)(const char* barejid) = NULL;
+int (*prof_chat_set_outgoing_char)(const char* barejid, const char* ch) = NULL;
+int (*prof_chat_unset_outgoing_char)(const char* barejid) = NULL;
+int (*prof_room_set_titlebar_enctext)(const char* roomjid, const char* enctext) = NULL;
+int (*prof_room_unset_titlebar_enctext)(const char* roomjid) = NULL;
+int (*prof_room_set_message_char)(const char* roomjid, const char* ch) = NULL;
+int (*prof_room_unset_message_char)(const char* roomjid) = NULL;
+
+int (*prof_chat_show)(const char* const barejid, const char* const message) = NULL;
+int (*prof_chat_show_themed)(const char* const barejid, const char* const group, const char* const item, const char* const def,
+                             const char* const ch, const char* const message)
+    = NULL;
+
+int (*prof_room_show)(const char* const roomjid, const char* const message) = NULL;
+int (*prof_room_show_themed)(const char* const roomjid, const char* const group, const char* const item, const char* const def,
+                             const char* const ch, const char* const message)
+    = NULL;
diff --git a/src/plugins/profapi.h b/src/plugins/profapi.h
index 7e607f09..cb850c82 100644
--- a/src/plugins/profapi.h
+++ b/src/plugins/profapi.h
@@ -37,96 +37,96 @@
 #define PLUGINS_PROF_API_H
 
 #define prof_register_command(command_name, min_args, max_args, synopsis, description, arguments, examples, callback) _prof_register_command(__FILE__, command_name, min_args, max_args, synopsis, description, arguments, examples, callback)
-#define prof_register_timed(callback, interval_seconds) _prof_register_timed(__FILE__, callback, interval_seconds)
-#define prof_completer_add(key, items) _prof_completer_add(__FILE__, key, items)
-#define prof_completer_remove(key, items) _prof_completer_remove(__FILE__, key, items)
-#define prof_completer_clear(key) _prof_completer_clear(__FILE__, key)
-#define prof_filepath_completer_add(prefix) _prof_filepath_completer_add(__FILE__, prefix)
-#define prof_win_create(win, input_handler) _prof_win_create(__FILE__, win, input_handler)
-#define prof_disco_add_feature(feature) _prof_disco_add_feature(__FILE__, feature)
+#define prof_register_timed(callback, interval_seconds)                                                               _prof_register_timed(__FILE__, callback, interval_seconds)
+#define prof_completer_add(key, items)                                                                                _prof_completer_add(__FILE__, key, items)
+#define prof_completer_remove(key, items)                                                                             _prof_completer_remove(__FILE__, key, items)
+#define prof_completer_clear(key)                                                                                     _prof_completer_clear(__FILE__, key)
+#define prof_filepath_completer_add(prefix)                                                                           _prof_filepath_completer_add(__FILE__, prefix)
+#define prof_win_create(win, input_handler)                                                                           _prof_win_create(__FILE__, win, input_handler)
+#define prof_disco_add_feature(feature)                                                                               _prof_disco_add_feature(__FILE__, feature)
 
 typedef char* PROF_WIN_TAG;
-typedef void(*CMD_CB)(char **args);
-typedef void(*TIMED_CB)(void);
-typedef void(*WINDOW_CB)(PROF_WIN_TAG win, char *line);
+typedef void (*CMD_CB)(char** args);
+typedef void (*TIMED_CB)(void);
+typedef void (*WINDOW_CB)(PROF_WIN_TAG win, char* line);
 
 void (*prof_cons_alert)(void);
-int (*prof_cons_show)(const char * const message);
-int (*prof_cons_show_themed)(const char *const group, const char *const item, const char *const def, const char *const message);
-int (*prof_cons_bad_cmd_usage)(const char *const cmd);
+int (*prof_cons_show)(const char* const message);
+int (*prof_cons_show_themed)(const char* const group, const char* const item, const char* const def, const char* const message);
+int (*prof_cons_bad_cmd_usage)(const char* const cmd);
 
-void (*_prof_register_command)(const char *filename, const char *command_name, int min_args, int max_args,
-    char **synopsis, const char *description, char *arguments[][2], char **examples,
-    CMD_CB callback);
+void (*_prof_register_command)(const char* filename, const char* command_name, int min_args, int max_args,
+                               char** synopsis, const char* description, char* arguments[][2], char** examples,
+                               CMD_CB callback);
 
-void (*_prof_register_timed)(const char *filename, TIMED_CB callback, int interval_seconds);
+void (*_prof_register_timed)(const char* filename, TIMED_CB callback, int interval_seconds);
 
-void (*_prof_completer_add)(const char *filename, const char *key, char **items);
-void (*_prof_completer_remove)(const char *filename, const char *key, char **items);
-void (*_prof_completer_clear)(const char *filename, const char *key);
-void (*_prof_filepath_completer_add)(const char *filename, const char *prefix);
+void (*_prof_completer_add)(const char* filename, const char* key, char** items);
+void (*_prof_completer_remove)(const char* filename, const char* key, char** items);
+void (*_prof_completer_clear)(const char* filename, const char* key);
+void (*_prof_filepath_completer_add)(const char* filename, const char* prefix);
 
-void (*prof_notify)(const char *message, int timeout_ms, const char *category);
+void (*prof_notify)(const char* message, int timeout_ms, const char* category);
 
-void (*prof_send_line)(char *line);
+void (*prof_send_line)(char* line);
 
 char* (*prof_get_current_recipient)(void);
 char* (*prof_get_current_muc)(void);
 int (*prof_current_win_is_console)(void);
 char* (*prof_get_current_nick)(void);
-char* (*prof_get_name_from_roster)(const char *barejid);
-char* (*prof_get_barejid_from_roster)(const char *name);
+char* (*prof_get_name_from_roster)(const char* barejid);
+char* (*prof_get_barejid_from_roster)(const char* name);
 char** (*prof_get_current_occupants)(void);
 
-char* (*prof_get_room_nick)(const char *barejid);
+char* (*prof_get_room_nick)(const char* barejid);
 
-void (*prof_log_debug)(const char *message);
-void (*prof_log_info)(const char *message);
-void (*prof_log_warning)(const char *message);
-void (*prof_log_error)(const char *message);
+void (*prof_log_debug)(const char* message);
+void (*prof_log_info)(const char* message);
+void (*prof_log_warning)(const char* message);
+void (*prof_log_error)(const char* message);
 
-void (*_prof_win_create)(const char *filename, PROF_WIN_TAG win, WINDOW_CB input_handler);
+void (*_prof_win_create)(const char* filename, PROF_WIN_TAG win, WINDOW_CB input_handler);
 int (*prof_win_exists)(PROF_WIN_TAG win);
 int (*prof_win_focus)(PROF_WIN_TAG win);
-int (*prof_win_show)(PROF_WIN_TAG win, char *line);
-int (*prof_win_show_themed)(PROF_WIN_TAG tag, char *group, char *key, char *def, char *line);
-
-int (*prof_send_stanza)(char *stanza);
-
-int (*prof_settings_boolean_get)(char *group, char *key, int def);
-void (*prof_settings_boolean_set)(char *group, char *key, int value);
-char* (*prof_settings_string_get)(char *group, char *key, char *def);
-void (*prof_settings_string_set)(char *group, char *key, char *value);
-int (*prof_settings_int_get)(char *group, char *key, int def);
-void (*prof_settings_int_set)(char *group, char *key, int value);
-char** (*prof_settings_string_list_get)(char *group, char *key);
-void (*prof_settings_string_list_add)(char *group, char *key, char *value);
-int (*prof_settings_string_list_remove)(char *group, char *key, char *value);
-int (*prof_settings_string_list_clear)(char *group, char *key);
-
-void (*prof_incoming_message)(char *barejid, char *resource, char *message);
-
-void (*_prof_disco_add_feature)(const char *filename, char *feature);
-
-void (*prof_encryption_reset)(const char *barejid);
-
-int (*prof_chat_set_titlebar_enctext)(const char *barejid, const char *enctext);
-int (*prof_chat_unset_titlebar_enctext)(const char *barejid);
-int (*prof_chat_set_incoming_char)(const char *barejid, const char *ch);
-int (*prof_chat_unset_incoming_char)(const char *barejid);
-int (*prof_chat_set_outgoing_char)(const char *barejid, const char *ch);
-int (*prof_chat_unset_outgoing_char)(const char *barejid);
-int (*prof_room_set_titlebar_enctext)(const char *roomjid, const char *enctext);
-int (*prof_room_unset_titlebar_enctext)(const char *roomjid);
-int (*prof_room_set_message_char)(const char *roomjid, const char *ch);
-int (*prof_room_unset_message_char)(const char *roomjid);
-
-int (*prof_chat_show)(const char *const barejid, const char *const message);
-int (*prof_chat_show_themed)(const char *const barejid, const char *const group, const char *const item, const char *const def,
-    const char *const ch, const char *const message);
-
-int (*prof_room_show)(const char *const roomjid, const char *const message);
-int (*prof_room_show_themed)(const char *const roomjid, const char *const group, const char *const item, const char *const def,
-    const char *const ch, const char *const message);
+int (*prof_win_show)(PROF_WIN_TAG win, char* line);
+int (*prof_win_show_themed)(PROF_WIN_TAG tag, char* group, char* key, char* def, char* line);
+
+int (*prof_send_stanza)(char* stanza);
+
+int (*prof_settings_boolean_get)(char* group, char* key, int def);
+void (*prof_settings_boolean_set)(char* group, char* key, int value);
+char* (*prof_settings_string_get)(char* group, char* key, char* def);
+void (*prof_settings_string_set)(char* group, char* key, char* value);
+int (*prof_settings_int_get)(char* group, char* key, int def);
+void (*prof_settings_int_set)(char* group, char* key, int value);
+char** (*prof_settings_string_list_get)(char* group, char* key);
+void (*prof_settings_string_list_add)(char* group, char* key, char* value);
+int (*prof_settings_string_list_remove)(char* group, char* key, char* value);
+int (*prof_settings_string_list_clear)(char* group, char* key);
+
+void (*prof_incoming_message)(char* barejid, char* resource, char* message);
+
+void (*_prof_disco_add_feature)(const char* filename, char* feature);
+
+void (*prof_encryption_reset)(const char* barejid);
+
+int (*prof_chat_set_titlebar_enctext)(const char* barejid, const char* enctext);
+int (*prof_chat_unset_titlebar_enctext)(const char* barejid);
+int (*prof_chat_set_incoming_char)(const char* barejid, const char* ch);
+int (*prof_chat_unset_incoming_char)(const char* barejid);
+int (*prof_chat_set_outgoing_char)(const char* barejid, const char* ch);
+int (*prof_chat_unset_outgoing_char)(const char* barejid);
+int (*prof_room_set_titlebar_enctext)(const char* roomjid, const char* enctext);
+int (*prof_room_unset_titlebar_enctext)(const char* roomjid);
+int (*prof_room_set_message_char)(const char* roomjid, const char* ch);
+int (*prof_room_unset_message_char)(const char* roomjid);
+
+int (*prof_chat_show)(const char* const barejid, const char* const message);
+int (*prof_chat_show_themed)(const char* const barejid, const char* const group, const char* const item, const char* const def,
+                             const char* const ch, const char* const message);
+
+int (*prof_room_show)(const char* const roomjid, const char* const message);
+int (*prof_room_show_themed)(const char* const roomjid, const char* const group, const char* const item, const char* const def,
+                             const char* const ch, const char* const message);
 
 #endif
diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c
index e59be8b5..453dfeac 100644
--- a/src/ui/inputwin.c
+++ b/src/ui/inputwin.c
@@ -568,12 +568,15 @@ _inp_rl_startup_hook(void)
 static void
 _inp_rl_linehandler(char* line)
 {
-    if (line && *line) {
-        if (!get_password) {
-            add_history(line);
-        }
-    }
     inp_line = line;
+    if (!line || !*line || get_password) {
+        return;
+    }
+    HISTORY_STATE* history = history_get_history_state();
+    HIST_ENTRY* last = history->length > 0 ? history->entries[history->length - 1] : NULL;
+    if (last == NULL || strcmp(last->line, line) != 0) {
+        add_history(line);
+    }
 }
 
 static gboolean shift_tab = FALSE;