osyo-manga / vital-over

18 stars 3 forks source link

Modules/Doautocmd 時に現在のコマンドラインオブジェクトが参照できる仕組みがほしい #118

Closed osyo-manga closed 9 years ago

osyo-manga commented 9 years ago

実装した


call vital#of("vital").unload()
let s:Doautocmd = vital#of("vital").import("Over.Commandline.Modules.Doautocmd")

function! s:func()
    let cmdline = s:Doautocmd.get_cmdline()
    if cmdline.is_input("a")
        call cmdline.setchar("b")
    endif
endfunction

augroup test
    autocmd!
    autocmd User OverCmdLineCharPre call s:func()
augroup END
haya14busa commented 9 years ago

はやさ++

s:Doautocmd.get_cmdline() を呼ぶ関数名をvital-overつかうプラギンでなるべく統一しておくと便利そう

osyo-manga commented 9 years ago

テストも追加ed 時間があるときにでも incsearch.vim にとりこんでうれしい

haya14busa commented 9 years ago

あたりが短くてよさそうですかねー.

osyo-manga commented 9 years ago

んーとりあえず、vital-over だけ更新してもらえればこっちは問題ないですかね。

haya14busa commented 9 years ago

でも s:DoAutocmd 参照できなきゃ意味ないのでゎ?

haya14busa commented 9 years ago

あーもしやvital#ofの値をプラギン名にすれば行けるのか

osyo-manga commented 9 years ago

それは

let s:Doautocmd = vital#of("incsearch").import("Over.Commandline.Modules.Doautocmd")

すればよいので問題ないですね

haya14busa commented 9 years ago

さすがにvital#of変えても無理だった

osyo-manga commented 9 years ago

上のコードで参照できませんでした?

haya14busa commented 9 years ago

あーなるほどできました. が, s:cmdlineが定義されてないとでた

osyo-manga commented 9 years ago

んー vitalize した後にVimを再起動してもダメでした?

haya14busa commented 9 years ago

んーだめですね.

osyo-manga commented 9 years ago

こっち(over.vim)は問題なく動作しているんですがなんでだろう。

haya14busa commented 9 years ago

over.vimでも同様ですね.

vital-over:function <SNR>408_func..<SNR>410_get_cmdline, line 1 Vim(return):E121: Undefined variable: s:cmdline

しかし確かにコードみた限りでは行けるハズな気も...

osyo-manga commented 9 years ago

あーいや over.vim はまだ push してないです。 いま push しました。

osyo-manga commented 9 years ago

んーそれでもエラーメッセージがおかしいな

haya14busa commented 9 years ago

言われてみればover.vimが動いてなかったのは当たり前でしたねすいません

haya14busa commented 9 years ago

しかしupdateしても結果は同じであった

haya14busa commented 9 years ago

エラーのvital-overhttps://github.com/osyo-manga/vim-over/blob/af9e411aaec30a5317795bfcdee0400eed5ff66c/autoload/over/command_line.vim#L27 でprefix指定してないからっぽいですね(そこはいま問題じゃないかもですが)

osyo-manga commented 9 years ago

ん、そこって関係あります?

osyo-manga commented 9 years ago

ああ、そういうことか

osyo-manga commented 9 years ago

再現するコード教えてもらえますか。

osyo-manga commented 9 years ago

あと関係ないかも知れませんが vital.vim は最新版ですか?

haya14busa commented 9 years ago

再現するコード, 全く同じなんですよね...あえて言うならIncSearchCharPreも足してる

call vital#of("vital").unload()
let s:Doautocmd = vital#of("vital").import("Over.Commandline.Modules.Doautocmd")

function! s:func()
    let cmdline = s:Doautocmd.get_cmdline()
    if cmdline.is_input("a")
        call cmdline.setchar("b")
    endif
endfunction

augroup test
    autocmd!
    autocmd User OverCmdLineCharPre call s:func()
    autocmd User IncSearchCharPre call s:func()
augroup END
haya14busa commented 9 years ago

vitalは最新です

osyo-manga commented 9 years ago
let s:Doautocmd = vital#of("vital").import("Over.Commandline.Modules.Doautocmd")

ではなくて

let s:Doautocmd = vital#of("over").import("Over.Commandline.Modules.Doautocmd")

が正しいです。

haya14busa commented 9 years ago

ア...そりゃそうですよね...アタマが働いてなかった...ありがとうございます

osyo-manga commented 9 years ago

はい

haya14busa commented 9 years ago

めっちゃ動作しましたっ!!!!!

osyo-manga commented 9 years ago

便利

haya14busa commented 9 years ago

便利. しかしこれdebug用という位置づけですかね.

osyo-manga commented 9 years ago

いえ、一応そういう機能として実装しました。

haya14busa commented 9 years ago

流石にめんどいと思うのでこんな感じでショートカット用意してもよさです?

function! incsearch#cli()
    return s:Doautocmd.get_cmdline()
endfunction
osyo-manga commented 9 years ago

それ自体はお任せします(と、いうかそれなら return s:cli でよいという気もします

haya14busa commented 9 years ago

incsearch.vim でdevブランチにはとりあえずコミッヨしましたっ https://github.com/haya14busa/incsearch.vim/tree/dev

osyo-manga commented 9 years ago

ありがとうございますっ

haya14busa commented 9 years ago

それ自体はお任せします(と、いうかそれなら return s:cli でよいという気もします

vital-over統一インターフェース的な意味で. s:cli返すのは, もしかしたら複数objectを持ってる場合とかにDoautocmd参照だと対応できるという文脈なのかなぁと思ってた

osyo-manga commented 9 years ago

hm

haya14busa commented 9 years ago

とりあえず incsearch#cli() も定義しておいた

haya14busa commented 9 years ago

あーでもそうやってDoautocmd関係ない文脈にAPIを置くと取得できない問題が発生するか...

haya14busa commented 9 years ago

これ, 変なタイミングで呼んだ時にundefined variableみたいなエラーを返すのではなく, vital-overのエラーを返してもらえると嬉しい感あります

osyo-manga commented 9 years ago

これ, 変なタイミングで呼んだ時にundefined variableみたいなエラーを返すのではなく, vital-overのエラーを返してもらえると嬉しい感あります

具体的にはどんな風を想定されていますか?(『vital-overのエラーを返す』というのがよくわからなかった

haya14busa commented 9 years ago

vital-overのエラーとしてキャッチするためには、このままだと無理だなという意味です。

vital-over prefixの適切なエラーメッセージをthrowしてほしい

osyo-manga commented 9 years ago

雑に追加してみました。

haya14busa commented 9 years ago

ありがとうございますっ

haya14busa commented 9 years ago

いまさら試しましたがなんでこれ, prefixこんな感じになってるんでしょう??? _pluginname みたいになってフレンドリー感なさそう https://github.com/osyo-manga/vital-over/blob/master/autoload/vital/__latest__/Over/Exception.vim#L6-L7

特に変える必要性なければ ExceptionMessage と同じ感じで投げて欲しいです https://github.com/osyo-manga/vital-over/blob/master/autoload/vital/__latest__/Over/Commandline/Modules/ExceptionMessage.vim

haya14busa commented 9 years ago

あと仮にこのまま行くとして == のprefixは信用していいんでしょうか? つまり仕様変更とかにならないか気になります.

osyo-manga commented 9 years ago

出力フォーマットは雑に決めたので今後変更する可能性がないとは言えません。 もっとよい出力フォーマット案があればそっちに変更してもよいですが。

osyo-manga commented 9 years ago

別の issues 立てました。