1
0
forked from aniani/vim

updated for version 7.0d01

This commit is contained in:
Bram Moolenaar
2006-04-11 21:38:50 +00:00
parent 779b74b2a2
commit 4c3f536f47
42 changed files with 2215 additions and 283 deletions

View File

@@ -2,7 +2,7 @@
# Makefile for Vim on OpenVMS
#
# Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com>
# Last change: 2006 Mar 31
# Last change: 2006 Apr 11
#
# This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
# with MMS and MMK
@@ -44,6 +44,7 @@ MODEL = BIG
# GUI or terminal mode executable.
# Comment out if you want just the character terminal mode only.
# GUI with Motif
GUI = YES
# GUI with GTK
@@ -136,12 +137,24 @@ VIMRUN = ""
CONFIG_H = os_vms_conf.h
# GTK or XPM but not both
.IFDEF GTK
.IFDEF GUI
.IFDEF XPM
.ELSE
GUI = YES
.ENDIF
.IFDEF XPM
XPM = ""
.ENDIF
.ENDIF
.IFDEF XPM
.IFDEF GUI
.ELSE
GUI = YES
.ENDIF
.IFDEF GTK
GTK = ""
.ENDIF
.ENDIF

View File

@@ -207,6 +207,14 @@ searchpath_save(char *name)
}
#ifdef WIN3264
#ifndef CSIDL_COMMON_PROGRAMS
# define CSIDL_COMMON_PROGRAMS 0x0017
#endif
#ifndef CSIDL_COMMON_DESKTOPDIRECTORY
# define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019
#endif
/*
* Get the path to a requested Windows shell folder.
*
@@ -234,22 +242,14 @@ get_shell_folder_path(
if (strcmp(shell_folder_name, "desktop") == 0)
{
pcsidl = &desktop_csidl;
#ifdef CSIDL_COMMON_DESKTOPDIRECTORY
csidl = CSIDL_COMMON_DESKTOPDIRECTORY;
alt_csidl = CSIDL_DESKTOP;
#else
csidl = CSIDL_DESKTOP;
#endif
}
else if (strncmp(shell_folder_name, "Programs", 8) == 0)
{
pcsidl = &programs_csidl;
#ifdef CSIDL_COMMON_PROGRAMS
csidl = CSIDL_COMMON_PROGRAMS;
alt_csidl = CSIDL_PROGRAMS;
#else
csidl = CSIDL_PROGRAMS;
#endif
}
else
{

View File

@@ -2969,6 +2969,9 @@ ins_compl_bs()
ins_compl_set_original_text(compl_leader);
else
{
#ifdef FEAT_SPELL
spell_bad_len = 0; /* need to redetect bad word */
#endif
/* Matches were cleared, need to search for them now. */
if (ins_complete(Ctrl_N) == FAIL)
compl_cont_status = 0;

View File

@@ -16208,7 +16208,7 @@ var2fpos(varp, lnum, fnum)
return NULL;
len = (long)STRLEN(ml_get(pos.lnum));
/* Accept a position up to the NUL after the line. */
if (pos.col <= 0 || (int)pos.col > len + 1)
if (pos.col == 0 || (int)pos.col > len + 1)
return NULL; /* invalid column number */
--pos.col;

View File

