Commit graph

414 commits

Author SHA1 Message Date
Autumn
1ca7477aa0
feat(terminal): mouse AnyEvent tracking (1003)
* Switch to multi-valued mouse buttons and stub for remembering old mouse button state

* Stubs for passing all mouse events from user-facing terminal to server
side terminal(s) in, including protobuf.

Removed "held" mouse actions.

Currently commented out calls to left/middle/right-click/release --
need to fix this though, as selection/copy-paste are broken too.

cargo build/test/run works OK.

cargo xtask build/test/run fails, unable to find crate input::mouse.

* 'cargo xtask build' working using refactored functions.

* fix(plugins): various cwd fixes (#3545)

* fix(plugins): various cwd fixes

* fix tests

* docs(changelog): floating_panes cwd fix

* feat(plugins): rerun_command_pane API (#3546)

* feat(plugins): rerun_command_pane API

* fix tests

* docs(changelog): rerun command pane plugin API

* feat(plugins): command pane re-run event (#3553)

* docs(changelog): CommandPaneReRun plugin event

* feat(ux): first run setup-wizard (#3556)

* separate saved/runtime structure, kind of working

* serializing config

* work

* work

* save config through the configuration screen

* work

* startup wizard

* style(code): cleanups

* fix(session): reload config from disk when switching sessions

* style(fmt): rustfmt

* fix(config): propagate cli config options to screen

* style(fmt): rustfmt

* docs(changelog): first run setup wizard

* feat(ux): reload config at runtime (#3558)

* feat(ux): reload config at runtime

* style(fmt): rustfmt

* docs(changelog): reload config at runtime

* feat(ux): change themes at runtime (#3559)

* docs(changelog): change themes at runtime

* feat(plugins): API to temporarily bind keys to send a message to a specific plugin id (#3561)

* docs(changelog): message to specific plugins API

* feat(ux): reload config options at runtime (#3564)

* change simplified_ui at runtime

* change default_shell at runtime

* change pane_frames (from config) at runtime

* all other options

* some refactoring

* style(fmt): rustfmt

* docs(changelog): reload config options at runtime

* feat(plugins): add plugin APIs to affect other panes (#3576)

* resize_pane_with_id and close_pane_with_id

* focus_pane_with_id and edit_scrollback_for_pane_with_id

* write_to_pane_id and write_chars_to_pane_id

* lots more commands

* style(fmt): rustfmt

* docs(changelog): new plugin apis

* docs(readme): update sponsors

* feat(plugins): APIs to break multiple panes into a new tab or an existing tab (#3610)

* feat(plugins): break multiple panes to a new tab

* fix(layouts): properly ignore run instructions when breaking panes

* feat(plugins): break multiple panes to existing tab

* feat(apis): allow these methods to also specify whether they want focus changed to the tab

* various fixes

* allow specifying name for the new tab when breaking out panes

* style(fmt): rustfmt

* docs(changelog): break multiple panes APIs

* feat(config): allow loading background plugins on startup (#3616)

* remove old partial implementation

* feat(plugins): allow loading background plugins on startup

* add e2e test

* update config

* udpate config merging

* style(fmt): rustfmt

* docs(changelog): background plugins

* feat(ui): built-in plugin manager (#3633)

* add plugin list to session info

* feat(plugins): new_plugin and reload_plugin API commands

* feat(plugins): built-in plugin manager

* style(fmt): rustfmt

* update plugins

* docs(changelog): plugin-manager

* fix(resurrection): various serialization issues (#3636)

* fix(serialization): use kdl-rs for serialization

* style(fmt): remove dead code

* tests(serialization): update snapshots

* style(fmt): rustfmt

* docs(changelog): resurrection fixes

* fix(http): web requests (#3643)

* docs(changelog): http fix

* feat(cli): make --layout idempotent(-ish) (#3650)

* feat(cli): if inside a session, apply --layout to the session

* fix(screen): some focusing races when switching tab focus

* style(fmt): rustfmt

* docs(changelog): improve --layout flag

* fix(plugins): handle race when setting plugin selectable (#3651)

* docs(changelog): plugin selectable race

* feat(cli): show CACHE_DIR in `zellij setup --check` (#3652)

* docs(changelog): add cache dir to setup

* fix(ui): various pane name fixes (#3653)

* docs(changelog): pane name fixes

* fix(ux): only damage the relevant swap layout layer when resizing panes (#3654)

* docs(changelog): swap layout damage fix

* fix(ui): set background color for UI components according to theme (#3658)

* docs(changelog): ui component fix

* fix(tab): recover from crash when resizing panes (#3659)

* chore(git): Add plugin’s issue templates (#3621)

Co-authored-by: Zykino <3809938+Zykino@users.noreply.github.com>

* fix(ux): make sure esc works as expected in unlock-first (#3660)

* fix(ux): make sure esc always drops us back to base mode

* fix(ux): add locked

* fix(plugins): handle concurrent http downloads (#3664)

* docs(changelog): concurrent http plugin downloads

* fix(plugins): various plugin api and other fixes (#3665)

* fix(plugins): do not allow focusing an unselectable pane

* fix(folders): make sure config and cache folders exist on app start

* docs(changelog): plugin fixes

* fix(plugins): force use curl system lib on macOS (#3668)

* docs(changelog): fix http requests for macos

* fix(resurrection): plugin alias resurrection (#3673)

* fix(resurrection): make sure plugin aliases are serialized properly

* style(fmt): rustfmt

* docs(changelog): resurrection alias fix

* fix(plugins): do not allow attaching to the same session (#3674)

* docs(changelog): fix plugins attaching to same session

* fix(plugins): allow switching to a new session with cwd without specifying a layout (#3676)

* docs(changelog): switch_session_with_cwd plugin api

* fix(config): watch/update config given with --config when appropriate (#3678)

* docs(changelog): reload config flag fix

* feat(plugins): rebind keys api (#3680)

* feat(plugins): add API to explicitly unbind/rebind specific keys in specific modes

* style(fmt): rustfmt

* docs(changelog): rebind keys plugin api

* fix(client): repeat retry screen instruction (#3570)

* docs(changelog): sixel fix

* feat(ui): rebind keys UI (#3686)

* rebind action working

* functional ui

* responsive ui

* some refactoring

* properly reset ui state

* minor fixes

* style(fmt): rustfmt

* style(fmt): remove dead code

* chore(deps): update to Wasmtime 21.0.2 (#3685)

This fixes a race condition which causes occasional crashes and may
enable a sandbox escape:

<https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-7qmx-3fpx-r45m>

* docs(changelog): wasmtime patch upgrade

* feat(plugins): add API to list clients, their focused panes and running commands/plugins (#3687)

* fix(list-clients): properly show client info after a tab was closed

* feat(plugins): add API to list clients, their focused panes and running commands/plugins

* style(fmt): rustfmt

* docs(changelog): list-clients plugin api

* docs(changelog): rebind keys UI

* feat(ui): bring back fullscreen indication (#3688)

* feat(ui): bring back fullscreen indication

* fix e2e tests

* docs(changelog): bring back fullscreen indication

* fix(ux): new interface/configuration touch-ups (#3691)

* fix(ui): copy to clipboard in new ui

* fix(ux): allow navigating out of scrolled pane

* style(fmt): rustfmt

* docs(changelog): ui touch-ups

* fix(plugins): rebind insert (#3692)

* fix(tab): recover from closing a pane outside the viewport

* remap insert in plugin manager

* fix(plugins): remap insert key

* style(fmt): rustfmt

* docs(changelog): insert rebind

* fix(plugins): make sure to always render on first resize (#3693)

* fix(plugins): make sure to always render on first resize

* style(fmt): rustfmt

* fix tests

* docs(changelog): plugins first-render fix

* fix(terminal): recover from partial line drop (#3695)

* docs(changelog): grid fix

* fix(configuration): leave notification up when base mode changes (#3696)

* fix(layouts): suspend commands in remote layouts (#3697)

* fix(layouts): suspend commands in remote layouts

* style(fmt): rustfmt

* docs(changelog): suspend commands in remote layouts

* feat(plugins): add configurable black background for ui components (#3681)

* feat(plugins): add transparent background for text and nested_list

* chore: fix formatting issue

* feat: invert flag behaviour

* feat: implement bg_black handling for table cells

* fix: order of selected and bg_black in protocol

* chore: rename from bg_black to opaque

* fix: explicit selected, if opaque and selected for text

* chore: fix formatting issues

* feat: opaque tab-bar

* feat: opaque session-manager bars

* feat: opaque ribbon in plugin manager

* feat: opaque one-line ui

* feat: opaque tab-bar in configuration plugin

* style(fmt): various cleanups (#3698)

* fix(configuration): rounding error in ui

* style(fmt): remove warnings

* style(fmt): rustfmt

* docs(changelog): ui components bg fix

* feat(theme): add theme ao (#3478)

* feat(themes): add atelier sulphurpool theme (#3596)

* feat(themes): added ayu mirage, light, and dark themes (#3567)

Co-authored-by: Evan Lauer <evanlauer@u.boisestate.edu>

* feat(themes): add Vesper theme (#3443)

* feat(themes): add night-owl theme (#3393)

Co-authored-by: Bruno Mesquita <bmesquita@atlassian.com>

* feat: add iceberg dark/light themes (#3323)

* theme: add onedark theme to the available themes (#3313)

Onedark is a popular theme from Atom text editor. 

I've used these sources as the reference for implementing the theme in zellij.
https://github.com/joshdick/onedark.vim
https://www.figma.com/community/file/1137445418485757476/atom-one-dark-color-palette

* feat(themes): add basic ANSI theme (#3308)

* fix(theme): fix for gruvbox light and dark (#3255)

the previous themes do not have the correct colors and aren't great
for the eyes. when selecting e.g. to copy text, it uses
red for light theme and the same bg for dark theme.

the previous light theme is not even a light theme so I also
fixed that as well.

Signed-off-by: Soc Virnyl Estela <contact@uncomfyhalomacro.pl>

* feat(themes): create lucario.kdl (#3030)

* docs(changelog): new themes

* style(fmt): remove warnings (#3701)

* fix: (tabs) move to next tab if moving to next pane from fullscreen pane (#3498)

Co-authored-by: Vasilis Manolopoulos <vmanolop@gmail.comh>

* docs(changelog): MoveFocusOrTab fullscreen awareness

* docs(readme): add https to curl download

* fix(ux): configuration fixes (#3713)

* fix(startup): try create config folder if it doesn't exist

* fix(configuration): tab bar ui

* fix(configuration): rebind ctrl-s to ctrl-a

* fix(configuration): remove extra rebinding leaders screen

* docs(changelog): configuration fixes

* fix(ux): forward keys to pane in locked mode and base mode rather than hard-coded normal mode (#3715)

* fix(keybindings): only forward clear keys in locked mode and default mode

* style(fmt): rustfmt

* docs(changelog): base mode keybindings fix

* chore(release): v0.41.0

* HOTFIX: default plugins generic compilation issue

* HOTFIX: patch version

* chore(release): v0.41.1

* chore(repo): bump development version

* fix(input): remove support for extra modifiers (#3725)

* docs(changelog): kitty input fix

* fix(input): refix ctrl-j (#3746)

* fix(input): refix ctrl-j

* fix e2e tests

* docs(changelog): refix ctrl-j

* fix(plugins): cwd and usability fixes (#3749)

* fix(plugins): maintain cwd between plugin reloads

* fix(plugin-manager): default to loading plugins in the foreground and allow sending space in configuration

* docs(changelog): plugin fixes

* fix(output-buffer): truncate grid height when not rendering it fully (#3750)

* fix(output-buffer): truncate grid height when not rendering it fully

* also fix for cases where the changed lines are not contiguous

* docs(changelog): output-buffer fix

* fix(tabs): maintain event order for MoveTab (#3758)

* fix(tabs): maintain event order for MoveTab

* style(fmt): rustfmt

* docs(changelog): event ordering fix

* fix(plugins): do not open extra instances of aliases (#3759)

* docs(changelog): do not duplicate built-in plugins

* fix(terminal): reset kitty keyboard support when resetting terminal state (#3760)

* docs(changelog): kitty reset fix

* fix(config): crash if unable to watch config folder (#3761)

* docs(changelog): config dir crash fix

* fix(statup): slow startup on some occasions (#3767)

* add debug logs

* add log messages

* some more logs and possible fix?

* remove logs

* style(fmt): rustfmt

* remove comment

* docs(changelog): occasional slow startup fix

* fix(panes): handle various invalid state situations (#3776)

* docs(changelog): invalid state handling

* chore: add vendored_curl feature (#3766)

* docs(changelog): vendored curl option

* fix(ux): change plugin manager shortcut (#3779)

* docs(changelog): shortcut change

* fix(screen): send PaneClosed event to plugins also when closing the whole tab (#3781)

* docs(changelog): pane-closed event

* feat(plugins): add /cache folder (#3787)

* feat(plugins): add /cache folder

* style(fmt): rustfmt

* docs(changelog): plugin cache folder

* docs(changelog): plugin cache folder url

* chore(package): vendor common_path (#3780)

* vendoring common_path

* add original license to common_path

* Clarify license scope

* refactor: remove rand dependency

---------

Co-authored-by: Aram Drevekenin <aram@poor.dev>

* docs(changelog): vendor common_path

* fix(plugins): derive hash and ord for PaneId (#3790)

* docs(changelog): derive hash and ord for paneid

* style(fmt): remove warnings

* chore(version): set patch version

* chore(release): v0.41.2

* chore(repo): bump development version

* chore(repo): fix typo in lock file

* fix(plugins): properly focus pane after tab was closed (#3797)

* fix(plugins): properly focus pane after tab was closed

* style(fmt): rustfmt

* docs(changelog): focus_pane_with_id fix

* fix(plugins): properly pad UI elements when they have a background (#3806)

* fix(plugins): mark selected background up until component width

* style(fmt): rustfmt

* docs(changelog): ui component padding

* feat(plugins): allow changing the plugin's `/host` folder (under a new permission) (#3827)

* working without notifying plugins

* permissions and events

* cleanups and formatting

* style(fmt): rustfmt

* docs(changelog): allow plugins to change host folder

* chore(repo): add funding.json (#3838)

* chore(repo): add funding.json

* update funding json url

* fix(plugins): do not detach if using a slash in a session name (#3839)

* docs(changelog): slash detach fix

* fix(plugins): properly focus plugin after it was hidden (#3841)

* docs(changelog): plugin hidden focus fix

* fix(screen): off by 1 error when focusing layout tab (#3844)

* docs(changelog): layout tab focus fix

* fix(multiuser): properly clear fake cursors (#3845)

* docs(changelog): multiplayer cursor fix

* feat(ux): pin floating panes (#3876)

* working

* ui indication

* add keybinding

* add to plugin panes

* fix with multiple cursors

* toggle with the mouse

* fix e2e tests and add new one

* some cleanups

* add to layouts

* make mouse click more lenient

* allow setting a new floating pane as pinned

* make toggle work throughthe command line

* add to plugin api

* get tests to pass

* style(fmt): rustfmt

* docs(changelog): pin floating panes

* fix(layout-applier): logical index pane sorting (#3893)

* initial draft

* working with floating panes as well

* use the same method for applying an initial layout to tiled panes

* some refactoring

* all code paths working with logical positioning fallback!

* get tests to compile

* get e2e tests to pass

* fix e2e remote runner

* breadth-first layout sorting

* fix some bugs

* style(fmt): rustfmt

* style(fmt): remove comments

* docs(changelog): logical index pane sorting

* fix(terminal): mode 2026 feature detection response (#3884)

The response to the 2026 mode query was missing a `?` character.

The response should be of the format `CSI ? 2026 ; N $ y` where N can
be any value in the range 0-4 inclusive.

References:

https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036
https://vt100.net/docs/vt510-rm/DECRPM.html

* docs(changelog): synchronized rendering query response

* fix(terminal): cursor overflow (#3894)

* docs(changelog): cursor overflow fix

* fix(ux): make the Zellij mouse interaction work

* fix(rendering): only render if selection/floating-pane position was changed

* do not clear copied to clipboard message on mouse motion

* various functionality fixes

* fix tests

* fixes and cleanups

* style(fmt): rustfmt

* fix(mouse): only report state to plugins when it changed

* fix(plugins): send mouse clicks to inactive panes

* tests: any event tracking in panes

* style(fmt): rustfmt

* style: remove unused stuff

---------

Signed-off-by: Soc Virnyl Estela <contact@uncomfyhalomacro.pl>
Co-authored-by: Autumn Lamonte <AutumnWalksTheLake@gmail.com>
Co-authored-by: Aram Drevekenin <aram@poor.dev>
Co-authored-by: Zykino <Zykino@users.noreply.github.com>
Co-authored-by: Zykino <3809938+Zykino@users.noreply.github.com>
Co-authored-by: Daniel Jankowski <Daniel.Jankowski@rub.de>
Co-authored-by: Manuel de Prada Corral <6536835+manueldeprada@users.noreply.github.com>
Co-authored-by: bjorn3 <17426603+bjorn3@users.noreply.github.com>
Co-authored-by: Michael Jones <yardquit@pm.me>
Co-authored-by: carl <44021312+achristmascarl@users.noreply.github.com>
Co-authored-by: Evthestrike <62308745+Evthestrike@users.noreply.github.com>
Co-authored-by: Evan Lauer <evanlauer@u.boisestate.edu>
Co-authored-by: Rafael Bardini <rbardini@users.noreply.github.com>
Co-authored-by: Bruno Mesquita <brunocmesquita@gmail.com>
Co-authored-by: Bruno Mesquita <bmesquita@atlassian.com>
Co-authored-by: Chromo-residuum-opec <x@matte.fyi>
Co-authored-by: Shone Binu <62597277+shonebinu@users.noreply.github.com>
Co-authored-by: Mike Greiling <mike@pixelcog.com>
Co-authored-by: Soc Virnyl S. Estela <socvirnyl.estela+github@uncomfyhalomacro.pl>
Co-authored-by: Eric Raio <43896+ericraio@users.noreply.github.com>
Co-authored-by: Vasileios Manolopoulos <44965914+VasilisManol@users.noreply.github.com>
Co-authored-by: Vasilis Manolopoulos <vmanolop@gmail.comh>
Co-authored-by: tranzystorekk <tranzystorek.io@protonmail.com>
Co-authored-by: s1syph0s <34000276+s1syph0s@users.noreply.github.com>
Co-authored-by: Darren Burns <darrenburns@users.noreply.github.com>
2025-01-14 15:42:06 +01:00
Aram Drevekenin
42adc8cd04
feat(ux): stack panes command (#3905)
* working across tabs and floating panes through the cli

* finalize cli command

* plugin api

* style(fmt): rustfmt

* fix: re-focus pane in stack if it was focused

* style(fmt): rustfmt

* remove outdated comment
2024-12-31 12:37:23 +01:00
Aram Drevekenin
d70cd011c2
fix(terminal): cursor overflow (#3894) 2024-12-26 18:40:14 +01:00
Aram Drevekenin
86535f1612
fix(layout-applier): logical index pane sorting (#3893)
* initial draft

* working with floating panes as well

* use the same method for applying an initial layout to tiled panes

* some refactoring

* all code paths working with logical positioning fallback!

* get tests to compile

* get e2e tests to pass

* fix e2e remote runner

* breadth-first layout sorting

* fix some bugs

* style(fmt): rustfmt

* style(fmt): remove comments
2024-12-25 20:26:27 +01:00
Aram Drevekenin
dd291e2a1f
feat(ux): pin floating panes (#3876)
* working

* ui indication

* add keybinding

* add to plugin panes

* fix with multiple cursors

* toggle with the mouse

* fix e2e tests and add new one

* some cleanups

* add to layouts

* make mouse click more lenient

* allow setting a new floating pane as pinned

* make toggle work throughthe command line

* add to plugin api

* get tests to pass

* style(fmt): rustfmt
2024-12-16 16:03:20 +01:00
Aram Drevekenin
0c21eae664
feat(plugins): allow changing the plugin's /host folder (under a new permission) (#3827)
* working without notifying plugins

* permissions and events

* cleanups and formatting

* style(fmt): rustfmt
2024-12-01 11:06:44 +01:00
Aram Drevekenin
0012a676d2 style(fmt): remove warnings 2024-11-19 09:55:49 +01:00
Aram Drevekenin
0d4b00c4d4
fix(plugins): derive hash and ord for PaneId (#3790) 2024-11-19 10:04:19 +01:00
s1syph0s
28705bce22
chore(package): vendor common_path (#3780)
* vendoring common_path

* add original license to common_path

* Clarify license scope

* refactor: remove rand dependency

---------

Co-authored-by: Aram Drevekenin <aram@poor.dev>
2024-11-19 10:00:40 +01:00
Aram Drevekenin
dbe38401e5
fix(plugins): do not open extra instances of aliases (#3759) 2024-11-11 17:44:38 +01:00
Aram Drevekenin
e8b95402d8
fix(input): refix ctrl-j (#3746)
* fix(input): refix ctrl-j

* fix e2e tests
2024-11-08 14:34:47 +01:00
Aram Drevekenin
80fcd0fb75
fix(input): remove support for extra modifiers (#3725) 2024-11-05 11:07:42 +01:00
Aram Drevekenin
72f6b502d1
fix(ux): forward keys to pane in locked mode and base mode rather than hard-coded normal mode (#3715)
* fix(keybindings): only forward clear keys in locked mode and default mode

* style(fmt): rustfmt
2024-10-31 16:49:48 +01:00
Aram Drevekenin
549cfe02be
fix(ux): configuration fixes (#3713)
* fix(startup): try create config folder if it doesn't exist

* fix(configuration): tab bar ui

* fix(configuration): rebind ctrl-s to ctrl-a

* fix(configuration): remove extra rebinding leaders screen
2024-10-31 14:35:13 +01:00
Aram Drevekenin
499fd64df8
style(fmt): remove warnings (#3701) 2024-10-25 13:12:24 +02:00
Aram Drevekenin
2248080de9
style(fmt): various cleanups (#3698)
* fix(configuration): rounding error in ui

* style(fmt): remove warnings

* style(fmt): rustfmt
2024-10-24 18:23:14 +02:00
Aram Drevekenin
8715035f8c
fix(layouts): suspend commands in remote layouts (#3697)
* fix(layouts): suspend commands in remote layouts

* style(fmt): rustfmt
2024-10-24 14:33:31 +02:00
Aram Drevekenin
d671ab650e
feat(plugins): add API to list clients, their focused panes and running commands/plugins (#3687)
* fix(list-clients): properly show client info after a tab was closed

* feat(plugins): add API to list clients, their focused panes and running commands/plugins

* style(fmt): rustfmt
2024-10-22 15:27:40 +02:00
Aram Drevekenin
0c9d72c51e
feat(plugins): rebind keys api (#3680)
* feat(plugins): add API to explicitly unbind/rebind specific keys in specific modes

* style(fmt): rustfmt
2024-10-15 17:27:44 +02:00
Aram Drevekenin
0997a0035d
fix(config): watch/update config given with --config when appropriate (#3678) 2024-10-14 18:01:11 +02:00
Aram Drevekenin
618e0f7a34
fix(plugins): allow switching to a new session with cwd without specifying a layout (#3676) 2024-10-14 16:44:28 +02:00
Aram Drevekenin
d84cdec730
fix(resurrection): plugin alias resurrection (#3673)
* fix(resurrection): make sure plugin aliases are serialized properly

* style(fmt): rustfmt
2024-10-14 13:13:52 +02:00
Aram Drevekenin
2bd0f2a535
fix(plugins): various plugin api and other fixes (#3665)
* fix(plugins): do not allow focusing an unselectable pane

* fix(folders): make sure config and cache folders exist on app start
2024-10-11 18:04:18 +02:00
Aram Drevekenin
63208879da
fix(plugins): handle concurrent http downloads (#3664) 2024-10-11 15:26:05 +02:00
Aram Drevekenin
317fcdd91f
feat(cli): show CACHE_DIR in zellij setup --check (#3652) 2024-10-09 09:47:17 +02:00
Aram Drevekenin
203fbf7a49
feat(cli): make --layout idempotent(-ish) (#3650)
* feat(cli): if inside a session, apply --layout to the session

* fix(screen): some focusing races when switching tab focus

* style(fmt): rustfmt
2024-10-08 16:57:54 +02:00
Aram Drevekenin
ba2772e31c
fix(http): web requests (#3643) 2024-10-04 18:09:06 +02:00
Aram Drevekenin
0511ae1ae2
fix(resurrection): various serialization issues (#3636)
* fix(serialization): use kdl-rs for serialization

* style(fmt): remove dead code

* tests(serialization): update snapshots

* style(fmt): rustfmt
2024-10-02 16:16:22 +02:00
Aram Drevekenin
9f1e38f9fa
feat(ui): built-in plugin manager (#3633)
* add plugin list to session info

* feat(plugins): new_plugin and reload_plugin API commands

* feat(plugins): built-in plugin manager

* style(fmt): rustfmt

* update plugins
2024-09-30 18:04:40 +02:00
Aram Drevekenin
ce8e3995df
feat(config): allow loading background plugins on startup (#3616)
* remove old partial implementation

* feat(plugins): allow loading background plugins on startup

* add e2e test

* update config

* udpate config merging

* style(fmt): rustfmt
2024-09-20 15:38:20 +02:00
Aram Drevekenin
d78f3586dd
feat(plugins): APIs to break multiple panes into a new tab or an existing tab (#3610)
* feat(plugins): break multiple panes to a new tab

* fix(layouts): properly ignore run instructions when breaking panes

* feat(plugins): break multiple panes to existing tab

* feat(apis): allow these methods to also specify whether they want focus changed to the tab

* various fixes

* allow specifying name for the new tab when breaking out panes

* style(fmt): rustfmt
2024-09-16 21:02:04 +02:00
Aram Drevekenin
1776d240da
feat(plugins): add plugin APIs to affect other panes (#3576)
* resize_pane_with_id and close_pane_with_id

* focus_pane_with_id and edit_scrollback_for_pane_with_id

* write_to_pane_id and write_chars_to_pane_id

* lots more commands

* style(fmt): rustfmt
2024-08-29 17:35:21 +02:00
Aram Drevekenin
820ff85231
feat(ux): reload config options at runtime (#3564)
* change simplified_ui at runtime

* change default_shell at runtime

* change pane_frames (from config) at runtime

* all other options

* some refactoring

* style(fmt): rustfmt
2024-08-23 15:41:48 +02:00
Aram Drevekenin
08b6072a69
feat(plugins): API to temporarily bind keys to send a message to a specific plugin id (#3561) 2024-08-21 16:46:01 +02:00
Aram Drevekenin
e96491a3cf
feat(ux): change themes at runtime (#3559) 2024-08-20 16:10:27 +02:00
Aram Drevekenin
cfbc0ff490
feat(ux): reload config at runtime (#3558)
* feat(ux): reload config at runtime

* style(fmt): rustfmt
2024-08-19 19:02:52 +02:00
Aram Drevekenin
056537d3ee
feat(ux): first run setup-wizard (#3556)
* separate saved/runtime structure, kind of working

* serializing config

* work

* work

* save config through the configuration screen

* work

* startup wizard

* style(code): cleanups

* fix(session): reload config from disk when switching sessions

* style(fmt): rustfmt

* fix(config): propagate cli config options to screen

* style(fmt): rustfmt
2024-08-16 14:00:01 +02:00
Aram Drevekenin
a3ad621dc7
feat(plugins): command pane re-run event (#3553) 2024-08-14 16:47:46 +02:00
Aram Drevekenin
d44950a5bd
feat(plugins): rerun_command_pane API (#3546)
* feat(plugins): rerun_command_pane API

* fix tests
2024-08-07 19:20:41 +02:00
Aram Drevekenin
8080050aac
fix(plugins): various cwd fixes (#3545)
* fix(plugins): various cwd fixes

* fix tests
2024-08-07 13:46:08 +02:00
Aram Drevekenin
355463383a
feat(plugins): allow opening command panes in the background (hidden) (#3530)
* start background pane

* open command and edit panes in the background

* some cleanups

* style(fmt): rustfmt

* more cleanups
2024-07-29 11:40:01 +02:00
Aram Drevekenin
ffbdb095ec
feat(plugins): some APIs for controlling and receiving information about other panes (#3515)
* add context to opening command panes, and events for their start/finish

* show/hide other panes plugin apis

* get tests to pass

* style(fmt): rustfmt

* update plugin test snapshots
2024-07-22 18:30:18 +02:00
Aram Drevekenin
579a54ec45
fix(serialization): do not serialize junk sessions (#3504)
* fix(serialization): do not serialize junk sessions

* style(fmt): rustfmt
2024-07-18 14:29:03 +02:00
Aram Drevekenin
2deffc3289
feat(plugins): add stringified layout to switch_session_with_layout (#3503) 2024-07-18 10:45:42 +02:00
Aram Drevekenin
84ff29dd02
feat(ui): configuration screen + configure non-colliding keys at runtime (#3502)
* rebind => reconfigure

* persist keybinds and mode info to new tabs

* add configuration plugin

* make tests pass

* remove warnings

* style(fmt): rustfmt
2024-07-17 16:08:31 +02:00
Aram Drevekenin
dcd3ae2861
fix(terminal): session-manager enter and some more keys (#3484) 2024-07-08 17:36:24 +02:00
Aram Drevekenin
a6d6c0e4ff
feat(ui): status bar redesign (#3475)
* work

* work

* working

* get default mode from server and some ui responsiveness

* work

* finish design and get tests to pass

* get e2e tests to pass

* add classic layout

* add classic layout assets

* fix e2e tests

* style(fmt): rustfmt

* fix plugin system test

* style(fmt): some cleanups
2024-07-05 15:13:51 +02:00
bjorn3
7d7848cddc
dependencies: switch from Wasmer to Wasmtime (#3349)
* Remove ForeignFunctionEnv wrapper around PluginEnv

This will enable PluginEnv to be the Store context when migrating to
Wasmtime.

* Pass PluginEnv by value to load_plugin_instance

This will allow removing the Clone impl from PluginEnv when migrating to
Wasmtime as required by the missing Clone impl on Wasmtime's WasiCtx.

* Avoid passing a Store around when an Engine is enough

* Pass PluginEnv to the wasi read/write functions

Wasmtime requires storing the read/write end of the pipe outside of the
WasiCtx. Passing PluginEnv to these functions allows storing them in the
PluginEnv.

* Migrate to Wasmtime

* Switch from wasi-common to wasmtime-wasi

* Reduce verbosity of wasmtime_wasi logs

* Increase startup delay

To wait for all plugins to be compiled.

* Disable some wasmtime features

* Update to Wasmtime 21.0.1
2024-06-28 16:47:43 +02:00
Aram Drevekenin
1f0ae94f01
feat(plugins): rebind keys at runtime (#3422)
* refactor(server): interpret keys on server so they can be rebound

* feat(plugins): allow rebinding keys at runtime

* various cleanups

* add tests

* style(fmt): rustfmt

* fix(tests): address (some) e2e test flakiness

* style(fmt): rustfmt
2024-06-14 17:11:02 +02:00
Aram Drevekenin
62c37a87cc
feat(keybindings): support multiple modifiers (eg. Ctrl+Alt) and the kitty keyboard protocol (#3383)
* parse kitty keys from STDIN

* work

* work

* replace internal Key representation with the new KeyWithModifier in all the places

* work

* work

* allow disabling with config

* adjust ordering

* handle enabling/disabling properly on the client

* support multiple modifiers without kitty too

* normalize uppercase keys

* get tests to pass

* various cleanups

* style(fmt): rustfmt
2024-05-27 16:15:09 +02:00