1
2
3
4
5                                                             A. Shchepin
6                                                             Process-One
7                                                                 M. Rose
8                                            Dover Beach Consulting, Inc.
9                                                              S. Golovan
10                                                     New Economic School
11                                                               M. Litvak
12                                                           Colocall Ltd.
13                                                            K. Khomoutov
14                                                             Service 007
15                                                              March 2015
16
17
18                             Tkabber 1.1.2
19
20Abstract
21
22   _Tkabber_ is an open source Jabber client, written in _Tcl/Tk_.  This
23   memo describes the installation, configuration, and extension of
24   _Tkabber_.
25
26Table of Contents
27
28   1.  Features  . . . . . . . . . . . . . . . . . . . . . . . . . .   3
29   2.  Requirements  . . . . . . . . . . . . . . . . . . . . . . . .   5
30   3.  Download, install and run . . . . . . . . . . . . . . . . . .   8
31   4.  Upgrading . . . . . . . . . . . . . . . . . . . . . . . . . .  10
32     4.1.  Upgrading from version 1.0, 1.1 or 1.1.1  . . . . . . . .  10
33     4.2.  Upgrading from version 0.11.0 or 0.11.1 . . . . . . . . .  10
34       4.2.1.  External plugins  . . . . . . . . . . . . . . . . . .  10
35       4.2.2.  Configuration options . . . . . . . . . . . . . . . .  10
36     4.3.  Upgrading from version 0.10.0 . . . . . . . . . . . . . .  11
37       4.3.1.  Configuration options . . . . . . . . . . . . . . . .  11
38         4.3.1.1.  Proxy servers . . . . . . . . . . . . . . . . . .  12
39         4.3.1.2.  Resources to control fonts  . . . . . . . . . . .  12
40         4.3.1.3.  Keep-alives and dead link detection . . . . . . .  13
41         4.3.1.4.  Resources to control appearance of balloon
42                   windows . . . . . . . . . . . . . . . . . . . . .  13
43         4.3.1.5.  Support for external XML parser . . . . . . . . .  14
44       4.3.2.  User interface  . . . . . . . . . . . . . . . . . . .  14
45         4.3.2.1.  System tray icon mouse gestures . . . . . . . . .  14
46         4.3.2.2.  New tab management widget . . . . . . . . . . . .  14
47         4.3.2.3.  Window splitters  . . . . . . . . . . . . . . . .  15
48     4.4.  Upgrading from version 0.9.9  . . . . . . . . . . . . . .  15
49   5.  Configuration . . . . . . . . . . . . . . . . . . . . . . . .  15
50     5.1.  Pre-load  . . . . . . . . . . . . . . . . . . . . . . . .  16
51       5.1.1.  Tabbed Interface  . . . . . . . . . . . . . . . . . .  17
52       5.1.2.  Fonts and colors  . . . . . . . . . . . . . . . . . .  18
53
54
55
56Shchepin, et al.        Expires September 2, 2015               [Page 1]
57
58                              Tkabber 1.1.2                   March 2015
59
60
61       5.1.3.  Cryptography by default . . . . . . . . . . . . . . .  20
62       5.1.4.  Debugging Output  . . . . . . . . . . . . . . . . . .  20
63       5.1.5.  Splash window . . . . . . . . . . . . . . . . . . . .  21
64       5.1.6.  I18n/L10n . . . . . . . . . . . . . . . . . . . . . .  21
65       5.1.7.  Browse URL  . . . . . . . . . . . . . . . . . . . . .  21
66       5.1.8.  Searching . . . . . . . . . . . . . . . . . . . . . .  22
67     5.2.  Post-load . . . . . . . . . . . . . . . . . . . . . . . .  22
68       5.2.1.  Look-and-Feel . . . . . . . . . . . . . . . . . . . .  27
69       5.2.2.  The system tray icon (for Unix) . . . . . . . . . . .  27
70       5.2.3.  The Autoaway Module . . . . . . . . . . . . . . . . .  28
71       5.2.4.  The Avatar Module . . . . . . . . . . . . . . . . . .  28
72       5.2.5.  The Chat Module . . . . . . . . . . . . . . . . . . .  28
73       5.2.6.  The Clientinfo Module . . . . . . . . . . . . . . . .  29
74       5.2.7.  The Conferenceinfo Module . . . . . . . . . . . . . .  29
75       5.2.8.  The Cryptographic Module  . . . . . . . . . . . . . .  29
76       5.2.9.  The Emoticons Module  . . . . . . . . . . . . . . . .  29
77       5.2.10. The File Transfer Module  . . . . . . . . . . . . . .  30
78       5.2.11. The Groupchat Module  . . . . . . . . . . . . . . . .  30
79       5.2.12. The Ispell Module . . . . . . . . . . . . . . . . . .  31
80       5.2.13. The Stream Initiation Module  . . . . . . . . . . . .  31
81       5.2.14. The Logger Module . . . . . . . . . . . . . . . . . .  32
82       5.2.15. The Proxy Module  . . . . . . . . . . . . . . . . . .  32
83       5.2.16. The Login Module  . . . . . . . . . . . . . . . . . .  34
84       5.2.17. The Message Module  . . . . . . . . . . . . . . . . .  36
85       5.2.18. The Raw XML Input Module  . . . . . . . . . . . . . .  36
86       5.2.19. The Roster Module . . . . . . . . . . . . . . . . . .  36
87       5.2.20. The Sound Module  . . . . . . . . . . . . . . . . . .  36
88     5.3.  Menu-load . . . . . . . . . . . . . . . . . . . . . . . .  38
89       5.3.1.  The Avatar Module . . . . . . . . . . . . . . . . . .  39
90       5.3.2.  The Browser Module  . . . . . . . . . . . . . . . . .  39
91       5.3.3.  The Groupchat Module  . . . . . . . . . . . . . . . .  39
92       5.3.4.  The Login Module  . . . . . . . . . . . . . . . . . .  39
93       5.3.5.  The Message Module  . . . . . . . . . . . . . . . . .  39
94       5.3.6.  The Presence Module . . . . . . . . . . . . . . . . .  39
95       5.3.7.  Miscellany  . . . . . . . . . . . . . . . . . . . . .  40
96     5.4.  Final-Load  . . . . . . . . . . . . . . . . . . . . . . .  41
97   6.  Extensibility . . . . . . . . . . . . . . . . . . . . . . . .  41
98     6.1.  Message Hooks . . . . . . . . . . . . . . . . . . . . . .  42
99     6.2.  Chat Hooks  . . . . . . . . . . . . . . . . . . . . . . .  43
100     6.3.  Login Hooks . . . . . . . . . . . . . . . . . . . . . . .  45
101     6.4.  Presence Hooks  . . . . . . . . . . . . . . . . . . . . .  45
102     6.5.  Info/Query Hook . . . . . . . . . . . . . . . . . . . . .  46
103     6.6.  Roster Hooks  . . . . . . . . . . . . . . . . . . . . . .  46
104     6.7.  Miscellaneous Hooks . . . . . . . . . . . . . . . . . . .  47
105   7.  User Interface basics . . . . . . . . . . . . . . . . . . . .  47
106     7.1.  Searching . . . . . . . . . . . . . . . . . . . . . . . .  47
107     8.1.  URIs  . . . . . . . . . . . . . . . . . . . . . . . . . .  49
108   Appendix A.  Releases History . . . . . . . . . . . . . . . . . .  50
109
110
111
112Shchepin, et al.        Expires September 2, 2015               [Page 2]
113
114                              Tkabber 1.1.2                   March 2015
115
116
117     A.1.  Main changes in 1.1.2 . . . . . . . . . . . . . . . . . .  50
118     A.2.  Main changes in 1.1.1 . . . . . . . . . . . . . . . . . .  50
119     A.3.  Main changes in 1.1 . . . . . . . . . . . . . . . . . . .  51
120     A.4.  Main changes in 1.0 . . . . . . . . . . . . . . . . . . .  51
121     A.5.  Main changes in 0.11.1  . . . . . . . . . . . . . . . . .  52
122     A.6.  Main changes in 0.11.0  . . . . . . . . . . . . . . . . .  52
123     A.7.  Main changes in 0.10.0  . . . . . . . . . . . . . . . . .  53
124     A.8.  Main changes in 0.9.9 . . . . . . . . . . . . . . . . . .  54
125     A.9.  Main changes in 0.9.8 . . . . . . . . . . . . . . . . . .  54
126     A.10. Main changes in 0.9.7beta . . . . . . . . . . . . . . . .  54
127     A.11. Main changes in 0.9.6beta . . . . . . . . . . . . . . . .  55
128     A.12. Main changes in 0.9.5beta . . . . . . . . . . . . . . . .  55
129   Appendix B.  Tk option database resources . . . . . . . . . . . .  55
130   Appendix C.  Documentation TODO . . . . . . . . . . . . . . . . .  58
131   Appendix D.  Acknowledgements . . . . . . . . . . . . . . . . . .  59
132   Appendix E.  Copyrights . . . . . . . . . . . . . . . . . . . . .  59
133   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  59
134
1351.  Features
136
137   Tkabber [1] provides a _Tcl/Tk_ interface to the Jabber/XMPP [2]
138   instant messaging and presence service.
139
140   _Tcl/Tk_ is a graphical scripting language that runs on the Unix,
141   Windows, and Macintosh platforms.  The choice of _Tcl/Tk_ for a
142   Jabber client is three-fold:
143
144   o  it is portable: once you install a _Tcl/Tk_ interpreter on your
145      system, the _Tkabber_ script "just runs" -- without having to
146      compile anything;
147
148   o  it is customizable: _Tkabber_ reads a configuration file when it
149      starts that tells it the settings of various parameters; and,
150
151   o  it is extensible: the configuration file is actually a _Tcl_
152      script, so you can replace or augment entire portions of _Tkabber_
153      (if you're so inclined).
154
155   _Tkabber_ is fully-featured:
156
157   sessions:
158
159      *  TCP, BOSH and HTTP-polling session transports
160
161      *  XMPP SRV and TXT DNS-records handling
162
163      *  hashed passwords
164
165
166
167
168Shchepin, et al.        Expires September 2, 2015               [Page 3]
169
170                              Tkabber 1.1.2                   March 2015
171
172
173      *  SASL authentication
174
175      *  encrypted sessions (if you install an optional extension)
176
177      *  compressed sessions (if you install an optional extension)
178
179      *  login via SOCKS4a, SOCKS5 or HTTPS proxy
180
181      *  IPv6 support (from Tcl/Tk 8.6)
182
183      *  user-defined hooks for connection establishment and release
184
185      *  XMPP/Jabber MIME type
186
187   messages:
188
189      *  privacy rules
190
191      *  GPG-signed/encrypted messages (if you install an optional
192         extension)
193
194      *  Off-the-record (OTR [3]) messaging
195
196      *  file transfers (HTTP, SOCKS bytestream, DTCP and IBB
197         transports)
198
199      *  groupchat (GroupChat-1.0 and Multi-User Chat conferencing
200         protocols)
201
202      *  headline messages
203
204      *  message events
205
206      *  completions of nick and commands
207
208      *  hyperlinks
209
210      *  emoticons
211
212      *  user-defined hooks for messages arriving and chat window events
213
214   presence:
215
216      *  signed presence (if you install an optional extension)
217
218      *  avatars
219
220      *  browsing
221
222
223
224Shchepin, et al.        Expires September 2, 2015               [Page 4]
225
226                              Tkabber 1.1.2                   March 2015
227
228
229      *  groupchat and roster invitations
230
231      *  conference room bookmarks
232
233      *  annotations about roster items
234
235      *  vCards
236
237      *  user-defined hooks for presence changes
238
239   windowing:
240
241      *  configurable look-and-feel via a resources database
242
243      *  unicode
244
245      *  tabbed/non-tabbed interface
246
247      *  sound notifications
248
249      *  nested roster groups
250
251      *  roster metacontacts
252
253      *  auto-away
254
255      *  for Unix: spell checking, KDE or freedesktop docking, and
256         WMaker icons
257
258      *  for Windows: taskbar icons
259
2602.  Requirements
261
262   You should already have installed:
263
264   o  Tcl/Tk version 8.4.9 [4] (or later, Tcl/Tk 8.5.9 or later is
265      recommended).  Note, that if you want to use Tkabber in IPv6
266      environment, you'll have to install Tcl/Tk 8.6beta2 or later.
267
268   o  tcllib version 1.2 [5] (or later, tcllib 1.8 or later is required
269      for SRV and TXT DNS-records support).
270
271   o  BWidget 1.3 [6] (or later)
272
273   Most systems already come with these packages pre-installed.  If not,
274   various Unix systems have them available as ready-made packages.
275   Otherwise, go to the URLs above and click on the appropriate download
276   link for your system.  Both _tcllib_ and _BWidget_ are script
277
278
279
280Shchepin, et al.        Expires September 2, 2015               [Page 5]
281
282                              Tkabber 1.1.2                   March 2015
283
284
285   libraries -- no compiling is necessary.  In the case of _Tcl/Tk_,
286   there are many ready-made binary packages available on the download
287   site.
288
289   The ActiveTcl [7] distribution contains all three packages (along
290   with the _tls_ and _Img_ package mentioned below); so, you may want
291   to use that instead of three separate downloads.
292
293   At your discretion, there are several optional packages that you may
294   also install.  _Tkabber_ will run just fine without them, but if
295   they're available _Tkabber_ will make additional features available
296   to you.  So, here's the list:
297
298   o  By default, communications between the server and client take
299      place over a plaintext connection.  While this may not be a
300      problem in some local, wired environments, if your server is
301      distant or your client is wireless, then you may want to encrypt
302      all the client/server traffic.
303      Accordingly, you may to install tls version 1.4.1 [8] (or later).
304      This package works on both Unix and Windows.  Note that if you're
305      using Unix, then you'll also need to have _OpenSSL_ installed.
306      Fortunately, this comes preinstalled on many Unix systems.  If
307      it's not on your system, check OpenSSL source page [9].  (The
308      Windows distribution of _tls_ comes with all the necessary DLLs.)
309
310
311
312   o  _Tcl/Tk_ supports only a small number of image formats (i.e.,
313      bitmaps, GIFs and portable pixmaps).  If presence information
314      contains avatars, these may be in other formats (e.g., PNGs or
315      JPGs).
316      Accordingly, you may want to install Img version 1.2 [10] (or
317      later).  This package works on both Unix and Windows.
318
319
320
321   o  Tkabber comes bundled with pure-Tcl XML parser.  If its
322      performance is insufficient, you may want to install tDOM version
323      0.8.0 [11] (or later) and use expat based XML parser.
324
325
326
327   o  Another option in Unix is to compress connection between client
328      and server (it currently disables encryption).
329      There's no special requirements for traffic compression in Tcl/Tk
330      8.6, but if you're using Tcl/Tk 8.4 or 8.5 and want to compress
331      traffic you should install ZTcl version 1.0b4 [12] (or later) and
332      Tclmore version 0.7b1 [13] (or later).
333
334
335
336Shchepin, et al.        Expires September 2, 2015               [Page 6]
337
338                              Tkabber 1.1.2                   March 2015
339
340
341      (At the time of 0.11.0 release _ZTcl_ and _Tclmore_ home page were
342      unavailable, so you may grab them from a mirror [14].)
343
344
345
346   o  By default, end-to-end communications between two or more Jabber
347      clients is plaintext.  Depending on your environment, this may not
348      be a problem for you.  Alternatively, you may want to digitally-
349      sign all of your outgoing messages, and allow others to encrypt
350      their messages to you.
351      Accordingly, you may want to install the _TclGPG_ package.
352      Depending on what's already installed on your system, you may have
353      to download upto two software bits:
354
355      *  TclGPG [15] (available only in a Fossil [16] repository at
356         present);
357
358      *  GPG version 1.0.7 [17] (or later).
359      Another alternative is to use Off-the-record messaging protocol
360      [18], if your contact supports it.  The OTR plugin is included
361      into _Tkabber plugins collection_ starting from version 1.1 and
362      requires _Tcl/Tk_ 8.5 or newer, due to its arbitrary precision
363      integer arithmetics, and a few packages from _Tcllib_, namely the
364      _aes_, _asn_, _base64_, _math::bignum_, _sha1_, _sha256_ packages.
365      Also, if you're using Windows, the Memchan [19] extension has to
366      be installed to run the OTR plugin.
367
368
369
370   o  If you're running Unix or Windows, then you may want _Tkabber_ to
371      play predefined sounds when message or presence arrives.
372      Accordingly, you may want to install Snack version 2.2.10 [20] (or
373      later).
374
375
376
377   o  If you're running Unix or Windows, then you may want _Tkabber_ to
378      automatically mark you as away after a priod of inactivity.
379      Accordingly (if you're using _Tcl/Tk_ 8.4), on Unix, you may want
380      to install Tk Xwin version 1.0 [21] (or later), whilst on WIndows,
381      you may want to install Tcl Winidle version 0.1 [22] (or later).
382
383   o  Users of _Tcl/Tk_ 8.5 or newer don't have to use external packages
384      to measure their idle time.
385
386
387
388
389
390
391
392Shchepin, et al.        Expires September 2, 2015               [Page 7]
393
394                              Tkabber 1.1.2                   March 2015
395
396
397   o  If you're running Unix, then you may want _Tkabber_ to use the
398      docking tray.
399      Accordingly, you may want to install tktray version 1.3 [23] (or
400      later) for freedesktop icon (supported by modern _KDE_ and
401      _GNOME_).
402
403
404
405   o  If you're running Windows, then you may want _Tkabber_ to use the
406      system tray.
407      Accordingly, you may want to install Winico version 0.6 [24] (or
408      later).
409
410
411
412   o  If you're a Tcl/Tk guru, then you may want to access the Tk
413      console to debug things.
414      Accordingly, you may want to install tkcon version 2.3 [25] (or
415      later).
416
417   Please keep in mind that these are all "optional extras" -- if
418   they're not right for you or your environment, don't bother with
419   them!
420
4213.  Download, install and run
422
423   Latest stable version is 1.1.2 and available at
424   http://tkabber.jabber.ru/download .
425
426   Older versions can be found at http://files.jabber.ru/tkabber/ .
427
428   You can always find the latest development version via Fossil [28].
429   Execute the following commands:
430
431fossil clone https://chiselapp.com/user/sgolovan/repository/tkabber tkabber.fossil
432fossil clone https://chiselapp.com/user/sgolovan/repository/tclxmpp tclxmpp.fossil
433mkdir tkabber
434cd tkabber
435fossil open ../tkabber.fossil
436mkdir tclxmpp
437cd tclxmpp
438fossil open --nested ../../tclxmpp.fossil
439
440
441
442
443
444
445
446
447
448Shchepin, et al.        Expires September 2, 2015               [Page 8]
449
450                              Tkabber 1.1.2                   March 2015
451
452
453   And if you want to test some plugins, then do
454
455fossil clone https://chiselapp.com/user/sgolovan/repository/tkabber-plugins tkabber-plugins.fossil
456mkdir tkabber-plugins
457cd tkabber-plugins
458fossil open ../tkabber-plugins.fossil
459
460   And if you want to try unofficial plugins, then execute
461
462fossil clone https://chiselapp.com/user/sgolovan/repository/tkabber-contrib tkabber-contrib.fossil
463mkdir tkabber-contrib
464cd tkabber-contrib
465fossil open ../tkabber-contrib.fossil
466
467   They usually include short readme with info on what they do and how
468   to use them.
469
470   If you use the Debian GNU/Linux distribution, you may want to get all
471   required packages by using _apt_.  Just execute
472
473   apt-get install tk tcllib bwidget
474
475   or
476
477   apt-get install tkabber
478
479   to get the version included into Debian repository.
480
481   No real installation is required, simply copy the "tkabber/"
482   directory to a commonly-available area, and then either:
483
484   o  put this directory in your search-path; or,
485
486   o  make a calling script/shortcut to the file "tkabber.tcl" in that
487      directory.
488
489   Although _Tkabber_ comes with a Makefile, there's really not much to
490   do -- most folks prefer to simply copy the distribution directory to
491   somewhere in their home directory.
492
493   From the shell, you can invoke _Tkabber_ as:
494
495   % tkabber.tcl
496
497   whilst on a windowing system, simply double-click on that file or a
498   short-cut to it.
499
500
501
502
503
504Shchepin, et al.        Expires September 2, 2015               [Page 9]
505
506                              Tkabber 1.1.2                   March 2015
507
508
509   If you're a Tcl/Tk guru and have installed _tkcon_, then you may want
510   to invoke _Tkabber_ as:
511
512   % tkcon.tcl -exec "" -root .tkconn -main "source tkabber.tcl"
513
514   _Tkabber_ will automatically know that it's running under _tkcon_ and
515   will start by hiding the _Tk_ console window.  Look under the
516   "Services->Debug tools" menu to find the checkbutton to show the
517   console.  Note that if _Tkcon_ is installed as a Tcl/Tk package then
518   _Tkabber_ will add corresponding menu item under _Services->Debug
519   tools_ automatically.
520
521   Also you can setup _Tkabber_ as handler for XMPP/Jabber MIME Type
522   [29].  For this you need to set hanler for "application/xmpp+xml"
523   MIME type in your browser to something like this:
524
525   tkabber -mime %s
526
5274.  Upgrading
528
5294.1.  Upgrading from version 1.0, 1.1 or 1.1.1
530
531   Upgrading _Tkabber_ from version 1.0 doesn't require configuration
532   changes.  You are advised to upgrade external plugins but it isn't
533   strictly necessary.
534
5354.2.  Upgrading from version 0.11.0 or 0.11.1
536
537   When upgrading _Tkabber_ from version 0.11.1 or earlier note that its
538   plugin interface and several configuration options have been changed.
539
5404.2.1.  External plugins
541
542   There are incompatible changes in Tkabber internals, which break the
543   old plugins.  So, you'll have to upgrade them as well.  If a plugin
544   author hasn't released a version compatible with _Tkabber_ 1.1 then
545   you'll have to disable or remove that plugin.
546
5474.2.2.  Configuration options
548
549   There are notable changes in specifying a set of proxy servers.  If
550   you define proxy server in the global "loginconf" array then you'll
551   have to do the following: In case if you use the _Customize_
552   interface, you may open the _Manage proxy servers_ dialog window and
553   add your proxy server there.  Note that if you're using the HTTPS
554   proxy then you'll have to add it twice (one in the _Tunnel proxies_
555   tab and the other in the _HTTP proxies_ tab, see section 'The proxy
556   module' (Section 5.2.15) below).  If you define proxy server in the
557
558
559
560Shchepin, et al.        Expires September 2, 2015              [Page 10]
561
562                              Tkabber 1.1.2                   March 2015
563
564
565   _Tkabber_ config file then you have lines similar to the following in
566   the config:
567
568   set loginconf(proxy) https
569   set loginconf(proxyhost) proxy.example.com
570   set loginconf(proxyport) 3128
571   set loginconf(proxyusername) ""
572   set loginconf(proxypassword) ""
573
574   Replace them by the following:
575
576   set proxy1(type) https
577   set proxy1(host) proxy.example.com
578   set proxy1(port) 3128
579   set proxy1(username) ""
580   set proxy1(password) ""
581   set proxy1(match) *
582   set proxy1(exclude) "localhost* 127.0.0.* 172.* 192.168.* 10.*"
583
584   set proxy2(type) http
585   set proxy2(host) proxy.example.com
586   set proxy2(port) 3128
587   set proxy2(username) ""
588   set proxy2(password) ""
589   set proxy2(match) *
590   set proxy2(exclude) "localhost* 127.0.0.* 172.* 192.168.* 10.*"
591
592   set proxyconf(profile) Proxies
593   set proxyconf(tunnel) {proxy1}
594   set proxyconf(http) {proxy2}
595
596   which will instruct _Tkabber_ to use these proxies for all
597   connections.  If you need more complicated setup with several proxy
598   profiles, read section 'The proxy module' (Section 5.2.15) below.
599
6004.3.  Upgrading from version 0.10.0
601
602   When upgrading _Tkabber_ from version 0.10.0 or earlier read the
603   above section on plugins (Section 4.2.1) and also note that several
604   configuration options and user interface elements have been changed.
605
6064.3.1.  Configuration options
607
608   There are notable changes in handling connection through proxy
609   servers, managing fonts and balloon colors, and detecting breaks in
610   underlying TCP connection to a server.
611
612
613
614
615
616Shchepin, et al.        Expires September 2, 2015              [Page 11]
617
618                              Tkabber 1.1.2                   March 2015
619
620
6214.3.1.1.  Proxy servers
622
623   Since SOCKS4 and SOCKS5 proxy types were implemented in addition to
624   HTTP proxy type, the whole set of connection options regarding proxy
625   servers has been changed.  This means that after upgrade the old
626   values stored using the Customize mechanism will be lost and the same
627   values in "loginconf" arrays will not be recognized any longer.
628
629   To learn how to adapt your current proxy settins to the current
630   _Tkabber_ version, read section above (Section 4.2.2), but remember
631   that variables in the "loginconf" array mentioned there have been
632   changed between 0.10.0 and 0.11.0.  Use the map below as a reference
633   which variable should actually be used:
634
635   o  Variable "httpproxy"in 0.10.0 became "proxyhost" in 0.11.0.
636
637   o  Variable "httpport" became "proxyport".
638
639   o  Variable "httplogin" became "proxyusername".
640
641   o  Variable "httppassword" became "proxypassword".
642
6434.3.1.2.  Resources to control fonts
644
645   Fonts handling has been partially reworked: the global variable
646   "font" that controls chat and roster fonts has been removed and now
647   _Tkabber_ relies on _Tk_ option database to manage these settings.
648   You can override roster and chat fonts independently of each other.
649   To do that on systems not based on X Window use _Customize_ options
650   described below.
651
652   The main consequence of this change is that now the fonts are taken
653   from _Tk_ option database and if it contains sane values you don't
654   need to touch anything (until the update you had to tweak the "font"
655   variable because it was set to font "fixed" by default).  The
656   variable "font" does not have any special meaning starting from
657   0.11.0 release.
658
659   The second consequence is that you are now able to set fonts for chat
660   and roster windows separately from each other using this list as a
661   reference:
662
663   o  "*font" _Tk_ option database resource sets default font for all
664      widgets used in _Tkabber_.
665
666   o  "*Chat*Text.font" _Tk_ option database resource can be used to
667      override font used for chat windows.  This resource can be
668
669
670
671
672Shchepin, et al.        Expires September 2, 2015              [Page 12]
673
674                              Tkabber 1.1.2                   March 2015
675
676
677      overridden by the "::ifacetk::options(font)" option from the "Main
678      Interface" group of _Customize_ settings.
679
680   o  "*Roster*font" _Tk_ option database resource can be used to
681      override font used for roster windows.  This resource can be
682      overridden by the "::ifacetk::options(roster_font)" option from
683      the "Main Interface" group of _Customize_ settings.
684
6854.3.1.3.  Keep-alives and dead link detection
686
687   Keep-alive mechanism that was used to keep NATP devices from
688   disconnecting idle XMPP sessions was accompanied in 0.10.0 with "XMPP
689   ping" mechanism which also implemented dead link detection with
690   support for disconnecting upon detection of network outage.
691
692   In version 0.11.0, the old keep-alive mechanism has been dropped, so
693   the following two global options have no effect now:
694
695   o  "keep_alive"
696
697   o  "keep_alive_interval"
698
699   In order to get the same functionality, enable XMPP ping using these
700   options in the "IQ" group of Customize settings:
701
702   o  Enabling "::plugins::ping::options(ping)" will make _Tkabber_
703      periodically send xmpp:ping IQ request to the server.
704
705   o  Set "::plugins::ping::options(timeout)" option to a number of
706      seconds _Tkabber_ should wait for either a xmpp:ping reply or an
707      error to arrive from the server; if there is no answer from the
708      server during this timeout, the socket for this connection will be
709      forcibly disconnected.
710
7114.3.1.4.  Resources to control appearance of balloon windows
712
713   Resources controlling the appearance of balloon windows have been
714   made more generic.  If you use custom _Tk_ option database settings
715   for balloon windows, change the relevant resources using this map:
716
717   o  Change references to "*Balloon.background" and
718      "*Balloon.foreground" resources to "*Balloon*background" and
719      "*Balloon*foreground", respectively.
720
721   o  Change references to "*Balloon*padX" and "*Balloon*padY" resources
722      to "*Balloon.text.padX" and "*Balloon.text.padY", respectively.
723
724
725
726
727
728Shchepin, et al.        Expires September 2, 2015              [Page 13]
729
730                              Tkabber 1.1.2                   March 2015
731
732
7334.3.1.5.  Support for external XML parser
734
735   Support for _TclXML_ as an external XML parser has been removed
736   (since _TclXML_ has anyway been unable to support partial XML
737   processing) along with the global variable "use_external_tclxml"
738   which controlled the loading of _TclXML_.
739
740   Now expat-based _Tcl_ package _tDOM_ is supported as an external XML
741   parser.  It is enabled by default if it is installed.
742
7434.3.2.  User interface
744
745   There are notable changes in systray mouse gestures, appearance of a
746   main tabbed window, and in behavior of paned window splitters.
747
7484.3.2.1.  System tray icon mouse gestures
749
750   Mouse gestures bound to system tray (system notification area) icon
751   have been reworked:
752
753   o  Single click on it with the left mouse button now unconditionally
754      brings the main _Tkabber_ window to front, possibly deiconifying
755      it first.
756
757   o  Single click with the middle mouse button now unconditionally
758      iconifies the main _Tkabber_ window.
759
760   This differs from the previois behaviour where single click with the
761   left mouse button on _Tkabber_'s system tray icon toggled the
762   iconified/visible state of the main _Tkabber_ window.
763
7644.3.2.2.  New tab management widget
765
766   The _notebook_ widget which was used to render tabs in tabbed
767   interface mode has been replaced with a new custom widget providing
768   the ability for multi-row placement of tabs and docking them to the
769   left or right sides of the chat window (in addition to top or bottom
770   docking available in 0.10.0 version and earlier).
771
772   If you adjusted any specific _Tk_ option database resources
773   pertaining to that _notebook_ widget, you have to change them keeping
774   in mind that the new widget is just a bunch of _Tk_ buttons (class
775   "Button") placed in a frame (called ".nb" as before).  The class name
776   for the new widget is "ButtonBar".
777
778   So if you explicitly set, say "*Notebook*font" option, you have to
779   change it to "*ButtonBar*font" and so on.
780
781
782
783
784Shchepin, et al.        Expires September 2, 2015              [Page 14]
785
786                              Tkabber 1.1.2                   March 2015
787
788
7894.3.2.3.  Window splitters
790
791   Window splitters (thin vertical and horizontal windows used to change
792   relative sizes of windows between which a splitter is placed) have
793   been changed to "Windows" style.  This differs from previous "Motif"
794   style which implemented explicit "grip box" on each splitter which
795   was the only "active point" of a splitter.
796
7974.4.  Upgrading from version 0.9.9
798
799   When upgrading _Tkabber_ from version 0.9.9 or earlier read the above
800   section (Section 4.3) and also note the following:
801
802   o  On Macintosh or Microsoft Windows _Tkabber_ will copy it's
803      configuration directory to a new location (see the next section
804      (Section 5) for details).  If the transfer of the config directory
805      goes smoothly you may delete old ""~/.tkabber"" directory and
806      replace its name in your config file by "$::configdir".
807
808   o  Also, _Tkabber_ will convert chatlogs directory to a new format.
809
810   o  Also, _Tkabber_ changed the way it works with emoticons.  Instead
811      of loading them in config file you may put you faivorite emoticons
812      directory into "$::configdir/plugins" directory, restart Tkabber
813      and then choose emoticons set using Customize GUI.
814
8155.  Configuration
816
817   _Tkabber_ maintains its configuration using a set of files placed in
818   a special configuration directory which location depends on the
819   operating system _Tkabber_ runs on.  These locations are:
820
821   o  Unix systems: ""~/.tkabber"";
822
823   o  Macintosh: ""~/Library/Application Support/Tkabber"";
824
825   o  Under Microsoft Windows this location is governed by the policy of
826      the particular flavor of this OS, but the general rule is that the
827      _Tkabber_ configuration directory is named ""Tkabber"" and is
828      located in the special system folder for storing application-
829      specific data.  For example, under Windows XP this will be
830      something like ""C:\Documents and Settings\USERNAME\Application
831      Data\Tkabber"", where ""USERNAME"" is the login name of a
832      particular operating system's user.
833
834   _Tkabber_ also honors the value of the ""TKABBER_HOME"" environment
835   variable -- if it exists the whole OS-based guessing of the
836
837
838
839
840Shchepin, et al.        Expires September 2, 2015              [Page 15]
841
842                              Tkabber 1.1.2                   March 2015
843
844
845   configuration directory location is cancelled and the value of this
846   environment variable is used instead.
847
848   Once the pathname of the _Tkabber_ configuration directory is known,
849   its value is assigned to the ""configdir"" global Tcl variable which
850   can be accessed from within the main _Tkabber_ configuration file
851   (see below).
852
853   One of the first things that _Tkabber_ does when it's starting up is
854   reading a file located in its configuration directory under the name
855   ""config.tcl"".  This is a _Tcl_ source file, so obviously, it's a
856   lot easier to maintain this file if you know the Tcl programming
857   language.  If you're not familiar with it, that's okay -- most things
858   you'll need to do are pretty simple!  (In fact, if you don't have
859   your own configuration file, you'll get the vanilla _Tkabber_, which
860   hopefully you'll find quite usable.)
861
862   Note that almost all _Tkabber_ options can be cofigured using
863   graphical interface (menu Tkabber->Customize), so editing
864   configuration file is not strictly necessary.
865
866   _Tkabber_ is configured in four stages:
867
868   o  in the pre-load stage, configuration options which guide the
869      loading process are set;
870
871   o  in the post-load stage, configuration options for each module are
872      set;
873
874   o  in the menu-load stage, the user is given an option to re-arrange
875      _Tkabber's_ menu bar; and,
876
877   o  the final-load stage allows any last changes to be made before the
878      "login" dialog window is displayed to the user.
879
880   Let's look at each, in turn.
881
8825.1.  Pre-load
883
884
885
886
887
888
889
890
891
892
893
894
895
896Shchepin, et al.        Expires September 2, 2015              [Page 16]
897
898                              Tkabber 1.1.2                   March 2015
899
900
901   There are a few things that you may let _Tkabber_ know immediately.
902   These are:
903
904   # tabbed interface
905
906   set ifacetk::options(use_tabbar) 1
907
908
909   # primary look-and-feel
910
911   set load_default_xrdb 1
912
913   option add *font \
914          "-monotype-arial-medium-r-normal-*-13-*-*-*-*-*-iso10646-1" \
915          userDefault
916
917
918   # cryptography by default
919
920   set ssj::options(sign-traffic)    0
921   set ssj::options(encrypt-traffic) 0
922
923
924   # debugging output
925
926   set debug_lvls {xmpp warning}
927
928
929   # splash window
930
931   set show_splash_window 0
932
933
934   # force english labels instead of native language
935
936   ::msgcat::mclocale en
937
938   # use mozilla firefox to open web urls in text
939
940   set webbrowser "firefox -new-tab %s"
941
9425.1.1.  Tabbed Interface
943
944
945
946
947
948
949
950
951
952Shchepin, et al.        Expires September 2, 2015              [Page 17]
953
954                              Tkabber 1.1.2                   March 2015
955
956
957   The first of these options, "ifacetk::options(use_tabbar)", tells
958   _Tkabber_ whether you want a tabbed interface or not.  If not, here's
959   what to put in your configuration file:
960
961   set ifacetk::options(use_tabbar) 0
962
963   Although _Tkabber_ immediately applies most of its configuration
964   changes, in order to apply changed option
965   "ifacetk::options(use_tabbar)" you have to restart _Tkabber_. So,
966   basically you have two options: set "ifacetk::options(use_tabbar)" at
967   the beginning of your configuration file, or using graphical
968   interface save the option and restart _Tkabber_.
969
9705.1.2.  Fonts and colors
971
972   Many aspects of the _Tkabber_'s visual appearance such as fonts,
973   colors and geometry of windows can be configured using the Tk option
974   database. [30]
975
976   The corresponding _Tk_'s option [31] command can be used in the
977   _Tkabber_'s configuration file in any acceptable way: from small
978   tweaks to reading files containing elaborate sets of configuration
979   commands; ready-to-use examples of such files are included in the
980   distribution and are located under the "examples/xrdb" directory.
981
982   The _Tk_ toolkit is able to initialize its option database from the
983   _XRDB_ (X Resource Database) if its availability is detected at run
984   time.  This means that any settings described here can be tuned via
985   the standard XRDB mechanism (see "man xrdb").
986
987   Beware though that the _Tk_'s semantics of matching option
988   specifications against the option database differ in some subtle
989   details from that of the _Xt_ toolkit.  The most notable one is the
990   priority of options: _Tk_ prefers the latest option it sees, while
991   _Xt_ prefers "the most specific" one.
992
993   When specifying _Tkabber_-specific options in your _XRDB_ file use
994   the "Tkabber" class as the root element of the options.
995
996   See Appendix B for a list of all the resources that you can set to
997   control _Tkabber's_ look-and-feel.
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008Shchepin, et al.        Expires September 2, 2015              [Page 18]
1009
1010                              Tkabber 1.1.2                   March 2015
1011
1012
1013   Probably the most commonly used way to configure _Tkabber_'s visual
1014   appearance (especially on Windows platforms which lack _XRDB_
1015   mechanism) is to put all the necessary settings in some file and then
1016   ask _Tk_ to update its option database from it, like this:
1017
1018       set load_default_xrdb 0
1019       option readfile $::configdir/newlook.xrdb userDefault
1020
1021   The first line tells _Tkabber_ not to load its default "xrdb" file,
1022   whilst the second line tells _Tkabber_ which file to load instead.
1023   Look at the provided example "xrdb" files to get the idea about how
1024   they are organised.  Of course, you can use any of that files as a
1025   template.  And of course, you can simply specify any of the example
1026   files instead of your own to the "option readfile" command to get the
1027   provided "theme".
1028
1029   Alternatively, if you're a Tcl "old timer", you can always do:
1030
1031       set load_default_xrdb 0
1032       tk_bisque
1033
1034   to set the palette to a pleasing color scheme.  Read more about this
1035   in "man palette".
1036
1037   You can also customize the fonts _Tkabber_ uses to render its user
1038   interface:
1039
1040       option add *font \
1041           "-monotype-arial-medium-r-normal-*-13-*-*-*-*-*-iso10646-1" \
1042           userDefault
1043
1044   The above setting (operating on the Tk option database) selects the
1045   font used for all UI elements like buttons and labels and roster and
1046   conversation windows.  Obviously, you should choose fonts that suit
1047   your taste.
1048
1049   If you want to specify another font for roster labels use the
1050   following option:
1051
1052       option add *Roster*font \
1053              "-misc-fixed-medium-r-normal-*-12-*-*-*-*-*-iso10646-1" \
1054              userDefault
1055
1056   When picking fonts, observe these rules:
1057
1058   o  Under X, encoding (charset) of fonts must match that of your
1059      locale.
1060
1061
1062
1063
1064Shchepin, et al.        Expires September 2, 2015              [Page 19]
1065
1066                              Tkabber 1.1.2                   March 2015
1067
1068
1069   o  Ensure that the specified font exists, since if it's not, _Tk_
1070      will try hard to pick the most suitable one which often yields not
1071      what you want.  (The best bet is to first pick the font using some
1072      tool like "xfontsel".)
1073
1074   Note that when specifying settings using the _Tkabber_'s
1075   configuration files (i.e. not using _XRDB_ directly) you are not
1076   forced to use "X-style" (XLFD) font descriptions and may instead
1077   specify fonts using sometimes more convenient _Tk_ features described
1078   in Tk font manual page [32].
1079
10805.1.3.  Cryptography by default
1081
1082   Next, you may want to _Tkabber_ to use cryptography by default.
1083   There are two options:
1084
1085   o  whether the traffic you send should be digitally-signed; and,
1086
1087   o  if you have cryptographic information for someone, should the
1088      default action be to encipher your traffic for them.
1089
1090   (By defining these options early on, _Tkabber_ will complain
1091   immediately if it isn't able to load its cryptographic module;
1092   otherwise, the default behavior is to proceed without any
1093   cryptographic buttons, menus, and so on.)
1094
10955.1.4.  Debugging Output
1096
1097   _Tkabber_ has a lot of debugging output.  By default, it gets printed
1098   to the standard output by a Tcl procedure called "debugmsg".
1099   However, only information about those modules listed in a variable
1100   called "debug_lvls" will be printed.
1101
1102   If you know how to program Tcl, then this will seem rather obvious:
1103
1104   set debug_lvls [list message presence ssj warning]
1105
1106   # if you want a different behavior,
1107   #     define your own...
1108
1109   proc debugmsg {module msg} {
1110   #    ...
1111   }
1112
1113
1114
1115
1116
1117
1118
1119
1120Shchepin, et al.        Expires September 2, 2015              [Page 20]
1121
1122                              Tkabber 1.1.2                   March 2015
1123
1124
1125   Most users won't care about "debugmsg" because they're running
1126   _Tkabber_ under an application launcher so the standard output is
1127   never seen.  However, if this isn't the case for you, and you just
1128   don't want to see any of this stuff, put this one line in your
1129   configuration file:
1130
1131   set debug_lvls {}
1132
11335.1.5.  Splash window
1134
1135   By default, when _Tkabber_ startup, it show loading process in splash
1136   window.  To disable this feature, put this in your configuration
1137   file:
1138
1139   set show_splash_window 0
1140
11415.1.6.  I18n/L10n
1142
1143   _Tkabber_ can show all messages in user's native language.  This is
1144   done by using Tcl's built-in _msgcat_ package which looks for a
1145   directory called "msgs/" wherever you installed _Tkabber_, and then
1146   uses the "LC_MESSAGES" environment variable (or "LANG" if
1147   "LC_MESSAGES" not set) to select the appropriate file.  If you wish,
1148   you can force use of a particular language by putting a line like
1149   this in your configuration file:
1150
1151   ::msgcat::mclocale en
1152
11535.1.7.  Browse URL
1154
1155   _Tkabber_ executes a browser when you click on a URL in chat windows,
1156   or in user info window, or in headlines window etc.  It uses some
1157   heuristics to find which browsers are installed in the system and
1158   invokes the first browser it finds.
1159
1160   If _Tkabber_'s decision on which browser to use is suboptimal to you,
1161   or if you want to add some options to the browser command line (open
1162   URL in a new tab, or in a new window etc.) you may set the varable
1163   "webbrowser" like the following:
1164
1165   set webbrowser "firefox -new-tab %s"
1166
1167   Note, that the "%s" in the string (it doesn't have to be at the end)
1168   will be replaced by an actual URL when the command will be run.
1169   Also, if your favorite browser's path contains spaces, enclose it in
1170   braces.
1171
1172   The following figures shows some examples of setting this variable
1173
1174
1175
1176Shchepin, et al.        Expires September 2, 2015              [Page 21]
1177
1178                              Tkabber 1.1.2                   March 2015
1179
1180
1181   for Windows:
1182
1183   set webbrowser "{C:/Program Files/Opera/opera.exe} %s"
1184
1185   set webbrowser \
1186       "{C:/Program Files/Mozilla Firefox/firefox.exe} -new-window %s"
1187
1188   set webbrowser "{C:/Program Files/Internet Explorer/iexplore.exe} %s"
1189
1190   for Unix:
1191
1192   set webbrowser "iceweasel -new-tab %s"
1193
1194   set webbrowser "chromium-browser %s"
1195
11965.1.8.  Searching
1197
1198   _Tkabber_ allows the user to perform textual searching in certain
1199   classes of its windows.  This searching is controlled by several
1200   settings which can be specified in this section.
1201
1202   These settings are described in detail in Section 7.1.
1203
12045.2.  Post-load
1205
1206   After _Tkabber_ reads your configuration file, it loads all of its
1207   own modules, it then invokes a procedure called "postload".  This
1208   procedure is supposed to perform module-specific configuration.
1209
1210   The default version of this procedure doesn't do anything.  If you
1211   want to configure one more module modules, then you need to define
1212   the procedure in your configuration file, e.g.,
1213
1214 proc postload {} {
1215 # look-and-feel
1216
1217     set pixmaps::options(pixmaps_theme) Default
1218
1219     global alert colors alert_lvls
1220
1221     set alert_lvls(error)        1
1222     set alert_lvls(server)       1
1223     set alert_lvls(message)      2
1224     set alert_lvls(mesg_to_user) 3
1225     set alert_colors             {Black DarkBlue Blue Red}
1226
1227     set ifacetk::options(raise_new_tab) 1
1228
1229
1230
1231
1232Shchepin, et al.        Expires September 2, 2015              [Page 22]
1233
1234                              Tkabber 1.1.2                   March 2015
1235
1236
1237 # tray icon
1238
1239     set ::plugins::tktray::options(enable) 1
1240
1241 # the autoaway module
1242
1243     set plugins::autoaway::options(awaytime)  5
1244     set plugins::autoaway::options(xatime)   15
1245     set plugins::autoaway::options(status) \
1246         "Automatically away due to idle"
1247     set plugins::autoaway::options(drop_priority) 1
1248
1249
1250 # the avatar module
1251
1252     set avatar::options(announce) 0
1253     set avatar::options(share)    0
1254
1255
1256 # the chat module
1257
1258     set chat::options(stop_scroll)          0
1259     set plugins::options(timestamp_format)  {[%R]}
1260
1261
1262 # the clientinfo module
1263
1264     set plugins::clientinfo::options(autoask) 0
1265
1266
1267 # the conferenceinfo module
1268
1269     set plugins::conferenceinfo::options(autoask)        0
1270     set plugins::conferenceinfo::options(interval)       1
1271     set plugins::conferenceinfo::options(err_interval)  60
1272
1273
1274 # the cryptographic module
1275
1276     set ssj::options(encrypt,fred@example.com) 1
1277
1278
1279 # the emoticon module
1280
1281     set plugins::emoticons::options(theme) \
1282                 $::configdir/emoticons/rythmbox
1283
1284
1285
1286
1287
1288Shchepin, et al.        Expires September 2, 2015              [Page 23]
1289
1290                              Tkabber 1.1.2                   March 2015
1291
1292
1293 # the file transfer module
1294
1295     set ft::options(download_dir) "/tmp"
1296
1297
1298 # the groupchat module
1299
1300     global gra_group gra_server
1301     global gr_nick gr_group gr_server
1302     global defaultnick
1303
1304     set defaultnick(adhoc@conference.example.com) publius
1305     set defaultnick(*@conference.example.com) cicerone
1306
1307
1308 # the ispell module
1309
1310     set plugins::ispell::options(enable)              1
1311     set plugins::ispell::options(executable)          /usr/bin/ispell
1312     set plugins::ispell::options(command_line)        -C -d russian
1313     set plugins::ispell::options(dictionary_encoding) koi8-r
1314     set plugins::ispell::options(check_every_symbol)  1
1315
1316 # the stream initiation module
1317
1318     set si::transport(allowed,http://jabber.org/protocol/bytestreams) 0
1319     set si::transport(allowed,http://jabber.org/protocol/ibb) 1
1320
1321
1322 # the logger module
1323
1324     set logger::options(logdir)        [file join $::configdir logs]
1325     set logger::options(log_chat)      1
1326     set logger::options(log_groupchat) 1
1327
1328 # the proxy module
1329
1330     global proxy1 proxy2 proxy3 proxyconf1 proxyconf2 proxyconf
1331
1332     set proxy1(type)     https
1333     set proxy1(host)     proxy.example.com
1334     set proxy1(port)     3128
1335     set proxy1(username) ""
1336     set proxy1(password) ""
1337     set proxy1(match)    *
1338     set proxy1(exclude)  "localhost* 127.0.0.* 172.* 192.168.* 10.*"
1339
1340     set proxy2(type)     http
1341
1342
1343
1344Shchepin, et al.        Expires September 2, 2015              [Page 24]
1345
1346                              Tkabber 1.1.2                   March 2015
1347
1348
1349     set proxy2(host)     proxy.example.com
1350     set proxy2(port)     3128
1351     set proxy2(username) ""
1352     set proxy2(password) ""
1353     set proxy2(match)    *
1354     set proxy2(exclude)  "localhost* 127.0.0.* 172.* 192.168.* 10.*"
1355
1356     set proxy3(type)     socks5
1357     set proxy3(host)     proxy.example.com
1358     set proxy3(port)     1080
1359     set proxy3(username) ""
1360     set proxy3(password) ""
1361     set proxy3(match)    *
1362     set proxy3(exclude)  "localhost* 127.0.0.* 172.* 192.168.* 10.*"
1363
1364     set proxyconf1(profile) Home
1365     set proxyconf1(tunnel)  {}
1366     set proxyconf1(http)    {}
1367
1368     set proxyconf2(profile) Work
1369     set proxyconf2(tunnel)  {proxy1 proxy3}
1370     set proxyconf2(http)    {proxy2}
1371
1372     array set proxyconf [array get proxyconf2]
1373
1374 # the login module
1375
1376     global loginconf loginconf1 loginconf2 autologin
1377
1378     set loginconf(user)           ""
1379     set loginconf(password)       ""
1380     set loginconf(server)         example.com
1381     set loginconf(resource)       tkabber
1382     set loginconf(priority)       16
1383     set loginconf(usealtserver)   0
1384     set loginconf(altserver)      ""
1385     set loginconf(altport)        5422
1386     set loginconf(stream_options) plaintext
1387     set loginconf(usesasl)        1
1388     set loginconf(allowauthplain) 0
1389
1390     # The following variables are useful when your jabber-server
1391     # (example.com) does not have SRV or A-record in DNS
1392     set loginconf(usealtserver)  1
1393     set loginconf(altserver)     "jabber.example.com"
1394
1395     set loginconf1(profile)      "Default Account"
1396     set loginconf1(user)         mrose
1397
1398
1399
1400Shchepin, et al.        Expires September 2, 2015              [Page 25]
1401
1402                              Tkabber 1.1.2                   March 2015
1403
1404
1405     set loginconf2(profile)      "Test Account"
1406     set loginconf2(user)         test
1407
1408     array set loginconf          [array get loginconf1]
1409
1410     set autologin 0
1411
1412
1413 # the message module
1414
1415     set message::options(headlines,cache)    1
1416     set message::options(headlines,multiple) 1
1417
1418
1419 # the raw xml input module
1420
1421     set plugins::rawxml::set options(pretty_print) 0
1422     set plugins::rawxml::set options(indent)       2
1423
1424
1425 # the roster module
1426
1427     set roster::show_only_online            1
1428     set roster::roster(collapsed,RSS)       1
1429     set roster::roster(collapsed,Undefined) 1
1430
1431     set roster::aliases(friend@some.host) \
1432         {friend@other.host friend@another.host}
1433     set roster::use_aliases                 1
1434
1435
1436 # the sound module
1437
1438     set sound::options(mute)                   0
1439     set sound::options(mute_if_focus)          0
1440     set sound::options(notify_online)          0
1441     set sound::options(mute_groupchat_delayed) 1
1442     set sound::options(mute_chat_delayed)      0
1443     set sound::options(external_play_program) /usr/bin/aplay
1444     set sound::options(external_play_program_options) -q
1445     set sound::options(delay)
1446
1447     set sound::options(connected_sound)                     ""
1448     set sound::options(presence_available_sound)            ""
1449     set sound::options(presence_unavailable_sound)          ""
1450     set sound::options(groupchat_server_message_sound)      ""
1451     set sound::options(groupchat_their_message_to_me_sound) ""
1452 }
1453
1454
1455
1456Shchepin, et al.        Expires September 2, 2015              [Page 26]
1457
1458                              Tkabber 1.1.2                   March 2015
1459
1460
1461   This isn't nearly as complicated as it seems.  Let's break it down by
1462   individual module
1463
14645.2.1.  Look-and-Feel
1465
1466   _Tkabber_ is shameless in borrowing icons from other Jabber clients.
1467   By setting "pixmaps::options(pixmaps_theme)", you can select a family
1468   of related icons.  Besides ""Default"", you can choose one of
1469   ""Gabber"", ""JAJC"", ""Jarl"", ""Psi"", ""ICQ"", or a few other
1470   themes.
1471
1472   If you want, you can have _Tkabber_ use a different theme by putting
1473   custom theme subdirectory to "$::configdir/pixmaps/" directory (tilde
1474   means home directory). _Tkabber_ knows that it is a theme directory
1475   by looking for "icondef.xml" file in the directory.  To find out the
1476   structure of icon definition file, look through _XEP-0038_ and go to
1477   where you installed _Tkabber_ and take a look at the directory called
1478   ""pixmaps/default/"".
1479
1480   If you're using the tabbed window interface, _Tkabber_ needs a way of
1481   telling you that something has changed in a window that's not on top.
1482   This is where the an array called _alert_lvls_ and a list called
1483   _alert_colors_ come in.  The array maps an incoming message to a
1484   priority number from zero to three.  The list, which is indexed
1485   starting at _zero_, indicates what color the tab should use to let
1486   you know that something's changed.  So, the way to read the example
1487   is that receiving:
1488
1489   o  an error or server message will cause the tab of a lowered window
1490      to go dark blue;
1491
1492   o  a groupchat or headline message will cause the tab to go blue;
1493      and,
1494
1495   o  a chat message addressed directly to you will cause the tab to go
1496      red.
1497
1498   By default, whenever a new tab is created, it is automatically
1499   raised.  If you don't like this behavior, add this line:
1500
1501   set ifacetk::options(raise_new_tab) 0
1502
15035.2.2.  The system tray icon (for Unix)
1504
1505   This module is presently available only for Unix
1506
1507   To enable the system tray icon you have to install _tktray_ extension
1508   and set the config variable "plugins::tktray::options(enable)" to 1.
1509
1510
1511
1512Shchepin, et al.        Expires September 2, 2015              [Page 27]
1513
1514                              Tkabber 1.1.2                   March 2015
1515
1516
1517   If you want to control the tray icon appearance and/or position,
1518   consult the documentation for your desktop environment or window
1519   manager.  Note, that the Tkabber's tray icon has WM class
1520   _TkabberIcon_.
1521
15225.2.3.  The Autoaway Module
1523
1524   This module is presently available only if either:
1525
1526   o  on UNIX, if you have the _Tk Xwin_ extension installed; or,
1527
1528   o  On Windows, if you have the _Tcl Winidle_ extension installed.
1529
1530   There are two variables that control when _Tkabber_ automatically
1531   marks you as away: "plugins::autoaway::options(awaytime)" and
1532   "plugins::autoaway::options(xatime)".  Both define the idle threshold
1533   in minutes (the number does not have to be integer).
1534
1535   If variable "plugins::autoaway::options(drop_priority)" is set in 1
1536   then _Tkabber_ will set priority to 0 when moving in extended away
1537   state.
1538
1539   Variable "plugins::autoaway::options(status)" allows to specify text
1540   status, which is set when _Tkabber_ is moving in away state.
1541
15425.2.4.  The Avatar Module
1543
1544   There are two variables that you can set to control whether _Tkabber_
1545   will allow others to see your avatar:
1546
1547   o  "avatar::options(announce)" determines whether your presence
1548      information indicates that you have an avatar; and,
1549
1550   o  "avatar::options(share)" determines whether requests for your
1551      avatar will be honored.
1552
15535.2.5.  The Chat Module
1554
1555   The variable named "chat::options(stop_scroll)" determines whether a
1556   chat window should automatically scroll down to the bottom whenever
1557   something new comes in.
1558
1559   You can also set format of time stamp that displayed in beginning of
1560   each chat message.  Refer to _Tcl_ documentation for description of
1561   format.  E.g., to display it in ""dd:mm:ss"" format, add this line:
1562
1563   set plugins::options(timestamp_format) {[%T]}
1564
1565
1566
1567
1568Shchepin, et al.        Expires September 2, 2015              [Page 28]
1569
1570                              Tkabber 1.1.2                   March 2015
1571
1572
15735.2.6.  The Clientinfo Module
1574
1575   This module shows in popup balloons information of used by this user
1576   client name, version, and OS.  You can allow or deny automatic asking
1577   of this info from users by setting this variable to 1 or 0:
1578
1579   set plugins::clientinfo::options(autoask) 1
1580
15815.2.7.  The Conferenceinfo Module
1582
1583   After you join a conference that's listed in your roster, then
1584   whenever you mouse over that roster entry, you'll see a popup listing
1585   the conference's participants.  If you want to see this popup,
1586   regardless of whether you are currently joined with the conference,
1587   add this line to your post-load:
1588
1589   set plugins::conferenceinfo::options(autoask) 1
1590
1591   You can also set interval between these requests with these two
1592   variables:
1593
1594   set plugins::conferenceinfo::options(interval)       1
1595   set plugins::conferenceinfo::options(err_interval)  60
1596
1597   The second variable defines how many minutes to wait after receiving
1598   an error reply before trying again.  (Usually an error reply
1599   indicates that the server hosting the conference doesn't support
1600   browsing, so it makes sense not to try that often.
1601
16025.2.8.  The Cryptographic Module
1603
1604   Earlier (Section 5.1) we saw an example where the "ssj::options"
1605   array from the cryptographic module was set during the preload.
1606
1607   In addition to "signed-traffic" and "encrypt-traffic", you can also
1608   tell _Tkabber_ whether to encrypt for a particular JID, e.g.,
1609
1610       set ssj::options(encrypt,fred@example.com) 1
1611
16125.2.9.  The Emoticons Module
1613
1614   The procedure called _plugins::emoticons::load_dir_ is used to load
1615   emoticon definitions from a directory.  The directory contains a file
1616   called ""icondef.xml"", which defines the mapping between each image
1617   and its textual emoticon (To find out what this file looks like, go
1618   to where you installed _Tkabber_ and take a look at the file called
1619   ""emoticons/default/icondef.xml"" or read XEP-0038 [33].)
1620
1621
1622
1623
1624Shchepin, et al.        Expires September 2, 2015              [Page 29]
1625
1626                              Tkabber 1.1.2                   March 2015
1627
1628
1629   If you have just a few icons, and you don't want to create a
1630   directory and a textual mapping, you can use the procedure called
1631   "plugins::emoticons::add", e.g.,
1632
1633       plugins::emoticons::add ":beer:" \
1634           [image create photo -file $::configdir/emoticons/beer.gif]
1635
1636   If you want to disable all emoticons, you can simply load empty
1637   directory.  Put in postload function
1638
1639       plugins::emoticons::load_dir ""
1640
16415.2.10.  The File Transfer Module
1642
1643   You can set directory in which files will be saved by default:
1644
1645       set ft::options(download_dir) "/tmp"
1646
16475.2.11.  The Groupchat Module
1648
1649   There are several variables that set the dialog window defaults for
1650   adding a groupchat to your roster, or joining a groupchat:
1651
1652   add to roster dialog window:  "gra_group" and "gra_server" specify
1653      the default room and conference server, repectively; and,
1654
1655   join dialog window:  "gr_nick", "gr_group" and "gr_server" specify
1656      the default nickname, room, and conference server, respectively.
1657
1658   Note that variables "gra_server", "gr_nick" and "gr_server" overriden
1659   in login procedure, so better place for changing them is in
1660   "connected_hook" (see below).
1661
1662   You may want to have different nicknames for different groupchats.
1663   Accordingly, the array called _defaultnick_ is used to set the
1664   default nickname for when you enter a conference.  The array is
1665   indexed by the JID of the room, e.g.,
1666
1667       set defaultnick(adhoc@conference.example.com) publius
1668
1669   Another possibility is to put pattern in parentheses.  The following
1670   example shows how to specify default nickname for all conferences at
1671   _conference.example.com_:
1672
1673       set defaultnick(*@conference.example.com) ciceroni
1674
1675   Exact JID's take the higher precedence than patterns.
1676
1677
1678
1679
1680Shchepin, et al.        Expires September 2, 2015              [Page 30]
1681
1682                              Tkabber 1.1.2                   March 2015
1683
1684
16855.2.12.  The Ispell Module
1686
1687   On Unix, _Tkabber_ can check spelling of what you entered by calling
1688   an external program _ispell_.  To enable this feature, add following
1689   lines to postload function:
1690
1691   set plugins::ispell::options(enable) 1
1692
1693   If you enabled this module, then you can also define:
1694
1695   o  the path to the _ispell_ executable by setting
1696      "plugins::ispell::options(executable)"
1697
1698   o  the _ispell_ command line options by setting
1699      "plugins::ispell::options(command_line)"; and,
1700
1701   o  the encoding of the output by setting
1702      "plugins::ispell::options(dictionary_encoding)".
1703
1704   If you don't care about putting a large load on your process, then
1705   you can also set "plugins::ispell::options(check_every_symbol)" to 1
1706   to check correctness of current word after every entered symbol.
1707   (Usually you don't need to set this option.)
1708
17095.2.13.  The Stream Initiation Module
1710
1711   Stream initiation profile is defined in _XEP-0095_ with two
1712   transports (_XEP-0047_ - IBB, _XEP-0065_ - SOCKS5 bytestreams).  With
1713   it you can specify what transports you can use, and via negotiation
1714   choose more appropriate one.  _Tkabber_ comes with two transport
1715   implementations:
1716
1717   bytestreams:  that allows you to connect to any node that supports
1718      "bytestreams" transport (mediated connection is not supported
1719      yet);
1720
1721   ibb:  that uses your "Jabber" connection to transmit the data (which
1722      may slowdown other traffic to you).
1723
1724   If your machine is behind a NAT, then you can't use the "bytestreams"
1725   transport, so you should disable it:
1726
1727     set si::transport(allowed,http://jabber.org/protocol/bytestreams) 0
1728
1729
1730
1731
1732
1733
1734
1735
1736Shchepin, et al.        Expires September 2, 2015              [Page 31]
1737
1738                              Tkabber 1.1.2                   March 2015
1739
1740
17415.2.14.  The Logger Module
1742
1743   You can set directory to store logs:
1744
1745       set logger::options(logdir) [file join $::configdir logs]
1746
1747   Also you can allow or disallow storing of private and group chats
1748   logs:
1749
1750       set logger::options(log_chat)      1
1751       set logger::options(log_groupchat) 1
1752
17535.2.15.  The Proxy Module
1754
1755   Starting from version 1.0 _Tkabber_ does not keep proxy settings in
1756   the "loginconf" array.  It uses proxy profiles defined in separate
1757   arrays.
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792Shchepin, et al.        Expires September 2, 2015              [Page 32]
1793
1794                              Tkabber 1.1.2                   March 2015
1795
1796
1797   First, you may want to specify a set of proxy servers.  You can have
1798   multiple proxy servers defined in the config file (to use in
1799   different environments, or if in your company different proxies are
1800   used to connect to different hosts).  To do so, define global arrays
1801   (their names could be arbitrary, but "proxy<number>" looks natural):
1802
1803       set proxy1(type)     https
1804       set proxy1(host)     proxy.example.com
1805       set proxy1(port)     3128
1806       set proxy1(username) ""
1807       set proxy1(password) ""
1808       set proxy1(match)    *
1809       set proxy1(exclude)  "localhost* 127.0.0.* 172.* 192.168.* 10.*"
1810
1811       set proxy2(type)     http
1812       set proxy2(host)     proxy.example.com
1813       set proxy2(port)     3128
1814       set proxy2(username) ""
1815       set proxy2(password) ""
1816       set proxy2(match)    *
1817       set proxy2(exclude)  "localhost* 127.0.0.* 172.* 192.168.* 10.*"
1818
1819       set proxy3(type)     socks5
1820       set proxy3(host)     proxy.example.com
1821       set proxy3(port)     1080
1822       set proxy3(username) ""
1823       set proxy3(password) ""
1824       set proxy3(match)    *
1825       set proxy3(exclude)  "localhost* 127.0.0.* 172.* 192.168.* 10.*"
1826
1827   Field "type" is one of the following: _"socks4"_, _"socks5"_,
1828   _"https"_, _"http"_. The firat three types are tunnelling proxies.
1829   If you enable them, _Tkabber_ will use them to tunnel its TCP
1830   connections (in case of _"https"_ this means using _CONNECT_ method
1831   for HTTP proxy).  The other one is used when _Tkabber_ needs to fetch
1832   some data via _GET_ or _POST_ method of the HTTP protocol (e.g., when
1833   utilizing BOSH or HTTP-poll connection).
1834
1835   Fields "host", "port", "username" and "password" are selfexplanatory.
1836
1837   There are two fields which need some explanation: "match" and
1838   "exclude".  When Tkabber needs to connect to a certain _host_ or to
1839   get an HTTP document it searches proxies in order they appear in the
1840   corresponding proxyconf list (see below) and uses the first proxy for
1841   which the _host_ matches one of the patterns from the "match" field
1842   but doesn't match any of the patterns from the "exclude" field.  The
1843   matching uses patterns convention from the "string match" _Tcl_
1844   command.
1845
1846
1847
1848Shchepin, et al.        Expires September 2, 2015              [Page 33]
1849
1850                              Tkabber 1.1.2                   March 2015
1851
1852
1853   Second, you may want to define proxy profiles, and switch between
1854   them when the environment changes (it's useful for portable
1855   computers).  To do so, you may define global arrays named
1856   "proxyconf<number>" where numbers must start from 1 and be
1857   consecutive, otherwise _Tkabber_ GUI wouldn't be able to switch to
1858   them:
1859
1860       set proxyconf1(profile) Home
1861       set proxyconf1(tunnel)  {}
1862       set proxyconf1(http)    {}
1863
1864       set proxyconf2(profile) Work
1865       set proxyconf2(tunnel)  {proxy1 proxy3}
1866       set proxyconf2(http)    {proxy2}
1867
1868       array set proxyconf [array get proxyconf2]
1869
1870   Here, two proxy profiles are defined.  The first one instructs
1871   _Tkabber_ not to use any proxies and directly connect to any host.
1872   The second one defines two tunnel proxies and one HTTP proxy.  Note
1873   that HTTPS and HTTP proxy are the same, but they should appear in
1874   both "tunnel" and "http" fields anyway.  The last line chooses the
1875   default proxy profile, which is _Work_ in the example above.
1876
1877   Also, you can edit proxy settings using _Tkabber_ GUI under
1878   _Tkabber->Manage proxy servers_ menu item.
1879
18805.2.16.  The Login Module
1881
1882   The first task is to initialize the configuration defaults for the
1883   _login_ module.  As you can see above, the global array "loginconf"
1884   has a whole bunch of elements, e.g., "user", "password", and so on.
1885
1886   Elements "loginconf(user)" and "loginconf(password)"specify username
1887   and password to authenticate at your _Jabber_ server.
1888
1889   Element "loginconf(server)" must be set to _Jabber_ server name (the
1890   part of you _JID_ after "@".
1891
1892   Element "loginconf(stream_options)" is set to one of the following
1893   values:
1894
1895   o  plaintext -- use plaintext connection;
1896
1897   o  encrypted -- use encrypted (via STARTTLS mechanism) connection
1898      (this option requires tls extension to be installed);
1899
1900
1901
1902
1903
1904Shchepin, et al.        Expires September 2, 2015              [Page 34]
1905
1906                              Tkabber 1.1.2                   March 2015
1907
1908
1909   o  ssl -- use encrypted (via legacy SSL mechanism) connection (this
1910      option requires tls extension to be installed);
1911
1912   o  compressed -- use compressed connection (this option requires Ztcl
1913      extension to be installed).
1914
1915   _Tkabber_ tries to resolve _Jabber_ server name using _SRV_ first and
1916   usual _A_ records in _DNS_.  If the resolution fails (for example if
1917   you are in LAN environment without _DNS_) you can force _Tkabber_ to
1918   connect to the server using "loginconf(altserver)" and
1919   "loginconf(altport)" options (do not forget to set
1920   "loginconf(usealtserver)" to "1").
1921
1922   Another option is to use _BOSH_ (XEP-0124 and XEP-0206) connect
1923   method (if your server supports it) and tunnel _XMPP_ traffic through
1924   _HTTP_.  To enable _BOSH_ set "loginconf(usebosh)" to "1". _Tkabber_
1925   then tries to find connect _URL_ using _TXT_ record in _DNS_ (see
1926   XEP-0156).  You can specify _URL_ manually by setting
1927   "loginconf(boshurl)".
1928
1929   And another option is to use _HTTP_-polling connect method (if your
1930   server supports it) and tunnel _XMPP_ traffic through _HTTP_.  To
1931   enable _HTTP_-polling set "loginconf(usehttppoll)" to "1". _Tkabber_
1932   then tries to find connect _URL_ using _TXT_ record in _DNS_ (see
1933   XEP-0156).  You can specify _URL_ manually by setting
1934   "loginconf(pollurl)".
1935
1936   This collection of elements, which is termed a login profile, is what
1937   populates the dialog window you'll see when _Tkabber_ wants to
1938   connect to the server.
1939
1940   It turns out that _Tkabber_ lets you have as many different login
1941   profiles as you want.  If you want more than just one, they're named
1942   "loginconf1", "loginconf2", and so on.
1943
1944   What the example above shows is the default values for all profiles
1945   being set in "loginconf", and then two profiles, one called ""Default
1946   Account"" and the other called ""Test Account"" being created.
1947
1948   If you want to automatically login to server, then you can set the
1949   "autologin" variable to "1".
1950
1951   If you set the "autologin" variable to "-1", then _Tkabber_ will not
1952   automatically login and will not show login dialog.
1953
1954   Default value for "autologin" is "0".  In this case _Tkabber_ shows
1955   login dialog.
1956
1957
1958
1959
1960Shchepin, et al.        Expires September 2, 2015              [Page 35]
1961
1962                              Tkabber 1.1.2                   March 2015
1963
1964
19655.2.17.  The Message Module
1966
1967   By default, when you restart _Tkabber_ it won't remember the
1968   headlines you received.  If you want _Tkabber_ to remember headlines
1969   whenever you run it, set "message::options(headlines,cache)" to "1".
1970
1971   By default, _Tkabber_ will put all headline messages into a single
1972   window.  If you want _Tkabber_ to use a seperate window for each
1973   headline source, set "message::options(headlines,multiple)" to "1".
1974
19755.2.18.  The Raw XML Input Module
1976
1977   With this module you can monitor incoming/outgoing traffic from
1978   connection to server and send custom XML stanzas.  Also you can
1979   switch on "pretty print" option to see incoming and outgoing XML
1980   stanzas pretty printed.  Note, that with this option they may be
1981   drawed incorrectly, e.g. for XHTML tags.  Also you can set
1982   indentation level via "indent" option.
1983
19845.2.19.  The Roster Module
1985
1986   By default, your entire roster is shown, even those items that aren't
1987   online.  The variable called "roster::show_only_online" controls
1988   this.
1989
1990   Similarly by default, each item in every category is shown in the
1991   roster.  If you want to hide the items in a given category, the array
1992   called "roster::roster" lets you do this.  In the example, we see
1993   that two groups (""RSS"" and ""Undefined"") start with their items
1994   hidden.
1995
1996   Some peoples use several JIDs.  _Tkabber_ lets you specify an alias
1997   for people like these, so it will show only one entry in the roster.
1998   In the example, we see that user "friend@some.host" have aliases
1999   "friend@other.host" and "friend@another.host".  You can also disable
2000   all aliases by setting "roster::use_aliases" to "0".
2001
20025.2.20.  The Sound Module
2003
2004   _Tkabber_ can play sounds on some events.  It can use for this
2005   _snack_ library or external program that can play _WAV_ files.  Sound
2006   notifications is enabled when _Tkabber_ starts.
2007
2008   If you want to start _Tkabber_ with sound muted add the following
2009   line:
2010
2011   set sound::options(mute) 1
2012
2013
2014
2015
2016Shchepin, et al.        Expires September 2, 2015              [Page 36]
2017
2018                              Tkabber 1.1.2                   March 2015
2019
2020
2021   If you want _Tkabber_ to stop notifying you when you are not online
2022   (in away or dnd state) add the following line:
2023
2024   set sound::options(notify_online) 1
2025
2026   If you want _Tkabber_ to mute sound when it is focued (and you are
2027   paying enough attention to it) add the following line:
2028
2029   set sound::options(mute_if_focus) 1
2030
2031   You can also mute sounds of delayed groupchat messages and delayed
2032   personal chat messages:
2033
2034   set sound::options(mute_groupchat_delayed) 1
2035   set sound::options(mute_chat_delayed)      0
2036
2037   If you want to use external program for playing sounds and possibly
2038   this program's options, then also add something like this (these
2039   options are suitable for Linux users with ALSA installed):
2040
2041   set sound::options(external_play_program) /usr/bin/aplay
2042   set sound::options(external_play_program_options) -q
2043
2044   You can also set minimal interval (in milliseconds) between playing
2045   different sounds.
2046
2047   set sound::options(delay) 200
2048
2049   _Tkabber_ allows you to specify the filename it will play notifying
2050   about some more or less important events.  These are:
2051
2052   o  "sound::options(connected_sound)" -- sound playing when _Tkabber_
2053      is connected to the server;
2054
2055   o  "sound::options(presence_available_sound)" -- sound playing when
2056      available presence is coming;
2057
2058   o  "sound::options(presence_unavailable_sound)" -- sound playing when
2059      unavailable presence is coming;
2060
2061   o  "sound::options(chat_my_message_sound)" -- sound playing when you
2062      send one-to-one chat message;
2063
2064   o  "sound::options(chat_their_message_sound)" -- sound playing when
2065      you receive one-to-one chat message;
2066
2067   o  "sound::options(groupchat_server_message_sound)" -- sound playing
2068      when you receive groupchat message from server;
2069
2070
2071
2072Shchepin, et al.        Expires September 2, 2015              [Page 37]
2073
2074                              Tkabber 1.1.2                   March 2015
2075
2076
2077   o  "sound::options(groupchat_my_message_sound)" -- sound playing when
2078      you receive groupchat message from server;
2079
2080   o  "sound::options(groupchat_their_message_sound)" -- sound playing
2081      when you receive groupchat message from another user;
2082
2083   o  "sound::options(groupchat_their_message_to_me_sound)" -- sound
2084      playing when you receive highlighted (usually personally
2085      addressed) groupchat message from another user.
2086
2087   If you want to disable sound notification for some of the events,
2088   then you can add line like this:
2089
2090   set sound::options(connected_sound)                     ""
2091   set sound::options(presence_available_sound)            ""
2092   set sound::options(presence_unavailable_sound)          ""
2093   set sound::options(groupchat_server_message_sound)      ""
2094   set sound::options(groupchat_their_message_to_me_sound) ""
2095
20965.3.  Menu-load
2097
2098   After _Tkabber_ invokes your "postload" procedure, it starts building
2099   the GUI.  One of the most important things it does is build up a list
2100   that specifies its menu bar.  It then invokes a procedure called
2101   "menuload", which is allowed to modify that specification before
2102   _Tkabber_ uses it.
2103
2104   The default version of this procedure is the identity function,
2105   i.e..,
2106
2107   proc menuload {description} { return $description }
2108
2109   If you _really_ want to change the menubar specification, then here's
2110   how to get started:
2111
2112   1.  Go to where you installed the _BWidget_ library and take a look
2113       at the file called ""BWman/MainFrame.html"".  The documentation
2114       for the ""-menu"" option explains the syntax of the
2115       specification.
2116
2117   2.  Go to where you installed _Tkabber_ and take a look at the file
2118       called ""iface.tcl"".  Look for the line that starts with ""set
2119       descmenu"".  This will show you the specification given to your
2120       "menuload" procedure.
2121
2122   3.  Go to where you installed _Tkabber_ and take a look at the file
2123       called ""examples/mtr-config.tcl"".  Look at the "menuload"
2124
2125
2126
2127
2128Shchepin, et al.        Expires September 2, 2015              [Page 38]
2129
2130                              Tkabber 1.1.2                   March 2015
2131
2132
2133       procedure defined there.  It lays out _Tkabber's_ menu bar
2134       similar to _Gabber's_.
2135
2136   4.  Finally, study the procedures listed here.
2137
21385.3.1.  The Avatar Module
2139
2140   The procedure called "avatar::store_on_server" stores your avatar on
2141   the server.
2142
21435.3.2.  The Browser Module
2144
2145   The procedure called "browser::open" opens a new browser window.
2146
21475.3.3.  The Groupchat Module
2148
2149   The procedure called "add_group_dialog" displays a dialog window when
2150   you want to add a groupchat to your roster.  Similarly, the procedure
2151   called "join_group_dialog" displays a dialog window when you want to
2152   join a groupchat.
2153
21545.3.4.  The Login Module
2155
2156   The procedure called "show_login_dialog" displays a dialog window
2157   when you want to login to the server.  (Prior to attempting to login,
2158   if necessary it will logout).  Naturally, the procedure called
2159   "logout" does just that; however, if you want get a dialog window for
2160   confirmation, use "show_logout_dialog" instead.
2161
21625.3.5.  The Message Module
2163
2164   If you want to send a message to someone, the procedure called
2165   "message::send_dialog" will put up a dialog window.  It takes upto
2166   three optional arguments: the recipient JID, the subject, and the
2167   thread.
2168
2169   If you want to get added to someone's roster, the procedure called
2170   "message::send_subscribe_dialog" will put up a dialog window.  It
2171   takes one optional argument: the recipient JID.
2172
2173   If you want to adjust your message filters, the procecure called
2174   "filters::open" will put up a dialog window.
2175
21765.3.6.  The Presence Module
2177
2178   If you want to display information about a user, the procecure called
2179   "userinfo::open" will put up a dialog window.  It takes two optional
2180
2181
2182
2183
2184Shchepin, et al.        Expires September 2, 2015              [Page 39]
2185
2186                              Tkabber 1.1.2                   March 2015
2187
2188
2189   arguments: the user's JID; and, whether or not the dialog window
2190   should be editable.
2191
2192   Obviously, the second argument makes sense only if it's your own
2193   information, i.e.,
2194
2195       global loginconf
2196
2197       userinfo::open \
2198           ${loginconf(user)}@$loginconf(server)/$loginconf(resource) 1
2199
2200   There are also two variables that you can use to set your own
2201   presence: "userstatus" and "textstatus".  The first variable takes
2202   one of five values:
2203
2204   o  available;
2205
2206   o  chat;
2207
2208   o  away;
2209
2210   o  xa;
2211
2212   o  dnd; or,
2213
2214   o  invisible.
2215
2216   The second variable takes any textual value.
2217
2218   Changes to your presence information are propagated only when
2219   "userstatus" is changed.  Accordingly, if you make a change to
2220   "textstatus", be sure to write "userstatus" immediately afterwards,
2221   even if it's a no-op, e.g.,
2222
2223       global userstatus textstatus
2224
2225       set textstatus "Out to lunch"
2226       set userstatus $userstatus
2227
22285.3.7.  Miscellany
2229
2230   Finally, you can use the procedure named "help_window" to display
2231   some textual help.  This procedure takes two arguments: the title for
2232   the window; and, the text to display.
2233
2234   Also, instead of calling "exit" to terminate _Tkabber_, please use
2235   the "quit" procedure instead.
2236
2237
2238
2239
2240Shchepin, et al.        Expires September 2, 2015              [Page 40]
2241
2242                              Tkabber 1.1.2                   March 2015
2243
2244
22455.4.  Final-Load
2246
2247   Finally, right before _Tkabber_ goes to display the login dialog, it
2248   invokes a procedure called "finload", which does whatever you want it
2249   to.
2250
22516.  Extensibility
2252
2253   In addition to various configuration mechanisms, _Tkabber_ lets you
2254   define procedures, termed "hooks" that get run when certain events
2255   happen.
2256
2257   Here's an example.  When _Tkabber_ receives a chat message, how does
2258   it know what to process and what to draw?  The short answer is that
2259   it doesn't need to know anything, all it does is:
2260
2261   hook::run draw_message_hook $chatid $from $type $body $extras
2262
2263   The "hook::run" procedure invokes whatever hooks have been defined
2264   for "draw_message_hook".  In fact, more than ten procedures may get
2265   invoked to satisfy this hook!
2266
2267   Here's how it works: _Tkabber_ comes with a number of plugins, which
2268   get loaded automatically.  Each plugin makes one or more calls that
2269   look like this:
2270
2271   hook::add draw_message_hook [namespace current]::my_draw_hook $prio
2272
2273   where the last two parameters are: the name of a procedure to run;
2274   and, a relative integer priority.
2275
2276   When "hook::run" is invoked for "draw_message_hook", each of these
2277   procedures is called, in the priority order (from smallest to
2278   largest).  If one of the procedures wants to prevent the later
2279   procedures from being called, it returns the string ""stop"".
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296Shchepin, et al.        Expires September 2, 2015              [Page 41]
2297
2298                              Tkabber 1.1.2                   March 2015
2299
2300
2301   To continue with the example, in between the pre-load and post-load
2302   stages of configuration, the following calls get made by different
2303   plugins:
2304
2305   hook::add draw_message_hook [list ...::events::process_x 0] 0
2306   hook::add draw_message_hook ...::chatstate::process_x 1
2307   hook::add draw_message_hook ...::check_draw_empty_body 4
2308   hook::add draw_message_hook ...::chat_open_window 5
2309   hook::add draw_message_hook [list ...::events::process_x 1] 6
2310   hook::add draw_message_hook ...::draw_signed 6
2311   hook::add draw_message_hook ...::draw_encrypted 7
2312   hook::add draw_message_hook ...::handle_error 10
2313   hook::add draw_message_hook ...::handle_info 10
2314   hook::add draw_message_hook ...::draw_timestamp 15
2315   hook::add draw_message_hook    ::logger::log_message 15
2316   hook::add draw_message_hook ...::set_message_timestamp 15
2317   hook::add draw_message_hook ...::add_number_of_messages_to_title 18
2318   hook::add draw_message_hook ...::chat_message_notify19
2319   hook::add draw_message_hook ...::handle_server_message 20
2320   hook::add draw_message_hook ...::roster::update_chat_activity 50
2321   hook::add draw_message_hook ...::check_nick 60
2322   hook::add draw_message_hook    ::wmdock::msg_recv 70
2323   hook::add draw_message_hook ...::handle_last_nick 79
2324   hook::add draw_message_hook ...::::add_bookmark 80
2325   hook::add draw_message_hook ...::handle_me 83
2326   hook::add draw_message_hook ...::xhtml::draw_xhtml_message 85
2327   hook::add draw_message_hook ...::draw_normal_message 87
2328
2329   Many of these procedures look at the incoming chat message and
2330   operate on only certain kinds of messages.  Some of these procedures
2331   may return ""stop"", e.g., "handle_me" which handles chat bodies that
2332   start with ""/me"" and ?draw_xhtml_message? which visualizes _XHTML_
2333   formatted messages.  (In this example, the actual namespaces were
2334   replaced with ""...:"" to make it more readable).
2335
2336   Now let's look at the different kind of hooks that _Tkabber_ knows
2337   about.
2338
23396.1.  Message Hooks
2340
2341   When _Tkabber_ receives a message stanza it calls two hooks:
2342
2343   rewrite_message_hook \
2344       xlib from id type is_subject subject body err thread priority x
2345   process_message_hook \
2346       $xlib $from $id $type $is_subject $subject $body $err $thread \
2347       $priority $x
2348
2349
2350
2351
2352Shchepin, et al.        Expires September 2, 2015              [Page 42]
2353
2354                              Tkabber 1.1.2                   March 2015
2355
2356
2357   The first hook takes eleven variable names as arguments, so the
2358   calling procedures can rewrite them.  This means that a procedure in
2359   this hook should call "upvar 2 $varbody body" and use the "body"
2360   variable to change the actual message body.  For example, this allows
2361   _Tkabber_ to put decrypted message into the "body" variable if it is
2362   encrypted.
2363
2364   The second hook does the job of showing message to the user (or doing
2365   something else with it if it's a special message like part of an in-
2366   band file transfer.
2367
2368   When you are about to send a chat or normal message to the wire, a
2369   hook is run:
2370
2371 rewrite_outgoing_message_hook xlib to id type subject body err thread x
2372
2373   The hook takes nine variable names as arguments, so the calling
2374   procedures can rewrite them.  This means that a procedure in this
2375   hook should call "upvar 2 $varbody body" and use the "body" variable
2376   to change the actual message body.  For example, this allows
2377   _Tkabber_ to encrypt message and put the encrypted message into the
2378   "body" variable to send.  This hook is introduced in _Tkabber_ 1.1,
2379   and is used by the OTR plugin, so the latter will not work in
2380   _Tkabber_ 1.0 and older.
2381
23826.2.  Chat Hooks
2383
2384   When _Tkabber_ decides that it needs to open a (tabbed) window for a
2385   chat or groupchat, two hooks are run:
2386
2387   open_chat_pre_hook  $chatid $type
2388   open_chat_post_hook $chatid $type
2389
2390   Both hooks are given two parameters: the chatid (ID of the chat or
2391   conference room window, you always can obtain JID using
2392   "chat::get_jid" and connection token using "chat::get_xlib"
2393   routines); and, and the type of chat (either ""chat"" or
2394   ""groupchat"").
2395
2396   Similarly, when _Tkabber_ encounters activity on a tabbed window, a
2397   hook is run:
2398
2399   raise_chat_tab_hook $path $chatid
2400
2401   The hook is given two parameters: the path of the _Tk_ widget for the
2402   tabbed window; and, the chatid of the chat or conference room window.
2403
2404
2405
2406
2407
2408Shchepin, et al.        Expires September 2, 2015              [Page 43]
2409
2410                              Tkabber 1.1.2                   March 2015
2411
2412
2413   When you want to send a chat message, a hook is run:
2414
2415   chat_send_message_hook $chatid $user $body $type
2416
2417   The hook is given four parameters: the chatid of the recipient; the
2418   localpart of your login identity; the body of the message; and, the
2419   type of chat.
2420
2421   draw_message_hook $chatid $from $type $body $extras
2422
2423   The hook is given five parameters: the chatid of the sender window
2424   (JID includes a resource); the JID of the sender (without the
2425   resource); the type of chat; the body of the message; and, a nested-
2426   list of additional payload elements.  (This last parameter isn't
2427   documented in this version of the documentation.)
2428
2429   Chat windows have menubuttons, and two hooks are used to add items in
2430   menu:
2431
2432   chat_create_user_menu_hook $path $xlib $jid
2433   chat_create_conference_menu_hook $path $xlib $jid
2434
2435   The first is used in user chat windows, and second in groupchat ones.
2436   Hooks are given three parameters: the path of the _Tk_ menu widget;
2437   connection token; and, the JID of user or conference.
2438
2439   In groupchat windows it is possible to complete participants' nicks
2440   or commands by pressing TAB key.  List of completions is generated by
2441   running this hook:
2442
2443   generate_completions_hook $chatid $compsvar $wordstart $line
2444
2445   The hook is given four parameters: the chatid of conference window;
2446   name of global variable, in which current list of possible
2447   completions is stored; index of position where completion must be
2448   inserted; and content of text widget where completion is requested.
2449
2450   When someone enters/exits conference, the following hooks are called:
2451
2452   chat_user_enter $group $nick
2453   chat_user_exit  $group $nick
2454
2455   The hooks are given two parameters: chatid of conference and nick of
2456   participant.
2457
2458
2459
2460
2461
2462
2463
2464Shchepin, et al.        Expires September 2, 2015              [Page 44]
2465
2466                              Tkabber 1.1.2                   March 2015
2467
2468
2469   When someone changes his/her nickname in a conference room, the
2470   following hook is called:
2471
2472   room_nickname_changed_hook $chatid $nick $new_nick
2473
2474   The hook is given three parameters: chatid of conference old nickname
2475   and the new nickname of participant.
2476
24776.3.  Login Hooks
2478
2479   Two hooks are invoked whenever a session is connected or
2480   disconnected:
2481
2482   connected_hook $xlib
2483
2484   disconnected_hook $xlib
2485
2486   Both hooks are given one parameter: connection token (_Tkabber_
2487   allows several connections at once).
2488
24896.4.  Presence Hooks
2490
2491   When our presence status changes, a hook is run:
2492
2493   change_our_presence_post_hook $status
2494
2495   The hook is given one parameter: the new presence status value, i.e.,
2496   one of:
2497
2498   o  available;
2499
2500   o  chat;
2501
2502   o  away;
2503
2504   o  xa;
2505
2506   o  dnd; or
2507
2508   o  unavailable.
2509
2510   Similarly, when someone else's presence changes, a hook is run:
2511
2512   on_change_user_presence_hook $label $status
2513
2514   The hook is given two parameters: the label associated with the JID
2515   (e.g., "fred") or the JID itself (e.g., "fred@example.com") if no
2516   label exists in the roster; and, the user's new status.
2517
2518
2519
2520Shchepin, et al.        Expires September 2, 2015              [Page 45]
2521
2522                              Tkabber 1.1.2                   March 2015
2523
2524
2525   And for all received presence packets, a hook is run:
2526
2527   client_presence_hook $xlib $from $type $x $args
2528
2529   The hook is given four parameters: connection token, who send this
2530   presence, type of presence (e.g., "error", "unavailable"), list of
2531   extended subtags and parameters of this presence (e.g., "-show xa
2532   -status online").
2533
25346.5.  Info/Query Hook
2535
2536   When an IQ stanza is received, a hook is run:
2537
2538   client_iq_hook $xlib $from $type $queries $args
2539
2540   The hook is given four compulsory parameters: connection token, who
2541   sent this query/response type of stanza (e.g., "get", "set", "result"
2542   or "error"), list of query subelements (usually it contains only one
2543   element), list of optional arguments (e.g., "-lang language -to jid
2544   -id id -x $list_of_other_attributes").
2545
25466.6.  Roster Hooks
2547
2548   When an item is added to the roster window, one of the four hooks is
2549   run to add stuff to the menu associated with that item:
2550
2551   roster_conference_popup_menu_hook $path $xlib $jid
2552
2553   roster_service_popup_menu_hook $path $xlib $jid
2554
2555   roster_jid_popup_menu_hook $path $xlib $jid
2556
2557   roster_group_popup_menu_hook $path $xlib $name
2558
2559   When run, each hook is given three parameters: the path of the _Tk_
2560   menu widget; the connection token; and, a JID of the roster item (or
2561   the name of the roster group for the last one).
2562
2563   Also the following hook is run to add stuff to the menu in
2564   groupchats:
2565
2566   roster_create_groupchat_user_menu_hook $path $xlib $jid
2567
2568   The hook is given three parameters: the path of the _Tk_ menu widget;
2569   the connection token; and, a JID of user.
2570
2571
2572
2573
2574
2575
2576Shchepin, et al.        Expires September 2, 2015              [Page 46]
2577
2578                              Tkabber 1.1.2                   March 2015
2579
2580
2581   The following hook is run to add stuff to the popup balloon for each
2582   roster item:
2583
2584   roster_user_popup_info_hook $varname $xlib $jid
2585
2586   The hook is given three parameters: the variable name in which
2587   current popup text is stored, the connection token, and the JID of
2588   the roster item.
2589
25906.7.  Miscellaneous Hooks
2591
2592   There are three "obvious" hooks:
2593
2594   postload_hook
2595
2596   finload_hook
2597
2598   quit_hook
2599
2600   The first two, by default, run the "postload" and "finload"
2601   procedures, respectively. "postload_hook" is run after all code has
2602   been loaded and before initializing main _Tkabber_ window.  After
2603   that "finload_hook" is run.  The final hook is called just before
2604   _Tkabber_ terminates (cf., Section 5.3.7).
2605
2606   You can add custom pages to userinfo window using
2607
2608   userinfo_hook $path $xlib $jid $editable
2609
2610   It is run with four arguments: the userinfo notebook widget name; the
2611   connection token; the JID of the user; and a boolean parameter which
2612   indicates whether the form is editable.
2613
26147.  User Interface basics
2615
26167.1.  Searching
2617
2618   Search panel may be invoked in certain classes of _Tkabber_ windows
2619   using the "<<OpenSearchPanel>>" Tk virtual event which is bound by
2620   default to the "<Control-S>" keyboard command.
2621
2622   Search panel can be dismissed by pressing the "<Escape>" key and the
2623   default search action ("search down") is activated by pressing the
2624   "<Return>" key while entering the search pattern.
2625
2626   Search panel is currenlty available in:
2627
2628   o  Chat and groupchat windows;
2629
2630
2631
2632Shchepin, et al.        Expires September 2, 2015              [Page 47]
2633
2634                              Tkabber 1.1.2                   March 2015
2635
2636
2637   o  Service discovery window;
2638
2639   o  Chat history logs;
2640
2641   o  All windows of the "Chats history" tool.
2642
2643   o  Headlines window.
2644
2645   o  Raw XML log window.
2646
2647   o  MUC affiliations and roles lists.
2648
2649   Searching may be customized using the settings located under the
2650   _Plugins \u002D-> Search_ group of the _Customize_ window.  These
2651   setings are:
2652
2653   o  "::plugins::search::options(case)": perform case-sensitive
2654      searching (_off_ by default);
2655
2656   o  "::plugins::search::options(mode)": selects searching mode which
2657      can be one of:
2658
2659      *  _substring_ -- use simple substring search: the typed search
2660         string is taken verbatim and then the attempt to locate it is
2661         performed.  This is the default mode.
2662
2663      *  _glob_ -- uses "glob-style" (or "shell-style") matching:
2664         special symbols are recognized and they provide for
2665         "wildcarding":
2666
2667         +  _*_ matches zero or more characters;
2668
2669         +  _?_ matches exactly one character;
2670
2671         +  _[_ and _]_ define character classes, e.g., "[A-Z]" will
2672            match any character in the series "A", "B", ... "Z".
2673
2674         The full syntax is described in Tcl string manual page [34].
2675         That is, this search mode can be convenient for those who want
2676         more general yet simple approach to searching and is familiar
2677         with the "shell globbing" concept found in Unix shells.
2678
2679      *  _regexp_ -- provides for searching using full-blown regular
2680         expressions engine.  The full syntax is described in Tcl
2681         re_syntax manual page [35].
2682
2683
2684
2685
2686
2687
2688Shchepin, et al.        Expires September 2, 2015              [Page 48]
2689
2690                              Tkabber 1.1.2                   March 2015
2691
2692
26938.  References
2694
26958.1.  URIs
2696
2697   [1] http://tkabber.jabber.ru/
2698
2699   [2] http://www.jabber.org/
2700
2701   [3] https://otr.cypherpunks.ca/
2702
2703   [4] http://sourceforge.net/project/showfiles.php?group_id=10894
2704
2705   [5] http://sourceforge.net/project/showfiles.php?group_id=12883
2706
2707   [6] http://sourceforge.net/project/showfiles.php?group_id=12883
2708
2709   [7] http://www.activestate.com/Products/ActiveTcl
2710
2711   [8] http://sourceforge.net/project/showfiles.php?group_id=13248
2712
2713   [9] http://www.openssl.org/source/
2714
2715   [10] http://sourceforge.net/projects/tkimg/
2716
2717   [11] http://www.tdom.org/
2718
2719   [12] https://gna.org/projects/ztcl/
2720
2721   [13] https://gna.org/projects/ztcl/
2722
2723   [14] http://sgolovan.nes.ru/jabber/ztcl/
2724
2725   [15] https://chiselapp.com/user/sgolovan/repository/tclgpg/
2726
2727   [16] http://fossil-scm.org
2728
2729   [17] http://www.gnupg.org/download.html
2730
2731   [18] https://otr.cypherpunks.ca/
2732
2733   [19] http://memchan.sourceforge.net/
2734
2735   [20] http://www.speech.kth.se/snack/download.html
2736
2737   [21] http://beepcore-tcl.sourceforge.net/tkXwin-1.0.tgz
2738
2739   [22] http://sgolovan.nes.ru/jabber/tclWinidle/
2740
2741
2742
2743
2744Shchepin, et al.        Expires September 2, 2015              [Page 49]
2745
2746                              Tkabber 1.1.2                   March 2015
2747
2748
2749   [23] http://sw4me.com/wiki/Tktray
2750
2751   [24] http://sourceforge.net/projects/tktable/
2752
2753   [25] http://tkcon.sourceforge.net
2754
2755   [28] http://fossil-scm.org
2756
2757   [29] http://www.xmpp.org/extensions/xep-0081.html
2758
2759   [30] http://wiki.tcl.tk/1727
2760
2761   [31] http://www.tcl.tk/man/tcl8.4/TkCmd/option.htm
2762
2763   [32] http://tcl.tk/man/tcl8.4/TkCmd/font.htm#M13
2764
2765   [33] http://www.xmpp.org/extensions/xep-0038.html
2766
2767   [34] http://www.tcl.tk/man/tcl8.4/TclCmd/string.htm#M35
2768
2769   [35] http://www.tcl.tk/man/tcl8.4/TclCmd/re_syntax.htm
2770
2771Appendix A.  Releases History
2772
2773A.1.  Main changes in 1.1.2
2774
2775   o  Fixed a bug in displaying search results and copying JID from the
2776      search results to clipboard
2777
2778   o  Fixed a few bugs with nonexistent canvas tags in Georoster and
2779      Poker plugins
2780
2781   o  Fixed a restoring user status from autoaway
2782
2783   o  A few other fixes and minor enhancements
2784
2785   o  This is the last release which supports Tcl/Tk 8.4 (with the
2786      exceptions of the OTR and Poker plugins)
2787
2788A.2.  Main changes in 1.1.1
2789
2790   o  Fixed a few bugs in passing URL to web browsers
2791
2792   o  Fixed a regression when message intended to be GPG-encrypted is
2793      sent plaintext
2794
2795   o  Fixed a few crashes in OTR plugin
2796
2797
2798
2799
2800Shchepin, et al.        Expires September 2, 2015              [Page 50]
2801
2802                              Tkabber 1.1.2                   March 2015
2803
2804
2805   o  A few other fixes and enhancements
2806
2807A.3.  Main changes in 1.1
2808
2809   o  Added new OTR plugin (requires Tcl/Tk 8.5 to operate)
2810
2811   o  Roster versioning (XEP-0237 and RFC-6121)
2812
2813   o  Added new Battleship game plugin
2814
2815   o  A few fixes and enhancements
2816
2817A.4.  Main changes in 1.0
2818
2819   o  Completely rewritten Tkabber internals
2820
2821   o  Dropped Tcl/Tk 8.3 support.  Now Tcl/Tk 8.4 is required
2822
2823   o  Partial IPv6 support (requires Tcl/Tk 8.6)
2824
2825   o  Switched from TclGPGME to TclGPG for encryption and signing
2826
2827   o  Added new connection method BOSH (XEP-0124 and XEP-0206)
2828
2829   o  Disabled SSLv2 and enabled TLSv1 TLS options
2830
2831   o  Added user nicknames (XEP-0172) support.
2832
2833   o  Updated the CAPTCHA forms (XEP-0158) support
2834
2835   o  Added metacontacts (XEP-0209) support
2836
2837   o  Implemented multiple proxy profiles
2838
2839   o  Implemented remote controlling from a locally executed script
2840
2841   o  Added new plugins: floatingcontact, poker
2842
2843   o  Rewritten most plugins to support disabling and unloading on the
2844      fly
2845
2846   o  A few interface enhancements (search in MUC affiliations lists,
2847      proxy management)
2848
2849   o  Many fixes and enhancements
2850
2851
2852
2853
2854
2855
2856Shchepin, et al.        Expires September 2, 2015              [Page 51]
2857
2858                              Tkabber 1.1.2                   March 2015
2859
2860
2861A.5.  Main changes in 0.11.1
2862
2863   o  New default sound theme by Serge Yudin
2864
2865   o  Added new plugins: quotelastmsg, singularity, stripes
2866
2867   o  Many fixes and enhancements
2868
2869A.6.  Main changes in 0.11.0
2870
2871   o  New tabbed user interface.  Tab headers now occupy several rows
2872      and tab bar can be docked to the left and right sides of chat
2873      window
2874
2875   o  Roster filter
2876
2877   o  Added support for pixmaps (in particular emoticons) JISP archives
2878      (XEP-0038)
2879
2880   o  Added support for SOCKS4a and SOCKS5 proxy for the main connection
2881
2882   o  Added user location support (XEP-0080)
2883
2884   o  Added user mood support (XEP-0107)
2885
2886   o  Added user activity support (XEP-0108)
2887
2888   o  Added user tune support (XEP-0118)
2889
2890   o  Added entity capabilities (XEP-0115 v.1.5, only reporting) support
2891
2892   o  Added basic robot challenges support (XEP-0158, v.0.9)
2893
2894   o  Added partial data forms media element support (XEP-0221, v.0.2,
2895      URIs and images only)
2896
2897   o  Roster is now exported to XML instead of Tcl list
2898
2899   o  Added support for entity time (XEP-0202)
2900
2901   o  Tkabber version is now reported in disco#info (XEP-0232)
2902
2903   o  Moved deprecated Jabber Browser (XEP-0011) to an external plugin
2904
2905   o  Moved Jidlink file transfer to an external plugin
2906
2907   o  Added several new plugins: attline, ctcomp, custom-urls,
2908      floatinglog, gmail, openurl, presencecmd, receipts
2909
2910
2911
2912Shchepin, et al.        Expires September 2, 2015              [Page 52]
2913
2914                              Tkabber 1.1.2                   March 2015
2915
2916
2917   o  Many fixes and enhancements
2918
2919A.7.  Main changes in 0.10.0
2920
2921   o  New artwork by Artem Bannikov
2922
2923   o  Mediated SOCKS5 connection support for file transfer (XEP-0065)
2924
2925   o  Blocking communicaation with users not in roster (using XEP-0016
2926      via simple interface)
2927
2928   o  Translatable outgoing error messages support (based on recipient's
2929      xml:lang)
2930
2931   o  Remote controlling clients support (XEP-0146)
2932
2933   o  Extended stanza addressing support (XEP-0033)
2934
2935   o  New chats history tool with search over the all chatlog files
2936
2937   o  Roster item icons are chosen based on Disco queries to item server
2938
2939   o  Search in Disco, Browser, Headlines, RawXML, and Customize windows
2940
2941   o  New internal plugins: abbrev allows to abbreviate words in chat
2942      input windows, postpone stores/restores current input window
2943      content
2944
2945   o  New external plugins (aniemoticons, latex, tkabber-khim, traffic,
2946      renju)
2947
2948   o  Emoticons theme now can be loaded using GUI
2949
2950   o  Most Tkabber's tabs can now be stored on exit and restored on
2951      start
2952
2953   o  XMPP ping support (XEP-0199).  Reconnecting based on XMPP ping
2954      replies
2955
2956   o  Delayed delivery now recognizes XEP-0203 timestamps
2957
2958   o  Added optional 'My Resources' roster group, which contains other
2959      connected resources of the same JID
2960
2961   o  Many fixes and enhancements
2962
2963
2964
2965
2966
2967
2968Shchepin, et al.        Expires September 2, 2015              [Page 53]
2969
2970                              Tkabber 1.1.2                   March 2015
2971
2972
2973A.8.  Main changes in 0.9.9
2974
2975   o  Improved privacy lists interface
2976
2977   o  Support for stream compression (XEP-0138)
2978
2979   o  Support for SRV DNS-records
2980
2981   o  Support for TXT DNS-records (XEP-0156)
2982
2983   o  Support for ad-hoc commands (XEP-0050)
2984
2985   o  Improved headlines support
2986
2987   o  Chat state notification support (XEP-0085)
2988
2989   o  Many fixes and enhancements
2990
2991A.9.  Main changes in 0.9.8
2992
2993   o  Support for STARTTLS
2994
2995   o  Reorganized menu
2996
2997   o  Support for searching in chat window
2998
2999   o  Support for annotations about roster items (XEP-0145)
3000
3001   o  Support for conference rooms bookmarks (XEP-0048)
3002
3003   o  Added multilogin support for GPGME
3004
3005   o  Better support for xml:lang
3006
3007   o  Support for service discovery extensions (XEP-0128)
3008
3009   o  Support for NTLM authentication
3010
3011   o  Many fixes and enhancements
3012
3013A.10.  Main changes in 0.9.7beta
3014
3015   o  Updated support for file transfer (XEP-0095, XEP-0096, XEP-0047,
3016      XEP-0065)
3017
3018   o  Support for colored nicks and messages in conference
3019
3020   o  Better multiple logins support
3021
3022
3023
3024Shchepin, et al.        Expires September 2, 2015              [Page 54]
3025
3026                              Tkabber 1.1.2                   March 2015
3027
3028
3029   o  Updated support for xml:lang
3030
3031   o  Support for IDNA (RFC3490)
3032
3033   o  Many fixes and enhancements
3034
3035A.11.  Main changes in 0.9.6beta
3036
3037   o  Multiple logins support
3038
3039   o  History now splitted by month
3040
3041   o  Animated emoticons support
3042
3043   o  Many user interface improvements
3044
3045   o  More XMPP support
3046
3047   o  More translations
3048
3049   o  Bugfixes
3050
3051A.12.  Main changes in 0.9.5beta
3052
3053   o  Nested roster groups
3054
3055   o  Messages emphasizing
3056
3057   o  User interface improvements
3058
3059   o  Support for XMPP/Jabber MIME Type
3060
3061   o  Bugfixes
3062
3063Appendix B.  Tk option database resources
3064
3065   Here is list of the most essential _Tkabber_-specific _Tk option
3066   database_ resources that you need to change look:
3067
3068   Tkabber.geometry  Geometry of main window.
3069
3070   *Chat.chatgeometry
3071
3072   *Chat.groupchatgeometry
3073
3074   *Customize.geometry
3075
3076   *RawXML.geometry
3077
3078
3079
3080Shchepin, et al.        Expires September 2, 2015              [Page 55]
3081
3082                              Tkabber 1.1.2                   March 2015
3083
3084
3085   *Stats.geometry
3086
3087   *Messages.geometry
3088
3089   *JDisco.geometry  Geometry of various windows (when not using tabs).
3090
3091   *mainRosterWidth  The width of the main roster window.
3092
3093   *Chat.inputheight
3094
3095   *RawXML.inputheight  Height of input windows in chat and raw XML
3096      windows.
3097
3098   *Balloon.background
3099
3100   *Balloon.foreground  Background and foreground colors of popup
3101      balloon.
3102
3103   *Balloon.style  Behaviour of popup balloon: can be "delay" (balloon
3104      appeared after some time) and "follow" (balloon appeared
3105      immediately and follows mouse).
3106
3107   *JDisco.fill  Color of service discovery browser item name.
3108
3109   *JDisco.identitycolor  Color of service discovery browser item
3110      identity.
3111
3112   *JDisco.featurecolor  Color of service discovery browser entity
3113      feature.
3114
3115   *JDisco*Tree*background  Background of service discovery browser.
3116
3117   *Chat.meforeground  Color of user's messages in chat windows.
3118
3119   *Chat.theyforeground  Color of other peoples messages in chat
3120      windows.
3121
3122   *Chat.serverlabelforeground  Color of label before server message.
3123
3124   *Chat.serverforeground  Color of server messages in chat windows.
3125
3126   *Chat.errforeground  Color of error messages in chat windows.
3127
3128   *Chat.urlforeground  Color of URLs in chat windows.
3129
3130   *Chat.urlactiveforeground  Color of mouse highlighted URLs in chat
3131      windows.
3132
3133
3134
3135
3136Shchepin, et al.        Expires September 2, 2015              [Page 56]
3137
3138                              Tkabber 1.1.2                   March 2015
3139
3140
3141   *JDisco.fill  Default color of items in Service Discovery Browser.
3142
3143   *JDisco.featurecolor  Default color of feature items in Service
3144      Discovery Browser.
3145
3146   *JDisco.identitycolor  Default color of identity items in Service
3147      Discovery Browser.
3148
3149   *JDisco.optioncolor  Default color of option items in Service
3150      Discovery Browser.
3151
3152   *JDisco*Tree*background  Default color of background in Service
3153      Discovery Browser.
3154
3155   *NoteBook.alertColor0
3156
3157   *NoteBook.alertColor1
3158
3159   *NoteBook.alertColor2
3160
3161   *NoteBook.alertColor3  Tabs alert colors.
3162
3163   *Roster.cbackground  Roster background color.
3164
3165   *Roster.groupindent  Indentation for group title.
3166
3167   *Roster.groupiconindent  Indentation for group icon.
3168
3169   *Roster.jidindent  Indentation for item name.
3170
3171   *Roster.jidmultindent  Indentation for item with multiple resources.
3172
3173   *Roster.subjidindent  Indentation for item resource.
3174
3175   *Roster.iconindent  Indentation for item icon.
3176
3177   *Roster.subitemtype
3178
3179   *Roster.subiconindent  Indentation for resource icon.
3180
3181   *Roster.textuppad  Top pad for item's names.
3182
3183   *Roster.textdownpad  Bottom pad for item's names.
3184
3185   *Roster.linepad  Vertical distance between items.
3186
3187   *Roster.foreground  Color of item's names.
3188
3189
3190
3191
3192Shchepin, et al.        Expires September 2, 2015              [Page 57]
3193
3194                              Tkabber 1.1.2                   March 2015
3195
3196
3197   *Roster.jidfill  Background of roster item.
3198
3199   *Roster.jidhlfill  Background of roster item when mouse is over.
3200
3201   *Roster.jidborder  Color of item's border.
3202
3203   *Roster.groupfill
3204
3205   *Roster.grouphlfill
3206
3207   *Roster.groupborder  The same to roster groups.
3208
3209   *Roster.groupcfill  Background color of collapsed group.
3210
3211   *Roster.stalkerforeground
3212
3213   *Roster.unavailableforeground
3214
3215   *Roster.dndforeground
3216
3217   *Roster.xaforeground
3218
3219   *Roster.awayforeground
3220
3221   *Roster.availableforeground
3222
3223   *Roster.chatforeground  Colors of item name for different presences.
3224
3225Appendix C.  Documentation TODO
3226
3227   The next revision of this documentation should discuss:
3228
3229   o  Post-load:
3230
3231      *  "chat_height" and "chat_width" (appear to be no-ops).
3232
3233   o  Menu-load:
3234
3235      *  "change_password_dialog"
3236
3237      *  "conference::create_room_dialog"
3238
3239      *  "disco::browser::open_win"
3240
3241      *  "message::send_msg"
3242
3243      *  "privacy::request_lists"
3244
3245
3246
3247
3248Shchepin, et al.        Expires September 2, 2015              [Page 58]
3249
3250                              Tkabber 1.1.2                   March 2015
3251
3252
3253      *  "rawxml::open_window"
3254
3255      *  "userinfo::show_info_dialog"
3256
3257   o  Hooks: the additional payload format.
3258
3259Appendix D.  Acknowledgements
3260
3261   Rebecca Malamud was kind enough to design the "enlightened feather"
3262   motif used in the _Tkabber_ look-and-feel.
3263
3264   The "new look" appeared in the 0.10.0 release ("golden feather" and
3265   "blue feather" pixmap themes and the "Earth bulb" logo) was designed
3266   by Artem Bannikov.
3267
3268   The new sound theme appeared in 0.11.1 release was created by Serge
3269   Yudin
3270
3271Appendix E.  Copyrights
3272
3273   Copyright (C) 2002-2015 Alexey Shchepin
3274
3275   _Tkabber_ is free software; you can redistribute it and/or modify it
3276   under the terms of the GNU General Public License as published by the
3277   Free Software Foundation; either version 2 of the License, or (at
3278   your option) any later version.
3279
3280   _Tkabber_ is distributed in the hope that it will be useful, but
3281   WITHOUT ANY WARRANTY; without even the implied warranty of
3282   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
3283   General Public License for more details.
3284
3285Authors' Addresses
3286
3287   Alexey Yurievich Shchepin
3288   Process-One
3289
3290   Email: alexey@process-one.net
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304Shchepin, et al.        Expires September 2, 2015              [Page 59]
3305
3306                              Tkabber 1.1.2                   March 2015
3307
3308
3309   Marshall T. Rose
3310   Dover Beach Consulting, Inc.
3311   POB 255268
3312   Sacramento, CA  95865-5268
3313   US
3314
3315   Phone: +1 916 483 8878
3316   Fax:   +1 916 483 8848
3317   Email: mrose@dbc.mtview.ca.us
3318
3319
3320   Sergei Golovan
3321   New Economic School
3322
3323   Email: sgolovan@nes.ru
3324
3325
3326   Michail Yurievich Litvak
3327   Colocall Ltd.
3328
3329   Email: mci@shadow.in.ua
3330
3331
3332   Konstantin Khomoutov
3333   Service 007
3334
3335   Email: khomoutov@gmail.com
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360Shchepin, et al.        Expires September 2, 2015              [Page 60]
3361