1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Merge branch 'master' into readline

This commit is contained in:
James Booth 2015-02-08 21:03:26 +00:00
commit 8cec79faef
6 changed files with 86 additions and 3 deletions

View File

@ -1962,23 +1962,31 @@ _cmd_complete_parameters(const char * const input)
if (nick_ac) {
gchar *nick_choices[] = { "/msg", "/info", "/caps", "/status", "/software" } ;
// Remove quote character before and after names when doing autocomplete
char *unquoted = strip_arg_quotes(input);
for (i = 0; i < ARRAY_SIZE(nick_choices); i++) {
result = autocomplete_param_with_ac(input, nick_choices[i], nick_ac, TRUE);
result = autocomplete_param_with_ac(unquoted, nick_choices[i], nick_ac, TRUE);
if (result) {
free(unquoted);
return result;
}
}
free(unquoted);
}
// otherwise autocomplete using roster
} else {
gchar *contact_choices[] = { "/msg", "/info", "/status" };
// Remove quote character before and after names when doing autocomplete
char *unquoted = strip_arg_quotes(input);
for (i = 0; i < ARRAY_SIZE(contact_choices); i++) {
result = autocomplete_param_with_func(input, contact_choices[i], roster_contact_autocomplete);
result = autocomplete_param_with_func(unquoted, contact_choices[i], roster_contact_autocomplete);
if (result) {
free(unquoted);
return result;
}
}
free(unquoted);
gchar *resource_choices[] = { "/caps", "/software", "/ping" };
for (i = 0; i < ARRAY_SIZE(resource_choices); i++) {

View File

@ -578,3 +578,25 @@ get_file_or_linked(char *loc, char *basedir)
return true_loc;
}
char *
strip_arg_quotes(const char * const input)
{
char *unquoted = strdup(input);
// Remove starting quote if it exists
if(strchr(unquoted, '"') != NULL) {
if(strchr(unquoted, ' ') + 1 == strchr(unquoted, '"')) {
memmove(strchr(unquoted, '"'), strchr(unquoted, '"')+1, strchr(unquoted, '\0') - strchr(unquoted, '"'));
}
}
// Remove ending quote if it exists
if(strchr(unquoted, '"') != NULL) {
if(strchr(unquoted, '\0') - 1 == strchr(unquoted, '"')) {
memmove(strchr(unquoted, '"'), strchr(unquoted, '"')+1, strchr(unquoted, '\0') - strchr(unquoted, '"'));
}
}
return unquoted;
}

View File

@ -131,5 +131,6 @@ int cmp_win_num(gconstpointer a, gconstpointer b);
int get_next_available_win_num(GList *used);
char* get_file_or_linked(char *loc, char *basedir);
char * strip_arg_quotes(const char * const input);
#endif

View File

@ -587,3 +587,47 @@ void utf8_display_len_all_wide(void **state)
assert_int_equal(8, result);
}
void strip_quotes_does_nothing_when_no_quoted(void **state)
{
char *input = "/cmd test string";
char *result = strip_arg_quotes(input);
assert_string_equal("/cmd test string", result);
free(result);
}
void strip_quotes_strips_first(void **state)
{
char *input = "/cmd \"test string";
char *result = strip_arg_quotes(input);
assert_string_equal("/cmd test string", result);
free(result);
}
void strip_quotes_strips_last(void **state)
{
char *input = "/cmd test string\"";
char *result = strip_arg_quotes(input);
assert_string_equal("/cmd test string", result);
free(result);
}
void strip_quotes_strips_both(void **state)
{
char *input = "/cmd \"test string\"";
char *result = strip_arg_quotes(input);
assert_string_equal("/cmd test string", result);
free(result);
}

View File

@ -52,3 +52,7 @@ void utf8_display_len_1_wide(void **state);
void utf8_display_len_non_wide(void **state);
void utf8_display_len_wide(void **state);
void utf8_display_len_all_wide(void **state);
void strip_quotes_does_nothing_when_no_quoted(void **state);
void strip_quotes_strips_first(void **state);
void strip_quotes_strips_last(void **state);
void strip_quotes_strips_both(void **state);

View File

@ -90,6 +90,10 @@ int main(int argc, char* argv[]) {
unit_test(utf8_display_len_non_wide),
unit_test(utf8_display_len_wide),
unit_test(utf8_display_len_all_wide),
unit_test(strip_quotes_does_nothing_when_no_quoted),
unit_test(strip_quotes_strips_first),
unit_test(strip_quotes_strips_last),
unit_test(strip_quotes_strips_both),
unit_test(clear_empty),
unit_test(reset_after_create),