aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMroik <mroik@delayed.space>2025-01-28 00:59:37 +0100
committerMroik <mroik@delayed.space>2025-02-01 19:33:04 +0100
commita8e4918d8c7b9cfd7dfbd5e2771c3c52cbaaf601 (patch)
tree939d5bfcf6f5f414d928eb6ffe60b3898de2ecc4 /src
parent8d31f8c910c426cb146c833dd89f75abd2f7c076 (diff)
Fix caret position on line wrap
Diffstat (limited to 'src')
-rw-r--r--src/app.rs10
-rw-r--r--src/event.rs2
2 files changed, 10 insertions, 2 deletions
diff --git a/src/app.rs b/src/app.rs
index 42d82c1..5de1d10 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -8,7 +8,7 @@ use crossterm::{
cursor::MoveTo,
style::{Color, Print, SetForegroundColor},
terminal::{
- disable_raw_mode, enable_raw_mode, Clear, ClearType, EnterAlternateScreen,
+ self, disable_raw_mode, enable_raw_mode, Clear, ClearType, EnterAlternateScreen,
LeaveAlternateScreen,
},
ExecutableCommand, QueueableCommand,
@@ -102,6 +102,10 @@ impl App {
Event::KeyPress(k) => self.handle_keypress(k).await?,
Event::Backspace => self.handle_backspace().await,
Event::Render => self.render().await?,
+ Event::ForceRender => {
+ self.should_render = true;
+ self.render().await?;
+ }
}
if event != Event::Render {
@@ -137,6 +141,7 @@ impl App {
return Ok(());
}
+ let (col, _) = terminal::size()?;
self.stdout
.queue(Clear(ClearType::All))
.unwrap()
@@ -188,7 +193,8 @@ impl App {
let to_do = self.quote[self.state.current + 1..].join(" ");
self.stdout.queue(Print(&to_do))?.queue(Print("\n"))?;
- self.stdout.queue(MoveTo(cur_loc as u16, 0))?;
+ self.stdout
+ .queue(MoveTo(cur_loc as u16 % col, cur_loc as u16 / col))?;
self.stdout.flush()?;
self.should_render = false;
diff --git a/src/event.rs b/src/event.rs
index 400fcb6..d21d7b6 100644
--- a/src/event.rs
+++ b/src/event.rs
@@ -11,6 +11,7 @@ pub enum Event {
KeyPress(char),
Backspace,
Render,
+ ForceRender,
}
// TODO
@@ -22,6 +23,7 @@ pub async fn handle_input(sender: &Sender<Event>) -> Result<(), Box<dyn Error>>
//crossterm::event::Event::FocusGained => todo!(),
//crossterm::event::Event::FocusLost => todo!(),
//crossterm::event::Event::Paste(_) => todo!(),
+ crossterm::event::Event::Resize(_, _) => sender.send(Event::ForceRender).await?,
crossterm::event::Event::Key(key_event) => {
if key_event.code == KeyCode::Char('c')
&& key_event.modifiers == KeyModifiers::CONTROL
XMR address: 854DmXNrxULU3ZFJVs4Wc8PFhbq29RhqHhY8W6cdWrtFN3qmooKyyeYPcDzZTNRxphhJ5UzASQfAdEMwSteVqymk28aLhqj