vim-jp / issues

有志で既知のバグや要望を検討・管理し、オフィシャルへの還元をしていきます。
https://vim-jp.org/
342 stars 11 forks source link

提案:SGR形式のマウストラッキングサポート #220

Closed saitoha closed 12 years ago

saitoha commented 12 years ago

パッチ:https://gist.github.com/2857753

以前このパッチをGoogle Group経由でvim_devに投稿しようとしたところ、承認されなかった(投稿ができなかった)模様です。


参考:224桁問題と拡張マウストラッキングについて

拡張マウストラッキングは、xtermにおいて、224以上の座標をアプリケーションが取得できない仕様上の問題を回避するために考案されたものです。

xtermのX10互換形式およびノーマルトラッキング形式(vimのttymouse=xterm/xterm2)では、マウスレポーティングは以下のように表現されます。

ESC [ M Cb Cx Cy

マウス位置座標はCx、Cyで表現され、それぞれ1バイト固定となります。 さらに印字文字で表現するため+32のオフセットが加算され、224以上の座標が表現できません。

これを回避するために、UTF8(1005)形式(座標値をUTF-8の要領でエンコードする)が考案されました。tmux、Poderosaなどの端末が対応しましたが、のちにこの仕様は端末のエンコーディングによっては認識できなくなるなど、いくつかの問題があることが判明し、現在では壊れた仕様とみなされています。

これを解決するためにrxvt-unicodeから整数リテラル表現Dx, Dyを使用して

ESC [ Db ; Dx ; Dy M

とする方法が提案され、多くの端末がこれに追従しました。Vimでもttymouse=urxvtとして実装されています。 しかし現実には、このマウスレポートが誤ってエコーバックされたときに問題が発生すること、いくつかの既存アプリケーション(emacs等)での対応が困難であることなど、またしても不備があることが判明しました。

そこで現在新しく提案されている方法が、xtermによるSGR(1006)形式

ESC [ < Db ; Dx ; Dy M/m

という経緯になります。

さらにくわしいことついては、下記をご参照ください。

https://groups.google.com/forum/#!topic/vim_use/lo6PLRUu2Gg http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking http://togetter.com/li/290073

h-east commented 12 years ago

@saitoha すばらしい。Good Job.

koron commented 12 years ago

Nice work!

ところで、このパッチを投稿した意図はどの辺ですか?

saitoha commented 12 years ago

その両方になります。 以前Google Group/メール経由で投稿したのですが承認されず、あきらめたくなかったので代理で投稿していただける方を探していたところ、@mattnさんにこちらを紹介していただきました。 また、パッチ自体の問題や改良点をご指摘いただけたらと思います。

mattn commented 12 years ago

good job!

@koron

ところで、このパッチを投稿した意図はどの辺ですか?

私が薦めたからです。MLにメアドが登録されないらしくて投稿代理をお願いされておられたので、レビューもかねてこちらで引き受けるつもりでvim-jpを薦めました。

@saitoha vim_devにpushはしますが、contribute author は @saitoha さんの名前になります。お名前教えて頂けますか(若干ハンドル気味でもok:前例 thinca)。

パッチの内容も目検ですがokだと思います。

koron commented 12 years ago

vimdevに登録できない件も聞くために メアドも教えてもらったらどうでしょう?

saitoha commented 12 years ago

Hayaki Saito user@zuse.jp で投稿しました。アカウント名がuserっていうのがスパムっぽくてだめだったかもしれません。

mattn commented 12 years ago

後でlinuxで確認します。

saitoha commented 12 years ago

よろしくおねがいします><

mattn commented 12 years ago

試してみました。 パッチを当て、gnome-terminal のフォントを monospace 1 に設定。:set ttymouse=sgr set mouse=a して、1000ax<esc> で横いっぱいに文字を並べたあと、300文字目くらいをクリックしてみましたが、カーソルが移動出来ませんでした。 すこしずつクリックする位置を左に寄せていったら、222文字目でクリック出来ました。 何か手順が間違ってますでしょうか?

ttdoda commented 12 years ago

gnome-terminalはSGR形式の拡張マウストラッキングに対応していません。 222桁というのは通常のマウストラッキングでの制限です。 非対応の端末エミュレータへの悪影響はなさそうですね。

SGR形式の拡張マウストラッキングに対応した端末エミュレータはUnix用だと以下の二つがあります。 ・xterm (Patch #277以降) ・mlterm (3.1.2以降)

mattn commented 12 years ago

了解です。試してみます。

mattn commented 12 years ago

mlterm 3.1.2 を入れて試してみましたが、やはり 222 カラム以降が選択出来ませんでした。

mattn commented 12 years ago

xtermで試してみます。

mattn commented 12 years ago

xterm でもダメでした。起動直後に set ttymouse? として sgr と表示されているのでパッチも当たっていて、認識もされているかと思います。

saitoha commented 12 years ago

@mattn 検証ありがとうございます。

mattn commented 12 years ago

すみません。xtermはいけました。mouse=a してなかったです>< mlterm も再度試しましたが、xterm2 で認識されていました。

saitoha commented 12 years ago

あれ、mlterm、今度はとれた。リサイズが影響したのかな。勘違いっぽいです。

mattn commented 12 years ago

こんなので良いでしょうか。

Hi list.

I've received a patch to support SGR mouse tracking on terminal.

http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking https://groups.google.com/forum/#!topic/vim_use/lo6PLRUu2Gg

This works well on xterm patch 277 or later.

Currently, vim can't recognize column number of mouse event which is greater than 222. This SGR's patch make it possible. If applied this patch, you can make sure ttymouse is set as 'sgr' on your xterm. And you can select columns greater than 222 with "set mouse=a".

https://gist.github.com/2857753

This patch is written by Hayaki Saito user@zuse.jp. Please check.

Thanks.

BTW, It seems that vim_dev ML does not allow his e-mail address.

mattn commented 12 years ago

そもそもmlterm-3.1.2上だと、ttymouse=xterm2 になってしまってます。

saitoha commented 12 years ago

@mattn 英文ありがとうございます。 あと、未対応の端末でも正常に動作することを強調したいので、

With this mouse mode, vim will accept both "Normal (xterm2)" and "SGR 1006" styled mouse reporting.

に相当する文章をつけくわえていただければと思います。

mltermはDA2というクエリによって、あなたは誰ですか、と訊かれたときに、xtermのパッチレベル96を返します。なのでパッチ適用済みでも自動設定ではxterm2となるのは想定される動作です。ただしもしmlterm3.1.2以降で明示的にttymouse=sgrとしてもうまく動作しないとしたらちょっと問題なので、こちらで確認してみます。

mattn commented 12 years ago

ttymouse=sgrとしてもうまく動作しないとしたらちょっと問題なので、こちらで確認してみます。

この部分確認します。

mattn commented 12 years ago

あ、いけましたw すみません。。。

mattn commented 12 years ago

https://groups.google.com/d/topic/vim_dev/Knkk-NtBayw/discussion

saitoha commented 12 years ago

ありがとうございます!

saitoha commented 12 years ago

BTW, It seems that vim_dev ML does not allow his e-mail address.

He is not subscribed?

と返信がきたようですが、

以下のスクリーンショットを示して、 http://zuse.jp/vimdev.png

I started subscribing to vim_dev on 25 May, but my account (user@zuse.jp) seems to be banned on 27 May.

と、伝えていただければと思います。 よろしくおねがいします。

saitoha commented 12 years ago

やはりリストの件は直メールで個人的に処理すればよさそうな気がしてきました。 アドレスをみつけたので送っておきます。

saitoha commented 12 years ago

MLでの反応のとおりBram氏も身に覚えのないbanだったようで、無事解決しました。ご協力ありがとうございました。現在ではメールサーバがSPF/DKIMに対応していないとGoogleがspamと判断するようです。

mattn commented 12 years ago

反応遅れました。すみません。 解決した様で良かったです。

h-east commented 12 years ago

TODOリストに入りました。

Patch for SGR mouse support. (Hayaki Saito, mail from Yakuhiro Matsumoto, 2012 Jul 13)

h-east commented 12 years ago

Patch 7.3.632 で入りました! https://groups.google.com/d/topic/vim_dev/9VzDNmdd-7I/discussion

@saitoha おめでとうございます。 @mattn お疲れ様でした。

saitoha commented 12 years ago

皆様ありがとうございました。以後、端末側でも普及するよう、働きかけていきます。

h-east commented 12 years ago

(@saitoha さん、後で流れが追えるようにこちらにもリンク貼らせてもらいました。)

先日のttymouse=sgrがtermresponseで無効化される件と、has('mouse_urxvt')、has('mouse_sgr')のサポートをvimdevに投稿しました。 [https://twitter.com/kefir/status/248374269271232512](https://twitter.com/kefir_/status/248374269271232512)

https://groups.google.com/d/topic/vim_dev/sftJXK8mXvA/discussion

saitoha commented 12 years ago

TODOが更新されましたが、SGR 1006の自動認識の挙動を修正する件も入っています。

Patch for SGR mouse with older xterm. (Hayaki Saito, 2012 Sep 19)

http://code.google.com/p/vim/source/diff?spec=svn04592728474a35794ae6397a0b90f2989864fb66&r=04592728474a35794ae6397a0b90f2989864fb66&format=side&path=/runtime/doc/todo.txt

saitoha commented 12 years ago

SGR 1006のtermresponseのバグの件で修正が入りました(Patch 7.3.699)。 また、has('mouse_urxvt')とhas('mouse_sgr')がサポートされるようになりました(Patch 7.3.700)。 https://groups.google.com/forum/?fromgroups=#!topic/vim_dev/u7c-Ad4xKrU https://groups.google.com/forum/?fromgroups=#!topic/vim_dev/idUbycj_4Bw

mattn commented 12 years ago

閉じても... いいのよ...

h-east commented 12 years ago

@saitoha 「BESTターミナルエミュレータ芸人Vimmer of the Year」にノミネートされました。 @mattn 「BESTおっさんギャグ芸人Vimmer of the Year」にぎりぎりノミネートされました。

saitoha commented 12 years ago

ありがとうございます。