Patch 7.4.1770
Problem:    Cannot use true color in the terminal.
Solution:   Add the 'guicolors' option. (Nikolai Pavlov)
Files:      runtime/doc/options.txt, runtime/doc/term.txt,
            runtime/doc/various.txt, src/auto/configure, src/config.h.in,
            src/configure.in, src/eval.c, src/globals.h, src/hardcopy.c,
            src/option.c, src/option.h, src/proto/term.pro, src/screen.c,
            src/structs.h, src/syntax.c, src/term.c, src/term.h,
            src/version.c, src/vim.h


*** ../vim-7.4.1769/runtime/doc/options.txt     2016-04-03 22:07:35.262508752 
+0200
--- runtime/doc/options.txt     2016-04-21 20:44:51.112092398 +0200
***************
*** 3470,3475 ****
--- 3477,3494 ----
        This option cannot be set from a |modeline| or in the |sandbox|, for
        security reasons.
  
+                                               *'guicolors'* *'gcol'*
+ 'guicolors' 'gcol'    boolean (default off)
+                       global
+                       {not in Vi}
+                       {not available when compiled without the 
+                       |+termtruecolor| feature}
+       When on, uses |highlight-guifg| and |highlight-guibg| attributes in 
+       the terminal (thus using 24-bit color). Requires a ISO-8613-3
+       compatible terminal.
+       If setting this option does not work (produces a colorless UI) 
+       reading |xterm-true-color| might help.
+ 
                        *'guicursor'* *'gcr'* *E545* *E546* *E548* *E549*
  'guicursor' 'gcr'     string  (default "n-v-c:block-Cursor/lCursor,
                                        ve:ver35-Cursor,
*** ../vim-7.4.1769/runtime/doc/term.txt        2015-03-31 18:30:09.135370959 
+0200
--- runtime/doc/term.txt        2016-04-21 20:47:54.498251130 +0200
***************
*** 301,306 ****
--- 301,312 ----
                |xterm-8bit| |v:termresponse| |'ttymouse'| |xterm-codes|
        t_u7    request cursor position (for xterm)             *t_u7* *'t_u7'*
                see |'ambiwidth'|
+       t_RB    request terminal background color               *t_RB* *'t_RB'*
+               see |'ambiwidth'|
+       t_8f    set foreground color (R, G, B)                  *t_8f* *'t_8f'*
+               |xterm-true-color|
+       t_8b    set background color (R, G, B)                  *t_8b* *'t_8b'*
+               |xterm-true-color|
  
  KEY CODES
  Note: Use the <> form if possible
***************
*** 415,421 ****
  produce different codes, depending on the mode it is in (8-bit, VT102,
  VT220, etc.).  The result is that codes like <xF1> are no longer needed.
  Note: This is only done on startup.  If the xterm options are changed after
! Vim has started, the escape sequences may not be recognized any more.
  
                                                        *xterm-resize*
  Window resizing with xterm only works if the allowWindowOps resource is
--- 421,443 ----
  produce different codes, depending on the mode it is in (8-bit, VT102,
  VT220, etc.).  The result is that codes like <xF1> are no longer needed.
  Note: This is only done on startup.  If the xterm options are changed after
! Vim has started, the escape sequences may not be recognized anymore.
! 
!                                                       *xterm-true-color*
! Vim supports using true colors in the terminal (taken from |highlight-guifg|
! and |highlight-guibg|), given that terminal supports this. To make this 
! work, 'guicolors' option needs to be set.
! 
! Sometimes setting 'guicolors' is not enough and one has to set the |t_8f| and
! |t_8b| options explicitly. Default values of these options are
! `^[[38;2;%lu;%lu;%lum` and `^[[48;2;%lu;%lu;%lum` (replace `^[` with real
! escape) respectively, but it is only set when `$TERM` is `xterm`. Some
! terminals accept the same sequences, but with all semicolons replaced by
! colons (this is actually more compatible, but less widely supported). These
! options contain printf strings, with |printf()| (actually, its C equivalent
! hence `l` modifier) invoked with the t_ option value and three unsigned long
! integers that may have any value between 0 and 255 (inclusive) representing
! red, green and blue colors respectively.
  
                                                        *xterm-resize*
  Window resizing with xterm only works if the allowWindowOps resource is
*** ../vim-7.4.1769/runtime/doc/various.txt     2014-08-06 14:52:05.039236174 
+0200
--- runtime/doc/various.txt     2016-04-21 20:10:04.017297905 +0200
***************
*** 291,296 ****
--- 303,309 ----
                        in the normal, big and huge versions of Vim.
  
                                                        *+feature-list*
+    *+acl*             |ACL| support included
     *+ARP*             Amiga only: ARP support included
  B  *+arabic*          |Arabic| language support
  N  *+autocmd*         |:autocmd|, automatic commands
***************
*** 302,307 ****
--- 315,321 ----
  B  *++builtin_terms*  maximal terminals builtin |builtin-terms|
  N  *+byte_offset*     support for 'o' flag in 'statusline' option, "go"
                        and ":goto" commands.
+ m  *+channel*         inter process communication |channel|
  N  *+cindent*         |'cindent'|, C indenting
  N  *+clientserver*    Unix and Win32: Remote invocation |clientserver|
     *+clipboard*               |clipboard| support
***************
*** 324,331 ****
     *+dnd*             Support for DnD into the "~ register |quote_~|.
  B  *+emacs_tags*      |emacs-tags| files
  N  *+eval*            expression evaluation |eval.txt|
! N  *+ex_extra*                Vim's extra Ex commands: |:center|, |:left|,
!                       |:normal|, |:retab| and |:right|
  N  *+extra_search*    |'hlsearch'| and |'incsearch'| options.
  B  *+farsi*           |farsi| language
  N  *+file_in_path*    |gf|, |CTRL-W_f| and |<cfile>|
--- 338,344 ----
     *+dnd*             Support for DnD into the "~ register |quote_~|.
  B  *+emacs_tags*      |emacs-tags| files
  N  *+eval*            expression evaluation |eval.txt|
! N  *+ex_extra*                always on now, used to be for Vim's extra Ex 
commands
  N  *+extra_search*    |'hlsearch'| and |'incsearch'| options.
  B  *+farsi*           |farsi| language
  N  *+file_in_path*    |gf|, |CTRL-W_f| and |<cfile>|
***************
*** 345,350 ****
--- 358,364 ----
     *+iconv*           Compiled with the |iconv()| function
     *+iconv/dyn*               Likewise |iconv-dynamic| |/dyn|
  N  *+insert_expand*   |insert_expand| Insert mode completion
+ m  *+job*             starting and stopping jobs |job|
  N  *+jumplist*                |jumplist|
  B  *+keymap*          |'keymap'|
  B  *+langmap*         |'langmap'|
***************
*** 363,368 ****
--- 377,383 ----
  N  *+mouseshape*      |'mouseshape'|
  B  *+mouse_dec*               Unix only: Dec terminal mouse handling 
|dec-mouse|
  N  *+mouse_gpm*               Unix only: Linux console mouse handling 
|gpm-mouse|
+ N  *+mouse_jsbterm*   JSB mouse handling |jsbterm-mouse|
  B  *+mouse_netterm*   Unix only: netterm mouse handling |netterm-mouse|
  N  *+mouse_pterm*     QNX only: pterm mouse handling |qnx-terminal|
  N  *+mouse_sysmouse*  Unix only: *BSD console mouse handling |sysmouse|
***************
*** 396,402 ****
  N  *+scrollbind*      |'scrollbind'|
  B  *+signs*           |:sign|
  N  *+smartindent*     |'smartindent'|
- m  *+sniff*           SniFF interface |sniff|
  N  *+startuptime*     |--startuptime| argument
  N  *+statusline*      Options 'statusline', 'rulerformat' and special
                        formats of 'titlestring' and 'iconstring'
--- 411,416 ----
***************
*** 410,424 ****
  m  *+tcl/dyn*         Tcl interface |tcl-dynamic| |/dyn|
     *+terminfo*                uses |terminfo| instead of termcap
  N  *+termresponse*    support for |t_RV| and |v:termresponse|
  N  *+textobjects*     |text-objects| selection
     *+tgetent*         non-Unix only: able to use external termcap
  N  *+title*           Setting the window 'title' and 'icon'
  N  *+toolbar*         |gui-toolbar|
  N  *+user_commands*   User-defined commands. |user-commands|
  N  *+viminfo*         |'viminfo'|
  N  *+vertsplit*               Vertically split windows |:vsplit|
  N  *+virtualedit*     |'virtualedit'|
! S  *+visual*          Visual mode |Visual-mode|
  N  *+visualextra*     extra Visual mode commands |blockwise-operators|
  N  *+vreplace*                |gR| and |gr|
  N  *+wildignore*      |'wildignore'|
--- 424,440 ----
  m  *+tcl/dyn*         Tcl interface |tcl-dynamic| |/dyn|
     *+terminfo*                uses |terminfo| instead of termcap
  N  *+termresponse*    support for |t_RV| and |v:termresponse|
+ m  *+termtruecolor*   24-bit color in xterm-compatible terminals support
  N  *+textobjects*     |text-objects| selection
     *+tgetent*         non-Unix only: able to use external termcap
+ N  *+timers*          the |timer_start()| function
  N  *+title*           Setting the window 'title' and 'icon'
  N  *+toolbar*         |gui-toolbar|
  N  *+user_commands*   User-defined commands. |user-commands|
  N  *+viminfo*         |'viminfo'|
  N  *+vertsplit*               Vertically split windows |:vsplit|
  N  *+virtualedit*     |'virtualedit'|
! S  *+visual*          Visual mode |Visual-mode| Always enabled since 7.4.200.
  N  *+visualextra*     extra Visual mode commands |blockwise-operators|
  N  *+vreplace*                |gR| and |gr|
  N  *+wildignore*      |'wildignore'|
*** ../vim-7.4.1769/src/auto/configure  2016-04-21 18:20:03.662235811 +0200
--- src/auto/configure  2016-04-21 20:31:50.435951237 +0200
***************
*** 810,815 ****
--- 810,816 ----
  enable_rubyinterp
  with_ruby_command
  enable_cscope
+ enable_termtruecolor
  enable_workshop
  enable_netbeans
  enable_channel
***************
*** 1476,1481 ****
--- 1477,1483 ----
    --enable-tclinterp=OPTS      Include Tcl interpreter. default=no 
OPTS=no/yes/dynamic
    --enable-rubyinterp=OPTS     Include Ruby interpreter.  default=no 
OPTS=no/yes/dynamic
    --enable-cscope         Include cscope interface.
+   --enable-termtruecolor      Include support for 24-bit colors in ISO-8613-3 
compatible terminals
    --enable-workshop       Include Sun Visual Workshop support.
    --disable-netbeans      Disable NetBeans integration support.
    --disable-channel      Disable process communication support.
***************
*** 7216,7221 ****
--- 7218,7239 ----
  
  fi
  
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-termtruecolor 
argument" >&5
+ $as_echo_n "checking --enable-termtruecolor argument... " >&6; }
+ # Check whether --enable-termtruecolor was given.
+ if test "${enable_termtruecolor+set}" = set; then :
+   enableval=$enable_termtruecolor;
+ else
+   enable_termtruecolor="no"
+ fi
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_termtruecolor" >&5
+ $as_echo "$enable_termtruecolor" >&6; }
+ if test "$enable_termtruecolor" = "yes"; then
+   $as_echo "#define FEAT_TERMTRUECOLOR 1" >>confdefs.h
+ 
+ fi
+ 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-workshop argument" 
>&5
  $as_echo_n "checking --enable-workshop argument... " >&6; }
  # Check whether --enable-workshop was given.
