From b30886228c546f99f974b64101f6ca164cea25e4 Mon Sep 17 00:00:00 2001 From: axel Date: Sat, 18 Nov 2006 09:37:26 +1000 Subject: Speed up history token search darcs-hash:20061117233726-ac50b-eb7ef60b837a4dd5fee61c7a692d8210fdcc4719.gz --- reader.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/reader.c b/reader.c index a1656760..5730606b 100644 --- a/reader.c +++ b/reader.c @@ -1368,12 +1368,31 @@ static void handle_token_history( int forward, int reset ) { if( current_pos == -1 ) { + wchar_t *item; + /* Move to previous line */ - free( (void *)data->token_history_buff ); - data->token_history_buff = wcsdup( history_prev_match(L"") ); + free( (void *)data->token_history_buff ); + + /* + Search for previous item that contains this substring + */ + item = history_prev_match(data->search_buff); + + /* + If there is no match, the original string is returned + + If so, we clear the match string to avoid infinite loop + */ + if( wcscmp( item, data->search_buff ) == 0 ) + { + item=L""; + } + + data->token_history_buff = wcsdup( item ); current_pos = wcslen(data->token_history_buff); + } if( ! wcslen( data->token_history_buff ) ) -- cgit v1.2.3