1SRAIN(1)                             Srain                            SRAIN(1)
2
3
4

NAME

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

ALL PAGES

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
74Start Srain
75
76Connect to IRC server
77
78Predefined Server
79
80Custom Server
81
82Using Command
83
84Join Channel
85
86Directly Join
87
88Search Channel
89
90Using 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
175Dependencies
176
177Building
178
179Play with Meson
180
181Makefile Helper
182
183Distribution Packages
184
185GNU/Linux
186
187Arch Linux
188
189Debian
190
191Pre-built package
192
193Build byself
194
195Fedora
196
197Flatpak
198
199Gentoo
200
201openSUSE
202
203Windows
204
205Pre-built package
206
207Build byself
208
209macOS
210
211BSD
212
213OpenBSD
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 ar‐
283       ray 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 re‐
319       lease 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
396       macOS, 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
411Playground
412
413Syntax
414
415Available 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
459Obsoleted 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,  op‐
497       tion  -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  ar‐
506          gument.
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
535connect: connect to specified predefined server
536
537disconnect: disconnect from specified predefined server
538
539list: list all predefined servers
540
541       Arguments:
542
543name: 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
569host: server host
570
571nick: 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  la‐
714       tency 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
732add: add a pattern with given name
733
734rm: remove a pattern with given name
735
736list: list all availables patterns
737
738       Arguments:
739
740name: unique name of pattern
741
742pattern: 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
758pattern:  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
799nick: nickname of user
800
801pattern: 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 re‐
820       mark.  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  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   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
848Configuration File
849
850Syntax
851
852Priority and Fallback
853
854All 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 du‐
945          plicated 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 = "Libera Chat"        # String; The unique name of server
1054                  addresses = [
1055                      "irc.libera.chat:6697",
1056                  ]                           # String array; Addresses of IRC server,
1057                                              # each address follows the format of
1058                                              # <host>[:<port>]. The port can be omitted,
1059                                              # default 6667 for non-TLS and 6697 for TLS
1060                  tls = true                  # Bool; Connect with TLS encryption
1061                  # tls-noverify = false      # Bool; Connect with TLS encryption but without
1062                                              # certificate verification, only used while
1063                                              # connecting to a self-signed certificate
1064                                              # verified server
1065                  encoding = "utf-8"          # String; Encoding of IRC server, to get
1066                                              # all available value of encoding, check the
1067                                              # output of ``iconv --list``
1068                  # ipv6 = false              # Use IPv6 connection, not yet supported
1069              },
1070              {
1071                  name = "GIMPNet"
1072                  addresses = ["irc.gimp.org:6697", "irc.gnome.org:6697"]
1073                  tls = true
1074                  encoding = "utf-8"
1075              },
1076              {
1077                  name = "OFTC"
1078                  addresses = ["irc.oftc.net:6697"]
1079                  tls = true
1080                  encoding = "utf-8"
1081              },
1082              {
1083                  name = "hackint"
1084                  addresses = ["irc.hackint.org:6697"]
1085                  tls = true
1086                  encoding = "utf-8"
1087              },
1088              {
1089                  name = "Rizon"
1090                  addresses = ["irc.rizon.net:6697"]
1091
1092                  tls = true
1093                  encoding = "utf-8"
1094              },
1095              {
1096                  name = "DALnet"
1097                  addresses = [
1098                      "irc.dal.net:6697",
1099                      "agility.nl.eu.dal.net:6697",
1100                      "bifrost.ca.us.dal.net:6697",
1101                      "bitcoin.uk.eu.dal.net:6697",
1102                      "choopa.nj.us.dal.net:6697",
1103                      "diamond.hub.dal.net:6697",
1104                      "fidelity.tx.us.dal.net:6697",
1105                      "foxtrot.hub.dal.net:6697",
1106                      "halcyon.il.us.dal.net:6697",
1107                      "hash.ix.nl.dal.net:6697",
1108                      "hoon.ix.au.dal.net:6697",
1109                      "istana.ix.sg.dal.net:6697",
1110                      "jingo.ix.us.dal.net:6697",
1111                      "karsk.ix.eu.dal.net:6697",
1112                      "kiwi.ix.nz.dal.net:6697",
1113                      "koala.vc.au.dal.net:6697",
1114                      "laud.ix.us.dal.net:6697",
1115                      "loyalty.ix.us.dal.net:6697",
1116                      "merlin.hub.dal.net:6697",
1117                      "midnight.hub.dal.net:6697",
1118                      "ninja.hub.dal.net:6697",
1119                      "nonstop.ix.me.dal.net:6697",
1120                      "oi.ix.au.dal.net:6697",
1121                      "oper-e.dal.net:6697",
1122                      "paradigm.hub.dal.net:6697",
1123                      "powertech.no.eu.dal.net:6697",
1124                      "punch.wa.us.dal.net:6697",
1125                      "rangers.ix.us.dal.net:6697",
1126                      "redemption.ix.us.dal.net:6697",
1127                      "renew.hub.dal.net:6697",
1128                      "smurf.hub.dal.net:6697",
1129                      "underworld.se.eu.dal.net:6697",
1130                      "uworld.hub.dal.net:6697"
1131                  ]
1132                  tls = true
1133                  encoding = "utf-8"
1134              },
1135              {
1136                  name = "EFnet"
1137                  addresses = [
1138                      "irc.efnet.fr:6667",
1139                      "efnet.port80.se:6697",
1140                      "efnet.portlane.se:6667",
1141                      "irc.du.se:6667",
1142                      "irc.homelien.no:6667",
1143                      "irc.inet.tele.dk:6667",
1144                      "irc.nordunet.se:6667",
1145                      "irc.underworld.no:6667",
1146                      "irc.choopa.net:6697",
1147                      "irc.colosolutions.net:6667",
1148                      "irc.mzima.net:6667",
1149                      "irc.prison.netirc.servercentral.net:6667"
1150                  ]
1151                  tls = false
1152                  encoding = "utf-8"
1153              },
1154              {
1155                  name = "IRCnet"
1156                  addresses = [
1157                      "irc.ssl.ircnet.com:6697",
1158                      "irc.ircnet.com:6667",
1159                      "irc.at.ircnet.com:6667",
1160                      "irc.be.ircnet.com:6667",
1161                      "irc.cz.ircnet.com:6667",
1162                      "irc.dk.ircnet.com:6667",
1163                      "irc.ee.ircnet.com:6667",
1164                      "irc.fi.ircnet.com:6667",
1165                      "irc.fr.ircnet.com:6667",
1166                      "irc.de.ircnet.com:6667",
1167                      "irc.hu.ircnet.com:6667",
1168                      "irc.it.ircnet.com:6667",
1169                      "irc.jp.ircnet.com:6667",
1170                      "irc.nl.ircnet.com:6667",
1171                      "irc.no.ircnet.com:6667",
1172                      "irc.pl.ircnet.com:6667",
1173                      "irc.si.ircnet.com:6667",
1174                      "irc.se.ircnet.com:6667",
1175                      "irc.us.ircnet.com:6667"
1176                  ]
1177                  tls = false
1178                  encoding = "utf-8"
1179              },
1180              {
1181                  name = "Undernet"
1182                  addresses = [
1183                      "irc.undernet.org:6667",
1184                      "ix1.undernet.org:6667",
1185                      "ix2.undernet.org:6667",
1186                      "ashburn.va.us.undernet.org:6667",
1187                      "bucharest.ro.eu.undernet.org:6667",
1188                      "budapest.hu.eu.undernet.org:6667",
1189                      "chicago.il.us.undernet.org:6667"
1190                  ]
1191                  tls = false
1192                  encoding = "utf-8"
1193              },
1194              {
1195                  name = "QuakeNet"
1196                  addresses = [
1197                      "irc.quakenet.org:6667",
1198                      "dreamhack.se.quakenet.org:6667",
1199                      "euroserv.fr.quakenet.org:6667",
1200                      "irc.ipv6.quakenet.org:6667",
1201                      "port80a.se.quakenet.org:6667",
1202                      "port80b.se.quakenet.org:6667",
1203                      "port80c.se.quakenet.org:6667",
1204                      "portlane.se.quakenet.org:6667",
1205                      "servercentral.il.us.quakenet.org:6667",
1206                      "underworld1.no.quakenet.org:6667"
1207                  ]
1208                  tls = false
1209                  encoding = "utf-8"
1210              },
1211              {
1212                  name = "freenode"
1213                  addresses = [
1214                      "irc.freenode.net:6697",
1215                      "chat.freenode.net:6697",
1216                      "irc.freenode.org:6697",
1217                      "chat.freenode.org:6697",
1218                  ]
1219                  tls = true
1220                  encoding = "utf-8"
1221              },
1222              {
1223                  name = "localhost"
1224                  addresses = ["localhost:6667", "127.0.0.1:6667"]
1225                  tls = false
1226              }
1227
1228          # TODO: More predefined servers
1229          )
1230
1231
1232   Development Specification
1233          int bus_count = 1;
1234
1235   Codeing Style
1236       • Public header 用 __XXX_H 形式
1237
1238       • 提倡在作用域开头统一声明变量,而不是即用即声明,方便释放的时候统一处理
1239
1240       • 缩进:四空格,无 Tab
1241
1242       • 折行:
1243
1244         • 头文件中的函数签名可以不折行,其他地方的代码一律小于  80  char  per
1245           line
1246
1247         • 参数过长时,从超过长度的第一个参数开始折行,参数无需对齐
1248
1249         • 太长的字符串可以不折行
1250
1251gtk_widget_class_bind_template_child() 由于实在太长,可以不折行
1252
1253         • 花括号不换行(除非在                                           case
1254           中),右圆括号和左花括号之间没有空格(待定)
1255
1256       • 命名:
1257
1258         • 鼓励局部变量和函数参数使用缩写,全局变量及函数名,类型名不鼓励缩写
1259
1260         • 宏大写,数据类型,类名用大驼峰法,变量使用全小写 + 下划线
1261
1262         • 文件名全小写,以下划线分隔
1263
1264       • 注释:
1265
1266         • 按英文规范,句首第一个单词首字符大写,多句时使用标点符号,同样每行不得超过
1267           80 字符(汉字以两字符计),链接可以不折行
1268
1269       • Git     commit     log:     格式为     MODULE(TYPE):      DESCRIPTION
1270         ,当前可用的模块(MODULE)  有: All Core Sirc Sui Prefs Filter Decora‐
1271         tor Lib I18n Data Plugin Build Script  Doc...  ,可用的提交类型(TYPE)
1272         有:  feat  impl  change  fix improve cleanup refactor update release
1273         misc...
1274
1275       • I18N:所有需要在界面上展示的格式化字符串中的控制字符均使用   numbered
1276         argument, 即 %n$X 形式
1277
1278       • Change log: 应分为四类
1279
1280         • Changed: 设计或功能上的改动,可能会带来兼容问题的一定要说明
1281
1282         • Added: 新增的功能或者依赖
1283
1284         • Removed: 移除的功能或者依赖
1285
1286         • Imporved: 性能或功能或易用性上的改善以及 bug 修复
1287
1288       • 发布前须知
1289
1290         • 集成测试 (TODO)
1291
1292         • 更新翻译
1293
1294         • 更新文档
1295
1296         • 更新 change log
1297
1298         • 更新项目中的版本号
1299
1300         • 确认文档中的提供的安装脚本可用
1301
1302         • 对最新的 commit 打 tag
1303
1304         • 通知各个发行版的打包维护者
1305
1306           • Arch Linux: @SilverRainZ
1307
1308           • Gentoo: @xeirrr
1309
1310           • ...
1311
1312   Miscellaneous
1313   Hot Keys
1314ctrl + j/k: switch chat panel
1315
1316up/down: scroll message list
1317
1318       NOTE:
1319          Customized hot keys will be supported in the future.
1320
1321   Chat Logs
1322       Chat   logs   is   enabled   by  default,  log  files  are  located  at
1323       $XDG_DATA_HOME/srain/logs, usually it is ~/.local/share/srain/logs.
1324
1325   Frequently Asked Questions
1326       Frequently asked questions are listed here, you can visit issue page to
1327       see more questions that asked by our users.
1328
1329Does Srain support Windows?
1330
1331What is "relay message transform"?
1332
1333Where are the log files?
1334
1335How can I send message which has a slash("/") prefixed?
1336
1337How can I remove my stored password?
1338
1339How can I hide JOIN/PART messages of channel?
1340
1341Why can't I login to my ZNC server?
1342
1343   Does Srain support Windows?
1344       Yes, please refer to install-packages-windows.
1345
1346   What is relay message transform ?
1347       There  are  many  relay bots forward messages from other IM to IRC net‐
1348       work, "Relay message transform" make these messages easier to read.
1349
1350       For example, there is a telegram bot named  "telegram",  the  words  in
1351       brackets is the named of the telegram user.
1352         [image]
1353
1354       Run  command  /pattern  add  normal-relay \[(?<sender>[^:]+?)\] (?<con‐
1355       tent>.*)  and /render telegram normal-relay, you get:
1356         [image]
1357
1358       For more details, please refer to commands-pattern and commands-render.
1359
1360   Where are the log files?
1361       Refer to misc-chat-logs.
1362
1363   How can I send message which has a slash("/") prefixed?
1364       Please prepend another slash to the message.
1365
1366       Refer to commands-syntax.
1367
1368   How can I remove my stored password?
1369       Just leave the password entry empty and check the  "Remember  password"
1370       checkbox  before  connect  to server or join channel, the corresponding
1371       password will be removed.
1372
1373       Or you can use secret-tool (provided by libsecret) to manage  all  your
1374       stored passwords.
1375
1376   How can I hide JOIN/PART messages of channel?
1377       So  far,  Srain  has  not yet a specialized option for hiding such mes‐
1378       sages.  You can use write regular expression to filter them:
1379
1380          /pattern add filter-join ^\w+ has joined$
1381          /filter filter-join
1382          /pattern add filter-part ^\w+ has left: .*$
1383          /filter filter-part
1384
1385       NOTE:
1386          The content of regular expression depends on your language.
1387
1388   Why can't I login to my ZNC server?
1389       According ZNC's FAQ,  way   2,  supply  your  "user@phone/network:pass"
1390       (without quotes) in the server password field. Other as usual.
1391
1392       NOTE:
1393          Way 1 in ZNC's FAQ requires username field can be set via connection
1394          panel, which will be supported by Srain in the future.
1395
1396   Change Log
13972021-05-30 Version 1.2.2
1398
13992021-04-02 Version 1.2.1
1400
14012021-02-28 Version 1.2.0
1402
14032020-10-01 Version 1.1.3
1404
14052020-08-10 Version 1.1.2
1406
14072020-06-27 Version 1.1.1
1408
14092020-05-24 Version 1.1.0
1410
14112020-04-11 Version 1.0.2
1412
14132020-03-14 Version 1.0.1
1414
14152020-02-24 Version 1.0.0
1416
14172019-10-07 Version 1.0.0rc9999
1418
14192019-06-14 Version 1.0.0rc5
1420
14212019-05-13 Version 1.0.0rc4
1422
14232019-04-14 Version 1.0.0rc3
1424
14252019-01-24 Version 1.0.0rc2
1426
14272018-09-10 Version 1.0.0rc1
1428
14292018-02-28 Version 0.06.4
1430
14312017-12-22 Version 0.06.3
1432
14332017-09-12 Version 0.06.2
1434
14352017-08-18 Version 0.06.1
1436
14372017-07-29 Version 0.06
1438
14392016-09-19 Version 0.05.1
1440
14412016-08-27 Version 0.05
1442
14432016-04-30 Version 0.03
1444
14452016-04-13 Version 0.02
1446
14472016-04-07 Version 0.01
1448
1449   2021-05-30 Version 1.2.2
1450       • Changed:
1451
1452         • Add libera.chat IRC network (srain#311)
1453
1454         • Updated Dutch translation (b6830e9)
1455
1456       • Bug fixes:
1457
1458         • Fix windows build (srain#300, srain#303)
1459
1460   2021-04-02 Version 1.2.1
1461       • Features:
1462
1463         • Add Ukrainian translations (srain#292), thanks to @andmizyk
1464
1465       • Bug fixes:
1466
1467         • Minor fixes (srain#290)
1468
1469   2021-02-28 Version 1.2.0
1470       • Features:
1471
1472         • Switch build system from Make to Meson (srain#266)
1473
1474         • Add  FreeBSD  implementations  for   srn_get_executable_{path,dir},
1475           thanks to @wahjava
1476
1477         • Add /quote command for sending special IRC commands, thanks to @hno
1478           (srain#283)
1479
1480         • Add support for hiding server buffer (srain#287)
1481
1482       • Bug fixes:
1483
1484            • Fix an use-after-free BUG (srain#267)
1485
1486            • Fix implicit  declaration  error  on  some  systems,  thanks  to
1487              @lgbaldoni (srain#270)
1488
1489   2020-10-01 Version 1.1.3
1490       • Bug fixes:
1491
1492            • Fix an use-after-free BUG (srain#267)
1493
1494   2020-08-10 Version 1.1.2
1495       NOTE:
1496          This release contains only improvement for MS Windows, user of other
1497          platform can ignore it.
1498
1499       • Features:
1500
1501         • Binary for MS Windows now can automatically built  via  Github  Ac‐
1502           tions,  thanks  to  @lifeibiren  (srain#259),  please  refer to in‐
1503           stall-packages-windows for more details
1504
1505       • Changes:
1506
1507         • For ease of running on windows, Srain's executable path is added to
1508           the   search   paths   of   {configuration,data}  file.  Thanks  to
1509           @lifeibiren (srain#259)
1510
1511   2020-06-27 Version 1.1.1
1512       • Changes:
1513
1514         • Improve auto-scroll policy of message list (srain#255)
1515
1516       • Bug fixes:
1517
1518         • Fix TLS certificate verification error on glib-networking 2.64.3 (‐
1519           srain#251)
1520
1521         • Fix crash when connecting to an invalid host (srain#234)
1522
1523   2020-05-24 Version 1.1.0
1524       • Features:
1525
1526         • Support multiple selection of message (srain#138)
1527
1528         • Support jump to mentioned message (srain#243)
1529
1530         • Nickname will be highlighted when mentioned (srain#243)
1531
1532         • Auto build deb package (srain#238)
1533
1534       • Changes:
1535
1536         • Improve fcous control of UI
1537
1538         • Replace appdata with metainfo (srain#240)
1539
1540         • Validate metainfo with appstream-util (srain#242)
1541
1542       • Bug fixes:
1543
1544         • Some implicit declarations fixes (srain#236)
1545
1546         • Some typo fixes (srain#239)
1547
1548   2020-04-11 Version 1.0.2
1549       • Features:
1550
1551         • Add MAN documentation (deaf723)
1552
1553         • Add  more  predefined IRC networks: DALnet, EFnet, IRCnet, Undernet
1554           and QuakeNet (srain#228)
1555
1556       • Changes:
1557
1558         • Build: Allow setting CC variable via environment (srain#224)
1559
1560         • Add channel related messages to corresponding buffer as possible (‐
1561           srain#149)
1562
1563         • Improve widget focus control (srain#229)
1564
1565         • Drop unused icons (6239fe5)
1566
1567         • Provide clearer error message when connecting (srain#233)
1568
1569         • Update gentoo installation documentation install-packages-gentoo (‐
1570           ceb5ca3)
1571
1572       • Bug fixes:
1573
1574         • Truncate long message before sendisg (srain#227)
1575
1576         • Deal with invalid UTF-8 string (50e7757)
1577
1578         • Fix incorrect user number of channel user list (srain#230)
1579
1580         • Fix incorrect icon install path (9f07380)
1581
1582   2020-03-14 Version 1.0.1
1583       • Features:
1584
1585         • Auto rename to original nick when ghost quit (srain#198)
1586
1587         • Add hackint IRC network (srain#201), thanks to @kpcyrd
1588
1589         • Add Dutch translation (srain#215), thanks to @Vistaus
1590
1591         • Add two FAQs to documentation (srain#217)
1592
1593         • Add debian  pack  script  (srain-contrib#1),  thanks  to  @tomac4t.
1594           Please refer to install-packages-debian to build a deb package
1595
1596       • Changes:
1597
1598         • Move  continuous  integration  from  travis CI to github actions (‐
1599           srain#203, srain#204), thanks to @tomac4t
1600
1601         • Make  header  bar  buttons  repect   default   belief   (srain#205,
1602           srain#218)
1603
1604       • Bug fixes:
1605
1606         • Fix  case sensitivity issue for IRC messages (srain#202), thanks to
1607           @hhirtz
1608
1609         • Fix invalid changelog section of appdata file (srain#214)
1610
1611         • Fix missing dependences in  documentation  (srain#216),  thanks  to
1612           @avoidr
1613
1614   2020-02-24 Version 1.0.0
1615       • Changes:
1616
1617         • Some code cleanup
1618
1619         • Update ./start documentation
1620
1621       • Bug fixes:
1622
1623         • Allow Srain runs without dbus secrets service (srain#195)
1624
1625         • Fix nick generation logical (39ced08)
1626
1627       NOTE:
1628          1.0.0 is the first stable release of Srain, enjoy!
1629
1630   2019-10-07 Version 1.0.0rc9999
1631       • Features:
1632
1633         • Activate  corresponding  buffer  when  channel  URL  is  clicked (‐
1634           srain#190)
1635
1636         • Command alias support (srain#188)
1637
1638         • List predefined servers via command, see  commands-server  for  de‐
1639           tails (656f3e5)
1640
1641       • Changes:
1642
1643         • Replace all icons with freedesktop standard icons (srain#120)
1644
1645       • Bug fixes:
1646
1647         • Fix wrong usage of GError (srain#179)
1648
1649         • Fix  image  preview  problem  when  image is hard to detect type (‐
1650           srain#163)
1651
1652         • Fix memory leak of pattern filter (9464a9e)
1653
1654         • Fix the breaking "abort sending" icon (srain#144)
1655
1656         • Fix the invite menu of user (9f98cbb)
1657
1658   2019-06-14 Version 1.0.0rc5
1659       • Added:
1660
1661            • Regular expression  pattern  management  using  commands-pattern
1662              command
1663
1664            • Add command commands-filter for filtering message via pattern
1665
1666            • Add command commands-render for rendering message via pattern
1667
1668       • Changed:
1669
1670            • Refactor detector module and rename it to render
1671
1672            • Refactor filter module
1673
1674            • Change project description
1675
1676       • Removed:
1677
1678            • Drop command commands-rignore
1679
1680            • Drop command commands-relay
1681
1682   2019-05-13 Version 1.0.0rc4
1683       • Added:
1684
1685            • New dependency libsecret
1686
1687            • Add password storage support
1688
1689            • Add command line options --no-auto, used to require Srain not to
1690              automatically connect to servers
1691
1692            • Add russian translation, thanks to @tim77
1693
1694            • Allow user send slash(/) prefixed message
1695
1696       • Removed:
1697
1698         • Drop all password fields in configuration file
1699
1700       • Changed:
1701
1702         • Enable CSD(Client-Side Decoration) by default
1703
1704         • Update chinese translation
1705
1706   2019-04-14 Version 1.0.0rc3
1707   2019-01-24 Version 1.0.0rc2
1708   2018-09-10 Version 1.0.0rc1
1709   2018-02-28 Version 0.06.4
1710       • Changed:
1711
1712         • Change default application ID to im.srain.Srain
1713
1714       • Added:
1715
1716         • CTCP support, including  request  &  response  CLIENTINFO,  FINGER,
1717           PING,  SOURCE, TIME, VERSION, USERINFO messages. DCC message is not
1718           yet supported. Use command commands-ctcp for sending a CTCP request
1719
1720         • Login method support, you can specify it by configuration file  op‐
1721           tion server.login_method:
1722
1723sasl_plain:   SASL  PLAIN  authentication  support,  will  use
1724                server.user.username as identity, and  use  server.user.passwd
1725                as password
1726
1727         • Added documentation support used to show Srain's features, inspried
1728           by https://ircv3.net/software/clients.html
1729
1730         • Added a semantic version parser, not yet used
1731
1732         • Added appdata file which requier by application  store,  thanks  to
1733           @cpba
1734
1735         • openSUSE  package  is  available,  please  refer  to  install-pack‐
1736           ages-opensuse for details, thanks to @alois
1737
1738         • Flatpak  package  is  available,  please  refer  to   install-pack‐
1739           ages-flatpak for details, thanks to @cpba
1740
1741       • Improved:
1742
1743         • Fixed  a  logical  error  in IRC message parser: all parameters are
1744           equal  whether  matched  by  <middle>  or  <trailing>,  thanks   to
1745           @DanielOaks
1746
1747         • Improved connection state control, you can smoothly disconnect/quit
1748           from server even it is unresponsive
1749
1750         • Fixed truncated message output by commands-server list subcommand
1751
1752         • Fixed crash at g_type_check_instance() under GLib 2.54.3+
1753
1754         • Fixed: Do not free a SrianServerBuffer which has non-empty buffer
1755
1756         • Ensure the QUIT message can be sent before application shutdown
1757
1758         • Removed entry from desktop file, thanks to @TingPing
1759
1760         • Fixed grammer of join message, thanks to @raindev
1761
1762         • Re-enable CI for Srain: ci-status
1763
1764   2017-12-22 Version 0.06.3
1765       • Changed:
1766
1767         • Configurable file option tls_not_verify  in  irc  block  in  server
1768           block  is  renamed  to  tls_noverify, old option name is still sup‐
1769           ported
1770
1771         • Command option tls-not-verify for commands-server and commands-con‐
1772           nect is renamed to tls-noverify, old option name is still supported
1773
1774       • Added:
1775
1776         • Connect popover supports connect to predefined server
1777
1778         • Join popover supports channel search
1779
1780       • Improved:
1781
1782         • Modified margin and padding of some widgets
1783
1784         • Improved the style of unread message counter
1785
1786         • Fixed markup parse error of decorator
1787
1788         • Fixed crashing while connecting from connect popover
1789
1790         • Fixed use after free while removing user
1791
1792         • Improved the performance and extensibility of user list
1793
1794         • Improved compatibility with older versions of GTK(> 3.16)
1795
1796         • Refactor the code of chat panel, helpful for the next development
1797
1798   2017-09-12 Version 0.06.2
1799       • Added:
1800
1801         • mIRC  color  support, can be disabled via setting render_mirc_color
1802           option in chat block in server block to false
1803
1804       • Improved:
1805
1806         • Better error reporting while operating the UI
1807
1808         • IRC URL can be opened directly within the application
1809
1810         • Text in input entry, connection panel and join panel  will  not  be
1811           cleared while operation is not successful
1812
1813         • Fixed: in some cases, nickname registration will case infinity loop
1814
1815         • Decorator and filter now can process xml message
1816
1817         • Imporved the handling of channel topic
1818
1819   2017-08-18 Version 0.06.1
1820       • Added:
1821
1822         • Added GPL copyright statements
1823
1824         • RPL_CHANNEL_URL (328) message support
1825
1826         • Command line options support, type srain -h for help message
1827
1828         • Support for Creating server and joining channel from IRC URL
1829
1830         • New dependency libsoup
1831
1832         • Add  reconnect  timer:  if  connection fails, Srain will wait for 5
1833           seconds then try to connect again. If it still fails, waiting  time
1834           will increase by 5 second
1835
1836       • Improved:
1837
1838         • Fixed the crash when QUIT
1839
1840         • Fixed: avoid sending empty password
1841
1842         • More empty parameters checks
1843
1844         • Imporve server connection status control
1845
1846   2017-07-29 Version 0.06
1847       • Changed:
1848
1849         • The third time of refactor ;-)
1850
1851         • New command parser, for the syntax, refer to commands-syntax.
1852
1853         • Changed the format of Chat log
1854
1855         • The  commands-relay  command doesn't support custom delimiter, this
1856           function will be implemented as python plugin in the future
1857
1858         • Use reStructuredText for document instead of Markdown
1859
1860       • Added:
1861
1862         • Message filter: mechanism for filtering message
1863
1864         • Message Decorator: mechanism for changing message
1865
1866         • Install script for Gentoo, thanks to @rtlanceroad !
1867
1868         • New command commands-rignore for ignore message using  regular  ex‐
1869           pression, thanks to @zwindl !
1870
1871         • Config file support
1872
1873         • Configurable log module, more convenient for developing and report‐
1874           ing issue
1875
1876         • New Return value type, for more friendly error reporting
1877
1878         • New command commands-server for IRC servers management
1879
1880         • Srain home page is available at: https://srain.im
1881
1882         • Srain help documentation is available at: https://doc.srain.im
1883
1884       • Removed:
1885
1886         • Remove libircclient dependence
1887
1888       • Improved:
1889
1890         • Improve reconnection stuff: auto reconnect when ping time out
1891
1892         • More accurate message mention
1893
1894         • Display preview image in correct size
1895
1896         • Any number of image links in message can be previewed
1897
1898         • HTTP(and some other protocols) link, domain name, email address and
1899           IRC  channel  name  in  topic and messages can be rendered as hyper
1900           link
1901
1902         • The sent message can be merged to last sent message
1903
1904         • Fixed some bugs
1905
1906   2016-09-19 Version 0.05.1
1907       • Create missing directory: $XDG_CACHE_HOME/srain/avatars
1908
1909   2016-08-27 Version 0.05
1910       • Changed:
1911
1912         • Port to libircclient
1913
1914           • SSL connection support
1915
1916           • Server password support
1917
1918           • Channel password support
1919
1920       • Added:
1921
1922         • Convenience GtkPopover for connecting and joining
1923
1924         • Nick popmenu
1925
1926         • Translations: zh_CN
1927
1928         • Forward message
1929
1930         • Chat log
1931
1932         • Colorful user list icon
1933
1934         • Mentioned highlight
1935
1936         • Desktop notification
1937
1938       • Improved:
1939
1940         • More friendly User interface
1941
1942         • Stronger {upload,avatar} plugin
1943
1944         • Fixed a lot of bugs
1945
1946   2016-04-30 Version 0.03
1947       • New interface between UI and IRC module
1948
1949       • Multi-server support
1950
1951       • Channel name is not case sensitive now
1952
1953       • /quit command will close all SrainChan of a server
1954
1955       • Fix GTK-Warning when close a SrainCHan
1956
1957       NOTE:
1958          0.03 is a pre-release, some functions are no completed yet.  it also
1959          has some undetected bugs.
1960
1961   2016-04-13 Version 0.02
1962       • Bugs fixed
1963
1964       • Port to GTK+-3.20
1965
1966       NOTE:
1967          0.02 is a pre-release, some functions are no completed yet.  it also
1968          has some undetected bugs.
1969
1970   2016-04-07 Version 0.01
1971       • Implement basic functions of a IRC client
1972
1973       • Themes: Silver Rain (light)
1974
1975       • Simple python plugin support:
1976
1977         • Auto upload image to pastebin (img.vim-cn.org)
1978
1979         • Get github avatar according nickname
1980
1981         • NB: plugin will separated from this repo in the future
1982
1983       • Image preview from URL
1984
1985       • Relay bot message transfrom
1986
1987       • Nick auto completion
1988
1989       • Combine message from same person
1990
1991       NOTE:
1992          0.01 is a pre-release, some functions are no completed yet.  it also
1993          has some undetected bugs.
1994
1995   Support Tables
1996Basic IRC Client Support
1997
1998Client-to-Client Protocol (CTCP) Support
1999
2000IRCv3 Client Support
2001
2002   Basic IRC Client Support
2003                         ┌────────────────────┬─────────────┐
2004                         │Function            │ Support     │
2005                         └────────────────────┴─────────────┘
2006
2007                         │Auto reconnect      │ Yes         │
2008                         ├────────────────────┼─────────────┤
2009                         │Multiple connection │ Yes         │
2010                         ├────────────────────┼─────────────┤
2011                         │TLS connection      │ Yes         │
2012                         ├────────────────────┼─────────────┤
2013                         │Nick completion     │ Yes         │
2014                         ├────────────────────┼─────────────┤
2015                         │Ignore and filter   │ Yes         │
2016                         ├────────────────────┼─────────────┤
2017                         │Chat log            │ Yes         │
2018                         ├────────────────────┼─────────────┤
2019                         │Configuration file  │ Yes         │
2020                         ├────────────────────┼─────────────┤
2021                         │Command             │ Yes         │
2022                         ├────────────────────┼─────────────┤
2023                         │mIRC color          │ Yes         │
2024                         ├────────────────────┼─────────────┤
2025                         │Plugin              │ Unavailable │
2026                         └────────────────────┴─────────────┘
2027
2028   Client-to-Client Protocol (CTCP) Support
2029                               ┌───────────┬─────────┐
2030                               │Message    │ Support │
2031                               ├───────────┼─────────┤
2032                               │ACTION     │ Yes     │
2033                               ├───────────┼─────────┤
2034                               │CLIENTINFO │ Yes     │
2035                               ├───────────┼─────────┤
2036                               │DCC        │ No      │
2037                               ├───────────┼─────────┤
2038                               │FINGER     │ Yes     │
2039                               ├───────────┼─────────┤
2040                               │PING       │ Yes     │
2041                               ├───────────┼─────────┤
2042                               │SOURCE     │ Yes     │
2043                               ├───────────┼─────────┤
2044                               │TIME       │ Yes     │
2045                               ├───────────┼─────────┤
2046                               │VERSION    │ Yes     │
2047                               ├───────────┼─────────┤
2048                               │USERINFO   │ Yes     │
2049                               └───────────┴─────────┘
2050
2051   IRCv3 Client Support
2052                  ┌──────────────────┬────────────────────────────┐
2053                  │Feature           │ Support                    │
2054                  ├──────────────────┼────────────────────────────┤
2055                  │CAP v3.1          │ Yes                        │
2056                  ├──────────────────┼────────────────────────────┤
2057                  │CAP v3.2          │ Yes                        │
2058                  ├──────────────────┼────────────────────────────┤
2059                  │cap-notify        │ Yes                        │
2060                  ├──────────────────┼────────────────────────────┤
2061                  │account-notify    │ No                         │
2062                  ├──────────────────┼────────────────────────────┤
2063                  │account-tag       │ No                         │
2064                  ├──────────────────┼────────────────────────────┤
2065                  │away-notify       │ No                         │
2066                  ├──────────────────┼────────────────────────────┤
2067                  │batch             │ No                         │
2068                  ├──────────────────┼────────────────────────────┤
2069                  │chghost           │ No                         │
2070                  ├──────────────────┼────────────────────────────┤
2071                  │echo-message      │ No                         │
2072                  ├──────────────────┼────────────────────────────┤
2073                  │extended-join     │ No                         │
2074                  ├──────────────────┼────────────────────────────┤
2075                  │invite-notify     │ No                         │
2076                  ├──────────────────┼────────────────────────────┤
2077                  │Monitor           │ No                         │
2078                  ├──────────────────┼────────────────────────────┤
2079                  │multi-prefix      │ No                         │
2080                  └──────────────────┴────────────────────────────┘
2081
2082
2083
2084                  │SASL v3.1         │ PLAIN,ECDSA-NIST256P-CHAL‐ │
2085                  │                  │ LENGE                      │
2086                  ├──────────────────┼────────────────────────────┤
2087                  │SASL v3.2         │ PLAIN,ECDSA-NIST256P-CHAL‐ │
2088                  │                  │ LENGE                      │
2089                  ├──────────────────┼────────────────────────────┤
2090                  │server-time       │ No                         │
2091                  ├──────────────────┼────────────────────────────┤
2092                  │starttls          │ No                         │
2093                  ├──────────────────┼────────────────────────────┤
2094                  │sts               │ No                         │
2095                  ├──────────────────┼────────────────────────────┤
2096                  │userhost-in-names │ No                         │
2097                  └──────────────────┴────────────────────────────┘
2098

INDICES AND TABLES

2100       • search
2101

AUTHOR

2103       Shengyu Zhang
2104
2106       2021, Shengyu Zhang
2107
2108
2109
2110
21111.2.0                            May 30, 2021                         SRAIN(1)
Impressum