diff --git a/ROADMAP.md b/ROADMAP.md index 169f9ad4d..0acba6750 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -136,6 +136,7 @@ Ranked, to beta (detail and remaining milestones in [docs/roadmap.md](docs/roadm | 2026-10-12 | New documents follow the system region (#838): A4 and centimetres outside the US (Letter in the CLDR Letter territories, inches in the US), lengths written with the region's decimal separator (`2,54 cm`) and typed with either; an explicit Measurement units choice wins; `file.options {"region"}` for agents | | 2026-10-12 | Paste from other programs keeps their formatting (#687): Ctrl+V and Home › Paste read the system clipboard's HTML (and RTF on Windows and Wayland); Merge Formatting takes the destination's font and paragraph and keeps bold, italic, underline and strikethrough; Paste Special lists what the system clipboard holds (HTML, RTF, picture, text). Linux: pictures copied in a browser or Spectacle paste on KDE and other Wayland desktops (data-control clipboard), and a paste that finds nothing usable names what the clipboard holds instead of "empty" (#833) | | 2026-10-12 | PDF export of long documents with many internal links (a linked table of contents) is linear: NIH's 67-page protocol template 10.6 s → 0.9 s | +| 2026-10-12 | Keytips: Word for Windows' tab letters (File F, Design G, References S, Review R, View W, Help Y) | | 2026-10-11 | Hide White Space (#645): `view.hideWhiteSpace` (View › Show checkbox, or double-click the gap between pages) collapses margins, headers and footers between pages to a thin line in Print Layout; screen only, page count unchanged | | 2026-10-11 | Fonts: Palatino Linotype and Book Antiqua fall back to Palatino (macOS) or TeX Gyre Pagella / P052 / URW Palladio (Linux) before generic serif (#670) | |---|---| diff --git a/crates/ui-egui/src/keytips.rs b/crates/ui-egui/src/keytips.rs index 6f1b7cb2e..7a33e6254 100644 --- a/crates/ui-egui/src/keytips.rs +++ b/crates/ui-egui/src/keytips.rs @@ -65,19 +65,20 @@ impl Target { } } -/// Word's tab letters. `File` (Backstage only) and `Help` (dialog-only content) have none. +/// Word's tab letters, as Word for Windows shows them after Alt (File F, Design G, References S, +/// Review R, View W, Help Y). File opens the Backstage. const TAB_LETTERS: [(&str, &str); 11] = [ - ("File", ""), + ("File", "F"), ("Home", "H"), ("Insert", "N"), ("Draw", "D"), - ("Design", "L"), + ("Design", "G"), ("Layout", "P"), - ("References", "R"), + ("References", "S"), ("Mailings", "M"), - ("Review", "S"), - ("View", "V"), - ("Help", ""), + ("Review", "R"), + ("View", "W"), + ("Help", "Y"), ]; /// The letter badge for a tab (empty when it has none). @@ -539,7 +540,8 @@ pub fn handle_key(app: &mut WordApp, key: egui::Key) -> bool { match hit { Some(tab) => { let _ = app.run("ui.tab", serde_json::json!({ "tab": tab })); - app.ui.keytips = Phase::Commands; + // File opens the Backstage: no ribbon commands to badge. + app.ui.keytips = if tab == "File" { Phase::Off } else { Phase::Commands }; } None => app.ui.keytips = Phase::Off, } @@ -841,16 +843,17 @@ mod tests { #[test] fn tab_letters_match_word() { + // Observed in Word for Windows (Microsoft 365): Alt shows these over the tabs. + assert_eq!(tab_letter("File"), "F"); assert_eq!(tab_letter("Home"), "H"); assert_eq!(tab_letter("Insert"), "N"); - assert_eq!(tab_letter("Design"), "L"); + assert_eq!(tab_letter("Design"), "G"); assert_eq!(tab_letter("Layout"), "P"); - assert_eq!(tab_letter("References"), "R"); + assert_eq!(tab_letter("References"), "S"); assert_eq!(tab_letter("Mailings"), "M"); - assert_eq!(tab_letter("Review"), "S"); - assert_eq!(tab_letter("View"), "V"); - assert_eq!(tab_letter("File"), ""); - assert_eq!(tab_letter("Help"), ""); + assert_eq!(tab_letter("Review"), "R"); + assert_eq!(tab_letter("View"), "W"); + assert_eq!(tab_letter("Help"), "Y"); } #[test] @@ -970,6 +973,21 @@ mod tests { assert_eq!(a.ui.keytips, Phase::Commands); assert!(handle_key(&mut a, egui::Key::F)); assert_eq!(a.ui.keytips, Phase::Off); + // Alt, F: the Backstage, and keytips end. + a.ui.backstage = false; + activate(&mut a); + assert!(handle_key(&mut a, egui::Key::F)); + assert!(a.ui.backstage, "Alt, F opens File"); + assert_eq!(a.ui.keytips, Phase::Off); + // Alt, W: View; Alt, R: Review (Word's letters, not V and S). + a.ui.backstage = false; + activate(&mut a); + assert!(handle_key(&mut a, egui::Key::W)); + assert_eq!((a.ui.tab.as_str(), a.ui.keytips), ("View", Phase::Commands)); + a.ui.keytips = Phase::Off; + activate(&mut a); + assert!(handle_key(&mut a, egui::Key::R)); + assert_eq!(a.ui.tab, "Review"); } #[test] diff --git a/docs/ui-parity.md b/docs/ui-parity.md index 30f6ad362..cbc968c01 100644 --- a/docs/ui-parity.md +++ b/docs/ui-parity.md @@ -49,6 +49,7 @@ own (`AGENTS.md`: no Microsoft iconography, ever). | 2026-10-11 | trivial | Alt activation handles native key/modifier events in either order, including key-up with the old Alt flag; taps toggle once, chords and focus loss do not activate KeyTips | | 2026-10-11 | trivial | Quick Access Toolbar KeyTips (#620): 1–9, zero-prefixed numbers for longer toolbars, disabled commands stay disabled, Escape cancels, badge keystrokes never type into the document; persisted File › Options switch | | 2026-10-11 | trivial | Ribbon buttons that run a command (alignment, Bold, styles…) hand keyboard focus back to the document, so typing continues without another click; they also report their name and enabled state to screen readers (#686) | +| 2026-10-12 | trivial | Keytips use Word for Windows' tab letters, as observed there: File F (opens the Backstage), Design G, References S, Review R, View W, Help Y (were L, R, S, V and none) | | 2026-10-11 | trivial | Tables on the page: column and row borders and the resize handle drag, with a dashed guide and one undo step per drag (#217) | | 2026-10-11 | trivial | Animation effects › Use system setting also reads macOS (Reduce motion) and the Linux/BSD desktops (settings portal: the cross-desktop reduced-motion preference, GNOME's switch, KDE's animation speed; the GTK and KDE settings files where no portal answers), and follows a change without a restart | | 2026-10-11 | trivial | Animation effects setting in File › Options › Accessibility (Use system setting, On, Off), kept between runs: the app eased wheel scrolling, zooming and its fades whatever the system's setting was; off, they land at once. Follows the system's setting on Windows and in browsers; `ui.animations` for agents |