Git Product home page Git Product logo

clibb's Introduction

CLIBB · GitHub license

CLIBB (Command-Line Interface Building Blocks) is a Python library that streamlines, simplifies and speeds up your CLI creation. It provides eight unique and customizable building blocks to help you build a pretty, robust, and interactive CLI.

Getting Started

  1. Install CLIBB using pip by running pip install clibb.
  2. Create a new Python file in your IDE of choice.
  3. Setup window configurations using the provided building blocks detailed here.
  4. Initialize CLIBB with console = clibb.Application()
  5. Add your previously created window configurations with console.add(window_1, ...).
  6. Set the initial window with console.activate(window_1).
  7. Finally execute CLIBB and enjoy with console.run()

Documentation

Proper documentation will be provided in a future deployment. For the time being, please refer to the detailed example below and use the information provided by your IDE based on the code documentation.

Example

To help you get started without wading through the 🦆-ing boring documentation; here is a complete example that shows you everything CLIBB has to offer:

import clibb

# Example class
class Person:
    def __init__(self, name: str) -> None:
        self.__name = name
    def change_name(self) -> None:
        self.__name = "Sophie"
    def get_name(self) -> str:
        return self.__name

# Example object
adult = Person("Hannah")

# Example variables
class Settings:
    options = clibb.Mutable("Option IV")
    user_input = clibb.Mutable("Change me below!")
    checkbox_state = clibb.Mutable(True)

# Example window configuration showing all available building blocks.
window_1 = {
    "name": "Home",
    "width": 100,
    "colors": {
        "text": clibb.Color(255, 255, 255),
        "background": clibb.Color(254, 0, 0),
        "pass": clibb.Color(6, 215, 27),
        "fail": clibb.Color(255, 0, 0),
        "alert": clibb.Color(255, 255, 0),
    },
    "elements": [
        clibb.Title("CLIBB", "by Perytron with <3"),
        clibb.Separator("empty"),
        clibb.Display("How-to", "Navigate with 'w', 'a', 's', 'd'"),
        clibb.Display("", "Activate with 'q' and return with 'e'"),
        clibb.Separator("empty"),
        clibb.Display("Current Option:", Settings.options),
        clibb.Separator("empty"),
        clibb.Configuration(Settings.options,"Options:","Option I","Option II","Option III","Option IV",),
        clibb.Separator("filled"),
        clibb.Separator("empty"),
        clibb.Display("Current Name:", adult.get_name),
        clibb.Separator("empty"),
        clibb.Action("o", "Set Name to 'Sophie'", action=adult.change_name, stealth=False),
        clibb.Separator("filled"),
        clibb.Separator("empty"),
        clibb.Display("Current Text", Settings.user_input),
        clibb.Separator("empty"),
        clibb.Input("Input Text", Settings.user_input),
        clibb.Separator("filled"),
        clibb.Separator("empty"),
        clibb.Display("Current Text", Settings.checkbox_state),
        clibb.Separator("empty"),
        clibb.Checkbox("Checkbox", Settings.checkbox_state),
        clibb.Separator("filled"),
        clibb.Separator("empty"),
        clibb.Navigation("c", "Configuration", "Go to the 'Configuration' window with 'c'"),
        clibb.Separator("filled"),
        clibb.Separator("empty"),
    ],
}

# Another example window configuration to show navigation between windows.
window_2 = {
    "name": "Configuration",
    "colors": {
        "text": clibb.Color(255, 255, 255),
        "background": clibb.Color(112, 60, 160),
        "pass": clibb.Color(0, 255, 0),
        "fail": clibb.Color(255, 0, 0),
        "alert": clibb.Color(255, 255, 0),
    },
    "elements": [
        clibb.Title("Configuration"),
        clibb.Separator("empty"),
        clibb.Navigation("h", "Home", "Go to the 'Home' window with 'h' or return with 'e'"),
        clibb.Separator("filled"),
        clibb.Separator("empty"),
    ],
}

# Setup and run CLIBB!
console = clibb.Application()
console.add(window_2, window_1)
console.remove(window_2)
console.add(window_2)
console.activate(window_1)
console.run()

Contributing

I'd love to collaborate with you! Feel free to fork this repository, implement or refactor as desired, and create a pull request for integration into the main branch. If you encounter any issues or have questions, open an issue, and I'll be happy to assist.

CLIBB is GPL-3.0 licensed.

clibb's People

Contributors

dreamfarer avatar

Stargazers

Noah Bussinger avatar

Watchers

Noah Bussinger avatar  avatar

clibb's Issues

Wishlist

  • Enable initialization of 'Mutable' with None and other types that implement a string representation.
  • Return " " (whitespace) if 'Mutable' has not been set yet.
  • Use string representation when comparing 'Mutable'.
  • Implement the ability to exit user input using the 'Esc' key.
  • If non-stealth input is selected, add "Press 'q' to continue..." before returning to the CLIBB interface.
  • Prevent using 'w', 'a', 's', 'd', 'q', 'e' as 'Action'/'Navigation' hotkeys.
  • Make switching windows possible as a method, not only through 'clibb_instance.activate(...)'.
  • Adjust the padding algorithm for oversized 'Configuration' elements.
  • Implement unit tests

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.