Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
7a2ac89
#943 WIP: KKP support (initial implementaton)
o-sdn-o Jun 1, 2026
ae9271d
#943 WIP: KKP support (form input cluster)
o-sdn-o Jun 2, 2026
0471fc4
#943 WIP: KKP support (unify lut)
o-sdn-o Jun 2, 2026
1011a18
#943 WIP: KKP support (revise key2vt + shifted/unshifted)
o-sdn-o Jun 3, 2026
a83314b
#943 WIP: KKP support (revise key2vt + deadkeys + fix custom kb layouts)
o-sdn-o Jun 4, 2026
458fd46
#943 WIP: KKP support (make literal shortcuts more clear)
o-sdn-o Jun 4, 2026
a34dfbc
v2026.06.04
o-sdn-o Jun 4, 2026
d2878f7
#943 WIP: KKP support (fix AltGr mapping)
o-sdn-o Jun 4, 2026
fb6b2cb
#943 WIP: KKP support (try to fix QWERTZ, AZERTY, Dvorak, BEPO)
o-sdn-o Jun 4, 2026
b5d735b
#943 WIP: KKP support (try to fix QWERTZ, AZERTY, Dvorak, BEPO)
o-sdn-o Jun 4, 2026
e7f7afe
#943 WIP: KKP support (track kb layout + expand the key set with phys…
o-sdn-o Jun 5, 2026
7cafda1
#943 WIP: KKP support (play with layouts)
o-sdn-o Jun 5, 2026
2bccd56
#943 WIP: KKP support (rename Left/RightWin to Left/RightSuper) +sele…
o-sdn-o Jun 9, 2026
d8d240c
Filter IME/pasted clusters in chords (sc=0 vk=0)
o-sdn-o Jun 11, 2026
5fdbf85
Filter IME/pasted clusters in chords (sc=0 vk=0)
o-sdn-o Jun 11, 2026
f371c40
Fix invalid key chord state (stuck keys when using IME)
o-sdn-o Jun 11, 2026
607d1d6
#943 WIP: KKP support (media keys)
o-sdn-o Jun 13, 2026
76fe443
#944: Add LunaSVG as a git submodule
o-sdn-o Jun 13, 2026
8962243
Minor edits
o-sdn-o Jun 13, 2026
115df6f
#944: Remove lunasvg submodule in favor of FetchContent
o-sdn-o Jun 13, 2026
00b9184
#944: Update build.md
o-sdn-o Jun 13, 2026
ee19f00
#944: Make stb fetched automatically via cmake if not found
o-sdn-o Jun 14, 2026
d850e99
#943 WIP: Implement deadkey preview
o-sdn-o Jun 16, 2026
fa169aa
#943 WIP: Implement kb layout tracking
o-sdn-o Jun 17, 2026
30ea3f0
#943 WIP: Update physical key list
o-sdn-o Jun 17, 2026
e179c3b
#943 WIP: Fix key names (unix builds)
o-sdn-o Jun 17, 2026
6caf98e
#943 WIP: Typo
o-sdn-o Jun 17, 2026
b5820a6
#943 WIP: Typo
o-sdn-o Jun 17, 2026
25350be
#943 WIP: Drop input::key::config
o-sdn-o Jun 18, 2026
1fbe4ae
#943 WIP: Fix numpad collisions
o-sdn-o Jun 18, 2026
9397697
#943 WIP: Fix numpad hashes
o-sdn-o Jun 18, 2026
714e1dd
#943 WIP: Fix CapsLock behavior (shifted/unshited)
o-sdn-o Jun 18, 2026
83fd1e4
#943 WIP: Fix KKP 'Separator' (NumpadPoint)
o-sdn-o Jun 18, 2026
7f7cb36
#943 WIP: Fix KKP 'Separator' (NumpadPoint)
o-sdn-o Jun 18, 2026
958edbb
#943 WIP: Implement xlat for win32 console api (not yet complete)
o-sdn-o Jun 18, 2026
5ae78d8
#943 WIP: Implement xlat for win32 console api
o-sdn-o Jun 19, 2026
cfcd099
#943 WIP: Fix deadkey reset
o-sdn-o Jun 19, 2026
2cdec4c
#943 WIP: Fix deadkey reset
o-sdn-o Jun 19, 2026
a9e95bf
#943 WIP: Make input::key::vk_map constexpr
o-sdn-o Jun 19, 2026
02f0c66
#943 WIP: Keep layouts sorted for lookup
o-sdn-o Jun 19, 2026
9f325ee
#943 WIP: Fix deadkey preview lifetime (+kblayout tracking)
o-sdn-o Jun 19, 2026
3fcd7c8
#943 WIP: Change key detection logic
o-sdn-o Jun 21, 2026
682d284
#943 WIP: Fix left/right mods detection
o-sdn-o Jun 21, 2026
9bf7d2c
#943 WIP: Switch to 'xlat_direct()'
o-sdn-o Jun 22, 2026
5add7f6
#943 WIP: Improve functional key lookup
o-sdn-o Jun 22, 2026
85a9a93
#943 WIP: Fix RightCtrl/RightAlt on Canadian/Korean layouts
o-sdn-o Jun 22, 2026
3c596cf
Fix bug in to_utf_from_code (non UTF-8 output)
o-sdn-o Jun 23, 2026
6e63b51
Fix dead loop when synchronizing empty grapheme cluster list (fake ju…
o-sdn-o Jun 23, 2026
fa899a5
Drop binary::stream::empty()
o-sdn-o Jun 23, 2026
aad3f22
#943 WIP: Fast detection of function keys
o-sdn-o Jun 24, 2026
3a9dc2d
#943 WIP: We now never equate AltGr with Alt (RightAlt)
o-sdn-o Jun 24, 2026
298daf1
#943 WIP: Respect AltGr and IsoLevel5Shift state when peeking layout …
o-sdn-o Jun 24, 2026
0b6875c
#943 WIP: Make key lookups regardless of the layout
o-sdn-o Jun 25, 2026
1fb38d2
#943 WIP: Drop commented code (key_map, key_hash, latin_klids)
o-sdn-o Jun 25, 2026
977acc7
#943 WIP: Add a workaround for the RightAlt extflag in native win32 c…
o-sdn-o Jun 25, 2026
cb9cc0f
#943 WIP: Exclude Shift/AltGr/Level5Shift keys from literal chords (+…
o-sdn-o Jun 25, 2026
d0e7b9c
#943 WIP: Fix focus at startup (keybd_sync_layout call breaks it)
o-sdn-o Jun 25, 2026
fb6c3ed
#943 WIP: Fix race between focus and layout lookup at startup
o-sdn-o Jun 25, 2026
0253cf5
#943 WIP: Make keyboard modifiers global
o-sdn-o Jun 25, 2026
0a76445
#943 WIP: Fix deadkey detection (+extflag in ToUnicodeEx)
o-sdn-o Jun 26, 2026
4b21038
#943 WIP: Fix Pause/Break/PrintScreen/SysReq press/release simulation
o-sdn-o Jun 26, 2026
a2f3544
#943 WIP: Fix Literal key chords for keys like Esc/Enter/Space/BSpc/Tab
o-sdn-o Jun 26, 2026
4b68af3
#943 WIP: Simplify IsoLevel5Shift detection
o-sdn-o Jun 26, 2026
290d31b
#943 WIP: Implement KKP->ALL mapping
o-sdn-o Jun 26, 2026
ffcf531
#943 WIP: Update vt-input-mode.md
o-sdn-o Jun 27, 2026
dd8215e
Fix Win32 builds
o-sdn-o Jun 27, 2026
8b6129f
#943 WIP: Replace the Alt+Z/Alt+Shift+B key bindings with Esc+F1/Ctrl…
o-sdn-o Jun 27, 2026
74b8f0a
Fix Win32 builds
o-sdn-o Jun 27, 2026
d7d5975
v2026.06.26
o-sdn-o Jun 27, 2026
7fed23f
Try to fix Win32 builds (windows-latest: "fatal error C1001: Interna…
o-sdn-o Jun 27, 2026
64e5eb1
#943 WIP: Fix raw vt-input
o-sdn-o Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ windows-latest, ubuntu-22.04 ]
os: [ windows-2022, ubuntu-22.04 ]
cpu: [ x64, x86, arm64, arm ]
exclude:
- os: windows-latest
- os: windows-2022
cpu: x86
- os: windows-latest
- os: windows-2022
cpu: arm

include:
Expand All @@ -38,20 +38,20 @@ jobs:
cc: gcc-13
flags: '-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 -DCMAKE_CXX_FLAGS_RELEASE="-static-libgcc -static-libstdc++ -s -DNDEBUG -Wall -Wextra -Wno-missing-field-initializers -Wno-psabi -Werror -Wno-unknown-pragmas"'
triplet: x64-osx
- os: windows-latest
- os: windows-2022
platform: windows
cpu: Win32
arch: x86
cxx: cl
cc: cl
flags: '-DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded" -DCMAKE_EXE_LINKER_FLAGS_RELEASE="/DEBUG /OPT:REF /OPT:ICF" -DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /DNDEBUG /Zi /Zc:preprocessor /W4 /EHsc /bigobj /utf-8 /Zc:preprocessor" -A '
flags: '-DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded" -DCMAKE_EXE_LINKER_FLAGS_RELEASE="/DEBUG /OPT:REF /OPT:ICF" -DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /DNDEBUG /Zi /Zc:preprocessor /W4 /EHsc /bigobj /utf-8 /constexpr:steps 10000000" -A '
triplet: x86-windows-static
- os: windows-latest
- os: windows-2022
cxx: cl
- os: windows-latest
- os: windows-2022
cpu: x64
triplet: x64-windows-static
- os: windows-latest
- os: windows-2022
cpu: arm64
triplet: arm64-windows-static
- os: ubuntu-22.04
Expand Down Expand Up @@ -84,12 +84,12 @@ jobs:

- os: ubuntu-22.04
flags: '-DCMAKE_CXX_FLAGS_RELEASE="-static -s -DNDEBUG -Wall -Wextra -Wno-missing-field-initializers -Wno-psabi -Werror -Wno-unknown-pragmas"'
- os: windows-latest
flags: '-DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded" -DCMAKE_EXE_LINKER_FLAGS_RELEASE="/DEBUG /OPT:REF /OPT:ICF" -DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /DNDEBUG /Zi /Zc:preprocessor /W4 /EHsc /bigobj /utf-8 /Zc:preprocessor" -A '
- os: windows-2022
flags: '-DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded" -DCMAKE_EXE_LINKER_FLAGS_RELEASE="/DEBUG /OPT:REF /OPT:ICF" -DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /DNDEBUG /Zi /Zc:preprocessor /W4 /EHsc /bigobj /utf-8 /constexpr:steps 10000000" -A '

- os: ubuntu-22.04
platform: linux
- os: windows-latest
- os: windows-2022
platform: windows

- cpu: x64
Expand Down Expand Up @@ -117,13 +117,13 @@ jobs:
sudo apt -y install ${{ matrix.apt }}

- name: Clone and Bootstrap vcpkg (Windows)
if: matrix.os == 'windows-latest'
if: matrix.os == 'windows-2022'
run: |
git clone https://github.com/microsoft/vcpkg.git ${{ github.workspace }}/vcpkg
${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat -disableMetrics

- name: Clone and Bootstrap vcpkg (POSIX)
if: matrix.os != 'windows-latest'
if: matrix.os != 'windows-2022'
run: |
git clone https://github.com/microsoft/vcpkg.git ${{ github.workspace }}/vcpkg
${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh -disableMetrics
Expand All @@ -142,41 +142,41 @@ jobs:
VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}/vcpkg_cache,readwrite"
VCPKG_BUILD_TYPE: release
MACOSX_DEPLOYMENT_TARGET: 11.0
WIN32_RESOURCES: ${{ matrix.os == 'windows-latest' && '.resources/images/vtm.rc' || '' }}
WIN32_RESOURCES: ${{ matrix.os == 'windows-2022' && '.resources/images/vtm.rc' || '' }}
run: |
pwsh -Command "if (!(Test-Path '${{ github.workspace }}/vcpkg_cache')) { New-Item -ItemType Directory -Force -Path '${{ github.workspace }}/vcpkg_cache' }"
cmake -B ${{ steps.strings.outputs.bin }} -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} ${{ matrix.flags }} ${{ matrix.os == 'windows-latest' && matrix.cpu || '' }} -DVCPKG_BUILD_TYPE=release -DCMAKE_BUILD_TYPE=Release -S ${{ github.workspace }}
cmake -B ${{ steps.strings.outputs.bin }} -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} ${{ matrix.flags }} ${{ matrix.os == 'windows-2022' && matrix.cpu || '' }} -DVCPKG_BUILD_TYPE=release -DCMAKE_BUILD_TYPE=Release -S ${{ github.workspace }}

- name: Build
run: cmake --build ${{ steps.strings.outputs.bin }} --config Release -v

- name: Pack (POSIX)
if: matrix.os != 'windows-latest'
if: matrix.os != 'windows-2022'
run: |
7z a -ttar vtm_${{ matrix.platform }}_${{ matrix.arch }}.tar ${{ steps.strings.outputs.bin }}/vtm
7z a -mx9 -stl -y -r -t7z vtm_${{ matrix.platform }}_${{ matrix.arch }}.tar.7z vtm_${{ matrix.platform }}_${{ matrix.arch }}.tar

- name: Pack (Windows)
if: matrix.os == 'windows-latest'
if: matrix.os == 'windows-2022'
run: |
7z a -ssp -mx9 -stl -y -r -t7z vtm_${{ matrix.platform }}_${{ matrix.arch }}.7z ${{ steps.strings.outputs.bin }}/Release/vtm.exe

- name: Upload Artifact (POSIX)
if: matrix.os != 'windows-latest'
if: matrix.os != 'windows-2022'
uses: actions/upload-artifact@main
with:
name: vtm_${{ matrix.platform }}_${{ matrix.arch }}
path: vtm_${{ matrix.platform }}_${{ matrix.arch }}.tar.7z

- name: Upload Symbols (Windows)
if: matrix.os == 'windows-latest'
if: matrix.os == 'windows-2022'
uses: actions/upload-artifact@main
with:
name: vtm_pdb_${{ matrix.platform }}_${{ matrix.arch }}
path: ${{ steps.strings.outputs.bin }}/Release/vtm.pdb