*** ../vim-7.4.1769/src/config.h.in     2016-03-11 22:52:00.726438199 +0100
--- src/config.h.in     2016-04-21 20:16:18.193479176 +0200
***************
*** 362,367 ****
--- 362,370 ----
  /* Define for linking via dlopen() or LoadLibrary() */
  #undef DYNAMIC_TCL
  
+ /* Define if you want 24-bit colors in ISO-8613-3 compatible terminals. */
+ #undef FEAT_TERMTRUECOLOR
+ 
  /* Define if you want to add support for ACL */
  #undef HAVE_POSIX_ACL
  #undef HAVE_SOLARIS_ZFS_ACL
*** ../vim-7.4.1769/src/configure.in    2016-04-21 18:20:03.658235853 +0200
--- src/configure.in    2016-04-21 20:10:04.025297824 +0200
***************
*** 1926,1931 ****
--- 1926,1940 ----
    AC_DEFINE(FEAT_CSCOPE)
  fi
  
+ AC_MSG_CHECKING(--enable-termtruecolor argument)
+ AC_ARG_ENABLE(termtruecolor,
+       [  --enable-termtruecolor      Include support for 24-bit colors in 
ISO-8613-3 compatible terminals], ,
+       [enable_termtruecolor="no"])
+ AC_MSG_RESULT($enable_termtruecolor)
+ if test "$enable_termtruecolor" = "yes"; then
+   AC_DEFINE(FEAT_TERMTRUECOLOR)
+ fi
+ 
  AC_MSG_CHECKING(--enable-workshop argument)
  AC_ARG_ENABLE(workshop,
        [  --enable-workshop       Include Sun Visual Workshop support.], ,
*** ../vim-7.4.1769/src/eval.c  2016-04-21 19:38:00.405291024 +0200
--- src/eval.c  2016-04-21 20:10:04.029297783 +0200
***************
*** 14044,14049 ****
--- 14044,14052 ----
  #ifdef FEAT_TERMRESPONSE
        "termresponse",
  #endif
+ #ifdef FEAT_TERMTRUECOLOR
+       "termtruecolor",
+ #endif
  #ifdef FEAT_TEXTOBJ
        "textobjects",
  #endif
*** ../vim-7.4.1769/src/globals.h       2016-04-14 16:22:01.161150961 +0200
--- src/globals.h       2016-04-21 20:10:04.029297783 +0200
***************
*** 369,374 ****
--- 369,378 ----
  EXTERN int    cterm_normal_fg_color INIT(= 0);
  EXTERN int    cterm_normal_fg_bold INIT(= 0);
  EXTERN int    cterm_normal_bg_color INIT(= 0);
+ #ifdef FEAT_TERMTRUECOLOR
+ EXTERN long_u cterm_normal_fg_gui_color INIT(= INVALCOLOR);
+ EXTERN long_u cterm_normal_bg_gui_color INIT(= INVALCOLOR);
+ #endif
  
  #ifdef FEAT_AUTOCMD
  EXTERN int    autocmd_busy INIT(= FALSE);     /* Is apply_autocmds() busy? */
*** ../vim-7.4.1769/src/hardcopy.c      2016-04-03 14:56:48.441552044 +0200
--- src/hardcopy.c      2016-04-21 20:10:04.029297783 +0200
***************
*** 164,170 ****
  
  #if (defined(FEAT_MBYTE) && defined(FEAT_POSTSCRIPT)) || defined(PROTO)
  /*
!  * Parse 'printoptions' and set the flags in "printer_opts".
   * Returns an error message or NULL;
   */
      char_u *
--- 164,170 ----
  
  #if (defined(FEAT_MBYTE) && defined(FEAT_POSTSCRIPT)) || defined(PROTO)
  /*
!  * Parse 'printmbfont' and set the flags in "mbfont_opts".
   * Returns an error message or NULL;
   */
      char_u *
***************
*** 307,314 ****
      pattr->underline = (highlight_has_attr(hl_id, HL_UNDERLINE, modec) != 
NULL);
      pattr->undercurl = (highlight_has_attr(hl_id, HL_UNDERCURL, modec) != 
NULL);
  
! # ifdef FEAT_GUI
!     if (gui.in_use)
      {
        bg_color = highlight_gui_color_rgb(hl_id, FALSE);
        if (bg_color == PRCOLOR_BLACK)
--- 307,314 ----
      pattr->underline = (highlight_has_attr(hl_id, HL_UNDERLINE, modec) != 
NULL);
      pattr->undercurl = (highlight_has_attr(hl_id, HL_UNDERCURL, modec) != 
NULL);
  
! # if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
!     if (USE_24BIT)
      {
        bg_color = highlight_gui_color_rgb(hl_id, FALSE);
        if (bg_color == PRCOLOR_BLACK)
*** ../vim-7.4.1769/src/option.c        2016-04-20 16:19:10.030987632 +0200
--- src/option.c        2016-04-21 20:18:49.531933705 +0200
***************
*** 1305,1311 ****
                            {(char_u *)NULL, (char_u *)0L}
  #endif
                            SCRIPTID_INIT},
!     {"guicursor",    "gcr",  P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
  #ifdef CURSOR_SHAPE
                            (char_u *)&p_guicursor, PV_NONE,
                            {
--- 1305,1320 ----
                            {(char_u *)NULL, (char_u *)0L}
  #endif
                            SCRIPTID_INIT},
!     {"guicolors",   "gcol", P_BOOL|P_VI_DEF|P_VIM|P_RCLR,
! #ifdef FEAT_TERMTRUECOLOR
!                           (char_u *)&p_guicolors, PV_NONE,
!                           {(char_u *)FALSE, (char_u *)FALSE}
! #else
!                           (char_u*)NULL, PV_NONE,
!                           {(char_u *)FALSE, (char_u *)FALSE}
! #endif
!                           SCRIPTID_INIT},
!     {"guicursor",    "gcr", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
  #ifdef CURSOR_SHAPE
                            (char_u *)&p_guicursor, PV_NONE,
                            {
***************
*** 3011,3016 ****
--- 3020,3027 ----
      p_term("t_xs", T_XS)
      p_term("t_ZH", T_CZH)
      p_term("t_ZR", T_CZR)
+     p_term("t_8f", T_8F)
+     p_term("t_8b", T_8B)
  
  /* terminal key codes are not in here */
  
***************
*** 8353,8358 ****
--- 8364,8380 ----
  
  #endif
  
+ #ifdef FEAT_TERMTRUECOLOR
+     /* 'guicolors' */
+     else if ((int *)varp == &p_guicolors)
+     {
+ # ifdef FEAT_GUI
+       if (!gui.in_use && !gui.starting)
+ # endif
+           highlight_gui_started();
+     }
+ #endif
+ 
      /*
       * End of handling side effects for bool options.
       */
*** ../vim-7.4.1769/src/option.h        2016-03-19 22:11:47.436674835 +0100
--- src/option.h        2016-04-21 20:10:04.033297743 +0200
***************
*** 527,532 ****
--- 527,535 ----
  EXTERN char_u *p_header;      /* 'printheader' */
  #endif
  EXTERN int    p_prompt;       /* 'prompt' */
+ #ifdef FEAT_TERMTRUECOLOR
+ EXTERN int    p_guicolors;    /* 'guicolors' */
+ #endif
  #ifdef FEAT_GUI
  EXTERN char_u *p_guifont;     /* 'guifont' */
  # ifdef FEAT_XFONTSET
*** ../vim-7.4.1769/src/proto/term.pro  2016-01-19 13:21:55.849334247 +0100
--- src/proto/term.pro  2016-04-21 20:31:37.160087046 +0200
***************
*** 1,4 ****
--- 1,7 ----
  /* term.c */
+ guicolor_T termtrue_mch_get_color(char_u *name);
+ guicolor_T termtrue_get_color(char_u *name);
+ long_u termtrue_mch_get_rgb(guicolor_T color);
  int set_termname(char_u *term);
  void set_mouse_termcode(int n, char_u *s);
  void del_mouse_termcode(int n);
***************
*** 22,27 ****
--- 25,32 ----
  void term_set_winsize(int width, int height);
  void term_fg_color(int n);
  void term_bg_color(int n);
+ void term_fg_rgb_color(long_u rgb);
+ void term_bg_rgb_color(long_u rgb);
  void term_settitle(char_u *title);
  void ttest(int pairs);
  void add_long_to_buf(long_u val, char_u *dst);
*** ../vim-7.4.1769/src/screen.c        2016-04-14 19:48:54.805601567 +0200
--- src/screen.c        2016-04-21 20:10:04.033297743 +0200
***************
*** 7828,7834 ****
        {
            if (attr > HL_ALL)                          /* special HL attr. */
            {
!               if (t_colors > 1)
                    aep = syn_cterm_attr2entry(attr);
                else
                    aep = syn_term_attr2entry(attr);
--- 7828,7834 ----
        {
            if (attr > HL_ALL)                          /* special HL attr. */
            {
!               if (IS_CTERM)
                    aep = syn_cterm_attr2entry(attr);
                else
                    aep = syn_term_attr2entry(attr);
***************
*** 7839,7846 ****
            }
            if ((attr & HL_BOLD) && T_MD != NULL)       /* bold */
                out_str(T_MD);
!           else if (aep != NULL && t_colors > 1 && aep->ae_u.cterm.fg_color
!                                                     && cterm_normal_fg_bold)
                /* If the Normal FG color has BOLD attribute and the new HL
                 * has a FG color defined, clear BOLD. */
                out_str(T_ME);
--- 7839,7854 ----
            }
            if ((attr & HL_BOLD) && T_MD != NULL)       /* bold */
                out_str(T_MD);
!           else if (aep != NULL && cterm_normal_fg_bold &&
! #ifdef FEAT_TERMTRUECOLOR
!                       (p_guicolors ?
!                           (aep->ae_u.cterm.fg_rgb != INVALCOLOR):
! #endif
!                           (t_colors > 1 && aep->ae_u.cterm.fg_color)
! #ifdef FEAT_TERMTRUECOLOR
!                       )
! #endif
!                   )
                /* If the Normal FG color has BOLD attribute and the new HL
                 * has a FG color defined, clear BOLD. */
                out_str(T_ME);
***************
*** 7860,7876 ****
             */
            if (aep != NULL)
            {
!               if (t_colors > 1)
                {
!                   if (aep->ae_u.cterm.fg_color)
!                       term_fg_color(aep->ae_u.cterm.fg_color - 1);
!                   if (aep->ae_u.cterm.bg_color)
!                       term_bg_color(aep->ae_u.cterm.bg_color - 1);
                }
                else
                {
!                   if (aep->ae_u.term.start != NULL)
!                       out_str(aep->ae_u.term.start);
                }
            }
        }
--- 7868,7896 ----
             */
            if (aep != NULL)
            {
! #ifdef FEAT_TERMTRUECOLOR
!               if (p_guicolors)
                {
!                   if (aep->ae_u.cterm.fg_rgb != INVALCOLOR)
!                       term_fg_rgb_color(aep->ae_u.cterm.fg_rgb);
!                   if (aep->ae_u.cterm.bg_rgb != INVALCOLOR)
!                       term_bg_rgb_color(aep->ae_u.cterm.bg_rgb);
                }
                else
+ #endif
                {
!                   if (t_colors > 1)
!                   {
!                       if (aep->ae_u.cterm.fg_color)
!                           term_fg_color(aep->ae_u.cterm.fg_color - 1);
!                       if (aep->ae_u.cterm.bg_color)
!                           term_bg_color(aep->ae_u.cterm.bg_color - 1);
!                   }
!                   else
!                   {
!                       if (aep->ae_u.term.start != NULL)
!                           out_str(aep->ae_u.term.start);
!                   }
                }
            }
        }
***************
*** 7904,7917 ****
            {
                attrentry_T *aep;
  
!               if (t_colors > 1)
                {
                    /*
                     * Assume that t_me restores the original colors!
                     */
                    aep = syn_cterm_attr2entry(screen_attr);
!                   if (aep != NULL && (aep->ae_u.cterm.fg_color
!                                                || aep->ae_u.cterm.bg_color))
                        do_ME = TRUE;
                }
                else
--- 7924,7946 ----
            {
                attrentry_T *aep;
  
!               if (IS_CTERM)
                {
                    /*
                     * Assume that t_me restores the original colors!
                     */
                    aep = syn_cterm_attr2entry(screen_attr);
!                   if (aep != NULL &&
! #ifdef FEAT_TERMTRUECOLOR
!                           (p_guicolors ?
!                               (aep->ae_u.cterm.fg_rgb != INVALCOLOR ||
!                                aep->ae_u.cterm.bg_rgb != INVALCOLOR):
! #endif
!                               (aep->ae_u.cterm.fg_color || 
aep->ae_u.cterm.bg_color)
! #ifdef FEAT_TERMTRUECOLOR
!                           )
! #endif
!                       )
                        do_ME = TRUE;
                }
                else
***************
*** 7959,7973 ****
            if (do_ME || (screen_attr & (HL_BOLD | HL_INVERSE)))
                out_str(T_ME);
  
!           if (t_colors > 1)
            {
!               /* set Normal cterm colors */
!               if (cterm_normal_fg_color != 0)
!                   term_fg_color(cterm_normal_fg_color - 1);
!               if (cterm_normal_bg_color != 0)
!                   term_bg_color(cterm_normal_bg_color - 1);
!               if (cterm_normal_fg_bold)
!                   out_str(T_MD);
            }
        }
      }
--- 7988,8014 ----
            if (do_ME || (screen_attr & (HL_BOLD | HL_INVERSE)))
                out_str(T_ME);
  
! #ifdef FEAT_TERMTRUECOLOR
!           if (p_guicolors)
            {
!               if (cterm_normal_fg_gui_color != INVALCOLOR)
!                   term_fg_rgb_color(cterm_normal_fg_gui_color);
!               if (cterm_normal_bg_gui_color != INVALCOLOR)
!                   term_bg_rgb_color(cterm_normal_bg_gui_color);
!           }
!           else
! #endif
!           {
!               if (t_colors > 1)
!               {
!                   /* set Normal cterm colors */
!                   if (cterm_normal_fg_color != 0)
!                       term_fg_color(cterm_normal_fg_color - 1);
!                   if (cterm_normal_bg_color != 0)
!                       term_bg_color(cterm_normal_bg_color - 1);
!                   if (cterm_normal_fg_bold)
!                       out_str(T_MD);
!               }
            }
        }
      }
***************
*** 7981,7990 ****
      void
  reset_cterm_colors(void)
  {
!     if (t_colors > 1)
      {
        /* set Normal cterm colors */
        if (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0)
        {
            out_str(T_OP);
            screen_attr = -1;
--- 8022,8038 ----
      void
  reset_cterm_colors(void)
  {
!     if (IS_CTERM)
      {
        /* set Normal cterm colors */
+ #ifdef FEAT_TERMTRUECOLOR
+       if (p_guicolors ?
+               (cterm_normal_fg_gui_color != INVALCOLOR
+                || cterm_normal_bg_gui_color != INVALCOLOR):
+               (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0))
+ #else
        if (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0)
+ #endif
        {
            out_str(T_OP);
            screen_attr = -1;
***************
*** 8228,8234 ****
  #ifdef FEAT_GUI
            !gui.in_use &&
  #endif
!                           t_colors <= 1);
      for (row = start_row; row < end_row; ++row)
      {
  #ifdef FEAT_MBYTE
--- 8276,8282 ----
  #ifdef FEAT_GUI
            !gui.in_use &&
  #endif
!           !IS_CTERM);
      for (row = start_row; row < end_row; ++row)
      {
  #ifdef FEAT_MBYTE
***************
*** 8911,8916 ****
--- 8959,8967 ----
  #ifdef FEAT_GUI
                || gui.in_use
  #endif
+ #ifdef FEAT_TERMTRUECOLOR
+               || (p_guicolors && cterm_normal_bg_gui_color != INVALCOLOR)
+ #endif
                || cterm_normal_bg_color == 0 || *T_UT != NUL));
  }
  
***************
*** 10242,10247 ****
--- 10293,10301 ----
  #ifdef FEAT_GUI
                                            && !gui.in_use
  #endif
+ #ifdef FEAT_TERMTRUECOLOR
+                                           && !p_guicolors
+ #endif
                                            );
  
      redraw_tabline = FALSE;
*** ../vim-7.4.1769/src/structs.h       2016-04-08 17:07:09.546160667 +0200
--- src/structs.h       2016-04-21 20:10:04.033297743 +0200
***************
*** 84,90 ****
  # ifdef FEAT_XCLIPBOARD
  #  include <X11/Intrinsic.h>
  # endif
! # define guicolor_T int               /* avoid error in prototypes */
  #endif
  
  /*
--- 84,92 ----
  # ifdef FEAT_XCLIPBOARD
  #  include <X11/Intrinsic.h>
  # endif
! # define guicolor_T long_u            /* avoid error in prototypes and 
!                                        * make FEAT_TERMTRUECOLOR work */
! # define INVALCOLOR ((guicolor_T)0x1ffffff)
  #endif
  
  /*
***************
*** 911,916 ****
--- 913,922 ----
            /* These colors need to be > 8 bits to hold 256. */
            short_u         fg_color;   /* foreground color number */
            short_u         bg_color;   /* background color number */
+ # ifdef FEAT_TERMTRUECOLOR
+           long_u          fg_rgb;     /* foreground color RGB */
+           long_u          bg_rgb;     /* background color RGB */
+ # endif
        } cterm;
  # ifdef FEAT_GUI
        struct
*** ../vim-7.4.1769/src/syntax.c        2016-04-02 19:01:53.471779187 +0200
--- src/syntax.c        2016-04-21 20:25:45.423683979 +0200
***************
*** 33,42 ****
      int               sg_cterm_fg;    /* terminal fg color number + 1 */
      int               sg_cterm_bg;    /* terminal bg color number + 1 */
      int               sg_cterm_attr;  /* Screen attr for color term mode */
- #ifdef FEAT_GUI
  /* for when using the GUI */
      guicolor_T        sg_gui_fg;      /* GUI foreground color handle */
      guicolor_T        sg_gui_bg;      /* GUI background color handle */
      guicolor_T        sg_gui_sp;      /* GUI special color handle */
      GuiFont   sg_font;        /* GUI font handle */
  #ifdef FEAT_XFONTSET
--- 33,44 ----
      int               sg_cterm_fg;    /* terminal fg color number + 1 */
      int               sg_cterm_bg;    /* terminal bg color number + 1 */
      int               sg_cterm_attr;  /* Screen attr for color term mode */
  /* for when using the GUI */
+ #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
      guicolor_T        sg_gui_fg;      /* GUI foreground color handle */
      guicolor_T        sg_gui_bg;      /* GUI background color handle */
+ #endif
+ #ifdef FEAT_GUI
      guicolor_T        sg_gui_sp;      /* GUI special color handle */
      GuiFont   sg_font;        /* GUI font handle */
  #ifdef FEAT_XFONTSET
***************
*** 97,106 ****
  static int hl_has_settings(int idx, int check_link);
  static void highlight_clear(int idx);
  
! #ifdef FEAT_GUI
  static void gui_do_one_color(int idx, int do_menu, int do_tooltip);
- static int  set_group_colors(char_u *name, guicolor_T *fgp, guicolor_T *bgp, 
int do_menu, int use_norm, int do_tooltip);
  static guicolor_T color_name2handle(char_u *name);
  static GuiFont font_name2handle(char_u *name);
  # ifdef FEAT_XFONTSET
  static GuiFontset fontset_name2handle(char_u *name, int fixed_width);
--- 99,110 ----
  static int hl_has_settings(int idx, int check_link);
  static void highlight_clear(int idx);
  
! #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
  static void gui_do_one_color(int idx, int do_menu, int do_tooltip);
  static guicolor_T color_name2handle(char_u *name);
+ #endif
+ #ifdef FEAT_GUI
+ static int  set_group_colors(char_u *name, guicolor_T *fgp, guicolor_T *bgp, 
int do_menu, int use_norm, int do_tooltip);
  static GuiFont font_name2handle(char_u *name);
  # ifdef FEAT_XFONTSET
  static GuiFontset fontset_name2handle(char_u *name, int fixed_width);
***************
*** 7333,7340 ****
            for (idx = 0; idx < highlight_ga.ga_len; ++idx)
                highlight_clear(idx);
            init_highlight(TRUE, TRUE);
! #ifdef FEAT_GUI
!           if (gui.in_use)
                highlight_gui_started();
  #endif
            highlight_changed();
--- 7337,7344 ----
            for (idx = 0; idx < highlight_ga.ga_len; ++idx)
                highlight_clear(idx);
            init_highlight(TRUE, TRUE);
! #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
!           if (USE_24BIT)
                highlight_gui_started();
  #endif
            highlight_changed();
***************
*** 7788,7797 ****
                if (!init)
                    HL_TABLE()[idx].sg_set |= SG_GUI;
  
! # ifdef FEAT_GUI
                /* In GUI guifg colors are only used when recognized */
                i = color_name2handle(arg);
!               if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !gui.in_use)
                {
                    HL_TABLE()[idx].sg_gui_fg = i;
  # endif
--- 7792,7807 ----
                if (!init)
                    HL_TABLE()[idx].sg_set |= SG_GUI;
  
! # if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
                /* In GUI guifg colors are only used when recognized */
                i = color_name2handle(arg);
!               if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0
! #  ifdef FEAT_GUI
!                       || !(USE_24BIT)
! #  else
!                       || !p_guicolors
! #  endif
!                  )
                {
                    HL_TABLE()[idx].sg_gui_fg = i;
  # endif
***************
*** 7800,7806 ****
                        HL_TABLE()[idx].sg_gui_fg_name = vim_strsave(arg);
                    else
                        HL_TABLE()[idx].sg_gui_fg_name = NULL;
! # ifdef FEAT_GUI
  #  ifdef FEAT_GUI_X11
                    if (is_menu_group)
                        gui.menu_fg_pixel = i;
--- 7810,7816 ----
                        HL_TABLE()[idx].sg_gui_fg_name = vim_strsave(arg);
                    else
                        HL_TABLE()[idx].sg_gui_fg_name = NULL;
! # if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
  #  ifdef FEAT_GUI_X11
                    if (is_menu_group)
                        gui.menu_fg_pixel = i;
***************
*** 7825,7834 ****
                if (!init)
                    HL_TABLE()[idx].sg_set |= SG_GUI;
  
! # ifdef FEAT_GUI
                /* In GUI guifg colors are only used when recognized */
                i = color_name2handle(arg);
!               if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !gui.in_use)
                {
                    HL_TABLE()[idx].sg_gui_bg = i;
  # endif
--- 7835,7844 ----
                if (!init)
                    HL_TABLE()[idx].sg_set |= SG_GUI;
  
! # if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
                /* In GUI guifg colors are only used when recognized */
                i = color_name2handle(arg);
!               if (i != INVALCOLOR || STRCMP(arg, "NONE") == 0 || !USE_24BIT)
                {
                    HL_TABLE()[idx].sg_gui_bg = i;
  # endif
***************
*** 7837,7843 ****
                        HL_TABLE()[idx].sg_gui_bg_name = vim_strsave(arg);
                    else
                        HL_TABLE()[idx].sg_gui_bg_name = NULL;
! # ifdef FEAT_GUI
  #  ifdef FEAT_GUI_X11
                    if (is_menu_group)
                        gui.menu_bg_pixel = i;
--- 7847,7853 ----
                        HL_TABLE()[idx].sg_gui_bg_name = vim_strsave(arg);
                    else
                        HL_TABLE()[idx].sg_gui_bg_name = NULL;
! # if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
  #  ifdef FEAT_GUI_X11
                    if (is_menu_group)
                        gui.menu_bg_pixel = i;
***************
*** 7997,8003 ****
             * Need to update all groups, because they might be using "bg"
             * and/or "fg", which have been changed now.
             */
!           if (gui.in_use)
                highlight_gui_started();
  #endif
        }
--- 8007,8015 ----
             * Need to update all groups, because they might be using "bg"
             * and/or "fg", which have been changed now.
             */
! #endif
! #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
!           if (USE_24BIT)
                highlight_gui_started();
  #endif
        }
***************
*** 8068,8073 ****
--- 8080,8089 ----
      cterm_normal_fg_color = 0;
      cterm_normal_fg_bold = 0;
      cterm_normal_bg_color = 0;
+ # ifdef FEAT_TERMTRUECOLOR
+     cterm_normal_fg_gui_color = INVALCOLOR;
+     cterm_normal_bg_gui_color = INVALCOLOR;
+ # endif
  #endif
  }
  
***************
*** 8118,8126 ****
      vim_free(HL_TABLE()[idx].sg_gui_sp_name);
      HL_TABLE()[idx].sg_gui_sp_name = NULL;
  #endif
! #ifdef FEAT_GUI
      HL_TABLE()[idx].sg_gui_fg = INVALCOLOR;
      HL_TABLE()[idx].sg_gui_bg = INVALCOLOR;
      HL_TABLE()[idx].sg_gui_sp = INVALCOLOR;
      gui_mch_free_font(HL_TABLE()[idx].sg_font);
      HL_TABLE()[idx].sg_font = NOFONT;
--- 8134,8144 ----
      vim_free(HL_TABLE()[idx].sg_gui_sp_name);
      HL_TABLE()[idx].sg_gui_sp_name = NULL;
  #endif
! #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
      HL_TABLE()[idx].sg_gui_fg = INVALCOLOR;
      HL_TABLE()[idx].sg_gui_bg = INVALCOLOR;
+ #endif
+ #ifdef FEAT_GUI
      HL_TABLE()[idx].sg_gui_sp = INVALCOLOR;
      gui_mch_free_font(HL_TABLE()[idx].sg_font);
      HL_TABLE()[idx].sg_font = NOFONT;
***************
*** 8140,8146 ****
  #endif
  }
  
! #if defined(FEAT_GUI) || defined(PROTO)
  /*
   * Set the normal foreground and background colors according to the "Normal"
   * highlighting group.  For X11 also set "Menu", "Scrollbar", and
--- 8158,8164 ----
  #endif
  }
  
! #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR) || defined(PROTO)
  /*
   * Set the normal foreground and background colors according to the "Normal"
   * highlighting group.  For X11 also set "Menu", "Scrollbar", and
***************
*** 8149,8192 ****
      void
  set_normal_colors(void)
  {
!     if (set_group_colors((char_u *)"Normal",
!                            &gui.norm_pixel, &gui.back_pixel,
!                            FALSE, TRUE, FALSE))
!     {
!       gui_mch_new_colors();
!       must_redraw = CLEAR;
!     }
! #ifdef FEAT_GUI_X11
!     if (set_group_colors((char_u *)"Menu",
!                        &gui.menu_fg_pixel, &gui.menu_bg_pixel,
!                        TRUE, FALSE, FALSE))
!     {
! # ifdef FEAT_MENU
!       gui_mch_new_menu_colors();
  # endif
-       must_redraw = CLEAR;
-     }
- # ifdef FEAT_BEVAL
-     if (set_group_colors((char_u *)"Tooltip",
-                        &gui.tooltip_fg_pixel, &gui.tooltip_bg_pixel,
-                        FALSE, FALSE, TRUE))
      {
! # ifdef FEAT_TOOLBAR
!       gui_mch_new_tooltip_colors();
  # endif
-       must_redraw = CLEAR;
      }
  #endif
!     if (set_group_colors((char_u *)"Scrollbar",
!                   &gui.scroll_fg_pixel, &gui.scroll_bg_pixel,
!                   FALSE, FALSE, FALSE))
      {
!       gui_new_scrollbar_colors();
!       must_redraw = CLEAR;
      }
  #endif
  }
  
  /*
   * Set the colors for "Normal", "Menu", "Tooltip" or "Scrollbar".
   */
--- 8167,8244 ----
      void
  set_normal_colors(void)
  {
! #ifdef FEAT_GUI
! # ifdef FEAT_TERMTRUECOLOR
!     if (gui.in_use)
  # endif
      {
!       if (set_group_colors((char_u *)"Normal",
!                                &gui.norm_pixel, &gui.back_pixel,
!                                FALSE, TRUE, FALSE))
!       {
!           gui_mch_new_colors();
!           must_redraw = CLEAR;
!       }
! # ifdef FEAT_GUI_X11
!       if (set_group_colors((char_u *)"Menu",
!                            &gui.menu_fg_pixel, &gui.menu_bg_pixel,
!                            TRUE, FALSE, FALSE))
!       {
! #  ifdef FEAT_MENU
!           gui_mch_new_menu_colors();
! #  endif
!           must_redraw = CLEAR;
!       }
! #  ifdef FEAT_BEVAL
!       if (set_group_colors((char_u *)"Tooltip",
!                            &gui.tooltip_fg_pixel, &gui.tooltip_bg_pixel,
!                            FALSE, FALSE, TRUE))
!       {
! #   ifdef FEAT_TOOLBAR
!           gui_mch_new_tooltip_colors();
! #   endif
!           must_redraw = CLEAR;
!       }
! #  endif
!       if (set_group_colors((char_u *)"Scrollbar",
!                       &gui.scroll_fg_pixel, &gui.scroll_bg_pixel,
!                       FALSE, FALSE, FALSE))
!       {
!           gui_new_scrollbar_colors();
!           must_redraw = CLEAR;
!       }
  # endif
      }
  #endif
! #ifdef FEAT_TERMTRUECOLOR
! # ifdef FEAT_GUI
!     else
! # endif
      {
!       int             idx;
! 
!       idx = syn_name2id((char_u *)"Normal") - 1;
!       if (idx >= 0)
!       {
!           gui_do_one_color(idx, FALSE, FALSE);
! 
!           if (HL_TABLE()[idx].sg_gui_fg != INVALCOLOR)
!           {
!               cterm_normal_fg_gui_color = HL_TABLE()[idx].sg_gui_fg;
!               must_redraw = CLEAR;
!           }
!           if (HL_TABLE()[idx].sg_gui_bg != INVALCOLOR)
!           {
!               cterm_normal_bg_gui_color = HL_TABLE()[idx].sg_gui_bg;
!               must_redraw = CLEAR;
!           }
!       }
      }
  #endif
  }
+ #endif
  
+ #if defined(FEAT_GUI) || defined(PROTO)
  /*
   * Set the colors for "Normal", "Menu", "Tooltip" or "Scrollbar".
   */
***************
*** 8299,8322 ****
  }
  
  /*
-  * Return the handle for a color name.
-  * Returns INVALCOLOR when failed.
-  */
-     static guicolor_T
- color_name2handle(char_u *name)
- {
-     if (STRCMP(name, "NONE") == 0)
-       return INVALCOLOR;
- 
-     if (STRICMP(name, "fg") == 0 || STRICMP(name, "foreground") == 0)
-       return gui.norm_pixel;
-     if (STRICMP(name, "bg") == 0 || STRICMP(name, "background") == 0)
-       return gui.back_pixel;
- 
-     return gui_get_color(name);
- }
- 
- /*
   * Return the handle for a font name.
   * Returns NOFONT when failed.
   */
--- 8351,8356 ----
***************
*** 8439,8444 ****
--- 8473,8524 ----
  
  #endif /* FEAT_GUI */
  
+ #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR) || defined(PROTO)
+ /*
+  * Return the handle for a color name.
+  * Returns INVALCOLOR when failed.
+  */
+     static guicolor_T
+ color_name2handle(char_u *name)
+ {
+     if (STRCMP(name, "NONE") == 0)
+       return INVALCOLOR;
+ 
+     if (STRICMP(name, "fg") == 0 || STRICMP(name, "foreground") == 0)
+     {
+ #if defined(FEAT_TERMTRUECOLOR) && defined(FEAT_GUI)
+       if (gui.in_use)
+ #endif
+ #ifdef FEAT_GUI
+           return gui.norm_pixel;
+ #endif
+ #if defined(FEAT_TERMTRUECOLOR) && defined(FEAT_GUI)
+       else
+ #endif
+ #ifdef FEAT_TERMTRUECOLOR
+           return cterm_normal_fg_gui_color;
+ #endif
+     }
+     if (STRICMP(name, "bg") == 0 || STRICMP(name, "background") == 0)
+     {
+ #if defined(FEAT_TERMTRUECOLOR) && defined(FEAT_GUI)
+       if (gui.in_use)
+ #endif
+ #ifdef FEAT_GUI
+           return gui.back_pixel;
+ #endif
+ #if defined(FEAT_TERMTRUECOLOR) && defined(FEAT_GUI)
+       else
+ #endif
+ #ifdef FEAT_TERMTRUECOLOR
+           return cterm_normal_bg_gui_color;
+ #endif
+     }
+ 
+     return GUI_GET_COLOR(name);
+ }
+ #endif
+ 
  /*
   * Table with the specifications for an attribute number.
   * Note that this table is used by ALL buffers.  This is required because the
***************
*** 8514,8521 ****
                            && aep->ae_u.cterm.fg_color
                                                  == taep->ae_u.cterm.fg_color
                            && aep->ae_u.cterm.bg_color
!                                                == taep->ae_u.cterm.bg_color)
!                    ))
  
        return i + ATTR_OFF;
      }
--- 8594,8608 ----
                            && aep->ae_u.cterm.fg_color
                                                  == taep->ae_u.cterm.fg_color
                            && aep->ae_u.cterm.bg_color
!                                                 == taep->ae_u.cterm.bg_color
! #ifdef FEAT_TERMTRUECOLOR
!                           && aep->ae_u.cterm.fg_rgb
!                                                   == taep->ae_u.cterm.fg_rgb
!                           && aep->ae_u.cterm.bg_rgb
!                                                   == taep->ae_u.cterm.bg_rgb
! #endif
!                                               
!                      )))
  
        return i + ATTR_OFF;
      }
***************
*** 8580,8585 ****
--- 8667,8676 ----
      {
        taep->ae_u.cterm.fg_color = aep->ae_u.cterm.fg_color;
        taep->ae_u.cterm.bg_color = aep->ae_u.cterm.bg_color;
+ #ifdef FEAT_TERMTRUECOLOR
+       taep->ae_u.cterm.fg_rgb = aep->ae_u.cterm.fg_rgb;
+       taep->ae_u.cterm.bg_rgb = aep->ae_u.cterm.bg_rgb;
+ #endif
      }
      ++table->ga_len;
      return (table->ga_len - 1 + ATTR_OFF);
***************
*** 8671,8677 ****
      }
  #endif
  
!     if (t_colors > 1)
      {
        if (char_attr > HL_ALL)
            char_aep = syn_cterm_attr2entry(char_attr);
--- 8762,8768 ----
      }
  #endif
  
!     if (IS_CTERM)
      {
        if (char_attr > HL_ALL)
            char_aep = syn_cterm_attr2entry(char_attr);
***************
*** 8696,8701 ****
--- 8787,8798 ----
                    new_en.ae_u.cterm.fg_color = spell_aep->ae_u.cterm.fg_color;
                if (spell_aep->ae_u.cterm.bg_color > 0)
                    new_en.ae_u.cterm.bg_color = spell_aep->ae_u.cterm.bg_color;
+ #ifdef FEAT_TERMTRUECOLOR
+               if (spell_aep->ae_u.cterm.fg_rgb != INVALCOLOR)
+                   new_en.ae_u.cterm.fg_rgb = spell_aep->ae_u.cterm.fg_rgb;
+               if (spell_aep->ae_u.cterm.bg_rgb != INVALCOLOR)
+                   new_en.ae_u.cterm.bg_rgb = spell_aep->ae_u.cterm.bg_rgb;
+ #endif
            }
        }
        return get_attr_entry(&cterm_attr_table, &new_en);
***************
*** 8757,8766 ****
        aep = syn_gui_attr2entry(attr);
      else
  #endif
!       if (t_colors > 1)
!       aep = syn_cterm_attr2entry(attr);
!     else
!       aep = syn_term_attr2entry(attr);
  
      if (aep == NULL)      /* highlighting not set */
        return 0;
