# jump_smart_next.pl for WeeChat by arza , distributed freely and without any warranty, licensed under GPL3 # Jump to next/previous buffer with activity, similar to /input jump_smart (alt-a) but jump to next/previous buffer by number # Changelog: # 2013-10-22 0.1 initial release # 2014-10-23 0.2 don't try to change to current buffer # 2015-05-15 0.3 /jump_smart_next and /jump_smart_previous instead of /jump_smart_higher weechat::register('jump_smart_next', 'arza ', '0.3', 'GPL3', 'Jump to next/previous buffer with activity', '', ''); weechat::hook_command('jump_smart_previous', 'Jump to previous buffer with activity', '', 'Jump to the buffer that 1. has the highest activity level 2. is berofe current buffer if possible 3. has the highest number', '', 'command_previous', ''); weechat::hook_command('jump_smart_next', 'Jump to next buffer with activity', '', 'Jump to the buffer that 1. has the highest activity level 2. is after current buffer if possible 3. has the lowest number', '', 'command_next', ''); sub command_previous { my $buffer=$_[1]; my $max_priority = 0; my $max_number = -1000000; my $current_number = weechat::buffer_get_integer($buffer, 'number'); my $number = 0; my $priority = 0; my $infolist = weechat::infolist_get('hotlist', '', ''); while(weechat::infolist_next($infolist)){ $number = weechat::infolist_integer($infolist, 'buffer_number'); if($number == $current_number){ next; } $priority = weechat::infolist_integer($infolist, 'priority'); if($priority > $max_priority){ $max_priority = $priority; $max_number = -1000000; } elsif($priority < $max_priority){ next; } if($number > $current_number){ $number -= 10000; } if($number > $max_number){ $max_number = $number; } } weechat::infolist_free($infolist); weechat::command($buffer, "/buffer " . $max_number % 10000); } sub command_next { my $buffer=$_[1]; my $max_priority = 0; my $min_number = 1000000; my $current_number = weechat::buffer_get_integer($buffer, 'number'); my $number = 0; my $priority = 0; my $infolist = weechat::infolist_get('hotlist', '', ''); while(weechat::infolist_next($infolist)){ $number = weechat::infolist_integer($infolist, 'buffer_number'); if($number == $current_number){ next; } $priority = weechat::infolist_integer($infolist, 'priority'); if($priority > $max_priority){ $max_priority = $priority; $min_number = 1000000; } elsif($priority < $max_priority){ next; } if($number < $current_number){ $number += 10000; } if($number < $min_number){ $min_number = $number; } } weechat::infolist_free($infolist); weechat::command($buffer, "/buffer " . $min_number % 10000); }