- name: Upload Artifact (Windows)
if: matrix.os == 'windows-latest'
if: matrix.os == 'windows-2022'
uses: actions/upload-artifact@main
with:
name: vtm_${{ matrix.platform }}_${{ matrix.arch }}
Expand Down
44 changes: 37 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,50 @@ add_executable(vtm "src/vtm.cpp" $ENV{WIN32_RESOURCES})
find_package(Freetype REQUIRED)
find_package(harfbuzz REQUIRED)
find_package(Lua 5.4 REQUIRED)
find_package(lunasvg REQUIRED)
find_path(STB_INCLUDE_DIR "stb_image.h")
find_package(lunasvg QUIET)
find_package(Stb QUIET)

if(lunasvg_FOUND)
message(STATUS "LunaSVG found via find_package.")
else()
message(STATUS "LunaSVG not found. Downloading via FetchContent...")
set(LUNASVG_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(LUNASVG_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
FetchContent_Declare(lunasvg
GIT_REPOSITORY https://github.com/sammycage/lunasvg.git
GIT_TAG v3.5.0)
FetchContent_MakeAvailable(lunasvg)
add_library(lunasvg::lunasvg ALIAS lunasvg)
endif()

if(Stb_FOUND)
message(STATUS "stb found via find_package.")
if(NOT TARGET stb::stb)
add_library(stb_interface INTERFACE)
target_include_directories(stb_interface INTERFACE ${Stb_INCLUDE_DIR})
add_library(stb::stb ALIAS stb_interface)
endif()
else()
message(STATUS "stb not found. Downloading via FetchContent...")
FetchContent_Declare(stb
GIT_REPOSITORY https://github.com/nothings/stb
GIT_TAG master)
FetchContent_MakeAvailable(stb)
add_library(stb_interface INTERFACE)
target_include_directories(stb_interface INTERFACE ${stb_SOURCE_DIR})
add_library(stb::stb ALIAS stb_interface)
endif()

add_library(Lua::Lua INTERFACE IMPORTED)
set_target_properties(Lua::Lua PROPERTIES INTERFACE_LINK_LIBRARIES "${LUA_LIBRARIES}")

target_include_directories(vtm PRIVATE ${FREETYPE_INCLUDE_DIRS}
${HARFBUZZ_INCLUDE_DIRS}
${LUA_INCLUDE_DIR}
${STB_INCLUDE_DIR})
${LUA_INCLUDE_DIR})

target_link_libraries(vtm PRIVATE Lua::Lua Freetype::Freetype harfbuzz::harfbuzz lunasvg::lunasvg)
# target_link_libraries(term PRIVATE Lua::Lua Freetype::Freetype harfbuzz::harfbuzz lunasvg::lunasvg)
# target_link_libraries(calc PRIVATE Lua::Lua Freetype::Freetype harfbuzz::harfbuzz lunasvg::lunasvg)
target_link_libraries(vtm PRIVATE Lua::Lua Freetype::Freetype harfbuzz::harfbuzz lunasvg::lunasvg stb::stb)
# target_link_libraries(term PRIVATE Lua::Lua Freetype::Freetype harfbuzz::harfbuzz lunasvg::lunasvg stb::stb)
# target_link_libraries(calc PRIVATE Lua::Lua Freetype::Freetype harfbuzz::harfbuzz lunasvg::lunasvg stb::stb)

if(NOT WIN32)
install(TARGETS vtm DESTINATION bin)
Expand Down
3 changes: 2 additions & 1 deletion CMakeSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
// /bigobj Our event model spawns a large number of objects. By default, an object file can hold up to 65,279 (almost 2^16) addressable sections. This limit applies no matter which target platform is specified. /bigobj increases that address capacity to 4,294,967,296 (2^32).
// /utf-8 All literals in our source code are in UTF-8 format.
// /Zc:preprocessor Enable a new, modern preprocessor that is fully conformant to C99, C++11, and later standards.
"WIN32_CXX_FLAGS": "/EHsc /bigobj /utf-8 /Zc:preprocessor",
// /constexpr:steps Increase the constexpr evaluation limit.
"WIN32_CXX_FLAGS": "/EHsc /bigobj /utf-8 /Zc:preprocessor /constexpr:steps 10000000",
// /MTd Static debug build (don't rely on the shared dlls).
// /DDEBUG Define the preprocessor symbol DEBUG.
// /Zi Generate complete debugging information (.PDB files) to allow for source-level debugging in Visual Studio.
Expand Down
1 change: 1 addition & 0 deletions doc/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,7 @@ In Classic VT mode, a vtm process parses input from multiple standard sources an
- SGR mouse reporting sequences `\x1b[<s;x;yM/m` are redirected to the mouse event channel.
- Terminal window focus reporting sequences `\x1b[I`/`\x1b[O` are redirected to the focus event channel.
- Line style reporting sequences `\x1b[33:STYLEp` are redirected to the style event channel (current/selected line wrapping on/off, left/right/center alignment).
- KKP keyboard reporting sequences are mapped to the Abstract Latin Layout (ALL) and forwarded to the keyboard event channel.
- All incoming text flow that does not fall into the above categories is clusterized, forming a key-pressed stream forwarded to the keyboard event channel.
- Operating system signals
- SIGWINCH events are forwarded to the window size event channel.
Expand Down
6 changes: 5 additions & 1 deletion doc/build.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ Build-time dependencies
- `FreeType`
- `HarfBuzz`
- `Lua` (minimum version v5.4)
- `LunaSVG` (Will be built automatically from source via CMake if not found in the system)
- `stb` (Will be fetched automatically via CMake if not found)

Examples of installing dependencies:

OS | Dependency installation command | Notes
--------|---------------------------------|------
Linux | `sudo apt install libfreetype-dev libharfbuzz-dev liblua5.4-dev git cmake`
Linux | `sudo apt install libfreetype-dev libharfbuzz-dev liblua5.4-dev git cmake` | `stb` and `LunaSVG` are managed automatically during CMake configuration.
FreeBSD | `pkg install freetype2 harfbuzz lua54 cmake` | Best results with GCC compiler and 6GB of RAM.
MacOS | `brew install freetype harfbuzz lua cmake`

Expand Down Expand Up @@ -51,5 +53,7 @@ Build-time dependencies
- `FreeType`
- `HarfBuzz`
- `Lua`
- `LunaSVG`
- `stb`

To manually compile vtm, launch Visual Studio and clone the repository https://github.com/directvt/vtm.git, after cloning is complete, double-click on the Folder View in Solution Explorer, wait for the dependencies to initialize (may take several minutes), select the required configuration on the top menu toolbar, and click the `Build All` menu button.
9 changes: 4 additions & 5 deletions doc/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -459,9 +459,10 @@ Type | Example |Description
`Specific` | `LeftShift+RightShift` | A key combination with explicitly specified physical keys.
`Scancodes` | `0x3B+0x3C` | A key combination represented solely by scan codes of physical keys in hexadecimal format.

Generic, literal and specific key sequences can be mixed in any order within a key chord list.

The required key combination sequence can be generated on the Info page, by clicking the label in the lower right corner of the vtm desktop.
Notes:
- Generic, literal and specific key sequences can be mixed in any order within a key chord list.
- The required key combination sequence can be generated on the Info page, by clicking the label in the lower right corner of the vtm desktop.
- "Literal" key combinations automatically filter out keyboard shift modifiers such as Shift/AltGr/IsoLevel5Shift.

#### Mouse events

Expand Down Expand Up @@ -1088,7 +1089,6 @@ Notes
</gate>
<desktop script*> <!-- Desktop-level bindings. -->
<script=FocusTaskbar on="Esc+F1" />
<script=FocusTaskbar on="Alt+Z" />
<script=FocusPrevWindow on="Ctrl+PageUp" />
<script=FocusNextWindow on="Ctrl+PageDown"/>
<script=Disconnect on="Shift+F7" />
Expand Down Expand Up @@ -1161,7 +1161,6 @@ Notes
</tile>
<terminal script*> <!-- Terminal-specific bindings. -->
<script=ExclusiveKeyboardMode on="preview: Ctrl-Alt | Alt-Ctrl"/>
<script=ExclusiveKeyboardMode on="preview: Alt+Shift+B"/>
<script="vtm.gear.SetHandled()" on="Esc"/> <!-- Do nothing. The Esc key is used as a modifier. Press/release events are sent only if the key is released without being combined with any other keys. -->
<script on="-Esc"> -- Clear selection (if any) and send Esc press/release events.
vtm.terminal.ClearSelection()
Expand Down
Loading
Loading