updated for version 7.0g02
authorBram Moolenaar <Bram@vim.org>
Wed, 3 May 2006 21:26:49 +0000 (21:26 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 3 May 2006 21:26:49 +0000 (21:26 +0000)
21 files changed:
runtime/doc/eval.txt
runtime/doc/gui.txt
runtime/doc/insert.txt
runtime/doc/map.txt
runtime/doc/options.txt
runtime/doc/tags
runtime/macmap.vim
runtime/syntax/cs.vim
runtime/syntax/python.vim
runtime/syntax/vrml.vim
src/ex_docmd.c
src/getchar.c
src/gui.c
src/if_ole.cpp
src/option.c
src/proto/term.pro
src/quickfix.c
src/spell.c
src/term.c
src/version.h
src/window.c

index 4ba9cae54015be67cda92ff743fe8b6a03fb456c..ff2d3812ecf3ade5109a9006ec6f2e4020b52b8e 100644 (file)
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0g.  Last change: 2006 May 01
+*eval.txt*      For Vim version 7.0g.  Last change: 2006 May 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2345,9 +2345,14 @@ exists({expr})   The result is a Number, which is non-zero if {expr} is
 <              There must be no space between the symbol (&/$/*/#) and the
                name.
                Trailing characters that can't be part of the name are often
-               ignored, but don't depend on it.
-               Note that the argument must be a string, not the name of the
-               variable itself!  For example: >
+               ignored, but don't depend on it, it may change in the future!
+               Example: >
+                       exists("*strftime()")
+<              This currently works, but it should really be: >
+                       exists("*strftime")
+
+<              Note that the argument must be a string, not the name of the
+               variable itself.  For example: >
                        exists(bufcount)
 <              This doesn't check for existence of the "bufcount" variable,
                but gets the value of "bufcount", and checks if that exists.
index fe09d80382b69305c81fc75b4aeb8a75a847fca2..56a1ff5c016f29e337435c50a3710292b33d38b8 100644 (file)
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 7.0g.  Last change: 2006 Apr 02
+*gui.txt*       For Vim version 7.0g.  Last change: 2006 May 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -588,12 +588,21 @@ The ":set ic" will not be echoed when using this menu.  Messages from the
 executed command are still given though.  To shut them up too, add a ":silent"
 in the executed command: >
        :menu <silent> Search.Header :exe ":silent normal /Header\r"<CR>
-<
+"<silent>" may also appear just after "<special>" or "<script>".
+
+                                       *:menu-<special>* *:menu-special*
+Define a menu with <> notation for special keys, even though the "<" flag
+may appear in 'cpoptions'.  This is useful if the side effect of setting
+'cpoptions' is not desired.  Example: >
+       :menu <special> Search.Header /Header<CR>
+"<special>" must appear as the very first argument to the ":menu" command or
+just after "<silent>" or "<script>".
+
                                                *:menu-<script>* *:menu-script*
 The "to" part of the menu will be inspected for mappings.  If you don't want
 this, use the ":noremenu" command (or the similar one for a specific mode).
 If you do want to use script-local mappings, add "<script>" as the very first
-argument to the ":menu" command or after "<silent>".
+argument to the ":menu" command or just after "<silent>" or "<special>".
 
                                                        *menu-priority*
 You can give a priority to a menu.  Menus with a higher priority go more to
index 8257838d161e1df85c8e528f32f2e3ab10e8d2a0..48d45502369cd8dfe7a15f6bb65660439e5de3cf 100644 (file)
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0g.  Last change: 2006 May 01
+*insert.txt*    For Vim version 7.0g.  Last change: 2006 May 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -919,6 +919,8 @@ Completion is done by a function that can be defined by the user with the
 
 See below for how the function is called and an example |complete-functions|.
 For remarks about specific filetypes see |compl-omni-filetypes|.
+More completion scripts will appear, check www.vim.org.  Currently there is a
+first version for C++.
 
                                                        *i_CTRL-X_CTRL-O*
 CTRL-X CTRL-O          Guess what kind of item is in front of the cursor and
@@ -1272,32 +1274,21 @@ run |:make| command to detect formatting problems.
 
 HTML flavor                                            *html-flavor*
 
-Default HTML completion depends on filetype. For HTML files it is HTML
-4.01 Transitional (&ft=='html'), for XHTML it is XHTML 1.0 Strict
-(&ft=='xhtml').
+The default HTML completion depends on the filetype.  For HTML files it is
+HTML 4.01 Transitional ('filetype' is "html"), for XHTML it is XHTML 1.0
+Strict ('filetype' is "xhtml").
 
-These are not the only HTML versions. To use another data file and still
-have benefits of custom completion for class, style, etc. attributes set
-b:html_omni_flavor variable. Example (in .vimrc or filetype plugin
-file): >
+When doing completion outside of any other tag you will have possibility to
+choose DOCTYPE and the appropriate data file will be loaded and used for all
+next completions.
 
-       let g:html_omni_flavor = 'xhtml10s'
+More about format of data file in |xml-omni-datafile|. Some of the data files
+may be found on the Vim website (|www|).
 
-(Completion data file for HTML 4.01 Strict is also provided by Vim
-distribution.)
-
-Data for HTML completion will be read from 'autoload/xml/html10s.vim' file
-located somewhere in 'runtimepath'.
-
-Note: HTML completion files are also located in 'autoload/xml'
-directory.
-
-More about format of data file in |xml-omni-datafile|. Some of data
-files may in future be found on vim-online site (|www|).
-
-Note that b:html_omni_flavor may point to file with any XML data.  This
-makes possible to mix PHP (|ft-php-omni|) completion with whatever XML
-dialect (assuming you have data file for it).
+Note that b:html_omni_flavor may point to a file with any XML data.  This
+makes possible to mix PHP (|ft-php-omni|) completion with any XML dialect
+(assuming you have data file for it).  Without setting that variable XHTML 1.0
+Strict will be used.
 
 
 JAVASCRIPT                                            *ft-javascript-omni*
@@ -1486,86 +1477,100 @@ PHP code and SQL code at the same time.
 
 XML                                                    *ft-xml-omni*
 
-Vim 7 provides mechanism to context aware completion of XML files.  It depends
-on special |xml-omni-datafile| and two commands: |:XMLns| and |:XMLent|.
-Features are:
+Vim 7 provides a mechanism for context aware completion of XML files.  It
+depends on a special |xml-omni-datafile| and two commands: |:XMLns| and
+|:XMLent|.  Features are:
 
-- after "<" complete tag name depending on context (no div suggest
-  inside of an a tag)
-- inside of tag complete proper attributes (no width attribute for an
-  a tag)
-- when attribute has limited number of possible values help to complete
+- after "<" complete the tag name, depending on context
+- inside of a tag complete proper attributes
+- when an attribute has a limited number of possible values help to complete
   them
-- complete names of entities (defined in |xml-omni-datafile| and in current
-  file with "<!ENTITY" declarations
+- complete names of entities (defined in |xml-omni-datafile| and in the
+  current file with "<!ENTITY" declarations)
 - when used after "</" CTRL-X CTRL-O will close the last opened tag
 
 Format of XML data file                                        *xml-omni-datafile*
 
-Vim distribution provides two data files as examples (xhtml10s.vim, xsl.vim)
-
-XML data files are stored in "autoload/xml" directory in 'runtimepath'.  They
-have meaningful name which will be used in commands. It should be unique name
-which will not create conflicts in future. For example name xhtml10s.vim means
-it is data file for XHTML 1.0 Strict.
+XML data files are stored in the "autoload/xml" directory in 'runtimepath'.
+Vim distribution provides examples of data files in the
+"$VIMRUNTIME/autoload/xml" directory.  They have a meaningful name which will
+be used in commands.  It should be a unique name which will not create
+conflicts.  For example, the name xhtml10s.vim means it is the data file for
+XHTML 1.0 Strict.
 
-File contains one variable with fixed name: g:xmldata_xhtml10s . It is
-compound from two parts:
+Each file contains a variable with a name like g:xmldata_xhtml10s . It is
+compound from two parts:
 
-1. "g:xmldata_"  general prefix
-2. "xhtml10s"    name of file and name of described XML dialect
+1. "g:xmldata_"  general prefix, constant for all data files
+2. "xhtml10s"    the name of the file and the name of the described XML
+                dialect; it will be used as an argument for the |:XMLns|
+                command
 
 Part two must be exactly the same as name of file.
 
-Variable is data structure in form of |Dictionary|. Keys are tag names and
-values are two element |List|. First element of List is also List with names
-of possible children, second element is |Dictionary| with names of attributes
-as keys and possible values of attributes as values. Example: >
-
-    let g:xmldata_crippledhtml = {
-    \ "html":
-    \ [ ["body", "head"], {"id": [], "xmlns": ["http://www.w3.org/1999/xhtml"],
-    \ "lang": [], "xml:lang": [], "dir": ["ltr", "rtl"]}],
-    \ "script":
-    \ [ [], {"id": [], "charset": [], "type": ["text/javascript"], "src": [],
-    \ "defer": ["BOOL"], "xml:space": ["preserve"]}],
-    \ "meta":
-    \ [ [], {"id": [], "http-equiv": [], "name": [], "content": [], "scheme":
-    \ [], "lang": [], "xml:lang": [], "dir": ["ltr", "rtl"]}]
-    \ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"]},
+The variable is a |Dictionary|.  Keys are tag names and each value is a two
+element |List|.  The first element of the List is also a List with the names
+of possible children.  The second element is a |Dictionary| with the names of
+attributes as keys and the possible values of attributes as values.  Example: >
+
+    let g:xmldata_crippled = {
+    \ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"],
+    \ 'vimxmlroot': ['tag1'],
+    \ 'tag1':
+    \ [ ['childoftag1a', 'childoftag1b'], {'attroftag1a': [],
+    \ 'attroftag1b': ['valueofattr1', 'valueofattr2']}],
+    \ 'childoftag1a':
+    \ [ [], {'attrofchild': ['attrofchild']}],
+    \ 'childoftag1b':
+    \ [ ['childoftag1a'], {'attrofchild': []}],
     \ "vimxmltaginfo": {
-    \ 'meta': ['/>', '']},
-    \ "vimxmlattrinfo": {
-    \ 'http-equiv': ['ContentType', '']}
-
-This example should be put in "autoload/xml/crippledhtml.vim" file.
-
-In example are visible four special elements:
-
-1. "vimxmlentities" - special key with List containing entities of this XML
+    \ 'tag1': ['Menu info', 'Long information visible in preview window']},
+    \ 'vimxmlattrinfo': {
+    \ 'attrofchild': ['Menu info', 'Long information visible in preview window']}}
+
+This example would be put in the "autoload/xml/crippled.vim" file and could
+help to write this file: >
+
+    <tag1 attroftag1b="valueofattr1">
+        <childoftag1a attrofchild>
+                &amp; &lt;
+        </childoftag1a>
+        <childoftag1b attrofchild="5">
+            <childoftag1a>
+                &gt; &apos; &quot;
+            </childoftag1a>
+        </childoftag1b>
+    </tag1>
+
+In the example four special elements are visible:
+
+1. "vimxmlentities" - a special key with List containing entities of this XML
    dialect.
-2. "BOOL" - value of attribute key showing if attribute should be inserted
-   bare ("defer" vs. 'defer="'). It can be the only element of List of
-   attribute values.
-3. "vimxmltaginfo" - special key with dictionary containing as key tag names,
-   as value two element List for additional menu info and long description.
-4. "vimxmlattrinfo" - special key with dictionary containing as key attribute
-   names, as value two element List for additional menu info and long
+2. If the list containing possible values of attributes has one element and
+   this element is equal to the name of the attribute this attribute will be
+   treated as boolean and inserted as 'attrname' and not as 'attrname="'
+3. "vimxmltaginfo" - a special key with a Dictionary containing tag
+   names as keys and two element List as values, for additional menu info and
+   the long description.
+4. "vimxmlattrinfo" - special key with Dictionary containing attribute names
+   as keys and two element List as values, for additional menu info and long
    description.
 
-Note: Tag names in data file MUST not contain namespace description.  Check
-xsl.vim for example.
+Note: Tag names in the data file MUST not contain a namespace description.
+Check xsl.vim for an example.
+Note: All data and functions are publicly available as global
+variables/functions and can be used for personal editing functions.
 
 
 DTD -> Vim                                                     *dtd2vim*
 
-On |www| is script |dtd2vim| which parses DTD and creates XML data file
+On |www| is the script |dtd2vim| which parses DTD and creates an XML data file
 for Vim XML omni completion.
 
     dtd2vim: http://www.vim.org/scripts/script.php?script_id=1462
 
-Check there and beginning of file for details of usage.
-Script requires perl and:
+Check the beginning of that file for usage details.
+The script requires perl and:
 
     perlSGML: http://savannah.nongnu.org/projects/perlsgml
 
@@ -1574,12 +1579,12 @@ Commands
 
 :XMLns {name} [{namespace}]                                    *:XMLns*
 
-Vim has to know which data file should be used and with which namespace. For
-loading of data file and connecting data with prope namespace use |:XMLns|
-command. First (obligatory) argument is name of data (xhtml10s, xsl). Second
-argument is code of namespace (h, xsl). When used without second argument
-dialect will be used as default - without namespace declaration. For example
-to use XML completion in .xsl files: >
+Vim has to know which data file should be used and with which namespace.  For
+loading of the data file and connecting data with the proper namespace use
+|:XMLns| command.  The first (obligatory) argument is the name of the data
+(xhtml10s, xsl).  The second argument is the code of namespace (h, xsl).  When
+used without a second argument the dialect will be used as default - without
+namespace declaration.  For example to use XML completion in .xsl files: >
 
        :XMLns xhtml10s
        :XMLns xsl xsl
@@ -1587,32 +1592,31 @@ to use XML completion in .xsl files: >
 
 :XMLent {name}                                                 *:XMLent*
 
-By default entities will be completed from data file of default
-namespace. XMLent command should be used in case when there is no
-default namespace: >
+By default entities will be completed from the data file of the default
+namespace.  The XMLent command should be used in case when there is no default
+namespace: >
 
        :XMLent xhtml10s
 
 Usage
 
-While used in situation (after declarations from previous part, | is
+While used in this situation (after declarations from previous part, | is
 cursor position): >
 
        <|
 
-Will complete to appropriate XHTML tag, and in this situation: >
+Will complete to an appropriate XHTML tag, and in this situation: >
 
        <xsl:|
 
-Will complete to appropriate XSL tag.
+Will complete to an appropriate XSL tag.
 
-File xmlcomplete.vim provides through |autoload| mechanism
-GetLastOpenTag function which can be used in XML files to get name of
-last open tag with (b:unaryTagsStack has to be defined): >
-
-       :echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack")
 
+The script xmlcomplete.vim, provided through the |autoload| mechanism,
+has the xmlcomplete#GetLastOpenTag() function which can be used in XML files
+to get the name of the last open tag (b:unaryTagsStack has to be defined): >
 
+       :echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack")
 
 
 
index 23af8b56476ad1fb4f31cd871ec4dffa92d2842e..34bee74436818a4180c3efc3f610449bc855a329 100644 (file)
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 7.0g.  Last change: 2006 Apr 30
+*map.txt*       For Vim version 7.0g.  Last change: 2006 May 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -157,8 +157,9 @@ type "a", then "bar" will get inserted.
 
 1.2 SPECIAL ARGUMENTS                                  *:map-arguments*
 
-"<buffer>", "<silent>", "<script>", "<expr>" and "<unique>" can be used in any
-order.  They must appear right after the command, before any other arguments.
+"<buffer>", "<silent>", "<special>", "<script>", "<expr>" and "<unique>" can
+be used in any order.  They must appear right after the command, before any
+other arguments.
 
                                *:map-local* *:map-<buffer>* *E224* *E225*
 If the first argument to one of these commands is "<buffer>" it will apply to
@@ -185,6 +186,12 @@ Prompts will still be given, e.g., for inputdialog().
 Using "<silent>" for an abbreviation is possible, but will cause redrawing of
 the command line to fail.
 
+                                               *:map-<special>* *:map-special*
+Define a mapping with <> notation for special keys, even though the "<" flag
+may appear in 'cpoptions'.  This is useful if the side effect of setting
+'cpoptions' is not desired.  Example: >
+       :map <special> <F12> /Header<CR>
+<
                                                *:map-<script>* *:map-script*
 If the first argument to one of these commands is "<script>" and it is used to
 define a new mapping or abbreviation, the mapping will only remap characters
index 271ae8784c0a588420824da2cada7f05a3820959..37e440f20303e7aceb85c50f041b2c35b243ddf7 100644 (file)
@@ -1,4 +1,4 @@
-*options.txt*  For Vim version 7.0g.  Last change: 2006 May 02
+*options.txt*  For Vim version 7.0g.  Last change: 2006 May 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -4792,6 +4792,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        completion with CTRL-X CTRL-O. |i_CTRL-X_CTRL-O|
        See |complete-functions| for an explanation of how the function is
        invoked and what it should return.
+       This option is usually set by a filetype plugin.
+       |:filetype-plugin-on|
 
 
                                                *'operatorfunc'* *'opfunc'*
index f3060936bbf63be334c62bbbd478bfe43a713679..5b6025d280c6fb6486b6868cee87bd0f666a0f6d 100644 (file)
@@ -2273,6 +2273,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :map-<expr>    map.txt /*:map-<expr>*
 :map-<script>  map.txt /*:map-<script>*
 :map-<silent>  map.txt /*:map-<silent>*
+:map-<special> map.txt /*:map-<special>*
 :map-<unique>  map.txt /*:map-<unique>*
 :map-alt-keys  map.txt /*:map-alt-keys*
 :map-arguments map.txt /*:map-arguments*
@@ -2283,6 +2284,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :map-operator  map.txt /*:map-operator*
 :map-script    map.txt /*:map-script*
 :map-silent    map.txt /*:map-silent*
+:map-special   map.txt /*:map-special*
 :map-special-chars     map.txt /*:map-special-chars*
 :map-special-keys      map.txt /*:map-special-keys*
 :map-undo      map.txt /*:map-undo*
@@ -2301,10 +2303,12 @@ $VIMRUNTIME     starting.txt    /*$VIMRUNTIME*
 :menu  gui.txt /*:menu*
 :menu-<script> gui.txt /*:menu-<script>*
 :menu-<silent> gui.txt /*:menu-<silent>*
+:menu-<special>        gui.txt /*:menu-<special>*
 :menu-disable  gui.txt /*:menu-disable*
 :menu-enable   gui.txt /*:menu-enable*
 :menu-script   gui.txt /*:menu-script*
 :menu-silent   gui.txt /*:menu-silent*
+:menu-special  gui.txt /*:menu-special*
 :menut mlang.txt       /*:menut*
 :menutrans     mlang.txt       /*:menutrans*
 :menutranslate mlang.txt       /*:menutranslate*
index 1717d99c958e019bb61d2857adcfb10bfb396f1e..dc76f15f96bbdafdc240ec36741d8860f5e86d6e 100644 (file)
@@ -4,80 +4,72 @@
 "
 " Define Mac-standard keyboard shortcuts.
 
-" Save and restore compatible mode.
-let s:save_cpo = &cpo
-set cpo&vim
+" We don't change 'cpoptions' here, because it would not be set properly when
+" a .vimrc file is found later.  Thus don't use line continuation and use
+" <special> in mappings.
 
-nnoremap <D-n> :confirm enew<CR>
-vmap <D-n> <Esc><D-n>gv
-imap <D-n> <C-O><D-n>
-cmap <D-n> <C-C><D-n>
-omap <D-n> <Esc><D-n>
+nnoremap <special> <D-n> :confirm enew<CR>
+vmap <special> <D-n> <Esc><D-n>gv
+imap <special> <D-n> <C-O><D-n>
+cmap <special> <D-n> <C-C><D-n>
+omap <special> <D-n> <Esc><D-n>
 
-nnoremap <D-o> :browse confirm e<CR>
-vmap <D-o> <Esc><D-o>gv
-imap <D-o> <C-O><D-o>
-cmap <D-o> <C-C><D-o>
-omap <D-o> <Esc><D-o>
+nnoremap <special> <D-o> :browse confirm e<CR>
+vmap <special> <D-o> <Esc><D-o>gv
+imap <special> <D-o> <C-O><D-o>
+cmap <special> <D-o> <C-C><D-o>
+omap <special> <D-o> <Esc><D-o>
 
-nnoremap <silent> <D-w> :if winheight(2) < 0 <Bar>
-       \   confirm enew <Bar>
-       \ else <Bar>
-       \   confirm close <Bar>
-       \ endif<CR>
-vmap <D-w> <Esc><D-w>gv
-imap <D-w> <C-O><D-w>
-cmap <D-w> <C-C><D-w>
-omap <D-w> <Esc><D-w>
+nnoremap <silent> <special> <D-w> :if winheight(2) < 0 <Bar> confirm enew <Bar> else <Bar> confirm close <Bar> endif<CR>
+vmap <special> <D-w> <Esc><D-w>gv
+imap <special> <D-w> <C-O><D-w>
+cmap <special> <D-w> <C-C><D-w>
+omap <special> <D-w> <Esc><D-w>
 
-nnoremap <silent> <D-s> :if expand("%") == ""<Bar>browse confirm w<Bar>
-       \ else<Bar>confirm w<Bar>endif<CR>
-vmap <D-s> <Esc><D-s>gv
-imap <D-s> <C-O><D-s>
-cmap <D-s> <C-C><D-s>
-omap <D-s> <Esc><D-s>
+nnoremap <silent> <special> <D-s> :if expand("%") == ""<Bar>browse confirm w<Bar> else<Bar>confirm w<Bar>endif<CR>
+vmap <special> <D-s> <Esc><D-s>gv
+imap <special> <D-s> <C-O><D-s>
+cmap <special> <D-s> <C-C><D-s>
+omap <special> <D-s> <Esc><D-s>
 
-nnoremap <D-S-s> :browse confirm saveas<CR>
-vmap <D-S-s> <Esc><D-s>gv
-imap <D-S-s> <C-O><D-s>
-cmap <D-S-s> <C-C><D-s>
-omap <D-S-s> <Esc><D-s>
+nnoremap <special> <D-S-s> :browse confirm saveas<CR>
+vmap <special> <D-S-s> <Esc><D-s>gv
+imap <special> <D-S-s> <C-O><D-s>
+cmap <special> <D-S-s> <C-C><D-s>
+omap <special> <D-S-s> <Esc><D-s>
 
 " From the Edit menu of SimpleText:
-nnoremap <D-z> u
-vmap <D-z> <Esc><D-z>gv
-imap <D-z> <C-O><D-z>
-cmap <D-z> <C-C><D-z>
-omap <D-z> <Esc><D-z>
+nnoremap <special> <D-z> u
+vmap <special> <D-z> <Esc><D-z>gv
+imap <special> <D-z> <C-O><D-z>
+cmap <special> <D-z> <C-C><D-z>
+omap <special> <D-z> <Esc><D-z>
 
-vnoremap <D-x> "+x
+vnoremap <special> <D-x> "+x
 
-vnoremap <D-c> "+y
+vnoremap <special> <D-c> "+y
 
-cnoremap <D-c> <C-Y>
+cnoremap <special> <D-c> <C-Y>
 
-nnoremap <D-v> "+gP
-cnoremap <D-v> <C-R>+
-execute 'vnoremap <script> <D-v>' paste#paste_cmd['v']
-execute 'inoremap <script> <D-v>' paste#paste_cmd['i']
+nnoremap <special> <D-v> "+gP
+cnoremap <special> <D-v> <C-R>+
+execute 'vnoremap <script> <special> <D-v>' paste#paste_cmd['v']
+execute 'inoremap <script> <special> <D-v>' paste#paste_cmd['i']
 
-nnoremap <silent> <D-a> :if &slm != ""<Bar>exe ":norm gggH<C-O>G"<Bar>
-       \ else<Bar>exe ":norm ggVG"<Bar>endif<CR>
-vmap <D-a> <Esc><D-a>
-imap <D-a> <Esc><D-a>
-cmap <D-a> <C-C><D-a>
-omap <D-a> <Esc><D-a>
+nnoremap <silent> <special> <D-a> :if &slm != ""<Bar>exe ":norm gggH<C-O>G"<Bar> else<Bar>exe ":norm ggVG"<Bar>endif<CR>
+vmap <special> <D-a> <Esc><D-a>
+imap <special> <D-a> <Esc><D-a>
+cmap <special> <D-a> <C-C><D-a>
+omap <special> <D-a> <Esc><D-a>
 
-nnoremap <D-f> /
-vmap <D-f> <Esc><D-f>
-imap <D-f> <Esc><D-f>
-cmap <D-f> <C-C><D-f>
-omap <D-f> <Esc><D-f>
+nnoremap <special> <D-f> /
+vmap <special> <D-f> <Esc><D-f>
+imap <special> <D-f> <Esc><D-f>
+cmap <special> <D-f> <C-C><D-f>
+omap <special> <D-f> <Esc><D-f>
 
-nnoremap <D-g> n
-vmap <D-g> <Esc><D-g>
-imap <D-g> <C-O><D-g>
-cmap <D-g> <C-C><D-g>
-omap <D-g> <Esc><D-g>
-
-let &cpo = s:save_cpo
+nnoremap <special> <D-g> n
+vmap <special> <D-g> <Esc><D-g>
+imap <special> <D-g> <C-O><D-g>
+cmap <special> <D-g> <C-C><D-g>
+omap <special> <D-g> <Esc><D-g>
index 6a61ed261ec4913e125ef0dc6a8e3abb70742dcf..8b63e48b0478de137a68acb532399e5047596314 100644 (file)
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:    C#
-" Maintainer:  Johannes Zellner <johannes@zellner.org>
-" Last Change: Mo, 24 Apr 2006 10:11:07 CEST
+" Maintainer:  Anduin Withers <awithers@anduin.com>
+" Former Maintainer:   Johannes Zellner <johannes@zellner.org>
+" Last Change: Sun Apr 30 19:26:18 PDT 2006
 " Filenames:   *.cs
 " $Id$
 "
@@ -38,11 +39,16 @@ syn keyword csException                     try catch finally throw
 " TODO:
 syn keyword csUnspecifiedStatement     as base checked event fixed in is lock new operator out params ref sizeof stackalloc this typeof unchecked unsafe using
 " TODO:
-syn keyword csUnsupportedStatement     get set add remove value
+syn keyword csUnsupportedStatement     add remove value
 " TODO:
 syn keyword csUnspecifiedKeyword       explicit implicit
 
 
+" Contextual Keywords
+syn match csContextualStatement        /\<yield[[:space:]\n]\+\(return\|break\)/me=s+5
+syn match csContextualStatement        /\<partial[[:space:]\n]\+\(class\|struct\|interface\)/me=s+7
+syn match csContextualStatement        /\<\(get\|set\)[[:space:]\n]*{/me=s+3
+syn match csContextualStatement        /\<where\>[^:]\+:/me=s+5
 
 " Comments
 "
@@ -79,8 +85,10 @@ hi def link xmlRegion Comment
 
 " [1] 9.5 Pre-processing directives
 syn region     csPreCondit
-    \ start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\|region\|endregion\)"
+    \ start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\)"
     \ skip="\\$" end="$" contains=csComment keepend
+syn region     csRegion matchgroup=csPreCondit start="^\s*#\s*region.*$"
+    \ end="^\s*#\s*endregion" transparent fold contains=TOP
 
 
 
@@ -115,6 +123,7 @@ hi def link csException                     Exception
 hi def link csUnspecifiedStatement     Statement
 hi def link csUnsupportedStatement     Statement
 hi def link csUnspecifiedKeyword       Keyword
+hi def link csContextualStatement      Statement
 hi def link csOperatorError            Error
 
 hi def link csTodo                     Todo
index 52873e977c4917ca87e82a37b75c6364b764d76a..2e387421d7dec071640e53ea67e6469e3c2f1af8 100644 (file)
@@ -52,6 +52,9 @@ syn keyword pythonPreCondit   import from as
 syn match   pythonComment      "#.*$" contains=pythonTodo
 syn keyword pythonTodo         TODO FIXME XXX contained
 
+" Decorators (new in Python 2.4)
+syn match   pythonDecorator    "@" display nextgroup=pythonFunction skipwhite
+
 " strings
 syn region pythonString                matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape
 syn region pythonString                matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape
@@ -85,6 +88,8 @@ endif
 
 if exists("python_highlight_builtins")
   " builtin functions, types and objects, not really part of the syntax
+  syn keyword pythonBuiltin    True False bool enumerate set frozenset help
+  syn keyword pythonBuiltin    reversed sorted sum
   syn keyword pythonBuiltin    Ellipsis None NotImplemented __import__ abs
   syn keyword pythonBuiltin    apply buffer callable chr classmethod cmp
   syn keyword pythonBuiltin    coerce compile complex delattr dict dir divmod
@@ -110,6 +115,8 @@ if exists("python_highlight_exceptions")
   syn keyword pythonException  StandardError StopIteration SyntaxError
   syn keyword pythonException  SyntaxWarning SystemError SystemExit TabError
   syn keyword pythonException  TypeError UnboundLocalError UnicodeError
+  syn keyword pythonException  UnicodeEncodeError UnicodeDecodeError
+  syn keyword pythonException  UnicodeTranslateError
   syn keyword pythonException  UserWarning ValueError Warning WindowsError
   syn keyword pythonException  ZeroDivisionError
 endif
@@ -151,6 +158,7 @@ if version >= 508 || !exists("did_python_syn_inits")
   HiLink pythonPreCondit       PreCondit
   HiLink pythonComment         Comment
   HiLink pythonTodo            Todo
+  HiLink pythonDecorator       Define
   if exists("python_highlight_numbers")
     HiLink pythonNumber        Number
   endif
index 651a39b913311f0ab64e501eb32f9ec7178a9f2d..44814aad86183f3927d4a407a97ad725ad9fe664 100644 (file)
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:       VRML97
 " Modified from:   VRML 1.0C by David Brown <dbrown@cgs.c4.gmeds.com>
-" Maintainer:     Gregory Seidman <gseidman@acm.org>
-" URL:            http://www.cs.brown.edu/~gss/vim/syntax/vrml.vim
-" Last change:    2003 May 11
+" Maintainer:     vacancy!
+" Former Maintainer:    Gregory Seidman <gsslist+vim@anthropohedron.net>
+" Last change:    2006 May 03
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -195,7 +195,7 @@ syn sync minlines=1
 if version >= 600
 "FOLDS!
   syn sync fromstart
-  setlocal foldmethod=syntax
+  "setlocal foldmethod=syntax
   syn region braceFold start="{" end="}" transparent fold contains=TOP
   syn region bracketFold start="\[" end="]" transparent fold contains=TOP
   syn region VRMLString start=+"+ skip=+\\\\\|\\"+ end=+"+ fold contains=VRMLSpecial,VRMLjScriptString
index 5891f83f5de56673dca06429afdb3df67bb91c60..368d65c77bb045f4e770980080c31792b38cef23 100644 (file)
@@ -4999,7 +4999,7 @@ uc_add_command(name, name_len, rep, argt, def, flags, compl, compl_arg, force)
     char_u     *rep_buf = NULL;
     garray_T   *gap;
 
-    replace_termcodes(rep, &rep_buf, FALSE, FALSE);
+    replace_termcodes(rep, &rep_buf, FALSE, FALSE, FALSE);
     if (rep_buf == NULL)
     {
        /* Can't replace termcodes - try using the string as is */
@@ -9854,18 +9854,6 @@ makeopens(fd, dirnow)
                                                      || put_eol(fd) == FAIL))
            return FAIL;
 
-       /*
-        * Wipe out an empty unnamed buffer we started in.
-        */
-       if (put_line(fd, "if exists('s:wipebuf')") == FAIL)
-           return FAIL;
-       if (put_line(fd, "  exe 'bwipe ' . s:wipebuf") == FAIL)
-           return FAIL;
-       if (put_line(fd, "endif") == FAIL)
-           return FAIL;
-       if (put_line(fd, "unlet! s:wipebuf") == FAIL)
-           return FAIL;
-
        /*
         * Restore window sizes again after jumping around in windows, because
         * the current window has a minimum size while others may not.
@@ -9873,11 +9861,6 @@ makeopens(fd, dirnow)
        if (nr > 1 && ses_winsizes(fd, restore_size) == FAIL)
            return FAIL;
 
-       /* Re-apply 'winheight', 'winwidth' and 'shortmess'. */
-       if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s",
-                              p_wh, p_wiw, p_shm) < 0 || put_eol(fd) == FAIL)
-           return FAIL;
-
        /* Don't continue in another tab page when doing only the current one
         * or when at the last tab page. */
        if (!(ssop_flags & SSOP_TABPAGES) || curtab->tp_next == NULL)
@@ -9893,6 +9876,22 @@ makeopens(fd, dirnow)
            return FAIL;
     }
 
+    /*
+     * Wipe out an empty unnamed buffer we started in.
+     */
+    if (put_line(fd, "if exists('s:wipebuf')") == FAIL)
+       return FAIL;
+    if (put_line(fd, "  exe 'bwipe ' . s:wipebuf") == FAIL)
+       return FAIL;
+    if (put_line(fd, "endif") == FAIL)
+       return FAIL;
+    if (put_line(fd, "unlet! s:wipebuf") == FAIL)
+       return FAIL;
+
+    /* Re-apply 'winheight', 'winwidth' and 'shortmess'. */
+    if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s",
+                              p_wh, p_wiw, p_shm) < 0 || put_eol(fd) == FAIL)
+       return FAIL;
 
     /*
      * Lastly, execute the x.vim file if it exists.
index 88e724ff31c8030fe250a7a1e79b4072791ceef4..7d2cfd786c4849695cd4c95512d4123975a6b1a9 100644 (file)
@@ -3034,6 +3034,7 @@ do_map(maptype, arg, mode, abbrev)
     mapblock_T **map_table;
     int                unique = FALSE;
     int                silent = FALSE;
+    int                special = FALSE;
 #ifdef FEAT_EVAL
     int                expr = FALSE;
 #endif
@@ -3075,6 +3076,16 @@ do_map(maptype, arg, mode, abbrev)
            continue;
        }
 
+       /*
+        * Check for "<special>": accept special keys in <>
+        */
+       if (STRNCMP(keys, "<special>", 9) == 0)
+       {
+           keys = skipwhite(keys + 9);
+           special = TRUE;
+           continue;
+       }
+
 #ifdef FEAT_EVAL
        /*
         * Check for "<script>": remap script-local mappings only
@@ -3147,13 +3158,13 @@ do_map(maptype, arg, mode, abbrev)
      * replace_termcodes() also removes CTRL-Vs and sometimes backslashes.
      */
     if (haskey)
