patch 9.1.1556: string handling in cmdexpand.c can be improved

Problem:  string handling in cmdexpand.c can be improved
Solution: Improve string manipulation in cmdexpand.c (John Marriott).

This PR does the following:

In cmdline_fuzzy_completion_supported():
- replace the series of if tests with a switch

In expand_shellcmd_onedir():
- move the code to concatenate path and pattern to expand_shellcmd().
  This allows us to slightly simplify the argument list to pass the fully
  pathed pattern and the length of the path in the pattern (0 if no path)
- factor out calls to STRMOVE()

In expand_shellcmd():
- factor out calls to STRMOVE() in the first for loop.
- reorganise the second for loop by:
  a) only calling vim_strchr() if s is not at the end of the string
  b) making sure that when the path and pattern are concatenated they fit
     inside buf
  c) concatenating path and pattern and pass to expand_shellcmd_onedir()

In globpath():
- slightly improve logic that determines if the complete path will fit
  inside the buffer

In f_getcompletion():
- replace the series of if tests with a switch
- factor out calls to STRLEN()

In copy_substring_from_pos():
- factor out the call to STRLEN()

closes: #17742

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
John Marriott
2025-07-16 20:09:13 +02:00
committed by Christian Brabandt
parent 78b10eab6c
commit 393d398247
3 changed files with 254 additions and 196 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-07-16 19:53+0200\n"
"POT-Creation-Date: 2025-07-16 20:09+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -340,11 +340,11 @@ msgstr ""
msgid "Switched to clipboard method '%s'."
msgstr ""
#: ../cmdexpand.c:1352
#: ../cmdexpand.c:1360
msgid "tagname"
msgstr ""
#: ../cmdexpand.c:1355
#: ../cmdexpand.c:1363
msgid " kind file\n"
msgstr ""
@ -4257,327 +4257,327 @@ msgstr ""
msgid "%s (%s, compiled %s)"
msgstr ""
#: ../version.c:4044
#: ../version.c:4046
msgid ""
"\n"
"MS-Windows ARM64 GUI/console version"
msgstr ""
#: ../version.c:4046
#: ../version.c:4048
msgid ""
"\n"
"MS-Windows 64-bit GUI/console version"
msgstr ""
#: ../version.c:4049
#: ../version.c:4051
msgid ""
"\n"
"MS-Windows 32-bit GUI/console version"
msgstr ""
#: ../version.c:4054
#: ../version.c:4056
msgid ""
"\n"
"MS-Windows ARM64 GUI version"
msgstr ""
#: ../version.c:4056
#: ../version.c:4058
msgid ""
"\n"
"MS-Windows 64-bit GUI version"
msgstr ""
#: ../version.c:4059
#: ../version.c:4061
msgid ""
"\n"
"MS-Windows 32-bit GUI version"
msgstr ""
#: ../version.c:4063
#: ../version.c:4065
msgid " with OLE support"
msgstr ""
#: ../version.c:4068
msgid ""
"\n"
"MS-Windows ARM64 console version"
msgstr ""
#: ../version.c:4070
msgid ""
"\n"
"MS-Windows ARM64 console version"
msgstr ""
#: ../version.c:4072
msgid ""
"\n"
"MS-Windows 64-bit console version"
msgstr ""
#: ../version.c:4073
#: ../version.c:4075
msgid ""
"\n"
"MS-Windows 32-bit console version"
msgstr ""
#: ../version.c:4079
#: ../version.c:4081
msgid ""
"\n"
"macOS version"
msgstr ""
#: ../version.c:4081
#: ../version.c:4083
msgid ""
"\n"
"macOS version w/o darwin feat."
msgstr ""
#: ../version.c:4091
#: ../version.c:4093
msgid ""
"\n"
"OpenVMS version"
msgstr ""
#: ../version.c:4106
#: ../version.c:4108
msgid ""
"\n"
"Included patches: "
msgstr ""
#: ../version.c:4131
#: ../version.c:4133
msgid ""
"\n"
"Extra patches: "
msgstr ""
#: ../version.c:4143 ../version.c:4454
#: ../version.c:4145 ../version.c:4456
msgid "Modified by "
msgstr ""
#: ../version.c:4150
#: ../version.c:4152
msgid ""
"\n"
"Compiled "
msgstr ""
#: ../version.c:4153
#: ../version.c:4155
msgid "by "
msgstr ""
#: ../version.c:4165
msgid ""
"\n"
"Huge version "
msgstr ""
#: ../version.c:4167
msgid ""
"\n"
"Normal version "
"Huge version "
msgstr ""
#: ../version.c:4169
msgid ""
"\n"
"Normal version "
msgstr ""
#: ../version.c:4171
msgid ""
"\n"
"Tiny version "
msgstr ""
#: ../version.c:4172
#: ../version.c:4174
msgid "without GUI."
msgstr ""
#: ../version.c:4175
#: ../version.c:4177
msgid "with GTK3 GUI."
msgstr ""
#: ../version.c:4177
#: ../version.c:4179
msgid "with GTK2-GNOME GUI."
msgstr ""
#: ../version.c:4179
#: ../version.c:4181
msgid "with GTK2 GUI."
msgstr ""
#: ../version.c:4182
#: ../version.c:4184
msgid "with X11-Motif GUI."
msgstr ""
#: ../version.c:4184
#: ../version.c:4186
msgid "with Haiku GUI."
msgstr ""
#: ../version.c:4186
#: ../version.c:4188
msgid "with Photon GUI."
msgstr ""
#: ../version.c:4188
#: ../version.c:4190
msgid "with GUI."
msgstr ""
#: ../version.c:4190
#: ../version.c:4192
msgid " Features included (+) or not (-):\n"
msgstr ""
#: ../version.c:4197
#: ../version.c:4199
msgid " system vimrc file: \""
msgstr ""
#: ../version.c:4202
#: ../version.c:4204
msgid " user vimrc file: \""
msgstr ""
#: ../version.c:4207
#: ../version.c:4209
msgid " 2nd user vimrc file: \""
msgstr ""
#: ../version.c:4212 ../version.c:4219 ../version.c:4223
#: ../version.c:4214 ../version.c:4221 ../version.c:4225
msgid " 3rd user vimrc file: \""
msgstr ""
#: ../version.c:4215
#: ../version.c:4217
msgid " 4th user vimrc file: \""
msgstr ""
#: ../version.c:4228
#: ../version.c:4230
msgid " user exrc file: \""
msgstr ""
#: ../version.c:4233
#: ../version.c:4235
msgid " 2nd user exrc file: \""
msgstr ""
#: ../version.c:4239
#: ../version.c:4241
msgid " system gvimrc file: \""
msgstr ""
#: ../version.c:4243
#: ../version.c:4245
msgid " user gvimrc file: \""
msgstr ""
#: ../version.c:4247
#: ../version.c:4249
msgid "2nd user gvimrc file: \""
msgstr ""
#: ../version.c:4252
#: ../version.c:4254
msgid "3rd user gvimrc file: \""
msgstr ""
#: ../version.c:4257
#: ../version.c:4259
msgid " defaults file: \""
msgstr ""
#: ../version.c:4262
#: ../version.c:4264
msgid " system menu file: \""
msgstr ""
#: ../version.c:4270
#: ../version.c:4272
msgid " fall-back for $VIM: \""
msgstr ""
#: ../version.c:4276
#: ../version.c:4278
msgid " f-b for $VIMRUNTIME: \""
msgstr ""
#: ../version.c:4280
#: ../version.c:4282
msgid "Compilation: "
msgstr ""
#: ../version.c:4286
#: ../version.c:4288
msgid "Compiler: "
msgstr ""
#: ../version.c:4291
#: ../version.c:4293
msgid "Linking: "
msgstr ""
#: ../version.c:4296
#: ../version.c:4298
msgid " DEBUG BUILD"
msgstr ""
#: ../version.c:4332
#: ../version.c:4334
msgid "VIM - Vi IMproved"
msgstr ""
#: ../version.c:4334
#: ../version.c:4336
msgid "version "
msgstr ""
#: ../version.c:4335
#: ../version.c:4337
msgid "by Bram Moolenaar et al."
msgstr ""
#: ../version.c:4339
#: ../version.c:4341
msgid "Vim is open source and freely distributable"
msgstr ""
#: ../version.c:4341
#: ../version.c:4343
msgid "Help poor children in Uganda!"
msgstr ""
#: ../version.c:4342
#: ../version.c:4344
msgid "type :help iccf<Enter> for information "
msgstr ""
#: ../version.c:4344
#: ../version.c:4346
msgid "type :q<Enter> to exit "
msgstr ""
#: ../version.c:4345
#: ../version.c:4347
msgid "type :help<Enter> or <F1> for on-line help"
msgstr ""
#: ../version.c:4346
#: ../version.c:4348
msgid "type :help version9<Enter> for version info"
msgstr ""
#: ../version.c:4349
#: ../version.c:4351
msgid "Running in Vi compatible mode"
msgstr ""
#: ../version.c:4350
#: ../version.c:4352
msgid "type :set nocp<Enter> for Vim defaults"
msgstr ""
#: ../version.c:4351
#: ../version.c:4353
msgid "type :help cp-default<Enter> for info on this"
msgstr ""
#: ../version.c:4366
#: ../version.c:4368
msgid "menu Help->Orphans for information "
msgstr ""
#: ../version.c:4368
#: ../version.c:4370
msgid "Running modeless, typed text is inserted"
msgstr ""
#: ../version.c:4369
#: ../version.c:4371
msgid "menu Edit->Global Settings->Toggle Insert Mode "
msgstr ""
#: ../version.c:4370
#: ../version.c:4372
msgid " for two modes "
msgstr ""
#: ../version.c:4374
#: ../version.c:4376
msgid "menu Edit->Global Settings->Toggle Vi Compatible"
msgstr ""
#: ../version.c:4375
#: ../version.c:4377
msgid " for Vim defaults "
msgstr ""
#: ../version.c:4416
#: ../version.c:4418
msgid "Sponsor Vim development!"
msgstr ""
#: ../version.c:4417
#: ../version.c:4419
msgid "Become a registered Vim user!"
msgstr ""
#: ../version.c:4420
#: ../version.c:4422
msgid "type :help sponsor<Enter> for information "
msgstr ""
#: ../version.c:4421
#: ../version.c:4423
msgid "type :help register<Enter> for information "
msgstr ""
#: ../version.c:4423
#: ../version.c:4425
msgid "menu Help->Sponsor/Register for information "
msgstr ""