cursorbind時にcursorline, cursorcolumn が追従しない #1009

Closed
mmisono opened this Issue Jan 9, 2017 · 19 comments

Projects

None yet

3 participants

@mmisono
mmisono commented Jan 9, 2017

質問・報告の内容

仕様なのかもしれませんが,set cursorbind, set cursorline, set cursorcolumnを2つのウィンドウで設定しているとき,片方のウィンドウでカーソルを動かしてもスクロール等のイベントが発生しない限りもう片方のウィンドウのcursorlineとcursorcolumnが動きません.

動作例

両方のウィンドウで動いた方が直感的な動作であると個人的には思います.
(その分オーバーヘッドが生じますが)

Vimのバージョン

8.0.142

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

  • macOS Sierra 10.12.2

使用している or 関係していそうなプラグイン

vim -N -u NONEで動作検証しています.

その他

以下の修正で目的の動作をすることを確認していますが,正しい修正方法かは分からないです.

diff --git a/src/move.c b/src/move.c
index 912e51ccd..694674b7b 100644
--- a/src/move.c
+++ b/src/move.c
@@ -2841,13 +2841,20 @@ do_check_cursorbind(void)
 	    restart_edit_save = restart_edit;
 	    restart_edit = TRUE;
 	    check_cursor();
+#ifdef FEAT_SYN_HL
+	    if(curwin->w_p_cuc)
+		validate_virtcol();
+#endif
 	    restart_edit = restart_edit_save;
 # ifdef FEAT_MBYTE
 	    /* Correct cursor for multi-byte character. */
 	    if (has_mbyte)
 		mb_adjust_cursor();
 # endif
-	    redraw_later(VALID);
+	    if(curwin->w_p_crb)
+		redraw_later(NOT_VALID);
+	    else
+		redraw_later(VALID);
 
 	    /* Only scroll when 'scrollbind' hasn't done this. */
 	    if (!curwin->w_p_scb)

修正後

@mattn
Member
mattn commented Jan 9, 2017

スクロールすると更新されるという動作から、vim としては意図しない動作(バグ)な気もします。

@h-east
Member
h-east commented Jan 11, 2017

@mmisono issue登録ありがとうございます👍
私も不具合だと思うのでpatchを投げてみる価値はあると思います。
(patch、ちゃんとチェックしてませんが大丈夫そう)

@mattn
Member
mattn commented Jan 11, 2017

@mmisono 僕も良いと思います。pull-requst 投げて頂いて良いですか?万が一、面倒 or 英語苦手 or 宗教上の理由でNG、などあればご相談下さい。代行可能です。

@mmisono
mmisono commented Jan 12, 2017

コメントありがとうございます.
今vimは普通にgithubでpull-request受け付けてるんでしたかね.
少し確認してから投げてみます.

@mattn
Member
mattn commented Jan 14, 2017

8.0.181
vim/vim@519d778

@mattn mattn closed this Jan 14, 2017
@mattn mattn added the xlose/fixed label Jan 14, 2017
@mmisono
mmisono commented Jan 14, 2017 edited

あれ,

+# ifdef FEAT_SYN_HL
+	    if (curwin->w_p_cuc)
+		validate_cursor();
+# endif

だと cursorclumn設定しているときはいいけれど cursorline だけのときは動かないような..

@h-east
Member
h-east commented Jan 14, 2017

@mmisono いまさっきBramに突っ込み入れました。
https://groups.google.com/d/msg/vim_dev/JxpsXs5U77I/1Tb3DKH7BwAJ

@mattn
Member
mattn commented Jan 14, 2017

修正コードがコメント欄で書かれてたからパッチも更新されてたと思ってた疑惑。

@mattn mattn reopened this Jan 14, 2017
@mmisono
mmisono commented Jan 14, 2017 edited

ありがとうございます.
今手元で確認しましたがやはりcursorline && cursorbindだけのときは動かないですね
if文なしでvalidate_cursor()を呼べばcursorline && cursorbindでもokなことは確認してるんですが

@mmisono
mmisono commented Jan 14, 2017
	    if (curwin->w_p_crb
# ifdef FEAT_SYN_HL
	       || curwin->w_p_cuc
# endif
	       )
		validate_cursor();

こうしてあげればいいんですかね.
もしかしてvalidate_cursor()FEAT_SYN_HLじゃないと呼べないとかあると困りますが..

@h-east
Member
h-east commented Jan 14, 2017

@mmisono curwin->w_p_crbは22行上のif文で判定済みなので不要です。

もしかしてvalidate_cursor()が FEAT_SYN_HLじゃないと呼べないとかあると困りますが..

それはないです。大丈夫です。

正解patch(maybe)を送付済みです。
https://groups.google.com/d/msg/vim_dev/JxpsXs5U77I/-766ESz9BwAJ

@mmisono
mmisono commented Jan 14, 2017 edited

あ,w_p_crbじゃなくてw_p_culでしたね,ありがとうございます.

@mmisono
mmisono commented Jan 14, 2017 edited

patch 8.0.0182
vim/vim@e47683a

結局cursorlineのときはNOT_VALIDでredrawするように修正されたようです.
個人的にこの機能が最近欲しいことがあったので良かったです. mattnさん,h-eastさんありがとうございました!

@mmisono mmisono closed this Jan 14, 2017
@h-east
Member
h-east commented Jan 15, 2017

patch 8.0.0188
vim/vim@9506cad

@mmisono
mmisono commented Jan 15, 2017

vim-dev送ったのが反映されないと思ったら,初回だったので承認が必要だったんですね
あぁ,メールでも culにしたつもりがcrbになっていた.. (というか一番最初のパッチから間違えてましたね)

@mmisono
mmisono commented Jan 15, 2017

あれしかし今度は #ifdef FEAT_SYN_HL で囲んでないけどいいんだろうか.. (他で curwin->w_p_cuc 読むことろはしている)

関数自体が #if defined(FEAT_CURSORBIND) || defined(PROTO) となってるからいいとかそういう話かな

@h-east
Member
h-east commented Jan 15, 2017

@mmisono 私も「ん?」と思ったんですが、Travis CIでtinyも含む全featureのビルドがパスしているので大丈夫だと判断しました。。。(続く)

feature.h

#if defined(FEAT_NORMAL) || defined(PROTO)
# define FEAT_SYN_HL
#endif

feature.h

#if defined(FEAT_NORMAL) && defined(FEAT_WINDOWS)
# define FEAT_CURSORBIND
#endif

でも、直接FEAT_SYN_HLをundefされたらアウトですね。やっぱり囲んでおいたほうが良さげです。
patchお願いできますか?

@mmisono
mmisono commented Jan 15, 2017

分かりました,送ってみます

@mmisono
mmisono commented Jan 15, 2017

vim/vim@1b9750d

今度こそ大丈夫なはず.. (結局h-eastさんのパッチで良かったですね 😅

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