--- 8854,8863 ----
        aep = syn_gui_attr2entry(attr);
      else
  #endif
!       if (IS_CTERM)
!           aep = syn_cterm_attr2entry(attr);
!       else
!           aep = syn_term_attr2entry(attr);
  
      if (aep == NULL)      /* highlighting not set */
        return 0;
***************
*** 8959,8971 ****
        return NULL;
      if (modec == 'g')
      {
! # ifdef FEAT_GUI
        /* return font name */
        if (font)
            return HL_TABLE()[id - 1].sg_font_name;
  
        /* return #RRGGBB form (only possible when GUI is running) */
!       if (gui.in_use && what[2] == '#')
        {
            guicolor_T          color;
            long_u              rgb;
--- 9056,9070 ----
        return NULL;
      if (modec == 'g')
      {
! # if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
! #  ifdef FEAT_GUI
        /* return font name */
        if (font)
            return HL_TABLE()[id - 1].sg_font_name;
+ #  endif
  
        /* return #RRGGBB form (only possible when GUI is running) */
!       if ((USE_24BIT) && what[2] == '#')
        {
            guicolor_T          color;
            long_u              rgb;
***************
*** 8974,8992 ****
            if (fg)
                color = HL_TABLE()[id - 1].sg_gui_fg;
            else if (sp)
                color = HL_TABLE()[id - 1].sg_gui_sp;
            else
                color = HL_TABLE()[id - 1].sg_gui_bg;
            if (color == INVALCOLOR)
                return NULL;
!           rgb = gui_mch_get_rgb(color);
            sprintf((char *)buf, "#%02x%02x%02x",
                                      (unsigned)(rgb >> 16),
                                      (unsigned)(rgb >> 8) & 255,
                                      (unsigned)rgb & 255);
            return buf;
        }
! #endif
        if (fg)
            return (HL_TABLE()[id - 1].sg_gui_fg_name);
        if (sp)
--- 9073,9095 ----
            if (fg)
                color = HL_TABLE()[id - 1].sg_gui_fg;
            else if (sp)
+ #  ifdef FEAT_GUI
                color = HL_TABLE()[id - 1].sg_gui_sp;
+ #  else
+               color = INVALCOLOR;
+ #  endif
            else
                color = HL_TABLE()[id - 1].sg_gui_bg;
            if (color == INVALCOLOR)
                return NULL;
!           rgb = GUI_MCH_GET_RGB(color);
            sprintf((char *)buf, "#%02x%02x%02x",
                                      (unsigned)(rgb >> 16),
                                      (unsigned)(rgb >> 8) & 255,
                                      (unsigned)rgb & 255);
            return buf;
        }
! # endif
        if (fg)
            return (HL_TABLE()[id - 1].sg_gui_fg_name);
        if (sp)
***************
*** 9011,9018 ****
  }
  #endif
  
! #if (defined(FEAT_SYN_HL) && defined(FEAT_GUI) && defined(FEAT_PRINTER)) \
!       || defined(PROTO)
  /*
   * Return color name of highlight group "id" as RGB value.
   */
--- 9114,9122 ----
  }
  #endif
  
