r116 - in trunk/vim/debian: . patches

Stefano Zacchiroli zack@costa.debian.org
Sat, 26 Mar 2005 12:55:46 +0000


Author: zack
Date: 2005-03-26 12:55:45 +0000 (Sat, 26 Mar 2005)
New Revision: 116

Added:
   trunk/vim/debian/compat
   trunk/vim/debian/patches/118_ocaml.vim.diff
   trunk/vim/debian/patches/302_message.c.diff
Modified:
   trunk/vim/debian/changelog
   trunk/vim/debian/rules
Log:
- patches: added 118_ocaml and 302_message
- debian/rules: uses debian/compat, fix in make_patch, added cmdline VARIANT override
see changelog for more info


Modified: trunk/vim/debian/changelog
===================================================================
--- trunk/vim/debian/changelog	2005-03-26 12:53:43 UTC (rev 115)
+++ trunk/vim/debian/changelog	2005-03-26 12:55:45 UTC (rev 116)
@@ -38,6 +38,16 @@
     + Fixed wrong highlighting of comments in syntax/sh.vim when comments
       occur between switches of case. (closes: #269325)
 
+  * Stefano Zacchiroli <zack@debian.org>:
+    + Added patch 302_message.c.diff (CTRL-C quit loops in range commands)
+      (closes: #295639)
+    + Added patch 118_ocaml.vim.diff (ship latest version of ocaml runtime
+      support files: {syntax,ftplugin,ident}/ocaml.vim)
+    + debian/rules
+      - uses debian/compat in place of debian/rules' DH_COMPAT
+      - added support for command line VARIANT variable to override VARIANTS
+      - ignores diff error in "make_patch" target since diff usually returns 1
+
  -- Norbert Tretkowski <nobse@debian.org>  Sat, 26 Mar 2005 11:14:08 +0100
 
 vim (1:6.3-067+2) unstable; urgency=medium

Added: trunk/vim/debian/compat
===================================================================
--- trunk/vim/debian/compat	2005-03-26 12:53:43 UTC (rev 115)
+++ trunk/vim/debian/compat	2005-03-26 12:55:45 UTC (rev 116)
@@ -0,0 +1 @@
+4

Added: trunk/vim/debian/patches/118_ocaml.vim.diff
===================================================================
--- trunk/vim/debian/patches/118_ocaml.vim.diff	2005-03-26 12:53:43 UTC (rev 115)
+++ trunk/vim/debian/patches/118_ocaml.vim.diff	2005-03-26 12:55:45 UTC (rev 116)
@@ -0,0 +1,871 @@
+diff -urN vim63/runtime/ftplugin/ocaml.vim vim63.new/runtime/ftplugin/ocaml.vim
+--- vim63/runtime/ftplugin/ocaml.vim	2003-05-11 21:09:36.000000000 +0200
++++ vim63.new/runtime/ftplugin/ocaml.vim	2005-03-24 22:40:02.000000000 +0100
+@@ -1,36 +1,52 @@
+-" Vim settings file
+-" Language:     OCaml
+-" Maintainers:  Mike Leary    <leary@nwlink.com>
+-"		Markus Mottl  <markus@oefai.at>
+-" URL:		http://www.ai.univie.ac.at/~markus/vim/ftplugin/ocaml.vim
+-" Last Change:	2003 May 11
+-"		2001 Nov 01 - added local bindings for inserting
+-"			      type holes using 'assert false' (MM)
+-"		2001 Oct 02 - insert spaces in line comments (MM)
++" Language:    OCaml
++" Maintainer:  David Baelde        <firstname.name@ens-lyon.org>
++"              Mike Leary          <leary@nwlink.com>
++"              Markus Mottl        <markus.mottl@gmail.com>
++"              Stefano Zacchiroli  <zack@bononia.it>
++" URL:         http://www.ocaml.info/vim/ftplugin/ocaml.vim
++" Last Change: 2005 March 24
++" Changelog:
++"              - Made displaying type information use LocalLeader
++"                rather than ','
++"
++" omlet.vim plugins -- utilities for working on OCaml files with VIm
++" Copyright (C) 2005 D. Baelde, M. Leary, M. Mottl, S. Zacchiroli
++"
++" This program is free software; you can redistribute it and/or modify
++" it under the terms of the GNU General Public License as published by
++" the Free Software Foundation; either version 2 of the License, or
++" (at your option) any later version.
++"
++" This program is distributed in the hope that it will be useful,
++" but WITHOUT ANY WARRANTY; without even the implied warranty of
++" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++" GNU General Public License for more details.
++"
++" You should have received a copy of the GNU General Public License
++" along with this program; if not, write to the Free Software
++" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++" Folding is activated if ocaml_folding is set
++" Do these settings once per buffer
+ 
+-" Only do these settings when not done yet for this buffer
+ if exists("b:did_ftplugin")
+   finish
+ endif
++let b:did_ftplugin=1
+ 
+-" Don't do other file type settings for this buffer
+-let b:did_ftplugin = 1
+-
++" Error handling -- helps moving where the compiler wants you to go
+ set cpo-=C
+-
+-" Error formats
+ setlocal efm=
+-  \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
+-  \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
+-  \%+EReference\ to\ unbound\ regexp\ name\ %m,
+-  \%Eocamlyacc:\ e\ -\ line\ %l\ of\ \"%f\"\\,\ %m,
+-  \%Wocamlyacc:\ w\ -\ %m,
+-  \%-Zmake%.%#,
+-  \%C%m
++      \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
++      \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
++      \%+EReference\ to\ unbound\ regexp\ name\ %m,
++      \%Eocamlyacc:\ e\ -\ line\ %l\ of\ \"%f\"\\,\ %m,
++      \%Wocamlyacc:\ w\ -\ %m,
++      \%-Zmake%.%#,
++      \%C%m
+ 
+ " Add mappings, unless the user didn't want this.
+ if !exists("no_plugin_maps") && !exists("no_ocaml_maps")
+-  " Uncommenting
++  " (un)commenting
+   if !hasmapto('<Plug>Comment')
+     nmap <buffer> <LocalLeader>c <Plug>LUncomOn
+     vmap <buffer> <LocalLeader>c <Plug>BUncomOn
+@@ -47,3 +63,320 @@
+     iabbrev <buffer> ASS (assert false)
+   endif
+ endif
++
++" Let % jump between structure elements (due to Issac Trotts)
++let b:mw='\<let\>:\<and\>:\(\<in\>\|;;\),'
++let b:mw=b:mw . '\<if\>:\<then\>:\<else\>,\<do\>:\<done\>,'
++let b:mw=b:mw . '\<\(object\|sig\|struct\|begin\)\>:\<end\>'
++let b:match_words=b:mw
++
++" switching between interfaces (.mli) and implementations (.ml)
++if !exists("g:did_ocaml_switch")
++  let g:did_ocaml_switch = 1
++  map <LocalLeader>s :call OCaml_switch(0)<CR>
++  map <LocalLeader>S :call OCaml_switch(1)<CR>
++  fun OCaml_switch(newwin)
++    if (match(bufname(""), "\\.mli$") >= 0)
++      let fname = substitute(bufname(""), "\\.mli$", ".ml", "")
++      if (a:newwin == 1)
++        exec "new " . fname
++      else
++        exec "arge " . fname
++      endif
++    elseif (match(bufname(""), "\\.ml$") >= 0)
++      let fname = bufname("") . "i"
++      if (a:newwin == 1)
++        exec "new " . fname
++      else
++        exec "arge " . fname
++      endif
++    endif
++  endfun
++endif
++
++" Folding support
++
++if exists("g:ocaml_folding")
++  setlocal foldmethod=expr
++  setlocal foldexpr=OMLetFoldLevel(v:lnum)
++endif
++
++if exists("*OMLetFoldLevel")
++  finish
++endif
++
++if exists("g:omlet_indent_struct")
++  let s:i = g:omlet_indent_struct
++elseif exists("g:omlet_indent")
++  let s:i = g:omlet_indent
++else
++  let s:i = 2
++endif
++
++function s:topindent(lnum)
++  let l = a:lnum
++  while l > 0
++    if getline(l) =~ '\s*\%(\<struct\>\|\<sig\>\|\<object\>\)'
++      return indent(l)
++    endif
++    let l = l-1
++  endwhile
++  return -s:i
++endfunction
++
++function OMLetFoldLevel(l)
++
++  " This is for not merging blank lines around folds to them
++  if getline(a:l) !~ '\S'
++    return -1
++  endif
++
++  " We start folds for modules, classes, and every toplevel definition
++  if getline(a:l) =~ '^\s*\%(\<val\>\|\<module\>\|\<class\>\|\<type\>\|\<method\>\|\<initializer\>\|\<inherit\>\|\<exception\>\|\<external\>\)'
++    exe 'return ">' (indent(a:l)/s:i)+1 '"'
++  endif
++
++  " Toplevel let are detected thanks to the indentation
++  if getline(a:l) =~ '^\s*let\>' && indent(a:l) == s:i+s:topindent(a:l)
++    exe 'return ">' (indent(a:l)/s:i)+1 '"'
++  endif
++
++  " We close fold on end which are associated to struct, sig or object.
++  " We use syntax information to do that.
++  if getline(a:l) =~ '^\s*end\>' && synIDattr(synID(a:l, indent(a:l)+1, 0), "name") != "ocamlKeyword"
++    return (indent(a:l)/s:i)+1
++  endif
++
++  " Folds end on ;;
++  if getline(a:l) =~ '^\s*;;'
++    exe 'return "<' (indent(a:l)/s:i)+1 '"'
++  endif
++
++  " Comments around folds aren't merged to them.
++  if synIDattr(synID(a:l, indent(a:l)+1, 0), "name") == "ocamlComment"
++    return -1
++  endif
++
++  return '='
++endfunction
++
++" Vim support for OCaml .annot files (requires Vim with python support)
++"
++" Executing OCamlPrintType(<mode>) function will display in the Vim bottom
++" line(s) the type of an ocaml value getting it from the corresponding .annot
++" file (if any).  If Vim is in visual mode, <mode> should be "visual" and the
++" selected ocaml value correspond to the highlighted text, otherwise (<mode>
++" can be anything else) it corresponds to the literal found at the current
++" cursor position.
++"
++" .annot files are parsed lazily the first time OCamlPrintType is invoked; is
++" also possible to force the parsing using the OCamlParseAnnot() function.
++"
++" Typing ',3' will cause OCamlPrintType function to be invoked with
++" the right argument depending on the current mode (visual or not).
++"
++" Copyright (C) <2003-2004> Stefano Zacchiroli <zack@bononia.it>
++"
++" Created:        Wed, 01 Oct 2003 18:16:22 +0200 zack
++" LastModified:   Wed, 25 Aug 2004 18:28:39 +0200 zack
++"
++"
++" This program is free software; you can redistribute it and/or modify
++" it under the terms of the GNU General Public License as published by
++" the Free Software Foundation; either version 2 of the License, or
++" (at your option) any later version.
++"
++" This program is distributed in the hope that it will be useful,
++" but WITHOUT ANY WARRANTY; without even the implied warranty of
++" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++" GNU General Public License for more details.
++"
++" You should have received a copy of the GNU General Public License
++" along with this program; if not, write to the Free Software
++" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++
++if !has("python")
++  finish
++endif
++
++if !exists("g:did_ocaml_dtypes")
++  let g:did_ocaml_dtypes = 1
++else
++  finish
++endif
++
++python << EOF
++
++import re
++import os
++import string
++import time
++import vim
++
++debug = False
++
++class AnnExc(Exception):
++    def __init__(self, reason):
++        self.reason = reason
++
++no_annotations = AnnExc("No type annotations (.annot) file found")
++annotation_not_found = AnnExc("No type annotation found for the given text")
++def malformed_annotations(lineno):
++    return AnnExc("Malformed .annot file (line = %d)" % lineno)
++
++class Annotations:
++    """
++      .annot ocaml file representation
++
++      File format (copied verbatim from caml-types.el)
++
++      file ::= block *
++      block ::= position <SP> position <LF> annotation *
++      position ::= filename <SP> num <SP> num <SP> num
++      annotation ::= keyword open-paren <LF> <SP> <SP> data <LF> close-paren
++
++      <SP> is a space character (ASCII 0x20)
++      <LF> is a line-feed character (ASCII 0x0A)
++      num is a sequence of decimal digits
++      filename is a string with the lexical conventions of O'Caml
++      open-paren is an open parenthesis (ASCII 0x28)
++      close-paren is a closed parenthesis (ASCII 0x29)
++      data is any sequence of characters where <LF> is always followed by
++           at least two space characters.
++
++      - in each block, the two positions are respectively the start and the
++        end of the range described by the block.
++      - in a position, the filename is the name of the file, the first num
++        is the line number, the second num is the offset of the beginning
++        of the line, the third num is the offset of the position itself.
++      - the char number within the line is the difference between the third
++        and second nums.
++
++      For the moment, the only possible keyword is \"type\"."
++    """
++
++    def __init__(self):
++        self.__filename = None  # last .annot parsed file
++        self.__ml_filename = None # as above but s/.annot/.ml/
++        self.__timestamp = None # last parse action timestamp
++        self.__annot = {}
++        self.__re = re.compile(
++          '^"[^"]*"\s+(\d+)\s+(\d+)\s+(\d+)\s+"[^"]*"\s+(\d+)\s+(\d+)\s+(\d+)$')
++
++    def __parse(self, fname):
++        try:
++            f = open(fname)
++            line = f.readline() # position line
++            lineno = 1
++            while (line != ""):
++                m = self.__re.search(line)
++                if (not m):
++                    raise malformed_annotations(lineno)
++                line1 = int(m.group(1))
++                col1 = int(m.group(3)) - int(m.group(2))
++                line2 = int(m.group(4))
++                col2 = int(m.group(6)) - int(m.group(5))
++                line = f.readline() # "type(" string
++                lineno += 1
++                if (line == ""): raise malformed_annotations(lineno)
++                type = []
++                line = f.readline() # type description
++                lineno += 1
++                if (line == ""): raise malformed_annotations(lineno)
++                while line != ")\n":
++                    type.append(string.strip(line))
++                    line = f.readline()
++                    lineno += 1
++                    if (line == ""): raise malformed_annotations(lineno)
++                type = string.join(type, "\n")
++                key = ((line1, col1), (line2, col2))
++                if not self.__annot.has_key(key):
++                    self.__annot[key] = type
++                line = f.readline() # position line
++            f.close()
++            self.__filename = fname
++            self.__ml_filename = re.sub("\.annot$", ".ml", fname)
++            self.__timestamp = int(time.time())
++        except IOError:
++            raise no_annotations
++
++    def parse(self):
++        annot_file = re.sub("\.ml$", ".annot", vim.current.buffer.name)
++        self.__parse(annot_file)
++
++    def get_type(self, (line1, col1), (line2, col2)):
++        if debug:
++            print line1, col1, line2, col2
++        if vim.current.buffer.name == None:
++            raise no_annotations
++        if vim.current.buffer.name != self.__ml_filename or  \
++          os.stat(self.__filename).st_mtime > self.__timestamp:
++            self.parse()
++        try:
++            return self.__annot[(line1, col1), (line2, col2)]
++        except KeyError:
++            raise annotation_not_found
++
++word_char_RE = re.compile("^[\w.]$")
++
++  # TODO this function should recognize ocaml literals, actually it's just an
++  # hack that recognize continuous sequences of word_char_RE above
++def findBoundaries(line, col):
++    """ given a cursor position (as returned by vim.current.window.cursor)
++    return two integers identify the beggining and end column of the word at
++    cursor position, if any. If no word is at the cursor position return the
++    column cursor position twice """
++    left, right = col, col
++    line = line - 1 # mismatch vim/python line indexes
++    (begin_col, end_col) = (0, len(vim.current.buffer[line]) - 1)
++    try:
++        while word_char_RE.search(vim.current.buffer[line][left - 1]):
++            left = left - 1
++    except IndexError:
++        pass
++    try:
++        while word_char_RE.search(vim.current.buffer[line][right + 1]):
++            right = right + 1
++    except IndexError:
++        pass
++    return (left, right)
++
++annot = Annotations() # global annotation object
++
++def printOCamlType(mode):
++    try:
++        if mode == "visual":  # visual mode: lookup highlighted text
++            (line1, col1) = vim.current.buffer.mark("<")
++            (line2, col2) = vim.current.buffer.mark(">")
++        else: # any other mode: lookup word at cursor position
++            (line, col) = vim.current.window.cursor
++            (col1, col2) = findBoundaries(line, col)
++            (line1, line2) = (line, line)
++        begin_mark = (line1, col1)
++        end_mark = (line2, col2 + 1)
++        print annot.get_type(begin_mark, end_mark)
++    except AnnExc, exc:
++        print exc.reason
++
++def parseOCamlAnnot():
++    try:
++        annot.parse()
++    except AnnExc, exc:
++        print exc.reason
++
++EOF
++
++fun OCamlPrintType(current_mode)
++  if (a:current_mode == "visual")
++    python printOCamlType("visual")
++  else
++    python printOCamlType("normal")
++  endif
++endfun
++
++fun OCamlParseAnnot()
++  python parseOCamlAnnot()
++endfun
++
++map <LocalLeader>t :call OCamlPrintType("normal")<RETURN>
++vmap <LocalLeader>t :call OCamlPrintType("visual")<RETURN>
+diff -urN vim63/runtime/indent/ocaml.vim vim63.new/runtime/indent/ocaml.vim
+--- vim63/runtime/indent/ocaml.vim	2003-04-14 21:03:07.000000000 +0200
++++ vim63.new/runtime/indent/ocaml.vim	2005-03-07 21:26:47.000000000 +0100
+@@ -1,12 +1,12 @@
+ " Vim indent file
+-" Language:	OCaml
+-" Maintainers:	Jean-Francois Yuen  <jfyuen@ifrance.com>
+-"		Mike Leary	    <leary@nwlink.com>
+-"		Markus Mottl	    <markus@oefai.at>
+-" URL:		http://www.oefai.at/~markus/vim/indent/ocaml.vim
+-" Last Change:	2003 Apr 14
+-"		2003 Mar 05 - Added '{<' and some fixes (JY)
+-"		2002 Nov 06 - Some fixes (JY)
++" Language:     OCaml
++" Maintainers:  Jean-François Yuen  <jfyuen@happycoders.org>
++"               Mike Leary          <leary@nwlink.com>
++"               Markus Mottl        <markus.mottl@gmail.com>
++" URL:          http://www.ocaml.info/vim/indent/ocaml.vim
++" Last Change:  2005 Mar 06 - Fixed multiline comments, thanks Andrzej Ostruszka
++"               2005 Mar 02 - Simplified a few rules (JY)
++"               2005 Feb 28 - Fixed E488 errors, thanks Andrzej Ostruszka
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+@@ -16,7 +16,7 @@
+ 
+ setlocal expandtab
+ setlocal indentexpr=GetOCamlIndent()
+-setlocal indentkeys+=0=and,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=initializer,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0=;;,0=>\],0=\|\],0=\|,0=*),0=>},0},0\],0)
++setlocal indentkeys+=0=and,0=class,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=initializer,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0;;,0>\],0\|\],0>},0\|,0},0\],0)
+ setlocal nolisp
+ setlocal nosmartindent
+ setlocal textwidth=80
+@@ -33,14 +33,13 @@
+ endif
+ 
+ " Define some patterns:
+-let s:beflet = '^\s*\(initializer\|method\|try\)\|\(\<\(begin\|do\|else\|in\|then\|try\)\|->\|;\|(\)\s*$'
++let s:beflet = '^\s*\(initializer\|method\|try\)\|\(\<\(begin\|do\|else\|in\|then\|try\)\|->\|<-\|=\|;\|(\)\s*$'
+ let s:letpat = '^\s*\(let\|type\|module\|class\|open\|exception\|val\|include\|external\)\>'
+ let s:letlim = '\(\<\(sig\|struct\)\|;;\)\s*$'
+ let s:lim = '^\s*\(exception\|external\|include\|let\|module\|open\|type\|val\)\>'
+ let s:module = '\<\%(begin\|sig\|struct\|object\)\>'
+ let s:obj = '^\s*\(constraint\|inherit\|initializer\|method\|val\)\>\|\<\(object\|object\s*(.*)\)\s*$'
+-let s:type = '^\s*\%(let\|type\)\>.*='
+-let s:val = '^\s*\(val\|external\)\>.*:'
++let s:type = '^\s*\%(class\|let\|type\)\>.*='
+ 
+ " Skipping pattern, for comments
+ function s:SkipPattern(lnum, pat)
+@@ -75,7 +74,7 @@
+ " Indent 'let'
+ function s:FindLet(pstart, pmid, pend)
+   call search(a:pend, 'bW')
+-  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ "^\\s*let\\>.*=\\s*$\\|" . s:beflet'))
++  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ s:beflet'))
+ endfunction
+ 
+ function GetOCamlIndent()
+@@ -97,8 +96,7 @@
+ 
+   let line = getline(v:lnum)
+ 
+-  " Indent if current line begins with 'end'
+-  " for 'sig', 'struct', 'object' and 'begin':
++  " Indent if current line begins with 'end':
+   if line =~ '^\s*end\>'
+     return s:FindPair(s:module, '','\<end\>')
+ 
+@@ -118,150 +116,110 @@
+   elseif line =~ '^\s*)'
+     return s:FindPair('(', '',')')
+ 
+-  " Indent if current line begins with 'let'
+-  " and last line does not begin with 'let' or end with 'in' or ';;':
++  " Indent if current line begins with 'let':
+   elseif line =~ '^\s*let\>'
+     if lline !~ s:lim . '\|' . s:letlim . '\|' . s:beflet
+       return s:FindLet(s:type, '','\<let\s*$')
+-    else return ind
++    else
++      return ind
+     endif
+ 
+-  " Indent if current line begins with 'type'
+-  " and last line does not end with 'and' or ';;':
+-  elseif line =~ '^\s*type\>'
++  " Indent if current line begins with 'class' or 'type':
++  elseif line =~ '^\s*\(class\|type\)\>'
+     if lline !~ s:lim . '\|\<and\s*$\|' . s:letlim
+-      return s:FindLet(s:type, '','\<type\s*$')
+-    else return ind
++      return s:FindLet(s:type, '','\<\(class\|type\)\s*$')
++    else
++      return ind
+     endif
+ 
+   " Indent for pattern matching:
+   elseif line =~ '^\s*|'
+-    if lline !~ '^\s*\(|\|\(match\|with\|type\)\>\)\|\<\(function\|parser\|with\)\s*$'
++    if lline !~ '^\s*\(|[^\]]\|\(match\|type\|with\)\>\)\|\<\(function\|parser\|private\|with\)\s*$'
+       call search('|', 'bW')
+-      return indent(searchpair('^\s*\(type\|match\)\>\|\<\(with\|function\|parser\)\s*$', '', '|', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "\\[|\\||\\]" && getline(".") !~ "^\\s*|.*->"'))
+-    else return ind
++      return indent(searchpair('^\s*\(match\|type\)\>\|\<\(function\|parser\|private\|with\)\s*$', '', '^\s*|', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") !~ "^\\s*|.*->"'))
++    else
++      return ind
+     endif
+ 
+   " Indent if current line begins with ';;':
+   elseif line =~ '^\s*;;'
+     if lline !~ ';;\s*$'
+       return s:GetInd(v:lnum, s:letpat, s:letlim)
+-    else return ind
++    else
++      return ind
+     endif
+ 
+-  " Indent if current line begins with 'in' and previous
+-  " line does not start with 'let' or 'and':
++  " Indent if current line begins with 'in':
+   elseif line =~ '^\s*in\>'
+     if lline !~ '^\s*\(let\|and\)\>'
+       return s:FindPair('\<let\>', '', '\<in\>')
+-    else return ind
++    else
++      return ind
+     endif
+ 
+-  " Indent if current line begins with 'else'
+-  " and previous line does not start with 'if', 'then' or 'else':
++  " Indent if current line begins with 'else':
+   elseif line =~ '^\s*else\>'
+-    if lline !~ '^\s*\(if\|else\|then\)\>'
++    if lline !~ '^\s*\(if\|then\)\>'
+       return s:FindPair('\<if\>', '', '\<else\>')
+-    else return ind
++    else
++      return ind
+     endif
+ 
+-  " Indent if current line begins with 'then'
+-  " and previous line does not start with 'if', 'then' or 'else':
++  " Indent if current line begins with 'then':
+   elseif line =~ '^\s*then\>'
+-    if lline !~ '^\s*\(if\|else\|then\)\>'
++    if lline !~ '^\s*\(if\|else\)\>'
+       return s:FindPair('\<if\>', '', '\<then\>')
+-    else return ind
++    else
++      return ind
+     endif
+ 
+-  " Subtract a 'shiftwidth' if current line begins with 'and' and previous
+-  " line does not start with 'let', 'and' or 'type' or end with 'end'
+-  " (for classes):
++  " Indent if current line begins with 'and':
+   elseif line =~ '^\s*and\>'
+     if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$'
+       return ind - &sw
+-    else return ind
++    else
++      return ind
+     endif
+ 
+-  " Indent if current line begins with 'with'
+-  " and previous line does not start with 'match' or 'try':
++  " Indent if current line begins with 'with':
+   elseif line =~ '^\s*with\>'
+     if lline !~ '^\s*\(match\|try\)\>'
+       return s:FindPair('\<\%(match\|try\)\>', '','\<with\>')
+-    else return ind
++    else
++      return ind
+     endif
+ 
+-  " Indent if current line begins with 'exception':
+-  elseif line =~ '^\s*exception\>'
++  " Indent if current line begins with 'exception', 'external', 'include' or
++  " 'open':
++  elseif line =~ '^\s*\(exception\|external\|include\|open\)\>'
+     if lline !~ s:lim . '\|' . s:letlim
+-      return indent(search(s:val . '\|^\s*\(external\|include\|open\|type\)\>', 'bW'))
+-    else return ind
+-    endif
+-
+-  " Indent if current line begins with 'external':
+-  elseif line =~ '^\s*external\>'
+-    if lline !~ s:lim . '\|' . s:letlim
+-      return indent(search(s:val . '\|^\s*\(exception\|include\|open\|type\)\>', 'bW'))
+-    else return ind
+-    endif
+-
+-  " Indent if current line begins with 'include':
+-  elseif line =~ '^\s*include\>'
+-    if lline !~ s:lim . '\|' . s:letlim
+-      return indent(search(s:val . '\|^\s*\(exception\|external\|open\|type\)\>', 'bW'))
+-    else return ind
+-    endif
+-
+-  " Indent if current line begins with 'open':
+-  elseif line =~ '^\s*open\>'
+-    if lline !~ s:lim . '\|' . s:letlim
+-      return indent(search(s:val . '\|^\s*\(exception\|external\|include\|type\)\>', 'bW'))
+-    else return ind
++      call search(line)
++      return indent(search('^\s*\(\(exception\|external\|include\|open\|type\)\>\|val\>.*:\)', 'bW'))
++    else
++      return ind
+     endif
+ 
+   " Indent if current line begins with 'val':
+   elseif line =~ '^\s*val\>'
+     if lline !~ '^\s*\(exception\|external\|include\|open\)\>\|' . s:obj . '\|' . s:letlim
+-      return indent(search(s:val . '\|^\s*\(exception\|include\|initializer\|method\|open\|type\)\>', 'bW'))
+-    else return ind
++      return indent(search('^\s*\(\(exception\|include\|initializer\|method\|open\|type\|val\)\>\|external\>.*:\)', 'bW'))
++    else
++      return ind
+     endif
+ 
+-  " Indent if current line begins with 'constraint':
+-  elseif line =~ '^\s*constraint\>'
++  " Indent if current line begins with 'constraint', 'inherit', 'initializer'
++  " or 'method':
++  elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>'
+     if lline !~ s:obj
+-      return indent(search('^\s*\(inherit\|initializer\|method\|val\)\>', 'bW'))
+-    else return ind
++      return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + &sw
++    else
++      return ind
+     endif
+ 
+-  " Indent if current line begins with 'inherit':
+-  elseif line =~ '^\s*inherit\>'
+-    if lline !~ s:obj
+-      return indent(search('^\s*\(constraint\|initializer\|method\|val\)\>', 'bW'))
+-    else return ind
+-    endif
+-
+-  " Indent if current line begins with 'inherit':
+-  elseif line =~ '^\s*initializer\>'
+-    if lline !~ s:obj
+-      return indent(search('^\s*\(constraint\|inherit\|method\|val\)\>', 'bW'))
+-    else return ind
+-    endif
+-
+-  " Indent if current line begins with 'method':
+-  elseif line =~ '^\s*method\>'
+-    if lline !~ s:obj
+-      return indent(search('^\s*\(\(constraint\|inherit\|initializer\|val\)\>\|method\>.*\(:\|=\)\)', 'bW'))
+-    else return ind
+-    endif
+-
+-  " Indent back to normal after comments:
+-  elseif line =~ '^\s*\*)'
+-    call search('\*)', 'bW')
+-    return indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
+-
+   endif
+ 
+   " Add a 'shiftwidth' after lines ending with:
+-  if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|struct\|sig\|functor\|initializer\|object\|try\|do\|if\|then\|else\|fun\|function\|parser\)\|\<object\s*(.*)\)\s*$'
++  if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|parser\|private\|sig\|struct\|then\|try\)\|\<object\s*(.*)\)\s*$'
+     let ind = ind + &sw
+ 
+   " Back to normal indent after lines ending with ';;':
+@@ -297,10 +255,14 @@
+   elseif lline =~ ')\s*$'
+     let ind = s:FindPair('(', '',')')
+ 
++  " If this is a multiline comment then align '*':
++  elseif lline =~ '^\s*(\*' && line =~ '^\s*\*'
++    let ind = ind + 1
++
+   endif
+ 
+   " Subtract a 'shiftwidth' after lines matching 'match ... with parser':
+-  if lline =~ '^\s*match\>.*\<with\>\s*\<parser\s*$'
++  if lline =~ '\<match\>.*\<with\>\s*\<parser\s*$'
+     let ind = ind - &sw
+   endif
+ 
+diff -urN vim63/runtime/syntax/ocaml.vim vim63.new/runtime/syntax/ocaml.vim
+--- vim63/runtime/syntax/ocaml.vim	2003-05-04 23:12:48.000000000 +0200
++++ vim63.new/runtime/syntax/ocaml.vim	2005-03-15 22:54:14.000000000 +0100
+@@ -1,13 +1,17 @@
+ " Vim syntax file
+ " Language:     OCaml
+ " Filenames:    *.ml *.mli *.mll *.mly
+-" Maintainers:  Markus Mottl      <markus@oefai.at>
+-"		Karl-Heinz Sylla  <Karl-Heinz.Sylla@gmd.de>
+-"		Issac Trotts	  <<ijtrotts@ucdavis.edu>
+-" URL:		http://www.oefai.at/~markus/vim/syntax/ocaml.vim
+-" Last Change:	2003 May 04
+-"		2002 Oct 24 - Small fix for "module type" (MM)
+-"		2002 Jun 16 - Added "&&", "<" and ">" as operators (MM)
++" Maintainers:  Markus Mottl      <markus.mottl@gmail.com>
++"               Karl-Heinz Sylla  <Karl-Heinz.Sylla@gmd.de>
++"               Issac Trotts      <ijtrotts@ucdavis.edu>
++" URL:          http://www.ocaml.info/vim/syntax/ocaml.vim
++" Last Change:  2005 Mar 15 - Added a patch from David Baelde (MM)
++"               2004 Aug 13 - Added new type keywords (MM)
++"               2004 Jul 30 - Added script keyword "thread" (MM)
++
++" A minor patch was applied to the official version so that object/end
++" can be distinguished from begin/end, which is used for indentation,
++" and folding. (David Baelde)
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -24,7 +28,7 @@
+ syn match    ocamlComment   "^#!.*"
+ 
+ " Scripting directives
+-syn match    ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|trace\|untrace\|untrace_all\|print_depth\|print_length\)\>"
++syn match    ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|require\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\)\>"
+ 
+ " lowercase identifier - the standard way to match
+ syn match    ocamlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/
+@@ -78,7 +82,7 @@
+ 
+ 
+ " Objects
+-syn region   ocamlEnd matchgroup=ocamlKeyword start="\<object\>" matchgroup=ocamlKeyword end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
++syn region   ocamlEnd matchgroup=ocamlObject start="\<object\>" matchgroup=ocamlObject end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+ 
+ 
+ " Blocks
+@@ -163,8 +167,9 @@
+   syn match    ocamlKeyChar  "!"
+ endif
+ 
+-syn keyword  ocamlType     array bool char exn float format int
+-syn keyword  ocamlType     list option string unit
++syn keyword  ocamlType     array bool char exn float format format4
++syn keyword  ocamlType     int int32 int64 lazy_t list nativeint option
++syn keyword  ocamlType     string unit
+ 
+ syn keyword  ocamlOperator asr lor lsl lsr lxor mod not
+ 
+@@ -203,20 +208,20 @@
+ syn match    ocamlKeyChar      "="
+ 
+ if exists("ocaml_revised")
+-  syn match    ocamlErr		"<-"
++  syn match    ocamlErr        "<-"
+ else
+-  syn match    ocamlOperator	"<-"
++  syn match    ocamlOperator   "<-"
+ endif
+ 
+-syn match    ocamlNumber	"\<-\=\d\+\>"
+-syn match    ocamlNumber	"\<-\=0[x|X]\x\+\>"
+-syn match    ocamlNumber	"\<-\=0[o|O]\o\+\>"
+-syn match    ocamlNumber	"\<-\=0[b|B][01]\+\>"
+-syn match    ocamlFloat		"\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"
++syn match    ocamlNumber        "\<-\=\d\+\>"
++syn match    ocamlNumber        "\<-\=0[x|X]\x\+\>"
++syn match    ocamlNumber        "\<-\=0[o|O]\o\+\>"
++syn match    ocamlNumber        "\<-\=0[b|B][01]\+\>"
++syn match    ocamlFloat         "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"
+ 
+ " Labels
+-syn match    ocamlLabel		"\~\(\l\|_\)\(\w\|'\)*"lc=1
+-syn match    ocamlLabel		"?\(\l\|_\)\(\w\|'\)*"lc=1
++syn match    ocamlLabel        "\~\(\l\|_\)\(\w\|'\)*"lc=1
++syn match    ocamlLabel        "?\(\l\|_\)\(\w\|'\)*"lc=1
+ syn region   ocamlLabel transparent matchgroup=ocamlLabel start="?(\(\l\|_\)\(\w\|'\)*"lc=2 end=")"me=e-1 contains=ALLBUT,@ocamlContained,ocamlParenErr
+ 
+ 
+@@ -252,62 +257,63 @@
+     command -nargs=+ HiLink hi def link <args>
+   endif
+ 
+-  HiLink ocamlBraceErr	   Error
+-  HiLink ocamlBrackErr	   Error
+-  HiLink ocamlParenErr	   Error
+-  HiLink ocamlArrErr	   Error
++  HiLink ocamlBraceErr     Error
++  HiLink ocamlBrackErr     Error
++  HiLink ocamlParenErr     Error
++  HiLink ocamlArrErr       Error
+ 
+   HiLink ocamlCommentErr   Error
+ 
+-  HiLink ocamlCountErr	   Error
+-  HiLink ocamlDoErr	   Error
+-  HiLink ocamlDoneErr	   Error
+-  HiLink ocamlEndErr	   Error
+-  HiLink ocamlThenErr	   Error
++  HiLink ocamlCountErr     Error
++  HiLink ocamlDoErr        Error
++  HiLink ocamlDoneErr      Error
++  HiLink ocamlEndErr       Error
++  HiLink ocamlThenErr      Error
+ 
+-  HiLink ocamlCharErr	   Error
++  HiLink ocamlCharErr      Error
+ 
+-  HiLink ocamlErr	   Error
++  HiLink ocamlErr          Error
+ 
+-  HiLink ocamlComment	   Comment
++  HiLink ocamlComment      Comment
+ 
+-  HiLink ocamlModPath	   Include
+-  HiLink ocamlModule	   Include
++  HiLink ocamlModPath      Include
++  HiLink ocamlObject	   Include
++  HiLink ocamlModule       Include
+   HiLink ocamlModParam1    Include
+-  HiLink ocamlModType	   Include
+-  HiLink ocamlMPRestr3	   Include
+-  HiLink ocamlFullMod	   Include
++  HiLink ocamlModType      Include
++  HiLink ocamlMPRestr3     Include
++  HiLink ocamlFullMod      Include
+   HiLink ocamlModTypeRestr Include
+-  HiLink ocamlWith	   Include
+-  HiLink ocamlMTDef	   Include
++  HiLink ocamlWith         Include
++  HiLink ocamlMTDef        Include
+ 
+-  HiLink ocamlScript	   Include
++  HiLink ocamlScript       Include
+ 
+   HiLink ocamlConstructor  Constant
+ 
+   HiLink ocamlModPreRHS    Keyword
+-  HiLink ocamlMPRestr2	   Keyword
+-  HiLink ocamlKeyword	   Keyword
+-  HiLink ocamlFunDef	   Keyword
++  HiLink ocamlMPRestr2     Keyword
++  HiLink ocamlKeyword      Keyword
++  HiLink ocamlFunDef       Keyword
+   HiLink ocamlRefAssign    Keyword
+-  HiLink ocamlKeyChar	   Keyword
+-  HiLink ocamlAnyVar	   Keyword
+-  HiLink ocamlTopStop	   Keyword
+-  HiLink ocamlOperator	   Keyword
++  HiLink ocamlKeyChar      Keyword
++  HiLink ocamlAnyVar       Keyword
++  HiLink ocamlTopStop      Keyword
++  HiLink ocamlOperator     Keyword
+ 
+-  HiLink ocamlBoolean	   Boolean
++  HiLink ocamlBoolean      Boolean
+   HiLink ocamlCharacter    Character
+-  HiLink ocamlNumber	   Number
+-  HiLink ocamlFloat	   Float
+-  HiLink ocamlString	   String
++  HiLink ocamlNumber       Number
++  HiLink ocamlFloat        Float
++  HiLink ocamlString       String
+ 
+-  HiLink ocamlLabel	   Identifier
++  HiLink ocamlLabel        Identifier
+ 
+-  HiLink ocamlType	   Type
++  HiLink ocamlType         Type
+ 
+-  HiLink ocamlTodo	   Todo
++  HiLink ocamlTodo         Todo
+ 
+-  HiLink ocamlEncl	   Keyword
++  HiLink ocamlEncl         Keyword
+ 
+   delcommand HiLink
+ endif

Added: trunk/vim/debian/patches/302_message.c.diff
===================================================================
--- trunk/vim/debian/patches/302_message.c.diff	2005-03-26 12:53:43 UTC (rev 115)
+++ trunk/vim/debian/patches/302_message.c.diff	2005-03-26 12:55:45 UTC (rev 116)
@@ -0,0 +1,12 @@
+diff -Nur vim63.orig/src/message.c vim63/src/message.c
+--- vim63.orig/src/message.c	2005-03-26 12:33:36.747667152 +0100
++++ vim63/src/message.c	2005-03-26 12:34:52.374170176 +0100
+@@ -905,7 +905,7 @@
+ 	     * CTRL-C, but we need to loop then. */
+ 	    had_got_int = got_int;
+ 	    c = safe_vgetc();
+-	    if (!global_busy)
++	    if (had_got_int && !global_busy)
+ 		got_int = FALSE;
+ #ifdef FEAT_CLIPBOARD
+ 	    /* Strange way to allow copying (yanking) a modeless selection at

Modified: trunk/vim/debian/rules
===================================================================
--- trunk/vim/debian/rules	2005-03-26 12:53:43 UTC (rev 115)
+++ trunk/vim/debian/rules	2005-03-26 12:55:45 UTC (rev 116)
@@ -1,7 +1,6 @@
 #!/usr/bin/make -f 
 
 export DH_OPTIONS=
-export DH_COMPAT=4
 
 DEB_HOST_GNU_SYSTEM := $(shell dpkg-architecture -qDEB_HOST_GNU_SYSTEM)
 
@@ -106,6 +105,9 @@
   VARIANTS_SKIP+=kvim-ruby
   VARIANTS_SKIP+=kvim-tcl
 endif
+ifeq ($(origin VARIANT), command line)
+  VARIANTS = vim-basic $(VARIANT)
+endif
 
 CFLAGS_vim-basic=$(CFLAGS)
 CFGFLAGS_vim-basic=$(CFGFLAGS) $(OPTFLAGS) --without-x --enable-gui=no
@@ -160,7 +162,7 @@
 	mv $(SRCDIR) $(SRCDIR).new
 	rm -f extract-stamp*
 	./debian/rules extract
-	diff -urN $(SRCDIR) $(SRCDIR).new > new.diff
+	- diff -urN $(SRCDIR) $(SRCDIR).new > new.diff
 	rm -rf $(SRCDIR)
 	mv $(SRCDIR).new $(SRCDIR)