Readline & Inputrc

linux 많은 프로그램이 readline library 사용한다. readline library STDIN으로부터 사용자의 입력에 대한 전처리(preprocess) 담당한다 enter 입력되기 전까지의 edit, copy, paste, tab completion, cursor move, history selection 등의 일련의 과정을 수행하게 된다따라서 비록 1 line혹은 많아야  line이긴 하지만 editing 기능을 지원하므로 key-mapping 통한 command-completion 가능하다따라서 전통적으로 bash mySQL command line등에서 사용된다.

readline library 동작하는 방법과 사용방법은 다음과 같다.

int main()
{
    char* input, shell_prompt[100];
     // Configure readline to auto-complete paths when the tab key is hit. readline이 어떻게 동작할지 key-binding등을 설정하는 부분
    rl_bind_key('\t', rl_complete);
 
    for(;;) {
        // Create prompt string from user name and current working directory.
        snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024));
 
        // Display prompt and read input (n.b. input must be freed after use)... 전처리후 읽어오는 부분
        input = readline(shell_prompt); 
 
        // Check for EOF.
        if (!input)
            break;
 
        // Add input to history. history에 추가하는 부분
        add_history(input);
 
        // Do stuff...
 
        // Free input.
        free(input);
    }
}