Tkabber Features and Settings Explained

Author

Reads 9.2K

Muslim ethnic female in hijab texting message on mobile phone near iron construction on blurred background of building
Credit: pexels.com, Muslim ethnic female in hijab texting message on mobile phone near iron construction on blurred background of building

Tkabber is a popular Jabber client, and understanding its features and settings can make a huge difference in your user experience. Tkabber supports multiple Jabber servers, allowing you to connect to different networks with ease.

One of the standout features of Tkabber is its ability to display multiple chat windows simultaneously. This is especially useful for managing multiple conversations at the same time.

Getting Started

You can find the latest development version of Tkabber via Fossil. Execute the following commands to download, install, and run it.

If you want to test some plugins, then do the same, but with a few extra commands to enable plugin testing. Unofficial plugins are also available, but be sure to check the readme for info on what they do and how to use them.

To use Tkabber on Debian GNU/Linux, simply execute a few apt commands to get all the required packages. No real installation is required; just copy the tkabber/ directory to a commonly-available area.

People Getting Paintbrushes from the Can
Credit: pexels.com, People Getting Paintbrushes from the Can

Once you have Tkabber set up, you can invoke it from the shell by typing the name of the executable. Alternatively, you can double-click on the file or create a shortcut to it.

If you're using Tkcon, Tkabber will automatically hide the Tk console window. You can find the checkbutton to show the console under the Services->Debug tools menu.

Description

Jabber is a complete implementation of a popular communication protocol.

It's built using Pure Tcl/Tk, which means it doesn't rely on any external dependencies. It uses BWidget, parts of tcllib, and optional external packages for added functionality.

Jabber can run on various operating systems, including Unix, Win32, and Mac OS X.

The implementation is available as a starkit, which is a self-contained package that includes everything needed to run Jabber.

Download, Install and Run

To get started with Tkabber, you'll need to download and install it. You can find the latest development version via Fossil.

A woman types on a laptop using a messaging app in a modern office setting.
Credit: pexels.com, A woman types on a laptop using a messaging app in a modern office setting.

If you're using Debian GNU/Linux, you can get all the required packages by running a single command. Simply execute `apt-get install tkabber tcl tk tkcon` to get everything you need.

Once you've downloaded Tkabber, you can install it by copying the `tkabber/` directory to a commonly-available area. No real installation is required, just copy the directory.

From there, you can either put the directory in your search-path or make a calling script/shortcut to the file `tkabber.tcl` in that directory.

To run Tkabber, simply execute `tkabber.tcl` from the shell, or double-click on the file on a windowing system.

Configuration

Tkabber maintains its configuration using a set of files placed in a special configuration directory, which location depends on the operating system it runs on. This directory is usually "~/.tkabber" on Unix systems, "~/Library/Application Support/Tkabber" on Macintosh, and "Tkabber" in the special system folder for storing application-specific data under Microsoft Windows.

The configuration directory's pathname is assigned to the "configdir" global Tcl variable, which can be accessed from within the main Tkabber configuration file. This file is a Tcl source file, and editing it is not strictly necessary, as most options can be configured using the graphical interface.

Tkabber is configured in four stages: pre-load, post-load, menu-load, and final-load. The corresponding Tk's option command can be used in the Tkabber's configuration file in any acceptable way, from small tweaks to reading files containing elaborate sets of configuration commands.

Requirements

Close-up view of a smartphone displaying a chat interface on a textured surface.
Credit: pexels.com, Close-up view of a smartphone displaying a chat interface on a textured surface.

To configure a system, you need to have a clear understanding of the requirements.

The system should have a stable and secure operating system, as discussed in the "System Requirements" section.

A reliable internet connection is also essential, with a minimum speed of 10 Mbps, as mentioned in the "Internet Connection" section.

The system should be able to handle multiple users simultaneously, with a minimum of 4 GB of RAM, as stated in the "Hardware Requirements" section.

Regular software updates are necessary to ensure the system's security and performance, as outlined in the "Maintenance" section.

The system should be able to integrate with other tools and services, with support for popular protocols such as HTTP and FTP, as discussed in the "Integration" section.

Configuration Options

Configuration options in Tkabber can be a bit complex, but don't worry, I've got you covered. You can configure most options using the graphical interface, but if you prefer to edit the configuration file, you can do so.

