lilawood
lilawood

Reputation: 2293

using readline() for completion

I've got a question about Readline Library.

I want to know if Readline can autocomplete filename from directories in a C program ?

I've searched and only seen command name completion.

thanks in advance.

EDIT: I've copy filename in an array. These as functions that I use : in the file rline.c, char *command_generator,char **tab_completion (const char *text, int start, int end),void initialize_readline (). I think I have to use char * filename_completion_function (char *text, int state) ? When I type on "tab" key, it calls nothing, bind() didn't seem to be used. Do you know if I use right functions ? thanks !!

Upvotes: 10

Views: 35479

Answers (3)

user4832408
user4832408

Reputation:

To use the readline library specify -lreadline to your compiler. The following code snippet can be compiled with

cc some.c -o some -lreadline


#include <stdio.h>

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

int main()
{
        char *inpt;

        int i = 0;

        while ( i < 10 )
        {
                inpt = readline("Enter text: ");
                add_history(inpt);
                printf("%s", inpt);
                printf("\n");
                ++i;
        }

        return 0;

}

Upvotes: 8

unkulunkulu
unkulunkulu

Reputation: 11922

Filename completion is a built-in feature of readline, you don't need to populate filename lists etc. Here with readline 6.1 the following program allows filename completion by default.

#include <stdio.h>
#include <stdlib.h>

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

int main()
{
    printf( "%s\n", readline( "test> " ) );
    return 0;
}

There are ways to customize this mechanism, e.g. you can specify some functions like rl_filename_quoting_function and rl_filename_dequoting_function to help readline provide proper filename quotation for your application.

I think you need to specify your version of readline if this doesn't work for you. /etc/inputrc contents should be examined as well. Do you have bash, which uses readline? Does the filename completion work there as expected? Anyway, info readline is a very good documentation provided you can use info itself :) If not, look at Programming with GNU Readline.

Upvotes: 17

Jesus Ramos
Jesus Ramos

Reputation: 23266

I was confused about the readline you were referring to but it was pointed out to me that you meant the one from the GNU libraries.

For an example of this please see Fredrik's link to the GNU Readline library that does just that.

To apply this to your needs instead of the string cmd[] that you see you need to use an array of all the file names in the current directory and the rest of the code should be about the same.

Upvotes: 1

Related Questions