From 81fb157b39a6579cf42f47979c5048ba01f1a782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C4=B1l=20Akp=C4=B1nar?= <4ni1ak@gmail.com> Date: Thu, 17 Sep 2026 06:33:53 +0300 Subject: [PATCH 1/2] feat(gui): add custom shortcut/application editors to the mouse picker The regular per-button picker (Back/Forward and every other mouse button) could only select from the fixed action catalog -- OpenApplication and CustomShortcut are both real Action variants with agent-side support, but the only place with an editor for them was the Action Ring's slot picker, not the plain Buttons workspace. Port the Action Ring editor's shortcut_editor/path_editor sections (features/action_ring/editor.rs) into the mouse picker's action_library, reusing the same KeyCombo/ApplicationTarget parsing and Add-button pattern -- no new locale strings, the four keys these editors need already exist for the Action Ring. MouseModelView gains two more lazily-nothing, eagerly-created InputState entities (matching how action_search is already owned there) so the same draft state survives across re-renders. Fixes #1032 --- .../src/features/mouse/inspector.rs | 102 ++++++++++++++++++ .../src/features/mouse/view.rs | 36 ++++++- 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/crates/openlogi-desktop/src/features/mouse/inspector.rs b/crates/openlogi-desktop/src/features/mouse/inspector.rs index f65e5ace9..74c91eb5a 100644 --- a/crates/openlogi-desktop/src/features/mouse/inspector.rs +++ b/crates/openlogi-desktop/src/features/mouse/inspector.rs @@ -232,6 +232,7 @@ fn button_inspector( "inspector-action", Some(&action), picker.search, + picker.view, &on_pick, pal, cx, @@ -285,6 +286,7 @@ fn inherited_gesture_inspector( "inspector-gesture-override", None, picker.search, + picker.view, &on_pick, pal, cx, @@ -348,6 +350,7 @@ fn gesture_inspector( "inspector-gesture-action", Some(¤t), picker.search, + picker.view, &on_pick, pal, cx, @@ -663,15 +666,35 @@ fn action_library( id_prefix: &'static str, current: Option<&Action>, action_search: &Entity, + view: &Entity, on_pick: &PickFn, pal: Palette, cx: &Context, ) -> impl IntoElement { let query = action_search.read(cx).value(); let rows = action_rows_matching(id_prefix, current, &query, on_pick, pal); + let (shortcut_input, application_input) = { + let view = view.read(cx); + ( + view.custom_shortcut_input.clone(), + view.custom_application_input.clone(), + ) + }; v_flex() .gap_2() .pt_1() + .child(custom_shortcut_editor( + id_prefix, + &shortcut_input, + on_pick, + pal, + )) + .child(custom_application_editor( + id_prefix, + &application_input, + on_pick, + pal, + )) .child(editor_section(tr!("actions.actions"), pal)) .child(control_input(action_search).cleanable(true)) .child( @@ -690,6 +713,85 @@ fn action_library( ) } +/// A single-field "Custom Shortcut" editor, matching the Action Ring editor's +/// `shortcut_editor` (`features/action_ring/editor.rs`) so the same custom +/// action is reachable from the plain per-button picker, not just the ring. +fn custom_shortcut_editor( + id_prefix: &'static str, + input: &Entity, + on_pick: &PickFn, + pal: Palette, +) -> impl IntoElement { + let submit_input = input.clone(); + let on_pick = on_pick.clone(); + v_flex() + .gap_1() + .child(editor_section(tr!("action_ring.custom_shortcut"), pal)) + .child( + h_flex() + .gap_2() + .child( + div() + .flex_1() + .min_w_0() + .child(control_input(input).cleanable(true)), + ) + .child( + Button::new(format!("{id_prefix}-custom-shortcut-add")) + .compact() + .label(tr!("common.add")) + .on_click(move |_, window, cx| { + let shortcut = submit_input.read(cx).value().to_string(); + if let Ok(combo) = shortcut.parse::() + { + (on_pick)(Action::CustomShortcut(combo), window, cx); + } + }), + ), + ) +} + +/// A single-field "Open Application or Folder" editor, matching the Action +/// Ring editor's `path_editor`. +fn custom_application_editor( + id_prefix: &'static str, + input: &Entity, + on_pick: &PickFn, + pal: Palette, +) -> impl IntoElement { + let submit_input = input.clone(); + let on_pick = on_pick.clone(); + v_flex() + .gap_1() + .child(editor_section( + tr!("action_ring.open_application_or_folder"), + pal, + )) + .child( + h_flex() + .gap_2() + .child( + div() + .flex_1() + .min_w_0() + .child(control_input(input).cleanable(true)), + ) + .child( + Button::new(format!("{id_prefix}-custom-application-add")) + .compact() + .label(tr!("common.add")) + .on_click(move |_, window, cx| { + let path = submit_input.read(cx).value().to_string(); + if let Ok(target) = + openlogi_core::binding::ApplicationTarget::new(path, "") + { + (on_pick)(Action::OpenApplication(target), window, cx); + } + }), + ), + ) +} + fn gesture_action( gesture_map: &BTreeMap, button: ButtonId, diff --git a/crates/openlogi-desktop/src/features/mouse/view.rs b/crates/openlogi-desktop/src/features/mouse/view.rs index a26eff94c..9546ad2fc 100644 --- a/crates/openlogi-desktop/src/features/mouse/view.rs +++ b/crates/openlogi-desktop/src/features/mouse/view.rs @@ -132,6 +132,8 @@ pub struct MouseModelView { gesture_active_dir: Option, action_picker_open: bool, action_search: Entity, + pub(super) custom_shortcut_input: Entity, + pub(super) custom_application_input: Entity, _state_obs: Subscription, } @@ -146,6 +148,14 @@ impl MouseModelView { } }) .detach(); + let custom_shortcut_input = cx.new(|cx| { + InputState::new(window, cx) + .placeholder(tr!("action_ring.shortcut_e_g_cmd_plus_shift_plus_p")) + }); + let custom_application_input = cx.new(|cx| { + InputState::new(window, cx) + .placeholder(tr!("action_ring.application_folder_path_or_url")) + }); let state = AppState::global(cx); let state_obs = cx.subscribe(&state, |_view, _, event: &StateEvent, cx| { let relevant = match event { @@ -171,6 +181,8 @@ impl MouseModelView { gesture_active_dir: None, action_picker_open: false, action_search, + custom_shortcut_input, + custom_application_input, _state_obs: state_obs, } } @@ -232,14 +244,34 @@ fn set_control_hovered( }); } -impl Render for MouseModelView { - fn render(&mut self, window: &mut Window, cx: &mut Context) -> impl IntoElement { +impl MouseModelView { + /// Re-stamp every action-picker input's placeholder after a language + /// switch, split out of `render` to keep it under clippy's line budget. + fn localize_action_picker_inputs(&self, window: &mut Window, cx: &mut Context) { crate::ui::components::localize_placeholder( &self.action_search, tr!("actions.search_actions"), window, cx, ); + crate::ui::components::localize_placeholder( + &self.custom_shortcut_input, + tr!("action_ring.shortcut_e_g_cmd_plus_shift_plus_p"), + window, + cx, + ); + crate::ui::components::localize_placeholder( + &self.custom_application_input, + tr!("action_ring.application_folder_path_or_url"), + window, + cx, + ); + } +} + +impl Render for MouseModelView { + fn render(&mut self, window: &mut Window, cx: &mut Context) -> impl IntoElement { + self.localize_action_picker_inputs(window, cx); let (empty_bindings, empty_gesture_maps) = (BTreeMap::new(), BTreeMap::new()); let MouseWorkspaceData { device_key, From 5d1d2d1829898e26aab7710c0b9ec0d3459b5ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C4=B1l=20Akp=C4=B1nar?= <4ni1ak@gmail.com> Date: Thu, 17 Sep 2026 08:43:22 +0300 Subject: [PATCH 2/2] fix(gui): reset drafts and surface invalid input in the mouse picker's custom editors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The custom shortcut/application InputStates lived for the whole MouseModelView lifetime and were never cleared, so a value typed for one button/gesture/device reappeared as a stale draft when the picker was reopened for a different target. Both Add buttons also silently ignored a parse/validation failure, leaving no indication that submission failed. - Clear both custom inputs (text and invalid state) whenever the picker opens, mirroring the existing action-search reset-on-open — every target change already force-closes the picker first, so this covers every case Greptile named. - Track a per-editor invalid flag, set on a failed parse and cleared the moment the user edits that input again; render an inline error caption while it's set. Addresses the Greptile P2 finding on #1452. --- .../src/features/mouse/inspector.rs | 60 +++++++++++++--- .../src/features/mouse/view.rs | 70 +++++++++++++++++++ crates/openlogi-ui/locales/be.toml | 1 + crates/openlogi-ui/locales/da.toml | 1 + crates/openlogi-ui/locales/de.toml | 1 + crates/openlogi-ui/locales/el.toml | 1 + crates/openlogi-ui/locales/en.toml | 1 + crates/openlogi-ui/locales/es.toml | 1 + crates/openlogi-ui/locales/fi.toml | 1 + crates/openlogi-ui/locales/fr.toml | 1 + crates/openlogi-ui/locales/it.toml | 1 + crates/openlogi-ui/locales/ja.toml | 1 + crates/openlogi-ui/locales/ko.toml | 1 + crates/openlogi-ui/locales/nb.toml | 1 + crates/openlogi-ui/locales/nl.toml | 1 + crates/openlogi-ui/locales/pl.toml | 1 + crates/openlogi-ui/locales/pt-BR.toml | 1 + crates/openlogi-ui/locales/pt-PT.toml | 1 + crates/openlogi-ui/locales/ru.toml | 1 + crates/openlogi-ui/locales/sv.toml | 1 + crates/openlogi-ui/locales/tr.toml | 1 + crates/openlogi-ui/locales/uk.toml | 1 + crates/openlogi-ui/locales/zh-CN.toml | 1 + crates/openlogi-ui/locales/zh-HK.toml | 1 + crates/openlogi-ui/locales/zh-TW.toml | 1 + 25 files changed, 142 insertions(+), 11 deletions(-) diff --git a/crates/openlogi-desktop/src/features/mouse/inspector.rs b/crates/openlogi-desktop/src/features/mouse/inspector.rs index 74c91eb5a..f4a3f66d4 100644 --- a/crates/openlogi-desktop/src/features/mouse/inspector.rs +++ b/crates/openlogi-desktop/src/features/mouse/inspector.rs @@ -656,6 +656,9 @@ fn selection_card( search.update(cx, |search, cx| search.set_value("", window, cx)); } toggle.update(cx, |view, cx| { + if opening { + view.clear_custom_action_drafts(window, cx); + } view.toggle_action_picker(); cx.notify(); }); @@ -673,11 +676,13 @@ fn action_library( ) -> impl IntoElement { let query = action_search.read(cx).value(); let rows = action_rows_matching(id_prefix, current, &query, on_pick, pal); - let (shortcut_input, application_input) = { - let view = view.read(cx); + let (shortcut_input, application_input, shortcut_invalid, application_invalid) = { + let view_ref = view.read(cx); ( - view.custom_shortcut_input.clone(), - view.custom_application_input.clone(), + view_ref.custom_shortcut_input.clone(), + view_ref.custom_application_input.clone(), + view_ref.custom_shortcut_invalid, + view_ref.custom_application_invalid, ) }; v_flex() @@ -686,12 +691,16 @@ fn action_library( .child(custom_shortcut_editor( id_prefix, &shortcut_input, + shortcut_invalid, + view, on_pick, pal, )) .child(custom_application_editor( id_prefix, &application_input, + application_invalid, + view, on_pick, pal, )) @@ -719,11 +728,14 @@ fn action_library( fn custom_shortcut_editor( id_prefix: &'static str, input: &Entity, + invalid: bool, + view: &Entity, on_pick: &PickFn, pal: Palette, ) -> impl IntoElement { let submit_input = input.clone(); let on_pick = on_pick.clone(); + let view = view.clone(); v_flex() .gap_1() .child(editor_section(tr!("action_ring.custom_shortcut"), pal)) @@ -742,13 +754,24 @@ fn custom_shortcut_editor( .label(tr!("common.add")) .on_click(move |_, window, cx| { let shortcut = submit_input.read(cx).value().to_string(); - if let Ok(combo) = shortcut.parse::() - { - (on_pick)(Action::CustomShortcut(combo), window, cx); + match shortcut.parse::() { + Ok(combo) => (on_pick)(Action::CustomShortcut(combo), window, cx), + Err(_) => view.update(cx, |view, cx| { + view.custom_shortcut_invalid = true; + cx.notify(); + }), } }), ), ) + .when(invalid, |editor| { + editor.child( + div() + .text_caption() + .text_color(rgb(0x00ef_4444)) + .child(tr!("action_ring.custom_action_invalid_input")), + ) + }) } /// A single-field "Open Application or Folder" editor, matching the Action @@ -756,11 +779,14 @@ fn custom_shortcut_editor( fn custom_application_editor( id_prefix: &'static str, input: &Entity, + invalid: bool, + view: &Entity, on_pick: &PickFn, pal: Palette, ) -> impl IntoElement { let submit_input = input.clone(); let on_pick = on_pick.clone(); + let view = view.clone(); v_flex() .gap_1() .child(editor_section( @@ -782,14 +808,26 @@ fn custom_application_editor( .label(tr!("common.add")) .on_click(move |_, window, cx| { let path = submit_input.read(cx).value().to_string(); - if let Ok(target) = - openlogi_core::binding::ApplicationTarget::new(path, "") - { - (on_pick)(Action::OpenApplication(target), window, cx); + match openlogi_core::binding::ApplicationTarget::new(path, "") { + Ok(target) => { + (on_pick)(Action::OpenApplication(target), window, cx); + } + Err(_) => view.update(cx, |view, cx| { + view.custom_application_invalid = true; + cx.notify(); + }), } }), ), ) + .when(invalid, |editor| { + editor.child( + div() + .text_caption() + .text_color(rgb(0x00ef_4444)) + .child(tr!("action_ring.custom_action_invalid_input")), + ) + }) } fn gesture_action( diff --git a/crates/openlogi-desktop/src/features/mouse/view.rs b/crates/openlogi-desktop/src/features/mouse/view.rs index 9546ad2fc..4deccb344 100644 --- a/crates/openlogi-desktop/src/features/mouse/view.rs +++ b/crates/openlogi-desktop/src/features/mouse/view.rs @@ -134,6 +134,10 @@ pub struct MouseModelView { action_search: Entity, pub(super) custom_shortcut_input: Entity, pub(super) custom_application_input: Entity, + /// Whether the last "Add" attempt on the corresponding custom editor + /// failed to parse, so its caption can show an inline error. + pub(super) custom_shortcut_invalid: bool, + pub(super) custom_application_invalid: bool, _state_obs: Subscription, } @@ -152,10 +156,27 @@ impl MouseModelView { InputState::new(window, cx) .placeholder(tr!("action_ring.shortcut_e_g_cmd_plus_shift_plus_p")) }); + cx.subscribe(&custom_shortcut_input, |view, _, event: &InputEvent, cx| { + if matches!(event, InputEvent::Change) { + view.custom_shortcut_invalid = false; + cx.notify(); + } + }) + .detach(); let custom_application_input = cx.new(|cx| { InputState::new(window, cx) .placeholder(tr!("action_ring.application_folder_path_or_url")) }); + cx.subscribe( + &custom_application_input, + |view, _, event: &InputEvent, cx| { + if matches!(event, InputEvent::Change) { + view.custom_application_invalid = false; + cx.notify(); + } + }, + ) + .detach(); let state = AppState::global(cx); let state_obs = cx.subscribe(&state, |_view, _, event: &StateEvent, cx| { let relevant = match event { @@ -183,10 +204,28 @@ impl MouseModelView { action_search, custom_shortcut_input, custom_application_input, + custom_shortcut_invalid: false, + custom_application_invalid: false, _state_obs: state_obs, } } + /// Clear both custom-action drafts (text and any invalid state) — called + /// whenever the picker opens for a new target, so a shortcut or + /// application typed for one button doesn't reappear for another. + pub(super) fn clear_custom_action_drafts( + &mut self, + window: &mut Window, + cx: &mut Context, + ) { + self.custom_shortcut_input + .update(cx, |input, cx| input.set_value("", window, cx)); + self.custom_application_input + .update(cx, |input, cx| input.set_value("", window, cx)); + self.custom_shortcut_invalid = false; + self.custom_application_invalid = false; + } + /// Set (or clear, with `None`) the activated gesture direction. Callers must /// `cx.notify()` to re-render. pub(crate) fn set_gesture_selected_dir(&mut self, dir: Option) { @@ -1102,6 +1141,37 @@ mod tests { cx.run_until_parked(); } + #[gpui::test] + fn clearing_custom_action_drafts_resets_text_and_invalid_state(cx: &mut TestAppContext) { + cx.update(gpui_component::init); + install_app_state(cx); + let (view, cx) = cx.add_window_view(MouseModelView::new); + cx.run_until_parked(); + + cx.update(|window, cx| { + view.update(cx, |view, cx| { + view.custom_shortcut_input + .update(cx, |input, cx| input.set_value("Cmd+K", window, cx)); + view.custom_application_input + .update(cx, |input, cx| input.set_value("/bin/true", window, cx)); + view.custom_shortcut_invalid = true; + view.custom_application_invalid = true; + + view.clear_custom_action_drafts(window, cx); + }); + }); + + view.update(cx, |view, cx| { + assert_eq!(view.custom_shortcut_input.read(cx).value(), ""); + assert_eq!(view.custom_application_input.read(cx).value(), ""); + assert!(!view.custom_shortcut_invalid); + assert!(!view.custom_application_invalid); + }); + drop(view); + cx.update(|window, _| window.remove_window()); + cx.run_until_parked(); + } + #[test] fn active_thumbwheel_directions_highlight_the_paired_control() { assert_eq!( diff --git a/crates/openlogi-ui/locales/be.toml b/crates/openlogi-ui/locales/be.toml index 7f955b051..4fde91ff5 100644 --- a/crates/openlogi-ui/locales/be.toml +++ b/crates/openlogi-ui/locales/be.toml @@ -538,6 +538,7 @@ custom_shortcut = "Уласнае спалучэнне клавіш" shortcut_e_g_cmd_plus_shift_plus_p = "Спалучэнне, напр. Cmd+Shift+P" application_folder_path_or_url = "Праграма, шлях да папкі або URL" open_application_or_folder = "Адкрыць праграму або папку" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Рэдактар недаступны" diff --git a/crates/openlogi-ui/locales/da.toml b/crates/openlogi-ui/locales/da.toml index 5036a25d8..70d006928 100644 --- a/crates/openlogi-ui/locales/da.toml +++ b/crates/openlogi-ui/locales/da.toml @@ -538,6 +538,7 @@ custom_shortcut = "Brugerdefineret genvej" shortcut_e_g_cmd_plus_shift_plus_p = "Genvej, f.eks. Cmd+Shift+P" application_folder_path_or_url = "Program, mappesti eller URL" open_application_or_folder = "Åbn program eller mappe" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Editor ikke tilgængelig" diff --git a/crates/openlogi-ui/locales/de.toml b/crates/openlogi-ui/locales/de.toml index 6b7529841..d9c9801e1 100644 --- a/crates/openlogi-ui/locales/de.toml +++ b/crates/openlogi-ui/locales/de.toml @@ -538,6 +538,7 @@ custom_shortcut = "Benutzerdefinierter Kurzbefehl" shortcut_e_g_cmd_plus_shift_plus_p = "Tastenkürzel, z. B. Cmd+Shift+P" application_folder_path_or_url = "Anwendung, Ordnerpfad oder URL" open_application_or_folder = "Anwendung oder Ordner öffnen" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Editor nicht verfügbar" diff --git a/crates/openlogi-ui/locales/el.toml b/crates/openlogi-ui/locales/el.toml index fd2ae7524..d9e81bd61 100644 --- a/crates/openlogi-ui/locales/el.toml +++ b/crates/openlogi-ui/locales/el.toml @@ -538,6 +538,7 @@ custom_shortcut = "Προσαρμοσμένη συντόμευση" shortcut_e_g_cmd_plus_shift_plus_p = "Συντόμευση, π.χ. Cmd+Shift+P" application_folder_path_or_url = "Εφαρμογή, διαδρομή φακέλου ή URL" open_application_or_folder = "Άνοιγμα εφαρμογής ή φακέλου" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Ο επεξεργαστής δεν είναι διαθέσιμος" diff --git a/crates/openlogi-ui/locales/en.toml b/crates/openlogi-ui/locales/en.toml index 90ab3355a..81ebd75b4 100644 --- a/crates/openlogi-ui/locales/en.toml +++ b/crates/openlogi-ui/locales/en.toml @@ -538,6 +538,7 @@ custom_shortcut = "Custom shortcut" shortcut_e_g_cmd_plus_shift_plus_p = "Shortcut, e.g., Cmd+Shift+P" application_folder_path_or_url = "Application or folder path, or URL" open_application_or_folder = "Open application or folder" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Editor unavailable" diff --git a/crates/openlogi-ui/locales/es.toml b/crates/openlogi-ui/locales/es.toml index 19a724ce1..4d530f4ad 100644 --- a/crates/openlogi-ui/locales/es.toml +++ b/crates/openlogi-ui/locales/es.toml @@ -538,6 +538,7 @@ custom_shortcut = "Atajo personalizado" shortcut_e_g_cmd_plus_shift_plus_p = "Atajo, p. ej. Cmd+Shift+P" application_folder_path_or_url = "Ruta de aplicación o carpeta, o URL" open_application_or_folder = "Abrir aplicación o carpeta" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Editor no disponible" diff --git a/crates/openlogi-ui/locales/fi.toml b/crates/openlogi-ui/locales/fi.toml index 69eb77e97..ba9061d75 100644 --- a/crates/openlogi-ui/locales/fi.toml +++ b/crates/openlogi-ui/locales/fi.toml @@ -538,6 +538,7 @@ custom_shortcut = "Mukautettu pikanäppäin" shortcut_e_g_cmd_plus_shift_plus_p = "Pikanäppäin, esim. Cmd+Shift+P" application_folder_path_or_url = "Sovellus, kansiopolku tai URL" open_application_or_folder = "Avaa sovellus tai kansio" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Muokkain ei ole käytettävissä" diff --git a/crates/openlogi-ui/locales/fr.toml b/crates/openlogi-ui/locales/fr.toml index 14cf1be78..426f9a6b7 100644 --- a/crates/openlogi-ui/locales/fr.toml +++ b/crates/openlogi-ui/locales/fr.toml @@ -538,6 +538,7 @@ custom_shortcut = "Raccourci personnalisé" shortcut_e_g_cmd_plus_shift_plus_p = "Raccourci, p. ex. Cmd+Shift+P" application_folder_path_or_url = "Application, chemin de dossier ou URL" open_application_or_folder = "Ouvrir une application ou un dossier" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Éditeur indisponible" diff --git a/crates/openlogi-ui/locales/it.toml b/crates/openlogi-ui/locales/it.toml index 072eb24c3..29a52b1ae 100644 --- a/crates/openlogi-ui/locales/it.toml +++ b/crates/openlogi-ui/locales/it.toml @@ -538,6 +538,7 @@ custom_shortcut = "Scorciatoia personalizzata" shortcut_e_g_cmd_plus_shift_plus_p = "Scorciatoia, ad es. Cmd+Shift+P" application_folder_path_or_url = "Applicazione, percorso cartella o URL" open_application_or_folder = "Apri applicazione o cartella" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Editor non disponibile" diff --git a/crates/openlogi-ui/locales/ja.toml b/crates/openlogi-ui/locales/ja.toml index ad7a389d6..08679850f 100644 --- a/crates/openlogi-ui/locales/ja.toml +++ b/crates/openlogi-ui/locales/ja.toml @@ -538,6 +538,7 @@ custom_shortcut = "カスタムショートカット" shortcut_e_g_cmd_plus_shift_plus_p = "ショートカット(例:Cmd+Shift+P)" application_folder_path_or_url = "アプリ、フォルダのパス、またはURL" open_application_or_folder = "アプリまたはフォルダを開く" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "エディターを利用できません" diff --git a/crates/openlogi-ui/locales/ko.toml b/crates/openlogi-ui/locales/ko.toml index bdef40e52..1e8fc3946 100644 --- a/crates/openlogi-ui/locales/ko.toml +++ b/crates/openlogi-ui/locales/ko.toml @@ -538,6 +538,7 @@ custom_shortcut = "사용자 지정 단축키" shortcut_e_g_cmd_plus_shift_plus_p = "단축키(예: Cmd+Shift+P)" application_folder_path_or_url = "앱, 폴더 경로 또는 URL" open_application_or_folder = "앱 또는 폴더 열기" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "편집기를 사용할 수 없음" diff --git a/crates/openlogi-ui/locales/nb.toml b/crates/openlogi-ui/locales/nb.toml index 908dedbac..a8e05b425 100644 --- a/crates/openlogi-ui/locales/nb.toml +++ b/crates/openlogi-ui/locales/nb.toml @@ -538,6 +538,7 @@ custom_shortcut = "Egendefinert snarvei" shortcut_e_g_cmd_plus_shift_plus_p = "Snarvei, f.eks. Cmd+Shift+P" application_folder_path_or_url = "Program, mappebane eller URL" open_application_or_folder = "Åpne program eller mappe" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Redigering er utilgjengelig" diff --git a/crates/openlogi-ui/locales/nl.toml b/crates/openlogi-ui/locales/nl.toml index 9ba5a24f1..b72712dbb 100644 --- a/crates/openlogi-ui/locales/nl.toml +++ b/crates/openlogi-ui/locales/nl.toml @@ -538,6 +538,7 @@ custom_shortcut = "Aangepaste sneltoets" shortcut_e_g_cmd_plus_shift_plus_p = "Sneltoets, bijv. Cmd+Shift+P" application_folder_path_or_url = "Toepassing, mappad of URL" open_application_or_folder = "Toepassing of map openen" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Editor niet beschikbaar" diff --git a/crates/openlogi-ui/locales/pl.toml b/crates/openlogi-ui/locales/pl.toml index 68887f1bd..1cf8f7769 100644 --- a/crates/openlogi-ui/locales/pl.toml +++ b/crates/openlogi-ui/locales/pl.toml @@ -538,6 +538,7 @@ custom_shortcut = "Własny skrót" shortcut_e_g_cmd_plus_shift_plus_p = "Skrót, np. Cmd+Shift+P" application_folder_path_or_url = "Aplikacja, ścieżka folderu lub URL" open_application_or_folder = "Otwórz aplikację lub folder" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Edytor niedostępny" diff --git a/crates/openlogi-ui/locales/pt-BR.toml b/crates/openlogi-ui/locales/pt-BR.toml index 44c6d372d..47fffc090 100644 --- a/crates/openlogi-ui/locales/pt-BR.toml +++ b/crates/openlogi-ui/locales/pt-BR.toml @@ -538,6 +538,7 @@ custom_shortcut = "Atalho personalizado" shortcut_e_g_cmd_plus_shift_plus_p = "Atalho, por exemplo, Cmd+Shift+P" application_folder_path_or_url = "Aplicativo, caminho de pasta ou URL" open_application_or_folder = "Abrir aplicativo ou pasta" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Editor indisponível" diff --git a/crates/openlogi-ui/locales/pt-PT.toml b/crates/openlogi-ui/locales/pt-PT.toml index 6142fedda..d3ed47599 100644 --- a/crates/openlogi-ui/locales/pt-PT.toml +++ b/crates/openlogi-ui/locales/pt-PT.toml @@ -538,6 +538,7 @@ custom_shortcut = "Atalho personalizado" shortcut_e_g_cmd_plus_shift_plus_p = "Atalho, por exemplo, Cmd+Shift+P" application_folder_path_or_url = "Aplicação, caminho de pasta ou URL" open_application_or_folder = "Abrir aplicação ou pasta" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Editor indisponível" diff --git a/crates/openlogi-ui/locales/ru.toml b/crates/openlogi-ui/locales/ru.toml index 09098438b..b2252c86d 100644 --- a/crates/openlogi-ui/locales/ru.toml +++ b/crates/openlogi-ui/locales/ru.toml @@ -538,6 +538,7 @@ custom_shortcut = "Пользовательское сочетание клав shortcut_e_g_cmd_plus_shift_plus_p = "Сочетание, например Cmd+Shift+P" application_folder_path_or_url = "Приложение, путь к папке или URL" open_application_or_folder = "Открыть приложение или папку" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Редактор недоступен" diff --git a/crates/openlogi-ui/locales/sv.toml b/crates/openlogi-ui/locales/sv.toml index 96ee142aa..79a388329 100644 --- a/crates/openlogi-ui/locales/sv.toml +++ b/crates/openlogi-ui/locales/sv.toml @@ -538,6 +538,7 @@ custom_shortcut = "Anpassat kortkommando" shortcut_e_g_cmd_plus_shift_plus_p = "Kortkommando, t.ex. Cmd+Shift+P" application_folder_path_or_url = "Program, mappsökväg eller URL" open_application_or_folder = "Öppna program eller mapp" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Redigering är inte tillgänglig" diff --git a/crates/openlogi-ui/locales/tr.toml b/crates/openlogi-ui/locales/tr.toml index 841613915..841556216 100644 --- a/crates/openlogi-ui/locales/tr.toml +++ b/crates/openlogi-ui/locales/tr.toml @@ -538,6 +538,7 @@ custom_shortcut = "Özel kısayol" shortcut_e_g_cmd_plus_shift_plus_p = "Kısayol, örn. Cmd+Shift+P" application_folder_path_or_url = "Uygulama, klasör yolu veya URL" open_application_or_folder = "Uygulama veya klasör aç" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Düzenleyici kullanılamıyor" diff --git a/crates/openlogi-ui/locales/uk.toml b/crates/openlogi-ui/locales/uk.toml index 948aa8be0..04cc636d5 100644 --- a/crates/openlogi-ui/locales/uk.toml +++ b/crates/openlogi-ui/locales/uk.toml @@ -538,6 +538,7 @@ custom_shortcut = "Власне сполучення клавіш" shortcut_e_g_cmd_plus_shift_plus_p = "Сполучення клавіш, напр. Cmd+Shift+P" application_folder_path_or_url = "Програма, шлях до папки або URL" open_application_or_folder = "Відкрити програму або папку" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "Редактор недоступний" diff --git a/crates/openlogi-ui/locales/zh-CN.toml b/crates/openlogi-ui/locales/zh-CN.toml index 5e09567be..eb464079f 100644 --- a/crates/openlogi-ui/locales/zh-CN.toml +++ b/crates/openlogi-ui/locales/zh-CN.toml @@ -538,6 +538,7 @@ custom_shortcut = "自定义快捷键" shortcut_e_g_cmd_plus_shift_plus_p = "快捷键,例如 Cmd+Shift+P" application_folder_path_or_url = "应用、文件夹路径或 URL" open_application_or_folder = "打开应用或文件夹" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "编辑器不可用" diff --git a/crates/openlogi-ui/locales/zh-HK.toml b/crates/openlogi-ui/locales/zh-HK.toml index d7e59914e..ff78c4975 100644 --- a/crates/openlogi-ui/locales/zh-HK.toml +++ b/crates/openlogi-ui/locales/zh-HK.toml @@ -538,6 +538,7 @@ custom_shortcut = "自訂快速鍵" shortcut_e_g_cmd_plus_shift_plus_p = "快速鍵,例如 Cmd+Shift+P" application_folder_path_or_url = "應用程式、資料夾路徑或 URL" open_application_or_folder = "開啟應用程式或資料夾" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "編輯器無法使用" diff --git a/crates/openlogi-ui/locales/zh-TW.toml b/crates/openlogi-ui/locales/zh-TW.toml index 388b40790..a4990f719 100644 --- a/crates/openlogi-ui/locales/zh-TW.toml +++ b/crates/openlogi-ui/locales/zh-TW.toml @@ -538,6 +538,7 @@ custom_shortcut = "自訂快速鍵" shortcut_e_g_cmd_plus_shift_plus_p = "快速鍵,例如 Cmd+Shift+P" application_folder_path_or_url = "應用程式、資料夾路徑或 URL" open_application_or_folder = "開啟應用程式或資料夾" +custom_action_invalid_input = "Couldn't recognize that input." [keyboard] editor_unavailable = "編輯器無法使用"