On Thursday, 7 September 2017 at 13:44:52 UTC, Adam D. Ruppe wrote:
On Thursday, 7 September 2017 at 13:37:16 UTC, Nordlöw wrote:
Have anybody cooked together high-level bindings on top of the C-bindings for libreadline here

Have you ever used readline?

The basic C api is already very high level:


char* from_user = readline("Prompt> ");


I don't think there's a lot to gain by wrapping that...

There's always room for usability improvements when wrapping C APIs...

Here's what I hacked together:

version = readline;
extern(C) void add_history(const char*); // missing from gnu.readline
/**
   High-level wrapper around GNU libreadline.
 */
const(char)[] readLine(in string prompt,
                       bool useHistory = true)
{
    version(readline)
    {
        import gnu.readline : readline;
        import std.string : toStringz, fromStringz;
        const lineStringz = readline(prompt.toStringz);
        if (useHistory)
        {
            add_history(lineStringz);
        }
        return lineStringz.fromStringz;
    }
    else
    {
        write(prompt); stdout.flush;
        return readln.strip;
    }
}

Reply via email to