From 715c9155bf35d60a93ae418945900586f93c34c2 Mon Sep 17 00:00:00 2001 From: taynpg Date: Fri, 10 Jan 2025 15:14:47 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E6=B7=BB=E5=8A=A0ish=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 ++- CMakeLists.txt | 17 ++++++++++++----- README.md | 7 ++++++- filecomplete.cpp | 15 +++++++++++---- filecomplete.h | 4 ++-- 5 files changed, 33 insertions(+), 13 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1e46a77..4ddb7cd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -88,6 +88,7 @@ "xlocmon": "cpp", "xloctime": "cpp", "xtree": "cpp", - "deque": "cpp" + "deque": "cpp", + "array": "cpp" } } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 8324ab4..abf3ad2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,14 +6,19 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) if (MSVC) add_compile_options(/source-charset:utf-8) - add_definitions(-DSTRCODE_GBK) + add_definitions(-DBINARY_GBK) +endif() + +if(DEFINED IOS_ISH) + add_definitions(-DIOS_ISH) + add_definitions(-DMFLUSH_STDOUT) endif() if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_SYSTEM_NAME MATCHES "Windows") MESSAGE(STATUS "Add MinGW Param.") add_compile_options(-finput-charset=utf-8) add_compile_options(-fexec-charset=gbk) - add_definitions(-DSTRCODE_GBK) + add_definitions(-DBINARY_GBK) endif() set(CMAKE_DEBUG_POSTFIX "d") @@ -26,10 +31,12 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE} add_library(filecomplete STATIC filecomplete.h filecomplete.cpp) target_include_directories(filecomplete PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -add_executable(key_value key_value.cxx) - if(DEFINED GEN_EXAMPLE) message(STATUS "USE TEST") add_executable(example main.cpp) target_link_libraries(example PRIVATE filecomplete) -endif() \ No newline at end of file +endif() +if(DEFINED GEN_KEYVALUE) + message(STATUS "USE GEN_KEYVALUE") + add_executable(key_value key_value.cxx) +endif() diff --git a/README.md b/README.md index e8a51e3..f9ab61f 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,9 @@ `tab`键补全仅命中唯一项时可以直接补全,所以需要配合补全提示,两者配合能达到一个基本够用的状态(本项目达到此目标即结束,不开发更复杂的补全和提示)。 -本项目修改自 [https://github.com/DieTime/cli-autocomplete](https://github.com/DieTime/cli-autocomplete) 。 \ No newline at end of file +本项目修改自 [https://github.com/DieTime/cli-autocomplete](https://github.com/DieTime/cli-autocomplete) 。 + +# 编译 + +- `iSh`的`enter`键位是与`win`相同,需要定义`IOS_ISH`宏。 +- 部分终端,需要每个字符添删都主动调用`fflush`,如有需要定义`MFLUSH_STDOUT`宏。 \ No newline at end of file diff --git a/filecomplete.cpp b/filecomplete.cpp index 8dc5d02..9b4be0b 100644 --- a/filecomplete.cpp +++ b/filecomplete.cpp @@ -60,7 +60,11 @@ namespace fs = std::filesystem; #define DEFAULT_PREDICT_COLOR 8 #define DEFAULT_MAIN_COLOR 7 #elif defined(OS_UNIX) +#ifdef IOS_ISH +#define ENTER 13 +#else #define ENTER 10 +#endif #define BACKSPACE 127 #define LEFT 68 #define RIGHT 67 @@ -231,7 +235,7 @@ size_t get_u8_len(unsigned char ch) void supply(std::vector& wch, char ch) { -#if defined(STRCODE_GBK) +#if defined(BINARY_GBK) wch.push_back(ch); if (ch >= 0 && ch < 128) { return; @@ -437,8 +441,8 @@ char* fc_readline() } // Move cursor size_t cur_pos{}; -#if defined(STRCODE_GBK) - for (int i = 0; i < buf.size() && i < wo; ++i) { +#if defined(BINARY_GBK) + for (size_t i = 0; i < buf.size() && i < wo; ++i) { cur_pos += buf[i].size(); } #else @@ -485,7 +489,7 @@ char* fc_readline() temp.push_back(b); ++i; } else { -#if defined(STRCODE_GBK) +#if defined(BINARY_GBK) size_t length = 2; #else size_t length = get_u8_len(curch); @@ -638,5 +642,8 @@ void color_print(const char* text, const COLOR_TYPE color) } // Resets the text to default color printf("\033[0m"); +#if defined(MFLUSH_STDOUT) + fflush(stdout); +#endif #endif } diff --git a/filecomplete.h b/filecomplete.h index 1da7c4a..433d6c6 100644 --- a/filecomplete.h +++ b/filecomplete.h @@ -2,8 +2,8 @@ #define FILE_COMPLETE_H /* *************************************************** - 如果编译的结果的【执行】环境为GBK, 请手动定义宏 - STRCODE_GBK + 如果编译的结果的【执行】环境为GBK, 请手动定义宏 + BINARY_GBK 否则默认是 UTF-8 编码。 ****************************************************** 添加截止符号,提示路径时,以此截断,比如当前输入为: