Я работаю над приложением, которое использует readline для чтения команд из stdin. Он принимает «cd» и другие команды, которым требуется путь в качестве аргумента. У меня проблемы с путями, которые включают пробелы. Моя цель состоит в том, чтобы каким-то образом сделать readline цитатой пробелами и автозаполнять имя пути после появления этого символа (фактически, когда пространство встречается, оно просто пропущено, а автозаполнение начинается со следующего слова).GNU readline whitespace цитирует
Я пытался достичь этого, но я продолжаю пытаться, и никто из них не работает. Мне удалось процитировать «» в «\», чего я хочу. Но тогда 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-Никс, просто добавив двойные кавычки (") в именах файлов
Да, это возможность. Но мой вопрос заключается в том, как добиться этого с помощью readline. Существует множество переменных и обратных вызовов, которые могут быть настроены так, как я хочу, чтобы readline котирует пробелы, как и ожидалось. Посмотрите на исходный код bash, и я начинаю его получать. Howerver, я еще этого не сделал. – mfontanini