diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 1b3db0466b2fb5b5a5ab9ef2ec556e796b4ad535..8c98ff0006830dbbd338274f647b725b17546486 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 7.0aa. Last change: 2005 May 31 +*eval.txt* For Vim version 7.0aa. Last change: 2005 Jun 07 VIM REFERENCE MANUAL by Bram Moolenaar @@ -4309,7 +4309,8 @@ sniff Compiled with SNiFF interface support. statusline Compiled with support for 'statusline', 'rulerformat' and special formats of 'titlestring' and 'iconstring'. sun_workshop Compiled with support for Sun |workshop|. -syntax Compiled with syntax highlighting support. +spell Compiled with spell checking support |spell|. +syntax Compiled with syntax highlighting support |syntax|. syntax_items There are active syntax highlighting items for the current buffer. system Compiled to use system() instead of fork()/exec(). diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index a8493c92672836f5c9566701ea58b358c4480a95..60a58f63190cfcb26d671161632f8a330cd570fe 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 7.0aa. Last change: 2005 Jun 06 +*options.txt* For Vim version 7.0aa. Last change: 2005 Jun 07 VIM REFERENCE MANUAL by Bram Moolenaar @@ -5633,8 +5633,20 @@ A jump table for the options with a short description can be found at |Q_op|. When on spell checking will be done. See |spell|. The languages are specified with 'spelllang'. + *'spellfile'* *'spf'* +'spellfile' 'spf' string (default empty) + local to buffer + {not in Vi} + {not available when compiled without the |+syntax| + feature} + Name of the word list file where words are added for the |zg| and |zw| + commands. It must end in ".add". + When a word is added while this option is empty Vim will set it for + you: Using the first "spell" directory in 'runtimepath' that is + writable and the first language name that appears in 'spelllang'. + *'spelllang'* *'spl'* -'spelllang' 'spl' string (default empty) +'spelllang' 'spl' string (default "en") local to buffer {not in Vi} {not available when compiled without the |+syntax| diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt index df1ea5434c7acca90388161de10559def25a28ec..32d8c3fee3a3eb63432bc0e849b514cd07f0c656 100644 --- a/runtime/doc/spell.txt +++ b/runtime/doc/spell.txt @@ -1,4 +1,4 @@ -*spell.txt* For Vim version 7.0aa. Last change: 2005 Jun 06 +*spell.txt* For Vim version 7.0aa. Last change: 2005 Jun 07 VIM REFERENCE MANUAL by Bram Moolenaar @@ -8,7 +8,7 @@ Spell checking *spell* 1. Quick start |spell-quickstart| 2. Generating a spell file |spell-mkspell| -9. Spell file format |spell-file-format| +3. Spell file format |spell-file-format| {Vi does not have any of these commands} @@ -51,6 +51,27 @@ To search for the next misspelled word: [S Like "]S" but search backwards. +To add words to your own word list: + + *zg* +zg Add word under the cursor as a good word to + 'spellfile'. In Visual mode the selected characters + are added as a word (including white space!). + + *zw* +zw Add word under the cursor as a wrong (bad) word to + 'spellfile'. In Visual mode the selected characters + are added as a word (including white space!). + + *:spellg* *:spellgood* +:spellg[ood] {word} Add [word} as a good word to 'spellfile'. + +:spellw[rong] {word} Add [word} as a wrong (bad) word to 'spellfile'. + +After adding a word to 'spellfile' its associated ".spl" file will +automatically be updated. + + PERFORMANCE Note that Vim does on-the-fly spellchecking. To make this work fast the @@ -138,15 +159,21 @@ You can create a Vim spell file from the .aff and .dic files that Myspell uses. Myspell is used by OpenOffice.org and Mozilla. You should be able to find them here: http://lingucomponent.openoffice.org/spell_dic.html +You can also use a plain word list. :mksp[ell] [-ascii] {outname} {inname} ... *:mksp* *:mkspell* - Generate spell file {outname}.spl. + Generate a Vim spell file word lists. Example: > + :mkspell nl nl_NL.words +< + When {outname} ends in ".spl" it is used as the output + file name. Otherwise it should be a language name, + such as "en". The file written will be + {outname}.{encoding}.spl. {encoding} is the value of + the 'encoding' option. When the [-ascii] argument is present, words with non-ascii characters are skipped. The resulting file - ends in "ascii.spl". Otherwise the resulting file - ends in "ENC.spl", where ENC is the value of - 'encoding'. + ends in "ascii.spl". The input can be the Myspell format files {inname}.aff and {inname}.dic. If {inname}.aff does not exist then @@ -163,8 +190,13 @@ find them here: When the spell file was written all currently used spell files will be reloaded. -Since you might want to change the word list for use with Vim the following -procedure is recommended: +:mksp[ell] [-ascii] {add-name} + Like ":mkspell" above, using {add-name} as the input + file and producing an output file that has ".spl" + appended. + +Since you might want to change a Myspell word list for use with Vim the +following procedure is recommended: 1. Obtain the xx_YY.aff and xx_YY.dic files from Myspell. 2. Make a copy of these files to xx_YY.orig.aff and xx_YY.orig.dic. @@ -204,8 +236,8 @@ format is a list of words. FORMAT OF WORD LIST -The words must appear one per line. That is all that is required. Optional -items are: +The words must appear one per line. That is all that is required. +Additionally the following items are recognized: - Empty and blank lines are ignored. - Lines starting with a # are ignored (comment lines). - A line starting with "/encoding=", before any word, specifies the encoding @@ -215,8 +247,8 @@ items are: - A line starting with "/!" specifies a word that should be marked as bad. - A line starting with "/=" specifies a word where case must match exactly. A "?" or "!" may be following: "/=?" and "/=!". -- Other lines starting with '/' are special. The ones that are not recognized - are ignored (but you do get a warning message). +- Other lines starting with '/' are reserved for future use. The ones that + are not recognized are ignored (but you do get a warning message). FORMAT WITH AFFIX COMPRESSION @@ -231,6 +263,7 @@ Myspell uses (the spell checker of Mozilla and OpenOffice.org). A description can be found here: http://lingucomponent.openoffice.org/affix.readme ~ Note that affixes are case sensitive, this isn't obvious from the description. + Vim supports a few extras. Hopefully Myspell will support these too some day. See |spell-affix-vim|. @@ -259,10 +292,11 @@ A very short example, with line numbers: 9 kado/1 10 cadeau/2 -The first line contains the number of words. Vim ignores it. *E760* +The first line contains the number of words. Vim ignores it, but you do get +an error message if it's not there. *E760* -What follows is one word per line. There should be no white space after the -word. +What follows is one word per line. There should be no white space before or +after the word. When the word only has lower-case letters it will also match with the word starting with an upper-case letter. @@ -280,7 +314,7 @@ The same word with all upper-case characters will always be OK. ALS ALS als Als ALs AlS aLs aLS AlS AlS ALS als Als ALs aLs aLS -The HUH affix ID can be used to specifically match a word in identical case +The KEP affix ID can be used to specifically match a word with identical case only, see below. Note in line 5 to 7 that non-word characters are used. You can include @@ -292,10 +326,10 @@ After the word there is an optional slash and flags. Most of these flags are letters that indicate the affixes that can be used with this word. *spell-affix-vim* -A flag that Vim adds and is not in Myspell is the flag defined with HUH in the +A flag that Vim adds and is not in Myspell is the flag defined with KEP in the affix file. This has the meaning that case matters. This can be used if the word does not have the first letter in upper case at the start of a sentence. -Example: +Example (assuming that = was used for KEP): word list matches does not match ~ 's morgens/= 's morgens 'S morgens 's Morgens @@ -309,15 +343,11 @@ something else, any encoding that "iconv" supports. The "SET" line must specify the name of the encoding. When using a multi-byte encoding it's possible to use more different affixes. -Performance hint: Although using affixes reduces the number of words, it -reduces the speed. It's a good idea to put all the often used words in the -word list with the affixes prepended/appended. - *spell-affix-chars* -The affix file should define the word characters when using an 8-bit encoding -(as specified with ENC). This is because the system where ":mkspell" is used -may not support a locale with this encoding and isalpha() won't work. For -example when using "cp1250" on Unix. +When using an 8-bit encoding the affix file should define what characters are +word characters (as specified with ENC). This is because the system where +":mkspell" is used may not support a locale with this encoding and isalpha() +won't work. For example when using "cp1250" on Unix. *E761* *E762* Three lines in the affix file are needed. Simplistic example: @@ -348,15 +378,15 @@ otherwise they can't be combined without errors. The XX.ascii.spl spell file generated with the "-ascii" argument will not contain the table with characters, so that it can be combine with spell files for any encoding. - -In the affix file a HUH line can be used to define the affix name used for + *spell-affix-KEP* +In the affix file a KEP line can be used to define the affix name used for keep-case words. Example: - HUH = ~ + KEP = ~ See above for an example |spell-affix-vim|. - + *spell-affix-RAR* In the affix file a RAR line can be used to define the affix name used for rare words. Example: diff --git a/runtime/menu.vim b/runtime/menu.vim index 0eed68fecd628a90bebfd7e82a5b459eae25d3bd..9290fbd391348c9972c488128d9422dc0b924ed3 100644 --- a/runtime/menu.vim +++ b/runtime/menu.vim @@ -2,7 +2,7 @@ " You can also use this as a start for your own set of menus. " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2005 Mar 15 +" Last Change: 2005 Jun 07 " Note that ":an" (short for ":anoremenu") is often used to make a menu work " in all modes and avoid side effects from mappings defined by the user. @@ -403,9 +403,58 @@ vnoremenu &Tools.&Jump\ to\ this\ tag<Tab>g^] g<C-]> an 40.310 &Tools.Jump\ &back<Tab>^T <C-T> an 40.320 &Tools.Build\ &Tags\ File :exe "!" . g:ctags_command<CR> +if has("folding") || has("spell") + an 40.330 &Tools.-SEP1- <Nop> +endif + +" Tools.Spellsing Menu +if has("spell") + an 40.335.110 &Tools.&Spelling.&Spell\ Check\ On :set spell<CR> + an 40.335.120 &Tools.&Spelling.Spell\ Check\ &Off :set nospell<CR> + an 40.335.130 &Tools.&Spelling.To\ &Next\ error<Tab>]s ]s + an 40.335.130 &Tools.&Spelling.To\ &Pevious\ error<Tab>[s [s + an 40.335.200 &Tools.&Spelling.-SEP1- <Nop> + an 40.335.210 &Tools.&Spelling.Set\ language\ to\ "en" :set spl=en spell<CR> + an 40.335.220 &Tools.&Spelling.Set\ language\ to\ "en_au" :set spl=en_au spell<CR> + an 40.335.230 &Tools.&Spelling.Set\ language\ to\ "en_ca" :set spl=en_ca spell<CR> + an 40.335.240 &Tools.&Spelling.Set\ language\ to\ "en_gb" :set spl=en_gb spell<CR> + an 40.335.250 &Tools.&Spelling.Set\ language\ to\ "en_nz" :set spl=en_nz spell<CR> + an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us" :set spl=en_us spell<CR> + an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR> + + func! s:SpellLang() + silent! aun &Tools.&Spelling.&Find\ More\ Languages + if &enc == "iso-8859-15" + let enc = "latin1" + else + let enc = &enc + endif + let found = 0 + let s = globpath(&rtp, "spell/*." . enc . ".spl") + if s != "" + let n = 300 + for f in split(s, "\n") + let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "") + if nm != "en" + exe 'an 40.335.' . n . ' &Tools.&Spelling.Set\ language\ to\ "' . nm . '" :set spl=' . nm . ' spell<CR>' + let found += 1 + endif + let n += 10 + endfor + endif + if found == 0 + echomsg "Could not find other spell files" + elseif found == 1 + echomsg "Found spell file " . nm + else + echomsg "Found " . found . " more spell files" + endif + endfun + +endif + " Tools.Fold Menu if has("folding") - an 40.330 &Tools.-SEP1- <Nop> " open close folds an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi zi an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv zv @@ -520,7 +569,7 @@ while strlen(s:n) > 0 endif " Ignore case for VMS and windows let s:name = substitute(s:name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '') - exe "an 30.440." . s:idx . ' &Tools.&Set\ Compiler.' . s:name . " :compiler " . s:name . "<CR>" + exe "an 30.440." . s:idx . ' &Tools.se&T\ Compiler.' . s:name . " :compiler " . s:name . "<CR>" unlet s:name unlet s:i let s:idx = s:idx + 10 diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index 5ff0d402f4ab95c5984420ac48975905a999823b..3c591d0267d78fd43dd3d34aea50dfe731a2ab53 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -1303,7 +1303,7 @@ dialog_changed(buf, checkall) int ret; buf_T *buf2; - dialog_msg(buff, _("Save changes to \"%.*s\"?"), + dialog_msg(buff, _("Save changes to \"%s\"?"), (buf->b_fname != NULL) ? buf->b_fname : (char_u *)_("Untitled")); if (checkall) diff --git a/src/globals.h b/src/globals.h index 446717d79d8e48316a0b5cbee58fe5832c88b293..c073fcbcc61babcb12d78180217abdb34c6e2a12 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1434,6 +1434,7 @@ EXTERN char_u e_emptybuf[] INIT(=N_("E749: empty buffer")); #ifdef FEAT_EX_EXTRA EXTERN char_u e_invalpat[] INIT(=N_("E682: Invalid search pattern or delimiter")); #endif +EXTERN char_u e_bufloaded[] INIT(=N_("E139: File is loaded in another buffer")); #ifdef MACOS_X_UNIX EXTERN short disallow_gui INIT(= FALSE); diff --git a/src/gui_gtk.c b/src/gui_gtk.c index b237925556586e360ffa91935d11c8c079093fb2..641f784b858b7eef7b2d6ccb6e995a82b5d00c0d 100644 --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -2241,8 +2241,12 @@ dialog_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) DialogInfo *di = (DialogInfo *)data; /* Ignore hitting "Enter" if there is no default button. */ - if (di->ignore_enter && event->keyval == GDK_Return) + if (event->keyval == GDK_Return) + { + if (!di->ignore_enter) + gtk_dialog_response(di->dialog, GTK_RESPONSE_ACCEPT); return TRUE; + } /* Close the dialog when hitting "Esc". */ if (event->keyval == GDK_Escape) @@ -2326,6 +2330,8 @@ gui_mch_dialog(int type, /* type of dialog */ /* GTK_RESPONSE_NONE means the dialog was programmatically destroyed. */ if (response != GTK_RESPONSE_NONE) { + if (response == GTK_RESPONSE_ACCEPT) /* Enter pressed */ + response = def_but; if (textfield != NULL) { text = (char_u *)gtk_entry_get_text(GTK_ENTRY(entry)); diff --git a/src/option.c b/src/option.c index 24b709e30b008b862b6db6028a0d48457a2528f7..1211ce797bc1503f27f0dd8fafa077f4098fb176 100644 --- a/src/option.c +++ b/src/option.c @@ -121,6 +121,7 @@ typedef enum , PV_SI , PV_SN , PV_SPELL + , PV_SPF , PV_SPL , PV_STL , PV_STS @@ -234,6 +235,7 @@ static long p_sw; static int p_swf; #ifdef FEAT_SYN_HL static char_u *p_syn; +static char_u *p_spf; static char_u *p_spl; #endif static long p_ts; @@ -2029,10 +2031,19 @@ static struct vimoption (char_u *)NULL, PV_NONE, #endif {(char_u *)FALSE, (char_u *)0L}}, + {"spellfile", "spf", P_STRING|P_EXPAND|P_ALLOCED|P_VI_DEF|P_SECURE, +#ifdef FEAT_SYN_HL + (char_u *)&p_spf, PV_SPF, + {(char_u *)"", (char_u *)0L} +#else + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} +#endif + }, {"spelllang", "spl", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_RBUF, #ifdef FEAT_SYN_HL (char_u *)&p_spl, PV_SPL, - {(char_u *)"", (char_u *)0L} + {(char_u *)"en", (char_u *)0L} #else (char_u *)NULL, PV_NONE, {(char_u *)0L, (char_u *)0L} @@ -4612,6 +4623,7 @@ check_buf_options(buf) #endif #ifdef FEAT_SYN_HL check_string_option(&buf->b_p_syn); + check_string_option(&buf->b_p_spf); check_string_option(&buf->b_p_spl); #endif #ifdef FEAT_SEARCHPATH @@ -8313,6 +8325,7 @@ get_varp(p) case PV_SWF: return (char_u *)&(curbuf->b_p_swf); #ifdef FEAT_SYN_HL case PV_SYN: return (char_u *)&(curbuf->b_p_syn); + case PV_SPF: return (char_u *)&(curbuf->b_p_spf); case PV_SPL: return (char_u *)&(curbuf->b_p_spl); #endif case PV_SW: return (char_u *)&(curbuf->b_p_sw); @@ -8623,6 +8636,7 @@ buf_copy_options(buf, flags) #ifdef FEAT_SYN_HL /* Don't copy 'syntax', it must be set */ buf->b_p_syn = empty_option; + buf->b_p_spf = vim_strsave(p_spf); buf->b_p_spl = vim_strsave(p_spl); #endif #if defined(FEAT_CINDENT) && defined(FEAT_EVAL) diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro index 68594ba8f9f9b4ac5974085c47a28023b39d5ba6..7d59f557b6de7a7ee3fbd43a75fe268e92124b3b 100644 --- a/src/proto/fileio.pro +++ b/src/proto/fileio.pro @@ -15,6 +15,7 @@ int tag_fgets __ARGS((char_u *buf, int size, FILE *fp)); int vim_rename __ARGS((char_u *from, char_u *to)); int check_timestamps __ARGS((int focus)); int buf_check_timestamp __ARGS((buf_T *buf, int focus)); +void buf_reload __ARGS((buf_T *buf)); void buf_store_time __ARGS((buf_T *buf, struct stat *st, char_u *fname)); void write_lnum_adjust __ARGS((linenr_T offset)); void vim_deltempdir __ARGS((void)); diff --git a/src/proto/spell.pro b/src/proto/spell.pro index 4fcb7ba3d4cc7fdf2a2e1b448b760dcfa912fb55..71d6dbc1e6e13acf21856ceee0dd5be5aaf25b01 100644 --- a/src/proto/spell.pro +++ b/src/proto/spell.pro @@ -5,5 +5,7 @@ char_u *did_set_spelllang __ARGS((buf_T *buf)); void spell_reload __ARGS((void)); void put_bytes __ARGS((FILE *fd, long_u nr, int len)); void ex_mkspell __ARGS((exarg_T *eap)); +void ex_spell __ARGS((exarg_T *eap)); +void spell_add_word __ARGS((char_u *word, int len, int bad)); void init_spell_chartab __ARGS((void)); /* vim: set ft=c : */ diff --git a/src/structs.h b/src/structs.h index a45a98ee4ffd5457815bab4e7db38dd0db92a8bb..18915cfade13160719318d1ae7a9c4e5366290e3 100644 --- a/src/structs.h +++ b/src/structs.h @@ -1341,6 +1341,7 @@ struct file_buffer int b_p_swf; /* 'swapfile' */ #ifdef FEAT_SYN_HL char_u *b_p_syn; /* 'syntax' */ + char_u *b_p_spf; /* 'spellfile' */ char_u *b_p_spl; /* 'spelllang' */ #endif long b_p_ts; /* 'tabstop' */ diff --git a/src/version.h b/src/version.h index afb4c5fb56e9353fd2c60b83c7ab64f7bc6e22ff..b1c0abbf54e38fb50c87a9506a49f62696b848d7 100644 --- a/src/version.h +++ b/src/version.h @@ -36,5 +36,5 @@ #define VIM_VERSION_NODOT "vim70aa" #define VIM_VERSION_SHORT "7.0aa" #define VIM_VERSION_MEDIUM "7.0aa ALPHA" -#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 6)" -#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 6, compiled " +#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 7)" +#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Jun 7, compiled "