Improved tab completion
This commit is contained in:
parent
1c03dfa5ce
commit
7a10aa73c2
2 changed files with 45 additions and 15 deletions
52
blash.js
52
blash.js
|
@ -148,26 +148,54 @@ function blash ()
|
|||
|
||||
this.prompt.focus();
|
||||
} else if ( key == 9 ) {
|
||||
var complete_type = '';
|
||||
|
||||
if ( this.prompt.value.match ( /\s/ ))
|
||||
if ( this.prompt.value.match ( /\s(.*)$/ ))
|
||||
{
|
||||
complete_type = 'file';
|
||||
} else {
|
||||
complete_type = 'cmd';
|
||||
var arg = RegExp.$1;
|
||||
var path = arg;
|
||||
var dirs = new Array();
|
||||
|
||||
for ( var i in this.json.directories )
|
||||
{
|
||||
if ( arg.match ( /^[^\/]/ ) )
|
||||
{
|
||||
path = this.path + '/' + arg;
|
||||
path = path.replace ( /\/+/g, '/' );
|
||||
}
|
||||
|
||||
if ( complete_type == 'cmd' )
|
||||
var re = new RegExp ( '^' + path + '[^/]*$' );
|
||||
|
||||
if ( this.json.directories[i].path.match ( re ))
|
||||
{
|
||||
dirs.push ({
|
||||
'name' : this.json.directories[i].path,
|
||||
'type' : this.json.directories[i].type,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if ( dirs.length == 0 )
|
||||
{
|
||||
this.cmdOut.innerHTML = '<br/>Sorry, no matches for `' + this.prompt.value + "'";
|
||||
} else if ( dirs.length == 1 ) {
|
||||
this.prompt.value = this.prompt.value.replace ( arg, dirs[0].name + (( dirs[0].type == 'directory' ) ? '/' : '' ));
|
||||
} else {
|
||||
this.cmdOut.innerHTML = '';
|
||||
|
||||
for ( var i in dirs )
|
||||
{
|
||||
this.cmdOut.innerHTML += "<br/>\n" + dirs[i].name;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var cmds = new Array();
|
||||
|
||||
for ( var i in shell.json.commands )
|
||||
for ( var i in this.json.commands )
|
||||
{
|
||||
var re = new RegExp ( '^' + this.prompt.value );
|
||||
|
||||
if ( shell.json.commands[i].name.match ( re ))
|
||||
if ( this.json.commands[i].name.match ( re ))
|
||||
{
|
||||
cmds.push ( shell.json.commands[i].name );
|
||||
cmds.push ( this.json.commands[i].name );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -181,14 +209,14 @@ function blash ()
|
|||
|
||||
for ( var i in cmds )
|
||||
{
|
||||
this.cmdOut.innerHTML = "<br/>\n" + cmds[i];
|
||||
this.cmdOut.innerHTML += "<br/>\n" + cmds[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.prompt.focus();
|
||||
}
|
||||
}
|
||||
|
||||
this.unescapePrompt = function ( prompt, sequences )
|
||||
{
|
||||
|
|
|
@ -164,6 +164,8 @@
|
|||
var out = '';
|
||||
var exists = false;
|
||||
|
||||
arg = arg.replace ( /\/$/, '' );
|
||||
|
||||
if ( !arg || arg.length == 0 )
|
||||
{
|
||||
var re = new RegExp ( '^' + shell.path + '[^/]+$' );
|
||||
|
|
Loading…
Reference in a new issue