Repository files navigation

FreePalestine.Dev

Shell Creator

MaintenancePython VersionPyPI version shields.ioBuild StatusDownloadsMIT license

This is a simple python library that can be used to create entire shells for CLI applications. It was originally a part of another application, and then I decided to split it and make it a library on its own. The shell has following features:

  • Python like arithmetic operators
  • Setting/Unsetting variables
  • Builtin commands for variable manipulation
  • Builtin support for if statements and while loops
  • Autocompletion for commands and variables
  • Colorful, with nice logging
  • Easily extensible with new commands through simple class inheritance

How to use

Help and Exiting

use the following commands to get help and exit:

  • help commands will give you the list of all commands in the shell
  • help variables will give you the list of all variables in the shell
  • exit to exit the shell

Data Types

The supported types are the same basic types of python. Those are:

  • Integers
  • Floats
  • Booleans (True or False)
  • Strings (single and double quoted, escaped by /)

Operators

The shell uses the same python arithmetic operators for convenience, it also maintains their precedence and associativity. The operators are:

OperatorDescription
**Exponent
-xUnary minus
*, /, //, %Multiplication, Division, Floor division, Modulus
+, -Addition, Subtraction
==, !=, >, >=, <, <=Comparisons
notLogical NOT
andLogical AND
orLogical OR

WARNING: Chaining comparison arguments will have a different effect from python. The shell will parse them one by one, in other words: a < b > c will be parsed as (a < b) > c rather than a < b and b > c

Variables

The shell can handle saving, deleting, and accessing variables in the following ways:

echo$varset var=$var2 + 485 * 12
echo"This is $var"unset$var

When dealing with variables pay attention to the following points:

  • Reading a shell variable must precede its name with a $.
  • Writing to a variable must NOT precede its name with a $.
  • Setting an existing variable will overwrite its existing value.
  • Unsetting or Echoing a non-existent variable will generate an error.

There are builtin variables, those are variables that can be set to and modified, but never unset. A library user can choose to add those as needed by using the function call shell.addBuiltinVariable

If and While

The shell supports if conditions and while loops, the syntax is as follows:

if $var1
command
command
elif $var2 > 50
command
else
command
command
end
while $var3 + 40 < $var4
command
end

Adding commands

The Shell Creator utilizes the great docopt library to build the commands of the shell (including the builtin ones). There's a base Command class that must be inherited and overridden to implement new commands. Example:

classReadFile(Command):
usage=''' read_file Usage: read_file -h read_file [--f FORMAT] FILE Options: -h, --help Print this help message -f FORMAT, --format=FORMAT The format of the file to read '''defaction(self):
print(self.args)
print(self.args['FORMAT'])
print(self.args['FILE'])
shell.addCommand('read_file', ReadFile)

for more info on other fields that can be overridden check the ShellCreator/Commands.py file

Styling and Logging

The shell uses logging for logging, with the namespace SHELL. It utilizes this formatter to better format and colorize logging. It also uses prompt_toolkit's styling to style the prompt itself. You can refer to the examples or to prompt_toolkit's documentation for more details

The logging format is as follows: self.logger.error('A logging message {}', value) where self refers to the command class you create.

Prerequisites and Installation

You can install by simply running pip3 install ShellCreator

The library depends on the following libraries:

  • Pygments
  • prompt_toolkit
  • docopt
  • pyparsing

About

A library to create command line interfaces.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

FreePalestine.Dev

Shell Creator

MaintenancePython VersionPyPI version shields.ioBuild StatusDownloadsMIT license

This is a simple python library that can be used to create entire shells for CLI applications. It was originally a part of another application, and then I decided to split it and make it a library on its own. The shell has following features:

  • Python like arithmetic operators
  • Setting/Unsetting variables
  • Builtin commands for variable manipulation
  • Builtin support for if statements and while loops
  • Autocompletion for commands and variables
  • Colorful, with nice logging
  • Easily extensible with new commands through simple class inheritance

How to use

Help and Exiting

use the following commands to get help and exit:

  • help commands will give you the list of all commands in the shell
  • help variables will give you the list of all variables in the shell
  • exit to exit the shell

Data Types

The supported types are the same basic types of python. Those are:

  • Integers
  • Floats
  • Booleans (True or False)
  • Strings (single and double quoted, escaped by /)

Operators

The shell uses the same python arithmetic operators for convenience, it also maintains their precedence and associativity. The operators are:

