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