mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-25 10:51:07 +00:00
KEYC-METADATA: Cmd+K / Ctrl+K puts the cursor in the Add keyword box
Lightroom Classic's keyboard shortcut page lists Command+K (Ctrl+K on Windows) for Add keywords. LightCraft had no key for it. Add Keywords (panel.addKeywords, Cmd+K) shows the Keywords panel, opens its Keywording section when it is folded shut, and puts the cursor in the Add keyword box, so the next keywords typed go to the selected photos. Pressed again, it leaves the panel open. With no photo selected the panel shows its note, and selecting photos later does not move the cursor into the box. The command label has a row in every catalog. The KEYC-METADATA row, docs/ui-parity.md and docs/library-shortcuts.md list the key. The KEYC-METADATA row also lists the existing Alt+1 to Alt+9 keyword set keys in place of "no keyword sets".
This commit is contained in:
@@ -47,6 +47,7 @@
|
||||
"Add in place": "Přidat ze současného umístění",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Přidat ze současného umístění: knihovna odkazuje na soubory tam, kde jsou; nic se nekopíruje ani nepřesouvá.",
|
||||
"Add keyword": "Přidat klíčové slovo",
|
||||
"Add Keywords": "Přidat klíčová slova",
|
||||
"Add number": "Přidat číslo",
|
||||
"Add to": "Přidat do",
|
||||
"Add to Album": "Přidat do alba",
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
"Add in place": "Am Speicherort hinzufügen",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Am Speicherort hinzufügen: Die Bibliothek verweist auf die Dateien an ihrem aktuellen Speicherort; nichts wird kopiert oder verschoben.",
|
||||
"Add keyword": "Stichwort hinzufügen",
|
||||
"Add Keywords": "Stichwörter hinzufügen",
|
||||
"Add number": "Nummer hinzufügen",
|
||||
"Add to": "Hinzufügen zu",
|
||||
"Add to Album": "Zu Album hinzufügen",
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
"Add in place": "Añadir sin mover",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Añadir sin mover: la biblioteca hace referencia a los archivos donde están; no se copia ni se mueve nada.",
|
||||
"Add keyword": "Añadir palabra clave",
|
||||
"Add Keywords": "Añadir palabras clave",
|
||||
"Add number": "Añadir número",
|
||||
"Add to": "Añadir a",
|
||||
"Add to Album": "Añadir al álbum",
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
"Add in place": "Lisää paikalleen",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Lisää paikalleen: kirjasto viittaa tiedostoihin niiden nykyisessä sijainnissa; mitään ei kopioida tai siirretä.",
|
||||
"Add keyword": "Lisää avainsana",
|
||||
"Add Keywords": "Lisää avainsanoja",
|
||||
"Add number": "Lisää numero",
|
||||
"Add text overlay": "Lisää tekstipeittokuva",
|
||||
"Add to": "Lisää kohteeseen",
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
"Add in place": "Ajouter sur place",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Ajouter sur place : la bibliothèque référence les fichiers là où ils se trouvent ; rien n'est copié ni déplacé.",
|
||||
"Add keyword": "Ajouter un mot-clé",
|
||||
"Add Keywords": "Ajouter des mots-clés",
|
||||
"Add number": "Ajouter un numéro",
|
||||
"Add to": "Ajouter à",
|
||||
"Add to Album": "Ajouter à l'album",
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
"Add in place": "Tambahkan di lokasi asli",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Tambahkan di lokasi asli: pustaka merujuk file di lokasinya saat ini; tidak ada yang disalin atau dipindahkan.",
|
||||
"Add keyword": "Tambahkan kata kunci",
|
||||
"Add Keywords": "Tambahkan kata kunci",
|
||||
"Add number": "Tambahkan nomor",
|
||||
"Add text overlay": "Tambahkan overlay teks",
|
||||
"Add to": "Tambahkan ke",
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
"Add in place": "Aggiungi sul posto",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Aggiungi sul posto: la libreria usa i file dove si trovano; niente viene copiato o spostato.",
|
||||
"Add keyword": "Aggiungi parola chiave",
|
||||
"Add Keywords": "Aggiungi parole chiave",
|
||||
"Add number": "Aggiungi numero",
|
||||
"Add to": "Aggiungi a",
|
||||
"Add to Album": "Aggiungi all'album",
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
"Add in place": "現在の場所から追加",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "現在の場所のファイルを参照します。コピーや移動はしません",
|
||||
"Add keyword": "キーワードを追加",
|
||||
"Add Keywords": "キーワードを追加",
|
||||
"Add number": "番号を付ける",
|
||||
"Add to": "追加先",
|
||||
"Add to Album": "アルバムに追加",
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
"Add in place": "ადგილზე დამატება",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "ადგილზე დამატება: ბიბლიოთეკა ფაილებს მათ ამჟამინდელ ადგილას მიმართავს; არაფერი კოპირდება ან გადაიტანება.",
|
||||
"Add keyword": "საკვანძო სიტყვის დამატება",
|
||||
"Add Keywords": "საკვანძო სიტყვების დამატება",
|
||||
"Add number": "რიცხვის დამატება",
|
||||
"Add to": "დამატება:",
|
||||
"Add to Album": "ალბომში დამატება",
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
"Add in place": "Dodaj bez kopiowania plików",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Dodaj w miejscu: biblioteka odwołuje się do plików w ich obecnej lokalizacji; nic nie jest kopiowane ani przenoszone.",
|
||||
"Add keyword": "Dodaj słowo kluczowe",
|
||||
"Add Keywords": "Dodaj słowa kluczowe",
|
||||
"Add number": "Dodaj numer",
|
||||
"Add to": "Dodaj do",
|
||||
"Add to Album": "Dodaj do albumu",
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
"Add in place": "Adicionar no local",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Adicionar no local: a biblioteca referencia os arquivos onde eles estão; nada é copiado nem movido.",
|
||||
"Add keyword": "Adicionar palavra-chave",
|
||||
"Add Keywords": "Adicionar palavras-chave",
|
||||
"Add number": "Adicionar número",
|
||||
"Add to": "Adicionar a",
|
||||
"Add to Album": "Adicionar ao álbum",
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
"Add in place": "Добавить на месте",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Добавить на месте: библиотека ссылается на файлы там, где они лежат; ничего не копируется и не перемещается.",
|
||||
"Add keyword": "Добавить ключевое слово",
|
||||
"Add Keywords": "Добавить ключевые слова",
|
||||
"Add number": "Добавить номер",
|
||||
"Add to": "Добавить в",
|
||||
"Add to Album": "Добавить в альбом",
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
"Add in place": "Lägg till på plats",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Lägg till på plats: biblioteket refererar till filerna där de ligger; ingenting kopieras eller flyttas.",
|
||||
"Add keyword": "Lägg till nyckelord",
|
||||
"Add Keywords": "Lägg till nyckelord",
|
||||
"Add Mask": "Lägg till mask",
|
||||
"Add number": "Lägg till nummer",
|
||||
"Add Object Click": "Lägg till objektklick",
|
||||
|
||||
@@ -389,6 +389,7 @@
|
||||
"Add in place": "Додати на місці",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Додати на місці: бібліотека посилається на файли в їхньому розташуванні; нічого не копіюється й не переміщується.",
|
||||
"Add keyword": "Додати ключове слово",
|
||||
"Add Keywords": "Додати ключові слова",
|
||||
"Add number": "Додати число",
|
||||
"Add to Album": "Додати до альбому",
|
||||
"Add to Favorites": "Додати до улюблених",
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
"Add in place": "Thêm tại chỗ",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "Thêm tại chỗ: thư viện tham chiếu tệp ở vị trí hiện tại; không sao chép hay di chuyển gì.",
|
||||
"Add keyword": "Thêm từ khóa",
|
||||
"Add Keywords": "Thêm từ khóa",
|
||||
"Add number": "Thêm số",
|
||||
"Add to": "Thêm vào",
|
||||
"Add to Album": "Thêm vào album",
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
"Add in place": "在原位置添加",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "在原位置添加:图库直接引用文件所在位置;不会复制或移动任何内容。",
|
||||
"Add keyword": "添加关键字",
|
||||
"Add Keywords": "添加关键字",
|
||||
"Add number": "添加编号",
|
||||
"Add to": "添加到",
|
||||
"Add to Album": "添加到相册",
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
"Add in place": "原地加入",
|
||||
"Add in place: the library references the files where they are; nothing is copied or moved.": "原地加入:照片庫參照檔案目前的位置,不會複製或移動檔案。",
|
||||
"Add keyword": "新增關鍵字",
|
||||
"Add Keywords": "新增關鍵字",
|
||||
"Add number": "加上編號",
|
||||
"Add to": "加入至",
|
||||
"Add to Album": "加入相簿",
|
||||
|
||||
@@ -158,6 +158,8 @@ pub const UI_COMMANDS: &[UiCommand] = &[
|
||||
("panel.presets", "Presets", Some("Shift+P"), "Window"),
|
||||
("panel.info", "Info", Some("I"), "Window"),
|
||||
("panel.keywords", "Keywords", Some("K"), "Window"),
|
||||
// the Keywords panel with the cursor in its Add keyword box
|
||||
("panel.addKeywords", "Add Keywords", Some("Cmd+K"), ""),
|
||||
("panel.versions", "Versions", Some("Shift+V"), "Window"),
|
||||
("panel.activity", "History", None, "Window"),
|
||||
("panel.close", "Close Panel", None, ""),
|
||||
@@ -1242,6 +1244,15 @@ pub fn run_ui_command(app: &mut LightcraftApp, id: &str, p: &Value) -> Option<Re
|
||||
panel(app, &ctx, RightPanel::Keywords, "Keywords");
|
||||
Ok(Value::Null)
|
||||
}
|
||||
"panel.addKeywords" => {
|
||||
// opens Keywording when it is folded shut; the panel stays open when pressed again
|
||||
if app.ui.right != RightPanel::Keywords {
|
||||
panel(app, &ctx, RightPanel::Keywords, "Keywords");
|
||||
}
|
||||
app.ui.folded_sections.retain(|s| s != "keywording");
|
||||
app.ui.focus_keywords = true;
|
||||
Ok(Value::Null)
|
||||
}
|
||||
"panel.versions" => {
|
||||
panel(app, &ctx, RightPanel::Versions, "Versions");
|
||||
Ok(Value::Null)
|
||||
|
||||
@@ -20,6 +20,8 @@ pub fn show(app: &mut LightcraftApp, ui: &mut egui::Ui) {
|
||||
let Some(id) = app.session.active() else {
|
||||
// the Keyword List is the library's, not a photo's: it is there without a selection
|
||||
if app.ui.right == RightPanel::Keywords {
|
||||
// (without a selection there is no Add keyword box for Add Keywords to put the cursor in)
|
||||
app.ui.focus_keywords = false;
|
||||
egui::ScrollArea::vertical().id_salt("right-scroll").auto_shrink([false, false]).show(ui, |ui| {
|
||||
ui.spacing_mut().item_spacing.y = 0.0;
|
||||
if fold_header(app, ui, "keywording", "Keywords") {
|
||||
@@ -1014,11 +1016,16 @@ fn keywording(app: &mut LightcraftApp, ui: &mut egui::Ui) {
|
||||
// switched away, doesn't claim the cursor whenever it is next drawn)
|
||||
let bid = egui::Id::new("kw-begin");
|
||||
let begin = ui.data_mut(|d| d.remove_temp::<u64>(bid)).is_some_and(|asked| asked.checked_add(1) == Some(pass));
|
||||
// Add Keywords (⌘K) asks for the cursor too, and for the box to be scrolled into sight
|
||||
let asked = std::mem::take(&mut app.ui.focus_keywords);
|
||||
let r = crate::text_field::TextField::singleline("field:keyword", &mut text)
|
||||
.hint(crate::i18n::tr("Add keyword"))
|
||||
.width(f32::INFINITY)
|
||||
.begin_edit(begin)
|
||||
.begin_edit(begin || asked)
|
||||
.show(ui);
|
||||
if asked {
|
||||
r.response.scroll_to_me(None);
|
||||
}
|
||||
let in_sight = ui.clip_rect().contains(r.response.rect.center());
|
||||
let mut drawn = Rect::NOTHING;
|
||||
// (what isn't drawn can't be taken: Return on the frame the box scrolls out gives nothing)
|
||||
|
||||
@@ -900,6 +900,9 @@ pub struct UiState {
|
||||
/// Focus the search field on the next frame (Edit → Find…).
|
||||
#[serde(skip)]
|
||||
pub focus_search: bool,
|
||||
/// Put the cursor in the Keywords panel's Add keyword box when it is next drawn (Add Keywords).
|
||||
#[serde(skip)]
|
||||
pub focus_keywords: bool,
|
||||
/// A mask being renamed in the Masks list: its id and the edited name.
|
||||
#[serde(skip)]
|
||||
pub renaming_mask: Option<(u32, String)>,
|
||||
@@ -1508,6 +1511,7 @@ impl Default for UiState {
|
||||
known_cards: None,
|
||||
search: String::new(),
|
||||
focus_search: false,
|
||||
focus_keywords: false,
|
||||
renaming_mask: None,
|
||||
describe: None,
|
||||
detail_due: None,
|
||||
|
||||
@@ -108,6 +108,42 @@ fn the_add_keyword_box_pastes_adds_and_gives_up() {
|
||||
assert!(ids.iter().all(|id| !keywords_of(&h, *id).contains(&"harbour".to_string())), "Esc gave it up");
|
||||
}
|
||||
|
||||
/// ⌘K (Ctrl+K) is Add Keywords: it shows the Keywords panel, opens Keywording when it is folded
|
||||
/// shut, and puts the cursor in the Add keyword box, so what is typed next goes to the selection.
|
||||
#[test]
|
||||
fn cmd_k_puts_the_cursor_in_the_add_keyword_box() {
|
||||
let (mut h, ids) = two_selected();
|
||||
ask(&mut h, "ui.clickWidget", json!({"id": "section:keywording"}));
|
||||
ask(&mut h, "ui.set", json!({"right": "none"}));
|
||||
ask(&mut h, "ui.key", json!({"key": "K", "cmd": true}));
|
||||
assert_eq!(h.app.ui.right, crate::state::RightPanel::Keywords, "the Keywords panel");
|
||||
assert!(!h.app.ui.section_folded("keywording") && has(&h, "field:keyword"), "Keywording is open");
|
||||
assert!(h.view.ctx.memory(|m| m.has_focus(crate::text_field::id("field:keyword"))), "the box has the cursor");
|
||||
ask(&mut h, "ui.text", json!({"text": "harbour"}));
|
||||
ask(&mut h, "ui.key", json!({"key": "Enter"}));
|
||||
assert!(ids.iter().all(|id| keywords_of(&h, *id).contains(&"harbour".to_string())), "typed and given to both");
|
||||
assert!(!h.view.ctx.memory(|m| m.has_focus(crate::text_field::id("field:keyword"))), "Return gave up the cursor");
|
||||
ask(&mut h, "ui.key", json!({"key": "K", "cmd": true}));
|
||||
assert_eq!(h.app.ui.right, crate::state::RightPanel::Keywords, "pressed again: the panel stays");
|
||||
assert!(h.view.ctx.memory(|m| m.has_focus(crate::text_field::id("field:keyword"))), "and the cursor is back in the box");
|
||||
}
|
||||
|
||||
/// With no photo, ⌘K shows the Keywords panel and its note; selecting photos afterwards doesn't put the
|
||||
/// cursor in the Add keyword box.
|
||||
#[test]
|
||||
fn cmd_k_without_a_photo_leaves_the_cursor_alone() {
|
||||
let (mut h, ids) = two_selected();
|
||||
ask(&mut h, "engine.execute", json!({"command": "library.select", "params": {"ids": []}}));
|
||||
assert!(h.app.session.active().is_none(), "no active photo");
|
||||
ask(&mut h, "ui.set", json!({"right": "none"}));
|
||||
ask(&mut h, "ui.key", json!({"key": "K", "cmd": true}));
|
||||
assert_eq!(h.app.ui.right, crate::state::RightPanel::Keywords, "the Keywords panel");
|
||||
assert!(!has(&h, "field:keyword"), "no box without a photo");
|
||||
ask(&mut h, "engine.execute", json!({"command": "library.select", "params": {"ids": ids}}));
|
||||
assert!(has(&h, "field:keyword"));
|
||||
assert!(!h.view.ctx.memory(|m| m.has_focus(crate::text_field::id("field:keyword"))), "the box waits for a click");
|
||||
}
|
||||
|
||||
/// The keyword set's buttons say whether the selection has each keyword, as their ⌥1–⌥9 toggle it
|
||||
/// on the selection: on when every selected photo has it, partly on when only some do.
|
||||
#[test]
|
||||
|
||||
@@ -17,6 +17,7 @@ Select photos in Photo Grid or Square Grid, then use:
|
||||
| `Cmd`/`Ctrl` + `↑` / `↓` | Raise / lower flag status (reject < unflagged < pick; stops at either end) |
|
||||
| `Shift` + `0`–`9`, `P`, `X` or `U` | Apply the action and select the next photo |
|
||||
| `\` (backslash) | Show / hide the Filter Bar |
|
||||
| ⌘K / Ctrl+K | Add Keywords: show the Keywords panel with the cursor in its Add keyword box |
|
||||
| ⌘L / Ctrl+L | Enable Filters: switch the filter off and on |
|
||||
|
||||
Enter opens the active photo without changing the selection. Text fields, dialogs and open popups keep the key; a custom Enter binding takes precedence. Enter has no additional action in Detail.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Lightroom parity checklist
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-24 · **Change:** minor (LRC-DEV-HISTOGRAM-DRAG: the histogram's five tonal zones — hover for the value, drag to adjust the Basic control the press locked, double-click to reset; LR-VIEW-HISTOGRAM note updated; MENU-BAR: on macOS a menu item that yields its key to a focused text field or to shortcut recording really lets it go; LR-MERGE-HDR / LR-MERGE-PANO: Lanczos-3 warps; LR-IMP-LOCAL: browsing from the sidebar records the folder; LR-VIEW-ZOOM: only a full-size drag within 20 ms clears a slow-drag verdict; LR-IMP-ADD-DIALOG: hierarchical import album destination reconciled with main, #2362; KEY-SLIDER-NUDGE: vertical wheel nudges need a click or drag in the row; leaving it disarms them; LR-EDIT-OPTICS-PROFILE: Fujifilm nine-knot lens tables read at the plain radius; LR-VIEW-ZOOM: only a full-size drag within 20 ms clears a slow-drag verdict; LRC-LIB-LIBFOLDERS, LR-BEHAV-BG-TASKS: Synchronize Folder's scan shows its folder listing and stops it on ✕; LRC-LIB-LIBFOLDERS: Synchronize Folder says a folder is up to date; LR-LIB-STACK: filmstrip stack badge click; LRC-LIB-REFVIEW / CATALOG-SWITCH: Escape preserves edits; catalog-local pins; deleted and malformed references refused; LRC-LIB-COMPARE: the Info panel labels the active photo while culling, #2398; KEYC-RATING: `\` shows / hides the Filter Bar in the grids; LR-VIEW-PHOTOGRID: the grid reads only the photos an import batch or an edit touched, not the whole list; earlier: LRC-PRINT-PAGE: Print Page Options; LR-META-XMP: fewer false unimported-XMP warnings) · **Target:** Adobe Lightroom Classic 15.5 / Lightroom 9.6
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-24 · **Change:** minor (KEYC-METADATA: ⌘K / Ctrl+K Add Keywords; LRC-DEV-HISTOGRAM-DRAG: the histogram's five tonal zones — hover for the value, drag to adjust the Basic control the press locked, double-click to reset; LR-VIEW-HISTOGRAM note updated; MENU-BAR: on macOS a menu item that yields its key to a focused text field or to shortcut recording really lets it go; LR-MERGE-HDR / LR-MERGE-PANO: Lanczos-3 warps; LR-IMP-LOCAL: browsing from the sidebar records the folder; LR-VIEW-ZOOM: only a full-size drag within 20 ms clears a slow-drag verdict; LR-IMP-ADD-DIALOG: hierarchical import album destination reconciled with main, #2362; KEY-SLIDER-NUDGE: vertical wheel nudges need a click or drag in the row; leaving it disarms them; LR-EDIT-OPTICS-PROFILE: Fujifilm nine-knot lens tables read at the plain radius; LR-VIEW-ZOOM: only a full-size drag within 20 ms clears a slow-drag verdict; LRC-LIB-LIBFOLDERS, LR-BEHAV-BG-TASKS: Synchronize Folder's scan shows its folder listing and stops it on ✕; LRC-LIB-LIBFOLDERS: Synchronize Folder says a folder is up to date; LR-LIB-STACK: filmstrip stack badge click; LRC-LIB-REFVIEW / CATALOG-SWITCH: Escape preserves edits; catalog-local pins; deleted and malformed references refused; LRC-LIB-COMPARE: the Info panel labels the active photo while culling, #2398; KEYC-RATING: `\` shows / hides the Filter Bar in the grids; LR-VIEW-PHOTOGRID: the grid reads only the photos an import batch or an edit touched, not the whole list; earlier: LRC-PRINT-PAGE: Print Page Options; LR-META-XMP: fewer false unimported-XMP warnings) · **Target:** Adobe Lightroom Classic 15.5 / Lightroom 9.6
|
||||
|
||||
The measured, row-by-row checklist: one row per Lightroom feature, menu item and shortcut, what we
|
||||
have and what is missing. It answers *does the feature exist?* (feature breadth). Whether it is good
|
||||
@@ -782,7 +782,7 @@ From `08-lightroom-classic-extras.md` (Classic-only features) and part 2 of `06-
|
||||
| KEYC-COMPARE | Classic grid/compare keys (Z, Home/End, =/−, ⌘⇧D, S…) | P2 | 🟡 | `cmd:view.zoomToggle`, `cmd:view.thumbSizeUp`, `cmd:view.thumbSizeDown`, `crates/ui-egui/src/tests_zoom_keys.rs`, `cmd:library.select`, `crates/ui-egui/src/shortcuts.rs`, `crates/ui-egui/src/tests_keymap.rs` (`home_and_end_select_the_ends_of_the_grid`, `shift_arrows_extend_the_grid_selection`) | Z toggles zoom; `=` / `-` (and `+`) step the grid thumbnail size by 30 pt within the bottom-bar slider's 90–480 range in Photo Grid, Square Grid and People (nothing in Detail, Compare, Survey or Reference; a text field keeps the keys; ⌘= / ⌘− still zoom); Home / End make the first / last photo of the view the active, selected one and ⇧← / ⇧→ add the previous / next photo to the selection (the added photo becomes active; nothing is ever removed; at either end nothing happens), in Photo Grid and Square Grid only: they wait in the other views, in the full-screen preview, while a text field or a dialog has the keyboard, and when the user gave the key to a command; no compare, stacks keys |
|
||||
| KEYC-RATING | Classic rating/flag keys (1–5, ⇧1–5, 6–9, P, X, U, ⇧X, ⇧U, `[` `]`, \`, ⌘↑ ⌘↓) | P2 | 🟡 | `cmd:photo.rate`, `cmd:photo.pick`, `cmd:photo.flag`, `cmd:photo.cycleFlag`, `cmd:photo.increaseFlag`, `cmd:photo.decreaseFlag`, `cmd:library.toggleFilters` | 0–5 / Shift+0–5 and 6–9 / Shift+6–9; P/X/U, Shift+X/U and grid Shift+P work; ` (backtick) cycles each selected photo's flag unflagged → pick → reject → unflagged and ⌘↑ / ⌘↓ (Ctrl on Windows/Linux) raise / lower it (reject < unflagged < pick, clamped); one undo step, Compare/Survey act on the active photo, Auto Advance follows; tests cover batch/undo, active Compare candidate and text focus; `\` shows / hides the Filter Bar in the grids (Show Original in Detail); ⌘L (Ctrl+L) Enable Filters puts the filter aside and brings it back as it was. Missing: Shift+P outside grids (Presets) |
|
||||
| KEYC-COLLECTIONS | Classic collection keys (⌘N, B…) | P2 | 🟡 | `cmd:dialog.newAlbum` | ⌘N new album; no quick collection |
|
||||
| KEYC-METADATA | Classic keyword/metadata keys (⌘K, ⌘S, ⌘⌥⇧C/V…) | P2 | 🟡 | `cmd:photo.saveMetadataToFile` | ⌘S saves metadata; no keyword sets, metadata copy/paste |
|
||||
| KEYC-METADATA | Classic keyword/metadata keys (⌘K, ⌘S, ⌘⌥⇧C/V…) | P2 | 🟡 | `cmd:photo.saveMetadataToFile`, `cmd:panel.addKeywords`, `cmd:keyword.toggleFromSet` | ⌘S saves metadata; ⌘K (Ctrl+K) Add Keywords shows the Keywords panel with the cursor in its Add keyword box; ⌥1–⌥9 toggle the current keyword set's keywords. Missing: metadata copy/paste |
|
||||
| KEYC-DEVELOP | Classic develop keys (V, ⌘U, ⇧⌘U, R, Q, K, M, ⇧M, ⇧W, ⇧J, ⇧Q…) | P2 | 🟡 | `cmd:develop.treatment`, `cmd:develop.reset`, `cmd:crop.reset` | V, ⇧⌘R, ⌥⌘R, W, J, Y, ⇧Y, \ match; R/K/M/⇧M differ; no Classic keymap layer |
|
||||
| KEYC-MODULE-OUTPUT | Book / slideshow / print / map / web keys | P2 | ⬜ | | modules not implemented |
|
||||
| KEYC-HELP | Classic help keys (⌘/, F1) | P2 | 🟡 | `cmd:app.shortcuts` | ⌘/ only |
|
||||
@@ -799,6 +799,7 @@ Latin stays upright. Advanced Japanese composition remains open. Regression cove
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-24 | minor | KEYC-METADATA: ⌘K / Ctrl+K (`panel.addKeywords`, Add Keywords) shows the Keywords panel, opens Keywording and puts the cursor in the Add keyword box; status counts unchanged (KEYC-METADATA stays 🟡) |
|
||||
| 2026-10-24 | patch | LR-LIB-RATING, LR-LIB-DELETE: a slider drag still open when a rating, flag or label takes the photo out of the view, or when the photo is deleted, ends as its own undo step before the selection moves on, as moving to the next photo does; LR-BEHAV-LOCALIZE lists all 18 languages; status unchanged |
|
||||
| 2026-10-24 | patch | Integration batch 43: Integrated main 98702b5c, preserving the new fail-closed GPS metadata check for Original export. Watermark geometry/orientation and HDR JPEG size-limit fixes remain in their shared helpers; no feature-count changes. |
|
||||
| 2026-10-23 | patch | Export integration: Integrated main 5ca49b3e, retaining Width & Height resizing, export format/bit-depth validation and batch panic cancellation alongside the existing watermark and HDR JPEG size-limit fixes. No feature-count changes. |
|
||||
|
||||
+4
-1
@@ -1,6 +1,6 @@
|
||||
# UI parity
|
||||
|
||||
> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-23 · **Change:** minor (KEYC-RATING: ⌘L Enable Filters; context menus: a right-click elsewhere on the same widget moves its open menu instead of flashing it, issue #1877; Reference Escape, catalog-local pins and deleted-photo handling verified on Windows; KEYC-RATING: `\` shows / hides the Filter Bar in the grids; earlier: zoom row soft proofing sharp at 1:1, canvas tools by keyboard, focus-order test, ~50 unnamed hand-drawn widgets named) · **Target:** Adobe Lightroom Classic 15.5 / Lightroom 9.6
|
||||
> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-24 · **Change:** minor (KEYC-METADATA: ⌘K Add Keywords; KEYC-RATING: ⌘L Enable Filters; context menus: a right-click elsewhere on the same widget moves its open menu instead of flashing it, issue #1877; Reference Escape, catalog-local pins and deleted-photo handling verified on Windows; KEYC-RATING: `\` shows / hides the Filter Bar in the grids; earlier: zoom row soft proofing sharp at 1:1, canvas tools by keyboard, focus-order test, ~50 unnamed hand-drawn widgets named) · **Target:** Adobe Lightroom Classic 15.5 / Lightroom 9.6
|
||||
|
||||
How LightCraft's interaction compares with Lightroom's: views, panels, tools and handles, modifier
|
||||
keys, shortcuts, zoom, context menus and feel. Rows for individual menu items and shortcuts live in
|
||||
@@ -70,6 +70,8 @@ under the UI command that wraps it (a no-op error); the UI command now wins.
|
||||
|
||||
**Grid thumbnail size (KEYC-COMPARE):** Classic's `=` and `-` increase and decrease the Grid thumbnail size (same keys on macOS and Windows; `+` also works for the larger size here, as Shift+`=` or the keypad). They step the bottom-bar slider by 30 pt inside its 90–480 pt range, in Photo Grid, Square Grid and People only; Detail, Compare, Survey and Reference ignore them, and ⌘= / ⌘− stay Zoom In / Out. See [library shortcuts](library-shortcuts.md).
|
||||
|
||||
**Add Keywords key (KEYC-METADATA):** `⌘K` (`Ctrl+K` on Windows and Linux) is Add Keywords (`panel.addKeywords`): it shows the Keywords panel, opens its Keywording section when that is folded shut, and puts the cursor in the Add keyword box; pressed again it leaves the panel open. With no photo selected the panel says "Select photos to give them keywords." and the key does not move the cursor. The shortcut list names the key only; what the key opens is LightCraft's choice. Covered by `crates/ui-egui/src/tests_keywording.rs`.
|
||||
|
||||
**Library navigation keys (KEYC-COMPARE):** in Photo Grid and Square Grid, `Home` / `End` make the first / last photo of the view the active, selected one, and `Shift+Left` / `Shift+Right` add the previous / next photo of the view to the selection (the added photo becomes active; the keys never remove a photo from the selection, and do nothing at either end of the view). They wait in the other views, in the full-screen preview, while a text field or a dialog has the keyboard, and when you gave the key to a command; they are listed under Fixed keys in Help → Keyboard Shortcuts. `Cmd+O` (`Ctrl+O` on Windows and Linux) runs File → Open Library… ; View → Visualize HDR has no default key (`Shift+H` cycles the Tool Overlay, issue #224; `Cmd+Shift+H` stays the Histogram). Covered by `crates/ui-egui/src/tests_keymap.rs`; the macOS native menu path for `Cmd+O` is not exercised by the headless tests.
|
||||
|
||||
**Still missing / broken:**
|
||||
@@ -148,6 +150,7 @@ establish OS keyboard delivery or cross-platform acceptance.
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-24 | minor | KEYC-METADATA: ⌘K / Ctrl+K (Add Keywords) shows the Keywords panel with the cursor in its Add keyword box |
|
||||
| 2026-10-15 | patch | Context menus: a right-click elsewhere on the same widget while its menu is open moves the menu to the pointer; before it flashed at the new spot and closed (issue #1877); every site uses `widgets::context_menu`; 70% unchanged |
|
||||
| 2026-10-23 | patch | KEYC-RATING: ⌘L / Ctrl+L (Library ▸ Enable Filters) switches the filter off and on, restoring it as it was |
|
||||
| 2026-10-15 | patch | KEYC-RATING: `\` shows / hides the Filter Bar in Photo Grid and Square Grid (Show Original in Detail); ⌘L is the filter-bar key left |
|
||||
|
||||
Reference in New Issue
Block a user