Skip to content

Commit faee35f

Browse files
authored
fix: force ANSI for keyboard progressive enhancement on Windows (#2474)
1 parent a0c6842 commit faee35f

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

yazi-fm/src/term.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::{io, ops::{Deref, DerefMut}, sync::atomic::{AtomicBool, AtomicU8, Ordering}};
22

33
use anyhow::Result;
4-
use crossterm::{event::{DisableBracketedPaste, EnableBracketedPaste, KeyboardEnhancementFlags, PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags}, execute, queue, style::Print, terminal::{LeaveAlternateScreen, SetTitle, disable_raw_mode, enable_raw_mode}};
4+
use crossterm::{Command, event::{DisableBracketedPaste, EnableBracketedPaste, KeyboardEnhancementFlags, PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags}, execute, queue, style::Print, terminal::{LeaveAlternateScreen, SetTitle, disable_raw_mode, enable_raw_mode}};
55
use cursor::RestoreCursor;
66
use ratatui::{CompletedFrame, Frame, Terminal, backend::CrosstermBackend, buffer::Buffer, layout::Rect};
77
use yazi_adapter::{Emulator, Mux};
@@ -59,13 +59,11 @@ impl Term {
5959
);
6060

6161
if CSI_U.load(Ordering::Relaxed) {
62-
queue!(
63-
TTY.writer(),
64-
PushKeyboardEnhancementFlags(
65-
KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES
66-
| KeyboardEnhancementFlags::REPORT_ALTERNATE_KEYS
67-
)
68-
)?;
62+
PushKeyboardEnhancementFlags(
63+
KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES
64+
| KeyboardEnhancementFlags::REPORT_ALTERNATE_KEYS,
65+
)
66+
.write_ansi(&mut TTY.writer())?;
6967
}
7068

7169
term.hide_cursor()?;
@@ -76,7 +74,7 @@ impl Term {
7674

7775
fn stop(&mut self) -> Result<()> {
7876
if CSI_U.swap(false, Ordering::Relaxed) {
79-
execute!(TTY.writer(), PopKeyboardEnhancementFlags)?;
77+
PopKeyboardEnhancementFlags.write_ansi(&mut TTY.writer())?;
8078
}
8179

8280
execute!(
@@ -93,7 +91,7 @@ impl Term {
9391

9492
pub(super) fn goodbye(f: impl FnOnce() -> bool) -> ! {
9593
if CSI_U.swap(false, Ordering::Relaxed) {
96-
execute!(TTY.writer(), PopKeyboardEnhancementFlags).ok();
94+
PopKeyboardEnhancementFlags.write_ansi(&mut TTY.writer()).ok();
9795
}
9896

9997
if !MGR.title_format.is_empty() {

yazi-shared/src/tty/tty.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,14 @@ impl Read for TtyReader<'_> {
6767
// --- Writer
6868
pub struct TtyWriter<'a>(&'a Mutex<BufWriter<Handle>>);
6969

70-
impl Write for TtyWriter<'_> {
70+
impl std::io::Write for TtyWriter<'_> {
7171
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> { self.0.lock().write(buf) }
7272

7373
fn flush(&mut self) -> std::io::Result<()> { self.0.lock().flush() }
7474
}
75+
76+
impl std::fmt::Write for TtyWriter<'_> {
77+
fn write_str(&mut self, s: &str) -> std::fmt::Result {
78+
self.0.lock().write_all(s.as_bytes()).map_err(|_| std::fmt::Error)
79+
}
80+
}

0 commit comments

Comments
 (0)