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
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

INDICES AND TABLES

2065       · search
2066

AUTHOR

2068       Shengyu Zhang
2069
2071       2021, Shengyu Zhang
2072
2073
2074
2075
20761.2.0                            Mar 03, 2021                         SRAIN(1)
Impressum