Я работаю над приложением, которое использует 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, просто добавив двойные кавычки (") к именам файлов.