GNU readline цитирование пробелов

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


person mfontanini    schedule 05.02.2011    source источник


Ответы (1)


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

cd "/path/to/some where"
person vinnyspb    schedule 05.02.2011
comment
Да, это возможность. Но мой вопрос в том, как добиться этого с помощью readline. Существует множество переменных и обратных вызовов, которые можно установить на все, что я захочу, чтобы readline цитировал пробелы, как и ожидалось. Я просматриваю исходный код bash и начинаю его понимать. Тем не менее, я еще не сделал этого. - person mfontanini; 05.02.2011