]> git.notmuchmail.org Git - sup/commitdiff
don't collapse one-line quotes and signatures
authorwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Sat, 20 Jan 2007 01:19:56 +0000 (01:19 +0000)
committerwmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Sat, 20 Jan 2007 01:19:56 +0000 (01:19 +0000)
git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@268 5c8cc53c-5e98-4d25-b20a-d8db53a31250

lib/sup/message.rb
lib/sup/modes/thread-view-mode.rb

index 2ab285974567f6cabb078ddd0a28f03b51fa19db..9a6b2ccba0dad862cfa77f161567ecc32537dab4 100644 (file)
@@ -301,7 +301,7 @@ private
       when :quote
         newstate = nil
 
-        if line =~ QUOTE_PATTERN || line =~ QUOTE_START_PATTERN || line =~ /^\s*$/
+        if line =~ QUOTE_PATTERN || line =~ QUOTE_START_PATTERN #|| line =~ /^\s*$/
           chunk_lines << line
         elsif line =~ SIG_PATTERN && (lines.length - i) < MAX_SIG_DISTANCE
           newstate = :sig
index 0568f1bb320d316ef1f5e693a6f9e734ab12840c..1684233e5d52261947a76d81be69bd2e41e71943 100644 (file)
@@ -131,6 +131,7 @@ class ThreadViewMode < LineCursorMode
     chunk = @chunk_lines[curpos] or return
     case chunk
     when Message, Message::Quote, Message::Signature
+      return if chunk.lines.length == 1 unless chunk.is_a? Message # too small to expand/close
       l = @layout[chunk]
       l.state = (l.state != :closed ? :closed : :open)
       cursor_down if l.state == :closed
@@ -235,7 +236,7 @@ class ThreadViewMode < LineCursorMode
 
   def expand_all_quotes
     if(m = @message_lines[curpos])
-      quotes = m.chunks.select { |c| c.is_a?(Message::Quote) || c.is_a?(Message::Signature) }
+      quotes = m.chunks.select { |c| (c.is_a?(Message::Quote) || c.is_a?(Message::Signature)) && c.lines.length > 1 }
       numopen = quotes.inject(0) { |s, c| s + (@layout[c].state == :open ? 1 : 0) }
       newstate = numopen > quotes.length / 2 ? :closed : :open
       quotes.each { |c| @layout[c].state = newstate }
@@ -433,22 +434,20 @@ private
       end
       t.map { |line| [[:none, "#{prefix}#{line}"]] }
     when Message::Quote
+      return [[[:quote_color, "#{prefix}#{chunk.lines.first}"]]] if chunk.lines.length == 1
       case state
       when :closed
         [[[:quote_patina_color, "#{prefix}+ (#{chunk.lines.length} quoted lines)"]]]
       when :open
-        t = chunk.lines
-        [[[:quote_patina_color, "#{prefix}- (#{chunk.lines.length} quoted lines)"]]] +
-           t.map { |line| [[:quote_color, "#{prefix}#{line}"]] }
+        [[[:quote_patina_color, "#{prefix}- (#{chunk.lines.length} quoted lines)"]]] + chunk.lines.map { |line| [[:quote_color, "#{prefix}#{line}"]] }
       end
     when Message::Signature
+      return [[[:sig_patina_color, "#{prefix}#{chunk.lines.first}"]]] if chunk.lines.length == 1
       case state
       when :closed
         [[[:sig_patina_color, "#{prefix}+ (#{chunk.lines.length}-line signature)"]]]
       when :open
-        t = chunk.lines
-        [[[:sig_patina_color, "#{prefix}- (#{chunk.lines.length}-line signature)"]]] +
-           t.map { |line| [[:sig_color, "#{prefix}#{line}"]] }
+        [[[:sig_patina_color, "#{prefix}- (#{chunk.lines.length}-line signature)"]]] + chunk.lines.map { |line| [[:sig_color, "#{prefix}#{line}"]] }
       end
     else
       raise "unknown chunk type #{chunk.class.name}"