feat(): Begin bash completion functions and os
script
This commit is contained in:
parent
a09d060593
commit
4c114c7ee4
50
completion/bash_template.sh
Normal file
50
completion/bash_template.sh
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
[[ "$1" != "" ]] || {
|
||||||
|
echo "Usage: source bash_template.sh <scriptname>"
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ "$1" = "" ]] || {
|
||||||
|
_pm()
|
||||||
|
{
|
||||||
|
local cur prev
|
||||||
|
local IFS=$'\n'
|
||||||
|
|
||||||
|
# Retrieve the original value
|
||||||
|
local width=$(bind -v | sed -n 's/^set completion-display-width //p')
|
||||||
|
|
||||||
|
if [[ $width -ne 0 ]]; then
|
||||||
|
# Change the readline variable
|
||||||
|
bind "set completion-display-width 0"
|
||||||
|
# On the first tab press, expand a common prefix
|
||||||
|
# On the second tab press, list out options
|
||||||
|
# Any subsequent tab presses cycle through these options
|
||||||
|
bind "set show-all-if-ambiguous on"
|
||||||
|
bind "set menu-complete-display-prefix on"
|
||||||
|
bind "TAB: menu-complete"
|
||||||
|
bind "set colored-completion-prefix on"
|
||||||
|
bind "set colored-stats on"
|
||||||
|
|
||||||
|
# Set up PROMPT_COMMAND to reset itself to its current value
|
||||||
|
PROMPT_COMMAND="PROMPT_COMMAND=$(printf %q "$PROMPT_COMMAND")"
|
||||||
|
|
||||||
|
# Set up PROMPT_COMMAND to reset the readline variable
|
||||||
|
PROMPT_COMMAND+="; bind 'set completion-display-width $width'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cur=${COMP_WORDS[COMP_CWORD]}
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
|
||||||
|
# Get all options from omelette
|
||||||
|
#COMPREPLY=( $(compgen -W '$(./'$1' --compbash --compgen "${COMP_CWORD}" "${prev}" "${COMP_LINE}")' -- "$cur") )
|
||||||
|
|
||||||
|
# Get all options from commander
|
||||||
|
COMPREPLY=( $(compgen -W '$(./'$1' compgen --shell bash)' -- "$cur") )
|
||||||
|
|
||||||
|
# If no options available, print files and folders
|
||||||
|
if [ ${#COMPREPLY[@]} -eq 0 ]; then
|
||||||
|
COMPREPLY=( $(compgen -f -o default -o plusdirs $cur) )
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
complete -F _pm $1
|
||||||
|
}
|
44
os
Executable file
44
os
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const This = require('./this');
|
||||||
|
|
||||||
|
class Os extends This {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.version = '0.0.1';
|
||||||
|
this.description = 'Shows informations about the operating system';
|
||||||
|
super.init(); // initialize commander with overridden version and description
|
||||||
|
}
|
||||||
|
|
||||||
|
info() {
|
||||||
|
/**
|
||||||
|
* @program()
|
||||||
|
* @command()
|
||||||
|
*/
|
||||||
|
console.warn(`Function ${this._getCurrentFunctionName()} not implemented`);
|
||||||
|
}
|
||||||
|
|
||||||
|
check() {
|
||||||
|
/**
|
||||||
|
* @program()
|
||||||
|
* @command()
|
||||||
|
*/
|
||||||
|
console.warn(`Function ${this._getCurrentFunctionName()} not implemented`);
|
||||||
|
}
|
||||||
|
|
||||||
|
checkEnv() {
|
||||||
|
/**
|
||||||
|
* @program()
|
||||||
|
* @command()
|
||||||
|
*/
|
||||||
|
console.warn(`Function ${this._getCurrentFunctionName()} not implemented`);
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
super.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// main
|
||||||
|
const os = new Os();
|
||||||
|
os.start();
|
27
this
27
this
|
@ -1,5 +1,6 @@
|
||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const os = require('os');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { Command } = require('commander');
|
const { Command } = require('commander');
|
||||||
const shell = require('shelljs');
|
const shell = require('shelljs');
|
||||||
|
@ -28,6 +29,16 @@ class This {
|
||||||
outputError: (str, write) => write(this._echoInRed(str)),
|
outputError: (str, write) => write(this._echoInRed(str)),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// add functions for shell completion
|
||||||
|
this.program
|
||||||
|
.command('compgen')
|
||||||
|
.option('-s, --shell <name>', 'You can select between [bash]', 'bash')
|
||||||
|
.action((arg) => {
|
||||||
|
const words = this.listMethods();
|
||||||
|
console.log(words.join(os.EOL));
|
||||||
|
return process.exit();
|
||||||
|
});
|
||||||
|
|
||||||
// dynamically add all methods with appropriate docstring to commander
|
// dynamically add all methods with appropriate docstring to commander
|
||||||
this.listMethods().forEach((method) => {
|
this.listMethods().forEach((method) => {
|
||||||
this._parseDocStringToCmd(this[method]);
|
this._parseDocStringToCmd(this[method]);
|
||||||
|
@ -40,7 +51,7 @@ class This {
|
||||||
|
|
||||||
listMethods() {
|
listMethods() {
|
||||||
const methods = Object.getOwnPropertyNames(Object.getPrototypeOf(this)).filter(
|
const methods = Object.getOwnPropertyNames(Object.getPrototypeOf(this)).filter(
|
||||||
(prop) => typeof this[prop] === 'function' && prop !== 'constructor' && !prop.startsWith('_')
|
(prop) => typeof this[prop] === 'function' && prop !== 'constructor' && prop !== 'start' && !prop.startsWith('_')
|
||||||
);
|
);
|
||||||
return methods;
|
return methods;
|
||||||
}
|
}
|
||||||
|
@ -69,15 +80,13 @@ class This {
|
||||||
/**
|
/**
|
||||||
* @program()
|
* @program()
|
||||||
*/
|
*/
|
||||||
if (this.debugLevel > 0) {
|
|
||||||
this.program.exitOverride();
|
this.program.exitOverride();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.program.parse();
|
this.program.parse();
|
||||||
|
|
||||||
// show help even if there are no commands registered
|
if (this.debugLevel == 0) {
|
||||||
if (this.program.commands.length == 0) {
|
process.exit(1);
|
||||||
this.program.outputHelp();
|
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// this.execCmd(`${this.workingDir}/log echo '\n'`);
|
// this.execCmd(`${this.workingDir}/log echo '\n'`);
|
||||||
|
@ -93,14 +102,6 @@ class This {
|
||||||
this.execCmd(`${this.workingDir}/log echo 'Options: ${opts}'`);
|
this.execCmd(`${this.workingDir}/log echo 'Options: ${opts}'`);
|
||||||
this.execCmd(`${this.workingDir}/log echo 'Remaining arguments: ${args}'`);
|
this.execCmd(`${this.workingDir}/log echo 'Remaining arguments: ${args}'`);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
this.program.parse();
|
|
||||||
|
|
||||||
// show help even if there are no commands registered
|
|
||||||
if (this.program.commands.length == 0) {
|
|
||||||
this.program.outputHelp();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
execCmd(cmd) {
|
execCmd(cmd) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user