8000 vim.exe で channel が有効にならない · Issue #809 · vim-jp/issues · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
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

vim.exe で channel が有効にならない #809

Closed
mattn opened this issue Jan 29, 2016 · 15 comments
Closed

vim.exe で channel が有効にならない #809

mattn opened this issue Jan 29, 2016 · 15 comments

Comments

@mattn
Copy link
Member
mattn commented Jan 29, 2016

非サポート扱いの様だったので直しました。

https://gist.github.com/mattn/49add004c951329fdf37

既知の問題点として(gvimでもあり得る)、json を使う場合、1回の受信で2回分受信してしまった時に json_decode がエラーになる(当然)ので、処理性能の遅い vim.exe が急にソケット受信するとエラーになる。

どなたか検証お願いします。

@tyru
Copy link
Member
tyru commented Jan 29, 2016

👍

@k-takata
Copy link
Member

試していませんが、HAVE_SELECT の定義の仕方が気になりました。
select() があるかどうかの定義なので、GUI/CUI で定義を変えるのは不自然だと思います。

@mattn
Copy link
Member Author
mattn commented Jan 29, 2016

FEAT_GUI_W32 の場合は HAVE_SELECT じゃないパスなんですよね。。。

@k-takata
Copy link
Member

長くなってしまいますが、 defined(HAVE_SELECT) && !defined(FEAT_GUI_W32) でいいんじゃないでしょうか。こっちの方が分かりやすいと思います。

@mattn
Copy link
Member Author
mattn commented Jan 29, 2016

長くなってしまいますが、 defined(HAVE_SELECT) && !defined(FEAT_GUI_W32) でいいんじゃないでしょうか。こっちの方が分かりやすいと思います

どの部分でしょうか?

@mattn
Copy link
Member Author
mattn commented Jan 29, 2016

あ、わかりました。

@mattn
Copy link
Member Author
mattn commented Jan 29, 2016

vim/vim#607

@k-takata
8000 Copy link
Member

あれ、vim.h の HAVE_SELECT のdefine部分はそのままですか?

@mattn
Copy link
Member Author
mattn commented Jan 29, 2016

Windows だと HAVE_SELECT は自分で定義する必要があるのです。
Windows GUI は HAVE_SELECT に依存していないので、Windows Console の場合は自分で定義しています。

@k-takata
Copy link
Member

GUIでも select() を使いたくなったときに、はまりそうです。CUI/GUIで分けないほうがよいと思います。
channel_wait() の動作が HAVE_SELECT で変わりそうですが、大丈夫ですか?

そして、appveyorが落ちていますね。
https://ci.appveyor.com/project/chrisbra/vim/build/472

@mattn
Copy link
Member Author
mattn commented Jan 29, 2016

gvim.exe と vim.exe で channel の実装方式が違うのです。
コード読んでもらえると分かるのですが、gvim はウィンドウハンドルを使って select する方式を取っています。
channel の目的では 混ぜる事はないと思います。

@mattn
Copy link
Member Author
mattn commented Jan 29, 2016

extern かな。直しておきます。

@mattn
Copy link
Member Author
mattn commented Jan 29, 2016

GUI 版は channel_wait に来た時点で select は完了しているので(そもそもトリガがウィンドウハンドルによるselect)、敢えて HAVE_SELECT を実行してないんだと思います。

@k-takata
Copy link
Member

@mattn
Copy link
Member Author
mattn commented Feb 2, 2016

↑に書いたJSONを2回受け取るとパースが出る件はBramが直してくれた。

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
0