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

vim.exe 256色計画 #1068

Closed
ntak opened this Issue Aug 10, 2017 · 157 comments

Comments

Projects
None yet
6 participants
@ntak

ntak commented Aug 10, 2017

#1057 より。Windows 下での vim.exe の :terminal ウィンドウの発色を向上させる目的です。

追記:vim.exe 256色計画と :terminal の発色は切り離し、以後ここでは vim.exe 256色の話をします。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 10, 2017

今の Win10 では ^[[37m (前景白) がおそらく RGB(255,255,255) になっていて、cmd.exe での前景白デフォルト RGB(192,192,192) の発色との整合性が取れないので。どちらを取るかちょっと迷いどころではあります。
*nix 環境での ^[[30m - ^[[37m の 8色はおそらく Win10 での 255 とかいうあきらかにサチった値でなく多少輝度を落とした 192 あたりだと思うんですが、そのあたりこれから Linux 環境を作って見てみます。

ntak commented Aug 10, 2017

今の Win10 では ^[[37m (前景白) がおそらく RGB(255,255,255) になっていて、cmd.exe での前景白デフォルト RGB(192,192,192) の発色との整合性が取れないので。どちらを取るかちょっと迷いどころではあります。
*nix 環境での ^[[30m - ^[[37m の 8色はおそらく Win10 での 255 とかいうあきらかにサチった値でなく多少輝度を落とした 192 あたりだと思うんですが、そのあたりこれから Linux 環境を作って見てみます。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 10, 2017

現状の vim.exe に対するパッチ(再掲):
https://gist.github.com/ntak/42f6287db4184fc0dc178dfed7dea49f
set termguicolors で発動します。

ntak commented Aug 10, 2017

現状の vim.exe に対するパッチ(再掲):
https://gist.github.com/ntak/42f6287db4184fc0dc178dfed7dea49f
set termguicolors で発動します。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 10, 2017

アッアッ(´ー`)寝ぼけてました
ユーザによるカラースキームの変更という概念をさっぱり忘れており…サチったとかは取り消します。
とにかく一度休みを入れて方針などまとめてきます。

ntak commented Aug 10, 2017

アッアッ(´ー`)寝ぼけてました
ユーザによるカラースキームの変更という概念をさっぱり忘れており…サチったとかは取り消します。
とにかく一度休みを入れて方針などまとめてきます。

@koron

This comment has been minimized.

Show comment
Hide comment
@koron

koron Aug 11, 2017

Member

Win10 では端末の色(デフォルトパレット)が見直されるらしいですね。

https://blogs.msdn.microsoft.com/commandline/2017/08/02/updating-the-windows-console-colors/

Member

koron commented Aug 11, 2017

Win10 では端末の色(デフォルトパレット)が見直されるらしいですね。

https://blogs.msdn.microsoft.com/commandline/2017/08/02/updating-the-windows-console-colors/

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 11, 2017

色の情報をきっちり取得できるかが問題になってきますけれど、今回の発色数の変更についてはAPIを一切提供しないとのことらしいので、予想するにいろいろと面倒が起きそうではあります。
まとめについては今夜もう一晩コードを追いたいのでその後にします。すみません。
どうも termguicolors に突っ込んでしまうと bad solution. とか言われそうなケハイ…。

ntak commented Aug 11, 2017

色の情報をきっちり取得できるかが問題になってきますけれど、今回の発色数の変更についてはAPIを一切提供しないとのことらしいので、予想するにいろいろと面倒が起きそうではあります。
まとめについては今夜もう一晩コードを追いたいのでその後にします。すみません。
どうも termguicolors に突っ込んでしまうと bad solution. とか言われそうなケハイ…。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Aug 11, 2017

Member

vim.exe を 'termguicolors' & 24bit color に対応させる(表示)のと、:terminal 内で 256色や24bit colorを使えるようにする(色情報を正しく取得する)のは分けて考えましょう。

で、このissueは前者のために作っていただいたつもりだったのですが、認識ずれてますかね? 少なくとも現状のパッチは前者のためのものとなっていますし、引き続きこのissueは vim.exe の termguicolors 対応ということで進めませんか?

で、後者に関しては #1057 の範疇だと思いますが、必要であれば新規にissueを立ててもよいと思います。

Member

k-takata commented Aug 11, 2017

vim.exe を 'termguicolors' & 24bit color に対応させる(表示)のと、:terminal 内で 256色や24bit colorを使えるようにする(色情報を正しく取得する)のは分けて考えましょう。

で、このissueは前者のために作っていただいたつもりだったのですが、認識ずれてますかね? 少なくとも現状のパッチは前者のためのものとなっていますし、引き続きこのissueは vim.exe の termguicolors 対応ということで進めませんか?

で、後者に関しては #1057 の範疇だと思いますが、必要であれば新規にissueを立ててもよいと思います。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata
Member

k-takata commented Aug 11, 2017

なお、端末のパレットの色を設定・取得するAPIは、Vistaで追加されました。
https://docs.microsoft.com/en-us/windows/console/setconsolescreenbufferinfoex
https://docs.microsoft.com/en-us/windows/console/getconsolescreenbufferinfoex

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 12, 2017

いろいろ難しいところで、:terminal の色表示がなんとかならないかと考えてコードを書いていたら先に vim.exe の termguicolors の発色が増えてしまったという経過です。増えてしまったんです。

あー色増えたなくらいにしか考えてなかったので runtime\syntax\colortest.vim で見たのもついさっきだという…。きれいに出てますね…。

それはそれとしてというより、:terminal の色を正常にするのと termguicolors の色を増やすことはコード的に不可分だとさっきまで思っていたので…分けた方がいいですねこの際。分けます。

なんだか感覚的には :terminal の方にはあとちょっとの実装でまともな色がつきそうな気配なので、そっちは新規には issue を立てないで #1057 で進めておきたいです。

ntak commented Aug 12, 2017

いろいろ難しいところで、:terminal の色表示がなんとかならないかと考えてコードを書いていたら先に vim.exe の termguicolors の発色が増えてしまったという経過です。増えてしまったんです。

あー色増えたなくらいにしか考えてなかったので runtime\syntax\colortest.vim で見たのもついさっきだという…。きれいに出てますね…。

それはそれとしてというより、:terminal の色を正常にするのと termguicolors の色を増やすことはコード的に不可分だとさっきまで思っていたので…分けた方がいいですねこの際。分けます。

なんだか感覚的には :terminal の方にはあとちょっとの実装でまともな色がつきそうな気配なので、そっちは新規には issue を立てないで #1057 で進めておきたいです。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 12, 2017

うーん…GetConsoleScreenBufferInfoExEx が欲しい!
コンソールの任意の位置の 24bit値カラーを取る API がないんですよね、VTerm に頼りたいところ。

あ、こっちの issue は vim.exe の色数対応で進めていきたいです。

ntak commented Aug 12, 2017

うーん…GetConsoleScreenBufferInfoExEx が欲しい!
コンソールの任意の位置の 24bit値カラーを取る API がないんですよね、VTerm に頼りたいところ。

あ、こっちの issue は vim.exe の色数対応で進めていきたいです。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 14, 2017

どうも細かい部分で色属性がマジックナンバーとして埋め込まれていてきりがなかったので現状の term=win32 を残したまま term=24bitcmd のような別の termcap を作ることにしました。

今あるパッチはメンテナンス面で問題があるように思うので、よほどのことがない限り放棄します。

ntak commented Aug 14, 2017

どうも細かい部分で色属性がマジックナンバーとして埋め込まれていてきりがなかったので現状の term=win32 を残したまま term=24bitcmd のような別の termcap を作ることにしました。

今あるパッチはメンテナンス面で問題があるように思うので、よほどのことがない限り放棄します。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 15, 2017

以前のパッチと同等の表示ができるところまで追い込みました。set term=24bitcmdset termguicolors の両方がそろった時に色属性の変化が発動します。
https://gist.github.com/ntak/42cf0f1568c0877ef88dbc7d1c0d63ab

ntak commented Aug 15, 2017

以前のパッチと同等の表示ができるところまで追い込みました。set term=24bitcmdset termguicolors の両方がそろった時に色属性の変化が発動します。
https://gist.github.com/ntak/42cf0f1568c0877ef88dbc7d1c0d63ab

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 16, 2017

ようやく完成に近い現物が出せました。そして、ちょっとお伺いしたいことがあります。
Windows で環境変数 TERM は使うべきではない、ですよね?

ntak commented Aug 16, 2017

ようやく完成に近い現物が出せました。そして、ちょっとお伺いしたいことがあります。
Windows で環境変数 TERM は使うべきではない、ですよね?

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 16, 2017

いや、使ってもいいのかな?なんだかわからなくなってきた…実装は進めておきます。

ntak commented Aug 16, 2017

いや、使ってもいいのかな?なんだかわからなくなってきた…実装は進めておきます。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Aug 16, 2017

Member

TERM を使うのは問題ないと思います。ただ、TERM が設定されてなくて、OSのバージョン的に 24bit色が使用可能ならば、('termguicolors' が設定さえされていれば)自動的に 24bit色を使ってくれた方が便利な気がします。
TERM の値ですが、xtermの場合、xtermxterm-256color だったりするので、それをまねて win32win32-24bit などはどうでしょう。

Member

k-takata commented Aug 16, 2017

TERM を使うのは問題ないと思います。ただ、TERM が設定されてなくて、OSのバージョン的に 24bit色が使用可能ならば、('termguicolors' が設定さえされていれば)自動的に 24bit色を使ってくれた方が便利な気がします。
TERM の値ですが、xtermの場合、xtermxterm-256color だったりするので、それをまねて win32win32-24bit などはどうでしょう。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 17, 2017

思うところに合致したので TERM の値を win32-24bit に変更して進めます。ありがとうございます。
notermguicolorsterm=win32-24bit も実用できる段階に持ってきたので、OS のバージョンを見て TERM の未設定時に採用される値を変化させるようにします。
さて…。

ntak commented Aug 17, 2017

思うところに合致したので TERM の値を win32-24bit に変更して進めます。ありがとうございます。
notermguicolorsterm=win32-24bit も実用できる段階に持ってきたので、OS のバージョンを見て TERM の未設定時に採用される値を変化させるようにします。
さて…。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Aug 17, 2017

Member

:terminal から起動するプロセスが、TERM 環境変数を見た場合の事を考えるとちょっと心配です。

Member

mattn commented Aug 17, 2017

:terminal から起動するプロセスが、TERM 環境変数を見た場合の事を考えるとちょっと心配です。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 17, 2017

うーんやっぱり難易度が…別の環境変数、たとえば VIMTERM とか WIN32TERM とか作ったらクリアできる問題に見えなくもないですが見えるだけかもしれないですし、アプローチとして新規起動オプションを作るとか…ないか、なんかナイスアイデアが出てこないかなと自分の脳を練り込んでおります…。

ntak commented Aug 17, 2017

うーんやっぱり難易度が…別の環境変数、たとえば VIMTERM とか WIN32TERM とか作ったらクリアできる問題に見えなくもないですが見えるだけかもしれないですし、アプローチとして新規起動オプションを作るとか…ないか、なんかナイスアイデアが出てこないかなと自分の脳を練り込んでおります…。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Aug 17, 2017

Member

最新のパッチってどれでしょうか?

Member

mattn commented Aug 17, 2017

最新のパッチってどれでしょうか?

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 17, 2017

いま出します。

追記:いま出ました。
https://gist.github.com/ntak/ff15861b60aaca8fdf1582718086bb73

こうして長パッチをお見せするにあたってのベストな解決策は他にある気がしますが、いまいちたどり着けていません。

ntak commented Aug 17, 2017

いま出します。

追記:いま出ました。
https://gist.github.com/ntak/ff15861b60aaca8fdf1582718086bb73

こうして長パッチをお見せするにあたってのベストな解決策は他にある気がしますが、いまいちたどり着けていません。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Aug 17, 2017

Member

ありがとうございます。時間取れたら試します。

Member

mattn commented Aug 17, 2017

ありがとうございます。時間取れたら試します。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 17, 2017

あっ全然駄目… notermguicolors の方は見なかったことにしてください、なんか漏れてる…。

ntak commented Aug 17, 2017

あっ全然駄目… notermguicolors の方は見なかったことにしてください、なんか漏れてる…。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 17, 2017

notermguicolors の状態で term=win32-24bit とすると画面左上にエスケープシーケンスが漏れ出していましたが、これで抑止できました。

diff --git a/src/screen.c b/src/screen.c
index 55440f4a9..2d5ec67fc 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -9099,8 +9099,6 @@ screenclear2(void)
 #ifdef FEAT_WINDOWS
     redraw_tabline = TRUE;
 #endif
-    if (must_redraw == CLEAR)	/* no need to clear again */
-	must_redraw = NOT_VALID;
     compute_cmdrow();
     msg_row = cmdline_row;	/* put cursor on last line for messages */
     msg_col = 0;

ntak commented Aug 17, 2017

notermguicolors の状態で term=win32-24bit とすると画面左上にエスケープシーケンスが漏れ出していましたが、これで抑止できました。

diff --git a/src/screen.c b/src/screen.c
index 55440f4a9..2d5ec67fc 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -9099,8 +9099,6 @@ screenclear2(void)
 #ifdef FEAT_WINDOWS
     redraw_tabline = TRUE;
 #endif
-    if (must_redraw == CLEAR)	/* no need to clear again */
-	must_redraw = NOT_VALID;
     compute_cmdrow();
     msg_row = cmdline_row;	/* put cursor on last line for messages */
     msg_col = 0;
@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 18, 2017

Visual bell が汚ねえ花火だぜみたいになってるのが今の悩みどころです…。

ntak commented Aug 18, 2017

Visual bell が汚ねえ花火だぜみたいになってるのが今の悩みどころです…。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 19, 2017

Visual bell で画面を旧属性で白くして復帰したとき 24bit色は復帰してこないので再描画。

diff --git a/src/misc1.c b/src/misc1.c
index 5f8b092c0..71fb1a06b 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3706,7 +3706,13 @@ vim_beep(
 			&& !(gui.in_use && gui.starting)
 #endif
 			)
+		{
 		    out_str_cf(T_VB);
+#ifdef MSWIN
+		    redraw_later(CLEAR);
+		    update_screen(0);
+#endif
+		}
 		else
 		    out_char(BELL);
 #ifdef ELAPSED_FUNC

ntak commented Aug 19, 2017

Visual bell で画面を旧属性で白くして復帰したとき 24bit色は復帰してこないので再描画。

diff --git a/src/misc1.c b/src/misc1.c
index 5f8b092c0..71fb1a06b 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3706,7 +3706,13 @@ vim_beep(
 			&& !(gui.in_use && gui.starting)
 #endif
 			)
+		{
 		    out_str_cf(T_VB);
+#ifdef MSWIN
+		    redraw_later(CLEAR);
+		    update_screen(0);
+#endif
+		}
 		else
 		    out_char(BELL);
 #ifdef ELAPSED_FUNC
@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 20, 2017

FEAT_MSWIN_VCON で切り分けました。数日運用して害がないようならこのまま PR に回します。色々とありがとうございました。
https://gist.github.com/ntak/69dd68623ca65281ce52667a4dea48b2

ntak commented Aug 20, 2017

FEAT_MSWIN_VCON で切り分けました。数日運用して害がないようならこのまま PR に回します。色々とありがとうございました。
https://gist.github.com/ntak/69dd68623ca65281ce52667a4dea48b2

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Aug 20, 2017

Member
Member

mattn commented Aug 20, 2017

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Aug 20, 2017

Member

ESC ( という独自エスケープシーケンスを使っているのはどういう理由からでしょうか。

Member

k-takata commented Aug 20, 2017

ESC ( という独自エスケープシーケンスを使っているのはどういう理由からでしょうか。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 20, 2017

os_win32.c の mch_write をコードサイズの面で流用してまして、そこですでに利用している ESC | 以外ならなんでもよかったのですが、そこがそもそも ESC [ ではなく ESC | になっている避けられない理由が広大なコードベースの中になにかあるのだろうと考えて、ESC [ に関する追試をせずに見た目が似ていると思われる ESC ( を採用した、という流れです。
いろいろ突っ込まれどころはあります。

ntak commented Aug 20, 2017

os_win32.c の mch_write をコードサイズの面で流用してまして、そこですでに利用している ESC | 以外ならなんでもよかったのですが、そこがそもそも ESC [ ではなく ESC | になっている避けられない理由が広大なコードベースの中になにかあるのだろうと考えて、ESC [ に関する追試をせずに見た目が似ていると思われる ESC ( を採用した、という流れです。
いろいろ突っ込まれどころはあります。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 20, 2017

7 の方、よろしくお願いします。

set termguicolors は has("winvcon") で包まないと git あたりで文法ハイライトがなくなりますね…。

ntak commented Aug 20, 2017

7 の方、よろしくお願いします。

set termguicolors は has("winvcon") で包まないと git あたりで文法ハイライトがなくなりますね…。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Aug 20, 2017

Member

ESC [ を使った上で、エスケープシーケンスの解釈はWindowsに任せてしまうのは難しそうですかね?

あと、専用のhas() と :version での +winvcon 表示が必要だろうかというのが気になっています。
個人的にはWindows版のtermguicolor対応という扱いでもいいのではないかと考えています。

Member

k-takata commented Aug 20, 2017

ESC [ を使った上で、エスケープシーケンスの解釈はWindowsに任せてしまうのは難しそうですかね?

あと、専用のhas() と :version での +winvcon 表示が必要だろうかというのが気になっています。
個人的にはWindows版のtermguicolor対応という扱いでもいいのではないかと考えています。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 20, 2017

前者解釈の件、自分でも書いててその方が速くね?と思いましたが、表示した情報があとから読み取れない以上、おまかせ状態にすると変なバグを抱き込みそうな気がしています。根拠はまだありません。

どのみち独自に解釈しないとならないので(Visual bellのシーケンスとか)、自分で termcap リストに用意したシーケンスについては全責任を取る方向で、とは考えました。

後者 has ですが、set termguicolors を $MYVIMRC に書くと、具体的にいえば git が起動する24bit未対応 Vim が termguicolors モードに入ってしまい、画面に色がつかなくなってしまうわけでして、その回避策として set termguicolors を包む has がいるかなと考えました。

が、これについては VCON=yes とした時点で起動即 termguicolors モードに同意しているとみなすことで has は必要なくなります、そうするかな…。

ntak commented Aug 20, 2017

前者解釈の件、自分でも書いててその方が速くね?と思いましたが、表示した情報があとから読み取れない以上、おまかせ状態にすると変なバグを抱き込みそうな気がしています。根拠はまだありません。

どのみち独自に解釈しないとならないので(Visual bellのシーケンスとか)、自分で termcap リストに用意したシーケンスについては全責任を取る方向で、とは考えました。

後者 has ですが、set termguicolors を $MYVIMRC に書くと、具体的にいえば git が起動する24bit未対応 Vim が termguicolors モードに入ってしまい、画面に色がつかなくなってしまうわけでして、その回避策として set termguicolors を包む has がいるかなと考えました。

が、これについては VCON=yes とした時点で起動即 termguicolors モードに同意しているとみなすことで has は必要なくなります、そうするかな…。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Aug 21, 2017

Member

そういえば、VIRTUAL_TERMINAL_PROCESSING を有効にしていたら、alt bufferが使えるんですかね。
もしそうなら、 #785 (comment) に書いた問題も解消するのかな?
CreateConsoleScreenBuffer/SetConsoleActiveScreenBuffer を使ったときのような問題が起きないかが気になりますが。

Member

k-takata commented Aug 21, 2017

そういえば、VIRTUAL_TERMINAL_PROCESSING を有効にしていたら、alt bufferが使えるんですかね。
もしそうなら、 #785 (comment) に書いた問題も解消するのかな?
CreateConsoleScreenBuffer/SetConsoleActiveScreenBuffer を使ったときのような問題が起きないかが気になりますが。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 21, 2017

alt buffer、やってみます。広い意味で 24bit 対応に入りますし。

ntak commented Aug 21, 2017

alt buffer、やってみます。広い意味で 24bit 対応に入りますし。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 21, 2017

alt buffer に対して Win32API が一切効いていないような動作をします。そういえばそうですね。
color24 で出力されたきれいなグラデはきれいなまま復帰してきます。

ntak commented Aug 21, 2017

alt buffer に対して Win32API が一切効いていないような動作をします。そういえばそうですね。
color24 で出力されたきれいなグラデはきれいなまま復帰してきます。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Aug 21, 2017

Member

そうなると、alt bufferを使うと、winpty上では動かないということになるんですかね。

Member

k-takata commented Aug 21, 2017

そうなると、alt bufferを使うと、winpty上では動かないということになるんですかね。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Aug 21, 2017

ほぼ実装できました。カーソル表示まわりは Win32API が通るようなのでまずはいじっていません。
https://gist.github.com/ntak/4d046e13244ece88e847061958e845e0

問題は intro が termguicolors のセットにより起動直後に消えることです。これはなんとかします。

ntak commented Aug 21, 2017

ほぼ実装できました。カーソル表示まわりは Win32API が通るようなのでまずはいじっていません。
https://gist.github.com/ntak/4d046e13244ece88e847061958e845e0

問題は intro が termguicolors のセットにより起動直後に消えることです。これはなんとかします。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Nov 9, 2017

改行はそのようにします。
今から一時間ほど空いたのでその間に即行処理します。あわてずに…。

ntak commented Nov 9, 2017

改行はそのようにします。
今から一時間ほど空いたのでその間に即行処理します。あわてずに…。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Nov 9, 2017

熟考した結果、USE_VTP まわりはいま変更する必要はないと踏みました。現状維持で先に進みます。

ntak commented Nov 9, 2017

熟考した結果、USE_VTP まわりはいま変更する必要はないと踏みました。現状維持で先に進みます。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Nov 9, 2017

Member

VTP不可状態でのtgc指定をエラーにする以外に何かしようとしています?
VTP不可状態でのtgc指定で背景がおかしくなるのも修正しようとしていますか?

Member

k-takata commented Nov 9, 2017

VTP不可状態でのtgc指定をエラーにする以外に何かしようとしています?
VTP不可状態でのtgc指定で背景がおかしくなるのも修正しようとしていますか?

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Nov 9, 2017

背景がおかしくなるのを修正するのは今のこのタイミングではないとして、そこには手を加えず先に進めてエラーの処理をたった今書いています。

ntak commented Nov 9, 2017

背景がおかしくなるのを修正するのは今のこのタイミングではないとして、そこには手を加えず先に進めてエラーの処理をたった今書いています。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Nov 9, 2017

Member

了解です。

Member

k-takata commented Nov 9, 2017

了解です。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Nov 9, 2017

tgc指定エラーの処理を追加しました。ありがとうございます。

ntak commented Nov 9, 2017

tgc指定エラーの処理を追加しました。ありがとうございます。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Nov 10, 2017

Member

@ntak

vim --clean --cmd "colorscheme desert"

というように、tgcをオンにしないで起動したのですが、背景がグレーになってしまいます。原因分かりますか?

追記: デフォルトのカラースキームで起動して、後で :colorscheme desert としても背景は黒のままでした。

Member

k-takata commented Nov 10, 2017

@ntak

vim --clean --cmd "colorscheme desert"

というように、tgcをオンにしないで起動したのですが、背景がグレーになってしまいます。原因分かりますか?

追記: デフォルトのカラースキームで起動して、後で :colorscheme desert としても背景は黒のままでした。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Nov 11, 2017

Member

これでよさげ?

--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -7624,6 +7624,9 @@ set_console_color_rgb(void)
     guicolor_T fg = INVALCOLOR;
     guicolor_T bg = INVALCOLOR;
 
+    if (!USE_VTP)
+	return;
+
     id = syn_name2id((char_u *)"Normal");
     if (id > 0)
 	syn_id2colors(id, &fg, &bg);
Member

k-takata commented Nov 11, 2017

これでよさげ?

--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -7624,6 +7624,9 @@ set_console_color_rgb(void)
     guicolor_T fg = INVALCOLOR;
     guicolor_T bg = INVALCOLOR;
 
+    if (!USE_VTP)
+	return;
+
     id = syn_name2id((char_u *)"Normal");
     if (id > 0)
 	syn_id2colors(id, &fg, &bg);
@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Nov 11, 2017

Member

AppVeyorのテストが失敗しているので、'tgc' はスキップするようにした方がよさそう。

--- a/src/testdir/gen_opt_test.vim
+++ b/src/testdir/gen_opt_test.vim
@@ -125,6 +125,7 @@ let test_values = {
       \ 'switchbuf': [['', 'useopen', 'split,newtab'], ['xxx']],
       \ 'tagcase': [['smart', 'match'], ['', 'xxx', 'smart,match']],
       \ 'term': [[], []],
+      \ 'termguicolors': [[], []],
       \ 'termsize': [['', '24x80', '0x80', '32x0', '0x0'], ['xxx', '80', '8ax9', '24x80b']],
       \ 'toolbar': [['', 'icons', 'text'], ['xxx']],
       \ 'toolbariconsize': [['', 'tiny', 'huge'], ['xxx']],
Member

k-takata commented Nov 11, 2017

AppVeyorのテストが失敗しているので、'tgc' はスキップするようにした方がよさそう。

--- a/src/testdir/gen_opt_test.vim
+++ b/src/testdir/gen_opt_test.vim
@@ -125,6 +125,7 @@ let test_values = {
       \ 'switchbuf': [['', 'useopen', 'split,newtab'], ['xxx']],
       \ 'tagcase': [['smart', 'match'], ['', 'xxx', 'smart,match']],
       \ 'term': [[], []],
+      \ 'termguicolors': [[], []],
       \ 'termsize': [['', '24x80', '0x80', '32x0', '0x0'], ['xxx', '80', '8ax9', '24x80b']],
       \ 'toolbar': [['', 'icons', 'text'], ['xxx']],
       \ 'toolbariconsize': [['', 'tiny', 'huge'], ['xxx']],
@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Nov 11, 2017

ありがとうございます!そっちの起動ルートがあったか、と…。

前者は「あれ、そこ、いる?…あー、いるなこれ」という理解の道筋を辿りました。
後者はエラーで止まるのを目撃してはいましたが直し方がわかりませんでした…。
感謝です!取り込みます。

なんか前回の修正パッチでこれで最後的なことを書いてしまったのが今となってはアレで、自分軽いなあと思っているところです。うーん…

ntak commented Nov 11, 2017

ありがとうございます!そっちの起動ルートがあったか、と…。

前者は「あれ、そこ、いる?…あー、いるなこれ」という理解の道筋を辿りました。
後者はエラーで止まるのを目撃してはいましたが直し方がわかりませんでした…。
感謝です!取り込みます。

なんか前回の修正パッチでこれで最後的なことを書いてしまったのが今となってはアレで、自分軽いなあと思っているところです。うーん…

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Dec 28, 2017

Member

:help dos-colors を見ると、:set t_mr=^V^[\|xxm 等で属性を設定できると書いてあるのですが、これが効かなくなってしまっていますね。どう直すのがいいのだろう。

Member

k-takata commented Dec 28, 2017

:help dos-colors を見ると、:set t_mr=^V^[\|xxm 等で属性を設定できると書いてあるのですが、これが効かなくなってしまっていますね。どう直すのがいいのだろう。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Dec 28, 2017

Member

VTP 使っていないときだけ対策するならこうだろうか?

--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -6345,7 +6345,12 @@ mch_write(
 		    if (argc == 1 && args[0] == 0)
 			normvideo();
 		    else if (argc == 1)
-			textcolor((WORD) arg1);
+		    {
+			if (USE_VTP)
+			    textcolor((WORD) arg1);
+			else
+			    textattr((WORD) arg1);
+		    }
 		    else if (USE_VTP)
 			vtp_sgr_bulks(argc, args);
 		}
Member

k-takata commented Dec 28, 2017

VTP 使っていないときだけ対策するならこうだろうか?

--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -6345,7 +6345,12 @@ mch_write(
 		    if (argc == 1 && args[0] == 0)
 			normvideo();
 		    else if (argc == 1)
-			textcolor((WORD) arg1);
+		    {
+			if (USE_VTP)
+			    textcolor((WORD) arg1);
+			else
+			    textattr((WORD) arg1);
+		    }
 		    else if (USE_VTP)
 			vtp_sgr_bulks(argc, args);
 		}
@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Dec 30, 2017

今見たところ修正規模が少々大きめになる可能性があるような気分になっています。
この加筆で年をまたぐか…

ntak commented Dec 30, 2017

今見たところ修正規模が少々大きめになる可能性があるような気分になっています。
この加筆で年をまたぐか…

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Dec 30, 2017

特殊文字部分は全部書き直します。ご指摘ありがとうございます。

ntak commented Dec 30, 2017

特殊文字部分は全部書き直します。ご指摘ありがとうございます。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Dec 31, 2017

完全互換をおそらく達成しました。そこまで大幅に書き換えなくても済んだかなと思っています。
ntak/vim@fb2fa27

tgc/notgc が入れ替わるたびにそれぞれの termcap の一部(特殊文字関連)を退避&展開しています。
VTP の制御シーケンスが ^[|0B などを中継せずベタに書けたので見通しはよくなったかと思います。

ntak commented Dec 31, 2017

完全互換をおそらく達成しました。そこまで大幅に書き換えなくても済んだかなと思っています。
ntak/vim@fb2fa27

tgc/notgc が入れ替わるたびにそれぞれの termcap の一部(特殊文字関連)を退避&展開しています。
VTP の制御シーケンスが ^[|0B などを中継せずベタに書けたので見通しはよくなったかと思います。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Feb 22, 2018

Windows コンソールでのスクリーンダンプという話になりましたが、これから追加する機能ですか?

ntak commented Feb 22, 2018

Windows コンソールでのスクリーンダンプという話になりましたが、これから追加する機能ですか?

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Feb 22, 2018

Member

よく分からないですね。スクリーンダンプ自体は最近追加されましたが、Windowsでどう動いているのかは把握していないです。24bit色対応でスクリーンダンプ機能も24bit対応できるのかも分かりません。

Member

k-takata commented Feb 22, 2018

よく分からないですね。スクリーンダンプ自体は最近追加されましたが、Windowsでどう動いているのかは把握していないです。24bit色対応でスクリーンダンプ機能も24bit対応できるのかも分かりません。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Feb 22, 2018

Member

スクリーンダンプは libvterm 使うので何も意識する必要はないはず。

Member

mattn commented Feb 22, 2018

スクリーンダンプは libvterm 使うので何も意識する必要はないはず。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Feb 22, 2018

Member

そういう話だと、Win32 APIのせいでwinptyが16色しか扱えないので、スクリーンダンプは16色のままということになってしまいますね。

Member

k-takata commented Feb 22, 2018

そういう話だと、Win32 APIのせいでwinptyが16色しか扱えないので、スクリーンダンプは16色のままということになってしまいますね。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Feb 22, 2018

ややこしさ…出力した 24bit 色のデータを出力先から取り出す方法はないので、そのための libvterm なのかなと思ってはみましたが、libvterm からもらえるであろう 24bit 色の出力が winpty を通過するのであれば 16色に限定されるような気がしますし…なにか理解が違うような感じもなくはなく、

しかし最近追加された機能ですか、検索しても見つからないのはその関係でしたね…

ntak commented Feb 22, 2018

ややこしさ…出力した 24bit 色のデータを出力先から取り出す方法はないので、そのための libvterm なのかなと思ってはみましたが、libvterm からもらえるであろう 24bit 色の出力が winpty を通過するのであれば 16色に限定されるような気がしますし…なにか理解が違うような感じもなくはなく、

しかし最近追加された機能ですか、検索しても見つからないのはその関係でしたね…

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Feb 22, 2018

Member

:term内アプリ → winpty → libvterm → (g)vim
となっていて、winptyはWin32アプリの出力をUnix系のptyの形式に変換して、それをlibvtermが解釈しています。winptyはWin32 APIを使ってアプリの出力をキャプチャーした時点で色情報が落ちてしまうので、どうにもならないですね。

Member

k-takata commented Feb 22, 2018

:term内アプリ → winpty → libvterm → (g)vim
となっていて、winptyはWin32アプリの出力をUnix系のptyの形式に変換して、それをlibvtermが解釈しています。winptyはWin32 APIを使ってアプリの出力をキャプチャーした時点で色情報が落ちてしまうので、どうにもならないですね。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Feb 22, 2018

理解しました。ありがとうございます。いろいろ考えた末、何もできることはないと結論しました。
取得 API に関する Microsoft の翻意を期待したいところですが、ない…な…

ntak commented Feb 22, 2018

理解しました。ありがとうございます。いろいろ考えた末、何もできることはないと結論しました。
取得 API に関する Microsoft の翻意を期待したいところですが、ない…な…

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Feb 23, 2018

Member

8.0.1531: vim/vim@cafafb3
お疲れ様でした。(Ken Takasakiって誰やねん)

Member

k-takata commented Feb 23, 2018

8.0.1531: vim/vim@cafafb3
お疲れ様でした。(Ken Takasakiって誰やねん)

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Feb 23, 2018

Member

おっ!お疲れ様でした!

Member

mattn commented Feb 23, 2018

おっ!お疲れ様でした!

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Feb 23, 2018

Member

vconという名前はvtpに変えたはずでしたが、has('vcon') はそのままになってましたね…。

Member

k-takata commented Feb 23, 2018

vconという名前はvtpに変えたはずでしたが、has('vcon') はそのままになってましたね…。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Feb 23, 2018

Member

直しておいた方がいいかな? feature-listに載っていなかったのも修正が必要。

--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -9195,6 +9195,7 @@ visualextra		Compiled with extra Visual 
 			|blockwise-operators|.
 vms			VMS version of Vim.
 vreplace		Compiled with |gR| and |gr| commands.
+vtp			Virtual Terminal Processing on Win32. 'tgc'
 wildignore		Compiled with 'wildignore' option.
 wildmenu		Compiled with 'wildmenu' option.
 win32			Win32 version of Vim (MS-Windows 95 and later, 32 or
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -7943,8 +7943,9 @@ A jump table for the options with a shor
 
 	For Win32 console, Windows 10 version 1703 (Creators Update) or later
 	is required. Use this check to find out: >
-		if has('vcon')
-<
+		if has('vtp')
+<	("vtp" stands for Virtual Terminal Processing.)
+
 	Note that the "cterm" attributes are still used, not the "gui" ones.
 	NOTE: This option is reset when 'compatible' is set.
 
diff --git a/src/evalfunc.c b/src/evalfunc.c
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -6400,7 +6400,7 @@ f_has(typval_T *argvars, typval_T *rettv
 	    n = syntax_present(curwin);
 #endif
 #ifdef FEAT_VTP
-	else if (STRICMP(name, "vcon") == 0)
+	else if (STRICMP(name, "vtp") == 0)
 	    n = has_vtp_working();
 #endif
 #ifdef FEAT_NETBEANS_INTG
Member

k-takata commented Feb 23, 2018

直しておいた方がいいかな? feature-listに載っていなかったのも修正が必要。

--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -9195,6 +9195,7 @@ visualextra		Compiled with extra Visual 
 			|blockwise-operators|.
 vms			VMS version of Vim.
 vreplace		Compiled with |gR| and |gr| commands.
+vtp			Virtual Terminal Processing on Win32. 'tgc'
 wildignore		Compiled with 'wildignore' option.
 wildmenu		Compiled with 'wildmenu' option.
 win32			Win32 version of Vim (MS-Windows 95 and later, 32 or
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -7943,8 +7943,9 @@ A jump table for the options with a shor
 
 	For Win32 console, Windows 10 version 1703 (Creators Update) or later
 	is required. Use this check to find out: >
-		if has('vcon')
-<
+		if has('vtp')
+<	("vtp" stands for Virtual Terminal Processing.)
+
 	Note that the "cterm" attributes are still used, not the "gui" ones.
 	NOTE: This option is reset when 'compatible' is set.
 
diff --git a/src/evalfunc.c b/src/evalfunc.c
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -6400,7 +6400,7 @@ f_has(typval_T *argvars, typval_T *rettv
 	    n = syntax_present(curwin);
 #endif
 #ifdef FEAT_VTP
-	else if (STRICMP(name, "vcon") == 0)
+	else if (STRICMP(name, "vtp") == 0)
 	    n = has_vtp_working();
 #endif
 #ifdef FEAT_NETBEANS_INTG
@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Feb 23, 2018

ありがとうございました、お疲れさまでした。そして修正してきます。

ntak commented Feb 23, 2018

ありがとうございました、お疲れさまでした。そして修正してきます。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Feb 23, 2018

今出そうとして思ったんですが、これ vcon のままにして vtp への変更はしない方がよくないですか?
feature-list の方には vcon で追記する形にして。
なんで vcon であって vtp ではないのかという部分については歴史的なものとしておくとか。

あと、一度出してしまった仕様を撤回してもらうというのもちょっと申し訳のなさが出ますし…。

Bram さんが選択してくださった単語なので、あまり言いかけるのも難しさがある感じはします。
途中で変えちゃったのもこっち側の都合ですから…。

ntak commented Feb 23, 2018

今出そうとして思ったんですが、これ vcon のままにして vtp への変更はしない方がよくないですか?
feature-list の方には vcon で追記する形にして。
なんで vcon であって vtp ではないのかという部分については歴史的なものとしておくとか。

あと、一度出してしまった仕様を撤回してもらうというのもちょっと申し訳のなさが出ますし…。

Bram さんが選択してくださった単語なので、あまり言いかけるのも難しさがある感じはします。
途中で変えちゃったのもこっち側の都合ですから…。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Feb 23, 2018

あれ…自分のコードだったっけ…なんだかちょっとわからなくなってしまっている…

ntak commented Feb 23, 2018

あれ…自分のコードだったっけ…なんだかちょっとわからなくなってしまっている…

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Feb 23, 2018

PR を出しました。
vim/vim#2665
まずは不足分を埋めるとして、vcon なのか vtp なのかは自分の中で整理をつけて後日あらためます。

ntak commented Feb 23, 2018

PR を出しました。
vim/vim#2665
まずは不足分を埋めるとして、vcon なのか vtp なのかは自分の中で整理をつけて後日あらためます。

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Feb 23, 2018

Member

vtp に直すなら、むしろ feature-list に載ってない今のうちにすべきでは、と思うのですが。

Member

ichizok commented Feb 23, 2018

vtp に直すなら、むしろ feature-list に載ってない今のうちにすべきでは、と思うのですが。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Feb 23, 2018

現行の has('vcon') まわりのコードは私が書いた部分ではないので、できるだけ形を残しておきたいというのはあります。
私が vtp に変更したのはある程度はわがままの結果ですから、ここは引くところかなあ、という判断です。

ntak commented Feb 23, 2018

現行の has('vcon') まわりのコードは私が書いた部分ではないので、できるだけ形を残しておきたいというのはあります。
私が vtp に変更したのはある程度はわがままの結果ですから、ここは引くところかなあ、という判断です。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Feb 23, 2018

Member

vtpにすべきではというのは私の #1068 (comment) が発端では?

Member

k-takata commented Feb 23, 2018

vtpにすべきではというのは私の #1068 (comment) が発端では?

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Feb 23, 2018

Member

現行の has('vcon') まわりのコードは私が書いた部分ではないので、

そうでしたっけ?まあいいや。
もし変更するのであれば今しかチャンスはないので、vtpの方がいいのではという意見を出しておきました。Bramに判断してもらおう。

Member

k-takata commented Feb 23, 2018

現行の has('vcon') まわりのコードは私が書いた部分ではないので、

そうでしたっけ?まあいいや。
もし変更するのであれば今しかチャンスはないので、vtpの方がいいのではという意見を出しておきました。Bramに判断してもらおう。

@ntak

This comment has been minimized.

Show comment
Hide comment
@ntak

ntak Feb 23, 2018

すみません、助かります…

ntak commented Feb 23, 2018

すみません、助かります…

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Feb 28, 2018

Member

あ、Bramから返事があったのか。見落としてた。
has()"vcon" のままで行くんですね。

Member

k-takata commented Feb 28, 2018

あ、Bramから返事があったのか。見落としてた。
has()"vcon" のままで行くんですね。

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