GNU readline цитирование пробелов - PullRequest
1 голос
/ 05 февраля 2011

Я работаю над приложением, которое использует readline для чтения команд из stdin. Он принимает «cd» и другие команды, которые требуют путь в качестве аргумента. У меня проблемы с путями, которые включают пробелы. Моя цель - каким-то образом заставить readline заключить в кавычки пробелы и автозаполнить имя пути после появления этого символа (фактически, когда встречается пробел, он просто пропускается, и автозаполнение начинается со следующего слова).

Я пытался достичь этого, но я продолжаю пробовать вещи, и ни одна из них не работает. Мне удалось процитировать "" в "\", что я и хочу. Но затем readline не интерпретирует это как часть пути, он просто пропускает его и автоматически завершает следующее слово, как будто ничего не было до этого. По сути, я ожидаю того же поведения, что и автозаполнение bash.

Любая помощь приветствуется. Заранее спасибо!

Edit:

Хорошо, так что мне удалось как-то выполнить то, что я искал. То, что я сделал, было:

Во время инициализации:

rl_attempted_completion_function = completition;
rl_completer_quote_characters = "\"";
rl_filename_quote_characters  = " ";

Завершение должно возвращать символ **, содержащий каждую команду, которая соответствует тому, что "текст" до сих пор. Я пропустил эту часть, поскольку она не имеет отношения к тому, что я просил. Важной частью является rl_filename_quoting_desired = 1; который сообщает readline, что вы хотите, чтобы ваши имена были в кавычках.

char **completition(const char *text, int start, int end) {    
    rl_filename_quoting_desired = 1;
    return 0;
}

Обратите внимание, что я закончил тем, что сказал BuHHu-nyx, просто добавив двойные кавычки (") к именам файлов.

1 Ответ

2 голосов
/ 05 февраля 2011

Старайтесь избегать не пробелов, а всего пути. Например:

cd "/path/to/some where"
...