From ce813baf044c4ab2072cfc6c5b592dbd239ea0c5 Mon Sep 17 00:00:00 2001 From: taynpg Date: Fri, 10 Jan 2025 14:21:16 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E6=B7=BB=E5=8A=A0=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E6=B5=8B=E8=AF=95=E9=94=AE=E4=BD=8D=E7=9A=84=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 ++ Makefile | 11 +++++++++-- key_value.cxx | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 key_value.cxx diff --git a/CMakeLists.txt b/CMakeLists.txt index b52be01..8324ab4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,8 @@ 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) diff --git a/Makefile b/Makefile index 472c380..bdb5e9b 100644 --- a/Makefile +++ b/Makefile @@ -11,8 +11,11 @@ MAIN_SRC = main.cpp MAIN_OBJ = $(MAIN_SRC:.cpp=.o) TARGET = main +KEY_VALUE_SRC = key_value.cxx +KEY_VALUE_BIN = key_value + # 默认目标 -all: $(TARGET) +all: $(TARGET) $(KEY_VALUE_BIN) # 生成目标文件 $(TARGET): $(LIB_OBJ) $(MAIN_OBJ) @@ -26,9 +29,13 @@ $(LIB_OBJ): $(LIB_SRC) $(LIB_HEADER) $(MAIN_OBJ): $(MAIN_SRC) $(CXX) $(CXXFLAGS) -c $< -o $@ +# 编译 key_value 二进制 +$(KEY_VALUE_BIN): $(KEY_VALUE_SRC) + $(CXX) $(CXXFLAGS) -o $@ $< + # 清理生成文件 clean: - rm -f $(LIB_OBJ) $(MAIN_OBJ) $(TARGET) + rm -f $(LIB_OBJ) $(MAIN_OBJ) $(TARGET) $(KEY_VALUE_BIN) # 伪目标 .PHONY: all clean diff --git a/key_value.cxx b/key_value.cxx new file mode 100644 index 0000000..5fdd10a --- /dev/null +++ b/key_value.cxx @@ -0,0 +1,47 @@ +#include +#include +#include + +// 设置终端为原始模式 +void setRawMode(bool enable) +{ + static struct termios oldt, newt; + + if (enable) { + // 获取当前终端设置 + tcgetattr(STDIN_FILENO, &oldt); + newt = oldt; + + // 设置终端为原始模式 + newt.c_lflag &= ~(ICANON | ECHO); // 关闭回显和缓冲输入 + tcsetattr(STDIN_FILENO, TCSANOW, &newt); + } else { + // 恢复原有终端设置 + tcsetattr(STDIN_FILENO, TCSANOW, &oldt); + } +} + +int main() +{ + std::cout << "Press any key to see its keycode (Press 'q' to quit)..." << std::endl; + + // 启用原始模式 + setRawMode(true); + + while (true) { + // 读取按键 + char ch; + if (read(STDIN_FILENO, &ch, 1) == 1) { + std::cout << "Keycode: " << static_cast(ch) << std::endl; + + // 按 'q' 键退出程序 + if (ch == 'q') { + break; + } + } + } + + // 恢复终端模式 + setRawMode(false); + return 0; +}