From 2e740e6c33dc501a488d2ab4fbd46379823f8ca0 Mon Sep 17 00:00:00 2001 From: pit-ray <42631247+pit-ray@users.noreply.github.com> Date: Sat, 18 May 2024 17:15:56 +0900 Subject: [PATCH] Add showcmd (#236) * update version * show the matching characters to the count * add showcmd option * add document * fix build script * fix cmakelists.txt * support the visualization for count * add document of showcmd * update document --- CMakeLists.txt | 4 ++-- docs/cheat_sheet/options/index.md | 13 ++++++++++-- src/core/entry.cpp | 35 ++++++++++++++++++++++++++++++- src/core/inputhub.cpp | 3 +++ src/core/inputhub.hpp | 2 +- src/core/settable.cpp | 1 + src/core/version.hpp | 2 +- tools/build.bat | 12 +++++------ 8 files changed, 59 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f06671f9..941e5145 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.6.0) -project(win-vind VERSION 5.12.0) -set(INTERNAL_VERSION ${PROJECT_VERSION}.0) +project(win-vind VERSION 5.13.0) +set(INTERNAL_VERSION ${PROJECT_VERSION}.1) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) diff --git a/docs/cheat_sheet/options/index.md b/docs/cheat_sheet/options/index.md index c5911c8e..04bdd2b3 100644 --- a/docs/cheat_sheet/options/index.md +++ b/docs/cheat_sheet/options/index.md @@ -49,12 +49,21 @@ Font size of GUI Specify the characters of hint used for EasyClick and GridMove. It accpets as input a set of non-duplicate characters and assigns them to the hints in order from the first to the last. - ## Command Line ### **`vcmdline`** **type**: bool, **default**: true -show virtual command line +Show virtual command line + +
+ +### **`showcmd`** +**type**: bool, **default**: true +Show the partial command in the virtual command line. +This feature causes some overhead. +If the count of repeats for a command is specified, the command is displayed following the count of repeats. +If you do not enter a repeat count for a command, then the repeat count is denoted as 1. +Unlike Vim, the repeat count is always explicitly displayed to reduce mistakes in the repeat count.
diff --git a/src/core/entry.cpp b/src/core/entry.cpp index 9fc4804b..a5444dd4 100644 --- a/src/core/entry.cpp +++ b/src/core/entry.cpp @@ -60,6 +60,7 @@ SOFTWARE. #include #include #include +#include #include "autocmd.hpp" @@ -317,6 +318,7 @@ namespace vind void VindEntry::update() { auto& ihub = InputHub::get_instance() ; + auto& settable = SetTable::get_instance() ; // NOTE: it assume that these hwnd are fixed. static const auto desktop_hwnd = GetDesktopWindow() ; @@ -370,10 +372,41 @@ namespace vind do { CmdUnit::SPtr input ; - std::uint16_t count ; + std::uint16_t count = 0 ; if(!ihub.pull_input(input, count)) { + if(count > 0) { + opt::VCmdLine::reset() ; + opt::VCmdLine::print(opt::StaticMessage(std::to_string(count))) ; + } continue ; } + + if(settable.get("showcmd").get()) { + auto solver = ihub.get_solver() ; + for(const auto& matcher : solver->get_trigger_matchers()) { + if(!matcher->is_matching()) { + continue ; + } + auto hist_size = matcher->history_size() ; + // If the any matcher isn't matched, the history size is zero. + if(hist_size == 0) { + opt::VCmdLine::reset() ; + break ; + } + std::stringstream ss ; + ss << count ; + + auto cmd = matcher->get_command() ; + auto end_itr = cmd.begin() + hist_size ; + for(auto itr = cmd.begin() ; itr != end_itr ; itr ++) { + ss << **itr ; + } + opt::VCmdLine::reset() ; + opt::VCmdLine::print(opt::StaticMessage(ss.str())) ; + break ; + } + } + handle_system_call(input->execute(count)) ; // correct the state to avoid cases that a virtual key diff --git a/src/core/inputhub.cpp b/src/core/inputhub.cpp index bbef4866..f30e3e76 100644 --- a/src/core/inputhub.cpp +++ b/src/core/inputhub.cpp @@ -151,6 +151,9 @@ namespace vind *input, pimpl->count_.size() > 0) ; if(!new_count.empty()) { pimpl->count_ += new_count ; + + // Store the count number, but return as false. + count = util::extract_num(pimpl->count_) ; return false ; } } diff --git a/src/core/inputhub.hpp b/src/core/inputhub.hpp index 3b2a1862..b6666d38 100644 --- a/src/core/inputhub.hpp +++ b/src/core/inputhub.hpp @@ -27,7 +27,7 @@ namespace vind public: static InputHub& get_instance() ; - std::shared_ptr get_solver(Mode mode) ; + std::shared_ptr get_solver(Mode mode=get_global_mode()) ; /* * Emulate text input and retrieve input at the appropriate time. diff --git a/src/core/settable.cpp b/src/core/settable.cpp index 5871310d..9d2ec132 100644 --- a/src/core/settable.cpp +++ b/src/core/settable.cpp @@ -82,6 +82,7 @@ namespace Param("uiacachebuild_stayend", 2000), Param("vcmdline", true), + Param("showcmd", true), Param("vscroll_pageratio", 0.125f), Param("vscroll_speed", 30), diff --git a/src/core/version.hpp b/src/core/version.hpp index 45521195..c95a7939 100644 --- a/src/core/version.hpp +++ b/src/core/version.hpp @@ -1,6 +1,6 @@ #ifndef _VERSION_HPP #define _VERSION_HPP -#define WIN_VIND_VERSION "5.11.3.0" +#define WIN_VIND_VERSION "5.13.0.1" #endif diff --git a/tools/build.bat b/tools/build.bat index f6a85922..3987251b 100644 --- a/tools/build.bat +++ b/tools/build.bat @@ -39,11 +39,11 @@ @if %compiler% == -msvc ( if %3 == 32 ( - cmake -B release_32 -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 16 2019" -A win32 . + cmake -B release_32 -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 17 2022" -A win32 . cmake --build release_32 --config Release xcopy /E /Y release_32\Release\*.exe release_32 ) else ( - cmake -B release_64 -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 16 2019" -A x64 . + cmake -B release_64 -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 17 2022" -A x64 . cmake --build release_64 --config Release xcopy /E /Y release_64\Release\*.exe release_64 ) @@ -62,10 +62,10 @@ Del /q "debug/Debug" if "%3" == "32" ( - cmake -B debug -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 16 2019" -A win32 . + cmake -B debug -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 17 2022" -A win32 . cmake --build debug --config Debug ) else ( - INTERNALcmake -B debug -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 16 2019" -A x64 . + INTERNALcmake -B debug -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 17 2022" -A x64 . cmake --build debug --config Debug ) @@ -80,7 +80,7 @@ @set covdir=build_cov @if %compiler% == -msvc ( "cov_tools/bin/cov-configure" --config %covdir%/covtest/cov.xml --msvc --template --xml-option=skip_file:".*/libs.*" - cmake -B %covdir% -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 16 2019" -A x64 . + cmake -B %covdir% -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 17 2022" -A x64 . xcopy /e /Y %covdir%\Debug\*.exe %covdir% ) else ( @@ -97,7 +97,7 @@ :test cd tests @if %compiler% == -msvc ( - cmake -B build_msvc -G "Visual Studio 16 2019" unit + cmake -B build_msvc -G "Visual Studio 17 2022" unit cmake --build build_msvc ctest -C Debug --test-dir build_msvc --output-on-failure ) else (