add:添加一个测试键位的工具。

This commit is contained in:
taynpg 2025-01-10 14:21:16 +08:00
parent 31ed6b75b8
commit ce813baf04
3 changed files with 58 additions and 2 deletions

View File

@ -26,6 +26,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}
add_library(filecomplete STATIC filecomplete.h filecomplete.cpp) add_library(filecomplete STATIC filecomplete.h filecomplete.cpp)
target_include_directories(filecomplete PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(filecomplete PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
add_executable(key_value key_value.cxx)
if(DEFINED GEN_EXAMPLE) if(DEFINED GEN_EXAMPLE)
message(STATUS "USE TEST") message(STATUS "USE TEST")
add_executable(example main.cpp) add_executable(example main.cpp)

View File

@ -11,8 +11,11 @@ MAIN_SRC = main.cpp
MAIN_OBJ = $(MAIN_SRC:.cpp=.o) MAIN_OBJ = $(MAIN_SRC:.cpp=.o)
TARGET = main 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) $(TARGET): $(LIB_OBJ) $(MAIN_OBJ)
@ -26,9 +29,13 @@ $(LIB_OBJ): $(LIB_SRC) $(LIB_HEADER)
$(MAIN_OBJ): $(MAIN_SRC) $(MAIN_OBJ): $(MAIN_SRC)
$(CXX) $(CXXFLAGS) -c $< -o $@ $(CXX) $(CXXFLAGS) -c $< -o $@
# 编译 key_value 二进制
$(KEY_VALUE_BIN): $(KEY_VALUE_SRC)
$(CXX) $(CXXFLAGS) -o $@ $<
# 清理生成文件 # 清理生成文件
clean: clean:
rm -f $(LIB_OBJ) $(MAIN_OBJ) $(TARGET) rm -f $(LIB_OBJ) $(MAIN_OBJ) $(TARGET) $(KEY_VALUE_BIN)
# 伪目标 # 伪目标
.PHONY: all clean .PHONY: all clean

47
key_value.cxx Normal file
View File

@ -0,0 +1,47 @@
#include <iostream>
#include <termios.h>
#include <unistd.h>
// 设置终端为原始模式
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<int>(ch) << std::endl;
// 按 'q' 键退出程序
if (ch == 'q') {
break;
}
}
}
// 恢复终端模式
setRawMode(false);
return 0;
}