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

INDICES AND TABLES

2145       • search
2146

AUTHOR

2148       Shengyu Zhang
2149
2151       2021, Shengyu Zhang
2152
2153
2154
2155
21561.3.0                            Sep 21, 2021                         SRAIN(1)
Impressum