diff options
-rw-r--r-- | prompt_info/uberprompt.pl | 12 | ||||
-rw-r--r-- | vim-mode/vim_mode.pl | 36 |
2 files changed, 45 insertions, 3 deletions
diff --git a/prompt_info/uberprompt.pl b/prompt_info/uberprompt.pl index ded45cf..4d95b06 100644 --- a/prompt_info/uberprompt.pl +++ b/prompt_info/uberprompt.pl @@ -139,6 +139,10 @@ my $prompt_data_pos = 'UP_INNER'; my $prompt_last = ''; my $prompt_format = ''; +# flag to indicate whether rendering of hte prompt should allow the replaces +# theme formats to be applied to the content. +my $use_replaces = 0; + pre_init(); sub pre_init { @@ -175,6 +179,8 @@ sub init { Irssi::settings_add_str('uberprompt', 'uberprompt_format', '[$*$uber] '); Irssi::settings_add_bool('uberprompt', 'uberprompt_debug', 0); Irssi::settings_add_bool('uberprompt', 'uberprompt_autostart', 1); + Irssi::settings_add_bool('uberprompt', 'uberprompt_use_replaces', 0); + Irssi::command_bind("prompt", \&prompt_subcmd_handler); Irssi::command_bind('prompt on', \&replace_prompt_items); @@ -224,6 +230,8 @@ sub init { sub reload_settings { + $use_replaces = Irssi::settings_get_bool('uberprompt_use_replaces'); + $DEBUG_ENABLED = Irssi::settings_get_bool('uberprompt_debug'); my $new = Irssi::settings_get_str('uberprompt_format'); @@ -289,8 +297,8 @@ sub uberprompt_draw { my $prompt = ''; # rendered content of the prompt. my $theme = Irssi::current_theme; - $prompt = $theme->format_expand - ("{uberprompt $prompt_arg}", Irssi::EXPAND_FLAG_IGNORE_REPLACES); + my $arg = $use_replaces ? 0 : Irssi::EXPAND_FLAG_IGNORE_REPLACES; + $prompt = $theme->format_expand("{uberprompt $prompt_arg}", $arg); if ($prompt_data_pos eq 'UP_ONLY') { $prompt =~ s/\$\$uber//; # no need for recursive prompting, I hope. diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl index 2c7e744..d61db3d 100644 --- a/vim-mode/vim_mode.pl +++ b/vim-mode/vim_mode.pl @@ -1701,12 +1701,46 @@ sub ex_registers { $registers->{'+'} = Irssi::parse_special('$U'); $registers->{'*'} = $registers->{'+'}; + my @empty_regs; + my $special_regs = { '+' => 1, '*' => 1, '_' => 1, '"' => 1, '0' => 1 }; + my $active_window = Irssi::active_win; foreach my $key (sort @regs) { next if $key eq '_'; # skip black hole if (defined $registers->{$key}) { - $active_window->print("register $key: $registers->{$key}"); + my $register_val = $registers->{$key}; + if (length $register_val or exists $special_regs->{$key}) { + $register_val =~ s/%/%%/g; + $active_window->print("register $key: $register_val"); + } else { + push @empty_regs, $key; + } + } + } + + # coalesce empty registers into a single line. + if (@empty_regs) { + my @runs; + my $run_start; + foreach my $i (0..$#empty_regs) { + my $cur = $empty_regs[$i]; + my $next = $empty_regs[$i+1]; + + $run_start = $cur unless $run_start; + if (defined $next and ord($cur) + 1 == ord($next)) { + # extend range. + } else { + # terminate range and restart + my $run_str = $run_start; + + if ($cur ne $run_start) { + $run_str .= "-$cur"; + } + push @runs, $run_str; + $run_start = undef; + } } + $active_window->print("Empty registers: " . join(', ', @runs)); } } else { _warn_ex(':registers'); |