parent
e8704bb33b
commit
6d8891894e
|
@ -489,7 +489,7 @@ void handle_button(xcb_button_press_event_t *event) {
|
||||||
size_t namelen = 0;
|
size_t namelen = 0;
|
||||||
const char *utf8_name = cur_ws->canonical_name;
|
const char *utf8_name = cur_ws->canonical_name;
|
||||||
for (const char *walk = utf8_name; *walk != '\0'; walk++) {
|
for (const char *walk = utf8_name; *walk != '\0'; walk++) {
|
||||||
if (*walk == '"')
|
if (*walk == '"' || *walk == '\\')
|
||||||
num_quotes++;
|
num_quotes++;
|
||||||
/* While we’re looping through the name anyway, we can save one
|
/* While we’re looping through the name anyway, we can save one
|
||||||
* strlen(). */
|
* strlen(). */
|
||||||
|
@ -503,7 +503,7 @@ void handle_button(xcb_button_press_event_t *event) {
|
||||||
for (inpos = 0, outpos = strlen("workspace \"");
|
for (inpos = 0, outpos = strlen("workspace \"");
|
||||||
inpos < namelen;
|
inpos < namelen;
|
||||||
inpos++, outpos++) {
|
inpos++, outpos++) {
|
||||||
if (utf8_name[inpos] == '"') {
|
if (utf8_name[inpos] == '"' || utf8_name[inpos] == '\\') {
|
||||||
buffer[outpos] = '\\';
|
buffer[outpos] = '\\';
|
||||||
outpos++;
|
outpos++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -216,8 +216,9 @@ char *parse_string(const char **walk, bool as_word) {
|
||||||
if (**walk == '"') {
|
if (**walk == '"') {
|
||||||
beginning++;
|
beginning++;
|
||||||
(*walk)++;
|
(*walk)++;
|
||||||
while (**walk != '\0' && (**walk != '"' || *(*walk - 1) == '\\'))
|
for (; **walk != '\0' && **walk != '"'; (*walk)++)
|
||||||
(*walk)++;
|
if (**walk == '\\' && *(*walk + 1) != '\0')
|
||||||
|
(*walk)++;
|
||||||
} else {
|
} else {
|
||||||
if (!as_word) {
|
if (!as_word) {
|
||||||
/* For a string (starting with 's'), the delimiters are
|
/* For a string (starting with 's'), the delimiters are
|
||||||
|
@ -248,10 +249,10 @@ char *parse_string(const char **walk, bool as_word) {
|
||||||
for (inpos = 0, outpos = 0;
|
for (inpos = 0, outpos = 0;
|
||||||
inpos < (*walk - beginning);
|
inpos < (*walk - beginning);
|
||||||
inpos++, outpos++) {
|
inpos++, outpos++) {
|
||||||
/* We only handle escaped double quotes to not break
|
/* We only handle escaped double quotes and backslashes to not break
|
||||||
* backwards compatibility with people using \w in
|
* backwards compatibility with people using \w in regular expressions
|
||||||
* regular expressions etc. */
|
* etc. */
|
||||||
if (beginning[inpos] == '\\' && beginning[inpos + 1] == '"')
|
if (beginning[inpos] == '\\' && (beginning[inpos + 1] == '"' || beginning[inpos + 1] == '\\'))
|
||||||
inpos++;
|
inpos++;
|
||||||
str[outpos] = beginning[inpos];
|
str[outpos] = beginning[inpos];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue