mirror of
https://github.com/zoriya/vim.git
synced 2025-12-29 18:38:24 +00:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a33e74dd2 | ||
|
|
bacd9da40e | ||
|
|
8c83ac3d83 | ||
|
|
175aa24846 | ||
|
|
3a0573acae | ||
|
|
33d0b69ab8 | ||
|
|
165641da25 | ||
|
|
0b69c73411 | ||
|
|
0ca4b350f0 | ||
|
|
b4990bf90b | ||
|
|
0413d48711 | ||
|
|
6dfc28be25 | ||
|
|
cee6a352b2 | ||
|
|
6427c608e7 | ||
|
|
990bb661a1 | ||
|
|
f86f26c06a | ||
|
|
4d526ad35a | ||
|
|
d21d9a6c61 | ||
|
|
c5d5d01ad9 | ||
|
|
6d1dcffc35 | ||
|
|
da4d7a92d5 | ||
|
|
0dbf720d86 | ||
|
|
38ef43b262 | ||
|
|
5075aad6a8 | ||
|
|
7ad01410da | ||
|
|
8d8ef0b0b9 | ||
|
|
fc307fa1a6 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -28,6 +28,7 @@ src/auto/pathdef.c
|
||||
*.res
|
||||
*.RES
|
||||
src/pathdef.c
|
||||
src/Obj*/pathdef.c
|
||||
gvimext.dll
|
||||
gvimext.lib
|
||||
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
" Vim completion script
|
||||
" Language: All languages, uses existing syntax highlighting rules
|
||||
" Maintainer: David Fishburn <dfishburn.vim@gmail.com>
|
||||
" Version: 4.0
|
||||
" Last Change: Fri 26 Oct 2007 05:27:03 PM Eastern Daylight Time
|
||||
" Maintainer: David Fishburn <dfishburn dot vim at gmail dot com>
|
||||
" Version: 5.0
|
||||
" Last Change: 2010 Jan 31
|
||||
" Usage: For detailed help, ":help ft-syntax-omni"
|
||||
|
||||
" History
|
||||
" Version 5.0
|
||||
" When processing a list of syntax groups, the final group
|
||||
" was missed in function SyntaxCSyntaxGroupItems.
|
||||
"
|
||||
" Set completion with CTRL-X CTRL-O to autoloaded function.
|
||||
" This check is in place in case this script is
|
||||
" sourced directly instead of using the autoload feature.
|
||||
@@ -312,9 +317,13 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
|
||||
" \zs - start the match
|
||||
" .\{-} - everything ...
|
||||
" \ze - end the match
|
||||
" \( - start a group or 2 potential matches
|
||||
" \n\w - at the first newline starting with a character
|
||||
" \| - 2nd potential match
|
||||
" \%$ - matches end of the file or string
|
||||
" \) - end a group
|
||||
let syntax_group = matchstr(a:syntax_full,
|
||||
\ "\n".a:group_name.'\s\+xxx\s\+\zs.\{-}\ze'."\n".'\w'
|
||||
\ "\n".a:group_name.'\s\+xxx\s\+\zs.\{-}\ze\(\n\w\|\%$\)'
|
||||
\ )
|
||||
|
||||
if syntax_group != ""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*eval.txt* For Vim version 7.2. Last change: 2010 Jan 05
|
||||
*eval.txt* For Vim version 7.2. Last change: 2010 Jan 19
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*indent.txt* For Vim version 7.2. Last change: 2009 Nov 12
|
||||
*indent.txt* For Vim version 7.2. Last change: 2010 Jan 27
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -437,7 +437,7 @@ assume a 'shiftwidth' of 4.
|
||||
|
||||
*N Vim searches for unclosed comments at most N lines away. This
|
||||
limits the time needed to search for the start of a comment.
|
||||
(default 30 lines).
|
||||
(default 70 lines).
|
||||
|
||||
#N When N is non-zero recognize shell/Perl comments, starting with
|
||||
'#'. Default N is zero: don't recognizes '#' comments. Note
|
||||
|
||||
@@ -482,7 +482,7 @@ example: >
|
||||
{shellpipe} is the 'shellpipe' option.
|
||||
{errorfile} is the 'makeef' option, with ## replaced to make it unique.
|
||||
|
||||
The placeholder "$*" can be used for the argument list in {makeprog} if the
|
||||
The placeholder "$*" can be used for the argument list in {makeprg} if the
|
||||
command needs some additional characters after its arguments. The $* is
|
||||
replaced then by all arguments. Example: >
|
||||
:set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
|
||||
@@ -1212,7 +1212,7 @@ Maintaining the correct directory is more complicated if you don't use
|
||||
GNU-make. AIX-make for example doesn't print any information about its
|
||||
working directory. Then you need to enhance the makefile. In the makefile of
|
||||
LessTif there is a command which echoes "Making {target} in {dir}". The
|
||||
special problem here is that it doesn't print informations on leaving the
|
||||
special problem here is that it doesn't print information on leaving the
|
||||
directory and that it doesn't print the absolute path.
|
||||
|
||||
To solve the problem with relative paths and missing "leave directory"
|
||||
|
||||
@@ -340,7 +340,7 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
|
||||
this to get 'compatible', even though a .vimrc file exists.
|
||||
Keep in mind that the command ":set nocompatible" in some
|
||||
plugin or startup script overrules this, so you may end up
|
||||
with 'nocmpatible' anyway. To find out, use: >
|
||||
with 'nocompatible' anyway. To find out, use: >
|
||||
:verbose set compatible?
|
||||
< Several plugins won't work with 'compatible' set. You may
|
||||
want to set it after startup this way: >
|
||||
|
||||
@@ -6486,11 +6486,13 @@ mysql ft_sql.txt /*mysql*
|
||||
mysyntaxfile syntax.txt /*mysyntaxfile*
|
||||
mysyntaxfile-add syntax.txt /*mysyntaxfile-add*
|
||||
mysyntaxfile-replace syntax.txt /*mysyntaxfile-replace*
|
||||
mzeval() eval.txt /*mzeval()*
|
||||
mzscheme if_mzsch.txt /*mzscheme*
|
||||
mzscheme-buffer if_mzsch.txt /*mzscheme-buffer*
|
||||
mzscheme-commands if_mzsch.txt /*mzscheme-commands*
|
||||
mzscheme-dynamic if_mzsch.txt /*mzscheme-dynamic*
|
||||
mzscheme-examples if_mzsch.txt /*mzscheme-examples*
|
||||
mzscheme-mzeval if_mzsch.txt /*mzscheme-mzeval*
|
||||
mzscheme-sandbox if_mzsch.txt /*mzscheme-sandbox*
|
||||
mzscheme-threads if_mzsch.txt /*mzscheme-threads*
|
||||
mzscheme-vim if_mzsch.txt /*mzscheme-vim*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*todo.txt* For Vim version 7.2. Last change: 2010 Jan 14
|
||||
*todo.txt* For Vim version 7.2. Last change: 2010 Feb 09
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -30,49 +30,39 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
|
||||
*known-bugs*
|
||||
-------------------- Known bugs and current work -----------------------
|
||||
|
||||
Patch from Dominique Pelle, documentation fixes. (2010 Jan 9)
|
||||
Another patch for README files.
|
||||
Patch for crash in netbeans on join command. (Xavier de Gaye, 2010 Feb 5)
|
||||
|
||||
Patch from Dominique Pelle for buffer reload when fixing spell mistake.
|
||||
(2010 Jan 14)
|
||||
Patch for mzscheme docs. (Sergey Khorev, 2010 Jan 29)
|
||||
|
||||
Extention for MzScheme interface. (Sergey Khorev, 2009 Dec 21, update Dec 26)
|
||||
Patch to support netbeans in Unix console Vim. (Xavier de Gaye, 2009 Apr 26)
|
||||
Now with Mercurial repository (2010 Jan 2)
|
||||
|
||||
patch from Sergey Khorev for "*" command escaping. (2010 Jan 5)
|
||||
Warnings for Python 2.6.4. (Dominique Pelle, 2010 Jan 31)
|
||||
|
||||
Patch: :compiler command doesn't function properly when invoked in a function
|
||||
(Yukihiro Nakadaira)
|
||||
Patch for better fix for Win64. (Sergey Khorev, 2010 Feb 4)
|
||||
|
||||
Patch for error messages. (Dominique Pelle, 2010 Feb 5)
|
||||
Patch for visual-operators text (Dominique Pelle, 2010 Feb 6)
|
||||
|
||||
Patch for Win64 MingW struct size. (Andy Kittner, 2010 Feb 7)
|
||||
|
||||
Patch for Perl interface with Perl 5.10. (Sergey Khorev, 2010 Feb 5)
|
||||
|
||||
Patch for xxd to support "-r -p" as documented. (James Vega, 2010 Feb 8)
|
||||
|
||||
Win32: patch for cross compile xxd and GvimExt. (Markus Heidelberg, 2009 Mar
|
||||
18) Also update INSTALLpc.txt?
|
||||
Patch for xxd/Make_cyg.mak. (Chris Sutcliffe, 2009 Jun 10) Included in the
|
||||
above?
|
||||
|
||||
iconv() doesn't fail on an illegal character, as documented. (Yongwei Wu, 2009
|
||||
Nov 15, example Nov 26) Add argument to specify whether iconv() should fail
|
||||
or replace with a character and continue?
|
||||
|
||||
Problem with window jumping to other screen when changing font. (patch by
|
||||
Michael Wookey, 2009 Oct 16)
|
||||
Better: if the window offset was negative before changing something, then
|
||||
don't change it.
|
||||
|
||||
Patch to make CTRL-] work on scheme keywords. (Sergey Khorev, 2010 Jan 5)
|
||||
|
||||
Gcc warning for condition that can never be true, fold.c line 3242. (James
|
||||
Vega, 2010 Jan 13)
|
||||
|
||||
Omni menu position one column too far to the right, double-wide chars split to
|
||||
next line. (Jiang Ma, 2010 Jan 10)
|
||||
Explicit example from Dominique.
|
||||
Need to check that the last character fits?
|
||||
Patch from Dominique Pelle. (2010 Jan 12) One more (2010 Jan 12)
|
||||
|
||||
has("win64") returns zero. Patch from Sergey Khorev, 2009 Jan 5.
|
||||
Or define WIN64 when _WIN64 is defined, change all _WIN64 to WIN64.
|
||||
|
||||
Add local time at start of --startuptime output.
|
||||
Requires configure check for localtime().
|
||||
Use format year-month-day hr:min:sec.
|
||||
|
||||
Patch to support netbeans in Unix console Vim. (Xaview de Gaye, 2009 Apr 26)
|
||||
Now with Mercurial repository (2010 Jan 2)
|
||||
|
||||
Shell not recognized properly if it ends in "csh -f". (James Vega, 2009 Nov 3)
|
||||
Find tail? Might have a / in argument. Find space? Might have space in
|
||||
path.
|
||||
@@ -177,7 +167,7 @@ Problem with <script> mappings (Andy Wokula, 2009 Mar 8)
|
||||
|
||||
Patch to support netbeans for Mac. (Kazuki Sakamoto, 2009 Jun 25)
|
||||
|
||||
Patch to support clibpoard for Mac terminal. (Jjgod Jiang, 2009 Aug 1)
|
||||
Patch to support clipboard for Mac terminal. (Jjgod Jiang, 2009 Aug 1)
|
||||
|
||||
When starting Vim with "gvim -f -u non_existent_file > foo.txt" there are a
|
||||
few control characters in the output. (Dale Wiles, 2009 May 28)
|
||||
@@ -191,6 +181,7 @@ J. Wang, 2009 Mar 31)
|
||||
Patch for vertical line at certain column position, 'guidecolumn' option.
|
||||
(Pankaj Garg, 2009 Apr 14, aka Lone, Apr 15)
|
||||
Update 2009 May 2, 'margincolumn'
|
||||
Alternative patch. (2010 Feb 2, Gregor Uhlenheuer)
|
||||
|
||||
Add different highlighting for a fold line depending on the fold level.
|
||||
Patch. (Noel Henson, 2009 Sep 13)
|
||||
@@ -258,11 +249,6 @@ Kondakoff, 2009 May 13)
|
||||
|
||||
Win32 GUI: Changing manifest helps for dpi changes (Joe Castro, 2009 Mar 27)
|
||||
|
||||
Win32: patch for cross compile xxd and GvimExt. (Markus Heidelberg, 2009 Mar
|
||||
18) Also update INSTALLpc.txt?
|
||||
Patch for xxd/Make_cyg.mak. (Chris Sutcliffe, 2009 Jun 10) Included in the
|
||||
above?
|
||||
|
||||
Win32: patch for better font scaling. (George Reilly, 2009 Mar 26)
|
||||
|
||||
Win32 GUI: last message from startup doesn't show up when there is an echoerr
|
||||
@@ -856,6 +842,9 @@ When 'backupskip' is set from $TEMP special characters need to be escaped.
|
||||
Another problem is that file_pat_to_reg_pat() doesn't recognize "\\", so "\\("
|
||||
will be seen as a path separator plus "\(".
|
||||
|
||||
gvim d:\path\path\(FILE).xml should not remove the \ before the (.
|
||||
This also fails with --remote.
|
||||
|
||||
When doing ":quit" the Netbeans "killed" event isn't sent. (Xavier de Gaye,
|
||||
2008 Nov 10) call netbeans_file_closed() at the end of buf_freeall(), or in
|
||||
all places where buf_freeall() is called?
|
||||
@@ -920,7 +909,7 @@ Win32: When 'autochdir' is on and 'encoding' is changed, files on the command
|
||||
line are opened again, but from the wrong directory. Apply 'autochdir' only
|
||||
after starting up?
|
||||
|
||||
When showing a diff between a non-existant file and an existing one, with the
|
||||
When showing a diff between a non-existent file and an existing one, with the
|
||||
cursor in the empty buffer, the other buffer only shows the last line. Change
|
||||
the "insert" into a change from one line to many? (Yakov Lerner, 2008 May 27)
|
||||
|
||||
@@ -1046,7 +1035,7 @@ visible.
|
||||
GTK: when setting 'columns' in a startup script and doing ":vertical diffsplit"
|
||||
the window isn't redrawn properly, see two vertical bars.
|
||||
|
||||
GTK: file choser is disabled. Patch by Tim Starling, 2009 Nov 13.
|
||||
GTK: file chooser is disabled. Patch by Tim Starling, 2009 Nov 13.
|
||||
|
||||
The magic clipboard format "VimClipboard2" appears in several places. Should
|
||||
be only one.
|
||||
@@ -2315,7 +2304,7 @@ Spell checking:
|
||||
Is COMPLEXPREFIXES necessary when we have flags for affixes?
|
||||
- Support spelling words in CamelCase as if they were two separate words.
|
||||
Requires some option to enable it. (Timothy Knox)
|
||||
- There is no Finnish spell checking file. For openoffic Voikko is now
|
||||
- There is no Finnish spell checking file. For openoffice Voikko is now
|
||||
used, which is based on Malaga: http://home.arcor.de/bjoern-beutel/malaga/
|
||||
(Teemu Likonen)
|
||||
8 ":mkspell" still takes much too long in Hungarian dictionary from
|
||||
|
||||
@@ -11170,7 +11170,7 @@ Files: runtime/doc/help.txt, runtime/doc/sponsor.txt, runtime/doc/tags,
|
||||
runtime/menu.vim, src/version.c
|
||||
|
||||
Patch 6.2.192
|
||||
Problem: Using CTRL-T and CTRL-D with "gR" messes up the text. (Jonahtan
|
||||
Problem: Using CTRL-T and CTRL-D with "gR" messes up the text. (Jonathan
|
||||
Hankins)
|
||||
Solution: Avoid calling change_indent() recursively.
|
||||
Files: src/edit.c
|
||||
|
||||
@@ -4734,7 +4734,7 @@ New keymap files:
|
||||
Other new runtime files:
|
||||
Esperanto menu and message translations. (Dominique Pelle)
|
||||
Finnish menu and message translations. (Flammie Pirinen)
|
||||
Brazilian Portugese message translations. (Eduardo Dobay)
|
||||
Brazilian Portuguese message translations. (Eduardo Dobay)
|
||||
|
||||
Added floating point support. |Float|
|
||||
|
||||
@@ -4925,7 +4925,7 @@ Files: src/fileio.c, src/os_unix.h
|
||||
|
||||
Patch 7.1.028
|
||||
Problem: Can't use last search pattern for ":sort". (Brian McKee)
|
||||
Solution: When the pattern is emtpy use the last search pattern. (Martin
|
||||
Solution: When the pattern is empty use the last search pattern. (Martin
|
||||
Toft)
|
||||
Files: runtime/doc/change.txt, src/ex_cmds.c
|
||||
|
||||
@@ -5463,7 +5463,7 @@ Solution: Remove the replacement with a question mark when UNICODE16 is not
|
||||
Files: src/screen.c
|
||||
|
||||
Patch 7.1.117
|
||||
Problem: Can't check wether Vim was compiled with Gnome. (Tony Mechelynck)
|
||||
Problem: Can't check whether Vim was compiled with Gnome. (Tony Mechelynck)
|
||||
Solution: Add gui_gnome to the has() list.
|
||||
Files: src/eval.c
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: indent(1) configuration file
|
||||
" Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||
" Latest Revision: 2007-06-17
|
||||
" Latest Revision: 2010-01-23
|
||||
" indent_is_bsd: If exists, will change somewhat to match BSD implementation
|
||||
"
|
||||
" TODO: is the deny-all (a la lilo.vim nice or no?)...
|
||||
@@ -27,7 +27,7 @@ syn region indentComment start='//' skip='\\$' end='$'
|
||||
\ contains=indentTodo,@Spell
|
||||
|
||||
if !exists("indent_is_bsd")
|
||||
syn match indentOptions '-i\|--indentation-level'
|
||||
syn match indentOptions '-i\|--indentation-level\|-il\|--indent-level'
|
||||
\ nextgroup=indentNumber skipwhite skipempty
|
||||
endif
|
||||
syn match indentOptions '-\%(bli\|c\%([bl]i\|[dip]\)\=\|di\=\|ip\=\|lc\=\|pp\=i\|sbi\|ts\|-\%(brace-indent\|comment-indentation\|case-brace-indentation\|declaration-comment-column\|continuation-indentation\|case-indentation\|else-endif-column\|line-comments-indentation\|declaration-indentation\|indent-level\|parameter-indentation\|line-length\|comment-line-length\|paren-indentation\|preprocessor-indentation\|struct-brace-indentation\|tab-size\)\)'
|
||||
@@ -123,6 +123,7 @@ syn keyword indentOptions -bacc --blank-lines-after-ifdefs
|
||||
\ -ut --use-tabs
|
||||
\ -v --verbose
|
||||
\ -version --version
|
||||
\ -linux --linux-style
|
||||
|
||||
if exists("indent_is_bsd")
|
||||
syn keyword indentOptions -ip -ei -nei
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
" Vim syntax file
|
||||
" Language: lilo configuration (lilo.conf)
|
||||
" Maintainer: help wanted!
|
||||
" Maintainer: Niels Horn <niels.horn@gmail.com>
|
||||
" Previous Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
|
||||
" Last Change: 2009-01-27
|
||||
" Last Change: 2010-02-03
|
||||
|
||||
" Setup
|
||||
if version >= 600
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: reStructuredText documentation format
|
||||
" Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||
" Latest Revision: 2009-05-25
|
||||
" Latest Revision: 2010-01-23
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
@@ -137,7 +137,7 @@ syn match rstStandaloneHyperlink contains=@NoSpell
|
||||
|
||||
" TODO: Use better syncing. I don’t know the specifics of syncing well enough,
|
||||
" though.
|
||||
syn sync minlines=50
|
||||
syn sync minlines=50 linebreaks=1
|
||||
|
||||
hi def link rstTodo Todo
|
||||
hi def link rstComment Comment
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: Zsh shell script
|
||||
" Maintainer: Nikolai Weibull <now@bitwi.se>
|
||||
" Latest Revision: 2008-07-17
|
||||
" Latest Revision: 2010-01-23
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
@@ -14,7 +14,7 @@ setlocal iskeyword+=-
|
||||
|
||||
syn keyword zshTodo contained TODO FIXME XXX NOTE
|
||||
|
||||
syn region zshComment display oneline start='\%(^\|\s\)#' end='$'
|
||||
syn region zshComment oneline start='\%(^\|\s\)#' end='$'
|
||||
\ contains=zshTodo,@Spell
|
||||
|
||||
syn match zshPreProc '^\%1l#\%(!\|compdef\|autoload\).*$'
|
||||
|
||||
@@ -187,16 +187,27 @@ func! BuildCombiningTable()
|
||||
wincmd p
|
||||
endfunc
|
||||
|
||||
" Build the ambiguous table in a new buffer.
|
||||
" Build the double width or ambiguous width table in a new buffer.
|
||||
" Uses s:widthprops and s:dataprops.
|
||||
func! BuildAmbiguousTable()
|
||||
func! BuildWidthTable(pattern, tableName)
|
||||
let start = -1
|
||||
let end = -1
|
||||
let ranges = []
|
||||
let dataidx = 0
|
||||
for p in s:widthprops
|
||||
if p[1][0] == 'A'
|
||||
let n = ('0x' . p[0]) + 0
|
||||
if p[1][0] =~ a:pattern
|
||||
if p[0] =~ '\.\.'
|
||||
" It is a range. we don't check for composing char then.
|
||||
let rng = split(p[0], '\.\.')
|
||||
if len(rng) != 2
|
||||
echoerr "Cannot parse range: '" . p[0] . "' in width table"
|
||||
endif
|
||||
let n = ('0x' . rng[0]) + 0
|
||||
let n_last = ('0x' . rng[1]) + 0
|
||||
else
|
||||
let n = ('0x' . p[0]) + 0
|
||||
let n_last = n
|
||||
endif
|
||||
" Find this char in the data table.
|
||||
while 1
|
||||
let dn = ('0x' . s:dataprops[dataidx][0]) + 0
|
||||
@@ -205,27 +216,23 @@ func! BuildAmbiguousTable()
|
||||
endif
|
||||
let dataidx += 1
|
||||
endwhile
|
||||
if dn != n
|
||||
if dn != n && n_last == n
|
||||
echoerr "Cannot find character " . n . " in data table"
|
||||
endif
|
||||
" Only use the char when it's not a composing char.
|
||||
" But use all chars from a range.
|
||||
let dp = s:dataprops[dataidx]
|
||||
if dp[2] != 'Mn' && dp[2] != 'Mc' && dp[2] != 'Me'
|
||||
if n_last > n || (dp[2] != 'Mn' && dp[2] != 'Mc' && dp[2] != 'Me')
|
||||
if start >= 0 && end + 1 == n
|
||||
" continue with same range.
|
||||
let end = n
|
||||
else
|
||||
if start >= 0
|
||||
" produce previous range
|
||||
call add(ranges, printf("\t{0x%04x, 0x%04x},", start, end))
|
||||
endif
|
||||
let start = n
|
||||
if p[0] =~ '\.\.'
|
||||
let end = ('0x' . substitute(p[0], '.*\.\.', '', '')) + 0
|
||||
else
|
||||
let end = n
|
||||
endif
|
||||
endif
|
||||
let end = n_last
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
@@ -235,8 +242,8 @@ func! BuildAmbiguousTable()
|
||||
|
||||
" New buffer to put the result in.
|
||||
new
|
||||
file ambiguous
|
||||
call setline(1, " static struct interval ambiguous[] =")
|
||||
exe "file " . a:tableName
|
||||
call setline(1, " static struct interval " . a:tableName . "[] =")
|
||||
call setline(2, " {")
|
||||
call append('$', ranges)
|
||||
call setline('$', getline('$')[:-2]) " remove last comma
|
||||
@@ -276,5 +283,8 @@ edit http://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt
|
||||
" Parse each line, create a list of lists.
|
||||
call ParseWidthProps()
|
||||
|
||||
" Build the ambiguous table.
|
||||
call BuildAmbiguousTable()
|
||||
" Build the double width table.
|
||||
call BuildWidthTable('[WF]', 'doublewidth')
|
||||
|
||||
" Build the ambiguous width table.
|
||||
call BuildWidthTable('A', 'ambiguous')
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
#if !defined(AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_)
|
||||
#define AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#if defined(_MSC_VER) && _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
#endif
|
||||
|
||||
// Insert your headers here
|
||||
// #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
@@ -34,7 +34,7 @@
|
||||
#define INC_OLE2 // WIN32, get ole2 from windows.h
|
||||
|
||||
/* Visual Studio 2005 has 'deprecated' many of the standard CRT functions */
|
||||
#if _MSC_VER >= 1400
|
||||
#if defined(_MSC_VER) && _MSC_VER >= 1400
|
||||
# define _CRT_SECURE_NO_DEPRECATE
|
||||
# define _CRT_NONSTDC_NO_DEPRECATE
|
||||
#endif
|
||||
@@ -44,7 +44,7 @@
|
||||
#include <shlobj.h>
|
||||
|
||||
/* Accommodate old versions of VC that don't have a modern Platform SDK */
|
||||
#if _MSC_VER < 1300
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1300
|
||||
# undef UINT_PTR
|
||||
# define UINT_PTR UINT
|
||||
#endif
|
||||
|
||||
@@ -395,7 +395,9 @@ CClink = $(CC)
|
||||
|
||||
# RUBY
|
||||
# Uncomment this when you want to include the Ruby interface.
|
||||
#CONF_OPT_RUBY = --enable-rubyinterp
|
||||
# Note: you need the development package (e.g., ruby1.9.1-dev on Ubuntu).
|
||||
# CONF_OPT_RUBY = --enable-rubyinterp
|
||||
# CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1
|
||||
|
||||
# MZSCHEME
|
||||
# Uncomment this when you want to include the MzScheme interface.
|
||||
|
||||
30
src/auto/configure
vendored
30
src/auto/configure
vendored
@@ -793,6 +793,7 @@ with_python_config_dir
|
||||
enable_tclinterp
|
||||
with_tclsh
|
||||
enable_rubyinterp
|
||||
with_ruby_command
|
||||
enable_cscope
|
||||
enable_workshop
|
||||
enable_netbeans
|
||||
@@ -1503,6 +1504,7 @@ Optional Packages:
|
||||
--with-plthome=PLTHOME Use PLTHOME.
|
||||
--with-python-config-dir=PATH Python's config directory
|
||||
--with-tclsh=PATH which tclsh to use (default: tclsh8.0)
|
||||
--with-ruby-command=RUBY name of the Ruby command (default: ruby)
|
||||
--with-x use the X Window System
|
||||
--with-gtk-prefix=PFX Prefix where GTK is installed (optional)
|
||||
--with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)
|
||||
@@ -5703,9 +5705,21 @@ fi
|
||||
{ $as_echo "$as_me:$LINENO: result: $enable_rubyinterp" >&5
|
||||
$as_echo "$enable_rubyinterp" >&6; }
|
||||
if test "$enable_rubyinterp" = "yes"; then
|
||||
{ $as_echo "$as_me:$LINENO: checking --with-ruby-command argument" >&5
|
||||
$as_echo_n "checking --with-ruby-command argument... " >&6; }
|
||||
|
||||
# Extract the first word of "ruby", so it can be a program name with args.
|
||||
set dummy ruby; ac_word=$2
|
||||
# Check whether --with-ruby-command was given.
|
||||
if test "${with_ruby_command+set}" = set; then
|
||||
withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:$LINENO: result: $RUBY_CMD" >&5
|
||||
$as_echo "$RUBY_CMD" >&6; }
|
||||
else
|
||||
RUBY_CMD="ruby"; { $as_echo "$as_me:$LINENO: result: defaulting to $RUBY_CMD" >&5
|
||||
$as_echo "defaulting to $RUBY_CMD" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
# Extract the first word of "$RUBY_CMD", so it can be a program name with args.
|
||||
set dummy $RUBY_CMD; ac_word=$2
|
||||
{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
|
||||
$as_echo_n "checking for $ac_word... " >&6; }
|
||||
if test "${ac_cv_path_vi_cv_path_ruby+set}" = set; then
|
||||
@@ -5752,11 +5766,17 @@ $as_echo_n "checking Ruby version... " >&6; }
|
||||
$as_echo "OK" >&6; }
|
||||
{ $as_echo "$as_me:$LINENO: checking Ruby header files" >&5
|
||||
$as_echo_n "checking Ruby header files... " >&6; }
|
||||
rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null`
|
||||
rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null`
|
||||
if test "X$rubyhdrdir" != "X"; then
|
||||
{ $as_echo "$as_me:$LINENO: result: $rubyhdrdir" >&5
|
||||
$as_echo "$rubyhdrdir" >&6; }
|
||||
RUBY_CFLAGS="-I$rubyhdrdir"
|
||||
rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["arch"]'`
|
||||
if test -d "$rubyhdrdir/$rubyarch"; then
|
||||
RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
|
||||
fi
|
||||
rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"].gsub(/\./, "")[0,2]'`
|
||||
RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
|
||||
rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'`
|
||||
if test "X$rubylibs" != "X"; then
|
||||
RUBY_LIBS="$rubylibs"
|
||||
@@ -5793,8 +5813,8 @@ $as_echo "$rubyhdrdir" >&6; }
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
{ $as_echo "$as_me:$LINENO: result: not found" >&5
|
||||
$as_echo "not found" >&6; }
|
||||
{ $as_echo "$as_me:$LINENO: result: not found; disabling Ruby" >&5
|
||||
$as_echo "not found; disabling Ruby" >&6; }
|
||||
fi
|
||||
else
|
||||
{ $as_echo "$as_me:$LINENO: result: too old; need Ruby version 1.6.0 or later" >&5
|
||||
|
||||
@@ -949,17 +949,27 @@ AC_ARG_ENABLE(rubyinterp,
|
||||
[enable_rubyinterp="no"])
|
||||
AC_MSG_RESULT($enable_rubyinterp)
|
||||
if test "$enable_rubyinterp" = "yes"; then
|
||||
AC_MSG_CHECKING(--with-ruby-command argument)
|
||||
AC_ARG_WITH(ruby-command, [ --with-ruby-command=RUBY name of the Ruby command (default: ruby)],
|
||||
RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD),
|
||||
RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
|
||||
AC_SUBST(vi_cv_path_ruby)
|
||||
AC_PATH_PROG(vi_cv_path_ruby, ruby)
|
||||
AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
|
||||
if test "X$vi_cv_path_ruby" != "X"; then
|
||||
AC_MSG_CHECKING(Ruby version)
|
||||
if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
|
||||
AC_MSG_RESULT(OK)
|
||||
AC_MSG_CHECKING(Ruby header files)
|
||||
rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null`
|
||||
rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null`
|
||||
if test "X$rubyhdrdir" != "X"; then
|
||||
AC_MSG_RESULT($rubyhdrdir)
|
||||
RUBY_CFLAGS="-I$rubyhdrdir"
|
||||
rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["arch"]]'`
|
||||
if test -d "$rubyhdrdir/$rubyarch"; then
|
||||
RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
|
||||
fi
|
||||
rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["ruby_version"]].gsub(/\./, "")[[0,2]]'`
|
||||
RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
|
||||
rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'`
|
||||
if test "X$rubylibs" != "X"; then
|
||||
RUBY_LIBS="$rubylibs"
|
||||
@@ -997,7 +1007,7 @@ if test "$enable_rubyinterp" = "yes"; then
|
||||
RUBY_PRO="if_ruby.pro"
|
||||
AC_DEFINE(FEAT_RUBY)
|
||||
else
|
||||
AC_MSG_RESULT(not found, disabling Ruby)
|
||||
AC_MSG_RESULT(not found; disabling Ruby)
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
|
||||
|
||||
@@ -1115,6 +1115,79 @@ ex_profile(eap)
|
||||
}
|
||||
}
|
||||
|
||||
/* Command line expansion for :profile. */
|
||||
static enum
|
||||
{
|
||||
PEXP_SUBCMD, /* expand :profile sub-commands */
|
||||
PEXP_FUNC, /* expand :profile func {funcname} */
|
||||
} pexpand_what;
|
||||
|
||||
static char *pexpand_cmds[] = {
|
||||
"start",
|
||||
#define PROFCMD_START 0
|
||||
"pause",
|
||||
#define PROFCMD_PAUSE 1
|
||||
"continue",
|
||||
#define PROFCMD_CONTINUE 2
|
||||
"func",
|
||||
#define PROFCMD_FUNC 3
|
||||
"file",
|
||||
#define PROFCMD_FILE 4
|
||||
NULL
|
||||
#define PROFCMD_LAST 5
|
||||
};
|
||||
|
||||
/*
|
||||
* Function given to ExpandGeneric() to obtain the profile command
|
||||
* specific expansion.
|
||||
*/
|
||||
char_u *
|
||||
get_profile_name(xp, idx)
|
||||
expand_T *xp UNUSED;
|
||||
int idx;
|
||||
{
|
||||
switch (pexpand_what)
|
||||
{
|
||||
case PEXP_SUBCMD:
|
||||
return (char_u *)pexpand_cmds[idx];
|
||||
/* case PEXP_FUNC: TODO */
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle command line completion for :profile command.
|
||||
*/
|
||||
void
|
||||
set_context_in_profile_cmd(xp, arg)
|
||||
expand_T *xp;
|
||||
char_u *arg;
|
||||
{
|
||||
char_u *end_subcmd;
|
||||
int len;
|
||||
|
||||
/* Default: expand subcommands. */
|
||||
xp->xp_context = EXPAND_PROFILE;
|
||||
pexpand_what = PEXP_SUBCMD;
|
||||
xp->xp_pattern = arg;
|
||||
|
||||
end_subcmd = skiptowhite(arg);
|
||||
if (*end_subcmd == NUL)
|
||||
return;
|
||||
|
||||
len = end_subcmd - arg;
|
||||
if (len == 5 && STRNCMP(arg, "start", 5) == 0)
|
||||
{
|
||||
xp->xp_context = EXPAND_FILES;
|
||||
xp->xp_pattern = skipwhite(end_subcmd);
|
||||
return;
|
||||
}
|
||||
|
||||
/* TODO: expand function names after "func" */
|
||||
xp->xp_context = EXPAND_NOTHING;
|
||||
}
|
||||
|
||||
/*
|
||||
* Dump the profiling info.
|
||||
*/
|
||||
@@ -2814,11 +2887,11 @@ static FILE *fopen_noinh_readbin __ARGS((char *filename));
|
||||
fopen_noinh_readbin(filename)
|
||||
char *filename;
|
||||
{
|
||||
int fd_tmp = mch_open(filename, O_RDONLY
|
||||
# ifdef WIN32
|
||||
O_BINARY | O_NOINHERIT
|
||||
int fd_tmp = mch_open(filename, O_RDONLY | O_BINARY | O_NOINHERIT, 0);
|
||||
# else
|
||||
int fd_tmp = mch_open(filename, O_RDONLY, 0);
|
||||
# endif
|
||||
, 0);
|
||||
|
||||
if (fd_tmp == -1)
|
||||
return NULL;
|
||||
|
||||
@@ -3804,6 +3804,11 @@ set_one_cmd_context(xp, buff)
|
||||
xp->xp_context = EXPAND_NOTHING;
|
||||
break;
|
||||
#endif
|
||||
#if defined(FEAT_PROFILE)
|
||||
case CMD_profile:
|
||||
set_context_in_profile_cmd(xp, arg);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#endif /* FEAT_CMDL_COMPL */
|
||||
|
||||
|
||||
@@ -4522,6 +4522,9 @@ ExpandFromContext(xp, pat, num_file, file, options)
|
||||
#ifdef FEAT_SIGNS
|
||||
{EXPAND_SIGN, get_sign_name, TRUE},
|
||||
#endif
|
||||
#ifdef FEAT_PROFILE
|
||||
{EXPAND_PROFILE, get_profile_name, TRUE},
|
||||
#endif
|
||||
#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
|
||||
&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
|
||||
{EXPAND_LANGUAGE, get_lang_arg, TRUE},
|
||||
|
||||
@@ -849,11 +849,17 @@ foldUpdate(wp, top, bot)
|
||||
fold_T *fp;
|
||||
|
||||
/* Mark all folds from top to bot as maybe-small. */
|
||||
(void)foldFind(&curwin->w_folds, curwin->w_cursor.lnum, &fp);
|
||||
(void)foldFind(&curwin->w_folds, top, &fp);
|
||||
while (fp < (fold_T *)curwin->w_folds.ga_data + curwin->w_folds.ga_len
|
||||
&& fp->fd_top < bot)
|
||||
{
|
||||
fp->fd_small = MAYBE;
|
||||
|
||||
/* Not sure if this is the right place to reset fd_flags (suggested by
|
||||
* Lech Lorens). */
|
||||
if (wp->w_foldinvalid)
|
||||
fp->fd_flags = FD_LEVEL;
|
||||
|
||||
++fp;
|
||||
}
|
||||
|
||||
|
||||
@@ -2389,6 +2389,17 @@ vgetorpeek(advance)
|
||||
/* complete match */
|
||||
if (keylen >= 0 && keylen <= typebuf.tb_len)
|
||||
{
|
||||
#ifdef FEAT_EVAL
|
||||
int save_m_expr;
|
||||
int save_m_noremap;
|
||||
int save_m_silent;
|
||||
char_u *save_m_keys;
|
||||
char_u *save_m_str;
|
||||
#else
|
||||
# define save_m_noremap mp->m_noremap
|
||||
# define save_m_silent mp->m_silent
|
||||
#endif
|
||||
|
||||
/* write chars to script file(s) */
|
||||
if (keylen > typebuf.tb_maplen)
|
||||
gotchars(typebuf.tb_buf + typebuf.tb_off
|
||||
@@ -2431,6 +2442,16 @@ vgetorpeek(advance)
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
/* Copy the values from *mp that are used, because
|
||||
* evaluating the expression may invoke a function
|
||||
* that redefines the mapping, thereby making *mp
|
||||
* invalid. */
|
||||
save_m_expr = mp->m_expr;
|
||||
save_m_noremap = mp->m_noremap;
|
||||
save_m_silent = mp->m_silent;
|
||||
save_m_keys = NULL; /* only saved when needed */
|
||||
save_m_str = NULL; /* only saved when needed */
|
||||
|
||||
/*
|
||||
* Handle ":map <expr>": evaluate the {rhs} as an
|
||||
* expression. Save and restore the typeahead so that
|
||||
@@ -2446,7 +2467,9 @@ vgetorpeek(advance)
|
||||
if (tabuf.typebuf_valid)
|
||||
{
|
||||
vgetc_busy = 0;
|
||||
s = eval_map_expr(mp->m_str, NUL);
|
||||
save_m_keys = vim_strsave(mp->m_keys);
|
||||
save_m_str = vim_strsave(mp->m_str);
|
||||
s = eval_map_expr(save_m_str, NUL);
|
||||
vgetc_busy = save_vgetc_busy;
|
||||
}
|
||||
else
|
||||
@@ -2469,18 +2492,33 @@ vgetorpeek(advance)
|
||||
i = FAIL;
|
||||
else
|
||||
{
|
||||
i = ins_typebuf(s,
|
||||
mp->m_noremap != REMAP_YES
|
||||
? mp->m_noremap
|
||||
: STRNCMP(s, mp->m_keys,
|
||||
(size_t)keylen) != 0
|
||||
? REMAP_YES : REMAP_SKIP,
|
||||
0, TRUE, cmd_silent || mp->m_silent);
|
||||
int noremap;
|
||||
|
||||
if (save_m_noremap != REMAP_YES)
|
||||
noremap = save_m_noremap;
|
||||
else if (
|
||||
#ifdef FEAT_EVAL
|
||||
if (mp->m_expr)
|
||||
STRNCMP(s, save_m_keys != NULL
|
||||
? save_m_keys : mp->m_keys,
|
||||
(size_t)keylen)
|
||||
#else
|
||||
STRNCMP(s, mp->m_keys, (size_t)keylen)
|
||||
#endif
|
||||
!= 0)
|
||||
noremap = REMAP_YES;
|
||||
else
|
||||
noremap = REMAP_SKIP;
|
||||
i = ins_typebuf(s, noremap,
|
||||
0, TRUE, cmd_silent || save_m_silent);
|
||||
#ifdef FEAT_EVAL
|
||||
if (save_m_expr)
|
||||
vim_free(s);
|
||||
#endif
|
||||
}
|
||||
#ifdef FEAT_EVAL
|
||||
vim_free(save_m_keys);
|
||||
vim_free(save_m_str);
|
||||
#endif
|
||||
if (i == FAIL)
|
||||
{
|
||||
c = -1;
|
||||
|
||||
14
src/gui.c
14
src/gui.c
@@ -1390,6 +1390,7 @@ gui_set_shellsize(mustset, fit_to_display, direction)
|
||||
int un_maximize = mustset;
|
||||
int did_adjust = 0;
|
||||
#endif
|
||||
int x = -1, y = -1;
|
||||
|
||||
if (!gui.shell_created)
|
||||
return;
|
||||
@@ -1406,6 +1407,10 @@ gui_set_shellsize(mustset, fit_to_display, direction)
|
||||
|
||||
base_width = gui_get_base_width();
|
||||
base_height = gui_get_base_height();
|
||||
if (fit_to_display)
|
||||
/* Remember the original window position. */
|
||||
gui_mch_get_winpos(&x, &y);
|
||||
|
||||
#ifdef USE_SUN_WORKSHOP
|
||||
if (!mustset && usingSunWorkShop
|
||||
&& workshop_get_width_height(&width, &height))
|
||||
@@ -1473,11 +1478,12 @@ gui_set_shellsize(mustset, fit_to_display, direction)
|
||||
|
||||
gui_mch_set_shellsize(width, height, min_width, min_height,
|
||||
base_width, base_height, direction);
|
||||
if (fit_to_display)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
/* Some window managers put the Vim window left of/above the screen. */
|
||||
if (fit_to_display && x >= 0 && y >= 0)
|
||||
{
|
||||
/* Some window managers put the Vim window left of/above the screen.
|
||||
* Only change the position if it wasn't already negative before
|
||||
* (happens on MS-Windows with a secondary monitor). */
|
||||
gui_mch_update();
|
||||
if (gui_mch_get_winpos(&x, &y) == OK && (x < 0 || y < 0))
|
||||
gui_mch_set_winpos(x < 0 ? 0 : x, y < 0 ? 0 : y);
|
||||
|
||||
@@ -6190,7 +6190,7 @@ gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
|
||||
int pcc[MAX_MCO];
|
||||
|
||||
/* TODO: use the composing characters */
|
||||
c = utfc_ptr2char_len(p, &pcc, len - (p - s));
|
||||
c = utfc_ptr2char_len(p, pcc, len - (p - s));
|
||||
if (c >= 0x10000) /* show chars > 0xffff as ? */
|
||||
c = 0xbf;
|
||||
buf[textlen].byte1 = c >> 8;
|
||||
|
||||
@@ -1329,6 +1329,7 @@ gui_mch_init(void)
|
||||
WNDCLASS wndclass;
|
||||
#ifdef FEAT_MBYTE
|
||||
const WCHAR szVimWndClassW[] = VIM_CLASSW;
|
||||
const WCHAR szTextAreaClassW[] = L"VimTextArea";
|
||||
WNDCLASSW wndclassw;
|
||||
#endif
|
||||
#ifdef GLOBAL_IME
|
||||
@@ -1479,6 +1480,28 @@ gui_mch_init(void)
|
||||
#endif
|
||||
|
||||
/* Create the text area window */
|
||||
#ifdef FEAT_MBYTE
|
||||
if (wide_WindowProc)
|
||||
{
|
||||
if (GetClassInfoW(s_hinst, szTextAreaClassW, &wndclassw) == 0)
|
||||
{
|
||||
wndclassw.style = CS_OWNDC;
|
||||
wndclassw.lpfnWndProc = _TextAreaWndProc;
|
||||
wndclassw.cbClsExtra = 0;
|
||||
wndclassw.cbWndExtra = 0;
|
||||
wndclassw.hInstance = s_hinst;
|
||||
wndclassw.hIcon = NULL;
|
||||
wndclassw.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wndclassw.hbrBackground = NULL;
|
||||
wndclassw.lpszMenuName = NULL;
|
||||
wndclassw.lpszClassName = szTextAreaClassW;
|
||||
|
||||
if (RegisterClassW(&wndclassw) == 0)
|
||||
return FAIL;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (GetClassInfo(s_hinst, szTextAreaClass, &wndclass) == 0)
|
||||
{
|
||||
wndclass.style = CS_OWNDC;
|
||||
|
||||
@@ -1084,9 +1084,8 @@ _TextAreaWndProc(
|
||||
case WM_NOTIFY: Handle_WM_Notify(hwnd, (LPNMHDR)lParam);
|
||||
return TRUE;
|
||||
#endif
|
||||
|
||||
default:
|
||||
return MyWindowProc(hwnd, uMsg, wParam, lParam);
|
||||
default:
|
||||
return MyWindowProc(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3346,7 +3345,7 @@ gui_mch_browseW(
|
||||
#ifdef OPENFILENAME_SIZE_VERSION_400
|
||||
/* be compatible with Windows NT 4.0 */
|
||||
/* TODO: what to use for OPENFILENAMEW??? */
|
||||
fileStruct.lStructSize = sizeof(OPENFILENAME_SIZE_VERSION_400);
|
||||
fileStruct.lStructSize = OPENFILENAME_SIZE_VERSION_400;
|
||||
#else
|
||||
fileStruct.lStructSize = sizeof(fileStruct);
|
||||
#endif
|
||||
@@ -3507,7 +3506,7 @@ gui_mch_browse(
|
||||
memset(&fileStruct, 0, sizeof(OPENFILENAME));
|
||||
#ifdef OPENFILENAME_SIZE_VERSION_400
|
||||
/* be compatible with Windows NT 4.0 */
|
||||
fileStruct.lStructSize = sizeof(OPENFILENAME_SIZE_VERSION_400);
|
||||
fileStruct.lStructSize = OPENFILENAME_SIZE_VERSION_400;
|
||||
#else
|
||||
fileStruct.lStructSize = sizeof(fileStruct);
|
||||
#endif
|
||||
|
||||
@@ -93,6 +93,9 @@ EXTERN_C void boot_DynaLoader __ARGS((pTHX_ CV*));
|
||||
# define perl_free dll_perl_free
|
||||
# define Perl_get_context dll_Perl_get_context
|
||||
# define Perl_croak dll_Perl_croak
|
||||
# if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
|
||||
# define Perl_croak_xs_usage dll_Perl_croak_xs_usage
|
||||
# endif
|
||||
# ifndef PROTO
|
||||
# define Perl_croak_nocontext dll_Perl_croak_nocontext
|
||||
# define Perl_call_argv dll_Perl_call_argv
|
||||
@@ -202,6 +205,9 @@ static int (*perl_run)(PerlInterpreter*);
|
||||
static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
|
||||
static void* (*Perl_get_context)(void);
|
||||
static void (*Perl_croak)(pTHX_ const char*, ...);
|
||||
#if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
|
||||
static void (*Perl_croak_xs_usage)(pTHX_ const CV *const, const char *const params);
|
||||
#endif
|
||||
static void (*Perl_croak_nocontext)(const char*, ...);
|
||||
static I32 (*Perl_dowantarray)(pTHX);
|
||||
static void (*Perl_free_tmps)(pTHX);
|
||||
@@ -306,6 +312,9 @@ static struct {
|
||||
{"perl_parse", (PERL_PROC*)&perl_parse},
|
||||
{"Perl_get_context", (PERL_PROC*)&Perl_get_context},
|
||||
{"Perl_croak", (PERL_PROC*)&Perl_croak},
|
||||
#if (PERL_REVISION == 5) && (PERL_VERSION >= 10)
|
||||
{"Perl_croak_xs_usage", (PERL_PROC*)&Perl_croak_xs_usage},
|
||||
#endif
|
||||
{"Perl_croak_nocontext", (PERL_PROC*)&Perl_croak_nocontext},
|
||||
{"Perl_dowantarray", (PERL_PROC*)&Perl_dowantarray},
|
||||
{"Perl_free_tmps", (PERL_PROC*)&Perl_free_tmps},
|
||||
|
||||
191
src/if_ruby.c
191
src/if_ruby.c
@@ -48,7 +48,15 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* suggested by Ariya Mizutani */
|
||||
#if (_MSC_VER == 1200)
|
||||
# undef _WIN32_WINNT
|
||||
#endif
|
||||
|
||||
#include <ruby.h>
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
# include <ruby/encoding.h>
|
||||
#endif
|
||||
|
||||
#undef EXTERN
|
||||
#undef _
|
||||
@@ -60,6 +68,28 @@
|
||||
# define __OPENTRANSPORTPROVIDERS__
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Backward compatiblity for Ruby 1.8 and earlier.
|
||||
* Ruby 1.9 does not provide STR2CSTR, instead StringValuePtr is provided.
|
||||
* Ruby 1.9 does not provide RXXX(s)->len and RXXX(s)->ptr, instead
|
||||
* RXXX_LEN(s) and RXXX_PTR(s) are provided.
|
||||
*/
|
||||
#ifndef StringValuePtr
|
||||
# define StringValuePtr(s) STR2CSTR(s)
|
||||
#endif
|
||||
#ifndef RARRAY_LEN
|
||||
# define RARRAY_LEN(s) RARRAY(s)->len
|
||||
#endif
|
||||
#ifndef RARRAY_PTR
|
||||
# define RARRAY_PTR(s) RARRAY(s)->ptr
|
||||
#endif
|
||||
#ifndef RSTRING_LEN
|
||||
# define RSTRING_LEN(s) RSTRING(s)->len
|
||||
#endif
|
||||
#ifndef RSTRING_PTR
|
||||
# define RSTRING_PTR(s) RSTRING(s)->ptr
|
||||
#endif
|
||||
|
||||
#include "vim.h"
|
||||
#include "version.h"
|
||||
|
||||
@@ -129,13 +159,26 @@ static void ruby_vim_init(void);
|
||||
#define rb_str_concat dll_rb_str_concat
|
||||
#define rb_str_new dll_rb_str_new
|
||||
#define rb_str_new2 dll_rb_str_new2
|
||||
#define ruby_errinfo (*dll_ruby_errinfo)
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
# define rb_errinfo dll_rb_errinfo
|
||||
#else
|
||||
# define ruby_errinfo (*dll_ruby_errinfo)
|
||||
#endif
|
||||
#define ruby_init dll_ruby_init
|
||||
#define ruby_init_loadpath dll_ruby_init_loadpath
|
||||
#define NtInitialize dll_NtInitialize
|
||||
#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
|
||||
# define rb_w32_snprintf dll_rb_w32_snprintf
|
||||
#endif
|
||||
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
# define ruby_script dll_ruby_script
|
||||
# define rb_enc_find_index dll_rb_enc_find_index
|
||||
# define rb_enc_find dll_rb_enc_find
|
||||
# define rb_enc_str_new dll_rb_enc_str_new
|
||||
# define rb_sprintf dll_rb_sprintf
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Pointers for dynamic link
|
||||
*/
|
||||
@@ -183,13 +226,26 @@ static VALUE (*dll_rb_str_cat) (VALUE, const char*, long);
|
||||
static VALUE (*dll_rb_str_concat) (VALUE, VALUE);
|
||||
static VALUE (*dll_rb_str_new) (const char*, long);
|
||||
static VALUE (*dll_rb_str_new2) (const char*);
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
static VALUE (*dll_rb_errinfo) (void);
|
||||
#else
|
||||
static VALUE *dll_ruby_errinfo;
|
||||
#endif
|
||||
static void (*dll_ruby_init) (void);
|
||||
static void (*dll_ruby_init_loadpath) (void);
|
||||
static void (*dll_NtInitialize) (int*, char***);
|
||||
#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
|
||||
static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
|
||||
#endif
|
||||
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
static void (*dll_ruby_script) (const char*);
|
||||
static int (*dll_rb_enc_find_index) (const char*);
|
||||
static rb_encoding* (*dll_rb_enc_find) (const char*);
|
||||
static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*);
|
||||
static VALUE (*dll_rb_sprintf) (const char*, ...);
|
||||
#endif
|
||||
|
||||
static HINSTANCE hinstRuby = 0; /* Instance of ruby.dll */
|
||||
|
||||
/*
|
||||
@@ -245,11 +301,23 @@ static struct
|
||||
{"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat},
|
||||
{"rb_str_new", (RUBY_PROC*)&dll_rb_str_new},
|
||||
{"rb_str_new2", (RUBY_PROC*)&dll_rb_str_new2},
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
{"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo},
|
||||
#else
|
||||
{"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo},
|
||||
#endif
|
||||
{"ruby_init", (RUBY_PROC*)&dll_ruby_init},
|
||||
{"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath},
|
||||
{"NtInitialize", (RUBY_PROC*)&dll_NtInitialize},
|
||||
#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
|
||||
{"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf},
|
||||
#endif
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
{"ruby_script", (RUBY_PROC*)&dll_ruby_script},
|
||||
{"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index},
|
||||
{"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find},
|
||||
{"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new},
|
||||
{"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf},
|
||||
#endif
|
||||
{"", NULL},
|
||||
};
|
||||
@@ -340,6 +408,58 @@ void ex_ruby(exarg_T *eap)
|
||||
vim_free(script);
|
||||
}
|
||||
|
||||
/*
|
||||
* In Ruby 1.9 or later, ruby String object has encoding.
|
||||
* conversion buffer string of vim to ruby String object using
|
||||
* VIM encoding option.
|
||||
*/
|
||||
static VALUE
|
||||
vim_str2rb_enc_str(const char *s)
|
||||
{
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
int isnum;
|
||||
long lval;
|
||||
char_u *sval;
|
||||
rb_encoding *enc;
|
||||
|
||||
isnum = get_option_value((char_u *)"enc", &lval, &sval, 0);
|
||||
if (isnum == 0)
|
||||
{
|
||||
enc = rb_enc_find((char *)sval);
|
||||
vim_free(sval);
|
||||
if (enc) {
|
||||
return rb_enc_str_new(s, strlen(s), enc);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return rb_str_new2(s);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
eval_enc_string_protect(const char *str, int *state)
|
||||
{
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
int isnum;
|
||||
long lval;
|
||||
char_u *sval;
|
||||
rb_encoding *enc;
|
||||
VALUE v;
|
||||
|
||||
isnum = get_option_value((char_u *)"enc", &lval, &sval, 0);
|
||||
if (isnum == 0)
|
||||
{
|
||||
enc = rb_enc_find((char *)sval);
|
||||
vim_free(sval);
|
||||
if (enc)
|
||||
{
|
||||
v = rb_sprintf("#-*- coding:%s -*-\n%s", rb_enc_name(enc), str);
|
||||
return rb_eval_string_protect(StringValuePtr(v), state);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return rb_eval_string_protect(str, state);
|
||||
}
|
||||
|
||||
void ex_rubydo(exarg_T *eap)
|
||||
{
|
||||
int state;
|
||||
@@ -352,9 +472,9 @@ void ex_rubydo(exarg_T *eap)
|
||||
for (i = eap->line1; i <= eap->line2; i++) {
|
||||
VALUE line, oldline;
|
||||
|
||||
line = oldline = rb_str_new2((char *)ml_get(i));
|
||||
line = oldline = vim_str2rb_enc_str((char *)ml_get(i));
|
||||
rb_lastline_set(line);
|
||||
rb_eval_string_protect((char *) eap->arg, &state);
|
||||
eval_enc_string_protect((char *) eap->arg, &state);
|
||||
if (state) {
|
||||
error_print(state);
|
||||
break;
|
||||
@@ -365,7 +485,7 @@ void ex_rubydo(exarg_T *eap)
|
||||
EMSG(_("E265: $_ must be an instance of String"));
|
||||
return;
|
||||
}
|
||||
ml_replace(i, (char_u *) STR2CSTR(line), 1);
|
||||
ml_replace(i, (char_u *) StringValuePtr(line), 1);
|
||||
changed();
|
||||
#ifdef SYNTAX_HL
|
||||
syn_changed(i); /* recompute syntax hl. for this line */
|
||||
@@ -413,10 +533,25 @@ static int ensure_ruby_initialized(void)
|
||||
#ifdef DYNAMIC_RUBY
|
||||
if (ruby_enabled(TRUE))
|
||||
{
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
/* suggested by Ariya Mizutani */
|
||||
int argc = 1;
|
||||
char *argv[] = {"gvim.exe"};
|
||||
NtInitialize(&argc, &argv);
|
||||
#endif
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
RUBY_INIT_STACK;
|
||||
#endif
|
||||
ruby_init();
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
ruby_script("vim-ruby");
|
||||
#endif
|
||||
ruby_init_loadpath();
|
||||
ruby_io_init();
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
rb_enc_find_index("encdb");
|
||||
#endif
|
||||
ruby_vim_init();
|
||||
ruby_initialized = 1;
|
||||
#ifdef DYNAMIC_RUBY
|
||||
@@ -434,7 +569,9 @@ static int ensure_ruby_initialized(void)
|
||||
static void error_print(int state)
|
||||
{
|
||||
#ifndef DYNAMIC_RUBY
|
||||
#if !(defined(RUBY_VERSION) && RUBY_VERSION >= 19)
|
||||
RUBYEXTERN VALUE ruby_errinfo;
|
||||
#endif
|
||||
#endif
|
||||
VALUE eclass;
|
||||
VALUE einfo;
|
||||
@@ -468,9 +605,14 @@ static void error_print(int state)
|
||||
break;
|
||||
case TAG_RAISE:
|
||||
case TAG_FATAL:
|
||||
#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
|
||||
eclass = CLASS_OF(rb_errinfo());
|
||||
einfo = rb_obj_as_string(rb_errinfo());
|
||||
#else
|
||||
eclass = CLASS_OF(ruby_errinfo);
|
||||
einfo = rb_obj_as_string(ruby_errinfo);
|
||||
if (eclass == rb_eRuntimeError && RSTRING(einfo)->len == 0) {
|
||||
#endif
|
||||
if (eclass == rb_eRuntimeError && RSTRING_LEN(einfo) == 0) {
|
||||
EMSG(_("E272: unhandled exception"));
|
||||
}
|
||||
else {
|
||||
@@ -479,7 +621,7 @@ static void error_print(int state)
|
||||
|
||||
epath = rb_class_path(eclass);
|
||||
vim_snprintf(buff, BUFSIZ, "%s: %s",
|
||||
RSTRING(epath)->ptr, RSTRING(einfo)->ptr);
|
||||
RSTRING_PTR(epath), RSTRING_PTR(einfo));
|
||||
p = strchr(buff, '\n');
|
||||
if (p) *p = '\0';
|
||||
EMSG(buff);
|
||||
@@ -497,8 +639,8 @@ static VALUE vim_message(VALUE self UNUSED, VALUE str)
|
||||
char *buff, *p;
|
||||
|
||||
str = rb_obj_as_string(str);
|
||||
buff = ALLOCA_N(char, RSTRING(str)->len);
|
||||
strcpy(buff, RSTRING(str)->ptr);
|
||||
buff = ALLOCA_N(char, RSTRING_LEN(str));
|
||||
strcpy(buff, RSTRING_PTR(str));
|
||||
p = strchr(buff, '\n');
|
||||
if (p) *p = '\0';
|
||||
MSG(buff);
|
||||
@@ -507,21 +649,21 @@ static VALUE vim_message(VALUE self UNUSED, VALUE str)
|
||||
|
||||
static VALUE vim_set_option(VALUE self UNUSED, VALUE str)
|
||||
{
|
||||
do_set((char_u *)STR2CSTR(str), 0);
|
||||
do_set((char_u *)StringValuePtr(str), 0);
|
||||
update_screen(NOT_VALID);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
static VALUE vim_command(VALUE self UNUSED, VALUE str)
|
||||
{
|
||||
do_cmdline_cmd((char_u *)STR2CSTR(str));
|
||||
do_cmdline_cmd((char_u *)StringValuePtr(str));
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
static VALUE vim_evaluate(VALUE self UNUSED, VALUE str)
|
||||
{
|
||||
#ifdef FEAT_EVAL
|
||||
char_u *value = eval_to_string((char_u *)STR2CSTR(str), NULL, TRUE);
|
||||
char_u *value = eval_to_string((char_u *)StringValuePtr(str), NULL, TRUE);
|
||||
|
||||
if (value != NULL)
|
||||
{
|
||||
@@ -626,9 +768,9 @@ static VALUE get_buffer_line(buf_T *buf, linenr_T n)
|
||||
if (n > 0 && n <= buf->b_ml.ml_line_count)
|
||||
{
|
||||
char *line = (char *)ml_get_buf(buf, n, FALSE);
|
||||
return line ? rb_str_new2(line) : Qnil;
|
||||
return line ? vim_str2rb_enc_str(line) : Qnil;
|
||||
}
|
||||
rb_raise(rb_eIndexError, "index %d out of buffer", n);
|
||||
rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
|
||||
#ifndef __GNUC__
|
||||
return Qnil; /* For stop warning */
|
||||
#endif
|
||||
@@ -645,7 +787,7 @@ static VALUE buffer_aref(VALUE self, VALUE num)
|
||||
|
||||
static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
|
||||
{
|
||||
char *line = STR2CSTR(str);
|
||||
char *line = StringValuePtr(str);
|
||||
aco_save_T aco;
|
||||
|
||||
if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL)
|
||||
@@ -669,7 +811,7 @@ static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
|
||||
}
|
||||
else
|
||||
{
|
||||
rb_raise(rb_eIndexError, "index %d out of buffer", n);
|
||||
rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
|
||||
#ifndef __GNUC__
|
||||
return Qnil; /* For stop warning */
|
||||
#endif
|
||||
@@ -715,7 +857,7 @@ static VALUE buffer_delete(VALUE self, VALUE num)
|
||||
}
|
||||
else
|
||||
{
|
||||
rb_raise(rb_eIndexError, "index %d out of buffer", n);
|
||||
rb_raise(rb_eIndexError, "line number %ld out of range", n);
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
@@ -723,11 +865,14 @@ static VALUE buffer_delete(VALUE self, VALUE num)
|
||||
static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
|
||||
{
|
||||
buf_T *buf = get_buf(self);
|
||||
char *line = STR2CSTR(str);
|
||||
char *line = StringValuePtr(str);
|
||||
long n = NUM2LONG(num);
|
||||
aco_save_T aco;
|
||||
|
||||
if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL)
|
||||
if (line != NULL) {
|
||||
rb_raise(rb_eIndexError, "NULL line");
|
||||
}
|
||||
else if (n >= 0 && n <= buf->b_ml.ml_line_count)
|
||||
{
|
||||
/* set curwin/curbuf for "buf" and save some things */
|
||||
aucmd_prepbuf(&aco, buf);
|
||||
@@ -749,7 +894,7 @@ static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
|
||||
update_curbuf(NOT_VALID);
|
||||
}
|
||||
else {
|
||||
rb_raise(rb_eIndexError, "index %d out of buffer", n);
|
||||
rb_raise(rb_eIndexError, "line number %ld out of range", n);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
@@ -890,10 +1035,10 @@ static VALUE window_set_cursor(VALUE self, VALUE pos)
|
||||
win_T *win = get_win(self);
|
||||
|
||||
Check_Type(pos, T_ARRAY);
|
||||
if (RARRAY(pos)->len != 2)
|
||||
if (RARRAY_LEN(pos) != 2)
|
||||
rb_raise(rb_eArgError, "array length must be 2");
|
||||
lnum = RARRAY(pos)->ptr[0];
|
||||
col = RARRAY(pos)->ptr[1];
|
||||
lnum = RARRAY_PTR(pos)[0];
|
||||
col = RARRAY_PTR(pos)[1];
|
||||
win->w_cursor.lnum = NUM2LONG(lnum);
|
||||
win->w_cursor.col = NUM2UINT(col);
|
||||
check_cursor(); /* put cursor on an existing line */
|
||||
@@ -910,7 +1055,7 @@ static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED)
|
||||
if (i > 0) rb_str_cat(str, ", ", 2);
|
||||
rb_str_concat(str, rb_inspect(argv[i]));
|
||||
}
|
||||
MSG(RSTRING(str)->ptr);
|
||||
MSG(RSTRING_PTR(str));
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
||||
58
src/mbyte.c
58
src/mbyte.c
@@ -1200,6 +1200,49 @@ intable(table, size, c)
|
||||
utf_char2cells(c)
|
||||
int c;
|
||||
{
|
||||
/* Sorted list of non-overlapping intervals of East Asian double width
|
||||
* characters, generated with ../runtime/tools/unicode.vim. */
|
||||
static struct interval doublewidth[] =
|
||||
{
|
||||
{0x1100, 0x115f},
|
||||
{0x11a3, 0x11a7},
|
||||
{0x11fa, 0x11ff},
|
||||
{0x2329, 0x232a},
|
||||
{0x2e80, 0x2e99},
|
||||
{0x2e9b, 0x2ef3},
|
||||
{0x2f00, 0x2fd5},
|
||||
{0x2ff0, 0x2ffb},
|
||||
{0x3000, 0x3029},
|
||||
{0x3030, 0x303e},
|
||||
{0x3041, 0x3096},
|
||||
{0x309b, 0x30ff},
|
||||
{0x3105, 0x312d},
|
||||
{0x3131, 0x318e},
|
||||
{0x3190, 0x31b7},
|
||||
{0x31c0, 0x31e3},
|
||||
{0x31f0, 0x321e},
|
||||
{0x3220, 0x3247},
|
||||
{0x3250, 0x32fe},
|
||||
{0x3300, 0x4dbf},
|
||||
{0x4e00, 0xa48c},
|
||||
{0xa490, 0xa4c6},
|
||||
{0xa960, 0xa97c},
|
||||
{0xac00, 0xd7a3},
|
||||
{0xd7b0, 0xd7c6},
|
||||
{0xd7cb, 0xd7fb},
|
||||
{0xf900, 0xfaff},
|
||||
{0xfe10, 0xfe19},
|
||||
{0xfe30, 0xfe52},
|
||||
{0xfe54, 0xfe66},
|
||||
{0xfe68, 0xfe6b},
|
||||
{0xff01, 0xff60},
|
||||
{0xffe0, 0xffe6},
|
||||
{0x1f200, 0x1f200},
|
||||
{0x1f210, 0x1f231},
|
||||
{0x1f240, 0x1f248},
|
||||
{0x20000, 0x2fffd},
|
||||
{0x30000, 0x3fffd}
|
||||
};
|
||||
/* Sorted list of non-overlapping intervals of East Asian Ambiguous
|
||||
* characters, generated with ../runtime/tools/unicode.vim. */
|
||||
static struct interval ambiguous[] =
|
||||
@@ -1403,20 +1446,7 @@ utf_char2cells(c)
|
||||
#else
|
||||
if (!utf_printable(c))
|
||||
return 6; /* unprintable, displays <xxxx> */
|
||||
if (c >= 0x1100
|
||||
&& (c <= 0x115f /* Hangul Jamo */
|
||||
|| c == 0x2329
|
||||
|| c == 0x232a
|
||||
|| (c >= 0x2e80 && c <= 0xa4cf
|
||||
&& c != 0x303f) /* CJK ... Yi */
|
||||
|| (c >= 0xac00 && c <= 0xd7a3) /* Hangul Syllables */
|
||||
|| (c >= 0xf900 && c <= 0xfaff) /* CJK Compatibility
|
||||
Ideographs */
|
||||
|| (c >= 0xfe30 && c <= 0xfe6f) /* CJK Compatibility Forms */
|
||||
|| (c >= 0xff00 && c <= 0xff60) /* Fullwidth Forms */
|
||||
|| (c >= 0xffe0 && c <= 0xffe6)
|
||||
|| (c >= 0x20000 && c <= 0x2fffd)
|
||||
|| (c >= 0x30000 && c <= 0x3fffd)))
|
||||
if (intable(doublewidth, sizeof(doublewidth), c))
|
||||
return 2;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -3087,12 +3087,19 @@ ml_flush_line(buf)
|
||||
int start;
|
||||
int count;
|
||||
int i;
|
||||
static int entered = FALSE;
|
||||
|
||||
if (buf->b_ml.ml_line_lnum == 0 || buf->b_ml.ml_mfp == NULL)
|
||||
return; /* nothing to do */
|
||||
|
||||
if (buf->b_ml.ml_flags & ML_LINE_DIRTY)
|
||||
{
|
||||
/* This code doesn't work recursively, but Netbeans may call back here
|
||||
* when obtaining the cursor position. */
|
||||
if (entered)
|
||||
return;
|
||||
entered = TRUE;
|
||||
|
||||
lnum = buf->b_ml.ml_line_lnum;
|
||||
new_line = buf->b_ml.ml_line_ptr;
|
||||
|
||||
@@ -3160,6 +3167,8 @@ ml_flush_line(buf)
|
||||
}
|
||||
}
|
||||
vim_free(new_line);
|
||||
|
||||
entered = FALSE;
|
||||
}
|
||||
|
||||
buf->b_ml.ml_line_lnum = 0;
|
||||
|
||||
32
src/move.c
32
src/move.c
@@ -889,6 +889,7 @@ validate_cursor_col()
|
||||
{
|
||||
colnr_T off;
|
||||
colnr_T col;
|
||||
int width;
|
||||
|
||||
validate_virtcol();
|
||||
if (!(curwin->w_valid & VALID_WCOL))
|
||||
@@ -896,15 +897,14 @@ validate_cursor_col()
|
||||
col = curwin->w_virtcol;
|
||||
off = curwin_col_off();
|
||||
col += off;
|
||||
width = W_WIDTH(curwin) - off + curwin_col_off2();
|
||||
|
||||
/* long line wrapping, adjust curwin->w_wrow */
|
||||
if (curwin->w_p_wrap
|
||||
&& col >= (colnr_T)W_WIDTH(curwin)
|
||||
&& W_WIDTH(curwin) - off + curwin_col_off2() > 0)
|
||||
{
|
||||
col -= W_WIDTH(curwin);
|
||||
col = col % (W_WIDTH(curwin) - off + curwin_col_off2());
|
||||
}
|
||||
&& width > 0)
|
||||
/* use same formula as what is used in curs_columns() */
|
||||
col -= ((col - W_WIDTH(curwin)) / width + 1) * width;
|
||||
if (col > (int)curwin->w_leftcol)
|
||||
col -= curwin->w_leftcol;
|
||||
else
|
||||
@@ -1041,6 +1041,7 @@ curs_columns(scroll)
|
||||
/* long line wrapping, adjust curwin->w_wrow */
|
||||
if (curwin->w_wcol >= W_WIDTH(curwin))
|
||||
{
|
||||
/* this same formula is used in validate_cursor_col() */
|
||||
n = (curwin->w_wcol - W_WIDTH(curwin)) / width + 1;
|
||||
curwin->w_wcol -= n * width;
|
||||
curwin->w_wrow += n;
|
||||
@@ -1609,7 +1610,7 @@ scrollup_clamp()
|
||||
* Add one line above "lp->lnum". This can be a filler line, a closed fold or
|
||||
* a (wrapped) text line. Uses and sets "lp->fill".
|
||||
* Returns the height of the added line in "lp->height".
|
||||
* Lines above the first one are incredibly high.
|
||||
* Lines above the first one are incredibly high: MAXCOL.
|
||||
*/
|
||||
static void
|
||||
topline_back(lp)
|
||||
@@ -1941,7 +1942,7 @@ scroll_cursor_bot(min_scroll, set_topbot)
|
||||
{
|
||||
loff.lnum = curwin->w_topline;
|
||||
topline_back(&loff);
|
||||
if (used + loff.height > curwin->w_height)
|
||||
if (loff.height == MAXCOL || used + loff.height > curwin->w_height)
|
||||
break;
|
||||
used += loff.height;
|
||||
#ifdef FEAT_DIFF
|
||||
@@ -2020,7 +2021,10 @@ scroll_cursor_bot(min_scroll, set_topbot)
|
||||
|
||||
/* Add one line above */
|
||||
topline_back(&loff);
|
||||
used += loff.height;
|
||||
if (loff.height == MAXCOL)
|
||||
used = MAXCOL;
|
||||
else
|
||||
used += loff.height;
|
||||
if (used > curwin->w_height)
|
||||
break;
|
||||
if (loff.lnum >= curwin->w_botline
|
||||
@@ -2174,7 +2178,10 @@ scroll_cursor_halfway(atend)
|
||||
if (below > above) /* add a line above the cursor */
|
||||
{
|
||||
topline_back(&loff);
|
||||
used += loff.height;
|
||||
if (loff.height == MAXCOL)
|
||||
used = MAXCOL;
|
||||
else
|
||||
used += loff.height;
|
||||
if (used > curwin->w_height)
|
||||
break;
|
||||
above += loff.height;
|
||||
@@ -2471,9 +2478,12 @@ onepage(dir, count)
|
||||
while (n <= curwin->w_height && loff.lnum >= 1)
|
||||
{
|
||||
topline_back(&loff);
|
||||
n += loff.height;
|
||||
if (loff.height == MAXCOL)
|
||||
n = MAXCOL;
|
||||
else
|
||||
n += loff.height;
|
||||
}
|
||||
if (n <= curwin->w_height) /* at begin of file */
|
||||
if (loff.lnum < 1) /* at begin of file */
|
||||
{
|
||||
curwin->w_topline = 1;
|
||||
#ifdef FEAT_DIFF
|
||||
|
||||
15
src/ops.c
15
src/ops.c
@@ -1301,10 +1301,16 @@ put_reedit_in_typebuf(silent)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Insert register contents "s" into the typeahead buffer, so that it will be
|
||||
* executed again.
|
||||
* When "esc" is TRUE it is to be taken literally: Escape CSI characters and
|
||||
* no remapping.
|
||||
*/
|
||||
static int
|
||||
put_in_typebuf(s, esc, colon, silent)
|
||||
char_u *s;
|
||||
int esc; /* Escape CSI characters */
|
||||
int esc;
|
||||
int colon; /* add ':' before the line */
|
||||
int silent;
|
||||
{
|
||||
@@ -1312,7 +1318,7 @@ put_in_typebuf(s, esc, colon, silent)
|
||||
|
||||
put_reedit_in_typebuf(silent);
|
||||
if (colon)
|
||||
retval = ins_typebuf((char_u *)"\n", REMAP_YES, 0, TRUE, silent);
|
||||
retval = ins_typebuf((char_u *)"\n", REMAP_NONE, 0, TRUE, silent);
|
||||
if (retval == OK)
|
||||
{
|
||||
char_u *p;
|
||||
@@ -1324,12 +1330,13 @@ put_in_typebuf(s, esc, colon, silent)
|
||||
if (p == NULL)
|
||||
retval = FAIL;
|
||||
else
|
||||
retval = ins_typebuf(p, REMAP_YES, 0, TRUE, silent);
|
||||
retval = ins_typebuf(p, esc ? REMAP_NONE : REMAP_YES,
|
||||
0, TRUE, silent);
|
||||
if (esc)
|
||||
vim_free(p);
|
||||
}
|
||||
if (colon && retval == OK)
|
||||
retval = ins_typebuf((char_u *)":", REMAP_YES, 0, TRUE, silent);
|
||||
retval = ins_typebuf((char_u *)":", REMAP_NONE, 0, TRUE, silent);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
@@ -5867,6 +5867,10 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
|
||||
#endif
|
||||
/* update flag in swap file */
|
||||
ml_setflags(curbuf);
|
||||
/* Redraw needed when switching to/from "mac": a CR in the text
|
||||
* will be displayed differently. */
|
||||
if (get_fileformat(curbuf) == EOL_MAC || *oldval == 'm')
|
||||
redraw_curbuf_later(NOT_VALID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6410,6 +6414,9 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
|
||||
}
|
||||
# endif
|
||||
curbuf->b_help = (curbuf->b_p_bt[0] == 'h');
|
||||
# ifdef FEAT_TITLE
|
||||
redraw_titles();
|
||||
# endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1471,6 +1471,9 @@ x_IOerror_check(dpy)
|
||||
{
|
||||
/* This function should not return, it causes exit(). Longjump instead. */
|
||||
LONGJMP(lc_jump_env, 1);
|
||||
# ifdef VMS
|
||||
return 0; /* avoid the compiler complains about missing return value */
|
||||
# endif
|
||||
}
|
||||
# endif
|
||||
|
||||
@@ -1490,6 +1493,9 @@ x_IOerror_handler(dpy)
|
||||
|
||||
/* This function should not return, it causes exit(). Longjump instead. */
|
||||
LONGJMP(x_jump_env, 1);
|
||||
# ifdef VMS
|
||||
return 0; /* avoid the compiler complains about missing return value */
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -24,6 +24,8 @@ void profile_sub_wait __ARGS((proftime_T *tm, proftime_T *tma));
|
||||
int profile_equal __ARGS((proftime_T *tm1, proftime_T *tm2));
|
||||
int profile_cmp __ARGS((proftime_T *tm1, proftime_T *tm2));
|
||||
void ex_profile __ARGS((exarg_T *eap));
|
||||
char_u *get_profile_name __ARGS((expand_T *xp, int idx));
|
||||
void set_context_in_profile_cmd __ARGS((expand_T *xp, char_u *arg));
|
||||
void profile_dump __ARGS((void));
|
||||
void script_prof_save __ARGS((proftime_T *tm));
|
||||
void script_prof_restore __ARGS((proftime_T *tm));
|
||||
|
||||
17
src/screen.c
17
src/screen.c
@@ -2335,13 +2335,12 @@ fold_line(wp, fold_count, foldinfo, lnum, row)
|
||||
if (cells > 1)
|
||||
ScreenLines[idx + 1] = 0;
|
||||
}
|
||||
else if (cells > 1) /* double-byte character */
|
||||
{
|
||||
if (enc_dbcs == DBCS_JPNU && *p == 0x8e)
|
||||
ScreenLines2[idx] = p[1];
|
||||
else
|
||||
ScreenLines[idx + 1] = p[1];
|
||||
}
|
||||
else if (enc_dbcs == DBCS_JPNU && *p == 0x8e)
|
||||
/* double-byte single width character */
|
||||
ScreenLines2[idx] = p[1];
|
||||
else if (cells > 1)
|
||||
/* double-width character */
|
||||
ScreenLines[idx + 1] = p[1];
|
||||
col += cells;
|
||||
idx += cells;
|
||||
p += c_len;
|
||||
@@ -4631,7 +4630,11 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
||||
ScreenLines[off] = c;
|
||||
#ifdef FEAT_MBYTE
|
||||
if (enc_dbcs == DBCS_JPNU)
|
||||
{
|
||||
if ((mb_c & 0xff00) == 0x8e00)
|
||||
ScreenLines[off] = 0x8e;
|
||||
ScreenLines2[off] = mb_c & 0xff;
|
||||
}
|
||||
else if (enc_utf8)
|
||||
{
|
||||
if (mb_utf8)
|
||||
|
||||
@@ -681,6 +681,56 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
367,
|
||||
/**/
|
||||
366,
|
||||
/**/
|
||||
365,
|
||||
/**/
|
||||
364,
|
||||
/**/
|
||||
363,
|
||||
/**/
|
||||
362,
|
||||
/**/
|
||||
361,
|
||||
/**/
|
||||
360,
|
||||
/**/
|
||||
359,
|
||||
/**/
|
||||
358,
|
||||
/**/
|
||||
357,
|
||||
/**/
|
||||
356,
|
||||
/**/
|
||||
355,
|
||||
/**/
|
||||
354,
|
||||
/**/
|
||||
353,
|
||||
/**/
|
||||
352,
|
||||
/**/
|
||||
351,
|
||||
/**/
|
||||
350,
|
||||
/**/
|
||||
349,
|
||||
/**/
|
||||
348,
|
||||
/**/
|
||||
347,
|
||||
/**/
|
||||
346,
|
||||
/**/
|
||||
345,
|
||||
/**/
|
||||
344,
|
||||
/**/
|
||||
343,
|
||||
/**/
|
||||
342,
|
||||
/**/
|
||||
|
||||
@@ -718,6 +718,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
|
||||
#define EXPAND_SHELLCMD 32
|
||||
#define EXPAND_CSCOPE 33
|
||||
#define EXPAND_SIGN 34
|
||||
#define EXPAND_PROFILE 35
|
||||
|
||||
/* Values for exmode_active (0 is no exmode) */
|
||||
#define EXMODE_NORMAL 1
|
||||
|
||||
@@ -626,7 +626,7 @@ wingotofile:
|
||||
#ifdef FEAT_SEARCHPATH
|
||||
case 'f': /* CTRL-W gf: "gf" in a new tab page */
|
||||
case 'F': /* CTRL-W gF: "gF" in a new tab page */
|
||||
cmdmod.tab = TRUE;
|
||||
cmdmod.tab = tabpage_index(curtab) + 1;
|
||||
nchar = xchar;
|
||||
goto wingotofile;
|
||||
#endif
|
||||
|
||||
@@ -231,7 +231,7 @@ char *pname;
|
||||
fprintf(stderr, " or\n %s -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]\n", pname);
|
||||
fprintf(stderr, "Options:\n");
|
||||
fprintf(stderr, " -a toggle autoskip: A single '*' replaces nul-lines. Default off.\n");
|
||||
fprintf(stderr, " -b binary digit dump (incompatible with -p,-i,-r). Default hex.\n");
|
||||
fprintf(stderr, " -b binary digit dump (incompatible with -ps,-i,-r). Default hex.\n");
|
||||
fprintf(stderr, " -c cols format <cols> octets per line. Default 16 (-i: 12, -ps: 30).\n");
|
||||
fprintf(stderr, " -E show characters in EBCDIC. Default ASCII.\n");
|
||||
fprintf(stderr, " -g number of octets per group in normal output. Default 2.\n");
|
||||
@@ -276,11 +276,11 @@ long base_off;
|
||||
if (c == '\r') /* Doze style input file? */
|
||||
continue;
|
||||
|
||||
#if 0 /* this doesn't work when there is normal text after the hex codes in
|
||||
the last line that looks like hex */
|
||||
if (c == ' ' || c == '\n' || c == '\t') /* allow multiple spaces */
|
||||
/* Allow multiple spaces. This doesn't work when there is normal text
|
||||
* after the hex codes in the last line that looks like hex, thus only
|
||||
* use it for PostScript format. */
|
||||
if (hextype == HEX_POSTSCRIPT && (c == ' ' || c == '\n' || c == '\t'))
|
||||
continue;
|
||||
#endif
|
||||
|
||||
n3 = n2;
|
||||
n2 = n1;
|
||||
|
||||
Reference in New Issue
Block a user