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: 2023-03-26 Version 1.5.1.
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.1.tar.gz
268          $ tar -xvzf 1.5.1.tar.gz
269          $ cd srain-1.5.1
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
14242023-03-26 Version 1.5.1
1425
14262022-10-02 Version 1.5.0
1427
14282022-10-02 Version 1.4.2
1429
14302022-10-02 Version 1.3.3
1431
14322022-07-30 Version 1.4.1
1433
14342022-05-07 Version 1.4.0
1435
14362022-02-10 Version 1.3.2
1437
14382021-12-18 Version 1.3.1
1439
14402021-12-18 Version 1.2.5
1441
14422021-09-23 Version 1.3.0
1443
14442021-07-18 Version 1.2.4
1445
14462021-06-26 Version 1.2.3
1447
14482021-05-30 Version 1.2.2
1449
14502021-04-02 Version 1.2.1
1451
14522021-02-28 Version 1.2.0
1453
14542020-10-01 Version 1.1.3
1455
14562020-08-10 Version 1.1.2
1457
14582020-06-27 Version 1.1.1
1459
14602020-05-24 Version 1.1.0
1461
14622020-04-11 Version 1.0.2
1463
14642020-03-14 Version 1.0.1
1465
14662020-02-24 Version 1.0.0
1467
14682019-10-07 Version 1.0.0rc9999
1469
14702019-06-14 Version 1.0.0rc5
1471
14722019-05-13 Version 1.0.0rc4
1473
14742019-04-14 Version 1.0.0rc3
1475
14762019-01-24 Version 1.0.0rc2
1477
14782018-09-10 Version 1.0.0rc1
1479
14802018-02-28 Version 0.06.4
1481
14822017-12-22 Version 0.06.3
1483
14842017-09-12 Version 0.06.2
1485
14862017-08-18 Version 0.06.1
1487
14882017-07-29 Version 0.06
1489
14902016-09-19 Version 0.05.1
1491
14922016-08-27 Version 0.05
1493
14942016-04-30 Version 0.03
1495
14962016-04-13 Version 0.02
1497
14982016-04-07 Version 0.01
1499
1500   2023-03-26 Version 1.5.1
1501       • Bug fixes:
1502
1503         • Fix the problem that the URL cannot be opened on MS Windows (#391)
1504
1505   2022-10-02 Version 1.5.0
1506       • Features:
1507
1508         • Able to identify Nordic GTK Theme as dark theme (#372)
1509
1510         • Activate the corresponding buffer to a response user query (#381)
1511
1512       • Changes:
1513
1514         • No additional sphinx extensions are required to build documentation
1515           (#368)
1516
1517         • Cleanup deprecated APIs (#369)
1518
1519         • Suppress error message when connection keeps failing (#386)
1520
1521         • Enable debian release build , thanks to @tomac4t (#387)
1522
1523       • Bug fixes:
1524
1525         • Fix SASL authentication error when connecting to Soju (#371)
1526
1527   2022-10-02 Version 1.4.2
1528       • Backport #371
1529
1530   2022-10-02 Version 1.3.3
1531       • Backport domain name change, see 2022-05-07 Version 1.4.0
1532
1533       • Backport #371
1534
1535   2022-07-30 Version 1.4.1
1536       • Changes:
1537
1538         • New website,  move  domain  name  from  srain.im  to  srain.silver‐
1539           rainz.me, see Migrate domain name to srain.silverrainz.me
1540
1541         • Require mesion >= 0.47.0
1542
1543   2022-05-07 Version 1.4.0
1544       • Features:
1545
1546         • Add support for IRCv3 standard-replies (#354), by @progval
1547
1548         • Add support for SASL EXTERNAL (#352), by @progval
1549
1550         • Add support for invite-notify (#359), by @progval
1551
1552         • Add  conf  item server-visibility for setting default server visib‐
1553           lity (#361), by @SilverRainZ
1554
1555         • Add support for server-time (#345), by @progval
1556
1557         • Add /clear command for clearing messages of current buffer  (#268),
1558           by @SilverRainZ
1559
1560       • Bug fixes:
1561
1562         • Fix  workflow  for  building MS Windows release artifact (#360), by
1563           @lifeibiren
1564
1565       • Changes:
1566
1567         • Make the buffer menu apply to the right-clicked item instead of the
1568           active buffer (#353), by progval
1569
1570         • Srain   now   accepting   donations   through   OpenCollective   (‐
1571           https://opencollective.com/srain)
1572
1573         • Disable workflow for building debian release artifact since we have
1574           offical debian package (99d9d86)
1575
1576   2022-02-10 Version 1.3.2
1577       • Features:
1578
1579         • Add French translation (#351), by @progval
1580
1581       • Bug fixes:
1582
1583         • Silence assertion failure on /part command (#348), by @progval
1584
1585         • Silence "Unknown capability" warning on trailing whitespace (#349),
1586           by @progval
1587
1588       • Changes:
1589
1590         • Add tooltips to buttons with no text(#350), by @progval
1591
1592         • Srain is added to offical repository of Debian, see Debian for  de‐
1593           tails
1594
1595   2021-12-18 Version 1.3.1
1596       • Bug fixes:
1597
1598         • Fix build of macOS (#339), by @SilverRainZ
1599
1600         • Make  channel  messages with origin out of channels can be shown (‐
1601           #336), by @progval
1602
1603         • Rejoin channels after NICKSERV authentication finishes  (#274),  by
1604           @SilverRainZ
1605
1606   2021-12-18 Version 1.2.5
1607       • Bug fixes:
1608
1609         • Backport #336, #274
1610
1611   2021-09-23 Version 1.3.0
1612       • Features:
1613
1614         • Implement  ISUPPORT  parsing  + the UTF8ONLY IRCv3 specification (‐
1615           #331), thanks to @progval
1616
1617         • Add support for RPL_UMODEIS (#331), thanks to @progval
1618
1619         • Make nick completion case-insensitive (#333), thanks to @progval
1620
1621         • Add button for inserting emoji (#279)
1622
1623       • Bug fixes:
1624
1625         • Fix configuration syntax errors caused by trailing  commas  (#330),
1626           thanks to @progval
1627
1628   2021-07-18 Version 1.2.4
1629       • Bug fixes:
1630
1631         • Fix bug casued by #316 (#319)
1632
1633         • Fix crach when URL preview async task failed (#322)
1634
1635   2021-06-26 Version 1.2.3
1636       • Bug fixes:
1637
1638         • Eliminate GDK warning (#316)
1639
1640   2021-05-30 Version 1.2.2
1641       • Changed:
1642
1643         • Add libera.chat IRC network (#311)
1644
1645         • Updated Dutch translation (b6830e9)
1646
1647       • Bug fixes:
1648
1649         • Fix windows build (#300, #303)
1650
1651   2021-04-02 Version 1.2.1
1652       • Features:
1653
1654         • Add Ukrainian translations (#292), thanks to @andmizyk
1655
1656       • Bug fixes:
1657
1658         • Minor fixes (#290)
1659
1660   2021-02-28 Version 1.2.0
1661       • Features:
1662
1663         • Switch build system from Make to Meson (#266)
1664
1665         • Add   FreeBSD  implementations  for  srn_get_executable_{path,dir},
1666           thanks to @wahjava
1667
1668         • Add /quote command for sending special IRC commands, thanks to @hno
1669           (#283)
1670
1671         • Add support for hiding server buffer (#287)
1672
1673       • Bug fixes:
1674
1675            • Fix an use-after-free BUG (#267)
1676
1677            • Fix  implicit  declaration  error  on  some  systems,  thanks to
1678              @lgbaldoni (#270)
1679
1680   2020-10-01 Version 1.1.3
1681       • Bug fixes:
1682
1683            • Fix an use-after-free BUG (#267)
1684
1685   2020-08-10 Version 1.1.2
1686       NOTE:
1687          This release contains only improvement for MS Windows, user of other
1688          platform can ignore it.
1689
1690       • Features:
1691
1692         • Binary  for  MS  Windows now can automatically built via Github Ac‐
1693           tions, thanks to @lifeibiren (#259), please refer  to  Windows  for
1694           more details
1695
1696       • Changes:
1697
1698         • For ease of running on windows, Srain's executable path is added to
1699           the  search  paths  of   {configuration,data}   file.   Thanks   to
1700           @lifeibiren (#259)
1701
1702   2020-06-27 Version 1.1.1
1703       • Changes:
1704
1705         • Improve auto-scroll policy of message list (#255)
1706
1707       • Bug fixes:
1708
1709         • Fix TLS certificate verification error on glib-networking 2.64.3 (‐
1710           #251)
1711
1712         • Fix crash when connecting to an invalid host (#234)
1713
1714   2020-05-24 Version 1.1.0
1715       • Features:
1716
1717         • Support multiple selection of message (#138)
1718
1719         • Support jump to mentioned message (#243)
1720
1721         • Nickname will be highlighted when mentioned (#243)
1722
1723         • Auto build deb package (#238)
1724
1725       • Changes:
1726
1727         • Improve fcous control of UI
1728
1729         • Replace appdata with metainfo (#240)
1730
1731         • Validate metainfo with appstream-util (#242)
1732
1733       • Bug fixes:
1734
1735         • Some implicit declarations fixes (#236)
1736
1737         • Some typo fixes (#239)
1738
1739   2020-04-11 Version 1.0.2
1740       • Features:
1741
1742         • Add MAN documentation (deaf723)
1743
1744         • Add more predefined IRC networks: DALnet, EFnet,  IRCnet,  Undernet
1745           and QuakeNet (#228)
1746
1747       • Changes:
1748
1749         • Build: Allow setting CC variable via environment (#224)
1750
1751         • Add channel related messages to corresponding buffer as possible (‐
1752           #149)
1753
1754         • Improve widget focus control (#229)
1755
1756         • Drop unused icons (6239fe5)
1757
1758         • Provide clearer error message when connecting (#233)
1759
1760         • Update gentoo installation documentation Gentoo (ceb5ca3)
1761
1762       • Bug fixes:
1763
1764         • Truncate long message before sendisg (#227)
1765
1766         • Deal with invalid UTF-8 string (50e7757)
1767
1768         • Fix incorrect user number of channel user list (#230)
1769
1770         • Fix incorrect icon install path (9f07380)
1771
1772   2020-03-14 Version 1.0.1
1773       • Features:
1774
1775         • Auto rename to original nick when ghost quit (#198)
1776
1777         • Add hackint IRC network (#201), thanks to @kpcyrd
1778
1779         • Add Dutch translation (#215), thanks to @Vistaus
1780
1781         • Add two FAQs to documentation (#217)
1782
1783         • Add debian pack script (contrib#1), thanks to @tomac4t.  Please re‐
1784           fer to Debian to build a deb package
1785
1786       • Changes:
1787
1788         • Move continuous integration from travis CI to github actions (#203,
1789           #204), thanks to @tomac4t
1790
1791         • Make header bar buttons repect default belief (#205, #218)
1792
1793       • Bug fixes:
1794
1795         • Fix case sensitivity issue  for  IRC  messages  (#202),  thanks  to
1796           @hhirtz
1797
1798         • Fix invalid changelog section of appdata file (#214)
1799
1800         • Fix missing dependences in documentation (#216), thanks to @avoidr
1801
1802   2020-02-24 Version 1.0.0
1803       • Changes:
1804
1805         • Some code cleanup
1806
1807         • Update Quick Start documentation
1808
1809       • Bug fixes:
1810
1811         • Allow Srain runs without dbus secrets service (#195)
1812
1813         • Fix nick generation logical (39ced08)
1814
1815       NOTE:
1816          1.0.0 is the first stable release of Srain, enjoy!
1817
1818   2019-10-07 Version 1.0.0rc9999
1819       • Features:
1820
1821         • Activate corresponding buffer when channel URL is clicked (#190)
1822
1823         • Command alias support (#188)
1824
1825         • List  predefined  servers  via  command, see /server for details (‐
1826           656f3e5)
1827
1828       • Changes:
1829
1830         • Replace all icons with freedesktop standard icons (#120)
1831
1832       • Bug fixes:
1833
1834         • Fix wrong usage of GError (#179)
1835
1836         • Fix image preview problem when image is hard to detect type (#163)
1837
1838         • Fix memory leak of pattern filter (9464a9e)
1839
1840         • Fix the breaking "abort sending" icon (#144)
1841
1842         • Fix the invite menu of user (9f98cbb)
1843
1844   2019-06-14 Version 1.0.0rc5
1845       • Added:
1846
1847            • Regular expression pattern management using /pattern command
1848
1849            • Add command /filter & /unfilter for filtering message  via  pat‐
1850              tern
1851
1852            • Add  command  /render & /unrender for rendering message via pat‐
1853              tern
1854
1855       • Changed:
1856
1857            • Refactor detector module and rename it to render
1858
1859            • Refactor filter module
1860
1861            • Change project description
1862
1863       • Removed:
1864
1865            • Drop command /rignore & /unrignore
1866
1867            • Drop command /relay & /unrelay
1868
1869   2019-05-13 Version 1.0.0rc4
1870       • Added:
1871
1872            • New dependency libsecret
1873
1874            • Add password storage support
1875
1876            • Add command line options --no-auto, used to require Srain not to
1877              automatically connect to servers
1878
1879            • Add russian translation, thanks to @tim77
1880
1881            • Allow user send slash(/) prefixed message
1882
1883       • Removed:
1884
1885         • Drop all password fields in configuration file
1886
1887       • Changed:
1888
1889         • Enable CSD(Client-Side Decoration) by default
1890
1891         • Update chinese translation
1892
1893   2019-04-14 Version 1.0.0rc3
1894   2019-01-24 Version 1.0.0rc2
1895   2018-09-10 Version 1.0.0rc1
1896   2018-02-28 Version 0.06.4
1897       • Changed:
1898
1899         • Change default application ID to im.srain.Srain
1900
1901       • Added:
1902
1903         • CTCP  support,  including  request  &  response CLIENTINFO, FINGER,
1904           PING, SOURCE, TIME, VERSION, USERINFO messages. DCC message is  not
1905           yet supported. Use command /ctcp for sending a CTCP request
1906
1907         • Login  method support, you can specify it by configuration file op‐
1908           tion server.login_method:
1909
1910sasl_plain:  SASL  PLAIN  authentication  support,  will   use
1911                server.user.username  as  identity, and use server.user.passwd
1912                as password
1913
1914         • Added documentation Support Tables used to show  Srain's  features,
1915           inspried by https://ircv3.net/software/clients.html
1916
1917         • Added a semantic version parser, not yet used
1918
1919         • Added  appdata  file  which requier by application store, thanks to
1920           @cpba
1921
1922         • openSUSE package is available, please refer  to  openSUSE  for  de‐
1923           tails, thanks to @alois
1924
1925         • Flatpak  package  is available, please refer to Fedora for details,
1926           thanks to @cpba
1927
1928       • Improved:
1929
1930         • Fixed a logical error in IRC message  parser:  all  parameters  are
1931           equal   whether  matched  by  <middle>  or  <trailing>,  thanks  to
1932           @DanielOaks
1933
1934         • Improved connection state control, you can smoothly disconnect/quit
1935           from server even it is unresponsive
1936
1937         • Fixed truncated message output by /server list subcommand
1938
1939         • Fixed crash at g_type_check_instance() under GLib 2.54.3+
1940
1941         • Fixed: Do not free a SrianServerBuffer which has non-empty buffer
1942
1943         • Ensure the QUIT message can be sent before application shutdown
1944
1945         • Removed entry from desktop file, thanks to @TingPing
1946
1947         • Fixed grammer of join message, thanks to @raindev
1948
1949         • Re-enable CI for Srain: ci-status
1950
1951   2017-12-22 Version 0.06.3
1952       • Changed:
1953
1954         • Configurable  file  option  tls_not_verify  in  irc block in server
1955           block is renamed to tls_noverify, old option  name  is  still  sup‐
1956           ported
1957
1958         • Command  option  tls-not-verify for /server and /connect is renamed
1959           to tls-noverify, old option name is still supported
1960
1961       • Added:
1962
1963         • Connect popover supports connect to predefined server
1964
1965         • Join popover supports channel search
1966
1967       • Improved:
1968
1969         • Modified margin and padding of some widgets
1970
1971         • Improved the style of unread message counter
1972
1973         • Fixed markup parse error of decorator
1974
1975         • Fixed crashing while connecting from connect popover
1976
1977         • Fixed use after free while removing user
1978
1979         • Improved the performance and extensibility of user list
1980
1981         • Improved compatibility with older versions of GTK(> 3.16)
1982
1983         • Refactor the code of chat panel, helpful for the next development
1984
1985   2017-09-12 Version 0.06.2
1986       • Added:
1987
1988         • mIRC color support, can be disabled via  setting  render_mirc_color
1989           option in chat block in server block to false
1990
1991       • Improved:
1992
1993         • Better error reporting while operating the UI
1994
1995         • IRC URL can be opened directly within the application
1996
1997         • Text  in  input  entry, connection panel and join panel will not be
1998           cleared while operation is not successful
1999
2000         • Fixed: in some cases, nickname registration will case infinity loop
2001
2002         • Decorator and filter now can process xml message
2003
2004         • Imporved the handling of channel topic
2005
2006   2017-08-18 Version 0.06.1
2007       • Added:
2008
2009         • Added GPL copyright statements
2010
2011         • RPL_CHANNEL_URL (328) message support
2012
2013         • Command line options support, type srain -h for help message
2014
2015         • Support for Creating server and joining channel from IRC URL
2016
2017         • New dependency libsoup
2018
2019         • Add reconnect timer: if connection fails, Srain  will  wait  for  5
2020           seconds  then try to connect again. If it still fails, waiting time
2021           will increase by 5 second
2022
2023       • Improved:
2024
2025         • Fixed the crash when QUIT
2026
2027         • Fixed: avoid sending empty password
2028
2029         • More empty parameters checks
2030
2031         • Imporve server connection status control
2032
2033   2017-07-29 Version 0.06
2034       • Changed:
2035
2036         • The third time of refactor ;-)
2037
2038         • New command parser, for the syntax, refer to Syntax.
2039
2040         • Changed the format of Chat log
2041
2042         • The /relay & /unrelay command  doesn't  support  custom  delimiter,
2043           this function will be implemented as python plugin in the future
2044
2045         • Use reStructuredText for document instead of Markdown
2046
2047       • Added:
2048
2049         • Message filter: mechanism for filtering message
2050
2051         • Message Decorator: mechanism for changing message
2052
2053         • Install script for Gentoo, thanks to @rtlanceroad !
2054
2055         • New  command /rignore & /unrignore for ignore message using regular
2056           expression, thanks to @zwindl !
2057
2058         • Config file support
2059
2060         • Configurable log module, more convenient for developing and report‐
2061           ing issue
2062
2063         • New Return value type, for more friendly error reporting
2064
2065         • New command /server for IRC servers management
2066
2067         • Srain home page is available at:
2068           :del:`https://srain.im`
2069            (expired, use https://srain.silverrainz.me)
2070
2071         • Srain help documentation is available at:
2072           :del:`https://doc.srain.im`
2073            (expired, use https://srain.silverrainz.me)
2074
2075       • Removed:
2076
2077         • Remove libircclient dependence
2078
2079       • Improved:
2080
2081         • Improve reconnection stuff: auto reconnect when ping time out
2082
2083         • More accurate message mention
2084
2085         • Display preview image in correct size
2086
2087         • Any number of image links in message can be previewed
2088
2089         • HTTP(and some other protocols) link, domain name, email address and
2090           IRC channel name in topic and messages can  be  rendered  as  hyper
2091           link
2092
2093         • The sent message can be merged to last sent message
2094
2095         • Fixed some bugs
2096
2097   2016-09-19 Version 0.05.1
2098       • Create missing directory: $XDG_CACHE_HOME/srain/avatars
2099
2100   2016-08-27 Version 0.05
2101       • Changed:
2102
2103         • Port to libircclient
2104
2105           • SSL connection support
2106
2107           • Server password support
2108
2109           • Channel password support
2110
2111       • Added:
2112
2113         • Convenience GtkPopover for connecting and joining
2114
2115         • Nick popmenu
2116
2117         • Translations: zh_CN
2118
2119         • Forward message
2120
2121         • Chat log
2122
2123         • Colorful user list icon
2124
2125         • Mentioned highlight
2126
2127         • Desktop notification
2128
2129       • Improved:
2130
2131         • More friendly User interface
2132
2133         • Stronger {upload,avatar} plugin
2134
2135         • Fixed a lot of bugs
2136
2137   2016-04-30 Version 0.03
2138       • New interface between UI and IRC module
2139
2140       • Multi-server support
2141
2142       • Channel name is not case sensitive now
2143
2144       • /quit command will close all SrainChan of a server
2145
2146       • Fix GTK-Warning when close a SrainCHan
2147
2148       NOTE:
2149          0.03 is a pre-release, some functions are no completed yet.  it also
2150          has some undetected bugs.
2151
2152   2016-04-13 Version 0.02
2153       • Bugs fixed
2154
2155       • Port to GTK+-3.20
2156
2157       NOTE:
2158          0.02 is a pre-release, some functions are no completed yet.  it also
2159          has some undetected bugs.
2160
2161   2016-04-07 Version 0.01
2162       • Implement basic functions of a IRC client
2163
2164       • Themes: Silver Rain (light)
2165
2166       • Simple python plugin support:
2167
2168         • Auto upload image to pastebin (img.vim-cn.org)
2169
2170         • Get github avatar according nickname
2171
2172         • NB: plugin will separated from this repo in the future
2173
2174       • Image preview from URL
2175
2176       • Relay bot message transfrom
2177
2178       • Nick auto completion
2179
2180       • Combine message from same person
2181
2182       NOTE:
2183          0.01 is a pre-release, some functions are no completed yet.  it also
2184          has some undetected bugs.
2185
2186   Support Tables
2187Basic IRC Client Support
2188
2189Client-to-Client Protocol (CTCP) Support
2190
2191IRCv3 Client Support
2192
2193   Basic IRC Client Support
2194                         ┌────────────────────┬─────────────┐
2195                         │Function            │ Support     │
2196                         ├────────────────────┼─────────────┤
2197                         │Auto reconnect      │ Yes         │
2198                         ├────────────────────┼─────────────┤
2199                         │Multiple connection │ Yes         │
2200                         ├────────────────────┼─────────────┤
2201                         │TLS connection      │ Yes         │
2202                         ├────────────────────┼─────────────┤
2203                         │Nick completion     │ Yes         │
2204                         ├────────────────────┼─────────────┤
2205                         │Ignore and filter   │ Yes         │
2206                         ├────────────────────┼─────────────┤
2207                         │Chat log            │ Yes         │
2208                         ├────────────────────┼─────────────┤
2209                         │Configuration file  │ Yes         │
2210                         ├────────────────────┼─────────────┤
2211                         │Command             │ Yes         │
2212                         ├────────────────────┼─────────────┤
2213                         │mIRC color          │ Yes         │
2214                         ├────────────────────┼─────────────┤
2215                         │Plugin              │ Unavailable │
2216                         └────────────────────┴─────────────┘
2217
2218   Client-to-Client Protocol (CTCP) Support
2219                               ┌───────────┬─────────┐
2220                               │Message    │ Support │
2221                               ├───────────┼─────────┤
2222                               │ACTION     │ Yes     │
2223                               ├───────────┼─────────┤
2224                               │CLIENTINFO │ Yes     │
2225                               ├───────────┼─────────┤
2226                               │DCC        │ No      │
2227                               ├───────────┼─────────┤
2228                               │FINGER     │ Yes     │
2229                               ├───────────┼─────────┤
2230                               │PING       │ Yes     │
2231                               ├───────────┼─────────┤
2232                               │SOURCE     │ Yes     │
2233                               ├───────────┼─────────┤
2234                               │TIME       │ Yes     │
2235                               ├───────────┼─────────┤
2236                               │VERSION    │ Yes     │
2237                               ├───────────┼─────────┤
2238                               │USERINFO   │ Yes     │
2239                               └───────────┴─────────┘
2240
2241   IRCv3 Client Support
2242                  ┌──────────────────┬────────────────────────────┐
2243                  │Feature           │ Support                    │
2244                  ├──────────────────┼────────────────────────────┤
2245                  │CAP v3.1          │ Yes                        │
2246                  ├──────────────────┼────────────────────────────┤
2247                  │CAP v3.2          │ Yes                        │
2248                  ├──────────────────┼────────────────────────────┤
2249                  │cap-notify        │ Yes                        │
2250                  ├──────────────────┼────────────────────────────┤
2251                  │account-notify    │ No                         │
2252                  ├──────────────────┼────────────────────────────┤
2253                  │account-tag       │ No                         │
2254                  ├──────────────────┼────────────────────────────┤
2255                  │away-notify       │ No                         │
2256                  ├──────────────────┼────────────────────────────┤
2257                  │batch             │ No                         │
2258                  ├──────────────────┼────────────────────────────┤
2259                  │chghost           │ No                         │
2260                  ├──────────────────┼────────────────────────────┤
2261                  │echo-message      │ No                         │
2262                  └──────────────────┴────────────────────────────┘
2263
2264
2265                  │extended-join     │ No                         │
2266                  ├──────────────────┼────────────────────────────┤
2267                  │invite-notify     │ Yes                        │
2268                  ├──────────────────┼────────────────────────────┤
2269                  │Monitor           │ No                         │
2270                  ├──────────────────┼────────────────────────────┤
2271                  │multi-prefix      │ No                         │
2272                  ├──────────────────┼────────────────────────────┤
2273                  │SASL v3.1         │ PLAIN,ECDSA-NIST256P-CHAL‐ │
2274                  │                  │ LENGE                      │
2275                  ├──────────────────┼────────────────────────────┤
2276                  │SASL v3.2         │ PLAIN,ECDSA-NIST256P-CHAL‐ │
2277                  │                  │ LENGE                      │
2278                  ├──────────────────┼────────────────────────────┤
2279                  │server-time       │ No                         │
2280                  ├──────────────────┼────────────────────────────┤
2281                  │starttls          │ No                         │
2282                  ├──────────────────┼────────────────────────────┤
2283                  │sts               │ No                         │
2284                  ├──────────────────┼────────────────────────────┤
2285                  │userhost-in-names │ No                         │
2286                  └──────────────────┴────────────────────────────┘
2287

AUTHOR

2289       Shengyu Zhang
2290
2292       2023, Shengyu Zhang
2293
2294
2295
2296
22971.5.1                            Jul 22, 2023                         SRAIN(1)
Impressum