! #if (defined(FEAT_SYN_HL) \
!           && (defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)) \
!       && defined(FEAT_PRINTER)) || defined(PROTO)
  /*
   * Return color name of highlight group "id" as RGB value.
   */
***************
*** 9034,9040 ****
      if (color == INVALCOLOR)
        return 0L;
  
!     return gui_mch_get_rgb(color);
  }
  #endif
  
--- 9138,9144 ----
      if (color == INVALCOLOR)
        return 0L;
  
!     return GUI_MCH_GET_RGB(color);
  }
  #endif
  
***************
*** 9150,9162 ****
       * For the color term mode: If there are other than "normal"
       * highlighting attributes, need to allocate an attr number.
       */
!     if (sgp->sg_cterm_fg == 0 && sgp->sg_cterm_bg == 0)
        sgp->sg_cterm_attr = sgp->sg_cterm;
      else
      {
        at_en.ae_attr = sgp->sg_cterm;
        at_en.ae_u.cterm.fg_color = sgp->sg_cterm_fg;
        at_en.ae_u.cterm.bg_color = sgp->sg_cterm_bg;
        sgp->sg_cterm_attr = get_attr_entry(&cterm_attr_table, &at_en);
      }
  }
--- 9254,9275 ----
       * For the color term mode: If there are other than "normal"
       * highlighting attributes, need to allocate an attr number.
       */