A video editor working on a project using a desktop computer in a modern office setting.
Credit: pexels.com, A video editor working on a project using a desktop computer in a modern office setting.

Tkabber is configured in four stages: pre-load, post-load, menu-load, and final-load. You can use the corresponding Tk's option command in the Tkabber's configuration file to make changes.

The configuration file is a Tcl source file, so it's a good idea to have some knowledge of Tcl programming language. However, most things you'll need to do are pretty simple.

To specify a set of proxy servers, you need to make some changes in the global loginconf array. If you're using the Customize interface, you can open the Manage proxy servers dialog window and add your proxy server there.

If you're using the HTTPS proxy, you'll need to add it twice: once in the Tunnel proxies tab and another in the HTTP proxies tab. If you define proxy server in the Tkabber config file, you'll need to replace the old lines with new ones to instruct Tkabber to use these proxies for all connections.

Here's a reference map to help you adapt your current proxy settings to the current Tkabber version:

If you're a Tcl "old timer", you can also use the following commands to update your proxy settings:

You can also configure other options, such as fonts and balloon colors, and detect breaks in underlying TCP connection to a server.

External XML Parser Support

Credit: youtube.com, OWASP Top 10 2017 - A4 XML External Entities

TclXML is no longer supported as an external XML parser.

The global variable use_external_tclxml, which controlled the loading of TclXML, has been removed.

Tcl package tDOM, which is based on expat, is now supported as an external XML parser.

It is enabled by default if it is installed.

This change provides a more reliable option for XML processing.

The Clientinfo

The Clientinfo module is a useful tool that shows information about the user's client in popup balloons. This includes the client name, version, and OS.

You can control whether or not this information is automatically asked of users by setting a variable to 1 or 0.

Roster Hooks

Roster Hooks are a crucial part of customizing your experience, allowing you to add specific items to menus and popups.

Each hook is run with three parameters: the path of the Tk menu widget, the connection token, and a JID of the roster item or a roster group.

People Working in the Office
Credit: pexels.com, People Working in the Office

The path of the Tk menu widget is a key parameter, as it determines where the menu item will be added.

The connection token is also important, as it's used to connect the hook to the rest of the system.

A JID of the roster item is used to identify the specific item being added to the menu.

In group chats, the hook is given a JID of the user instead of a roster item.

The hook for adding stuff to the popup balloon for each roster item is run with three parameters: a variable name, the connection token, and the JID of the roster item.

This allows for customized popup text to be displayed for each roster item.

Features

Tkabber offers a user-friendly interface that makes it easy to use for both beginners and advanced users. It's a great option for those who want a simple and intuitive experience.

One of the key features of Tkabber is its ability to connect to multiple XMPP servers at once, allowing users to manage multiple accounts from a single interface. This makes it a great choice for those who need to juggle multiple identities or accounts.

Tkabber also supports a wide range of plugins, which can be easily installed and managed through the program's interface. This means users can customize their experience to suit their needs and preferences.

Connection to Jabber

Credit: youtube.com, Tech Tuesday: Let's Jabber!

Connecting to jabber is easier than you think. To join the tcl chat, you'll first need to create an account on a public jabber server, such as jabber.org or amessage.info.

You can choose any username and password, but it's recommended to use hashed passwords for security. The resource item doesn't matter, but it's a good idea to use a unique one.

If you're behind a web-proxy, you're in luck - one of the public jabber servers is listening on port 80 and port 443. You should create your account on jabber80.com and use SSL with the SSL port set to 443.

Some public jabber servers have special features, like allports.jabber.ru, which accepts STARTTLS connections on any port, or ssl.jabber.ru, which accepts "Legacy SSL" connections on port 443.

If you'd like to test jabber without creating an account, you can temporarily use [email protected].

Browse URL

Tkabber can execute a browser when you click on a URL in chat windows, or in user info window, or in headlines window etc. It uses some heuristics to find which browsers are installed in the system and invokes the first browser it finds.

If this caught your attention, see: DuckDuckGo Private Browser

Credit: youtube.com, Share of Search Free tool - new URL feature

If Tkabber's decision on which browser to use is suboptimal to you, you can set the variable webbrowser to specify your preferred browser.

You can add options to the browser command line by setting the webbrowser variable. For example, you can open a URL in a new tab or in a new window.