@@ -261,18 +261,23 @@ linelen(has_tab)
return len;
}
/* Buffer for one line used during sorting. It's allocated to contain the
* longest line being sorted. */
static char_u *sortbuf;
/* Buffer for two lines used during sorting. They are allocated to
* contain the longest line being sorted. */
static char_u *sortbuf1;
static char_u *sortbuf2;
static int sort_ic; /* ignore case */
static int sort_nr; /* sort on number */
static int sort_rx; /* sort on regex instead of skipping it */
static int sort_abort; /* flag to indicate if sorting has been interrupted */
/* Struct to store info to be sorted. */
typedef struct
{
linenr_T lnum; /* line number */
long col_nr; /* column number or number */
long start_col_nr; /* starting column number or number */
long end_col_nr; /* ending column number */
} sorti_T;
static int
@@ -291,18 +296,35 @@ sort_compare(s1, s2)
{
sorti_T l1 = *(sorti_T *)s1;
sorti_T l2 = *(sorti_T *)s2;
char_u *s;
int result = 0;
/* When sorting numbers "col_nr" is the number, not the column number. */
/* If the user interrupts, there's no way to stop qsort() immediately, but
* if we return 0 every time, qsort will assume it's done sorting and exit */
if (sort_abort)
return 0;
fast_breakcheck();
if (got_int)
sort_abort = TRUE;
/* When sorting numbers "start_col_nr" is the number, not the column number. */
if (sort_nr)
return l1.col_nr - l2.col_nr;
result = l1.start_col_nr - l2.start_col_nr;
else
{
/* We need to copy one line into "sortbuf1", because there is no guarantee
* that the first pointer becomes invalid when obtaining the second one. */
STRNCPY(sortbuf1, ml_get(l1.lnum) + l1.start_col_nr, l1.end_col_nr - l1.start_col_nr + 1);
sortbuf1[l1.end_col_nr - l1.start_col_nr] = 0;
STRNCPY(sortbuf2, ml_get(l2.lnum) + l2.start_col_nr, l2.end_col_nr - l2.start_col_nr + 1);
sortbuf2[l2.end_col_nr - l2.start_col_nr] = 0;
/* We need to copy one line into "sortbuf", because there is no guarantee
* that the first pointer becomes invalid when obtaining the second one. */
STRCPY(sortbuf, ml_get(l1.lnum) + l1.col_nr);
s = ml_get(l2.lnum) + l2.col_nr;
return sort_ic ? STRICMP(sortbuf, s) : STRCMP(sortbuf, s);
result = sort_ic ? STRICMP(sortbuf1, sortbuf2) : STRCMP(sortbuf1, sortbuf2);
}
/* If the two lines have the same value, preserve the original line order */
if (result == 0)
return (int) (l1.lnum - l2.lnum);
else
return result;
}
/*
@@ -321,21 +343,25 @@ ex_sort(eap)
size_t i;
char_u *p;
char_u *s;
char_u *s2;
char_u c; /* temporary character storage */
int unique = FALSE;
long deleted;
colnr_T col;
colnr_T start_col;
colnr_T end_col;
int sort_oct; /* sort on octal number */
int sort_hex; /* sort on hex number */
if (u_save((linenr_T)(eap->line1 - 1), (linenr_T)(eap->line2 + 1)) == FAIL)
return;
sortbuf = NULL;
sortbuf1 = NULL;
sortbuf2 = NULL;
regmatch.regprog = NULL;
nrs = (sorti_T *)lalloc((long_u)(count * sizeof(sorti_T)), TRUE);
if (nrs == NULL)
goto theend;
goto sortend;
sort_ic = sort_nr = sort_oct = sort_hex = 0;
sort_abort = sort_ic = sort_rx = sort_nr = sort_oct = sort_hex = 0;
for (p = eap->arg; *p != NUL; ++p)
{
@@ -343,6 +369,8 @@ ex_sort(eap)
;
else if (*p == 'i')
sort_ic = TRUE;
else if (*p == 'r')
sort_rx = TRUE;
else if (*p == 'n')
sort_nr = 2;
else if (*p == 'o')
@@ -364,19 +392,19 @@ ex_sort(eap)
if (*s != *p)
{
EMSG(_(e_invalpat));
goto theend;
goto sortend;
}
*s = NUL;
regmatch.regprog = vim_regcomp(p + 1, RE_MAGIC);
if (regmatch.regprog == NULL)
goto theend;
goto sortend;
p = s; /* continue after the regexp */
regmatch.rm_ic = p_ic;
}
else
{
EMSG2(_(e_invarg2), p);
goto theend;
goto sortend;
}
}
@@ -384,7 +412,7 @@ ex_sort(eap)
if (sort_nr + sort_oct + sort_hex > 2)
{
EMSG(_(e_invarg));
goto theend;
goto sortend;
}
/* From here on "sort_nr" is used as a flag for any number sorting. */
@@ -393,9 +421,9 @@ ex_sort(eap)
/*
* Make an array with all line numbers. This avoids having to copy all
* the lines into allocated memory.
* When sorting on strings "col_nr" is de offset in the line, for numbers
* sorting it's the number to sort on. This means the pattern matching
* and number conversion only has to be done once per line.
* When sorting on strings "start_col_nr" is the offset in the line, for
* numbers sorting it's the number to sort on. This means the pattern
* matching and number conversion only has to be done once per line.
* Also get the longest line length for allocating "sortbuf".
*/
for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
@@ -405,57 +433,83 @@ ex_sort(eap)
if (maxlen < len)
maxlen = len;
start_col = 0;
end_col = len;
if (regmatch.regprog != NULL && vim_regexec(&regmatch, s, 0))
col = regmatch.endp[0] - s;
{
if (sort_rx)
{
start_col = regmatch.startp[0] - s;
end_col = regmatch.endp[0] - s;
}
else
start_col = regmatch.endp[0] - s;
}
else
col = 0;
if (regmatch.regprog != NULL)
end_col = 0;
if (sort_nr)
{
/* Make sure vim_str2nr doesn't read any digits past the end
* of the match, by temporarily terminating the string there */
s2 = s + end_col;
c = *s2;
(*s2) = 0;
/* Sorting on number: Store the number itself. */
if (sort_hex)
s = skiptohex(s + col);
s = skiptohex(s + start_col);
else
s = skiptodigit(s + col);
s = skiptodigit(s + start_col);
vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
&nrs[lnum - eap->line1].col_nr, NULL);
&nrs[lnum - eap->line1].start_col_nr, NULL);
(*s2) = c;
}
else
{
/* Store the column to sort at. */
nrs[lnum - eap->line1].col_nr = col;
nrs[lnum - eap->line1].start_col_nr = start_col;
nrs[lnum - eap->line1].end_col_nr = end_col;
}
nrs[lnum - eap->line1].lnum = lnum;
if (regmatch.regprog != NULL)
fast_breakcheck();
if (got_int)
goto theend;
goto sortend;
}
/* Allocate a buffer that can hold the longest line. */
sortbuf = alloc((unsigned)maxlen + 1);
if (sortbuf == NULL)
goto theend;
sortbuf1 = alloc((unsigned)maxlen + 1);
if (sortbuf1 == NULL)
goto sortend;
sortbuf2 = alloc((unsigned)maxlen + 1);
if (sortbuf2 == NULL)
goto sortend;
/* Sort the array of line numbers. Note: can't be interrupted! */
qsort((void *)nrs, count, sizeof(sorti_T), sort_compare);
if (sort_abort)
goto sortend;
/* Insert the lines in the sorted order below the last one. */
lnum = eap->line2;
for (i = 0; i < count; ++i)
{
s = ml_get(nrs[eap->forceit ? count - i - 1 : i].lnum);
if (!unique || i == 0
|| (sort_ic ? STRICMP(s, sortbuf) : STRCMP(s, sortbuf)) != 0)
|| (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0)
{
if (ml_append(lnum++, s, (colnr_T)0, FALSE) == FAIL)
break;
if (unique)
STRCPY(sortbuf, s);
STRCPY(sortbuf1, s);
}
fast_breakcheck();
if (got_int)
goto theend;
goto sortend;
}
/* delete the original lines if appending worked */
@@ -476,9 +530,10 @@ ex_sort(eap)
curwin->w_cursor.lnum = eap->line1;
beginline(BL_WHITE | BL_FIX);
theend:
sortend:
vim_free(nrs);
vim_free(sortbuf);
vim_free(sortbuf1);
vim_free(sortbuf2);
vim_free(regmatch.regprog);
if (got_int)
EMSG(_(e_interr));

