From 06e9fb8e67524bb9aadcbbd049e6260deedceba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E9=9B=85=20=C2=B7=20Misaki=20Masa?= Date: Fri, 29 Mar 2024 00:22:10 +0800 Subject: [PATCH] fix: Windows `cmd.exe` not responding to correct CSI sequences due to ConPTY (#845) --- yazi-adaptor/src/emulator.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/yazi-adaptor/src/emulator.rs b/yazi-adaptor/src/emulator.rs index b2927c90..0a6b4868 100644 --- a/yazi-adaptor/src/emulator.rs +++ b/yazi-adaptor/src/emulator.rs @@ -1,7 +1,7 @@ -use std::{env, io::{Read, Write}}; +use std::{env, io::Read}; use anyhow::{anyhow, Result}; -use crossterm::terminal::{disable_raw_mode, enable_raw_mode}; +use crossterm::{cursor::{RestorePosition, SavePosition}, execute, style::Print, terminal::{disable_raw_mode, enable_raw_mode}}; use tracing::warn; use yazi_shared::env_exists; @@ -113,8 +113,12 @@ impl Emulator { pub fn via_csi() -> Result { enable_raw_mode()?; - std::io::stderr().write_all(b"\x1b[>q\x1b_Gi=31,s=1,v=1,a=q,t=d,f=24;AAAA\x1b\\\x1b[c")?; - std::io::stderr().flush()?; + execute!( + std::io::stderr(), + SavePosition, + Print("\x1b[>q\x1b_Gi=31,s=1,v=1,a=q,t=d,f=24;AAAA\x1b\\\x1b[c"), + RestorePosition + )?; let mut stdin = std::io::stdin().lock(); let mut buf = String::with_capacity(200);