diff options
author | anekos | 2011-04-06 04:25:58 +0900 |
---|---|---|
committer | anekos | 2011-04-06 16:32:45 +0900 |
commit | c0f552ebd08084ef2c3acd6ef2f14ee021be3d4b (patch) | |
tree | 07109d74e608508673dd510198ae04b4858fec5d /feedSomeKeys_3.js | |
parent | f750b3f33a329597758904f12f4c232f2cfb6261 (diff) | |
download | vimperator-plugins-c0f552ebd08084ef2c3acd6ef2f14ee021be3d4b.tar.bz2 |
-modes オプションを追加
Diffstat (limited to 'feedSomeKeys_3.js')
-rw-r--r-- | feedSomeKeys_3.js | 91 |
1 files changed, 72 insertions, 19 deletions
diff --git a/feedSomeKeys_3.js b/feedSomeKeys_3.js index 1709acd..42f837e 100644 --- a/feedSomeKeys_3.js +++ b/feedSomeKeys_3.js @@ -34,7 +34,7 @@ THE POSSIBILITY OF SUCH DAMAGE. // INFO {{{ let INFO = <> - <plugin name="feedSomeKeys" version="1.8.4" + <plugin name="feedSomeKeys" version="1.9.0" href="http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/feedSomeKeys_3.js" summary="Feed some defined key events into the Web content" lang="en-US" @@ -47,7 +47,7 @@ let INFO = <> </p> <item> <tags>:fmap</tags> - <spec>:fmap <oa>-e<oa>vents</oa>=<a>eventnamelist</a></oa> <oa>-x<oa>path</oa>=<a>xpath</a></oa> <oa>-f<oa>rame</oa>=<a>framenumber</a></oa> <oa>-urls=<a>urlpattern</a></oa> <a>lhs</a> <a>rhs</a></spec> + <spec>:fmap <oa>-e<oa>vents</oa>=<a>eventnamelist</a></oa> <oa>-x<oa>path</oa>=<a>xpath</a></oa> <oa>-f<oa>rame</oa>=<a>framenumber</a></oa> <oa>-urls=<a>urlpattern</a></oa> <oa>-modes=<a>modes</a></oa> <a>lhs</a> <a>rhs</a></spec> <description> <p> Define one mapping. @@ -60,7 +60,7 @@ let INFO = <> </item> <item> <tags>:fmaps</tags> - <spec>:fmaps <oa>-e<oa>vents</oa>=<a>eventnamelist</a></oa> <oa>-x<oa>path</oa>=<a>xpath</a></oa> <oa>-f<oa>rame</oa>=<a>framenumber</a></oa> <oa>-urls=<a>urlpattern</a></oa> <oa>-p<oa>prefix</oa>=<a>prefix</a></oa> <a>mappingpair</a> ....</spec> + <spec>:fmaps <oa>-e<oa>vents</oa>=<a>eventnamelist</a></oa> <oa>-x<oa>path</oa>=<a>xpath</a></oa> <oa>-f<oa>rame</oa>=<a>framenumber</a></oa> <oa>-urls=<a>urlpattern</a></oa> <oa>-p<oa>prefix</oa>=<a>prefix</a></oa> <oa>-modes=<a>modes</a></oa> <a>mappingpair</a> ....</spec> <description> <p> Two or more mappings are defined at once. @@ -75,7 +75,7 @@ let INFO = <> </item> <item> <tags>:fmapc</tags> - <spec>:fmapc<oa>!</oa> <oa>urlpattern</oa></spec> + <spec>:fmapc<oa>!</oa> <oa>-modes=<a>modes</a></oa> <oa>urlpattern</oa></spec> <description> <p> Remove the mappings matched with <oa>urlpattern</oa>. @@ -85,7 +85,7 @@ let INFO = <> </item> <item> <tags>:funmap</tags> - <spec>:funmap <oa>-urls=<a>urlpattern</a></oa> <a>lhs</a></spec> + <spec>:funmap <oa>-urls=<a>urlpattern</a></oa> <oa>-modes=<a>modes</a></oa> <a>lhs</a></spec> <description> <p> Remove the mappings. @@ -123,6 +123,10 @@ let INFO = <> <p>"v..." values use virtual key code.</p> <p>The event is generated in the order of writing of each key.</p> <p>The default value of this option is "keypress".</p> + <h3 tag="fmap-modes">modes</h3> + <p> + List of mapping modes. (Default is NORMAL mode) + </p> <h3 tag="fmaps-examples">fmaps examples for .vimperatorrc</h3> <p>If you input directly these commands in vimperator commandline, remove the ":lazy".</p> <code><ex> @@ -136,7 +140,7 @@ let INFO = <> :lazy fmaps -u='http://code.google.com/p/vimperator-labs/issues/detail' u </ex></code> </plugin> - <plugin name="feedSomeKeys" version="1.8.3" + <plugin name="feedSomeKeys" version="1.9.0" href="http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/feedSomeKeys_3.js" summary="Web コンテンツに直接キーイベントを送ります。" lang="ja" @@ -149,7 +153,7 @@ let INFO = <> </p> <item> <tags>:fmap</tags> - <spec>:fmap <oa>-e<oa>vents</oa>=<a>eventnamelist</a></oa> <oa>-x<oa>path</oa>=<a>xpath</a></oa> <oa>-f<oa>rame</oa>=<a>framenumber</a></oa> <oa>-urls=<a>urlpattern</a></oa> <a>lhs</a> <a>rhs</a></spec> + <spec>:fmap <oa>-e<oa>vents</oa>=<a>eventnamelist</a></oa> <oa>-x<oa>path</oa>=<a>xpath</a></oa> <oa>-f<oa>rame</oa>=<a>framenumber</a></oa> <oa>-urls=<a>urlpattern</a></oa> <oa>-modes=<a>modes</a></oa> <a>lhs</a> <a>rhs</a></spec> <description> <p> マッピングを一つ定義します。 @@ -162,7 +166,7 @@ let INFO = <> </item> <item> <tags>:fmaps</tags> - <spec>:fmaps <oa>-e<oa>vents</oa>=<a>eventnamelist</a></oa> <oa>-x<oa>path</oa>=<a>xpath</a></oa> <oa>-f<oa>rame</oa>=<a>framenumber</a></oa> <oa>-urls=<a>urlpattern</a></oa> <oa>-p<oa>prefix</oa>=<a>prefix</a></oa> <a>mappingpair</a> ....</spec> + <spec>:fmaps <oa>-e<oa>vents</oa>=<a>eventnamelist</a></oa> <oa>-x<oa>path</oa>=<a>xpath</a></oa> <oa>-f<oa>rame</oa>=<a>framenumber</a></oa> <oa>-urls=<a>urlpattern</a></oa> <oa>-p<oa>prefix</oa>=<a>prefix</a></oa> <oa>-modes=<a>modes</a></oa> <a>mappingpair</a> ....</spec> <description> <p> 一度に複数のマッピングを定義できます。 @@ -177,7 +181,7 @@ let INFO = <> </item> <item> <tags>:fmapc</tags> - <spec>:fmapc<oa>!</oa> <oa>urlpattern</oa></spec> + <spec>:fmapc<oa>!</oa> <oa>-modes=<a>modes</a></oa> <oa>urlpattern</oa></spec> <description> <p> <oa>urlpattern</oa> のマッピングを削除します。 @@ -187,7 +191,7 @@ let INFO = <> </item> <item> <tags>:funmap</tags> - <spec>:funmap <oa>-urls=<a>urlpattern</a></oa> <a>lhs</a></spec> + <spec>:funmap <oa>-urls=<a>urlpattern</a></oa> <oa>-modes=<a>modes</a></oa> <a>lhs</a></spec> <description> <p> マッピングを削除します。 @@ -225,6 +229,10 @@ let INFO = <> キーイベントを送るべきフレームの番号。 番号は、補完を参考にしてください。 </p> + <h3 tag="fmap-modes">modes</h3> + <p> + マップするモードのリスト (デフォルトは、NORMALモード) + </p> <h3 tag="fmaps-examples">.vimperatorrc 用の fmaps サンプル</h3> <p>コマンドラインで直接に入力するときは、":lazy" を除いてください。</p> <code><ex> @@ -384,11 +392,26 @@ let INFO = <> let xpathValidator = makeTryValidator(function (expr) document.evaluate(expr, document, null, null, null)) + function fromModeString (s){ + for (let [, {name, mask, char}] in Iterator(modes._modeMap)) + if (s === name || s === char) + return mask; + } + + function fromModeStrings (ss, def) { + if (def && (!ss || ss.length < 1)) + return [modes.NORMAL]; + return ss.map(fromModeString).filter(function (it) (typeof it === 'number')); + } + + function modeStringsValidator (ss) + (!ss || (fromModeStrings(ss).length === ss.length)); + function makeListValidator (list) function (values) (values && !values.some(function (value) !list.some(function (event) event === value))); - function findMappings ({all, filter, urls, ignoreUrls, not, result}) { + function findMappings ({all, filter, urls, ignoreUrls, not, result, modes: targetModes}) { function match (map) { let r = ( map.feedSomeKeys && @@ -410,12 +433,23 @@ let INFO = <> if (urls) urls = RegExp(urls); - return mappings._user[modes.NORMAL].filter(match); + // FIXME 同じオブジェクトがダブって返るかも(あるいはそれで良い?) + let result = []; + for (let [, m] in Iterator(targetModes || [modes.NORMAL])) + result = result.concat(mappings._user[m].filter(match)); + + return result; } function unmap (condition) { + condition = Object.create(condition); + let ms = condition.modes || [modes.NORMAL]; condition.not = true; - mappings._user[modes.NORMAL] = findMappings(condition); + condition.modes = undefined; + for (let [, m] in Iterator(ms)) { + condition.modes = [m]; + mappings._user[m] = findMappings(condition); + } } function list (condition) { @@ -483,6 +517,11 @@ let INFO = <> ]; } + const ModeStringsCompleter = [ + [name, disp + ' mode' + (char ? ' (alias: ' + char + ')' : '')] + for ([n, {name, char, disp, extended}] in Iterator(modes._modeMap)) + if (!extended && /^\D+$/(n)) + ]; 'fmap fmaps'.split(/\s+/).forEach(function (cmd) { @@ -491,6 +530,7 @@ let INFO = <> function action (multi) { return function (args) { let prefix = args['-prefix'] || ''; + let ms = fromModeStrings(args['-modes']); function add ([lhs, rhs]) { if (!lhs) @@ -498,7 +538,7 @@ let INFO = <> rhs = rhs || lhs; mappings.addUserMap( - [modes.NORMAL], + ms, [prefix + lhs], args['description'] || 'by feedSomeKeys_3.js', function () { @@ -540,7 +580,8 @@ let INFO = <> list({ filter: prefix + args.literalArg.trim(), urls: args['-urls'], - ignoreUrls: !args['-urls'] + ignoreUrls: !args['-urls'], + modes: ms }); } else { add([lhs, rhs]); @@ -556,6 +597,7 @@ let INFO = <> { literal: 0, options: [ + [['-modes', '-m'], commands.OPTION_LIST, modeStringsValidator, ModeStringsCompleter], [['-urls', '-u'], commands.OPTION_STRING, regexpValidator, urlCompleter({currentURL: true})], [['-desc', '-description', '-d'], commands.OPTION_STRING], [['-frame', '-f'], commands.OPTION_INT, null, frameCompleter], @@ -581,12 +623,13 @@ let INFO = <> ['fmapc'], 'Clear fmappings', function (args) { + let ms = fromModeStrings(args['-modes']); if (args.bang) { - unmap({ignoreUrls: true}); + unmap({ignoreUrls: true, modes: ms}); liberator.log('All fmappings were removed.'); } else { let result = {}; - unmap({urls: args.literalArg, result: result}); + unmap({urls: args.literalArg, result: result, modes: ms}); liberator.echo(result.matched ? 'Some fmappings were removed.' : 'Not found specifed fmappings.'); } }, @@ -596,7 +639,10 @@ let INFO = <> completer: function (context) { context.title = ['URL Pattern']; context.completions = urlCompleter({})(context); - } + }, + options: [ + [['-modes', '-m'], commands.OPTION_LIST], + ] }, true ); @@ -611,12 +657,19 @@ let INFO = <> return liberator.echoerr('E471: Argument required'); let result = {}; - unmap({filter: name, urls: urls, ignoreUrls: args['-ignoreurls'], result: result}); + unmap({ + filter: name, + urls: urls, + ignoreUrls: args['-ignoreurls'], + result: result, + modes: fromModeStrings(args['-modes']) + }); liberator.echo(result.matched ? 'Some fmappings were removed.' : 'Not found specifed fmappings.'); }, { literal: 0, options: [ + [['-modes', '-m'], commands.OPTION_LIST] [['-urls', '-u'], commands.OPTION_STRING, regexpValidator, urlCompleter({})], [['-ignoreurls', '-iu'], commands.OPTION_NOARG] ], |