From c0f552ebd08084ef2c3acd6ef2f14ee021be3d4b Mon Sep 17 00:00:00 2001 From: anekos Date: Wed, 6 Apr 2011 04:25:58 +0900 Subject: -modes オプションを追加 --- feedSomeKeys_3.js | 91 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 72 insertions(+), 19 deletions(-) (limited to 'feedSomeKeys_3.js') 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 = <> -

:fmap - :fmap -events=eventnamelist -xpath=xpath -frame=framenumber -urls=urlpattern lhs rhs + :fmap -events=eventnamelist -xpath=xpath -frame=framenumber -urls=urlpattern -modes=modes lhs rhs

Define one mapping. @@ -60,7 +60,7 @@ let INFO = <> :fmaps - :fmaps -events=eventnamelist -xpath=xpath -frame=framenumber -urls=urlpattern -pprefix=prefix mappingpair .... + :fmaps -events=eventnamelist -xpath=xpath -frame=framenumber -urls=urlpattern -pprefix=prefix -modes=modes mappingpair ....

Two or more mappings are defined at once. @@ -75,7 +75,7 @@ let INFO = <> :fmapc - :fmapc! urlpattern + :fmapc! -modes=modes urlpattern

Remove the mappings matched with urlpattern. @@ -85,7 +85,7 @@ let INFO = <> :funmap - :funmap -urls=urlpattern lhs + :funmap -urls=urlpattern -modes=modes lhs

Remove the mappings. @@ -123,6 +123,10 @@ let INFO = <>

"v..." values use virtual key code.

The event is generated in the order of writing of each key.

The default value of this option is "keypress".

+

modes

+

+ List of mapping modes. (Default is NORMAL mode) +

fmaps examples for .vimperatorrc

If you input directly these commands in vimperator commandline, remove the ":lazy".

@@ -136,7 +140,7 @@ let INFO = <> :lazy fmaps -u='http://code.google.com/p/vimperator-labs/issues/detail' u
-

:fmap - :fmap -events=eventnamelist -xpath=xpath -frame=framenumber -urls=urlpattern lhs rhs + :fmap -events=eventnamelist -xpath=xpath -frame=framenumber -urls=urlpattern -modes=modes lhs rhs

マッピングを一つ定義します。 @@ -162,7 +166,7 @@ let INFO = <> :fmaps - :fmaps -events=eventnamelist -xpath=xpath -frame=framenumber -urls=urlpattern -pprefix=prefix mappingpair .... + :fmaps -events=eventnamelist -xpath=xpath -frame=framenumber -urls=urlpattern -pprefix=prefix -modes=modes mappingpair ....

一度に複数のマッピングを定義できます。 @@ -177,7 +181,7 @@ let INFO = <> :fmapc - :fmapc! urlpattern + :fmapc! -modes=modes urlpattern

urlpattern のマッピングを削除します。 @@ -187,7 +191,7 @@ let INFO = <> :funmap - :funmap -urls=urlpattern lhs + :funmap -urls=urlpattern -modes=modes lhs

マッピングを削除します。 @@ -225,6 +229,10 @@ let INFO = <> キーイベントを送るべきフレームの番号。 番号は、補完を参考にしてください。

+

modes

+

+ マップするモードのリスト (デフォルトは、NORMALモード) +

.vimperatorrc 用の fmaps サンプル

コマンドラインで直接に入力するときは、":lazy" を除いてください。

@@ -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] ], -- cgit v1.2.3