*sortable* is a :class:`gtk.TreeSortable` instance.

    *callback* will be passed two items and must return a value like
    the built-in `cmp`.

    *column* is an integer adressing the column that holds items.

    This will re-sort even if *callback* is the same as before.

    .. note::
       When sorting a `ListStore` without a `TreeModelSort` you have to call
       `set_sort_column_id(-1, gtk.SORT_ASCENDING)` once, *after* this.

def set_sort_function(sortable, callback, column=0):
    """
    *sortable* is a :class:`gtk.TreeSortable` instance.

    *callback* will be passed two items and must return a value like
    the built-in `cmp`.

    *column* is an integer adressing the column that holds items.

    This will re-sort even if *callback* is the same as before.

    .. note::
       When sorting a `ListStore` without a `TreeModelSort` you have to call
       `set_sort_column_id(-1, gtk.SORT_ASCENDING)` once, *after* this.
    """
    sortable.set_default_sort_func(
        lambda tree, itera, iterb: _normalize(callback(
            tree.get_value(itera, column),
            tree.get_value(iterb, column)
            ))
        )