Skip to content
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

gvim.exe --serverlistがエラーダイアログで表示される #1060

Closed
nocd5 opened this issue Jul 29, 2017 · 9 comments
Closed

gvim.exe --serverlistがエラーダイアログで表示される #1060

nocd5 opened this issue Jul 29, 2017 · 9 comments

Comments

@nocd5
Copy link
Member

nocd5 commented Jul 29, 2017

質問・報告の内容

gvim.exe --serverlistgvim.exe --remote-expr 1+1などの結果がエラーダイアログで表示されますが、これは期待動作なのでしょうか?

ss

Vimのバージョン

8.0.799

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

  • Windows 10 Home 64bit
@nocd5
Copy link
Member Author

nocd5 commented Jul 29, 2017

パッチを書いてみたものの、os_mswin.cdisplay_errors()を呼ぶのではなくmessage.cdo_dialog呼んだ方が良い様な気がしてます。

@nocd5 nocd5 changed the title gvim.exe --serverlistga gvim.exe --serverlistがエラーダイアログで表示される Jul 29, 2017
@mattn
Copy link
Member

mattn commented Jul 29, 2017

何が期待結果でしょうか?ダイアログじゃなく標準入出力で出るのが期待結果でしょうか?ですと他の方法を考えた方がよさそうです。
あと gui.starting はいろいろな箇所に影響するので別のフラグを付けた方が良い気がします。

@nocd5
Copy link
Member Author

nocd5 commented Jul 29, 2017

色々と説明不足で申し訳ありません。
期待動作は分からないのですが、少なくともエラーダイアログではないのではないか、と思い質問いたしました。
--help--versionはInfoアイコンのダイアログで表示されるので、それに合わせるのも1つの案かと思い書いたのがパッチです。
せめてスクリーンショットは乗せるべきでした、すいません。パッチを当てた結果が以下です。
ss

--remote-exprなどの結果を使うケースがあれば標準出力の方が扱いやすいと思うので、
mattnさんの仰るように標準入出力に出すのが期待結果かもしれません。

@ghost
Copy link

ghost commented Jul 29, 2017

WIndows の MessageBox() 関数でいうところの MB_ICONSTOP フラグ ( x ) である現状を MB_ICONINFORMATION ( i ) にした方が意味的に合致するのではないか、という話かと根拠なく思いました。

@mattn
Copy link
Member

mattn commented Jul 29, 2017

なるほど。僕はどちらかというとスクリーンショットの様な事がしたいのであれば

diff --git a/src/main.c b/src/main.c
index 268c25627..ab92d57e5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -3980,9 +3980,20 @@ cmdsrv_main(
 	didone = TRUE;
 	if (res != NULL && *res != NUL)
 	{
+#ifdef WIN32
+	    if (!isatty(fileno(stdout)))
+		puts((char *)res);
+	    else
+	    {
+		mch_msg((char *)res);
+		if (res[STRLEN(res) - 1] != '\n')
+		    mch_msg("\n");
+	    }
+#else
 	    mch_msg((char *)res);
 	    if (res[STRLEN(res) - 1] != '\n')
 		mch_msg("\n");
+#endif
 	}
 	vim_free(res);
     }

こうやってもいいかなーと思いました。

@nocd5
Copy link
Member Author

nocd5 commented Jul 29, 2017

@ntak さん 簡潔に説明していただきありがとうございます。私がイメージしたのはそういう動作です。
@mattn さん のように標準出力に出すのも良さそうですよね。

期待動作と、それが期待動作たる所以を説明できるよう纏まったら改めて相談させて下さい。

@k-takata
Copy link
Member

こんなパッチはどうだろう?

--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -616,9 +616,9 @@ display_errors(void)
 	    if (!isspace(*p))
 	    {
 		(void)gui_mch_dialog(
-				     gui.starting ? VIM_INFO :
+				     !gui.in_use ? VIM_INFO :
 					     VIM_ERROR,
-				     gui.starting ? (char_u *)_("Message") :
+				     !gui.in_use ? (char_u *)_("Message") :
 					     (char_u *)_("Error"),
 				     (char_u *)p, (char_u *)_("&Ok"),
 					1, NULL, FALSE);

元々のコードは、GUI起動完了後に display_errors() が呼ばれたときにはエラーとして表示し、GUI起動途中ならinfoとして表示するという意図だと思うので。
で、今回の問題はGUI起動前の gui.starting がセットされる前に display_errors() が呼ばれてしまうことでエラーとして表示されていることなので。
まあ、gui.starting をセットするのでもよいのかもしれませんが。

@k-takata
Copy link
Member

あと gui.starting はいろいろな箇所に影響するので別のフラグを付けた方が良い気がします。

8.1.1230のVIMDLL対応では、--serverlist のダイアログを表示させるために gui.starting の設定位置を前にずらしてしまったので、VIMDLL無効の場合でも同じ位置で設定してしまってもいいかなという気もしてきました。上のパッチとどっちがいいだろう?

--- a/src/main.c
+++ b/src/main.c
@@ -178,6 +178,8 @@ main
 #ifdef VIMDLL
     // Check if the current executable file is for the GUI subsystem.
     gui.starting = mch_is_gui_executable();
+#elif defined(FEAT_GUI_MSWIN)
+    gui.starting = TRUE;
 #endif
 
 #ifdef FEAT_CLIENTSERVER

@k-takata
Copy link
Member

k-takata commented May 8, 2019

8.1.1301 に修正を混ぜ込んでしまいました。

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

No branches or pull requests

3 participants