sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 42d3b7ab9658cb59b5f41cb3bbb6fb2c59726876
parent df8eafeabeec16727c5d0b20784385f6c99f81aa
Author: wmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Date:   Wed,  1 Aug 2007 16:06:55 +0000

edit labels within thread-view-mode

git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@513 5c8cc53c-5e98-4d25-b20a-d8db53a31250

Diffstat:
M lib/sup/buffer.rb | 1 +
M lib/sup/modes/thread-index-mode.rb | 2 +-
M lib/sup/modes/thread-view-mode.rb | 17 +++++++++++++++--
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb
@@ -394,6 +394,7 @@ class BufferManager
 
   ## returns an array of labels
   def ask_for_labels domain, question, default_labels, forbidden_labels=[]
+    default_labels = default_labels - forbidden_labels - LabelManager::RESERVED_LABELS
     default = default_labels.join(" ")
     default += " " unless default.empty?
 
diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb
@@ -90,7 +90,7 @@ class ThreadIndexMode < LineCursorMode
     threads.each { |t| select t }
   end
   
-  def handle_starred_update sender, m
+  def handle_label_update sender, m
     t = @ts.thread_for(m) or return
     l = @lines[t] or return
     update_text_for_line l
diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb
@@ -19,6 +19,7 @@ class ThreadViewMode < LineCursorMode
     k.add :toggle_expanded, "Expand/collapse item", :enter
     k.add :expand_all_messages, "Expand/collapse all messages", 'E'
     k.add :edit_draft, "Edit draft", 'e'
+    k.add :edit_labels, "Edit or add labels for a thread", 'l'
     k.add :expand_all_quotes, "Expand/collapse all quotes in a message", 'o'
     k.add :jump_to_next_open, "Jump to next open message", 'n'
     k.add :jump_to_prev_open, "Jump to previous open message", 'p'
@@ -134,6 +135,18 @@ class ThreadViewMode < LineCursorMode
     mode.edit
   end    
 
+  def edit_labels
+    m = @message_lines[curpos] or return
+    new_labels = BufferManager.ask_for_labels :label, "Labels for message: ", m.labels
+
+    return unless new_labels
+    m.labels = new_labels
+    new_labels.each { |l| LabelManager << l }
+    ## TODO: don't recalculate EVERYTHING
+    update
+    UpdateManager.relay self, :label, m
+  end
+
   def toggle_starred
     m = @message_lines[curpos] or return
     if m.has_label? :starred
@@ -144,7 +157,7 @@ class ThreadViewMode < LineCursorMode
     ## TODO: don't recalculate EVERYTHING just to add a stupid little
     ## star to the display
     update
-    UpdateManager.relay self, :starred, m
+    UpdateManager.relay self, :label, m
   end
 
   def toggle_expanded
@@ -281,7 +294,7 @@ class ThreadViewMode < LineCursorMode
     BufferManager.kill_buffer_safely buffer
   end
 
-private 
+private
 
   def toggle_chunk_expansion chunk
     l = @chunk_layout[chunk]