Note that the %s in the string will be replaced by an actual URL when the command is run.

The Conferenceinfo

The Conferenceinfo module is a useful feature that allows you to see a popup listing the conference's participants when you mouse over a roster entry.

You can activate this feature by adding a specific line to your post-load, which will make the popup appear even if you're not currently joined with the conference.

This feature is particularly helpful in conferences where you need to keep track of participants, and it's easy to set up.

The interval between these requests can be customized using two variables, allowing you to control how often the system checks for updates.

If you receive an error reply, the system will wait a specified number of minutes before trying again, which is usually around 5 minutes.

Stream Initiation

A Laptop With a White Screen
Credit: pexels.com, A Laptop With a White Screen

Stream Initiation allows you to specify what transports you can use and choose a more suitable one via negotiation.

The Stream Initiation profile is defined in XEP-0095, which supports two transports: XEP-0047 - IBB and XEP-0065 - SOCKS5 bytestreams.

If your machine is behind a NAT, you won't be able to use the bytestreams transport, so you should disable it.

Tkabber comes with two transport implementations, giving you flexibility in how you set up your stream initiation.

Presence Hooks

Presence Hooks are a powerful feature that allows you to customize your experience with Tkabber. They're triggered by changes in your presence status, as well as by others.

Your presence status can be one of six values: available, chat, away, xa, dnd, or invisible. You can set these values using the userstatus variable, and changes to this variable will trigger a hook.

The hook is given one parameter: the new presence status value. For example, if you change your status to "away", the hook will be triggered with the parameter "away".

Close-Up Shot of a Person Sending Text Message
Credit: pexels.com, Close-Up Shot of a Person Sending Text Message

When you change your status, be sure to update the userstatus variable, even if you're not changing the value. This ensures that the hook is triggered correctly.

Tkabber also triggers hooks when someone else's presence changes. This hook is given two parameters: the label associated with the JID, or the JID itself if no label exists, and the user's new status.

For example, if your friend "fred" changes their status to "available", the hook will be triggered with the parameters "fred" and "available".

Finally, Tkabber also triggers hooks for all received presence packets. This hook is given four parameters: the connection token, who sent the presence, the type of presence, and a list of extended subtags and parameters.

Here's a summary of the parameters for each type of hook:

By using presence hooks, you can create a customized experience that meets your needs and preferences.

User Interface

Tkabber's user interface has undergone some significant changes, making it easier to customize and use. The font handling has been reworked, and now Tkabber relies on the Tk option database to manage font settings.

Close-up of a smartphone displaying an AI chat interface with the DeepSeek app.
Credit: pexels.com, Close-up of a smartphone displaying an AI chat interface with the DeepSeek app.

You can override roster and chat fonts independently of each other, and if the Tk option database contains sane values, you won't need to touch anything. If you're using a system not based on X Window, you can use the Customize options to make changes.

Here's a quick reference to the font options:

  • *font* sets the default font for all widgets used in Tkabber.
  • *Chat*Text.font* can be used to override the font used for chat windows.
  • *Roster*font* can be used to override the font used for roster windows.

The new tab management widget has also made some changes, replacing the old notebook widget with a custom widget that provides multi-row placement of tabs and docking options. If you had adjusted specific Tk option database resources for the old notebook widget, you'll need to update them to reflect the new widget's class name, which is ButtonBar.

Look and Feel

You can customize the look and feel of Tkabber to your liking. Tkabber is shameless in borrowing icons from other Jabber clients, and you can select a family of related icons by setting pixmaps::options(pixmaps_theme).

You can choose from a variety of themes, including "Default", "Gabber", "JAJC", "Jarl", "Psi", and "ICQ", or select a custom theme by putting a custom theme subdirectory in the $::configdir/pixmaps/ directory.

Credit: youtube.com, 5 Tips to improve your UI Designs

To find out the structure of icon definition file, look through XEP-0038 and take a look at the directory called "pixmaps/default/". This will give you an idea of how to create your own custom theme.

You can also override fonts for chat and roster windows separately from each other using the list of resources as a reference. Here's a quick rundown of the resources you can use:

  • fontTk option database resource sets default font for all widgets used in Tkabber.
  • Chat*Text.fontTk option database resource can be used to override font used for chat windows.
  • Roster*fontTk option database resource can be used to override font used for roster windows.

