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