* refactor(panes): move to parametric pane sizes * Fixed the simpler errors by casting to usize * The least I can do is pass the formatting check... * Move to stable toolchain * Well, it compiles? * And now it doesn't! ;) * Baseline functionality with the new Dimension type * Working POC for percent-based resizing * REVERT THIS COMMIT – DELETES TESTS * Perfected the discrete resize algorithm * Fixed fixed-size panes * Basic bidirectional resize * feat(resize): finalised parametric resize algorithm * Reduce the logging level a bit * Fixed nested layouts using percents * Bug squishing for implicit sizing * Here is a funky (read: rubbish) rounding approach * And now it's gone again! * Improve discretisation algorithm to fix rounding errors * Fix the last layout bug (maybe?) * Mixed explicit and implied percents work now * Let's pretend that didn't happen... * Make things a bit less crashy * Crash slightly more for now (to find bugs) * Manaually splitting of panes works now * Start moving to percent-based resizes * Everything but fullscreen seems to be working * Fix compilatation errors * Culled a massive amount of border code * Why not pause to please rustfmt? * Turns out I was still missing a few tests... * Bringing back even more tests! * Fix tests and pane boarders * Fix the resize system without gaps * Fix content offset * Fixed a bug with pane closing * Add a hack to fix setting of the viewport * Fix toggling between shared borders and frames * fix(tests): make e2e properly use PaneGeom * style(fmt): make rustfmt happy * Revert unintentional rounding of borders * Purge some old borderless stuff * Fix busted tab-bar shrinking * Update E2E tests * Finish implementing fullscreen! * Don't crash anymore? * Fix (almost) all tests * Fix a lack of tab-stops * All tests passing * I really can't be bothered to debug a CI issue * Tie up loose ends * Knock out some lingering FIXMEs * Continue to clean things up * Change some naming and address FIXMEs * Cull more code + FIXMEs * Refactor of the resize system + polish * Only draw frames when absolutely necessary * Fix the tab-bar crash * Fix rendering of boarders on reattach * Fix resizing at small pane sizes * Deduplicate code in the layout system * Update tab-bar WASM * Fixed the pinching of panes during resize * Unexpose needlessly public type * Add back a lost test * Re-add tab tests and get them to compile * All tabs need layouts * Start fixing tests + bug in main * Stabilize the resize algorithm rounding * All tests from main are now passing * Cull more dead code
63 lines
1.4 KiB
Rust
63 lines
1.4 KiB
Rust
use serde::{de::DeserializeOwned, Serialize};
|
|
use std::{io, path::Path};
|
|
|
|
use crate::data::*;
|
|
|
|
// Subscription Handling
|
|
|
|
pub fn subscribe(event_types: &[EventType]) {
|
|
object_to_stdout(&event_types);
|
|
unsafe { host_subscribe() };
|
|
}
|
|
|
|
pub fn unsubscribe(event_types: &[EventType]) {
|
|
object_to_stdout(&event_types);
|
|
unsafe { host_unsubscribe() };
|
|
}
|
|
|
|
// Plugin Settings
|
|
|
|
pub fn set_selectable(selectable: bool) {
|
|
unsafe { host_set_selectable(if selectable { 1 } else { 0 }) };
|
|
}
|
|
|
|
// Query Functions
|
|
pub fn get_plugin_ids() -> PluginIds {
|
|
unsafe { host_get_plugin_ids() };
|
|
object_from_stdin()
|
|
}
|
|
|
|
// Host Functions
|
|
|
|
pub fn open_file(path: &Path) {
|
|
object_to_stdout(&path);
|
|
unsafe { host_open_file() };
|
|
}
|
|
|
|
pub fn set_timeout(secs: f64) {
|
|
unsafe { host_set_timeout(secs) };
|
|
}
|
|
|
|
// Internal Functions
|
|
|
|
#[doc(hidden)]
|
|
pub fn object_from_stdin<T: DeserializeOwned>() -> T {
|
|
let mut json = String::new();
|
|
io::stdin().read_line(&mut json).unwrap();
|
|
serde_json::from_str(&json).unwrap()
|
|
}
|
|
|
|
#[doc(hidden)]
|
|
pub fn object_to_stdout(object: &impl Serialize) {
|
|
println!("{}", serde_json::to_string(object).unwrap());
|
|
}
|
|
|
|
#[link(wasm_import_module = "zellij")]
|
|
extern "C" {
|
|
fn host_subscribe();
|
|
fn host_unsubscribe();
|
|
fn host_set_selectable(selectable: i32);
|
|
fn host_get_plugin_ids();
|
|
fn host_open_file();
|
|
fn host_set_timeout(secs: f64);
|
|
}
|