By default, Tkabber uses a dark blue color for tabs of lowered windows, a blue color for groupchat or headline messages, and a red color for chat messages addressed directly to you. You can customize these colors by modifying the array called alert_lvls and the list called alert_colors.

Mouse Gestures for System Tray Icon

Single click on the system tray icon with the left mouse button now unconditionally brings the main Tkabber window to front, possibly deiconifying it first.

If you're like me, you've probably grown accustomed to using the system tray icon to manage your applications. Now, with the updated mouse gestures, you can expect a more consistent experience.

Credit: youtube.com, system tray

Single click with the middle mouse button now unconditionally iconifies the main Tkabber window.

This change is a significant improvement over the previous behavior, where a single click with the left mouse button toggled the iconified/visible state of the main Tkabber window.

Here's a quick summary of the new mouse gestures:

  • Left mouse button: brings the main Tkabber window to front
  • Middle mouse button: iconifies the main Tkabber window

These changes should make it easier to manage your Tkabber window, even when it's minimized to the system tray.

Tabbed Interface

You can choose to have a tabbed interface in Tkabber, but you'll need to restart the program for the changes to take effect.

To enable a tabbed interface, simply add ifacetk::options(use_tabbar) to your configuration file at the beginning.

If you're using the graphical interface, you can save the option and then restart Tkabber for the changes to apply.

The new tab management widget is a custom widget that allows for multi-row placement of tabs and docking them to the left or right sides of the chat window.

Credit: youtube.com, Tab (interface)

If you've adjusted any specific Tk options related to the old notebook widget, you'll need to change them to reflect the new widget, which is essentially a bunch of Tk buttons placed in a frame.

For example, if you explicitly set the *Notebook*font option, you'll need to change it to *ButtonBar*font.

Window Splitters

Window splitters have been updated to a "Windows" style, which is a departure from the previous "Motif" style.

The "Windows" style eliminates the need for explicit "grip boxes" on each splitter, which were the only active points in the previous design.

In the "Windows" style, the entire splitter is now an active area, allowing users to easily change the relative sizes of windows.

This change is likely to make window splitters more intuitive and user-friendly, as the active area is now more prominent and easier to interact with.

The shift from "Motif" to "Windows" style is a deliberate design choice that aims to improve the overall user experience.

Splash Window

Credit: youtube.com, Soft UI Design in Figma (Splash Screen) - Todo App Series - 01

The splash window is a feature that shows up during the startup process of Tkabber. It displays the loading process by default.

You can disable this feature by putting a specific line in your configuration file. This allows you to customize your Tkabber experience as you see fit.

The Presence

You can set your own presence by using two variables: userstatus and textstatus. The userstatus variable takes one of five values: available, chat, away, xa, dnd, or invisible.

To change your presence information, you need to write userstatus immediately after making a change to textstatus, even if it's a no-op.

Here are the possible values for userstatus:

  • available;
  • chat;
  • away;
  • xa;
  • dnd; or
  • invisible.

When your presence status changes, a hook is run with the new presence status value as a parameter. This can be one of the following values: available, chat, away, xa, dnd, or unavailable.

You can also use hooks to respond to changes in someone else's presence status. The hook is given two parameters: the label associated with the JID or the JID itself, and the user's new status.

For received presence packets, a hook is run with four parameters: connection token, who sent the presence, type of presence, and a list of extended subtags and parameters.

Chat and Messaging

Credit: youtube.com, Jabber Lektion #03: Textnachrichten in Jabber

Tkabber's chat and messaging features are quite impressive. The chat module allows you to customize the chat window's behavior, such as automatically scrolling to the bottom whenever new messages arrive. This is controlled by the `chat::options(stop_scroll)` variable.

You can also customize the timestamp format displayed in each chat message by referencing the Tcl documentation. For example, to display timestamps in "dd:mm:ss" format, you can add a specific line of code.

To send messages to others, Tkabber offers a dialog window that can be accessed through the `message::send_dialog` procedure. This procedure takes up to three optional arguments: the recipient JID, the subject, and the thread.

The Chat

The Chat module in Tkabber allows you to customize the chat window's behavior.

You can control whether the chat window automatically scrolls down to the bottom whenever something new comes in by setting the chat::options(stop_scroll) variable.

To display the time stamp in a specific format, you can refer to the Tcl documentation for the format description. For example, to display it in "dd:mm:ss" format, you can add a specific line of code.

Woman typing on a laptop using a messaging app in a home setting, close-up of hands.
Credit: pexels.com, Woman typing on a laptop using a messaging app in a home setting, close-up of hands.

Chat windows in Tkabber have menubuttons, and you can add items to the menu using two hooks. The first hook is used in user chat windows, and the second is used in groupchat ones. These hooks are given three parameters: the path of the Tk menu widget, the connection token, and the JID of the user or conference.

You can also customize the completions list in groupchat windows by running a specific hook. This hook is given four parameters: the chatid of the conference window, the name of the global variable storing the list of possible completions, the index of the position where the completion must be inserted, and the content of the text widget where the completion is requested.

If you want to display information about a user, you can use the userinfo::open procedure, which puts up a dialog window. This procedure takes two optional arguments: the user's JID and whether or not the dialog window should be editable.

The default nickname for a groupchat can be set using the defaultnick array, which is indexed by the JID of the room. You can also specify a pattern in parentheses to set the default nickname for all conferences at a specific domain.

The Message

Three young people working on computers in a creative office with vibrant graffiti walls.
Credit: pexels.com, Three young people working on computers in a creative office with vibrant graffiti walls.

You can adjust the format of the time stamp displayed in the beginning of each chat message by adding a specific line of code, for example, to display it in "dd:mm:ss" format.

To remember headlines you received in Tkabber, set message::options(headlines,cache) to 1.

If you want to use a separate window for each headline source, set message::options(headlines,multiple) to 1.

To send a message to someone, use the procedure called message::send_dialog, which puts up a dialog window.

You can also get added to someone's roster by using the procedure called message::send_subscribe_dialog, which also puts up a dialog window.

If you want to put decrypted message into the body variable if it's encrypted, you should call upvar 2 $varbody body.

When sending a chat or normal message to the wire, a hook is run that allows you to rewrite the message body.

To remember all the message filters, you can use the procedure called filters::open, which puts up a dialog window.

Extensibility

Four People Using Laptop Computers and Smartphone
Credit: pexels.com, Four People Using Laptop Computers and Smartphone

Tkabber's extensibility features make it a highly customizable chat client. It comes with a number of plugins that get loaded automatically, each making one or more calls to define procedures that get run when certain events happen.

These procedures are called "hooks" and can be used to process and draw chat messages, among other things. For example, the hook::run procedure invokes whatever hooks have been defined for draw_message_hook, which can involve more than ten procedures.

Tkabber's extensibility features are based on a priority system, where procedures are called in the order of their priority. This allows for a high degree of flexibility and customization. For instance, a procedure can return "stop" to prevent later procedures from being called.

Here are some examples of hooks that are run in Tkabber:

  • Message hooks: two hooks are run when a message stanza is received, one for rewriting message variables and another for showing the message to the user.
  • Roster hooks: four hooks are run when an item is added to the roster window, one for each menu item.
  • Miscellaneous hooks: three hooks are run at different stages of Tkabber's execution, including postload, finload, and termination.

These hooks can be used to add custom functionality to Tkabber, such as encrypting messages or adding custom pages to the userinfo window.

Upgrades and Maintenance

Close-up of colorful source code on a monitor, showcasing programming and technology concepts.
Credit: pexels.com, Close-up of colorful source code on a monitor, showcasing programming and technology concepts.

Upgrades from version 1.0 are straightforward, but it's a good idea to upgrade external plugins for a smoother experience.

Upgrading from version 0.11.1 or earlier requires attention to changes in the plugin interface and configuration options.

Upgrading from version 0.10.0 or earlier involves reading about plugin changes and also noting changes in configuration options and user interface elements.

If you're upgrading from version 0.9.9 or earlier, be aware that Tkabber will copy its configuration directory to a new location, and you may need to convert your chatlogs directory and update emoticon settings.

Here's a quick rundown of what to expect during an upgrade:

Upgrading from Version 1.0 to 1.1.1

Upgrading from Version 1.0 to 1.1.1 is a relatively straightforward process. Upgrading Tkabber from version 1.0 doesn't require configuration changes.

