Hi,

I have a lot of color schemes below ~/.vim/colors and ~ expands to
C:\Dokumente und Einstellungen\jkr.HABEL, so the execution of

  let s:n = globpath(&runtimepath, "colors/*.vim")

in $VIMRUNTIME/menu.vim returns a really long string (22881 chars, to be
exact). Currenty the loop which constructs the Edit.Color Scheme submenu
extracts the chars up to the first new line in s:n and then overwrites
s:n with the next 19999 characters of its original value. For long paths
and many color schemes this can result in missing entries in the Color
Scheme submenu; in the worst case the loop constructs an illegal
:execute-command and the execution of menu.vim is aborted.

Possible solution: Use a higher value instead of 19999, say 64 * 1024.

This should be sufficient, but there is a second thing I didn't like:
personal color schemes and the ones in $VIMRUNTIME/colors are sorted
independently, so Vim's "blue" color scheme is close to the end of the
sub menu.

The solution I implemented now uses a list that holds the sorted color
scheme names, and the loop that constructs the submenu iterates through
this list.

Regards,
Jürgen

-- 
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us.     (Calvin)

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

*** runtime\menu.vim.orig       2008-08-20 09:36:56.765625000 +0200
--- runtime\menu.vim    2008-08-20 10:12:17.062500000 +0200
***************
*** 338,361 ****
  
  " Setup the Edit.Color Scheme submenu
  let s:n = globpath(&runtimepath, "colors/*.vim")
  let s:idx = 100
! while strlen(s:n) > 0
!   let s:i = stridx(s:n, "\n")
!   if s:i < 0
!     let s:name = s:n
!     let s:n = ""
!   else
!     let s:name = strpart(s:n, 0, s:i)
!     let s:n = strpart(s:n, s:i + 1, 19999)
!   endif
!   " Ignore case for VMS and windows
!   let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
    exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " 
. s:name . "<CR>"
-   unlet s:name
-   unlet s:i
    let s:idx = s:idx + 10
! endwhile
  unlet s:n
  unlet s:idx
  
  " Setup the Edit.Keymap submenu
--- 338,353 ----
  
  " Setup the Edit.Color Scheme submenu
  let s:n = globpath(&runtimepath, "colors/*.vim")
+ " Ignore case for VMS and windows
+ let s:names = sort(map(split(s:n, "\n"), 'substitute(v:val, 
"\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
  let s:idx = 100
! for s:name in ( s:names )
    exe "an 20.450." . s:idx . ' &Edit.C&olor\ Scheme.' . s:name . " :colors " 
. s:name . "<CR>"
    let s:idx = s:idx + 10
! endfor
  unlet s:n
+ unlet s:name
+ unlet s:names
  unlet s:idx
  
  " Setup the Edit.Keymap submenu

Raspunde prin e-mail lui