Closed kat0h closed 1 year ago
setcellwidths()
setcellwidths({list})
[[low, high, width]] 関数が呼ばれるたびに全ての要素について範囲のチェックが走る
[提案] getcellwidths()
を追加
getcellwidths()
を追加します。
これはsetcellwidths()
で設定したcell widths of character rangesを取得できるようにするものです。
関数は設定した値をソートして返します。
[理由]
・対称性
これまでは、setcellwidths()
で設定した値を取得することができませんでした。他の関数には設定を取得する関数があるため、現在の状況は少々不自然です。
・テーブルに値を追加できるようになる
setcellwidths()
はcw_table
の値を初期化するため、複数の箇所でセル幅を設定することはできません。
getcellwidths()
により次のような形でエントリを追加できるようになります。
call setcellwidths([[0x2729, 0x272f, 2], [0x2730, 0x273f, 2], [0x2740, 0x274d, 2]])
echo getcellwidths()
call setcellwidths(getcellwidths() + [[0x274f, 0x274f, 2]])
echo getcellwidths()
・デバッグがしやすくなる
setcellwidths()
はcw_table
の値を初期化するため、誤って複数の箇所で関数を呼び出した場合、最後の設定しか反映されません。現在の設定を把握することはデバッグに役立ちます。
[補足]
・ヘルプファイルは書き換える必要があるかもしれません
・runtime/syntax/vim.vim
に関数を追加する必要があります
ありがとうございます
getcellwidths()
Add getcellwidths() function. This allows the user to retrieve the cell widths of character ranges set by setcellwidths(). The function sort and return the values.
Previously, it was not possible to retrieve the value set by setcellwidths()
. The current situation is a bit unnatural since other functions have functions to retrieve settings.
Since setcellwidths()
initializes the value of cw_table
, it is not possible to set cell widths in multiple places.
getcellwidths()
allows you to add entries in the following way...
call setcellwidths([[0x2729, 0x272f, 2], [0x2730, 0x273f, 2], [0x2740, 0x274d, 2]])
echo getcellwidths() " [[10025, 10031, 2], [10032, 10047, 2], [10048, 10061, 2]]
call setcellwidths(getcellwidths() + [[0x274f, 0x274f, 2]])
echo getcellwidths() " [[10025, 10031, 2], [10032, 10047, 2], [10048, 10061, 2], [10063, 10063, 2]]
Because setcellwidths()
initializes the value of cw_table
, if the function is called in multiple places by mistake, only the last setting will be reflected. Knowing the current settings is helpful for debugging.
runtime/syntax/vim.vim
Thank you.
内容
setcellwidths()に対応する関数として、getcellwidths()がほしい 背景: setcellwidths()は項目の追加ができないため、一度に設定を記述する必要がある。 追加するとすると、データ構造的に追加での計算量が多くなってしまう。 ↓実装 https://github.com/vim/vim/blob/0e364c9fca7a666de0775007d2f0687ecdd73c8d/src/mbyte.c#L5611 setcellwidths()で追加したデータを取得する関数を用意すると良いのではないか
Pros 良くなる点
関数の対称性 (擬似的に)追加ができるようになる 曖昧幅の表示がうまく動作しない場合、デバッグしやすくなる
Cons 悪くなる点
(懸念点) setcellwidths()に値を追加できない問題の直接的な対応策ではない テーブルに大量の値が登録されていた場合、大きなデータのコピーが走る
実現方法
内部のデータをVim scriptのオブジェクトに落とし込む
Vimのバージョン
9.0.1046
OSの種類/ディストリ/バージョン
Manjaro Linux (OS関係なし)
その他
自分でパッチを書いてみようかなと考えています(2023-01-10)