Commit Graph

533 Commits

Author SHA1 Message Date
Aram Drevekenin
bcbd940bf9
feat(plugins): plugin pane state events (#2545)
* feat(plugins): report pane state to plugins

* refactor(plugins): rename some stuff

* tests(plugins): adjust for new behavior

* style(fmt): rustfmt
2023-06-15 17:07:40 +02:00
Aram Drevekenin
f19334754c
fix(plugins): allow loading relative urls (#2539)
* fix(plugins): allow loading relative urls

* style(fmt): rustfmt
2023-06-14 13:44:46 +02:00
Aram Drevekenin
3d82a2f5ac
fix(logs): suppress debug logs when not debugging (#2532)
* fix(logs): suppress debug logs when not debugging

* fix(tests): add debug flag to constructor
2023-06-13 14:55:49 +02:00
Aram Drevekenin
0b831cfee5
fix(plugins): only listen to hd if a plugin is subscribed to hd events (#2529)
* fix(plugins): only listen to hd if a plugin is subscribed to hd events

* style(fmt): rustfmt

* fix(tests): give time for fs watcher to do its thing

* fix(tests): increase timeout
2023-06-13 08:59:44 +02:00
Aram Drevekenin
c65017c766
fix(screen): focus tab as well as pane when launching existing plugin (#2530)
* fix(screen): focus tab as well as pane when launching existing plugin

* style(fmt): rustfmt
2023-06-12 22:05:32 +02:00
Aram Drevekenin
bffc2794da
fix(output): do not hide cursor on a render that does not include visual assets (#2528)
* fix(terminal): do not hide cursor if output-buffer only has non-visual assets

* style(fmt): rustfmt
2023-06-12 19:01:29 +02:00
Aram Drevekenin
8485b1c296
feat(plugins): extensive plugin api (#2516)
* feat(plugins): add our entire API

* style(fmt): rustfmt

* fix(detach): make it work again
2023-06-09 22:49:12 +02:00
Aram Drevekenin
c11d75f915
feat(wasm-plugin-system): major overhaul and some goodies (#2510)
* strider resiliency

* worker channel prototype

* finalized ui

* show hide plugin

* fs events to plugins

* tests for events and new screen instructions

* various refactoringz

* report plugin errors instead of crashing zellij

* fix plugin loading with workers

* refactor: move watch filesystem

* some fixes and refactoring

* refactor(panes): combine pane insertion logic

* refactor(screen): launch or focus

* refactor(pty): consolidate default shell fetching

* refactor: various cleanups

* initial refactoring

* more initial refactoring

* refactor(strider): search

* style(fmt): rustfmt

* style(pty): cleanup

* style(clippy): ok clippy

* style(fmt): rustfmt
2023-06-07 12:43:35 +02:00
XiaoZhang
3d7c54aca0
fix: cwd of newtab action (#2455) 2023-06-01 02:54:09 +09:00
Aram Drevekenin
5fe4d60c22
feat(plugins): Plugin workers and strider (#2449)
* mvp of strider fuzzy find

* improve search ui

* various refactoringz

* moar refactoring

* even more refactoring

* tests and more refactoring

* refactor: remove unused stuff

* style(fmt): rustfmt

* debug ci

* debug ci

* correct path for plugin system tests

* fix plugin system ci tests

* remove debugging statements from test

* fix plugin worker persistence

* add test for plugin worker persistence

* style(fmt): rustfmt

* final cleanups

* remove outdated comments
2023-05-16 12:47:18 +02:00
Val Packett
d124a1e469
Do not unwrap() the sticky bit setting! (#2424)
It fails on FreeBSD, making the zellij server quit and the client spin endlessly retrying to connect.
2023-05-05 00:00:43 +02:00
Aram Drevekenin
1289643f89
feat(plugins): update and render plugins asynchronously (#2410)
* working-ish minus a few race conditions

* relax atomicity

* various refactoringz

* remove commented out code

* clarify some stuffs

* refactor(plugins): move PluginMap and friends to a different file

* refactor(plugins): move zellij_exports and friends to a different file

* style(fmt): rustfmt

* fix(e2e): adjust tests for flakiness async loading
2023-04-28 15:26:39 +02:00
Aram Drevekenin
caaee30179
feat(plugins): reload plugin at runtime (#2372)
* fix(plugins): proper error when wasm file does not exist

* reload working

* race condition handling

* refactor(plugins): start plugin

* refactor(plugins): plugin-loader

* refactor(plugins): load/reload plugin

* refactor(plugins): apply cached events

* fix(plugins): gittery loading

* chore(plugins): rename reload-plugin to start-or-reload-plugin

* chore(styling): small cleanups

* style(fmt): rustfmt

* style(fmt): cleanups

* style(fmt): cleanups

* test(e2e): update snapshots

* test(e2e): update snapshots

* chore(repo): comment plugin optimization because it doubles the CI time
2023-04-19 10:09:39 +02:00
Kangaxx-0
4c87b1e6bd
feat: support default cwd (#2290)
* init commit

* add default config to kdl file

* change the field from `default_cwd` to `override_cwd`

* change back to default_cwd

* fix test

* default cwd works without `default_shell`
2023-04-18 16:35:51 +02:00
Theo Salzmann
525928b18a
feat: Add layout configuration to exclude panes from tab sync (#2314) 2023-04-18 16:33:20 +02:00
Aram Drevekenin
03c507bc64 chore(version): bump development version 2023-04-13 11:16:47 +02:00
Thomas Linford
7e207f4c0c
fix: do not hold on to router thread handle until server exit (#2328)
* do not hold on to thread handle until server exit

* fix tests
2023-04-13 10:02:07 +02:00
Thomas Linford
778d57c3c3
fix(server): set sticky bit on socket files (#2141) 2023-04-05 17:36:47 +02:00
Aram Drevekenin
f5a13c7440
fix(plugins): prevent Strider from opening double-panes when editing files (#2346)
* fix(plugins): make sure to include client_id when writing input

* style(fmt): rustfmt

* fix(plugins): do not remove client plugins on detach
2023-04-04 18:39:34 +02:00
Aram Drevekenin
809e3d8d21
fix(layout): pane focus in stack (#2344) 2023-04-03 18:54:37 +02:00
Aram Drevekenin
3a428effed
feat(panes): allow defining an expanded stacked pane (#2343)
* feat(panes): allow defining an expanded stacked pane

* style(fmt): rustfmt
2023-04-03 18:04:06 +02:00
Aram Drevekenin
88da3be23a
fix(layouts): focus tab race (#2340) 2023-03-31 17:50:21 +02:00
Aram Drevekenin
cc3c276586
fix(scrollback-editor): properly invoke editor when command includes spaces (#2339)
* fix(scrollback-editor): properly invoke editor when command includes spaces

* style(fmt): srsly clippy?
2023-03-31 16:23:24 +02:00
Aram Drevekenin
30374d4ede
fix(layouts): nested attribute truncating (#2337) 2023-03-30 18:04:47 +02:00
Marcel Baur
6ea5c3666f
Add option to hide session name in tab-bar (deriving from #2172) (#2301)
* feat(tab-bar): add option to hide prefix (#2172)

* feat(tab-bar): only hide session_name

* fix(snapshots): update snapshots with new config-var naming

---------

Co-authored-by: Marcel Baur <marcel@baur.gg>
2023-03-30 20:33:39 +09:00
Oleks Gnatovskyi
bdb39b19a6
feat(terminal): cli and bindable action to clear all buffers for a specific pane (#2239)
* fix typo

* Add clear screen action

* add proper test

* added bindable action; remove pointless default impl

* add default binding

* use imsnif's variant

* remove commented example config

* remove log line

---------

Co-authored-by: Aram Drevekenin <aram@poor.dev>
2023-03-29 23:04:57 +02:00
Aram Drevekenin
341f9eb8c8
feat(plugins): async plugin loading (#2327)
* work

* refactor(plugins): break down start plugin async function

* work

* loading messages

* nice ui

* floating panes and error handling

* cleanups and conflicting plugin/direction

* find exact pane when relayouting

* fix plugin pane titles

* kill loading tasks on exit

* refactor: move stuff around

* style(fmt): rustfmt

* various fixes and refactors
2023-03-27 19:19:34 +02:00
Aram Drevekenin
44abfc9a16
fix(panes): closing a stacked pane should relayout (#2312) 2023-03-20 17:54:47 +01:00
Aram Drevekenin
5cb1cea10c
fix(panes): adding panes to lone stack (#2298) 2023-03-16 17:31:40 +01:00
Aram Drevekenin
c0dd1ba1ab
fix(screen): focus pane on screen edge when moving pane focus offtab (#2293)
* fix(screen): focus pane on proper edge when switching tabs through pane switch

* style(fmt): rustfmt
2023-03-15 17:00:16 +01:00
Aram Drevekenin
09c1d7909d chore(version): bump development version 2023-03-10 15:39:58 +01:00
Aram Drevekenin
43a52a2bd3 chore(version): bump development version 2023-03-10 14:50:39 +01:00
Aram Drevekenin
263f5cbfd2
fix(ansi): pad line end when erasing characters (#2259) 2023-03-09 16:58:15 +01:00
Aram Drevekenin
ae29eb5b47
fix(screen): hold and applylayout races (#2251)
* fix(screen): log error instead of crashing when unable to find tab id

* style(fmt): rustfmt
2023-03-08 18:43:26 +01:00
Aram Drevekenin
dfae62526b chore(version): bump development version 2023-03-07 10:14:14 +01:00
Aram Drevekenin
112782e1ed
chore(repo): version 0.35.0 (#2230)
* chore(assets): new readme animation

* chore(assets): increase animation resolution

* chore(assets): improve animation

* chore(assets): improve animation

* docs(readme): some cleanups and clarifications

* docs(readme): fix links and wording

* chore(version): bump development version
2023-03-07 09:26:11 +01:00
Aram Drevekenin
57e8ca0fae
fix(layouts): naming and gototabname (#2225)
* fix(layouts): properly apply tab name

* fix(gototabname): do not crash and properly apply default shell

* style(fmt): rustfmt
2023-03-06 12:10:02 +01:00
Aram Drevekenin
91b94552b6
fix(pty): do not crash when unable to set cwd (#2214)
* fix(pty): do not crash when unable to set cwd

* style(fmt): rustfmt
2023-03-01 20:12:41 +01:00
哇呜哇呜呀咦耶
c2fb275319
feat(cli): QueryTabNames cli action to list all tab names (#2145)
* extend display char in tab

* Add action to list all tab names

* print tab names and remove logs

* change msg name, and handle Log in normal client

* fix log

* resolve code conflict

* change var name

* add snapshot test

* fix failed test case

* restore snapshot

* Revert "restore snapshot"

This reverts commit b97a9512ab.

* restore snapshot

* revert snapshot

* fix(layout): various parser and ui fixes (#2191)

* fix(layout): error on nodes outside layout node

* fix(layout): move stacked property to pane

* fix(layout): various stack exceptions

* fix(ui): non-flexible stacked pane titles now take up their full length

* fix(ui): stack titles with no-pane-frames take up their proper length

* style(fmt): rustfmt

* docs(changelog): layout fixes

* fix(messaging): cache hold pane messages by their tab_id if the tab is not ready (#2196)

* fix(messaging): cache hold pane messages by their tab_id if the tab is not ready

* style(fmt): rustfmt

* docs(changelog): open panes fix

* fix(layout): tab focus (#2197)

* fix(layout): tab focus

* style(fmt): rustfmt

* docs(changel0g): tab focus fix

* fix(cli): new-tab now also looks in layout_dir for layouts (#2198)

* fix(cli): the new-tab action now also searches for layouts in the layout dir

* style(fmt): rustfmt

* fix(tests): add missing parameter to cli action

* docs(changelog): new-tab cli layout folder fix

* fix(kdl): new-tab keybind looks in layout_dir for layouts (#2200)

* fix(themes): missing tokyo-night-dark theme

* fix(kdl): new-tab keybind also looks in layout_dir for layouts

* docs(changelog): new-tab keybind layout folder fix

* fix(cli): edit cwd (#2201)

* fix(cli): properly set cwd for edit panes

* fix(layouts): properly set cwd for edit panes

* style(fmt): rustfmt

* docs(changelog0

* fix(layouts): do not relayout twice on auto_layout (#2202)

* fix(layouts): do not relayout twice on auto_layout

* style(fmt): rustfmt

* fix(new-tab): get config parameters from config file (#2203)

* fix(cli): take default shell from config if it exists when opening new tab

* fix(cli): take layout dir from config when opening new tab if it exists

* style(fmt): rustfmt

* docs(changelog): new-tab config parameters

* fix(grid): only use background pending styling when deleting characters (#2204)

* docs(changelog): neovim underline fix

* feat(layouts): exact panes constraint (#2206)

* style(fmt): remove warnings

* fix(swap-layouts): introduce exact panes constraint

* fix(swap-layouts): improve floating pane swap layout ux

* style(fmt): rustfmt

* docs(changelog): exact panes constraint

* fix(pty): report no-cwd for empty path returned from sysinfo (#2213)

* fix(sixel): report pixel size in winsize change ioctl (#2212)

* fix(sixel): report pixel size in winsize change ioctl

* style(fmt): rustfmt

* docs(changelog): various fixes

* style(code): naming

* test(log): adjust query tab names test to look at the log message

* style(fmt): rustfmt

---------

Co-authored-by: Aram Drevekenin <aram@poor.dev>
Co-authored-by: Jae-Heon Ji <32578710+jaeheonji@users.noreply.github.com>
2023-03-01 17:28:17 +01:00
Aram Drevekenin
a8b5bce9d9
fix(sixel): report pixel size in winsize change ioctl (#2212)
* fix(sixel): report pixel size in winsize change ioctl

* style(fmt): rustfmt
2023-03-01 12:25:44 +01:00
Aram Drevekenin
d670c29649
fix(pty): report no-cwd for empty path returned from sysinfo (#2213) 2023-03-01 12:25:13 +01:00
Aram Drevekenin
ea2d9ced62
feat(layouts): exact panes constraint (#2206)
* style(fmt): remove warnings

* fix(swap-layouts): introduce exact panes constraint

* fix(swap-layouts): improve floating pane swap layout ux

* style(fmt): rustfmt
2023-02-28 22:08:01 +01:00
Aram Drevekenin
73224ff272
fix(grid): only use background pending styling when deleting characters (#2204) 2023-02-28 18:21:37 +01:00
Aram Drevekenin
9dc3cb1961
fix(new-tab): get config parameters from config file (#2203)
* fix(cli): take default shell from config if it exists when opening new tab

* fix(cli): take layout dir from config when opening new tab if it exists

* style(fmt): rustfmt
2023-02-28 15:47:08 +01:00
Aram Drevekenin
b3b0ddbab8
fix(layouts): do not relayout twice on auto_layout (#2202)
* fix(layouts): do not relayout twice on auto_layout

* style(fmt): rustfmt
2023-02-27 19:15:45 +01:00
Aram Drevekenin
149cafc6d6
fix(cli): edit cwd (#2201)
* fix(cli): properly set cwd for edit panes

* fix(layouts): properly set cwd for edit panes

* style(fmt): rustfmt
2023-02-27 16:34:31 +01:00
Aram Drevekenin
52de5b7db0
fix(cli): new-tab now also looks in layout_dir for layouts (#2198)
* fix(cli): the new-tab action now also searches for layouts in the layout dir

* style(fmt): rustfmt

* fix(tests): add missing parameter to cli action
2023-02-26 22:11:08 +01:00
Aram Drevekenin
6a2a845086
fix(layout): tab focus (#2197)
* fix(layout): tab focus

* style(fmt): rustfmt
2023-02-26 19:20:49 +01:00
Aram Drevekenin
c41dfa33df
fix(messaging): cache hold pane messages by their tab_id if the tab is not ready (#2196)
* fix(messaging): cache hold pane messages by their tab_id if the tab is not ready

* style(fmt): rustfmt
2023-02-26 15:38:52 +01:00
Aram Drevekenin
5bcc1bb382
fix(layout): various parser and ui fixes (#2191)
* fix(layout): error on nodes outside layout node

* fix(layout): move stacked property to pane

* fix(layout): various stack exceptions

* fix(ui): non-flexible stacked pane titles now take up their full length

* fix(ui): stack titles with no-pane-frames take up their proper length

* style(fmt): rustfmt
2023-02-25 11:16:11 +01:00
Aram Drevekenin
0101440cbb
fix(grid): glitchy resizes (#2182)
* fix(grid): glitchy resizes

* style(fmt): rustfmt
2023-02-20 17:36:31 +01:00
Yves Biener
cf9f806559
fix(ux): fullscreen navigation (#2117)
* fix(pane): fullscreen navigation in all four directions

* fix(pane): use previous method in previous context
2023-02-20 17:31:02 +01:00
哇呜哇呜呀咦耶
72a5d4d619
fix(tabs): allow CJK in tab names (#2119) 2023-02-20 17:23:49 +01:00
bheylin
c8fdea88ec
feat(editor): scrollback positioning with Helix (#2156)
* Add Helix editor (`hx`) to editors that support prefix positions

This is dependant on Helix accepting the PR:

https://github.com/helix-editor/helix/pull/5945

* Add `helix` variant to accepted editors

* Add branch for Helix file opening

* style(code): add clarification comment

* style(fmt): whitespace

---------

Co-authored-by: Aram Drevekenin <aram@poor.dev>
2023-02-18 13:57:40 +01:00
Aram Drevekenin
3a0e56afd8
fix(ux): cache stdin queries on startup (remove startup delay) (#2173)
* fix(ux): cache stdin queries on startup

* style(fmt): rustfmt
2023-02-17 19:32:07 +01:00
Aram Drevekenin
f1ff272b0b
feat(ui): swap layouts and stacked panes (#2167)
* relayout working with hard coded layout

* work

* refactor(layout): PaneLayout => TiledPaneLayout

* tests passing

* tests passing

* tests passing

* stacked panes and passing tests

* tests for stacked panes

* refactor(panes): stacked panes

* fix: focusing into stacked panes from the left/right

* fix(layouts): handle stacked layouts in the middle of the screen

* fix(pane-stack): focus correctly when coming to stack from above/below

* fix(stacked-panes): resize stack

* fix(stacked-panes): focus with mouse

* fix(stacked-panes): focus next pane

* fix(layout-applier): sane focus order

* fix(stacked-panes): better titles for one-liners

* fix(stacked-panes): handle moving pane location in stack

* fix(relayout): properly calculate display area

* fix(relayout): properly calculate rounding errors

* fix(stacked-panes): properly handle closing a pane near a stack

* fix(swap-layouts): adjust swap layout sort order

* feat(swap-layouts): ui + ux

* fix(swap-layouts): include base layout

* refactor(layout): remove unused method

* fix(swap-layouts): respect pane contents and focus

* work

* fix(swap-layouts): load swap layouts from external file

* fix(swap-layouts): properly truncate layout children

* fix(stacked-panes): allow stacked panes to become fullscreen

* fix(swap-layouts): work with multiple tabs

* fix(swap-layouts): embed/eject panes properly with auto-layout

* fix(stacked-panes): close last pane in stack

* fix(stacked-panes): move focus for all clients in stack

* fix(floating-panes): set layout damaged when moving panes

* fix(relayout): move out of unfitting layout when resizing whole tab

* fix(ui): background color for swap layout indicator

* fix(keybinds): add switch next layout in tmux

* fix(ui): swap layout indication in compact layout

* fix(compact): correct swap constraint

* fix(tests): tmux swap config shortcut

* fix(resizes): cache resizes so as not to confuse panes (eg. vim) with multiple resizes that it debounces weirdly

* feat(cli): dump swap layouts

* fix(ui): stacked panes without pane frames

* fix(ux): move pane forward/backwards also with floating panes

* refactor(lint): remove unused stuff

* refactor(tab): move swap layouts to separate file

* style(fmt): rustfmt

* style(fmt): rustfmt

* refactor(panes): various cleanups

* chore(deps): upgrade termwiz to get alt left-bracket

* fix(assets): merge conflicts of binary files

* style(fmt): rustfmt

* style(clippy): no thank you!

* chore(repo): remove garbage file
2023-02-17 12:05:50 +01:00
m-lima
d1b458e37b
chore(build): make the singlepass compiler opt-in through flags (#2146) 2023-02-13 17:52:10 +01:00
har7an
5eb2d055ff
cleanups around "buffer full" error (#2136)
* server/os_i_o: Add fixme to IPC queue

between server and client, explaining why the queue has its current
length.

* utils/ipc: Don't advertise terminal emulators

and use a more generic phrasing instead. zellij as application isn't the
place to recommend specific terminals to use it with.

* style(comment): redraw-on-backpressure comment

---------

Co-authored-by: Aram Drevekenin <aram@poor.dev>
2023-02-09 19:40:23 +00:00
m-lima
5b3e1ecacd
chore(development): use singlepass in debug mode (#2134)
* Add new feature flags

* Use singlepass in debug mode

* Use Cow to avoid unnecessary copies

- Instead of removing and reinserting into the memory cache, use Cow to
  model both owned an borrowed data
- Log at debug-level the time to compile/load a wasm module
- A little clippy drive-by on touched files

* Satisfy the assumption from zellij-utils/src/consts.rs for target-dir

* Allow forcing cranlift in debug mode

* Remove deprecated comments

* PR comment: typo

* Remove extras
2023-02-07 17:55:37 +01:00
哇呜哇呜呀咦耶
99e8d56adb
feat(cli): add GoToTabName action to switch tab by name (#2120)
* Add `GoToTabName` action to switch tab by name

* rm blank file

* add --create option

* format

* add some doc

* add test case

* format

* add test case

* change variable name
2023-02-07 15:45:59 +01:00
Yves Biener
650aeb12be
feat: add ScrollToTop action (#2110) 2023-01-24 21:51:11 +09:00
har7an
beddfb77a8
Improve client disconnect handling (#2068)
* xtask/run: Use varargs when run with `-data-dir`

Previously any additional arguments passed on the command line were
ignored. Now they are appended to `cargo run ...` as documented.

* server/os_i_o: Improve error message when IPC dies

and display the last send/recv error to the user instead of a generic
"Buffer full" message.

* server/lib: Log error in `send_to_client!`

so we will know when an error occured while trying to send a message to
the client. The most likely cause for this is that the client buffer
filled up and hence we cannot send any new messages. While we still
disconnect the client as before, now we also write a log message that
explains the situation.

* utils/channel: Apply rustfmt

* server/lib: Detect when client responds too slow

and log a message before disconnecting it.

* server/os_i_o: Add retry queue to client senders

that is dynamically allocated on-demand and stores `ServerToClientMsg`
in case the regular IPC channel is currently full. This acts as a
dynamic buffer to hold and buffer messages for a while until the client
hopefully catches up.

Also write a message to the log to indicate when the client is
recognized to be too slow in handling server messages.

* server: apply rustfmt

* utils/ipc: Add session name to "Disconnect" error

* utils/ipc: Fix error message indent

* server/os_i_o: Undo IPC channel extension

via `Vec` and drastically increase the IPC message queue size instead.
Measurements didn't discover a drastic increase in RAM caused by this,
and it is a much easier fix for the problem at hand.

* CHANGELOG: Add PR #2068
2023-01-22 18:04:40 +00:00
har7an
b274fc5ab1
errors: handle missing plugin caches (#2093)
* server/plugins: Always recreate plugin folders

in case they aren't existent and don't mark errors to do so as
non-fatal. The latter masks the underlying cause when e.g. the `.cache`
folder is, for some reason, not writable by zellij (See #2092), whereas
the former fixes problems arising from the user having purged their
.cache/zellij folder entirely.

* utils/errors: Rewrite panic message

* changelog: Add PR #2093
2023-01-19 18:17:33 +00:00
哇呜哇呜呀咦耶
f9a7188728
Support UTF-8 character in tab name and pane name (#2102)
* Support UTF-8 character in tab name and pane name

* Support UTF-8 character in tab name and pane name
2023-01-19 22:28:04 +09:00
har7an
04b294aabb
Errors: less unwrap in server (#2069)
* server/pty: Remove last `unwrap`

* server/route: Remove calls to `unwrap`

* server/screen: Remove calls to `unwrap`

* WIP: server/plugins: Remove calls to unwrap

* server/route: Apply rustfmt

* server/plugins: Remove last `unwrap`s

* server/screen: update tabs before rendering

which was previously accidentally changed.

* server/tab: Remove calls to `unwrap`

* server/plugins: Add context to plugin panic reporter

* changelog: Add PR #2069
2023-01-14 05:14:17 +00:00
朱李
f07c1afea7
fix: wide-char drop on resize to 1 and invalid session names (#2082)
* fix: deny invalid session name

* fix: `zellij attach --create SESSION_NAME` check session name

* fix: drain_until(1) discard widechar

* style(grid): add comment explaining the change

Co-authored-by: Aram Drevekenin <aram@poor.dev>
2023-01-13 18:23:21 +01:00
Thomas Linford
5227909846
fix(mouse): selection not ending on mouse release with copy_on_select set to false (#2086) 2023-01-12 18:38:12 +01:00
Aram Drevekenin
799fa5de8d
Floating panes in layouts (#2047)
* work

* tests passing

* tests: floating panes in layouts

* panes(plugins): floating plugins working

* refactor(tab): layout applier

* style(comment): remove outdated

* style(fmt): rustfmt
2022-12-24 15:48:04 +01:00
Aram Drevekenin
1b5f3c52a4
fix(panes): show visual error when failing to resize panes (#2036)
* fix(panes): show visual error when failing to resize pane vertically/horizontally

* fix(resize): retry pane resize on rounding errors

* fix(resize): proper error when resizing other panes into fixed panes

* style(fmt): rustfmt
2022-12-19 12:48:43 +01:00
har7an
d1f50150f6
WIP: Use xtask as build system (#2012)
* xtask: Implement a new build system

xtask is a cargo alias that is used to extend the cargo build system
with custom commands. For an introduction to xtask, see here:
https://github.com/matklad/cargo-xtask/

The idea is that instead of writing makefiles, xtask requires no
additional dependencies except `cargo` and `rustc`, which must be
available to build the project anyway.

This commit provides a basic implementation of the `build` and `test`
subcommands.

* xtask/deps: Add 'which'

* xtask/test: Handle error when cargo not found

* xtask/flags: Add more commands

to perform different useful tasks. Includes:

- clippy
- format
- "make" (composite)
- "install" (composite)

Also add more options to `build` to selectively compile plugins or leave
them out entirely.

* xtask/main: Return error when cargo not found

* xtask/build: Add more subtasks

- `wasm_opt_plugins` and
- `manpage`

that perform other build commands. Add thorough documentation on what
each of these does and also handle the new `build` cli flags
appropriately.

* xtask/clippy: Add job to run clippy

* xtask/format: Add job to run rustfmt

* xtask/pipeline: Add composite commands

that perform multiple atomic xtask commands sequentially in a pipeline
sort of fashion.

* xtask/deps: Pin dependencies

* xtask/main: Integrate new jobs

and add documentation.

* xtask: Implement 'dist'

which performs an 'install' and copies the resulting zellij binary along
with some other assets to a `target/dist` folder.

* cargo: Update xflags version

* xtask: Measure task time, update tty title

* xtask: Update various tasks

* xtask: wasm-opt plugins in release builds

automatically.

* xtask/build: Copy debug plugins to assets folder

* xtask: Add 'run' subcommand

* xtask: Add arbitrary args to test and run

* xtask: Rearrange CLI commands in help

* xtask: Add deprecation notice

* docs: Replace `cargo make` with `xtask`

* github: Use `xtask` in workflows.

* xtask: Add support for CI commands

* xtask: Streamline error handling

* github: Use new xtask commands in CI

* xtask: Add 'publish' job

* xtask/publish: Add retry when publish fails

* xtask: Apply rustfmt

* xtask: Refine 'make' deprecation warning

* xtask: add task to build manpage

* contributing: Fix e2e commands

* xtask/run: Add missing `--`

to pass all arguments following `xtask run` directly to the zellij
binary being run.

* xtask: Stay in invocation dir

and make all tasks that need it change to the project root dir
themselves.

* xtask/run: Add `--data-dir` flag

which will allow very quick iterations when not changing the plugins
between builds.

* xtask/ci: Install dependencies without asking

* utils: Allow including plugins from target folder

* utils/assets: Reduce asset map complexity

* utils/consts: Update asset map docs

* xtask: Fix plugin includes

* xtask/test: Build plugins first

because the zellij binary needs to include the plugins.

* xtask/test: Fix formatting

* xtask: Add notice on how to disable it
2022-12-17 13:27:18 +00:00
Aram Drevekenin
c3115a428e
fix(panes): show visual error when unable to split panes vertically/horizontally (#2025)
* fix(panes): show visual error when failing to split pane vertically/horizontally

* fix: lockfile
2022-12-14 22:26:48 +01:00
Andreas Hartmann
177cd20bea chore: Bump development version 2022-12-13 17:24:19 +01:00
Andreas Hartmann
962f37e767 chore: Bump development versions 2022-12-13 14:59:49 +01:00
Nuno David
8eb6446b3f
Fix: Remove shell.exists() check from get_default_terminal (#2013)
* Fix: Make sure to get full path from SHELL env

* Feat: Revert to previous get_default_terminal and just remove shell exists check
2022-12-13 12:06:20 +00:00
har7an
685e39bd9b
Hotfix: Resize with plugin panes (#2019)
* server/panes/tiled/grid: Fix area calculation

for debug assertions. Now also considers fixed-size panes correctly.

* server/panes/tiled/grid: Refactor function

to make it more readable and remove some implicitly handled "special"
cases.

* server/panes/tiled/grid: Handle plugins panes

like any other pane type and only check whether they are fixed-size
panes, too.

* changelog: Add PR #2019
2022-12-13 09:49:41 +00:00
Aram Drevekenin
0598a84e1f chore(version): patch version due to CI difficulties 2022-12-09 12:09:07 +01:00
Aram Drevekenin
fba273eebb chore(version): patch version due to CI difficulties 2022-12-09 12:01:20 +01:00
Aram Drevekenin
adab6b8363 chore(version): patch version due to CI difficulties 2022-12-09 11:44:36 +01:00
har7an
62eaea1583
Reimplement resize code (#1990)
* server/floating_panes: Start removing `unwrap`s

* server/panes: Remove more `unwrap`s

in floating panes code.

* utils/data: Unify `Direction` type

which was previously present in multiple locations.
Also start working on a new Resize Method (type `ResizeStrategy`), to
remove code duplication in the resize code.

* server: Implement new resize handling

with the `ResizeStrategy` type. Add a new action with the ability to
invoke it from the CLI. Take care to maintain backwards-compatibility in
terms of configuring the new resize mode.

* utils/layout: Add conversion for SplitDirection

from `data::Direction`.

* utils/data: Add impl for `Direction`

* server/panes: Rework tiled pane resizing

but it's currently still broken in a few regards and misses ability to
perform "regular" increase/decrease.

* server/panes/tiled_panes: Add debug assertion

to catch if the total area of all panes (in percent) is different from
100.0 at some point.

* server/panes/tiled/grid: Fix resize bug

caused by the fact that neighboring plugin panes previously weren't
filtered from resize operations, even though they cannot be resized at
all.

* utils/data: Add `invert` for `Resize`

* utils/data: Add member to `ResizeStrategy`

that controls whether we invert resize behavior when increasing size
towards a bounadry. This maintains current behavior.

* server/screen: Handle new attribute

in `ResizeStrategy`

* server/panes/resizer: Return `anyhow::Error`

* server/panes/tiled: Implement resize increase/decrease

without specifying a direction (towards all possible directions).
Currently broken in some cases.

* server/pane/tiled/grid: Don't return early

to preserve resize debug assertions.

* server/pane/tiled/grid: Fix resize bug

caused by checking for the wrong alignments in some cases. Also refactor
the code for looking up aligned panes.

* server/panes/tiled/grid: Cleanup code

and remove log statements and unused functions.

* server/panes/float/grid: Invert resize

if the floating pane is hitting a boundary already.

* plugins/status-bar: Add hints for new resize

* server: Use new resize method

* server: Fix tests

with new functions and result types.

* apply rustfmt

* utils: Apply rustfmt

* server/panes/floating: Fix resize increase

behavior which would previously, upon hitting a boundary, cause the pane
to invert the resize operation, which is wrong. Instead, it now does not
resize floating panes on an undirected resize "increase" in directions
where it hits boundaries.

* server/panes/tiled: Use correct resize increments

The values for the resize increments were previously wrong, causing many
of the tests to fail.

* server/panes/tiled: Fix resize checks

to correctly consider fixed-size panes.

* utils/assets/config: Update default config

with new keybindings for resize mode.

* server/panes/tiled: Fix resize check

* server/panes/tiled: Use shortener for `Direction`

type in `change_pane_size` function.

* server/panes/tiled: Restore resize behavior

for undirected resizes, to the way it was before this PR.

* server/panes/floating: Fix resize increment

for undirected resizes

* utils/data: Fix doctest

* utils: Fix test snapshots

for tests working with the default config

* changelog: Add PR #1990
2022-12-08 12:50:28 +00:00
Aram Drevekenin
b1ab4eac10
refactor(messaging): reduce extraneous cross-thread messaging (#1996)
* refactor(messaging): reduce extraneous cross-thread messaging

* style(fmt): rustfmt
2022-12-06 22:29:57 +01:00
Aram Drevekenin
b7adfcc581
refactor(plugins): fix plugin loading data flow (#1995) 2022-12-06 15:34:43 +01:00
Aram Drevekenin
f8fbd8a138
fix(panes): focus change when closing and between tabs (#1966)
* fix(panes): do not forget pane focus when switching tabs or closing panes

* style(fmt): rustfmt

* fix(tests): e2e snapshots
2022-11-23 18:14:24 +01:00
Aram Drevekenin
b0218f4d50
fix(router): handle client empty message (#1965)
* fix(router): handle client empty message

* style(fmt): rustfmt
2022-11-23 10:10:42 +01:00
har7an
11b0210de5
plugins: rework plugin loading (#1924)
* zellij: Move "populate_data_dir" to utils

and rewrite it to take a second, optional parameter. This allows
controlling whether only a specific asset should be installed. We do
this as preparation for being able to recover from a plugin version
mismatch error, where we will need to repopulate the data dir for
offending plugins.

* server/wasm_vm: Recover from PluginVersionMismatch

Adds a global plugin cache that stores, per plugin config, the wasmer
module associated with it. Make `start_plugin` take the pre-populated
module and create only the necessary modifications to the wasm env etc.

* utils: Fix formatting

* zellij: Delete non-existent module

* utils/shared: fix missing "set_permissions"

function when not on unix systems.

* server/wasm_vm: Don't populate cachedir

with serialized versions of the WASM plugins.

* utils/input/plugins: load wasm bytes from assets

for builtin plugin specifications. This foregoes any need to:

- Dump the plugin bytes to disk at all and
- subsequently read the plugin bytes from disk

* zellij: Disable default asset installation

which previously installed only the builtin plugins to disk. This is no
longer necessary because now we can load the builtin plugins directly
from the application binary.

* utils/input/plugins: Update docs

* utils/input/plugins: Add 'is_builtin' method

to `PluginConfig` that returns true if the plugin configuration refers
to a builtin plugin.

* wasm_vm: Remove plugin version mismatch handling

because a version mismatch in an internal plugin is now unfixable, with
the plugins being loaded from the running binary, and we have no control
over external plugins in the first place.

* cargo: Reintroduce feature flag

for `disable_automatic_asset_installation`

* utils/consts: Add `ASSET_MAP`

which currently contains the compiled WASM plugins.

* utils/shared: Fix clippy lint

* utils/errors: Add more `ZellijError` variants

* zellij: Make loading internal plugins optional

by reenabling the `disable_automatic_asset_installation` flag and
utilizing it for this purpose. Changes plugin search behavior to throw
better errors in case the builtin plugins cannot be found, depending on
the state of this feature.

* utils/errors: Apply rustfmt

* utils/setup: Allow dumping builtin plugins

to a specified folder on disk. This is meant to be an "escape hatch" for
users that have accidentally deleted the builtin plugins from disk (in
cases where the plugins aren't loaded from inside the zellij binary).

* utils/input/plugins: Update docs

* utils/setup: Add hint to `setup --check` output

when zellij was built without the `disable_automatic_asset_installation`
flag and will thus not read builtin plugins from the "PLUGIN DIR".

* utils/setup: Refine `setup --dump-plugins`

to dump to:

- The default "DATA DIR" when no option is provided with the argument,
  or
- The provided option, if existent

Also print a message to stdout with the destination folder that the
plugins are dumped to.

* server/wasm_vm: Ignore "NotFound" errors

when attempting to delete the non-existent plugin data directories. This
silences an error message that otherwise ends up in the logs when
quitting zellij.

* utils/errors: Extend "BuiltinPluginMissing" msg

to hint the user to the `zellij setup --dump-plugins` command to fix
their issues for them!

* utils/errors: Track caller in calls to `non_fatal`

which will hopefully, once closures can be annotated, allow us to
display the location of the call to `non_fatal` in log messages.

* utils/input/plugins: Fix plugin lookup

to prefer internal assets if available. It was previously broken because
sorting the paths vector before deduping it would bring the paths into a
wrong order, looking up in the plugin folder first.

Also print a log message when a plugin is being loaded from the internal
assets but exists on disk, too.

* Apply rustfmt

* make: build-e2e depends on wasm-opt-plugins

so it updates the assets when building the binary

* server/qwasm_vm: Remove var

* utils/consts: Add plugins from target folder

and include them in the asset map from there, too. Include plugins from
debug or release builds, depending on the build type.

* utils/consts: Take release plugins from assets

instead of the target/release folder. The latter will break
installations from crates.io, because we currently rely on including the
plugins we pre-compiled and distribute along with the binary.

* server/wasm_vm: Reintroduce .cache folder

to speedup subsequent application launches.

* cargo: Reorder workspace members

to improve behavior with `cargo make` with respect to compilation order.

* Makefile: restructure plugin tasks

* Makefile: Fix CI errors

* Makefile: More CI diagnosis

* github: Install wasm-opt in e2e test workflow

* Makefile: Build plugins for e2e-test target

* server/Wasm_vm: Reorder plugin folder creation

so no folders are created in the plugin cache when loading a plugin
fails due to not being present or similar.

* update plugins testcommit

* makefile: Change job order

* changelog: Add PR #1924
2022-11-22 20:06:02 +00:00
Aram Drevekenin
63e7531c48
performance(rendering): improve rendering performance (#1960)
* refactor(plugins): plugins now need to explicitly ask to be rendered

* performance(render): remove various needless renders

* performance(render): cache boundaries

* performance(render): adjust tests and cache cursor location/shape

* style(comment): remove outdated

* style(fmt): rustfmt
2022-11-21 20:07:24 +01:00
Aram Drevekenin
2afb355e48
fix(router): handle client buffer overflow (#1955)
* fix(router): handle client buffer overflow

* style(fmt): rustfmt
2022-11-18 10:21:59 +01:00
Aram Drevekenin
81b08d6057
fix(panes): ensure ejected pane always has a frame (#1950) 2022-11-16 17:59:52 +01:00
Aram Drevekenin
cc3ac25c74
fix(cli): measure cwd from cli client rather than the zellij server (#1947)
* fix(cli): measure cwd from cli client rather than the zellij server

* style(fmt): rustfmt
2022-11-16 16:25:01 +01:00
Shunsuke Mie
4aae81faf8
fix(pty): use /bin/sh when SHELL env variable is not found (#1769)
This commit fixes #1722.

In some environment, the SHELL environemnt variable is not exists. It
causes a panic that is reported as #1722. Use generic shell (/bin/sh) to
prevent the panic.

This is a same behavior as tmux.
https://github.com/tmux/tmux/blob/master/spawn.c#L329-L331
2022-11-15 15:22:38 +00:00
Aram Drevekenin
3d2a6d6a5a
refactor(plugins): change the data flow (#1934)
* refactor(plugins): do not block render loop

* refactor(plugins): cleanup

* style(fmt): rustfmt

* fix(plugins): various rendering pipeline fixes
2022-11-15 12:21:36 +01:00
har7an
342d1629d0
Errors: Ignore errors from async when quitting (#1918)
* utils/errors: Fix function order in `to_anyhow`

impl for `SendError`. Previously we attached the context to `anyhow!`,
which is wrong (because it doesn't create an `Err` type itself) and
leads to strange behavior where the error seemingly is immediately
panicked upon.

Instead, Wrap `anyhow!` into an `Err()` and then attach the context to
that. This achieves the intended goal and doesn't lead to premature
termination.

* server/terminal_bytes: Ignore error in `listen`

which occurs when quitting zellij with the `Ctrl+q` keybinding. At the
end of the `listen` function we break out of a loop and send a final
`Render` instruction to the Screen. However, when quitting zellij as
mentioned above, the Screen thread is likely dead already and hence we
cannot send it any Instructions. This causes an error in the async tasks
of the panes that handle reading the PTY input.

If we leave the error unhandled, we will have error messages in the log
whenever we quit zellij, even though the application exited normally.
Hence, we now send the final `Render` instruction but do not care
whether it is sent successfully or not.

This is a "workaround" for the fact that we cannot tell whether the
application is quitting or not.

* server/terminal_bytes: Add FIXME note

* changelog: Add PR #1918

don't log errors from async pane threads when quitting zellij
2022-11-12 10:18:15 +00:00
Aram Drevekenin
a71b2ae890 chore(version): bump development version 2022-11-10 11:48:09 +01:00
har7an
48bc2281c7
Fix: better error reporting when failing to load plugins (#1912) (#1914)
* utils/input/plugins: Return `Result` when loading

a plugin and failing to find it. Since we look up the plugin in multiple
locations, make sure we preserve each of these lookup failures and
report them to the user. This way the user can see what locations were
actually checked.

In addition, before performing the lookup, deduplicate the array of
locations to check. This prevents errors where we look up the same
plugin multiple times in the exact same locations, which can leave a bad
impression on anyone reading it who isn't familiar with the code.

* server/wasm_vm: Remove obsolete context

which was previouly required because the function it is attached to
returned only an `Option` instead of a `Result`.
2022-11-09 07:28:02 +00:00
har7an
453142775c
errors: Remove log::error in server (#1881)
* server/wasm_vm: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

* server/tab: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

* server/route: Replace `log::error!`

and propagate the error to the caller instead.

* server/pty: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

Also add per-instruction error context to make it clear what we tried to
accomplish when an error occured.

* server/panes/tiled_panes: Merge dependencies

and sort them into a better order.

* server/panes/tiled_panes: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

* server/os_input_output: Merge depndencies

and sort them into a better order.

* server/logging_pipe: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

* server/os_io: Remove uses of `log::error`

* changelog: Add PR #1881

* server/os_io: Gracefully handle failing resize

for terminals IDs that don't exist, instead of propagating the error to
the user.

* server/lib: Remove leftover log message

* server/pty: Log error cause

rather than providing a hard-coded error reason which is plain wrong in
this context.

* server/screen: Remove calls to `log::error!`

and change `get_active_tab(_mut)?` to return a `Result` instead of an
`Option`. This already makes many places in the code obsolete where
previously "failed to get active tab..." was logged manually.

Rather than logging, use the `anyhow::Error`s we have, along with all
their context information, and log these instead.
2022-11-08 10:56:23 +00:00
Aram Drevekenin
6c3c0f51d0
fix(panes): moving and toggling embed/float with frames (#1909)
* fix(ui): frame broken or missing when embedding/floating without pane frames

* fix(panes): offset properly without pane frames
2022-11-05 14:45:45 +01:00
Aram Drevekenin
8d1a497d10
feat(terminals): send focus in/out events to terminal panes (#1908)
* feat(terminals): send focus in/out events to terminal panes

* style(fmt): rustfmt

* style(fmt): rustfmt
2022-11-04 17:29:41 +01:00
Aram Drevekenin
9ebc9b74ee
fix(edit): treat cwd properly (#1904) 2022-11-03 11:06:37 +01:00
Pedro Fedricci
ece1cbe533
fix(terminal): Reset dim SGR independently from bold (#1803) 2022-11-02 19:24:40 +01:00
Aram Drevekenin
eebbf246b6
fix(ui): clear floating panes indication when closing a command pane (#1897) 2022-11-02 18:11:54 +01:00
哇呜哇呜呀咦耶
f334415d57
fix(search): allow terminating char to clear search term (#1853)
* allow terminating char to clear search term

* format code
2022-11-02 14:35:23 +01:00