ヒント
ヒントを 書き直してみた。
vimperator/hints-ext.js at master · caisui/vimperator · GitHub
変更点は
- ヒントの高速化(できてたらいいなぁ)
- ヒントが重なって見えないよ!
- 番号キー(hintchars) を押した後の
の遷移 - キーバインドの追加(1キースロークもの のみ)
です。
1.の恩恵は、tags に クエリーセレクタを利用する必要があります。
(xpath や array like な ものでも動作はします)
let use_hints_ext_hinttags=1
let use_hints_ext_extendedhinttags=1
で option の hinttags, extendedhinttags を クエリセレクター版に上書きできます。
対象Node の 画面内外判定が原因で遅い状況は改善するはずです。
当方の環境では、http://mxr.mozilla.org/mozilla-central/search のソース表示のような
画面外Node数が大量の場合は体感できました。
2. として、 hints.relocation を追加しました。
call すると
余談ですが、判りやすくなるだろうと思って、hintchars=0123456789で
スクリーンショットを撮ったのですが、
数字だと順序予測が容易なんで重なっていても支障がないのですね。
3. は、そのままなので略
4. として hints.addSimpleMap(key, callback) を 追加しました。
1キーストロークしか使用できません。
上記の hints.relocation を
hints.addSimpleMap("<c-l>", function() this.relocation())
hints.addSimpleMap("<C-f>", function () { this.hide(); buffer.scrollPages(1); this.show(this._submode, "", content.window); });
hints.addSimpleMap("<c-f>", function() void 0);
のような利用ができます。
また、標準のhighlight(Hint ,Hint::after ,HintActive ,HintElem ,HintImage)
を利用していません。
HintExt ,HintExtActive ,HintExtActive>span ,HintExtElem を 利用しています。
色等の変更はこちらを使う必要があります。
(pluginで追加される highlight なので
autocmd VimperatorEnter ".*" :hi -a HintExt color:red;
のように遅延実行する必要があります。
最後に、
let use_hintchars_ex=1
で hintchars の 一文字目の利用頻度を平等にします。
2011/07/24 22:06
highlight のコマンドの誤り訂正
CARET mode
ヒントを自力実装して行単位分割しました。
pre,code そして text/plain も いけます。
ただし、ヒントの
文字による絞り込みも無いよりはいいかなって程度の微妙な実装になってます。
(TextNode に対して行なっているので、text/plain だったりすると 絞り込めません)
一切 map 等を振っていないので
js mappings.addUserMap([modes.NORMAL], ["
"], "", function () plugins.hintsCaret.showCaret());
と map を 適当に振る必要があります。
無理して hint に 組込むなら
hints.addMode("c", "", null, function() {commandline.close(); window.setTimeout(function () plugins.hintsCaret.showCaret(), 0); throw 0;});
showCaret を showVisual に 変更で いきなり VISUAL mode に入れます。
Firefox 4 から の 機能として以下を使って実現してます
- nsIDOMWindowUtils#nodesFromRectで 画面全体のNodeを取得
- Range.getClientRectsを使ってTextNode を 行毎の box を取得
- Selection.modifyで行移動や行頭移動
https://github.com/caisui/vimperator/blob/master/plugin/hints-caret.js
http://vimperator.org/vimperator
before
http://vimperator-labs.googlecode.com/hg/vimperator/NEWS
text/plain
すけすけな子
liberator-overlay-ext を 更新しました。
https://github.com/caisui/vimperator/blob/master/plugin/liberator-overlay-ext.js
更新内容
- アニメーションの改良
- 背面を確認する関数「toggleShowBackground」を追加
です。
前者は、
:set overlayanimation
_vimperatorrc では、
:autocmd VimperatorEnter ".*" set overlayanimation
(plugin なので option に 難があります)
で 試していただけたらと思います。
続いて、後者についてです。
重ねて表示するので、コンテンツの見たい部位見えないことがあります。
(画像は、ほぼ全面覆ってしまっていますが…)
それを こんな感じに 透過するための関数です。
もう一度実行されれば、元の状態に戻ります。
map は 当てていないので、
:js mappings.addUserMap([modes.COMMAND_LINE], ["<C-g>"], "", function () plugins.liberatorOverlayExt.toggleShowBackground());
のような感じで 設定が必要です。
vimperator3 の hintchars
vimperator 3 の 新しい機能(過去の回帰) として hintchars オプションがあります。
hintchars の 設定を 変更することによって、hint のラベル を 任意に変更することが可能です。
この機能は、N 進記数法 を 定義したと見做して実装されています。
(記数法については位取り記数法 - Wikipedia等を参考にしてください)
そして、hitchars の 最初の一文字目は、普段使っている 10進数(以降 10進と略します) における 「0」に相当するようになってます。
したがって、hintchars=abc のとき
自然数(N>=1) としては 「b」 から 始まり、 「c」の 次は、 「aa」ではなく 「ba」となります。(10進では、 「9 」の 次は 「00」 ではなく 「10」ですよね?)
そういうわけで、hintchars の 最初の一文字目の 出現頻度が 少ないのは仕様となります。
ということで、"abc" において スタートが 「a」で 「c」の次が「aa」な plugin を 書いてみた。
https://github.com/caisui/vimperator/blob/master/plugin/hintchars-ex.js
無しではないとは思いますが、賛否両論かな?
Toolbar を コマンドラインから
Toolbar の 設定を する コマンドラインを 作ってみた。
customizeToolbar dialog 無しで ほぼ同等のことえると思います。
https://github.com/caisui/vimperator/blob/master/plugin/toolbar-manager.js
以下を目的で 作ってたものから体裁をととのえたものです。
- サブコマンドを使い倒す
- 起動時の速度向上になるか不明だけど、なるだけ lazy処理
- completer の cache を 試行錯誤
使い方
toolbar の 作成
toolbar create name
toolbar の削除
toolbar remove name
toolbar に item の 追加
toolbar
add item ...
toolbar の item の 前に追加
toolbar
add -b target item ...
toolbar の item の 削除
toolbar
rm item ...
toolbar の 表示関連
toolbar show | hide | toggle item ....
みたいな感じです。
カスタマイズ用のダイアログを表示
toolbar dialog
初期値に戻す
tooolbar reset
modeの変更
toolbar mode [-iconsize small | large] icons|text|full
みたいな感じです。
toolbar や toolbaritem の 指定に対しては全て、補完が動作します。
候補には、LocationBar 等が 複数の画像を持っているため横幅を決め打ちできなかったので、
右側に表示してます。
それと、メニューボタンのとき、title が 表示されないことが寂しかったので、
GitHub - caisui/appmenu-button-title: アプリケーションボタン状態で タイトルを表示するを作成しました。
bootstrap なので、zipで圧縮すれば再起動無しで組込めます。
(でも、メニューボタン周りは、OS毎にID が 違うようなので windows (あるいはxp) でしか 動きません)
最後に、サブコマンドについて
楽にサブコマンドが実装できてすばらしいです!
ただ、調子に乗ってサブコマンドを増やしていくと、completerの実装が大変でした…
ひよこ さんの進捗
一区切りつけてコミットしました。
絶賛 地雷原ですが、こんな感じです。
表示は、dowload.piyo
絞り込みの結果下部が空白になった場合は、vimっぽく「~」がでます。
表示は、places.piyo
「vim」 で 絞って 「google」 を除去したので http://code.google.com/p/vimperator-labs/
が一覧に表示されていません。
表示は、console.piyo
メッセージのcategory も 表示しています。
表示は、highlight.piyo
背景色を持っているもの検索してます
表示は、selector.piyo
コンテンツをクエリーセレクタでマッチするもののtextContentを 一覧で表示します。
画像の場合は
:pselector -i download a
を実行してます。マッチしたNodeが hrefを含んでいれば、openで開きます
(たぶん現状は動いたり動かなったりします)
ざっくりすぎる source 一覧
array-mru.piyo | vimp の command や search の一覧 |
console.piyo | console を 表示 |
download.piyo | dowload を表示 |
highlight.piyo | highlight を 表示 |
history.piyo | 履歴を表示 |
map.piyo | 全mapを表示(cheat sheet) |
places.piyo | 履歴やブックマークを表示 sqliteを直読み |
pref.piyo | about:config |
selector.piyo | :pselector というコマンド追加 |
source.piyo | ソース一覧を表示 |
tab.piyo | tab一覧を表示 |
tabgroup.piyo | tabgroup 一覧 |
window.piyo | window 一覧 |
次は、item の cache と source 固有map の実装かなぁ
modes.EMBED から で抜けるっぽくする
windows 限定 です。Firefox 4 推奨ですが、3.6でも そこそこ動いてます。
(動作確認を取ったのは、
Firefox 3.6.15(32bit) vimperator 2.4pre (created: 2010/09/22 19:04:22)
Firefox 4.0b13pre(32bit) vimperator 3.0
各 windows XP 32bit / 64bit)
仕組みは微妙ですが、
200msec 毎に Esc キーが 押されていないか監視するとこによって実現してます。
従って、実際には、Esc 長押しで 抜けることになります。
vimperator/embed-esc.js at master · caisui/vimperator · GitHub
監視キーコードや監視間隔は 任意に変更できます。
(指定方法は、Help に 記載しています。)
以下問題点(仕様)
Esc が 押されているか否かのみ判定しているので、だろうとだろうと反応します。
Firefox3 で inactive な 状態でも Esc に 反応する
例) modes.EMBED の 状態のまま vim に window を 切り替えて
Firefox4 は inactive な状態 は 無視できるが inactive な状態から embed object(flash等)を 直接クリックすると active に なったことが認識できない。
以下のコードで window が acitive か 判定を行っています。
document.documentElement.mozMatchesSelector(":-moz-window-inactive")
しかし、上記の切り替え方をすると active になっているのに、inactive を 返し続けます。
(使い方が誤っているのかもしれません)
そこで、誤認識が 分かるように inactive と 判定 時は "embed --(menu)--" と 表示されるようにしています。
上手く認識していないときは、alt+tab 等で active 化しなおす必要があります。
(inactive でも 反応して良いなら embed_esc_disabled_inactive_check=true)
最後に、監視キーコードは都度確認していますので、通常 は Esc で良いけど
特定 の flash では困るときは、autocmd で 監視キーコードを切り替え(例えば RCONTROL) れば 回避できるんじゃないかなぁ と 妄想しています。