View File

@@ -10252,7 +10252,7 @@ vimrc_found(fname, envname)
char_u *envname;
{
int opt_idx;
int dofree;
int dofree = FALSE;
char_u *p;
if (!option_was_set((char_u *)"cp"))

Binary file not shown.

View File

@@ -231,7 +231,15 @@ redraw_win_later(wp, type)
redraw_later_clear()
{
redraw_all_later(CLEAR);
screen_attr = HL_BOLD | HL_UNDERLINE;
#ifdef FEAT_GUI
if (gui.in_use)
/* Use a code that will reset gui.highlight_mask in
* gui_stop_highlight(). */
screen_attr = HL_ALL + 1;
else
#endif
/* Use attributes that is very unlikely to appear in text. */
screen_attr = HL_BOLD | HL_UNDERLINE | HL_INVERSE;
}
/*

View File

@@ -3,50 +3,494 @@ Tests for :sort command. vim: set ft=vim :
STARTTEST
:so small.vim
:"
:/^t1:/+1,/^t2/-1sort
:/^t2:/+1,/^t3/-1sort u
:/^t3:/+1,/^t4/-1sort u /[^:]*:/
:/^t4:/+1,/^t5/-1sort n
:/^t5:/+1,/^t6/-1sort n -[^:]*:-
:/^t6:/+1,/^t7/-1sort o
:/^t7:/+1,/^t8/-1sort x ,.*/,
:/^t8:/+1,/^t9/-1sort n o
:/^t1:/,$wq! test.out
:/^t01:/+1,/^t02/-1sort
:/^t02:/+1,/^t03/-1sort n
:/^t03:/+1,/^t04/-1sort x
:/^t04:/+1,/^t05/-1sort u
:/^t05:/+1,/^t06/-1sort!
:/^t06:/+1,/^t07/-1sort! n
:/^t07:/+1,/^t08/-1sort! u
:/^t08:/+1,/^t09/-1sort o
:/^t09:/+1,/^t10/-1sort! x
:/^t10:/+1,/^t11/-1sort/./
:/^t11:/+1,/^t12/-1sort/../
:/^t12:/+1,/^t13/-1sort/../u
:/^t13:/+1,/^t14/-1sort/./n
:/^t14:/+1,/^t15/-1sort/./r
:/^t15:/+1,/^t16/-1sort/../r
:/^t16:/+1,/^t17/-1sort/./rn
:/^t17:/+1,/^t18/-1sort/\d/
:/^t18:/+1,/^t19/-1sort/\d/r
:/^t19:/+1,/^t20/-1sort/\d/n
:/^t20:/+1,/^t21/-1sort/\d/rn
:/^t21:/+1,/^t22/-1sort/\d\d/
:/^t22:/+1,/^t23/-1sort/\d\d/n
:/^t23:/+1,/^t24/-1sort/\d\d/x
:/^t24:/+1,/^t25/-1sort/\d\d/r
:/^t25:/+1,/^t26/-1sort/\d\d/rn
:/^t26:/+1,/^t27/-1sort/\d\d/rx
:/^t27:/+1,/^t28/-1sort no
:/^t01:/,$wq! test.out
ENDTEST
t1: alphabetical
two test
One test
one test
Two test
t2: alpha, unique
One test
one test
Two test
one test
Two test
t3: alpha, unique, skip pattern
one: xay
two: aaa
another: tuvy
t4: number
asdf 83 asd
one 333
xce 9
t5: number and skip
asdf 3 a: sd 11
one 33:4 99
:9
t6: octal
2389
111
asdf 0014
t7: hex and skip
sf/0x1d3
0x44/1a1
asd/ad 1413
t8: wrong arguments
ccc
bbb
aaa
t8:
t01: alphebetical
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t02: numeric
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t03: hexadecimal
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t04: alpha, unique
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t05: alpha, reverse
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t06: numeric, reverse
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t07: unique, reverse
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t08: octal
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t09: reverse, hexadecimal
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t10: alpha, skip first character
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t11: alpha, skip first 2 characters
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t12: alpha, unique, skip first 2 characters
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t13: numeric, skip first character
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t14: alpha, sort on first character
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t15: alpha, sort on first 2 characters
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t16: numeric, sort on first character
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t17: alpha, skip past first digit
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t18: alpha, sort on first digit
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t19: numeric, skip past first digit
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t20: numeric, sort on first digit
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t21: alpha, skip past first 2 digits
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t22: numeric, skip past first 2 digits
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t23: hexadecimal, skip past first 2 digits
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t24: alpha, sort on first 2 digits
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t25: numeric, sort on first 2 digits
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t26: hexadecimal, sort on first 2 digits
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t27: wrong arguments
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t28: done

View File

@@ -1,35 +1,455 @@
t1: alphabetical
One test
Two test
one test
two test
t2: alpha, unique
One test
Two test
Two test
one test
t3: alpha, unique, skip pattern
two: aaa
another: tuvy
one: xay
t4: number
xce 9
asdf 83 asd
one 333
t5: number and skip
one 33:4 99
:9
asdf 3 a: sd 11
t6: octal
asdf 0014
2389
111
t7: hex and skip
asd/ad 1413
0x44/1a1
sf/0x1d3
t8: wrong arguments
ccc
bbb
aaa
t8:
t01: alphebetical
123b
a
a122
a123
a321
ab
abc
b123
b321
b321
b321b
b322b
c123d
c321d
t02: numeric
abc
ab
a
a122
a123
b123
c123d
123b
a321
b321
c321d
b321
b321b
b322b
t03: hexadecimal
a
ab
abc
123b
a122
a123
a321
b123
b321
b321
b321b
b322b
c123d
c321d
t04: alpha, unique
123b
a
a122
a123
a321
ab
abc
b123
b321
b321b
b322b
c123d
c321d
t05: alpha, reverse
c321d
c123d
b322b
b321b
b321
b321
b123
abc
ab
a321
a123
a122
a
123b
t06: numeric, reverse
b322b
b321b
b321
c321d
b321
a321
123b
c123d
b123
a123
a122
a
ab
abc
t07: unique, reverse
c321d
c123d
b322b
b321b
b321
b123
abc
ab
a321
a123
a122
a
123b
t08: octal
abc
ab
a
a122
a123
b123
c123d
123b
a321
b321
c321d
b321
b321b
b322b
t09: reverse, hexadecimal
c321d
c123d
b322b
b321b
b321
b321
b123
a321
a123
a122
123b
abc
ab
a
t10: alpha, skip first character
a
a122
a123
b123
123b
c123d
a321
b321
b321
b321b
c321d
b322b
ab
abc
t11: alpha, skip first 2 characters
ab
a
a321
b321
b321
b321b
c321d
a122
b322b
a123
b123
123b
c123d
abc
t12: alpha, unique, skip first 2 characters
ab
a
a321
b321
b321b
c321d
a122
b322b
a123
b123
123b
c123d
abc
t13: numeric, skip first character
abc
ab
a
a122
a123
b123
c123d
123b
a321
b321
c321d
b321
b321b
b322b
t14: alpha, sort on first character
123b
abc
ab
a
a321
a123
a122
b321
b123
b322b
b321
b321b
c123d
c321d
t15: alpha, sort on first 2 characters
a
123b
a123
a122
a321
abc
ab
b123
b321
b322b
b321
b321b
c123d
c321d
t16: numeric, sort on first character
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t17: alpha, skip past first digit
abc
ab
a
a321
b321
b321
b321b
c321d
a122
b322b
a123
b123
123b
c123d
t18: alpha, sort on first digit
abc
ab
a
a123
a122
b123
c123d
123b
a321
b321
c321d
b322b
b321
b321b
t19: numeric, skip past first digit
abc
ab
a
a321
b321
c321d
b321
b321b
a122
b322b
a123
b123
c123d
123b
t20: numeric, sort on first digit
abc
ab
a
a123
a122
b123
c123d
123b
a321
b321
c321d
b322b
b321
b321b
t21: alpha, skip past first 2 digits
abc
ab
a
a321
b321
b321
b321b
c321d
a122
b322b
a123
b123
123b
c123d
t22: numeric, skip past first 2 digits
abc
ab
a
a321
b321
c321d
b321
b321b
a122
b322b
a123
b123
c123d
123b
t23: hexadecimal, skip past first 2 digits
abc
ab
a
a321
b321
b321
a122
a123
b123
b321b
c321d
b322b
123b
c123d
t24: alpha, sort on first 2 digits
abc
ab
a
a123
a122
b123
c123d
123b
a321
b321
c321d
b322b
b321
b321b
t25: numeric, sort on first 2 digits
abc
ab
a
a123
a122
b123
c123d
123b
a321
b321
c321d
b322b
b321
b321b
t26: hexadecimal, sort on first 2 digits
abc
ab
a
a123
a122
b123
c123d
123b
a321
b321
c321d
b322b
b321
b321b
t27: wrong arguments
abc
ab
a
a321
a123
a122
b321
b123
c123d
123b
c321d
b322b
b321
b321b
t28: done

View File

@@ -35,6 +35,6 @@
*/
#define VIM_VERSION_NODOT "vim70d"
#define VIM_VERSION_SHORT "7.0d"
#define VIM_VERSION_MEDIUM "7.0d BETA"
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0d BETA (2006 Apr 10)"
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0d BETA (2006 Apr 10, compiled "
#define VIM_VERSION_MEDIUM "7.0d01 BETA"
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0d01 BETA (2006 Apr 11)"
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0d01 BETA (2006 Apr 11, compiled "

View File

@@ -91,6 +91,9 @@ static void win_new_height __ARGS((win_T *, int));
#endif
#if defined(FEAT_WINDOWS) || defined(PROTO)
static char *m_onlyone = N_("Already only one window");
/*
* all CTRL-W window commands are handled here, called from normal_cmd().
*/
@@ -330,6 +333,31 @@ newwindow:
break;
#endif
/* move window to new tab page */
case 'T':
if (firstwin == lastwin)
MSG(_(m_onlyone));
else
{
tabpage_T *oldtab = curtab;
tabpage_T *newtab;
win_T *wp = curwin;
/* First create a new tab with the window, then go back to
* the old tab and close the window there. */
if (win_new_tabpage((int)Prenum) == OK
&& valid_tabpage(oldtab))
{
newtab = curtab;
goto_tabpage_tp(oldtab);
if (curwin == wp)
win_close(curwin, FALSE);
if (valid_tabpage(newtab))
goto_tabpage_tp(newtab);
}
}
break;
/* cursor to top-left window */
case 't':
case Ctrl_T:
@@ -1102,6 +1130,7 @@ win_init(newp, oldp)
newp->w_pcmark = oldp->w_pcmark;
newp->w_prev_pcmark = oldp->w_prev_pcmark;
newp->w_alt_fnum = oldp->w_alt_fnum;
newp->w_wrow = oldp->w_wrow;
newp->w_fraction = oldp->w_fraction;
newp->w_prev_fraction_row = oldp->w_prev_fraction_row;
#ifdef FEAT_JUMPLIST
@@ -2938,7 +2967,7 @@ close_others(message, forceit)
&& !autocmd_busy
#endif
)
MSG(_("Already only one window"));
MSG(_(m_onlyone));
return;
}
@@ -5153,6 +5182,8 @@ win_new_height(wp, height)
* Will equalize heights soon to fix it. */
if (height < 0)
height = 0;
if (wp->w_height == height)
return; /* nothing to do */
if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT