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
15       Supporting Srain through OpenCollective.
16

ALL PAGES

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

INDICES AND TABLES

2227       • search
2228

AUTHOR

2230       Shengyu Zhang
2231
2233       2022, Shengyu Zhang
2234
2235
2236
2237
22381.4.0                            May 08, 2022                         SRAIN(1)
Impressum