OperatorDescription
**Exponent
-xUnary minus
*, /, //, %Multiplication, Division, Floor division, Modulus
+, -Addition, Subtraction
==, !=, >, >=, <, <=Comparisons
notLogical NOT
andLogical AND
orLogical OR

WARNING: Chaining comparison arguments will have a different effect from python. The shell will parse them one by one, in other words: a < b > c will be parsed as (a < b) > c rather than a < b and b > c

Variables

The shell can handle saving, deleting, and accessing variables in the following ways:

echo$varset var=$var2 + 485 * 12
echo"This is $var"unset$var

When dealing with variables pay attention to the following points:

  • Reading a shell variable must precede its name with a $.
  • Writing to a variable must NOT precede its name with a $.
  • Setting an existing variable will overwrite its existing value.
  • Unsetting or Echoing a non-existent variable will generate an error.

There are builtin variables, those are variables that can be set to and modified, but never unset. A library user can choose to add those as needed by using the function call shell.addBuiltinVariable

If and While

The shell supports if conditions and while loops, the syntax is as follows:

if $var1
command
command
elif $var2 > 50
command
else
command
command
end
while $var3 + 40 < $var4
command
end

Adding commands

The Shell Creator utilizes the great docopt library to build the commands of the shell (including the builtin ones). There's a base Command class that must be inherited and overridden to implement new commands. Example:

classReadFile(Command):
usage=''' read_file Usage: read_file -h read_file [--f FORMAT] FILE Options: -h, --help Print this help message -f FORMAT, --format=FORMAT The format of the file to read '''defaction(self):
print(self.args)
print(self.args['FORMAT'])
print(self.args['FILE'])
shell.addCommand('read_file', ReadFile)

for more info on other fields that can be overridden check the ShellCreator/Commands.py file

Styling and Logging

The shell uses logging for logging, with the namespace SHELL. It utilizes this formatter to better format and colorize logging. It also uses prompt_toolkit's styling to style the prompt itself. You can refer to the examples or to prompt_toolkit's documentation for more details

The logging format is as follows: self.logger.error('A logging message {}', value) where self refers to the command class you create.

Prerequisites and Installation

You can install by simply running pip3 install ShellCreator

The library depends on the following libraries:

  • Pygments
  • prompt_toolkit
  • docopt
  • pyparsing

About

A library to create command line interfaces.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FreePalestine.Dev

Shell Creator

MaintenancePython VersionPyPI version shields.ioBuild StatusDownloadsMIT license

This is a simple python library that can be used to create entire shells for CLI applications. It was originally a part of another application, and then I decided to split it and make it a library on its own. The shell has following features:

  • Python like arithmetic operators
  • Setting/Unsetting variables
  • Builtin commands for variable manipulation
  • Builtin support for if statements and while loops
  • Autocompletion for commands and variables
  • Colorful, with nice logging
  • Easily extensible with new commands through simple class inheritance

How to use

Help and Exiting

use the following commands to get help and exit:

  • help commands will give you the list of all commands in the shell
  • help variables will give you the list of all variables in the shell
  • exit to exit the shell

Data Types

The supported types are the same basic types of python. Those are:

  • Integers
  • Floats
  • Booleans (True or False)
  • Strings (single and double quoted, escaped by /)

Operators

The shell uses the same python arithmetic operators for convenience, it also maintains their precedence and associativity. The operators are:

OperatorDescription
**Exponent
-xUnary minus
*, /, //, %Multiplication, Division, Floor division, Modulus
+, -Addition, Subtraction
==, !=, >, >=, <, <=Comparisons
notLogical NOT
andLogical AND
orLogical OR

WARNING: Chaining comparison arguments will have a different effect from python. The shell will parse them one by one, in other words: a < b > c will be parsed as (a < b) > c rather than a < b and b > c

Variables

The shell can handle saving, deleting, and accessing variables in the following ways:

echo$varset var=$var2 + 485 * 12
echo"This is $var"unset$var

When dealing with variables pay attention to the following points:

  • Reading a shell variable must precede its name with a $.
  • Writing to a variable must NOT precede its name with a $.
  • Setting an existing variable will overwrite its existing value.
  • Unsetting or Echoing a non-existent variable will generate an error.

There are builtin variables, those are variables that can be set to and modified, but never unset. A library user can choose to add those as needed by using the function call shell.addBuiltinVariable

If and While

The shell supports if conditions and while loops, the syntax is as follows:

if $var1
command
command
elif $var2 > 50
command
else
command
command
end
while $var3 + 40 < $var4
command
end

Adding commands

