A little bit of info regarding useful variables when writing your callback function.
There doesn't seem to be a way to set rl_basic_word_break_characters like with the pure C library, so as previous users have pointed out you'll only receive the current word in the input buffer within your callback. If for example you're typing "big bro|ther", where the bar is the position of your cursor when you hit TAB, you'll receive (string) "brother" and (int) 4 as your callback parameters.
However, it is possible (easily) to get more useful information about what the user has typed into the readline buffer. readline_info() is key here. It will return an array containing:
"line_buffer" => (string)
the entire contents of the line buffer (+ some bugs**)
"point" => (int)
the current position of the cursor in the buffer
"end" => (int)
the position of the last character in the buffer
So for the example above you'd get:
* line_buffer => "big brother"
* point => 7
* end => 11
From this you can easily perform multi-word matches.
** NOTE: line_buffer seems to contain spurious data at the end of the string sometime. Fortunately since $end is provided you can substr() it to get the correct value.
The matches you need to return are full words that can replace $input, so your algorithm might crudely look something like:
<?php
function your_callback($input, $index) {
$rl_info = readline_info();
$full_input = substr($rl_info['line_buffer'], 0, $rl_info['end']);
$matches = array();
foreach (phrases_that_begin_with($full_input) as $phrase) {
$matches[] = substr($phrase, $index);
}
return $matches;
}
?>