diff --git a/common/content/buffer.js b/common/content/buffer.js index d0dcd17f..8534f4ee 100644 --- a/common/content/buffer.js +++ b/common/content/buffer.js @@ -1032,6 +1032,11 @@ function Buffer() //{{{ elem.contentWindow.focus(); return; } + else if (elemTagName == "input" && elem.getAttribute('type').toLowerCase() == "file") + { + commandline.input("Upload file: ", function (file) elem.value = file, {completer: completion.file, default: elem.value}); + return; + } elem.focus(); @@ -1137,6 +1142,11 @@ function Buffer() //{{{ offsetX = Number(coords[0]) + 1; offsetY = Number(coords[1]) + 1; } + else if (localName == "input" && elem.getAttribute('type').toLowerCase() == "file") + { + commandline.input("Upload file: ", function (file) elem.value = file, {completer: completion.file, default: elem.value}); + return; + } let ctrlKey = false, shiftKey = false; switch (where) diff --git a/common/content/completion.js b/common/content/completion.js index f1a31114..5592ec36 100644 --- a/common/content/completion.js +++ b/common/content/completion.js @@ -1445,15 +1445,17 @@ function Completion() //{{{ colorScheme: function colorScheme(context) { - // TODO: use path for the description? + let colors = []; + io.getRuntimeDirectories("colors").forEach(function (dir) { - context.fork(dir.path, 0, null, function (context) { - context.filter = dir.path + io.pathSeparator + context.filter; - completion.file(context); - context.title = ["Color Scheme"]; - context.quote = ["", function (text) text.replace(/\.vimp$/, ""), ""]; + io.readDirectory(dir).forEach(function (file) { + if (/\.vimp$/.test(file.leafName) && !colors.some(function (c) c.leafName == file.leafName)) + colors.push(file); }); }); + + context.title = ["Color Scheme", "Runtime Path"]; + context.completions = [[c.leafName.replace(/\.vimp$/, ""), c.parent.path] for ([,c] in Iterator(colors))] }, command: function command(context) diff --git a/common/content/ui.js b/common/content/ui.js index 18cb7059..a23e5de7 100644 --- a/common/content/ui.js +++ b/common/content/ui.js @@ -1201,6 +1201,8 @@ function CommandLine() //{{{ * for the user's input. * @... {string} promptHighlight - The HighlightGroup used for the * prompt. @default "Question" + * @... {string} default - The initial value that will be returned + * if the user presses straightaway. @default "" */ input: function _input(prompt, callback, extra) { @@ -1296,8 +1298,15 @@ function CommandLine() //{{{ // user pressed ENTER to carry out a command // user pressing ESCAPE is handled in the global onEscape // FIXME: should trigger "cancel" event + // FIXME: This should not be waiting, some kind of callback mechanism on completion would be better. if (events.isAcceptKey(key)) { + while (completions.context.incomplete) + { + liberator.threadYield(true); + command = this.command; + } + let mode = currentExtendedMode; // save it here, as modes.pop() resets it keepCommand = true; currentExtendedMode = null; // Don't let modes.pop trigger "cancel" diff --git a/vimperator/NEWS b/vimperator/NEWS index 8cd7d8b1..c33ef4b9 100644 --- a/vimperator/NEWS +++ b/vimperator/NEWS @@ -21,6 +21,8 @@ * IMPORTANT: 'verbose' is now by default at 1, set to 0 to not show any status messages. * IMPORTANT: $VIMPERATOR_HOME is no longer used. + * Selecting an with hints now causes the commandline to prompt + for file input (instead of doing nothing). * [count] now goes to the [count]th next tab rather than the [count]th tab. * add ~/.vimperator/info/{profile}/, similar to viminfo * add $VIMPERATOR_RUNTIME, $VIMPERATOR_INIT diff --git a/vimperator/TODO b/vimperator/TODO index c2175204..d6f0d711 100644 --- a/vimperator/TODO +++ b/vimperator/TODO @@ -39,6 +39,8 @@ BUGS: - URLs in :ls output are no longer hyperlinks FEATURES: +9 change the extension ID to vimperator@vimperator.org rather than + vimperator@mozdev.org 9 finish :help TODOs 9 fix local options 9 adaptive timeout for auto-completions, :set completions can be updated more often than