fix(plugin): clean up the mouse PR a little

This commit is contained in:
Brooks J Rady 2021-10-12 23:11:23 +01:00
parent 0710594588
commit b94b25c5fe
6 changed files with 17 additions and 15 deletions

View file

@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
* Refactor: handle clients in tabs/screen (https://github.com/zellij-org/zellij/pull/770)
* Feature: kill-session and kill-all-sessions cli commands (https://github.com/zellij-org/zellij/pull/745)
* Fix: Keep default file permissions for new files (https://github.com/zellij-org/zellij/pull/777)
* Feature: Add mouse events to plugins including strider and the tab-bar (https://github.com/zellij-org/zellij/pull/629)
## [0.18.1] - 2021-09-30

View file

@ -10,7 +10,7 @@ register_plugin!(State);
impl ZellijPlugin for State {
fn load(&mut self) {
refresh_directory(self);
subscribe(&[EventType::KeyPress, EventType::Mouse]);
subscribe(&[EventType::Key, EventType::Mouse]);
}
fn update(&mut self, event: Event) {
@ -21,7 +21,7 @@ impl ZellijPlugin for State {
};
self.ev_history.push_back((event.clone(), Instant::now()));
match event {
Event::KeyPress(key) => match key {
Event::Key(key) => match key {
Key::Up | Key::Char('k') => {
*self.selected_mut() = self.selected().saturating_sub(1);
}
@ -58,12 +58,12 @@ impl ZellijPlugin for State {
Mouse::ScrollUp(_) => {
*self.selected_mut() = self.selected().saturating_sub(1);
}
Mouse::MouseRelease(Some((line, _))) => {
Mouse::Release(Some((line, _))) => {
if line < 0 {
return;
}
let mut should_select = true;
if let Some((Event::Mouse(Mouse::MouseRelease(Some((prev_line, _)))), t)) =
if let Some((Event::Mouse(Mouse::Release(Some((prev_line, _)))), t)) =
prev_event
{
if prev_line == line
@ -88,7 +88,6 @@ impl ZellijPlugin for State {
fn render(&mut self, rows: usize, cols: usize) {
for i in 0..rows {
// If the key was pressed, set selected so that we can see the cursor
if self.selected() < self.scroll() {
*self.scroll_mut() = self.selected();
}

View file

@ -98,7 +98,6 @@ impl ZellijPlugin for State {
);
let mut s = String::new();
let mut len_cnt = 0;
dbg!(&tab_line);
for (idx, bar_part) in tab_line.iter().enumerate() {
s = format!("{}{}", s, &bar_part.part);

View file

@ -286,7 +286,7 @@ impl Pane for PluginPane {
self.send_plugin_instructions
.send(PluginInstruction::Update(
Some(self.pid),
Event::Mouse(Mouse::MouseHold(position.line.0, position.column.0)),
Event::Mouse(Mouse::Hold(position.line.0, position.column.0)),
))
.unwrap();
}
@ -294,7 +294,7 @@ impl Pane for PluginPane {
self.send_plugin_instructions
.send(PluginInstruction::Update(
Some(self.pid),
Event::Mouse(Mouse::MouseRelease(
Event::Mouse(Mouse::Release(
end.map(|Position { line, column }| (line.0, column.0)),
)),
))

View file

@ -648,7 +648,7 @@ impl Tab {
PaneId::Plugin(pid) => {
for key in parse_keys(&input_bytes) {
self.senders
.send_to_plugin(PluginInstruction::Update(Some(pid), Event::KeyPress(key)))
.send_to_plugin(PluginInstruction::Update(Some(pid), Event::Key(key)))
.unwrap()
}
}

View file

@ -27,12 +27,15 @@ pub enum Key {
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
// FIXME: This should be extended to handle different button clicks (not just
// left click) and the `ScrollUp` and `ScrollDown` events could probably be
// merged into a single `Scroll(isize)` event.
pub enum Mouse {
ScrollUp(usize), // number of lines
ScrollDown(usize), // number of lines
LeftClick(isize, usize), // line and column
MouseHold(isize, usize), // line and column
MouseRelease(Option<(isize, usize)>), // line and column
ScrollUp(usize), // number of lines
ScrollDown(usize), // number of lines
LeftClick(isize, usize), // line and column
Hold(isize, usize), // line and column
Release(Option<(isize, usize)>), // line and column
}
#[derive(Debug, Clone, PartialEq, EnumDiscriminants, ToString, Serialize, Deserialize)]
@ -42,7 +45,7 @@ pub enum Mouse {
pub enum Event {
ModeUpdate(ModeInfo),
TabUpdate(Vec<TabInfo>),
KeyPress(Key),
Key(Key),
Mouse(Mouse),
Timer(f64),
CopyToClipboard,