-       keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE);
+       keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, special);
     if (hasarg)
     {
        if (STRICMP(rhs, "<nop>") == 0)     /* "<Nop>" means nothing */
            rhs = (char_u *)"";
        else
-           rhs = replace_termcodes(rhs, &arg_buf, FALSE, TRUE);
+           rhs = replace_termcodes(rhs, &arg_buf, FALSE, TRUE, special);
     }
 
 #ifdef FEAT_FKMAP
@@ -3819,7 +3830,7 @@ map_to_exists(str, modechars, abbr)
     char_u     *buf;
     int                retval;
 
-    rhs = replace_termcodes(str, &buf, FALSE, TRUE);
+    rhs = replace_termcodes(str, &buf, FALSE, TRUE, FALSE);
 
     if (vim_strchr(modechars, 'n') != NULL)
        mode |= NORMAL;
index 0c90539b87cb1f2aff30cd80b897fd4989d4fe8b..3a07cf1567f3c55323cc9a39ce8214c500810d54 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -4544,6 +4544,12 @@ gui_mouse_moved(x, y)
        if (wp == curwin || wp == NULL)
            return;     /* still in the same old window, or none at all */
 
+#ifdef FEAT_WINDOWS
+       /* Ignore position in the tab pages line. */
+       if (Y_2_ROW(y) < tabline_height())
+           return;
+#endif
+
        /*
         * format a mouse click on status line input
         * ala gui_send_mouse_event(0, x, y, 0, 0);
@@ -4597,7 +4603,11 @@ gui_mouse_correct()
     /* Don't move the mouse when it's left or right of the Vim window */
     if (x < 0 || x > Columns * gui.char_width)
        return;
