From 715c9155bf35d60a93ae418945900586f93c34c2 Mon Sep 17 00:00:00 2001
From: taynpg <taynpg@163.com>
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<char>& 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 编码。
 ******************************************************
     添加截止符号,提示路径时,以此截断,比如当前输入为: