2011-02-05 4 views
1

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

ответ

2

Try, чтобы избежать не пробелы, но весь путь, например:.

cd "/path/to/some where" 
+0

Да, это возможность. Но мой вопрос заключается в том, как добиться этого с помощью readline. Существует множество переменных и обратных вызовов, которые могут быть настроены так, как я хочу, чтобы readline котирует пробелы, как и ожидалось. Посмотрите на исходный код bash, и я начинаю его получать. Howerver, я еще этого не сделал. – mfontanini