csapprox icon indicating copy to clipboard operation
csapprox copied to clipboard

Terminal "only" has 16777216 colors

Open trombonehero opened this issue 5 years ago • 4 comments

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? :)

trombonehero avatar Aug 24 '20 12:08 trombonehero

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

godlygeek avatar Aug 31 '20 03:08 godlygeek

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,

trombonehero avatar Nov 17 '20 01:11 trombonehero

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,

tommyjcarpenter avatar Jan 25 '21 21:01 tommyjcarpenter

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, t_Co 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 t_Co is not empty. So, if your t_Co 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.

sedimentation-fault avatar Jan 31 '22 21:01 sedimentation-fault