{"id":28343359,"url":"https://github.com/trippwill/rws.nvim","last_synced_at":"2025-07-29T03:44:43.351Z","repository":{"id":293915451,"uuid":"985492468","full_name":"trippwill/rws.nvim","owner":"trippwill","description":"Scroll other windows without losing focus. For Neovim.","archived":false,"fork":false,"pushed_at":"2025-06-07T23:33:55.000Z","size":46,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-19T19:41:53.800Z","etag":null,"topics":["lua","luajit","neovim","neovim-plugin"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trippwill.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2025-05-17T21:59:24.000Z","updated_at":"2025-06-07T23:33:58.000Z","dependencies_parsed_at":"2025-06-19T19:47:14.565Z","dependency_job_id":null,"html_url":"https://github.com/trippwill/rws.nvim","commit_stats":null,"previous_names":["trippwill/rws.nvim"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/trippwill/rws.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trippwill%2Frws.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trippwill%2Frws.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trippwill%2Frws.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trippwill%2Frws.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trippwill","download_url":"https://codeload.github.com/trippwill/rws.nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trippwill%2Frws.nvim/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267625187,"owners_count":24117577,"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","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["lua","luajit","neovim","neovim-plugin"],"created_at":"2025-05-27T06:59:25.867Z","updated_at":"2025-07-29T03:44:43.341Z","avatar_url":"https://github.com/trippwill.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RWS.nvim\n\nRemote Window System for Neovim — control and send commands to unfocused windows.\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Usage](#usage)\n- [Configuration](#configuration)\n- [How It Works](#how-it-works)\n- [Troubleshooting](#troubleshooting)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Features\n\n- Route keypresses and commands to unfocused target windows\n- Scroll, move, or execute custom actions in target windows even when you're in insert mode\n- Visual highlight for the active target window\n- Easily reset or change the target at any time\n- Extensible key routing and configuration\n\n---\n\n## Installation\n\n**Requirements:**\n- Neovim 0.11+\n- (Optional) [nvim-lua/plenary.nvim](https://github.com/nvim-lua/plenary.nvim) for profiling and running tests\n\n**With [lazy.nvim](https://github.com/folke/lazy.nvim):**\n\n```lua\n{\n  'trippwill/rws.nvim',\n  dependencies = { 'nvim-lua/plenary.nvim', optional = true },\n  opts = {},\n}\n```\n\nA [lazy.lua](./lazy.lua) file is included with default configuration and keymaps for scrolling the target window.\n\nWhen using lazy.nvim, it will be loaded automatically.\n\n---\n\n## Quick Start\n\n1. **Install the plugin** using your plugin manager.\n2. **Use the default key bindings** (see below) or configure your own.\n3. **Try it out:**\n   - Open multiple windows (`:vsplit`, `:split`, etc).\n   - Use `\u003cM-Up\u003e`, `\u003cM-Down\u003e`, `\u003cM-Left\u003e`, `\u003cM-Right\u003e` to select a target window.\n   - Use `\u003cS-Up\u003e`, `\u003cS-Down\u003e`, `\u003cS-Left\u003e`, `\u003cS-Right\u003e` to scroll the target window.\n   - Press `\u003cM-Esc\u003e` to reset the target.\n\n---\n\n## Usage\n\n### Default Key Bindings\n\n| Key           | Action                                 | Mode        |\n|---------------|----------------------------------------|-------------|\n| `\u003cM-Up\u003e`      | Target window above                    | Normal/Insert |\n| `\u003cM-Down\u003e`    | Target window below                    | Normal/Insert |\n| `\u003cM-Left\u003e`    | Target window to the left              | Normal/Insert |\n| `\u003cM-Right\u003e`   | Target window to the right             | Normal/Insert |\n| `\u003cM-Esc\u003e`     | Reset target window                    | Normal/Insert |\n| `\u003cS-Left\u003e`     | Scroll target window up a line         | Normal/Insert |\n| `\u003cS-Right\u003e`    | Scroll target window down a line       | Normal/Insert |\n| `\u003cS-Up\u003e`       | Scroll target window up a half-page    | Normal/Insert |\n| `\u003cS-Down\u003e`     | Scroll target window down a half-page  | Normal/Insert |\n\n### Commands\n\n- `:RemWinSelect {direction|winnr}` — Select a target window (by direction or number)\n- `:RemWinReset` — Reset the target window to its original state\n- `:RemWinRoute {key}` — Route a key or key sequence to the target window\n\n---\n\n## Configuration\n\nCustomize RWS via the `opts` table:\n\n| Option              | Type                | Description                                 | Default                |\n|---------------------|---------------------|---------------------------------------------|------------------------|\n| `debug`             | boolean/\"verbose\"   | Enable debug mode                           | `false`                |\n| `allow_current_win` | boolean             | Allow targeting the current window          | `false`                |\n| `target_options`    | table               | Options to apply to the target window       | See below              |\n| `highlights`         | table               | Highlight groups to define when the plugin is loaded       | See below              |\n| `keys`              | table               | Routed key definitions                      | See below              |\n\n**Default `target_options`:**\n\n```lua\n{\n  winhighlight = 'NormalNC:Normal',\n  cursorline = false,\n  statuscolumn = '%#RWSTargetWindow#',\n  signcolumn = 'no',\n  number = false,\n  relativenumber = true,\n  foldlevel = 999,\n  foldcolumn = '0',\n}\n```\n\n**Default `highlights`:**\n\n```lua\n{\n  { 'RWSTargetWindow', fg = '#556745', bg = 'NONE' }\n}\n```\n\n**Default `keys`:**\n\n```lua\n  {\n    { '\u003cS-Up\u003e', cmd = 'normal! \u003cC-u\u003e', mode = { 'n', 'i' }, desc = 'Scroll the target window up half a page' },\n    { '\u003cS-Down\u003e', cmd = 'normal! \u003cC-d\u003e', mode = { 'n', 'i' }, desc = 'Scroll the target window down half a page' },\n    { '\u003cS-Left\u003e', cmd = 'normal! \u003cC-y\u003e', mode = { 'n', 'i' }, desc = 'Scroll the target window up one line' },\n    { '\u003cS-Right\u003e', cmd = 'normal! \u003cC-e\u003e', mode = { 'n', 'i' } },\n  }\n```\n\n---\n\n## How It Works\n\nRWS temporarily applies custom options and highlights to a target window. Keypresses are routed to the target using user commands, allowing you to scroll or execute actions in any window without changing focus. The target is automatically reset if you focus it or close it.\n\n---\n\n## Troubleshooting\n\n**No effect when routing keys?**\n- Make sure you have selected a target window using the key bindings or `:RemWinSelect`.\n- Key sequences are not routable if not defined in your `keys` config.\n- When using the default lazy.nvim config, only the commands `:RemWinSelect` and `:RemWinReset` will autoload the plugin.\n\n**Cannot target the current window?**\n- By default, targeting the current window is disabled. Set `allow_current_win = true` in your config to override. Fair warning, this is a strange experience.\n\n**Plugin not loading or commands missing?**\n- Ensure you are using Neovim 0.11 or newer.\n- If using lazy-loading, make sure the `cmd` and `keys` options are set in your plugin spec, like they are in the default `lazy.lua` file.\n\n**Profiling errors or missing features?**\n- [plenary.nvim](https://github.com/nvim-lua/plenary.nvim) is optional, and is only required for development. Install it if you want to profile or run tests.\n\n**Still having issues?**\n- Enable debug mode: set `debug = true` or `debug = \"verbose\"` in your config for more logging.\n- Open an issue with details and your configuration.\n\n---\n\n## Contributing\n\nContributions are welcome!\n\n- Fork the repository and create a feature branch.\n- Add or update tests in `tests/` as appropriate.\n- Run tests with `sh test.sh`. Ensure Neovim 0.11+\n  and [plenary.nvim](https://github.com/nvim-lua/plenary.nvim) are installed.\n- For documentation, see and update the Lua docstrings and run `sh doc.sh` to regenerate help files. Docstrings are parsed by vimcat.\n- Open a pull request with a description of your changes.\n\nFor questions or feature requests, open an issue or start a discussion.\n\n---\n\n## License\n\nApache License 2.0 — see [LICENSE](./LICENSE) for details.\n\n---\n\nFor advanced usage, custom key routing, or troubleshooting, see the help file: `:help rws.nvim`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrippwill%2Frws.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrippwill%2Frws.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrippwill%2Frws.nvim/lists"}