You should, however, consider upgrading external plugins to take full advantage of the new version's features. It's not strictly necessary, but it's a good idea to stay up-to-date.

Here's a quick rundown of what you need to do:

  • Back up your configuration files
  • Download the latest version of Tkabber
  • Replace the old version with the new one
  • Test everything to make sure it's working as expected

Upgrade from 0.10.0

A detailed view of computer programming code on a screen, showcasing software development.
Credit: pexels.com, A detailed view of computer programming code on a screen, showcasing software development.

Upgrading from version 0.10.0 requires some extra attention. Read the section on plugins to ensure a smooth transition.

Several configuration options and user interface elements have been changed, so be prepared to make some adjustments.

You may need to update your plugins to work with the new version of Tkabber.

Here are the key changes to keep in mind:

  • Configuration options and user interface elements have been changed.

Take your time and carefully review the changes to avoid any issues with your setup.

Troubleshooting

If Tkabber won't start, check if the Jabber server is down.

Make sure you have the correct username and password in the account settings.

If you're experiencing issues with logging in, try restarting Tkabber.

It's also possible that your network connection is the issue, so try switching to a different network or restarting your router.

If you're still having trouble, check the Tkabber logs for error messages.

The Logger

The Logger is a crucial tool for troubleshooting issues with your application. You can set a directory to store logs, which can be helpful for tracking down problems.

Credit: youtube.com, Why Are Effective Logging Strategies Crucial For Troubleshooting? - Learn To Troubleshoot

Having a designated log storage area can save you time and effort in the long run. This allows you to easily locate and review log files when needed. You can also allow or disallow storing of private and group chats logs, giving you more control over what information is recorded.

Emoticonos + Windows = Mal Asunto

Tkabber+aniemoticonos+Windows = mal asunto. I've tried to add animated emoticons to Tkabber on Windows, but they don't display well.

Probé muchos emoticonos, incluso gifs animados que no son emoticonos, pero siempre con el mismo resultado: no se ven bien. I tried many emoticons, including animated GIFs that aren't even emoticons, but the result was the same: they didn't display well.

Curiosamente, luego probé esos mismos gifs animados en el Tkabber de Linux y se veian perfectamente. Interestingly, when I tried the same animated GIFs on the Linux version of Tkabber, they displayed perfectly.

Si de todas formas quieres probarlos, has de descomprimir las imágenes en el directorio 'emoticons-tkabber' y tener un fichero 'icondef.xml' que describa qué símbolos ( :) y tal) sirven para qué imágenes. If you want to try them, you'll need to decompress the images into the 'emoticons-tkabber' directory and have an 'icondef.xml' file that describes which symbols (e.g. :) and others) serve which images.

Take a look at this: Joost De Valk

Availability

Credit: youtube.com, Troubleshooting your availability for services

Tkabber is distributed in the form of two tarballs containing its core and standard external plugins.

Since Tkabber is written in an interpreted language, it doesn't require any building for a target platform.

Tkabber is packaged by most known Linux distros and FreeBSD.

Special "all-in-one" packages for Microsoft Windows are provided, which don't require separate installation of the Tcl/Tk runtime.

These packages come in the forms of an installer and starpack.

A starpack for Linux x86 is also provided.

Miscellaneous Hooks

Tkabber's miscellaneous hooks are a great way to customize your experience. The postload_hook is run after all code has been loaded and before initializing the main Tkabber window.

These hooks are quite useful for adding custom functionality to Tkabber. The postload_hook and finload_hook are the first two, and they run the postload and finload procedures, respectively.

You can add custom pages to the userinfo window using a hook. It's run with four arguments: the userinfo notebook widget name, the connection token, the JID of the user, and a boolean parameter which indicates whether the form is editable.

Here are some examples of windows where you can use this hook: Chat and groupchat windows;Service discovery window;Chat history logs;All windows of the "Chats history" tool.Headlines window.Raw XML log window.MUC affiliations and roles lists.

Walter Brekke

Lead Writer

Walter Brekke is a seasoned writer with a passion for creating informative and engaging content. With a strong background in technology, Walter has established himself as a go-to expert in the field of cloud storage and collaboration. His articles have been widely read and respected, providing valuable insights and solutions to readers.

Love What You Read? Stay Updated!

Join our community for insights, tips, and more.