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 (