Skip to content

gnu readline: How to keep a history list of entered command lines

When I was assigned a project to create a text console based simulator, I am looking into how to keep a history list of entered command lines like Bash Shell. Users are allow to search through the history list by hitting UP and DOWN arrow key.

GNU readline library provides this feature, and it is pretty easy to use. Lets look at the example below:

// simple_rl.cpp
#include <stdio.h>
#include <stdlib.h>

#include <readline/readline.h>
#include <readline/history.h>

int main()
{
    char *buf;

    rl_bind_key('\t',rl_abort);//disable auto-complete

    while((buf = readline("\n >> "))!=NULL)
    {
        if (strcmp(buf,"quit")==0)
            break;

        printf("[%s]\n",buf);

        if (buf[0]!=0)
            add_history(buf);
    }

    free(buf);

    return 0;
}

I use rl_bind_key() to disable the tab key for file auto-complete that enabled by default. I will write another post for custom auto-complete using libreadline soon. add_history() is used to add the enterd inputs into the history list, and key bindings to arrow keys are enabled by default.

Compile it with g++ now:

g++ -o simple_rl{,.cpp} -lreadline

That is it, simple and nice :)

Categories: Uncategorized.

Comment Feed

5 Responses

  1. Presumably the topic on gadgets collections from Visitthebest was so merit to me. Wished to inform about this site to all of my net friends.

  2. thanx again. I find that this site is very handy.

  3. fails to compile , weird ?

    linking problem or what ?

    l3thalAugust 1, 2009 @ 7:47 am



Some HTML is OK

or, reply to this post via trackback.

Continuing the Discussion

  1. [...] gnu readline: How to keep a history list of entered command lines [...]

  2. How to keep a history list of entered command lines…

    This example shows how to keep a history list of entered commands in linux using GNU readline library…