使用readline让单文件命令行版的eigenmath支持历史记录
常见的具有命令行交互的软件,例如bash、python等,在输完一行后,按上下键可以切换显示之前输入的行,即历史记录。单文件版的eigenmath(GitHub:https://github.com/georgeweigt/eigenmath)没有依赖任何的第三方库,且CLI部分没有实现历史记录功能。本文记录了使用readline给该软件添加简单的历史记录的功能。
平台为Debian 12。使用readline需要安装开发库:
sudo apt install libreadline-dev
在eigenmath.c中添加readline的相关头文件:
#include <readline/readline.h>
#include <readline/history.h>
原版的run_stdin使用fgets读取输入,方向键会直接输入为键码。将run_stdin函数修改为如下内容:
void run_stdin(void)
{
char *instr;
while(1)
{
instr=readline(">");
run(instr);
add_history(instr);
free(instr);
}
}
编译:
gcc -O3 -o eigenmath eigenmath.c -lm -lreadline
该编译完成的修改后的eigenmath即具有简单的历史记录功能,可通过上下键找到之前输入的表达式。
源代码仓库已fork并修改在此仓库中:https://github.com/Ayahuasec/eigenmath_with_readline