This page contains release notes from current and past versions of Ukelele. The main Ukelele page contains current information and downloads.

Versions

1 March 2024 — Released version 3.5.12

Dragging to an key with no output was disabled. This is fixed.

In the Preferences window, clicking Reset did not update the display to show the new value if the option of saving the XML as characters or code points was changed. This is now fixed.

There was an intermittent problem with the size of a window when Ukelele started up, often being a bit too small. At the expense of restoring windows exactly as they were, Ukelele now opens all keyboard windows at their ideal size, if they fit on the screen.

When duplicating a keyboard layout in a collection, the icon and intended language are also copied.

The list of keyboard types in the Keyboard Types dialog had a white background, even in Dark Mode, so the list was not readable. It now has the default background.

The intended language sheet no longer retains the search strings from when it was previously used.

Rearranged the pages in the manual so that page numbers in the footer match the page number within the PDF file, so the introduction starts on page 5 rather than page 1.

19 February 2024 — Released version 3.5.11

Reworked all dialogs so that they cannot be made too small and non-functional.

Creating a keyboard layout from the current keyboard input source is a bit more efficient, using a new capability of Apple’s tool.

If the user chose Import Dead Key and then cancelled in the first dialog, Ukelele would be stuck, unable to do anything further. This is fixed.

Some old code that is no longer used was removed.

13 February 2024 — Released version 3.5.10

Worked out some issues with autolayout, particularly with the Edit Key dialog.

19 January 2024 — Released version 3.5.9

In a dead key state, most keys were covered with a grey overlay. This has been fixed.

3 January 2024 — Released version 3.5.8

Changed the minimum macOS version to 10.13 (High Sierra). If you are running versions from 10.9 (Mavericks) to 10.12 (Sierra), you should not install this update.

Another fix to the problem with keyboard layouts based on the current keyboard input source with names that have characters that cannot be represented in MacRoman.

Improved the error message when the converter tool fails to create an XML version of the current keyboard input source.

Avoid a crash when changing output for a key in a JIS-only set if there was no output previously.

When you close a collection window, all the keyboard windows should now close, which avoids a range of possible crashing scenarios.

Update the Unicode database to version 15.1.0, the Language Subtag Registry to 2023-10-16, and Boost (internal library) to 1.84.0.

Changed a few things in autolayout which could cause some strange behaviour when resizing windows.

11 August 2022 — Released version 3.5.7

Fixed a problem with creating a keyboard layout based on the current keyboard input source, where the name contained non-ASCII characters, which were mangled. The name should come through as long as it is representable in MacRoman.

Updated the tool used to generate the XML file from the current keyboard input source, which fixes a bug that caused it to fail sometimes.

Updated the Language Subtag Registry to the version of 2022-08-08.

Changed some widths of columns in the keyboard collection window, which should hopefully make it behave better.

21 June 2022 — Released version 3.5.6

There is now an option to indicate that the icon for a keyboard layout is a template icon. This requires a black and white icon, and it will automatically switch in macOS 12.4 (Monterey) and later.

Fixes a bug in replacing a modifier set via undo.

Update language registry to 2022-03-02, and update manual.

7 February 2022 — Released version 3.5.5

Adding a new modifier combination and choosing to copy a current key map could cause a crash. This has been fixed.

A new option is available in the Edit menu and the contextual menu, Copy Output Information. This copies the description of the output of the current key that you see in the output inspector onto the system pasteboard so that it can be pasted somewhere else.

A new section of the tutorial has been added, courtesy of Alfred Helmerich.

Updated the language subtag registry to the version of 2021-12-29.

Updated Sparkle (auto-update framework) to 1.27.1, and Boost framework to 1.78.

27 September 2021 — Released version 3.5.4

A library was missing in version 3.5.3. This has been corrected.

27 September 2021 — Released version 3.5.3

Updated to Unicode Character Database version 14.0. Many descriptions of characters have been changed.

Correct URLs in the Help menu.

There are two ways of coding the .icns file (the size can include the header or not), and both are now accepted.

Update Sparkle (auto-update framework) to 1.27.0.

11 March 2021 — Released version 3.5.2

The tool used to create a keyboard layout based on the current keyboard input source has been updated to a universal binary, so it runs natively on Intel and Apple Silicon.

Updated to the 2021-03-05 version of the Language Subtag Registry, adding several new languages.

Updated Sparkle (auto-update framework) to 1.25.0.

12 February 2021 — Released version 3.5.1

The option in preferences for the XML to encode non-ASCII characters was not working. This is fixed.

The Quick Look plugin was installed in the wrong location, and is now put in the right place.

14 December 2020 — Released version 3.5.0

There were various problems with the Keyboard Type dialog, including a potential crash. These have been fixed.

Updated the manual. All the currently available keyboard types are now laid out in an appendix.

25 November 2020 — Released version 3.5b1

Now a universal binary, supporting Intel and Apple Silicon architectures.

Fix an issue where trying to capture the current keyboard input source could fail, usually on Catalina or later, when there was a non-ASCII character in the name of the keyboard layout.

Made the default keyboard type an ISO rather than ANSI type, so that users with non-Apple keyboards will see the extra key defined in the ISO type.

Fixed a potential memory problem.

Updated to the latest version of Apple’s tool for creating XML versions of installed keyboard layouts. There are still some bugs in this, which can cause some keyboard layouts not to be captured by Ukelele, and sometimes gives odd names to the converted keyboard layout.

Use latest versions of the Unicode Character Database (13.0.0), Language Subtag Registry (2020-09-29), Sparkle (1.24.0) and Boost (1.74).

24 February 2020 — Released version 3.4.2

Fixed a problem where editing modifiers for a keyboard layout with simplified modifiers would bring up an unresponsive dialog.

17 February 2020 — Released version 3.4.1

Improved the support for VoiceOver to enable a better experience for blind users.

Added a command to the Help menu to show a window with some trouble-shooting tips.

Changed the preferences to indicate the effect of saving the XML file with code points rather than characters.

Updated the manual.

Updated Sparkle and Nano frameworks.

19 November 2019 — Released version 3.4

Solved a problem where some open file sheets would not work, particularly with Catalina.

New location for the version check file for software update.

Fix an allocation error that may cause a memory leak.

23 October 2019 — Released version 3.4b3

Ukelele is now signed with an SIL development and distribution certificate rather than a personal one.

Ukelele now has a new site, https://software.sil.org/ukelele.

The manual has been completed with table of contents.

Ukelele Help has been a bit improved by the addition of a page “How do I…?”

Some further work-arounds for issues with the tool used to create a keyboard layout from the current input source.

16 September 2019 — Released version 3.4b2

The Sparkle framework was updated in 3.4b1 to version 1.21.3. This brings a new method of signing, and the key was left out in that release. It has been added, and a few other wrinkles in the signing/notarising process have hopefully been fixed.

5 September 2019 — Released version 3.4b1

A new “quick entry” mode has been implemented, allowing the user to add output for many keys in a more streamlined way.

Various internal components have been updated for use on macOS 10.14 (Mojave) and later, so that Dark Mode is now supported.

Ukelele is now notarised, so it can be installed on macOS 10.15 (Catalina).

There is a new option for keyboard layouts within a collection to allow them to participate in keyboard switching between Latin and non-Latin scripts using the caps lock key. Although this can be set on any version of macOS that Ukelele supports, the keyboard switching only happens on macOS 10.15 (Catalina) and later.