+# ifdef FEAT_WINDOWS
+    if (Y_2_ROW(y) >= tabline_height())
+# else
     if (y >= 0)
+# endif
        wp = xy2win(x, y);
     if (wp != curwin && wp != NULL)    /* If in other than current window */
     {
index 59c786a42357832ae591e90d1bc35a44d6b83515..45ee335a2670b217672b52e2d4bfbbd96773b89b 100644 (file)
@@ -314,7 +314,7 @@ CVim::SendKeys(BSTR keys)
     }
 
     /* Translate key codes like <Esc> */
-    str = replace_termcodes((char_u *)buffer, &ptr, FALSE, TRUE);
+    str = replace_termcodes((char_u *)buffer, &ptr, FALSE, TRUE, FALSE);
 
     /* If ptr was set, then a new buffer was allocated,
      * so we can free the old one.
index 8d5dcacb66b35275402025b7cffd9d95365f01b4..1234bac90c936cdb450eee823e5e5b13760de1d9 100644 (file)
@@ -6420,7 +6420,7 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
     {
        if (*p_pt)
        {
-           (void)replace_termcodes(p_pt, &p, TRUE, TRUE);
+           (void)replace_termcodes(p_pt, &p, TRUE, TRUE, FALSE);
            if (p != NULL)
            {
                if (new_value_alloced)
index 7b53749739e901b61413582216ba05f929b845ce..9ce594eadf310973b9716e75738bbc8e1b67d5cd 100644 (file)
@@ -51,7 +51,7 @@ extern char_u *get_termcode __ARGS((int i));
 extern void del_termcode __ARGS((char_u *name));
 extern void set_mouse_topline __ARGS((win_T *wp));
 extern int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
-extern char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt));
+extern char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
 extern int find_term_bykeys __ARGS((char_u *src));
 extern void show_termcodes __ARGS((void));
 extern int show_one_termcode __ARGS((char_u *name, char_u *code, int printit));
index 4f5fe24802c14781c71aabe9831f108c7cedab27..19e03c4da747685095b9d11437031b12a4ac8dbe 100644 (file)
@@ -118,6 +118,7 @@ static void qf_fmt_text __ARGS((char_u *text, char_u *buf, int bufsize));
 static void    qf_clean_dir_stack __ARGS((struct dir_stack_T **));
 #ifdef FEAT_WINDOWS
 static int     qf_win_pos_update __ARGS((qf_info_T *qi, int old_qf_index));
+static int     is_qf_win __ARGS((win_T *win, qf_info_T *qi));
 static win_T   *qf_find_win __ARGS((qf_info_T *qi));
 static buf_T   *qf_find_buf __ARGS((qf_info_T *qi));
 static void    qf_update_buffer __ARGS((qf_info_T *qi));
@@ -2199,6 +2200,7 @@ ex_copen(eap)
     int                height;
     win_T      *win;
     tabpage_T  *prevtab = curtab;
+    buf_T      *qf_buf;
 
     if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
     {
@@ -2231,6 +2233,8 @@ ex_copen(eap)
        win_goto(win);
     else
     {
+       qf_buf = qf_find_buf(qi);
+
        /* The current window becomes the previous window afterwards. */
        win = curwin;
 
