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 bufferSo for the example above you'd get: * line_buffer => "big brother" * point => 7 * end => 11From 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:<?phpfunction 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;}?>