vim-skk / eskk.vim Goto Github PK
View Code? Open in Web Editor NEWeskk is pure Vim script implementation of input method engine SKK
eskk is pure Vim script implementation of input method engine SKK
どこまで保存しておくのがいいか。
この問題は、特別に状態を保存しておくのがいいと思う。
バッファ文字列の中に確定したけどひらがなに変換しきれなかったローマ字をgetpos()の位置と共に保存。
http://lingr.com/room/vim/archives/2010/06/23#message-487577
http://lingr.com/room/vim/archives/2010/06/24#message-488464
http://lingr.com/room/vim/archives/2010/06/24#message-490064
試したいのですが、手元の環境でVim 7.2をコンパイル&ビルドして起動するとなぜかSEGVしてglibcのスタックトレースが出ます><
Vim 7.2もできる限り対応したいので直すつもりではいますが、修正するのは後になるかもしれません。
テーブルのrom_to_hiraには
Map n ん
がないのに、rom_to_kataには
Map n ン
があるからだと思う。
「kanji」で「かんじ」にならないために一時的に「Map n ん」を消してるので、
対応したら追加する。
ここらへん参照。
http://www.bookshelf.jp/texi/skk/skk_5.html#SEC90
SKKも考えられてるんだなー。
g:eskk_preload_autoload
、かg:eskk_preload
でいいかも。
VimEnter時にautoloadを全て:sourceする。
plugin/*の読み込みの時に:sourceするのはタイミングの関係などでややこしくなりそうなので避ける。
今のところ辞書登録の時に何も入力せずにエンターを押すか、
<C-c>
(skk.vimと同じキー) を押せば、辞書登録をキャンセルすることができる。
現状autoload/eskk/table/rom_to_hira.vim
の場合、g:eskk#table#rom_to_hira#definitionにまさにその辞書型が置いてある。
ただautoload変数はファイルが読み込まれないと存在しない。
(変数にアクセスしたら自動的にファイルを読み込んでほしいんだけど...)
なのでそれを取得するための関数をeskk#table#...()あたりに作るといいんじゃないかと思う。
ひらがな変換、漢字変換限らず。
現在Dictionaryで定義してるならそのまま。
eskk#filter_key()
からモード(autoload/eskk/mode/*.vim
)の関数へ文字を渡して変換させる処理は、Unixのパイプのように処理すると自由度が高まるんじゃないかと予想しています。
配列の変更(文字を対応する文字に変換) | モードによる(ひらがな、漢字)変換
のように。
ユーザへのインターフェースはグローバル変数を用意して
なんてのを予想してます。
let g:eskk_pipes_pre = {
'*': ['dvorak'],
'hira': ['hira-pre'],
}
let g:eskk_pipes_post = {
'hira': ['hira-post'],
}
のような構造でもいいかも。
ユーティリティ関数のテストだけしかやってない。
忘れてた
Windowsのコマンドプロンプト版で確認しています。
題名の通り、「かん」を打つ際の「かn」まで打つと画面がフラッシュしています。
何かエラーが発生していそうですが、:mesには何も出力されていません。
バグかどうかわかりませんが、変な挙動という事で起票します。
現在helpにはNEW BSD LICENSEと書いてあるが、これは仮なので、後で決定する必要がある。
eskk が有効のときに空文字列を、無効のときに'[eskk:あ]'等を返すようになることがあります。
発生条件は不明ですが、1度発生すると有効/無効を切り替えても常に逆の状態を返します。
g:eskk_version == 2145
ddskkだと確定してもundo(ひらがな入力してる状態に戻す)ができるらしい。
http://lingr.com/room/emacs/archives/2010/06/09#message-445478
テーブル(autoload/eskk/table/*.vim
)でうまく指定できたらと考えている。
そのための構文的なものと実装を考え中。
Shougoさんからのリクエスト。
http://gist.github.com/446829
g:eskk_debug_file
▼をEnterで確定せずに続きを入力すると次の変換時に前の変換結果も同時に出ます。
;daiji<Space>na;koto<Space>
↓
大事な▼大事事
g:eskk_version == 2036
▽中にを押すとマッピングの展開がされずにキャンセルできません。
;kyou<C-j>
↓
▽きょう<Plug>(eskk:internal:backspace-key)<Plug>(eskk:internal:backspace-key)<Plug>(eskk:internal:backspace-key)<Plug>(eskk:internal:backspace-key)きょう
g:eskk_version == 2036
現在はmode structureの'filter'を自前で実装しているため必要ないが、
将来モードプラグインを書く(あるいは書いてもらう)時に少しでも楽にするため。
「〜」がその後の「'」のバイトも食ってしまっている様子。
どうやって対処しよう。
現状キーで次の候補に行くのはできても戻る(xキー)のができない。
なんか冗長に感じたので。
i_i
投げっぱなしすぎ。
これはskk.vimでもサポートしていない。
SKK辞書による漢字変換。
辞書のエンコーディングも考慮する。
&imactivatekey
を使えばできそうな気もするんだけどよく分かってない...
単語・文節の再変換機能。
文節の場合はmecab-skkservを使うなどする?
入力中に を押すとカーソル位置が1文字左にずれて 0 が挿入されます。
eskk#table#...()
で行う。:EskkMap
はそのためのExコマンドグローバル変数のデフォルト値とかも管理したいし、
どうせならグローバル変数もautoload時に定義した方が統一感がある。
デフォルト値を管理したい訳は、:EskkCurrentConfig
というExコマンドを作りたいからで、
これは何をするものかというと、現在のデフォルト値と違う変数のみ
.vimrcにそのまま貼り付けられる形でバッファに出力するもの。
なぜこれをしたいかというと、skk.vimを使ってて色々設定してる人に
すんなりeskkに移行してほしいため。
デフォルトでskk.vimのグローバル変数を読み、
eskkで実現可能ならeskkの変数もそのように設定させたい。
その場合どの変数がskk.vimのグローバル変数の影響を受けているかが分かりづらいので作りたい。
まぁskk.vimのグローバル変数の影響を受けるならeskkの設定に変えないままでも使える(つもり)だから
無理にeskkのグローバル変数を使うことはないんだけど。
どちらもサポートする。
リモートの場合は初回漢字変換時にでも辞書をダウンロードしてくる。
マッピングはテーブル(autoload/eskk/table*
)で指定する。
arpeggio.vimなどによるマッピングもサポート。
マッピングはテーブルが切り替わったら以前マッピングしたものを削除して再マッピングする。
今のところテーブルファイル(autoload/eskk/table/*.vim
)は「モードによって使われる定義ファイル(データファイル)」という位置づけなのでロジックを組み込むとなると設計を変える必要がある。
現状eskk#enable()
が呼ばれると副作用がないようにlmapclear <buffer>
してからeskk#map_key()
内でlmap <buffer>
でマッピングし、
eskk#disable()
が呼ばれるとeskk#unmap_key()
内でlunmap <buffer>
するといった形。
これをeskk#map_key()
によるマッピングをする前にマッピングを保存して、復元する、といった風にした方がいい?
辞書登録機能を付け加えようとして気づいた。
せっかくSKK実装したんだからMigemoのためのAPI公開すればいいじゃない!
migemo.vimはあるけどコンパイル要るしなー
http://www.kaoriya.net/#CMIGEMO
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.