summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.2.109
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2009-08-26 10:00:38 -0500
committer Eric Hameleers <alien@slackware.com>2018-05-31 22:41:17 +0200
commit5a12e7c134274dba706667107d10d231517d3e05 (patch)
tree55718d5acb710fde798d9f38d0bbaf594ed4b296 /source/ap/vim/patches/7.2.109
downloadcurrent-5a12e7c134274dba706667107d10d231517d3e05.tar.gz
current-5a12e7c134274dba706667107d10d231517d3e05.tar.xz
Slackware 13.0slackware-13.0
Wed Aug 26 10:00:38 CDT 2009 Slackware 13.0 x86_64 is released as stable! Thanks to everyone who helped make this release possible -- see the RELEASE_NOTES for the credits. The ISOs are off to the replicator. This time it will be a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. We're taking pre-orders now at store.slackware.com. Please consider picking up a copy to help support the project. Once again, thanks to the entire Slackware community for all the help testing and fixing things and offering suggestions during this development cycle. As always, have fun and enjoy! -P.
Diffstat (limited to 'source/ap/vim/patches/7.2.109')
-rw-r--r--source/ap/vim/patches/7.2.109423
1 files changed, 423 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.2.109 b/source/ap/vim/patches/7.2.109
new file mode 100644
index 000000000..8c3866cf9
--- /dev/null
+++ b/source/ap/vim/patches/7.2.109
@@ -0,0 +1,423 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.109
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.109
+Problem: 'langmap' does not work for multi-byte characters.
+Solution: Add a list of mapped multi-byte characters. (based on work by
+ Konstantin Korikov, Agathoklis Hatzimanikas)
+Files: runtime/doc/options.txt, src/edit.c, src/getchar.c, src/macros.h,
+ src/normal.c, src/option.c, src/proto/option.pro, src/window.c
+
+
+*** ../vim-7.2.108/runtime/doc/options.txt Fri Nov 28 10:59:57 2008
+--- runtime/doc/options.txt Wed Feb 11 18:59:34 2009
+***************
+*** 4175,4183 ****
+ be able to execute Normal mode commands.
+ This is the opposite of the 'keymap' option, where characters are
+ mapped in Insert mode.
+- This only works for 8-bit characters. The value of 'langmap' may be
+- specified with multi-byte characters (e.g., UTF-8), but only the lower
+- 8 bits of each character will be used.
+
+ Example (for Greek, in UTF-8): *greek* >
+ :set langmap=ΑA,ΒB,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,ΥY,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,πp,qq,ρr,σs,τt,θu,ωv,ςw,χx,υy,ζz
+--- 4188,4193 ----
+*** ../vim-7.2.108/src/edit.c Wed Feb 4 11:19:40 2009
+--- src/edit.c Sat Feb 21 19:54:03 2009
+***************
+*** 7703,7711 ****
+ */
+ ++no_mapping;
+ regname = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(regname, TRUE);
+- #endif
+ if (regname == Ctrl_R || regname == Ctrl_O || regname == Ctrl_P)
+ {
+ /* Get a third key for literal register insertion */
+--- 7703,7709 ----
+***************
+*** 7714,7722 ****
+ add_to_showcmd_c(literally);
+ #endif
+ regname = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(regname, TRUE);
+- #endif
+ }
+ --no_mapping;
+
+--- 7712,7718 ----
+*** ../vim-7.2.108/src/macros.h Wed Aug 15 20:41:07 2007
+--- src/macros.h Sat Feb 21 19:55:38 2009
+***************
+*** 127,141 ****
+ #ifdef FEAT_LANGMAP
+ /*
+ * Adjust chars in a language according to 'langmap' option.
+! * NOTE that there is NO overhead if 'langmap' is not set; but even
+! * when set we only have to do 2 ifs and an array lookup.
+ * Don't apply 'langmap' if the character comes from the Stuff buffer.
+ * The do-while is just to ignore a ';' after the macro.
+ */
+! # define LANGMAP_ADJUST(c, condition) do { \
+! if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \
+! c = langmap_mapchar[c]; \
+ } while (0)
+ #endif
+
+ /*
+--- 127,157 ----
+ #ifdef FEAT_LANGMAP
+ /*
+ * Adjust chars in a language according to 'langmap' option.
+! * NOTE that there is no noticeable overhead if 'langmap' is not set.
+! * When set the overhead for characters < 256 is small.
+ * Don't apply 'langmap' if the character comes from the Stuff buffer.
+ * The do-while is just to ignore a ';' after the macro.
+ */
+! # ifdef FEAT_MBYTE
+! # define LANGMAP_ADJUST(c, condition) \
+! do { \
+! if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0) \
+! { \
+! if ((c) < 256) \
+! c = langmap_mapchar[c]; \
+! else \
+! c = langmap_adjust_mb(c); \
+! } \
+ } while (0)
++ # else
++ # define LANGMAP_ADJUST(c, condition) \
++ do { \
++ if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \
++ c = langmap_mapchar[c]; \
++ } while (0)
++ # endif
++ #else
++ # define LANGMAP_ADJUST(c, condition) /* nop */
+ #endif
+
+ /*
+*** ../vim-7.2.108/src/normal.c Wed Feb 4 11:45:28 2009
+--- src/normal.c Sat Feb 21 19:55:17 2009
+***************
+*** 651,660 ****
+ * Get the command character from the user.
+ */
+ c = safe_vgetc();
+-
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(c, TRUE);
+- #endif
+
+ #ifdef FEAT_VISUAL
+ /*
+--- 651,657 ----
+***************
+*** 744,752 ****
+ }
+ ++no_zero_mapping; /* don't map zero here */
+ c = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(c, TRUE);
+- #endif
+ --no_zero_mapping;
+ if (ctrl_w)
+ {
+--- 741,747 ----
+***************
+*** 769,777 ****
+ ++no_mapping;
+ ++allow_keys; /* no mapping for nchar, but keys */
+ c = plain_vgetc(); /* get next character */
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(c, TRUE);
+- #endif
+ --no_mapping;
+ --allow_keys;
+ #ifdef FEAT_CMDL_INFO
+--- 764,770 ----
+***************
+*** 959,967 ****
+ * "gr", "g'" and "g`".
+ */
+ ca.nchar = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(ca.nchar, TRUE);
+- #endif
+ #ifdef FEAT_CMDL_INFO
+ need_flushbuf |= add_to_showcmd(ca.nchar);
+ #endif
+--- 952,958 ----
+***************
+*** 1062,1071 ****
+ }
+ #endif
+
+- #ifdef FEAT_LANGMAP
+ /* adjust chars > 127, except after "tTfFr" commands */
+ LANGMAP_ADJUST(*cp, !lang);
+- #endif
+ #ifdef FEAT_RIGHTLEFT
+ /* adjust Hebrew mapped char */
+ if (p_hkmap && lang && KeyTyped)
+--- 1053,1060 ----
+***************
+*** 4630,4638 ****
+ ++no_mapping;
+ ++allow_keys; /* no mapping for nchar, but allow key codes */
+ nchar = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(nchar, TRUE);
+- #endif
+ --no_mapping;
+ --allow_keys;
+ #ifdef FEAT_CMDL_INFO
+--- 4619,4625 ----
+***************
+*** 4988,4996 ****
+ ++no_mapping;
+ ++allow_keys; /* no mapping for nchar, but allow key codes */
+ nchar = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(nchar, TRUE);
+- #endif
+ --no_mapping;
+ --allow_keys;
+ #ifdef FEAT_CMDL_INFO
+--- 4975,4981 ----
+*** ../vim-7.2.108/src/option.c Wed Feb 11 22:47:32 2009
+--- src/option.c Sat Feb 21 19:46:13 2009
+***************
+*** 10153,10177 ****
+
+ #ifdef FEAT_LANGMAP
+ /*
+! * Any character has an equivalent character. This is used for keyboards that
+! * have a special language mode that sends characters above 128 (although
+! * other characters can be translated too).
+ */
+
+ /*
+! * char_u langmap_mapchar[256];
+! * Normally maps each of the 128 upper chars to an <128 ascii char; used to
+! * "translate" native lang chars in normal mode or some cases of
+! * insert mode without having to tediously switch lang mode back&forth.
+ */
+
+ static void
+ langmap_init()
+ {
+ int i;
+
+! for (i = 0; i < 256; i++) /* we init with a-one-to one map */
+! langmap_mapchar[i] = i;
+ }
+
+ /*
+--- 10153,10262 ----
+
+ #ifdef FEAT_LANGMAP
+ /*
+! * Any character has an equivalent 'langmap' character. This is used for
+! * keyboards that have a special language mode that sends characters above
+! * 128 (although other characters can be translated too). The "to" field is a
+! * Vim command character. This avoids having to switch the keyboard back to
+! * ASCII mode when leaving Insert mode.
+! *
+! * langmap_mapchar[] maps any of 256 chars to an ASCII char used for Vim
+! * commands.
+! * When FEAT_MBYTE is defined langmap_mapga.ga_data is a sorted table of
+! * langmap_entry_T. This does the same as langmap_mapchar[] for characters >=
+! * 256.
+! */
+! # ifdef FEAT_MBYTE
+! /*
+! * With multi-byte support use growarray for 'langmap' chars >= 256
+ */
++ typedef struct
++ {
++ int from;
++ int to;
++ } langmap_entry_T;
++
++ static garray_T langmap_mapga;
++ static void langmap_set_entry __ARGS((int from, int to));
++
++ /*
++ * Search for an entry in "langmap_mapga" for "from". If found set the "to"
++ * field. If not found insert a new entry at the appropriate location.
++ */
++ static void
++ langmap_set_entry(from, to)
++ int from;
++ int to;
++ {
++ langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data);
++ int a = 0;
++ int b = langmap_mapga.ga_len;
++
++ /* Do a binary search for an existing entry. */
++ while (a != b)
++ {
++ int i = (a + b) / 2;
++ int d = entries[i].from - from;
++
++ if (d == 0)
++ {
++ entries[i].to = to;
++ return;
++ }
++ if (d < 0)
++ a = i + 1;
++ else
++ b = i;
++ }
++
++ if (ga_grow(&langmap_mapga, 1) != OK)
++ return; /* out of memory */
++
++ /* insert new entry at position "a" */
++ entries = (langmap_entry_T *)(langmap_mapga.ga_data) + a;
++ mch_memmove(entries + 1, entries,
++ (langmap_mapga.ga_len - a) * sizeof(langmap_entry_T));
++ ++langmap_mapga.ga_len;
++ entries[0].from = from;
++ entries[0].to = to;
++ }
+
+ /*
+! * Apply 'langmap' to multi-byte character "c" and return the result.
+ */
++ int
++ langmap_adjust_mb(c)
++ int c;
++ {
++ langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data);
++ int a = 0;
++ int b = langmap_mapga.ga_len;
++
++ while (a != b)
++ {
++ int i = (a + b) / 2;
++ int d = entries[i].from - c;
++
++ if (d == 0)
++ return entries[i].to; /* found matching entry */
++ if (d < 0)
++ a = i + 1;
++ else
++ b = i;
++ }
++ return c; /* no entry found, return "c" unmodified */
++ }
++ # endif
+
+ static void
+ langmap_init()
+ {
+ int i;
+
+! for (i = 0; i < 256; i++)
+! langmap_mapchar[i] = i; /* we init with a one-to-one map */
+! # ifdef FEAT_MBYTE
+! ga_init2(&langmap_mapga, sizeof(langmap_entry_T), 8);
+! # endif
+ }
+
+ /*
+***************
+*** 10185,10191 ****
+ char_u *p2;
+ int from, to;
+
+! langmap_init(); /* back to one-to-one map first */
+
+ for (p = p_langmap; p[0] != NUL; )
+ {
+--- 10270,10279 ----
+ char_u *p2;
+ int from, to;
+
+! #ifdef FEAT_MBYTE
+! ga_clear(&langmap_mapga); /* clear the previous map first */
+! #endif
+! langmap_init(); /* back to one-to-one map */
+
+ for (p = p_langmap; p[0] != NUL; )
+ {
+***************
+*** 10235,10241 ****
+ transchar(from));
+ return;
+ }
+! langmap_mapchar[from & 255] = to;
+
+ /* Advance to next pair */
+ mb_ptr_adv(p);
+--- 10323,10335 ----
+ transchar(from));
+ return;
+ }
+!
+! #ifdef FEAT_MBYTE
+! if (from >= 256)
+! langmap_set_entry(from, to);
+! else
+! #endif
+! langmap_mapchar[from & 255] = to;
+
+ /* Advance to next pair */
+ mb_ptr_adv(p);
+*** ../vim-7.2.108/src/proto/option.pro Sat May 5 19:28:04 2007
+--- src/proto/option.pro Wed Feb 11 21:21:05 2009
+***************
+*** 44,49 ****
+--- 44,50 ----
+ void set_context_in_set_cmd __ARGS((expand_T *xp, char_u *arg, int opt_flags));
+ int ExpandSettings __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+ int ExpandOldSetting __ARGS((int *num_file, char_u ***file));
++ int langmap_adjust_mb __ARGS((int c));
+ int has_format_option __ARGS((int x));
+ int shortmess __ARGS((int x));
+ void vimrc_found __ARGS((char_u *fname, char_u *envname));
+*** ../vim-7.2.108/src/window.c Fri Nov 28 21:26:50 2008
+--- src/window.c Sat Feb 21 19:55:25 2009
+***************
+*** 594,602 ****
+ ++allow_keys; /* no mapping for xchar, but allow key codes */
+ if (xchar == NUL)
+ xchar = plain_vgetc();
+- #ifdef FEAT_LANGMAP
+ LANGMAP_ADJUST(xchar, TRUE);
+- #endif
+ --no_mapping;
+ --allow_keys;
+ #ifdef FEAT_CMDL_INFO
+--- 594,600 ----
+*** ../vim-7.2.108/src/version.c Wed Feb 11 22:47:32 2009
+--- src/version.c Sat Feb 21 19:34:28 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 109,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+99. The hum of a cooling fan and the click of keys is comforting to you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///