A comfy custom IDE where you can feel right at home

Overview

reZIDE Tests Codecov PyPI

a comfy custom IDE where you can feel right at home 🏡

Use simple, declarative configuration files to create complex IDEs with a single command!

screencap (Click to go to Youtube)

What's it like?

Think of it like any available IDE, except:

  • You can read and write your configurations easily in TOML format
  • You can use any program that you prefer without waiting for anyone else to add a plugin/integration. If you can run it on your command line, you can run it in reZIDE! Editors, linters, autoformatters, typecheckers, ASCII movies, distracting videos, etc...
  • You can share your configurations with others
  • You can copy/learn from others' configurations

Or think of it like tmux, except:

  • You don't need to learn new movement commands (use the commands that you already use for your window manager)
  • You aren't restricted to applications with a Terminal User Interface (you can open web browsers, pdf previews, video players, etc.)

Who's it for?

You'll probably like this if you:

  • use a tiling window manager or are interested in tiling window managers
  • enjoy the Unix philosophy ("have a lot of tools in your toolbox that each do one job well and play nicely with others")

This probably isn't the thing you're looking for if you:

  • want something that "just works". Having lots of tools means you have to do some amount of learning about each tool before you can use them. A lot of that burden is mitigated by copying other people's config files, but in general, tiling window managers have a bit of a learning curve so I would say that this project may not the best fit for people that are looking for a "just works" type of product.

What's it stand for?

