{"id":13467579,"url":"https://github.com/richrd/suplemon","last_synced_at":"2025-05-16T05:06:04.723Z","repository":{"id":24835184,"uuid":"28249896","full_name":"richrd/suplemon","owner":"richrd","description":":lemon: Console (CLI) text editor with multi cursor support. Suplemon replicates Sublime Text like functionality in the terminal. Try it out, give feedback, fork it!","archived":false,"fork":false,"pushed_at":"2021-11-27T10:54:14.000Z","size":906,"stargazers_count":794,"open_issues_count":30,"forks_count":40,"subscribers_count":25,"default_branch":"master","last_synced_at":"2025-04-08T15:09:01.918Z","etag":null,"topics":["command-line","console","editor","multi-cursor","python","sublime-text","terminal"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/richrd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-12-19T23:07:27.000Z","updated_at":"2025-03-14T17:40:22.000Z","dependencies_parsed_at":"2022-08-08T13:00:22.956Z","dependency_job_id":null,"html_url":"https://github.com/richrd/suplemon","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richrd%2Fsuplemon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richrd%2Fsuplemon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richrd%2Fsuplemon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richrd%2Fsuplemon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/richrd","download_url":"https://codeload.github.com/richrd/suplemon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253763956,"owners_count":21960484,"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":["command-line","console","editor","multi-cursor","python","sublime-text","terminal"],"created_at":"2024-07-31T15:00:58.094Z","updated_at":"2025-05-16T05:06:02.920Z","avatar_url":"https://github.com/richrd.png","language":"Python","readme":"Suplemon :lemon:\n========\n\n[![Build Status](https://travis-ci.org/richrd/suplemon.svg?branch=master)](https://travis-ci.org/richrd/suplemon) [![Join the chat at https://webchat.freenode.net/?channels=%23suplemon](https://img.shields.io/badge/chat-on%20freenode%20%23suplemon-blue.svg)](https://webchat.freenode.net/?channels=%23suplemon)\n[![Run on Repl.it](https://repl.it/badge/github/richrd/suplemon)](https://repl.it/github/richrd/suplemon)\n\n          ___________   _________  ___     ______________________________   ___\n         /  _____/  /  /  /  _   \\/  /\\   /  ______/        /  ___   /   | /  /\\\n        /  /____/  /  /  /  /_/  /  / /  /  /_____/  /  /  /  /  /  /    |/  / /\n       /____   /  /  /  /  _____/  / /  /  ______/  /  /  /  /  /  /  /|    / /\n      _____/  /  /__/  /  /\\___/  /____/  /_____/  /  /  /  /__/  /  / |   / /\n     /_______/\\_______/__/ /  /_______/________/__/__/__/________/__/ /|__/ /\n     \\_______\\ \\______\\__\\/   \\_______\\________\\__\\__\\__\\________\\__\\/ \\__\\/\n\n              Remedying the pain of command line editing since 2014\n\n\nSuplemon is a modern, powerful and intuitive console text editor with multi cursor support.\nSuplemon replicates Sublime Text style functionality in the terminal with the ease of use of Nano.\nhttp://github.com/richrd/suplemon\n\n\n![Suplemon in action](https://i.imgur.com/pdKvKsN.gif)\n\n## Features\n * Proper multi cursor editing, as in Sublime Text\n * Syntax highlighting with Text Mate themes\n * Autocomplete (based on words in the files that are open)\n * Easy Undo/Redo (Ctrl + Z, Ctrl + Y)\n * Copy \u0026 Paste, with multi line support (and native clipboard support on X11 / Unix and Mac OS)\n * Multiple files in tabs\n * Powerful Go To feature for jumping to files and lines\n * Find, Find next and Find all (Ctrl + F, Ctrl + D, Ctrl + A)\n * Custom keyboard shortcuts (and easy-to-use defaults)\n * Mouse support\n * Restores cursor and scroll positions when reopenning files\n * Extensions (easy to write your own)\n * Lots more...\n\n\n## Caveats\n * Currently no built in selections (regions). To copy part of a line select it with your mouse and use \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eC\u003c/kbd\u003e\n\n## Try it!\n\nYou can just clone the repo, and try Suplemon, or also install it system wide.\nTo run from source you need to install the python `wcwidth` package.\n\n    pip3 install wcwidth\n    git clone https://github.com/richrd/suplemon.git\n    cd suplemon\n    python3 suplemon.py\n\n### Installation\n\nInstall the latest version from PIP:\n\n    sudo pip3 install suplemon\n\nTo install Suplemon from the repo run the setup script:\n\n    sudo python3 setup.py install\n\n### Usage\n\n    suplemon # New file in the current directory\n    suplemon [filename]... # Open one or more files\n    suplemon [filename:row:col]... # Open one or more files at a specific row or column (optional)\n\n\n### Notes\n - **Must use Python 3.3 or higher for proper character encoding support.**\n - **Python2.7 (and maybe lower) versions work, but aren't officially supported (some special characters won't work etc).**\n - *The master branch is considered stable.*\n - *Tested on Unix.*\n\nDev Branch Status: [![Build Status](https://travis-ci.org/richrd/suplemon.svg?branch=dev)](https://travis-ci.org/richrd/suplemon)\n\nNo dependencies outside the Python Standard Library required.\n\n### Optional dependencies\n\n * Pygments\n \u003e For support for syntax highlighting over 300 languages.\n\n * Flake8\n \u003e For showing linting for Python files.\n\n * xsel or xclip\n \u003e For system clipboard support on X Window (Linux).\n\n * pbcopy / pbpaste\n \u003e For system clipboard support on Mac OS.\n\n See [docs/optional-dependencies.md][] for installation instructions.\n\n [docs/optional-dependencies.md]: docs/optional-dependencies.md\n\n## Description\nSuplemon is an intuitive command line text editor. It supports multiple cursors out of the box.\nIt is as easy as nano, and has much of the power of Sublime Text. It also supports extensions\nto allow all kinds of customizations. To get more help hit ```Ctrl + H``` in the editor.\nSuplemon is licensed under the MIT license.\n\n## Configuration\n\n### Main Config\nThe suplemon config file is stored at ```~/.config/suplemon/suplemon-config.json```.\n\nThe best way to edit it is to run the ```config``` command (Run commands via ```Ctrl+E```).\nThat way Suplemon will automatically reload the configuration when you save the file.\nTo view the default configuration and see what options are available run ```config defaults``` via ```Ctrl+E```.\n\n\n### Keymap Config\n\nBelow are the default key mappings used in suplemon. They can be edited by running the ```keymap``` command.\nTo view the default keymap file run ```keymap default```\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eQ\u003c/kbd\u003e\n   \u003e Exit\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eW\u003c/kbd\u003e\n   \u003e Close file or tab\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eC\u003c/kbd\u003e\n   \u003e Copy line(s) to buffer\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eX\u003c/kbd\u003e\n   \u003e Cut line(s) to buffer\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eV\u003c/kbd\u003e\n   \u003e Insert buffer\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eK\u003c/kbd\u003e\n   \u003e Duplicate line\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eG\u003c/kbd\u003e\n   \u003e Go to line number or file (type the beginning of a filename to switch to it).\n   \u003e You can also use 'filena:42' to go to line 42 in filename.py etc.\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eF\u003c/kbd\u003e\n   \u003e Search for a string or regular expression (configurable)\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eD\u003c/kbd\u003e\n   \u003e Search for next occurrence or find the word the cursor is on. Adds a new cursor at each new occurrence.\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eT\u003c/kbd\u003e\n   \u003e Trim whitespace\n\n * \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003eArrow Key\u003c/kbd\u003e\n   \u003e Add new cursor in arrow direction\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eLeft / Right\u003c/kbd\u003e\n   \u003e Jump to previous or next word or line\n\n * \u003ckbd\u003eESC\u003c/kbd\u003e\n   \u003e Revert to a single cursor / Cancel input prompt\n\n * \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ePage Up\u003c/kbd\u003e\n   \u003e Move line(s) up\n\n * \u003ckbd\u003eAlt\u003c/kbd\u003e + \u003ckbd\u003ePage Down\u003c/kbd\u003e\n   \u003e Move line(s) down\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eS\u003c/kbd\u003e\n   \u003e Save current file\n\n * \u003ckbd\u003eF1\u003c/kbd\u003e\n   \u003e Save file with new name\n\n * \u003ckbd\u003eF2\u003c/kbd\u003e\n   \u003e Reload current file\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eO\u003c/kbd\u003e\n   \u003e Open file\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eW\u003c/kbd\u003e\n   \u003e Close file\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003ePage Up\u003c/kbd\u003e\n   \u003e Switch to next file\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003ePage Down\u003c/kbd\u003e\n   \u003e Switch to previous file\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eE\u003c/kbd\u003e\n   \u003e Run a command.\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eZ\u003c/kbd\u003e and \u003ckbd\u003eF5\u003c/kbd\u003e\n   \u003e Undo\n\n * \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eY\u003c/kbd\u003e and \u003ckbd\u003eF6\u003c/kbd\u003e\n   \u003e Redo\n\n * \u003ckbd\u003eF7\u003c/kbd\u003e\n   \u003e Toggle visible whitespace\n\n * \u003ckbd\u003eF8\u003c/kbd\u003e\n   \u003e Toggle mouse mode\n\n * \u003ckbd\u003eF9\u003c/kbd\u003e\n   \u003e Toggle line numbers\n\n * \u003ckbd\u003eF11\u003c/kbd\u003e\n   \u003e Toggle full screen\n\n## Mouse shortcuts\n\n * Left Click\n   \u003e Set cursor at mouse position. Reverts to a single cursor.\n\n * Right Click\n   \u003e Add a cursor at mouse position.\n\n * Scroll Wheel Up / Down\n   \u003e Scroll up \u0026 down.\n\n## Commands\n\nSuplemon has various add-ons that implement extra features.\nThe commands can be run with \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eE\u003c/kbd\u003e and the prompt has autocomplete to make running them faster.\nThe available commands and their descriptions are:\n\n * autocomplete\n\n    A simple autocompletion module.\n\n    This adds autocomplete support for the tab key. It uses a word\n    list scanned from all open files for completions. By default it suggests\n    the shortest possible match. If there are no matches, the tab action is\n    run normally.\n\n * autodocstring\n\n    Simple module for adding docstring placeholders.\n\n    This module is intended to generate docstrings for Python functions.\n    It adds placeholders for descriptions, arguments and return data.\n    Function arguments are crudely parsed from the function definition\n    and return statements are scanned from the function body.\n\n * bulk_delete\n\n    Bulk delete lines and characters.\n    Asks what direction to delete in by default.\n\n    Add 'up' to delete lines above highest cursor.\n    Add 'down' to delete lines below lowest cursor.\n    Add 'left' to delete characters to the left of all cursors.\n    Add 'right' to delete characters to the right of all cursors.\n\n * comment\n\n    Toggle line commenting based on current file syntax.\n\n * config\n\n    Shortcut for openning the config files.\n\n * crypt\n\n    Encrypt or decrypt the current buffer. Lets you provide a passphrase and optional salt for encryption.\n    Uses AES for encryption and scrypt for key generation.\n\n * diff\n\n    View a diff of the current file compared to it's on disk version.\n\n * eval\n\n    Evaluate a python expression and show the result in the status bar.\n\n    If no expression is provided the current line(s) are evaluated and\n    replaced with the evaluation result.\n\n * keymap\n\n    Shortcut to openning the keymap config file.\n\n * linter\n\n    Linter for suplemon.\n\n * lower\n\n    Transform current lines to lower case.\n\n * lstrip\n\n    Trim whitespace from beginning of current lines.\n\n * paste\n\n    Toggle paste mode (helpful when pasting over SSH if auto indent is enabled)\n\n * reload\n\n    Reload all add-on modules.\n\n * replace_all\n\n    Replace all occurrences in all files of given text with given replacement.\n\n * reverse\n\n    Reverse text on current line(s).\n\n * rstrip\n\n    Trim whitespace from the end of lines.\n\n * save\n\n    Save the current file.\n\n * save_all\n\n    Save all currently open files. Asks for confirmation.\n\n * sort_lines\n\n    Sort current lines.\n\n    Sorts alphabetically by default.\n    Add 'length' to sort by length.\n    Add 'reverse' to reverse the sorting.\n\n * strip\n\n    Trim whitespace from start and end of lines.\n\n * tabstospaces\n\n    Convert tab characters to spaces in the entire file.\n\n * toggle_whitespace\n\n    Toggle visually showing whitespace.\n\n * upper\n\n    Transform current lines to upper case.\n\n\n## Support\n\nIf you experience problems, please submit a new issue.\nIf you have a question, need help, or just want to chat head over to the IRC channel #suplemon @ Freenode.\nI'll be happy to chat with you, see you there!\n\n\n## Development\n\nIf you are interested in contributing to Suplemon, development dependencies can be installed via:\n\n    # For OS cleanliness, we recommend using `virtualenv` to prevent global contamination\n    pip install -r requirements-dev.txt\n\nAfter those are installed, tests can be run via:\n\n    ./test.sh\n\nPRs are very welcome and appreciated.\nWhen making PRs make sure to set the target branch to `dev`. I only push to master when releasing new versions.\n\n\n## Rationale\nFor many the command line is a different environment for text editing.\nMost coders are familiar with GUI text editors and for many vi and emacs\nhave a too steep learning curve. For them (like for me) nano was the weapon of\nchoice. But nano feels clunky and it has its limitations. That's why\nI wrote my own editor with built in multi cursor support to fix the situation.\nAnother reason is that developing Suplemon is simply fun to do.\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frichrd%2Fsuplemon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frichrd%2Fsuplemon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frichrd%2Fsuplemon/lists"}