New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MacでVimの端末を開くと背景色の表示が灰色になる #1096

Closed
KiYugadgeter opened this Issue Sep 19, 2017 · 24 comments

Comments

Projects
None yet
3 participants
@KiYugadgeter

KiYugadgeter commented Sep 19, 2017

質問・報告の内容

(Stackoverflow日本語版でも質問しましたがここにもあげておきます)

Vim terminalの背景色を変える - スタック・オーバーフロー
Vimの端末機能:terminalを起動すると背景色が灰色に表示されてしまいます。

macOSのTerminal.appでterminalを開くと背景色が灰色で表示されます。
Vimはhomebrewで--HEADオプション付きでビルドされていて、vim --versionは下のようになっています
Terminal.appは256色表示までしか対応していないため
TERM=xterm-256colorとなっており、さらに私はvimrcでt_Co=256に指定しています。

Vimのバージョン

8.0.1127

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Sep 19 2017 21:07:02)
MacOS X (unix) version
Included patches: 1-1127
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
+acl             +file_in_path    +mouse_sgr       +tag_old_static
+arabic          +find_in_path    -mouse_sysmouse  -tag_any_white
+autocmd         +float           +mouse_urxvt     -tcl
-balloon_eval    +folding         +mouse_xterm     +termguicolors
-browse          -footer          +multi_byte      +terminal
++builtin_terms  +fork()          +multi_lang      +terminfo
+byte_offset     -gettext         -mzscheme        +termresponse
+channel         -hangul_input    +netbeans_intg   +textobjects
+cindent         +iconv           +num64           +timers
-clientserver    +insert_expand   +packages        +title
+clipboard       +job             +path_extra      -toolbar
+cmdline_compl   +jumplist        +perl            +user_commands
+cmdline_hist    +keymap          +persistent_undo +vertsplit
+cmdline_info    +lambda          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       -python          +viminfo
+cscope          +lispindent      +python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con      +lua             +rightleft       +windows
+diff            +menu            +ruby            +writebackup
+digraphs        +mksession       +scrollbind      -X11
-dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     -xim
+emacs_tags      -mouseshape      +startuptime     -xpm
+eval            +mouse_dec       +statusline      -xsmp
+ex_extra        -mouse_gpm       -sun_workshop    -xterm_clipboard
+extra_search    -mouse_jsbterm   +syntax          -xterm_save
+farsi           +mouse_netterm   +tag_binary      
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
  fall-back for $VIM: "/usr/local/share/vim"
Compilation: clang -c -I. -Iproto -DHAVE_CONFIG_H   -DMACOS_X_UNIX  -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       
Linking: clang   -L. -L/usr/local/lib -F/private/tmp/vim-20170919-42330-1w5vwiy/Frameworks -L/usr/local/lib -o vim        -lm  -lncurses -liconv -framework Cocoa  -L/usr/local/lib -llua -fstack-protector  -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -lperl  -L/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/config-3.6m-darwin -lpython3.6m -framework CoreFoundation  -lruby.2.0.0 -lobjc    

設定値

.vimrc

t_Co=256
set notermguicolors

環境変数

TERM=xterm-256color

OSの種類/ディストリ/バージョン

  • macOS 10.12.6

使用している or 関係していそうなプラグイン

vim -N -u NONEで起動しても再現したので、なさそう

@KiYugadgeter KiYugadgeter changed the title from Vimの端末機能で背景色の表示が灰色になる to MacでVimの端末を開くと背景色の表示が灰色になる Sep 19, 2017

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 22, 2017

Member

notermguicolor なので

https://github.com/vim/vim/blob/2e6ab18729a634f3223a92be318e98e87b572a7b/src/terminal.c#L2560-L2569

ここに入り、おそらく Terminal ハイライトグループを設定されておられないはずなので id は 0 なんだけど

    void
syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
{
    struct hl_group	*sgp;

    hl_id = syn_get_final_id(hl_id);
    sgp = &HL_TABLE()[hl_id - 1];	    /* index is ID minus one */
    *fgp = sgp->sg_cterm_fg - 1;
    *bgp = sgp->sg_cterm_bg - 1;
}

これ他のシンタックスハイライトを見てしまってないかなー。

diff --git a/src/syntax.c b/src/syntax.c
index 6361bd7aa..554629fb9 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -9753,6 +9753,12 @@ syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
     struct hl_group	*sgp;
 
     hl_id = syn_get_final_id(hl_id);
+    if (hl_id == 0)
+    {
+	*fgp = -1;
+	*bgp = -1;
+	return;
+    }
     sgp = &HL_TABLE()[hl_id - 1];	    /* index is ID minus one */
     *fgp = sgp->sg_cterm_fg - 1;
     *bgp = sgp->sg_cterm_bg - 1;
Member

mattn commented Sep 22, 2017

notermguicolor なので

https://github.com/vim/vim/blob/2e6ab18729a634f3223a92be318e98e87b572a7b/src/terminal.c#L2560-L2569

ここに入り、おそらく Terminal ハイライトグループを設定されておられないはずなので id は 0 なんだけど

    void
syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
{
    struct hl_group	*sgp;

    hl_id = syn_get_final_id(hl_id);
    sgp = &HL_TABLE()[hl_id - 1];	    /* index is ID minus one */
    *fgp = sgp->sg_cterm_fg - 1;
    *bgp = sgp->sg_cterm_bg - 1;
}

これ他のシンタックスハイライトを見てしまってないかなー。

diff --git a/src/syntax.c b/src/syntax.c
index 6361bd7aa..554629fb9 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -9753,6 +9753,12 @@ syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
     struct hl_group	*sgp;
 
     hl_id = syn_get_final_id(hl_id);
+    if (hl_id == 0)
+    {
+	*fgp = -1;
+	*bgp = -1;
+	return;
+    }
     sgp = &HL_TABLE()[hl_id - 1];	    /* index is ID minus one */
     *fgp = sgp->sg_cterm_fg - 1;
     *bgp = sgp->sg_cterm_bg - 1;
@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Sep 22, 2017

Member

GNOME-Terminal on Ubuntu 16.04 でも同様でした。
端末アプリケーション側でウィンドウの背景色を白 (255, 255, 255) にして
シェル上で printf "\e[48;5;255m \e[0m\n" (256colorの白) を出力すると灰色っぽいので、
256colorで背景色を設定するとウインドウ自体の背景色と異なってしまうのだと思います。

Member

ichizok commented Sep 22, 2017

GNOME-Terminal on Ubuntu 16.04 でも同様でした。
端末アプリケーション側でウィンドウの背景色を白 (255, 255, 255) にして
シェル上で printf "\e[48;5;255m \e[0m\n" (256colorの白) を出力すると灰色っぽいので、
256colorで背景色を設定するとウインドウ自体の背景色と異なってしまうのだと思います。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 22, 2017

Member

@ichizok えと、仕様通りという事でしょうか?(すいません確認してません)

Member

mattn commented Sep 22, 2017

@ichizok えと、仕様通りという事でしょうか?(すいません確認してません)

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Sep 22, 2017

Member

だと思います。

Member

ichizok commented Sep 22, 2017

だと思います。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 22, 2017

Member

#1096 (comment) の件は現状 syn_id2cterm_bg は terminal.c からしか呼んでなくて、かつ id > 0 の時にしか来ないので、不恰好ではあるけど放置します。

Member

mattn commented Sep 22, 2017

#1096 (comment) の件は現状 syn_id2cterm_bg は terminal.c からしか呼んでなくて、かつ id > 0 の時にしか来ないので、不恰好ではあるけど放置します。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Sep 22, 2017

Member

端末アプリケーション側でウィンドウの背景色を白 (255, 255, 255) にして
シェル上で printf "\e[48;5;255m \e[0m\n" (256colorの白) を出力すると灰色っぽいので、
256colorで背景色を設定するとウインドウ自体の背景色と異なってしまうのだと思います。

すみません、アプリケーション側のANSIカラーパレットの設定が原因でした。
なので、例えば Terminal.app ならプロファイル設定でANSIカラーを調整すれば白背景になります。

Member

ichizok commented Sep 22, 2017

端末アプリケーション側でウィンドウの背景色を白 (255, 255, 255) にして
シェル上で printf "\e[48;5;255m \e[0m\n" (256colorの白) を出力すると灰色っぽいので、
256colorで背景色を設定するとウインドウ自体の背景色と異なってしまうのだと思います。

すみません、アプリケーション側のANSIカラーパレットの設定が原因でした。
なので、例えば Terminal.app ならプロファイル設定でANSIカラーを調整すれば白背景になります。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Sep 22, 2017

Member

@KiYugadgeter お使いの端末アプリケーションでカラーパレットの設定を調整してみてください。

Member

ichizok commented Sep 22, 2017

@KiYugadgeter お使いの端末アプリケーションでカラーパレットの設定を調整してみてください。

@KiYugadgeter

This comment has been minimized.

Show comment
Hide comment
@KiYugadgeter

KiYugadgeter Sep 22, 2017

Terminal.appの環境設定を開いて自分が使っているプロファイルのANSIカラーのホワイト (明)(一番右下)を調整したところ背景色も白くなりました
2017-09-22 23 52 25

KiYugadgeter commented Sep 22, 2017

Terminal.appの環境設定を開いて自分が使っているプロファイルのANSIカラーのホワイト (明)(一番右下)を調整したところ背景色も白くなりました
2017-09-22 23 52 25

@KiYugadgeter

This comment has been minimized.

Show comment
Hide comment
@KiYugadgeter

KiYugadgeter Sep 23, 2017

@mattn @ichizok ちなみにTerminalのカラーグループを

autocmd * ColorScheme highlight Terminal ctermbg=none

と設定すれば透明(背景色と同じ)にすることができるということでしょうか?

KiYugadgeter commented Sep 23, 2017

@mattn @ichizok ちなみにTerminalのカラーグループを

autocmd * ColorScheme highlight Terminal ctermbg=none

と設定すれば透明(背景色と同じ)にすることができるということでしょうか?

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 23, 2017

Member

libvterm に透明という属性が無い気がしますので、現状は vim の背景色という事になると思います。(ソースを見た限りです)

Member

mattn commented Sep 23, 2017

libvterm に透明という属性が無い気がしますので、現状は vim の背景色という事になると思います。(ソースを見た限りです)

@KiYugadgeter

This comment has been minimized.

Show comment
Hide comment
@KiYugadgeter

KiYugadgeter Sep 23, 2017

(コメントを消してしまったので書き直しました)
@mattn terminalでのvimの背景色というのは256colorの白(Terminal.appでは灰色に表示される)ということになるのでしょうか?
ANSIカラーの設定をデフォルトに戻した後にautocmd * ColorScheme highlight Terminal ctermbg=noneと設定したのですが背景色が白ではなく灰色になります

KiYugadgeter commented Sep 23, 2017

(コメントを消してしまったので書き直しました)
@mattn terminalでのvimの背景色というのは256colorの白(Terminal.appでは灰色に表示される)ということになるのでしょうか?
ANSIカラーの設定をデフォルトに戻した後にautocmd * ColorScheme highlight Terminal ctermbg=noneと設定したのですが背景色が白ではなく灰色になります

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 23, 2017

Member

none を設定したとしても、上記で書いた通り libvterm には透明という属性が無いので、何かしらの色を与えてあげなくてはなりません。現状は none なのでカラースキームの背景色、つまり Normal グループの背景色になると思います。こちらも試してはないので、本当かは分かりません。

Member

mattn commented Sep 23, 2017

none を設定したとしても、上記で書いた通り libvterm には透明という属性が無いので、何かしらの色を与えてあげなくてはなりません。現状は none なのでカラースキームの背景色、つまり Normal グループの背景色になると思います。こちらも試してはないので、本当かは分かりません。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 23, 2017

Member

あ、端末版だと Normal グループは無かったですね。すみません、このパッチ試して頂けますか?

diff --git a/src/syntax.c b/src/syntax.c
index e0736cb63..3e6f80734 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -9762,6 +9762,12 @@ syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
     struct hl_group	*sgp;
 
     hl_id = syn_get_final_id(hl_id);
+    if (hl_id == 0)
+    {
+	*fgp = -1;
+	*bgp = -1;
+	return;
+    }
     sgp = &HL_TABLE()[hl_id - 1];	    /* index is ID minus one */
     *fgp = sgp->sg_cterm_fg - 1;
     *bgp = sgp->sg_cterm_bg - 1;
Member

mattn commented Sep 23, 2017

あ、端末版だと Normal グループは無かったですね。すみません、このパッチ試して頂けますか?

diff --git a/src/syntax.c b/src/syntax.c
index e0736cb63..3e6f80734 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -9762,6 +9762,12 @@ syn_id2cterm_bg(int hl_id, int *fgp, int *bgp)
     struct hl_group	*sgp;
 
     hl_id = syn_get_final_id(hl_id);
+    if (hl_id == 0)
+    {
+	*fgp = -1;
+	*bgp = -1;
+	return;
+    }
     sgp = &HL_TABLE()[hl_id - 1];	    /* index is ID minus one */
     *fgp = sgp->sg_cterm_fg - 1;
     *bgp = sgp->sg_cterm_bg - 1;
@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Sep 23, 2017

Member

https://github.com/vim/vim/compare/master...ichizok:feature/term-no-color.diff
Terminal 未設定かNONEで背景と同じになる(色を設定しない)ようにしてみました

Member

ichizok commented Sep 23, 2017

https://github.com/vim/vim/compare/master...ichizok:feature/term-no-color.diff
Terminal 未設定かNONEで背景と同じになる(色を設定しない)ようにしてみました

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 23, 2017

Member

@ichizok あ、alpha なんてのかあったのか。知らんかった。 👍

Member

mattn commented Sep 23, 2017

@ichizok あ、alpha なんてのかあったのか。知らんかった。 👍

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Sep 23, 2017

Member

@mattn 勝手に追加したんですけど、libvtermのソースいじるのはまずいですかね?

Member

ichizok commented Sep 23, 2017

@mattn 勝手に追加したんですけど、libvtermのソースいじるのはまずいですかね?

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 23, 2017

Member

あっw libvterm を弄ったかw
Bram の考えなので聞いてみないと分からないす。

Member

mattn commented Sep 23, 2017

あっw libvterm を弄ったかw
Bram の考えなので聞いてみないと分からないす。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 23, 2017

Member

一回出してみて反応悪そうなら vterm_state_get_default_colors で比較しながらってのもあるかもですね。

Member

mattn commented Sep 23, 2017

一回出してみて反応悪そうなら vterm_state_get_default_colors で比較しながらってのもあるかもですね。

@KiYugadgeter

This comment has been minimized.

Show comment
Hide comment
@KiYugadgeter

KiYugadgeter Sep 23, 2017

@mattn @ichizok パッチ適用してビルドしてみましたが灰色のままでした

KiYugadgeter commented Sep 23, 2017

@mattn @ichizok パッチ適用してビルドしてみましたが灰色のままでした

@mattn mattn reopened this Sep 24, 2017

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Sep 25, 2017

Member

パッチ更新。
@KiYugadgeter 一応、パッチがきちんと当たっているか確認してもらえますか?

Member

ichizok commented Sep 25, 2017

パッチ更新。
@KiYugadgeter 一応、パッチがきちんと当たっているか確認してもらえますか?

@KiYugadgeter

This comment has been minimized.

Show comment
Hide comment
@KiYugadgeter

KiYugadgeter Sep 25, 2017

@mattn @ichizok https://github.com/vim/vim/compare/master...ichizok:feature/term-no-color.diff
を適用してデフォルトのANSIカラーコードのprofileでterminalを起動したところ
白く(#FFFFFFで)表示されました。

KiYugadgeter commented Sep 25, 2017

@mattn @ichizok https://github.com/vim/vim/compare/master...ichizok:feature/term-no-color.diff
を適用してデフォルトのANSIカラーコードのprofileでterminalを起動したところ
白く(#FFFFFFで)表示されました。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Oct 16, 2017

Member

vim/vim@a0a6f27#commitcomment-24784964
なぜアプリケーションのfg/bg colorをパススルーしたらダメなのかよくわからない...

Member

ichizok commented Oct 16, 2017

vim/vim@a0a6f27#commitcomment-24784964
なぜアプリケーションのfg/bg colorをパススルーしたらダメなのかよくわからない...

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Dec 2, 2017

Member

8.0.1359 から :hi Terminal 未設定または NONE の場合にアプリケーション自体の fg/bg color を透過するような動作になりましたが、Bram の意図通りなのかは不明です。

Member

ichizok commented Dec 2, 2017

8.0.1359 から :hi Terminal 未設定または NONE の場合にアプリケーション自体の fg/bg color を透過するような動作になりましたが、Bram の意図通りなのかは不明です。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Dec 8, 2017

Member

@KiYugadgeter 現状でこれ #1096 (comment) は実現できているので、クローズしてもよいでしょうか?

Member

ichizok commented Dec 8, 2017

@KiYugadgeter 現状でこれ #1096 (comment) は実現できているので、クローズしてもよいでしょうか?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment