home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / old / 5.6.061 < prev    next >
Encoding:
Internet Message Format  |  2000-04-06  |  17.7 KB

  1. To: vim-dev@vim.org
  2. Subject: Patch 5.6.061
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. ------------
  6.  
  7. Patch 5.6.061
  8. Problem:    When xterm sends 8-bit controls, recognizing the version response
  9.         doesn't work.
  10.         When using CSI instead of <Esc>[ for the termcap color codes,
  11.         using 16 colors doesn't work. (Neil Bird)
  12. Solution:   Also accept CSI in place of <Esc>[ for the version string.
  13.         Also check for CSI when handling colors 8-15 in term_color().
  14.         Use CSI for builtin xterm termcap entries when 'term' contains
  15.         "8bit".
  16. Files:        runtime/doc/term.txt, src/ex_cmds.c, src/option.c, src/term.c,
  17.         src/os_unix.c, src/proto/option.pro, src/proto/term.pro
  18.  
  19.  
  20. *** ../vim-5.6.60/runtime/doc/term.txt    Sun Jan 16 14:13:00 2000
  21. --- runtime/doc/term.txt    Fri Apr  7 09:50:58 2000
  22. ***************
  23. *** 1,4 ****
  24. ! *term.txt*      For Vim version 5.6.  Last change: 1999 Oct 01
  25.   
  26.   
  27.             VIM REFERENCE MANUAL    by Bram Moolenaar
  28. --- 1,4 ----
  29. ! *term.txt*      For Vim version 5.6.  Last change: 2000 Apr 07
  30.   
  31.   
  32.             VIM REFERENCE MANUAL    by Bram Moolenaar
  33. ***************
  34. *** 180,185 ****
  35. --- 180,196 ----
  36.   *VT100.Translations:        #override \n\
  37.           <Key>Home: string("0x1b") string("[7~") \n\
  38.           <Key>End: string("0x1b") string("[8~")
  39. +                             *xterm-8bit*
  40. + Xterm can be run in a mode where it uses 8bit escape sequences.  The CSI ode
  41. + is used instead of <Esc>[.  The advantage is that an <Esc> can quickly be
  42. + recognized in Insert mode, because it can't be confused with the start of a
  43. + special key.
  44. + For the builtin termcap entries, Vim checks if the 'term' option contains
  45. + "8bit" anywhere.  It then uses 8-bit characters for the termcap entries, the
  46. + mouse and a few other things.  You would normally set $TERM in your shell to
  47. + "xterm-8bit" and Vim picks this up and adjusts to the 8-bit setting
  48. + automatically.
  49.   
  50.   ==============================================================================
  51.   2. Terminal options                    *terminal-options*
  52. *** ../vim-5.6.60/src/ex_cmds.c    Tue Apr  4 20:49:34 2000
  53. --- src/ex_cmds.c    Wed Apr  5 20:11:52 2000
  54. ***************
  55. *** 1791,1797 ****
  56.   
  57.       p = find_termcode((char_u *)"kb");
  58.       add_termcode((char_u *)"kD", p != NULL && *p == 0x7f ?
  59. !                      (char_u *)"\010" : (char_u *)"\177");
  60.   }
  61.   
  62.       void
  63. --- 1791,1797 ----
  64.   
  65.       p = find_termcode((char_u *)"kb");
  66.       add_termcode((char_u *)"kD", p != NULL && *p == 0x7f ?
  67. !                   (char_u *)"\010" : (char_u *)"\177", FALSE);
  68.   }
  69.   
  70.       void
  71. *** ../vim-5.6.60/src/option.c    Fri Mar 31 19:32:38 2000
  72. --- src/option.c    Fri Apr  7 10:05:32 2000
  73. ***************
  74. *** 2588,2594 ****
  75.                   }
  76.                   nextchar = *p;
  77.                   *p = NUL;
  78. !                 add_termcode(name, arg);
  79.                   *p = nextchar;
  80.               }
  81.               if (full_screen)
  82. --- 2592,2598 ----
  83.                   }
  84.                   nextchar = *p;
  85.                   *p = NUL;
  86. !                 add_termcode(name, arg, FALSE);
  87.                   *p = nextchar;
  88.               }
  89.               if (full_screen)
  90. ***************
  91. *** 2875,2880 ****
  92. --- 2879,2902 ----
  93.   {
  94.       if (p != empty_option)
  95.       vim_free(p);
  96. + }
  97. + /*
  98. +  * Mark a terminal option as allocated, found by a pointer into term_strings[].
  99. +  */
  100. +     void
  101. + set_term_option_alloced(p)
  102. +     char_u **p;
  103. + {
  104. +     int        opt_idx;
  105. +     for (opt_idx = 1; options[opt_idx].fullname != NULL; opt_idx++)
  106. +     if (options[opt_idx].var == (char_u *)p)
  107. +     {
  108. +         options[opt_idx].flags |= P_ALLOCED;
  109. +         return;
  110. +     }
  111. +     return; /* cannot happen: didn't find it! */
  112.   }
  113.   
  114.   /*
  115. *** ../vim-5.6.60/src/term.c    Fri Mar 31 14:23:13 2000
  116. --- src/term.c    Fri Apr  7 10:05:41 2000
  117. ***************
  118. *** 79,85 ****
  119.       || (defined(USE_MOUSE) && (!defined(UNIX) || defined(XTERM_MOUSE)))
  120.   static int get_bytes_from_buf __ARGS((char_u *, char_u *, int));
  121.   #endif
  122. ! static int term_is_builtin __ARGS((char_u *));
  123.   
  124.   #ifdef HAVE_TGETENT
  125.   static char_u *tgetent_error __ARGS((char_u *, char_u *));
  126. --- 79,86 ----
  127.       || (defined(USE_MOUSE) && (!defined(UNIX) || defined(XTERM_MOUSE)))
  128.   static int get_bytes_from_buf __ARGS((char_u *, char_u *, int));
  129.   #endif
  130. ! static int term_is_builtin __ARGS((char_u *name));
  131. ! static int term_7to8bit __ARGS((char_u *p));
  132.   
  133.   #ifdef HAVE_TGETENT
  134.   static char_u *tgetent_error __ARGS((char_u *, char_u *));
  135. ***************
  136. *** 1331,1352 ****
  137.   {
  138.       struct builtin_term        *p;
  139.       char_u            name[2];
  140.   
  141.       p = find_builtin_term(term);
  142.       for (++p; p->bt_entry != (int)KS_NAME && p->bt_entry != BT_EXTRA_KEYS; ++p)
  143.       {
  144.       if ((int)p->bt_entry < 0x100)    /* KS_xx entry */
  145.       {
  146. !         if (term_strings[p->bt_entry] == NULL ||
  147. !                     term_strings[p->bt_entry] == empty_option)
  148. !         term_strings[p->bt_entry] = (char_u *)p->bt_string;
  149.       }
  150.       else
  151.       {
  152.           name[0] = KEY2TERMCAP0((int)p->bt_entry);
  153.           name[1] = KEY2TERMCAP1((int)p->bt_entry);
  154.           if (find_termcode(name) == NULL)
  155. !         add_termcode(name, (char_u *)p->bt_string);
  156.       }
  157.       }
  158.   }
  159. --- 1332,1378 ----
  160.   {
  161.       struct builtin_term        *p;
  162.       char_u            name[2];
  163. +     int                term_8bit;
  164.   
  165.       p = find_builtin_term(term);
  166. +     term_8bit = term_is_8bit(term);
  167.       for (++p; p->bt_entry != (int)KS_NAME && p->bt_entry != BT_EXTRA_KEYS; ++p)
  168.       {
  169.       if ((int)p->bt_entry < 0x100)    /* KS_xx entry */
  170.       {
  171. !         /* Only set the value if it wasn't set yet. */
  172. !         if (term_strings[p->bt_entry] == NULL
  173. !                  || term_strings[p->bt_entry] == empty_option)
  174. !         {
  175. !         /* 8bit terminal: use CSI instead of <Esc>[ */
  176. !         if (term_8bit && term_7to8bit(p->bt_string) != 0)
  177. !         {
  178. !             char_u  *s, *t;
  179. !             s = vim_strsave(p->bt_string);
  180. !             if (s != NULL)
  181. !             {
  182. !             for (t = s; *t; ++t)
  183. !                 if (term_7to8bit(t))
  184. !                 {
  185. !                 *t = term_7to8bit(t);
  186. !                 STRCPY(t + 1, t + 2);
  187. !                 }
  188. !             term_strings[p->bt_entry] = s;
  189. !             set_term_option_alloced(&term_strings[p->bt_entry]);
  190. !             }
  191. !         }
  192. !         else
  193. !             term_strings[p->bt_entry] = (char_u *)p->bt_string;
  194. !         }
  195.       }
  196.       else
  197.       {
  198.           name[0] = KEY2TERMCAP0((int)p->bt_entry);
  199.           name[1] = KEY2TERMCAP1((int)p->bt_entry);
  200.           if (find_termcode(name) == NULL)
  201. !         add_termcode(name, (char_u *)p->bt_string, term_8bit);
  202.       }
  203.       }
  204.   }
  205. ***************
  206. *** 1477,1483 ****
  207.           {
  208.               if (find_termcode((char_u *)key_names[i]) == NULL)
  209.               add_termcode((char_u *)key_names[i],
  210. !                           TGETSTR(key_names[i], &tp));
  211.           }
  212.   
  213.               /* if cursor-left == backspace, ignore it (televideo 925) */
  214. --- 1503,1509 ----
  215.           {
  216.               if (find_termcode((char_u *)key_names[i]) == NULL)
  217.               add_termcode((char_u *)key_names[i],
  218. !                        TGETSTR(key_names[i], &tp), FALSE);
  219.           }
  220.   
  221.               /* if cursor-left == backspace, ignore it (televideo 925) */
  222. ***************
  223. *** 1485,1491 ****
  224.           {
  225.               p = TGETSTR("kl", &tp);
  226.               if (p != NULL && *p != Ctrl('H'))
  227. !             add_termcode((char_u *)"kl", p);
  228.           }
  229.   
  230.           if (height == 0)
  231. --- 1511,1517 ----
  232.           {
  233.               p = TGETSTR("kl", &tp);
  234.               if (p != NULL && *p != Ctrl('H'))
  235. !             add_termcode((char_u *)"kl", p, FALSE);
  236.           }
  237.   
  238.           if (height == 0)
  239. ***************
  240. *** 1678,1687 ****
  241.       bs_p = find_termcode((char_u *)"kb");
  242.       del_p = find_termcode((char_u *)"kD");
  243.       if (bs_p == NULL || *bs_p == NUL)
  244. !         add_termcode((char_u *)"kb", (bs_p = (char_u *)"\010"));
  245.       if ((del_p == NULL || *del_p == NUL) &&
  246.                           (bs_p == NULL || *bs_p != '\177'))
  247. !         add_termcode((char_u *)"kD", (char_u *)"\177");
  248.       }
  249.   
  250.   #ifdef USE_MOUSE
  251. --- 1704,1713 ----
  252.       bs_p = find_termcode((char_u *)"kb");
  253.       del_p = find_termcode((char_u *)"kD");
  254.       if (bs_p == NULL || *bs_p == NUL)
  255. !         add_termcode((char_u *)"kb", (bs_p = (char_u *)"\010"), FALSE);
  256.       if ((del_p == NULL || *del_p == NUL) &&
  257.                           (bs_p == NULL || *bs_p != '\177'))
  258. !         add_termcode((char_u *)"kD", (char_u *)"\177", FALSE);
  259.       }
  260.   
  261.   #ifdef USE_MOUSE
  262. ***************
  263. *** 1734,1740 ****
  264.   
  265.       name[0] = (int)KS_EXTRA;
  266.       name[1] = (int)KE_SNIFF;
  267. !     add_termcode(name, (char_u *)"\233sniff");
  268.       }
  269.   #endif
  270.   
  271. --- 1760,1766 ----
  272.   
  273.       name[0] = (int)KS_EXTRA;
  274.       name[1] = (int)KE_SNIFF;
  275. !     add_termcode(name, (char_u *)"\233sniff", FALSE);
  276.       }
  277.   #endif
  278.   
  279. ***************
  280. *** 1851,1857 ****
  281.   
  282.       name[0] = n;
  283.       name[1] = K_FILLER;
  284. !     add_termcode(name, s);
  285.   #  ifdef NETTERM_MOUSE
  286.       if (n == KS_NETTERM_MOUSE)
  287.       has_mouse_termcode |= HMT_NETTERM;
  288. --- 1877,1883 ----
  289.   
  290.       name[0] = n;
  291.       name[1] = K_FILLER;
  292. !     add_termcode(name, s, FALSE);
  293.   #  ifdef NETTERM_MOUSE
  294.       if (n == KS_NETTERM_MOUSE)
  295.       has_mouse_termcode |= HMT_NETTERM;
  296. ***************
  297. *** 2032,2038 ****
  298.           {
  299.               if ((int)termp->bt_entry == key)
  300.               {
  301. !             add_termcode(name, (char_u *)termp->bt_string);
  302.               return OK;
  303.               }
  304.               ++termp;
  305. --- 2058,2065 ----
  306.           {
  307.               if ((int)termp->bt_entry == key)
  308.               {
  309. !             add_termcode(name, (char_u *)termp->bt_string,
  310. !                               term_is_8bit(term));
  311.               return OK;
  312.               }
  313.               ++termp;
  314. ***************
  315. *** 2051,2057 ****
  316.           string = TGETSTR((char *)name, &tp);
  317.           if (string != NULL && *string != NUL)
  318.           {
  319. !             add_termcode(name, string);
  320.               return OK;
  321.           }
  322.           }
  323. --- 2078,2084 ----
  324.           string = TGETSTR((char *)name, &tp);
  325.           if (string != NULL && *string != NUL)
  326.           {
  327. !             add_termcode(name, string, FALSE);
  328.               return OK;
  329.           }
  330.           }
  331. ***************
  332. *** 2078,2083 ****
  333. --- 2105,2144 ----
  334.       return (STRNCMP(name, "builtin_", (size_t)8) == 0);
  335.   }
  336.   
  337. + /*
  338. +  * Return TRUE if terminal "name" uses CSI instead of <Esc>[.
  339. +  * Assume that the terminal is using 8-bit controls when the name contains
  340. +  * "8bit", like in "xterm-8bit".
  341. +  */
  342. +     int
  343. + term_is_8bit(name)
  344. +     char_u  *name;
  345. + {
  346. +     return (strstr((char *)name, "8bit") != NULL);
  347. + }
  348. + /*
  349. +  * Translate terminal control chars from 7-bit to 8-bit:
  350. +  * <Esc>[ -> CSI
  351. +  * <Esc>] -> <M-C-]>
  352. +  * <Esc>O -> <M-C-O>
  353. +  */
  354. +     static int
  355. + term_7to8bit(p)
  356. +     char_u  *p;
  357. + {
  358. +     if (*p == ESC)
  359. +     {
  360. +     if (p[1] == '[')
  361. +         return CSI;
  362. +     if (p[1] == ']')
  363. +         return 0x9d;
  364. +     if (p[1] == 'O')
  365. +         return 0x8f;
  366. +     }
  367. +     return 0;
  368. + }
  369.   #ifdef USE_GUI
  370.       int
  371.   term_is_gui(name)
  372. ***************
  373. *** 2431,2457 ****
  374.       char_u  *s;
  375.       int        n;
  376.   {
  377.       /* Special handling of 16 colors, because termcap can't handle it */
  378.       /* Also accept "\e[3%dm" for TERMINFO, it is sometimes used */
  379.       if (n > 7 && atoi((char *)T_CCO) == 16
  380. !           && s[0] == ESC && s[1] == '[' && s[2] != NUL
  381. !           && (STRCMP(s + 3, "%p1%dm") == 0 || STRCMP(s + 3, "%dm") == 0))
  382.       {
  383. !     if (s[2] == '3')    /* foreground */
  384.       {
  385.   #ifdef TERMINFO
  386. !         OUT_STR(tgoto("\033[9%p1%dm", 0, n - 8));
  387.   #else
  388. !         OUT_STR(tgoto("\033[9%dm", 0, n - 8));
  389.   #endif
  390.           return;
  391.       }
  392. !     if (s[2] == '4')    /* background */
  393.       {
  394.   #ifdef TERMINFO
  395. !         OUT_STR(tgoto("\033[10%p1%dm", 0, n - 8));
  396.   #else
  397. !         OUT_STR(tgoto("\033[10%dm", 0, n - 8));
  398.   #endif
  399.           return;
  400.       }
  401. --- 2492,2526 ----
  402.       char_u  *s;
  403.       int        n;
  404.   {
  405. +     int i = 2;    /* index in s[] just after <Esc>[ or CSI */
  406.       /* Special handling of 16 colors, because termcap can't handle it */
  407.       /* Also accept "\e[3%dm" for TERMINFO, it is sometimes used */
  408. +     /* Also accept CSI instead of <Esc>[ */
  409.       if (n > 7 && atoi((char *)T_CCO) == 16
  410. !           && ((s[0] == ESC && s[1] == '[') || (s[0] == CSI && (i = 1)))
  411. !           && s[i] != NUL
  412. !           && (STRCMP(s + i + 1, "%p1%dm") == 0
  413. !           || STRCMP(s + i + 1, "%dm") == 0))
  414.       {
  415. !     if (s[i] == '3')    /* foreground */
  416.       {
  417.   #ifdef TERMINFO
  418. !         OUT_STR(tgoto(i == 2 ? "\033[9%p1%dm"
  419. !                            : "\233\071%p1%dm", 0, n - 8));
  420.   #else
  421. !         OUT_STR(tgoto(i == 2 ? "\033[9%dm" : "\233\071%dm", 0, n - 8));
  422.   #endif
  423.           return;
  424.       }
  425. !     if (s[i] == '4')    /* background */
  426.       {
  427.   #ifdef TERMINFO
  428. !         OUT_STR(tgoto(i == 2 ? "\033[10%p1%dm"
  429. !                        : "\233\061\060%p1%dm", 0, n - 8));
  430.   #else
  431. !         OUT_STR(tgoto(i == 2 ? "\033[10%dm"
  432. !                           : "\233\061\060%dm", 0, n - 8));
  433.   #endif
  434.           return;
  435.       }
  436. ***************
  437. *** 3061,3069 ****
  438.    * The list is kept alphabetical for ":set termcap"
  439.    */
  440.       void
  441. ! add_termcode(name, string)
  442. !     char_u  *name;
  443. !     char_u  *string;
  444.   {
  445.       struct termcode *new_tc;
  446.       int            i, j;
  447. --- 3130,3139 ----
  448.    * The list is kept alphabetical for ":set termcap"
  449.    */
  450.       void
  451. ! add_termcode(name, string, use_8bit)
  452. !     char_u    *name;
  453. !     char_u    *string;
  454. !     int        use_8bit;    /* replace 7-bit control by 8-bit one */
  455.   {
  456.       struct termcode *new_tc;
  457.       int            i, j;
  458. ***************
  459. *** 3079,3084 ****
  460. --- 3149,3161 ----
  461.       if (s == NULL)
  462.       return;
  463.   
  464. +     /* Change leading <Esc>[ to CSI, change <Esc>O to <M-O>. */
  465. +     if (use_8bit && term_7to8bit(string) != 0)
  466. +     {
  467. +     mch_memmove(s, s + 1, STRLEN(s));
  468. +     s[0] = term_7to8bit(string);
  469. +     }
  470.       need_gather = TRUE;        /* need to fill termleader[] */
  471.   
  472.       /*
  473. ***************
  474. *** 3369,3390 ****
  475.       {
  476.           /* Check for xterm version string: "<Esc>[><x>;<vers>;<y>c".  Also
  477.            * eat other possible responses to t_RV, rxvt returns
  478. !          * "<Esc>[?1;2c" */
  479. !         if (tp[0] == ESC && tp[1] == '[' && len >= 3 && *T_CRV != NUL)
  480.           {
  481.           j = 0;
  482.           extra = 0;
  483. !         for (i = 3; i < len && (isdigit(tp[i]) || tp[i] == ';'); ++i)
  484.               if (tp[i] == ';' && ++j == 1)
  485.               extra = atoi((char *)tp + i + 1);
  486.           if (i == len)
  487.               return -1;        /* not enough characters */
  488.   
  489.           /* eat it when at least one digit and ending in 'c' */
  490. !         if (i > 3 && tp[i] == 'c')
  491.           {
  492.               /* If xterm version is >= 95, we can use mouse dragging */
  493. !             if (tp[2] == '>' && j == 2 && extra >= 95)
  494.               set_option_value((char_u *)"ttymouse", 0L,
  495.                                 (char_u *)"xterm2");
  496.               key_name[0] = (int)KS_EXTRA;
  497. --- 3446,3469 ----
  498.       {
  499.           /* Check for xterm version string: "<Esc>[><x>;<vers>;<y>c".  Also
  500.            * eat other possible responses to t_RV, rxvt returns
  501. !          * "<Esc>[?1;2c".  Also accept CSI instead of <Esc>[. */
  502. !         if (*T_CRV != NUL && ((tp[0] == ESC && tp[1] == '[' && len >= 3)
  503. !                            || (tp[0] == CSI && len >= 2)))
  504.           {
  505.           j = 0;
  506.           extra = 0;
  507. !         for (i = 2 + (tp[0] != CSI);
  508. !                  i < len && (isdigit(tp[i]) || tp[i] == ';'); ++i)
  509.               if (tp[i] == ';' && ++j == 1)
  510.               extra = atoi((char *)tp + i + 1);
  511.           if (i == len)
  512.               return -1;        /* not enough characters */
  513.   
  514.           /* eat it when at least one digit and ending in 'c' */
  515. !         if (i > 2 + (tp[0] != CSI) && tp[i] == 'c')
  516.           {
  517.               /* If xterm version is >= 95, we can use mouse dragging */
  518. !             if (tp[1 + (tp[0] != CSI)] == '>' && j == 2 && extra >= 95)
  519.               set_option_value((char_u *)"ttymouse", 0L,
  520.                                 (char_u *)"xterm2");
  521.               key_name[0] = (int)KS_EXTRA;
  522. *** ../vim-5.6.60/src/os_unix.c    Thu Mar 30 16:58:04 2000
  523. --- src/os_unix.c    Thu Apr  6 21:20:53 2000
  524. ***************
  525. *** 1857,1863 ****
  526.       intr_char = keys.sg_kill;
  527.   #endif
  528.       buf[1] = NUL;
  529. !     add_termcode((char_u *)"kb", buf);
  530.   
  531.       /*
  532.        * If <BS> and <DEL> are now the same, redefine <DEL>.
  533. --- 1857,1863 ----
  534.       intr_char = keys.sg_kill;
  535.   #endif
  536.       buf[1] = NUL;
  537. !     add_termcode((char_u *)"kb", buf, FALSE);
  538.   
  539.       /*
  540.        * If <BS> and <DEL> are now the same, redefine <DEL>.
  541. ***************
  542. *** 1922,1928 ****
  543.   # ifdef XTERM_MOUSE
  544.       if (use_xterm_mouse())
  545.       {
  546. !     set_mouse_termcode(KS_MOUSE, (char_u *)"\033[M");
  547.       if (*p_mouse != NUL)
  548.       {
  549.           /* force mouse off and maybe on to send possibly new mouse
  550. --- 1922,1929 ----
  551.   # ifdef XTERM_MOUSE
  552.       if (use_xterm_mouse())
  553.       {
  554. !     set_mouse_termcode(KS_MOUSE, (char_u *)(term_is_8bit(T_NAME)
  555. !                                ? "\233M" : "\033[M"));
  556.       if (*p_mouse != NUL)
  557.       {
  558.           /* force mouse off and maybe on to send possibly new mouse
  559. *** ../vim-5.6.60/src/proto/option.pro    Sun Jan 16 14:22:48 2000
  560. --- src/proto/option.pro    Fri Apr  7 10:05:40 2000
  561. ***************
  562. *** 13,18 ****
  563. --- 13,19 ----
  564.   void check_options __ARGS((void));
  565.   void check_buf_options __ARGS((BUF *buf));
  566.   void free_string_option __ARGS((char_u *p));
  567. + void set_term_option_alloced __ARGS((char_u **p));
  568.   void set_string_option_direct __ARGS((char_u *name, int opt_idx, char_u *val, int dofree));
  569.   char_u *check_stl_option __ARGS((char_u *s));
  570.   int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval));
  571. *** ../vim-5.6.60/src/proto/term.pro    Sun Jan 16 14:23:00 2000
  572. --- src/proto/term.pro    Thu Apr  6 21:49:27 2000
  573. ***************
  574. *** 4,9 ****
  575. --- 4,10 ----
  576.   void del_mouse_termcode __ARGS((int n));
  577.   void getlinecol __ARGS((void));
  578.   int add_termcap_entry __ARGS((char_u *name, int force));
  579. + int term_is_8bit __ARGS((char_u *name));
  580.   int term_is_gui __ARGS((char_u *name));
  581.   char_u *tltoa __ARGS((unsigned long i));
  582.   void termcapinit __ARGS((char_u *name));
  583. ***************
  584. *** 39,45 ****
  585.   void scroll_region_set __ARGS((WIN *wp, int off));
  586.   void scroll_region_reset __ARGS((void));
  587.   void clear_termcodes __ARGS((void));
  588. ! void add_termcode __ARGS((char_u *name, char_u *string));
  589.   char_u *find_termcode __ARGS((char_u *name));
  590.   char_u *get_termcode __ARGS((int i));
  591.   void del_termcode __ARGS((char_u *name));
  592. --- 40,46 ----
  593.   void scroll_region_set __ARGS((WIN *wp, int off));
  594.   void scroll_region_reset __ARGS((void));
  595.   void clear_termcodes __ARGS((void));
  596. ! void add_termcode __ARGS((char_u *name, char_u *string, int use_8bit));
  597.   char_u *find_termcode __ARGS((char_u *name));
  598.   char_u *get_termcode __ARGS((int i));
  599.   void del_termcode __ARGS((char_u *name));
  600. *** ../vim-5.6.60/src/version.c    Wed Apr  5 16:30:51 2000
  601. --- src/version.c    Fri Apr  7 09:51:49 2000
  602. ***************
  603. *** 420,421 ****
  604. --- 420,423 ----
  605.   {   /* Add new patch number below this line */
  606. + /**/
  607. +     61,
  608.   /**/
  609.  
  610. -- 
  611. I once paid $12 to peer at the box that held King Tutankhamen's little
  612. bandage-covered midget corpse at the De Young Museum in San Francisco.  I
  613. remember thinking how pleased he'd be about the way things turned out in his
  614. afterlife.
  615.                 (Scott Adams - The Dilbert principle)
  616.  
  617. /-/-- Bram Moolenaar --- Bram@moolenaar.net --- http://www.moolenaar.net --\-\
  618. \-\-- Vim: http://www.vim.org ---- ICCF Holland: http://www.vim.org/iccf --/-/
  619.