If an icon file is not valid, a message is shown rather than silently failing.

Changing the name of an action or state could result in an invalid XML file if certain XML-reserved characters were used. This is now fixed.

A new version of the tool to convert the current keyboard input source to XML has been provided for use with macOS 10.15 (Catalina) and later. There is a bug in this, which may lead to an extra character at the end of the name, but this is easy to change within Ukelele.

Updated the Unicode database to the Unicode 12.1 standard.

Updated the language registry to that of 2019-04-30.

The manual has been updated to reflect changes, but final formatting and table of contents still need to be completed.

18 January 2019 — Released version 3.3

The information panel was not reflecting changes to the keyboard type. This is fixed.

The tutorial was updated to reflect Ukelele 3.3.

4 January 2019 — Released version 3.3b4

The Organiser window now resizes more intelligently, expanding the lists, not the blank space.

The installer application used on exported disk images has a slightly revised interface.

Certain keyboard layouts that had been edited outside Ukelele could cause a crash, particularly when switching to the Modifiers tab. This is fixed.

The previous beta bundled a version of iconutil, which did not work on older macOS releases. The built-in version is now used, which should resolve issues in getting an icon when creating a new keyboard layout from the current keyboard input source.

2 January 2019 — Released version 3.3b3

Rearranged the File menu to put the install commands in a submenu.

Updated the manual.

When installing a keyboard layout not in a keyboard layout collection, the previous version of Ukelele tried to move an icon file even if there was none, generating an error dialog. This is fixed.

There is an unsolved crash for some users when creating a keyboard layout based on the current keyboard input source. Some logging has been added to help diagnose the issue.

18 December 2018 — Released version 3.3b2

Attaching an icon now works for keyboard layouts that are alone, not part of a collection. The organiser should also install and uninstall the icon along with the keyboard layout

The organiser now reminds you to log out whenever you install a keyboard layout.

There is now an item in the File menu, Install…, which opens the organiser.

Creating a keyboard layout based on the current input failed on systems prior to macOS 10.12 (Sierra). This is fixed.

If you removed a key map, and then used undo to replace it, the default index might be incorrectly set afterwards. This is fixed.

4 December 2018 — Released version 3.3b1

The mechanism for installing keyboard layouts has been reworked. Instead of doing it directly within Ukelele or indirectly through Keyboard Juggler, there is a new window, the Organiser, which brings the functionality of Keyboard Juggler into Ukelele. This removes the need for the helper application previously used by Ukelele. It also incorporates some Swift code, requiring macOS 10.9 (Mavericks) as the oldest supported version of the operating system.

The installation disk image that is now exported is hopefully more useful, with an app to install rather than a symbolic link. This allows the user to install for the current user, which is the preferred location for macOS 10.13 (High Sierra) and later.

Updated to Unicode 11.0.

Updated the language database to the Language Subtag Registry of 2018-10-31. This is used for specifying the intended language of a keyboard layout.

There is now a display of information about the current keyboard type in the keyboard window.

Some sanity checking of icon files now gets done when adding them to a keyboard layout, to ensure that they really are the right kind of files, not a different format with just the extension changed to .icns.

Added an option not to show symbols, but show the actual characters on key caps.

Keys whose codes are otherwise unknown are now labelled as ordinary keys, so you can change their output. This is relevant mostly for non-Apple keyboards, but potentially also for Japanese keyboards.

Changed the method of copying the icon when creating a keyboard layout from the current keyboard input source. This solves a crash in macOS 10.14 (Mojave).

Updated to Sparkle 1.20 (autoupdate mechanism).

When producing the XML file, Ukelele now uses spaces rather than tabs, which may resolve some issues in macOS recognising the keyboard layout as valid.

Fixed an issue where undo would not work correctly when the user deleted a dead key state and the keyboard layout had inline actions (meaning it was probably created by hand, not in Ukelele).

8 October 2017 — Released version 3.2.7

When a key’s output in a dead key state did not exist, and when that key only had one output (technically, no action element, just output), changing the output to the existing output caused Ukelele to assume that it was not changing anything, so nothing would happen. Worse was that you could change it to something else, and then undo would not do the correct thing. This has now been fixed.

Some dialogs had some issues with autolayout, causing elements such as buttons to appear in the wrong place. These have been fixed, hopefully.

Updated the manual and help to advise installing keyboard layouts for the current user only when on macOS 10.13 (High Sierra).

Fixed a typo in the Edit menu.

30 September 2017 — Released version 3.2.6

When changing the script of a keyboard layout, the ID was not being set correctly (the old ID was kept), causing problems with clashing IDs. This is fixed.

When changing the name of a keyboard layout, the localised names were not being changed. This is being done correctly now.

Choosing a keyboard type with the description “unknown”, usually “Unknown (ID = 22)” caused an exception which made subsequent work unreliable. The cause has been repaired.

The Enter Dead Key State contextual menu for a dead key now goes directly to the state triggered by the dead key.

The contextual menu for a key now contains an Edit Key… menu item to open the Edit Key dialog for that key.

Updated to the Unicode 10.0.0 database and the Sparkle 1.18.1 auto-update framework.

The installer disk image is now signed, which should allow Ukelele to install without going through the Gatekeeper dialog.

When creating a new keyboard layout from the current keyboard input source, the name is now automatically changed to be different from the original name, to avoid the problem of duplicate keyboard layout names.

20 April 2017 — Released version 3.2.5

If the name given to a keyboard layout contained an XML special character (left and right angle brackets, ampersand, single and double quotation marks), Ukelele would generate a file which was invalid XML. The name is now encoded and decoded correctly.

Removed some more unused code.

10 April 2017 — Released version 3.2.4

This release corrects the incorrect upload of version 3.2.3.

An error in uploading the last release meant that it wasn’t available.

Removed some unused code.

24 March 2017 — Released version 3.2.3

This release fixes a bug and adds a feature.

A keyboard layout with two actions with the same id, possibly one encoded as an XML entity and the other not, would cause a crash. Ukelele now brings up a dialog showing what the error is.

The “Sticky Modifiers” and “JIS Only” selections in the toolbox are now remembered and restored when quitting and restarting Ukelele.

Updated Sparkle framework (for auto-update) to 1.17.0.

15 February 2017 — Released version 3.2.2

This release fixes two bugs.

The tool to convert the current keyboard input source to a Ukelele-compatible XML file sometimes produces an incorrect script code, which makes the keyboard layout unreliable. Script codes and IDs are now fixed automatically.

Changing the name of a keyboard layout in the inspector would deselect the keyboard layout in the collection window, and a subsequent change would cause a crash. This is fixed, as well as restoring the selection appropriately when making other changes.

7 January 2017 — Released version 3.2.1

This release fixes an issue with the Sparkle framework, so that, once you have updated to 3.2.1, future updates will not be marked as insecure.

Add missing resources to ensure that Sparkle sees this as a secure update.

4 January 2017 — Released version 3.2

This release takes version 3.2 out of beta, and has minor changes since the last beta release.

Ukelele will not open a keyboard layout or collection that has been already installed, and suggests editing a copy and installing the new version.

Some tweaking of the names used in the Undo commands.

Updated the Sparkle framework (for auto-update) to version 1.15.1.

21 December 2016 — Released version 3.2b3

This beta release includes several bug fixes and updates the tutorial.

