# HG changeset patch # User Bram Moolenaar # Date 1295291291 -3600 # Node ID 951641b8784de5175cadf9fdbc361db2b6b45060 # Parent 0c7d6d01e0582b54f34ab66852116d559c39550c updated for version 7.3.102 Problem: When using ":make", typing the next command and then getting the "reload" prompt the next command is (partly) eaten by the reload prompt. Solution: Accept ':' as a special character at the reload prompt to accept the default choice and execute the command. diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -9323,7 +9323,7 @@ f_confirm(argvars, rettv) if (!error) rettv->vval.v_number = do_dialog(type, NULL, message, buttons, - def, NULL); + def, NULL, FALSE); #endif } @@ -12744,7 +12744,7 @@ f_inputdialog(argvars, rettv) IObuff[0] = NUL; if (message != NULL && defstr != NULL && do_dialog(VIM_QUESTION, NULL, message, - (char_u *)_("&OK\n&Cancel"), 1, IObuff) == 1) + (char_u *)_("&OK\n&Cancel"), 1, IObuff, FALSE) == 1) rettv->vval.v_string = vim_strsave(IObuff); else { diff --git a/src/fileio.c b/src/fileio.c --- a/src/fileio.c +++ b/src/fileio.c @@ -7008,7 +7008,7 @@ buf_check_timestamp(buf, focus) STRCAT(tbuf, mesg2); } if (do_dialog(VIM_WARNING, (char_u *)_("Warning"), tbuf, - (char_u *)_("&OK\n&Load File"), 1, NULL) == 2) + (char_u *)_("&OK\n&Load File"), 1, NULL, TRUE) == 2) reload = TRUE; } else diff --git a/src/gui.c b/src/gui.c --- a/src/gui.c +++ b/src/gui.c @@ -4903,7 +4903,7 @@ display_errors() if (STRLEN(p) > 2000) STRCPY(p + 2000 - 14, "...(truncated)"); (void)do_dialog(VIM_ERROR, (char_u *)_("Error"), - p, (char_u *)_("&Ok"), 1, NULL); + p, (char_u *)_("&Ok"), 1, NULL, FALSE); break; } ga_clear(&error_ga); diff --git a/src/gui_athena.c b/src/gui_athena.c --- a/src/gui_athena.c +++ b/src/gui_athena.c @@ -2117,13 +2117,14 @@ dialog_wm_handler(w, client_data, event, } int -gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield) +gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd) int type UNUSED; char_u *title; char_u *message; char_u *buttons; int dfltbutton UNUSED; char_u *textfield; + int ex_cmd UNUSED; { char_u *buts; char_u *p, *next; diff --git a/src/gui_gtk.c b/src/gui_gtk.c --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -1268,7 +1268,8 @@ gui_mch_dialog(int type, /* type of char_u *message, /* message text */ char_u *buttons, /* names of buttons */ int def_but, /* default button */ - char_u *textfield) /* text for textfield or NULL */ + char_u *textfield, /* text for textfield or NULL */ + int ex_cmd UNUSED) { GtkWidget *dialog; GtkWidget *entry = NULL; diff --git a/src/gui_mac.c b/src/gui_mac.c --- a/src/gui_mac.c +++ b/src/gui_mac.c @@ -5583,7 +5583,8 @@ gui_mch_dialog( char_u *message, char_u *buttons, int dfltbutton, - char_u *textfield) + char_u *textfield, + int ex_cmd) { Handle buttonDITL; Handle iconDITL; diff --git a/src/gui_motif.c b/src/gui_motif.c --- a/src/gui_motif.c +++ b/src/gui_motif.c @@ -2549,13 +2549,14 @@ create_pixmap_label(parent, name, data, #endif int -gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield) +gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield, ex_cmd) int type UNUSED; char_u *title; char_u *message; char_u *button_names; int dfltbutton; char_u *textfield; /* buffer of size IOSIZE */ + int ex_cmd UNUSED; { char_u *buts; char_u *p, *next; diff --git a/src/gui_photon.c b/src/gui_photon.c --- a/src/gui_photon.c +++ b/src/gui_photon.c @@ -1502,7 +1502,8 @@ gui_mch_dialog( char_u *message, char_u *buttons, int default_button, - char_u *textfield) + char_u *textfield, + int ex_cmd) { char_u *str; char_u **button_array; diff --git a/src/gui_w16.c b/src/gui_w16.c --- a/src/gui_w16.c +++ b/src/gui_w16.c @@ -1098,7 +1098,8 @@ gui_mch_dialog( char_u *message, char_u *buttons, int dfltbutton, - char_u *textfield) + char_u *textfield, + int ex_cmd) { FARPROC dp; LPWORD p, pnumitems; diff --git a/src/gui_w32.c b/src/gui_w32.c --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -3005,7 +3005,8 @@ gui_mch_dialog( char_u *message, char_u *buttons, int dfltbutton, - char_u *textfield) + char_u *textfield, + int ex_cmd) { WORD *p, *pdlgtemplate, *pnumitems; DWORD *dwp; diff --git a/src/gui_xmdlg.c b/src/gui_xmdlg.c --- a/src/gui_xmdlg.c +++ b/src/gui_xmdlg.c @@ -688,7 +688,7 @@ do_choice(Widget w, do_dialog(VIM_ERROR, (char_u *)_("Error"), (char_u *)_("Invalid font specification"), - (char_u *)_("&Dismiss"), 1, NULL); + (char_u *)_("&Dismiss"), 1, NULL, FALSE); return True; } @@ -807,7 +807,7 @@ ok_callback(Widget w UNUSED, do_dialog(VIM_ERROR, (char_u *)_("Error"), (char_u *)_("Invalid font specification"), - (char_u *)_("&Dismiss"), 1, NULL); + (char_u *)_("&Dismiss"), 1, NULL, FALSE); XFreeFontNames(name); } else diff --git a/src/memline.c b/src/memline.c --- a/src/memline.c +++ b/src/memline.c @@ -4516,7 +4516,7 @@ findswapname(buf, dirp, old_fname) process_still_running ? (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Quit\n&Abort") : # endif - (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL); + (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL, FALSE); # if defined(UNIX) || defined(__EMX__) || defined(VMS) if (process_still_running && choice >= 4) diff --git a/src/message.c b/src/message.c --- a/src/message.c +++ b/src/message.c @@ -3315,7 +3315,7 @@ msg_advance(col) * different letter. */ int -do_dialog(type, title, message, buttons, dfltbutton, textfield) +do_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd) int type UNUSED; char_u *title UNUSED; char_u *message; @@ -3323,6 +3323,8 @@ do_dialog(type, title, message, buttons, int dfltbutton; char_u *textfield UNUSED; /* IObuff for inputdialog(), NULL otherwise */ + int ex_cmd; /* when TRUE pressing : accepts default and starts + Ex command */ { int oldState; int retval = 0; @@ -3341,7 +3343,7 @@ do_dialog(type, title, message, buttons, if (gui.in_use && vim_strchr(p_go, GO_CONDIALOG) == NULL) { c = gui_mch_dialog(type, title, message, buttons, dfltbutton, - textfield); + textfield, ex_cmd); /* avoid a hit-enter prompt without clearing the cmdline */ need_wait_return = FALSE; emsg_on_display = FALSE; @@ -3388,6 +3390,13 @@ do_dialog(type, title, message, buttons, default: /* Could be a hotkey? */ if (c < 0) /* special keys are ignored here */ continue; + if (c == ':' && ex_cmd) + { + retval = dfltbutton; + ins_char_typebuf(':'); + break; + } + /* Make the character lowercase, as chars in "hotkeys" are. */ c = MB_TOLOWER(c); retval = 1; @@ -3661,7 +3670,7 @@ vim_dialog_yesno(type, title, message, d if (do_dialog(type, title == NULL ? (char_u *)_("Question") : title, message, - (char_u *)_("&Yes\n&No"), dflt, NULL) == 1) + (char_u *)_("&Yes\n&No"), dflt, NULL, FALSE) == 1) return VIM_YES; return VIM_NO; } @@ -3676,7 +3685,7 @@ vim_dialog_yesnocancel(type, title, mess switch (do_dialog(type, title == NULL ? (char_u *)_("Question") : title, message, - (char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL)) + (char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL, FALSE)) { case 1: return VIM_YES; case 2: return VIM_NO; @@ -3695,7 +3704,7 @@ vim_dialog_yesnoallcancel(type, title, m title == NULL ? (char_u *)"Question" : title, message, (char_u *)_("&Yes\n&No\nSave &All\n&Discard All\n&Cancel"), - dflt, NULL)) + dflt, NULL, FALSE)) { case 1: return VIM_YES; case 2: return VIM_NO; diff --git a/src/os_mswin.c b/src/os_mswin.c --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -593,7 +593,7 @@ display_errors() gui.starting ? (char_u *)_("Message") : #endif (char_u *)_("Error"), - p, (char_u *)_("&Ok"), 1, NULL); + p, (char_u *)_("&Ok"), 1, NULL, FALSE); break; } ga_clear(&error_ga); diff --git a/src/proto/gui_athena.pro b/src/proto/gui_athena.pro --- a/src/proto/gui_athena.pro +++ b/src/proto/gui_athena.pro @@ -27,5 +27,5 @@ void gui_mch_destroy_scrollbar __ARGS((s void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb)); Window gui_x11_get_wid __ARGS((void)); char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter)); -int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield)); +int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd)); /* vim: set ft=c : */ diff --git a/src/proto/gui_gtk.pro b/src/proto/gui_gtk.pro --- a/src/proto/gui_gtk.pro +++ b/src/proto/gui_gtk.pro @@ -13,7 +13,7 @@ void gui_mch_create_scrollbar __ARGS((sc void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb)); char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter)); char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir)); -int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield)); +int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield, int ex_cmd)); void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu)); void gui_make_popup __ARGS((char_u *path_name, int mouse_pos)); void gui_mch_find_dialog __ARGS((exarg_T *eap)); diff --git a/src/proto/gui_mac.pro b/src/proto/gui_mac.pro --- a/src/proto/gui_mac.pro +++ b/src/proto/gui_mac.pro @@ -81,7 +81,7 @@ int gui_mch_get_mouse_x __ARGS((void)); int gui_mch_get_mouse_y __ARGS((void)); void gui_mch_setmouse __ARGS((int x, int y)); void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu)); -int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield)); +int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd)); char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter)); void gui_mch_set_foreground __ARGS((void)); void gui_mch_show_tabline __ARGS((int showit)); diff --git a/src/proto/gui_motif.pro b/src/proto/gui_motif.pro --- a/src/proto/gui_motif.pro +++ b/src/proto/gui_motif.pro @@ -29,7 +29,7 @@ void gui_mch_destroy_scrollbar __ARGS((s void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb)); Window gui_x11_get_wid __ARGS((void)); char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter)); -int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield)); +int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield, int ex_cmd)); void gui_mch_enable_footer __ARGS((int showit)); void gui_mch_set_footer __ARGS((char_u *s)); void gui_mch_show_toolbar __ARGS((int showit)); diff --git a/src/proto/gui_photon.pro b/src/proto/gui_photon.pro --- a/src/proto/gui_photon.pro +++ b/src/proto/gui_photon.pro @@ -8,7 +8,7 @@ void gui_mch_exit __ARGS((int rc)); void gui_mch_update __ARGS((void)); int gui_mch_wait_for_chars __ARGS((int wtime)); char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *default_name, char_u *ext, char_u *initdir, char_u *filter)); -int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield)); +int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield, int ex_cmd)); int gui_mch_get_winpos __ARGS((int *x, int *y)); void gui_mch_set_winpos __ARGS((int x, int y)); void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction)); diff --git a/src/proto/gui_w16.pro b/src/proto/gui_w16.pro --- a/src/proto/gui_w16.pro +++ b/src/proto/gui_w16.pro @@ -74,6 +74,6 @@ void gui_make_popup __ARGS((char_u *path void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx)); void gui_mch_destroy_menu __ARGS((vimmenu_T *menu)); void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey)); -int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield)); +int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd)); void gui_mch_set_foreground __ARGS((void)); /* vim: set ft=c : */ diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro --- a/src/proto/gui_w32.pro +++ b/src/proto/gui_w32.pro @@ -81,7 +81,7 @@ void gui_make_tearoff __ARGS((char_u *pa void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx)); void gui_mch_destroy_menu __ARGS((vimmenu_T *menu)); void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey)); -int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield)); +int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd)); void gui_mch_set_foreground __ARGS((void)); void gui_mch_drawsign __ARGS((int row, int col, int typenr)); void *gui_mch_register_sign __ARGS((char_u *signfile)); diff --git a/src/proto/message.pro b/src/proto/message.pro --- a/src/proto/message.pro +++ b/src/proto/message.pro @@ -64,7 +64,7 @@ void verbose_stop __ARGS((void)); int verbose_open __ARGS((void)); void give_warning __ARGS((char_u *message, int hl)); void msg_advance __ARGS((int col)); -int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield)); +int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd)); void display_confirm_msg __ARGS((void)); int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt)); int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt)); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 102, +/**/ 101, /**/ 100,