Я работаю над приложением, которое использует readline для чтения команд из стандартного ввода. Он принимает "cd" и другие команды, которым требуется путь в качестве аргумента. У меня проблемы с путями, содержащими пробелы. Моя цель состоит в том, чтобы каким-то образом заставить readline цитировать пробелы и автозаполнять путь после появления этого символа (на самом деле, когда встречается пробел, он просто пропускается, и автодополнение начинается со следующего слова).
Я пытался добиться этого, но я продолжаю пробовать разные вещи, и ни один из них не работает. Мне удалось процитировать "" в "\", чего я и хочу. Но тогда readline не интерпретирует это как часть пути, он просто пропускает его и автоматически дополняет следующее слово, как будто до этого ничего не было. По сути, я ожидаю того же поведения, что и автозаполнение bash.
Любая помощь приветствуется. Заранее спасибо!
Редактировать:
Итак, мне удалось каким-то образом выполнить то, что я искал. Что я сделал:
Во время инициализации:
rl_attempted_completion_function = completition;
rl_completer_quote_characters = "\"";
rl_filename_quote_characters = " ";
завершение должно возвращать char **, содержащий каждую команду, которая соответствует тому, что «текст» на данный момент. Я опустил эту часть, так как она не имеет отношения к тому, о чем я спрашивал. Важной частью является rl_filename_quoting_desired = 1; который сообщает readline, что вы хотите, чтобы ваши имена файлов были заключены в кавычки.
char **completition(const char *text, int start, int end) {
rl_filename_quoting_desired = 1;
return 0;
}
Обратите внимание, что в итоге я сделал то, что сказал BuHHu-nyx, просто добавив двойные кавычки ("") к именам файлов.