Several controls in the keyboard layout collection window were non-functional. This has been fixed.

Some menu items were inappropriately enabled for keyboard layouts not in a collection, and selecting them either did nothing or caused a crash. They are now enabled only when appropriate.

Creating an empty keyboard layout or capturing the current input now creates a default English localisation.

There were several problems with undo, mainly related to sorting the tables of keyboard layouts or localisations in a collection. They have been fixed.

Updated the tutorial’s screen shots to the latest version.

16 December 2016 — Released version 3.2b2

This beta release includes a bug fix and updated help.

Keyboard layouts without an intended language could cause a crash in the collection window. This is fixed.

Updated Ukelele Help.

15 December 2016 — Released version 3.2b1

This beta release includes several new and updated features.

Keyboard layout collections can now be localised. This means that the name of each keyboard layout can be shown correctly in various languages. This involves a new look for the collection window, which now has two tabs, plus new commands and dialogs.

When you create an installer disk image, the Keyboard Layouts folder is now called “Drag here to install”, which is hopefully clearer for people to use.

The manual has been updated.

Updated the language tag registry to that of October 2016.

When you opened the colour theme editor and selected a colour, the discrete GPU was activated, which could lead to increased power consumption. This is now avoided.

27 September 2016 — Released version 3.1.1

This release includes several bug fixes.

All key output was being displayed as white, which meant that printing did not work. Fixed.

When creating a keyboard layout with standard key maps, the space bar is populated with a space for no modifiers, shift and caps lock.

Fixed the creation of numbers in copies so that they work correctly when the name ends in “ copy X9” where X9 is a two or more digit number ending with the digit 9.

If a keyboard layout’s name contained characters that also had a decomposed form, problems could arise due to mismatch between the decomposed and precomposed forms, largely (though not entirely) related to setting the intended language. Hopefully, the fix here will solve the issue.

Removed some redundant code.

Updated to Xcode 8.

14 September 2016 — Released version 3.1.0

This release, the first full release of Ukelele 3.1, includes a changed feature and updated documentation.

The Duplicate Keyboard Layout command for a keyboard layout collection now creates a duplicate keyboard layout within the collection, rather than as a separate, unbundled keyboard layout.

Updated the manual and help.

6 September 2016 — Released version 3.1b3

This release, the third beta release of Ukelele 3.1, includes some bug fixes.

Make the preference setting for encoding non-ASCII code points actually work.

When a keyboard layout could output characters outside the Basic Multilingual Plane, the maxout setting for the keyboard layout could be calculated as shorter than it should be, which in turn could lead to odd behaviour of the keyboard layout in use. This has been fixed.

31 August 2016 — Released version 3.1b2

This release, the second beta release of Ukelele 3.1, includes some bug fixes.

Various issues in key display fixed, including increased line space to avoid some clipping and some scaling issues.

When showing the output of a key that has no output in the current dead key state, the dead key shading was applied based on the previous dead key state. It now shows the shading appropriate for the current dead key state.

Updated the manual and tutorial, mainly the screen shots.

25 August 2016 — Released version 3.1b1

This release, the first beta release of Ukelele 3.1, includes some new or reworked features and several bug fixes.

Reworked the code to display the output of a key. It now should look correct with multiple diacritics, though clipping may occur.

When changing the scale of the keyboard view, the output also changes scale.

Add a button to remove the language attribute of a keyboard layout.

Update terminology from bundle to collection.

Fix a bug that made the scale combo button show the wrong value.

Work around a bug that caused a crash when the pointer was over a key that had a non-ASCII character in the information (such as $).

Deleting the last keyboard layout in a collection and trying to undo the deletion caused a crash. Fixed.

Change the New Keyboard Layout behaviour to offer choices in the base layout, caps lock and command modifier combinations, as in a new standard keyboard layout in a collection.

The display now updates correctly after changing the modifier combinations.

Updated and extended the tutorial, which is now a PDF document rather than HTML.

Since changing the output of the F-keys (F1 through F19) was of no use, the F-keys are no longer editable.

When a user tries to edit the output of a special key the first time, a warning dialog is presented to offer alternatives.

Updated the manual.

8 August 2016 — Released version 3.0.5

This release of Ukelele fixes several bugs.

Buttons and menu items are enabled only as appropriate when a keyboard layout collection contains no keyboard layouts.

Importing a dead key did not work, with various ways that it could crash. These have been fixed, so it should be working as expected now.

When opening a keyboard layout, some checking is done to identify and report some errors that might arise with keyboard layouts that have had the XML file directly edited (in a text editor, not in Ukelele).

Updated the Unicode database to version 9.0.0.

Disable deleting a modifier combination if it’s the only one defined.

When adding a new key map, the dialog now picks the empty key map as the default, rather than whatever was previously chosen, which wasn’t working correctly.

If a keyboard layout collection had internal folders named without normal capitalisation, Ukelele would report that the bundle was invalid. This has been fixed.

10 June 2016 — Released version 3.0.4

This release of Ukelele fixes several bugs.

Fixed issues of printing and saving with keyboard layouts not part of a keyboard layout collection.

Drag and drop of modifier combinations now works correctly.

Creating a new key map as a copy of an existing key map produced an invalid keyboard layout. This has been fixed.

The remove button for modifier combination sets is enabled appropriately.

Fixed the symbol for the help key.

30 March 2016 — Released version 3.0.3

This release of Ukelele fixes a bug and updates some features.

Updated Sparkle (automatic update support) to version 1.14.0. This removes some issues. {em:Ukelele was never susceptible to the http flaw, as it has always used https for updates.}

Updated Boost (utility framework) to version 1.60.

Preferences were not being updated correctly, making some impossible to change (particularly the keyboard type). This has been fixed.

The XML output has been tweaked so that attributes now appear in the order that you would expect. In theory, this makes no difference, but it does make the XML easier to understand for a human reader.

Updated the manual in various places, including more explanation of unlinking, of creating keyboard layouts with different key maps for command and/or caps lock keys, and an updated list of the languages supported by Apple for Press and Hold.

Updated to the latest version of the Language Subtag Registry.

14 January 2016 — Released version 3.0.2

This release of Ukelele fixes a bug and introduces some new features.

When double-clicking a key, sometimes the output would appear as doubly encoded XML (e.g.  rather than ). This has been fixed.

All of the sample keyboard layouts have been converted to Unicode rather than other scripts.

You can now remove an icon or language for a keyboard layout in a keyboard layout collection.

Removed some unused code and cleaned up some other internal things to make preparation for some future features.

Keyboard IDs are now set automatically, so that they will always match the selected script, and the user is never asked to set the ID, though it can be seen in the inspector window.

15 December 2015 — Released version 3.0.1

This is a bug-fix release of Ukelele.

When running on a recent Mac (iMac 5K, MacBook 12″, possibly others), Ukelele didn’t recognise the keyboard type, and showed a blank keyboard window. Try to change the keyboard type from the View menu also failed. In these cases, Ukelele will use a default keyboard type.

20 October 2015 — Released version 3.0.0

This is the first full release of version 3.0, after the beta testing period has finished.

Corrected the problem that the alias to the Keyboards Layout folder did not work as expected. This also resulted in a smaller file size for the created disk image.

The name of the keyboard layout collection or keyboard layout is now suggested as the initial name for the disk image..

14 October 2015 — Released version 3.0b6

