From: William Morgan Date: Wed, 9 Sep 2009 14:36:07 +0000 (-0400) Subject: Merge branch 'master' into next X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=110d48bc15247b2fa42782eed00bc7cabd4d83e8;hp=-c;p=sup Merge branch 'master' into next --- 110d48bc15247b2fa42782eed00bc7cabd4d83e8 diff --combined lib/sup/modes/thread-view-mode.rb index 8ab1d85,1c38fbb..47dd471 --- a/lib/sup/modes/thread-view-mode.rb +++ b/lib/sup/modes/thread-view-mode.rb @@@ -1,3 -1,4 +1,3 @@@ -require 'open3' module Redwood class ThreadViewMode < LineCursorMode @@@ -64,6 -65,9 +64,9 @@@ EO k.add :unsubscribe_from_list, "Subscribe to/unsubscribe from mailing list", ")" k.add :pipe_message, "Pipe message or attachment to a shell command", '|' + k.add :archive_and_next, "Archive this thread, kill buffer, and view next", 'a' + k.add :delete_and_next, "Delete this thread, kill buffer, and view next", 'd' + k.add_multi "(a)rchive/(d)elete/mark as (s)pam/mark as u(N)read:", '.' do |kk| kk.add :archive_and_kill, "Archive this thread and kill buffer", 'a' kk.add :delete_and_kill, "Delete this thread and kill buffer", 'd' @@@ -360,16 -364,16 +363,16 @@@ end end - def jump_to_first_open loose_alignment=false + def jump_to_first_open m = @message_lines[0] or return if @layout[m].state != :closed - jump_to_message m, loose_alignment + jump_to_message m#, true else - jump_to_next_open loose_alignment + jump_to_next_open #true end end - def jump_to_next_open loose_alignment=false + def jump_to_next_open force_alignment=nil return continue_search_in_buffer if in_search? # hack: allow 'n' to apply to both operations m = (curpos ... @message_lines.length).argfind { |i| @message_lines[i] } return unless m @@@ -377,15 -381,15 +380,15 @@@ break if @layout[nextm].state != :closed m = nextm end - jump_to_message nextm, loose_alignment if nextm + jump_to_message nextm, force_alignment if nextm end def align_current_message m = @message_lines[curpos] or return - jump_to_message m + jump_to_message m, true end - def jump_to_prev_open loose_alignment=false + def jump_to_prev_open m = (0 .. curpos).to_a.reverse.argfind { |i| @message_lines[i] } # bah, .to_a return unless m ## jump to the top of the current message if we're in the body; @@@ -397,33 -401,38 +400,33 @@@ break if @layout[prevm].state != :closed m = prevm end - jump_to_message prevm, loose_alignment if prevm + jump_to_message prevm if prevm else - jump_to_message m, loose_alignment + jump_to_message m end end - IDEAL_TOP_CONTEXT = 3 # try and give 3 rows of top context - IDEAL_LEFT_CONTEXT = 4 # try and give 4 columns of left context - def jump_to_message m, loose_alignment=false + def jump_to_message m, force_alignment=false l = @layout[m] - left = l.depth * INDENT_SPACES - right = left + l.width - ## jump to the top line - if loose_alignment - jump_to_line [l.top - IDEAL_TOP_CONTEXT, 0].max # give 3 lines of top context - else - jump_to_line l.top + ## boundaries of the message + message_left = l.depth * INDENT_SPACES + message_right = message_left + l.width + + ## calculate leftmost colum + left = if force_alignment # force mode: align exactly + message_left + else # regular: minimize cursor movement + ## leftmost and rightmost are boundaries of all valid left-column + ## alignments. + leftmost = [message_left, message_right - buffer.content_width + 1].min + rightmost = message_left + leftcol.clamp(leftmost, rightmost) end - ## jump to the left column - ideal_left = left + - if loose_alignment - -IDEAL_LEFT_CONTEXT + (l.width - buffer.content_width + IDEAL_LEFT_CONTEXT + 1).clamp(0, IDEAL_LEFT_CONTEXT) - else - 0 - end - - jump_to_col [ideal_left, 0].max - - ## either way, move the cursor to the first line - set_cursor_pos l.top + jump_to_line l.top # move vertically + jump_to_col left # move horizontally + set_cursor_pos l.top # set cursor pos end def expand_all_messages