!     if (sgp->sg_cterm_fg == 0 && sgp->sg_cterm_bg == 0
! # ifdef FEAT_TERMTRUECOLOR
!           && sgp->sg_gui_fg == INVALCOLOR
!           && sgp->sg_gui_bg == INVALCOLOR
! # endif
!           )
        sgp->sg_cterm_attr = sgp->sg_cterm;
      else
      {
        at_en.ae_attr = sgp->sg_cterm;
        at_en.ae_u.cterm.fg_color = sgp->sg_cterm_fg;
        at_en.ae_u.cterm.bg_color = sgp->sg_cterm_bg;
+ # ifdef FEAT_TERMTRUECOLOR
+       at_en.ae_u.cterm.fg_rgb = GUI_MCH_GET_RGB(sgp->sg_gui_fg);
+       at_en.ae_u.cterm.bg_rgb = GUI_MCH_GET_RGB(sgp->sg_gui_bg);
+ # endif
        sgp->sg_cterm_attr = get_attr_entry(&cterm_attr_table, &at_en);
      }
  }
***************
*** 9307,9316 ****
      vim_memset(&(HL_TABLE()[highlight_ga.ga_len]), 0, sizeof(struct 
hl_group));
      HL_TABLE()[highlight_ga.ga_len].sg_name = name;
      HL_TABLE()[highlight_ga.ga_len].sg_name_u = vim_strsave_up(name);
! #ifdef FEAT_GUI
      HL_TABLE()[highlight_ga.ga_len].sg_gui_bg = INVALCOLOR;
      HL_TABLE()[highlight_ga.ga_len].sg_gui_fg = INVALCOLOR;
      HL_TABLE()[highlight_ga.ga_len].sg_gui_sp = INVALCOLOR;
  #endif
      ++highlight_ga.ga_len;
  
--- 9420,9431 ----
      vim_memset(&(HL_TABLE()[highlight_ga.ga_len]), 0, sizeof(struct 
hl_group));
      HL_TABLE()[highlight_ga.ga_len].sg_name = name;
      HL_TABLE()[highlight_ga.ga_len].sg_name_u = vim_strsave_up(name);
! #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
      HL_TABLE()[highlight_ga.ga_len].sg_gui_bg = INVALCOLOR;
      HL_TABLE()[highlight_ga.ga_len].sg_gui_fg = INVALCOLOR;
+ # ifdef FEAT_GUI
      HL_TABLE()[highlight_ga.ga_len].sg_gui_sp = INVALCOLOR;
+ # endif
  #endif
      ++highlight_ga.ga_len;
  
***************
*** 9349,9355 ****
        attr = sgp->sg_gui_attr;
      else
  #endif
!       if (t_colors > 1)
            attr = sgp->sg_cterm_attr;
        else
            attr = sgp->sg_term_attr;
--- 9464,9470 ----
        attr = sgp->sg_gui_attr;
      else
  #endif
!       if (IS_CTERM)
            attr = sgp->sg_cterm_attr;
        else
            attr = sgp->sg_term_attr;
***************
*** 9403,9409 ****
      return hl_id;
  }
  
! #ifdef FEAT_GUI
  /*
   * Call this function just after the GUI has started.
   * It finds the font and color handles for the highlighting groups.
--- 9518,9524 ----
      return hl_id;
  }
  
! #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
  /*
   * Call this function just after the GUI has started.
   * It finds the font and color handles for the highlighting groups.
***************
*** 9414,9420 ****
      int           idx;
  
      /* First get the colors from the "Normal" and "Menu" group, if set */
!     set_normal_colors();
  
      for (idx = 0; idx < highlight_ga.ga_len; ++idx)
        gui_do_one_color(idx, FALSE, FALSE);
--- 9529,9540 ----
      int           idx;
  
      /* First get the colors from the "Normal" and "Menu" group, if set */
! # if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR)
! #  ifdef FEAT_TERMTRUECOLOR
!     if (USE_24BIT)
! #  endif
!       set_normal_colors();
! # endif
  
      for (idx = 0; idx < highlight_ga.ga_len; ++idx)
        gui_do_one_color(idx, FALSE, FALSE);