@@ -2256,13 +2260,21 @@ ex_copen(eap)
            win->w_llist->qf_refcount++;
        }
 
-       (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE);
-       /* switch off 'swapfile' */
-       set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
-       set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
+       if (qf_buf != NULL)
+           /* Use the existing quickfix buffer */
+           (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
+                                                    ECMD_HIDE + ECMD_OLDBUF);
+       else
+       {
+           /* Create a new quickfix buffer */
+           (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE);
+           /* switch off 'swapfile' */
+           set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
+           set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
                                                                   OPT_LOCAL);
-       set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
-       set_option_value((char_u *)"diff", 0L, (char_u *)"", OPT_LOCAL);
+           set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
+           set_option_value((char_u *)"diff", 0L, (char_u *)"", OPT_LOCAL);
+       }
 
        /* Only set the height when still in the same tab page and there is no
         * window to the side. */
@@ -2351,8 +2363,32 @@ qf_win_pos_update(qi, old_qf_index)
     return win != NULL;
 }
 
+/*
+ * Check whether the given window is displaying the specified quickfix/location
+ * list buffer
+ */
+    static int
+is_qf_win(win, qi)
+    win_T      *win;
+    qf_info_T  *qi;
+{
+    /*
+     * A window displaying the quickfix buffer will have the w_llist_ref field
+     * set to NULL.
+     * A window displaying a location list buffer will have the w_llist_ref
+     * pointing to the location list.
+     */
+    if (bt_quickfix(win->w_buffer))
+       if ((qi == &ql_info && win->w_llist_ref == NULL)
+               || (qi != &ql_info && win->w_llist_ref == qi))
+           return TRUE;
+
+    return FALSE;
+}
+
 /*
  * Find a window displaying the quickfix/location list 'qi'
+ * Searches in only the windows opened in the current tab.
  */
     static win_T *
 qf_find_win(qi)
@@ -2360,33 +2396,29 @@ qf_find_win(qi)
 {
     win_T      *win;
 
-    /*
-     * When searching for the quickfix buffer, find a window
-     * with w_llist_ref set to NULL.
-     * When searching for the location list buffer, find a window
-     * with w_llist_ref pointing to the supplied location list.
-     */
     FOR_ALL_WINDOWS(win)
-       if (bt_quickfix(win->w_buffer))
-           if ((qi == &ql_info && win->w_llist_ref == NULL)
-               || (qi != &ql_info && win->w_llist_ref == qi))
-               break;
+       if (is_qf_win(win, qi))
+           break;
 
     return win;
 }
 
 /*
- * Find quickfix buffer.
+ * Find a quickfix buffer.
+ * Searches in windows opened in all the tabs.
  */
     static buf_T *
 qf_find_buf(qi)
     qf_info_T  *qi;
 {
+    tabpage_T  *tp;
     win_T      *win;
 
-    win = qf_find_win(qi);
+    FOR_ALL_TAB_WINDOWS(tp, win)
+       if (is_qf_win(win, qi))
+           return win->w_buffer;
 
-    return (win != NULL) ? win->w_buffer: NULL;
+    return NULL;
 }
 
 /*
index 5e375000510b4d0a0808ff9edaacd78a808c75ae..757efc6acf355b67153276eef01025feffcb43d2 100644 (file)
@@ -7031,7 +7031,7 @@ spell_read_wordfile(spin, fname)
            continue;   /* empty or blank line */
        rline[l] = NUL;
 
