[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00035] Re: escaping a !
- Subject: [FDclone-users:00035] Re: escaping a !
- From: Takashi SHIRAI <shirai@nintendo.co.jp>
- Date: Wed, 28 Aug 2002 12:49:55 +0900
しらいです。
In Message-Id <86n0rd3z6i.wl@archon.local.idaemons.org>
"Akinori MUSHA" <knu@iDaemons.org>さんwrites:
> 補完結果が正しく解釈されるのであればどれでも納得できます。
>
> 仰る通り 3 がいいんじゃないでしょうか。
という訳で patch を作成してみました。他にも幾つかいじって
しまってますが、今回の指摘箇所は直っていると思います。
[FDclone-users:00020] に対する patch にしてありますので、
FD-2.01b に上記 mail の patch をあててから下記 patch をあて
て下さい。
---- Cut Here ----
diff -u old/input.c ./input.c
--- old/input.c Wed Aug 21 14:19:15 2002
+++ ./input.c Wed Aug 21 14:08:27 2002
@@ -852,52 +852,78 @@
dupl = malloc2(ins * 2 + 1);
insertchar(s, cx, len, plen, max, linemax, vlen(strins, ins));
insshift(s, cx, len, ins);
+ for (i = 0; i < ins; i++) s[cx + i] = ' ';
+ len += ins;
for (i = j = 0; i < ins; i++, j++) {
if (isctl(strins[i])) {
- if (len + ins + j - i >= max)
+ if (len + j - i >= max)
dupl[j] = s[cx + j] = '?';
else {
+ insertchar(s, cx, len, plen, max, linemax, 1);
+ insshift(s, cx + j, len, 1);
dupl[j] = '^';
s[cx + j] = QUOTE;
- dupl[++j] = (strins[i] + '@') & 0x7f;
+ j++;
+ dupl[j] = (strins[i] + '@') & 0x7f;
s[cx + j] = strins[i];
}
}
#ifdef CODEEUC
else if (isekana(strins, i)) {
- if (len + ins + j - i >= max)
+ if (len + j - i >= max)
dupl[j] = s[cx + j] = '?';
else {
dupl[j] = s[cx + j] = strins[i];
- dupl[j + 1] = s[cx + j + 1] = strins[++i];
j++;
+ dupl[j] = s[cx + j] = strins[++i];
}
}
#endif
else if (iskanji1(strins, i)) {
- if (len + ins + j - i >= max)
+ if (len + j - i >= max)
dupl[j] = s[cx + j] = '?';
else {
dupl[j] = s[cx + j] = strins[i];
- dupl[j + 1] = s[cx + j + 1] = strins[++i];
j++;
+ dupl[j] = s[cx + j] = strins[++i];
}
}
#if MSDOS && defined (_NOORIGSHELL)
- else if (strchr(DQ_METACHAR, strins[i])) {
+ else if (strchr(DQ_METACHAR, strins[i])
#else
- else if (quote == '"' && strchr(DQ_METACHAR, strins[i])) {
+ else if ((quote == '\'' && strins[i] == '\'')
+ || (quote == '"' && strins[i] == '!')) {
+ f = 3;
+ if (!strins[i + 1]) f--;
+ if (len + j - i + f > max)
+ dupl[j] = s[cx + j] = '?';
+ else {
+ insertchar(s, cx, len, plen, max, linemax, f);
+ insshift(s, cx + j, len, f);
+ dupl[j] = s[cx + j] = quote;
+ j++;
+ dupl[j] = s[cx + j] = PMETA;
+ j++;
+ dupl[j] = s[cx + j] = strins[i];
+ j++;
+ dupl[j] = s[cx + j] = quote;
+ }
+ }
+ else if ((quote == '"' && strchr(DQ_METACHAR, strins[i]))
#endif
- if (len + ins + j - i >= max)
+ || (!quote && strchr(METACHAR, strins[i]))) {
+ if (len + j - i >= max)
dupl[j] = s[cx + j] = '?';
else {
+ insertchar(s, cx, len, plen, max, linemax, 1);
+ insshift(s, cx + j, len, 1);
#if MSDOS && defined (_NOORIGSHELL)
- dupl[j] = s[cx + j] =
+ dupl[j] = s[cx + j] = strins[i];
#else
dupl[j] = s[cx + j] = PMETA;
#endif
- dupl[j + 1] = s[cx + j + 1] = strins[i];
j++;
+ dupl[j] = s[cx + j] = strins[i];
}
}
else dupl[j] = s[cx + j] = strins[i];
@@ -1235,6 +1261,7 @@
continue;
}
if (!isnmeta(s, i, '\0', cx)) continue;
+ if (strchr(DQ_METACHAR, s[i + 1])) continue;
setcursor(vlen(s, i), plen, max, linemax);
deletechar(s, i, len, plen, max, linemax, 1);
delshift(s, i, len--, 1);
@@ -1254,15 +1281,12 @@
}
cp2 = cp1 + (int)strlen(cp1) - ins;
- if (fix == _SC_) {
- ins--;
- if (!hasmeta) quote = '\0';
- }
+ if (fix == _SC_) ins--;
i = insertstr(s, cx, len, plen, max, linemax, cp2, ins, quote);
l += i;
if (fix && (len += i) < max) {
cx += i;
- if (quote && len + 1 < max) {
+ if (quote && len + 1 < max && (fix != _SC_ || hasmeta)) {
insertchar(s, cx, len, plen, max, linemax, 1);
insshift(s, cx, len++, 1);
l++;
---- Cut Here ----
しらい たかし