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