Closed haya14busa closed 9 years ago
ありがとうございます。
ちなみにこの -10
ってどこから出てきたんでしょうか(ゲス顔
あとわざわざ abort
をつけている理由も気になります。
これですが、他のモジュールでも同じ事が起きる可能性があるので、全く別の回避方法をしたほうがよいかもしれませんね。 e.g.) 他のモジュールで挿入する文字が設定されていたら NoInsert は何も行わない。 このあたりの仕様はちょっとまとめたいところ。
と、いうか現状それっぽいことを行っているのか。
あとわざわざ abort をつけている理由も気になります。
妖怪スニペットのしわざですスイマセン
ちなみにこの -10 ってどこから出てきたんでしょうか(ゲス顔
アアアッッ. 根拠は一切ないですね. cssとかでz-index 放置していたら大変なことになるように, priority も何もなければそうなってしまうと思うのでなんか規約とかアレバそれに従ってベンリできるという可能性があります
これですが、他のモジュールでも同じ事が起きる可能性があるので、全く別の回避方法をしたほうがよいかもしれませんね。 e.g.) 他のモジュールで挿入する文字が設定されていたら NoInsert は何も行わない と、いうか現状それっぽいことを行っているのか。
あーこれデスをspecial keyでも判定すれば解決するってことデスかね.
\ && a:cmdline.char() == a:cmdline.variables.input
あーこれデスをspecial keyでも判定すれば解決するってことデスかね.
あーいやちがった
なんかバグっぽいような気がするので時間があるときにでもみてみます(あとテストコードも。
これの再現手順を教えてもらえますか? 以下のコードだと再現しませんでした。
call vital#of("vital").unload()
let s:V= vital#of("vital")
let s:cmdline = s:V.import("Over.Commandline")
let s:my = s:cmdline.make_standard()
let s:module = {
\ "name" : "LiteralInsert",
\}
function! s:module.on_char_pre(cmdline)
if a:cmdline.is_input("\<C-v>")
\ || a:cmdline.is_input("\<C-q>")
call a:cmdline.setchar('^')
let self.prefix_key = a:cmdline.input_key()
let self.old_line = a:cmdline.getline()
let self.old_pos = a:cmdline.getpos()
return
elseif exists("self.prefix_key")
\ && a:cmdline.get_tap_key() == self.prefix_key
call a:cmdline.setline(self.old_line)
call a:cmdline.setpos(self.old_pos)
call a:cmdline.setchar(a:cmdline.input_key())
endif
endfunction
function! s:module.on_char(cmdline)
if a:cmdline.is_input("\<C-v>")
\ || a:cmdline.is_input("\<C-q>")
call a:cmdline.tap_keyinput(self.prefix_key)
call a:cmdline.disable_keymapping()
call a:cmdline.setpos(a:cmdline.getpos()-1)
else
if exists("self.prefix_key")
call a:cmdline.untap_keyinput(self.prefix_key)
call a:cmdline.enable_keymapping()
unlet! self.prefix_key
endif
endif
endfunction
call s:my.connect(s:module)
function! Test()
" 起動直後にコマンドラインに '^M' が挿入される
echo s:my.start("\<C-v>\<CR>")
endfunction
指定してないとconnect
順っぽいですね. なのでstandardではなく defaultを使用して順番を変えてやるとわかりやすいかと思います(こんな感じ) https://gist.github.com/haya14busa/b5b13e352de86437774d
NoInsertのほうがあとにconnectされていると消えると思います
アーじゃあなんで今までdigraphsは動いてたんだろうな...絶対connect順ってわけではないのか
ありがとうございます。 こちらでも再現出来ました。
あーやっぱりバグですね。 これはわたしの方で対応を考えておきます。
あー確かによくコード読んでみたら順番に関係なく動くはずっぽいですね. hmhm
ここが self.char()
じゃなくて self.input_key()
であるべきっぽいかな...?(試してない)
あと微妙に関係ないですが,コードを読んでるとこの辺の char と比較する演算子が ==
になっているものが大量にありignorecase
依存になってしまっているのでバグを踏みそうだなーと思いました. (再現コードは書いてない)
ここが self.char() じゃなくて self.input_key()であるべきっぽいかな...?(試してない)
いや、そこは関係ないですね。
setchar()
のあたりの挙動をもう少し厳密にする必要があります。
a-確かに関係なさそうでした. ちょっと追ってみたけど意外とよくわからなみ...
ref: #110
優先度が指定されていないせいで, digraph や #110 の
<C-v>
で明示的に特殊キーを入力したくても, 入力できるかどうか運任せになってしまってました.digraphs はたまたま大丈夫だったっぽいですが #110 は NoInsert で上書きされて入力できなかった