***************
*** 9430,9441 ****
  {
      int               didit = FALSE;
  
!     if (HL_TABLE()[idx].sg_font_name != NULL)
!     {
!       hl_do_font(idx, HL_TABLE()[idx].sg_font_name, FALSE, do_menu,
                                                            do_tooltip, TRUE);
!       didit = TRUE;
!     }
      if (HL_TABLE()[idx].sg_gui_fg_name != NULL)
      {
        HL_TABLE()[idx].sg_gui_fg =
--- 9550,9566 ----
  {
      int               didit = FALSE;
  
! # ifdef FEAT_GUI
! #  ifdef FEAT_TERMTRUECOLOR
!     if (gui.in_use)
! #  endif
!       if (HL_TABLE()[idx].sg_font_name != NULL)
!       {
!           hl_do_font(idx, HL_TABLE()[idx].sg_font_name, FALSE, do_menu,
                                                            do_tooltip, TRUE);
!           didit = TRUE;
!       }
! # endif
      if (HL_TABLE()[idx].sg_gui_fg_name != NULL)
      {
        HL_TABLE()[idx].sg_gui_fg =
***************
*** 9448,9463 ****
                            color_name2handle(HL_TABLE()[idx].sg_gui_bg_name);
        didit = TRUE;
      }
      if (HL_TABLE()[idx].sg_gui_sp_name != NULL)
      {
        HL_TABLE()[idx].sg_gui_sp =
                            color_name2handle(HL_TABLE()[idx].sg_gui_sp_name);
        didit = TRUE;
      }
      if (didit)        /* need to get a new attr number */
        set_hl_attr(idx);
  }
- 
  #endif
  
  /*
--- 9573,9589 ----
                            color_name2handle(HL_TABLE()[idx].sg_gui_bg_name);
        didit = TRUE;
      }
+ # ifdef FEAT_GUI
      if (HL_TABLE()[idx].sg_gui_sp_name != NULL)
      {
        HL_TABLE()[idx].sg_gui_sp =
                            color_name2handle(HL_TABLE()[idx].sg_gui_sp_name);
        didit = TRUE;
      }
+ # endif
      if (didit)        /* need to get a new attr number */
        set_hl_attr(idx);
  }
  #endif
  
  /*
*** ../vim-7.4.1769/src/term.c  2016-03-19 22:11:47.432674878 +0100
--- src/term.c  2016-04-21 20:39:13.499478450 +0200
***************
*** 77,82 ****
--- 77,85 ----
  static struct builtin_term *find_builtin_term(char_u *name);
  static void parse_builtin_tcap(char_u *s);
  static void term_color(char_u *s, int n);
+ #ifdef FEAT_TERMTRUECOLOR
+ static void term_rgb_color(char_u *s, long_u rgb);
+ #endif
  static void gather_termleader(void);
  #ifdef FEAT_TERMRESPONSE
  static void req_codes_from_term(void);
***************
*** 382,390 ****
  #  else
      {(int)KS_CRI,     "\033[%dC"},
  #  endif
! #if defined(BEOS_DR8)
      {(int)KS_DB,      ""},            /* hack! see screen.c */
! #endif
  
      {K_UP,            "\033[A"},
      {K_DOWN,          "\033[B"},
--- 385,393 ----
  #  else
      {(int)KS_CRI,     "\033[%dC"},
  #  endif
! #  if defined(BEOS_DR8)
      {(int)KS_DB,      ""},            /* hack! see screen.c */
! #  endif
  
      {K_UP,            "\033[A"},
      {K_DOWN,          "\033[B"},
***************
*** 790,797 ****
  #  endif
  # endif
  
! # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS) || 
defined(SOME_BUILTIN_TCAPS) || defined(__EMX__)
      {(int)KS_NAME,    "xterm"},
      {(int)KS_CE,      IF_EB("\033[K", ESC_STR "[K")},
      {(int)KS_AL,      IF_EB("\033[L", ESC_STR "[L")},
  #  ifdef TERMINFO
--- 793,802 ----
  #  endif
  # endif
  
! # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS) || 
defined(SOME_BUILTIN_TCAPS) || defined(__EMX__) || defined(FEAT_TERMTRUECOLOR)
      {(int)KS_NAME,    "xterm"},
+ # endif
+ # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS) || 
defined(SOME_BUILTIN_TCAPS) || defined(__EMX__)
      {(int)KS_CE,      IF_EB("\033[K", ESC_STR "[K")},
      {(int)KS_AL,      IF_EB("\033[L", ESC_STR "[L")},
  #  ifdef TERMINFO
***************
*** 939,944 ****
--- 944,953 ----
      {TERMCAP2KEY('F', 'Q'), IF_EB("\033[57;*~", ESC_STR "[57;*~")}, /* F36 */
      {TERMCAP2KEY('F', 'R'), IF_EB("\033[58;*~", ESC_STR "[58;*~")}, /* F37 */
  # endif
+ # ifdef FEAT_TERMTRUECOLOR
+     {(int)KS_8F,      IF_EB("\033[38;2;%lu;%lu;%lum", ESC_STR 
"[38;2;%lu;%lu;%lum")},
+     {(int)KS_8B,      IF_EB("\033[48;2;%lu;%lu;%lum", ESC_STR 
"[48;2;%lu;%lu;%lum")},
+ # endif
  
  # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS)
  /*
***************
*** 1257,1262 ****
--- 1266,1436 ----
  
  };    /* end of builtin_termcaps */
  
+ #if defined(FEAT_TERMTRUECOLOR) || defined(PROTO)
+ # define RGB(r, g, b) ((r<<16) | (g<<8) | (b))
+ struct rgbcolor_table_S {
+     char_u    *color_name;
+     guicolor_T         color;
+ };
+ static struct rgbcolor_table_S rgb_table[] = {
+       {(char_u *)"black",     RGB(0x00, 0x00, 0x00)},
+       {(char_u *)"blue",      RGB(0x00, 0x00, 0xD4)},
+       {(char_u *)"brown",     RGB(0x80, 0x40, 0x40)},
+       {(char_u *)"cyan",      RGB(0x02, 0xAB, 0xEA)},
+       {(char_u *)"darkblue",  RGB(0x00, 0x00, 0x80)},
+       {(char_u *)"darkcyan",  RGB(0x00, 0x80, 0x80)},
+       {(char_u *)"darkgray",  RGB(0x80, 0x80, 0x80)},
+       {(char_u *)"darkgreen", RGB(0x00, 0x80, 0x00)},
+       {(char_u *)"darkgrey",  RGB(0x80, 0x80, 0x80)},
+       {(char_u *)"darkmagenta",       RGB(0x80, 0x00, 0x80)},
+       {(char_u *)"darkred",   RGB(0x80, 0x00, 0x00)},
+       {(char_u *)"darkyellow",        RGB(0xBB, 0xBB, 0x00)},
+       {(char_u *)"gray",      RGB(0xC0, 0xC0, 0xC0)},
+       {(char_u *)"gray10",    RGB(0x1A, 0x1A, 0x1A)},
+       {(char_u *)"gray20",    RGB(0x33, 0x33, 0x33)},
+       {(char_u *)"gray30",    RGB(0x4D, 0x4D, 0x4D)},
+       {(char_u *)"gray40",    RGB(0x66, 0x66, 0x66)},
+       {(char_u *)"gray50",    RGB(0x7F, 0x7F, 0x7F)},
+       {(char_u *)"gray60",    RGB(0x99, 0x99, 0x99)},
+       {(char_u *)"gray70",    RGB(0xB3, 0xB3, 0xB3)},
+       {(char_u *)"gray80",    RGB(0xCC, 0xCC, 0xCC)},
+       {(char_u *)"gray90",    RGB(0xE5, 0xE5, 0xE5)},
+       {(char_u *)"green",     RGB(0x00, 0x64, 0x11)},
+       {(char_u *)"grey",      RGB(0xC0, 0xC0, 0xC0)},
+       {(char_u *)"grey10",    RGB(0x1A, 0x1A, 0x1A)},
+       {(char_u *)"grey20",    RGB(0x33, 0x33, 0x33)},
+       {(char_u *)"grey30",    RGB(0x4D, 0x4D, 0x4D)},
+       {(char_u *)"grey40",    RGB(0x66, 0x66, 0x66)},
+       {(char_u *)"grey50",    RGB(0x7F, 0x7F, 0x7F)},
+       {(char_u *)"grey60",    RGB(0x99, 0x99, 0x99)},
+       {(char_u *)"grey70",    RGB(0xB3, 0xB3, 0xB3)},
+       {(char_u *)"grey80",    RGB(0xCC, 0xCC, 0xCC)},
+       {(char_u *)"grey90",    RGB(0xE5, 0xE5, 0xE5)},
+       {(char_u *)"lightblue", RGB(0xA0, 0xA0, 0xFF)},
+       {(char_u *)"lightcyan", RGB(0xA0, 0xFF, 0xFF)},
+       {(char_u *)"lightgray", RGB(0xE0, 0xE0, 0xE0)},
+       {(char_u *)"lightgreen",        RGB(0xA0, 0xFF, 0xA0)},
+       {(char_u *)"lightgrey", RGB(0xE0, 0xE0, 0xE0)},
+       {(char_u *)"lightmagenta",RGB(0xF0, 0xA0, 0xF0)},
+       {(char_u *)"lightred",  RGB(0xFF, 0xA0, 0xA0)},
+       {(char_u *)"lightyellow",       RGB(0xFF, 0xFF, 0xA0)},
+       {(char_u *)"magenta",   RGB(0xF2, 0x08, 0x84)},
+       {(char_u *)"orange",    RGB(0xFC, 0x80, 0x00)},
+       {(char_u *)"purple",    RGB(0xA0, 0x20, 0xF0)},
+       {(char_u *)"red",               RGB(0xDD, 0x08, 0x06)},
+       {(char_u *)"seagreen",  RGB(0x2E, 0x8B, 0x57)},
+       {(char_u *)"slateblue", RGB(0x6A, 0x5A, 0xCD)},
+       {(char_u *)"violet",    RGB(0x8D, 0x38, 0xC9)},
+       {(char_u *)"white",     RGB(0xFF, 0xFF, 0xFF)},
+       {(char_u *)"yellow",    RGB(0xFC, 0xF3, 0x05)},
+ };
+ 
+     static int
+ hex_digit(int c)
+ {
+     if (isdigit(c))
+       return c - '0';
+     c = TOLOWER_ASC(c);
+     if (c >= 'a' && c <= 'f')
+       return c - 'a' + 10;
+     return 0x1ffffff;
+ }
+ 
+     guicolor_T
+ termtrue_mch_get_color(char_u *name)
+ {
+     guicolor_T        color;
+     int               i;
+ 
+     if (*name == '#' && strlen((char *) name) == 7)
+     {
+       color = RGB(((hex_digit(name[1])<<4) + hex_digit(name[2])),
+                   ((hex_digit(name[3])<<4) + hex_digit(name[4])),
+                   ((hex_digit(name[5])<<4) + hex_digit(name[6])));
+       if (color > 0xffffff)
+           return INVALCOLOR;
+       return color;
+     }
+     else
+     {
+       /* Check if the name is one of the colors we know */
+       for (i = 0; i < sizeof(rgb_table) / sizeof(rgb_table[0]); i++)
+           if (STRICMP(name, rgb_table[i].color_name) == 0)
+               return rgb_table[i].color;
+     }
+ 
+     /*
+      * Last attempt. Look in the file "$VIM/rgb.txt".
+      */
+     {
+ #define LINE_LEN 100
+       FILE    *fd;
+       char    line[LINE_LEN];
+       char_u  *fname;
+       int     r, g, b;
+ 
+       fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
+       if (fname == NULL)
+           return INVALCOLOR;
+ 
+       fd = fopen((char *)fname, "rt");
+       vim_free(fname);
+       if (fd == NULL)
+           return INVALCOLOR;
+ 
+       while (!feof(fd))
+       {
+           int         len;
+           int         pos;
+           char        *color;
+ 
+           fgets(line, LINE_LEN, fd);
+           len = strlen(line);
+ 
+           if (len <= 1 || line[len-1] != '\n')
+               continue;
+ 
+           line[len-1] = '\0';
+ 
+           i = sscanf(line, "%d %d %d %n", &r, &g, &b, &pos);
+           if (i != 3)
+               continue;
+ 
+           color = line + pos;
+ 
+           if (STRICMP(color, name) == 0)
+           {
+               fclose(fd);
+               return (guicolor_T) RGB(r, g, b);
+           }
+       }
+       fclose(fd);
+     }
+ 
+     return INVALCOLOR;
+ }
+ 
+     guicolor_T
+ termtrue_get_color(char_u *name)
+ {
+     guicolor_T        t;
+ 
+     if (*name == NUL)
+       return INVALCOLOR;
+     t = termtrue_mch_get_color(name);
+ 
+     if (t == INVALCOLOR)
+       EMSG2(_("E254: Cannot allocate color %s"), name);
+     return t;
+ }
+ 
+     long_u
+ termtrue_mch_get_rgb(guicolor_T color)
+ {
+     return (long_u) color;
+ }
+ #endif
+ 
  /*
   * DEFAULT_TERM is used, when no terminal is specified with -T option or 
$TERM.
   */
***************
*** 1512,1517 ****
--- 1686,1692 ----
                                {KS_CWP, "WP"}, {KS_CWS, "WS"},
                                {KS_CSI, "SI"}, {KS_CEI, "EI"},
                                {KS_U7, "u7"}, {KS_RBG, "RB"},
+                               {KS_8F, "8f"}, {KS_8B, "8b"},
                                {(enum SpecialKey)0, NULL}
                            };
  
