summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-07-17 15:20:30 +0200
committerBram Moolenaar <Bram@vim.org>2010-07-17 15:20:30 +0200
commitc5604bc1656354af7404270e27441f2e8f70d785 (patch)
tree229eed4ddaadee9ffb0594ee104e2a3bd6c83038
parentf91787cb9adc47cadea5d17b08d075a15a2e00f4 (diff)
downloadvim-git-c5604bc1656354af7404270e27441f2e8f70d785.tar.gz
Better implementation of creating the Color Scheme menu. (Juergen Kraemer)
-rw-r--r--runtime/doc/todo.txt51
-rw-r--r--runtime/doc/usr_41.txt16
-rw-r--r--runtime/menu.vim28
-rw-r--r--runtime/plugin/rrhelper.vim70
4 files changed, 82 insertions, 83 deletions
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 8906b934b..284968fbc 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1091,35 +1091,22 @@ Before (beta) release 7.3:
Vim 7.3:
Patches to possibly include:
-6 In the quickfix window statusline add the command used to get the list of
- errors, e.g. ":make foo", ":grep something *.c".
- Patch by Lech Lorens, 2009 Mar 23.
- Comments from Andreas Bernauer 24th, Dominique Pelle 24th
- Docs patch by Dominique Pelle, Mar 25
- Update 2009 Mar 28.
- Fix for invalid memory access. (Lech Lorens, 2009 Apr 17)
-- Patch for colorscheme submenu. (Juergen Kraemer, 2008 Aug 20)
- 9 Make it possible to drag a tab page label to another position with the
mouse.
- Patch by Paul B. Mahol, 2008 Aug 29.
-- Mac: Patch to disable antialias. (LC Mi, 2008 Aug 23) Tested on 10.5 and
- 10.4.
-- Patch for adding "J" flag to 'cinoptions': placement of jump label. (Manuel
- Konig, 2010 Feb 19) Update by Lech Lorens, Feb 22.
- Need another name, "J" is now used for Javascript.
+ Patch by Paul B. Mahol, 2008 Aug 29.
+- Mac: Patch to disable antialias. (LC Mi, 2008 Aug 23) Tested on 10.5 and
+ 10.4.
+- Patch for adding "J" flag to 'cinoptions': placement of jump label. (Manuel
+ Konig, 2010 Feb 19) Update by Lech Lorens, Feb 22.
+ Need another name, "J" is now used for Javascript.
+- Patch for Python 3 support. (Roland Puntaier, 2009 Sep 22)
+ Includes changes for omnicompletion.
+ Needs some more testing.
+ Update 2010 Apr 20, patch by Andy Kittner, May 16
+ Build the MS-Windows version with Python 2.6.5 and 3.1.2?
Needs some work:
-- Have a look at patch to enable screen access from Python. (Marko Mahnic,
- 2010 Apr 12)
-- Patch for Python 3 support. (Roland Puntaier, 2009 Sep 22)
- Includes changes for omnicompletion.
- Needs some more testing.
- Update 2010 Apr 20, patch by Andy Kittner, May 16
- Build the MS-Windows version with Python 2.6.5 and 3.1.2?
-- Easier/standard way to disable default plugins.
-- ":{range}source": source the lines from the current file.
- You can already yank lines and use :@" to execute them.
- Most of do_source() would not be used, need a new function.
- It's easy when not doing breakpoints or profiling.
+- Have a look at patch to enable screen access from Python. (Marko Mahnic,
+ 2010 Apr 12)
More patches:
@@ -1161,6 +1148,12 @@ More patches:
more friendly for the Vim distribution.
New version received 2008 Jan 6.
No maintenance in two years...
+6 In the quickfix window statusline add the command used to get the list of
+ errors, e.g. ":make foo", ":grep something *.c".
+ Patch by Lech Lorens, 2009 Apri 17.
+ Comments from Andreas Bernauer 24th, Dominique Pelle 24th
+ Docs patch by Dominique Pelle, Mar 25
+ Can we put the strings in a window-local variable?
Awaiting updated patches:
@@ -2670,6 +2663,12 @@ Built-in script language:
- Add ":let var ?= value", conditional assignment. Patch by Dave Eggum,
2006 Dec 11.
- range for ":exec", pass it on to the executed command. (Webb)
+8 ":{range}source": source the lines from the current file.
+ You can already yank lines and use :@" to execute them.
+ Most of do_source() would not be used, need a new function.
+ It's easy when not doing breakpoints or profiling.
+ Requires copying the lines into a list and then creating a function to
+ execute lines from the list. Similar to getnextac().
7 ":include" command: just like ":source" but doesn't start a new scriptID?
Will be tricky for the list of script names.
8 Have a look at VSEL. Would it be useful to include? (Bigham)
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 382999044..0db488f38 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1711,15 +1711,23 @@ system administrator has dropped it in the system-wide plugin directory, but a
user has his own plugin he wants to use. Then the user must have a chance to
disable loading this specific plugin. This will make it possible: >
- 6 if exists("loaded_typecorr")
+ 6 if exists("g:loaded_typecorr")
7 finish
8 endif
- 9 let loaded_typecorr = 1
+ 9 let g:loaded_typecorr = 1
This also avoids that when the script is loaded twice it would cause error
messages for redefining functions and cause trouble for autocommands that are
added twice.
+The name is recommended to start with "loaded_" and then the file name of the
+plugin, literally. The "g:" is prepended just to avoid mistakes when using
+the variable in a function (without "g:" it would be a variable local to the
+function).
+
+Using "finish" stops Vim from reading the rest of the file, it's much quicker
+than using if-endif around the whole file.
+
MAPPING
@@ -1896,10 +1904,10 @@ Here is the resulting complete example: >
3 " Maintainer: Bram Moolenaar <Bram@vim.org>
4 " License: This file is placed in the public domain.
5
- 6 if exists("loaded_typecorr")
+ 6 if exists("g:loaded_typecorr")
7 finish
8 endif
- 9 let loaded_typecorr = 1
+ 9 let g:loaded_typecorr = 1
10
11 let s:save_cpo = &cpo
12 set cpo&vim
diff --git a/runtime/menu.vim b/runtime/menu.vim
index a9eb81879..2cbd55c4e 100644
--- a/runtime/menu.vim
+++ b/runtime/menu.vim
@@ -337,27 +337,23 @@ fun! s:FileFormat()
endif
endfun
+
" Setup the Edit.Color Scheme submenu
+
+" get NL separated string with file names
let s:n = globpath(&runtimepath, "colors/*.vim")
+
+" split at NL, Ignore case for VMS and windows, sort on name
+let s:names = sort(map(split(s:n, "\n"), 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
+
+" define all the submenu entries
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', '')
+for s:name in s:names
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
+endfor
+unlet s:name s:names s:n s:idx
+
" Setup the Edit.Keymap submenu
if has("keymap")
diff --git a/runtime/plugin/rrhelper.vim b/runtime/plugin/rrhelper.vim
index 302177cb2..b09cbc10b 100644
--- a/runtime/plugin/rrhelper.vim
+++ b/runtime/plugin/rrhelper.vim
@@ -3,7 +3,7 @@
" Last Change: 2008 May 29
" Has this already been loaded?
-if exists("loaded_rrhelper")
+if exists("loaded_rrhelper") || !has("clientserver")
finish
endif
let loaded_rrhelper = 1
@@ -11,42 +11,38 @@ let loaded_rrhelper = 1
" Setup answers for a --remote-wait client who will assume
" a SetupRemoteReplies() function in the command server
-if has("clientserver")
- function SetupRemoteReplies()
- let cnt = 0
- let max = argc()
-
- let id = expand("<client>")
- if id == 0
- return
+function SetupRemoteReplies()
+ let cnt = 0
+ let max = argc()
+
+ let id = expand("<client>")
+ if id == 0
+ return
+ endif
+ while cnt < max
+ " Handle same file from more clients and file being more than once
+ " on the command line by encoding this stuff in the group name
+ let uniqueGroup = "RemoteReply_".id."_".cnt
+
+ " Path separators are always forward slashes for the autocommand pattern.
+ " Escape special characters with a backslash.
+ let f = substitute(argv(cnt), '\\', '/', "g")
+ if exists('*fnameescape')
+ let f = fnameescape(f)
+ else
+ let f = escape(f, " \t\n*?[{`$\\%#'\"|!<")
endif
- while cnt < max
- " Handle same file from more clients and file being more than once
- " on the command line by encoding this stuff in the group name
- let uniqueGroup = "RemoteReply_".id."_".cnt
-
- " Path separators are always forward slashes for the autocommand pattern.
- " Escape special characters with a backslash.
- let f = substitute(argv(cnt), '\\', '/', "g")
- if exists('*fnameescape')
- let f = fnameescape(f)
- else
- let f = escape(f, " \t\n*?[{`$\\%#'\"|!<")
- endif
- execute "augroup ".uniqueGroup
- execute "autocmd ".uniqueGroup." BufUnload ". f ." call DoRemoteReply('".id."', '".cnt."', '".uniqueGroup."', '". f ."')"
- let cnt = cnt + 1
- endwhile
- augroup END
- endfunc
-
- function DoRemoteReply(id, cnt, group, file)
- call server2client(a:id, a:cnt)
- execute 'autocmd! '.a:group.' BufUnload '.a:file
- execute 'augroup! '.a:group
- endfunc
-
-endif
-
+ execute "augroup ".uniqueGroup
+ execute "autocmd ".uniqueGroup." BufUnload ". f ." call DoRemoteReply('".id."', '".cnt."', '".uniqueGroup."', '". f ."')"
+ let cnt = cnt + 1
+ endwhile
+ augroup END
+endfunc
+
+function DoRemoteReply(id, cnt, group, file)
+ call server2client(a:id, a:cnt)
+ execute 'autocmd! '.a:group.' BufUnload '.a:file
+ execute 'augroup! '.a:group
+endfunc
" vim: set sw=2 sts=2 :