aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/search.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/search.c b/src/search.c
index 2ac8d14e0b0..b0e2b1f919d 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1174,6 +1174,7 @@ Leaves point at end of replacement text.")
1174 register int pos, last; 1174 register int pos, last;
1175 int some_multiletter_word; 1175 int some_multiletter_word;
1176 int some_lowercase; 1176 int some_lowercase;
1177 int some_uppercase;
1177 int some_lowercase_initial; 1178 int some_lowercase_initial;
1178 register int c, prevc; 1179 register int c, prevc;
1179 int inslen; 1180 int inslen;
@@ -1205,6 +1206,7 @@ Leaves point at end of replacement text.")
1205 some_multiletter_word = 0; 1206 some_multiletter_word = 0;
1206 some_lowercase = 0; 1207 some_lowercase = 0;
1207 some_lowercase_initial = 0; 1208 some_lowercase_initial = 0;
1209 some_uppercase = 0;
1208 1210
1209 for (pos = search_regs.start[0]; pos < last; pos++) 1211 for (pos = search_regs.start[0]; pos < last; pos++)
1210 { 1212 {
@@ -1221,6 +1223,7 @@ Leaves point at end of replacement text.")
1221 } 1223 }
1222 else if (!NOCASEP (c)) 1224 else if (!NOCASEP (c))
1223 { 1225 {
1226 some_uppercase = 1;
1224 if (SYNTAX (prevc) != Sword) 1227 if (SYNTAX (prevc) != Sword)
1225 ; 1228 ;
1226 else 1229 else
@@ -1235,11 +1238,12 @@ Leaves point at end of replacement text.")
1235 if (! some_lowercase && some_multiletter_word) 1238 if (! some_lowercase && some_multiletter_word)
1236 case_action = all_caps; 1239 case_action = all_caps;
1237 /* Capitalize each word, if the old text has all capitalized words. */ 1240 /* Capitalize each word, if the old text has all capitalized words. */
1238 /* We used to insist on some_multiletter_word here, 1241 else if (!some_lowercase_initial && some_multiletter_word)
1239 but that screwed query replacing x with y, acting on X.
1240 Even what we have now is more strict than what 19.22 had. */
1241 else if (!some_lowercase_initial)
1242 case_action = cap_initial; 1242 case_action = cap_initial;
1243 else if (!some_lowercase_initial && some_uppercase)
1244 /* Should x -> yz, operating on X, give Yz or YZ?
1245 We'll assume the latter. */
1246 case_action = all_caps;
1243 else 1247 else
1244 case_action = nochange; 1248 case_action = nochange;
1245 } 1249 }