summaryrefslogtreecommitdiffstats
path: root/alacritty_terminal
diff options
context:
space:
mode:
Diffstat (limited to 'alacritty_terminal')
-rw-r--r--alacritty_terminal/src/event.rs10
-rw-r--r--alacritty_terminal/src/event_loop.rs6
-rw-r--r--alacritty_terminal/src/term/mod.rs12
-rw-r--r--alacritty_terminal/src/tty/unix.rs42
4 files changed, 39 insertions, 31 deletions
diff --git a/alacritty_terminal/src/event.rs b/alacritty_terminal/src/event.rs
index fac7a56a..1ddf820b 100644
--- a/alacritty_terminal/src/event.rs
+++ b/alacritty_terminal/src/event.rs
@@ -39,7 +39,7 @@ pub enum Event {
PtyWrite(String),
/// Cursor blinking state has changed.
- CursorBlinkingChange(bool),
+ CursorBlinkingChange,
/// New terminal content available.
Wakeup,
@@ -54,17 +54,17 @@ pub enum Event {
impl Debug for Event {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
- Event::MouseCursorDirty => write!(f, "MouseCursorDirty"),
- Event::Title(title) => write!(f, "Title({})", title),
- Event::ResetTitle => write!(f, "ResetTitle"),
Event::ClipboardStore(ty, text) => write!(f, "ClipboardStore({:?}, {})", ty, text),
Event::ClipboardLoad(ty, _) => write!(f, "ClipboardLoad({:?})", ty),
Event::ColorRequest(index, _) => write!(f, "ColorRequest({})", index),
Event::PtyWrite(text) => write!(f, "PtyWrite({})", text),
+ Event::Title(title) => write!(f, "Title({})", title),
+ Event::CursorBlinkingChange => write!(f, "CursorBlinkingChange"),
+ Event::MouseCursorDirty => write!(f, "MouseCursorDirty"),
+ Event::ResetTitle => write!(f, "ResetTitle"),
Event::Wakeup => write!(f, "Wakeup"),
Event::Bell => write!(f, "Bell"),
Event::Exit => write!(f, "Exit"),
- Event::CursorBlinkingChange(blinking) => write!(f, "CursorBlinking({})", blinking),
}
}
}
diff --git a/alacritty_terminal/src/event_loop.rs b/alacritty_terminal/src/event_loop.rs
index fbd882ad..36392581 100644
--- a/alacritty_terminal/src/event_loop.rs
+++ b/alacritty_terminal/src/event_loop.rs
@@ -73,13 +73,13 @@ impl event::Notify for Notifier {
return;
}
- self.0.send(Msg::Input(bytes)).expect("send event loop msg");
+ let _ = self.0.send(Msg::Input(bytes));
}
}
impl event::OnResize for Notifier {
fn on_resize(&mut self, size: &SizeInfo) {
- self.0.send(Msg::Resize(*size)).expect("expected send event loop msg");
+ let _ = self.0.send(Msg::Resize(*size));
}
}
@@ -182,8 +182,8 @@ where
while let Ok(msg) = self.rx.try_recv() {
match msg {
Msg::Input(input) => state.write_list.push_back(input),
- Msg::Shutdown => return false,
Msg::Resize(size) => self.pty.on_resize(&size),
+ Msg::Shutdown => return false,
}
}
diff --git a/alacritty_terminal/src/term/mod.rs b/alacritty_terminal/src/term/mod.rs
index 1808f3aa..894bd763 100644
--- a/alacritty_terminal/src/term/mod.rs
+++ b/alacritty_terminal/src/term/mod.rs
@@ -640,7 +640,7 @@ impl<T> Term<T> {
}
// Update UI about cursor blinking state changes.
- self.event_proxy.send_event(Event::CursorBlinkingChange(self.cursor_style().blinking));
+ self.event_proxy.send_event(Event::CursorBlinkingChange);
}
/// Move vi mode cursor.
@@ -1471,8 +1471,7 @@ impl<T: EventListener> Handler for Term<T> {
self.mode &= TermMode::VI;
self.mode.insert(TermMode::default());
- let blinking = self.cursor_style().blinking;
- self.event_proxy.send_event(Event::CursorBlinkingChange(blinking));
+ self.event_proxy.send_event(Event::CursorBlinkingChange);
}
#[inline]
@@ -1576,7 +1575,7 @@ impl<T: EventListener> Handler for Term<T> {
ansi::Mode::BlinkingCursor => {
let style = self.cursor_style.get_or_insert(self.default_cursor_style);
style.blinking = true;
- self.event_proxy.send_event(Event::CursorBlinkingChange(true));
+ self.event_proxy.send_event(Event::CursorBlinkingChange);
},
}
}
@@ -1618,7 +1617,7 @@ impl<T: EventListener> Handler for Term<T> {
ansi::Mode::BlinkingCursor => {
let style = self.cursor_style.get_or_insert(self.default_cursor_style);
style.blinking = false;
- self.event_proxy.send_event(Event::CursorBlinkingChange(false));
+ self.event_proxy.send_event(Event::CursorBlinkingChange);
},
}
}
@@ -1678,8 +1677,7 @@ impl<T: EventListener> Handler for Term<T> {
self.cursor_style = style;
// Notify UI about blinking changes.
- let blinking = style.unwrap_or(self.default_cursor_style).blinking;
- self.event_proxy.send_event(Event::CursorBlinkingChange(blinking));
+ self.event_proxy.send_event(Event::CursorBlinkingChange);
}
#[inline]
diff --git a/alacritty_terminal/src/tty/unix.rs b/alacritty_terminal/src/tty/unix.rs
index 483333e7..a52f8329 100644
--- a/alacritty_terminal/src/tty/unix.rs
+++ b/alacritty_terminal/src/tty/unix.rs
@@ -246,6 +246,16 @@ pub fn new<C>(config: &Config<C>, size: &SizeInfo, window_id: Option<usize>) ->
}
}
+impl Drop for Pty {
+ fn drop(&mut self) {
+ // Make sure the PTY is terminated properly.
+ unsafe {
+ libc::kill(self.child.id() as i32, libc::SIGHUP);
+ }
+ let _ = self.child.wait();
+ }
+}
+
impl EventedReadWrite for Pty {
type Reader = File;
type Writer = File;
@@ -339,6 +349,22 @@ impl EventedPty for Pty {
}
}
+impl OnResize for Pty {
+ /// Resize the PTY.
+ ///
+ /// Tells the kernel that the window size changed with the new pixel
+ /// dimensions and line/column counts.
+ fn on_resize(&mut self, size: &SizeInfo) {
+ let win = size.to_winsize();
+
+ let res = unsafe { libc::ioctl(self.fd.as_raw_fd(), libc::TIOCSWINSZ, &win as *const _) };
+
+ if res < 0 {
+ die!("ioctl TIOCSWINSZ failed: {}", io::Error::last_os_error());
+ }
+ }
+}
+
/// Types that can produce a `libc::winsize`.
pub trait ToWinsize {
/// Get a `libc::winsize`.
@@ -356,22 +382,6 @@ impl<'a> ToWinsize for &'a SizeInfo {
}
}
-impl OnResize for Pty {
- /// Resize the PTY.
- ///
- /// Tells the kernel that the window size changed with the new pixel
- /// dimensions and line/column counts.
- fn on_resize(&mut self, size: &SizeInfo) {
- let win = size.to_winsize();
-
- let res = unsafe { libc::ioctl(self.fd.as_raw_fd(), libc::TIOCSWINSZ, &win as *const _) };
-
- if res < 0 {
- die!("ioctl TIOCSWINSZ failed: {}", io::Error::last_os_error());
- }
- }
-}
-
unsafe fn set_nonblocking(fd: c_int) {
use libc::{fcntl, F_GETFL, F_SETFL, O_NONBLOCK};