tex: backslash as escape character in file names - neatvi - [fork] simple vi-type editor with UTF-8 support (HTM) git clone git://src.adamsgaard.dk/neatvi (DIR) Log (DIR) Files (DIR) Refs (DIR) README --- (DIR) commit cfcaaf89225f9e1f28dffa447668a4b2437f4586 (DIR) parent 3a4ce478980b560dd436c5fd93e867b1adb35c6a (HTM) Author: Ali Gholami Rudi <ali@rudi.ir> Date: Wed, 4 Nov 2015 22:53:44 +0330 ex: backslash as escape character in file names Reported by yoelion at github. Diffstat: M ex.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) --- (DIR) diff --git a/ex.c b/ex.c t@@ -154,8 +154,11 @@ static char *ex_arg(char *s, char *arg) s = ex_cmd(s, arg); while (isspace((unsigned char) *s)) s++; - while (*s && !isspace((unsigned char) *s)) + while (*s && !isspace((unsigned char) *s)) { + if (*s == '\\' && s[1]) + s++; *arg++ = *s++; + } *arg = '\0'; return s; } t@@ -852,7 +855,16 @@ void ex(void) int ex_init(char **files) { char cmd[EXLEN]; - snprintf(cmd, sizeof(cmd), "e %s", files[0] ? files[0] : ""); + char *s = cmd; + char *r = files[0] ? files[0] : ""; + *s++ = 'e'; + *s++ = ' '; + while (*r && s + 2 < cmd + sizeof(cmd)) { + if (*r == ' ') + *s++ = '\\'; + *s++ = *r++; + } + *s = '\0'; if (ec_edit(cmd)) return 1; if (getenv("EXINIT"))