godlygeek / csapprox

Make gvim-only colorschemes work transparently in terminal vim
http://www.vim.org/scripts/script.php?script_id=2390
211 stars 18 forks source link

Terminal "only" has 16777216 colors #17

Open trombonehero opened 4 years ago

trombonehero commented 4 years ago

After recently updating macOS (v10.15.6), Alacritty (v0.5.0) and Vim (v8.2.1456), CSApprox starts emitting a warning about having not enough terminal colours even though I actually have quite a lot:

CSApprox skipped; terminal only has 16777216 colors, not 88/256

So I have too many colours to use csapprox? :)

godlygeek commented 4 years ago

What's the output you get from:

:verb set term? t_Co? t_AB? t_AF? t_Sb? t_Sf?

And, for that matter, the full output from:

:set termcap

In the terminal outside of vim, does tput colors also print 16777216?

What color does "hello" print in if you run this in a terminal?

tput setaf 16776960; echo hello; tput sgr 0

And can you paste what this gives you?

infocmp
trombonehero commented 3 years ago

Thanks for your response, and sorry that it's taken me so long to respond to your response! The output of :verb set term? t_Co? t_AB? t_AF? t_Sb? t_Sf? is:

 term=builtin_gui
  t_Co=16777216
  t_AB=
  t_AF=
  t_Sb=
  t_Sf=

and :set termcap gives:

  t_AB=               t_EI=               t_RS=               t_ts=
  t_AF=               t_fs=               t_RT=               t_u7=
  t_AU=               t_GP=               t_RV=               t_ue=^[|8H
  t_AL=^[|%p1%dI      t_IE=               t_Sb=               t_us=^[|8h
  t_al=^[|i           t_IS=               t_SC=               t_ut=y
  t_bc=               t_ke=               t_se=^[|16H         t_vb=^[|f
  t_BE=               t_ks=               t_Sf=               t_ve=
  t_BD=               t_le=^H             t_SH=               t_vi=
  t_cd=               t_mb=               t_SI=               t_VS=
  t_ce=^[|$           t_md=^[|2h          t_Si=               t_vs=
  t_cl=^[|C           t_me=^[|31H         t_so=^[|16h         t_WP=
  t_Ce=^[|8C          t_mr=^[|1h          t_SR=               t_WS=
  t_Co=16777216       t_ms=y              t_sr=               t_xn=y
  t_CS=               t_nd=^L             t_ST=               t_xs=
  t_Cs=^[|8c          t_op=               t_Te=^[|4C          t_ZH=^[|4h
  t_da=               t_RF=               t_te=               t_ZR=^[|4H
  t_db=               t_RB=               t_TE=               t_8f=
  t_DL=^[|%p1%dD      t_RC=               t_ti=               t_8b=
  t_dl=^[|d           t_RI=               t_TI=               t_8u=
  t_EC=               t_Ri=               t_Ts=^[|4c
  t_cm=^[|%p1%d;%p2%dM
  t_cs=^[|%p1%d;%p2%dR
  t_CV=^[|%p1%d;%p2%dV

Outside of vim, tput colors gives 256; the $TERM environment variable is screen-256color.

Running tput setaf 16776960; echo hello; tput sgr 0 gives a regular white/grey hello.

Finally, infocmp outputs:

#       Reconstructed via infocmp from file: /opt/local/share/terminfo/73/screen-256color
screen-256color|GNU Screen with 256 colors,
        am, km, mir, msgr, xenl,
        colors#0x100, cols#80, it#8, lines#24, pairs#0x10000,
        acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
        clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=\r,
        csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
        cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
        cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
        cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
        dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
        enacs=\E(B\E)0, flash=\Eg, home=\E[H, hpa=\E[%i%p1%dG,
        ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
        ind=\n, indn=\E[%p1%dS, is2=\E)0, kbs=^H, kcbt=\E[Z,
        kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
        kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
        kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
        kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
        khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
        nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
        rin=\E[%p1%dT, rmacs=^O, rmcup=\E[?1049l, rmir=\E[4l,
        rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m,
        rs2=\Ec\E[?1000l\E[?25h, sc=\E7,
        setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
        setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
        sgr=\E[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t\016%e\017%;,
        sgr0=\E[m\017, smacs=^N, smcup=\E[?1049h, smir=\E[4h,
        smkx=\E[?1h\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g,
        vpa=\E[%i%p1%dd,
tommyjcarpenter commented 3 years ago

I have this exact issue with the exact error message; 16777... on arch linux using the latest Gvim (does not happen in vim in the terminal)

In terminal:

>>> tput colors
256  

>>> tput setaf 16776960; echo hello; tput sgr 0

hello

>>> infocmp
#   Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-256color
xterm-256color|xterm with 256 colors,
    am, bce, ccc, km, mc5i, mir, msgr, npc, xenl,
    colors#0x100, cols#80, it#8, lines#24, pairs#0x10000,
    acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
    bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
    clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
    csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
    cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
    cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
    dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
    el1=\E[1K, flash=\E[?5h$<100/>\E[?5l, home=\E[H,
    hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
    il=\E[%p1%dL, il1=\E[L, ind=\n, indn=\E[%p1%dS,
    initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
    invis=\E[8m, is2=\E[!p\E[?3;4l\E[4l\E>, kDC=\E[3;2~,
    kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D,
    kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C, ka1=\EOw,
    ka3=\EOy, kb2=\EOu, kbs=^H, kc1=\EOq, kc3=\EOs, kcbt=\E[Z,
    kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
    kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~,
    kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q,
    kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~,
    kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~,
    kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~,
    kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S,
    kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~,
    kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~,
    kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q,
    kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~,
    kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~,
    kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~,
    kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q,
    kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
    kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
    kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
    kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
    kf8=\E[19~, kf9=\E[20~, khome=\EOH, kich1=\E[2~,
    kind=\E[1;2B, kmous=\E[<, knp=\E[6~, kpp=\E[5~,
    kri=\E[1;2A, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, meml=\El,
    memu=\Em, mgc=\E[?69l, oc=\E]104\007, op=\E[39;49m, rc=\E8,
    rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM,
    rin=\E[%p1%dT, ritm=\E[23m, rmacs=\E(B, rmam=\E[?7l,
    rmcup=\E[?1049l\E[23;0;0t, rmir=\E[4l, rmkx=\E[?1l\E>,
    rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m,
    rs1=\Ec\E]104\007, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7,
    setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
    setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
    sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
    sgr0=\E(B\E[m, sitm=\E[3m, smacs=\E(0, smam=\E[?7h,
    smcup=\E[?1049h\E[22;0;0t,
    smglr=\E[?69h\E[%i%p1%d;%p2%ds, smir=\E[4h,
    smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m, smul=\E[4m,
    tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
    u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,
sedimentation-fault commented 2 years ago

Open the .vim file of GSApprox, e.g. /usr/share/vim/vimfiles/plugin/CSApprox.vim

Find

  " Return if not running in an 88/256 color terminal
  if &t_Co != 256 && &t_Co != 88
    if &verbose && &t_Co != ''
      echomsg "CSApprox skipped; terminal only has" &t_Co "colors, not 88/256"
      echomsg "Try checking :help csapprox-terminal for workarounds"
    endif

    return
  endif

Change the inner 'if' to your liking. For me, up to the upgrade to vim/gvim 8.2.3741, _tCo was empty, so the message was not printed because of this, not because it should not be printed. As you see in the inner 'if', the message is printed if verbose mode is on and _tCo is not empty. So, if your _tCo now (after a vim/gvim upgrade) has (finally) the correct value of 16777216, instead of being empty, then the message is correct.

You may of course find it annoying and change the inner 'if' to

    if &verbose && &t_Co != '16777216'
      echomsg "CSApprox skipped; terminal has" &t_Co "colors, not 88/256"
      echomsg "Try checking :help csapprox-terminal for workarounds"
  endif

or whatever other combination of conditions you like. I have changed mine to

    if &verbose && &t_Co != '' && &t_Co != '16777216'
      echomsg "CSApprox skipped; terminal has" &t_Co "colors, not 88/256"
      echomsg "Try checking :help csapprox-terminal for workarounds"
    endif

Of course, CSApprox is still NOT loaded (and correctly so) - only the message is suppressed, even in verbose mode.