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

guifont に設定できないフォント名がある #1067

Closed
k-takata opened this Issue Aug 9, 2017 · 4 comments

Comments

Projects
None yet
1 participant
@k-takata
Member

k-takata commented Aug 9, 2017

質問・報告の内容

https://teratail.com/questions/87354 で質問が出ていますが、Windows版Vimでguifontに、
源柔ゴシック等幅_Regular というフォント名を指定しても有効になりません。
源柔ゴシック等幅 Regular のように _ をスペースに置き換えれば問題ありません。

Vimのバージョン

8.0.0893

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

Windows

前提

Windows版Vimは、半角スペースを含むフォント名を簡単に指定できるようにするため、半角スペースの代わりに _ を使うことができるようになっています。(:set で半角スペースを指定する場合は、\ でのエスケープが必要。)
フォントが _ 付きの名前で指定され、そのフォントが見つからなかった場合、_ をスペースに置き換えて、再度フォントの検索を行います。

問題点

現在の実装では、_ をスペースに置換する際に、マルチバイト文字を考慮していません。
cp932 で の2バイト目は 0x5f で、_ と同一のため、スペースに置き換えられてしまい、おかしなことになってしまいます。
なお、フォント名は enc=utf-8 であってもカレントコードページで扱うため、その場合も同じ問題が発生します。

対策案1

_ の置換時にマルチバイト文字を考慮する。

対策案2

フォント名をワイド文字で扱うように修正する。

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Aug 9, 2017

Member

対策案1

--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -2990,7 +2990,9 @@ get_logfont(
 	int	did_replace = FALSE;
 
 	for (i = 0; lf->lfFaceName[i]; ++i)
-	    if (lf->lfFaceName[i] == '_')
+	    if (IsDBCSLeadByte(lf->lfFaceName[i]))
+		++i;
+	    else if (lf->lfFaceName[i] == '_')
 	    {
 		lf->lfFaceName[i] = ' ';
 		did_replace = TRUE;

(動作未確認)

Member

k-takata commented Aug 9, 2017

対策案1

--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -2990,7 +2990,9 @@ get_logfont(
 	int	did_replace = FALSE;
 
 	for (i = 0; lf->lfFaceName[i]; ++i)
-	    if (lf->lfFaceName[i] == '_')
+	    if (IsDBCSLeadByte(lf->lfFaceName[i]))
+		++i;
+	    else if (lf->lfFaceName[i] == '_')
 	    {
 		lf->lfFaceName[i] = ' ';
 		did_replace = TRUE;

(動作未確認)

@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

This comment has been minimized.

Show comment
Hide comment
@k-takata

k-takata Aug 10, 2017

Member

対策案2については、 #501 以来の課題。

Member

k-takata commented Aug 10, 2017

対策案2については、 #501 以来の課題。

@k-takata

This comment has been minimized.

Show comment
Hide comment
Member

k-takata commented Aug 12, 2017

@k-takata k-takata closed this Aug 12, 2017

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