-       /* Convert from "=encoding={encoding}" to 'encoding' when needed. */
+       /* Convert from "/encoding={encoding}" to 'encoding' when needed. */
        vim_free(pc);
 #ifdef FEAT_MBYTE
        if (spin->si_conv.vc_type != CONV_NONE)
@@ -7069,7 +7069,7 @@ spell_read_wordfile(spin, fname)
                    char_u      *enc;
 
                    /* Setup for conversion to 'encoding'. */
-                   line += 10;
+                   line += 9;
                    enc = enc_canonize(line);
                    if (enc != NULL && !spin->si_ascii
                            && convert_setup(&spin->si_conv, enc,
index 99dc1b0c9a2071052e766db4b9cb2a9586251879..7597c93bd905e814cbccb1ad212883abb0e8a2ce 100644 (file)
@@ -4945,12 +4945,13 @@ check_termcode(max_offset, buf, buflen)
  * nothing).  When 'cpoptions' does not contain 'B', a backslash can be used
  * instead of a CTRL-V.
  */
-    char_u  *
-replace_termcodes(from, bufp, from_part, do_lt)
+    char_u *
+replace_termcodes(from, bufp, from_part, do_lt, special)
     char_u     *from;
     char_u     **bufp;
     int                from_part;
     int                do_lt;          /* also translate <lt> */
+    int                special;        /* always accept <key> notation */
 {
     int                i;
     int                slen;
@@ -4963,7 +4964,7 @@ replace_termcodes(from, bufp, from_part, do_lt)
     char_u     *result;        /* buffer for resulting string */
 
     do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
-    do_special = (vim_strchr(p_cpo, CPO_SPECI) == NULL);
+    do_special = (vim_strchr(p_cpo, CPO_SPECI) == NULL) || special;
     do_key_code = (vim_strchr(p_cpo, CPO_KEYCODE) == NULL);
 
     /*
index d37c326db8bde70ff5a0dc63dca8ee8f2ca414d2..f1c2dc5aa0e0d91abf6843e5ea2d6d5db8a39d56 100644 (file)
@@ -35,6 +35,6 @@
  */
 #define VIM_VERSION_NODOT      "vim70g"
 #define VIM_VERSION_SHORT      "7.0g"
-#define VIM_VERSION_MEDIUM     "7.0g-01 BETA"
-#define VIM_VERSION_LONG       "VIM - Vi IMproved 7.0g01 BETA (2006 May 2)"
-#define VIM_VERSION_LONG_DATE  "VIM - Vi IMproved 7.0g01 BETA (2006 May 2, compiled "
+#define VIM_VERSION_MEDIUM     "7.0g02 BETA"
+#define VIM_VERSION_LONG       "VIM - Vi IMproved 7.0g02 BETA (2006 May 3)"
+#define VIM_VERSION_LONG_DATE  "VIM - Vi IMproved 7.0g02 BETA (2006 May 3, compiled "
index 09c638e0ce0e2222c7e2c1f90673034ea1d1b283..cbcdd4eb91631c3f0e046a7169d0bda8cdbe63fc 100644 (file)
@@ -5195,6 +5195,7 @@ win_new_height(wp, height)
     int                sline, line_size;
     int                space;
     int                did_below = FALSE;
+    int                old_height = wp->w_height;
 #define FRACTION_MULT  16384L
 
     /* Don't want a negative height.  Happens when splitting a tiny window.
@@ -5238,9 +5239,15 @@ win_new_height(wp, height)
        }
        else
        {
-           space = height;
+           space = height - 1;
+
            while (lnum > 1)
            {
+               /* When using "~" lines stop when at the old topline, don't
+                * scroll down. */
+               if (did_below && height < old_height && lnum <= wp->w_topline)
+                   sline = 0;
+
                space -= line_size;
                if (space > 0 && sline <= 0 && !did_below)
                {