0
0
mirror of https://github.com/vim/vim.git synced 2025-08-28 20:23:48 -04:00

updated for version 7.0028

This commit is contained in:
Bram Moolenaar 2005-01-02 11:43:19 +00:00
parent ec2dad6329
commit 1c2fda2097
6 changed files with 57 additions and 268 deletions

View File

@ -1,4 +1,4 @@
*todo.txt* For Vim version 7.0aa. Last change: 2004 Dec 31 *todo.txt* For Vim version 7.0aa. Last change: 2005 Jan 01
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -30,12 +30,15 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
*known-bugs* *known-bugs*
-------------------- Known bugs and current work ----------------------- -------------------- Known bugs and current work -----------------------
When using ":new" relative cursor position causes first line to disappear. patch for QuickFixCmdPre and QuickFixCmdPost autocommands. (Ciaran McCreesh,
(Jens Paulus, Opening a new window) 2005 Jan 1)
New toolbar button from Martin Dalecki:
- add remark in version7.txt
- check if it works for pixmap loaded from a file.
Awaiting response: Awaiting response:
- Patch for mch_FullName() also in Vim 6.3? os_mswin.c - Patch for mch_FullName() also in Vim 6.3? os_mswin.c
- patch for MakePre and MakePost autocommands. (Ciaran McCreesh)
- Win32: "gvim -V100" should use dialog with scrollbar. Using - Win32: "gvim -V100" should use dialog with scrollbar. Using
gui_mch_dialog() would be good, but need to move display_errors() to after gui_mch_dialog() would be good, but need to move display_errors() to after
creating the window, so that s_hwnd is valid. creating the window, so that s_hwnd is valid.
@ -64,7 +67,6 @@ PLANNED FOR VERSION 7.0:
- function reference - function reference
Check old patch from Robert Webb for array support. Check old patch from Robert Webb for array support.
Add type checking? See ~/vim/ideas.txt. Add type checking? See ~/vim/ideas.txt.
- Add "{range}execute": execute lines from a buffer.
- Add SPELLCHECKER, with easy to add support for many languages. - Add SPELLCHECKER, with easy to add support for many languages.
8 Add spell checking. Use "ispell -a" somehow. 8 Add spell checking. Use "ispell -a" somehow.
~/vim/patches/wm_vim-5_4d.zip can be used as an example (includes ~/vim/patches/wm_vim-5_4d.zip can be used as an example (includes
@ -82,6 +84,7 @@ PLANNED FOR VERSION 7.0:
- Patch from Martin Dalecki. (2004 Dec) Uses ispell - Patch from Martin Dalecki. (2004 Dec) Uses ispell
implements "undercurl" attribute. But how to set its color? implements "undercurl" attribute. But how to set its color?
Perhaps use "guicurl=Red" instead? Perhaps use "guicurl=Red" instead?
If underline and undercurl are both there use undercurl only.
- REFACTORING: The main() function is very long. Move parts to separate - REFACTORING: The main() function is very long. Move parts to separate
functions, especially loops. Ideas from Walter Briscoe (2003 Apr 3, 2004 functions, especially loops. Ideas from Walter Briscoe (2003 Apr 3, 2004
Feb 9). Feb 9).
@ -1514,9 +1517,12 @@ Syntax highlighting:
Built-in script language: Built-in script language:
8 Add referring to key options with "&t_xx". Both for "echo &t_xx" and 8 Add referring to key options with "&t_xx". Both for "echo &t_xx" and
":let &t_xx =". Useful for making portable mappings. ":let &t_xx =". Useful for making portable mappings.
8 Allow range for ":exec". Pass it on to the executed command. (Webb)
8 exists("&&option") tests if 'option' is actually implemented. Useful for 8 exists("&&option") tests if 'option' is actually implemented. Useful for
'shellslash', for example. 'shellslash', for example.
- Add "{range}source": execute lines from a buffer.
Alternative: Allow range for ":exec", pass it on to the executed command.
(Webb)
You can already yank lines and use :@" to execute them.
8 Have a look at VSEL. Would it be useful to include? (Bigham) 8 Have a look at VSEL. Would it be useful to include? (Bigham)
8 Add ":fungroup" command, to group function definitions together. When 8 Add ":fungroup" command, to group function definitions together. When
encountered, all functions in the group are removed. Suggest using an encountered, all functions in the group are removed. Suggest using an

View File

@ -1,4 +1,4 @@
*version7.txt* For Vim version 7.0aa. Last change: 2004 Dec 31 *version7.txt* For Vim version 7.0aa. Last change: 2005 Jan 01
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -627,4 +627,13 @@ break, resulting in "selected 202 of 201 bytes".
Motif: fonts were not used for dialog components. (Martin Dalecki) Motif: fonts were not used for dialog components. (Martin Dalecki)
When using "y<C-V>`x" where mark x is in the first column, the last line was
not included.
Not all test scripts work properly on MS-Windows when checked out from CVS.
Use a Vim command to fix all fileformats to dos before executing the tests.
When using ":new" and the file fits in the window, lines could still be above
the window. Now remove empty lines instead of keeping the relative position.
vim:tw=78:ts=8:ft=help:norl: vim:tw=78:ts=8:ft=help:norl:

View File

@ -418,7 +418,7 @@ static void var_free_one __ARGS((VAR v));
static void list_one_var __ARGS((VAR v, char_u *prefix)); static void list_one_var __ARGS((VAR v, char_u *prefix));
static void list_vim_var __ARGS((int i)); static void list_vim_var __ARGS((int i));
static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string)); static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string));
static void set_var __ARGS((char_u *name, VAR varp)); static void set_var __ARGS((char_u *name, VAR varp, int copy));
static void copy_var __ARGS((VAR from, VAR to)); static void copy_var __ARGS((VAR from, VAR to));
static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags)); static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags));
static char_u *trans_function_name __ARGS((char_u **pp, int skip, int internal)); static char_u *trans_function_name __ARGS((char_u **pp, int skip, int internal));
@ -455,7 +455,7 @@ set_internal_string_var(name, value)
varp = alloc_string_var(val); varp = alloc_string_var(val);
if (varp != NULL) if (varp != NULL)
{ {
set_var(name, varp); set_var(name, varp, FALSE);
free_var(varp); free_var(varp);
} }
} }
@ -1214,7 +1214,7 @@ ex_let(eap)
} }
else else
{ {
set_var(temp_string, &retvar); set_var(temp_string, &retvar, TRUE);
vim_free(temp_string); vim_free(temp_string);
} }
} }
@ -1223,7 +1223,7 @@ ex_let(eap)
{ {
c1 = *p; c1 = *p;
*p = NUL; *p = NUL;
set_var(arg, &retvar); set_var(arg, &retvar, TRUE);
*p = c1; /* put char back for error messages */ *p = c1; /* put char back for error messages */
} }
} }
@ -6879,7 +6879,7 @@ f_setbufvar(argvars, retvar)
{ {
STRCPY(bufvarname, "b:"); STRCPY(bufvarname, "b:");
STRCPY(bufvarname + 2, varname); STRCPY(bufvarname + 2, varname);
set_var(bufvarname, varp); set_var(bufvarname, varp, TRUE);
vim_free(bufvarname); vim_free(bufvarname);
} }
} }
@ -7040,7 +7040,7 @@ f_setwinvar(argvars, retvar)
{ {
STRCPY(winvarname, "w:"); STRCPY(winvarname, "w:");
STRCPY(winvarname + 2, varname); STRCPY(winvarname + 2, varname);
set_var(winvarname, varp); set_var(winvarname, varp, TRUE);
vim_free(winvarname); vim_free(winvarname);
} }
} }
@ -7193,7 +7193,8 @@ f_remote_peek(argvars, retvar)
{ {
v.var_type = VAR_STRING; v.var_type = VAR_STRING;
v.var_val.var_string = vim_strsave(s); v.var_val.var_string = vim_strsave(s);
set_var(get_var_string(&argvars[1]), &v); set_var(get_var_string(&argvars[1]), &v, FALSE);
vim_free(v.var_val.var_string);
} }
#else #else
retvar->var_val.var_number = -1; retvar->var_val.var_number = -1;
@ -7313,7 +7314,8 @@ remote_common(argvars, retvar, expr)
sprintf((char *)str, "0x%x", (unsigned int)w); sprintf((char *)str, "0x%x", (unsigned int)w);
v.var_type = VAR_STRING; v.var_type = VAR_STRING;
v.var_val.var_string = vim_strsave(str); v.var_val.var_string = vim_strsave(str);
set_var(get_var_string(&argvars[2]), &v); set_var(get_var_string(&argvars[2]), &v, FALSE);
vim_free(v.var_val.var_string);
} }
} }
#endif #endif
@ -9191,9 +9193,10 @@ list_one_var_a(prefix, name, type, string)
* Otherwise the variable is created. * Otherwise the variable is created.
*/ */
static void static void
set_var(name, varp) set_var(name, varp, copy)
char_u *name; char_u *name;
VAR varp; VAR varp;
int copy; /* make copy of value in "varp" */
{ {
int i; int i;
VAR v; VAR v;
@ -9215,10 +9218,17 @@ set_var(name, varp)
if (vimvars[i].type == VAR_STRING) if (vimvars[i].type == VAR_STRING)
{ {
vim_free(vimvars[i].val); vim_free(vimvars[i].val);
if (copy || varp->var_type != VAR_STRING)
vimvars[i].val = vim_strsave(get_var_string(varp)); vimvars[i].val = vim_strsave(get_var_string(varp));
else
{
/* Take over the string to avoid an extra alloc/free. */
vimvars[i].val = varp->var_val.var_string;
varp->var_val.var_string = NULL;
}
} }
else else
vimvars[i].val = (char_u *)(long)varp->var_val.var_number; vimvars[i].val = (char_u *)get_var_number(varp);
} }
return; return;
} }
@ -9254,7 +9264,13 @@ set_var(name, varp)
if (i == gap->ga_len) if (i == gap->ga_len)
++gap->ga_len; ++gap->ga_len;
} }
if (copy || varp->var_type != VAR_STRING)
copy_var(varp, v); copy_var(varp, v);
else
{
v->var_type = varp->var_type;
v->var_val.var_string = varp->var_val.var_string;
}
} }
static void static void
@ -10663,7 +10679,7 @@ read_viminfo_varlist(virp, writing)
/* assign the value to the variable */ /* assign the value to the variable */
if (varp != NULL) if (varp != NULL)
{ {
set_var(virp->vir_line + 1, varp); set_var(virp->vir_line + 1, varp, FALSE);
free_var(varp); free_var(varp);
} }
} }

View File

@ -1565,9 +1565,7 @@ gui_mch_init()
gui_mch_uninit() gui_mch_uninit()
{ {
gui_x11_destroy_widgets(); gui_x11_destroy_widgets();
#ifndef LESSTIF_VERSION
XtCloseDisplay(gui.dpy); XtCloseDisplay(gui.dpy);
#endif
gui.dpy = NULL; gui.dpy = NULL;
vimShell = (Widget)0; vimShell = (Widget)0;
} }
@ -1787,6 +1785,9 @@ gui_mch_set_shellsize(width, height, min_width, min_height,
int base_width; int base_width;
int base_height; int base_height;
{ {
#ifdef FEAT_XIM
height += xim_get_status_area_height(),
#endif
XtVaSetValues(vimShell, XtVaSetValues(vimShell,
XtNwidthInc, gui.char_width, XtNwidthInc, gui.char_width,
XtNheightInc, gui.char_height, XtNheightInc, gui.char_height,
@ -1797,11 +1798,7 @@ gui_mch_set_shellsize(width, height, min_width, min_height,
XtNminWidth, min_width, XtNminWidth, min_width,
XtNminHeight, min_height, XtNminHeight, min_height,
XtNwidth, width, XtNwidth, width,
#ifdef FEAT_XIM
XtNheight, height + xim_get_status_area_height(),
#else
XtNheight, height, XtNheight, height,
#endif
NULL); NULL);
} }
@ -3505,244 +3502,6 @@ mch_set_mouse_shape(shape)
} }
#endif #endif
#if defined(FEAT_TOOLBAR) || defined(PROTO)
/*
* Icons used by the toolbar code.
*/
#include "../pixmaps/tb_new.xpm"
#include "../pixmaps/tb_open.xpm"
#include "../pixmaps/tb_close.xpm"
#include "../pixmaps/tb_save.xpm"
#include "../pixmaps/tb_print.xpm"
#include "../pixmaps/tb_cut.xpm"
#include "../pixmaps/tb_copy.xpm"
#include "../pixmaps/tb_paste.xpm"
#include "../pixmaps/tb_find.xpm"
#include "../pixmaps/tb_find_next.xpm"
#include "../pixmaps/tb_find_prev.xpm"
#include "../pixmaps/tb_find_help.xpm"
#include "../pixmaps/tb_exit.xpm"
#include "../pixmaps/tb_undo.xpm"
#include "../pixmaps/tb_redo.xpm"
#include "../pixmaps/tb_help.xpm"
#include "../pixmaps/tb_macro.xpm"
#include "../pixmaps/tb_make.xpm"
#include "../pixmaps/tb_save_all.xpm"
#include "../pixmaps/tb_jump.xpm"
#include "../pixmaps/tb_ctags.xpm"
#include "../pixmaps/tb_load_session.xpm"
#include "../pixmaps/tb_save_session.xpm"
#include "../pixmaps/tb_new_session.xpm"
#include "../pixmaps/tb_blank.xpm"
#include "../pixmaps/tb_maximize.xpm"
#include "../pixmaps/tb_split.xpm"
#include "../pixmaps/tb_minimize.xpm"
#include "../pixmaps/tb_shell.xpm"
#include "../pixmaps/tb_replace.xpm"
#include "../pixmaps/tb_vsplit.xpm"
#include "../pixmaps/tb_maxwidth.xpm"
#include "../pixmaps/tb_minwidth.xpm"
/*
* Those are the pixmaps used for the default buttons.
*/
static char **(built_in_pixmaps[]) =
{
tb_new_xpm,
tb_open_xpm,
tb_save_xpm,
tb_undo_xpm,
tb_redo_xpm,
tb_cut_xpm,
tb_copy_xpm,
tb_paste_xpm,
tb_print_xpm,
tb_help_xpm,
tb_find_xpm,
tb_save_all_xpm,
tb_save_session_xpm,
tb_new_session_xpm,
tb_load_session_xpm,
tb_macro_xpm,
tb_replace_xpm,
tb_close_xpm,
tb_maximize_xpm,
tb_minimize_xpm,
tb_split_xpm,
tb_shell_xpm,
tb_find_prev_xpm,
tb_find_next_xpm,
tb_find_help_xpm,
tb_make_xpm,
tb_jump_xpm,
tb_ctags_xpm,
tb_vsplit_xpm,
tb_maxwidth_xpm,
tb_minwidth_xpm,
tb_exit_xpm
};
static void createXpmImages __ARGS((char_u *path, char **xpm, Pixmap *sen, Pixmap *insen));
/*
* Allocated a pixmap for toolbar menu "menu".
* Return in "sen" and "insen". "insen" can be NULL.
*/
void
get_toolbar_pixmap(menu, sen, insen)
vimmenu_T *menu;
Pixmap *sen;
Pixmap *insen;
{
char_u buf[MAXPATHL]; /* buffer storing expanded pathname */
char **xpm = NULL; /* xpm array */
buf[0] = NUL; /* start with NULL path */
if (menu->iconfile != NULL)
{
/* Use the "icon=" argument. */
gui_find_iconfile(menu->iconfile, buf, "xpm");
createXpmImages(buf, NULL, sen, insen);
/* If it failed, try using the menu name. */
if (*sen == (Pixmap)0 && gui_find_bitmap(menu->name, buf, "xpm") == OK)
createXpmImages(buf, NULL, sen, insen);
if (*sen != (Pixmap)0)
return;
}
if (menu->icon_builtin || gui_find_bitmap(menu->name, buf, "xpm") == FAIL)
{
if (menu->iconidx >= 0 && menu->iconidx
< (sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0])))
xpm = built_in_pixmaps[menu->iconidx];
else
xpm = tb_blank_xpm;
}
if (xpm != NULL || buf[0] != NUL)
createXpmImages(buf, xpm, sen, insen);
}
/* Indices for named colors */
#define BACKGROUND 0
#define FOREGROUND 1
#define BOTTOM_SHADOW 2
#define TOP_SHADOW 3
#define HIGHLIGHT 4
/*
* Read an Xpm file, doing color substitutions for the foreground and
* background colors. If there is an error reading a color xpm file,
* drop back and read the monochrome file. If successful, create the
* insensitive Pixmap too.
*/
static void
createXpmImages(path, xpm, sen, insen)
char_u *path;
char **xpm;
Pixmap *sen;
Pixmap *insen; /* can be NULL */
{
Window rootWindow;
XpmAttributes attrs;
XpmColorSymbol color[5] =
{
{"none", "none", 0},
{"iconColor1", NULL, 0},
{"bottomShadowColor", NULL, 0},
{"topShadowColor", NULL, 0},
{"selectColor", NULL, 0}
};
int screenNum;
int status;
Pixmap mask;
Pixmap map;
gui_mch_get_toolbar_colors(
&color[BACKGROUND].pixel,
&color[FOREGROUND].pixel,
&color[BOTTOM_SHADOW].pixel,
&color[TOP_SHADOW].pixel,
&color[HIGHLIGHT].pixel);
/* Setup the color subsititution table */
attrs.valuemask = XpmColorSymbols;
attrs.colorsymbols = color;
attrs.numsymbols = 5;
screenNum = DefaultScreen(gui.dpy);
rootWindow = RootWindow(gui.dpy, screenNum);
/* Create the "sensitive" pixmap */
if (xpm != NULL)
status = XpmCreatePixmapFromData(gui.dpy, rootWindow, xpm,
&map, &mask, &attrs);
else
status = XpmReadFileToPixmap(gui.dpy, rootWindow, (char *)path,
&map, &mask, &attrs);
if (status == XpmSuccess && map != 0)
{
XGCValues gcvalues;
GC back_gc;
GC mask_gc;
/* Need to create new Pixmaps with the mask applied. */
gcvalues.foreground = color[BACKGROUND].pixel;
back_gc = XCreateGC(gui.dpy, map, GCForeground, &gcvalues);
mask_gc = XCreateGC(gui.dpy, map, GCForeground, &gcvalues);
XSetClipMask(gui.dpy, mask_gc, mask);
/* Create the "sensitive" pixmap. */
*sen = XCreatePixmap(gui.dpy, rootWindow,
attrs.width, attrs.height,
DefaultDepth(gui.dpy, screenNum));
XFillRectangle(gui.dpy, *sen, back_gc, 0, 0,
attrs.width, attrs.height);
XCopyArea(gui.dpy, map, *sen, mask_gc, 0, 0,
attrs.width, attrs.height, 0, 0);
#ifdef FEAT_GUI_MOTIF /* not used for Athena */
if (insen != NULL)
{
int x, y;
int startX;
/* Create the "insensitive" pixmap. It's a copy of the "sensitive"
* pixmap with half the pixels set to the background color. */
*insen = XCreatePixmap(gui.dpy, rootWindow,
attrs.width, attrs.height,
DefaultDepth(gui.dpy, screenNum));
XCopyArea(gui.dpy, *sen, *insen, back_gc, 0, 0,
attrs.width, attrs.height, 0, 0);
for (y = 0; y < attrs.height; y++)
{
if (y % 2 == 0)
startX = 0;
else
startX = 1;
for (x = startX; x < attrs.width; x += 2)
XDrawPoint(gui.dpy, *insen, back_gc, x, y);
}
}
#endif
XFreeGC(gui.dpy, back_gc);
XFreeGC(gui.dpy, mask_gc);
XFreePixmap(gui.dpy, map);
}
else
{
*sen = 0;
if (insen != NULL)
*insen = 0;
}
XpmFreeAttributes(&attrs);
}
#endif
#if (defined(FEAT_TOOLBAR) && defined(FEAT_BEVAL)) || defined(PROTO) #if (defined(FEAT_TOOLBAR) && defined(FEAT_BEVAL)) || defined(PROTO)
/* /*
* Set the balloon-eval used for the tooltip of a toolbar menu item. * Set the balloon-eval used for the tooltip of a toolbar menu item.

View File

@ -66,6 +66,5 @@ void *gui_mch_register_sign __ARGS((char_u *signfile));
void gui_mch_destroy_sign __ARGS((void *sign)); void gui_mch_destroy_sign __ARGS((void *sign));
void gui_mch_mousehide __ARGS((int hide)); void gui_mch_mousehide __ARGS((int hide));
void mch_set_mouse_shape __ARGS((int shape)); void mch_set_mouse_shape __ARGS((int shape));
void get_toolbar_pixmap __ARGS((vimmenu_T *menu, Pixmap *sen, Pixmap *insen));
void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu)); void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
/* vim: set ft=c : */ /* vim: set ft=c : */

View File

@ -4,7 +4,7 @@ STARTTEST
:so small.vim :so small.vim
:e xx :e xx
:!rm -f test.out :!rm -f test.out
:au BufLeave <buffer> :!echo "buffer-local autommand in %" >> test.out :au BufLeave <buffer> :!echo buffer-local autommand in %>> test.out
:e somefile " here, autocommand for xx shall write test.out :e somefile " here, autocommand for xx shall write test.out
: " but autocommand shall not apply to buffer named <buffer> : " but autocommand shall not apply to buffer named <buffer>
:bwipe xx " here, autocommand shall be auto-deleted :bwipe xx " here, autocommand shall be auto-deleted