diff --git a/doc/apps.md b/doc/apps.md index 17ff8834ce..434cfbddf9 100644 --- a/doc/apps.md +++ b/doc/apps.md @@ -132,7 +132,7 @@ TerminalClipboardWipe | | Reset clipboard. TerminalSelectionMode | x | Set terminal text selection mode.
The `data=` attribute can have the following values `none`, `text`, `ansi`, `rich`, `html`, `protected`. TerminalSelectionCopy | | Сopy selection to clipboard. TerminalSelectionRect | x | Set linear(false) or rectangular(true) selection form using boolean value. -TerminalSelectionClear | | Deselect a selection. +TerminalSelectionCancel | | Deselect a selection. TerminalSelectionOneShot | | One-shot toggle to copy text while mouse tracking is active. Keep selection if `Ctrl` key is pressed.
The `data=` attribute can have the following values `none`, `text`, `ansi`, `rich`, `html`, `protected`. TerminalViewportCopy | | Сopy viewport to clipboard. TerminalViewportPageUp | x | Scroll one page up. @@ -196,7 +196,7 @@ TerminalQuit | | TerminalRestart | | | Terminate runnning console apps and restart current session. TerminalSwitchCopyMode | x | | Set terminal text selection mode. The argument can be the one of the following values 0:'none', 1:'text', 2:'ansi', 3:'rich', 4:'html', 5:'protected'. TerminalSelectionCopy | | | Сopy selection to clipboard. -TerminalSelectionClear | | `Esc` | Deselect a selection. +TerminalSelectionCancel | | `Esc` | Deselect a selection. TerminalSelectionOneShot | | | One-shot toggle to copy text while mouse tracking is active. Keep selection if `Ctrl` key is pressed.
The `data=` attribute can have the following values `none`, `text`, `ansi`, `rich`, `html`, `protected`. #### Terminal configuration example @@ -204,7 +204,7 @@ TerminalSelectionOneShot | | - + " Previous match \n" @@ -214,7 +214,7 @@ TerminalSelectionOneShot | | " Left+RightClick to clear clipboard " - + \e[m"/> " Next match \n" @@ -224,14 +224,14 @@ TerminalSelectionOneShot | | " Left+RightClick to clear clipboard " - + " Wrapping text lines on/off \n" " - applied to selection if it is " - + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - - - - - - - + + + + + + + + + - + " One-shot toggle to copy as HTML \n" " while mouse tracking is active. " - + " One-shot toggle to copy as Text \n" " while mouse tracking is active. " - + @@ -309,35 +309,35 @@ TerminalSelectionOneShot | | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/settings.md b/doc/settings.md index 480003f8fa..f91a24a47c 100644 --- a/doc/settings.md +++ b/doc/settings.md @@ -287,6 +287,87 @@ The following configuration items produce the same final result: ``` +### Key bindings + +In vtm there are several levels of key combination processing. Each level has its own set of key bindings. Keys processed at the previous level usually do not get to the next level. + +Level | Config section | Description +-----------------------|------------------------------|------------ +Native GUI window | `` | Native GUI window management key bindings. +Desktop environment | `` | Taskbar and window management key bindings. +Builtin terminal | `` | Terminal emulator specific key bindings. +Application `app_name` | `` | Application specific key bindings. + +#### Syntax + +The syntax for defining key combination bindings is: + +```xml + +``` + +Tag | Value +---------|-------- +`key` | The text string containing the key combination. +`action` | The action name. + +The required key combination sequence can be generated on the Info page, accessible by clicking on the label in the lower right corner of the vtm desktop. + +#### Interpretation + +Configuration record | Interpretation +-------------------------------------------|----------------- +`` | Append existing bindings using an indirect reference (the `NameOfAction` variable without quotes). +`` | Append existing bindings with the directly specified command "NameOfAction". +`` | Remove all existing bindings for the specified key combination "Key+Chord". +`` | Suppress the key combination "Key+Chord". +`` | Do nothing. + +### Available actions + +Action | Default key combination | Level | Description +-------------------------------|--------------------------|---------------------|------------ +`IncreaseCellHeight` | `CapsLock+UpArrow` | Native GUI window | Increase the text cell height by one pixel. +`DecreaseCellHeight` | `CapsLock+DownArrow` | Native GUI window | Decrease the text cell height by one pixel. +`ResetCellHeight` | `Ctrl+Key0` | Native GUI window | Reset text cell height. +`ToggleFullscreenMode` | `Alt+Enter` | Native GUI window | Toggle fullscreen mode. +`ToggleAntialiasingMode` | `Ctrl+CapsLock` | Native GUI window | Toggle text antialiasing mode. +`CloseGuiWindow` | `Home+End`, `End+Home` | Native GUI window | Close GUI window. +`RollFontsForward` | `Ctrl+Shift+F11` | Native GUI window | Roll font list forward. +`RollFontsBackward` | `Ctrl+Shift+F12` | Native GUI window | Roll font list backward. +`FocusPrevWindow` | `Ctrl+PageUp` | Desktop environment | Switch focus to the next desktop window. +`FocusNextWindow` | `Ctrl+PageDown` | Desktop environment | Switch focus to the previous desktop window. +`Disconnect` | `Shift+F7` | Desktop environment | Disconnect from the desktop. +`TryToQuit` | `F10` | Desktop environment | Shut down the desktop server if no applications are running. +`TerminalFindNext` | `Alt+RightArrow` | Builtin terminal | Highlight next match of selected text fragment. Clipboard content is used if no active selection. +`TerminalFindPrev` | `Alt+LeftArrow` | Builtin terminal | Highlight previous match of selected text fragment. Clipboard content is used if no active selection. +`TerminalViewportOnePageUp` | `Shift+Ctrl+PageUp` | Builtin terminal | Scroll one page up. +`TerminalViewportOnePageDown` | `Shift+Ctrl+PageDown` | Builtin terminal | Scroll one page down. +`TerminalViewportOnePageLeft` | `Shift+Alt+LeftArrow` | Builtin terminal | Scroll one page to the left. +`TerminalViewportOnePageRight` | `Shift+Alt+RightArrow` | Builtin terminal | Scroll one page to the right. +`TerminalViewportOneCharUp` | `Shift+Ctrl+UpArrow` | Builtin terminal | Scroll one line up. +`TerminalViewportOneCharDown` | `Shift+Ctrl+DownArrow` | Builtin terminal | Scroll one line down. +`TerminalViewportOneCharLeft` | `Shift+Ctrl+LeftArrow` | Builtin terminal | Scroll one cell to the left. +`TerminalViewportOneCharRight` | `Shift+Ctrl+RightArrow` | Builtin terminal | Scroll one cell to the right. +`TerminalViewportTop` | `Shift+Ctrl+Home` | Builtin terminal | Scroll to the scrollback top. +`TerminalViewportEnd` | `Shift+Ctrl+End` | Builtin terminal | Scroll to the scrollback bottom (reset viewport position). +`TerminalViewportCopy` | | Builtin terminal | Сopy viewport to clipboard. +`TerminalClipboardPaste` | | Builtin terminal | Paste from clipboard. +`TerminalClipboardWipe` | | Builtin terminal | Reset clipboard. +`TerminalUndo` | | Builtin terminal | (Win32 Cooked/ENABLE_LINE_INPUT mode only) Discard the last input. +`TerminalRedo` | | Builtin terminal | (Win32 Cooked/ENABLE_LINE_INPUT mode only) Discard the last Undo command. +`TerminalToggleCwdSync` | | Builtin terminal | Toggle the current working directory sync mode. +`TerminalToggleWrapMode` | | Builtin terminal | Toggle terminal scrollback lines wrapping mode. Applied to the active selection if it is. +`TerminalToggleSelectionMode` | | Builtin terminal | Toggle between linear and rectangular selection form. +`TerminalToggleFullscreen` | | Builtin terminal | Toggle fullscreen mode. +`TerminalToggleStdioLog` | | Builtin terminal | Stdin/stdout log toggle. +`TerminalQuit` | | Builtin terminal | Terminate runnning console apps and close terminal. +`TerminalRestart` | | Builtin terminal | Terminate runnning console apps and restart current session. +`TerminalSwitchCopyMode` | | Builtin terminal | Switch terminal text selection copy mode. +`TerminalSelectionCopy` | | Builtin terminal | Сopy selection to clipboard. +`TerminalSelectionCancel` | `Esc` | Builtin terminal | Deselect a selection. +`TerminalSelectionOneShot` | | Builtin terminal | One-shot toggle to copy text while mouse tracking is active. Keep selection if 'Ctrl' key is pressed. + ### DirectVT configuration payload received from the parent process The value of the `cfg` menu item attribute (or a whole `` subsection) will be passed to the child dtvt-aware application on launch. @@ -349,6 +430,17 @@ Notes + + + + + + + + + + + @@ -470,10 +562,6 @@ Notes - - - - @@ -489,7 +577,7 @@ Notes - + " Previous match \n" @@ -499,7 +587,7 @@ Notes " Left+RightClick to clear clipboard " - + \e[m"/> " Next match \n" @@ -509,14 +597,14 @@ Notes " Left+RightClick to clear clipboard " - + " Wrapping text lines on/off \n" " Applied to selection if it is " - + - + @@ -558,14 +646,14 @@ Notes - - - + + + - + @@ -574,10 +662,10 @@ Notes - - - - + + + + @@ -627,7 +715,7 @@ Notes - + " Previous match \n" @@ -637,7 +725,7 @@ Notes " Left+RightClick to clear clipboard " - + \e[m"/> " Next match \n" @@ -647,14 +735,14 @@ Notes " Left+RightClick to clear clipboard " - + " Wrapping text lines on/off \n" " Applied to selection if it is " - + - + - + - - - + + + @@ -691,6 +779,36 @@ Notes close: Always close. restart: Restart session. retry: Restart session if exit code != 0. --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/netxs/apps/term.hpp b/src/netxs/apps/term.hpp index 5a1ba76744..f5c6535805 100644 --- a/src/netxs/apps/term.hpp +++ b/src/netxs/apps/term.hpp @@ -221,7 +221,7 @@ namespace netxs::app::terminal X(TerminalSelectionCopy ) /* */ \ X(TerminalSelectionMode ) /* */ \ X(TerminalSelectionRect ) /* Linear/Rectangular */ \ - X(TerminalSelectionClear ) /* */ \ + X(TerminalSelectionCancel ) /* */ \ X(TerminalSelectionOneShot ) /* One-shot toggle to copy text while mouse tracking is active */ \ X(TerminalViewportPageUp ) /* */ \ X(TerminalViewportPageDown ) /* */ \ @@ -427,7 +427,7 @@ namespace netxs::app::terminal _update_to(boss, item, selbox); }; } - static void TerminalSelectionClear(ui::item& boss, menu::item& item) + static void TerminalSelectionCancel(ui::item& boss, menu::item& item) { _submit(boss, item, [](auto& boss, auto& /*item*/, auto& /*gear*/) { diff --git a/src/netxs/desktopio/application.hpp b/src/netxs/desktopio/application.hpp index f7ecb75636..67f665a8f4 100644 --- a/src/netxs/desktopio/application.hpp +++ b/src/netxs/desktopio/application.hpp @@ -24,7 +24,7 @@ namespace netxs::app namespace netxs::app::shared { - static const auto version = "v0.9.99.38"; + static const auto version = "v0.9.99.39"; static const auto repository = "https://github.com/directvt/vtm"; static const auto usr_config = "~/.config/vtm/settings.xml"s; static const auto sys_config = "/etc/vtm/settings.xml"s; diff --git a/src/netxs/desktopio/console.hpp b/src/netxs/desktopio/console.hpp index 66421bbd0c..54638b7761 100644 --- a/src/netxs/desktopio/console.hpp +++ b/src/netxs/desktopio/console.hpp @@ -1270,7 +1270,7 @@ namespace netxs::ui LISTEN(tier::preview, hids::events::keybd::key::any, gear, tokens) { //todo unify - //todo key + //todo key action="DebugOverlayToggle" if (gear.keybd::cluster == props.debug_toggle) { debug ? debug.stop() diff --git a/src/netxs/desktopio/controls.hpp b/src/netxs/desktopio/controls.hpp index e6c999a269..f7f881ca32 100644 --- a/src/netxs/desktopio/controls.hpp +++ b/src/netxs/desktopio/controls.hpp @@ -1827,26 +1827,47 @@ namespace netxs::ui std::unordered_map, qiew::hash, qiew::equal> handlers_preview; std::unordered_map, qiew::hash, qiew::equal> handlers_release; std::unordered_map api_map; - std::vector chord_handlers; + auto _get_chords(qiew chord_str) + { + auto chords = input::key::kmap::chord_list(chord_str); + if (chords.size()) + { + return std::optional{ chords }; + } + else + { + log("%%Unknown key chord: '%chord%'", prompt::user, chord_str); + return std::optional{}; + } + } template auto _set(qiew chord_str, sptr handler_ptr) { auto& handlers = Tier == tier::release ? handlers_release : handlers_preview; - auto chords = input::key::kmap::chord_list(chord_str); - if (chords.size()) + if (auto chords = _get_chords(chord_str)) { - for (auto& chord : chords) + for (auto& chord : chords.value()) { handlers[chord].push_back(handler_ptr); } return true; } - else + else return faux; + } + template + auto _reset(qiew chord_str) + { + auto& handlers = Tier == tier::release ? handlers_release : handlers_preview; + if (auto chords = _get_chords(chord_str)) { - log("%%Unknown key chord: '%chord%'", prompt::user, chord_str); - return faux; + for (auto& chord : chords.value()) + { + handlers[chord].clear(); + } + return true; } + else return faux; } template void _dispatch(hids& gear, qiew chord) @@ -1892,37 +1913,50 @@ namespace netxs::ui if (!gear.handled) _dispatch(gear, gear.scchord); } }; + proc("Drop", [](hids& gear){ gear.set_handled(); }); } - auto proc(qiew name, func proc) + void proc(qiew name, func proc) { api_map[name] = ptr::shared(std::move(proc)); } - //template - //auto bind(qiew chord_str, func handler, Args&&... chords_handlers) - //{ - // auto handler_ptr = ptr::shared(std::move(handler)); - // if (_set(chord_str, handler_ptr)) chord_handlers.push_back(handler_ptr); - // if constexpr (sizeof...(Args)) bind(std::forward(chords_handlers)...); - //} template auto bind(qiew chord_str, qiew proc_name) { - if (auto iter = api_map.find(proc_name); iter != api_map.end()) + if (!chord_str) return; + if (proc_name) { - if (_set(chord_str, iter->second)) + if (auto iter = api_map.find(proc_name); iter != api_map.end()) { - //chord_handlers.push_back(iter->second); + _set(chord_str, iter->second); } + else log("%%Action '%proc%' not found", prompt::user, proc_name); + } + else + { + _reset(chord_str); } - else log("%%Function '%proc%' not found", prompt::user, proc_name); } - auto reset() + auto wipe() { - chord_handlers.clear(); handlers_release.clear(); handlers_preview.clear(); } + template + auto load(xmls& config, qiew path) + { + auto keybinds = config.list(path); + for (auto keybind_ptr : keybinds) + { + auto& keybind = *keybind_ptr; + if (!keybind.fake) + { + auto chord = keybind.take_value(); + auto action = keybind.take("action", ""s); + bind(chord, action); + } + } + } }; // pro: Glow gradient filter. diff --git a/src/netxs/desktopio/directvt.hpp b/src/netxs/desktopio/directvt.hpp index e4a0ceeca0..f7610671e3 100644 --- a/src/netxs/desktopio/directvt.hpp +++ b/src/netxs/desktopio/directvt.hpp @@ -780,7 +780,7 @@ namespace netxs::directvt SEQ_TEMP_macro(WRAP_macro(struct_members)) \ set(); \ } \ - void syncto(auto& dst) \ + void syncto(auto& dst) const \ { \ SEQ_SYNC_macro(WRAP_macro(struct_members)) \ } \ diff --git a/src/netxs/desktopio/gui.hpp b/src/netxs/desktopio/gui.hpp index 2ed1f2ca1a..91451cf153 100644 --- a/src/netxs/desktopio/gui.hpp +++ b/src/netxs/desktopio/gui.hpp @@ -1539,6 +1539,9 @@ namespace netxs::gui static constexpr auto end = 0x23; // VK_END; static constexpr auto home = 0x24; // VK_HOME; + static constexpr auto f11 = 0x7A; // VK_F11; + static constexpr auto f12 = 0x7B; // VK_F12; + static constexpr auto key_0 = '0'; // VK_0; static constexpr auto numlock = 0x90; // VK_NUMLOCK; @@ -2942,7 +2945,7 @@ namespace netxs::gui { auto keystat = input::key::released; auto virtcod = 0; - if (keybd_read_input(keystat, virtcod)) return; + if (!keybd_read_input(keystat, virtcod)) return; if (keystat) { //todo key @@ -2998,21 +3001,25 @@ namespace netxs::gui window_shutdown(); }); } + else if (keybd_test_pressed(vkey::control) && keybd_test_pressed(vkey::shift) // Roll font list. Renumerate font list. + && (keybd_test_pressed(vkey::f11) || keybd_test_pressed(vkey::f12)) + && fcache.families.size()) + { + auto& families = fcache.families; + if (keybd_test_pressed(vkey::f12)) + { + families.push_back(std::move(families.front())); + families.pop_front(); + } + else + { + families.push_front(std::move(families.back())); + families.pop_back(); + } + set_font_list(families); + //print_font_list(true); + } } - //else if (keystat == input::key::released && fcache.families.size()) // Renumerate font list. - //{ - // auto flen = fcache.families.size(); - // auto index = virtcod == 0x30 ? fcache.families.size() - 1 : virtcod - 0x30; - // if (index > 0 && index < flen) - // { - // auto& flist = fcache.families; - // auto iter = flist.begin(); - // std::advance(iter, index); - // flist.splice(flist.begin(), flist, iter, std::next(iter)); // Move it to the begining of the list. - // set_font_list(flist); - // print_font_list(true); - // } - //} } arch run_command(arch command, arch lParam) { diff --git a/src/netxs/desktopio/input.hpp b/src/netxs/desktopio/input.hpp index afb84601de..cd32e612f7 100644 --- a/src/netxs/desktopio/input.hpp +++ b/src/netxs/desktopio/input.hpp @@ -650,6 +650,18 @@ namespace netxs::input } return crop; } + static auto get_key_event_by_chord(qiew chord) + { + //todo implement + chord.clear(); + auto k = syskeybd{}; + k.keystat = 0 ? input::key::pressed : input::key::released; + k.virtcod = {}; + k.scancod = {}; + k.keycode = {}; + k.cluster = {}; + return k; + } static auto chord_list(qiew chord) { struct key_t @@ -2030,7 +2042,6 @@ namespace netxs::input if (auto it_alone = alone_key.find(v); it_alone != alone_key.end()) { - //todo key if (v >= key::KeyEnd && v <= key::KeyDownArrow) it_alone->second[1] = decckm ? 'O' : '['; return it_alone->second; } diff --git a/src/netxs/desktopio/terminal.hpp b/src/netxs/desktopio/terminal.hpp index 66e2774f7d..002ed9971a 100644 --- a/src/netxs/desktopio/terminal.hpp +++ b/src/netxs/desktopio/terminal.hpp @@ -7737,7 +7737,7 @@ namespace netxs::ui chords.proc("TerminalViewportOnePageDown", [&](hids& gear){ if (target != &normal) return; gear.set_handled(); base::riseup(tier::preview, e2::form::upon::scroll::bypage::y, { .vector = -dot_01 }); }); chords.proc("TerminalViewportTop", [&](hids& gear){ if (target != &normal) return; gear.set_handled(); base::riseup(tier::preview, e2::form::upon::scroll::to_top::y); }); chords.proc("TerminalViewportEnd", [&](hids& gear){ if (target != &normal) return; gear.set_handled(); base::riseup(tier::preview, e2::form::upon::scroll::to_end::y); }); - chords.proc("TerminalSelectionClear", [&](hids& gear){ if (!selection_active()) return; gear.set_handled(); exec_cmd(commands::ui::deselect); }); + chords.proc("TerminalSelectionCancel", [&](hids& gear){ if (!selection_active()) return; gear.set_handled(); exec_cmd(commands::ui::deselect); }); chords.proc("TerminalToggleCwdSync", [&](hids& gear){ gear.set_handled(); base::riseup(tier::preview, ui::term::events::toggle::cwdsync, true); }); chords.proc("TerminalToggleWrapMode", [&](hids& gear){ gear.set_handled(); exec_cmd(commands::ui::togglewrp); }); chords.proc("TerminalQuit", [&](hids& gear){ gear.set_handled(); exec_cmd(commands::ui::sighup); }); @@ -7753,24 +7753,7 @@ namespace netxs::ui chords.proc("TerminalSelectionOneShot", [&](hids& gear){ gear.set_handled(); set_oneshot(mime::textonly); }); chords.proc("TerminalViewportCopy", [&](hids& gear){ gear.set_handled(); prnscrn(gear); }); chords.proc("TerminalToggleStdioLog", [&](hids& gear){ gear.set_handled(); set_log(!io_log); ondata(); }); - - auto keybinds = xml_config.list("/config/term/hotkeys/key"); - for (auto keybind_ptr : keybinds) - { - auto& keybind = *keybind_ptr; - if (!keybind.fake) - { - auto chord = keybind.take_value(); - if (chord.size()) - { - auto action = keybind.take("action", ""s); - if (action.size()) - { - chords.bind(chord, action); - } - } - } - } + chords.load(xml_config, "/config/term/hotkeys/key"); LISTEN(tier::general, e2::timer::tick, timestamp) // Update before world rendering. { diff --git a/src/netxs/desktopio/xml.hpp b/src/netxs/desktopio/xml.hpp index abebb355d1..2613159f6d 100644 --- a/src/netxs/desktopio/xml.hpp +++ b/src/netxs/desktopio/xml.hpp @@ -122,7 +122,7 @@ namespace netxs::xml result.chan.a = 0xff; return result; } - else log("%%Unknown hex color format: { %value% }, expected #rrggbbaa or #rrggbb color hex value", prompt::xml, value); + //log("%%Unknown hex color format: { %value% }, expected #rrggbbaa or #rrggbb color hex value", prompt::xml, value); } else if (shadow.starts_with("0x")) // hex: 0xaarrggbb { @@ -143,7 +143,7 @@ namespace netxs::xml result.chan.b = (tobyte(shadow[4]) << 4) + tobyte(shadow[5]); return result; } - else log("%%Unknown hex color format: { %value% }, expected 0xaarrggbb or 0xrrggbb color hex value", prompt::xml, value); + //log("%%Unknown hex color format: { %value% }, expected 0xaarrggbb or 0xrrggbb color hex value", prompt::xml, value); } else if (utf::check_any(shadow, ",;/")) // dec: 000,000,000,000 { @@ -165,7 +165,7 @@ namespace netxs::xml } } } - log("%%Unknown hex color format: { %value% }, expected 000,000,000,000 decimal (r,g,b,a) color value", prompt::xml, value); + //log("%%Unknown hex color format: { %value% }, expected 000,000,000,000 decimal (r,g,b,a) color value", prompt::xml, value); } else if (auto c = utf::to_int(shadow)) // Single ANSI color value { @@ -174,7 +174,7 @@ namespace netxs::xml result = argb::vt256[c.value()]; return result; } - else log("%%Unknown ANSI 256-color value format: { %value% }, expected 0-255 decimal value", prompt::xml, value); + //log("%%Unknown ANSI 256-color value format: { %value% }, expected 0-255 decimal value", prompt::xml, value); } return std::nullopt; } diff --git a/src/vtm.hpp b/src/vtm.hpp index 4c118d7940..af9220402a 100644 --- a/src/vtm.hpp +++ b/src/vtm.hpp @@ -739,25 +739,9 @@ namespace netxs::app::vtm keybd.proc("FocusPrevWindow", [&](hids& gear){ focus_next_window(gear, feed::rev); }); keybd.proc("FocusNextWindow", [&](hids& gear){ focus_next_window(gear, feed::fwd); }); keybd.proc("Disconnect", [&](hids& gear){ disconnect(gear); }); - keybd.proc("TryQuit", [&](hids& gear){ try_quit(gear); }); + keybd.proc("TryToQuit", [&](hids& gear){ try_quit(gear); }); + keybd.load(config, "/config/desktop/hotkeys/key"); - auto keybinds = config.list("/config/desktop/hotkeys/key"); - for (auto keybind_ptr : keybinds) - { - auto& keybind = *keybind_ptr; - if (!keybind.fake) - { - auto chord = keybind.take_value(); - if (chord.size()) - { - auto action = keybind.take("action", ""s); - if (action.size()) - { - keybd.bind(chord, action); - } - } - } - } LISTEN(tier::release, e2::form::upon::vtree::attached, world_ptr) { nexthop = world_ptr; diff --git a/src/vtm.xml b/src/vtm.xml index 5b02b41d38..1204a4a519 100644 --- a/src/vtm.xml +++ b/src/vtm.xml @@ -30,6 +30,17 @@ R"==( + + + + + + + + + + + @@ -168,7 +179,7 @@ R"==( - + " Previous match \n" @@ -178,7 +189,7 @@ R"==( " Left+RightClick to clear clipboard " - + \e[m"/> " Next match \n" @@ -188,14 +199,14 @@ R"==( " Left+RightClick to clear clipboard " - + " Wrapping text lines on/off \n" " Applied to selection if it is " - + - + )==" R"==( @@ -239,14 +250,14 @@ R"==( - - - + + + - + @@ -255,10 +266,10 @@ R"==( - - - - + + + + @@ -311,7 +322,7 @@ R"==( - + " Previous match \n" @@ -321,7 +332,7 @@ R"==( " Left+RightClick to clear clipboard " - + \e[m"/> " Next match \n" @@ -331,14 +342,14 @@ R"==( " Left+RightClick to clear clipboard " - + " Wrapping text lines on/off \n" " Applied to selection if it is " - + - + - + - - - + + + @@ -377,35 +388,35 @@ R"==( retry: Restart session if exit code != 0. --> )==" // MSVC2022: C2026 String too big, trailing characters truncated. R"==( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +