# File lib/sup/modes/thread-index-mode.rb, line 528
  def edit_labels
    thread = cursor_thread or return
    speciall = (@hidden_labels + LabelManager::RESERVED_LABELS).uniq

    old_labels = thread.labels
    pos = curpos

    keepl, modifyl = thread.labels.partition { |t| speciall.member? t }

    user_labels = BufferManager.ask_for_labels :label, "Labels for thread: ", modifyl, @hidden_labels
    return unless user_labels

    thread.labels = Set.new(keepl) + user_labels
    user_labels.each { |l| LabelManager << l }
    update_text_for_line curpos

    UndoManager.register "labeling thread" do
      thread.labels = old_labels
      update_text_for_line pos
      UpdateManager.relay self, :labeled, thread.first
      Index.save_thread thread
    end

    UpdateManager.relay self, :labeled, thread.first
    Index.save_thread thread
  end