***************
*** 2608,2613 ****
--- 2783,2815 ----
        OUT_STR(tgoto((char *)s, 0, n));
  }
  
+ #if defined(FEAT_TERMTRUECOLOR) || defined(PROTO)
+     void
+ term_fg_rgb_color(long_u rgb)
+ {
+     term_rgb_color(T_8F, rgb);
+ }
+ 
+     void
+ term_bg_rgb_color(long_u rgb)
+ {
+     term_rgb_color(T_8B, rgb);
+ }
+ 
+ #define RED(rgb)   ((rgb>>16)&0xFF)
+ #define GREEN(rgb) ((rgb>> 8)&0xFF)
+ #define BLUE(rgb)  ((rgb    )&0xFF)
+ 
+     static void
+ term_rgb_color(char_u *s, long_u rgb)
+ {
+     char      buf[7+3*3+2+1+1];
+ 
+     sprintf(buf, (char *)s, RED(rgb), GREEN(rgb), BLUE(rgb));
+     OUT_STR(buf);
+ }
+ #endif
+ 
  #if (defined(FEAT_TITLE) && (defined(UNIX) || defined(VMS) \
        || defined(MACOS_X))) || defined(PROTO)
  /*
*** ../vim-7.4.1769/src/term.h  2016-03-19 22:11:47.440674791 +0100
--- src/term.h  2016-04-21 20:10:04.037297702 +0200
***************
*** 87,96 ****
      KS_CSV,   /* scroll region vertical */
  #endif
      KS_OP,    /* original color pair */
!     KS_U7     /* request cursor position */
  };
  
! #define KS_LAST           KS_U7
  
  /*
   * the terminal capabilities are stored in this array
--- 87,98 ----
      KS_CSV,   /* scroll region vertical */
  #endif
      KS_OP,    /* original color pair */
!     KS_U7,    /* request cursor position */
!     KS_8F,    /* set foreground color (RGB) */
!     KS_8B     /* set background color (RGB) */
  };
  
! #define KS_LAST           KS_8B
  
  /*
   * the terminal capabilities are stored in this array
***************
*** 166,171 ****
--- 168,175 ----
  #define T_RBG (term_str(KS_RBG))      /* request background RGB */
  #define T_OP  (term_str(KS_OP))       /* original color pair */
  #define T_U7  (term_str(KS_U7))       /* request cursor position */
+ #define T_8F  (term_str(KS_8F))       /* set foreground color (RGB) */
+ #define T_8B  (term_str(KS_8B))       /* set background color (RGB) */
  
  #define TMODE_COOK  0 /* terminal mode for external cmds and Ex mode */
  #define TMODE_SLEEP 1 /* terminal mode for sleeping (cooked but no echo) */
*** ../vim-7.4.1769/src/version.c       2016-04-21 20:00:47.926966425 +0200
--- src/version.c       2016-04-21 21:04:07.640425463 +0200
***************
*** 621,626 ****
--- 621,631 ----
  #else
        "-termresponse",
  #endif
+ #ifdef FEAT_TERMTRUECOLOR
+       "+termtruecolor",
+ #else
+       "-termtruecolor",
+ #endif
  #ifdef FEAT_TEXTOBJ
        "+textobjects",
  #else
*** ../vim-7.4.1769/src/vim.h   2016-04-14 12:46:33.616678646 +0200
--- src/vim.h   2016-04-21 20:10:04.041297662 +0200
***************
*** 1558,1563 ****
--- 1558,1588 ----
  #define MSG_PUTS_LONG(s)          msg_puts_long_attr((char_u *)(s), 0)
  #define MSG_PUTS_LONG_ATTR(s, a)    msg_puts_long_attr((char_u *)(s), (a))
  
+ #ifdef FEAT_GUI
+ # ifdef FEAT_TERMTRUECOLOR
+ #  define GUI_FUNCTION(f)         (gui.in_use ? gui_##f : termtrue_##f)
+ #  define USE_24BIT               (gui.in_use || p_guicolors)
+ # else
+ #  define GUI_FUNCTION(f)         gui_##f
+ #  define USE_24BIT               gui.in_use
+ # endif
+ #else
+ # ifdef FEAT_TERMTRUECOLOR
+ #  define GUI_FUNCTION(f)         termtrue_##f
+ #  define USE_24BIT               p_guicolors
+ # endif
+ #endif
+ #ifdef FEAT_TERMTRUECOLOR
+ # define IS_CTERM                 (t_colors > 1 || p_guicolors)
+ #else
+ # define IS_CTERM                 (t_colors > 1)
+ #endif
+ #ifdef GUI_FUNCTION
+ # define GUI_MCH_GET_RGB          GUI_FUNCTION(mch_get_rgb)
+ # define GUI_MCH_GET_COLOR        GUI_FUNCTION(mch_get_color)
+ # define GUI_GET_COLOR                    GUI_FUNCTION(get_color)
+ #endif
+ 
  /* Prefer using emsg3(), because perror() may send the output to the wrong
   * destination and mess up the screen. */
  #ifdef HAVE_STRERROR
*** ../vim-7.4.1769/src/version.c       2016-04-21 20:00:47.926966425 +0200
--- src/version.c       2016-04-21 21:04:07.640425463 +0200
***************
*** 750,751 ****
--- 755,758 ----
  {   /* Add new patch number below this line */
+ /**/
+     1770,
  /**/

-- 
Individualists unite!

 /// Bram Moolenaar -- b...@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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui