1SRAIN(1) Srain SRAIN(1)
2
3
4
6 srain - Srain Documentation
7
8 Modern IRC client written in GTK.
9 [image]
10
11 Latest version: 2022-10-02 Version 1.5.0.
12
13 The source code of this site is hosted on GitHub. If you found any
14 mistake, feel free to file issue or pull request.
15
16 Supporting Srain through OpenCollective.
17
19 All posts… or Feed
20
22 Srain
23 ci-status docs-status channel
24
25 Modern IRC client written in GTK. [image]
26
27 Packaging Status
28 pkgstat
29
30 Features
31 • Fully open source
32
33 • RFC {1459,2812} compatible
34
35 • Partial IRCv3 support
36
37 • Multi-platform support (Linux, Windows, macOS and BSD)
38
39 • Act like modern IM client
40
41 • Graphical user interface
42
43 • Convenient connection panel
44
45 • Interactive channel search
46
47 • Forward message in one click
48
49 • URL preview
50
51 • Desktop notificaion
52
53 • Special optimization for bridge/relay bot
54
55 • Act like geek IRC client
56
57 • Anything can be done via commands
58
59 • Fine-grained configuration with hot update support
60
61 • Regex based message render and filter mechanisms
62
63 • IPC based plugin system (TODO)
64
65 Need Help?
66 Frequently Asked Questions may be helpful.
67
68 Feel free to contact us if you have any question about Srain.
69
70 • IRC Channel: #srain @ Libera Chat
71
72 • Github: file an issue Here
73
74 License
75 GNU General Public License Version 3
76
77 Quick Start
78 • Start Srain
79
80 • Connect to IRC server
81
82 • Predefined Server
83
84 • Custom Server
85
86 • Using Command
87
88 • Join Channel
89
90 • Directly Join
91
92 • Search Channel
93
94 • Using Command
95
96 NOTE:
97 For your information, the following screenshots are taken under
98 GNOME 3.34.4 with Wayland backed with Arc GTK theme and Breeze icon
99 theme.
100
101 Start Srain
102 After the Installation of Srain, you will find Srain in your applica‐
103 tions list, if not, just type srain in your shell to run it. Then you
104 will see Srain's initial interface.
105 [image]
106
107 Connect to IRC server
108 freenode is a famous IRC network, the official channel of Srain #srain
109 is also hosted on it. Let's start by connecting to freenode.
110
111 Predefined Server
112 Srain has a predefined list of commonly used IRC servers, freenode is
113 one of it. If you want to add server into this list, refer to
114 Configuration Manual.
115
116 Click the connection button on the Srain header bar, select the page
117 "Quick Mode", select the item "freenode" from candidate box with label
118 "Server", enter your nickname, then click the "Connect" button:
119 [image]
120
121 If everything goes well, Srain should connected to freenode, then your
122 would see some message from freenode's server:
123 [image]
124
125 Custom Server
126 While the server your want to connect to is not listed in the prede‐
127 fined list, switch to the page "Advanced Mode", enter the hostname,
128 port, and etc.
129
130 NOTE:
131
132 • If the port is a TLS port, make sure that the option "Use secure
133 connection" is checked.
134
135 • If the server's certificate is untrusted and you insist on contin‐
136 uing, check the option "Do not verify certificate".
137
138 Then click the "Connect" button:
139 [image]
140
141 Using Command
142 Refer to /server and /connect.
143
144 If you want to automatically execute commands at each time Srain
145 starts, please refer to Playground.
146
147 Join Channel
148 After connecting to freenode, now let's try to join #srain, the offi‐
149 cial channel of Srain.
150
151 Directly Join
152 While your has a clear channel to join, such as #srain, just click the
153 join button, select the page "Join Channel", enter the channel name in
154 the input entry with label "Channel", then click the "Join" button:
155 [image]
156
157 Now you should joined the channel:
158 [image]
159
160 Search Channel
161 While you don't know the exact name of the channel, click the join but‐
162 ton, switch to page "Search Channel", click the button with "refresh"
163 icon, Srain should start receiving channel list from server.
164
165 Then you can enter the keyword or specify the filter conditions to
166 search channel. For example we enter "#s", select the channel you want
167 to join from channe list, then click "Join" button to join it.
168 [image]
169
170 NOTE:
171 If the channel requires a join password, try double click the row of
172 channel.
173
174 Using Command
175 Refer to /join.
176
177 Installation
178 Srain is available on GNU/Linux, Windows, macOS and BSD.
179
180 • Dependencies
181
182 • Building
183
184 • Play with Meson
185
186 • Makefile Helper
187
188 • Distribution Packages
189
190 • GNU/Linux
191
192 • Arch Linux
193
194 • Debian
195
196 • Fedora
197
198 • Flatpak
199
200 • Gentoo
201
202 • openSUSE
203
204 • Windows
205
206 • Pre-built package
207
208 • Build byself
209
210 • macOS
211
212 • BSD
213
214 • OpenBSD
215
216 Dependencies
217 ┌───────────────────┬─────────────────────┬──────────┐
218 │Name │ Notes │ Version │
219 ├───────────────────┼─────────────────────┼──────────┤
220 │meson │ Only for Building │ > 0.47.0 │
221 ├───────────────────┼─────────────────────┼──────────┤
222 │make │ Optional, only for │ │
223 │ │ development │ │
224 ├───────────────────┼─────────────────────┼──────────┤
225 │appstream │ Only for building, │ │
226 │ │ on Debian-based │ │
227 │ │ distributions │ │
228 ├───────────────────┼─────────────────────┼──────────┤
229 │coreutils │ Only for building │ │
230 ├───────────────────┼─────────────────────┼──────────┤
231 │gcc │ Only for building │ │
232 ├───────────────────┼─────────────────────┼──────────┤
233 │pkg-config │ Only for building │ │
234 ├───────────────────┼─────────────────────┼──────────┤
235 │gettext │ Only for building │ │
236 ├───────────────────┼─────────────────────┼──────────┤
237 │glib2 │ │ │
238 ├───────────────────┼─────────────────────┼──────────┤
239 │glib-networking │ Optional, for TLS │ │
240 │ │ connection support │ │
241 ├───────────────────┼─────────────────────┼──────────┤
242 │gtk+3 │ │ >= 3.18 │
243 ├───────────────────┼─────────────────────┼──────────┤
244 │libsoup │ │ │
245 ├───────────────────┼─────────────────────┼──────────┤
246 │libconfig │ │ >= 1.5 │
247 ├───────────────────┼─────────────────────┼──────────┤
248 │libsecret │ │ │
249 ├───────────────────┼─────────────────────┼──────────┤
250 │openssl │ │ │
251 ├───────────────────┼─────────────────────┼──────────┤
252 │python-sphinx │ Optional, for │ │
253 │ │ building documenta‐ │ │
254 │ │ tion │ │
255 ├───────────────────┼─────────────────────┼──────────┤
256 │adwaita-icon-theme │ Or other icon │ │
257 │ │ themes │ │
258 └───────────────────┴─────────────────────┴──────────┘
259
260 Building
261 You should install the aboved Dependencies on your platform before the
262 following steps.
263
264 Firstly, download source code of srain, you can get source code of lat‐
265 est release:
266
267 $ wget https://github.com/SrainApp/srain/archive/1.5.0.tar.gz
268 $ tar -xvzf 1.5.0.tar.gz
269 $ cd srain-1.5.0
270
271 Or get git version:
272
273 $ git clone https://github.com/SrainApp/srain.git
274 $ cd srain
275
276 Play with Meson
277 Srain use Meson with ninja backend as its build system. You can build
278 it via the following commands:
279
280 $ meson setup builddir
281 $ cd builddir
282 $ ninja
283
284 Install(root privileges required):
285
286 $ cd builddir
287 # ninja install
288
289 HTML documentation and manpage are built and installed by default, if
290 you don't need them, just set meson option doc_builders to an empty ar‐
291 ray when setup:
292
293 $ meson setup -Ddoc_builders=[] builddir
294
295 Makefile Helper
296 We also provide a simple Makefile helper to simplify meson commands.
297 It is convenient for development.
298
299 $ make # Build srain
300 $ make build # Same as above
301 $ make install # Install srain to prefix under project root
302 $ make run # Run srain with isolated $HOME and XDG Directory
303 $ make debug # Same as `make run`, but with GDB attached
304 $ make inspect # Same as `make run`, but with GtkInspector
305 $ make clean # Remove all compilation and installation result
306 $ make doc # View installed HTML documentation
307
308 Distribution Packages
309 GNU/Linux
310 Arch Linux
311 Packages srain and srain-git (git version) are available on AUR, it is
312 quite easy to install using AUR helper(yay as an example):
313
314 $ yay -S srain
315 $ yay -S srain-git # git version
316
317 If you are the user of Arch Linux CN Repository, try:
318
319 # pacman -S archlinuxcn/srain
320 # pacman -S archlinuxcn/srain-git # git version
321
322 Debian
323 Srain now in offical repository of Debian:
324
325 # apt install srain
326
327 Fedora
328 Srain now in offical repository of fedora, use dnf to install it.
329
330 # dnf install srain
331
332 Flatpak
333
334
335 cpba is maintaining Flatpak manifest for Srain and The built package is
336 available on Flathub, just execute the following commands to install if
337 you already have flatpak installed:
338
339 $ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
340 $ flatpak install flathub im.srain.Srain
341
342 Gentoo
343 Please refers to gentoo portage overlays.
344
345 openSUSE
346 alois is maintaining openSUSE package for Srain, following this link to
347 install it.
348
349 Windows
350 Srain requires Windows 7 or later.
351
352 Pre-built package
353 After 2020-08-10 Version 1.1.2, we provide Windows portable binary that
354 you can get it from Github release page.
355
356 Build byself
357 If you want to build Srain on Windows youself, you should use the
358 toolchains provided by MSYS2 project.
359
360 Firstly install MSYS2, then open a MSYS2 shell, install the basic build
361 tools:
362
363 $ pacman -S base-devel
364 $ pacman -S mingw-w64-i686-toolchain # For 32-bit Windows
365 $ pacman -S mingw-w64-x86_64-toolchain # For 64-bit Windows
366
367 Then download the package script from MinGW PKGBUILD for Srain, run the
368 following commands at the directory of PKGBUILD:
369
370 $ MINGW_INSTALLS=mingw32 makepkg-mingw -fsi # For 32-bit Windows
371 $ MINGW_INSTALLS=mingw64 makepkg-mingw -fsi # For 64-bit Windows
372
373 If everything goes well, Srain is installed under your MinGW prefix.
374
375 NOTE:
376 If you suffer the "error while loading shared libraries: xxxx.dll:
377 cannot open shared object file: No such file or directory" problem
378 when running, please run it in cmd but not msys2 shell, and it will
379 show you real missing library. [1]
380
381 [1] https://github.com/Alexpux/MINGW-packages/issues/3939#issuecomment-397988379
382
383 macOS
384 WARNING:
385 macOS support of Srain is still experimental.
386
387 There is not a distribution package or package script for Srain on
388 macOS, you should build Srain by yourself.
389
390 Firstly install Homebrew, run the following commands to install depen‐
391 dencies:
392
393 $ brew install coreutils gcc pkg-config # building
394 $ brew install gettext glib-networking gtk+3 libsoup libconfig openssl adwaita-icon-theme
395
396 Next, tell pkg-config where to find the libraries we just installed:
397
398 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:"/usr/local/opt/icu4c/lib/pkgconfig"
399 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:"/usr/local/opt/openssl@3/lib/pkgconfig"
400
401 Then follow the steps in Building.
402
403 BSD
404 OpenBSD
405 Please refers to OpenBSD Ports.
406
407 Commands Manual
408 • Playground
409
410 • Syntax
411
412 • Available Commands
413
414 • /reload
415
416 • /server
417
418 • /connect
419
420 • /ignore & /unignore
421
422 • /query & /unquery
423
424 • /join
425
426 • /part
427
428 • /quit
429
430 • /topic
431
432 • /msg
433
434 • /me
435
436 • /nick
437
438 • /whois
439
440 • /invite
441
442 • /kick
443
444 • /mode
445
446 • /ctcp
447
448 • /pattern
449
450 • /filter & /unfilter
451
452 • /render & /unrender
453
454 • /quote
455
456 • /clear
457
458 • Obsoleted Commands
459
460 • /rignore & /unrignore
461
462 • /relay & /unrelay
463
464 Playground
465 User can run commands in two ways, the one way is typing them into the
466 input entry of chat buffer.
467
468 The another way is writing the commands to the server.auto-run and
469 chat.auto-run configuration items. For more details, please refer to
470 Configuration Manual.
471
472 Syntax
473 A command is a line of string that has the following format, different
474 elements are separated by whitespace:
475
476 /<name|alias> [subcommand] [<option> [value]]... [argument]...
477
478 User should use name to invoke a command. The command's name starts
479 with a slash / and doesn't contain any whitespace, such as: /join.
480 Some commands have alias that can be used instead of name, for example,
481 user can use /j instead of /join.
482
483 NOTE:
484 When you want to send a message starts with a slash, please prepend
485 another slash to the message. For example, you want to send "/this
486 is a slash prefixed message", you need to type "//this is a slash
487 prefixed message".
488
489 A subcommand is a instruction behind the command name, it is optional.
490
491 An option, as its name, is optional too, starts with a hyphen - and may
492 has a value.
493
494 option is often used as the switch of a flag or a way to change some
495 default values. For example, The command /connect -tls -port 6697, op‐
496 tion -tls is just a flag that tells srain use secure connections with
497 TLS. And -port requires a value, if -port is not specified, program
498 will use the default value 6667. Check /connect for more details.
499
500 If a value starts with a hyphen - or contains whitespaces, it should be
501 enclosed by single quotation mark '.
502
503 NOTE:
504 All option should appear behind subcommand (If any), and before ar‐
505 gument.
506
507 An argument is similar to value, but commonly it doesn't have a default
508 value so it can not be omitted (actually it depends on the implement of
509 the command). If the first argument starts with a hyphen -, it should
510 be enclosed by single quotation mark '. If an argument contains white‐
511 spaces, it should be quoted too. Specially, the last argument can con‐
512 tain whitespace without quoted.
513
514 If you want to use a single quotation mark in a quoted text, use back‐
515 slash \ to escape it. For backslash itself, use double backslash \\.
516
517 Available Commands
518 /reload
519 Usage:
520
521 /reload
522
523 Reload user configuration.
524
525 /server
526 Usage:
527
528 /server [connect|disconnect|list] <name>
529
530 Predefined IRC server management.
531
532 Sub commands:
533
534 • connect: connect to specified predefined server
535
536 • disconnect: disconnect from specified predefined server
537
538 • list: list all predefined servers
539
540 Arguments:
541
542 • name: unique name of server
543
544 /connect
545 Usage:
546
547 /connect [-port <port>] [-pwd <password>] [-tls] [-tls-noverify]
548 [-user <username>] [-real <realname>] <host> <nick>
549
550 Create a IRC server and connect to it immediately.
551
552 Options:
553
554 • -port: server port, default 6667
555
556 • -pwd: connection password, default empty
557
558 • -tls: use secure connections with TLS
559
560 • -tls-noverify: use TLS connection without certificate verification
561
562 • -user: specify username, default same as nickname
563
564 • -real: specify realname, default same as nickname
565
566 Arguments:
567
568 • host: server host
569
570 • nick: specify nickname
571
572 Example:
573
574 /connect -real 'I am srainbot' -tls -port 6697 chat.freenode.org srainbot
575 /connect 127.0.0.1 srainbot
576
577 /ignore & /unignore
578 Usage:
579
580 /ignore [-cur] <nick>
581 /unignore [-cur] <nick>
582
583 Ignore/unignore somebody's message.
584
585 Options:
586
587 • -cur: only ignore in current chat
588
589 /query & /unquery
590 Usage:
591
592 /query|q <nick>
593 /unquery [nick]
594
595 Start/stop private chat with somebody. For /unquery , If no nick is
596 specified, it stops the current private chat.
597
598 /join
599 Usage:
600
601 /join|j <channel>[,<channel>]... [<passwd>[,<passwd>]]...
602
603 Join specified channel(s), channels are separated by commas ,.
604
605 Example:
606
607 /join #archinux-cn,#gzlug,#linuxba
608 /join #channel1,#channe2 passwd1
609
610 /part
611 Usage:
612
613 /part|leave [<channel>[,<channel>]]... [<reason>]
614
615 Leave specified channel(s) with optional reason, channels are separated
616 by commas ,. If no channel is specified, it leaves the current channel.
617
618 Example:
619
620 /part #archinux-cn Zzz...
621 /part #archlinux-cn,#tuna
622 /part
623
624 /quit
625 Usage:
626
627 /quit [reason]
628
629 Quit current server with optional reason.
630
631 /topic
632 Usage:
633
634 /topic [-rm|<topic>]
635
636 Set the current channel's topic. If no topic specified, it just dis‐
637 plays the current channel's topic.
638
639 • -rm: remove current channel's topic
640
641 Example:
642
643 # Just view the topic
644 /topic
645 # Set the topic to "Welcome to Srain!"
646 /topic Welcome to Srain!
647 # Clear the topic
648 /topic -rm
649
650 /msg
651 Usage:
652
653 /msg|m <target> <message>
654
655 Send message to a target, the target can be channel or somebody's nick.
656 If you want to send a message to channel, you should /join it first.
657
658 /me
659 Usage:
660
661 /me <message>
662
663 Send an action message to the current target.
664
665 /nick
666 Usage:
667
668 /nick <new_nick>
669
670 Change your nickname.
671
672 /whois
673 Usage:
674
675 /whois <nick>
676
677 Get somebody's information on the server.
678
679 /invite
680 Usage:
681
682 /invite <nick> [channel]
683
684 Invite somebody to join a channel. If no channel is specified, it falls
685 back to current channel.
686
687 /kick
688 Usage:
689
690 /kick <nick> [channel] [reason]
691
692 Kick somebody from a channel, with optional reason. If no channel is
693 specified, it falls back to current channel.
694
695 /mode
696 Usage:
697
698 /mode <target> <mode>
699
700 Change target 's mode.
701
702 /ctcp
703 Usage:
704
705 /ctcp <target> <command> [message]
706
707 Send a CTCP request to target. The commonly used commands are: CLI‐
708 ENTINFO, FINGER, PING, SOURCE, TIME, VERSION, USERINFO. For the detail
709 of each command, please refer to https://modern.ircdocs.horse/ctcp.html
710 .
711
712 If you send a CTCP PING request without message, you will get the la‐
713 tency between the target.
714
715 NOTE:
716 DCC is not yet supported.
717
718 /pattern
719 Usage:
720
721 /pattern add <name> <pattern>
722 /pattern rm <name>
723 /pattern list
724
725 Regular expression pattern management. The added pattern can be used
726 elsewhere in the application, such as /filter & /unfilter and /render &
727 /unrender.
728
729 Sub commands:
730
731 • add: add a pattern with given name
732
733 • rm: remove a pattern with given name
734
735 • list: list all availables patterns
736
737 Arguments:
738
739 • name: unique name of pattern
740
741 • pattern: a valid Perl-compatible Regular Expression
742
743 /filter & /unfilter
744 Usage:
745
746 /filter [-cur] <pattern>
747 /unfilter [-cur] <pattern>
748
749 Filter message whose content matches specified pattern.
750
751 Options:
752
753 • -cur: only ignore in current chat
754
755 Arguments:
756
757 • pattern: name of regular expression pattern which is managed by
758 /pattern
759
760 Example:
761
762 This filter message that content is "Why GTK and not Qt?":
763
764 /pattern add troll ^Why GTK and not Qt\?$
765 /filter troll
766
767 To cancel the filter of these kind of message, use:
768
769 /unfilter troll
770
771 NOTE:
772 Pattern NO NEED to consider the case where the mIRC color code is
773 included in the message.
774
775 /render & /unrender
776 Usage:
777
778 /render [-cur] <nick> <pattern>
779 /unrender [-cur] <nick> <pattern>
780
781 Render message of specific user via specific pattern.
782
783 The given pattern should contains specific Named Subpatterns used for
784 capturing message fragment from original message content and become
785 part of rendered message.
786
787 There are list of available named subpatterns:
788
789 • (?<sender>): match name of sender, once this subpatterns is matched,
790 the original sender will be displayed as message remark
791
792 • (?<content>): match content of rendered message
793
794 • (?<time>): match time of rendered message
795
796 Arguments:
797
798 • nick: nickname of user
799
800 • pattern: name of regular expression pattern which is managed by
801 /pattern
802
803 Options:
804
805 • -cur: only effects the user under current chat
806
807 Example:
808
809 We assume that there is a IRC bot named "xmppbot". It forwards message
810 between XMPP and IRC. On IRC side, the forwarded message looks like
811 "<xmppbot> [xmpp_user] xmpp_message", you can render it to a more
812 easy-to-read format via the following commands:
813
814 /pattern add xmpp \[(?<sender>[^:]+?)\] (?<content>.*)
815 /render xmppbot xmpp
816
817 The forwarded meessage will look like "<xmpp_user> xmpp_message", and
818 the original message sender "xmppbot" will be displayed as message re‐
819 mark. Please refer to What is "relay message transform"? see its ef‐
820 fect.
821
822 NOTE:
823 Pattern SHOULD consider the case where the mIRC color code is in‐
824 cluded in the message.
825
826 /quote
827 Usage:
828
829 /quote <raw message>
830
831 For sending special IRC commands.
832
833 New in version 1.2.0.
834
835
836 /clear
837 Usage:
838
839 /clear
840
841 Clear all messages in current buffer.
842
843 New in version 1.4.
844
845
846 Obsoleted Commands
847 /rignore & /unrignore
848 This command has been dropped since 2019-06-14 Version 1.0.0rc5, please
849 use /filter & /unfilter instead.
850
851 /relay & /unrelay
852 This command has been dropped since 2019-06-14 Version 1.0.0rc5, please
853 use /render & /unrender instead.
854
855 Configuration Manual
856 Srain uses Libconfig to process configuration file.
857
858 • Configuration File
859
860 • Syntax
861
862 • Priority and Fallback
863
864 • All Configurable Items
865
866 Configuration File
867 The path of system wide configuration file builtin.cfg depends on the
868 compile flag --sysconfdir, default to be /etc/srain.
869
870 The path of user wide configuration file srain.cfg is $XDG_CON‐
871 FIG_HOME/srain, usually it is ~/.config/srain
872 (~/.var/app/im.srain.Srain for flatpak installs).
873
874 The difference between system wide and user wide configuration file is
875 the priority, The user wide configuration always overwrite the one in
876 system wide configuration. For more details about priority, refer to
877 Priority and Fallback.
878
879 Syntax
880 For the syntax of configuration file, please refer to Libconfig's docu‐
881 mentation: Configuration Files
882
883 For an example configuration, refer to All Configurable Items.
884
885 Priority and Fallback
886 A group is a collection of configurations. The same group in different
887 place have different priority.
888
889 server: { # A top level ``server`` group
890
891 # ...
892
893 user = {}
894 default-messages = {}
895 irc = {}
896 chat = { } # A ``chat`` group directly in ``server``
897
898 chat-list = (
899 { }, # A ``chat`` group in ``chat-list``
900 # ...
901 )
902 }
903
904 server-list: (
905 { }, # A ``server`` group in ``server-list``
906 # ...
907 )
908
909 For example, A server group contains the information(not all) of con‐
910 nection to IRC servers. server group can appear at the top level of
911 configuration file, or be an element of server-list list with a unique
912 name. The top level server is often used to specify the global configu‐
913 ration, and server-list is used to specify specified IRC servers.
914
915 The configuration in server-list can overwrite the top level server,
916 and if an option is not specified in server-list, It will fallback to
917 server.
918
919 Another similar group is chat, chat contains configuration of chat
920 panel, such as whether to show topic, whether to save chat log and etc.
921 Every server group can contain a chat group and a chat-list list. Ele‐
922 ments in chat-list are also identified with an unique name.
923
924 As same as the relationship between top level server and server-list,
925 chat-list is used to specify a specified chat and has higher priority.
926
927 As mentioned above, The priority of user configuration is always higher
928 than system's, so we can get the priority sorting of server and chat
929 group:
930
931 server-list(user) >
932 top level server(user) >
933 server-list(system) >
934 top level server(system)
935
936 chat-list in server-list(user) >
937 chat in server-list(user) >
938 chat-list in top level server(user) >
939 chat in top level server(user) >
940 chat-list in server-list(system) >
941 chat in server-list(system) >
942 chat-list in top level server(system) >
943 chat in top level server(system)
944
945 All Configurable Items
946 Here is the default system wide configuration file used by Srain, all
947 configurable items are already listed here. you can make a copy as your
948 user configuration file, but note:
949
950 1. User configuration always overwrite system's, if you don't know what
951 does this option means, please remove it from your user configura‐
952 tion rather than overwrite it
953
954 2. The server's name in server-list is unique, please remoeve the du‐
955 plicated server in server-list before using
956
957 # Srain built-in configuration file
958 # Application configuration.
959
960 version = "1.0.0rc5" # String; Every configuration file should have a
961 # version, altough it is not used yet
962 # id = "im.srain.Srain" # The identifier for Srain
963 theme = "default-bubble" # String; Theme; Available values: default
964 csd = true # Bool; Whether enable Client-Side Decoration
965 send-on-ctrl-enter = false # Bool; Send messsage on CTRL+Enter pressed
966 exit-on-close = false # Bool; Exit program on main window closed
967 auto-connect = [] # String array; Servers that are auto connected
968 # after startup
969 server-visibility = true # Bool; Whether the server buffer is visible
970
971 # If you want to report/fix a bug, terminal log will be helpful.
972 log =
973 {
974 prompt-color = true # Bool; Colorful output
975 prompt-file = false # Bool; Display the filename of the file which log
976 # statement is located
977 prompt-function = true # Bool; As aboved, function name
978 prompt-line = false # Bool; As aboved, line number
979
980 # String array; Specify the log level of a group of files
981 debug-targets = [] # Files with debug log level
982 info-targets = [] # Files with information log level
983 warn-targets = [""] # Files with warning log level
984 error-targets = [] # Files with error" log level
985 }
986
987 # Global IRC Server configuration, this group can also appear in server-list.
988 server =
989 {
990 auto-join = [] # String array; Chats that are auto joined after server
991 # is created
992 auto-run = [] # String array; Commands that are auto run after server
993 # is created
994
995 user =
996 {
997 nickname = "SrainUser"
998 username = "Srain"
999 realname = "Can you can a can?"
1000
1001 login:
1002 {
1003 method = "none" # String; Login method; Available values:
1004 # - none: No login method, default value
1005 # - nickserv: Login with NICKSERV command
1006 # - msg-nickserv: Login with /msg NickServ identify
1007 # - sasl-plain: Login with SASL PLAIN mechanism
1008 # - sasl-ecdsa: Login with SASL
1009 # ECDSA-NIST256P-CHALLENGE mechanism
1010 # - sasl-external: Login with SASL EXTERNAL mechanism
1011 # (requires a TLS certificate set in the **server**
1012 # section, not the one just below)
1013
1014 # For method "sasl-ecdsa"
1015 # certificate = "" # String; Path to login ECDSA certificate file, used for
1016 # sasl-ecdsa authentication (**not** sasl-external)
1017 }
1018
1019 # Default messages for performing specified action
1020 part-message = "Leaving."
1021 kick-message = "Kick."
1022 away-message = "Away from keyboard."
1023 quit-message = "El Psy Congroo."
1024 }
1025
1026 # Chat configuration, this group can also appear in chat-list.
1027 chat =
1028 {
1029 log = true # Bool; Persistent chat log to storage
1030 notify = true # Bool; Send notification when you are
1031 # mentioned by others or receiving any
1032 # ERROR message
1033 notify-all = true # Bool; Send notification when receiving
1034 # any PRIVMSG/ACTION/NOTIFY/ERROR message
1035 show-topic = true # Bool; Show topic
1036 show-avatar = false # Bool; Show user avater
1037 show-user-list = true # Bool; Show user list
1038 render-mirc-color = true # Bool; Render mirc color
1039 nick-completion-suffix = ":" # String; Suffix of completed nick name
1040 # e.g. "nick: msg"
1041
1042 preview-url = true # Bool; Show previewer for every URL
1043 auto-preview-url = true # Bool; Automatically preview supported URL
1044
1045 auto-run = [] # String array; Commands that are auto run after
1046 # chat is created
1047 }
1048
1049 # Specified chat configuration, every element in list should have a unique
1050 # ``name``.
1051 chat-list =
1052 (
1053 {
1054 # ``name`` is necessary for a ``chat`` group in ``chat-list``.
1055 name = "#srain"
1056 show-topic = true
1057 }
1058 )
1059 }
1060
1061 # Specified server configuration, every element in list should have a unique
1062 # "name".
1063 server-list =
1064 (
1065 {
1066 # ``name``, ``addresses`` are necessary for a ``server`` group
1067 # in ``server-list``, otherwise you can not connect to it.
1068 name = "Libera Chat" # String; The unique name of server
1069 addresses = [
1070 "irc.libera.chat:6697"
1071 ] # String array; Addresses of IRC server,
1072 # each address follows the format of
1073 # <host>[:<port>]. The port can be omitted,
1074 # default 6667 for non-TLS and 6697 for TLS
1075 tls = true # Bool; Connect with TLS encryption
1076 # tls-noverify = false # Bool; Connect with TLS encryption but without
1077 # certificate verification, only used while
1078 # connecting to a self-signed certificate
1079 # verified server
1080 encoding = "utf-8" # String; Encoding of IRC server, to get
1081 # all available value of encoding, check the
1082 # output of ``iconv --list``
1083 # ipv6 = false # Use IPv6 connection, not yet supported
1084 # certificate = "/home/you/.config/srain/libera.pem"
1085 # Client TLS certificate, that can be used for
1086 # authentication with CertFP or SASL EXTERNAL (if
1087 # ``method = "sasl-external"`` is set in the
1088 # ``user`` configuration)
1089 },
1090 {
1091 name = "GIMPNet"
1092 addresses = ["irc.gimp.org:6697", "irc.gnome.org:6697"]
1093 tls = true
1094 encoding = "utf-8"
1095 },
1096 {
1097 name = "OFTC"
1098 addresses = ["irc.oftc.net:6697"]
1099 tls = true
1100 encoding = "utf-8"
1101 },
1102 {
1103 name = "hackint"
1104 addresses = ["irc.hackint.org:6697"]
1105 tls = true
1106 encoding = "utf-8"
1107 },
1108 {
1109 name = "Rizon"
1110 addresses = ["irc.rizon.net:6697"]
1111
1112 tls = true
1113 encoding = "utf-8"
1114 },
1115 {
1116 name = "DALnet"
1117 addresses = [
1118 "irc.dal.net:6697",
1119 "agility.nl.eu.dal.net:6697",
1120 "bifrost.ca.us.dal.net:6697",
1121 "bitcoin.uk.eu.dal.net:6697",
1122 "choopa.nj.us.dal.net:6697",
1123 "diamond.hub.dal.net:6697",
1124 "fidelity.tx.us.dal.net:6697",
1125 "foxtrot.hub.dal.net:6697",
1126 "halcyon.il.us.dal.net:6697",
1127 "hash.ix.nl.dal.net:6697",
1128 "hoon.ix.au.dal.net:6697",
1129 "istana.ix.sg.dal.net:6697",
1130 "jingo.ix.us.dal.net:6697",
1131 "karsk.ix.eu.dal.net:6697",
1132 "kiwi.ix.nz.dal.net:6697",
1133 "koala.vc.au.dal.net:6697",
1134 "laud.ix.us.dal.net:6697",
1135 "loyalty.ix.us.dal.net:6697",
1136 "merlin.hub.dal.net:6697",
1137 "midnight.hub.dal.net:6697",
1138 "ninja.hub.dal.net:6697",
1139 "nonstop.ix.me.dal.net:6697",
1140 "oi.ix.au.dal.net:6697",
1141 "oper-e.dal.net:6697",
1142 "paradigm.hub.dal.net:6697",
1143 "powertech.no.eu.dal.net:6697",
1144 "punch.wa.us.dal.net:6697",
1145 "rangers.ix.us.dal.net:6697",
1146 "redemption.ix.us.dal.net:6697",
1147 "renew.hub.dal.net:6697",
1148 "smurf.hub.dal.net:6697",
1149 "underworld.se.eu.dal.net:6697",
1150 "uworld.hub.dal.net:6697"
1151 ]
1152 tls = true
1153 encoding = "utf-8"
1154 },
1155 {
1156 name = "EFnet"
1157 addresses = [
1158 "irc.efnet.fr:6667",
1159 "efnet.port80.se:6697",
1160 "efnet.portlane.se:6667",
1161 "irc.du.se:6667",
1162 "irc.homelien.no:6667",
1163 "irc.inet.tele.dk:6667",
1164 "irc.nordunet.se:6667",
1165 "irc.underworld.no:6667",
1166 "irc.choopa.net:6697",
1167 "irc.colosolutions.net:6667",
1168 "irc.mzima.net:6667",
1169 "irc.prison.netirc.servercentral.net:6667"
1170 ]
1171 tls = false
1172 encoding = "utf-8"
1173 },
1174 {
1175 name = "IRCnet"
1176 addresses = [
1177 "irc.ssl.ircnet.com:6697",
1178 "irc.ircnet.com:6667",
1179 "irc.at.ircnet.com:6667",
1180 "irc.be.ircnet.com:6667",
1181 "irc.cz.ircnet.com:6667",
1182 "irc.dk.ircnet.com:6667",
1183 "irc.ee.ircnet.com:6667",
1184 "irc.fi.ircnet.com:6667",
1185 "irc.fr.ircnet.com:6667",
1186 "irc.de.ircnet.com:6667",
1187 "irc.hu.ircnet.com:6667",
1188 "irc.it.ircnet.com:6667",
1189 "irc.jp.ircnet.com:6667",
1190 "irc.nl.ircnet.com:6667",
1191 "irc.no.ircnet.com:6667",
1192 "irc.pl.ircnet.com:6667",
1193 "irc.si.ircnet.com:6667",
1194 "irc.se.ircnet.com:6667",
1195 "irc.us.ircnet.com:6667"
1196 ]
1197 tls = false
1198 encoding = "utf-8"
1199 },
1200 {
1201 name = "Undernet"
1202 addresses = [
1203 "irc.undernet.org:6667",
1204 "ix1.undernet.org:6667",
1205 "ix2.undernet.org:6667",
1206 "ashburn.va.us.undernet.org:6667",
1207 "bucharest.ro.eu.undernet.org:6667",
1208 "budapest.hu.eu.undernet.org:6667",
1209 "chicago.il.us.undernet.org:6667"
1210 ]
1211 tls = false
1212 encoding = "utf-8"
1213 },
1214 {
1215 name = "QuakeNet"
1216 addresses = [
1217 "irc.quakenet.org:6667",
1218 "dreamhack.se.quakenet.org:6667",
1219 "euroserv.fr.quakenet.org:6667",
1220 "irc.ipv6.quakenet.org:6667",
1221 "port80a.se.quakenet.org:6667",
1222 "port80b.se.quakenet.org:6667",
1223 "port80c.se.quakenet.org:6667",
1224 "portlane.se.quakenet.org:6667",
1225 "servercentral.il.us.quakenet.org:6667",
1226 "underworld1.no.quakenet.org:6667"
1227 ]
1228 tls = false
1229 encoding = "utf-8"
1230 },
1231 {
1232 name = "freenode"
1233 addresses = [
1234 "irc.freenode.net:6697",
1235 "chat.freenode.net:6697",
1236 "irc.freenode.org:6697",
1237 "chat.freenode.org:6697"
1238 ]
1239 tls = true
1240 encoding = "utf-8"
1241 },
1242 {
1243 name = "localhost"
1244 addresses = ["localhost:6667", "127.0.0.1:6667"]
1245 tls = false
1246 }
1247
1248 # TODO: More predefined servers
1249 )
1250
1251
1252 Development Specification
1253 int bus_count = 1;
1254
1255 Codeing Style
1256 • Public header 用 __XXX_H 形式
1257
1258 • 提倡在作用域开头统一声明变量,而不是即用即声明,方便释放的时候统一处理
1259
1260 • 缩进:四空格,无 Tab
1261
1262 • 折行:
1263
1264 • 头文件中的函数签名可以不折行,其他地方的代码一律小于 80 char per
1265 line
1266
1267 • 参数过长时,从超过长度的第一个参数开始折行,参数无需对齐
1268
1269 • 太长的字符串可以不折行
1270
1271 • gtk_widget_class_bind_template_child() 由于实在太长,可以不折行
1272
1273 • 花括号不换行(除非在 case
1274 中),右圆括号和左花括号之间没有空格(待定)
1275
1276 • 命名:
1277
1278 • 鼓励局部变量和函数参数使用缩写,全局变量及函数名,类型名不鼓励缩写
1279
1280 • 宏大写,数据类型,类名用大驼峰法,变量使用全小写 + 下划线
1281
1282 • 文件名全小写,以下划线分隔
1283
1284 • 注释:
1285
1286 • 按英文规范,句首第一个单词首字符大写,多句时使用标点符号,同样每行不得超过
1287 80 字符(汉字以两字符计),链接可以不折行
1288
1289 • Git commit log: 格式为 MODULE(TYPE): DESCRIPTION
1290 ,当前可用的模块(MODULE) 有: All Core Sirc Sui Prefs Filter Decora‐
1291 tor Lib I18n Data Plugin Build Script Doc... ,可用的提交类型(TYPE)
1292 有: feat impl change fix improve cleanup refactor update release
1293 misc...
1294
1295 • I18N:所有需要在界面上展示的格式化字符串中的控制字符均使用 numbered
1296 argument, 即 %n$X 形式
1297
1298 • Change log: 应分为四类
1299
1300 • Changed: 设计或功能上的改动,可能会带来兼容问题的一定要说明
1301
1302 • Added: 新增的功能或者依赖
1303
1304 • Removed: 移除的功能或者依赖
1305
1306 • Imporved: 性能或功能或易用性上的改善以及 bug 修复
1307
1308 • 发布前须知
1309
1310 • 集成测试 (TODO)
1311
1312 • 更新翻译
1313
1314 • 更新文档
1315
1316 • 更新 change log
1317
1318 • 更新项目中的版本号
1319
1320 • 确认文档中的提供的安装脚本可用
1321
1322 • 对最新的 commit 打 tag
1323
1324 • 通知各个发行版的打包维护者
1325
1326 • Arch Linux: @SilverRainZ
1327
1328 • Gentoo: @xeirrr
1329
1330 • ...
1331
1332 Miscellaneous
1333 Hot Keys
1334 • ctrl + j/k: switch chat panel
1335
1336 • up/down: scroll message list
1337
1338 NOTE:
1339 Customized hot keys will be supported in the future.
1340
1341 Chat Logs
1342 Chat logs is enabled by default, log files are located at
1343 $XDG_DATA_HOME/srain/logs, usually it is ~/.local/share/srain/logs.
1344
1345 Insert Emojis
1346 Click the emoji button or use shortcuts Ctrl+. or Ctrl+;.
1347 [image] Emoji button.UNINDENT
1348
1349 New in version 1.3.
1350
1351
1352 Frequently Asked Questions
1353 Frequently asked questions are listed here, you can visit issue page to
1354 see more questions that asked by our users.
1355
1356 • Does Srain support Windows?
1357
1358 • What is "relay message transform"?
1359
1360 • Where are the log files?
1361
1362 • How can I send message which has a slash("/") prefixed?
1363
1364 • How can I remove my stored password?
1365
1366 • How can I hide JOIN/PART messages of channel?
1367
1368 • Why can't I login to my ZNC server?
1369
1370 Does Srain support Windows?
1371 Yes, please refer to Windows.
1372
1373 What is "relay message transform"?
1374 There are many relay bots forward messages from other IM to IRC net‐
1375 work, "Relay message transform" make these messages easier to read.
1376
1377 For example, there is a telegram bot named "telegram", the words in
1378 brackets is the named of the telegram user.
1379 [image]
1380
1381 Run command /pattern add normal-relay \[(?<sender>[^:]+?)\] (?<con‐
1382 tent>.*) and /render telegram normal-relay, you get:
1383 [image]
1384
1385 For more details, please refer to commands-pattern and commands-render.
1386
1387 Where are the log files?
1388 Refer to Chat Logs.
1389
1390 How can I send message which has a slash("/") prefixed?
1391 Please prepend another slash to the message.
1392
1393 Refer to Syntax.
1394
1395 How can I remove my stored password?
1396 Just leave the password entry empty and check the "Remember password"
1397 checkbox before connect to server or join channel, the corresponding
1398 password will be removed.
1399
1400 Or you can use secret-tool (provided by libsecret) to manage all your
1401 stored passwords.
1402
1403 How can I hide JOIN/PART messages of channel?
1404 So far, Srain has not yet a specialized option for hiding such mes‐
1405 sages. You can use write regular expression to filter them:
1406
1407 /pattern add filter-join ^\w+ has joined$
1408 /filter filter-join
1409 /pattern add filter-part ^\w+ has left: .*$
1410 /filter filter-part
1411
1412 NOTE:
1413 The content of regular expression depends on your language.
1414
1415 Why can't I login to my ZNC server?
1416 According ZNC's FAQ, way 2, supply your "user@phone/network:pass"
1417 (without quotes) in the server password field. Other as usual.
1418
1419 NOTE:
1420 Way 1 in ZNC's FAQ requires username field can be set via connection
1421 panel, which will be supported by Srain in the future.
1422
1423 Change Log
1424 • 2022-10-02 Version 1.5.0
1425
1426 • 2022-10-02 Version 1.4.2
1427
1428 • 2022-10-02 Version 1.3.3
1429
1430 • 2022-07-30 Version 1.4.1
1431
1432 • 2022-05-07 Version 1.4.0
1433
1434 • 2022-02-10 Version 1.3.2
1435
1436 • 2021-12-18 Version 1.3.1
1437
1438 • 2021-12-18 Version 1.2.5
1439
1440 • 2021-09-23 Version 1.3.0
1441
1442 • 2021-07-18 Version 1.2.4
1443
1444 • 2021-06-26 Version 1.2.3
1445
1446 • 2021-05-30 Version 1.2.2
1447
1448 • 2021-04-02 Version 1.2.1
1449
1450 • 2021-02-28 Version 1.2.0
1451
1452 • 2020-10-01 Version 1.1.3
1453
1454 • 2020-08-10 Version 1.1.2
1455
1456 • 2020-06-27 Version 1.1.1
1457
1458 • 2020-05-24 Version 1.1.0
1459
1460 • 2020-04-11 Version 1.0.2
1461
1462 • 2020-03-14 Version 1.0.1
1463
1464 • 2020-02-24 Version 1.0.0
1465
1466 • 2019-10-07 Version 1.0.0rc9999
1467
1468 • 2019-06-14 Version 1.0.0rc5
1469
1470 • 2019-05-13 Version 1.0.0rc4
1471
1472 • 2019-04-14 Version 1.0.0rc3
1473
1474 • 2019-01-24 Version 1.0.0rc2
1475
1476 • 2018-09-10 Version 1.0.0rc1
1477
1478 • 2018-02-28 Version 0.06.4
1479
1480 • 2017-12-22 Version 0.06.3
1481
1482 • 2017-09-12 Version 0.06.2
1483
1484 • 2017-08-18 Version 0.06.1
1485
1486 • 2017-07-29 Version 0.06
1487
1488 • 2016-09-19 Version 0.05.1
1489
1490 • 2016-08-27 Version 0.05
1491
1492 • 2016-04-30 Version 0.03
1493
1494 • 2016-04-13 Version 0.02
1495
1496 • 2016-04-07 Version 0.01
1497
1498 2022-10-02 Version 1.5.0
1499 • Features:
1500
1501 • Able to identify Nordic GTK Theme as dark theme (#372)
1502
1503 • Activate the corresponding buffer to a response user query (#381)
1504
1505 • Changes:
1506
1507 • No additional sphinx extensions are required to build documentation
1508 (#368)
1509
1510 • Cleanup deprecated APIs (#369)
1511
1512 • Suppress error message when connection keeps failing (#386)
1513
1514 • Enable debian release build , thanks to @tomac4t (#387)
1515
1516 • Bug fixes:
1517
1518 • Fix SASL authentication error when connecting to Soju (#371)
1519
1520 2022-10-02 Version 1.4.2
1521 • Backport #371
1522
1523 2022-10-02 Version 1.3.3
1524 • Backport domain name change, see 2022-05-07 Version 1.4.0
1525
1526 • Backport #371
1527
1528 2022-07-30 Version 1.4.1
1529 • Changes:
1530
1531 • New website, move domain name from srain.im to srain.silver‐
1532 rainz.me, see Migrate domain name to srain.silverrainz.me
1533
1534 • Require mesion >= 0.47.0
1535
1536 2022-05-07 Version 1.4.0
1537 • Features:
1538
1539 • Add support for IRCv3 standard-replies (#354), by @progval
1540
1541 • Add support for SASL EXTERNAL (#352), by @progval
1542
1543 • Add support for invite-notify (#359), by @progval
1544
1545 • Add conf item server-visibility for setting default server visib‐
1546 lity (#361), by @SilverRainZ
1547
1548 • Add support for server-time (#345), by @progval
1549
1550 • Add /clear command for clearing messages of current buffer (#268),
1551 by @SilverRainZ
1552
1553 • Bug fixes:
1554
1555 • Fix workflow for building MS Windows release artifact (#360), by
1556 @lifeibiren
1557
1558 • Changes:
1559
1560 • Make the buffer menu apply to the right-clicked item instead of the
1561 active buffer (#353), by progval
1562
1563 • Srain now accepting donations through OpenCollective (‐
1564 https://opencollective.com/srain)
1565
1566 • Disable workflow for building debian release artifact since we have
1567 offical debian package (99d9d86)
1568
1569 2022-02-10 Version 1.3.2
1570 • Features:
1571
1572 • Add French translation (#351), by @progval
1573
1574 • Bug fixes:
1575
1576 • Silence assertion failure on /part command (#348), by @progval
1577
1578 • Silence "Unknown capability" warning on trailing whitespace (#349),
1579 by @progval
1580
1581 • Changes:
1582
1583 • Add tooltips to buttons with no text(#350), by @progval
1584
1585 • Srain is added to offical repository of Debian, see Debian for de‐
1586 tails
1587
1588 2021-12-18 Version 1.3.1
1589 • Bug fixes:
1590
1591 • Fix build of macOS (#339), by @SilverRainZ
1592
1593 • Make channel messages with origin out of channels can be shown (‐
1594 #336), by @progval
1595
1596 • Rejoin channels after NICKSERV authentication finishes (#274), by
1597 @SilverRainZ
1598
1599 2021-12-18 Version 1.2.5
1600 • Bug fixes:
1601
1602 • Backport #336, #274
1603
1604 2021-09-23 Version 1.3.0
1605 • Features:
1606
1607 • Implement ISUPPORT parsing + the UTF8ONLY IRCv3 specification (‐
1608 #331), thanks to @progval
1609
1610 • Add support for RPL_UMODEIS (#331), thanks to @progval
1611
1612 • Make nick completion case-insensitive (#333), thanks to @progval
1613
1614 • Add button for inserting emoji (#279)
1615
1616 • Bug fixes:
1617
1618 • Fix configuration syntax errors caused by trailing commas (#330),
1619 thanks to @progval
1620
1621 2021-07-18 Version 1.2.4
1622 • Bug fixes:
1623
1624 • Fix bug casued by #316 (#319)
1625
1626 • Fix crach when URL preview async task failed (#322)
1627
1628 2021-06-26 Version 1.2.3
1629 • Bug fixes:
1630
1631 • Eliminate GDK warning (#316)
1632
1633 2021-05-30 Version 1.2.2
1634 • Changed:
1635
1636 • Add libera.chat IRC network (#311)
1637
1638 • Updated Dutch translation (b6830e9)
1639
1640 • Bug fixes:
1641
1642 • Fix windows build (#300, #303)
1643
1644 2021-04-02 Version 1.2.1
1645 • Features:
1646
1647 • Add Ukrainian translations (#292), thanks to @andmizyk
1648
1649 • Bug fixes:
1650
1651 • Minor fixes (#290)
1652
1653 2021-02-28 Version 1.2.0
1654 • Features:
1655
1656 • Switch build system from Make to Meson (#266)
1657
1658 • Add FreeBSD implementations for srn_get_executable_{path,dir},
1659 thanks to @wahjava
1660
1661 • Add /quote command for sending special IRC commands, thanks to @hno
1662 (#283)
1663
1664 • Add support for hiding server buffer (#287)
1665
1666 • Bug fixes:
1667
1668 • Fix an use-after-free BUG (#267)
1669
1670 • Fix implicit declaration error on some systems, thanks to
1671 @lgbaldoni (#270)
1672
1673 2020-10-01 Version 1.1.3
1674 • Bug fixes:
1675
1676 • Fix an use-after-free BUG (#267)
1677
1678 2020-08-10 Version 1.1.2
1679 NOTE:
1680 This release contains only improvement for MS Windows, user of other
1681 platform can ignore it.
1682
1683 • Features:
1684
1685 • Binary for MS Windows now can automatically built via Github Ac‐
1686 tions, thanks to @lifeibiren (#259), please refer to Windows for
1687 more details
1688
1689 • Changes:
1690
1691 • For ease of running on windows, Srain's executable path is added to
1692 the search paths of {configuration,data} file. Thanks to
1693 @lifeibiren (#259)
1694
1695 2020-06-27 Version 1.1.1
1696 • Changes:
1697
1698 • Improve auto-scroll policy of message list (#255)
1699
1700 • Bug fixes:
1701
1702 • Fix TLS certificate verification error on glib-networking 2.64.3 (‐
1703 #251)
1704
1705 • Fix crash when connecting to an invalid host (#234)
1706
1707 2020-05-24 Version 1.1.0
1708 • Features:
1709
1710 • Support multiple selection of message (#138)
1711
1712 • Support jump to mentioned message (#243)
1713
1714 • Nickname will be highlighted when mentioned (#243)
1715
1716 • Auto build deb package (#238)
1717
1718 • Changes:
1719
1720 • Improve fcous control of UI
1721
1722 • Replace appdata with metainfo (#240)
1723
1724 • Validate metainfo with appstream-util (#242)
1725
1726 • Bug fixes:
1727
1728 • Some implicit declarations fixes (#236)
1729
1730 • Some typo fixes (#239)
1731
1732 2020-04-11 Version 1.0.2
1733 • Features:
1734
1735 • Add MAN documentation (deaf723)
1736
1737 • Add more predefined IRC networks: DALnet, EFnet, IRCnet, Undernet
1738 and QuakeNet (#228)
1739
1740 • Changes:
1741
1742 • Build: Allow setting CC variable via environment (#224)
1743
1744 • Add channel related messages to corresponding buffer as possible (‐
1745 #149)
1746
1747 • Improve widget focus control (#229)
1748
1749 • Drop unused icons (6239fe5)
1750
1751 • Provide clearer error message when connecting (#233)
1752
1753 • Update gentoo installation documentation Gentoo (ceb5ca3)
1754
1755 • Bug fixes:
1756
1757 • Truncate long message before sendisg (#227)
1758
1759 • Deal with invalid UTF-8 string (50e7757)
1760
1761 • Fix incorrect user number of channel user list (#230)
1762
1763 • Fix incorrect icon install path (9f07380)
1764
1765 2020-03-14 Version 1.0.1
1766 • Features:
1767
1768 • Auto rename to original nick when ghost quit (#198)
1769
1770 • Add hackint IRC network (#201), thanks to @kpcyrd
1771
1772 • Add Dutch translation (#215), thanks to @Vistaus
1773
1774 • Add two FAQs to documentation (#217)
1775
1776 • Add debian pack script (contrib#1), thanks to @tomac4t. Please re‐
1777 fer to Debian to build a deb package
1778
1779 • Changes:
1780
1781 • Move continuous integration from travis CI to github actions (#203,
1782 #204), thanks to @tomac4t
1783
1784 • Make header bar buttons repect default belief (#205, #218)
1785
1786 • Bug fixes:
1787
1788 • Fix case sensitivity issue for IRC messages (#202), thanks to
1789 @hhirtz
1790
1791 • Fix invalid changelog section of appdata file (#214)
1792
1793 • Fix missing dependences in documentation (#216), thanks to @avoidr
1794
1795 2020-02-24 Version 1.0.0
1796 • Changes:
1797
1798 • Some code cleanup
1799
1800 • Update Quick Start documentation
1801
1802 • Bug fixes:
1803
1804 • Allow Srain runs without dbus secrets service (#195)
1805
1806 • Fix nick generation logical (39ced08)
1807
1808 NOTE:
1809 1.0.0 is the first stable release of Srain, enjoy!
1810
1811 2019-10-07 Version 1.0.0rc9999
1812 • Features:
1813
1814 • Activate corresponding buffer when channel URL is clicked (#190)
1815
1816 • Command alias support (#188)
1817
1818 • List predefined servers via command, see /server for details (‐
1819 656f3e5)
1820
1821 • Changes:
1822
1823 • Replace all icons with freedesktop standard icons (#120)
1824
1825 • Bug fixes:
1826
1827 • Fix wrong usage of GError (#179)
1828
1829 • Fix image preview problem when image is hard to detect type (#163)
1830
1831 • Fix memory leak of pattern filter (9464a9e)
1832
1833 • Fix the breaking "abort sending" icon (#144)
1834
1835 • Fix the invite menu of user (9f98cbb)
1836
1837 2019-06-14 Version 1.0.0rc5
1838 • Added:
1839
1840 • Regular expression pattern management using /pattern command
1841
1842 • Add command /filter & /unfilter for filtering message via pat‐
1843 tern
1844
1845 • Add command /render & /unrender for rendering message via pat‐
1846 tern
1847
1848 • Changed:
1849
1850 • Refactor detector module and rename it to render
1851
1852 • Refactor filter module
1853
1854 • Change project description
1855
1856 • Removed:
1857
1858 • Drop command /rignore & /unrignore
1859
1860 • Drop command /relay & /unrelay
1861
1862 2019-05-13 Version 1.0.0rc4
1863 • Added:
1864
1865 • New dependency libsecret
1866
1867 • Add password storage support
1868
1869 • Add command line options --no-auto, used to require Srain not to
1870 automatically connect to servers
1871
1872 • Add russian translation, thanks to @tim77
1873
1874 • Allow user send slash(/) prefixed message
1875
1876 • Removed:
1877
1878 • Drop all password fields in configuration file
1879
1880 • Changed:
1881
1882 • Enable CSD(Client-Side Decoration) by default
1883
1884 • Update chinese translation
1885
1886 2019-04-14 Version 1.0.0rc3
1887 2019-01-24 Version 1.0.0rc2
1888 2018-09-10 Version 1.0.0rc1
1889 2018-02-28 Version 0.06.4
1890 • Changed:
1891
1892 • Change default application ID to im.srain.Srain
1893
1894 • Added:
1895
1896 • CTCP support, including request & response CLIENTINFO, FINGER,
1897 PING, SOURCE, TIME, VERSION, USERINFO messages. DCC message is not
1898 yet supported. Use command /ctcp for sending a CTCP request
1899
1900 • Login method support, you can specify it by configuration file op‐
1901 tion server.login_method:
1902
1903 • sasl_plain: SASL PLAIN authentication support, will use
1904 server.user.username as identity, and use server.user.passwd
1905 as password
1906
1907 • Added documentation Support Tables used to show Srain's features,
1908 inspried by https://ircv3.net/software/clients.html
1909
1910 • Added a semantic version parser, not yet used
1911
1912 • Added appdata file which requier by application store, thanks to
1913 @cpba
1914
1915 • openSUSE package is available, please refer to openSUSE for de‐
1916 tails, thanks to @alois
1917
1918 • Flatpak package is available, please refer to Fedora for details,
1919 thanks to @cpba
1920
1921 • Improved:
1922
1923 • Fixed a logical error in IRC message parser: all parameters are
1924 equal whether matched by <middle> or <trailing>, thanks to
1925 @DanielOaks
1926
1927 • Improved connection state control, you can smoothly disconnect/quit
1928 from server even it is unresponsive
1929
1930 • Fixed truncated message output by /server list subcommand
1931
1932 • Fixed crash at g_type_check_instance() under GLib 2.54.3+
1933
1934 • Fixed: Do not free a SrianServerBuffer which has non-empty buffer
1935
1936 • Ensure the QUIT message can be sent before application shutdown
1937
1938 • Removed entry from desktop file, thanks to @TingPing
1939
1940 • Fixed grammer of join message, thanks to @raindev
1941
1942 • Re-enable CI for Srain: ci-status
1943
1944 2017-12-22 Version 0.06.3
1945 • Changed:
1946
1947 • Configurable file option tls_not_verify in irc block in server
1948 block is renamed to tls_noverify, old option name is still sup‐
1949 ported
1950
1951 • Command option tls-not-verify for /server and /connect is renamed
1952 to tls-noverify, old option name is still supported
1953
1954 • Added:
1955
1956 • Connect popover supports connect to predefined server
1957
1958 • Join popover supports channel search
1959
1960 • Improved:
1961
1962 • Modified margin and padding of some widgets
1963
1964 • Improved the style of unread message counter
1965
1966 • Fixed markup parse error of decorator
1967
1968 • Fixed crashing while connecting from connect popover
1969
1970 • Fixed use after free while removing user
1971
1972 • Improved the performance and extensibility of user list
1973
1974 • Improved compatibility with older versions of GTK(> 3.16)
1975
1976 • Refactor the code of chat panel, helpful for the next development
1977
1978 2017-09-12 Version 0.06.2
1979 • Added:
1980
1981 • mIRC color support, can be disabled via setting render_mirc_color
1982 option in chat block in server block to false
1983
1984 • Improved:
1985
1986 • Better error reporting while operating the UI
1987
1988 • IRC URL can be opened directly within the application
1989
1990 • Text in input entry, connection panel and join panel will not be
1991 cleared while operation is not successful
1992
1993 • Fixed: in some cases, nickname registration will case infinity loop
1994
1995 • Decorator and filter now can process xml message
1996
1997 • Imporved the handling of channel topic
1998
1999 2017-08-18 Version 0.06.1
2000 • Added:
2001
2002 • Added GPL copyright statements
2003
2004 • RPL_CHANNEL_URL (328) message support
2005
2006 • Command line options support, type srain -h for help message
2007
2008 • Support for Creating server and joining channel from IRC URL
2009
2010 • New dependency libsoup
2011
2012 • Add reconnect timer: if connection fails, Srain will wait for 5
2013 seconds then try to connect again. If it still fails, waiting time
2014 will increase by 5 second
2015
2016 • Improved:
2017
2018 • Fixed the crash when QUIT
2019
2020 • Fixed: avoid sending empty password
2021
2022 • More empty parameters checks
2023
2024 • Imporve server connection status control
2025
2026 2017-07-29 Version 0.06
2027 • Changed:
2028
2029 • The third time of refactor ;-)
2030
2031 • New command parser, for the syntax, refer to Syntax.
2032
2033 • Changed the format of Chat log
2034
2035 • The /relay & /unrelay command doesn't support custom delimiter,
2036 this function will be implemented as python plugin in the future
2037
2038 • Use reStructuredText for document instead of Markdown
2039
2040 • Added:
2041
2042 • Message filter: mechanism for filtering message
2043
2044 • Message Decorator: mechanism for changing message
2045
2046 • Install script for Gentoo, thanks to @rtlanceroad !
2047
2048 • New command /rignore & /unrignore for ignore message using regular
2049 expression, thanks to @zwindl !
2050
2051 • Config file support
2052
2053 • Configurable log module, more convenient for developing and report‐
2054 ing issue
2055
2056 • New Return value type, for more friendly error reporting
2057
2058 • New command /server for IRC servers management
2059
2060 • Srain home page is available at:
2061 :del:`https://srain.im`
2062 (expired, use https://srain.silverrainz.me)
2063
2064 • Srain help documentation is available at:
2065 :del:`https://doc.srain.im`
2066 (expired, use https://srain.silverrainz.me)
2067
2068 • Removed:
2069
2070 • Remove libircclient dependence
2071
2072 • Improved:
2073
2074 • Improve reconnection stuff: auto reconnect when ping time out
2075
2076 • More accurate message mention
2077
2078 • Display preview image in correct size
2079
2080 • Any number of image links in message can be previewed
2081
2082 • HTTP(and some other protocols) link, domain name, email address and
2083 IRC channel name in topic and messages can be rendered as hyper
2084 link
2085
2086 • The sent message can be merged to last sent message
2087
2088 • Fixed some bugs
2089
2090 2016-09-19 Version 0.05.1
2091 • Create missing directory: $XDG_CACHE_HOME/srain/avatars
2092
2093 2016-08-27 Version 0.05
2094 • Changed:
2095
2096 • Port to libircclient
2097
2098 • SSL connection support
2099
2100 • Server password support
2101
2102 • Channel password support
2103
2104 • Added:
2105
2106 • Convenience GtkPopover for connecting and joining
2107
2108 • Nick popmenu
2109
2110 • Translations: zh_CN
2111
2112 • Forward message
2113
2114 • Chat log
2115
2116 • Colorful user list icon
2117
2118 • Mentioned highlight
2119
2120 • Desktop notification
2121
2122 • Improved:
2123
2124 • More friendly User interface
2125
2126 • Stronger {upload,avatar} plugin
2127
2128 • Fixed a lot of bugs
2129
2130 2016-04-30 Version 0.03
2131 • New interface between UI and IRC module
2132
2133 • Multi-server support
2134
2135 • Channel name is not case sensitive now
2136
2137 • /quit command will close all SrainChan of a server
2138
2139 • Fix GTK-Warning when close a SrainCHan
2140
2141 NOTE:
2142 0.03 is a pre-release, some functions are no completed yet. it also
2143 has some undetected bugs.
2144
2145 2016-04-13 Version 0.02
2146 • Bugs fixed
2147
2148 • Port to GTK+-3.20
2149
2150 NOTE:
2151 0.02 is a pre-release, some functions are no completed yet. it also
2152 has some undetected bugs.
2153
2154 2016-04-07 Version 0.01
2155 • Implement basic functions of a IRC client
2156
2157 • Themes: Silver Rain (light)
2158
2159 • Simple python plugin support:
2160
2161 • Auto upload image to pastebin (img.vim-cn.org)
2162
2163 • Get github avatar according nickname
2164
2165 • NB: plugin will separated from this repo in the future
2166
2167 • Image preview from URL
2168
2169 • Relay bot message transfrom
2170
2171 • Nick auto completion
2172
2173 • Combine message from same person
2174
2175 NOTE:
2176 0.01 is a pre-release, some functions are no completed yet. it also
2177 has some undetected bugs.
2178
2179 Support Tables
2180 • Basic IRC Client Support
2181
2182 • Client-to-Client Protocol (CTCP) Support
2183
2184 • IRCv3 Client Support
2185
2186 Basic IRC Client Support
2187 ┌────────────────────┬─────────────┐
2188 │Function │ Support │
2189 ├────────────────────┼─────────────┤
2190 │Auto reconnect │ Yes │
2191 ├────────────────────┼─────────────┤
2192 │Multiple connection │ Yes │
2193 ├────────────────────┼─────────────┤
2194 │TLS connection │ Yes │
2195 ├────────────────────┼─────────────┤
2196 │Nick completion │ Yes │
2197 ├────────────────────┼─────────────┤
2198 │Ignore and filter │ Yes │
2199 ├────────────────────┼─────────────┤
2200 │Chat log │ Yes │
2201 ├────────────────────┼─────────────┤
2202 │Configuration file │ Yes │
2203 ├────────────────────┼─────────────┤
2204 │Command │ Yes │
2205 ├────────────────────┼─────────────┤
2206 │mIRC color │ Yes │
2207 ├────────────────────┼─────────────┤
2208 │Plugin │ Unavailable │
2209 └────────────────────┴─────────────┘
2210
2211 Client-to-Client Protocol (CTCP) Support
2212 ┌───────────┬─────────┐
2213 │Message │ Support │
2214 ├───────────┼─────────┤
2215 │ACTION │ Yes │
2216 └───────────┴─────────┘
2217
2218 │CLIENTINFO │ Yes │
2219 ├───────────┼─────────┤
2220 │DCC │ No │
2221 ├───────────┼─────────┤
2222 │FINGER │ Yes │
2223 ├───────────┼─────────┤
2224 │PING │ Yes │
2225 ├───────────┼─────────┤
2226 │SOURCE │ Yes │
2227 ├───────────┼─────────┤
2228 │TIME │ Yes │
2229 ├───────────┼─────────┤
2230 │VERSION │ Yes │
2231 ├───────────┼─────────┤
2232 │USERINFO │ Yes │
2233 └───────────┴─────────┘
2234
2235 IRCv3 Client Support
2236 ┌──────────────────┬────────────────────────────┐
2237 │Feature │ Support │
2238 ├──────────────────┼────────────────────────────┤
2239 │CAP v3.1 │ Yes │
2240 ├──────────────────┼────────────────────────────┤
2241 │CAP v3.2 │ Yes │
2242 ├──────────────────┼────────────────────────────┤
2243 │cap-notify │ Yes │
2244 ├──────────────────┼────────────────────────────┤
2245 │account-notify │ No │
2246 ├──────────────────┼────────────────────────────┤
2247 │account-tag │ No │
2248 ├──────────────────┼────────────────────────────┤
2249 │away-notify │ No │
2250 ├──────────────────┼────────────────────────────┤
2251 │batch │ No │
2252 ├──────────────────┼────────────────────────────┤
2253 │chghost │ No │
2254 ├──────────────────┼────────────────────────────┤
2255 │echo-message │ No │
2256 ├──────────────────┼────────────────────────────┤
2257 │extended-join │ No │
2258 ├──────────────────┼────────────────────────────┤
2259 │invite-notify │ Yes │
2260 ├──────────────────┼────────────────────────────┤
2261 │Monitor │ No │
2262 ├──────────────────┼────────────────────────────┤
2263 │multi-prefix │ No │
2264 ├──────────────────┼────────────────────────────┤
2265 │SASL v3.1 │ PLAIN,ECDSA-NIST256P-CHAL‐ │
2266 │ │ LENGE │
2267 ├──────────────────┼────────────────────────────┤
2268 │SASL v3.2 │ PLAIN,ECDSA-NIST256P-CHAL‐ │
2269 │ │ LENGE │
2270 ├──────────────────┼────────────────────────────┤
2271 │server-time │ No │
2272 ├──────────────────┼────────────────────────────┤
2273 │starttls │ No │
2274 ├──────────────────┼────────────────────────────┤
2275 │sts │ No │
2276 ├──────────────────┼────────────────────────────┤
2277 │userhost-in-names │ No │
2278 └──────────────────┴────────────────────────────┘
2279
2281 Shengyu Zhang
2282
2284 2022, Shengyu Zhang
2285
2286
2287
2288
22891.5.0 Oct 02, 2022 SRAIN(1)