Command line indicator: command or text.
Author: Nei
— Version: 0.1
— License: GPL-3.0-or-later
For WeeChat ≥ 0.4.2.
Tags: command, input
Added: 2013-12-02
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | use strict; use warnings; # cmdind.pl is written by Nei <anti.teamidiot.de> # and licensed under the under GNU General Public License v3 # or any later version =head1 NAME cmdind - Indicator for input line if you are inputting a command or text =head1 DESCRIPTION cmdind will put a big fat banner onto the input line, telling you whether you are inputting WeeChat commands or text that is sent to the buffer. This is for stupid people like me ;-) that accidentally send commands to channel. =head1 USAGE just load the script and it is ready. Appearance can be configured through a number of settings. =head1 SETTINGS You must type /set plugins.var.perl.cmdind.SETTINGNAME VALUE to change a setting C<SETTINGNAME> to a new value C<VALUE>. /unset plugins.var.perl.cmdind.SETTINGNAME will reset a setting to its default value. the following settings are available: =head2 command_item the indicator shown when inputting a command (starting with /) =head2 esc_text_item the indicator shown when inputting text for the buffer, which is an escaped command (starting with //) =head2 text_item the indicator that should be shown when inputting text for the buffer =head2 right this is a boolean value whether to tack the indicator to the left or right of the input text =cut use constant SCRIPT_NAME => 'cmdind'; weechat::register(SCRIPT_NAME, 'Nei <anti.teamidiot.de>', '0.1', 'GPL3', 'make /commands more visible', '', '') || return; weechat::hook_modifier('500|input_text_display_with_cursor' => 'cmdind', ''); my $weechat_string_remove_color = qr{(?^:(?^:(?^:\x19)(?:(?^:[FB](?^:(?^:\@(?^:[*!/_|]*)(?:.{5})?)|(?^:(?^:[*!/_|]*)(?^:(?:.{2})?))))|(?^:\*(?^:(?^:\@(?^:[*!/_|]*)(?:.{5})?)|(?^:(?^:[*!/_|]*)(?^:(?:.{2})?)))(?:,(?^:(?^:\@(?:.{5})?)|(?^:(?:.{2})?)))?)|(?^:\@(?:.{5})?)|(?^:[E])|(?^:b[FBD_#il-]?)|(?^:\x1c)|(?^:(?:.{2})?))?)|(?^:(?:\x1a|\x1b).?)|(?^:\x1c))}; sub _get_setting_eval { weechat::string_eval_expression( weechat::config_is_set_plugin($_[0]) ? weechat::config_get_plugin($_[0]) : $_[1], {}, {}, {}) } sub _get_setting_bool { 0 + (weechat::config_is_set_plugin('right') && weechat::config_string_to_boolean(weechat::config_get_plugin('right'))) } sub cmdind { my ($cmd, $text, $esc_text, $right); my @il = $1 if $_[3] =~ s/\A( )\r//; join "\r", @il, map { my $str = $_ =~ s/\x19b#//r; my $tmpl; my $input_str = weechat::string_input_for_buffer($str); unless (length $str) { $tmpl = '' } elsif (!length $input_str) { $tmpl = $cmd //= _get_setting_eval('command_item', '${color:*red}[COMMAND]${color:-bold} '); } elsif ($str ne $input_str) { $tmpl = $esc_text //= _get_setting_eval('esc_text_item', '${color:*brown}[INPUT]${color:reset} '); } else { $tmpl = $text //= _get_setting_eval('text_item', '${color:*green}[INPUT]${color:reset} '); } if ($right //= _get_setting_bool('right')) { my $right_color = join '', $tmpl =~ /($weechat_string_remove_color)/g; $tmpl =~ s/(\s*)$//; $right_color . $_ . $1 . $tmpl } else { $tmpl . $_ } } split "\r", $_[3], -1; } |