The following part is progress log, written in japanese. --- 特に記述のない機能は「まだ手もつけてない」ってことを意味します。 未解決: 特定条件下で、画面一番左(80字目)のmultibyte文字が描画されない。 未解決: multi_ext2int_regionの引数関係整理(4/4) 特に行数が変化するときの処理について。 未解決: sjis/euc-jpでのJIS X0201左半分の取扱い。(4/2) - 書き出し/表示時にASCIIだとおもって出力 yen markとbackslashの区別は一生つかない - 書き出し/表示時に区別して出力 区別はつくけどescape sequenceが... -> encoding名にオプションが書けるようにする? fileencoding=sjis:nantara:kantara 複雑でわかりにくい。誰がparseするの? 未解決: leftrightのとき、行左端の位置がおかしい。(2/21) 特に、いちばん左の桁からmultibyte文字が始まるとき。 未解決: isblank()関係のトラブルシューティング。(2/19) 一部のOSに付属のはマイナスの値を渡すと発狂する。 -> char *はほぼ全部CHAR_Tに。 printf関係面倒。 -> CHAR_Tをu_intにしよう計画へ 未解決: exのechobackをどうしよう? (2/14) 未解決: escのタイムアウトが倍長い。まあいいかあ?(2/7) 未解決: :rでファイルを読んだあとundoすると、内部表現に 変換をやった行数がバレてしまう。(2/4) これ逃げるの相当難しいです。undo log managementのところを 嘘つかないといけないんだもんね。 未解決: wrapmargin/wraplenの完全化。行を切る条件の調整。(2/15) 途中: JIS X0201-leftの文字とASCIIの文字とか、検索とかのときに 同一視したい文字はどうすればいいか?(2/4) 1. 正規化ツールをつけてfilterしてもらう(2/11 ok) 2. 同一視するオプションをつける --- 面倒 未解決: cl_deleteln()は現在移植性がないので直す(2/3) inch()のmultibyte化ってどうやればいいんだ。 未解決: Wnnとのリンクは可能か?(2/2) きっとめんどくさいとおもう。 cserverとか使えるときっといいんだけどな。 未解決: 英語nvi/viとの.exrcのコンフリクトをどうしよう。(2/2) 1. コメントにしておく 2. ファイル名を変える 3. wrapperで逃げる 4. 気にしない 未解決: 正規表現をがんばろう(12/30) 残るは単語境界認識。 要調査: 各種iso-2022-*系端末ソフトの生成するキーボード入力コード。 どこまでまじめに解釈する必要がある?(12/29) 要再考: 自動判別について再考。(12/26) 読み込み的問題: 判別できないやつをどうするか 書き出し的問題: ファイル内のcharsetを全部encodeできるか 未解決: 自動判別絶対できないやつはどうやって選べばいい?(12/26) 実はeuc-*って区別が効かないのでさあどうしよう。 あとlatin*とかは区別できないね。 未解決: multi_predict_region()のencoding判別をもっと細かく(12/24) 要再考: multi_ext2int_region()のエラー処理(12/24) 危ないことするのに、現在はへくったらabort()。野蛮。 未解決: 知らないISO-2022-*のescape sequenceの対処(12/23) いまはASCIIと思ってるので、ASCII inがでない。 要再考: 単一言語encodingのパーサで知らないcharsetが来たらどうする? (12/23) いまは捨ててる。 要再考: 行末またいでmultibyteが来た時は行末スペース埋めでいい?(12/23) muleみたいにbackslash埋めもテだな。 未解決: :set leftright時のmultibyteの行末処理(12/22) 途中: joinコマンドのmultibyte対応再考(12/8) 文字種ごとに動作を変えられるように。 途中: (コマンドと)コマンド(multibyte文字の上は通り抜けるだけ) (11/30) 途中: %コマンド(multibyte文字の上は通り抜けるだけ) (11/30) 途中: ~コマンド(multibyte文字の上は通り抜けるだけ) (11/30) 2004/4/1 publish a new diff as "cvs diff" (with old cvs) generated malformed diff. 2002/5/22 support iso-2022-15 2001/10/24 plug a printf string vulnerability. 2000/4/7 iso-2022-jp-3自動認識 common/multibyte.c 99/11/17 作業: 行末にmultibyte文字がかぶったときの処理の修正(カーソル位置計算に 失敗しabortしていた) vi/vs_relative.c vi/vs_line.c 99/8/11 作業: iso-2022-jp-3対応 common/multi_iso2022.c 99/8/9 作業: JIS X0213対応 common/multibyte.c 99/3/10 作業: 98/9/30の変更の欠けを修正。ずけらん@沖縄様、感謝。 common/multi_iso2022.c 98/11/5 作業: indentationの中にカーソルがある場合、shift(<<)のときに sp->cnoは修正されないので、たまにmultibyteの中を踏むことがあった。 正しいふるまいがよくわからないから、とりあえずsp->cnoの補正を することにした。 ex/ex_shift.c 98/9/30 作業: e->shifttypeの値によって、キー入力の際のlocking shift/single shiftを受け付けたり無視したりするようにした。 例えば、euc系のencodingの場合、SS2RとSS3R(0x8eと0x8f)しか 受け付けない。 onoe@sm.sony.co.jpの要望による。 common/multi_iso2022.c 98/6/16@new orleans 作業: ESC ( 0とESC ( 1、ESC , 0とESC , 1をprivate character setとして 認識するようにした。 98/2/22 作業: 0x80の画面出力がおかしかったのを修正。 vi/vs_line.c 解決: binaryで0x80を入れるとヘンになる。多分、2byteめが0x00に なるため。(97/9/1) 9/25 作業: solarisで--enable-cannaするとヘンだったのを修正 (thanks to senda@ic.rdc.ricoh.co.jp) build/configure.in 9/23 作業: ソース管理をcvsに移行 作業: :set foobaa="baz" -> :set foobaa=baz docs.m17n/README.english docs.m17n/README.japanese 8/22 作業: fileencoding=sjisのとき、サポート外のcharacter setを 使ったときの挙動がおかしかったので修正。 common/multi_sjis.c 8/20 作業: typo fix: s/JIS X0208-1976/JIS X0208-1978/ common/multibyte.c common/multi_iso2022.c 作業: character set名の整理。 common/multibyte.c 作業: multibyte文字の上で"r\r"すると化けていたのを修正。 vi/v_replace.c 作業: JIS X0208-1990サポート。ESC & xのサポート含む。 common/multibyte.c common/multibyte.h common/multi_iso2022.h 6/17 作業: memory leak関係の修正。 6/2 作業: sjisの自動判定が間違っていた(0x8eと0x8fが現れたときの処理)ので 修正。serowさんのレポートのおかげです。 common/multibyte.c 5/24 作業: sizeof(size_t) != sizeof(int)なマシンのための修正。 cl/cl_read.c 4/11 作業: ポカミス修正。thanks to dsp@aries.bekkoame.or.jp common/multibyte.h 4/10 作業: ポカミス修正。 regex/regcomp.c 4/8 23:00 作業: canna fenceがいきなり画面下にでないといけないときに 存在しない行のrepaintに行っていたのを修正。 canna関係、もうちょっと整理しないとなあ... common/multi_canna.c 作業: ドキュメント直し。 4/6 作業: multi_predict_iso2022()のbugfix。SS2が来ると落ちていた。 common/multibyte.c common/multibyte.h 作業: autodetect=tw common/multibyte.c common/multibyte.h 4/4 作業: :rしてからundoしたときの"n lines changed"の表示がでないように できないかな、と思ったが、無理だった。 作業: iso2022系のときの、行末のリセット方法を変更。 common/multi_iso2022.c 作業: MB_JOINの処理。きたないぞ。 common/multibyte.c common/exf.c ex/ex_read.c ex/ex_script.c 解決: hz encoding時の行連結のescape(行末の~)。(12/26) 解決: iso-2022-krの特別扱い。(4/1) 1. designationは行頭でやらねばならない(4/2 ok) 2. designationのみの行があったら読み飛ばさねばならない (RFC1557には書いてないけど、習慣上) 4/3 10:00 作業: hzの行末エスケープとiso-2022-krのためにちょっとした準備。 MB_JOINの定義。まだ処理するところは書いてない。 common/multi_iso2022.c common/multi_hz.c common/multibyte.h 作業: selcharset()をselcharset()とcallcharset()に分割。 ちょっとした整頓。 common/multi_iso2022.c 4/2 作業: iso-8859-[1234789]を用意。iso-8859-10 additions(ESC , X)を追加。 common/multibyte.c common/multibyte.h 4/2 14:00 作業: iso-2022-krについて一部解決。designationを行頭に吐く。 Thanks to Jungshik Shin common/multibyte.c common/multibyte.h 3/30 作業: euc-twサポート。curses多国語化の制約からCNS11643-1以外は画面に 出せないけど、まあとりあえず。 common/multibyte.c common/multibyte.h common/multi_euctw.c 3/28 作業: iso-2022-cn/-extがいまいちだったのを修正。 encoding名として、iso-2022-jp-2とiso-2022-cn-extを用意。 内容的にはおなじ。 common/multi_iso2022.c common/multibyte.c 作業: regular/qregularの強化。ISO646 character setで、中間文字の ないものはだいたいフォロー。 http://www.kudpc.kyoto-u.ac.jp/~yasuoka/CJK.htmlのおかげです。 build/regular.in build/qregular.in 3/27 作業: v_fep_on()とかを新設、fepctrl関係を若干整理。 common/multibyte.c vi/vi.c 作業: qregularのsmall bug fix build/qregular.in 作業: canna modelineのechobackについてちょっと再考。 cannactrlをonにしているとき、"Pattern not found"が出ない。 解決: canna modelineの制御要再考。(3/24) 起こして一発目のとき、modelineismine == 0なので、 たいていmodelineが出ない。 common/multi_canna.c vi/vs_refresh.c vi/vs_msg.c 3/24 作業: 入力モードでcontrol-Xで0x80以上の文字をつっこむときの 処理を修正。 vi/v_txt.c 3/17 作業: キー入力のmultibyte系内部状態をcontrol-Cでリセットするように した。 iso-2022-*系のencodingをキー入力に使っていて、LS3とかが 入ってにっちもさっちもいかなくなった例を聞いたので。(thanks tate) cl/cl_read.c 3/6 作業: configure.inからconfigureを生成すんのを忘れていた。 3/1 24:00 体調最悪... 精神的にいまひとつなので体調戻りゃしない。 作業: set canna cannactrlしていて、"/あ"とかしたときに、 "Pattern not found"の表示がでかったのを修正。 具体的にはcanna modelineの消去処理を訂正。 とてもquickhackでわかりにくいので要整理。 common/multi_canna.c vi/vs_refresh.c 2/28 作業: regexpの[^あ]とかうまくいかなかったのを修正。 やっぱりregexpまわりはミスがあるな。 regex/engine.c 作業: regexp replacementの\1とかがうまくいかなかったのを修正。 regex/engine.c 作業: exの:printとかの行末処理が甘かったのを修正。 vi/vs_msg.c 2/24 作業: regularがあんまり遅いのでqregularを用意。 build/configure.in build/qregular.in 2/22 24:00 作業: CHAR_T関連整理を若干。 作業: encodingがみあたんないときにmulti_name()で落ちていた。 common/multibyte.c 2/21 24:00 途中: char -> CHAR_T。KEY_BLEN()とかの引数。 KEY_BLEN()とかの定義もちょっと直し。これで足りるといいな... */*.c common/gs.h 2/20 作業: mailing list改名。nvi-jp@dit.co.jp -> nvi-m17n@dit.co.jp docs.m17n/README.* 2/20 16:00 作業: bcopy()/index()を排除。 */*.c 作業: 行末でバイト数が増えるようなoverwriteをすると腐るのをfix. (例: 行末の"a"を"あ"でoverwrite) vi/v_txt.c 2/19 途中: char -> CHAR_T。とりあえずisxxxxx()の引数と思われるものだけ。 */*.c 2/17 作業: recoveryのとき余計に外部コード->内部コードの変換が余計に 起きるのを修正。ただし、ひじょーに汚いpatchです。 (thanks for trouble report: tate@nerv.org) common/exf.c common/gs.h 2/16 作業: autodetect=nantara+のとき、ctrl-Gでfileencodingが表示される ようにした。 common/msg.c 作業: コメント整理。 common/multibyte.c 作業: :set autodetect=jp+とかすると、fileencodingをoverwriteする。 common/multibyte.c 解決: elvisで言うところの:set kfilecode=euc-jp+。(12/24) (自動判別の結果でoptionを上書きする) 作業: autodetectまわりの見直し。だいぶよくなったと思いますが、 iso-2022-kr/cnについてはちょっと不安だ... common/multibyte.c 2/15 作業: canna fenceのechobackを整理。 common/multi_canna.c 作業: JIS X0208-1983/1976の単語認識がいまひとつだったので修正。 common/multi_chclass.c 2/14 作業: wrapmarginの処理をまともにした。これでたぶん落ちない。 ただ、いい動作かどうかには不満が残る。 vi/v_txt.c 解決: 日本語のwrapmarginによる行wrap(12/21) できたら単語区切りで曲げる? そこまでせんでええ? 2/13 作業: exの画面出力のあとdesignationのリセットがなかった。 とってもquickhack、かつ毎度毎度ASCIIをdesignateするので かっこわるい。 vi/vs_msg.c 2/11 作業: regularというツールをつけた。これでJIS X0201 romanの"a"とかを 全部ASCIIの"a"に直せます。 build/regular.in ちょっとだけ解決: JIS X0201-leftの文字とASCIIの文字とか、 検索とかのときに同一視したい文字はどうすればいいか? 作業: ctextで文字セットを呼び出す先を決めるアルゴリズムが 間違ってたので修正。 行末のdesignationの処理(eolreset)を修正。 ctextの場合のように、ESC $ ( BでJIS X0208-1983を呼び出す ものに対応した処理を追加(nooldstyleをgrepするとわかる)。 common/multi_iso2022.c common/multibyte.c common/multibyte.h 2/7 作業: WとBの動作(特にcountを与えたとき、ASCIIとそれ以外が混ざってる とき)がヘンだったのを直した。 vi/v_word.c 2/5 作業: canna_echoback()のミス修正。画面一番下行を余計にredrawしていた。 common/multi_canna.c 作業: tabの上の右移動がヘンだったのを改善。 vi/vs_refresh.c 作業: showmatchのときのcanna fenceの再表示を改善。 canna_echoback()が超複雑になってきました。困ったぞ。 cl/cl_read.c common/multi_canna.c 解決: set showmatchしてる場合、括弧の対応表示中に キー入力すると、fenceが開き括弧の上に表示される。(2/4) 2/5 11:00 作業: v_replace()の中の変数名バッティングを解決。(mblen) vi/v_replace.c 作業: canna_on/off関係をもうちょっと調整。fepkeyに指定されていない コマンドの処理をなめらかに。 vi/vi.c 作業: range指定に"/"とかを使うと画面が崩れていたのを直した。 vi/v_search.c 作業: 画面いちばん下の行で長すぎるfenceを出したときに画面が 腐っていたので修正。 common/multi_canna.c 解決: canna関連: fenceが長すぎるときの対処(2/3) 作業: :rしたときに盛大に文字化けするのを修正。ただし、ちょっと 「逃げ」です。 ex/ex_read.c 2/4 15:00 作業: 漢字を半分だけ書き潰すときの処理を追加。 ざっくり書き換えてしまいました。 curses/addbytes.c 作業: configureのcanna関連を直し。 build/configure.in 2/3 26:00 作業: 反転した行のスクロールのときに、multibyte関連の情報が ごっそり消えていたのを修正。ただし、移植性のことを考えない 記述になっているのであとで直すべし。cl_deleteln()ね。 cl/cl_funcs.c 作業: 漢字を半分だけ書き潰すときの処理を追加。エンバグこいてたので ちょい修正。 curses/addbytes.c 作業: fenceが画面左端を越えたときの処理。colon modeでもちゃんと fenceが画面下に逃げる。長すぎるfenceはまだだめね。 common/multi_canna.c 2/3 21:00 作業: fenceが画面左端を越えたときの処理。画面最下行に移る。 もともと最下行にいるときはどうしようかなあ。 common/multi_canna.c vi/vs_refresh.c 作業: 漢字を半分だけ書き潰すときの処理を追加。結構大量に 書き換えてしまいましたが、同じ意味のことを書き直して いるだけなので問題はないはずです。 curses/addbytes.c 作業: canna関係。fenceがonの最中、control-Oがcanna側に渡って いなかった(文節が伸ばせない)。 common/multibyte.c 作業: canna関係。jrKanjiString()の返り値について問題点があったので 直し。ks.length == -1のときの処理を忘れてた。 他のことはだいたいclient側はstatelessでいいのに、ここだけ ちょっとstatefulなのね、fenceの文字列覚えとかないと いけないから。echobackさぼる処理はclient側でもやれるから、 statelessであって欲しかった。 common/multi_canna.c 作業: cannaのcontrol-C対策のミスを修正。 cl/cl_read.c 作業: fepkeyの忘れてたところ修正。range入力の際のcanna_on/off。 vi/vi.c 2/2 26:00 作業: configure.inの見直し。FreeBSDとか、ディレクトリ名のprefixが 違うやつ対策とかそのほか。 build/configure.in 2/2 22:00 作業: cannakeyの変更。以前は「control-Oにするなら"O"」だったが、 簡単のためcontrol-Oとかをそのまま指定してもらうことにした。 (というか、:set filecとかもそのまま指定なので) common/options.c common/multibyte.c 作業: fepkey関係の調整。結構かわいく動くぞ。 :set fepkey="?/aioAIOcCrRtfTF" とかいう無茶しても平気。 common/options.c vi/v_txt.c vi/vi.c 作業: canna利用中にcontrol-Cが押されたときの動作を変更。 control-Cが来るとcanna_force_off()します。 cl/cl_read.c common/multi_canna.c 作業: canna関連の再描画をチェック。これでかなり完璧でしょう。 common/multi_canna.c 作業: cursesのmultibyte化の大ポカを修正。全然初期化が足りなかった... まあ無駄に描画するだけで実害なかったのはさいわい。 curses/*.h curses/*.c 作業: 文字を引数にとるコマンド(rとかfとかtとか)のmultibyte対応。 vi/v_ch.h vi/v_init.c vi/v_replace.h vi/vi.c vi/vi.h 解決: fとかtとか(multibyte文字は検索できない) (11/25) 作業: viコマンドモードでmultibyte文字をつっこんだときにはねる ようにした。 vi/vi.c 作業: 作業忘れの修正。カーソル移動前にASCIIに戻すの忘れてた。 curses/refresh.c 作業: :set searchincrのときの動作の修正。 vi/v_txt.c 作業: word erase(control-W)のmultibyte対応。 vi/v_txt.c 2/2 12:00 作業: cannaサポート。いろいろ困ったちゃんなところは残っているので、 multi_canna.cでも見てください。 common/multi_canna.c common/multibyte.c common/options.c common/options_f.c vi/v_txt.c vi/vi.c vi/vs_refresh.c 2/1 作業: 行の折曲げ処理に不完全なところがあったので修正。 vi/vs_line.c 1/30 途中: wrapmarginに挑戦。まだ不完全なのでときどき落ちる。 自分であまり使わないオプションなので気合いが入らない。 vi/v_txt.c 1/29 作業: 最近バグレポもないのでpublic releaseしてみる。 1/14 作業: encodingとしてctextをいれました。仕様書がないんですが 誰か持ってない? ESC $ @とかをESC $ ( @にしないといけないらしいんですがそこは やっていません。 現状だとG1(GR)は96 charsetにしか使われないけどこれでいいのかな? common/multi_iso2022.h common/multibyte.c common/multibyte.h 1/10 作業: :set leftrightの改善。あともうすこしかな。 vi/vs_refresh.c vi/vs_relative.c 作業: iso-2022 7bit encodingのとき、CS_RAWのデータを書き出そうとすると 落ちてたのを修正。 common/multi_iso2022.c 1/9 作業: 型に極力const修飾子をつけた。 common/multi* 解決: multibyte.cの中のポインタをただしくconst char *とかに 直す(1/6) 1/4 27:00 作業: :set autodetect=cnのときに、hzの認識を追加。 :set autodetect=cn 中国語用(euc-cn/big5/others) common/multibyte.c 1/4 26:00 作業: autodetectの仕様変更。国別の設定(文字列で)にした。 やっぱりeuc-cnとbig5は区別すんのほぼ無理だ。 :set autodetect=jp 日本語用(euc-jp/sjis/others) :set autodetect=cn 中国語用(euc-cn/big5/others) :set autodetect=kr 韓国語用(euc-kr/others) :set autodetect=それ以外 autodetectしない common/exf.c common/multibyte.c common/options.c ex/ex_read.c ex/ex_script.c 1/4 16:00 作業: 画面のrefreshまわりを整理・再チェック。だいぶんまともになったと 思います。:set leftrightはまだよ。 vi/vs_line.c vi/vs_refresh.c 作業: quailもどき実験中のバグとり。xxx_keyinputとのインタフェース問題。 cl/cl_read.c 作業: quailもどき実験中。標準配布の状態ではcompile inされません。 手でmakefileとソースをいじってね。こんなの需要あるのかな。 そこそこだが1対1以上のmappingは辛いぞ。 common/test/multi_quail.c 1/3 作業: :set inputencodingあたりのエラーチェック強化。 common/options_f.c common/multibyte.c 作業: canna組み込み実験中。標準配布には入ってません。 やっぱりinput methodは外の方がいいような気がする。 いろんな意味で。というわけで途中までしかやらずに中止。 作業: abbrevをmultibyte文字の近所でやっても発狂しないよう修正。 vi/v_txt.c 1/2 作業: displayencodingをglobal optionに変更。 common/gs.h common/options.c 作業: multibyteの正規表現、range指定。 regex/regcomp.c regex/engine.c 1/1 作業: なんと、正規表現検索に関してはrange指定と単語区切り以外 だいたいできていることが判明した(:set extendedせずに試していた)。 やったぜ。 作業: common/multibyte.cがでかいので分割。ついでにcharset名の #define関係を自動生成化。ちょっとソース分けすぎた? multi_chclass.cだけ分け方がencodingじゃないのが気になるけど まあいいか。 build/distrib common/multi_big5.c common/multi_chclass.c common/multi_euc.c common/multi_eucjp.c common/multi_hz.c common/multi_iso2022.c common/multi_none.c common/multi_sjis.c common/multibyte.awk common/multibyte.c common/multibyte.h include/multibyte_def.h 作業: korean(KSC5601)の単語移動。試してないぞ。 common/multibyte.c 12/31 30:00 あけましておめでとうございます。新年(1:00AM)の四谷駅のホームでhack する怪しいひとです。 作業: big5サポート。多分動くと思うけど、試しようがない。 iso-2022-*のときのencodingと内部表現はmuleと合わせてあります。 ("ESC $ ( 0"と"ESC $ ( 1") big5も自動判別対象にしてロジックは書いてありますが、多分判別 すんのは難しいでしょう。特に短い文書のとき。 解決: big5は必要。(12/27) common/multibyte.c 12/30 25:30 作業: たいしたことじゃないけど、:verでバージョンがでるようにした。 ex/ex_version.c ex/mversion.h 作業: :scriptのmultibyte対応。:scriptって初めて知ったんだけど、 すげえ快調。こりゃええわ。やめられまへん。 このためにmulti_ext2int_region()のインタフェースを若干変えた。 common/multibyte.c common/exf.c ex/ex_read.c ex/ex_script.c 作業: :globalをmultibyte対応。 ex/ex_global.c 12/30 20:00 作業: multibyte文字の正規表現検索をちょっとづつやってます。とりあえず "."はmultibyte文字ひともじとmatchします。 multibyte文字の上をrange指定で踏んでも発狂しません。 word境界認識をしようとすると発狂するはずです。 patchはとっても汚いぞ。 regex/regcomp.c regex/engine.c regex/regex2.c 作業: multibyte文字の検索/置換(viで言う"/"と"?")。正規表現はまだナシね。 ついでに、range指定にmultibyte文字使っても平気。 common/search.c ex/ex.c ex/ex_subst.c regex/regcomp.c 作業: ファイルのencoding自動判別をちょっと改善。 common/multibyte.c 12/29 作業: 汎用iso-2022-*キーボード入力。キーボード入力コードの変換は event manager部に突っ込まれました。 iso-2022-jp以外で試していません。いぢめてみてください。 あ、そうそう、control-N/Oは常に食われちゃう(SOとSIだもんね)ので、 vi commandモードでcontrol-Nとかを打っても、viのコマンドとは 認識されません。SO/SI解釈するのやめようかな... 解決: キー入力のmultibyte対応再考 (12/21) keyboard event engineに突っ込まないとiso-2022-*の ときに破綻する?(ESCのハンドリング) cl/cl.h cl/cl_read.c cl/cl_main.c common/key.c common/multibyte.c common/options_f.c vi/v_key.c vi/ex_key.c 12/28 26:30 作業: ドキュメントの更新。 12/28 15:30 作業: cursesの徹底multibyte対応。sjisでx0201 kanaも使えるぞ。 詳細はcurses/README.jnvi参照。 解決: curses側の行末処理がまだなのでときどき化ける。(12/27) 解決: cursesのmultibyte処理(12/1) cursesに渡す文字列はどうエンコードするべきか? あるいはstandout()みたいに別関数? curses/README.jnvi curses/addbytes.c curses/box.c curses/cr_put.c curses/curses.h curses/insch.c curses/refresh.c 作業: multi_name()をちょっと書き直し。euc/sjisのサポートを綺麗に。 :set skipdisplayで"?"での表示の切替え。 解決: multi_name()の中で日本語だけずるしている。(12/27) x0208.1973とx0208.1983を両方表示できるようになっている。 common/multibyte.c common/options.c 12/27 kinput2をinstallしなおしたので、とうとうこのコメント文自体も jnviで書いてます。 作業: cursesのiso-2022-*対応(仮)。なんでもG0にdesignateしてしまいます。 あわせて画面出力のiso-2022-*化。 cursesでiso-2022-*を使うときは、エスケープシーケンスと文字を 一気にaddnstr()しないとうまく動きません。注意。 curses/addbytes.c curses/refresh.c curses/cr_put.c common/multibyte.c 作業: cursesのeuc 2byte対応不足の直し。日本語の場合バイトめかを 記録しておかないとあとで面倒。 curses/addbytes.c curses/refresh.c 作業: vs_msg()のmultibyte対応。 multi_name()のタイミングをずらした。printf()またはaddnstrする ときまで我々のencoding方式で持っていく 解決: viから:pしたときの処理。(12/27) vs_msg()と一緒で、2度KEY_NAME()することになる。 タチ悪い。 解決: vs_msg()のmultibyte対応 (12/1) ex_print()とvs_msg()と2回KEY_NAME()を通るので タチが悪い cl/cl_funcs.c common/multibyte.c ex/ex_print.c vi/vs_line.c vi/vs_msg.c 途中: vs_msg()のmultibyte対応(12/1) 作業: indentationの調整をすると落ちるバグを修正。 実は単なるひともじtypoだった... vi/v_txt.c 作業: exのテキスト入力(:appendとか)をmultibyte対応。 inputencodingに従います。 ex/ex_txt.c 作業: iso-2022-jp2ではlatin1などの96 charsetsはG2にdesignate するよーに、と書いてありました。見落としてた。 これに従うよう、iso2022jp関連の処理を変更。 12/27 13:00版のREADME.jnviには嘘がありました。 common/multibyte.c 作業: 0x8e/0x8f(single shift G2/G3)のあとは8bitめをみない、ってことは GL/GRの両方にG2(またはG3)が貼られるんですね。ふーむ。 common/multibyte.c 12/27 13:00 作業: デフォルトのencodingをconfigureのパラメタに追い出し。 全てのencoding(input/display/file)のデフォルト値が影響されます。 別にeuc-*以外言ってもいいけど、表示できないからね。 % ./configure --enable-multibyte (euc-jpになる) % ./configure --enable-multibyte=euc-kr % ./configure --enable-multibyte=euc-jp % ./configure --enable-multibyte=euc-cn build/configure.in build/config.h.in common/multibyte.h 作業: euc-jp/cn/krの表示をサポート。 common/multibyte.c 12/26 24:00 作業: euc-jp/cn/krのキーボード入力を共通化。 :set inputencoding=euc-jp キー入力はeuc-jp :set inputencoding=euc-cn キー入力はeuc-cn :set inputencoding=euc-kr キー入力はeuc-kr common/multibyte.c 作業: euc-jp/cn/krのfile conversionをiso-2022-*の一部として一般化。 具体的には、SS2/SS3をiso-2022-*でhandleできるようにした。 selcharset()はばっちいのでもうすこしまともにしたい... common/multibyte.c 12/26 20:00 作業: 自動判別の強化 hz/sjis/iso-2022-jp/iso-2022-kr/iso-2022-cn/euc-jpが区別できる。 iso-2022-*はSI/SO/SS2/SS3のでかたで区別してます。 いまは読み込んだ範囲全部parseしてるのですが、あたま10行くらいに 減らしてもいいです。はい。 iso-2022-krはあまり自身なし。 作業: iso2022パーサの徹底書き直し。 - 行末を越えて状態の残るencodingに対応(iso-2022-kr) - G0/G1/G2/G3全部使うようなencodingに対応(iso-2022-cn) - 書けないcharsetの文字がでて来た時にフラグをたてる (:wしたとき、書けないcharsetがででたら警告しようか?) - SS2/SS3 (ESC NとESC O)を読める - そのほかたくさん 結果として、以下が使えます。latin*とかはまだまだ増やせるぞ。 iso-2022-7-2とかは意味がどれだけあるかよくわからない。 現在はロジックが悪いので、可能なものは全部G0にdesignate されちゃいます。どうすりゃいいんだか。 :set fileencoding=none :set fileencoding=euc-jp :set fileencoding=euc-cn :set fileencoding=euc-kr :set fileencoding=latin1 :set fileencoding=latin2 :set fileencoding=iso-2022-7-1 7bit、G0のみ :set fileencoding=iso-2022-7-2 7bit、G0/G1 :set fileencoding=iso-2022-8-2 8bit、G0/G1 :set fileencoding=iso-2022-cn 7bit、G0-3 :set fileencoding=iso-2022-jp 7bit、G0のみ :set fileencoding=iso-2022-kr 7bit、G0/G1 :set fileencoding=sjis :set fileencoding=hz 解決: ISO-2022-*系の出力は正しいけど制約が緩すぎ(12/24) もっといろいろ制約かけられてもいいのでは? - ISO-2022-JP/2を守っていない(ESC $ Bじゃなくて ESC $ ( Bがでる) 解決: multi_*を呼ぶときの内部状態を外に出す。(12/23) 行をまたいでdesignationの状態が残るコード系の サポートに必要。 common/multibyte.c 作業: :set autodetectを分離。よって、:set fileencoding=euc-jp*の かわりに、:set fileencoding=euc-jpして、:set autodetect してください。 common/multibyte.c common/options.c common/options_f.c 12/25 作業: hzパーサを作成。 common/multibyte.c 作業: eucパーサ関連を整理。euc-jp/euc-kr/euc-cnをつける。 (euc-twはちょっと待って) common/multibyte.c 作業: :set noleftrightのときの行末を越える行の行末処理 ちょいと虫とり。 vi/vs_line.c vi/vs_refresh.c vi/vs_relative.c 作業: 非ascii/contro文字のカーソル制御を変更。カーソルは左端に乗る。 解決: 非asciiで非control文字の場合(漢字とかハングルとか)、 カーソルを文字の左端に(12/25) vi/vs_line.c vi/vs_refresh.c vi/vs_relative.c 12/24 24:00以降 作業: Rコマンドのmultibyte対応。 解決: Rコマンドのmultibyte対応。(12/23) v_txt.cのv_Rresolve()の中をmultibyte対応するのが とてもめんどくさい。 vi/v_txt.c 作業: ファイル入出力コードの自動判別 recovery/logging関係の細かいミスを修正。整理。 気づいたこと: file_init()の中ではdb_get()とかを使っちゃいけない。 common/exf.c common/multibyte.c ex/ex_read.c 12/24(Merry Christmas!) 作業: ファイル入出力コードの自動判別。 判別しても、fileencodingの値は変化しない。 ちなみに、!とかの処理コードも:set fileencodingで設定されてる やつと一緒です。 :set fileencoding=euc-jp euc-jp :set fileencoding=iso-2022-jp iso-2022-jp :set fileencoding=sjis sjis :set fileencoding=euc-jp* 自動判別/不明ならeuc-jp :set fileencoding=iso-2022-jp* 自動判別/不明ならiso-2022-jp :set fileencoding=sjis* 自動判別/不明ならsjis 解決: ファイル入力の際のencoding自動判別(12/10) common/exf.c common/multibyte.c ex/ex_read.c 作業: ファイル読み出し時のコード変換の場所を変更。 dbに全部読み込み終ってから全部なめる。 解決: ファイルopen時のコード変換hookの位置。(12/23) dbライブラリに手をつっこまずにはできない? なんか知らんが解決: dGするとたまにsegmentation faultがある。(12/23) :set fileencoding=iso-2022-jpで、ファイル読み込み直後。 どんな文書でも、3行目削除しているとき(なんで3行目なわけ?) text_init()から呼ばれたcalloc()の最中。 どっかメモリ壊してる?? common/exf.c common/multibyte.c db/recno/rec_get.c ex/ex_read.c 12/23 作業: sjisのJIS X0201左側(1バイトカタカナ)サポート。試してないぞ。 解決: sjisのときのJIS X0201カタカナ対応(12/22) common/multibyte.c 作業: euc-jpのJIS X0212-1990(補助漢字)/JIS X0201左側(1バイトカタカナ) サポート。試してないぞ。 common/multibyte.c 作業: JIS X0212-1990(補助漢字)サポート。試してないぞ。 common/multibyte.c 作業: 表示もできないのにcharset増やしまくり。あと残るはbig5? 解決: charsetをもっと増やそう(12/10) common/multibyte.c 作業: ISO-2022-*系のそこそこばっちりなパーサ。 ただし、各行ごとにdesignationの状態がもとに戻るやつに限る。 common/multibyte.c 12/22 作業: ftp.foretune.co.jpにftp directoryを用意。 作業: :set noleftrightのときの行末を越える行の行末処理 vi/vs_line.c vi/vs_refresh.c vi/vs_relative.c 解決: 行末を越える行の処理(12/1) 作業: v_ex_done()のmultibyte対応 vi/v_ex.c 作業: multibyte文字の途中を踏んでたところがあったので修正 (#ifdef MULTIBYTEのtypo!) vi/v_txt.c 12/21 作業: prototype宣言の付加。CHAR_T -> ARG_CHAR_T、chclassをu_intに common/multibyte.c vi/v_word.c 解決: includeの下のファイルの自動生成化(12/10) 作業: wrapmarginの操作が日本語踏んでも発狂しない vi/v_txt.c 作業: キー入力のeuc-jp/sjis対応 illegalな入力(euc半分だけとか)、timeout関連はまだ不安。 突っ込むところを変えた方がいい? :set inputencoding=euc-jp euc-jp :set inputencoding=sjis sjis common/multibyte.c vi/v_txt.c 12/10 26:30以降 作業: E/e/B/bコマンドについてもmultibyte対応。 W/wコマンドの処理内容を変えちゃったエンバグを直す。 vi/v_word.c 12/10 17:30以降 作業: とりあえずWとwコマンドだけmultibyte対応。動作はjelvisと一緒。 他についても暴走はしない。 解決: word movementのmultibyte対応(12/10) vi/v_word.c common/multibyte.c 作業: 再描画部に「1バイトにつき1桁以上表示される」ってのを前提に するコードが残っていたので除去。 vi/vs_line.c 作業: word movementでとりあえず暴走しないようにする。 vi/v_word.c 作業: 内部コード関連のエンバグしたところの修正。multi_back()とか。 common/multibyte.c 作業: 0x80から0xffのバイナリが来たときの対処。表示系も。 若干エンバグとりもあり。 common/key.c common/gs.h ex/ex_print.c 解決: バイナリファイルをいじくろうとしたときの対策 (12/1) 多バイト文字は1byteめで検出できるから、読み込み/ 書き出し時に注意すれば大丈夫だとおもう。 解決: KEY_LEN(sp, x)で、x=0x80のときの処理(12/10) CS_RAW 12/10 17:30まで 作業: ファイル入出力用encodingの切替え。自動判別はなし。 画面表示はeuc-jpのみ(curses改造が足りない) キーボードからは日本語が打てない。 :set fileencoding=euc-jp euc-jp :set fileencoding=iso-2022-jp iso-2022-jp :set fileencoding=sjis sjis common/multibyte.c db/recno/rec_get.c ex/ex_write.c ex/ex_read.c common/options.c common/options_f.c include/options_def.h include/com_extern.h 作業: 内部コードはeuc-jpをやめてmuleっぽく。複数charsetのサポート。 common/multibyte.c 12/8 作業: :jコマンドのmultibyte対応(動作はjelvisと同様) ほんとは文字種ごとに動作を定義できるようにしておきたい。 ex/ex_join.c 作業: cursesのEUC-JP対応のやり残し 内容はtoku版と同様 curses/refresh.c 解決: 漢字の2バイトめを踏むようなカーソル移動をすると、 カーソルがずれちゃう(12/1) 解決: xで日本語を削除するとなんかヘン(12/8) redrawが全然されない undoもあかん curses問題。削除したときのbyte compareが うまくいってない 作業: cコマンドの書き換え範囲の"$"の処理 byte数と表示幅がおなじじゃなくてもok vi/v_txt.c 解決: cコマンドの書き換え範囲の"$"の処理のmultibyte対応 (12/7) 12/7 途中: cコマンドの書き換え範囲の"$"の処理 byte数と表示幅がおなじじゃないと動かない vi/v_txt.c 12/1 途中: 入力コマンド関連のmultibyte対応 vi/v_itxt.c 作業: cursesのEUC-JP対応(とりあえず、仮に) 内容はtoku版と同様 解決: 漢字の2バイトめを踏むようなカーソル移動をすると、 カーソルがずれちゃう(12/1) curses/cr_put.c curses/refresh.c 作業: vs_line()の見直し vi/vs_line.c vi/vs_refresh.c 解決: 漢字の上を越えて~するとカーソルがずれる(11/29) 解決: 上下移動がちょっとヘン。ときどきabort()する(12/1) 解決: d後のredraw(11/25) 解決: p後のredrawでカーソルがずれる(11/26) 解決: ひともじ削除後のredraw(11/25) 11/30 作業: cs_next()/cs_prev()のmultibyte版を用意 vi/getc.c vi/vi.h 作業: (コマンドと)コマンド(multibyte文字の上は通り抜けるだけ) vi/v_sentence.c 作業: %コマンド(multibyte文字の上は通り抜けるだけ) vi/v_match.c 作業: vs_colpos()の書き直し vi/vs_relative.c 11/29 作業: ~コマンド(multibyte文字の上は通り抜けるだけ) vi/v_ulcase.c 11/26 途中: %コマンド(作業途中でvi/getc.cの大幅変更の必要に気づき断念) vi/v_match.c 作業: p/Pコマンド common/put.c 11/25 作業: dコマンド vi/v_delete.c 作業: fとかtとか(multibyte文字は検索できない) vi/v_ch.c 作業: viのひともじ削除 vi/v_xchar.c common/cut.c common/delete.c 作業: viのredraw vi/vs_refresh.c 11/24 作業: viのredraw vi/vs_refresh.c 作業: viの相対移動 vi/vs_relative.c 作業: viの左右移動 vi/v_right.c vi/v_left.c 11/23 作業開始 作業: マルチバイト判別 common/multibyte.c common/key.c common/gs.h 作業: Makefileとconfigure build/Makefile build/configure.in 作業: exの行表示 ex/ex_print.c 作業: viの左右移動 vi/v_right.c vi/v_left.c 作業: viのredraw vi/vs_refresh.c