summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorailin-nemui <ailin-nemui@users.noreply.github.com>2017-06-23 18:00:04 +0200
committerGitHub <noreply@github.com>2017-06-23 18:00:04 +0200
commit28d82c8f639d08eac17030dba47b3e02a9158167 (patch)
tree9fe12132aec9d6046ab02638b2d6545a383c1e62
parent9d32636ebe99d13a752cb8dad23a2c36881b0578 (diff)
parent12d671a05645d67e811264d5be06d9758458452f (diff)
downloadirssi-28d82c8f639d08eac17030dba47b3e02a9158167.zip
Merge pull request #709 from osm/master
Escape nicks during nick completion when expand_escapes is enabled
-rw-r--r--src/fe-common/core/completion.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/fe-common/core/completion.c b/src/fe-common/core/completion.c
index a97adc21..78b1b24b 100644
--- a/src/fe-common/core/completion.c
+++ b/src/fe-common/core/completion.c
@@ -137,8 +137,9 @@ char *word_complete(WINDOW_REC *window, const char *line, int *pos, int erase, i
int old_startpos, old_wordlen;
GString *result;
- char *word, *wordstart, *linestart, *ret;
- int continue_complete, want_space;
+ const char *cmdchars;
+ char *word, *wordstart, *linestart, *ret, *data;
+ int continue_complete, want_space, expand_escapes;
g_return_val_if_fail(line != NULL, NULL);
g_return_val_if_fail(pos != NULL, NULL);
@@ -241,14 +242,24 @@ char *word_complete(WINDOW_REC *window, const char *line, int *pos, int erase, i
if (complist == NULL)
return NULL;
+ /* get the cmd char */
+ cmdchars = settings_get_str("cmdchars");
+
+ /* get the expand_escapes setting */
+ expand_escapes = settings_get_bool("expand_escapes");
+
+ /* escape if the word doesn't begin with '/' and expand_escapes are turned on */
+ data = strchr(cmdchars, *line) == NULL && expand_escapes ?
+ escape_string(complist->data) : g_strdup(complist->data);
+
/* word completed */
- *pos = startpos+strlen(complist->data);
+ *pos = startpos + strlen(data);
/* replace the word in line - we need to return
a full new line */
result = g_string_new(line);
g_string_erase(result, startpos, wordlen);
- g_string_insert(result, startpos, complist->data);
+ g_string_insert(result, startpos, data);
if (want_space) {
if (!isseparator(result->str[*pos]))
@@ -256,13 +267,17 @@ char *word_complete(WINDOW_REC *window, const char *line, int *pos, int erase, i
(*pos)++;
}
- wordlen = strlen(complist->data);
+ wordlen = strlen(data);
last_line_pos = *pos;
g_free_not_null(last_line);
last_line = g_strdup(result->str);
ret = result->str;
g_string_free(result, FALSE);
+
+ /* free the data */
+ g_free(data);
+
return ret;
}