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

foldmethod=expr なバッファに setbufline() 使った場合の挙動がおかしい #1080

Closed
thinca opened this Issue Sep 4, 2017 · 6 comments

Comments

Projects
None yet
2 participants
@thinca
Member

thinca commented Sep 4, 2017

質問・報告の内容

foldmethod=expr が設定されているバッファに対して setbufline() 関数を使い、配列を渡して複数行を設定しようとすると、1行目のみが本来の対象バッファに設定され、残りはカレントバッファの指定行(元々指定した先の本来設定されるべき行番号)に残りの行が設定されます。

再現手順

" reproduce.vim
setlocal foldmethod=expr foldexpr=0
new
call setbufline(1, 1, [1, 2, 3])
$ vim --clean -S reproduce.vim

期待する動作

bufnr=1 のバッファに、1 2 3 の3行が表示される。

実際の動作

bufnr=1 のバッファには 1 のみが表示され、bufnr=2 のバッファ(カレントバッファ)に 2 3 の行が表示される。

Vimのバージョン

8.0.1052

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

  • Gentoo Linux

@thinca thinca added the kind/bug label Sep 4, 2017

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Sep 5, 2017

Member

https://github.com/vim/vim/compare/master...ichizok:fix/setbufline.diff

curwin も退避して、対象バッファの b_wininfo->wi_wincurwin にしてますが
hide したバッファの場合は b_wininfo->wi_win == NULL なので curwin はそのままです。
window に付随する情報で予期しない変更が発生するかもしれません。

Member

ichizok commented Sep 5, 2017

https://github.com/vim/vim/compare/master...ichizok:fix/setbufline.diff

curwin も退避して、対象バッファの b_wininfo->wi_wincurwin にしてますが
hide したバッファの場合は b_wininfo->wi_win == NULL なので curwin はそのままです。
window に付随する情報で予期しない変更が発生するかもしれません。

@thinca

This comment has been minimized.

Show comment
Hide comment
@thinca

thinca Oct 31, 2017

Member

@ichizok これって今どういうステータスでしょう? 私の動作確認待ちですか?

Member

thinca commented Oct 31, 2017

@ichizok これって今どういうステータスでしょう? 私の動作確認待ちですか?

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Oct 31, 2017

Member

@thinca そうですね。

Member

ichizok commented Oct 31, 2017

@thinca そうですね。

@thinca

This comment has been minimized.

Show comment
Hide comment
@thinca

thinca Nov 4, 2017

Member

@ichizok 返事遅くなりました。パッチ試しました。
最初に報告した現象は直っていました。ありがとうございます!
他に懸念があるようですが、常用して試そうにも現状の setbufline() がこの状態なので正直使い物にならず、setbufline() を使ったスクリプト自体が普段の環境にないため、常用して試すのも難しそうです。
なのでひとまず提出してしまうのはどうでしょうか?

Member

thinca commented Nov 4, 2017

@ichizok 返事遅くなりました。パッチ試しました。
最初に報告した現象は直っていました。ありがとうございます!
他に懸念があるようですが、常用して試そうにも現状の setbufline() がこの状態なので正直使い物にならず、setbufline() を使ったスクリプト自体が普段の環境にないため、常用して試すのも難しそうです。
なのでひとまず提出してしまうのはどうでしょうか?

@ichizok

This comment has been minimized.

Show comment
Hide comment
@ichizok

ichizok Nov 6, 2017

Member

投げました。
vim/vim#2293

Member

ichizok commented Nov 6, 2017

投げました。
vim/vim#2293

@thinca

This comment has been minimized.

Show comment
Hide comment
@thinca

thinca Nov 7, 2017

Member

取り込まれました!ありがとうございました!

vim/vim@0c4dc88

patch 8.0.1274
Problem: setbufline() fails when using folding.
Solution: Set "curwin" if needed. (Ozaki Kiichi, closes #2293)

Member

thinca commented Nov 7, 2017

取り込まれました!ありがとうございました!

vim/vim@0c4dc88

patch 8.0.1274
Problem: setbufline() fails when using folding.
Solution: Set "curwin" if needed. (Ozaki Kiichi, closes #2293)

@thinca thinca closed this Nov 7, 2017

@thinca thinca added xlose/fixed and removed status/sent patch labels Nov 7, 2017

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