ヒント

ヒントを 書き直してみた。


vimperator/hints-ext.js at master · caisui/vimperator · GitHub


変更点は

  1. ヒントの高速化(できてたらいいなぁ)
  2. ヒントが重なって見えないよ!
  3. 番号キー(hintchars) を押した後のの遷移
  4. キーバインドの追加(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 すると


のようにhintが重ねっている場合に



のように 重なりを除去します。


余談ですが、判りやすくなるだろうと思って、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 から の 機能として以下を使って実現してます


https://github.com/caisui/vimperator/blob/master/plugin/hints-caret.js


http://vimperator.org/vimperator


before


after


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



となるとところを



とします。


ちなみに、"0123456789"だと

となります。


無しではないとは思いますが、賛否両論かな?

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 を 切り替えて を 押しても modes.NORMAL に 戻る

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) れば 回避できるんじゃないかなぁ と 妄想しています。