termhelper

1.1.0 • Public • Published

Terminal Helper Author: Elijah Cowley Website: http://au.epcit.biz

This module is designed to allow both keypress and string event firing and includes some helper methods for terminal commands. I have also included basic processing of arrow keys and backspace.

Tested on Debian Linux, please contact me via email [ ecowley@epcit.biz ] or using GitHub [ https://github.com/greywolf001au/termhelper ] to report any bugs or get help using this modules.


** Install

Install this module using NPM or copy the package to your applications '/node_modules' directory.

npm install termhelper

** Useage

In the application files you would like to use this module add the following line:

var term = require('termhelper')

** Settings

The settings can be changed in termhelper.lib.js The main settings are described here for reference, other settings may be added in future versions.

Available Settings:

---------------------------------------------------------------------------------------------------
|      Setting      |    Default Value    |               Description
---------------------------------------------------------------------------------------------------
| Section: settings
---------------------------------------------------------------------------------------------------
echoKeys                true                 Outputs key on key stroke
prompt                  '> '                 Sets the prompt string
termHistory             true                 Keep command history
allowKill               true                 Allow CTRL + C to kill app
lineEndOut              '\n'                 Line end charater to output
lineEndIn               '\n'                 Line end charater to capture from input
appendEndChar           true                 Append lineEnd character to event data
debug                   false                Outputs keystroke data
allowRun                true                 Allow running of shell commands
date_format             0                    Sets the format to use for dates
date_splitter           '-'                  Sets the default date splitter (for prompt)
locale                  'default'            Sets the language locale (See locale folder for supported locale files, currently supports 'default' only)
locale_path             './locale'           Sets the path to the locale file (without trailing slash)
processing              true                 Turns on or off key and line processing (false will stop all commands from being processed)
proc_blank_line         true                 Turn on or off the default processing of a blank line
use_old_stdin_stream    false                Use old stdin processing stream for keypress module (set to true if you are using an older version of keypress)
exit                    0                    Override an exit value or inject a method (see notes below for options)
---------------------------------------------------------------------------------------------------
| Section: log
---------------------------------------------------------------------------------------------------  
path              ''                   Set the path for storing logs
dir_mode          '0775'               Use mode when creating paths
level             3                    Logging level (input, output, both)
extension         'log'                Create log files with this extension
format            0                    Date format for log filenames
hourly            false                Create a new log file each hour
timestamp         true                 Place timestamp before each log entry
date_splitter     '-'                  Use this date splitter for log files
---------------------------------------------------------------------------------------------------
| Section: alias
---------------------------------------------------------------------------------------------------
run               'run'                Change the terminal run command
echo              'echo'               Change the terminal echo command
exit              'exit'               Change the terminal exit command
prompt            'prompt'             Change the terminal prompt command
version           'version'            Change the terminal version command
show              'show'               Change the terminal show command
time              'time'               Output time to terminal
date              'date'               Output date to terminal
clear             'clear'              Clear terminal
uptime            'uptime'             Display how long the application has been running (most accurate if the termhelper object is initialised early in your application)
unixTime          'utime'              Display the time as a unix timestamp
__clock           '%*'                 Start the clock (only works in a prompt)
console           'console'            Display which console we are using
===================================================================================================

---------------------------------------------------------------------------------------------------
| Result        |  Identifier    |     Default Value
---------------------------------------------------------------------------------------------------
| Section: globalVars
---------------------------------------------------------------------------------------------------
Date              '%d'                 'exports.formatDate(thlib.settings.date_format, thlib.settings.date_splitter)'
Current Path      '%p'                 '__dirname'
Locale Time       '%t'                 'd.toLocaleTimeString()'
History Position  '%@'                 'thlib.input.history_position'
History Length    '%#'                 'thlib.input.history.length'
Version           '%v'                 'exports.version()'
Unix Time         '%u'                 'd.getUnixTime()'
Uptime            '%uptime'            'exports.counterFormat(exports.uptime()).toString()'
Start Clock       '%*'                 ''

---------------------------------------------------------------------------------------------------
| Section: input
---------------------------------------------------------------------------------------------------
This section should not be changed unless you know what you are doing and change the code
to use the new object for line & key processing. New variables can be added to the object if you require
or your methods can manipulate these strings before or after default processing.
---------------------------------------------------------------------------------------------------
| Section: temp
---------------------------------------------------------------------------------------------------
Stores a temporary copy of the input string for xconsole and some variables which may be used in future.
These are added by termhelper at run time to save adding to many unchangeable configuartion values in the conf file.

Settings can be modified in the following manner: term.set(section, key, value)

Where 'section' refers to the section key, current sections are: settings, log, alias & locale If a section is null the default section of 'settings' will be used. Key refers to the settings key to change, key may be an object of key/value pairs. Value is the new value for the setting.

Example:

term.set('settings', 'prompt', 'node.js> ');

or

term.set(null, {
  prompt: 'node.js> ',
  debug: true
});

Notes: To load a configuration file use term.set('settings', 'conf_path', '/path/to/my/conf') to load a configuration file (will not be read from config file to save recursive loads ocurring). To have no prompt displayed set the prompt to a blank string or null.

The exit setting can be a string overriding the exit message by passing a string, the exit code if a number is given, a function to call prior to exiting the application or
the following object:
{
  exitCode: exitCode,
  message: message,
  logLevel: logLevel,
  logMessage: logMessage
}

** Processed Keys

|   Key   |           Default Function             |
----------------------------------------------------
  Up            Arrow Scroll back through history
  Down          Arrow Scroll forward through history
  Left          Arrow Move cursor back
  Right         Arrow Move cursor forward
  Backspace     Delete character behind cursor
  Delete        Delete character infront of cursor
  Enter         Process line
  CTRL+C        Exit application
  Home          Move cursor to start of line
  End           Move cursor to end of line
  CTRL+LEFT		Move cursor to the backwards to the start of each new word
  CTRL+RIGHT    Move cursor forward to the start of each new word

** Events

Events can be set for a single keypress and on line data using the following:

term.on('before_proc', function(ch, key) {
  Add your code here....
}

term.on('keypress', function(ch, key) {
  Add your code here....
}

term.on('line', function(data) {
  Add your code here....
}

Default key press processing can be bypassed by returning false from your event handler. Example:

term.on('before_proc', function(ch, key) {
  if (key && key.name === 'home') {
    Add code here....
    return false;
  }
  return { home: false }
}

Note: bypassing command processing will cause all key press events to be bypassed including enter and CTRL+C, to skip individual keypress events return an object containing keyname: false as shown for the home key above.

Line processing will give an invalid command when false is returned from the event handler method however if there is a matching command alias, return true to signal that a command has been processed. This will stop the default command from running. Optionally an object can be returned containing a key named 'valid' and a boolean value showing if a valid command was typed. The prompt can be disabled for a command by returning an object with a 'prompt' key and the boolean value of false (see example.js)


** Available Methods

Several methods have been added to make working in the terminal easier

Method        |      Useage         |   Description                                                                    |
------------------------------------------------------------------------------------------------------------------------
Set              term.set(s, k, v)       Change section of termhelper.lib.js
On               term.on(evt, method)    Overwrite default event handler with custom method
Clear            term.Clear()            Clear terminal window
ClearLine        term.ClearLine()        Clear output from current line (clear prompt, does not clear input string)
getPrompt        term.getPrompt()        Returns the evaluated prompt string
Prompt           term.Prompt()           Output prompt string
Write            term.Write(text)        Send text to terminal
Writeln          term.Writeln(text)      Send text to terminal with line end out appended
CursorPos        term.CursorPos()        Returns an integer denoting cursor position
CursorTo         term.CursorTo(pos)      Move the cursor to a specified position on the line
Run              term.Run(command)       Run shell commands from your node apps
Eval             term.Eval(command)      Evaluate string as JavaScript
Echo             term.Echo(obj)          Parse an object and output to cli
log.set          term.log.set()          Set log options
log.Write        term.log.Write(data)    Write data to log file
log.Writeln      term.log.Writeln(data)  Write data to log and move to next line
Version          term.Version()          Return termhelper version number
Show             term.Show(key)          Return termhelper information (key denotes which peice of information to show e.g name, version etc)
formatDate       term.formatDate(f, s)   Return the date with the format 'f' using the splitter 's'

** Processed Input

Line inputs processed from the terminal (see aliases)


** Prompt String

The prompt string sets the prompt that is dispayed for command entry. The string can be a literal string or a JavaScript string to be evaluated. The prompt string can be changed by editing the settings.prompt variable in termhelper.lib.js, using the set method to change the settings.prompt variable or by calling the prompt alias at the command line.

You may also use the following notation to insert information to the prompt string (see globalVars for more info):

%d		The date with the format as defined in termhelper.lib.js
%p		The current command line path
%t		The time, this uses the systems locale time string
%v		Termhelper version number
%@		The command history position number (changes when cycling through history)
%#		The history length (command number)

Examples:

In termhelper.lib.js:

settings: {
  prompt: "%p [%@]> ";
  ...
}

In your application:

term.set("settings", "prompt", "[%d]%p> ");

On the command line:

prompt __dirname + '> ';

Note: The values set in these examples could be set using any of the prompt methods.


** App object

A blank object called app has been added to store custom variables for displaying in a prompt or other evaluated commands.

prompt this.app.name + "> "

** Module object

Contains details about the termhelper module for use with evaluated methods and commands

prompt this.module.name + " " + this.module.version + "> "

** Complimentary Modules

Colors: this module will allow terminal colors and styles to be used. To use with termhelper simply setup each as normal then use: term.write('test'.red); Or term.write(colors.red('test'));

** Other Projects *** AuroraChat Server A full featured IRCD like modular chat server with SSL and individual client encryption for secure group chat. Coming soon.

Package Sidebar

Install

npm i termhelper

Homepage

au.epcit.biz

Weekly Downloads

3

Version

1.1.0

License

MIT

Unpacked Size

99.5 kB

Total Files

11

Last publish

Collaborators

  • greywolf001au