The Shell Creator utilizes the great docopt library to build the commands of the shell (including the builtin ones). There's a base Command class that must be inherited and overridden to implement new commands. Example:

classReadFile(Command):
usage=''' read_file Usage: read_file -h read_file [--f FORMAT] FILE Options: -h, --help Print this help message -f FORMAT, --format=FORMAT The format of the file to read '''defaction(self):
print(self.args)
print(self.args['FORMAT'])
print(self.args['FILE'])
shell.addCommand('read_file', ReadFile)

for more info on other fields that can be overridden check the ShellCreator/Commands.py file

Styling and Logging

The shell uses logging for logging, with the namespace SHELL. It utilizes this formatter to better format and colorize logging. It also uses prompt_toolkit's styling to style the prompt itself. You can refer to the examples or to prompt_toolkit's documentation for more details

The logging format is as follows: self.logger.error('A logging message {}', value) where self refers to the command class you create.

Prerequisites and Installation

You can install by simply running pip3 install ShellCreator

The library depends on the following libraries:

  • Pygments
  • prompt_toolkit
  • docopt
  • pyparsing

About

A library to create command line interfaces.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FreePalestine.Dev

Shell Creator

MaintenancePython VersionPyPI version shields.ioBuild StatusDownloadsMIT license

This is a simple python library that can be used to create entire shells for CLI applications. It was originally a part of another application, and then I decided to split it and make it a library on its own. The shell has following features:

  • Python like arithmetic operators
  • Setting/Unsetting variables
  • Builtin commands for variable manipulation
  • Builtin support for if statements and while loops
  • Autocompletion for commands and variables
  • Colorful, with nice logging
  • Easily extensible with new commands through simple class inheritance

How to use

Help and Exiting

use the following commands to get help and exit:

  • help commands will give you the list of all commands in the shell
  • help variables will give you the list of all variables in the shell
  • exit to exit the shell

Data Types

The supported types are the same basic types of python. Those are:

  • Integers
  • Floats
  • Booleans (True or False)
  • Strings (single and double quoted, escaped by /)

Operators

The shell uses the same python arithmetic operators for convenience, it also maintains their precedence and associativity. The operators are:

OperatorDescription
**Exponent
-xUnary minus
*, /, //, %Multiplication, Division, Floor division, Modulus
+, -Addition, Subtraction
==, !=, >, >=, <, <=Comparisons
notLogical NOT
andLogical AND
orLogical OR

WARNING: Chaining comparison arguments will have a different effect from python. The shell will parse them one by one, in other words: a < b > c will be parsed as (a < b) > c rather than a < b and b > c

Variables

The shell can handle saving, deleting, and accessing variables in the following ways:

echo$varset var=$var2 + 485 * 12
echo"This is $var"unset$var

When dealing with variables pay attention to the following points:

  • Reading a shell variable must precede its name with a $.
  • Writing to a variable must NOT precede its name with a $.
  • Setting an existing variable will overwrite its existing value.
  • Unsetting or Echoing a non-existent variable will generate an error.

There are builtin variables, those are variables that can be set to and modified, but never unset. A library user can choose to add those as needed by using the function call shell.addBuiltinVariable

If and While

The shell supports if conditions and while loops, the syntax is as follows:

if $var1
command
command
elif $var2 > 50
command
else
command
command
end
while $var3 + 40 < $var4
command
end

Adding commands

The Shell Creator utilizes the great docopt library to build the commands of the shell (including the builtin ones). There's a base Command class that must be inherited and overridden to implement new commands. Example:

classReadFile(Command):
usage=''' read_file Usage: read_file -h read_file [--f FORMAT] FILE Options: -h, --help Print this help message -f FORMAT, --format=FORMAT The format of the file to read '''defaction(self):
print(self.args)
print(self.args['FORMAT'])
print(self.args['FILE'])
shell.addCommand('read_file', ReadFile)

for more info on other fields that can be overridden check the ShellCreator/Commands.py file

Styling and Logging

The shell uses logging for logging, with the namespace SHELL. It utilizes this formatter to better format and colorize logging. It also uses prompt_toolkit's styling to style the prompt itself. You can refer to the examples or to prompt_toolkit's documentation for more details

The logging format is as follows: self.logger.error('A logging message {}', value) where self refers to the command class you create.

Prerequisites and Installation

You can install by simply running pip3 install ShellCreator

The library depends on the following libraries:

  • Pygments
  • prompt_toolkit
  • docopt
  • pyparsing

About

A library to create command line interfaces.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

