# presser.nvim A collection of word processing tools to press over your files easier with UIs. For unstable and latest features, see the [experimental](https://git.closedless.xyz/TheOnePath/presser.nvim/src/branch/experimental) branch. ## Architecture The diagram below outlines the overall architecture of presser.nvim and how each component interacts with each other. +++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ + + + + + + + + + + + + + + + + + + + Context Manager + + Steamers + + Actions + + + + + + + + + + + + + + + + + + + +++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ | | | [5] +---------------------------------------------+-----+ [4] | v | +++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ | + + + + | + + + + | + + [2] + + [3] | + Builtins + <--------------- + Pressers + <-----------------+ + + + + | + + + + | + + + + | +++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ | I | | [1] | [6] | I +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + + + User + + Window buffer + + + + + +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ [1] - The User interacts with Builtins to use a Presser. [2] - Builtins inherit Pressers and lazy loads them to be accessed by Users. [3] - Pressers make use of Actions to do the work. [4] - Pressers inherit Steamers, giving them the ability to generate UIs for the user. [5] - Pressers make use of the Context Manager to organise and track Steamers. [6] - Actions will directly modify the contents of the Window buffer. ### List of Components * User + Window buffer - refers to Neovim, which has the User who does something within the Window buffer. * Builtins - Lazy loaded interface responsible for acting as a proxy to Pressers. * Pressers - Tools which allow the User to perform different word processing tasks. Comprised of Steamers, and perform Actions to modify the Window buffer. * Steamers - Class module which is responsible for constructing buffers, creating a UI for the User. * Context Manager - A data structure which is used to store Steamers for a given context (the Presser). Also known as, "GCM" due to being scoped to vim.g. * Actions - Perform an action defined for a Presser, which will modify the Window buffer in some way.