A new feature has been added, to create a disk image for distributing keyboard layouts. The disk image has the keyboard layout collection (or plain keyboard layout) and an alias to the Keyboard Layouts folder in Library, which allows the user to drag and drop the keyboard layout (collection) to install.

Temporary files created when creating a keyboard layout from the current keyboard input source are now cleaned up, rather than leaving them to be removed on the next system reboot.

2 October 2015 — Released version 3.0b5

There were issues when starting Ukelele without any previous documents open, leading to a non-functional keyboard layout window. This has been fixed.

When opening a keyboard layout not in a collection, two windows would be opened. This has been fixed.

If Ukelele’s preferences had an old colour theme name, but there was no colour theme with that name present, the keyboard layout window would be black. Ukelele will now use the Default colour theme in this situation.

Changed the menu item from just “New” to “New Keyboard Layout Collection” to make it clearer what would be created.

Assorted internal changes for compatibility with Xcode 7’s compiler.

21 September 2015 — Released version 3.0b4

When saving a keyboard layout collection (a bundle), the file names of the files for the keyboard layout(s) included in the collection have their names set so that they are consistent with the keyboard layout name. This is necessary for the language of the keyboard layout to be recognised by the system.

Bundle identifiers had two dots in a row, and this has been fixed.

10 September 2015 — Released version 3.0b3

Colour themes are now available again, with an editor so that you can change or create themes.

Earlier betas implemented pasting a key incorrectly, which led to the keyboard layout being invalid, so that it could neither be used nor opened by Ukelele. This has been fixed.

Trying to install a keyboard layout that had not been saved caused a crash. A warning is now shown, asking the user to save the keyboard layout before installing it.

Some fixes were made to show error messages correctly.

When an invalid keyboard layout was in a bundle, error messages were generated multiple times. Now only one error message will be shown, and Ukelele will not attempt to open it again.

The manual was updated to include the colour theme editor.

3 August 2015 — Released version 3.0b2

A change was made so that Ukelele should work successfully on systems running OS X 10.8 (Mountain Lion).

An error in the XML generated by Ukelele 3.0b1 caused the system to reject keyboard layouts. This has been fixed.

The preferences to change the default theme from Default to Print failed to work. It now works as expected.

Text in key caps for small sizes (such as function keys and arrow keys on MacBook models) was positioned too high, and the top was cut off in print view. This has been repositioned.

When changing output of a key using the popover (default, rather than sheet), the input text is accepted if the user clicks outside the popover, not just when the Done button is clicked or the user presses the return key. As the change can always be undone, this was seen as more in keeping with Apple’s guidelines.

27 July 2015 — Released version 3.0b1

Ukelele 3.0 is a completely new version, rewritten almost entirely apart from the core code that handles the actual keyboard layout structure.

Ukelele uses the new document model introduced by Apple. This means that all changes are automatically saved rather than having to be saved by the user. To create a new document, choose Duplicate from the File menu, give a new name, and save to the new location.

The preferred document format is now the keyboard layout collection, which is also referred to as a bundle, after the way that it is packaged. Keyboard layout collections can contain one or more keyboard layouts, with optional icons and intended languages for each of them.

The main keyboard layout window now uses a tabbed interface rather than having a drawer for the modifiers and the (somewhat confusing) comments view.

Ukelele now has the capability to install keyboard layouts itself. You can install for yourself, or for all users on your computer, without having to save the keyboard layout and drag it into the correct folder in the Finder.

Some interactions have been simplified by introducing the idea of selecting a key and then operating on it. So, for example, you could select a key and then turn it into a dead key with a single click and a single dialog.

Ukelele provides a Quick Look capability, giving you a way to see a keyboard layout from the Finder.

A concept of “simplified modifiers” has been introduced. Since no current Apple keyboard, or any Cocoa-based application, distinguishes between left and right shift, option or control keys, treating them all as the left modifier key, it is only worthwhile using left keys. Ukelele can simplify the modifier combinations defined by a keyboard layout to eliminate use of separate left and right modifier keys. This makes the modifier combinations easier to understand, without losing anything in current Apple systems.
Editing key output is now done with a popover, hopefully an easier way to do it.

The inspector window has been redesigned with a tabbed interface. New information fields include which modifiers are currently active and which modifier set they match.

When creating a new keyboard layout, you have a wider choice of standard keyboard layouts: QWERTY, AZERTY (French), QWERTZ (German), Dvorak and Colemak. Also, you can create a keyboard layout that combines two or three, with the command and/or caps lock key switching between them.

Many dialogs have been redesigned, sometimes combining two or more in a series so that an interaction is completed in a single dialog.

8 March 2014 — Released version 2.2.8

When creating a new key map as a copy of an existing map, the new key map had the same index as the old one, so the keyboard layout was invalid.

9 January 2014 — Released version 2.2.7

When creating a new key map as a copy of an existing map, the selected index was off by one.

Updated the manual and help with reference to Mavericks.

18 November 2013 — Released version 2.2.6

Some user keyboard layouts cause the converter to fail when using New From Current Input Source, and that caused a crash in Ukelele 2.2.5. Now you will get an error message about the XML file being invalid. It would be better to use New Based On… and open the original XML file.

9 November 2013 — Released version 2.2.5

When creating a keyboard layout based on an existing keyboard layout or from the current keyboard input source, a random keyboard ID is generated.

New state names are validated to avoid some obscure problems (basically, don’t call a state “0” or “none”).

14 December 2012 — Released version 2.2.4

Code-signing should now be correct for Gatekeeper on OS X 10.8 (Mountain Lion).

Updated Ukelele Help.

1 October 2012 — Released version 2.2.3

Creating a new keyboard layout from the current keyboard input source was crashing on PowerPC machines due to the tool used being Intel-only. That tool is now a universal binary, so it should work correctly on PowerPC.

29 September 2012 — Released version 2.2.2

Fix a crashing bug when creating a new modifier combination and choosing a copy of an existing key map.

Ensure that you cannot create a dead key state with no name, which would cause the keyboard layout to be invalid and hence not usable.

Code-signed for Gatekeeper.

Toolbar buttons updated for high-resolution (Retina) displays.

20 June 2012 — Released version 2.2.1

There is a new option in the preferences to generate pre-10.5 compatible bundles. These should still work in 10.7 and later for “press and hold”.

Fixed a problem in the Save As Bundle dialog where the Save button was labelled inaccurately as Open.

The interface is partly adapted for high-resolution displays such as the Retina MacBook Pro. Text should appear sharp, but the toolbar buttons and other graphic elements such as icons are not yet converted for high-resolution display.

31 May 2012 — Released version 2.2

By saving a keyboard layout in a bundle, it will become compatible with the “press and hold” mechanism for entering diacritics, introduced in OS X 10.7 (Lion). For this purpose, an “intended language” can be supplied (default is the system language), which will determine which possibilities are offered in the pop-up. However, such bundles may not work with OS X 10.4 (Tiger) and earlier.

Change the colour themes to allow more choices. For each category of key (normal, dead key, selected) and state (up or down), the gradient type, colours and text colour can be set individually.

Automatically repair missing key maps when opening a keyboard layout, putting empty key maps with only the special keys defined.

Detect and repair an invalid keyboard ID when opening a keyboard layout, automatically generating a valid keyboard ID for the script specified in the keyboard layout.

Open files now remember the colour theme, keyboard type and zoom level after quitting Ukelele and restarting, as long as files are automatically reopened (Lion and later).

When editing output of a special key, there is now a button to insert the standard output automatically.

Updated the manual extensively to reflect recent changes and newer versions of OS X.

14 February 2012 — Released version 2.1.10

Restore a missing file which caused the button to add a modifier set to be invisible.

Further fixed the behaviour of adding a creation comment (in 2.1.9 it was adding a comment every time the file was opened).

Fixed some situations where the selected colour theme was ignored and the default theme was used.

3 February 2012 — Released version 2.1.9

Restore a missing file which caused colour themes not to work for most people.

Fix the print dialog extension (PDE) so that the Ukelele options in the print dialog now appear and work again.

New keyboard layouts now get the appropriate creation comment added.

Fixed some problems with adding comments.

21 October 2011 — Released version 2.1.8

Reenable the “New From Current Input Source” command when running in Mac OS X 10.7 (Lion), as there is a new version of the helper utility.

Add a preference to allow the user to choose whether to reopen the documents that were open when Ukelele was last quit. This only applies to Mac OS X 10.7 (Lion), and allows the new default behaviour (resume) or the old behaviour (the user’s choice of creating a new document, opening an existing document, or doing nothing).

Update the Unicode tables to the current draft of the Unicode Character Database, version 6.1. Note that this is a beta version, with the formal 6.1 specification due in February 2012.

Minor updates to the manual to reflect changes with Lion.

3 August 2011 — Released version 2.1.7

Disable “New From Current Input Source” when running in Mac OS X 10.7 (Lion), as it uses some helper utilities that do not run on Lion (they are PPC-only). It is still available on earlier versions of OS X.

7 June 2011 — Released version 2.1.6

Fix a bug that could lead to a new keyboard ID being set to 0 instead of the value in the dialog.

Show the default output for special keys in the status bar when editing a key within the window.

12 March 2011 — Released version 2.1.5

Write characters outside the Basic Multilingual Plane as hexadecimal values, to get around an apparent bug in Apple’s XML parser.

Now using Cocoa versions of the Inspector and Toolbox.

17 December 2010 — Released version 2.1.4

When a new modifier combination was added, it did not affect the display in the Ukelele window immediately. This is fixed so that it shows up properly.

6 December 2010 — Released version 2.1.3

Fix a crash when trying opening a keyboard layout within a bundle when either the bundle did not contain any keyboard layouts, no keyboard layout was chosen, or the cancel button was pressed.

24 November 2010 — Released version 2.1.2

Made some changes to the property list which may help with the problem of Ukelele appearing to claim non-Ukelele documents, particularly bundles.

12 November 2010 — Released version 2.1.1

Change the line endings to Unix line endings in the XML output file.

Improved formatting for XML files with multi-line comments.

30 October 2010 — Released version 2.1

Added a new preference which enables the user to choose to use a sheet dialog for editing key output on double-click (the previous behaviour, and the default) or edit in the same window.

Updated the Unicode database to version 6.0.

11 August 2010 — Released version 2.0.1

Corrected a problem which made keyboard layouts with no dead key states fail to work.

22 July 2010 — Released version 2.0

Corrected issues with French and Belgian keyboard layouts supplied with Ukelele which caused them not to open.

Made changes to the manual to better explain what is going on with control key combinations.

Improved a few error messages.

10 June 2010 — Released version 2.0b8

Fixed a bug that caused intermittent crashing when saving a file.

Fixed some problems with adding and deleting modifier combinations, some causing crashes, others creating keyboard layouts that could not be opened.

26 April 2010 — Released version 2.0b7

Fixed an issue with adding and deleting modifier combinations, which could lead to a keyboard layout that could not be used.

Implemented software update.

Found a work-around for keyboard layouts that have actions with an empty string for the id.

Updated the manual with a few fixes.

1 April 2010 — Released version 2.0b6

Replaced the colour options with a new preference panel, colour themes, which are now accessible from the View menu as well. Colour themes control all the colours of the keyboard, including background and text.

Updated the manual to incorporate changes since 2.0b1.

New feature to look up key strokes for a given output string. This is accessed from the Find item in the Edit menu.

Adjusted some code to prevent Ukelele producing a keyboard layout file that cannot be used by the operating system. Opening and saving a file should fix the problems in existing keyboard layouts.

Relaxed some restrictions related to using keyboard layouts with unusual key maps using base maps.

Created a user forum on Google Groups, Ukelele-Users.

9 February 2010 — Released version 2.0b5

Modified the code to save a file, hopefully avoiding a crash.

27 January 2010 — Released version 2.0b4

Instead of a black frame on dead keys, they are now a red colour, and the selected keys (for swapping keys) are framed.

The grey for printed keys that are down has been made a little lighter.

Support for opening files which are considered to be plain text has been re-enabled. Hopefully this solves problems in opening old files, without causing problems with saving them.

Key elements with empty output should be handle correctly now.

Symbols for non-printing characters should show up on non-standard keys.

25 January 2010 — Released version 2.0b3

Key colours are now user-configurable in preferences. Key up and key down have inner and outer colours, with a gradient from the outer colour at the corners to the inner colour in the centre of the key cap.

Key colours are swapped, so that the darker colour is now in the centre of the key, the lighter at the edges.

Crashes when moving from comment to comment have been fixed.

The problem solved in 1.8.4 with hand-edited files with gaps in numbering key maps has been solved in 2.0b3 as well.

Found a more robust solution for positioning text on the key cap.

A word of explanation about removing plain text support: This was only necessary for opening some old files, and was not a supported save format. Removing support avoids saving an unusable file.

20 January 2010 — Released version 2.0b2

Solved the problem of not launching on Mac OS X 10.4 (Tiger).

Changed the colour of the key caps to a darker blue, to increase contrast.

Moved the text down a bit on the key cap to provide more space for diacritics. This may not work all that well for different font sizes, and I will look at a more robust solution.

Printing now uses more printer-friendly colours — black on white, with no background colour, and grey highlights on modifiers that are down.

Fixed a crash if you clicked the “Create” button on the toolbar twice in a row.

Added QWERTZ as an option for new key maps.

Experimentally removed support for plain text files. If this causes problems opening files, then let me know.

Avoided creating empty action names, a potential problem.

15 January 2010 — Released version 2.0b1

Major rewrite, based on the Nano framework, meaning that it is restricted to Mac OS X 10.4 and later, but utilising many more modern features, such as sheets and drawers.

Redesigned interface, with a toolbar window and a drawer, bringing most elements into a single window.

The keyboard window is more scalable, allowing any value between 50% and 500%, including an option to fit the keyboard to the screen.

Printing is now implemented, with options of printing the keyboard layout with all dead key states and/or all modifier combinations.

Many interactions have been reworked, using a status bar to give instructions, leading to fewer dialogs that have to be navigated.

More information is now available about code points in the info inspector palette, based on the Unicode 5.2 standard.

Combining diacritics are now shown with a placeholder character, which is configurable in the preferences.

Comment handling is much improved, now handling all comments in the file, not just those at the beginning, and allowing comments longer than 255 characters.

New icons.

Support for bundles, so that keyboard layouts can be saved as bundles, or into existing bundles, optionally grouping the keyboard layout file with an icon file (usually the flag icon).

It is now possible to capture the current keyboard input source to create a keyboard layout. This allows easier conversion of older resource-based keyboard layouts, and use of the system’s keyboard layouts (which are no longer provided as XML as of 10.5, Leopard). Note that this facility requires Rosetta on Intel-based Macs.

The manual and tutorial have been rewritten to reflect the new version of Ukelele.

15 September 2009 — Released version 1.8.4

Fixed a problem with certain keyboard layouts that had been hand-edited to have gaps in the numbering of their key maps.

8 June 2009 — Released version 1.8.3

Keyboards with a Fn key did not show the delete key as a forward delete when the Fn or Num Lock keys were down. This is fixed.

Changed the output so that, if there are no actions, no actions section is in the XML. This may fix an issue introduced by a Security Update for 10.4.11.

30 April 2009 — released version 1.8.2

Fixed a hang when deleting the last comment in a keyboard layout.

Fixed a bug which caused a crash when trying to unlink a key with no output.

Fixed a bug in saving a keyboard layout when some of the headers were not specified.

6 January 2009 — released version 1.8.1

When Sticky Modifiers is on, the modifiers are returned to their state when the window is activated (such as after a dialog is dismissed), rather than going back to the state of the hardware keyboard modifiers.

Avoid a crash when you close a keyboard layout when you are in a dead key state other than state “none”.

Avoid a crash when editing a key with no output in the current dead key state that is not state “none”.

29 July 2008 — released version 1.8

We now remove unused actions when removing unused states, which improves the behaviour, removing more states.

Fixed a bug which occasionally made Ukelele crash when editing the terminator of a dead key state by double-clicking the dead key.

Fixed a bug which caused a crash on quit after adding a new modifier combination.

Fixed a bug which caused a crash when a dead key state had no terminator specified, usually when a keyboard layout has been edited outside Ukelele.

Updated the resources list to reflect a changed URL.

Fixed a bug that caused a crash when you tried to open a file that had illegal XML.

Fixed a couple of places where strings were not properly encoded for XML, leading to a possibility of getting a file which was not legal XML, and therefore the system could not use the keyboard layout, and Ukelele could not open it again.

A malformed file could cause a crash on save. This is fixed.

When you change the script code, a random keyboard ID in the appropriate range is chosen. Also, new keyboards have a random keyboard ID.

Updated the manual to include information on the correct ranges of IDs allowed for each of the different script types. Keyboard IDs may have more influence than is implied by Apple’s documentation, but this is far from certain.

Updated the help book a little to reflect changes in the program and in terminology used in the manual.

Updated the Unicode system keyboard layouts to have all the current control keys having default output (they got missed in 1.8b6).

12 March 2008 — released version 1.8b6

Fixed a bug that made keys appear selected when the {key:Num Lock} key was down.

Corrected the behaviour of the Apple Aluminium Wireless keyboard and MacBook (Late 2007), which have a {key:Fn} key, but no embedded keypad.

Provided a better error message when a non-keyboard layout XML file is opened.

Changed the way the XML is produced to adhere to part of the original specification (the {literal:when} element for state “none” must come first).

Added the current state and action names in the dialog asking for a new name.

Updated all the provided keyboard layouts, both System and Logitech, to have all control keys defined and to avoid numeric state names.

If you gave an empty string in a dialog that needed a non-empty string, you got stuck in a loop that wouldn’t accept the string until you clicked Cancel and tried again. This is now fixed.

Changed the display in dead key states so that only the output in the dead key state is shown. The previous behaviour was that keys that had only one output would show that, even if the key did not produce that output in the dead key state.

A completely rewritten manual is now included. Help files and an updated tutorial are still in progress.

6 November 2007 — released version 1.8b5

Apple has changed how the system keyboard layouts are organised, and so it is no longer possible to create a new keyboard layout based on a system keyboard layout. This option in the “New…” dialog is disabled on Leopard systems (but is still available on older systems).

5 November 2007 — released version 1.8b4

Made the default index a pop-up menu in the modifiers editor, so that you can change it there, as well as via the {menu:Keyboard} menu.

Added resources to allow the new Apple aluminium keyboards (both wired and wireless) as options in the keyboard type for display.

Added support for the new function keys {key:F17}, {key:F18} and {key:F19}. This produces a side effect that keyboard layouts will almost always warn that some of the control key output is missing. This is for {key:F16} to {key:F19}, so you should agree to add that output.

Double-clicking a control key with no output defined no longer silently adds the standard output.

Compiled under Xcode 3.0 on Leopard (Mac OS X 10.5), which hopefully makes it work on all systems from 10.2 to 10.5.

Added keyboard layouts from Logitech, converted from {literal:KCHR} to {literal:uchr}.

28 June 2007 — released version 1.8b3

Modified the new layout dialog to drop the “.keylayout” extension in the {menu:system keyboard layouts} popup menu.

The dialog box that comes up when you double-click a key now treats the {key:return} key as clicking {button:OK}.

When you copied a key, the {menu:paste} command didn’t become active immediately, but only after some other action (opening a dialog, switching windows, switching applications, or making a change to the keyboard layout). This is now fixed.

Added a new command to unlink a whole modifier set at once, which unlinks all keys with the same modifier combination.

Fixed a bug in adding a new modifier combination as a copy of an existing key map which made the keyboard layout invalid and so unusable.

Fixed the dialog so that requesting a Dvorak lower case keyboard layout for a new modifier combination actually works.

Added new options for AZERTY layouts (upper and lower case) when creating a new modifier combination.

Added a new reference to the links page of the manual, with pointers to resources for users with non-Apple keyboards (PC keyboards, if you like).

May 30, 2007: released version 1.8b2

Fixed an error in the Serbian keyboard layout.

Added keyboard flag icons for almost all the system keyboards.

Opening a keyboard layout is now somewhat faster.

The output inspector and key code floating windows now remember their position.

Made finishing a dead key an undoable action, which avoids a crash when undoing entering a dead key state when you had already left it.

Added a new command to “unlink” a key, so that editing a key’s output with one set of modifiers does not affect its output with a different set of modifiers.

Tried to fix a crash related to memory management, and also plugged a memory leak.

Fixed a typo that made the uppercase Dvorak layout created with a new modifier combination produce “e” instead of “E”.

I have begun a complete rewrite of the manual, but that isn’t ready for this release, so there is only the updates to the current manual and help.

March 13, 2007: released version 1.8b1

Universal binary, moving to Xcode.

New preferences for creating dead keys. Now, naming the dead key state and providing a terminator are optional. If you don’t provide a name, a default name will be used, and, if you don’t give a terminator, a null terminator will be created. This simplifies the creation of dead keys for most users.

Resolved a couple of places where the program could crash, including some memory management problems that could also cause memory leaks.

Fixed a bug which meant that, though technically correct, produced output that was perhaps not what Apple’s keyboard layout compiler expected. I suggest that all existing keyboard layouts be opened, a change made and then undone, and saved. This may help the system retain the correct keyboard, but I’m not sure about that.

The XML file is now indented to show structure.

New feature to swap two keys directly. This swaps everything associated with the two keys, including all modifier combinations and dead keys.

New feature of cut/copy/paste keys. As with swapping keys, this operates on all modifier combinations. Pasting is only allowed within the same keyboard layout — you can’t copy a key from one keyboard layout and paste it into another.

Provided some feedback to tell the user that a control key can’t be made into a dead key.

Updated manual and help files, and provided a tutorial.

Fixed some problems with some Central European keyboard layouts converted from Apple’s resource files: Czech, Czech-QWERTY, Estonian, Polish and Slovak. Changing some keys with the old versions caused problems with the space key, among other problems.

Removed the Japanese, Korean, Simplified Chinese and Traditional Chinese keyboard layouts, as they are of no use — the input methods don’t allow modified keyboard layouts, unfortunately.

Improved the display in dead key states, no longer showing the terminator when there is no output in that state, but rather showing a blank key.

August 8, 2006: released version 1.7

The feature added in 1.7b6 has been extended so that an untitled keyboard will be given the name from the file name whenever it is saved, not just the first time.

Correctly handle the case of changing a control key which had no output associated with it.

Change the behaviour when deleting a dead key, so that you don’t get the terminator in states other than state “none”.

Handle characters that need to be coded for XML in the name of the keyboard.

July 8, 2006: released version 1.7b6

Added a feature to add a name for the keyboard layout when saving for the first time, if the name hasn’t been set from within the program.

There is now a new preference, for the default keyboard to display if the system does not recognise the hardware keyboard attached to the computer.

The dialog for keyboard type (the keyboard displayed on the screen) has been modified to use two popup menus rather than a list and a popup menu.

The manual and help have been updated to reflect the latest changes.

The version for OS X 10.2 (Jaguar) now has a “J” at the end of the version number.

June 23, 2006: released version 1.7b5

Fixed more (I think all, this time) cases of the random crashes introduced in 1.7b2.

Validate Unicode values input as {literal:&#x…}; or {literal:&#…}; to ensure that only valid Unicode code points are generated. Code points in the surrogate ranges are not permitted. If this is a problem, please tell me!

Enforce a system-level restriction that the maximum number of Unicode characters generated by a single key is 20. Attempting to make the output longer than 20 characters will result in a dialog explaining that this is not allowed.

Version 1.7b3 introduced output of named entities (e.g. {literal:&}{literal:apos;}) in the keyboard layout file. These are not supported, so now numerical encoding is generated again.

June 8, 2006: released version 1.7b4

Fixed a second instance of the problem fixed in 1.7b3.

June 8, 2006: released version 1.7b3

Fixed a problem where a crash would occur some time after running the dialog from double-clicking a dead key, usually in the second time of bringing up that dialog.

Changed the code handling XML entities to produce named entities (e.g. {literal:&}{literal:quot;}) rather than numerical entities (e.g. {literal:&}{literal:#x0022;}).

May 23, 2006: released version 1.7b2

Added a new floating window, the Output Inspector, which shows the output of the key under the pointer as a Unicode code point. For dead keys, it shows the state entered by pressing the dead key, and the terminator for that state.

Added an option to the dialog when double-clicking a dead key. You can now choose to edit the dead key (i.e. enter the dead key state), as well as the previous options of changing the terminator or deleting the dead key.

Fixed a problem in handling code points outside the Basic Multilingual Plane when specified numerically.

Updated the manual more thoroughly.

May 15, 2006: released version 1.7b1

Provide some options when creating a new modifier set. The default is an empty key map, with only the control keys having any output set, but there are two new options: a standard key layout or a copy of another key map. The standard key layouts set the letter keys to the default US QWERTY or Dvorak key layouts in either upper or lower case. Copying an existing key map, for example making the caps lock initially the same as shift, is intended to save some extra work, by making you only specify what is different.

Allow navigation of bundles or packages, so that the user can open keyboard layouts that are bundled without having to manually open the bundle in the Finder and drop the keyboard layout file onto the Ukelele icon.

Updated help files and manual, including putting page numbers in the manual. Also, the references to web sites was revised, removing dead links and adding several new sites.

Fixed a bug that could cause a keyboard layout to become invalid when deleting output from a key in state “none”.

Fixed a bug introduced in version 1.6.6 which effectively disabled drag and drop when any modifiers were down, unless sticky modifiers was set.

Fixed a bug which meant that nothing was saved if the user double-clicked a key which didn’t already have output associated with it — the dialog ran, but the new output was not retained.

May 1, 2006: released version 1.6.7

Double-clicking a dead key changed the key with no modifiers (or, actually, what modifiers were current when the dialog ended). It is now fixed to behave as expected.

Added a section in the help and manual to explain the codes necessary to make keys into control keys such as Home, Page Up, arrow keys, etc.

Removed Hangul, SCIM & TCIM keyboards, as they are not useful on their own, since they are part of various input methods. At present, input methods are apparently not able to use other keyboard layouts.

Moved some initialisation code so that you don’t get warned about a missing KCAP resource when double-clicking a keyboard layout document.

February 24, 2006: released version 1.6.6

Improved the display when switching windows.

Try to solve a crash that some users get when working with dead keys (not too sure why it’s crashing, so I don’t guarantee it’s fixed).

Handle the case when a key is double-clicked and the output is deleted, when in a dead key state (gives the terminator, rather than a null output).

Show correct output in some dead key cases, where null output showed instead of the terminator.

Converted all the keyboard layouts provided with Mac OS X 10.4.5, giving a few more layouts than in previous versions. In particular, there are Hangul, SCIM and TCIM layouts which were not available before.

December 30, 2005: released version 1.6.5

Fixed a crash when adding a new modifier combination.

In previous versions (1.6.2–1.6.4), not all keyboard types would be available when opening or creating a new keyboard as the start-up action. This is now fixed, and all keyboard types are available at start-up as well as when opening or creating a new keyboard layout with the menu commands.

Ukelele now uses “Smart Crash Reports”. If you are running Mac OS X 10.4 (Tiger), you can go to {link:http://www.unsanity.com/smartcrashreports/} and download the client software. It enables you to send any crash logs directly to the author. This is not required for Ukelele to operate, and is intended to help the developer respond to crash reports more quickly.

September 22, 2005: released version 1.6.4

The fix in 1.6.3 didn’t work correctly. I believe that it’s fixed correctly now.

Fixed the code in naming new files so that you don’t get two {literal:.keylayout} extensions in the file name.

Changed the handling of key down events slightly to improve visual appearance when the command key has been held down.

September 13, 2005: released version 1.6.3

Fixed a bug causing a crash on saving of a keyboard layout without any dead keys.

September 9, 2005: released version 1.6.2

Fixed an issue when undoing a change to a key which did not already have output.

The modifiers editor was not deleting the last row when a combination was deleted, and trying to delete it again led to a crash. This is now fixed.

Fixed a bug which caused a crash on quitting occasionally.

Added support for more keyboard types (all types recognised by Keyboard Viewer for Panther and Tiger or Key Caps for Jaguar).

Tweaked the code for determining whether to show output as small or large on a key cap.

Fixed a bug which failed to refresh the display of a key with no output, leaving it looking as though it had whatever output was last displayed. This was most noticeable when editing dead keys.

Correctly calculate the maxout figure, the maximum number of characters produced by a keystroke or sequence of keystrokes. A bug in calculation in earlier versions made some keyboard layouts behave incorrectly.

July 19, 2005: released version 1.6.1

Added a version that will run on Mac OS X 10.2.x (Jaguar) — identical except that it does not provide information about XML errors when opening a file that is not valid XML.

Fixed a bug that caused a crash when creating a dead key when the trigger did not have any output assigned to it.

The dialog asking whether to save changes now shows the long name of the file rather than the 31-character shortened version.

Fixed some issues with display when the Fn key is down (on some iBook and PowerBook keyboards).

June 29, 2005: released version 1.6

Fixed a problem which caused a crash when double-clicking a key which has no output.

Handled a problem which could cause a crash when clicking the splash screen just before it goes away with the timer.

Improved the display of control characters and symbols for control keys.

Improved the speed of determining whether the text will fit on the key cap.

Changed button labels in some dialogs to avoid using “Yes” and “No”, so that it is clearer what action will happen when the button is clicked.

Fixed a crash when creating a dead key.

April 28, 2005: released version 1.6b1

Added the capability of changing the output of control keys by double-clicking them (not drag and drop).

Changed the way that Ukelele determines whether to show a key cap in the normal size or the reduced size, based on what will fit into the key cap on screen. Also tries to be intelligent about how to show non-printable characters. Unfortunately, this is a lot slower.

Fixed a bug which caused doubling of comments in the actions element in the keyboard layout file, when there was a comment between two actions. Duplicate comments are now deleted on saving the file.

Fixed a bug which caused a crash when creating a dead key from a key that had no output before creating the dead key.

Repaired an error in the Serbian keyboard layout which prevented it being used.

Fixed a cosmetic bug in the display when changing state names (some characters would appear to disappear).

Fixed a cosmetic bug when the menu would display “Hide” for a floating window (State Stack, Key Code or JIS Palette) that had been closed with the close button rather than through the menu.

Reworded an error message that would appear if the selected physical keyboard layout could not be loaded (which should never happen, but appears to happen to some people).

Provided more information about the error in the dialog box displayed when a file is invalid XML.

Changed the default keyboard layout to the same as Keyboard Viewer (original “Cosmo” USB keyboard).

Fixed a crash when double-clicking the key cap in the terminator dialog.

Ukelele should now correctly display characters out of the Basic Multilingual Plane (i.e. code points greater than U+FFFF).

Fixed a bug which would sometimes cause a keyboard layout to be invalid when creating a second-level or higher dead key (i.e. a dead key starting from a state other than “none”).

Fixed a crash when saving a keyboard layout which was read from a file not encoded as UTF-8.

January 16, 2005: released version 1.5

Lowered the baseline so that tall characters (such as those with two diacritics) show up correctly (this was in 1.5b2, but not noted then).

Fixed a bug where dragging and dropping certain characters could create an output file which is illegal XML, and so would not appear in the input menu.

Fixed a bug which, in certain circumstances, would put the program into an infinite loop when creating a dead key.

Changed the pop-up menus for action and state names to make a more readable form (convert to MacRoman rather than UTF-8).

January 7, 2005: released version 1.5b2

Included XML versions of all the non-Unicode system keyboard layouts (converted to XML with Apple’s {literal:klkchrtoxml} and {literal:kluchrtoxml} tools, part of {link:http://developer.apple.com/fonts/OSXTools.html Font Tools 2.0}).

Fixed a bug that caused a crash when the JIS palette was closed with the close box.

Fixed a bug that caused a crash when clicking on a key to select it as a dead key trigger.

Corrected the output for the up arrow and down arrow (they had been reversed).

Fixed a bug that caused a crash on save if the opened file was not in UTF-8 format but still valid XML (e.g. ISO 8859-1 coding).

December 21, 2004: released version 1.5b1 — first test release of Ukelele 1.5, adding significant new features to the 1.0 version:

Rewrote the code for displaying keyboards so that any physical keyboard layout that the system knows about can be displayed.

Key sizes can be made larger to see longer output strings.

Added output for non-editable keys (return, enter, tab, escape, delete, F-keys, arrow keys, page up, page down, etc) when starting from an empty keyboard layout.

Missing non-editable key output is diagnosed and can be repaired when a keyboard layout is opened. A menu command is also provided so that it can be done at any time, if you elect not to do so when opening the file.

Added display of symbols for modifier and non-editable keys so that they can be recognised.

Added a palette for use with JIS keyboards to allow changes to be for JIS only or for all keyboard types.

New menu commands to change state and action names.

New menu command to remove unused states.

New comments editor that allows you to add your own comments to the XML keyboard layout file, and edit or delete them as well.

Improved the new file dialog to allow creation of an empty layout, a layout based on a system keyboard layout, or a copy of an existing, non-system keyboard layout.

Changed the dialog for editing or creating dead keys to allow easy access to existing dead keys.

Added a command to import a dead key from another keyboard layout.

The modifiers editor window now shows the default modifier index.

Added more keyboard shortcuts.

You can undo almost any action now, including creating a dead key.

Wrote a real manual, as well as updated the help book.

Made first steps to making Ukelele ready for localizing.

Improved error reporting from keyboard layout files that are not valid for some reason.

September 20, 2004: released version 1.0.5

Fixed a bug that meant that use of the Fn or Num Lock keys did not work correctly (the keypad and non-keypad keys were mapped together). However, some keyboard layouts affected by this bug may still have problems caused by the bug, and may need to be regenerated. The problem can be fixed by editing the XML output file. If you really want to do that, ask for details.

Changed the position of the state window so that it can be seen on 800 x 600 screens.

Finally fixed the bug noted in 1.0b4, where creating a keyboard layout based on a system keyboard layout would crash in Mac OS X 10.2.8, and perhaps other versions as well.

Added a feature showing the names of missing actions when reading a keyboard layout file which is missing some actions.

Added a new command to set the script code and numeric ID of the keyboard.

August 14, 2004: released version 1.0.4

Fixed an issue that crippled the modifier combination dialog.

Corrected the handling of double-clicking the terminator key cap in the dialog asking for a terminator.

August 2, 2004: released version 1.0.3

Really fixed the bug with keyboard layouts created with “New…”. (The fix in version 1.0.1 didn’t actually solve the problem.)

If the bug was manifested in a keyboard layout file, it will be corrected on opening in 1.0.3. A dialog will tell you if this has happened.

Added comments to the keyboard layout files indicating creation and modification times.

Removed some unused code.

Fixed a memory leak when saving a keyboard layout file.

Added information about keyboard names and icons to the help book.

July 17, 2004: released version 1.0.2

Made deleting a dead key work correctly and properly flag it as non-undoable.

Improved documentation of multi-level dead keys in the help book.

Cosmetic changes to various windows and dialogs.

July 13, 2004: released version 1.0.1

Corrected a bug which made keyboard layouts created with “New…” invalid.

Added the ability to edit dead-key terminators.

June 28, 2004: released version 1.0

This is the final release of Ukelele 1.0, with no currently-known bugs.

April 13, 2004: released version 1.0b4

Fixed a problem where an XML control character (&”) was assigned to a key, resulting in invalid XML.

Known problem: One user reported a crash when creating a new keyboard layout based on a system keyboard layout. It may be a Jaguar vs. Panther issue, but I haven’t been able to reproduce it. If you can reproduce this problem, please let me know exactly what you did!

March 31, 2004: released version 1.0b3.

Fixed a bug which caused Ukelele to crash after the state window was closed.

Created a real JIS keyboard layout for PowerBook/iBook keyboards.

Added preferences window for setting whether the splash screen is shown at startup and the startup action.

Added a splash screen.

Fixed a bug which caused Ukelele to crash when adding a new modifier combination to a keyboard with exactly one existing modifier combination.

Fixed a bug with creating dead keys which put them onto the wrong modifier combination.

March 20, 2004: released version 1.0b2.

This version corrects a problem in 1.0b1 that was generating invalid XML files.