⬅️⬅️(Zach's)
⬇️   really
⬇️   enjoyable
➡️➡️ Z
     Integrated
     Development
     Environment

Because that's how acronyms work.

Credits to @hyangda for brainstorming this great name with me 😄

Requirements

One of these tiling window managers:

  • sway
  • i3 (it should work out of the box, but I'm too lazy to install i3 just to test this. if you can confirm on my behalf, please check this box and submit a PR!)

At least 1 configuration file

See examples.

Installation

I recommend using pipx for environment isolation:

pipx install reZIDE

You can also use pip if you don't mind modifying your system Python environment:

pip install reZIDE

How to use

Quickstart

  1. copy examples to ~/.rezide
    git clone https://github.com/abstractlyZach/reZIDE
    cp -r reZIDE/examples "${HOME}/.rezide"
  2. Update the config file to match your system's needs. Adjustment instructions can be found inside the file that we're going to edit
    # open config with vi. use whatever editor you prefer
    vi ~/.rezide/rice/config.toml
  3. spawn windows
    # spawn windows for the "rice" layout
    rzd open rice

Detailed instructions

Run this command for documentation on how to use reZIDE:

rzd --help

Motivation

Tiling window managers are powerful and flexible and I love using them. However, I kept finding myself running into one issue: I'm lazy.

Whenever I sit down to work, I usually want to open a group of 2+ windows. Each window takes 5s-30s to get to a useful state. That's way too much effort. I couldn't be bothered.

Here are some groups of windows (AKA layouts) that I commonly use:

python mode

  • editor for source code
  • editor for tests
  • browser for documentation/tickets
  • terminal for arbitrary commands like linting, running tests, and installing packages

web dev mode

  • editor for source code
  • editor for tests
  • small terminal running linter
  • small terminal using a filewatcher to run tests
  • small terminal running the typescript compiler
  • medium terminal for running arbitrary commands

documentation mode

  • editor for document
  • browser/pager for source material
  • terminal for compiling document into pdf
  • pdf viewer for viewing compiled pdf

It usually takes at least 10 keystrokes to run a command (even with tab-completion and fuzzy-finding) and then another 5-15 keystrokes to resize the window so that it's as big or small as I want. Here's an example:

Spawning and resizing a single window

  • to open a terminal
  • cdd to cd but with fuzzy-finding
  • type rez to get ~/workspace/abstractlyZach/reZIDE/ to show up as the first result
  • fd | entr make typecheck to automatically run my typechecker whenever files change
  • to enter "resize" mode
  • left x5 to make the window smaller
  • to exit "resize" mode

And then I have to do that like 5 more times; that's too much work! 😤 I'm losing seconds of productivity every day just opening, commanding, and resizing windows!

Goals

  • use only i3/sway to manage windows
  • create a DIY IDE with a single command
  • allow different IDEs to be defined through a readable file (like TOML)
  • run arbitrary commands (not just shells and TUIs!)

Defining an IDE in TOML

Basic Python IDE

This Python IDE has a relatively basic TOML file. Here's what the final product looks like:

python IDE

# python IDE
[python]

# tells reZIDE that this is a layout and it should construct a tree out of it and its descendants
is_layout = true

# this is what % of the screen each child should take up
# in this case, it's a 50-50 split
sizes = [50, 50]

# tells reZIDE the names of the Windows and Sections that belong in the "python" Section
# reZIDE will look up these Window and Section definitions elsewhere in this file and
#   build them appropriately
# so here, we have terminals on the left side and documentation on the right side
children = ['terminals', 'documentation']

# the screen should be split horizontally so that the children are to the left and right
#   of each other
split = "horizontal"


[terminals]
sizes = [50, 50]
children = ['python-editor', 'python-gutter']
split = 'vertical'

# our first Window definition
[python-gutter]

# run this command to:
# * spawn an alacritty window
# * set the working directory to ~/workspace/python-ide/
# * print some ascii art onto the terminal
# * start a zsh interactive shell
command = """
    alacritty \
        --working-directory ~/workspace/python-ide/ \
        -e sh -c 'cat python.logo.colored.asciiart; zsh'
"""

# mark this window in the window manager as 'python-gutter'
mark = 'python-gutter'


[python-editor]
command = """
    alacritty \
        --working-directory ~/workspace/python-ide/ \
        -e sh -c 'cp script_template.py script.py; kak script.py; zsh'
"""
mark = 'python-editor'

[documentation]
command = "brave --new-window https://docs.python.org/3/"
mark = 'documentation'

A complexer IDE

This IDE gives us everything we need to have a smooth development session when working on the reZIDE project.

Try opening the screenshot in another tab/window and see if you can match all of the Window/Section definitions in the TOML file to their corresponding areas on the screenshot!

rezide_ide

# more-complicated IDE for developing the reZIDE source code
[rezide-ide]
is_layout = true
split = "horizontal"
children = ['linters', 'main', 'tests']
sizes = [20, 60, 20]

# 1st level
# ---------------------------------------------------------------------------------------
[linters]
split = "vertical"
sizes = [50, 50]
children = ['formatting', 'typechecking']

[main]
split = "vertical"
children = ['editors', 'gutter']
sizes = [70, 30]

[tests]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'fd | entr make test; zsh'
"""
mark = "tests"

# 2nd level
# ---------------------------------------------------------------------------------------

[formatting]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c \
            'fd | entr sh -c \"echo && make format && make lint && echo_success\"; zsh'
"""
mark = "formatting"

[typechecking]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'fd | entr make typecheck; zsh'
"""
mark = "typechecking"

[editors]
sizes = [50, 50]
children = ['left-editor', 'right-editor']
split = "horizontal"

[gutter]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'neofetch; zsh'
"""
mark = "gutter"

# 3rd level
# ---------------------------------------------------------------------------------------
[left-editor]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'kak src/rezide/rezide.py'
"""
mark = "left-editor"

[right-editor]
command = """
    alacritty \
        --working-directory ~/workspace/abstractlyZach/reZIDE/ \
        -e sh -c 'kak README.md'
"""
mark = "right-editor"

Shell Completion

Setting up completion for your shell

Alternatives

  • tmux
  • anything by jetbrains lul
You might also like...
switching computer? changing your setup? You need to automate the download of your current setup? This is the right tool for you :incoming_envelope:

🔮 setup_shift(SS.py) switching computer? changing your setup? You need to automate the download of your current setup? This is the right tool for you

A custom Discord Rich Presence to display when you're studying so you're stupid friends won't disturb you when you're studying.

Studying RPC Description A custom Discord Rich Presence to display when you're studying so you're stupid friends won't disturb you when you're studyin

A Home Assistant custom component for Lobe. Lobe is an AI tool that can classify images.
A Home Assistant custom component for Lobe. Lobe is an AI tool that can classify images.

Lobe This is a Home Assistant custom component for Lobe. Lobe is an AI tool that can classify images. This component lets you easily use an exported m

Python module that makes working with XML feel like you are working with JSON

xmltodict xmltodict is a Python module that makes working with XML feel like you are working with JSON, as in this "spec": print(json.dumps(xmltod

A terminal tool for git. When we use git, do you feel very uncomfortable with too long commands
A terminal tool for git. When we use git, do you feel very uncomfortable with too long commands

PIGIT A terminal tool for git. When we use git, do you feel very uncomfortable with too long commands. For example: git status --short, this project c

You can easily send campaigns, e-marketing have actually account using cash will thank you for using our tools, and you can support our Vodafone Cash +201090788026

*** Welcome User Sorry I Mean Hello Brother ✓ Devolper and Design : Mokhtar Abdelkreem ========================================== You Can Follow Us O

Repo Home WPDrawBot - (Repo, Home, WP) A powerful programmatic 2D drawing application for MacOS X which generates graphics from Python scripts. (graphics, dev, mac)

DrawBot DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics. The built-in

Markup is an online annotation tool that can be used to transform unstructured documents into structured formats for NLP and ML tasks, such as named-entity recognition. Markup learns as you annotate in order to predict and suggest complex annotations. Markup also provides integrated access to existing and custom ontologies, enabling the prediction and suggestion of ontology mappings based on the text you're annotating.
Markup is an online annotation tool that can be used to transform unstructured documents into structured formats for NLP and ML tasks, such as named-entity recognition. Markup learns as you annotate in order to predict and suggest complex annotations. Markup also provides integrated access to existing and custom ontologies, enabling the prediction and suggestion of ontology mappings based on the text you're annotating.

Markup is an online annotation tool that can be used to transform unstructured documents into structured formats for NLP and ML tasks, such as named-entity recognition. Markup learns as you annotate in order to predict and suggest complex annotations. Markup also provides integrated access to existing and custom ontologies, enabling the prediction and suggestion of ontology mappings based on the text you're annotating.

This is a passport scanning web service to help you scan, identify and validate your passport created with a simple and flexible design and ready to be integrated right into your system!
This is a passport scanning web service to help you scan, identify and validate your passport created with a simple and flexible design and ready to be integrated right into your system!

Passport-Recogniton-System This is a passport scanning web service to help you scan, identify and validate your passport created with a simple and fle

Reverse the infix string. Note that while reversing the string you must interchange left and right parentheses

Reverse the infix string. Note that while reversing the string you must interchange left and right parentheses. Obtain the postfix expression of the infix expression Step 1.Reverse the postfix expression to get the prefix expression

A calendaring app for Django. It is now stable, Please feel free to use it now. Active development has been taken over by bartekgorny.

Django-schedule A calendaring/scheduling application, featuring: one-time and recurring events calendar exceptions (occurrences changed or cancelled)

A calendaring app for Django. It is now stable, Please feel free to use it now. Active development has been taken over by bartekgorny.

Django-schedule A calendaring/scheduling application, featuring: one-time and recurring events calendar exceptions (occurrences changed or cancelled)

a plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)
a plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)

pytest-sugar pytest-sugar is a plugin for pytest that shows failures and errors instantly and shows a progress bar. Requirements You will need the fol

A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!
A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!

Ubelt is a small library of robust, tested, documented, and simple functions that extend the Python standard library. It has a flat API that all behav

A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!
A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!

Ubelt is a small library of robust, tested, documented, and simple functions that extend the Python standard library. It has a flat API that all behav

An advanced multi-threaded, multi-client python reverse shell for hacking linux systems. There's still more work to do so feel free to help out with the development. Disclaimer: This reverse shell should only be used in the lawful, remote administration of authorized systems. Accessing a computer network without authorization or permission is illegal.
Bit is Python's fastest Bitcoin library and was designed from the beginning to feel intuitive, be effortless to use, and have readable source code.

Bit is Python's fastest Bitcoin library and was designed from the beginning to feel intuitive, be effortless to use, and have readable source code.

WordPress look and feel for Django administration panel
WordPress look and feel for Django administration panel

Django WP Admin WordPress look and feel for Django administration panel. Features WordPress look and feel New styles for selector, calendar and timepi

Comments
  • Split example config files

    Split example config files

    Update the config files so that they're split well for examples

    • Add prettier config for toml
    • Add example toml files
    • fix pyproject.toml
    • remove outdated config
    • Remove marks
    documentation 
    opened by abstractlyZach 1
Releases(v0.10.0)
  • v0.10.0(Jul 30, 2021)

    What’s Changed

    • Bump minor version (#85) @abstractlyZach

    :boom: Breaking Changes

    • use configdir for main script (#79) @abstractlyZach
    • Use ConfigDir for listing layouts (#78) @abstractlyZach
    • read config files from directory (#77) @abstractlyZach

    :package: Build System

    • Add autoformat command (#80) @abstractlyZach

    :books: Documentation

    • Make autorunners clear the terminal whenever they run again (#84) @abstractlyZach
    • update readme (#82) @abstractlyZach

    :rocket: Features

    • add layout total size rule (#83) @abstractlyZach
    • use configdir for main script (#79) @abstractlyZach
    • Use ConfigDir for listing layouts (#78) @abstractlyZach
    • read config files from directory (#77) @abstractlyZach
    • prep for config dir (#76) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(Jul 18, 2021)

    What’s Changed

    • Bump patch version (#75) @abstractlyZach

    :package: Build System

    • Add poetry.lock target to makefile (#62) @abstractlyZach

    :construction_worker: Continuous Integration

    • Add targets for dev and CI setup (#64) @abstractlyZach
    • move mypy into pyproject (#61) @abstractlyZach

    :books: Documentation

    • Split example config files (#73) @abstractlyZach
    • Update README.md (#72) @abstractlyZach
    • Add youtube screencap (#71) @abstractlyZach
    • Add comment (#70) @abstractlyZach
    • update readme (#68) @abstractlyZach
    • update readme (#67) @abstractlyZach
    • Update readme's basic description (#66) @abstractlyZach
    • Add reZIDE logo (#65) @abstractlyZach

    :hammer: Refactoring

    • Refactor config reader files (#74) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(Jul 14, 2021)

  • v0.8.0(Jul 14, 2021)

    What’s Changed

    • Bump minor version (#58) @abstractlyZach
    • Add git files to gitignore so that fd can work better (#55) @abstractlyZach

    :books: Documentation

    • update coverage badge (#57) @abstractlyZach
    • Fix github badge (#56) @abstractlyZach
    • Use github directory for more expressiveness in readme (#54) @abstractlyZach

    :rocket: Features

    • shell completion (#52) @abstractlyZach

    :hammer: Refactoring

    • rename project (#53) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Jul 13, 2021)

    What’s Changed

    • Bump minor version (#51) @abstractlyZach
    • Add extra window manager log statements (#48) @abstractlyZach
    • Use a smaller traceback level if we're using a lower verbosity (#49) @abstractlyZach
    • Wait for window manipulation events to start doing other actions (#46) @abstractlyZach
    • Move verbosity into the start of the program (#47) @abstractlyZach
    • rename container to section (#45) @abstractlyZach
    • Add window document (#44) @abstractlyZach
    • Mark containers when splitting them (#43) @abstractlyZach
    • use windows and containers (#42) @abstractlyZach

    :boom: Breaking Changes

    • print layout names (#50) @abstractlyZach

    :rocket: Features

    • print layout names (#50) @abstractlyZach
    • rule validation (#41) @abstractlyZach

    :hammer: Refactoring

    • print layout names (#50) @abstractlyZach
    • rule validation (#41) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Jun 21, 2021)

    What’s Changed

    • Bump minor version (#40) @abstractlyZach
    • test magic tiler script (#31) @abstractlyZach
    • test window size script (#30) @abstractlyZach
    • Add tests for the get-tree script (#29) @abstractlyZach
    • read config files episode 2 (#28) @abstractlyZach
    • Add tests for tree (#25) @abstractlyZach

    :books: Documentation

    • document magic tiler script (#36) @abstractlyZach
    • Add more interesting windows to the example (#26) @abstractlyZach

    :rocket: Features

    • redesign config (#39) @abstractlyZach
    • read config files (#27) @abstractlyZach

    :hammer: Refactoring

    • redesign config (#39) @abstractlyZach
    • Separate Layout Parsing from Window Management (#38) @abstractlyZach
    • Refactor layout (#37) @abstractlyZach
    • Add magic tiler tests (#35) @abstractlyZach
    • Refactor Magic Tiler into a class (#34) @abstractlyZach
    • Move verbosity into magic-tiler (#33) @abstractlyZach
    • refactor layout (#32) @abstractlyZach
    • read config files (#27) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(May 30, 2021)

    What’s Changed

    • Bump version to 0.5.0 (#24) @abstractlyZach
    • update main example (#19) @abstractlyZach

    :boom: Breaking Changes

    • split windows correctly (#23) @abstractlyZach

    :rocket: Features

    • split windows correctly (#23) @abstractlyZach
    • do layout math (#20) @abstractlyZach

    :hammer: Refactoring

    • reimplement window creation (#22) @abstractlyZach
    • Quality of life changes (#21) @abstractlyZach
    • Create module for DTOs (#18) @abstractlyZach
    • refactor shared interfaces (#17) @abstractlyZach

    :fire: Removals and Deprecations

    • reimplement window creation (#22) @abstractlyZach
    • Quality of life changes (#21) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v.0.4.0(May 21, 2021)

    What’s Changed

    • Bump minor version (#16) @abstractlyZach
    • Create tiles and windows (#14) @abstractlyZach
    • Convert configs from toml to python classes for layout management (#13) @abstractlyZach
    • Use TOML (#12) @abstractlyZach

    :hammer: Refactoring

    • Use marks (#15) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(May 19, 2021)

    What’s Changed

    • Bump minor version (#11) @abstractlyZach
    • Add motivation into readme (#9) @abstractlyZach
    • Create vertical and horizontal windows (#8) @abstractlyZach
    • Check for empty workspace (#7) @abstractlyZach

    :books: Documentation

    • Add resizing functionality (#10) @abstractlyZach

    :rocket: Features

    • Add resizing functionality (#10) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(May 18, 2021)

    What’s Changed

    • bump version (#6) @abstractlyZach
    • Use pyproject.toml as the version Source of Truth (#3) @abstractlyZach
    • Add ci (#2) @abstractlyZach
    • First commit (#1) @abstractlyZach

    :rocket: Features

    • create main script (#5) @abstractlyZach
    • Add basic window management (#4) @abstractlyZach
    Source code(tar.gz)
    Source code(zip)
Owner
Zach
Hi! :wave:
Zach
Integrate clang-format with Sublime Text

Sublime Text Clang Format Plugin This is a minimal plugin integrating clang-format with Sublime Text, with emphasis on the word minimal. It is not rea

Jon Palmisciano 1 Dec 17, 2021
Blender add-on for baking your scene to textures

Bake Scene This add-on bakes your scene to textures. This is useful in many situations: Creating trim sheets Creating decals Creating hair cards Creat

5 Sep 20, 2022
An echo kernel for JupyterLite

jupyterlite-echo-kernel An echo kernel for JupyterLite. Requirements JupyterLite = 0.1.0a10 Install To install the extension, execute: pip install ju

JupyterLite 7 Dec 07, 2022
VSCode extension to sort and refactor python imports using reorder-python-imports.

reorder-python-imports VSCode extension to sort and refactor python imports using reorder-python-imports. Unlike other import organizers, reorder-pyth

Ryan Butler 3 Aug 26, 2022
Python 3 patcher for Sublime Text v4107-4114 Windows x64

sublime-text-4-patcher Python 3 patcher for Sublime Text v4107-4114 Windows x64 Credits for signatures and patching logic goes to https://github.com/l

187 Dec 27, 2022
This is code for IDLE python/ Magic8Ball Code

Magic8Ball this is code for IDLE python/ Magic8Ball Code this code is for beginers i hope you can learn code form this don't ever be a script kiddie a

1 Nov 05, 2021
A comfy custom IDE where you can feel right at home

reZIDE a comfy custom IDE where you can feel right at home 🏡 Use simple, declarative configuration files to create complex IDEs with a single command

Zach 7 Jan 26, 2022
notebookJS: seamless JavaScript integration in Python Notebooks

notebookJS enables the execution of custom JavaScript code in Python Notebooks (Jupyter Notebook and Google Colab). This Python library can be useful for implementing and reusing interactive Data Vis

jorgehpo 146 Dec 07, 2022
Gaphor is a UML and SysML modeling application written in Python.

Gaphor is a UML and SysML modeling application written in Python. It is designed to be easy to use, while still being powerful. Gaphor implements a fully-compliant UML 2 data model, so it is much mor

Gaphor 1.3k Jan 07, 2023
Mu - A Simple Python Code Editor

A small, simple editor for beginner Python programmers. Written in Python and Qt5.

Mu 1.2k Jan 03, 2023
Python Indent - Correct python indentation in Visual Studio Code.

Python Indent Correct python indentation in Visual Studio Code. See the extension on the VSCode Marketplace and its source code on GitHub. Please cons

Kevin Rose 57 Dec 15, 2022
Kite IntelliJ plugin

Handbook Supported platforms The Kite plugin supports the following environments: PyCharm Community PyCharm Professional IntelliJ Community with the P

Kite 57 Dec 23, 2022
Wasm powered Jupyter running in the browser 💡

JupyterLite JupyterLite is a JupyterLab distribution that runs entirely in the browser built from the ground-up using JupyterLab components and extens

JupyterLite 3k Jan 04, 2023
💻 Open recent VS Code folders and files using Ulauncher

ulauncher-vscode-recent 💻 Open recent VS Code folders and files using Ulauncher. Quickly open recently-opened VS Code project directories and files.

Mihir Chaturvedi 14 Nov 24, 2022
Python IDE or notebook to generate a basic Kepler.gl data visualization

geospatial-data-analysis [readme] Use this code in your Python IDE or notebook to generate a basic Kepler.gl data visualization, without pre-configura

2 Sep 05, 2022
A Sublime Text package that allows a user to view all the available core/plugin commands for Sublime Text and Sublime Merge, along with their documentation/source.

CommandsBrowser A Sublime Text package that allows a user to view all the available core/plugin commands for Sublime Text and Sublime Merge, along wit

Sublime Instincts 26 Nov 15, 2022
A GitHub Action hosted Python IDE!

What is this ? This is an IDE running on GitHub Actions which can help in..... Running small snippets. Running codes whenever PC is not available and

Jainam Oswal 21 Nov 09, 2022
Multi-user server for Jupyter notebooks

Technical Overview | Installation | Configuration | Docker | Contributing | License | Help and Resources Please note that this repository is participa

JupyterHub 7k Jan 02, 2023
Launch a ready-to-code Wagtail Live development environment with a single click.

Wagtail Live Gitpod Launch a ready-to-code Wagtail Live development environment with a single click. Steps: Click the Open in Gitpod button. Relax: a

Coen van der Kamp 6 Oct 29, 2021
Run context-aware commands from your source code comments

Run context-aware commands from your source code comments. Codeline allows you to run custom commands directly from source-code comments, combining th

Rory Byrne 32 Nov 09, 2021