Copyright © 2015-2019,2022 by Thomas E. Dickey

Athena Widgets


This page discusses the variations of Athena Widgets which I have used in xterm and vile.



The original Xaw library, developed by Ralph Swick and Chris D. Peterson, dates back to the late-1980s . The first X release with this library was X.V11R2 in March 1988. It is not as old as xterm (part of X.V10R3 in early 1986).

At Xaw's first release, xterm was linked to Xaw for the scrollbar widget; the header files were still found directly under the X11 directory.

With X11R4 (December 1989), Xaw's header files were installed as a subdirectory of X11. At that point, there were only a few X libraries:

CLX oldX X Xau Xaw Xdmcp Xmu Xt

As one can see from the table, Xaw grew with development until X11R6. In 2004, the improvements and extensions done by the XFree86 project were released as X11R6.7. After that, minor improvements were made. The current version is in Xorg's git.

Although xterm and xvile (the X version of vi like emacs) are different applications (terminal emulator and text editor), they use the same features from Xaw:


Xterm's scrollbar is optional: it can be turned on and off at runtime. A feature of X.V10R4 (December 1986), it predates Xaw. When turning it on or off, xterm resizes its VT100 widget, and shows (or hides) the scrollbar on top of the the VT100 widget.

Popup menus

In xterm, these are actuated by the mouse using shift and control modifiers. The first release with X.V11R2 did not make this configurable with the translations resource. Instead, xterm contained its own state table for mouse clicks. The translations resource, which was introduced in X.V11R3, was short:

            <KeyPress>:              insert()        \n\
 Ctrl ~Meta <Btn1Down>:              mode-menu()     \n\
      ~Meta <Btn1Down>:              select-start()  \n\
      ~Meta <Btn1Motion>:    select-extend() \n\
 Ctrl ~Meta <Btn2Down>:              mode-menu()     \n\
~Ctrl ~Meta <Btn2Down>:              ignore()        \n\
      ~Meta <Btn2Up>:                insert-selection(PRIMARY, CUT_BUFFER0) \n\
~Ctrl ~Meta <Btn3Down>:              start-extend()  \n\
      ~Meta <Btn3Motion>:    select-extend() \n\
      ~Meta <BtnUp>:         select-end(PRIMARY, CUT_BUFFER0) \n\
            <BtnDown>:               bell(0)         \
Menu bar

I added optional support to xterm for a menu bar (referred to as a “toolbar” in patch #113) late in 1999. To do this, I changed the widget hierarchy in xterm, adding a level so that the menu bar could be in a form widget.

While it works for me, there are some corner cases in dynamic layout that can break the program. For that reason, I advised against using in Debian #406169 Some packagers (Cygwin, Gentoo and OpenSUSE) offer this feature.


The Xaw3d (three-dimensional) library dates to the 1990s. It is the most well-known fork of Xaw. The current version (starting from an import of Xaw3d 1.5 and 1.5E in 2011) is in Xorg's git. Xaw3d 1.5 was released in May 1998. Following a beta (November 1992), the initial release was 0.6 (March 1993). A few of those older versions could be found here:

but that is defunct, likewise most of the sites listed in's mirrors.

provide only the newer releases. There are a few mirrors which are reasonably complete in 2022, e.g.,

The gitlab repository begins with the last of those snapshots.


The developer's page for XawPlus is long gone, without an archival copy (perhaps since 2010, given the hint in FreeBSD ports, which confirmed that it was not available in September 2011):

Like, the sources are hard to find. I have collected the sources from the mirror of mentioned above:



There is a developer's site for neXtaw:

neXtaw is a replacement library for the Athena (libXaw) widget set. It is based on Xaw3d, by Kaleb Keithley and is almost 100% backward compatible with it. Its goal is to try to emulate the look and feel of the N*XTSTEP GUI.

neXtaw was created by Alfredo Kojima, before he started working on -- and became totally absorbed by -- Window Maker. neXtaw was maintained by Carlos A M dos Santos from 1999 to 2001, when I (Ulric) took over.

However it has not been updated since 2003:

I have collected those sources, adding an older version (from the Debian archive):


My involvement

As a long-term user of Xaw and its variants, I have an interest in keeping those working. One aspect of that entails cleaning up compiler warnings as discussed in my “Lint Tools” page.

In addition to test-builds with different compilers, as outlined in the section on Build-Scripts, I have used scripts build-lib-xterm (since 2003) and build-lib-vile (since 2010) to test xterm and vile with these libraries. The latter also tests building vile with termcap, curses, etc., which is a different topic.

Initially, I found it sufficient to just make a custom build of whatever flavor of Xaw my machine lacked, but after a while realized that a couple (XawPlus and neXtaw) were not generally available via packages. That became more of an issue beginning in 2010 when I switched to development using virtual machines (increasing the number of machines to install and upgrade). Because I was developing test packages for my other programs to ease the installation of machines that I use for checking ports, I did the same for these.

These four libraries are not all the same source:


In addition to cleaning up compiler warnings, there are chunks of obsolete code in the libraries which are due to having forked at different points without resyncing from the original code. For instance, a large part of the difference in XawPlus versus the X Consortium releases is due to AsciiSrc.c and MultiSrc.c not having been updated to reflect a newer release.

Though they started from the same point, the layout and configuration of the programs has changed:


Here are a few tables showing how these related libraries grew over time.


This table shows the growth of Xaw across the X Consortium and X.Org releases:

The other data should be self explanatory.

Release Date Text SLOCs Widgets
X.V11R2 1988/03/01 14069 13696 18
X.V11R3 1988/10/27 17274 16459 19
X11R4 1989/12/23 29174 28241 32
X11R5 1994/04/26 34064 33659 43
X11R6 1995/01/30 40874 40304 45
X11R6.1 1996/03/12 40711 40141 45
X11R6.3 1997/07/15 40713 40142 45
X11R6.4 1998/04/02 40309 39604 45
X11R6.5.1 2000/08/29 40436 39731 45
X11R6.6 2001/04/06 40883 40178 45
X11R6.7 2004/04/07 58730 56009 41
X11R6.8 2004/09/07 59817 57092 42
X11R6.9 2005/12/21 59997 57252 42

The increase between X11R6.6 and X11R6.7 is due to incorporating changes from XFree86 (mostly from 1998-1999, but as late as May 2003).


The following table summarizes the older versions of Xaw3d. The "difference" is measured with diffstat against the corresponding X release of Xaw, ignoring blanks.

Release Date SLOCs Widgets X Release Difference
Added Deleted Modified Equal
Xaw3d.R4 1992/11/13 19637 35 X11R4 +5676 -288 !1152 =27349
Xaw3d-0.6B 1993/03/19 22889 50 X11R4 +11155 -701 !2656 =25432
Xaw3d-1.0 1994/07/20 27636 49 X11R5 +16634 -176 !2713 =28800
Xaw3d-1.1 1995/04/03 27651 49 X11R6 +6277 -166 !805 =39709
Xaw3d-1.2 1995/08/25 27826 49 X11R6 +8073 -175 !835 =39670
Xaw3d-1.3 1996/06/03 26469 49 X11R6.1 +5221 -77 !818 =39492
Xaw3d-1.4 1998/04/21 26430 49 X11R6.4 +5045 -151 !1479 =38351
Xaw3d-1.5 1998/05/15 26456 49 X11R6.4 +5083 -172 !1516 =38293
Xaw3d-1.5E 2003/03/09 28510 50 XFree86 4.3.0 +7913 -10841 !18026 =22026

The last entry (for XFree86) is given to show that although Xaw3d used parts from that source, that it was still far from using all of the improvements made by XFree86 developers over the preceding five years.


Release Date SLOCs Widgets X Release Difference
Added Deleted Modified Equal
XawPlus-2.0 1999/02/17 37351 39 X11R5 +5251 -691 !1763 =30731
XawPlus-2.0.1 1999/04/23 37333 39 X11R5 +5258 -699 !1771 =30715
XawPlus-2.0.2 1999/05/18 37436 39 X11R5 +5396 -718 !1814 =30653
XawPlus-2.1.0 1999/11/16 37839 38 X11R5 +5970 -717 !1928 =30507
XawPlus-3.0 2000/05/07 42771 38 X11R6.4 +5317 -929 !2846 =35299
XawPlus-3.0.1 2000/05/14 42771 38 X11R6.4 +5324 -929 !2846 =35299
XawPlus-3.1.0 2000/09/13 43778 38 X11R6.6 +6152 -889 !2801 =35926

Although the comments in the sources as well as the accompanying sample clients hint that development started in 1996-1997, the oldest available release is 2.0 in 1999. An undated README file summarizes the features of each release.


Release Date SLOCs Widgets X Release Difference
Added Deleted Modified Equal
neXtaw-0.5.1 1997/01/14 45172 37 Xaw3d-1.3 +2699 -444 !918 =44299
neXtaw-0.9 2000/05/16 46653 37 Xaw3d-1.5 +8088 -514 !919 =43459
neXtaw-0.10 2001/12/13 49780 37 Xaw3d-1.5 +26563 -307 !900 =43178
neXtaw-0.11 2002/01/26 49788 37 Xaw3d-1.5 +38717 -307 !900 =43178
neXtaw-0.12 2002/03/14 49788 37 Xaw3d-1.5 +38305 -307 !900 =43178
neXtaw-0.13 2003/01/15 49887 36 Xaw3d-1.5 +41458 -298 !901 =43186
neXtaw-0.14 2003/02/26 50047 37 Xaw3d-1.5 +41683 -298 !908 =43179
neXtaw-0.14.1 2003/08/22 50033 37 Xaw3d-1.5E +40085 -1821 !1994 =42308
neXtaw-0.15.0 2003/09/02 51228 37 Xaw3d-1.5E +40085 -1821 !1994 =42308
neXtaw-0.15.1 2003/09/19 51267 36 Xaw3d-1.5E +40183 -1852 !2025 =42246

Like XawPlus, the original developer for neXtaw provided an undated summary of changes for each release. Subsequent developers gave dates for their changes, but fewer details.



Compare xvile/xterm for Xaw widgets
xvile xterm
xvile - Xaw xterm - Xaw


Compare xvile/xterm for Xaw3d widgets
xvile xterm
xvile - Xaw3d xterm - Xaw3d
xvile - Xaw3dxft xterm - Xaw3dxft


Compare xvile/xterm for XawPlus widgets
xvile xterm
xvile - XawPlus xterm - XawPlus


Compare xvile/xterm for neXtaw widgets
xvile xterm
xvile - neXtaw xterm - neXtaw