1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-22 23:58:00 +01:00

many small style improvements, some useless test functions added (yeah, that's why it's called "pre" software :))

This commit is contained in:
Martin Stubenschrott
2008-02-01 02:45:31 +00:00
parent ee73cd05a9
commit 3b4f00a2e8
10 changed files with 232 additions and 215 deletions

1
TODO
View File

@@ -10,6 +10,7 @@ BUGS:
- searching backwards incrementally does not work i.e. with 'incsearch' set - searching backwards incrementally does not work i.e. with 'incsearch' set
- http://msdn2.microsoft.com/en-us/library/ms535258.aspx does not scroll with j/k/etc. - http://msdn2.microsoft.com/en-us/library/ms535258.aspx does not scroll with j/k/etc.
same for http://forum.mootools.net/topic.php?id=3458 same for http://forum.mootools.net/topic.php?id=3458
- insert abbreviations broken on <space>
FEATURES: FEATURES:
8 middleclick in content == p, and if command line is open, paste there the clipboard buffer 8 middleclick in content == p, and if command line is open, paste there the clipboard buffer

View File

@@ -38,80 +38,6 @@ vimperator.Buffer = function () //{{{
var zoomLevels = [ 1, 10, 25, 50, 75, 90, 100, var zoomLevels = [ 1, 10, 25, 50, 75, 90, 100,
120, 150, 200, 300, 500, 1000, 2000 ]; 120, 150, 200, 300, 500, 1000, 2000 ];
// TODO: rename
function followFrameRelationship(relationship, parsedFrame)
{
var regexps;
var relText;
var patternText;
var revString;
switch (relationship)
{
case "next":
regexps = vimperator.options["nextpattern"].split(",");
revString = "previous";
break;
case "previous":
// TODO: accept prev\%[ious]
regexps = vimperator.options["previouspattern"].split(",");
revString = "next";
break;
default:
vimperator.echoerr("Bad document relationship: " + relationship);
}
relText = new RegExp(relationship, "i");
revText = new RegExp(revString, "i");
var elems = parsedFrame.document.getElementsByTagName("link");
// links have higher priority than normal <a> hrefs
for (var i = 0; i < elems.length; i++)
{
if (relText.test(elems[i].rel) || revText.test(elems[i].rev))
{
vimperator.open(elems[i].href);
return true;
}
}
// no links? ok, look for hrefs
elems = parsedFrame.document.getElementsByTagName("a");
for (var i = 0; i < elems.length; i++)
{
if (relText.test(elems[i].rel) || revText.test(elems[i].rev))
{
vimperator.buffer.followLink(elems[i], vimperator.CURRENT_TAB);
return true;
}
}
for (var pattern = 0; pattern < regexps.length; pattern++)
{
patternText = new RegExp(regexps[pattern], "i");
for (var i = 0; i < elems.length; i++)
{
if (patternText.test(elems[i].textContent))
{
vimperator.buffer.followLink(elems[i], vimperator.CURRENT_TAB);
return true;
}
else
{
// images with alt text being href
var children = elems[i].childNodes;
for (var j = 0; j < children.length; j++)
{
if (patternText.test(children[j].alt))
{
vimperator.buffer.followLink(elems[i], vimperator.CURRENT_TAB);
return true;
}
}
}
}
}
return false;
}
function setZoom(value, fullZoom) function setZoom(value, fullZoom)
{ {
if (value < 1 || value > 2000) if (value < 1 || value > 2000)
@@ -216,6 +142,26 @@ vimperator.Buffer = function () //{{{
win.scrollTo(h, v); win.scrollTo(h, v);
} }
vimperator.commands.add(new vimperator.Command(["test"],
function (args, special)
{
alert(args)
},
{
shortHelp: "Test command"
}
));
vimperator.options.add(new vimperator.Option(["test"], "boolean",
{
shortHelp: "Test option",
defaultValue: false
}
));
vimperator.mappings.addDefault([vimperator.modes.NORMAL], ["w"], "Test",
function () { alert("test"); }
);
/////////////////////////////////////////////////////////////////////////////}}} /////////////////////////////////////////////////////////////////////////////}}}
////////////////////// PUBLIC SECTION ////////////////////////////////////////// ////////////////////// PUBLIC SECTION //////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{ /////////////////////////////////////////////////////////////////////////////{{{
@@ -310,7 +256,7 @@ vimperator.Buffer = function () //{{{
}, },
// quick function to get elements inside the document reliably // quick function to get elements inside the document reliably
// argument "args" is something like: @id='myid' or @type='text' (don't forget the quoted around myid) // argument "args" is something like: @id='myid' or @type='text' (don't forget the quotes around myid)
getElement: function (args, index) getElement: function (args, index)
{ {
return vimperator.buffer.evaluateXPath("//*[" + (args || "") + "]").snapshotItem(index || 0) return vimperator.buffer.evaluateXPath("//*[" + (args || "") + "]").snapshotItem(index || 0)
@@ -434,11 +380,12 @@ vimperator.Buffer = function () //{{{
return selection; return selection;
}, },
// TODO: move to tabs.js
list: function (fullmode) list: function (fullmode)
{ {
if (fullmode) if (fullmode)
{ {
// toggle the special buffer previw window // toggle the special buffer preview window
if (vimperator.bufferwindow.visible()) if (vimperator.bufferwindow.visible())
{ {
vimperator.bufferwindow.hide(); vimperator.bufferwindow.hide();
@@ -644,6 +591,7 @@ vimperator.Buffer = function () //{{{
setTimeout(function () { doc.body.removeChild(indicator); }, 500); setTimeout(function () { doc.body.removeChild(indicator); }, 500);
}, },
// XXX: probably remove this method/functionality
// updates the buffer preview in place only if list is visible // updates the buffer preview in place only if list is visible
updateBufferList: function () updateBufferList: function ()
{ {
@@ -655,7 +603,7 @@ vimperator.Buffer = function () //{{{
vimperator.bufferwindow.selectItem(getBrowser().mTabContainer.selectedIndex); vimperator.bufferwindow.selectItem(getBrowser().mTabContainer.selectedIndex);
}, },
// XXX: should this be in v.buffers. or v.tabs.? // TODO: move to v.tabs.?
// "buffer" is a string which matches the URL or title of a buffer, if it // "buffer" is a string which matches the URL or title of a buffer, if it
// is null, the last used string is used again // is null, the last used string is used again
switchTo: function (buffer, allowNonUnique, count, reverse) switchTo: function (buffer, allowNonUnique, count, reverse)
@@ -995,6 +943,79 @@ vimperator.Buffer = function () //{{{
followDocumentRelationship: function (relationship) followDocumentRelationship: function (relationship)
{ {
function followFrameRelationship(relationship, parsedFrame)
{
var regexps;
var relText;
var patternText;
var revString;
switch (relationship)
{
case "next":
regexps = vimperator.options["nextpattern"].split(",");
revString = "previous";
break;
case "previous":
// TODO: accept prev\%[ious]
regexps = vimperator.options["previouspattern"].split(",");
revString = "next";
break;
default:
vimperator.echoerr("Bad document relationship: " + relationship);
}
relText = new RegExp(relationship, "i");
revText = new RegExp(revString, "i");
var elems = parsedFrame.document.getElementsByTagName("link");
// links have higher priority than normal <a> hrefs
for (var i = 0; i < elems.length; i++)
{
if (relText.test(elems[i].rel) || revText.test(elems[i].rev))
{
vimperator.open(elems[i].href);
return true;
}
}
// no links? ok, look for hrefs
elems = parsedFrame.document.getElementsByTagName("a");
for (var i = 0; i < elems.length; i++)
{
if (relText.test(elems[i].rel) || revText.test(elems[i].rev))
{
vimperator.buffer.followLink(elems[i], vimperator.CURRENT_TAB);
return true;
}
}
for (var pattern = 0; pattern < regexps.length; pattern++)
{
patternText = new RegExp(regexps[pattern], "i");
for (var i = 0; i < elems.length; i++)
{
if (patternText.test(elems[i].textContent))
{
vimperator.buffer.followLink(elems[i], vimperator.CURRENT_TAB);
return true;
}
else
{
// images with alt text being href
var children = elems[i].childNodes;
for (var j = 0; j < children.length; j++)
{
if (patternText.test(children[j].alt))
{
vimperator.buffer.followLink(elems[i], vimperator.CURRENT_TAB);
return true;
}
}
}
}
}
return false;
}
var retVal; var retVal;
if (window.content.frames.length != 0) if (window.content.frames.length != 0)
{ {

View File

@@ -470,6 +470,31 @@ vimperator.Editor = function () //{{{
} }
}, },
// System for adding abbreviations:
//
// filter == ! delete all, and set first (END)
//
// if filter == ! remove all and add it as only END
//
// variant 1: rhs matches anywere in loop
//
// 1 mod matches anywhere in loop
// a) simple replace and
// I) (maybe there's another rhs that matches? not possible)
// (when there's another item, it's opposite mod with different rhs)
// (so do nothing further but END)
//
// 2 mod does not match
// a) the opposite is there -> make a ! and put it as only and END
// (b) a ! is there. do nothing END)
//
// variant 2: rhs matches *no*were in loop and filter is c or i
// everykind of current combo is possible to 1 {c,i,!} or two {c and i}
//
// 1 mod is ! split into two i + c END
// 1 not !: opposite mode (first), add/change 'second' and END
// 1 not !: same mode (first), overwrite first this END
//
addAbbreviation: function (filter, lhs, rhs) addAbbreviation: function (filter, lhs, rhs)
{ {
if (!abbrev[lhs]) if (!abbrev[lhs])
@@ -525,33 +550,6 @@ vimperator.Editor = function () //{{{
abbrev[lhs][1] = [filter, rhs]; abbrev[lhs][1] = [filter, rhs];
else else
abbrev[lhs][0] = [filter, rhs]; abbrev[lhs][0] = [filter, rhs];
return;
// System above:
// filter == ! delete all, and set first (END)
//
// if filter == ! remove all and add it as only END
//
// variant 1: rhs matches anywere in loop
//
// 1 mod matches anywhere in loop
// a) simple replace and
// I) (maybe there's another rhs that matches? not possible)
// (when there's another item, it's opposite mod with different rhs)
// (so do nothing further but END)
//
// 2 mod does not match
// a) the opposite is there -> make a ! and put it as only and END
// (b) a ! is there. do nothing END)
//
// variant 2: rhs matches *no*were in loop and filter is c or i
// everykind of current combo is possible to 1 {c,i,!} or two {c and i}
//
// 1 mod is ! split into two i + c END
// 1 not !: opposite mode (first), add/change 'second' and END
// 1 not !: same mode (first), overwrite first this END
//
}, },
removeAbbreviation: function (filter, lhs) removeAbbreviation: function (filter, lhs)
@@ -631,20 +629,20 @@ vimperator.Editor = function () //{{{
for (var lhs in abbrev) for (var lhs in abbrev)
{ {
for (var i = 0; i < abbrev[lhs].length; i++) for (var i = 0; i < abbrev[lhs].length; i++)
{
if (lhs == foundWord && (abbrev[lhs][i][0] == filter || abbrev[lhs][i][0] == "!"))
{ {
if (lhs == foundWord && (abbrev[lhs][i][0] == filter || abbrev[lhs][i][0] == "!")) // if found, replace accordingly
{ var len = foundWord.length;
// if found, replace accordingly var abbrText = abbrev[lhs][i][1];
var len = foundWord.length; text = text.substring(0, currStart - len) + abbrText + text.substring(currStart);
var abbrText = abbrev[lhs][i][1]; textbox.value = text;
text = text.substring(0, currStart - len) + abbrText + text.substring(currStart); textbox.selectionStart = currStart - len + abbrText.length;
textbox.value = text; textbox.selectionEnd = currEnd - len + abbrText.length;
textbox.selectionStart = currStart - len + abbrText.length; break;
textbox.selectionEnd = currEnd - len + abbrText.length;
break;
}
} }
}
} }
return true; return true;
} }

View File

@@ -55,11 +55,30 @@ vimperator.AutoCommands = function() //{{{
return autoCommandsIterator(); return autoCommandsIterator();
}, },
add: function (auEvent, regex, cmds)
{
var eventsIter = auEvent.split(",");
for (var i = 0; i < eventsIter.length; i++)
{
if (!autoCommands[eventsIter[i]])
autoCommands[eventsIter[i]] = [];
var flag = true;
for (var y = 0; y < autoCommands[eventsIter[i]].length; y++)
{
if (autoCommands[eventsIter[i]][y][0] == regex && autoCommands[eventsIter[i]][y][1] == cmds)
flag = false;
}
if (flag)
autoCommands[eventsIter[i]].push([regex, cmds]);
}
},
remove: function (auEvent, regex) // arguments are filters (NULL = all) remove: function (auEvent, regex) // arguments are filters (NULL = all)
{ {
if (!auEvent && !regex) if (!auEvent && !regex)
{ {
autoCommands = {}; // delete all TODO: rather delete.. or something? autoCommands = {}; // delete all
} }
else if (!regex) // remove all on this auEvent else if (!regex) // remove all on this auEvent
{ {
@@ -69,7 +88,7 @@ vimperator.AutoCommands = function() //{{{
delete autoCommands[item]; delete autoCommands[item];
} }
} }
else if (!auEvent) // delete all match's to this regex else if (!auEvent) // delete all matches to this regex
{ {
for (var item in autoCommands) for (var item in autoCommands)
{ {
@@ -79,7 +98,7 @@ vimperator.AutoCommands = function() //{{{
if (regex == autoCommands[item][i][0]) if (regex == autoCommands[item][i][0])
{ {
autoCommands[item].splice(i, 1); // remove array autoCommands[item].splice(i, 1); // remove array
// keep `i' since this is removed, so a possible next one is at this place now) // keep `i' since this is removed, so a possible next one is at this place now
} }
else else
i++; i++;
@@ -135,25 +154,6 @@ vimperator.AutoCommands = function() //{{{
vimperator.commandline.echo(list, vimperator.commandline.HL_NORMAL, vimperator.commandline.FORCE_MULTILINE); vimperator.commandline.echo(list, vimperator.commandline.HL_NORMAL, vimperator.commandline.FORCE_MULTILINE);
}, },
add: function (auEvent, regex, cmds)
{
var eventsIter = auEvent.split(",");
for (var i = 0; i < eventsIter.length; i++)
{
if (!autoCommands[eventsIter[i]])
autoCommands[eventsIter[i]] = [];
var flag = true;
for (var y = 0; y < autoCommands[eventsIter[i]].length; y++)
{
if (autoCommands[eventsIter[i]][y][0] == regex && autoCommands[eventsIter[i]][y][1] == cmds)
flag = false;
}
if (flag)
autoCommands[eventsIter[i]].push([regex, cmds]);
}
},
trigger: function (auEvent, url) trigger: function (auEvent, url)
{ {
if (autoCommands[auEvent]) if (autoCommands[auEvent])
@@ -176,7 +176,7 @@ vimperator.Events = function () //{{{
////////////////////// PRIVATE SECTION ///////////////////////////////////////// ////////////////////// PRIVATE SECTION /////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{ /////////////////////////////////////////////////////////////////////////////{{{
var inputBufferLength = 0; // counts the number of keys in v.input.buffer (can be different from v.input.buffer.length) var inputBufferLength = 0; // count the number of keys in v.input.buffer (can be different from v.input.buffer.length)
var skipMap = false; // while feeding the keys (stored in v.input.buffer | no map found) - ignore mappings var skipMap = false; // while feeding the keys (stored in v.input.buffer | no map found) - ignore mappings
var macros = {}; var macros = {};
@@ -270,7 +270,7 @@ vimperator.Events = function () //{{{
// NOTE: the order of ["Esc", "Escape"] or ["Escape", "Esc"] // NOTE: the order of ["Esc", "Escape"] or ["Escape", "Esc"]
// matters, so use that string as the first item, that you // matters, so use that string as the first item, that you
// want to refer to within Vimperator's source code for // want to refer to within Vimperator's source code for
// comparisons like if (key == "Esc") { ... } // comparisons like if (key == "<Esc>") { ... }
var keyTable = [ var keyTable = [
[ KeyEvent.DOM_VK_ESCAPE, ["Esc", "Escape"] ], [ KeyEvent.DOM_VK_ESCAPE, ["Esc", "Escape"] ],
[ KeyEvent.DOM_VK_LEFT_SHIFT, ["<"] ], [ KeyEvent.DOM_VK_LEFT_SHIFT, ["<"] ],
@@ -390,8 +390,8 @@ vimperator.Events = function () //{{{
// code which is only relevant if the page load is the current tab goes here: // code which is only relevant if the page load is the current tab goes here:
if (doc == getBrowser().selectedBrowser.contentDocument) if (doc == getBrowser().selectedBrowser.contentDocument)
{ {
// // FIXME: this currently causes window map events which is _very_ annoying // we want to stay in command mode after a page has loaded
// // we want to stay in command mode after a page has loaded // XXX: Does this still causes window map events which is _very_ annoying
setTimeout(function () { setTimeout(function () {
var focused = document.commandDispatcher.focusedElement; var focused = document.commandDispatcher.focusedElement;
if (focused && focused.value.length == 0) if (focused && focused.value.length == 0)
@@ -412,12 +412,12 @@ vimperator.Events = function () //{{{
// if (vimperator.buffer.loaded == 1) // if (vimperator.buffer.loaded == 1)
// return true; // return true;
var ms = 10000; // maximum time to wait - TODO: add option var ms = 15000; // maximum time to wait - TODO: add option
var then = new Date().getTime(); var then = new Date().getTime();
for (var now = then; now - then < ms; now = new Date().getTime()) for (var now = then; now - then < ms; now = new Date().getTime())
{ {
mainThread.processNextEvent(true); mainThread.processNextEvent(true);
if ((now -then) % 1000 < 10) if ((now - then) % 1000 < 10)
dump("waited: " + (now - then) + " ms\n"); dump("waited: " + (now - then) + " ms\n");
if (vimperator.buffer.loaded > 0) if (vimperator.buffer.loaded > 0)
@@ -615,7 +615,7 @@ vimperator.Events = function () //{{{
{ {
charCode = 0; charCode = 0;
} }
else //an invalid key like <A-xxx> was found, stop propagation here (like Vim) else // an invalid key like <A-xxx> was found, stop propagation here (like Vim)
{ {
return; return;
} }
@@ -716,7 +716,6 @@ vimperator.Events = function () //{{{
// a key like F1 is always enclosed in < and > // a key like F1 is always enclosed in < and >
return "<" + modifier + key + ">"; return "<" + modifier + key + ">";
}, },
isAcceptKey: function (key) isAcceptKey: function (key)
@@ -797,18 +796,20 @@ vimperator.Events = function () //{{{
{ {
if (couldCopy) if (couldCopy)
{ {
if ((vimperator.mode == vimperator.modes.TEXTAREA || (vimperator.modes.extended & vimperator.modes.TEXTAREA)) if ((vimperator.mode == vimperator.modes.TEXTAREA ||
(vimperator.modes.extended & vimperator.modes.TEXTAREA))
&& !vimperator.options["insertmode"]) && !vimperator.options["insertmode"])
vimperator.modes.set(vimperator.modes.VISUAL, vimperator.modes.TEXTAREA); vimperator.modes.set(vimperator.modes.VISUAL, vimperator.modes.TEXTAREA);
else if (vimperator.mode == vimperator.modes.CARET) else if (vimperator.mode == vimperator.modes.CARET)
vimperator.modes.set(vimperator.modes.VISUAL, vimperator.modes.CARET); vimperator.modes.set(vimperator.modes.VISUAL, vimperator.modes.CARET);
} }
} }
//else // XXX: disabled, as i think automatically starting visual caret mode does more harm than help
//{ // else
// if (!couldCopy && vimperator.modes.extended & vimperator.modes.CARET) // {
// vimperator.mode = vimperator.modes.CARET; // if (!couldCopy && vimperator.modes.extended & vimperator.modes.CARET)
//} // vimperator.mode = vimperator.modes.CARET;
// }
}, },
// global escape handler, is called in ALL modes // global escape handler, is called in ALL modes
@@ -824,10 +825,18 @@ vimperator.Events = function () //{{{
switch (vimperator.mode) switch (vimperator.mode)
{ {
case vimperator.modes.HINTS: case vimperator.modes.NORMAL:
case vimperator.modes.CUSTOM: // clear any selection made
case vimperator.modes.COMMAND_LINE: var selection = window.content.getSelection();
try
{ // a simple if (selection) does not seem to work
selection.collapseToStart();
}
catch (e) { }
vimperator.commandline.clear();
vimperator.modes.reset(); vimperator.modes.reset();
vimperator.focusContent(true);
break; break;
case vimperator.modes.VISUAL: case vimperator.modes.VISUAL:
@@ -855,19 +864,9 @@ vimperator.Events = function () //{{{
} }
break; break;
default: // HINTS, CUSTOM or COMMAND_LINE
default:
// clear any selection made
var selection = window.content.getSelection();
try
{ // a simple if (selection) does not seem to work
selection.collapseToStart();
}
catch (e) { }
vimperator.commandline.clear();
vimperator.modes.reset(); vimperator.modes.reset();
vimperator.focusContent(true); break;
} }
} }
}, },
@@ -925,16 +924,9 @@ vimperator.Events = function () //{{{
return false; return false;
} }
// FIXME: proper way is to have a better onFocus handler which also handles events for the XUL // just forward event without checking any mappings when the MOW is open
if (!vimperator.mode == vimperator.modes.TEXTAREA &&
!vimperator.mode == vimperator.modes.INSERT &&
!vimperator.mode == vimperator.modes.COMMAND_LINE &&
isFormElemFocused()) // non insert mode, but e.g. the location bar has focus
return false;
// just forward event, without checking any mappings
if (vimperator.mode == vimperator.modes.COMMAND_LINE && if (vimperator.mode == vimperator.modes.COMMAND_LINE &&
vimperator.modes.extended & vimperator.modes.OUTPUT_MULTILINE) (vimperator.modes.extended & vimperator.modes.OUTPUT_MULTILINE))
{ {
vimperator.commandline.onMultilineOutputEvent(event); vimperator.commandline.onMultilineOutputEvent(event);
return false; return false;
@@ -1007,12 +999,12 @@ vimperator.Events = function () //{{{
} }
} }
//FIXME (maybe): (is an ESC or C-] here): on HINTS mode, it enters // FIXME (maybe): (is an ESC or C-] here): on HINTS mode, it enters
//into 'if (map && !skipMap) below. With that (or however) it // into 'if (map && !skipMap) below. With that (or however) it
//triggers the onEscape part, where it resets mode. Here I just // triggers the onEscape part, where it resets mode. Here I just
//return true, with the effect that it also gets to there (for // return true, with the effect that it also gets to there (for
//whatever reason). if that happens to be correct, well.. // whatever reason). if that happens to be correct, well..
//XXX: why not just do that as well for HINTS mode actually? // XXX: why not just do that as well for HINTS mode actually?
if (vimperator.mode == vimperator.modes.CUSTOM) if (vimperator.mode == vimperator.modes.CUSTOM)
return true; return true;
@@ -1045,7 +1037,7 @@ vimperator.Events = function () //{{{
vimperator.input.buffer = ""; vimperator.input.buffer = "";
inputBufferLength = 0; inputBufferLength = 0;
var tmp = vimperator.input.pendingArgMap; // must be set to null before .execute; if not var tmp = vimperator.input.pendingArgMap; // must be set to null before .execute; if not
vimperator.input.pendingArgMap = null; // v.inputpendingArgMap is still 'true' also for new feeded keys vimperator.input.pendingArgMap = null; // v.input.pendingArgMap is still 'true' also for new feeded keys
if (key != "<Esc>" && key != "<C-[>") if (key != "<Esc>" && key != "<C-[>")
{ {
if (vimperator.modes.isReplaying && !waitForPageLoaded()) if (vimperator.modes.isReplaying && !waitForPageLoaded())
@@ -1267,7 +1259,9 @@ vimperator.Events = function () //{{{
observe: function (aSubject, aTopic, aData) observe: function (aSubject, aTopic, aData)
{ {
if (aTopic != "nsPref:changed") return; if (aTopic != "nsPref:changed")
return;
// aSubject is the nsIPrefBranch we're observing (after appropriate QI) // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
// aData is the name of the pref that's been changed (relative to aSubject) // aData is the name of the pref that's been changed (relative to aSubject)
switch (aData) switch (aData)

View File

@@ -90,6 +90,12 @@ vimperator.Mappings = function () //{{{
map.modes.forEach(function (mode) { main[mode].push(map); }); map.modes.forEach(function (mode) { main[mode].push(map); });
} }
function addMap(map, userMap)
{
var where = userMap ? user : main;
map.modes.forEach(function (mode) { where[mode].push(map); });
}
function getMap(mode, cmd, stack) function getMap(mode, cmd, stack)
{ {
var maps = stack[mode]; var maps = stack[mode];
@@ -192,9 +198,15 @@ vimperator.Mappings = function () //{{{
return user[mode].some(function (map) { return map.hasName(cmd); }); return user[mode].some(function (map) { return map.hasName(cmd); });
}, },
addDefault: function (modes, keys, description, action, extra)
{
addMap (new vimperator.Map([vimperator.modes.NORMAL], keys,
action, { shortHelp: description }), false);
},
add: function (map) add: function (map)
{ {
// a map can have multiple names (see default-map sections, there are many multiples) // a map can have multiple names
for (var i = 0; i < map.names.length; i++) for (var i = 0; i < map.names.length; i++)
{ {
// only store keysyms with uppercase modifier strings // only store keysyms with uppercase modifier strings
@@ -223,7 +235,6 @@ vimperator.Mappings = function () //{{{
return getMap(mode, cmd, user) || getMap(mode, cmd, main); return getMap(mode, cmd, user) || getMap(mode, cmd, main);
}, },
// TODO: move default maps to their own v.normal namespace
getDefault: function (mode, cmd) getDefault: function (mode, cmd)
{ {
return getMap(mode, cmd, main); return getMap(mode, cmd, main);

View File

@@ -32,14 +32,6 @@ const vimperator = (function () //{{{
////////////////////// PRIVATE SECTION ///////////////////////////////////////// ////////////////////// PRIVATE SECTION /////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{ /////////////////////////////////////////////////////////////////////////////{{{
// our services
var soundService = Components.classes["@mozilla.org/sound;1"]
.getService(Components.interfaces.nsISound);
var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService);
var environmentService = Components.classes["@mozilla.org/process/environment;1"]
.getService(Components.interfaces.nsIEnvironment);
var callbacks = []; var callbacks = [];
/////////////////////////////////////////////////////////////////////////////}}} /////////////////////////////////////////////////////////////////////////////}}}
@@ -107,6 +99,8 @@ const vimperator = (function () //{{{
} }
else else
{ {
var soundService = Components.classes["@mozilla.org/sound;1"].
getService(Components.interfaces.nsISound);
soundService.beep(); soundService.beep();
} }
}, },
@@ -299,6 +293,8 @@ const vimperator = (function () //{{{
if (typeof msg == "object") if (typeof msg == "object")
msg = this.objectToString(msg, false); msg = this.objectToString(msg, false);
var consoleService = Components.classes["@mozilla.org/consoleservice;1"].
getService(Components.interfaces.nsIConsoleService);
consoleService.logStringMessage("vimperator: " + msg); consoleService.logStringMessage("vimperator: " + msg);
}, },
@@ -435,6 +431,9 @@ const vimperator = (function () //{{{
} }
catch (e) catch (e)
{ {
var environmentService = Components.classes["@mozilla.org/process/environment;1"]
.getService(Components.interfaces.nsIEnvironment);
var dirs = environmentService.get("PATH").split(WINDOWS ? ";" : ":"); var dirs = environmentService.get("PATH").split(WINDOWS ? ";" : ":");
for (var i = 0; i < dirs.length; i++) for (var i = 0; i < dirs.length; i++)
{ {
@@ -622,7 +621,7 @@ const vimperator = (function () //{{{
vimperator.quickmarks = vimperator.QuickMarks(); vimperator.quickmarks = vimperator.QuickMarks();
vimperator.log("Loading module hints...", 3); vimperator.log("Loading module hints...", 3);
vimperator.hints = vimperator.Hints(); vimperator.hints = vimperator.Hints();
vimperator.log("Loading module autocommands...", 3); //XXX: what the 3 there, I didn't check vimperator.log("Loading module autocommands...", 3);
vimperator.autocommands = vimperator.AutoCommands(); vimperator.autocommands = vimperator.AutoCommands();
vimperator.log("Loading module io...", 3); vimperator.log("Loading module io...", 3);
vimperator.io = vimperator.IO(); vimperator.io = vimperator.IO();

View File

@@ -28,6 +28,8 @@ HEADER=<span style="float: right; padding-top: 10px;"><form action="https://www.
\[arg2\]=<span class="argument">&#91;arg2&#93;</span> \[arg2\]=<span class="argument">&#91;arg2&#93;</span>
\[url\]=<span class="argument">&#91;url&#93;</span> \[url\]=<span class="argument">&#91;url&#93;</span>
\[file\]=<span class="argument">&#91;file&#93;</span> \[file\]=<span class="argument">&#91;file&#93;</span>
\[value\]=<span class="argument">&#91;value&#93;</span>
\[filter\]=<span class="argument">&#91;filter&#93;</span>
\[!\]=<span class="argument">&#91;!&#93;</span> \[!\]=<span class="argument">&#91;!&#93;</span>
# [macros] # [macros]

View File

@@ -50,13 +50,13 @@ section:Help{nbsp}topics[overview]
a browsing session (how to open a web page or go back in history). a browsing session (how to open a web page or go back in history).
- help:Motion{nbsp}commands[motion.html]: How to efficiently scroll in - help:Motion{nbsp}commands[motion.html]: How to efficiently scroll in
Vimperator. Vimperator.
- help:Options[options.html]: A description of all options.
- help:Tabs[tabs.html]: Manage your tabbed browsing session. - help:Tabs[tabs.html]: Manage your tabbed browsing session.
- help:Marks[marks.html]: Usage of bookmarks, QuickMarks, and history. - help:Marks[marks.html]: Usage of bookmarks, QuickMarks, and history.
- help:Repeating{nbsp}commands[repeat.html]: Usage of macros to repeat - help:Repeating{nbsp}commands[repeat.html]: Usage of macros to repeat
recurring workflows. recurring workflows.
- help:Autocommands[autocommands.html]: Automatically execute code on ceratain - help:Autocommands[autocommands.html]: Automatically execute code on ceratain
events. events.
- help:Options[options.html]: A description of all options.
- help:Developer{nbsp}Information[developer.html]: How to write docs or - help:Developer{nbsp}Information[developer.html]: How to write docs or
plugins. plugins.
- help:Various[various.html]: Other help which didn't fit into any other category. - help:Various[various.html]: Other help which didn't fit into any other category.

View File

@@ -45,6 +45,12 @@ ________________________________________________________________________________
Show help on Normal mode commands. Added to simulate the Nvi command. Show help on Normal mode commands. Added to simulate the Nvi command.
________________________________________________________________________________ ________________________________________________________________________________
|42| +
What is the meaning of life, the universe and everything?
Douglas Adams, the only person who knew what this question really was about is
now dead, unfortunately. So now you might wonder what the meaning of death
is...
@@ -982,13 +988,6 @@ command.. Example: [c]:execute echo "test"[c] shows a message with the text
________________________________________________________________________________ ________________________________________________________________________________
|:exu| |:exusage|
||:exu[sage]||
________________________________________________________________________________
Show help for Ex commands.
________________________________________________________________________________
|:fw| |:fo| |:forward| |:fw| |:fo| |:forward|
||:[count]fo[rward][!] [url]|| + ||:[count]fo[rward][!] [url]|| +
________________________________________________________________________________ ________________________________________________________________________________
@@ -1510,9 +1509,9 @@ ________________________________________________________________________________
|:time| |:time|
||:{count} time[!] {code|:command}|| + ||:[count]time[!] {code|:command}|| +
________________________________________________________________________________ ________________________________________________________________________________
Profile a piece of code or a command. Runs {code} {count} times (default 1) Profile a piece of code or a command. Run {code} [count] times (default 1)
and returns the elapsed time. {code} is always passed to JavaScript's eval(), and returns the elapsed time. {code} is always passed to JavaScript's eval(),
which might be slow, so take the results with a grain of salt. which might be slow, so take the results with a grain of salt.
@@ -1583,13 +1582,6 @@ external editor.
________________________________________________________________________________ ________________________________________________________________________________
|:viu| |:viusage|
||:viu[sage]||
________________________________________________________________________________
Show help for normal mode commands.
________________________________________________________________________________
|:wc| |:wclose| |:winc| |:winclose| |:wc| |:wclose| |:winc| |:winclose|
||:winc[ose] [url] [, url]|| + ||:winc[ose] [url] [, url]|| +
________________________________________________________________________________ ________________________________________________________________________________
@@ -1612,9 +1604,9 @@ ________________________________________________________________________________
||:zo[om][!] [value]|| + ||:zo[om][!] [value]|| +
||:zo[om][!] +{value} | -{value}|| + ||:zo[om][!] +{value} | -{value}|| +
________________________________________________________________________________ ________________________________________________________________________________
Set zoom value of current web page. If {value} can be an absolute value Set zoom value of current web page. If [value] can be an absolute value
between 1 and 2000% or a relative value if prefixed with '-' or '+'. If between 1 and 2000% or a relative value if prefixed with '-' or '+'. If
{value} is omitted, zoom is reset to 100%. [value] is omitted, zoom is reset to 100%.
Normally this command operates on the text zoom, if used with [!] it operates Normally this command operates on the text zoom, if used with [!] it operates
on full zoom. on full zoom.

View File

@@ -290,7 +290,6 @@ span.tag, span.hiddentag {
font-weight: bold; font-weight: bold;
color: rgb(255, 0, 255); /* magenta */ color: rgb(255, 0, 255); /* magenta */
padding-left: 15px; padding-left: 15px;
/*padding-top: -5px;*/
float: right; float: right;
} }
/* inside a table cell means this tag is part of a section */ /* inside a table cell means this tag is part of a section */