<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -10,8 +10,8 @@ $Data::Dumper::Indent = 1;
 
 use vars qw($VERSION %IRSSI);
 
-$VERSION = &quot;2.2.0&quot;;
-my ($REV) = '$Rev: 559 $' =~ /(\d+)/;
+$VERSION = &quot;2.2.3beta&quot;;
+my ($REV) = '$Rev: 616 $' =~ /(\d+)/;
 %IRSSI = (
     authors     =&gt; 'Dan Boger',
     contact     =&gt; 'zigdon@gmail.com',
@@ -20,7 +20,7 @@ my ($REV) = '$Rev: 559 $' =~ /(\d+)/;
       . 'Can optionally set your bitlbee /away message to same',
     license =&gt; 'GNU GPL v2',
     url     =&gt; 'http://twirssi.com',
-    changed =&gt; '$Date: 2009-03-16 15:34:12 -0700 (Mon, 16 Mar 2009) $',
+    changed =&gt; '$Date: 2009-04-21 12:20:40 -0700 (Tue, 21 Apr 2009) $',
 );
 
 my $window;
@@ -30,6 +30,7 @@ my $user;
 my $defservice;
 my $poll;
 my $last_poll;
+my $last_friends_poll = time;
 my %nicks;
 my %friends;
 my %tweet_cache;
@@ -104,6 +105,105 @@ sub cmd_direct_as {
     }
 }
 
+sub cmd_retweet {
+    my ( $data, $server, $win ) = @_;
+
+    return unless &amp;logged_in($twit);
+
+    $data =~ s/^\s+|\s+$//;
+    unless ($data) {
+        &amp;notice(&quot;Usage: /retweet &lt;nick[:num]&gt; [comment]&quot;);
+        return;
+    }
+
+    my ( $id, $data ) = split ' ', $data, 2;
+
+    &amp;cmd_retweet_as( &quot;$user $id $data&quot;, $server, $win );
+}
+
+sub cmd_retweet_as {
+    my ( $data, $server, $win ) = @_;
+
+    unless ( Irssi::settings_get_bool(&quot;twirssi_track_replies&quot;) ) {
+        &amp;notice(&quot;twirssi_track_replies is required in order to reteet.&quot;);
+        return;
+    }
+
+    return unless &amp;logged_in($twit);
+
+    $data =~ s/^\s+|\s+$//;
+    my ( $username, $id, $data ) = split ' ', $data, 3;
+
+    unless ($username) {
+        &amp;notice(&quot;Usage: /retweet_as &lt;username&gt; &lt;nick[:num]&gt; [comment]&quot;);
+        return;
+    }
+
+    return unless $username = &amp;valid_username($username);
+
+    my $nick;
+    $id =~ s/[^\w\d\-:]+//g;
+    ( $nick, $id ) = split /:/, $id;
+    unless ( exists $id_map{ lc $nick } ) {
+        &amp;notice(&quot;Can't find a tweet from $nick to retweet!&quot;);
+        return;
+    }
+
+    $id = $id_map{__indexes}{$nick} unless $id;
+    unless ( $id_map{ lc $nick }[$id] ) {
+        &amp;notice(&quot;Can't find a tweet numbered $id from $nick to retweet!&quot;);
+        return;
+    }
+
+    unless ( $id_map{__tweets}{ lc $nick }[$id] ) {
+        &amp;notice(&quot;The text of this tweet isn't saved, sorry!&quot;);
+        return;
+    }
+
+# Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_retweet_format&quot;, 'RT $n: $t ${-- $c$}' );
+    my $text = Irssi::settings_get_str(&quot;twirssi_retweet_format&quot;);
+    $text =~ s/\$n/\@$nick/g;
+    if ($data) {
+        $text =~ s/\${|\$}//g;
+        $text =~ s/\$c/$data/;
+    } else {
+        $text =~ s/\${.*?\$}//;
+    }
+    $text =~ s/\$t/$id_map{__tweets}{ lc $nick }[$id]/;
+
+    $data = &amp;shorten($text);
+
+    return if &amp;too_long($data);
+
+    my $success = 1;
+    eval {
+        unless (
+            $twits{$username}-&gt;update(
+                {
+                    status                =&gt; $data,
+                    in_reply_to_status_id =&gt; $id_map{ lc $nick }[$id]
+                }
+            )
+          )
+        {
+            &amp;notice(&quot;Update failed&quot;);
+            $success = 0;
+        }
+    };
+    return unless $success;
+
+    if ($@) {
+        &amp;notice(&quot;Update caused an error: $@.  Aborted&quot;);
+        return;
+    }
+
+    foreach ( $data =~ /@([-\w]+)/ ) {
+        $nicks{$1} = time;
+    }
+
+    &amp;notice(&quot;Retweet sent&quot;);
+}
+
 sub cmd_tweet {
     my ( $data, $server, $win ) = @_;
 
@@ -173,10 +273,9 @@ sub cmd_reply {
         return;
     }
 
-    $data =~ s/^\s+|\s+$//;
     my ( $id, $data ) = split ' ', $data, 2;
     unless ( $id and $data ) {
-        &amp;notice(&quot;Usage: /reply_as &lt;nick[:num]&gt; &lt;update&gt;&quot;);
+        &amp;notice(&quot;Usage: /reply &lt;nick[:num]&gt; &lt;update&gt;&quot;);
         return;
     }
 
@@ -454,12 +553,12 @@ sub cmd_add_search {
         return;
     }
 
-    if ( exists $id_map{__searches}{$user}{$data} ) {
+    if ( exists $id_map{__searches}{&quot;$user\@$defservice&quot;}{$data} ) {
         &amp;notice(&quot;Already had a subscription for '$data'&quot;);
         return;
     }
 
-    $id_map{__searches}{$user}{$data} = 1;
+    $id_map{__searches}{&quot;$user\@$defservice&quot;}{$data} = 1;
     &amp;notice(&quot;Added subscription for '$data'&quot;);
 }
 
@@ -479,12 +578,12 @@ sub cmd_del_search {
         return;
     }
 
-    unless ( exists $id_map{__searches}{$user}{$data} ) {
+    unless ( exists $id_map{__searches}{&quot;$user\@$defservice&quot;}{$data} ) {
         &amp;notice(&quot;No subscription found for '$data'&quot;);
         return;
     }
 
-    delete $id_map{__searches}{$user}{$data};
+    delete $id_map{__searches}{&quot;$user\@$defservice&quot;}{$data};
     &amp;notice(&quot;Removed subscription for '$data'&quot;);
 }
 
@@ -667,18 +766,27 @@ sub get_updates {
         my $new_poll = time;
 
         my $error = 0;
+        my %context_cache;
         foreach ( keys %twits ) {
-            $error += &amp;do_updates( $fh, $_, $twits{$_} );
+            $error++ unless &amp;do_updates( $fh, $_, $twits{$_}, \%context_cache );
         }
 
-        my ( $added, $removed ) = &amp;load_friends($fh);
-        if ( $added + $removed ) {
-            print $fh &quot;type:debug %R***%n Friends list updated: &quot;,
-              join( &quot;, &quot;,
-                sprintf( &quot;%d added&quot;,   $added ),
-                sprintf( &quot;%d removed&quot;, $removed ) ),
-              &quot;\n&quot;;
+        if (
+            time - $last_friends_poll &gt;
+            Irssi::settings_get_int('twitter_friends_poll') )
+        {
+            my ( $added, $removed ) = &amp;load_friends($fh);
+            if ( $added + $removed ) {
+                print $fh &quot;type:debug %R***%n Friends list updated: &quot;,
+                  join( &quot;, &quot;,
+                    sprintf( &quot;%d added&quot;,   $added ),
+                    sprintf( &quot;%d removed&quot;, $removed ) ),
+                  &quot;\n&quot;;
+            }
+
+            $last_friends_poll = time;
         }
+
         print $fh &quot;__friends__\n&quot;;
         foreach ( sort keys %friends ) {
             print $fh &quot;$_ $friends{$_}\n&quot;;
@@ -686,9 +794,9 @@ sub get_updates {
 
         if ($error) {
             print $fh &quot;type:debug Update encountered errors.  Aborted\n&quot;;
-            print $fh $last_poll;
+            print $fh &quot;-- $last_poll&quot;;
         } else {
-            print $fh $new_poll;
+            print $fh &quot;-- $new_poll&quot;;
         }
         close $fh;
         exit;
@@ -697,36 +805,46 @@ sub get_updates {
 }
 
 sub do_updates {
-    my ( $fh, $username, $obj ) = @_;
+    my ( $fh, $username, $obj, $cache ) = @_;
 
     my $rate_limit = $obj-&gt;rate_limit_status();
     if ( $rate_limit and $rate_limit-&gt;{remaining_hits} &lt; 1 ) {
         &amp;notice(&quot;Rate limit exceeded for $username&quot;);
-        return 1;
+        return undef;
     }
 
     print scalar localtime, &quot; - Polling for updates for $username&quot; if &amp;debug;
     my $tweets;
-    eval { $tweets = $obj-&gt;friends_timeline(); };
+    my $new_poll_id = 0;
+    eval {
+        if ( $id_map{__last_id}{$username}{timeline} )
+        {
+            $tweets = $obj-&gt;friends_timeline( { count =&gt; 100 } );
+        } else {
+            $tweets = $obj-&gt;friends_timeline();
+        }
+    };
 
     if ($@) {
-        print $fh
-          &quot;type:debug Error during friends_timeline call: $@.  Aborted.\n&quot;;
-        return 1;
+        print $fh &quot;type:debug Error during friends_timeline call: Aborted.\n&quot;;
+        print $fh &quot;type:debug : $_\n&quot; foreach split /\n/, Dumper($@);
+        return undef;
     }
 
     unless ( ref $tweets ) {
         if ( $obj-&gt;can(&quot;get_error&quot;) ) {
-            my $error;
+            my $error = &quot;Unknown error&quot;;
             eval { $error = JSON::Any-&gt;jsonToObj( $obj-&gt;get_error() ) };
-            if ($@) { $error = $obj-&gt;get_error() }
-            print $fh &quot;type:debug API Error during friends_timeline call: &quot;,
-              &quot;$error  Aborted.\n&quot;;
+            unless ($@) { $error = $obj-&gt;get_error() }
+            print $fh
+              &quot;type:debug API Error during friends_timeline call: Aborted\n&quot;;
+            print $fh &quot;type:debug : $_\n&quot; foreach split /\n/, Dumper($error);
+
         } else {
             print $fh
               &quot;type:debug API Error during friends_timeline call. Aborted.\n&quot;;
         }
-        return 1;
+        return undef;
     }
 
     foreach my $t ( reverse @$tweets ) {
@@ -740,53 +858,59 @@ sub do_updates {
         {
             $nicks{ $t-&gt;{in_reply_to_screen_name} } = time;
             my $context;
-            eval {
-                $context = $obj-&gt;show_status( $t-&gt;{in_reply_to_status_id} );
-            };
+            unless ( $cache-&gt;{ $t-&gt;{in_reply_to_status_id} } ) {
+                eval {
+                    $cache-&gt;{ $t-&gt;{in_reply_to_status_id} } =
+                      $obj-&gt;show_status( $t-&gt;{in_reply_to_status_id} );
+                };
+
+            }
+            $context = $cache-&gt;{ $t-&gt;{in_reply_to_status_id} };
 
             if ($context) {
                 my $ctext = decode_entities( $context-&gt;{text} );
                 $ctext = &amp;hilight($ctext);
+                if ( $context-&gt;{truncated} and ref($obj) ne 'Net::Identica' ) {
+                    $ctext .=
+                        &quot; -- http://twitter.com/$context-&gt;{user}{screen_name}&quot;
+                      . &quot;/status/$context-&gt;{id}&quot;;
+                }
                 printf $fh &quot;id:%d account:%s nick:%s type:tweet %s\n&quot;,
                   $context-&gt;{id}, $username,
                   $context-&gt;{user}{screen_name}, $ctext;
-                if ( $context-&gt;{truncated} and ref($obj) ne 'Net::Identica' ) {
-                    printf $fh &quot;id:%s account:%s nick:%s type:ellispis %s\n&quot;,
-                      $context-&gt;{id} . &quot;-url&quot;, $username,
-                      $context-&gt;{user}{screen_name},
-&quot;http://twitter.com/$context-&gt;{user}{screen_name}/status/$context-&gt;{id}&quot;;
-                }
                 $reply = &quot;reply&quot;;
-            } elsif ($@) {
-                print $fh &quot;type:debug request to get context failed: $@&quot;;
-            } else {
-                print $fh
-&quot;type:debug Failed to get context from $t-&gt;{in_reply_to_screen_name}\n&quot;
-                  if &amp;debug;
             }
         }
         next
           if $t-&gt;{user}{screen_name} eq $username
               and not Irssi::settings_get_bool(&quot;show_own_tweets&quot;);
-        printf $fh &quot;id:%d account:%s nick:%s type:%s %s\n&quot;,
-          $t-&gt;{id}, $username, $t-&gt;{user}{screen_name}, $reply, $text;
         if ( $t-&gt;{truncated} and ref($obj) ne 'Net::Identica' ) {
-            printf $fh &quot;id:%s account:%s nick:%s type:ellispis %s\n&quot;,
-              $t-&gt;{id} . &quot;-url&quot;, $username,
-              $t-&gt;{user}{screen_name},
-              &quot;http://twitter.com/$t-&gt;{user}{screen_name}/status/$t-&gt;{id}&quot;;
+            $text .= &quot; -- http://twitter.com/$t-&gt;{user}{screen_name}&quot;
+              . &quot;/status/$t-&gt;{id}&quot;;
         }
+        printf $fh &quot;id:%d account:%s nick:%s type:%s %s\n&quot;,
+          $t-&gt;{id}, $username, $t-&gt;{user}{screen_name}, $reply, $text;
+        $new_poll_id = $t-&gt;{id} if $new_poll_id &lt; $t-&gt;{id};
     }
+    printf $fh &quot;id:%d account:%s type:last_id timeline\n&quot;,
+      $new_poll_id, $username;
 
     print scalar localtime, &quot; - Polling for replies&quot; if &amp;debug;
+    $new_poll_id = 0;
     eval {
-        $tweets = $obj-&gt;replies( { since =&gt; HTTP::Date::time2str($last_poll) } )
-          || [];
+        if ( $id_map{__last_id}{$username}{reply} )
+        {
+            $tweets = $obj-&gt;replies(
+                { since_id =&gt; $id_map{__last_id}{$username}{reply} } )
+              || [];
+        } else {
+            $tweets = $obj-&gt;replies() || [];
+        }
     };
 
     if ($@) {
         print $fh &quot;type:debug Error during replies call.  Aborted.\n&quot;;
-        return 1;
+        return undef;
     }
 
     foreach my $t ( reverse @$tweets ) {
@@ -795,26 +919,32 @@ sub do_updates {
 
         my $text = decode_entities( $t-&gt;{text} );
         $text = &amp;hilight($text);
-        printf $fh &quot;id:%d account:%s nick:%s type:tweet %s\n&quot;,
-          $t-&gt;{id}, $username, $t-&gt;{user}{screen_name}, $text;
         if ( $t-&gt;{truncated} ) {
-            printf $fh &quot;id:%s account:%s nick:%s type:ellispis %s\n&quot;,
-              $t-&gt;{id} . &quot;-url&quot;, $username,
-              $t-&gt;{user}{screen_name},
-              &quot;http://twitter.com/$t-&gt;{user}{screen_name}/status/$t-&gt;{id}&quot;;
+            $text .= &quot; -- http://twitter.com/$t-&gt;{user}{screen_name}&quot;
+              . &quot;/status/$t-&gt;{id}&quot;;
         }
+        printf $fh &quot;id:%d account:%s nick:%s type:tweet %s\n&quot;,
+          $t-&gt;{id}, $username, $t-&gt;{user}{screen_name}, $text;
+        $new_poll_id = $t-&gt;{id} if $new_poll_id &lt; $t-&gt;{id};
     }
+    printf $fh &quot;id:%d account:%s type:last_id reply\n&quot;, $new_poll_id, $username;
 
     print scalar localtime, &quot; - Polling for DMs&quot; if &amp;debug;
+    $new_poll_id = 0;
     eval {
-        $tweets =
-          $obj-&gt;direct_messages( { since =&gt; HTTP::Date::time2str($last_poll) } )
-          || [];
+        if ( $id_map{__last_id}{$username}{dm} )
+        {
+            $tweets = $obj-&gt;direct_messages(
+                { since_id =&gt; $id_map{__last_id}{$username}{dm} } )
+              || [];
+        } else {
+            $tweets = $obj-&gt;direct_messages() || [];
+        }
     };
 
     if ($@) {
         print $fh &quot;type:debug Error during direct_messages call.  Aborted.\n&quot;;
-        return 1;
+        return undef;
     }
 
     foreach my $t ( reverse @$tweets ) {
@@ -822,7 +952,9 @@ sub do_updates {
         $text = &amp;hilight($text);
         printf $fh &quot;id:%d account:%s nick:%s type:dm %s\n&quot;,
           $t-&gt;{id}, $username, $t-&gt;{sender_screen_name}, $text;
+        $new_poll_id = $t-&gt;{id} if $new_poll_id &lt; $t-&gt;{id};
     }
+    printf $fh &quot;id:%d account:%s type:last_id dm\n&quot;, $new_poll_id, $username;
 
     print scalar localtime, &quot; - Polling for subscriptions&quot; if &amp;debug;
     if ( $obj-&gt;can('search') and $id_map{__searches}{$username} ) {
@@ -842,14 +974,13 @@ sub do_updates {
             if ($@) {
                 print $fh
                   &quot;type:debug Error during search($topic) call.  Aborted.\n&quot;;
-                return 1;
+                return undef;
             }
 
             unless ( $search-&gt;{max_id} ) {
-                print $fh
-&quot;type:debug Invalid search results when searching for $topic.&quot;,
-                  &quot;  Aborted.\n&quot;;
-                return 1;
+                print $fh &quot;type:debug Invalid search results when searching&quot;,
+                  &quot; for $topic. Aborted.\n&quot;;
+                return undef;
             }
 
             $id_map{__searches}{$username}{$topic} = $search-&gt;{max_id};
@@ -861,13 +992,16 @@ sub do_updates {
                 $text = &amp;hilight($text);
                 printf $fh &quot;id:%d account:%s nick:%s type:search topic:%s %s\n&quot;,
                   $t-&gt;{id}, $username, $t-&gt;{from_user}, $topic, $text;
+                $new_poll_id = $t-&gt;{id}
+                  if not $new_poll_id
+                      or $t-&gt;{id} &lt; $new_poll_id;
             }
         }
     }
 
     print scalar localtime, &quot; - Done&quot; if &amp;debug;
 
-    return 0;
+    return 1;
 }
 
 sub monitor_child {
@@ -877,7 +1011,7 @@ sub monitor_child {
 
     print scalar localtime, &quot; - checking child log at $filename ($attempt)&quot;
       if &amp;debug;
-    my $new_last_poll;
+    my ($new_last_poll);
 
     # first time we run we don't want to print out *everything*, so we just
     # pretend
@@ -892,13 +1026,14 @@ sub monitor_child {
             last if /^__friends__/;
             my $hilight = 0;
             my %meta;
+
             foreach my $key (qw/id account nick type topic/) {
                 if (s/^$key:(\S+)\s*//) {
                     $meta{$key} = $1;
                 }
             }
 
-            if ( not $meta{type} or $meta{type} ne 'searchid' ) {
+            if ( not $meta{type} or $meta{type} !~ /searchid|last_id/ ) {
                 if ( exists $meta{id} and exists $new_cache{ $meta{id} } ) {
                     next;
                 }
@@ -911,17 +1046,17 @@ sub monitor_child {
             }
 
             my $account = &quot;&quot;;
-            if ( lc $meta{account} ne lc &quot;$user\@$defservice&quot; ) {
-                $meta{account} =~ s/\@(\w+)$//;
-                my $service = $1;
-                if (
-                    lc $service eq
-                    lc Irssi::settings_get_str(&quot;twirssi_default_service&quot;) )
-                {
-                    $account = &quot;$meta{account}: &quot;;
-                } else {
-                    $account = &quot;$meta{account}\@$service: &quot;;
-                }
+            $meta{account} =~ s/\@(\w+)$//;
+            $meta{service} = $1;
+            if (
+                lc $meta{service} eq
+                lc Irssi::settings_get_str(&quot;twirssi_default_service&quot;) )
+            {
+                $account = &quot;$meta{account}: &quot;
+                  if lc &quot;$meta{account}\@$meta{service}&quot; ne lc
+                      &quot;$user\@$defservice&quot;;
+            } else {
+                $account = &quot;$meta{account}\@$meta{service}: &quot;;
             }
 
             my $marker = &quot;&quot;;
@@ -931,9 +1066,10 @@ sub monitor_child {
                 and $meta{id} )
             {
                 $marker = ( $id_map{__indexes}{ $meta{nick} } + 1 ) % 100;
-                $id_map{ lc $meta{nick} }[$marker] = $meta{id};
-                $id_map{__indexes}{ $meta{nick} }  = $marker;
-                $marker                            = &quot;:$marker&quot;;
+                $id_map{ lc $meta{nick} }[$marker]           = $meta{id};
+                $id_map{__indexes}{ $meta{nick} }            = $marker;
+                $id_map{__tweets}{ lc $meta{nick} }[$marker] = $_;
+                $marker                                      = &quot;:$marker&quot;;
             }
 
             my $hilight_color =
@@ -953,9 +1089,6 @@ sub monitor_child {
                     ( MSGLEVEL_PUBLIC | $hilight ),
                     $meta{type}, $account, $meta{nick}, $marker, $_
                   ];
-            } elsif ( $meta{type} eq 'ellispis' ) {
-                push @lines,
-                  [ MSGLEVEL_PUBLIC, &quot;tweet&quot;, $account, $meta{nick}, &quot;&quot;, $_ ];
             } elsif ( $meta{type} eq 'search' ) {
                 push @lines,
                   [
@@ -989,6 +1122,11 @@ sub monitor_child {
                 } elsif (&amp;debug) {
                     print &quot;Search '$meta{topic}' returned invalid id $meta{id}&quot;;
                 }
+            } elsif ( $meta{type} eq 'last_id' ) {
+                $id_map{__last_id}{&quot;$meta{account}\@$meta{service}&quot;}{$_} =
+                  $meta{id}
+                  if $id_map{__last_id}{&quot;$meta{account}\@$meta{service}&quot;}{$_} &lt;
+                      $meta{id};
             } elsif ( $meta{type} eq 'error' ) {
                 push @lines, [ MSGLEVEL_MSGS, $_ ];
             } elsif ( $meta{type} eq 'debug' ) {
@@ -1000,8 +1138,8 @@ sub monitor_child {
 
         %friends = ();
         while (&lt;FILE&gt;) {
-            if (/^\d+$/) {
-                $new_last_poll = $_;
+            if (/^-- (\d+)$/) {
+                ($new_last_poll) = ($1);
                 last;
             }
             my ( $f, $t ) = split ' ', $_;
@@ -1009,7 +1147,8 @@ sub monitor_child {
         }
 
         if ($new_last_poll) {
-            print &quot;new last_poll = $new_last_poll&quot; if &amp;debug;
+            print &quot;new last_poll    = $new_last_poll&quot; if &amp;debug;
+            print &quot;new last_poll_id = &quot;, Dumper( $id_map{__last_id} ) if &amp;debug;
             if ($suppress) {
                 print &quot;First call, not printing updates&quot; if &amp;debug;
             } else {
@@ -1168,7 +1307,7 @@ sub sig_complete {
     my ( $complist, $window, $word, $linestart, $want_space ) = @_;
 
     if (
-        $linestart =~ /^\/twitter_reply(?:_as)?\s*$/
+        $linestart =~ /^\/(?:retweet|twitter_reply)(?:_as)?\s*$/
         or ( Irssi::settings_get_bool(&quot;twirssi_use_reply_aliases&quot;)
             and $linestart =~ /^\/reply(?:_as)?\s*$/ )
       )
@@ -1180,6 +1319,13 @@ sub sig_complete {
           keys %{ $id_map{__indexes} };
     }
 
+    if ( $linestart =~ /^\/twitter_unfriend\s*$/ )
+    {    # /twitter_unfriend gets a nick
+        $word =~ s/^@//;
+        push @$complist, grep /^\Q$word/i,
+          sort { $nicks{$b} &lt;=&gt; $nicks{$a} } keys %nicks;
+    }
+
     # /tweet, /tweet_as, /dm, /dm_as - complete @nicks (and nicks as the first
     # arg to dm)
     if ( $linestart =~ /^\/(?:tweet|dm)/ ) {
@@ -1318,10 +1464,15 @@ Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twitter_passwords&quot;,       undef );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_default_service&quot;, &quot;Twitter&quot; );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_nick_color&quot;,      &quot;%B&quot; );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_topic_color&quot;,     &quot;%r&quot; );
+Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_retweet_format&quot;,
+    'RT $n: &quot;$t&quot; ${-- $c$}' );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_location&quot;,
     &quot;.irssi/scripts/twirssi.pl&quot; );
 Irssi::settings_add_str( &quot;twirssi&quot;, &quot;twirssi_replies_store&quot;,
     &quot;.irssi/scripts/twirssi.json&quot; );
+
+Irssi::settings_add_int( &quot;twirssi&quot;, &quot;twitter_friends_poll&quot;, 600 );
+
 Irssi::settings_add_bool( &quot;twirssi&quot;, &quot;twirssi_upgrade_beta&quot;,      0 );
 Irssi::settings_add_bool( &quot;twirssi&quot;, &quot;tweet_to_away&quot;,             0 );
 Irssi::settings_add_bool( &quot;twirssi&quot;, &quot;show_reply_context&quot;,        0 );
@@ -1354,6 +1505,8 @@ if ($window) {
     Irssi::command_bind( &quot;dm_as&quot;,                      &quot;cmd_direct_as&quot; );
     Irssi::command_bind( &quot;tweet&quot;,                      &quot;cmd_tweet&quot; );
     Irssi::command_bind( &quot;tweet_as&quot;,                   &quot;cmd_tweet_as&quot; );
+    Irssi::command_bind( &quot;retweet&quot;,                    &quot;cmd_retweet&quot; );
+    Irssi::command_bind( &quot;retweet_as&quot;,                 &quot;cmd_retweet_as&quot; );
     Irssi::command_bind( &quot;twitter_reply&quot;,              &quot;cmd_reply&quot; );
     Irssi::command_bind( &quot;twitter_reply_as&quot;,           &quot;cmd_reply_as&quot; );
     Irssi::command_bind( &quot;twitter_login&quot;,              &quot;cmd_login&quot; );</diff>
      <filename>twirssi.pl</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>605ec8cdb439c778acdcb79d9799973385338c7d</id>
    </parent>
    <parent>
      <id>a66a6f421e3cd0f4537f5868b2bc95acd021e8fe</id>
    </parent>
  </parents>
  <author>
    <name>Brian S. Stephan</name>
    <login>bssteph</login>
    <email>bss@emptymatter.org</email>
  </author>
  <url>http://github.com/bssteph/twirssi/commit/af43fa73659f445b969569ac15e119fb5d608c1f</url>
  <id>af43fa73659f445b969569ac15e119fb5d608c1f</id>
  <committed-date>2009-04-22T13:56:40-07:00</committed-date>
  <authored-date>2009-04-22T13:56:40-07:00</authored-date>
  <message>Merge branch 'master' of git://github.com/zigdon/twirssi</message>
  <tree>3218d14661d20dbd8251c19d5273f40f2375d789</tree>
  <committer>
    <name>Brian S. Stephan</name>
    <login>bssteph</login>
    <email>bss@emptymatter.org</email>
  </committer>
</commit>
