mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-03-04 23:45:47 +01:00
Merge branch 'master' of kmaglione@git.vimperator.org:/git/vimperator/liberator
This commit is contained in:
@@ -2,17 +2,17 @@
|
|||||||
|
|
||||||
#### configuration
|
#### configuration
|
||||||
|
|
||||||
ASCIIDOC = asciidoc
|
ASCIIDOC = asciidoc
|
||||||
AWK = awk
|
AWK = awk
|
||||||
|
|
||||||
LOCALE = $(shell basename `pwd`)
|
LOCALE = $(shell basename `pwd`)
|
||||||
DOCLANG = $(shell basename `pwd` | $(AWK) -F- '{ print ($$1 ~ /^[a-z][a-z]$$/) ? $$1 : "en" }')
|
DOCLANG = $(shell basename `pwd` | $(AWK) -F- '{ print ($$1 ~ /^[a-z][a-z]$$/) ? $$1 : "en" }')
|
||||||
|
|
||||||
SRC_FILES = $(wildcard *.txt)
|
SRC_FILES = $(wildcard *.txt)
|
||||||
FILES = $(SRC_FILES:%.txt=%.html)
|
FILES = $(SRC_FILES:%.txt=%.html)
|
||||||
DEPS = $(wildcard asciidoc.conf lang-$(DOCLANG).conf)
|
DEPS = $(wildcard lang-$(DOCLANG).conf) ${BASE}/asciidoc.conf $(BASE)/Makefile.doc
|
||||||
|
|
||||||
DOC_FILES = $(FILES) version.html
|
DOC_FILES = $(FILES) version.html
|
||||||
|
|
||||||
.SILENT:
|
.SILENT:
|
||||||
|
|
||||||
@@ -50,7 +50,9 @@ check-asciidoc:
|
|||||||
@$(ASCIIDOC) --version | $(AWK) '{ exit $$2 !~ /^8\.4\./ }' || \
|
@$(ASCIIDOC) --version | $(AWK) '{ exit $$2 !~ /^8\.4\./ }' || \
|
||||||
echo >&2 "Warning: asciidoc versions other than 8.4.x are unsupported"
|
echo >&2 "Warning: asciidoc versions other than 8.4.x are unsupported"
|
||||||
|
|
||||||
version.html: ../../NEWS $(BASE)/Makefile.doc $(DEPS)
|
all.html: $(SRC_FILES)
|
||||||
|
|
||||||
|
version.html: ../../NEWS $(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\
|
sed -e '1i\
|
||||||
@@ -60,7 +62,7 @@ heading:Version{nbsp}information[version-information]' \
|
|||||||
/' ../../NEWS | \
|
/' ../../NEWS | \
|
||||||
${ASCIIDOC} -f $(BASE)/asciidoc.conf -a doctitle=version.html -o version.html -
|
${ASCIIDOC} -f $(BASE)/asciidoc.conf -a doctitle=version.html -o version.html -
|
||||||
|
|
||||||
$(FILES): %.html: %.txt $(BASE)/Makefile.doc $(DEPS)
|
$(FILES): %.html: %.txt $(DEPS)
|
||||||
@echo "DOC locale/$(LOCALE)/$@"
|
@echo "DOC locale/$(LOCALE)/$@"
|
||||||
$(ASCIIDOC) -f $(BASE)/asciidoc.conf -a configname=$(NAME) --unsafe -a linkcss -a quirks! -a lang=$(DOCLANG) -a doctitle="$$(basename $@)" -o $@ $<
|
$(ASCIIDOC) -f $(BASE)/asciidoc.conf -a configname=$(NAME) --unsafe -a linkcss -a quirks! -a lang=$(DOCLANG) -a doctitle="$$(basename $@)" -o $@ $<
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -92,9 +92,9 @@ function Bookmarks() //{{{
|
|||||||
this.__defineGetter__("bookmarks", function () this.load());
|
this.__defineGetter__("bookmarks", function () this.load());
|
||||||
|
|
||||||
this.__defineGetter__("keywords",
|
this.__defineGetter__("keywords",
|
||||||
function () [new Keyword(k.keyword, k.title, k.icon, k.url) for ([,k] in Iterator(self.bookmarks)) if (k.keyword)]);
|
function () [new Keyword(k.keyword, k.title, k.icon, k.url) for ([, k] in Iterator(self.bookmarks)) if (k.keyword)]);
|
||||||
|
|
||||||
this.__iterator__ = function () (val for ([,val] in Iterator(self.bookmarks)));
|
this.__iterator__ = function () (val for ([, val] in Iterator(self.bookmarks)));
|
||||||
|
|
||||||
function loadBookmark(node)
|
function loadBookmark(node)
|
||||||
{
|
{
|
||||||
@@ -502,7 +502,7 @@ function Bookmarks() //{{{
|
|||||||
let engine = services.get("browserSearch").getEngineByAlias(name);
|
let engine = services.get("browserSearch").getEngineByAlias(name);
|
||||||
if (!engine)
|
if (!engine)
|
||||||
return;
|
return;
|
||||||
let [,word] = /^\s*(\S+)/.exec(context.filter) || [];
|
let [, word] = /^\s*(\S+)/.exec(context.filter) || [];
|
||||||
if (!kludge && word == name) // FIXME: Check for matching keywords
|
if (!kludge && word == name) // FIXME: Check for matching keywords
|
||||||
return;
|
return;
|
||||||
let ctxt = context.fork(name, 0);
|
let ctxt = context.fork(name, 0);
|
||||||
@@ -534,10 +534,6 @@ function Bookmarks() //{{{
|
|||||||
process: [template.icon, template.bookmarkDescription]
|
process: [template.icon, template.bookmarkDescription]
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// if "bypassCache" is true, it will force a reload of the bookmarks database
|
|
||||||
// on my PC, it takes about 1ms for each bookmark to load, so loading 1000 bookmarks
|
|
||||||
// takes about 1 sec
|
|
||||||
// Huh? --djk
|
|
||||||
// TODO: why is this a filter? --djk
|
// TODO: why is this a filter? --djk
|
||||||
get: function get(filter, tags, maxItems, extra)
|
get: function get(filter, tags, maxItems, extra)
|
||||||
{
|
{
|
||||||
@@ -654,7 +650,7 @@ function Bookmarks() //{{{
|
|||||||
getSearchEngines: function getSearchEngines()
|
getSearchEngines: function getSearchEngines()
|
||||||
{
|
{
|
||||||
let searchEngines = [];
|
let searchEngines = [];
|
||||||
for (let [,engine] in Iterator(services.get("browserSearch").getVisibleEngines({})))
|
for (let [, engine] in Iterator(services.get("browserSearch").getVisibleEngines({})))
|
||||||
{
|
{
|
||||||
let alias = engine.alias;
|
let alias = engine.alias;
|
||||||
if (!alias || !/^[a-z0-9_-]+$/.test(alias))
|
if (!alias || !/^[a-z0-9_-]+$/.test(alias))
|
||||||
@@ -1211,7 +1207,7 @@ function QuickMarks() //{{{
|
|||||||
{
|
{
|
||||||
let pattern = RegExp("[" + filter.replace(/\s+/g, "") + "]");
|
let pattern = RegExp("[" + filter.replace(/\s+/g, "") + "]");
|
||||||
|
|
||||||
for (let [qmark,] in qmarks)
|
for (let [qmark, ] in qmarks)
|
||||||
{
|
{
|
||||||
if (pattern.test(qmark))
|
if (pattern.test(qmark))
|
||||||
qmarks.remove(qmark);
|
qmarks.remove(qmark);
|
||||||
|
|||||||
@@ -774,7 +774,7 @@ function Buffer() //{{{
|
|||||||
|
|
||||||
// put feeds rss into pageFeeds[]
|
// put feeds rss into pageFeeds[]
|
||||||
let nFeed = 0;
|
let nFeed = 0;
|
||||||
for (let [,link] in Iterator(doc.getElementsByTagName("link")))
|
for (let [, link] in Iterator(doc.getElementsByTagName("link")))
|
||||||
{
|
{
|
||||||
if (!link.href)
|
if (!link.href)
|
||||||
return;
|
return;
|
||||||
@@ -1167,7 +1167,7 @@ function Buffer() //{{{
|
|||||||
|
|
||||||
// TODO: this should probably use the default 'hinttags' value. --djk
|
// TODO: this should probably use the default 'hinttags' value. --djk
|
||||||
let res = buffer.evaluateXPath(options["hinttags"], frame.document);
|
let res = buffer.evaluateXPath(options["hinttags"], frame.document);
|
||||||
for (let [,regex] in Iterator(regexes))
|
for (let [, regex] in Iterator(regexes))
|
||||||
{
|
{
|
||||||
for (let i in util.range(res.snapshotLength, 0, -1))
|
for (let i in util.range(res.snapshotLength, 0, -1))
|
||||||
{
|
{
|
||||||
@@ -1667,7 +1667,7 @@ function Marks() //{{{
|
|||||||
if (localmark)
|
if (localmark)
|
||||||
{
|
{
|
||||||
let win = window.content;
|
let win = window.content;
|
||||||
for (let [i,] in Iterator(localmark))
|
for (let [i, ] in Iterator(localmark))
|
||||||
{
|
{
|
||||||
if (localmark[i].location == win.location.href)
|
if (localmark[i].location == win.location.href)
|
||||||
{
|
{
|
||||||
@@ -1697,7 +1697,7 @@ function Marks() //{{{
|
|||||||
function localMarkIter()
|
function localMarkIter()
|
||||||
{
|
{
|
||||||
for (let [mark, value] in localMarks)
|
for (let [mark, value] in localMarks)
|
||||||
for (let [,val] in Iterator(value))
|
for (let [, val] in Iterator(value))
|
||||||
yield [mark, val];
|
yield [mark, val];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1825,7 +1825,7 @@ function Marks() //{{{
|
|||||||
|
|
||||||
// FIXME: Line/Column doesn't make sense with %
|
// FIXME: Line/Column doesn't make sense with %
|
||||||
context.title = ["Mark", "Line Column File"];
|
context.title = ["Mark", "Line Column File"];
|
||||||
context.keys.description = function ([,m]) percent(m.position.y) + "% " + percent(m.position.x) + "% " + m.location;
|
context.keys.description = function ([, m]) percent(m.position.y) + "% " + percent(m.position.x) + "% " + m.location;
|
||||||
context.completions = marks.all;
|
context.completions = marks.all;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1903,17 +1903,17 @@ function Marks() //{{{
|
|||||||
if (special)
|
if (special)
|
||||||
{
|
{
|
||||||
// :delmarks! only deletes a-z marks
|
// :delmarks! only deletes a-z marks
|
||||||
for (let [mark,] in localMarks)
|
for (let [mark, ] in localMarks)
|
||||||
removeLocalMark(mark);
|
removeLocalMark(mark);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (let [mark,] in urlMarks)
|
for (let [mark, ] in urlMarks)
|
||||||
{
|
{
|
||||||
if (filter.indexOf(mark) >= 0)
|
if (filter.indexOf(mark) >= 0)
|
||||||
removeURLMark(mark);
|
removeURLMark(mark);
|
||||||
}
|
}
|
||||||
for (let [mark,] in localMarks)
|
for (let [mark, ] in localMarks)
|
||||||
{
|
{
|
||||||
if (filter.indexOf(mark) >= 0)
|
if (filter.indexOf(mark) >= 0)
|
||||||
removeLocalMark(mark);
|
removeLocalMark(mark);
|
||||||
@@ -1965,7 +1965,7 @@ function Marks() //{{{
|
|||||||
let win = window.content;
|
let win = window.content;
|
||||||
let slice = localMarks.get(mark) || [];
|
let slice = localMarks.get(mark) || [];
|
||||||
|
|
||||||
for (let [,lmark] in Iterator(slice))
|
for (let [, lmark] in Iterator(slice))
|
||||||
{
|
{
|
||||||
if (win.location.href == lmark.location)
|
if (win.location.href == lmark.location)
|
||||||
{
|
{
|
||||||
@@ -2006,7 +2006,7 @@ function Marks() //{{{
|
|||||||
Math.round(mark[1].position.x * 100) + "%",
|
Math.round(mark[1].position.x * 100) + "%",
|
||||||
Math.round(mark[1].position.y * 100) + "%",
|
Math.round(mark[1].position.y * 100) + "%",
|
||||||
mark[1].location]
|
mark[1].location]
|
||||||
for ([,mark] in Iterator(marks))));
|
for ([, mark] in Iterator(marks))));
|
||||||
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ function Command(specs, description, action, extraInfo) //{{{
|
|||||||
let longNames = [];
|
let longNames = [];
|
||||||
let shortNames = [];
|
let shortNames = [];
|
||||||
|
|
||||||
for (let [,spec] in Iterator(specs))
|
for (let [, spec] in Iterator(specs))
|
||||||
{
|
{
|
||||||
let matches = spec.match(/(\w+)\[(\w+)\](\w*)/);
|
let matches = spec.match(/(\w+)\[(\w+)\](\w*)/);
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ Command.prototype = {
|
|||||||
return;
|
return;
|
||||||
args.count = count;
|
args.count = count;
|
||||||
args.bang = bang;
|
args.bang = bang;
|
||||||
self.action.call(self, args, bang, count, modifiers);
|
self.action.call(self, args, modifiers);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.hereDoc)
|
if (this.hereDoc)
|
||||||
@@ -229,7 +229,7 @@ Command.prototype = {
|
|||||||
*/
|
*/
|
||||||
hasName: function (name)
|
hasName: function (name)
|
||||||
{
|
{
|
||||||
for (let [,spec] in Iterator(this.specs))
|
for (let [, spec] in Iterator(this.specs))
|
||||||
{
|
{
|
||||||
let fullName = spec.replace(/\[(\w+)]$/, "$1");
|
let fullName = spec.replace(/\[(\w+)]$/, "$1");
|
||||||
let index = spec.indexOf("[");
|
let index = spec.indexOf("[");
|
||||||
@@ -515,7 +515,7 @@ function Commands() //{{{
|
|||||||
opt += char + quote(val)
|
opt += char + quote(val)
|
||||||
res.push(opt);
|
res.push(opt);
|
||||||
}
|
}
|
||||||
for (let [,arg] in Iterator(args.arguments || []))
|
for (let [, arg] in Iterator(args.arguments || []))
|
||||||
res.push(quote(arg));
|
res.push(quote(arg));
|
||||||
|
|
||||||
let str = args.literalArg;
|
let str = args.literalArg;
|
||||||
@@ -562,6 +562,9 @@ function Commands() //{{{
|
|||||||
// : it might be nice to be able to specify that certain quoting
|
// : it might be nice to be able to specify that certain quoting
|
||||||
// should be disabled E.g. backslash without having to resort to
|
// should be disabled E.g. backslash without having to resort to
|
||||||
// using literal etc.
|
// using literal etc.
|
||||||
|
// : error messages should be configurable or else we can ditch
|
||||||
|
// Vim compatibility but it actually gives useful messages
|
||||||
|
// sometimes rather than just "Invalid arg"
|
||||||
// : I'm not sure documenting the returned object here, and
|
// : I'm not sure documenting the returned object here, and
|
||||||
// elsewhere, as type Args rather than simply Object makes sense,
|
// elsewhere, as type Args rather than simply Object makes sense,
|
||||||
// especially since it is further augmented for use in
|
// especially since it is further augmented for use in
|
||||||
@@ -712,9 +715,9 @@ function Commands() //{{{
|
|||||||
var optname = "";
|
var optname = "";
|
||||||
if (!onlyArgumentsRemaining)
|
if (!onlyArgumentsRemaining)
|
||||||
{
|
{
|
||||||
for (let [,opt] in Iterator(options))
|
for (let [, opt] in Iterator(options))
|
||||||
{
|
{
|
||||||
for (let [,optname] in Iterator(opt[0]))
|
for (let [, optname] in Iterator(opt[0]))
|
||||||
{
|
{
|
||||||
if (sub.indexOf(optname) == 0)
|
if (sub.indexOf(optname) == 0)
|
||||||
{
|
{
|
||||||
@@ -1009,6 +1012,7 @@ function Commands() //{{{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: offer completion.ex?
|
// TODO: offer completion.ex?
|
||||||
|
// : make this config specific
|
||||||
var completeOptionMap = {
|
var completeOptionMap = {
|
||||||
abbreviation: "abbreviation", altstyle: "alternateStyleSheet",
|
abbreviation: "abbreviation", altstyle: "alternateStyleSheet",
|
||||||
bookmark: "bookmark", buffer: "buffer", color: "colorScheme",
|
bookmark: "bookmark", buffer: "buffer", color: "colorScheme",
|
||||||
@@ -1058,7 +1062,7 @@ function Commands() //{{{
|
|||||||
}
|
}
|
||||||
catch (e)
|
catch (e)
|
||||||
{
|
{
|
||||||
// FIXME: should be pushed to the MOW
|
liberator.echo(":" + this.name + " ...");
|
||||||
liberator.echoerr("E117: Unknown function: " + completeOpt);
|
liberator.echoerr("E117: Unknown function: " + completeOpt);
|
||||||
liberator.log(e);
|
liberator.log(e);
|
||||||
return undefined;
|
return undefined;
|
||||||
@@ -1107,7 +1111,7 @@ function Commands() //{{{
|
|||||||
cmd.count ? "0c" : "",
|
cmd.count ? "0c" : "",
|
||||||
completerToString(cmd.completer),
|
completerToString(cmd.completer),
|
||||||
cmd.replacementText || "function () { ... }"]
|
cmd.replacementText || "function () { ... }"]
|
||||||
for ([,cmd] in Iterator(cmds))));
|
for ([, cmd] in Iterator(cmds))));
|
||||||
|
|
||||||
commandline.echo(str, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
commandline.echo(str, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -471,13 +471,13 @@ CompletionContext.prototype = {
|
|||||||
let filter = fixCase(this.filter);
|
let filter = fixCase(this.filter);
|
||||||
if (this.anchored)
|
if (this.anchored)
|
||||||
{
|
{
|
||||||
function compare (text, s) text.substr(0, s.length) == s;
|
function compare(text, s) text.substr(0, s.length) == s;
|
||||||
substrings = util.map(util.range(filter.length, text.length + 1),
|
substrings = util.map(util.range(filter.length, text.length + 1),
|
||||||
function (end) text.substring(0, end));
|
function (end) text.substring(0, end));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
function compare (text, s) text.indexOf(s) >= 0;
|
function compare(text, s) text.indexOf(s) >= 0;
|
||||||
substrings = [];
|
substrings = [];
|
||||||
let start = 0;
|
let start = 0;
|
||||||
let idx;
|
let idx;
|
||||||
@@ -527,7 +527,7 @@ CompletionContext.prototype = {
|
|||||||
|
|
||||||
cancelAll: function ()
|
cancelAll: function ()
|
||||||
{
|
{
|
||||||
for (let [,context] in Iterator(this.contextList))
|
for (let [, context] in Iterator(this.contextList))
|
||||||
{
|
{
|
||||||
if (context.cancel)
|
if (context.cancel)
|
||||||
context.cancel();
|
context.cancel();
|
||||||
@@ -1006,7 +1006,7 @@ function Completion() //{{{
|
|||||||
// Find any complete statements that we can eval before we eval our object.
|
// Find any complete statements that we can eval before we eval our object.
|
||||||
// This allows for things like: let doc = window.content.document; let elem = doc.createElement...; elem.<Tab>
|
// This allows for things like: let doc = window.content.document; let elem = doc.createElement...; elem.<Tab>
|
||||||
let prev = 0;
|
let prev = 0;
|
||||||
for (let [,v] in Iterator(get(0)[FULL_STATEMENTS]))
|
for (let [, v] in Iterator(get(0)[FULL_STATEMENTS]))
|
||||||
{
|
{
|
||||||
let key = str.substring(prev, v + 1);
|
let key = str.substring(prev, v + 1);
|
||||||
if (checkFunction(prev, v, key))
|
if (checkFunction(prev, v, key))
|
||||||
@@ -1123,14 +1123,14 @@ function Completion() //{{{
|
|||||||
}
|
}
|
||||||
// TODO: Make this a generic completion helper function.
|
// TODO: Make this a generic completion helper function.
|
||||||
let filter = key + (string || "");
|
let filter = key + (string || "");
|
||||||
for (let [,obj] in Iterator(objects))
|
for (let [, obj] in Iterator(objects))
|
||||||
{
|
{
|
||||||
this.context.fork(obj[1], top[OFFSET], this, fill,
|
this.context.fork(obj[1], top[OFFSET], this, fill,
|
||||||
obj[0], obj[1], compl, compl != orig, filter, last, key.length);
|
obj[0], obj[1], compl, compl != orig, filter, last, key.length);
|
||||||
}
|
}
|
||||||
if (orig)
|
if (orig)
|
||||||
return;
|
return;
|
||||||
for (let [,obj] in Iterator(objects))
|
for (let [, obj] in Iterator(objects))
|
||||||
{
|
{
|
||||||
obj[1] += " (substrings)";
|
obj[1] += " (substrings)";
|
||||||
this.context.fork(obj[1], top[OFFSET], this, fill,
|
this.context.fork(obj[1], top[OFFSET], this, fill,
|
||||||
@@ -1283,7 +1283,7 @@ function Completion() //{{{
|
|||||||
setFunctionCompleter: function setFunctionCompleter(funcs, completers)
|
setFunctionCompleter: function setFunctionCompleter(funcs, completers)
|
||||||
{
|
{
|
||||||
funcs = Array.concat(funcs);
|
funcs = Array.concat(funcs);
|
||||||
for (let [,func] in Iterator(funcs))
|
for (let [, func] in Iterator(funcs))
|
||||||
{
|
{
|
||||||
func.liberatorCompleter = function liberatorCompleter(context, func, obj, args) {
|
func.liberatorCompleter = function liberatorCompleter(context, func, obj, args) {
|
||||||
let completer = completers[args.length - 1];
|
let completer = completers[args.length - 1];
|
||||||
|
|||||||
@@ -78,12 +78,12 @@ function Editor() //{{{
|
|||||||
let keyword = "[^" + nonkw + "]";
|
let keyword = "[^" + nonkw + "]";
|
||||||
let nonkeyword = "[" + nonkw + "]";
|
let nonkeyword = "[" + nonkw + "]";
|
||||||
|
|
||||||
let full_id = keyword + "+";
|
let fullId = keyword + "+";
|
||||||
let end_id = nonkeyword + "+" + keyword;
|
let endId = nonkeyword + "+" + keyword;
|
||||||
let non_id = "\\S*" + nonkeyword;
|
let nonId = "\\S*" + nonkeyword;
|
||||||
|
|
||||||
// Used in addAbbrevation and expandAbbreviation
|
// Used in addAbbrevation and expandAbbreviation
|
||||||
var abbrevmatch = full_id + "|" + end_id + "|" + non_id;
|
var abbrevmatch = fullId + "|" + endId + "|" + nonId;
|
||||||
|
|
||||||
function getEditor() liberator.focus;
|
function getEditor() liberator.focus;
|
||||||
|
|
||||||
@@ -186,7 +186,7 @@ function Editor() //{{{
|
|||||||
function abbrevs()
|
function abbrevs()
|
||||||
{
|
{
|
||||||
for (let [lhs, abbr] in Iterator(abbreviations))
|
for (let [lhs, abbr] in Iterator(abbreviations))
|
||||||
for (let [,rhs] in Iterator(abbr))
|
for (let [, rhs] in Iterator(abbr))
|
||||||
yield [lhs, rhs];
|
yield [lhs, rhs];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,7 +206,7 @@ function Editor() //{{{
|
|||||||
liberator.echoerr("E474: Invalid argument");
|
liberator.echoerr("E474: Invalid argument");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
let [,lhs,rhs] = matches;
|
let [, lhs, rhs] = matches;
|
||||||
if (rhs)
|
if (rhs)
|
||||||
editor.addAbbreviation(mode, lhs, rhs);
|
editor.addAbbreviation(mode, lhs, rhs);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -122,55 +122,58 @@ function AutoCommands() //{{{
|
|||||||
options: [[["-javascript", "-js"], commands.OPTION_NOARG]]
|
options: [[["-javascript", "-js"], commands.OPTION_NOARG]]
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: expand target to all buffers
|
[
|
||||||
commands.add(["doauto[all]"],
|
|
||||||
"Apply the autocommands matching the specified URL pattern to all buffers",
|
|
||||||
function (args)
|
|
||||||
{
|
{
|
||||||
commands.get("doautocmd").action.call(this, args);
|
name: "do[autocmd]",
|
||||||
|
description: "Apply the autocommands matching the specified URL pattern to the current buffer"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
completer: function (context) completion.autocmdEvent(context),
|
name: "doautoa[ll]",
|
||||||
literal: 0
|
description: "Apply the autocommands matching the specified URL pattern to all buffers"
|
||||||
}
|
}
|
||||||
);
|
].forEach(function (command) {
|
||||||
|
commands.add([command.name],
|
||||||
// TODO: restrict target to current buffer
|
command.description,
|
||||||
commands.add(["do[autocmd]"],
|
// TODO: Perhaps this should take -args to pass to the command?
|
||||||
"Apply the autocommands matching the specified URL pattern to the current buffer",
|
function (args)
|
||||||
function (args)
|
|
||||||
{
|
|
||||||
args = args.string;
|
|
||||||
if (/^\s*$/.test(args))
|
|
||||||
{
|
{
|
||||||
liberator.echomsg("No matching autocommands");
|
// Vim compatible
|
||||||
return;
|
if (args.length == 0)
|
||||||
}
|
return void liberator.echomsg("No matching autocommands");
|
||||||
|
|
||||||
let [, event, url] = args.match(/^(\S+)(?:\s+(\S+))?$/);
|
let [event, url] = args;
|
||||||
url = url || buffer.URL;
|
let defaultURL = url || buffer.URL;
|
||||||
|
let validEvents = config.autocommands.map(function (e) e[0]);
|
||||||
|
|
||||||
let validEvents = config.autocommands.map(function (e) e[0]);
|
// TODO: add command validators
|
||||||
|
if (event == "*")
|
||||||
|
return void liberator.echoerr("E217: Can't execute autocommands for ALL events");
|
||||||
|
else if (validEvents.indexOf(event) == -1)
|
||||||
|
return void liberator.echoerr("E216: No such group or event: " + args);
|
||||||
|
else if (!autocommands.get(event).some(function (c) c.pattern.test(defaultURL)))
|
||||||
|
return void liberator.echomsg("No matching autocommands");
|
||||||
|
|
||||||
if (event == "*")
|
if (this.name == "doautoall" && liberator.has("tabs"))
|
||||||
liberator.echoerr("E217: Can't execute autocommands for ALL events");
|
{
|
||||||
else if (validEvents.indexOf(event) == -1)
|
let current = tabs.index();
|
||||||
liberator.echoerr("E216: No such group or event: " + args);
|
|
||||||
else
|
for (let i = 0; i < tabs.count; i++)
|
||||||
{
|
{
|
||||||
// TODO: perhaps trigger could return the number of autocmds triggered
|
tabs.select(i);
|
||||||
// TODO: Perhaps this should take -args to pass to the command?
|
// if no url arg is specified use the current buffer's URL
|
||||||
if (!autocommands.get(event).some(function (c) c.pattern.test(url)))
|
autocommands.trigger(event, { url: url || buffer.URL });
|
||||||
liberator.echomsg("No matching autocommands");
|
}
|
||||||
|
|
||||||
|
tabs.select(current);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
autocommands.trigger(event, { url: url });
|
autocommands.trigger(event, { url: defaultURL });
|
||||||
}
|
},
|
||||||
},
|
{
|
||||||
{
|
argCount: "*", // FIXME: kludged for proper error message should be "1".
|
||||||
completer: function (context) completion.autocmdEvent(context),
|
completer: function (context) completion.autocmdEvent(context)
|
||||||
literal: 0
|
});
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////}}}
|
/////////////////////////////////////////////////////////////////////////////}}}
|
||||||
////////////////////// COMPLETIONS /////////////////////////////////////////////
|
////////////////////// COMPLETIONS /////////////////////////////////////////////
|
||||||
@@ -306,7 +309,7 @@ function AutoCommands() //{{{
|
|||||||
let lastPattern = null;
|
let lastPattern = null;
|
||||||
let url = args.url || "";
|
let url = args.url || "";
|
||||||
|
|
||||||
for (let [,autoCmd] in Iterator(autoCmds))
|
for (let [, autoCmd] in Iterator(autoCmds))
|
||||||
{
|
{
|
||||||
if (autoCmd.pattern.test(url))
|
if (autoCmd.pattern.test(url))
|
||||||
{
|
{
|
||||||
@@ -439,10 +442,6 @@ function Events() //{{{
|
|||||||
window.addEventListener("DOMMenuBarInactive", exitMenuMode, true);
|
window.addEventListener("DOMMenuBarInactive", exitMenuMode, true);
|
||||||
window.addEventListener("resize", onResize, true);
|
window.addEventListener("resize", onResize, true);
|
||||||
|
|
||||||
// window.document.addEventListener("DOMTitleChanged", function (event) {
|
|
||||||
// liberator.log("titlechanged");
|
|
||||||
// }, null);
|
|
||||||
|
|
||||||
// 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 liberator's source code for
|
// want to refer to within liberator's source code for
|
||||||
@@ -472,7 +471,7 @@ function Events() //{{{
|
|||||||
if (k in keyTable)
|
if (k in keyTable)
|
||||||
names = keyTable[k];
|
names = keyTable[k];
|
||||||
code_key[v] = names[0];
|
code_key[v] = names[0];
|
||||||
for (let [,name] in Iterator(names))
|
for (let [, name] in Iterator(names))
|
||||||
key_code[name.toLowerCase()] = v;
|
key_code[name.toLowerCase()] = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -581,7 +580,7 @@ function Events() //{{{
|
|||||||
|
|
||||||
if (dirs.length > 0)
|
if (dirs.length > 0)
|
||||||
{
|
{
|
||||||
for (let [,dir] in Iterator(dirs))
|
for (let [, dir] in Iterator(dirs))
|
||||||
{
|
{
|
||||||
liberator.echomsg('Searching for "macros/*" in "' + dir.path + '"', 2);
|
liberator.echomsg('Searching for "macros/*" in "' + dir.path + '"', 2);
|
||||||
|
|
||||||
@@ -846,7 +845,7 @@ function Events() //{{{
|
|||||||
{
|
{
|
||||||
let re = RegExp(filter);
|
let re = RegExp(filter);
|
||||||
|
|
||||||
for (let [item,] in macros)
|
for (let [item, ] in macros)
|
||||||
{
|
{
|
||||||
if (re.test(item) || !filter)
|
if (re.test(item) || !filter)
|
||||||
macros.remove(item);
|
macros.remove(item);
|
||||||
@@ -882,7 +881,7 @@ function Events() //{{{
|
|||||||
{
|
{
|
||||||
liberator.threadYield(1, true);
|
liberator.threadYield(1, true);
|
||||||
|
|
||||||
for (let [,evt_obj] in Iterator(events.fromString(keys)))
|
for (let [, evt_obj] in Iterator(events.fromString(keys)))
|
||||||
{
|
{
|
||||||
let elem = liberator.focus || window.content;
|
let elem = liberator.focus || window.content;
|
||||||
let evt = events.create(doc, "keypress", evt_obj);
|
let evt = events.create(doc, "keypress", evt_obj);
|
||||||
@@ -922,7 +921,7 @@ function Events() //{{{
|
|||||||
{
|
{
|
||||||
let duringFeed = this.duringFeed;
|
let duringFeed = this.duringFeed;
|
||||||
this.duringFeed = [];
|
this.duringFeed = [];
|
||||||
for (let [,evt] in Iterator(duringFeed))
|
for (let [, evt] in Iterator(duringFeed))
|
||||||
evt.target.dispatchEvent(evt);
|
evt.target.dispatchEvent(evt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1021,8 +1020,8 @@ function Events() //{{{
|
|||||||
while (match = re.exec(input))
|
while (match = re.exec(input))
|
||||||
{
|
{
|
||||||
let evt_str = match[0];
|
let evt_str = match[0];
|
||||||
let evt_obj = {ctrlKey:false, shiftKey:false,altKey:false, metaKey: false,
|
let evt_obj = { ctrlKey: false, shiftKey: false, altKey: false, metaKey: false,
|
||||||
keyCode: 0, charCode: 0, type: "keypress"};
|
keyCode: 0, charCode: 0, type: "keypress" };
|
||||||
|
|
||||||
if (evt_str.length > 1) // <.*?>
|
if (evt_str.length > 1) // <.*?>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -66,26 +66,26 @@ function Hints() //{{{
|
|||||||
function images() "//img | //xhtml:img";
|
function images() "//img | //xhtml:img";
|
||||||
|
|
||||||
const hintModes = {
|
const hintModes = {
|
||||||
";": Mode("Focus hint", function (elem) buffer.focusElement(elem), extended),
|
";": Mode("Focus hint", function (elem) buffer.focusElement(elem), extended),
|
||||||
"?": Mode("Show information for hint", function (elem) buffer.showElementInfo(elem), extended),
|
"?": Mode("Show information for hint", function (elem) buffer.showElementInfo(elem), extended),
|
||||||
s: Mode("Save hint", function (elem) buffer.saveLink(elem, true)),
|
s: Mode("Save hint", function (elem) buffer.saveLink(elem, true)),
|
||||||
a: Mode("Save hint with prompt", function (elem) buffer.saveLink(elem, false)),
|
a: Mode("Save hint with prompt", function (elem) buffer.saveLink(elem, false)),
|
||||||
f: Mode("Focus frame", function (elem) elem.ownerDocument.defaultView.focus(), function () "//body | //xhtml:body"),
|
f: Mode("Focus frame", function (elem) elem.ownerDocument.defaultView.focus(), function () "//body | //xhtml:body"),
|
||||||
o: Mode("Follow hint", function (elem) buffer.followLink(elem, liberator.CURRENT_TAB)),
|
o: Mode("Follow hint", function (elem) buffer.followLink(elem, liberator.CURRENT_TAB)),
|
||||||
t: Mode("Follow hint in a new tab", function (elem) buffer.followLink(elem, liberator.NEW_TAB)),
|
t: Mode("Follow hint in a new tab", function (elem) buffer.followLink(elem, liberator.NEW_TAB)),
|
||||||
b: Mode("Follow hint in a background tab", function (elem) buffer.followLink(elem, liberator.NEW_BACKGROUND_TAB)),
|
b: Mode("Follow hint in a background tab", function (elem) buffer.followLink(elem, liberator.NEW_BACKGROUND_TAB)),
|
||||||
w: Mode("Follow hint in a new window", function (elem) buffer.followLink(elem, liberator.NEW_WINDOW), extended),
|
w: Mode("Follow hint in a new window", function (elem) buffer.followLink(elem, liberator.NEW_WINDOW), extended),
|
||||||
F: Mode("Open multiple hints in tabs", followAndReshow),
|
F: Mode("Open multiple hints in tabs", followAndReshow),
|
||||||
O: Mode("Generate an ':open URL' using hint", function (elem, loc) commandline.open(":", "open " + loc, modes.EX)),
|
O: Mode("Generate an ':open URL' using hint", function (elem, loc) commandline.open(":", "open " + loc, modes.EX)),
|
||||||
T: Mode("Generate a ':tabopen URL' using hint",function (elem, loc) commandline.open(":", "tabopen " + loc, modes.EX)),
|
T: Mode("Generate a ':tabopen URL' using hint", function (elem, loc) commandline.open(":", "tabopen " + loc, modes.EX)),
|
||||||
W: Mode("Generate a ':winopen URL' using hint",function (elem, loc) commandline.open(":", "winopen " + loc, modes.EX)),
|
W: Mode("Generate a ':winopen URL' using hint", function (elem, loc) commandline.open(":", "winopen " + loc, modes.EX)),
|
||||||
v: Mode("View hint source", function (elem, loc) buffer.viewSource(loc, false), extended),
|
v: Mode("View hint source", function (elem, loc) buffer.viewSource(loc, false), extended),
|
||||||
V: Mode("View hint source in external editor", function (elem, loc) buffer.viewSource(loc, true), extended),
|
V: Mode("View hint source in external editor", function (elem, loc) buffer.viewSource(loc, true), extended),
|
||||||
y: Mode("Yank hint location", function (elem, loc) util.copyToClipboard(loc, true)),
|
y: Mode("Yank hint location", function (elem, loc) util.copyToClipboard(loc, true)),
|
||||||
Y: Mode("Yank hint description", function (elem) util.copyToClipboard(elem.textContent || "", true), extended),
|
Y: Mode("Yank hint description", function (elem) util.copyToClipboard(elem.textContent || "", true), extended),
|
||||||
c: Mode("Open context menu", function (elem) buffer.openContextMenu(elem), extended),
|
c: Mode("Open context menu", function (elem) buffer.openContextMenu(elem), extended),
|
||||||
i: Mode("Show image", function (elem) liberator.open(elem.src), images),
|
i: Mode("Show image", function (elem) liberator.open(elem.src), images),
|
||||||
I: Mode("Show image in a new tab", function (elem) liberator.open(elem.src, liberator.NEW_TAB), images)
|
I: Mode("Show image in a new tab", function (elem) liberator.open(elem.src, liberator.NEW_TAB), images)
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -163,7 +163,7 @@ function Hints() //{{{
|
|||||||
return [elem.value, false];
|
return [elem.value, false];
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (let [,option] in Iterator(options["hintinputs"].split(",")))
|
for (let [, option] in Iterator(options["hintinputs"].split(",")))
|
||||||
{
|
{
|
||||||
if (option == "value")
|
if (option == "value")
|
||||||
{
|
{
|
||||||
@@ -435,7 +435,7 @@ function Hints() //{{{
|
|||||||
setClass(imgspan, activeHint == hintnum);
|
setClass(imgspan, activeHint == hintnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
span.setAttribute("number", showtext ? hintnum + ": " + text.substr(0,50): hintnum);
|
span.setAttribute("number", showtext ? hintnum + ": " + text.substr(0, 50) : hintnum);
|
||||||
if (imgspan)
|
if (imgspan)
|
||||||
imgspan.setAttribute("number", hintnum);
|
imgspan.setAttribute("number", hintnum);
|
||||||
else
|
else
|
||||||
@@ -449,7 +449,7 @@ function Hints() //{{{
|
|||||||
{
|
{
|
||||||
let css = [];
|
let css = [];
|
||||||
// FIXME: Broken for imgspans.
|
// FIXME: Broken for imgspans.
|
||||||
for (let [,{ doc: doc }] in Iterator(docs))
|
for (let [, { doc: doc }] in Iterator(docs))
|
||||||
{
|
{
|
||||||
for (let elem in buffer.evaluateXPath("//*[@liberator:highlight and @number]", doc))
|
for (let elem in buffer.evaluateXPath("//*[@liberator:highlight and @number]", doc))
|
||||||
{
|
{
|
||||||
@@ -560,7 +560,7 @@ function Hints() //{{{
|
|||||||
*
|
*
|
||||||
* @param {Event} event The keypress event.
|
* @param {Event} event The keypress event.
|
||||||
*/
|
*/
|
||||||
function onInput (event)
|
function onInput(event)
|
||||||
{
|
{
|
||||||
prevInput = "text";
|
prevInput = "text";
|
||||||
|
|
||||||
@@ -712,7 +712,7 @@ function Hints() //{{{
|
|||||||
function stringsAtBeginningOfWords(strings, words, allowWordOverleaping)
|
function stringsAtBeginningOfWords(strings, words, allowWordOverleaping)
|
||||||
{
|
{
|
||||||
let strIdx = 0;
|
let strIdx = 0;
|
||||||
for (let [,word] in Iterator(words))
|
for (let [, word] in Iterator(words))
|
||||||
{
|
{
|
||||||
if (word.length == 0)
|
if (word.length == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ function Script(file)
|
|||||||
this.__context__ = this;
|
this.__context__ = this;
|
||||||
|
|
||||||
// This belongs elsewhere
|
// This belongs elsewhere
|
||||||
for (let [,dir] in Iterator(io.getRuntimeDirectories("plugin")))
|
for (let [, dir] in Iterator(io.getRuntimeDirectories("plugin")))
|
||||||
{
|
{
|
||||||
if (dir.contains(file, false))
|
if (dir.contains(file, false))
|
||||||
plugins[this.NAME] = this;
|
plugins[this.NAME] = this;
|
||||||
@@ -230,7 +230,7 @@ function IO() //{{{
|
|||||||
let dirs = getPathsFromPathList(options["cdpath"]);
|
let dirs = getPathsFromPathList(options["cdpath"]);
|
||||||
let found = false;
|
let found = false;
|
||||||
|
|
||||||
for (let [,dir] in Iterator(dirs))
|
for (let [, dir] in Iterator(dirs))
|
||||||
{
|
{
|
||||||
dir = joinPaths(dir, arg);
|
dir = joinPaths(dir, arg);
|
||||||
|
|
||||||
@@ -467,7 +467,7 @@ function IO() //{{{
|
|||||||
let dirNames = services.get("environment").get("PATH").split(RegExp(liberator.has("Win32") ? ";" : ":"));
|
let dirNames = services.get("environment").get("PATH").split(RegExp(liberator.has("Win32") ? ";" : ":"));
|
||||||
let commands = [];
|
let commands = [];
|
||||||
|
|
||||||
for (let [,dirName] in Iterator(dirNames))
|
for (let [, dirName] in Iterator(dirNames))
|
||||||
{
|
{
|
||||||
let dir = io.getFile(dirName);
|
let dir = io.getFile(dirName);
|
||||||
if (dir.exists() && dir.isDirectory())
|
if (dir.exists() && dir.isDirectory())
|
||||||
@@ -743,7 +743,7 @@ function IO() //{{{
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
return []; // XXX: or should it throw an error, probably yes?
|
return []; // XXX: or should it throw an error, probably yes?
|
||||||
// Yes --djk
|
// Yes, though frankly this should be a precondition so... --djk
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -884,7 +884,7 @@ function IO() //{{{
|
|||||||
dirs = [io.getCurrentDirectory().path].concat(dirs);
|
dirs = [io.getCurrentDirectory().path].concat(dirs);
|
||||||
|
|
||||||
lookup:
|
lookup:
|
||||||
for (let [,dir] in Iterator(dirs))
|
for (let [, dir] in Iterator(dirs))
|
||||||
{
|
{
|
||||||
file = joinPaths(dir, program);
|
file = joinPaths(dir, program);
|
||||||
try
|
try
|
||||||
@@ -897,7 +897,7 @@ lookup:
|
|||||||
if (WINDOWS)
|
if (WINDOWS)
|
||||||
{
|
{
|
||||||
let extensions = services.get("environment").get("PATHEXT").split(";");
|
let extensions = services.get("environment").get("PATHEXT").split(";");
|
||||||
for (let [,extension] in Iterator(extensions))
|
for (let [, extension] in Iterator(extensions))
|
||||||
{
|
{
|
||||||
file = joinPaths(dir, program + extension);
|
file = joinPaths(dir, program + extension);
|
||||||
if (file.exists())
|
if (file.exists())
|
||||||
@@ -942,9 +942,9 @@ lookup:
|
|||||||
liberator.echomsg("Searching for \"" + paths.join(" ") + "\" in \"" + options["runtimepath"] + "\"", 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))
|
||||||
{
|
{
|
||||||
for (let [,path] in Iterator(paths))
|
for (let [, path] in Iterator(paths))
|
||||||
{
|
{
|
||||||
let file = joinPaths(dir, path);
|
let file = joinPaths(dir, path);
|
||||||
|
|
||||||
@@ -1028,13 +1028,15 @@ lookup:
|
|||||||
let heredocEnd = null; // the string which ends the heredoc
|
let heredocEnd = null; // the string which ends the heredoc
|
||||||
let lines = str.split(/\r\n|[\r\n]/);
|
let lines = str.split(/\r\n|[\r\n]/);
|
||||||
|
|
||||||
|
function execute(args) { command.execute(args, special, count, { setFrom: file }); }
|
||||||
|
|
||||||
for (let [i, line] in Iterator(lines))
|
for (let [i, line] in Iterator(lines))
|
||||||
{
|
{
|
||||||
if (heredocEnd) // we already are in a heredoc
|
if (heredocEnd) // we already are in a heredoc
|
||||||
{
|
{
|
||||||
if (heredocEnd.test(line))
|
if (heredocEnd.test(line))
|
||||||
{
|
{
|
||||||
command.execute(heredoc, special, count);
|
execute(heredoc);
|
||||||
heredoc = "";
|
heredoc = "";
|
||||||
heredocEnd = null;
|
heredocEnd = null;
|
||||||
}
|
}
|
||||||
@@ -1057,9 +1059,6 @@ lookup:
|
|||||||
{
|
{
|
||||||
let lineNumber = i + 1;
|
let lineNumber = i + 1;
|
||||||
|
|
||||||
// TODO: messages need to be able to specify
|
|
||||||
// whether they can be cleared/overwritten or
|
|
||||||
// should be appended to and the MOW opened
|
|
||||||
liberator.echoerr("Error detected while processing " + file.path, commandline.FORCE_MULTILINE);
|
liberator.echoerr("Error detected while processing " + file.path, commandline.FORCE_MULTILINE);
|
||||||
commandline.echo("line " + lineNumber + ":", commandline.HL_LINENR, commandline.APPEND_TO_MESSAGES);
|
commandline.echo("line " + lineNumber + ":", commandline.HL_LINENR, commandline.APPEND_TO_MESSAGES);
|
||||||
liberator.echoerr("E492: Not an editor command: " + line);
|
liberator.echoerr("E492: Not an editor command: " + line);
|
||||||
@@ -1079,15 +1078,11 @@ lookup:
|
|||||||
heredocEnd = RegExp("^" + matches[2] + "$", "m");
|
heredocEnd = RegExp("^" + matches[2] + "$", "m");
|
||||||
if (matches[1])
|
if (matches[1])
|
||||||
heredoc = matches[1] + "\n";
|
heredoc = matches[1] + "\n";
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
command.execute(args, special, count);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// execute a normal liberator command
|
|
||||||
liberator.execute(line, null, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
execute(args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1095,7 +1090,7 @@ lookup:
|
|||||||
// if no heredoc-end delimiter is found before EOF then
|
// if no heredoc-end delimiter is found before EOF then
|
||||||
// process the heredoc anyway - Vim compatible ;-)
|
// process the heredoc anyway - Vim compatible ;-)
|
||||||
if (heredocEnd)
|
if (heredocEnd)
|
||||||
command.execute(heredoc, special, count);
|
execute(heredoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scriptNames.indexOf(file.path) == -1)
|
if (scriptNames.indexOf(file.path) == -1)
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ const liberator = (function () //{{{
|
|||||||
{
|
{
|
||||||
function addChildren(node, parent)
|
function addChildren(node, parent)
|
||||||
{
|
{
|
||||||
for (let [,item] in Iterator(node.childNodes))
|
for (let [, item] in Iterator(node.childNodes))
|
||||||
{
|
{
|
||||||
if (item.childNodes.length == 0 && item.localName == "menuitem"
|
if (item.childNodes.length == 0 && item.localName == "menuitem"
|
||||||
&& !/rdf:http:/.test(item.getAttribute("label"))) // FIXME
|
&& !/rdf:http:/.test(item.getAttribute("label"))) // FIXME
|
||||||
@@ -163,7 +163,7 @@ const liberator = (function () //{{{
|
|||||||
opts: config.guioptions,
|
opts: config.guioptions,
|
||||||
setter: function (opts)
|
setter: function (opts)
|
||||||
{
|
{
|
||||||
for (let [opt, [,ids]] in Iterator(this.opts))
|
for (let [opt, [, ids]] in Iterator(this.opts))
|
||||||
{
|
{
|
||||||
ids.map(function (id) document.getElementById(id))
|
ids.map(function (id) document.getElementById(id))
|
||||||
.forEach(function (elem)
|
.forEach(function (elem)
|
||||||
@@ -220,7 +220,7 @@ const liberator = (function () //{{{
|
|||||||
{
|
{
|
||||||
setter: function (value)
|
setter: function (value)
|
||||||
{
|
{
|
||||||
for (let [,group] in Iterator(groups))
|
for (let [, group] in Iterator(groups))
|
||||||
group.setter(value);
|
group.setter(value);
|
||||||
return value;
|
return value;
|
||||||
},
|
},
|
||||||
@@ -351,7 +351,7 @@ const liberator = (function () //{{{
|
|||||||
// TODO: why are these sorts of properties arrays? --djk
|
// TODO: why are these sorts of properties arrays? --djk
|
||||||
let dialogs = config.dialogs;
|
let dialogs = config.dialogs;
|
||||||
|
|
||||||
for (let [,dialog] in Iterator(dialogs))
|
for (let [, dialog] in Iterator(dialogs))
|
||||||
{
|
{
|
||||||
if (util.compareIgnoreCase(arg, dialog[0]) == 0)
|
if (util.compareIgnoreCase(arg, dialog[0]) == 0)
|
||||||
{
|
{
|
||||||
@@ -387,7 +387,7 @@ const liberator = (function () //{{{
|
|||||||
if (!items.some(function (i) i.fullMenuPath == arg))
|
if (!items.some(function (i) i.fullMenuPath == arg))
|
||||||
return void liberator.echoerr("E334: Menu not found: " + arg);
|
return void liberator.echoerr("E334: Menu not found: " + arg);
|
||||||
|
|
||||||
for (let [,item] in Iterator(items))
|
for (let [, item] in Iterator(items))
|
||||||
{
|
{
|
||||||
if (item.fullMenuPath == arg)
|
if (item.fullMenuPath == arg)
|
||||||
item.doCommand();
|
item.doCommand();
|
||||||
@@ -539,7 +539,7 @@ const liberator = (function () //{{{
|
|||||||
/* XXX: Inline style. */
|
/* XXX: Inline style. */
|
||||||
e.enabled ? <span style="color: blue;">enabled</span>
|
e.enabled ? <span style="color: blue;">enabled</span>
|
||||||
: <span style="color: red;">disabled</span>,
|
: <span style="color: red;">disabled</span>,
|
||||||
e.description] for ([,e] in Iterator(extensions)))
|
e.description] for ([, e] in Iterator(extensions)))
|
||||||
);
|
);
|
||||||
|
|
||||||
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
||||||
@@ -794,6 +794,31 @@ const liberator = (function () //{{{
|
|||||||
literal: 0
|
literal: 0
|
||||||
});
|
});
|
||||||
|
|
||||||
|
commands.add(["verb[ose]"],
|
||||||
|
"Execute a command with 'verbose' set",
|
||||||
|
function (args)
|
||||||
|
{
|
||||||
|
let vbs = options.get("verbose");
|
||||||
|
let value = vbs.value;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
vbs.set(args.count > -1 ? args.count : 1);
|
||||||
|
vbs.setFrom = null;
|
||||||
|
liberator.execute(args[0], null, true);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
vbs.set(value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
argCount: "+",
|
||||||
|
completer: function (context) completion.ex(context),
|
||||||
|
count: true,
|
||||||
|
literal: 0
|
||||||
|
});
|
||||||
|
|
||||||
commands.add(["ve[rsion]"],
|
commands.add(["ve[rsion]"],
|
||||||
"Show version information",
|
"Show version information",
|
||||||
function (args)
|
function (args)
|
||||||
@@ -962,9 +987,9 @@ const liberator = (function () //{{{
|
|||||||
/** @property An RC file to use rather than the default. */
|
/** @property An RC file to use rather than the default. */
|
||||||
rcFile: null,
|
rcFile: null,
|
||||||
/** @property An Ex command to run before any initialization is performed. */
|
/** @property An Ex command to run before any initialization is performed. */
|
||||||
preCommand: null,
|
preCommands: null,
|
||||||
/** @property An Ex command to run after all initialization has been performed. */
|
/** @property An Ex command to run after all initialization has been performed. */
|
||||||
postCommand: null
|
postCommands: null
|
||||||
},
|
},
|
||||||
|
|
||||||
registerObserver: registerObserver,
|
registerObserver: registerObserver,
|
||||||
@@ -979,7 +1004,7 @@ const liberator = (function () //{{{
|
|||||||
triggerObserver: function (type)
|
triggerObserver: function (type)
|
||||||
{
|
{
|
||||||
let args = Array.slice(arguments, 1);
|
let args = Array.slice(arguments, 1);
|
||||||
for (let [,func] in Iterator(observers[type] || []))
|
for (let [, func] in Iterator(observers[type] || []))
|
||||||
func.apply(null, args);
|
func.apply(null, args);
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1455,7 +1480,7 @@ const liberator = (function () //{{{
|
|||||||
}
|
}
|
||||||
|
|
||||||
liberator.echomsg('Searching for "plugin/**/*.{js,vimp}" in "'
|
liberator.echomsg('Searching for "plugin/**/*.{js,vimp}" in "'
|
||||||
+ [dir.path.replace(/.plugin$/, "") for ([,dir] in Iterator(dirs))].join(",") + '"', 2);
|
+ [dir.path.replace(/.plugin$/, "") for ([, dir] in Iterator(dirs))].join(",") + '"', 2);
|
||||||
|
|
||||||
dirs.forEach(function (dir) {
|
dirs.forEach(function (dir) {
|
||||||
liberator.echomsg("Searching for \"" + (dir.path + "/**/*.{js,vimp}") + "\"", 3);
|
liberator.echomsg("Searching for \"" + (dir.path + "/**/*.{js,vimp}") + "\"", 3);
|
||||||
@@ -1584,7 +1609,7 @@ const liberator = (function () //{{{
|
|||||||
else if (!where)
|
else if (!where)
|
||||||
where = liberator.CURRENT_TAB;
|
where = liberator.CURRENT_TAB;
|
||||||
|
|
||||||
for (let [,url] in Iterator(urls))
|
for (let [, url] in Iterator(urls))
|
||||||
{
|
{
|
||||||
open(url, where);
|
open(url, where);
|
||||||
where = liberator.NEW_BACKGROUND_TAB;
|
where = liberator.NEW_BACKGROUND_TAB;
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ function Mappings() //{{{
|
|||||||
{
|
{
|
||||||
let maps = stack[mode] || [];
|
let maps = stack[mode] || [];
|
||||||
|
|
||||||
for (let [,map] in Iterator(maps))
|
for (let [, map] in Iterator(maps))
|
||||||
{
|
{
|
||||||
if (map.hasName(cmd))
|
if (map.hasName(cmd))
|
||||||
return map;
|
return map;
|
||||||
@@ -297,7 +297,7 @@ function Mappings() //{{{
|
|||||||
args = args[0];
|
args = args[0];
|
||||||
|
|
||||||
let found = false;
|
let found = false;
|
||||||
for (let [,mode] in Iterator(modes))
|
for (let [, mode] in Iterator(modes))
|
||||||
{
|
{
|
||||||
if (mappings.hasMap(mode, args))
|
if (mappings.hasMap(mode, args))
|
||||||
{
|
{
|
||||||
@@ -413,9 +413,9 @@ function Mappings() //{{{
|
|||||||
let map = new Map(modes, keys, description || "User defined mapping", action, extra);
|
let map = new Map(modes, keys, description || "User defined mapping", action, extra);
|
||||||
|
|
||||||
// remove all old mappings to this key sequence
|
// remove all old mappings to this key sequence
|
||||||
for (let [,name] in Iterator(map.names))
|
for (let [, name] in Iterator(map.names))
|
||||||
{
|
{
|
||||||
for (let [,mode] in Iterator(map.modes))
|
for (let [, mode] in Iterator(map.modes))
|
||||||
removeMap(mode, name);
|
removeMap(mode, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,9 +461,9 @@ function Mappings() //{{{
|
|||||||
let mappings = user[mode].concat(main[mode]);
|
let mappings = user[mode].concat(main[mode]);
|
||||||
let matches = [];
|
let matches = [];
|
||||||
|
|
||||||
for (let [,map] in Iterator(mappings))
|
for (let [, map] in Iterator(mappings))
|
||||||
{
|
{
|
||||||
for (let [,name] in Iterator(map.names))
|
for (let [, name] in Iterator(map.names))
|
||||||
{
|
{
|
||||||
if (name.indexOf(prefix) == 0 && name.length > prefix.length)
|
if (name.indexOf(prefix) == 0 && name.length > prefix.length)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -216,6 +216,7 @@ const modes = (function () //{{{
|
|||||||
},
|
},
|
||||||
|
|
||||||
// TODO: Deprecate this in favor of addMode? --Kris
|
// TODO: Deprecate this in favor of addMode? --Kris
|
||||||
|
// Ya --djk
|
||||||
setCustomMode: function (modestr, oneventfunc, stopfunc)
|
setCustomMode: function (modestr, oneventfunc, stopfunc)
|
||||||
{
|
{
|
||||||
// TODO this.plugin[id]... ('id' maybe submode or what..)
|
// TODO this.plugin[id]... ('id' maybe submode or what..)
|
||||||
|
|||||||
@@ -111,18 +111,24 @@ function Option(names, description, type, defaultValue, extraInfo) //{{{
|
|||||||
* @see #has
|
* @see #has
|
||||||
*/
|
*/
|
||||||
this.checkHas = extraInfo.checkHas || null;
|
this.checkHas = extraInfo.checkHas || null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @property {boolean} Set to true whenever the option is first set. This
|
* @property {boolean} Set to true whenever the option is first set. This
|
||||||
* is useful to see whether it was changed from its default value
|
* is useful to see whether it was changed from its default value
|
||||||
* interactively or by some RC file.
|
* interactively or by some RC file.
|
||||||
*/
|
*/
|
||||||
this.hasChanged = false;
|
this.hasChanged = false;
|
||||||
|
/**
|
||||||
|
* @property {nsIFile} The script in which this option was last set. null
|
||||||
|
* implies an interactive command.
|
||||||
|
*/
|
||||||
|
this.setFrom = null;
|
||||||
|
|
||||||
// add no{option} variant of boolean {option} to this.names
|
// add no{option} variant of boolean {option} to this.names
|
||||||
if (this.type == "boolean")
|
if (this.type == "boolean")
|
||||||
{
|
{
|
||||||
this.names = []; // reset since order is important
|
this.names = []; // reset since order is important
|
||||||
for (let [,name] in Iterator(names))
|
for (let [, name] in Iterator(names))
|
||||||
{
|
{
|
||||||
this.names.push(name);
|
this.names.push(name);
|
||||||
this.names.push("no" + name);
|
this.names.push("no" + name);
|
||||||
@@ -550,7 +556,7 @@ function Options() //{{{
|
|||||||
if (!args.length)
|
if (!args.length)
|
||||||
args[0] = "";
|
args[0] = "";
|
||||||
|
|
||||||
for (let [,arg] in args)
|
for (let [, arg] in args)
|
||||||
{
|
{
|
||||||
if (bang)
|
if (bang)
|
||||||
{
|
{
|
||||||
@@ -572,6 +578,7 @@ function Options() //{{{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (name == "all" && reset)
|
if (name == "all" && reset)
|
||||||
|
// TODO: Why? --djk
|
||||||
liberator.echoerr("You can't reset all options, it could make " + config.hostApplication + " unusable.");
|
liberator.echoerr("You can't reset all options, it could make " + config.hostApplication + " unusable.");
|
||||||
else if (name == "all")
|
else if (name == "all")
|
||||||
options.listPrefs(onlyNonDefault, "");
|
options.listPrefs(onlyNonDefault, "");
|
||||||
@@ -620,7 +627,10 @@ function Options() //{{{
|
|||||||
option.reset();
|
option.reset();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
option.setFrom = modifiers.setFrom || null;
|
||||||
option.reset();
|
option.reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// read access
|
// read access
|
||||||
else if (opt.get)
|
else if (opt.get)
|
||||||
@@ -630,9 +640,15 @@ function Options() //{{{
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (option.type == "boolean")
|
if (option.type == "boolean")
|
||||||
liberator.echo((opt.optionValue ? " " : "no") + option.name);
|
var msg = (opt.optionValue ? " " : "no") + option.name;
|
||||||
else
|
else
|
||||||
liberator.echo(" " + option.name + "=" + opt.optionValue);
|
msg = " " + option.name + "=" + opt.optionValue;
|
||||||
|
|
||||||
|
if (options["verbose"] > 0 && option.setFrom)
|
||||||
|
msg += "\n Last set from " + option.setFrom.path;
|
||||||
|
|
||||||
|
// FIXME: Message highlight group wrapping messes up the indent up for multi-arg verbose :set queries
|
||||||
|
liberator.echo(<span highlight="CmdOutput">{msg}</span>);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// write access
|
// write access
|
||||||
@@ -640,6 +656,8 @@ function Options() //{{{
|
|||||||
// improved. i.e. Vim's behavior is pretty sloppy to no real benefit
|
// improved. i.e. Vim's behavior is pretty sloppy to no real benefit
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
option.setFrom = modifiers.setFrom || null;
|
||||||
|
|
||||||
if (opt.option.type == "boolean")
|
if (opt.option.type == "boolean")
|
||||||
{
|
{
|
||||||
if (opt.valueGiven)
|
if (opt.valueGiven)
|
||||||
@@ -832,9 +850,10 @@ function Options() //{{{
|
|||||||
|
|
||||||
commands.add(["setl[ocal]"],
|
commands.add(["setl[ocal]"],
|
||||||
"Set local option",
|
"Set local option",
|
||||||
function (args)
|
function (args, modifiers)
|
||||||
{
|
{
|
||||||
return setAction(args, { scope: options.OPTION_SCOPE_LOCAL });
|
modifiers.scope = options.OPTION_SCOPE_LOCAL;
|
||||||
|
setAction(args, modifiers);
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bang: true,
|
bang: true,
|
||||||
@@ -849,9 +868,10 @@ function Options() //{{{
|
|||||||
|
|
||||||
commands.add(["setg[lobal]"],
|
commands.add(["setg[lobal]"],
|
||||||
"Set global option",
|
"Set global option",
|
||||||
function (args)
|
function (args, modifiers)
|
||||||
{
|
{
|
||||||
return setAction(args, { scope: options.OPTION_SCOPE_GLOBAL });
|
modifiers.scope = options.OPTION_SCOPE_GLOBAL;
|
||||||
|
setAction(args, modifiers);
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bang: true,
|
bang: true,
|
||||||
@@ -866,10 +886,7 @@ function Options() //{{{
|
|||||||
|
|
||||||
commands.add(["se[t]"],
|
commands.add(["se[t]"],
|
||||||
"Set an option",
|
"Set an option",
|
||||||
function (args)
|
function (args, modifiers) { setAction(args, modifiers); },
|
||||||
{
|
|
||||||
return setAction(args);
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
bang: true,
|
bang: true,
|
||||||
completer: function (context, args)
|
completer: function (context, args)
|
||||||
@@ -891,12 +908,7 @@ function Options() //{{{
|
|||||||
"Delete a variable",
|
"Delete a variable",
|
||||||
function (args)
|
function (args)
|
||||||
{
|
{
|
||||||
//let names = args.split(/ /);
|
for (let [, name] in args)
|
||||||
//if (typeof names == "string") names = [names];
|
|
||||||
|
|
||||||
//let length = names.length;
|
|
||||||
//for (let i = 0, name = names[i]; i < length; name = names[++i])
|
|
||||||
for (let [,name] in args)
|
|
||||||
{
|
{
|
||||||
let reference = liberator.variableReference(name);
|
let reference = liberator.variableReference(name);
|
||||||
if (!reference[0])
|
if (!reference[0])
|
||||||
@@ -1180,7 +1192,7 @@ function Options() //{{{
|
|||||||
let prefArray = services.get("pref").getChildList("", { value: 0 });
|
let prefArray = services.get("pref").getChildList("", { value: 0 });
|
||||||
prefArray.sort();
|
prefArray.sort();
|
||||||
let prefs = function () {
|
let prefs = function () {
|
||||||
for (let [,pref] in Iterator(prefArray))
|
for (let [, pref] in Iterator(prefArray))
|
||||||
{
|
{
|
||||||
let userValue = services.get("pref").prefHasUserValue(pref);
|
let userValue = services.get("pref").prefHasUserValue(pref);
|
||||||
if (onlyNonDefault && !userValue || pref.indexOf(filter) == -1)
|
if (onlyNonDefault && !userValue || pref.indexOf(filter) == -1)
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ function Highlights(name, store)
|
|||||||
let styles = storage.styles;
|
let styles = storage.styles;
|
||||||
|
|
||||||
const Highlight = Struct("class", "selector", "filter", "default", "value");
|
const Highlight = Struct("class", "selector", "filter", "default", "value");
|
||||||
Highlight.defaultValue("filter", function () "chrome://liberator/content/buffer.xhtml" + "," + config.styleableChrome);
|
Highlight.defaultValue("filter", function () ["chrome://liberator/content/buffer.xhtml"].concat(config.styleableChrome).join(","));
|
||||||
Highlight.defaultValue("selector", function () self.selector(this.class));
|
Highlight.defaultValue("selector", function () self.selector(this.class));
|
||||||
Highlight.defaultValue("value", function () this.default);
|
Highlight.defaultValue("value", function () this.default);
|
||||||
Highlight.prototype.toString = function () "Highlight(" + this.class + ")\n\t" + [k + ": " + util.escapeString(v || "undefined") for ([k, v] in this)].join("\n\t");
|
Highlight.prototype.toString = function () "Highlight(" + this.class + ")\n\t" + [k + ": " + util.escapeString(v || "undefined") for ([k, v] in this)].join("\n\t");
|
||||||
@@ -395,7 +395,7 @@ function Styles(name, store)
|
|||||||
if (matches.length == 0)
|
if (matches.length == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (let [,sheet] in Iterator(matches.reverse()))
|
for (let [, sheet] in Iterator(matches.reverse()))
|
||||||
{
|
{
|
||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
@@ -509,7 +509,7 @@ let (array = util.Array)
|
|||||||
catch (e) {}
|
catch (e) {}
|
||||||
context.fork("others", 0, this, function (context) {
|
context.fork("others", 0, this, function (context) {
|
||||||
context.title = ["Site"];
|
context.title = ["Site"];
|
||||||
context.completions = [[s, ""] for ([,s] in Iterator(styles.sites))];
|
context.completions = [[s, ""] for ([, s] in Iterator(styles.sites))];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -729,7 +729,7 @@ liberator.registerObserver("load_completion", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
context.title = ["Color Scheme", "Runtime Path"];
|
context.title = ["Color Scheme", "Runtime Path"];
|
||||||
context.completions = [[c.leafName.replace(/\.vimp$/, ""), c.parent.path] for ([,c] in Iterator(colors))]
|
context.completions = [[c.leafName.replace(/\.vimp$/, ""), c.parent.path] for ([, c] in Iterator(colors))]
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME: extract from :highlight
|
// FIXME: extract from :highlight
|
||||||
|
|||||||
@@ -1014,7 +1014,7 @@ function Tabs() //{{{
|
|||||||
*/
|
*/
|
||||||
stopAll: function ()
|
stopAll: function ()
|
||||||
{
|
{
|
||||||
for (let [,browser] in this.browsers)
|
for (let [, browser] in this.browsers)
|
||||||
browser.stop();
|
browser.stop();
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1072,7 +1072,7 @@ function Tabs() //{{{
|
|||||||
let lowerBuffer = buffer.toLowerCase();
|
let lowerBuffer = buffer.toLowerCase();
|
||||||
let first = tabs.index() + (reverse ? 0 : 1);
|
let first = tabs.index() + (reverse ? 0 : 1);
|
||||||
let nbrowsers = getBrowser().browsers.length;
|
let nbrowsers = getBrowser().browsers.length;
|
||||||
for (let [i,] in tabs.browsers)
|
for (let [i, ] in tabs.browsers)
|
||||||
{
|
{
|
||||||
let index = (i + first) % nbrowsers;
|
let index = (i + first) % nbrowsers;
|
||||||
let url = getBrowser().getBrowserAtIndex(index).contentDocument.location.href;
|
let url = getBrowser().getBrowserAtIndex(index).contentDocument.location.href;
|
||||||
|
|||||||
@@ -398,7 +398,7 @@ function CommandLine() //{{{
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.waiting = true;
|
this.waiting = true;
|
||||||
for (let [,context] in Iterator(list))
|
for (let [, context] in Iterator(list))
|
||||||
{
|
{
|
||||||
function done() !(idx >= n + context.items.length || idx == -2 && !context.items.length);
|
function done() !(idx >= n + context.items.length || idx == -2 && !context.items.length);
|
||||||
while (context.incomplete && !done())
|
while (context.incomplete && !done())
|
||||||
@@ -871,7 +871,7 @@ function CommandLine() //{{{
|
|||||||
////////////////////// COMMANDS ////////////////////////////////////////////////
|
////////////////////// COMMANDS ////////////////////////////////////////////////
|
||||||
/////////////////////////////////////////////////////////////////////////////{{{
|
/////////////////////////////////////////////////////////////////////////////{{{
|
||||||
|
|
||||||
var echoCommands = [
|
[
|
||||||
{
|
{
|
||||||
name: "ec[ho]",
|
name: "ec[ho]",
|
||||||
description: "Echo the expression",
|
description: "Echo the expression",
|
||||||
@@ -887,9 +887,7 @@ function CommandLine() //{{{
|
|||||||
description: "Echo the expression as an informational message",
|
description: "Echo the expression as an informational message",
|
||||||
action: liberator.echomsg
|
action: liberator.echomsg
|
||||||
}
|
}
|
||||||
];
|
].forEach(function (command) {
|
||||||
|
|
||||||
echoCommands.forEach(function (command) {
|
|
||||||
commands.add([command.name],
|
commands.add([command.name],
|
||||||
command.description,
|
command.description,
|
||||||
function (args)
|
function (args)
|
||||||
@@ -991,8 +989,7 @@ function CommandLine() //{{{
|
|||||||
triggerCallback: function (type, mode, data)
|
triggerCallback: function (type, mode, data)
|
||||||
{
|
{
|
||||||
if (callbacks[type] && callbacks[type][mode])
|
if (callbacks[type] && callbacks[type][mode])
|
||||||
return callbacks[type][mode].call(this, data);
|
callbacks[type][mode].call(this, data);
|
||||||
return false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
runSilently: function (func, self)
|
runSilently: function (func, self)
|
||||||
@@ -1017,8 +1014,10 @@ function CommandLine() //{{{
|
|||||||
// completion preview.
|
// completion preview.
|
||||||
return commandWidget.inputField.editor.rootElement.firstChild.textContent;
|
return commandWidget.inputField.editor.rootElement.firstChild.textContent;
|
||||||
}
|
}
|
||||||
catch (e) {}
|
catch (e)
|
||||||
return commandWidget.value;
|
{
|
||||||
|
return commandWidget.value;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
set command(cmd) commandWidget.value = cmd,
|
set command(cmd) commandWidget.value = cmd,
|
||||||
|
|
||||||
@@ -1278,10 +1277,10 @@ function CommandLine() //{{{
|
|||||||
if (completions)
|
if (completions)
|
||||||
completions.previewClear();
|
completions.previewClear();
|
||||||
if (!currentExtendedMode)
|
if (!currentExtendedMode)
|
||||||
return true;
|
return;
|
||||||
|
|
||||||
// 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 <Esc> is handled in the global onEscape
|
||||||
// FIXME: <Esc> should trigger "cancel" event
|
// FIXME: <Esc> should trigger "cancel" event
|
||||||
if (events.isAcceptKey(key))
|
if (events.isAcceptKey(key))
|
||||||
{
|
{
|
||||||
@@ -1289,10 +1288,9 @@ function CommandLine() //{{{
|
|||||||
keepCommand = true;
|
keepCommand = true;
|
||||||
currentExtendedMode = null; // Don't let modes.pop trigger "cancel"
|
currentExtendedMode = null; // Don't let modes.pop trigger "cancel"
|
||||||
modes.pop(!this.silent);
|
modes.pop(!this.silent);
|
||||||
|
commandline.triggerCallback("submit", mode, command);
|
||||||
return commandline.triggerCallback("submit", mode, command);
|
|
||||||
}
|
}
|
||||||
// user pressed UP or DOWN arrow to cycle history completion
|
// user pressed <Up> or <Down> arrow to cycle history completion
|
||||||
else if (/^(<Up>|<Down>|<S-Up>|<S-Down>|<PageUp>|<PageDown>)$/.test(key))
|
else if (/^(<Up>|<Down>|<S-Up>|<S-Down>|<PageUp>|<PageDown>)$/.test(key))
|
||||||
{
|
{
|
||||||
// prevent tab from moving to the next field
|
// prevent tab from moving to the next field
|
||||||
@@ -1303,9 +1301,8 @@ function CommandLine() //{{{
|
|||||||
history.select(/Up/.test(key), !/(Page|S-)/.test(key));
|
history.select(/Up/.test(key), !/(Page|S-)/.test(key));
|
||||||
else
|
else
|
||||||
liberator.beep();
|
liberator.beep();
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
// user pressed TAB to get completions of a command
|
// user pressed <Tab> to get completions of a command
|
||||||
else if (key == "<Tab>" || key == "<S-Tab>")
|
else if (key == "<Tab>" || key == "<S-Tab>")
|
||||||
{
|
{
|
||||||
// prevent tab from moving to the next field
|
// prevent tab from moving to the next field
|
||||||
@@ -1313,7 +1310,6 @@ function CommandLine() //{{{
|
|||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
||||||
tabTimer.tell(event);
|
tabTimer.tell(event);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
else if (key == "<BS>")
|
else if (key == "<BS>")
|
||||||
{
|
{
|
||||||
@@ -1331,7 +1327,7 @@ function CommandLine() //{{{
|
|||||||
{
|
{
|
||||||
//this.resetCompletions();
|
//this.resetCompletions();
|
||||||
}
|
}
|
||||||
return true; // allow this event to be handled by the host app
|
// allow this event to be handled by the host app
|
||||||
}
|
}
|
||||||
else if (event.type == "keyup")
|
else if (event.type == "keyup")
|
||||||
{
|
{
|
||||||
@@ -2087,7 +2083,8 @@ function StatusLine() //{{{
|
|||||||
var value = aURI.spec;
|
var value = aURI.spec;
|
||||||
// Try to decode as UTF-8 if there's no encoding sequence that we would break.
|
// Try to decode as UTF-8 if there's no encoding sequence that we would break.
|
||||||
if (!/%25(?:3B|2F|3F|3A|40|26|3D|2B|24|2C|23)/i.test(value))
|
if (!/%25(?:3B|2F|3F|3A|40|26|3D|2B|24|2C|23)/i.test(value))
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
value = decodeURI(value)
|
value = decodeURI(value)
|
||||||
// 1. decodeURI decodes %25 to %, which creates unintended
|
// 1. decodeURI decodes %25 to %, which creates unintended
|
||||||
// encoding sequences. Re-encode it, unless it's part of
|
// encoding sequences. Re-encode it, unless it's part of
|
||||||
@@ -2098,7 +2095,8 @@ function StatusLine() //{{{
|
|||||||
// by the location bar (bug 410726).
|
// by the location bar (bug 410726).
|
||||||
.replace(/%(?!3B|2F|3F|3A|40|26|3D|2B|24|2C|23)|[\r\n\t]/ig,
|
.replace(/%(?!3B|2F|3F|3A|40|26|3D|2B|24|2C|23)|[\r\n\t]/ig,
|
||||||
encodeURIComponent);
|
encodeURIComponent);
|
||||||
} catch (e) {}
|
}
|
||||||
|
catch (e) {}
|
||||||
|
|
||||||
// Encode invisible characters (soft hyphen, zero-width space, BOM,
|
// Encode invisible characters (soft hyphen, zero-width space, BOM,
|
||||||
// line and paragraph separator, word joiner, invisible times,
|
// line and paragraph separator, word joiner, invisible times,
|
||||||
|
|||||||
@@ -817,13 +817,13 @@ util.Array.uniq = function uniq(ary, unsorted)
|
|||||||
let ret = [];
|
let ret = [];
|
||||||
if (unsorted)
|
if (unsorted)
|
||||||
{
|
{
|
||||||
for (let [,item] in Iterator(ary))
|
for (let [, item] in Iterator(ary))
|
||||||
if (ret.indexOf(item) == -1)
|
if (ret.indexOf(item) == -1)
|
||||||
ret.push(item);
|
ret.push(item);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (let [,item] in Iterator(ary.sort()))
|
for (let [, item] in Iterator(ary.sort()))
|
||||||
{
|
{
|
||||||
if (item != last || !ret.length)
|
if (item != last || !ret.length)
|
||||||
ret.push(item);
|
ret.push(item);
|
||||||
@@ -889,8 +889,8 @@ Struct.prototype = {
|
|||||||
|
|
||||||
// Add no-sideeffect array methods. Can't set new Array() as the prototype or
|
// Add no-sideeffect array methods. Can't set new Array() as the prototype or
|
||||||
// get length() won't work.
|
// get length() won't work.
|
||||||
for (let [,k] in Iterator(["concat", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf",
|
for (let [, k] in Iterator(["concat", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf",
|
||||||
"map", "reduce", "reduceRight", "reverse", "slice", "some", "sort"]))
|
"map", "reduce", "reduceRight", "reverse", "slice", "some", "sort"]))
|
||||||
Struct.prototype[k] = Array.prototype[k];
|
Struct.prototype[k] = Array.prototype[k];
|
||||||
|
|
||||||
// vim: set fdm=marker sw=4 ts=4 et:
|
// vim: set fdm=marker sw=4 ts=4 et:
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ function Addressbook() //{{{
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
let list = template.tabular(["Name", "Address"], [],
|
let list = template.tabular(["Name", "Address"], [],
|
||||||
[[util.clip(a[0], 50), address[1]] for ([,address] in Iterator(addresses))]
|
[[util.clip(a[0], 50), address[1]] for ([, address] in Iterator(addresses))]
|
||||||
);
|
);
|
||||||
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,8 @@ const config = (function () //{{{
|
|||||||
// focusContent() focuses this widget
|
// focusContent() focuses this widget
|
||||||
get mainWidget() this.isComposeWindow ? document.getElementById("content-frame") : GetThreadTree(),
|
get mainWidget() this.isComposeWindow ? document.getElementById("content-frame") : GetThreadTree(),
|
||||||
get visualbellWindow() document.getElementById(this.mainWindowId),
|
get visualbellWindow() document.getElementById(this.mainWindowId),
|
||||||
styleableChrome: "chrome://messenger/content/messenger.xul,chrome://messenger/content/messengercompose/messengercompose.xul",
|
styleableChrome: ["chrome://messenger/content/messenger.xul",
|
||||||
|
"chrome://messenger/content/messengercompose/messengercompose.xul"],
|
||||||
|
|
||||||
autocommands: [["DOMLoad", "Triggered when a page's DOM content has fully loaded"],
|
autocommands: [["DOMLoad", "Triggered when a page's DOM content has fully loaded"],
|
||||||
["FolderLoad", "Triggered after switching folders in " + host],
|
["FolderLoad", "Triggered after switching folders in " + host],
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ function Mail() //{{{
|
|||||||
services.get("smtpService").defaultServer = server;
|
services.get("smtpService").defaultServer = server;
|
||||||
return value;
|
return value;
|
||||||
},
|
},
|
||||||
completer: function (context) [[s.key, s.serverURI] for ([,s] in Iterator(mail.smtpServers))],
|
completer: function (context) [[s.key, s.serverURI] for ([, s] in Iterator(mail.smtpServers))],
|
||||||
validator: Option.validateCompleter
|
validator: Option.validateCompleter
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: Muttator configuration file
|
" Language: Muttator configuration file
|
||||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
" Last Change: 2009 Aug 3
|
" Last Change: 2009 Aug 27
|
||||||
|
|
||||||
" TODO: make this muttator specific - shared liberator config?
|
" TODO: make this muttator specific - shared liberator config?
|
||||||
|
|
||||||
@@ -28,11 +28,10 @@ syn keyword muttatorCommand ab[breviate] ab[clear] addo[ns] addr[essbook] bN[ext
|
|||||||
\ h[elp] helpa[ll] ha[rdcopy] hi[ghlight] ia[bbrev] iabc[lear] im[ap] imapc[lear] ino[remap] iu[nmap] iuna[bbrev] javas[cript]
|
\ h[elp] helpa[ll] ha[rdcopy] hi[ghlight] ia[bbrev] iabc[lear] im[ap] imapc[lear] ino[remap] iu[nmap] iuna[bbrev] javas[cript]
|
||||||
\ js let loadplugins lpl m[ail] ma[rk] macros map mapc[lear] marks mes[sages] messc[lear] mkm[uttatorrc] mm[ap] mmapc[lear]
|
\ js let loadplugins lpl m[ail] ma[rk] macros map mapc[lear] marks mes[sages] messc[lear] mkm[uttatorrc] mm[ap] mmapc[lear]
|
||||||
\ mno[remap] move[to] mu[nmap] nm[ap] nmapc[lear] nno[remap] no[remap] norm[al] nu[nmap] optionu[sage] pa[geinfo] pagest[yle]
|
\ mno[remap] move[to] mu[nmap] nm[ap] nmapc[lear] nno[remap] no[remap] norm[al] nu[nmap] optionu[sage] pa[geinfo] pagest[yle]
|
||||||
\ pas pc[lose] pl[ay] pref[erences] prefs pw[d] q[uit] re[load] res[tart] run runt[ime] sav[eas] scrip[tnames] se[t]
|
\ pas pl[ay] pref[erences] prefs pw[d] q[uit] re[load] res[tart] run runt[ime] sav[eas] scrip[tnames] se[t] setg[lobal]
|
||||||
\ setg[lobal] setl[ocal] sil[ent] so[urce] st[op] sty[le] tN[ext] t[open] tab tabN[ext] tabc[lose] tabd[o] tabfir[st]
|
\ setl[ocal] sil[ent] so[urce] st[op] sty[le] tN[ext] t[open] tab tabN[ext] tabc[lose] tabd[o] tabfir[st] tabl[ast] tabn[ext]
|
||||||
\ tabl[ast] tabn[ext] tabp[revious] tabr[ewind] tbh[ide] tbs[how] tbt[oggle] time tn[ext] toolbarh[ide] toolbars[how]
|
\ tabp[revious] tabr[ewind] tbh[ide] tbs[how] tbt[oggle] time tn[ext] toolbarh[ide] toolbars[how] toolbart[oggle] tp[revious]
|
||||||
\ toolbart[oggle] tp[revious] una[bbreviate] unl[et] unm[ap] ve[rsion] vie[wsource] viu[sage] vm[ap] vmapc[lear] vno[remap]
|
\ una[bbreviate] unl[et] unm[ap] verb[ose] ve[rsion] vie[wsource] viu[sage] vm[ap] vmapc[lear] vno[remap] vu[nmap] w[rite] zo[om]
|
||||||
\ vu[nmap] w[rite] zo[om]
|
|
||||||
\ contained
|
\ contained
|
||||||
|
|
||||||
syn match muttatorCommand "!" contained
|
syn match muttatorCommand "!" contained
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
(this might change again, as this is REALLY inconsistent, and i don't
|
(this might change again, as this is REALLY inconsistent, and i don't
|
||||||
know if I like copying bugs)
|
know if I like copying bugs)
|
||||||
|
|
||||||
|
* add [c]:verbose[c]
|
||||||
* add [c]:window[c] to run a command in a new window
|
* add [c]:window[c] to run a command in a new window
|
||||||
* add ! version of :delbmarks to delete all bookmarks.
|
* add ! version of :delbmarks to delete all bookmarks.
|
||||||
* new "t" option for 'complete' to also switch to open tabs with :open
|
* new "t" option for 'complete' to also switch to open tabs with :open
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ const config = { //{{{
|
|||||||
},
|
},
|
||||||
|
|
||||||
get visualbellWindow() getBrowser().mPanelContainer,
|
get visualbellWindow() getBrowser().mPanelContainer,
|
||||||
styleableChrome: "chrome://browser/content/browser.xul",
|
styleableChrome: ["chrome://browser/content/browser.xul"],
|
||||||
|
|
||||||
autocommands: [["BookmarkAdd", "Triggered after a page is bookmarked"],
|
autocommands: [["BookmarkAdd", "Triggered after a page is bookmarked"],
|
||||||
["ColorScheme", "Triggered after a color scheme has been loaded"],
|
["ColorScheme", "Triggered after a color scheme has been loaded"],
|
||||||
@@ -249,7 +249,7 @@ const config = { //{{{
|
|||||||
|
|
||||||
let menu = document.getElementById("viewSidebarMenu");
|
let menu = document.getElementById("viewSidebarMenu");
|
||||||
|
|
||||||
for (let [,panel] in Iterator(menu.childNodes))
|
for (let [, panel] in Iterator(menu.childNodes))
|
||||||
{
|
{
|
||||||
if (compare(panel.label, arg))
|
if (compare(panel.label, arg))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: VIMperator configuration file
|
" Language: VIMperator configuration file
|
||||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
" Last Change: 2009 Aug 10
|
" Last Change: 2009 Aug 27
|
||||||
|
|
||||||
" TODO: make this vimperator specific - shared liberator config?
|
" TODO: make this vimperator specific - shared liberator config?
|
||||||
|
|
||||||
@@ -28,12 +28,12 @@ syn keyword vimperatorCommand ab[breviate] ab[clear] addo[ns] bN[ext] b[uffer] b
|
|||||||
\ frameo[nly] fw h[elp] helpa[ll] ha[rdcopy] hi[ghlight] hist[ory] hs ia[bbrev] iabc[lear] im[ap] imapc[lear] ino[remap]
|
\ frameo[nly] fw h[elp] helpa[ll] ha[rdcopy] hi[ghlight] hist[ory] hs ia[bbrev] iabc[lear] im[ap] imapc[lear] ino[remap]
|
||||||
\ iu[nmap] iuna[bbrev] javas[cript] js ju[mps] let loadplugins lpl ls ma[rk] macros map mapc[lear] marks mes[sages]
|
\ iu[nmap] iuna[bbrev] javas[cript] js ju[mps] let loadplugins lpl ls ma[rk] macros map mapc[lear] marks mes[sages]
|
||||||
\ messc[lear] mkv[imperatorrc] nm[ap] nmapc[lear] nno[remap] no[remap] noh[lsearch] norm[al] nu[nmap] o[pen] optionu[sage]
|
\ messc[lear] mkv[imperatorrc] nm[ap] nmapc[lear] nno[remap] no[remap] noh[lsearch] norm[al] nu[nmap] o[pen] optionu[sage]
|
||||||
\ pa[geinfo] pagest[yle] pas pc[lose] pl[ay] pref[erences] prefs pw[d] q[uit] qa[ll] qma[rk] qmarks quita[ll] re[draw]
|
\ pa[geinfo] pagest[yle] pas pl[ay] pref[erences] prefs pw[d] q[uit] qa[ll] qma[rk] qmarks quita[ll] re[draw] re[load]
|
||||||
\ re[load] reloada[ll] res[tart] run runt[ime] sav[eas] sb[ar] sb[open] sbcl[ose] scrip[tnames] se[t] setg[lobal] setl[ocal]
|
\ reloada[ll] res[tart] run runt[ime] sav[eas] sb[ar] sb[open] sbcl[ose] scrip[tnames] se[t] setg[lobal] setl[ocal] sideb[ar]
|
||||||
\ sideb[ar] sil[ent] so[urce] st[op] stopa[ll] sty[le] tN[ext] t[open] tab tabN[ext] tabc[lose] tabd[o] tabde[tach]
|
\ sil[ent] so[urce] st[op] stopa[ll] sty[le] tN[ext] t[open] tab tabN[ext] tabc[lose] tabd[o] tabde[tach] tabdu[plicate]
|
||||||
\ tabdu[plicate] tabe[dit] tabfir[st] tabl[ast] tabm[ove] tabn[ext] tabnew tabo[nly] tabopen tabp[revious] tabr[ewind] tabs
|
\ tabe[dit] tabfir[st] tabl[ast] tabm[ove] tabn[ext] tabnew tabo[nly] tabopen tabp[revious] tabr[ewind] tabs tbh[ide] tbs[how]
|
||||||
\ tbh[ide] tbs[how] tbt[oggle] time tn[ext] toolbarh[ide] toolbars[how] toolbart[oggle] tp[revious] u[ndo] una[bbreviate]
|
\ tbt[oggle] time tn[ext] toolbarh[ide] toolbars[how] toolbart[oggle] tp[revious] u[ndo] una[bbreviate] undoa[ll] unl[et]
|
||||||
\ undoa[ll] unl[et] unm[ap] ve[rsion] vie[wsource] viu[sage] vm[ap] vmap[clear] vno[remap] vu[nmap] w[rite] wc[lose] win[open]
|
\ unm[ap] verb[ose] ve[rsion] vie[wsource] viu[sage] vm[ap] vmap[clear] vno[remap] vu[nmap] w[rite] wc[lose] win[open]
|
||||||
\ winc[lose] wind[ow] wine[dit] wo[pen] wq wqa[ll] xa[ll] zo[om]
|
\ winc[lose] wind[ow] wine[dit] wo[pen] wq wqa[ll] xa[ll] zo[om]
|
||||||
\ contained
|
\ contained
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,6 @@ Enable _passthrough_ mode on *some* Google sites:
|
|||||||
Set the filetype to mail when editing email at Gmail:
|
Set the filetype to mail when editing email at Gmail:
|
||||||
|
|
||||||
\{nbsp}[c]:autocmd LocationChange .* :set editor=gvim\ -f[c] +
|
\{nbsp}[c]:autocmd LocationChange .* :set editor=gvim\ -f[c] +
|
||||||
\{nbsp}[c]:autocmd LocationChange mail\.google\.com :set editor="gvim -f -c 'set ft=mail'"[c]
|
\{nbsp}[c]:autocmd LocationChange mail\.google\.com :set editor="gvim -f -c $$'set ft=mail'$$"[c]
|
||||||
|
|
||||||
// vim: set filetype=asciidoc:
|
// vim: set filetype=asciidoc:
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ ________________________________________________________________________________
|
|||||||
|:pa| |:pageinfo| +
|
|:pa| |:pageinfo| +
|
||||||
||:pa[geinfo]||
|
||:pa[geinfo]||
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
Show various page information. See [c]:help 'pageinfo'[c] for available options.
|
Show various page information. See [c]:help $$'pageinfo'$$[c] for available options.
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|
||||||
@@ -375,4 +375,4 @@ the page's default style sheet is used.
|
|||||||
All author styling can be removed by setting the 'usermode' option.
|
All author styling can be removed by setting the 'usermode' option.
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|
||||||
// vim: set filetype=asciidoc fdm=marker:
|
// vim: set filetype=asciidoc:
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ is displayed as:
|
|||||||
class="hiddentag">:help</span> <span class="hiddentag">:h</span> <span
|
class="hiddentag">:help</span> <span class="hiddentag">:h</span> <span
|
||||||
class="hiddentag">help</span>
|
class="hiddentag">help</span>
|
||||||
|
|
||||||
<div class="key">:h[elp] <span class="argument">{subject}</span></div><br />
|
<span class="key">:h[elp] <span class="argument">{subject}</span></span><br />
|
||||||
<div class="key"><F1></div></p>
|
<span class="key"><F1></span></p>
|
||||||
<div class="quoteblock">
|
<div class="quoteblock">
|
||||||
<div class="quoteblock-content">
|
<div class="quoteblock-content">
|
||||||
<p>Open help window.
|
<p>Open help window.
|
||||||
|
|||||||
@@ -268,6 +268,7 @@ section::Ex{nbsp}commands[ex-cmd-index,:index]
|
|||||||
||[c]:undoall[c]|| Undo closing of all closed tabs +
|
||[c]:undoall[c]|| Undo closing of all closed tabs +
|
||||||
||[c]:unlet[c]|| Delete a variable +
|
||[c]:unlet[c]|| Delete a variable +
|
||||||
||[c]:unmap[c]|| Remove a mapping +
|
||[c]:unmap[c]|| Remove a mapping +
|
||||||
|
||[c]:verbose[c]|| Execute a command with 'verbose' set +
|
||||||
||[c]:version[c]|| Show version information +
|
||[c]:version[c]|| Show version information +
|
||||||
||[c]:viewsource[c]|| View source code of current document +
|
||[c]:viewsource[c]|| View source code of current document +
|
||||||
||[c]:viusage[c]|| List all mappings with a short description +
|
||[c]:viusage[c]|| List all mappings with a short description +
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
logo:[]
|
logo:[]
|
||||||
|
|
||||||
+++<div style="text-align: center;">+++
|
++++++
|
||||||
*First there was a Navigator, then there was an Explorer.
|
<p style="text-align: center; font-weight: bold;">
|
||||||
|
First there was a Navigator, then there was an Explorer.
|
||||||
Later it was time for a Konqueror. Now it's time for an Imperator, the
|
Later it was time for a Konqueror. Now it's time for an Imperator, the
|
||||||
VIMperator :)*
|
VIMperator :)
|
||||||
+++</div>+++
|
</p>
|
||||||
|
++++++
|
||||||
|
|
||||||
heading::Introduction[intro]
|
heading::Introduction[intro]
|
||||||
|
|
||||||
|
|||||||
@@ -129,7 +129,8 @@ Below is an overview of which modes each map command applies to:
|
|||||||
:imap :inoremap :iunmap :imapclear - Insert mode
|
:imap :inoremap :iunmap :imapclear - Insert mode
|
||||||
:cmap :cnoremap :cunmap :cmapclear - Command-line mode
|
:cmap :cnoremap :cunmap :cmapclear - Command-line mode
|
||||||
|
|
||||||
subsection::Key{nbsp}sequences[:<>,key-sequence]
|
// |<>| breaks doc validation
|
||||||
|
subsection::Key{nbsp}sequences[key-notation,key-sequence]
|
||||||
|
|
||||||
For most keys, the key-sequence is the same as the character you see when you
|
For most keys, the key-sequence is the same as the character you see when you
|
||||||
type that key, however there are some exceptions which allow for a much larger
|
type that key, however there are some exceptions which allow for a much larger
|
||||||
|
|||||||
@@ -550,7 +550,7 @@ ____
|
|||||||
|\'nomore'| |\'more'|
|
|\'nomore'| |\'more'|
|
||||||
||'more'|| boolean (default: on)
|
||'more'|| boolean (default: on)
|
||||||
____
|
____
|
||||||
Pause the message list window when more than one screen of listings is displayed
|
Pause the message list window when more than one screen of listings is displayed.
|
||||||
____
|
____
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
heading::Quick-start{nbsp}tutorial[tutorial]
|
heading::Quick-start{nbsp}tutorial[tutorial]
|
||||||
|
|
||||||
+++<div style="text-align: center;">+++
|
++++++
|
||||||
*This is a quickstart tutorial to help get new users up and running in
|
<p style="text-align: center; font-weight: bold;">
|
||||||
Vimperator. It is not intended as a full reference explaining all features.*
|
This is a quickstart tutorial to help get new users up and running in
|
||||||
+++</div>+++
|
Vimperator. It is not intended as a full reference explaining all features.
|
||||||
|
</p>
|
||||||
|
++++++
|
||||||
|
|
||||||
If you've started using Vimperator from scratch (i.e., without any
|
If you've started using Vimperator from scratch (i.e., without any
|
||||||
customization), you should be looking at this help page in a relatively
|
customization), you should be looking at this help page in a relatively
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ ________________________________________________________________________________
|
|||||||
Redraws the screen. Useful to update the screen halfway executing a script or function.
|
Redraws the screen. Useful to update the screen halfway executing a script or function.
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|
||||||
|:norm| |:normal|
|
|:norm| |:normal|
|
||||||
||:norm[al][!] {commands}|| +
|
||:norm[al][!] {commands}|| +
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
@@ -55,6 +56,14 @@ history.
|
|||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
|:verb| |:verbose +
|
||||||
|
||:[count]verb[ose] {command}||
|
||||||
|
________________________________________________________________________________
|
||||||
|
Execute a command with 'verbose' set to [count]. If [count] is not specified
|
||||||
|
then 1 is used as the value.
|
||||||
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|
||||||
|:ve| |:version| +
|
|:ve| |:version| +
|
||||||
||:ve[rsion][!]||
|
||:ve[rsion][!]||
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ td span.tag {
|
|||||||
padding-top: 25px !important;
|
padding-top: 25px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.key {
|
span.key {
|
||||||
color: rgb(255, 0, 255); /* magenta */
|
color: rgb(255, 0, 255); /* magenta */
|
||||||
min-width: 120px; /* with 20px padding actually 140px */
|
min-width: 120px; /* with 20px padding actually 140px */
|
||||||
/*padding-bottom: 5px;*/
|
/*padding-bottom: 5px;*/
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ commands.addUserCommand(["regr[essions]"],
|
|||||||
commandline.updateOutputHeight = updateOutputHeight;
|
commandline.updateOutputHeight = updateOutputHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
function run ()
|
function run()
|
||||||
{
|
{
|
||||||
let now = Date.now();
|
let now = Date.now();
|
||||||
let totalTests = tests.length + functions.length;
|
let totalTests = tests.length + functions.length;
|
||||||
@@ -170,7 +170,7 @@ commands.addUserCommand(["regr[essions]"],
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
let testDescription = util.clip(test.cmds.join(" -> "), 80);
|
let testDescription = util.clip(test.cmds.join(" -> "), 80);
|
||||||
for (let [,cmd] in Iterator(test.cmds))
|
for (let [, cmd] in Iterator(test.cmds))
|
||||||
{
|
{
|
||||||
if (skipTests.indexOf(cmd) != -1)
|
if (skipTests.indexOf(cmd) != -1)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ const config = { //{{{
|
|||||||
// focusContent() focuses this widget gSongbirdWindowController takes care of the focus.
|
// focusContent() focuses this widget gSongbirdWindowController takes care of the focus.
|
||||||
get visualbellWindow() document.getElementById(this.mainWindowId),
|
get visualbellWindow() document.getElementById(this.mainWindowId),
|
||||||
|
|
||||||
styleableChrome: "chrome://gonzo/content/xul/mainplayer.xul",
|
styleableChrome: ["chrome://gonzo/content/xul/mainplayer.xul"],
|
||||||
|
|
||||||
autocommands: [["BookmarkAdd", "Triggered after a page is bookmarked"],
|
autocommands: [["BookmarkAdd", "Triggered after a page is bookmarked"],
|
||||||
["ColorScheme", "Triggered after a color scheme has been loaded"],
|
["ColorScheme", "Triggered after a color scheme has been loaded"],
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ function Library() // {{{
|
|||||||
/////////////////////////////////////////////////////////////////////////////{{{
|
/////////////////////////////////////////////////////////////////////////////{{{
|
||||||
|
|
||||||
// TODO: return some actually useful objects. ;-)
|
// TODO: return some actually useful objects. ;-)
|
||||||
return {
|
return {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array of all the artist names in the main library.
|
* Returns an array of all the artist names in the main library.
|
||||||
@@ -65,7 +65,7 @@ function Library() // {{{
|
|||||||
.map(function (track) track.getProperty(SBProperties.trackName));
|
.map(function (track) track.getProperty(SBProperties.trackName));
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
//}}}
|
//}}}
|
||||||
} // }}}
|
} // }}}
|
||||||
|
|
||||||
|
|||||||
@@ -327,7 +327,7 @@ function Player() // {{{
|
|||||||
{
|
{
|
||||||
let pages = player.getMediaPages();
|
let pages = player.getMediaPages();
|
||||||
|
|
||||||
for ([,page] in Iterator(pages))
|
for ([, page] in Iterator(pages))
|
||||||
{
|
{
|
||||||
if (util.compareIgnoreCase(arg, page.contentTitle) == 0)
|
if (util.compareIgnoreCase(arg, page.contentTitle) == 0)
|
||||||
{
|
{
|
||||||
@@ -609,7 +609,7 @@ function Player() // {{{
|
|||||||
return tracksList;
|
return tracksList;
|
||||||
},
|
},
|
||||||
|
|
||||||
searchView: function searchView (args)
|
searchView: function searchView(args)
|
||||||
{
|
{
|
||||||
let currentView = _SBGetCurrentView();
|
let currentView = _SBGetCurrentView();
|
||||||
let mediaItemList = currentView.mediaList;
|
let mediaItemList = currentView.mediaList;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
" Vim syntax file
|
" Vim syntax file
|
||||||
" Language: Xulmus configuration file
|
" Language: Xulmus configuration file
|
||||||
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
" Maintainer: Doug Kearns <dougkearns@gmail.com>
|
||||||
" Last Change: 2009 Aug 3
|
" Last Change: 2009 Aug 27
|
||||||
|
|
||||||
" TODO: make this xulmus specific - shared liberator config?
|
" TODO: make this xulmus specific - shared liberator config?
|
||||||
|
|
||||||
@@ -29,14 +29,14 @@ syn keyword xulmusCommand ab[breviate] ab[clear] addo[ns] bN[ext] b[uffer] ba[ck
|
|||||||
\ hist[ory] hs ia[bbrev] iabc[lear] im[ap] imapc[lear] ino[remap] iu[nmap] iuna[bbrev] javas[cript] js ju[mps] let load
|
\ hist[ory] hs ia[bbrev] iabc[lear] im[ap] imapc[lear] ino[remap] iu[nmap] iuna[bbrev] javas[cript] js ju[mps] let load
|
||||||
\ loadplugins lpl ls ma[rk] macros map mapc[lear] marks mediav[iew] mes[sages] messc[lear] mkv[imperatorrc] mkx[ulmusrc]
|
\ loadplugins lpl ls ma[rk] macros map mapc[lear] marks mediav[iew] mes[sages] messc[lear] mkv[imperatorrc] mkx[ulmusrc]
|
||||||
\ nm[ap] nmap[clear] nno[remap] no[remap] noh[lsearch] norm[al] nu[nmap] o[pen] optionu[sage] pa[geinfo] pagest[yle] pas
|
\ nm[ap] nmap[clear] nno[remap] no[remap] noh[lsearch] norm[al] nu[nmap] o[pen] optionu[sage] pa[geinfo] pagest[yle] pas
|
||||||
\ pc[lose] pl[ay] playern[ext] playerp[lay] playerpa[use] playerpr[ev] players[top] pm[ap] pmap[clear] pno[remap]
|
\ pl[ay] playern[ext] playerp[lay] playerpa[use] playerpr[ev] players[top] pm[ap] pmap[clear] pno[remap] pref[erences] prefs
|
||||||
\ pref[erences] prefs pu[nmap] pw[d] q[uit] qa[ll] qma[rk] qmarks queue quita[ll] re[draw] re[load] reloada[ll] res[tart] run
|
\ pu[nmap] pw[d] q[uit] qa[ll] qma[rk] qmarks queue quita[ll] re[draw] re[load] reloada[ll] res[tart] run runt[ime] sav[eas]
|
||||||
\ runt[ime] sav[eas] sb[ar] sb[open] sbcl[ose] scrip[tnames] se[t] see[k] setg[lobal] setl[ocal] sideb[ar] sil[ent] sort[view]
|
\ sb[ar] sb[open] sbcl[ose] scrip[tnames] se[t] see[k] setg[lobal] setl[ocal] sideb[ar] sil[ent] sort[view] so[urce] st[op]
|
||||||
\ so[urce] st[op] stopa[ll] sty[le] tN[ext] t[open] tab tabN[ext] tabc[lose] tabd[o] tabde[tach] tabdu[plicate] tabe[dit]
|
\ stopa[ll] sty[le] tN[ext] t[open] tab tabN[ext] tabc[lose] tabd[o] tabde[tach] tabdu[plicate] tabe[dit] tabfir[st] tabl[ast]
|
||||||
\ tabfir[st] tabl[ast] tabm[ove] tabn[ext] tabnew tabo[nly] tabopen tabp[revious] tabr[ewind] tabs tbh[ide] tbs[how]
|
\ tabm[ove] tabn[ext] tabnew tabo[nly] tabopen tabp[revious] tabr[ewind] tabs tbh[ide] tbs[how] tbt[oggle] time tn[ext]
|
||||||
\ tbt[oggle] time tn[ext] toolbarh[ide] toolbars[how] toolbart[oggle] tp[revious] u[ndo] una[bbreviate] undoa[ll] unl[et]
|
\ toolbarh[ide] toolbars[how] toolbart[oggle] tp[revious] u[ndo] una[bbreviate] undoa[ll] unl[et] unm[ap] verb[ose] ve[rsion]
|
||||||
\ unm[ap] ve[rsion] vie[wsource] viu[sage] vm[ap] vmap[clear] vno[remap] vol[ume] vu[nmap] w[rite] wc[lose] win[open]
|
\ vie[wsource] viu[sage] vm[ap] vmap[clear] vno[remap] vol[ume] vu[nmap] w[rite] wc[lose] win[open] winc[lose] wine[dit]
|
||||||
\ winc[lose] wine[dit] wo[pen] wq wqa[ll] xa[ll] zo[om]
|
\ wo[pen] wq wqa[ll] xa[ll] zo[om]
|
||||||
\ contained
|
\ contained
|
||||||
|
|
||||||
syn match xulmusCommand "!" contained
|
syn match xulmusCommand "!" contained
|
||||||
|
|||||||
@@ -100,6 +100,6 @@ Enable _passthrough_ mode on *some* Google sites:
|
|||||||
Set the filetype to mail when editing email at Gmail:
|
Set the filetype to mail when editing email at Gmail:
|
||||||
|
|
||||||
\{nbsp}[c]:autocmd LocationChange .* :set editor=gvim\ -f[c] +
|
\{nbsp}[c]:autocmd LocationChange .* :set editor=gvim\ -f[c] +
|
||||||
\{nbsp}[c]:autocmd LocationChange mail\.google\.com :set editor="gvim -f -c 'set ft=mail'"[c]
|
\{nbsp}[c]:autocmd LocationChange mail\.google\.com :set editor="gvim -f -c $$'set ft=mail'$$"[c]
|
||||||
|
|
||||||
// vim: set filetype=asciidoc:
|
// vim: set filetype=asciidoc:
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ ________________________________________________________________________________
|
|||||||
|:pa| |:pageinfo| +
|
|:pa| |:pageinfo| +
|
||||||
||:pa[geinfo]||
|
||:pa[geinfo]||
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
Show various page information. See [c]:help 'pageinfo'[c] for available options.
|
Show various page information. See [c]:help $$'pageinfo'$$[c] for available options.
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|
||||||
@@ -375,4 +375,4 @@ the page's default style sheet is used.
|
|||||||
All author styling can be removed by setting the 'usermode' option.
|
All author styling can be removed by setting the 'usermode' option.
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|
||||||
// vim: set filetype=asciidoc fdm=marker:
|
// vim: set filetype=asciidoc:
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ is displayed as:
|
|||||||
class="hiddentag">:help</span> <span class="hiddentag">:h</span> <span
|
class="hiddentag">:help</span> <span class="hiddentag">:h</span> <span
|
||||||
class="hiddentag">help</span>
|
class="hiddentag">help</span>
|
||||||
|
|
||||||
<div class="key">:h[elp] <span class="argument">{subject}</span></div><br />
|
<span class="key">:h[elp] <span class="argument">{subject}</span></span><br />
|
||||||
<div class="key"><F1></div></p>
|
<span class="key"><F1></span></p>
|
||||||
<div class="quoteblock">
|
<div class="quoteblock">
|
||||||
<div class="quoteblock-content">
|
<div class="quoteblock-content">
|
||||||
<p>Open help window.
|
<p>Open help window.
|
||||||
|
|||||||
@@ -314,6 +314,7 @@ section::Ex{nbsp}commands[ex-cmd-index,:index]
|
|||||||
||[c]:undoall[c]|| Undo closing of all closed tabs +
|
||[c]:undoall[c]|| Undo closing of all closed tabs +
|
||||||
||[c]:unlet[c]|| Delete a variable +
|
||[c]:unlet[c]|| Delete a variable +
|
||||||
||[c]:unmap[c]|| Remove a mapping +
|
||[c]:unmap[c]|| Remove a mapping +
|
||||||
|
||[c]:verbose[c]|| Execute a command with 'verbose' set +
|
||||||
||[c]:version[c]|| Show version information +
|
||[c]:version[c]|| Show version information +
|
||||||
||[c]:viewsource[c]|| View source code of current document +
|
||[c]:viewsource[c]|| View source code of current document +
|
||||||
||[c]:viusage[c]|| List all mappings with a short description +
|
||[c]:viusage[c]|| List all mappings with a short description +
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
LOGO
|
logo:[]
|
||||||
|
|
||||||
section::Introduction[intro]
|
section::Introduction[intro]
|
||||||
|
|
||||||
|
|||||||
@@ -141,7 +141,8 @@ Below is an overview of which modes each map command applies to:
|
|||||||
:imap :inoremap :iunmap :imapclear - Insert mode
|
:imap :inoremap :iunmap :imapclear - Insert mode
|
||||||
:cmap :cnoremap :cunmap :cmapclear - Command-line mode
|
:cmap :cnoremap :cunmap :cmapclear - Command-line mode
|
||||||
|
|
||||||
subsection::Key{nbsp}sequences[:<>,key-sequence]
|
// |<>| breaks doc validation
|
||||||
|
subsection::Key{nbsp}sequences[key-notation,key-sequence]
|
||||||
|
|
||||||
For most keys, the key-sequence is the same as the character you see when you
|
For most keys, the key-sequence is the same as the character you see when you
|
||||||
type that key, however there are some exceptions which allow for a much larger
|
type that key, however there are some exceptions which allow for a much larger
|
||||||
|
|||||||
@@ -537,7 +537,7 @@ ____
|
|||||||
|\'nomore'| |\'more'|
|
|\'nomore'| |\'more'|
|
||||||
||'more'|| boolean (default: on)
|
||'more'|| boolean (default: on)
|
||||||
____
|
____
|
||||||
Pause the message list window when more than one screen of listings is displayed
|
Pause the message list window when more than one screen of listings is displayed.
|
||||||
____
|
____
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,251 +0,0 @@
|
|||||||
// Initial revision: Sun Jun 8 10:07:05 UTC 2008 (penryu)
|
|
||||||
|
|
||||||
heading::Quick-start{nbsp}tutorial[tutorial]
|
|
||||||
|
|
||||||
+++<div style="text-align: center;">+++
|
|
||||||
*This is a quickstart tutorial to help get new users up and running in
|
|
||||||
Vimperator. It is not intended as a full reference explaining all features.*
|
|
||||||
+++</div>+++
|
|
||||||
|
|
||||||
If you've started using Vimperator from scratch (i.e., without any
|
|
||||||
customization), you should be looking at this help page in a relatively
|
|
||||||
bare-looking window. The menubar, navigation bar, and bookmark bars are hidden.
|
|
||||||
In case you missed the notice in the help:Introduction[intro.html], you can
|
|
||||||
regain these by issuing the command
|
|
||||||
|
|
||||||
\{nbsp}[c]:set go+=mTB<CR>[c]
|
|
||||||
|
|
||||||
where [m]<CR>[m] represents pressing the <Enter> or <Return> key.
|
|
||||||
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
|
|
||||||
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 'guioptions' in
|
|
||||||
help:options[options.html] for more information on this.
|
|
||||||
|
|
||||||
section::Vimperator's{nbsp}modal{nbsp}interface[modal]
|
|
||||||
|
|
||||||
Vimperator's power, like Vim's, comes from it's modal interface. Keys have
|
|
||||||
different meanings depending on which mode the browser is in. Vimperator has
|
|
||||||
several modes, but the 2 most important are ``Normal'' mode and
|
|
||||||
``Command-line'' mode.
|
|
||||||
|
|
||||||
When Vimperator starts, it is in Normal mode by default. This is probably where
|
|
||||||
you will spend the majority of your time.
|
|
||||||
|
|
||||||
The other core mode of Vimperator, Command-line mode, can be entered from
|
|
||||||
Normal mode by typing a \'[m]:[m]' (colon). You will frequently see Vimperator
|
|
||||||
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
|
|
||||||
[m]<Esc>[m] will also return you to Normal mode from most other modes in
|
|
||||||
Vimperator.
|
|
||||||
|
|
||||||
section::Getting{nbsp}help[getting-help]
|
|
||||||
|
|
||||||
Vim is a great editor but it's not much of a web browser. So even seasoned Vim
|
|
||||||
users will probably have to look at Vimperator documentation sooner or later.
|
|
||||||
Most of the documentation for Vimperator's features are easily found using the
|
|
||||||
[c]:help[c] command. For example, you can find help on the [c]:help[c] command
|
|
||||||
by typing
|
|
||||||
|
|
||||||
\{nbsp}[c]:help :help<CR>[c]
|
|
||||||
|
|
||||||
Similarly, help on configurable options is available with [c]:help
|
|
||||||
'{option_name}'[c]. (Note the single quotes around the option name as in Vim.)
|
|
||||||
Information on all available options is, predictably, [c]:help options[c].
|
|
||||||
|
|
||||||
And you can find out about the [m]gt[m] and [m]gT[m] mapping with
|
|
||||||
|
|
||||||
\{nbsp}[c]:help gt<CR>[c] +
|
|
||||||
\{nbsp}[c]:help gT<CR>[c]
|
|
||||||
|
|
||||||
Finally, in addition to the help system itself, [c]:exusage[c], [c]:viusage[c]
|
|
||||||
and [c]:optionusage[c] are useful quick-reference commands.
|
|
||||||
|
|
||||||
section::Mouseless[living-mouseless]
|
|
||||||
|
|
||||||
*-- or how I learned to stop worrying and love the 80+ buttons I already have.*
|
|
||||||
|
|
||||||
The efficiency of Vimperator, as with the legendary editor it was inspired by,
|
|
||||||
relies on the user being able to keep his fingers on the keyboard where they
|
|
||||||
can do the most good. While there are some areas where the mouse is clearly
|
|
||||||
superior at, such as GUI design or some games, Vimperator acts on the
|
|
||||||
assumption that a web browser doesn't have to be one of those.
|
|
||||||
|
|
||||||
Here are some areas where the mouse is typically considered indisposable, and
|
|
||||||
how Vimperator challenges this preconception.
|
|
||||||
|
|
||||||
section::Scrolling[keyboard-scrolling]
|
|
||||||
|
|
||||||
Scrolling the browser window is done with simple keystrokes:
|
|
||||||
|
|
||||||
* [m]j[m]/[m]k[m] --
|
|
||||||
scroll window down/up by one line, respectively
|
|
||||||
* [m]h[m]/[m]l[m] --
|
|
||||||
scroll window left/right
|
|
||||||
* [m]<Space>[m]/[m]<C-b>[m] --
|
|
||||||
scroll down/up by one page
|
|
||||||
* [m]<C-d>[m]/[m]<C-u>[m] --
|
|
||||||
scroll down/up by 1/2 page
|
|
||||||
|
|
||||||
Your standard buttons ([m]<Up>[m]/[m]<Down>[m]/[m]<PgUp>[m]/[m]<PgDn>[m]) will
|
|
||||||
also work as expected.
|
|
||||||
|
|
||||||
section::History{nbsp}and{nbsp}tabs[history-navigation,tab-navigation]
|
|
||||||
|
|
||||||
History navigation (e.g., ``Back'', ``Forward'') are done similarly to
|
|
||||||
scrolling.
|
|
||||||
|
|
||||||
* [m]<C-o>[m]/[m]<C-i>[m] --
|
|
||||||
move Back/Forward in the current window/tab's history, respectively
|
|
||||||
|
|
||||||
Move between tabs using these keystrokes which may also be familiar to tabbing
|
|
||||||
Vimmers.
|
|
||||||
|
|
||||||
* [m]gt[m]/[m]<C-n>[m] --
|
|
||||||
go to the next tab
|
|
||||||
* [m]gT[m]/[m]<C-p>[m] --
|
|
||||||
go to the previous tab
|
|
||||||
* [m]g0[m]/[m]g$[m] --
|
|
||||||
go to the first/last tab
|
|
||||||
* [m]d[m] --
|
|
||||||
close the active tab (delete the buffer)
|
|
||||||
|
|
||||||
To open a web page in a new tab, use the [c]:tabopen {url}[c]. To open a URL in
|
|
||||||
the current tab, use [c]:open[c]. The Normal mode mappings [m]t[m] and [m]o[m],
|
|
||||||
respectively, map to these commands, so the following pairs of sequences are
|
|
||||||
equivalent:
|
|
||||||
|
|
||||||
\{nbsp}[c]:open my.webmail.com<CR>[c] +
|
|
||||||
\{nbsp}[m]omy.webmail.com<CR>[m]
|
|
||||||
|
|
||||||
\{nbsp}[c]:tabopen vimperator.org<CR>[c] +
|
|
||||||
\{nbsp}[m]tvimperator.org<CR>[m]
|
|
||||||
|
|
||||||
section::Some{nbsp}hints{nbsp}about{nbsp}surfing...[hints-tutorial]
|
|
||||||
|
|
||||||
So now you can navigate around in Vimperator. But wait... how do you *open* a
|
|
||||||
page or tab linked in a web page? How do you ``click'' on all those links
|
|
||||||
without your tailed friend?
|
|
||||||
|
|
||||||
The answer is ``hints''. Activating hints displays a number next to every link
|
|
||||||
Vimperator can find. To follow the link, simply type the number corresponding
|
|
||||||
to the hint, a white number inside a red square by default.
|
|
||||||
|
|
||||||
For text links, there's an additional shortcut; you can type some text
|
|
||||||
contained in the link and Vimperator will search all the links it can find and
|
|
||||||
only hint the matching links, further narrowing down the list. If the text you
|
|
||||||
type uniquely identifies any given link, Vimperator will follow that link
|
|
||||||
immediately without any further user input.
|
|
||||||
|
|
||||||
Whichever way you choose to indicate your target link, once Vimperator has
|
|
||||||
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].
|
|
||||||
To activate QuickHint mode, press either [m]f[m] or [m]F[m]. The lower-case
|
|
||||||
[m]f[m] will open the resulting link in the current tab, while the upper-case
|
|
||||||
[m]F[m] will open it in a new tab.
|
|
||||||
|
|
||||||
To test it, try this link: http://vimperator.org/[Vimperator Homepage].
|
|
||||||
Activate QuickHint mode with [m]f[m] or [m]F[m] to highlight all currently
|
|
||||||
visible links. Then start typing the text of the link. The link should be
|
|
||||||
uniquely identified soon, and Vimperator will open it. Once you're done,
|
|
||||||
remember to use [m]<C-o>[m] (``History Back'') or [m]d[m] (``Delete Buffer'')
|
|
||||||
to return here, depending on which key you used to activate QuickHint mode.
|
|
||||||
|
|
||||||
section::Common{nbsp}issues[common-issues]
|
|
||||||
|
|
||||||
Say you get half-way done typing in a new URL, only to remember that you've
|
|
||||||
already got that page open in the previous tab. Your command line might look
|
|
||||||
something like this:
|
|
||||||
|
|
||||||
\{nbsp}[c]:open my.partial.url/fooba[c]
|
|
||||||
|
|
||||||
You can exit the command line and access the already loaded page with the
|
|
||||||
following:
|
|
||||||
|
|
||||||
\{nbsp}[m]<Esc>gT[m]
|
|
||||||
|
|
||||||
section::Saving{nbsp}for{nbsp}posterity{nbsp}-{nbsp}vimperatorrc[vimperatorrc]
|
|
||||||
|
|
||||||
Once you get Vimperator set up with your desired options, maps, and commands,
|
|
||||||
you'll probably want them to be available the next time you open Vimperator.
|
|
||||||
Continuing the Vim theme, this is done with a vimperatorrc file.
|
|
||||||
|
|
||||||
To save your current settings and allow them to be loaded automatically
|
|
||||||
next time you start Vimperator, issue the [c]:mkv[c] command.
|
|
||||||
|
|
||||||
This will create the file *_$HOME_/.vimperatorrc* containing your settings.
|
|
||||||
It is a simple text file, just like a vimrc file and can be easily
|
|
||||||
edited to suit your preferences.
|
|
||||||
|
|
||||||
section::Find{nbsp}the{nbsp}exit{nbsp}nearest{nbsp}you[quitting-without-menus]
|
|
||||||
|
|
||||||
Vimperator supports all of Vim's classic methods of exiting.
|
|
||||||
|
|
||||||
* [c]:xall[c] -- command to quit and save the current browsing
|
|
||||||
session for next time; the default.
|
|
||||||
* [c]:qall[c] -- command to quit _without_ saving the session
|
|
||||||
* [m]ZZ[m] -- Normal mode mapping equivalent to [c]:xall[c]
|
|
||||||
* [m]ZQ[m] -- Normal mode mapping equivalent to [c]:qall[c]
|
|
||||||
|
|
||||||
section::Where{nbsp}did{nbsp}Firefox{nbsp}go?[whither-firefox]
|
|
||||||
|
|
||||||
You might feel pretty disoriented now. Don't worry. This is still Firefox
|
|
||||||
underneath. Here are some ways Vimperator allows Firefox to shine through. See
|
|
||||||
the [c]:help[c] for these commands and mappings for more information on how to
|
|
||||||
make the best use of them.
|
|
||||||
|
|
||||||
* [c]:dialog[c] --
|
|
||||||
To access some of Firefox's many dialog windows, you can use the
|
|
||||||
[c]:dialog[c] command. See [c]:help :dialog[c].
|
|
||||||
* [c]:bmarks[c] --
|
|
||||||
Vimperator provides a new interface to bookmarks, but they're still your
|
|
||||||
standard Firefox bookmarks under the hood. [c]:bmark[c] will add a new
|
|
||||||
bookmark, while [c]:bmarks[c] will list the bookmarks currently defined.
|
|
||||||
* [c]:history[c] --
|
|
||||||
It's exactly what it sounds like. This command will display a colorized,
|
|
||||||
scrollable and clickable list of the locations in Vimperator's history.
|
|
||||||
* [c]:emenu[c] --
|
|
||||||
Access the Firefox menus through the Vimperator command line.
|
|
||||||
|
|
||||||
|
|
||||||
Feel free to explore at this point. If you use the [c]:tabopen[c] command,
|
|
||||||
remember to use the [m]gt[m]/[m]gT[m] mappings to get back to this page. If
|
|
||||||
using the [c]:open[c] command, use the history keys (e.g., [m]H[m]) to return.
|
|
||||||
If you get hopelessly lost, just type [c]:help<CR>[c] and click the
|
|
||||||
``Tutorial'' link to return.
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: other sections?
|
|
||||||
|
|
||||||
|
|
||||||
section::Get{nbsp}me{nbsp}out{nbsp}of{nbsp}here![removal]
|
|
||||||
|
|
||||||
If you've given it a fair shot and determined ... TODO
|
|
||||||
|
|
||||||
The Vimperator way to do this is with the command [c]:addons[c]. Issuing this
|
|
||||||
command brings up the Firefox Add-ons dialog window; you can then remove it as
|
|
||||||
normal, selecting Vimperator from the list and clicking (yes, clicking)
|
|
||||||
*Uninstall*.
|
|
||||||
|
|
||||||
Alternatively, you can do this the old-fashioned way: re-enable the menubar,
|
|
||||||
as above, with [c]:set go+=m[c], and select *Add-ons* from the *Tools* menu.
|
|
||||||
|
|
||||||
|
|
||||||
section::I'm{nbsp}interested...but{nbsp}lost![support]
|
|
||||||
|
|
||||||
Vimperator has an energetic and growing user base. If you've run into a problem
|
|
||||||
that you can't seem to solve with Vimperator, or if you think you might have
|
|
||||||
found a bug, please let us know! There is support available on the
|
|
||||||
http://vimperator.cutup.org/index.php?title=Main_Page[wiki], or in the
|
|
||||||
#vimperator IRC channel on http://freenode.net/[freenode].
|
|
||||||
|
|
||||||
If you have any feature requests or (even better) offers to help, we'd love to
|
|
||||||
hear from you as well. Developers work on Vimperator whenever possible, but we
|
|
||||||
are neither infinite nor omnipotent; please bear with us. If you can't wait for
|
|
||||||
us to get around to it, rest assured patches are welcome! See the
|
|
||||||
help:Developer[developer.html] page for more information.
|
|
||||||
|
|
||||||
// vim: set filetype=asciidoc:
|
|
||||||
@@ -55,6 +55,14 @@ history.
|
|||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
|:verb| |:verbose +
|
||||||
|
||:[count]verb[ose] {command}||
|
||||||
|
________________________________________________________________________________
|
||||||
|
Execute a command with 'verbose' set to [count]. If [count] is not specified
|
||||||
|
then 1 is used as the value.
|
||||||
|
________________________________________________________________________________
|
||||||
|
|
||||||
|
|
||||||
|:ve| |:version| +
|
|:ve| |:version| +
|
||||||
||:ve[rsion][!]||
|
||:ve[rsion][!]||
|
||||||
________________________________________________________________________________
|
________________________________________________________________________________
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ td span.tag {
|
|||||||
padding-top: 25px !important;
|
padding-top: 25px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.key {
|
span.key {
|
||||||
color: rgb(255, 0, 255); /* magenta */
|
color: rgb(255, 0, 255); /* magenta */
|
||||||
min-width: 120px; /* with 20px padding actually 140px */
|
min-width: 120px; /* with 20px padding actually 140px */
|
||||||
/*padding-bottom: 5px;*/
|
/*padding-bottom: 5px;*/
|
||||||
|
|||||||
Reference in New Issue
Block a user