diff -crB ./src/command_network.cc ../rtorrent-0.8.9/src/command_network.cc
*** ./src/command_network.cc	2011-06-21 10:46:48.000000000 +0400
--- ../rtorrent-0.8.9/src/command_network.cc	2011-07-04 23:06:05.357638865 +0400
***************
*** 618,623 ****
--- 618,632 ----
    CMD2_VAR_BOOL    ("log.handshake", false);
    CMD2_VAR_STRING  ("log.tracker",   "");
  
+   CMD2_ANY         ("colors.done_fg_color",       std::bind(&ui::Root::get_done_fg_color,   control->ui()));
+   CMD2_ANY_VALUE_V ("colors.done_fg_color.set",   std::bind(&ui::Root::set_done_fg_color,   control->ui(), std::placeholders::_2));
+   CMD2_ANY         ("colors.done_bg_color",       std::bind(&ui::Root::get_done_bg_color,   control->ui()));
+   CMD2_ANY_VALUE_V ("colors.done_bg_color.set",   std::bind(&ui::Root::set_done_bg_color,   control->ui(), std::placeholders::_2));
+   CMD2_ANY         ("colors.active_fg_color",     std::bind(&ui::Root::get_active_fg_color, control->ui()));
+   CMD2_ANY_VALUE_V ("colors.active_fg_color.set", std::bind(&ui::Root::set_active_fg_color, control->ui(), std::placeholders::_2));
+   CMD2_ANY         ("colors.active_bg_color",     std::bind(&ui::Root::get_active_bg_color, control->ui()));
+   CMD2_ANY_VALUE_V ("colors.active_bg_color.set", std::bind(&ui::Root::set_active_bg_color, control->ui(), std::placeholders::_2));
+ 
    // CMD2_ANY_STRING  ("encoding_list",    std::bind(&apply_encoding_list, std::placeholders::_2));
    CMD2_ANY_STRING  ("encoding.add", std::bind(&apply_encoding_list, std::placeholders::_2));
  
diff -crB ./src/display/canvas.cc ../rtorrent-0.8.9/src/display/canvas.cc
*** ./src/display/canvas.cc	2011-04-07 16:36:51.000000000 +0400
--- ../rtorrent-0.8.9/src/display/canvas.cc	2011-07-04 18:35:47.043169684 +0400
***************
*** 99,104 ****
--- 99,108 ----
    m_isInitialized = true;
  
    initscr();
+   start_color();
+   use_default_colors();
+   init_pair(2, -1, -1);
+   init_pair(1, -1, -1);
    raw();
    noecho();
    nodelay(stdscr, TRUE);
diff -crB ./src/display/window_download_list.cc ../rtorrent-0.8.9/src/display/window_download_list.cc
*** ./src/display/window_download_list.cc	2011-04-05 14:26:07.000000000 +0400
--- ../rtorrent-0.8.9/src/display/window_download_list.cc	2011-07-04 19:17:45.946576445 +0400
***************
*** 37,42 ****
--- 37,43 ----
  #include "config.h"
  
  #include <rak/algorithm.h>
+ #include <torrent/rate.h>
  
  #include "core/download.h"
  #include "core/view.h"
***************
*** 96,107 ****
      char* position;
      char* last = buffer + m_canvas->width() - 2 + 1;
  
      position = print_download_title(buffer, last, *range.first);
!     m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer);
!     
      position = print_download_info(buffer, last, *range.first);
      m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer);
  
      position = print_download_status(buffer, last, *range.first);
      m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer);
  
--- 97,128 ----
      char* position;
      char* last = buffer + m_canvas->width() - 2 + 1;
  
+     if( pos >= m_canvas->height() ) break;
      position = print_download_title(buffer, last, *range.first);
! 
!     m_canvas->print(0, pos, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer);
!     if( (*range.first)->is_done() ) {
!       if( (*range.first)->download()->info()->up_rate()->rate() != 0 ) {
!         m_canvas->set_attr(0, pos, m_canvas->width()-1, A_BOLD, 2);
!       } else {
!         m_canvas->set_attr(0, pos, m_canvas->width()-1, A_NORMAL, 2);
!       }
!     } else if( (*range.first)->is_active() ) {
!       if( (*range.first)->download()->info()->down_rate()->rate() != 0 ) {
!         m_canvas->set_attr(0, pos, m_canvas->width()-1, A_BOLD, 1);
!       } else {
!         m_canvas->set_attr(0, pos, m_canvas->width()-1, A_NORMAL, 1);
!       }
!     }
!     pos++;
! 
!     if( pos >= m_canvas->height() ) break;
!    
      position = print_download_info(buffer, last, *range.first);
      m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer);
  
