aboutsummaryrefslogtreecommitdiffstats
path: root/feedSomeKeys_3.js
diff options
context:
space:
mode:
authoranekos2011-04-06 04:25:58 +0900
committeranekos2011-04-06 16:32:45 +0900
commitc0f552ebd08084ef2c3acd6ef2f14ee021be3d4b (patch)
tree07109d74e608508673dd510198ae04b4858fec5d /feedSomeKeys_3.js
parentf750b3f33a329597758904f12f4c232f2cfb6261 (diff)
downloadvimperator-plugins-c0f552ebd08084ef2c3acd6ef2f14ee021be3d4b.tar.bz2
-modes オプションを追加
Diffstat (limited to 'feedSomeKeys_3.js')
-rw-r--r--feedSomeKeys_3.js91
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]
],