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

NAME

6       srain - Srain Documentation
7
8       Modern IRC client written in GTK.
9         [image]
10
11       Latest version: 2022-10-02 Version 1.5.0.
12
13       The  source  code  of  this site is hosted on GitHub.  If you found any
14       mistake, feel free to file issue or pull request.
15
16       Supporting Srain through OpenCollective.
17

RECNET POSTS

19       All posts… or Feed
20

ALL PAGES

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

AUTHOR

2281       Shengyu Zhang
2282
2284       2022, Shengyu Zhang
2285
2286
2287
2288
22891.5.0                            Oct 02, 2022                         SRAIN(1)
Impressum