+     if( pos >= m_canvas->height() ) break;
+ 
      position = print_download_status(buffer, last, *range.first);
      m_canvas->print(0, pos++, "%c %s", range.first == m_view->focus() ? '*' : ' ', buffer);
  
***************
*** 109,112 ****
--- 130,169 ----
    }    
  }
  
+ void
+ WindowDownloadList::set_done_fg_color(int64_t color) {
+   short fg, bg;
+   pair_content(2, &fg, &bg);
+   if( color < 0 ) color = -1;
+   color = color % 8;
+   init_pair(2, (short)color, bg);
+ }
+ 
+ void
+ WindowDownloadList::set_done_bg_color(int64_t color) {
+   short fg, bg;
+   pair_content(2, &fg, &bg);
+   if( color < 0 ) color = -1;
+   color = color % 8;
+   init_pair(2, fg, (short)color);
+ }
+ 
+ void
+ WindowDownloadList::set_active_fg_color(int64_t color) {
+   short fg, bg;
+   pair_content(1, &fg, &bg);
+   if( color < 0 ) color = -1;
+   color = color % 8;
+   init_pair(1, (short)color, bg);
+ }
+ 
+ void
+ WindowDownloadList::set_active_bg_color(int64_t color) {
+   short fg, bg;
+   pair_content(1, &fg, &bg);
+   if( color < 0 ) color = -1;
+   color = color % 8;
+   init_pair(1, fg, (short)color);
+ }
+ 
  }
diff -crB ./src/display/window_download_list.h ../rtorrent-0.8.9/src/display/window_download_list.h
*** ./src/display/window_download_list.h	2011-04-05 14:26:07.000000000 +0400
--- ../rtorrent-0.8.9/src/display/window_download_list.h	2011-07-04 18:29:05.836348290 +0400
***************
*** 59,64 ****
--- 59,68 ----
    virtual void        redraw();
  
    void                set_view(core::View* l);
+   void                set_done_fg_color(int64_t color);
+   void                set_done_bg_color(int64_t color);
+   void                set_active_fg_color(int64_t color);
+   void                set_active_bg_color(int64_t color);
  
  private:
    core::View*         m_view;
diff -crB ./src/main.cc ../rtorrent-0.8.9/src/main.cc
*** ./src/main.cc	2011-06-12 10:43:04.000000000 +0400
--- ../rtorrent-0.8.9/src/main.cc	2011-07-04 23:06:39.604566031 +0400
***************
*** 365,370 ****
--- 365,375 ----
      CMD2_REDIRECT        ("ip",         "network.local_address.set");
      CMD2_REDIRECT        ("port_range", "network.port_range.set");
  
+     CMD2_REDIRECT       ("done_fg_color", "colors.done_fg_color.set");
+     CMD2_REDIRECT       ("done_bg_color", "colors.done_bg_color.set");
+     CMD2_REDIRECT       ("active_fg_color", "colors.active_fg_color.set");
+     CMD2_REDIRECT       ("active_bg_color", "colors.active_bg_color.set");
+ 
      CMD2_REDIRECT_GENERIC("dht",      "dht.mode.set");
      CMD2_REDIRECT_GENERIC("dht_port", "dht.port.set");
  
diff -crB ./src/ui/download_list.cc ../rtorrent-0.8.9/src/ui/download_list.cc
*** ./src/ui/download_list.cc	2011-04-05 14:26:12.000000000 +0400
--- ../rtorrent-0.8.9/src/ui/download_list.cc	2011-07-04 18:28:27.460713769 +0400
***************
*** 137,142 ****
--- 137,147 ----
    current_view()->next_focus();
  }
  