FreePalestine.Dev

Shell Creator

MaintenancePython VersionPyPI version shields.ioBuild StatusDownloadsMIT license

This is a simple python library that can be used to create entire shells for CLI applications. It was originally a part of another application, and then I decided to split it and make it a library on its own. The shell has following features:

  • Python like arithmetic operators
  • Setting/Unsetting variables
  • Builtin commands for variable manipulation
  • Builtin support for if statements and while loops
  • Autocompletion for commands and variables
  • Colorful, with nice logging
  • Easily extensible with new commands through simple class inheritance

How to use

Help and Exiting

use the following commands to get help and exit:

  • help commands will give you the list of all commands in the shell
  • help variables will give you the list of all variables in the shell
  • exit to exit the shell

Data Types

The supported types are the same basic types of python. Those are:

  • Integers
  • Floats
  • Booleans (True or False)
  • Strings (single and double quoted, escaped by /)

Operators

The shell uses the same python arithmetic operators for convenience, it also maintains their precedence and associativity. The operators are:

OperatorDescription
**Exponent
-xUnary minus
*, /, //, %Multiplication, Division, Floor division, Modulus
+, -Addition, Subtraction
==, !=, >, >=, <, <=Comparisons
notLogical NOT
andLogical AND
orLogical OR

WARNING: Chaining comparison arguments will have a different effect from python. The shell will parse them one by one, in other words: a < b > c will be parsed as (a < b) > c rather than a < b and b > c

Variables

The shell can handle saving, deleting, and accessing variables in the following ways:

echo$varset var=$var2 + 485 * 12
echo"This is $var"unset$var

When dealing with variables pay attention to the following points:

  • Reading a shell variable must precede its name with a $.
  • Writing to a variable must NOT precede its name with a $.
  • Setting an existing variable will overwrite its existing value.
  • Unsetting or Echoing a non-existent variable will generate an error.

There are builtin variables, those are variables that can be set to and modified, but never unset. A library user can choose to add those as needed by using the function call shell.addBuiltinVariable

If and While

The shell supports if conditions and while loops, the syntax is as follows:

if $var1
command
command
elif $var2 > 50
command
else
command
command
end
while $var3 + 40 < $var4
command
end

Adding commands

The Shell Creator utilizes the great docopt library to build the commands of the shell (including the builtin ones). There's a base Command class that must be inherited and overridden to implement new commands. Example:

classReadFile(Command):
usage=''' read_file Usage: read_file -h read_file [--f FORMAT] FILE Options: -h, --help Print this help message -f FORMAT, --format=FORMAT The format of the file to read '''defaction(self):
print(self.args)
print(self.args['FORMAT'])
print(self.args['FILE'])
shell.addCommand('read_file', ReadFile)

for more info on other fields that can be overridden check the ShellCreator/Commands.py file

Styling and Logging

The shell uses logging for logging, with the namespace SHELL. It utilizes this formatter to better format and colorize logging. It also uses prompt_toolkit's styling to style the prompt itself. You can refer to the examples or to prompt_toolkit's documentation for more details

The logging format is as follows: self.logger.error('A logging message {}', value) where self refers to the command class you create.

Prerequisites and Installation

You can install by simply running pip3 install ShellCreator

The library depends on the following libraries:

  • Pygments
  • prompt_toolkit
  • docopt
  • pyparsing

About

A library to create command line interfaces.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FreePalestine.Dev

Shell Creator

MaintenancePython VersionPyPI version shields.ioBuild StatusDownloadsMIT license

This is a simple python library that can be used to create entire shells for CLI applications. It was originally a part of another application, and then I decided to split it and make it a library on its own. The shell has following features:

  • Python like arithmetic operators
  • Setting/Unsetting variables
  • Builtin commands for variable manipulation
  • Builtin support for if statements and while loops
  • Autocompletion for commands and variables
  • Colorful, with nice logging
  • Easily extensible with new commands through simple class inheritance

How to use

Help and Exiting

use the following commands to get help and exit:

  • help commands will give you the list of all commands in the shell
  • help variables will give you the list of all variables in the shell
  • exit to exit the shell

Data Types

The supported types are the same basic types of python. Those are:

  • Integers
  • Floats
  • Booleans (True or False)
  • Strings (single and double quoted, escaped by /)

Operators

The shell uses the same python arithmetic operators for convenience, it also maintains their precedence and associativity. The operators are:

OperatorDescription
**Exponent
-xUnary minus
*, /, //, %Multiplication, Division, Floor division, Modulus
+, -Addition, Subtraction
==, !=, >, >=, <, <=Comparisons
notLogical NOT
andLogical AND
orLogical OR

WARNING: Chaining comparison arguments will have a different effect from python. The shell will parse them one by one, in other words: a < b > c will be parsed as (a < b) > c rather than a < b and b > c

Variables

The shell can handle saving, deleting, and accessing variables in the following ways:

echo$varset var=$var2 + 485 * 12
echo"This is $var"unset$var

When dealing with variables pay attention to the following points:

  • Reading a shell variable must precede its name with a $.
  • Writing to a variable must NOT precede its name with a $.
  • Setting an existing variable will overwrite its existing value.
  • Unsetting or Echoing a non-existent variable will generate an error.

There are builtin variables, those are variables that can be set to and modified, but never unset. A library user can choose to add those as needed by using the function call shell.addBuiltinVariable

If and While

The shell supports if conditions and while loops, the syntax is as follows:

if $var1
command
command
elif $var2 > 50
command
else
command
command
end
while $var3 + 40 < $var4
command
end

Adding commands

The Shell Creator utilizes the great docopt library to build the commands of the shell (including the builtin ones). There's a base Command class that must be inherited and overridden to implement new commands. Example:

classReadFile(Command):
usage=''' read_file Usage: read_file -h read_file [--f FORMAT] FILE Options: -h, --help Print this help message -f FORMAT, --format=FORMAT The format of the file to read '''defaction(self):
print(self.args)
print(self.args['FORMAT'])
print(self.args['FILE'])
shell.addCommand('read_file', ReadFile)

for more info on other fields that can be overridden check the ShellCreator/Commands.py file

Styling and Logging

The shell uses logging for logging, with the namespace SHELL. It utilizes this formatter to better format and colorize logging. It also uses prompt_toolkit's styling to style the prompt itself. You can refer to the examples or to prompt_toolkit's documentation for more details

The logging format is as follows: self.logger.error('A logging message {}', value) where self refers to the command class you create.

Prerequisites and Installation

You can install by simply running pip3 install ShellCreator

The library depends on the following libraries:

  • Pygments
  • prompt_toolkit
  • docopt
  • pyparsing

About

A library to create command line interfaces.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FreePalestine.Dev

Shell Creator

MaintenancePython VersionPyPI version shields.ioBuild StatusDownloadsMIT license

This is a simple python library that can be used to create entire shells for CLI applications. It was originally a part of another application, and then I decided to split it and make it a library on its own. The shell has following features:

  • Python like arithmetic operators
  • Setting/Unsetting variables
  • Builtin commands for variable manipulation
  • Builtin support for if statements and while loops
  • Autocompletion for commands and variables
  • Colorful, with nice logging
  • Easily extensible with new commands through simple class inheritance

How to use

Help and Exiting

use the following commands to get help and exit:

  • help commands will give you the list of all commands in the shell
  • help variables will give you the list of all variables in the shell
  • exit to exit the shell

Data Types

The supported types are the same basic types of python. Those are:

  • Integers
  • Floats
  • Booleans (True or False)
  • Strings (single and double quoted, escaped by /)

Operators

The shell uses the same python arithmetic operators for convenience, it also maintains their precedence and associativity. The operators are:

OperatorDescription
**Exponent
-xUnary minus
*, /, //, %Multiplication, Division, Floor division, Modulus
+, -Addition, Subtraction
==, !=, >, >=, <, <=Comparisons
notLogical NOT
andLogical AND
orLogical OR

WARNING: Chaining comparison arguments will have a different effect from python. The shell will parse them one by one, in other words: a < b > c will be parsed as (a < b) > c rather than a < b and b > c

Variables

The shell can handle saving, deleting, and accessing variables in the following ways:

echo$varset var=$var2 + 485 * 12
echo"This is $var"unset$var

When dealing with variables pay attention to the following points:

  • Reading a shell variable must precede its name with a $.
  • Writing to a variable must NOT precede its name with a $.
  • Setting an existing variable will overwrite its existing value.
  • Unsetting or Echoing a non-existent variable will generate an error.

There are builtin variables, those are variables that can be set to and modified, but never unset. A library user can choose to add those as needed by using the function call shell.addBuiltinVariable

If and While

The shell supports if conditions and while loops, the syntax is as follows:

if $var1
command
command
elif $var2 > 50
command
else
command
command
end
while $var3 + 40 < $var4
command
end

Adding commands

The Shell Creator utilizes the great docopt library to build the commands of the shell (including the builtin ones). There's a base Command class that must be inherited and overridden to implement new commands. Example:

classReadFile(Command):
usage=''' read_file Usage: read_file -h read_file [--f FORMAT] FILE Options: -h, --help Print this help message -f FORMAT, --format=FORMAT The format of the file to read '''defaction(self):
print(self.args)
print(self.args['FORMAT'])
print(self.args['FILE'])
shell.addCommand('read_file', ReadFile)

for more info on other fields that can be overridden check the ShellCreator/Commands.py file

Styling and Logging

The shell uses logging for logging, with the namespace SHELL. It utilizes this formatter to better format and colorize logging. It also uses prompt_toolkit's styling to style the prompt itself. You can refer to the examples or to prompt_toolkit's documentation for more details

The logging format is as follows: self.logger.error('A logging message {}', value) where self refers to the command class you create.

Prerequisites and Installation

You can install by simply running pip3 install ShellCreator

The library depends on the following libraries:

  • Pygments
  • prompt_toolkit
  • docopt
  • pyparsing

About

A library to create command line interfaces.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

FreePalestine.Dev

Shell Creator

MaintenancePython VersionPyPI version shields.ioBuild StatusDownloadsMIT license

This is a simple python library that can be used to create entire shells for CLI applications. It was originally a part of another application, and then I decided to split it and make it a library on its own. The shell has following features:

  • Python like arithmetic operators
  • Setting/Unsetting variables
  • Builtin commands for variable manipulation
  • Builtin support for if statements and while loops
  • Autocompletion for commands and variables
  • Colorful, with nice logging
  • Easily extensible with new commands through simple class inheritance

How to use

Help and Exiting

use the following commands to get help and exit:

  • help commands will give you the list of all commands in the shell
  • help variables will give you the list of all variables in the shell
  • exit to exit the shell

Data Types

The supported types are the same basic types of python. Those are:

  • Integers
  • Floats
  • Booleans (True or False)
  • Strings (single and double quoted, escaped by /)

Operators

The shell uses the same python arithmetic operators for convenience, it also maintains their precedence and associativity. The operators are:

OperatorDescription
**Exponent
-xUnary minus
*, /, //, %Multiplication, Division, Floor division, Modulus
+, -Addition, Subtraction
==, !=, >, >=, <, <=Comparisons
notLogical NOT
andLogical AND
orLogical OR

WARNING: Chaining comparison arguments will have a different effect from python. The shell will parse them one by one, in other words: a < b > c will be parsed as (a < b) > c rather than a < b and b > c

Variables

The shell can handle saving, deleting, and accessing variables in the following ways:

echo$varset var=$var2 + 485 * 12
echo"This is $var"unset$var

When dealing with variables pay attention to the following points:

  • Reading a shell variable must precede its name with a $.
  • Writing to a variable must NOT precede its name with a $.
  • Setting an existing variable will overwrite its existing value.
  • Unsetting or Echoing a non-existent variable will generate an error.

There are builtin variables, those are variables that can be set to and modified, but never unset. A library user can choose to add those as needed by using the function call shell.addBuiltinVariable

If and While

The shell supports if conditions and while loops, the syntax is as follows:

if $var1
command
command
elif $var2 > 50
command
else
command
command
end
while $var3 + 40 < $var4
command
end

Adding commands

The Shell Creator utilizes the great docopt library to build the commands of the shell (including the builtin ones). There's a base Command class that must be inherited and overridden to implement new commands. Example:

classReadFile(Command):
usage=''' read_file Usage: read_file -h read_file [--f FORMAT] FILE Options: -h, --help Print this help message -f FORMAT, --format=FORMAT The format of the file to read '''defaction(self):
print(self.args)
print(self.args['FORMAT'])
print(self.args['FILE'])
shell.addCommand('read_file', ReadFile)

for more info on other fields that can be overridden check the ShellCreator/Commands.py file

Styling and Logging

The shell uses logging for logging, with the namespace SHELL. It utilizes this formatter to better format and colorize logging. It also uses prompt_toolkit's styling to style the prompt itself. You can refer to the examples or to prompt_toolkit's documentation for more details

The logging format is as follows: self.logger.error('A logging message {}', value) where self refers to the command class you create.

Prerequisites and Installation

You can install by simply running pip3 install ShellCreator

The library depends on the following libraries:

  • Pygments
  • prompt_toolkit
  • docopt
  • pyparsing

About

A library to create command line interfaces.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages