skkserv対応 #148

Closed
tyru opened this Issue Jun 10, 2012 · 42 comments

Projects

None yet

3 participants

@tyru
Owner
tyru commented Jun 10, 2012

まだissue立ててなかったとは...
vimproc使えばできそう。

@Shougo
Collaborator
Shougo commented Apr 19, 2013

skkservはWindowsでうまく動作しないという問題があるんですよね……。

@tyru
Owner
tyru commented Apr 19, 2013

それはskkservによりますよね。
一応調べればあるみたいです

@mattn
Collaborator
mattn commented Apr 19, 2013

windowsでもちゃんと動くサーバあったと思うよ。昔im_customっていうvimのパッチ書いてた頃、普通に使えた記憶がある。

On 4/19/13, tyru notifications@github.com wrote:

それはskkservによりますよね。
「windows skkserv」とかで調べればあるみたいです。


Reply to this email directly or view it on GitHub:
#148 (comment)

  • Yasuhiro Matsumoto
@Shougo
Collaborator
Shougo commented Apr 20, 2013

ふむふむ。Windowsでも恩恵を受けるのなら、SKK server専用にするという手もありそうですね。

@tyru
Owner
tyru commented Apr 20, 2013

選択肢は多い方がいいので、skkserv専用にするつもりはないです。

On Sat, Apr 20, 2013 at 9:17 AM, Shougo notifications@github.com wrote:

ふむふむ。Windowsでも恩恵を受けるのなら、SKK server専用にするという手もありそうですね。


Reply to this email directly or view it on GitHubhttps://github.com/tyru/eskk.vim/issues/148#issuecomment-16695707
.

@Shougo
Collaborator
Shougo commented Apr 20, 2013

各環境に散らばるSKKの実装を統一したほうがいいんじゃない→SKKServ?という話があったのです。
インタフェースに尽力するのもそれはそれでありなのかなぁと思った次第。

@tyru
Owner
tyru commented Apr 20, 2013

どこの話です?

@Shougo
Collaborator
Shougo commented Apr 20, 2013

個人的に受けた話なんで……。

@tyru
Owner
tyru commented Apr 20, 2013

それはeskkに関連した話ですか?
それとも一般的なSKK実装の話ですか?

※ただ聞きたいだけです

@Shougo
Collaborator
Shougo commented Apr 20, 2013

eskkというより、SKK全体で実装が乱立してしまっているので統一が取れたらいいよね、という話がありました。

@mattn
Collaborator
mattn commented Apr 20, 2013

それwindows関係なくね

On 4/20/13, Shougo notifications@github.com wrote:

eskkというより、SKK全体で実装が乱立してしまっているので統一が取れたらいいよね、という話がありました。


Reply to this email directly or view it on GitHub:
#148 (comment)

  • Yasuhiro Matsumoto
@Shougo
Collaborator
Shougo commented Apr 20, 2013

Windows関係無いですが、実装を統一するならWindowsへの対応が必須という話だったのです。
で、実装の統一にskkservを使うとしたらWindowsでskkservはちゃんと動くのかなぁという話。

@Shougo Shougo self-assigned this Jun 10, 2014
@Shougo
Collaborator
Shougo commented Jun 10, 2014

ちょっとこれやってみたくなりました。vimprocを使えば実装できるでしょう。

http://ta.ps.st/d/1327079692.html
https://github.com/anyakichi/skk.vim

参考資料。skk.vimのforkでskkserv対応しているものがあるらしい。

実装上、何かアドバイスがあればよろしくお願いします。

個人的な興味として、google-ime-skkを動かしてみたいです。

@tyru
Owner
tyru commented Jun 10, 2014

助かります。
ぜひお願いします。

@Shougo
Collaborator
Shougo commented Jun 10, 2014

了解です

@Shougo
Collaborator
Shougo commented Jun 12, 2014

ちょっと気になっているのですが、skkservが有効になっている時補完の優先順位はどうしますか?
いくつかのパターンが考えられます。

例:

  1. large 辞書の候補と統合(localとskkservのどちらからも検索)
  2. serverから見つからなかったらlocalから検索(anyakichi版skk.vimはこちら)
  3. localから候補が見つからなかった場合にskkserv

私は user 辞書, skkserv, system 辞書(skkservから候補がない場合)という順位で考えています。
skkserv の候補を user 辞書に追加するかどうかも問題になりますね。

skkserv は補完にも対応していますが、とりあえずこちらは後回しの予定です。

@tyru
Owner
tyru commented Jun 12, 2014

優先順位については私もいいと思います。
ただ「large 辞書の候補と統合」や「skkserv の候補を user
辞書に追加」というのがどういう実装を指しているのかいまいちイメージが付いてないので、そこは実際のコードを見てから判断させてください。

2014/06/13 7:05 "Shougo" notifications@github.com:

ちょっと気になっているのですが、skkservが有効になっている時補完の優先順位はどうしますか?
いくつかのパターンが考えられます。

