栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

linenoise的使用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linenoise的使用

linenoise是一个line editing library,即命令行编辑库,地址是https://github.com/antirez/linenoise

官方介绍如下,

使用起来有点像dos终端,本文讲述如何使用linenoise


一 使用 1. 下载linenoise

github上没有release的库,只有tag库,地址是https://github.com/antirez/linenoise/tags,进入后点击zip下载,

2. 创建工程

新建目录linenoise_test,然后把下载下来的linenoise库解压到该目录下,并重命名为linenoise,同时创建build目录,src目录和src/main.c,以及CMakeLists.txt,最后结构如下

main.c内容如下,

#include 
#include 

#include "linenoise.h"


int main()
{
    char* line = NULL;
    while ((line = linenoise("hello> ")) != NULL)
    {
        printf("Your wrote: %sn", line);
        free(line);
    }
    
    return 0;
}

CMakeLists.txt的内容如下,

cmake_minimum_required(VERSION 3.5)

project(demo)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/linenoise)

set(SRC_FILE
    ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
    ${CMAKE_CURRENT_SOURCE_DIR}/linenoise/linenoise.c
)

add_executable(demo ${SRC_FILE})
3. 测试

cd到build目录,然后执行下面命令进行编译,

cmake .. && make

最后运行build目录下的demo,如下,

可以看到使用这个库可以创造出一个终端,给用户使用,"hello>"是终端提示符,英文叫prompt

4. 彩色提示符

可以给终端提示符加上颜色,main.c修改如下,

#include 
#include 

#include "linenoise.h"

#define NONE "33[m"
#define GREEN "33[0;32;32m"

int main()
{
    char* line = NULL;
    while ((line = linenoise(GREEN"hello> "NONE)) != NULL)
    {
        printf("Your wrote: %sn", line);
        free(line);
    }
    
    return 0;
}

最后运行如下,

5. tab补全

linenoise同时支持tab补全,即在提示符后输入一个字符,然后按tab键可以自动补全,linenoise目录里有一个example.c,把它加入到编译工程里,CMakeLists.txt改成如下,

cmake_minimum_required(VERSION 3.5)

project(demo)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/linenoise)

set(SRC_FILE
    ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
    ${CMAKE_CURRENT_SOURCE_DIR}/linenoise/linenoise.c
)

set(EXAMPLE_SRC_FILE
    ${CMAKE_CURRENT_SOURCE_DIR}/linenoise/example.c
    ${CMAKE_CURRENT_SOURCE_DIR}/linenoise/linenoise.c
)

add_executable(demo ${SRC_FILE})

add_executable(example ${EXAMPLE_SRC_FILE})

最后编译生成example,然后运行,接着在提示符后输入h,如下,

此时按tab键,就会自动补全为"hello",

再按一次tab,又会自动补全为"hello there",

如果再按tab,就会回到"h",开始循环

example.c里定义了一个回调函数completion,

void completion(const char *buf, linenoiseCompletions *lc) {
    if (buf[0] == 'h') {
        linenoiseAddCompletion(lc,"hello");
        linenoiseAddCompletion(lc,"hello there");
    }
}

在main函数里会使用linenoiseSetCompletionCallback()注册这个回调,这样输入“h”然后按tab键,就会触发这个回调进行补全。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935306.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号