{"id":13342957,"url":"https://github.com/gnussy/penis","last_synced_at":"2025-03-12T03:30:47.178Z","repository":{"id":178650499,"uuid":"621041116","full_name":"gnussy/penis","owner":"gnussy","description":"PENIS - A Portable Efficient Navigation Interface System library written in C++","archived":false,"fork":false,"pushed_at":"2023-04-04T14:02:47.000Z","size":75,"stargazers_count":17,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-24T13:59:00.179Z","etag":null,"topics":["cpp","prompt","repl","xmake"],"latest_commit_sha":null,"homepage":"https://gnussy.org","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gnussy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-29T21:53:08.000Z","updated_at":"2024-09-16T16:12:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"d623483c-6279-4414-975d-44d72e3376db","html_url":"https://github.com/gnussy/penis","commit_stats":null,"previous_names":["gnussy/penis"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnussy%2Fpenis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnussy%2Fpenis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnussy%2Fpenis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnussy%2Fpenis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gnussy","download_url":"https://codeload.github.com/gnussy/penis/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243150704,"owners_count":20244447,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","prompt","repl","xmake"],"created_at":"2024-07-29T19:30:08.709Z","updated_at":"2025-03-12T03:30:47.166Z","avatar_url":"https://github.com/gnussy.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e PENIS 🍆 \u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/gnussy/penis/main/assets/logo.png\" width=200 /\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ci\u003ePortable Efficient Navigation Interface System\u003c/i\u003e\n\u003c/p\u003e\n\n---\n\n# Introduction\n\nPENIS is a C++ library that provides a subscription-based API to allow clients to access commands from a prompt. The library is a wrapper around the \u003ctermios.h\u003e library, which controls keys, maintains a history, and provides auto-complete functionality to the user.\n\n# Features\n\n- [X] Subscription-based API to access commands from a prompt\n- [ ] Auto-complete functionality for faster input\n- [X] Command history tracking\n- [ ] Navigation features for ease of use\n- [ ] Portable and easy-to-use\n\n# Requirements\n- A C++ compiler that supports C++11 or later\n- The \u003ctermios.h\u003e library\n\n# Installation\n- [ ] Describe installation\n\n# Usage\n- [ ] Describe usage\n\n# Examples\nHere's an example of how to use the PENIS library to create a simple calculator:\n\n```c++\n#include \u003cpenis/penis.hpp\u003e\n#include \u003ciostream\u003e\n\nvoid my_callback(const std::string\u0026 command) {\n  std::cout \u003c\u003c \"Received command: \" \u003c\u003c command \u003c\u003c std::endl;\n}\n\nint main() {\n  penis::PromptBuilder repl;\n  repl.subscribe_command(my_callback).run();\n  return 0;\n}\n```\n\nThis example creates a subscription to the PENIS prompt and waits for the user to input a command. If the command is \"exit\", the program will exit. Otherwise, it tries to convert the command string to an integer and prints the result to the console. If the conversion fails, it prints an error message.\n\n# License\nPENIS is licensed under the GPL-3 License. See the LICENSE file for more information.\n\nContact\n- [ ] Create a gnussy e-mail\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnussy%2Fpenis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgnussy%2Fpenis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnussy%2Fpenis/lists"}