+ display::WindowDownloadList*
+ DownloadList::current_window_list() {
+   return dynamic_cast<ElementDownloadList*>(m_uiArray[DISPLAY_DOWNLOAD_LIST])->window();
+ }
+ 
  void
  DownloadList::activate_display(Display displayType) {
    if (!is_active())
diff -crB ./src/ui/download_list.h ../rtorrent-0.8.9/src/ui/download_list.h
*** ./src/ui/download_list.h	2011-04-05 14:26:12.000000000 +0400
--- ../rtorrent-0.8.9/src/ui/download_list.h	2011-07-04 18:27:49.085079248 +0400
***************
*** 101,106 ****
--- 101,107 ----
    void                activate_display(Display d);
  
    core::View*         current_view();
+   display::WindowDownloadList* current_window_list();
    void                set_current_view(const std::string& name);
  
    void                slot_open_uri(SlotOpenUri s) { m_slotOpenUri = s; }
diff -crB ./src/ui/element_download_list.h ../rtorrent-0.8.9/src/ui/element_download_list.h
*** ./src/ui/element_download_list.h	2011-04-05 14:26:12.000000000 +0400
--- ../rtorrent-0.8.9/src/ui/element_download_list.h	2011-07-04 18:27:13.927702075 +0400
***************
*** 60,65 ****
--- 60,66 ----
    void                disable();
  
    core::View*         view() { return m_view; }
+   WDownloadList*      window() { return m_window; }
    void                set_view(core::View* l);
  
    void                receive_command(const char* cmd);
diff -crB ./src/ui/root.cc ../rtorrent-0.8.9/src/ui/root.cc
*** ./src/ui/root.cc	2011-04-23 16:28:14.000000000 +0400
--- ../rtorrent-0.8.9/src/ui/root.cc	2011-07-04 23:07:32.030478491 +0400
***************
*** 45,50 ****
--- 45,51 ----
  
  #include "core/manager.h"
  #include "display/frame.h"
+ #include "display/window_download_list.h"
  #include "display/window_http_queue.h"
  #include "display/window_title.h"
  #include "display/window_input.h"
***************
*** 66,72 ****
    m_windowTitle(NULL),
    m_windowHttpQueue(NULL),
    m_windowInput(NULL),
!   m_windowStatusbar(NULL) {
  }
  
  void
--- 67,77 ----
    m_windowTitle(NULL),
    m_windowHttpQueue(NULL),
    m_windowInput(NULL),
!   m_windowStatusbar(NULL),
!   done_fg_color(-1),
!   done_bg_color(-1),
!   active_fg_color(-1),
!   active_bg_color(-1) {
  }
  
  void
***************
*** 98,103 ****
--- 103,112 ----
    setup_keys();
  
    m_downloadList->activate(rootFrame->frame(1));
+   m_downloadList->current_window_list()->set_done_fg_color(done_fg_color);
+   m_downloadList->current_window_list()->set_done_bg_color(done_bg_color);
+   m_downloadList->current_window_list()->set_active_fg_color(active_fg_color);
+   m_downloadList->current_window_list()->set_active_bg_color(active_bg_color);
  }
  
  void
***************
*** 273,276 ****
--- 282,325 ----
    return m_windowInput->input();
  }
  
+ int
+ Root::get_done_fg_color() {
+   return done_fg_color;
+ }
+ 
+ void
+ Root::set_done_fg_color(int64_t color) {
+   done_fg_color = color;
+ }
+ 
+ int
+ Root::get_done_bg_color() {
+   return done_bg_color;
+ }
+ 
+ void
+ Root::set_done_bg_color(int64_t color) {
+   done_bg_color = color;
+ }
+ 
+ int
+ Root::get_active_fg_color() {
+   return active_fg_color;
+ }
+ 
+ void
+ Root::set_active_fg_color(int64_t color) {
+   active_fg_color = color;
+ }
+ 
+ int
+ Root::get_active_bg_color() {
+   return active_bg_color;
+ }
+ 
+ void
+ Root::set_active_bg_color(int64_t color) {
+   active_bg_color = color;
+ }
+ 
  }
diff -crB ./src/ui/root.h ../rtorrent-0.8.9/src/ui/root.h
*** ./src/ui/root.h	2011-04-05 14:26:13.000000000 +0400
--- ../rtorrent-0.8.9/src/ui/root.h	2011-07-04 18:20:59.896163528 +0400
***************
*** 83,88 ****
--- 83,97 ----
    void                set_down_throttle_i64(int64_t throttle) { set_down_throttle(throttle >> 10); }
    void                set_up_throttle_i64(int64_t throttle)   { set_up_throttle(throttle >> 10); }
  
+   int                 get_done_fg_color();
+   void                set_done_fg_color(int64_t color);
+   int                 get_done_bg_color();
+   void                set_done_bg_color(int64_t color);
+   int                 get_active_fg_color();
+   void                set_active_fg_color(int64_t color);
+   int                 get_active_bg_color();
+   void                set_active_bg_color(int64_t color);
+ 
    void                adjust_down_throttle(int throttle);
    void                adjust_up_throttle(int throttle);
  
***************
*** 105,110 ****
--- 114,124 ----
    WStatusbar*         m_windowStatusbar;
  
    input::Bindings     m_bindings;
+ 
+   int64_t             done_fg_color;
+   int64_t             done_bg_color;
+   int64_t             active_fg_color;
+   int64_t             active_bg_color;
  };
  
  }
