diff --git a/crates/fallback/src/lib.rs b/crates/fallback/src/lib.rs index d3b53f9fa..d14d1c3f4 100644 --- a/crates/fallback/src/lib.rs +++ b/crates/fallback/src/lib.rs @@ -25,7 +25,7 @@ /// Valid values are 1, and 2. 1 is the typical emoji width used in Unicode 8 while some newer /// terminals use a width of 2 since Unicode 9. // For some reason, this is declared here and exposed here, but is set in `env_dispatch`. -pub static FISH_EMOJI_WIDTH: AtomicIsize = AtomicIsize::new(1); +pub static FISH_EMOJI_WIDTH: AtomicIsize = AtomicIsize::new(2); static WC_LOOKUP_TABLE: LazyLock = LazyLock::new(WcLookupTable::new); diff --git a/src/env_dispatch.rs b/src/env_dispatch.rs index 828b85a53..74b195d5b 100644 --- a/src/env_dispatch.rs +++ b/src/env_dispatch.rs @@ -14,7 +14,6 @@ }; use crate::screen::{IS_DUMB, ONLY_GRAYSCALE, screen_set_midnight_commander_hack}; use crate::terminal::ColorSupport; -use crate::tty_handoff::xtversion; use crate::wutil::fish_wcstoi; use fish_wcstringutil::{bool_from_string, string_prefixes_string}; use std::collections::HashMap; @@ -61,7 +60,7 @@ macro_rules! vars { L!("fish_sequence_key_delay_ms"), vars!(update_wait_on_sequence_key_ms), ); - table.add_anon(L!("fish_emoji_width"), vars!(guess_emoji_width)); + table.add_anon(L!("fish_emoji_width"), vars!(handle_emoji_width)); table.add_anon( L!("fish_ambiguous_width"), vars!(handle_change_ambiguous_width), @@ -159,7 +158,7 @@ fn handle_timezone(var_name: &wstr, vars: &EnvStack) { } /// Update the value of [`FISH_EMOJI_WIDTH`](fish_fallback::FISH_EMOJI_WIDTH). -pub fn guess_emoji_width(vars: &EnvStack) { +pub fn handle_emoji_width(vars: &EnvStack) { use fish_fallback::FISH_EMOJI_WIDTH; if let Some(width_str) = vars.get(L!("fish_emoji_width")) { @@ -171,38 +170,7 @@ pub fn guess_emoji_width(vars: &EnvStack) { "Overriding default fish_emoji_width w/", new_width ); - return; - } - - let term_program = vars - .get(L!("TERM_PROGRAM")) - .map_or_else(WString::new, |v| v.as_string()); - - // TODO(term-workaround) - if xtversion().unwrap_or(L!("")).starts_with(L!("iTerm2 ")) { - // iTerm2 now defaults to Unicode 9 sizes for anything after macOS 10.12 - FISH_EMOJI_WIDTH.store(2, Ordering::Relaxed); - flog!(term_support, "default emoji width 2 for iTerm2"); - } else if term_program == "Apple_Terminal" && { - let version = vars - .get(L!("TERM_PROGRAM_VERSION")) - .map(|v| v.as_string()) - .and_then(|v| { - let mut consumed = 0; - crate::wutil::wcstod::wcstod(&v, '.', &mut consumed).ok() - }) - .unwrap_or(0.0); - version as i32 >= 400 - } { - // Apple Terminal on High Sierra - FISH_EMOJI_WIDTH.store(2, Ordering::Relaxed); - flog!(term_support, "default emoji width: 2 for", term_program); } else { - // Default to whatever the system's wcwidth gives for U+1F603, but only if it's at least - // 1 and at most 2. - #[cfg(not(cygwin))] - let width = fish_fallback::wcwidth('😃').clamp(1, 2); - #[cfg(cygwin)] let width = 2_isize; FISH_EMOJI_WIDTH.store(width, Ordering::Relaxed); flog!(term_support, "default emoji width:", width); @@ -325,7 +293,6 @@ fn handle_locale_change(vars: &EnvStack) { } fn handle_term_change(vars: &EnvStack, suppress_repaint: bool) { - guess_emoji_width(vars); init_terminal(vars); if !suppress_repaint { reader_schedule_prompt_repaint(); @@ -393,7 +360,7 @@ fn run_inits(vars: &EnvStack) { init_locale(vars); init_special_chars_once(); init_terminal(vars); - guess_emoji_width(vars); + handle_emoji_width(vars); update_wait_on_escape_ms(vars); update_wait_on_sequence_key_ms(vars); handle_read_limit_change(vars); diff --git a/src/reader/reader.rs b/src/reader/reader.rs index 5ccd549f7..f23519601 100644 --- a/src/reader/reader.rs +++ b/src/reader/reader.rs @@ -39,7 +39,7 @@ use crate::env::EnvStack; use crate::env::{EnvMode, Environment, Statuses}; use crate::env_dispatch::MIDNIGHT_COMMANDER_SID; -use crate::env_dispatch::guess_emoji_width; +use crate::env_dispatch::handle_emoji_width; use crate::exec::exec_subshell; use crate::expand::expand_one; use crate::expand::{ExpandFlags, ExpandResultCode, expand_string, expand_tilde}; @@ -386,7 +386,7 @@ pub fn reader_push<'a>(parser: &'a Parser, history_name: &wstr, conf: ReaderConf background_color, } = terminal_init(parser.vars(), inputfd); let input_data = input_queue.get_input_data_mut(); - guess_emoji_width(parser.vars()); + handle_emoji_width(parser.vars()); // Provide value for `status current-command` parser.libdata_mut().status_vars.command = L!("fish").to_owned(); diff --git a/tests/test_driver.py b/tests/test_driver.py index fe14a8f90..772a10318 100755 --- a/tests/test_driver.py +++ b/tests/test_driver.py @@ -67,7 +67,6 @@ def makeenv(script_path: Path, home: Path) -> Dict[str, str]: "STY", "TERM", # Erase this since we still respect TERM=dumb etc. "TERM_PROGRAM", - "TERM_PROGRAM_VERSION", ]: if var in env: del env[var]