Merge ~hloeung/matterircd/+git/irssi-matterircd-complete:lpcraft into ~hloeung/matterircd/+git/irssi-matterircd-complete:master
- Git
- lp:~hloeung/matterircd/+git/irssi-matterircd-complete
- lpcraft
- Merge into master
Proposed by
Haw Loeung
Status: | Merged |
---|---|
Merged at revision: | c55db5d1b715cf945075b2f2807615feb5692ec1 |
Proposed branch: | ~hloeung/matterircd/+git/irssi-matterircd-complete:lpcraft |
Merge into: | ~hloeung/matterircd/+git/irssi-matterircd-complete:master |
Diff against target: |
683 lines (+138/-125) 2 files modified
.launchpad.yaml (+12/-0) matterircd_complete.pl (+126/-125) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Haw Loeung | Pending | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/.launchpad.yaml b/.launchpad.yaml | |||
2 | 0 | new file mode 100644 | 0 | new file mode 100644 |
3 | index 0000000..5cf3b69 | |||
4 | --- /dev/null | |||
5 | +++ b/.launchpad.yaml | |||
6 | @@ -0,0 +1,12 @@ | |||
7 | 1 | pipeline: | ||
8 | 2 | - lint | ||
9 | 3 | |||
10 | 4 | jobs: | ||
11 | 5 | lint: | ||
12 | 6 | architectures: amd64 | ||
13 | 7 | series: focal | ||
14 | 8 | packages: | ||
15 | 9 | - irssi | ||
16 | 10 | - perl-base | ||
17 | 11 | run: | | ||
18 | 12 | perl -Mstrict -Mdiagnostics -cw /build/lpcraft/project/matterircd_complete.pl | ||
19 | diff --git a/matterircd_complete.pl b/matterircd_complete.pl | |||
20 | index 723ff16..cf5f37a 100755 | |||
21 | --- a/matterircd_complete.pl | |||
22 | +++ b/matterircd_complete.pl | |||
23 | @@ -56,23 +56,8 @@ use strict; | |||
24 | 56 | use warnings; | 56 | use warnings; |
25 | 57 | use experimental 'smartmatch'; | 57 | use experimental 'smartmatch'; |
26 | 58 | 58 | ||
44 | 59 | use Irssi::TextUI; | 59 | require Irssi::TextUI; |
45 | 60 | use Irssi qw( | 60 | require Irssi; |
29 | 61 | command_bind | ||
30 | 62 | gui_input_get_pos | ||
31 | 63 | gui_input_set | ||
32 | 64 | gui_input_set_pos | ||
33 | 65 | parse_special | ||
34 | 66 | settings_add_bool | ||
35 | 67 | settings_add_int | ||
36 | 68 | settings_add_str | ||
37 | 69 | settings_get_bool | ||
38 | 70 | settings_get_int | ||
39 | 71 | settings_get_str | ||
40 | 72 | signal_add | ||
41 | 73 | signal_add_last | ||
42 | 74 | signal_continue | ||
43 | 75 | ); | ||
46 | 76 | 61 | ||
47 | 77 | # Enable for debugging purposes only. | 62 | # Enable for debugging purposes only. |
48 | 78 | # use Data::Dumper; | 63 | # use Data::Dumper; |
49 | @@ -94,24 +79,24 @@ my $KEY_SPC = 32; | |||
50 | 94 | my $KEY_B = 66; | 79 | my $KEY_B = 66; |
51 | 95 | my $KEY_O = 79; | 80 | my $KEY_O = 79; |
52 | 96 | 81 | ||
56 | 97 | settings_add_str('matterircd_complete', 'matterircd_complete_networks', ''); | 82 | Irssi::settings_add_str('matterircd_complete', 'matterircd_complete_networks', ''); |
57 | 98 | settings_add_str('matterircd_complete', 'matterircd_complete_nick_ignore', ''); | 83 | Irssi::settings_add_str('matterircd_complete', 'matterircd_complete_nick_ignore', ''); |
58 | 99 | settings_add_str('matterircd_complete', 'matterircd_complete_channel_dont_ignore', ''); | 84 | Irssi::settings_add_str('matterircd_complete', 'matterircd_complete_channel_dont_ignore', ''); |
59 | 100 | 85 | ||
60 | 101 | 86 | ||
61 | 102 | #============================================================================== | 87 | #============================================================================== |
62 | 103 | 88 | ||
64 | 104 | settings_add_int('matterircd_complete', 'matterircd_complete_reply_msg_thread_id_color', 10); | 89 | Irssi::settings_add_int('matterircd_complete', 'matterircd_complete_reply_msg_thread_id_color', 10); |
65 | 105 | 90 | ||
66 | 106 | # Rely on message/thread IDs stored in message cache so we can shorten | 91 | # Rely on message/thread IDs stored in message cache so we can shorten |
67 | 107 | # to save on screen real-estate. | 92 | # to save on screen real-estate. |
70 | 108 | settings_add_int('matterircd_complete', 'matterircd_complete_shorten_message_thread_id', 5); | 93 | Irssi::settings_add_int('matterircd_complete', 'matterircd_complete_shorten_message_thread_id', 5); |
71 | 109 | settings_add_bool('matterircd_complete', 'matterircd_complete_shorten_message_thread_id_hide_prefix', 1); | 94 | Irssi::settings_add_bool('matterircd_complete', 'matterircd_complete_shorten_message_thread_id_hide_prefix', 1); |
72 | 110 | sub update_msgthreadid { | 95 | sub update_msgthreadid { |
73 | 111 | my($server, $msg, $nick, $address, $target) = @_; | 96 | my($server, $msg, $nick, $address, $target) = @_; |
74 | 112 | 97 | ||
77 | 113 | return unless settings_get_int('matterircd_complete_shorten_message_thread_id'); | 98 | return unless Irssi::settings_get_int('matterircd_complete_shorten_message_thread_id'); |
78 | 114 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 99 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
79 | 115 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 100 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
80 | 116 | 101 | ||
81 | 117 | my $prefix = ''; | 102 | my $prefix = ''; |
82 | @@ -131,11 +116,11 @@ sub update_msgthreadid { | |||
83 | 131 | $prefix = '↪'; | 116 | $prefix = '↪'; |
84 | 132 | } | 117 | } |
85 | 133 | 118 | ||
87 | 134 | if (not settings_get_bool('matterircd_complete_shorten_message_thread_id_hide_prefix')) { | 119 | if (not Irssi::settings_get_bool('matterircd_complete_shorten_message_thread_id_hide_prefix')) { |
88 | 135 | $prefix = "${prefix}\@\@"; | 120 | $prefix = "${prefix}\@\@"; |
89 | 136 | } | 121 | } |
90 | 137 | 122 | ||
92 | 138 | my $len = settings_get_int('matterircd_complete_shorten_message_thread_id'); | 123 | my $len = Irssi::settings_get_int('matterircd_complete_shorten_message_thread_id'); |
93 | 139 | if ($len < 25) { | 124 | if ($len < 25) { |
94 | 140 | # Shorten to length configured. We use unicode ellipsis (...) | 125 | # Shorten to length configured. We use unicode ellipsis (...) |
95 | 141 | # here to both allow word selection to just select parts of | 126 | # here to both allow word selection to just select parts of |
96 | @@ -146,19 +131,19 @@ sub update_msgthreadid { | |||
97 | 146 | $msgpostid = substr($msgpostid, 0, $len) . '…'; | 131 | $msgpostid = substr($msgpostid, 0, $len) . '…'; |
98 | 147 | } | 132 | } |
99 | 148 | } | 133 | } |
101 | 149 | my $thread_color = settings_get_int('matterircd_complete_reply_msg_thread_id_color'); | 134 | my $thread_color = Irssi::settings_get_int('matterircd_complete_reply_msg_thread_id_color'); |
102 | 150 | if ($msgpostid eq '') { | 135 | if ($msgpostid eq '') { |
103 | 151 | $msg =~ s/\@\@PLACEHOLDER\@\@/\x03${thread_color}[${prefix}${msgthreadid}]\x0f/; | 136 | $msg =~ s/\@\@PLACEHOLDER\@\@/\x03${thread_color}[${prefix}${msgthreadid}]\x0f/; |
104 | 152 | } else { | 137 | } else { |
105 | 153 | $msg =~ s/\@\@PLACEHOLDER\@\@/\x03${thread_color}[${prefix}${msgthreadid},${msgpostid}]\x0f/; | 138 | $msg =~ s/\@\@PLACEHOLDER\@\@/\x03${thread_color}[${prefix}${msgthreadid},${msgpostid}]\x0f/; |
106 | 154 | } | 139 | } |
107 | 155 | 140 | ||
109 | 156 | signal_continue($server, $msg, $nick, $address, $target); | 141 | Irssi::signal_continue($server, $msg, $nick, $address, $target); |
110 | 157 | } | 142 | } |
115 | 158 | signal_add_last('message irc action', 'update_msgthreadid'); | 143 | Irssi::signal_add_last('message irc action', 'update_msgthreadid'); |
116 | 159 | signal_add_last('message irc notice', 'update_msgthreadid'); | 144 | Irssi::signal_add_last('message irc notice', 'update_msgthreadid'); |
117 | 160 | signal_add_last('message private', 'update_msgthreadid'); | 145 | Irssi::signal_add_last('message private', 'update_msgthreadid'); |
118 | 161 | signal_add_last('message public', 'update_msgthreadid'); | 146 | Irssi::signal_add_last('message public', 'update_msgthreadid'); |
119 | 162 | 147 | ||
120 | 163 | sub cache_store { | 148 | sub cache_store { |
121 | 164 | my ($cache_ref, $item, $cache_size) = @_; | 149 | my ($cache_ref, $item, $cache_size) = @_; |
122 | @@ -200,15 +185,15 @@ sub cache_store { | |||
123 | 200 | 185 | ||
124 | 201 | 186 | ||
125 | 202 | my %MSGTHREADID_CACHE; | 187 | my %MSGTHREADID_CACHE; |
128 | 203 | settings_add_int('matterircd_complete', 'matterircd_complete_message_thread_id_cache_size', 50); | 188 | Irssi::settings_add_int('matterircd_complete', 'matterircd_complete_message_thread_id_cache_size', 50); |
129 | 204 | command_bind 'matterircd_complete_msgthreadid_cache_dump' => sub { | 189 | sub cmd_matterircd_complete_msgthreadid_cache_dump { |
130 | 205 | my ($data, $server, $wi) = @_; | 190 | my ($data, $server, $wi) = @_; |
131 | 206 | 191 | ||
132 | 207 | if (not $data) { | 192 | if (not $data) { |
133 | 208 | return unless ref $wi and ($wi->{type} eq 'CHANNEL' or $wi->{type} eq 'QUERY'); | 193 | return unless ref $wi and ($wi->{type} eq 'CHANNEL' or $wi->{type} eq 'QUERY'); |
134 | 209 | } | 194 | } |
135 | 210 | 195 | ||
137 | 211 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 196 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
138 | 212 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 197 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
139 | 213 | 198 | ||
140 | 214 | my $channel = $data ? $data : $wi->{name}; | 199 | my $channel = $data ? $data : $wi->{name}; |
141 | @@ -227,17 +212,18 @@ command_bind 'matterircd_complete_msgthreadid_cache_dump' => sub { | |||
142 | 227 | } | 212 | } |
143 | 228 | Irssi::print("${channel}: Total: " . scalar @{$MSGTHREADID_CACHE{$channel}}); | 213 | Irssi::print("${channel}: Total: " . scalar @{$MSGTHREADID_CACHE{$channel}}); |
144 | 229 | }; | 214 | }; |
145 | 215 | Irssi::command_bind('matterircd_complete_msgthreadid_cache_dump', 'cmd_matterircd_complete_msgthreadid_cache_dump'); | ||
146 | 230 | 216 | ||
147 | 231 | my $MSGTHREADID_CACHE_SEARCH_ENABLED = 0; | 217 | my $MSGTHREADID_CACHE_SEARCH_ENABLED = 0; |
148 | 232 | my $MSGTHREADID_CACHE_INDEX = 0; | 218 | my $MSGTHREADID_CACHE_INDEX = 0; |
150 | 233 | command_bind 'message_thread_id_search' => sub { | 219 | sub cmd_message_thread_id_search { |
151 | 234 | my ($data, $server, $wi) = @_; | 220 | my ($data, $server, $wi) = @_; |
152 | 235 | 221 | ||
154 | 236 | return unless settings_get_int('matterircd_complete_message_thread_id_cache_size'); | 222 | return unless Irssi::settings_get_int('matterircd_complete_message_thread_id_cache_size'); |
155 | 237 | return unless ref $wi and ($wi->{type} eq 'CHANNEL' or $wi->{type} eq 'QUERY'); | 223 | return unless ref $wi and ($wi->{type} eq 'CHANNEL' or $wi->{type} eq 'QUERY'); |
156 | 238 | return unless exists($MSGTHREADID_CACHE{$wi->{name}}); | 224 | return unless exists($MSGTHREADID_CACHE{$wi->{name}}); |
157 | 239 | 225 | ||
159 | 240 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 226 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
160 | 241 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 227 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
161 | 242 | 228 | ||
162 | 243 | $MSGTHREADID_CACHE_SEARCH_ENABLED = 1; | 229 | $MSGTHREADID_CACHE_SEARCH_ENABLED = 1; |
163 | @@ -250,24 +236,25 @@ command_bind 'message_thread_id_search' => sub { | |||
164 | 250 | 236 | ||
165 | 251 | if ($msgthreadid) { | 237 | if ($msgthreadid) { |
166 | 252 | # Save input text. | 238 | # Save input text. |
168 | 253 | my $input = parse_special('$L'); | 239 | my $input = Irssi::parse_special('$L'); |
169 | 254 | # Remove existing thread. | 240 | # Remove existing thread. |
170 | 255 | $input =~ s/^@@(?:[0-9a-z]{26}|[0-9a-f]{3}) //; | 241 | $input =~ s/^@@(?:[0-9a-z]{26}|[0-9a-f]{3}) //; |
171 | 256 | # Insert message/thread ID from cache. | 242 | # Insert message/thread ID from cache. |
174 | 257 | gui_input_set_pos(0); | 243 | Irssi::gui_input_set_pos(0); |
175 | 258 | gui_input_set("\@\@${msgthreadid} ${input}"); | 244 | Irssi::gui_input_set("\@\@${msgthreadid} ${input}"); |
176 | 259 | } | 245 | } |
177 | 260 | }; | 246 | }; |
178 | 247 | Irssi::command_bind('message_thread_id_search', 'cmd_message_thread_id_search'); | ||
179 | 261 | 248 | ||
180 | 262 | my $ESC_PRESSED = 0; | 249 | my $ESC_PRESSED = 0; |
181 | 263 | my $O_PRESSED = 0; | 250 | my $O_PRESSED = 0; |
183 | 264 | signal_add_last 'gui key pressed' => sub { | 251 | sub signal_gui_key_pressed_msgthreadid { |
184 | 265 | my ($key) = @_; | 252 | my ($key) = @_; |
185 | 266 | 253 | ||
186 | 267 | return unless $MSGTHREADID_CACHE_SEARCH_ENABLED; | 254 | return unless $MSGTHREADID_CACHE_SEARCH_ENABLED; |
187 | 268 | 255 | ||
188 | 269 | my $server = Irssi::active_server(); | 256 | my $server = Irssi::active_server(); |
190 | 270 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 257 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
191 | 271 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 258 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
192 | 272 | 259 | ||
193 | 273 | if (($key == $KEY_RET) || ($key == $KEY_CTRL_U)) { | 260 | if (($key == $KEY_RET) || ($key == $KEY_CTRL_U)) { |
194 | @@ -280,14 +267,14 @@ signal_add_last 'gui key pressed' => sub { | |||
195 | 280 | 267 | ||
196 | 281 | # Cancel/abort, so remove thread stuff. | 268 | # Cancel/abort, so remove thread stuff. |
197 | 282 | elsif ($key == $KEY_CTRL_C) { | 269 | elsif ($key == $KEY_CTRL_C) { |
199 | 283 | my $input = parse_special('$L'); | 270 | my $input = Irssi::parse_special('$L'); |
200 | 284 | 271 | ||
201 | 285 | # Remove the Ctrl+C character. | 272 | # Remove the Ctrl+C character. |
202 | 286 | $input =~ tr///d; | 273 | $input =~ tr///d; |
203 | 287 | 274 | ||
204 | 288 | my $pos = 0; | 275 | my $pos = 0; |
205 | 289 | if ($input =~ s/^(@@(?:[0-9a-z]{26}|[0-9a-f]{3}) )//) { | 276 | if ($input =~ s/^(@@(?:[0-9a-z]{26}|[0-9a-f]{3}) )//) { |
207 | 290 | $pos = gui_input_get_pos() - length($1); | 277 | $pos = Irssi::gui_input_get_pos() - length($1); |
208 | 291 | } | 278 | } |
209 | 292 | 279 | ||
210 | 293 | # We also want to move the input position back one for Ctrl+C | 280 | # We also want to move the input position back one for Ctrl+C |
211 | @@ -297,8 +284,8 @@ signal_add_last 'gui key pressed' => sub { | |||
212 | 297 | # Replace the text in the input box with our modified version, | 284 | # Replace the text in the input box with our modified version, |
213 | 298 | # then move cursor positon to where it was without the | 285 | # then move cursor positon to where it was without the |
214 | 299 | # message/thread ID. | 286 | # message/thread ID. |
217 | 300 | gui_input_set($input); | 287 | Irssi::gui_input_set($input); |
218 | 301 | gui_input_set_pos($pos); | 288 | Irssi::gui_input_set_pos($pos); |
219 | 302 | 289 | ||
220 | 303 | $MSGTHREADID_CACHE_INDEX = 0; | 290 | $MSGTHREADID_CACHE_INDEX = 0; |
221 | 304 | $MSGTHREADID_CACHE_SEARCH_ENABLED = 0; | 291 | $MSGTHREADID_CACHE_SEARCH_ENABLED = 0; |
222 | @@ -327,19 +314,20 @@ signal_add_last 'gui key pressed' => sub { | |||
223 | 327 | $O_PRESSED = 0; | 314 | $O_PRESSED = 0; |
224 | 328 | } | 315 | } |
225 | 329 | }; | 316 | }; |
226 | 317 | Irssi::signal_add_last('gui key pressed', 'signal_gui_key_pressed_msgthreadid'); | ||
227 | 330 | 318 | ||
229 | 331 | signal_add_last 'complete word' => sub { | 319 | sub signal_complete_word_msgthread_id { |
230 | 332 | my ($complist, $window, $word, $linestart, $want_space) = @_; | 320 | my ($complist, $window, $word, $linestart, $want_space) = @_; |
231 | 333 | 321 | ||
232 | 334 | # We only want to tab-complete message/thread if this is the first | 322 | # We only want to tab-complete message/thread if this is the first |
233 | 335 | # word on the line. | 323 | # word on the line. |
234 | 336 | return if $linestart; | 324 | return if $linestart; |
236 | 337 | return unless settings_get_int('matterircd_complete_message_thread_id_cache_size'); | 325 | return unless Irssi::settings_get_int('matterircd_complete_message_thread_id_cache_size'); |
237 | 338 | return if (substr($word, 0, 1) eq '@' and substr($word, 0, 2) ne '@@'); | 326 | return if (substr($word, 0, 1) eq '@' and substr($word, 0, 2) ne '@@'); |
238 | 339 | return unless $window->{active} and ($window->{active}->{type} eq 'CHANNEL' || $window->{active}->{type} eq 'QUERY'); | 327 | return unless $window->{active} and ($window->{active}->{type} eq 'CHANNEL' || $window->{active}->{type} eq 'QUERY'); |
239 | 340 | return unless exists($MSGTHREADID_CACHE{$window->{active}->{name}}); | 328 | return unless exists($MSGTHREADID_CACHE{$window->{active}->{name}}); |
240 | 341 | 329 | ||
242 | 342 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 330 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
243 | 343 | return unless exists $chatnets{'*'} || exists $chatnets{$window->{active_server}->{chatnet}}; | 331 | return unless exists $chatnets{'*'} || exists $chatnets{$window->{active_server}->{chatnet}}; |
244 | 344 | 332 | ||
245 | 345 | if (substr($word, 0, 2) eq '@@') { | 333 | if (substr($word, 0, 2) eq '@@') { |
246 | @@ -352,21 +340,22 @@ signal_add_last 'complete word' => sub { | |||
247 | 352 | } | 340 | } |
248 | 353 | } | 341 | } |
249 | 354 | }; | 342 | }; |
250 | 343 | Irssi::signal_add_last('complete word', 'signal_complete_word_msgthread_id'); | ||
251 | 355 | 344 | ||
252 | 356 | sub cache_msgthreadid { | 345 | sub cache_msgthreadid { |
253 | 357 | my($server, $msg, $nick, $address, $target) = @_; | 346 | my($server, $msg, $nick, $address, $target) = @_; |
254 | 358 | 347 | ||
257 | 359 | return unless settings_get_int('matterircd_complete_message_thread_id_cache_size'); | 348 | return unless Irssi::settings_get_int('matterircd_complete_message_thread_id_cache_size'); |
258 | 360 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 349 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
259 | 361 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 350 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
260 | 362 | 351 | ||
261 | 363 | my @msgids = (); | 352 | my @msgids = (); |
262 | 364 | 353 | ||
264 | 365 | my @ignore_nicks = split(/\s+/, settings_get_str('matterircd_complete_nick_ignore')); | 354 | my @ignore_nicks = split(/\s+/, Irssi::settings_get_str('matterircd_complete_nick_ignore')); |
265 | 366 | # Ignore nicks configured to be ignored such as bots. | 355 | # Ignore nicks configured to be ignored such as bots. |
266 | 367 | if ($nick ~~ @ignore_nicks) { | 356 | if ($nick ~~ @ignore_nicks) { |
267 | 368 | # But not if the channel is in matterircd_complete_channel_dont_ignore. | 357 | # But not if the channel is in matterircd_complete_channel_dont_ignore. |
269 | 369 | my @channel_dont_ignore = split(/\s+/, settings_get_str('matterircd_complete_channel_dont_ignore')); | 358 | my @channel_dont_ignore = split(/\s+/, Irssi::settings_get_str('matterircd_complete_channel_dont_ignore')); |
270 | 370 | if ($target !~ @channel_dont_ignore) { | 359 | if ($target !~ @channel_dont_ignore) { |
271 | 371 | return; | 360 | return; |
272 | 372 | } | 361 | } |
273 | @@ -409,25 +398,25 @@ sub cache_msgthreadid { | |||
274 | 409 | $key = $nick | 398 | $key = $nick |
275 | 410 | } | 399 | } |
276 | 411 | 400 | ||
278 | 412 | my $cache_size = settings_get_int('matterircd_complete_message_thread_id_cache_size'); | 401 | my $cache_size = Irssi::settings_get_int('matterircd_complete_message_thread_id_cache_size'); |
279 | 413 | for my $msgid (@msgids) { | 402 | for my $msgid (@msgids) { |
280 | 414 | if (cache_store(\@{$MSGTHREADID_CACHE{$key}}, $msgid, $cache_size)) { | 403 | if (cache_store(\@{$MSGTHREADID_CACHE{$key}}, $msgid, $cache_size)) { |
281 | 415 | $MSGTHREADID_CACHE_INDEX = 0; | 404 | $MSGTHREADID_CACHE_INDEX = 0; |
282 | 416 | } | 405 | } |
283 | 417 | } | 406 | } |
284 | 418 | } | 407 | } |
289 | 419 | signal_add('message irc action', 'cache_msgthreadid'); | 408 | Irssi::signal_add('message irc action', 'cache_msgthreadid'); |
290 | 420 | signal_add('message irc notice', 'cache_msgthreadid'); | 409 | Irssi::signal_add('message irc notice', 'cache_msgthreadid'); |
291 | 421 | signal_add('message private', 'cache_msgthreadid'); | 410 | Irssi::signal_add('message private', 'cache_msgthreadid'); |
292 | 422 | signal_add('message public', 'cache_msgthreadid'); | 411 | Irssi::signal_add('message public', 'cache_msgthreadid'); |
293 | 423 | 412 | ||
295 | 424 | settings_add_bool('matterircd_complete', 'matterircd_complete_reply_msg_thread_id_at_start', 1); | 413 | Irssi::settings_add_bool('matterircd_complete', 'matterircd_complete_reply_msg_thread_id_at_start', 1); |
296 | 425 | 414 | ||
298 | 426 | signal_add_last 'message own_public' => sub { | 415 | sub signal_message_own_public_msgthreadid { |
299 | 427 | my($server, $msg, $target) = @_; | 416 | my($server, $msg, $target) = @_; |
300 | 428 | 417 | ||
303 | 429 | return unless settings_get_int('matterircd_complete_message_thread_id_cache_size'); | 418 | return unless Irssi::settings_get_int('matterircd_complete_message_thread_id_cache_size'); |
304 | 430 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 419 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
305 | 431 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 420 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
306 | 432 | 421 | ||
307 | 433 | if ($msg !~ /^@@((?:[0-9a-z]{26})|(?:[0-9a-f]{3}))/) { | 422 | if ($msg !~ /^@@((?:[0-9a-z]{26})|(?:[0-9a-f]{3}))/) { |
308 | @@ -435,14 +424,14 @@ signal_add_last 'message own_public' => sub { | |||
309 | 435 | } | 424 | } |
310 | 436 | my $msgid = $1; | 425 | my $msgid = $1; |
311 | 437 | 426 | ||
313 | 438 | my $cache_size = settings_get_int('matterircd_complete_message_thread_id_cache_size'); | 427 | my $cache_size = Irssi::settings_get_int('matterircd_complete_message_thread_id_cache_size'); |
314 | 439 | if (cache_store(\@{$MSGTHREADID_CACHE{$target}}, $msgid, $cache_size)) { | 428 | if (cache_store(\@{$MSGTHREADID_CACHE{$target}}, $msgid, $cache_size)) { |
315 | 440 | $MSGTHREADID_CACHE_INDEX = 0; | 429 | $MSGTHREADID_CACHE_INDEX = 0; |
316 | 441 | } | 430 | } |
317 | 442 | 431 | ||
318 | 443 | my $msgthreadid = $1; | 432 | my $msgthreadid = $1; |
319 | 444 | 433 | ||
321 | 445 | my $len = settings_get_int('matterircd_complete_shorten_message_thread_id'); | 434 | my $len = Irssi::settings_get_int('matterircd_complete_shorten_message_thread_id'); |
322 | 446 | if ($len < 25) { | 435 | if ($len < 25) { |
323 | 447 | # Shorten to length configured. We use unicode ellipsis (...) | 436 | # Shorten to length configured. We use unicode ellipsis (...) |
324 | 448 | # here to both allow word selection to just select parts of | 437 | # here to both allow word selection to just select parts of |
325 | @@ -451,22 +440,23 @@ signal_add_last 'message own_public' => sub { | |||
326 | 451 | $msgthreadid = substr($msgid, 0, $len) . "…"; | 440 | $msgthreadid = substr($msgid, 0, $len) . "…"; |
327 | 452 | } | 441 | } |
328 | 453 | 442 | ||
331 | 454 | my $thread_color = settings_get_int('matterircd_complete_reply_msg_thread_id_color'); | 443 | my $thread_color = Irssi::settings_get_int('matterircd_complete_reply_msg_thread_id_color'); |
332 | 455 | if (settings_get_bool('matterircd_complete_reply_msg_thread_id_at_start')) { | 444 | if (Irssi::settings_get_bool('matterircd_complete_reply_msg_thread_id_at_start')) { |
333 | 456 | $msg =~ s/^@@[0-9a-z]{26} /\x03${thread_color}[↪${msgthreadid}]\x0f /; | 445 | $msg =~ s/^@@[0-9a-z]{26} /\x03${thread_color}[↪${msgthreadid}]\x0f /; |
334 | 457 | } else { | 446 | } else { |
335 | 458 | $msg =~ s/^@@[0-9a-z]{26} //; | 447 | $msg =~ s/^@@[0-9a-z]{26} //; |
336 | 459 | $msg =~ s/$/ \x03${thread_color}[↪${msgthreadid}]\x0f/; | 448 | $msg =~ s/$/ \x03${thread_color}[↪${msgthreadid}]\x0f/; |
337 | 460 | } | 449 | } |
338 | 461 | 450 | ||
340 | 462 | signal_continue($server, $msg, $target); | 451 | Irssi::signal_continue($server, $msg, $target); |
341 | 463 | }; | 452 | }; |
342 | 453 | Irssi::signal_add_last('message own_public', 'signal_message_own_public_msgthreadid'); | ||
343 | 464 | 454 | ||
345 | 465 | signal_add_last 'message own_private' => sub { | 455 | sub signal_message_own_private { |
346 | 466 | my($server, $msg, $target, $orig_target) = @_; | 456 | my($server, $msg, $target, $orig_target) = @_; |
347 | 467 | 457 | ||
350 | 468 | return unless settings_get_int('matterircd_complete_message_thread_id_cache_size'); | 458 | return unless Irssi::settings_get_int('matterircd_complete_message_thread_id_cache_size'); |
351 | 469 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 459 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
352 | 470 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 460 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
353 | 471 | 461 | ||
354 | 472 | if ($msg !~ /^@@((?:[0-9a-z]{26})|(?:[0-9a-f]{3}))/) { | 462 | if ($msg !~ /^@@((?:[0-9a-z]{26})|(?:[0-9a-f]{3}))/) { |
355 | @@ -474,14 +464,14 @@ signal_add_last 'message own_private' => sub { | |||
356 | 474 | } | 464 | } |
357 | 475 | my $msgid = $1; | 465 | my $msgid = $1; |
358 | 476 | 466 | ||
360 | 477 | my $cache_size = settings_get_int('matterircd_complete_message_thread_id_cache_size'); | 467 | my $cache_size = Irssi::settings_get_int('matterircd_complete_message_thread_id_cache_size'); |
361 | 478 | if (cache_store(\@{$MSGTHREADID_CACHE{$target}}, $msgid, $cache_size)) { | 468 | if (cache_store(\@{$MSGTHREADID_CACHE{$target}}, $msgid, $cache_size)) { |
362 | 479 | $MSGTHREADID_CACHE_INDEX = 0; | 469 | $MSGTHREADID_CACHE_INDEX = 0; |
363 | 480 | } | 470 | } |
364 | 481 | 471 | ||
365 | 482 | my $msgthreadid = $1; | 472 | my $msgthreadid = $1; |
366 | 483 | 473 | ||
368 | 484 | my $len = settings_get_int('matterircd_complete_shorten_message_thread_id'); | 474 | my $len = Irssi::settings_get_int('matterircd_complete_shorten_message_thread_id'); |
369 | 485 | if ($len < 25) { | 475 | if ($len < 25) { |
370 | 486 | # Shorten to length configured. We use unicode ellipsis (...) | 476 | # Shorten to length configured. We use unicode ellipsis (...) |
371 | 487 | # here to both allow word selection to just select parts of | 477 | # here to both allow word selection to just select parts of |
372 | @@ -490,16 +480,17 @@ signal_add_last 'message own_private' => sub { | |||
373 | 490 | $msgthreadid = substr($msgid, 0, $len) . "…"; | 480 | $msgthreadid = substr($msgid, 0, $len) . "…"; |
374 | 491 | } | 481 | } |
375 | 492 | 482 | ||
378 | 493 | my $thread_color = settings_get_int('matterircd_complete_reply_msg_thread_id_color'); | 483 | my $thread_color = Irssi::settings_get_int('matterircd_complete_reply_msg_thread_id_color'); |
379 | 494 | if (settings_get_bool('matterircd_complete_reply_msg_thread_id_at_start')) { | 484 | if (Irssi::settings_get_bool('matterircd_complete_reply_msg_thread_id_at_start')) { |
380 | 495 | $msg =~ s/^@@[0-9a-z]{26} /\x03${thread_color}[↪${msgthreadid}]\x0f /; | 485 | $msg =~ s/^@@[0-9a-z]{26} /\x03${thread_color}[↪${msgthreadid}]\x0f /; |
381 | 496 | } else { | 486 | } else { |
382 | 497 | $msg =~ s/^@@[0-9a-z]{26} //; | 487 | $msg =~ s/^@@[0-9a-z]{26} //; |
383 | 498 | $msg =~ s/$/ \x03${thread_color}[↪${msgthreadid}]\x0f/; | 488 | $msg =~ s/$/ \x03${thread_color}[↪${msgthreadid}]\x0f/; |
384 | 499 | } | 489 | } |
385 | 500 | 490 | ||
387 | 501 | signal_continue($server, $msg, $target, $orig_target); | 491 | Irssi::signal_continue($server, $msg, $target, $orig_target); |
388 | 502 | }; | 492 | }; |
389 | 493 | Irssi::signal_add_last('message own_private', 'signal_message_own_private'); | ||
390 | 503 | 494 | ||
391 | 504 | 495 | ||
392 | 505 | #============================================================================== | 496 | #============================================================================== |
393 | @@ -510,15 +501,15 @@ signal_add_last 'message own_private' => sub { | |||
394 | 510 | 501 | ||
395 | 511 | 502 | ||
396 | 512 | my %NICKNAMES_CACHE; | 503 | my %NICKNAMES_CACHE; |
399 | 513 | settings_add_int('matterircd_complete', 'matterircd_complete_nick_cache_size', 20); | 504 | Irssi::settings_add_int('matterircd_complete', 'matterircd_complete_nick_cache_size', 20); |
400 | 514 | command_bind 'matterircd_complete_nick_cache_dump' => sub { | 505 | sub cmd_matterircd_complete_nick_cache_dump { |
401 | 515 | my ($data, $server, $wi) = @_; | 506 | my ($data, $server, $wi) = @_; |
402 | 516 | 507 | ||
403 | 517 | if (not $data) { | 508 | if (not $data) { |
404 | 518 | return unless ref $wi and $wi->{type} eq 'CHANNEL'; | 509 | return unless ref $wi and $wi->{type} eq 'CHANNEL'; |
405 | 519 | } | 510 | } |
406 | 520 | 511 | ||
408 | 521 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 512 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
409 | 522 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 513 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
410 | 523 | 514 | ||
411 | 524 | my $channel = $data ? $data : $wi->{name}; | 515 | my $channel = $data ? $data : $wi->{name}; |
412 | @@ -537,22 +528,23 @@ command_bind 'matterircd_complete_nick_cache_dump' => sub { | |||
413 | 537 | } | 528 | } |
414 | 538 | Irssi::print("${channel}: Total: " . scalar @{$NICKNAMES_CACHE{$channel}}); | 529 | Irssi::print("${channel}: Total: " . scalar @{$NICKNAMES_CACHE{$channel}}); |
415 | 539 | }; | 530 | }; |
416 | 531 | Irssi::command_bind('matterircd_complete_nick_cache_dump', 'cmd_matterircd_complete_nick_cache_dump'); | ||
417 | 540 | 532 | ||
419 | 541 | signal_add 'complete word' => sub { | 533 | sub signal_complete_word_nicks { |
420 | 542 | my ($complist, $window, $word, $linestart, $want_space) = @_; | 534 | my ($complist, $window, $word, $linestart, $want_space) = @_; |
421 | 543 | 535 | ||
422 | 544 | return if substr($word, 0, 2) eq '@@'; | 536 | return if substr($word, 0, 2) eq '@@'; |
423 | 545 | return unless $window->{active} and $window->{active}->{type} eq 'CHANNEL'; | 537 | return unless $window->{active} and $window->{active}->{type} eq 'CHANNEL'; |
424 | 546 | 538 | ||
426 | 547 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 539 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
427 | 548 | return unless exists $chatnets{'*'} || exists $chatnets{$window->{active_server}->{chatnet}}; | 540 | return unless exists $chatnets{'*'} || exists $chatnets{$window->{active_server}->{chatnet}}; |
428 | 549 | 541 | ||
429 | 550 | if (substr($word, 0, 1) eq '@') { | 542 | if (substr($word, 0, 1) eq '@') { |
430 | 551 | $word = substr($word, 1); | 543 | $word = substr($word, 1); |
431 | 552 | } | 544 | } |
433 | 553 | my $compl_char = settings_get_str('completion_char'); | 545 | my $compl_char = Irssi::settings_get_str('completion_char'); |
434 | 554 | my $own_nick = $window->{active}->{ownnick}->{nick}; | 546 | my $own_nick = $window->{active}->{ownnick}->{nick}; |
436 | 555 | my @ignore_nicks = split(/\s+/, settings_get_str('matterircd_complete_nick_ignore')); | 547 | my @ignore_nicks = split(/\s+/, Irssi::settings_get_str('matterircd_complete_nick_ignore')); |
437 | 556 | 548 | ||
438 | 557 | # We need to store the results in a temporary array so we can | 549 | # We need to store the results in a temporary array so we can |
439 | 558 | # sort. | 550 | # sort. |
440 | @@ -612,30 +604,31 @@ signal_add 'complete word' => sub { | |||
441 | 612 | } | 604 | } |
442 | 613 | } | 605 | } |
443 | 614 | }; | 606 | }; |
444 | 607 | Irssi::signal_add('complete word', 'signal_complete_word_nicks'); | ||
445 | 615 | 608 | ||
446 | 616 | sub cache_ircnick { | 609 | sub cache_ircnick { |
447 | 617 | my($server, $msg, $nick, $address, $target) = @_; | 610 | my($server, $msg, $nick, $address, $target) = @_; |
448 | 618 | 611 | ||
451 | 619 | return unless settings_get_int('matterircd_complete_nick_cache_size'); | 612 | return unless Irssi::settings_get_int('matterircd_complete_nick_cache_size'); |
452 | 620 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 613 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
453 | 621 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 614 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
454 | 622 | 615 | ||
457 | 623 | my $cache_size = settings_get_int('matterircd_complete_nick_cache_size'); | 616 | my $cache_size = Irssi::settings_get_int('matterircd_complete_nick_cache_size'); |
458 | 624 | my @ignore_nicks = split(/\s+/, settings_get_str('matterircd_complete_nick_ignore')); | 617 | my @ignore_nicks = split(/\s+/, Irssi::settings_get_str('matterircd_complete_nick_ignore')); |
459 | 625 | # Ignore nicks configured to be ignored such as bots. | 618 | # Ignore nicks configured to be ignored such as bots. |
460 | 626 | if ($nick !~ @ignore_nicks) { | 619 | if ($nick !~ @ignore_nicks) { |
461 | 627 | cache_store(\@{$NICKNAMES_CACHE{$target}}, $nick, $cache_size); | 620 | cache_store(\@{$NICKNAMES_CACHE{$target}}, $nick, $cache_size); |
462 | 628 | } | 621 | } |
463 | 629 | } | 622 | } |
467 | 630 | signal_add('message irc action', 'cache_ircnick'); | 623 | Irssi::signal_add('message irc action', 'cache_ircnick'); |
468 | 631 | signal_add('message irc notice', 'cache_ircnick'); | 624 | Irssi::signal_add('message irc notice', 'cache_ircnick'); |
469 | 632 | signal_add('message public', 'cache_ircnick'); | 625 | Irssi::signal_add('message public', 'cache_ircnick'); |
470 | 633 | 626 | ||
472 | 634 | signal_add_last 'message own_public' => sub { | 627 | sub signal_message_own_public_nicks { |
473 | 635 | my($server, $msg, $target) = @_; | 628 | my($server, $msg, $target) = @_; |
474 | 636 | 629 | ||
477 | 637 | return unless settings_get_int('matterircd_complete_nick_cache_size'); | 630 | return unless Irssi::settings_get_int('matterircd_complete_nick_cache_size'); |
478 | 638 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 631 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
479 | 639 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 632 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
480 | 640 | 633 | ||
481 | 641 | if ($msg !~ /^@([^@ \t:,\)]+)/) { | 634 | if ($msg !~ /^@([^@ \t:,\)]+)/) { |
482 | @@ -643,7 +636,7 @@ signal_add_last 'message own_public' => sub { | |||
483 | 643 | } | 636 | } |
484 | 644 | my $nick = $1; | 637 | my $nick = $1; |
485 | 645 | 638 | ||
487 | 646 | my $cache_size = settings_get_int('matterircd_complete_nick_cache_size'); | 639 | my $cache_size = Irssi::settings_get_int('matterircd_complete_nick_cache_size'); |
488 | 647 | # We want to make sure that the nick or user is still online and | 640 | # We want to make sure that the nick or user is still online and |
489 | 648 | # in the channel. | 641 | # in the channel. |
490 | 649 | my $wi = Irssi::active_win()->{active}; | 642 | my $wi = Irssi::active_win()->{active}; |
491 | @@ -657,20 +650,21 @@ signal_add_last 'message own_public' => sub { | |||
492 | 657 | } | 650 | } |
493 | 658 | } | 651 | } |
494 | 659 | }; | 652 | }; |
495 | 653 | Irssi::signal_add_last('message own_public', 'signal_message_own_public_nicks'); | ||
496 | 660 | 654 | ||
497 | 661 | my @NICKNAMES_CACHE_SEARCH; | 655 | my @NICKNAMES_CACHE_SEARCH; |
498 | 662 | my $NICKNAMES_CACHE_SEARCH_ENABLED = 0; | 656 | my $NICKNAMES_CACHE_SEARCH_ENABLED = 0; |
499 | 663 | my $NICKNAMES_CACHE_INDEX = 0; | 657 | my $NICKNAMES_CACHE_INDEX = 0; |
501 | 664 | command_bind 'nicknames_search' => sub { | 658 | sub cmd_nicknames_search { |
502 | 665 | my ($data, $server, $wi) = @_; | 659 | my ($data, $server, $wi) = @_; |
503 | 666 | 660 | ||
504 | 667 | return unless ref $wi and $wi->{type} eq 'CHANNEL'; | 661 | return unless ref $wi and $wi->{type} eq 'CHANNEL'; |
505 | 668 | 662 | ||
507 | 669 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 663 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
508 | 670 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 664 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
509 | 671 | 665 | ||
510 | 672 | my $own_nick = $wi->{ownnick}->{nick}; | 666 | my $own_nick = $wi->{ownnick}->{nick}; |
512 | 673 | my @ignore_nicks = split(/\s+/, settings_get_str('matterircd_complete_nick_ignore')); | 667 | my @ignore_nicks = split(/\s+/, Irssi::settings_get_str('matterircd_complete_nick_ignore')); |
513 | 674 | 668 | ||
514 | 675 | @NICKNAMES_CACHE_SEARCH = (); | 669 | @NICKNAMES_CACHE_SEARCH = (); |
515 | 676 | foreach my $cur ($wi->nicks()) { | 670 | foreach my $cur ($wi->nicks()) { |
516 | @@ -716,26 +710,27 @@ command_bind 'nicknames_search' => sub { | |||
517 | 716 | 710 | ||
518 | 717 | if ($nickname) { | 711 | if ($nickname) { |
519 | 718 | # Save input text. | 712 | # Save input text. |
522 | 719 | my $input = parse_special('$L'); | 713 | my $input = Irssi::parse_special('$L'); |
523 | 720 | my $compl_char = settings_get_str('completion_char'); | 714 | my $compl_char = Irssi::settings_get_str('completion_char'); |
524 | 721 | # Remove any existing nickname and insert one from the cache. | 715 | # Remove any existing nickname and insert one from the cache. |
525 | 722 | my $msgid = ""; | 716 | my $msgid = ""; |
526 | 723 | if ($input =~ s/^(\@\@(?:[0-9a-z]{26}|[0-9a-f]{3}) )//) { | 717 | if ($input =~ s/^(\@\@(?:[0-9a-z]{26}|[0-9a-f]{3}) )//) { |
527 | 724 | $msgid = $1; | 718 | $msgid = $1; |
528 | 725 | } | 719 | } |
529 | 726 | $input =~ s/^\@[^${compl_char}]+$compl_char //; | 720 | $input =~ s/^\@[^${compl_char}]+$compl_char //; |
532 | 727 | gui_input_set_pos(0); | 721 | Irssi::gui_input_set_pos(0); |
533 | 728 | gui_input_set("${msgid}\@${nickname}${compl_char} ${input}"); | 722 | Irssi::gui_input_set("${msgid}\@${nickname}${compl_char} ${input}"); |
534 | 729 | } | 723 | } |
535 | 730 | }; | 724 | }; |
536 | 725 | Irssi::command_bind('nicknames_search', 'cmd_nicknames_search'); | ||
537 | 731 | 726 | ||
539 | 732 | signal_add_last 'gui key pressed' => sub { | 727 | sub signal_gui_key_pressed_nicks { |
540 | 733 | my ($key) = @_; | 728 | my ($key) = @_; |
541 | 734 | 729 | ||
542 | 735 | return unless $NICKNAMES_CACHE_SEARCH_ENABLED; | 730 | return unless $NICKNAMES_CACHE_SEARCH_ENABLED; |
543 | 736 | 731 | ||
544 | 737 | my $server = Irssi::active_server(); | 732 | my $server = Irssi::active_server(); |
546 | 738 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 733 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
547 | 739 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 734 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
548 | 740 | 735 | ||
549 | 741 | if (($key == $KEY_RET) || ($key == $KEY_CTRL_U)) { | 736 | if (($key == $KEY_RET) || ($key == $KEY_CTRL_U)) { |
550 | @@ -746,15 +741,15 @@ signal_add_last 'gui key pressed' => sub { | |||
551 | 746 | 741 | ||
552 | 747 | # Cancel/abort, so remove current nickname. | 742 | # Cancel/abort, so remove current nickname. |
553 | 748 | elsif ($key == $KEY_CTRL_C) { | 743 | elsif ($key == $KEY_CTRL_C) { |
555 | 749 | my $input = parse_special('$L'); | 744 | my $input = Irssi::parse_special('$L'); |
556 | 750 | 745 | ||
557 | 751 | # Remove the Ctrl+C character. | 746 | # Remove the Ctrl+C character. |
558 | 752 | $input =~ tr///d; | 747 | $input =~ tr///d; |
559 | 753 | 748 | ||
561 | 754 | my $compl_char = settings_get_str('completion_char'); | 749 | my $compl_char = Irssi::settings_get_str('completion_char'); |
562 | 755 | my $pos = 0; | 750 | my $pos = 0; |
563 | 756 | if ($input =~ s/^(\@[^${compl_char}]+$compl_char )//) { | 751 | if ($input =~ s/^(\@[^${compl_char}]+$compl_char )//) { |
565 | 757 | $pos = gui_input_get_pos() - length($1); | 752 | $pos = Irssi::gui_input_get_pos() - length($1); |
566 | 758 | } | 753 | } |
567 | 759 | 754 | ||
568 | 760 | # We also want to move the input position back one for Ctrl+C | 755 | # We also want to move the input position back one for Ctrl+C |
569 | @@ -764,14 +759,15 @@ signal_add_last 'gui key pressed' => sub { | |||
570 | 764 | # Replace the text in the input box with our modified version, | 759 | # Replace the text in the input box with our modified version, |
571 | 765 | # then move cursor positon to where it was without the | 760 | # then move cursor positon to where it was without the |
572 | 766 | # current nickname. | 761 | # current nickname. |
575 | 767 | gui_input_set($input); | 762 | Irssi::gui_input_set($input); |
576 | 768 | gui_input_set_pos($pos); | 763 | Irssi::gui_input_set_pos($pos); |
577 | 769 | 764 | ||
578 | 770 | $NICKNAMES_CACHE_INDEX = 0; | 765 | $NICKNAMES_CACHE_INDEX = 0; |
579 | 771 | $NICKNAMES_CACHE_SEARCH_ENABLED = 0; | 766 | $NICKNAMES_CACHE_SEARCH_ENABLED = 0; |
580 | 772 | @NICKNAMES_CACHE_SEARCH = (); | 767 | @NICKNAMES_CACHE_SEARCH = (); |
581 | 773 | } | 768 | } |
582 | 774 | }; | 769 | }; |
583 | 770 | Irssi::signal_add_last('gui key pressed', 'signal_gui_key_pressed_nicks'); | ||
584 | 775 | 771 | ||
585 | 776 | 772 | ||
586 | 777 | #============================================================================== | 773 | #============================================================================== |
587 | @@ -782,15 +778,15 @@ signal_add_last 'gui key pressed' => sub { | |||
588 | 782 | 778 | ||
589 | 783 | 779 | ||
590 | 784 | my %REPLIED_CACHE; | 780 | my %REPLIED_CACHE; |
593 | 785 | settings_add_int('matterircd_complete', 'matterircd_complete_replied_cache_size', 50); | 781 | Irssi::settings_add_int('matterircd_complete', 'matterircd_complete_replied_cache_size', 50); |
594 | 786 | command_bind 'matterircd_complete_replied_cache_dump' => sub { | 782 | sub cmd_matterircd_complete_replied_cache_dump { |
595 | 787 | my ($data, $server, $wi) = @_; | 783 | my ($data, $server, $wi) = @_; |
596 | 788 | 784 | ||
597 | 789 | if (not $data) { | 785 | if (not $data) { |
598 | 790 | return unless ref $wi and $wi->{type} eq 'CHANNEL'; | 786 | return unless ref $wi and $wi->{type} eq 'CHANNEL'; |
599 | 791 | } | 787 | } |
600 | 792 | 788 | ||
602 | 793 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 789 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
603 | 794 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 790 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
604 | 795 | 791 | ||
605 | 796 | my $channel = $data ? $data : $wi->{name}; | 792 | my $channel = $data ? $data : $wi->{name}; |
606 | @@ -809,18 +805,20 @@ command_bind 'matterircd_complete_replied_cache_dump' => sub { | |||
607 | 809 | } | 805 | } |
608 | 810 | Irssi::print("${channel}: Total: " . scalar @{$REPLIED_CACHE{$channel}}); | 806 | Irssi::print("${channel}: Total: " . scalar @{$REPLIED_CACHE{$channel}}); |
609 | 811 | }; | 807 | }; |
610 | 808 | Irssi::command_bind('matterircd_complete_replied_cache_dump', 'cmd_matterircd_complete_replied_cache_dump'); | ||
611 | 812 | 809 | ||
613 | 813 | command_bind 'matterircd_complete_replied_cache_clear' => sub { | 810 | sub cmd_matterircd_complete_replied_cache_clear { |
614 | 814 | %REPLIED_CACHE = (); | 811 | %REPLIED_CACHE = (); |
615 | 815 | Irssi::print("matterircd_complete replied cache cleared"); | 812 | Irssi::print("matterircd_complete replied cache cleared"); |
616 | 816 | }; | 813 | }; |
617 | 814 | Irssi::command_bind('matterircd_complete_replied_cache_clear', 'cmd_cmd_matterircd_complete_replied_cache_clear'); | ||
618 | 817 | 815 | ||
619 | 818 | my $REPLIED_CACHE_CLEARED = 0; | 816 | my $REPLIED_CACHE_CLEARED = 0; |
622 | 819 | settings_add_bool('matterircd_complete', 'matterircd_complete_clear_replied_cache_on_away', 0); | 817 | Irssi::settings_add_bool('matterircd_complete', 'matterircd_complete_clear_replied_cache_on_away', 0); |
623 | 820 | signal_add 'away mode changed' => sub { | 818 | sub signal_away_mode_changed { |
624 | 821 | my ($server) = @_; | 819 | my ($server) = @_; |
625 | 822 | 820 | ||
627 | 823 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 821 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
628 | 824 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 822 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
629 | 825 | 823 | ||
630 | 826 | # When you visit the web UI when marked away, it retriggers this | 824 | # When you visit the web UI when marked away, it retriggers this |
631 | @@ -829,18 +827,19 @@ signal_add 'away mode changed' => sub { | |||
632 | 829 | $REPLIED_CACHE_CLEARED = 0; | 827 | $REPLIED_CACHE_CLEARED = 0; |
633 | 830 | } | 828 | } |
634 | 831 | 829 | ||
636 | 832 | if (settings_get_bool('matterircd_complete_clear_replied_cache_on_away') && $server->{usermode_away} && (! $REPLIED_CACHE_CLEARED)) { | 830 | if (Irssi::settings_get_bool('matterircd_complete_clear_replied_cache_on_away') && $server->{usermode_away} && (! $REPLIED_CACHE_CLEARED)) { |
637 | 833 | %REPLIED_CACHE = (); | 831 | %REPLIED_CACHE = (); |
638 | 834 | $REPLIED_CACHE_CLEARED = 1; | 832 | $REPLIED_CACHE_CLEARED = 1; |
639 | 835 | Irssi::print("matterircd_complete replied cache cleared"); | 833 | Irssi::print("matterircd_complete replied cache cleared"); |
640 | 836 | } | 834 | } |
641 | 837 | }; | 835 | }; |
642 | 836 | Irssi::signal_add('away mode changed', 'signal_away_mode_changed'); | ||
643 | 838 | 837 | ||
645 | 839 | signal_add 'message own_public' => sub { | 838 | sub signal_message_own_public_replied { |
646 | 840 | my($server, $msg, $target) = @_; | 839 | my($server, $msg, $target) = @_; |
647 | 841 | 840 | ||
650 | 842 | return unless settings_get_int('matterircd_complete_replied_cache_size'); | 841 | return unless Irssi::settings_get_int('matterircd_complete_replied_cache_size'); |
651 | 843 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 842 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
652 | 844 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 843 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
653 | 845 | 844 | ||
654 | 846 | if ($msg !~ /^@@((?:[0-9a-z]{26})|(?:[0-9a-f]{3}))/) { | 845 | if ($msg !~ /^@@((?:[0-9a-z]{26})|(?:[0-9a-f]{3}))/) { |
655 | @@ -848,15 +847,16 @@ signal_add 'message own_public' => sub { | |||
656 | 848 | } | 847 | } |
657 | 849 | my $msgid = $1; | 848 | my $msgid = $1; |
658 | 850 | 849 | ||
660 | 851 | my $cache_size = settings_get_int('matterircd_complete_replied_cache_size'); | 850 | my $cache_size = Irssi::settings_get_int('matterircd_complete_replied_cache_size'); |
661 | 852 | cache_store(\@{$REPLIED_CACHE{$target}}, $msgid, $cache_size); | 851 | cache_store(\@{$REPLIED_CACHE{$target}}, $msgid, $cache_size); |
662 | 853 | }; | 852 | }; |
663 | 853 | Irssi::signal_add('message own_public', 'signal_message_own_public_replied'); | ||
664 | 854 | 854 | ||
666 | 855 | signal_add 'message public' => sub { | 855 | sub signal_message_public { |
667 | 856 | my($server, $msg, $nick, $address, $target) = @_; | 856 | my($server, $msg, $nick, $address, $target) = @_; |
668 | 857 | 857 | ||
671 | 858 | return unless settings_get_int('matterircd_complete_replied_cache_size'); | 858 | return unless Irssi::settings_get_int('matterircd_complete_replied_cache_size'); |
672 | 859 | my %chatnets = map { $_ => 1 } split(/\s+/, settings_get_str('matterircd_complete_networks')); | 859 | my %chatnets = map { $_ => 1 } split(/\s+/, Irssi::settings_get_str('matterircd_complete_networks')); |
673 | 860 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; | 860 | return unless exists $chatnets{'*'} || exists $chatnets{$server->{chatnet}}; |
674 | 861 | 861 | ||
675 | 862 | # For '/me' actions, it has trailing space so we need to use | 862 | # For '/me' actions, it has trailing space so we need to use |
676 | @@ -873,5 +873,6 @@ signal_add 'message public' => sub { | |||
677 | 873 | } | 873 | } |
678 | 874 | } | 874 | } |
679 | 875 | 875 | ||
681 | 876 | signal_continue($server, $msg, $nick, $address, $target); | 876 | Irssi::signal_continue($server, $msg, $nick, $address, $target); |
682 | 877 | }; | 877 | }; |
683 | 878 | Irssi::signal_add('message public', 'signal_message_public'); |