anchor.diff:  	   end,
       lists:sort(Sort, Table).
   
  +search([Term, -1, true, term], S=#holder{parent=Parent, table=Table}) ->
  +    Search = fun(Idx, [Tuple|_]) ->
  +                     Tuple =:= Term andalso throw(Idx),
  +                     Tuple
  +             end,
  +    try array:map(Search, Table) of
  +        _ -> Parent ! {self(), false}
  +    catch Index ->
  +            Parent ! {self(), Index}
  +    end,
  +    S;
   search([Str, Row, Dir0, CaseSens],
          S=#holder{parent=Parent, n=N, table=Table}) ->
       Opt = case CaseSens of
  
positive.code: 	    From ! {self(), format(Object)};
  	[Object|_] when Col =:= all_multiline ->
  	    From ! {self(), io_lib:format("~p", [Object])};
  	[Object|_] when tuple_size(Object) >= Col ->
  	    From ! {self(), format(element(Col, Object))};
  	_ ->
  
negative.code:     {noreply, State};
  
  handle_event(#wx{event=#wxList{type=command_list_col_click, col=Col}},
  	     State = #state{pid=Pid, grid=Grid, selected=OldSel}) ->
      SelObj = case OldSel of
                   undefined -> undefined;
                   _ -> get_row(Pid, OldSel, term)
               end,
      Pid ! {sort, Col+1},
      case SelObj =/= undefined andalso search(Pid, SelObj, -1, true, term) of
          false when is_integer(OldSel) ->
              wxListCtrl:setItemState(Grid, OldSel, 0, ?wxLIST_STATE_SELECTED),
              {noreply, State#state{selected=undefined}};
          false ->
              {noreply, State#state{selected=undefined}};
          Row ->
              wxListCtrl:setItemState(Grid, Row, 16#FFFF, ?wxLIST_STATE_SELECTED),
              {noreply, State#state{selected=Row}}
      end;
  
  handle_event(#wx{event=#wxSize{size={W,_}}},  State=#state{grid=Grid}) ->
      observer_lib:set_listctrl_col_size(Grid, W),
  