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

Merge branch 'master' into xulmus

This commit is contained in:
Doug Kearns
2009-03-16 16:31:54 +11:00
29 changed files with 291 additions and 147 deletions

View File

@@ -81,11 +81,11 @@ $(RDF): $(RDF_IN) Makefile
< $< > $@ < $< > $@
@echo "SUCCESS: $@" @echo "SUCCESS: $@"
clean: $(LOCALES:%=%.clean) clean: $(LOCALEDIR)/$(LOCALES:%=%.clean)
@echo "General $(NAME) cleanup..." @echo "General $(NAME) cleanup..."
rm -f $(JAR) $(XPI) rm -f $(JAR) $(XPI)
distclean: $(LOCALES:%=%.distclean) clean distclean: $(LOCALEDIR)/$(LOCALES:%=%.distclean) clean
@echo "More $(NAME) cleanup..." @echo "More $(NAME) cleanup..."
rm -rf $(BUILD_DIR) rm -rf $(BUILD_DIR)

View File

@@ -57,5 +57,6 @@ $(ADC_FILES): %.html: %.txt $(BASE)/Makefile.doc $(ADC_DEPS)
version.html: ../../NEWS $(BASE)/Makefile.doc $(ADC_DEPS) version.html: ../../NEWS $(BASE)/Makefile.doc $(ADC_DEPS)
@echo "DOC locale/$(LOCALE)/$@" @echo "DOC locale/$(LOCALE)/$@"
# NOTE: asciidoc doesn't source the conf file implicitly when processing stdin # NOTE: asciidoc doesn't source the conf file implicitly when processing stdin
sed -e '1i\HEADER' -e '/^[0-9]/d' -e '/^ \+\* version /s/.*version \+\([0-9.]\+\).*/section:Version{nbsp}\1[version-\1]\ sed -e '1i\
HEADER' -e '/^[0-9]/d' -e '/^ \+\* version /s/.*version \+\([0-9.]\+\).*/section:Version{nbsp}\1[version-\1]\
/' ../../NEWS | ${ASCIIDOC} -f asciidoc.conf -a doctitle=version.html -o version.html - /' ../../NEWS | ${ASCIIDOC} -f asciidoc.conf -a doctitle=version.html -o version.html -

View File

@@ -658,7 +658,11 @@ CompletionContext.prototype = {
this.tabPressed = false; this.tabPressed = false;
this.title = ["Completions"]; this.title = ["Completions"];
this.updateAsync = false; this.updateAsync = false;
this.waitingForTab = false; try
{
this.waitingForTab = false;
}
catch (e) {}
this.cancelAll(); this.cancelAll();
@@ -677,7 +681,11 @@ CompletionContext.prototype = {
for each (let context in this.contexts) for each (let context in this.contexts)
{ {
context.hasItems = false; context.hasItems = false;
context.incomplete = false; try
{
context.incomplete = false;
}
catch (e) {}
} }
}, },
@@ -685,8 +693,9 @@ CompletionContext.prototype = {
* Wait for all subcontexts to complete. * Wait for all subcontexts to complete.
* *
* @param {boolean} interruptible When true, the call may be interrupted * @param {boolean} interruptible When true, the call may be interrupted
* via <C-c>. In this case, "Interrupted" may be thrown. * via <C-c>, in which case, "Interrupted" may be thrown.
* @param {number} timeout The maximum time, in milliseconds, to wait. * @param {number} timeout The maximum time, in milliseconds, to wait.
* If 0 or null, wait indefinately.
*/ */
wait: function wait(interruptable, timeout) wait: function wait(interruptable, timeout)
{ {

View File

@@ -607,8 +607,12 @@ function Editor() //{{{
unselectText: function () unselectText: function ()
{ {
let elem = window.document.commandDispatcher.focusedElement; let elem = window.document.commandDispatcher.focusedElement;
if (elem && elem.selectionEnd) // A error occurs if the element has been removed when "elem.selectionStart" is executed.
elem.selectionEnd = elem.selectionStart; try {
if (elem && elem.selectionEnd)
elem.selectionEnd = elem.selectionStart;
}
catch (e) {}
}, },
selectedText: function () selectedText: function ()
@@ -619,12 +623,23 @@ function Editor() //{{{
pasteClipboard: function () pasteClipboard: function ()
{ {
if (liberator.has("Win32"))
{
this.executeCommand("cmd_paste");
return;
}
// FIXME: #93 (<s-insert> in the bottom of a long textarea bounces up)
let elem = window.document.commandDispatcher.focusedElement; let elem = window.document.commandDispatcher.focusedElement;
if (elem.setSelectionRange && util.readFromClipboard()) if (elem.setSelectionRange && util.readFromClipboard())
// readFromClipboard would return 'undefined' if not checked // readFromClipboard would return 'undefined' if not checked
// dunno about .setSelectionRange // dunno about .setSelectionRange
{ {
// This is a hacky fix - but it works.
let curTop = elem.scrollTop;
let curLeft = elem.scrollLeft;
let rangeStart = elem.selectionStart; // caret position let rangeStart = elem.selectionStart; // caret position
let rangeEnd = elem.selectionEnd; let rangeEnd = elem.selectionEnd;
let tempStr1 = elem.value.substring(0, rangeStart); let tempStr1 = elem.value.substring(0, rangeStart);
@@ -633,6 +648,9 @@ function Editor() //{{{
elem.value = tempStr1 + tempStr2 + tempStr3; elem.value = tempStr1 + tempStr2 + tempStr3;
elem.selectionStart = rangeStart + tempStr2.length; elem.selectionStart = rangeStart + tempStr2.length;
elem.selectionEnd = elem.selectionStart; elem.selectionEnd = elem.selectionStart;
elem.scrollTop = curTop;
elem.scrollLeft = curLeft;
} }
}, },

View File

@@ -639,7 +639,7 @@ function Events() //{{{
{ {
for (let [,dir] in Iterator(dirs)) for (let [,dir] in Iterator(dirs))
{ {
liberator.echomsg('Searching for "macros/*" in ' + dir.path.quote(), 2); liberator.echomsg('Searching for "macros/*" in "' + dir.path + '"', 2);
liberator.log("Sourcing macros directory: " + dir.path + "...", 3); liberator.log("Sourcing macros directory: " + dir.path + "...", 3);
@@ -932,6 +932,8 @@ function Events() //{{{
{ {
if (!ctrl && !alt && !shift && !meta) if (!ctrl && !alt && !shift && !meta)
return false; // an invalid key like <a> return false; // an invalid key like <a>
else if (shift)
keyname = keyname.toUpperCase();
charCode = keyname.charCodeAt(0); charCode = keyname.charCodeAt(0);
} }
else if (keyname.toLowerCase() == "space") else if (keyname.toLowerCase() == "space")
@@ -1388,8 +1390,11 @@ function Events() //{{{
if (key == "<C-c>" && !event.isMacro) if (key == "<C-c>" && !event.isMacro)
{ {
events.feedingKeys = false; events.feedingKeys = false;
if (lastMacro) if (modes.isReplaying)
{
modes.isReplaying = false;
setTimeout(function () { liberator.echomsg("Canceled playback of macro '" + lastMacro + "'"); }, 100); setTimeout(function () { liberator.echomsg("Canceled playback of macro '" + lastMacro + "'"); }, 100);
}
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
return true; return true;
@@ -1709,7 +1714,7 @@ function Events() //{{{
{ {
setTimeout(statusline.updateUrl, 100); setTimeout(statusline.updateUrl, 100);
}, },
setOverLink : function (link, b) setOverLink: function (link, b)
{ {
let ssli = options["showstatuslinks"]; let ssli = options["showstatuslinks"];
if (link && ssli) if (link && ssli)
@@ -1773,11 +1778,12 @@ function Events() //{{{
window.XULBrowserWindow = self.progressListener; window.XULBrowserWindow = self.progressListener;
window.QueryInterface(Ci.nsIInterfaceRequestor) window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation) .getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem).treeOwner .QueryInterface(Ci.nsIDocShellTreeItem)
.QueryInterface(Ci.nsIInterfaceRequestor) .treeOwner
.getInterface(Ci.nsIXULWindow) .QueryInterface(Ci.nsIInterfaceRequestor)
.XULBrowserWindow = window.XULBrowserWindow; .getInterface(Ci.nsIXULWindow)
.XULBrowserWindow = self.progressListener;
try try
{ {
getBrowser().addProgressListener(self.progressListener, Ci.nsIWebProgress.NOTIFY_ALL); getBrowser().addProgressListener(self.progressListener, Ci.nsIWebProgress.NOTIFY_ALL);

View File

@@ -165,8 +165,76 @@ function Hints() //{{{
text = elem.textContent.toLowerCase(); text = elem.textContent.toLowerCase();
span = baseNodeAbsolute.cloneNode(true); span = baseNodeAbsolute.cloneNode(true);
span.style.left = Math.max((rect.left + scrollX), scrollX) + "px";
span.style.top = Math.max((rect.top + scrollY), scrollY) + "px"; let leftpos = Math.max((rect.left + scrollX), scrollX);
let toppos = Math.max((rect.top + scrollY), scrollY);
if (tagname == "area")
{
// TODO: Maybe put the following into a seperate function
try
{
// Need to add the offset to the area element.
// Always try to find the top-left point, as per vimperator default.
let shape = elem.getAttribute("shape").toLowerCase();
let coordstr = elem.getAttribute("coords");
// Technically it should be only commas, but hey
coordstr = coordstr.replace(/\s+[;,]\s+/g, ",").replace(/\s+/g, ",");
let coords = coordstr.split(",").map(Number);
if ((shape == "rect" || shape == "rectangle") && coords.length == 4)
{
leftpos += coords[0];
toppos += coords[1];
}
else if (shape == "circle" && coords.length == 3)
{
leftpos += coords[0] - coords[2] / Math.sqrt(2);
toppos += coords[1] - coords[2] / Math.sqrt(2);
}
else if ((shape == "poly" || shape == "polygon") && coords.length % 2 == 0)
{
let leftbound = Infinity;
let topbound = Infinity;
// First find the top-left corner of the bounding rectangle (offset from image topleft can be noticably suboptimal)
for (let i = 0; i < coords.length; i += 2)
{
leftbound = Math.min(coords[i], leftbound);
topbound = Math.min(coords[i+1], topbound);
}
let curtop = null;
let curleft = null;
let curdist = Infinity;
// Then find the closest vertex. (we could generalise to nearest point on an edge, but I doubt there is a need)
for (let i = 0; i < coords.length; i += 2)
{
let leftoffset = coords[i] - leftbound;
let topoffset = coords[i+1] - topbound;
let dist = Math.sqrt(leftoffset * leftoffset + topoffset * topoffset);
if (dist < curdist)
{
curdist = dist;
curleft = coords[i];
curtop = coords[i+1];
}
}
// If we found a satisfactory offset, let's use it.
if (curdist < Infinity)
{
leftpos += curleft;
toppos += curtop;
}
}
}
catch (e) {} //badly formed document, or shape == "default" in which case we don't move the hint
}
span.style.left = leftpos + "px";
span.style.top = toppos + "px";
fragment.appendChild(span); fragment.appendChild(span);
pageHints.push([elem, text, span, null, elem.style.backgroundColor, elem.style.color]); pageHints.push([elem, text, span, null, elem.style.backgroundColor, elem.style.color]);

View File

@@ -250,7 +250,7 @@ function IO() //{{{
if (!found) if (!found)
{ {
liberator.echoerr("E344: Can't find directory " + arg.quote() + " in cdpath\n" liberator.echoerr("E344: Can't find directory \"" + arg + "\" in cdpath\n"
+ "E472: Command failed"); + "E472: Command failed");
} }
} }
@@ -283,7 +283,7 @@ function IO() //{{{
if (file.exists() && !args.bang) if (file.exists() && !args.bang)
{ {
liberator.echoerr("E189: " + filename.quote() + " exists (add ! to override)"); liberator.echoerr("E189: \"" + filename + "\" exists (add ! to override)");
return; return;
} }
@@ -302,7 +302,7 @@ function IO() //{{{
} }
catch (e) catch (e)
{ {
liberator.echoerr("E190: Cannot open " + filename.quote() + " for writing"); liberator.echoerr("E190: Cannot open \"" + filename + "\" for writing");
liberator.log("Could not write to " + file.path + ": " + e.message); // XXX liberator.log("Could not write to " + file.path + ": " + e.message); // XXX
} }
}, },
@@ -524,7 +524,7 @@ function IO() //{{{
if (!dir.exists() || !dir.isDirectory()) if (!dir.exists() || !dir.isDirectory())
{ {
liberator.echoerr("E344: Can't find directory " + dir.path.quote() + " in path"); liberator.echoerr("E344: Can't find directory \"" + dir.path + "\" in path");
return null; return null;
} }
@@ -555,6 +555,7 @@ function IO() //{{{
* *
* @param {string} dir The directory to search. * @param {string} dir The directory to search.
* @default $HOME. * @default $HOME.
* @returns {nsIFile} The RC file or null if none is found.
*/ */
getRCFile: function (dir) getRCFile: function (dir)
{ {
@@ -842,7 +843,7 @@ lookup:
let found = false; let found = false;
// FIXME: should use original arg string // FIXME: should use original arg string
liberator.echomsg("Searching for " + paths.join(" ").quote() + " in " + options["runtimepath"].quote(), 2); liberator.echomsg("Searching for \"" + paths.join(" ") + "\" in \"" + options["runtimepath"] + "\"", 2);
outer: outer:
for (let [,dir] in Iterator(dirs)) for (let [,dir] in Iterator(dirs))
@@ -851,7 +852,7 @@ lookup:
{ {
let file = joinPaths(dir, path); let file = joinPaths(dir, path);
liberator.echomsg("Searching for " + file.path.quote(), 3); liberator.echomsg("Searching for \"" + file.path + "\"", 3);
if (file.exists() && file.isFile() && file.isReadable()) if (file.exists() && file.isFile() && file.isReadable())
{ {
@@ -865,7 +866,7 @@ lookup:
} }
if (!found) if (!found)
liberator.echomsg("not found in 'runtimepath': " + paths.join(" ").quote(), 1); // FIXME: should use original arg string liberator.echomsg("not found in 'runtimepath': \"" + paths.join(" ") + "\"", 1); // FIXME: should use original arg string
return found; return found;
}, },
@@ -892,9 +893,9 @@ lookup:
if (!silent) if (!silent)
{ {
if (file.exists() && file.isDirectory()) if (file.exists() && file.isDirectory())
liberator.echomsg("Cannot source a directory: " + filename.quote(), 0); liberator.echomsg("Cannot source a directory: \"" + filename + "\"", 0);
else else
liberator.echomsg("could not source: " + filename.quote(), 1); liberator.echomsg("could not source: \"" + filename + "\"", 1);
liberator.echoerr("E484: Can't open file " + filename); liberator.echoerr("E484: Can't open file " + filename);
} }
@@ -902,7 +903,7 @@ lookup:
return; return;
} }
liberator.echomsg("sourcing " + filename.quote(), 2); liberator.echomsg("sourcing \"" + filename + "\"", 2);
let str = self.readFile(file); let str = self.readFile(file);
let uri = services.get("io").newFileURI(file); let uri = services.get("io").newFileURI(file);
@@ -1012,7 +1013,7 @@ lookup:
if (scriptNames.indexOf(file.path) == -1) if (scriptNames.indexOf(file.path) == -1)
scriptNames.push(file.path); scriptNames.push(file.path);
liberator.echomsg("finished sourcing " + filename.quote(), 2); liberator.echomsg("finished sourcing \"" + filename + "\"", 2);
liberator.log("Sourced: " + filename, 3); liberator.log("Sourced: " + filename, 3);
} }

View File

@@ -268,7 +268,7 @@ const liberator = (function () //{{{
for (let [,dialog] in Iterator(dialogs)) for (let [,dialog] in Iterator(dialogs))
{ {
if (arg == dialog[0]) if (util.compareIgnoreCase(arg, dialog[0]) == 0)
{ {
dialog[2](); dialog[2]();
return; return;
@@ -285,7 +285,11 @@ const liberator = (function () //{{{
{ {
argCount: "1", argCount: "1",
bang: true, bang: true,
completer: function (context, args) completion.dialog(context) completer: function (context)
{
context.ignoreCase = true;
return completion.dialog(context);
}
}); });
commands.add(["em[enu]"], commands.add(["em[enu]"],
@@ -1029,11 +1033,11 @@ const liberator = (function () //{{{
return; return;
} }
liberator.echomsg('Searching for "plugin/**/*.{js,vimp}" in ' liberator.echomsg('Searching for "plugin/**/*.{js,vimp}" in "'
+ [dir.path.replace(/.plugin$/, "") for each (dir in dirs)].join(",").quote(), 2); + [dir.path.replace(/.plugin$/, "") for each (dir in dirs)].join(",") + '"', 2);
dirs.forEach(function (dir) { dirs.forEach(function (dir) {
liberator.echomsg("Searching for " + (dir.path + "/**/*.{js,vimp}").quote(), 3); liberator.echomsg("Searching for \"" + (dir.path + "/**/*.{js,vimp}") + "\"", 3);
sourceDirectory(dir); sourceDirectory(dir);
}); });
}, },
@@ -1291,12 +1295,12 @@ const liberator = (function () //{{{
setTimeout(function () { setTimeout(function () {
let init = services.get("environment").get(config.name.toUpperCase() + "_INIT"); let init = services.get("environment").get(config.name.toUpperCase() + "_INIT");
let rcFile = io.getRCFile("~");
if (init) if (init)
liberator.execute(init); liberator.execute(init);
else else
{ {
let rcFile = io.getRCFile("~");
if (rcFile) if (rcFile)
io.source(rcFile.path, true); io.source(rcFile.path, true);
else else
@@ -1306,7 +1310,7 @@ const liberator = (function () //{{{
if (options["exrc"]) if (options["exrc"])
{ {
let localRCFile = io.getRCFile(io.getCurrentDirectory().path); let localRCFile = io.getRCFile(io.getCurrentDirectory().path);
if (localRCFile) if (localRCFile && !localRCFile.equals(rcFile))
io.source(localRCFile.path, true); io.source(localRCFile.path, true);
} }
@@ -1421,16 +1425,24 @@ window.liberator = liberator;
// FIXME: Ugly, etc. // FIXME: Ugly, etc.
window.addEventListener("liberatorHelpLink", function (event) { window.addEventListener("liberatorHelpLink", function (event) {
let elem = event.target; let elem = event.target;
if (/^(option|mapping|command)$/.test(elem.className)) if (/^(option|mapping|command)$/.test(elem.className))
var tag = elem.textContent.replace(/\s.*/, ""); var tag = elem.textContent.replace(/\s.*/, "");
if (/^(mapping|command)$/.test(elem.className))
tag = tag.replace(/^\d+/, "");
if (elem.className == "command") if (elem.className == "command")
tag = tag.replace(/\[.*?\]/g, ""); tag = tag.replace(/\[.*?\]/g, "").replace(/!$/, "");
if (tag) if (tag)
var page = liberator.findHelp(tag); var page = liberator.findHelp(tag);
if (page) if (page)
{
elem.href = "chrome://liberator/locale/" + page; elem.href = "chrome://liberator/locale/" + page;
}, if (buffer.URL.replace(/#.*/, "") == elem.href.replace(/#.*/, "")) // XXX
true, true); setTimeout(function () { content.postMessage("fragmentChange", "*"); }, 0);
}
}, true, true);
// called when the chrome is fully loaded and before the main window is shown // called when the chrome is fully loaded and before the main window is shown
window.addEventListener("load", liberator.startup, false); window.addEventListener("load", liberator.startup, false);

View File

@@ -626,6 +626,7 @@ function Tabs() //{{{
completer: function (context) completer: function (context)
{ {
context.anchored = false; context.anchored = false;
context.compare = CompletionContext.Sort.unsorted;
context.keys = { text: function (item) item.state.entries[0].url, description: "title" }; context.keys = { text: function (item) item.state.entries[0].url, description: "title" };
context.completions = tabs.closedTabs; context.completions = tabs.closedTabs;
}, },

View File

@@ -224,6 +224,7 @@ const template = {
return s + <>{str.substr(start)}</>; return s + <>{str.substr(start)}</>;
}, },
// FIXME: why is href="#"?
highlightURL: function highlightURL(str, force) highlightURL: function highlightURL(str, force)
{ {
if (force || /^[a-zA-Z]+:\/\//.test(str)) if (force || /^[a-zA-Z]+:\/\//.test(str))
@@ -263,7 +264,7 @@ const template = {
<td class="indicator">{idx == index ? ">" : ""}</td> <td class="indicator">{idx == index ? ">" : ""}</td>
<td>{Math.abs(idx - index)}</td> <td>{Math.abs(idx - index)}</td>
<td style="width: 250px; max-width: 500px; overflow: hidden;">{val.title}</td> <td style="width: 250px; max-width: 500px; overflow: hidden;">{val.title}</td>
<td><a href="#" highlight="URL jump-list">{val.URI.spec}</a></td> <td><a href={val.URI.spec} highlight="URL jump-list">{val.URI.spec}</a></td>
</tr>) </tr>)
} }
</table>); </table>);

View File

@@ -1210,7 +1210,7 @@ function CommandLine() //{{{
submit: callback, submit: callback,
change: extra.onChange, change: extra.onChange,
complete: extra.completer, complete: extra.completer,
cancel: extra.onCancel, cancel: extra.onCancel
}; };
modes.push(modes.COMMAND_LINE, modes.PROMPT); modes.push(modes.COMMAND_LINE, modes.PROMPT);
@@ -1282,20 +1282,17 @@ function CommandLine() //{{{
} }
else if (event.type == "input") else if (event.type == "input")
{ {
//liberator.dump("input: " + command);
this.resetCompletions(); this.resetCompletions();
liberator.triggerCallback("change", currentExtendedMode, command); liberator.triggerCallback("change", currentExtendedMode, command);
} }
else if (event.type == "keypress") else if (event.type == "keypress")
{ {
let key = events.toString(event);
if (completions) if (completions)
completions.previewClear(); completions.previewClear();
if (!currentExtendedMode) if (!currentExtendedMode)
return true; return true;
let key = events.toString(event);
//liberator.log("command line handling key: " + key + "\n");
// user pressed ENTER to carry out a command // user pressed ENTER to carry out a command
// user pressing ESCAPE is handled in the global onEscape // user pressing ESCAPE is handled in the global onEscape
// FIXME: <Esc> should trigger "cancel" event // FIXME: <Esc> should trigger "cancel" event
@@ -1412,25 +1409,53 @@ function CommandLine() //{{{
let closeWindow = false; let closeWindow = false;
let passEvent = false; let passEvent = false;
function isScrollable() !win.scrollMaxY == 0; let key = events.toString(event);
function atEnd() win.scrollY / win.scrollMaxY >= 1;
if (event.type == "click") // TODO: Wouldn't multiple handlers be cleaner? --djk
if (event.type == "click" && event.target instanceof HTMLAnchorElement)
{ {
if (event.target instanceof HTMLAnchorElement && event.button < 2) function openLink(where)
{ {
event.preventDefault(); event.preventDefault();
let target = event.button == 0 ? liberator.CURRENT_TAB : liberator.NEW_TAB; // FIXME: Why is this needed? --djk
if (event.target.getAttribute("href") == "#") if (event.target.getAttribute("href") == "#")
liberator.open(event.target.textContent, target); liberator.open(event.target.textContent, where);
else else
liberator.open(event.target.href, target); liberator.open(event.target.href, where);
} }
switch (key)
{
case "<LeftMouse>":
// FIXME: the :ls output no longer wraps the buffer URL in an anchor element
if (event.originalTarget.getAttributeNS(NS.uri, "highlight") == "URL buffer-list")
{
event.preventDefault();
tabs.select(parseInt(event.originalTarget.parentNode.parentNode.firstChild.textContent, 10) - 1);
}
else
{
openLink(liberator.CURRENT_TAB);
}
break;
case "<MiddleMouse>":
case "<C-LeftMouse>":
case "<C-M-LeftMouse>":
openLink(liberator.NEW_BACKGROUND_TAB);
break;
case "<S-MiddleMouse>":
case "<C-S-LeftMouse>":
case "<C-M-S-LeftMouse>":
openLink(liberator.NEW_TAB);
break;
case "<S-LeftMouse>":
openLink(liberator.NEW_WINDOW);
break;
}
return; return;
} }
let key = events.toString(event);
if (startHints) if (startHints)
{ {
statusline.updateInputBuffer(""); statusline.updateInputBuffer("");
@@ -1439,6 +1464,9 @@ function CommandLine() //{{{
return; return;
} }
function isScrollable() !win.scrollMaxY == 0;
function atEnd() win.scrollY / win.scrollMaxY >= 1;
switch (key) switch (key)
{ {
case "<Esc>": case "<Esc>":
@@ -1488,34 +1516,6 @@ function CommandLine() //{{{
break; break;
// TODO: <LeftMouse> on the prompt line should scroll one page // TODO: <LeftMouse> on the prompt line should scroll one page
case "<LeftMouse>":
if (event.originalTarget.getAttributeNS(NS.uri, "highlight") == "URL buffer-list")
{
tabs.select(parseInt(event.originalTarget.parentNode.parentNode.firstChild.textContent, 10) - 1);
closeWindow = true;
break;
}
else if (event.originalTarget.localName.toLowerCase() == "a")
{
liberator.open(event.originalTarget.textContent);
break;
}
case "<A-LeftMouse>": // for those not owning a 3-button mouse
case "<MiddleMouse>":
if (event.originalTarget.localName.toLowerCase() == "a")
{
let where = /\btabopen\b/.test(options["activate"]) ?
liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB;
liberator.open(event.originalTarget.textContent, where);
}
break;
// let Firefox handle those to select table cells or show a context menu
case "<C-LeftMouse>":
case "<RightMouse>":
case "<C-S-LeftMouse>":
break;
// page down // page down
case "f": case "f":
if (options["more"] && isScrollable()) if (options["more"] && isScrollable())
@@ -1606,7 +1606,7 @@ function CommandLine() //{{{
if (passEvent) if (passEvent)
events.onKeyPress(event); events.onKeyPress(event);
} }
else // set update the prompt string else
{ {
commandline.updateMorePrompt(showMorePrompt, showMoreHelpPrompt); commandline.updateMorePrompt(showMorePrompt, showMoreHelpPrompt);
} }
@@ -1710,7 +1710,7 @@ function ItemList(id) //{{{
if (!iframe) if (!iframe)
{ {
liberator.log("No iframe with id: " + id + " found, strange things may happen!"); // "The truth is out there..." -- djk liberator.log("No iframe with id: " + id + " found, strange things may happen!"); // "The truth is out there..." -- djk
return; return; // XXX
} }
function dom(xml, map) util.xmlToDom(xml, doc, map); function dom(xml, map) util.xmlToDom(xml, doc, map);

View File

@@ -577,7 +577,7 @@ const util = { //{{{
*/ */
readFromClipboard: function readFromClipboard() readFromClipboard: function readFromClipboard()
{ {
let url; let str;
try try
{ {
@@ -599,12 +599,12 @@ const util = { //{{{
if (data) if (data)
{ {
data = data.value.QueryInterface(Ci.nsISupportsString); data = data.value.QueryInterface(Ci.nsISupportsString);
url = data.data.substring(0, dataLen.value / 2); str = data.data.substring(0, dataLen.value / 2);
} }
} }
catch (e) {} catch (e) {}
return url; return str;
}, },
/** /**

View File

@@ -11,6 +11,7 @@ Developers:
* anekos <anekos@snca.net> * anekos <anekos@snca.net>
* teramako <teramako@gmail.com> * teramako <teramako@gmail.com>
* janus_wel <janus.wel.3@gmail.com> * janus_wel <janus.wel.3@gmail.com>
* Conrad Irwin
Inactive/former developers: Inactive/former developers:
* Viktor Kojouharov (Виктор Кожухаров) * Viktor Kojouharov (Виктор Кожухаров)

View File

@@ -1,7 +1,13 @@
Contiuous donations: Continuous donations:
* Daniel Bainton (web hosting) * Daniel Bainton (web hosting)
2009: 2009:
* Gavin Sinclair
* Stephen Borchert
* Convolution
* Brian Hall
* Daniel Hahler
* Per-Henrik Lundblom
* David C Foor * David C Foor
* Oliver Schaefer * Oliver Schaefer
* Paul Moss * Paul Moss

View File

@@ -1,6 +1,6 @@
#### configuration #### configuration
VERSION = 2.0b2pre VERSION = 2.0b4pre
NAME = vimperator NAME = vimperator
include ../common/Makefile.common include ../common/Makefile.common

View File

@@ -81,6 +81,7 @@
* :qa! and :q! quit forcefully, as in vim * :qa! and :q! quit forcefully, as in vim
* stop macro playback on <C-c> * stop macro playback on <C-c>
* :bmark now updates a bookmark, if possible. :bmark! adds a new one * :bmark now updates a bookmark, if possible. :bmark! adds a new one
* :dialog and :sidebar arguments are now case-insensitive
* many bug fixes * many bug fixes
2008-08-16: 2008-08-16:

View File

@@ -17,15 +17,12 @@ BUGS:
- insert abbreviations broken on <space> - insert abbreviations broken on <space>
- :sidebar improvements (:sidebar! Downloads while downloads is open should refocus the sidebar) - :sidebar improvements (:sidebar! Downloads while downloads is open should refocus the sidebar)
- ;s saves the page rather than the image - ;s saves the page rather than the image
- http://cgiirc.blitzed.org?chan=%23debug is unusable after login in
- "g<" fails without a trailing escape because both "g<" and "g<C-g>" - "g<" fails without a trailing escape because both "g<" and "g<C-g>"
are mapped. Vimp should recognize "<C-g>" as an atom that should not are mapped. Vimp should recognize "<C-g>" as an atom that should not
be matched literally. In fact, typing "g<C-g>" out literally is be matched literally. In fact, typing "g<C-g>" out literally is
equivalent to typing "g" and then <C-g>. equivalent to typing "g" and then <C-g>.
(recent CVS regressions): (recent CVS regressions):
- :set noflashblock seems broken (= :set fb? afterwards says "fb"), let's see if that's a
plugin or a vimp issue.
- visual caret mode is broken, requires a manual page focus first anyway or - visual caret mode is broken, requires a manual page focus first anyway or
else it chucks, I haven't investigated --djk else it chucks, I haven't investigated --djk
- messages is still broken in several ways - needs testing. - messages is still broken in several ways - needs testing.
@@ -33,16 +30,13 @@ BUGS:
=> it often overwrites the open command line while editing etc. => it often overwrites the open command line while editing etc.
- <tags> and <keyword> autocmd 'keywords' are not available when adding a - <tags> and <keyword> autocmd 'keywords' are not available when adding a
bookmark - they're being set after the observer triggers the autocmd event. bookmark - they're being set after the observer triggers the autocmd event.
- MOW rendering is broken for multiple commands when open E.g. :ls | ls - MOW rendering is broken for multiple commands when open (E.g. :ls | ls) This
- completion height is broken, try :a<tab>....<tab>, when it wraps it's totally off. appears to be the result of using the Message class when appending multiline
and even if it is not totally off, i had it jump by one pixel when wrapping around. output to an open MOW.
If that's unfixable, i propose reverting the new completion height stuff.
- Windows paths have escaped backslashes in messages - presumably due to
String#quote change.
- :messages is _very_ slow for message history of several thousand lines -> - :messages is _very_ slow for message history of several thousand lines ->
Unresponsive Script: util.js:79 (sometimes xmlToDom() and elsewhere) Unresponsive Script: util.js:79 (sometimes xmlToDom() and elsewhere)
- :hardcopy! seems to be broken for me - The MOW shouldn't close when executing hints and ;F isn't working.
- MOW hinting is broken, perhaps this should be properly disabled for 2.0 - URLs in :ls output are no longer hyperlinks
FEATURES: FEATURES:
9 finish :help TODOs 9 finish :help TODOs

View File

@@ -737,6 +737,7 @@ function History() //{{{
context.anchored = false; context.anchored = false;
context.completions = [sh.getEntryAtIndex(i, false) for (i in util.range(sh.index, 0, -1))]; context.completions = [sh.getEntryAtIndex(i, false) for (i in util.range(sh.index, 0, -1))];
context.keys = { text: function (item) item.URI.spec, description: "title" }; context.keys = { text: function (item) item.URI.spec, description: "title" };
context.compare = CompletionContext.Sort.unsorted;
}, },
count: true, count: true,
literal: 0 literal: 0
@@ -783,6 +784,7 @@ function History() //{{{
context.anchored = false; context.anchored = false;
context.completions = [sh.getEntryAtIndex(i, false) for (i in util.range(sh.index + 1, sh.count))]; context.completions = [sh.getEntryAtIndex(i, false) for (i in util.range(sh.index + 1, sh.count))];
context.keys = { text: function (item) item.URI.spec, description: "title" }; context.keys = { text: function (item) item.URI.spec, description: "title" };
context.compare = CompletionContext.Sort.unsorted;
}, },
count: true, count: true,
literal: 0 literal: 0

View File

@@ -372,9 +372,10 @@ const config = { //{{{
function (args) function (args)
{ {
let arg = args.literalArg; let arg = args.literalArg;
function compare(a, b) util.compareIgnoreCase(a, b) == 0
// focus if the requested sidebar is already open // focus if the requested sidebar is already open
if (document.getElementById("sidebar-title").value == arg) if (compare(document.getElementById("sidebar-title").value, arg))
{ {
document.getElementById("sidebar-box").focus(); document.getElementById("sidebar-box").focus();
return; return;
@@ -384,7 +385,7 @@ const config = { //{{{
for (let [,panel] in Iterator(menu.childNodes)) for (let [,panel] in Iterator(menu.childNodes))
{ {
if (panel.label == arg) if (compare(panel.label, arg))
{ {
panel.doCommand(); panel.doCommand();
return; return;
@@ -395,7 +396,11 @@ const config = { //{{{
}, },
{ {
argCount: "1", argCount: "1",
completer: function (context) completion.sidebar(context), completer: function (context)
{
context.ignoreCase = true;
return completion.sidebar(context);
},
literal: 0 literal: 0
}); });

View File

@@ -233,9 +233,12 @@ zoom range (default: 30%--300%). The zoom levels are used by
default zoom levels are 30%, 50%, 67%, 80%, 90%, 100%, 110%, 120%, 133%, 150%, default zoom levels are 30%, 50%, 67%, 80%, 90%, 100%, 110%, 120%, 133%, 150%,
170%, 200%, 240%, 300%. 170%, 200%, 240%, 300%.
The available zoom range can be changed by setting the \'zoom.minPercent' and The available zoom range can be changed by setting the
\'zoom.maxPercent' Firefox preferences. The zoom levels can be changed using \'http://kb.mozillazine.org/Zoom.minPercent[zoom.minPercent]' and
the \'toolkit.ZoomManager.zoomLevels' preference. \'http://kb.mozillazine.org/Zoom.minPercent[zoom.maxPercent]' Firefox
preferences. The zoom levels can be changed using the
\'http://kb.mozillazine.org/Toolkit.zoomManager.zoomValues[toolkit.ZoomManager.zoomLevels]'
preference.
Note: \'toolkit.ZoomManager.zoomLevels' is specified as a list of values Note: \'toolkit.ZoomManager.zoomLevels' is specified as a list of values
between 0 and 1, not as a percentage. between 0 and 1, not as a percentage.

View File

@@ -2,8 +2,8 @@ HEADER
|Command-line-mode| |Command-line| |mode-cmdline| + |Command-line-mode| |Command-line| |mode-cmdline| +
Command-line mode is used to enter Ex commands (":") and text search patterns Command-line mode is used to enter Ex commands ("[m]:[m]") and text search patterns
("/" and "?"). ("[m]/[m]" and "[m]?[m]").
|:| + |:| +
||:|| ||:||
@@ -25,7 +25,7 @@ ________________________________________________________________________________
|c_<C-]>| + |c_<C-]>| +
||<C-]>|| ||<C-]>||
________________________________________________________________________________ ________________________________________________________________________________
Expand a Command-line abbreviation. Expand a command-line abbreviation.
________________________________________________________________________________ ________________________________________________________________________________

View File

@@ -6,7 +6,7 @@ function checkFragment()
return; return;
let elem = document.evaluate('//*[@class="tag" and text()="' + frag + '"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0); let elem = document.evaluate('//*[@class="tag" and text()="' + frag + '"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
if (elem) if (elem)
window.content.scrollTo(0, elem.getBoundingClientRect().top - 10); // 10px context window.content.scrollTo(0, window.content.scrollY + elem.getBoundingClientRect().top - 10); // 10px context
} }
document.addEventListener("load", checkFragment, true); document.addEventListener("load", checkFragment, true);

View File

@@ -20,13 +20,17 @@ are hidden. +
If you really need them, type: [c]:set guioptions+=mT[c] to get them back. + If you really need them, type: [c]:set guioptions+=mT[c] to get them back. +
If you don't like Vimperator at all, you can uninstall it by typing If you don't like Vimperator at all, you can uninstall it by typing
[c]:addons[c] and remove/disable it. + [c]:addons[c] and remove/disable it. +
If you like it but can't remember the shortcuts, then press [m]F1[m] or If you like it but can't remember the shortcuts, then press [m]<F1>[m] or
[c]:help[c] to get this help window back. [c]:help[c] to get this help window back.
|author| |donation| + |author| |donation| +
Vimperator was written by mailto:stubenschrott@gmx.net[Martin Stubenschrott]. Vimperator was initially written by mailto:stubenschrott@gmx.net[Martin
If you appreciate my work on Vimperator and want to encourage me working on it Stubenschrott] but has found many other
more, you can either send me greetings, patches or make a donation: http://vimperator.org/trac/wiki/Vimperator/Authors[contributors] in the
meanwhile. If you appreciate the work on Vimperator and want to encourage us
working on it more, you can send us greetings, patches, or donations (thanks a
lot to http://vimperator.org/trac/wiki/Vimperator/Donors[these people] who
already did):
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<!-- the PAYPAL code --> <!-- the PAYPAL code -->
@@ -37,9 +41,11 @@ more, you can either send me greetings, patches or make a donation:
</fieldset></form> </fieldset></form>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Of course as a believer in free open source software, only make a donation If you prefer getting some nice products for your money, you can also support
if you really like Vimperator and the money doesn't hurt -- otherwise just use us by buying some cool http://www.zazzle.com/maxauthority*[merchandise] like
it, recommend it and like it :) t-shirts or mugs. Of course, as we believe in free, open source software, only
support us financially if you really like Vimperator and the money doesn't hurt
- otherwise just use it, recommend it, and like it :)
section:Help{nbsp}topics[overview] section:Help{nbsp}topics[overview]
@@ -94,7 +100,7 @@ section:Features[features]
with support for Firefox keyword bookmarks and search engines with support for Firefox keyword bookmarks and search engines
* Count supported for many commands ([m]3<C-o>[m] will go back 3 pages) * Count supported for many commands ([m]3<C-o>[m] will go back 3 pages)
* Beep on errors * Beep on errors
* Marks support ([m]ma[m] to set mark a on a web page, [m]'a[m] to go there) * Marks support ([m]m[m][a]a[a] to set mark a on a web page, [m]'[m][a]a[a] to go there)
* QuickMarks support (quickly go to previously marked web pages with [m]go[m][a]\\{a-zA-Z0-9\\}[a]) * QuickMarks support (quickly go to previously marked web pages with [m]go[m][a]\\{a-zA-Z0-9\\}[a])
* [c]:map[c] and [c]:command[c] support (and feedkeys() for script writers) * [c]:map[c] and [c]:command[c] support (and feedkeys() for script writers)
* [c]:time[c] support for profiling * [c]:time[c] support for profiling
@@ -106,10 +112,13 @@ section:Features[features]
section:Contact[contact] section:Contact[contact]
Please send comments/bug reports/patches to the mailing list, where I will Please send comments/bug reports/patches to the mailing list, where we will
properly answer any questions. You can also join the #vimperator IRC channel properly answer any questions. You can also join the
on irc.freenode.net or check the Wiki for frequently asked questions. Make +++<a href="irc://irc.freenode.net/vimperator">#vimperator</a>+++ IRC channel
sure, you have read the TODO file first, as I am aware of many things which on http://www.freenode.net/[Freenode] or check the
can be improved when I find time for it or get patches. http://vimperator.org/trac/wiki/Vimperator/Wiki[Wiki] for
http://vimperator.org/trac/wiki/Vimperator/FAQ[frequently asked questions
(FAQ)]. Make sure, you have read the TODO file first, as we are aware of many
things which can be improved when we find time for it or receive patches.
// vim: set filetype=asciidoc: // vim: set filetype=asciidoc:

View File

@@ -8,7 +8,7 @@ The key mapping commands can be used to either redefine the standard key
bindings or define new ones. A mapping consists of a key, or sequence of keys, bindings or define new ones. A mapping consists of a key, or sequence of keys,
which are translated to a string of characters. Example: which are translated to a string of characters. Example:
:map <F2> :echo new Date().toDateString()<CR> \{nbsp}[c]:map <F2> :echo new Date().toDateString()<CR>[c]
will echo the current date to the command line when [m]<F2>[m] is pressed. will echo the current date to the command line when [m]<F2>[m] is pressed.
@@ -209,7 +209,7 @@ ________________________________________________________________________________
||:ca[bbrev] {lhs}|| + ||:ca[bbrev] {lhs}|| +
||:ca[bbrev]|| ||:ca[bbrev]||
________________________________________________________________________________ ________________________________________________________________________________
Abbreviate a key sequence for Command-line mode. Same as [c]:ab[reviate][c], Abbreviate a key sequence for Command-line mode. Same as [c]:ab[breviate][c],
but for Command-line mode only. but for Command-line mode only.
________________________________________________________________________________ ________________________________________________________________________________
@@ -406,7 +406,7 @@ section:Examples[command-examples]
Add a :Google command to search via google: Add a :Google command to search via google:
:command -nargs=* Google open google <args> \{nbsp}[c]:command -nargs=* Google open google <args>[c]
// TODO: add decent examples // TODO: add decent examples

View File

@@ -189,10 +189,10 @@ they can be changed to a different value in your RC file using
The following preferences are set: The following preferences are set:
* browser.startup.page * http://kb.mozillazine.org/Browser.startup.page[browser.startup.page]
* dom.popup_allowed_events * http://kb.mozillazine.org/Dom.popup_allowed_events[dom.popup_allowed_events]
* accessibility.typeaheadfind.autostart * http://kb.mozillazine.org/Accessibility.typeaheadfind.autostart[accessibility.typeaheadfind.autostart]
* accessibility.typeaheadfind * http://kb.mozillazine.org/Accessibility.typeaheadfind[accessibility.typeaheadfind]
// TODO: others? // TODO: others?
@@ -233,11 +233,15 @@ Items which are completed at the [c]:[tab]open[c] prompt. Available items:
*f* Local files *f* Local files
*l* Firefox location bar entries (bookmarks and history sorted in an intelligent way) *l* Firefox location bar entries (bookmarks and history sorted in an intelligent way)
*b* Bookmarks *b* Bookmarks
*h* History
*S* Suggest engines *S* Suggest engines
------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------
The order is important, so [c]:set complete=bs[c] would list bookmarks first, The order is important, so [c]:set complete=bs[c] would list bookmarks first,
and then any available quick searches. and then any available quick searches.
Warning: Using *b* and *h* can make completion very slow if there are many
items.
____ ____
@@ -262,7 +266,7 @@ ____
||'editor'|| string (default: "gvim -f") ||'editor'|| string (default: "gvim -f")
____ ____
Set the external text editor. Set the external text editor.
Sets the editor to run when [m]<C-i>[m] is pressed in INSERT and TEXTAREA Sets the editor to run when [m]<C-i>[m] is pressed in Insert and TextArea
modes. modes.
Warning: Vimperator will not behave correctly if the editor forks its own Warning: Vimperator will not behave correctly if the editor forks its own
@@ -738,6 +742,9 @@ ____
____ ____
Use visual bell instead of beeping on errors. The visual bell style is Use visual bell instead of beeping on errors. The visual bell style is
controlled by [c]:hi Bell[c]. controlled by [c]:hi Bell[c].
To disable both the audible and visual bells use [c]:set visualbell[c] and
[c]:hi Bell display: none;[c]
____ ____

View File

@@ -7,7 +7,7 @@ Vimperator can repeat a number of commands and record macros.
section:Macros[macros,complex-repeat] section:Macros[macros,complex-repeat]
|q| |q|
||q{0-9a-zA-Z}|| + ||q\\{0-9a-zA-Z}|| +
____________________________________________________________________________ ____________________________________________________________________________
Record a key sequence into a macro. Record a key sequence into a macro.
Available macros are {0-9a-zA-Z} (uppercase to append). Available macros are {0-9a-zA-Z} (uppercase to append).

View File

@@ -105,7 +105,7 @@ ________________________________________________________________________________
Add CSS styles to the browser or to web pages. {filter} is a comma Add CSS styles to the browser or to web pages. {filter} is a comma
separated list of URLs to match. URLs ending with *\** are matched as separated list of URLs to match. URLs ending with *\** are matched as
prefixes, URLs not containing any *:* or */* characters are prefixes, URLs not containing any *:* or */* characters are
matched as domains. If {name} (short option: [c]-n[c]) is provided, any matched as domains. If {name} (short option: *-n*) is provided, any
existing style with the same name is overridden, and the style may later existing style with the same name is overridden, and the style may later
be deleted using {name}. If *-append* (short option: *-a*) is provided be deleted using {name}. If *-append* (short option: *-a*) is provided
along with *-name*, {css} and {filter} are appended to its current along with *-name*, {css} and {filter} are appended to its current
@@ -118,13 +118,12 @@ ________________________________________________________________________________
||:dels[tyle] [-name={name}] [-index={index}] [{filter}] [{css}]|| + ||:dels[tyle] [-name={name}] [-index={index}] [{filter}] [{css}]|| +
________________________________________________________________________________ ________________________________________________________________________________
Delete any matching styles. If {filter} is provided, only matching elements of Delete any matching styles. If {filter} is provided, only matching elements of
the filter are disabled. For instance, a filter [c]mozilla.org[c], given a the filter are disabled. For instance, a filter [a]mozilla.org[a], given a
style for [c]www.google.com,mozilla.org[c], will result in a style for style for [a]www.google.com,mozilla.org[a], will result in a style for
[c]www.google.com[c]. The available options are: [a]www.google.com[a]. The available options are:
* [c]-name[c]: The name provided to [c]:style[c] (short option: * *-name*: The name provided to [c]:style[c] (short option: *-n*)
*-n*) * *-index*: For unnamed styles, the index listed by [c]:style[c]
* [c]-index[c]: For unnamed styles, the index listed by [c]:style[c]
(short option: *-i*) (short option: *-i*)
________________________________________________________________________________ ________________________________________________________________________________

View File

@@ -22,8 +22,8 @@ If you're a veteran Vim user, this may look familiar. It should.
However, in this author's opinion, the best way to get familiar with However, in this author's opinion, the best way to get familiar with
Vimperator is to leave these disabled for now. (The above action can be Vimperator is to leave these disabled for now. (The above action can be
reversed with [c]:set go=<CR>[c]) You can look at the entry for reversed with [c]:set go=<CR>[c]) You can look at the entry for 'guioptions' in
[o]guioptions[o] in help:options[options.html] for more information on this. help:options[options.html] for more information on this.
section:Vimperator's{nbsp}modal{nbsp}interface[modal] section:Vimperator's{nbsp}modal{nbsp}interface[modal]
@@ -36,8 +36,8 @@ When Vimperator starts, it is in Normal mode by default. This is probably where
you will spend the majority of your time. you will spend the majority of your time.
The other core mode of Vimperator, Command-line mode, can be entered from The other core mode of Vimperator, Command-line mode, can be entered from
Normal mode by typing a \':' (colon). You will frequently see Vimperator Normal mode by typing a \'[m]:[m]' (colon). You will frequently see Vimperator
commands start with a \':', indicating that what follows is a command. commands start with a \'[m]:[m]', indicating that what follows is a command.
To return to Normal mode from Command-line mode, type [m]<Esc>[m]. Pressing To return to Normal mode from Command-line mode, type [m]<Esc>[m]. Pressing
[m]<Esc>[m] will also return you to Normal mode from most other modes in [m]<Esc>[m] will also return you to Normal mode from most other modes in
@@ -142,7 +142,7 @@ type uniquely identifies any given link, Vimperator will follow that link
immediately without any further user input. immediately without any further user input.
Whichever way you choose to indicate your target link, once Vimperator has Whichever way you choose to indicate your target link, once Vimperator has
highlighted the link you want, simply hit <Enter> to open it. highlighted the link you want, simply hit [m]<Enter>[m] to open it.
The most common hint mode is called help:QuickHint{nbsp}mode[various.html,f]. The most common hint mode is called help:QuickHint{nbsp}mode[various.html,f].
To activate QuickHint mode, press either [m]f[m] or [m]F[m]. The lower-case To activate QuickHint mode, press either [m]f[m] or [m]F[m]. The lower-case

View File

@@ -1,7 +1,7 @@
// Script to find regressions // Script to find regressions
// //
// It should use as few liberator methods as possible, but fall back to standard mozilla/DOM methods // It should use as few liberator methods as possible, but fall back to standard mozilla/DOM methods
// The reason it, we don't want to find regressions in the regressions script, and it should survive // The reason is, we don't want to find regressions in the regressions script, and it should survive
// massive changes in the internal liberator API, but just test for functionality of // massive changes in the internal liberator API, but just test for functionality of
// user-visible commands/mappings // user-visible commands/mappings
// //
@@ -249,4 +249,4 @@ commands.addUserCommand(["regr[essions]"],
count: true count: true
}); });
// vimperator: set et sts=4 sw=4 : // vim: set et sts=4 sw=4 :