ヒントとcss transform
と、ご指摘頂いたので hints-ext.js の css transform 対応に挑戦しました。
http://github.com/caisui/vimperator/blob/master/plugin/hints-ext.js
処理コストがそこそこかかるのと現行そんなに利用されていないと思うので
デフォルトはoff にしています。
let use_hints_ext_tranform=1
で 有効になります。
off だと
となるところ、on では
こうなります。
件の caret mode も
となります。
また、off でも
:js window.setTimeout(function () hints.addSimpleMap(["<C-t>"], function () hints.relocation_transform()), 0)
のように記述しておけば、transform 無視 ヒント状態 から transform 考慮状態に移行できます。
ページ上の単語で補完
ページ上の単語を completer に 出したいなと思って書きました。
現状、単語の区切り方がよろしくない(特に日本語)せいか、微妙です。
COMMAND_LINE,INSERT から の 補完
:js <<EOF userContext.word_completer_maps = [ [[modes.COMMAND_LINE, modes.INSERT], ["<C-Space>"], {screen: true}], ]; EOF
のように 設定します。
の 状態から
単語補完に遷移します。
ここでは、hintMatcher を 利用して 絞ることができます。
(= migemo hint matcher を 利用していれば、migemo で 絞れます)
単語を指定後、
commandline や input 要素に 復帰します。
(commandline や input 要素で 何か特殊なことをやっている場合は、正常に動作しません)
Map.arg を 使用したショートカット
上記のように作成したものの、
そこで、予めコマンドを登録しておいて、単語選択のみで実行できる方法を追加しました。
:js <<EOF userContext.word_completer_shortcut = { modes: [modes.NORMAL], maps: ["<C-t>"], extra: {screen: true}, t: "tabopen", o: "open", e: "eijiro", w: "tabopen wikipedia", }; EOF
のように 設定しておくと、
となり、
{screen: true} について
画像では、判別できないので補足です。
"screen: true"を設定すると、ページ全体ではなく、現状見えている部位から補完します。
よって、ページ先頭で補完をcall すれば、ページ末尾 付近の 単語が 抽出されません。
source:https://github.com/caisui/vimperator/blob/master/plugin/word-completer.js
vimperator で ES.next
ES.next を vimperator で 動かせるようにしてみた。
正しくない点が多々あると思います。
特に、「<|」はさっぱりです。
http://github.com/caisui/vimperator/blob/master/plugin/es.next.js
使用するには、 id:Constellation さん の es.next.jsが必要です。
~/vimperator 直下に配置 あるいは
let es_next_js="path"
と指定すれば、読込みます。
実行は
:es [option] expression
です。
--ast | AST を echo します |
--echo | 結果をecho します |
--test | javascript への変換結果を echo します(不恰好です。デバッグ用) |
--bare | globalObject を userContext にします(無しの場合は、Object.create(userContext) |
--time | 実行し、実行時間を表示 |
--file | ファイルを読込実行 |
--scratchpad | scratchpad で ES.next 編集実行 (要 scratchpad.js) |
動作確認サンプルです。
Scratchpad の SS
構文解析中のエラーはnotify します。
参考
ECMAScript 6th 2011-11-07 Draft - hogehoge @teramako
ECMAScript 6th の構文をまとめてみた - hogehoge @teramako
ECMAScript Syntax Grammar 6th Edition / Draft
http://d.hatena.ne.jp/Constellation/20111110/1320930811
ヒント
Highlightに問題があったので修正しました。
hints-ext.js更新しました。
- 標準のHint っぽく text を表示
で HintNumber を 戻す - use_hintchars_ex=2を追加
highlight "Hint>.x" を 追加- highlight "HintExt::before" を 追加
- hint.addModeEx を追加
- use_hints_ext_caret,use_hints_ext_visual を追加
use_hintchars_ex=2を追加
let use_hintchars_ex=2
ヒント選択時のキータイプ数を揃えます。
要は、
Hint>.x
修正に伴い更新
HintExt::before
入力 HintNumber の style です。標準では、何も設定しておりません。
hi HintExt::before opacity: .6;
hi HintExt::before display: none;
とすれば、入力済みを消せます。
_vimperatorrcには、plugin による組込のため、
autocmd VimperatorEnter ".*" :hi HintExt::before opacity: .6;
とする必要があります。
hint.addModeEx を追加
ヒントの 対象を ElementNode 以外への 拡張用関数です。
hints.addModeEx( mode, // 拡張ヒントの割り当て(addMode と同様) prompt, // プロンプト表記(addMode と同様) action, // 選択対象の実行処理(addMode と同様) generate // 後述(サンプルで) );
となります。
使用例
hints.addModeEx("z", "test", function (val) { alert(val); }, function (win, screen) { let w = screen.right - screen.left; let h = screen.bottom - screen.top; let l = screen.left; let t = screen.top; // generator も OK return [ {value: 1 , rect: [plugins.hintsExt.Rect(l , t , l + w/2 , t + h/2)], text: "msg 1", showText: true}, {value: 2 , rect: [plugins.hintsExt.Rect(l + w/2 , t , l + w , t + h/2)], text: "msg 2", showText: true}, {value: 3 , rect: [plugins.hintsExt.Rect(l , t + h/2 , l + w/2 , t + h )], text: "msg 3", showText: true}, {value: 4 , rect: [plugins.hintsExt.Rect(l + w/2 , t + h/2 , l + w , t + h )], text: "msg 4", showText: true}, ]; });
use_hints_ext_caret,use_hints_ext_visual を追加
hint.addModeExをうけて、 hints-caret を 組込みました。
let use_hints_ext_caret="C"
let use_hints_ext_visual="V"
で、";C" で caret mode へ
で、";V" で visual mode へ 移行できます。
highlighter を キーボードで
Firefox 標準の Inspector の highlighter が 素敵です。(nightly)
しかし、マウスベース操作なため、vimperator的に残念だったので、専用 modeを作ってみた。
https://github.com/caisui/vimperator/blob/master/plugin/inspectorUI.js
特徴は こんな感じ
- caret(単なるboxですが)をマウスポイントの代りに動かす独自 map
- 独自commandを組込
- DOM Inspecotr を call できる
- (残念仕様ですが)Chrome に対しても 動作
mappings
h | caret を caret size の 半分 上へ移動 |
j | caret を caret size の 半分 左へ移動 |
k | caret を caret size の 半分 下へ移動 |
l | caret を caret size の 半分 右へ移動 |
gh,b | caret を Node の 境界へ 移動(左) |
gj | caret を Node の 境界へ 移動(下) |
gk | caret を Node の 境界へ 移動(上) |
gl,w | caret を Node の 境界へ 移動(右) |
gg | caret を window の top へ |
caret を window の bottom へ | |
^ | caret を window の left へ |
$ | caret を window の right へ |
caret 範囲内にある Node を 小さい順に切り替え | |
|
|
breadcrumbs を右へ移動(Firefox 10 じゃないとエラー) | |
breadcrumbs を左へ移動(Firefox 10 じゃないとエラー) | |
次 の Node を 選択 | |
前 の Node を 選択 | |
zo | caret を 拡大 |
zi | caret を 縮小 |
zt | ハイライトされている Node を 画面 top へ |
zz | ハイライトされている Node を 画面 中央へ |
zb | ハイライトされている Node を 画面 bottom へ |
d | ハイライトされている Node を 削除 |
e | ハイライトされている Node の xml をecho |
y | ハイライトされている Node の xml をclipboardへ |
i | ハイライトされている Node を DOM Inspector で 開く(要 DOM Inspector) |
o | ハイライトされている Node を Object Inspector で 開く(要 DOM Inspector) |
r | ハイライトされている Node に 適用されている Style Rule 一覧 を echo |
gc | ハイライト対象を chrome に 切り替え(toggle) |
? | map 一覧を表示 |
Esc | Inspector 終了 |
highlighter の 透過(toggle) |
command は まだ 貧弱ですが、こんな感じ
:dom [--scratchpad] [--position=replace|beforebegin|afterbegin|beforeend|afeterend] expression
ハイライトNode に 挿入
挿入位置は、--positionで調整可(default は beforeend)
また、--scratchpad で scratch pad に 記述した内容を 挿入
(要 scratchpad.js)
:style value
ハイライトNode の style 属性を調整 (completer 装備)
:javascript expression
標準の:javascript そのままです(echo も 移植してます)
Vimperator で CoffeeScript
CoffeeScript が どんなものか使ってみたくなったので、組み込んでみた。
vimperator/coffee-script.js at master · caisui/vimperator · GitHub
- :coffee で CoffeeScript 実行(heredoc 対応)
- :source コマンド を CoffeeScript 読込に対応
- plugin に 対応
使用するには、GitHub - jashkenas/coffeescript: Unfancy JavaScriptの extra/coffee-script.jsを~/vimperator/直下に置く必要があります。
(let coffeescript=path で任意の位置に変更できます。)
:coffee c="oneline";Array.forEach content.document.querySelectorAll(".#{c}"), (e)->e.classList.remove(c)
な感じで 実行できます。
coffee --test setTimeout (-> alert "test"), 100
で
(function() { setTimeout((function() { return alert("test"); }), 100); }).call(this);
のように 変換結果を echo します。
plugin ディレクトリに
のような Script を 放り込んでおけば起動時に読込ます。
ただし、読込順序はjavascript なpluginを全て読み込んだ後です。
また、 completer は注意が必要です。
completer は 返り値があると 挙動が変る(commands.jsのこの辺り)のでわざわざ最後にnullが必要になっちゃいます。
後、e4x が 通らないのでHelp が 書けません。
scratchpad
Scratchpad の orion を vimperatorから 扱えるようにしてみた。
(たぶん、Firefox 9で 且つset!devtools.editor.component=orionで 設定されている必要あります)
plugin はhttps://github.com/caisui/vimperator/blob/master/plugin/scratchpad.jsです。
オプション
-c | Browser(Chrome Window Scope)で open(ついでに"let"もキーワードにします) |
-ft | mode の 指定(javascript, java, html, css, xml) |
-r | read only で 開く |
-w | 既に開いている Scratchpad で 開く |
サブコマンド
javascript | javascript の 実行結果を開く |
file | 指定ファイルを開く( ~/vimperator/color/style.css のような指定) |
script | script タグの内容を表示(複数指定可、無指定時は、全て) |
サブコマンド を 利用しない場合は、引数は uri に なります。
:scratchpad resource://gre/modules/Services.jsm
サブコマンド利用の場合は、そこそこ 補完が動きます。
:scratchpad javascript window.openLinkIn
お馴染 な vimperator の javascript 補完
後、
で 動いてくれると尚嬉しいのですが、mozilla-central: changeset 75456:f69a10f23bf334215464758d71ad900542856f5aでは、NS_ERROR_DOM_SECURITY_ERRが出て動作しませんでした。
2011/08/24 21:31
tabopen で 開けるように fix した っぽく読めたので、該当個所を末尾に移動