runtime(netrw): get rid of s:Strlen() and use strdisplaywidth()
Commit:
https://github.com/vim/vim/commit/1319009d5990764735a300fdbd0dae094604d8db
Author: Luca Saccarola <[email protected]>
Date: Tue Jun 10 20:39:50 2025 +0200
runtime(netrw): get rid of s:Strlen() and use strdisplaywidth()
closes: https://github.com/vim/vim/issues/17498
Signed-off-by: Luca Saccarola <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw.vim
b/runtime/pack/dist/opt/netrw/autoload/netrw.vim
index 777eb08ce..45034d234 100644
--- a/runtime/pack/dist/opt/netrw/autoload/netrw.vim
+++ b/runtime/pack/dist/opt/netrw/autoload/netrw.vim
@@ -4676,7 +4676,7 @@ fun! s:NetrwHidden(islocal)
if g:netrw_list_hide =~ '\(^\|,\)\(^\|\s\s\)\zs\.\S\+'
" remove .file pattern from hiding list
let g:netrw_list_hide=
substitute(g:netrw_list_hide,'\(^\|,\)\(^\|\s\s\)\zs\.\S\+','','')
- elseif s:Strlen(g:netrw_list_hide) >= 1
+ elseif strdisplaywidth(g:netrw_list_hide) >= 1
let g:netrw_list_hide= g:netrw_list_hide . ',\(^\|\s\s\)\zs\.\S\+'
else
let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+'
@@ -7765,7 +7765,8 @@ fun! s:NetrwTreeListing(dirname)
let w:netrw_treetop= a:dirname
let s:netrw_treetop= w:netrw_treetop
" use \V in case the directory contains specials chars like '$' or '~'
- elseif (w:netrw_treetop =~ ('^'.'\V'.a:dirname) && s:Strlen(a:dirname) <
s:Strlen(w:netrw_treetop))
+ elseif (w:netrw_treetop =~ ('^'.'\V'.a:dirname)
+ \ && strdisplaywidth(a:dirname) < strdisplaywidth(w:netrw_treetop))
\ || a:dirname !~ ('^'.'\V'.w:netrw_treetop)
let w:netrw_treetop= a:dirname
let s:netrw_treetop= w:netrw_treetop
@@ -9418,7 +9419,6 @@ endfun
" ---------------------------------------------------------------------
" s:FileReadable: o/s independent filereadable {{{2
fun! s:FileReadable(fname)
-
if g:netrw_cygwin
let ret =
filereadable(s:NetrwFile(substitute(a:fname,g:netrw_cygdrive.'/\(.\)','
:/','')))
else
@@ -10111,51 +10111,6 @@ fun! s:ShowStyle()
endif
endfun
-" ---------------------------------------------------------------------
-" s:Strlen: this function returns the length of a string, even if its using
multi-byte characters. {{{2
-" Solution from Nicolai Weibull, vim docs (:help strlen()),
-" Tony Mechelynck, and my own invention.
-fun! s:Strlen(x)
-
- if exists("*strdisplaywidth")
- let ret = strdisplaywidth(a:x)
-
- elseif type(g:Align_xstrlen) == 1
- " allow user to specify a function to compute the string length (ie. let
g:Align_xstrlen="mystrlenfunc")
- exe "let ret= ".g:Align_xstrlen."('".substitute(a:x,"'","''","g")."')"
-
- elseif g:Align_xstrlen == 1
- " number of codepoints (Latin a + combining circumflex is two codepoints)
- " (comment from TM, solution from NW)
- let ret = strlen(substitute(a:x,'.','c','g'))
-
- elseif g:Align_xstrlen == 2
- " number of spacing codepoints (Latin a + combining circumflex is one
spacing
- " codepoint; a hard tab is one; wide and narrow CJK are one each; etc.)
- " (comment from TM, solution from TM)
- let ret = strlen(substitute(a:x, '.\Z', 'x', 'g'))
-
- elseif g:Align_xstrlen == 3
- " virtual length (counting, for instance, tabs as anything between 1 and
- " 'tabstop', wide CJK as 2 rather than 1, Arabic alif as zero when
immediately
- " preceded by lam, one otherwise, etc.)
- " (comment from TM, solution from me)
- let modkeep= &l:mod
- exe "norm! o\<esc>"
- call setline(line("."),a:x)
- let ret = virtcol("$") - 1
- d
- NetrwKeepj norm! k
- let &l:mod = modkeep
-
- else
- " at least give a decent default
- let ret = strlen(a:x)
- endif
- return ret
-endfun
-
-" ---------------------------------------------------------------------
" ---------------------------------------------------------------------
" s:TreeListMove: supports [[, ]], [], and ][ in tree mode {{{2
fun! s:TreeListMove(dir)
diff --git a/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim
b/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim
index a8d8d6bfd..8f3fa5fc8 100644
--- a/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim
+++ b/runtime/pack/dist/opt/netrw/autoload/netrw/fs.vim
@@ -25,7 +25,7 @@ endfunction
function! netrw#fs#ComposePath(base, subdir)
if has('amiga')
- let ec = a:base[s:Strlen(a:base)-1]
+ let ec = a:base[strdisplaywidth(a:base)-1]
if ec != '/' && ec != ':'
let ret = a:base . '/' . a:subdir
else
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1uP3y8-00BplP-4N%40256bit.org.