summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-03-05 00:14:03 -0500
committerJesse Luehrs <doy@tozt.net>2022-03-05 00:14:03 -0500
commit78324ef0026895a96dc05f43c66aeb6bd371e2f8 (patch)
tree2ea939d3944ccd7d9172467a06ddf44aefc04bdb /src
parent54bca140d2769d1e3174d40523807ad5a728518c (diff)
downloadnbsh-78324ef0026895a96dc05f43c66aeb6bd371e2f8.tar.gz
nbsh-78324ef0026895a96dc05f43c66aeb6bd371e2f8.zip
various cleanups
Diffstat (limited to 'src')
-rw-r--r--src/shell/history/entry.rs4
-rw-r--r--src/shell/history/mod.rs2
-rw-r--r--src/shell/mod.rs30
3 files changed, 12 insertions, 24 deletions
diff --git a/src/shell/history/entry.rs b/src/shell/history/entry.rs
index 80e7dbe..6cad678 100644
--- a/src/shell/history/entry.rs
+++ b/src/shell/history/entry.rs
@@ -37,14 +37,14 @@ impl Entry {
pub fn render(
&self,
out: &mut impl textmode::Textmode,
- idx: usize,
entry_count: usize,
vt: &mut super::pty::Vt,
- size: (u16, u16),
focused: bool,
scrolling: bool,
offset: time::UtcOffset,
) {
+ let idx = self.env.idx();
+ let size = vt.screen().size();
let time = self.state.exit_info().map_or_else(
|| {
format!(
diff --git a/src/shell/history/mod.rs b/src/shell/history/mod.rs
index 8ec9f75..ad6ca44 100644
--- a/src/shell/history/mod.rs
+++ b/src/shell/history/mod.rs
@@ -38,10 +38,8 @@ impl History {
);
self.entries[idx].render(
out,
- idx,
self.entry_count(),
&mut *vt,
- self.size,
focused,
scrolling,
offset,
diff --git a/src/shell/mod.rs b/src/shell/mod.rs
index 1027a20..9befd99 100644
--- a/src/shell/mod.rs
+++ b/src/shell/mod.rs
@@ -214,12 +214,11 @@ impl Shell {
return Some(Action::Resize(new_size.0, new_size.1));
}
Event::PtyOutput => {
- let idx = self.focus_idx();
// the number of visible lines may have changed, so make sure
// the focus is still visible
self.history.make_focus_visible(
self.readline.lines(),
- idx,
+ self.focus_idx(),
matches!(self.focus, Focus::Scrolling(_)),
);
self.scene = self.default_scene(self.focus);
@@ -289,8 +288,7 @@ impl Shell {
}
}
textmode::Key::Char(' ') => {
- let idx = self.focus_idx();
- if let Some(idx) = idx {
+ if let Some(idx) = self.focus_idx() {
if self.history.entry(idx).running() {
self.set_focus(Focus::History(idx));
}
@@ -326,14 +324,10 @@ impl Shell {
}
}
textmode::Key::Char('j') | textmode::Key::Down => {
- self.set_focus(Focus::Scrolling(
- self.scroll_down(self.focus_idx()),
- ));
+ self.set_focus(Focus::Scrolling(self.scroll_down()));
}
textmode::Key::Char('k') | textmode::Key::Up => {
- self.set_focus(Focus::Scrolling(
- self.scroll_up(self.focus_idx()),
- ));
+ self.set_focus(Focus::Scrolling(self.scroll_up()));
}
textmode::Key::Char('n') => {
self.set_focus(self.next_running());
@@ -418,10 +412,6 @@ impl Shell {
self.focus = new_focus;
self.hide_readline = false;
self.scene = self.default_scene(new_focus);
- // passing entry into default_scene above consumes it, which means
- // that the mutex lock will be dropped before we call into
- // make_focus_visible, which is important because otherwise we might
- // get a deadlock depending on what is visible
self.history.make_focus_visible(
self.readline.lines(),
self.focus_idx(),
@@ -441,8 +431,8 @@ impl Shell {
}
}
- fn scroll_up(&self, idx: Option<usize>) -> Option<usize> {
- idx.map_or_else(
+ fn scroll_up(&self) -> Option<usize> {
+ self.focus_idx().map_or_else(
|| {
let count = self.history.entry_count();
if count == 0 {
@@ -455,8 +445,8 @@ impl Shell {
)
}
- fn scroll_down(&self, idx: Option<usize>) -> Option<usize> {
- idx.and_then(|idx| {
+ fn scroll_down(&self) -> Option<usize> {
+ self.focus_idx().and_then(|idx| {
if idx >= self.history.entry_count() - 1 {
None
} else {
@@ -473,7 +463,7 @@ impl Shell {
return Focus::History(idx);
}
}
- self.focus_idx().map_or(Focus::Readline, Focus::History)
+ self.focus
}
fn prev_running(&self) -> Focus {
@@ -484,6 +474,6 @@ impl Shell {
return Focus::History(idx);
}
}
- self.focus_idx().map_or(Focus::Readline, Focus::History)
+ self.focus
}
}