Typing glyphs on Linux
Since mid-2012, most Linux distributions with X11 have Dyalog APL keyboard support included with the distribution,[1] using xkb
, the X Keyboard Extension.[2]
setxkbmap
The simplest way to set up an APL keyboard on Linux is with the following setxkbmap
command. Enter the following in your terminal emulator of choice:
setxkbmap -layout us,apl -variant ,dyalog -option grp:switch
An explanation:
-layout us,apl
assignsus
(U.S. English) to be the primary layout, whereasapl
is secondary
-option grp:switch
assigns Right Alt to switch to the secondaryapl
layout when it is pressed, otherwiseus
is used
-variant ,dyalog
assigns the Dyalog APL variant to theapl
layout which contains modifiations unique to the Dyalog language (Note the preceding comma)
A full list of keys that can be used to switch layouts is included in /usr/share/X11/xkb/rules/evdev.lst
under the option
category.
Note: these changes are not permanent; the user will have to select one of a myriad of methods to run the command on startup. Alternatively, if they use one of the desktop environments listed below, they can follow those instructions.
GNOME
GUI
- Open the Activities menu; this is located in the top-left corner of a default GNOME 3 session (alternatively, use your Super key to open the Activities overlay):
- Search for "startup." When the Startup Applications program is highlighted, press the Enter key to open it:
- Select the Add button on the right-hand side:
- Provide a name, enter your
setxkbmap
command, and click Add when finished:
Terminal
- Navigate to
~/.config/autostart
and create a.desktop
with any name that will help you remember its function. - Add the following to the contents of your file, customizing to suit your needs:
[Desktop Entry] Type=Application Exec=setxkbmap -layout us,apl -variant ,dyalog -option grp:switch Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name[en_US]=apl-keyboard Name=apl-keyboard Comment[en_US]= Comment=
LXDE
- Prepend an
@
to thesetxkbmap
command from above:@setxkbmap -layout us,apl -variant ,dyalog -option grp:switch
- Add it as a line in your user's LXDE
autostart
file, located at:~/.config/lxsession/LXDE/autostart
For Lubuntu versions up to and including 18.04 (before the LXQt split), the location of autostart
is ~/.config/lxsession/Lubuntu/autostart
.
LXQt
GUI
- From your LXQt panel, navigate to Preferences → LXQt Settings → Session Settings; alternatively, enter
lxqt-config-session
in your terminal emulator. You will be greeted with the following window:
- Select the
LXQt Autostart
dropdown (it will be highlighted as shown above) and click the Add button to display the following pop-up window:
- Provide a name, enter your
setxkbmap
command, and click OK when finished.
Terminal
The above GUI approach merely creates a .desktop
file in the user's ~/.config/autostart
. Create your own file in the autostart
directory whose contents are as follows, to replicate the functionality achieved through the GUI:
[Desktop Entry] Exec=setxkbmap -layout us,apl -variant ,dyalog -option grp:switch Name=apl-keyboard OnlyShowIn=LXQt; Type=Application Version=1.0
MATE
GUI
- Open your MATE menu (in the top-left corner of a default environment) and select Control Center at the bottom of the window:
- Scroll down through the main window, and under the Personal category, select Startup Applications:
- Click the Add button on the right-hand side:
- Provide a name, enter your
setxkbmap
command, and click Add when finished:
Terminal
Navigate to ~/.config/autostart
and create a .desktop
with any name that will help you remember its function.
Add the following to the contents of your file, customizing to suit your needs:
[Desktop Entry] Type=Application Exec=setxkbmap -layout us,apl -variant ,dyalog -option grp:switch Hidden=false X-MATE-Autostart-enabled=true Name[en_US]=apl-keyboard Name=apl-keyboard Comment[en_US]= Comment= X-MATE-Autostart-Delay=0
Xfce
A tutorial specific to Xfce's config files can be found at this GitHub repository.
Troubleshooting
Why do my settings keep getting forgotten during my X windows session?
Since at least March 2020 there have been issues with setxkbmap
settings being reset without user instruction under the X Windows System.
Below is a script written in Raku that continuously checks for this undesirable reset behavior and puts the intended settings back in place.[3].
#!/usr/bin/env raku # Small script to ensure that APL keyboard layout is still set in xkb settings. # Note that this is a patch for some sort of deranged time-based reset of these # settings that is happening at a lower level of the Xorg-based Linux user experience. # # It's not clear what is causing these resets but this script allows us to more # or less not care about it and get on with our hacking. # # Released under Artistic License by John Longwalker 2020 my $total-checks = 0; sub xkbmap-contains-apl() { $total-checks++; so qx{ setxkbmap -query | grep '^layout:.*\<apl\>' }; # shell-out is easy as usual in a Perl } my $total-resets = 0; sub set-xkbmap-for-apl($key, $verbose) { say "Reset total is now {++$total-resets} -- {DateTime.now}" if $verbose; my $xkb-settings = chomp qx{ setxkbmap -query }; my ($layout, $variant, $options); if $xkb-settings ~~ /^^ "layout:" \s* $<layout>=(<.graph>*) $$/ { $layout = $<layout>.Str; } else { die "Aborting. The xkb settings do not specify any layout:\n$xkb-settings"; } if $xkb-settings ~~ /^^ "variant:" \s* $<variant>=(<.graph>*) $$/ { $variant = $<variant>.Str; } if $xkb-settings ~~ /^^ "options:" \s* $<options>=(<.graph>*) $$/ { $options = $<options>.Str; } $layout = ($layout, 'apl').join(','); $variant = $variant ?? ($variant, 'dyalog') !! 'dyalog'; $options = $options ?? ($options, "grp:$key").join(',') !! "grp:$key"; my $invocation = "setxkbmap -layout $layout -variant $variant -option $options"; say "Invocation: $invocation" if $verbose; qqx{ $invocation }; } # You can use --interval, --key, and -v/--verbose on the command line. sub MAIN(:$interval = 30, :$key = 'switch', :v($verbose) = False) { react { whenever Supply.interval($interval) { set-xkbmap-for-apl($key, $verbose) if not xkbmap-contains-apl; } whenever signal(SIGINT) { say "Reset a total of $total-resets out of $total-checks checks" if $verbose; exit; } } }
References
- ↑ Dyalog Forums. Keyboard setup on Linux. Sep 21, 2010.
- ↑ Geoff Streeter. Supporting APL keyboards on Linux. Dyalog '10.
- ↑ 5ab5traction5 blog. Raku to the Rescue: APL Keyboard Keeper
APL development [edit] | |
---|---|
Interface | Session ∙ Typing glyphs (on Linux) ∙ Fonts ∙ Text editors |
Publications | Introductions ∙ Learning resources ∙ Simple examples ∙ Advanced examples ∙ Mnemonics ∙ ISO 8485:1989 ∙ ISO/IEC 13751:2001 ∙ A Dictionary of APL ∙ Case studies ∙ Documentation suites ∙ Books ∙ Papers ∙ Videos ∙ APL Quote Quad ∙ Vector journal ∙ Terminology (Chinese, German) ∙ Neural networks ∙ Error trapping with Dyalog APL (in forms) |
Sharing code | Backwards compatibility ∙ APLcart ∙ APLTree ∙ APL-Cation ∙ Dfns workspace ∙ Tatin ∙ Cider |
Implementation | Resources ∙ Open-source ∙ Magic function ∙ Performance ∙ APL hardware |
Developers | Timeline of corporations ∙ APL2000 ∙ Dyalog ∙ IBM ∙ IPSA ∙ STSC |
APL glyphs [edit] | |
---|---|
Information | Glyph ∙ Typing glyphs (on Linux) ∙ Unicode ∙ Fonts ∙ Mnemonics ∙ Overstrikes ∙ Migration level |
Individual glyphs | Jot (∘ ) ∙ Right Shoe (⊃ ) ∙ Up Arrow (↑ ) ∙ Zilde (⍬ ) ∙ High minus (¯ ) ∙ Dot (. ) ∙ Del (∇ )
|