404 lines
12 KiB
Plaintext
404 lines
12 KiB
Plaintext
To: vim_dev@googlegroups.com
|
|
Subject: Patch 7.3.198
|
|
Fcc: outbox
|
|
From: Bram Moolenaar <Bram@moolenaar.net>
|
|
Mime-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
------------
|
|
|
|
Patch 7.3.198
|
|
Problem: No completion for ":lang".
|
|
Solution: Get locales to complete from. (Dominique Pelle)
|
|
Files: src/eval.c, src/ex_cmds2.c, src/ex_getln.c,
|
|
src/proto/ex_cmds2.pro, src/proto/ex_getln.pro, src/vim.h
|
|
|
|
|
|
*** ../mercurial/vim73/src/eval.c 2011-05-19 17:25:36.000000000 +0200
|
|
--- src/eval.c 2011-05-19 17:52:02.000000000 +0200
|
|
***************
|
|
*** 911,916 ****
|
|
--- 911,917 ----
|
|
hash_clear(&compat_hashtab);
|
|
|
|
free_scriptnames();
|
|
+ free_locales();
|
|
|
|
/* global variables */
|
|
vars_clear(&globvarht);
|
|
*** ../mercurial/vim73/src/ex_cmds2.c 2011-05-10 16:41:13.000000000 +0200
|
|
--- src/ex_cmds2.c 2011-05-19 18:16:54.000000000 +0200
|
|
***************
|
|
*** 1476,1482 ****
|
|
#endif
|
|
|
|
/*
|
|
! * Ask the user what to do when abondoning a changed buffer.
|
|
* Must check 'write' option first!
|
|
*/
|
|
void
|
|
--- 1476,1482 ----
|
|
#endif
|
|
|
|
/*
|
|
! * Ask the user what to do when abandoning a changed buffer.
|
|
* Must check 'write' option first!
|
|
*/
|
|
void
|
|
***************
|
|
*** 4153,4158 ****
|
|
--- 4153,4234 ----
|
|
}
|
|
|
|
# if defined(FEAT_CMDL_COMPL) || defined(PROTO)
|
|
+
|
|
+ static char_u **locales = NULL; /* Array of all available locales */
|
|
+ static int did_init_locales = FALSE;
|
|
+
|
|
+ static void init_locales __ARGS((void));
|
|
+ static char_u **find_locales __ARGS((void));
|
|
+
|
|
+ /*
|
|
+ * Lazy initialization of all available locales.
|
|
+ */
|
|
+ static void
|
|
+ init_locales()
|
|
+ {
|
|
+ if (!did_init_locales)
|
|
+ {
|
|
+ did_init_locales = TRUE;
|
|
+ locales = find_locales();
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /* Return an array of strings for all available locales + NULL for the
|
|
+ * last element. Return NULL in case of error. */
|
|
+ static char_u **
|
|
+ find_locales()
|
|
+ {
|
|
+ garray_T locales_ga;
|
|
+ char_u *loc;
|
|
+
|
|
+ /* Find all available locales by running command "locale -a". If this
|
|
+ * doesn't work we won't have completion. */
|
|
+ char_u *locale_a = get_cmd_output((char_u *)"locale -a",
|
|
+ NULL, SHELL_SILENT);
|
|
+ if (locale_a == NULL)
|
|
+ return NULL;
|
|
+ ga_init2(&locales_ga, sizeof(char_u *), 20);
|
|
+
|
|
+ /* Transform locale_a string where each locale is separated by "\n"
|
|
+ * into an array of locale strings. */
|
|
+ loc = (char_u *)strtok((char *)locale_a, "\n");
|
|
+
|
|
+ while (loc != NULL)
|
|
+ {
|
|
+ if (ga_grow(&locales_ga, 1) == FAIL)
|
|
+ break;
|
|
+ loc = vim_strsave(loc);
|
|
+ if (loc == NULL)
|
|
+ break;
|
|
+
|
|
+ ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
|
|
+ loc = (char_u *)strtok(NULL, "\n");
|
|
+ }
|
|
+ vim_free(locale_a);
|
|
+ if (ga_grow(&locales_ga, 1) == FAIL)
|
|
+ {
|
|
+ ga_clear(&locales_ga);
|
|
+ return NULL;
|
|
+ }
|
|
+ ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
|
|
+ return (char_u **)locales_ga.ga_data;
|
|
+ }
|
|
+
|
|
+ # if defined(EXITFREE) || defined(PROTO)
|
|
+ void
|
|
+ free_locales()
|
|
+ {
|
|
+ int i;
|
|
+ if (locales != NULL)
|
|
+ {
|
|
+ for (i = 0; locales[i] != NULL; i++)
|
|
+ vim_free(locales[i]);
|
|
+ vim_free(locales);
|
|
+ locales = NULL;
|
|
+ }
|
|
+ }
|
|
+ # endif
|
|
+
|
|
/*
|
|
* Function given to ExpandGeneric() to obtain the possible arguments of the
|
|
* ":language" command.
|
|
***************
|
|
*** 4168,4174 ****
|
|
return (char_u *)"ctype";
|
|
if (idx == 2)
|
|
return (char_u *)"time";
|
|
! return NULL;
|
|
}
|
|
# endif
|
|
|
|
--- 4244,4268 ----
|
|
return (char_u *)"ctype";
|
|
if (idx == 2)
|
|
return (char_u *)"time";
|
|
!
|
|
! init_locales();
|
|
! if (locales == NULL)
|
|
! return NULL;
|
|
! return locales[idx - 3];
|
|
! }
|
|
!
|
|
! /*
|
|
! * Function given to ExpandGeneric() to obtain the available locales.
|
|
! */
|
|
! char_u *
|
|
! get_locales(xp, idx)
|
|
! expand_T *xp UNUSED;
|
|
! int idx;
|
|
! {
|
|
! init_locales();
|
|
! if (locales == NULL)
|
|
! return NULL;
|
|
! return locales[idx];
|
|
}
|
|
# endif
|
|
|
|
*** ../mercurial/vim73/src/ex_getln.c 2011-05-19 14:50:49.000000000 +0200
|
|
--- src/ex_getln.c 2011-05-19 18:18:49.000000000 +0200
|
|
***************
|
|
*** 4571,4618 ****
|
|
int context;
|
|
char_u *((*func)__ARGS((expand_T *, int)));
|
|
int ic;
|
|
} tab[] =
|
|
{
|
|
! {EXPAND_COMMANDS, get_command_name, FALSE},
|
|
! {EXPAND_BEHAVE, get_behave_arg, TRUE},
|
|
#ifdef FEAT_USR_CMDS
|
|
! {EXPAND_USER_COMMANDS, get_user_commands, FALSE},
|
|
! {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE},
|
|
! {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE},
|
|
! {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE},
|
|
#endif
|
|
#ifdef FEAT_EVAL
|
|
! {EXPAND_USER_VARS, get_user_var_name, FALSE},
|
|
! {EXPAND_FUNCTIONS, get_function_name, FALSE},
|
|
! {EXPAND_USER_FUNC, get_user_func_name, FALSE},
|
|
! {EXPAND_EXPRESSION, get_expr_name, FALSE},
|
|
#endif
|
|
#ifdef FEAT_MENU
|
|
! {EXPAND_MENUS, get_menu_name, FALSE},
|
|
! {EXPAND_MENUNAMES, get_menu_names, FALSE},
|
|
#endif
|
|
#ifdef FEAT_SYN_HL
|
|
! {EXPAND_SYNTAX, get_syntax_name, TRUE},
|
|
#endif
|
|
! {EXPAND_HIGHLIGHT, get_highlight_name, TRUE},
|
|
#ifdef FEAT_AUTOCMD
|
|
! {EXPAND_EVENTS, get_event_name, TRUE},
|
|
! {EXPAND_AUGROUP, get_augroup_name, TRUE},
|
|
#endif
|
|
#ifdef FEAT_CSCOPE
|
|
! {EXPAND_CSCOPE, get_cscope_name, TRUE},
|
|
#endif
|
|
#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},
|
|
#endif
|
|
! {EXPAND_ENV_VARS, get_env_name, TRUE},
|
|
};
|
|
int i;
|
|
|
|
--- 4571,4620 ----
|
|
int context;
|
|
char_u *((*func)__ARGS((expand_T *, int)));
|
|
int ic;
|
|
+ int escaped;
|
|
} tab[] =
|
|
{
|
|
! {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
|
|
! {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
|
|
#ifdef FEAT_USR_CMDS
|
|
! {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
|
|
! {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
|
|
! {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE},
|
|
! {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
|
|
#endif
|
|
#ifdef FEAT_EVAL
|
|
! {EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE},
|
|
! {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
|
|
! {EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE},
|
|
! {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
|
|
#endif
|
|
#ifdef FEAT_MENU
|
|
! {EXPAND_MENUS, get_menu_name, FALSE, TRUE},
|
|
! {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE},
|
|
#endif
|
|
#ifdef FEAT_SYN_HL
|
|
! {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE},
|
|
#endif
|
|
! {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
|
|
#ifdef FEAT_AUTOCMD
|
|
! {EXPAND_EVENTS, get_event_name, TRUE, TRUE},
|
|
! {EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
|
|
#endif
|
|
#ifdef FEAT_CSCOPE
|
|
! {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
|
|
#endif
|
|
#ifdef FEAT_SIGNS
|
|
! {EXPAND_SIGN, get_sign_name, TRUE, TRUE},
|
|
#endif
|
|
#ifdef FEAT_PROFILE
|
|
! {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
|
|
#endif
|
|
#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
|
|
&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
|
|
! {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
|
|
! {EXPAND_LOCALES, get_locales, TRUE, FALSE},
|
|
#endif
|
|
! {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
|
|
};
|
|
int i;
|
|
|
|
***************
|
|
*** 4626,4632 ****
|
|
{
|
|
if (tab[i].ic)
|
|
regmatch.rm_ic = TRUE;
|
|
! ret = ExpandGeneric(xp, ®match, num_file, file, tab[i].func);
|
|
break;
|
|
}
|
|
}
|
|
--- 4628,4635 ----
|
|
{
|
|
if (tab[i].ic)
|
|
regmatch.rm_ic = TRUE;
|
|
! ret = ExpandGeneric(xp, ®match, num_file, file,
|
|
! tab[i].func, tab[i].escaped);
|
|
break;
|
|
}
|
|
}
|
|
***************
|
|
*** 4648,4660 ****
|
|
* Returns OK when no problems encountered, FAIL for error (out of memory).
|
|
*/
|
|
int
|
|
! ExpandGeneric(xp, regmatch, num_file, file, func)
|
|
expand_T *xp;
|
|
regmatch_T *regmatch;
|
|
int *num_file;
|
|
char_u ***file;
|
|
char_u *((*func)__ARGS((expand_T *, int)));
|
|
/* returns a string from the list */
|
|
{
|
|
int i;
|
|
int count = 0;
|
|
--- 4651,4664 ----
|
|
* Returns OK when no problems encountered, FAIL for error (out of memory).
|
|
*/
|
|
int
|
|
! ExpandGeneric(xp, regmatch, num_file, file, func, escaped)
|
|
expand_T *xp;
|
|
regmatch_T *regmatch;
|
|
int *num_file;
|
|
char_u ***file;
|
|
char_u *((*func)__ARGS((expand_T *, int)));
|
|
/* returns a string from the list */
|
|
+ int escaped;
|
|
{
|
|
int i;
|
|
int count = 0;
|
|
***************
|
|
*** 4679,4685 ****
|
|
{
|
|
if (round)
|
|
{
|
|
! str = vim_strsave_escaped(str, (char_u *)" \t\\.");
|
|
(*file)[count] = str;
|
|
#ifdef FEAT_MENU
|
|
if (func == get_menu_names && str != NULL)
|
|
--- 4683,4692 ----
|
|
{
|
|
if (round)
|
|
{
|
|
! if (escaped)
|
|
! str = vim_strsave_escaped(str, (char_u *)" \t\\.");
|
|
! else
|
|
! str = vim_strsave(str);
|
|
(*file)[count] = str;
|
|
#ifdef FEAT_MENU
|
|
if (func == get_menu_names && str != NULL)
|
|
*** ../mercurial/vim73/src/proto/ex_cmds2.pro 2010-05-15 21:22:11.000000000 +0200
|
|
--- src/proto/ex_cmds2.pro 2011-05-19 17:53:52.000000000 +0200
|
|
***************
|
|
*** 83,87 ****
|
|
--- 83,89 ----
|
|
char_u *get_mess_lang __ARGS((void));
|
|
void set_lang_var __ARGS((void));
|
|
void ex_language __ARGS((exarg_T *eap));
|
|
+ void free_locales __ARGS((void));
|
|
char_u *get_lang_arg __ARGS((expand_T *xp, int idx));
|
|
+ char_u *get_locales __ARGS((expand_T *xp, int idx));
|
|
/* vim: set ft=c : */
|
|
*** ../mercurial/vim73/src/proto/ex_getln.pro 2010-08-16 21:23:30.000000000 +0200
|
|
--- src/proto/ex_getln.pro 2011-05-19 17:54:00.000000000 +0200
|
|
***************
|
|
*** 31,37 ****
|
|
char_u *addstar __ARGS((char_u *fname, int len, int context));
|
|
void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
|
|
int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
|
|
! int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
|
|
char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
|
|
void init_history __ARGS((void));
|
|
int get_histtype __ARGS((char_u *name));
|
|
--- 31,37 ----
|
|
char_u *addstar __ARGS((char_u *fname, int len, int context));
|
|
void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
|
|
int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
|
|
! int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped));
|
|
char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
|
|
void init_history __ARGS((void));
|
|
int get_histtype __ARGS((char_u *name));
|
|
*** ../mercurial/vim73/src/vim.h 2011-05-19 17:25:36.000000000 +0200
|
|
--- src/vim.h 2011-05-19 17:52:02.000000000 +0200
|
|
***************
|
|
*** 779,784 ****
|
|
--- 779,785 ----
|
|
#define EXPAND_FILETYPE 37
|
|
#define EXPAND_FILES_IN_PATH 38
|
|
#define EXPAND_OWNSYNTAX 39
|
|
+ #define EXPAND_LOCALES 40
|
|
|
|
/* Values for exmode_active (0 is no exmode) */
|
|
#define EXMODE_NORMAL 1
|
|
*** ../vim-7.3.197/src/version.c 2011-05-19 17:42:54.000000000 +0200
|
|
--- src/version.c 2011-05-19 18:24:58.000000000 +0200
|
|
***************
|
|
*** 711,712 ****
|
|
--- 711,714 ----
|
|
{ /* Add new patch number below this line */
|
|
+ /**/
|
|
+ 198,
|
|
/**/
|
|
|
|
--
|
|
The primary purpose of the DATA statement is to give names to constants;
|
|
instead of referring to pi as 3.141592653589793 at every appearance, the
|
|
variable PI can be given that value with a DATA statement and used instead
|
|
of the longer form of the constant. This also simplifies modifying the
|
|
program, should the value of pi change.
|
|
-- FORTRAN manual for Xerox Computers
|
|
|
|
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
|
|
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
|
|
\\\ an exciting new programming language -- http://www.Zimbu.org ///
|
|
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
|