例:

large 辞書の候補と統合(localとskkservのどちらからも検索)
serverから見つからなかったらlocalから検索(anyakichi版skk.vimはこちら)
localから候補が見つからなかった場合にskkserv

私は user 辞書, skkserv, system 辞書(skkservから候補がない場合)という順位で考えています。
skkserv の候補を user 辞書に追加するかどうかも問題になりますね。

skkserv は補完にも対応していますが、とりあえずこちらは後回しの予定です。


Reply to this email directly or view it on GitHub.

@Shougo
Collaborator
Shougo commented Jun 12, 2014

ただ「large 辞書の候補と統合」や「skkserv の候補を user 辞書に追加」というのがどういう実装を指しているのかいまいちイメージが付いてないので、そこは実際のコードを見てから判断させてください。

はい。

「large 辞書の候補と統合」 large辞書とserver辞書の両方を毎回検索するということです。当然パフォーマンスは悪くなります。

「skkserv の候補を user 辞書に追加」 補完の時と同様、skkserv の候補で確定した場合、それをユーザー辞書に追加するかどうかです。ちょっとこれは未定です。

@Shougo
Collaborator
Shougo commented Jun 16, 2014

とりあえず、プロトタイプの実装が出来ました。

https://github.com/tyru/eskk.vim/tree/server

    let g:eskk#server = {
          \   'host': 'localhost',
          \   'portnum': 55100,
          \   'encoding': 'euc-jp',
          \   'timeout': 1000,
          \}

これが google-ime-skk をサーバーに用いる場合の設定例です。
動作確認をしてもらえますか?

問題点としては、なぜかかならず timeout の分だけ wait してしまうことですね……。
google-ime-skk は複雑な候補だとネットワークを見に行くので遅いです。
これは vimproc 側の問題っぽいけれど、もうちょっとどうにかならないかな。

@Shougo
Collaborator
Shougo commented Jun 17, 2014
    let g:eskk#server = {
          \   'host': 'localhost',
          \   'port': 55100,
          \}

簡略化して設定できるようになりました。
ドキュメントを追加しました。

問題点としては、なぜかかならず timeout の分だけ wait してしまうことですね……。
google-ime-skk は複雑な候補だとネットワークを見に行くので遅いです。
これは vimproc 側の問題っぽいけれど、もうちょっとどうにかならないかな。

修正しました。vimprocを更新してください。

ほぼ完成だと思います。動作確認をお願いできますか。

@Shougo
Collaborator
Shougo commented Jun 17, 2014

skkservの補完には対応していません。補完に対応しているskkservは少ない上、neocompleteの補完のほうが優れているためです。
skkservの自動起動にも対応していません。実装の手間がかかる割にはほとんど意味がないからです。

@Shougo
Collaborator
Shougo commented Jun 17, 2014

typeを追加しました。これを"dictionary"とすると、システム辞書より優先して使用します。
"notfound"とすると、システム辞書から見つからなかった時に使用します。
"notfound"とすると、サーバーをあまり見に行かなくなるため、通常変換時の負荷が下がります。
"google-ime-skk" のときには有用でしょう。

@tyru
Owner
tyru commented Jun 19, 2014

google-ime-skkってWindowsで動かしてたりします?(調べた感じなんか面倒そう…)

@tyru
Owner
tyru commented Jun 19, 2014

あ、普通に gem install google-ime-skk でいけそう

@tyru
Owner
tyru commented Jun 19, 2014

ウッ…そういえばVCでvimprocのビルドできないんだった…MinGW環境整えてみます…

@Shougo
Collaborator
Shougo commented Jun 20, 2014

すみません、Windowsでは動作確認をしていません。おそらく動くとは思いますが……。
Windowsだとパフォーマンスが低下しそうで気になります。

ウッ…そういえばVCでvimprocのビルドできないんだった…MinGW環境整えてみます…

これは結局何の問題でしょうか。Kaoriya氏のコンパイル済みvimprocを用いると良いと思います。

@tyru
Owner
tyru commented Jun 20, 2014

Kaoriya氏のコンパイル済みvimprocを用いると良いと思います。

あ、.cには変更加えてないんですね。
了解です。

2014/06/20 12:04 "Shougo" notifications@github.com:

すみません、Windowsでは動作確認をしていません。おそらく動くとは思いますが……。
Windowsだとパフォーマンスが低下しそうで気になります。

ウッ…そういえばVCでvimprocのビルドできないんだった…MinGW環境整えてみます…

これは結局何の問題でしょうか。Kaoriya氏のコンパイル済みvimprocを用いると良いと思います。


Reply to this email directly or view it on GitHub.

@Shougo
Collaborator
Shougo commented Jun 20, 2014

最近は@k-takataさんが各種修正をしてくれていますので、コンパイルできるならコンパイルしたほうが良いとは思います。

@tyru
Owner
tyru commented Jun 20, 2014

まだコードは見てないですが、うまく変換出来てるようですね。

@tyru
Owner
tyru commented Jun 20, 2014

コードレビューしてて気になった点をリスト化してみます。

  1. Vim scriptでは string[-1] は常に空の文字列になりますが、 key[-1] は意図通りの処理だろうか? 420c9e7
  2. g:eskk#server にはtypeはなくして、g:eskk#dictionary(user), g:eskk#large_dictionary(large), g:eskk#server(server)の辞書をそれぞれ見に行く優先順位を決めるグローバル変数を追加したい。
    • g:eskk#lookup_dictionariesというListのグローバル変数を追加したい。
    • デフォルト値
      • eskk#util#has_vimproc() がnon-zeroかつg:eskk#serverが定義済みの時: ["user", "server", "large"]
      • デフォルト値は type: notfound の挙動。type: dictionaryの挙動にしたい場合はユーザーが.vimrcに let g:eskk#lookup_dictionaries = ["user", "large", "server"] のように定義する
      • 上記以外の場合: ["user", "large"]
  3. vimprocがインストールされていなかったりして、g:eskk#serverが定義済みだがskkserv機能が使えない場合ユーザーに警告を出したい
    • タイミングはeskk初期化時(eskk#_initialize())で
    • eskk#_initialize() の中で定義されている s:validate_vim_version() の辺りが参考になりそうです。
@tyru
Owner
tyru commented Jun 20, 2014

これの2と3ですが、私の方でやるか、
もしくは @Shougo さんの方でやってもらえますでしょうか…?

@tyru
Owner
tyru commented Jun 21, 2014

あ、あともし @Shougo さんがやってくれるならマージする直前にこれは消しちゃってください。

" echomsg string(system_dict_result)
@Shougo
Collaborator
Shougo commented Jun 22, 2014

レビューありがとうございます。

  1. これはバグですね
  2. はい、汎用的に考えるとそちらのほうが良さそうです
  3. これはやりたかったのですが、うまい警告の出し方が分からなかったのです

これの2と3ですが、私の方でやるか、
もしくは @Shougo さんの方でやってもらえますでしょうか…?

私は自分のプラグインの修正が立て込んでいるため、@tyru さんのほうで修正してもらえるとありがたいですが、時間はありますでしょうか。

@tyru
Owner
tyru commented Jun 22, 2014

了解です。
全部まとめてこちらで修正しちゃいます。
2014/06/22 19:26 "Shougo" notifications@github.com:

  1. これはバグですね
  2. はい、汎用的に考えるとそちらのほうが良さそうです
  3. これはやりたかったのですが、うまい警告の出し方が分からなかったのです

これの2と3ですが、私の方でやるか、
もしくは @Shougo https://github.com/Shougo さんの方でやってもらえますでしょうか…?

@tyru https://github.com/tyru さんのほうで修正してもらえるとありがたいですが、時間はありますでしょうか。


Reply to this email directly or view it on GitHub
#148 (comment).

@Shougo
Collaborator
Shougo commented Jun 22, 2014

ありがとうございます。if_luaの方のチェックもお願いいたします。

@tyru
Owner
tyru commented Jun 23, 2014

おお、すみません。
if_lua対応の方見逃してました…
あとでレビューします。
ありがとうございます!

ありがとうございます。if_luaの方のチェックもお願いいたします。


Reply to this email directly or view it on GitHub
#148 (comment).

@tyru
Owner
tyru commented Jun 23, 2014

s:validate_vim_version()もなんでこんな変な書き方してんだろ…マージ後に直そう…

@tyru
Owner
tyru commented Jun 23, 2014

2のg:eskk#lookup_dictionariesですが難しそうです。
現状では候補を ユーザ辞書 と (メイン辞書 or skkserv) から一気に取ってきてるので、実装を大幅に変える必要がありそうです。
とりあえず2は別issueにして @Shougo さんの実装してくれたコードのままマージするのがよさそうです。

@tyru tyru added a commit that referenced this issue Jun 23, 2014
@tyru remove debug code (#148) 116bc98
@tyru tyru added a commit that referenced this issue Jun 23, 2014
@tyru trivial doc-fix (#148) 8a85c96
@tyru tyru added a commit that referenced this issue Jun 23, 2014
@tyru remove debug code (#148) 30e5d1e
@tyru tyru added a commit that referenced this issue Jun 23, 2014
@tyru trivial doc-fix (#148) 77673c7
@tyru tyru closed this in 5eabb13 Jun 23, 2014
@tyru
Owner
tyru commented Jun 23, 2014

git pull --rebase origin master したらマージコミット消えてそのままpushしちゃったので push -f しました。大変申し訳ありません。
参考リンク:http://lingr.com/room/vim/archives/2014/06/23#message-19401981

@tyru
Owner
tyru commented Jun 23, 2014

ともあれマージしました。
@Shougo さん本当にありがとうございました!

@Shougo
Collaborator
Shougo commented Jun 23, 2014

マージありがとうございました。

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